diff --git a/AbandonedRuins-Silly_0.1.0/control.lua b/AbandonedRuins-Silly/control.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/control.lua rename to AbandonedRuins-Silly/control.lua diff --git a/AbandonedRuins-Silly_0.1.0/info.json b/AbandonedRuins-Silly/info.json similarity index 100% rename from AbandonedRuins-Silly_0.1.0/info.json rename to AbandonedRuins-Silly/info.json diff --git a/AbandonedRuins-Silly_0.1.0/ruins/AProvider-Box-M.lua b/AbandonedRuins-Silly/ruins/AProvider-Box-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/AProvider-Box-M.lua rename to AbandonedRuins-Silly/ruins/AProvider-Box-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Air-Filter-M.lua b/AbandonedRuins-Silly/ruins/Air-Filter-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Air-Filter-M.lua rename to AbandonedRuins-Silly/ruins/Air-Filter-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Ammo-Dump-L.lua b/AbandonedRuins-Silly/ruins/Ammo-Dump-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Ammo-Dump-L.lua rename to AbandonedRuins-Silly/ruins/Ammo-Dump-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Barrels-M.lua b/AbandonedRuins-Silly/ruins/Barrels-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Barrels-M.lua rename to AbandonedRuins-Silly/ruins/Barrels-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/BattleBot-S.lua b/AbandonedRuins-Silly/ruins/BattleBot-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/BattleBot-S.lua rename to AbandonedRuins-Silly/ruins/BattleBot-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Blue-Chip-S.lua b/AbandonedRuins-Silly/ruins/Blue-Chip-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Blue-Chip-S.lua rename to AbandonedRuins-Silly/ruins/Blue-Chip-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Blue-L.lua b/AbandonedRuins-Silly/ruins/Blue-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Blue-L.lua rename to AbandonedRuins-Silly/ruins/Blue-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Blue-Red-Chips-M.lua b/AbandonedRuins-Silly/ruins/Blue-Red-Chips-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Blue-Red-Chips-M.lua rename to AbandonedRuins-Silly/ruins/Blue-Red-Chips-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Buffer-Box-M.lua b/AbandonedRuins-Silly/ruins/Buffer-Box-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Buffer-Box-M.lua rename to AbandonedRuins-Silly/ruins/Buffer-Box-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Cargo-Plane-M.lua b/AbandonedRuins-Silly/ruins/Cargo-Plane-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Cargo-Plane-M.lua rename to AbandonedRuins-Silly/ruins/Cargo-Plane-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Casting-L.lua b/AbandonedRuins-Silly/ruins/Casting-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Casting-L.lua rename to AbandonedRuins-Silly/ruins/Casting-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Clockwork-S.lua b/AbandonedRuins-Silly/ruins/Clockwork-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Clockwork-S.lua rename to AbandonedRuins-Silly/ruins/Clockwork-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Con-Bot-M.lua b/AbandonedRuins-Silly/ruins/Con-Bot-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Con-Bot-M.lua rename to AbandonedRuins-Silly/ruins/Con-Bot-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Con-Bot-S.lua b/AbandonedRuins-Silly/ruins/Con-Bot-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Con-Bot-S.lua rename to AbandonedRuins-Silly/ruins/Con-Bot-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Craft-Potion-S.lua b/AbandonedRuins-Silly/ruins/Craft-Potion-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Craft-Potion-S.lua rename to AbandonedRuins-Silly/ruins/Craft-Potion-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Crystalize4-L.lua b/AbandonedRuins-Silly/ruins/Crystalize4-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Crystalize4-L.lua rename to AbandonedRuins-Silly/ruins/Crystalize4-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Droids-M.lua b/AbandonedRuins-Silly/ruins/Droids-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Droids-M.lua rename to AbandonedRuins-Silly/ruins/Droids-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Electric-Steam-L.lua b/AbandonedRuins-Silly/ruins/Electric-Steam-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Electric-Steam-L.lua rename to AbandonedRuins-Silly/ruins/Electric-Steam-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Electrolyser-L.lua b/AbandonedRuins-Silly/ruins/Electrolyser-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Electrolyser-L.lua rename to AbandonedRuins-Silly/ruins/Electrolyser-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Electrolyser-M.lua b/AbandonedRuins-Silly/ruins/Electrolyser-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Electrolyser-M.lua rename to AbandonedRuins-Silly/ruins/Electrolyser-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Exp-Potion-S.lua b/AbandonedRuins-Silly/ruins/Exp-Potion-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Exp-Potion-S.lua rename to AbandonedRuins-Silly/ruins/Exp-Potion-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Filter-Inserter-S.lua b/AbandonedRuins-Silly/ruins/Filter-Inserter-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Filter-Inserter-S.lua rename to AbandonedRuins-Silly/ruins/Filter-Inserter-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Filtration-Unit-L.lua b/AbandonedRuins-Silly/ruins/Filtration-Unit-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Filtration-Unit-L.lua rename to AbandonedRuins-Silly/ruins/Filtration-Unit-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/FlameBot-S.lua b/AbandonedRuins-Silly/ruins/FlameBot-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/FlameBot-S.lua rename to AbandonedRuins-Silly/ruins/FlameBot-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Gas-Refinery-M.lua b/AbandonedRuins-Silly/ruins/Gas-Refinery-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Gas-Refinery-M.lua rename to AbandonedRuins-Silly/ruins/Gas-Refinery-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Green-Chip-S.lua b/AbandonedRuins-Silly/ruins/Green-Chip-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Green-Chip-S.lua rename to AbandonedRuins-Silly/ruins/Green-Chip-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Heal-Potion-S.lua b/AbandonedRuins-Silly/ruins/Heal-Potion-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Heal-Potion-S.lua rename to AbandonedRuins-Silly/ruins/Heal-Potion-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Hydro-plant-M.lua b/AbandonedRuins-Silly/ruins/Hydro-plant-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Hydro-plant-M.lua rename to AbandonedRuins-Silly/ruins/Hydro-plant-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-Bat-M.lua b/AbandonedRuins-Silly/ruins/Inv-Bat-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-Bat-M.lua rename to AbandonedRuins-Silly/ruins/Inv-Bat-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-L.lua b/AbandonedRuins-Silly/ruins/Inv-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-L.lua rename to AbandonedRuins-Silly/ruins/Inv-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-Lpd-M.lua b/AbandonedRuins-Silly/ruins/Inv-Lpd-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-Lpd-M.lua rename to AbandonedRuins-Silly/ruins/Inv-Lpd-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-Modular-M.lua b/AbandonedRuins-Silly/ruins/Inv-Modular-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-Modular-M.lua rename to AbandonedRuins-Silly/ruins/Inv-Modular-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-Shield-M.lua b/AbandonedRuins-Silly/ruins/Inv-Shield-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-Shield-M.lua rename to AbandonedRuins-Silly/ruins/Inv-Shield-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Inv-Solar-M.lua b/AbandonedRuins-Silly/ruins/Inv-Solar-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Inv-Solar-M.lua rename to AbandonedRuins-Silly/ruins/Inv-Solar-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Lazors-L.lua b/AbandonedRuins-Silly/ruins/Lazors-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Lazors-L.lua rename to AbandonedRuins-Silly/ruins/Lazors-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Logi-Bot-M.lua b/AbandonedRuins-Silly/ruins/Logi-Bot-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Logi-Bot-M.lua rename to AbandonedRuins-Silly/ruins/Logi-Bot-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Lube-M.lua b/AbandonedRuins-Silly/ruins/Lube-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Lube-M.lua rename to AbandonedRuins-Silly/ruins/Lube-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Mil-Tech-L.lua b/AbandonedRuins-Silly/ruins/Mil-Tech-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Mil-Tech-L.lua rename to AbandonedRuins-Silly/ruins/Mil-Tech-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Nuke-Rods-M.lua b/AbandonedRuins-Silly/ruins/Nuke-Rods-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Nuke-Rods-M.lua rename to AbandonedRuins-Silly/ruins/Nuke-Rods-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Ore-Crush-Sort-L.lua b/AbandonedRuins-Silly/ruins/Ore-Crush-Sort-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Ore-Crush-Sort-L.lua rename to AbandonedRuins-Silly/ruins/Ore-Crush-Sort-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Provider-Box-M.lua b/AbandonedRuins-Silly/ruins/Provider-Box-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Provider-Box-M.lua rename to AbandonedRuins-Silly/ruins/Provider-Box-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/RPG-M.lua b/AbandonedRuins-Silly/ruins/RPG-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/RPG-M.lua rename to AbandonedRuins-Silly/ruins/RPG-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Reactor-L.lua b/AbandonedRuins-Silly/ruins/Reactor-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Reactor-L.lua rename to AbandonedRuins-Silly/ruins/Reactor-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Red-Chip-S.lua b/AbandonedRuins-Silly/ruins/Red-Chip-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Red-Chip-S.lua rename to AbandonedRuins-Silly/ruins/Red-Chip-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Red-Green-Chips-M.lua b/AbandonedRuins-Silly/ruins/Red-Green-Chips-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Red-Green-Chips-M.lua rename to AbandonedRuins-Silly/ruins/Red-Green-Chips-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Req-Box-M.lua b/AbandonedRuins-Silly/ruins/Req-Box-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Req-Box-M.lua rename to AbandonedRuins-Silly/ruins/Req-Box-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Roboport-L.lua b/AbandonedRuins-Silly/ruins/Roboport-L.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Roboport-L.lua rename to AbandonedRuins-Silly/ruins/Roboport-L.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/RocketBot-S.lua b/AbandonedRuins-Silly/ruins/RocketBot-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/RocketBot-S.lua rename to AbandonedRuins-Silly/ruins/RocketBot-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Sludge-S.lua b/AbandonedRuins-Silly/ruins/Sludge-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Sludge-S.lua rename to AbandonedRuins-Silly/ruins/Sludge-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Speed-Potion-S.lua b/AbandonedRuins-Silly/ruins/Speed-Potion-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Speed-Potion-S.lua rename to AbandonedRuins-Silly/ruins/Speed-Potion-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Storage-Box-M.lua b/AbandonedRuins-Silly/ruins/Storage-Box-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Storage-Box-M.lua rename to AbandonedRuins-Silly/ruins/Storage-Box-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Sulfuric-Acid-M.lua b/AbandonedRuins-Silly/ruins/Sulfuric-Acid-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Sulfuric-Acid-M.lua rename to AbandonedRuins-Silly/ruins/Sulfuric-Acid-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Sulfuric-Acid-S.lua b/AbandonedRuins-Silly/ruins/Sulfuric-Acid-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Sulfuric-Acid-S.lua rename to AbandonedRuins-Silly/ruins/Sulfuric-Acid-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Terminator-S.lua b/AbandonedRuins-Silly/ruins/Terminator-S.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Terminator-S.lua rename to AbandonedRuins-Silly/ruins/Terminator-S.lua diff --git a/AbandonedRuins-Silly_0.1.0/ruins/Washing-M.lua b/AbandonedRuins-Silly/ruins/Washing-M.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/ruins/Washing-M.lua rename to AbandonedRuins-Silly/ruins/Washing-M.lua diff --git a/AbandonedRuins-Silly_0.1.0/settings.lua b/AbandonedRuins-Silly/settings.lua similarity index 100% rename from AbandonedRuins-Silly_0.1.0/settings.lua rename to AbandonedRuins-Silly/settings.lua diff --git a/AbandonedRuins-Silly_0.1.0/thumbnail.png b/AbandonedRuins-Silly/thumbnail.png similarity index 100% rename from AbandonedRuins-Silly_0.1.0/thumbnail.png rename to AbandonedRuins-Silly/thumbnail.png diff --git a/AbandonedRuins_1.1.6/README.md b/AbandonedRuins/README.md similarity index 100% rename from AbandonedRuins_1.1.6/README.md rename to AbandonedRuins/README.md diff --git a/AbandonedRuins_1.1.6/annotations.lua b/AbandonedRuins/annotations.lua similarity index 100% rename from AbandonedRuins_1.1.6/annotations.lua rename to AbandonedRuins/annotations.lua diff --git a/AbandonedRuins_1.1.6/changelog.txt b/AbandonedRuins/changelog.txt similarity index 100% rename from AbandonedRuins_1.1.6/changelog.txt rename to AbandonedRuins/changelog.txt diff --git a/AbandonedRuins_1.1.6/changes.txt b/AbandonedRuins/changes.txt similarity index 100% rename from AbandonedRuins_1.1.6/changes.txt rename to AbandonedRuins/changes.txt diff --git a/AbandonedRuins_1.1.6/control.lua b/AbandonedRuins/control.lua similarity index 100% rename from AbandonedRuins_1.1.6/control.lua rename to AbandonedRuins/control.lua diff --git a/AbandonedRuins_1.1.6/data.lua b/AbandonedRuins/data.lua similarity index 100% rename from AbandonedRuins_1.1.6/data.lua rename to AbandonedRuins/data.lua diff --git a/AbandonedRuins_1.1.6/docs/CONTRIBUTING.md b/AbandonedRuins/docs/CONTRIBUTING.md similarity index 100% rename from AbandonedRuins_1.1.6/docs/CONTRIBUTING.md rename to AbandonedRuins/docs/CONTRIBUTING.md diff --git a/AbandonedRuins_1.1.6/docs/format.md b/AbandonedRuins/docs/format.md similarity index 100% rename from AbandonedRuins_1.1.6/docs/format.md rename to AbandonedRuins/docs/format.md diff --git a/AbandonedRuins_1.1.6/docs/ruin_sets.md b/AbandonedRuins/docs/ruin_sets.md similarity index 100% rename from AbandonedRuins_1.1.6/docs/ruin_sets.md rename to AbandonedRuins/docs/ruin_sets.md diff --git a/AbandonedRuins_1.1.6/expression_parsing.lua b/AbandonedRuins/expression_parsing.lua similarity index 100% rename from AbandonedRuins_1.1.6/expression_parsing.lua rename to AbandonedRuins/expression_parsing.lua diff --git a/AbandonedRuins_1.1.6/graphics/AbandonedRuins-claim-shortcut.png b/AbandonedRuins/graphics/AbandonedRuins-claim-shortcut.png similarity index 100% rename from AbandonedRuins_1.1.6/graphics/AbandonedRuins-claim-shortcut.png rename to AbandonedRuins/graphics/AbandonedRuins-claim-shortcut.png diff --git a/AbandonedRuins_1.1.6/graphics/AbandonedRuins-claim.png b/AbandonedRuins/graphics/AbandonedRuins-claim.png similarity index 100% rename from AbandonedRuins_1.1.6/graphics/AbandonedRuins-claim.png rename to AbandonedRuins/graphics/AbandonedRuins-claim.png diff --git a/AbandonedRuins_1.1.6/info.json b/AbandonedRuins/info.json similarity index 100% rename from AbandonedRuins_1.1.6/info.json rename to AbandonedRuins/info.json diff --git a/AbandonedRuins_1.1.6/locale/en/locale.cfg b/AbandonedRuins/locale/en/locale.cfg similarity index 100% rename from AbandonedRuins_1.1.6/locale/en/locale.cfg rename to AbandonedRuins/locale/en/locale.cfg diff --git a/AbandonedRuins_1.1.6/locale/ru/locale.cfg b/AbandonedRuins/locale/ru/locale.cfg similarity index 100% rename from AbandonedRuins_1.1.6/locale/ru/locale.cfg rename to AbandonedRuins/locale/ru/locale.cfg diff --git a/AbandonedRuins_1.1.6/ruins/base_ruin_set.lua b/AbandonedRuins/ruins/base_ruin_set.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/base_ruin_set.lua rename to AbandonedRuins/ruins/base_ruin_set.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/beacon1.lua b/AbandonedRuins/ruins/drdLarge/beacon1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/beacon1.lua rename to AbandonedRuins/ruins/drdLarge/beacon1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/burner1.lua b/AbandonedRuins/ruins/drdLarge/burner1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/burner1.lua rename to AbandonedRuins/ruins/drdLarge/burner1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/dump.lua b/AbandonedRuins/ruins/drdLarge/dump.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/dump.lua rename to AbandonedRuins/ruins/drdLarge/dump.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/heater1.lua b/AbandonedRuins/ruins/drdLarge/heater1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/heater1.lua rename to AbandonedRuins/ruins/drdLarge/heater1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/laser1-1.lua b/AbandonedRuins/ruins/drdLarge/laser1-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/laser1-1.lua rename to AbandonedRuins/ruins/drdLarge/laser1-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/ore-comb1.lua b/AbandonedRuins/ruins/drdLarge/ore-comb1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/ore-comb1.lua rename to AbandonedRuins/ruins/drdLarge/ore-comb1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/orecrusher1.lua b/AbandonedRuins/ruins/drdLarge/orecrusher1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/orecrusher1.lua rename to AbandonedRuins/ruins/drdLarge/orecrusher1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/sniper1-1.lua b/AbandonedRuins/ruins/drdLarge/sniper1-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/sniper1-1.lua rename to AbandonedRuins/ruins/drdLarge/sniper1-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/traindepo1.lua b/AbandonedRuins/ruins/drdLarge/traindepo1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/traindepo1.lua rename to AbandonedRuins/ruins/drdLarge/traindepo1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret4-1.lua b/AbandonedRuins/ruins/drdLarge/turret4-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret4-1.lua rename to AbandonedRuins/ruins/drdLarge/turret4-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret4-2.lua b/AbandonedRuins/ruins/drdLarge/turret4-2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret4-2.lua rename to AbandonedRuins/ruins/drdLarge/turret4-2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret5-1.lua b/AbandonedRuins/ruins/drdLarge/turret5-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret5-1.lua rename to AbandonedRuins/ruins/drdLarge/turret5-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret5-2.lua b/AbandonedRuins/ruins/drdLarge/turret5-2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret5-2.lua rename to AbandonedRuins/ruins/drdLarge/turret5-2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret5-3.lua b/AbandonedRuins/ruins/drdLarge/turret5-3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret5-3.lua rename to AbandonedRuins/ruins/drdLarge/turret5-3.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/turret5-4.lua b/AbandonedRuins/ruins/drdLarge/turret5-4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/turret5-4.lua rename to AbandonedRuins/ruins/drdLarge/turret5-4.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/wind1.lua b/AbandonedRuins/ruins/drdLarge/wind1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/wind1.lua rename to AbandonedRuins/ruins/drdLarge/wind1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdLarge/woodfarm1.lua b/AbandonedRuins/ruins/drdLarge/woodfarm1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdLarge/woodfarm1.lua rename to AbandonedRuins/ruins/drdLarge/woodfarm1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/aircleaner1.lua b/AbandonedRuins/ruins/drdMedium/aircleaner1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/aircleaner1.lua rename to AbandonedRuins/ruins/drdMedium/aircleaner1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/assemb1.lua b/AbandonedRuins/ruins/drdMedium/assemb1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/assemb1.lua rename to AbandonedRuins/ruins/drdMedium/assemb1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/burnlab1.lua b/AbandonedRuins/ruins/drdMedium/burnlab1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/burnlab1.lua rename to AbandonedRuins/ruins/drdMedium/burnlab1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/comb1.lua b/AbandonedRuins/ruins/drdMedium/comb1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/comb1.lua rename to AbandonedRuins/ruins/drdMedium/comb1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/electricforge1.lua b/AbandonedRuins/ruins/drdMedium/electricforge1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/electricforge1.lua rename to AbandonedRuins/ruins/drdMedium/electricforge1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/electricforge2.lua b/AbandonedRuins/ruins/drdMedium/electricforge2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/electricforge2.lua rename to AbandonedRuins/ruins/drdMedium/electricforge2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/electricminer1.lua b/AbandonedRuins/ruins/drdMedium/electricminer1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/electricminer1.lua rename to AbandonedRuins/ruins/drdMedium/electricminer1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/fluidburner1.lua b/AbandonedRuins/ruins/drdMedium/fluidburner1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/fluidburner1.lua rename to AbandonedRuins/ruins/drdMedium/fluidburner1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/fluidburner2.lua b/AbandonedRuins/ruins/drdMedium/fluidburner2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/fluidburner2.lua rename to AbandonedRuins/ruins/drdMedium/fluidburner2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/solar1.lua b/AbandonedRuins/ruins/drdMedium/solar1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/solar1.lua rename to AbandonedRuins/ruins/drdMedium/solar1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/sound1.lua b/AbandonedRuins/ruins/drdMedium/sound1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/sound1.lua rename to AbandonedRuins/ruins/drdMedium/sound1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/tubes1.lua b/AbandonedRuins/ruins/drdMedium/tubes1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/tubes1.lua rename to AbandonedRuins/ruins/drdMedium/tubes1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/tubes2.lua b/AbandonedRuins/ruins/drdMedium/tubes2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/tubes2.lua rename to AbandonedRuins/ruins/drdMedium/tubes2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/tubes3.lua b/AbandonedRuins/ruins/drdMedium/tubes3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/tubes3.lua rename to AbandonedRuins/ruins/drdMedium/tubes3.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret1-1.lua b/AbandonedRuins/ruins/drdMedium/turret1-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret1-1.lua rename to AbandonedRuins/ruins/drdMedium/turret1-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret1-2.lua b/AbandonedRuins/ruins/drdMedium/turret1-2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret1-2.lua rename to AbandonedRuins/ruins/drdMedium/turret1-2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret2-1.lua b/AbandonedRuins/ruins/drdMedium/turret2-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret2-1.lua rename to AbandonedRuins/ruins/drdMedium/turret2-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret2-2.lua b/AbandonedRuins/ruins/drdMedium/turret2-2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret2-2.lua rename to AbandonedRuins/ruins/drdMedium/turret2-2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret2-3.lua b/AbandonedRuins/ruins/drdMedium/turret2-3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret2-3.lua rename to AbandonedRuins/ruins/drdMedium/turret2-3.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret2-4.lua b/AbandonedRuins/ruins/drdMedium/turret2-4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret2-4.lua rename to AbandonedRuins/ruins/drdMedium/turret2-4.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret3-1.lua b/AbandonedRuins/ruins/drdMedium/turret3-1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret3-1.lua rename to AbandonedRuins/ruins/drdMedium/turret3-1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret3-2.lua b/AbandonedRuins/ruins/drdMedium/turret3-2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret3-2.lua rename to AbandonedRuins/ruins/drdMedium/turret3-2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/turret3-3.lua b/AbandonedRuins/ruins/drdMedium/turret3-3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/turret3-3.lua rename to AbandonedRuins/ruins/drdMedium/turret3-3.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/windgen1.lua b/AbandonedRuins/ruins/drdMedium/windgen1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/windgen1.lua rename to AbandonedRuins/ruins/drdMedium/windgen1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/windgen2.lua b/AbandonedRuins/ruins/drdMedium/windgen2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/windgen2.lua rename to AbandonedRuins/ruins/drdMedium/windgen2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdMedium/woodchest1.lua b/AbandonedRuins/ruins/drdMedium/woodchest1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdMedium/woodchest1.lua rename to AbandonedRuins/ruins/drdMedium/woodchest1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/gigpole1.lua b/AbandonedRuins/ruins/drdSmall/gigpole1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/gigpole1.lua rename to AbandonedRuins/ruins/drdSmall/gigpole1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/gigtube1.lua b/AbandonedRuins/ruins/drdSmall/gigtube1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/gigtube1.lua rename to AbandonedRuins/ruins/drdSmall/gigtube1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/gigtube2.lua b/AbandonedRuins/ruins/drdSmall/gigtube2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/gigtube2.lua rename to AbandonedRuins/ruins/drdSmall/gigtube2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/small-miniloader1.lua b/AbandonedRuins/ruins/drdSmall/small-miniloader1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/small-miniloader1.lua rename to AbandonedRuins/ruins/drdSmall/small-miniloader1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallbelt1.lua b/AbandonedRuins/ruins/drdSmall/smallbelt1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallbelt1.lua rename to AbandonedRuins/ruins/drdSmall/smallbelt1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest1.lua b/AbandonedRuins/ruins/drdSmall/smallchest1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest1.lua rename to AbandonedRuins/ruins/drdSmall/smallchest1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest10.lua b/AbandonedRuins/ruins/drdSmall/smallchest10.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest10.lua rename to AbandonedRuins/ruins/drdSmall/smallchest10.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest11.lua b/AbandonedRuins/ruins/drdSmall/smallchest11.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest11.lua rename to AbandonedRuins/ruins/drdSmall/smallchest11.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest12.lua b/AbandonedRuins/ruins/drdSmall/smallchest12.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest12.lua rename to AbandonedRuins/ruins/drdSmall/smallchest12.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest13.lua b/AbandonedRuins/ruins/drdSmall/smallchest13.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest13.lua rename to AbandonedRuins/ruins/drdSmall/smallchest13.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest2.lua b/AbandonedRuins/ruins/drdSmall/smallchest2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest2.lua rename to AbandonedRuins/ruins/drdSmall/smallchest2.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest3.lua b/AbandonedRuins/ruins/drdSmall/smallchest3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest3.lua rename to AbandonedRuins/ruins/drdSmall/smallchest3.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest4.lua b/AbandonedRuins/ruins/drdSmall/smallchest4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest4.lua rename to AbandonedRuins/ruins/drdSmall/smallchest4.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest5.lua b/AbandonedRuins/ruins/drdSmall/smallchest5.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest5.lua rename to AbandonedRuins/ruins/drdSmall/smallchest5.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest6.lua b/AbandonedRuins/ruins/drdSmall/smallchest6.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest6.lua rename to AbandonedRuins/ruins/drdSmall/smallchest6.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest7.lua b/AbandonedRuins/ruins/drdSmall/smallchest7.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest7.lua rename to AbandonedRuins/ruins/drdSmall/smallchest7.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest8.lua b/AbandonedRuins/ruins/drdSmall/smallchest8.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest8.lua rename to AbandonedRuins/ruins/drdSmall/smallchest8.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/smallchest9.lua b/AbandonedRuins/ruins/drdSmall/smallchest9.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/smallchest9.lua rename to AbandonedRuins/ruins/drdSmall/smallchest9.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/tubes1.lua b/AbandonedRuins/ruins/drdSmall/tubes1.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/tubes1.lua rename to AbandonedRuins/ruins/drdSmall/tubes1.lua diff --git a/AbandonedRuins_1.1.6/ruins/drdSmall/tubes2.lua b/AbandonedRuins/ruins/drdSmall/tubes2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/drdSmall/tubes2.lua rename to AbandonedRuins/ruins/drdSmall/tubes2.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins.lua b/AbandonedRuins/ruins/largeRuins.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins.lua rename to AbandonedRuins/ruins/largeRuins.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/SOS.lua b/AbandonedRuins/ruins/largeRuins/SOS.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/SOS.lua rename to AbandonedRuins/ruins/largeRuins/SOS.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/destroyedEnemyFort.lua b/AbandonedRuins/ruins/largeRuins/destroyedEnemyFort.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/destroyedEnemyFort.lua rename to AbandonedRuins/ruins/largeRuins/destroyedEnemyFort.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/destroyedFort.lua b/AbandonedRuins/ruins/largeRuins/destroyedFort.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/destroyedFort.lua rename to AbandonedRuins/ruins/largeRuins/destroyedFort.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/eFurnaceRail.lua b/AbandonedRuins/ruins/largeRuins/eFurnaceRail.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/eFurnaceRail.lua rename to AbandonedRuins/ruins/largeRuins/eFurnaceRail.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/earlyGame.lua b/AbandonedRuins/ruins/largeRuins/earlyGame.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/earlyGame.lua rename to AbandonedRuins/ruins/largeRuins/earlyGame.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/fishingLake.lua b/AbandonedRuins/ruins/largeRuins/fishingLake.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/fishingLake.lua rename to AbandonedRuins/ruins/largeRuins/fishingLake.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/loggingOutpost.lua b/AbandonedRuins/ruins/largeRuins/loggingOutpost.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/loggingOutpost.lua rename to AbandonedRuins/ruins/largeRuins/loggingOutpost.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/mainBus.lua b/AbandonedRuins/ruins/largeRuins/mainBus.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/mainBus.lua rename to AbandonedRuins/ruins/largeRuins/mainBus.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/nuclearPower.lua b/AbandonedRuins/ruins/largeRuins/nuclearPower.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/nuclearPower.lua rename to AbandonedRuins/ruins/largeRuins/nuclearPower.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/orchard.lua b/AbandonedRuins/ruins/largeRuins/orchard.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/orchard.lua rename to AbandonedRuins/ruins/largeRuins/orchard.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/overwhelmedLasers.lua b/AbandonedRuins/ruins/largeRuins/overwhelmedLasers.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/overwhelmedLasers.lua rename to AbandonedRuins/ruins/largeRuins/overwhelmedLasers.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/shipwreck.lua b/AbandonedRuins/ruins/largeRuins/shipwreck.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/shipwreck.lua rename to AbandonedRuins/ruins/largeRuins/shipwreck.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/solarField.lua b/AbandonedRuins/ruins/largeRuins/solarField.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/solarField.lua rename to AbandonedRuins/ruins/largeRuins/solarField.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/swamp.lua b/AbandonedRuins/ruins/largeRuins/swamp.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/swamp.lua rename to AbandonedRuins/ruins/largeRuins/swamp.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/trainMining.lua b/AbandonedRuins/ruins/largeRuins/trainMining.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/trainMining.lua rename to AbandonedRuins/ruins/largeRuins/trainMining.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/trainMining2.lua b/AbandonedRuins/ruins/largeRuins/trainMining2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/trainMining2.lua rename to AbandonedRuins/ruins/largeRuins/trainMining2.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/walledGrotto.lua b/AbandonedRuins/ruins/largeRuins/walledGrotto.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/walledGrotto.lua rename to AbandonedRuins/ruins/largeRuins/walledGrotto.lua diff --git a/AbandonedRuins_1.1.6/ruins/largeRuins/walledOrchard.lua b/AbandonedRuins/ruins/largeRuins/walledOrchard.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/largeRuins/walledOrchard.lua rename to AbandonedRuins/ruins/largeRuins/walledOrchard.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins.lua b/AbandonedRuins/ruins/mediumRuins.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins.lua rename to AbandonedRuins/ruins/mediumRuins.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/assemblingLine.lua b/AbandonedRuins/ruins/mediumRuins/assemblingLine.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/assemblingLine.lua rename to AbandonedRuins/ruins/mediumRuins/assemblingLine.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/carAssembly.lua b/AbandonedRuins/ruins/mediumRuins/carAssembly.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/carAssembly.lua rename to AbandonedRuins/ruins/mediumRuins/carAssembly.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/carBelt.lua b/AbandonedRuins/ruins/mediumRuins/carBelt.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/carBelt.lua rename to AbandonedRuins/ruins/mediumRuins/carBelt.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/centrifuges.lua b/AbandonedRuins/ruins/mediumRuins/centrifuges.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/centrifuges.lua rename to AbandonedRuins/ruins/mediumRuins/centrifuges.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/chemicalPlant.lua b/AbandonedRuins/ruins/mediumRuins/chemicalPlant.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/chemicalPlant.lua rename to AbandonedRuins/ruins/mediumRuins/chemicalPlant.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/crashedShip.lua b/AbandonedRuins/ruins/mediumRuins/crashedShip.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/crashedShip.lua rename to AbandonedRuins/ruins/mediumRuins/crashedShip.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/eFurnace.lua b/AbandonedRuins/ruins/mediumRuins/eFurnace.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/eFurnace.lua rename to AbandonedRuins/ruins/mediumRuins/eFurnace.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/encampment.lua b/AbandonedRuins/ruins/mediumRuins/encampment.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/encampment.lua rename to AbandonedRuins/ruins/mediumRuins/encampment.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/helipad.lua b/AbandonedRuins/ruins/mediumRuins/helipad.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/helipad.lua rename to AbandonedRuins/ruins/mediumRuins/helipad.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/militaryField.lua b/AbandonedRuins/ruins/mediumRuins/militaryField.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/militaryField.lua rename to AbandonedRuins/ruins/mediumRuins/militaryField.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/mountainRange.lua b/AbandonedRuins/ruins/mediumRuins/mountainRange.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/mountainRange.lua rename to AbandonedRuins/ruins/mediumRuins/mountainRange.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/nuclearAccident.lua b/AbandonedRuins/ruins/mediumRuins/nuclearAccident.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/nuclearAccident.lua rename to AbandonedRuins/ruins/mediumRuins/nuclearAccident.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/nuclearPower.lua b/AbandonedRuins/ruins/mediumRuins/nuclearPower.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/nuclearPower.lua rename to AbandonedRuins/ruins/mediumRuins/nuclearPower.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/overgrownFort.lua b/AbandonedRuins/ruins/mediumRuins/overgrownFort.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/overgrownFort.lua rename to AbandonedRuins/ruins/mediumRuins/overgrownFort.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/overwhelmedFlamers.lua b/AbandonedRuins/ruins/mediumRuins/overwhelmedFlamers.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/overwhelmedFlamers.lua rename to AbandonedRuins/ruins/mediumRuins/overwhelmedFlamers.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/overwhelmedGunturrets.lua b/AbandonedRuins/ruins/mediumRuins/overwhelmedGunturrets.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/overwhelmedGunturrets.lua rename to AbandonedRuins/ruins/mediumRuins/overwhelmedGunturrets.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/pipeChain.lua b/AbandonedRuins/ruins/mediumRuins/pipeChain.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/pipeChain.lua rename to AbandonedRuins/ruins/mediumRuins/pipeChain.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/powerSetup.lua b/AbandonedRuins/ruins/mediumRuins/powerSetup.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/powerSetup.lua rename to AbandonedRuins/ruins/mediumRuins/powerSetup.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/radarOutpost.lua b/AbandonedRuins/ruins/mediumRuins/radarOutpost.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/radarOutpost.lua rename to AbandonedRuins/ruins/mediumRuins/radarOutpost.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/roughFort.lua b/AbandonedRuins/ruins/mediumRuins/roughFort.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/roughFort.lua rename to AbandonedRuins/ruins/mediumRuins/roughFort.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/roughPerimeter.lua b/AbandonedRuins/ruins/mediumRuins/roughPerimeter.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/roughPerimeter.lua rename to AbandonedRuins/ruins/mediumRuins/roughPerimeter.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/smallOilSetup.lua b/AbandonedRuins/ruins/mediumRuins/smallOilSetup.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/smallOilSetup.lua rename to AbandonedRuins/ruins/mediumRuins/smallOilSetup.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/smeltery.lua b/AbandonedRuins/ruins/mediumRuins/smeltery.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/smeltery.lua rename to AbandonedRuins/ruins/mediumRuins/smeltery.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/storageArea.lua b/AbandonedRuins/ruins/mediumRuins/storageArea.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/storageArea.lua rename to AbandonedRuins/ruins/mediumRuins/storageArea.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/street.lua b/AbandonedRuins/ruins/mediumRuins/street.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/street.lua rename to AbandonedRuins/ruins/mediumRuins/street.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/swamp.lua b/AbandonedRuins/ruins/mediumRuins/swamp.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/swamp.lua rename to AbandonedRuins/ruins/mediumRuins/swamp.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/trappedRocks.lua b/AbandonedRuins/ruins/mediumRuins/trappedRocks.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/trappedRocks.lua rename to AbandonedRuins/ruins/mediumRuins/trappedRocks.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/treeFortTrapped.lua b/AbandonedRuins/ruins/mediumRuins/treeFortTrapped.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/treeFortTrapped.lua rename to AbandonedRuins/ruins/mediumRuins/treeFortTrapped.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/treeIsland.lua b/AbandonedRuins/ruins/mediumRuins/treeIsland.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/treeIsland.lua rename to AbandonedRuins/ruins/mediumRuins/treeIsland.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/treeRing.lua b/AbandonedRuins/ruins/mediumRuins/treeRing.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/treeRing.lua rename to AbandonedRuins/ruins/mediumRuins/treeRing.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/uraniumMining.lua b/AbandonedRuins/ruins/mediumRuins/uraniumMining.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/uraniumMining.lua rename to AbandonedRuins/ruins/mediumRuins/uraniumMining.lua diff --git a/AbandonedRuins_1.1.6/ruins/mediumRuins/walledSolar.lua b/AbandonedRuins/ruins/mediumRuins/walledSolar.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/mediumRuins/walledSolar.lua rename to AbandonedRuins/ruins/mediumRuins/walledSolar.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins.lua b/AbandonedRuins/ruins/smallRuins.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins.lua rename to AbandonedRuins/ruins/smallRuins.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/artyOutpost.lua b/AbandonedRuins/ruins/smallRuins/artyOutpost.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/artyOutpost.lua rename to AbandonedRuins/ruins/smallRuins/artyOutpost.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/artyOutpost2.lua b/AbandonedRuins/ruins/smallRuins/artyOutpost2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/artyOutpost2.lua rename to AbandonedRuins/ruins/smallRuins/artyOutpost2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/beaconedAssembler.lua b/AbandonedRuins/ruins/smallRuins/beaconedAssembler.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/beaconedAssembler.lua rename to AbandonedRuins/ruins/smallRuins/beaconedAssembler.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/buffer.lua b/AbandonedRuins/ruins/smallRuins/buffer.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/buffer.lua rename to AbandonedRuins/ruins/smallRuins/buffer.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/chemicalPlant.lua b/AbandonedRuins/ruins/smallRuins/chemicalPlant.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/chemicalPlant.lua rename to AbandonedRuins/ruins/smallRuins/chemicalPlant.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/circuitLamp.lua b/AbandonedRuins/ruins/smallRuins/circuitLamp.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/circuitLamp.lua rename to AbandonedRuins/ruins/smallRuins/circuitLamp.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/combinators.lua b/AbandonedRuins/ruins/smallRuins/combinators.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/combinators.lua rename to AbandonedRuins/ruins/smallRuins/combinators.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/concreteStumps.lua b/AbandonedRuins/ruins/smallRuins/concreteStumps.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/concreteStumps.lua rename to AbandonedRuins/ruins/smallRuins/concreteStumps.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/crashedTank.lua b/AbandonedRuins/ruins/smallRuins/crashedTank.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/crashedTank.lua rename to AbandonedRuins/ruins/smallRuins/crashedTank.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes.lua b/AbandonedRuins/ruins/smallRuins/crossOfPipes.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes.lua rename to AbandonedRuins/ruins/smallRuins/crossOfPipes.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes2.lua b/AbandonedRuins/ruins/smallRuins/crossOfPipes2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes2.lua rename to AbandonedRuins/ruins/smallRuins/crossOfPipes2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes3.lua b/AbandonedRuins/ruins/smallRuins/crossOfPipes3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes3.lua rename to AbandonedRuins/ruins/smallRuins/crossOfPipes3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes4.lua b/AbandonedRuins/ruins/smallRuins/crossOfPipes4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/crossOfPipes4.lua rename to AbandonedRuins/ruins/smallRuins/crossOfPipes4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall.lua b/AbandonedRuins/ruins/smallRuins/diagonalWall.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall.lua rename to AbandonedRuins/ruins/smallRuins/diagonalWall.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall2.lua b/AbandonedRuins/ruins/smallRuins/diagonalWall2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall2.lua rename to AbandonedRuins/ruins/smallRuins/diagonalWall2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall3.lua b/AbandonedRuins/ruins/smallRuins/diagonalWall3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/diagonalWall3.lua rename to AbandonedRuins/ruins/smallRuins/diagonalWall3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/fishHole.lua b/AbandonedRuins/ruins/smallRuins/fishHole.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/fishHole.lua rename to AbandonedRuins/ruins/smallRuins/fishHole.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/flamerOutpost.lua b/AbandonedRuins/ruins/smallRuins/flamerOutpost.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/flamerOutpost.lua rename to AbandonedRuins/ruins/smallRuins/flamerOutpost.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/garage.lua b/AbandonedRuins/ruins/smallRuins/garage.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/garage.lua rename to AbandonedRuins/ruins/smallRuins/garage.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/gateWall.lua b/AbandonedRuins/ruins/smallRuins/gateWall.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/gateWall.lua rename to AbandonedRuins/ruins/smallRuins/gateWall.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/gateWall2.lua b/AbandonedRuins/ruins/smallRuins/gateWall2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/gateWall2.lua rename to AbandonedRuins/ruins/smallRuins/gateWall2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/gears.lua b/AbandonedRuins/ruins/smallRuins/gears.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/gears.lua rename to AbandonedRuins/ruins/smallRuins/gears.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/gears2.lua b/AbandonedRuins/ruins/smallRuins/gears2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/gears2.lua rename to AbandonedRuins/ruins/smallRuins/gears2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret.lua b/AbandonedRuins/ruins/smallRuins/harmlessTurret.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret.lua rename to AbandonedRuins/ruins/smallRuins/harmlessTurret.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret2.lua b/AbandonedRuins/ruins/smallRuins/harmlessTurret2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret2.lua rename to AbandonedRuins/ruins/smallRuins/harmlessTurret2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret3.lua b/AbandonedRuins/ruins/smallRuins/harmlessTurret3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/harmlessTurret3.lua rename to AbandonedRuins/ruins/smallRuins/harmlessTurret3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/heart.lua b/AbandonedRuins/ruins/smallRuins/heart.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/heart.lua rename to AbandonedRuins/ruins/smallRuins/heart.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/labChain.lua b/AbandonedRuins/ruins/smallRuins/labChain.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/labChain.lua rename to AbandonedRuins/ruins/smallRuins/labChain.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker.lua b/AbandonedRuins/ruins/smallRuins/landMineBunker.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker.lua rename to AbandonedRuins/ruins/smallRuins/landMineBunker.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker2.lua b/AbandonedRuins/ruins/smallRuins/landMineBunker2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker2.lua rename to AbandonedRuins/ruins/smallRuins/landMineBunker2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker3.lua b/AbandonedRuins/ruins/smallRuins/landMineBunker3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/landMineBunker3.lua rename to AbandonedRuins/ruins/smallRuins/landMineBunker3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/loggingArea.lua b/AbandonedRuins/ruins/smallRuins/loggingArea.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/loggingArea.lua rename to AbandonedRuins/ruins/smallRuins/loggingArea.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup.lua b/AbandonedRuins/ruins/smallRuins/miningSetup.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup.lua rename to AbandonedRuins/ruins/smallRuins/miningSetup.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup2.lua b/AbandonedRuins/ruins/smallRuins/miningSetup2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup2.lua rename to AbandonedRuins/ruins/smallRuins/miningSetup2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup3.lua b/AbandonedRuins/ruins/smallRuins/miningSetup3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup3.lua rename to AbandonedRuins/ruins/smallRuins/miningSetup3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup4.lua b/AbandonedRuins/ruins/smallRuins/miningSetup4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/miningSetup4.lua rename to AbandonedRuins/ruins/smallRuins/miningSetup4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/nuclearAccident.lua b/AbandonedRuins/ruins/smallRuins/nuclearAccident.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/nuclearAccident.lua rename to AbandonedRuins/ruins/smallRuins/nuclearAccident.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/offshorePump.lua b/AbandonedRuins/ruins/smallRuins/offshorePump.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/offshorePump.lua rename to AbandonedRuins/ruins/smallRuins/offshorePump.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/oilPumpjack.lua b/AbandonedRuins/ruins/smallRuins/oilPumpjack.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/oilPumpjack.lua rename to AbandonedRuins/ruins/smallRuins/oilPumpjack.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/oilPumpjack2.lua b/AbandonedRuins/ruins/smallRuins/oilPumpjack2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/oilPumpjack2.lua rename to AbandonedRuins/ruins/smallRuins/oilPumpjack2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/oilRefinery.lua b/AbandonedRuins/ruins/smallRuins/oilRefinery.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/oilRefinery.lua rename to AbandonedRuins/ruins/smallRuins/oilRefinery.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/oilRefinery2.lua b/AbandonedRuins/ruins/smallRuins/oilRefinery2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/oilRefinery2.lua rename to AbandonedRuins/ruins/smallRuins/oilRefinery2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/overwhelmedTurrets.lua b/AbandonedRuins/ruins/smallRuins/overwhelmedTurrets.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/overwhelmedTurrets.lua rename to AbandonedRuins/ruins/smallRuins/overwhelmedTurrets.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/pipeline.lua b/AbandonedRuins/ruins/smallRuins/pipeline.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/pipeline.lua rename to AbandonedRuins/ruins/smallRuins/pipeline.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/pollutedWater.lua b/AbandonedRuins/ruins/smallRuins/pollutedWater.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/pollutedWater.lua rename to AbandonedRuins/ruins/smallRuins/pollutedWater.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/railSection.lua b/AbandonedRuins/ruins/smallRuins/railSection.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/railSection.lua rename to AbandonedRuins/ruins/smallRuins/railSection.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/railSection2.lua b/AbandonedRuins/ruins/smallRuins/railSection2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/railSection2.lua rename to AbandonedRuins/ruins/smallRuins/railSection2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/railSection3.lua b/AbandonedRuins/ruins/smallRuins/railSection3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/railSection3.lua rename to AbandonedRuins/ruins/smallRuins/railSection3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/railSection4.lua b/AbandonedRuins/ruins/smallRuins/railSection4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/railSection4.lua rename to AbandonedRuins/ruins/smallRuins/railSection4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls.lua b/AbandonedRuins/ruins/smallRuins/randomWalls.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls.lua rename to AbandonedRuins/ruins/smallRuins/randomWalls.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls2.lua b/AbandonedRuins/ruins/smallRuins/randomWalls2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls2.lua rename to AbandonedRuins/ruins/smallRuins/randomWalls2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls3.lua b/AbandonedRuins/ruins/smallRuins/randomWalls3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/randomWalls3.lua rename to AbandonedRuins/ruins/smallRuins/randomWalls3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/researchStation.lua b/AbandonedRuins/ruins/smallRuins/researchStation.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/researchStation.lua rename to AbandonedRuins/ruins/smallRuins/researchStation.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/researchStation2.lua b/AbandonedRuins/ruins/smallRuins/researchStation2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/researchStation2.lua rename to AbandonedRuins/ruins/smallRuins/researchStation2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/researchStation3.lua b/AbandonedRuins/ruins/smallRuins/researchStation3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/researchStation3.lua rename to AbandonedRuins/ruins/smallRuins/researchStation3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/researchStation4.lua b/AbandonedRuins/ruins/smallRuins/researchStation4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/researchStation4.lua rename to AbandonedRuins/ruins/smallRuins/researchStation4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/researchStation5.lua b/AbandonedRuins/ruins/smallRuins/researchStation5.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/researchStation5.lua rename to AbandonedRuins/ruins/smallRuins/researchStation5.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/robotCraft.lua b/AbandonedRuins/ruins/smallRuins/robotCraft.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/robotCraft.lua rename to AbandonedRuins/ruins/smallRuins/robotCraft.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/robots.lua b/AbandonedRuins/ruins/smallRuins/robots.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/robots.lua rename to AbandonedRuins/ruins/smallRuins/robots.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash.lua b/AbandonedRuins/ruins/smallRuins/rockStash.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash.lua rename to AbandonedRuins/ruins/smallRuins/rockStash.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash2.lua b/AbandonedRuins/ruins/smallRuins/rockStash2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash2.lua rename to AbandonedRuins/ruins/smallRuins/rockStash2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash3.lua b/AbandonedRuins/ruins/smallRuins/rockStash3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash3.lua rename to AbandonedRuins/ruins/smallRuins/rockStash3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash4.lua b/AbandonedRuins/ruins/smallRuins/rockStash4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash4.lua rename to AbandonedRuins/ruins/smallRuins/rockStash4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash5.lua b/AbandonedRuins/ruins/smallRuins/rockStash5.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash5.lua rename to AbandonedRuins/ruins/smallRuins/rockStash5.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash6.lua b/AbandonedRuins/ruins/smallRuins/rockStash6.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash6.lua rename to AbandonedRuins/ruins/smallRuins/rockStash6.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rockStash7.lua b/AbandonedRuins/ruins/smallRuins/rockStash7.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rockStash7.lua rename to AbandonedRuins/ruins/smallRuins/rockStash7.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/rocketFuel.lua b/AbandonedRuins/ruins/smallRuins/rocketFuel.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/rocketFuel.lua rename to AbandonedRuins/ruins/smallRuins/rocketFuel.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/shipwreck.lua b/AbandonedRuins/ruins/smallRuins/shipwreck.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/shipwreck.lua rename to AbandonedRuins/ruins/smallRuins/shipwreck.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup.lua b/AbandonedRuins/ruins/smallRuins/smallDestroyedSetup.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup.lua rename to AbandonedRuins/ruins/smallRuins/smallDestroyedSetup.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup2.lua b/AbandonedRuins/ruins/smallRuins/smallDestroyedSetup2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup2.lua rename to AbandonedRuins/ruins/smallRuins/smallDestroyedSetup2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup3.lua b/AbandonedRuins/ruins/smallRuins/smallDestroyedSetup3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup3.lua rename to AbandonedRuins/ruins/smallRuins/smallDestroyedSetup3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup4.lua b/AbandonedRuins/ruins/smallRuins/smallDestroyedSetup4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDestroyedSetup4.lua rename to AbandonedRuins/ruins/smallRuins/smallDestroyedSetup4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter.lua b/AbandonedRuins/ruins/smallRuins/smallDualSplitter.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter.lua rename to AbandonedRuins/ruins/smallRuins/smallDualSplitter.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter2.lua b/AbandonedRuins/ruins/smallRuins/smallDualSplitter2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter2.lua rename to AbandonedRuins/ruins/smallRuins/smallDualSplitter2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter3.lua b/AbandonedRuins/ruins/smallRuins/smallDualSplitter3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallDualSplitter3.lua rename to AbandonedRuins/ruins/smallRuins/smallDualSplitter3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMining.lua b/AbandonedRuins/ruins/smallRuins/smallMining.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMining.lua rename to AbandonedRuins/ruins/smallRuins/smallMining.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMining2.lua b/AbandonedRuins/ruins/smallRuins/smallMining2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMining2.lua rename to AbandonedRuins/ruins/smallRuins/smallMining2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMining3.lua b/AbandonedRuins/ruins/smallRuins/smallMining3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMining3.lua rename to AbandonedRuins/ruins/smallRuins/smallMining3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMining4.lua b/AbandonedRuins/ruins/smallRuins/smallMining4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMining4.lua rename to AbandonedRuins/ruins/smallRuins/smallMining4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain.lua b/AbandonedRuins/ruins/smallRuins/smallMountain.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain.lua rename to AbandonedRuins/ruins/smallRuins/smallMountain.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain2.lua b/AbandonedRuins/ruins/smallRuins/smallMountain2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain2.lua rename to AbandonedRuins/ruins/smallRuins/smallMountain2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain3.lua b/AbandonedRuins/ruins/smallRuins/smallMountain3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain3.lua rename to AbandonedRuins/ruins/smallRuins/smallMountain3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain4.lua b/AbandonedRuins/ruins/smallRuins/smallMountain4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallMountain4.lua rename to AbandonedRuins/ruins/smallRuins/smallMountain4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting.lua b/AbandonedRuins/ruins/smallRuins/smallSmelting.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting.lua rename to AbandonedRuins/ruins/smallRuins/smallSmelting.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting2.lua b/AbandonedRuins/ruins/smallRuins/smallSmelting2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting2.lua rename to AbandonedRuins/ruins/smallRuins/smallSmelting2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting3.lua b/AbandonedRuins/ruins/smallRuins/smallSmelting3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting3.lua rename to AbandonedRuins/ruins/smallRuins/smallSmelting3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting4.lua b/AbandonedRuins/ruins/smallRuins/smallSmelting4.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smallSmelting4.lua rename to AbandonedRuins/ruins/smallRuins/smallSmelting4.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smeltery.lua b/AbandonedRuins/ruins/smallRuins/smeltery.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smeltery.lua rename to AbandonedRuins/ruins/smallRuins/smeltery.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smeltery2.lua b/AbandonedRuins/ruins/smallRuins/smeltery2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smeltery2.lua rename to AbandonedRuins/ruins/smallRuins/smeltery2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/smeltery3.lua b/AbandonedRuins/ruins/smallRuins/smeltery3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/smeltery3.lua rename to AbandonedRuins/ruins/smallRuins/smeltery3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/solarAccu.lua b/AbandonedRuins/ruins/smallRuins/solarAccu.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/solarAccu.lua rename to AbandonedRuins/ruins/smallRuins/solarAccu.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/solarAccu2.lua b/AbandonedRuins/ruins/smallRuins/solarAccu2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/solarAccu2.lua rename to AbandonedRuins/ruins/smallRuins/solarAccu2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/spidertronCorpse.lua b/AbandonedRuins/ruins/smallRuins/spidertronCorpse.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/spidertronCorpse.lua rename to AbandonedRuins/ruins/smallRuins/spidertronCorpse.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/splitterI.lua b/AbandonedRuins/ruins/smallRuins/splitterI.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/splitterI.lua rename to AbandonedRuins/ruins/smallRuins/splitterI.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/splitterI2.lua b/AbandonedRuins/ruins/smallRuins/splitterI2.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/splitterI2.lua rename to AbandonedRuins/ruins/smallRuins/splitterI2.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/splitterI3.lua b/AbandonedRuins/ruins/smallRuins/splitterI3.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/splitterI3.lua rename to AbandonedRuins/ruins/smallRuins/splitterI3.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/steamPower.lua b/AbandonedRuins/ruins/smallRuins/steamPower.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/steamPower.lua rename to AbandonedRuins/ruins/smallRuins/steamPower.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/swamp.lua b/AbandonedRuins/ruins/smallRuins/swamp.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/swamp.lua rename to AbandonedRuins/ruins/smallRuins/swamp.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/twinLasers.lua b/AbandonedRuins/ruins/smallRuins/twinLasers.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/twinLasers.lua rename to AbandonedRuins/ruins/smallRuins/twinLasers.lua diff --git a/AbandonedRuins_1.1.6/ruins/smallRuins/twinTurrets.lua b/AbandonedRuins/ruins/smallRuins/twinTurrets.lua similarity index 100% rename from AbandonedRuins_1.1.6/ruins/smallRuins/twinTurrets.lua rename to AbandonedRuins/ruins/smallRuins/twinTurrets.lua diff --git a/AbandonedRuins_1.1.6/scenarios/debug/control.lua b/AbandonedRuins/scenarios/debug/control.lua similarity index 100% rename from AbandonedRuins_1.1.6/scenarios/debug/control.lua rename to AbandonedRuins/scenarios/debug/control.lua diff --git a/AbandonedRuins_1.1.6/scenarios/debug/description.json b/AbandonedRuins/scenarios/debug/description.json similarity index 100% rename from AbandonedRuins_1.1.6/scenarios/debug/description.json rename to AbandonedRuins/scenarios/debug/description.json diff --git a/AbandonedRuins_1.1.6/scenarios/debug/locale/en/debug.cfg b/AbandonedRuins/scenarios/debug/locale/en/debug.cfg similarity index 100% rename from AbandonedRuins_1.1.6/scenarios/debug/locale/en/debug.cfg rename to AbandonedRuins/scenarios/debug/locale/en/debug.cfg diff --git a/AbandonedRuins_1.1.6/scripts/extract_changes.sh b/AbandonedRuins/scripts/extract_changes.sh similarity index 100% rename from AbandonedRuins_1.1.6/scripts/extract_changes.sh rename to AbandonedRuins/scripts/extract_changes.sh diff --git a/AbandonedRuins_1.1.6/scripts/github_release.sh b/AbandonedRuins/scripts/github_release.sh similarity index 100% rename from AbandonedRuins_1.1.6/scripts/github_release.sh rename to AbandonedRuins/scripts/github_release.sh diff --git a/AbandonedRuins_1.1.6/settings.lua b/AbandonedRuins/settings.lua similarity index 100% rename from AbandonedRuins_1.1.6/settings.lua rename to AbandonedRuins/settings.lua diff --git a/AbandonedRuins_1.1.6/spawning.lua b/AbandonedRuins/spawning.lua similarity index 100% rename from AbandonedRuins_1.1.6/spawning.lua rename to AbandonedRuins/spawning.lua diff --git a/AbandonedRuins_1.1.6/thumbnail.png b/AbandonedRuins/thumbnail.png similarity index 100% rename from AbandonedRuins_1.1.6/thumbnail.png rename to AbandonedRuins/thumbnail.png diff --git a/AbandonedRuins_1.1.6/utilities.lua b/AbandonedRuins/utilities.lua similarity index 100% rename from AbandonedRuins_1.1.6/utilities.lua rename to AbandonedRuins/utilities.lua diff --git a/AdditionalPasteSettings_9.6.4/DisplayPlate.PNG b/AdditionalPasteSettings/DisplayPlate.PNG similarity index 100% rename from AdditionalPasteSettings_9.6.4/DisplayPlate.PNG rename to AdditionalPasteSettings/DisplayPlate.PNG diff --git a/AdditionalPasteSettings_9.6.4/LICENSE b/AdditionalPasteSettings/LICENSE similarity index 100% rename from AdditionalPasteSettings_9.6.4/LICENSE rename to AdditionalPasteSettings/LICENSE diff --git a/AdditionalPasteSettings_9.6.4/README.md b/AdditionalPasteSettings/README.md similarity index 100% rename from AdditionalPasteSettings_9.6.4/README.md rename to AdditionalPasteSettings/README.md diff --git a/AdditionalPasteSettings_9.6.4/README.me b/AdditionalPasteSettings/README.me similarity index 100% rename from AdditionalPasteSettings_9.6.4/README.me rename to AdditionalPasteSettings/README.me diff --git a/AdditionalPasteSettings_9.6.4/changelog.txt b/AdditionalPasteSettings/changelog.txt similarity index 100% rename from AdditionalPasteSettings_9.6.4/changelog.txt rename to AdditionalPasteSettings/changelog.txt diff --git a/AdditionalPasteSettings_9.6.4/config.lua b/AdditionalPasteSettings/config.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/config.lua rename to AdditionalPasteSettings/config.lua diff --git a/AdditionalPasteSettings_9.6.4/control.lua b/AdditionalPasteSettings/control.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/control.lua rename to AdditionalPasteSettings/control.lua diff --git a/AdditionalPasteSettings_9.6.4/data.lua b/AdditionalPasteSettings/data.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/data.lua rename to AdditionalPasteSettings/data.lua diff --git a/AdditionalPasteSettings_9.6.4/info.json b/AdditionalPasteSettings/info.json similarity index 100% rename from AdditionalPasteSettings_9.6.4/info.json rename to AdditionalPasteSettings/info.json diff --git a/AdditionalPasteSettings_9.6.4/lib.lua b/AdditionalPasteSettings/lib.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/lib.lua rename to AdditionalPasteSettings/lib.lua diff --git a/AdditionalPasteSettings_9.6.4/locale/en/names.cfg b/AdditionalPasteSettings/locale/en/names.cfg similarity index 100% rename from AdditionalPasteSettings_9.6.4/locale/en/names.cfg rename to AdditionalPasteSettings/locale/en/names.cfg diff --git a/AdditionalPasteSettings_9.6.4/settings.lua b/AdditionalPasteSettings/settings.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/settings.lua rename to AdditionalPasteSettings/settings.lua diff --git a/AdditionalPasteSettings_9.6.4/smarts.lua b/AdditionalPasteSettings/smarts.lua similarity index 100% rename from AdditionalPasteSettings_9.6.4/smarts.lua rename to AdditionalPasteSettings/smarts.lua diff --git a/AdditionalPasteSettings_9.6.4/source.png b/AdditionalPasteSettings/source.png similarity index 100% rename from AdditionalPasteSettings_9.6.4/source.png rename to AdditionalPasteSettings/source.png diff --git a/AdditionalPasteSettings_9.6.4/station_paste.png b/AdditionalPasteSettings/station_paste.png similarity index 100% rename from AdditionalPasteSettings_9.6.4/station_paste.png rename to AdditionalPasteSettings/station_paste.png diff --git a/AdditionalPasteSettings_9.6.4/target.png b/AdditionalPasteSettings/target.png similarity index 100% rename from AdditionalPasteSettings_9.6.4/target.png rename to AdditionalPasteSettings/target.png diff --git a/AdditionalPasteSettings_9.6.4/thumbnail.png b/AdditionalPasteSettings/thumbnail.png similarity index 100% rename from AdditionalPasteSettings_9.6.4/thumbnail.png rename to AdditionalPasteSettings/thumbnail.png diff --git a/Aircraft_9.8.6/changelog.txt b/Aircraft/changelog.txt similarity index 100% rename from Aircraft_9.8.6/changelog.txt rename to Aircraft/changelog.txt diff --git a/Aircraft_9.8.6/data-updates.lua b/Aircraft/data-updates.lua similarity index 100% rename from Aircraft_9.8.6/data-updates.lua rename to Aircraft/data-updates.lua diff --git a/Aircraft_9.8.6/data.lua b/Aircraft/data.lua similarity index 100% rename from Aircraft_9.8.6/data.lua rename to Aircraft/data.lua diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet-light.png b/Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet-light.png rename to Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet-shadow.png b/Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet-shadow.png rename to Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet.png b/Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/cargo_plane_spritesheet.png rename to Aircraft/graphics/entity/cargo_plane/cargo_plane_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-light.png b/Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-light.png rename to Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-shadow.png b/Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-shadow.png rename to Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet.png b/Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet.png rename to Aircraft/graphics/entity/cargo_plane/hr-cargo_plane_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet-light.png b/Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet-light.png rename to Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet-shadow.png b/Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet-shadow.png rename to Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet.png b/Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/flying_fortress_spritesheet.png rename to Aircraft/graphics/entity/flying_fortress/flying_fortress_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-light.png b/Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-light.png rename to Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-shadow.png b/Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-shadow.png rename to Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet.png b/Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet.png rename to Aircraft/graphics/entity/flying_fortress/hr-flying_fortress_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet-light.png b/Aircraft/graphics/entity/gunship/gunship_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet-light.png rename to Aircraft/graphics/entity/gunship/gunship_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet-shadow.png b/Aircraft/graphics/entity/gunship/gunship_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet-shadow.png rename to Aircraft/graphics/entity/gunship/gunship_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet.png b/Aircraft/graphics/entity/gunship/gunship_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/gunship_spritesheet.png rename to Aircraft/graphics/entity/gunship/gunship_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet-light.png b/Aircraft/graphics/entity/gunship/hr-gunship_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet-light.png rename to Aircraft/graphics/entity/gunship/hr-gunship_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet-shadow.png b/Aircraft/graphics/entity/gunship/hr-gunship_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet-shadow.png rename to Aircraft/graphics/entity/gunship/hr-gunship_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet.png b/Aircraft/graphics/entity/gunship/hr-gunship_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/gunship/hr-gunship_spritesheet.png rename to Aircraft/graphics/entity/gunship/hr-gunship_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet-light.png b/Aircraft/graphics/entity/jet/hr-jet_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet-light.png rename to Aircraft/graphics/entity/jet/hr-jet_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet-shadow.png b/Aircraft/graphics/entity/jet/hr-jet_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet-shadow.png rename to Aircraft/graphics/entity/jet/hr-jet_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet.png b/Aircraft/graphics/entity/jet/hr-jet_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/hr-jet_spritesheet.png rename to Aircraft/graphics/entity/jet/hr-jet_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet-light.png b/Aircraft/graphics/entity/jet/jet_spritesheet-light.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet-light.png rename to Aircraft/graphics/entity/jet/jet_spritesheet-light.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet-shadow.png b/Aircraft/graphics/entity/jet/jet_spritesheet-shadow.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet-shadow.png rename to Aircraft/graphics/entity/jet/jet_spritesheet-shadow.png diff --git a/Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet.png b/Aircraft/graphics/entity/jet/jet_spritesheet.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/jet/jet_spritesheet.png rename to Aircraft/graphics/entity/jet/jet_spritesheet.png diff --git a/Aircraft_9.8.6/graphics/entity/particle/aircraft-trail.png b/Aircraft/graphics/entity/particle/aircraft-trail.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/particle/aircraft-trail.png rename to Aircraft/graphics/entity/particle/aircraft-trail.png diff --git a/Aircraft_9.8.6/graphics/entity/particle/hr-light-cone.png b/Aircraft/graphics/entity/particle/hr-light-cone.png similarity index 100% rename from Aircraft_9.8.6/graphics/entity/particle/hr-light-cone.png rename to Aircraft/graphics/entity/particle/hr-light-cone.png diff --git a/Aircraft_9.8.6/graphics/equipment/aircraft_afterburner.png b/Aircraft/graphics/equipment/aircraft_afterburner.png similarity index 100% rename from Aircraft_9.8.6/graphics/equipment/aircraft_afterburner.png rename to Aircraft/graphics/equipment/aircraft_afterburner.png diff --git a/Aircraft_9.8.6/graphics/equipment/aircraft_energy_shield.png b/Aircraft/graphics/equipment/aircraft_energy_shield.png similarity index 100% rename from Aircraft_9.8.6/graphics/equipment/aircraft_energy_shield.png rename to Aircraft/graphics/equipment/aircraft_energy_shield.png diff --git a/Aircraft_9.8.6/graphics/icons/aircraft-minimap-representation-selected.png b/Aircraft/graphics/icons/aircraft-minimap-representation-selected.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/aircraft-minimap-representation-selected.png rename to Aircraft/graphics/icons/aircraft-minimap-representation-selected.png diff --git a/Aircraft_9.8.6/graphics/icons/aircraft-minimap-representation.png b/Aircraft/graphics/icons/aircraft-minimap-representation.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/aircraft-minimap-representation.png rename to Aircraft/graphics/icons/aircraft-minimap-representation.png diff --git a/Aircraft_9.8.6/graphics/icons/aircraft_afterburner_icon.png b/Aircraft/graphics/icons/aircraft_afterburner_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/aircraft_afterburner_icon.png rename to Aircraft/graphics/icons/aircraft_afterburner_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/aircraft_energy_shield_icon.png b/Aircraft/graphics/icons/aircraft_energy_shield_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/aircraft_energy_shield_icon.png rename to Aircraft/graphics/icons/aircraft_energy_shield_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/cargo_plane_icon.png b/Aircraft/graphics/icons/cargo_plane_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/cargo_plane_icon.png rename to Aircraft/graphics/icons/cargo_plane_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/flying_fortress_icon.png b/Aircraft/graphics/icons/flying_fortress_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/flying_fortress_icon.png rename to Aircraft/graphics/icons/flying_fortress_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/gunship_icon.png b/Aircraft/graphics/icons/gunship_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/gunship_icon.png rename to Aircraft/graphics/icons/gunship_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/high_explosive_shell_icon.png b/Aircraft/graphics/icons/high_explosive_shell_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/high_explosive_shell_icon.png rename to Aircraft/graphics/icons/high_explosive_shell_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/jet_icon.png b/Aircraft/graphics/icons/jet_icon.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/jet_icon.png rename to Aircraft/graphics/icons/jet_icon.png diff --git a/Aircraft_9.8.6/graphics/icons/napalm-ammo.png b/Aircraft/graphics/icons/napalm-ammo.png similarity index 100% rename from Aircraft_9.8.6/graphics/icons/napalm-ammo.png rename to Aircraft/graphics/icons/napalm-ammo.png diff --git a/Aircraft_9.8.6/graphics/technology/advanced_aerodynamics_tech.png b/Aircraft/graphics/technology/advanced_aerodynamics_tech.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/advanced_aerodynamics_tech.png rename to Aircraft/graphics/technology/advanced_aerodynamics_tech.png diff --git a/Aircraft_9.8.6/graphics/technology/aircraft_afterburner_tech.png b/Aircraft/graphics/technology/aircraft_afterburner_tech.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/aircraft_afterburner_tech.png rename to Aircraft/graphics/technology/aircraft_afterburner_tech.png diff --git a/Aircraft_9.8.6/graphics/technology/aircraft_energy_shield_tech.png b/Aircraft/graphics/technology/aircraft_energy_shield_tech.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/aircraft_energy_shield_tech.png rename to Aircraft/graphics/technology/aircraft_energy_shield_tech.png diff --git a/Aircraft_9.8.6/graphics/technology/cargo_plane.png b/Aircraft/graphics/technology/cargo_plane.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/cargo_plane.png rename to Aircraft/graphics/technology/cargo_plane.png diff --git a/Aircraft_9.8.6/graphics/technology/flying_fortress.png b/Aircraft/graphics/technology/flying_fortress.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/flying_fortress.png rename to Aircraft/graphics/technology/flying_fortress.png diff --git a/Aircraft_9.8.6/graphics/technology/gunship.png b/Aircraft/graphics/technology/gunship.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/gunship.png rename to Aircraft/graphics/technology/gunship.png diff --git a/Aircraft_9.8.6/graphics/technology/high_explosive_shell_tech.png b/Aircraft/graphics/technology/high_explosive_shell_tech.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/high_explosive_shell_tech.png rename to Aircraft/graphics/technology/high_explosive_shell_tech.png diff --git a/Aircraft_9.8.6/graphics/technology/jet.png b/Aircraft/graphics/technology/jet.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/jet.png rename to Aircraft/graphics/technology/jet.png diff --git a/Aircraft_9.8.6/graphics/technology/napalm_tech.png b/Aircraft/graphics/technology/napalm_tech.png similarity index 100% rename from Aircraft_9.8.6/graphics/technology/napalm_tech.png rename to Aircraft/graphics/technology/napalm_tech.png diff --git a/Aircraft_9.8.6/graphics/unused/Aircraft_Energy_Shield_Sprite.png b/Aircraft/graphics/unused/Aircraft_Energy_Shield_Sprite.png similarity index 100% rename from Aircraft_9.8.6/graphics/unused/Aircraft_Energy_Shield_Sprite.png rename to Aircraft/graphics/unused/Aircraft_Energy_Shield_Sprite.png diff --git a/Aircraft_9.8.6/info.json b/Aircraft/info.json similarity index 100% rename from Aircraft_9.8.6/info.json rename to Aircraft/info.json diff --git a/Aircraft_9.8.6/locale/en/all.cfg b/Aircraft/locale/en/all.cfg similarity index 100% rename from Aircraft_9.8.6/locale/en/all.cfg rename to Aircraft/locale/en/all.cfg diff --git a/Aircraft_9.8.6/locale/ru/all.cfg b/Aircraft/locale/ru/all.cfg similarity index 100% rename from Aircraft_9.8.6/locale/ru/all.cfg rename to Aircraft/locale/ru/all.cfg diff --git a/Aircraft_9.8.6/migrations/migration.lua b/Aircraft/migrations/migration.lua similarity index 100% rename from Aircraft_9.8.6/migrations/migration.lua rename to Aircraft/migrations/migration.lua diff --git a/Aircraft_9.8.6/prototypes/entities.lua b/Aircraft/prototypes/entities.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/entities.lua rename to Aircraft/prototypes/entities.lua diff --git a/Aircraft_9.8.6/prototypes/equipment-grid.lua b/Aircraft/prototypes/equipment-grid.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/equipment-grid.lua rename to Aircraft/prototypes/equipment-grid.lua diff --git a/Aircraft_9.8.6/prototypes/equipment.lua b/Aircraft/prototypes/equipment.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/equipment.lua rename to Aircraft/prototypes/equipment.lua diff --git a/Aircraft_9.8.6/prototypes/items.lua b/Aircraft/prototypes/items.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/items.lua rename to Aircraft/prototypes/items.lua diff --git a/Aircraft_9.8.6/prototypes/particles.lua b/Aircraft/prototypes/particles.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/particles.lua rename to Aircraft/prototypes/particles.lua diff --git a/Aircraft_9.8.6/prototypes/projectiles.lua b/Aircraft/prototypes/projectiles.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/projectiles.lua rename to Aircraft/prototypes/projectiles.lua diff --git a/Aircraft_9.8.6/prototypes/recipe-updates.lua b/Aircraft/prototypes/recipe-updates.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/recipe-updates.lua rename to Aircraft/prototypes/recipe-updates.lua diff --git a/Aircraft_9.8.6/prototypes/recipes.lua b/Aircraft/prototypes/recipes.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/recipes.lua rename to Aircraft/prototypes/recipes.lua diff --git a/Aircraft_9.8.6/prototypes/technologies-updates.lua b/Aircraft/prototypes/technologies-updates.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/technologies-updates.lua rename to Aircraft/prototypes/technologies-updates.lua diff --git a/Aircraft_9.8.6/prototypes/technologies.lua b/Aircraft/prototypes/technologies.lua similarity index 100% rename from Aircraft_9.8.6/prototypes/technologies.lua rename to Aircraft/prototypes/technologies.lua diff --git a/Aircraft_9.8.6/prototypes/unused.lua.bak b/Aircraft/prototypes/unused.lua.bak similarity index 100% rename from Aircraft_9.8.6/prototypes/unused.lua.bak rename to Aircraft/prototypes/unused.lua.bak diff --git a/Aircraft_9.8.6/settings.lua b/Aircraft/settings.lua similarity index 100% rename from Aircraft_9.8.6/settings.lua rename to Aircraft/settings.lua diff --git a/Aircraft_9.8.6/sounds/jet-loop.ogg b/Aircraft/sounds/jet-loop.ogg similarity index 100% rename from Aircraft_9.8.6/sounds/jet-loop.ogg rename to Aircraft/sounds/jet-loop.ogg diff --git a/Aircraft_9.8.6/sounds/jet-start.ogg b/Aircraft/sounds/jet-start.ogg similarity index 100% rename from Aircraft_9.8.6/sounds/jet-start.ogg rename to Aircraft/sounds/jet-start.ogg diff --git a/Aircraft_9.8.6/sounds/jet-stop.ogg b/Aircraft/sounds/jet-stop.ogg similarity index 100% rename from Aircraft_9.8.6/sounds/jet-stop.ogg rename to Aircraft/sounds/jet-stop.ogg diff --git a/Aircraft_9.8.6/thumbnail.png b/Aircraft/thumbnail.png similarity index 100% rename from Aircraft_9.8.6/thumbnail.png rename to Aircraft/thumbnail.png diff --git a/AlertsList2_1.3.2/changelog.txt b/AlertsList2/changelog.txt similarity index 100% rename from AlertsList2_1.3.2/changelog.txt rename to AlertsList2/changelog.txt diff --git a/AlertsList2/control.lua b/AlertsList2/control.lua new file mode 100644 index 00000000..68dd3cfb --- /dev/null +++ b/AlertsList2/control.lua @@ -0,0 +1,327 @@ +-- initial settings, before loading them +local display_mode = "alerts-list-display-mode-icon-only" +local show_percentage = false +local columns_for_compact_mode = 4 + +-- constants +local ZOOM_LEVEL = 0.1 + +function format_guielement_name(prefix, surface, pos) + return prefix .. surface.index .. "_" .. pos.x .. "_" .. pos.y +end + +function starts_with(str, start) + return str:sub(1, #start) == start +end + +function signalid_to_spritepath(signalid) + local type = signalid.type + if type == "virtual" then + type = "virtual-signal" + end + return type .. "/" .. signalid.name +end + +function refresh_speakers() + if global["speaker_cache"] then + for k, _ in pairs(global["speaker_cache"]) do + global["speaker_cache"][k] = nil + end + + for k, v in pairs(game.surfaces) do + for sid, speaker in pairs(v.find_entities_filtered {type = "programmable-speaker"}) do + table.insert(global["speaker_cache"], speaker) + end + end + end +end + +function remove_speaker(speaker) + if global["speaker_cache"] then + for k, v in pairs(global["speaker_cache"]) do + if v == speaker then + table.remove(global["speaker_cache"], k) + end + end + end +end + +function compare_signals(s1, s2) + return s1 == s2 or (s1 and s2 and s1.type == s2.type and s1.name == s2.name) +end + +function on_built(e) + if (e.created_entity.type == "programmable-speaker") then + if not global["speaker_cache"] then + global["speaker_cache"] = {} + end + + table.insert(global["speaker_cache"], e.created_entity) + + for k, player in pairs(game.players) do + draw_gui(player) + end + end +end + +function on_destroyed(e) + if e.entity.type == "programmable-speaker" then + remove_speaker(e.entity) + for k, player in pairs(game.players) do + draw_gui(player) + end + end +end + +function calculate_percentage(speaker, circuit) + local all_signals = speaker.get_merged_signals() + local left = 0 + local right = circuit.condition["constant"] + if all_signals then + for k, v in pairs(all_signals) do + if compare_signals(v.signal, circuit.condition.first_signal) then + left = v.count + end + if compare_signals(v.signal, circuit.condition["second_signal"]) then + right = v.count + end + end + end + if right == 0 then + right = 1 + end + percentage = left / right + return percentage +end + +function get_signal_value(signals, signalid) + local value = 0 + if signals then + for k, v in pairs(signals) do + if v.signal.type == signalid.type and v.signal.name == signalid.name then + value = v.count + break + end + end + end + return value +end + +function left_column_for(tbl, speaker, circuit) + local elem_name = format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position) + local element = tbl[elem_name] + if display_mode == "alerts-list-display-mode-icon-only" or display_mode == "alerts-list-display-mode-icon-and-text" then + if not element then + element = + tbl.add { + type = "sprite-button", + name = elem_name, + enabled = true, + mouse_button_filter = {"left"}, + sprite = signalid_to_spritepath(speaker.alert_parameters.icon_signal_id), + show_percent_for_small_numbers = show_percentage + } + end + element.sprite = signalid_to_spritepath(speaker.alert_parameters.icon_signal_id) + if show_percentage then + element.number = calculate_percentage(speaker, circuit) + else + element.number = get_signal_value(speaker.get_merged_signals(), circuit.condition.first_signal) + end + element.tooltip = speaker.alert_parameters.alert_message + -- TODO: else for complex icon (full condition?) + end + -- update element data +end + +function right_column_for(tbl, speaker, circuit) + if display_mode ~= "alerts-list-display-mode-icon-only" then + local elem_name = format_guielement_name("alerts_list_info_", speaker.surface, speaker.position) + local element = tbl[elem_name] + if not element then + element = tbl.add {type = "label", name = elem_name, caption = speaker.alert_parameters.alert_message} + end + element.caption = speaker.alert_parameters.alert_message + end +end + +function on_click(element, player) + if element and player then + if starts_with(element.name, "alerts_list_icons_") then + for k, speaker in pairs(global["speaker_cache"]) do + if speaker then + if element.name == format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position) then + player.open_map(speaker.position, ZOOM_LEVEL) + break + end + end + end + end + end +end + +function fill_table_with_speakers(tbl, speakers, player) + if not speakers then + speakers = {} + end + + local remove_list = {} + for k, v in pairs(tbl.children) do + remove_list[v.name] = v + end + + local found_any = false + + for i, speaker in pairs(speakers) do + -- here we do assume we always have a list of speakers that have global alert set + if speaker and speaker.valid and speaker.alert_parameters and speaker.alert_parameters.show_alert then + local behavior = speaker.get_control_behavior() + if behavior and behavior["circuit_condition"] then + if behavior.circuit_condition.fulfilled and speaker.alert_parameters.icon_signal_id then + found_any = true + left_column_for(tbl, speaker, behavior.circuit_condition) + right_column_for(tbl, speaker, behavior.circuit_condition) + remove_list[format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position)] = nil + remove_list[format_guielement_name("alerts_list_info_", speaker.surface, speaker.position)] = nil + end + end + end + end + for k, v in pairs(remove_list) do + v.destroy() + end + + if not found_any then + -- get rid of GUI if there's nothing to be shown + for k, player in pairs(game.players) do + if player.gui.left["alerts_list_frame_main"] then + player.gui.left["alerts_list_frame_main"].destroy() + end + end + end +end + +-- return GUI +function build_gui(player) + if not player.gui.left["alerts_list_frame_main"] then + -- TODO: make it transparent background? + local gui = player.gui.left.add {type = "frame", name = "alerts_list_frame_main", direction = "vertical"} + local columns = 2 + if display_mode == "alerts-list-display-mode-icon-only" then + columns = columns_for_compact_mode + end + gui.add { + type = "label", + name = "alerts_list_label", + caption = {"gui-alerts-list.label-caption"}, + tooltip = {"tooltip-alerts-list.label-caption"} + } + local tbl = gui.add {type = "table", name = "alerts_list_alert_table", column_count = columns} + return gui + else + return player.gui.left["alerts_list_frame_main"] + end +end + +-- builds GUI and fills it with current speakers data +function draw_gui(player) + local gui = build_gui(player) + local tbl = gui.alerts_list_alert_table + fill_table_with_speakers(tbl, global["speaker_cache"], player) +end + +function reload_settings(player) + display_mode = settings.get_player_settings(player)["alerts-list-display-mode"].value + show_percentage = settings.get_player_settings(player)["alerts-list-show-percentage"].value + columns_for_compact_mode = settings.get_player_settings(player)["alerts-list-columns-for-compact-mode"].value + + if player.gui.left["alerts_list_frame_main"] then + player.gui.left["alerts_list_frame_main"].destroy() + end + + draw_gui(player) +end + +-- register events + +script.on_init( + function() + for k, player in pairs(game.players) do + reload_settings(player) + end + + if not global["speaker_cache"] then + global["speaker_cache"] = {} + end + refresh_speakers() + end +) + +script.on_configuration_changed( + function() + for k, player in pairs(game.players) do + reload_settings(player) + end + + if not global["speaker_cache"] then + global["speaker_cache"] = {} + end + refresh_speakers() + end +) + +script.on_nth_tick( + settings.startup["alerts-list-refresh-rate"].value, + function(e) + for k, player in pairs(game.players) do + draw_gui(player) + end + end +) + +script.on_event( + defines.events.on_player_joined_game, + function(e) + local player = game.players[e.player_index] + reload_settings(player) + + if not global["speaker_cache"] then + global["speaker_cache"] = {} + end + refresh_speakers() + end +) + +script.on_event( + defines.events.on_runtime_mod_setting_changed, + function(e) + if e.player_index ~= nil then + local player = game.players[e.player_index] + reload_settings(player) + end + end +) + +script.on_event( + {defines.events.on_built_entity, defines.events.on_robot_built_entity}, + function(e) + on_built(e) + end +) + +script.on_event( + {defines.events.on_pre_player_mined_item, defines.events.on_robot_mined_entity, defines.events.on_entity_died}, + function(e) + on_destroyed(e) + end +) + +script.on_event( + {defines.events.on_gui_click}, + function(e) + local player = game.players[e.player_index] + if player ~= nil and e.button == defines.mouse_button_type.left then + on_click(e.element, player) + end + end +) diff --git a/AlertsList2/info.json b/AlertsList2/info.json new file mode 100644 index 00000000..27a46d70 --- /dev/null +++ b/AlertsList2/info.json @@ -0,0 +1,14 @@ +{ + "name": "AlertsList2", + "version": "1.3.3", + "title": "Programmable Speaker Alerts List 2", + "author": "Thebri", + "contact": "", + "homepage": "https://github.com/NoUserToSeeMoveAlong/factorio-alerts/", + "factorio_version": "1.1", + "dependencies": [ + "base >= 0.17" + ], + "license": "MIT", + "description": "Adds GUI for a list of all currently active alerts triggered by programmable speakers." +} \ No newline at end of file diff --git a/AlertsList2_1.3.2/locale/en/en.cfg b/AlertsList2/locale/en/en.cfg similarity index 100% rename from AlertsList2_1.3.2/locale/en/en.cfg rename to AlertsList2/locale/en/en.cfg diff --git a/AlertsList2_1.3.2/locale/en/settings.cfg b/AlertsList2/locale/en/settings.cfg similarity index 100% rename from AlertsList2_1.3.2/locale/en/settings.cfg rename to AlertsList2/locale/en/settings.cfg diff --git a/AlertsList2_1.3.2/settings.lua b/AlertsList2/settings.lua similarity index 100% rename from AlertsList2_1.3.2/settings.lua rename to AlertsList2/settings.lua diff --git a/AlertsList2_1.3.2/thumbnail.png b/AlertsList2/thumbnail.png similarity index 100% rename from AlertsList2_1.3.2/thumbnail.png rename to AlertsList2/thumbnail.png diff --git a/AlertsList2_1.3.2/control.lua b/AlertsList2_1.3.2/control.lua deleted file mode 100644 index 83ca9cbc..00000000 --- a/AlertsList2_1.3.2/control.lua +++ /dev/null @@ -1,327 +0,0 @@ --- initial settings, before loading them -local display_mode = "alerts-list-display-mode-icon-only" -local show_percentage = false -local columns_for_compact_mode = 4 - --- constants -local ZOOM_LEVEL = 0.1 - -function format_guielement_name(prefix, surface, pos) - return prefix .. surface.index .. "_" .. pos.x .. "_" .. pos.y -end - -function starts_with(str, start) - return str:sub(1, #start) == start -end - -function signalid_to_spritepath(signalid) - local type = signalid.type - if type == "virtual" then - type = "virtual-signal" - end - return type .. "/" .. signalid.name -end - -function refresh_speakers() - if global["speaker_cache"] then - for k, _ in pairs(global["speaker_cache"]) do - global["speaker_cache"][k] = nil - end - - for k, v in pairs(game.surfaces) do - for sid, speaker in pairs(v.find_entities_filtered {type = "programmable-speaker"}) do - table.insert(global["speaker_cache"], speaker) - end - end - end -end - -function remove_speaker(speaker) - if global["speaker_cache"] then - for k, v in pairs(global["speaker_cache"]) do - if v == speaker then - table.remove(global["speaker_cache"], k) - end - end - end -end - -function compare_signals(s1, s2) - return s1 == s2 or (s1 and s2 and s1.type == s2.type and s1.name == s2.name) -end - -function on_built(e) - if (e.created_entity.type == "programmable-speaker") then - if not global["speaker_cache"] then - global["speaker_cache"] = {} - end - - table.insert(global["speaker_cache"], e.created_entity) - - for k, player in pairs(game.players) do - draw_gui(player) - end - end -end - -function on_destroyed(e) - if e.entity.type == "programmable-speaker" then - remove_speaker(e.entity) - for k, player in pairs(game.players) do - draw_gui(player) - end - end -end - -function calculate_percentage(speaker, circuit) - local all_signals = speaker.get_merged_signals() - local left = 0 - local right = circuit.condition["constant"] - if all_signals then - for k, v in pairs(all_signals) do - if compare_signals(v.signal, circuit.condition.first_signal) then - left = v.count - end - if compare_signals(v.signal, circuit.condition["second_signal"]) then - right = v.count - end - end - end - if right == 0 then - right = 1 - end - percentage = left / right - return percentage -end - -function get_signal_value(signals, signalid) - local value = 0 - if signals then - for k, v in pairs(signals) do - if v.signal.type == signalid.type and v.signal.name == signalid.name then - value = v.count - break - end - end - end - return value -end - -function left_column_for(tbl, speaker, circuit) - local elem_name = format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position) - local element = tbl[elem_name] - if display_mode == "alerts-list-display-mode-icon-only" or display_mode == "alerts-list-display-mode-icon-and-text" then - if not element then - element = - tbl.add { - type = "sprite-button", - name = elem_name, - enabled = true, - mouse_button_filter = {"left"}, - sprite = signalid_to_spritepath(speaker.alert_parameters.icon_signal_id), - show_percent_for_small_numbers = show_percentage - } - end - element.sprite = signalid_to_spritepath(speaker.alert_parameters.icon_signal_id) - if show_percentage then - element.number = calculate_percentage(speaker, circuit) - else - element.number = get_signal_value(speaker.get_merged_signals(), circuit.condition.first_signal) - end - element.tooltip = speaker.alert_parameters.alert_message - -- TODO: else for complex icon (full condition?) - end - -- update element data -end - -function right_column_for(tbl, speaker, circuit) - if display_mode ~= "alerts-list-display-mode-icon-only" then - local elem_name = format_guielement_name("alerts_list_info_", speaker.surface, speaker.position) - local element = tbl[elem_name] - if not element then - element = tbl.add {type = "label", name = elem_name, caption = speaker.alert_parameters.alert_message} - end - element.caption = speaker.alert_parameters.alert_message - end -end - -function on_click(element, player) - if element and player then - if starts_with(element.name, "alerts_list_icons_") then - for k, speaker in pairs(global["speaker_cache"]) do - if speaker then - if element.name == format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position) then - player.open_map(speaker.position, ZOOM_LEVEL) - break - end - end - end - end - end -end - -function fill_table_with_speakers(tbl, speakers, player) - if not speakers then - speakers = {} - end - - local remove_list = {} - for k, v in pairs(tbl.children) do - remove_list[v.name] = v - end - - local found_any = false - - for i, speaker in pairs(speakers) do - -- here we do assume we always have a list of speakers that have global alert set - if speaker and speaker.valid and speaker.alert_parameters and speaker.alert_parameters.show_alert then - local behavior = speaker.get_control_behavior() - if behavior and behavior["circuit_condition"] then - if behavior.circuit_condition.fulfilled and speaker.alert_parameters.icon_signal_id then - found_any = true - left_column_for(tbl, speaker, behavior.circuit_condition) - right_column_for(tbl, speaker, behavior.circuit_condition) - remove_list[format_guielement_name("alerts_list_icons_", speaker.surface, speaker.position)] = nil - remove_list[format_guielement_name("alerts_list_info_", speaker.surface, speaker.position)] = nil - end - end - end - end - for k, v in pairs(remove_list) do - v.destroy() - end - - if not found_any then - -- get rid of GUI if there's nothing to be shown - for k, player in pairs(game.players) do - if player.gui.left["alerts_list_frame_main"] then - player.gui.left["alerts_list_frame_main"].destroy() - end - end - end -end - --- return GUI -function build_gui(player) - if not player.gui.left["alerts_list_frame_main"] then - -- TODO: make it transparent background? - local gui = player.gui.left.add {type = "frame", name = "alerts_list_frame_main", direction = "vertical"} - local columns = 2 - if display_mode == "alerts-list-display-mode-icon-only" then - columns = columns_for_compact_mode - end - gui.add { - type = "label", - name = "alerts_list_label", - caption = {"gui-alerts-list.label-caption"}, - tooltip = {"tooltip-alerts-list.label-caption"} - } - local tbl = gui.add {type = "table", name = "alerts_list_alert_table", column_count = columns} - return gui - else - return player.gui.left["alerts_list_frame_main"] - end -end - --- builds GUI and fills it with current speakers data -function draw_gui(player) - local gui = build_gui(player) - local tbl = gui.alerts_list_alert_table - fill_table_with_speakers(tbl, global["speaker_cache"], player) -end - -function reload_settings(player) - display_mode = settings.get_player_settings(player)["alerts-list-display-mode"].value - show_percentage = settings.get_player_settings(player)["alerts-list-show-percentage"].value - columns_for_compact_mode = settings.get_player_settings(player)["alerts-list-columns-for-compact-mode"].value - - if player.gui.left["alerts_list_frame_main"] then - player.gui.left["alerts_list_frame_main"].destroy() - end - - draw_gui(player) -end - --- register events - -script.on_init( - function() - for k, player in pairs(game.players) do - reload_settings(player) - end - - if not global["speaker_cache"] then - global["speaker_cache"] = {} - end - refresh_speakers() - end -) - -script.on_configuration_changed( - function() - for k, player in pairs(game.players) do - reload_settings(player) - end - - if not global["speaker_cache"] then - global["speaker_cache"] = {} - end - refresh_speakers() - end -) - -script.on_nth_tick( - settings.startup["alerts-list-refresh-rate"].value, - function(e) - for k, player in pairs(game.players) do - draw_gui(player) - end - end -) - -script.on_event( - defines.events.on_player_joined_game, - function(e) - local player = game.players[e.player_index] - reload_settings(player) - - if not global["speaker_cache"] then - global["speaker_cache"] = {} - end - refresh_speakers() - end -) - -script.on_event( - defines.events.on_runtime_mod_setting_changed, - function(e) - if e.player_index ~= nil then - local player = game.players[e.player_index] - reload_settings(player) - end - end -) - -script.on_event( - {defines.events.on_built_entity, defines.events.on_robot_built_entity}, - function(e) - on_built(e) - end -) - -script.on_event( - {defines.events.on_pre_player_mined_item, defines.events.on_robot_mined_entity, defines.events.on_entity_died}, - function(e) - on_destroyed(e) - end -) - -script.on_event( - {defines.events.on_gui_click}, - function(e) - player = game.players[e.player_index] - if e.button == defines.mouse_button_type.left then - on_click(e.element, player) - end - end -) diff --git a/AlertsList2_1.3.2/info.json b/AlertsList2_1.3.2/info.json deleted file mode 100644 index bda93771..00000000 --- a/AlertsList2_1.3.2/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "AlertsList2", - "version": "1.3.2", - "title": "Programmable Speaker Alerts List 2", - "author": "Thebri", - "contact": "", - "homepage": "https://github.com/NoUserToSeeMoveAlong/factorio-alerts/", - "factorio_version": "1.1", - "dependencies": [ - "base >= 0.17" - ], - "license": "MIT", - "description": "Adds GUI for a list of all currently active alerts triggered by programmable speakers." -} \ No newline at end of file diff --git a/Ambient_Music_0.0.2.zip b/Ambient_Music_0.0.2.zip deleted file mode 100644 index 1e3e3838..00000000 Binary files a/Ambient_Music_0.0.2.zip and /dev/null differ diff --git a/AngelsWarehouseExtension_0.0.3.zip b/AngelsWarehouseExtension_0.0.3.zip deleted file mode 100644 index aaf8a1ff..00000000 Binary files a/AngelsWarehouseExtension_0.0.3.zip and /dev/null differ diff --git a/AtomicArtillery_0.2.3/changelog.txt b/AtomicArtillery/changelog.txt similarity index 100% rename from AtomicArtillery_0.2.3/changelog.txt rename to AtomicArtillery/changelog.txt diff --git a/AtomicArtillery_0.2.3/control.lua b/AtomicArtillery/control.lua similarity index 100% rename from AtomicArtillery_0.2.3/control.lua rename to AtomicArtillery/control.lua diff --git a/AtomicArtillery_0.2.3/data.lua b/AtomicArtillery/data.lua similarity index 100% rename from AtomicArtillery_0.2.3/data.lua rename to AtomicArtillery/data.lua diff --git a/AtomicArtillery_0.2.3/graphics/entity/artillery-projectile/atomic-artillery-shoot-map-visualization.png b/AtomicArtillery/graphics/entity/artillery-projectile/atomic-artillery-shoot-map-visualization.png similarity index 100% rename from AtomicArtillery_0.2.3/graphics/entity/artillery-projectile/atomic-artillery-shoot-map-visualization.png rename to AtomicArtillery/graphics/entity/artillery-projectile/atomic-artillery-shoot-map-visualization.png diff --git a/AtomicArtillery_0.2.3/graphics/entity/artillery-projectile/hr-atomic-shell.png b/AtomicArtillery/graphics/entity/artillery-projectile/hr-atomic-shell.png similarity index 100% rename from AtomicArtillery_0.2.3/graphics/entity/artillery-projectile/hr-atomic-shell.png rename to AtomicArtillery/graphics/entity/artillery-projectile/hr-atomic-shell.png diff --git a/AtomicArtillery_0.2.3/graphics/icons/atomic-artillery-shell.png b/AtomicArtillery/graphics/icons/atomic-artillery-shell.png similarity index 100% rename from AtomicArtillery_0.2.3/graphics/icons/atomic-artillery-shell.png rename to AtomicArtillery/graphics/icons/atomic-artillery-shell.png diff --git a/AtomicArtillery_0.2.3/info.json b/AtomicArtillery/info.json similarity index 100% rename from AtomicArtillery_0.2.3/info.json rename to AtomicArtillery/info.json diff --git a/AtomicArtillery_0.2.3/locale/en/config.cfg b/AtomicArtillery/locale/en/config.cfg similarity index 100% rename from AtomicArtillery_0.2.3/locale/en/config.cfg rename to AtomicArtillery/locale/en/config.cfg diff --git a/AtomicArtillery_0.2.3/locale/ru/config.cfg b/AtomicArtillery/locale/ru/config.cfg similarity index 100% rename from AtomicArtillery_0.2.3/locale/ru/config.cfg rename to AtomicArtillery/locale/ru/config.cfg diff --git a/AtomicArtillery_0.2.3/migrations/migration.lua b/AtomicArtillery/migrations/migration.lua similarity index 100% rename from AtomicArtillery_0.2.3/migrations/migration.lua rename to AtomicArtillery/migrations/migration.lua diff --git a/AtomicArtillery_0.2.3/prototypes/entity/projectiles.lua b/AtomicArtillery/prototypes/entity/projectiles.lua similarity index 100% rename from AtomicArtillery_0.2.3/prototypes/entity/projectiles.lua rename to AtomicArtillery/prototypes/entity/projectiles.lua diff --git a/AtomicArtillery_0.2.3/prototypes/item/ammo.lua b/AtomicArtillery/prototypes/item/ammo.lua similarity index 100% rename from AtomicArtillery_0.2.3/prototypes/item/ammo.lua rename to AtomicArtillery/prototypes/item/ammo.lua diff --git a/AtomicArtillery_0.2.3/prototypes/recipe/ammo.lua b/AtomicArtillery/prototypes/recipe/ammo.lua similarity index 100% rename from AtomicArtillery_0.2.3/prototypes/recipe/ammo.lua rename to AtomicArtillery/prototypes/recipe/ammo.lua diff --git a/AtomicArtillery_0.2.3/prototypes/technology/ammo.lua b/AtomicArtillery/prototypes/technology/ammo.lua similarity index 100% rename from AtomicArtillery_0.2.3/prototypes/technology/ammo.lua rename to AtomicArtillery/prototypes/technology/ammo.lua diff --git a/AtomicArtillery_0.2.3/thumbnail.png b/AtomicArtillery/thumbnail.png similarity index 100% rename from AtomicArtillery_0.2.3/thumbnail.png rename to AtomicArtillery/thumbnail.png diff --git a/BatteryElectricTrain_1.1.7/changelog.txt b/BatteryElectricTrain/changelog.txt similarity index 100% rename from BatteryElectricTrain_1.1.7/changelog.txt rename to BatteryElectricTrain/changelog.txt diff --git a/BatteryElectricTrain_1.1.7/control.lua b/BatteryElectricTrain/control.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/control.lua rename to BatteryElectricTrain/control.lua diff --git a/BatteryElectricTrain_1.1.7/data-updates.lua b/BatteryElectricTrain/data-updates.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/data-updates.lua rename to BatteryElectricTrain/data-updates.lua diff --git a/BatteryElectricTrain_1.1.7/data.lua b/BatteryElectricTrain/data.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/data.lua rename to BatteryElectricTrain/data.lua diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-1-icon.png b/BatteryElectricTrain/graphics/bet-charger-1-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-1-icon.png rename to BatteryElectricTrain/graphics/bet-charger-1-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-1.png b/BatteryElectricTrain/graphics/bet-charger-1.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-1.png rename to BatteryElectricTrain/graphics/bet-charger-1.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-2-icon.png b/BatteryElectricTrain/graphics/bet-charger-2-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-2-icon.png rename to BatteryElectricTrain/graphics/bet-charger-2-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-2-tech.png b/BatteryElectricTrain/graphics/bet-charger-2-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-2-tech.png rename to BatteryElectricTrain/graphics/bet-charger-2-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-2.png b/BatteryElectricTrain/graphics/bet-charger-2.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-2.png rename to BatteryElectricTrain/graphics/bet-charger-2.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-3-icon.png b/BatteryElectricTrain/graphics/bet-charger-3-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-3-icon.png rename to BatteryElectricTrain/graphics/bet-charger-3-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-3-tech.png b/BatteryElectricTrain/graphics/bet-charger-3-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-3-tech.png rename to BatteryElectricTrain/graphics/bet-charger-3-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-3.png b/BatteryElectricTrain/graphics/bet-charger-3.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-3.png rename to BatteryElectricTrain/graphics/bet-charger-3.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-1-icon.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-1-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-1-icon.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-1-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-1.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-1.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-1.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-1.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-2-icon.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-2-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-2-icon.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-2-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-2.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-2.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-2.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-2.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-3-icon.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-3-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-3-icon.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-3-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-3.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-3.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-3.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-3.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-tech.png b/BatteryElectricTrain/graphics/bet-charger-tertiary-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-charger-tertiary-tech.png rename to BatteryElectricTrain/graphics/bet-charger-tertiary-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-empty-icon.png b/BatteryElectricTrain/graphics/bet-fuel-1-empty-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-empty-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-1-empty-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-full-icon.png b/BatteryElectricTrain/graphics/bet-fuel-1-full-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-full-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-1-full-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-recycling-icon.png b/BatteryElectricTrain/graphics/bet-fuel-1-recycling-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-1-recycling-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-1-recycling-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-empty-icon.png b/BatteryElectricTrain/graphics/bet-fuel-2-empty-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-empty-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-2-empty-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-full-icon.png b/BatteryElectricTrain/graphics/bet-fuel-2-full-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-full-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-2-full-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-recycling-icon.png b/BatteryElectricTrain/graphics/bet-fuel-2-recycling-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-recycling-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-2-recycling-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-tech.png b/BatteryElectricTrain/graphics/bet-fuel-2-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-2-tech.png rename to BatteryElectricTrain/graphics/bet-fuel-2-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-empty-icon.png b/BatteryElectricTrain/graphics/bet-fuel-3-empty-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-empty-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-3-empty-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-full-icon.png b/BatteryElectricTrain/graphics/bet-fuel-3-full-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-full-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-3-full-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-recycling-icon.png b/BatteryElectricTrain/graphics/bet-fuel-3-recycling-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-recycling-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-3-recycling-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-tech.png b/BatteryElectricTrain/graphics/bet-fuel-3-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-3-tech.png rename to BatteryElectricTrain/graphics/bet-fuel-3-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-empty-icon.png b/BatteryElectricTrain/graphics/bet-fuel-4-empty-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-empty-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-4-empty-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-full-icon.png b/BatteryElectricTrain/graphics/bet-fuel-4-full-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-full-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-4-full-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-recycling-icon.png b/BatteryElectricTrain/graphics/bet-fuel-4-recycling-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-recycling-icon.png rename to BatteryElectricTrain/graphics/bet-fuel-4-recycling-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-tech.png b/BatteryElectricTrain/graphics/bet-fuel-4-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-4-tech.png rename to BatteryElectricTrain/graphics/bet-fuel-4-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-fuel-recycling-tech.png b/BatteryElectricTrain/graphics/bet-fuel-recycling-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-fuel-recycling-tech.png rename to BatteryElectricTrain/graphics/bet-fuel-recycling-tech.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-locomotive-icon.png b/BatteryElectricTrain/graphics/bet-locomotive-icon.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-locomotive-icon.png rename to BatteryElectricTrain/graphics/bet-locomotive-icon.png diff --git a/BatteryElectricTrain_1.1.7/graphics/bet-tech.png b/BatteryElectricTrain/graphics/bet-tech.png similarity index 100% rename from BatteryElectricTrain_1.1.7/graphics/bet-tech.png rename to BatteryElectricTrain/graphics/bet-tech.png diff --git a/BatteryElectricTrain_1.1.7/info.json b/BatteryElectricTrain/info.json similarity index 100% rename from BatteryElectricTrain_1.1.7/info.json rename to BatteryElectricTrain/info.json diff --git a/BatteryElectricTrain_1.1.7/locale/en/base.cfg b/BatteryElectricTrain/locale/en/base.cfg similarity index 100% rename from BatteryElectricTrain_1.1.7/locale/en/base.cfg rename to BatteryElectricTrain/locale/en/base.cfg diff --git a/BatteryElectricTrain_1.1.7/locale/uk/base.cfg b/BatteryElectricTrain/locale/uk/base.cfg similarity index 100% rename from BatteryElectricTrain_1.1.7/locale/uk/base.cfg rename to BatteryElectricTrain/locale/uk/base.cfg diff --git a/BatteryElectricTrain_1.1.7/names.lua b/BatteryElectricTrain/names.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/names.lua rename to BatteryElectricTrain/names.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/categories.lua b/BatteryElectricTrain/prototypes/categories.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/categories.lua rename to BatteryElectricTrain/prototypes/categories.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/entities.lua b/BatteryElectricTrain/prototypes/entities.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/entities.lua rename to BatteryElectricTrain/prototypes/entities.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/item-groups.lua b/BatteryElectricTrain/prototypes/item-groups.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/item-groups.lua rename to BatteryElectricTrain/prototypes/item-groups.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/items.lua b/BatteryElectricTrain/prototypes/items.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/items.lua rename to BatteryElectricTrain/prototypes/items.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/recipes.lua b/BatteryElectricTrain/prototypes/recipes.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/recipes.lua rename to BatteryElectricTrain/prototypes/recipes.lua diff --git a/BatteryElectricTrain_1.1.7/prototypes/technologies.lua b/BatteryElectricTrain/prototypes/technologies.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/prototypes/technologies.lua rename to BatteryElectricTrain/prototypes/technologies.lua diff --git a/BatteryElectricTrain_1.1.7/settings.lua b/BatteryElectricTrain/settings.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/settings.lua rename to BatteryElectricTrain/settings.lua diff --git a/BatteryElectricTrain_1.1.7/sounds/bet-locomotive-deactivate.ogg b/BatteryElectricTrain/sounds/bet-locomotive-deactivate.ogg similarity index 100% rename from BatteryElectricTrain_1.1.7/sounds/bet-locomotive-deactivate.ogg rename to BatteryElectricTrain/sounds/bet-locomotive-deactivate.ogg diff --git a/BatteryElectricTrain_1.1.7/sounds/bet-locomotive.ogg b/BatteryElectricTrain/sounds/bet-locomotive.ogg similarity index 100% rename from BatteryElectricTrain_1.1.7/sounds/bet-locomotive.ogg rename to BatteryElectricTrain/sounds/bet-locomotive.ogg diff --git a/BatteryElectricTrain_1.1.7/thumbnail.png b/BatteryElectricTrain/thumbnail.png similarity index 100% rename from BatteryElectricTrain_1.1.7/thumbnail.png rename to BatteryElectricTrain/thumbnail.png diff --git a/BatteryElectricTrain_1.1.7/util.lua b/BatteryElectricTrain/util.lua similarity index 100% rename from BatteryElectricTrain_1.1.7/util.lua rename to BatteryElectricTrain/util.lua diff --git a/Big-Monsters_1.4.0/cameras.lua b/Big-Monsters/cameras.lua similarity index 100% rename from Big-Monsters_1.4.0/cameras.lua rename to Big-Monsters/cameras.lua diff --git a/Big-Monsters_1.4.0/changelog.txt b/Big-Monsters/changelog.txt similarity index 100% rename from Big-Monsters_1.4.0/changelog.txt rename to Big-Monsters/changelog.txt diff --git a/Big-Monsters_1.4.0/colors.lua b/Big-Monsters/colors.lua similarity index 100% rename from Big-Monsters_1.4.0/colors.lua rename to Big-Monsters/colors.lua diff --git a/Big-Monsters/control.lua b/Big-Monsters/control.lua new file mode 100644 index 00000000..51f05eb8 --- /dev/null +++ b/Big-Monsters/control.lua @@ -0,0 +1,1324 @@ +util = require("util") +colors = require("colors") +require("utils") +require "cameras" +require "particles" +require "stdlib/area/chunk" +require "stdlib/area/area" + + +function ReadRunTimeSettings(event) +global.chances = global.chances or {} -- in priority order of danger +global.chances.volcano = {min_evo=settings.global["bm-volcano-min_evo"].value ,chance=settings.global["bm-volcano-chance"].value, max_evo=settings.global["bm-volcano-max_evo"].value} +global.chances.spidertron = {min_evo=settings.global["bm-spidertron-min_evo"].value , chance=settings.global["bm-spidertron-chance"].value} +global.chances.biterzilla = {min_evo=settings.global["bm-biterzilla-min_evo"].value , chance=settings.global["bm-biterzilla-chance"].value} +global.chances.worms = {min_evo=settings.global["bm-worms-min_evo"].value ,chance=settings.global["bm-worms-chance"].value} +global.chances.brutals = {min_evo=settings.global["bm-brutals-min_evo"].value , chance=settings.global["bm-brutals-chance"].value} +global.chances.soldiers = {min_evo=settings.global["bm-soldiers-min_evo"].value ,chance=settings.global["bm-soldiers-chance"].value} +global.chances.invasion = {min_evo=settings.global["bm-invasion-min_evo"].value , chance=settings.global["bm-invasion-chance"].value} +global.chances.swarm = {min_evo=0, chance=settings.global["bm-swarm-chance"].value, max_evo=settings.global["bm-swarm-max_evo"].value} + +global.enable_silo_attack = settings.global["bm-enable-silo-attack"].value +global.show_cameras = settings.global["bm-show-cameras"].value +global.show_alerts = settings.global["bm-show-alerts"].value +global.play_sound_alert = settings.global["bm-play-sound-alert"].value +global.days = settings.global["bm-event-days"].value +global.allow_nuker = settings.global["bm-allow-nuker"].value +global.difficulty_level = settings.global["bm-difficulty-level"].value +global.spidertron_nuke = settings.global["bm-spidertron-nuke"].value +global.tree_events_chance = settings.global["bm-tree-events-chance"].value/100 +global.spawn_near_nests = settings.global["bm-spawn_near_nests"].value + + + +if event and event.setting_type=='runtime-per-user' then + local player = game.players[event.player_index] + if event.setting=='bm_draggable_camera' then + global.enable_drag_camera[player.name] = settings.get_player_settings(player)["ic_draggable_camera"].value + elseif event.setting=='bm_camera_size' then + global.camera_size[player.name] = settings.get_player_settings(player)["ic_camera_size"].value + end + end + +end +script.on_event(defines.events.on_runtime_mod_setting_changed, ReadRunTimeSettings) + + +function setup_mod_vars() +global.player_forces = global.player_forces or {'player'} +global.surfaces = global.surfaces or {'nauvis'} +global.bm_volcano = global.bm_volcano or {} +global.biterzillas = global.biterzillas or {} +global.invasions = global.invasions or {} +global.rocket_silos = global.rocket_silos or {} +global.other_enemies = global.other_enemies or {} +global.next_wave = global.next_wave or {} + +ReadRunTimeSettings() +global.next_event = global.next_event or (game.tick + (global.days * 7 * 60 * 60)) +global.next_silo_event = global.next_silo_event or (game.tick + (global.days * 4 * 60 * 60)) +end + +function on_init() +cam_on_init() +setup_mod_vars() +RegisterModEvents() +end +script.on_init(on_init) + +function on_configuration_changed() +cam_on_init() +setup_mod_vars() +end +script.on_configuration_changed(on_configuration_changed) + +function on_load() +RegisterModEvents() +end +script.on_load(on_load) + + +-- camera events +local function on_gui_click(event) +cam_on_gui_click(event) +end +script.on_event(defines.events.on_gui_click, on_gui_click) + +------------------------------------------------------------------------------------------ + + +function pick_event(excludes) +local the_event +local evo = game.forces.enemy.evolution_factor +if not excludes then excludes={} end +for event, chances in pairs (global.chances) do + if not in_list(excludes,event) then + if evo >= chances.min_evo and math.random(100) <= chances.chance then + if (not chances.max_evo) or (chances.max_evo>=evo) then + the_event = event + break + end + end + end + end +return the_event +end + + + + + + + +function Play_sound_alert(force,id) +if global.play_sound_alert then +local sound +if id==1 then + if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_1m' else sound='tc_sound_alarm_1' end + elseif id==2 then + if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_2m' else sound='tc_sound_alarm_2' end + elseif id==3 then + if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_3m' else sound='tc_sound_siren' end + end +if game.active_mods['mferrari-mod-sounds'] then force.play_sound{path=sound,override_sound_type='ambient' } else force.play_sound{path=sound} end +end +end + + + + + + +--the_event = biterzilla,soldiers,worms,volcano,invasion,swarm +function CreateNewEvent(the_event,surfacename, forcename) + +local sufaces_tab = table.deepcopy(global.surfaces) +if surfacename then add_list(sufaces_tab, surfacename) end + +local next_waves={} + +for s=1,#sufaces_tab do +local surface = game.surfaces[sufaces_tab[s]] +if not the_event then the_event=pick_event() end + + + + +for p=1,#global.player_forces do + local pforce = game.forces[global.player_forces[p]] + if surface and the_event and pforce and (not surfacename or surface.name==surfacename) and (not forcename or pforce.name==forcename) then + --DRD + if surface.peaceful_mode then + break + end + --DRD + local player_spawn = pforce.get_spawn_position(surface) + local pcount = #pforce.connected_players + + + if pcount>0 then + local target + + if the_event=='swarm' then + local last_building = FindTeamAttackCorner(surface, pforce, player_spawn,1) + local attack = {surface=surface,target=last_building} --(at.surface,at.target,at.limit,at.multiplier) + table.insert (next_waves,attack) + --CallFrenzyAttack(surface,last_building) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-swarm"},colors.lightred) + end + Play_sound_alert(pforce,1) + + elseif the_event=='invasion' then + local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) + local rchunk = player_chunks[math.random(#player_chunks)] + local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + create_invasion(surface,target,pcount) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-invasion"},colors.lightred) + end + Play_sound_alert(pforce,1) + if global.show_cameras then CreateCameraForForce(pforce,target,surface,nil,nil,120,0.15) end + + + elseif the_event=='volcano' then + local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) + local rchunk = player_chunks[math.random(#player_chunks)] + local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + local volcano = create_volcano(surface, target, pcount) + if volcano then + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-volcano"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,volcano,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='worms' then + local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) + local rchunk = player_chunks[math.random(#player_chunks)] + local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + local bigworm = create_bigworm(surface,target,pcount) + if bigworm then + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-worm"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,bigworm,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='soldiers' then + local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) + local rchunk = player_chunks[math.random(#player_chunks)] + local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + if spawn then + if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end + local group, humie = create_soldiers_group(surface,spawn,pcount,attack1, attack2, player_spawn) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-human_soldiers"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,humie,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='brutals' then + local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) + local rchunk = player_chunks[math.random(#player_chunks)] + local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + if spawn then + if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end + local group, brutal = create_brutals_group(surface,spawn,pcount,attack1, attack2, player_spawn) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-brutals"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,brutal,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='biterzilla' then + local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) + local rchunk = player_chunks[math.random(#player_chunks)] + local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + if spawn then + if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end + local group, zilla = create_biterzilla(surface,spawn,pcount,attack1, attack2, player_spawn) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-biterzilla"},colors.lightred) + end + Play_sound_alert(pforce,3) + if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='spidertron' then + local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) + local rchunk = player_chunks[math.random(#player_chunks)] + local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + if spawn then + if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end + local spider = create_spidertron(surface,spawn,pcount) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-biterzilla"},colors.lightred) + end + Play_sound_alert(pforce,3) + if global.show_cameras then CreateCameraForForce(pforce,spider,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='ultimate_boss' then + local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,10) + local rchunk = player_chunks[math.random(#player_chunks)] + local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} + if spawn then + if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end + local group, zilla = create_biterzilla(surface,spawn,pcount,attack1, attack2, player_spawn,'tc_fake_human_ultimate_boss_cannon_20') + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-biterzilla"},colors.lightred) + end + Play_sound_alert(pforce,3) + if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end + end + + end + + end --pcount>0 + + end --the_event + end -- p + +end + +if #next_waves>0 then + local waves = 2 + math.ceil(global.difficulty_level) + math.floor (game.forces.enemy.evolution_factor * 6) + for w=1,waves do + local tick = game.tick + ((w-1)*60*40 ) + local new_wave = {tick=tick, event_name=the_event, attacks=next_waves} + table.insert(global.next_wave,new_wave) + end + end + +end + + + +function get_pos_near_enemy_nest(surface,spawn,pforce) +local enemy = surface.find_nearest_enemy{position=spawn, max_distance=500, force=pforce} +if enemy then + local f = enemy.force + local nests = surface.find_entities_filtered{type='unit-spawner', position=enemy.position, radius=300, force=f, limit=5} + if #nests>0 then + spawn = get_random_pos_near(nests[math.random(#nests)].position,30) + spawn = surface.find_non_colliding_position('assembling-machine-1', spawn, 0, 1) + end + end +return spawn +end + +function Create_Position_Event(the_event, surface, position, pforce) + --DRD + if surface.peaceful_mode then + return + end + --DRD +local pcount = #pforce.connected_players + + if the_event=='swarm' then + CallFrenzyAttack(surface,position) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-swarm"},colors.lightred) + end + + elseif the_event=='invasion' then + local target = get_random_pos_near(position,150) + target = surface.find_non_colliding_position('rocket-silo', target, 60, 1) + if target then + create_invasion(surface,target,pcount) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-invasion"},colors.lightred) + end + Play_sound_alert(pforce,1) + if global.show_cameras then CreateCameraForForce(pforce,target,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='volcano' then + local target = get_random_pos_near(position,150) + target = surface.find_non_colliding_position('rocket-silo', target, 50, 1) + if target then + local volcano = create_volcano(surface, target, pcount) + if volcano then + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-volcano"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,volcano,surface,nil,nil,120,0.15) end + end + end + + + elseif the_event=='worms' then + local target = get_random_pos_near(position,150) + target = surface.find_non_colliding_position('rocket-silo', target, 50, 1) + if target then + local bigworm = create_bigworm(surface,target,pcount) + if bigworm then + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-worm"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,bigworm,surface,nil,nil,120,0.15) end + end + end + + + elseif the_event=='soldiers' then + local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} + if spawn then + spawn = get_random_pos_near(spawn.position,30) + local group, humie = create_soldiers_group(surface,spawn,pcount,position) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-human_soldiers"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,humie,surface,nil,nil,120,0.15) end + end + + + elseif the_event=='brutals' then + local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} + if spawn then + spawn = get_random_pos_near(spawn.position,30) + local group, brutal = create_brutals_group(surface,spawn,pcount,position) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-brutals"},colors.lightred) + end + Play_sound_alert(pforce,2) + if global.show_cameras then CreateCameraForForce(pforce,brutal,surface,nil,nil,120,0.15) end + end + + elseif the_event=='biterzilla' then + local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} + if spawn then + spawn = get_random_pos_near(spawn.position,30) + local group, zilla = create_biterzilla(surface,spawn,pcount,position) + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-biterzilla"},colors.lightred) + end + Play_sound_alert(pforce,3) + if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end + end + + end + +end + +function Create_Silo_Attack(the_event) +if not the_event then the_event=pick_event() end +if the_event then +for s=#global.rocket_silos,1,-1 do + local silo=global.rocket_silos[s] + if not (silo and silo.valid) then table.remove(global.rocket_silos,s) + else + + local pforce = silo.force + local pcount = #pforce.connected_players + local surface = silo.surface + + if pcount>0 then Create_Position_Event(the_event, surface, silo.position, pforce) end + end + end +end +end + + + +script.on_nth_tick(60*60, function (event) +if global.days>0 then + + if global.next_event 2000) or (math.abs(chunkPos.y) > 2000)) then break + + elseif (surface.is_chunk_generated(chunkPos)) then + local area = Chunk.to_area(chunkPos) + local builds = surface.find_entities_filtered{force=force,area=area,limit=1} + if #builds>0 then + last_building = table.deepcopy(chunkPos) + table.insert (player_chunks,table.deepcopy(chunkPos)) + else + nothing = nothing + 1 + if nothing >= chunk_distance then enemy_spawn = chunkPos end + end + + -- Found an ungenerated area + else break end + end + +last_building = {x= last_building.x*32+math.random(31), y= last_building.y*32+math.random(31)} +if enemy_spawn then + enemy_spawn = {x= enemy_spawn.x*32+math.random(31), y= enemy_spawn.y*32+math.random(31)} + enemy_spawn = surface.find_non_colliding_position('rocket-silo', enemy_spawn, 100, 1) + end + +return last_building, player_chunks, enemy_spawn +end + + + + +function group_set_command(group,position_1,position_2, position_3) + local def = defines + local compound = def.command.compound + local structure = def.compound_command.return_last + local go_to = def.command.attack_area + if not position_2 then position_2=position_1 end + if not position_3 then position_3=position_2 end + + group.set_command( + { + type = compound, + structure_type = structure, + commands = + { + {type = go_to, destination = position_1, distraction = defines.distraction.by_anything, radius=50}, + {type = go_to, destination = position_2, distraction = defines.distraction.by_enemy, radius=30}, + {type = go_to, destination = position_3, distraction = defines.distraction.by_enemy, radius=30}, + {type = defines.command.wander, distraction = defines.distraction.by_enemy, radius=30}, + } + }) + +--group.start_moving() +end + + + +-------------------------------------------------------------------------------------- +function create_soldiers_group(surface,spawn,pcount, attack1, attack2,attack3) +local qt = math.min(10, math.max(2,math.ceil(game.forces.enemy.evolution_factor * 10 + math.random(math.ceil(pcount/2))))) + (global.difficulty_level-1) * 12 +local group +local one_humie +for x=1, qt do + local humie = get_random_human_soldier() + local position = surface.find_non_colliding_position(humie, spawn, 100, 1) + if position then + if not group then group = surface.create_unit_group{position = position, force = game.forces.enemy} end + one_humie = surface.create_entity{name=humie, position= position, force= game.forces.enemy} + if one_humie and one_humie.valid then group.add_member(one_humie) table.insert (global.other_enemies,one_humie ) end + end + end + +if game.forces.enemy.evolution_factor>0.91 and math.random(2)==1 then + local humie = get_random_boss_human_soldier(0) + local position = surface.find_non_colliding_position(humie, spawn, 100, 1) + if not group then group = surface.create_unit_group{position = position, force = game.forces.enemy} end + one_humie = surface.create_entity{name=humie, position=position, force = game.forces.enemy} + if one_humie and one_humie.valid then group.add_member(one_humie) table.insert(global.other_enemies,one_humie) end + end + +group_set_command(group,attack1,attack2,attack3) +return group, one_humie +end + +function create_invasion(surface,position,pcount) +local qt = math.min(25, math.max(1,math.ceil(game.forces.enemy.evolution_factor * 20 + math.random(math.ceil(pcount/2))))) + global.difficulty_level - 1 +table.insert (global.invasions, {name="bm-spawner", surface=surface, position=position, quant=qt}) +if game.forces.enemy.evolution_factor>0.8 then + if math.random(1,2)==1 then CallWormAttack(surface,position,math.ceil((qt+ global.difficulty_level )/2),0,25) end + end +end + + +function get_random_human_soldier(evolution) +if not evolution then evolution = game.forces.enemy.evolution_factor end +local list = { 'tc_fake_human_machine_gunner', +'tc_fake_human_laser', +'tc_fake_human_electric'} +if evolution>0.17 then + table.insert(list,'tc_fake_human_sniper') + else + table.insert(list,'tc_fake_human_melee') + table.insert(list,'tc_fake_human_pistol_gunner') + end +if evolution>0.3 then table.insert(list,'tc_fake_human_grenade') end +if evolution>0.60 then table.insert(list,'tc_fake_human_rocket') table.insert(list,'tc_fake_human_cannon') end +if evolution>0.75 then table.insert(list,'tc_fake_human_erocket') table.insert(list,'tc_fake_human_cluster_grenade') table.insert(list,'tc_fake_human_cannon_explosive') end +if global.allow_nuker and evolution>0.96 then table.insert(list,'tc_fake_human_nuke_rocket') end + +local n=math.min(10, math.max(math.ceil(evolution*10),1)) +return list[math.random(#list)] ..'_'..n +end + + +function get_random_boss_human_soldier(evolution) +if not evolution then evolution = game.forces.enemy.evolution_factor end +local list = { 'tc_fake_human_boss_machine_gunner', +'tc_fake_human_boss_laser', +'tc_fake_human_boss_electric'} +if evolution>0.94 then table.insert(list,'tc_fake_human_boss_sniper') end +if evolution>0.96 then + table.insert(list,'tc_fake_human_boss_rocket') + table.insert(list,'tc_fake_human_boss_grenade') + end +if evolution>0.98 then + table.insert(list,'tc_fake_human_boss_erocket') + table.insert(list,'tc_fake_human_boss_cluster_grenade') + table.insert(list,'tc_fake_human_boss_cannon_explosive') + end +local n=math.min(10, math.max(math.ceil((evolution - 0.9) *100),1)) +return list[math.random(#list)] ..'_'..n +end + + + +function get_brutals_for_evolution(evolution,extra_evo) +local brutals = {} +local biters = get_units_for_evolution(evolution,extra_evo) +for b=1,#biters do + local brut = 'brutal-'..biters[b] + if game.entity_prototypes[brut] then + table.insert(brutals,brut) + end + end +return brutals +end + +function create_brutals_group(surface,spawn,pcount, attack1, attack2,attack3) +local qt = math.min(10, math.max(2,math.ceil(game.forces.enemy.evolution_factor * 10 + math.random(math.ceil(pcount/2))))) + (global.difficulty_level-1) * 10 +local group +local one_brutal +local brutals = get_brutals_for_evolution(nil,0.1) +for x=1, qt do + local brutal = brutals[math.random(#brutals)] + local position = surface.find_non_colliding_position(brutal, spawn, 200, 1) + if position then + if not group then + group = surface.create_unit_group{position = position, force = game.forces.enemy} + surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} + create_remnants_particles (surface, math.random(30,50) , position) + end + one_brutal = surface.create_entity{name=brutal, position= position, force= game.forces.enemy} + create_tatoo_for_unit(one_brutal) + group.add_member(one_brutal) + table.insert (global.other_enemies,one_brutal ) + end + end +group_set_command(group,attack1,attack2,attack3) +return group, one_brutal +end + + + + +function get_random_lesser_boss(evolution,surface) +if not evolution then evolution = game.forces.enemy.evolution_factor end +local list = {'maf-boss-biter-','maf-boss-acid-spitter-'} +if game.active_mods['ArmouredBiters'] then table.insert(list,'maf-boss-armoured-biter-') end + +if game.active_mods['Cold_biters'] then + if (not surface) or #surface.find_entities_filtered{name='cb-cold-spawner',limit=1}>0 then + table.insert(list,'maf-boss-frost-biter-') + table.insert(list,'maf-boss-frost-spitter-') + end end +if game.active_mods['Explosive_biters'] then + if (not surface) or #surface.find_entities_filtered{name='explosive-biter-spawner',limit=1}>0 then + table.insert(list,'maf-boss-explosive-biter-') + table.insert(list,'maf-boss-explosive-spitter-') + end end + +if game.active_mods['Toxic_biters'] then + if (not surface) or #surface.find_entities_filtered{name='toxic-biter-spawner',limit=1}>0 then + table.insert(list,'maf-boss-toxic-biter-') + table.insert(list,'maf-boss-toxic-spitter-') + end end + +if game.active_mods['Arachnids_enemy'] then + if (not surface) or #surface.find_entities_filtered{name='arachnid-spawner-unitspawner',limit=1}>0 then + table.insert(list,'maf-boss-arachnid-biter-') + end end + +local n=math.min(10, math.max(math.ceil(evolution*10),1)) +return list[math.random(#list)] ..n +end + + + +function Call_next_wave(event) +local event_name = event.event_name +if event_name == 'swarm' then + local attacks = event.attacks + for a=1,#attacks do + local at = attacks[a] + CallFrenzyAttack(at.surface,at.target,at.limit,at.multiplier) + end + end +end + + +function CallFrenzyAttack(surface,target,limit,multiplier) +if not (surface and surface.valid) then return end + +if surface.map_gen_settings.autoplace_controls and surface.map_gen_settings.autoplace_controls["enemy-base"] + and surface.map_gen_settings.autoplace_controls["enemy-base"].size>0 then + +local position +if target.type and target.valid + then + position=target.position + else + position = target + end + +local Min = global.difficulty_level * 10 +local Max = 270 + global.difficulty_level * 30 +local Dist = 1500 + +local spawn = surface.find_entities_filtered({type = "unit-spawner",limit=1,position=position,radius=Dist}) +if #spawn>0 then +local force = spawn[1].force + + +local aliens = Max * force.evolution_factor +if aliens < Min then aliens=Min end +if limit and aliens>limit then aliens=limit end +if multiplier then aliens=math.floor(aliens * multiplier) end + + if target.type and target.valid then + local sent = surface.set_multi_command({ + command = {type=defines.command.attack, target=target, distraction = defines.distraction.by_anything }, + unit_count = aliens, + force = force, + unit_search_distance = Dist, + }) + else + local sent = surface.set_multi_command({ + command = {type=defines.command.attack_area, destination=position, radius=50, distraction = defines.distraction.by_anything }, + unit_count = aliens, + force = force, + unit_search_distance = Dist, + }) + end + end +end +end + + + + +function CallWormAttack(surface,position,how_many,min_distance,max_distance,force) +local worms = get_worms_for_evolution(nil,nil,surface,position) +for w=1,how_many do + local worm = worms[math.random(#worms)] + for t=1,10 do + local x = position.x + math.random(min_distance,max_distance)* RandomNegPos() + local y = position.y + math.random(min_distance,max_distance)* RandomNegPos() + local pos = surface.find_non_colliding_position(worm, {x=x,y=y}, 6, 2) + if pos then + create_remnants_particles (surface, math.random(20,40) , pos) + local wo = surface.create_entity{name=worm,force=force,position=pos} + table.insert (global.other_enemies,wo ) + break + end + end + end +end + + +-------------------------------------------------------- +function create_biterzilla(surface,spawn,pcount, attack1, attack2, attack3,specific_zilla) +local zilla, name, group + +local evo = game.forces.enemy.evolution_factor +if evo<0.9 and (not specific_event) then + name = get_random_lesser_boss(evo,surface) + else + + local list = {"biterzilla1","biterzilla2","biterzilla3","maf-giant-acid-spitter","maf-giant-fire-spitter","bm-motherbiterzilla"} + if global.chances.soldiers.chance>0 then table.insert(list,"big_human") end + name = list[math.random(#list)] + if name=="big_human" then name=get_random_boss_human_soldier() + elseif string.find(name, "zilla") or string.find(name, "maf") then + local N=1 + if evo>0.98 then N=5 + elseif evo>0.96 then N=4 + elseif evo>0.94 then N=3 + elseif evo>0.92 then N=2 + end + name=name..N + end + end + +if specific_zilla then name=specific_zilla end + +local position = surface.find_non_colliding_position(name, spawn, 0, 1) + if position then + group = surface.create_unit_group{position = position, force = game.forces.enemy} + create_remnants_particles (surface, math.random(60,100) , position) + zilla = surface.create_entity{name=name, position=position, force = game.forces.enemy} + zilla.ai_settings.allow_destroy_when_commands_fail=false + surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} + group.add_member(zilla) + + local effect + if specific_zilla then effect='all_buff' + elseif (string.find(name, "human") and evo>0.6 and math.random (3)==1) then effect='defender_capsules' + elseif (string.find(name, "human") and evo>0.85 and math.random (3)==1) then effect='grenade_launcher' end + table.insert (global.biterzillas, {entity=zilla, effect = effect}) + + if evo>=0.9 then + local hpe = (pcount*zilla.health/10) * game.forces.enemy.evolution_factor + if game.forces.enemy.evolution_factor>0.95 then hpe = hpe*1.5 end + zilla.health = (zilla.health/5) + hpe + end + + if pcount>1 and game.forces.enemy.evolution_factor>0.95 then + if math.random(1,2)==1 then + CallFrenzyAttack(surface,attack1) + else + if global.chances.invasion.chance>=math.random(100) then create_invasion(surface,attack1,pcount) end + end + end + end + +group_set_command(group,attack1,attack2, attack3) +return group, zilla +end + + + +function create_spidertron(surface,spawn,pcount) +local spider +local evo = game.forces.enemy.evolution_factor +local N=1 +if evo>0.98 then N=5 + elseif evo>0.96 then N=4 + elseif evo>0.94 then N=3 + elseif evo>0.92 then N=2 + end +local name='bm-spidertron_' .. N + +local position = surface.find_non_colliding_position(name, spawn, 0, 1) + if position then + create_remnants_particles (surface, math.random(60,100) , position) + spider = surface.create_entity{name=name, position=position, force = game.forces.enemy} + surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} + local effect + if evo>0.6 and math.random (3)==1 then effect='defender_capsules' end + if evo>0.85 and math.random (3)==1 then effect='grenade_launcher' end + table.insert (global.biterzillas, {entity=spider, effect = effect}) + + if evo>=0.9 then + local hpe = (pcount*spider.health/10) * game.forces.enemy.evolution_factor + if game.forces.enemy.evolution_factor>0.95 then hpe = hpe*1.5 end + spider.health = ((spider.health/5) + hpe) * global.difficulty_level + end + end + +return spider +end + + + +function Spidertron_Moves(spider) +if global.spidertron_nuke then + spider.insert{name='maf-small-atomic-rocket',count=5} + end + +local FI = spider.get_fuel_inventory() +if FI then + if FI.get_item_count('solid-fuel')<20 and FI.can_insert{name='solid-fuel', count=20} then spider.insert {name='solid-fuel', count=20} end + end + + + +if game.forces.enemy.evolution_factor>0.95 then spider.insert{name='explosive-rocket',count=400} else spider.insert{name='rocket',count=400} end + +local enemy = spider.surface.find_nearest_enemy{position=spider.position, max_distance=1500, force=spider.force} --zilla.force + if enemy and enemy.valid then + spider.autopilot_destination = get_random_pos_near(enemy.position,40) + end +end + + + + + +local tick_zillas = 60 +script.on_nth_tick(tick_zillas, function (event) +cam_on_tick(event) + +for i=#global.invasions,1,-1 do + local inv =global.invasions[i] + local surface = inv.surface + if inv.quant>0 and surface.valid then + local position = inv.surface.find_non_colliding_position(inv.name, inv.position, 200, 4) + if position ~= nil then + create_remnants_particles (surface, math.random(20,40) , position) + local invader = surface.create_entity{name=inv.name, position=position, force = game.forces.enemy} + table.insert(global.other_enemies, invader) + end + inv.quant=inv.quant-1 + else inv.quant=0 + end + if inv.quant<1 then table.remove(global.invasions,i) end + end + + +-- ZILLAS +for z=#global.biterzillas,1,-1 do + local ZI = global.biterzillas[z] + local zilla = ZI.entity + local effect = ZI.effect + if not (zilla and zilla.valid) then table.remove(global.biterzillas,z) + else + + if string.find(zilla.name, "biterzilla1") then + if math.random(1,4)==1 then + local xx = zilla.position.x + math.random(-5,5) + local yy = zilla.position.y + math.random(-5,5) + zilla.surface.create_entity{name ="maf-cluster-fire-projectile", target_position={x=xx,y=yy}, position={x=xx,y=yy}, source=zilla, force=zilla.force, speed=1} + end + elseif string.find(zilla.name, "biterzilla2") then + if math.random(3)==1 then zilla.surface.create_entity{name="electric-shock2", position=zilla.position, force=zilla.force} end + elseif string.find(zilla.name, "motherbiterzilla") then if math.random(1,4)==1 then Brood(zilla) end + elseif string.find(zilla.name, "human") and math.random(1,40)==1 then BroodHumans(zilla) + end + + if string.find(zilla.name, "tc_fake_human_ultimate_boss") then + if math.random(1,10)==1 then BroodHumans(zilla, 2) end end + + if effect and (effect=='defender_capsules' or effect=='all_buff') then + local ent = {'destroyer','defender'} + if math.random(3)==1 then zilla.surface.create_entity{name=ent[math.random(#ent)], position=zilla.position,target=zilla,force=zilla.force} end + end + if effect and (effect=='grenade_launcher' or effect=='all_buff') and math.random(5)==1 then + local d=35 + if effect=='all_buff' then d=60 end + local enemy = zilla.surface.find_nearest_enemy{position=zilla.position, max_distance=d, force=zilla.force} --zilla.force + if enemy and enemy.valid and enemy.name~='entity-ghost' and enemy.type~='entity-ghost' and enemy.destructible and enemy.health then + local weap = {'explosive-rocket','grenade'} + if string.find(zilla.name, "ultimate") then table.insert(weap,'bm-small-atomic-rocket') table.insert(weap,'cluster-grenade') end + zilla.surface.create_entity{name=weap[math.random(#weap)], target=enemy, position=zilla.position, force=zilla.force, speed=0.4} + end + end + + if zilla.valid and zilla.type == 'spider-vehicle' and game.tick % (tick_zillas*18) ==0 then Spidertron_Moves(zilla) end + + end +end + +end) + + + +script.on_nth_tick(60*3, function (event) + + if #global.next_wave>0 and global.next_wave[1].tick < game.tick then + Call_next_wave(global.next_wave[1]) + table.remove(global.next_wave,1) + end + +for k=#global.bm_volcano,1,-1 do + local V=global.bm_volcano[k] + local volcano = V.volcano + local tick = V.tiltick + if volcano and volcano.valid then + local pos = volcano.position + volcano.surface.pollute(pos,75) + volcano.surface.create_trivial_smoke{name='fire-smoke-on-adding-fuel', position=pos} + volcano.surface.create_trivial_smoke{name='turbine-smoke', position=pos} + if game.tick > tick then + volcano.die() + table.remove(global.bm_volcano,k) + else -- erupt!!! + volcano.surface.create_entity{name="big-artillery-explosion", position=pos, force = game.forces.neutral} + local area = 50 + local xx = pos.x + math.random(-area,area) + local yy = pos.y + math.random(-area,area) + volcano.surface.create_entity{name ="maf-cluster-fire-projectile", target_position={x=xx,y=yy}, position={x=xx,y=yy}, source=volcano, force= game.forces.enemy, speed=4} + end + else + table.remove(global.bm_volcano,k) + end + end +end) + + +function create_volcano(surface, target, pcount) +local duration = (60 * 60) + ((pcount + global.difficulty_level) * 60 * 20) +local volcano +local position = surface.find_non_colliding_position("bm-volcano", target, 200, 1) + if position ~= nil then + surface.create_entity{name="nuke-explosion", position=position, force = game.forces.enemy} --big-artillery-explosion + volcano = surface.create_entity{name="bm-volcano", position=position, force = game.forces.enemy} + table.insert(global.bm_volcano, {volcano=volcano, tiltick=game.tick + duration}) + end +return volcano +end + + +-------------------------------------------------------------------------- +function create_bigworm(surface,target,pcount) +local worm = "maf-behemoth-worm-turret" +if game.forces.enemy.evolution_factor > 0.80 then worm = "maf-colossal-worm-turret" end +if game.forces.enemy.evolution_factor > 0.9 then + if math.random(1,2)==1 then worm = "bm-worm-boss-fire-shooter" else worm = "bm-worm-boss-acid-shooter" end + end +local worm = "maf-behemoth-worm-turret" + +local qt = math.min(4, 1 + math.floor(pcount/4)) + global.difficulty_level - 1 +local the_worm +for x=1,qt do + local position = surface.find_non_colliding_position(worm, target, 150, 1) + if position then + create_remnants_particles (surface, math.random(30,60) , position) + the_worm = surface.create_entity{name=worm, position= position, force= game.forces.enemy} + table.insert (global.other_enemies,the_worm ) + end + end + +-- normal worms for reinforced attack +if pcount>2 then + local qt = math.min(25, math.max(1,math.ceil(game.forces.enemy.evolution_factor * 12 + math.random(math.ceil(pcount/2))))) + global.difficulty_level - 1 + CallWormAttack(surface,target,qt,0,20) + end + +return the_worm +end + + +function Brood(mother) +local x = mother.position.x +local y = mother.position.y +local r = 10 +local Units = mother.surface.find_entities_filtered({force=mother.force, area={{x-r,y-r},{x+r,y+r}}}) +if #Units>50 then return end +local Min = 2 +local Max = 6 +local num = math.random(Min,Max) + global.difficulty_level - 1 + +local group = mother.unit_group +local children = get_units_for_evolution() +for k=1,num do + local name= children[math.random(#children)] + local pos = mother.surface.find_non_colliding_position(name, mother.position, 10, 1) + if pos then + mother.surface.create_entity{name="bm-acid-splash-fire", position=pos, force = mother.force} + local child = mother.surface.create_entity{name=name, position=pos, force = mother.force} + if group then group.add_member(child) end + end + end +end + + +function BroodHumans(mother, extra) +extra=extra or 0 +local x = mother.position.x +local y = mother.position.y +local r = 10 +local Units = mother.surface.find_entities_filtered({force= mother.force, area={{x-r,y-r},{x+r,y+r}}}) +if #Units>5 + global.difficulty_level + extra*3 then return end +local num = math.random(3+ extra) + global.difficulty_level - 1 + +local group = mother.unit_group +for k=1,num do + local name= get_random_human_soldier() + local pos = mother.surface.find_non_colliding_position(name, mother.position, 15, 1) + if pos then + local child = mother.surface.create_entity{name=name, position=pos, force = mother.force} + if group then group.add_member(child) end + end + end +end + + +-------------------------------------------------------------------------------------- + + +local function create_rocks(entity,quant) +local rocks = {'rock-big','rock-huge','sand-rock-big'} +entity.surface.create_entity{name='rock-huge', position=entity.position, force = game.forces.neutral} +for q=1,quant do + local rock = rocks[math.random(#rocks)] + local position = entity.surface.find_non_colliding_position(rock, entity.position, 10, 1) + if position ~= nil then + entity.surface.create_entity{name="big-artillery-explosion", position=position, force = game.forces.neutral} + entity.surface.create_entity{name=rock, position=position, force = game.forces.neutral} + end + end +end + +function On_Remove(event) + if event.entity and event.entity.name == "bm-volcano" then + create_rocks(event.entity,12) + end +end +local filters = {{filter = "name", name = "bm-volcano"}} +script.on_event(defines.events.on_entity_died, On_Remove) + + + +function On_Built(event) +local entity = event.created_entity or event.entity +if entity and entity.valid and entity.type~='entity-ghost' then + local surface = entity.surface + local name=entity.name + table.insert (global.rocket_silos,entity) + if global.enable_silo_attack then CallFrenzyAttack(surface,entity,nil,1.5) end + end +end +local filters = {{filter = "name", name = "rsc-silo-stage1"}, {filter = "name", name = "rsc-silo-stage1-serlp"}, {filter = "name", name = "rocket-silo"}} +script.on_event(defines.events.on_built_entity, On_Built, filters) +script.on_event(defines.events.on_robot_built_entity, On_Built, filters) +script.on_event(defines.events.script_raised_built, On_Built, filters) + + + +function player_mined_entity(event) +local player = game.players[event.player_index] +if not player.valid then return end +local ent = event.entity +if ent.type=='tree' then + if math.random()<=global.tree_events_chance then + local the_event=pick_event({'biterzilla','volcano'}) + if the_event then + local pforce = player.force + local surface = ent.surface + Create_Position_Event(the_event, surface, ent.position, pforce) + end + end + end +end +local filters = {{filter = "type", type = "tree"}} +script.on_event(defines.events.on_player_mined_entity, player_mined_entity, filters) + + +-- warptorio +function on_warptorio_warp(event) +global.surfaces = {} +local newsurface = event.newsurface +local planet = event.newplanet +if planet and newsurface then + local flags = planet.flags + if (not flags) or (not in_list(flags,"rest")) then + add_list(global.surfaces, newsurface.name) + end + end +end + + + +-- player body abduction mod +function on_corpse_feasted(event) +local corpse=event.corpse +local attack=event.attack_target +if corpse and corpse.valid and attack and attack.valid then + local evo = game.forces.enemy.evolution_factor + local surface = corpse.surface + ---if corpse.get_item_count("rocket-launcher")>0 then + if global.chances.biterzilla.min_evo<=evo and math.random(100) <= global.chances.biterzilla.chance*2 then + local pforce + if corpse.character_corpse_player_index and game.players[corpse.character_corpse_player_index] and game.players[corpse.character_corpse_player_index].valid then + pforce = game.players[corpse.character_corpse_player_index].force + end + local boss_name=get_random_boss_human_soldier() + local position = surface.find_non_colliding_position(boss_name, corpse.position, 30, 1) + local boss = surface.create_entity{name=boss_name, position=position, force = game.forces.enemy} + boss.ai_settings.allow_destroy_when_commands_fail=false + table.insert (global.biterzillas, {entity=boss}) + if pforce then + if global.show_alerts then + pforce.print({"bm-txt-alert"},colors.lightred) + pforce.print({"bm-txt-biterzilla"},colors.lightred) + end + Play_sound_alert(pforce,3) + end + else + local humie = get_random_human_soldier() + local position = surface.find_non_colliding_position(humie, corpse.position, 30, 1) + surface.create_entity{name=humie, position= position, force= game.forces.enemy} + end +end +end + + +function RegisterModEvents() +if remote.interfaces["warptorio2"] then + local warp_event = remote.call("warptorio2","get_event", "on_post_warp") + script.on_event(warp_event, function(event) + on_warptorio_warp(event) + end) +end + + +if remote.interfaces["PlayerBodyAbduction"] then + local pba_event = remote.call("PlayerBodyAbduction", "get_on_corpse_feasted") + script.on_event(pba_event, function(event) + on_corpse_feasted(event) + end) +end +end + + + + +-------------------------------------------------------------------------------------- + + +-- INTERFACE + +-------------------------------------------------------------------------------------- + +local interface = {} + + +function interface.destroy_all() +global.invasions = {} + +for _, zilla in pairs(global.biterzillas) do + if zilla.entity.valid then + zilla.entity.destroy() + end +end +global.biterzillas = {} + +for k=#global.bm_volcano,1,-1 do + local V=global.bm_volcano[k] + local volcano = V.volcano + if volcano and volcano.valid then volcano.destroy() end + end +global.bm_volcano = {} + +for _, e in pairs(global.other_enemies) do if e and e.valid then e.destroy() end end +global.other_enemies = {} +end + +local event_names = {'biterzilla','brutals','soldiers','worms','volcano','invasion','swarm','spidertron','ultimate_boss'} + +function interface.create_event(the_event,surfacename,forcename) +if (not the_event) or in_list(event_names, the_event) then + CreateNewEvent(the_event,surfacename, forcename) + end +end +function interface.create_silo_event(the_event) +if (not the_event) or in_list(event_names, the_event) then + Create_Silo_Attack(the_event) + end +end + +-- exclude / include surfaces for disasters +function interface.exclude_surface(surfacename) +if surfacename then del_list(global.surfaces, surfacename) end +end + +function interface.add_surface(surfacename) +if surfacename then add_list(global.surfaces, surfacename) end +end + +-- exclude / include player forces to be targeted +function interface.exclude_player_force(forcename) +if forcename then del_list(global.player_forces, forcename) end +end + +function interface.add_player_force(forcename) +if forcename then add_list(global.player_forces, forcename) end +end + +remote.add_interface( "bigmonster", interface ) + + +--[[ + Usage for creating events: create_event(eventname,surfacename,forcename) + Use these event names 'biterzilla','soldiers','worms','volcano','invasion','swarm' + nil will create a random event + + Examples: + Call specific events for all surfaces and all player forces + /c remote.call( "bigmonster", "create_event", "biterzilla") + /c remote.call( "bigmonster", "create_event", "soldiers") + /c remote.call( "bigmonster", "create_event", "worms") + /c remote.call( "bigmonster", "create_event", "volcano") + /c remote.call( "bigmonster", "create_event", "invasion") + /c remote.call( "bigmonster", "create_event", "swarm") + /c remote.call( "bigmonster", "create_event", "spidertron") + + /c remote.call( "bigmonster", "create_event", "ultimate_boss") + + + Call specific event for nauvis surface only, to all player forces + /c remote.call( "bigmonster", "create_event", "biterzilla", "nauvis") + + Call specific event for all registered surfaces, to specific player force + /c remote.call( "bigmonster", "create_event", "volcano", nil, "player") + + Call random event for all registered surfaces, to specific player force + /c remote.call( "bigmonster", "create_event", nil, nil, "player") + + + Call an event for attacking All Silos - eventname = all above + /c remote.call( "bigmonster", "create_silo_event", eventname) + + +include surfaces for disasters +/c remote.call( "bigmonster", "add_surface", surfacename) +exclude surfaces for disasters +/c remote.call( "bigmonster", "exclude_surface", surfacename) + + +include player force to be targeted +/c remote.call( "bigmonster","add_player_force",forcename) +exclude player force to be targeted +/c remote.call( "bigmonster","exclude_player_force",forcename) + +destroy all mod enemies +/c remote.call( "bigmonster","destroy_all") +]] + + diff --git a/Big-Monsters_1.4.0/data-updates.lua b/Big-Monsters/data-updates.lua similarity index 100% rename from Big-Monsters_1.4.0/data-updates.lua rename to Big-Monsters/data-updates.lua diff --git a/Big-Monsters_1.4.0/data.lua b/Big-Monsters/data.lua similarity index 100% rename from Big-Monsters_1.4.0/data.lua rename to Big-Monsters/data.lua diff --git a/Big-Monsters/graphics/electroshock-pulse-explosion.png b/Big-Monsters/graphics/electroshock-pulse-explosion.png new file mode 100644 index 00000000..fbe4a030 Binary files /dev/null and b/Big-Monsters/graphics/electroshock-pulse-explosion.png differ diff --git a/Big-Monsters/graphics/electroshock-pulse-sticker.png b/Big-Monsters/graphics/electroshock-pulse-sticker.png new file mode 100644 index 00000000..66dcd8ef Binary files /dev/null and b/Big-Monsters/graphics/electroshock-pulse-sticker.png differ diff --git a/Big-Monsters/graphics/empty.png b/Big-Monsters/graphics/empty.png new file mode 100644 index 00000000..874fc752 Binary files /dev/null and b/Big-Monsters/graphics/empty.png differ diff --git a/Big-Monsters/graphics/fake_human.png b/Big-Monsters/graphics/fake_human.png new file mode 100644 index 00000000..0fd054f3 Binary files /dev/null and b/Big-Monsters/graphics/fake_human.png differ diff --git a/Big-Monsters/graphics/hr-electroshock-pulse-explosion.png b/Big-Monsters/graphics/hr-electroshock-pulse-explosion.png new file mode 100644 index 00000000..e0e5497b Binary files /dev/null and b/Big-Monsters/graphics/hr-electroshock-pulse-explosion.png differ diff --git a/Big-Monsters/graphics/hr-electroshock-pulse-sticker.png b/Big-Monsters/graphics/hr-electroshock-pulse-sticker.png new file mode 100644 index 00000000..77c64d40 Binary files /dev/null and b/Big-Monsters/graphics/hr-electroshock-pulse-sticker.png differ diff --git a/Big-Monsters/graphics/large-tunnel.png b/Big-Monsters/graphics/large-tunnel.png new file mode 100644 index 00000000..6091d055 Binary files /dev/null and b/Big-Monsters/graphics/large-tunnel.png differ diff --git a/Big-Monsters/graphics/tunnel-dead.png b/Big-Monsters/graphics/tunnel-dead.png new file mode 100644 index 00000000..1739210d Binary files /dev/null and b/Big-Monsters/graphics/tunnel-dead.png differ diff --git a/Big-Monsters/graphics/tunnel.png b/Big-Monsters/graphics/tunnel.png new file mode 100644 index 00000000..86d8a1b3 Binary files /dev/null and b/Big-Monsters/graphics/tunnel.png differ diff --git a/Big-Monsters/graphics/volcano.png b/Big-Monsters/graphics/volcano.png new file mode 100644 index 00000000..1cf6bbfb Binary files /dev/null and b/Big-Monsters/graphics/volcano.png differ diff --git a/Big-Monsters_1.4.0/info.json b/Big-Monsters/info.json similarity index 100% rename from Big-Monsters_1.4.0/info.json rename to Big-Monsters/info.json diff --git a/Big-Monsters/locale/en/en.cfg b/Big-Monsters/locale/en/en.cfg new file mode 100644 index 00000000..de909aba --- /dev/null +++ b/Big-Monsters/locale/en/en.cfg @@ -0,0 +1,129 @@ +ο»Ώlabel=label +bm-txt-alert= ! ! ! W A R N I N G ! ! ! +bm-txt-swarm=You hear many roars approaching the base... +bm-txt-invasion=The ground is shaking and strange noises are coming from your feet... +bm-txt-volcano=The ground is shaking and you see lava in the sky... +bm-txt-biterzilla=You hear the roaring roar of an immense creature approaching... you better prepare the defenses... +bm-txt-worm=Everything around you begins to sway. Something very large moved the ground. Stay alert! +bm-txt-human_soldiers=A group of enemy soldiers are coming to your base! +bm-txt-brutals=A group of strong aliens are moving to your base! Be prepared! + +[entity-name] +maf-boss-biter=Boss Biter +maf-boss-spitter=Spitter Boss +bm-spawner=Underground hole +bm-spawner-corpse=Underground hole corpse +biterzilla1=Giant of Hell +biterzilla2=Giant Blue +biterzilla3=Rock Beast +bm-motherbiterzilla=Brood Mother +bm-motherbiterzilla-corpse=Brood Mother corpse +maf-giant-acid-spitter=Monster Acid Spitter +maf-giant-acid-spitter-corpse=Monster Acid Spitter corpse +maf-behemoth-worm-turret=Giant Monster Worm +maf-colossal-worm-turret=Colossal Monster Worm +behemoth-worm-corpse=Giant Monster Worm corpse +colossal-worm-corpse=Colossal Monster Worm corpse +maf-giant-fire-spitter=Incendiary Spitter Monster +bm-worm-boss-acid-shooter=Monstruous Fire Worm +bm-worm-boss-fire-shooter=Monstruous Acid Worm +bm-volcano=Volcano +fake_human_machine_gunner=Human with machine gun +fake_human_melee=Human with pickaxe +fake_human_pistol_gunner=Human with pistol +fake_human_sniper=Human with sniper rifle +fake_human_laser=Human with laser rifle +fake_human_electric=Human with electric rifle +fake_human_erocket=Human with rocket launcher +fake_human_rocket=Human with rocket launcher +fake_human_grenade=Human with grenade +fake_human_cluster_grenade=Human with cluster grenade +fake_human_nuke_rocket=Human with nuke bomb +fake_human_cannon=Human with cannon +fake_human_cannon_explosive=Human with explosive cannon + +fake_human_boss_melee=Boss with pickaxe +fake_human_boss_machine_gunner=Boss with machine gun +fake_human_boss_pistol_gunner=Boss with pistol +fake_human_boss_sniper=Boss with sniper rifle +fake_human_boss_laser=Boss with laser rifle +fake_human_boss_electric=Boss with electric rifle +fake_human_boss_erocket=Boss with rocket launcher +fake_human_boss_rocket=Boss with rocket launcher +fake_human_boss_grenade=Boss with grenade +fake_human_boss_cluster_grenade=Boss with cluster grenade +fake_human_boss_nuke_rocket=Boss with nuke bomb +fake_human_boss_cannon_explosive=Boss with explosive cannon + +fake_human_ultimate_boss_cannon=Ultimate Boss with cannon + +[entity-description] +bm-volcano=This volcano spread fire streams all around. These eruptions will last some time + + +[mod-setting-name] +bm-big-enemy-hp-multiplier=Big enemies HP multiplyer +bm-big-enemy-hp-variant=Big enemies HP variant +bm-worm-enemy-hp-multiplier=Worms HP multiplyer +bm-enemy-hp-multiplier=Small enemies HP multiplyer +bm-enemy-damage-multiplier=Enemy damage multiplyer +bm-event-days=Event interval (game days) +bm-swarm-chance=Swarm chance % +bm-invasion-chance=Underground invasion chance % +bm-worms-chance=Big worms chance % +bm-soldiers-chance=Human enemies chance % +bm-biterzilla-chance=Biterzilla chance % +bm-volcano-chance=Volcano chance % +bm-brutals-chance=Brutal biters chance % +bm-show-alerts=Enable text alerts +bm-play-sound-alert=Enable sound alerts +bm-show-cameras=Create cameras on events +bm-enable-silo-attack=Enable Rocket-Silo attacks +bm-spidertron-chance=Spidertron chance % +bm-allow-nuker=Allow nuclear soldier +bm-difficulty-level=Difficulty Level +bm-spidertron-nuke=Equip spidertron with small nuke bombs +bm-invasion-min_evo=Underground invasion minimal evolution +bm-soldiers-min_evo=Human enemies minimal evolution +bm-brutals-min_evo=Brutal biters minimal evolution +bm-worms-min_evo=Big worms minimal evolution +bm-biterzilla-min_evo=Biterzilla minimal evolution +bm-spidertron-min_evo=Spidertron minimal evolution +bm-volcano-min_evo=Volcano minimal evolution +bm-swarm-max_evo=Swarm max evolution +bm-volcano-max_evo=Volcano max evolution +bm-tree-events-chance=Tree mining event chance % +bm-spawn_near_nests=Spawn near nests +bm_draggable_camera=Draggable cameras +bm_camera_size=Camera size + + +[mod-setting-description] +bm-event-days=How often the attacks will happen (1 game day = 7 minutes). Values 0-20 (Zero = disable all) +bm-enable-silo-attack=If enabled, you will be seriously attacked after the Rocket-Silo is built +bm-big-enemy-hp-multiplier=0.2-10.0 (default 1) +bm-big-enemy-hp-variant=0.2-4.0 (default 1) +bm-worm-enemy-hp-multiplier=0.2-10.0 (default 1) +bm-enemy-hp-multiplier=0.2-10.0 (default 1) +bm-enemy-damage-multiplier=0.5-10.0 (default 1) +bm-swarm-chance=0-100 +bm-invasion-chance=0-80 +bm-worms-chance=0-80 +bm-brutals-chance=0-80 +bm-soldiers-chance=0-80 +bm-biterzilla-chance=0-80 +bm-volcano-chance=0-80 +bm-spidertron-chance=0-80 +bm-allow-nuker=Part of the humam soldiers group. Equiped with small atomic bomb missile +bm-difficulty-level=1-10 +bm-invasion-min_evo=0.0-0.9 +bm-soldiers-min_evo=0.0-0.9 +bm-brutals-min_evo=0.0-0.9 +bm-worms-min_evo=0.0-0.9 +bm-biterzilla-min_evo=0.0-0.9 +bm-spidertron-min_evo=0.0-0.9 +bm-volcano-min_evo=0.0-0.9 +bm-tree-events-chance=If a player mines a tree, this is the chance of something bad happens +bm-swarm-max_evo=If evolution if higher than this value, the event does not happen anymore +bm-volcano-max_evo=If evolution if higher than this value, the event does not happen anymore +bm-spawn_near_nests=Most enemy attacks will be spawned near enemy nests, if possible \ No newline at end of file diff --git a/Big-Monsters_1.4.0/migrations/v109.json b/Big-Monsters/migrations/v109.json similarity index 100% rename from Big-Monsters_1.4.0/migrations/v109.json rename to Big-Monsters/migrations/v109.json diff --git a/Big-Monsters_1.4.0/particles.lua b/Big-Monsters/particles.lua similarity index 100% rename from Big-Monsters_1.4.0/particles.lua rename to Big-Monsters/particles.lua diff --git a/Big-Monsters_1.4.0/prototypes/armoured_animation.lua b/Big-Monsters/prototypes/armoured_animation.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/armoured_animation.lua rename to Big-Monsters/prototypes/armoured_animation.lua diff --git a/Big-Monsters_1.4.0/prototypes/bosses.lua b/Big-Monsters/prototypes/bosses.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/bosses.lua rename to Big-Monsters/prototypes/bosses.lua diff --git a/Big-Monsters_1.4.0/prototypes/bosses_armoured.lua b/Big-Monsters/prototypes/bosses_armoured.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/bosses_armoured.lua rename to Big-Monsters/prototypes/bosses_armoured.lua diff --git a/Big-Monsters_1.4.0/prototypes/brutals.lua b/Big-Monsters/prototypes/brutals.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/brutals.lua rename to Big-Monsters/prototypes/brutals.lua diff --git a/Big-Monsters_1.4.0/prototypes/colors.lua b/Big-Monsters/prototypes/colors.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/colors.lua rename to Big-Monsters/prototypes/colors.lua diff --git a/Big-Monsters_1.4.0/prototypes/demo-enemy-autoplace-utils.lua b/Big-Monsters/prototypes/demo-enemy-autoplace-utils.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/demo-enemy-autoplace-utils.lua rename to Big-Monsters/prototypes/demo-enemy-autoplace-utils.lua diff --git a/Big-Monsters_1.4.0/prototypes/entities.lua b/Big-Monsters/prototypes/entities.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/entities.lua rename to Big-Monsters/prototypes/entities.lua diff --git a/Big-Monsters_1.4.0/prototypes/explosion.lua b/Big-Monsters/prototypes/explosion.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/explosion.lua rename to Big-Monsters/prototypes/explosion.lua diff --git a/Big-Monsters_1.4.0/prototypes/fake_humans.lua b/Big-Monsters/prototypes/fake_humans.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/fake_humans.lua rename to Big-Monsters/prototypes/fake_humans.lua diff --git a/Big-Monsters_1.4.0/prototypes/projectiles.lua b/Big-Monsters/prototypes/projectiles.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/projectiles.lua rename to Big-Monsters/prototypes/projectiles.lua diff --git a/Big-Monsters_1.4.0/prototypes/sounds.lua b/Big-Monsters/prototypes/sounds.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/sounds.lua rename to Big-Monsters/prototypes/sounds.lua diff --git a/Big-Monsters_1.4.0/prototypes/turrets.lua b/Big-Monsters/prototypes/turrets.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/turrets.lua rename to Big-Monsters/prototypes/turrets.lua diff --git a/Big-Monsters_1.4.0/prototypes/values.lua b/Big-Monsters/prototypes/values.lua similarity index 100% rename from Big-Monsters_1.4.0/prototypes/values.lua rename to Big-Monsters/prototypes/values.lua diff --git a/Big-Monsters/settings.lua b/Big-Monsters/settings.lua new file mode 100644 index 00000000..c7067dba --- /dev/null +++ b/Big-Monsters/settings.lua @@ -0,0 +1,340 @@ +data:extend({ + + { + type = "int-setting", + name = "bm-event-days", + setting_type = "runtime-global", + default_value = 6, + minimum_value = 0, + maximum_value = 20, + order = "a" + }, + + + +{ + type = "double-setting", + name = "bm-invasion-min_evo", + setting_type = "runtime-global", + default_value = 0.1, + minimum_value = 0, + maximum_value = 0.9, + order = "b2" +}, +{ + type = "double-setting", + name = "bm-soldiers-min_evo", + setting_type = "runtime-global", + default_value = 0.05, + minimum_value = 0, + maximum_value = 0.9, + order = "b3" +}, +{ + type = "double-setting", + name = "bm-brutals-min_evo", + setting_type = "runtime-global", + default_value = 0.2, + minimum_value = 0, + maximum_value = 0.9, + order = "b4" +}, +{ + type = "double-setting", + name = "bm-worms-min_evo", + setting_type = "runtime-global", + default_value = 0.7, + minimum_value = 0, + maximum_value = 0.9, + order = "b5" +}, +{ + type = "double-setting", + name = "bm-biterzilla-min_evo", + setting_type = "runtime-global", + default_value = 0.3, + minimum_value = 0, + maximum_value = 0.9, + order = "b6" +}, +{ + type = "double-setting", + name = "bm-spidertron-min_evo", + setting_type = "runtime-global", + default_value = 0.8, + minimum_value = 0, + maximum_value = 0.9, + order = "b7" +}, +{ + type = "double-setting", + name = "bm-volcano-min_evo", + setting_type = "runtime-global", + default_value = 0.5, + minimum_value = 0, + maximum_value = 0.9, + order = "b8" +}, + + +{ + type = "double-setting", + name = "bm-volcano-max_evo", + setting_type = "runtime-global", + default_value = 1, + minimum_value = 0, + maximum_value = 1, + order = "b8b" +}, + + + { + type = "int-setting", + name = "bm-swarm-chance", + setting_type = "runtime-global", + default_value = 100, + minimum_value = 0, + maximum_value = 100, + order = "c1" + }, + +{ + type = "double-setting", + name = "bm-swarm-max_evo", + setting_type = "runtime-global", + default_value = 1, + minimum_value = 0.5, + maximum_value = 1, + order = "c1b" +}, + + + { + type = "int-setting", + name = "bm-invasion-chance", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 0, + maximum_value = 80, + order = "c2" + }, + + { + type = "int-setting", + name = "bm-soldiers-chance", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 0, + maximum_value = 80, + order = "c3" + }, + + { + type = "int-setting", + name = "bm-brutals-chance", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 0, + maximum_value = 80, + order = "c3" + }, + + { + type = "int-setting", + name = "bm-worms-chance", + setting_type = "runtime-global", + default_value = 40, + minimum_value = 0, + maximum_value = 80, + order = "c4" + }, + + + + { + type = "int-setting", + name = "bm-biterzilla-chance", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 0, + maximum_value = 80, + order = "c5a" + }, + + { + type = "int-setting", + name = "bm-spidertron-chance", + setting_type = "runtime-global", + default_value = 30, + minimum_value = 0, + maximum_value = 80, + order = "c5b" + }, + + + { + type = "int-setting", + name = "bm-volcano-chance", + setting_type = "runtime-global", + default_value = 20, + minimum_value = 0, + maximum_value = 80, + order = "c6" + }, + + + { + type = "bool-setting", + name = "bm-enable-silo-attack", + setting_type = "runtime-global", + default_value = true, + order = "d1" + }, + + +{ + type = "double-setting", + name = "bm-enemy-hp-multiplier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.2, + maximum_value = 10, + order = "m1a" +}, + +{ + type = "double-setting", + name = "bm-big-enemy-hp-multiplier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.2, + maximum_value = 10, + order = "m1b" +}, + +{ + type = "double-setting", + name = "bm-big-enemy-hp-variant", + setting_type = "startup", + default_value = 1, + minimum_value = 0.2, + maximum_value = 4, + order = "m1c" +}, + +{ + type = "double-setting", + name = "bm-worm-enemy-hp-multiplier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.2, + maximum_value = 10, + order = "m1d" +}, + + +{ + type = "double-setting", + name = "bm-enemy-damage-multiplier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.5, + maximum_value = 10, + order = "m2" +}, + + + { + type = "bool-setting", + name = "bm-show-alerts", + setting_type = "runtime-global", + default_value = true, + order = "s1" + }, + + { + type = "bool-setting", + name = "bm-play-sound-alert", + setting_type = "runtime-global", + default_value = true, + order = "s1" + }, + + + { + type = "bool-setting", + name = "bm-show-cameras", + setting_type = "runtime-global", + default_value = true, + order = "s2" + }, + + + { + type = "bool-setting", + name = "bm-allow-nuker", + setting_type = "runtime-global", + default_value = true, + order = "s5" + }, + + { + type = "bool-setting", + name = "bm-spidertron-nuke", + setting_type = "runtime-global", + default_value = false, + order = "s6" + }, + + { + type = "int-setting", + name = "bm-difficulty-level", + setting_type = "runtime-global", + default_value = 1, + minimum_value = 1, + maximum_value = 10, + order = "u" + }, + +{ + type = "double-setting", + name = "bm-tree-events-chance", + setting_type = "runtime-global", + default_value = 1.0, + minimum_value = 0.0, + maximum_value = 100, + order = "w" +}, + + + + { + type = "bool-setting", + name = "bm-spawn_near_nests", + setting_type = "runtime-global", + default_value = false, + order = "z" + }, + + + + -- per player + { + type = "bool-setting", + name = "bm_draggable_camera", + setting_type = "runtime-per-user", + default_value = false, + order = "c" + }, + + { + type = "int-setting", + name = "bm_camera_size", + setting_type = "runtime-per-user", + minimum_value = 230, + maximum_value = 700, + default_value = 230, + order = "c" + }, + +}) \ No newline at end of file diff --git a/Big-Monsters_1.4.0/sound/death-z.wav b/Big-Monsters/sound/death-z.wav similarity index 100% rename from Big-Monsters_1.4.0/sound/death-z.wav rename to Big-Monsters/sound/death-z.wav diff --git a/Big-Monsters_1.4.0/sound/electroshock-pulse-explosion.ogg b/Big-Monsters/sound/electroshock-pulse-explosion.ogg similarity index 78% rename from Big-Monsters_1.4.0/sound/electroshock-pulse-explosion.ogg rename to Big-Monsters/sound/electroshock-pulse-explosion.ogg index 317d68b7..33a02937 100644 Binary files a/Big-Monsters_1.4.0/sound/electroshock-pulse-explosion.ogg and b/Big-Monsters/sound/electroshock-pulse-explosion.ogg differ diff --git a/Big-Monsters_1.4.0/stdlib/area/area.lua b/Big-Monsters/stdlib/area/area.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/area/area.lua rename to Big-Monsters/stdlib/area/area.lua diff --git a/Big-Monsters_1.4.0/stdlib/area/chunk.lua b/Big-Monsters/stdlib/area/chunk.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/area/chunk.lua rename to Big-Monsters/stdlib/area/chunk.lua diff --git a/Big-Monsters_1.4.0/stdlib/area/position.lua b/Big-Monsters/stdlib/area/position.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/area/position.lua rename to Big-Monsters/stdlib/area/position.lua diff --git a/Big-Monsters_1.4.0/stdlib/area/tile.lua b/Big-Monsters/stdlib/area/tile.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/area/tile.lua rename to Big-Monsters/stdlib/area/tile.lua diff --git a/Big-Monsters_1.4.0/stdlib/config/config.lua b/Big-Monsters/stdlib/config/config.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/config/config.lua rename to Big-Monsters/stdlib/config/config.lua diff --git a/Big-Monsters_1.4.0/stdlib/core.lua b/Big-Monsters/stdlib/core.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/core.lua rename to Big-Monsters/stdlib/core.lua diff --git a/Big-Monsters_1.4.0/stdlib/data/data.lua b/Big-Monsters/stdlib/data/data.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/data/data.lua rename to Big-Monsters/stdlib/data/data.lua diff --git a/Big-Monsters_1.4.0/stdlib/data/recipe.lua b/Big-Monsters/stdlib/data/recipe.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/data/recipe.lua rename to Big-Monsters/stdlib/data/recipe.lua diff --git a/Big-Monsters_1.4.0/stdlib/entity/entity.lua b/Big-Monsters/stdlib/entity/entity.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/entity/entity.lua rename to Big-Monsters/stdlib/entity/entity.lua diff --git a/Big-Monsters_1.4.0/stdlib/entity/inventory.lua b/Big-Monsters/stdlib/entity/inventory.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/entity/inventory.lua rename to Big-Monsters/stdlib/entity/inventory.lua diff --git a/Big-Monsters_1.4.0/stdlib/event/event.lua b/Big-Monsters/stdlib/event/event.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/event/event.lua rename to Big-Monsters/stdlib/event/event.lua diff --git a/Big-Monsters_1.4.0/stdlib/event/time.lua b/Big-Monsters/stdlib/event/time.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/event/time.lua rename to Big-Monsters/stdlib/event/time.lua diff --git a/Big-Monsters_1.4.0/stdlib/game.lua b/Big-Monsters/stdlib/game.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/game.lua rename to Big-Monsters/stdlib/game.lua diff --git a/Big-Monsters_1.4.0/stdlib/gui/gui.lua b/Big-Monsters/stdlib/gui/gui.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/gui/gui.lua rename to Big-Monsters/stdlib/gui/gui.lua diff --git a/Big-Monsters_1.4.0/stdlib/log/logger.lua b/Big-Monsters/stdlib/log/logger.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/log/logger.lua rename to Big-Monsters/stdlib/log/logger.lua diff --git a/Big-Monsters_1.4.0/stdlib/string.lua b/Big-Monsters/stdlib/string.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/string.lua rename to Big-Monsters/stdlib/string.lua diff --git a/Big-Monsters_1.4.0/stdlib/surface.lua b/Big-Monsters/stdlib/surface.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/surface.lua rename to Big-Monsters/stdlib/surface.lua diff --git a/Big-Monsters_1.4.0/stdlib/table.lua b/Big-Monsters/stdlib/table.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/table.lua rename to Big-Monsters/stdlib/table.lua diff --git a/Big-Monsters_1.4.0/stdlib/time.lua b/Big-Monsters/stdlib/time.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/time.lua rename to Big-Monsters/stdlib/time.lua diff --git a/Big-Monsters_1.4.0/stdlib/trains/trains.lua b/Big-Monsters/stdlib/trains/trains.lua similarity index 100% rename from Big-Monsters_1.4.0/stdlib/trains/trains.lua rename to Big-Monsters/stdlib/trains/trains.lua diff --git a/Big-Monsters/thumbnail.png b/Big-Monsters/thumbnail.png new file mode 100644 index 00000000..86997bef Binary files /dev/null and b/Big-Monsters/thumbnail.png differ diff --git a/Big-Monsters_1.4.0/unit_functions.lua b/Big-Monsters/unit_functions.lua similarity index 100% rename from Big-Monsters_1.4.0/unit_functions.lua rename to Big-Monsters/unit_functions.lua diff --git a/Big-Monsters_1.4.0/utils.lua b/Big-Monsters/utils.lua similarity index 100% rename from Big-Monsters_1.4.0/utils.lua rename to Big-Monsters/utils.lua diff --git a/Big-Monsters_1.4.0/control.lua b/Big-Monsters_1.4.0/control.lua deleted file mode 100644 index 12542d86..00000000 --- a/Big-Monsters_1.4.0/control.lua +++ /dev/null @@ -1,1324 +0,0 @@ -util = require("util") -colors = require("colors") -require("utils") -require "cameras" -require "particles" -require "stdlib/area/chunk" -require "stdlib/area/area" - - -function ReadRunTimeSettings(event) -global.chances = global.chances or {} -- in priority order of danger -global.chances.volcano = {min_evo=settings.global["bm-volcano-min_evo"].value ,chance=settings.global["bm-volcano-chance"].value, max_evo=settings.global["bm-volcano-max_evo"].value} -global.chances.spidertron = {min_evo=settings.global["bm-spidertron-min_evo"].value , chance=settings.global["bm-spidertron-chance"].value} -global.chances.biterzilla = {min_evo=settings.global["bm-biterzilla-min_evo"].value , chance=settings.global["bm-biterzilla-chance"].value} -global.chances.worms = {min_evo=settings.global["bm-worms-min_evo"].value ,chance=settings.global["bm-worms-chance"].value} -global.chances.brutals = {min_evo=settings.global["bm-brutals-min_evo"].value , chance=settings.global["bm-brutals-chance"].value} -global.chances.soldiers = {min_evo=settings.global["bm-soldiers-min_evo"].value ,chance=settings.global["bm-soldiers-chance"].value} -global.chances.invasion = {min_evo=settings.global["bm-invasion-min_evo"].value , chance=settings.global["bm-invasion-chance"].value} -global.chances.swarm = {min_evo=0, chance=settings.global["bm-swarm-chance"].value, max_evo=settings.global["bm-swarm-max_evo"].value} - -global.enable_silo_attack = settings.global["bm-enable-silo-attack"].value -global.show_cameras = settings.global["bm-show-cameras"].value -global.show_alerts = settings.global["bm-show-alerts"].value -global.play_sound_alert = settings.global["bm-play-sound-alert"].value -global.days = settings.global["bm-event-days"].value -global.allow_nuker = settings.global["bm-allow-nuker"].value -global.difficulty_level = settings.global["bm-difficulty-level"].value -global.spidertron_nuke = settings.global["bm-spidertron-nuke"].value -global.tree_events_chance = settings.global["bm-tree-events-chance"].value/100 -global.spawn_near_nests = settings.global["bm-spawn_near_nests"].value - - - -if event and event.setting_type=='runtime-per-user' then - local player = game.players[event.player_index] - if event.setting=='bm_draggable_camera' then - global.enable_drag_camera[player.name] = settings.get_player_settings(player)["ic_draggable_camera"].value - elseif event.setting=='bm_camera_size' then - global.camera_size[player.name] = settings.get_player_settings(player)["ic_camera_size"].value - end - end - -end -script.on_event(defines.events.on_runtime_mod_setting_changed, ReadRunTimeSettings) - - -function setup_mod_vars() -global.player_forces = global.player_forces or {'player'} -global.surfaces = global.surfaces or {'nauvis'} -global.bm_volcano = global.bm_volcano or {} -global.biterzillas = global.biterzillas or {} -global.invasions = global.invasions or {} -global.rocket_silos = global.rocket_silos or {} -global.other_enemies = global.other_enemies or {} -global.next_wave = global.next_wave or {} - -ReadRunTimeSettings() -global.next_event = global.next_event or (game.tick + (global.days * 7 * 60 * 60)) -global.next_silo_event = global.next_silo_event or (game.tick + (global.days * 4 * 60 * 60)) -end - -function on_init() -cam_on_init() -setup_mod_vars() -RegisterModEvents() -end -script.on_init(on_init) - -function on_configuration_changed() -cam_on_init() -setup_mod_vars() -end -script.on_configuration_changed(on_configuration_changed) - -function on_load() -RegisterModEvents() -end -script.on_load(on_load) - - --- camera events -local function on_gui_click(event) -cam_on_gui_click(event) -end -script.on_event(defines.events.on_gui_click, on_gui_click) - ------------------------------------------------------------------------------------------- - - -function pick_event(excludes) -local the_event -local evo = game.forces.enemy.evolution_factor -if not excludes then excludes={} end -for event, chances in pairs (global.chances) do - if not in_list(excludes,event) then - if evo >= chances.min_evo and math.random(100) <= chances.chance then - if (not chances.max_evo) or (chances.max_evo>=evo) then - the_event = event - break - end - end - end - end -return the_event -end - - - - - - - -function Play_sound_alert(force,id) -if global.play_sound_alert then -local sound -if id==1 then - if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_1m' else sound='tc_sound_alarm_1' end - elseif id==2 then - if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_2m' else sound='tc_sound_alarm_2' end - elseif id==3 then - if game.active_mods['mferrari-mod-sounds'] then sound = 'mferrari_tense_music_3m' else sound='tc_sound_siren' end - end -if game.active_mods['mferrari-mod-sounds'] then force.play_sound{path=sound,override_sound_type='ambient' } else force.play_sound{path=sound} end -end -end - - - - - - ---the_event = biterzilla,soldiers,worms,volcano,invasion,swarm -function CreateNewEvent(the_event,surfacename, forcename) - -local sufaces_tab = table.deepcopy(global.surfaces) -if surfacename then add_list(sufaces_tab, surfacename) end - -local next_waves={} - -for s=1,#sufaces_tab do -local surface = game.surfaces[sufaces_tab[s]] -if not the_event then the_event=pick_event() end - - - - -for p=1,#global.player_forces do - local pforce = game.forces[global.player_forces[p]] - if surface and the_event and pforce and (not surfacename or surface.name==surfacename) and (not forcename or pforce.name==forcename) then - --DRD - if surface.peaceful_mode and not settings.global["bm-events-when-peaceful"].value then - break - end - --DRD - local player_spawn = pforce.get_spawn_position(surface) - local pcount = #pforce.connected_players - - - if pcount>0 then - local target - - if the_event=='swarm' then - local last_building = FindTeamAttackCorner(surface, pforce, player_spawn,1) - local attack = {surface=surface,target=last_building} --(at.surface,at.target,at.limit,at.multiplier) - table.insert (next_waves,attack) - --CallFrenzyAttack(surface,last_building) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-swarm"},colors.lightred) - end - Play_sound_alert(pforce,1) - - elseif the_event=='invasion' then - local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) - local rchunk = player_chunks[math.random(#player_chunks)] - local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - create_invasion(surface,target,pcount) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-invasion"},colors.lightred) - end - Play_sound_alert(pforce,1) - if global.show_cameras then CreateCameraForForce(pforce,target,surface,nil,nil,120,0.15) end - - - elseif the_event=='volcano' then - local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) - local rchunk = player_chunks[math.random(#player_chunks)] - local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - local volcano = create_volcano(surface, target, pcount) - if volcano then - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-volcano"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,volcano,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='worms' then - local last_building, player_chunks = FindTeamAttackCorner(surface, pforce, player_spawn,1) - local rchunk = player_chunks[math.random(#player_chunks)] - local target = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - local bigworm = create_bigworm(surface,target,pcount) - if bigworm then - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-worm"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,bigworm,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='soldiers' then - local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) - local rchunk = player_chunks[math.random(#player_chunks)] - local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - if spawn then - if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end - local group, humie = create_soldiers_group(surface,spawn,pcount,attack1, attack2, player_spawn) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-human_soldiers"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,humie,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='brutals' then - local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) - local rchunk = player_chunks[math.random(#player_chunks)] - local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - if spawn then - if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end - local group, brutal = create_brutals_group(surface,spawn,pcount,attack1, attack2, player_spawn) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-brutals"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,brutal,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='biterzilla' then - local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) - local rchunk = player_chunks[math.random(#player_chunks)] - local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - if spawn then - if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end - local group, zilla = create_biterzilla(surface,spawn,pcount,attack1, attack2, player_spawn) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-biterzilla"},colors.lightred) - end - Play_sound_alert(pforce,3) - if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='spidertron' then - local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,4) - local rchunk = player_chunks[math.random(#player_chunks)] - local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - if spawn then - if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end - local spider = create_spidertron(surface,spawn,pcount) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-biterzilla"},colors.lightred) - end - Play_sound_alert(pforce,3) - if global.show_cameras then CreateCameraForForce(pforce,spider,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='ultimate_boss' then - local attack1, player_chunks, spawn = FindTeamAttackCorner(surface, pforce, player_spawn,10) - local rchunk = player_chunks[math.random(#player_chunks)] - local attack2 = {x= rchunk.x*32+math.random(31), y= rchunk.y*32+math.random(31)} - if spawn then - if global.spawn_near_nests then spawn = get_pos_near_enemy_nest(surface,spawn,pforce) end - local group, zilla = create_biterzilla(surface,spawn,pcount,attack1, attack2, player_spawn,'tc_fake_human_ultimate_boss_cannon_20') - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-biterzilla"},colors.lightred) - end - Play_sound_alert(pforce,3) - if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end - end - - end - - end --pcount>0 - - end --the_event - end -- p - -end - -if #next_waves>0 then - local waves = 2 + math.ceil(global.difficulty_level) + math.floor (game.forces.enemy.evolution_factor * 6) - for w=1,waves do - local tick = game.tick + ((w-1)*60*40 ) - local new_wave = {tick=tick, event_name=the_event, attacks=next_waves} - table.insert(global.next_wave,new_wave) - end - end - -end - - - -function get_pos_near_enemy_nest(surface,spawn,pforce) -local enemy = surface.find_nearest_enemy{position=spawn, max_distance=500, force=pforce} -if enemy then - local f = enemy.force - local nests = surface.find_entities_filtered{type='unit-spawner', position=enemy.position, radius=300, force=f, limit=5} - if #nests>0 then - spawn = get_random_pos_near(nests[math.random(#nests)].position,30) - spawn = surface.find_non_colliding_position('assembling-machine-1', spawn, 0, 1) - end - end -return spawn -end - -function Create_Position_Event(the_event, surface, position, pforce) - --DRD - if surface.peaceful_mode and not settings.global["bm-events-when-peaceful"].value then - return - end - --DRD -local pcount = #pforce.connected_players - - if the_event=='swarm' then - CallFrenzyAttack(surface,position) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-swarm"},colors.lightred) - end - - elseif the_event=='invasion' then - local target = get_random_pos_near(position,150) - target = surface.find_non_colliding_position('rocket-silo', target, 60, 1) - if target then - create_invasion(surface,target,pcount) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-invasion"},colors.lightred) - end - Play_sound_alert(pforce,1) - if global.show_cameras then CreateCameraForForce(pforce,target,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='volcano' then - local target = get_random_pos_near(position,150) - target = surface.find_non_colliding_position('rocket-silo', target, 50, 1) - if target then - local volcano = create_volcano(surface, target, pcount) - if volcano then - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-volcano"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,volcano,surface,nil,nil,120,0.15) end - end - end - - - elseif the_event=='worms' then - local target = get_random_pos_near(position,150) - target = surface.find_non_colliding_position('rocket-silo', target, 50, 1) - if target then - local bigworm = create_bigworm(surface,target,pcount) - if bigworm then - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-worm"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,bigworm,surface,nil,nil,120,0.15) end - end - end - - - elseif the_event=='soldiers' then - local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} - if spawn then - spawn = get_random_pos_near(spawn.position,30) - local group, humie = create_soldiers_group(surface,spawn,pcount,position) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-human_soldiers"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,humie,surface,nil,nil,120,0.15) end - end - - - elseif the_event=='brutals' then - local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} - if spawn then - spawn = get_random_pos_near(spawn.position,30) - local group, brutal = create_brutals_group(surface,spawn,pcount,position) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-brutals"},colors.lightred) - end - Play_sound_alert(pforce,2) - if global.show_cameras then CreateCameraForForce(pforce,brutal,surface,nil,nil,120,0.15) end - end - - elseif the_event=='biterzilla' then - local spawn = surface.find_nearest_enemy{position=position, max_distance=500, force=pforce} - if spawn then - spawn = get_random_pos_near(spawn.position,30) - local group, zilla = create_biterzilla(surface,spawn,pcount,position) - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-biterzilla"},colors.lightred) - end - Play_sound_alert(pforce,3) - if global.show_cameras then CreateCameraForForce(pforce,zilla,surface,nil,nil,120,0.15) end - end - - end - -end - -function Create_Silo_Attack(the_event) -if not the_event then the_event=pick_event() end -if the_event then -for s=#global.rocket_silos,1,-1 do - local silo=global.rocket_silos[s] - if not (silo and silo.valid) then table.remove(global.rocket_silos,s) - else - - local pforce = silo.force - local pcount = #pforce.connected_players - local surface = silo.surface - - if pcount>0 then Create_Position_Event(the_event, surface, silo.position, pforce) end - end - end -end -end - - - -script.on_nth_tick(60*60, function (event) -if global.days>0 then - - if global.next_event 2000) or (math.abs(chunkPos.y) > 2000)) then break - - elseif (surface.is_chunk_generated(chunkPos)) then - local area = Chunk.to_area(chunkPos) - local builds = surface.find_entities_filtered{force=force,area=area,limit=1} - if #builds>0 then - last_building = table.deepcopy(chunkPos) - table.insert (player_chunks,table.deepcopy(chunkPos)) - else - nothing = nothing + 1 - if nothing >= chunk_distance then enemy_spawn = chunkPos end - end - - -- Found an ungenerated area - else break end - end - -last_building = {x= last_building.x*32+math.random(31), y= last_building.y*32+math.random(31)} -if enemy_spawn then - enemy_spawn = {x= enemy_spawn.x*32+math.random(31), y= enemy_spawn.y*32+math.random(31)} - enemy_spawn = surface.find_non_colliding_position('rocket-silo', enemy_spawn, 100, 1) - end - -return last_building, player_chunks, enemy_spawn -end - - - - -function group_set_command(group,position_1,position_2, position_3) - local def = defines - local compound = def.command.compound - local structure = def.compound_command.return_last - local go_to = def.command.attack_area - if not position_2 then position_2=position_1 end - if not position_3 then position_3=position_2 end - - group.set_command( - { - type = compound, - structure_type = structure, - commands = - { - {type = go_to, destination = position_1, distraction = defines.distraction.by_anything, radius=50}, - {type = go_to, destination = position_2, distraction = defines.distraction.by_enemy, radius=30}, - {type = go_to, destination = position_3, distraction = defines.distraction.by_enemy, radius=30}, - {type = defines.command.wander, distraction = defines.distraction.by_enemy, radius=30}, - } - }) - ---group.start_moving() -end - - - --------------------------------------------------------------------------------------- -function create_soldiers_group(surface,spawn,pcount, attack1, attack2,attack3) -local qt = math.min(10, math.max(2,math.ceil(game.forces.enemy.evolution_factor * 10 + math.random(math.ceil(pcount/2))))) + (global.difficulty_level-1) * 12 -local group -local one_humie -for x=1, qt do - local humie = get_random_human_soldier() - local position = surface.find_non_colliding_position(humie, spawn, 100, 1) - if position then - if not group then group = surface.create_unit_group{position = position, force = game.forces.enemy} end - one_humie = surface.create_entity{name=humie, position= position, force= game.forces.enemy} - if one_humie and one_humie.valid then group.add_member(one_humie) table.insert (global.other_enemies,one_humie ) end - end - end - -if game.forces.enemy.evolution_factor>0.91 and math.random(2)==1 then - local humie = get_random_boss_human_soldier(0) - local position = surface.find_non_colliding_position(humie, spawn, 100, 1) - if not group then group = surface.create_unit_group{position = position, force = game.forces.enemy} end - one_humie = surface.create_entity{name=humie, position=position, force = game.forces.enemy} - if one_humie and one_humie.valid then group.add_member(one_humie) table.insert(global.other_enemies,one_humie) end - end - -group_set_command(group,attack1,attack2,attack3) -return group, one_humie -end - -function create_invasion(surface,position,pcount) -local qt = math.min(25, math.max(1,math.ceil(game.forces.enemy.evolution_factor * 20 + math.random(math.ceil(pcount/2))))) + global.difficulty_level - 1 -table.insert (global.invasions, {name="bm-spawner", surface=surface, position=position, quant=qt}) -if game.forces.enemy.evolution_factor>0.8 then - if math.random(1,2)==1 then CallWormAttack(surface,position,math.ceil((qt+ global.difficulty_level )/2),0,25) end - end -end - - -function get_random_human_soldier(evolution) -if not evolution then evolution = game.forces.enemy.evolution_factor end -local list = { 'tc_fake_human_machine_gunner', -'tc_fake_human_laser', -'tc_fake_human_electric'} -if evolution>0.17 then - table.insert(list,'tc_fake_human_sniper') - else - table.insert(list,'tc_fake_human_melee') - table.insert(list,'tc_fake_human_pistol_gunner') - end -if evolution>0.3 then table.insert(list,'tc_fake_human_grenade') end -if evolution>0.60 then table.insert(list,'tc_fake_human_rocket') table.insert(list,'tc_fake_human_cannon') end -if evolution>0.75 then table.insert(list,'tc_fake_human_erocket') table.insert(list,'tc_fake_human_cluster_grenade') table.insert(list,'tc_fake_human_cannon_explosive') end -if global.allow_nuker and evolution>0.96 then table.insert(list,'tc_fake_human_nuke_rocket') end - -local n=math.min(10, math.max(math.ceil(evolution*10),1)) -return list[math.random(#list)] ..'_'..n -end - - -function get_random_boss_human_soldier(evolution) -if not evolution then evolution = game.forces.enemy.evolution_factor end -local list = { 'tc_fake_human_boss_machine_gunner', -'tc_fake_human_boss_laser', -'tc_fake_human_boss_electric'} -if evolution>0.94 then table.insert(list,'tc_fake_human_boss_sniper') end -if evolution>0.96 then - table.insert(list,'tc_fake_human_boss_rocket') - table.insert(list,'tc_fake_human_boss_grenade') - end -if evolution>0.98 then - table.insert(list,'tc_fake_human_boss_erocket') - table.insert(list,'tc_fake_human_boss_cluster_grenade') - table.insert(list,'tc_fake_human_boss_cannon_explosive') - end -local n=math.min(10, math.max(math.ceil((evolution - 0.9) *100),1)) -return list[math.random(#list)] ..'_'..n -end - - - -function get_brutals_for_evolution(evolution,extra_evo) -local brutals = {} -local biters = get_units_for_evolution(evolution,extra_evo) -for b=1,#biters do - local brut = 'brutal-'..biters[b] - if game.entity_prototypes[brut] then - table.insert(brutals,brut) - end - end -return brutals -end - -function create_brutals_group(surface,spawn,pcount, attack1, attack2,attack3) -local qt = math.min(10, math.max(2,math.ceil(game.forces.enemy.evolution_factor * 10 + math.random(math.ceil(pcount/2))))) + (global.difficulty_level-1) * 10 -local group -local one_brutal -local brutals = get_brutals_for_evolution(nil,0.1) -for x=1, qt do - local brutal = brutals[math.random(#brutals)] - local position = surface.find_non_colliding_position(brutal, spawn, 200, 1) - if position then - if not group then - group = surface.create_unit_group{position = position, force = game.forces.enemy} - surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} - create_remnants_particles (surface, math.random(30,50) , position) - end - one_brutal = surface.create_entity{name=brutal, position= position, force= game.forces.enemy} - create_tatoo_for_unit(one_brutal) - group.add_member(one_brutal) - table.insert (global.other_enemies,one_brutal ) - end - end -group_set_command(group,attack1,attack2,attack3) -return group, one_brutal -end - - - - -function get_random_lesser_boss(evolution,surface) -if not evolution then evolution = game.forces.enemy.evolution_factor end -local list = {'maf-boss-biter-','maf-boss-acid-spitter-'} -if game.active_mods['ArmouredBiters'] then table.insert(list,'maf-boss-armoured-biter-') end - -if game.active_mods['Cold_biters'] then - if (not surface) or #surface.find_entities_filtered{name='cb-cold-spawner',limit=1}>0 then - table.insert(list,'maf-boss-frost-biter-') - table.insert(list,'maf-boss-frost-spitter-') - end end -if game.active_mods['Explosive_biters'] then - if (not surface) or #surface.find_entities_filtered{name='explosive-biter-spawner',limit=1}>0 then - table.insert(list,'maf-boss-explosive-biter-') - table.insert(list,'maf-boss-explosive-spitter-') - end end - -if game.active_mods['Toxic_biters'] then - if (not surface) or #surface.find_entities_filtered{name='toxic-biter-spawner',limit=1}>0 then - table.insert(list,'maf-boss-toxic-biter-') - table.insert(list,'maf-boss-toxic-spitter-') - end end - -if game.active_mods['Arachnids_enemy'] then - if (not surface) or #surface.find_entities_filtered{name='arachnid-spawner-unitspawner',limit=1}>0 then - table.insert(list,'maf-boss-arachnid-biter-') - end end - -local n=math.min(10, math.max(math.ceil(evolution*10),1)) -return list[math.random(#list)] ..n -end - - - -function Call_next_wave(event) -local event_name = event.event_name -if event_name == 'swarm' then - local attacks = event.attacks - for a=1,#attacks do - local at = attacks[a] - CallFrenzyAttack(at.surface,at.target,at.limit,at.multiplier) - end - end -end - - -function CallFrenzyAttack(surface,target,limit,multiplier) -if not (surface and surface.valid) then return end - -if surface.map_gen_settings.autoplace_controls and surface.map_gen_settings.autoplace_controls["enemy-base"] - and surface.map_gen_settings.autoplace_controls["enemy-base"].size>0 then - -local position -if target.type and target.valid - then - position=target.position - else - position = target - end - -local Min = global.difficulty_level * 10 -local Max = 270 + global.difficulty_level * 30 -local Dist = 1500 - -local spawn = surface.find_entities_filtered({type = "unit-spawner",limit=1,position=position,radius=Dist}) -if #spawn>0 then -local force = spawn[1].force - - -local aliens = Max * force.evolution_factor -if aliens < Min then aliens=Min end -if limit and aliens>limit then aliens=limit end -if multiplier then aliens=math.floor(aliens * multiplier) end - - if target.type and target.valid then - local sent = surface.set_multi_command({ - command = {type=defines.command.attack, target=target, distraction = defines.distraction.by_anything }, - unit_count = aliens, - force = force, - unit_search_distance = Dist, - }) - else - local sent = surface.set_multi_command({ - command = {type=defines.command.attack_area, destination=position, radius=50, distraction = defines.distraction.by_anything }, - unit_count = aliens, - force = force, - unit_search_distance = Dist, - }) - end - end -end -end - - - - -function CallWormAttack(surface,position,how_many,min_distance,max_distance,force) -local worms = get_worms_for_evolution(nil,nil,surface,position) -for w=1,how_many do - local worm = worms[math.random(#worms)] - for t=1,10 do - local x = position.x + math.random(min_distance,max_distance)* RandomNegPos() - local y = position.y + math.random(min_distance,max_distance)* RandomNegPos() - local pos = surface.find_non_colliding_position(worm, {x=x,y=y}, 6, 2) - if pos then - create_remnants_particles (surface, math.random(20,40) , pos) - local wo = surface.create_entity{name=worm,force=force,position=pos} - table.insert (global.other_enemies,wo ) - break - end - end - end -end - - --------------------------------------------------------- -function create_biterzilla(surface,spawn,pcount, attack1, attack2, attack3,specific_zilla) -local zilla, name, group - -local evo = game.forces.enemy.evolution_factor -if evo<0.9 and (not specific_event) then - name = get_random_lesser_boss(evo,surface) - else - - local list = {"biterzilla1","biterzilla2","biterzilla3","maf-giant-acid-spitter","maf-giant-fire-spitter","bm-motherbiterzilla"} - if global.chances.soldiers.chance>0 then table.insert(list,"big_human") end - name = list[math.random(#list)] - if name=="big_human" then name=get_random_boss_human_soldier() - elseif string.find(name, "zilla") or string.find(name, "maf") then - local N=1 - if evo>0.98 then N=5 - elseif evo>0.96 then N=4 - elseif evo>0.94 then N=3 - elseif evo>0.92 then N=2 - end - name=name..N - end - end - -if specific_zilla then name=specific_zilla end - -local position = surface.find_non_colliding_position(name, spawn, 0, 1) - if position then - group = surface.create_unit_group{position = position, force = game.forces.enemy} - create_remnants_particles (surface, math.random(60,100) , position) - zilla = surface.create_entity{name=name, position=position, force = game.forces.enemy} - zilla.ai_settings.allow_destroy_when_commands_fail=false - surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} - group.add_member(zilla) - - local effect - if specific_zilla then effect='all_buff' - elseif (string.find(name, "human") and evo>0.6 and math.random (3)==1) then effect='defender_capsules' - elseif (string.find(name, "human") and evo>0.85 and math.random (3)==1) then effect='grenade_launcher' end - table.insert (global.biterzillas, {entity=zilla, effect = effect}) - - if evo>=0.9 then - local hpe = (pcount*zilla.health/10) * game.forces.enemy.evolution_factor - if game.forces.enemy.evolution_factor>0.95 then hpe = hpe*1.5 end - zilla.health = (zilla.health/5) + hpe - end - - if pcount>1 and game.forces.enemy.evolution_factor>0.95 then - if math.random(1,2)==1 then - CallFrenzyAttack(surface,attack1) - else - if global.chances.invasion.chance>=math.random(100) then create_invasion(surface,attack1,pcount) end - end - end - end - -group_set_command(group,attack1,attack2, attack3) -return group, zilla -end - - - -function create_spidertron(surface,spawn,pcount) -local spider -local evo = game.forces.enemy.evolution_factor -local N=1 -if evo>0.98 then N=5 - elseif evo>0.96 then N=4 - elseif evo>0.94 then N=3 - elseif evo>0.92 then N=2 - end -local name='bm-spidertron_' .. N - -local position = surface.find_non_colliding_position(name, spawn, 0, 1) - if position then - create_remnants_particles (surface, math.random(60,100) , position) - spider = surface.create_entity{name=name, position=position, force = game.forces.enemy} - surface.create_entity{name="bm-large-tunnel", position=position, force = game.forces.neutral} - local effect - if evo>0.6 and math.random (3)==1 then effect='defender_capsules' end - if evo>0.85 and math.random (3)==1 then effect='grenade_launcher' end - table.insert (global.biterzillas, {entity=spider, effect = effect}) - - if evo>=0.9 then - local hpe = (pcount*spider.health/10) * game.forces.enemy.evolution_factor - if game.forces.enemy.evolution_factor>0.95 then hpe = hpe*1.5 end - spider.health = ((spider.health/5) + hpe) * global.difficulty_level - end - end - -return spider -end - - - -function Spidertron_Moves(spider) -if global.spidertron_nuke then - spider.insert{name='maf-small-atomic-rocket',count=5} - end - -local FI = spider.get_fuel_inventory() -if FI then - if FI.get_item_count('solid-fuel')<20 and FI.can_insert{name='solid-fuel', count=20} then spider.insert {name='solid-fuel', count=20} end - end - - - -if game.forces.enemy.evolution_factor>0.95 then spider.insert{name='explosive-rocket',count=400} else spider.insert{name='rocket',count=400} end - -local enemy = spider.surface.find_nearest_enemy{position=spider.position, max_distance=1500, force=spider.force} --zilla.force - if enemy and enemy.valid then - spider.autopilot_destination = get_random_pos_near(enemy.position,40) - end -end - - - - - -local tick_zillas = 60 -script.on_nth_tick(tick_zillas, function (event) -cam_on_tick(event) - -for i=#global.invasions,1,-1 do - local inv =global.invasions[i] - local surface = inv.surface - if inv.quant>0 and surface.valid then - local position = inv.surface.find_non_colliding_position(inv.name, inv.position, 200, 4) - if position ~= nil then - create_remnants_particles (surface, math.random(20,40) , position) - local invader = surface.create_entity{name=inv.name, position=position, force = game.forces.enemy} - table.insert(global.other_enemies, invader) - end - inv.quant=inv.quant-1 - else inv.quant=0 - end - if inv.quant<1 then table.remove(global.invasions,i) end - end - - --- ZILLAS -for z=#global.biterzillas,1,-1 do - local ZI = global.biterzillas[z] - local zilla = ZI.entity - local effect = ZI.effect - if not (zilla and zilla.valid) then table.remove(global.biterzillas,z) - else - - if string.find(zilla.name, "biterzilla1") then - if math.random(1,4)==1 then - local xx = zilla.position.x + math.random(-5,5) - local yy = zilla.position.y + math.random(-5,5) - zilla.surface.create_entity{name ="maf-cluster-fire-projectile", target_position={x=xx,y=yy}, position={x=xx,y=yy}, source=zilla, force=zilla.force, speed=1} - end - elseif string.find(zilla.name, "biterzilla2") then - if math.random(3)==1 then zilla.surface.create_entity{name="electric-shock2", position=zilla.position, force=zilla.force} end - elseif string.find(zilla.name, "motherbiterzilla") then if math.random(1,4)==1 then Brood(zilla) end - elseif string.find(zilla.name, "human") and math.random(1,40)==1 then BroodHumans(zilla) - end - - if string.find(zilla.name, "tc_fake_human_ultimate_boss") then - if math.random(1,10)==1 then BroodHumans(zilla, 2) end end - - if effect and (effect=='defender_capsules' or effect=='all_buff') then - local ent = {'destroyer','defender'} - if math.random(3)==1 then zilla.surface.create_entity{name=ent[math.random(#ent)], position=zilla.position,target=zilla,force=zilla.force} end - end - if effect and (effect=='grenade_launcher' or effect=='all_buff') and math.random(5)==1 then - local d=35 - if effect=='all_buff' then d=60 end - local enemy = zilla.surface.find_nearest_enemy{position=zilla.position, max_distance=d, force=zilla.force} --zilla.force - if enemy and enemy.valid and enemy.name~='entity-ghost' and enemy.type~='entity-ghost' and enemy.destructible and enemy.health then - local weap = {'explosive-rocket','grenade'} - if string.find(zilla.name, "ultimate") then table.insert(weap,'bm-small-atomic-rocket') table.insert(weap,'cluster-grenade') end - zilla.surface.create_entity{name=weap[math.random(#weap)], target=enemy, position=zilla.position, force=zilla.force, speed=0.4} - end - end - - if zilla.valid and zilla.type == 'spider-vehicle' and game.tick % (tick_zillas*18) ==0 then Spidertron_Moves(zilla) end - - end -end - -end) - - - -script.on_nth_tick(60*3, function (event) - - if #global.next_wave>0 and global.next_wave[1].tick < game.tick then - Call_next_wave(global.next_wave[1]) - table.remove(global.next_wave,1) - end - -for k=#global.bm_volcano,1,-1 do - local V=global.bm_volcano[k] - local volcano = V.volcano - local tick = V.tiltick - if volcano and volcano.valid then - local pos = volcano.position - volcano.surface.pollute(pos,75) - volcano.surface.create_trivial_smoke{name='fire-smoke-on-adding-fuel', position=pos} - volcano.surface.create_trivial_smoke{name='turbine-smoke', position=pos} - if game.tick > tick then - volcano.die() - table.remove(global.bm_volcano,k) - else -- erupt!!! - volcano.surface.create_entity{name="big-artillery-explosion", position=pos, force = game.forces.neutral} - local area = 50 - local xx = pos.x + math.random(-area,area) - local yy = pos.y + math.random(-area,area) - volcano.surface.create_entity{name ="maf-cluster-fire-projectile", target_position={x=xx,y=yy}, position={x=xx,y=yy}, source=volcano, force= game.forces.enemy, speed=4} - end - else - table.remove(global.bm_volcano,k) - end - end -end) - - -function create_volcano(surface, target, pcount) -local duration = (60 * 60) + ((pcount + global.difficulty_level) * 60 * 20) -local volcano -local position = surface.find_non_colliding_position("bm-volcano", target, 200, 1) - if position ~= nil then - surface.create_entity{name="nuke-explosion", position=position, force = game.forces.enemy} --big-artillery-explosion - volcano = surface.create_entity{name="bm-volcano", position=position, force = game.forces.enemy} - table.insert(global.bm_volcano, {volcano=volcano, tiltick=game.tick + duration}) - end -return volcano -end - - --------------------------------------------------------------------------- -function create_bigworm(surface,target,pcount) -local worm = "maf-behemoth-worm-turret" -if game.forces.enemy.evolution_factor > 0.80 then worm = "maf-colossal-worm-turret" end -if game.forces.enemy.evolution_factor > 0.9 then - if math.random(1,2)==1 then worm = "bm-worm-boss-fire-shooter" else worm = "bm-worm-boss-acid-shooter" end - end -local worm = "maf-behemoth-worm-turret" - -local qt = math.min(4, 1 + math.floor(pcount/4)) + global.difficulty_level - 1 -local the_worm -for x=1,qt do - local position = surface.find_non_colliding_position(worm, target, 150, 1) - if position then - create_remnants_particles (surface, math.random(30,60) , position) - the_worm = surface.create_entity{name=worm, position= position, force= game.forces.enemy} - table.insert (global.other_enemies,the_worm ) - end - end - --- normal worms for reinforced attack -if pcount>2 then - local qt = math.min(25, math.max(1,math.ceil(game.forces.enemy.evolution_factor * 12 + math.random(math.ceil(pcount/2))))) + global.difficulty_level - 1 - CallWormAttack(surface,target,qt,0,20) - end - -return the_worm -end - - -function Brood(mother) -local x = mother.position.x -local y = mother.position.y -local r = 10 -local Units = mother.surface.find_entities_filtered({force=mother.force, area={{x-r,y-r},{x+r,y+r}}}) -if #Units>50 then return end -local Min = 2 -local Max = 6 -local num = math.random(Min,Max) + global.difficulty_level - 1 - -local group = mother.unit_group -local children = get_units_for_evolution() -for k=1,num do - local name= children[math.random(#children)] - local pos = mother.surface.find_non_colliding_position(name, mother.position, 10, 1) - if pos then - mother.surface.create_entity{name="bm-acid-splash-fire", position=pos, force = mother.force} - local child = mother.surface.create_entity{name=name, position=pos, force = mother.force} - if group then group.add_member(child) end - end - end -end - - -function BroodHumans(mother, extra) -extra=extra or 0 -local x = mother.position.x -local y = mother.position.y -local r = 10 -local Units = mother.surface.find_entities_filtered({force= mother.force, area={{x-r,y-r},{x+r,y+r}}}) -if #Units>5 + global.difficulty_level + extra*3 then return end -local num = math.random(3+ extra) + global.difficulty_level - 1 - -local group = mother.unit_group -for k=1,num do - local name= get_random_human_soldier() - local pos = mother.surface.find_non_colliding_position(name, mother.position, 15, 1) - if pos then - local child = mother.surface.create_entity{name=name, position=pos, force = mother.force} - if group then group.add_member(child) end - end - end -end - - --------------------------------------------------------------------------------------- - - -local function create_rocks(entity,quant) -local rocks = {'rock-big','rock-huge','sand-rock-big'} -entity.surface.create_entity{name='rock-huge', position=entity.position, force = game.forces.neutral} -for q=1,quant do - local rock = rocks[math.random(#rocks)] - local position = entity.surface.find_non_colliding_position(rock, entity.position, 10, 1) - if position ~= nil then - entity.surface.create_entity{name="big-artillery-explosion", position=position, force = game.forces.neutral} - entity.surface.create_entity{name=rock, position=position, force = game.forces.neutral} - end - end -end - -function On_Remove(event) - if event.entity and event.entity.name == "bm-volcano" then - create_rocks(event.entity,12) - end -end -local filters = {{filter = "name", name = "bm-volcano"}} -script.on_event(defines.events.on_entity_died, On_Remove) - - - -function On_Built(event) -local entity = event.created_entity or event.entity -if entity and entity.valid and entity.type~='entity-ghost' then - local surface = entity.surface - local name=entity.name - table.insert (global.rocket_silos,entity) - if global.enable_silo_attack then CallFrenzyAttack(surface,entity,nil,1.5) end - end -end -local filters = {{filter = "name", name = "rsc-silo-stage1"}, {filter = "name", name = "rsc-silo-stage1-serlp"}, {filter = "name", name = "rocket-silo"}} -script.on_event(defines.events.on_built_entity, On_Built, filters) -script.on_event(defines.events.on_robot_built_entity, On_Built, filters) -script.on_event(defines.events.script_raised_built, On_Built, filters) - - - -function player_mined_entity(event) -local player = game.players[event.player_index] -if not player.valid then return end -local ent = event.entity -if ent.type=='tree' then - if math.random()<=global.tree_events_chance then - local the_event=pick_event({'biterzilla','volcano'}) - if the_event then - local pforce = player.force - local surface = ent.surface - Create_Position_Event(the_event, surface, ent.position, pforce) - end - end - end -end -local filters = {{filter = "type", type = "tree"}} -script.on_event(defines.events.on_player_mined_entity, player_mined_entity, filters) - - --- warptorio -function on_warptorio_warp(event) -global.surfaces = {} -local newsurface = event.newsurface -local planet = event.newplanet -if planet and newsurface then - local flags = planet.flags - if (not flags) or (not in_list(flags,"rest")) then - add_list(global.surfaces, newsurface.name) - end - end -end - - - --- player body abduction mod -function on_corpse_feasted(event) -local corpse=event.corpse -local attack=event.attack_target -if corpse and corpse.valid and attack and attack.valid then - local evo = game.forces.enemy.evolution_factor - local surface = corpse.surface - ---if corpse.get_item_count("rocket-launcher")>0 then - if global.chances.biterzilla.min_evo<=evo and math.random(100) <= global.chances.biterzilla.chance*2 then - local pforce - if corpse.character_corpse_player_index and game.players[corpse.character_corpse_player_index] and game.players[corpse.character_corpse_player_index].valid then - pforce = game.players[corpse.character_corpse_player_index].force - end - local boss_name=get_random_boss_human_soldier() - local position = surface.find_non_colliding_position(boss_name, corpse.position, 30, 1) - local boss = surface.create_entity{name=boss_name, position=position, force = game.forces.enemy} - boss.ai_settings.allow_destroy_when_commands_fail=false - table.insert (global.biterzillas, {entity=boss}) - if pforce then - if global.show_alerts then - pforce.print({"bm-txt-alert"},colors.lightred) - pforce.print({"bm-txt-biterzilla"},colors.lightred) - end - Play_sound_alert(pforce,3) - end - else - local humie = get_random_human_soldier() - local position = surface.find_non_colliding_position(humie, corpse.position, 30, 1) - surface.create_entity{name=humie, position= position, force= game.forces.enemy} - end -end -end - - -function RegisterModEvents() -if remote.interfaces["warptorio2"] then - local warp_event = remote.call("warptorio2","get_event", "on_post_warp") - script.on_event(warp_event, function(event) - on_warptorio_warp(event) - end) -end - - -if remote.interfaces["PlayerBodyAbduction"] then - local pba_event = remote.call("PlayerBodyAbduction", "get_on_corpse_feasted") - script.on_event(pba_event, function(event) - on_corpse_feasted(event) - end) -end -end - - - - --------------------------------------------------------------------------------------- - - --- INTERFACE - --------------------------------------------------------------------------------------- - -local interface = {} - - -function interface.destroy_all() -global.invasions = {} - -for _, zilla in pairs(global.biterzillas) do - if zilla.entity.valid then - zilla.entity.destroy() - end -end -global.biterzillas = {} - -for k=#global.bm_volcano,1,-1 do - local V=global.bm_volcano[k] - local volcano = V.volcano - if volcano and volcano.valid then volcano.destroy() end - end -global.bm_volcano = {} - -for _, e in pairs(global.other_enemies) do if e and e.valid then e.destroy() end end -global.other_enemies = {} -end - -local event_names = {'biterzilla','brutals','soldiers','worms','volcano','invasion','swarm','spidertron','ultimate_boss'} - -function interface.create_event(the_event,surfacename,forcename) -if (not the_event) or in_list(event_names, the_event) then - CreateNewEvent(the_event,surfacename, forcename) - end -end -function interface.create_silo_event(the_event) -if (not the_event) or in_list(event_names, the_event) then - Create_Silo_Attack(the_event) - end -end - --- exclude / include surfaces for disasters -function interface.exclude_surface(surfacename) -if surfacename then del_list(global.surfaces, surfacename) end -end - -function interface.add_surface(surfacename) -if surfacename then add_list(global.surfaces, surfacename) end -end - --- exclude / include player forces to be targeted -function interface.exclude_player_force(forcename) -if forcename then del_list(global.player_forces, forcename) end -end - -function interface.add_player_force(forcename) -if forcename then add_list(global.player_forces, forcename) end -end - -remote.add_interface( "bigmonster", interface ) - - ---[[ - Usage for creating events: create_event(eventname,surfacename,forcename) - Use these event names 'biterzilla','soldiers','worms','volcano','invasion','swarm' - nil will create a random event - - Examples: - Call specific events for all surfaces and all player forces - /c remote.call( "bigmonster", "create_event", "biterzilla") - /c remote.call( "bigmonster", "create_event", "soldiers") - /c remote.call( "bigmonster", "create_event", "worms") - /c remote.call( "bigmonster", "create_event", "volcano") - /c remote.call( "bigmonster", "create_event", "invasion") - /c remote.call( "bigmonster", "create_event", "swarm") - /c remote.call( "bigmonster", "create_event", "spidertron") - - /c remote.call( "bigmonster", "create_event", "ultimate_boss") - - - Call specific event for nauvis surface only, to all player forces - /c remote.call( "bigmonster", "create_event", "biterzilla", "nauvis") - - Call specific event for all registered surfaces, to specific player force - /c remote.call( "bigmonster", "create_event", "volcano", nil, "player") - - Call random event for all registered surfaces, to specific player force - /c remote.call( "bigmonster", "create_event", nil, nil, "player") - - - Call an event for attacking All Silos - eventname = all above - /c remote.call( "bigmonster", "create_silo_event", eventname) - - -include surfaces for disasters -/c remote.call( "bigmonster", "add_surface", surfacename) -exclude surfaces for disasters -/c remote.call( "bigmonster", "exclude_surface", surfacename) - - -include player force to be targeted -/c remote.call( "bigmonster","add_player_force",forcename) -exclude player force to be targeted -/c remote.call( "bigmonster","exclude_player_force",forcename) - -destroy all mod enemies -/c remote.call( "bigmonster","destroy_all") -]] - - diff --git a/Big-Monsters_1.4.0/graphics/electroshock-pulse-explosion.png b/Big-Monsters_1.4.0/graphics/electroshock-pulse-explosion.png deleted file mode 100644 index abd5decd..00000000 Binary files a/Big-Monsters_1.4.0/graphics/electroshock-pulse-explosion.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/electroshock-pulse-sticker.png b/Big-Monsters_1.4.0/graphics/electroshock-pulse-sticker.png deleted file mode 100644 index c2e89c0e..00000000 Binary files a/Big-Monsters_1.4.0/graphics/electroshock-pulse-sticker.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/fake_human.png b/Big-Monsters_1.4.0/graphics/fake_human.png deleted file mode 100644 index 0292e60b..00000000 Binary files a/Big-Monsters_1.4.0/graphics/fake_human.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-explosion.png b/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-explosion.png deleted file mode 100644 index dfeeaff5..00000000 Binary files a/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-explosion.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-sticker.png b/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-sticker.png deleted file mode 100644 index 1ef75db6..00000000 Binary files a/Big-Monsters_1.4.0/graphics/hr-electroshock-pulse-sticker.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/large-tunnel.png b/Big-Monsters_1.4.0/graphics/large-tunnel.png deleted file mode 100644 index e1b49f1e..00000000 Binary files a/Big-Monsters_1.4.0/graphics/large-tunnel.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/tunnel-dead.png b/Big-Monsters_1.4.0/graphics/tunnel-dead.png deleted file mode 100644 index 78685c4b..00000000 Binary files a/Big-Monsters_1.4.0/graphics/tunnel-dead.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/tunnel.png b/Big-Monsters_1.4.0/graphics/tunnel.png deleted file mode 100644 index f01b5696..00000000 Binary files a/Big-Monsters_1.4.0/graphics/tunnel.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/graphics/volcano.png b/Big-Monsters_1.4.0/graphics/volcano.png deleted file mode 100644 index 16b3b2fc..00000000 Binary files a/Big-Monsters_1.4.0/graphics/volcano.png and /dev/null differ diff --git a/Big-Monsters_1.4.0/locale/en/en.cfg b/Big-Monsters_1.4.0/locale/en/en.cfg deleted file mode 100644 index 126d5411..00000000 --- a/Big-Monsters_1.4.0/locale/en/en.cfg +++ /dev/null @@ -1,131 +0,0 @@ -ο»Ώlabel=label -bm-txt-alert= ! ! ! W A R N I N G ! ! ! -bm-txt-swarm=You hear many roars approaching the base... -bm-txt-invasion=The ground is shaking and strange noises are coming from your feet... -bm-txt-volcano=The ground is shaking and you see lava in the sky... -bm-txt-biterzilla=You hear the roaring roar of an immense creature approaching... you better prepare the defenses... -bm-txt-worm=Everything around you begins to sway. Something very large moved the ground. Stay alert! -bm-txt-human_soldiers=A group of enemy soldiers are coming to your base! -bm-txt-brutals=A group of strong aliens are moving to your base! Be prepared! - -[entity-name] -maf-boss-biter=Boss Biter -maf-boss-spitter=Spitter Boss -bm-spawner=Underground hole -bm-spawner-corpse=Underground hole corpse -biterzilla1=Giant of Hell -biterzilla2=Giant Blue -biterzilla3=Rock Beast -bm-motherbiterzilla=Brood Mother -bm-motherbiterzilla-corpse=Brood Mother corpse -maf-giant-acid-spitter=Monster Acid Spitter -maf-giant-acid-spitter-corpse=Monster Acid Spitter corpse -maf-behemoth-worm-turret=Giant Monster Worm -maf-colossal-worm-turret=Colossal Monster Worm -behemoth-worm-corpse=Giant Monster Worm corpse -colossal-worm-corpse=Colossal Monster Worm corpse -maf-giant-fire-spitter=Incendiary Spitter Monster -bm-worm-boss-acid-shooter=Monstruous Fire Worm -bm-worm-boss-fire-shooter=Monstruous Acid Worm -bm-volcano=Volcano -fake_human_machine_gunner=Human with machine gun -fake_human_melee=Human with pickaxe -fake_human_pistol_gunner=Human with pistol -fake_human_sniper=Human with sniper rifle -fake_human_laser=Human with laser rifle -fake_human_electric=Human with electric rifle -fake_human_erocket=Human with rocket launcher -fake_human_rocket=Human with rocket launcher -fake_human_grenade=Human with grenade -fake_human_cluster_grenade=Human with cluster grenade -fake_human_nuke_rocket=Human with nuke bomb -fake_human_cannon=Human with cannon -fake_human_cannon_explosive=Human with explosive cannon - -fake_human_boss_melee=Boss with pickaxe -fake_human_boss_machine_gunner=Boss with machine gun -fake_human_boss_pistol_gunner=Boss with pistol -fake_human_boss_sniper=Boss with sniper rifle -fake_human_boss_laser=Boss with laser rifle -fake_human_boss_electric=Boss with electric rifle -fake_human_boss_erocket=Boss with rocket launcher -fake_human_boss_rocket=Boss with rocket launcher -fake_human_boss_grenade=Boss with grenade -fake_human_boss_cluster_grenade=Boss with cluster grenade -fake_human_boss_nuke_rocket=Boss with nuke bomb -fake_human_boss_cannon_explosive=Boss with explosive cannon - -fake_human_ultimate_boss_cannon=Ultimate Boss with cannon - -[entity-description] -bm-volcano=This volcano spread fire streams all around. These eruptions will last some time - - -[mod-setting-name] -bm-events-when-peaceful=Enabled in peaceful mode -bm-big-enemy-hp-multiplier=Big enemies HP multiplyer -bm-big-enemy-hp-variant=Big enemies HP variant -bm-worm-enemy-hp-multiplier=Worms HP multiplyer -bm-enemy-hp-multiplier=Small enemies HP multiplyer -bm-enemy-damage-multiplier=Enemy damage multiplyer -bm-event-days=Event interval (game days) -bm-swarm-chance=Swarm chance % -bm-invasion-chance=Underground invasion chance % -bm-worms-chance=Big worms chance % -bm-soldiers-chance=Human enemies chance % -bm-biterzilla-chance=Biterzilla chance % -bm-volcano-chance=Volcano chance % -bm-brutals-chance=Brutal biters chance % -bm-show-alerts=Enable text alerts -bm-play-sound-alert=Enable sound alerts -bm-show-cameras=Create cameras on events -bm-enable-silo-attack=Enable Rocket-Silo attacks -bm-spidertron-chance=Spidertron chance % -bm-allow-nuker=Allow nuclear soldier -bm-difficulty-level=Difficulty Level -bm-spidertron-nuke=Equip spidertron with small nuke bombs -bm-invasion-min_evo=Underground invasion minimal evolution -bm-soldiers-min_evo=Human enemies minimal evolution -bm-brutals-min_evo=Brutal biters minimal evolution -bm-worms-min_evo=Big worms minimal evolution -bm-biterzilla-min_evo=Biterzilla minimal evolution -bm-spidertron-min_evo=Spidertron minimal evolution -bm-volcano-min_evo=Volcano minimal evolution -bm-swarm-max_evo=Swarm max evolution -bm-volcano-max_evo=Volcano max evolution -bm-tree-events-chance=Tree mining event chance % -bm-spawn_near_nests=Spawn near nests -bm_draggable_camera=Draggable cameras -bm_camera_size=Camera size - - -[mod-setting-description] -bm-events-when-peaceful=If enabled, events will occur even in peaceful mode -bm-event-days=How often the attacks will happen (1 game day = 7 minutes). Values 0-20 (Zero = disable all) -bm-enable-silo-attack=If enabled, you will be seriously attacked after the Rocket-Silo is built -bm-big-enemy-hp-multiplier=0.2-10.0 (default 1) -bm-big-enemy-hp-variant=0.2-4.0 (default 1) -bm-worm-enemy-hp-multiplier=0.2-10.0 (default 1) -bm-enemy-hp-multiplier=0.2-10.0 (default 1) -bm-enemy-damage-multiplier=0.5-10.0 (default 1) -bm-swarm-chance=0-100 -bm-invasion-chance=0-80 -bm-worms-chance=0-80 -bm-brutals-chance=0-80 -bm-soldiers-chance=0-80 -bm-biterzilla-chance=0-80 -bm-volcano-chance=0-80 -bm-spidertron-chance=0-80 -bm-allow-nuker=Part of the humam soldiers group. Equiped with small atomic bomb missile -bm-difficulty-level=1-10 -bm-invasion-min_evo=0.0-0.9 -bm-soldiers-min_evo=0.0-0.9 -bm-brutals-min_evo=0.0-0.9 -bm-worms-min_evo=0.0-0.9 -bm-biterzilla-min_evo=0.0-0.9 -bm-spidertron-min_evo=0.0-0.9 -bm-volcano-min_evo=0.0-0.9 -bm-tree-events-chance=If a player mines a tree, this is the chance of something bad happens -bm-swarm-max_evo=If evolution if higher than this value, the event does not happen anymore -bm-volcano-max_evo=If evolution if higher than this value, the event does not happen anymore -bm-spawn_near_nests=Most enemy attacks will be spawned near enemy nests, if possible \ No newline at end of file diff --git a/Big-Monsters_1.4.0/settings.lua b/Big-Monsters_1.4.0/settings.lua deleted file mode 100644 index c2dcc2c4..00000000 --- a/Big-Monsters_1.4.0/settings.lua +++ /dev/null @@ -1,349 +0,0 @@ -data:extend({ - - { - type = "int-setting", - name = "bm-event-days", - setting_type = "runtime-global", - default_value = 100, --drd - minimum_value = 0, - maximum_value = 365, --drd - order = "a" - }, - - -- skp, drd - { - type = "bool-setting", - name = "bm-events-when-peaceful", - setting_type = "runtime-global", - default_value = false, - order = "a" - }, - -- skp, drd - - -{ - type = "double-setting", - name = "bm-invasion-min_evo", - setting_type = "runtime-global", - default_value = 0.1, - minimum_value = 0, - maximum_value = 0.9, - order = "b2" -}, -{ - type = "double-setting", - name = "bm-soldiers-min_evo", - setting_type = "runtime-global", - default_value = 0.05, - minimum_value = 0, - maximum_value = 0.9, - order = "b3" -}, -{ - type = "double-setting", - name = "bm-brutals-min_evo", - setting_type = "runtime-global", - default_value = 0.2, - minimum_value = 0, - maximum_value = 0.9, - order = "b4" -}, -{ - type = "double-setting", - name = "bm-worms-min_evo", - setting_type = "runtime-global", - default_value = 0.7, - minimum_value = 0, - maximum_value = 0.9, - order = "b5" -}, -{ - type = "double-setting", - name = "bm-biterzilla-min_evo", - setting_type = "runtime-global", - default_value = 0.3, - minimum_value = 0, - maximum_value = 0.9, - order = "b6" -}, -{ - type = "double-setting", - name = "bm-spidertron-min_evo", - setting_type = "runtime-global", - default_value = 0.8, - minimum_value = 0, - maximum_value = 0.9, - order = "b7" -}, -{ - type = "double-setting", - name = "bm-volcano-min_evo", - setting_type = "runtime-global", - default_value = 0.5, - minimum_value = 0, - maximum_value = 0.9, - order = "b8" -}, - - -{ - type = "double-setting", - name = "bm-volcano-max_evo", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 0, - maximum_value = 1, - order = "b8b" -}, - - - { - type = "int-setting", - name = "bm-swarm-chance", - setting_type = "runtime-global", - default_value = 100, - minimum_value = 0, - maximum_value = 100, - order = "c1" - }, - -{ - type = "double-setting", - name = "bm-swarm-max_evo", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 0.5, - maximum_value = 1, - order = "c1b" -}, - - - { - type = "int-setting", - name = "bm-invasion-chance", - setting_type = "runtime-global", - default_value = 30, - minimum_value = 0, - maximum_value = 80, - order = "c2" - }, - - { - type = "int-setting", - name = "bm-soldiers-chance", - setting_type = "runtime-global", - default_value = 30, - minimum_value = 0, - maximum_value = 80, - order = "c3" - }, - - { - type = "int-setting", - name = "bm-brutals-chance", - setting_type = "runtime-global", - default_value = 30, - minimum_value = 0, - maximum_value = 80, - order = "c3" - }, - - { - type = "int-setting", - name = "bm-worms-chance", - setting_type = "runtime-global", - default_value = 40, - minimum_value = 0, - maximum_value = 80, - order = "c4" - }, - - - - { - type = "int-setting", - name = "bm-biterzilla-chance", - setting_type = "runtime-global", - default_value = 30, - minimum_value = 0, - maximum_value = 80, - order = "c5a" - }, - - { - type = "int-setting", - name = "bm-spidertron-chance", - setting_type = "runtime-global", - default_value = 30, - minimum_value = 0, - maximum_value = 80, - order = "c5b" - }, - - - { - type = "int-setting", - name = "bm-volcano-chance", - setting_type = "runtime-global", - default_value = 20, - minimum_value = 0, - maximum_value = 80, - order = "c6" - }, - - - { - type = "bool-setting", - name = "bm-enable-silo-attack", - setting_type = "runtime-global", - default_value = true, - order = "d1" - }, - - -{ - type = "double-setting", - name = "bm-enemy-hp-multiplier", - setting_type = "startup", - default_value = 1, - minimum_value = 0.2, - maximum_value = 10, - order = "m1a" -}, - -{ - type = "double-setting", - name = "bm-big-enemy-hp-multiplier", - setting_type = "startup", - default_value = 1, - minimum_value = 0.2, - maximum_value = 10, - order = "m1b" -}, - -{ - type = "double-setting", - name = "bm-big-enemy-hp-variant", - setting_type = "startup", - default_value = 1, - minimum_value = 0.2, - maximum_value = 4, - order = "m1c" -}, - -{ - type = "double-setting", - name = "bm-worm-enemy-hp-multiplier", - setting_type = "startup", - default_value = 1, - minimum_value = 0.2, - maximum_value = 10, - order = "m1d" -}, - - -{ - type = "double-setting", - name = "bm-enemy-damage-multiplier", - setting_type = "startup", - default_value = 1, - minimum_value = 0.5, - maximum_value = 10, - order = "m2" -}, - - - { - type = "bool-setting", - name = "bm-show-alerts", - setting_type = "runtime-global", - default_value = true, - order = "s1" - }, - - { - type = "bool-setting", - name = "bm-play-sound-alert", - setting_type = "runtime-global", - default_value = true, - order = "s1" - }, - - - { - type = "bool-setting", - name = "bm-show-cameras", - setting_type = "runtime-global", - default_value = true, - order = "s2" - }, - - - { - type = "bool-setting", - name = "bm-allow-nuker", - setting_type = "runtime-global", - default_value = true, - order = "s5" - }, - - { - type = "bool-setting", - name = "bm-spidertron-nuke", - setting_type = "runtime-global", - default_value = false, - order = "s6" - }, - - { - type = "int-setting", - name = "bm-difficulty-level", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 1, - maximum_value = 10, - order = "u" - }, - -{ - type = "double-setting", - name = "bm-tree-events-chance", - setting_type = "runtime-global", - default_value = 0.0, --drd - minimum_value = 0.0, - maximum_value = 100, - order = "w" -}, - - - - { - type = "bool-setting", - name = "bm-spawn_near_nests", - setting_type = "runtime-global", - default_value = false, - order = "z" - }, - - - - -- per player - { - type = "bool-setting", - name = "bm_draggable_camera", - setting_type = "runtime-per-user", - default_value = false, - order = "c" - }, - - { - type = "int-setting", - name = "bm_camera_size", - setting_type = "runtime-per-user", - minimum_value = 230, - maximum_value = 700, - default_value = 230, - order = "c" - }, - -}) \ No newline at end of file diff --git a/Big-Monsters_1.4.0/thumbnail.png b/Big-Monsters_1.4.0/thumbnail.png deleted file mode 100644 index 2740e3b7..00000000 Binary files a/Big-Monsters_1.4.0/thumbnail.png and /dev/null differ diff --git a/BigLab_9.1.1/data-final-fixes.lua b/BigLab/data-final-fixes.lua similarity index 100% rename from BigLab_9.1.1/data-final-fixes.lua rename to BigLab/data-final-fixes.lua diff --git a/BigLab_9.1.1/graphics/icon/big-lab.png b/BigLab/graphics/icon/big-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/icon/big-lab.png rename to BigLab/graphics/icon/big-lab.png diff --git a/BigLab_9.1.1/graphics/icon/hyper-lab.png b/BigLab/graphics/icon/hyper-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/icon/hyper-lab.png rename to BigLab/graphics/icon/hyper-lab.png diff --git a/BigLab_9.1.1/graphics/lab/big-lab.png b/BigLab/graphics/lab/big-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/lab/big-lab.png rename to BigLab/graphics/lab/big-lab.png diff --git a/BigLab_9.1.1/graphics/lab/hyper-lab.png b/BigLab/graphics/lab/hyper-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/lab/hyper-lab.png rename to BigLab/graphics/lab/hyper-lab.png diff --git a/BigLab_9.1.1/graphics/tech/big-lab.png b/BigLab/graphics/tech/big-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/tech/big-lab.png rename to BigLab/graphics/tech/big-lab.png diff --git a/BigLab_9.1.1/graphics/tech/hyper-lab.png b/BigLab/graphics/tech/hyper-lab.png similarity index 100% rename from BigLab_9.1.1/graphics/tech/hyper-lab.png rename to BigLab/graphics/tech/hyper-lab.png diff --git a/BigLab_9.1.1/info.json b/BigLab/info.json similarity index 100% rename from BigLab_9.1.1/info.json rename to BigLab/info.json diff --git a/BigLab_9.1.1/locale/en/base.cfg b/BigLab/locale/en/base.cfg similarity index 100% rename from BigLab_9.1.1/locale/en/base.cfg rename to BigLab/locale/en/base.cfg diff --git a/BigLab_9.1.1/locale/ru/base.cfg b/BigLab/locale/ru/base.cfg similarity index 100% rename from BigLab_9.1.1/locale/ru/base.cfg rename to BigLab/locale/ru/base.cfg diff --git a/BigLab_9.1.1/migrations/BigLab_9.1.0.json b/BigLab/migrations/BigLab_9.1.0.json similarity index 100% rename from BigLab_9.1.1/migrations/BigLab_9.1.0.json rename to BigLab/migrations/BigLab_9.1.0.json diff --git a/BigLab_9.1.1/prototypes/big-lab.lua b/BigLab/prototypes/big-lab.lua similarity index 100% rename from BigLab_9.1.1/prototypes/big-lab.lua rename to BigLab/prototypes/big-lab.lua diff --git a/BigLab_9.1.1/prototypes/hyper-lab.lua b/BigLab/prototypes/hyper-lab.lua similarity index 100% rename from BigLab_9.1.1/prototypes/hyper-lab.lua rename to BigLab/prototypes/hyper-lab.lua diff --git a/BigLab_9.1.1/prototypes/technology.lua b/BigLab/prototypes/technology.lua similarity index 100% rename from BigLab_9.1.1/prototypes/technology.lua rename to BigLab/prototypes/technology.lua diff --git a/BigLab_9.1.1/thumbnail.png b/BigLab/thumbnail.png similarity index 100% rename from BigLab_9.1.1/thumbnail.png rename to BigLab/thumbnail.png diff --git a/BigLightElectricMiningDrill_1.1.0/changelog.txt b/BigLightElectricMiningDrill/changelog.txt similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/changelog.txt rename to BigLightElectricMiningDrill/changelog.txt diff --git a/BigLightElectricMiningDrill_1.1.0/data-final-fixes.lua b/BigLightElectricMiningDrill/data-final-fixes.lua similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/data-final-fixes.lua rename to BigLightElectricMiningDrill/data-final-fixes.lua diff --git a/BigLightElectricMiningDrill_1.1.0/data-updates.lua b/BigLightElectricMiningDrill/data-updates.lua similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/data-updates.lua rename to BigLightElectricMiningDrill/data-updates.lua diff --git a/BigLightElectricMiningDrill_1.1.0/info.json b/BigLightElectricMiningDrill/info.json similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/info.json rename to BigLightElectricMiningDrill/info.json diff --git a/BigLightElectricMiningDrill_1.1.0/libs/electric-mining-drill.lua b/BigLightElectricMiningDrill/libs/electric-mining-drill.lua similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/libs/electric-mining-drill.lua rename to BigLightElectricMiningDrill/libs/electric-mining-drill.lua diff --git a/BigLightElectricMiningDrill_1.1.0/locale/en/local.cfg b/BigLightElectricMiningDrill/locale/en/local.cfg similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/locale/en/local.cfg rename to BigLightElectricMiningDrill/locale/en/local.cfg diff --git a/BigLightElectricMiningDrill_1.1.0/settings.lua b/BigLightElectricMiningDrill/settings.lua similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/settings.lua rename to BigLightElectricMiningDrill/settings.lua diff --git a/BigLightElectricMiningDrill_1.1.0/thumbnail.png b/BigLightElectricMiningDrill/thumbnail.png similarity index 100% rename from BigLightElectricMiningDrill_1.1.0/thumbnail.png rename to BigLightElectricMiningDrill/thumbnail.png diff --git a/Bio_Industries_19.1.9/common.lua b/Bio_Industries/common.lua similarity index 100% rename from Bio_Industries_19.1.9/common.lua rename to Bio_Industries/common.lua diff --git a/Bio_Industries_19.1.9/control.lua b/Bio_Industries/control.lua similarity index 100% rename from Bio_Industries_19.1.9/control.lua rename to Bio_Industries/control.lua diff --git a/Bio_Industries_19.1.9/control_tree.lua b/Bio_Industries/control_tree.lua similarity index 100% rename from Bio_Industries_19.1.9/control_tree.lua rename to Bio_Industries/control_tree.lua diff --git a/Bio_Industries_19.1.9/data-final-fixes.lua b/Bio_Industries/data-final-fixes.lua similarity index 100% rename from Bio_Industries_19.1.9/data-final-fixes.lua rename to Bio_Industries/data-final-fixes.lua diff --git a/Bio_Industries_19.1.9/data-updates.lua b/Bio_Industries/data-updates.lua similarity index 100% rename from Bio_Industries_19.1.9/data-updates.lua rename to Bio_Industries/data-updates.lua diff --git a/Bio_Industries_19.1.9/data.lua b/Bio_Industries/data.lua similarity index 100% rename from Bio_Industries_19.1.9/data.lua rename to Bio_Industries/data.lua diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon.png b/Bio_Industries/graphics/entities/bio_cannon/bio_cannon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon.png rename to Bio_Industries/graphics/entities/bio_cannon/bio_cannon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_attack.png b/Bio_Industries/graphics/entities/bio_cannon/bio_cannon_attack.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_attack.png rename to Bio_Industries/graphics/entities/bio_cannon/bio_cannon_attack.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_closed.png b/Bio_Industries/graphics/entities/bio_cannon/bio_cannon_closed.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_closed.png rename to Bio_Industries/graphics/entities/bio_cannon/bio_cannon_closed.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_open.png b/Bio_Industries/graphics/entities/bio_cannon/bio_cannon_open.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/bio_cannon_open.png rename to Bio_Industries/graphics/entities/bio_cannon/bio_cannon_open.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Ammo-shadow.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Ammo-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Ammo-shadow.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Ammo-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo_Icon.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo_Icon.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Basic_Ammo_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo_Icon.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo_Icon.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Bio_Ammo_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo_Icon.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo_Icon.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Poison_Ammo_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Proto_Ammo_Icon.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Proto_Ammo_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Proto_Ammo_Icon.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/Bio_Cannon_Proto_Ammo_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/explosion.png b/Bio_Industries/graphics/entities/bio_cannon/projectiles/explosion.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_cannon/projectiles/explosion.png rename to Bio_Industries/graphics/entities/bio_cannon/projectiles/explosion.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Boiler.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Boiler.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Boiler.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Boiler.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Boiler_on.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Boiler_on.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Boiler_on.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Boiler_on.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off_alt.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off_alt.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_Off_alt.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On_alt_old.png b/Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On_alt_old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On_alt_old.png rename to Bio_Industries/graphics/entities/bio_solar_farm/Bio_Solar_Farm_On_alt_old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/LargeAccumulatorAnimated.png b/Bio_Industries/graphics/entities/bio_solar_farm/LargeAccumulatorAnimated.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/LargeAccumulatorAnimated.png rename to Bio_Industries/graphics/entities/bio_solar_farm/LargeAccumulatorAnimated.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeAccumulator.png b/Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeAccumulator.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeAccumulator.png rename to Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeAccumulator.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeAccumulatorAnimated.png b/Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeAccumulatorAnimated.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeAccumulatorAnimated.png rename to Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeAccumulatorAnimated.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeSubstation.png b/Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeSubstation.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeSubstation.png rename to Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeSubstation.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeSubstation_Old.png b/Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeSubstation_Old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/bi_LargeSubstation_Old.png rename to Bio_Industries/graphics/entities/bio_solar_farm/bi_LargeSubstation_Old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-inner-corner.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar-inner-corner.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-inner-corner.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar-inner-corner.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-o.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar-o.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-o.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar-o.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-outer-corner.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar-outer-corner.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-outer-corner.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar-outer-corner.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-side.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar-side.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-side.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar-side.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-u.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar-u.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar-u.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar-u.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar1.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar1.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar1x.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar1x.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar1x.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar1x.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar2.png b/Bio_Industries/graphics/entities/bio_solar_farm/solar2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_solar_farm/solar2.png rename to Bio_Industries/graphics/entities/bio_solar_farm/solar2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bio_turret/bio_turret.png b/Bio_Industries/graphics/entities/bio_turret/bio_turret.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bio_turret/bio_turret.png rename to Bio_Industries/graphics/entities/bio_turret/bio_turret.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Idle.png b/Bio_Industries/graphics/entities/biofarm/Bio_Farm_Idle.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Idle.png rename to Bio_Industries/graphics/entities/biofarm/Bio_Farm_Idle.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Idle_alt.png b/Bio_Industries/graphics/entities/biofarm/Bio_Farm_Idle_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Idle_alt.png rename to Bio_Industries/graphics/entities/biofarm/Bio_Farm_Idle_alt.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Working.png b/Bio_Industries/graphics/entities/biofarm/Bio_Farm_Working.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Working.png rename to Bio_Industries/graphics/entities/biofarm/Bio_Farm_Working.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Working_alt.png b/Bio_Industries/graphics/entities/biofarm/Bio_Farm_Working_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/Bio_Farm_Working_alt.png rename to Bio_Industries/graphics/entities/biofarm/Bio_Farm_Working_alt.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_off.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse_off.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_off.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse_off.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_off_old.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse_off_old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_off_old.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse_off_old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_on.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse_on.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_on.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse_on.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_on_old.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse_on_old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_on_old.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse_on_old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_x.png b/Bio_Industries/graphics/entities/biofarm/bio_greenhouse_x.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/bio_greenhouse_x.png rename to Bio_Industries/graphics/entities/biofarm/bio_greenhouse_x.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_l.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_l.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_l.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_l.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_r.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_r.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_r.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-E_r.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_l.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_l.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_l.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_l.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_r.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_r.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_r.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-N_r.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_l.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_l.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_l.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_l.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_r.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_r.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_r.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-S_r.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_l.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_l.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_l.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_l.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_r.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_r.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_r.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/Bio_Farm-pipe-W_r.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-E.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-E.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-E.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-E.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-N.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-N.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-N.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-N.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-S.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-S.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-S.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-S.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-W.png b/Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-W.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-W.png rename to Bio_Industries/graphics/entities/biofarm/pipe_connections/x/Bio_Farm-pipe-W.png diff --git a/Bio_Industries_19.1.9/graphics/entities/biogarden/bio_garden_x.png b/Bio_Industries/graphics/entities/biogarden/bio_garden_x.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/biogarden/bio_garden_x.png rename to Bio_Industries/graphics/entities/biogarden/bio_garden_x.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bioreactor/bioreactor.png b/Bio_Industries/graphics/entities/bioreactor/bioreactor.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bioreactor/bioreactor.png rename to Bio_Industries/graphics/entities/bioreactor/bioreactor.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-east.png b/Bio_Industries/graphics/entities/bioreactor/pipe-east.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-east.png rename to Bio_Industries/graphics/entities/bioreactor/pipe-east.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-south.png b/Bio_Industries/graphics/entities/bioreactor/pipe-south.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-south.png rename to Bio_Industries/graphics/entities/bioreactor/pipe-south.png diff --git a/Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-west.png b/Bio_Industries/graphics/entities/bioreactor/pipe-west.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/bioreactor/pipe-west.png rename to Bio_Industries/graphics/entities/bioreactor/pipe-west.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-01.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-01.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-02.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-02.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-03.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-03.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-04.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-04.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-05.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-05.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-06.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-06.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-07.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-07.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-08.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-08.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-09.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-09.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-10.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-10.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-11.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-11.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-12.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-12.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-13.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-13.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-14.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-14.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-15.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-15.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-16.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-16.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-17.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-17.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-18.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-18.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-19.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-19.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-20.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-20.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-21.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-21.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-22.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-22.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-23.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-23.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-24.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-24.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-25.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-25.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-26.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-26.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-26.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-26.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-27.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-27.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-27.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-27.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-28.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-28.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-28.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-28.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-29.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-29.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-29.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-29.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-01.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-01.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-02.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-02.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-03.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-03.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-04.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-04.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-05.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-05.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-06.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-06.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-07.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-07.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-08.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-08.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-09.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-09.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-10.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-10.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-11.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-11.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-12.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-12.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-13.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-13.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-14.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-14.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-15.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-15.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-16.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-16.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-17.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-17.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-18.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-18.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-19.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-19.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-20.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-20.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-21.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-21.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-22.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-22.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-23.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-23.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-24.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-24.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-25.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-25.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-26.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-26.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-26.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-26.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-27.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-27.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-27.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-27.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-28.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-28.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-28.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-28.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-29.png b/Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-29.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/branch-particle-shadow-29.png rename to Bio_Industries/graphics/entities/branch-particle/branch-particle-shadow-29.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-01.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-01.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-02.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-02.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-03.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-03.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-04.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-04.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-05.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-05.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-06.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-06.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-07.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-07.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-08.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-08.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-09.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-09.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-10.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-10.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-11.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-11.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-12.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-12.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-13.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-13.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-14.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-14.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-15.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-15.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-16.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-16.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-17.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-17.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-18.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-18.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-19.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-19.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-20.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-20.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-21.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-21.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-22.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-22.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-23.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-23.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-24.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-24.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-25.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-25.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-26.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-26.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-26.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-26.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-27.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-27.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-27.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-27.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-28.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-28.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-28.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-28.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-29.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-29.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-29.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-29.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-01.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-01.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-02.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-02.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-03.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-03.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-04.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-04.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-05.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-05.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-06.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-06.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-07.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-07.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-08.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-08.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-09.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-09.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-10.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-10.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-11.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-11.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-12.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-12.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-13.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-13.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-14.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-14.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-15.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-15.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-16.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-16.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-17.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-17.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-18.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-18.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-19.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-19.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-20.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-20.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-21.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-21.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-22.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-22.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-23.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-23.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-24.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-24.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-25.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-25.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-26.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-26.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-26.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-26.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-27.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-27.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-27.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-27.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-28.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-28.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-28.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-28.png diff --git a/Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-29.png b/Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-29.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/branch-particle/hr-branch-particle-shadow-29.png rename to Bio_Industries/graphics/entities/branch-particle/hr-branch-particle-shadow-29.png diff --git a/Bio_Industries_19.1.9/graphics/entities/cokery/cokery-idle.png b/Bio_Industries/graphics/entities/cokery/cokery-idle.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/cokery/cokery-idle.png rename to Bio_Industries/graphics/entities/cokery/cokery-idle.png diff --git a/Bio_Industries_19.1.9/graphics/entities/cokery/cokery_sheet.png b/Bio_Industries/graphics/entities/cokery/cokery_sheet.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/cokery/cokery_sheet.png rename to Bio_Industries/graphics/entities/cokery/cokery_sheet.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-01-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-01-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-01-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-01-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-01.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-01.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-02-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-02-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-02-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-02-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-02.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-02.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-03-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-03-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-03-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-03-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-03.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-03.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-04-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-04-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-04-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-04-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-04.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-04.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-05-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-05-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-05-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-05-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-05.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-05.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-06-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-06-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-06-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-06-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-06.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-06.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-07-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-07-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-07-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-07-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-07.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-07.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-08-shadow.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-08-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-08-shadow.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-08-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-08.png b/Bio_Industries/graphics/entities/leaf-particle/leaf-particle-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/leaf-particle/leaf-particle-08.png rename to Bio_Industries/graphics/entities/leaf-particle/leaf-particle-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/small-lamp/light-on-patch.png b/Bio_Industries/graphics/entities/small-lamp/light-on-patch.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/small-lamp/light-on-patch.png rename to Bio_Industries/graphics/entities/small-lamp/light-on-patch.png diff --git a/Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher-anim.png b/Bio_Industries/graphics/entities/stone-crusher/stone-crusher-anim.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher-anim.png rename to Bio_Industries/graphics/entities/stone-crusher/stone-crusher-anim.png diff --git a/Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher-off-anim.png b/Bio_Industries/graphics/entities/stone-crusher/stone-crusher-off-anim.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher-off-anim.png rename to Bio_Industries/graphics/entities/stone-crusher/stone-crusher-off-anim.png diff --git a/Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher.png b/Bio_Industries/graphics/entities/stone-crusher/stone-crusher.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone-crusher.png rename to Bio_Industries/graphics/entities/stone-crusher/stone-crusher.png diff --git a/Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone_crusher_anim.png b/Bio_Industries/graphics/entities/stone-crusher/stone_crusher_anim.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/stone-crusher/stone_crusher_anim.png rename to Bio_Industries/graphics/entities/stone-crusher/stone_crusher_anim.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/big-wooden-pole-01.png b/Bio_Industries/graphics/entities/wood_products/big-wooden-pole-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/big-wooden-pole-01.png rename to Bio_Industries/graphics/entities/wood_products/big-wooden-pole-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/giga_wooden_chest.png b/Bio_Industries/graphics/entities/wood_products/giga_wooden_chest.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/giga_wooden_chest.png rename to Bio_Industries/graphics/entities/wood_products/giga_wooden_chest.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/huge-wooden-pole.png b/Bio_Industries/graphics/entities/wood_products/huge-wooden-pole.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/huge-wooden-pole.png rename to Bio_Industries/graphics/entities/wood_products/huge-wooden-pole.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/huge_wooden_chest.png b/Bio_Industries/graphics/entities/wood_products/huge_wooden_chest.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/huge_wooden_chest.png rename to Bio_Industries/graphics/entities/wood_products/huge_wooden_chest.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/large_wooden_chest.png b/Bio_Industries/graphics/entities/wood_products/large_wooden_chest.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/large_wooden_chest.png rename to Bio_Industries/graphics/entities/wood_products/large_wooden_chest.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-horizontal-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/curved-rail-vertical-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-horizontal-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/curved-rail-bridge/hr-curved-rail-vertical-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/hr-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/remnants/hr-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/hr-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/remnants/hr-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/hr-remnants_old.png b/Bio_Industries/graphics/entities/wood_products/rails/remnants/hr-remnants_old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/hr-remnants_old.png rename to Bio_Industries/graphics/entities/wood_products/rails/remnants/hr-remnants_old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/remnants/remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/remnants/remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/remnants_old.png b/Bio_Industries/graphics/entities/wood_products/rails/remnants/remnants_old.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/remnants/remnants_old.png rename to Bio_Industries/graphics/entities/wood_products/rails/remnants/remnants_old.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-diagonal-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-horizontal-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/hr-straight-rail-vertical-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-left-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-bottom-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-diagonal-right-top-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-horizontal-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-background.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path.png b/Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path.png rename to Bio_Industries/graphics/entities/wood_products/rails/straight-rail-bridge/straight-rail-vertical-stone-path.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-horizontal-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/curved-rail-vertical-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-horizontal-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-curved-rail-vertical-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-diagonal-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-horizontal-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/hr-straight-rail-vertical-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-left-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-bottom-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-diagonal-right-top-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-horizontal-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties-remnants.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties-remnants.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties-remnants.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties-remnants.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties.png b/Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties.png rename to Bio_Industries/graphics/entities/wood_products/rails/ties/straight-rail-vertical-ties.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-left.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-left.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-left.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-left.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-right.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-right.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-ending-right.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-ending-right.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-single-1.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-single-1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-single-1.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-single-1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-single-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-single-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-single-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-single-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-t-down.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/fence-t-down.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/fence-t-down.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/fence-t-down.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_clu.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_clu.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_clu.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_clu.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_cru.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_cru.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_cru.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_cru.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_el.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_el.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_el.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_el.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_er.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_er.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_er.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_er.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_icon.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_icon.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_icon.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_tu.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_tu.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_tu.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_tu.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_u.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_u.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_u.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_u.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_u1.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_u1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_u1.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_u1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we1.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we1.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we2.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wood_wall_we2.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wood_wall_we2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wooden-fence.png b/Bio_Industries/graphics/entities/wood_products/wood_fence/wooden-fence.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_fence/wooden-fence.png rename to Bio_Industries/graphics/entities/wood_products/wood_fence/wooden-fence.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-inner-corner.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood-inner-corner.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-inner-corner.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood-inner-corner.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-o.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood-o.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-o.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood-o.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-outer-corner.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood-outer-corner.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-outer-corner.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood-outer-corner.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-side.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood-side.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-side.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood-side.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-u.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood-u.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood-u.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood-u.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood1.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood1.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood2.png b/Bio_Industries/graphics/entities/wood_products/wood_floor/wood2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_floor/wood2.png rename to Bio_Industries/graphics/entities/wood_products/wood_floor/wood2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png b/Bio_Industries/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png rename to Bio_Industries/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png b/Bio_Industries/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png rename to Bio_Industries/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-01.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-01.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-02.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-02.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-03.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-03.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-04.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-04.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-05.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-05.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-06.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-06.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-07.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-07.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-08.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-08.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-09.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-09.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-10.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-10.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-11.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-11.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-12.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-12.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-13.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-13.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-14.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-14.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-15.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-15.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-16.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-16.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-17.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-17.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-18.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-18.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-19.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-19.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-20.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-20.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-21.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-21.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-22.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-22.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-23.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-23.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-24.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-24.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-25.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-25.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-01.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-01.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-02.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-02.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-03.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-03.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-04.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-04.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-05.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-05.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-06.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-06.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-07.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-07.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-08.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-08.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-09.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-09.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-10.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-10.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-11.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-11.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-12.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-12.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-13.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-13.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-14.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-14.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-15.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-15.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-16.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-16.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-17.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-17.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-18.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-18.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-19.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-19.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-20.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-20.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-21.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-21.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-22.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-22.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-23.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-23.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-24.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-24.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-25.png b/Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/hr-wooden-particle-shadow-25.png rename to Bio_Industries/graphics/entities/wooden-particle/hr-wooden-particle-shadow-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-01.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-01.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-02.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-02.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-03.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-03.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-04.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-04.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-05.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-05.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-06.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-06.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-07.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-07.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-08.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-08.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-09.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-09.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-1.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-1.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-10.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-10.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-11.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-11.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-12.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-12.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-13.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-13.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-14.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-14.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-15.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-15.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-16.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-16.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-17.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-17.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-18.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-18.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-19.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-19.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-2.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-2.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-20.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-20.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-21.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-21.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-22.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-22.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-23.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-23.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-24.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-24.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-25.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-25.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-3.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-3.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-3.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-4.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-4.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-4.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-01.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-01.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-01.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-01.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-02.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-02.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-02.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-02.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-03.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-03.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-03.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-03.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-04.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-04.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-04.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-04.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-05.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-05.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-05.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-05.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-06.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-06.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-06.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-06.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-07.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-07.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-07.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-07.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-08.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-08.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-08.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-08.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-09.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-09.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-09.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-09.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-1.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-1.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-1.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-10.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-10.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-10.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-10.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-11.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-11.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-11.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-11.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-12.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-12.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-12.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-12.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-13.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-13.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-13.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-13.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-14.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-14.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-14.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-14.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-15.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-15.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-15.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-15.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-16.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-16.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-16.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-16.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-17.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-17.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-17.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-17.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-18.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-18.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-18.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-18.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-19.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-19.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-19.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-19.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-2.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-2.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-2.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-20.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-20.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-20.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-20.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-21.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-21.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-21.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-21.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-22.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-22.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-22.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-22.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-23.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-23.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-23.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-23.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-24.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-24.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-24.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-24.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-25.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-25.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-25.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-25.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-3.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-3.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-3.png diff --git a/Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-4.png b/Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/entities/wooden-particle/wooden-particle-shadow-4.png rename to Bio_Industries/graphics/entities/wooden-particle/wooden-particle-shadow-4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/1_32.png b/Bio_Industries/graphics/icons/1_32.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/1_32.png rename to Bio_Industries/graphics/icons/1_32.png diff --git a/Bio_Industries_19.1.9/graphics/icons/2_32.png b/Bio_Industries/graphics/icons/2_32.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/2_32.png rename to Bio_Industries/graphics/icons/2_32.png diff --git a/Bio_Industries_19.1.9/graphics/icons/3_32.png b/Bio_Industries/graphics/icons/3_32.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/3_32.png rename to Bio_Industries/graphics/icons/3_32.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Arboretum_Icon.png b/Bio_Industries/graphics/icons/Arboretum_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Arboretum_Icon.png rename to Bio_Industries/graphics/icons/Arboretum_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Arboretum_Icon_64.png b/Bio_Industries/graphics/icons/Arboretum_Icon_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Arboretum_Icon_64.png rename to Bio_Industries/graphics/icons/Arboretum_Icon_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Cabeling.png b/Bio_Industries/graphics/icons/Bio_Farm_Cabeling.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Cabeling.png rename to Bio_Industries/graphics/icons/Bio_Farm_Cabeling.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Icon.png b/Bio_Industries/graphics/icons/Bio_Farm_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Icon.png rename to Bio_Industries/graphics/icons/Bio_Farm_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Icon_64.png b/Bio_Industries/graphics/icons/Bio_Farm_Icon_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Icon_64.png rename to Bio_Industries/graphics/icons/Bio_Farm_Icon_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Lamp.png b/Bio_Industries/graphics/icons/Bio_Farm_Lamp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Lamp.png rename to Bio_Industries/graphics/icons/Bio_Farm_Lamp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Solar.png b/Bio_Industries/graphics/icons/Bio_Farm_Solar.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Farm_Solar.png rename to Bio_Industries/graphics/icons/Bio_Farm_Solar.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_64.png b/Bio_Industries/graphics/icons/Bio_Solar_Boiler_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_64.png rename to Bio_Industries/graphics/icons/Bio_Solar_Boiler_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Boiler_Icon.png b/Bio_Industries/graphics/icons/Bio_Solar_Boiler_Boiler_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Boiler_Icon.png rename to Bio_Industries/graphics/icons/Bio_Solar_Boiler_Boiler_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Icon.png b/Bio_Industries/graphics/icons/Bio_Solar_Boiler_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Icon.png rename to Bio_Industries/graphics/icons/Bio_Solar_Boiler_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Panel_Icon.png b/Bio_Industries/graphics/icons/Bio_Solar_Boiler_Panel_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Boiler_Panel_Icon.png rename to Bio_Industries/graphics/icons/Bio_Solar_Boiler_Panel_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Farm_64.png b/Bio_Industries/graphics/icons/Bio_Solar_Farm_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Farm_64.png rename to Bio_Industries/graphics/icons/Bio_Solar_Farm_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Farm_Icon.png b/Bio_Industries/graphics/icons/Bio_Solar_Farm_Icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Bio_Solar_Farm_Icon.png rename to Bio_Industries/graphics/icons/Bio_Solar_Farm_Icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Clean_Air2.png b/Bio_Industries/graphics/icons/Clean_Air2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Clean_Air2.png rename to Bio_Industries/graphics/icons/Clean_Air2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Clean_Air2_alt.png b/Bio_Industries/graphics/icons/Clean_Air2_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Clean_Air2_alt.png rename to Bio_Industries/graphics/icons/Clean_Air2_alt.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Fuel_Brick.png b/Bio_Industries/graphics/icons/Fuel_Brick.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Fuel_Brick.png rename to Bio_Industries/graphics/icons/Fuel_Brick.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_a.png b/Bio_Industries/graphics/icons/Seed_bomb_icon_a.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_a.png rename to Bio_Industries/graphics/icons/Seed_bomb_icon_a.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_b.png b/Bio_Industries/graphics/icons/Seed_bomb_icon_b.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_b.png rename to Bio_Industries/graphics/icons/Seed_bomb_icon_b.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_s.png b/Bio_Industries/graphics/icons/Seed_bomb_icon_s.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seed_bomb_icon_s.png rename to Bio_Industries/graphics/icons/Seed_bomb_icon_s.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling.png b/Bio_Industries/graphics/icons/Seedling.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling.png rename to Bio_Industries/graphics/icons/Seedling.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling1.png b/Bio_Industries/graphics/icons/Seedling1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling1.png rename to Bio_Industries/graphics/icons/Seedling1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling2.png b/Bio_Industries/graphics/icons/Seedling2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling2.png rename to Bio_Industries/graphics/icons/Seedling2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling3.png b/Bio_Industries/graphics/icons/Seedling3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling3.png rename to Bio_Industries/graphics/icons/Seedling3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling4.png b/Bio_Industries/graphics/icons/Seedling4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling4.png rename to Bio_Industries/graphics/icons/Seedling4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling_a.png b/Bio_Industries/graphics/icons/Seedling_a.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling_a.png rename to Bio_Industries/graphics/icons/Seedling_a.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Seedling_b.png b/Bio_Industries/graphics/icons/Seedling_b.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Seedling_b.png rename to Bio_Industries/graphics/icons/Seedling_b.png diff --git a/Bio_Industries_19.1.9/graphics/icons/Woodpulp_raw-wood.png b/Bio_Industries/graphics/icons/Woodpulp_raw-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/Woodpulp_raw-wood.png rename to Bio_Industries/graphics/icons/Woodpulp_raw-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/advanced_fertilizer.png b/Bio_Industries/graphics/icons/advanced_fertilizer.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/advanced_fertilizer.png rename to Bio_Industries/graphics/icons/advanced_fertilizer.png diff --git a/Bio_Industries_19.1.9/graphics/icons/advanced_fertilizer_64.png b/Bio_Industries/graphics/icons/advanced_fertilizer_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/advanced_fertilizer_64.png rename to Bio_Industries/graphics/icons/advanced_fertilizer_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_Seedling2.png b/Bio_Industries/graphics/icons/ash-recipes/py_Seedling2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_Seedling2.png rename to Bio_Industries/graphics/icons/ash-recipes/py_Seedling2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_ash_raw-wood.png b/Bio_Industries/graphics/icons/ash-recipes/py_ash_raw-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_ash_raw-wood.png rename to Bio_Industries/graphics/icons/ash-recipes/py_ash_raw-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_ash_woodpulp.png b/Bio_Industries/graphics/icons/ash-recipes/py_ash_woodpulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_ash_woodpulp.png rename to Bio_Industries/graphics/icons/ash-recipes/py_ash_woodpulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bi_stone_brick.png b/Bio_Industries/graphics/icons/ash-recipes/py_bi_stone_brick.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bi_stone_brick.png rename to Bio_Industries/graphics/icons/ash-recipes/py_bi_stone_brick.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bio_seed2.png b/Bio_Industries/graphics/icons/ash-recipes/py_bio_seed2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bio_seed2.png rename to Bio_Industries/graphics/icons/ash-recipes/py_bio_seed2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bio_sulfur.png b/Bio_Industries/graphics/icons/ash-recipes/py_bio_sulfur.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_bio_sulfur.png rename to Bio_Industries/graphics/icons/ash-recipes/py_bio_sulfur.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_raw-wood-mk2.png b/Bio_Industries/graphics/icons/ash-recipes/py_raw-wood-mk2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash-recipes/py_raw-wood-mk2.png rename to Bio_Industries/graphics/icons/ash-recipes/py_raw-wood-mk2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash.png b/Bio_Industries/graphics/icons/ash.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash.png rename to Bio_Industries/graphics/icons/ash.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash_64.png b/Bio_Industries/graphics/icons/ash_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash_64.png rename to Bio_Industries/graphics/icons/ash_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash_raw-wood.png b/Bio_Industries/graphics/icons/ash_raw-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash_raw-wood.png rename to Bio_Industries/graphics/icons/ash_raw-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/ash_woodpulp.png b/Bio_Industries/graphics/icons/ash_woodpulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/ash_woodpulp.png rename to Bio_Industries/graphics/icons/ash_woodpulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/basic_dart_icon.png b/Bio_Industries/graphics/icons/basic_dart_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/basic_dart_icon.png rename to Bio_Industries/graphics/icons/basic_dart_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_LargeAccumulator.png b/Bio_Industries/graphics/icons/bi_LargeAccumulator.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_LargeAccumulator.png rename to Bio_Industries/graphics/icons/bi_LargeAccumulator.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_LargeAccumulator_64.png b/Bio_Industries/graphics/icons/bi_LargeAccumulator_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_LargeAccumulator_64.png rename to Bio_Industries/graphics/icons/bi_LargeAccumulator_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_LargeSubstation_64.png b/Bio_Industries/graphics/icons/bi_LargeSubstation_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_LargeSubstation_64.png rename to Bio_Industries/graphics/icons/bi_LargeSubstation_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_LargeSubstation_icon.png b/Bio_Industries/graphics/icons/bi_LargeSubstation_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_LargeSubstation_icon.png rename to Bio_Industries/graphics/icons/bi_LargeSubstation_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_basic_gas_processing.png b/Bio_Industries/graphics/icons/bi_basic_gas_processing.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_basic_gas_processing.png rename to Bio_Industries/graphics/icons/bi_basic_gas_processing.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_basic_gas_processing_angels.png b/Bio_Industries/graphics/icons/bi_basic_gas_processing_angels.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_basic_gas_processing_angels.png rename to Bio_Industries/graphics/icons/bi_basic_gas_processing_angels.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_change_1.png b/Bio_Industries/graphics/icons/bi_change_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_change_1.png rename to Bio_Industries/graphics/icons/bi_change_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_change_2.png b/Bio_Industries/graphics/icons/bi_change_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_change_2.png rename to Bio_Industries/graphics/icons/bi_change_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_change_plant_1.png b/Bio_Industries/graphics/icons/bi_change_plant_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_change_plant_1.png rename to Bio_Industries/graphics/icons/bi_change_plant_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_change_plant_2.png b/Bio_Industries/graphics/icons/bi_change_plant_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_change_plant_2.png rename to Bio_Industries/graphics/icons/bi_change_plant_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_dart_rifle_icon.png b/Bio_Industries/graphics/icons/bi_dart_rifle_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_dart_rifle_icon.png rename to Bio_Industries/graphics/icons/bi_dart_rifle_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_mineralized_sulfuric.png b/Bio_Industries/graphics/icons/bi_mineralized_sulfuric.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_mineralized_sulfuric.png rename to Bio_Industries/graphics/icons/bi_mineralized_sulfuric.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_resin.png b/Bio_Industries/graphics/icons/bi_resin.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_resin.png rename to Bio_Industries/graphics/icons/bi_resin.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_resin_pulp.png b/Bio_Industries/graphics/icons/bi_resin_pulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_resin_pulp.png rename to Bio_Industries/graphics/icons/bi_resin_pulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_resin_wood.png b/Bio_Industries/graphics/icons/bi_resin_wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_resin_wood.png rename to Bio_Industries/graphics/icons/bi_resin_wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_slurry.png b/Bio_Industries/graphics/icons/bi_slurry.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_slurry.png rename to Bio_Industries/graphics/icons/bi_slurry.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_solid_fuel_wood_brick.png b/Bio_Industries/graphics/icons/bi_solid_fuel_wood_brick.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_solid_fuel_wood_brick.png rename to Bio_Industries/graphics/icons/bi_solid_fuel_wood_brick.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_stone_brick.png b/Bio_Industries/graphics/icons/bi_stone_brick.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_stone_brick.png rename to Bio_Industries/graphics/icons/bi_stone_brick.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_water_1_icon.png b/Bio_Industries/graphics/icons/bi_water_1_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_water_1_icon.png rename to Bio_Industries/graphics/icons/bi_water_1_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_water_2_icon.png b/Bio_Industries/graphics/icons/bi_water_2_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_water_2_icon.png rename to Bio_Industries/graphics/icons/bi_water_2_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_wood_resin_pulp.png b/Bio_Industries/graphics/icons/bi_wood_resin_pulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_wood_resin_pulp.png rename to Bio_Industries/graphics/icons/bi_wood_resin_pulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_wooden_board.png b/Bio_Industries/graphics/icons/bi_wooden_board.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_wooden_board.png rename to Bio_Industries/graphics/icons/bi_wooden_board.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bi_wooden_board_shiny.png b/Bio_Industries/graphics/icons/bi_wooden_board_shiny.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bi_wooden_board_shiny.png rename to Bio_Industries/graphics/icons/bi_wooden_board_shiny.png diff --git a/Bio_Industries_19.1.9/graphics/icons/big-wooden-pole.png b/Bio_Industries/graphics/icons/big-wooden-pole.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/big-wooden-pole.png rename to Bio_Industries/graphics/icons/big-wooden-pole.png diff --git a/Bio_Industries_19.1.9/graphics/icons/big-wooden-pole_64.png b/Bio_Industries/graphics/icons/big-wooden-pole_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/big-wooden-pole_64.png rename to Bio_Industries/graphics/icons/big-wooden-pole_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio-battery/battery_64_vanilla.xcf b/Bio_Industries/graphics/icons/bio-battery/battery_64_vanilla.xcf similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio-battery/battery_64_vanilla.xcf rename to Bio_Industries/graphics/icons/bio-battery/battery_64_vanilla.xcf diff --git a/Bio_Industries_19.1.9/graphics/icons/bio-battery/bio_battery_vanilla.png b/Bio_Industries/graphics/icons/bio-battery/bio_battery_vanilla.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio-battery/bio_battery_vanilla.png rename to Bio_Industries/graphics/icons/bio-battery/bio_battery_vanilla.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio-battery/bio_battery_vanilla.xcf b/Bio_Industries/graphics/icons/bio-battery/bio_battery_vanilla.xcf similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio-battery/bio_battery_vanilla.xcf rename to Bio_Industries/graphics/icons/bio-battery/bio_battery_vanilla.xcf diff --git a/Bio_Industries_19.1.9/graphics/icons/bio-fuel.png b/Bio_Industries/graphics/icons/bio-fuel.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio-fuel.png rename to Bio_Industries/graphics/icons/bio-fuel.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_acid.png b/Bio_Industries/graphics/icons/bio_acid.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_acid.png rename to Bio_Industries/graphics/icons/bio_acid.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_battery.png b/Bio_Industries/graphics/icons/bio_battery.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_battery.png rename to Bio_Industries/graphics/icons/bio_battery.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_battery_64.png b/Bio_Industries/graphics/icons/bio_battery_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_battery_64.png rename to Bio_Industries/graphics/icons/bio_battery_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_boiler.png b/Bio_Industries/graphics/icons/bio_boiler.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_boiler.png rename to Bio_Industries/graphics/icons/bio_boiler.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion.png b/Bio_Industries/graphics/icons/bio_conversion.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion.png rename to Bio_Industries/graphics/icons/bio_conversion.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion_1.png b/Bio_Industries/graphics/icons/bio_conversion_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion_1.png rename to Bio_Industries/graphics/icons/bio_conversion_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion_2.png b/Bio_Industries/graphics/icons/bio_conversion_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion_2.png rename to Bio_Industries/graphics/icons/bio_conversion_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion_2_angels.png b/Bio_Industries/graphics/icons/bio_conversion_2_angels.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion_2_angels.png rename to Bio_Industries/graphics/icons/bio_conversion_2_angels.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion_3.png b/Bio_Industries/graphics/icons/bio_conversion_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion_3.png rename to Bio_Industries/graphics/icons/bio_conversion_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_conversion_4.png b/Bio_Industries/graphics/icons/bio_conversion_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_conversion_4.png rename to Bio_Industries/graphics/icons/bio_conversion_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_garden_64.png b/Bio_Industries/graphics/icons/bio_garden_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_garden_64.png rename to Bio_Industries/graphics/icons/bio_garden_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_garden_icon.png b/Bio_Industries/graphics/icons/bio_garden_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_garden_icon.png rename to Bio_Industries/graphics/icons/bio_garden_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_greenhouse.png b/Bio_Industries/graphics/icons/bio_greenhouse.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_greenhouse.png rename to Bio_Industries/graphics/icons/bio_greenhouse.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_greenhouse_64.png b/Bio_Industries/graphics/icons/bio_greenhouse_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_greenhouse_64.png rename to Bio_Industries/graphics/icons/bio_greenhouse_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_seed.png b/Bio_Industries/graphics/icons/bio_seed.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_seed.png rename to Bio_Industries/graphics/icons/bio_seed.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_seed1.png b/Bio_Industries/graphics/icons/bio_seed1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_seed1.png rename to Bio_Industries/graphics/icons/bio_seed1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_seed2.png b/Bio_Industries/graphics/icons/bio_seed2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_seed2.png rename to Bio_Industries/graphics/icons/bio_seed2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_seed3.png b/Bio_Industries/graphics/icons/bio_seed3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_seed3.png rename to Bio_Industries/graphics/icons/bio_seed3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_seed4.png b/Bio_Industries/graphics/icons/bio_seed4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_seed4.png rename to Bio_Industries/graphics/icons/bio_seed4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_sulfur.png b/Bio_Industries/graphics/icons/bio_sulfur.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_sulfur.png rename to Bio_Industries/graphics/icons/bio_sulfur.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_turret_icon.png b/Bio_Industries/graphics/icons/bio_turret_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_turret_icon.png rename to Bio_Industries/graphics/icons/bio_turret_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bio_turret_icon_64.png b/Bio_Industries/graphics/icons/bio_turret_icon_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bio_turret_icon_64.png rename to Bio_Industries/graphics/icons/bio_turret_icon_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biocannon_icon.png b/Bio_Industries/graphics/icons/biocannon_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biocannon_icon.png rename to Bio_Industries/graphics/icons/biocannon_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biocannon_icon_64.png b/Bio_Industries/graphics/icons/biocannon_icon_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biocannon_icon_64.png rename to Bio_Industries/graphics/icons/biocannon_icon_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biomass.png b/Bio_Industries/graphics/icons/biomass.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biomass.png rename to Bio_Industries/graphics/icons/biomass.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biomass_1.png b/Bio_Industries/graphics/icons/biomass_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biomass_1.png rename to Bio_Industries/graphics/icons/biomass_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biomass_2.png b/Bio_Industries/graphics/icons/biomass_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biomass_2.png rename to Bio_Industries/graphics/icons/biomass_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/biomass_3.png b/Bio_Industries/graphics/icons/biomass_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/biomass_3.png rename to Bio_Industries/graphics/icons/biomass_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bioreactor.png b/Bio_Industries/graphics/icons/bioreactor.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bioreactor.png rename to Bio_Industries/graphics/icons/bioreactor.png diff --git a/Bio_Industries_19.1.9/graphics/icons/bioreactor_64.png b/Bio_Industries/graphics/icons/bioreactor_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/bioreactor_64.png rename to Bio_Industries/graphics/icons/bioreactor_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/blank.png b/Bio_Industries/graphics/icons/blank.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/blank.png rename to Bio_Industries/graphics/icons/blank.png diff --git a/Bio_Industries_19.1.9/graphics/icons/burner-mining-drill_disassemble.png b/Bio_Industries/graphics/icons/burner-mining-drill_disassemble.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/burner-mining-drill_disassemble.png rename to Bio_Industries/graphics/icons/burner-mining-drill_disassemble.png diff --git a/Bio_Industries_19.1.9/graphics/icons/burner_inserter_disassemble.png b/Bio_Industries/graphics/icons/burner_inserter_disassemble.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/burner_inserter_disassemble.png rename to Bio_Industries/graphics/icons/burner_inserter_disassemble.png diff --git a/Bio_Industries_19.1.9/graphics/icons/cellulose.png b/Bio_Industries/graphics/icons/cellulose.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/cellulose.png rename to Bio_Industries/graphics/icons/cellulose.png diff --git a/Bio_Industries_19.1.9/graphics/icons/cellulose_2.png b/Bio_Industries/graphics/icons/cellulose_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/cellulose_2.png rename to Bio_Industries/graphics/icons/cellulose_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/charcoal.png b/Bio_Industries/graphics/icons/charcoal.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/charcoal.png rename to Bio_Industries/graphics/icons/charcoal.png diff --git a/Bio_Industries_19.1.9/graphics/icons/charcoal_64.png b/Bio_Industries/graphics/icons/charcoal_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/charcoal_64.png rename to Bio_Industries/graphics/icons/charcoal_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/charcoal_pellets.png b/Bio_Industries/graphics/icons/charcoal_pellets.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/charcoal_pellets.png rename to Bio_Industries/graphics/icons/charcoal_pellets.png diff --git a/Bio_Industries_19.1.9/graphics/icons/charcoal_raw-wood.png b/Bio_Industries/graphics/icons/charcoal_raw-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/charcoal_raw-wood.png rename to Bio_Industries/graphics/icons/charcoal_raw-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/charcoal_woodpulp.png b/Bio_Industries/graphics/icons/charcoal_woodpulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/charcoal_woodpulp.png rename to Bio_Industries/graphics/icons/charcoal_woodpulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/clean-air.png b/Bio_Industries/graphics/icons/clean-air.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/clean-air.png rename to Bio_Industries/graphics/icons/clean-air.png diff --git a/Bio_Industries_19.1.9/graphics/icons/clean-air_mk1.png b/Bio_Industries/graphics/icons/clean-air_mk1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/clean-air_mk1.png rename to Bio_Industries/graphics/icons/clean-air_mk1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/clean-air_mk2.png b/Bio_Industries/graphics/icons/clean-air_mk2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/clean-air_mk2.png rename to Bio_Industries/graphics/icons/clean-air_mk2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/coal_64.png b/Bio_Industries/graphics/icons/coal_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/coal_64.png rename to Bio_Industries/graphics/icons/coal_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/coal_mk1.png b/Bio_Industries/graphics/icons/coal_mk1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/coal_mk1.png rename to Bio_Industries/graphics/icons/coal_mk1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/coal_mk2.png b/Bio_Industries/graphics/icons/coal_mk2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/coal_mk2.png rename to Bio_Industries/graphics/icons/coal_mk2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/coke-coal.png b/Bio_Industries/graphics/icons/coke-coal.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/coke-coal.png rename to Bio_Industries/graphics/icons/coke-coal.png diff --git a/Bio_Industries_19.1.9/graphics/icons/cokery.png b/Bio_Industries/graphics/icons/cokery.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/cokery.png rename to Bio_Industries/graphics/icons/cokery.png diff --git a/Bio_Industries_19.1.9/graphics/icons/cokery_64.png b/Bio_Industries/graphics/icons/cokery_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/cokery_64.png rename to Bio_Industries/graphics/icons/cokery_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/cokery_alt.png b/Bio_Industries/graphics/icons/cokery_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/cokery_alt.png rename to Bio_Industries/graphics/icons/cokery_alt.png diff --git a/Bio_Industries_19.1.9/graphics/icons/concrete_rail_64.png b/Bio_Industries/graphics/icons/concrete_rail_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/concrete_rail_64.png rename to Bio_Industries/graphics/icons/concrete_rail_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/copper-wire_tweak.png b/Bio_Industries/graphics/icons/copper-wire_tweak.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/copper-wire_tweak.png rename to Bio_Industries/graphics/icons/copper-wire_tweak.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crude-oil_64.png b/Bio_Industries/graphics/icons/crude-oil_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crude-oil_64.png rename to Bio_Industries/graphics/icons/crude-oil_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-refined-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-refined-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-refined-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-refined-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-refined-hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-refined-hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-refined-hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-refined-hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-stone.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-stone.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone-stone.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone-stone.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/crushed-stone.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/crushed-stone.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/refined-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/refined-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/refined-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/refined-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/refined-hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/refined-hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/refined-hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/refined-hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/stone.png b/Bio_Industries/graphics/icons/crushed-stone-recipes/stone.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-recipes/stone.png rename to Bio_Industries/graphics/icons/crushed-stone-recipes/stone.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-refined-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-refined-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-refined-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-refined-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-refined-hazard-concrete.png b/Bio_Industries/graphics/icons/crushed-stone-refined-hazard-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-refined-hazard-concrete.png rename to Bio_Industries/graphics/icons/crushed-stone-refined-hazard-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone-stone.png b/Bio_Industries/graphics/icons/crushed-stone-stone.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone-stone.png rename to Bio_Industries/graphics/icons/crushed-stone-stone.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone.png b/Bio_Industries/graphics/icons/crushed-stone.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone.png rename to Bio_Industries/graphics/icons/crushed-stone.png diff --git a/Bio_Industries_19.1.9/graphics/icons/crushed-stone_64.png b/Bio_Industries/graphics/icons/crushed-stone_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/crushed-stone_64.png rename to Bio_Industries/graphics/icons/crushed-stone_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/curved-rail-concrete.png b/Bio_Industries/graphics/icons/curved-rail-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/curved-rail-concrete.png rename to Bio_Industries/graphics/icons/curved-rail-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/curved-rail-wood.png b/Bio_Industries/graphics/icons/curved-rail-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/curved-rail-wood.png rename to Bio_Industries/graphics/icons/curved-rail-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/electric-to-rail.png b/Bio_Industries/graphics/icons/electric-to-rail.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/electric-to-rail.png rename to Bio_Industries/graphics/icons/electric-to-rail.png diff --git a/Bio_Industries_19.1.9/graphics/icons/empty-electric-pole.png b/Bio_Industries/graphics/icons/empty-electric-pole.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/empty-electric-pole.png rename to Bio_Industries/graphics/icons/empty-electric-pole.png diff --git a/Bio_Industries_19.1.9/graphics/icons/empty.png b/Bio_Industries/graphics/icons/empty.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/empty.png rename to Bio_Industries/graphics/icons/empty.png diff --git a/Bio_Industries_19.1.9/graphics/icons/enhanced_dart_icon.png b/Bio_Industries/graphics/icons/enhanced_dart_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/enhanced_dart_icon.png rename to Bio_Industries/graphics/icons/enhanced_dart_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fertilizer.png b/Bio_Industries/graphics/icons/fertilizer.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fertilizer.png rename to Bio_Industries/graphics/icons/fertilizer.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fertilizer_64.png b/Bio_Industries/graphics/icons/fertilizer_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fertilizer_64.png rename to Bio_Industries/graphics/icons/fertilizer_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fertilizer_sodium_hydroxide.png b/Bio_Industries/graphics/icons/fertilizer_sodium_hydroxide.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fertilizer_sodium_hydroxide.png rename to Bio_Industries/graphics/icons/fertilizer_sodium_hydroxide.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fertilizer_solid_sodium_hydroxide.png b/Bio_Industries/graphics/icons/fertilizer_solid_sodium_hydroxide.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fertilizer_solid_sodium_hydroxide.png rename to Bio_Industries/graphics/icons/fertilizer_solid_sodium_hydroxide.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fertilizer_sulfur.png b/Bio_Industries/graphics/icons/fertilizer_sulfur.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fertilizer_sulfur.png rename to Bio_Industries/graphics/icons/fertilizer_sulfur.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fluid_advanced_fertilizer_64.png b/Bio_Industries/graphics/icons/fluid_advanced_fertilizer_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fluid_advanced_fertilizer_64.png rename to Bio_Industries/graphics/icons/fluid_advanced_fertilizer_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fluid_advanced_fertilizer_recipe_64.png b/Bio_Industries/graphics/icons/fluid_advanced_fertilizer_recipe_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fluid_advanced_fertilizer_recipe_64.png rename to Bio_Industries/graphics/icons/fluid_advanced_fertilizer_recipe_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fluid_fertilizer_64.png b/Bio_Industries/graphics/icons/fluid_fertilizer_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fluid_fertilizer_64.png rename to Bio_Industries/graphics/icons/fluid_fertilizer_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/fluid_fertilizer_recipe_64.png b/Bio_Industries/graphics/icons/fluid_fertilizer_recipe_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/fluid_fertilizer_recipe_64.png rename to Bio_Industries/graphics/icons/fluid_fertilizer_recipe_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/giga_wooden_chest_64.png b/Bio_Industries/graphics/icons/giga_wooden_chest_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/giga_wooden_chest_64.png rename to Bio_Industries/graphics/icons/giga_wooden_chest_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/giga_wooden_chest_icon.png b/Bio_Industries/graphics/icons/giga_wooden_chest_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/giga_wooden_chest_icon.png rename to Bio_Industries/graphics/icons/giga_wooden_chest_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/heavy-oil_64.png b/Bio_Industries/graphics/icons/heavy-oil_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/heavy-oil_64.png rename to Bio_Industries/graphics/icons/heavy-oil_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/huge-wooden-pole.png b/Bio_Industries/graphics/icons/huge-wooden-pole.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/huge-wooden-pole.png rename to Bio_Industries/graphics/icons/huge-wooden-pole.png diff --git a/Bio_Industries_19.1.9/graphics/icons/huge-wooden-pole_64.png b/Bio_Industries/graphics/icons/huge-wooden-pole_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/huge-wooden-pole_64.png rename to Bio_Industries/graphics/icons/huge-wooden-pole_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/huge_wooden_chest_64.png b/Bio_Industries/graphics/icons/huge_wooden_chest_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/huge_wooden_chest_64.png rename to Bio_Industries/graphics/icons/huge_wooden_chest_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/huge_wooden_chest_icon.png b/Bio_Industries/graphics/icons/huge_wooden_chest_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/huge_wooden_chest_icon.png rename to Bio_Industries/graphics/icons/huge_wooden_chest_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/large_wooden_chest_64.png b/Bio_Industries/graphics/icons/large_wooden_chest_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/large_wooden_chest_64.png rename to Bio_Industries/graphics/icons/large_wooden_chest_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/large_wooden_chest_icon.png b/Bio_Industries/graphics/icons/large_wooden_chest_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/large_wooden_chest_icon.png rename to Bio_Industries/graphics/icons/large_wooden_chest_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/liquid-air.png b/Bio_Industries/graphics/icons/liquid-air.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/liquid-air.png rename to Bio_Industries/graphics/icons/liquid-air.png diff --git a/Bio_Industries_19.1.9/graphics/icons/liquid-air_alt.png b/Bio_Industries/graphics/icons/liquid-air_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/liquid-air_alt.png rename to Bio_Industries/graphics/icons/liquid-air_alt.png diff --git a/Bio_Industries_19.1.9/graphics/icons/liquid-nitrogen.png b/Bio_Industries/graphics/icons/liquid-nitrogen.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/liquid-nitrogen.png rename to Bio_Industries/graphics/icons/liquid-nitrogen.png diff --git a/Bio_Industries_19.1.9/graphics/icons/lithia-water.png b/Bio_Industries/graphics/icons/lithia-water.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/lithia-water.png rename to Bio_Industries/graphics/icons/lithia-water.png diff --git a/Bio_Industries_19.1.9/graphics/icons/long_handed_inserter_disassemble.png b/Bio_Industries/graphics/icons/long_handed_inserter_disassemble.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/long_handed_inserter_disassemble.png rename to Bio_Industries/graphics/icons/long_handed_inserter_disassemble.png diff --git a/Bio_Industries_19.1.9/graphics/icons/lubricant_64.png b/Bio_Industries/graphics/icons/lubricant_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/lubricant_64.png rename to Bio_Industries/graphics/icons/lubricant_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Ash_1.png b/Bio_Industries/graphics/icons/mips/Ash_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Ash_1.png rename to Bio_Industries/graphics/icons/mips/Ash_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Ash_2.png b/Bio_Industries/graphics/icons/mips/Ash_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Ash_2.png rename to Bio_Industries/graphics/icons/mips/Ash_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Ash_3.png b/Bio_Industries/graphics/icons/mips/Ash_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Ash_3.png rename to Bio_Industries/graphics/icons/mips/Ash_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Ash_4.png b/Bio_Industries/graphics/icons/mips/Ash_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Ash_4.png rename to Bio_Industries/graphics/icons/mips/Ash_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_1.png b/Bio_Industries/graphics/icons/mips/Charcoal_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_1.png rename to Bio_Industries/graphics/icons/mips/Charcoal_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_2.png b/Bio_Industries/graphics/icons/mips/Charcoal_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_2.png rename to Bio_Industries/graphics/icons/mips/Charcoal_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_3.png b/Bio_Industries/graphics/icons/mips/Charcoal_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_3.png rename to Bio_Industries/graphics/icons/mips/Charcoal_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_4.png b/Bio_Industries/graphics/icons/mips/Charcoal_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Charcoal_4.png rename to Bio_Industries/graphics/icons/mips/Charcoal_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Crush_1.png b/Bio_Industries/graphics/icons/mips/Crush_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Crush_1.png rename to Bio_Industries/graphics/icons/mips/Crush_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Crush_2.png b/Bio_Industries/graphics/icons/mips/Crush_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Crush_2.png rename to Bio_Industries/graphics/icons/mips/Crush_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Crush_3.png b/Bio_Industries/graphics/icons/mips/Crush_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Crush_3.png rename to Bio_Industries/graphics/icons/mips/Crush_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Crush_4.png b/Bio_Industries/graphics/icons/mips/Crush_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Crush_4.png rename to Bio_Industries/graphics/icons/mips/Crush_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Resin_1.png b/Bio_Industries/graphics/icons/mips/Resin_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Resin_1.png rename to Bio_Industries/graphics/icons/mips/Resin_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Resin_2.png b/Bio_Industries/graphics/icons/mips/Resin_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Resin_2.png rename to Bio_Industries/graphics/icons/mips/Resin_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Resin_3.png b/Bio_Industries/graphics/icons/mips/Resin_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Resin_3.png rename to Bio_Industries/graphics/icons/mips/Resin_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Resin_4.png b/Bio_Industries/graphics/icons/mips/Resin_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Resin_4.png rename to Bio_Industries/graphics/icons/mips/Resin_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_1.png b/Bio_Industries/graphics/icons/mips/Seedling_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_1.png rename to Bio_Industries/graphics/icons/mips/Seedling_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_2.png b/Bio_Industries/graphics/icons/mips/Seedling_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_2.png rename to Bio_Industries/graphics/icons/mips/Seedling_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_3.png b/Bio_Industries/graphics/icons/mips/Seedling_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_3.png rename to Bio_Industries/graphics/icons/mips/Seedling_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_4.png b/Bio_Industries/graphics/icons/mips/Seedling_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_4.png rename to Bio_Industries/graphics/icons/mips/Seedling_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_5.png b/Bio_Industries/graphics/icons/mips/Seedling_5.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_5.png rename to Bio_Industries/graphics/icons/mips/Seedling_5.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_6.png b/Bio_Industries/graphics/icons/mips/Seedling_6.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_6.png rename to Bio_Industries/graphics/icons/mips/Seedling_6.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_7.png b/Bio_Industries/graphics/icons/mips/Seedling_7.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_7.png rename to Bio_Industries/graphics/icons/mips/Seedling_7.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_8.png b/Bio_Industries/graphics/icons/mips/Seedling_8.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_8.png rename to Bio_Industries/graphics/icons/mips/Seedling_8.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Seedling_9.png b/Bio_Industries/graphics/icons/mips/Seedling_9.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Seedling_9.png rename to Bio_Industries/graphics/icons/mips/Seedling_9.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_1.png b/Bio_Industries/graphics/icons/mips/Woodpulp_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_1.png rename to Bio_Industries/graphics/icons/mips/Woodpulp_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_2.png b/Bio_Industries/graphics/icons/mips/Woodpulp_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_2.png rename to Bio_Industries/graphics/icons/mips/Woodpulp_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_3.png b/Bio_Industries/graphics/icons/mips/Woodpulp_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_3.png rename to Bio_Industries/graphics/icons/mips/Woodpulp_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_4.png b/Bio_Industries/graphics/icons/mips/Woodpulp_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/Woodpulp_4.png rename to Bio_Industries/graphics/icons/mips/Woodpulp_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_1.png b/Bio_Industries/graphics/icons/mips/bio_seed_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_1.png rename to Bio_Industries/graphics/icons/mips/bio_seed_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_2.png b/Bio_Industries/graphics/icons/mips/bio_seed_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_2.png rename to Bio_Industries/graphics/icons/mips/bio_seed_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_3.png b/Bio_Industries/graphics/icons/mips/bio_seed_3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_3.png rename to Bio_Industries/graphics/icons/mips/bio_seed_3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_4.png b/Bio_Industries/graphics/icons/mips/bio_seed_4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/mips/bio_seed_4.png rename to Bio_Industries/graphics/icons/mips/bio_seed_4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/new/battery.png b/Bio_Industries/graphics/icons/new/battery.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/new/battery.png rename to Bio_Industries/graphics/icons/new/battery.png diff --git a/Bio_Industries_19.1.9/graphics/icons/new/biomass.png b/Bio_Industries/graphics/icons/new/biomass.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/new/biomass.png rename to Bio_Industries/graphics/icons/new/biomass.png diff --git a/Bio_Industries_19.1.9/graphics/icons/nitrogen.png b/Bio_Industries/graphics/icons/nitrogen.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/nitrogen.png rename to Bio_Industries/graphics/icons/nitrogen.png diff --git a/Bio_Industries_19.1.9/graphics/icons/no-entry-sign.png b/Bio_Industries/graphics/icons/no-entry-sign.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/no-entry-sign.png rename to Bio_Industries/graphics/icons/no-entry-sign.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet-coke.png b/Bio_Industries/graphics/icons/pellet-coke.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet-coke.png rename to Bio_Industries/graphics/icons/pellet-coke.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_1.png b/Bio_Industries/graphics/icons/pellet_coke_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_1.png rename to Bio_Industries/graphics/icons/pellet_coke_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_a.png b/Bio_Industries/graphics/icons/pellet_coke_a.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_a.png rename to Bio_Industries/graphics/icons/pellet_coke_a.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_b.png b/Bio_Industries/graphics/icons/pellet_coke_b.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_b.png rename to Bio_Industries/graphics/icons/pellet_coke_b.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_c.png b/Bio_Industries/graphics/icons/pellet_coke_c.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_c.png rename to Bio_Industries/graphics/icons/pellet_coke_c.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_coal.png b/Bio_Industries/graphics/icons/pellet_coke_coal.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_coal.png rename to Bio_Industries/graphics/icons/pellet_coke_coal.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pellet_coke_solid.png b/Bio_Industries/graphics/icons/pellet_coke_solid.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pellet_coke_solid.png rename to Bio_Industries/graphics/icons/pellet_coke_solid.png diff --git a/Bio_Industries_19.1.9/graphics/icons/petroleum-gas_64.png b/Bio_Industries/graphics/icons/petroleum-gas_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/petroleum-gas_64.png rename to Bio_Industries/graphics/icons/petroleum-gas_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/phosphate.png b/Bio_Industries/graphics/icons/phosphate.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/phosphate.png rename to Bio_Industries/graphics/icons/phosphate.png diff --git a/Bio_Industries_19.1.9/graphics/icons/pipe-to-ground-wood.png b/Bio_Industries/graphics/icons/pipe-to-ground-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/pipe-to-ground-wood.png rename to Bio_Industries/graphics/icons/pipe-to-ground-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/plastic_bar_1.png b/Bio_Industries/graphics/icons/plastic_bar_1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/plastic_bar_1.png rename to Bio_Industries/graphics/icons/plastic_bar_1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/plastic_bar_2.png b/Bio_Industries/graphics/icons/plastic_bar_2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/plastic_bar_2.png rename to Bio_Industries/graphics/icons/plastic_bar_2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/poison_dart_icon.png b/Bio_Industries/graphics/icons/poison_dart_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/poison_dart_icon.png rename to Bio_Industries/graphics/icons/poison_dart_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/potassium.png b/Bio_Industries/graphics/icons/potassium.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/potassium.png rename to Bio_Industries/graphics/icons/potassium.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_Seedling2.png b/Bio_Industries/graphics/icons/py_Seedling2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_Seedling2.png rename to Bio_Industries/graphics/icons/py_Seedling2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_ash_raw-wood.png b/Bio_Industries/graphics/icons/py_ash_raw-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_ash_raw-wood.png rename to Bio_Industries/graphics/icons/py_ash_raw-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_ash_woodpulp.png b/Bio_Industries/graphics/icons/py_ash_woodpulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_ash_woodpulp.png rename to Bio_Industries/graphics/icons/py_ash_woodpulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_bi_stone_brick.png b/Bio_Industries/graphics/icons/py_bi_stone_brick.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_bi_stone_brick.png rename to Bio_Industries/graphics/icons/py_bi_stone_brick.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_bio_seed2.png b/Bio_Industries/graphics/icons/py_bio_seed2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_bio_seed2.png rename to Bio_Industries/graphics/icons/py_bio_seed2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_bio_sulfur.png b/Bio_Industries/graphics/icons/py_bio_sulfur.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_bio_sulfur.png rename to Bio_Industries/graphics/icons/py_bio_sulfur.png diff --git a/Bio_Industries_19.1.9/graphics/icons/py_raw-wood-mk2.png b/Bio_Industries/graphics/icons/py_raw-wood-mk2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/py_raw-wood-mk2.png rename to Bio_Industries/graphics/icons/py_raw-wood-mk2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-concrete-power.png b/Bio_Industries/graphics/icons/rail-concrete-power.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-concrete-power.png rename to Bio_Industries/graphics/icons/rail-concrete-power.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-concrete.png b/Bio_Industries/graphics/icons/rail-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-concrete.png rename to Bio_Industries/graphics/icons/rail-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-wood-bridge.png b/Bio_Industries/graphics/icons/rail-wood-bridge.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-wood-bridge.png rename to Bio_Industries/graphics/icons/rail-wood-bridge.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-wood-bridge_64.png b/Bio_Industries/graphics/icons/rail-wood-bridge_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-wood-bridge_64.png rename to Bio_Industries/graphics/icons/rail-wood-bridge_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-wood-to-concrete.png b/Bio_Industries/graphics/icons/rail-wood-to-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-wood-to-concrete.png rename to Bio_Industries/graphics/icons/rail-wood-to-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/rail-wood.png b/Bio_Industries/graphics/icons/rail-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/rail-wood.png rename to Bio_Industries/graphics/icons/rail-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/raw-wood-mk1.png b/Bio_Industries/graphics/icons/raw-wood-mk1.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/raw-wood-mk1.png rename to Bio_Industries/graphics/icons/raw-wood-mk1.png diff --git a/Bio_Industries_19.1.9/graphics/icons/raw-wood-mk2.png b/Bio_Industries/graphics/icons/raw-wood-mk2.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/raw-wood-mk2.png rename to Bio_Industries/graphics/icons/raw-wood-mk2.png diff --git a/Bio_Industries_19.1.9/graphics/icons/raw-wood-mk3.png b/Bio_Industries/graphics/icons/raw-wood-mk3.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/raw-wood-mk3.png rename to Bio_Industries/graphics/icons/raw-wood-mk3.png diff --git a/Bio_Industries_19.1.9/graphics/icons/raw-wood-mk4.png b/Bio_Industries/graphics/icons/raw-wood-mk4.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/raw-wood-mk4.png rename to Bio_Industries/graphics/icons/raw-wood-mk4.png diff --git a/Bio_Industries_19.1.9/graphics/icons/recycle_64.png b/Bio_Industries/graphics/icons/recycle_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/recycle_64.png rename to Bio_Industries/graphics/icons/recycle_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/resin_64.png b/Bio_Industries/graphics/icons/resin_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/resin_64.png rename to Bio_Industries/graphics/icons/resin_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/sand-Krastorio.png b/Bio_Industries/graphics/icons/sand-Krastorio.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/sand-Krastorio.png rename to Bio_Industries/graphics/icons/sand-Krastorio.png diff --git a/Bio_Industries_19.1.9/graphics/icons/sand-aai.png b/Bio_Industries/graphics/icons/sand-aai.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/sand-aai.png rename to Bio_Industries/graphics/icons/sand-aai.png diff --git a/Bio_Industries_19.1.9/graphics/icons/solar-mat.png b/Bio_Industries/graphics/icons/solar-mat.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/solar-mat.png rename to Bio_Industries/graphics/icons/solar-mat.png diff --git a/Bio_Industries_19.1.9/graphics/icons/solid-fuel_64.png b/Bio_Industries/graphics/icons/solid-fuel_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/solid-fuel_64.png rename to Bio_Industries/graphics/icons/solid-fuel_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/standard_dart_icon.png b/Bio_Industries/graphics/icons/standard_dart_icon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/standard_dart_icon.png rename to Bio_Industries/graphics/icons/standard_dart_icon.png diff --git a/Bio_Industries_19.1.9/graphics/icons/steam_64.png b/Bio_Industries/graphics/icons/steam_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/steam_64.png rename to Bio_Industries/graphics/icons/steam_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/steel-furnace_disassemble.png b/Bio_Industries/graphics/icons/steel-furnace_disassemble.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/steel-furnace_disassemble.png rename to Bio_Industries/graphics/icons/steel-furnace_disassemble.png diff --git a/Bio_Industries_19.1.9/graphics/icons/stone-brick_64.png b/Bio_Industries/graphics/icons/stone-brick_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/stone-brick_64.png rename to Bio_Industries/graphics/icons/stone-brick_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/stone_crusher.png b/Bio_Industries/graphics/icons/stone_crusher.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/stone_crusher.png rename to Bio_Industries/graphics/icons/stone_crusher.png diff --git a/Bio_Industries_19.1.9/graphics/icons/stone_crusher_64.png b/Bio_Industries/graphics/icons/stone_crusher_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/stone_crusher_64.png rename to Bio_Industries/graphics/icons/stone_crusher_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/stone_furnace_disassemble.png b/Bio_Industries/graphics/icons/stone_furnace_disassemble.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/stone_furnace_disassemble.png rename to Bio_Industries/graphics/icons/stone_furnace_disassemble.png diff --git a/Bio_Industries_19.1.9/graphics/icons/straight-rail-concrete.png b/Bio_Industries/graphics/icons/straight-rail-concrete.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/straight-rail-concrete.png rename to Bio_Industries/graphics/icons/straight-rail-concrete.png diff --git a/Bio_Industries_19.1.9/graphics/icons/straight-rail-wood.png b/Bio_Industries/graphics/icons/straight-rail-wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/straight-rail-wood.png rename to Bio_Industries/graphics/icons/straight-rail-wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/sulfur_64.png b/Bio_Industries/graphics/icons/sulfur_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/sulfur_64.png rename to Bio_Industries/graphics/icons/sulfur_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/water-lithia.png b/Bio_Industries/graphics/icons/water-lithia.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/water-lithia.png rename to Bio_Industries/graphics/icons/water-lithia.png diff --git a/Bio_Industries_19.1.9/graphics/icons/water-saline.png b/Bio_Industries/graphics/icons/water-saline.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/water-saline.png rename to Bio_Industries/graphics/icons/water-saline.png diff --git a/Bio_Industries_19.1.9/graphics/icons/water_64.png b/Bio_Industries/graphics/icons/water_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/water_64.png rename to Bio_Industries/graphics/icons/water_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wood.png b/Bio_Industries/graphics/icons/wood.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wood.png rename to Bio_Industries/graphics/icons/wood.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wood_64.png b/Bio_Industries/graphics/icons/wood_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wood_64.png rename to Bio_Industries/graphics/icons/wood_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wood_from_pulp.png b/Bio_Industries/graphics/icons/wood_from_pulp.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wood_from_pulp.png rename to Bio_Industries/graphics/icons/wood_from_pulp.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wood_pipe.png b/Bio_Industries/graphics/icons/wood_pipe.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wood_pipe.png rename to Bio_Industries/graphics/icons/wood_pipe.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wood_pipe_alt.png b/Bio_Industries/graphics/icons/wood_pipe_alt.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wood_pipe_alt.png rename to Bio_Industries/graphics/icons/wood_pipe_alt.png diff --git a/Bio_Industries_19.1.9/graphics/icons/wooden-fence.png b/Bio_Industries/graphics/icons/wooden-fence.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/wooden-fence.png rename to Bio_Industries/graphics/icons/wooden-fence.png diff --git a/Bio_Industries_19.1.9/graphics/icons/woodpulp_64.png b/Bio_Industries/graphics/icons/woodpulp_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/woodpulp_64.png rename to Bio_Industries/graphics/icons/woodpulp_64.png diff --git a/Bio_Industries_19.1.9/graphics/icons/woodrail_64.png b/Bio_Industries/graphics/icons/woodrail_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/icons/woodrail_64.png rename to Bio_Industries/graphics/icons/woodrail_64.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Basic_Petroleum_Gas_Processing.png b/Bio_Industries/graphics/technology/Basic_Petroleum_Gas_Processing.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Basic_Petroleum_Gas_Processing.png rename to Bio_Industries/graphics/technology/Basic_Petroleum_Gas_Processing.png diff --git a/Bio_Industries_19.1.9/graphics/technology/BioIndustries_128.png b/Bio_Industries/graphics/technology/BioIndustries_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/BioIndustries_128.png rename to Bio_Industries/graphics/technology/BioIndustries_128.png diff --git a/Bio_Industries_19.1.9/graphics/technology/BioIndustries_64.png b/Bio_Industries/graphics/technology/BioIndustries_64.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/BioIndustries_64.png rename to Bio_Industries/graphics/technology/BioIndustries_64.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Bio_Cannon.png b/Bio_Industries/graphics/technology/Bio_Cannon.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Bio_Cannon.png rename to Bio_Industries/graphics/technology/Bio_Cannon.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Bio_Farm_Tech_128.png b/Bio_Industries/graphics/technology/Bio_Farm_Tech_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Bio_Farm_Tech_128.png rename to Bio_Industries/graphics/technology/Bio_Farm_Tech_128.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Biomass_128.png b/Bio_Industries/graphics/technology/Biomass_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Biomass_128.png rename to Bio_Industries/graphics/technology/Biomass_128.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Cellulose_128.png b/Bio_Industries/graphics/technology/Cellulose_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Cellulose_128.png rename to Bio_Industries/graphics/technology/Cellulose_128.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Coal_128.png b/Bio_Industries/graphics/technology/Coal_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Coal_128.png rename to Bio_Industries/graphics/technology/Coal_128.png diff --git a/Bio_Industries_19.1.9/graphics/technology/Fertilizer_128.png b/Bio_Industries/graphics/technology/Fertilizer_128.png similarity index 100% rename from Bio_Industries_19.1.9/graphics/technology/Fertilizer_128.png rename to Bio_Industries/graphics/technology/Fertilizer_128.png diff --git a/Bio_Industries_19.1.9/info.json b/Bio_Industries/info.json similarity index 100% rename from Bio_Industries_19.1.9/info.json rename to Bio_Industries/info.json diff --git a/Bio_Industries_19.1.9/libs/bi_functions.lua b/Bio_Industries/libs/bi_functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/bi_functions.lua rename to Bio_Industries/libs/bi_functions.lua diff --git a/Bio_Industries_19.1.9/libs/category-functions.lua b/Bio_Industries/libs/category-functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/category-functions.lua rename to Bio_Industries/libs/category-functions.lua diff --git a/Bio_Industries_19.1.9/libs/functions.lua b/Bio_Industries/libs/functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/functions.lua rename to Bio_Industries/libs/functions.lua diff --git a/Bio_Industries_19.1.9/libs/item-functions.lua b/Bio_Industries/libs/item-functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/item-functions.lua rename to Bio_Industries/libs/item-functions.lua diff --git a/Bio_Industries_19.1.9/libs/recipe-functions.lua b/Bio_Industries/libs/recipe-functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/recipe-functions.lua rename to Bio_Industries/libs/recipe-functions.lua diff --git a/Bio_Industries_19.1.9/libs/technology-functions.lua b/Bio_Industries/libs/technology-functions.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/technology-functions.lua rename to Bio_Industries/libs/technology-functions.lua diff --git a/Bio_Industries_19.1.9/libs/trees-and-terrains.lua b/Bio_Industries/libs/trees-and-terrains.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/trees-and-terrains.lua rename to Bio_Industries/libs/trees-and-terrains.lua diff --git a/Bio_Industries_19.1.9/libs/util_ext.lua b/Bio_Industries/libs/util_ext.lua similarity index 100% rename from Bio_Industries_19.1.9/libs/util_ext.lua rename to Bio_Industries/libs/util_ext.lua diff --git a/Bio_Industries_19.1.9/locale/en/entity-description.cfg b/Bio_Industries/locale/en/entity-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/entity-description.cfg rename to Bio_Industries/locale/en/entity-description.cfg diff --git a/Bio_Industries_19.1.9/locale/en/entity-name.cfg b/Bio_Industries/locale/en/entity-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/entity-name.cfg rename to Bio_Industries/locale/en/entity-name.cfg diff --git a/Bio_Industries_19.1.9/locale/en/item-description.cfg b/Bio_Industries/locale/en/item-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/item-description.cfg rename to Bio_Industries/locale/en/item-description.cfg diff --git a/Bio_Industries_19.1.9/locale/en/item-name.cfg b/Bio_Industries/locale/en/item-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/item-name.cfg rename to Bio_Industries/locale/en/item-name.cfg diff --git a/Bio_Industries_19.1.9/locale/en/misc.cfg b/Bio_Industries/locale/en/misc.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/misc.cfg rename to Bio_Industries/locale/en/misc.cfg diff --git a/Bio_Industries_19.1.9/locale/en/mod.cfg b/Bio_Industries/locale/en/mod.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/mod.cfg rename to Bio_Industries/locale/en/mod.cfg diff --git a/Bio_Industries_19.1.9/locale/en/recipe-description.cfg b/Bio_Industries/locale/en/recipe-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/recipe-description.cfg rename to Bio_Industries/locale/en/recipe-description.cfg diff --git a/Bio_Industries_19.1.9/locale/en/recipe-name.cfg b/Bio_Industries/locale/en/recipe-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/recipe-name.cfg rename to Bio_Industries/locale/en/recipe-name.cfg diff --git a/Bio_Industries_19.1.9/locale/en/tech.cfg b/Bio_Industries/locale/en/tech.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/en/tech.cfg rename to Bio_Industries/locale/en/tech.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/entity-description.cfg b/Bio_Industries/locale/ru/entity-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/entity-description.cfg rename to Bio_Industries/locale/ru/entity-description.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/entity-name.cfg b/Bio_Industries/locale/ru/entity-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/entity-name.cfg rename to Bio_Industries/locale/ru/entity-name.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/item-description.cfg b/Bio_Industries/locale/ru/item-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/item-description.cfg rename to Bio_Industries/locale/ru/item-description.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/item-name.cfg b/Bio_Industries/locale/ru/item-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/item-name.cfg rename to Bio_Industries/locale/ru/item-name.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/misc.cfg b/Bio_Industries/locale/ru/misc.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/misc.cfg rename to Bio_Industries/locale/ru/misc.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/mod.cfg b/Bio_Industries/locale/ru/mod.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/mod.cfg rename to Bio_Industries/locale/ru/mod.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/new_locale.cfg b/Bio_Industries/locale/ru/new_locale.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/new_locale.cfg rename to Bio_Industries/locale/ru/new_locale.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/recipe-description.cfg b/Bio_Industries/locale/ru/recipe-description.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/recipe-description.cfg rename to Bio_Industries/locale/ru/recipe-description.cfg diff --git a/Bio_Industries_19.1.9/locale/ru/recipe-name.cfg b/Bio_Industries/locale/ru/recipe-name.cfg similarity index 100% rename from Bio_Industries_19.1.9/locale/ru/recipe-name.cfg rename to Bio_Industries/locale/ru/recipe-name.cfg diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.02.lua b/Bio_Industries/migrations/Bio_Industries_0.17.02.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.02.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.02.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.06.lua b/Bio_Industries/migrations/Bio_Industries_0.17.06.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.06.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.06.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.11.lua b/Bio_Industries/migrations/Bio_Industries_0.17.11.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.11.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.11.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.13.lua b/Bio_Industries/migrations/Bio_Industries_0.17.13.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.13.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.13.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.19.json b/Bio_Industries/migrations/Bio_Industries_0.17.19.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.19.json rename to Bio_Industries/migrations/Bio_Industries_0.17.19.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.22.lua b/Bio_Industries/migrations/Bio_Industries_0.17.22.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.22.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.22.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.26.lua b/Bio_Industries/migrations/Bio_Industries_0.17.26.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.26.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.26.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.31.lua b/Bio_Industries/migrations/Bio_Industries_0.17.31.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_0.17.31.lua rename to Bio_Industries/migrations/Bio_Industries_0.17.31.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.01.json b/Bio_Industries/migrations/Bio_Industries_9.18.01.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.01.json rename to Bio_Industries/migrations/Bio_Industries_9.18.01.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.01.lua b/Bio_Industries/migrations/Bio_Industries_9.18.01.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.01.lua rename to Bio_Industries/migrations/Bio_Industries_9.18.01.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.20_+_9.17.51.json b/Bio_Industries/migrations/Bio_Industries_9.18.20_+_9.17.51.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.20_+_9.17.51.json rename to Bio_Industries/migrations/Bio_Industries_9.18.20_+_9.17.51.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.27_+_9.17.58.lua b/Bio_Industries/migrations/Bio_Industries_9.18.27_+_9.17.58.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.27_+_9.17.58.lua rename to Bio_Industries/migrations/Bio_Industries_9.18.27_+_9.17.58.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.29.json b/Bio_Industries/migrations/Bio_Industries_9.18.29.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.29.json rename to Bio_Industries/migrations/Bio_Industries_9.18.29.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.31_+_1.01.01.json b/Bio_Industries/migrations/Bio_Industries_9.18.31_+_1.01.01.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.31_+_1.01.01.json rename to Bio_Industries/migrations/Bio_Industries_9.18.31_+_1.01.01.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.31_+_1.01.01.lua b/Bio_Industries/migrations/Bio_Industries_9.18.31_+_1.01.01.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.31_+_1.01.01.lua rename to Bio_Industries/migrations/Bio_Industries_9.18.31_+_1.01.01.lua diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.35_+_1.01.05.json b/Bio_Industries/migrations/Bio_Industries_9.18.35_+_1.01.05.json similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.35_+_1.01.05.json rename to Bio_Industries/migrations/Bio_Industries_9.18.35_+_1.01.05.json diff --git a/Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.35_+_1.01.05.lua b/Bio_Industries/migrations/Bio_Industries_9.18.35_+_1.01.05.lua similarity index 100% rename from Bio_Industries_19.1.9/migrations/Bio_Industries_9.18.35_+_1.01.05.lua rename to Bio_Industries/migrations/Bio_Industries_9.18.35_+_1.01.05.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/compatible_recipes.lua b/Bio_Industries/prototypes/Bio_Farm/compatible_recipes.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/compatible_recipes.lua rename to Bio_Industries/prototypes/Bio_Farm/compatible_recipes.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/entities.lua b/Bio_Industries/prototypes/Bio_Farm/entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/entities.lua rename to Bio_Industries/prototypes/Bio_Farm/entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/item.lua b/Bio_Industries/prototypes/Bio_Farm/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/item.lua rename to Bio_Industries/prototypes/Bio_Farm/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/liquids.lua b/Bio_Industries/prototypes/Bio_Farm/liquids.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/liquids.lua rename to Bio_Industries/prototypes/Bio_Farm/liquids.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/recipe-categories.lua b/Bio_Industries/prototypes/Bio_Farm/recipe-categories.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/recipe-categories.lua rename to Bio_Industries/prototypes/Bio_Farm/recipe-categories.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/recipe.lua b/Bio_Industries/prototypes/Bio_Farm/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/recipe.lua rename to Bio_Industries/prototypes/Bio_Farm/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/technology.lua b/Bio_Industries/prototypes/Bio_Farm/technology.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/technology.lua rename to Bio_Industries/prototypes/Bio_Farm/technology.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Farm/tree_entities.lua b/Bio_Industries/prototypes/Bio_Farm/tree_entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Farm/tree_entities.lua rename to Bio_Industries/prototypes/Bio_Farm/tree_entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Fuel/entities.lua b/Bio_Industries/prototypes/Bio_Fuel/entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Fuel/entities.lua rename to Bio_Industries/prototypes/Bio_Fuel/entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Fuel/item.lua b/Bio_Industries/prototypes/Bio_Fuel/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Fuel/item.lua rename to Bio_Industries/prototypes/Bio_Fuel/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Fuel/recipe.lua b/Bio_Industries/prototypes/Bio_Fuel/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Fuel/recipe.lua rename to Bio_Industries/prototypes/Bio_Fuel/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Garden/entities.lua b/Bio_Industries/prototypes/Bio_Garden/entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Garden/entities.lua rename to Bio_Industries/prototypes/Bio_Garden/entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Garden/item.lua b/Bio_Industries/prototypes/Bio_Garden/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Garden/item.lua rename to Bio_Industries/prototypes/Bio_Garden/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Garden/recipe-categories.lua b/Bio_Industries/prototypes/Bio_Garden/recipe-categories.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Garden/recipe-categories.lua rename to Bio_Industries/prototypes/Bio_Garden/recipe-categories.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Garden/recipe.lua b/Bio_Industries/prototypes/Bio_Garden/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Garden/recipe.lua rename to Bio_Industries/prototypes/Bio_Garden/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/entities.lua b/Bio_Industries/prototypes/Bio_Solar_Farm/entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/entities.lua rename to Bio_Industries/prototypes/Bio_Solar_Farm/entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/item.lua b/Bio_Industries/prototypes/Bio_Solar_Farm/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/item.lua rename to Bio_Industries/prototypes/Bio_Solar_Farm/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/recipe.lua b/Bio_Industries/prototypes/Bio_Solar_Farm/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Solar_Farm/recipe.lua rename to Bio_Industries/prototypes/Bio_Solar_Farm/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/damage-type.lua b/Bio_Industries/prototypes/Bio_Turret/damage-type.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/damage-type.lua rename to Bio_Industries/prototypes/Bio_Turret/damage-type.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/entity.lua b/Bio_Industries/prototypes/Bio_Turret/entity.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/entity.lua rename to Bio_Industries/prototypes/Bio_Turret/entity.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/item-group.lua b/Bio_Industries/prototypes/Bio_Turret/item-group.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/item-group.lua rename to Bio_Industries/prototypes/Bio_Turret/item-group.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/item.lua b/Bio_Industries/prototypes/Bio_Turret/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/item.lua rename to Bio_Industries/prototypes/Bio_Turret/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/recipe.lua b/Bio_Industries/prototypes/Bio_Turret/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/recipe.lua rename to Bio_Industries/prototypes/Bio_Turret/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Bio_Turret/technology-updates.lua b/Bio_Industries/prototypes/Bio_Turret/technology-updates.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Bio_Turret/technology-updates.lua rename to Bio_Industries/prototypes/Bio_Turret/technology-updates.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/containers-entities.lua b/Bio_Industries/prototypes/Wood_Products/containers-entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/containers-entities.lua rename to Bio_Industries/prototypes/Wood_Products/containers-entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/containers-item.lua b/Bio_Industries/prototypes/Wood_Products/containers-item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/containers-item.lua rename to Bio_Industries/prototypes/Wood_Products/containers-item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/containers-recipe.lua b/Bio_Industries/prototypes/Wood_Products/containers-recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/containers-recipe.lua rename to Bio_Industries/prototypes/Wood_Products/containers-recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/entities.lua b/Bio_Industries/prototypes/Wood_Products/entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/entities.lua rename to Bio_Industries/prototypes/Wood_Products/entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/item.lua b/Bio_Industries/prototypes/Wood_Products/item.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/item.lua rename to Bio_Industries/prototypes/Wood_Products/item.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/pipes.lua b/Bio_Industries/prototypes/Wood_Products/pipes.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/pipes.lua rename to Bio_Industries/prototypes/Wood_Products/pipes.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/recipe.lua b/Bio_Industries/prototypes/Wood_Products/recipe.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/recipe.lua rename to Bio_Industries/prototypes/Wood_Products/recipe.lua diff --git a/Bio_Industries_19.1.9/prototypes/Wood_Products/tint_rails_remnants_function.lua b/Bio_Industries/prototypes/Wood_Products/tint_rails_remnants_function.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/Wood_Products/tint_rails_remnants_function.lua rename to Bio_Industries/prototypes/Wood_Products/tint_rails_remnants_function.lua diff --git a/Bio_Industries_19.1.9/prototypes/category.lua b/Bio_Industries/prototypes/category.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/category.lua rename to Bio_Industries/prototypes/category.lua diff --git a/Bio_Industries_19.1.9/prototypes/compound_entities/hidden_entities.lua b/Bio_Industries/prototypes/compound_entities/hidden_entities.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/compound_entities/hidden_entities.lua rename to Bio_Industries/prototypes/compound_entities/hidden_entities.lua diff --git a/Bio_Industries_19.1.9/prototypes/compound_entities/hidden_lamps.lua b/Bio_Industries/prototypes/compound_entities/hidden_lamps.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/compound_entities/hidden_lamps.lua rename to Bio_Industries/prototypes/compound_entities/hidden_lamps.lua diff --git a/Bio_Industries_19.1.9/prototypes/compound_entities/hidden_panels.lua b/Bio_Industries/prototypes/compound_entities/hidden_panels.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/compound_entities/hidden_panels.lua rename to Bio_Industries/prototypes/compound_entities/hidden_panels.lua diff --git a/Bio_Industries_19.1.9/prototypes/compound_entities/hidden_poles.lua b/Bio_Industries/prototypes/compound_entities/hidden_poles.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/compound_entities/hidden_poles.lua rename to Bio_Industries/prototypes/compound_entities/hidden_poles.lua diff --git a/Bio_Industries_19.1.9/prototypes/compound_entities/main_list.lua b/Bio_Industries/prototypes/compound_entities/main_list.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/compound_entities/main_list.lua rename to Bio_Industries/prototypes/compound_entities/main_list.lua diff --git a/Bio_Industries_19.1.9/prototypes/new_tech.lua b/Bio_Industries/prototypes/new_tech.lua similarity index 100% rename from Bio_Industries_19.1.9/prototypes/new_tech.lua rename to Bio_Industries/prototypes/new_tech.lua diff --git a/Bio_Industries_19.1.9/settings.lua b/Bio_Industries/settings.lua similarity index 100% rename from Bio_Industries_19.1.9/settings.lua rename to Bio_Industries/settings.lua diff --git a/Bio_Industries_19.1.9/settings_changed.lua b/Bio_Industries/settings_changed.lua similarity index 100% rename from Bio_Industries_19.1.9/settings_changed.lua rename to Bio_Industries/settings_changed.lua diff --git a/Bio_Industries_19.1.9/sound/dart-turret.ogg b/Bio_Industries/sound/dart-turret.ogg similarity index 100% rename from Bio_Industries_19.1.9/sound/dart-turret.ogg rename to Bio_Industries/sound/dart-turret.ogg diff --git a/Bio_Industries_19.1.9/sound/rainforest_ambience.ogg b/Bio_Industries/sound/rainforest_ambience.ogg similarity index 100% rename from Bio_Industries_19.1.9/sound/rainforest_ambience.ogg rename to Bio_Industries/sound/rainforest_ambience.ogg diff --git a/Bio_Industries_19.1.9/thumbnail.png b/Bio_Industries/thumbnail.png similarity index 100% rename from Bio_Industries_19.1.9/thumbnail.png rename to Bio_Industries/thumbnail.png diff --git a/Bioluminescence_1.152.1/License.txt b/Bioluminescence/License.txt similarity index 100% rename from Bioluminescence_1.152.1/License.txt rename to Bioluminescence/License.txt diff --git a/Bioluminescence_1.152.1/README.md b/Bioluminescence/README.md similarity index 100% rename from Bioluminescence_1.152.1/README.md rename to Bioluminescence/README.md diff --git a/Bioluminescence_1.152.1/changelog-input.txt b/Bioluminescence/changelog-input.txt similarity index 100% rename from Bioluminescence_1.152.1/changelog-input.txt rename to Bioluminescence/changelog-input.txt diff --git a/Bioluminescence_1.152.1/changelog.txt b/Bioluminescence/changelog.txt similarity index 100% rename from Bioluminescence_1.152.1/changelog.txt rename to Bioluminescence/changelog.txt diff --git a/Bioluminescence_1.152.1/config.lua b/Bioluminescence/config.lua similarity index 100% rename from Bioluminescence_1.152.1/config.lua rename to Bioluminescence/config.lua diff --git a/Bioluminescence_1.152.1/constants.lua b/Bioluminescence/constants.lua similarity index 100% rename from Bioluminescence_1.152.1/constants.lua rename to Bioluminescence/constants.lua diff --git a/Bioluminescence_1.152.1/control.lua b/Bioluminescence/control.lua similarity index 100% rename from Bioluminescence_1.152.1/control.lua rename to Bioluminescence/control.lua diff --git a/Bioluminescence_1.152.1/data-final-fixes.lua b/Bioluminescence/data-final-fixes.lua similarity index 100% rename from Bioluminescence_1.152.1/data-final-fixes.lua rename to Bioluminescence/data-final-fixes.lua diff --git a/Bioluminescence_1.152.1/data-updates.lua b/Bioluminescence/data-updates.lua similarity index 100% rename from Bioluminescence_1.152.1/data-updates.lua rename to Bioluminescence/data-updates.lua diff --git a/Bioluminescence_1.152.1/data.lua b/Bioluminescence/data.lua similarity index 100% rename from Bioluminescence_1.152.1/data.lua rename to Bioluminescence/data.lua diff --git a/Bioluminescence_1.152.1/functions.lua b/Bioluminescence/functions.lua similarity index 100% rename from Bioluminescence_1.152.1/functions.lua rename to Bioluminescence/functions.lua diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/argon-01.png b/Bioluminescence/graphics/entity/bush/v1/argon-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/argon-01.png rename to Bioluminescence/graphics/entity/bush/v1/argon-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/argon-02.png b/Bioluminescence/graphics/entity/bush/v1/argon-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/argon-02.png rename to Bioluminescence/graphics/entity/bush/v1/argon-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/blue-01.png b/Bioluminescence/graphics/entity/bush/v1/blue-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/blue-01.png rename to Bioluminescence/graphics/entity/bush/v1/blue-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/blue-02.png b/Bioluminescence/graphics/entity/bush/v1/blue-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/blue-02.png rename to Bioluminescence/graphics/entity/bush/v1/blue-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/cyan-01.png b/Bioluminescence/graphics/entity/bush/v1/cyan-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/cyan-01.png rename to Bioluminescence/graphics/entity/bush/v1/cyan-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/cyan-02.png b/Bioluminescence/graphics/entity/bush/v1/cyan-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/cyan-02.png rename to Bioluminescence/graphics/entity/bush/v1/cyan-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/green-02.png b/Bioluminescence/graphics/entity/bush/v1/green-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/green-02.png rename to Bioluminescence/graphics/entity/bush/v1/green-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/green-1.png b/Bioluminescence/graphics/entity/bush/v1/green-1.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/green-1.png rename to Bioluminescence/graphics/entity/bush/v1/green-1.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/magenta-01.png b/Bioluminescence/graphics/entity/bush/v1/magenta-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/magenta-01.png rename to Bioluminescence/graphics/entity/bush/v1/magenta-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/magenta-02.png b/Bioluminescence/graphics/entity/bush/v1/magenta-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/magenta-02.png rename to Bioluminescence/graphics/entity/bush/v1/magenta-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/orange-01.png b/Bioluminescence/graphics/entity/bush/v1/orange-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/orange-01.png rename to Bioluminescence/graphics/entity/bush/v1/orange-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/orange-02.png b/Bioluminescence/graphics/entity/bush/v1/orange-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/orange-02.png rename to Bioluminescence/graphics/entity/bush/v1/orange-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/purple-01.png b/Bioluminescence/graphics/entity/bush/v1/purple-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/purple-01.png rename to Bioluminescence/graphics/entity/bush/v1/purple-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/purple-02.png b/Bioluminescence/graphics/entity/bush/v1/purple-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/purple-02.png rename to Bioluminescence/graphics/entity/bush/v1/purple-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/red-01.png b/Bioluminescence/graphics/entity/bush/v1/red-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/red-01.png rename to Bioluminescence/graphics/entity/bush/v1/red-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/red-02.png b/Bioluminescence/graphics/entity/bush/v1/red-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/red-02.png rename to Bioluminescence/graphics/entity/bush/v1/red-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/white-01.png b/Bioluminescence/graphics/entity/bush/v1/white-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/white-01.png rename to Bioluminescence/graphics/entity/bush/v1/white-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/white-02.png b/Bioluminescence/graphics/entity/bush/v1/white-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/white-02.png rename to Bioluminescence/graphics/entity/bush/v1/white-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/yellow-01.png b/Bioluminescence/graphics/entity/bush/v1/yellow-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/yellow-01.png rename to Bioluminescence/graphics/entity/bush/v1/yellow-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v1/yellow-02.png b/Bioluminescence/graphics/entity/bush/v1/yellow-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v1/yellow-02.png rename to Bioluminescence/graphics/entity/bush/v1/yellow-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-01.png b/Bioluminescence/graphics/entity/bush/v2/argon-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-01.png rename to Bioluminescence/graphics/entity/bush/v2/argon-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-02.png b/Bioluminescence/graphics/entity/bush/v2/argon-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-02.png rename to Bioluminescence/graphics/entity/bush/v2/argon-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-03.png b/Bioluminescence/graphics/entity/bush/v2/argon-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/argon-03.png rename to Bioluminescence/graphics/entity/bush/v2/argon-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-01.png b/Bioluminescence/graphics/entity/bush/v2/blue-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-01.png rename to Bioluminescence/graphics/entity/bush/v2/blue-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-02.png b/Bioluminescence/graphics/entity/bush/v2/blue-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-02.png rename to Bioluminescence/graphics/entity/bush/v2/blue-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-03.png b/Bioluminescence/graphics/entity/bush/v2/blue-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/blue-03.png rename to Bioluminescence/graphics/entity/bush/v2/blue-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-01.png b/Bioluminescence/graphics/entity/bush/v2/cyan-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-01.png rename to Bioluminescence/graphics/entity/bush/v2/cyan-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-02.png b/Bioluminescence/graphics/entity/bush/v2/cyan-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-02.png rename to Bioluminescence/graphics/entity/bush/v2/cyan-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-03.png b/Bioluminescence/graphics/entity/bush/v2/cyan-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/cyan-03.png rename to Bioluminescence/graphics/entity/bush/v2/cyan-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/green-01.png b/Bioluminescence/graphics/entity/bush/v2/green-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/green-01.png rename to Bioluminescence/graphics/entity/bush/v2/green-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/green-02.png b/Bioluminescence/graphics/entity/bush/v2/green-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/green-02.png rename to Bioluminescence/graphics/entity/bush/v2/green-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/green-03.png b/Bioluminescence/graphics/entity/bush/v2/green-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/green-03.png rename to Bioluminescence/graphics/entity/bush/v2/green-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-01.png b/Bioluminescence/graphics/entity/bush/v2/magenta-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-01.png rename to Bioluminescence/graphics/entity/bush/v2/magenta-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-02.png b/Bioluminescence/graphics/entity/bush/v2/magenta-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-02.png rename to Bioluminescence/graphics/entity/bush/v2/magenta-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-03.png b/Bioluminescence/graphics/entity/bush/v2/magenta-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/magenta-03.png rename to Bioluminescence/graphics/entity/bush/v2/magenta-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-01.png b/Bioluminescence/graphics/entity/bush/v2/orange-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-01.png rename to Bioluminescence/graphics/entity/bush/v2/orange-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-02.png b/Bioluminescence/graphics/entity/bush/v2/orange-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-02.png rename to Bioluminescence/graphics/entity/bush/v2/orange-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-03.png b/Bioluminescence/graphics/entity/bush/v2/orange-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/orange-03.png rename to Bioluminescence/graphics/entity/bush/v2/orange-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-01.png b/Bioluminescence/graphics/entity/bush/v2/purple-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-01.png rename to Bioluminescence/graphics/entity/bush/v2/purple-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-02.png b/Bioluminescence/graphics/entity/bush/v2/purple-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-02.png rename to Bioluminescence/graphics/entity/bush/v2/purple-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-03.png b/Bioluminescence/graphics/entity/bush/v2/purple-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/purple-03.png rename to Bioluminescence/graphics/entity/bush/v2/purple-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/red-01.png b/Bioluminescence/graphics/entity/bush/v2/red-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/red-01.png rename to Bioluminescence/graphics/entity/bush/v2/red-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/red-02.png b/Bioluminescence/graphics/entity/bush/v2/red-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/red-02.png rename to Bioluminescence/graphics/entity/bush/v2/red-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/red-03.png b/Bioluminescence/graphics/entity/bush/v2/red-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/red-03.png rename to Bioluminescence/graphics/entity/bush/v2/red-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/white-01.png b/Bioluminescence/graphics/entity/bush/v2/white-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/white-01.png rename to Bioluminescence/graphics/entity/bush/v2/white-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/white-02.png b/Bioluminescence/graphics/entity/bush/v2/white-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/white-02.png rename to Bioluminescence/graphics/entity/bush/v2/white-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/white-03.png b/Bioluminescence/graphics/entity/bush/v2/white-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/white-03.png rename to Bioluminescence/graphics/entity/bush/v2/white-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-01.png b/Bioluminescence/graphics/entity/bush/v2/yellow-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-01.png rename to Bioluminescence/graphics/entity/bush/v2/yellow-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-02.png b/Bioluminescence/graphics/entity/bush/v2/yellow-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-02.png rename to Bioluminescence/graphics/entity/bush/v2/yellow-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-03.png b/Bioluminescence/graphics/entity/bush/v2/yellow-03.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/bush/v2/yellow-03.png rename to Bioluminescence/graphics/entity/bush/v2/yellow-03.png diff --git a/Bioluminescence_1.152.1/graphics/entity/lily/lily-01.png b/Bioluminescence/graphics/entity/lily/lily-01.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/lily/lily-01.png rename to Bioluminescence/graphics/entity/lily/lily-01.png diff --git a/Bioluminescence_1.152.1/graphics/entity/lily/lily-02.png b/Bioluminescence/graphics/entity/lily/lily-02.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/lily/lily-02.png rename to Bioluminescence/graphics/entity/lily/lily-02.png diff --git a/Bioluminescence_1.152.1/graphics/entity/lily/lily.png b/Bioluminescence/graphics/entity/lily/lily.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/lily/lily.png rename to Bioluminescence/graphics/entity/lily/lily.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/argon.png b/Bioluminescence/graphics/entity/reeds/v1/argon.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/argon.png rename to Bioluminescence/graphics/entity/reeds/v1/argon.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/blue.png b/Bioluminescence/graphics/entity/reeds/v1/blue.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/blue.png rename to Bioluminescence/graphics/entity/reeds/v1/blue.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/cyan.png b/Bioluminescence/graphics/entity/reeds/v1/cyan.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/cyan.png rename to Bioluminescence/graphics/entity/reeds/v1/cyan.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/green.png b/Bioluminescence/graphics/entity/reeds/v1/green.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/green.png rename to Bioluminescence/graphics/entity/reeds/v1/green.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/magenta.png b/Bioluminescence/graphics/entity/reeds/v1/magenta.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/magenta.png rename to Bioluminescence/graphics/entity/reeds/v1/magenta.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/orange.png b/Bioluminescence/graphics/entity/reeds/v1/orange.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/orange.png rename to Bioluminescence/graphics/entity/reeds/v1/orange.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/purple.png b/Bioluminescence/graphics/entity/reeds/v1/purple.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/purple.png rename to Bioluminescence/graphics/entity/reeds/v1/purple.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/red.png b/Bioluminescence/graphics/entity/reeds/v1/red.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/red.png rename to Bioluminescence/graphics/entity/reeds/v1/red.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/white.png b/Bioluminescence/graphics/entity/reeds/v1/white.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/white.png rename to Bioluminescence/graphics/entity/reeds/v1/white.png diff --git a/Bioluminescence_1.152.1/graphics/entity/reeds/v1/yellow.png b/Bioluminescence/graphics/entity/reeds/v1/yellow.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/entity/reeds/v1/yellow.png rename to Bioluminescence/graphics/entity/reeds/v1/yellow.png diff --git a/Bioluminescence_1.152.1/graphics/icons/bush.png b/Bioluminescence/graphics/icons/bush.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/icons/bush.png rename to Bioluminescence/graphics/icons/bush.png diff --git a/Bioluminescence_1.152.1/graphics/icons/lily.png b/Bioluminescence/graphics/icons/lily.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/icons/lily.png rename to Bioluminescence/graphics/icons/lily.png diff --git a/Bioluminescence_1.152.1/graphics/icons/reeds.png b/Bioluminescence/graphics/icons/reeds.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/icons/reeds.png rename to Bioluminescence/graphics/icons/reeds.png diff --git a/Bioluminescence_1.152.1/graphics/item-group.png b/Bioluminescence/graphics/item-group.png similarity index 100% rename from Bioluminescence_1.152.1/graphics/item-group.png rename to Bioluminescence/graphics/item-group.png diff --git a/Bioluminescence_1.152.1/info.json b/Bioluminescence/info.json similarity index 100% rename from Bioluminescence_1.152.1/info.json rename to Bioluminescence/info.json diff --git a/Bioluminescence_1.152.1/locale/en/en.cfg b/Bioluminescence/locale/en/en.cfg similarity index 100% rename from Bioluminescence_1.152.1/locale/en/en.cfg rename to Bioluminescence/locale/en/en.cfg diff --git a/Bioluminescence_1.152.1/prototypes/colorkeys.lua b/Bioluminescence/prototypes/colorkeys.lua similarity index 100% rename from Bioluminescence_1.152.1/prototypes/colorkeys.lua rename to Bioluminescence/prototypes/colorkeys.lua diff --git a/Bioluminescence_1.152.1/prototypes/plants.lua b/Bioluminescence/prototypes/plants.lua similarity index 100% rename from Bioluminescence_1.152.1/prototypes/plants.lua rename to Bioluminescence/prototypes/plants.lua diff --git a/Bioluminescence_1.152.1/settings.lua b/Bioluminescence/settings.lua similarity index 100% rename from Bioluminescence_1.152.1/settings.lua rename to Bioluminescence/settings.lua diff --git a/Bioluminescence_1.152.1/thumbnail.png b/Bioluminescence/thumbnail.png similarity index 100% rename from Bioluminescence_1.152.1/thumbnail.png rename to Bioluminescence/thumbnail.png diff --git a/BobPipesThroughput_0.1.1/.gitignore b/BobPipesThroughput/.gitignore similarity index 100% rename from BobPipesThroughput_0.1.1/.gitignore rename to BobPipesThroughput/.gitignore diff --git a/BobPipesThroughput_0.1.1/LICENSE b/BobPipesThroughput/LICENSE similarity index 100% rename from BobPipesThroughput_0.1.1/LICENSE rename to BobPipesThroughput/LICENSE diff --git a/BobPipesThroughput_0.1.1/README.md b/BobPipesThroughput/README.md similarity index 100% rename from BobPipesThroughput_0.1.1/README.md rename to BobPipesThroughput/README.md diff --git a/BobPipesThroughput_0.1.1/changelog.txt b/BobPipesThroughput/changelog.txt similarity index 100% rename from BobPipesThroughput_0.1.1/changelog.txt rename to BobPipesThroughput/changelog.txt diff --git a/BobPipesThroughput_0.1.1/control.lua b/BobPipesThroughput/control.lua similarity index 100% rename from BobPipesThroughput_0.1.1/control.lua rename to BobPipesThroughput/control.lua diff --git a/BobPipesThroughput_0.1.1/data.lua b/BobPipesThroughput/data.lua similarity index 100% rename from BobPipesThroughput_0.1.1/data.lua rename to BobPipesThroughput/data.lua diff --git a/BobPipesThroughput_0.1.1/info.json b/BobPipesThroughput/info.json similarity index 100% rename from BobPipesThroughput_0.1.1/info.json rename to BobPipesThroughput/info.json diff --git a/BobPipesThroughput_0.1.1/locale/en/locale.cfg b/BobPipesThroughput/locale/en/locale.cfg similarity index 100% rename from BobPipesThroughput_0.1.1/locale/en/locale.cfg rename to BobPipesThroughput/locale/en/locale.cfg diff --git a/BobPipesThroughput_0.1.1/settings.lua b/BobPipesThroughput/settings.lua similarity index 100% rename from BobPipesThroughput_0.1.1/settings.lua rename to BobPipesThroughput/settings.lua diff --git a/BobPipesThroughput_0.1.1/thumbnail.png b/BobPipesThroughput/thumbnail.png similarity index 100% rename from BobPipesThroughput_0.1.1/thumbnail.png rename to BobPipesThroughput/thumbnail.png diff --git a/BottleneckLite_1.2.8/LICENSE b/BottleneckLite/LICENSE similarity index 100% rename from BottleneckLite_1.2.8/LICENSE rename to BottleneckLite/LICENSE diff --git a/BottleneckLite_1.2.8/README.md b/BottleneckLite/README.md similarity index 100% rename from BottleneckLite_1.2.8/README.md rename to BottleneckLite/README.md diff --git a/BottleneckLite_1.2.8/changelog.txt b/BottleneckLite/changelog.txt similarity index 100% rename from BottleneckLite_1.2.8/changelog.txt rename to BottleneckLite/changelog.txt diff --git a/BottleneckLite/constants.lua b/BottleneckLite/constants.lua new file mode 100644 index 00000000..c403e56f --- /dev/null +++ b/BottleneckLite/constants.lua @@ -0,0 +1,64 @@ +local constants = {} + +constants.additional_vertical_offset = 0.1 + +constants.colors = { + off = { a = 0 }, + blue = { b = 1 }, + cyan = { g = 1, b = 1 }, + green = { g = 1 }, + orange = { r = 1, g = 0.5 }, + purple = { r = 1, b = 1 }, + red = { r = 1 }, + white = { r = 1, g = 1, b = 1 }, + yellow = { r = 1, g = 1 }, +} + +local color_settings = {} +for name in pairs(constants.colors) do + color_settings[#color_settings + 1] = name +end +constants.color_settings = color_settings + +constants.default_size = "small" + +constants.horizontal_position = 0.3 + +constants.ignored_entities = { + -- Mining Drones + ["mining-depot"] = true, + -- Space Exploration + ["se-core-miner"] = true, + ["se-rocket-launch-pad-silo"] = true, + -- Transport Drones + ["fuel-depot"] = true, + ["request-depot"] = true, + ["supply-depot"] = true, + ["buffer-depot"] = true, +} + +constants.sizes = { + small = 0.15, + medium = 0.2, + large = 0.25, + huge = 0.5, +} + +local size_settings = {} +for name in pairs(constants.sizes) do + size_settings[#size_settings + 1] = name +end +constants.size_settings = size_settings + +constants.status_settings = { + disabled = { color = "red", order = "ba" }, + full_output = { color = "yellow", order = "bb" }, + idle = { color = "red", order = "bc" }, + insufficient_input = { color = "red", order = "bd" }, + low_power = { color = "yellow", order = "be" }, + no_minable_resources = { color = "red", order = "bf" }, + no_power = { color = "red", order = "bg" }, + working = { color = "green", order = "bh" }, +} + +return constants diff --git a/BottleneckLite_1.2.8/crowdin.yml b/BottleneckLite/crowdin.yml similarity index 100% rename from BottleneckLite_1.2.8/crowdin.yml rename to BottleneckLite/crowdin.yml diff --git a/BottleneckLite/data-final-fixes.lua b/BottleneckLite/data-final-fixes.lua new file mode 100644 index 00000000..aaf2aa2d --- /dev/null +++ b/BottleneckLite/data-final-fixes.lua @@ -0,0 +1,130 @@ +local bounding_box = require("__flib__.bounding-box") + +if not settings.startup["bnl-enable"].value then + return +end + +local additional_vertical_offset = 0.1 + +local horizontal_position = 0.3 + +local ignored_entities = { + -- Mining Drones + ["mining-depot"] = true, + -- Space Exploration + ["se-core-miner"] = true, + ["se-rocket-launch-pad-silo"] = true, + -- Transport Drones + ["buffer-depot"] = true, + ["fluid-depot"] = true, + ["fuel-depot"] = true, + ["request-depot"] = true, + ["supply-depot"] = true, +} + +local sizes = { + small = 0.15, + medium = 0.2, + large = 0.25, + huge = 0.5, +} + +--- @type table +local status_colors = {} +for name, spec in pairs(settings.startup) do + local key = string.match(name, "^bnl%-color%-(.-)$") + if key then + status_colors[key] = util.premul_color(spec.value --[[@as Color]]) + end +end + +local enable_glow = settings.startup["bnl-glow"].value --[[@as boolean]] +local size = sizes[settings.startup["bnl-indicator-size"].value] --[[@as double]] + +local function build_indicator(prototype) + local box = bounding_box.ensure_explicit(prototype.selection_box or prototype.collision_box or prototype.drawing_box) + --- @type table + local positions = { + north_south = {}, + east_west = {}, + } + for _, pos in pairs(positions) do + pos.x = box.left_top.x + (bounding_box.width(box) * horizontal_position) + pos.y = box.right_bottom.y - size - additional_vertical_offset + box = bounding_box.rotate(box) + end + + return { + always_draw = true, + apply_tint = "status", + draw_as_light = enable_glow, + draw_as_sprite = true, + render_layer = "light-effect", + animation = { + filename = "__BottleneckLite__/graphics/solid.png", + flags = { "icon" }, + size = 64, + scale = size, + line_length = 1, + frame_count = 1, + animation_speed = 1, + direction_count = 1, + }, + north_position = positions.north_south, + east_position = positions.east_west, + south_position = positions.north_south, + west_position = positions.east_west, + } +end + +local function add_to_wv(prototype, wv_root) + wv_root = wv_root or prototype + + wv_root.status_colors = status_colors + + local wv = wv_root.working_visualisations + if not wv then + wv = {} + wv_root.working_visualisations = wv + end + + wv[#wv + 1] = build_indicator(prototype) +end + +for _, type in pairs({ "assembling-machine", "furnace", "rocket-silo" }) do + for name, crafter in pairs(data.raw[type]) do + if not ignored_entities[name] then + if crafter.bottleneck_ignore then + crafter.bottleneck_ignore = nil + else + add_to_wv(crafter) + end + end + end +end + +if not settings.startup["bnl-include-mining-drills"].value then + return +end + +for name, drill in pairs(data.raw["mining-drill"]) do + if not ignored_entities[name] then + if drill.bottleneck_ignore then + drill.bottleneck_ignore = nil + else + drill.status_colors = status_colors + + if not drill.graphics_set then + drill.graphics_set = { + animation = drill.animations, + } + end + + add_to_wv(drill, drill.graphics_set) + + if drill.wet_mining_graphics_set then + add_to_wv(drill, drill.wet_mining_graphics_set) + end + end + end +end diff --git a/BottleneckLite/graphics/solid.png b/BottleneckLite/graphics/solid.png new file mode 100644 index 00000000..2cbc9406 Binary files /dev/null and b/BottleneckLite/graphics/solid.png differ diff --git a/BottleneckLite_1.2.8/graphics/solid.svg b/BottleneckLite/graphics/solid.svg similarity index 100% rename from BottleneckLite_1.2.8/graphics/solid.svg rename to BottleneckLite/graphics/solid.svg diff --git a/BottleneckLite_1.2.8/graphics/solid1.png b/BottleneckLite/graphics/solid1.png similarity index 100% rename from BottleneckLite_1.2.8/graphics/solid1.png rename to BottleneckLite/graphics/solid1.png diff --git a/BottleneckLite_1.2.8/info.json b/BottleneckLite/info.json similarity index 100% rename from BottleneckLite_1.2.8/info.json rename to BottleneckLite/info.json diff --git a/BottleneckLite_1.2.8/locale/en/BottleneckLite.cfg b/BottleneckLite/locale/en/BottleneckLite.cfg similarity index 100% rename from BottleneckLite_1.2.8/locale/en/BottleneckLite.cfg rename to BottleneckLite/locale/en/BottleneckLite.cfg diff --git a/BottleneckLite_1.2.8/locale/ru/BottleneckLite.cfg b/BottleneckLite/locale/ru/BottleneckLite.cfg similarity index 100% rename from BottleneckLite_1.2.8/locale/ru/BottleneckLite.cfg rename to BottleneckLite/locale/ru/BottleneckLite.cfg diff --git a/BottleneckLite_1.2.8/settings.lua b/BottleneckLite/settings.lua similarity index 100% rename from BottleneckLite_1.2.8/settings.lua rename to BottleneckLite/settings.lua diff --git a/BottleneckLite_1.2.8/thumbnail.png b/BottleneckLite/thumbnail.png similarity index 100% rename from BottleneckLite_1.2.8/thumbnail.png rename to BottleneckLite/thumbnail.png diff --git a/BottleneckLite_1.2.8/data-final-fixes.lua b/BottleneckLite_1.2.8/data-final-fixes.lua deleted file mode 100644 index 2101683e..00000000 --- a/BottleneckLite_1.2.8/data-final-fixes.lua +++ /dev/null @@ -1,130 +0,0 @@ -local bounding_box = require("__flib__.bounding-box") - -if not settings.startup["bnl-enable"].value then - return -end - -local additional_vertical_offset = 0.1 - -local horizontal_position = 0.3 - -local ignored_entities = { - -- Mining Drones - ["mining-depot"] = true, - -- Space Exploration - ["se-core-miner"] = true, - ["se-rocket-launch-pad-silo"] = true, - -- Transport Drones - ["buffer-depot"] = true, - ["fluid-depot"] = true, - ["fuel-depot"] = true, - ["request-depot"] = true, - ["supply-depot"] = true, -} - -local sizes = { - small = 0.15, - medium = 0.2, - large = 0.25, - huge = 0.5, -} - ---- @type table -local status_colors = {} -for name, spec in pairs(settings.startup) do - local key = string.match(name, "^bnl%-color%-(.-)$") - if key then - status_colors[key] = util.premul_color(spec.value --[[@as Color]]) - end -end - -local enable_glow = settings.startup["bnl-glow"].value --[[@as boolean]] -local size = sizes[settings.startup["bnl-indicator-size"].value] --[[@as double]] - -local function build_indicator(prototype) - local box = bounding_box.ensure_explicit(prototype.selection_box or prototype.collision_box or prototype.drawing_box) - --- @type table - local positions = { - north_south = {}, - east_west = {}, - } - for _, pos in pairs(positions) do - pos.x = box.left_top.x + (bounding_box.width(box) * horizontal_position) - pos.y = box.right_bottom.y - size - additional_vertical_offset - box = bounding_box.rotate(box) - end - - return { - always_draw = true, - apply_tint = "status", - draw_as_light = enable_glow, - draw_as_sprite = true, - render_layer = "light-effect", - animation = { - filename = "__BottleneckLite__/graphics/solid.png", - flags = { "icon" }, - size = 64, - scale = size, - line_length = 1, - frame_count = 1, - animation_speed = 1, - direction_count = 1, - }, - north_position = positions.north_south, - east_position = positions.east_west, - south_position = positions.north_south, - west_position = positions.east_west, - } -end - -local function add_to_wv(prototype, wv_root) - wv_root = wv_root or prototype - - wv_root.status_colors = status_colors - - local wv = wv_root.working_visualisations - if not wv then - wv = {} - wv_root.working_visualisations = wv - end - - wv[#wv + 1] = build_indicator(prototype) -end - -for _, type in pairs({ "assembling-machine", "furnace", "rocket-silo" }) do - for name, crafter in pairs(data.raw[type]) do - if not ignored_entities[name] then - if crafter.bottleneck_ignore then - crafter.bottleneck_ignore = nil - else - add_to_wv(crafter) - end - end - end -end - -if not settings.startup["bnl-include-mining-drills"].value then - return -end - -for name, drill in pairs(data.raw["mining-drill"]) do - if not ignored_entities[name] then - if drill.bottleneck_ignore then - drill.bottleneck_ignore = nil - else - drill.status_colors = status_colors - - if not drill.graphics_set then - drill.graphics_set = { - animation = drill.animations, - } - end - - add_to_wv(drill, drill.graphics_set) - - if drill.wet_mining_graphics_set then - add_to_wv(drill, drill.wet_mining_graphics_set) - end - end - end -end diff --git a/BottleneckLite_1.2.8/graphics/solid.png b/BottleneckLite_1.2.8/graphics/solid.png deleted file mode 100644 index 354666fe..00000000 Binary files a/BottleneckLite_1.2.8/graphics/solid.png and /dev/null differ diff --git a/CW-carbon-capture-reforged_9.1.3/changelog.txt b/CW-carbon-capture-reforged/changelog.txt similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/changelog.txt rename to CW-carbon-capture-reforged/changelog.txt diff --git a/CW-carbon-capture-reforged_9.1.3/control.lua b/CW-carbon-capture-reforged/control.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/control.lua rename to CW-carbon-capture-reforged/control.lua diff --git a/CW-carbon-capture-reforged_9.1.3/data.lua b/CW-carbon-capture-reforged/data.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/data.lua rename to CW-carbon-capture-reforged/data.lua diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-1.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-1.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-1.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-1.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-2.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-2.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-2.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-2.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-3.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-3.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-3.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-3.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-4.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-4.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-4.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-4.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-5.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-5.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-5.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-5.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-6.png b/CW-carbon-capture-reforged/graphics/entity/air-filter-machine-6.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/entity/air-filter-machine-6.png rename to CW-carbon-capture-reforged/graphics/entity/air-filter-machine-6.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-32.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-32.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-32.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-32.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-2.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-2.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-2.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-2.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-3.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-3.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-3.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-3.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-4.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-4.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning-4.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning-4.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-cleaning.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-cleaning.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-1.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-1.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-1.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-1.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-2.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-2.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-2.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-2.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-3.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-3.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-3.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-3.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-4.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-4.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-4.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-4.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-5.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-5.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-5.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-5.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-6.png b/CW-carbon-capture-reforged/graphics/icons/air-filter-machine-6.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter-machine-6.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter-machine-6.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter.png b/CW-carbon-capture-reforged/graphics/icons/air-filter.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/air-filter.png rename to CW-carbon-capture-reforged/graphics/icons/air-filter.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/empty-air-filter.png b/CW-carbon-capture-reforged/graphics/icons/empty-air-filter.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/empty-air-filter.png rename to CW-carbon-capture-reforged/graphics/icons/empty-air-filter.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/filter-air.png b/CW-carbon-capture-reforged/graphics/icons/filter-air.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/filter-air.png rename to CW-carbon-capture-reforged/graphics/icons/filter-air.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/pellets.png b/CW-carbon-capture-reforged/graphics/icons/pellets.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/pellets.png rename to CW-carbon-capture-reforged/graphics/icons/pellets.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/sludge-treatment.png b/CW-carbon-capture-reforged/graphics/icons/sludge-treatment.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/sludge-treatment.png rename to CW-carbon-capture-reforged/graphics/icons/sludge-treatment.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/sludge.png b/CW-carbon-capture-reforged/graphics/icons/sludge.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/sludge.png rename to CW-carbon-capture-reforged/graphics/icons/sludge.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/icons/used-air-filter.png b/CW-carbon-capture-reforged/graphics/icons/used-air-filter.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/icons/used-air-filter.png rename to CW-carbon-capture-reforged/graphics/icons/used-air-filter.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-1.png b/CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-1.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-1.png rename to CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-1.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-2.png b/CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-2.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-2.png rename to CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-2.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-3.png b/CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-3.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-3.png rename to CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-3.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-4.png b/CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-4.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filter-cleaning-4.png rename to CW-carbon-capture-reforged/graphics/technology/air-filter-cleaning-4.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-1.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-1.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-1.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-1.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-2.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-2.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-2.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-2.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-3.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-3.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-3.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-3.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-4.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-4.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-4.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-4.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-5.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-5.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-5.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-5.png diff --git a/CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-6.png b/CW-carbon-capture-reforged/graphics/technology/air-filtering-6.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/graphics/technology/air-filtering-6.png rename to CW-carbon-capture-reforged/graphics/technology/air-filtering-6.png diff --git a/CW-carbon-capture-reforged_9.1.3/info.json b/CW-carbon-capture-reforged/info.json similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/info.json rename to CW-carbon-capture-reforged/info.json diff --git a/CW-carbon-capture-reforged_9.1.3/locale/en/air-filtering.cfg b/CW-carbon-capture-reforged/locale/en/air-filtering.cfg similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/locale/en/air-filtering.cfg rename to CW-carbon-capture-reforged/locale/en/air-filtering.cfg diff --git a/CW-carbon-capture-reforged_9.1.3/locale/ru/air-filtering.cfg b/CW-carbon-capture-reforged/locale/ru/air-filtering.cfg similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/locale/ru/air-filtering.cfg rename to CW-carbon-capture-reforged/locale/ru/air-filtering.cfg diff --git a/CW-carbon-capture-reforged_9.1.3/prototypes/entity.lua b/CW-carbon-capture-reforged/prototypes/entity.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/prototypes/entity.lua rename to CW-carbon-capture-reforged/prototypes/entity.lua diff --git a/CW-carbon-capture-reforged_9.1.3/prototypes/item.lua b/CW-carbon-capture-reforged/prototypes/item.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/prototypes/item.lua rename to CW-carbon-capture-reforged/prototypes/item.lua diff --git a/CW-carbon-capture-reforged_9.1.3/prototypes/recipe-updates.lua b/CW-carbon-capture-reforged/prototypes/recipe-updates.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/prototypes/recipe-updates.lua rename to CW-carbon-capture-reforged/prototypes/recipe-updates.lua diff --git a/CW-carbon-capture-reforged_9.1.3/prototypes/recipe.lua b/CW-carbon-capture-reforged/prototypes/recipe.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/prototypes/recipe.lua rename to CW-carbon-capture-reforged/prototypes/recipe.lua diff --git a/CW-carbon-capture-reforged_9.1.3/prototypes/technology.lua b/CW-carbon-capture-reforged/prototypes/technology.lua similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/prototypes/technology.lua rename to CW-carbon-capture-reforged/prototypes/technology.lua diff --git a/CW-carbon-capture-reforged_9.1.3/thumbnail.png b/CW-carbon-capture-reforged/thumbnail.png similarity index 100% rename from CW-carbon-capture-reforged_9.1.3/thumbnail.png rename to CW-carbon-capture-reforged/thumbnail.png diff --git a/Clowns-AngelBob-Nuclear/changelog.txt b/Clowns-AngelBob-Nuclear/changelog.txt new file mode 100644 index 00000000..5c659e44 --- /dev/null +++ b/Clowns-AngelBob-Nuclear/changelog.txt @@ -0,0 +1,128 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.19 +Date: 2021-08-10 + Features: + - Small tweaks + - Property clean-up +--------------------------------------------------------------------------------------------------- +Version: 1.1.18 +Date: 2021-06-14 + Features: + - corrected a recipe oversight + - More angels industries changes + - Added a thorium ore processing chain +--------------------------------------------------------------------------------------------------- +Version: 1.1.17 + Features: + - Substantial angels industries integration + - moved lead plate from an ingredient to a result on thorium reprocessing + - various fixes, added a new reprocessing variant for more flexibility +--------------------------------------------------------------------------------------------------- +Version: 1.1.16 +Date: 2020-11-24 + Changes: + - Updated to version 1.1 + - Fixed that atomic bomb was not researchable + - Icon size patches for vanilla icon changes +--------------------------------------------------------------------------------------------------- +Version: 1.1.15 + Features: + - Reduced the mod dependancies to not require bobs + - Started looking at angels industries integration +--------------------------------------------------------------------------------------------------- +Version: 1.1.14 + Bugfixes: + - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer + Features: + - Prepared for updates to angelsindustries nuclear program +--------------------------------------------------------------------------------------------------- +Version: 1.1.13 + Bugfixes: + - Integrated the centrifuge removal script from clowns processing +--------------------------------------------------------------------------------------------------- +Version: 1.1.12 + Features: + - Removed redundant settings, integrated thorium setting based on if it exists. + - Made advanced nuclear fuels obtainable without the existence of thorium. + - Various small fixes and conditional category moves. +--------------------------------------------------------------------------------------------------- +Version: 1.1.11 + Features: + - Updated to 0.18 + - Added descriptions for the fuels to help differentiate thermal vs motive fuels +--------------------------------------------------------------------------------------------------- +Version: 1.1.10 + Bugfixes: + - Fixed a bug relating to the recipe "advanced nuclear processing" being removed. +--------------------------------------------------------------------------------------------------- +Version: 1.1.09 + Bugfixes: + - Fixed that i "forgot" to remove kovarex enrichment from the bobingabout enrichment tech pre-req +--------------------------------------------------------------------------------------------------- +Version: 1.1.08 + Bugfixes: + - Replaced electronics with RCU's for the two nuke recipes (to be consistent with vanilla) + Features: + - Added a setting to revert the following changes: + Balance: + - Added productivity allowance on the mixed oxide recipes (the plutonium sink recipes) + - Changed the lead return to be lead-oxide + - Set levels of return to be lower than the feed + Has 4 configurations: full AB, OR(modules, assembly), bare minimum mods + - Also compensated for lead coiling (pez's smelting extended mod) +--------------------------------------------------------------------------------------------------- +Version: 1.1.07 + Features: + - Integrated tech tree and recipes to better match Bobs addition of advanced nuclear options + - Fixed Changelog format + - Removed (now) duplicate recipes + - Added water void recipe for radioactive waste water + Balance: + - Lowered the return count of Thorium in the reprocessing recipes (it is cheap anyway) + - Lowered the return of Plutonium in the reprocessing recipes (bob added a plutonium synth method) + - Further comments would be appreciated on balance, particularly around this area are welcome... +--------------------------------------------------------------------------------------------------- +Version: 1.1.06 + Features: + - Added glow to centrifuge recipes + - Thanks to bobingabout for pointing me in the right direction +--------------------------------------------------------------------------------------------------- +Version: 1.1.05 + Bugfixes: + - More tech tree fixes + - Fixed that kovarex was still active + - Linked atomic bomb tech to enrichment techs + Balance: + - Added a new recipe to nuclear fuel processing to give more flexibility (hopefully) +--------------------------------------------------------------------------------------------------- +Version: 1.1.04 + Bugfixes: + - Fixed tech tree to link uranium processing to the tree correctly + - Removed thorium from the regular reprocessing tech's, since they have their own +--------------------------------------------------------------------------------------------------- +Version: 1.1.03 + Bugfixes: + - Fixed naming convention on tech (0.17.23 change) + Balance: + - Fixed thorium positive loop + - Changed advanced thorium reprocessing to be 5x to match other processing systems +--------------------------------------------------------------------------------------------------- +Version: 1.1.02 + Features: + - Updated for 0.17 +--------------------------------------------------------------------------------------------------- +Version: 1.1.01 + Bugfixes: + - Rebalanced Nuclear Fuel production chain (x3 for exotics) +--------------------------------------------------------------------------------------------------- +Version: 1.1.00 + Features: + - Updated locale +--------------------------------------------------------------------------------------------------- +Version: 1.0.01 + Bugfixes: + - Who knows +--------------------------------------------------------------------------------------------------- +Version: 1.0.00 + Features: + - Initial release. diff --git a/Clowns-AngelBob-Nuclear_1.1.21/data-updates.lua b/Clowns-AngelBob-Nuclear/data-updates.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/data-updates.lua rename to Clowns-AngelBob-Nuclear/data-updates.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/data.lua b/Clowns-AngelBob-Nuclear/data.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/data.lua rename to Clowns-AngelBob-Nuclear/data.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/Thorium Icons.txt b/Clowns-AngelBob-Nuclear/graphics/icons/Thorium Icons.txt similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/Thorium Icons.txt rename to Clowns-AngelBob-Nuclear/graphics/icons/Thorium Icons.txt diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/angels-ore-mix-chrome-sorting.png b/Clowns-AngelBob-Nuclear/graphics/icons/angels-ore-mix-chrome-sorting.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/angels-ore-mix-chrome-sorting.png rename to Clowns-AngelBob-Nuclear/graphics/icons/angels-ore-mix-chrome-sorting.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/angels-ore6-crushed-sorting.png b/Clowns-AngelBob-Nuclear/graphics/icons/angels-ore6-crushed-sorting.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/angels-ore6-crushed-sorting.png rename to Clowns-AngelBob-Nuclear/graphics/icons/angels-ore6-crushed-sorting.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/artillery-shell-nuclear.png b/Clowns-AngelBob-Nuclear/graphics/icons/artillery-shell-nuclear.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/artillery-shell-nuclear.png rename to Clowns-AngelBob-Nuclear/graphics/icons/artillery-shell-nuclear.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/artillery-shell.png b/Clowns-AngelBob-Nuclear/graphics/icons/artillery-shell.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/artillery-shell.png rename to Clowns-AngelBob-Nuclear/graphics/icons/artillery-shell.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/atomic-bomb.png b/Clowns-AngelBob-Nuclear/graphics/icons/atomic-bomb.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/atomic-bomb.png rename to Clowns-AngelBob-Nuclear/graphics/icons/atomic-bomb.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/blank.png b/Clowns-AngelBob-Nuclear/graphics/icons/blank.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/blank.png rename to Clowns-AngelBob-Nuclear/graphics/icons/blank.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/caesium-137.png b/Clowns-AngelBob-Nuclear/graphics/icons/caesium-137.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/caesium-137.png rename to Clowns-AngelBob-Nuclear/graphics/icons/caesium-137.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/cobalt-60.png b/Clowns-AngelBob-Nuclear/graphics/icons/cobalt-60.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/cobalt-60.png rename to Clowns-AngelBob-Nuclear/graphics/icons/cobalt-60.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/critical-mass.png b/Clowns-AngelBob-Nuclear/graphics/icons/critical-mass.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/critical-mass.png rename to Clowns-AngelBob-Nuclear/graphics/icons/critical-mass.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/gas-chlorine.png b/Clowns-AngelBob-Nuclear/graphics/icons/gas-chlorine.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/gas-chlorine.png rename to Clowns-AngelBob-Nuclear/graphics/icons/gas-chlorine.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/hypernuclear-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/hypernuclear-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/hypernuclear-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/hypernuclear-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel-mixed-oxide.png b/Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel-mixed-oxide.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel-mixed-oxide.png rename to Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel-mixed-oxide.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel-reprocessing.png b/Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel-reprocessing.png rename to Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel-reprocessing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/nuclear-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/nuclear-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/ore-5.png b/Clowns-AngelBob-Nuclear/graphics/icons/ore-5.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/ore-5.png rename to Clowns-AngelBob-Nuclear/graphics/icons/ore-5.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/plutonium-239.png b/Clowns-AngelBob-Nuclear/graphics/icons/plutonium-239.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/plutonium-239.png rename to Clowns-AngelBob-Nuclear/graphics/icons/plutonium-239.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/polonium-210.png b/Clowns-AngelBob-Nuclear/graphics/icons/polonium-210.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/polonium-210.png rename to Clowns-AngelBob-Nuclear/graphics/icons/polonium-210.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/protactinium-231.png b/Clowns-AngelBob-Nuclear/graphics/icons/protactinium-231.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/protactinium-231.png rename to Clowns-AngelBob-Nuclear/graphics/icons/protactinium-231.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/radiothermal-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/radiothermal-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/radiothermal-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/radiothermal-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/sorting.png b/Clowns-AngelBob-Nuclear/graphics/icons/sorting.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/sorting.png rename to Clowns-AngelBob-Nuclear/graphics/icons/sorting.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/strontium-90-backup.png b/Clowns-AngelBob-Nuclear/graphics/icons/strontium-90-backup.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/strontium-90-backup.png rename to Clowns-AngelBob-Nuclear/graphics/icons/strontium-90-backup.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/strontium-90.png b/Clowns-AngelBob-Nuclear/graphics/icons/strontium-90.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/strontium-90.png rename to Clowns-AngelBob-Nuclear/graphics/icons/strontium-90.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/superradiothermal-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/superradiothermal-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/superradiothermal-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/superradiothermal-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thermonuclear-bomb.png b/Clowns-AngelBob-Nuclear/graphics/icons/thermonuclear-bomb.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thermonuclear-bomb.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thermonuclear-bomb.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-232.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-232.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-232.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-232.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-fuel-cell.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-fuel-cell.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-fuel-cell.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-fuel-cell.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel-reprocessing.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel-reprocessing.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel-reprocessing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-nuclear-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-nuclear-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-processing.png b/Clowns-AngelBob-Nuclear/graphics/icons/thorium-processing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/thorium-processing.png rename to Clowns-AngelBob-Nuclear/graphics/icons/thorium-processing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/tinting for exotics.txt b/Clowns-AngelBob-Nuclear/graphics/icons/tinting for exotics.txt similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/tinting for exotics.txt rename to Clowns-AngelBob-Nuclear/graphics/icons/tinting for exotics.txt diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/turbonuclear-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/turbonuclear-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/turbonuclear-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/turbonuclear-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/ultraradiothermal-fuel.png b/Clowns-AngelBob-Nuclear/graphics/icons/ultraradiothermal-fuel.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/ultraradiothermal-fuel.png rename to Clowns-AngelBob-Nuclear/graphics/icons/ultraradiothermal-fuel.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-235.png b/Clowns-AngelBob-Nuclear/graphics/icons/uranium-235.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-235.png rename to Clowns-AngelBob-Nuclear/graphics/icons/uranium-235.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-238.png b/Clowns-AngelBob-Nuclear/graphics/icons/uranium-238.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-238.png rename to Clowns-AngelBob-Nuclear/graphics/icons/uranium-238.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-fuel-cell.png b/Clowns-AngelBob-Nuclear/graphics/icons/uranium-fuel-cell.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-fuel-cell.png rename to Clowns-AngelBob-Nuclear/graphics/icons/uranium-fuel-cell.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-processing.png b/Clowns-AngelBob-Nuclear/graphics/icons/uranium-processing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/uranium-processing.png rename to Clowns-AngelBob-Nuclear/graphics/icons/uranium-processing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/used-up-thorium-fuel-cell.png b/Clowns-AngelBob-Nuclear/graphics/icons/used-up-thorium-fuel-cell.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/used-up-thorium-fuel-cell.png rename to Clowns-AngelBob-Nuclear/graphics/icons/used-up-thorium-fuel-cell.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/used-up-uranium-fuel-cell.png b/Clowns-AngelBob-Nuclear/graphics/icons/used-up-uranium-fuel-cell.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/used-up-uranium-fuel-cell.png rename to Clowns-AngelBob-Nuclear/graphics/icons/used-up-uranium-fuel-cell.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/water-radioactive-waste-purification.png b/Clowns-AngelBob-Nuclear/graphics/icons/water-radioactive-waste-purification.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/water-radioactive-waste-purification.png rename to Clowns-AngelBob-Nuclear/graphics/icons/water-radioactive-waste-purification.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/water-radioactive-waste.png b/Clowns-AngelBob-Nuclear/graphics/icons/water-radioactive-waste.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/water-radioactive-waste.png rename to Clowns-AngelBob-Nuclear/graphics/icons/water-radioactive-waste.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/zinc-65.png b/Clowns-AngelBob-Nuclear/graphics/icons/zinc-65.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/icons/zinc-65.png rename to Clowns-AngelBob-Nuclear/graphics/icons/zinc-65.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/mixed-oxide.png b/Clowns-AngelBob-Nuclear/graphics/technology/mixed-oxide.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/mixed-oxide.png rename to Clowns-AngelBob-Nuclear/graphics/technology/mixed-oxide.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thermonuclear-bomb.png b/Clowns-AngelBob-Nuclear/graphics/technology/thermonuclear-bomb.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thermonuclear-bomb.png rename to Clowns-AngelBob-Nuclear/graphics/technology/thermonuclear-bomb.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-nuclear-fuel-reprocessing.png b/Clowns-AngelBob-Nuclear/graphics/technology/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-nuclear-fuel-reprocessing.png rename to Clowns-AngelBob-Nuclear/graphics/technology/thorium-nuclear-fuel-reprocessing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-nuclear-power.png b/Clowns-AngelBob-Nuclear/graphics/technology/thorium-nuclear-power.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-nuclear-power.png rename to Clowns-AngelBob-Nuclear/graphics/technology/thorium-nuclear-power.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-processing.png b/Clowns-AngelBob-Nuclear/graphics/technology/thorium-processing.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/graphics/technology/thorium-processing.png rename to Clowns-AngelBob-Nuclear/graphics/technology/thorium-processing.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/info.json b/Clowns-AngelBob-Nuclear/info.json similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/info.json rename to Clowns-AngelBob-Nuclear/info.json diff --git a/Clowns-AngelBob-Nuclear_1.1.21/locale/en/en.cfg b/Clowns-AngelBob-Nuclear/locale/en/en.cfg similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/locale/en/en.cfg rename to Clowns-AngelBob-Nuclear/locale/en/en.cfg diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/fuels.lua b/Clowns-AngelBob-Nuclear/prototypes/items/fuels.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/fuels.lua rename to Clowns-AngelBob-Nuclear/prototypes/items/fuels.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/isotopes.lua b/Clowns-AngelBob-Nuclear/prototypes/items/isotopes.lua similarity index 95% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/isotopes.lua rename to Clowns-AngelBob-Nuclear/prototypes/items/isotopes.lua index ef7a144b..2cde2b1d 100644 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/isotopes.lua +++ b/Clowns-AngelBob-Nuclear/prototypes/items/isotopes.lua @@ -1,5 +1,4 @@ -if angelsmods.trigger.ores["thorium"] == true then - data:extend( +data:extend( { { type = "item", @@ -9,12 +8,7 @@ if angelsmods.trigger.ores["thorium"] == true then subgroup = "clowns-thorium", order = "b", stack_size = 100 - }}) -end - - -data:extend( -{ + }, { type = "item", name = "polonium-210", diff --git a/Clowns-AngelBob-Nuclear/prototypes/items/thorium.lua b/Clowns-AngelBob-Nuclear/prototypes/items/thorium.lua new file mode 100644 index 00000000..cb2c2a6e --- /dev/null +++ b/Clowns-AngelBob-Nuclear/prototypes/items/thorium.lua @@ -0,0 +1,62 @@ +if not (mods["bobores"] or mods["bobplates"] or mods["angels-industries"]) and data.raw.item["thorium-ore"] then + data:extend( + { -- thorium fuel cell + { + type = "item", + name = "thorium-fuel-cell", + icon = "__Clowns-AngelBob-Nuclear__/graphics/icons/thorium-fuel-cell.png", + icon_size = 32, + subgroup = "clowns-nuclear-cells", + order = "a-b", + fuel_category = "nuclear", + burnt_result = "used-up-thorium-fuel-cell", + fuel_value = "12GJ", + stack_size = 50 + }, + { + type = "item", + name = "used-up-thorium-fuel-cell", + icon = "__Clowns-AngelBob-Nuclear__/graphics/icons/used-up-thorium-fuel-cell.png", + icon_size = 32, + subgroup = "clowns-nuclear-cells", + order = "b-b", + stack_size = 50 + }, + } + ) +end +if data.raw.item["thorium-fuel-cell"] then + data:extend( + { + -- thorium ore processing items + { + type = "item", + name = "thorium-salt", --fluoride (if angels petrochem, chloride if not) + icons = {{icon="__Clowns-AngelBob-Nuclear__/graphics/icons/ore-5.png",tint={r = 0.8, g = 0.2, b = 0.2, a = 0.6},icon_size=32}}, + subgroup = "clowns-thorium", + order = "a-b", + stack_size = 50 + }, + { + type = "fluid", + name = "thorium-solution", + icons = angelsmods.functions.create_viscous_liquid_fluid_icon(nil, { {r = 0.8, g = 0.2, b = 0.2, a = 0.6}, nil, {r = 0.8, g = 0.2, b = 0.2, a = 0.6} }), + default_temperature = 550, + heat_capacity = "0.1KJ", + base_color = {r = 0.92, g = 0.72, b = 0.09}, + flow_color = {r = 0, g = 1, b = 0.5}, + max_temperature = 1200, + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + subgroup = "clowns-thorium", + order = "a-a", + }, + { + type = "item-subgroup", + name = "clowns-thorium", + group = "angels-smelting", + order = "pb", + }, + } + ) +end \ No newline at end of file diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/water-treatment.lua b/Clowns-AngelBob-Nuclear/prototypes/items/water-treatment.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/water-treatment.lua rename to Clowns-AngelBob-Nuclear/prototypes/items/water-treatment.lua diff --git a/Clowns-AngelBob-Nuclear/prototypes/more-overrides.lua b/Clowns-AngelBob-Nuclear/prototypes/more-overrides.lua new file mode 100644 index 00000000..11e6f552 --- /dev/null +++ b/Clowns-AngelBob-Nuclear/prototypes/more-overrides.lua @@ -0,0 +1,156 @@ +local OV = angelsmods.functions.OV +--set nuclear cell plate +local n_plate="iron-plate" +if mods["bobplates"] then + n_plate="lead-plate" +elseif mods["angels-industries"] and angelsmods.industries.overhaul then + n_plate="angels-plate-lead" --should only activate if not with bobs +end +--hide advanced uranium processing, as it is integrated into the normal cycle +data.raw.recipe["advanced-uranium-processing"].hidden=true + +--Add ingredients to thermonuclear bomb +data.raw["recipe"]["thermonuclear-bomb"].ingredients = {{"rocket-control-unit", 200}} +--modules +if mods["bobmodules"] then + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"speed-module-6", 3}) + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"productivity-module-6", 3}) + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"effectivity-module-6", 3}) +else + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"speed-module-3", 3}) + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"productivity-module-3", 3}) + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"effectivity-module-3", 3}) +end +--fusion cores +if data.raw.item["fusion-reactor-equipment-2"] then + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"fusion-reactor-equipment-2", 1}) +else + table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"fusion-reactor-equipment", 1}) +end +--------------------------------------- +-- ANGELS INDUSTRIES NUCLEAR UPDATES -- +--------------------------------------- +--something about replacing angels deuterium bomb result with the thermonuke etc... +if mods["angelsindustries"] and angelsmods.industries.overhaul then + --fix recipes + clowns.functions.replace_ing("angels-uranium-fuel-cell","iron-plate",n_plate,"ing") + clowns.functions.replace_ing("advanced-thorium-nuclear-fuel-reprocessing|b","used-up-thorium-fuel-cell","used-up-angels-thorium-fuel-cell","ing") + clowns.functions.replace_ing("advanced-thorium-nuclear-fuel-reprocessing","used-up-thorium-fuel-cell","used-up-AMOX-cell","ing") + clowns.functions.replace_ing("thorium-nuclear-fuel-reprocessing","used-up-thorium-fuel-cell","used-up-AMOX-cell","ing") + --==Hide fuel cell recipes==-- + --clowns uranium-fuel cell + OV.remove_unlock("mixed-oxide", "mixed-oxide-fuel") + OV.disable_technology("mixed-oxide-fuel") + --clowns thorium-fuel cell + OV.remove_unlock("thorium-mixed-oxide", "thorium-fuel-reprocessing") + OV.disable_technology("thorium-fuel-reprocessing") + angelsmods.functions.add_flag("used-up-thorium-fuel-cell", "hidden") + --use angels version + OV.global_replace_item("thorium-fuel-cell","angels-thorium-fuel-cell") + OV.global_replace_item("used-up-thorium-fuel-cell","used-up-angels-thorium-fuel-cell") +end + +--updates to the plutonium bomb +if data.raw.item["electronic-logic-board"] then + clowns.functions.replace_ing("plutonium-atomic-bomb","electronic-logic-board","rocket-control-unit","ing") +elseif data.raw.item["processing-unit"] then + clowns.functions.replace_ing("plutonium-atomic-bomb","processing-unit","rocket-control-unit","ing") +end +--assuming bobs reprocessing recipe is well balanced (may be clobbered by angels) +data.raw.recipe["nuclear-fuel-reprocessing"].results= +{ + {type="item", name="plutonium-239", amount=3,probability=0.1}, + {type="item", name="uranium-238", amount=3}, +} +--update nuclear fuel result metal +clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item", name=n_plate, amount=5},"res") +--table.insert(data.raw.recipe["nuclear-fuel-reprocessing"].results, {type="item", name=n_plate, amount=5}) + +--lead replacement mixing settings +if settings.startup["reprocessing-overhaul"].value and data.raw.item["lead-oxide"] then --check setting and that the oxide exists + local rec_chance= 1 + if data.raw.recipe["angels-roll-lead-converting"] then -- assuming full modules, assembly and coils + rec_chance= 0.215 + elseif mods["bobmodules"] and mods["bobassembly"] then + rec_chance= 0.4 + elseif mods["bobmodules"] and not mods["bobassembly"] then -- im sure someone is crazy enough... + rec_chance= 0.52 -- balanced based on pure prod MK8 modules and vanilla MK3 AM + elseif not mods["bobmodules"] and mods["bobassembly"] then -- highly possible, especially with space-exploration, not sure how to account for earendels modules yet + rec_chance= 1.28 -- balanced based on vanilla modules in bobs MK6 AM + else -- bare minimum mods (no modules, no assembly) + rec_chance= 1.45 -- balanced based on vanilla modules and vanilla MK3 AM + end + --uranium updates + clowns.functions.remove_res("nuclear-fuel-reprocessing",n_plate,"res") + clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + clowns.functions.add_to_table("advanced-nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + --table.insert(data.raw.recipe["nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + --table.insert(data.raw.recipe["advanced-nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + --thorium updates + if data.raw.item["thorium-ore"] then + angelsmods.functions.allow_productivity("mixed-oxide") + angelsmods.functions.allow_productivity("thorium-mixed-oxide") + clowns.functions.remove_res("thorium-fuel-reprocessing",n_plate,"res") + if data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing"] then + clowns.functions.add_to_table("advanced-thorium-nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + clowns.functions.add_to_table("advanced-thorium-nuclear-fuel-reprocessing|b",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + --table.insert(data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + --table.insert(data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing|b"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + end + if data.raw.recipe["thorium-fuel-reprocessing"] then + clowns.functions.add_to_table("thorium-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + --table.insert(data.raw.recipe["thorium-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + end + else + clowns.functions.add_to_table("advanced-nuclear-fuel-reprocessing-2",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") + --table.insert(data.raw.recipe["advanced-nuclear-fuel-reprocessing-2"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) + end +end +---------------------------------------- +-- ANGELS INDUSTRIES GROUPING UPDATES -- +---------------------------------------- +if mods["angelsindustries"] then + --nuclear reactor fuel group updates + data.raw["item-subgroup"]["clowns-uranium-centrifuging"].group = "angels-power" + data.raw["item-subgroup"]["clowns-uranium-centrifuging"].order = "d[clowns]-ac[centrifuging]" + data.raw["item-subgroup"]["clowns-nuclear-fuels"].group = "angels-power" + data.raw["item-subgroup"]["clowns-nuclear-fuels"].order = "d[clowns]-ab[fuels]" + data.raw["item-subgroup"]["clowns-nuclear-cells"].group = "angels-power" + data.raw["item-subgroup"]["clowns-nuclear-cells"].order = "d[clowns]-ad[cells]" + data.raw["item-subgroup"]["clowns-nuclear-isotopes"].group = "angels-power" + data.raw["item-subgroup"]["clowns-nuclear-isotopes"].order = "d[clowns]-ae[isotopes]" + + --set ingedient limit higher... + data.raw["assembling-machine"]["centrifuge"].ingredient_count=5 + if mods["bobassembly"] and settings.startup["bobmods-assembly-centrifuge"].value then + data.raw["assembling-machine"]["centrifuge-2"].ingredient_count=5 + data.raw["assembling-machine"]["centrifuge-3"].ingredient_count=5 + end + if settings.startup["MCP_enable_centrifuges"].value then + data.raw["assembling-machine"]["centrifuge-mk2"].ingredient_count=5 + data.raw["assembling-machine"]["centrifuge-mk3"].ingredient_count=5 + end + --thermal/train fuel updates + data.raw["item-subgroup"]["clowns-nuclear-fuels"].group = "angels-power" + data.raw["item-subgroup"]["clowns-nuclear-fuels"].order = "d[clowns]-ac[centrifuging]" + OV.patch_recipes({ + {name = "thorium-purification",results = {{type = "item", name = "plutonium-239", amount = 1, probability=0.15}}}, + }) +end +--fix odd interactions +data.raw.recipe["uranium-fuel-cell"].ingredients = +{ + {type="item", name=n_plate, amount=10}, --enforce lead plate + {type="item", name="35%-uranium", amount=20}, +} +data.raw.recipe["mixed-oxide"].ingredients = +{ + {type="item", name=n_plate, amount=2}, --enforce lead plate + {type="item", name="uranium-238", amount=2}, + {type="item", name="plutonium-239", amount=2} +} + +--globally override plutonium to be consistent +OV.global_replace_item("plutonium-240","plutonium-239") +--execute functions after being called +OV.execute() \ No newline at end of file diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/overrides.lua b/Clowns-AngelBob-Nuclear/prototypes/overrides.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/overrides.lua rename to Clowns-AngelBob-Nuclear/prototypes/overrides.lua diff --git a/Clowns-AngelBob-Nuclear/prototypes/recipes/clowns-centrifuging.lua b/Clowns-AngelBob-Nuclear/prototypes/recipes/clowns-centrifuging.lua new file mode 100644 index 00000000..c747793c --- /dev/null +++ b/Clowns-AngelBob-Nuclear/prototypes/recipes/clowns-centrifuging.lua @@ -0,0 +1,43 @@ +local energy = 10 + +data:extend( +{ + { + type = "recipe", + name = "clowns-centrifuging-20%-hexafluoride", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"solid-uranium-hexafluoride", 48}},--decent saving yo + icons = + { + { + icon = "__Clowns-Nuclear__/graphics/icons/1.png", + scale = 1, + shift = {0, 0}, + }, + { + icon = "__Clowns-Processing__/graphics/icons/solid-uranium-hexafluoride.png", + scale = 0.5, + shift = {-8, -8}, + }, + }, + icon_size = 32, + crafting_machine_tint = + { + primary = {r = 0, g = 1, b = 0}, + secondary = {r = 0, g = 1, b = 0}, + tertiary = {r = 0, g = 1, b = 0}, + }, + subgroup = "clowns-uranium-centrifuging", + order = "c", + main_product = "", + results= + { + {type="item", name="20%-uranium", amount=2}, + {type="item", name="uranium-238", amount=3} + }, + allow_decomposition = false + }, +} +) diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/fuels.lua b/Clowns-AngelBob-Nuclear/prototypes/recipes/fuels.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/fuels.lua rename to Clowns-AngelBob-Nuclear/prototypes/recipes/fuels.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/nuclear-reprocessing.lua b/Clowns-AngelBob-Nuclear/prototypes/recipes/nuclear-reprocessing.lua similarity index 97% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/nuclear-reprocessing.lua rename to Clowns-AngelBob-Nuclear/prototypes/recipes/nuclear-reprocessing.lua index 224fcb38..f5b1c4c9 100644 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/nuclear-reprocessing.lua +++ b/Clowns-AngelBob-Nuclear/prototypes/recipes/nuclear-reprocessing.lua @@ -73,10 +73,6 @@ data:extend( }, }) if data.raw.item["thorium-fuel-cell"] or data.raw.item["angels-thorium-fuel-cell"] then - local ucell = "used-up-thorium-fuel-cell" - if angelsmods.industries and angelsmods.industries.overhaul then - ucell = "used-up-angels-thorium-fuel-cell" - end data:extend( { { @@ -85,7 +81,7 @@ data:extend( energy_required = 50, enabled = false, category = "centrifuging", - ingredients = {{ucell, 5}}, + ingredients = {{"used-up-thorium-fuel-cell", 5}}, icons= {{icon = "__Clowns-Nuclear__/graphics/icons/thorium-nuclear-fuel-reprocessing.png", icon_size = 32,}}, icon_size=32, crafting_machine_tint = diff --git a/Clowns-AngelBob-Nuclear/prototypes/recipes/thorium.lua b/Clowns-AngelBob-Nuclear/prototypes/recipes/thorium.lua new file mode 100644 index 00000000..32156779 --- /dev/null +++ b/Clowns-AngelBob-Nuclear/prototypes/recipes/thorium.lua @@ -0,0 +1,117 @@ +if data.raw.item["thorium-fuel-cell"] then + data:extend( + { --basic thorium processing + { + type = "recipe", + name = "thorium-processing", + energy_required = 10, + enabled = false, + category = "centrifuging", + ingredients = {{"thorium-ore", 10}}, + icon = "__Clowns-Nuclear__/graphics/icons/thorium-processing.png", + icon_size = 32, + crafting_machine_tint = + { + primary = {r = 1, g = 1, b = 0}, -- thorium + secondary = {r = 1, g = 1, b = 0}, -- thorium + tertiary = {r = 1, g = 1, b = 0}, -- thorium + }, + subgroup = "clowns-nuclear-cells", + order = "z", + results = + { + {type="item", name="thorium-232", amount=1}, + } + }, + { --thorium fuel cells + type = "recipe", + name = "thorium-mixed-oxide", + energy_required = 50, + enabled = false, + ingredients = + { + {type="item", name="iron-plate", amount=2}, + {type="item", name="plutonium-239", amount=2}, + {type="item", name="thorium-232", amount=2} + }, + icon = "__Clowns-Nuclear__/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png", + icon_size = 32, + subgroup = "clowns-nuclear-cells", + order = "d-b", + results = + { + { + name = "thorium-fuel-cell", + amount = 2 + }, + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "thorium-fuel-cell", + energy_required = 10, + enabled = false, + ingredients = + { + {"iron-plate", 10}, + {"55%-uranium", 1}, + {"thorium-232", 19}, + }, + result = "thorium-fuel-cell", + result_count = 10, + }, + --thorium from ore + { + type = "recipe", + name = "thorium-ore-processing", + category = "liquifying", + energy_required = 30, + enabled = false, + ingredients = { + {"thorium-ore",10}, + {type="fluid",name="liquid-hydrofluoric-acid",amount=100} + }, + results = { + {type="fluid",name="thorium-solution",amount=13}, + {type="fluid",name="steam", amount=90, temperature=650}, + {"slag",2} + }, + main_product = "thorium-solution", + }, + { + type = "recipe", + name = "thorium-crystallisation", + energy_required = 60, + category = "chemistry", + enabled = false, + ingredients = { + {type="fluid",name="thorium-solution",amount=26}, + {type="fluid",name="water-purified",amount=180} + }, + results = { + {"thorium-salt",20}, + {type="fluid",name="water-greenyellow-waste", amount=200}, + }, + main_product="thorium-salt", + }, + { + type = "recipe", + name = "thorium-purification", + energy_required = 18, + category = "washing-plant", + enabled = false, + ingredients = { + {"thorium-salt",13}, + {type="fluid",name="liquid-naphtha",amount=200} + }, + results = { + {"thorium-232",9}, + {type="fluid",name="liquid-naphtha",amount=200}, + {"slag",4} + }, + main_product = "thorium-232", + } + } + ) +end \ No newline at end of file diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/water-treatment.lua b/Clowns-AngelBob-Nuclear/prototypes/recipes/water-treatment.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/water-treatment.lua rename to Clowns-AngelBob-Nuclear/prototypes/recipes/water-treatment.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology-overrides.lua b/Clowns-AngelBob-Nuclear/prototypes/technology-overrides.lua similarity index 96% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology-overrides.lua rename to Clowns-AngelBob-Nuclear/prototypes/technology-overrides.lua index 88238282..36a7357a 100644 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology-overrides.lua +++ b/Clowns-AngelBob-Nuclear/prototypes/technology-overrides.lua @@ -20,7 +20,7 @@ if data.raw.technology["advanced-centrifuging-2"] then data.raw["technology"]["atomic-bomb"].prerequisites = {"advanced-centrifuging-2"} end --if thorium ore add thorium mox fuel cell recipe, or move advanced uranium to nuclear 2 to allow all fuels -if data.raw.item["thorium-fuel-cell"] --[[or data.raw.item["angels-thorium-fuel-cell"]] then +if data.raw.item["thorium-fuel-cell"] or data.raw.item["angels-thorium-fuel-cell"] then --table.insert(data.raw["technology"]["mixed-oxide-fuel"].effects, {type = "unlock-recipe", recipe = "thorium-mixed-oxide"}) OV.disable_recipe("angels-thorium-processing") OV.add_prereq("angels-thorium-power","thorium-ore-processing") diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/fuels.lua b/Clowns-AngelBob-Nuclear/prototypes/technology/fuels.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/fuels.lua rename to Clowns-AngelBob-Nuclear/prototypes/technology/fuels.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/nuclear-reprocessing.lua b/Clowns-AngelBob-Nuclear/prototypes/technology/nuclear-reprocessing.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/nuclear-reprocessing.lua rename to Clowns-AngelBob-Nuclear/prototypes/technology/nuclear-reprocessing.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/thorium-processing.lua b/Clowns-AngelBob-Nuclear/prototypes/technology/thorium-processing.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/prototypes/technology/thorium-processing.lua rename to Clowns-AngelBob-Nuclear/prototypes/technology/thorium-processing.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/settings.lua b/Clowns-AngelBob-Nuclear/settings.lua similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/settings.lua rename to Clowns-AngelBob-Nuclear/settings.lua diff --git a/Clowns-AngelBob-Nuclear_1.1.21/thumbnail.png b/Clowns-AngelBob-Nuclear/thumbnail.png similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/thumbnail.png rename to Clowns-AngelBob-Nuclear/thumbnail.png diff --git a/Clowns-AngelBob-Nuclear_1.1.21/todo.txt b/Clowns-AngelBob-Nuclear/todo.txt similarity index 100% rename from Clowns-AngelBob-Nuclear_1.1.21/todo.txt rename to Clowns-AngelBob-Nuclear/todo.txt diff --git a/Clowns-AngelBob-Nuclear_1.1.21/changelog.txt b/Clowns-AngelBob-Nuclear_1.1.21/changelog.txt deleted file mode 100644 index dedcaad0..00000000 --- a/Clowns-AngelBob-Nuclear_1.1.21/changelog.txt +++ /dev/null @@ -1,139 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.21 -Date: 2023-07-23 - Features: - - Fixed that thorium could not be processed in angelsindustries - caused start-up crash ---------------------------------------------------------------------------------------------------- -Version: 1.1.20 -Date: 2023-04-16 - Features: - - Fixed that thorium could not be processed - - Fixed issue with cobalt plate compatability ---------------------------------------------------------------------------------------------------- -Version: 1.1.19 -Date: 2021-08-10 - Features: - - Small tweaks - - Property clean-up ---------------------------------------------------------------------------------------------------- -Version: 1.1.18 -Date: 2021-06-14 - Features: - - corrected a recipe oversight - - More angels industries changes - - Added a thorium ore processing chain ---------------------------------------------------------------------------------------------------- -Version: 1.1.17 - Features: - - Substantial angels industries integration - - moved lead plate from an ingredient to a result on thorium reprocessing - - various fixes, added a new reprocessing variant for more flexibility ---------------------------------------------------------------------------------------------------- -Version: 1.1.16 -Date: 2020-11-24 - Changes: - - Updated to version 1.1 - - Fixed that atomic bomb was not researchable - - Icon size patches for vanilla icon changes ---------------------------------------------------------------------------------------------------- -Version: 1.1.15 - Features: - - Reduced the mod dependancies to not require bobs - - Started looking at angels industries integration ---------------------------------------------------------------------------------------------------- -Version: 1.1.14 - Bugfixes: - - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer - Features: - - Prepared for updates to angelsindustries nuclear program ---------------------------------------------------------------------------------------------------- -Version: 1.1.13 - Bugfixes: - - Integrated the centrifuge removal script from clowns processing ---------------------------------------------------------------------------------------------------- -Version: 1.1.12 - Features: - - Removed redundant settings, integrated thorium setting based on if it exists. - - Made advanced nuclear fuels obtainable without the existence of thorium. - - Various small fixes and conditional category moves. ---------------------------------------------------------------------------------------------------- -Version: 1.1.11 - Features: - - Updated to 0.18 - - Added descriptions for the fuels to help differentiate thermal vs motive fuels ---------------------------------------------------------------------------------------------------- -Version: 1.1.10 - Bugfixes: - - Fixed a bug relating to the recipe "advanced nuclear processing" being removed. ---------------------------------------------------------------------------------------------------- -Version: 1.1.09 - Bugfixes: - - Fixed that i "forgot" to remove kovarex enrichment from the bobingabout enrichment tech pre-req ---------------------------------------------------------------------------------------------------- -Version: 1.1.08 - Bugfixes: - - Replaced electronics with RCU's for the two nuke recipes (to be consistent with vanilla) - Features: - - Added a setting to revert the following changes: - Balance: - - Added productivity allowance on the mixed oxide recipes (the plutonium sink recipes) - - Changed the lead return to be lead-oxide - - Set levels of return to be lower than the feed - Has 4 configurations: full AB, OR(modules, assembly), bare minimum mods - - Also compensated for lead coiling (pez's smelting extended mod) ---------------------------------------------------------------------------------------------------- -Version: 1.1.07 - Features: - - Integrated tech tree and recipes to better match Bobs addition of advanced nuclear options - - Fixed Changelog format - - Removed (now) duplicate recipes - - Added water void recipe for radioactive waste water - Balance: - - Lowered the return count of Thorium in the reprocessing recipes (it is cheap anyway) - - Lowered the return of Plutonium in the reprocessing recipes (bob added a plutonium synth method) - - Further comments would be appreciated on balance, particularly around this area are welcome... ---------------------------------------------------------------------------------------------------- -Version: 1.1.06 - Features: - - Added glow to centrifuge recipes - - Thanks to bobingabout for pointing me in the right direction ---------------------------------------------------------------------------------------------------- -Version: 1.1.05 - Bugfixes: - - More tech tree fixes - - Fixed that kovarex was still active - - Linked atomic bomb tech to enrichment techs - Balance: - - Added a new recipe to nuclear fuel processing to give more flexibility (hopefully) ---------------------------------------------------------------------------------------------------- -Version: 1.1.04 - Bugfixes: - - Fixed tech tree to link uranium processing to the tree correctly - - Removed thorium from the regular reprocessing tech's, since they have their own ---------------------------------------------------------------------------------------------------- -Version: 1.1.03 - Bugfixes: - - Fixed naming convention on tech (0.17.23 change) - Balance: - - Fixed thorium positive loop - - Changed advanced thorium reprocessing to be 5x to match other processing systems ---------------------------------------------------------------------------------------------------- -Version: 1.1.02 - Features: - - Updated for 0.17 ---------------------------------------------------------------------------------------------------- -Version: 1.1.01 - Bugfixes: - - Rebalanced Nuclear Fuel production chain (x3 for exotics) ---------------------------------------------------------------------------------------------------- -Version: 1.1.00 - Features: - - Updated locale ---------------------------------------------------------------------------------------------------- -Version: 1.0.01 - Bugfixes: - - Who knows ---------------------------------------------------------------------------------------------------- -Version: 1.0.00 - Features: - - Initial release. diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/thorium.lua b/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/thorium.lua deleted file mode 100644 index 45ebd50c..00000000 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/items/thorium.lua +++ /dev/null @@ -1,65 +0,0 @@ - -if angelsmods.trigger.ores["thorium"] == true then - if not (mods["bobores"] or mods["bobplates"] or mods["angels-industries"]) and data.raw.item["thorium-ore"] then - data:extend( - { -- thorium fuel cell - { - type = "item", - name = "thorium-fuel-cell", - icon = "__Clowns-AngelBob-Nuclear__/graphics/icons/thorium-fuel-cell.png", - icon_size = 32, - subgroup = "clowns-nuclear-cells", - order = "a-b", - fuel_category = "nuclear", - burnt_result = "used-up-thorium-fuel-cell", - fuel_value = "12GJ", - stack_size = 50 - }, - { - type = "item", - name = "used-up-thorium-fuel-cell", - icon = "__Clowns-AngelBob-Nuclear__/graphics/icons/used-up-thorium-fuel-cell.png", - icon_size = 32, - subgroup = "clowns-nuclear-cells", - order = "b-b", - stack_size = 50 - }, - } - ) - end - if data.raw.item["thorium-fuel-cell"] then --should never not be true? - data:extend( - { - -- thorium ore processing items - { - type = "item", - name = "thorium-salt", --fluoride (if angels petrochem, chloride if not) - icons = {{icon="__Clowns-AngelBob-Nuclear__/graphics/icons/ore-5.png",tint={r = 0.8, g = 0.2, b = 0.2, a = 0.6},icon_size=32}}, - subgroup = "clowns-thorium", - order = "a-b", - stack_size = 50 - }, - { - type = "fluid", - name = "thorium-solution", - icons = angelsmods.functions.create_viscous_liquid_fluid_icon(nil, { {r = 0.8, g = 0.2, b = 0.2, a = 0.6}, nil, {r = 0.8, g = 0.2, b = 0.2, a = 0.6} }), - default_temperature = 550, - heat_capacity = "0.1KJ", - base_color = {r = 0.92, g = 0.72, b = 0.09}, - flow_color = {r = 0, g = 1, b = 0.5}, - max_temperature = 1200, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - subgroup = "clowns-thorium", - order = "a-a", - }, - { - type = "item-subgroup", - name = "clowns-thorium", - group = "angels-smelting", - order = "pb", - }, - } - ) - end -end \ No newline at end of file diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/more-overrides.lua b/Clowns-AngelBob-Nuclear_1.1.21/prototypes/more-overrides.lua deleted file mode 100644 index d77c3146..00000000 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/more-overrides.lua +++ /dev/null @@ -1,159 +0,0 @@ -local OV = angelsmods.functions.OV ---set nuclear cell plate -local n_plate="iron-plate" -if mods["bobplates"] then - n_plate="lead-plate" -elseif mods["angels-industries"] and angelsmods.industries.overhaul then - n_plate="angels-plate-lead" --should only activate if not with bobs -end ---hide advanced uranium processing, as it is integrated into the normal cycle -data.raw.recipe["advanced-uranium-processing"].hidden=true - ---Add ingredients to thermonuclear bomb -data.raw["recipe"]["thermonuclear-bomb"].ingredients = {{"rocket-control-unit", 200}} ---modules -if mods["bobmodules"] then - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"speed-module-6", 3}) - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"productivity-module-6", 3}) - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"effectivity-module-6", 3}) -else - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"speed-module-3", 3}) - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"productivity-module-3", 3}) - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"effectivity-module-3", 3}) -end ---fusion cores -if data.raw.item["fusion-reactor-equipment-2"] then - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"fusion-reactor-equipment-2", 1}) -else - table.insert(data.raw["recipe"]["thermonuclear-bomb"].ingredients, {"fusion-reactor-equipment", 1}) -end ---------------------------------------- --- ANGELS INDUSTRIES NUCLEAR UPDATES -- ---------------------------------------- ---something about replacing angels deuterium bomb result with the thermonuke etc... -if mods["angelsindustries"] and angelsmods.industries.overhaul then - --fix recipes - clowns.functions.replace_ing("angels-uranium-fuel-cell","iron-plate",n_plate,"ing") - clowns.functions.replace_ing("advanced-thorium-nuclear-fuel-reprocessing|b","used-up-thorium-fuel-cell","used-up-angels-thorium-fuel-cell","ing") - clowns.functions.replace_ing("advanced-thorium-nuclear-fuel-reprocessing","used-up-thorium-fuel-cell","used-up-AMOX-cell","ing") - clowns.functions.replace_ing("thorium-nuclear-fuel-reprocessing","used-up-thorium-fuel-cell","used-up-AMOX-cell","ing") - --==Hide fuel cell recipes==-- - --clowns uranium-fuel cell - OV.remove_unlock("mixed-oxide", "mixed-oxide-fuel") - OV.disable_technology("mixed-oxide-fuel") - --clowns thorium-fuel cell - OV.remove_unlock("thorium-mixed-oxide", "thorium-fuel-reprocessing") - OV.disable_technology("thorium-fuel-reprocessing") - angelsmods.functions.add_flag("used-up-thorium-fuel-cell", "hidden") - --use angels version - OV.global_replace_item("thorium-fuel-cell","angels-thorium-fuel-cell") - OV.global_replace_item("used-up-thorium-fuel-cell","used-up-angels-thorium-fuel-cell") -end - ---updates to the plutonium bomb -if data.raw.item["electronic-logic-board"] then - clowns.functions.replace_ing("plutonium-atomic-bomb","electronic-logic-board","rocket-control-unit","ing") -elseif data.raw.item["processing-unit"] then - clowns.functions.replace_ing("plutonium-atomic-bomb","processing-unit","rocket-control-unit","ing") -end ---assuming bobs reprocessing recipe is well balanced (may be clobbered by angels) -data.raw.recipe["nuclear-fuel-reprocessing"].results= -{ - {type="item", name="plutonium-239", amount=3,probability=0.1}, - {type="item", name="uranium-238", amount=3}, -} ---update nuclear fuel result metal -clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item", name=n_plate, amount=5},"res") ---table.insert(data.raw.recipe["nuclear-fuel-reprocessing"].results, {type="item", name=n_plate, amount=5}) - ---lead replacement mixing settings -if settings.startup["reprocessing-overhaul"].value and data.raw.item["lead-oxide"] then --check setting and that the oxide exists - local rec_chance= 1 - if data.raw.recipe["angels-roll-lead-converting"] then -- assuming full modules, assembly and coils - rec_chance= 0.215 - elseif mods["bobmodules"] and mods["bobassembly"] then - rec_chance= 0.4 - elseif mods["bobmodules"] and not mods["bobassembly"] then -- im sure someone is crazy enough... - rec_chance= 0.52 -- balanced based on pure prod MK8 modules and vanilla MK3 AM - elseif not mods["bobmodules"] and mods["bobassembly"] then -- highly possible, especially with space-exploration, not sure how to account for earendels modules yet - rec_chance= 1.28 -- balanced based on vanilla modules in bobs MK6 AM - else -- bare minimum mods (no modules, no assembly) - rec_chance= 1.45 -- balanced based on vanilla modules and vanilla MK3 AM - end - --uranium updates - clowns.functions.remove_res("nuclear-fuel-reprocessing",n_plate,"res") - clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - clowns.functions.add_to_table("advanced-nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - --table.insert(data.raw.recipe["nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - --table.insert(data.raw.recipe["advanced-nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - --thorium updates - if data.raw.item["thorium-ore"] then - angelsmods.functions.allow_productivity("mixed-oxide") - angelsmods.functions.allow_productivity("thorium-mixed-oxide") - clowns.functions.remove_res("thorium-fuel-reprocessing",n_plate,"res") - if data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing"] then - clowns.functions.add_to_table("advanced-thorium-nuclear-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - clowns.functions.add_to_table("advanced-thorium-nuclear-fuel-reprocessing|b",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - --table.insert(data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - --table.insert(data.raw.recipe["advanced-thorium-nuclear-fuel-reprocessing|b"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - end - if data.raw.recipe["thorium-fuel-reprocessing"] then - clowns.functions.add_to_table("thorium-fuel-reprocessing",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - --table.insert(data.raw.recipe["thorium-fuel-reprocessing"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - end - else - clowns.functions.add_to_table("advanced-nuclear-fuel-reprocessing-2",{type="item",name="lead-oxide",amount= 2,probability=rec_chance},"res") - --table.insert(data.raw.recipe["advanced-nuclear-fuel-reprocessing-2"].results,{type="item",name="lead-oxide",amount= 2,probability=rec_chance}) - end -end ----------------------------------------- --- ANGELS INDUSTRIES GROUPING UPDATES -- ----------------------------------------- -if mods["angelsindustries"] then - --nuclear reactor fuel group updates - data.raw["item-subgroup"]["clowns-uranium-centrifuging"].group = "angels-power" - data.raw["item-subgroup"]["clowns-uranium-centrifuging"].order = "d[clowns]-ac[centrifuging]" - data.raw["item-subgroup"]["clowns-nuclear-fuels"].group = "angels-power" - data.raw["item-subgroup"]["clowns-nuclear-fuels"].order = "d[clowns]-ab[fuels]" - data.raw["item-subgroup"]["clowns-nuclear-cells"].group = "angels-power" - data.raw["item-subgroup"]["clowns-nuclear-cells"].order = "d[clowns]-ad[cells]" - data.raw["item-subgroup"]["clowns-nuclear-isotopes"].group = "angels-power" - data.raw["item-subgroup"]["clowns-nuclear-isotopes"].order = "d[clowns]-ae[isotopes]" - - --set ingedient limit higher... - data.raw["assembling-machine"]["centrifuge"].ingredient_count=5 - if mods["bobassembly"] and settings.startup["bobmods-assembly-centrifuge"].value then - data.raw["assembling-machine"]["centrifuge-2"].ingredient_count=5 - data.raw["assembling-machine"]["centrifuge-3"].ingredient_count=5 - end - if settings.startup["MCP_enable_centrifuges"].value then - data.raw["assembling-machine"]["centrifuge-mk2"].ingredient_count=5 - data.raw["assembling-machine"]["centrifuge-mk3"].ingredient_count=5 - end - --thermal/train fuel updates - data.raw["item-subgroup"]["clowns-nuclear-fuels"].group = "angels-power" - data.raw["item-subgroup"]["clowns-nuclear-fuels"].order = "d[clowns]-ac[centrifuging]" - OV.patch_recipes({ - {name = "thorium-purification",results = {{type = "item", name = "plutonium-239", amount = 1, probability=0.15}}}, - }) -end ---fix odd interactions -data.raw.recipe["uranium-fuel-cell"].ingredients = -{ - {type="item", name=n_plate, amount=10}, --enforce lead plate - {type="item", name="35%-uranium", amount=20}, -} -data.raw.recipe["mixed-oxide"].ingredients = -{ - {type="item", name=n_plate, amount=2}, --enforce lead plate - {type="item", name="uranium-238", amount=2}, - {type="item", name="plutonium-239", amount=2} -} ---override thorium recipe group -if angelsmods.trigger.ores["thorium"] == false then ---OV.disable_recipe() -end ---globally override plutonium to be consistent -OV.global_replace_item("plutonium-240","plutonium-239") ---execute functions after being called -OV.execute() \ No newline at end of file diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/clowns-centrifuging.lua b/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/clowns-centrifuging.lua deleted file mode 100644 index f55426ef..00000000 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/clowns-centrifuging.lua +++ /dev/null @@ -1,45 +0,0 @@ -local energy = 10 - -data:extend( -{ - { - type = "recipe", - name = "clowns-centrifuging-20%-hexafluoride", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"solid-uranium-hexafluoride", 48}},--decent saving yo - icons = - { - { - icon = "__Clowns-Nuclear__/graphics/icons/1.png", - icon_size = 64, - icon_mipmaps = 4, - scale = 1, - shift = {0, 0}, - }, - { - icon = "__Clowns-Processing__/graphics/icons/solid-uranium-hexafluoride.png", - scale = 1, - shift = {-16, -16}, - }, - }, - icon_size = 32, - crafting_machine_tint = - { - primary = {r = 0, g = 1, b = 0}, - secondary = {r = 0, g = 1, b = 0}, - tertiary = {r = 0, g = 1, b = 0}, - }, - subgroup = "clowns-uranium-centrifuging", - order = "c", - main_product = "", - results= - { - {type="item", name="20%-uranium", amount=2}, - {type="item", name="uranium-238", amount=3} - }, - allow_decomposition = false - }, -} -) diff --git a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/thorium.lua b/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/thorium.lua deleted file mode 100644 index 30a7c39d..00000000 --- a/Clowns-AngelBob-Nuclear_1.1.21/prototypes/recipes/thorium.lua +++ /dev/null @@ -1,117 +0,0 @@ -if data.raw.item["thorium-fuel-cell"] then - data:extend( - { --basic thorium processing - { - type = "recipe", - name = "thorium-processing", - energy_required = 10, - enabled = false, - category = "centrifuging", - ingredients = {{"thorium-ore", 10}}, - icon = "__Clowns-Nuclear__/graphics/icons/thorium-processing.png", - icon_size = 32, - crafting_machine_tint = - { - primary = {r = 1, g = 1, b = 0}, -- thorium - secondary = {r = 1, g = 1, b = 0}, -- thorium - tertiary = {r = 1, g = 1, b = 0}, -- thorium - }, - subgroup = "clowns-nuclear-cells", - order = "z", - results = - { - {type="item", name="thorium-232", amount=1}, - } - }, - { --thorium fuel cells - type = "recipe", - name = "thorium-mixed-oxide", - energy_required = 50, - enabled = false, - ingredients = - { - {type="item", name="iron-plate", amount=2}, - {type="item", name="plutonium-239", amount=2}, - {type="item", name="thorium-232", amount=2} - }, - icon = "__Clowns-Nuclear__/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png", - icon_size = 32, - subgroup = "clowns-nuclear-cells", - order = "d-b", - results = - { - { - name = "thorium-fuel-cell", - amount = 2 - }, - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "thorium-fuel-cell", - energy_required = 10, - enabled = false, - ingredients = - { - {"iron-plate", 10}, - {"55%-uranium", 1}, - {"thorium-232", 19}, - }, - result = "thorium-fuel-cell", - result_count = 10, - }, - --thorium from ore - { - type = "recipe", - name = "thorium-ore-processing", - category = "ore-refining-t3-5", - energy_required = 30, - enabled = false, - ingredients = { - {"thorium-ore",10}, - {type="fluid",name="liquid-hydrofluoric-acid",amount=100} - }, - results = { - {type="fluid",name="thorium-solution",amount=13}, - {type="fluid",name="steam", amount=90, temperature=650}, - {"slag",2} - }, - main_product = "thorium-solution", - }, - { - type = "recipe", - name = "thorium-crystallisation", - energy_required = 60, - category = "chemistry", - enabled = false, - ingredients = { - {type="fluid",name="thorium-solution",amount=26}, - {type="fluid",name="water-purified",amount=180} - }, - results = { - {"thorium-salt",20}, - {type="fluid",name="water-greenyellow-waste", amount=200}, - }, - main_product="thorium-salt", - }, - { - type = "recipe", - name = "thorium-purification", - energy_required = 18, - category = "washing-plant", - enabled = false, - ingredients = { - {"thorium-salt",13}, - {type="fluid",name="liquid-naphtha",amount=200} - }, - results = { - {"thorium-232",9}, - {type="fluid",name="liquid-naphtha",amount=200}, - {"slag",4} - }, - main_product = "thorium-232", - } - } - ) -end \ No newline at end of file diff --git a/Clowns-Nuclear/changelog.txt b/Clowns-Nuclear/changelog.txt new file mode 100644 index 00000000..ddb4bc49 --- /dev/null +++ b/Clowns-Nuclear/changelog.txt @@ -0,0 +1,144 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.3.16 +Date: 2021-08-10 + Bugfixes: + - Small tweaks and optimisations + - Updated nuke properties + - Updated thermonuclear bomb (and artillery) properties (including damage radii) +--------------------------------------------------------------------------------------------------- +Version: 1.3.15 +Date: 2021-06-14 + Bugfixes: + - Fixed load order for library issues +--------------------------------------------------------------------------------------------------- +Version: 1.3.14 +Date: 2021-06-14 + Features: + - Added function library and patch for IR2 to be more consistent. +--------------------------------------------------------------------------------------------------- +Version: 1.3.13 +Date: 2021-06-11 + Features: + - Patched to work with IR2 (recipe unlock crawler detected uncraftable fuel cell) + - I should have clobbered this anyway +--------------------------------------------------------------------------------------------------- +Version: 1.3.12 +Date: 2020-11-24 + Features: + - Updated to version 1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.3.11 + Bugfixes: + - Fixed that the thermonuclear bomb was not giving the correct graphical flair as the vanilla nuke + - Fixed that the thermonuclear bomb was not clearing cliffs + - This is a temp update, some more work is required to get the old "3-wave" system working +--------------------------------------------------------------------------------------------------- +Version: 1.3.9 + Features: + - Prepared for updates to angels industries + Bugfixes: + - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer +--------------------------------------------------------------------------------------------------- +Version: 1.3.8 + Features: + - Fixed icon scaling on artillery, nukes and uranium processing (base game change from 32-64) +--------------------------------------------------------------------------------------------------- +Version: 1.3.7 + Features: + - Updated to 0.18 + - Finally tracked down the icon_size bug and patched it (related to compound icons and not having size 64 icons) +--------------------------------------------------------------------------------------------------- +Version: 1.3.6 + Features: + - Added support for Early Nuclear Power mod + - Improved thumbnail + Bugfixes: + - Fixed changelog format +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 + Bugfixes: + - Fixed graphical bug with centrifuges +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 + Bugfixes: + - Fixed nuke(s) detonating back at player instead of at target... (thanks to shadefang for the quick solution) +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 + Bugfixes: + - Fixed more locale +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 + Bugfixes: + - Fixed locale +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 + Features: + - Updated for 0.17 +--------------------------------------------------------------------------------------------------- +Version: 1.3.0: Locale fix + Bugfixes: + - Made nuclear fuel unlocked by korovex process again xD +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 + Features: + - Rewritten to be completely vanilla-compatible + - All AngelBob material moved to Clowns-AngelBob-Nuclear + - Added German locale (Thanks to Steino) +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 + Bugfixes: + - Bug fixes. +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 + Bugfixes: + - Renamed, bug fixes + - Made the locale override for vanilla uranium items dependent on mod settings. +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 + Bugfixes: + - More bug fixes, disabled decomposition on cyclic recipes. +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 + Bugfixes: + - Bug fixes. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 + Features: + - Added optional advanced nuclear centrifuging - a replacement for the Koravex Process + - Moved Thorium refining recipe to Clowns-Processing, rewrote code to be more flexible. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 + Bugfixes: + - Code brought into line with other MadClown01 mods. +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 + Features: + - Added tactical nuclear artillery shells with opt-in settings. +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 + Bugfixes: + - Fixed resource path bug. +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 + Features: + - Added thorium ore item in case non was provided, fixed bug where thorium pure processing was always shown, massively restructured code for stability, rebalanced thorium pure processing ingredients from pure ores to ore crystals, changed crotinnium requirement to jivolite. +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 + Bugfixes: + - Fixed vanilla bug preventing mixed oxide recipes working. +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 + Features: + - Rebalanced recipe costs + - Eliminated Uranium-235 from Thorium fuel cell reprocessing and instead made the fuel cells 12GJ from 8GJ. + - Icons updated accordingly. +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 + Bugfixes: + - Fixed vanilla bug + Features: + - rebalanced thermonuclear bomb recipe's module requirement from 5 to 3. +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 + Features: + - Initial release. diff --git a/Clowns-Nuclear_1.3.18/control.lua b/Clowns-Nuclear/control.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/control.lua rename to Clowns-Nuclear/control.lua diff --git a/Clowns-Nuclear/data-final-fixes.lua b/Clowns-Nuclear/data-final-fixes.lua new file mode 100644 index 00000000..592bb985 --- /dev/null +++ b/Clowns-Nuclear/data-final-fixes.lua @@ -0,0 +1 @@ +require("prototypes.overrides.more-overrides") diff --git a/Clowns-Nuclear/data-updates.lua b/Clowns-Nuclear/data-updates.lua new file mode 100644 index 00000000..2c4d654c --- /dev/null +++ b/Clowns-Nuclear/data-updates.lua @@ -0,0 +1,28 @@ +clowns.functions.add_unlock("kovarex-enrichment-process","depleted-uranium-reprocessing") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-80%") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-75%") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-70%") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-65%") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-55%") +clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-45%") +clowns.functions.add_unlock("kovarex-enrichment-process","nuclear-fuel") + +--if Early_Nuclear_Power +require("prototypes.overrides.ENP-overrides") +--require("prototypes.more-overrides") + +if data.raw.recipe["advanced-uranium-processing"] then + --roll through each ingredient and replace the uranium 235 with the 35% + local res={} + if data.raw["recipe"]["uranium-processing"].results then + for i,ing in pairs(data.raw["recipe"]["uranium-processing"].results) do + res[i]=table.deepcopy(ing) + if ing.name and ing.name == "uranium-235" then + res[i].name = "35%-uranium" + elseif ing[1] and string.find(ing[1],"uranium-235") then + res[i][1] = "35%-uranium" + end + end + data.raw.recipe["advanced-uranium-processing"].results=res + end +end diff --git a/Clowns-Nuclear_1.3.18/data.lua b/Clowns-Nuclear/data.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/data.lua rename to Clowns-Nuclear/data.lua diff --git a/Clowns-Nuclear_1.3.18/graphics/Thorium Icons.txt b/Clowns-Nuclear/graphics/Thorium Icons.txt similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/Thorium Icons.txt rename to Clowns-Nuclear/graphics/Thorium Icons.txt diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/0%.png b/Clowns-Nuclear/graphics/icons/0%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/0%.png rename to Clowns-Nuclear/graphics/icons/0%.png diff --git a/Clowns-Nuclear/graphics/icons/0.png b/Clowns-Nuclear/graphics/icons/0.png new file mode 100644 index 00000000..55f24d94 Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/0.png differ diff --git a/Clowns-Nuclear/graphics/icons/1.png b/Clowns-Nuclear/graphics/icons/1.png new file mode 100644 index 00000000..597382ed Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/1.png differ diff --git a/Clowns-Nuclear/graphics/icons/2.png b/Clowns-Nuclear/graphics/icons/2.png new file mode 100644 index 00000000..5cd37eca Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/2.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/20%-uranium.png b/Clowns-Nuclear/graphics/icons/20%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/20%-uranium.png rename to Clowns-Nuclear/graphics/icons/20%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/20%.png b/Clowns-Nuclear/graphics/icons/20%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/20%.png rename to Clowns-Nuclear/graphics/icons/20%.png diff --git a/Clowns-Nuclear/graphics/icons/3.png b/Clowns-Nuclear/graphics/icons/3.png new file mode 100644 index 00000000..e9ba4f30 Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/3.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/35%-uranium.png b/Clowns-Nuclear/graphics/icons/35%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/35%-uranium.png rename to Clowns-Nuclear/graphics/icons/35%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/35%.png b/Clowns-Nuclear/graphics/icons/35%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/35%.png rename to Clowns-Nuclear/graphics/icons/35%.png diff --git a/Clowns-Nuclear/graphics/icons/4.png b/Clowns-Nuclear/graphics/icons/4.png new file mode 100644 index 00000000..1181213e Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/4.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/45%-uranium.png b/Clowns-Nuclear/graphics/icons/45%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/45%-uranium.png rename to Clowns-Nuclear/graphics/icons/45%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/45%.png b/Clowns-Nuclear/graphics/icons/45%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/45%.png rename to Clowns-Nuclear/graphics/icons/45%.png diff --git a/Clowns-Nuclear/graphics/icons/5.png b/Clowns-Nuclear/graphics/icons/5.png new file mode 100644 index 00000000..66e29308 Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/5.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/55%-uranium.png b/Clowns-Nuclear/graphics/icons/55%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/55%-uranium.png rename to Clowns-Nuclear/graphics/icons/55%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/55%.png b/Clowns-Nuclear/graphics/icons/55%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/55%.png rename to Clowns-Nuclear/graphics/icons/55%.png diff --git a/Clowns-Nuclear/graphics/icons/6.png b/Clowns-Nuclear/graphics/icons/6.png new file mode 100644 index 00000000..07e7bc86 Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/6.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/65%-uranium.png b/Clowns-Nuclear/graphics/icons/65%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/65%-uranium.png rename to Clowns-Nuclear/graphics/icons/65%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/65%.png b/Clowns-Nuclear/graphics/icons/65%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/65%.png rename to Clowns-Nuclear/graphics/icons/65%.png diff --git a/Clowns-Nuclear/graphics/icons/7.png b/Clowns-Nuclear/graphics/icons/7.png new file mode 100644 index 00000000..d31d095e Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/7.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/70%-uranium.png b/Clowns-Nuclear/graphics/icons/70%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/70%-uranium.png rename to Clowns-Nuclear/graphics/icons/70%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/70%.png b/Clowns-Nuclear/graphics/icons/70%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/70%.png rename to Clowns-Nuclear/graphics/icons/70%.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/75%-uranium.png b/Clowns-Nuclear/graphics/icons/75%-uranium.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/75%-uranium.png rename to Clowns-Nuclear/graphics/icons/75%-uranium.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/75%.png b/Clowns-Nuclear/graphics/icons/75%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/75%.png rename to Clowns-Nuclear/graphics/icons/75%.png diff --git a/Clowns-Nuclear/graphics/icons/8.png b/Clowns-Nuclear/graphics/icons/8.png new file mode 100644 index 00000000..4bc7cadd Binary files /dev/null and b/Clowns-Nuclear/graphics/icons/8.png differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/80%.png b/Clowns-Nuclear/graphics/icons/80%.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/80%.png rename to Clowns-Nuclear/graphics/icons/80%.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/angels-ore-mix-chrome-sorting.png b/Clowns-Nuclear/graphics/icons/angels-ore-mix-chrome-sorting.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/angels-ore-mix-chrome-sorting.png rename to Clowns-Nuclear/graphics/icons/angels-ore-mix-chrome-sorting.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/angels-ore6-crushed-sorting.png b/Clowns-Nuclear/graphics/icons/angels-ore6-crushed-sorting.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/angels-ore6-crushed-sorting.png rename to Clowns-Nuclear/graphics/icons/angels-ore6-crushed-sorting.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/artillery-shell-nuclear.png b/Clowns-Nuclear/graphics/icons/artillery-shell-nuclear.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/artillery-shell-nuclear.png rename to Clowns-Nuclear/graphics/icons/artillery-shell-nuclear.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/artillery-shell.png b/Clowns-Nuclear/graphics/icons/artillery-shell.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/artillery-shell.png rename to Clowns-Nuclear/graphics/icons/artillery-shell.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/atomic-bomb.png b/Clowns-Nuclear/graphics/icons/atomic-bomb.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/atomic-bomb.png rename to Clowns-Nuclear/graphics/icons/atomic-bomb.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/blank.png b/Clowns-Nuclear/graphics/icons/blank.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/blank.png rename to Clowns-Nuclear/graphics/icons/blank.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/critical-mass.png b/Clowns-Nuclear/graphics/icons/critical-mass.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/critical-mass.png rename to Clowns-Nuclear/graphics/icons/critical-mass.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/gas-chlorine.png b/Clowns-Nuclear/graphics/icons/gas-chlorine.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/gas-chlorine.png rename to Clowns-Nuclear/graphics/icons/gas-chlorine.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel-mixed-oxide.png b/Clowns-Nuclear/graphics/icons/nuclear-fuel-mixed-oxide.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel-mixed-oxide.png rename to Clowns-Nuclear/graphics/icons/nuclear-fuel-mixed-oxide.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel-reprocessing.png b/Clowns-Nuclear/graphics/icons/nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel-reprocessing.png rename to Clowns-Nuclear/graphics/icons/nuclear-fuel-reprocessing.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel.png b/Clowns-Nuclear/graphics/icons/nuclear-fuel.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/nuclear-fuel.png rename to Clowns-Nuclear/graphics/icons/nuclear-fuel.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/ore-5.png b/Clowns-Nuclear/graphics/icons/ore-5.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/ore-5.png rename to Clowns-Nuclear/graphics/icons/ore-5.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/plutonium-239.png b/Clowns-Nuclear/graphics/icons/plutonium-239.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/plutonium-239.png rename to Clowns-Nuclear/graphics/icons/plutonium-239.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/sorting.png b/Clowns-Nuclear/graphics/icons/sorting.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/sorting.png rename to Clowns-Nuclear/graphics/icons/sorting.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thermonuclear-bomb.png b/Clowns-Nuclear/graphics/icons/thermonuclear-bomb.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thermonuclear-bomb.png rename to Clowns-Nuclear/graphics/icons/thermonuclear-bomb.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-232.png b/Clowns-Nuclear/graphics/icons/thorium-232.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-232.png rename to Clowns-Nuclear/graphics/icons/thorium-232.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-fuel-cell.png b/Clowns-Nuclear/graphics/icons/thorium-fuel-cell.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-fuel-cell.png rename to Clowns-Nuclear/graphics/icons/thorium-fuel-cell.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png b/Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png rename to Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel-mixed-oxide.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel-reprocessing.png b/Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel-reprocessing.png rename to Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel-reprocessing.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel.png b/Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-nuclear-fuel.png rename to Clowns-Nuclear/graphics/icons/thorium-nuclear-fuel.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/thorium-processing.png b/Clowns-Nuclear/graphics/icons/thorium-processing.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/thorium-processing.png rename to Clowns-Nuclear/graphics/icons/thorium-processing.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/uranium-235.png b/Clowns-Nuclear/graphics/icons/uranium-235.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/uranium-235.png rename to Clowns-Nuclear/graphics/icons/uranium-235.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/uranium-238.png b/Clowns-Nuclear/graphics/icons/uranium-238.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/uranium-238.png rename to Clowns-Nuclear/graphics/icons/uranium-238.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/uranium-fuel-cell.png b/Clowns-Nuclear/graphics/icons/uranium-fuel-cell.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/uranium-fuel-cell.png rename to Clowns-Nuclear/graphics/icons/uranium-fuel-cell.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/uranium-processing.png b/Clowns-Nuclear/graphics/icons/uranium-processing.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/uranium-processing.png rename to Clowns-Nuclear/graphics/icons/uranium-processing.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/used-up-thorium-fuel-cell.png b/Clowns-Nuclear/graphics/icons/used-up-thorium-fuel-cell.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/used-up-thorium-fuel-cell.png rename to Clowns-Nuclear/graphics/icons/used-up-thorium-fuel-cell.png diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/used-up-uranium-fuel-cell.png b/Clowns-Nuclear/graphics/icons/used-up-uranium-fuel-cell.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/icons/used-up-uranium-fuel-cell.png rename to Clowns-Nuclear/graphics/icons/used-up-uranium-fuel-cell.png diff --git a/Clowns-Nuclear_1.3.18/graphics/technology/mixed-oxide.png b/Clowns-Nuclear/graphics/technology/mixed-oxide.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/technology/mixed-oxide.png rename to Clowns-Nuclear/graphics/technology/mixed-oxide.png diff --git a/Clowns-Nuclear_1.3.18/graphics/technology/thermonuclear-bomb.png b/Clowns-Nuclear/graphics/technology/thermonuclear-bomb.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/technology/thermonuclear-bomb.png rename to Clowns-Nuclear/graphics/technology/thermonuclear-bomb.png diff --git a/Clowns-Nuclear_1.3.18/graphics/technology/thorium-nuclear-fuel-reprocessing.png b/Clowns-Nuclear/graphics/technology/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/technology/thorium-nuclear-fuel-reprocessing.png rename to Clowns-Nuclear/graphics/technology/thorium-nuclear-fuel-reprocessing.png diff --git a/Clowns-Nuclear_1.3.18/graphics/technology/thorium-nuclear-power.png b/Clowns-Nuclear/graphics/technology/thorium-nuclear-power.png similarity index 100% rename from Clowns-Nuclear_1.3.18/graphics/technology/thorium-nuclear-power.png rename to Clowns-Nuclear/graphics/technology/thorium-nuclear-power.png diff --git a/Clowns-Nuclear/info.json b/Clowns-Nuclear/info.json new file mode 100644 index 00000000..4ff4a588 --- /dev/null +++ b/Clowns-Nuclear/info.json @@ -0,0 +1,14 @@ +{ + "name": "Clowns-Nuclear", + "version": "1.3.19", + "factorio_version": "1.1", + "title": "MadClown01's Vanilla Nuclear", + "author": "MadClown01,Pezzawinkle", + "contact": "", + "homepage": "", + "description": "Adds plutonium as a source of additional fuel cells, or as additional weaponry material. Adds thermonuclear weaponry. Adds a far more intricate & realistic replacement to the Koravex Enrichment Process.", + "dependencies": [ + "? Early_Nuclear_Power >= 0.4.0", + "? angelsrefining >= 0.12.1" + ] +} diff --git a/Clowns-Nuclear_1.3.18/locale/en/en.cfg b/Clowns-Nuclear/locale/en/en.cfg similarity index 100% rename from Clowns-Nuclear_1.3.18/locale/en/en.cfg rename to Clowns-Nuclear/locale/en/en.cfg diff --git a/Clowns-Nuclear/prototypes/categories.lua b/Clowns-Nuclear/prototypes/categories.lua new file mode 100644 index 00000000..2026e8a1 --- /dev/null +++ b/Clowns-Nuclear/prototypes/categories.lua @@ -0,0 +1,30 @@ +data:extend( +{ + + --Most intermediates (raw material subgroup) seem to be like bb or something similar + { + type = "item-subgroup", + name = "clowns-uranium-centrifuging", + group = "intermediate-products", + order = "b-a-a", + }, + { + type = "item-subgroup", + name = "clowns-nuclear-isotopes", + group = "intermediate-products", + order = "b-a-b", + }, + { + type = "item-subgroup", + name = "clowns-nuclear-cells", + group = "intermediate-products", + order = "b-a-c", + }, + { + type = "item-subgroup", + name = "clowns-nuclear-fuels", + group = "intermediate-products", + order = "b-a-d", + }, +} +) \ No newline at end of file diff --git a/Clowns-Nuclear_1.3.18/prototypes/functions.lua b/Clowns-Nuclear/prototypes/functions.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/functions.lua rename to Clowns-Nuclear/prototypes/functions.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/items/clowns-centrifuging.lua b/Clowns-Nuclear/prototypes/items/clowns-centrifuging.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/items/clowns-centrifuging.lua rename to Clowns-Nuclear/prototypes/items/clowns-centrifuging.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/items/items.lua b/Clowns-Nuclear/prototypes/items/items.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/items/items.lua rename to Clowns-Nuclear/prototypes/items/items.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/items/nuclear_action_tables.lua b/Clowns-Nuclear/prototypes/items/nuclear_action_tables.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/items/nuclear_action_tables.lua rename to Clowns-Nuclear/prototypes/items/nuclear_action_tables.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/items/projectiles.lua b/Clowns-Nuclear/prototypes/items/projectiles.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/items/projectiles.lua rename to Clowns-Nuclear/prototypes/items/projectiles.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/overrides/ENP-overrides.lua b/Clowns-Nuclear/prototypes/overrides/ENP-overrides.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/overrides/ENP-overrides.lua rename to Clowns-Nuclear/prototypes/overrides/ENP-overrides.lua diff --git a/Clowns-Nuclear/prototypes/overrides/more-overrides.lua b/Clowns-Nuclear/prototypes/overrides/more-overrides.lua new file mode 100644 index 00000000..0e9c626b --- /dev/null +++ b/Clowns-Nuclear/prototypes/overrides/more-overrides.lua @@ -0,0 +1,14 @@ +if mods["IndustrialRevolution"] then + --update train fuel + clowns.functions.replace_ing("nuclear-fuel","uranium-235", {"55%-uranium", 1}, "ing") + --update reactor fuel + clowns.functions.replace_ing("uranium-fuel-cell","uranium-235", {"35%-uranium", 20}, "ing") + clowns.functions.remove_res("uranium-fuel-cell","uranium-238","ing") + --update fuel reprocessing + clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item",name="plutonium-239",amount=1,probability=0.5},"res") + clowns.functions.replace_ing("mixed-oxide","iron-plate",{"lead-plate-special",2},"ing") + --data.raw.recipe["nuclear-fuel-reprocessing"].ingredients={{"used-up-uranium-fuel-cell",1}}--change it to 5 + --update kovarex + clowns.functions.remove_unlock("kovarex-enrichment-process","kovarex-enrichment-process") + clowns.functions.add_unlock("military-4","atomic-bomb") +end \ No newline at end of file diff --git a/Clowns-Nuclear_1.3.18/prototypes/overrides/overrides.lua b/Clowns-Nuclear/prototypes/overrides/overrides.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/overrides/overrides.lua rename to Clowns-Nuclear/prototypes/overrides/overrides.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/recipes/artillery-shells.lua b/Clowns-Nuclear/prototypes/recipes/artillery-shells.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/recipes/artillery-shells.lua rename to Clowns-Nuclear/prototypes/recipes/artillery-shells.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/recipes/bombs.lua b/Clowns-Nuclear/prototypes/recipes/bombs.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/recipes/bombs.lua rename to Clowns-Nuclear/prototypes/recipes/bombs.lua diff --git a/Clowns-Nuclear/prototypes/recipes/clowns-centrifuging.lua b/Clowns-Nuclear/prototypes/recipes/clowns-centrifuging.lua new file mode 100644 index 00000000..1861c15b --- /dev/null +++ b/Clowns-Nuclear/prototypes/recipes/clowns-centrifuging.lua @@ -0,0 +1,201 @@ +local energy = 10 + +data:extend( +{ + { + type = "recipe", + name = "depleted-uranium-reprocessing", + energy_required = energy/2, + enabled = false, + category = "centrifuging", + ingredients = + { + {type="item", name="uranium-238", amount=5}, + }, + icon = "__Clowns-Nuclear__/graphics/icons/0.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "a", + --main_product = "", + results= + { + {type="item", name="uranium-ore", amount=10}, + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-80%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"75%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/8.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "j", + --main_product = "", + results= + { + {type="item", name="uranium-235", amount=2}, + {type="item", name="75%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-75%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"70%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/7.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "i", + --main_product = "", + results= + { + {type="item", name="75%-uranium", amount=2}, + {type="item", name="70%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-70%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"65%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/6.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "h", + --main_product = "", + results= + { + {type="item", name="70%-uranium", amount=2}, + {type="item", name="65%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-65%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"55%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/5.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "g", + --main_product = "", + results= + { + {type="item", name="65%-uranium", amount=2}, + {type="item", name="55%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-55%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"45%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/4.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "f", + --main_product = "", + results= + { + {type="item", name="55%-uranium", amount=2}, + {type="item", name="45%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-45%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"35%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/3.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "e", + --main_product = "", + results= + { + {type="item", name="45%-uranium", amount=2}, + {type="item", name="35%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-35%", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"20%-uranium", 5}}, + icon = "__Clowns-Nuclear__/graphics/icons/2.png", + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "d", + --main_product = "", + results= + { + {type="item", name="35%-uranium", amount=2}, + {type="item", name="20%-uranium", amount=1}, + {type="item", name="uranium-238", amount=2} + }, + allow_decomposition = false + }, + { + type = "recipe", + name = "clowns-centrifuging-20%-ore", + energy_required = energy, + enabled = false, + category = "centrifuging", + ingredients = {{"uranium-ore", 60}}, + icons = + { + { + icon = "__Clowns-Nuclear__/graphics/icons/1.png", + scale = 1, + shift = {0, 0}, + }, + { + icon = "__base__/graphics/icons/uranium-ore.png", + icon_size=64, + scale = 0.25,--0.5 for size 32 + shift = {-8, -8}, + }, + + }, + icon_size = 32, + subgroup = "clowns-uranium-centrifuging", + order = "b", + --main_product = "", + results= + { + {type="item", name="20%-uranium", amount=2}, + {type="item", name="uranium-238", amount=4} + }, + allow_decomposition = false + }, + +} +) diff --git a/Clowns-Nuclear_1.3.18/prototypes/recipes/mixed-oxide.lua b/Clowns-Nuclear/prototypes/recipes/mixed-oxide.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/recipes/mixed-oxide.lua rename to Clowns-Nuclear/prototypes/recipes/mixed-oxide.lua diff --git a/Clowns-Nuclear_1.3.18/prototypes/technology/technology.lua b/Clowns-Nuclear/prototypes/technology/technology.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/prototypes/technology/technology.lua rename to Clowns-Nuclear/prototypes/technology/technology.lua diff --git a/Clowns-Nuclear_1.3.18/settings-update.lua b/Clowns-Nuclear/settings-update.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/settings-update.lua rename to Clowns-Nuclear/settings-update.lua diff --git a/Clowns-Nuclear_1.3.18/settings.lua b/Clowns-Nuclear/settings.lua similarity index 100% rename from Clowns-Nuclear_1.3.18/settings.lua rename to Clowns-Nuclear/settings.lua diff --git a/Clowns-Nuclear_1.3.18/thumbnail.png b/Clowns-Nuclear/thumbnail.png similarity index 100% rename from Clowns-Nuclear_1.3.18/thumbnail.png rename to Clowns-Nuclear/thumbnail.png diff --git a/Clowns-Nuclear_1.3.18/changelog.txt b/Clowns-Nuclear_1.3.18/changelog.txt deleted file mode 100644 index 2196f86f..00000000 --- a/Clowns-Nuclear_1.3.18/changelog.txt +++ /dev/null @@ -1,154 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.3.18 -Date: 2023-05-07 - Features: - - Re-activated IR compatibility due to mod name change ---------------------------------------------------------------------------------------------------- -Version: 1.3.17 -Date: 2023-04-16 - Bugfixes: - - Fixed missing category ---------------------------------------------------------------------------------------------------- -Version: 1.3.16 -Date: 2021-08-10 - Bugfixes: - - Small tweaks and optimisations - - Updated nuke properties - - Updated thermonuclear bomb (and artillery) properties (including damage radii) ---------------------------------------------------------------------------------------------------- -Version: 1.3.15 -Date: 2021-06-14 - Bugfixes: - - Fixed load order for library issues ---------------------------------------------------------------------------------------------------- -Version: 1.3.14 -Date: 2021-06-14 - Features: - - Added function library and patch for IR2 to be more consistent. ---------------------------------------------------------------------------------------------------- -Version: 1.3.13 -Date: 2021-06-11 - Features: - - Patched to work with IR2 (recipe unlock crawler detected uncraftable fuel cell) - - I should have clobbered this anyway ---------------------------------------------------------------------------------------------------- -Version: 1.3.12 -Date: 2020-11-24 - Features: - - Updated to version 1.1 ---------------------------------------------------------------------------------------------------- -Version: 1.3.11 - Bugfixes: - - Fixed that the thermonuclear bomb was not giving the correct graphical flair as the vanilla nuke - - Fixed that the thermonuclear bomb was not clearing cliffs - - This is a temp update, some more work is required to get the old "3-wave" system working ---------------------------------------------------------------------------------------------------- -Version: 1.3.9 - Features: - - Prepared for updates to angels industries - Bugfixes: - - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer ---------------------------------------------------------------------------------------------------- -Version: 1.3.8 - Features: - - Fixed icon scaling on artillery, nukes and uranium processing (base game change from 32-64) ---------------------------------------------------------------------------------------------------- -Version: 1.3.7 - Features: - - Updated to 0.18 - - Finally tracked down the icon_size bug and patched it (related to compound icons and not having size 64 icons) ---------------------------------------------------------------------------------------------------- -Version: 1.3.6 - Features: - - Added support for Early Nuclear Power mod - - Improved thumbnail - Bugfixes: - - Fixed changelog format ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 - Bugfixes: - - Fixed graphical bug with centrifuges ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 - Bugfixes: - - Fixed nuke(s) detonating back at player instead of at target... (thanks to shadefang for the quick solution) ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 - Bugfixes: - - Fixed more locale ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 - Bugfixes: - - Fixed locale ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 - Features: - - Updated for 0.17 ---------------------------------------------------------------------------------------------------- -Version: 1.3.0: Locale fix - Bugfixes: - - Made nuclear fuel unlocked by korovex process again xD ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 - Features: - - Rewritten to be completely vanilla-compatible - - All AngelBob material moved to Clowns-AngelBob-Nuclear - - Added German locale (Thanks to Steino) ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 - Bugfixes: - - Bug fixes. ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 - Bugfixes: - - Renamed, bug fixes - - Made the locale override for vanilla uranium items dependent on mod settings. ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 - Bugfixes: - - More bug fixes, disabled decomposition on cyclic recipes. ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 - Bugfixes: - - Bug fixes. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 - Features: - - Added optional advanced nuclear centrifuging - a replacement for the Koravex Process - - Moved Thorium refining recipe to Clowns-Processing, rewrote code to be more flexible. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 - Bugfixes: - - Code brought into line with other MadClown01 mods. ---------------------------------------------------------------------------------------------------- -Version: 0.1.6 - Features: - - Added tactical nuclear artillery shells with opt-in settings. ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 - Bugfixes: - - Fixed resource path bug. ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 - Features: - - Added thorium ore item in case non was provided, fixed bug where thorium pure processing was always shown, massively restructured code for stability, rebalanced thorium pure processing ingredients from pure ores to ore crystals, changed crotinnium requirement to jivolite. ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 - Bugfixes: - - Fixed vanilla bug preventing mixed oxide recipes working. ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 - Features: - - Rebalanced recipe costs - - Eliminated Uranium-235 from Thorium fuel cell reprocessing and instead made the fuel cells 12GJ from 8GJ. - - Icons updated accordingly. ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 - Bugfixes: - - Fixed vanilla bug - Features: - - rebalanced thermonuclear bomb recipe's module requirement from 5 to 3. ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 - Features: - - Initial release. diff --git a/Clowns-Nuclear_1.3.18/data-final-fixes.lua b/Clowns-Nuclear_1.3.18/data-final-fixes.lua deleted file mode 100644 index 23a2bd9e..00000000 --- a/Clowns-Nuclear_1.3.18/data-final-fixes.lua +++ /dev/null @@ -1 +0,0 @@ -require("prototypes.overrides.IR-overrides") diff --git a/Clowns-Nuclear_1.3.18/data-updates.lua b/Clowns-Nuclear_1.3.18/data-updates.lua deleted file mode 100644 index 632bd7a6..00000000 --- a/Clowns-Nuclear_1.3.18/data-updates.lua +++ /dev/null @@ -1,26 +0,0 @@ -clowns.functions.add_unlock("kovarex-enrichment-process","depleted-uranium-reprocessing") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-80%") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-75%") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-70%") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-65%") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-55%") -clowns.functions.add_unlock("kovarex-enrichment-process","clowns-centrifuging-45%") -clowns.functions.add_unlock("kovarex-enrichment-process","nuclear-fuel") - -require("prototypes.overrides.ENP-overrides") - -if data.raw.recipe["advanced-uranium-processing"] then - --roll through each ingredient and replace the uranium 235 with the 35% - local res={} - if data.raw["recipe"]["uranium-processing"].results then - for i,ing in pairs(data.raw["recipe"]["uranium-processing"].results) do - res[i]=table.deepcopy(ing) - if ing.name and ing.name == "uranium-235" then - res[i].name = "35%-uranium" - elseif ing[1] and string.find(ing[1],"uranium-235") then - res[i][1] = "35%-uranium" - end - end - data.raw.recipe["advanced-uranium-processing"].results=res - end -end diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/0.png b/Clowns-Nuclear_1.3.18/graphics/icons/0.png deleted file mode 100644 index de851136..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/0.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/1.png b/Clowns-Nuclear_1.3.18/graphics/icons/1.png deleted file mode 100644 index 9a259b74..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/1.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/2.png b/Clowns-Nuclear_1.3.18/graphics/icons/2.png deleted file mode 100644 index 22e8ffb0..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/2.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/3.png b/Clowns-Nuclear_1.3.18/graphics/icons/3.png deleted file mode 100644 index 3325689f..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/3.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/4.png b/Clowns-Nuclear_1.3.18/graphics/icons/4.png deleted file mode 100644 index 4776a61f..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/4.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/5.png b/Clowns-Nuclear_1.3.18/graphics/icons/5.png deleted file mode 100644 index 129169f8..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/5.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/6.png b/Clowns-Nuclear_1.3.18/graphics/icons/6.png deleted file mode 100644 index e71fa6aa..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/6.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/7.png b/Clowns-Nuclear_1.3.18/graphics/icons/7.png deleted file mode 100644 index 9a39e1ea..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/7.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/graphics/icons/8.png b/Clowns-Nuclear_1.3.18/graphics/icons/8.png deleted file mode 100644 index 481549ab..00000000 Binary files a/Clowns-Nuclear_1.3.18/graphics/icons/8.png and /dev/null differ diff --git a/Clowns-Nuclear_1.3.18/info.json b/Clowns-Nuclear_1.3.18/info.json deleted file mode 100644 index 12f07f91..00000000 --- a/Clowns-Nuclear_1.3.18/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Clowns-Nuclear", - "version": "1.3.18", - "factorio_version": "1.1", - "title": "MadClown01's Vanilla Nuclear", - "author": "MadClown01,Pezzawinkle", - "contact": "", - "homepage": "", - "description": "Adds plutonium as a source of additional fuel cells, or as additional weaponry material. Adds thermonuclear weaponry. Adds a far more intricate & realistic replacement to the Koravex Enrichment Process.", - "dependencies": [ - "? Early_Nuclear_Power >= 0.4.0", - "? angelsrefining >= 0.12.1", - "? IndustrialRevolution3 >= 3.0.1" - ] -} diff --git a/Clowns-Nuclear_1.3.18/prototypes/categories.lua b/Clowns-Nuclear_1.3.18/prototypes/categories.lua deleted file mode 100644 index a0ece402..00000000 --- a/Clowns-Nuclear_1.3.18/prototypes/categories.lua +++ /dev/null @@ -1,36 +0,0 @@ -data:extend( -{ - - --Most intermediates (raw material subgroup) seem to be like bb or something similar - { - type = "item-subgroup", - name = "clowns-uranium-centrifuging", - group = "intermediate-products", - order = "b-a-a", - }, - { - type = "item-subgroup", - name = "clowns-nuclear-isotopes", - group = "intermediate-products", - order = "b-a-b", - }, - { - type = "item-subgroup", - name = "clowns-nuclear-cells", - group = "intermediate-products", - order = "b-a-c", - }, - { - type = "item-subgroup", - name = "clowns-nuclear-fuels", - group = "intermediate-products", - order = "b-a-d", - }, - { - type = "item-subgroup", - name = "clowns-thorium", - group = "intermediate-products", - order = "b-a-d", - }, -} -) \ No newline at end of file diff --git a/Clowns-Nuclear_1.3.18/prototypes/overrides/IR-overrides.lua b/Clowns-Nuclear_1.3.18/prototypes/overrides/IR-overrides.lua deleted file mode 100644 index c5c66576..00000000 --- a/Clowns-Nuclear_1.3.18/prototypes/overrides/IR-overrides.lua +++ /dev/null @@ -1,14 +0,0 @@ -if mods["IndustrialRevolution3"] then - --update train fuel - clowns.functions.replace_ing("nuclear-fuel","uranium-235", {"55%-uranium", 1}, "ing") - --update reactor fuel - clowns.functions.replace_ing("uranium-fuel-cell","uranium-235", {"35%-uranium", 20}, "ing") - clowns.functions.remove_res("uranium-fuel-cell","uranium-238","ing") - --update fuel reprocessing - clowns.functions.add_to_table("nuclear-fuel-reprocessing",{type="item",name="plutonium-239",amount=1,probability=0.5},"res") - clowns.functions.replace_ing("mixed-oxide","iron-plate",{"lead-plate-special",2},"ing") - --data.raw.recipe["nuclear-fuel-reprocessing"].ingredients={{"used-up-uranium-fuel-cell",1}}--change it to 5 - --update kovarex - clowns.functions.remove_unlock("kovarex-enrichment-process","kovarex-enrichment-process") - clowns.functions.add_unlock("military-4","atomic-bomb") -end \ No newline at end of file diff --git a/Clowns-Nuclear_1.3.18/prototypes/recipes/clowns-centrifuging.lua b/Clowns-Nuclear_1.3.18/prototypes/recipes/clowns-centrifuging.lua deleted file mode 100644 index cf8d23ab..00000000 --- a/Clowns-Nuclear_1.3.18/prototypes/recipes/clowns-centrifuging.lua +++ /dev/null @@ -1,210 +0,0 @@ -local energy = 10 - -data:extend( -{ - { - type = "recipe", - name = "depleted-uranium-reprocessing", - energy_required = energy/2, - enabled = false, - category = "centrifuging", - ingredients = - { - {type="item", name="uranium-238", amount=5}, - }, - icon = "__Clowns-Nuclear__/graphics/icons/0.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "a", - --main_product = "", - results= - { - {type="item", name="uranium-ore", amount=10}, - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-80%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"75%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/8.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "j", - --main_product = "", - results= - { - {type="item", name="uranium-235", amount=2}, - {type="item", name="75%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-75%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"70%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/7.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "i", - --main_product = "", - results= - { - {type="item", name="75%-uranium", amount=2}, - {type="item", name="70%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-70%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"65%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/6.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "h", - --main_product = "", - results= - { - {type="item", name="70%-uranium", amount=2}, - {type="item", name="65%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-65%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"55%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/5.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "g", - --main_product = "", - results= - { - {type="item", name="65%-uranium", amount=2}, - {type="item", name="55%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-55%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"45%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/4.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "f", - --main_product = "", - results= - { - {type="item", name="55%-uranium", amount=2}, - {type="item", name="45%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-45%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"35%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/3.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "e", - --main_product = "", - results= - { - {type="item", name="45%-uranium", amount=2}, - {type="item", name="35%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-35%", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"20%-uranium", 5}}, - icon = "__Clowns-Nuclear__/graphics/icons/2.png", - icon_size = 64, - icon_mipmaps = 4, - subgroup = "clowns-uranium-centrifuging", - order = "d", - --main_product = "", - results= - { - {type="item", name="35%-uranium", amount=2}, - {type="item", name="20%-uranium", amount=1}, - {type="item", name="uranium-238", amount=2} - }, - allow_decomposition = false - }, - { - type = "recipe", - name = "clowns-centrifuging-20%-ore", - energy_required = energy, - enabled = false, - category = "centrifuging", - ingredients = {{"uranium-ore", 60}}, - icons = - { - { - icon = "__Clowns-Nuclear__/graphics/icons/1.png", - icon_size = 64, - icon_mipmaps = 4, - scale = 0.5, - shift = {0, 0}, - }, - { - icon = "__base__/graphics/icons/uranium-ore.png", - icon_size=64, - scale = 0.25, - shift = {-8, -8}, - }, - - }, - icon_size = 32, - subgroup = "clowns-uranium-centrifuging", - order = "b", - results= - { - {type="item", name="20%-uranium", amount=2}, - {type="item", name="uranium-238", amount=4} - }, - allow_decomposition = false - }, - -} -) diff --git a/Clowns-Processing/changelog.txt b/Clowns-Processing/changelog.txt new file mode 100644 index 00000000..72e93a59 --- /dev/null +++ b/Clowns-Processing/changelog.txt @@ -0,0 +1,201 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.3.16 +Date: 2021-08-10 + Features: + - Updated to angels new patch (refining 0.12) + - Small tweaks and updates + - More properties cleaned up +--------------------------------------------------------------------------------------------------- +Version: 1.3.15 +Date: 2021-05-27 + Features: + - Removed superfluous setting regarding stack size for tiles. + - Actually taken care of in angelsrefining + - Piercing round tech fix + - Fixed angels special vanilla conditions + - Added Osmium Tipped Bullets as a use for Osmium + - More icon fixes +--------------------------------------------------------------------------------------------------- +Version: 1.3.14 +Date: 2020-11-24 + Features: + - Updated to version 1.1 + - Tweaked the garden creation recipes to be researched a tad later + - when you first get access to soil and fertiliser +--------------------------------------------------------------------------------------------------- +Version: 1.3.13 + Features: + - Quickpatch of Phosphoric acid recipe interferring with pyanodons variant + - (for those so inclined) + - Moved garden "spawning" from soil/fertiliser/fluid recipes to use the farm buildings +--------------------------------------------------------------------------------------------------- +Version: 1.3.12 + Features: + - Adjusted the garden mutation recipes and added some garden generation recipes + - Delinked from bobmods, so this can be run in vanilla or pure angels + Bugfixes: + - File consolidation if items and recipes, too many single table files for my liking + - Fixed a few recipe order and icon issues + - Moved some things that should have been in the extended materials mod to not be in this one +--------------------------------------------------------------------------------------------------- +Version: 1.3.11 + Features: + - Prepared for updates to angels industries + Bugfixes: + - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer +--------------------------------------------------------------------------------------------------- +Version: 1.3.10 + Features: + - Updated number icons to reference angels refining not petrochem (in prep for incoming update) + - Added a setting to disable the centrifuges (if you want to use bobs instead) + - Removed a few group shuffling settings which should be redundant + - (may put them back in if needed) + - Updated armor location back to default if that setting is off +--------------------------------------------------------------------------------------------------- +Version: 1.3.9 + Features: + - Updated the neurotoxin capsule to replicate the fog of the poison capsule + - Updated fluid icons and recipes to use Angel's(Santa's) new icon scripts + - Small fixes and clean-ups +--------------------------------------------------------------------------------------------------- +Version: 1.3.8 + Features: + - Updated to work with angels updates +--------------------------------------------------------------------------------------------------- +Version: 1.3.7 + Bugfixes: + - Fixed Missing localisation for the new Sluicer + - Fixed the pure sorting recipe times (properly this time) + - Updated to 0.18 +--------------------------------------------------------------------------------------------------- +Version: 1.3.6 + Bugfixes: + - Fixed an overzealous attempt at fixing setting callbacks in 1.3.5 +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 + Bugfixes: + - Fixed the pure sorting recipe times (fix thanks to hexagonhexagon) + - I honestly thought this was already fixed + - Fixed setting call checks +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 + Bugfixes: + - Added thumbnail + - Fixed formatting of changelog + Features: + - Added T2 Sluicer +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 + Bugfixes: + - Fixed bug related to bobs equipment split from bob warfare + Features: + - Added a fix to de-couple from angels bioprocessing (not fully tested) + - Known problem: white phosphorus is used in smelting bronze, phosphoric acid is a dead end (for now) +--------------------------------------------------------------------------------------------------- +Version: 1.3.2: + Features: + - Updated for 0.17 +--------------------------------------------------------------------------------------------------- +Version: 1.3.1: + Features: + - Added magnesium pure processing & a more intricate smelting process + - Thanks heaps to Pez for the input! +--------------------------------------------------------------------------------------------------- +Version: 1.3.0: + Features: + - Added advanced desalination recipes for collecting magnesium ore +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 + Bugfixes: + - Fixed cleanup toggles not working +--------------------------------------------------------------------------------------------------- +Version: 1.2.7: + Features: + - Added German locale thanks to Steino + - Accidentally released magnesium :P +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 + Bugfixes: + - Geniunely not sure if anything actually changed... +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 + Bugfixes: + - Bug fixes +--------------------------------------------------------------------------------------------------- +Version: 1.2.4: + Features: + - Added support for productivity effects +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 + Bugfixes: + - Bug fixes + Features: + - Added optional Fortifications and Equipment groups + - Added override to move Bob's Gems & Bob's Fluids into Bob's Materials & Intermediates +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 + Bugfixes: + - Bug fixes +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 + Bugfixes: + - Bug fixes +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 + Features: + - Added new pure processing recipes + - Added an override to give SpaceMod components their own subgroup + - Added advanced centrifuging + - Updated fluorine icon + Balancing: + - Rebalanced uranium processing +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 + Features: + - Added osmium, depleted uranium & related powder metallurgy + - Added optional settings to replace ingredients in military recipes from U-238 to depleted uranium + Bugfixes: + - Updated some Vanilla & Angels locale appropriately +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 + Balancing: + - Rebalanced sand sluicing + - Rebalanced phosphorus processing + - Fixed phosphorus tech being unlocked from game start + Features: + - Added advanced phosphorus processing + - Added an opt-in override to set vanilla tile size to 1000 to match Angel's tile stack sizes + - Added mercury processing technology + - Added dimethylmercury (neurotoxin) refining + - Added neurotoxin capsule + - Updated graphics, added some optional general gamedata tweaks, off by default + - Code brought into line with other MadClown01 mods +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 + Features: + - Updated locale, updated phosphorus ore icon +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 + Balancing: + - Rebalanced crafting times for crushed stone sorting, all intermediate uranium processing +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 + Features: + - Updated locale +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 + Features: + - Added phosphorus processing + - Added original icons for advanced uranium processing +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 + Bugfixes: + - Fixed minor bugs +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 + Bugfixes: + - Fixed minor bugs +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 + Features: + - Initial release diff --git a/Clowns-Processing_1.3.21/data-updates.lua b/Clowns-Processing/data-updates.lua similarity index 100% rename from Clowns-Processing_1.3.21/data-updates.lua rename to Clowns-Processing/data-updates.lua diff --git a/Clowns-Processing/data.lua b/Clowns-Processing/data.lua new file mode 100644 index 00000000..fa61b48f --- /dev/null +++ b/Clowns-Processing/data.lua @@ -0,0 +1,56 @@ +-- function to know if this is special vanilla or not (DUPLICATE OF ANGELS, since this mod seems to be calling it earlier) +if not clowns then clowns={} end +if not clowns.functions then clowns.functions={} end +if not clowns.tables then clowns.tables ={} end +--check vanilla settings +clowns.special_vanilla = true --assume true, then find out if false +for ore_name, ore_enabled in pairs(angelsmods.trigger.ores or {}) do + if ore_enabled and ore_name ~= "iron" and ore_name ~= "copper" and ore_name ~= "uranium" then + clowns.special_vanilla = false + end +end +if mods["pyrawores"] then --force full mode + clowns.special_vanilla = false +end + + +require("prototypes.categories") + +-- ITEMS +-- vanilla-items include things for angels-refining,smelting and petrochem +require("prototypes.buildings.sluicer") +require("prototypes.buildings.centrifuge")--active if setting + +require("prototypes.items.vanilla-items") +require("prototypes.items.neurotoxin") +--angelsbioprocessing +require("prototypes.items.angels-bioprocessing") +--angelsindustries +--bobs + +--RECIPES +--vanilla +require("prototypes.recipes.vanilla-recipes") +require("prototypes.recipes.angels-smelting") +require("prototypes.recipes.petrochem") +--angelsbioprocessing +require("prototypes.recipes.angels-bioprocessing") +--bobs +require("prototypes.recipes.bobs") + + +--if mods["angelsbioprocessing"] then +require("prototypes.technology.gardens") +--end +require("prototypes.technology.magnesium") +require("prototypes.technology.depleted-uranium") +require("prototypes.technology.osmium") +require("prototypes.technology.uranium") +require("prototypes.technology.mercury") +--if settings.startup["MCP_enable_centrifuges"].value then +require("prototypes.technology.centrifuging") +--end +require("prototypes.technology.salination") +require("prototypes.technology.phosphorus") + +require("prototypes.overrides") diff --git a/Clowns-Processing_1.3.21/graphics/entity/sluicer.png b/Clowns-Processing/graphics/entity/sluicer.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/entity/sluicer.png rename to Clowns-Processing/graphics/entity/sluicer.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/Depleted Uranium Colourisation.txt b/Clowns-Processing/graphics/icons/Depleted Uranium Colourisation.txt similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/Depleted Uranium Colourisation.txt rename to Clowns-Processing/graphics/icons/Depleted Uranium Colourisation.txt diff --git a/Clowns-Processing_1.3.21/graphics/icons/Magnesium Colourisation.txt b/Clowns-Processing/graphics/icons/Magnesium Colourisation.txt similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/Magnesium Colourisation.txt rename to Clowns-Processing/graphics/icons/Magnesium Colourisation.txt diff --git a/Clowns-Processing_1.3.21/graphics/icons/Osmium Colourisation.txt b/Clowns-Processing/graphics/icons/Osmium Colourisation.txt similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/Osmium Colourisation.txt rename to Clowns-Processing/graphics/icons/Osmium Colourisation.txt diff --git a/Clowns-Processing_1.3.21/graphics/icons/advanced-uranium-processing.png b/Clowns-Processing/graphics/icons/advanced-uranium-processing.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/advanced-uranium-processing.png rename to Clowns-Processing/graphics/icons/advanced-uranium-processing.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/advsorting-overlay.png b/Clowns-Processing/graphics/icons/advsorting-overlay.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/advsorting-overlay.png rename to Clowns-Processing/graphics/icons/advsorting-overlay.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/boric-acid.png b/Clowns-Processing/graphics/icons/boric-acid.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/boric-acid.png rename to Clowns-Processing/graphics/icons/boric-acid.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/catalyst-metal-violet.png b/Clowns-Processing/graphics/icons/catalyst-metal-violet.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/catalyst-metal-violet.png rename to Clowns-Processing/graphics/icons/catalyst-metal-violet.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/fluorine.png b/Clowns-Processing/graphics/icons/fluorine.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/fluorine.png rename to Clowns-Processing/graphics/icons/fluorine.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/icon4.png b/Clowns-Processing/graphics/icons/icon4.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/icon4.png rename to Clowns-Processing/graphics/icons/icon4.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/icons5.png b/Clowns-Processing/graphics/icons/icons5.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/icons5.png rename to Clowns-Processing/graphics/icons/icons5.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/icons6.png b/Clowns-Processing/graphics/icons/icons6.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/icons6.png rename to Clowns-Processing/graphics/icons/icons6.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/icons7.png b/Clowns-Processing/graphics/icons/icons7.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/icons7.png rename to Clowns-Processing/graphics/icons/icons7.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/ingot-magnesium.png b/Clowns-Processing/graphics/icons/ingot-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/ingot-magnesium.png rename to Clowns-Processing/graphics/icons/ingot-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/liquid-clowns-resource4.png b/Clowns-Processing/graphics/icons/liquid-clowns-resource4.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/liquid-clowns-resource4.png rename to Clowns-Processing/graphics/icons/liquid-clowns-resource4.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/liquid-dimethylmercury.png b/Clowns-Processing/graphics/icons/liquid-dimethylmercury.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/liquid-dimethylmercury.png rename to Clowns-Processing/graphics/icons/liquid-dimethylmercury.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/liquid-mercury.png b/Clowns-Processing/graphics/icons/liquid-mercury.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/liquid-mercury.png rename to Clowns-Processing/graphics/icons/liquid-mercury.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/magnesium-ore.png b/Clowns-Processing/graphics/icons/magnesium-ore.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/magnesium-ore.png rename to Clowns-Processing/graphics/icons/magnesium-ore.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/molten-magnesium.png b/Clowns-Processing/graphics/icons/molten-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/molten-magnesium.png rename to Clowns-Processing/graphics/icons/molten-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/neurotoxin-capsule.png b/Clowns-Processing/graphics/icons/neurotoxin-capsule.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/neurotoxin-capsule.png rename to Clowns-Processing/graphics/icons/neurotoxin-capsule.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/num_6.png b/Clowns-Processing/graphics/icons/num_6.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/num_6.png rename to Clowns-Processing/graphics/icons/num_6.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/osmium-ore.png b/Clowns-Processing/graphics/icons/osmium-ore.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/osmium-ore.png rename to Clowns-Processing/graphics/icons/osmium-ore.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/osmium-rounds-magazine.png b/Clowns-Processing/graphics/icons/osmium-rounds-magazine.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/osmium-rounds-magazine.png rename to Clowns-Processing/graphics/icons/osmium-rounds-magazine.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/pellet-depleted-uranium.png b/Clowns-Processing/graphics/icons/pellet-depleted-uranium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/pellet-depleted-uranium.png rename to Clowns-Processing/graphics/icons/pellet-depleted-uranium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/pellet-magnesium.png b/Clowns-Processing/graphics/icons/pellet-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/pellet-magnesium.png rename to Clowns-Processing/graphics/icons/pellet-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/pellet-osmium.png b/Clowns-Processing/graphics/icons/pellet-osmium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/pellet-osmium.png rename to Clowns-Processing/graphics/icons/pellet-osmium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/phosphoric-acid.png b/Clowns-Processing/graphics/icons/phosphoric-acid.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/phosphoric-acid.png rename to Clowns-Processing/graphics/icons/phosphoric-acid.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/phosphorus-ore.png b/Clowns-Processing/graphics/icons/phosphorus-ore.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/phosphorus-ore.png rename to Clowns-Processing/graphics/icons/phosphorus-ore.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/plate-depleted-uranium.png b/Clowns-Processing/graphics/icons/plate-depleted-uranium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/plate-depleted-uranium.png rename to Clowns-Processing/graphics/icons/plate-depleted-uranium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/plate-magnesium.png b/Clowns-Processing/graphics/icons/plate-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/plate-magnesium.png rename to Clowns-Processing/graphics/icons/plate-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/plate-osmium.png b/Clowns-Processing/graphics/icons/plate-osmium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/plate-osmium.png rename to Clowns-Processing/graphics/icons/plate-osmium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/powder-depleted-uranium.png b/Clowns-Processing/graphics/icons/powder-depleted-uranium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/powder-depleted-uranium.png rename to Clowns-Processing/graphics/icons/powder-depleted-uranium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/powder-osmium.png b/Clowns-Processing/graphics/icons/powder-osmium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/powder-osmium.png rename to Clowns-Processing/graphics/icons/powder-osmium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/processed-depleted-uranium.png b/Clowns-Processing/graphics/icons/processed-depleted-uranium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/processed-depleted-uranium.png rename to Clowns-Processing/graphics/icons/processed-depleted-uranium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/processed-magnesium.png b/Clowns-Processing/graphics/icons/processed-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/processed-magnesium.png rename to Clowns-Processing/graphics/icons/processed-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/processed-osmium.png b/Clowns-Processing/graphics/icons/processed-osmium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/processed-osmium.png rename to Clowns-Processing/graphics/icons/processed-osmium.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/sluicer.png b/Clowns-Processing/graphics/icons/sluicer.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/sluicer.png rename to Clowns-Processing/graphics/icons/sluicer.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-ammonium-diuranate.png b/Clowns-Processing/graphics/icons/solid-ammonium-diuranate.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-ammonium-diuranate.png rename to Clowns-Processing/graphics/icons/solid-ammonium-diuranate.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-uranium-hexafluoride.png b/Clowns-Processing/graphics/icons/solid-uranium-hexafluoride.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-uranium-hexafluoride.png rename to Clowns-Processing/graphics/icons/solid-uranium-hexafluoride.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-uranium-oxide.png b/Clowns-Processing/graphics/icons/solid-uranium-oxide.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-uranium-oxide.png rename to Clowns-Processing/graphics/icons/solid-uranium-oxide.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-uranium-tetrafluoride.png b/Clowns-Processing/graphics/icons/solid-uranium-tetrafluoride.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-uranium-tetrafluoride.png rename to Clowns-Processing/graphics/icons/solid-uranium-tetrafluoride.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-uranyl-nitrate.png b/Clowns-Processing/graphics/icons/solid-uranyl-nitrate.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-uranyl-nitrate.png rename to Clowns-Processing/graphics/icons/solid-uranyl-nitrate.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/solid-white-phosphorus.png b/Clowns-Processing/graphics/icons/solid-white-phosphorus.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/solid-white-phosphorus.png rename to Clowns-Processing/graphics/icons/solid-white-phosphorus.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/sorting.png b/Clowns-Processing/graphics/icons/sorting.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/sorting.png rename to Clowns-Processing/graphics/icons/sorting.png diff --git a/Clowns-Processing_1.3.21/graphics/icons/uranium-processing.png b/Clowns-Processing/graphics/icons/uranium-processing.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/icons/uranium-processing.png rename to Clowns-Processing/graphics/icons/uranium-processing.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/advanced-centrifuging.png b/Clowns-Processing/graphics/technology/advanced-centrifuging.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/advanced-centrifuging.png rename to Clowns-Processing/graphics/technology/advanced-centrifuging.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/advanced-uranium-processing.png b/Clowns-Processing/graphics/technology/advanced-uranium-processing.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/advanced-uranium-processing.png rename to Clowns-Processing/graphics/technology/advanced-uranium-processing.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/mercury-tech-2.png b/Clowns-Processing/graphics/technology/mercury-tech-2.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/mercury-tech-2.png rename to Clowns-Processing/graphics/technology/mercury-tech-2.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/mercury-tech.png b/Clowns-Processing/graphics/technology/mercury-tech.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/mercury-tech.png rename to Clowns-Processing/graphics/technology/mercury-tech.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/nuclear-fuel.png b/Clowns-Processing/graphics/technology/nuclear-fuel.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/nuclear-fuel.png rename to Clowns-Processing/graphics/technology/nuclear-fuel.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/phosphorus-tech-2.png b/Clowns-Processing/graphics/technology/phosphorus-tech-2.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/phosphorus-tech-2.png rename to Clowns-Processing/graphics/technology/phosphorus-tech-2.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/phosphorus-tech.png b/Clowns-Processing/graphics/technology/phosphorus-tech.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/phosphorus-tech.png rename to Clowns-Processing/graphics/technology/phosphorus-tech.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/radiothermal-fuel.png b/Clowns-Processing/graphics/technology/radiothermal-fuel.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/radiothermal-fuel.png rename to Clowns-Processing/graphics/technology/radiothermal-fuel.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/smelting-depleted-uranium.png b/Clowns-Processing/graphics/technology/smelting-depleted-uranium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/smelting-depleted-uranium.png rename to Clowns-Processing/graphics/technology/smelting-depleted-uranium.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/smelting-magnesium.png b/Clowns-Processing/graphics/technology/smelting-magnesium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/smelting-magnesium.png rename to Clowns-Processing/graphics/technology/smelting-magnesium.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/smelting-osmium.png b/Clowns-Processing/graphics/technology/smelting-osmium.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/smelting-osmium.png rename to Clowns-Processing/graphics/technology/smelting-osmium.png diff --git a/Clowns-Processing_1.3.21/graphics/technology/u.png b/Clowns-Processing/graphics/technology/u.png similarity index 100% rename from Clowns-Processing_1.3.21/graphics/technology/u.png rename to Clowns-Processing/graphics/technology/u.png diff --git a/Clowns-Processing/info.json b/Clowns-Processing/info.json new file mode 100644 index 00000000..5ffa4e18 --- /dev/null +++ b/Clowns-Processing/info.json @@ -0,0 +1,20 @@ +{ + "name": "Clowns-Processing", + "version": "1.3.23", + "factorio_version": "1.1", + "title": "MadClown01's Processing", + "author": "MadClown01,Pezzawinkle", + "contact": "", + "homepage": "https://forums.factorio.com/viewtopic.php?f=185&t=57861", + "description": "Crafting base for other MadClown01 mods. Adds many new production chains including sand sluicing, advanced mercury, fluorine, phosphorus & uranium processing, garden generation, neurotoxin production and catalytic electrolysis / filtering. Requires all Angel's mods.", + "dependencies": [ + "angelsrefining >= 0.12.1", + "angelspetrochem >= 0.9.20", + "angelssmelting >= 0.6.17", + "? angelsindustries >= 0.4.14", + "? angelsbioprocessing >= 0.7.20", + "? bobplates >= 0.18.0", + "(?) bobwarfare >= 0.18.0", + "(?) bobequipment >=0.18.0" + ] +} diff --git a/Clowns-Processing/locale/en/en.cfg b/Clowns-Processing/locale/en/en.cfg new file mode 100644 index 00000000..0f44fabb --- /dev/null +++ b/Clowns-Processing/locale/en/en.cfg @@ -0,0 +1,132 @@ +centrifuge=Centrifuge __1__ + +[item-group-name] +fortifications=Fortifications +equipment=Equipment +combat=Weaponry + +[entity-name] +sluicer=Sluicer MK1 +sluicer-2=Sluicer MK2 +neurotoxin-cloud=Neurotoxin cloud + +[fluid-name] +liquid-mercury=Mercury +liquid-phosphoric-acid=Phosphoric Acid +gas-fluorine=Fluorine Gas +liquid-dimethylmercury=Dimethylmercury +liquid-molten-magnesium=Molten Magnesium + +water-radioactive-waste=Radioactive Waste Water + +[item-name] +solid-uranium-hexafluoride=Uranium Hexafluoride +solid-uranium-tetrafluoride=Uranium Tetrafluoride +solid-uranium-oxide=Uranium Oxide +solid-ammonium-diuranate=Ammonium Diuranate +solid-uranyl-nitrate=Uranyl Nitrate + +osmium-ore=Osmium Ore +processed-osmium=Processed Osmium +pellet-osmium=Osmium Pellet +powder-osmium=Osmium Powder +casting-powder-osmium=Osmium Mixing Powder +clowns-plate-osmium=Osmium Plate +osmium-rounds-magazine=Osmium Rounds Magazine + +processed-depleted-uranium=Processed Depleted Uranium +pellet-depleted-uranium=Depleted Uranium Pellet +powder-depleted-uranium=Depleted Uranium Powder +casting-powder-depleted-uranium=Depleted Uranium Mixing Powder +clowns-plate-depleted-uranium=Depleted Uranium Plate + +magnesium-ore=Magnesium Ore +processed-magnesium=Processed Magnesium +pellet-magnesium=Magnesium Pellet +ingot-magnesium=Magnesium Ingot +clowns-plate-magnesium=Magnesium Plate + +explosive-uranium-cannon-shell=Explosive Depleted Uranium Cannon Shell +uranium-cannon-shell=Depleted Uranium Cannon Shell + +shotgun-uranium-shell=Shotgun Depleted Uranium Shells +uranium-bullet-projectile=Depleted Uranium Bullet Projectile +uranium-bullet=Depleted Uranium Bullet + +powder-aluminium=Aluminium Powder + +phosphorus-ore=Phosphorus Ore +solid-white-phosphorus=White Phosphorus + +catalyst-metal-violet=Violet Metal Catalyst +neurotoxin-capsule=Neurotoxin capsule + +sluicer=Sluicer MK1 +sluicer-2=Sluicer MK2 + +[recipe-name] + +dimethylmercury-synthesis=Dimethylmercury Synthesis + +temperate-garden-mutation=Temperate Garden Mutation +desert-garden-mutation=Desert Garden Mutation +swamp-garden-mutation=Swamp Garden Mutation +clowns-tree-generation=Grow Specialist Trees from Seeds + +advanced-uranium-processing=Advanced Uranium Processing + +thermal-filtering-mercury=Thermal to Mercury Filtering +intermediate-salination=Intermediate Desalination +advanced-salination=Advanced Desalination + +sand-sluicing=Sand Sluicing + +catalytic-water-separation-hydrogen=Catalytic Purified Water Electrolysis: Hydrogen Gas +catalytic-water-separation-oxygen=Catalytic Purified Water Electrolysis: Oxygen Gas +catalytic-air-separation-oxygen=Catalytic Air Separation: Oxygen Gas +catalytic-air-separation-nitrogen=Catalytic Air Separation: Nitrogen Gas +hydrochloric-acid-separation=Hydrochloric Acid Electrolysis: Chlorine, Hydrogen +hydrofluoric-acid-separation=Hydrofluoric Acid Electrolysis: Fluorine, Hydrogen + +crushed-stone-sorting=Crushed Stone Sorting +white-phosphorus-smelting=White Phosphorus Smelting +phosphoric-acid-1=Phosphoric Acid Synthesis +diammonium-phosphate-fertilizer=Diammonium Phosphate Fertilizer + +magnesium-pellet-smelting=Magnesium Ingot + +sluicer=Sluicer MK1 +sluicer-2=Sluicer MK2 + +[technology-name] + +advanced-uranium-processing=Advanced Uranium Processing +advanced-magnesium-smelting=Advanced Magnesium Smelting +advanced-osmium-smelting=Advanced Osmium Smelting +advanced-depleted-uranium-smelting=Advanced Depleted Uranium Smelting +phosphorus-processing=Phosphorus Processing +mercury-processing=Mercury Processing +garden-mutation=Garden Mutation +centrifuging=Advanced Centrifuging + +[item-description] + +sluicer=Can stick your fingers in. Sort ores from sand +sluicer-2=Can stick your fingers in. Sort ores from sand + +[mod-setting-name] +depleted-uranium=Enable Depleted Uranium +gem-cleanup=Gem Cleanup +fluid-cleanup=Fluid Cleanup +equipment-group=Equipment Group +fortifications-group=Fortifications Group +bob-bullet-override=Remove Bob's Bullets +MCP_enable_centrifuges=Enable MK2 and MK3 centrifuges + +[mod-setting-description] +depleted-uranium=Adds Depleted Uranium processing, and adjusts vanilla & bobwarefare recipes accordingly. True by default. +gem-cleanup=Removes the Bob's Gemstones group, transferring items to Bob's Materials & Intermediates. True by default. +fluid-cleanup=Removes the Bob's Fluids group, transferring items to Bob's Materials & Intermediates. True by default. +equipment-group=Adds a group for equipment. True by default. +fortifications-group=Adds a group for fortifications. True by default. +bob-bullet-override=True by default. diff --git a/Clowns-Processing_1.3.21/prototypes/buildings/centrifuge.lua b/Clowns-Processing/prototypes/buildings/centrifuge.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/buildings/centrifuge.lua rename to Clowns-Processing/prototypes/buildings/centrifuge.lua diff --git a/Clowns-Processing_1.3.21/prototypes/buildings/sluicer.lua b/Clowns-Processing/prototypes/buildings/sluicer.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/buildings/sluicer.lua rename to Clowns-Processing/prototypes/buildings/sluicer.lua diff --git a/Clowns-Processing/prototypes/categories.lua b/Clowns-Processing/prototypes/categories.lua new file mode 100644 index 00000000..ad7c0cfa --- /dev/null +++ b/Clowns-Processing/prototypes/categories.lua @@ -0,0 +1,253 @@ +data:extend( +{ + { + type = "recipe-category", + name = "sluicing" + }, + --Most intermediates (raw material subgroup) seem to be like aa or something similar + { + type = "item-subgroup", + name = "spacex", + group = "intermediate-products", + order = "b-c", + }, + { + type = "item-group", + name = "equipment", + order = "k", + icon = "__base__/graphics/technology/armor-making.png", + icon_size = 256, + icon_mipmaps = 4 + }, + { + type = "item-group", + name = "fortifications", + order = "k", + icon = "__base__/graphics/technology/gate.png", + icon_size = 256, + icon_mipmaps = 4 + }, + { + type = "item-subgroup", + name = "walls", + group = "fortifications", + order = "a-a", + }, + { + type = "item-subgroup", + name = "armor", + group = "equipment", + order = "a", + }, + { + type = "item-subgroup", + name = "power", + group = "equipment", + order = "b-a", + }, + { + type = "item-subgroup", + name = "batteries", + group = "equipment", + order = "b-b", + }, + { + type = "item-subgroup", + name = "shields", + group = "equipment", + order = "b-c", + }, + { + type = "item-subgroup", + name = "personal-laser-defences", + group = "equipment", + order = "b-d", + }, + { + type = "item-subgroup", + name = "misc1", + group = "equipment", + order = "b-e-a", + }, + { + type = "item-subgroup", + name = "misc2", + group = "equipment", + order = "b-e-b", + }, + { + type = "item-subgroup", + name = "vehicle-power1",--solar + group = "equipment", + order = "c-a-a", + }, + { + type = "item-subgroup", + name = "vehicle-power2",--fusion cell + group = "equipment", + order = "c-a-b", + }, + { + type = "item-subgroup", + name = "vehicle-power3",--fusion reactor + group = "equipment", + order = "c-a-c", + }, + { + type = "item-subgroup", + name = "vehicle-batteries", + group = "equipment", + order = "c-b", + }, + { + type = "item-subgroup", + name = "vehicle-shields", + group = "equipment", + order = "c-c", + }, + { + type = "item-subgroup", + name = "vehicle-personal-laser-defences", + group = "equipment", + order = "c-d-a", + }, + { + type = "item-subgroup", + name = "vehicle-plasma-cannons", + group = "equipment", + order = "c-d-b", + }, + { + type = "item-subgroup", + name = "vehicle-misc1", + group = "equipment", + order = "c-e-a", + }, + { + type = "item-subgroup", + name = "vehicle-misc2", + group = "equipment", + order = "c-e-b", + }, + { + type = "item-subgroup", + name = "mines", + group = "fortifications", + order = "a-b", + }, + { + type = "item-subgroup", + name = "gun-turrets", + group = "fortifications", + order = "b-a", + }, + { + type = "item-subgroup", + name = "sniper-turrets", + group = "fortifications", + order = "b-b", + }, + { + type = "item-subgroup", + name = "fluid-turrets", + group = "fortifications", + order = "b-f", + }, + { + type = "item-subgroup", + name = "rocket-turrets", + group = "fortifications", + order = "b-d", + }, + { + type = "item-subgroup", + name = "cannon-turrets", + group = "fortifications", + order = "b-e", + }, + { + type = "item-subgroup", + name = "laser-turrets", + group = "fortifications", + order = "b-c", + }, + { + type = "item-subgroup", + name = "artillery", + group = "fortifications", + order = "b-e", + }, + { + type = "item-subgroup", + name = "radar", + group = "fortifications", + order = "c", + }, + { + type = "item-subgroup", + name = "rocket", + group = "fortifications", + order = "d", + }, + { + type = "item-subgroup", + name = "clowns-depleted-uranium", + group = "angels-smelting", + order = "ea",--Just after angels-copper (e) + }, + { + type = "item-subgroup", + name = "clowns-magnesium", + group = "angels-smelting", + order = "ha",--Just after angels-lead (h) + }, + { + type = "item-subgroup", + name = "clowns-osmium", + group = "angels-smelting", + order = "ja",--Just after angels-nickel (j) + }, + { + type = "item-subgroup", + name = "clowns-phosphorus", + group = "angels-smelting", + order = "jb", + }, + { + type = "item-subgroup", + name = "clowns-uranium", + group = "angels-smelting", + order = "pa", + }, + { + type = "item-subgroup", + name = "clowns-magnesium-casting", + group = "angels-casting", + order = "ha", + }, + { + type = "item-subgroup", + name = "clowns-osmium-casting", + group = "angels-casting", + order = "ja", + }, + { + type = "item-subgroup", + name = "clowns-depleted-uranium-casting", + group = "angels-casting", + order = "ea", + }, + { + type = "item-subgroup", + name = "clowns-electrolysis", + group = "petrochem-refining", + order = "caa", + }, + { + type = "item-subgroup", + name = "clown-ores", + group = "resource-refining", + order = "ac", + }, +} +) \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/group-updates.lua b/Clowns-Processing/prototypes/group-updates.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/group-updates.lua rename to Clowns-Processing/prototypes/group-updates.lua diff --git a/Clowns-Processing/prototypes/items/angels-bioprocessing.lua b/Clowns-Processing/prototypes/items/angels-bioprocessing.lua new file mode 100644 index 00000000..ae745c88 --- /dev/null +++ b/Clowns-Processing/prototypes/items/angels-bioprocessing.lua @@ -0,0 +1,24 @@ +if mods["angelsbioprocessing"] then + data:extend( +{ + { + type = "item", + name = "algae-orange", + icon = "__angelsbioprocessing__/graphics/icons/algae-brown.png", + icon_size = 32, + subgroup = "bio-processing-brown", + order = "a", + stack_size = 200 + }, + { + type = "item", + name = "algae-violet", + icon = "__angelsbioprocessing__/graphics/icons/algae-brown.png", + icon_size = 32, + subgroup = "bio-processing-brown", + order = "a", + stack_size = 200 + }, +} +) +end \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/items/neurotoxin.lua b/Clowns-Processing/prototypes/items/neurotoxin.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/items/neurotoxin.lua rename to Clowns-Processing/prototypes/items/neurotoxin.lua diff --git a/Clowns-Processing_1.3.21/prototypes/items/vanilla-items.lua b/Clowns-Processing/prototypes/items/vanilla-items.lua similarity index 94% rename from Clowns-Processing_1.3.21/prototypes/items/vanilla-items.lua rename to Clowns-Processing/prototypes/items/vanilla-items.lua index 237cbe43..0a06d3bc 100644 --- a/Clowns-Processing_1.3.21/prototypes/items/vanilla-items.lua +++ b/Clowns-Processing/prototypes/items/vanilla-items.lua @@ -47,7 +47,7 @@ data:extend( { type = "item", name = "casting-powder-depleted-uranium", - icon = "__Clowns-Processing__/graphics/icons/powder-depleted-uranium-mix.png", + icon = "__Clowns-Processing__/graphics/icons/powder-depleted-uranium.png", icon_size = 32, subgroup = "clowns-depleted-uranium", order = "d", @@ -105,11 +105,11 @@ data:extend( { type = "fluid", name = "liquid-mercury", - icons = angelsmods.functions.create_viscous_liquid_fluid_icon({icon="__Clowns-Processing__/graphics/icons/Numbers/Hg.png", icon_size=32, icon_mipmaps=2}, - { { 184, 184, 208 },{ 184, 184, 208 },{ 184, 184, 208 } }),--"__Clowns-Processing__/graphics/icons/liquid-mercury.png", + icon = "__Clowns-Processing__/graphics/icons/liquid-mercury.png", + icon_size = 32, default_temperature = 25, heat_capacity = "0.1KJ", - base_color = { 184, 184, 208 }, + base_color = {r = 0.75, g = 0.75, b = 0.75}, flow_color = {r = 0.8, g = 0.8, b = 0}, max_temperature = 100, }, @@ -117,12 +117,11 @@ data:extend( { type = "fluid", name = "liquid-dimethylmercury", - icons = angelsmods.functions.create_viscous_liquid_fluid_icon(nil,{ { 118, 141, 138 },{ 94, 113, 110 },{ 94, 113, 110 } }),--"__Clowns-Processing__/graphics/icons/liquid-mercury.png", - --icon = "__Clowns-Processing__/graphics/icons/liquid-dimethylmercury.png", - --icon_size = 32, + icon = "__Clowns-Processing__/graphics/icons/liquid-dimethylmercury.png", + icon_size = 32, default_temperature = 25, heat_capacity = "0.1KJ", - base_color = { 118, 141, 138 }, + base_color = {r = 0.1, g = 0.8, b = 0.7}, flow_color = {r = 0.1, g = 0.8, b = 0.7}, max_temperature = 100, }, diff --git a/Clowns-Processing_1.3.21/prototypes/overrides.lua b/Clowns-Processing/prototypes/overrides.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/overrides.lua rename to Clowns-Processing/prototypes/overrides.lua diff --git a/Clowns-Processing/prototypes/recipes/angels-bioprocessing.lua b/Clowns-Processing/prototypes/recipes/angels-bioprocessing.lua new file mode 100644 index 00000000..eae76d66 --- /dev/null +++ b/Clowns-Processing/prototypes/recipes/angels-bioprocessing.lua @@ -0,0 +1,235 @@ +if mods["angelsbioprocessing"] then + data:extend( +{ + ----------- + -- Algae -- + ----------- + --Orange + { + type = "recipe", + name = "algae-orange", + category = "bio-processing", + subgroup = "bio-processing-green", + enabled = false, + energy_required = 20, + ingredients = + { + {type="fluid", name="water-mineralized", amount=100}, + {type="fluid", name="gas-carbon-dioxide", amount=100} + }, + results= + { + {type="item", name="algae-orange", amount=40}, + }, + icon = "__angelsbioprocessing__/graphics/icons/algae-green.png", + icon_size = 32, + order = "a", + }, + --Violet + { + type = "recipe", + name = "algae-violet", + category = "bio-processing", + subgroup = "bio-processing-green", + enabled = false, + energy_required = 20, + ingredients = + { + {type="fluid", name="water-mineralized", amount=100}, + {type="fluid", name="gas-carbon-dioxide", amount=100} + }, + results= + { + {type="item", name="algae-violet", amount=40}, + }, + icon = "__angelsbioprocessing__/graphics/icons/algae-green.png", + icon_size = 32, + order = "a", + }, + --Mercury from Violet + { + type = "recipe", + name = "methylmercury-algae", + category = "liquifying", + subgroup = "bio-processing-green", + enabled = false, + energy_required = 3, + ingredients ={ + {type="item", name="algae-violet", amount=10}, + }, + results= + { + {type="fluid", name="liquid-dimethylmercury", amount=2}, + }, + icon = "__angelsbioprocessing__/graphics/icons/cellulose-fiber-algae.png", + icon_size = 32, + order = "b [cellulose-fiber-algae]", + }, + ------------- + -- Gardens -- + ------------- + --swamp from soil + { + type = "recipe", + name = "swamp-garden-generation", + icon = "__angelsbioprocessing__/graphics/icons/swamp-garden.png", + icon_size = 32, + category = "swamp-farming", + subgroup = "farming-swamp-seed", + order = "g[temperate-garden-generation]-c", + energy_required = 600, + enabled = false, + ingredients = + { + {type = "item", name = "solid-soil", amount = 1000}, + {type = "fluid", name = "water-viscous-mud", amount = 1000}, + {type = "item", name = "solid-fertilizer", amount = 200} + }, + results = + { + {type = "item", name = "swamp-garden", amount = 1} + }, + }, + + --temperate from soil + { + type = "recipe", + name = "temperate-garden-generation", + category = "temperate-farming", + subgroup = "farming-temperate-seed", + enabled = false, + energy_required = 1000, + ingredients = + { + {type = "item", name = "solid-compost", amount = 500}, + {type = "fluid", name = "water", amount = 1000}, + {type = "item", name = "solid-fertilizer", amount = 500} + }, + results= + { + {type = "item", name = "temperate-garden", amount = 1} + }, + icon = "__angelsbioprocessing__/graphics/icons/temperate-garden.png", + icon_size = 32, + order = "g[temperate-garden-generation]-c", + }, + --desert from soil + { + type = "recipe", + name = "desert-garden-generation", + category = "desert-farming", + subgroup = "farming-desert-seed", + enabled = false, + energy_required = 1000, + ingredients = + { + {type = "item", name = "solid-sand", amount = 500}, + {type = "fluid", name = "water-saline", amount = 1000}, + {type = "item", name = "solid-fertilizer", amount = 500} + }, + results= + { + {type = "item", name = "desert-garden", amount = 1} + }, + icon = "__angelsbioprocessing__/graphics/icons/desert-garden.png", + icon_size = 32, + order = "g[temperate-garden-generation]-c", + }, + --temperate mutation + { + type = "recipe", + name = "temperate-garden-mutation", + category = "seed-extractor", + subgroup = "farming-temperate-seed", + enabled = false, + energy_required = 600, + ingredients = + { + {type = "item", name = "desert-garden", amount = 1}, + {type = "item", name = "swamp-garden", amount = 1}, + {type = "item", name = "uranium-235", amount = 1}, + }, + results= + { + {type = "item", name = "temperate-garden", amount = 1} + }, + icon = "__angelsbioprocessing__/graphics/icons/temperate-garden.png", + icon_size = 32, + order = "mc", + }, + --desert mutation + { + type = "recipe", + name = "desert-garden-mutation", + category = "seed-extractor", + subgroup = "farming-desert-seed", + enabled = false, + energy_required = 600, + ingredients = + { + {type = "item", name = "temperate-garden", amount = 1}, + {type = "item", name = "swamp-garden", amount = 1}, + {type = "item", name = "uranium-235", amount = 1}, + }, + results= + { + {type = "item", name = "desert-garden", amount = 1} + }, + icon = "__angelsbioprocessing__/graphics/icons/desert-garden.png", + icon_size = 32, + order = "mc", + }, + --swamp mutation + { + type = "recipe", + name = "swamp-garden-mutation", + category = "seed-extractor", + subgroup = "farming-swamp-seed", + enabled = false, + energy_required = 600, + ingredients = + { + {type = "item", name = "desert-garden", amount = 1}, + {type = "item", name = "temperate-garden", amount = 1}, + {type = "item", name = "uranium-235", amount = 1}, + }, + results= + { + {type = "item", name = "swamp-garden", amount = 1} + }, + icon = "__angelsbioprocessing__/graphics/icons/swamp-garden.png", + icon_size = 32, + order = "mc", + }, + --alternative fertilizer + { + type = "recipe", + name = "diammonium-phosphate-fertilizer", + icons = { + { + icon = "__angelsbioprocessing__/graphics/icons/solid-fertilizer.png", + icon_size = 32, icon_mipmaps = 1 + }, + { + icon = "__Clowns-Processing__/graphics/icons/advsorting-overlay.png", + icon_size = 32, icon_mipmaps = 1 + }, + }, + category = "chemistry", + subgroup = "clowns-phosphorus", + order = "c", + energy_required = 10, + enabled = false, + allow_decomposition = false, + ingredients = + { + {type="fluid", name="liquid-phosphoric-acid", amount=10}, + {type="fluid", name="gas-ammonia", amount=10}, + }, + results = + { + {type="item", name="solid-fertilizer", amount=1} + }, + }, +}) +end diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/angels-smelting.lua b/Clowns-Processing/prototypes/recipes/angels-smelting.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/recipes/angels-smelting.lua rename to Clowns-Processing/prototypes/recipes/angels-smelting.lua diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/bobs.lua b/Clowns-Processing/prototypes/recipes/bobs.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/recipes/bobs.lua rename to Clowns-Processing/prototypes/recipes/bobs.lua diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/petrochem.lua b/Clowns-Processing/prototypes/recipes/petrochem.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/recipes/petrochem.lua rename to Clowns-Processing/prototypes/recipes/petrochem.lua diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/vanilla-recipes.lua b/Clowns-Processing/prototypes/recipes/vanilla-recipes.lua similarity index 99% rename from Clowns-Processing_1.3.21/prototypes/recipes/vanilla-recipes.lua rename to Clowns-Processing/prototypes/recipes/vanilla-recipes.lua index 858989d0..5461a4ea 100644 --- a/Clowns-Processing_1.3.21/prototypes/recipes/vanilla-recipes.lua +++ b/Clowns-Processing/prototypes/recipes/vanilla-recipes.lua @@ -349,7 +349,7 @@ data:extend( }, icons = angelsmods.functions.create_liquid_recipe_icon({ "water-purified", - "liquid-mercury", + {"__Clowns-Processing__/graphics/icons/liquid-mercury.png",icon_size=32}, }, {{238,113,22},{203,99,15},{167,78,13}}), order = "h" }, @@ -372,9 +372,11 @@ data:extend( {type = "fluid", name = "liquid-dimethylmercury", amount = 10}, {type = "item", name = "solid-salt", amount = 2}, }, - icons = angelsmods.functions.create_viscous_liquid_recipe_icon( - {"solid-salt"}, - {{ 118, 141, 138 },{ 94, 113, 110 },{ 94, 113, 110 }}), + icons = + { + {icon = "__Clowns-Processing__/graphics/icons/liquid-dimethylmercury.png"}, + }, + icon_size = 32, order = "z" }, ------------------------- diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/z-inactive-electronics.lua b/Clowns-Processing/prototypes/recipes/z-inactive-electronics.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/recipes/z-inactive-electronics.lua rename to Clowns-Processing/prototypes/recipes/z-inactive-electronics.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology-updates.lua b/Clowns-Processing/prototypes/technology-updates.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology-updates.lua rename to Clowns-Processing/prototypes/technology-updates.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology/centrifuging.lua b/Clowns-Processing/prototypes/technology/centrifuging.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology/centrifuging.lua rename to Clowns-Processing/prototypes/technology/centrifuging.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology/depleted-uranium.lua b/Clowns-Processing/prototypes/technology/depleted-uranium.lua similarity index 94% rename from Clowns-Processing_1.3.21/prototypes/technology/depleted-uranium.lua rename to Clowns-Processing/prototypes/technology/depleted-uranium.lua index 79419876..25216441 100644 --- a/Clowns-Processing_1.3.21/prototypes/technology/depleted-uranium.lua +++ b/Clowns-Processing/prototypes/technology/depleted-uranium.lua @@ -55,14 +55,10 @@ if settings.startup["depleted-uranium"].value then type = "unlock-recipe", recipe = "casting-powder-depleted-uranium-2" }, - { + --[[{ type = "unlock-recipe", recipe = "casting-powder-depleted-uranium-3" - }, - { - type = "unlock-recipe", - recipe = "casting-powder-depleted-uranium-4" - }, + },]] }, prerequisites = {"advanced-depleted-uranium-smelting-1", "advanced-osmium-smelting"}, unit = diff --git a/Clowns-Processing_1.3.21/prototypes/technology/gardens.lua b/Clowns-Processing/prototypes/technology/gardens.lua similarity index 87% rename from Clowns-Processing_1.3.21/prototypes/technology/gardens.lua rename to Clowns-Processing/prototypes/technology/gardens.lua index 88e13713..decf6275 100644 --- a/Clowns-Processing_1.3.21/prototypes/technology/gardens.lua +++ b/Clowns-Processing/prototypes/technology/gardens.lua @@ -1,6 +1,6 @@ if mods["angelsbioprocessing"] then data:extend( - { +{ { type = "technology", name = "garden-mutation", @@ -41,11 +41,11 @@ if mods["angelsbioprocessing"] then time = 30 }, }, - } - ) +} +) local recipes={"desert-garden-generation","swamp-garden-generation","temperate-garden-generation"} for _,rec in pairs(recipes) do - table.insert(data.raw["technology"]["bio-farm-2"].effects,{type = "unlock-recipe", recipe = rec}) + table.insert(data.raw["technology"]["bio-farm-1"].effects,{type = "unlock-recipe", recipe = rec}) end - table.insert(data.raw["technology"]["bio-farm-2"].prerequisites,"phosphorus-processing-1") + table.insert(data.raw["technology"]["bio-farm-1"].prerequisites,"phosphorus-processing-1") end \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/technology/magnesium.lua b/Clowns-Processing/prototypes/technology/magnesium.lua similarity index 92% rename from Clowns-Processing_1.3.21/prototypes/technology/magnesium.lua rename to Clowns-Processing/prototypes/technology/magnesium.lua index 10a25460..f70ed59e 100644 --- a/Clowns-Processing_1.3.21/prototypes/technology/magnesium.lua +++ b/Clowns-Processing/prototypes/technology/magnesium.lua @@ -28,7 +28,7 @@ data:extend( recipe = "clowns-plate-magnesium" }, }, - prerequisites = {"powder-metallurgy-2", "ore-processing-2"}, + prerequisites = {"powder-metallurgy-1", "ore-processing-2"}, unit = { ingredients = diff --git a/Clowns-Processing_1.3.21/prototypes/technology/mercury.lua b/Clowns-Processing/prototypes/technology/mercury.lua similarity index 81% rename from Clowns-Processing_1.3.21/prototypes/technology/mercury.lua rename to Clowns-Processing/prototypes/technology/mercury.lua index 616e00d5..5e6f5486 100644 --- a/Clowns-Processing_1.3.21/prototypes/technology/mercury.lua +++ b/Clowns-Processing/prototypes/technology/mercury.lua @@ -1,5 +1,4 @@ -if mods["angelsbioprocessing"] then - data:extend( +data:extend( { { type = "technology", @@ -10,15 +9,7 @@ if mods["angelsbioprocessing"] then { { type = "unlock-recipe", - recipe = "neurotoxin-capsule" - }, - { - type = "unlock-recipe", - recipe = "methylmercury-algae" - }, - { - type = "unlock-recipe", - recipe = "algae-violet" + recipe = "thermal-filtering-mercury" }, }, prerequisites = {"thermal-water-extraction", "angels-advanced-chemistry-3"}, @@ -44,14 +35,14 @@ if mods["angelsbioprocessing"] then { { type = "unlock-recipe", - recipe = "thermal-filtering-mercury" + recipe = "dimethylmercury-synthesis" }, { type = "unlock-recipe", - recipe = "dimethylmercury-synthesis" + recipe = "neurotoxin-capsule" }, }, - prerequisites = {"mercury-processing-1", "military-3"}, + prerequisites = {"mercury-processing-1", "military-4"}, unit = { ingredients = @@ -60,6 +51,7 @@ if mods["angelsbioprocessing"] then {"logistic-science-pack", 1}, {"chemical-science-pack", 1}, {"military-science-pack", 1}, + {"utility-science-pack", 1}, }, time = 30, count = 50 @@ -68,5 +60,4 @@ if mods["angelsbioprocessing"] then }, } -) -end \ No newline at end of file +) \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/technology/osmium.lua b/Clowns-Processing/prototypes/technology/osmium.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology/osmium.lua rename to Clowns-Processing/prototypes/technology/osmium.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology/phosphorus.lua b/Clowns-Processing/prototypes/technology/phosphorus.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology/phosphorus.lua rename to Clowns-Processing/prototypes/technology/phosphorus.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology/salination.lua b/Clowns-Processing/prototypes/technology/salination.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology/salination.lua rename to Clowns-Processing/prototypes/technology/salination.lua diff --git a/Clowns-Processing_1.3.21/prototypes/technology/uranium.lua b/Clowns-Processing/prototypes/technology/uranium.lua similarity index 100% rename from Clowns-Processing_1.3.21/prototypes/technology/uranium.lua rename to Clowns-Processing/prototypes/technology/uranium.lua diff --git a/Clowns-Processing_1.3.21/settings.lua b/Clowns-Processing/settings.lua similarity index 100% rename from Clowns-Processing_1.3.21/settings.lua rename to Clowns-Processing/settings.lua diff --git a/Clowns-Processing_1.3.21/thumbnail.png b/Clowns-Processing/thumbnail.png similarity index 100% rename from Clowns-Processing_1.3.21/thumbnail.png rename to Clowns-Processing/thumbnail.png diff --git a/Clowns-Processing_1.3.21/todo.txt b/Clowns-Processing/todo.txt similarity index 100% rename from Clowns-Processing_1.3.21/todo.txt rename to Clowns-Processing/todo.txt diff --git a/Clowns-Processing_1.3.21/changelog.txt b/Clowns-Processing_1.3.21/changelog.txt deleted file mode 100644 index 13a12aee..00000000 --- a/Clowns-Processing_1.3.21/changelog.txt +++ /dev/null @@ -1,228 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.3.21 -Date: 2023-07-29 - Bugfixes: - - Fixed and issue with powder processing tech updates ---------------------------------------------------------------------------------------------------- -Version: 1.3.20 -Date: 2023-05-28 - Bugfixes: - - More platinum fixes ---------------------------------------------------------------------------------------------------- -Version: 1.3.19 -Date: 2023-04-18 - Bugfixes: - - Fixed capitalisation on folder name breaking the mod on some OS ---------------------------------------------------------------------------------------------------- -Version: 1.3.18 -Date: 2023-04-16 - Features: - - Moved garden generation to farm 2 to allow earlier farming (Canisdirusleidy on forum) ---------------------------------------------------------------------------------------------------- -Version: 1.3.17 -Date: 2023-04-16 - Features: - - Fixed that depleted uranium recipes had no unlock - - Fixed dimethymercury from algae path - - General clean-ups and icon updates ---------------------------------------------------------------------------------------------------- -Version: 1.3.16 -Date: 2021-08-10 - Features: - - Updated to angels new patch (refining 0.12) - - Small tweaks and updates - - More properties cleaned up ---------------------------------------------------------------------------------------------------- -Version: 1.3.15 -Date: 2021-05-27 - Features: - - Removed superfluous setting regarding stack size for tiles. - - Actually taken care of in angelsrefining - - Piercing round tech fix - - Fixed angels special vanilla conditions - - Added Osmium Tipped Bullets as a use for Osmium - - More icon fixes ---------------------------------------------------------------------------------------------------- -Version: 1.3.14 -Date: 2020-11-24 - Features: - - Updated to version 1.1 - - Tweaked the garden creation recipes to be researched a tad later - - when you first get access to soil and fertiliser ---------------------------------------------------------------------------------------------------- -Version: 1.3.13 - Features: - - Quickpatch of Phosphoric acid recipe interferring with pyanodons variant - - (for those so inclined) - - Moved garden "spawning" from soil/fertiliser/fluid recipes to use the farm buildings ---------------------------------------------------------------------------------------------------- -Version: 1.3.12 - Features: - - Adjusted the garden mutation recipes and added some garden generation recipes - - Delinked from bobmods, so this can be run in vanilla or pure angels - Bugfixes: - - File consolidation if items and recipes, too many single table files for my liking - - Fixed a few recipe order and icon issues - - Moved some things that should have been in the extended materials mod to not be in this one ---------------------------------------------------------------------------------------------------- -Version: 1.3.11 - Features: - - Prepared for updates to angels industries - Bugfixes: - - Fixed that I was setting require behind mod checks potentially causing CRC fails in multiplayer ---------------------------------------------------------------------------------------------------- -Version: 1.3.10 - Features: - - Updated number icons to reference angels refining not petrochem (in prep for incoming update) - - Added a setting to disable the centrifuges (if you want to use bobs instead) - - Removed a few group shuffling settings which should be redundant - - (may put them back in if needed) - - Updated armor location back to default if that setting is off ---------------------------------------------------------------------------------------------------- -Version: 1.3.9 - Features: - - Updated the neurotoxin capsule to replicate the fog of the poison capsule - - Updated fluid icons and recipes to use Angel's(Santa's) new icon scripts - - Small fixes and clean-ups ---------------------------------------------------------------------------------------------------- -Version: 1.3.8 - Features: - - Updated to work with angels updates ---------------------------------------------------------------------------------------------------- -Version: 1.3.7 - Bugfixes: - - Fixed Missing localisation for the new Sluicer - - Fixed the pure sorting recipe times (properly this time) - - Updated to 0.18 ---------------------------------------------------------------------------------------------------- -Version: 1.3.6 - Bugfixes: - - Fixed an overzealous attempt at fixing setting callbacks in 1.3.5 ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 - Bugfixes: - - Fixed the pure sorting recipe times (fix thanks to hexagonhexagon) - - I honestly thought this was already fixed - - Fixed setting call checks ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 - Bugfixes: - - Added thumbnail - - Fixed formatting of changelog - Features: - - Added T2 Sluicer ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 - Bugfixes: - - Fixed bug related to bobs equipment split from bob warfare - Features: - - Added a fix to de-couple from angels bioprocessing (not fully tested) - - Known problem: white phosphorus is used in smelting bronze, phosphoric acid is a dead end (for now) ---------------------------------------------------------------------------------------------------- -Version: 1.3.2: - Features: - - Updated for 0.17 ---------------------------------------------------------------------------------------------------- -Version: 1.3.1: - Features: - - Added magnesium pure processing & a more intricate smelting process - - Thanks heaps to Pez for the input! ---------------------------------------------------------------------------------------------------- -Version: 1.3.0: - Features: - - Added advanced desalination recipes for collecting magnesium ore ---------------------------------------------------------------------------------------------------- -Version: 1.2.8 - Bugfixes: - - Fixed cleanup toggles not working ---------------------------------------------------------------------------------------------------- -Version: 1.2.7: - Features: - - Added German locale thanks to Steino - - Accidentally released magnesium :P ---------------------------------------------------------------------------------------------------- -Version: 1.2.6 - Bugfixes: - - Geniunely not sure if anything actually changed... ---------------------------------------------------------------------------------------------------- -Version: 1.2.5 - Bugfixes: - - Bug fixes ---------------------------------------------------------------------------------------------------- -Version: 1.2.4: - Features: - - Added support for productivity effects ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 - Bugfixes: - - Bug fixes - Features: - - Added optional Fortifications and Equipment groups - - Added override to move Bob's Gems & Bob's Fluids into Bob's Materials & Intermediates ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 - Bugfixes: - - Bug fixes ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 - Bugfixes: - - Bug fixes ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 - Features: - - Added new pure processing recipes - - Added an override to give SpaceMod components their own subgroup - - Added advanced centrifuging - - Updated fluorine icon - Balancing: - - Rebalanced uranium processing ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 - Features: - - Added osmium, depleted uranium & related powder metallurgy - - Added optional settings to replace ingredients in military recipes from U-238 to depleted uranium - Bugfixes: - - Updated some Vanilla & Angels locale appropriately ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 - Balancing: - - Rebalanced sand sluicing - - Rebalanced phosphorus processing - - Fixed phosphorus tech being unlocked from game start - Features: - - Added advanced phosphorus processing - - Added an opt-in override to set vanilla tile size to 1000 to match Angel's tile stack sizes - - Added mercury processing technology - - Added dimethylmercury (neurotoxin) refining - - Added neurotoxin capsule - - Updated graphics, added some optional general gamedata tweaks, off by default - - Code brought into line with other MadClown01 mods ---------------------------------------------------------------------------------------------------- -Version: 0.1.6 - Features: - - Updated locale, updated phosphorus ore icon ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 - Balancing: - - Rebalanced crafting times for crushed stone sorting, all intermediate uranium processing ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 - Features: - - Updated locale ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 - Features: - - Added phosphorus processing - - Added original icons for advanced uranium processing ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 - Bugfixes: - - Fixed minor bugs ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 - Bugfixes: - - Fixed minor bugs ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 - Features: - - Initial release diff --git a/Clowns-Processing_1.3.21/data.lua b/Clowns-Processing_1.3.21/data.lua deleted file mode 100644 index 4d132680..00000000 --- a/Clowns-Processing_1.3.21/data.lua +++ /dev/null @@ -1,60 +0,0 @@ --- function to know if this is special vanilla or not (DUPLICATE OF ANGELS, since this mod seems to be calling it earlier) -if not clowns then clowns={} end -if not clowns.functions then clowns.functions={} end -if not clowns.tables then clowns.tables ={} end ---check vanilla settings -clowns.special_vanilla = true --assume true, then find out if false -for ore_name, ore_enabled in pairs(angelsmods.trigger.ores or {}) do - if ore_enabled and ore_name ~= "iron" and ore_name ~= "copper" and ore_name ~= "uranium" then - clowns.special_vanilla = false - end -end -if mods["pyrawores"] then --force full mode - clowns.special_vanilla = false -end -if settings.startup["depleted-uranium"].value and clowns.special_vanilla == false then - angelsmods.trigger.smelting_products["enable-all"] = true -- to ensure we get the powder -end -angelsmods.trigger.ores["platinum"] = true -angelsmods.trigger.smelting_products["platinum"].wire = true - -require("prototypes.categories") - --- ITEMS --- vanilla-items include things for angels-refining,smelting and petrochem -require("prototypes.buildings.sluicer") -require("prototypes.buildings.centrifuge")--active if setting - -require("prototypes.items.vanilla-items") -require("prototypes.items.neurotoxin") ---angelsbioprocessing -require("prototypes.items.angels-bioprocessing") ---angelsindustries ---bobs - ---RECIPES ---vanilla -require("prototypes.recipes.vanilla-recipes") -require("prototypes.recipes.angels-smelting") -require("prototypes.recipes.petrochem") ---angelsbioprocessing -require("prototypes.recipes.angels-bioprocessing") ---bobs -require("prototypes.recipes.bobs") - - ---if mods["angelsbioprocessing"] then -require("prototypes.technology.gardens") ---end -require("prototypes.technology.magnesium") -require("prototypes.technology.depleted-uranium") -require("prototypes.technology.osmium") -require("prototypes.technology.uranium") -require("prototypes.technology.mercury") ---if settings.startup["MCP_enable_centrifuges"].value then -require("prototypes.technology.centrifuging") ---end -require("prototypes.technology.salination") -require("prototypes.technology.phosphorus") - -require("prototypes.overrides") diff --git a/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg-outline.png b/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg-outline.png deleted file mode 100644 index e9f3d188..00000000 Binary files a/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg-outline.png and /dev/null differ diff --git a/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg.png b/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg.png deleted file mode 100644 index c00c563f..00000000 Binary files a/Clowns-Processing_1.3.21/graphics/icons/Numbers/Hg.png and /dev/null differ diff --git a/Clowns-Processing_1.3.21/graphics/icons/powder-depleted-uranium-mix.png b/Clowns-Processing_1.3.21/graphics/icons/powder-depleted-uranium-mix.png deleted file mode 100644 index 17762097..00000000 Binary files a/Clowns-Processing_1.3.21/graphics/icons/powder-depleted-uranium-mix.png and /dev/null differ diff --git a/Clowns-Processing_1.3.21/info.json b/Clowns-Processing_1.3.21/info.json deleted file mode 100644 index 43ca7b94..00000000 --- a/Clowns-Processing_1.3.21/info.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Clowns-Processing", - "version": "1.3.21", - "factorio_version": "1.1", - "title": "MadClown01's Processing", - "author": "MadClown01,Pezzawinkle", - "contact": "", - "homepage": "https://forums.factorio.com/viewtopic.php?f=185&t=57861", - "description": "Crafting base for other MadClown01 mods. Adds many new production chains including sand sluicing, advanced mercury, fluorine, phosphorus & uranium processing, garden generation, neurotoxin production and catalytic electrolysis / filtering. Requires all Angel's mods.", - "dependencies": [ - "angelsrefining >= 0.12.1", - "angelspetrochem >= 0.9.20", - "angelssmelting >= 0.6.17", - "? angelsindustries >= 0.4.14", - "? angelsbioprocessing >= 0.7.20", - "? bobplates >= 0.18.0", - "(?) bobwarfare >= 0.18.0", - "(?) bobequipment >=0.18.0" - ] -} diff --git a/Clowns-Processing_1.3.21/locale/en/en.cfg b/Clowns-Processing_1.3.21/locale/en/en.cfg deleted file mode 100644 index 6db4f957..00000000 --- a/Clowns-Processing_1.3.21/locale/en/en.cfg +++ /dev/null @@ -1,132 +0,0 @@ -centrifuge=Centrifuge __1__ - -[item-group-name] -fortifications=Fortifications -equipment=Equipment -combat=Weaponry - -[entity-name] -sluicer=Sluicer MK1 -sluicer-2=Sluicer MK2 -neurotoxin-cloud=Neurotoxin cloud - -[fluid-name] -liquid-mercury=Mercury -liquid-phosphoric-acid=Phosphoric Acid -gas-fluorine=Fluorine Gas -liquid-dimethylmercury=Dimethylmercury -liquid-molten-magnesium=Molten Magnesium - -water-radioactive-waste=Radioactive Waste Water - -[item-name] -solid-uranium-hexafluoride=Uranium Hexafluoride -solid-uranium-tetrafluoride=Uranium Tetrafluoride -solid-uranium-oxide=Uranium Oxide -solid-ammonium-diuranate=Ammonium Diuranate -solid-uranyl-nitrate=Uranyl Nitrate - -osmium-ore=Osmium Ore -processed-osmium=Processed Osmium -pellet-osmium=Osmium Pellet -powder-osmium=Osmium Powder -casting-powder-osmium=Osmium Mixing Powder -clowns-plate-osmium=Osmium Plate -osmium-rounds-magazine=Osmium Rounds Magazine - -processed-depleted-uranium=Processed Depleted Uranium -pellet-depleted-uranium=Depleted Uranium Pellet -powder-depleted-uranium=Depleted Uranium Powder -casting-powder-depleted-uranium=Depleted Uranium Mixing Powder -clowns-plate-depleted-uranium=Depleted Uranium Plate - -magnesium-ore=Magnesium Ore -processed-magnesium=Processed Magnesium -pellet-magnesium=Magnesium Pellet -ingot-magnesium=Magnesium Ingot -clowns-plate-magnesium=Magnesium Plate - -explosive-uranium-cannon-shell=Explosive Depleted Uranium Cannon Shell -uranium-cannon-shell=Depleted Uranium Cannon Shell - -shotgun-uranium-shell=Shotgun Depleted Uranium Shells -uranium-bullet-projectile=Depleted Uranium Bullet Projectile -uranium-bullet=Depleted Uranium Bullet - -algae-violet=Violet Algae - -phosphorus-ore=Phosphorus Ore -solid-white-phosphorus=White Phosphorus - -catalyst-metal-violet=Violet Metal Catalyst -neurotoxin-capsule=Neurotoxin capsule - -sluicer=Sluicer MK1 -sluicer-2=Sluicer MK2 - -[recipe-name] - -dimethylmercury-synthesis=Dimethylmercury Synthesis - -temperate-garden-mutation=Temperate Garden Mutation -desert-garden-mutation=Desert Garden Mutation -swamp-garden-mutation=Swamp Garden Mutation -clowns-tree-generation=Grow Specialist Trees from Seeds - -advanced-uranium-processing=Advanced Uranium Processing - -thermal-filtering-mercury=Thermal to Mercury Filtering -intermediate-salination=Intermediate Desalination -advanced-salination=Advanced Desalination - -sand-sluicing=Sand Sluicing - -catalytic-water-separation-hydrogen=Catalytic Purified Water Electrolysis: Hydrogen Gas -catalytic-water-separation-oxygen=Catalytic Purified Water Electrolysis: Oxygen Gas -catalytic-air-separation-oxygen=Catalytic Air Separation: Oxygen Gas -catalytic-air-separation-nitrogen=Catalytic Air Separation: Nitrogen Gas -hydrochloric-acid-separation=Hydrochloric Acid Electrolysis: Chlorine, Hydrogen -hydrofluoric-acid-separation=Hydrofluoric Acid Electrolysis: Fluorine, Hydrogen - -crushed-stone-sorting=Crushed Stone Sorting -white-phosphorus-smelting=White Phosphorus Smelting -phosphoric-acid-1=Phosphoric Acid Synthesis -diammonium-phosphate-fertilizer=Diammonium Phosphate Fertilizer - -magnesium-pellet-smelting=Magnesium Ingot - -sluicer=Sluicer MK1 -sluicer-2=Sluicer MK2 - -[technology-name] - -advanced-uranium-processing=Advanced Uranium Processing -advanced-magnesium-smelting=Advanced Magnesium Smelting -advanced-osmium-smelting=Advanced Osmium Smelting -advanced-depleted-uranium-smelting=Advanced Depleted Uranium Smelting -phosphorus-processing=Phosphorus Processing -mercury-processing=Mercury Processing -garden-mutation=Garden Mutation -centrifuging=Advanced Centrifuging - -[item-description] - -sluicer=Can stick your fingers in. Sort ores from sand -sluicer-2=Can stick your fingers in. Sort ores from sand - -[mod-setting-name] -depleted-uranium=Enable Depleted Uranium -gem-cleanup=Gem Cleanup -fluid-cleanup=Fluid Cleanup -equipment-group=Equipment Group -fortifications-group=Fortifications Group -bob-bullet-override=Remove Bob's Bullets -MCP_enable_centrifuges=Enable MK2 and MK3 centrifuges - -[mod-setting-description] -depleted-uranium=Adds Depleted Uranium processing, and adjusts vanilla & bobwarefare recipes accordingly. True by default. -gem-cleanup=Removes the Bob's Gemstones group, transferring items to Bob's Materials & Intermediates. True by default. -fluid-cleanup=Removes the Bob's Fluids group, transferring items to Bob's Materials & Intermediates. True by default. -equipment-group=Adds a group for equipment. True by default. -fortifications-group=Adds a group for fortifications. True by default. -bob-bullet-override=True by default. diff --git a/Clowns-Processing_1.3.21/migrations/Clowns-Processing_1.3.19.lua b/Clowns-Processing_1.3.21/migrations/Clowns-Processing_1.3.19.lua deleted file mode 100644 index 4309c5a2..00000000 --- a/Clowns-Processing_1.3.21/migrations/Clowns-Processing_1.3.19.lua +++ /dev/null @@ -1,25 +0,0 @@ -for index, force in pairs(game.forces) do - force.reset_recipes() - force.reset_technologies() - force.reset_technology_effects() - local changed_tech = { - "angels-platinum-smelting-1", - "angels-platinum-smelting-2", - "angels-platinum-smelting-3", - "angels-platinum-casting-1", - "angels-platinum-casting-2", - } - - for index, force in pairs(game.forces) do - force.reset_recipes() - force.reset_technologies() - force.reset_technology_effects() - - for _, tech_name in pairs(changed_tech) do - local tech = force.technologies[tech_name] - if tech and tech.enabled ~= tech.prototype.enabled then - tech.enabled = tech.prototype.enabled - end - end - end -end \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/categories.lua b/Clowns-Processing_1.3.21/prototypes/categories.lua deleted file mode 100644 index 726bf10f..00000000 --- a/Clowns-Processing_1.3.21/prototypes/categories.lua +++ /dev/null @@ -1,259 +0,0 @@ -data:extend( -{ - { - type = "recipe-category", - name = "sluicing" - }, - --Most intermediates (raw material subgroup) seem to be like aa or something similar - { - type = "item-subgroup", - name = "spacex", - group = "intermediate-products", - order = "b-c", - }, - { - type = "item-group", - name = "equipment", - order = "k", - icon = "__base__/graphics/technology/armor-making.png", - icon_size = 256, - icon_mipmaps = 4 - }, - { - type = "item-group", - name = "fortifications", - order = "k", - icon = "__base__/graphics/technology/gate.png", - icon_size = 256, - icon_mipmaps = 4 - }, - { - type = "item-subgroup", - name = "walls", - group = "fortifications", - order = "a-a", - }, - { - type = "item-subgroup", - name = "armor", - group = "equipment", - order = "a", - }, - { - type = "item-subgroup", - name = "power", - group = "equipment", - order = "b-a", - }, - { - type = "item-subgroup", - name = "batteries", - group = "equipment", - order = "b-b", - }, - { - type = "item-subgroup", - name = "shields", - group = "equipment", - order = "b-c", - }, - { - type = "item-subgroup", - name = "personal-laser-defences", - group = "equipment", - order = "b-d", - }, - { - type = "item-subgroup", - name = "misc1", - group = "equipment", - order = "b-e-a", - }, - { - type = "item-subgroup", - name = "misc2", - group = "equipment", - order = "b-e-b", - }, - { - type = "item-subgroup", - name = "vehicle-power1",--solar - group = "equipment", - order = "c-a-a", - }, - { - type = "item-subgroup", - name = "vehicle-power2",--fusion cell - group = "equipment", - order = "c-a-b", - }, - { - type = "item-subgroup", - name = "vehicle-power3",--fusion reactor - group = "equipment", - order = "c-a-c", - }, - { - type = "item-subgroup", - name = "vehicle-batteries", - group = "equipment", - order = "c-b", - }, - { - type = "item-subgroup", - name = "vehicle-shields", - group = "equipment", - order = "c-c", - }, - { - type = "item-subgroup", - name = "vehicle-personal-laser-defences", - group = "equipment", - order = "c-d-a", - }, - { - type = "item-subgroup", - name = "vehicle-plasma-cannons", - group = "equipment", - order = "c-d-b", - }, - { - type = "item-subgroup", - name = "vehicle-misc1", - group = "equipment", - order = "c-e-a", - }, - { - type = "item-subgroup", - name = "vehicle-misc2", - group = "equipment", - order = "c-e-b", - }, - { - type = "item-subgroup", - name = "mines", - group = "fortifications", - order = "a-b", - }, - { - type = "item-subgroup", - name = "gun-turrets", - group = "fortifications", - order = "b-a", - }, - { - type = "item-subgroup", - name = "sniper-turrets", - group = "fortifications", - order = "b-b", - }, - { - type = "item-subgroup", - name = "fluid-turrets", - group = "fortifications", - order = "b-f", - }, - { - type = "item-subgroup", - name = "rocket-turrets", - group = "fortifications", - order = "b-d", - }, - { - type = "item-subgroup", - name = "cannon-turrets", - group = "fortifications", - order = "b-e", - }, - { - type = "item-subgroup", - name = "laser-turrets", - group = "fortifications", - order = "b-c", - }, - { - type = "item-subgroup", - name = "artillery", - group = "fortifications", - order = "b-e", - }, - { - type = "item-subgroup", - name = "radar", - group = "fortifications", - order = "c", - }, - { - type = "item-subgroup", - name = "rocket", - group = "fortifications", - order = "d", - }, - { - type = "item-subgroup", - name = "bio-processing-violet", - group = mods["angelsbioprocessing"] and "bio-processing-nauvis" or "resource-refining", - order = "d-a", --should be after blue algae - }, - { - type = "item-subgroup", - name = "clowns-depleted-uranium", - group = "angels-smelting", - order = "ea",--Just after angels-copper (e) - }, - { - type = "item-subgroup", - name = "clowns-magnesium", - group = "angels-smelting", - order = "ha",--Just after angels-lead (h) - }, - { - type = "item-subgroup", - name = "clowns-osmium", - group = "angels-smelting", - order = "ja",--Just after angels-nickel (j) - }, - { - type = "item-subgroup", - name = "clowns-phosphorus", - group = "angels-smelting", - order = "jb", - }, - { - type = "item-subgroup", - name = "clowns-uranium", - group = "angels-smelting", - order = "pa", - }, - { - type = "item-subgroup", - name = "clowns-magnesium-casting", - group = "angels-casting", - order = "ha", - }, - { - type = "item-subgroup", - name = "clowns-osmium-casting", - group = "angels-casting", - order = "ja", - }, - { - type = "item-subgroup", - name = "clowns-depleted-uranium-casting", - group = "angels-casting", - order = "ea", - }, - { - type = "item-subgroup", - name = "clowns-electrolysis", - group = "petrochem-refining", - order = "caa", - }, - { - type = "item-subgroup", - name = "clown-ores", - group = "resource-refining", - order = "ac", - }, -} -) \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/items/angels-bioprocessing.lua b/Clowns-Processing_1.3.21/prototypes/items/angels-bioprocessing.lua deleted file mode 100644 index 4fabb2bd..00000000 --- a/Clowns-Processing_1.3.21/prototypes/items/angels-bioprocessing.lua +++ /dev/null @@ -1,23 +0,0 @@ -if mods["angelsbioprocessing"] then --this path is currently incomplete. - data:extend( -{ - --[[{ - type = "item", - name = "algae-orange", - icon = "__angelsbioprocessing__/graphics/icons/algae-brown.png", - icon_size = 32, - subgroup = "bio-processing-brown", - order = "a", - stack_size = 200 - },]] - { - type = "item", - name = "algae-violet", - icons = {{icon="__angelsbioprocessing__/graphics/icons/algae-brown.png",tint={127,0,255}, icon_size = 32}}, - subgroup = "bio-processing-violet", - order = "a", - stack_size = 200 - }, -} -) -end \ No newline at end of file diff --git a/Clowns-Processing_1.3.21/prototypes/recipes/angels-bioprocessing.lua b/Clowns-Processing_1.3.21/prototypes/recipes/angels-bioprocessing.lua deleted file mode 100644 index 5904ced9..00000000 --- a/Clowns-Processing_1.3.21/prototypes/recipes/angels-bioprocessing.lua +++ /dev/null @@ -1,236 +0,0 @@ -if mods["angelsbioprocessing"] then - data:extend( -{ - ----------- - -- Algae -- - ----------- - --Orange - --[[{ - type = "recipe", - name = "algae-orange", - category = "bio-processing", - subgroup = "bio-processing-green", - enabled = false, - energy_required = 20, - ingredients = - { - {type="fluid", name="water-mineralized", amount=100}, - {type="fluid", name="gas-carbon-dioxide", amount=100} - }, - results= - { - {type="item", name="algae-orange", amount=40}, - }, - icon = "__angelsbioprocessing__/graphics/icons/algae-green.png", - icon_size = 32, - order = "a", - },]] - --Violet - { - type = "recipe", - name = "algae-violet", - category = "bio-processing", - subgroup = "bio-processing-violet", - enabled = false, - energy_required = 20, - ingredients = - { - {type="fluid", name="water-mineralized", amount=100}, - {type="fluid", name="gas-carbon-dioxide", amount=100} - }, - results= - { - {type="item", name="algae-violet", amount=40}, - }, - order = "b", - }, - --Mercury from Violet - { - type = "recipe", - name = "methylmercury-algae", - category = "liquifying", - subgroup = "bio-processing-violet", - enabled = false, - energy_required = 3, - ingredients ={ - {type="item", name="algae-violet", amount=10}, - }, - results= - { - {type="fluid", name="liquid-dimethylmercury", amount=2}, - }, - icons = angelsmods.functions.create_viscous_liquid_recipe_icon( - nil, - {{ 118, 141, 138 },{ 94, 113, 110 },{ 94, 113, 110 }}, - {"algae-violet"} - ), - order = "c [cellulose-fiber-algae]", - }, - ------------- - -- Gardens -- - ------------- - --swamp from soil - { - type = "recipe", - name = "swamp-garden-generation", - icon = "__angelsbioprocessing__/graphics/icons/swamp-garden.png", - icon_size = 32, - category = "swamp-farming", - subgroup = "farming-swamp-seed", - order = "g[temperate-garden-generation]-c", - energy_required = 600, - enabled = false, - ingredients = - { - {type = "item", name = "solid-soil", amount = 1000}, - {type = "fluid", name = "water-viscous-mud", amount = 1000}, - {type = "item", name = "solid-fertilizer", amount = 200} - }, - results = - { - {type = "item", name = "swamp-garden", amount = 1} - }, - }, - - --temperate from soil - { - type = "recipe", - name = "temperate-garden-generation", - category = "temperate-farming", - subgroup = "farming-temperate-seed", - enabled = false, - energy_required = 1000, - ingredients = - { - {type = "item", name = "solid-compost", amount = 500}, - {type = "fluid", name = "water", amount = 1000}, - {type = "item", name = "solid-fertilizer", amount = 500} - }, - results= - { - {type = "item", name = "temperate-garden", amount = 1} - }, - icon = "__angelsbioprocessing__/graphics/icons/temperate-garden.png", - icon_size = 32, - order = "g[temperate-garden-generation]-c", - }, - --desert from soil - { - type = "recipe", - name = "desert-garden-generation", - category = "desert-farming", - subgroup = "farming-desert-seed", - enabled = false, - energy_required = 1000, - ingredients = - { - {type = "item", name = "solid-sand", amount = 500}, - {type = "fluid", name = "water-saline", amount = 1000}, - {type = "item", name = "solid-fertilizer", amount = 500} - }, - results= - { - {type = "item", name = "desert-garden", amount = 1} - }, - icon = "__angelsbioprocessing__/graphics/icons/desert-garden.png", - icon_size = 32, - order = "g[temperate-garden-generation]-c", - }, - --temperate mutation - { - type = "recipe", - name = "temperate-garden-mutation", - category = "seed-extractor", - subgroup = "farming-temperate-seed", - enabled = false, - energy_required = 600, - ingredients = - { - {type = "item", name = "desert-garden", amount = 1}, - {type = "item", name = "swamp-garden", amount = 1}, - {type = "item", name = "uranium-235", amount = 1}, - }, - results= - { - {type = "item", name = "temperate-garden", amount = 1} - }, - icon = "__angelsbioprocessing__/graphics/icons/temperate-garden.png", - icon_size = 32, - order = "mc", - }, - --desert mutation - { - type = "recipe", - name = "desert-garden-mutation", - category = "seed-extractor", - subgroup = "farming-desert-seed", - enabled = false, - energy_required = 600, - ingredients = - { - {type = "item", name = "temperate-garden", amount = 1}, - {type = "item", name = "swamp-garden", amount = 1}, - {type = "item", name = "uranium-235", amount = 1}, - }, - results= - { - {type = "item", name = "desert-garden", amount = 1} - }, - icon = "__angelsbioprocessing__/graphics/icons/desert-garden.png", - icon_size = 32, - order = "mc", - }, - --swamp mutation - { - type = "recipe", - name = "swamp-garden-mutation", - category = "seed-extractor", - subgroup = "farming-swamp-seed", - enabled = false, - energy_required = 600, - ingredients = - { - {type = "item", name = "desert-garden", amount = 1}, - {type = "item", name = "temperate-garden", amount = 1}, - {type = "item", name = "uranium-235", amount = 1}, - }, - results= - { - {type = "item", name = "swamp-garden", amount = 1} - }, - icon = "__angelsbioprocessing__/graphics/icons/swamp-garden.png", - icon_size = 32, - order = "mc", - }, - --alternative fertilizer - { - type = "recipe", - name = "diammonium-phosphate-fertilizer", - icons = { - { - icon = "__angelsbioprocessing__/graphics/icons/solid-fertilizer.png", - icon_size = 32, icon_mipmaps = 1 - }, - { - icon = "__Clowns-Processing__/graphics/icons/advsorting-overlay.png", - icon_size = 32, icon_mipmaps = 1 - }, - }, - category = "chemistry", - subgroup = "clowns-phosphorus", - order = "c", - energy_required = 10, - enabled = false, - allow_decomposition = false, - ingredients = - { - {type="fluid", name="liquid-phosphoric-acid", amount=10}, - {type="fluid", name="gas-ammonia", amount=10}, - }, - results = - { - {type="item", name="solid-fertilizer", amount=1} - }, - }, -}) -end diff --git a/CoppermineBobModuleRebalancing_9.3.1/changelog.txt b/CoppermineBobModuleRebalancing/changelog.txt similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/changelog.txt rename to CoppermineBobModuleRebalancing/changelog.txt diff --git a/CoppermineBobModuleRebalancing_9.3.1/data-updates.lua b/CoppermineBobModuleRebalancing/data-updates.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/data-updates.lua rename to CoppermineBobModuleRebalancing/data-updates.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/data.lua b/CoppermineBobModuleRebalancing/data.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/data.lua rename to CoppermineBobModuleRebalancing/data.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/graphics/icons/module-combining-case.png b/CoppermineBobModuleRebalancing/graphics/icons/module-combining-case.png similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/graphics/icons/module-combining-case.png rename to CoppermineBobModuleRebalancing/graphics/icons/module-combining-case.png diff --git a/CoppermineBobModuleRebalancing_9.3.1/graphics/icons/module-combining-solder.png b/CoppermineBobModuleRebalancing/graphics/icons/module-combining-solder.png similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/graphics/icons/module-combining-solder.png rename to CoppermineBobModuleRebalancing/graphics/icons/module-combining-solder.png diff --git a/CoppermineBobModuleRebalancing_9.3.1/graphics/icons/rocket-control-circuit.png b/CoppermineBobModuleRebalancing/graphics/icons/rocket-control-circuit.png similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/graphics/icons/rocket-control-circuit.png rename to CoppermineBobModuleRebalancing/graphics/icons/rocket-control-circuit.png diff --git a/CoppermineBobModuleRebalancing_9.3.1/info.json b/CoppermineBobModuleRebalancing/info.json similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/info.json rename to CoppermineBobModuleRebalancing/info.json diff --git a/CoppermineBobModuleRebalancing_9.3.1/locale/en/locale.cfg b/CoppermineBobModuleRebalancing/locale/en/locale.cfg similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/locale/en/locale.cfg rename to CoppermineBobModuleRebalancing/locale/en/locale.cfg diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-beacon-updates.lua b/CoppermineBobModuleRebalancing/prototypes/expensive-beacon-updates.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-beacon-updates.lua rename to CoppermineBobModuleRebalancing/prototypes/expensive-beacon-updates.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-combination-updates.lua b/CoppermineBobModuleRebalancing/prototypes/expensive-combination-updates.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-combination-updates.lua rename to CoppermineBobModuleRebalancing/prototypes/expensive-combination-updates.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-combination.lua b/CoppermineBobModuleRebalancing/prototypes/expensive-combination.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-combination.lua rename to CoppermineBobModuleRebalancing/prototypes/expensive-combination.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-god-module-research.lua b/CoppermineBobModuleRebalancing/prototypes/expensive-god-module-research.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/expensive-god-module-research.lua rename to CoppermineBobModuleRebalancing/prototypes/expensive-god-module-research.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/exponential-modules.lua b/CoppermineBobModuleRebalancing/prototypes/exponential-modules.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/exponential-modules.lua rename to CoppermineBobModuleRebalancing/prototypes/exponential-modules.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/god-modules-in-space-ex.lua b/CoppermineBobModuleRebalancing/prototypes/god-modules-in-space-ex.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/god-modules-in-space-ex.lua rename to CoppermineBobModuleRebalancing/prototypes/god-modules-in-space-ex.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/nerfed-beacon-updates.lua b/CoppermineBobModuleRebalancing/prototypes/nerfed-beacon-updates.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/nerfed-beacon-updates.lua rename to CoppermineBobModuleRebalancing/prototypes/nerfed-beacon-updates.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/nerfed-module-updates.lua b/CoppermineBobModuleRebalancing/prototypes/nerfed-module-updates.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/nerfed-module-updates.lua rename to CoppermineBobModuleRebalancing/prototypes/nerfed-module-updates.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/rocket-control-units.lua b/CoppermineBobModuleRebalancing/prototypes/rocket-control-units.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/rocket-control-units.lua rename to CoppermineBobModuleRebalancing/prototypes/rocket-control-units.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/prototypes/space-packs-for-god-modules.lua b/CoppermineBobModuleRebalancing/prototypes/space-packs-for-god-modules.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/prototypes/space-packs-for-god-modules.lua rename to CoppermineBobModuleRebalancing/prototypes/space-packs-for-god-modules.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/settings.lua b/CoppermineBobModuleRebalancing/settings.lua similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/settings.lua rename to CoppermineBobModuleRebalancing/settings.lua diff --git a/CoppermineBobModuleRebalancing_9.3.1/thumbnail.png b/CoppermineBobModuleRebalancing/thumbnail.png similarity index 100% rename from CoppermineBobModuleRebalancing_9.3.1/thumbnail.png rename to CoppermineBobModuleRebalancing/thumbnail.png diff --git a/CopyPasteModules_0.1.1/README.md b/CopyPasteModules/README.md similarity index 100% rename from CopyPasteModules_0.1.1/README.md rename to CopyPasteModules/README.md diff --git a/CopyPasteModules_0.1.1/changelog.md b/CopyPasteModules/changelog.md similarity index 100% rename from CopyPasteModules_0.1.1/changelog.md rename to CopyPasteModules/changelog.md diff --git a/CopyPasteModules_0.1.1/control.lua b/CopyPasteModules/control.lua similarity index 100% rename from CopyPasteModules_0.1.1/control.lua rename to CopyPasteModules/control.lua diff --git a/CopyPasteModules_0.1.1/data-final-fixes.lua b/CopyPasteModules/data-final-fixes.lua similarity index 100% rename from CopyPasteModules_0.1.1/data-final-fixes.lua rename to CopyPasteModules/data-final-fixes.lua diff --git a/CopyPasteModules_0.1.1/functions/copy_modules_into.lua b/CopyPasteModules/functions/copy_modules_into.lua similarity index 100% rename from CopyPasteModules_0.1.1/functions/copy_modules_into.lua rename to CopyPasteModules/functions/copy_modules_into.lua diff --git a/CopyPasteModules_0.1.1/functions/process_blueprint.lua b/CopyPasteModules/functions/process_blueprint.lua similarity index 100% rename from CopyPasteModules_0.1.1/functions/process_blueprint.lua rename to CopyPasteModules/functions/process_blueprint.lua diff --git a/CopyPasteModules_0.1.1/info.json b/CopyPasteModules/info.json similarity index 100% rename from CopyPasteModules_0.1.1/info.json rename to CopyPasteModules/info.json diff --git a/CopyPasteModules_0.1.1/locale/en/config.cfg b/CopyPasteModules/locale/en/config.cfg similarity index 100% rename from CopyPasteModules_0.1.1/locale/en/config.cfg rename to CopyPasteModules/locale/en/config.cfg diff --git a/CopyPasteModules_0.1.1/locale/ru/config.cfg b/CopyPasteModules/locale/ru/config.cfg similarity index 100% rename from CopyPasteModules_0.1.1/locale/ru/config.cfg rename to CopyPasteModules/locale/ru/config.cfg diff --git a/CopyPasteModules_0.1.1/settings.lua b/CopyPasteModules/settings.lua similarity index 100% rename from CopyPasteModules_0.1.1/settings.lua rename to CopyPasteModules/settings.lua diff --git a/CopyPasteModules_0.1.1/thumbnail.png b/CopyPasteModules/thumbnail.png similarity index 100% rename from CopyPasteModules_0.1.1/thumbnail.png rename to CopyPasteModules/thumbnail.png diff --git a/Cursed-FMD_0.1.8/changelog.txt b/Cursed-FMD/changelog.txt similarity index 100% rename from Cursed-FMD_0.1.8/changelog.txt rename to Cursed-FMD/changelog.txt diff --git a/Cursed-FMD_0.1.8/control.lua b/Cursed-FMD/control.lua similarity index 100% rename from Cursed-FMD_0.1.8/control.lua rename to Cursed-FMD/control.lua diff --git a/Cursed-FMD_0.1.8/data-final-fixes.lua b/Cursed-FMD/data-final-fixes.lua similarity index 100% rename from Cursed-FMD_0.1.8/data-final-fixes.lua rename to Cursed-FMD/data-final-fixes.lua diff --git a/Cursed-FMD_0.1.8/data.lua b/Cursed-FMD/data.lua similarity index 100% rename from Cursed-FMD_0.1.8/data.lua rename to Cursed-FMD/data.lua diff --git a/Cursed-FMD_0.1.8/icon_64.png b/Cursed-FMD/icon_64.png similarity index 100% rename from Cursed-FMD_0.1.8/icon_64.png rename to Cursed-FMD/icon_64.png diff --git a/Cursed-FMD_0.1.8/info.json b/Cursed-FMD/info.json similarity index 100% rename from Cursed-FMD_0.1.8/info.json rename to Cursed-FMD/info.json diff --git a/Cursed-FMD_0.1.8/thumbnail.png b/Cursed-FMD/thumbnail.png similarity index 100% rename from Cursed-FMD_0.1.8/thumbnail.png rename to Cursed-FMD/thumbnail.png diff --git a/DeadlockLargerLamp/changelog.txt b/DeadlockLargerLamp/changelog.txt new file mode 100644 index 00000000..7825baf3 --- /dev/null +++ b/DeadlockLargerLamp/changelog.txt @@ -0,0 +1,114 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 07. 12. 2020 + Changes: + - Added a 2x2 floor lamp which can be walked over. It illuminates the same large radius but uses half the energy, is dimmer, and has no circuit connection. + - Re-rendered the older lamps to match IR2 style. +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 25. 11. 2020 + Changes: + - Update for Factorio 1.1.x. + - Reduced the crafting cost of both lamps a little bit. + - Reduced the pollution of copper lamps. + - Deconstruction time of both lamps reduced to 0.2s. + - The large lamp now uses the same kind of signal-coloured glow as vanilla lamps do in Factorio 1.1.0. + Fixes: + - The copper lamp is now a chemical fuel burner entity. Unnecessary "lamp recipes" removed. + - Icons now use mipmap format. + - Fixed that the copper lamp entity icon was wrong (e.g. as it appears in upgrade planner). + - Set the automatic "next upgrade" of the copper lamp to the large lamp with some misgivings. + - Fixed missing destruction effects. + - Remnants are a more appropriate size. + - Removed global scope from data stage functions. + - Copper lamp active recipe is not shown in map overlay (1.1.1). +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 01. 02. 2020 + Changes: + - Simple update for Factorio 0.18. +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 15. 10. 2019 + Changes: + - Now requires the stable Factorio 0.17.69 release (or later). + - Both large lamps now use a custom sprite for their glow radius, which allows for a smaller render. + - In Factorio 0.17.70 (or later), the renderer search radius for lights is slightly increased, which reduces "pop-in" when large lamp glows move on to the screen. +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 10. 09. 2019 + Changes: + - Hidden optional dependency on Dectorio, to smooth out lamp colour order issues with DLL + Dectorio + Industrial Revolution. +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 +Date: 09. 08. 2019 + Changes: + - Copper lamp fuel recipes no longer need a dummy item. + - Now uses util.parse_energy() to more reliably detect fuel values. + - Seriously grunged the texture of the big lamp. +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 01. 06. 2019 + Changes: + - Added a lamp colours pass in data-final-fixes, so that other mods which add/change lamp colours are supported more generally (e.g. Six Bit Lamps). + - The optional dependency on Dectorio was removed because it is now covered by the above change. + - Squeak Through has been marked as incompatible. The special measures to fix its problems were removed. The incompatibility flag will be taken off once it stops breaking other mods. +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 18. 05. 2019 + Changes: + - Increased the collision box for both kinds of lamp. + - Added missing "mined sound" and fire resistance to large electric lamp. + - More adjustments to undo collision box shenanigans caused by other mods not minding their own business. +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 17. 05. 2019 + Changes: + - Added a check for Squeak Through and undo its breathtaking liberties if detected. +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 16. 05. 2019 + Changes: + - Fixed that large fuel values with a decimal place were being herped when they should have been derped. + - Fixed that fuel "burnt_result" was being ignored. +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 10. 05. 2019 + Changes: + - Build large lamp entity from scratch instead of assuming some other mod hasn't messed with the vanilla lamp. +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 10. 05. 2019 + Changes: + - Changed the copper lamp to look more like an ancestor of the electric lamp. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 7. 05. 2019 + Changes: + - Added a copper burner lamp (simulated). Runs on any "chemical" solid fuel it can detect. 4MJ = 1 in-game day of light. +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 22. 04. 2019 + Changes: + - Another texture change. +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 21. 04. 2019 + Changes: + - Another texture change. +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 21. 04. 2019 + Changes: + - Use vanilla's circuit connector generator instead of guessing. + - Updated the lamp's textures to match my other mods. +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 02. 04. 2019 + Changes: + - Added Dectorio as an optional dependency, so that its extra colours are available. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 30. 03. 2019 + Changes: + - Initial release. \ No newline at end of file diff --git a/DeadlockLargerLamp_1.5.1/control.lua b/DeadlockLargerLamp/control.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/control.lua rename to DeadlockLargerLamp/control.lua diff --git a/DeadlockLargerLamp_1.5.1/data-final-fixes.lua b/DeadlockLargerLamp/data-final-fixes.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/data-final-fixes.lua rename to DeadlockLargerLamp/data-final-fixes.lua diff --git a/DeadlockLargerLamp_1.5.1/data.lua b/DeadlockLargerLamp/data.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/data.lua rename to DeadlockLargerLamp/data.lua diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/blank.png b/DeadlockLargerLamp/graphics/entities/blank.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/blank.png rename to DeadlockLargerLamp/graphics/entities/blank.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-base.png b/DeadlockLargerLamp/graphics/entities/hr-copper-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/hr-copper-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-shadow.png b/DeadlockLargerLamp/graphics/entities/hr-copper-lamp-shadow.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-shadow.png rename to DeadlockLargerLamp/graphics/entities/hr-copper-lamp-shadow.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-working.png b/DeadlockLargerLamp/graphics/entities/hr-copper-lamp-working.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-copper-lamp-working.png rename to DeadlockLargerLamp/graphics/entities/hr-copper-lamp-working.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-floor-lamp-base.png b/DeadlockLargerLamp/graphics/entities/hr-floor-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-floor-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/hr-floor-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-floor-lamp-light.png b/DeadlockLargerLamp/graphics/entities/hr-floor-lamp-light.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-floor-lamp-light.png rename to DeadlockLargerLamp/graphics/entities/hr-floor-lamp-light.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-base.png b/DeadlockLargerLamp/graphics/entities/hr-large-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/hr-large-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-light.png b/DeadlockLargerLamp/graphics/entities/hr-large-lamp-light.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-light.png rename to DeadlockLargerLamp/graphics/entities/hr-large-lamp-light.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-shadow.png b/DeadlockLargerLamp/graphics/entities/hr-large-lamp-shadow.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/hr-large-lamp-shadow.png rename to DeadlockLargerLamp/graphics/entities/hr-large-lamp-shadow.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/light.png b/DeadlockLargerLamp/graphics/entities/light.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/light.png rename to DeadlockLargerLamp/graphics/entities/light.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-base.png b/DeadlockLargerLamp/graphics/entities/lr-copper-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/lr-copper-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-shadow.png b/DeadlockLargerLamp/graphics/entities/lr-copper-lamp-shadow.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-shadow.png rename to DeadlockLargerLamp/graphics/entities/lr-copper-lamp-shadow.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-working.png b/DeadlockLargerLamp/graphics/entities/lr-copper-lamp-working.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-copper-lamp-working.png rename to DeadlockLargerLamp/graphics/entities/lr-copper-lamp-working.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-floor-lamp-base.png b/DeadlockLargerLamp/graphics/entities/lr-floor-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-floor-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/lr-floor-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-floor-lamp-light.png b/DeadlockLargerLamp/graphics/entities/lr-floor-lamp-light.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-floor-lamp-light.png rename to DeadlockLargerLamp/graphics/entities/lr-floor-lamp-light.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-base.png b/DeadlockLargerLamp/graphics/entities/lr-large-lamp-base.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-base.png rename to DeadlockLargerLamp/graphics/entities/lr-large-lamp-base.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-light.png b/DeadlockLargerLamp/graphics/entities/lr-large-lamp-light.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-light.png rename to DeadlockLargerLamp/graphics/entities/lr-large-lamp-light.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-shadow.png b/DeadlockLargerLamp/graphics/entities/lr-large-lamp-shadow.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/entities/lr-large-lamp-shadow.png rename to DeadlockLargerLamp/graphics/entities/lr-large-lamp-shadow.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/icons/copper-lamp.png b/DeadlockLargerLamp/graphics/icons/copper-lamp.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/icons/copper-lamp.png rename to DeadlockLargerLamp/graphics/icons/copper-lamp.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/icons/floor-lamp.png b/DeadlockLargerLamp/graphics/icons/floor-lamp.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/icons/floor-lamp.png rename to DeadlockLargerLamp/graphics/icons/floor-lamp.png diff --git a/DeadlockLargerLamp_1.5.1/graphics/icons/large-lamp.png b/DeadlockLargerLamp/graphics/icons/large-lamp.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/graphics/icons/large-lamp.png rename to DeadlockLargerLamp/graphics/icons/large-lamp.png diff --git a/DeadlockLargerLamp_1.5.1/info.json b/DeadlockLargerLamp/info.json similarity index 100% rename from DeadlockLargerLamp_1.5.1/info.json rename to DeadlockLargerLamp/info.json diff --git a/DeadlockLargerLamp_1.5.1/locale/en/config.cfg b/DeadlockLargerLamp/locale/en/config.cfg similarity index 100% rename from DeadlockLargerLamp_1.5.1/locale/en/config.cfg rename to DeadlockLargerLamp/locale/en/config.cfg diff --git a/DeadlockLargerLamp_1.5.1/prototypes/entity.lua b/DeadlockLargerLamp/prototypes/entity.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/entity.lua rename to DeadlockLargerLamp/prototypes/entity.lua diff --git a/DeadlockLargerLamp_1.5.1/prototypes/functions.lua b/DeadlockLargerLamp/prototypes/functions.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/functions.lua rename to DeadlockLargerLamp/prototypes/functions.lua diff --git a/DeadlockLargerLamp_1.5.1/prototypes/globals.lua b/DeadlockLargerLamp/prototypes/globals.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/globals.lua rename to DeadlockLargerLamp/prototypes/globals.lua diff --git a/DeadlockLargerLamp_1.5.1/prototypes/item.lua b/DeadlockLargerLamp/prototypes/item.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/item.lua rename to DeadlockLargerLamp/prototypes/item.lua diff --git a/DeadlockLargerLamp_1.5.1/prototypes/recipe.lua b/DeadlockLargerLamp/prototypes/recipe.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/recipe.lua rename to DeadlockLargerLamp/prototypes/recipe.lua diff --git a/DeadlockLargerLamp_1.5.1/prototypes/technology.lua b/DeadlockLargerLamp/prototypes/technology.lua similarity index 100% rename from DeadlockLargerLamp_1.5.1/prototypes/technology.lua rename to DeadlockLargerLamp/prototypes/technology.lua diff --git a/DeadlockLargerLamp_1.5.1/thumbnail.png b/DeadlockLargerLamp/thumbnail.png similarity index 100% rename from DeadlockLargerLamp_1.5.1/thumbnail.png rename to DeadlockLargerLamp/thumbnail.png diff --git a/DeadlockLargerLamp_1.5.1/changelog.txt b/DeadlockLargerLamp_1.5.1/changelog.txt deleted file mode 100644 index c38cda75..00000000 --- a/DeadlockLargerLamp_1.5.1/changelog.txt +++ /dev/null @@ -1,119 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.5.1 -Date: 14. 5. 2023 - Compatibility: - - Afraid Of The Dark was marked as incompatible. ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 -Date: 07. 12. 2020 - Changes: - - Added a 2x2 floor lamp which can be walked over. It illuminates the same large radius but uses half the energy, is dimmer, and has no circuit connection. - - Re-rendered the older lamps to match IR2 style. ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 25. 11. 2020 - Changes: - - Update for Factorio 1.1.x. - - Reduced the crafting cost of both lamps a little bit. - - Reduced the pollution of copper lamps. - - Deconstruction time of both lamps reduced to 0.2s. - - The large lamp now uses the same kind of signal-coloured glow as vanilla lamps do in Factorio 1.1.0. - Fixes: - - The copper lamp is now a chemical fuel burner entity. Unnecessary "lamp recipes" removed. - - Icons now use mipmap format. - - Fixed that the copper lamp entity icon was wrong (e.g. as it appears in upgrade planner). - - Set the automatic "next upgrade" of the copper lamp to the large lamp with some misgivings. - - Fixed missing destruction effects. - - Remnants are a more appropriate size. - - Removed global scope from data stage functions. - - Copper lamp active recipe is not shown in map overlay (1.1.1). ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 01. 02. 2020 - Changes: - - Simple update for Factorio 0.18. ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 15. 10. 2019 - Changes: - - Now requires the stable Factorio 0.17.69 release (or later). - - Both large lamps now use a custom sprite for their glow radius, which allows for a smaller render. - - In Factorio 0.17.70 (or later), the renderer search radius for lights is slightly increased, which reduces "pop-in" when large lamp glows move on to the screen. ---------------------------------------------------------------------------------------------------- -Version: 1.2.7 -Date: 10. 09. 2019 - Changes: - - Hidden optional dependency on Dectorio, to smooth out lamp colour order issues with DLL + Dectorio + Industrial Revolution. ---------------------------------------------------------------------------------------------------- -Version: 1.2.6 -Date: 09. 08. 2019 - Changes: - - Copper lamp fuel recipes no longer need a dummy item. - - Now uses util.parse_energy() to more reliably detect fuel values. - - Seriously grunged the texture of the big lamp. ---------------------------------------------------------------------------------------------------- -Version: 1.2.5 -Date: 01. 06. 2019 - Changes: - - Added a lamp colours pass in data-final-fixes, so that other mods which add/change lamp colours are supported more generally (e.g. Six Bit Lamps). - - The optional dependency on Dectorio was removed because it is now covered by the above change. - - Squeak Through has been marked as incompatible. The special measures to fix its problems were removed. The incompatibility flag will be taken off once it stops breaking other mods. ---------------------------------------------------------------------------------------------------- -Version: 1.2.4 -Date: 18. 05. 2019 - Changes: - - Increased the collision box for both kinds of lamp. - - Added missing "mined sound" and fire resistance to large electric lamp. - - More adjustments to undo collision box shenanigans caused by other mods not minding their own business. ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 17. 05. 2019 - Changes: - - Added a check for Squeak Through and undo its breathtaking liberties if detected. ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 16. 05. 2019 - Changes: - - Fixed that large fuel values with a decimal place were being herped when they should have been derped. - - Fixed that fuel "burnt_result" was being ignored. ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 10. 05. 2019 - Changes: - - Build large lamp entity from scratch instead of assuming some other mod hasn't messed with the vanilla lamp. ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 10. 05. 2019 - Changes: - - Changed the copper lamp to look more like an ancestor of the electric lamp. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 7. 05. 2019 - Changes: - - Added a copper burner lamp (simulated). Runs on any "chemical" solid fuel it can detect. 4MJ = 1 in-game day of light. ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 22. 04. 2019 - Changes: - - Another texture change. ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 21. 04. 2019 - Changes: - - Another texture change. ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 21. 04. 2019 - Changes: - - Use vanilla's circuit connector generator instead of guessing. - - Updated the lamp's textures to match my other mods. ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 02. 04. 2019 - Changes: - - Added Dectorio as an optional dependency, so that its extra colours are available. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 30. 03. 2019 - Changes: - - Initial release. \ No newline at end of file diff --git a/DeadlockLargerLamp_1.5.1/graphics/icons/deadlock-copper-lamp-32.png b/DeadlockLargerLamp_1.5.1/graphics/icons/deadlock-copper-lamp-32.png deleted file mode 100644 index 888311cb..00000000 Binary files a/DeadlockLargerLamp_1.5.1/graphics/icons/deadlock-copper-lamp-32.png and /dev/null differ diff --git a/DeadlockResearchNotifications_1.0.2/changelog.txt b/DeadlockResearchNotifications/changelog.txt similarity index 100% rename from DeadlockResearchNotifications_1.0.2/changelog.txt rename to DeadlockResearchNotifications/changelog.txt diff --git a/DeadlockResearchNotifications_1.0.2/control.lua b/DeadlockResearchNotifications/control.lua similarity index 100% rename from DeadlockResearchNotifications_1.0.2/control.lua rename to DeadlockResearchNotifications/control.lua diff --git a/DeadlockResearchNotifications_1.0.2/data.lua b/DeadlockResearchNotifications/data.lua similarity index 100% rename from DeadlockResearchNotifications_1.0.2/data.lua rename to DeadlockResearchNotifications/data.lua diff --git a/DeadlockResearchNotifications_1.0.2/info.json b/DeadlockResearchNotifications/info.json similarity index 100% rename from DeadlockResearchNotifications_1.0.2/info.json rename to DeadlockResearchNotifications/info.json diff --git a/DeadlockResearchNotifications_1.0.2/license.txt b/DeadlockResearchNotifications/license.txt similarity index 100% rename from DeadlockResearchNotifications_1.0.2/license.txt rename to DeadlockResearchNotifications/license.txt diff --git a/DeadlockResearchNotifications_1.0.2/locale/en/locale.cfg b/DeadlockResearchNotifications/locale/en/locale.cfg similarity index 100% rename from DeadlockResearchNotifications_1.0.2/locale/en/locale.cfg rename to DeadlockResearchNotifications/locale/en/locale.cfg diff --git a/DeadlockResearchNotifications_1.0.2/settings.lua b/DeadlockResearchNotifications/settings.lua similarity index 100% rename from DeadlockResearchNotifications_1.0.2/settings.lua rename to DeadlockResearchNotifications/settings.lua diff --git a/DeadlockResearchNotifications_1.0.2/thumbnail.png b/DeadlockResearchNotifications/thumbnail.png similarity index 100% rename from DeadlockResearchNotifications_1.0.2/thumbnail.png rename to DeadlockResearchNotifications/thumbnail.png diff --git a/DeleteEmptyChunks_0.4.3/README.md b/DeleteEmptyChunks/README.md similarity index 100% rename from DeleteEmptyChunks_0.4.3/README.md rename to DeleteEmptyChunks/README.md diff --git a/DeleteEmptyChunks_0.4.3/changelog.txt b/DeleteEmptyChunks/changelog.txt similarity index 100% rename from DeleteEmptyChunks_0.4.3/changelog.txt rename to DeleteEmptyChunks/changelog.txt diff --git a/DeleteEmptyChunks_0.4.3/control.lua b/DeleteEmptyChunks/control.lua similarity index 100% rename from DeleteEmptyChunks_0.4.3/control.lua rename to DeleteEmptyChunks/control.lua diff --git a/DeleteEmptyChunks_0.4.3/data.lua b/DeleteEmptyChunks/data.lua similarity index 100% rename from DeleteEmptyChunks_0.4.3/data.lua rename to DeleteEmptyChunks/data.lua diff --git a/DeleteEmptyChunks_0.4.3/description.md b/DeleteEmptyChunks/description.md similarity index 100% rename from DeleteEmptyChunks_0.4.3/description.md rename to DeleteEmptyChunks/description.md diff --git a/DeleteEmptyChunks_0.4.3/graphics/DeleteEmptyChunks_button.png b/DeleteEmptyChunks/graphics/DeleteEmptyChunks_button.png similarity index 100% rename from DeleteEmptyChunks_0.4.3/graphics/DeleteEmptyChunks_button.png rename to DeleteEmptyChunks/graphics/DeleteEmptyChunks_button.png diff --git a/DeleteEmptyChunks_0.4.3/info.json b/DeleteEmptyChunks/info.json similarity index 100% rename from DeleteEmptyChunks_0.4.3/info.json rename to DeleteEmptyChunks/info.json diff --git a/DeleteEmptyChunks_0.4.3/locale/en/locale.cfg b/DeleteEmptyChunks/locale/en/locale.cfg similarity index 100% rename from DeleteEmptyChunks_0.4.3/locale/en/locale.cfg rename to DeleteEmptyChunks/locale/en/locale.cfg diff --git a/DeleteEmptyChunks_0.4.3/settings.lua b/DeleteEmptyChunks/settings.lua similarity index 100% rename from DeleteEmptyChunks_0.4.3/settings.lua rename to DeleteEmptyChunks/settings.lua diff --git a/DeleteEmptyChunks_0.4.3/thumbnail.png b/DeleteEmptyChunks/thumbnail.png similarity index 100% rename from DeleteEmptyChunks_0.4.3/thumbnail.png rename to DeleteEmptyChunks/thumbnail.png diff --git a/DewPointAggregator_9.0.28/biometypes.lua b/DewPointAggregator/biometypes.lua similarity index 100% rename from DewPointAggregator_9.0.28/biometypes.lua rename to DewPointAggregator/biometypes.lua diff --git a/DewPointAggregator_9.0.28/control.lua b/DewPointAggregator/control.lua similarity index 100% rename from DewPointAggregator_9.0.28/control.lua rename to DewPointAggregator/control.lua diff --git a/DewPointAggregator_9.0.28/data.lua b/DewPointAggregator/data.lua similarity index 100% rename from DewPointAggregator_9.0.28/data.lua rename to DewPointAggregator/data.lua diff --git a/DewPointAggregator_9.0.28/graphics/icon128.png b/DewPointAggregator/graphics/icon128.png similarity index 100% rename from DewPointAggregator_9.0.28/graphics/icon128.png rename to DewPointAggregator/graphics/icon128.png diff --git a/DewPointAggregator_9.0.28/graphics/icon2.png b/DewPointAggregator/graphics/icon2.png similarity index 100% rename from DewPointAggregator_9.0.28/graphics/icon2.png rename to DewPointAggregator/graphics/icon2.png diff --git a/DewPointAggregator_9.0.28/graphics/shadow.png b/DewPointAggregator/graphics/shadow.png similarity index 100% rename from DewPointAggregator_9.0.28/graphics/shadow.png rename to DewPointAggregator/graphics/shadow.png diff --git a/DewPointAggregator_9.0.28/graphics/sprite2.png b/DewPointAggregator/graphics/sprite2.png similarity index 100% rename from DewPointAggregator_9.0.28/graphics/sprite2.png rename to DewPointAggregator/graphics/sprite2.png diff --git a/DewPointAggregator_9.0.28/graphics/tech.png b/DewPointAggregator/graphics/tech.png similarity index 100% rename from DewPointAggregator_9.0.28/graphics/tech.png rename to DewPointAggregator/graphics/tech.png diff --git a/DewPointAggregator_9.0.28/info.json b/DewPointAggregator/info.json similarity index 100% rename from DewPointAggregator_9.0.28/info.json rename to DewPointAggregator/info.json diff --git a/DewPointAggregator_9.0.28/locale/en/locale.cfg b/DewPointAggregator/locale/en/locale.cfg similarity index 100% rename from DewPointAggregator_9.0.28/locale/en/locale.cfg rename to DewPointAggregator/locale/en/locale.cfg diff --git a/DewPointAggregator_9.0.28/sound.ogg b/DewPointAggregator/sound.ogg similarity index 100% rename from DewPointAggregator_9.0.28/sound.ogg rename to DewPointAggregator/sound.ogg diff --git a/DewPointAggregator_9.0.28/thumbnail.png b/DewPointAggregator/thumbnail.png similarity index 100% rename from DewPointAggregator_9.0.28/thumbnail.png rename to DewPointAggregator/thumbnail.png diff --git a/DragonIndustries_1.152.1/arrays.lua b/DragonIndustries/arrays.lua similarity index 100% rename from DragonIndustries_1.152.1/arrays.lua rename to DragonIndustries/arrays.lua diff --git a/DragonIndustries_1.152.1/biomecolor.lua b/DragonIndustries/biomecolor.lua similarity index 100% rename from DragonIndustries_1.152.1/biomecolor.lua rename to DragonIndustries/biomecolor.lua diff --git a/DragonIndustries_1.152.1/biters.lua b/DragonIndustries/biters.lua similarity index 100% rename from DragonIndustries_1.152.1/biters.lua rename to DragonIndustries/biters.lua diff --git a/DragonIndustries_1.152.1/boxes.lua b/DragonIndustries/boxes.lua similarity index 100% rename from DragonIndustries_1.152.1/boxes.lua rename to DragonIndustries/boxes.lua diff --git a/DragonIndustries_1.152.1/changelog-input.txt b/DragonIndustries/changelog-input.txt similarity index 100% rename from DragonIndustries_1.152.1/changelog-input.txt rename to DragonIndustries/changelog-input.txt diff --git a/DragonIndustries_1.152.1/changelog.txt b/DragonIndustries/changelog.txt similarity index 100% rename from DragonIndustries_1.152.1/changelog.txt rename to DragonIndustries/changelog.txt diff --git a/DragonIndustries_1.152.1/cloning.lua b/DragonIndustries/cloning.lua similarity index 100% rename from DragonIndustries_1.152.1/cloning.lua rename to DragonIndustries/cloning.lua diff --git a/DragonIndustries_1.152.1/color.lua b/DragonIndustries/color.lua similarity index 100% rename from DragonIndustries_1.152.1/color.lua rename to DragonIndustries/color.lua diff --git a/DragonIndustries_1.152.1/control.lua b/DragonIndustries/control.lua similarity index 100% rename from DragonIndustries_1.152.1/control.lua rename to DragonIndustries/control.lua diff --git a/DragonIndustries_1.152.1/data-final-fixes.lua b/DragonIndustries/data-final-fixes.lua similarity index 100% rename from DragonIndustries_1.152.1/data-final-fixes.lua rename to DragonIndustries/data-final-fixes.lua diff --git a/DragonIndustries_1.152.1/data-updates.lua b/DragonIndustries/data-updates.lua similarity index 100% rename from DragonIndustries_1.152.1/data-updates.lua rename to DragonIndustries/data-updates.lua diff --git a/DragonIndustries_1.152.1/data.lua b/DragonIndustries/data.lua similarity index 100% rename from DragonIndustries_1.152.1/data.lua rename to DragonIndustries/data.lua diff --git a/DragonIndustries_1.152.1/entities.lua b/DragonIndustries/entities.lua similarity index 100% rename from DragonIndustries_1.152.1/entities.lua rename to DragonIndustries/entities.lua diff --git a/DragonIndustries_1.152.1/entitytracker.lua b/DragonIndustries/entitytracker.lua similarity index 100% rename from DragonIndustries_1.152.1/entitytracker.lua rename to DragonIndustries/entitytracker.lua diff --git a/DragonIndustries_1.152.1/eventhandling.lua b/DragonIndustries/eventhandling.lua similarity index 100% rename from DragonIndustries_1.152.1/eventhandling.lua rename to DragonIndustries/eventhandling.lua diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/acetic-acid.png b/DragonIndustries/graphics/icons/chemicals/acetic-acid.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/acetic-acid.png rename to DragonIndustries/graphics/icons/chemicals/acetic-acid.png diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/acetone.png b/DragonIndustries/graphics/icons/chemicals/acetone.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/acetone.png rename to DragonIndustries/graphics/icons/chemicals/acetone.png diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/benzene.png b/DragonIndustries/graphics/icons/chemicals/benzene.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/benzene.png rename to DragonIndustries/graphics/icons/chemicals/benzene.png diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/carbon-dioxide.png b/DragonIndustries/graphics/icons/chemicals/carbon-dioxide.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/carbon-dioxide.png rename to DragonIndustries/graphics/icons/chemicals/carbon-dioxide.png diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/ethanol.png b/DragonIndustries/graphics/icons/chemicals/ethanol.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/ethanol.png rename to DragonIndustries/graphics/icons/chemicals/ethanol.png diff --git a/DragonIndustries_1.152.1/graphics/icons/chemicals/isopropanol.png b/DragonIndustries/graphics/icons/chemicals/isopropanol.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/chemicals/isopropanol.png rename to DragonIndustries/graphics/icons/chemicals/isopropanol.png diff --git a/DragonIndustries_1.152.1/graphics/icons/conversion_overlay.png b/DragonIndustries/graphics/icons/conversion_overlay.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/conversion_overlay.png rename to DragonIndustries/graphics/icons/conversion_overlay.png diff --git a/DragonIndustries_1.152.1/graphics/icons/overlay_1.png b/DragonIndustries/graphics/icons/overlay_1.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/overlay_1.png rename to DragonIndustries/graphics/icons/overlay_1.png diff --git a/DragonIndustries_1.152.1/graphics/icons/overlay_2.png b/DragonIndustries/graphics/icons/overlay_2.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/overlay_2.png rename to DragonIndustries/graphics/icons/overlay_2.png diff --git a/DragonIndustries_1.152.1/graphics/icons/overlay_3.png b/DragonIndustries/graphics/icons/overlay_3.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/overlay_3.png rename to DragonIndustries/graphics/icons/overlay_3.png diff --git a/DragonIndustries_1.152.1/graphics/icons/overlay_4.png b/DragonIndustries/graphics/icons/overlay_4.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/overlay_4.png rename to DragonIndustries/graphics/icons/overlay_4.png diff --git a/DragonIndustries_1.152.1/graphics/icons/overlay_5.png b/DragonIndustries/graphics/icons/overlay_5.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/overlay_5.png rename to DragonIndustries/graphics/icons/overlay_5.png diff --git a/DragonIndustries_1.152.1/graphics/icons/pinpoint-alert.png b/DragonIndustries/graphics/icons/pinpoint-alert.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/pinpoint-alert.png rename to DragonIndustries/graphics/icons/pinpoint-alert.png diff --git a/DragonIndustries_1.152.1/graphics/icons/uncrafting_overlay.png b/DragonIndustries/graphics/icons/uncrafting_overlay.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/icons/uncrafting_overlay.png rename to DragonIndustries/graphics/icons/uncrafting_overlay.png diff --git a/DragonIndustries_1.152.1/graphics/multi-recipe.png b/DragonIndustries/graphics/multi-recipe.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/multi-recipe.png rename to DragonIndustries/graphics/multi-recipe.png diff --git a/DragonIndustries_1.152.1/graphics/signal-connection.png b/DragonIndustries/graphics/signal-connection.png similarity index 100% rename from DragonIndustries_1.152.1/graphics/signal-connection.png rename to DragonIndustries/graphics/signal-connection.png diff --git a/DragonIndustries_1.152.1/info.json b/DragonIndustries/info.json similarity index 100% rename from DragonIndustries_1.152.1/info.json rename to DragonIndustries/info.json diff --git a/DragonIndustries_1.152.1/interpolation.lua b/DragonIndustries/interpolation.lua similarity index 100% rename from DragonIndustries_1.152.1/interpolation.lua rename to DragonIndustries/interpolation.lua diff --git a/DragonIndustries_1.152.1/items.lua b/DragonIndustries/items.lua similarity index 100% rename from DragonIndustries_1.152.1/items.lua rename to DragonIndustries/items.lua diff --git a/DragonIndustries_1.152.1/locale/en/en.cfg b/DragonIndustries/locale/en/en.cfg similarity index 100% rename from DragonIndustries_1.152.1/locale/en/en.cfg rename to DragonIndustries/locale/en/en.cfg diff --git a/DragonIndustries_1.152.1/mathhelper.lua b/DragonIndustries/mathhelper.lua similarity index 100% rename from DragonIndustries_1.152.1/mathhelper.lua rename to DragonIndustries/mathhelper.lua diff --git a/DragonIndustries_1.152.1/ores.lua b/DragonIndustries/ores.lua similarity index 100% rename from DragonIndustries_1.152.1/ores.lua rename to DragonIndustries/ores.lua diff --git a/DragonIndustries_1.152.1/recipe.lua b/DragonIndustries/recipe.lua similarity index 100% rename from DragonIndustries_1.152.1/recipe.lua rename to DragonIndustries/recipe.lua diff --git a/DragonIndustries_1.152.1/registration.lua b/DragonIndustries/registration.lua similarity index 100% rename from DragonIndustries_1.152.1/registration.lua rename to DragonIndustries/registration.lua diff --git a/DragonIndustries_1.152.1/sprites.lua b/DragonIndustries/sprites.lua similarity index 100% rename from DragonIndustries_1.152.1/sprites.lua rename to DragonIndustries/sprites.lua diff --git a/DragonIndustries_1.152.1/strings.lua b/DragonIndustries/strings.lua similarity index 100% rename from DragonIndustries_1.152.1/strings.lua rename to DragonIndustries/strings.lua diff --git a/DragonIndustries_1.152.1/tech.lua b/DragonIndustries/tech.lua similarity index 100% rename from DragonIndustries_1.152.1/tech.lua rename to DragonIndustries/tech.lua diff --git a/DragonIndustries_1.152.1/thumbnail.png b/DragonIndustries/thumbnail.png similarity index 100% rename from DragonIndustries_1.152.1/thumbnail.png rename to DragonIndustries/thumbnail.png diff --git a/DragonIndustries_1.152.1/tiles.lua b/DragonIndustries/tiles.lua similarity index 100% rename from DragonIndustries_1.152.1/tiles.lua rename to DragonIndustries/tiles.lua diff --git a/DragonIndustries_1.152.1/utility-entities.lua b/DragonIndustries/utility-entities.lua similarity index 100% rename from DragonIndustries_1.152.1/utility-entities.lua rename to DragonIndustries/utility-entities.lua diff --git a/DragonIndustries_1.152.1/world.lua b/DragonIndustries/world.lua similarity index 100% rename from DragonIndustries_1.152.1/world.lua rename to DragonIndustries/world.lua diff --git a/DragonIndustries_1.152.1/xcontrol.luax b/DragonIndustries/xcontrol.luax similarity index 100% rename from DragonIndustries_1.152.1/xcontrol.luax rename to DragonIndustries/xcontrol.luax diff --git a/ERPTbaAB_0.2.2/changelog.txt b/ERPTbaAB/changelog.txt similarity index 100% rename from ERPTbaAB_0.2.2/changelog.txt rename to ERPTbaAB/changelog.txt diff --git a/ERPTbaAB_0.2.2/data-updates.lua b/ERPTbaAB/data-updates.lua similarity index 100% rename from ERPTbaAB_0.2.2/data-updates.lua rename to ERPTbaAB/data-updates.lua diff --git a/ERPTbaAB_0.2.2/data.lua b/ERPTbaAB/data.lua similarity index 100% rename from ERPTbaAB_0.2.2/data.lua rename to ERPTbaAB/data.lua diff --git a/ERPTbaAB_0.2.2/graphics/icons/random-dropship-light.png b/ERPTbaAB/graphics/icons/random-dropship-light.png similarity index 100% rename from ERPTbaAB_0.2.2/graphics/icons/random-dropship-light.png rename to ERPTbaAB/graphics/icons/random-dropship-light.png diff --git a/ERPTbaAB_0.2.2/graphics/icons/random-dropship.png b/ERPTbaAB/graphics/icons/random-dropship.png similarity index 100% rename from ERPTbaAB_0.2.2/graphics/icons/random-dropship.png rename to ERPTbaAB/graphics/icons/random-dropship.png diff --git a/ERPTbaAB_0.2.2/info.json b/ERPTbaAB/info.json similarity index 100% rename from ERPTbaAB_0.2.2/info.json rename to ERPTbaAB/info.json diff --git a/ERPTbaAB_0.2.2/locale/en/locale.cfg b/ERPTbaAB/locale/en/locale.cfg similarity index 100% rename from ERPTbaAB_0.2.2/locale/en/locale.cfg rename to ERPTbaAB/locale/en/locale.cfg diff --git a/ERPTbaAB_0.2.2/migrations/ERPTbaAB_0.0.1.lua b/ERPTbaAB/migrations/ERPTbaAB_0.0.1.lua similarity index 100% rename from ERPTbaAB_0.2.2/migrations/ERPTbaAB_0.0.1.lua rename to ERPTbaAB/migrations/ERPTbaAB_0.0.1.lua diff --git a/ERPTbaAB_0.2.2/migrations/ERPTbaAB_0.0.5.lua b/ERPTbaAB/migrations/ERPTbaAB_0.0.5.lua similarity index 100% rename from ERPTbaAB_0.2.2/migrations/ERPTbaAB_0.0.5.lua rename to ERPTbaAB/migrations/ERPTbaAB_0.0.5.lua diff --git a/ERPTbaAB_0.2.2/prototypes/item/dropships.lua b/ERPTbaAB/prototypes/item/dropships.lua similarity index 100% rename from ERPTbaAB_0.2.2/prototypes/item/dropships.lua rename to ERPTbaAB/prototypes/item/dropships.lua diff --git a/ERPTbaAB_0.2.2/prototypes/recipes/dropship-unboxing.lua b/ERPTbaAB/prototypes/recipes/dropship-unboxing.lua similarity index 100% rename from ERPTbaAB_0.2.2/prototypes/recipes/dropship-unboxing.lua rename to ERPTbaAB/prototypes/recipes/dropship-unboxing.lua diff --git a/ERPTbaAB_0.2.2/settings.lua b/ERPTbaAB/settings.lua similarity index 100% rename from ERPTbaAB_0.2.2/settings.lua rename to ERPTbaAB/settings.lua diff --git a/ERPTbaAB_0.2.2/thumbnail.png b/ERPTbaAB/thumbnail.png similarity index 100% rename from ERPTbaAB_0.2.2/thumbnail.png rename to ERPTbaAB/thumbnail.png diff --git a/ElectricResistance_1.1.5/MIT_license.txt b/ElectricResistance_1.1.5/MIT_license.txt deleted file mode 100644 index 76c6b6c4..00000000 --- a/ElectricResistance_1.1.5/MIT_license.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright 2020 darkfrei - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH -THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/ElectricResistance_1.1.5/changelog.txt b/ElectricResistance_1.1.5/changelog.txt deleted file mode 100644 index 02e27027..00000000 --- a/ElectricResistance_1.1.5/changelog.txt +++ /dev/null @@ -1,37 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 2020-09-26 - Changes: - - Update to Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 1.0.5 -Date: 2020-09-26 - Changes: - - Added events on script_raised_built, script_raised_destroy for Klonan's construction drones compatibility ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 2020-09-22 - Changes: - - Resistor will be indestructible ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2020-09-05 - Changes: - - Fixed issue with damage and ghosts ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2020-09-05 - Changes: - - Update to 1.0 - - Fixed issue with deconstruction planer - - Added settings value; default is 1 kW ---------------------------------------------------------------------------------------------------- -Version: 0.0.2 -Date: 2020-08-14 - Changes: - - Fixed issue with mined entity without entity ---------------------------------------------------------------------------------------------------- -Version: 0.0.1 -Date: 2020-07-20 - Changes: - - First release \ No newline at end of file diff --git a/ElectricResistance_1.1.5/control.lua b/ElectricResistance_1.1.5/control.lua deleted file mode 100644 index 1576e80b..00000000 --- a/ElectricResistance_1.1.5/control.lua +++ /dev/null @@ -1,100 +0,0 @@ - - -script.on_configuration_changed(function(data) - for i, surface in pairs (game.surfaces) do - local resistors = surface.find_entities_filtered{name="hidden-electric-resistance"} - for j, resistor in pairs (resistors) do --- surface.find_entity("", position) - local count = surface.count_entities_filtered{position=resistor.position, type="electric-pole"} - if count == 0 then - resistor.destroy() -- 1.0.2 - elseif resistor.destructible then - resistor.destructible = false - end - end - end -end) - -script.on_init(function(data) - local n = 0 - for i, surface in pairs (game.surfaces) do - local entities = surface.find_entities_filtered({type="electric-pole"}) - for j, entity in pairs (entities) do - add_resistor(entity) - end - n=n+#entities - end - game.print ('[Electric Resistance]: added ' .. n .. ' resistors') -end) - - -script.on_event(defines.events.on_robot_mined_entity, function(event) - -end) - -function add_resistor(entity) - local surface = entity.surface --- local position = entity.position --- create_entity{name=…, position=…, direction=…, force=…, target=…, source=…, fast_replace=…, player=…, spill=…, raise_built=…, create_build_effect_smoke=…} - local resistor = surface.create_entity{name="hidden-electric-resistance", - position = entity.position, - force = entity.force, - create_build_effect_smoke=false - } - resistor.destructible = false -- added in 1.0.4 -end - -function on_built_entity (entity) - if entity.type == "electric-pole" then - add_resistor(entity) - end -end - - -script.on_event(defines.events.on_built_entity, function(event) - on_built_entity (event.created_entity) -end) - -script.on_event(defines.events.on_robot_built_entity, function(event) - on_built_entity (event.created_entity) -end) - --- added in 1.0.5 -script.on_event(defines.events.script_raised_built, function(event) - on_built_entity (event.entity) -- why not created_entity, devs? -end) - - -function on_mined_entity (entity) --- if entity.valid - if entity and entity.type == "electric-pole" then - local surface = entity.surface - local resistor = surface.find_entity("hidden-electric-resistance", entity.position) - if resistor then - resistor.destroy() - end - end -end - -script.on_event(defines.events.on_player_mined_entity, function(event) --- game.print('on_player_mined_entity') - on_mined_entity (event.entity) -end) - -script.on_event(defines.events.on_robot_mined_entity, function(event) -- changed in 1.0.3 --- game.print('on_robot_mined_entity') - on_mined_entity (event.entity) -end) - -script.on_event(defines.events.on_entity_died, function(event) --- game.print('on_entity_died') - on_mined_entity (event.entity) -end) - --- added in 1.0.5 -script.on_event(defines.events.script_raised_destroy, function(event) --- game.print('on_entity_died') - on_mined_entity (event.entity) -end) - - diff --git a/ElectricResistance_1.1.5/data-final-fixes.lua b/ElectricResistance_1.1.5/data-final-fixes.lua deleted file mode 100644 index a7ea7998..00000000 --- a/ElectricResistance_1.1.5/data-final-fixes.lua +++ /dev/null @@ -1,64 +0,0 @@ --- I have a lot of mods, but sometimes I get errors like: - --- ===================================== -- --- 33.126 Error ModManager.cpp:1024: Error in assignID, item with name 'clowns-plate-osmium' does not exist. --- Source: alt2-production-science-pack (recipe). - --- 33.295 Mods to disable:Failed to load mods: Error in assignID, item with name 'clowns-plate-osmium' does not exist. --- Source: alt2-production-science-pack (recipe). --- Mods to be disabled: --- Clowns-Science --- angelsrefining --- ===================================== -- - --- let's fix it! - -log ('adding lost items and fluids') -local mod_name = "__RITEG__" - -function is_wrong_item (item_name) - if not item_name then return end - local item_type_list = {"ammo", "armor", "gun", "item", "capsule", "repair-tool", "mining-tool", "item-with-entity-data", "rail-planner", "tool", "blueprint", "deconstruction-item", "blueprint-book", "selection-tool", "item-with-tags", "item-with-label", "item-with-inventory", "module"} - local item_prot - for _,typ in pairs(item_type_list) do - local prot = data.raw[typ][item_name] - if prot then item_prot = prot end - end - - if not item_prot then - -- new_item = - -- { - -- type = "item", - -- name = item_name, - -- -- flags = {"goes-to-main-inventory"}, - -- icons = {{icon = mod_name.."/graphics/icons/no-icon.png"}}, icon_size = 32, - -- -- order = "e[electric-energy-interface]-b[electric-energy-interface]", - -- stack_size = 50, - -- -- subgroup = "energy", - -- } - log ('Deleted wrong item: '.. item_name) - return true - end - return false -end - -for recipe_name, recipe in pairs (data.raw.recipe) do - local handlers = {recipe} - if recipe.normal and recipe.expensive then handlers = {recipe.normal, recipe.expensive} end - for i, handler in pairs (handlers) do - if handler.ingredients then - for j, ingredient in pairs (handler.ingredients) do - local item_name, fluid_name - if ingredient.type and ingredient.type == "item" or ingredient[1] then - item_name = ingredient.name or ingredient[1] - elseif ingredient.type and ingredient.type == "fluid" then - fluid_name = ingredient.name - end - if is_wrong_item (item_name) then - handler.ingredients[j] = nil - end - end - end - - end -end \ No newline at end of file diff --git a/ElectricResistance_1.1.5/data.lua b/ElectricResistance_1.1.5/data.lua deleted file mode 100644 index fc4ada1d..00000000 --- a/ElectricResistance_1.1.5/data.lua +++ /dev/null @@ -1,113 +0,0 @@ -local mod_name = "__ElectricResistance__" -local name = "hidden-electric-resistance" - -local consumption = (settings.startup["electric-resistance-power-consumption"].value) .. "kW" - -local buffer_capacity = (17*settings.startup["electric-resistance-power-consumption"].value) .. "J" - -local energy_usage = (10*settings.startup["electric-resistance-power-consumption"].value) .. "kW" - -data:extend({ - -- items -- - { - type = "item", - icons = {{icon = mod_name.."/graphics/icons/"..name..".png"}}, - icon_size = 32, - name = name, - order = "e[electric-energy-interface]-b[electric-energy-interface]", - place_result = name, - stack_size = 50, - subgroup = "energy" - - }, - - - -- entities -- - { - type = "electric-energy-interface", - name = name, --- flags = {"placeable-off-grid", "not-on-map"}, -- fixed in 1.0.3 --- added from WiredLamps 1.0.3 - flags = { - "placeable-neutral", - "player-creation", - "fast-replaceable-no-build-while-moving", - "placeable-off-grid", - "not-on-map", - "not-blueprintable", - "not-deconstructable", - "not-selectable-in-game", --- "hidden" -- not added in 1.0.4 - }, - collision_mask = {}, -- nothing - selectable_in_game = false, - - - allow_copy_paste = false, - --- gui_mode = "all", - gui_mode = "none", - - energy_production = "0kW", - energy_source = { - type = "electric", --- buffer_capacity = "17J", - buffer_capacity = buffer_capacity, --- input_flow_limit = "1kW", - input_flow_limit = consumption, - output_flow_limit = "0kW", - - render_no_power_icon = false, --- usage_priority = "tertiary", - usage_priority = "primary-input", - drain = "10kW" - }, --- energy_usage = "10kW", - energy_usage = energy_usage, - icon = mod_name.."/graphics/icons/"..name..".png", - icon_size = 32, - max_health = 100, --- minable = { --- hardness = 0.2, --- mining_time = 5, --- results = {{used_up_name, 1},{"used-up-uranium-fuel-cell", 5}} --- }, - - picture = { - filename = mod_name.."/graphics/entities/"..name..".png", - width = 32, - height = 32, - priority = "low", - }, - - collision_box = {{-0.23, -0.23}, {0.23, 0.23}}, - selection_box = {{-0.23, -0.23}, {0.23, 0.23}}, - - --- vehicle_impact_sound = { --- filename = "__base__/sound/car-metal-impact.ogg", --- volume = 0.65 --- } - } - - -}) - - - - - - - - - - - - - - - - - - - diff --git a/ElectricResistance_1.1.5/graphics/entities/electric-resistance.png b/ElectricResistance_1.1.5/graphics/entities/electric-resistance.png deleted file mode 100644 index c206b959..00000000 Binary files a/ElectricResistance_1.1.5/graphics/entities/electric-resistance.png and /dev/null differ diff --git a/ElectricResistance_1.1.5/graphics/entities/hidden-electric-resistance.png b/ElectricResistance_1.1.5/graphics/entities/hidden-electric-resistance.png deleted file mode 100644 index 83bcb0de..00000000 Binary files a/ElectricResistance_1.1.5/graphics/entities/hidden-electric-resistance.png and /dev/null differ diff --git a/ElectricResistance_1.1.5/graphics/icons/hidden-electric-resistance.png b/ElectricResistance_1.1.5/graphics/icons/hidden-electric-resistance.png deleted file mode 100644 index c206b959..00000000 Binary files a/ElectricResistance_1.1.5/graphics/icons/hidden-electric-resistance.png and /dev/null differ diff --git a/ElectricResistance_1.1.5/graphics/icons/no-icon.png b/ElectricResistance_1.1.5/graphics/icons/no-icon.png deleted file mode 100644 index 32083ab1..00000000 Binary files a/ElectricResistance_1.1.5/graphics/icons/no-icon.png and /dev/null differ diff --git a/ElectricResistance_1.1.5/info.json b/ElectricResistance_1.1.5/info.json deleted file mode 100644 index 7b780913..00000000 --- a/ElectricResistance_1.1.5/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "ElectricResistance", - "version": "1.1.5", - "date": "2020-11-28", - - "title": "Electric Resistance", - "description": "Every electric pole needs 1 kW of electric power; UPS-free", - - "author": "darkfrei", - "license": "MIT", - - "dependencies": ["base"], - "factorio_version": "1.1" -} \ No newline at end of file diff --git a/ElectricResistance_1.1.5/locale/en/locale.cfg b/ElectricResistance_1.1.5/locale/en/locale.cfg deleted file mode 100644 index f84e6f43..00000000 --- a/ElectricResistance_1.1.5/locale/en/locale.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[entity-name] -hidden-electric-resistance=Electric Resistance - -[mod-setting-name] -electric-resistance-power-consumption=Power Consumption, kW \ No newline at end of file diff --git a/ElectricResistance_1.1.5/settings.lua b/ElectricResistance_1.1.5/settings.lua deleted file mode 100644 index f9ecc01c..00000000 --- a/ElectricResistance_1.1.5/settings.lua +++ /dev/null @@ -1,10 +0,0 @@ -data:extend({ - { - type = "int-setting", - name = "electric-resistance-power-consumption", - setting_type = "startup", - minimum_value = 1, - maximum_value = 600, - default_value = 1 - } -}) \ No newline at end of file diff --git a/ElectricResistance_1.1.5/test/data.lua b/ElectricResistance_1.1.5/test/data.lua deleted file mode 100644 index 93f47843..00000000 --- a/ElectricResistance_1.1.5/test/data.lua +++ /dev/null @@ -1,53 +0,0 @@ - ---[[ ---from -data.raw.ammo["firearm-magazine"].type = "ammo" -data.raw.ammo["firearm-magazine"].name = "firearm-magazine" -data.raw.ammo["firearm-magazine"].icon = "__base__/graphics/icons/firearm-magazine.png" -data.raw.ammo["firearm-magazine"].icon_size = 64 -data.raw.ammo["firearm-magazine"].icon_mipmaps = 4 -data.raw.ammo["firearm-magazine"].ammo_type.category = "bullet" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].type = "direct" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].type = "instant" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].source_effects[1] = {type = "create-explosion", entity_name = "explosion-gunshot"} -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[1].type = "create-entity" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[1].entity_name = "explosion-hit" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[1].offsets[1] = {0, 1} -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[1].offset_deviation[1] = {-0.5, -0.5} -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[1].offset_deviation[2] = {0.5, 0.5} -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[2].type = "damage" -data.raw.ammo["firearm-magazine"].ammo_type.action[1].action_delivery[1].target_effects[2].damage = {amount = 5, type = "physical"} -data.raw.ammo["firearm-magazine"].magazine_size = 10 -data.raw.ammo["firearm-magazine"].subgroup = "ammo" -data.raw.ammo["firearm-magazine"].order = "a[basic-clips]-a[firearm-magazine]" -data.raw.ammo["firearm-magazine"].stack_size = 200 - ---to -data.raw.item.stone.type = "item" -data.raw.item.stone.name = "stone" -data.raw.item.stone.icon = "__base__/graphics/icons/stone.png" -data.raw.item.stone.icon_size = 64 -data.raw.item.stone.icon_mipmaps = 4 -data.raw.item.stone.pictures[1] = {size = 64, filename = "__base__/graphics/icons/stone.png", scale = 0.25, mipmap_count = 4} -data.raw.item.stone.pictures[2] = {size = 64, filename = "__base__/graphics/icons/stone-1.png", scale = 0.25, mipmap_count = 4} -data.raw.item.stone.pictures[3] = {size = 64, filename = "__base__/graphics/icons/stone-2.png", scale = 0.25, mipmap_count = 4} -data.raw.item.stone.pictures[4] = {size = 64, filename = "__base__/graphics/icons/stone-3.png", scale = 0.25, mipmap_count = 4} -data.raw.item.stone.subgroup = "raw-resource" -data.raw.item.stone.order = "d[stone]" -data.raw.item.stone.stack_size = 50 - ---]] - - -local stone = data.raw.item.stone -data.raw.item.stone = nil -local ammo_stone = table.deepcopy (data.raw.ammo["firearm-magazine"]) - - -stone.type = ammo_stone.type -stone.ammo_type = ammo_stone.ammo_type -stone.magazine_size = ammo_stone.magazine_size -stone.subgroup = ammo_stone.subgroup -stone.ammo_type.action[1].action_delivery[1].target_effects[2].damage = {amount = 1, type = "physical"} - -data:extend({stone}) \ No newline at end of file diff --git a/ElectricResistance_1.1.5/thumbnail.png b/ElectricResistance_1.1.5/thumbnail.png deleted file mode 100644 index f0a44740..00000000 Binary files a/ElectricResistance_1.1.5/thumbnail.png and /dev/null differ diff --git a/Enhanced_Map_Colors_1.5.5/changelog.txt b/Enhanced_Map_Colors/changelog.txt similarity index 100% rename from Enhanced_Map_Colors_1.5.5/changelog.txt rename to Enhanced_Map_Colors/changelog.txt diff --git a/Enhanced_Map_Colors_1.5.5/control.lua b/Enhanced_Map_Colors/control.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/control.lua rename to Enhanced_Map_Colors/control.lua diff --git a/Enhanced_Map_Colors_1.5.5/data-updates.lua b/Enhanced_Map_Colors/data-updates.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/data-updates.lua rename to Enhanced_Map_Colors/data-updates.lua diff --git a/Enhanced_Map_Colors_1.5.5/data.lua b/Enhanced_Map_Colors/data.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/data.lua rename to Enhanced_Map_Colors/data.lua diff --git a/Enhanced_Map_Colors_1.5.5/graphics/colors.png b/Enhanced_Map_Colors/graphics/colors.png similarity index 100% rename from Enhanced_Map_Colors_1.5.5/graphics/colors.png rename to Enhanced_Map_Colors/graphics/colors.png diff --git a/Enhanced_Map_Colors_1.5.5/graphics/colors1.png b/Enhanced_Map_Colors/graphics/colors1.png similarity index 100% rename from Enhanced_Map_Colors_1.5.5/graphics/colors1.png rename to Enhanced_Map_Colors/graphics/colors1.png diff --git a/Enhanced_Map_Colors_1.5.5/gui.lua b/Enhanced_Map_Colors/gui.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/gui.lua rename to Enhanced_Map_Colors/gui.lua diff --git a/Enhanced_Map_Colors_1.5.5/info.json b/Enhanced_Map_Colors/info.json similarity index 100% rename from Enhanced_Map_Colors_1.5.5/info.json rename to Enhanced_Map_Colors/info.json diff --git a/Enhanced_Map_Colors_1.5.5/locale/en/en.cfg b/Enhanced_Map_Colors/locale/en/en.cfg similarity index 100% rename from Enhanced_Map_Colors_1.5.5/locale/en/en.cfg rename to Enhanced_Map_Colors/locale/en/en.cfg diff --git a/Enhanced_Map_Colors_1.5.5/settings.lua b/Enhanced_Map_Colors/settings.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/settings.lua rename to Enhanced_Map_Colors/settings.lua diff --git a/Enhanced_Map_Colors_1.5.5/styles.lua b/Enhanced_Map_Colors/styles.lua similarity index 100% rename from Enhanced_Map_Colors_1.5.5/styles.lua rename to Enhanced_Map_Colors/styles.lua diff --git a/Enhanced_Map_Colors_1.5.5/thumbnail.png b/Enhanced_Map_Colors/thumbnail.png similarity index 100% rename from Enhanced_Map_Colors_1.5.5/thumbnail.png rename to Enhanced_Map_Colors/thumbnail.png diff --git a/EvoGUI_0.4.601/README.md b/EvoGUI/README.md similarity index 100% rename from EvoGUI_0.4.601/README.md rename to EvoGUI/README.md diff --git a/EvoGUI_0.4.601/control.lua b/EvoGUI/control.lua similarity index 100% rename from EvoGUI_0.4.601/control.lua rename to EvoGUI/control.lua diff --git a/EvoGUI_0.4.601/data.lua b/EvoGUI/data.lua similarity index 100% rename from EvoGUI_0.4.601/data.lua rename to EvoGUI/data.lua diff --git a/EvoGUI_0.4.601/evoGUI.lua b/EvoGUI/evoGUI.lua similarity index 100% rename from EvoGUI_0.4.601/evoGUI.lua rename to EvoGUI/evoGUI.lua diff --git a/EvoGUI_0.4.601/graphics/gui.png b/EvoGUI/graphics/gui.png similarity index 100% rename from EvoGUI_0.4.601/graphics/gui.png rename to EvoGUI/graphics/gui.png diff --git a/EvoGUI_0.4.601/info.json b/EvoGUI/info.json similarity index 100% rename from EvoGUI_0.4.601/info.json rename to EvoGUI/info.json diff --git a/EvoGUI_0.4.601/locale/en/locale.cfg b/EvoGUI/locale/en/locale.cfg similarity index 100% rename from EvoGUI_0.4.601/locale/en/locale.cfg rename to EvoGUI/locale/en/locale.cfg diff --git a/EvoGUI_0.4.601/locale/ru/locale.cfg b/EvoGUI/locale/ru/locale.cfg similarity index 100% rename from EvoGUI_0.4.601/locale/ru/locale.cfg rename to EvoGUI/locale/ru/locale.cfg diff --git a/EvoGUI_0.4.601/prototypes/styles.lua b/EvoGUI/prototypes/styles.lua similarity index 100% rename from EvoGUI_0.4.601/prototypes/styles.lua rename to EvoGUI/prototypes/styles.lua diff --git a/EvoGUI_0.4.601/remote.lua b/EvoGUI/remote.lua similarity index 100% rename from EvoGUI_0.4.601/remote.lua rename to EvoGUI/remote.lua diff --git a/EvoGUI_0.4.601/settingsGUI.lua b/EvoGUI/settingsGUI.lua similarity index 100% rename from EvoGUI_0.4.601/settingsGUI.lua rename to EvoGUI/settingsGUI.lua diff --git a/EvoGUI_0.4.601/thumbnail.png b/EvoGUI/thumbnail.png similarity index 100% rename from EvoGUI_0.4.601/thumbnail.png rename to EvoGUI/thumbnail.png diff --git a/EvoGUI_0.4.601/value_sensors/day_time.lua b/EvoGUI/value_sensors/day_time.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/day_time.lua rename to EvoGUI/value_sensors/day_time.lua diff --git a/EvoGUI_0.4.601/value_sensors/evolution_factor.lua b/EvoGUI/value_sensors/evolution_factor.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/evolution_factor.lua rename to EvoGUI/value_sensors/evolution_factor.lua diff --git a/EvoGUI_0.4.601/value_sensors/kill_count.lua b/EvoGUI/value_sensors/kill_count.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/kill_count.lua rename to EvoGUI/value_sensors/kill_count.lua diff --git a/EvoGUI_0.4.601/value_sensors/play_time.lua b/EvoGUI/value_sensors/play_time.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/play_time.lua rename to EvoGUI/value_sensors/play_time.lua diff --git a/EvoGUI_0.4.601/value_sensors/player_locations.lua b/EvoGUI/value_sensors/player_locations.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/player_locations.lua rename to EvoGUI/value_sensors/player_locations.lua diff --git a/EvoGUI_0.4.601/value_sensors/pollution_around_player.lua b/EvoGUI/value_sensors/pollution_around_player.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/pollution_around_player.lua rename to EvoGUI/value_sensors/pollution_around_player.lua diff --git a/EvoGUI_0.4.601/value_sensors/remote_sensor.lua b/EvoGUI/value_sensors/remote_sensor.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/remote_sensor.lua rename to EvoGUI/value_sensors/remote_sensor.lua diff --git a/EvoGUI_0.4.601/value_sensors/template.lua b/EvoGUI/value_sensors/template.lua similarity index 100% rename from EvoGUI_0.4.601/value_sensors/template.lua rename to EvoGUI/value_sensors/template.lua diff --git a/FNEI/changelog.txt b/FNEI/changelog.txt new file mode 100644 index 00000000..a5e2dc88 --- /dev/null +++ b/FNEI/changelog.txt @@ -0,0 +1,309 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 2024-01-23 + Changes: + - Added Ukraine translation (MetenBouldry) + - Added Brazilian translation (LUISDASARTIMANHAS) + - Added settings for displaying hidden fluids in the fnei gui + - Hide hidden fluids by default + - Add "Hand extraction" for the mining entities + - Default settings for displaying hidden recipes are true. + - Changed caption for very low or high number on gui + Bugfixes: + - Fix fnei gui location off screen + - Fix open main fnei gui when click on the empty hotbar button + - Fix an issue related with the '_' symbol in the recipe name + - Fix incorrectly display mining entities + - Fix temperature range for ingredients + - Fix GUI lag while Improved Research Queue is installed +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 2021-03-29 + Bugfixes: + - Trying to fix desynchronization + - Remove deprecated setting +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 2020-11-28 + Changes: + - Update to 1.1 + Bugfixes: + - Fix mod-gui problems + - Fix numeric-up-down problems +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: 2020-05-28 + Bugfixes: + - Fixed FNEI crash when recipes are removed from the hotbar +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 2020-05-28 + Bugfixes: + - Fix "Parent style not found: fnei_recipe_green_tech_button." + Changes: + - Sprite optimizations (drd_avel) +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 2020-05-19 + Bugfixes: + - Increase performance: refactoring debug lib + Changes: + - Added draggable gui for FNEI +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 2020-01-23 + Bugfixes: + - Fix "script-only" errors + - Added polish translation (VrozaX) +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: 2020-01-23 + Bugfixes: + - Updated to 0.18 + - Updated German Locale +--------------------------------------------------------------------------------------------------- +Version: 0.2.7 +Date: 2019-08-14 + Bugfixes: + - Fix products caption +--------------------------------------------------------------------------------------------------- +Version: 0.2.6 +Date: 2019-07-25 + Bugfixes: + - Remove want_ellipsis options + Changes: + - Add basic remote interface +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 +Date: 2019-05-25 + Bugfixes: + - Fix Lagspikes related to hotbar gui + - Fix GUI shows scroll box where it should not be when + - Fix made in list error related to exceed amount of fluidboxes + Changes: + - Add german translation +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 +Date: 2019-04-14 + Bugfixes: + - Fixed bug with opening technology tree +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: 2019-03-20 + Bugfixes: + - Fix Recipe look up error( FNEI/scripts/recipe/controller.lua:430: bad argument #1 to 'pairs' (table expected, got nil)) + Changes: + - Move left-gui to mod-gui + - Replase hotbar sprite-button to recipe-button +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 2019-03-17 + Bugfixes: + - Fix error LuaRecipe doesn't contain key mining_time. + - Fix research queue bags + - Fix don't showing long names + - Fix handcraft speed +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 2019-02-28 + Changes: + - Added support for 0.17 +--------------------------------------------------------------------------------------------------- +Version: 0.1.12 +Date: 2018-11-10 + Bugfixes: + - Fix "__FNEI__/scripts/recipe/gui.lua:152: attempt to perform arithmetic on local 'pos' (a nil value)" + - Fix "__FNEI__/utils/raw_technologies.lua:42: attempt to index local 'tech' (a nil value)" +--------------------------------------------------------------------------------------------------- +Version: 0.1.11 +Date: 2018-11-06 + Changes: + - Test changelog information +--------------------------------------------------------------------------------------------------- +Version: 0.1.10 +Date: 2018-11-06 + Bugfixes: + - Fix "detail-chance" information + - Fix "Error when enabling KS_Power oil boiler recipes" issue + Changes: + - Implement impostor recipes for mining/pumping (thanks mentlerd) + - Add external interface for locale specific search (thanks mentlerd) + - Delete "open-techs" option +--------------------------------------------------------------------------------------------------- +Version: 0.1.9 +Date: 2018-09-15 + Bugfixes: + - Fix Unknown sprite error + - Fix Crash On Looking For Usage Of Certain Items + Changes: + - Add pcall(save call) for default event + - Settings "show hidden recipes" defauilt is true + - Add Japanese locale (thanks shelaf) +--------------------------------------------------------------------------------------------------- +Version: 0.1.8 +Date: 2018-07-06 + Bugfixes: + - Fix Russian locale (thanks dima74) + - Fix long time opening tech tree thought fnei gui + Changes: + - Add hotbar for FNEI +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 +Date: 2018-05-19 + Bugfixes: + - Fix "Backspace doesn't work in inserter capacity override input" + - Fix Recipe from Py`s mods not showing up + - Fix the height of "crafting time" labels in the recipe gui + - Fix the main button label + - Fix showing recipe problem in the god mod + Changes: + - Add Russian locale + - Add display temperature of fluids, if available +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: 2018-03-09 + Bugfixes: + - Fix error FNEI/utils/data_wrapper.lua:70: bad argument #1 to 'pairs' (table expected, got nil) + Changes: + - Add FNEI hotkey icon (optional) +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 2018-03-06 + Bugfixes: + - fix a slow and unstable search + - Fix crash when need to display several identical prototypes +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 2018-03-04 + Bugfixes: + - Fixed the error of displaying two identical technologies inside the mod + - Fixed the display of the label of the crafting time when they are disabled +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 2018-03-04 + Bugfixes: + - Fixed desync for crafting categories + - Fixed UI scale problem +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2018-03-03 + Bugfixes: + - Fix "Error while running event FNEI::on_gui_click (ID 1) _FNEI _/unsort/recipe_gui.lua:219:attempt to compare number with nil" +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2018-03-03 + Changes: + - Global refactoring update +--------------------------------------------------------------------------------------------------- +Version: 0.0.17 +Date: 2018-01-08 + Bugfixes: + - Fixed crash: Missing gui style "red_slot_button_style" for hidden items https://github.com/npo6ka/FNEI/issues/12 +--------------------------------------------------------------------------------------------------- +Version: 0.0.16 +Date: 2017-12-16 + Changes: + - Added support for 0.16 +--------------------------------------------------------------------------------------------------- +Version: 0.0.13 +Date: 2017-10-23 + Bugfixes: + - Fix desync problem + - Fix MP bags in gui + - Fix the disappearance of some unlocked recipes when viewing the technology tree + - Fix description in option gui + Changes: + - Remove second FNEI key +--------------------------------------------------------------------------------------------------- +Version: 0.0.11 +Date: 2017-09-10 + Bugfixes: + - Small fix option gui + Changes: + - Restyling icon in gui + - Add option "Show hidden items" + - Add option "Show unattainable recipes" + - Add option "Show recipes in the following buildings" + - Add exit and option icon to the main window +--------------------------------------------------------------------------------------------------- +Version: 0.0.10 +Date: 2017-08-25 + Bugfixes: + - Fix the chance of retrieving the item in the recipe + - Fix bug related with a space in the search + Changes: + - Add option Detailed information about the chances of obtaining an item + - Add option close FNEI when pressing E + - Add more ru locale +--------------------------------------------------------------------------------------------------- +Version: 0.0.9 +Date: 2017-08-23 + Bugfixes: + - Fix chash when upgrading from an older version of the mod + - Fix tech reset bug +--------------------------------------------------------------------------------------------------- +Version: 0.0.8 +Date: 2017-08-17 + Bugfixes: + - Fix label description in recipe gui + Changes: + - Make static recipe gui + - Added option gui + - In the game, it is not possible to open the required technologies by calling 1 function, but I found a way to do this. This can work unstably, but I think that this is a very useful function. I put it in a separate category of settings because this function opens some of the achievement. +--------------------------------------------------------------------------------------------------- +Version: 0.0.7 +Date: 2017-07-24 + Changes: + - Global recipe gui changes + - Added russion locale file + - Disable hidden recipe +--------------------------------------------------------------------------------------------------- +Version: 0.0.6 +Date: 2017-06-17 + Bugfixes: + - Fix problem with recipes having a percentage output + Changes: + - Center alignment for item names + - Added a restriction on the list of ingredients and products for small screen resolutions +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 2017-06-24 + Bugfixes: + - Fixed the error of the main window after loading saved game + - Fixed the error of the recipe window after loading saved game + Changes: + - Localisation of the recipe name in recipe gui + - Localisation of the item name in recipe gui + - Static gui width of the recipe +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 +Date: 2017-06-21 + Bugfixes: + - Fix crash when missing item flag when populating GUI +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 +Date: 2017-06-19 + Changes: + - Resize tech icon in recipe gui + - Red light for disabled items + - Red light for disabled recipes + - Added sorting of unexamined recipes and refactoring gui + - Clear the right-click search box + - More loyal search +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 +Date: 2017-06-09 + Changes: + - Add back button on recipe panel + - Relocate panel to player.gui.left + - Move paging from bottom to near top to avoid issues when panel resizes + - Ignore disposal or repackaging recipes + - Add locale file + - Removed the ability to add 2 identical recipes in a row + - Add recursive paging + - Add save previous recipe page +--------------------------------------------------------------------------------------------------- +Version: 0.0.1 +Date: 2017-06-07 + Changes: + - First version \ No newline at end of file diff --git a/FNEI/control.lua b/FNEI/control.lua new file mode 100644 index 00000000..377a9322 --- /dev/null +++ b/FNEI/control.lua @@ -0,0 +1,37 @@ +if not fnei then fnei = {} end +if not global.fnei then global.fnei = {} end + +-------------- include Class libs ---------------- +require "core/Class" + +-------------- include Debug libs ---------------- +Debug = require "core/Debug" +function out(...) + local arg = {...} + Debug:debug("debug.info", unpack(arg)) +end + +-------------- include other libs --------------- +require "mod-gui" + +-------------- include Default FNEI Libs --------------- +require "utils/data_wrapper" +require "utils/utils" +require "scripts/player" +require "utils/tabs/tabs" +require "utils/paging" +require "utils/list" +require "utils/array" +require "utils/open_tech_hook" +require "scripts/events" +require "scripts/remote" + +require "scripts/controller" + +require "scripts/gui" + +require "scripts/settings/settings" + +Settings.init() +Events:init() +Remote:init() diff --git a/FNEI/core/Class.lua b/FNEI/core/Class.lua new file mode 100644 index 00000000..0e43260c --- /dev/null +++ b/FNEI/core/Class.lua @@ -0,0 +1,71 @@ +----------------------------------------------------- +---- SETCLASS CLONES THE BASIC OBJECT CLASS TO CREATE NEW CLASSES +----------------------------------------------------- +-- Supports INHERITANCE +--------------------------------------------------------------- +-- EVERYTHING INHERITS FROM THIS BASIC OBJECT CLASS + +BaseObject = { + super = nil, + name = "Object", + new = + function(class) + local obj = {class = class} + local meta = { + __index = function(self,key) return class.methods[key] end + } + setmetatable(obj,meta) + return obj + end, + methods = {classname = function(self) return(self.class.name) end}, + data = {} +} + +function setclass(name, super) + if (super == nil) then + super = BaseObject + end + + local class = { + super = super; + name = name; + new = + function(self, ...) + local arg = {...} + local obj = super.new(self, "___CREATE_ONLY___"); + -- check if calling function init + -- pass arguments into init function + if (super.methods.init) then + obj.init_super = super.methods.init + end + + if (self.methods.init) then + if (tostring(arg[1]) ~= "___CREATE_ONLY___") then + obj.init = self.methods.init + if obj.init then + obj:init(unpack(arg)) + end + end + end + + return obj + end, + methods = {} + } + + -- if class slot unavailable, check super class + -- if applied to argument, pass it to the class method new + setmetatable(class, { + __index = function(self,key) return self.super[key] end, + __call = function(self,...) + local arg = {...} + return self.new(self,unpack(arg)) + end + }) + + -- if instance method unavailable, check method slot in super class + setmetatable(class.methods, { + __index = function(self,key) return class.super.methods[key] end + }) + return class +end \ No newline at end of file diff --git a/FNEI/core/Debug.lua b/FNEI/core/Debug.lua new file mode 100644 index 00000000..3ab819f6 --- /dev/null +++ b/FNEI/core/Debug.lua @@ -0,0 +1,82 @@ +Debug = {} + +d_limit = 5 + +function object_to_string(level, object) + local function get_tabs(num) + local msg = "" + for i = 0, num do msg = msg .. " " end + return msg + end + + if level == nil then level = 0 end + + local message = " " + + if object == nil then + message = message .. "nil" + elseif type(object) == "boolean" or type(object) == "number" then + message = message .. tostring(object) end + if type(object) == "string" then + message = message..object end + if type(object) == "function" then + message = message.."\"__function\"" end + if type(object) == "table" then + if level <= d_limit then + message = message .. "\n" .. get_tabs(level) .. "{\n" + for key, next_object in pairs(object) do + message = message .. get_tabs(level + 1) .. "\"" .. key .. "\"" .. ":" .. object_to_string(level + 1, next_object) .. ",\n"; + end + message = message .. get_tabs(level) .. "}" + else + message = message .. "\"" .. "__table" .. "\"" + end + end + return message +end + +function rec_obj_to_string(object, ...) + arg = {...} + if #arg > 0 then + return object_to_string(0, object) .. rec_obj_to_string(...) + else + return object_to_string(0, object) + end +end + +function get_message(tag, logClass, ...) + local message = rec_obj_to_string(...) + + message = "[FNEI]" .. tag .. " <" .. logClass .. "> " .. message + + return message +end + +function print_to_console(message) + __DebugAdapter.print(message) +end + +function print_to_log(message) + log(message) +end + +function d_print(type, message) + print_to_console(message) + print_to_log(message) +end + +function Debug:debug(...) + if __DebugAdapter then + print_to_console(get_message("[DEBUG]", ...)) + end +end + +function Debug:error(...) + msg = get_message("[ERROR]", ...) + if __DebugAdapter then + print_to_console(msg) + end + print_to_log(msg) +end + +return Debug \ No newline at end of file diff --git a/FNEI/data.lua b/FNEI/data.lua new file mode 100644 index 00000000..44d34139 --- /dev/null +++ b/FNEI/data.lua @@ -0,0 +1,24 @@ +require "prototypes.styles" +require "prototypes.main_styles" +require "prototypes.recipe_styles" +require "prototypes.settings_styles" +require "prototypes.hotbar_styles" + + +data:extend({ + { + type = "custom-input", + name = "pressed-fnei-gui-key", + key_sequence = "CONTROL + E", + consuming = "none" + } +}) + +data:extend({ + { + type = "custom-input", + name = "pressed-fnei-back-key", + key_sequence = "BACKSPACE", + consuming = "none" + } +}) diff --git a/FNEI/graphics/Back_1.png b/FNEI/graphics/Back_1.png new file mode 100644 index 00000000..c8eb3d11 Binary files /dev/null and b/FNEI/graphics/Back_1.png differ diff --git a/FNEI/graphics/Back_2.png b/FNEI/graphics/Back_2.png new file mode 100644 index 00000000..17d1ce81 Binary files /dev/null and b/FNEI/graphics/Back_2.png differ diff --git a/FNEI/graphics/Back_3.png b/FNEI/graphics/Back_3.png new file mode 100644 index 00000000..6c925a54 Binary files /dev/null and b/FNEI/graphics/Back_3.png differ diff --git a/FNEI/graphics/Exit_1.png b/FNEI/graphics/Exit_1.png new file mode 100644 index 00000000..44585078 Binary files /dev/null and b/FNEI/graphics/Exit_1.png differ diff --git a/FNEI/graphics/Exit_2.png b/FNEI/graphics/Exit_2.png new file mode 100644 index 00000000..4d15a339 Binary files /dev/null and b/FNEI/graphics/Exit_2.png differ diff --git a/FNEI/graphics/Exit_3.png b/FNEI/graphics/Exit_3.png new file mode 100644 index 00000000..aebe4991 Binary files /dev/null and b/FNEI/graphics/Exit_3.png differ diff --git a/FNEI/graphics/Settings_1.png b/FNEI/graphics/Settings_1.png new file mode 100644 index 00000000..bb29e351 Binary files /dev/null and b/FNEI/graphics/Settings_1.png differ diff --git a/FNEI/graphics/Settings_2.png b/FNEI/graphics/Settings_2.png new file mode 100644 index 00000000..abec0839 Binary files /dev/null and b/FNEI/graphics/Settings_2.png differ diff --git a/FNEI/graphics/Settings_3.png b/FNEI/graphics/Settings_3.png new file mode 100644 index 00000000..fe561c85 Binary files /dev/null and b/FNEI/graphics/Settings_3.png differ diff --git a/FNEI/graphics/default_tab.png b/FNEI/graphics/default_tab.png new file mode 100644 index 00000000..172a4e30 Binary files /dev/null and b/FNEI/graphics/default_tab.png differ diff --git a/FNEI/graphics/down_hotbar_arrow_clicked.png b/FNEI/graphics/down_hotbar_arrow_clicked.png new file mode 100644 index 00000000..d43be38d Binary files /dev/null and b/FNEI/graphics/down_hotbar_arrow_clicked.png differ diff --git a/FNEI/graphics/down_hotbar_arrow_default.png b/FNEI/graphics/down_hotbar_arrow_default.png new file mode 100644 index 00000000..7f23e0f9 Binary files /dev/null and b/FNEI/graphics/down_hotbar_arrow_default.png differ diff --git a/FNEI/graphics/down_hotbar_arrow_hovered.png b/FNEI/graphics/down_hotbar_arrow_hovered.png new file mode 100644 index 00000000..d1d3cb38 Binary files /dev/null and b/FNEI/graphics/down_hotbar_arrow_hovered.png differ diff --git a/FNEI/graphics/favorite.png b/FNEI/graphics/favorite.png new file mode 100644 index 00000000..e82826bb Binary files /dev/null and b/FNEI/graphics/favorite.png differ diff --git a/FNEI/graphics/favorite_clicked.png b/FNEI/graphics/favorite_clicked.png new file mode 100644 index 00000000..5bf756e8 Binary files /dev/null and b/FNEI/graphics/favorite_clicked.png differ diff --git a/FNEI/graphics/favorite_hovered.png b/FNEI/graphics/favorite_hovered.png new file mode 100644 index 00000000..bf249a19 Binary files /dev/null and b/FNEI/graphics/favorite_hovered.png differ diff --git a/FNEI/graphics/favorite_icon.png b/FNEI/graphics/favorite_icon.png new file mode 100644 index 00000000..aa428596 Binary files /dev/null and b/FNEI/graphics/favorite_icon.png differ diff --git a/FNEI/graphics/favorite_selected.png b/FNEI/graphics/favorite_selected.png new file mode 100644 index 00000000..0340349d Binary files /dev/null and b/FNEI/graphics/favorite_selected.png differ diff --git a/FNEI/graphics/hovered_tab.png b/FNEI/graphics/hovered_tab.png new file mode 100644 index 00000000..9cda892e Binary files /dev/null and b/FNEI/graphics/hovered_tab.png differ diff --git a/FNEI/graphics/last_usage_icon.png b/FNEI/graphics/last_usage_icon.png new file mode 100644 index 00000000..814ece11 Binary files /dev/null and b/FNEI/graphics/last_usage_icon.png differ diff --git a/FNEI/graphics/next_1.png b/FNEI/graphics/next_1.png new file mode 100644 index 00000000..b81d6ba4 Binary files /dev/null and b/FNEI/graphics/next_1.png differ diff --git a/FNEI/graphics/next_2.png b/FNEI/graphics/next_2.png new file mode 100644 index 00000000..7ab14f50 Binary files /dev/null and b/FNEI/graphics/next_2.png differ diff --git a/FNEI/graphics/next_3.png b/FNEI/graphics/next_3.png new file mode 100644 index 00000000..c4b4b472 Binary files /dev/null and b/FNEI/graphics/next_3.png differ diff --git a/FNEI/graphics/prev_1.png b/FNEI/graphics/prev_1.png new file mode 100644 index 00000000..f011b5bb Binary files /dev/null and b/FNEI/graphics/prev_1.png differ diff --git a/FNEI/graphics/prev_2.png b/FNEI/graphics/prev_2.png new file mode 100644 index 00000000..341f0d71 Binary files /dev/null and b/FNEI/graphics/prev_2.png differ diff --git a/FNEI/graphics/prev_3.png b/FNEI/graphics/prev_3.png new file mode 100644 index 00000000..346a6241 Binary files /dev/null and b/FNEI/graphics/prev_3.png differ diff --git a/FNEI/graphics/selected_tab.png b/FNEI/graphics/selected_tab.png new file mode 100644 index 00000000..089dd6f2 Binary files /dev/null and b/FNEI/graphics/selected_tab.png differ diff --git a/FNEI/graphics/switch-quickbar.png b/FNEI/graphics/switch-quickbar.png new file mode 100644 index 00000000..bf76ee88 Binary files /dev/null and b/FNEI/graphics/switch-quickbar.png differ diff --git a/FNEI/graphics/up_hotbar_arrow_clicked.png b/FNEI/graphics/up_hotbar_arrow_clicked.png new file mode 100644 index 00000000..5cf0e98c Binary files /dev/null and b/FNEI/graphics/up_hotbar_arrow_clicked.png differ diff --git a/FNEI/graphics/up_hotbar_arrow_default.png b/FNEI/graphics/up_hotbar_arrow_default.png new file mode 100644 index 00000000..df66d214 Binary files /dev/null and b/FNEI/graphics/up_hotbar_arrow_default.png differ diff --git a/FNEI/graphics/up_hotbar_arrow_hovered.png b/FNEI/graphics/up_hotbar_arrow_hovered.png new file mode 100644 index 00000000..493f38c8 Binary files /dev/null and b/FNEI/graphics/up_hotbar_arrow_hovered.png differ diff --git a/FNEI/info.json b/FNEI/info.json new file mode 100644 index 00000000..b11626cc --- /dev/null +++ b/FNEI/info.json @@ -0,0 +1,11 @@ +{ + "name": "FNEI", + "version": "0.4.2", + "factorio_version": "1.1", + "title": "FNEI", + "author": "npo6ka", + "contact": "https://forums.factorio.com/viewtopic.php?f=97&t=49461", + "homepage": "https://github.com/npo6ka/FNEI", + "description": "FNEI. All recipes for the item and usage this item", + "dependencies": ["base >= 1.1.0"] +} \ No newline at end of file diff --git a/FNEI/locale/de/locale.cfg b/FNEI/locale/de/locale.cfg new file mode 100644 index 00000000..e4ba80c2 --- /dev/null +++ b/FNEI/locale/de/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEI main key +pressed-fnei-back-key=FNEI back key + +[fnei] +FNEI=FNEI +ingredients=Komponenten +results=Resultate +made-in=Hergestellt in +technology=Technologien +left=Links +top=Oben +center=Mitte +previous-key=vorheriger Bauplan +next-key=nΓ€chster Bauplan +page=Seite +handcraft=von Hand +handmining=Hand extraction +left-eneble-click=Zum Aktivieren mit der linken Maustaste anklicken +right-disable-click=Rechtsklick zum Deaktivieren +default-search=Standardsuche +fnei-search=FNEI-Suche +category-search=Kategoriensuche +non-admin-permission=Du hast keine Admin-Rechte. +out-of-range=Wert liegt außerhalb des gΓΌltigen Bereichs +use-only-attainable-technologies=Nur verfΓΌgbare Technologien verwenden +show-hidden-recipes=versteckte BauplΓ€ne anzeigen +crafting-time=Herstellungsdauer +craft-time-in-building=Dauer der Herstellung im GebΓ€ude +choose-item=Gegenstand auswΓ€hlen +choose-fluid=FlΓΌssigkeit auswΓ€hlen +default-tab-desription=Durchsuche die verfΓΌgbaren GegenstΓ€nde/FlΓΌssigkeiten. Die Standardsuche ist nicht konfigurierbar und zeigt keine versteckten/deaktivierten Elemente an. +fnei-tab-description=Nicht lokalisierte Suche. GegenstΓ€nde kΓΆnnen nach ihren Spielenamen durchsucht werden. Die Suche kann versteckte/deaktivierte Elemente anzeigen. +item-auto-craft=Γ–ffnet automatisch "Herstellung" fΓΌr den ausgewΓ€hlten Gegenstand. +item-auto-usage=Γ–ffnet automatisch "Verwendung" fΓΌr den ausgewΓ€hlten Gegenstand. +fluid-auto-craft=Γ–ffnet automatisch "Herstellung" fΓΌr die ausgewΓ€hlte FlΓΌssigkeit. +fluid-auto-usage=Γ–ffnet automatisch "Verwendung" fΓΌr die ausgewΓ€hlte FlΓΌssigkeit. +recipe=Herstellung +usage=Verwendung +recipe-for=Bauplan +usage-for=Verwendung +crafting-category=Herstellungskategorie +main-settings=Main +admin-settings=Admin +need-show=Schließe FNEI, wenn ein anderes Fenster geΓΆffnet wird oder die ESC-Taste gedrΓΌckt wird. +show-disable-recipes=Deaktivierte BauplΓ€ne anzeigen +show-hidden-items=Versteckte Elemente anzeigen +show-hidden-fluids=Show hidden fluids +position=GUI Position +fnei-line-count=Zeilen fΓΌr GegenstΓ€nde in der Registerkarte FNEI-Suche +detail-chance=Anzeige der tatsΓ€chlichen ProzentsΓ€tze der BauplΓ€ne +focus-search=Fokussiere den Cursor auf das Suchfeld +close-gui-when-tech-open=Schließe FNEI, wenn sich das Technologie-Fenster ΓΆffnet. +show-craft-time-label=Zeit fΓΌr die Herstellung anzeigen +show-the-same-recipes=Zeige die gleichen BauplΓ€ne +show-temperature-of-fluids=Zeige Temperatur von FlΓΌssigkeiten an, falls verfΓΌgbar +craftin-cat-msg=Wenn es zu viele BauplΓ€ne aus bestimmten GebΓ€uden/Kategorien gibt, kannst Du diese hier umschalten. +show-disable-techs=Zeige versteckte Technologien +show-hotbar=Hotbar anzeigen +last_button=Letzte BauplΓ€ne +fav_button=Lieblings-BauplΓ€ne +alt-to-remove=Mit der Alt-Taste + Linksklick entfernst Du das Rezept. +hotbar-last-line-num=Anzahl der Zeilen der letzten BauplΓ€ne im FNEI-Tooltip +hotbar-fav-line-num=Anzahl der Zeilen der Lieblings-BauplΓ€ne im FNEI-Tooltip +favorite-is-full=Die Liste der Lieblings-BauplΓ€ne ist voll. +tooltip-recipe=Bauplan +favorite-button=zu Favoriten hinzufΓΌgen diff --git a/FNEI/locale/en/locale.cfg b/FNEI/locale/en/locale.cfg new file mode 100644 index 00000000..e9640ae3 --- /dev/null +++ b/FNEI/locale/en/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEI main key +pressed-fnei-back-key=FNEI back key + +[fnei] +FNEI=FNEI +ingredients=Ingredients +results=Results +made-in=Made in +technology=Technologies +left=Left +top=Top +center=Center +previous-key=previous recipe +next-key=next recipe +page=Page +handcraft=Handcraft +handmining=Hand extraction +left-eneble-click=Left click to activate +right-disable-click=Right click to deactivate +default-search=Default search +fnei-search=FNEI search +category-search=Category search +non-admin-permission=You don't have admin permissions +out-of-range=Value is out of range +use-only-attainable-technologies=Use only available technologies +show-hidden-recipes=Show hidden recipes +crafting-time=Crafting time +craft-time-in-building=Time to craft in building +choose-item=Select item +choose-fluid=Select fluid +default-tab-desription=Search through available items/liquids. Default search is not configurable, and does not show hidden/disabled items. +fnei-tab-description=Non-localized search. Items are searchable by their ingame names. Search can show hidden/disabled items. +item-auto-craft=Automatically open "craft" recipes for selected item. +item-auto-usage=Automatically open "usage" recipes for selected item. +fluid-auto-craft=Automatically open "craft" recipes for selected fluid. +fluid-auto-usage=Automatically open "usage" recipes for selected fluid. +recipe=Craft +usage=Usage +recipe-for=Recipe +usage-for=Usage +crafting-category=Crafting category +main-settings=Main +admin-settings=Admin +need-show=Close FNEI when another GUI is opened or ESC key is pressed +show-disable-recipes=Show disabled recipes +show-hidden-items=Show hidden items +show-hidden-fluids=Show hidden fluids +position=Gui position +fnei-line-count=Item rows in FNEI search tab +detail-chance=Show actual percentages of recipes +focus-search=Focus cursor on the search field +close-gui-when-tech-open=Close FNEI when technology tree opens +show-craft-time-label=Show crafting time label +show-the-same-recipes=Show the same recipes +show-temperature-of-fluids=Display temperature of fluids, if available +craftin-cat-msg=If there are too many recipes from certain buildings/category you can toggle them here. +show-disable-techs=Show disabled technologies +show-hotbar=Show hotbar +last_button=Last recipes +fav_button=Favorite recipes +alt-to-remove=Use alt key + click to remove the recipe +hotbar-last-line-num=Number of rows of the last recipes in FNEI tooltip +hotbar-fav-line-num=Number of rows of the favorite recipes in FNEI tooltip +favorite-is-full=The list of favorite recipes is full +tooltip-recipe=Recipe +favorite-button=Add to favorites \ No newline at end of file diff --git a/FNEI/locale/ja/locale.cfg b/FNEI/locale/ja/locale.cfg new file mode 100644 index 00000000..0f3623b3 --- /dev/null +++ b/FNEI/locale/ja/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEIパむンキー +pressed-fnei-back-key=FNEIバックキー + +[fnei] +FNEI=FNEI +ingredients=材料 +results=製品 +made-in=θ£½δ½œε―θƒ½θ¨­ε‚™ +technology=γƒ†γ‚―γƒŽγƒ­γ‚ΈγƒΌ +left=ε·¦ +top=上 +center=δΈ­ε€ +previous-key=前γγƒ¬γ‚·γƒ” +next-key=欑γγƒ¬γ‚·γƒ” +page=γƒšγƒΌγ‚Έ +handcraft=ζ‰‹δ½œγ‚Š +handmining=Hand extraction +left-eneble-click=ζœ‰εŠΉγ«γ™γ‚‹γ«γ―ε·¦γ‚―γƒͺックします +right-disable-click=η„‘εŠΉγ«γ™γ‚‹γ«γ―ε³γ‚―γƒͺックします +default-search=γƒ‡γƒ•γ‚©γƒ«γƒˆζ€œη΄’ +fnei-search=FNEI怜紒 +category-search=カテゴγƒͺ怜紒 +non-admin-permission=η‘η†θ€…ζ¨©ι™γŒγ‚γ‚ŠγΎγ›γ‚“ +out-of-range=ε€€γŒη―„ε›²ε€–γ§γ™ +use-only-attainable-technologies=可能γͺγƒ†γ‚―γƒŽγƒ­γ‚ΈγƒΌγγΏγ‚’使用 +show-hidden-recipes=ιš γ—γƒ¬γ‚·γƒ”γ‚’θ‘¨η€Ίγ™γ‚‹ +crafting-time=θ£½δ½œζ™‚ι–“ +craft-time-in-building=設備でγθ£½δ½œζ™‚ι–“ +choose-item=ιΈζŠžγ‚’γ‚€γƒ†γƒ  +choose-fluid=ιΈζŠžζ΅δ½“ +default-tab-desription=可能γͺをむテム/ζ΅δ½“γ‚’ζ€œη΄’γ—γΎγ™γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆζ€œη΄’γ―θ¨­εšε€‰ζ›΄γ§γγšγ€ιš γ—/η„‘εŠΉγͺをむテムを葨瀺しません。 +fnei-tab-description=ζ—₯本θͺžεγ§γ―ζ€œη΄’γ§γγΎγ›γ‚“γ€‚γ‚’γ‚€γƒ†γƒ γ―γ‚²γƒΌγƒ ε†…γεε‰γ§ζ€œη΄’γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚ιš γ—/η„‘εŠΉγͺγ‚’γ‚€γƒ†γƒ γ‚’θ‘¨η€Ίγ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚ +item-auto-craft=ιΈζŠžγ‚’γ‚€γƒ†γƒ γ "製作" レシピをθ‡ͺε‹•ηš„γ«ι–‹γ +item-auto-usage=ιΈζŠžγ‚’γ‚€γƒ†γƒ γ "使用" レシピをθ‡ͺε‹•ηš„γ«ι–‹γ +fluid-auto-craft=ιΈζŠžζ΅δ½“γ "製作" レシピをθ‡ͺε‹•ηš„γ«ι–‹γ +fluid-auto-usage=ιΈζŠžζ΅δ½“γ "使用" レシピをθ‡ͺε‹•ηš„γ«ι–‹γ +recipe=製作 +usage=使用 +recipe-for=レシピ +usage-for=使用 +crafting-category=θ£½δ½œγ‚«γƒ†γ‚΄γƒͺγƒΌ +main-settings=パむン +admin-settings=η‘理者 +need-show=δ»–γGUIγŒι–‹γ„γŸζ™‚γΎγŸγ―ESCγ‚­γƒΌγŒζŠΌγ•γ‚ŒγŸζ™‚γ«FNEIγ‚’ι–‰γ˜γ‚‹ +show-disable-recipes=η„‘εŠΉγͺレシピを葨瀺する +show-hidden-items=ιš γ—γ‚’γ‚€γƒ†γƒ γ‚’θ‘¨η€Ίγ™γ‚‹ +show-hidden-fluids=Show hidden fluids +position=GUIγδ½η½ +fnei-line-count=FNEIζ€œη΄’γ‚Ώγƒ–γγ‚’γ‚€γƒ†γƒ θ‘Œζ•° +detail-chance=レシピγεŸιš›γγƒ‘ーセンテージを葨瀺する +focus-search=ζ€œη΄’ζ¬„γ«γ‚«γƒΌγ‚½γƒ«γ‚’η§»ε‹•γ™γ‚‹ +close-gui-when-tech-open=γƒ†γ‚―γƒŽγƒ­γ‚ΈγƒΌγƒ„γƒͺγƒΌγ‚’ι–‹γ„γŸζ™‚γ«FNEIγ‚’ι–‰γ˜γ‚‹ +show-craft-time-label=θ£½δ½œζ™‚ι–“γƒ©γƒ™γƒ«γ‚’θ‘¨η€Ίγ™γ‚‹ +show-the-same-recipes=εŒδΈ€γƒ¬γ‚·γƒ”γ‚’θ‘¨η€Ίγ™γ‚‹ +show-temperature-of-fluids=可能γͺε ΄εˆζ΅δ½“γζΈ©εΊ¦γ‚’葨瀺する +craftin-cat-msg=η‰Ήεšγθ¨­ε‚™/カテゴγƒͺーからγγƒ¬γ‚·γƒ”γŒε€šγ™γŽγ‚‹ε ΄εˆγ―γ“γ“γ§εˆ‡γ‚Šζ›Ώγˆγ‚‹γ“γ¨γŒγ§γγΎγ™ +show-disable-techs=ιš γ—γƒ†γ‚―γƒŽγƒ­γ‚ΈγƒΌγ‚’θ‘¨η€Ίγ™γ‚‹ +show-hotbar=γƒ›γƒƒγƒˆγƒγƒΌγ‚’θ‘¨η€Ίγ™γ‚‹ +last_button=ζœ€εΎŒγγƒ¬γ‚·γƒ” +fav_button=γŠζ°—γ«ε…₯γ‚Šγƒ¬γ‚·γƒ” +alt-to-remove=γƒ¬γ‚·γƒ”γ‚’ε‰Šι™€γ™γ‚‹γ«γ―Altγ‚­γƒΌγ‚’ζŠΌγ—γͺγŒγ‚‰γ‚―γƒͺックします +hotbar-last-line-num=FNEIツールチップγζœ€εΎŒγγƒ¬γ‚·γƒ”γθ‘Œζ•° +hotbar-fav-line-num=FNEIツールチップγγŠζ°—にε…₯γ‚Šγƒ¬γ‚·γƒ”γθ‘Œζ•° +favorite-is-full=γŠζ°—γ«ε…₯γ‚Šγƒͺγ‚ΉγƒˆγŒγ„γ£γ±γ„γ§γ™ +tooltip-recipe=レシピ +favorite-button=γŠζ°—γ«ε…₯γ‚Š diff --git a/FNEI/locale/pl/locale.cfg b/FNEI/locale/pl/locale.cfg new file mode 100644 index 00000000..b86fe621 --- /dev/null +++ b/FNEI/locale/pl/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=GΕ‚Γ³wny przycisk FNEI +pressed-fnei-back-key=Przycisk powrotu FNEI + +[fnei] +FNEI=FNEI +ingredients=SkΕ‚adniki +results=Rezultat +made-in=Wytwarzane w +technology=Technologie +left=Lewo +top=GΓ³ra +center=Środek +previous-key=poprzedni przepis +next-key=nastΔ™pny przepis +page=Strona +handcraft=RΔ™cznie +handmining=Hand extraction +left-eneble-click=Kliknij lewym przyciskiem, aby aktywowaΔ‡ +right-disable-click=Kliknij prawym przyciskiem, aby dezaktywowaΔ‡ +default-search=DomyΕ›lna wyszukiwarka +fnei-search=Wyszukiwanie FNEI +category-search=Wyszukiwanie kategorii +non-admin-permission=Nie masz uprawnieΕ„ administratora +out-of-range=WartoΕ›Δ‡ jest poza zakresem +use-only-attainable-technologies=UΕΌywaj tylko dostΔ™pnych technologii +show-hidden-recipes=PokaΕΌ ukryte przepisy +crafting-time=Czas tworzenia +craft-time-in-building=Czas tworzenia w budynku +choose-item=Wybierz przedmiot +choose-fluid=Wybierz pΕ‚yn +default-tab-desription=Przeszukuj dostΔ™pne przedmioty/pΕ‚yny. DomyΕ›lne wyszukiwanie nie jest konfigurowalne i nie pokazuje ukrytych/wyΕ‚Δ…czonych elementΓ³w. +fnei-tab-description=Wyszukiwanie nielokalizowane. Przedmioty moΕΌna wyszukiwaΔ‡ wedΕ‚ug ich nazw w grze. Wyszukiwanie moΕΌe pokazywaΔ‡ ukryte/wyΕ‚Δ…czone elementy. +item-auto-craft=Automatycznie otwieraj przepisy "wytwarzanie" dla wybranego przedmiotu. +item-auto-usage=Automatycznie otwieraj przepisy "uΕΌycie" dla wybranego przedmiotu. +fluid-auto-craft=Automatycznie otwieraj przepisy "wytwarzanie" dla wybranego pΕ‚ynu. +fluid-auto-usage=Automatycznie otwieraj przepisy "uΕΌycie" dla wybranego pΕ‚ynu. +recipe=Wytwarzanie +usage=UΕΌycie +recipe-for=Przepis dla +usage-for=Wykorzystanie dla +crafting-category=Kategoria wytwarzania +main-settings=GΕ‚Γ³wne +admin-settings=Admin +need-show=Zamknij FNEI po otwarciu innego GUI lub naciΕ›niΔ™ciu klawisza ESC +show-disable-recipes=PokaΕΌ wyΕ‚Δ…czone przepisy +show-hidden-items=PokaΕΌ ukryte przedmioty +show-hidden-fluids=Show hidden fluids +position=Pozycja GUI +fnei-line-count=RzΔ™dy przedmiotΓ³w w zakΕ‚adce wyszukiwania FNEI +detail-chance=PokaΕΌ rzeczywiste procenty przepisΓ³w +focus-search=Ustaw kursor na polu wyszukiwania +close-gui-when-tech-open=Zamknij FNEI po otwarciu drzewa technologii +show-craft-time-label=PokaΕΌ etykietΔ™ czasu wytwarzania +show-the-same-recipes=PokaΕΌ te same przepisy +show-temperature-of-fluids=WyΕ›wietl temperaturΔ™ cieczy, jeΕ›li jest dostΔ™pna +craftin-cat-msg=JeΕ›li jest zbyt wiele przepisΓ³w z niektΓ³rych budynkΓ³w/kategorii, moΕΌesz je tutaj przeΕ‚Δ…czaΔ‡. +show-disable-techs=PokaΕΌ ukryte technologie +show-hotbar=PokaΕΌ pasek skrΓ³tΓ³w +last_button=Ostatnie przepisy +fav_button=Ulubione przepisy +alt-to-remove=UΕΌyj klawisza Alt + kliknij, aby usunΔ…Δ‡ przepis +hotbar-last-line-num=Liczba wierszy ostatnich przepisΓ³w w etykiecie FNEI +hotbar-fav-line-num=Liczba wierszy ulubionych przepisΓ³w w etykiecie FNEI +favorite-is-full=Lista ulubionych przepisΓ³w jest peΕ‚na +tooltip-recipe=Przepis +favorite-button=Dodaj do ulubionych \ No newline at end of file diff --git a/FNEI/locale/pt-BR/locale.cfg b/FNEI/locale/pt-BR/locale.cfg new file mode 100644 index 00000000..894e9a5d --- /dev/null +++ b/FNEI/locale/pt-BR/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEI Tecla principal +pressed-fnei-back-key=FNEI Tecla de retoro + +[fnei] +FNEI=FNEI +ingredients=Ingredientes +results=Resultados +made-in=Criado em +technology=Tecnologias +left=Esquerda +top=Topo +center=Centro +previous-key=receita anterior +next-key=prΓ³xima receita +page=PΓ‘gina +handcraft=Feito Γ’ mΓ£o +handmining=Hand extraction +left-eneble-click=Clique com o botΓ£o esquerdo para ativar +right-disable-click=Clique com o botΓ£o direito para desativar +default-search=Pesquisa padrΓ£o +fnei-search=FNEI pesquisa +category-search=Pesquisa de categoria +non-admin-permission=VocΓͺ nΓ£o tem permissΓ΅es de administrador +out-of-range=O valor estΓ‘ fora do intervalo +use-only-attainable-technologies=Use apenas as tecnologias disponΓ­veis +show-hidden-recipes=Mostrar receitas ocultas +crafting-time=Tempo de fabricaΓ§Γ£o +craft-time-in-building=tempo de construΓ§Γ£o em maquinas +choose-item=Selecionar item +choose-fluid=Selecionar fluido +default-tab-desription=Pesquise os itens/lΓ­quidos disponΓ­veis. A pesquisa padrΓ£o nΓ£o Γ© configurΓ‘vel e nΓ£o mostra itens ocultos/desativados. +fnei-tab-description=Pesquisa nΓ£o localizada. Os itens podem ser pesquisados ​​por seus nomes no jogo. A pesquisa pode mostrar itens ocultos/desativados. +item-auto-craft=Abrir automaticamente receitas de "artesanato" para o item selecionado. +item-auto-usage=Abra automaticamente receitas de "uso" para o item selecionado. +fluid-auto-craft=Abra automaticamente receitas de "artesanato" para o fluido selecionado. +fluid-auto-usage=Abra receitas de "uso" automaticamente para o fluido selecionado. +recipe=Artesanato +usage=Uso +recipe-for=Receita +usage-for=Usado para +crafting-category=categoria de artesanato +main-settings=Principal +admin-settings=Administrador +need-show=Feche o FNEI quando outra GUI for aberta ou a tecla ESC for pressionada +show-disable-recipes=Mostrar receitas desativadas +show-hidden-items=Mostrar itens ocultos +show-hidden-fluids=Show hidden fluids +position=posiΓ§Γ£o da gui +fnei-line-count=Linhas de itens na guia de pesquisa FNEI +detail-chance=Mostrar porcentagens reais de receitas +focus-search=Focar o cursor no campo de pesquisa +close-gui-when-tech-open=Fechar FNEI quando a Γ‘rvore de tecnologia abrir +show-craft-time-label=Mostrar rΓ³tulo de tempo de criaΓ§Γ£o +show-the-same-recipes=Mostrar as mesmas receitas +show-temperature-of-fluids=Exibe a temperatura dos fluidos, se disponΓ­vel +craftin-cat-msg=Se houver muitas receitas de certos edifΓ­cios/categoria, vocΓͺ pode alternΓ‘-las aqui. +show-disable-techs=Mostrar tecnologias desativadas +show-hotbar=Mostrar hotbar +last_button=ΓΊltimas receitas +fav_button=receitas favoritas +alt-to-remove=Use a tecla Alt + clique para remover a receita +hotbar-last-line-num=NΓΊmero de linhas das ΓΊltimas receitas na dica de ferramenta FNEI +hotbar-fav-line-num=NΓΊmero de linhas de receitas favoritas na dica de ferramenta FNEI +favorite-is-full=A lista de receitas favoritas estΓ‘ cheia! +tooltip-recipe=Receita +favorite-button=Adicionar aos favoritos \ No newline at end of file diff --git a/FNEI/locale/ru/locale.cfg b/FNEI/locale/ru/locale.cfg new file mode 100644 index 00000000..bda3b2f4 --- /dev/null +++ b/FNEI/locale/ru/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEI главная ΠΊΠ½ΠΎΠΏΠΊΠ° +pressed-fnei-back-key=FNEI ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°Π·Π°Π΄ + +[fnei] +FNEI=FNEI +ingredients=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ +results=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ +made-in=ДСлаСтся Π² +technology=Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +left=Π‘Π»Π΅Π²Π° +top=Π’Π²Π΅Ρ€Ρ…Ρƒ +center=По Ρ†Π΅Π½Ρ‚Ρ€Ρƒ +previous-key=ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +next-key=Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +page=Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° +handcraft=Π ΡƒΡ‡Π½ΠΎΠΉ ΠΊΡ€Π°Ρ„Ρ‚ +handmining=Ручная Π΄ΠΎΠ±Ρ‹Ρ‡Π° +left-eneble-click=Π›Π΅Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ +right-disable-click=ΠŸΡ€Π°Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ +default-search=Поиск ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +fnei-search=FNEI поиск +category-search=Category search +non-admin-permission=Π’Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΡ€Π°Π² администратора +out-of-range=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ допустимых Π³Ρ€Π°Π½ΠΈΡ† +use-only-attainable-technologies=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ достиТимыС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +show-hidden-recipes=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +crafting-time=ВрСмя ΠΊΡ€Π°Ρ„Ρ‚Π° +craft-time-in-building=ВрСмя ΠΊΡ€Π°Ρ„Ρ‚Π° Π² этом Π·Π΄Π°Π½ΠΈΠΈ +choose-item=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +choose-fluid=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +default-tab-desription=Поиск ΠΏΠΎ доступным ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌ/Тидкостям. Поиск ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ настраиваСтся ΠΈ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ скрытыС/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ элСмСнты. +fnei-tab-description=НСлокализованный поиск. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ доступны для поиска ΠΏΠΎ ΠΈΡ… английским ΠΈΠΌΠ΅Π½Π°ΠΌ. Поиск ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ скрытыС/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ элСмСнты. +item-auto-craft=АвтоматичСски ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ "ΠΊΡ€Π°Ρ„Ρ‚" Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°. +item-auto-usage=АвтоматичСски ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ "ИспользованиС" для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°. +fluid-auto-craft=АвтоматичСски ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ "ΠΊΡ€Π°Ρ„Ρ‚" Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Тидкости. +fluid-auto-usage=АвтоматичСски ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ "ИспользованиС" для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Тидкости. +recipe=ΠšΡ€Π°Ρ„Ρ‚ +usage=ИспользованиС +usage-for=ИспользованиС +recipe-for=Π Π΅Ρ†Π΅ΠΏΡ‚ для +crafting-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΊΡ€Π°Ρ„Ρ‚Π° +main-settings=Π“Π»Π°Π²Π½Ρ‹Π΅ +admin-settings=Для Π°Π΄ΠΌΠΈΠ½ΠΎΠ² +need-show=Π—Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ FNEI ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ ΠΈΠ»ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ESC +show-disable-recipes=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +show-hidden-items=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ +show-hidden-fluids=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС Тидкости +position=ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° +fnei-line-count=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк с ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌΠΈ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ FNEI поиск +detail-chance=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π΅ получСния ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +focus-search=Ѐокус курсора Π½Π° поисковоС ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° +close-gui-when-tech-open=Π—Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ FNEI ΠΊΠΎΠ³Π΄Π° открываСтся Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ +show-craft-time-label=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ врСмя ΠΊΡ€Π°Ρ„Ρ‚Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π² зданиях +show-the-same-recipes=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +show-temperature-of-fluids=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ Тидкости Ссли имССтся +show-hotbar=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ…ΠΎΡ‚Π±Π°Ρ€ ΠΌΠΎΠ΄Π° +craftin-cat-msg=Если Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зданиях/катСгориях слишком ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ… здСсь. +show-disable-techs=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +last_button=ПослСдниС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +fav_button=Π˜Π·Π±Ρ€Π°Π½Π½ΠΎΠ΅ +alt-to-remove=Use alt key + click to remove the recipe +hotbar-last-line-num=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк послСдних ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π² Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠ΅ FNEI +hotbar-fav-line-num=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π² Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΠ΅ FNEI +favorite-is-full=Бписок ΠΈΠ·Π±Ρ€Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ +tooltip-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +favorite-button=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅ \ No newline at end of file diff --git a/FNEI/locale/uk/locale.cfg b/FNEI/locale/uk/locale.cfg new file mode 100644 index 00000000..41d01df2 --- /dev/null +++ b/FNEI/locale/uk/locale.cfg @@ -0,0 +1,67 @@ +[controls] +pressed-fnei-gui-key=FNEI Π³ΠΎΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠ½ΠΎΠΏΠΊΠ° +pressed-fnei-back-key=FNEI ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°Π·Π°Π΄ + +[fnei] +FNEI=FNEI +ingredients=Π†Π½Π³Ρ€Π°Π΄Ρ–Ρ”Π½Ρ‚ΠΈ +results=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ +made-in=Π ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π² +technology=Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–Ρ— +left=Π·Π»Ρ–Π²Π° +top=Π·Π²Π΅Ρ€Ρ…Ρƒ +center=По Ρ†Π΅Π½Ρ‚Ρ€Ρƒ +previous-key=ΠœΠΈΠ½ΡƒΠ»ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +next-key=Наступний Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +page=Π‘Ρ‚ΠΎΡ€Ρ–Π½ΠΊΠ° +handcraft=Π ΡƒΡ‡Π½ΠΈΠΉ ΠΊΡ€Π°Ρ„Ρ‚ +handmining=Hand extraction +left-eneble-click=Π›Ρ–Π²ΠΈΠΉ ΠΊΠ»Ρ–ΠΊ, Ρ‰ΠΎΠ± Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Ρ‚ΠΈ +right-disable-click=ΠŸΡ€Π°Π²ΠΈΠΉ ΠΊΠ»Ρ–ΠΊ, Ρ‰ΠΎΠ± Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Ρ‚ΠΈ +default-search=ΠŸΠΎΡˆΡƒΠΊ Π·Π° замовчуванням +fnei-search=FNEI ΠΏΠΎΡˆΡƒΠΊ +category-search=ΠŸΠΎΡˆΡƒΠΊ ΠΏΠΎ катСгоріям +non-admin-permission=Π’ΠΈ Π½Π΅ ΠΌΠ°Ρ”Ρ‚Π΅ ΠΏΡ€Π°Π² адміністратора +out-of-range=ЗначСння Π·Π° ΠΌΠ΅ΠΆΠ°ΠΌΠΈ допустимих ΠΊΠΎΡ€Π΄ΠΎΠ½Ρ–Π² +use-only-attainable-technologies=Використовувати лишС досягнуті Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–Ρ— +show-hidden-recipes=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Π½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ +crafting-time=Час ΠΊΡ€Π°Ρ„Ρ‚Ρƒ +craft-time-in-building=Час ΠΊΡ€Π°Ρ„Ρ‚Ρƒ Ρƒ Ρ†ΡŒΠΎΠΌΡƒ Π±ΡƒΠ΄ΠΈΠ½ΠΊΡƒ +choose-item=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +choose-fluid=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Ρ€Ρ–Π΄ΠΈΠ½Ρƒ +default-tab-desription=ΠŸΠΎΡˆΡƒΠΊ Π·Π° доступними ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌΠΈ/Ρ€Ρ–Π΄ΠΈΠ½Π°ΠΌΠΈ. ΠŸΠΎΡˆΡƒΠΊ Π·Π° замовчуванням Π½Π΅ Π½Π°Π»Π°ΡˆΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ Ρ– Π½Π΅ Π²Ρ–Π΄ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ” ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Π½ΠΈΡ… Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ–Π². +fnei-tab-description=НСлокалізований ΠΏΠΎΡˆΡƒΠΊ. Π•Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ доступні для ΠΏΠΎΡˆΡƒΠΊΡƒ Ρ—Ρ… Π°Π½Π³Π»Ρ–ΠΉΡΡŒΠΊΠΈΡ… Ρ–ΠΌΠ΅Π½. ΠŸΠΎΡˆΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π²Ρ–Π΄ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Π½Ρ–/Π²ΠΈΠΌΠΊΠ½Π΅Π½Ρ– Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. +item-auto-craft=Автоматично Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ "ΠΊΡ€Π°Ρ„Ρ‚" Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ для Π²ΠΈΠ±Ρ€Π°Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°. +item-auto-usage=Автоматично Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ "Використання" для Π²ΠΈΠ±Ρ€Π°Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°. +fluid-auto-craft=Автоматично Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ "ΠΊΡ€Π°Ρ„Ρ‚" Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ для Π²ΠΈΠ±Ρ€Π°Π½ΠΎΡ— Ρ€Ρ–Π΄ΠΈΠ½ΠΈ. +fluid-auto-usage=Автоматично Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ "Використання" для Π²ΠΈΠ±Ρ€Π°Π½ΠΎΡ— Ρ€Ρ–Π΄ΠΈΠ½ΠΈ. +recipe=ΠšΡ€Π°Ρ„Ρ‚ +usage=Використання +usage-for=Використання +recipe-for=Π Π΅Ρ†Π΅ΠΏΡ‚ для +crafting-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€Ρ–Ρ— ΠΊΡ€Π°Ρ„Ρ‚Π° +main-settings=Π“ΠΎΠ»ΠΎΠ²Π½Ρ– +admin-settings=Для Π°Π΄ΠΌΡ–Π½Ρ–Π² +need-show=Π—Π°ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ FNEI ΠΊΠΎΠ»ΠΈ Ρ–Π½ΡˆΠ΅ Π²Ρ–ΠΊΠ½ΠΎ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΎ Π°Π±ΠΎ натиснуто ΠΊΠ½ΠΎΠΏΠΊΡƒ ESC +show-disable-recipes=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Π²ΠΈΠΌΠΊΠ½Π΅Π½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ +show-hidden-items=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Π½Ρ– ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ +show-hidden-fluids=Show hidden fluids +position=ΠŸΠΎΠ·ΠΈΡ†Ρ–Ρ Π²Ρ–ΠΊΠ½Π° ΠΌΠΎΠ΄Π° +fnei-line-count=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ рядків Π· ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°ΠΌΠΈ Ρƒ Π²ΠΊΠ»Π°Π΄Ρ†Ρ– FNEI +detail-chance=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΠΎΠ²Π½Ρƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ відсоток отримання ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +focus-search=Ѐокус курсору Π½Π° ΠΏΠΎΡˆΡƒΠΊΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΎΠ»Ρ– ΠΏΡ€ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚Ρ‚Ρ– Π²Ρ–ΠΊΠ½Π° ΠΌΠΎΠ΄Π° +close-gui-when-tech-open=Π—Π°ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ FNEI ΠΊΠΎΠ»ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ”Ρ‚ΡŒΡΡ Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–ΠΉ +show-craft-time-label=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ час ΠΊΡ€Π°Ρ„Ρ‚Ρƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ Π² Π±ΡƒΠ΄ΠΈΠ½ΠΊΠ°Ρ… +show-the-same-recipes=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ ΠΎΠ΄Π½Π°ΠΊΠΎΠ²Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ +show-temperature-of-fluids=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ Ρ€Ρ–Π΄ΠΈΠ½ΠΈ якщо Ρ” +show-hotbar=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Ρ…ΠΎΡ‚Π±Π°Ρ€ ΠΌΠΎΠ΄Π° +craftin-cat-msg=Π―ΠΊΡ‰ΠΎ Π² дСяких будівлях/катСгоріях Π΄ΡƒΠΆΠ΅ Π±Π°Π³Π°Ρ‚ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π², Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‚ΠΈ Ρ—Ρ… Ρ‚ΡƒΡ‚. +show-disable-techs=ΠŸΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Π²ΠΈΠΌΠΊΠ½Π΅Π½Ρ– Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–Ρ— +last_button=ΠžΡΡ‚Π°Π½Π½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ +fav_button=Π’ΠΈΠ±Ρ€Π°Π½Π΅ +alt-to-remove=ВикористовуйтС alt + ΠΊΠ»Ρ–ΠΊ, Ρ‰ΠΎΠ± Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +hotbar-last-line-num=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ рядків останніх Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² Ρƒ Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΡ– FNEI +hotbar-fav-line-num=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ рядків Π²ΠΈΠ±Ρ€Π°Π½ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² Ρƒ Ρ‚ΡƒΠ»Ρ‚ΠΈΠΏΡ– FNEI +favorite-is-full=Бписок Π²ΠΈΠ±Ρ€Π°Π½ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ²Π½Π΅Π½ΠΈΠΉ +tooltip-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +favorite-button=Π”ΠΎΠ΄Π°Ρ‚ΠΈ Π² ΠΎΠ±Ρ€Π°Π½Π΅ \ No newline at end of file diff --git a/FNEI/prototypes/hotbar_styles.lua b/FNEI/prototypes/hotbar_styles.lua new file mode 100644 index 00000000..54a80ecb --- /dev/null +++ b/FNEI/prototypes/hotbar_styles.lua @@ -0,0 +1,122 @@ +-------------------------flow_style-------------------------- + +-------------------------frame_style-------------------------- + +data.raw["gui-style"].default["fnei_hotbar_frame"] = +{ + type = "frame_style", + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + title_top_padding = 0, + title_right_padding = 0, + title_bottom_padding = 0, + title_left_padding = 0, + scalable = false, +} + +-------------------------table_style-------------------------- + +data.raw["gui-style"].default["fnei_hotbar_zero_spacing_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 0, + vertical_spacing = 0, + scalable = false, +} + +-------------------------label_style-------------------------- + +data.raw["gui-style"].default["fnei_hotbar_label"] = +{ + type = "label_style", + top_padding = 0, + right_padding = 2, + left_padding = 2, + width = 72, + height = 22, + horizontal_align = "center", + scalable = false, +} + +------------------------button_style------------------------- + +data.raw["gui-style"].default["fnei_hotbar_label_button"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 72, + font = "font-lb", + scalable = false, +} + +data.raw["gui-style"].default["fnei_hotbar_block_button"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + height = 36, + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_hotbar_down_arrow"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + height = 14, + width = 78, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/down_hotbar_arrow_clicked.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/down_hotbar_arrow_default.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/down_hotbar_arrow_hovered.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + } +} + +data.raw["gui-style"].default["fnei_hotbar_up_arrow"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + height = 14, + width = 78, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/up_hotbar_arrow_clicked.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/up_hotbar_arrow_default.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/up_hotbar_arrow_hovered.png", + height = 14, + priority = "extra-high-no-scale", + width = 72, + } +} diff --git a/FNEI/prototypes/main_styles.lua b/FNEI/prototypes/main_styles.lua new file mode 100644 index 00000000..f5aaa481 --- /dev/null +++ b/FNEI/prototypes/main_styles.lua @@ -0,0 +1,218 @@ + +-------------------------flow_style-------------------------- + +data.raw["gui-style"].default["fnei_main_content_flow"] = +{ + type = "horizontal_flow_style", + horizontal_spacing = 1, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_selection_flow"] = +{ + type = "horizontal_flow_style", + horizontal_spacing = 4, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_choose_flow"] = +{ + type = "horizontal_flow_style", + top_padding = 6, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_element_flow"] = +{ + type = "vertical_flow_style", + width = 230, + scalable = false, +} + +-------------------------frame_style-------------------------- + +data.raw["gui-style"].default["fnei_main_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 478, + maximal_width = 478, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_content-frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 466, + maximal_width = 466, + scalable = false, +} + +-------------------------table_style-------------------------- + +data.raw["gui-style"].default["fnei_main_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_header-table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 1, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_fnei_content_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 2, + vertical_spacing = 2, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_content_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 4, + vertical_spacing = 2, + scalable = false, +} + +----------------------scroll_pane_style----------------------- + +------------------------label_style------------------------- + +data.raw["gui-style"].default["fnei_main_header-label"] = +{ + type = "label_style", + font = "font-lb", + font_color = {r = 255, g = 230, b = 192}, + width = 50, + horizontal_align = "center", + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_prot_label"] = +{ + type = "label_style", + font = "font-mb", + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_tab-description-label"] = +{ + type = "label_style", + width = 454, + horizontal_align = "center", + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_search_label"] = +{ + type = "label_style", + width = 300, + top_padding = 3, + horizontal_align = "right", + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_page_label"] = +{ + type = "label_style", + width = 396, + top_padding = 3, + horizontal_align = "center", + scalable = false, +} + +-------------------------text_field_style-------------------------- + +data.raw["gui-style"].default["fnei_main_search_field"] = +{ + type = "textbox_style", + parent = "textbox", + width = 152, + scalable = false, +} + +------------------------button_style------------------------- + +data.raw["gui-style"].default["fnei_main_empty-tab"] = +{ + type = "button_style", + parent = "fnei_default_empty-tab", + height = 36, + width = 229, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_selected-tab"] = +{ + type = "button_style", + parent = "fnei_default_selected-tab", + height = 36, + width = 229, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_red_slot_button"] = +{ + type = "button_style", + parent = "red_slot", + height = 36, + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_grey_slot_button"] = { + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_search_slot_button"] = +{ + type = "button_style", + parent = "compact_slot", + height = 48, + width = 48, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_default_button"] = +{ + type = "button_style", + height = 32, + width = 130, + top_padding = 0, + font = "font-mb", + scalable = false, +} + +------------------------empty_widget_style------------------------- + +data.raw["gui-style"].default["fnei_main_header-drag-widget"] = +{ + type = "empty_widget_style", + height = 36, + width = 380, + left_margin = -380, + scalable = false, +} + +data.raw["gui-style"].default["fnei_main_header-sprite-widget"] = +{ + type = "empty_widget_style", + parent = "draggable_space", + height = 36, + width = 310, + scalable = false, +} diff --git a/FNEI/prototypes/recipe_styles.lua b/FNEI/prototypes/recipe_styles.lua new file mode 100644 index 00000000..7854e133 --- /dev/null +++ b/FNEI/prototypes/recipe_styles.lua @@ -0,0 +1,441 @@ +-------------------------label_style----------------------- + +data.raw["gui-style"].default["fnei_recipe_title_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "center", + vertical_align = "center", + font = "font-mb", + height = 36, + width = 311, + font_color = { r=0, g=0.9, b=0 }, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_red_title_label"] = +{ + type = "label_style", + parent = "fnei_recipe_title_label", + font_color = { r=1, g=0.2537254, b=0.25980392 }, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_grey_title_label"] = +{ + type = "label_style", + parent = "fnei_recipe_title_label", + font_color = { r=0.5, g=0.5, b=0.5 }, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_madein_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "center", + height = 36, + width = 190, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_technologies_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "center", + height = 68, + width = 190, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_element_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "center", + height = 32, + top_padding = 0, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_type_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "right", + height = 36, + width = 182, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_paging_label"] = +{ + type = "label_style", + parent = "label", + horizontal_align = "left", + height = 36, + width = 190, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_craft_time_for_building_label"] = +{ + type = "label_style", + parent = "label", + top_padding = 0, + height = 20, + minimal_width = 36, + scalable = false, +} + +-------------------------flow_style-------------------------- + +data.raw["gui-style"].default["fnei_recipe_favorite_flow"] = +{ + type = "horizontal_flow_style", + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_arrow_flow"] = +{ + type = "horizontal_flow_style", + top_padding = 0, + left_padding = 0, + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_header_icon_flow"] = +{ + type = "horizontal_flow_style", + width = 36, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_list_elements_flow"] = +{ + type = "horizontal_flow_style", + minimal_height = 38, + maximal_height = 38, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_building_flow"] = +{ + type = "vertical_flow_style", + vertical_spacing = 0, + scalable = false, +} + +-------------------------frame_style-------------------------- + +data.raw["gui-style"].default["fnei_recipe_main_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 520, + maximal_width = 520, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_header_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 508, + maximal_width = 508, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_paging_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + left_padding = 7, + minimal_width = 508, + maximal_width = 508, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_ingr_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + width = 252, + left_padding = 3, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_res_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + width = 252, + left_padding = 3, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_list_ingr_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + left_padding = 3, + width = 252, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_list_res_frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + left_padding = 3, + width = 252, + scalable = false, +} + +-------------------------table_style-------------------------- + +data.raw["gui-style"].default["fnei_recipe_main_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_header_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 1, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_paging_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + top_padding = 0, + left_padding = 0, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_products_table"] = +{ + type = "table_style", + parent = "fnei_default_table", + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_list_elements_table"] = +{ + type = "table_style", + parent = "table", + vertical_spacing = 2, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_made_in_table"] = +{ + type = "table_style", + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_tech_table"] = +{ + type = "table_style", + scalable = false, +} + +----------------------scroll_pane_style----------------------- + +data.raw["gui-style"].default["fnei_recipe_products_scroll_pane"] = +{ + type = "scroll_pane_style", + maximal_width = 240, + minimal_width = 240, + maximal_height = 330, + vertical_align = "center", + scalable = false, +} + +------------------------button_style------------------------- + +data.raw["gui-style"].default["fnei_recipe_red_tech_button"] = +{ + type = "button_style", + parent = "red_slot", + height = 68, + width = 68, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_green_tech_button"] = +{ + type = "button_style", + parent = "green_slot", + height = 68, + width = 68, + scalable = false, +} + +data.raw["gui-style"].default["fnei_recipe_yellow_tech_button"] = +{ + type = "button_style", + parent = "compact_slot", + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 185, + 72 + }, + scale = 1, + size = 36 + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 111, + 72 + }, + scale = 1, + size = 36 + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 148, + 72 + }, + scale = 1, + size = 36 + }, + + height = 68, + width = 68, + scalable = false +} + +data.raw["gui-style"].default["fnei_recipe_grey_tech_button"] = +{ + type = "button_style", + parent = "compact_slot", + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 185, + 0 + }, + scale = 1, + size = 36 + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 111, + 0 + }, + scale = 1, + size = 36 + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + position = { + 148, + 0 + }, + scale = 1, + size = 36 + }, + + height = 68, + width = 68, + scalable = false +} + +data.raw["gui-style"].default["fnei_recipe_favorive_button"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + height = 36, + width = 36, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/favorite_clicked.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/favorite.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/favorite_hovered.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_recipe_selected_favorive_button"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + height = 36, + width = 36, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/favorite_clicked.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/favorite_selected.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/favorite_hovered.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +------------------------empty_widget_style------------------------- + +data.raw["gui-style"].default["fnei_recipe_header-drag-widget"] = +{ + type = "empty_widget_style", + height = 36, + width = 315, + left_margin = -315, + scalable = false, +} + +-- data.raw["gui-style"].default["fnei_recipe_header-sprite-widget"] = +-- { +-- type = "empty_widget_style", +-- parent = "draggable_space", +-- height = 36, +-- width = 310, +-- scalable = false, +-- } diff --git a/FNEI/prototypes/settings_styles.lua b/FNEI/prototypes/settings_styles.lua new file mode 100644 index 00000000..9ae545d3 --- /dev/null +++ b/FNEI/prototypes/settings_styles.lua @@ -0,0 +1,420 @@ + +-------------------------text_field_style-------------------------- + +data.raw["gui-style"].default["fnei_settings_numeric-text-field"] = +{ + type = "textbox_style", + parent = "textbox", + width = 50, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_wrong_numeric-text-field"] = +{ + type = "textbox_style", + parent = "invalid_value_textfield", + width = 50, + scalable = false, +} + +-------------------------flow_style-------------------------- + +data.raw["gui-style"].default["fnei_settings_tab-flow"] = +{ + type = "horizontal_flow_style", + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_updown-arrow-flow"] = +{ + type = "vertical_flow_style", + scalable = false, + vertical_spacing = 2, +} + +-------------------------frame_style-------------------------- + +data.raw["gui-style"].default["fnei_settings_main-frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 530, + maximal_width = 530, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_header-frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 518, + maximal_width = 518, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_content-frame"] = +{ + type = "frame_style", + parent = "fnei_default_frame", + minimal_width = 518, + maximal_width = 518, + scalable = false, +} + +-------------------------table_style-------------------------- + +data.raw["gui-style"].default["fnei_settings_main-table"] = +{ + type = "table_style", + parent = "fnei_default_table", + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_header-table"] = +{ + type = "table_style", + parent = "fnei_default_table", + horizontal_spacing = 1, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_content-table"] = +{ + type = "table_style", + parent = "fnei_default_table", + scalable = false, +} + +----------------------scroll_pane_style----------------------- + +data.raw["gui-style"].default["fnei_settings_craft-cat-scroll"] = +{ + type = "scroll_pane_style", + maximal_width = 506, + minimal_width = 506, + maximal_height = 400, + scalable = false, +} + +------------------------button_style------------------------- + +data.raw["gui-style"].default["fnei_settings_empty-tab"] = +{ + type = "button_style", + parent = "fnei_default_empty-tab", + height = 36, + width = 167, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_selected-tab"] = +{ + type = "button_style", + parent = "fnei_default_selected-tab", + height = 36, + width = 167, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_enabled-building"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 185, + y = 108, + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 111, + y = 108, + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 148, + y = 108, + }, +} + +data.raw["gui-style"].default["fnei_settings_disabled-building"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 185, + y = 36, + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 111, + y = 36, + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 148, + y = 36, + }, +} + +data.raw["gui-style"].default["fnei_settings_hidden-building"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 185, + y = 0, + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 111, + y = 0, + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 148, + y = 0, + }, +} + +data.raw["gui-style"].default["fnei_settings_enable-category"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 108, + font = "font-mb", + scalable = false, + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 185, + y = 108, + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 111, + y = 108, + + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 148, + y = 108, + }, +} + +data.raw["gui-style"].default["fnei_settings_disable-category"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 108, + font = "font-mb", + scalable = false, + + clicked_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 185, + y = 0, + }, + default_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 111, + y = 0, + }, + hovered_graphical_set = { + border = 1, + filename = "__core__/graphics/gui.png", + height = 36, + priority = "extra-high-no-scale", + width = 36, + x = 148, + y = 0, + }, +} + +data.raw["gui-style"].default["fnei_settings_up_arrow"] = +{ + type = "button_style", + parent = "button", + height = 12, + width = 24, + scalable = false, + + default_graphical_set = { + border = 1, + filename = "__FNEI__/graphics/switch-quickbar.png", + height = 12, + priority = "extra-high-no-scale", + width = 24, + x = 0, + y = 0, + }, + hovered_graphical_set = { + border = 1, + filename = "__FNEI__/graphics/switch-quickbar.png", + height = 12, + priority = "extra-high-no-scale", + width = 24, + x = 24, + y = 0, + }, +} + +data.raw["gui-style"].default["fnei_settings_down_arrow"] = +{ + type = "button_style", + parent = "compact_slot", + height = 12, + width = 24, + scalable = false, + + default_graphical_set = { + border = 1, + filename = "__FNEI__/graphics/switch-quickbar.png", + height = 12, + priority = "extra-high-no-scale", + width = 24, + x = 0, + y = 12, + }, + hovered_graphical_set = { + border = 1, + filename = "__FNEI__/graphics/switch-quickbar.png", + height = 12, + priority = "extra-high-no-scale", + width = 24, + x = 24, + y = 12, + }, +} + +------------------------label_style------------------------- + +data.raw["gui-style"].default["fnei_settings_header-label"] = +{ + type = "label_style", + font = "font-lb", + font_color = {r = 255, g = 230, b = 192}, + width = 70, + horizontal_align = "center", + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_param-label"] = +{ + type = "label_style", + width = 330, + left_padding = 1, + right_padding = 1, + top_padding = 1, + bottom_padding = 1, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_craft-category-label"] = +{ + type = "label_style", + width = 506, + horizontal_align = "center", + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_warning-text"] = +{ + type = "label_style", + width = 100, + font_color = { b = 0, g = 0.2, r = 1 }, + scalable = false, +} + +------------------------empty_widget_style------------------------- + +data.raw["gui-style"].default["fnei_settings_header-drag-widget"] = +{ + type = "empty_widget_style", + height = 36, + width = 440, + left_margin = -440, + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_header-sprite-widget"] = +{ + type = "empty_widget_style", + parent = "draggable_space", + height = 36, + width = 344, + scalable = false, +} diff --git a/FNEI/prototypes/styles.lua b/FNEI/prototypes/styles.lua new file mode 100644 index 00000000..7ce6488c --- /dev/null +++ b/FNEI/prototypes/styles.lua @@ -0,0 +1,331 @@ +data:extend({ +--sprite + { + type = "sprite", + name = "fnei_time_icon", + filename = "__core__/graphics/clock-icon.png", + priority = "extra-high-no-scale", + width = 32, + height = 32, + scale = 1, + }, + { + type = "sprite", + name = "fnei_hand_icon", + filename = "__core__/graphics/icons/mip/slot-item-in-hand-black.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + scale = 1, + }, + { + type = "sprite", + name = "fnei_favorite_icon", + filename = "__FNEI__/graphics/favorite_icon.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + scale = 1, + }, + { + type = "sprite", + name = "fnei_last_usage_icon", + filename = "__FNEI__/graphics/last_usage_icon.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + scale = 1, + }, + +--Fonts + { + type = "font", + name = "font-s", + from = "default", + size = 12 + }, + { + type = "font", + name = "font-m", + from = "default", + size = 15 + }, + { + type = "font", + name = "font-l", + from = "default", + size = 18 + }, + { + type = "font", + name = "font-sb", + from = "default-semibold", + size = 12 + }, + { + type = "font", + name = "font-mb", + from = "default-semibold", + size = 15 + }, + { + type = "font", + name = "font-lb", + from = "default-semibold", + size = 17 + } +}) + +-------------------------flow_style-------------------------- + +data.raw["gui-style"].default["fnei_default_vertical_flow"] = +{ + type = "vertical_flow_style", + scalable = false, +} + +data.raw["gui-style"].default["fnei_default_horizontal_flow"] = +{ + type = "horizontal_flow_style", + scalable = false, +} + +-------------------------frame_style-------------------------- + +data.raw["gui-style"].default["fnei_default_frame"] = +{ + type = "frame_style", + top_padding = 3, + right_padding = 3, + bottom_padding = 3, + left_padding = 3, + resize_row_to_width = true, + resize_to_row_height = true, + title_top_padding = 0, + title_right_padding = 0, + title_bottom_padding = 0, + title_left_padding = 0, + font_color = { r = 1, g = 0, b = 0, a = 1 }, + scalable = false, +} + +-------------------------table_style-------------------------- + +data.raw["gui-style"].default["fnei_default_table"] = +{ + type = "table_style", + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + cell_padding = 0, + horizontal_spacing = 4, + vertical_spacing = 4, + scalable = false, +} + +-------------------------label_style-------------------------- + +data.raw["gui-style"].default["fnei_default_label"] = +{ + type = "label_style", + scalable = false, +} + +------------------------button_style------------------------- + +data.raw["gui-style"].default["fnei_default_button"] = +{ + type = "button_style", + parent = "compact_slot", + scalable = false, +} + +data.raw["gui-style"].default["fnei_settings_button_style"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + clicked_graphical_set = { + filename = "__FNEI__/graphics/Settings_3.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/Settings_1.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/Settings_2.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_exit_button_style"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + clicked_graphical_set = { + filename = "__FNEI__/graphics/Exit_3.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/Exit_1.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/Exit_2.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_back_button_style"] = +{ + type = "button_style", + parent = "compact_slot", + height = 36, + width = 36, + scalable = false, + clicked_graphical_set = { + filename = "__FNEI__/graphics/Back_3.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/Back_1.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/Back_2.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_left_arrow_button_style"] = +{ + type = "button_style", + parent = "compact_slot", + height = 28, + width = 28, + scalable = false, + clicked_graphical_set = { + filename = "__FNEI__/graphics/prev_3.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/prev_1.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/prev_2.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_right_arrow_button_style"] = +{ + type = "button_style", + parent = "compact_slot", + height = 28, + width = 28, + scalable = false, + clicked_graphical_set = { + filename = "__FNEI__/graphics/next_3.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/next_1.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/next_2.png", + height = 64, + priority = "extra-high-no-scale", + width = 64, + } +} + +data.raw["gui-style"].default["fnei_default_empty-tab"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/selected_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/default_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/hovered_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + } +} + +data.raw["gui-style"].default["fnei_default_selected-tab"] = +{ + type = "button_style", + parent = "compact_slot", + font = "font-mb", + scalable = false, + + clicked_graphical_set = { + filename = "__FNEI__/graphics/selected_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + }, + default_graphical_set = { + filename = "__FNEI__/graphics/selected_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + }, + hovered_graphical_set = { + filename = "__FNEI__/graphics/hovered_tab.png", + height = 36, + priority = "extra-high-no-scale", + width = 169, + } +} diff --git a/FNEI/scripts/controller.lua b/FNEI/scripts/controller.lua new file mode 100644 index 00000000..80e3e681 --- /dev/null +++ b/FNEI/scripts/controller.lua @@ -0,0 +1,138 @@ +Controller = { + classname = "FNPlayer" +} + +local queue = List:new("controllers") + +local controllers = { + main = require "scripts/main/controller", + recipe = require "scripts/recipe/controller", + settings = require "scripts/settings/controller", + hotbar = require "scripts/hotbar/controller", +} + +function Controller.init_events() + for _,cnt in pairs(controllers) do + cnt.init_events() + end +end + +function Controller.get_cont(name) + if name and controllers[name] then + return controllers[name] + else + out("controller name: ", name, " not found") + end +end + +function Controller.get_cur_con() + local con_name = Controller.get_cur_con_name() + if con_name then + return Controller.get_cont(con_name) + end + return nil +end + +function Controller.get_cur_con_name() + return queue:get() +end + +function Controller.set_cur_con_name(contr) + return queue:add(contr) +end + +function Controller.remove_last_con_name() + return queue:remove() +end + +----------------------------------------------------------------------------- + +function Controller.set_opened_gui(gui) + if Settings.get_val("need-show") and gui and gui.valid then + Player.get().opened = gui + end +end + +function Controller.reset_opened_gui() + if Settings.get_val("need-show") then + Player.get().opened = nil + end +end + +----------------------------------------------------------------------------- + +function Controller.exit_event() + local cur_cont = Controller.get_cur_con() + + if cur_cont then + cur_cont.exit() + queue:clear() + Controller.reset_opened_gui() + end +end + +function Controller.close_event() + local cur_cont = Controller.get_cur_con() + + if cur_cont then + cur_cont.exit() + queue:remove() + Controller.reset_opened_gui() + end +end + +function Controller.open_event(cont_name) + local controller = Controller.get_cont(cont_name) + + if controller and controller.can_open_gui() then + local cur_cont = Controller.get_cur_con() + + if cur_cont and cur_cont.is_gui_open() then + cur_cont.exit() + Controller.reset_opened_gui() + end + + if queue:contains_elem(cont_name) then + while queue:get() ~= cont_name do + queue.remove() + end + queue.remove() + end + + Controller.open_gui_event(cont_name) + end +end + +function Controller.open_gui_event(cont_name) + local controller = Controller.get_cont(cont_name) + + if controller then + queue:add(cont_name) + local gui = controller.open() + Controller.set_opened_gui(gui) + else + Debug:error("Error in function Controller.open_event: cont_name ", cont_name, "not found") + end +end + +function Controller.back_key_event() + local cur_cont = Controller.get_cur_con() + + if cur_cont and cur_cont.back_key() then + Controller.close_event() + if not queue:is_empty() then + + local prev_cont = queue:get() + queue:remove() + Controller.open_gui_event(prev_cont) + end + end +end + +function Controller.main_key_event() + if queue:is_empty() then + Controller.open_event("main") + else + Controller.exit_event() + end +end \ No newline at end of file diff --git a/FNEI/scripts/custom_events.lua b/FNEI/scripts/custom_events.lua new file mode 100644 index 00000000..d356d82b --- /dev/null +++ b/FNEI/scripts/custom_events.lua @@ -0,0 +1,97 @@ +local CustomEvents = { + classname = "FNCustomEvents", +} + +event_list = {} + +function CustomEvents.add_custom_event(gui_name, gui_type, event_name, func) + Debug:debug(CustomEvents.classname, "CustomEvents.add_custom_event(", gui_name, gui_type, event_name, func, ")") + if not gui_name or not event_name or not gui_type then + out("Error in CustomEvents.add_custom_event: input == nil") + return + end + + if not CustomEvents.event_exists(gui_name, gui_type, event_name) then + if not event_list[gui_name] then + event_list[gui_name] = {} + end + if not event_list[gui_name][gui_type] then + event_list[gui_name][gui_type] = {} + end + event_list[gui_name][gui_type][event_name] = {} + end + if type(func) == "function" then + table.insert(event_list[gui_name][gui_type][event_name], func) + elseif type(func) == "table" then + for _,fun in pairs(func) do + table.insert(event_list[gui_name][gui_type][event_name], fun) + end + end +end + +function CustomEvents.del_custom_event(gui_name, gui_type, event_name) + Debug:debug(CustomEvents.classname, "CustomEvents.del_custom_event(", gui_name, gui_type, event_name, ")") + if not gui_name or not event_name or not gui_type then + out("Error in CustomEvents.del_custom_event: input == nil") + return + end + if CustomEvents.event_exists(gui_name, gui_type, event_name) then + event_list[gui_name][gui_type][event_name] = nil + else + out("Error CustomEvents.del_custom_event: Event not found") + end +end + +function CustomEvents.event_exists(gui_name, gui_type, event_name) + Debug:debug(CustomEvents.classname, "CustomEvents.event_exists(", gui_name, gui_type, event_name, ")") + if event_list[gui_name] and + event_list[gui_name][gui_type] and + event_list[gui_name][gui_type][event_name] then + return true + end + return false +end + +function CustomEvents.invoke(gui_name, gui_type, event_name, event, split_strings) + Debug:debug(CustomEvents.classname, "CustomEvents.invoke(", gui_name, gui_type, event_name, event, ")") + if not gui_name or not event_name or not event then + out("Error in CustomEvents.invoke: input == nil") + return + end + if CustomEvents.event_exists(gui_name, gui_type, event_name) then + local events = event_list[gui_name][gui_type][event_name] + for _,cur_event in pairs(events) do + local ok , err = pcall(function() + cur_event(event, event_name, split_strings) + end) + + if not(ok) then + Debug:error(CustomEvents.classname, "FNEI: event ", gui_name, gui_type, event_name, " return error!") + Debug:error(CustomEvents.classname, err) + + Gui.refresh_fnei_gui() + end + end + else + out("Error CustomEvents.invoke: event not found ", event, event.element.name, gui_name, gui_type, event_name) + end +end + +function CustomEvents.remove_gui_events(gui_name) + Debug:debug(CustomEvents.classname, "CustomEvents.remove_gui_events(", gui_name, ")") + event_list[gui_name] = nil +end + +function CustomEvents.debug() + for a,gui_name in pairs(event_list) do + for b,gui_type in pairs(gui_name) do + for c,gui_event in pairs(gui_type) do + for d,event in pairs(gui_event) do + out(a, b, c, d) + end + end + end + end +end + +return CustomEvents diff --git a/FNEI/scripts/events.lua b/FNEI/scripts/events.lua new file mode 100644 index 00000000..8ad5cd33 --- /dev/null +++ b/FNEI/scripts/events.lua @@ -0,0 +1,132 @@ +Events = { + classname = "FNEvents" +} + +local gui_key_name = "pressed-fnei-gui-key" +local back_key_name = "pressed-fnei-back-key" +local CustomEvents = require "scripts/custom_events" + +local supported_gui_event = { + defines.events.on_gui_checked_state_changed, + defines.events.on_gui_selection_state_changed, + defines.events.on_gui_click, + defines.events.on_gui_text_changed, + defines.events.on_gui_elem_changed, +} + +function Events.debug() + CustomEvents.debug() +end + +function Events.add_custom_event(gui_name, gui_type, event_name, func) + CustomEvents.add_custom_event(gui_name, gui_type, event_name, func) +end + +function Events.del_custom_event(gui_name, gui_type, event_name) + CustomEvents.del_custom_event(gui_name, gui_type, event_name) +end + +function Events.on_configuration_changed(event) + if not global.fnei then global.fnei = {} end + if not global.fnei.event_list then global.fnei.event_list = {} end + + for i, player in pairs(game.players) do + Player.load({ player_index = i }) + Gui.close_old_fnei_gui() + Controller.back_key_event() + Controller.get_cont("hotbar").on_configuration_change() + end +end + +function Events.on_player_created(event) + Player.load(event) + Controller.get_cont("hotbar").open() +end + +function Events.back_key(event) + Player.load(event) + Controller.back_key_event() +end + +function Events.gui_key(event) + Player.load(event) + Controller.main_key_event() +end + +function Events.on_tick(event) + hard_load() +end + +function Events.on_gui_closed(event) + Player.load(event) + if event and event.element and string.match(event.element.name, "fnei%\t") then + Events.gui_key(event) + end + TechHook.on_gui_closed(event) +end + +function Events.on_player_left_game(event) + +end + +function Events.on_event_invoke(event) + Player.load(event) + local gui_name, gui_type, event_name, split_strings = Events.parse_name(event) + CustomEvents.invoke(gui_name, gui_type, event_name, event, split_strings) +end + +function Events.parse_name(event) + if event == nil then + out("Error: Events.parse_name: event == nil ") + return + end + local element = event.element + if element == nil then + out("Error: Events.parse_name: element == nil ") + return + end + + local split_strings = {} + + for num in string.gmatch(element.name or "", "[^\t]+") do + table.insert(split_strings, num) + end + + if split_strings[1] == Gui.get_prefix() then + return split_strings[2], element.type, split_strings[3], split_strings + end +end + +function Events:init() + script.on_configuration_changed(self.on_configuration_changed) + script.on_init(self.on_configuration_changed) + script.on_load(self.on_load) + + self.event_load(defines.events.on_player_created, self.on_player_created) + self.event_load(defines.events.on_tick, self.on_tick) + self.event_load(gui_key_name, self.gui_key) + self.event_load(back_key_name, self.back_key) + self.event_load(defines.events.on_gui_closed, self.on_gui_closed) + self.event_load(defines.events.on_player_left_game, self.on_player_left_game) + + for _,event in pairs(supported_gui_event) do + self.event_load(event, self.on_event_invoke) + end + + Controller.init_events() +end + +function Events.init_temp_events(gui_name, gui_template) + if gui_template then + for _,gui_temp in pairs(gui_template) do + if gui_temp.event then + Events.add_custom_event(gui_name, gui_temp.type, gui_temp.name, gui_temp.event) + end + Events.init_temp_events(gui_name, gui_temp.children) + end + end +end + +function Events.event_load(event_name, func) + script.on_event(event_name, func) +end \ No newline at end of file diff --git a/FNEI/scripts/gui.lua b/FNEI/scripts/gui.lua new file mode 100644 index 00000000..5c88272d --- /dev/null +++ b/FNEI/scripts/gui.lua @@ -0,0 +1,370 @@ +Gui = { + classname = "FNGui" +} + +local mod_prefix = "fnei" +local CustomEvent = require "scripts/custom_events" +local mod_gui = require("mod-gui") + +function Gui.get_prefix() + return mod_prefix +end + +function Gui.create_gui_name(contr_name, gui_name) + if type(gui_name) == "string" then + if type(contr_name) == "string" then + return mod_prefix .. '\t' .. contr_name .. '\t' .. gui_name + else + Debug:error(Gui.classname, "Error in function Gui.create_gui_name: contr_name is nil (", contr_name, ")") + end + end + + return nil +end + +--check old fnei gui and close them +function Gui.close_old_fnei_gui() + local function gui_iterate(parent) + for _, gui_name in pairs(parent.children_names) do + if string.match(gui_name or "", "fnei_") and parent[gui_name].valid then + out("Destroy gui: " .. gui_name) + parent[gui_name].destroy() + end + end + end + + gui_iterate(Player.get().gui.left) + gui_iterate(Player.get().gui.top) + gui_iterate(Player.get().gui.center) + gui_iterate(Player.get().gui.screen) + + local modgui = mod_gui.get_frame_flow(Player.get()) + if modgui["fnei_left_flow"] then + modgui["fnei_left_flow"].destroy() + end +end + +function Gui.refresh_fnei_gui() + local function gui_iterate(parent) + for _, gui_name in pairs(parent.children_names) do + if string.match(gui_name or "", "fnei") and parent[gui_name].valid then + parent[gui_name].destroy() + end + end + end + + gui_iterate(Player.get().gui.left) + gui_iterate(Player.get().gui.top) + gui_iterate(Player.get().gui.center) + gui_iterate(Player.get().gui.screen) +end + +function Gui.set_style_field(parent, gui_name, args) + local gui = Gui.get_gui(parent, gui_name) + + if gui and gui.style then + local style = gui.style + + for name,val in pairs(args) do + style[name] = val + end + else + Debug:error(Gui.classname, "Gui.set_style_field: gui not found parent:", (parent or {}).name, gui_name) + end +end + +function Gui.get_pos() + return Player.get().gui.screen +end + +function Gui.get_location() + cur_loc = Player.get_global()["gui_loc"] + + res = Player.get().display_resolution + if cur_loc == nil or cur_loc.x >= res.width or cur_loc.y >= res.height then + cur_loc = {x = 82, y = 70} + end + + return cur_loc +end + +function Gui.set_location(loc) + if Player.get_global()["gui_loc"] ~= loc then + res = Player.get().display_resolution + if loc == nil or loc.x >= res.width or loc.y >= res.height then + loc = {x = 82, y = 70} + end + Player.get_global()["gui_loc"] = loc + end +end + +function Gui.get_left_gui() + local left_gui = Player.get().gui.left + + if not left_gui["fnei_left_flow"] then + left_gui.add({ type = "flow", name = "fnei_left_flow", direction = "horizontal" }) + end + + return left_gui["fnei_left_flow"] or left_gui +end + +function Gui.get_gui(parent, gui_name) + local cont_name = Controller.get_cur_con_name() or "" + local full_name = Gui.create_gui_name(cont_name, gui_name) + return Gui.get_gui_proc(parent, full_name) +end + +function Gui.get_gui_proc(parent, name) + if not parent then return end + + -- check only fnei gui + if parent.name ~= "screen" and parent.name ~= "left" and string.find(parent.name, "fnei") == nil then + return + end + + local result + for _,g in pairs(parent.children) do + if g and g.valid then + if g.name == name then + return g + end + result = Gui.get_gui_proc(g, name) + if result then + return result + end + else + Debug:error(Gui.classname, "not valid element: ", g.name) + end + end + return result +end + +function Gui.get_local_name(element) + return (element and element.localised_name) or "unknow" +end + +local gui_function = {} + +function Gui.init_function() + gui_function["sprite-button"] = Gui.add_sprite_button + gui_function["flow"] = Gui.add_flow + gui_function["frame"] = Gui.add_frame + gui_function["table"] = Gui.add_table + gui_function["drop-down"] = Gui.add_drop_down + gui_function["checkbox"] = Gui.add_checkbox + gui_function["button"] = Gui.add_button + gui_function["empty-widget"] = Gui.add_widget + gui_function["label"] = Gui.add_label + gui_function["textfield"] = Gui.add_textfield + gui_function["scroll-pane"] = Gui.add_scroll_pane + gui_function["choose-elem-button"] = Gui.add_choose_button + gui_function["tabbed-pane"] = Gui.add_tabbed_pane + gui_function["tab"] = Gui.add_tab +end + +function Gui.add_gui_template(parent, gui_temp) + if parent == nil then + Debug:error(Gui.classname, "Error in function Gui.add_template: parent == nil: gui_temp =", gui_temp) + return + end + if gui_temp then + local gui + for _,gui_templ in pairs(gui_temp) do + local gui_elem = {} + for type, gui_field in pairs(gui_templ) do + if type ~= "children" and type ~= "event" then + gui_elem[type] = gui_field + end + end + + if gui_function[gui_templ.type] then + gui = gui_function[gui_templ.type](parent, gui_elem) + + if gui == nil then + Debug:error(Gui.classname, "Error in function Gui.add_template: error created gui: ", gui_templ.type, "name:", gui_templ.name) + out(gui_temp) + end + else + Debug:error(Gui.classname, "Error in function Gui.add_template: unknow gui_type: ", gui_templ.type) + end + + Gui.add_gui_template(gui, gui_templ.children) + end + return gui + end +end + +function Gui.set_def_fields(parent, gui_elem) + local cont_name = Controller.get_cur_con_name() + local gui_name = Gui.create_gui_name(cont_name, gui_elem.name) + + if gui_name and parent[gui_name] then + local cnt = 1 + while parent[gui_name .. cnt] ~= nil do + cnt = cnt + 1 + end + + gui_name = gui_name .. cnt + end + + gui_elem.name = gui_name + + if gui_elem.style == "" then + gui_elem.style = gui_elem.name + end + + return gui_elem +end + +function Gui.add_tab(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_tabbed_pane(parent, gui_elem) + local tabs = gui_elem.tabs + gui_elem.tabs = nil + + Gui.set_def_fields(parent, gui_elem) + local pane = parent.add(gui_elem) + + for _,tab in pairs(tabs) do + local tab_elm = tab[1] + local content = tab[2] + + if tab_elm == nil or tab_elm.type ~= "tab" then + Debug:error(Gui.classname, "Error in function Gui.add_tabbed_pane: the first element in \"tabbed_pane\" does not have a \"tab\" type: ", tab_elm and tab_elm.type) + return pane + end + + if content == nil then + Debug:error(Gui.classname, "Error in function Gui.add_tabbed_pane: content is nil") + return pane + end + + if tab[3] ~= nil then + Debug:error(Gui.classname, "Error in function Gui.add_tabbed_pane: unnecessary elements in the tab after content:", tab[1].caption) + end + + tab_elm = Gui.add_gui_template(pane, {tab_elm}) + content = Gui.add_gui_template(pane, {content}) + pane.add_tab(tab_elm, content) + end + + return pane +end + +function Gui.add_sprite_button(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_flow(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_frame(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_table(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_drop_down(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_checkbox(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_button(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_widget(parent, gui_elem) + Gui.set_def_fields(parent, gui_elem) + + local drag_elem + + if gui_elem.drag_target then + drag_elem = gui_elem.drag_target + gui_elem.drag_target = nil + end + + local gui = parent.add(gui_elem) + + if drag_elem then + target = parent + + while target.parent and target.parent.parent do + target = target.parent + end + + if target.type == "frame" then + gui.drag_target = target + end + end + + return gui +end + +function Gui.add_label(parent, gui_elem) + Gui.set_def_fields(parent, gui_elem) + + gui_elem.caption = gui_elem.caption or "unknow" + gui_elem.tooltip = gui_elem.tooltip or gui_elem.caption + + local gui = parent.add(gui_elem) + + gui.style.single_line = gui_elem.single_line or false + if gui_elem.vertical_align ~= nil then gui.style.vertical_align = gui_elem.vertical_align end + if gui_elem.align ~= nil then gui.style.horizontal_align = gui_elem.align end + + return gui +end + +function Gui.add_textfield(parent, gui_elem) + Gui.set_def_fields(parent, gui_elem) + gui_elem.text = gui_elem.text or "" + return parent.add(gui_elem) +end + +function Gui.add_scroll_pane(parent, gui_elem) + return parent.add(Gui.set_def_fields(parent, gui_elem)) +end + +function Gui.add_choose_button(parent, gui_elem) + local gui = parent.add(Gui.set_def_fields(parent, gui_elem)) + Gui.set_choose_but_val(gui, gui_elem.elem_value) + gui.locked = gui_elem.locked + return gui +end + +function Gui.set_choose_but_val(button, val) + local function check_val(val, list, debug_text) + if val and list[val] then + return val + else + Debug:debug(Gui.classname, "Gui.set_choose_but_val: ", debug_text, val, "not found") + return nil + end + end + + if button then + if button.elem_type == "item" then + button.elem_value = check_val(val, game.item_prototypes, "item") + elseif button.elem_type == "fluid" then + button.elem_value = check_val(val, game.fluid_prototypes, "fluid") + elseif button.elem_type == "recipe" then + button.elem_value = check_val(val, game.recipe_prototypes, "recipe") + elseif button.elem_type == "entity" then + button.elem_value = check_val(val, game.entity_prototypes, "entity") + else + Debug:error(Gui.classname, "Gui.set_choose_but_val: unknown choose-button type") + end + else + Debug:error(Gui.classname, "Gui.set_choose_but_val: gui_elem == nil") + end +end + +Gui.init_function() \ No newline at end of file diff --git a/FNEI/scripts/hotbar/controller.lua b/FNEI/scripts/hotbar/controller.lua new file mode 100644 index 00000000..d58b9930 --- /dev/null +++ b/FNEI/scripts/hotbar/controller.lua @@ -0,0 +1,216 @@ +local HotbarController = { + classname = "FNHotbarController", +} + +local HotbarGui = require "scripts/hotbar/gui" +local favorite = "fav_arr" +local last_usage = "last_arr" +local last_tmp = "last_usage_tmp" +local last_usage_size = 21 + +function HotbarController.init_events() + favorite = Array:new(favorite) + last_usage = Array:new(last_usage) + last_tmp = Array:new(last_tmp) + + HotbarGui.init_events() + Events.add_custom_event(HotbarGui.name, "button", "hide-button", HotbarController.change_recipe_visibility) + Events.add_custom_event(HotbarGui.name, "sprite-button", "favorite", HotbarController.favorite_empty_button_click_event) + Events.add_custom_event(HotbarGui.name, "sprite-button", "last-usage", HotbarController.last_empty_button_click_event) + Events.add_custom_event(HotbarGui.name, "sprite-button", "rfavorite", HotbarController.favorite_recipe_click_event) + Events.add_custom_event(HotbarGui.name, "sprite-button", "rlast-usage", HotbarController.last_recipe_click_event) + Events.add_custom_event(HotbarGui.name, "choose-elem-button", "rfavorite", HotbarController.favorite_recipe_click_event) + Events.add_custom_event(HotbarGui.name, "choose-elem-button", "rlast-usage", HotbarController.last_recipe_click_event) +end + +function HotbarController.exit() + out("hotbar exit") + + Controller.set_cur_con_name("hotbar") + + HotbarGui.close_window() + + Controller.remove_last_con_name() +end + +function HotbarController.open() + out("hotbar open") + + if Settings.get_val("show-hotbar") then + Controller.set_cur_con_name("hotbar") + + local ret_gui = HotbarGui.open_window() + HotbarGui.draw_hotbar_bar_extension(HotbarController.get_last_usage_list(), favorite:get_array()) + + Controller.remove_last_con_name() + + return ret_gui + else + HotbarController.exit() + end +end + +function HotbarController.back_key() + return false +end + +function HotbarController.can_open_gui() + return true +end + +function HotbarController.get_name() + return HotbarGui.name +end + +function HotbarController.is_gui_open() + return HotbarGui.is_gui_open() +end + +function HotbarController.on_configuration_change() + HotbarController.update_recipes(favorite) + HotbarController.update_recipes(last_usage) + HotbarController.open() +end + +---------------------------- api ----------------------------- + +function HotbarController.get_favorite_recipe_state(recipe) + return favorite:get_elem_pos(recipe) ~= nil +end + +function HotbarController.change_favorite_recipe_state(recipe) + if HotbarController.get_favorite_recipe_state(recipe) then + favorite:remove(favorite:get_elem_pos(recipe)) + HotbarController.open() + Controller.get_cont("recipe").draw_favorite_button() + else + local slot = favorite:get_first_free_slot( ) + + if slot > Settings.get_val("hotbar-fav-line-num") * 2 then + Player.print({ "fnei.favorite-is-full" }) + else + HotbarController.add_last_elem(recipe) + + favorite:insert(recipe, slot) + HotbarController.open() + end + end +end + +function HotbarController.update_recipes(check_array) + local recipe = get_all_recipes() + + local indx = 1 + while check_array:size() >= indx do + local elem = check_array:get(indx) + + if recipe[elem.recipe_name] == nil then + check_array:remove(indx) + else + indx = indx + 1 + end + end +end + +function HotbarController.get_last_usage_list() + local array = last_usage:get_array( ) + last_tmp:clear() + + for i,j in pairs(array) do + if last_tmp:get_elem_pos(j) == nil then + last_tmp:insert_tail(j) + end + end + + return last_tmp:get_array() +end + +function HotbarController.remove_same_recipe_without_first(in_array) + local array = in_array:get_array( ) + last_tmp:clear() + local first = true + + for i,j in pairs(array) do + if first then + first = false + else + if last_tmp:get_elem_pos(j) == nil then + last_tmp:insert_tail(j) + else + end + end + end + last_tmp:insert_head(array[1]) + + in_array:clear() + + array = last_tmp:get_array() + for i,j in pairs(array) do + in_array:insert_tail(j) + end +end + +function HotbarController.add_last_elem(recipe) + last_usage:insert_head(recipe) + + if last_usage_size < last_usage:size() then + last_usage:remove(last_usage_size + 1) + end + + HotbarController.remove_same_recipe_without_first(last_usage) + HotbarController.open() +end + +function HotbarController.replace_last_elem(recipe) + if last_usage:get(1) then + last_usage:remove(1) + end + + HotbarController.add_last_elem(recipe) +end + +----------------------------------- evenets ----------------------------------- + +function HotbarController.change_recipe_visibility(event) + local setting = "show-extended-hotbar" + local val = not Settings.get_val(setting) + Settings.set_val(setting, val) + + HotbarController.open() +end + +function HotbarController.change_hotbar_visibility(event) + HotbarController.open() +end + +function HotbarController.favorite_recipe_click_event(event, arg, args) + if event.alt == true then + local rec_con = Controller.get_cont("recipe") + local page = rec_con.get_page_name_for_recipe(args[4], args[5], args[6], args[7]) + local recipe = rec_con.get_recipe_stucture(args[5], args[6], args[4], page.name) + + HotbarController.change_favorite_recipe_state(recipe) + else + Controller.get_cont("recipe").add_element_in_recipe_list(args[4], args[5], args[6], args[7]) + Controller.open_event("recipe") + end +end + +function HotbarController.last_recipe_click_event(event, arg, args) + Controller.get_cont("recipe").add_element_in_recipe_list(args[4], args[5], args[6], args[7]) + Controller.open_event("recipe") +end + +function HotbarController.favorite_empty_button_click_event(event) + if Controller.get_cur_con() == nil then + Controller.open_event("main") + end +end + +function HotbarController.last_empty_button_click_event(event) + if Controller.get_cur_con() == nil then + Controller.open_event("main") + end +end + +return HotbarController \ No newline at end of file diff --git a/FNEI/scripts/hotbar/gui.lua b/FNEI/scripts/hotbar/gui.lua new file mode 100644 index 00000000..39742fe3 --- /dev/null +++ b/FNEI/scripts/hotbar/gui.lua @@ -0,0 +1,176 @@ +local HotbarGui = { + classname = "FNHotbarGui", + name = "hotbar", +} + +local hotbar_gui_template +local hotbar_flow_name = "fnei_hotbar_flow" + +function HotbarGui.init_template() + local cont = Controller.get_cont(HotbarGui.name) + + hotbar_gui_template = { + { type = "table", name = "hotbar-main-table", style = "fnei_hotbar_zero_spacing_table", column_count = 1, children = { + { type = "frame", name = "frame", style = "fnei_hotbar_frame", children = { + { type = "sprite-button", name = "fnei-button", style = "fnei_hotbar_label_button", caption = "FNEI", event = Controller.main_key_event}, + }}, + { type = "table", name = "hot-icon-table", style = "fnei_hotbar_zero_spacing_table", column_count = 1 }, + }}, + } + +end + +function HotbarGui.init_events() + HotbarGui.init_template() + Events.init_temp_events(HotbarGui.name, hotbar_gui_template) +end + +function HotbarGui.is_gui_open() + local val = Gui.get_gui(Gui.get_left_gui(), hotbar_gui_template[1].name) + + if val and next(val) and val.valid then + return true + else + return false + end +end + +function HotbarGui.create_hotbar_element_button(prot, type) + if prot and prot.recipe_name then + + if string.match(prot.recipe_name, 'impostor') then + local ps,pos = string.find(prot.recipe_name, "impostor[-]minable:") + + if not pos then + _,pos = string.find(prot.recipe_name, "impostor[-]pumped:") + end + + local entity_name = string.sub(prot.recipe_name, (pos or -1) + 1) or "" + + local tooltip + + if type == "favorite" then + tooltip = {"", {"fnei.tooltip-recipe"}, ":\n", game.entity_prototypes[entity_name].localised_name, "\n", {"fnei.alt-to-remove"} } + else + tooltip = {"", {"fnei.tooltip-recipe"}, ":\n", game.entity_prototypes[entity_name].localised_name } + end + + sprite = "entity/" .. entity_name + + return { + type = "sprite-button", + name = "r" .. type .. "\t" .. prot.action_type .. "\t" .. prot.type .. "\t" .. prot.name .. "\t" .. prot.recipe_name, + style = "fnei_hotbar_block_button", + tooltip = tooltip, + sprite = sprite + } + end + + return { + type = "choose-elem-button", + name = "r" .. type .. "\t" .. prot.action_type .. "\t" .. prot.type .. "\t" .. prot.name .. "\t" .. prot.recipe_name, + style = "fnei_default_button", + elem_type = "recipe", + elem_value = prot.recipe_name, + locked = true + -- type = "sprite-button", + -- name = "r" .. type .. "\t" .. prot.action_type .. "\t" .. prot.type .. "\t" .. prot.name .. "\t" .. prot.recipe_name, + -- style = "fnei_hotbar_block_button", + -- tooltip = tooltip, + -- sprite = sprite + } + end + + if type == "favorite" then + return { type = "sprite-button", name = type .. "\tempty", style = "fnei_hotbar_block_button", tooltip = {"", {"fnei.fav_button"}, "\n", {"fnei.alt-to-remove"}}, sprite = "fnei_favorite_icon" } + else -- type == "last-usage" + return { type = "sprite-button", name = type .. "\tempty", style = "fnei_hotbar_block_button", tooltip = {"fnei.last_button"}, sprite = "fnei_last_usage_icon" } + end +end + +function HotbarGui.draw_hotbar_bar_extension(last_arr, fav_arr) + local last_line_cnt = Settings.get_val("hotbar-last-line-num") + local fav_line_cnt = Settings.get_val("hotbar-fav-line-num") + local parent = Gui.get_gui(Gui.get_left_gui(), "hot-icon-table") + local columns_number = 2 + + if last_line_cnt == 0 and fav_line_cnt == 0 then + return + end + + local template = {} + + if Settings.get_val("show-extended-hotbar") then + if last_line_cnt > 0 then + local last_frame = {} + local last_label = { type = "label", name = "last-usage-button", style = "fnei_hotbar_label", single_line = true, caption = {"fnei.last_button"} } + + for j = 1, last_line_cnt do + for i = 1, columns_number do + local cur_indx = (j - 1) * columns_number + i + + table.insert(last_frame, HotbarGui.create_hotbar_element_button(last_arr[cur_indx], "last-usage")) + end + end + + table.insert(template, + { + type = "frame", name = "hotbar_last_frame", style = "fnei_hotbar_frame", direction = "vertical", children = { + { type = "table", name = "hoticon-table", style = "fnei_hotbar_zero_spacing_table", column_count = 1, children = { + last_label, + { type = "table", name = "hoticon-table", style = "fnei_hotbar_zero_spacing_table", column_count = 2, children = last_frame }, + }}, + } + }) + end + + if fav_line_cnt > 0 then + local fav_frame = {} + local fav_label = { type = "label", name = "favorite-button", style = "fnei_hotbar_label", single_line = true, caption = {"", {"fnei.fav_button"}, "\n", {"fnei.alt-to-remove"}} } + + for j = 1, fav_line_cnt do + for i = 1, columns_number do + local cur_indx = (j - 1) * columns_number + i + + table.insert(fav_frame, HotbarGui.create_hotbar_element_button(fav_arr[cur_indx], "favorite")) + end + end + + table.insert(template, + { + type = "frame", name = "hotbar_fav_frame", style = "fnei_hotbar_frame", direction = "vertical", children = { + { type = "table", name = "hoticon-table", style = "fnei_hotbar_zero_spacing_table", column_count = 1, children = { + fav_label, + { type = "table", name = "hoticon-table2", style = "fnei_hotbar_zero_spacing_table", column_count = 2, children = fav_frame }, + }}, + } + }) + end + + table.insert(template, { type = "button", name = "hide-button", style = "fnei_hotbar_up_arrow", }) + else + table.insert(template, { type = "button", name = "hide-button", style = "fnei_hotbar_down_arrow", }) + end + + Gui.add_gui_template(parent, template) +end + +function HotbarGui.open_window() + HotbarGui.close_window() + + local gui = Gui.get_left_gui() + + if not gui[hotbar_flow_name] then + gui.add({ type = "flow", name = hotbar_flow_name, style = nil, direction = "vertical" }) + end + + return Gui.add_gui_template(gui[hotbar_flow_name], hotbar_gui_template) +end + +function HotbarGui.close_window() + if HotbarGui.is_gui_open() then + Gui.get_gui(Gui.get_left_gui(), hotbar_gui_template[1].name).destroy() + end +end + +return HotbarGui \ No newline at end of file diff --git a/FNEI/scripts/main/controller.lua b/FNEI/scripts/main/controller.lua new file mode 100644 index 00000000..3578b02f --- /dev/null +++ b/FNEI/scripts/main/controller.lua @@ -0,0 +1,73 @@ +local MainController = { + classname = "FNMainController", +} + +local MainGui = require "scripts/main/gui" +local tabs = "main-tabs" + +local gui_tabs_cont = {} +gui_tabs_cont["default-search"] = require "scripts/main/controllers/default" +gui_tabs_cont["fnei-search"] = require "scripts/main/controllers/fnei" +--gui_tabs_cont["category-search"] = require "scripts/main/controllers/category" + +function MainController.init_events() + local tab_list = {} + + for tb_name,_ in pairs(gui_tabs_cont) do + table.insert(tab_list, tb_name) + end + + tabs = Tabs:new(tabs, MainGui.name, tab_list, "fnei_main_selected-tab", "fnei_main_empty-tab", MainController.change_tab) + MainGui.init_events(gui_tabs_cont) +end + +function MainController.exit() + out("Main exit") + MainGui.close_window() +end + +function MainController.open() + out("Main open") + + local gui = MainGui.open_window() + MainGui.draw_tabs(tabs) + MainController.draw_tab() + + return gui +end + +function MainController.back_key() + return true +end + +function MainController.can_open_gui() + return true +end + +function MainController.get_name() + return MainGui.name +end + +function MainController.is_gui_open() + return MainGui.is_gui_open() +end + +function MainController.get_cur_contr_tab() + return gui_tabs_cont[tabs:get_cur_tab()] +end + +function MainController.get_cur_gui_tab() + return MainGui.get_cur_gui_tab(tabs:get_cur_tab()) +end + +function MainController.draw_tab() + MainGui.draw_search_tab(tabs:get_cur_tab()) + gui_tabs_cont[tabs:get_cur_tab()].draw_content() +end + + +function MainController.change_tab(event, name) + MainController.draw_tab() +end + +return MainController \ No newline at end of file diff --git a/FNEI/scripts/main/controllers/category.lua b/FNEI/scripts/main/controllers/category.lua new file mode 100644 index 00000000..f0418be3 --- /dev/null +++ b/FNEI/scripts/main/controllers/category.lua @@ -0,0 +1,15 @@ +local CategoryMainController = { + classname = "FNCategoryMainController", +} + +local cont_gui + +function CategoryMainController.init_event(gui_name, content_gui) + cont_gui = content_gui +end + +function CategoryMainController.draw_content() + +end + +return CategoryMainController \ No newline at end of file diff --git a/FNEI/scripts/main/controllers/default.lua b/FNEI/scripts/main/controllers/default.lua new file mode 100644 index 00000000..c988a62f --- /dev/null +++ b/FNEI/scripts/main/controllers/default.lua @@ -0,0 +1,126 @@ +local DefaultMainController = { + classname = "FNDefaultMainController", +} + +local cont_gui + +function DefaultMainController.init_event(gui_name, content_gui) + cont_gui = content_gui +end + +function DefaultMainController.draw_content() + cont_gui.set_choose_but_val() + DefaultMainController.set_checkbox_val() +end + +function DefaultMainController.set_item(event, name) + if not event.button then + Player.get_global().main_choose_button_item = event.element.elem_value + + if Settings.get_val("item-auto-craft") then + DefaultMainController.open_craft_item(event) + elseif Settings.get_val("item-auto-usage") then + DefaultMainController.open_usage_item(event) + end + end +end + +function DefaultMainController.set_fluid(event, name) + if not event.button then + Player.get_global().main_choose_button_fluid = event.element.elem_value + + if Settings.get_val("fluid-auto-craft") then + DefaultMainController.open_craft_fluid(event) + elseif Settings.get_val("fluid-auto-usage") then + DefaultMainController.open_craft_fluid(event) + end + end +end + +function DefaultMainController.get_item() + return Player.get_global().main_choose_button_item +end + +function DefaultMainController.get_fluid() + return Player.get_global().main_choose_button_fluid +end + + +function DefaultMainController.open_craft_item(event) + local choose_but = Gui.get_gui(Gui.get_pos(), "choose-item") + local contr = Controller.get_cont("recipe") + + if choose_but and choose_but.elem_value then + contr.add_element_in_recipe_list("craft", "item", choose_but.elem_value) + Controller.open_event("recipe") + end +end + +function DefaultMainController.open_usage_item(event) + local choose_but = Gui.get_gui(Gui.get_pos(), "choose-item") + local contr = Controller.get_cont("recipe") + + if choose_but and choose_but.elem_value then + contr.add_element_in_recipe_list("usage", "item", choose_but.elem_value) + Controller.open_event("recipe") + end +end + +function DefaultMainController.open_craft_fluid(event) + local choose_but = Gui.get_gui(Gui.get_pos(), "choose-fluid") + local contr = Controller.get_cont("recipe") + + if choose_but and choose_but.elem_value then + contr.add_element_in_recipe_list("craft", "fluid", choose_but.elem_value) + Controller.open_event("recipe") + end +end + +function DefaultMainController.open_usage_fluid(event) + local choose_but = Gui.get_gui(Gui.get_pos(), "choose-fluid") + local contr = Controller.get_cont("recipe") + + if choose_but and choose_but.elem_value then + contr.add_element_in_recipe_list("usage", "fluid", choose_but.elem_value) + Controller.open_event("recipe") + end +end + +function DefaultMainController.set_checkbox_val() + cont_gui.set_checkbox_val( Settings.get_val("item-auto-craft"), + Settings.get_val("item-auto-usage"), + Settings.get_val("fluid-auto-craft"), + Settings.get_val("fluid-auto-usage")) +end + +function DefaultMainController.item_craft_checkbox_event(event) + DefaultMainController.set_action("item-auto-craft", "item-auto-usage", event and event.element.state) + DefaultMainController.set_checkbox_val() +end + +function DefaultMainController.item_usage_checkbox_event(event) + DefaultMainController.set_action("item-auto-usage", "item-auto-craft", event and event.element.state) + DefaultMainController.set_checkbox_val() +end + +function DefaultMainController.fluid_craft_checkbox_event(event) + DefaultMainController.set_action("fluid-auto-craft", "fluid-auto-usage", event and event.element.state) + DefaultMainController.set_checkbox_val() +end + +function DefaultMainController.fluid_usage_checkbox_event(event) + DefaultMainController.set_action("fluid-auto-usage", "fluid-auto-craft", event and event.element.state) + DefaultMainController.set_checkbox_val() +end + +function DefaultMainController.set_action(src_set_name, sup_set_name, elem_val) + local sup_val = Settings.get_val(sup_set_name) + + if elem_val and sup_val then + Settings.set_val(sup_set_name, false) + end + + Settings.set_val(src_set_name, elem_val) +end + +return DefaultMainController \ No newline at end of file diff --git a/FNEI/scripts/main/controllers/fnei.lua b/FNEI/scripts/main/controllers/fnei.lua new file mode 100644 index 00000000..27750634 --- /dev/null +++ b/FNEI/scripts/main/controllers/fnei.lua @@ -0,0 +1,117 @@ +local FneiMainController = { + classname = "FNFneiMainController", +} + +local translate = require 'utils/translate' + +local pages = "main-pages" +local cont_gui + +function FneiMainController.init_event(gui_name, content_gui) + pages = Page:new(pages, gui_name, 12, FneiMainController.redraw_content, FneiMainController.redraw_content) + cont_gui = content_gui + + Events.add_custom_event(gui_name, "choose-elem-button", "fluid", FneiMainController.open_fluid_recipe_event) + Events.add_custom_event(gui_name, "choose-elem-button", "item", FneiMainController.open_item_recipe_event) +end + +function FneiMainController.draw_content() + cont_gui.set_search_field(FneiMainController.get_search_field()) + FneiMainController.redraw_content() +end + +function FneiMainController.redraw_content() + FneiMainController.set_page_list() + cont_gui.draw_page_label(pages) + cont_gui.draw_item_list(pages:get_list_for_tab(pages:get_cur_page())) + if Settings.get_val("focus-search") then + cont_gui.focus_on_search() + end +end + +function FneiMainController.set_page_list() + local search_text = FneiMainController.get_search_field():gsub(" ", "-"):gsub("%p", "%%%0"):lower() + local page_list = {} + + local items = get_item_list() + local fluids = get_fluid_list() + + for _, item in pairs(items) do + local term = translate(item.name, "item") or item.name + + if string.find(term:lower(), search_text) then + table.insert(page_list, "item\t" .. item.name) + end + end + + for _, fluid in pairs(fluids) do + local term = translate(fluid.name, "fluid") or fluid.name + + if string.find(term:lower(), search_text) then + table.insert(page_list, "fluid\t" .. fluid.name) + end + end + + pages.num_per_page = 12 * Settings.get_val("fnei-line-count") + pages:set_page_list(page_list) +end + +function FneiMainController.search_event(event) + if event.text then + FneiMainController.set_search_field(event.text) + FneiMainController.redraw_content() + elseif event.button == defines.mouse_button_type.right then + FneiMainController.set_search_field("") + FneiMainController.draw_content() + end +end + +function FneiMainController.set_search_field(str) + Player.get_global().fnei_search = str +end + +function FneiMainController.get_search_field() + return Player.get_global().fnei_search or "" +end + +function FneiMainController.open_item_recipe_event(event, elem_name) + if elem_name == "item" then + local _,pos = string.find(event.element.name, "item\t") + + if pos then + elem_name = string.sub(event.element.name, pos + 1) + end + + local contr = Controller.get_cont("recipe") + + if event.button == defines.mouse_button_type.right then + contr.add_element_in_recipe_list("usage", "item", elem_name) + Controller.open_event("recipe") + else + contr.add_element_in_recipe_list("craft", "item", elem_name) + Controller.open_event("recipe") + end + end +end + +function FneiMainController.open_fluid_recipe_event(event, elem_name) + if elem_name == "fluid" then + local _,pos = string.find(event.element.name, "fluid\t") + + if pos then + elem_name = string.sub(event.element.name, pos + 1) + end + + local contr = Controller.get_cont("recipe") + + if event.button == defines.mouse_button_type.right then + contr.add_element_in_recipe_list("usage", "fluid", elem_name) + Controller.open_event("recipe") + else + contr.add_element_in_recipe_list("craft", "fluid", elem_name) + Controller.open_event("recipe") + end + end +end + +return FneiMainController \ No newline at end of file diff --git a/FNEI/scripts/main/gui.lua b/FNEI/scripts/main/gui.lua new file mode 100644 index 00000000..f4498b4e --- /dev/null +++ b/FNEI/scripts/main/gui.lua @@ -0,0 +1,124 @@ +local MainGui = { + classname = "FNMainGui", + name = "main", +} + +local gui_tabs = {} +gui_tabs["default-search"] = require "scripts/main/gui/default" +gui_tabs["fnei-search"] = require "scripts/main/gui/fnei" +--gui_tabs["category-search"] = require "scripts/main/gui/category" + +local main_gui_template +local content_flow_name = "content-flow" +local tab_flow_name = "main-tabs" + +function MainGui.init_template() + main_gui_template = { + { type = "frame", name = "main-frame", style = "fnei_main_frame", children = { + { type = "table", name = "main-table", style = "fnei_main_table", column_count = 1, children = { + +------------------ header ------------------ + + { type = "frame", name = "header-frame", style = "fnei_main_content-frame", direction = "horizontal", children = { + { type = "table", name = "header-table", style = "fnei_main_header-table", column_count = 5, children = { + { type = "label", name = "header-label", style = "fnei_main_header-label", caption = {"fnei.FNEI"} }, + { type = "empty-widget", name = "widget-sprite" , style = "fnei_main_header-sprite-widget", caption = {"fnei.FNEI"} }, + { type = "empty-widget", name = "drag-widget", style = "fnei_main_header-drag-widget", caption = {"fnei.FNEI"}, drag_target = true}, + { type = "sprite-button", name = "settings-key", style = "fnei_settings_button_style", tooltip = {"gui-menu.settings"}, event = MainGui.settings_key_event }, + { type = "sprite-button", name = "exit-key", style = "fnei_exit_button_style", tooltip = {"gui.exit"}, event = Controller.main_key_event }, + }} + }}, + +------------------ tabs ------------------ + + { type = "flow", name = tab_flow_name }, + +------------------ content ------------------- + + { type = "flow", name = content_flow_name }, + + }} + }} + } +end + +function MainGui.init_events(gui_tabs_cont_list) + MainGui.init_template() + Events.init_temp_events(MainGui.name, main_gui_template) + + for gui_name,gui in pairs(gui_tabs) do + local contr = gui_tabs_cont_list[gui_name] + + if not contr then + Debug:error("Error in function MainGui.init_events: controller ", gui_name, "not found") + end + + gui.init_events(MainGui.name, contr) + contr.init_event(MainGui.name, gui_tabs[gui_name]) + end +end + +function MainGui.get_cur_gui_tab(tab_name) + return gui_tabs[tab_name] +end + +function MainGui.is_gui_open() + local val = Gui.get_gui(Gui.get_pos(), main_gui_template[1].name) + if val and next(val) and val.valid then + return true + else + return false + end +end + +function MainGui.close_window() + if MainGui.is_gui_open() then + local gui = Gui.get_gui(Gui.get_pos(), main_gui_template[1].name) + Gui.set_location(gui.location) + gui.destroy() + end +end + +function MainGui.draw_tabs(tabs) + tabs:draw_tabs() +end + +function MainGui.open_window() + MainGui.close_window() + gui = Gui.add_gui_template(Gui.get_pos(), main_gui_template) + gui.location = Gui.get_location() + return gui +end + +function MainGui.draw_search_tab(cur_tab) + local parent = Gui.get_gui(Gui.get_pos(), content_flow_name) + + for _, gui in pairs(parent.children) do + if gui and gui.valid then + gui.destroy() + end + end + + if parent and gui_tabs[cur_tab] then + gui_tabs[cur_tab].draw_template(parent) + else + Debug:error("Error in function MainGui.draw_factorio_search_tab(): gui == nil") + end +end + +function MainGui.settings_key_event(event) + Controller.open_event("settings") +end + +function MainGui.search_event(event) + out(event) +end + +return MainGui + +-- local buttons = ui.add({type = "flow", name = "fnei_page_line", direction = "horizontal"}) + +-- buttons.add({type = "sprite-button", name = "fnei_prev_main_page", style = "fnei_left_arrow_button_style"}) +-- buttons.add({type = "label", name = "fnei_page_number", caption = "empty_main_page"}) +-- buttons.add({type = "sprite-button", name = "fnei_next_main_page", style = "fnei_right_arrow_button_style"}) +-- ui.add({type = "flow", name = "fnei_element_list", direction = "horizontal"}) \ No newline at end of file diff --git a/FNEI/scripts/main/gui/category.lua b/FNEI/scripts/main/gui/category.lua new file mode 100644 index 00000000..50cdf470 --- /dev/null +++ b/FNEI/scripts/main/gui/category.lua @@ -0,0 +1,31 @@ +local CategoryMainGui = { + classname = "FNFneiGui", +} + +local category_search_tab + +function CategoryMainGui.init_template(contr) + --local contr = Controller.get_cont("main") + + category_search_tab = { + { type = "flow", name = "cont-flow", direction = "vertical", children = { + + }} + } +end + +function CategoryMainGui.init_events(gui_name, contr) + CategoryMainGui.init_template(contr) + Events.init_temp_events(gui_name, category_search_tab) +end + +function CategoryMainGui.draw_template(parent) + Gui.add_gui_template(parent, category_search_tab) + +end + +function CategoryMainGui.event(event, name) + +end + +return CategoryMainGui \ No newline at end of file diff --git a/FNEI/scripts/main/gui/default.lua b/FNEI/scripts/main/gui/default.lua new file mode 100644 index 00000000..a44df37e --- /dev/null +++ b/FNEI/scripts/main/gui/default.lua @@ -0,0 +1,76 @@ +local DefaultMainGui = { + classname = "FNDefaultMainGui", +} + +local default_search_tab + +function DefaultMainGui.init_template(contr) + default_search_tab = { + { type = "frame", name = "content-frame", style = "fnei_main_content-frame", direction = "vertical", children = { + { type = "label", name = "default-tab-desription", style = "fnei_main_tab-description-label", caption = {"fnei.default-tab-desription"} }, + { type = "table", name = "content-tabel", style = "fnei_main_header-table", column_count = 2, children = { + { type = "flow", name = "item-flow", style = "fnei_main_default_element_flow", direction = "vertical", children = { + { type = "label", name = "choose-item-label", style = "fnei_main_default_prot_label", caption = {"fnei.choose-item"} }, + { type = "flow", name = "item-flow-content", style = "fnei_main_default_selection_flow", direction = "horizontal", children = { + { type = "flow", name = "item-choose-elem-flow", style = "fnei_main_default_choose_flow", direction = "horizontal", children = { + { type = "choose-elem-button", name = "choose-item", style = "fnei_main_default_search_slot_button", elem_type = "item", elem_value = "wooden-chest", event = contr.set_item } + }}, + { type = "table", name = "item-content-tabel", style = "fnei_main_default_content_table", column_count = 2, children = { + { type = "checkbox", name = "item-checkbox-craft", style = nil, state = false, tooltip = {"fnei.item-auto-craft"}, event = contr.item_craft_checkbox_event}, + { type = "button", name = "item-craft", style = "fnei_main_default_button", caption = {"fnei.recipe"}, event = contr.open_craft_item}, + { type = "checkbox", name = "item-checkbox-usage", style = nil, state = false, tooltip = {"fnei.item-auto-usage"}, event = contr.item_usage_checkbox_event}, + { type = "button", name = "item-usage", style = "fnei_main_default_button", caption = {"fnei.usage"}, event = contr.open_usage_item }, + }} + }} + }}, + { type = "flow", name = "fluid-flow", style = "fnei_main_default_element_flow", direction = "vertical", children = { + { type = "label", name = "choose-fluid-label", style = "fnei_main_default_prot_label", caption = {"fnei.choose-fluid"} }, + { type = "flow", name = "fluid-flow-content", style = "fnei_main_default_selection_flow", direction = "horizontal", children = { + { type = "flow", name = "fluid-choose-elem-flow", style = "fnei_main_default_choose_flow", direction = "horizontal", children = { + { type = "choose-elem-button", name = "choose-fluid", style = "fnei_main_default_search_slot_button", elem_type = "fluid", elem_value = "water", event = contr.set_fluid } + }}, + { type = "table", name = "fluid-content-tabel", style = "fnei_main_default_content_table", column_count = 2, children = { + { type = "checkbox", name = "fluid-checkbox-craft", style = nil, state = false, tooltip = {"fnei.fluid-auto-craft"}, event = contr.fluid_craft_checkbox_event}, + { type = "button", name = "fluid-craft", style = "fnei_main_default_button", caption = {"fnei.recipe"}, event = contr.open_craft_fluid}, + { type = "checkbox", name = "fluid-checkbox-usage", style = nil, state = false, tooltip = {"fnei.fluid-auto-usage"}, event = contr.fluid_usage_checkbox_event}, + { type = "button", name = "fluid-usage", style = "fnei_main_default_button", caption = {"fnei.usage"}, event = contr.open_usage_fluid }, + }} + }} + }} + }} + }} + } +end + +function DefaultMainGui.init_events(gui_name, contr) + DefaultMainGui.init_template(contr) + Events.init_temp_events(gui_name, default_search_tab) +end + +function DefaultMainGui.draw_template(parent) + Gui.add_gui_template(parent, default_search_tab) +end + +function DefaultMainGui.set_checkbox_val(chb1, chb2, chb3, chb4) + local checkbox = Gui.get_gui(Gui.get_pos(), "item-checkbox-craft") or {} + checkbox.state = chb1 + + local checkbox = Gui.get_gui(Gui.get_pos(), "item-checkbox-usage") or {} + checkbox.state = chb2 + + local checkbox = Gui.get_gui(Gui.get_pos(), "fluid-checkbox-craft") or {} + checkbox.state = chb3 + + local checkbox = Gui.get_gui(Gui.get_pos(), "fluid-checkbox-usage") or {} + checkbox.state = chb4 +end + +function DefaultMainGui.set_choose_but_val() + local contr = Controller.get_cont("main").get_cur_contr_tab() + if contr then + Gui.set_choose_but_val(Gui.get_gui(Gui.get_pos(), "choose-item"), contr.get_item() or "wooden-chest") + Gui.set_choose_but_val(Gui.get_gui(Gui.get_pos(), "choose-fluid"), contr.get_fluid() or "water") + end +end + +return DefaultMainGui \ No newline at end of file diff --git a/FNEI/scripts/main/gui/fnei.lua b/FNEI/scripts/main/gui/fnei.lua new file mode 100644 index 00000000..b71750c3 --- /dev/null +++ b/FNEI/scripts/main/gui/fnei.lua @@ -0,0 +1,97 @@ +local FneiMainGui = { + classname = "FNFneiMainGui", +} + +local fnei_search_tab +local search_field_name = "search-field" + +function FneiMainGui.init_template(contr) + --local contr = Controller.get_cont("main") + + fnei_search_tab = { + { type = "frame", name = "content-frame", style = "fnei_main_content-frame", direction = "vertical", children = { + { type = "label", name = "description-label", style = "fnei_main_tab-description-label", caption = {"fnei.fnei-tab-description"} }, + { type = "flow", name = "search-flow", style = "fnei_main_content_flow", direction = "horizontal", children = { + { type = "label", name = "header-label", style = "fnei_main_default_search_label", caption = {"", {"gui.search"}, " :"} }, + { type = "textfield", name = search_field_name, style = "fnei_main_search_field", event = contr.search_event }, + }}, + { type = "flow", name = "paging-flow", style = "fnei_main_content_flow", direction = "horizontal", children = { + { type = "flow", name = "back-tab-flow", style = "fnei_main_content_flow" }, + { type = "label", name = "page-label", style = "fnei_main_page_label", caption = "" }, + { type = "flow", name = "forward-tab-flow", style = "fnei_main_content_flow" }, + }}, + { type = "table", name = "data-table", style = "fnei_main_fnei_content_table", column_count = 12 } + }} + } +end + +function FneiMainGui.init_events(gui_name, contr) + FneiMainGui.init_template(contr) + Events.init_temp_events(gui_name, fnei_search_tab) +end + +function FneiMainGui.draw_template(parent) + Gui.add_gui_template(parent, fnei_search_tab) +end + +function FneiMainGui.focus_on_search(parent) + local cur_tab = Gui.get_gui(Gui.get_pos(), search_field_name) + + if cur_tab and cur_tab.valid then + cur_tab.focus() + end +end + + +function FneiMainGui.set_search_field(search_text) + local textfield = Gui.get_gui(Gui.get_pos(), "search-field") + + if textfield then + textfield.text = search_text + end +end + +function FneiMainGui.draw_page_label(page) + local cur_tab = Gui.get_gui(Gui.get_pos(), "content-frame") + + page:draw_forward_arrow( Gui.get_gui(cur_tab, "forward-tab-flow") ) + page:draw_back_arrow( Gui.get_gui(cur_tab, "back-tab-flow") ) + + local label = Gui.get_gui(cur_tab, "page-label") + local amnt = page:amount_page() + if amnt == 0 then amnt = 1 end + label.caption = {"", {"fnei.page"}, ": " .. page:get_cur_page() .. "/".. amnt} +end + +function FneiMainGui.draw_item_list(data_list) + local gui_tabel = Gui.get_gui(Gui.get_pos(), "data-table") + + clear_gui(gui_tabel) + + local contr = Controller.get_cont("main").get_cur_contr_tab() + local items = get_full_item_list() + local fluids = get_full_fluid_list() + + for _,prot in pairs(data_list) do + local style = "fnei_main_grey_slot_button" + + if string.match(prot, "item\t") then + local item_name = string.sub(prot, 6) + if items and items[item_name] and items[item_name].has_flag("hidden") then + style = "fnei_main_red_slot_button" + end + + Gui.add_choose_button(gui_tabel, { type = "choose-elem-button", name = prot, elem_type = "item", style = style, elem_value = item_name, locked = true }) + elseif string.match(prot, "fluid\t") then + local fluid_name = string.sub(prot, 7) + if fluids and fluids[fluid_name] and fluids[fluid_name].hidden then + style = "fnei_main_red_slot_button" + end + + Gui.add_choose_button(gui_tabel, { type = "choose-elem-button", name = prot, elem_type = "fluid", style = style, elem_value = fluid_name, locked = true }) + end + end +end + + +return FneiMainGui \ No newline at end of file diff --git a/FNEI/scripts/player.lua b/FNEI/scripts/player.lua new file mode 100644 index 00000000..8a1d024c --- /dev/null +++ b/FNEI/scripts/player.lua @@ -0,0 +1,54 @@ +Player = { + classname = "FNPlayer" +} + +local cur_player = nil; +local cur_tick = 0 + +function Player.set(player) + cur_player = player + return Player +end + +function Player.load(event) + cur_player = game.players[event.player_index] + cur_tick = event.tick + return Player +end + +function Player.get() + return cur_player +end + +function Player.get_tick() + return cur_tick +end + +function Player.print(val) + if cur_player then + cur_player.print(val) + end +end + +function Player.get_global() + if not global.fnei[cur_player.name] then global.fnei[cur_player.name] = {} end + return global.fnei[cur_player.name] +end + +function Player.get_fglobal() + if cur_player.force then + local name = cur_player.force.name .. "_force" + if not global.fnei[name] then global.fnei[name] = {} end + return global.fnei[name] + else + Debug:error("Error in function Player.get_fglobal: force not found") + end +end + +function Player.isAdmin() + if cur_player == nil then + Debug:error("Error in function Player.isAdmin: Lua_player == nil") + return false + end + return cur_player.admin +end \ No newline at end of file diff --git a/FNEI/scripts/recipe/controller.lua b/FNEI/scripts/recipe/controller.lua new file mode 100644 index 00000000..ac4c6381 --- /dev/null +++ b/FNEI/scripts/recipe/controller.lua @@ -0,0 +1,447 @@ +local RecipeController = { + classname = "FNRecipeController" +} + +local RecipeGui = require "scripts/recipe/gui" +local r_list = List:new("recipe_queue") +local pages = "recipe-pages" + +function RecipeController.init_events() + pages = Page:new(pages, RecipeController.get_name(), 1, RecipeController.change_page_event, RecipeController.change_page_event) + RecipeGui.init_events() + + Events.add_custom_event(RecipeGui.name, "choose-elem-button", "fluid", RecipeController.open_fluid_recipe_event) + Events.add_custom_event(RecipeGui.name, "choose-elem-button", "item", RecipeController.open_item_recipe_event) + Events.add_custom_event(RecipeGui.name, "sprite-button", "tech", RecipeController.open_tech_event) +end + +function RecipeController.exit() + out("Recipe exit") + RecipeGui.close_window() +end + +function RecipeController.open() + out("Recipe open") + + local gui = RecipeGui.open_window() + RecipeController.open_new_recipes() + + return gui +end + +function RecipeController.back_key() + r_list:remove() + + if RecipeController.can_open_gui() then + RecipeController.open_new_recipes() + end + + return r_list:is_empty() +end + +function RecipeController.can_open_gui() + return not r_list:is_empty() +end + +function RecipeController.get_name() + return RecipeGui.name +end + +function RecipeController.is_gui_open() + return RecipeGui.is_gui_open() +end + +----------------------------------- gui --------------------------------------- + +function RecipeController.open_new_recipes() + RecipeController.set_page_list() + + if pages:amount_page() == 0 then + if RecipeController.can_open_gui() then + r_list:remove() + RecipeController.open_new_recipes() + else + Controller.back_key_event() + end + return + end + + RecipeController.change_page_event() +end + +function RecipeController.draw_recipe() + local recipe = pages:get_list_for_tab(pages:get_cur_page()) + + if recipe and recipe[1] then + recipe = recipe[1] + else + return + end + + RecipeGui.set_recipe_name(recipe) + RecipeGui.set_recipe_icon(recipe) + + local prot_dif = #recipe.ingredients + 1 - #recipe.products + RecipeGui.set_ingredients(recipe.ingredients, -prot_dif) + RecipeGui.set_products(recipe.products, prot_dif) + + RecipeGui.set_recipe_time(recipe.energy) + RecipeGui.set_made_in_list(recipe) + RecipeGui.set_techs(recipe) +end + +function RecipeController.draw_paging() + RecipeGui.draw_paging(pages) +end + +function RecipeController.set_crafting_type() + local cur_prot = r_list.get() or {} + RecipeGui.set_crafting_type(cur_prot.action_type) +end + +function RecipeController.draw_cur_prot() + local cur_prot = r_list.get() or {} + RecipeGui.draw_cur_prot(cur_prot.type, cur_prot.name) +end + +function RecipeController.get_recipe_stucture(prot_type, prot_name, action_type, saved_recipe_name) + return { + type = prot_type, + name = prot_name, + action_type = action_type, + recipe_name = saved_recipe_name + } +end + +function RecipeController.draw_favorite_button() + local elem = r_list:get() + + local recipe = {} + + if elem then + recipe = RecipeController.get_recipe_stucture(elem.type, elem.name, elem.action_type, elem.page.name) + end + + if RecipeController.is_gui_open() then + local state = Controller.get_cont("hotbar").get_favorite_recipe_state(recipe) + RecipeGui.draw_favorite_state(state) + end +end + +----------------------------------- recipe list --------------------------------------- + +function RecipeController.add_element_in_recipe_list(action_type, prot_type, prot_name, cur_page) + local cur_gui = Controller.get_cur_con() + + if cur_gui and (cur_gui.get_name() == RecipeGui.name or cur_gui.get_name() == "settings") then + RecipeController.add_element(action_type, prot_type, prot_name, cur_page) + else + RecipeController.add_element_in_new_recipe_list(action_type, prot_type, prot_name, cur_page) + end +end + +function RecipeController.add_element_in_new_recipe_list(action_type, prot_type, prot_name, cur_page) + r_list:clear() + local state = RecipeController.add_element(action_type, prot_type, prot_name, cur_page) + if state then + Controller.get_cont("hotbar").add_last_elem({ }) + end +end + +function RecipeController.add_element(action_type, prot_type, prot_name, cur_page) + local last_elem = r_list:get() + + if last_elem == nil or (prot_name ~= last_elem.name or prot_type ~= last_elem.type or action_type ~= last_elem.action_type) then + local recipe_list = RecipeController.get_recipe_list(action_type, prot_type, prot_name) + + if recipe_list and #recipe_list > 0 then + local page = RecipeController.get_page_name_for_recipe(action_type, prot_type, prot_name, cur_page) + r_list:add({ type = prot_type, name = prot_name, action_type = action_type, page = page }) + return true + end + else + last_elem.page = RecipeController.get_page_name_for_recipe(action_type, prot_type, prot_name, cur_page) + end +end + +function RecipeController.get_page_name_for_recipe(action_type, prot_type, prot_name, cur_page) + if cur_page then + local recipe = get_recipe_list()[cur_page] + + if recipe then + return recipe + end + end + + local global = Player.get_global() + + if not global.recipe_page then global.recipe_page = {} end + + if action_type and prot_type and prot_name then + local name = action_type .. prot_type .. prot_name + + return global.recipe_page[name] + else + Debug:error("Error in function RecipeController.get_page_name_for_recipe: nil value") + end +end + +function RecipeController.set_page_name_for_recipe(action_type, prot_type, prot_name, val) + local global = Player.get_global() + + if not global.recipe_page then global.recipe_page = {} end + + if action_type and prot_type and prot_name then + local name = action_type .. prot_type .. prot_name + + global.recipe_page[name] = val + else + Debug:error("Error in function RecipeController.set_page_name_for_recipe: nil value") + end +end + +function RecipeController.save_page() + local val = r_list:get() + + if val then + local list = pages:get_list_for_tab(pages:get_cur_page()) + + if list and list[1] then + RecipeController.set_page_name_for_recipe(val.action_type, val.type, val.name, list[1]) + val.page = list[1] + end + end +end + +function RecipeController.change_last_opened_recipe() + local elem = r_list:get() + local recipe = {} + + if elem then + recipe = RecipeController.get_recipe_stucture(elem.type, elem.name, elem.action_type, elem.page.name) + end + + Controller.get_cont("hotbar").replace_last_elem( recipe ) +end + +----------------------------------- paging --------------------------------------- + +function RecipeController.set_page_list() + local last_prot = r_list.get() + + if last_prot then + pages:set_page_list(RecipeController.get_recipe_list(last_prot.action_type, last_prot.type, last_prot.name)) + end + + RecipeController.set_cur_page() +end + +function RecipeController.set_cur_page() + local val = r_list.get() + + if val and val.page then + local end_val = pages:amount_page() + + for i = 1,end_val do + local recipe = pages:get_list_for_tab(i) + if recipe and recipe[1] == val.page then + pages:set_cur_page(i) + return + end + end + end + + pages:set_cur_page(1) +end + +-------------------------------- events ---------------------------------------- + +function RecipeController.open_item_recipe_event(event, elem_name) + if elem_name == "item" then + local _,pos = string.find(event.element.name, "item\t") + + if pos then + elem_name = string.sub(event.element.name, pos + 1) + end + + if event.button == defines.mouse_button_type.right then + RecipeController.add_element("usage", "item", elem_name) + RecipeController.open_new_recipes() + else + RecipeController.add_element("craft", "item", elem_name) + RecipeController.open_new_recipes() + end + end +end + +function RecipeController.open_fluid_recipe_event(event, elem_name) + if elem_name == "fluid" then + local _,pos = string.find(event.element.name, "fluid\t") + + if pos then + elem_name = string.sub(event.element.name, pos + 1) + end + + if event.button == defines.mouse_button_type.right then + RecipeController.add_element("usage", "fluid", elem_name) + RecipeController.open_new_recipes() + else + RecipeController.add_element("craft", "fluid", elem_name) + RecipeController.open_new_recipes() + end + end +end + +function RecipeController.open_tech_event(event, elem_name, split_names) + local tech_name = split_names[4] + + TechHook.save_cur_fnei_state() + Player.get().open_technology_gui(tech_name) +end + +function RecipeController.change_page_event() + RecipeController.draw_paging() + RecipeController.draw_recipe() + RecipeController.set_crafting_type() + RecipeController.draw_cur_prot() + RecipeController.save_page() + RecipeController.draw_favorite_button() + RecipeController.change_last_opened_recipe() +end + +function RecipeController.settings_key_event(event) + Controller.open_event("settings") +end + +function RecipeController.back_key_event(event) + if event.control or event.shift then + r_list:clear() + end + + Controller.back_key_event() +end + +local state = true + +function RecipeController.favorite_key_event(event) + local elem = r_list:get() + local recipe = {} + + if elem then + recipe = RecipeController.get_recipe_stucture(elem.type, elem.name, elem.action_type, elem.page.name) + end + + Controller.get_cont("hotbar").change_favorite_recipe_state( recipe ) + RecipeController.draw_favorite_button() +end + +-------------------------------- recipe list ---------------------------------------- + +function RecipeController.get_recipe_list(action_type, type, prot) + local recipe_list = {} + if action_type == "craft" then + recipe_list = RecipeController.get_caraft_recipe_list(prot, type) + elseif action_type == "usage" then + recipe_list = RecipeController.get_usage_recipe_list(prot, type) + else + Debug:error("Error in function RecipeController.get_recipe_list: unknown craft type: ", action_type, "") + end + + local rec_list = get_filtred_recipe_list(recipe_list) + rec_list = RecipeController.delete_equals_recipe(rec_list) + + return RecipeController.sort_recipe_list(rec_list) +end + +function RecipeController.delete_equals_recipe(list) + if not Settings.get_val("show-the-same-recipes") then + local ret_tb = {} + local eq_rec = get_equals_recipe_list() + + for name, recipe in pairs(list) do + if eq_rec[name] then + local flag = true + + for _, s_recipe in pairs(eq_rec[name]) do + if s_recipe.valid and ret_tb[s_recipe.name] then + flag = false + break + end + end + + if flag then + ret_tb[name] = recipe + end + else + ret_tb[name] = recipe + end + end + + return ret_tb + end + return list +end + +function RecipeController.sort_recipe_list(recipe_list) + local en_list = {} + local dis_list = {} + local hid_list = {} + + for _,recipe in pairs(recipe_list) do + if recipe.hidden then + table.insert(hid_list, recipe) + elseif recipe.enabled then + table.insert(en_list, recipe) + else + table.insert(dis_list, recipe) + end + end + + local ret_tb = {} + + for _,recipe in pairs(en_list) do + table.insert(ret_tb, recipe) + end + for _,recipe in pairs(dis_list) do + table.insert(ret_tb, recipe) + end + for _,recipe in pairs(hid_list) do + table.insert(ret_tb, recipe) + end + + return ret_tb +end + +function RecipeController.get_caraft_recipe_list(element, el_type) + local recipes = get_recipe_list() + local ret_tb = {} + + for _,recipe in pairs(recipes) do + for _,product in pairs(recipe.products) do + if product.name == element and product.type == el_type then + ret_tb[recipe.name] = recipe + end + end + end + + return ret_tb +end + +function RecipeController.get_usage_recipe_list(element, el_type) + local recipes = get_recipe_list() + local ret_tb = {} + + for _,recipe in pairs(recipes) do + for _,ingredient in pairs(recipe.ingredients) do + if ingredient.name == element and ingredient.type == el_type then + ret_tb[recipe.name] = recipe + end + end + end + + return ret_tb +end + +-------------------------------------------------------------------------------------- + +return RecipeController diff --git a/FNEI/scripts/recipe/gui.lua b/FNEI/scripts/recipe/gui.lua new file mode 100644 index 00000000..1776255d --- /dev/null +++ b/FNEI/scripts/recipe/gui.lua @@ -0,0 +1,541 @@ +local RecipeGui = { + classname = "FNRecipeGui", + name = "recipe", +} + +local recipe_gui_template + +function RecipeGui.init_template() + local cont = Controller.get_cont(RecipeGui.name) + + recipe_gui_template = { + { type = "frame", name = "main-frame", style = "fnei_recipe_main_frame", children = { + { type = "table", name = "main-table", style = "fnei_recipe_main_table", column_count = 1, children = { + +------------------ header ------------------ + + { type = "frame", name = "header-frame", style = "fnei_recipe_header_frame", direction = "horizontal", children = { + { type = "table", name = "header-table", style = "fnei_recipe_header_table", column_count = 8, children = { + { type = "flow", name = "header-icon", style = "fnei_default_horizontal_flow" }, + { type = "label", name = "header-label", style = "fnei_recipe_title_label", align = "center", vertical_align = "center", caption = "recipe_name" }, + --{ type = "empty-widget", name = "" , style = "fnei_main_header-sprite-widget", caption = {"fnei.FNEI"} }, + { type = "empty-widget", name = "drag-widget", style = "fnei_recipe_header-drag-widget", drag_target = true}, + { type = "flow", name = "favorite-flow", style = "fnei_recipe_favorite_flow", children = { + { type = "sprite-button", name = "favorite-key", tooltip = {"fnei.favorite-button"}, event = cont.favorite_key_event }, + }}, + { type = "sprite-button", name = "back-key", style = "fnei_back_button_style", tooltip = {"gui.cancel"}, event = cont.back_key_event }, + { type = "sprite-button", name = "settings-key", style = "fnei_settings_button_style", tooltip = {"gui-menu.settings"}, event = cont.settings_key_event }, + { type = "sprite-button", name = "exit-key", style = "fnei_exit_button_style", tooltip = {"gui.exit"}, event = Controller.main_key_event }, + }} + }}, + +------------------ paging ------------------ + + { type = "frame", name = "paging-frame", style = "fnei_recipe_paging_frame", children = { + { type = "table", name = "paging-table", style = "fnei_recipe_paging_table", column_count = 5, children = { + { type = "flow", name = "left-arrow-flow", style = "fnei_recipe_arrow_flow" }, + { type = "label", name = "type-label", style = "fnei_recipe_type_label", vertical_align = "center", align = "right", caption = "" }, + { type = "flow", name = "prot-icon", style = "fnei_recipe_header_icon_flow" }, + { type = "label", name = "paging-label", style = "fnei_recipe_paging_label", vertical_align = "center", align = "left", caption = "" }, + { type = "flow", name = "right-arrow-flow", style = "fnei_recipe_arrow_flow" }, + }}, + }}, + +------------------ content ------------------ + + { type = "table", name = "prod-table", style = "fnei_recipe_products_table", column_count = 2, children = { + { type = "frame", name = "ingr-frame", style = "fnei_recipe_ingr_frame", children = { + { type = "label", name = "ingr-label", style = "fnei_default_label", caption = {"fnei.ingredients"} }, + }}, + { type = "frame", name = "res-frame", style = "fnei_recipe_res_frame", children = { + { type = "label", name = "res-label", style = "fnei_default_label", caption = {"fnei.results"} }, + }}, + { type = "frame", name = "list-ingr-frame", style = "fnei_recipe_list_ingr_frame", children = { + { type = "scroll-pane", name = "ingr-scroll", style = "fnei_recipe_products_scroll_pane", direction = "vertical", children = { + { type = "table", name = "list-ingr", style = "fnei_recipe_list_elements_table", column_count = 1 } + }} + }}, + { type = "frame", name = "list-res-frame", style = "fnei_recipe_list_res_frame", children = { + { type = "scroll-pane", name = "res-scroll", style = "fnei_recipe_products_scroll_pane", direction = "vertical", children = { + { type = "table", name = "list-res", style = "fnei_recipe_list_elements_table", column_count = 1 } + }} + }}, + }}, + +------------------- madein -------------------- + + { type = "frame", name = "madein-frame", style = "fnei_recipe_paging_frame", direction = "horizontal", children = { + { type = "label", name = "madein-lable", style = "fnei_recipe_madein_label", caption = {"fnei.made-in"} }, + { type = "table", name = "madein-table", style = "fnei_recipe_made_in_table", column_count = 7 } + }}, + +------------------- techs -------------------- + + { type = "flow", name = "tech-flow", style = "fnei_default_horizontal_flow" }, + + }} + }} + } +end + +function RecipeGui.init_events() + RecipeGui.init_template() + Events.init_temp_events(RecipeGui.name, recipe_gui_template) +end + + +function RecipeGui.is_gui_open() + local val = Gui.get_gui(Gui.get_pos(), recipe_gui_template[1].name) + if val and next(val) and val.valid then + return true + else + return false + end +end + +function RecipeGui.open_window() + RecipeGui.close_window() + local gui = Gui.add_gui_template(Gui.get_pos(), recipe_gui_template) + gui.location = Gui.get_location() + return gui +end + +function RecipeGui.close_window() + if RecipeGui.is_gui_open() then + local gui = Gui.get_gui(Gui.get_pos(), recipe_gui_template[1].name) + Gui.set_location(gui.location) + gui.destroy() + end +end + +function RecipeGui.draw_favorite_state(state) + local favorite_button = Gui.get_gui(Gui.get_pos(), "favorite-flow") + + if favorite_button and favorite_button.valid then + local style = (state and "fnei_recipe_selected_favorive_button") or "fnei_recipe_favorive_button" + + clear_gui(favorite_button) + Gui.add_gui_template(favorite_button, {{ + type = "sprite-button", + name = "favorite-key", + style = style, + tooltip = {"fnei.favorite-button"}, + }}) + end +end + +function RecipeGui.set_recipe_time(energy) + local time = Gui.get_gui(Gui.get_pos(), "fnei_time_label") + time.caption = round_to_str(energy, 3) +end + +function RecipeGui.set_recipe_name(recipe) + local name = Gui.get_gui(Gui.get_pos(), "header-label") + name.caption = get_localised_name( recipe ) + name.tooltip = name.caption + + local style = "fnei_recipe_title_label" + + if recipe and recipe.hidden then + style = "fnei_recipe_grey_title_label" + elseif recipe and not recipe.enabled then + style = "fnei_recipe_red_title_label" + end + + name.style = style +end + +function RecipeGui.set_recipe_icon(recipe) + local icon_flow = Gui.get_gui(Gui.get_pos(), "header-icon") + local value = recipe.name + local type = "recipe" + + if rawget(recipe, 'impostor') then + local _,pos = string.find(value, "impostor[-]minable:") + + if not pos then + _,pos = string.find(value, "impostor[-]pumped:") + end + + value = string.sub(value, (pos or -1) + 1) + type = "entity" + end + + clear_gui(icon_flow) + Gui.add_choose_button(icon_flow, { type = "choose-elem-button", name = "selected-recipe", style = "fnei_default_button", elem_type = type, elem_value = value, locked = true }) +end + +function RecipeGui.set_ingredients(list, dif_prot) + local ingr_tb = Gui.get_gui(Gui.get_pos(), "list-ingr") + local template = {} + + table.insert(template, + { type = "flow", name = "time-flow", style = "fnei_recipe_list_elements_flow", direction = "horizontal", children = { + { type = "sprite-button", name = "fnei_time", style = "slot_button", tooltip = {"fnei.crafting-time"}, sprite = "fnei_time_icon" }, + { type = "label", name = "fnei_time_label", style = "fnei_recipe_element_label", vertical_align = "center", align = "left", caption = {"fnei.crafting-time"} }, + }}) + + for _,ingr in pairs(list) do + table.insert(template, { type = "flow", name = ingr.name .. "-flow", style = "fnei_recipe_list_elements_flow", direction = "horizontal", children = { + { type = "choose-elem-button", name = ingr.type .. "\t" .. ingr.name, style = "fnei_default_button", elem_type = ingr.type, elem_value = ingr.name, locked = true }, + { type = "label", name = ingr.name .. "-label", style = "fnei_recipe_element_label", single_line = true, vertical_align = "center", align = "left", caption = RecipeGui.get_element_caption(ingr) } + }}) + end + + local scroll = Gui.get_gui(Gui.get_pos(), "ingr-scroll") or {} + if list and #list < 7 then + scroll.vertical_scroll_policy = "never" + else + scroll.vertical_scroll_policy = "auto" + end + + for i = 1, dif_prot do + table.insert(template, { type = "flow", name = "empty_flow" .. i, style = "fnei_recipe_list_elements_flow" }) + end + + clear_gui(ingr_tb) + Gui.add_gui_template(ingr_tb, template) +end + +function RecipeGui.set_products(list, dif_prot) + local res_tb = Gui.get_gui(Gui.get_pos(), "list-res") + local template = {} + + for _,res in pairs(list) do + table.insert(template, { type = "flow", name = res.name .. "-flow", style = "fnei_recipe_list_elements_flow", direction = "horizontal", children = { + { type = "choose-elem-button", name = res.type .. "\t" .. res.name, style = "fnei_default_button", elem_type = res.type, elem_value = res.name, locked = true }, + { type = "label", name = res.name .. "-label", style = "fnei_recipe_element_label", single_line = true, vertical_align = "center", align = "left", caption = RecipeGui.get_element_caption(res) } + }}) + end + + local scroll = Gui.get_gui(Gui.get_pos(), "res-scroll") or {} + if list and #list < 8 then + scroll.vertical_scroll_policy = "never" + else + scroll.vertical_scroll_policy = "auto" + end + + for i = 1, dif_prot do + table.insert(template, { type = "flow", name = "empty_flow" .. i, style = "fnei_recipe_list_elements_flow" }) + end + + clear_gui(res_tb) + Gui.add_gui_template(res_tb, template) +end + +function RecipeGui.set_made_in_list(recipe) + local gui_tabel = Gui.get_gui(Gui.get_pos(), "madein-table") + local craft_cat_list = get_crafting_categories_list() + local item_list = get_full_item_list() + + clear_gui(gui_tabel) + + if recipe and Settings.get_val("show-recipes", "categories", recipe.category) then + local cat_list = craft_cat_list[recipe.category] + + for _, cat in pairs(cat_list) do + local caption = Settings.get_val("show-craft-time-label") + local element + + local ing_cnt = 0 + local in_fluidbox_cnt = 0 + local out_fluidbox_cnt = 0 + + for _,prot in pairs(recipe.ingredients) do + if prot.type == "item" then + ing_cnt = ing_cnt + 1 + elseif prot.type == "fluid" then + in_fluidbox_cnt = in_fluidbox_cnt + 1 + end + end + + for _,prot in pairs(recipe.products) do + if prot.type == "fluid" then + out_fluidbox_cnt = out_fluidbox_cnt + 1 + end + end + + if cat.type == "player" and Settings.get_val("show-recipes", "buildings", cat.val.name) then + if in_fluidbox_cnt <= (cat.ifbox or 0) and out_fluidbox_cnt <= (cat.ofbox or 0) then + local player = Player.get() + local tooltip = {"", {"fnei.handcraft"}} + + if caption and player and cat.val.name == "handcraft" then + local crafting_speed = (player.character_crafting_speed_modifier + 1) * (player.force.manual_crafting_speed_modifier + 1) + if crafting_speed ~= 0 then + caption = round_to_str(recipe.energy / crafting_speed, 3) + end + end + + if caption and player and cat.val.name == "handmine" then + local mining_speed = (player.character_mining_speed_modifier + 1) * (player.force.manual_mining_speed_modifier + 1) * cat.val.mining_speed + if mining_speed ~= 0 then + caption = round_to_str(recipe.mining_time / mining_speed, 3) + end + tooltip = {"", {"fnei.handmining"}} + end + + element = { + type = "sprite-button", + name = cat.val.name, + style = "fnei_default_button", + tooltip = tooltip, + sprite = "fnei_hand_icon" + } + end + elseif cat.type == "building" and cat.ingredient_count and Settings.get_val("show-recipes", "buildings", cat.val.name) then + if cat.ingredient_count >= ing_cnt and in_fluidbox_cnt <= (cat.ifbox or 0) and out_fluidbox_cnt <= (cat.ofbox or 0) then + local entity = item_list[cat.val.name].place_result + + if caption and entity and entity.crafting_speed ~= nil then + caption = round_to_str(recipe.energy / entity.crafting_speed, 3) + end + + if caption and entity and entity.pumping_speed then + caption = round_to_str(recipe.energy / entity.pumping_speed, 3) + end + + element = { + type = "choose-elem-button", + name = "item\t" .. cat.val.name, + style = "fnei_default_button", + elem_type = "item", + elem_value = cat.val.name, + locked = true + } + end + elseif cat.type == 'resource-miner' and cat.mining_speed and Settings.get_val("show-recipes", "buildings", cat.val.name) then + if in_fluidbox_cnt <= (cat.ifbox or 0) and out_fluidbox_cnt <= (cat.ofbox or 0) then + element = { + type = "choose-elem-button", + name = "item\t" .. cat.val.name, + style = "fnei_default_button", + elem_type = "item", + elem_value = cat.val.name, + locked = true + } + -- https://wiki.factorio.com/Mining + caption = round_to_str(recipe.mining_time / (cat.mining_speed), 3) + end + end + + if element then + local label + + if caption then + label = { + type = "label", + name = cat.val.name .. "-label", + style = "fnei_recipe_craft_time_for_building_label", + vertical_align = "top", + align = "center", + caption = caption, + tooltip = {"", {"fnei.craft-time-in-building"}, ": ", caption} + } + end + + Gui.add_gui_template(gui_tabel, { + { type = "flow", name = cat.val.name .. "-flow", style = "fnei_recipe_building_flow", direction = "vertical", children = { + element, + label + }} + }) + end + end + end + +end + +function RecipeGui.set_techs( recipe ) + local tech_list = get_technologies_for_recipe(recipe.name) + local gui_flow = Gui.get_gui(Gui.get_pos(), "tech-flow") + + clear_gui(gui_flow) + + local new_tech_list = {} + if Settings.get_val("show-disable-techs") then + new_tech_list = tech_list + else + for _, tech in pairs(tech_list) do + if tech.enabled then + table.insert(new_tech_list, tech) + end + end + end + + if new_tech_list and #new_tech_list > 0 then + local techs = {} + + for _, tech in pairs(new_tech_list) do + table.insert(techs, { + type = "sprite-button", + name = "tech\t".. tech.name, + style = RecipeGui.get_tech_style( tech ), + tooltip = get_localised_name(tech), + sprite = "technology/" .. tech.name + }) + end + + local template = { + { type = "frame", name = "tech-frame", style = "fnei_recipe_paging_frame", direction = "horizontal", children = { + { type = "label", name = "tech-label", style = "fnei_recipe_technologies_label", caption = {"fnei.technology"} }, + { type = "table", name = "tach-table", style = "fnei_recipe_tech_table", column_count = 3, children = techs }, + }} + } + + Gui.add_gui_template(gui_flow, template) + end +end + +function RecipeGui.get_tech_style( tech ) + if not tech.enabled then + return "fnei_recipe_grey_tech_button" + elseif tech.researched then + return "fnei_recipe_green_tech_button" + else + local preq = tech.prerequisites + for _,tec in pairs(preq) do + if tec and not tec.researched then + return "fnei_recipe_red_tech_button" + end + end + return "fnei_recipe_yellow_tech_button" + end +end + +function RecipeGui.set_crafting_type( action_type ) + local label = Gui.get_gui(Gui.get_pos(), "type-label") + + if action_type == "usage" then + label.caption = {"fnei.usage-for"} + elseif action_type == "craft" then + label.caption = {"fnei.recipe-for"} + else + label.caption = "unknown " + end +end + +function RecipeGui.draw_cur_prot(type, name) + local prot_flow = Gui.get_gui(Gui.get_pos(), "prot-icon") + clear_gui(prot_flow) + if name then + Gui.add_choose_button(prot_flow, { type = "choose-elem-button", name = type .. "\t" .. name, style = "fnei_default_button", elem_type = type, elem_value = name, locked = true }) + end +end + +function RecipeGui.get_element_caption(element) + if not element then + return "unknown name" + end + + local prot + if element.type == "item" then + prot = get_full_item_list()[element.name] + elseif element.type == "fluid" then + prot = get_full_fluid_list()[element.name] + elseif element.type == 'entity' then + prot = game.entity_prototypes[element.name] + end + + local loc_str = nil + local prob = element.probability + local amnt = element.amount + + + if not Settings.get_val("detail-chance") and prob ~= nil then + if element.amount then + loc_str = round_to_str(element.amount * prob, 3) + else + local min = element.amount_min or 0 + local max = element.amount_max or 0 + + loc_str = round_to_str((min + max) / 2 * prob, 3) + end + + loc_str = {"", loc_str, " Γ— ", get_localised_name(prot)} + else + -- get amoutn for product + + if amnt ~= nil then + loc_str = element.amount + else + local min = element.amount_min or 0 + local max = element.amount_max or 0 + + if not Settings.get_val("detail-chance") and prob ~= nil then + loc_str = round_to_str((min + max) / 2 * prob, 3) + else + if min == max then + loc_str = max + else + loc_str = {"", "[" .. min .. " - " .. max .. "]"} + end + end + end + + -- if not single output then add " Γ— " + + if loc_str ~= 1 or prob == nil or prob == 1 then + loc_str = {"", loc_str, " Γ— "} + else + loc_str = "" + end + + -- add probability for product if exists + + if prob ~= nil and prob ~= 1 then + loc_str = {"", loc_str, "" .. round_to_str(prob * 100, 3) .. "% "} + end + + -- add localised name + + loc_str = {"", loc_str, get_localised_name(prot)} + end + + -- add temperature for fluid + local function is_number(value) return "number" == type(value) end + -- Excludes lowest/greatest number that can still be represented on a double + -- value-(value-1) == 1 and value-(value+1) == -1 excludes numbers that are not huge enough such that n-1 or n+1 overflow + local function is_finite(value) return is_number(value) and value-(value-1) == 1 and value-(value+1) == -1 and -math.huge ~= value and math.huge ~= value end + + if element.type == "fluid" and Settings.get_val("show-temperature-of-fluids") then + if element.temperature then -- product + loc_str = {"", loc_str, " (" .. element.temperature .. "Β°C)"} + elseif element.minimum_temperature and not is_finite(element.maximum_temperature) then -- ingredient + loc_str = {"", loc_str, " ( β‰₯" .. element.minimum_temperature .. "Β°C)"} + elseif element.maximum_temperature and not is_finite(element.minimum_temperature) then -- ingredient + loc_str = {"", loc_str, " ( ≀" .. element.maximum_temperature .. "Β°C)"} + elseif element.minimum_temperature and element.maximum_temperature then -- ingredient; must be after each of the single temperature value test + if element.minimum_temperature == element.maximum_temperature then + loc_str = {"", loc_str, " (" .. element.minimum_temperature .. "Β°C)"} + else + loc_str = {"", loc_str, " (" .. element.minimum_temperature .. "Β°C - " .. element.maximum_temperature .. "Β°C)"} + end + end + end + + return loc_str +end + +function RecipeGui.draw_paging(page) + local page_gui = Gui.get_gui(Gui.get_pos(), "paging-table") + local label = Gui.get_gui(page_gui, "paging-label") + local amnt = page:amount_page() + + local arrow = Gui.get_gui(page_gui, "right-arrow-flow") + if arrow and arrow.style then + page:draw_forward_arrow( arrow ) + arrow.style.vertical_align = "center" + end + + local arrow = Gui.get_gui(page_gui, "left-arrow-flow") + if arrow and arrow.style then + page:draw_back_arrow( arrow ) + arrow.style.vertical_align = "center" + end + + if amnt == 0 then amnt = 1 end + label.caption = {"", {"fnei.page"}, ": " .. page:get_cur_page() .. "/".. amnt} +end + +return RecipeGui \ No newline at end of file diff --git a/FNEI/scripts/remote.lua b/FNEI/scripts/remote.lua new file mode 100644 index 00000000..bfdb12f5 --- /dev/null +++ b/FNEI/scripts/remote.lua @@ -0,0 +1,78 @@ +Remote = { + classname = "FNRemote" +} + +local version = 2 + +-- Returns the current version so other mods can focus on one specific version of the API +-- Usage example: remote.call("fnei", "version") +function Remote.version() + return version +end + +-- Explanation of the parameters used: +-- action_type: the kind of recipes that should be shown ("craft" or "usage") +-- prot_type: the type-property of the prototype ("item" or "fluid") +-- prot_name: the name of the prototype for which a list of recipes is shown +-- cur_page: the name of the recipe prototype out of the list that should be shown + +-- A 1-to-1 translation of the internal method of displaying an prototype +-- Usage example: remote.call("fnei", "show_recipe_for_prot", "craft", "item", "iron-plate") +function Remote.show_recipe_for_prot(action_type, prot_type, prot_name) + Controller.get_cont("recipe").add_element_in_recipe_list(action_type, prot_type, prot_name) + Controller.open_event("recipe") +end + +-- This will show the recipes for the given recipe_name. +-- Since fnei always works with a list of recipes for prototypes, this list is formed as follows. +-- As a prototype for displaying a list of recipes, the first prototype from the list of products of the specified +-- recipe or from the list of ingredients will be used (if the list of products is empty). +-- Optionally, you can specify a prototype for which this reipe list should be displayed. + +-- Usage example: remote.call("fnei", "show_recipe", "basic-oil-processing") +-- or remote.call("fnei", "show_recipe", "basic-oil-processing", "light-oil") +function Remote.show_recipe(recipe_name, prot_name) + local function find_prot(list) + for _,prot in pairs(list) do + if prot.name == prot_name then + return prot + end + end + end + + local recipe = game.recipe_prototypes[recipe_name] + + if recipe then + local prot + if prot_name then + prot = find_prot(recipe.products) or find_prot(recipe.ingredients) + + if prot == nil then + Debug:error(Remote.classname, "FNEI remote error: unknown prot_name: \"", prot_name, "\" for recipe:", recipe_name) + return + end + elseif recipe.products and #recipe.products > 0 then + prot = recipe.products[1] + elseif recipe.ingredients and #recipe.ingredients > 0 then + prot = recipe.ingredients[1] + else + Debug:error(Remote.classname, "FNEI remote error: recipe don't contaains ingridient and products:", recipe_name) + return + end + + Controller.get_cont("recipe").add_element_in_recipe_list("craft", prot.type, prot.name, recipe.name) + Controller.open_event("recipe") + else + Debug:error(Remote.classname, "FNEI remote error: unknown recipe_name:", recipe_name) + end +end + +function Remote:init() + remote.add_interface("fnei", + { + version = self.version, + show_recipe_for_prot = self.show_recipe_for_prot, + show_recipe = self.show_recipe + } + ) +end \ No newline at end of file diff --git a/FNEI/scripts/settings/controller.lua b/FNEI/scripts/settings/controller.lua new file mode 100644 index 00000000..019db32b --- /dev/null +++ b/FNEI/scripts/settings/controller.lua @@ -0,0 +1,70 @@ +local SettingsController = { + classname = "FNSettingsController", +} + +local SettingsGui = require "scripts/settings/gui" +local tabs = "sett-tabs" + +function SettingsController.exit() + out("settings exit") + SettingsGui.close_window() +end + +function SettingsController.open() + out("settings open") + + local ret_gui = SettingsGui.open_window() + SettingsGui.draw_tabs(tabs) + SettingsController.draw_settings() + + return ret_gui +end + +function SettingsController.draw_settings() + local cur_tab = tabs:get_cur_tab() + local settings = Settings.get_sett_list() + local sett_list = {} + + sett_list = SettingsController.set_settings_for_tab(settings, cur_tab) + SettingsGui.add_option_list(sett_list) +end + +function SettingsController.set_settings_for_tab(settings, cur_tab) + local ret_tb = {} + + for name, sett in pairs(settings) do + if sett.tab == cur_tab then + table.insert(ret_tb, sett) + end + end + + return ret_tb +end + +function SettingsController.back_key() + return true +end + +function SettingsController.can_open_gui() + return true +end + +function SettingsController.get_name() + return SettingsGui.name +end + +function SettingsController.is_gui_open() + return SettingsGui.is_gui_open() +end + +function SettingsController.set_new_tab_event(event, gui_name) + SettingsController.draw_settings(tabs:get_cur_tab()) +end + +function SettingsController.init_events() + SettingsGui.init_events() + Settings.init_events() + tabs = Tabs:new(tabs, SettingsGui.name, {"main-settings", "crafting-category", "admin-settings"}, "fnei_settings_selected-tab", "fnei_settings_empty-tab", SettingsController.set_new_tab_event) +end + +return SettingsController \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/checkbox.lua b/FNEI/scripts/settings/elements/checkbox.lua new file mode 100644 index 00000000..0b55444e --- /dev/null +++ b/FNEI/scripts/settings/elements/checkbox.lua @@ -0,0 +1,40 @@ +local CheckBoxSett = { + classname = "FNCheckBoxSett", +} + +function CheckBoxSett.get_val(setting) + local global_set = Settings.get_global_sett() + + if global_set[setting.name] == nil then + global_set[setting.name] = setting.def_val + end + + return global_set[setting.name] +end + +function CheckBoxSett.set_val(setting, val) + Settings.get_global_sett()[setting.name] = val +end + +function CheckBoxSett.add_label_func(parent, sett) + Gui.add_label(parent, { type = "label", name = sett.name .. "-label", style = "fnei_settings_param-label", caption = {"fnei." .. sett.name} }) +end + +function CheckBoxSett.add_content_func(parent, sett) + Gui.add_checkbox(parent, { type = "checkbox", name = sett.name, state = Settings.get_val(sett.name) or false }) +end + +function CheckBoxSett.event(event, sett_name) + Settings.set_val(sett_name, event.element.state) +end + +function CheckBoxSett.event_init(sett) + if sett.def_event ~= false then + Events.add_custom_event(Controller.get_cont("settings").get_name(), sett.type, sett.name, CheckBoxSett.event) + end + if sett.event then + Events.add_custom_event(Controller.get_cont("settings").get_name(), sett.type, sett.name, sett.event) + end +end + +return CheckBoxSett \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/crafting_buildings.lua b/FNEI/scripts/settings/elements/crafting_buildings.lua new file mode 100644 index 00000000..1418dba0 --- /dev/null +++ b/FNEI/scripts/settings/elements/crafting_buildings.lua @@ -0,0 +1,195 @@ +local CraftingBuildingsSett = { + classname = "FNCraftingBuildingsSett", +} + +local cat_text = "cat" +local buildings = "buildings" +local categories = "categories" + +function CraftingBuildingsSett.get_val(setting, type, val) + local global_set = Settings.get_global_sett() + + if not global_set[setting.name] then + global_set[setting.name] = {} + global_set[setting.name][categories] = {} + global_set[setting.name][buildings] = {} + end + + if global_set[setting.name][type] then + if global_set[setting.name][type][val] == nil then global_set[setting.name][type][val] = setting.def_val end + return global_set[setting.name][type][val] + else + Debug:error("Error in function CraftingBuildingsSett.get_val: unknown type", type, "") + end +end + +function CraftingBuildingsSett.set_val(setting, val) + local gl_sett = Settings.get_global_sett()[setting.name] + + if gl_sett[val.type] then + if val.button == 2 then + gl_sett[val.type][val.name] = true + elseif val.button == 4 then + gl_sett[val.type][val.name] = false + end + end +end + +function CraftingBuildingsSett.add_label_func(parent, sett) end + +function CraftingBuildingsSett.split_cat(category) + local ret_str = string.format("%.12s", category) + if string.len(category) > 12 then + return ret_str .. "…" + end + return ret_str +end + +function CraftingBuildingsSett.add_content_func(parent, sett) + local craft_tb = get_crafting_categories_list() + local gui_template = {} + + for cat, items in pairs(craft_tb) do + local flow_childer = {} + + table.insert(flow_childer, + { + type = "sprite-button", + name = sett.name .. "\t" .. cat_text .. "\t" .. cat .. "\tbut", + style = CraftingBuildingsSett.get_category_style(cat), + tooltip = {"", cat, "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}}, + caption = CraftingBuildingsSett.split_cat(cat) + }) + + for _, item in pairs(items) do + if item.type == "building" then + table.insert(flow_childer, + { + type = "choose-elem-button", + name = sett.name .. "\t" .. cat .. "\t" .. item.val.name, + elem_type = "item", + elem_value = item.val.name, + locked = true, + style = CraftingBuildingsSett.get_building_style(cat, item.val.name), + tooltip = {"", Gui.get_local_name(item.val), "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}}, + }) + elseif item.type == "player" then + table.insert(flow_childer, + { + type = "sprite-button", + name = sett.name .. "\t" .. cat .. "\t" .. item.val.name, + style = CraftingBuildingsSett.get_building_style(cat, item.val.name), + tooltip = {"", {"fnei.handcraft"}, "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}}, + sprite = "fnei_hand_icon", + }) + elseif item.type == "resource-miner" then + table.insert(flow_childer, + { + type = "choose-elem-button", + name = sett.name .. "\t" .. cat .. "\t" .. item.val.name, + elem_type = "item", + elem_value = item.val.name, + locked = true, + style = CraftingBuildingsSett.get_building_style(cat, item.val.name), + tooltip = {"", Gui.get_local_name(item.val), "\n", {"fnei.left-eneble-click"}, "\n", {"fnei.right-disable-click"}}, + }) + end + end + + table.insert(gui_template, { type = "flow", name = sett.name .. "-flow-" .. cat, direction = "horizontal", children = flow_childer }) + end + + gui_template = { + { type = "table", name = sett.name .."-table", style = "fnei_settings_content-table", column_count = 1, children = { + { type = "label", name = "header-label-2", style = "fnei_settings_craft-category-label", caption = {"fnei.craftin-cat-msg"} }, + { type = "scroll-pane", name = sett.name .. "-scroll-pane", style = "fnei_settings_craft-cat-scroll", children = { + { type = "table", name = sett.name .. "-flow-table", style = "fnei_settings_content-table", column_count = 1, children = gui_template } + }} + }} + } + + Gui.add_gui_template(parent, gui_template) +end + +function CraftingBuildingsSett.parse_name(name) + local ret_tb = {} + + for k in string.gmatch(name, "[^\t]+") do + table.insert(ret_tb, k) + end + + return ret_tb +end + +function CraftingBuildingsSett.change_category_style(sett_name, elem_name) + local parent = Gui.get_gui(Gui.get_pos(), sett_name .. "-flow-table") + local parse_str + + for _,flow_gui in pairs(parent.children) do + for _,gui_elem in pairs(flow_gui.children) do + parse_str = CraftingBuildingsSett.parse_name(gui_elem.name) + if parse_str[4] == cat_text and parse_str[5] == elem_name then + gui_elem.style = CraftingBuildingsSett.get_category_style(elem_name) + elseif parse_str[4] == elem_name then + gui_elem.style = CraftingBuildingsSett.get_building_style(elem_name, parse_str[5]) + end + end + end +end + +function CraftingBuildingsSett.change_building_style(sett_name, elem_name) + local parent = Gui.get_gui(Gui.get_pos(), sett_name .. "-flow-table") + local parse_str + + for _,flow_gui in pairs(parent.children) do + for _,gui_elem in pairs(flow_gui.children) do + parse_str = CraftingBuildingsSett.parse_name(gui_elem.name) + if parse_str[4] ~= cat_text and parse_str[5] == elem_name then + gui_elem.style = CraftingBuildingsSett.get_building_style(parse_str[4], elem_name) + end + end + end +end + +function CraftingBuildingsSett.event(event, sett_name, gui_names) + if gui_names[4] == cat_text then + Settings.set_val(sett_name, {type = categories, name = gui_names[5], button = event.button }) + CraftingBuildingsSett.change_category_style(sett_name, gui_names[5]) + else + Settings.set_val(sett_name, {type = buildings, name = gui_names[5], button = event.button }) + CraftingBuildingsSett.change_building_style(sett_name, gui_names[5]) + end +end + +function CraftingBuildingsSett.event_init(sett) + if sett.def_event ~= false then + Events.add_custom_event(Controller.get_cont("settings").get_name(), "sprite-button", sett.name, CraftingBuildingsSett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "choose-elem-button", sett.name, CraftingBuildingsSett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "label", sett.name, CraftingBuildingsSett.event) + end + if sett.event then + Events.add_custom_event(Controller.get_cont("settings").get_name(), "sprite-button", sett.name, sett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "choose-elem-button", sett.name, sett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "label", sett.name, sett.event) + end +end + +function CraftingBuildingsSett.get_building_style(cat_name, item_name) + if not Settings.get_val("show-recipes", "buildings", item_name) then + return "fnei_settings_disabled-building" + elseif Settings.get_val("show-recipes", "categories", cat_name) then + return "fnei_settings_enabled-building" + else + return "fnei_settings_hidden-building" + end +end + +function CraftingBuildingsSett.get_category_style(cat_name) + if Settings.get_val("show-recipes", "categories", cat_name) then + return "fnei_settings_enable-category" + else + return "fnei_settings_disable-category" + end +end + +return CraftingBuildingsSett \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/drop_down.lua b/FNEI/scripts/settings/elements/drop_down.lua new file mode 100644 index 00000000..e1971c2f --- /dev/null +++ b/FNEI/scripts/settings/elements/drop_down.lua @@ -0,0 +1,41 @@ +local DropDownSett = { + classname = "FNDropDownSett", +} + +function DropDownSett.get_val(setting) + local global_set = Settings.get_global_sett() + + if global_set[setting.name] == nil then + global_set[setting.name] = setting.def_val + end + + return global_set[setting.name] +end + +function DropDownSett.set_val(setting, val) + local sets = Settings.get_global_sett() + sets[setting.name] = val +end + +function DropDownSett.add_label_func(parent, sett) + Gui.add_label(parent, { type = "label", name = sett.name .. "-label", style = "fnei_settings_param-label", caption = {"fnei." .. sett.name} }) +end + +function DropDownSett.add_content_func(parent, sett) + Gui.add_drop_down(parent, { type = "drop-down", name = sett.name, items = sett.items, selected_index = Settings.get_val(sett.name) }) +end + +function DropDownSett.event(event, sett_name) + Settings.set_val(sett_name, event.element.selected_index) +end + +function DropDownSett.event_init(sett) + if sett.def_event ~= false then + Events.add_custom_event(Controller.get_cont("settings").get_name(), sett.type, sett.name, DropDownSett.event) + end + if sett.event then + Events.add_custom_event(Controller.get_cont("settings").get_name(), sett.type, sett.name, sett.event) + end +end + +return DropDownSett \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/global_checkbox.lua b/FNEI/scripts/settings/elements/global_checkbox.lua new file mode 100644 index 00000000..29a42632 --- /dev/null +++ b/FNEI/scripts/settings/elements/global_checkbox.lua @@ -0,0 +1,40 @@ +local GlobCheckBoxSett = { + classname = "FNGlobCheckBoxSett", +} + +function GlobCheckBoxSett.get_val(setting) + local global_set = global.fnei + + if global_set[setting.name] == nil then + global_set[setting.name] = setting.def_val + end + + return global_set[setting.name] +end + +function GlobCheckBoxSett.set_val(setting, val) + global.fnei[setting.name] = val +end + +function GlobCheckBoxSett.add_label_func(parent, sett) + Gui.add_label(parent, { type = "label", name = sett.name .. "-label", style = "fnei_settings_param-label", caption = {"fnei." .. sett.name} }) +end + +function GlobCheckBoxSett.add_content_func(parent, sett) + Gui.add_checkbox(parent, { type = "checkbox", name = sett.name, state = Settings.get_val(sett.name) or false }) +end + +function GlobCheckBoxSett.event(event, sett_name) + Settings.set_val(sett_name, event.element.state) +end + +function GlobCheckBoxSett.event_init(sett) + if sett.def_event ~= false then + Events.add_custom_event(Controller.get_cont("settings").get_name(), "checkbox", sett.name, GlobCheckBoxSett.event) + end + if sett.event then + Events.add_custom_event(Controller.get_cont("settings").get_name(), "checkbox", sett.name, sett.event) + end +end + +return GlobCheckBoxSett \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/global_numeric_up_down.lua b/FNEI/scripts/settings/elements/global_numeric_up_down.lua new file mode 100644 index 00000000..ee35c6be --- /dev/null +++ b/FNEI/scripts/settings/elements/global_numeric_up_down.lua @@ -0,0 +1,45 @@ +local NumericUpDown = require "scripts/settings/elements/numeric_up_down" + +local GlobalNumericUpDown = { + classname = "FNNumericUpDown", +} + +local textfield_name = "-textfield" + +function GlobalNumericUpDown.get_val(setting) + local global_set = global.fnei + + if global_set[setting.name] == nil then + global_set[setting.name] = setting.def_val + end + + return global_set[setting.name] +end + +function GlobalNumericUpDown.set_val(setting, val) + if type(val) == "number" then + if setting.max_val and val > setting.max_val then + val = setting.max_val + elseif setting.min_val and val < setting.min_val then + val = setting.min_val + end + + global.fnei[setting.name] = val + + NumericUpDown.set_val_in_gui(setting.name, val) + end +end + +function GlobalNumericUpDown.add_label_func(parent, sett) + NumericUpDown.add_label_func(parent, sett) +end + +function GlobalNumericUpDown.add_content_func(parent, sett) + NumericUpDown.add_content_func(parent, sett) +end + +function GlobalNumericUpDown.event_init(sett) + NumericUpDown.event_init(sett) +end + +return GlobalNumericUpDown \ No newline at end of file diff --git a/FNEI/scripts/settings/elements/numeric_up_down.lua b/FNEI/scripts/settings/elements/numeric_up_down.lua new file mode 100644 index 00000000..a6c4d3f5 --- /dev/null +++ b/FNEI/scripts/settings/elements/numeric_up_down.lua @@ -0,0 +1,135 @@ +local NumericUpDown = { + classname = "FNNumericUpDown", +} + +local textfield_name = "-textfield" +local up_but_name = "-up" +local down_but_name = "-down" +local war_label_name = "-warning" + +function NumericUpDown.get_val(setting) + local global_set = Settings.get_global_sett() + + if global_set[setting.name] == nil then + global_set[setting.name] = setting.def_val + end + + return global_set[setting.name] +end + +function NumericUpDown.set_val(setting, val) + if type(val) == "number" then + if setting.max_val and val > setting.max_val then + val = setting.max_val + elseif setting.min_val and val < setting.min_val then + val = setting.min_val + end + + Settings.get_global_sett()[setting.name] = val + NumericUpDown.set_val_in_gui(setting.name, val) + end +end + +function NumericUpDown.set_val_in_gui(sett_name, val) + local gui = Gui.get_gui(Gui.get_pos(), sett_name .. textfield_name) + + if gui then + gui.text = tostring(val) + end +end + +function NumericUpDown.add_label_func(parent, sett) + Gui.add_label(parent, { type = "label", name = sett.name .. "-label", style = "fnei_settings_param-label", caption = {"fnei." .. sett.name} }) +end + +function NumericUpDown.get_template(sett) + return + { + { type = "flow", name = sett.name .. "_flow", style = nil, children = { + { type = "textfield", name = sett.name .. textfield_name, style = "fnei_settings_numeric-text-field", event = NumericUpDown.text_chenge_event }, + { type = "flow", name = sett.name .. "_vertical_flow", style = "fnei_settings_updown-arrow-flow", direction = "vertical", children = { + { type = "button", name = sett.name .. up_but_name, style = "fnei_settings_up_arrow", event = NumericUpDown.up_event }, + { type = "button", name = sett.name .. down_but_name, style = "fnei_settings_down_arrow", event = NumericUpDown.down_event }, + }}, + { type = "label", name = sett.name .. war_label_name, style = "fnei_settings_warning-text", caption = "" }, + }} + } +end + +function NumericUpDown.add_content_func(parent, sett) + local gui_template = NumericUpDown.get_template(sett) + + Gui.add_gui_template(parent, gui_template) + + local gui = Gui.get_gui(Gui.get_pos(), sett.name .. textfield_name) + gui.text = tostring(Settings.get_val(sett.name)) +end + +function NumericUpDown.text_chenge_event(event, sett_name) + sett_name = string.sub(sett_name, 0, string.len(sett_name) - string.len(textfield_name) ) + local element = event.element + if event.text then + if event.text ~= "" then + local val = string.gsub(element.text or "", "[^0-9]", "") + local num = tonumber(val) + element.text = num or "" + local option = Settings.get_sett_list()[sett_name] or {} + + if num and num >= option.min_val and num <= option.max_val then + Settings.set_val(sett_name, tonumber(val)) + NumericUpDown.success_set(sett_name) + else + NumericUpDown.wrong_set(sett_name, ": [" .. (option.min_val or 0) .. "-" .. (option.max_val or "2^32") .. "]") + end + end + end +end + +function NumericUpDown.success_set(sett_name) + local gui_label = Gui.get_gui(Gui.get_pos(), sett_name .. war_label_name) + local text_field = Gui.get_gui(Gui.get_pos(), sett_name .. textfield_name) + + if not gui_label or not text_field then + return + end + + gui_label.caption = "" + text_field.style = "fnei_settings_numeric-text-field" +end + +function NumericUpDown.wrong_set(sett_name, msg) + local gui_label = Gui.get_gui(Gui.get_pos(), sett_name .. war_label_name) + local text_field = Gui.get_gui(Gui.get_pos(), sett_name .. textfield_name) + + if not gui_label or not text_field then + return + end + + gui_label.caption = {"", {"fnei.out-of-range"}, msg} + text_field.style = "fnei_settings_wrong_numeric-text-field" +end + +function NumericUpDown.up_event(event, sett_name) + sett_name = string.sub(sett_name, 0, string.len(sett_name) - string.len(up_but_name) ) + Settings.set_val(sett_name, Settings.get_val(sett_name) + 1) + NumericUpDown.success_set(sett_name) +end + +function NumericUpDown.down_event(event, sett_name) + sett_name = string.sub(sett_name, 0, string.len(sett_name) - string.len(down_but_name) ) + Settings.set_val(sett_name, Settings.get_val(sett_name) - 1) + NumericUpDown.success_set(sett_name) +end + +function NumericUpDown.event_init(sett) + if sett.def_event ~= false then + Events.init_temp_events(Controller.get_cont("settings").get_name(), NumericUpDown.get_template(sett)) + end + if sett.event then + Events.add_custom_event(Controller.get_cont("settings").get_name(), "textfield", sett.name .. textfield_name, sett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "button", sett.name .. up_but_name, sett.event) + Events.add_custom_event(Controller.get_cont("settings").get_name(), "button", sett.name .. down_but_name, sett.event) + end +end + +return NumericUpDown \ No newline at end of file diff --git a/FNEI/scripts/settings/gui.lua b/FNEI/scripts/settings/gui.lua new file mode 100644 index 00000000..841e8a01 --- /dev/null +++ b/FNEI/scripts/settings/gui.lua @@ -0,0 +1,101 @@ +local SettingsGui = { + classname = "FNSettingsGui", + name = "settings", +} + +local settings_gui_template +local tab_flow_name = "sett-tabs" +local content_gui_name = "content-table" + +function SettingsGui.init_template() + local cont = Controller.get_cont(SettingsGui.name) + + settings_gui_template = { + { type = "frame", name = "main-frame", style = "fnei_settings_main-frame", children = { + { type = "table", name = "main-table", style = "fnei_settings_main-table", column_count = 1, children = { + +------------------ header ------------------ + + { type = "frame", name = "header-frame", style = "fnei_settings_header-frame", direction = "horizontal", children = { + { type = "table", name = "header-table", style = "fnei_settings_header-table", column_count = 5, children = { + { type = "label", name = "header-label", style = "fnei_settings_header-label", caption = {"gui-menu.settings"} }, + { type = "empty-widget", name = "widget-sprite" , style = "fnei_settings_header-sprite-widget" }, + { type = "empty-widget", name = "drag-widget", style = "fnei_settings_header-drag-widget", drag_target = true }, + { type = "sprite-button", name = "back-key", style = "fnei_back_button_style", tooltip = {"gui.cancel"}, event = Controller.back_key_event }, + { type = "sprite-button", name = "exit-key", style = "fnei_exit_button_style", tooltip = {"gui.exit"}, event = Controller.main_key_event }, + }} + }}, + +------------------ tabs ------------------ + + { type = "flow", name = tab_flow_name }, + +------------------ settings ------------------ + + { type = "frame", name = "content-frame", style = "fnei_settings_content-frame", direction = "horizontal", children = { + { type = "table", name = content_gui_name, style = "fnei_settings_content-table", column_count = 2} + }} + }} + }} + } +end + +function SettingsGui.init_events() + SettingsGui.init_template() + Events.init_temp_events(SettingsGui.name, settings_gui_template) +end + +function SettingsGui.is_gui_open() + local val = Gui.get_gui(Gui.get_pos(), settings_gui_template[1].name) + if val and next(val) and val.valid then + return true + else + return false + end +end + +function SettingsGui.open_window() + SettingsGui.close_window() + + local gui = Gui.add_gui_template(Gui.get_pos(), settings_gui_template) + gui.location = Gui.get_location() + return gui +end + +function SettingsGui.draw_tabs(tabs) + tabs:draw_tabs() +end + +function SettingsGui.close_window() + if SettingsGui.is_gui_open() then + local gui = Gui.get_gui(Gui.get_pos(), settings_gui_template[1].name) + Gui.set_location(gui.location) + gui.destroy() + end +end + +function SettingsGui.add_option_list(sett_list) + local gui = Gui.get_gui(Gui.get_pos(), content_gui_name) + + if not gui or not gui.valid then + debug:error("Error in function SettingsGui.add_option_in_gui: gui == nil") + return + end + + for _,gui in pairs(gui.children) do + if gui and gui.valid then + gui.destroy() + end + end + + for name, sett in pairs(sett_list) do + SettingsGui.add_option_in_gui(gui, sett) + end +end + +function SettingsGui.add_option_in_gui(parent, sett) + sett.elem.add_label_func(parent, sett) + sett.elem.add_content_func(parent, sett) +end + +return SettingsGui \ No newline at end of file diff --git a/FNEI/scripts/settings/settings.lua b/FNEI/scripts/settings/settings.lua new file mode 100644 index 00000000..2698bb24 --- /dev/null +++ b/FNEI/scripts/settings/settings.lua @@ -0,0 +1,78 @@ +Settings = { + classname = "FNSettings", +} + +local settings_list = {} +local element_list = {} + + +function Settings.init() + settings_list["need-show"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["show-hidden-recipes"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["show-disable-recipes"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["show-hidden-items"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["show-hidden-fluids"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["show-disable-techs"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["fnei-line-count"] = { type = "numeric-up-down", tab = "main-settings", def_val = 10, min_val = 5, max_val = 12 } + settings_list["detail-chance"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["focus-search"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["close-gui-when-tech-open"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["show-craft-time-label"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["show-the-same-recipes"] = { type = "checkbox", tab = "main-settings", def_val = false } + settings_list["show-hotbar"] = { type = "checkbox", tab = "main-settings", def_val = true, event = Controller.get_cont("hotbar").change_hotbar_visibility } + settings_list["show-temperature-of-fluids"] = { type = "checkbox", tab = "main-settings", def_val = true } + settings_list["hotbar-last-line-num"] = { type = "numeric-up-down", tab = "main-settings", def_val = 3, min_val = 0, max_val = 20, event = Controller.get_cont("hotbar").change_hotbar_visibility } + settings_list["hotbar-fav-line-num"] = { type = "numeric-up-down", tab = "main-settings", def_val = 5, min_val = 0, max_val = 20, event = Controller.get_cont("hotbar").change_hotbar_visibility } + + settings_list["show-recipes"] = { type = "crafting-buildings", tab = "crafting-category", def_val = true } + + settings_list["item-auto-craft"] = { type = "checkbox", tab = "default-settings", def_val = false } + settings_list["item-auto-usage"] = { type = "checkbox", tab = "default-settings", def_val = false } + settings_list["fluid-auto-craft"] = { type = "checkbox", tab = "default-settings", def_val = false } + settings_list["fluid-auto-usage"] = { type = "checkbox", tab = "default-settings", def_val = false } + settings_list["show-extended-hotbar"] = { type = "checkbox", tab = "default-settings", def_val = false } + + element_list["checkbox"] = require "scripts/settings/elements/checkbox" + element_list["global-checkbox"] = require "scripts/settings/elements/global_checkbox" + element_list["crafting-buildings"] = require "scripts/settings/elements/crafting_buildings" + element_list["drop-down"] = require "scripts/settings/elements/drop_down" + element_list["numeric-up-down"] = require "scripts/settings/elements/numeric_up_down" + element_list["global-numeric-up-down"] = require "scripts/settings/elements/global_numeric_up_down" + + for name, sett in pairs(settings_list) do + sett.elem = element_list[sett.type] + sett.name = name + end +end + +function Settings.get_sett_list() + return settings_list +end + +function Settings.get_val(sett_name, arg1, arg2) + local sett = sett_name and settings_list[sett_name] + if sett then + return sett.elem.get_val(sett, arg1, arg2) + else + Debug:error("Error in fanction Settings.get_val: sett_name ", sett_name, " not found") + end +end + +function Settings.set_val(sett_name, val) + local sett = sett_name and settings_list[sett_name] + if sett then + settings_list[sett_name].elem.set_val(settings_list[sett_name], val) + end +end + +function Settings.get_global_sett() + local pl_global = Player.get_global() + if not pl_global.settings then pl_global.settings = {} end + return pl_global.settings +end + +function Settings.init_events() + for name,sett in pairs(settings_list) do + element_list[sett.type].event_init(sett) + end +end \ No newline at end of file diff --git a/FNEI/thumbnail.png b/FNEI/thumbnail.png new file mode 100644 index 00000000..16d54def Binary files /dev/null and b/FNEI/thumbnail.png differ diff --git a/FNEI/utils/array.lua b/FNEI/utils/array.lua new file mode 100644 index 00000000..eba6f4c7 --- /dev/null +++ b/FNEI/utils/array.lua @@ -0,0 +1,128 @@ +Array = { + classname = "FNArray", +} + +function Array:new( array_name ) + local obj = { + name = array_name, + } + + function obj:get_array( ) + local gl = Player.get_global() + if not gl["a" .. self.name] then gl["a" .. self.name] = {} end + return gl["a" .. self.name] + end + + function obj:size( ) + return #obj:get_array() + end + + function obj:insert( elem, pos ) + if pos then + local array = obj:get_array() + table.insert(array, pos, elem) + end + end + + function obj:insert_head( elem ) + obj:insert(elem, 1) + end + + function obj:insert_tail( elem ) + local array = obj:get_array() + table.insert(array, elem); + end + + function obj:replace_elem( elem, pos ) + if pos then + local array = obj:get_array() + array[pos] = elem + end + end + + function obj:swap_element( src_pos, dst_pos ) + if src_pos and dst_pos then + local val = obj:get( dst_pos ) + obj:replace_elem(obj:get(src_pos), dst_pos) + obj:replace_elem(val, src_pos) + end + end + + function obj:clear( ) + Player.get_global()["a" .. self.name] = {} + end + + function obj:remove( pos ) + if pos and obj:size() >= pos then + local array = obj:get_array() + return table.remove(array, pos) + end + end + + function obj:get_first_free_slot( ) + local array = obj:get_array() + local i = 1 + + while array[i] ~= nil do + i = i + 1 + end + + return i + end + + function obj:get_elem_pos( elem ) + local array = obj:get_array() + local size = obj:size() + + if elem == nil then + return nil + end + + if type(elem) ~= "table" then + for i,j in pairs(array) do + if j == elem then + return i + end + end + else + for i,j in pairs(array) do + if type(j) == "table" and #j == #elem then + local flag = true + + for ind,val in pairs(j) do + if elem[ind] ~= val then + flag = false + end + end + + if flag then + return i + end + end + end + end + + return nil + end + + function obj:debug( ) + for i,j in pairs(self:get_array()) do + out(i,j) + end + end + + function obj:get( pos ) + if pos and obj:size() >= pos then + return obj:get_array()[pos] + end + end + + function obj:is_empty( ) + return obj:size() == 0 + end + + setmetatable(obj, self) + self.__index = self; return obj +end + +return Array \ No newline at end of file diff --git a/FNEI/utils/crafting_category_list.lua b/FNEI/utils/crafting_category_list.lua new file mode 100644 index 00000000..138c12c8 --- /dev/null +++ b/FNEI/utils/crafting_category_list.lua @@ -0,0 +1,108 @@ +if not Item then Item = require "utils/items" end + +local CraftCategoty = { + -- single-line comment + classname = "FNCraftCategoty" +} + +local craf_cat + +--return a list of attainable technologies or empty list +function CraftCategoty:get_crafting_category_list() + Debug:debug(CraftCategoty.classname, "get_crafting_category_list( )") + + local entity = Player.get().character + local key = "default" + + if entity and entity.name then + key = entity.name + end + + if not craf_cat then craf_cat = {} end + + if not craf_cat[key] then + craf_cat[key] = self:create_crafting_category_list() + end + + return craf_cat[key] or {} +end + +----------------------- secondary function -------------------------- + +-- TODO: Clean this up.. +function CraftCategoty:create_crafting_category_list() + local result = {} + + local function add_category_entry(category, entry) + if not result[category] then + result[category] = {} + end + + table.insert(result[category], entry) + end + + local character = Player.get().character + + -- Add character 'by hand' recipes + if character then + if character.prototype.crafting_categories then + local by_hand = { type = "player", val = { name = "handcraft" } } + + add_category_entry('handcraft', by_hand) + + for category, _ in pairs(character.prototype.crafting_categories) do + add_category_entry(category, by_hand) + end + end + if character.prototype.resource_categories then + local by_hand = { type = "player", val = { name = "handmine", mining_speed = character.prototype.mining_speed } } + + for category, _ in pairs(character.prototype.resource_categories) do + add_category_entry("mine " .. category, by_hand) + end + end + end + + local item_list = Item:get_item_list() + + for _, item in pairs(item_list) do + local entity = item.place_result + + if entity then + local in_fluidbox = 0 + local out_fluidbox = 0 + + if entity.fluidbox_prototypes then + for _,fb in pairs(entity.fluidbox_prototypes) do + if fb.production_type == "input" then + in_fluidbox = in_fluidbox + 1 + elseif fb.production_type == "output" then + out_fluidbox = out_fluidbox + 1 + elseif fb.production_type == "input-output" then + in_fluidbox = in_fluidbox + 1 + out_fluidbox = out_fluidbox + 1 + end + end + end + + -- A building might be able to craft items in a category + for category, _ in pairs(entity.crafting_categories or {}) do + add_category_entry(category, { type = "building", val = item, ingredient_count = entity.ingredient_count, ifbox = in_fluidbox, ofbox = out_fluidbox }) + end + + -- A building may be used to mine a certain item + for category, _ in pairs(entity.resource_categories or {}) do + add_category_entry("mine " .. category, { type = "resource-miner", val = item, mining_speed = entity.mining_speed, ifbox = in_fluidbox, ofbox = out_fluidbox }) + end + + -- A building may implicitly produce a fluid, regardless of any action + if entity.fluid then + add_category_entry("pump " .. entity.name, { type = 'building', val = item, ingredient_count = math.huge, ifbox = in_fluidbox, ofbox = out_fluidbox }) + end + end + end + + return result +end + +return CraftCategoty \ No newline at end of file diff --git a/FNEI/utils/data_wrapper.lua b/FNEI/utils/data_wrapper.lua new file mode 100644 index 00000000..af426fc4 --- /dev/null +++ b/FNEI/utils/data_wrapper.lua @@ -0,0 +1,135 @@ +RawTech = require "utils/raw_technologies" +Recipe = require "utils/recipe_list" +Item = require "utils/items" +Fluid = require "utils/fluids" +Entity = require "utils/entity" +CraftCategoty = require "utils/crafting_category_list" + +function hard_load() + if not global.fnei.eqRecipe then + Recipe:get_equals_recipe_list() + end +end + +------------- Actiion category ------------- + +function get_crafting_categories_list() + return CraftCategoty:get_crafting_category_list() +end + +------------------ Item ------------------- + +function get_full_item_list() + return Item:get_item_list() +end + +function get_item_list() + if Settings.get_val("show-hidden-items") then + return Item:get_item_list() + else + return Item:get_vItem_list(Item:get_item_list()) + end +end + +------------------ Fluid ------------------ + +function get_full_fluid_list() + return Fluid:get_fluid_list() +end + +function get_fluid_list() + if Settings.get_val("show-hidden-fluids") then + return Fluid:get_fluid_list() + else + return Fluid:get_vFluid_list(Fluid:get_fluid_list()) + end +end + +------------------ Tech ------------------- + +function get_tech_list() + return RawTech:get_tech_list() +end + +function get_technologies_for_recipe(recipe_name) + return Recipe:get_technologies_for_recipe(recipe_name) +end + +------------------ Entity ----------------- + +function get_entity_list() + return Entity:get_entity_list() +end + +function get_mineable_entity_list() + return Entity:get_mineable_entity_list() +end + +function get_not_convert_entity_list() + return Entity:get_nConvert_entity_list() +end + +------------------ Recipe ----------------- + +function get_all_recipes() + return Recipe:get_recipe_list() +end + +function get_recipe_list() + local rec_list = Recipe:get_recipe_list() + + if not Settings.get_val("show-hidden-recipes") then + rec_list = Recipe:get_vRecipe_list(rec_list) + end + + if not Settings.get_val("show-disable-recipes") then + rec_list = Recipe:get_enRecipe_list(rec_list) + end + + return rec_list +end + +function get_equals_recipe_list() + return Recipe:get_equals_recipe_list() +end + +function get_filtred_recipe_list(recipe_list) + local ret_list = {} + local craft_cat_list = get_crafting_categories_list() + + for rec_name, recipe in pairs(recipe_list) do + if Settings.get_val("show-recipes", "categories", recipe.category) then + local cat_list = craft_cat_list[recipe.category] or {} + + for _, cat in pairs(cat_list) do + local add_flag = false + + if cat.type == "player" then + add_flag = true + elseif cat.type == "resource-miner" then + add_flag = true + elseif cat.ingredient_count then + local ing_cnt = 0 + + for _,prot in pairs(recipe.ingredients) do + if prot.type == "item" then + ing_cnt = ing_cnt + 1 + end + end + + if cat.ingredient_count >= ing_cnt then + add_flag = true + end + end + + if add_flag then + if cat.val and Settings.get_val("show-recipes", "buildings", cat.val.name) then + ret_list[rec_name] = recipe + end + end + end + end + end + + return ret_list +end \ No newline at end of file diff --git a/FNEI/utils/entity.lua b/FNEI/utils/entity.lua new file mode 100644 index 00000000..229abea6 --- /dev/null +++ b/FNEI/utils/entity.lua @@ -0,0 +1,78 @@ +if not Item then Item = require "utils/items" end + +local Entity = { + classname = "FNEntity" +} + +local mineable_entity +local nConvert_entity + +function Entity:get_entity_list() + Debug:debug(Entity.classname, "get_entity_list( )") + return game.entity_prototypes or {} +end + +function Entity:get_mineable_entity_list() + Debug:debug(Entity.classname, "get_mineable_entity_list( )") + + if not mineable_entity then + mineable_entity = self:create_mineable_entity(Entity:get_entity_list()) + end + + return mineable_entity or {} +end + +function Entity:get_nConvert_entity_list() + Debug:debug(Entity.classname, "get_nConver_entity_list( )") + + if not nConvert_entity then + nConvert_entity = self:create_nConvert_entity(Entity:get_mineable_entity_list()) + end + + return nConvert_entity or {} +end + +----------------------- secondary function -------------------------- + +function Entity:create_mineable_entity(entity_list) + local ret_tb = {} + + for _,entity in pairs(entity_list) do + if entity.mineable_properties and entity.mineable_properties.products then + ret_tb[entity.name] = entity + end + end + + return ret_tb +end + +function Entity:create_nConvert_entity(entity_list) + local ret_tb = {} + local item_list = Item:get_item_list() + local is_add + + for _,entity in pairs(entity_list) do + if entity.mineable_properties and entity.mineable_properties.products then + local prod = entity.mineable_properties.products + + if #prod > 1 then + is_add = true + elseif #prod == 1 and entity.mineable_properties.products[1] then + local prot = entity.mineable_properties.products[1] + + if prot.type == "fluid" or item_list[prot.name].place_result ~= entity then + is_add = true + end + end + + if is_add == true then + ret_tb[entity.name] = entity + is_add = false + end + end + end + + return ret_tb +end + +return Entity \ No newline at end of file diff --git a/FNEI/utils/fluids.lua b/FNEI/utils/fluids.lua new file mode 100644 index 00000000..2b8f573d --- /dev/null +++ b/FNEI/utils/fluids.lua @@ -0,0 +1,29 @@ +local Fluid = { + classname = "FNFluid" +} + +function Fluid:get_fluid_list() + Debug:debug(Fluid.classname, "get_fluid_list( )") + return game.fluid_prototypes or {} +end + +function Fluid:get_vFluid_list(fluid_list) + Debug:debug(Fluid.classname, "get_vFluid_list_list(", fluid_list and "fluid_list", ")") + return self:create_visible_fluids(fluid_list) +end + +----------------------- secondary function -------------------------- + +function Fluid:create_visible_fluids(fluid_list) + local ret_tb = {} + + for _,fluid in pairs(fluid_list) do + if not fluid.hidden then + ret_tb[fluid.name] = fluid + end + end + + return ret_tb +end + +return Fluid \ No newline at end of file diff --git a/FNEI/utils/items.lua b/FNEI/utils/items.lua new file mode 100644 index 00000000..514fa939 --- /dev/null +++ b/FNEI/utils/items.lua @@ -0,0 +1,51 @@ +local Item = { + classname = "FNItems" +} + +function Item:get_item_list() + Debug:debug(Item.classname, "get_item_list( )") + return game.item_prototypes or {} +end + +function Item:get_fluid_list() + Debug:debug(Item.classname, "get_fluid_list( )") + return game.fluid_prototypes or {} +end + +function Item:get_vItem_list(item_list) + Debug:debug(Item.classname, "get_vItem_list(", item_list and "item_list", ")") + return self:create_visible_items(item_list) +end + +function Item:get_vFluid_list(fluid_list) + Debug:debug(Item.classname, "get_vFluid_list_list(", fluid_list and "fluid_list", ")") + return self:create_visible_fluids(fluid_list) +end + +----------------------- secondary function -------------------------- + +function Item:create_visible_items(item_list) + local ret_tb = {} + + for _,item in pairs(item_list) do + if not item.has_flag("hidden") then + ret_tb[item.name] = item + end + end + + return ret_tb +end + +function Item:create_visible_fluids(fluid_list) + local ret_tb = {} + + for _,fluid in pairs(fluid_list) do + if not fluid.hidden then + ret_tb[fluid.name] = fluid + end + end + + return ret_tb +end + +return Item \ No newline at end of file diff --git a/FNEI/utils/list.lua b/FNEI/utils/list.lua new file mode 100644 index 00000000..1b7d6a0d --- /dev/null +++ b/FNEI/utils/list.lua @@ -0,0 +1,87 @@ +List = { + classname = "FNList", +} + +function List:new( list_name ) + local obj = { + name = list_name, + } + + function obj:get_list() + local gl = Player.get_global() + if not gl["list_" .. self.name] then gl["list_" .. self.name] = {} end + return gl["list_" .. self.name] + end + + function obj:add( elem ) + local list = obj:get_list() + table.insert(list, elem) + end + + function obj:clear() + Player.get_global()["list_" .. self.name] = {} + end + + function obj:contains_elem( elem ) + local list = obj:get_list() + + if elem == nil then + return nil + end + + if type(elem) ~= "table" then + for i,j in pairs(list) do + if j == elem then + return true + end + end + else + for i,j in pairs(list) do + if type(j) == "table" and #j == #elem then + local flag = true + + for ind,val in pairs(j) do + if elem[ind] ~= val then + flag = false + end + end + + if flag then + return true + end + end + end + end + + return false + end + + function obj:remove() + local list = obj:get_list() + if #list > 0 then + table.remove(list, #list) + end + end + + function obj:debug() + for i,j in pairs(self:get_list()) do + out(i,j) + end + end + + function obj:get() + local list = obj:get_list() + if #list > 0 then + return list[#list] + end + end + + function obj:is_empty() + return #obj:get_list() == 0 + end + + setmetatable(obj, self) + self.__index = self; return obj +end + +return List \ No newline at end of file diff --git a/FNEI/utils/open_tech_hook.lua b/FNEI/utils/open_tech_hook.lua new file mode 100644 index 00000000..903217e1 --- /dev/null +++ b/FNEI/utils/open_tech_hook.lua @@ -0,0 +1,20 @@ +TechHook = { + classname = "FNTechHook", +} + +function TechHook.save_cur_fnei_state() + Player.get_global().opened_gui = Controller.get_cur_con_name() +end + +function TechHook.on_gui_closed(event) + out("gui closed", event.gui_type) + if event.gui_type == 2 then + local contr = Player.get_global().opened_gui + + if not Settings.get_val("close-gui-when-tech-open") and Settings.get_val("need-show") and contr then + out("open old gui", contr) + Controller.open_event(contr) + Player.get_global().opened_gui = nil + end + end +end \ No newline at end of file diff --git a/FNEI/utils/paging.lua b/FNEI/utils/paging.lua new file mode 100644 index 00000000..9fec0f72 --- /dev/null +++ b/FNEI/utils/paging.lua @@ -0,0 +1,134 @@ +Page = { + classname = "FNPage", +} + +function Page:new(page_name, gui_name, num_per_page, forward_func, back_func) + + local obj = { + page_name = page_name, + num_per_page = num_per_page, + forward_func = forward_func, + back_func = back_func, + } + + function init() + Events.add_custom_event(gui_name, "sprite-button", obj.page_name .. "-forward", obj.page_forward_event) + Events.add_custom_event(gui_name, "sprite-button", obj.page_name .. "-back", obj.page_back_event) + end + + function obj:get_page_global() + local global = Player.get_global() + if not global["page-" .. page_name] then global["page-" .. page_name] = {} end + return global["page-" .. page_name] + end + + function obj:get_cur_page() + return obj:get_page_global().cur_page or 1 + end + + function obj:set_cur_page(val) + local max_page = self:amount_page() + if max_page < 1 then max_page = 1 end + local gl_page = obj:get_page_global() + + if val < 1 then + gl_page.cur_page = max_page + elseif val > max_page then + gl_page.cur_page = 1 + else + gl_page.cur_page = val + end + end + + function obj:amount_page() + return math.ceil(#obj:get_page_list() / self.num_per_page) + end + + function obj:set_page_list(item_list) + self:get_page_global().list = item_list + + --set new cur_page + local max_tab = self:amount_page() + local cur_tab = self:get_cur_page() + if cur_tab > max_tab then + obj:set_cur_page(max_tab) + end + end + + function obj:get_page_list() + return self:get_page_global().list or {} + end + + function obj:get_list_for_tab(tab_namber) + if tab_namber < 1 and tab_namber > obj:amount_page() then + return {} + end + local src_list = obj:get_page_list() + local ret_list = {} + + local beg_ind = (tab_namber - 1) * self.num_per_page + 1 + local end_ind = math.min(tab_namber * self.num_per_page, #src_list) + + for i = beg_ind, end_ind do + table.insert(ret_list, src_list[i]) + end + + return ret_list + end + + function obj:draw_forward_arrow( parent ) + for _, gui in pairs(parent.children) do + if gui and gui.valid then + gui.destroy() + end + end + + Gui.add_sprite_button(parent, { type = "sprite-button", name = self.page_name .. "-forward", style = "fnei_right_arrow_button_style" }) + end + + function obj:draw_back_arrow( parent ) + for _, gui in pairs(parent.children) do + if gui and gui.valid then + gui.destroy() + end + end + + Gui.add_sprite_button(parent, { type = "sprite-button", name = self.page_name .. "-back", style = "fnei_left_arrow_button_style" }) + end + + function obj.page_forward_event(event, name) + if event.control then + obj:set_cur_page(obj:get_cur_page() + 5) + elseif event.alt then + obj:set_cur_page(obj:amount_page()) + elseif event.shift then + obj:set_cur_page(obj:get_cur_page() + 10) + else + obj:set_cur_page(obj:get_cur_page() + 1) + end + + if obj.forward_func then + obj.forward_func(event, tab_name) + end + end + + function obj.page_back_event(event, name) + if event.control then + obj:set_cur_page(obj:get_cur_page() - 5) + elseif event.alt then + obj:set_cur_page(1) + elseif event.shift then + obj:set_cur_page(obj:get_cur_page() - 10) + else + obj:set_cur_page(obj:get_cur_page() - 1) + end + + if obj.back_func then + obj.back_func(event, tab_name) + end + end + + init() + setmetatable(obj, self) + self.__index = self; return obj +end \ No newline at end of file diff --git a/FNEI/utils/raw_technologies.lua b/FNEI/utils/raw_technologies.lua new file mode 100644 index 00000000..c0bac2c0 --- /dev/null +++ b/FNEI/utils/raw_technologies.lua @@ -0,0 +1,47 @@ +local RawTech = { + classname = "FNRawTech" +} + +local dep_tech + +function RawTech:get_tech_list() + Debug:debug(RawTech.classname, "get_tech_list( )") + return Player.get().force.technologies or {} +end + +function RawTech:get_recipe_list_in_tech_dependencies() + -- Debug:debug(RawTech.classname, "get_recipe_in_tech_dependencies( )") + + if not dep_tech then + dep_tech = self:create_tech_dependencies(RawTech:get_tech_list()) + end + + return dep_tech +end +----------------------------- secondary fanction -------------------------------- + +function RawTech:create_tech_dependencies(tech_list) + local ret_tb = {} + + for _,tech in pairs(tech_list) do + for _,modifier in pairs(tech.effects) do + if modifier.type == "unlock-recipe" then + if not ret_tb[modifier.recipe] then + ret_tb[modifier.recipe] = {} + end + local flag = true + for _,d_tech in pairs(ret_tb[modifier.recipe]) do + if d_tech.name == tech.name then + flag = false + end + end + if flag then + table.insert(ret_tb[modifier.recipe], tech) + end + end + end + end + return ret_tb +end + +return RawTech \ No newline at end of file diff --git a/FNEI/utils/recipe_list.lua b/FNEI/utils/recipe_list.lua new file mode 100644 index 00000000..5865c0ab --- /dev/null +++ b/FNEI/utils/recipe_list.lua @@ -0,0 +1,220 @@ +if not RawTech then RawTech = require "utils/raw_technologies" end + +local Recipe = { + classname = "FNRecipe" +} + +function Recipe:get_recipe_list() + Debug:debug(Recipe.classname, "get_recipe_list( )") + + local proto = Player.get().force.recipes or {} + local recipes = {} + + for name, recipe in pairs(proto) do + recipes[name] = recipe + end + + Recipe:append_implicit_recipes(recipes) + return recipes +end + +--return a list of technologies that can open this recipe_name or {} +function Recipe:get_technologies_for_recipe(recipe_name) + Debug:debug(Recipe.classname, "get_technology_for_recipe(", recipe_name, ")") + return RawTech:get_recipe_list_in_tech_dependencies()[recipe_name] or {} +end + +function Recipe:get_vRecipe_list(recipe_list) + Debug:debug(Recipe.classname, "get_technology_for_recipe(", recipe_list and "recipe_list", item_list and "item_list", ")") + return self:create_visible_recipes(recipe_list) +end + +function Recipe:get_enRecipe_list(recipe_list) + Debug:debug(Recipe.classname, "get_enRecipe_list(", recipe_list and "recipe_list", ")") + return self:create_enable_recipes(recipe_list) +end + +function Recipe:get_equals_recipe_list() + Debug:debug(Recipe.classname, "get_equals_recipe_list()") + + if not global.fnei.eqRecipe then + global.fnei.eqRecipe = self:create_equals_recipe_list() + end + + return global.fnei.eqRecipe +end + +----------------------- secondary function -------------------------- + +function Recipe:append_implicit_recipes(into) + + -- Utility to remove the duplicated impostor recipe baseline + local function add_impostor(name) + local recipe = { + name = name, + + enabled = true, + hidden = false, + impostor = true, + + ingredients = {}, + products = {}, + + energy = 1 + } + + into[name] = recipe + + return recipe + end + + for _, proto in pairs(game.entity_prototypes) do + + -- Create impostor recipes for items 'mined' from entities + if proto.mineable_properties and proto.resource_category then + local recipe = add_impostor('impostor-minable:' .. proto.name) + + recipe.localised_name = get_localised_name(proto) + recipe.category = "mine " .. proto.resource_category + + recipe.ingredients = {{ type = 'entity', name = proto.name, amount = 1 }} + recipe.products = proto.mineable_properties.products or {} + + -- Required for crafting time estimates + recipe.mining_time = proto.mineable_properties.mining_time + + if proto.mineable_properties.required_fluid then + table.insert(recipe.ingredients, { + type = 'fluid', + name = proto.mineable_properties.required_fluid, + amount = proto.mineable_properties.fluid_amount + }) + end + end + + -- Create impostor recipes for entities that produce a certain fluid/item unconditionally + if proto.fluid then + local recipe = add_impostor('impostor-pumped:' .. proto.name) + + recipe.localised_name = get_localised_name(proto) + recipe.category = "pump " .. proto.name + + recipe.products = {{ type = 'fluid', name = proto.fluid.name, amount = 1 }} + end + end + + -- Impostor recipes are added to the parameter table + return +end + +function Recipe:create_equals_recipe_list() + local recipes = game.recipe_prototypes + local ret_buf = {} + local raw_tech = game.technology_prototypes + + for _, tech in pairs(raw_tech) do + local n_recipes = {} + local s_recipes = {} + + for _,effect in pairs(tech.effects) do + if effect.type == "unlock-recipe" then + local recipe = recipes[effect.recipe] + n_recipes[recipe.name] = recipe + end + end + + for name,recipe in pairs(n_recipes) do + for s_name, s_recipe in pairs(s_recipes) do + if Recipe:compare(recipe, s_recipe) then + if not ret_buf[name] then ret_buf[name] = {} end + table.insert(ret_buf[name], s_recipe) + if not ret_buf[s_name] then ret_buf[s_name] = {} end + table.insert(ret_buf[s_name], recipe) + end + end + s_recipes[name] = recipe + end + end + + return ret_buf +end + +local tech_dep + +function Recipe:compare(recipe, s_recipe) + if recipe.energy == s_recipe.energy and recipe.category == s_recipe.category then + if Recipe:compare_recipe_prot(recipe.ingredients, s_recipe.ingredients) and + Recipe:compare_recipe_prot(recipe.products, s_recipe.products) + then + if not tech_dep then + tech_dep = RawTech:create_tech_dependencies(game.technology_prototypes) + end + return Recipe:compare_tech_prot(tech_dep[recipe.name], tech_dep[s_recipe.name]) + end + end + return false +end + +function Recipe:compare_recipe_prot(list1, list2) + if #list1 ~= #list2 then return false end + + for _,prot1 in pairs(list1) do + local flag = false + + for _,prot2 in pairs(list2) do + local flag2 = true + + for name, val in pairs(prot1) do + flag2 = flag2 and (prot2[name] == val) + end + if flag2 then flag = true end + end + if not flag then return false end + end + + return true +end + +function Recipe:compare_tech_prot(list1, list2) + if #list1 ~= #list2 then return false end + + for _,prot1 in pairs(list1) do + local flag = false + + for _,prot2 in pairs(list2) do + if prot1.name == prot2.name then + flag = true + end + end + + if not flag then return false end + end + + return true +end + +function Recipe:create_visible_recipes(recipe_list) + local ret_tb = {} + + for _,recipe in pairs(recipe_list) do + if not recipe.hidden then + ret_tb[recipe.name] = recipe + end + end + + return ret_tb +end + +function Recipe:create_enable_recipes(recipe_list) + local ret_tb = {} + + for _,recipe in pairs(recipe_list) do + if recipe.enabled then + ret_tb[recipe.name] = recipe + end + end + + return ret_tb +end + +return Recipe \ No newline at end of file diff --git a/FNEI/utils/tabs/gui_tabs.lua b/FNEI/utils/tabs/gui_tabs.lua new file mode 100644 index 00000000..c126df7b --- /dev/null +++ b/FNEI/utils/tabs/gui_tabs.lua @@ -0,0 +1,28 @@ + +local GuiTabs = { + classname = "FNGuiTabs", +} + +function GuiTabs.draw_tabs(parent_name, tabs) + local parent = Gui.get_gui(Gui.get_pos(), parent_name) + if not(parent and parent.valid) then + Debug:error("Error in function GuiTabs: draw_tabs: parent == nil") + return + end + + for _, gui in pairs(parent.children) do + if gui and gui.valid then + gui.destroy() + end + end + + for _,tb_name in pairs(tabs.tabs) do + local style = tabs.dis_style + if tb_name == tabs:get_cur_tab() then + style = tabs.en_style + end + + Gui.add_sprite_button(parent, { type = "sprite-button", name = tabs.tab_name .. "-" .. tb_name, style = style, tooltip = {"fnei." .. tb_name}, caption = {"fnei." .. tb_name},}) + end + end +return GuiTabs \ No newline at end of file diff --git a/FNEI/utils/tabs/tabs.lua b/FNEI/utils/tabs/tabs.lua new file mode 100644 index 00000000..987db3d1 --- /dev/null +++ b/FNEI/utils/tabs/tabs.lua @@ -0,0 +1,61 @@ +Tabs = { + classname = "FNTabs", +} + +local GuiTabs = require "utils/tabs/gui_tabs" + +function Tabs:new(tab_name, gui_name, tabs_list, en_style, dis_style, func) + + local obj = { + tab_name = tab_name, + tabs = tabs_list, + en_style = en_style, + dis_style = dis_style, + func = func + } + + function init() + for val,tab in pairs(tabs_list) do + Events.add_custom_event(gui_name, "sprite-button", tab_name .. "-" .. tab, obj.tab_event) + end + end + + function obj:get_tab_global() + local global = Player.get_global() + if not global.tabs then global.tabs = {} end + return global.tabs + end + + function obj:get_cur_tab() + return self:get_tab_global()[self.tab_name] or self.tabs[1] + end + + function obj:set_cur_tab(val) + local global = self:get_tab_global() + global[self.tab_name] = val + self:draw_tabs() + end + + function obj:get_tabs_list() + return self.tabs + end + + function obj:draw_tabs() + GuiTabs.draw_tabs(self.tab_name, self) + end + + function obj.tab_event(event, name) + local _,pos = string.find(name, string.gsub(obj.tab_name, "%p", "%%%0")) + local tab_name = string.sub(name, pos + 2) + + obj:set_cur_tab(tab_name) + + if obj.func then + obj.func(event, tab_name) + end + end + + init() + setmetatable(obj, self) + self.__index = self; return obj +end \ No newline at end of file diff --git a/FNEI/utils/translate.lua b/FNEI/utils/translate.lua new file mode 100644 index 00000000..824855fc --- /dev/null +++ b/FNEI/utils/translate.lua @@ -0,0 +1,33 @@ + +local version = 1 +local registry = nil + +function translate(name, type) + + -- Initialize translator registry in a pluggable way + if not registry then + registry = {} + + for mod, _ in pairs(remote.interfaces) do + if string.find(mod, '^locale%-search') and remote.call(mod, "version") == version then + table.insert(registry, mod) + end + end + + table.sort(registry) + end + + -- Ask translator services + for _, mod in ipairs(registry) do + local value = remote.call(mod, "translate", name, type) + + if value then + return value + end + end + + -- No translation available + return nil +end + +return translate \ No newline at end of file diff --git a/FNEI/utils/utils.lua b/FNEI/utils/utils.lua new file mode 100644 index 00000000..fc13d979 --- /dev/null +++ b/FNEI/utils/utils.lua @@ -0,0 +1,26 @@ +function get_localised_name( element ) + return element and (element.localised_name or element.name) +end + +function round(num, idp) + local mult = 10^(idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +function round_to_str(num, idp) + local val = 0 + if (num > 1000000 or (num < 0.001 and num > 0)) then + val = string.format("%1.1e", num) + else + val = round(num, idp) + end + return val +end + +function clear_gui(parent) + for _, gui in pairs(parent.children) do + if gui and gui.valid then + gui.destroy() + end + end +end \ No newline at end of file diff --git a/FNEI_0.4.2.zip b/FNEI_0.4.2.zip deleted file mode 100644 index 28f5a420..00000000 Binary files a/FNEI_0.4.2.zip and /dev/null differ diff --git a/FOST_2.0.3.zip b/FOST_2.0.3.zip deleted file mode 100644 index 3822b3b3..00000000 Binary files a/FOST_2.0.3.zip and /dev/null differ diff --git a/FactorySearch/.github/workflows/publish.yml b/FactorySearch/.github/workflows/publish.yml new file mode 100644 index 00000000..9a010d51 --- /dev/null +++ b/FactorySearch/.github/workflows/publish.yml @@ -0,0 +1,11 @@ +on: push +name: Publish +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Publish Mod + uses: danbka33/factorio-mod-portal-publish@master + env: + FACTORIO_MOD_API_KEY: ${{ secrets.FACTORIO_MOD_API_KEY }} diff --git a/FactorySearch/.gitignore b/FactorySearch/.gitignore new file mode 100644 index 00000000..0d2a1c21 --- /dev/null +++ b/FactorySearch/.gitignore @@ -0,0 +1,2 @@ +*.zip +.DS_Store \ No newline at end of file diff --git a/FactorySearch/LICENSE b/FactorySearch/LICENSE new file mode 100644 index 00000000..f569ae9a --- /dev/null +++ b/FactorySearch/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Tom Burrows + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/FactorySearch_1.10.14/README.md b/FactorySearch/README.md similarity index 100% rename from FactorySearch_1.10.14/README.md rename to FactorySearch/README.md diff --git a/FactorySearch_1.10.14/changelog.txt b/FactorySearch/changelog.txt similarity index 100% rename from FactorySearch_1.10.14/changelog.txt rename to FactorySearch/changelog.txt diff --git a/FactorySearch/control.lua b/FactorySearch/control.lua new file mode 100644 index 00000000..f6c12fde --- /dev/null +++ b/FactorySearch/control.lua @@ -0,0 +1,131 @@ +util = require "__core__.lualib.util" +event = require "scripts.event" +CustomInput = require "scripts.custom-input" +Search = require "scripts.search" +SearchResults = require "scripts.search-results" +ResultLocation = require "scripts.result-location" +Gui = require "scripts.gui" +require "scripts.remote" + +function filtered_surfaces(override_surface, player_surface) + if override_surface then + return {player_surface} + end + + -- Skip certain modded surfaces that won't have assemblers/chests placed on them + local surfaces = {} + for _, surface in pairs(game.surfaces) do + local surface_name = surface.name + if string.sub(surface_name, -12) ~= "-transformer" -- Power Overload + and string.sub(surface_name, 1, 17) ~= "nullius-landfill-" -- Nullius + and string.sub(surface_name, 0, 8) ~= "starmap-" -- Space Exploration + and string.sub(surface_name, 0, 15) ~= "EE_TESTSURFACE_" -- Editor Extensions + and string.sub(surface_name, 0, 10) ~= "BPL_TheLab" -- Blueprint Designer Lab + and string.sub(surface_name, 0, 9) ~= "bpsb-lab-" -- Blueprint Sandboxes + and surface.name ~= "IR-limbo" -- Industrial Revolution 2/3 + and surface_name ~= "aai-signals" -- AAI Signals + and surface_name ~= "secret_companion_surface_please_dont_touch" -- Companion Drones + then + table.insert(surfaces, surface) + end + end + return surfaces +end + +local function update_surface_count() + -- Hides 'All surfaces' button + local multiple_surfaces = #filtered_surfaces() > 1 + + if multiple_surfaces ~= global.multiple_surfaces then + for _, player_data in pairs(global.players) do + local all_surfaces = player_data.refs.all_surfaces + all_surfaces.visible = multiple_surfaces + end + end + + global.multiple_surfaces = multiple_surfaces +end + +script.on_event({defines.events.on_surface_created, defines.events.on_surface_deleted}, update_surface_count) + +local function generate_item_to_entity_table() + -- Make map of {item_name -> list[entity_name]} + -- First try items_to_place_this, then mineable_properties + -- Exception in mineable_properties is we don't want to include entity_name when type == "simple-entity" if item_name is a resource + -- This prevents things like rocks showing when searching for stone + + local resource_prototypes = game.get_filtered_entity_prototypes({{filter = "type", type = "resource"}}) + local is_resource = {} + for _, resource in pairs(resource_prototypes) do + is_resource[resource.name] = true + end + + + local prototypes = game.get_filtered_entity_prototypes({}) + -- Filter out rocks + local item_to_entities = {} + for _, prototype in pairs(prototypes) do + local items_to_place_this = prototype.items_to_place_this + if items_to_place_this then + for _, item in pairs(items_to_place_this) do + local item_name = item.name + local associated_entities = item_to_entities[item_name] or {} + table.insert(associated_entities, prototype.name) + item_to_entities[item_name] = associated_entities + end + else + local properties = prototype.mineable_properties + if properties.minable and properties.products then + for _, item in pairs(prototype.mineable_properties.products) do + local item_name = item.name + if prototype.type ~= "simple-entity" or not is_resource[item_name] then + local associated_entities = item_to_entities[item_name] or {} + table.insert(associated_entities, prototype.name) + item_to_entities[item_name] = associated_entities + end + end + end + end + end + + -- Hardcode some Pyanodons associations + if game.active_mods["pypetroleumhandling"] then + -- or {} in case something removed those items or playing an older version of Py + table.insert(item_to_entities["raw-gas"] or {}, "bitumen-seep") + table.insert(item_to_entities["tar"] or {}, "bitumen-seep") + table.insert(item_to_entities["crude-oil"] or {}, "bitumen-seep") + end + + global.item_to_entities = item_to_entities +end + +script.on_init( + function() + global.players = {} + global.current_searches = {} + global.multiple_surfaces = false + update_surface_count() + generate_item_to_entity_table() + end +) + +script.on_configuration_changed( + function() + -- Destroy all GUIs + for player_index, player_data in pairs(global.players) do + local player = game.get_player(player_index) + if player then + Gui.destroy(player, player_data) + else + global.players[player_index] = nil + end + end + + -- Stop in-progress non-blocking searches + global.current_searches = {} + + global.multiple_surfaces = false + update_surface_count() + generate_item_to_entity_table() + end +) \ No newline at end of file diff --git a/FactorySearch_1.10.14/data-updates.lua b/FactorySearch/data-updates.lua similarity index 100% rename from FactorySearch_1.10.14/data-updates.lua rename to FactorySearch/data-updates.lua diff --git a/FactorySearch_1.10.14/data.lua b/FactorySearch/data.lua similarity index 100% rename from FactorySearch_1.10.14/data.lua rename to FactorySearch/data.lua diff --git a/FactorySearch/graphics/character-corpse.png b/FactorySearch/graphics/character-corpse.png new file mode 100644 index 00000000..bf0b12bf Binary files /dev/null and b/FactorySearch/graphics/character-corpse.png differ diff --git a/flib_0.13.0/graphics/frame-action-icons.png b/FactorySearch/graphics/frame-action-icons.png similarity index 100% rename from flib_0.13.0/graphics/frame-action-icons.png rename to FactorySearch/graphics/frame-action-icons.png diff --git a/FactorySearch/graphics/location-arrow.png b/FactorySearch/graphics/location-arrow.png new file mode 100644 index 00000000..61444b7c Binary files /dev/null and b/FactorySearch/graphics/location-arrow.png differ diff --git a/FactorySearch/graphics/search-black.png b/FactorySearch/graphics/search-black.png new file mode 100644 index 00000000..938f9e4b Binary files /dev/null and b/FactorySearch/graphics/search-black.png differ diff --git a/FactorySearch/graphics/search-white.png b/FactorySearch/graphics/search-white.png new file mode 100644 index 00000000..11a09a9e Binary files /dev/null and b/FactorySearch/graphics/search-white.png differ diff --git a/FactorySearch_1.10.14/info.json b/FactorySearch/info.json similarity index 100% rename from FactorySearch_1.10.14/info.json rename to FactorySearch/info.json diff --git a/FactorySearch/locale/cs/FactorySearch.cfg b/FactorySearch/locale/cs/FactorySearch.cfg new file mode 100644 index 00000000..e14eb67b --- /dev/null +++ b/FactorySearch/locale/cs/FactorySearch.cfg @@ -0,0 +1,18 @@ +[mod-name] + +[shortcut-name] + +[controls] + +[mod-setting-name] + +[mod-setting-description] + +[string-mod-setting] +fs-non-blocking-search-on=Zapnuto +fs-non-blocking-search-off=Vypnuto + +[search-gui] +keep-open=Nechat otevΕ™enΓ© + + diff --git a/FactorySearch/locale/de/FactorySearch.cfg b/FactorySearch/locale/de/FactorySearch.cfg new file mode 100644 index 00000000..91a65819 --- /dev/null +++ b/FactorySearch/locale/de/FactorySearch.cfg @@ -0,0 +1,67 @@ +[mod-name] +FactorySearch=Fabriksuche + +[shortcut-name] +search-factory=Fabrik durchsuchen + +[controls] +search-factory=Fabrik durchsuchen +open-search-prototype=Fabrik nach ausgewΓ€hlten Objekten durchsuchen + +[mod-setting-name] +fs-non-blocking-search=Hintergrundsuche +fs-chunks-per-tick=Chunks pro Tick +fs-initial-zoom=Zoomstufe +fs-clear-highlights-with-gui=Hervorhebungen beim Schließen der Schnittstelle lΓΆschen +fs-highlight-duration=Hervorhebungsdauer + +[mod-setting-description] +fs-non-blocking-search=Die Suche dauert viel lΓ€nger, aber friert das Spiel nicht ein. +fs-chunks-per-tick=Hat nur einen Effekt, wenn die Hintergrundsuche aktiviert ist.\nVerringern wird die Suche verlangsamen, wird aber die Leistung wΓ€hrend der Suche verbessern. +fs-initial-zoom=Die Zoomstufe, um Ergebnisse zu ΓΆffnen. Ein grâßerer Wert zoomt weiter in die Karte rein.\nNormalerweise zwischen [font=default-semibold]0.3[/font] und [font=default-semibold]3[/font]. +fs-clear-highlights-with-gui=Markierungsfelder und Pfeile entfernen, wenn die Schnittstelle geschlossen wird. +fs-highlight-duration=Anzahl Sekunden, fΓΌr die die Umrandung und Pfeile hervorgehoben werden.\n[font=default-semibold]0[/font] bedeutet [font=default-semibold]unendlich[/font]. + +[string-mod-setting] +fs-non-blocking-search-on=An +fs-non-blocking-search-multiplayer=Nur Mehrspieler +fs-non-blocking-search-off=Aus + +[search-gui] +keep-open=GeΓΆffnet lassen +all-surfaces=Alle OberflΓ€chen +explanation=WΓ€hle gesuchtes Item +no-results=Keine Ergebnisse gefunden +incorrect-config=Es muss mindestens eine Checkbox ausgewΓ€hlt sein +searching=Suche lΓ€uft... +searching-tooltip=__1__ ist aktiviert, sodass die Suche eine lange Zeit dauern kann, aber das Spiel kann wΓ€hrend der Suche gespielt werden. +wrong-surface=Karte kann nicht auf einer anderen OberflΓ€che geΓΆffnet werden +invalid-item=AusgewΓ€hltes Objekt muss ein Element, eine FlΓΌssigkeit oder ein Signal sein +distance-tooltip=Entfernung +module-count-tooltip=Anzahl der Module +request-count-tooltip=Anzahl der Anfragen +signal-count-tooltip=Anzahl der Signale +consumers-name=Komponente +producers-name=Produkt +storage-name=Lager +logistics-name=Logistik +modules-name=Module +requesters-name=Anfrage +ground-items-name=Boden +entities-name=EntitΓ€t +signals-name=Signal +map-tags-name=Schlagwort +consumers-tooltip=Suche nach Maschinen, die dieses Item verbrauchen, entweder als Zutat, Kraftstoff oder Munition\n(z.B. __1__) +producers-tooltip=Suche nach Maschinen, die dieses Item produzieren\n(z.B. __1__) +storage-tooltip=Suche nach Containern, die dieses Item beinhalten\n(z.B. __1__) +logistics-tooltip=Suche nach Logistik EntitΓ€ten, die diesen Artikel transportieren\n(z. B. __1__) +modules-tooltip=Suche nach Maschinen, die dieses Modul verwenden\n(z.B. __1__) +requesters-tooltip=Suche nach Logistikcontainern, die diesen Gegenstand anfordern \n(z.B. __1__ und Maschinen, die Module anfordern) +ground-items-tooltip=Suche nach diesem Gegenstand am Boden +entities-tooltip=Suche nach erstellten Einheiten dieses Gegenstandes, einschließlich Ressourcenfelder +signals-tooltip=Suche nach EntitΓ€ten, die dieses Signal senden +map-tags-tooltip=Suche nach Tags auf der Karte mit diesem Symbol +default-map-tag-name=Kartentag +result-tooltip=[font=default-semibold][color=255, 230, 192]__ALT_CONTROL__1__build__ um den Standort in der Karte zu ΓΆffnen.\n__ALT_CONTROL__1__mine__ um den Standort hervorzuheben.[/color][/font] + + diff --git a/FactorySearch_1.10.14/locale/en/FactorySearch.cfg b/FactorySearch/locale/en/FactorySearch.cfg similarity index 100% rename from FactorySearch_1.10.14/locale/en/FactorySearch.cfg rename to FactorySearch/locale/en/FactorySearch.cfg diff --git a/FactorySearch/locale/es-ES/FactorySearch.cfg b/FactorySearch/locale/es-ES/FactorySearch.cfg new file mode 100644 index 00000000..7d5692e5 --- /dev/null +++ b/FactorySearch/locale/es-ES/FactorySearch.cfg @@ -0,0 +1,24 @@ +[mod-name] +FactorySearch=Buscador de FΓ‘brica + +[shortcut-name] +search-factory=Buscar en la fabrica + +[controls] +search-factory=Buscar en la fΓ‘brica +open-search-prototype=Buscar en la fΓ‘brica el objeto seleccionado + +[mod-setting-name] +fs-non-blocking-search=BΓΊsqueda en segundo plano +fs-initial-zoom=Nivel de zoom +fs-clear-highlights-with-gui=Borrar resaltados al cerrar la interfaz +fs-highlight-duration=DuraciΓ³n del resaltado + +[mod-setting-description] +fs-non-blocking-search=La bΓΊsqueda tarda mucho mΓ‘s tiempo, pero no congela el juego. + +[string-mod-setting] + +[search-gui] + + diff --git a/FactorySearch/locale/fr/FactorySearch.cfg b/FactorySearch/locale/fr/FactorySearch.cfg new file mode 100644 index 00000000..7b24b9b6 --- /dev/null +++ b/FactorySearch/locale/fr/FactorySearch.cfg @@ -0,0 +1,63 @@ +[mod-name] +FactorySearch=Factory Search (Recherche d'usine) + +[shortcut-name] +search-factory=Recherche d'usine + +[controls] +search-factory=Recherche d'usine +open-search-prototype=Recherche de l'usine pour l'objet sΓ©lectionnΓ© + +[mod-setting-name] +fs-non-blocking-search=Recherche en fond +fs-initial-zoom=Niveau de zoom +fs-clear-highlights-with-gui=Mises en Γ©vidence claires lors de la fermeture de l'interface +fs-highlight-duration=DurΓ©e des mises en Γ©vidence + +[mod-setting-description] +fs-non-blocking-search=La recherche prend beaucoup plus de temps mais ne fige pas le jeu. +fs-clear-highlights-with-gui=Supprimer les cases de surbrillance et les flΓ¨ches lorsque l'interface est fermΓ©e. + +[string-mod-setting] +fs-non-blocking-search-on=ActivΓ© +fs-non-blocking-search-multiplayer=Uniquement en mode multijoueur +fs-non-blocking-search-off=DΓ©sactivΓ© + +[search-gui] +keep-open=Garder ouvert +all-surfaces=Toutes les surfaces +explanation=SΓ©lectionnez un objet Γ  rechercher +no-results=Aucun rΓ©sultat trouvΓ© +incorrect-config=Au moins une case Γ  cocher doit Γͺtre sΓ©lectionnΓ©e +searching=Recherche... +searching-tooltip=__1__ est activΓ©, la recherche peut donc prendre du temps, mais le jeu peut se poursuivre pendant la recherche. +wrong-surface=Impossible d'ouvrir la carte sur une autre surface +invalid-item=L'objet sΓ©lectionnΓ© doit Γͺtre un objet, un fluide ou un signal +distance-tooltip=Distance +module-count-tooltip=Nombre de modules +request-count-tooltip=Nombre de demandes +signal-count-tooltip=Nombre de signaux +consumers-name=IngrΓ©dient +producers-name=Produit +storage-name=Stockage +logistics-name=Logistique +modules-name=Module +requesters-name=Demande +ground-items-name=Sol +entities-name=EntitΓ© +signals-name=Signal +map-tags-name=Γ‰tiquette +consumers-tooltip=Rechercher les machines qui consomment cet objet, soit comme ingrΓ©dient, comme carburant ou comme munition.\n(par exemple : __1__) +producers-tooltip=Rechercher les machines qui produisent cet objet\n(par exemple : __1__) +storage-tooltip=Rechercher les conteneurs qui contiennent cet objet\n(par exemple : __1__) +logistics-tooltip=Rechercher les entitΓ©s logistiques qui transportent cet objet\n(par exemple : __1__) +modules-tooltip=Rechercher les machines qui utilisent ce module\n(par exemple : __1__) +requesters-tooltip=Rechercher les conteneurs logistiques qui demandent cet objet.\n(par exemple : __1__ et les machines demandant des modules) +ground-items-tooltip=Rechercher cet objet au sol +entities-tooltip=Rechercher les entitΓ©s construites de cet objet, y coompris les gisements de ressources +signals-tooltip=Rechercher les entitΓ©s qui envoient ce signal +map-tags-tooltip=Recherchez les Γ©tiquettes sur la carte qui ont cette icΓ΄ne +default-map-tag-name=Γ‰tiquette de la carte +result-tooltip=[font=default-semibold][color=255, 230, 192]__ALT_CONTROL__1__build__ pour ouvrir l'emplacement sur la carte.\n__ALT_CONTROL__1__mine__ pour mettre en Γ©vidence l'emplacement.[/color][/font] + + diff --git a/FactorySearch/locale/ja/FactorySearch.cfg b/FactorySearch/locale/ja/FactorySearch.cfg new file mode 100644 index 00000000..bdc37b39 --- /dev/null +++ b/FactorySearch/locale/ja/FactorySearch.cfg @@ -0,0 +1,66 @@ +[mod-name] + +[shortcut-name] +search-factory=ε·₯ε ΄γ‚’ζ€œη΄’ + +[controls] +search-factory=ε·₯ε ΄γ‚’ζ€œη΄’ +open-search-prototype=ιΈζŠžγ—γŸγ‚ͺγƒ–γ‚Έγ‚§γ‚―γƒˆγ‚’ε·₯ε ΄γ‹γ‚‰ζ€œη΄’ + +[mod-setting-name] +fs-non-blocking-search=γƒγƒƒγ‚―γ‚°γƒ©γ‚¦γƒ³γƒ‰γ§ζ€œη΄’ +fs-chunks-per-tick=Tickγ‚γŸγ‚Šγζ€œη΄’チャンク数 +fs-initial-zoom=拑倧レベル +fs-clear-highlights-with-gui=UIγ‚’ι–‰γ˜γ‚‹γ¨γγ«γƒγ‚€γƒ©γ‚€γƒˆγ‚’ζΆˆεŽ» +fs-highlight-duration=γƒγ‚€γƒ©γ‚€γƒˆθ‘¨η€Ίζ™‚ι–“ + +[mod-setting-description] +fs-non-blocking-search=ζ€œη΄’γ«ζ™‚ι–“γŒγ‹γ‹γ‚ŠγΎγ™γŒγ‚²γƒΌγƒ γ―ζ­’γΎγ‚ŠγΎγ›γ‚“γ€‚ +fs-chunks-per-tick=γƒγƒƒγ‚―γ‚°γƒ©γ‚¦γƒ³γƒ‰ζ€œη΄’γŒζœ‰εŠΉγͺ場合γγΏεŠΉζžœγŒγ‚γ‚ŠγΎγ™γ€‚\n小さγͺε€€γ«γ™γ‚‹γ¨ζ€œη΄’γ―ι…γγͺγ‚ŠγΎγ™γŒγ€ζ€œη΄’δΈ­γγƒ‘γƒ•γ‚©γƒΌγƒžγƒ³γ‚ΉγŒε‘δΈŠγ—γΎγ™γ€‚ +fs-initial-zoom=η΅ζžœγ‚’ι–‹γζ‹‘ε€§γƒ¬γƒ™γƒ«γ€‚ε€€γ‚’ε€§γγγ™γ‚‹γ»γ©γ‚ΊγƒΌγƒ γ‚€γƒ³γ—γΎγ™γ€‚\nι€šεΈΈγ―[font=default-semibold]0.3[/font] と [font=default-semibold]3[/font] γι–“。 +fs-clear-highlights-with-gui=UIγŒι–‰γ˜γ‚‰γ‚Œγ¦γ‚‹γ¨γγ«γƒγ‚€γƒ©γ‚€γƒˆγƒœγƒƒγ‚―γ‚Ήγ¨ηŸ’ε°γ‚’ζΆˆεŽ»γ—γΎγ™γ€‚ +fs-highlight-duration=γƒγ‚€γƒ©γ‚€γƒˆγƒœγƒƒγ‚―γ‚Ήγ¨ηŸ’ε°γŒε­˜εœ¨γ™γ‚‹η§’ζ•°γ€‚\n[font=default-semibold]0[/font]は[font=default-semibold]焑限[/font]を意味します。 + +[string-mod-setting] +fs-non-blocking-search-on=ζœ‰εŠΉ +fs-non-blocking-search-multiplayer=γƒžγƒ«γƒγƒ—γƒ¬γ‚€ζ™‚γγΏ +fs-non-blocking-search-off=γ‚ͺフ + +[search-gui] +keep-open=ι–‹γ„γŸγΎγΎγ«γ™γ‚‹ +all-surfaces=ε…¨γ‚΅γƒΌγƒ•γ‚£γ‚Ήγ‚’ζ€œη΄’ +explanation=ζ€œη΄’γ™γ‚‹γ‚’γ‚€γƒ†γƒ γ‚’ιΈζŠž +no-results=怜紒硐果γͺし +incorrect-config=ε°‘γͺくとも1぀γγƒγ‚§γƒƒγ‚―γƒœγƒƒγ‚―γ‚Ήγ‚’ιΈζŠžγ™γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™ +searching=ζ€œη΄’δΈ­β€¦ +searching-tooltip=__1__γŒζœ‰εŠΉγ«γͺγ£γ¦γ„γ‚‹γŸγ‚γ€ζ€œη΄’γ«ζ™‚ι–“γŒγ‹γ‹γ‚‹ε ΄εˆγŒγ‚γ‚ŠγΎγ™γŒγ€ζ€œη΄’δΈ­γ‚‚γ‚²γƒΌγƒ γ‚’γƒ—γƒ¬γ‚€γ§γγΎγ™γ€‚ +wrong-surface=εˆ₯γ‚΅γƒΌγƒ•γ‚£γ‚Ήγ§γƒžγƒƒγƒ—γ‚’ι–‹γγ“γ¨γ―ε‡Ίζ₯ません +invalid-item=ιΈζŠžγ•γ‚ŒγŸγ‚ͺγƒ–γ‚Έγ‚§γ‚―γƒˆγ―γ‚’γ‚€γƒ†γƒ γ€ζ΅δ½“γ€γΎγŸγ―δΏ‘ε·γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“ +distance-tooltip=距雒 +module-count-tooltip=γƒ’γ‚Έγƒ₯ール数 +request-count-tooltip=要求数 +signal-count-tooltip=γ‚·γ‚°γƒŠγƒ«ζ•° +consumers-name=材料 +producers-name=製品 +storage-name=γ‚Ήγƒˆγƒ¬γƒΌγ‚Έ +logistics-name=物桁システム +modules-name=γƒ’γ‚Έγƒ₯ール +requesters-name=要求 +ground-items-name=地葨上 +entities-name=エンティティ +signals-name=γ‚·γ‚°γƒŠγƒ« +map-tags-name=γ‚Ώγ‚° +consumers-tooltip=材料、燃料、弾薬γγ„γšγ‚Œγ‹γ§γ“γγ‚’γ‚€γƒ†γƒ γ‚’ζΆˆθ²»γ™γ‚‹ζ©Ÿζ’°γ‚’ζ€œη΄’γ—γΎγ™\n(δΎ‹: __1__) +producers-tooltip=こγγ‚’γ‚€γƒ†γƒ γ‚’η”Ÿη”£γ™γ‚‹γƒžγ‚·γƒ³γ‚’ζ€œη΄’\n(δΎ‹: __1__) +storage-tooltip=こγγ‚’γ‚€γƒ†γƒ γ‚’ε«γ‚€γ‚³γƒ³γƒ†γƒŠγ‚’ζ€œη΄’\n(δΎ‹: __1__) +logistics-tooltip=こγγ‚’γ‚€γƒ†γƒ γ‚’θΌΈι€γ—γ¦γ„γ‚‹η‰©ζ΅γ‚·γ‚Ήγƒ†γƒ γ‚’ζ€œη΄’\n(δΎ‹: __1__) +modules-tooltip=こγγƒ’γ‚Έγƒ₯γƒΌγƒ«γ‚’δ½Ώη”¨γ—γ¦γ„γ‚‹γƒžγ‚·γƒ³γ‚’ζ€œη΄’\n(δΎ‹: __1__) +requesters-tooltip=こγγ‚’γ‚€γƒ†γƒ γ‚’θ¦ζ±‚γ—γ¦γ„γ‚‹η‰©ζ΅γ‚³γƒ³γƒ†γƒŠγ‚’ζ€œη΄’\n(δΎ‹: __1__ γ‚„γƒ’γ‚Έγƒ₯γƒΌγƒ«γ‚’θ¦ζ±‚γ—γ¦γ„γ‚‹ζ©Ÿζ’°) +ground-items-tooltip=εœ°θ‘¨γ«θ½γ‘γ¦γ„γ‚‹γ“γγ‚’γ‚€γƒ†γƒ γ‚’ζ€œη΄’ +entities-tooltip=ι‰±εΊŠγ‚’ε«γ‚€γ€γ“γγ‚’むテムγγ‚¨γƒ³γƒ†γ‚£γƒ†γ‚£γ‚’ζ€œη΄’します。 +signals-tooltip=こγγ‚·γ‚°γƒŠγƒ«γ‚’ι€δΏ‘γ—γ¦γ„γ‚‹γ‚¨γƒ³γƒ†γ‚£γƒ†γ‚£γ‚’ζ€œη΄’ +map-tags-tooltip=こγγ‚’γ‚€γ‚³γƒ³γ‚’ζŒγ€εœ°ε›³δΈŠγγ‚Ώγ‚°γ‚’ζ€œη΄’します +default-map-tag-name=γ‚Ώγ‚° +result-tooltip=[font=default-semibold][color=255, 230, 192]__ALT_CONTROL__1__build__ でこγε ΄ζ‰€γ‚’開きます。\n__ALT_CONTROL__1__mine___ でこγε ΄ζ‰€γ‚’εΌ·θͺΏθ‘¨η€Ίγ—ます。[/color][/font] + + diff --git a/FactorySearch/locale/ko/FactorySearch.cfg b/FactorySearch/locale/ko/FactorySearch.cfg new file mode 100644 index 00000000..a00d1eb3 --- /dev/null +++ b/FactorySearch/locale/ko/FactorySearch.cfg @@ -0,0 +1,43 @@ +[mod-name] +FactorySearch=곡μž₯ 검색 + +[shortcut-name] +search-factory=곡μž₯ 검색 + +[controls] +search-factory=곡μž₯ 검색 +open-search-prototype=μ„ νƒλœ κ°œμ²΄μ— λŒ€ν•œ 곡μž₯ 검색 + +[mod-setting-name] +fs-initial-zoom=ν™•λŒ€ μˆ˜μ€€ + +[mod-setting-description] +fs-chunks-per-tick=λ°±κ·ΈλΌμš΄λ“œ 검색이 ν™œμ„±ν™”λœ κ²½μš°μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. \n쀄이면 검색 속도가 λŠλ €μ§€μ§€λ§Œ κ²€μƒ‰ν•˜λŠ” λ™μ•ˆ μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€. + +[string-mod-setting] + +[search-gui] +keep-open=μ—΄λ¦° μƒνƒœλ‘œ μœ μ§€ +all-surfaces=λͺ¨λ“  μ§€λ©΄ +explanation=검색할 μ•„μ΄ν…œμ„ 선택 +no-results=찾은 κ²°κ³Ό μ—†μŒ +incorrect-config=μ΅œμ†Œν•œ ν•˜λ‚˜ μ΄μƒμ˜ μ²΄ν¬λ°•μŠ€κ°€ μ„ νƒλ˜μ–΄μ•Ό 함 +wrong-surface=λ‹€λ₯Έ ν‘œλ©΄μ˜ 지도λ₯Ό μ—΄ 수 μ—†μŒ +invalid-item=μ„ νƒλœ κ°œμ²΄λŠ” μ•„μ΄ν…œμ΄λ‚˜ 유체 λ˜λŠ” μ‹ ν˜Έμ΄μ–΄μ•Ό 함 +request-count-tooltip=μš”μ²­ 개수 +signal-count-tooltip=μ‹ ν˜Έ 개수 +producers-name=μƒμ‚°ν’ˆ +storage-name=μ €μž₯κ³  +logistics-name=λ¬Όλ₯˜ +requesters-name=μš”μ²­ +ground-items-name=λ°”λ‹₯ +entities-name=개체 +signals-name=μ‹ ν˜Έ +producers-tooltip=ν•΄λ‹Ή μ•„μ΄ν…œμ„ μƒμ‚°ν•˜λŠ” 기계λ₯Ό 검색\n(예: __1__) +storage-tooltip=ν•΄λ‹Ή μ•„μ΄ν…œμ„ λ‹΄κ³ μžˆλŠ” μ €μž₯κ³ λ₯Ό 검색\n(예: __1__) +logistics-tooltip=ν•΄λ‹Ή μ•„μ΄ν…œμ„ μš΄μ†‘ν•˜λŠ” λ¬Όλ₯˜ 개체λ₯Ό 검색\n(예: __1__) +requesters-tooltip=ν•΄λ‹Ή μ•„μ΄ν…œμ„ μš”μ²­ν•˜κ³  μžˆλŠ” λ¬Όλ₯˜ μ €μž₯κ³ λ₯Ό 검색\n(예: __1__ 및 λͺ¨λ“ˆμ„ μš”μ²­ν•˜λŠ” 기계) +ground-items-tooltip=λ°”λ‹₯에 λ†“μ—¬μžˆλŠ” ν•΄λ‹Ή μ•„μ΄ν…œμ„ 검색 +signals-tooltip=ν•΄λ‹Ή μ‹ ν˜Έλ₯Ό λ‚΄λ³΄λ‚΄λŠ” 개체λ₯Ό 검색 + + diff --git a/FactorySearch/locale/pl/FactorySearch.cfg b/FactorySearch/locale/pl/FactorySearch.cfg new file mode 100644 index 00000000..ee99fdf9 --- /dev/null +++ b/FactorySearch/locale/pl/FactorySearch.cfg @@ -0,0 +1,18 @@ +[mod-name] + +[shortcut-name] + +[controls] + +[mod-setting-name] + +[mod-setting-description] + +[string-mod-setting] +fs-non-blocking-search-on=ZaΕ‚. +fs-non-blocking-search-off=WyΕ‚. + +[search-gui] +keep-open=Pozostaw otwarte + + diff --git a/FactorySearch/locale/pt-BR/FactorySearch.cfg b/FactorySearch/locale/pt-BR/FactorySearch.cfg new file mode 100644 index 00000000..ec0ea7d4 --- /dev/null +++ b/FactorySearch/locale/pt-BR/FactorySearch.cfg @@ -0,0 +1,60 @@ +[mod-name] +FactorySearch=Pesquisa na FΓ‘brica + +[shortcut-name] +search-factory=Buscar fΓ‘brica + +[controls] +search-factory=Buscar fΓ‘brica +open-search-prototype=Procure o objeto selecionado por fΓ‘brica + +[mod-setting-name] +fs-initial-zoom=NΓ­vel de zoom +fs-clear-highlights-with-gui=Limpar destaques ao fechar a interface +fs-highlight-duration=DuraΓ§Γ£o do destaque + +[mod-setting-description] +fs-clear-highlights-with-gui=Remove caixas e setas de marcaΓ§Γ£o quando a interface estiver fechada. + +[string-mod-setting] +fs-non-blocking-search-on=Ligado +fs-non-blocking-search-multiplayer=Somente multijogador +fs-non-blocking-search-off=Desligado + +[search-gui] +keep-open=Manter aberto +all-surfaces=Todas as superfΓ­cies +explanation=Selecione um item para pesquisar +no-results=Nenhum resultado encontrado +incorrect-config=Pelo menos uma caixa de seleΓ§Γ£o deve ser selecionada +searching=Pesquisando... +wrong-surface=NΓ£o Γ© possΓ­vel abrir o mapa em outra superfΓ­cie +invalid-item=O objeto selecionado deve ser um item, fluido ou sinal +distance-tooltip=DistΓ’ncia +module-count-tooltip=NΓΊmero de mΓ³dulos +request-count-tooltip=NΓΊmero de pedidos +signal-count-tooltip=NΓΊmero de sinais +consumers-name=Ingrediente +producers-name=Produto +storage-name=Armazenamento +logistics-name=LogΓ­stica +modules-name=MΓ³dulo +requesters-name=SolicitaΓ§Γ£o +ground-items-name=Solo +entities-name=Entidade +signals-name=Sinal +map-tags-name=Etiqueta +consumers-tooltip=Procurar por mΓ‘quinas que consomem este item, seja como ingrediente, combustΓ­vel ou muniΓ§Γ£o\n(ex.: __1__) +producers-tooltip=Procurar por mΓ‘quinas que produzem este item\n(ex. __1__) +storage-tooltip=Procurar por mΓ‘quinas que produzem este item\n(ex. __1__) +logistics-tooltip=Procurar por entidades logΓ­sticas que estΓ£o transportando este item\n(por exemplo, __1__) +modules-tooltip=Procurar por mΓ‘quinas que produzem este item\n(ex. __1__) +requesters-tooltip=Procurar por contΓͺineres logΓ­sticos que estΓ£o solicitando este item\n(por exemplo, __1__ e mΓ‘quinas que solicitam mΓ³dulos) +ground-items-tooltip=Procurar por este item no chΓ£o +entities-tooltip=Procurar por entidades construΓ­das deste item, incluindo correΓ§Γ΅es de recursos +signals-tooltip=Pesquisa por entidades que estΓ£o enviando este sinal +map-tags-tooltip=Procurar por etiquetas no mapa que tenham este Γ­cone +default-map-tag-name=Mapa de etiquetas +result-tooltip=[font=default-semibold][color=255, 230, 192]__ALT_CONTROL__1__build__ para abrir a localizaΓ§Γ£o no mapa.\n__ALT_CONTROL__1__mine__ para destacar a localizaΓ§Γ£o.[/color][/font] + + diff --git a/FactorySearch_1.10.14/locale/ru/FactorySearch.cfg b/FactorySearch/locale/ru/FactorySearch.cfg similarity index 100% rename from FactorySearch_1.10.14/locale/ru/FactorySearch.cfg rename to FactorySearch/locale/ru/FactorySearch.cfg diff --git a/FactorySearch/locale/sv-SE/FactorySearch.cfg b/FactorySearch/locale/sv-SE/FactorySearch.cfg new file mode 100644 index 00000000..6297d74a --- /dev/null +++ b/FactorySearch/locale/sv-SE/FactorySearch.cfg @@ -0,0 +1,23 @@ +[mod-name] +FactorySearch=Fabriks-sΓΆk + +[shortcut-name] +search-factory=SΓΆk fabrik + +[controls] +search-factory=SΓΆk fabrik + +[mod-setting-name] + +[mod-setting-description] + +[string-mod-setting] + +[search-gui] +explanation=VΓ€lj ett fΓΆremΓ₯l att sΓΆka +no-results=Inga resultat hittades +incorrect-config=Minst ett alternativ mΓ₯ste vΓ€ljas +producers-tooltip=SΓΆk efter maskiner som producerar detta fΓΆremΓ₯l\n(t.ex. __1__) +storage-tooltip=SΓΆk efter containrar som innehΓ₯ller detta fΓΆremΓ₯l\n(t.ex. __1__) + + diff --git a/FactorySearch/locale/uk/FactorySearch.cfg b/FactorySearch/locale/uk/FactorySearch.cfg new file mode 100644 index 00000000..41acd90d --- /dev/null +++ b/FactorySearch/locale/uk/FactorySearch.cfg @@ -0,0 +1,67 @@ +[mod-name] +FactorySearch=ΠŸΠΎΡˆΡƒΠΊ Π·Π°Π²ΠΎΠ΄Ρƒ + +[shortcut-name] +search-factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° ΠΏΠΎΡˆΡƒΠΊΡƒ + +[controls] +search-factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° ΠΏΠΎΡˆΡƒΠΊΡƒ +open-search-prototype=ΠŸΠΎΡˆΡƒΠΊ Π·Π°Π²ΠΎΠ΄Ρƒ для Π²ΠΈΠ±Ρ€Π°Π½ΠΎΠ³ΠΎ ΠΎΠ±'Ρ”ΠΊΡ‚Π° + +[mod-setting-name] +fs-non-blocking-search=ΠŸΠΎΡˆΡƒΠΊ ΠΏΠΎ Π±Π°Π·Ρ– Π΄Π°Π½ΠΈΡ… +fs-chunks-per-tick=Π¨ΠΌΠ°Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Ρ‚ΠΈΠΊ +fs-initial-zoom=Π Ρ–Π²Π΅Π½ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΡƒΠ²Π°Π½Π½Ρ +fs-clear-highlights-with-gui=Π§Ρ–Ρ‚ΠΊΡ– підсвічування ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€ΠΈΡ‚Ρ‚Ρ– інтСрфСйсу +fs-highlight-duration=Π’Ρ€ΠΈΠ²Π°Π»Ρ–ΡΡ‚ΡŒ підсвічування + +[mod-setting-description] +fs-non-blocking-search=ΠŸΠΎΡˆΡƒΠΊ Π·Π°ΠΉΠΌΠ°Ρ” Π½Π°Π±Π°Π³Π°Ρ‚ΠΎ Π±Ρ–Π»ΡŒΡˆΠ΅ часу, Π°Π»Π΅ Π½Π΅ ΠΏΡ€ΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ зависання Π³Ρ€ΠΈ. +fs-chunks-per-tick=Π’ΠΏΠ»ΠΈΠ²Π°Ρ” лишС Ρ‚ΠΎΠ΄Ρ–, ΠΊΠΎΠ»ΠΈ ΡƒΠ²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎ Ρ„ΠΎΠ½ΠΎΠ²ΠΈΠΉ ΠΏΠΎΡˆΡƒΠΊ.\nΠ—ΠΌΠ΅Π½ΡˆΠ΅Π½Π½Ρ значСння ΡΠΏΠΎΠ²Ρ–Π»ΡŒΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡˆΡƒΠΊ, Π°Π»Π΅ ΠΏΠΎΠΊΡ€Π°Ρ‰ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ ΠΏΡ–Π΄ час ΠΏΠΎΡˆΡƒΠΊΡƒ. +fs-initial-zoom=Π Ρ–Π²Π΅Π½ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΡƒΠ²Π°Π½Π½Ρ для відкриття Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ–Π². Π‘Ρ–Π»ΡŒΡˆΠ΅ значСння ΠΎΠ·Π½Π°Ρ‡Π°Ρ” подальшС Π·Π±Ρ–Π»ΡŒΡˆΠ΅Π½Π½Ρ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρƒ.\nΠ—Π°Π·Π²ΠΈΡ‡Π°ΠΉ ΠΌΡ–ΠΆ [font=default-semibold]0.3[/font] Ρ– [font=default-semibold]3[/font]. +fs-clear-highlights-with-gui=ΠŸΡ€ΠΈΠ±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²ΠΈΠ΄Ρ–Π»Π΅Π½Ρ– поля Ρ‚Π° стрілки, ΠΊΠΎΠ»ΠΈ інтСрфСйс Π·Π°ΠΊΡ€ΠΈΡ‚ΠΎ. +fs-highlight-duration=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ сСкунд, протягом яких Ρ–ΡΠ½ΡƒΡŽΡ‚ΡŒ Π²ΠΈΠ΄Ρ–Π»Π΅Π½Ρ– поля Ρ– стрілки.\n[font=default-semibold]0[/font] ΠΎΠ·Π½Π°Ρ‡Π°Ρ” [font=default-semibold]нСскінчСнно[/font]. + +[string-mod-setting] +fs-non-blocking-search-on=Π£Π²Ρ–ΠΌ +fs-non-blocking-search-multiplayer=Π’Ρ–Π»ΡŒΠΊΠΈ для Π±Π°Π³Π°Ρ‚ΠΎΠΊΠΎΡ€ΠΈΡΡ‚ΡƒΠ²Π°Ρ†ΡŒΠΊΠΎΡ— Π³Ρ€ΠΈ +fs-non-blocking-search-off=Π’ΠΈΠΌ + +[search-gui] +keep-open=Π’Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈΠΌ +all-surfaces=Всі ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½Ρ– +explanation=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ для ΠΏΠΎΡˆΡƒΠΊΡƒ +no-results=НС Π·Π½Π°ΠΉΠ΄Π΅Π½ΠΎ ΠΆΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ +incorrect-config=ΠŸΡ€ΠΈΠ½Π°ΠΉΠΌΠ½Ρ– ΠΎΠ΄ΠΈΠ½ ΠΏΡ€Π°ΠΏΠΎΡ€Π΅Ρ†ΡŒ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ встановлСний +searching=ΠŸΠΎΡˆΡƒΠΊ... +searching-tooltip=__1__ ΡƒΠ²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎ, Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΡˆΡƒΠΊ ΠΌΠΎΠΆΠ΅ зайняти Π±Π°Π³Π°Ρ‚ΠΎ часу, Π°Π»Π΅ Π³Ρ€Ρƒ ΠΌΠΎΠΆΠ½Π° Π³Ρ€Π°Ρ‚ΠΈ ΠΏΡ–Π΄ час ΠΏΠΎΡˆΡƒΠΊΡƒ. +wrong-surface=НСмоТливо Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ ΠΌΠ°ΠΏΡƒ Π½Π° Ρ–Π½ΡˆΡ–ΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½Ρ– +invalid-item=ΠžΠ±Ρ€Π°Π½ΠΈΠΉ ΠΎΠ±'Ρ”ΠΊΡ‚ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ, Ρ€Ρ–Π΄ΠΈΠ½ΠΎΡŽ Π°Π±ΠΎ сигналом +distance-tooltip=Π’Ρ–Π΄ΡΡ‚Π°Π½ΡŒ +module-count-tooltip=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»Ρ–Π² +request-count-tooltip=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡ‚Ρ–Π² +signal-count-tooltip=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ сигналів +consumers-name=Π†Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ +producers-name=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ +storage-name=Π‘Ρ…ΠΎΠ²ΠΈΡ‰Π΅ +logistics-name=Логістика +modules-name=ΠœΠΎΠ΄ΡƒΠ»ΡŒ +requesters-name=Π—Π°ΠΏΠΈΡ‚ +ground-items-name=ЗСмля +entities-name=Π‘ΡƒΡ‚Π½Ρ–ΡΡ‚ΡŒ +signals-name=Π‘ΠΈΠ³Π½Π°Π» +map-tags-name=ΠœΡ–Ρ‚ΠΊΠ° +consumers-tooltip=ΠŸΠΎΡˆΡƒΠΊ машин, які ΡΠΏΠΎΠΆΠΈΠ²Π°ΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ як Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚, ΠΏΠ°Π»ΠΈΠ²ΠΎ Π°Π±ΠΎ боєприпаси\n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__) +producers-tooltip=ΠŸΠΎΡˆΡƒΠΊ машин, які Π²ΠΈΡ€ΠΎΠ±Π»ΡΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ Ρ‚ΠΎΠ²Π°Ρ€\n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__) +storage-tooltip=ΠŸΠΎΡˆΡƒΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ–Π², які ΠΌΡ–ΡΡ‚ΡΡ‚ΡŒ Ρ†Π΅ΠΉ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚\n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__) +logistics-tooltip=ΠŸΠΎΡˆΡƒΠΊ логістичних ΠΊΠΎΠΌΠΏΠ°Π½Ρ–ΠΉ, які ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ·ΡΡ‚ΡŒ Ρ†Π΅ΠΉ Ρ‚ΠΎΠ²Π°Ρ€\n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__) +modules-tooltip=ΠŸΠΎΡˆΡƒΠΊ машин, які Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ\n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__) +requesters-tooltip=ΠŸΠΎΡˆΡƒΠΊ логістичних ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ–Π², які Π·Π°ΠΏΠΈΡ‚ΡƒΡŽΡ‚ΡŒ Ρ†ΡŽ ΠΏΠΎΠ·ΠΈΡ†Ρ–ΡŽ \n(Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, __1__ Ρ– машини, які Π·Π°ΠΏΠΈΡ‚ΡƒΡŽΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»Ρ–) +ground-items-tooltip=Π¨ΡƒΠΊΠ°ΠΉΡ‚Π΅ Ρ†Π΅ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π½Π° місцСвості +entities-tooltip=ΠŸΠΎΡˆΡƒΠΊ Π·Ρ–Π±Ρ€Π°Π½ΠΈΡ… ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρ†ΡŒΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π½ΠΎ Π· ΠΏΠ°Ρ‚Ρ‡Π°ΠΌΠΈ рСсурсів +signals-tooltip=ΠŸΠΎΡˆΡƒΠΊ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π², які Π½Π°Π΄ΡΠΈΠ»Π°ΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ сигнал +map-tags-tooltip=ΠŸΠΎΡˆΡƒΠΊ ΠΌΡ–Ρ‚ΠΎΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚Ρ–, які ΠΌΠ°ΡŽΡ‚ΡŒ Ρ†Π΅ΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ +default-map-tag-name=ΠœΡ–Ρ‚ΠΊΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚Ρ– +result-tooltip=[font=default-semibold][color=255, 230, 192]__ALT_CONTROL__1__build__, Ρ‰ΠΎΠ± Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π»ΠΎΠΊΠ°Ρ†Ρ–ΡŽ Π½Π° ΠΌΠ°ΠΏΡ–.\n__ALT_CONTROL__1__mine__, Ρ‰ΠΎΠ± Π²ΠΈΠ΄Ρ–Π»ΠΈΡ‚ΠΈ Π»ΠΎΠΊΠ°Ρ†Ρ–ΡŽ.[/color][/font] + + diff --git a/FactorySearch/locale/zh-CN/FactorySearch.cfg b/FactorySearch/locale/zh-CN/FactorySearch.cfg new file mode 100644 index 00000000..6dade01f --- /dev/null +++ b/FactorySearch/locale/zh-CN/FactorySearch.cfg @@ -0,0 +1,63 @@ +[mod-name] +FactorySearch=ε·₯εŽ‚ε―»ιΎ™ε°Ί + +[shortcut-name] +search-factory=搜紒ε·₯εŽ‚ + +[controls] +search-factory=搜紒ε·₯εŽ‚ +open-search-prototype=ζœη΄’ι€‰δΈ­ε―Ήθ±‘ + +[mod-setting-name] +fs-non-blocking-search=后台搜紒 +fs-initial-zoom=ηΌ©ζ”Ύη­‰ηΊ§ +fs-clear-highlights-with-gui=ε…³ι—­ζ—ΆζΈ…ι™€ι«˜δΊ +fs-highlight-duration=高δΊζ—Άι•Ώ + +[mod-setting-description] +fs-non-blocking-search=ζœη΄’ιœ€θ¦ζ›΄ι•Ώζ—Άι—΄οΌŒδ½†δΈδΌšε‘δ½ζΈΈζˆγ€‚ +fs-clear-highlights-with-gui=ε…³ι—­ζ—Άεˆ ι™€ι«˜δΊζ‘†ε’Œη­ε€΄γ€‚ + +[string-mod-setting] +fs-non-blocking-search-on=开启 +fs-non-blocking-search-multiplayer=δ»…ι™ε€šδΊΊζΈΈζˆ +fs-non-blocking-search-off=ε…³ι—­ + +[search-gui] +keep-open=δΏζŒζ‰“εΌ€ +all-surfaces=ζ‰€ζœ‰θ‘¨ι’ +explanation=ι€‰ζ‹©θ¦ζœη΄’ηš„ι‘Ήη› +no-results=δ»€δΉˆιƒ½ζ²‘ζœ‰ζ‰Ύεˆ° +incorrect-config=必鑻选择至少一δΈͺ倍选摆 +searching=搜紒中... +searching-tooltip=__1__ ε·²ε―η”¨οΌŒε› ζ­€ζœη΄’ε―θƒ½ιœ€θ¦εΎˆι•Ώζ—Άι—΄οΌŒδ½†ε―δ»₯εœ¨ζœη΄’θΏ‡η¨‹δΈ­ηŽ©ζΈΈζˆγ€‚ +wrong-surface=ζ— ζ³•εœ¨δΈεŒηš„θ‘¨ι’ζ‰“εΌ€εœ°ε›Ύ +invalid-item=选εšηš„ε―Ήθ±‘εΏ…ι‘»ζ˜―η‰©ε“γ€ ζΆ²δ½“ζˆ–δΏ‘ε· +distance-tooltip=距离 +module-count-tooltip=插仢数 +request-count-tooltip=请求数 +signal-count-tooltip=俑号数 +consumers-name=εŽŸζ–™ +producers-name=产品 +storage-name=ε­˜ε‚¨ +logistics-name=物桁 +modules-name=插仢 +requesters-name=请求 +ground-items-name=地青 +entities-name=εžδ½“ +signals-name=俑号 +map-tags-name=ζ ‡η­Ύ +consumers-tooltip=ζœη΄’ζΆˆθ€—ζ­€η‰©ε“ηš„ζœΊε™¨οΌŒθ¦δΉˆδ½œδΈΊεŽŸζ–™γ€η‡ƒζ–™οΌŒθ¦δΉˆδ½œδΈΊεΌΉθ―\n(例如 __1__) +producers-tooltip=ζœη΄’η”ŸδΊ§ζ­€η‰©ε“ηš„ζœΊε™¨\n(例如 __1__) +storage-tooltip=ζœη΄’εŒ…ε«θΏ™δΈͺι‘Ήη›ηš„εΉε™¨\n(δΎ‹ε¦‚οΌŒ __1__) +logistics-tooltip=ζœη΄’θΏι€ζ­€η‰©ε“ηš„η‰©ζ΅εžδ½“\n(例如 __1__) +modules-tooltip=ζœη΄’δ½Ώη”¨ζ­€ζ’δ»Άηš„ζœΊε™¨\n(δΎ‹ε¦‚οΌŒ __1__) +requesters-tooltip=ζœη΄’θ―·ζ±‚ζ­€η‰©ε“ηš„η‰©ζ΅εΉε™¨\n(例如 __1__ ε’Œθ―·ζ±‚ζ’δ»Άηš„ζœΊε™¨) +ground-items-tooltip=εœ¨εœ°ι’ζœη΄’θΏ™δΈͺ物品 +entities-tooltip=搜紒歀鑹η›ηš„ε†…ε»Ίεžδ½“οΌŒεŒ…ζ‹¬ιœ²ε€©ηŸΏη‰© +signals-tooltip=ζœη΄’ε‘ι€ζ­€δΏ‘ε·ηš„εžδ½“ +map-tags-tooltip=εœ¨εœ°ε›ΎδΈŠζœη΄’ε…·ζœ‰ζ­€ε›Ύζ ‡ηš„ζ ‡η­Ύ +default-map-tag-name=εœ°ε›Ύζ ‡η­Ύ +result-tooltip=[font=default-semibold][color=255,230,192]__ALT_CONTROL__1__build__ ζ‰“εΌ€εœ°ε›ΎδΈ­ηš„δ½η½γ€‚\n__ALT_CONTROL__1__mine_ηͺε‡Ίδ½η½γ€‚[/color][/font] + + diff --git a/FactorySearch_1.10.14/prototypes/custom-input.lua b/FactorySearch/prototypes/custom-input.lua similarity index 100% rename from FactorySearch_1.10.14/prototypes/custom-input.lua rename to FactorySearch/prototypes/custom-input.lua diff --git a/FactorySearch_1.10.14/prototypes/shortcuts.lua b/FactorySearch/prototypes/shortcuts.lua similarity index 100% rename from FactorySearch_1.10.14/prototypes/shortcuts.lua rename to FactorySearch/prototypes/shortcuts.lua diff --git a/FactorySearch_1.10.14/prototypes/sprite.lua b/FactorySearch/prototypes/sprite.lua similarity index 100% rename from FactorySearch_1.10.14/prototypes/sprite.lua rename to FactorySearch/prototypes/sprite.lua diff --git a/FactorySearch_1.10.14/prototypes/style.lua b/FactorySearch/prototypes/style.lua similarity index 100% rename from FactorySearch_1.10.14/prototypes/style.lua rename to FactorySearch/prototypes/style.lua diff --git a/FactorySearch_1.10.14/scripts/custom-input.lua b/FactorySearch/scripts/custom-input.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/custom-input.lua rename to FactorySearch/scripts/custom-input.lua diff --git a/FactorySearch_1.10.14/scripts/event.lua b/FactorySearch/scripts/event.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/event.lua rename to FactorySearch/scripts/event.lua diff --git a/FactorySearch_1.10.14/scripts/flib-gui.lua b/FactorySearch/scripts/flib-gui.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/flib-gui.lua rename to FactorySearch/scripts/flib-gui.lua diff --git a/FactorySearch_1.10.14/scripts/gui.lua b/FactorySearch/scripts/gui.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/gui.lua rename to FactorySearch/scripts/gui.lua diff --git a/FactorySearch_1.10.14/scripts/remote.lua b/FactorySearch/scripts/remote.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/remote.lua rename to FactorySearch/scripts/remote.lua diff --git a/FactorySearch_1.10.14/scripts/result-location.lua b/FactorySearch/scripts/result-location.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/result-location.lua rename to FactorySearch/scripts/result-location.lua diff --git a/FactorySearch_1.10.14/scripts/search-results.lua b/FactorySearch/scripts/search-results.lua similarity index 100% rename from FactorySearch_1.10.14/scripts/search-results.lua rename to FactorySearch/scripts/search-results.lua diff --git a/FactorySearch/scripts/search-signals.lua b/FactorySearch/scripts/search-signals.lua new file mode 100644 index 00000000..9844f073 --- /dev/null +++ b/FactorySearch/scripts/search-signals.lua @@ -0,0 +1,54 @@ +local function signal_eq(sig1, sig2) + return sig1 and sig2 and sig1.type == sig2.type and sig1.name == sig2.name +end + +local function search_signals(entity, target_signal, surface_data) + local control_behavior = entity.get_control_behavior() + if control_behavior then + local entity_type = entity.type + if entity_type == "constant-combinator" then + -- If prototype's `item_slot_count = 0` then .parameters will be nil + for _, parameter in pairs(control_behavior.parameters or {}) do + if signal_eq(parameter.signal, target_signal) then + SearchResults.add_entity_signal(entity, surface_data.signals, parameter.count) + end + end + elseif entity_type == "arithmetic-combinator" or entity_type == "decider-combinator" then + local signal_count = control_behavior.get_signal_last_tick(target_signal) + if signal_count ~= nil then + SearchResults.add_entity_signal(entity, surface_data.signals, signal_count) + end + elseif entity_type == "roboport" then + for _, signal in pairs({ control_behavior.available_logistic_output_signal, control_behavior.total_logistic_output_signal, control_behavior.available_construction_output_signal, control_behavior.total_construction_output_signal }) do + if signal_eq(signal, target_signal) then + SearchResults.add_entity(entity, surface_data.signals) + break + end + end + elseif entity_type == "train-stop" then + if signal_eq(control_behavior.stopped_train_signal, target_signal) or signal_eq(control_behavior.trains_count_signal, target_signal) then + SearchResults.add_entity(entity, surface_data.signals) + end + elseif entity_type == "accumulator" or entity_type == "wall" then + if signal_eq(control_behavior.output_signal, target_signal) then + SearchResults.add_entity(entity, surface_data.signals) + end + elseif entity_type == "rail-signal" then + for _, signal in pairs({ control_behavior.red_signal, control_behavior.orange_signal, control_behavior.green_signal }) do + if signal_eq(signal, target_signal) then + SearchResults.add_entity(entity, surface_data.signals) + break + end + end + elseif entity_type == "rail-chain-signal" then + for _, signal in pairs({ control_behavior.red_signal, control_behavior.orange_signal, control_behavior.green_signal, control_behavior.blue_signal }) do + if signal_eq(signal, target_signal) then + SearchResults.add_entity(entity, surface_data.signals) + break + end + end + end + end +end + +return search_signals \ No newline at end of file diff --git a/FactorySearch_1.10.14/scripts/search.lua b/FactorySearch/scripts/search.lua similarity index 99% rename from FactorySearch_1.10.14/scripts/search.lua rename to FactorySearch/scripts/search.lua index c8da8285..c6250cb0 100644 --- a/FactorySearch_1.10.14/scripts/search.lua +++ b/FactorySearch/scripts/search.lua @@ -485,7 +485,7 @@ function Search.blocking_search(force, state, target_item, surface_list, type_li if item_prototype and item_prototype.place_result then target_entity_name = item_prototype.place_result.name else - -- Or just try an entity with the same name as the item + -- Or just try an entity with the same name as the item target_entity_name = target_name end end @@ -662,7 +662,7 @@ function Search.on_tick() if item_prototype and item_prototype.place_result then target_entity_name = item_prototype.place_result.name else - -- Or just try an entity with the same name as the item + -- Or just try an entity with the same name as the item target_entity_name = target_name end end diff --git a/FactorySearch_1.10.14/settings.lua b/FactorySearch/settings.lua similarity index 100% rename from FactorySearch_1.10.14/settings.lua rename to FactorySearch/settings.lua diff --git a/FactorySearch/thumbnail.png b/FactorySearch/thumbnail.png new file mode 100644 index 00000000..53a09b30 Binary files /dev/null and b/FactorySearch/thumbnail.png differ diff --git a/FactorySearch_1.10.14/control.lua b/FactorySearch_1.10.14/control.lua deleted file mode 100644 index fada4ca9..00000000 --- a/FactorySearch_1.10.14/control.lua +++ /dev/null @@ -1,131 +0,0 @@ -util = require "__core__.lualib.util" -event = require "scripts.event" -CustomInput = require "scripts.custom-input" -Search = require "scripts.search" -SearchResults = require "scripts.search-results" -ResultLocation = require "scripts.result-location" -Gui = require "scripts.gui" -require "scripts.remote" - -function filtered_surfaces(override_surface, player_surface) - if override_surface then - return {player_surface} - end - - -- Skip certain modded surfaces that won't have assemblers/chests placed on them - local surfaces = {} - for _, surface in pairs(game.surfaces) do - local surface_name = surface.name - if string.sub(surface_name, -12) ~= "-transformer" -- Power Overload - and string.sub(surface_name, 1, 17) ~= "nullius-landfill-" -- Nullius - and string.sub(surface_name, 0, 8) ~= "starmap-" -- Space Exploration - and string.sub(surface_name, 0, 15) ~= "EE_TESTSURFACE_" -- Editor Extensions - and string.sub(surface_name, 0, 10) ~= "BPL_TheLab" -- Blueprint Designer Lab - and string.sub(surface_name, 0, 9) ~= "bpsb-lab-" -- Blueprint Sandboxes - and surface.name ~= "IR-limbo" -- Industrial Revolution 2/3 - and surface_name ~= "aai-signals" -- AAI Signals - and surface_name ~= "secret_companion_surface_please_dont_touch" -- Companion Drones - then - table.insert(surfaces, surface) - end - end - return surfaces -end - -local function update_surface_count() - -- Hides 'All surfaces' button - local multiple_surfaces = #filtered_surfaces() > 1 - - if multiple_surfaces ~= global.multiple_surfaces then - for _, player_data in pairs(global.players) do - local all_surfaces = player_data.refs.all_surfaces - all_surfaces.visible = multiple_surfaces - end - end - - global.multiple_surfaces = multiple_surfaces -end - -script.on_event({defines.events.on_surface_created, defines.events.on_surface_deleted}, update_surface_count) - -local function generate_item_to_entity_table() - -- Make map of {item_name -> list[entity_name]} - -- First try items_to_place_this, then mineable_properties - -- Exception in mineable_properties is we don't want to include entity_name when type == "simple-entity" if item_name is a resource - -- This prevents things like rocks showing when searching for stone - - local resource_prototypes = game.get_filtered_entity_prototypes({{filter = "type", type = "resource"}}) - local is_resource = {} - for _, resource in pairs(resource_prototypes) do - is_resource[resource.name] = true - end - - - local prototypes = game.get_filtered_entity_prototypes({}) - -- Filter out rocks - local item_to_entities = {} - for _, prototype in pairs(prototypes) do - local items_to_place_this = prototype.items_to_place_this - if items_to_place_this then - for _, item in pairs(items_to_place_this) do - local item_name = item.name - local associated_entities = item_to_entities[item_name] or {} - table.insert(associated_entities, prototype.name) - item_to_entities[item_name] = associated_entities - end - else - local properties = prototype.mineable_properties - if properties.minable and properties.products then - for _, item in pairs(prototype.mineable_properties.products) do - local item_name = item.name - if prototype.type ~= "simple-entity" or not is_resource[item_name] then - local associated_entities = item_to_entities[item_name] or {} - table.insert(associated_entities, prototype.name) - item_to_entities[item_name] = associated_entities - end - end - end - end - end - - -- Hardcode some Pyanodons associations - if game.active_mods["pypetroleumhandling"] then - -- or {} in case something removed those items or playing an older version of Py - table.insert(item_to_entities["raw-gas"] or {}, "bitumen-seep") - table.insert(item_to_entities["tar"] or {}, "bitumen-seep") - table.insert(item_to_entities["crude-oil"] or {}, "bitumen-seep") - end - - global.item_to_entities = item_to_entities -end - -script.on_init( - function() - global.players = {} - global.current_searches = {} - global.multiple_surfaces = false - update_surface_count() - generate_item_to_entity_table() - end -) - -script.on_configuration_changed( - function() - -- Destroy all GUIs - for player_index, player_data in pairs(global.players) do - local player = game.get_player(player_index) - if player then - Gui.destroy(player, player_data) - else - global.players[player_index] = nil - end - end - - -- Stop in-progress non-blocking searches - global.current_searches = {} - - global.multiple_surfaces = false - update_surface_count() - generate_item_to_entity_table() - end -) \ No newline at end of file diff --git a/FactorySearch_1.10.14/graphics/character-corpse.png b/FactorySearch_1.10.14/graphics/character-corpse.png deleted file mode 100644 index fb3e3e29..00000000 Binary files a/FactorySearch_1.10.14/graphics/character-corpse.png and /dev/null differ diff --git a/FactorySearch_1.10.14/graphics/frame-action-icons.png b/FactorySearch_1.10.14/graphics/frame-action-icons.png deleted file mode 100644 index c0dffecb..00000000 Binary files a/FactorySearch_1.10.14/graphics/frame-action-icons.png and /dev/null differ diff --git a/FactorySearch_1.10.14/graphics/location-arrow.png b/FactorySearch_1.10.14/graphics/location-arrow.png deleted file mode 100644 index e10ca046..00000000 Binary files a/FactorySearch_1.10.14/graphics/location-arrow.png and /dev/null differ diff --git a/FactorySearch_1.10.14/graphics/search-black.png b/FactorySearch_1.10.14/graphics/search-black.png deleted file mode 100644 index 82878356..00000000 Binary files a/FactorySearch_1.10.14/graphics/search-black.png and /dev/null differ diff --git a/FactorySearch_1.10.14/graphics/search-white.png b/FactorySearch_1.10.14/graphics/search-white.png deleted file mode 100644 index 62c35c84..00000000 Binary files a/FactorySearch_1.10.14/graphics/search-white.png and /dev/null differ diff --git a/FactorySearch_1.10.14/thumbnail.png b/FactorySearch_1.10.14/thumbnail.png deleted file mode 100644 index 49da8805..00000000 Binary files a/FactorySearch_1.10.14/thumbnail.png and /dev/null differ diff --git a/FastRemoveTiles_0.0.11/changelog.txt b/FastRemoveTiles/changelog.txt similarity index 100% rename from FastRemoveTiles_0.0.11/changelog.txt rename to FastRemoveTiles/changelog.txt diff --git a/FastRemoveTiles_0.0.11/data-final-fixes.lua b/FastRemoveTiles/data-final-fixes.lua similarity index 100% rename from FastRemoveTiles_0.0.11/data-final-fixes.lua rename to FastRemoveTiles/data-final-fixes.lua diff --git a/FastRemoveTiles_0.0.11/info.json b/FastRemoveTiles/info.json similarity index 100% rename from FastRemoveTiles_0.0.11/info.json rename to FastRemoveTiles/info.json diff --git a/FastRemoveTiles_0.0.11/thumbnail.png b/FastRemoveTiles/thumbnail.png similarity index 100% rename from FastRemoveTiles_0.0.11/thumbnail.png rename to FastRemoveTiles/thumbnail.png diff --git a/Fe-C-accumulator_0.0.1/data.lua b/Fe-C-accumulator/data.lua similarity index 100% rename from Fe-C-accumulator_0.0.1/data.lua rename to Fe-C-accumulator/data.lua diff --git a/Fe-C-accumulator_0.0.1/graphics/accumulator.png b/Fe-C-accumulator/graphics/accumulator.png similarity index 100% rename from Fe-C-accumulator_0.0.1/graphics/accumulator.png rename to Fe-C-accumulator/graphics/accumulator.png diff --git a/Fe-C-accumulator_0.0.1/graphics/accumulator_icon.png b/Fe-C-accumulator/graphics/accumulator_icon.png similarity index 100% rename from Fe-C-accumulator_0.0.1/graphics/accumulator_icon.png rename to Fe-C-accumulator/graphics/accumulator_icon.png diff --git a/Fe-C-accumulator_0.0.1/graphics/fe-c-tech.png b/Fe-C-accumulator/graphics/fe-c-tech.png similarity index 100% rename from Fe-C-accumulator_0.0.1/graphics/fe-c-tech.png rename to Fe-C-accumulator/graphics/fe-c-tech.png diff --git a/Fe-C-accumulator_0.0.1/info.json b/Fe-C-accumulator/info.json similarity index 100% rename from Fe-C-accumulator_0.0.1/info.json rename to Fe-C-accumulator/info.json diff --git a/Fe-C-accumulator_0.0.1/locale/en/Fe-C-accumulator.cfg b/Fe-C-accumulator/locale/en/Fe-C-accumulator.cfg similarity index 100% rename from Fe-C-accumulator_0.0.1/locale/en/Fe-C-accumulator.cfg rename to Fe-C-accumulator/locale/en/Fe-C-accumulator.cfg diff --git a/Fe-C-accumulator_0.0.1/locale/ru/Fe-C-accumulator.cfg b/Fe-C-accumulator/locale/ru/Fe-C-accumulator.cfg similarity index 100% rename from Fe-C-accumulator_0.0.1/locale/ru/Fe-C-accumulator.cfg rename to Fe-C-accumulator/locale/ru/Fe-C-accumulator.cfg diff --git a/Fe-C-accumulator_0.0.1/thumbnail.png b/Fe-C-accumulator/thumbnail.png similarity index 100% rename from Fe-C-accumulator_0.0.1/thumbnail.png rename to Fe-C-accumulator/thumbnail.png diff --git a/Flammable_Oils_fix_9.2.2/control.lua b/Flammable_Oils_fix/control.lua similarity index 100% rename from Flammable_Oils_fix_9.2.2/control.lua rename to Flammable_Oils_fix/control.lua diff --git a/Flammable_Oils_fix_9.2.2/data-final-fixes.lua b/Flammable_Oils_fix/data-final-fixes.lua similarity index 100% rename from Flammable_Oils_fix_9.2.2/data-final-fixes.lua rename to Flammable_Oils_fix/data-final-fixes.lua diff --git a/Flammable_Oils_fix_9.2.2/info.json b/Flammable_Oils_fix/info.json similarity index 100% rename from Flammable_Oils_fix_9.2.2/info.json rename to Flammable_Oils_fix/info.json diff --git a/Flammable_Oils_fix_9.2.2/thumbnail.png b/Flammable_Oils_fix/thumbnail.png similarity index 100% rename from Flammable_Oils_fix_9.2.2/thumbnail.png rename to Flammable_Oils_fix/thumbnail.png diff --git a/Flow Control_3.1.4/changelog.txt b/Flow Control/changelog.txt similarity index 100% rename from Flow Control_3.1.4/changelog.txt rename to Flow Control/changelog.txt diff --git a/Flow Control_3.1.4/data-final-fixes.lua b/Flow Control/data-final-fixes.lua similarity index 100% rename from Flow Control_3.1.4/data-final-fixes.lua rename to Flow Control/data-final-fixes.lua diff --git a/Flow Control_3.1.4/data-updates.lua b/Flow Control/data-updates.lua similarity index 100% rename from Flow Control_3.1.4/data-updates.lua rename to Flow Control/data-updates.lua diff --git a/Flow Control_3.1.4/data.lua b/Flow Control/data.lua similarity index 100% rename from Flow Control_3.1.4/data.lua rename to Flow Control/data.lua diff --git a/Flow Control_3.1.4/graphics/entity/check-valve/check-valve.png b/Flow Control/graphics/entity/check-valve/check-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/check-valve/check-valve.png rename to Flow Control/graphics/entity/check-valve/check-valve.png diff --git a/Flow Control_3.1.4/graphics/entity/check-valve/hr-check-valve.png b/Flow Control/graphics/entity/check-valve/hr-check-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/check-valve/hr-check-valve.png rename to Flow Control/graphics/entity/check-valve/hr-check-valve.png diff --git a/Flow Control_3.1.4/graphics/entity/overflow-valve/hr-overflow-valve.png b/Flow Control/graphics/entity/overflow-valve/hr-overflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/overflow-valve/hr-overflow-valve.png rename to Flow Control/graphics/entity/overflow-valve/hr-overflow-valve.png diff --git a/Flow Control_3.1.4/graphics/entity/overflow-valve/overflow-valve.png b/Flow Control/graphics/entity/overflow-valve/overflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/overflow-valve/overflow-valve.png rename to Flow Control/graphics/entity/overflow-valve/overflow-valve.png diff --git a/Flow Control_3.1.4/graphics/entity/underflow-valve/hr-underflow-valve.png b/Flow Control/graphics/entity/underflow-valve/hr-underflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/underflow-valve/hr-underflow-valve.png rename to Flow Control/graphics/entity/underflow-valve/hr-underflow-valve.png diff --git a/Flow Control_3.1.4/graphics/entity/underflow-valve/underflow-valve.png b/Flow Control/graphics/entity/underflow-valve/underflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/entity/underflow-valve/underflow-valve.png rename to Flow Control/graphics/entity/underflow-valve/underflow-valve.png diff --git a/Flow Control_3.1.4/graphics/icon/check-valve.png b/Flow Control/graphics/icon/check-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/check-valve.png rename to Flow Control/graphics/icon/check-valve.png diff --git a/Flow Control_3.1.4/graphics/icon/overflow-valve.png b/Flow Control/graphics/icon/overflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/overflow-valve.png rename to Flow Control/graphics/icon/overflow-valve.png diff --git a/Flow Control_3.1.4/graphics/icon/pipe-elbow.png b/Flow Control/graphics/icon/pipe-elbow.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/pipe-elbow.png rename to Flow Control/graphics/icon/pipe-elbow.png diff --git a/Flow Control_3.1.4/graphics/icon/pipe-junction.png b/Flow Control/graphics/icon/pipe-junction.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/pipe-junction.png rename to Flow Control/graphics/icon/pipe-junction.png diff --git a/Flow Control_3.1.4/graphics/icon/pipe-straight.png b/Flow Control/graphics/icon/pipe-straight.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/pipe-straight.png rename to Flow Control/graphics/icon/pipe-straight.png diff --git a/Flow Control_3.1.4/graphics/icon/underflow-valve.png b/Flow Control/graphics/icon/underflow-valve.png similarity index 100% rename from Flow Control_3.1.4/graphics/icon/underflow-valve.png rename to Flow Control/graphics/icon/underflow-valve.png diff --git a/Flow Control_3.1.4/graphics/technology/flow_control_valves_tech.png b/Flow Control/graphics/technology/flow_control_valves_tech.png similarity index 100% rename from Flow Control_3.1.4/graphics/technology/flow_control_valves_tech.png rename to Flow Control/graphics/technology/flow_control_valves_tech.png diff --git a/Flow Control_3.1.4/info.json b/Flow Control/info.json similarity index 100% rename from Flow Control_3.1.4/info.json rename to Flow Control/info.json diff --git a/Flow Control_3.1.4/locale/en/locale.cfg b/Flow Control/locale/en/locale.cfg similarity index 100% rename from Flow Control_3.1.4/locale/en/locale.cfg rename to Flow Control/locale/en/locale.cfg diff --git a/Flow Control_3.1.4/locale/ru/locale.cfg b/Flow Control/locale/ru/locale.cfg similarity index 100% rename from Flow Control_3.1.4/locale/ru/locale.cfg rename to Flow Control/locale/ru/locale.cfg diff --git a/Flow Control_3.1.4/migrations/Flow Control_3.0.0.lua b/Flow Control/migrations/Flow Control_3.0.0.lua similarity index 100% rename from Flow Control_3.1.4/migrations/Flow Control_3.0.0.lua rename to Flow Control/migrations/Flow Control_3.0.0.lua diff --git a/Flow Control_3.1.4/migrations/Flow Control_3.1.0.lua b/Flow Control/migrations/Flow Control_3.1.0.lua similarity index 100% rename from Flow Control_3.1.4/migrations/Flow Control_3.1.0.lua rename to Flow Control/migrations/Flow Control_3.1.0.lua diff --git a/Flow Control_3.1.4/prototypes/entities.lua b/Flow Control/prototypes/entities.lua similarity index 100% rename from Flow Control_3.1.4/prototypes/entities.lua rename to Flow Control/prototypes/entities.lua diff --git a/Flow Control_3.1.4/prototypes/items.lua b/Flow Control/prototypes/items.lua similarity index 100% rename from Flow Control_3.1.4/prototypes/items.lua rename to Flow Control/prototypes/items.lua diff --git a/Flow Control_3.1.4/prototypes/recipes.lua b/Flow Control/prototypes/recipes.lua similarity index 100% rename from Flow Control_3.1.4/prototypes/recipes.lua rename to Flow Control/prototypes/recipes.lua diff --git a/Flow Control_3.1.4/prototypes/technology.lua b/Flow Control/prototypes/technology.lua similarity index 100% rename from Flow Control_3.1.4/prototypes/technology.lua rename to Flow Control/prototypes/technology.lua diff --git a/Flow Control_3.1.4/settings.lua b/Flow Control/settings.lua similarity index 100% rename from Flow Control_3.1.4/settings.lua rename to Flow Control/settings.lua diff --git a/Flow Control_3.1.4/thumbnail.png b/Flow Control/thumbnail.png similarity index 100% rename from Flow Control_3.1.4/thumbnail.png rename to Flow Control/thumbnail.png diff --git a/FluidMustFlow/LICENSE b/FluidMustFlow/LICENSE new file mode 100644 index 00000000..22a35be5 --- /dev/null +++ b/FluidMustFlow/LICENSE @@ -0,0 +1,56 @@ +GNU LESSER GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright Β© 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. + +0. Additional Definitions. +As used herein, β€œthis License” refers to version 3 of the GNU Lesser General Public License, and the β€œGNU GPL” refers to version 3 of the GNU General Public License. + +β€œThe Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. + +An β€œApplication” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. + +A β€œCombined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the β€œLinked Version”. + +The β€œMinimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. + +The β€œCorresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. + +1. Exception to Section 3 of the GNU GPL. +You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. + +2. Conveying Modified Versions. +If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or +b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. +3. Object Code Incorporating Material from Library Header Files. +The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: + +a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. +b) Accompany the object code with a copy of the GNU GPL and this license document. +4. Combined Works. +You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. +b) Accompany the Combined Work with a copy of the GNU GPL and this license document. +c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. +d) Do one of the following: +0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. +1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. +e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) +5. Combined Libraries. +You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. +b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. +6. Revised Versions of the GNU Lesser General Public License. +The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License β€œor any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. diff --git a/FluidMustFlow_1.3.5/README.md b/FluidMustFlow/README.md similarity index 100% rename from FluidMustFlow_1.3.5/README.md rename to FluidMustFlow/README.md diff --git a/FluidMustFlow_1.3.5/changelog.txt b/FluidMustFlow/changelog.txt similarity index 100% rename from FluidMustFlow_1.3.5/changelog.txt rename to FluidMustFlow/changelog.txt diff --git a/FluidMustFlow_1.3.5/control.lua b/FluidMustFlow/control.lua similarity index 100% rename from FluidMustFlow_1.3.5/control.lua rename to FluidMustFlow/control.lua diff --git a/FluidMustFlow_1.3.5/data-final-fixes.lua b/FluidMustFlow/data-final-fixes.lua similarity index 100% rename from FluidMustFlow_1.3.5/data-final-fixes.lua rename to FluidMustFlow/data-final-fixes.lua diff --git a/FluidMustFlow_1.3.5/data.lua b/FluidMustFlow/data.lua similarity index 100% rename from FluidMustFlow_1.3.5/data.lua rename to FluidMustFlow/data.lua diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left.png new file mode 100644 index 00000000..3bb2ce06 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png new file mode 100644 index 00000000..790781ec Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png new file mode 100644 index 00000000..c31d7319 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up.png new file mode 100644 index 00000000..d936aed9 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png new file mode 100644 index 00000000..a67a5e3b Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down.png new file mode 100644 index 00000000..acceb572 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png new file mode 100644 index 00000000..c1c0cf19 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right.png new file mode 100644 index 00000000..d780ab9a Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png new file mode 100644 index 00000000..c7524fa2 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left.png new file mode 100644 index 00000000..bed2b66c Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png new file mode 100644 index 00000000..434d54fe Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png new file mode 100644 index 00000000..3adf8476 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up.png new file mode 100644 index 00000000..16321d3c Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png new file mode 100644 index 00000000..f78a5de1 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down.png new file mode 100644 index 00000000..e3f8a519 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png new file mode 100644 index 00000000..11bb1383 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right.png new file mode 100644 index 00000000..1f9f16c1 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png new file mode 100644 index 00000000..9deff941 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal.png new file mode 100644 index 00000000..e378ced9 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal_shadow.png new file mode 100644 index 00000000..789e673a Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/duct_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/duct_vertical.png b/FluidMustFlow/graphics/entity/duct/duct/duct_vertical.png new file mode 100644 index 00000000..5de930fb Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/duct_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/duct_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct/duct_vertical_shadow.png new file mode 100644 index 00000000..fa0075b5 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/duct_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal.png new file mode 100644 index 00000000..5d8bdfbb Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png new file mode 100644 index 00000000..df79092d Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical.png b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical.png new file mode 100644 index 00000000..27f0fc00 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical_shadow.png new file mode 100644 index 00000000..d62168d1 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct/hr_duct_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down.png new file mode 100644 index 00000000..2ddefc4d Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down_shadow.png new file mode 100644 index 00000000..7d5b6153 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left.png new file mode 100644 index 00000000..80f80be0 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left_shadow.png new file mode 100644 index 00000000..b49d7728 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right.png new file mode 100644 index 00000000..36bfd97d Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right_shadow.png new file mode 100644 index 00000000..eada8e61 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up.png new file mode 100644 index 00000000..cb6dba69 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up_shadow.png new file mode 100644 index 00000000..fd3a5bc2 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/duct_T_up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down.png new file mode 100644 index 00000000..54473ba1 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png new file mode 100644 index 00000000..8faacbd4 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left.png new file mode 100644 index 00000000..b11da223 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png new file mode 100644 index 00000000..1b54afdf Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right.png new file mode 100644 index 00000000..f5009c90 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png new file mode 100644 index 00000000..43b58307 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up.png new file mode 100644 index 00000000..57d3186e Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png new file mode 100644 index 00000000..c40f9262 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left.png new file mode 100644 index 00000000..12d5d581 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png new file mode 100644 index 00000000..cadc75bb Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right.png new file mode 100644 index 00000000..34f01f35 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png new file mode 100644 index 00000000..b4bc3eae Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left.png new file mode 100644 index 00000000..9be26ccf Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png new file mode 100644 index 00000000..295f46a7 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right.png new file mode 100644 index 00000000..c01645c9 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png new file mode 100644 index 00000000..3b262425 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png new file mode 100644 index 00000000..32b64bbf Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png new file mode 100644 index 00000000..a17cad1e Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png new file mode 100644 index 00000000..3b99d16e Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png new file mode 100644 index 00000000..a8664957 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png new file mode 100644 index 00000000..48e43de2 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png new file mode 100644 index 00000000..eebf90fb Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png new file mode 100644 index 00000000..2ca93eea Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png new file mode 100644 index 00000000..759a3213 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_cross/duct_cross.png b/FluidMustFlow/graphics/entity/duct/duct_cross/duct_cross.png new file mode 100644 index 00000000..acc04a41 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_cross/duct_cross.png differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/duct_cross_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_cross/duct_cross_shadow.png similarity index 100% rename from FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/duct_cross_shadow.png rename to FluidMustFlow/graphics/entity/duct/duct_cross/duct_cross_shadow.png diff --git a/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross.png b/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross.png new file mode 100644 index 00000000..8bfa77e3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png new file mode 100644 index 00000000..b4d6ade4 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal.png new file mode 100644 index 00000000..2d8815df Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png new file mode 100644 index 00000000..5b7aa57d Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical.png b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical.png new file mode 100644 index 00000000..5252727b Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png new file mode 100644 index 00000000..230016ac Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png new file mode 100644 index 00000000..6ac260ba Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png new file mode 100644 index 00000000..a84973ae Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical.png b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical.png new file mode 100644 index 00000000..2333bc8e Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png new file mode 100644 index 00000000..5d067938 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png new file mode 100644 index 00000000..6e3fa6a3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png new file mode 100644 index 00000000..b549a1d3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png new file mode 100644 index 00000000..c028ed14 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png new file mode 100644 index 00000000..b3c81aff Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png new file mode 100644 index 00000000..3a66ae86 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png new file mode 100644 index 00000000..e379addd Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png new file mode 100644 index 00000000..6e3fa6a3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png new file mode 100644 index 00000000..b549a1d3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical.png b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical.png new file mode 100644 index 00000000..c028ed14 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png new file mode 100644 index 00000000..b3c81aff Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png new file mode 100644 index 00000000..3a66ae86 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png new file mode 100644 index 00000000..e379addd Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png new file mode 100644 index 00000000..8c8c0dce Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png differ diff --git a/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png new file mode 100644 index 00000000..c7381477 Binary files /dev/null and b/FluidMustFlow/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png new file mode 100644 index 00000000..7908d5d1 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png new file mode 100644 index 00000000..240283fd Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png new file mode 100644 index 00000000..3baf7b73 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png new file mode 100644 index 00000000..013576c5 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png new file mode 100644 index 00000000..ea30226b Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png new file mode 100644 index 00000000..17ea2c0a Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png new file mode 100644 index 00000000..20a7d0e6 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png new file mode 100644 index 00000000..b09f0639 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png new file mode 100644 index 00000000..48627273 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png new file mode 100644 index 00000000..638d0dfc Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png new file mode 100644 index 00000000..1bc61dc2 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png new file mode 100644 index 00000000..87163e3c Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png new file mode 100644 index 00000000..f7fe07b4 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png new file mode 100644 index 00000000..d7566de5 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png new file mode 100644 index 00000000..33ee6043 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png new file mode 100644 index 00000000..754a36bb Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png new file mode 100644 index 00000000..08305ca6 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png new file mode 100644 index 00000000..e2165932 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png new file mode 100644 index 00000000..67841aed Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png new file mode 100644 index 00000000..39358f1d Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png new file mode 100644 index 00000000..3725bad9 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png new file mode 100644 index 00000000..18749ba5 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png new file mode 100644 index 00000000..c4eea126 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png new file mode 100644 index 00000000..d38d35de Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png new file mode 100644 index 00000000..47feea49 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png new file mode 100644 index 00000000..04865804 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png new file mode 100644 index 00000000..c56428c0 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_right.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_right.png similarity index 100% rename from FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_right.png rename to FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_right.png diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png new file mode 100644 index 00000000..b3c6b08f Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png new file mode 100644 index 00000000..a66c28dd Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_down.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_down.png new file mode 100644 index 00000000..7626a5b4 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_down.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png new file mode 100644 index 00000000..57914766 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_left.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_left.png new file mode 100644 index 00000000..cf8cc540 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_left.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_right.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_right.png new file mode 100644 index 00000000..658ef281 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_right.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_up.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_up.png new file mode 100644 index 00000000..acb8f0a3 Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_up.png differ diff --git a/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png new file mode 100644 index 00000000..105af7da Binary files /dev/null and b/FluidMustFlow/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png differ diff --git a/FluidMustFlow/graphics/entity/other/hr_pipe-straight-vertical.png b/FluidMustFlow/graphics/entity/other/hr_pipe-straight-vertical.png new file mode 100644 index 00000000..4f8b64b9 Binary files /dev/null and b/FluidMustFlow/graphics/entity/other/hr_pipe-straight-vertical.png differ diff --git a/FluidMustFlow/graphics/entity/other/pipe-straight-vertical.png b/FluidMustFlow/graphics/entity/other/pipe-straight-vertical.png new file mode 100644 index 00000000..6aeb405c Binary files /dev/null and b/FluidMustFlow/graphics/entity/other/pipe-straight-vertical.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-cross.png b/FluidMustFlow/graphics/icon/entities/duct-cross.png new file mode 100644 index 00000000..410a5264 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-cross.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-curve.png b/FluidMustFlow/graphics/icon/entities/duct-curve.png new file mode 100644 index 00000000..99c3093b Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-curve.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-end-point-intake.png b/FluidMustFlow/graphics/icon/entities/duct-end-point-intake.png new file mode 100644 index 00000000..78c6d736 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-end-point-intake.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-end-point-outtake.png b/FluidMustFlow/graphics/icon/entities/duct-end-point-outtake.png new file mode 100644 index 00000000..45d12c1a Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-end-point-outtake.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-end-point.png b/FluidMustFlow/graphics/icon/entities/duct-end-point.png new file mode 100644 index 00000000..311c9d1d Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-end-point.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-long.png b/FluidMustFlow/graphics/icon/entities/duct-long.png new file mode 100644 index 00000000..5252ac3a Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-long.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-small.png b/FluidMustFlow/graphics/icon/entities/duct-small.png new file mode 100644 index 00000000..1d938343 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-small.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-t-junction.png b/FluidMustFlow/graphics/icon/entities/duct-t-junction.png new file mode 100644 index 00000000..92c250a2 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-t-junction.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct-to-ground.png b/FluidMustFlow/graphics/icon/entities/duct-to-ground.png new file mode 100644 index 00000000..26be14e3 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct-to-ground.png differ diff --git a/FluidMustFlow/graphics/icon/entities/duct.png b/FluidMustFlow/graphics/icon/entities/duct.png new file mode 100644 index 00000000..6212c801 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/duct.png differ diff --git a/FluidMustFlow/graphics/icon/entities/non-return-duct.png b/FluidMustFlow/graphics/icon/entities/non-return-duct.png new file mode 100644 index 00000000..2f3fadc7 Binary files /dev/null and b/FluidMustFlow/graphics/icon/entities/non-return-duct.png differ diff --git a/FluidMustFlow/graphics/icon/technologies/iron_duct_tecnology.png b/FluidMustFlow/graphics/icon/technologies/iron_duct_tecnology.png new file mode 100644 index 00000000..73a4bfb5 Binary files /dev/null and b/FluidMustFlow/graphics/icon/technologies/iron_duct_tecnology.png differ diff --git a/FluidMustFlow_1.3.5/info.json b/FluidMustFlow/info.json similarity index 100% rename from FluidMustFlow_1.3.5/info.json rename to FluidMustFlow/info.json diff --git a/FluidMustFlow/locale/af/FluidMustFlow.cfg b/FluidMustFlow/locale/af/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/af/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/ar/FluidMustFlow.cfg b/FluidMustFlow/locale/ar/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/ar/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/ca/FluidMustFlow.cfg b/FluidMustFlow/locale/ca/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/ca/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/cs/FluidMustFlow.cfg b/FluidMustFlow/locale/cs/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/cs/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/da/FluidMustFlow.cfg b/FluidMustFlow/locale/da/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/da/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/de/FluidMustFlow.cfg b/FluidMustFlow/locale/de/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/de/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/el/FluidMustFlow.cfg b/FluidMustFlow/locale/el/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/el/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow_1.3.5/locale/en/FluidMustFlow.cfg b/FluidMustFlow/locale/en/FluidMustFlow.cfg similarity index 100% rename from FluidMustFlow_1.3.5/locale/en/FluidMustFlow.cfg rename to FluidMustFlow/locale/en/FluidMustFlow.cfg diff --git a/FluidMustFlow/locale/en/en.cfg b/FluidMustFlow/locale/en/en.cfg new file mode 100644 index 00000000..9e50da7d --- /dev/null +++ b/FluidMustFlow/locale/en/en.cfg @@ -0,0 +1,47 @@ +ο»Ώ[entity-description] +duct-end-point-intake=Transfers fluids from normal pipes into a duct. +duct-end-point-outtake=Transfers fluids from a duct into normal pipes. +non-return-duct=Forces fluids to flow in a single direction. + +[entity-name] +duct-cross=Cross duct +duct-curve=Curved duct +duct-end-point-intake=Duct intake +duct-end-point-outtake=Duct exhaust +duct-long=Long straight duct +duct-small=Small straight duct +duct=Straight duct +duct-t-junction=T-junction duct +duct-underground=Underground duct +non-return-duct=Non-return duct + +[mod-name] +FluidMustFlow=Fluid Must Flow + +[mod-description] +FluidMustFlow=Adds very large pipes with enormous throughput capabilities. + +[mod-setting-description] +fmf-enable-duct-auto-join=Small ducts will automatically be joined together into normal and long ducts when placed. Substantially reduces the number of items you have to deal with. + +[mod-setting-name] +fmf-enable-duct-auto-join=Enable duct auto-join [img=info] +fmf-underground-duct-max-length=Max underground duct length + +[technology-description] +Ducts=Very large pipes with enormous throughput capabilities. + +[technology-name] +Ducts=Ducts + +[tips-and-tricks-item-description] +fmf-auto-join=Contiguous [entity=duct-small]s will automatically join into [entity=duct]s.\nContiguous [entity=duct]s will automatically join into [entity=duct-long]s.\nThis feature can be disabled in the mod settings, in which case, recipes for [item=duct] and [item=duct-long] will be available. +fmf-endpoints=Due to their large size, normal pipes cannot connect directly to ducts. Therefore, fluids must enter a duct network via a [entity=duct-end-point-intake], and exit via a [entity=duct-end-point-outtake]. Up to six pipes can connect to each endpoint for high-throughput setups. +fmf-introduction=Ducts allow you to transport large amounts of fluids long distances. +fmf-non-return-duct=The [entity=non-return-duct] allows you to force fluid to move in one direction. Common usecases are to isolate the production area to avoid waste, prioritize certain branches, or to increase pressure over long distances. + +[tips-and-tricks-item-name] +fmf-auto-join=Auto-join +fmf-endpoints=Endpoints +fmf-introduction=Ducts +fmf-non-return-duct=Non-return duct diff --git a/FluidMustFlow/locale/es-ES/FluidMustFlow.cfg b/FluidMustFlow/locale/es-ES/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/es-ES/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/fi/FluidMustFlow.cfg b/FluidMustFlow/locale/fi/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/fi/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/fr/FluidMustFlow.cfg b/FluidMustFlow/locale/fr/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/fr/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/he/FluidMustFlow.cfg b/FluidMustFlow/locale/he/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/he/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/hu/FluidMustFlow.cfg b/FluidMustFlow/locale/hu/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/hu/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/it/FluidMustFlow.cfg b/FluidMustFlow/locale/it/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/it/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/ja/FluidMustFlow.cfg b/FluidMustFlow/locale/ja/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/ja/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/ko/FluidMustFlow.cfg b/FluidMustFlow/locale/ko/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/ko/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/nl/FluidMustFlow.cfg b/FluidMustFlow/locale/nl/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/nl/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/no/FluidMustFlow.cfg b/FluidMustFlow/locale/no/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/no/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/pl/FluidMustFlow.cfg b/FluidMustFlow/locale/pl/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/pl/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/pt-BZ/FluidMustFlow.cfg b/FluidMustFlow/locale/pt-BZ/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/pt-BZ/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/pt-PT/FluidMustFlow.cfg b/FluidMustFlow/locale/pt-PT/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/pt-PT/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/ro/FluidMustFlow.cfg b/FluidMustFlow/locale/ro/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/ro/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow_1.3.5/locale/ru/FluidMustFlow.cfg b/FluidMustFlow/locale/ru/FluidMustFlow.cfg similarity index 100% rename from FluidMustFlow_1.3.5/locale/ru/FluidMustFlow.cfg rename to FluidMustFlow/locale/ru/FluidMustFlow.cfg diff --git a/FluidMustFlow/locale/ru/ru.cfg b/FluidMustFlow/locale/ru/ru.cfg new file mode 100644 index 00000000..80c9446a --- /dev/null +++ b/FluidMustFlow/locale/ru/ru.cfg @@ -0,0 +1,75 @@ +ο»Ώ[other] +duct-connection-error-old=Π§Π°ΡΡ‚ΡŒ большой Ρ‚Ρ€ΡƒΠ±Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ соСдинСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ большой Ρ‚Ρ€ΡƒΠ±Ρ‹! +duct-connection-error=Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ большой Ρ‚Ρ€ΡƒΠ±Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ __1__ соСдинСниС/я с большой Ρ‚Ρ€ΡƒΠ±ΠΎΠΉ ΠΈ __2__ соСдинСний/я Ρ‚Ρ€ΡƒΠ±Π°ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°! +duct-endpoint-connection-error=ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ соСдинСны вмСстС! + +[item-name] +duct-small=ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ большая Ρ‚Ρ€ΡƒΠ±Π° +duct=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° +duct-long=Длинная большая Ρ‚Ρ€ΡƒΠ±Π° +duct-t-junction=Π’-пСрСсСчСниС большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-curve=Π‘Π³ΠΈΠ± большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-cross=ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-underground=ПодзСмная большая Ρ‚Ρ€ΡƒΠ±Π° +duct-end-point-intake=Π—Π°Π±ΠΈΡ€Π°ΡŽΡ‰Π°Ρ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-end-point-outtake=ΠžΡ‚Π΄Π°ΡŽΡ‰Π°Ρ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-intermediate-point=ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ + +[item-description] +duct-small=ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ участок большой Ρ‚Ρ€ΡƒΠ±Ρ‹ с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-long=Π”Π»ΠΈΠ½Π½Ρ‹ΠΉ участок большой Ρ‚Ρ€ΡƒΠ±Ρ‹ с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-t-junction=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с трСмя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-curve=Huge pipe bend with high throughput +duct-cross=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-underground=ПодзСмная большая Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ +duct-end-point-intake=Π’ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ‚Ρ€ΡƒΠ± ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‚Ρ€ΡƒΠ±Ρƒ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) +duct-end-point-outtake=Π’ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ· большой Ρ‚Ρ€ΡƒΠ±Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ±Ρ‹ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) +duct-intermediate-point=МалСнькая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ±Ρ‹ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) + +[entity-name] +duct-small=ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ большая Ρ‚Ρ€ΡƒΠ±Π° +duct=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° +duct-long=Длинная большая Ρ‚Ρ€ΡƒΠ±Π° +duct-t-junction=Π’-пСрСсСчСниС большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-curve=Π‘Π³ΠΈΠ± большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-cross=ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-underground=ПодзСмная большая Ρ‚Ρ€ΡƒΠ±Π° +duct-end-point-intake=Π—Π°Π±ΠΈΡ€Π°ΡŽΡ‰Π°Ρ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-end-point-outtake=ΠžΡ‚Π΄Π°ΡŽΡ‰Π°Ρ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ +duct-intermediate-point=ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° большой Ρ‚Ρ€ΡƒΠ±Ρ‹ + +[entity-description] +duct-small=ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ участок большой Ρ‚Ρ€ΡƒΠ±Ρ‹ с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-long=Π”Π»ΠΈΠ½Π½Ρ‹ΠΉ участок большой Ρ‚Ρ€ΡƒΠ±Ρ‹ с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-t-junction=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с трСмя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-curve=Huge pipe bend with high throughput +duct-cross=Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +duct-underground=ПодзСмная большая Ρ‚Ρ€ΡƒΠ±Π° с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ +duct-end-point-intake=Π’ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ‚Ρ€ΡƒΠ± ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‚Ρ€ΡƒΠ±Ρƒ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) +duct-end-point-outtake=Π’ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ ΠΈΠ· большой Ρ‚Ρ€ΡƒΠ±Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π΅ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ±Ρ‹ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) +duct-intermediate-point=МалСнькая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡƒΠ±Ρ‹ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚Ρ€ΡƒΠ±Π°ΠΌ) + +[technology-name] +Ducts=Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ Ρ‚Ρ€ΡƒΠ±Ρ‹ + +[technology-description] +Ducts=ΠŸΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ большиС Ρ‚Ρ€ΡƒΠ±Ρ‹ с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ + +[mod-setting-name] +fmf-enable-duct-invariant=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ +fmf-enable-duct-auto-join=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС соСдинСниС Ρ‚Ρ€ΡƒΠ± +fmf-underground-duct-max-length=Максимальная Π΄Π»ΠΈΠ½Π° ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½ΠΎΠΉ Ρ‚Ρ€ΡƒΠ±Ρ‹ +fmf-duct-health-multiplier=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Ρ‚Ρ€ΡƒΠ± +fmf-duct-base-level-multiplier=Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ± + +[mod-setting-description] +fmf-enable-duct-invariant=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, основныС части Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠ²ΠΎΠ΄Π° ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Если опция ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π΄Π΅Ρ‚Π°Π»ΡŒ ΠΊ мСньшим ΠΊΠ°Π½Π°Π»Π°ΠΌ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ) +fmf-enable-duct-join=Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•ΠœΠ«Π•! Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠ΄ автоматичСски соСдиняСт 2 Ρ‚Ρ€ΡƒΠ±Ρ‹ 2x1 Π² ΠΎΠ΄ΠΈΠ½Ρƒ 2x2, 2 Ρ‚Ρ€ΡƒΠ±Ρ‹ 2x2 Π² ΠΎΠ΄Π½Ρƒ 2x4. Π­Ρ‚Π° опция автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΌΠ°Π»Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. Если ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠ²ΠΎΠ΄ΠΎΠ² 2Ρ…2 ΠΈ 2Ρ…4, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ автоматичСски размСстит ΠΈΡ… ΠΏΡ€ΠΈ нСобходимости (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ) +fmf-underground-duct-max-length=МаксимальноС расстояниС ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½ΠΎΠΉ Ρ‚Ρ€ΡƒΠ±Ρ‹ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 30) +fmf-duct-health-multiplier=НЕ Π’Π ΠžΠ“ΠΠ™Π’Π• Π­Π’Π£ ОПЦИΠ, Π•Π‘Π›Π˜ Π’Π« НЕ ЗНАЕВЕ, ЧВО Π’Π« ДЕЛАЕВЕ! Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Ρ€ΡƒΠ± ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅: ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ * занятыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ * 2 (ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 4) +fmf-duct-base-level-multiplier=НЕ Π’Π ΠžΠ“ΠΠ™Π’Π• Π­Π’Π£ ОПЦИΠ, Π•Π‘Π›Π˜ Π’Π« НЕ ЗНАЕВЕ, ЧВО Π’Π« ДЕЛАЕВЕ! Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Ρ€ΡƒΠ± ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅: ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ * занятыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ * высота * 2 (ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: 4) + +[mod-name] +FluidMustFlow=Fluid Must Flow diff --git a/FluidMustFlow/locale/sr/FluidMustFlow.cfg b/FluidMustFlow/locale/sr/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/sr/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/sv-SE/FluidMustFlow.cfg b/FluidMustFlow/locale/sv-SE/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/sv-SE/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/tr/FluidMustFlow.cfg b/FluidMustFlow/locale/tr/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/tr/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/uk/FluidMustFlow.cfg b/FluidMustFlow/locale/uk/FluidMustFlow.cfg new file mode 100644 index 00000000..0ede4ab2 --- /dev/null +++ b/FluidMustFlow/locale/uk/FluidMustFlow.cfg @@ -0,0 +1,48 @@ +[entity-description] +duct-end-point-intake=ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ” Ρ€Ρ–Π΄ΠΈΠ½ΠΈ Π·Ρ– Π·Π²ΠΈΡ‡Π°ΠΉΠ½ΠΈΡ… Ρ‚Ρ€ΡƒΠ± Ρƒ ΠΏΠΎΠ²Ρ–Ρ‚Ρ€ΠΎΠΏΡ€ΠΎΠ²Ρ–Π΄. +duct-end-point-outtake=ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ” Ρ€Ρ–Π΄ΠΈΠ½ΠΈ Π· ΠΊΠ°Π½Π°Π»Ρƒ Ρƒ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ. +non-return-duct=Π—ΠΌΡƒΡˆΡƒΡ” Ρ€Ρ–Π΄ΠΈΠ½ΠΈ Ρ‚Π΅ΠΊΡ‚ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ напрямку. + +[entity-name] +duct-cross=Π₯рСстоподібна ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct-curve=Π’ΠΈΠ³Π½ΡƒΡ‚Π° ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct-end-point-intake=Π’Ρ…Ρ–Π΄ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΡ— Ρ‚Ρ€ΡƒΠ±ΠΈ +duct-end-point-outtake=Π’ΠΈΡ…Ρ–Π΄ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΡ— Ρ‚Ρ€ΡƒΠ±ΠΈ +duct-long=Π”ΠΎΠ²Π³Π° пряма ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct-small=ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ° пряма ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct=ΠŸΡ€ΡΠΌΠ° ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct-t-junction=Π’-ΠΏΠΎΠ΄Ρ–Π±Π½Π° ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +duct-underground=ΠŸΡ–Π΄Π·Π΅ΠΌΠ½Π° ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Π° Ρ‚Ρ€ΡƒΠ±Π° +non-return-duct=Π—Π²ΠΎΡ€ΠΎΡ‚Π½ΠΈΠΉ ΠΊΠ»Π°ΠΏΠ°Π½ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΡ— Ρ‚Ρ€ΡƒΠ±ΠΈ + +[mod-name] +FluidMustFlow=Fluid Must Flow + +[mod-description] +FluidMustFlow=Π”ΠΎΠ΄Π°Ρ” Π΄ΡƒΠΆΠ΅ Π²Π΅Π»ΠΈΠΊΡ– Ρ‚Ρ€ΡƒΠ±ΠΈ Π· Π²Π΅Π»ΠΈΡ‡Π΅Π·Π½ΠΎΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΠΎΡŽ Π·Π΄Π°Ρ‚Π½Ρ–ΡΡ‚ΡŽ. + +[mod-setting-description] +fmf-enable-duct-auto-join=НСвСликі ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π·'Ρ”Π΄Π½ΡƒΡŽΡ‚ΡŒΡΡ Ρ€Π°Π·ΠΎΠΌ Ρƒ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Ρ– Ρ‚Π° Π΄ΠΎΠ²Π³Ρ– ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ ΠΏΡ–Π΄ час укладання. Π¦Π΅ Π·Π½Π°Ρ‡Π½ΠΎ Π·ΠΌΠ΅Π½ΡˆΡƒΡ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ–Π², Π· якими Π²Π°ΠΌ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ ΠΌΠ°Ρ‚ΠΈ справу. + +[mod-setting-name] +fmf-enable-duct-auto-join=Π£Π²Ρ–ΠΌΠΊΠ½Ρ–Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π΅ Π·'єднання ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΈΡ… Ρ‚Ρ€ΡƒΠ± [img=info] +fmf-underground-duct-max-length=Максимальна Π΄ΠΎΠ²ΠΆΠΈΠ½Π° ΠΏΡ–Π΄Π·Π΅ΠΌΠ½ΠΈΡ… ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΈΡ… Ρ‚Ρ€ΡƒΠ± + +[technology-description] +Ducts=Π”ΡƒΠΆΠ΅ Π²Π΅Π»ΠΈΠΊΡ– Ρ‚Ρ€ΡƒΠ±ΠΈ Π· Π²Π΅Π»ΠΈΡ‡Π΅Π·Π½ΠΎΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΠΎΡŽ Π·Π΄Π°Ρ‚Π½Ρ–ΡΡ‚ΡŽ. + +[technology-name] +Ducts=ΠœΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ + +[tips-and-tricks-item-description] +fmf-auto-join=Π‘ΡƒΠΌΡ–ΠΆΠ½Ρ– [entity=duct-small]ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ±'Ρ”Π΄Π½Π°ΡŽΡ‚ΡŒΡΡ Ρƒ [entity=duct]ΠΉ.\nΠ‘ΡƒΠΌΡ–ΠΆΠ½Ρ– [entity=duct]Ρ– Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ±'Ρ”Π΄Π½Π°ΡŽΡ‚ΡŒΡΡ Ρƒ [entity=duct-long]ΠΉ.\nЦю Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΌΠΊΠ½ΡƒΡ‚ΠΈ Ρƒ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½ΡΡ… ΠΌΠΎΠ΄Π°, Ρƒ Ρ†ΡŒΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ доступні Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ для [item=duct] Ρ– [item=duct-long]. +fmf-endpoints=Π§Π΅Ρ€Π΅Π· свій Π²Π΅Π»ΠΈΠΊΠΈΠΉ Ρ€ΠΎΠ·ΠΌΡ–Ρ€ Π·Π²ΠΈΡ‡Π°ΠΉΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΠΈΡΡ Π±Π΅Π·ΠΏΠΎΡΠ΅Ρ€Π΅Π΄Π½ΡŒΠΎ Π΄ΠΎ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΈΡ… Ρ‚Ρ€ΡƒΠ±. Π’ΠΎΠΌΡƒ Ρ€Ρ–Π΄ΠΈΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΠΈ Π² ΠΌΠ΅Ρ€Π΅ΠΆΡƒ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΈΡ… Ρ‚Ρ€ΡƒΠ± Ρ‡Π΅Ρ€Π΅Π· [entity=duct-end-point-intake], Π° Π²ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· [entity=duct-end-point-outtake]. Π”ΠΎ ΠΊΠΎΠΆΠ½ΠΎΡ— ΠΊΡ–Π½Ρ†Π΅Π²ΠΎΡ— Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½Π° ΠΏΡ–Π΄'Ρ”Π΄Π½Π°Ρ‚ΠΈ Π΄ΠΎ ΡˆΠ΅ΡΡ‚ΠΈ Ρ‚Ρ€ΡƒΠ± для забСзпСчСння високої пропускної здатності. +fmf-introduction=ΠœΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ΡŒ транспортувати Π²Π΅Π»ΠΈΠΊΡƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Ρ€Ρ–Π΄ΠΈΠ½ΠΈ Π½Π° Π²Π΅Π»ΠΈΠΊΡ– відстані. +fmf-non-return-duct=[entity=non-return-duct] дозволяє змусити Ρ€Ρ–Π΄ΠΈΠ½Ρƒ рухатися Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ напрямку. ΠΠ°ΠΉΠΏΠΎΡˆΠΈΡ€Π΅Π½Ρ–ΡˆΡ– Π²ΠΈΠΏΠ°Π΄ΠΊΠΈ використання - Ρ–Π·ΠΎΠ»ΡŽΠ²Π°Ρ‚ΠΈ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡Ρƒ Π·ΠΎΠ½Ρƒ, Ρ‰ΠΎΠ± ΡƒΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ Π²Ρ–Π΄Ρ…ΠΎΠ΄Ρ–Π², Π½Π°Π΄Π°Ρ‚ΠΈ ΠΏΡ€Ρ–ΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠ΅Π²Π½ΠΈΠΌ Π³Ρ–Π»ΠΊΠ°ΠΌ Π°Π±ΠΎ Π·Π±Ρ–Π»ΡŒΡˆΠΈΡ‚ΠΈ тиск Π½Π° Π²Π΅Π»ΠΈΠΊΠΈΡ… відстанях. + +[tips-and-tricks-item-name] +fmf-auto-join=АвтоматичнС приєднання +fmf-endpoints=ΠšΡ–Π½Ρ†Π΅Π²Ρ– Ρ‚ΠΎΡ‡ΠΊΠΈ +fmf-introduction=ΠœΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½Ρ– Ρ‚Ρ€ΡƒΠ±ΠΈ +fmf-non-return-duct=Π—Π²ΠΎΡ€ΠΎΡ‚Π½ΠΈΠΉ ΠΊΠ»Π°ΠΏΠ°Π½ ΠΌΠ°Π³Ρ–ΡΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΡ— Ρ‚Ρ€ΡƒΠ±ΠΈ + diff --git a/FluidMustFlow/locale/vi/FluidMustFlow.cfg b/FluidMustFlow/locale/vi/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/vi/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow/locale/zh-CN/FluidMustFlow.cfg b/FluidMustFlow/locale/zh-CN/FluidMustFlow.cfg new file mode 100644 index 00000000..5651baeb --- /dev/null +++ b/FluidMustFlow/locale/zh-CN/FluidMustFlow.cfg @@ -0,0 +1,48 @@ +[entity-description] +duct-end-point-intake=将桁体由ζ™ι€šη‘道输送至粗η‘。 +duct-end-point-outtake=将桁体由粗η‘输送至ζ™ι€šη‘道。 +non-return-duct=θΏ«δ½Ώζ΅δ½“ε•ε‘ζ΅εŠ¨γ€‚ + +[entity-name] +duct-cross=δΊ€ε‰η²—η‘ +duct-curve=θ½¬ε‘η²—η‘ +duct-end-point-intake=η²—η‘θΎ“ε…₯η«― +duct-end-point-outtake=η²—η‘θΎ“ε‡Ίη«― +duct-long=ι•Ώη›΄η²—η‘ +duct-small=ηŸ­η›΄η²—η‘ +duct=η›΄η²—η‘ +duct-t-junction=δΈε­—η²—η‘ +duct-underground=εœ°δΈ‹η²—η‘ +non-return-duct=单向粗η‘泡 + +[mod-name] +FluidMustFlow=桁必桁 + +[mod-description] +FluidMustFlow=ζ·»εŠ ε…·ζœ‰ε·¨ε€§εžει‡ηš„θΆ…ε€§εž‹η‘道。 + +[mod-setting-description] +fmf-enable-duct-auto-join=ζ”Ύη½ζ—ΆοΌŒηŸ­η›΄η‘ε°†θ‡ͺ动连ζŽ₯成ζ™ι€šη‘ι“ε’Œι•Ώη›΄η²—η‘γ€‚θΏ™ε°†ε€§ε€§ε‡ε°‘ζ‰€ιœ€ε€„η†ηš„η‰©ε“ζ•°ι‡γ€‚ + +[mod-setting-name] +fmf-enable-duct-auto-join=启用粗η‘θ‡ͺ动连ζŽ₯[img=info] +fmf-underground-duct-max-length=εœ°δΈ‹η²—η‘ηš„ζœ€ε€§θΏžζŽ₯ι•ΏεΊ¦ + +[technology-description] +Ducts=θΆ…ε€§η‘ι“οΌŒε…·ζœ‰ε·¨ε€§ηš„ζ΅ι‡γ€‚ + +[technology-name] +Ducts=η²—η‘ + +[tips-and-tricks-item-description] +fmf-auto-join=θΏžη»­ηš„[entity=duct-small]ε°†δΌšθ‡ͺ动连ζŽ₯至[entity=duct]。\nθΏžη»­ηš„[entity=duct]ε°†δΌšθ‡ͺ动连ζŽ₯至[entity=duct-long]。\nζ­€εŠŸθƒ½ε―δ»₯εœ¨ζ¨‘η»„θΎη½δΈ­η¦η”¨οΌŒεœ¨θΏ™η§ζƒ…冡下, 配方[item=duct]ε’Œ[item=duct-long]将蒫启用。 +fmf-endpoints=η”±δΊŽε°Ίε―ΈθΎƒε€§οΌŒζ™ι€šη‘道无法直ζŽ₯连ζŽ₯到η‘ι“γ€‚ε› ζ­€οΌŒζ΅δ½“εΏ…ι‘»ι€šθΏ‡[entity=duct-end-point-intake]θΎ“ε…₯,δ»₯εŠεΏ…ι‘»ι€šθΏ‡ [entity=duct-end-point-outtake]输出。每δΈͺθΏ›ε‡Ίη«―ζœ€ε€šε―δ»₯连ζŽ₯ε…­δΈͺη‘道。 +fmf-introduction=η²—η‘允θΈδ½ ι•Ώθ·η¦»θΎ“ι€ε€§ι‡ηš„ζ΅δ½“γ€‚ +fmf-non-return-duct=[entity=non-return-duct]允θΈζ‚¨εΌΊεˆΆζ΅δ½“向一δΈͺζ–Ήε‘η§»εŠ¨γ€‚εΈΈθ§ηš„δ½Ώη”¨ζƒ…ε†΅ζ˜―ιš”η¦»η”ŸδΊ§εŒΊεŸŸδ»₯避免ζ΅ͺθ΄ΉοΌŒδΌ˜ε…ˆθ€ƒθ™‘ζŸδΊ›εˆ†ζ”―οΌŒζˆ–ε’žεŠ ι•Ώθ·η¦»ηš„εŽ‹εΌΊγ€‚ + +[tips-and-tricks-item-name] +fmf-auto-join=θ‡ͺ动连ζŽ₯ +fmf-endpoints=端口 +fmf-introduction=η²—η‘ +fmf-non-return-duct=单向粗η‘泡 + diff --git a/FluidMustFlow/locale/zh-TW/FluidMustFlow.cfg b/FluidMustFlow/locale/zh-TW/FluidMustFlow.cfg new file mode 100644 index 00000000..8b3f6267 --- /dev/null +++ b/FluidMustFlow/locale/zh-TW/FluidMustFlow.cfg @@ -0,0 +1,20 @@ +[entity-description] + +[entity-name] + +[mod-name] + +[mod-description] + +[mod-setting-description] + +[mod-setting-name] + +[technology-description] + +[technology-name] + +[tips-and-tricks-item-description] + +[tips-and-tricks-item-name] + diff --git a/FluidMustFlow_1.3.5/migrations/FluidMustFlow_1.2.12.json b/FluidMustFlow/migrations/FluidMustFlow_1.2.12.json similarity index 100% rename from FluidMustFlow_1.3.5/migrations/FluidMustFlow_1.2.12.json rename to FluidMustFlow/migrations/FluidMustFlow_1.2.12.json diff --git a/FluidMustFlow_1.3.5/prototypes/compatibility/IndustrialRevolution.lua b/FluidMustFlow/prototypes/compatibility/IndustrialRevolution.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/compatibility/IndustrialRevolution.lua rename to FluidMustFlow/prototypes/compatibility/IndustrialRevolution.lua diff --git a/FluidMustFlow_1.3.5/prototypes/compatibility/SqueakThrough.lua b/FluidMustFlow/prototypes/compatibility/SqueakThrough.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/compatibility/SqueakThrough.lua rename to FluidMustFlow/prototypes/compatibility/SqueakThrough.lua diff --git a/FluidMustFlow_1.3.5/prototypes/compatibility/bobsep.lua b/FluidMustFlow/prototypes/compatibility/bobsep.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/compatibility/bobsep.lua rename to FluidMustFlow/prototypes/compatibility/bobsep.lua diff --git a/FluidMustFlow_1.3.5/prototypes/compatibility/space-exploration.lua b/FluidMustFlow/prototypes/compatibility/space-exploration.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/compatibility/space-exploration.lua rename to FluidMustFlow/prototypes/compatibility/space-exploration.lua diff --git a/FluidMustFlow_1.3.5/prototypes/entities.lua b/FluidMustFlow/prototypes/entities.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/entities.lua rename to FluidMustFlow/prototypes/entities.lua diff --git a/FluidMustFlow_1.3.5/prototypes/entity/ducts.lua b/FluidMustFlow/prototypes/entity/ducts.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/entity/ducts.lua rename to FluidMustFlow/prototypes/entity/ducts.lua diff --git a/FluidMustFlow_1.3.5/prototypes/entity/ducts_end_points.lua b/FluidMustFlow/prototypes/entity/ducts_end_points.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/entity/ducts_end_points.lua rename to FluidMustFlow/prototypes/entity/ducts_end_points.lua diff --git a/FluidMustFlow_1.3.5/prototypes/entity/ducts_intermediate_points.lua b/FluidMustFlow/prototypes/entity/ducts_intermediate_points.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/entity/ducts_intermediate_points.lua rename to FluidMustFlow/prototypes/entity/ducts_intermediate_points.lua diff --git a/FluidMustFlow_1.3.5/prototypes/items.lua b/FluidMustFlow/prototypes/items.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/items.lua rename to FluidMustFlow/prototypes/items.lua diff --git a/FluidMustFlow_1.3.5/prototypes/recipes.lua b/FluidMustFlow/prototypes/recipes.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/recipes.lua rename to FluidMustFlow/prototypes/recipes.lua diff --git a/FluidMustFlow_1.3.5/prototypes/simulations.lua b/FluidMustFlow/prototypes/simulations.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/simulations.lua rename to FluidMustFlow/prototypes/simulations.lua diff --git a/FluidMustFlow_1.3.5/prototypes/technologies.lua b/FluidMustFlow/prototypes/technologies.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/technologies.lua rename to FluidMustFlow/prototypes/technologies.lua diff --git a/FluidMustFlow_1.3.5/prototypes/tips-and-tricks.lua b/FluidMustFlow/prototypes/tips-and-tricks.lua similarity index 100% rename from FluidMustFlow_1.3.5/prototypes/tips-and-tricks.lua rename to FluidMustFlow/prototypes/tips-and-tricks.lua diff --git a/FluidMustFlow_1.3.5/settings.lua b/FluidMustFlow/settings.lua similarity index 100% rename from FluidMustFlow_1.3.5/settings.lua rename to FluidMustFlow/settings.lua diff --git a/FluidMustFlow/thumbnail.png b/FluidMustFlow/thumbnail.png new file mode 100644 index 00000000..32f5b065 Binary files /dev/null and b/FluidMustFlow/thumbnail.png differ diff --git a/FluidMustFlow_1.3.5.zip b/FluidMustFlow_1.3.5.zip deleted file mode 100644 index c90a9367..00000000 Binary files a/FluidMustFlow_1.3.5.zip and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left.png deleted file mode 100644 index 837af337..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png deleted file mode 100644 index c44bb287..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png deleted file mode 100644 index 07747712..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up.png deleted file mode 100644 index 15daaf24..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png deleted file mode 100644 index 26d4e15f..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct-ground-up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down.png deleted file mode 100644 index 02431817..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png deleted file mode 100644 index 0c17dedb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right.png deleted file mode 100644 index 243c61e4..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png deleted file mode 100644 index 7ce30cb2..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/duct_ground_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left.png deleted file mode 100644 index 37be0a62..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png deleted file mode 100644 index 45e59a72..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png deleted file mode 100644 index 5f1db2a1..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up.png deleted file mode 100644 index b40a3005..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png deleted file mode 100644 index 1121fa4b..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct-ground-up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down.png deleted file mode 100644 index e22fae3f..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png deleted file mode 100644 index 6b12042e..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right.png deleted file mode 100644 index fd410de9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png deleted file mode 100644 index a52b2ec3..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct-ground/hr_duct_ground_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal.png deleted file mode 100644 index 907e2d14..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal_shadow.png deleted file mode 100644 index f9d5111b..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical.png deleted file mode 100644 index b904c3eb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical_shadow.png deleted file mode 100644 index 898fd8d9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/duct_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal.png deleted file mode 100644 index 53f45d1f..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png deleted file mode 100644 index 071d246e..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical.png deleted file mode 100644 index c0076bb6..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical_shadow.png deleted file mode 100644 index 0d2c49d7..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct/hr_duct_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down.png deleted file mode 100644 index 210988f0..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down_shadow.png deleted file mode 100644 index 7e41b7c6..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left.png deleted file mode 100644 index 94ae7d04..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left_shadow.png deleted file mode 100644 index 0aa127b3..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right.png deleted file mode 100644 index 7081fb74..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right_shadow.png deleted file mode 100644 index fa41670a..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up.png deleted file mode 100644 index 514e6b9c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up_shadow.png deleted file mode 100644 index 54d761b4..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/duct_T_up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down.png deleted file mode 100644 index 672e7d2c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png deleted file mode 100644 index 0e4ad9ec..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left.png deleted file mode 100644 index 6822a6a6..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png deleted file mode 100644 index 907f417b..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right.png deleted file mode 100644 index 479840b8..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png deleted file mode 100644 index 7be3d92a..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up.png deleted file mode 100644 index b13be200..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png deleted file mode 100644 index 0da34347..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_T/hr_duct_T_up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left.png deleted file mode 100644 index 5029f50a..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png deleted file mode 100644 index 7b7b7675..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right.png deleted file mode 100644 index a136ae35..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png deleted file mode 100644 index e3369c6a..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_down_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left.png deleted file mode 100644 index 9a6cf9f1..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png deleted file mode 100644 index 79213e23..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right.png deleted file mode 100644 index 82d70194..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png deleted file mode 100644 index 9c45f4f5..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/duct_corner_up_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png deleted file mode 100644 index c0a1e548..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png deleted file mode 100644 index e801c93b..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png deleted file mode 100644 index b4468d8c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png deleted file mode 100644 index 875d94d8..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_down_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png deleted file mode 100644 index 52c746af..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png deleted file mode 100644 index 92b46531..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png deleted file mode 100644 index 9ac94bd9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png deleted file mode 100644 index d1a25006..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_corner/hr_duct_corner_up_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/duct_cross.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/duct_cross.png deleted file mode 100644 index fc40fb4b..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/duct_cross.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross.png deleted file mode 100644 index 3e19cd4a..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png deleted file mode 100644 index 8ec94f46..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_cross/hr_duct_cross_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal.png deleted file mode 100644 index bb2a2c6d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png deleted file mode 100644 index bfebcdfb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical.png deleted file mode 100644 index e31506e2..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png deleted file mode 100644 index 37dfbb29..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/duct_long_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png deleted file mode 100644 index 3f753ea8..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png deleted file mode 100644 index ac51cc63..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical.png deleted file mode 100644 index 4a8a1c17..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png deleted file mode 100644 index 61836165..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_long/hr_duct_long_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png deleted file mode 100644 index e52f85a9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png deleted file mode 100644 index 4b9c6585..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png deleted file mode 100644 index b460f62f..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png deleted file mode 100644 index dc058085..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/duct_small_straight_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png deleted file mode 100644 index dbf86aeb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png deleted file mode 100644 index 4cbe9b9e..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/backupo/hr_duct_small_straight_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png deleted file mode 100644 index e52f85a9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png deleted file mode 100644 index 4b9c6585..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical.png deleted file mode 100644 index b460f62f..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png deleted file mode 100644 index dc058085..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/duct_small_straight_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png deleted file mode 100644 index dbf86aeb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png deleted file mode 100644 index 4cbe9b9e..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png deleted file mode 100644 index 4537cd7c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png deleted file mode 100644 index 1d0cc848..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/duct/duct_small/hr_duct_small_straight_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png deleted file mode 100644 index 28c7f8c0..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png deleted file mode 100644 index 7ed7d1d0..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png deleted file mode 100644 index c90e7ea8..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png deleted file mode 100644 index 7c4b758c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/duct_end_point_intake_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png deleted file mode 100644 index baa7f62c..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png deleted file mode 100644 index daf09faa..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png deleted file mode 100644 index 22dd99e1..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png deleted file mode 100644 index 1797ac23..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_intake/hr_duct_end_point_intake_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png deleted file mode 100644 index 45b0bbc1..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png deleted file mode 100644 index d902ebaa..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png deleted file mode 100644 index a1c159de..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png deleted file mode 100644 index e23af7d4..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/duct_end_point_outtake_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png deleted file mode 100644 index 8b532a25..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png deleted file mode 100644 index 67d6a7f9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png deleted file mode 100644 index 34b30bd1..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png deleted file mode 100644 index 5a69ce87..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_point_outtake/hr_duct_end_point_outtake_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png deleted file mode 100644 index bf339d59..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png deleted file mode 100644 index 9c213f25..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png deleted file mode 100644 index fcf1bbdb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png deleted file mode 100644 index 6755029d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/duct_end_points_up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png deleted file mode 100644 index fbefc635..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_down_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png deleted file mode 100644 index 203129cf..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_left_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png deleted file mode 100644 index 102e00a2..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_right_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png deleted file mode 100644 index 0b73b5fd..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_end_points/hr_duct_end_points_up_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png deleted file mode 100644 index 719d8cc6..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png deleted file mode 100644 index 52f33cba..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png deleted file mode 100644 index f32d45e0..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png deleted file mode 100644 index 557c3319..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png deleted file mode 100644 index bdbc12df..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/hr_non_return_duct_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_down.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_down.png deleted file mode 100644 index af0b1dcd..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_down.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png deleted file mode 100644 index 646e4872..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_horizontal_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_left.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_left.png deleted file mode 100644 index 9fde9b01..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_left.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_right.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_right.png deleted file mode 100644 index 151c74c7..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_right.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_up.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_up.png deleted file mode 100644 index 63b9cd6d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_up.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png b/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png deleted file mode 100644 index 0f209fcb..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/ducts_intermediate_points/non_return_duct_vertical_shadow.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/other/hr_pipe-straight-vertical.png b/FluidMustFlow_1.3.5/graphics/entity/other/hr_pipe-straight-vertical.png deleted file mode 100644 index d2eae9d9..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/other/hr_pipe-straight-vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/entity/other/pipe-straight-vertical.png b/FluidMustFlow_1.3.5/graphics/entity/other/pipe-straight-vertical.png deleted file mode 100644 index b0c1af73..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/entity/other/pipe-straight-vertical.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-cross.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-cross.png deleted file mode 100644 index 87f36ad0..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-cross.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-curve.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-curve.png deleted file mode 100644 index ba5ccd49..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-curve.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-intake.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-intake.png deleted file mode 100644 index 86270a86..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-intake.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-outtake.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-outtake.png deleted file mode 100644 index f0fd4fad..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point-outtake.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point.png deleted file mode 100644 index 5c230cd5..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-end-point.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-long.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-long.png deleted file mode 100644 index e84bb84d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-long.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-small.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-small.png deleted file mode 100644 index bbf87d3d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-small.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-t-junction.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-t-junction.png deleted file mode 100644 index a79162f5..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-t-junction.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-to-ground.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct-to-ground.png deleted file mode 100644 index e03ef744..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct-to-ground.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/duct.png b/FluidMustFlow_1.3.5/graphics/icon/entities/duct.png deleted file mode 100644 index c447a643..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/duct.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/entities/non-return-duct.png b/FluidMustFlow_1.3.5/graphics/icon/entities/non-return-duct.png deleted file mode 100644 index 6228647d..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/entities/non-return-duct.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/graphics/icon/technologies/iron_duct_tecnology.png b/FluidMustFlow_1.3.5/graphics/icon/technologies/iron_duct_tecnology.png deleted file mode 100644 index a517befe..00000000 Binary files a/FluidMustFlow_1.3.5/graphics/icon/technologies/iron_duct_tecnology.png and /dev/null differ diff --git a/FluidMustFlow_1.3.5/thumbnail.png b/FluidMustFlow_1.3.5/thumbnail.png deleted file mode 100644 index ddca06cc..00000000 Binary files a/FluidMustFlow_1.3.5/thumbnail.png and /dev/null differ diff --git a/GUI_Unifyer_1.12.0/README.md b/GUI_Unifyer/README.md similarity index 100% rename from GUI_Unifyer_1.12.0/README.md rename to GUI_Unifyer/README.md diff --git a/GUI_Unifyer_1.12.0/changelog.txt b/GUI_Unifyer/changelog.txt similarity index 100% rename from GUI_Unifyer_1.12.0/changelog.txt rename to GUI_Unifyer/changelog.txt diff --git a/GUI_Unifyer_1.12.0/control.lua b/GUI_Unifyer/control.lua similarity index 100% rename from GUI_Unifyer_1.12.0/control.lua rename to GUI_Unifyer/control.lua diff --git a/GUI_Unifyer_1.12.0/data.lua b/GUI_Unifyer/data.lua similarity index 100% rename from GUI_Unifyer_1.12.0/data.lua rename to GUI_Unifyer/data.lua diff --git a/GUI_Unifyer_1.12.0/graphics/gui/deleteadjacentchunks_center.png b/GUI_Unifyer/graphics/gui/deleteadjacentchunks_center.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/deleteadjacentchunks_center.png rename to GUI_Unifyer/graphics/gui/deleteadjacentchunks_center.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_01.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_01.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_01.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_01.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_02.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_02.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_02.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_02.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_03.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_03.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_03.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_03.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_04.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_04.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_04.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_04.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_05.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_05.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_05.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_05.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_06.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_06.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_06.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_06.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_07.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_07.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_07.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_07.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_08.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_08.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_08.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_08.png diff --git a/GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_default_recreated.png b/GUI_Unifyer/graphics/gui/gui_unifyer_gui_default_recreated.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/gui/gui_unifyer_gui_default_recreated.png rename to GUI_Unifyer/graphics/gui/gui_unifyer_gui_default_recreated.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/248k_button.png b/GUI_Unifyer/graphics/icons/248k_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/248k_button.png rename to GUI_Unifyer/graphics/icons/248k_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/abd_off_button.png b/GUI_Unifyer/graphics/icons/abd_off_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/abd_off_button.png rename to GUI_Unifyer/graphics/icons/abd_off_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/abd_on_button.png b/GUI_Unifyer/graphics/icons/abd_on_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/abd_on_button.png rename to GUI_Unifyer/graphics/icons/abd_on_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/actr_button.png b/GUI_Unifyer/graphics/icons/actr_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/actr_button.png rename to GUI_Unifyer/graphics/icons/actr_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/attilazoommod_button.png b/GUI_Unifyer/graphics/icons/attilazoommod_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/attilazoommod_button.png rename to GUI_Unifyer/graphics/icons/attilazoommod_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/autotrash_button.png b/GUI_Unifyer/graphics/icons/autotrash_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/autotrash_button.png rename to GUI_Unifyer/graphics/icons/autotrash_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/autotrash_red_button.png b/GUI_Unifyer/graphics/icons/autotrash_red_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/autotrash_red_button.png rename to GUI_Unifyer/graphics/icons/autotrash_red_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/autotrash_redyellow_button.png b/GUI_Unifyer/graphics/icons/autotrash_redyellow_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/autotrash_redyellow_button.png rename to GUI_Unifyer/graphics/icons/autotrash_redyellow_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/autotrash_yellow_button.png b/GUI_Unifyer/graphics/icons/autotrash_yellow_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/autotrash_yellow_button.png rename to GUI_Unifyer/graphics/icons/autotrash_yellow_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/avatars_button.png b/GUI_Unifyer/graphics/icons/avatars_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/avatars_button.png rename to GUI_Unifyer/graphics/icons/avatars_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/beastfinder_button.png b/GUI_Unifyer/graphics/icons/beastfinder_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/beastfinder_button.png rename to GUI_Unifyer/graphics/icons/beastfinder_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/betterbotsfixed_button.png b/GUI_Unifyer/graphics/icons/betterbotsfixed_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/betterbotsfixed_button.png rename to GUI_Unifyer/graphics/icons/betterbotsfixed_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blackmarket1_button.png b/GUI_Unifyer/graphics/icons/blackmarket1_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blackmarket1_button.png rename to GUI_Unifyer/graphics/icons/blackmarket1_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blackmarket2_button.png b/GUI_Unifyer/graphics/icons/blackmarket2_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blackmarket2_button.png rename to GUI_Unifyer/graphics/icons/blackmarket2_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blueprint_flip_horizontal_button.png b/GUI_Unifyer/graphics/icons/blueprint_flip_horizontal_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blueprint_flip_horizontal_button.png rename to GUI_Unifyer/graphics/icons/blueprint_flip_horizontal_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blueprint_flip_vertical_button.png b/GUI_Unifyer/graphics/icons/blueprint_flip_vertical_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blueprint_flip_vertical_button.png rename to GUI_Unifyer/graphics/icons/blueprint_flip_vertical_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blueprintalignment_button.png b/GUI_Unifyer/graphics/icons/blueprintalignment_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blueprintalignment_button.png rename to GUI_Unifyer/graphics/icons/blueprintalignment_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blueprintlabdesign_button.png b/GUI_Unifyer/graphics/icons/blueprintlabdesign_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blueprintlabdesign_button.png rename to GUI_Unifyer/graphics/icons/blueprintlabdesign_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/blueprintrequest_button.png b/GUI_Unifyer/graphics/icons/blueprintrequest_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/blueprintrequest_button.png rename to GUI_Unifyer/graphics/icons/blueprintrequest_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/bobclasses_button.png b/GUI_Unifyer/graphics/icons/bobclasses_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/bobclasses_button.png rename to GUI_Unifyer/graphics/icons/bobclasses_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/bobinserters_button.png b/GUI_Unifyer/graphics/icons/bobinserters_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/bobinserters_button.png rename to GUI_Unifyer/graphics/icons/bobinserters_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/cargotrainmanager_button.png b/GUI_Unifyer/graphics/icons/cargotrainmanager_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/cargotrainmanager_button.png rename to GUI_Unifyer/graphics/icons/cargotrainmanager_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/changemapsettings_button.png b/GUI_Unifyer/graphics/icons/changemapsettings_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/changemapsettings_button.png rename to GUI_Unifyer/graphics/icons/changemapsettings_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/citiesofearth_button.png b/GUI_Unifyer/graphics/icons/citiesofearth_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/citiesofearth_button.png rename to GUI_Unifyer/graphics/icons/citiesofearth_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/cleanmap_button.png b/GUI_Unifyer/graphics/icons/cleanmap_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/cleanmap_button.png rename to GUI_Unifyer/graphics/icons/cleanmap_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/clusterio_button.png b/GUI_Unifyer/graphics/icons/clusterio_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/clusterio_button.png rename to GUI_Unifyer/graphics/icons/clusterio_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/commuguidemod_guide_button.png b/GUI_Unifyer/graphics/icons/commuguidemod_guide_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/commuguidemod_guide_button.png rename to GUI_Unifyer/graphics/icons/commuguidemod_guide_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/commuguidemod_pupil_button.png b/GUI_Unifyer/graphics/icons/commuguidemod_pupil_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/commuguidemod_pupil_button.png rename to GUI_Unifyer/graphics/icons/commuguidemod_pupil_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/creativemod_button.png b/GUI_Unifyer/graphics/icons/creativemod_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/creativemod_button.png rename to GUI_Unifyer/graphics/icons/creativemod_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/credotimelapse_button.png b/GUI_Unifyer/graphics/icons/credotimelapse_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/credotimelapse_button.png rename to GUI_Unifyer/graphics/icons/credotimelapse_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/cursedexp_button.png b/GUI_Unifyer/graphics/icons/cursedexp_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/cursedexp_button.png rename to GUI_Unifyer/graphics/icons/cursedexp_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/dana_button.png b/GUI_Unifyer/graphics/icons/dana_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/dana_button.png rename to GUI_Unifyer/graphics/icons/dana_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/deathcounter_button.png b/GUI_Unifyer/graphics/icons/deathcounter_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/deathcounter_button.png rename to GUI_Unifyer/graphics/icons/deathcounter_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/decu_button.png b/GUI_Unifyer/graphics/icons/decu_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/decu_button.png rename to GUI_Unifyer/graphics/icons/decu_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/defaultwaitconditions_button.png b/GUI_Unifyer/graphics/icons/defaultwaitconditions_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/defaultwaitconditions_button.png rename to GUI_Unifyer/graphics/icons/defaultwaitconditions_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/diplomacy_button.png b/GUI_Unifyer/graphics/icons/diplomacy_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/diplomacy_button.png rename to GUI_Unifyer/graphics/icons/diplomacy_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/doingthingsbyhand_button.png b/GUI_Unifyer/graphics/icons/doingthingsbyhand_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/doingthingsbyhand_button.png rename to GUI_Unifyer/graphics/icons/doingthingsbyhand_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/electronic_locomotives_button.png b/GUI_Unifyer/graphics/icons/electronic_locomotives_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/electronic_locomotives_button.png rename to GUI_Unifyer/graphics/icons/electronic_locomotives_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/enemyracemanager_button.png b/GUI_Unifyer/graphics/icons/enemyracemanager_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/enemyracemanager_button.png rename to GUI_Unifyer/graphics/icons/enemyracemanager_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/facautoscreenshot_button.png b/GUI_Unifyer/graphics/icons/facautoscreenshot_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/facautoscreenshot_button.png rename to GUI_Unifyer/graphics/icons/facautoscreenshot_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/factorio_tweaks_button.png b/GUI_Unifyer/graphics/icons/factorio_tweaks_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/factorio_tweaks_button.png rename to GUI_Unifyer/graphics/icons/factorio_tweaks_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/factorissimo2_button.png b/GUI_Unifyer/graphics/icons/factorissimo2_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/factorissimo2_button.png rename to GUI_Unifyer/graphics/icons/factorissimo2_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/factorissimo2_inspect_button.png b/GUI_Unifyer/graphics/icons/factorissimo2_inspect_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/factorissimo2_inspect_button.png rename to GUI_Unifyer/graphics/icons/factorissimo2_inspect_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/factoryplanner_button.png b/GUI_Unifyer/graphics/icons/factoryplanner_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/factoryplanner_button.png rename to GUI_Unifyer/graphics/icons/factoryplanner_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/fjei_button.png b/GUI_Unifyer/graphics/icons/fjei_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/fjei_button.png rename to GUI_Unifyer/graphics/icons/fjei_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/forces_button.png b/GUI_Unifyer/graphics/icons/forces_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/forces_button.png rename to GUI_Unifyer/graphics/icons/forces_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/helmod_button.png b/GUI_Unifyer/graphics/icons/helmod_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/helmod_button.png rename to GUI_Unifyer/graphics/icons/helmod_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/hive_mind_button1.png b/GUI_Unifyer/graphics/icons/hive_mind_button1.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/hive_mind_button1.png rename to GUI_Unifyer/graphics/icons/hive_mind_button1.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/hive_mind_button2.png b/GUI_Unifyer/graphics/icons/hive_mind_button2.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/hive_mind_button2.png rename to GUI_Unifyer/graphics/icons/hive_mind_button2.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/homeworld_redux_button.png b/GUI_Unifyer/graphics/icons/homeworld_redux_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/homeworld_redux_button.png rename to GUI_Unifyer/graphics/icons/homeworld_redux_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/howfardiditgo_button.png b/GUI_Unifyer/graphics/icons/howfardiditgo_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/howfardiditgo_button.png rename to GUI_Unifyer/graphics/icons/howfardiditgo_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/ingteb_button.png b/GUI_Unifyer/graphics/icons/ingteb_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/ingteb_button.png rename to GUI_Unifyer/graphics/icons/ingteb_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/inserterthroughput_off_button.png b/GUI_Unifyer/graphics/icons/inserterthroughput_off_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/inserterthroughput_off_button.png rename to GUI_Unifyer/graphics/icons/inserterthroughput_off_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/inserterthroughput_on_button.png b/GUI_Unifyer/graphics/icons/inserterthroughput_on_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/inserterthroughput_on_button.png rename to GUI_Unifyer/graphics/icons/inserterthroughput_on_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/killlostbots_button.png b/GUI_Unifyer/graphics/icons/killlostbots_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/killlostbots_button.png rename to GUI_Unifyer/graphics/icons/killlostbots_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/kttrrc_button.png b/GUI_Unifyer/graphics/icons/kttrrc_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/kttrrc_button.png rename to GUI_Unifyer/graphics/icons/kttrrc_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/kuxblueprinteditor_button.png b/GUI_Unifyer/graphics/icons/kuxblueprinteditor_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/kuxblueprinteditor_button.png rename to GUI_Unifyer/graphics/icons/kuxblueprinteditor_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/kuxcraftingtools_button.png b/GUI_Unifyer/graphics/icons/kuxcraftingtools_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/kuxcraftingtools_button.png rename to GUI_Unifyer/graphics/icons/kuxcraftingtools_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/kuxorbitalioncannon_button.png b/GUI_Unifyer/graphics/icons/kuxorbitalioncannon_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/kuxorbitalioncannon_button.png rename to GUI_Unifyer/graphics/icons/kuxorbitalioncannon_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/landfilleverythingu_button.png b/GUI_Unifyer/graphics/icons/landfilleverythingu_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/landfilleverythingu_button.png rename to GUI_Unifyer/graphics/icons/landfilleverythingu_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/leaderboard_button.png b/GUI_Unifyer/graphics/icons/leaderboard_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/leaderboard_button.png rename to GUI_Unifyer/graphics/icons/leaderboard_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/logisticmachines_button.png b/GUI_Unifyer/graphics/icons/logisticmachines_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/logisticmachines_button.png rename to GUI_Unifyer/graphics/icons/logisticmachines_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/logisticrequestmanager_button.png b/GUI_Unifyer/graphics/icons/logisticrequestmanager_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/logisticrequestmanager_button.png rename to GUI_Unifyer/graphics/icons/logisticrequestmanager_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/logisticssystemfork_button.png b/GUI_Unifyer/graphics/icons/logisticssystemfork_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/logisticssystemfork_button.png rename to GUI_Unifyer/graphics/icons/logisticssystemfork_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/markers_button.png b/GUI_Unifyer/graphics/icons/markers_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/markers_button.png rename to GUI_Unifyer/graphics/icons/markers_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/mlawfulevil_button.png b/GUI_Unifyer/graphics/icons/mlawfulevil_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/mlawfulevil_button.png rename to GUI_Unifyer/graphics/icons/mlawfulevil_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/moduleinserter_button.png b/GUI_Unifyer/graphics/icons/moduleinserter_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/moduleinserter_button.png rename to GUI_Unifyer/graphics/icons/moduleinserter_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/newgameplus_button.png b/GUI_Unifyer/graphics/icons/newgameplus_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/newgameplus_button.png rename to GUI_Unifyer/graphics/icons/newgameplus_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/newworlds_button.png b/GUI_Unifyer/graphics/icons/newworlds_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/newworlds_button.png rename to GUI_Unifyer/graphics/icons/newworlds_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/nonwavedefense2_button.png b/GUI_Unifyer/graphics/icons/nonwavedefense2_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/nonwavedefense2_button.png rename to GUI_Unifyer/graphics/icons/nonwavedefense2_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/notenoughtodo_button.png b/GUI_Unifyer/graphics/icons/notenoughtodo_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/notenoughtodo_button.png rename to GUI_Unifyer/graphics/icons/notenoughtodo_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/nullius_button.png b/GUI_Unifyer/graphics/icons/nullius_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/nullius_button.png rename to GUI_Unifyer/graphics/icons/nullius_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/oarcmod_button.png b/GUI_Unifyer/graphics/icons/oarcmod_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/oarcmod_button.png rename to GUI_Unifyer/graphics/icons/oarcmod_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/oshahotswap_button.png b/GUI_Unifyer/graphics/icons/oshahotswap_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/oshahotswap_button.png rename to GUI_Unifyer/graphics/icons/oshahotswap_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/outpostplanner_button.png b/GUI_Unifyer/graphics/icons/outpostplanner_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/outpostplanner_button.png rename to GUI_Unifyer/graphics/icons/outpostplanner_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/picksrocketstats_button.png b/GUI_Unifyer/graphics/icons/picksrocketstats_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/picksrocketstats_button.png rename to GUI_Unifyer/graphics/icons/picksrocketstats_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/placeables_button.png b/GUI_Unifyer/graphics/icons/placeables_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/placeables_button.png rename to GUI_Unifyer/graphics/icons/placeables_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/poweredentities_button.png b/GUI_Unifyer/graphics/icons/poweredentities_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/poweredentities_button.png rename to GUI_Unifyer/graphics/icons/poweredentities_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/productionmonitor_button.png b/GUI_Unifyer/graphics/icons/productionmonitor_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/productionmonitor_button.png rename to GUI_Unifyer/graphics/icons/productionmonitor_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/pycoalprocessing_button.png b/GUI_Unifyer/graphics/icons/pycoalprocessing_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/pycoalprocessing_button.png rename to GUI_Unifyer/graphics/icons/pycoalprocessing_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/quickbarexport_button.png b/GUI_Unifyer/graphics/icons/quickbarexport_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/quickbarexport_button.png rename to GUI_Unifyer/graphics/icons/quickbarexport_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/quickbarimport_button.png b/GUI_Unifyer/graphics/icons/quickbarimport_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/quickbarimport_button.png rename to GUI_Unifyer/graphics/icons/quickbarimport_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/quickbarimportexport_button.png b/GUI_Unifyer/graphics/icons/quickbarimportexport_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/quickbarimportexport_button.png rename to GUI_Unifyer/graphics/icons/quickbarimportexport_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/recexplo_button.png b/GUI_Unifyer/graphics/icons/recexplo_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/recexplo_button.png rename to GUI_Unifyer/graphics/icons/recexplo_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/regioncloner_button.png b/GUI_Unifyer/graphics/icons/regioncloner_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/regioncloner_button.png rename to GUI_Unifyer/graphics/icons/regioncloner_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/remoteswitch_button.png b/GUI_Unifyer/graphics/icons/remoteswitch_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/remoteswitch_button.png rename to GUI_Unifyer/graphics/icons/remoteswitch_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/researchcounter_button.png b/GUI_Unifyer/graphics/icons/researchcounter_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/researchcounter_button.png rename to GUI_Unifyer/graphics/icons/researchcounter_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/resetevolpol_button.png b/GUI_Unifyer/graphics/icons/resetevolpol_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/resetevolpol_button.png rename to GUI_Unifyer/graphics/icons/resetevolpol_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/richtexthelper_button.png b/GUI_Unifyer/graphics/icons/richtexthelper_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/richtexthelper_button.png rename to GUI_Unifyer/graphics/icons/richtexthelper_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/ritnteleportation_button.png b/GUI_Unifyer/graphics/icons/ritnteleportation_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/ritnteleportation_button.png rename to GUI_Unifyer/graphics/icons/ritnteleportation_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/rocketsilostats_button.png b/GUI_Unifyer/graphics/icons/rocketsilostats_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/rocketsilostats_button.png rename to GUI_Unifyer/graphics/icons/rocketsilostats_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/rpg_button.png b/GUI_Unifyer/graphics/icons/rpg_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/rpg_button.png rename to GUI_Unifyer/graphics/icons/rpg_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/schall_rc_button.png b/GUI_Unifyer/graphics/icons/schall_rc_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/schall_rc_button.png rename to GUI_Unifyer/graphics/icons/schall_rc_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/schall_sc_button.png b/GUI_Unifyer/graphics/icons/schall_sc_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/schall_sc_button.png rename to GUI_Unifyer/graphics/icons/schall_sc_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/schallendgameevolution_button.png b/GUI_Unifyer/graphics/icons/schallendgameevolution_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/schallendgameevolution_button.png rename to GUI_Unifyer/graphics/icons/schallendgameevolution_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/schalloreconversion_button.png b/GUI_Unifyer/graphics/icons/schalloreconversion_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/schalloreconversion_button.png rename to GUI_Unifyer/graphics/icons/schalloreconversion_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/shuttle_train_button.png b/GUI_Unifyer/graphics/icons/shuttle_train_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/shuttle_train_button.png rename to GUI_Unifyer/graphics/icons/shuttle_train_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/simple_circuit_trains_button.png b/GUI_Unifyer/graphics/icons/simple_circuit_trains_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/simple_circuit_trains_button.png rename to GUI_Unifyer/graphics/icons/simple_circuit_trains_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/smartchest_button.png b/GUI_Unifyer/graphics/icons/smartchest_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/smartchest_button.png rename to GUI_Unifyer/graphics/icons/smartchest_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/solarcalc_button.png b/GUI_Unifyer/graphics/icons/solarcalc_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/solarcalc_button.png rename to GUI_Unifyer/graphics/icons/solarcalc_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/somezoom_in_button.png b/GUI_Unifyer/graphics/icons/somezoom_in_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/somezoom_in_button.png rename to GUI_Unifyer/graphics/icons/somezoom_in_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/somezoom_out_button.png b/GUI_Unifyer/graphics/icons/somezoom_out_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/somezoom_out_button.png rename to GUI_Unifyer/graphics/icons/somezoom_out_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/spacemod_button.png b/GUI_Unifyer/graphics/icons/spacemod_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/spacemod_button.png rename to GUI_Unifyer/graphics/icons/spacemod_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/spawncontrol_button.png b/GUI_Unifyer/graphics/icons/spawncontrol_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/spawncontrol_button.png rename to GUI_Unifyer/graphics/icons/spawncontrol_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/spawncontrol_random_button.png b/GUI_Unifyer/graphics/icons/spawncontrol_random_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/spawncontrol_random_button.png rename to GUI_Unifyer/graphics/icons/spawncontrol_random_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/spidersentinel_button.png b/GUI_Unifyer/graphics/icons/spidersentinel_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/spidersentinel_button.png rename to GUI_Unifyer/graphics/icons/spidersentinel_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/teamcoop_button1.png b/GUI_Unifyer/graphics/icons/teamcoop_button1.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/teamcoop_button1.png rename to GUI_Unifyer/graphics/icons/teamcoop_button1.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/teamcoop_button2.png b/GUI_Unifyer/graphics/icons/teamcoop_button2.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/teamcoop_button2.png rename to GUI_Unifyer/graphics/icons/teamcoop_button2.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/teleportation_button.png b/GUI_Unifyer/graphics/icons/teleportation_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/teleportation_button.png rename to GUI_Unifyer/graphics/icons/teleportation_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/thefatcontroller_button.png b/GUI_Unifyer/graphics/icons/thefatcontroller_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/thefatcontroller_button.png rename to GUI_Unifyer/graphics/icons/thefatcontroller_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/todolist_button.png b/GUI_Unifyer/graphics/icons/todolist_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/todolist_button.png rename to GUI_Unifyer/graphics/icons/todolist_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/tpm_button_sprite_peace.png b/GUI_Unifyer/graphics/icons/tpm_button_sprite_peace.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/tpm_button_sprite_peace.png rename to GUI_Unifyer/graphics/icons/tpm_button_sprite_peace.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/tpm_button_sprite_war.png b/GUI_Unifyer/graphics/icons/tpm_button_sprite_war.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/tpm_button_sprite_war.png rename to GUI_Unifyer/graphics/icons/tpm_button_sprite_war.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/trainlog_button.png b/GUI_Unifyer/graphics/icons/trainlog_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/trainlog_button.png rename to GUI_Unifyer/graphics/icons/trainlog_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/trainpubsub_button.png b/GUI_Unifyer/graphics/icons/trainpubsub_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/trainpubsub_button.png rename to GUI_Unifyer/graphics/icons/trainpubsub_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/trashcan_button.png b/GUI_Unifyer/graphics/icons/trashcan_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/trashcan_button.png rename to GUI_Unifyer/graphics/icons/trashcan_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/tsmoutpostbuilder_button.png b/GUI_Unifyer/graphics/icons/tsmoutpostbuilder_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/tsmoutpostbuilder_button.png rename to GUI_Unifyer/graphics/icons/tsmoutpostbuilder_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/upgradeplannernext_button.png b/GUI_Unifyer/graphics/icons/upgradeplannernext_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/upgradeplannernext_button.png rename to GUI_Unifyer/graphics/icons/upgradeplannernext_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/usagedetector_button.png b/GUI_Unifyer/graphics/icons/usagedetector_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/usagedetector_button.png rename to GUI_Unifyer/graphics/icons/usagedetector_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/whatsmissing_button.png b/GUI_Unifyer/graphics/icons/whatsmissing_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/whatsmissing_button.png rename to GUI_Unifyer/graphics/icons/whatsmissing_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/wiiuf_button.png b/GUI_Unifyer/graphics/icons/wiiuf_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/wiiuf_button.png rename to GUI_Unifyer/graphics/icons/wiiuf_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/yarm_all_button.png b/GUI_Unifyer/graphics/icons/yarm_all_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/yarm_all_button.png rename to GUI_Unifyer/graphics/icons/yarm_all_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/yarm_none_button.png b/GUI_Unifyer/graphics/icons/yarm_none_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/yarm_none_button.png rename to GUI_Unifyer/graphics/icons/yarm_none_button.png diff --git a/GUI_Unifyer_1.12.0/graphics/icons/yarm_warnings_button.png b/GUI_Unifyer/graphics/icons/yarm_warnings_button.png similarity index 100% rename from GUI_Unifyer_1.12.0/graphics/icons/yarm_warnings_button.png rename to GUI_Unifyer/graphics/icons/yarm_warnings_button.png diff --git a/GUI_Unifyer_1.12.0/iconlist.lua b/GUI_Unifyer/iconlist.lua similarity index 100% rename from GUI_Unifyer_1.12.0/iconlist.lua rename to GUI_Unifyer/iconlist.lua diff --git a/GUI_Unifyer_1.12.0/info.json b/GUI_Unifyer/info.json similarity index 100% rename from GUI_Unifyer_1.12.0/info.json rename to GUI_Unifyer/info.json diff --git a/GUI_Unifyer_1.12.0/locale/en/buttons.cfg b/GUI_Unifyer/locale/en/buttons.cfg similarity index 100% rename from GUI_Unifyer_1.12.0/locale/en/buttons.cfg rename to GUI_Unifyer/locale/en/buttons.cfg diff --git a/GUI_Unifyer_1.12.0/locale/ru/buttons.cfg b/GUI_Unifyer/locale/ru/buttons.cfg similarity index 100% rename from GUI_Unifyer_1.12.0/locale/ru/buttons.cfg rename to GUI_Unifyer/locale/ru/buttons.cfg diff --git a/GUI_Unifyer_1.12.0/prototypes/button_style.lua b/GUI_Unifyer/prototypes/button_style.lua similarity index 100% rename from GUI_Unifyer_1.12.0/prototypes/button_style.lua rename to GUI_Unifyer/prototypes/button_style.lua diff --git a/GUI_Unifyer_1.12.0/prototypes/frame_style.lua b/GUI_Unifyer/prototypes/frame_style.lua similarity index 100% rename from GUI_Unifyer_1.12.0/prototypes/frame_style.lua rename to GUI_Unifyer/prototypes/frame_style.lua diff --git a/GUI_Unifyer_1.12.0/scripts/debug.lua b/GUI_Unifyer/scripts/debug.lua similarity index 100% rename from GUI_Unifyer_1.12.0/scripts/debug.lua rename to GUI_Unifyer/scripts/debug.lua diff --git a/GUI_Unifyer_1.12.0/settings.lua b/GUI_Unifyer/settings.lua similarity index 100% rename from GUI_Unifyer_1.12.0/settings.lua rename to GUI_Unifyer/settings.lua diff --git a/GUI_Unifyer_1.12.0/thumbnail.png b/GUI_Unifyer/thumbnail.png similarity index 100% rename from GUI_Unifyer_1.12.0/thumbnail.png rename to GUI_Unifyer/thumbnail.png diff --git a/HelicopterRevival/LICENSE b/HelicopterRevival/LICENSE new file mode 100644 index 00000000..1b3caf2c --- /dev/null +++ b/HelicopterRevival/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 kumpuu and Misfire + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/HelicopterRevival/README.md b/HelicopterRevival/README.md new file mode 100644 index 00000000..c56fff9f --- /dev/null +++ b/HelicopterRevival/README.md @@ -0,0 +1,7 @@ +# factorio-helicopters +"HelicopterRevival" mod for factorio. Actually interesting stuff is in logic/. + +Original (Helicopters) by [Kumpu](https://github.com/kumpuu/factorio-helicopters) + +[Mod Portal](https://mods.factorio.com/mods/twilightthepony/HelicopterRevival) + diff --git a/HelicopterRevival/changelog.txt b/HelicopterRevival/changelog.txt new file mode 100644 index 00000000..bd3fbe61 --- /dev/null +++ b/HelicopterRevival/changelog.txt @@ -0,0 +1,105 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 25.12.2022 + Fixes: + - Changelog date / credit fixes + - Don't enable anti-material-gun if the ammo for it is missing or disabled in config (K2) + - Don't crash if the tile under the helicopter was removed + - LEFD: Lower Volume of heli gun (K2) + - AirwaveRaptor: When loading HelicopterRevival with Bob's Vehicle Equipment mod and Vehicle Grid, the helicopter only accepts armor equipment, instead of taking vehicle equipment like it's probably supposed to. + Changes: + - Add support for SeaBlock's fuel arrangement + - Add support for vtk-armor-plating +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 21.04.2022 + Fixes: + - Fixed a potential crash when unloading GaugeGUI + - Restore shadow positioning when auto-landing +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: 13.04.2022 + Fixes: + - Fixed default up / down keys (thanks to Keysivi / Pi-C from Discussion thread) + - Updated K2 anti-material sounds thanks to RafaelFuchs + - Fixed crash when attempting to load with newer version of Krastorio + - Bump optional K2 requirements to 1.2.7 due to assets splitting into its own mod... + Changes: + - shelaf: Update japanese locale + - snouz: HR version of the helicopter entity. + - snouz: New (hd) icons (technologies, items, equipment). + - snouz: Shifting shadow to the right as helicopter rises (like other entities). + - snouz: Added custom map icon. + - snouz: New mod icon. + - snouz: Centered alert icon. + - snouz: Fixed Helipad shadow. + - snouz: Optimized PNG to gain space. +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: 27.10.2021 + Changes: + - More startup configuration options for flamethrower, gun, and rocket launcher + - More Japanese translations thanks to Shelaf + - Add an optional K2 anti-material gun + Fixes: + - Fixed potential crash when using Alien Biomes in conjunction of Asphalt Roads + - Fixed future date in the changelog + - Uniformed date format in changelog + Additional credits: + - Modified K2 icon for Anti-material gun as a temporary placeholder +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 06.04.2021 + Changes: + - Fixed continued fuel consumption even after the engine shut down +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 29.03.2021 + Changes: + - Dedicated equipment grid (K2-compatible) + - Don't land when following player setting from 1000101 (thanks!) +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 01.12.2020 + Changes: + - Fix crash caused by russian locale +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 30.11.2020 + Changes: + - Fix crash on helipad select +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 29.11.2020 + Changes: + - Changes for Factorio 1.1.x (technology changes and mod_gui isn't a global anymore) + - Schmarotzer: Russian translation update +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 23.06.2020 + Changes: + - dgw: Migration from old Helicopters (not active in this version, sorry) + - wchristian: load / save crash fix + - trilader: Updates for factorio 0.18.28+ +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 +Date: 07.04.2020 + Changes: + - Japanese locale from shelaf (thanks!) +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 +Date: 07.04.2020 + Fixes: + - Compatibility with Krastorio 2 +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 +Date: 12.03.2020 + Fixes: + - Fix some icons + Changes: + - Added flamethrower to the helicopter +--------------------------------------------------------------------------------------------------- +Version: 0.0.1 +Date: 14.02.2020 + Changes: + - Fork from Kumpu's Helicopters with fixes for Factorio 0.18.2+ diff --git a/HelicopterRevival/control.lua b/HelicopterRevival/control.lua new file mode 100644 index 00000000..f7bd8285 --- /dev/null +++ b/HelicopterRevival/control.lua @@ -0,0 +1,428 @@ +math3d = require("math3d") +require("logic.mtMgr") + +require("logic.util") +require("logic.timer") +require("logic.simpleNoise") + +require("logic.heliBase") +require("logic.heliAttack") + +require("logic.heliPad") +require("logic.heliController") +require("logic.gui.remoteGui") +require("logic.gui.gaugeGui") + +Entity = require("stdlib.entity.entity") + +mod_gui = require("mod-gui") + +function playerIsInHeli(p) + return p.driving and string.find(heliBaseEntityNames, p.vehicle.name .. ",", 1, true) +end + +function OnLoad(e) + if global.helis then + for _, heli in pairs(global.helis) do + if not heli.type or heli.type == "heliAttack" then + setmetatable(heli, {__index = heliAttack}) + end + end + end + setMetatablesInGlobal("remoteGuis", {__index = remoteGui}) + setMetatablesInGlobal("heliPads", {__index = heliPad}) + setMetatablesInGlobal("heliControllers", {__index = heliController}) + + --restore gui metatables + if global.remoteGuis then + for _,remotegui in pairs(global.remoteGuis) do + for _,gui in pairs(remotegui.guis) do + if gui.prefix then + local n = string.gsub(gui.prefix, "heli_(%a+)_.*", "%1") + if _G[n] then + setmetatable(gui, {__index = _G[n]}) + end + end + end + end + end + + callInGlobal("helis", "OnLoad") + + mtMgr.OnLoad() +end + +function OnConfigChanged(e) + if global.helis then + for k, curHeli in pairs(global.helis) do + if not curHeli.curState then + if curHeli.goUp then + curHeli:changeState(curHeli.engineStarting) + else + curHeli:changeState(curHeli.descend) + end + end + + if not curHeli.surface then + curHeli.surface = curHeli.baseEnt.surface + end + + if not curHeli.type then + curHeli.type = "heliAttack" + end + + if curHeli.hasLandedCollider and not curHeli.childs.collisionEnt.valid then + curHeli:setCollider("landed") + end + + if not curHeli.deactivatedInserters then + curHeli.deactivatedInserters = {} + end + + curHeli:reassignCurState() + end + end + + if global.heliPads then + for k, curPad in pairs(global.heliPads) do + if not curPad.surface then + curPad.surface = curPad.baseEnt.surface + end + end + end + + for k, p in pairs(game.players) do + local flow = mod_gui.get_button_flow(p) + + if flow.heli_remote_btn and flow.heli_remote_btn.valid then + flow.heli_remote_btn.destroy() + end + + OnArmorInventoryChanged({player_index = p.index}) + reSetGaugeGui(p) + end + + if global.heliControllers then + for k, curController in pairs(global.heliControllers) do + if not curController.heli.remoteController then + curController.heli.remoteController = curController + end + end + end + + --fixing left open guis when saved + if global.remoteGuis then + global.remoteGuis = {} + for _,p in pairs(game.players) do + local flow = mod_gui.get_frame_flow(p) + if flow["heli_heliSelectionGui_rootFrame"] then + flow["heli_heliSelectionGui_rootFrame"].destroy() + end + end + end +end + +function OnTick(e) + checkAndTickInGlobal("helis") + checkAndTickInGlobal("remoteGuis") + checkAndTickInGlobal("heliControllers") + + OnTimerTick() +end + +function OnBuilt(e) + local ent = e.created_entity + + if ent.name == "heli-placement-entity-_-" then + local newHeli = insertInGlobal("helis", heliAttack.new(ent)) + + if global.remoteGuis then + for _,rg in pairs(global.remoteGuis) do + rg:OnHeliBuilt(newHeli) + end + end + + elseif ent.name == "heli-pad-placement-entity" then + local newPad = insertInGlobal("heliPads", heliPad.new(ent)) + callInGlobal("remoteGuis", "OnHeliPadBuilt", newPad) + + elseif ent.type == "inserter" then + ent.active = true + end +end + +function OnRemoved(e) + local ent = e.entity + + if ent.valid then + local entName = ent.name + + if string.find(heliEntityNames, entName .. ",", 1, true) then + for i,val in ipairs(global.helis) do + if val:isBaseOrChild(ent) then + val:destroy() + table.remove(global.helis, i) + + if global.remoteGuis then + for _,rg in pairs(global.remoteGuis) do + rg:OnHeliRemoved(val) + end + end + end + end + end + + if entName == "heli-pad-entity" then + local i = getHeliPadIndexFromBaseEntity(ent) + if i then + global.heliPads[i]:destroy() + + callInGlobal("remoteGuis", "OnHeliPadRemoved", global.heliPads[i]) + table.remove(global.heliPads, i) + end + end + end +end + +function OnHeliUp(e) + local p = game.players[e.player_index] + if playerIsInHeli(p) then + getHeliFromBaseEntity(p.vehicle):OnUp() + end +end + +function OnHeliDown(e) + local p = game.players[e.player_index] + if playerIsInHeli(p) then + getHeliFromBaseEntity(p.vehicle):OnDown() + end +end + +function OnHeliIncreaseMaxHeight(e) + local p = game.players[e.player_index] + if playerIsInHeli(p) then + getHeliFromBaseEntity(p.vehicle):OnIncreaseMaxHeight() + end +end + +function OnHeliDecreaseMaxHeight(e) + local p = game.players[e.player_index] + if playerIsInHeli(p) then + getHeliFromBaseEntity(p.vehicle):OnDecreaseMaxHeight() + end +end + +function OnHeliToggleFloodlight(e) + local p = game.players[e.player_index] + if playerIsInHeli(p) then + getHeliFromBaseEntity(p.vehicle):OnToggleFloodlight() + end +end + +function OnHeliFollow(e) + local p = game.players[e.player_index] + + if playerHasEquipment(p, "heli-remote-equipment") then + local heli, dist = findNearestAvailableHeli(p.position, p.force, p) + + if heli then + assignHeliController(p, heli, p, true) + p.add_custom_alert(heli.baseEnt, {type = "item", name = "heli-item"}, {"heli-alert-follow", chopDecimal(dist)}, true) + end + end +end + +function OnRemoteOpen(e) + local p = game.players[e.player_index] + + if playerHasEquipment(p, "heli-remote-equipment") then + toggleRemoteGui(p) + end +end + +function OnPlacedEquipment(e) + if e.equipment.name == "heli-remote-equipment" then + local p = game.players[e.player_index] + + setRemoteBtn(p, true) + end +end + +function OnRemovedEquipment(e) + if e.equipment == "heli-remote-equipment" then + local p = game.players[e.player_index] + + if not equipmentGridHasItem(e.grid, "heli-remote-equipment") then + setRemoteBtn(p, false) + end + end +end + +function OnArmorInventoryChanged(e) + local p = game.players[e.player_index] + + if playerHasEquipment(p, "heli-remote-equipment") then + setRemoteBtn(p, true) + else + setRemoteBtn(p, false) + end +end + +function OnGuiClick(e) + local name = e.element.name + + if name:match("^heli_") then + local p = game.players[e.player_index] + + if name == "heli_remote_btn" then + toggleRemoteGui(p) + + elseif gaugeGui.hasMyPrefix(name) then + local i = searchIndexInTable(global.gaugeGuis, p, "player") + + if i then + global.gaugeGuis[i]:OnGuiClick(e) + end + + elseif remoteGui.hasMyPrefix(name) then + local i = searchIndexInTable(global.remoteGuis, p, "player") + + if i then + global.remoteGuis[i]:OnGuiClick(e) + end + end + end +end + +function OnGuiTextChanged(e) + local name = e.element.name + + if name:match("^heli_") then + local p = game.players[e.player_index] + local i = searchIndexInTable(global.remoteGuis, p, "player") + + if i then + global.remoteGuis[i]:OnGuiTextChanged(e) + end + end +end + +function OnPlayerChangedForce(e) + local p = game.players[e.player_index] + + callInGlobal("remoteGuis", "OnPlayerChangedForce", p) +end + +function OnPlayerDied(e) + local p = game.players[e.player_index] + + setRemoteBtn(p, false) + + callInGlobal("remoteGuis", "OnPlayerDied", p) +end + +function OnPlayerLeft(e) + local p = game.players[e.player_index] + local i = searchIndexInTable(global.remoteGuis, p, "player") + + if i then + global.remoteGuis[i]:destroy() + table.remove(global.remoteGuis, i) + end + + callInGlobal("remoteGuis", "OnPlayerLeft", p) +end + +function OnPlayerRespawned(e) + callInGlobal("remoteGuis", "OnPlayerRespawned", game.players[e.player_index]) +end + +function OnDrivingStateChanged(e) + local p = game.players[e.player_index] + local ent = e.entity + + if ent then + local entName = ent.name + + if string.find(heliEntityNames, entName .. ",", 1, true) then + local heli + for i, curHeli in ipairs(global.helis) do + if curHeli:isBaseOrChild(ent) then + heli = curHeli + break + end + end + + reSetGaugeGui(p) + + if not p.driving then + heli:OnPlayerEjected(p) + end + end + end +end + +function OnPlayerJoined(e) + OnArmorInventoryChanged(e) +end + +function OnPlayerCreated(e) + OnArmorInventoryChanged(e) +end + +function OnRuntimeSettingsChanged(e) + local name = e.setting + + if name:match("^heli-") then + local p = game.players[e.player_index] + + if e.setting_type == "runtime-per-user" then + local val = p.mod_settings[name].value + + if name == "heli-gaugeGui-show" then + reSetGaugeGui(p) + end + + --elseif e.setting_type == "runtime-global" then + -- local val = settings.global[name] + + end + end +end + +script.on_event(defines.events.on_built_entity, OnBuilt) +script.on_event(defines.events.on_robot_built_entity, OnBuilt) + +script.on_load(OnLoad) +script.on_configuration_changed(OnConfigChanged) +script.on_event(defines.events.on_tick, OnTick) + +script.on_event(defines.events.on_player_mined_entity, OnRemoved) +script.on_event(defines.events.on_robot_mined_entity, OnRemoved) +script.on_event(defines.events.on_entity_died, OnRemoved) + +script.on_event("heli-up", OnHeliUp) +script.on_event("heli-down", OnHeliDown) +script.on_event("heli-zaa-height-increase", OnHeliIncreaseMaxHeight) +script.on_event("heli-zab-height-decrease", OnHeliDecreaseMaxHeight) +script.on_event("heli-zba-toogle-floodlight", OnHeliToggleFloodlight) +script.on_event("heli-zca-remote-heli-follow", OnHeliFollow) +script.on_event("heli-zcb-remote-open", OnRemoteOpen) + + +script.on_event(defines.events.on_player_placed_equipment, OnPlacedEquipment) +script.on_event(defines.events.on_player_removed_equipment, OnRemovedEquipment) +script.on_event(defines.events.on_gui_click, OnGuiClick) +script.on_event(defines.events.on_gui_text_changed, OnGuiTextChanged) + +script.on_event(defines.events.on_player_changed_force, OnPlayerChangedForce) +script.on_event(defines.events.on_player_died, OnPlayerDied) +script.on_event(defines.events.on_player_left_game, OnPlayerLeft) +script.on_event(defines.events.on_player_respawned, OnPlayerRespawned) +script.on_event(defines.events.on_player_joined_game, OnPlayerJoined) +script.on_event(defines.events.on_player_created, OnPlayerCreated) + +script.on_event(defines.events.on_player_armor_inventory_changed, OnArmorInventoryChanged) +script.on_event(defines.events.on_player_driving_changed_state, OnDrivingStateChanged) + +script.on_event(defines.events.on_runtime_mod_setting_changed, OnRuntimeSettingsChanged) \ No newline at end of file diff --git a/HelicopterRevival/data-final-fixes.lua b/HelicopterRevival/data-final-fixes.lua new file mode 100644 index 00000000..d3aef435 --- /dev/null +++ b/HelicopterRevival/data-final-fixes.lua @@ -0,0 +1,17 @@ +require("prototypes.tiles.heli-pad-concrete") + +if mods["Krastorio2"] then + -- copy K2 eqipment categories into heli-equipment-grid + data.raw["equipment-grid"]["heli-equipment-grid"].equipment_categories = data.raw["equipment-grid"]["kr-car-grid"].equipment_categories +end + +if mods["VehicleGrid"] then + if mods["bobvehicleequipment"] then + -- copy Bob's equipment categories into heli-equipment-grid + data.raw["equipment-grid"]["heli-equipment-grid"].equipment_categories = data.raw["equipment-grid"]["bob-car"].equipment_categories + end +end + +if mods["vtk-armor-plating"] then + table.insert(data.raw["equipment-grid"]["heli-equipment-grid"].equipment_categories, "vtk-armor-plating") + end diff --git a/HelicopterRevival/data.lua b/HelicopterRevival/data.lua new file mode 100644 index 00000000..f2aa7d4a --- /dev/null +++ b/HelicopterRevival/data.lua @@ -0,0 +1,30 @@ +require("prototypes.entities.heli_entity") +require("prototypes.entities.rotor_entity") +require("prototypes.entities.smoke") +require("prototypes.entities.heli_pad") + +require("prototypes.items.heli_item") +require("prototypes.items.heli_rocket_launcher_item") +require("prototypes.items.remote_items") +require("prototypes.items.heli_gun") +require("prototypes.items.heli_flamethrower") +require("prototypes.items.heli_k2_anti_material_gun") + +require("prototypes.recipes.heli_recipe") +require("prototypes.recipes.remote_recipes") + +require("prototypes.technologies.heli_technology") +require("prototypes.technologies.remote_technology") +require("prototypes.equipment.equipment") + +require("prototypes.sounds.sounds") +require("prototypes.sprites.sprites") +require("prototypes.font.font") +require("prototypes.style.style") +require("prototypes.signals.signals") + +require("input.input") + +if alien_biomes_priority_tiles then + table.insert(alien_biomes_priority_tiles, "heli-pad-entity") +end diff --git a/HelicopterRevival/graphics/entities/heli/body-0.png b/HelicopterRevival/graphics/entities/heli/body-0.png new file mode 100644 index 00000000..bff29bd4 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body-1.png b/HelicopterRevival/graphics/entities/heli/body-1.png new file mode 100644 index 00000000..8b26b3de Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body-2.png b/HelicopterRevival/graphics/entities/heli/body-2.png new file mode 100644 index 00000000..7b967f00 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body-3.png b/HelicopterRevival/graphics/entities/heli/body-3.png new file mode 100644 index 00000000..967cd5e0 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body_shadow-0.png b/HelicopterRevival/graphics/entities/heli/body_shadow-0.png new file mode 100644 index 00000000..00aba5e3 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body_shadow-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body_shadow-1.png b/HelicopterRevival/graphics/entities/heli/body_shadow-1.png new file mode 100644 index 00000000..c273bc8d Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body_shadow-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body_shadow-2.png b/HelicopterRevival/graphics/entities/heli/body_shadow-2.png new file mode 100644 index 00000000..c0b5de85 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body_shadow-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/body_shadow-3.png b/HelicopterRevival/graphics/entities/heli/body_shadow-3.png new file mode 100644 index 00000000..fdf19e18 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/body_shadow-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body-0.png b/HelicopterRevival/graphics/entities/heli/hr-body-0.png new file mode 100644 index 00000000..c7d5c4c4 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body-1.png b/HelicopterRevival/graphics/entities/heli/hr-body-1.png new file mode 100644 index 00000000..f05eaf67 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body-2.png b/HelicopterRevival/graphics/entities/heli/hr-body-2.png new file mode 100644 index 00000000..50dc8259 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body-3.png b/HelicopterRevival/graphics/entities/heli/hr-body-3.png new file mode 100644 index 00000000..972a3308 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body_shadow-0.png b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-0.png new file mode 100644 index 00000000..347fbca0 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body_shadow-1.png b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-1.png new file mode 100644 index 00000000..012d5d60 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body_shadow-2.png b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-2.png new file mode 100644 index 00000000..57f98a89 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-body_shadow-3.png b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-3.png new file mode 100644 index 00000000..d42f9d08 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-body_shadow-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor-0.png b/HelicopterRevival/graphics/entities/heli/hr-rotor-0.png new file mode 100644 index 00000000..6f0b0963 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor-1.png b/HelicopterRevival/graphics/entities/heli/hr-rotor-1.png new file mode 100644 index 00000000..be486bb5 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor-2.png b/HelicopterRevival/graphics/entities/heli/hr-rotor-2.png new file mode 100644 index 00000000..add88919 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor-3.png b/HelicopterRevival/graphics/entities/heli/hr-rotor-3.png new file mode 100644 index 00000000..2912a051 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-0.png b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-0.png new file mode 100644 index 00000000..4c575632 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-1.png b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-1.png new file mode 100644 index 00000000..6ecd58a6 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-2.png b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-2.png new file mode 100644 index 00000000..c8251da3 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-3.png b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-3.png new file mode 100644 index 00000000..827c1ae1 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/hr-rotor_shadow-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor-0.png b/HelicopterRevival/graphics/entities/heli/rotor-0.png new file mode 100644 index 00000000..ccf40fe4 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor-1.png b/HelicopterRevival/graphics/entities/heli/rotor-1.png new file mode 100644 index 00000000..d1ed85ba Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor-2.png b/HelicopterRevival/graphics/entities/heli/rotor-2.png new file mode 100644 index 00000000..bbeb4358 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor-3.png b/HelicopterRevival/graphics/entities/heli/rotor-3.png new file mode 100644 index 00000000..0d7123b3 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor_shadow-0.png b/HelicopterRevival/graphics/entities/heli/rotor_shadow-0.png new file mode 100644 index 00000000..1066f125 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor_shadow-0.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor_shadow-1.png b/HelicopterRevival/graphics/entities/heli/rotor_shadow-1.png new file mode 100644 index 00000000..04ba2372 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor_shadow-1.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor_shadow-2.png b/HelicopterRevival/graphics/entities/heli/rotor_shadow-2.png new file mode 100644 index 00000000..b38a8125 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor_shadow-2.png differ diff --git a/HelicopterRevival/graphics/entities/heli/rotor_shadow-3.png b/HelicopterRevival/graphics/entities/heli/rotor_shadow-3.png new file mode 100644 index 00000000..d1c8085a Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli/rotor_shadow-3.png differ diff --git a/HelicopterRevival/graphics/entities/heli_pad.png b/HelicopterRevival/graphics/entities/heli_pad.png new file mode 100644 index 00000000..517b7065 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli_pad.png differ diff --git a/HelicopterRevival/graphics/entities/heli_pad_hr.png b/HelicopterRevival/graphics/entities/heli_pad_hr.png new file mode 100644 index 00000000..ff2d618d Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli_pad_hr.png differ diff --git a/HelicopterRevival/graphics/entities/heli_pad_inner.png b/HelicopterRevival/graphics/entities/heli_pad_inner.png new file mode 100644 index 00000000..9dad31d5 Binary files /dev/null and b/HelicopterRevival/graphics/entities/heli_pad_inner.png differ diff --git a/HelicopterRevival/graphics/equipment/heli-remote-equipment.png b/HelicopterRevival/graphics/equipment/heli-remote-equipment.png new file mode 100644 index 00000000..42bfd6c7 Binary files /dev/null and b/HelicopterRevival/graphics/equipment/heli-remote-equipment.png differ diff --git a/HelicopterRevival/graphics/gui/black.png b/HelicopterRevival/graphics/gui/black.png new file mode 100644 index 00000000..bb89de1b Binary files /dev/null and b/HelicopterRevival/graphics/gui/black.png differ diff --git a/HelicopterRevival/graphics/gui/clear-text.png b/HelicopterRevival/graphics/gui/clear-text.png new file mode 100644 index 00000000..c51268fe Binary files /dev/null and b/HelicopterRevival/graphics/gui/clear-text.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/gauge_fs.png b/HelicopterRevival/graphics/gui/gauges/gauge_fs.png new file mode 100644 index 00000000..02a03ea5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/gauge_fs.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/gauge_fs_led_fuel.png b/HelicopterRevival/graphics/gui/gauges/gauge_fs_led_fuel.png new file mode 100644 index 00000000..bb9a7384 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/gauge_fs_led_fuel.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/gauge_hr.png b/HelicopterRevival/graphics/gui/gauges/gauge_hr.png new file mode 100644 index 00000000..5507879f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/gauge_hr.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/patch.bat b/HelicopterRevival/graphics/gui/gauges/patch.bat new file mode 100644 index 00000000..d852e683 --- /dev/null +++ b/HelicopterRevival/graphics/gui/gauges/patch.bat @@ -0,0 +1,6 @@ +mogrify -fill rgba(0,0,0,0.01) -draw "point 0,0" *.png +mogrify -fill rgba(0,0,0,0.01) -draw "point 0,127" *.png +mogrify -fill rgba(0,0,0,0.01) -draw "point 127,0" *.png +mogrify -fill rgba(0,0,0,0.01) -draw "point 127,127" *.png + +pause \ No newline at end of file diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-0.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-0.png new file mode 100644 index 00000000..79a55263 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-0.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-1.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-1.png new file mode 100644 index 00000000..bd1f87d9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-1.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-10.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-10.png new file mode 100644 index 00000000..56e3483c Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-10.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-100.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-100.png new file mode 100644 index 00000000..991ef22b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-100.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-101.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-101.png new file mode 100644 index 00000000..904cd576 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-101.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-102.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-102.png new file mode 100644 index 00000000..e1ba38fb Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-102.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-103.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-103.png new file mode 100644 index 00000000..1384f5e8 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-103.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-104.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-104.png new file mode 100644 index 00000000..d967a9fc Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-104.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-105.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-105.png new file mode 100644 index 00000000..fa20818b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-105.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-106.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-106.png new file mode 100644 index 00000000..52f31396 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-106.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-107.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-107.png new file mode 100644 index 00000000..aea0637c Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-107.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-108.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-108.png new file mode 100644 index 00000000..3b3a300b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-108.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-109.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-109.png new file mode 100644 index 00000000..2508ac11 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-109.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-11.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-11.png new file mode 100644 index 00000000..cd0369f8 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-11.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-110.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-110.png new file mode 100644 index 00000000..d09bd920 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-110.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-111.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-111.png new file mode 100644 index 00000000..cc25c8d8 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-111.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-112.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-112.png new file mode 100644 index 00000000..65894a7a Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-112.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-113.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-113.png new file mode 100644 index 00000000..a9a68ba3 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-113.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-114.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-114.png new file mode 100644 index 00000000..cbae42f9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-114.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-115.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-115.png new file mode 100644 index 00000000..d39cfd1f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-115.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-116.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-116.png new file mode 100644 index 00000000..2264c0ad Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-116.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-117.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-117.png new file mode 100644 index 00000000..cb75d36d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-117.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-118.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-118.png new file mode 100644 index 00000000..ca92c4c6 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-118.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-119.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-119.png new file mode 100644 index 00000000..9e1f5977 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-119.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-12.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-12.png new file mode 100644 index 00000000..ba9fa3d7 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-12.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-120.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-120.png new file mode 100644 index 00000000..ae4b9555 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-120.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-121.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-121.png new file mode 100644 index 00000000..8430c0e5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-121.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-122.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-122.png new file mode 100644 index 00000000..fcaedf2d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-122.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-123.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-123.png new file mode 100644 index 00000000..4f726878 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-123.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-124.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-124.png new file mode 100644 index 00000000..d07b1016 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-124.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-125.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-125.png new file mode 100644 index 00000000..b6fa0481 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-125.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-126.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-126.png new file mode 100644 index 00000000..3997c405 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-126.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-127.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-127.png new file mode 100644 index 00000000..096c3bb6 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-127.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-13.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-13.png new file mode 100644 index 00000000..525f6e38 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-13.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-14.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-14.png new file mode 100644 index 00000000..5ea4b670 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-14.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-15.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-15.png new file mode 100644 index 00000000..74795bc0 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-15.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-16.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-16.png new file mode 100644 index 00000000..6d28a06f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-16.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-17.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-17.png new file mode 100644 index 00000000..2ed55d6b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-17.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-18.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-18.png new file mode 100644 index 00000000..304e8505 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-18.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-19.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-19.png new file mode 100644 index 00000000..fb715d44 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-19.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-2.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-2.png new file mode 100644 index 00000000..8dd8fca9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-2.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-20.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-20.png new file mode 100644 index 00000000..ce4a65dc Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-20.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-21.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-21.png new file mode 100644 index 00000000..71928372 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-21.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-22.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-22.png new file mode 100644 index 00000000..78d3e0ef Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-22.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-23.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-23.png new file mode 100644 index 00000000..e0d35b8c Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-23.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-24.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-24.png new file mode 100644 index 00000000..25b587d9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-24.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-25.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-25.png new file mode 100644 index 00000000..094b9e27 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-25.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-26.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-26.png new file mode 100644 index 00000000..9d746296 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-26.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-27.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-27.png new file mode 100644 index 00000000..1ba84b66 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-27.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-28.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-28.png new file mode 100644 index 00000000..bc297ff9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-28.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-29.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-29.png new file mode 100644 index 00000000..82e4491d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-29.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-3.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-3.png new file mode 100644 index 00000000..21de9a2a Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-3.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-30.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-30.png new file mode 100644 index 00000000..56b38444 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-30.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-31.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-31.png new file mode 100644 index 00000000..44dc1a08 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-31.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-32.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-32.png new file mode 100644 index 00000000..007c982b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-32.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-33.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-33.png new file mode 100644 index 00000000..ceb4168f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-33.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-34.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-34.png new file mode 100644 index 00000000..81d8906f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-34.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-35.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-35.png new file mode 100644 index 00000000..9196e8e4 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-35.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-36.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-36.png new file mode 100644 index 00000000..85356a99 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-36.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-37.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-37.png new file mode 100644 index 00000000..67048936 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-37.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-38.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-38.png new file mode 100644 index 00000000..95b17d3d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-38.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-39.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-39.png new file mode 100644 index 00000000..eb7c1b6b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-39.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-4.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-4.png new file mode 100644 index 00000000..9059b5fd Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-4.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-40.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-40.png new file mode 100644 index 00000000..a8fbd769 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-40.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-41.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-41.png new file mode 100644 index 00000000..f2225126 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-41.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-42.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-42.png new file mode 100644 index 00000000..b85ec098 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-42.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-43.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-43.png new file mode 100644 index 00000000..89713500 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-43.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-44.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-44.png new file mode 100644 index 00000000..b3e3ea33 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-44.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-45.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-45.png new file mode 100644 index 00000000..3e47f24f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-45.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-46.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-46.png new file mode 100644 index 00000000..84a595a8 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-46.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-47.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-47.png new file mode 100644 index 00000000..da94f43e Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-47.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-48.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-48.png new file mode 100644 index 00000000..1d519dea Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-48.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-49.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-49.png new file mode 100644 index 00000000..8d62d075 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-49.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-5.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-5.png new file mode 100644 index 00000000..f7d9208b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-5.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-50.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-50.png new file mode 100644 index 00000000..fe565c1d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-50.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-51.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-51.png new file mode 100644 index 00000000..d97ca3d9 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-51.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-52.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-52.png new file mode 100644 index 00000000..040a741e Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-52.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-53.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-53.png new file mode 100644 index 00000000..3894113c Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-53.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-54.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-54.png new file mode 100644 index 00000000..f3928b97 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-54.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-55.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-55.png new file mode 100644 index 00000000..0bd54d6a Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-55.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-56.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-56.png new file mode 100644 index 00000000..18080616 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-56.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-57.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-57.png new file mode 100644 index 00000000..5e5b5eb5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-57.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-58.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-58.png new file mode 100644 index 00000000..89018ccb Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-58.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-59.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-59.png new file mode 100644 index 00000000..4bbc3c1f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-59.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-6.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-6.png new file mode 100644 index 00000000..b3d8aca5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-6.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-60.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-60.png new file mode 100644 index 00000000..bd92ec9d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-60.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-61.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-61.png new file mode 100644 index 00000000..af46224b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-61.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-62.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-62.png new file mode 100644 index 00000000..9b1ebe01 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-62.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-63.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-63.png new file mode 100644 index 00000000..58bbd10b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-63.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-64.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-64.png new file mode 100644 index 00000000..2ee01e96 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-64.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-65.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-65.png new file mode 100644 index 00000000..600b1b11 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-65.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-66.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-66.png new file mode 100644 index 00000000..244132d1 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-66.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-67.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-67.png new file mode 100644 index 00000000..b65dc52a Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-67.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-68.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-68.png new file mode 100644 index 00000000..d8fb654f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-68.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-69.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-69.png new file mode 100644 index 00000000..bf7e1d2e Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-69.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-7.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-7.png new file mode 100644 index 00000000..27652887 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-7.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-70.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-70.png new file mode 100644 index 00000000..69836324 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-70.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-71.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-71.png new file mode 100644 index 00000000..862dcb14 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-71.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-72.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-72.png new file mode 100644 index 00000000..efd609d3 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-72.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-73.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-73.png new file mode 100644 index 00000000..65878bbc Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-73.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-74.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-74.png new file mode 100644 index 00000000..f43738fe Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-74.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-75.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-75.png new file mode 100644 index 00000000..db1973af Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-75.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-76.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-76.png new file mode 100644 index 00000000..825fd439 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-76.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-77.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-77.png new file mode 100644 index 00000000..a0c78dd2 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-77.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-78.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-78.png new file mode 100644 index 00000000..a7d9c860 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-78.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-79.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-79.png new file mode 100644 index 00000000..7fdb541b Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-79.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-8.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-8.png new file mode 100644 index 00000000..c3c8cd2c Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-8.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-80.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-80.png new file mode 100644 index 00000000..719d75bf Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-80.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-81.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-81.png new file mode 100644 index 00000000..58d3bbee Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-81.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-82.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-82.png new file mode 100644 index 00000000..6787582d Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-82.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-83.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-83.png new file mode 100644 index 00000000..a90456fe Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-83.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-84.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-84.png new file mode 100644 index 00000000..c6372b29 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-84.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-85.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-85.png new file mode 100644 index 00000000..a3e85520 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-85.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-86.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-86.png new file mode 100644 index 00000000..324b5dae Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-86.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-87.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-87.png new file mode 100644 index 00000000..e0cf8df6 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-87.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-88.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-88.png new file mode 100644 index 00000000..1bc7a2f5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-88.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-89.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-89.png new file mode 100644 index 00000000..ef4da3cf Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-89.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-9.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-9.png new file mode 100644 index 00000000..a239b5a4 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-9.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-90.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-90.png new file mode 100644 index 00000000..1ea617d6 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-90.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-91.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-91.png new file mode 100644 index 00000000..07571822 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-91.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-92.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-92.png new file mode 100644 index 00000000..cb6fb2f4 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-92.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-93.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-93.png new file mode 100644 index 00000000..d950f2b5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-93.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-94.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-94.png new file mode 100644 index 00000000..5d934176 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-94.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-95.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-95.png new file mode 100644 index 00000000..eb4e6221 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-95.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-96.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-96.png new file mode 100644 index 00000000..245439d5 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-96.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-97.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-97.png new file mode 100644 index 00000000..7c91e85a Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-97.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-98.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-98.png new file mode 100644 index 00000000..d654ecd7 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-98.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/pointers/pointer-99.png b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-99.png new file mode 100644 index 00000000..d0cb8a9f Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/pointers/pointer-99.png differ diff --git a/HelicopterRevival/graphics/gui/gauges/void_128.png b/HelicopterRevival/graphics/gui/gauges/void_128.png new file mode 100644 index 00000000..0421e8c1 Binary files /dev/null and b/HelicopterRevival/graphics/gui/gauges/void_128.png differ diff --git a/HelicopterRevival/graphics/gui/grey.png b/HelicopterRevival/graphics/gui/grey.png new file mode 100644 index 00000000..20cfb996 Binary files /dev/null and b/HelicopterRevival/graphics/gui/grey.png differ diff --git a/HelicopterRevival/graphics/gui/orange.png b/HelicopterRevival/graphics/gui/orange.png new file mode 100644 index 00000000..eb0be56f Binary files /dev/null and b/HelicopterRevival/graphics/gui/orange.png differ diff --git a/HelicopterRevival/graphics/gui/search-icon.png b/HelicopterRevival/graphics/gui/search-icon.png new file mode 100644 index 00000000..633f6bda Binary files /dev/null and b/HelicopterRevival/graphics/gui/search-icon.png differ diff --git a/HelicopterRevival/graphics/gui/selected.png b/HelicopterRevival/graphics/gui/selected.png new file mode 100644 index 00000000..fd36cc38 Binary files /dev/null and b/HelicopterRevival/graphics/gui/selected.png differ diff --git a/HelicopterRevival/graphics/gui/speaker_off.png b/HelicopterRevival/graphics/gui/speaker_off.png new file mode 100644 index 00000000..68b766e2 Binary files /dev/null and b/HelicopterRevival/graphics/gui/speaker_off.png differ diff --git a/HelicopterRevival/graphics/gui/speaker_on.png b/HelicopterRevival/graphics/gui/speaker_on.png new file mode 100644 index 00000000..6ad3f4d6 Binary files /dev/null and b/HelicopterRevival/graphics/gui/speaker_on.png differ diff --git a/HelicopterRevival/graphics/icons/anti-material-rifle.png b/HelicopterRevival/graphics/icons/anti-material-rifle.png new file mode 100644 index 00000000..c89db1cd Binary files /dev/null and b/HelicopterRevival/graphics/icons/anti-material-rifle.png differ diff --git a/HelicopterRevival/graphics/icons/fuel_warning.png b/HelicopterRevival/graphics/icons/fuel_warning.png new file mode 100644 index 00000000..b923676c Binary files /dev/null and b/HelicopterRevival/graphics/icons/fuel_warning.png differ diff --git a/HelicopterRevival/graphics/icons/heli-minimap-representation-selected.png b/HelicopterRevival/graphics/icons/heli-minimap-representation-selected.png new file mode 100644 index 00000000..bd8c1d96 Binary files /dev/null and b/HelicopterRevival/graphics/icons/heli-minimap-representation-selected.png differ diff --git a/HelicopterRevival/graphics/icons/heli-minimap-representation.png b/HelicopterRevival/graphics/icons/heli-minimap-representation.png new file mode 100644 index 00000000..da91ed76 Binary files /dev/null and b/HelicopterRevival/graphics/icons/heli-minimap-representation.png differ diff --git a/HelicopterRevival/graphics/icons/heli-remote-icon.png b/HelicopterRevival/graphics/icons/heli-remote-icon.png new file mode 100644 index 00000000..ebf2a110 Binary files /dev/null and b/HelicopterRevival/graphics/icons/heli-remote-icon.png differ diff --git a/HelicopterRevival/graphics/icons/heli.png b/HelicopterRevival/graphics/icons/heli.png new file mode 100644 index 00000000..bc2a11de Binary files /dev/null and b/HelicopterRevival/graphics/icons/heli.png differ diff --git a/HelicopterRevival/graphics/icons/heli_pad.png b/HelicopterRevival/graphics/icons/heli_pad.png new file mode 100644 index 00000000..1b3c60ab Binary files /dev/null and b/HelicopterRevival/graphics/icons/heli_pad.png differ diff --git a/HelicopterRevival/graphics/icons/map.png b/HelicopterRevival/graphics/icons/map.png new file mode 100644 index 00000000..f965622e Binary files /dev/null and b/HelicopterRevival/graphics/icons/map.png differ diff --git a/HelicopterRevival/graphics/icons/rocket_pod.png b/HelicopterRevival/graphics/icons/rocket_pod.png new file mode 100644 index 00000000..89acbc2f Binary files /dev/null and b/HelicopterRevival/graphics/icons/rocket_pod.png differ diff --git a/HelicopterRevival/graphics/icons/stop.png b/HelicopterRevival/graphics/icons/stop.png new file mode 100644 index 00000000..978a4e76 Binary files /dev/null and b/HelicopterRevival/graphics/icons/stop.png differ diff --git a/HelicopterRevival/graphics/icons/to_pad.png b/HelicopterRevival/graphics/icons/to_pad.png new file mode 100644 index 00000000..53688c97 Binary files /dev/null and b/HelicopterRevival/graphics/icons/to_pad.png differ diff --git a/HelicopterRevival/graphics/icons/to_player.png b/HelicopterRevival/graphics/icons/to_player.png new file mode 100644 index 00000000..9bf80653 Binary files /dev/null and b/HelicopterRevival/graphics/icons/to_player.png differ diff --git a/HelicopterRevival/graphics/technology/heli-remote-technology.png b/HelicopterRevival/graphics/technology/heli-remote-technology.png new file mode 100644 index 00000000..58985651 Binary files /dev/null and b/HelicopterRevival/graphics/technology/heli-remote-technology.png differ diff --git a/HelicopterRevival/graphics/technology/heli-technology.png b/HelicopterRevival/graphics/technology/heli-technology.png new file mode 100644 index 00000000..803ad283 Binary files /dev/null and b/HelicopterRevival/graphics/technology/heli-technology.png differ diff --git a/HelicopterRevival/graphics/void.png b/HelicopterRevival/graphics/void.png new file mode 100644 index 00000000..4db672ba Binary files /dev/null and b/HelicopterRevival/graphics/void.png differ diff --git a/HelicopterRevival/info.json b/HelicopterRevival/info.json new file mode 100644 index 00000000..a9829898 --- /dev/null +++ b/HelicopterRevival/info.json @@ -0,0 +1,12 @@ + { + "name": "HelicopterRevival", + "version": "0.2.2", + "title": "HelicopterRevival", + "author": "twilightthepony", + "factorio_version": "1.1", + "dependencies": [ + "base >= 1.1", + "(?) Krastorio2 >= 1.2.7" + ], + "description": "Adds a fully animated attack helicopter to the game. Ideal for getting from A to B quickly, exploring the map, building islands and nuking biters from the sky. Now 84% less buggier! Forked from Kumpu with updates beyond Factorio 0.17." + } \ No newline at end of file diff --git a/HelicopterRevival/input/input.lua b/HelicopterRevival/input/input.lua new file mode 100644 index 00000000..863a1369 --- /dev/null +++ b/HelicopterRevival/input/input.lua @@ -0,0 +1,63 @@ +data:extend({ + { + type = "custom-input", + name = "heli-up", + key_sequence = "SHIFT + E", + consuming = "none" + + -- 'consuming' + -- available options: + -- none: default if not defined + -- all: if this is the first input to get this key sequence then no other inputs listening for this sequence are fired + -- script-only: if this is the first *custom* input to get this key sequence then no other *custom* inputs listening for this sequence are fired. Normal game inputs will still be fired even if they match this sequence. + -- game-only: The opposite of script-only: blocks game inputs using the same key sequence but lets other custom inputs using the same key sequence fire. + }, + { + type = "custom-input", + name = "heli-down", + key_sequence = "SHIFT + Q", + consuming = "none" + }, + + ------------------ + + { + type = "custom-input", + name = "heli-zaa-height-increase", + key_sequence = "UP", + consuming = "none" + }, + + { + type = "custom-input", + name = "heli-zab-height-decrease", + key_sequence = "DOWN", + consuming = "none" + }, + + ------------------ + + { + type = "custom-input", + name = "heli-zba-toogle-floodlight", + key_sequence = "SHIFT + L", + consuming = "none" + }, + + + ------------------ + + { + type = "custom-input", + name = "heli-zca-remote-heli-follow", + key_sequence = "SHIFT + F", + consuming = "none" + }, + + { + type = "custom-input", + name = "heli-zcb-remote-open", + key_sequence = "SHIFT + G", + consuming = "none" + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/locale/de/locale.cfg b/HelicopterRevival/locale/de/locale.cfg new file mode 100644 index 00000000..91600046 --- /dev/null +++ b/HelicopterRevival/locale/de/locale.cfg @@ -0,0 +1,84 @@ +heli-gui-remote-btn-tt=Γ–ffne Helikopter Fernsteuerung +heli-gui-frame-tt=Rechtsklicken zum Schließen +heli-gui-cam-tt=Rechtsklicken zum Rauszoomen\nShift-Rechtsklick zum Reinzoomen + + +heli-gui-heliSelection-frame-caption=Helikopter Fernsteuerung +heli-gui-heliSelection-controlled= KONTROLLIERT +heli-gui-heliSelection-noHelisAvailable=KEINE HELIKOPTER VERFÜGBAR +heli-gui-heliSelection-to-player-btn-tt=Linksklicken zum Folgen\nShift-Linksklick zum Landen an der aktuellen Position\nRechtsklicken zum AuswΓ€hlen eines anderen Spielers + +heli-gui-padSelection-frame-caption=Helipad auswΓ€hlen +heli-gui-padSelection-noPadsAvailable=KEINE HELIPADS VERFÜGBAR + +heli-gui-markerSelection-frame-caption=Kartenmarkierung auswΓ€hlen + +heli-gui-playerSelection-frame-caption=Spieler auswΓ€hlen +heli-gui-playerSelection-listbox-btn-tt=Linksklicken zum Folgen\nShift-Linksklick zum Landen an der aktuellen Position des Spielers + +heli-gui-gauges-tt=Anpassbar in den Einstellungen. + +heli-alert-follow=Schicke Heli __1__ Meter von deiner Position. +heli-alert-fuel-warning=Wenig Treibstoff. +heli-alert-fuel-warning-critical=Kritischer Treibstoff. + + +[item-name] +heli-item=Helikopter +heli-rocket-launcher-item=Helikopter Raketenwerfer +heli-remote-equipment=Helikopter Fernsteuerung +heli-pad-item=Helipad + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= + +[entity-name] +heli-entity-_-=Helikopter +heli-placement-entity-_-=Helikopter +heli-pad-entity=Helipad +heli-pad-placement-entity=Helipad + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=Helikopter +heli-remote-recipe=Helikopter Fernsteuerung +heli-pad-recipe=Helipad + +[technology-name] +heli-technology=Helikopter +heli-remote-technology=Helikopter Fernsteuerung + +[equipment-name] +heli-remote-equipment=Helikopter Fernsteuerung + +[controls] +heli-up=Helikopter hoch +heli-down=Helikopter runter +heli-zaa-height-increase=ErhΓΆhe maximale HΓΆhe +heli-zab-height-decrease=Reduziere maximale HΓΆhe +heli-zba-toogle-floodlight=Flutlicht umschalten +heli-zca-remote-heli-follow=Schicke nΓ€chsten verfΓΌgbaren Heli +heli-zcb-remote-open=Γ–ffne Fernsteuerung + +[mod-setting-name] +heli-auto-focus-searchfields=Autofokus auf Suchfelder +heli-deactivate-inserters=Deaktiviere in der NΓ€he befindliche Greifarme wΓ€hrend des Fluges +heli-gui-heliSelection-defaultZoom=Helikopter Auswahl Standardzoom +heli-gui-heliPadSelection-defaultZoom=Helipad Auswahl Standardzoom +heli-gaugeGui-show=Heli Instrumente +heli-gaugeGui-play-fuel-warning-sound=Treibstoff Warnton (wenn Instrumente aktiviert) +heli-fuel-alert=Treibstoff Alarm (unabhΓ€ngig von Instrumenten) +heli-crash-dmg-mult=Bruchlandungsschaden Multiplikator +heli-remote-dont-auto-land-player=Lande ferngesteuerten Heli nicht wenn ein Spieler darin ist + +[virtual-signal-name] +signal-heli-fuel-warning=Wenig Treibstoff +signal-heli-fuel-warning-critical=Kritischer Treibstoff \ No newline at end of file diff --git a/HelicopterRevival/locale/en/info.json b/HelicopterRevival/locale/en/info.json new file mode 100644 index 00000000..28ccaa9a --- /dev/null +++ b/HelicopterRevival/locale/en/info.json @@ -0,0 +1,9 @@ +{ + "language-name": "English", + "font": { + "pixelated": + [ + "__HelicopterRevival__/locale/en/pixelated.ttf" + ] + } +} diff --git a/HelicopterRevival/locale/en/locale.cfg b/HelicopterRevival/locale/en/locale.cfg new file mode 100644 index 00000000..5221682f --- /dev/null +++ b/HelicopterRevival/locale/en/locale.cfg @@ -0,0 +1,101 @@ +heli-gui-remote-btn-tt=Open helicopter remote gui +heli-gui-frame-tt=Rmb to close +heli-gui-cam-tt=Rmb to zoom out\nShift + Rmb to zoom in + + +heli-gui-heliSelection-frame-caption=Helicopter remote control +heli-gui-heliSelection-controlled= CONTROLLED +heli-gui-heliSelection-noHelisAvailable=NO HELICOPTERS AVAILABLE +heli-gui-heliSelection-to-player-btn-tt=Lmb to follow\nShift + Lmb to land at your current position\nRmb to select another player + +heli-gui-padSelection-frame-caption=Select helicopter pad to fly to +heli-gui-padSelection-noPadsAvailable=NO HELICOPTER PADS AVAILABLE + +heli-gui-markerSelection-frame-caption=Select map marker to fly to + +heli-gui-playerSelection-frame-caption=Select player to fly to +heli-gui-playerSelection-listbox-btn-tt=Lmb to follow\nShift + Lmb to land at players current position + +heli-gui-gauges-tt=Configurable in the settings. + +heli-alert-follow=Dispatched heli __1__ units from your position. +heli-alert-fuel-warning=Low fuel. +heli-alert-fuel-warning-critical=Critical fuel. + + +[item-name] +heli-item=Helicopter +heli-rocket-launcher-item=Helicopter Rocket Pod +heli-remote-equipment=Helicopter Remote Control +heli-pad-item=Helicopter Pad +heli-gun=Helicopter Gun +heli-flamethrower=Helicopter Flamethrower +heli-k2-anti-material-gun=Helicopter Anti-Material Gun + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= +heli-gun= + +[entity-name] +heli-entity-_-=Helicopter +heli-placement-entity-_-=Helicopter +heli-pad-entity=Helicopter Pad +heli-pad-placement-entity=Helicopter Pad + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=Helicopter +heli-remote-recipe=Helicopter Remote Control +heli-pad-recipe=Helicopter Pad + +[technology-name] +heli-technology=Helicopters +heli-remote-technology=Helicopter Remote Control + +[equipment-name] +heli-remote-equipment=Helicopter Remote Control + +[controls] +heli-up=Helicopter up +heli-down=Helicopter down +heli-zaa-height-increase=Increase maximum height +heli-zab-height-decrease=Decrease maximum height +heli-zba-toogle-floodlight=Toggle floodlight +heli-zca-remote-heli-follow=Send nearest available heli +heli-zcb-remote-open=Open remote gui + +[mod-setting-name] +heli-auto-focus-searchfields=Auto focus searchfields +heli-deactivate-inserters=Deactivate nearby inserters while flying +heli-gui-heliSelection-defaultZoom=Helicopter selection default zoom +heli-gui-heliPadSelection-defaultZoom=Helicopter pad selection default zoom +heli-gaugeGui-show=Heli gauges +heli-gaugeGui-play-fuel-warning-sound=Fuel warning sound (when gauges active) +heli-fuel-alert=Fuel warning alert (independent of gauges) +heli-crash-dmg-mult=Crash damage multiplier +heli-remote-dont-auto-land-player=Don't land remote controlled heli when player inside +heli-remote-dont-land-following-player=Don't land remote controlled heli following player +heli-gun-damage-modifier=Turret damage modifier +heli-gun-range=Turret range +heli-flamethrower-damage-modifier=Flamethrower damage modifier +heli-flamethrower-range=Flamethrower range +heli-rocket-damage-modifier=Rocket damage modifier +heli-rocket-launcher-range=Rocket launcher range +heli-k2-anti-material-gun-damage-modifier=Anti-material gun damage modifier (Krastorio2) +heli-k2-anti-material-gun-range=Anti-material gun range (Krastorio 2) + +heli-consumption=Acceleration Power +heli-braking-power=Braking Power +heli-weight=Helicopter Weight + +[virtual-signal-name] +signal-heli-fuel-warning=Low fuel +signal-heli-fuel-warning-critical=Critical fuel \ No newline at end of file diff --git a/HelicopterRevival/locale/en/pixelated.ttf b/HelicopterRevival/locale/en/pixelated.ttf new file mode 100644 index 00000000..17ca165f Binary files /dev/null and b/HelicopterRevival/locale/en/pixelated.ttf differ diff --git a/HelicopterRevival/locale/it/locale.cfg b/HelicopterRevival/locale/it/locale.cfg new file mode 100644 index 00000000..896cbd6d --- /dev/null +++ b/HelicopterRevival/locale/it/locale.cfg @@ -0,0 +1,84 @@ +heli-gui-remote-btn-tt=Apri la scheda di guida remota +heli-gui-frame-tt=Mouse Dx per chiudere +heli-gui-cam-tt=Mouse DX per aumentare lo zoom \nMaiusc + Mouse Dx per diminuire lo zoom + + +heli-gui-heliSelection-frame-caption=Controllo remoto elicottero +heli-gui-heliSelection-controlled= CONTROLLO REMOTO +heli-gui-heliSelection-noHelisAvailable=NESSUN ELICOTTERO DISPONIBILE +heli-gui-heliSelection-to-player-btn-tt=Mouse Sx per farsi seguire.\nMaiusc + mouse SX per far atterrare l'elicottero alla tua posizione.\nMouse Dx per selezionare un'altro giocatore + +heli-gui-padSelection-frame-caption=Selezionare l'eliporto di destinazione. +heli-gui-padSelection-noPadsAvailable=NESSUN ELIPORTO DIPONIBILE + +heli-gui-markerSelection-frame-caption=Selezionare la marcatura sulla mappa da raggiungere. + +heli-gui-playerSelection-frame-caption=Selezionare il giocatore da raggiungere. +heli-gui-playerSelection-listbox-btn-tt=Mouse Sx per farsi seguire.\nMouseMaiusc + mouse Sx per raggiugere la posizione corrente del giocatore. + +heli-gui-gauges-tt=Configurabile nelle impostazioni. + +heli-alert-follow=Spedito elicottero __1__ alla tua posizione. +heli-alert-fuel-warning=Livello del carburante:Basso. +heli-alert-fuel-warning-critical=Livello del carburante:Critico. + + +[item-name] +heli-item=Elicottero +heli-rocket-launcher-item=Lanciarazzi Elicottero +heli-remote-equipment=Controllo Remoto Elicottero +heli-pad-item=Eliporto + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= + +[entity-name] +heli-entity-_-=Elicottero +heli-placement-entity-_-=Elicottero +heli-pad-entity=Eliporto +heli-pad-placement-entity=Eliporto + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=Elicottero +heli-remote-recipe=Controllo Remoto Elicottero +heli-pad-recipe=Eliporto + +[technology-name] +heli-technology=Elicottero +heli-remote-technology=Controllo Remoto Elicottero + +[equipment-name] +heli-remote-equipment=Controllo Remoto Elicottero + +[controls] +heli-up=Decollo Elicottero +heli-down=Atterraggio Elicottero +heli-zaa-height-increase=Aumenta massima altezza +heli-zab-height-decrease=Diminuisce massima altezza +heli-zba-toogle-floodlight=Attiva/disattiva luci +heli-zca-remote-heli-follow=Invia il primo elicottero disimpegnato e limitrofo alla tua posizione. +heli-zcb-remote-open=Apre il controllo remoto + +[mod-setting-name] +heli-auto-focus-searchfields=Aprendo la schermata della marcatura sulla mappa il cursore del mouse va automaticamente nella barra di ricerca(a volte blocca i controlli) +heli-deactivate-inserters=Disattiva gli inseritori vicini durante il volo +heli-gui-heliSelection-defaultZoom=Zoom standard elicottero +heli-gui-heliPadSelection-defaultZoom=Zoom standard eliporto +heli-gaugeGui-show=Indicatori elicottero +heli-gaugeGui-play-fuel-warning-sound=Suono di pericolo del livello carburante (se gli indicatori sono attivi) +heli-fuel-alert=Avvertimento livello carburante (independente dagli indicatori) +heli-crash-dmg-mult=Moltiplicatore danni schianto. +heli-remote-dont-auto-land-player=l'elicottero non atterra in controllo remoto quando il giocatore θ al suo interno. + +[virtual-signal-name] +signal-heli-fuel-warning=Livello carburante:BASSO +signal-heli-fuel-warning-critical=Livello carburante:CRITICO \ No newline at end of file diff --git a/HelicopterRevival/locale/ja/locale.cfg b/HelicopterRevival/locale/ja/locale.cfg new file mode 100644 index 00000000..82c978e5 --- /dev/null +++ b/HelicopterRevival/locale/ja/locale.cfg @@ -0,0 +1,101 @@ +heli-gui-remote-btn-tt=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺγƒ’γƒΌγƒˆGUIを開く +heli-gui-frame-tt=右クγƒͺγƒƒγ‚―γ§ι–‰γ˜γ‚‹ +heli-gui-cam-tt=右クγƒͺγƒƒγ‚―γ§γ‚ΊγƒΌγƒ γ‚’γ‚¦γƒˆ\nShift + 右クγƒͺックでズームむン + + +heli-gui-heliSelection-frame-caption=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺヒコン +heli-gui-heliSelection-controlled= CONTROLLED +heli-gui-heliSelection-noHelisAvailable=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌεˆ©η”¨δΈε― +heli-gui-heliSelection-to-player-btn-tt=ε·¦γ‚―γƒͺックで追従\nShift + ε·¦γ‚―γƒͺγƒƒγ‚―γ§ηΎεœ¨εœ°γ«η€ι™Έ\n右クγƒͺックで他γγƒ—γƒ¬γ‚€γƒ€γƒΌγ‚’ιΈζŠž + +heli-gui-padSelection-frame-caption=ι£›θ‘Œε…ˆγγƒ˜γƒͺγƒ‘γƒƒγƒ‰γ‚’ιΈζŠž +heli-gui-padSelection-noPadsAvailable=γƒ˜γƒͺγƒ‘γƒƒγƒ‰εˆ©η”¨δΈε― + +heli-gui-markerSelection-frame-caption=ι£›θ‘Œε…ˆγεœ°ε›³γƒžγƒΌγ‚«γƒΌγ‚’ιΈζŠž + +heli-gui-playerSelection-frame-caption=ι£›θ‘Œε…ˆγγƒ—γƒ¬γ‚€γƒ€γƒΌγ‚’ιΈζŠž +heli-gui-playerSelection-listbox-btn-tt=ε·¦γ‚―γƒͺックで追従\nShift + ε·¦γ‚―γƒͺックでプレむダーγηΎεœ¨εœ°γ«η€ι™Έ + +heli-gui-gauges-tt=θ¨­εšη”»ι’で設εšγ§γγΎγ™γ€‚ + +heli-alert-follow=あγͺたγδ½η½γ‹γ‚‰γƒ˜γƒͺ __1__ ζ©Ÿγ‚’ζ΄Ύι£γ—γΎγ—γŸγ€‚ +heli-alert-fuel-warning=δ½Žη‡ƒζ–™γ€‚ +heli-alert-fuel-warning-critical=危険γͺ燃料。 + + +[item-name] +heli-item=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌ +heli-rocket-launcher-item=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒ­γ‚±γƒƒγƒˆγƒγƒƒγƒ‰ +heli-remote-equipment=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺヒコン +heli-pad-item=γƒ˜γƒͺパッド +heli-gun=γƒ˜γƒͺコプターガン +heli-flamethrower=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌη«η‚Žζ”Ύε°„ε™¨ +heli-k2-anti-material-gun=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌε―Ύη‰©ιŠƒ + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= +heli-gun= + +[entity-name] +heli-entity-_-=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌ +heli-placement-entity-_-=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌ +heli-pad-entity=γƒ˜γƒͺパッド +heli-pad-placement-entity=γƒ˜γƒͺパッド + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌ +heli-remote-recipe=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺヒコン +heli-pad-recipe=γƒ˜γƒͺパッド + +[technology-name] +heli-technology=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌ +heli-remote-technology=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺヒコン + +[equipment-name] +heli-remote-equipment=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγγƒͺヒコン + +[controls] +heli-up=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌδΈŠζ˜‡ +heli-down=γƒ˜γƒͺコプター下降 +heli-zaa-height-increase=ζœ€ε€§ι«˜εΊ¦γ‚’δΈŠγ’γ‚‹ +heli-zab-height-decrease=ζœ€ε€§ι«˜εΊ¦γ‚’δΈ‹γ’γ‚‹ +heli-zba-toogle-floodlight=ζŠ•ε…‰ε™¨γεˆ‡ζ›Ώ +heli-zca-remote-heli-follow=δΈ€η•ͺθΏ‘γ„εˆ©η”¨ε―θƒ½γͺγƒ˜γƒͺに送俑 +heli-zcb-remote-open=γƒͺγƒ’γƒΌγƒˆGUIを開く + +[mod-setting-name] +heli-auto-focus-searchfields=ζ€œη΄’γƒ•γ‚£γƒΌγƒ«γƒ‰γ«θ‡ͺ動フォーカスする +heli-deactivate-inserters=ι£›θ‘ŒδΈ­γ«θΏ‘γγγ‚€γƒ³γ‚΅γƒΌγ‚Ώγ‚’η„‘εŠΉγ«γ™γ‚‹ +heli-gui-heliSelection-defaultZoom=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌιΈζŠžζ™‚γγƒ‡γƒ•γ‚©γƒ«γƒˆγ‚ΊγƒΌγƒ  +heli-gui-heliPadSelection-defaultZoom=γƒ˜γƒͺγƒ‘γƒƒγƒ‰ιΈζŠžζ™‚γγƒ‡γƒ•γ‚©γƒ«γƒˆγ‚ΊγƒΌγƒ  +heli-gaugeGui-show=γƒ˜γƒͺγθ¨ˆε™¨ +heli-gaugeGui-play-fuel-warning-sound=η‡ƒζ–™θ­¦ε‘ŠιŸ³(θ¨ˆε™¨γŒγ‚’γ‚―γƒ†γ‚£γƒ–γͺζ™‚) +heli-fuel-alert=η‡ƒζ–™θ­¦ε‘Šγ‚’γƒ©γƒΌγƒˆ(θ¨ˆε™¨γ¨η‹¬η«‹) +heli-crash-dmg-mult=クラッシγƒ₯ダパージ乗数 +heli-remote-dont-auto-land-player=γƒ—γƒ¬γ‚€γƒ€γƒΌγŒε†…ιƒ¨γ«γ„γ‚‹ζ™‚γ«γƒͺγƒ’γƒΌγƒˆγ‚³γƒ³γƒˆγƒ­γƒΌγƒ«γ•γ‚ŒγŸγƒ˜γƒͺを着陸させγͺい +heli-remote-dont-land-following-player=プレむダー追従時にγƒͺγƒ’γƒΌγƒˆγ‚³γƒ³γƒˆγƒ­γƒΌγƒ«γ•γ‚ŒγŸγƒ˜γƒͺを着陸させγͺい +heli-gun-damage-modifier=γ‚Ώγƒ¬γƒƒγƒˆγƒ€γƒ‘γƒΌγ‚Έε€‰ζ›΄ +heli-gun-range=γ‚Ώγƒ¬γƒƒγƒˆη―„ε›² +heli-flamethrower-damage-modifier=η«η‚Žζ”Ύε°„ε™¨γƒ€γƒ‘γƒΌγ‚Έε€‰ζ›΄ +heli-flamethrower-range=η«η‚Žζ”Ύε°„ε™¨η―„ε›² +heli-rocket-damage-modifier=γƒ­γ‚±γƒƒγƒˆγƒ€γƒ‘γƒΌγ‚Έε€‰ζ›΄ +heli-rocket-launcher-range=γƒ­γ‚±γƒƒγƒˆγƒ©γƒ³γƒγƒ£γƒΌη―„ε›² +heli-k2-anti-material-gun-damage-modifier=ε―Ύη‰©ιŠƒγƒ€γƒ‘γƒΌγ‚Έε€‰ζ›΄ (Krastorio2) +heli-k2-anti-material-gun-range=ε―Ύη‰©ιŠƒη―„ε›² (Krastorio 2) + +heli-consumption=εŠ ι€ŸεŠ› +heli-braking-power=η ΄ε£ŠεŠ› +heli-weight=γƒ˜γƒͺγ‚³γƒ—γ‚ΏγƒΌγι‡ι‡ + +[virtual-signal-name] +signal-heli-fuel-warning=δ½Žη‡ƒζ–™ +signal-heli-fuel-warning-critical=危険γͺ燃料 diff --git a/HelicopterRevival/locale/ko/locale.cfg b/HelicopterRevival/locale/ko/locale.cfg new file mode 100644 index 00000000..3c380424 --- /dev/null +++ b/HelicopterRevival/locale/ko/locale.cfg @@ -0,0 +1,91 @@ +heli-gui-remote-btn-tt=헬리μ½₯ν„° μ‘°μ’…GUI μ—΄κΈ° +heli-gui-frame-tt=마우슀 였λ₯Έμͺ½ 클릭으둜 λ‹«κΈ° +heli-gui-cam-tt=마우슀 였λ₯Έμͺ½ 클릭으둜 ν™”λ©΄ μΆ•μ†Œ\nShift+마우슀 였λ₯Έμͺ½ 클릭으둜 ν™”λ©΄ ν™•λŒ€ + + +heli-gui-heliSelection-frame-caption=헬리μ½₯ν„° 원격 μ œμ–΄ +heli-gui-heliSelection-controlled= 연결됨 +heli-gui-heliSelection-noHelisAvailable=κ°€λŠ₯ν•œ 헬리μ½₯ν„° μ—†μŒ +heli-gui-heliSelection-to-player-btn-tt=마우슀 μ™Όμͺ½ 클릭으둜 μ‹€ν–‰\nShift+마우슀 μ™Όμͺ½ 클릭으둜 μ„ νƒν•œ μœ„μΉ˜μ— μ°©λ₯™\n마우슀 였λ₯Έμͺ½ 클릭으둜 λ‹€λ₯Έ ν”Œλ ˆμ΄μ–΄ 선택 + +heli-gui-padSelection-frame-caption=λΉ„ν–‰ ν•  헬리μ½₯ν„° μ •κ±°μž₯ 선택 +heli-gui-padSelection-noPadsAvailable=κ°€λŠ₯ν•œ 헬리μ½₯ν„° μ •κ±°μž₯ μ—†μŒ + +heli-gui-markerSelection-frame-caption=λΉ„ν–‰ ν•  λ§΅ νƒœκ·Έ 선택 + +heli-gui-playerSelection-frame-caption=λΉ„ν–‰ ν•  ν”Œλ ˆμ΄μ–΄ 선택 +heli-gui-playerSelection-listbox-btn-tt=마우슀 μ™Όμͺ½ 클릭으둜 μ‹€ν–‰\nShift+마우슀 μ™Όμͺ½ 클릭으둜 ν˜„μž¬ ν”Œλ ˆμ΄μ–΄ μœ„μΉ˜μ— μ°©λ₯™ + +heli-gui-gauges-tt=μ˜΅μ…˜μ—μ„œ ꡬ성 κ°€λŠ₯ + +heli-alert-follow=λ‹Ήμ‹ μ˜ μœ„μΉ˜λ‘œ 헬리μ½₯ν„° __1__ μœ λ‹›μ„ νŒŒκ²¬ν•©λ‹ˆλ‹€. +heli-alert-fuel-warning=κ²½κ³ ! μ—°λ£Œ 적음 +heli-alert-fuel-warning-critical=κ²½κ³ ! μ—°λ£Œ μ—†μŒ + + +[item-name] +heli-item=헬리μ½₯ν„° +heli-rocket-launcher-item=헬리μ½₯ν„° λ‘œμΌ“ ν¬λ“œ +heli-remote-equipment=헬리μ½₯ν„° 원격 μ‘°μ’… μž₯치 +heli-pad-item=ν—¬κΈ° μ •κ±°μž₯ + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= + +[entity-name] +heli-entity-_-=헬리μ½₯ν„° +heli-placement-entity-_-=헬리μ½₯ν„° +heli-pad-entity=ν—¬κΈ° μ •κ±°μž₯ +heli-pad-placement-entity=ν—¬κΈ° μ •κ±°μž₯ + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=헬리μ½₯ν„° +heli-remote-recipe=헬리μ½₯ν„° 원격 μ‘°μ’… μž₯치 +heli-pad-recipe=ν—¬κΈ° μ •κ±°μž₯ + +[technology-name] +heli-technology=헬리μ½₯ν„° +heli-remote-technology=헬리μ½₯ν„° 원격 μ‘°μ’… + +[equipment-name] +heli-remote-equipment=헬리μ½₯ν„° 원격 μ‘°μ’… μž₯치 + +[controls] +heli-up=헬리μ½₯ν„° 이λ₯™ +heli-down=헬리μ½₯ν„° μ°©λ₯™ +heli-zaa-height-increase=μƒμŠΉ +heli-zab-height-decrease=ν•˜κ°• +heli-zba-toogle-floodlight=νˆ¬κ΄‘μ‘°λͺ… 단좕킀 +heli-zca-remote-heli-follow=κ°€μž₯ κ°€κΉŒμš΄ 헬리μ½₯ν„° 파견 +heli-zcb-remote-open=원격 μ‘°μ’… GUIμ°½ μ—΄κΈ° + +[mod-setting-name] +heli-auto-focus-searchfields=μžλ™ 초점 검색 ν•„λ“œ +heli-deactivate-inserters=λΉ„ν–‰ν•˜λŠ” λ™μ•ˆ 근처의 νˆ¬μž…κΈ°λ₯Ό λΉ„ν™œμ„±ν™” +heli-gui-heliSelection-defaultZoom=[GUI]헬리μ½₯ν„° 선택 κΈ°λ³Έ 쀌 +heli-gui-heliPadSelection-defaultZoom=[GUI]ν—¬κΈ° μ •κ±°μž₯ 선택 κΈ°λ³Έ 쀌 +heli-gaugeGui-show=[GUI]헬리μ½₯ν„° 크기 +heli-gaugeGui-play-fuel-warning-sound=[GUI]μ—°λ£Œ 경고음 (κ²Œμ΄μ§€ μž‘λ™μ‹œ) +heli-fuel-alert=[GUI]μ—°λ£Œ 경고음 (κ²Œμ΄μ§€μ™€ 무관) +heli-crash-dmg-mult=좩돌 ν”Όν•΄ 배율 +heli-remote-dont-auto-land-player=ν”Œλ ˆμ΄μ–΄κ°€ νƒ‘μŠΉν•œ μ°©λ₯™ 쀑인 헬리μ½₯ν„°μ˜ 원격 μ‘°μ’… λΉ„ν—ˆμš© + +[virtual-signal-name] +signal-heli-fuel-warning=μ—°λ£Œ 적음 +signal-heli-fuel-warning-critical=μ—°λ£Œ μ—†μŒ + + +[mod-name] +Helicopters=헬리μ½₯ν„°(Helicopters) + +[mod-description] +Helicopters=μ™„λ²½ν•˜κ²Œ μ›€μ§μ΄λŠ” 곡격용 헬리μ½₯ν„°λ₯Ό κ²Œμž„μ— μΆ”κ°€ν•©λ‹ˆλ‹€. Aμ—μ„œ BκΉŒμ§€ λΉ λ₯΄κ²Œ λ„μ°©ν•˜κ³ ,지도λ₯Ό νƒν—˜ν•˜κ³ , 섬을 κ±΄μΆ•ν•˜κ³ , ν•˜λŠ˜μ„ 톡해 μ΄λ™ν•˜μ—¬ 바이터듀 λ”°λŒλ¦¬κΈ° μ΄μƒμ μž…λ‹ˆλ‹€.\n\nλ²ˆμ—­: XMKTP(Xagros) \ No newline at end of file diff --git a/HelicopterRevival/locale/ru/locale.cfg b/HelicopterRevival/locale/ru/locale.cfg new file mode 100644 index 00000000..0d3d304d --- /dev/null +++ b/HelicopterRevival/locale/ru/locale.cfg @@ -0,0 +1,92 @@ +heli-gui-remote-btn-tt=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ +heli-gui-frame-tt=ПКМ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ +heli-gui-cam-tt=ПКМ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π°Π»ΠΈΡ‚ΡŒ\nShift + ПКМ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ + + +heli-gui-heliSelection-frame-caption=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ +heli-gui-heliSelection-controlled=Π£ΠŸΠ ΠΠ’Π›Π―Π•ΠœΠ«Π™ +heli-gui-heliSelection-noHelisAvailable=НЕВ Π”ΠžΠ‘Π’Π£ΠŸΠΠ«Π₯ Π’Π•Π Π’ΠžΠ›ΠΠ’ΠžΠ’ +heli-gui-heliSelection-to-player-btn-tt=Π›ΠšΠœ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ\nShift + Π›ΠšΠœ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ±Ρ‹Ρ‚ΡŒ ΠΊ вашСй Ρ‚Π΅ΠΊΡƒΡˆΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ\nПКМ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° + +heli-gui-padSelection-frame-caption=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π½ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΡƒ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅Ρ‚Π΅Ρ‚ΡŒ +heli-gui-padSelection-noPadsAvailable=НЕВ Π”ΠžΠ‘Π’Π£ΠŸΠΠ«Π₯ Π’Π•Π Π’ΠžΠ›ΠΠ’ΠΠ«Π₯ ΠŸΠ›ΠžΠ©ΠΠ”ΠžΠš + +heli-gui-markerSelection-frame-caption=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π»Π΅Ρ‚Π΅Ρ‚ΡŒ + +heli-gui-playerSelection-frame-caption=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π»Π΅Ρ‚Π΅Ρ‚ΡŒ +heli-gui-playerSelection-listbox-btn-tt=Π›ΠšΠœ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ\nShift + Π›ΠšΠœ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ±Ρ‹Ρ‚ΡŒ ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ полоТСнию ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² + +heli-gui-gauges-tt=НастраиваСтся Π² настройках + +heli-alert-follow=Π‘ вашСй ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ __1__ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π° +heli-alert-fuel-warning=ΠœΠ°Π»Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° +heli-alert-fuel-warning-critical=ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°! + + +[item-name] +heli-item=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ +heli-rocket-launcher-item=ВСртолётная ракСтная подвСска +heli-remote-equipment=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ +heli-pad-item=ВСртолётная ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° +heli-gun=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π½Ρ‹ΠΉ ΠΏΠ΅Π»Π΅ΠΌΡ‘Ρ‚ +heli-flamethrower=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π½Ρ‹ΠΉ ΠΎΠ³Π½Π΅ΠΌΡ‘Ρ‚ + +[item-description] +heli-item= +heli-rocket-launcher-item= +heli-remote-equipment= +heli-pad-item= +heli-gun= + +[entity-name] +heli-entity-_-=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ +heli-placement-entity-_-=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ +heli-pad-entity=ВСртолётная ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° +heli-pad-placement-entity=ВСртолётная ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° + +[entity-description] +heli-entity-_-= +heli-placement-entity-_-= +heli-pad-entity= +heli-pad-placement-entity= + +[recipe-name] +heli-recipe=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ +heli-remote-recipe=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ +heli-pad-recipe=ВСртолётная ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° + +[technology-name] +heli-technology=Π’Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Ρ‹ +heli-remote-technology=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ + +[equipment-name] +heli-remote-equipment=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ΠΎΠΌ + +[controls] +heli-up=ПодъСм Π²Π²Π΅Ρ€Ρ… +heli-down=Бпуск Π²Π½ΠΈΠ· +heli-zaa-height-increase=Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ высоту +heli-zab-height-decrease=Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ высоту +heli-zba-toogle-floodlight=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€ +heli-zca-remote-heli-follow=Π’Ρ‹ΡΠ»Π°Ρ‚ΡŒ блиТайший доступный Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ +heli-zcb-remote-open=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ управлСния Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π°ΠΌΠΈ + +[mod-setting-name] +heli-auto-focus-searchfields=Автофокус ΠΏΠΎΠ»Π΅ΠΉ поиска +heli-deactivate-inserters=Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ блиТайшиС манипуляторы Π²ΠΎ врСмя ΠΏΠΎΠ»Π΅Ρ‚Π° +heli-gui-heliSelection-defaultZoom=Π—ΡƒΠΌ Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +heli-gui-heliPadSelection-defaultZoom=Π—ΡƒΠΌ Π²Ρ‹Π±ΠΎΡ€Π° Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π½ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +heli-gaugeGui-show=ΠŸΡ€ΠΈΠ±ΠΎΡ€Π½Π°Ρ панСль +heli-gaugeGui-play-fuel-warning-sound=Π—Π²ΡƒΠΊ прСдупрСТдСния ΠΎ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π΅ (ΠΊΠΎΠ³Π΄Π° активная ΠŸΡ€ΠΈΠ±ΠΎΡ€Π½Π°Ρ панСль) +heli-fuel-alert=ΠžΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π΅ (НСзависимо ΠΎΡ‚ ΠŸΡ€ΠΈΠ±ΠΎΡ€Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ) +heli-crash-dmg-mult=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ ΡƒΡ€ΠΎΠ½Π° ΠΏΡ€ΠΈ ΠΊΡ€ΡƒΡˆΠ΅Π½ΠΈΠΈ +heli-remote-dont-auto-land-player=НС ΠΏΡ€ΠΈΠ·Π΅ΠΌΠ»ΡΡ‚ΡŒ управляСмый Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚ Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ находится ΠΈΠ³Ρ€ΠΎΠΊ +heli-gun-damage-modifier=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡ€ΠΎΠ½Π° Ρ‚ΡƒΡ€Π΅Π»ΠΈ +heli-flamethrower-damage-modifier=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡ€ΠΎΠ½Π° ΠΎΠ³Π½Π΅ΠΌΡ‘Ρ‚Π° +heli-consumption=ΠœΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π³ΠΎΠ½Π° +heli-braking-power=Π‘ΠΈΠ»Π° тормоТСния +heli-weight=ВСс Π²Π΅Ρ€Ρ‚ΠΎΠ»Ρ‘Ρ‚Π° + +[virtual-signal-name] +signal-heli-fuel-warning=ΠœΠ°Π»Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° +signal-heli-fuel-warning-critical=ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°! \ No newline at end of file diff --git a/HelicopterRevival/logic/basicAnimator.lua b/HelicopterRevival/logic/basicAnimator.lua new file mode 100644 index 00000000..637a5e79 --- /dev/null +++ b/HelicopterRevival/logic/basicAnimator.lua @@ -0,0 +1,141 @@ +basicAnimator = +{ + new = function(startValue, maxValue, durationInFrames, easingName) + local obj = + { + curFrame = 0, + endFrame = durationInFrames - 1, + + curVal = nil, + isDone = false, + + easingFunc = basicAnimator.easingFuncs[easingName], + + startValue = startValue, + --maxValue = maxValue, + delta = maxValue - startValue, + + direction = 1, + } + + return setmetatable(obj, {__index = basicAnimator}) + end, + + nextFrame = function(self) + local easedProgress = self.easingFunc(self.curFrame / self.endFrame) + + self.curVal = self.startValue + self.delta * easedProgress + + if self.directionChangeRate then + local oldDir = self.direction + self.direction = self.direction - self.directionChangeRate + + if self.bFadeOut then + if self.direction == 0 or (oldDir > 0 and self.direction < 0) or (oldDir < 0 and self.direction > 0) then + self.isDone = true + end + end + + if self.direction >= 1 then + self.direction = 1 + self.directionChangeRate = nil + + elseif self.direction <= -1 then + self.direction = -1 + self.directionChangeRate = nil + end + end + + self.curFrame = self.curFrame + self.direction + if self.curFrame > self.endFrame or self.curFrame < 0 then + self.isDone = true + end + + return self.curVal, self.isDone + end, + + reset = function(self) + self.curVal = nil + self.isDone = false + self.curFrame = 0 + end, + + reverse = function(self) + self.direction = -1 + end, + + reverseSmoothly = function(self, maxSmoothingFrames) + if not maxSmoothingFrames then + maxSmoothingFrames = 20 + end + + maxSmoothingFrames = math.min(maxSmoothingFrames, self:remainingFrames()) + + self.directionChangeRate = (self.direction / maxSmoothingFrames) * 2 + end, + + fadeOut = function(self, maxSmoothingFrames) + if maxSmoothingFrames then + maxSmoothingFrames = maxSmoothingFrames / 2 + end + + self:reverseSmoothly(maxSmoothingFrames) + self.bFadeOut = true + end, + + remainingFrames = function(self) + if direction == 1 then + return self.endFrame - self.curFrame + 1 + else + return self.curFrame + 1 + end + end, + + easingFuncs = + { + --source: https://gist.github.com/gre/1650294 + + linear = function(x) return x end, + + -- accelerating from zero velocity + easeInQuad = function(x) return x^2 end, + + -- decelerating to zero velocity + easeOutQuad = function(x) return x*(2-x) end, + + -- acceleration until halfway, then deceleration + easeInOutQuad = function(x) if x < 0.5 then return 2*x^2 else return -1+(4-2*x)*x end end, + + -- accelerating from zero velocity + easeInCubic = function(x) return x^3 end, + + -- decelerating to zero velocity + easeOutCubic = function(x) return (x-1)^3+1 end, + + -- acceleration until halfway, then deceleration + easeInOutCubic = function(x) if x < 0.5 then return 4*x^3 else return (x-1)*(2*x-2)*(2*x-2)+1 end end, + + -- accelerating from zero velocity + easeInQuart = function(x) return x^4 end, + + -- decelerating to zero velocity + easeOutQuart = function(x) return 1-(x-1)^4 end, + + -- acceleration until halfway, then deceleration + easeInOutQuart = function(x) if x < 0.5 then return 8*x^4 else return 1-8*(x-1)^4 end end, + + -- accelerating from zero velocity + easeInQuint = function(x) return x^5 end, + + -- decelerating to zero velocity + easeOutQuint = function(x) return 1+(x-1)^5 end, + + -- acceleration until halfway, then deceleration + easeInOutQuint = function(x) if x < 0.5 then return 16*x^5 else return 1+16*(1-x)^5 end end, + + -- acceleration until halfway, then deceleration + easeInOutSine = function(x) return (math.cos(x * math.pi) - 1) * -0.5 end, + + cyclicSine = function(x) return math.sin(2 * math.pi * x) end, + }, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/basicState.lua b/HelicopterRevival/logic/basicState.lua new file mode 100644 index 00000000..1a09fab7 --- /dev/null +++ b/HelicopterRevival/logic/basicState.lua @@ -0,0 +1,28 @@ +basicState = +{ + new = function(obj) + return setmetatable(obj, basicState.mt) + end, + + --placeholders to avoid errors when a state does not need them + init = function() --becoming the active state + end, + + deinit = function() --no longer the active state + end, + ---- +} + +basicState.mt = +{ + __index = function(t, k) + if stateFuncs[t.name] and stateFuncs[t.name][k] then + return stateFuncs[t.name][k] + elseif basicState[k] then + return basicState[k] + elseif type(k) == "string" and k:match("^On.+") then + return function() + end + end + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/emptyBoxCollider.lua b/HelicopterRevival/logic/emptyBoxCollider.lua new file mode 100644 index 00000000..615de6ff --- /dev/null +++ b/HelicopterRevival/logic/emptyBoxCollider.lua @@ -0,0 +1,312 @@ +emptyBoxCollider = +{ + new = function(options) + local obj = + { + _orientation = options.orientation or 0, + surface = options.surface, + position = getIndexedPos(options.position), + force = options.force, + + boxHalfs = + { + ends = options.boxLengths.ends / 2, + sides = options.boxLengths.sides / 2 + }, + childColliders = {}, + childColliderOffsets = {}, + } + + if not obj.force then + obj.force = game.forces.enemy + end + + obj.childColliders.top = obj.surface.create_entity{ + name = options.nameEnds, + force = obj.force, + position = obj.position, + } + + obj.childColliders.bottom = obj.surface.create_entity{ + name = options.nameEnds, + force = obj.force, + position = obj.position, + } + + obj.childColliders.left = obj.surface.create_entity{ + name = options.nameSides, + force = obj.force, + position = obj.position, + } + + obj.childColliders.right = obj.surface.create_entity{ + name = options.nameSides, + force = obj.force, + position = obj.position, + } + + setmetatable(obj, emptyBoxCollider.mt) + obj.setOrientation(obj._orientation) + + return obj + end, + + destroy = function(self) + for k,v in pairs(self.childColliders) do + if v.valid then + v.destroy() + end + end + end, + + valid = function(self) + local val = true + + for k,v in pairs(self.childColliders) do + if not v.valid then + val = false + break + end + end + + if not val then + self.destroy() + end + + return val + end, + + moveChildColliders = function(self) + self.childColliders.top.teleport(math3d.vector2.add(self.position, self.childColliderOffsets.up)) + self.childColliders.bottom.teleport(math3d.vector2.sub(self.position, self.childColliderOffsets.up)) + + self.childColliders.right.teleport(math3d.vector2.add(self.position, self.childColliderOffsets.right)) + self.childColliders.left.teleport(math3d.vector2.sub(self.position, self.childColliderOffsets.right)) + end, + + setOrientation = function(self, orient) + self._orientation = orient + + self.childColliderOffsets.up = math3d.vector2.rotate({0,self.boxHalfs.sides}, math.pi * 2 * orient) + self.childColliderOffsets.right = math3d.vector2.rotate({self.boxHalfs.ends,0}, math.pi * 2 * orient) + + for k,v in pairs(self.childColliders) do + v.orientation = orient + end + + self.moveChildColliders() + end, + + teleport = function(self, pos) + self.position = getIndexedPos(pos) + + self.moveChildColliders() + end, + + getHealth = function(self) + local lowest = self.childColliders.top.health + + for k,v in pairs(self.childColliders) do + if v.health < lowest then + lowest = v.health + end + end + + return lowest + end, + + setHealth = function(self, health) + for k,v in pairs(self.childColliders) do + v.health = health + end + end, + + getSpeed = function(self) + local highest = self.childColliders.top.speed + + for k,v in pairs(self.childColliders) do + if v.speed > highest then + speed = v.speed + end + end + + return highest + end, + + setSpeed = function(self, speed) + for k,v in pairs(self.childColliders) do + v.speed = speed + end + end, + + setOperable = function(self, operable) + for k,v in pairs(self.childColliders) do + v.operable = operable + end + end, + + get_driver = function(self) + for k,v in pairs(self.childColliders) do + local driver = v.get_driver() + if driver then + return driver + end + end + + return nil + end, + + set_driver = function(self, driver) + if driver == nil then + for k,v in pairs(self.childColliders) do + v.set_driver(nil) + end + end + end, + + get_passenger = function(self) + for k,v in pairs(self.childColliders) do + local passenger = v.get_passenger() + if passenger then + return passenger + end + end + + return nil + end, + + set_passenger = function(self, passenger) + if passenger == nil then + for k,v in pairs(self.childColliders) do + v.set_passenger(nil) + end + end + end, + + isPosInside = function(self, pos) + local delta = math3d.vector2.sub(getIndexedPos(pos), self.position) + + local tX = delta[1] + local tY = delta[2] + + local up = math3d.vector2.mul(self.childColliderOffsets.up, 1.1) + local right = math3d.vector2.mul(self.childColliderOffsets.right, 1.1) + + local b1X = up[1] + local b1Y = up[2] + + local b2X = right[1] + local b2Y = right[2] + + --https://i.imgur.com/zQrgq0B.png + local a = (tY * b2X - tX * b2Y) / (b1Y * b2X - b1X * b2Y) + local b = (tY * b1X - tX * b1Y) / (b2Y * b1X - b2X * b1Y) + + return math.abs(a) < 1 and math.abs(b) < 1, a, b + end, + + ejectPlayers = function(self) + local rad = math.ceil(math.sqrt(self.boxHalfs.ends^2 + self.boxHalfs.sides^2)) + local x = self.position[1] + local y = self.position[2] + + local players = self.surface.find_entities_filtered{ + area = {{x - rad, y - rad}, {x + rad, y + rad}}, + type = "character", + } + + for k, curPlayer in pairs(players) do + local pos = getIndexedPos(curPlayer.position) + local inside, a, b = self.isPosInside(pos) + + if inside then + local deltaVec + if math.abs(a) > math.abs(b) then + local delta + if a > 0 then + delta = 1.2 - a + else + delta = -1.2 - a + end + + deltaVec = math3d.vector2.mul(self.childColliderOffsets.up, delta) + else + local delta + if b > 0 then + delta = 1.2 - b + else + delta = -1.2 - b + end + + deltaVec = math3d.vector2.mul(self.childColliderOffsets.right, delta) + end + + curPlayer.teleport(math3d.vector2.add(pos, deltaVec)) + end + end + end, + + isChildEntity = function(self, ent) + for k,v in pairs(self.childColliders) do + if v == ent then + return true + end + end + + return false + end, +} + +emptyBoxCollider.mt = +{ + __index = function(t, k) + if k == "valid" then + return emptyBoxCollider.valid(t) + + elseif k == "orientation" then + return t._orientation + + elseif k == "health" then + return emptyBoxCollider.getHealth(t) + + elseif k == "speed" then + return emptyBoxCollider.getSpeed(t) + + elseif k == "get_inventory" then + return function(...) + local params = {...} + return setmetatable({}, + {__index = function(_t, _k) + return function(...) + for key, curCol in pairs(t.childColliders) do + curCol[k](unpack(params))[_k](...) + end + end + end}) + end + + elseif type(emptyBoxCollider[k]) == "function" then + return function(...) + return emptyBoxCollider[k](t, ...) + end + + else + return emptyBoxCollider[k] + end + end, + + __newindex = function(t, k, v) + if k == "orientation" then + emptyBoxCollider.setOrientation(t, v) + + elseif k == "health" then + emptyBoxCollider.setHealth(t, v) + + elseif k == "speed" then + emptyBoxCollider.setSpeed(t, v) + + elseif k == "operable" then + emptyBoxCollider.setOperable(t, v) + end + end, +} diff --git a/HelicopterRevival/logic/gui/gaugeGui.lua b/HelicopterRevival/logic/gui/gaugeGui.lua new file mode 100644 index 00000000..ecb0d925 --- /dev/null +++ b/HelicopterRevival/logic/gui/gaugeGui.lua @@ -0,0 +1,316 @@ +function reSetGaugeGui(p) + local gg = searchInTable(global.gaugeGuis, p, "player") + + local shouldHaveGG = playerIsInHeli(p) and p.mod_settings["heli-gaugeGui-show"].value + + if gg and not shouldHaveGG then + gg:destroy() + + elseif not gg and shouldHaveGG then + local heli = getHeliFromBaseEntity(p.vehicle) + if heli then + insertInGlobal("gaugeGuis", gaugeGui.new(p, heli)) + end + end +end + +local pointerFrames = 128 + +gaugeGui = +{ + prefix = "heli_gaugeGui_", + + pointerData = + { + fuel = + { + min = 0, + max = 1, + fMin = 0.375 * pointerFrames, + fMax = 0.625 * pointerFrames, + clockwise = true, + }, + + speed = + { + min = 0, + max = 400, + fMin = 0.75 * pointerFrames, + fMax = 1.25 * pointerFrames, + clockwise = true, + }, + + height = + { + min = 0, + max = 25, + fMin = 0.5390625 * pointerFrames, + fMax = 0.965 * pointerFrames, + clockwise = true, + }, + + rpm = + { + min = 0, + max = 3000, + fMin = 0.4609375 * pointerFrames, + fMax = 0.035 * pointerFrames, + clockwise = false, + }, + }, + + new = function(player, heli) + obj = + { + valid = true, + player = player, + heli = heli, + + guiElems = + { + parent = mod_gui.get_frame_flow(player), + }, + } + + mtMgr.set(obj, "gaugeGui") + + obj:buildGui() + heli:addGaugeGui(obj) + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.guiElems.root and self.guiElems.root.valid then + self.guiElems.root.destroy() + end + + if self.heli.removeGaugeGui then + self.heli:removeGaugeGui(self) + end + + removeInGlobal("gaugeGuis", self) + end, + + hasMyPrefix = function(str) + return string.startswith(str, gaugeGui.prefix) + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + if name == self.prefix .. "speaker_on_button" then + self:setMuted(true) + + elseif name == self.prefix .. "speaker_off_button" then + self:setMuted(false) + end + end, + + setMuted = function(self, muted) + local els = self.guiElems + local s = "on" + if muted then s = "off" end + + self.muted = muted + Entity.set_data(self.player, muted, "gaugeGui_muted") + + els.gauge_hr.speakerButtonFlow.clear() + + els.gauge_hr.speaker_button = els.gauge_hr.speakerButtonFlow.add + { + type = "button", + name = self.prefix .. "speaker_" .. s .. "_button", + style = "heli-speaker_" .. s .. "_button", + } + end, + + setGauge = function(self, gaugeName, pointerName, val) + local pD = self.pointerData[pointerName] + local pointer = self.guiElems[gaugeName].pointers[pointerName] + + if pointer.noise then + val = val + pointer.noise:advance() + end + + if pointer.lastVal ~= val then + pointer.lastVal = val + + local pc = math.min(math.max(val / (pD.max - pD.min), 0), 1) + local frameDelta = math.abs(pD.fMax - pD.fMin) + + local frame + if pD.clockwise then + frame = pD.fMin + pc * frameDelta + else + frame = pD.fMin - pc * frameDelta + end + + if frame < 0 then + frame = pointerFrames + frame + end + frame = math.floor(frame % pointerFrames) + + if pointer.lastFrame ~= frame then + pointer.lastFrame = frame + + if pointer.elem then + pointer.elem.destroy() + end + + pointer.elem = pointer.root.add + { + type = "sprite", + name = gaugeName .. "_pointer_" .. pointerName, + sprite = "heli_gauge_pointer_" .. frame, + tooltip = {"heli-gui-gauges-tt"}, + } + end + end + end, + + setLed = function(self, gaugeName, ledName, on) + local led = self.guiElems[gaugeName].leds[ledName] + + if led.elem then + led.elem.destroy() + end + + if on then + local fullName = gaugeName .. "_led_" .. ledName + + led.elem = self.guiElems[gaugeName].leds.root.add + { + type = "sprite", + name = self.prefix .. fullName, + sprite = "heli_" .. fullName, + } + end + + led.on = on + end, + + setLedBlinking = function(self, gaugeName, ledName, on, interval, sound) + local led = self.guiElems[gaugeName].leds[ledName] + + if not on then + led.sound = nil + + if led.blinkInterval then + led.blinkInterval:cancel() + led.blinkInterval = nil + self:setLed("gauge_fs", "fuel", false) + end + + else + led.sound = sound + + if not led.blinkInterval then + led.blinkInterval = setInterval(function(timer) + local gg = timer.data.gg + local _led = timer.data.led + + if not gg.valid then + timer:cancel() + + else + gg:setLed("gauge_fs", "fuel", not _led.on) + + if _led.sound and (not gg.muted) and gg.player.mod_settings["heli-gaugeGui-play-fuel-warning-sound"].value then + gg.player.play_sound{path = _led.sound} + end + end + end, interval, {gg = self, led = led}) + else + led.blinkInterval.interval = interval + end + end + end, + + setPointerNoise = function(self, gaugeName, pointerName, enable, magnitude, timeAdvance, minFrequency, maxFrequency) + local pointer = self.guiElems[gaugeName].pointers[pointerName] + + if enable then + pointer.noise = simpleNoise.new(magnitude, timeAdvance, minFrequency, maxFrequency) + + else + pointer.noise = nil + end + end, + + buildGauge = function(self, parent, name, pointerNames, ledNames) + local gauge = + { + elem = parent.add + { + type = "sprite", + name = self.prefix .. name, + sprite = "heli_" .. name, + }, + + pointers = {}, + } + + gauge.leds = + { + root = gauge.elem.add + { + type = "sprite", + name = self.prefix .. name .. "_ledRoot", + sprite = "heli_void_128", + }, + } + + for k,v in pairs(pointerNames or {}) do + gauge.pointers[v] = + { + root = gauge.elem.add + { + type = "sprite", + name = self.prefix .. name .. "_pointer_" .. v .. "_root", + sprite = "heli_void_128", + } + } + end + + for k,v in pairs(ledNames or {}) do + gauge.leds[v] = {} + end + + return gauge + end, + + buildGui = function(self) + local els = self.guiElems + + els.root = els.parent.add + { + type = "frame", + name = self.prefix .. "rootFrame", + style = "frame", + tooltip = {"heli-gui-gauges-tt"}, + } + + els.gauge_fs = self:buildGauge(els.root, "gauge_fs", {"fuel", "speed"}, {"fuel"}) + els.gauge_hr = self:buildGauge(els.root, "gauge_hr", {"height", "rpm"}) + + els.gauge_hr.speakerButtonFlow = els.root.add + { + type = "flow", + name = self.prefix .. "speakerButtonFlow", + direction = "horizontal", + tooltip = {"heli-gui-gauges-tt"}, + } + + self:setMuted(Entity.get_data(self.player, "gaugeGui_muted")) + + self:setGauge("gauge_fs", "fuel", self.pointerData.fuel.min) + self:setGauge("gauge_fs", "speed", self.pointerData.speed.min) + self:setGauge("gauge_hr", "height", self.pointerData.height.min) + self:setGauge("gauge_hr", "rpm", self.pointerData.rpm.min) + end, +} + +mtMgr.assign("gaugeGui", {__index = gaugeGui}) \ No newline at end of file diff --git a/HelicopterRevival/logic/gui/heliPadSelectionGui.lua b/HelicopterRevival/logic/gui/heliPadSelectionGui.lua new file mode 100644 index 00000000..e6f80274 --- /dev/null +++ b/HelicopterRevival/logic/gui/heliPadSelectionGui.lua @@ -0,0 +1,222 @@ +mod_gui = require("mod-gui") + +heliPadSelectionGui = +{ + prefix = "heli_heliPadSelectionGui_", + + new = function(mgr, p) + obj = + { + valid = true, + manager = mgr, + player = p, + + guiElems = + { + parent = mod_gui.get_frame_flow(p), + }, + prefix = "heli_heliPadSelectionGui_", + } + + setmetatable(obj, {__index = heliPadSelectionGui}) + obj:buildGui() + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.guiElems.root and self.guiElems.root.valid then + self.guiElems.root.destroy() + end + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + if name:match("^" .. self.prefix .. "cam_%d+$") then + self:OnCamClicked(e) + + elseif name == self.prefix .. "rootFrame" and e.button == defines.mouse_button_type.right then + self.manager:OnChildEvent(self, "cancel") + end + end, + + OnCamClicked = function(self, e) + + if e.button == defines.mouse_button_type.left then + local camID = tonumber(e.element.name:match("%d+")) + local cam = searchInTable(self.guiElems.cams, camID, "ID") + self.manager:OnChildEvent(self, "selectedPosition", cam.heliPad.baseEnt.position) + + elseif e.button == defines.mouse_button_type.right then + local zoomMax = 1.0125 + local zoomMin = 0.025 + local zoomDelta = 0.5 + + if e.shift then + e.element.zoom = e.element.zoom * (1 + zoomDelta) + if e.element.zoom > zoomMax then + e.element.zoom = zoomMin + end + else + e.element.zoom = e.element.zoom * (1 - zoomDelta) + if e.element.zoom < zoomMin then + e.element.zoom = zoomMax + end + end + end + end, + + OnHeliPadBuilt = function(self, heliPad) + if heliPad.baseEnt.force == self.player.force then + table.insert(self.guiElems.cams, + { + cam = self:buildCam(self.guiElems.camTable, self.curCamID, heliPad.baseEnt.position, self:getDefaultZoom()), + ID = self.curCamID, + heliPad = heliPad, + }) + self.curCamID = self.curCamID + 1 + self:setNothingAvailable(false) + end + end, + + OnHeliPadRemoved = function(self, heliPad) + local i = searchIndexInTable(self.guiElems.cams, heliPad, "heliPad") + if i then + self.guiElems.cams[i].cam.destroy() + table.remove(self.guiElems.cams, i) + + if #self.guiElems.cams == 0 then + self:setNothingAvailable(true) + end + end + end, + + OnPlayerChangedForce = function(self, player) + if player == self.player then + self.guiElems.root.destroy() + self.guiElems = {parent = self.guiElems.parent} + self:buildGui() + end + end, + + getDefaultZoom = function(self) + return self.player.mod_settings["heli-gui-heliPadSelection-defaultZoom"].value + end, + + buildCam = function(self, parent, ID, position, zoom) + local padding = 8 + local size = 210 + local camSize = size - padding + + local cam = parent.add + { + type = "camera", + name = self.prefix .. "cam_" .. tostring(ID), + position = position, + zoom = zoom, + tooltip = {"heli-gui-cam-tt"}, + } + cam.style.top_padding = padding + cam.style.left_padding = padding + + cam.style.minimal_width = camSize + cam.style.minimal_height = camSize + + --[[ + if hasController then + local label = cam.add + { + type = "label", + caption = " CONTROLLED", + } + + label.style.font = "pixelated" + label.style.font_color = {r = 1, g = 0, b = 0} + end + ]] + + return cam + end, + + setNothingAvailable = function(self, val) + local els = self.guiElems + + if val and not els.nothingAvailable then + els.nothingAvailable = els.camTable.add + { + type = "label", + name = self.prefix .. "nothingAvailable", + caption = {"heli-gui-padSelection-noPadsAvailable"}, + } + els.nothingAvailable.style.font = "default-bold" + els.nothingAvailable.style.font_color = {r = 1, g = 0, b = 0} + + elseif not val and els.nothingAvailable then + els.nothingAvailable.destroy() + els.nothingAvailable = nil + end + end, + + buildGui = function(self) + local els = self.guiElems + + els.root = els.parent.add + { + type = "frame", + name = self.prefix .. "rootFrame", + caption = {"heli-gui-padSelection-frame-caption"}, + style = "frame", + direction = "vertical", + tooltip = {"heli-gui-frame-tt"}, + } + + els.root.style.maximal_width = 1000 + els.root.style.maximal_height = 700 + + + els.scrollPane = els.root.add + { + type = "scroll-pane", + name = self.prefix .. "scroller", + } + + els.scrollPane.style.maximal_width = 1000 + els.scrollPane.style.maximal_height = 600 + + els.camTable = els.scrollPane.add + { + type = "table", + name = self.prefix .. "camTable", + column_count = 4, + } + els.camTable.style.horizontal_spacing = 10 + els.camTable.style.vertical_spacing = 10 + + self.curCamID = 0 + els.cams = {} + + local hasCams = false + if global.heliPads then + for k, curPad in pairs(global.heliPads) do + if curPad.baseEnt.force == self.player.force then + hasCams = true + table.insert(els.cams, + { + cam = self:buildCam(els.camTable, self.curCamID, curPad.baseEnt.position, self:getDefaultZoom()), + ID = self.curCamID, + heliPad = curPad, + }) + + self.curCamID = self.curCamID + 1 + end + end + end + + if not hasCams then + self:setNothingAvailable(true) + end + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/gui/heliSelectionGui.lua b/HelicopterRevival/logic/gui/heliSelectionGui.lua new file mode 100644 index 00000000..f8efcaf8 --- /dev/null +++ b/HelicopterRevival/logic/gui/heliSelectionGui.lua @@ -0,0 +1,418 @@ +mod_gui = require("mod-gui") + +heliSelectionGui = +{ + prefix = "heli_heliSelectionGui_", + + new = function(mgr, p) + obj = + { + valid = true, + manager = mgr, + player = p, + + guiElems = + { + parent = mod_gui.get_frame_flow(p), + }, + prefix = "heli_heliSelectionGui_", + + curCamID = 0, + } + + setmetatable(obj, {__index = heliSelectionGui}) + + obj:buildGui() + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.guiElems.root and self.guiElems.root.valid then + self.guiElems.root.destroy() + end + end, + + setVisible = function(self, val) + self.guiElems.root.visible = val + end, + + OnTick = function(self) + self:updateCamPositions() + end, + + OnPlayerChangedForce = function(self, player) + if player == self.player then + local vis = self.visible + self.guiElems.root.destroy() + self.guiElems = {parent = self.guiElems.parent} + self.selectedCam = nil + self:buildGui() + self:setVisible(vis) + end + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + if name:match("^" .. self.prefix .. "cam_%d+$") then + self:OnCamClicked(e) + + elseif name == self.prefix .. "rootFrame" and e.button == defines.mouse_button_type.right then + self.manager:OnChildEvent(self, "cancel") + + elseif self.selectedCam then + if name == self.prefix .. "btn_toPlayer" then + if e.button == defines.mouse_button_type.left then + if e.shift then + self.manager:OnChildEvent(self, "selectedPosition", self.player.position) + else + self.manager:OnChildEvent(self, "selectedPlayer", self.player) + end + else + self.manager:OnChildEvent(self, "showTargetSelectionGui", playerSelectionGui) + end + + elseif name == self.prefix .. "btn_toMap" then + self.manager:OnChildEvent(self, "showTargetSelectionGui", markerSelectionGui) + + elseif name == self.prefix .. "btn_toPad" then + self.manager:OnChildEvent(self, "showTargetSelectionGui", heliPadSelectionGui) + + elseif name == self.prefix .. "btn_stop" then + if self.selectedCam.heliController then + self.selectedCam.heliController:stopAndDestroy() + end + end + end + end, + + OnHeliBuilt = function(self, heli) + if heli.baseEnt.force == self.player.force then + local flow, cam = self:buildCam(self.guiElems.camTable, self.curCamID, heli.baseEnt.position, 0.3, false, false) + + table.insert(self.guiElems.cams, + { + flow = flow, + cam = cam, + heli = heli, + ID = self.curCamID, + }) + + self.curCamID = self.curCamID + 1 + + self:setNothingAvailableIfNecessary() + end + end, + + OnHeliRemoved = function(self, heli) + for i, curCam in ipairs(self.guiElems.cams) do + if curCam.heli == heli then + if curCam == self.selectedCam then + self.selectedCam = nil + self:setControlBtnsStatus(false, false) + self.manager:OnChildEvent(self, "OnSelectedHeliIsInvalid") + end + + curCam.flow.destroy() + table.remove(self.guiElems.cams, i) + self:setNothingAvailableIfNecessary() + break + end + end + end, + + OnHeliControllerCreated = function(self, controller) + local cam = searchInTable(self.guiElems.cams, controller.heli, "heli") + if cam then + cam.heliController = controller + self:setCamStatus(cam, cam == self.selectedCam, true) + end + end, + + OnHeliControllerDestroyed = function(self, controller) + local cam = searchInTable(self.guiElems.cams, controller, "heliController") + if cam then + cam.heliController = nil + self:setCamStatus(cam, cam == self.selectedCam, false) + end + end, + + OnCamClicked = function(self, e) + if e.button == defines.mouse_button_type.left then + local camID = tonumber(e.element.name:match("%d+")) + local cam = searchInTable(self.guiElems.cams, camID, "ID") + self:setCamStatus(cam, true, cam.heliController) + + Entity.set_data(self.player, cam.heli, "heliSelectionGui_lastSelectedHeli") + + elseif e.button == defines.mouse_button_type.right then + local zoomMax = 1.26 + local zoomMin = 0.2 + local zoomDelta = 0.333 + + if e.shift then + e.element.zoom = e.element.zoom * (1 + zoomDelta) + if e.element.zoom > zoomMax then + e.element.zoom = zoomMin + end + else + e.element.zoom = e.element.zoom * (1 - zoomDelta) + if e.element.zoom < zoomMin then + e.element.zoom = zoomMax + end + end + end + end, + + getDefaultZoom = function(self) + return self.player.mod_settings["heli-gui-heliSelection-defaultZoom"].value + end, + + getCamIndexById = function(self, ID) + for i, curCam in ipairs(self.guiElems.cams) do + if curCam.ID == ID then return i end + end + end, + + updateCamPositions = function(self) + for k, curCam in pairs(self.guiElems.cams) do + if curCam.heli.valid then + curCam.cam.position = curCam.heli.baseEnt.position + end + end + end, + + setCamStatus = function(self, cam, isSelected, hasController) + local flow = cam.flow + + local pos = cam.cam.position + local zoom = cam.cam.zoom + + flow.clear() + + cam.cam = self:buildCamInner(flow, cam.ID, pos, zoom, isSelected, cam.heliController) + + if isSelected then + if self.selectedCam and self.selectedCam ~= cam then + self:setCamStatus(self.selectedCam, false, hasController) + end + self.selectedCam = cam + self:setControlBtnsStatus(isSelected, hasController) + else + if self.selectedCam and self.selectedCam == cam then + self.selectedCam = nil + end + end + end, + + setControlBtnsStatus = function(self, heliSelected, hasController) + self.guiElems.btnToPlayer.enabled = heliSelected + self.guiElems.btnToMap.enabled = heliSelected + self.guiElems.btnToPad.enabled = heliSelected + self.guiElems.btnStop.enabled = heliSelected and hasController + end, + + setNothingAvailableIfNecessary = function(self) + local els = self.guiElems + local nec = #els.cams == 0 + + if nec and not els.nothingAvailable then + els.nothingAvailable = els.camTable.add + { + type = "label", + name = self.prefix .. "nothingAvailable", + caption = {"heli-gui-heliSelection-noHelisAvailable"}, + } + els.nothingAvailable.style.font = "default-bold" + els.nothingAvailable.style.font_color = {r = 1, g = 0, b = 0} + + elseif not nec and els.nothingAvailable then + els.nothingAvailable.destroy() + els.nothingAvailable = nil + end + end, + + buildCamInner = function(self, parent, ID, position, zoom, isSelected, hasController) + local camParent = parent + local padding = 8 + local size = 210 + local camSize = size - padding + + if isSelected then + camParent = camParent.add + { + type = "sprite", + name = self.prefix .. "camBox_selected_" .. tostring(ID), + sprite = "heli_gui_selected", + } + camParent.style.minimal_width = size + camParent.style.minimal_height = size + camParent.style.maximal_width = size + camParent.style.maximal_height = size + end + + local cam = camParent.add + { + type = "camera", + name = self.prefix .. "cam_" .. tostring(ID), + position = position, + zoom = zoom, + tooltip = {"heli-gui-cam-tt"}, + } + cam.style.top_padding = padding + cam.style.left_padding = padding + + cam.style.minimal_width = camSize + cam.style.minimal_height = camSize + + if hasController then + local label = cam.add + { + type = "label", + caption = {"heli-gui-heliSelection-controlled"}, + } + + label.style.font = "pixelated" + label.style.font_color = {r = 1, g = 0, b = 0} + end + + return cam + end, + + buildCam = function(self, parent, ID, position, zoom, isSelected, hasController) + local flow = parent.add + { + type = "flow", + name = self.prefix .. "camFlow_" .. tostring(ID), + } + + flow.style.minimal_width = 214 + flow.style.minimal_height = 214 + flow.style.maximal_width = 214 + flow.style.maximal_height = 214 + + return flow, self:buildCamInner(flow, ID, position, zoom, isSelected, hasController) + end, + + buildGui = function(self, selectedIndex) + local p = self.player + local els = self.guiElems + + els.root = els.parent.add + { + type = "frame", + name = self.prefix .. "rootFrame", + caption = {"heli-gui-heliSelection-frame-caption"}, + style = "frame", + direction = "vertical", + tooltip = {"heli-gui-frame-tt"}, + } + + els.root.style.maximal_width = 1000 + els.root.style.maximal_height = 700 + + els.buttonFlow = els.root.add + { + type = "flow", + name = self.prefix .. "btnFlow", + } + els.buttonFlow.style.left_padding = 7 + + els.btnToPlayer = els.buttonFlow.add + { + type = "sprite-button", + name = self.prefix .. "btn_toPlayer", + sprite = "heli_to_player", + style = mod_gui.button_style, + tooltip = {"heli-gui-heliSelection-to-player-btn-tt"}, + } + + els.btnToMap = els.buttonFlow.add + { + type = "sprite-button", + name = self.prefix .. "btn_toMap", + sprite = "heli_to_map", + style = mod_gui.button_style, + } + + els.btnToPad = els.buttonFlow.add + { + type = "sprite-button", + name = self.prefix .. "btn_toPad", + sprite = "heli_to_pad", + style = mod_gui.button_style, + } + + els.btnStop = els.buttonFlow.add + { + type = "sprite-button", + name = self.prefix .. "btn_stop", + sprite = "heli_stop", + style = mod_gui.button_style, + } + self:setControlBtnsStatus(false, false) + + els.scrollPane = els.root.add + { + type = "scroll-pane", + name = self.prefix .. "scroller", + } + + els.scrollPane.style.maximal_width = 1000 + els.scrollPane.style.maximal_height = 600 + + els.camTable = els.scrollPane.add + { + type = "table", + name = self.prefix .. "camTable", + column_count = 4, + } + els.camTable.style.horizontal_spacing = 10 + els.camTable.style.vertical_spacing = 10 + + els.cams ={} + self.curCamID = 0 + + if global.helis then + local lastSelected = Entity.get_data(self.player, "heliSelectionGui_lastSelectedHeli") + local selectedSomething = false + + for k, curHeli in pairs(global.helis) do + local curDriver = curHeli.baseEnt.get_driver() + + if curHeli.baseEnt.force == self.player.force and + (curDriver == nil or curHeli.hasRemoteController or + (curDriver.player and curDriver.player.valid and curDriver.player.name == self.player.name)) then + + local controller = searchInTable(global.heliControllers, curHeli, "heli") + local flow, cam = self:buildCam(els.camTable, self.curCamID, curHeli.baseEnt.position, self:getDefaultZoom(), selected, curHeli.hasRemoteController) + + table.insert(els.cams, + { + flow = flow, + cam = cam, + heli = curHeli, + heliController = controller, + ID = self.curCamID, + }) + + self.curCamID = self.curCamID + 1 + + if curHeli == lastSelected then + selectedSomething = true + self:setCamStatus(els.cams[self.curCamID], true, heliController) + end + end + end + + if not selectedSomething and #els.cams > 0 then + self:setCamStatus(els.cams[1], true, els.cams[1].heliController) + end + end + + self:setNothingAvailableIfNecessary() + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/gui/markerSelectionGui.lua b/HelicopterRevival/logic/gui/markerSelectionGui.lua new file mode 100644 index 00000000..9b0aaba8 --- /dev/null +++ b/HelicopterRevival/logic/gui/markerSelectionGui.lua @@ -0,0 +1,357 @@ +mod_gui = require("mod-gui") + +markerSelectionGui = +{ + prefix = "heli_markerSelectionGui_", + refreshCooldown = 20, + + new = function(mgr, p) + obj = + { + valid = true, + manager = mgr, + player = p, + + guiElems = + { + parent = mod_gui.get_frame_flow(p), + }, + + curRefreshCooldown = markerSelectionGui.refreshCooldown, + prefix = "heli_markerSelectionGui_", + } + + setmetatable(obj, {__index = markerSelectionGui}) + + obj:buildGui() + + if p.mod_settings["heli-auto-focus-searchfields"].value then + obj.guiElems.searchField.focus() + end + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.guiElems.root and self.guiElems.root.valid then + self.guiElems.root.destroy() + end + end, + + OnTick = function(self) + self.curRefreshCooldown = self.curRefreshCooldown - 1 + + if self.curRefreshCooldown == 0 then + self.curRefreshCooldown = self.refreshCooldown + self:refreshBtnList() + end + end, + + OnPlayerChangedForce = function(self, player) + if player == self.player then + self.guiElems.root.destroy() + self.guiElems = {parent = self.guiElems.parent} + self:buildGui() + end + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + if name:match("^" .. self.prefix .. "btn_%d+$") then + local ID = tonumber(e.element.name:match("%d+")) + + for k, curBtn in pairs(self.guiElems.btns) do + if curBtn.tag.tag_number == ID then + if curBtn.tag.valid then + self.manager:OnChildEvent(self, "selectedPosition", curBtn.tag.position) + end + break + end + end + + elseif name == self.prefix .. "rootFrame" and e.button == defines.mouse_button_type.right then + self.manager:OnChildEvent(self, "cancel") + + elseif name == self.prefix .. "searchFieldClearBtn" then + self.guiElems.searchField.text = "" + self:OnGuiTextChanged({element = self.guiElems.searchField}) + end + end, + + OnGuiTextChanged = function(self, e) + local name = e.element.name + local newText = e.element.text + + if name == self.prefix .. "searchField" then + if newText:contains(self.lastSearchFieldText) then + self:filterBtnList(newText) + else + self:buildBtnList() + end + + self.lastSearchFieldText = newText + end + end, + + removeBtnIndex = function(self, index) + self.guiElems.btns[index].btn.destroy() + table.remove(self.guiElems.btns, index) + end, + + filterBtnList = function(self, filterStr) + for i = #self.guiElems.btns, 1, -1 do --iterate backwards so table.remove doesnt mess up the indices + local curBtn = self.guiElems.btns[i] + if not curBtn.text:contains(filterStr) then + self:removeBtnIndex(i) + end + end + self:setNothingAvailableIfNecessary() + end, + + refreshBtnList = function(self) + local allTags = self:getFilteredChartTags() + + local numNewTags = #allTags + local newTags = {} + for k,v in pairs(allTags) do + newTags[v.tag_number] = v + end + + for i = #self.guiElems.btns, 1, -1 do --iterate backwards so table.remove doesnt mess up the indices + local curBtn = self.guiElems.btns[i] + + if not curBtn.tag.valid then + self:removeBtnIndex(i) + + else + if newTags[curBtn.tag.tag_number] then + newTags[curBtn.tag.tag_number] = nil + numNewTags = numNewTags - 1 + end + + if curBtn.text ~= curBtn.tag.text then + curBtn.text = curBtn.tag.text + curBtn.btn.caption = " " .. curBtn.tag.text + end + + if not curBtn.icon and curBtn.tag.icon then + curBtn.icon, curBtn.iconType, curBtn.iconName = self:buildIconFromTag(curBtn.btn, curBtn.tag) + + elseif curBtn.icon and not curBtn.tag.icon then + curBtn.icon.destroy() + curBtn.icon, curBtn.iconType, curBtn.iconName = nil, nil, nil + + elseif curBtn.icon and (curBtn.iconType ~= curBtn.tag.icon.type or curBtn.iconName ~= curBtn.tag.icon.name) then + curBtn.icon.destroy() + curBtn.icon, curBtn.iconType, curBtn.iconName = self:buildIconFromTag(curBtn.btn, curBtn.tag) + end + end + end + + if numNewTags > 0 then + if #allTags > 666 then + for k, curTag in pairs(newTags) do + table.insert(self.guiElems.btns, self:buildBtnFromTag(self.guiElems.table, curTag)) + end + + else + self:buildBtnList(allTags) + end + end + + self:setNothingAvailableIfNecessary() + end, + + setNothingAvailableIfNecessary = function(self) + local els = self.guiElems + local listIsEmpty = #els.btns == 0 + + if listIsEmpty and not els.nothingAvailable then + els.nothingAvailable = els.scroller.add + { + type = "label", + name = self.prefix .. "nothingAvailable", + caption = "NO MAP MARKERS AVAILABLE", + } + els.nothingAvailable.style.font = "default-bold" + els.nothingAvailable.style.font_color = {r = 1, g = 0, b = 0} + + elseif not listIsEmpty and els.nothingAvailable then + els.nothingAvailable.destroy() + els.nothingAvailable = nil + end + end, + + getFilteredChartTags = function(self) + local tagList = self.player.force.find_chart_tags(self.player.surface) + + for i = #tagList, 1, -1 do + if not tagList[i].text:contains(self.guiElems.searchField.text) then + table.remove(tagList, i) + end + end + + return tagList + end, + + buildIconFromTag = function(self, parent, tag) + local sprite + if tag.icon.type == "virtual" then + sprite = "virtual-signal" .. "/" .. tag.icon.name + else + sprite = tag.icon.type .. "/" .. tag.icon.name + end + + local icon = parent.add + { + type = "sprite", + name = self.prefix .. "icon", + sprite = sprite, + } + + return icon, tag.icon.type, tag.icon.name + end, + + buildBtnFromTag = function(self, parent, tag) + local btn = parent.add + { + type = "button", + name = self.prefix .. "btn_" .. tostring(tag.tag_number), + style = "heli-listbox_button", + caption = " " .. tag.text, + } + btn.style.minimal_height = 38 + btn.style.minimal_width = 290 + + local icon, iconType, iconName = nil, nil, nil + if tag.icon then + icon, iconType, iconName = self:buildIconFromTag(btn, tag) + end + + return { + btn = btn, + icon = icon, + + tag = tag, + + text = tag.text, + iconType = iconType, + iconName = iconName, + } + end, + + buildBtnList = function(self, _tagList) + local tagList = _tagList or self:getFilteredChartTags() + + table.sort(tagList, self.tagCompareCB) + + self.guiElems.btns = {} + self.guiElems.table.clear() + for k, curTag in pairs(tagList) do + table.insert(self.guiElems.btns, self:buildBtnFromTag(self.guiElems.table, curTag)) + end + + self:setNothingAvailableIfNecessary() + end, + + tagCompareCB = function(a, b) + local aText = a.text ~= "" + local aIcon = a.icon + + local bText = b.text ~= "" + local bIcon = b.icon + + local sameText = a.text == b.text + + if aText and bText then --both have text + if sameText then + return aIcon and not bIcon + end + + return a.text < b.text + + elseif aText then --only a has text + return true + + elseif bText then --only b has text + return false + + --neither has text + + elseif aIcon and not bIcon then --only a has icon + return true + end + + return false + end, + + buildGui = function(self) + self.guiElems.root = self.guiElems.parent.add + { + type = "frame", + name = self.prefix .. "rootFrame", + caption = {"heli-gui-markerSelection-frame-caption"}, + direction = "vertical", + style = "frame", + tooltip = {"heli-gui-frame-tt"}, + } + + self.guiElems.searchFieldFlow = self.guiElems.root.add + { + type = "flow", + name = self.prefix .. "searchFieldFlow", + direction = "horizontal", + + } + + self.guiElems.searchField = self.guiElems.searchFieldFlow.add + { + type = "textfield", + name = self.prefix .. "searchField", + style = "search_textfield_with_fixed_width", + } + self.guiElems.searchField.style.left_padding = 22 + self.guiElems.searchField.style.minimal_height = 26 + self.guiElems.searchField.style.maximal_height = 32 + + self.lastSearchFieldText = "" + + self.guiElems.searchField.add{ + type = "sprite", + name = self.prefix .. "searchIcon", + sprite = "heli_search_icon", + --style = "heli_search_icon_style", + } + + + self.guiElems.searchFieldClearBtn = self.guiElems.searchFieldFlow.add + { + type = "button", + name = self.prefix .. "searchFieldClearBtn", + style = "heli-clear_text_button", + } + + + self.guiElems.scroller = self.guiElems.root.add + { + type = "scroll-pane", + name = self.prefix .. "scroller", + } + + self.guiElems.scroller.style.maximal_width = 1000 + self.guiElems.scroller.style.maximal_height = 600 + + self.guiElems.table = self.guiElems.scroller.add + { + type = "flow", + name = self.prefix .. "flow", + style = "achievements_vertical_flow", + direction = "vertical", + } + + self:buildBtnList() + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/gui/playerSelectionGui.lua b/HelicopterRevival/logic/gui/playerSelectionGui.lua new file mode 100644 index 00000000..1dcb56a5 --- /dev/null +++ b/HelicopterRevival/logic/gui/playerSelectionGui.lua @@ -0,0 +1,136 @@ +mod_gui = require("mod-gui") + +playerSelectionGui = +{ + prefix = "heli_playerSelectionGui_", + + new = function(mgr, p) + obj = + { + valid = true, + manager = mgr, + player = p, + + guiElems = + { + parent = mod_gui.get_frame_flow(p), + }, + prefix = "heli_playerSelectionGui_", + } + + setmetatable(obj, {__index = playerSelectionGui}) + obj:buildGui() + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.guiElems.root and self.guiElems.root.valid then + self.guiElems.root.destroy() + end + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + if name:match("^" .. self.prefix .. "btn_.+$") then + if e.shift then + self.manager:OnChildEvent(self, "selectedPosition", searchInTable(self.guiElems.btns, e.element, "btn").player.position) + else + self.manager:OnChildEvent(self, "selectedPlayer", searchInTable(self.guiElems.btns, e.element, "btn").player) + end + + elseif name == self.prefix .. "rootFrame" and e.button == defines.mouse_button_type.right then + self.manager:OnChildEvent(self, "cancel") + end + end, + + OnPlayerDied = function(self, player) + self:removeBtnByPlayer(player) + end, + + OnPlayerLeftGame = function(self, player) + self:removeBtnByPlayer(player) + end, + + OnPlayerRespawned = function(self, player) + if player.force == self.player.force then + table.insert(self.guiElems.btns, self:buildBtnFromPlayer(self.guiElems.flow, player)) + end + end, + + OnPlayerChangedForce = function(self, player) + if player == self.player then + self.guiElems.root.destroy() + self.guiElems = {parent = self.guiElems.parent} + self:buildGui() + else + self:removeBtnByPlayer(player) + end + end, + + removeBtnByPlayer = function(self, player) + local i = searchIndexInTable(self.guiElems.btns, player, "player") + if i then + self.guiElems.btns[i].btn.destroy() + table.remove(self.guiElems.btns, i) + end + end, + + buildBtnFromPlayer = function(self, parent, player) + local btn = parent.add + { + type = "button", + name = self.prefix .. "btn_" .. player.name, + style = "heli-listbox_button", + caption = player.name, + tooltip = {"heli-gui-playerSelection-listbox-btn-tt"}, + } + btn.style.minimal_width = 290 + + return { + btn = btn, + player = player, + } + end, + + buildGui = function(self) + local els = self.guiElems + + els.root = els.parent.add + { + type = "frame", + name = self.prefix .. "rootFrame", + caption = {"heli-gui-playerSelection-frame-caption"}, + style = "frame", + tooltip = {"heli-gui-frame-tt"}, + } + + els.scroller = els.root.add + { + type = "scroll-pane", + name = self.prefix .. "scroller", + } + + els.scroller.style.maximal_width = 1000 + els.scroller.style.maximal_height = 600 + + els.flow = els.scroller.add + { + type = "flow", + name = self.prefix .. "flow", + style = "achievements_vertical_flow", + direction = "vertical", + } + + els.btns = {} + for i, curPlayer in pairs(game.connected_players) do + if curPlayer.controller_type == defines.controllers.character and curPlayer.character then + table.insert(els.btns, self:buildBtnFromPlayer(els.flow, curPlayer)) + end + end + + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/gui/remoteGui.lua b/HelicopterRevival/logic/gui/remoteGui.lua new file mode 100644 index 00000000..2812fa28 --- /dev/null +++ b/HelicopterRevival/logic/gui/remoteGui.lua @@ -0,0 +1,178 @@ +require("logic.gui.heliSelectionGui") +require("logic.gui.playerSelectionGui") +require("logic.gui.markerSelectionGui") +require("logic.gui.heliPadSelectionGui") + +function setRemoteBtn(p, show) + local flow = mod_gui.get_button_flow(p) + + if show and not flow.heli_remote_btn then + flow.add + { + type = "sprite-button", + name = "heli_remote_btn", + sprite = "item/heli-remote-equipment", + style = mod_gui.button_style, + tooltip = {"heli-gui-remote-btn-tt"}, + } + + elseif (not show) and flow.heli_remote_btn and flow.heli_remote_btn.valid then + flow.heli_remote_btn.destroy() + + local i = searchIndexInTable(global.remoteGuis, p, "player") + if i then + global.remoteGuis[i]:destroy() + table.remove(global.remoteGuis, i) + end + end +end + +function toggleRemoteGui(player) + local i = searchIndexInTable(global.remoteGuis, player, "player") + + if not i then + insertInGlobal("remoteGuis", remoteGui.new(player)) + else + global.remoteGuis[i]:destroy() + table.remove(global.remoteGuis, i) + end +end + +function OnHeliControllerCreated(controller) + callInGlobal("remoteGuis", "OnHeliControllerCreated", controller) +end + +function OnHeliControllerDestroyed(controller) + callInGlobal("remoteGuis", "OnHeliControllerDestroyed", controller) +end + + +remoteGui = +{ + new = function(p) + local obj = { + valid = true, + + player = p, + + guis = {} + } + + setmetatable(obj, {__index = remoteGui}) + + obj.guis.heliSelection = heliSelectionGui.new(obj, p) + return obj + end, + + destroy = function(self) + self.valid = false + for k, curGui in pairs(self.guis) do + if curGui.valid then + curGui:destroy() + end + end + end, + + hasMyPrefix = function(str) + return string.startswith(str, heliSelectionGui.prefix) or + string.startswith(str, playerSelectionGui.prefix) or + string.startswith(str, markerSelectionGui.prefix) or + string.startswith(str, heliPadSelectionGui.prefix) + end, + + OnTick = function(self) + if not self.player.valid then + self:destroy() + else + for k, curGui in pairs(self.guis) do + if curGui.OnTick then + curGui:OnTick() + end + end + end + end, + + OnGuiClick = function(self, e) + local name = e.element.name + + for k, curGui in pairs(self.guis) do + if name:match("^" .. curGui.prefix .. ".+") and curGui.OnGuiClick then + curGui:OnGuiClick(e) + end + end + end, + + OnGuiTextChanged = function(self, e) + local name = e.element.name + + for k, curGui in pairs(self.guis) do + if name:match("^" .. curGui.prefix .. ".+") and curGui.OnGuiTextChanged then + curGui:OnGuiTextChanged(e) + end + end + end, + + OnChildEvent = function(self, child, evtName, ...) + if evtName == "showTargetSelectionGui" then + local prot = ... + self.guis.heliSelection:setVisible(false) + self.guis.targetSelection = prot.new(self, self.player) + + elseif evtName == "selectedPosition" then + local pos = ... + local heli = self.guis.heliSelection.selectedCam.heli + + assignHeliController(self.player, heli, pos, false) + + if child ~= self.guis.heliSelection then + child:destroy() + self.guis.targetSelection = nil + end + self.guis.heliSelection:setVisible(true) + + elseif evtName == "selectedPlayer" then + local p = ... + local heli = self.guis.heliSelection.selectedCam.heli + + assignHeliController(self.player, heli, p, true) + + if child ~= self.guis.heliSelection then + child:destroy() + self.guis.targetSelection = nil + end + self.guis.heliSelection:setVisible(true) + + elseif evtName == "OnSelectedHeliIsInvalid" then + if self.guis.targetSelection then + self.guis.targetSelection:destroy() + self.guis.heliSelection:setVisible(true) + end + + elseif evtName == "cancel" then + if child == self.guis.heliSelection then + self:destroy() + removeInGlobal("remoteGuis", self) + else + child:destroy() + self.guis.targetSelection = nil + self.guis.heliSelection:setVisible(true) + end + end + end, + + OnHeliRemoved = function(self, heli) + for _,gui in pairs(self.guis) do + if gui.OnHeliRemoved then + gui:OnHeliRemoved(heli) + end + end + end, + + OnHeliBuilt = function(self, heli) + for _,gui in pairs(self.guis) do + if gui.OnHeliBuilt then + gui:OnHeliBuilt(heli) + end + end + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/heliAttack.lua b/HelicopterRevival/logic/heliAttack.lua new file mode 100644 index 00000000..68a42612 --- /dev/null +++ b/HelicopterRevival/logic/heliAttack.lua @@ -0,0 +1,49 @@ +heliAttack = +{ + type = "heliAttack", + bodyOffset = 5, + rotorOffset = 5.1, + + rotorRPFacceleration = 0.0002, + rotorMaxRPF = 240/60/60, --revolutions per frame + + engineReduction = 7.5, + + fuelSlots = 5, + + new = function(placementEnt) + local baseEnt = placementEnt.surface.create_entity{name = "heli-entity-_-", force = placementEnt.force, position = placementEnt.position} + + local childs = + { + bodyEnt = placementEnt.surface.create_entity{name = "heli-body-entity-_-", force = game.forces.neutral, position = {x = baseEnt.position.x, y = baseEnt.position.y + heliAttack.bodyOffset}}, + rotorEnt = placementEnt.surface.create_entity{name = "rotor-entity-_-", force = game.forces.neutral, position = {x = baseEnt.position.x, y = baseEnt.position.y + heliAttack.rotorOffset}}, + + bodyEntShadow = placementEnt.surface.create_entity{name = "heli-shadow-entity-_-", force = game.forces.neutral, position = baseEnt.position}, + rotorEntShadow = placementEnt.surface.create_entity{name = "rotor-shadow-entity-_-", force = game.forces.neutral, position = baseEnt.position}, + + burnerEnt = placementEnt.surface.create_entity{name = "heli-burner-entity-_-", force = game.forces.neutral, position = {x = baseEnt.position.x, y = baseEnt.position.y + 1.3}}, + + floodlightEnt = placementEnt.surface.create_entity{name = "heli-floodlight-entity-_-", force = game.forces.neutral, position = baseEnt.position}, + } + + return heliBase.new(placementEnt, baseEnt, childs, {__index = heliAttack}) + end, +} + +setmetatable(heliAttack, {__index = heliBase}) + +heliEntityNames = heliEntityNames .. concatStrTable({ + "heli-entity-_-", + "heli-body-entity-_-", + "heli-landed-collision-end-entity-_-", + "heli-landed-collision-side-entity-_-", + "heli-shadow-entity-_-", + "heli-flying-collision-entity-_-", + "heli-burner-entity-_-", + "heli-floodlight-entity-_-", + "rotor-entity-_-", + "rotor-shadow-entity-_-", +}, ",") + +heliBaseEntityNames = heliBaseEntityNames .. "heli-entity-_-" .. "," \ No newline at end of file diff --git a/HelicopterRevival/logic/heliBase.lua b/HelicopterRevival/logic/heliBase.lua new file mode 100644 index 00000000..d947e79d --- /dev/null +++ b/HelicopterRevival/logic/heliBase.lua @@ -0,0 +1,1116 @@ +require("logic.basicAnimator") +require("logic.basicState") +require("logic.emptyBoxCollider") + +function getHeliFromBaseEntity(ent) + for k,v in pairs(global.helis) do + if v.baseEnt == ent then + return v + end + end + + return nil +end + +function findNearestAvailableHeli(pos, force, requestingPlayer) + local nearestHeli = nil + local nearestDist = nil + + if global.helis then + for k, curHeli in pairs(global.helis) do + if curHeli.baseEnt.valid and + curHeli.baseEnt.force == force and + (not curHeli.baseEnt.get_driver() or (curHeli.hasRemoteController and curHeli.remoteController.driverIsBot)) then + + if not requestingPlayer or (not curHeli.remoteController or curHeli.remoteController.owner == requestingPlayer) then + local curDist = getDistance(pos, curHeli.baseEnt.position) + + if (not nearestDist) or (nearestDist and curDist < nearestDist) then + nearestDist = curDist + nearestHeli = curHeli + end + end + end + end + end + + return nearestHeli, nearestDist +end + +local frameFixes = { + 0, --1 + 0.015625, --2 + 0.046875, --3 + 0.0625, --4 + 0.078125, --5 + 0.109375, --6 + 0.125, --7 + 0.140625, --8 + 0.15625, --9 + 0.171875, --10 + 0.1796875, --11 + 0.1875, --12 + 0.203125, --13 + 0.21875, --14 + 0.2265625, --15 + 0.234375, --16 + 0.25, --17 + 0.265625, --18 + 0.2734375, --19 + 0.28125, --20 + 0.296875, --21 + 0.3125, --22 + 0.3203125, --23 + 0.328125, --24 + 0.34375, --25 + 0.359375, --26 + 0.375, --27 + 0.390625, --28 + 0.40625, --29 + 0.4375, --30 + 0.453125, --31 + 0.46875, --32 + 0.5, --33 + 0.515625, --34 + 0.546875, --35 + 0.5625, --36 + 0.578125, --37 + 0.609375, --38 + 0.625, --39 + 0.640625, --40 + 0.65625, --41 + 0.671875, --42 + 0.6796875, --43 + 0.6875, --44 + 0.703125, --45 + 0.71875, --46 + 0.7265625, --47 + 0.734375, --48 + 0.75, --49 + 0.765625, --50 + 0.7734375, --51 + 0.78125, --52 + 0.796875, --53 + 0.8125, --54 + 0.8203125, --55 + 0.828125, --56 + 0.84375, --57 + 0.859375, --58 + 0.875, --59 + 0.890625, --60 + 0.90625, --61 + 0.9375, --62 + 0.953125, --63 + 0.984375, --64 +} + +--local modVersion = versionStrToInt(game.active_mods.HelicopterRevival) + +maxCollisionHeight = 2 + +local maxBobbing = 0.05 +local bobbingPeriod = 8*60 + +local colliderMaxHealth = 999999 + +local IsEntityBurnerOutOfFuel = function(ent) + return ent.burner.remaining_burning_fuel <= 0 and ent.burner.inventory.is_empty() +end + +local transferGridEquipment = function(srcEnt, destEnt) + if srcEnt.grid and destEnt.grid then --assume they have the same size and destEnt.grid is empty. + for i, equip in ipairs(srcEnt.grid.equipment) do + local newEquip = destEnt.grid.put{name = equip.name, position = equip.position} + + if equip.type == "energy-shield-equipment" then newEquip.shield = equip.shield end + newEquip.energy = equip.energy + end + srcEnt.grid.clear() + end +end + +heliEntityNames = "" +heliBaseEntityNames = "" + +stateFuncs = { + landed = { + init = function(heli) + heli.baseEnt.effectivity_modifier = 0 + heli.baseEnt.friction_modifier = 50 + + heli.lockedBaseOrientation = heli.baseEnt.orientation + + heli.landedColliderCreationDelay = 2 + + heli:setFloodlightEntities(false) + + for k, curGG in pairs(heli.gaugeGuis) do + curGG:setPointerNoise("gauge_fs", "speed", false) + curGG:setPointerNoise("gauge_hr", "height", false) + curGG:setPointerNoise("gauge_hr", "rpm", false) + end + + heli:setFuelGaugeTarget(0, true) + end, + + OnTick = function(heli) + if heli.landedColliderCreationDelay > 0 then + if heli.landedColliderCreationDelay == 1 then + heli:setCollider("landed") + heli:updateEntityRotations() + end + + heli.landedColliderCreationDelay = heli.landedColliderCreationDelay - 1 + end + + if heli.baseEnt.orientation ~= heli.lockedBaseOrientation then + heli.baseEnt.orientation = heli.lockedBaseOrientation + end + + local speed = heli.baseEnt.speed + if speed > 0.25 then --54 km/h + local players = getCarPlayers(heli.baseEnt) + + heli.baseEnt.damage(speed * 210, game.forces.neutral) + + if not heli.baseEnt.valid then --destroy event might already be executed + heli:dealCrashDamage(players, speed) + + return false + end + end + end, + + OnUp = function(heli) + heli:changeState(heli.engineStarting) + end, + }, + engineStarting = { + init = function(heli) + heli.lockedBaseOrientation = heli.baseEnt.orientation + + heli:setRotorTargetRPF(heli.rotorMaxRPF) + + if not (heli.burnerDriver and heli.burnerDriver.valid) then + heli.burnerDriver = heli.surface.create_entity{name="character", force = game.forces.neutral, position = heli.baseEnt.position} + heli.childs.burnerEnt.set_driver(heli.burnerDriver) + end + + if heli.floodlightEnabled then + heli:setFloodlightEntities(true) + end + + for k, curGG in pairs(heli.gaugeGuis) do + curGG:setPointerNoise("gauge_fs", "speed", true, 5) + curGG:setPointerNoise("gauge_hr", "height", true, 0.5, 0.2, 12, 18) + curGG:setPointerNoise("gauge_hr", "rpm", true, 50) + end + + heli.lastFuelGaugeTargetVal = 1 + end, + + OnTick = function(heli) + if heli.baseEnt.orientation ~= heli.lockedBaseOrientation then + heli.baseEnt.orientation = heli.lockedBaseOrientation + end + + heli:handleFuelConsumption() + heli:landIfEmpty() + + if heli.rotorRPF == heli.rotorMaxRPF then + heli:changeState(heli.ascend) + end + end, + }, + ascend = { + init = function(heli) + heli.baseEnt.effectivity_modifier = 1 + heli.baseEnt.friction_modifier = 1 + + local time = heli:setTargetHeight(heli.maxHeight) + --heli.bobbingAnimator = basicAnimator.new(heli.curBobbing, 0, time*60, "linear") + + heli:setCollider("flying") + end, + + OnTick = function(heli) + heli:updateEntityRotations() + heli:handleFuelConsumption() + heli:landIfEmpty() + heli:handleInserters() + + --if heli.bobbingAnimator and not heli.bobbingAnimator.isDone then + -- heli.curBobbing = heli.bobbingAnimator:nextFrame() + --end + + if heli.height > maxCollisionHeight then + heli:setCollider("none") + end + + if heli.height == heli.maxHeight then + heli:changeState(heli.hovering) + end + end, + + OnMaxHeightChanged = function(heli) + heli:setTargetHeight(heli.maxHeight) + end, + }, + hovering = { + init = function(heli) + --heli.bobbingAnimator = basicAnimator.new(0, maxBobbing, bobbingPeriod, "cyclicSine") + end, + + OnTick = function(heli) + heli:updateEntityRotations() + heli:handleFuelConsumption() + heli:landIfEmpty() + heli:handleInserters() + + --[[ + local isDone + heli.curBobbing, isDone = heli.bobbingAnimator:nextFrame() + + if isDone then + heli.bobbingAnimator:reset() + end + ]] + end, + + OnMaxHeightChanged = function(heli) + heli:setTargetHeight(heli.maxHeight) + end, + }, + descend = { + init = function(heli) + local time = heli:setTargetHeight(0) + --heli.bobbingAnimator = basicAnimator.new(heli.curBobbing, 0, time*60, "linear") + end, + + deinit = function(heli) + heli:reactivateAllInserters() + end, + + OnTick = function(heli) + heli:updateEntityRotations() + heli:handleFuelConsumption() + heli:handleInserters() + + --if heli.bobbingAnimator and not heli.bobbingAnimator.isDone then + -- heli.curBobbing = heli.bobbingAnimator:nextFrame() + --end + + if heli.height <= maxCollisionHeight and not (heli.childs.collisionEnt and heli.childs.collisionEnt.valid) then + heli:setCollider("flying") + end + + if heli.height == 0 then + heli:changeState(heli.engineStopping) + end + end, + + OnUp = function(heli) + print("descend OnUp") + heli:changeState(heli.ascend) + end, + }, + engineStopping = { + init = function(heli) + heli.childs.burnerEnt.set_driver(nil) + + if heli.burnerDriver and heli.burnerDriver.valid then + heli.burnerDriver.destroy() + heli.burnerDriver = nil + end + + heli:setRotorTargetRPF(0) + + heli:changeState(heli.landed) + end, + }, +} + +heliBase = { + ---------- default vals ----------- + valid = true, + + goUp = false, + + startupProgress = 0, + height = 0, + targetHeight = 0, + maxHeight = 5, + curBobbing = 0, + + heightSpeed = 0, + heightAcceleration = 0.001, + + maxHeightUperLimit = 20, + maxHeightLowerLimit = 3, + + rotorOrient = 0, + rotorRPF = 0, + rotorTargetRPF = 0, + + fuelGaugeVal = 0, + fuelGaugeTargetVal = 0, + lastFuelGaugeTargetVal = 0, + fuelGaugeSpeed = 0.005, + + gaugeGuis = {}, + + hasLandedCollider = false, + landedColliderCreationDelay = 1, --frames. workaround for inserters trying to access collider inventory when created at the same time. + + floodlightEnabled = false, + + baseEngineConsumption = 20000, + + inserterScanRadius = 5, + + fullTankFlightTime = 15 * 60 * 60, --in ticks + tankWarningRatio = 3 / 15, --3 min + tankCriticalWarningRatio = 0.5 / 15, --30s + + ------------------------------------------------------------ + + new = function(placementEnt, baseEnt, childEnts, mt) + transferGridEquipment(placementEnt, baseEnt) + baseEnt.health = placementEnt.health + + local obj = { + version = versionStrToInt(game.active_mods.HelicopterRevival), + + lockedBaseOrientation = baseEnt.orientation, + + baseEnt = baseEnt, + childs = childEnts, + + surface = placementEnt.surface, + + deactivatedInserters = {}, + } + + placementEnt.destroy() + + obj.baseEnt.effectivity_modifier = 0 + + for k,v in pairs(obj.childs) do + if game.active_mods["Krastorio2"] then --Krastorio 2 workaround + v.get_inventory(defines.inventory.fuel).insert({name = "fuel", count = 200}) + elseif game.active_mods["SeaBlock"] then --SeaBlock workaround + v.get_inventory(defines.inventory.fuel).insert({name = "cellulose-fiber", count = 200}) + else + v.get_inventory(defines.inventory.fuel).insert({name = "coal", count = 50}) + end + v.destructible = false + end + + setmetatable(obj, mt) + obj:changeState(obj.landed) + + return obj + end, + + destroy = function(self) + self.valid = false + + if self.baseEnt and self.baseEnt.valid then + --self.baseEnt.destroy() + end + + for k,v in pairs(self.childs) do + if v and v.valid then + v.destroy() + end + end + + if self.burnerDriver and self.burnerDriver.valid then + self.burnerDriver.destroy() + end + if self.floodlightDriver and self.floodlightDriver.valid then + self.floodlightDriver.destroy() + end + + self:reactivateAllInserters() + + for k, curGG in pairs(self.gaugeGuis) do + curGG:destroy() + end + end, + + ---------------- events ---------------- + + OnLoad = function(self) + if self.curState then + setmetatable(self.curState, basicState.mt) + end + if self.previousState then + setmetatable(self.previousState, basicState.mt) + end + if self.hasLandedCollider and self.childs.collisionEnt then + setmetatable(self.childs.collisionEnt, emptyBoxCollider.mt) + end + end, + + OnTick = function(self) + if not self.baseEnt.valid or (self.childs.collisionEnt and not self.childs.collisionEnt.valid) then + self:destroy() --Destroy child entities first + if self.baseEnt and self.baseEnt.valid then + self.baseEnt.destroy() --Re-check if the base entity is also valid, and destroy that as well + end + return + end + + self:redirectPassengers() + self:updateRotor() + self:updateHeight() + self:updateFuelGauge() + self:updateEntityPositions() + self.curState.OnTick(self) + + if self.valid then + self:handleColliderDamage() + end + end, + + OnUp = function(self) + self.curState.OnUp(self) + end, + + OnDown = function(self) + self:changeState(self.descend) + end, + + OnIncreaseMaxHeight = function(self) + self.maxHeight = math.min(self.maxHeightUperLimit, self.maxHeight + 1) + self.curState.OnMaxHeightChanged(self) + end, + + OnDecreaseMaxHeight = function(self) + self.maxHeight = math.max(self.maxHeightLowerLimit, self.maxHeight - 1) + self.curState.OnMaxHeightChanged(self) + end, + + OnToggleFloodlight = function(self) + self.floodlightEnabled = not self.floodlightEnabled + + if not self.floodlightEnabled then + self:setFloodlightEntities(false) + + elseif self.height ~= 0 or self.rotorTargetRPF > 0 then + self:setFloodlightEntities(true) + end + end, + + OnPlayerEjected = function(self) + if self.childs.collisionEnt and self.hasLandedCollider then + self.childs.collisionEnt.ejectPlayers() + end + end, + + + ---------------- states ---------------- + + landed = basicState.new({ + name = "landed", + }), + + engineStarting = basicState.new({ + name = "engineStarting", + }), + + ascend = basicState.new({ + name = "ascend", + }), + + hovering = basicState.new({ + name = "hovering", + }), + + descend = basicState.new({ + name = "descend", + }), + + engineStopping = basicState.new({ + name = "engineStopping", + }), + + + ---------------- utility --------------- + + reactivateAllInserters = function(self) + for k, curInserter in pairs(self.deactivatedInserters) do + if curInserter.valid then + curInserter.active = true + end + end + + self.deactivatedInserters = {} + end, + + reactivateSafeInserters = function(self) + for i = #self.deactivatedInserters, 1, -1 do + local curInserter = self.deactivatedInserters[i] + + if not curInserter.valid then + table.remove(self.deactivatedInserters, i) + + elseif getDistance(curInserter.position, self.baseEnt.position) > self.inserterScanRadius then + curInserter.active = true + table.remove(self.deactivatedInserters, i) + end + end + end, + + deactivateNearbyInserters = function(self) + local p = self.baseEnt.position + local area = {{p.x - self.inserterScanRadius, p.y - self.inserterScanRadius}, {p.x + self.inserterScanRadius, p.y + self.inserterScanRadius}} + + local inserters = self.surface.find_entities_filtered{ + type = "inserter", + area = area, + } + + for k, curInserter in pairs(inserters) do + if curInserter.active then + curInserter.active = false + table.insert(self.deactivatedInserters, curInserter) + end + end + end, + + handleInserters = function(self) + if settings.global["heli-deactivate-inserters"].value then + self:deactivateNearbyInserters() + self:reactivateSafeInserters() + + elseif #self.deactivatedInserters > 0 then + self:reactivateAllInserters() + end + end, + + setTargetHeight = function(self, targetHeight) + self.targetHeight = targetHeight + return 60 + end, + + setRotorTargetRPF = function(self, targetRPF) + self.rotorTargetRPF = targetRPF + end, + + setFuelGaugeTarget = function(self, targetFuel, suppressAlert) + self.fuelGaugeTargetVal = targetFuel + + if not suppressAlert then + local alert + if self.fuelGaugeTargetVal <= self.tankCriticalWarningRatio and self.lastFuelGaugeTargetVal > self.tankCriticalWarningRatio then + alert = {name = "signal-heli-fuel-warning-critical", str = {"heli-alert-fuel-warning-critical"}} + + elseif self.fuelGaugeTargetVal <= self.tankWarningRatio and self.lastFuelGaugeTargetVal > self.tankWarningRatio then + alert = {name = "signal-heli-fuel-warning", str = {"heli-alert-fuel-warning"}} + end + + if alert then + local players = getCarPlayers(self.baseEnt) + for k, curPlayer in pairs(players) do + if curPlayer.mod_settings["heli-fuel-alert"].value then + curPlayer.add_custom_alert(self.baseEnt, {type = "virtual", name = alert.name}, alert.str, false) + end + end + end + end + self.lastFuelGaugeTargetVal = self.fuelGaugeTargetVal + end, + + changeHeight = function(self, newHeight) + local delta = newHeight - self.height + local oldY = self.baseEnt.position.y + + self.baseEnt.teleport({x = self.baseEnt.position.x, y = self.baseEnt.position.y - delta}) + + + if newHeight == self.targetHeight then + self.height = self.targetHeight + + else + --cant just apply the delta, the height would not reflect the sum of teleports, + --causing the shadow to move down. + --probably because of precision loss from lua->c++ / double->float + self.height = self.height + oldY - self.baseEnt.position.y + end + end, + + landIfEmpty = function(self) + local driver = self.baseEnt.get_driver() + if not driver or not driver.valid or IsEntityBurnerOutOfFuel(self.baseEnt) then + self:OnDown() + end + end, + + reassignCurState = function(self) + if self.curState then + local s = self[self.curState.name] + + if s and type(s) == "table" and s.name == self.curState.name then + self.curState = s + end + end + end, + + changeState = function(self, newState) + --[[ + for k,v in pairs(heli) do + if v == newState then + printA("change state: " .. k) + break + end + end + ]] + + self.previousState = self.curState + + if self.curState and self.curState.deinit then + self.curState.deinit(self) + end + + self.curState = newState + + if self.curState.init then + self.curState.init(self) + end + end, + + insertIntoCar = function(self, car, player) + if car and car.valid and player and player.valid then + if not car.get_driver() then + car.set_driver(player) + return true + end + + if not car.get_passenger() then + car.set_passenger(player) + return true + end + + return false + end + end, + + redirectPassengers = function(self) + for k, curChild in pairs(self.childs) do + if curChild and curChild.valid then + local curDriver = curChild.get_driver() + local curPassenger = curChild.get_passenger() + + if curDriver and curDriver.valid then + if k == "burnerEnt" and self.burnerDriver then + if curDriver ~= self.burnerDriver then + self:insertIntoCar(self.baseEnt, curDriver) + curChild.set_driver(self.burnerDriver) + end + + elseif k == "floodlightEnt" and self.floodlightDriver then + if curDriver ~= self.floodlightDriver then + self:insertIntoCar(self.baseEnt, curDriver) + curChild.set_driver(self.floodlightDriver) + end + + else + if not self:insertIntoCar(self.baseEnt, curDriver) then + curChild.set_driver(nil) + end + end + end + + if curPassenger and curPassenger.valid then + if not self:insertIntoCar(self.baseEnt, curPassenger) then + curChild.set_passenger(nil) + end + end + end + end + end, + + setCollider = function(self, name) + if self.childs.collisionEnt and self.childs.collisionEnt.valid then + self.childs.collisionEnt.destroy() + self.childs.collisionEnt = nil + self.hasLandedCollider = false + end + + if name == "landed" then + self.childs.collisionEnt = emptyBoxCollider.new({ + surface = self.surface, + position = self.baseEnt.position, + orientation = self.baseEnt.orientation, + force = game.forces.neutral, + boxLengths = + { + ends = 3, + sides = 4.8, + }, + nameEnds = "heli-landed-collision-end-entity-_-", + nameSides = "heli-landed-collision-side-entity-_-", + }) + + self.childs.collisionEnt.ejectPlayers() + self.hasLandedCollider = true + + elseif name == "flying" then + self.childs.collisionEnt = self.surface.create_entity{ + name = "heli-flying-collision-entity-_-", + force = game.forces.neutral, + position = self.baseEnt.position, + } + end + + if self.childs.collisionEnt then + if game.active_mods["Krastorio2"] then --Krastorio 2 workaround + self.childs.collisionEnt.get_inventory(defines.inventory.fuel).insert({name = "fuel", count = 200}) + elseif game.active_mods["SeaBlock"] then --SeaBlock workaround + self.childs.collisionEnt.get_inventory(defines.inventory.fuel).insert({name = "cellulose-fiber", count = 200}) + else + self.childs.collisionEnt.get_inventory(defines.inventory.fuel).insert({name = "coal", count = 50}) + end + self.childs.collisionEnt.operable = false + end + end, + + setFloodlightEntities = function(self, enabled) + if enabled then + if not (self.childs.floodlightEnt and self.childs.floodlightEnt.valid) then + self.childs.floodlightEnt = self.surface.create_entity{name = "heli-floodlight-entity-_-", force = game.forces.neutral, position = self.baseEnt.position} + if game.active_mods["Krastorio2"] then --Krastorio 2 workaround + self.childs.floodlightEnt.get_inventory(defines.inventory.fuel).insert({name = "fuel", count = 200}) + elseif game.active_mods["SeaBlock"] then --SeaBlock workaround + self.childs.collisionEnt.get_inventory(defines.inventory.fuel).insert({name = "cellulose-fiber", count = 200}) + else + self.childs.floodlightEnt.get_inventory(defines.inventory.fuel).insert({name = "coal", count = 50}) + end + end + self.childs.floodlightEnt.orientation = self.baseEnt.orientation + self.childs.floodlightEnt.operable = false + + if not (self.floodlightDriver and self.floodlightDriver.valid) then + self.floodlightDriver = self.surface.create_entity{name="character", force = game.forces.neutral, position = self.baseEnt.position} + end + + self.childs.floodlightEnt.set_driver(self.floodlightDriver) + else + + if self.childs.floodlightEnt and self.childs.floodlightEnt.valid then + self.childs.floodlightEnt.destroy() + end + self.childs.floodlightEnt = nil + + if self.floodlightDriver and self.floodlightDriver.valid then + self.floodlightDriver.destroy() + end + self.floodlightDriver = nil + end + end, + + dealCrashDamage = function(self, players, speed) + for k, curPlayer in pairs(players) do + if curPlayer.character and curPlayer.character.valid then + curPlayer.character.damage((150 + speed * 175) * settings.global["heli-crash-dmg-mult"].value, game.forces.neutral) + end + end + end, + + handleColliderDamage = function(self) + if self.childs.collisionEnt then + if self.childs.collisionEnt.health ~= colliderMaxHealth then + local players = getCarPlayers(self.baseEnt) + local speed = self.childs.collisionEnt.speed + + self.baseEnt.speed = speed + self.baseEnt.damage(colliderMaxHealth - self.childs.collisionEnt.health, game.forces.neutral) + + if not self.baseEnt.valid then --destroy event might already be executed + self:dealCrashDamage(players, speed) + + return false + end + self.childs.collisionEnt.health = colliderMaxHealth + end + end + return true + end, + + getFuelFullness = function(self) + local remainingFuel = self.baseEnt.burner.remaining_burning_fuel + local bbInv = self.baseEnt.burner.inventory + + for i = 1, #bbInv do + local curStack = bbInv[i] + + if curStack and curStack.valid_for_read then + remainingFuel = remainingFuel + curStack.count * curStack.prototype.fuel_value + end + end + + if game.active_mods["Krastorio2"] then + remainingFuel = remainingFuel * 16 + elseif game.active_mods["SeaBlock"] then + remainingFuel = remainingFuel * 9 + end + + local burner = self.baseEnt.burner + local full_value = 0 + if burner.currently_burning then + full_value = burner.currently_burning.fuel_value * burner.currently_burning.stack_size * #burner.inventory + end + if full_value > 0 then + return remainingFuel / full_value + else + return 0 + end + end, + + handleFuelConsumption = function(self) + self:consumeBaseFuel() + self:setFuelGaugeTarget(self:getFuelFullness()) + end, + + consumeBaseFuel = function(self) + + local baseBurner = self.baseEnt.burner + + baseBurner.remaining_burning_fuel = baseBurner.remaining_burning_fuel - self.baseEngineConsumption + + if baseBurner.remaining_burning_fuel <= 0 then + if baseBurner.inventory.is_empty() then + local mod = self.baseEnt.effectivity_modifier + self.baseEnt.effectivity_modifier = 0 + + local driver = self.baseEnt.get_driver() + if driver and driver.valid then + driver.riding_state = {acceleration = defines.riding.acceleration.accelerating, direction = defines.riding.direction.straight} + + else + driver = self.surface.create_entity{name = "character", force = self.baseEnt.force, position = self.baseEnt.position} + self.baseEnt.set_driver(driver) + driver.riding_state = {acceleration = defines.riding.acceleration.accelerating, direction = defines.riding.direction.straight} + driver.destroy() + self.baseEnt.set_driver(nil) + end + + self.baseEnt.effectivity_modifier = mod + else + local fuelItemStack = nil + for i = 1, #baseBurner.inventory do + if baseBurner.inventory[i] and baseBurner.inventory[i].valid_for_read then + fuelItemStack = baseBurner.inventory[i] + break + end + end + + if fuelItemStack then + baseBurner.currently_burning = fuelItemStack.name + baseBurner.remaining_burning_fuel = fuelItemStack.prototype.fuel_value + baseBurner.inventory.remove({name = fuelItemStack.name}) + end + end + end + + if self.burnerDriver and self.burnerDriver.valid then + self.burnerDriver.riding_state = {acceleration = defines.riding.acceleration.accelerating, direction = defines.riding.direction.straight} + if self.childs.burnerEnt.burner.remaining_burning_fuel < 1000 then + if game.active_mods["Krastorio2"] then --Krastorio 2 workaround + self.childs.burnerEnt.get_inventory(defines.inventory.fuel).insert({name = "fuel", count = 1}) + elseif game.active_mods["SeaBlock"] then --SeaBlock workaround + self.childs.burnerEnt.get_inventory(defines.inventory.fuel).insert({name = "cellulose-fiber", count = 1}) + else + self.childs.burnerEnt.get_inventory(defines.inventory.fuel).insert({name = "coal", count = 1}) + end + end + end + end, + + updateRotor = function(self) + if self.rotorRPF ~= self.rotorTargetRPF then + if self.rotorRPF < self.rotorTargetRPF then + self.rotorRPF = math.min(self.rotorRPF + self.rotorRPFacceleration, self.rotorTargetRPF) + + else + self.rotorRPF = math.max(self.rotorRPF - self.rotorRPFacceleration, self.rotorTargetRPF) + end + end + + if self.rotorRPF > 0 then + self.rotorOrient = self.rotorOrient + self.rotorRPF + if self.rotorOrient > 1 then self.rotorOrient = self.rotorOrient - 1 end + + local frameFix = frameFixes[math.floor(self.rotorOrient * 64) + 1] + self.childs.rotorEnt.orientation = frameFix + self.childs.rotorEntShadow.orientation = frameFix + end + + + for k, curGG in pairs(self.gaugeGuis) do + curGG:setGauge("gauge_hr", "rpm", self.rotorRPF * 3600 * self.engineReduction + math.abs(self.baseEnt.speed) * 100) + end + end, + + updateHeight = function(self) + if self.height ~= self.targetHeight then + local dir = 1 + if self.targetHeight < self.height then + dir = -1 + end + + local desiredSpeed = (self.targetHeight - self.height) / 90 + dir * 0.005 + + if self.heightSpeed < desiredSpeed then + self.heightSpeed = math.min(self.heightSpeed + self.heightAcceleration, desiredSpeed) + else + self.heightSpeed = math.max(self.heightSpeed - self.heightAcceleration, desiredSpeed) + end + + local newHeight = self.height + self.heightSpeed + + if fEqual(newHeight, self.targetHeight, 0.01) then + self:changeHeight(self.targetHeight) + self.heightSpeed = 0 + else + self:changeHeight(newHeight) + end + end + + for k, curGG in pairs(self.gaugeGuis) do + curGG:setGauge("gauge_hr", "height", self.height) + end + end, + + updateFuelGauge = function(self) + if self.fuelGaugeVal ~= self.fuelGaugeTargetVal then + if self.fuelGaugeVal < self.fuelGaugeTargetVal then + self.fuelGaugeVal = math.min(self.fuelGaugeVal + self.fuelGaugeSpeed, self.fuelGaugeTargetVal) + + else + self.fuelGaugeVal = math.max(self.fuelGaugeVal - self.fuelGaugeSpeed, self.fuelGaugeTargetVal) + end + end + + for k, curGG in pairs(self.gaugeGuis) do + curGG:setGauge("gauge_fs", "fuel", self.fuelGaugeVal) + if self.curState.name ~= "landed" then + if self.fuelGaugeTargetVal <= self.tankCriticalWarningRatio then + curGG:setLedBlinking("gauge_fs", "fuel", true, 20, "heli-fuel-warning") + + elseif self.fuelGaugeTargetVal <= self.tankWarningRatio then + curGG:setLedBlinking("gauge_fs", "fuel", true, 60, "heli-fuel-warning") + + else + curGG:setLedBlinking("gauge_fs", "fuel", false) + end + else + curGG:setLedBlinking("gauge_fs", "fuel", false) + end + end + end, + + updateEntityPositions = function(self) + local baseVec = math3d.vector2.rotate({0,1}, math.pi * 2 * self.baseEnt.orientation) + local vec = math3d.vector2.mul(baseVec, self.baseEnt.speed) + + local basePos = self.baseEnt.position + + self.childs.bodyEnt.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2] + self.bodyOffset - self.curBobbing}) + self.childs.rotorEnt.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2] + self.rotorOffset - self.curBobbing}) + + self.childs.rotorEntShadow.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2] +self.height}) + self.childs.bodyEntShadow.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2] + self.height}) + + if self.childs.floodlightEnt then + local lightOffsetVec = math3d.vector2.mul(baseVec, self.height) + self.childs.floodlightEnt.teleport({x = basePos.x - vec[1] - lightOffsetVec[1], y = basePos.y - vec[2] - lightOffsetVec[2] + self.height}) + end + + if self.childs.collisionEnt then + if not self.hasLandedCollider then + local initVec = {0,1} + local mul = 2 + if self.baseEnt.speed < 0 then + initVec = {0,-1} + local x = self.baseEnt.orientation + mul = math.abs(math.sin(math.pi*2*x))*1.2 + math.sin(math.pi*x) + 3 --dont ask + end + + vec = math3d.vector2.mul(math3d.vector2.rotate(initVec, math.pi * 2 * self.baseEnt.orientation), mul) + self.childs.collisionEnt.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2]}) + self.childs.collisionEnt.speed = self.baseEnt.speed + + else + self.childs.collisionEnt.teleport({x = basePos.x - vec[1], y = basePos.y - vec[2]}) + self.childs.collisionEnt.speed = self.baseEnt.speed + end + end + + + local off = (1 - math.sin(math.pi*self.baseEnt.orientation)) * 0.7 + local center = {x = basePos.x, y = basePos.y - off} + local radius = 2 + snap = self.baseEnt.orientation + snap = snap * (1 - math.sin(math.pi * snap)*0.05) + snap = math.abs(snap * 64) / 64 + local vec = math3d.vector2.mul(math3d.vector2.rotate({0,1}, math.pi * 2 * snap), radius) + + self.childs.burnerEnt.teleport({x = center.x + vec[1], y = center.y + vec[2] - self.curBobbing}) + + for k, curGG in pairs(self.gaugeGuis) do + curGG:setGauge("gauge_fs", "speed", math.abs(self.baseEnt.speed) * 216) --speed * 60 = m/s, * 3.6 = km/h + end + end, + + updateEntityRotations = function(self) + self.childs.bodyEnt.orientation = self.baseEnt.orientation + self.childs.bodyEntShadow.orientation = self.baseEnt.orientation + self.childs.burnerEnt.orientation = self.baseEnt.orientation + + if self.childs.collisionEnt then + self.childs.collisionEnt.orientation = self.baseEnt.orientation + end + + if self.childs.floodlightEnt then + self.childs.floodlightEnt.orientation = self.baseEnt.orientation + end + end, + + isBaseOrChild = function(self, ent) + if self.baseEnt == ent then + return true + end + + for k,v in pairs(self.childs) do + if v == ent then + return true + end + end + + if self.hasLandedCollider and self.childs.collisionEnt then + return self.childs.collisionEnt.isChildEntity(ent) + end + + return false + end, + + addGaugeGui = function(self, gg) + if #self.gaugeGuis == 0 then + self.gaugeGuis = {} + end + + table.insert(self.gaugeGuis, gg) + end, + + removeGaugeGui = function(self, gg) + for i, curGG in ipairs(self.gaugeGuis) do + if curGG == gg then + table.remove(self.gaugeGuis, i) + return + end + end + end, +} diff --git a/HelicopterRevival/logic/heliController.lua b/HelicopterRevival/logic/heliController.lua new file mode 100644 index 00000000..c0328597 --- /dev/null +++ b/HelicopterRevival/logic/heliController.lua @@ -0,0 +1,389 @@ +function getHeliControllerIndexByOwner(p) + if global.heliControllers then + for i, curController in ipairs(global.heliControllers) do + if curController.owner == p then + return i + end + end + end +end + +function getHeliControllerByOwner(p) + local i = getHeliControllerIndexByowner(p) + if i then return global.heliControllers[i] end +end + +function getHeliControllerIndexByHeli(heli) + if global.heliControllers then + for i, curController in ipairs(global.heliControllers) do + if curController.heli == heli then + return i + end + end + end +end + +function getHeliControllerByHeli(heli) + local i = getHeliControllerIndexByHeli(heli) + if i then return global.heliControllers[i] end +end + +function assignHeliController(owner, heli, target, targetIsPlayer) + local oldControllerIndex = searchIndexInTable(global.heliControllers, heli, "heli") + + if oldControllerIndex then + global.heliControllers[oldControllerIndex]:destroy() + table.remove(global.heliControllers, oldControllerIndex) + end + + insertInGlobal("heliControllers", heliController.new(owner, heli, target, targetIsPlayer)) +end + +heliControllerState = { + getUp = 1, + orientToTarget = 2, + moveToTarget = 3, + creepToPosition = 4, + land = 5, + stop = 6, +} + +heliController = +{ + new = function(player, heli, target, targetIsPlayer) + local obj = + { + valid = true, + + owner = player, + heli = heli, + targetIsPlayer = targetIsPlayer, + + curStateId = heliControllerState.getUp, + stateChanged = true, + } + + if targetIsPlayer then + obj.targetPlayer = target + obj.targetPos = target.position + else + obj.targetPos = target + end + + if not heli.baseEnt.get_driver() then + obj.driverIsBot = true + obj.driver = heli.surface.create_entity{name = "character", force = player.force, position = player.position} + heli.baseEnt.set_driver(obj.driver) + else + obj.driverIsBot = false + obj.driver = heli.baseEnt.get_driver() + end + + heli.hasRemoteController = true + heli.remoteController = obj + + setmetatable(obj, {__index = heliController}) + + OnHeliControllerCreated(obj) + return obj + end, + + curState = function(self) + return heliControllerStates[self.curStateId](self) + end, + + destroy = function(self) + self.valid = false + self.heli.hasRemoteController = nil + self.heli.remoteController = nil + + if self.driverIsBot and self.driver and self.driver.valid then + self.driver.destroy() + end + + OnHeliControllerDestroyed(self) + end, + + stopAndDestroy = function(self) + if self.driverIsBot then + -- Told to explicitly stop, make sure to clear the flag + self.targetIsPlayer = false + self:changeState(heliControllerState.stop) + else + self:destroy() + end + end, + + OnTick = function(self) + if not (self.heli.valid and self.heli.baseEnt.valid and self.owner.valid) then + self:destroy() + return + end + + local curDriver = self.heli.baseEnt.get_driver() + local curPassenger = self.heli.baseEnt.get_passenger() + + if not (curDriver and curDriver.valid) then + if self.driverIsBot then + self:destroy() + else + self.driverIsBot = true + self.driver = self.heli.surface.create_entity{name = "character", force = self.owner.force, position = self.owner.position} + self.heli.baseEnt.set_driver(self.driver) + self.heli:OnUp() + end + + elseif self.driverIsBot and curDriver ~= self.driver then + if self.driver and self.driver.valid then + self.driver.destroy() + self.driver = curDriver + self.driverIsBot = false + end + if self.targetIsPlayer and curDriver == self.targetPlayer.character then + self:destroy() + return + end + + elseif self.driverIsBot and curPassenger and curPassenger.valid then + if self.driver and self.driver.valid then + self.driver.destroy() + self.driver = curPassenger + self.driverIsBot = false + end + self.heli.baseEnt.set_driver(curPassenger) + + if self.targetIsPlayer and curPassenger == self.targetPlayer.character then + self:destroy() + return + end + + else + if self.targetIsPlayer then + if self.targetPlayer.valid then + self.targetPos = {x = self.targetPlayer.position.x, y = self.targetPlayer.position.y - 1} + else + -- Invalid player target, clear the flag + self.targetIsPlayer = false + self:stopAndDestroy() + return + end + end + + local old = self.curStateId + self:curState() + + if old == self.curStateId then + self.stateChanged = false + else + self.stateChanged = true + end + end + end, + + changeState = function(self, newState) + self.curStateId = newState + end, + + setRidingState = function(self, acc, dir) + if not acc then + acc = self.driver.riding_state.acceleration + end + + if not dir then + dir = self.driver.riding_state.direction + end + + self.driver.riding_state = {acceleration = acc, direction = dir} + end, + + holdSpeed = function(self, speed) + local dir = self.driver.riding_state.direction + + if math.abs(1 - (self.heli.baseEnt.speed / speed)) < 0.05 then + self.heli.baseEnt.speed = speed + else + + if self.heli.baseEnt.speed > speed then + self:setRidingState(defines.riding.acceleration.braking) + else + self:setRidingState(defines.riding.acceleration.accelerating) + end + end + end, + + getTargetOrientation = function(self) + local curPos = self.heli.childs.bodyEntShadow.position + + local vec = {x = self.targetPos.x - curPos.x, y = curPos.y - self.targetPos.y} + local len = math.sqrt(vec.x ^ 2 + vec.y ^ 2) + + vec.x = vec.x / len + vec.y = vec.y / len + + + local angle = math.atan2(vec.y, vec.x) + self.targetOrient = 1.25 - (angle / (2 * math.pi)) + if self.targetOrient > 1 then self.targetOrient = self.targetOrient - 1 end + end, + + getSteeringToTargetOrientation = function(self) + local curOrient = self.heli.baseEnt.orientation + + if math.abs(self.targetOrient - curOrient) < 0.02 then + return defines.riding.direction.straight + else + local deltaLeft = 0 + local deltaRight = 0 + + if self.targetOrient < curOrient then + deltaLeft = curOrient - self.targetOrient + deltaRight = 1 - curOrient + self.targetOrient + else + deltaLeft = curOrient + 1 - self.targetOrient + deltaRight = self.targetOrient - curOrient + end + + if deltaLeft < deltaRight then + return defines.riding.direction.left + else + return defines.riding.direction.right + end + end + end, + + ------------- states --------------- + getUp = function(self) + if self.stateChanged then + self.heli:OnUp() + elseif self.heli.height >= maxCollisionHeight then + self:changeState(heliControllerState.orientToTarget) + end + end, + + orientToTarget = function(self) + if self.stateChanged then + self.targetOrientation = self:getTargetOrientation() + else + local dir = self:getSteeringToTargetOrientation() + + self:setRidingState(defines.riding.acceleration.nothing, dir) + + if dir == defines.riding.direction.straight then + self:changeState(heliControllerState.moveToTarget) + end + end + end, + + moveToTarget = function(self) + local dist = getDistance(self.heli.childs.bodyEntShadow.position, self.targetPos) + + if self.stateChanged then + self.updateOrientationCooldown = 30 + self.oldDist = -1 + end + + self.updateOrientationCooldown = self.updateOrientationCooldown - 1 + if self.updateOrientationCooldown < 3 or dist < 10 then + if self.updateOrientationCooldown == 0 then + self.updateOrientationCooldown = 30 + if dist >= 10 then + self:setRidingState(nil, defines.riding.direction.straight) + end + end + + self.targetOrientation = self:getTargetOrientation() + self:setRidingState(nil, self:getSteeringToTargetOrientation()) + else + --self:setRidingState(nil, defines.riding.direction.straight) + end + + if dist < 150 then + local creepZone = 0.5 + local landingZone = 1 + local desiredSpeed = 1.5 - (1.2247448 - (dist - creepZone) / 150)^2 + + self:holdSpeed(desiredSpeed) + + if dist <= landingZone and (dist <= creepZone or dist == self.oldDist) then + self:setRidingState(defines.riding.acceleration.braking) + self:changeState(heliControllerState.creepToPosition) + end + + self.oldDist = dist + else + self:setRidingState(defines.riding.acceleration.accelerating) + end + end, + + creepToPosition = function(self) + local curPos = self.heli.childs.bodyEntShadow.position + + if self.stateChanged then + self:setRidingState(defines.riding.acceleration.braking, defines.riding.direction.straight) + self.heli.baseEnt.speed = 0 + --targetIsPlayer will be updated else where + --self.targetIsPlayer = false + + local curDist = getDistance(curPos, self.targetPos) + local alignFactor = 1.1 + local alignVec = {x = (self.targetPos.x - curPos.x) / curDist * alignFactor, y = (self.targetPos.y - curPos.y) / curDist * alignFactor} + self.targetPos = {x = self.targetPos.x + alignVec.x, y = self.targetPos.y + alignVec.y} + + local creepFrames = 60 + self.creepVec = {x = (self.targetPos.x - curPos.x) / creepFrames, y = (self.targetPos.y - curPos.y) / creepFrames} + + self.oldDist = 100 + end + + self.heli.baseEnt.teleport({x = self.heli.baseEnt.position.x + self.creepVec.x, y = self.heli.baseEnt.position.y + self.creepVec.y}) + self.heli:updateEntityPositions() + + local dist = getDistance(self.heli.childs.bodyEntShadow.position, self.targetPos) + if dist < 0.2 or dist > self.oldDist then + -- If targeting the player and we shouldn't land when we catch up, then just stop, otherwise land + if( self.targetIsPlayer and self.targetPlayer.mod_settings["heli-remote-dont-land-following-player"].value )then + self:changeState(heliControllerState.stop) + else + self:changeState(heliControllerState.land) + end + end + + self.oldDist = dist + end, + + land = function(self) + local d = extractPlayer(self.driver) + + if not ((not self.driverIsBot and d and d.valid) and d.mod_settings["heli-remote-dont-auto-land-player"].value) then + self.heli:OnDown() + end + + self:destroy() + end, + + stop = function(self) + self:setRidingState(defines.riding.acceleration.braking, defines.riding.direction.straight) + + if self.heli.baseEnt.speed == 0 then + if( self.targetIsPlayer and self.targetPlayer.mod_settings["heli-remote-dont-land-following-player"].value )then + local dist = getDistance(self.heli.childs.bodyEntShadow.position, self.targetPos) + if dist > 0.2 then + -- Player moved off, orient on them + self:changeState(heliControllerState.orientToTarget) + end + else + self:changeState(heliControllerState.land) + end + end + end, + ------------------------------------ +} + +heliControllerStates = { + heliController.getUp, + heliController.orientToTarget, + heliController.moveToTarget, + heliController.creepToPosition, + heliController.land, + heliController.stop, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/heliPad.lua b/HelicopterRevival/logic/heliPad.lua new file mode 100644 index 00000000..459009ca --- /dev/null +++ b/HelicopterRevival/logic/heliPad.lua @@ -0,0 +1,116 @@ +function getHeliPadIndexFromBaseEntity(ent) + for i, v in ipairs(global.heliPads) do + if v.baseEnt == ent then + return i + end + end + + return nil +end + +heliPad = +{ + new = function(placementEnt) + local obj = + { + valid = true, + + surface = placementEnt.surface, + + replacedTiles = {}, + baseEnt = placementEnt.surface.create_entity + { + name = "heli-pad-entity", + force = placementEnt.force, + position = placementEnt.position, + } + } + + --game.players[1].print("calc: ".. tostring(placementEnt.position.y - heli_pad_sprite_y_shift).. " real pos: "..tostring(obj.baseEnt.position.y)) + --game.players[1].print(tostring(placementEnt.position.x) .. "|" .. tostring(placementEnt.position.y)) + + local boundingBox = + { + left_top = {placementEnt.position.x - 3.5, placementEnt.position.y - 3.5}, + right_bottom = {placementEnt.position.x + 3.5, placementEnt.position.y + 3.5} + } + + local scorches = obj.surface.find_entities_filtered + { + area = boundingBox, + type = "corpse", + name = "small-scorchmark", + } + + for k,v in pairs(scorches) do + v.destroy() + end + + local tiles = {} + for i = -3, 3 do + obj.replacedTiles[i] = {} + + for j = -3, 3 do + table.insert(tiles, + { + name = "heli-pad-concrete", + position = {x = placementEnt.position.x + i, y = placementEnt.position.y + j} + }) + + local oldTile = obj.surface.get_tile(placementEnt.position.x + i, placementEnt.position.y + j) + + obj.replacedTiles[i][j] = { + name = oldTile.name, + position = oldTile.position + } + end + end + + obj.surface.set_tiles(tiles, true) + + placementEnt.destroy() + return setmetatable(obj, {__index = heliPad}) + end, + + destroy = function(self) + self.valid = false + + local restoredTiles = {} + + for i = -3, 3 do + for j = -3, 3 do + if self.surface.get_tile(self.baseEnt.position.x + i, self.baseEnt.position.y + j).name == "heli-pad-concrete" then + self:migrateTile(self.replacedTiles[i][j]) + + table.insert(restoredTiles, self.replacedTiles[i][j]) + end + end + end + + self.surface.set_tiles(restoredTiles, true) + end, + + tile_migrations = + { + { + {"grass", "grass-1"}, + {"grass-medium", "grass-3"}, + {"grass-dry", "grass-2"}, + {"dirt", "dirt-3"}, + {"dirt-dark", "dirt-6"}, + {"sand", "sand-1"}, + {"sand-dark", "sand-3"} + }, + }, + + migrateTile = function(self, tile) + for i, curMigrationTable in ipairs(self.tile_migrations) do + for k, curMigration in pairs(curMigrationTable) do + if curMigration[1] == tile.name then + tile.name = curMigration[2] + break + end + end + end + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/mtMgr.lua b/HelicopterRevival/logic/mtMgr.lua new file mode 100644 index 00000000..3883d730 --- /dev/null +++ b/HelicopterRevival/logic/mtMgr.lua @@ -0,0 +1,66 @@ +--Metatable manager v1.1 by kumpu +--Takes care of reassigning metatables during load. +--Use for tables stored in global. + +-------Basic usage-------- +-- mtMgr.assign on file level +-- mtMgr.set in your constructor +-- mtMgr.OnLoad in script.on_load + +mtMgr = +{ + --It's worth noting that this table gets rebuilt everytime the mod is loaded, + --which allows updating metatables. + assignments = {}, + + + --Use this at the file level to assign a metatable to a type identifier. + --The given metatable will be used on objects of this type in OnLoad and set. + assign = function(strType, metatable) + mtMgr.assignments[strType] = metatable + end, + + + --This will set the metatable assigned in assign() and save the type identifier to the object. + set = function(obj, strType) + obj.__mtMgr_type = strType + return setmetatable(obj, mtMgr.assignments[strType]) + end, + + + crawl = function(t, f, lookup) + if not lookup then + lookup = {} + end + + lookup[t] = true + + --Reading nil fields on game tables will trigger an error. + --This works for now. + if not t.__self then + f(t) + + for k,v in pairs(t) do + if type(v) == "table" and not lookup[v] then + mtMgr.crawl(v, f, lookup) + end + end + end + end, + + + --Call this in script.on_load. + --Walks the entire global table or the one you passed. If it encounters a table with a type identifier, + --it sets the metatable assigned to the type on that table. + --Circular references are safe. + OnLoad = function(t) + t = t or global + + mtMgr.crawl(global, function(t) + local mt = mtMgr.assignments[t.__mtMgr_type] + if mt then + setmetatable(t, mt) + end + end) + end, +} \ No newline at end of file diff --git a/HelicopterRevival/logic/simpleNoise.lua b/HelicopterRevival/logic/simpleNoise.lua new file mode 100644 index 00000000..7bdcff22 --- /dev/null +++ b/HelicopterRevival/logic/simpleNoise.lua @@ -0,0 +1,52 @@ +--A very basic sequential 1D-noise generator. +--It's actually just smoothed random values, +--but I guess that can be said about any noise gen. + +simpleNoise = +{ + new = function(magnitude, timeAdvance, minFrequency, maxFrequency) + local obj = + { + magnitude = magnitude or 1, + timeAdvance = timeAdvance or 0.2, + minFrequency = minFrequency or 1, + maxFrequency = maxFrequency or 6, + + nextVal = 0, + lastVal = 0, + + transitionTime = 0, + curTime = 0, + } + + obj.maxFrequency = obj.maxFrequency - obj.minFrequency + + return mtMgr.set(obj, "simpleNoise") + end, + + easing = function(t) + if t < 0.5 then + return 2*t^2 + else + return -1+(4-2*t)*t + end + end, + + advance = function(self) + self.curTime = self.curTime + self.timeAdvance + + if self.curTime >= self.transitionTime then + self.lastVal = self.nextVal + self.nextVal = math.random() * 2 - 1 + + self.valDelta = self.nextVal - self.lastVal + + self.curTime = 0 + self.transitionTime = math.random() * self.maxFrequency + self.minFrequency + end + + return (self.lastVal + self.valDelta * self.easing(self.curTime / self.transitionTime)) * self.magnitude + end, +} + +mtMgr.assign("simpleNoise", {__index = simpleNoise}) \ No newline at end of file diff --git a/HelicopterRevival/logic/timer.lua b/HelicopterRevival/logic/timer.lua new file mode 100644 index 00000000..b57eacfd --- /dev/null +++ b/HelicopterRevival/logic/timer.lua @@ -0,0 +1,78 @@ +timer = +{ + new = function(func, frames, isInterval, timerData) + local timer = + { + valid = true, + callback = func, + runTick = game.tick + frames, + interval = isInterval and frames, + paused = false, + data = timerData, + } + + mtMgr.set(timer, "timer") + + return insertInGlobal("timers", timer) + end, + + cancel = function(self) + self.valid = false + end, + + pause = function(self) + self.paused = true + self.remaining = self.runTick - game.tick + end, + + resume = function(self) + self.paused = false + self.runTick = game.tick + self.remaining + end, +} + +function setTimeout(func, frames, timerData) + return timer.new(func, frames, false, timerData) +end + +function setInterval(func, frames, timerData) + return timer.new(func, frames, true, timerData) +end + +function OnTimerTick() + local timers = global.timers + + if timers then + for i = #timers, 1, -1 do + local curTimer = timers[i] + + if not curTimer.valid then + table.remove(timers, i) + + else + if (not curTimer.paused) and curTimer.runTick <= game.tick then + -- i don't know if this check is the correct way to catch it + -- but sometimes after game load, the callback slot will be + -- empty and cause a crash. this appears to fix that. + -- seems this is only used by the fuel gauge as well + if not curTimer.callback then + curTimer.valid = false + table.remove(timers, i) + else + curTimer:callback() + + if curTimer.interval then + curTimer.runTick = game.tick + curTimer.interval + + else + curTimer.valid = false + table.remove(timers, i) + end + end + end + end + end + end +end + +mtMgr.assign("timer", {__index = timer}) \ No newline at end of file diff --git a/HelicopterRevival/logic/util.lua b/HelicopterRevival/logic/util.lua new file mode 100644 index 00000000..5a6b8a73 --- /dev/null +++ b/HelicopterRevival/logic/util.lua @@ -0,0 +1,213 @@ +function tableToString(table) + local s = "" + for k,v in pairs(table) do + s = s .. type(v) .. " '" .. k .. "': " .. tostring(v) .. "\n" + end + return s +end + +function printTable(t, prefix) + if not prefix then + prefix = "" + end + + for k,v in pairs(t) do + local typ = "[" .. type(v) .. "] " + local name = "'" .. k .. "' =" + local val = " " .. tostring(v) + + if type(v) == "table" then + printA(prefix .. typ .. name) + printTable(v, prefix .. "___") + + else + printA(prefix .. typ .. name .. val) + end + end +end + +function printA(...) + local s = "" + local n = select("#", ...) + for i = 1, n do + s = s .. tostring(select(i, ...)) + if i < n then + s = s .. ", " + end + end + + for k,v in pairs(game.players) do + v.print(s) + end + + return s +end + +function printAF(...) + local t = {...} + table.insert(t, math.random()) + return printA(unpack(t)) +end + +function getDistance(pos1, pos2) + return math.sqrt((pos2.x - pos1.x)^2 + (pos2.y - pos1.y)^2) +end + +function equipmentGridHasItem(grid, itemName) + local contents = grid.get_contents() + return contents[itemName] and contents[itemName] > 0 +end + +function searchIndexInTable(table, obj, field) + if table then + for i, v in ipairs(table) do + if field and v[field] == obj then + return i + elseif v == obj then + return i + end + end + end +end + +function searchInTable(table, obj, field) + if table then + for k, v in pairs(table) do + if field and v[field] == obj then + return v + elseif v == obj then + return v + end + end + end +end + +function setMetatablesInGlobal(name, mt) + if global[name] then + for k, v in pairs(global[name]) do + setmetatable(v, mt) + end + end +end + +function checkAndTickInGlobal(name) + if global[name] then + for i = #global[name], 1, -1 do + local v = global[name][i] + + if v.valid then + v:OnTick() + else + table.remove(global[name], i) + end + end + end +end + +function callInGlobal(gName, kName, ...) + if global[gName] then + for k,v in pairs(global[gName]) do + if v[kName] then v[kName](v, ...) end + end + end +end + +function insertInGlobal(gName, val) + if not global[gName] then global[gName] = {} end + table.insert(global[gName], val) + return val +end + +function removeInGlobal(gName, val) + if global[gName] then + for i, v in ipairs(global[gName]) do + if v == val then + table.remove(global[gName], i) + return v + end + end + end +end + +function fEqual(a, b, prec) + if not prec then + prec = 0.001 + end + + return math.abs(a - b) <= prec +end + +function versionStrToInt(s) + v = 0 + for num in s:gmatch("%d+") do + v = v * 100 + tonumber(num) + end + + return v +end + +function concatStrTable(t, c) + local s = "" + for k,v in pairs(t) do + s = s .. v .. c + end + + return s +end + +function getIndexedPos(pos) + if pos[1] and pos[2] then + return {pos[1], pos[2]} + elseif pos.x and pos.y then + return {pos.x, pos.y} + end +end + +string.startswith = function(str, strSub) + if str:len() < strSub:len() then + return false + end + + return str:sub(1, strSub:len()) == strSub +end + +function chopDecimal(val, place) + local mult = 10^(place or 0) + return math.floor(val * mult + 0.5) / mult +end + +function extractPlayer (obj) + if obj and obj.valid then + if obj.is_player() then + return obj + + elseif obj.player and obj.player.valid and obj.player.is_player() then + return obj.player + end + end + + return nil +end + +function getCarPlayers(car) + local d = extractPlayer(car.get_driver()) + local p = extractPlayer(car.get_passenger()) + + local t = {} + + if d then + table.insert(t, d) + end + + if p then + table.insert(t, p) + end + + return t +end + +function playerHasEquipment(p, equipName) + return p.character and p.character.valid and + p.character.grid and p.character.grid.valid and + equipmentGridHasItem(p.character.grid, equipName) +end diff --git a/HelicopterRevival/migrations/Helicopters_0.0.3.json b/HelicopterRevival/migrations/Helicopters_0.0.3.json new file mode 100644 index 00000000..8df997b7 --- /dev/null +++ b/HelicopterRevival/migrations/Helicopters_0.0.3.json @@ -0,0 +1,14 @@ +{ + "entity": + [ + ["heli-entity", "heli-entity-_-"], + ["heli-placement-entity", "heli-placement-entity-_-"], + ["heli-body-entity", "heli-body-entity-_-"], + ["heli-flying-collision-entity", "heli-flying-collision-entity-_-"], + ["heli-landed-collision-entity", "heli-landed-collision-entity-_-"], + ["heli-shadow-entity", "heli-shadow-entity-_-"], + ["heli-burner-entity", "heli-burner-entity-_-"], + ["rotor-entity", "rotor-entity-_-"], + ["rotor-shadow-entity", "rotor-shadow-entity-_-"] + ] +} \ No newline at end of file diff --git a/HelicopterRevival/migrations/Helicopters_0.0.5.lua b/HelicopterRevival/migrations/Helicopters_0.0.5.lua new file mode 100644 index 00000000..d47d0fb3 --- /dev/null +++ b/HelicopterRevival/migrations/Helicopters_0.0.5.lua @@ -0,0 +1,33 @@ +--[[ +require("logic.heliBase") +require("logic.heliAttack") +require("logic.heliPad") + +global.helis = {} +global.heliPads = {} + +for _,surface in pairs(game.surfaces) do + cars = surface.find_entities_filtered{type = "car"} + for _,car in pairs(cars) do + if string.find(heliEntityNames, car.name .. ",", 1, true) then + if string.find(heliBaseEntityNames, car.name .. ",", 1, true) then + local driver = car.get_driver() + car.set_driver(nil) + local newHeli = insertInGlobal("helis", heliAttack.new(car)) + if driver then newHeli.baseEnt.set_driver(driver) end + else + car.set_driver(nil) + car.destroy() + end + end + end + + simples = surface.find_entities_filtered{type = "simple-entity-with-force"} + padNames = "heli-pad-placement-entity,heli-pad-entity," + for _,simple in pairs(simples) do + if string.find(padNames, simple.name .. ",", 1, true) then + local newPad = insertInGlobal("heliPads", heliPad.new(simple)) + end + end +end +]]-- \ No newline at end of file diff --git a/HelicopterRevival/prototypes/entities/heli_entity.lua b/HelicopterRevival/prototypes/entities/heli_entity.lua new file mode 100644 index 00000000..55e99031 --- /dev/null +++ b/HelicopterRevival/prototypes/entities/heli_entity.lua @@ -0,0 +1,775 @@ +local fuel_slots = 5 +local inventory_slots = 80 + +gun_slots = {"heli-gun", "heli-rocket-launcher-item", "heli-flamethrower"} + +if mods["Krastorio2"] and data.raw["ammo-category"]["anti-material-rifle-ammo"] then + -- Override gun slots for K2 + gun_slots = {"heli-gun", "heli-rocket-launcher-item", "heli-flamethrower", "heli-k2-anti-material-gun"} +end + +data:extend({ + { + type = "car", + name = "heli-placement-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "player-creation"}, + has_belt_immunity = true, + minable = {mining_time = 1, result = "heli-item"}, + max_health = 2500, + corpse = "medium-remnants", + dying_explosion = "medium-explosion", + selection_box = {{-1.5, -1.8}, {0.9, 3}}, + collision_box = {{-1.5, -1.8}, {0.9, 3}}, + collision_mask = {"object-layer", "water-tile", "player-layer"}, + energy_per_hit_point = 1, + effectivity = 0.3, + burner = { + effectivity = 0.5, + emissions = 0, + fuel_inventory_size = 0, + + }, + consumption = "3MW", + braking_power = "1MW", + friction = 0.002, + terrain_friction_modifier = 0, + weight = 3000, + + rotation_speed = 0.005, + inventory_size = 0, + equipment_grid = nil, + + animation = { + layers = { + { + priority = "high", + width = 360, + height = 300, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/body-0.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + + { + priority = "high", + width = 360, + height = 300, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor-0.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + }, + + ---------------------base entity--------------------- + { + type = "car", + name = "heli-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "player-creation"}, + has_belt_immunity = true, + minable = {mining_time = 1, result = "heli-item"}, + max_health = 2500, + corpse = "medium-remnants", + dying_explosion = "medium-explosion", + selection_box = {{-1.8, -1.8}, {1.2, 3}}, + collision_box = {{-1.8, -1.8}, {1.2, 3}}, + alert_icon_shift = {-0.25, -0.5}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.4, + burner = { + effectivity = 0.5, + emissions = 0.005, + fuel_inventory_size = fuel_slots, + }, + consumption = settings.startup["heli-consumption"].value, + braking_power = settings.startup["heli-braking-power"].value, + friction = 0.002, + terrain_friction_modifier = 0, + weight = settings.startup["heli-weight"].value, + + rotation_speed = 0.005, + tank_driving = true, + inventory_size = inventory_slots, + equipment_grid = "heli-equipment-grid", + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 64, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 8, + height_in_frames = 8, + }, + } + }, + } + }, + sound_no_fuel = + { + { + filename = "__base__/sound/fight/tank-no-fuel-1.ogg", + volume = 0.6 + }, + }, + open_sound = { filename = "__base__/sound/car-door-open.ogg", volume = 0.7 }, + close_sound = { filename = "__base__/sound/car-door-close.ogg", volume = 0.7 }, + guns = gun_slots, + turret_rotation_speed = 1 / 60, + minimap_representation = { + filename = "__HelicopterRevival__/graphics/icons/heli-minimap-representation.png", + flags = {"icon"}, + size = {40, 40}, + scale = 0.5 + }, + selected_minimap_representation = { + filename = "__HelicopterRevival__/graphics/icons/heli-minimap-representation-selected.png", + flags = {"icon"}, + size = {40, 40}, + scale = 0.5 + }, + }, + + + + + +----------------------flying collision-------------------- + { + type = "car", + name = "heli-flying-collision-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 999999, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{-1.8, -0.2}, {1.2, 0.2}}, + energy_per_hit_point = 1, + effectivity = 0.3, + burner = { + effectivity = 0.5, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "1W", + braking_power = "1W", + friction = 0.002, + terrain_friction_modifier = 0, + weight = 3000, + + rotation_speed = 0.005, + inventory_size = 0, + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + + crash_trigger = { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/car-crash.ogg", + volume = 0.25 + }, + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + }, + + +----------------------landed collision-------------------- + { + type = "car", + name = "heli-landed-collision-side-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 999999, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{-0.1, -2.4}, {0.1, 2.4}}, --{{-0.1, -1.8}, {0.1, 3}}, + energy_per_hit_point = 1, + effectivity = 0.3, + burner = { + effectivity = 0.5, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "1W", + braking_power = "1W", + friction = 0.002, + terrain_friction_modifier = 0, + weight = 3000, + + rotation_speed = 0.005, + inventory_size = 0, + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + + crash_trigger = { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/car-crash.ogg", + volume = 0.25 + }, + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + }, + + { + type = "car", + name = "heli-landed-collision-end-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + has_belt_immunity = true, + minable = {mining_time = 1, result = "heli-item"}, + max_health = 999999, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{-1.5, -0.1}, {1.5, 0.1}}, --{{-1.8, -0.1}, {1.2, 0.1}} --{{-1.8, -1.8}, {1.2, 3}} + energy_per_hit_point = 1, + effectivity = 0.3, + burner = { + effectivity = 0.5, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "1W", + braking_power = "1W", + friction = 0.002, + terrain_friction_modifier = 0, + weight = 3000, + + rotation_speed = 0.005, + inventory_size = 0, + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + + crash_trigger = { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/car-crash.ogg", + volume = 0.25 + }, + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + }, + + + + + + + + + + + + ---------------body-------------- + { + type = "car", + name = "heli-body-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 1500, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.5, + braking_power = "100kW", + burner = { + effectivity = 1, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "100kW", + friction = 0.01, + + animation = { + layers = { + { + priority = "high", + width = 360, + height = 300, + frame_count = 1, + direction_count = 64, + shift = {0, -5}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/body-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + priority = "high", + width = 720, + height = 600, + frame_count = 1, + direction_count = 64, + shift = {0, -5}, + scale = 0.5, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + } + } + }, + } + }, + inventory_size = 0, + rotation_speed = 0.005, + weight = 50, + }, + + + + + + + + + ---------------shadow------------ + { + type = "car", + name = "heli-shadow-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 1500, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.5, + braking_power = "100kW", + burner = { + effectivity = 1, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "100kW", + friction = 0.01, + + animation = { + layers = { + { + priority = "very-low", + width = 360, + height = 300, + frame_count = 1, + draw_as_shadow = true, + direction_count = 64, + shift = {0.4, -0.5}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/body_shadow-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body_shadow-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body_shadow-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/body_shadow-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + priority = "very-low", + width = 720, + height = 600, + frame_count = 1, + draw_as_shadow = true, + direction_count = 64, + shift = {0.4, -0.5}, + scale = 0.5, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body_shadow-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body_shadow-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body_shadow-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-body_shadow-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + } + }, + } + }, + inventory_size = 0, + rotation_speed = 0.005, + weight = 50, + }, + + + + + + + + +----------------------smoke and sound-------------------- + { + type = "car", + name = "heli-burner-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 999999, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.01, + burner = { + effectivity = 0.01, + emissions = 0.002, + fuel_inventory_size = 1, + smoke = + { + { + name = "heli-smoke", + deviation = {0,0}, + frequency = 200, + position = {-1, 0}, + starting_frame = 0, + starting_frame_deviation = 60 + }, + { + name = "heli-smoke", + deviation = {0,0}, + frequency = 200, + position = {0.45, 0}, + starting_frame = 0, + starting_frame_deviation = 60 + } + } + }, + consumption = "1W", + braking_power = "1W", + friction = 1, + terrain_friction_modifier = 0, + weight = 9999, + + rotation_speed = 0.005, + inventory_size = 0, + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + + working_sound = { + sound = { + filename = "__HelicopterRevival__/sound/heli_loop.ogg", + volume = 0.6 + }, + activate_sound = { + filename = "__HelicopterRevival__/sound/heli_startup.ogg", + volume = 0.6 + }, + deactivate_sound = { + filename = "__HelicopterRevival__/sound/heli_shutdown.ogg", + volume = 0.6 + }, + --match_speed_to_activity = true, + }, + }, + + + + + + +----------------------flashlight-------------------- + { + type = "car", + name = "heli-floodlight-entity-_-", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 999999, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.3, + burner = { + effectivity = 0.5, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "1W", + braking_power = "1W", + friction = 0.002, + terrain_friction_modifier = 0, + weight = 3000, + + rotation_speed = 0.005, + inventory_size = 0, + + animation = { + layers = { + { + priority = "high", + width = 1, + height = 1, + frame_count = 1, + direction_count = 1, + shift = {0, 0}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/void.png", + width_in_frames = 1, + height_in_frames = 1, + }, + } + }, + } + }, + + crash_trigger = { + type = "play-sound", + sound = + { + { + filename = "__base__/sound/car-crash.ogg", + volume = 0.25 + }, + } + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + + light = + { + { + type = "oriented", + minimum_darkness = 0.3, + picture = + { + filename = "__core__/graphics/light-cone.png", + priority = "extra-high", + flags = { "light" }, + scale = 2.5, + width = 200, + height = 200 + }, + shift = {-0.3, -20}, + size = 2.5, + intensity = 0.6, + color = {r = 0.92, g = 0.77, b = 0.3} + }, + }, + }, +}) diff --git a/HelicopterRevival/prototypes/entities/heli_pad.lua b/HelicopterRevival/prototypes/entities/heli_pad.lua new file mode 100644 index 00000000..e8450ef3 --- /dev/null +++ b/HelicopterRevival/prototypes/entities/heli_pad.lua @@ -0,0 +1,106 @@ +data:extend({ + { + type = "simple-entity-with-force", + name = "heli-pad-placement-entity", + flags = {"placeable-neutral", "player-creation"}, + icon = "__HelicopterRevival__/graphics/icons/heli_pad.png", + icon_size = 64, + subgroup = "grass", + order = "b[decorative]-k[stone-rock]-a[big]", + collision_box = {{-3.5, -3.5}, {3.5, 3.5}}, + collision_mask = {"object-layer", "water-tile"}, + selection_box = {{-3.5, -3.5}, {3.5, 3.5}}, + + minable = + { + mining_time = 2, + result = "heli-pad-item", + count = 1 + }, + + count_as_rock_for_filtered_deconstruction = false, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + render_layer = "object", + max_health = 200, + resistances = + { + { + type = "fire", + percent = 100 + } + }, + + pictures = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli_pad.png", + width = 260, + height = 260, + + hr_version = { + filename = "__HelicopterRevival__/graphics/entities/heli_pad_hr.png", + width = 520, + height = 520, + scale = 0.5, + }, + }, + } + }, + + { + type = "simple-entity-with-force", + name = "heli-pad-entity", + flags = {"placeable-neutral", "player-creation"}, + icon = "__HelicopterRevival__/graphics/icons/heli_pad.png", + icon_size = 64, + subgroup = "grass", + order = "b[decorative]-k[stone-rock]-a[big]", + collision_box = {{-3.5, -3.5}, {3.5, 3.5}}, + collision_mask = {},--{"object-layer"}, + selection_box = {{-2, -2}, {2, 2}}, + + minable = + { + mining_time = 2, + result = "heli-pad-item", + count = 1 + }, + + count_as_rock_for_filtered_deconstruction = false, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + render_layer = "decorative", + max_health = 200, + resistances = + { + { + type = "fire", + percent = 100 + }, + { + type = "physical", + percent = 100 + }, + { + type = "impact", + percent = 100 + }, + { + type = "explosion", + percent = 90 + }, + { + type = "acid", + percent = 100 + } + }, + + pictures = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli_pad_inner.png", + width = 173, + height = 172, + }, + } + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/entities/rotor_entity.lua b/HelicopterRevival/prototypes/entities/rotor_entity.lua new file mode 100644 index 00000000..fe07273c --- /dev/null +++ b/HelicopterRevival/prototypes/entities/rotor_entity.lua @@ -0,0 +1,203 @@ +data:extend({ + { + type = "car", + name = "rotor-entity-_-", + icon = "__base__/graphics/icons/car.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 1500, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.5, + braking_power = "100kW", + burner = { + effectivity = 1, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "100kW", + friction = 0.01, + + animation = { + layers = { + { + priority = "high", + width = 360, + height = 300, + frame_count = 1, + direction_count = 64, + shift = {0, -5.1}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + priority = "high", + width = 720, + height = 600, + frame_count = 1, + direction_count = 64, + shift = {0, -5.1}, + scale = 0.5, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + } + }, + } + }, + inventory_size = 0, + rotation_speed = 0.005, + weight = 50, + }, + ------------shadow------------------ + { + type = "car", + name = "rotor-shadow-entity-_-", + icon = "__base__/graphics/icons/car.png", + icon_size = 64, + flags = {"placeable-off-grid", "not-on-map"}, + minable = {mining_time = 1, result = "heli-item"}, + has_belt_immunity = true, + max_health = 1500, + corpse = "medium-remnants", + selection_box = {{0,0},{0,0}}, + collision_box = {{0,0},{0,0}}, + collision_mask = {}, + energy_per_hit_point = 1, + effectivity = 0.5, + braking_power = "100kW", + burner = { + effectivity = 1, + emissions = 0, + fuel_inventory_size = 1, + }, + consumption = "100kW", + friction = 0.01, + + animation = { + layers = { + { + priority = "very-low", + width = 360, + height = 300, + frame_count = 1, + draw_as_shadow = true, + direction_count = 64, + shift = {0.4, -0.5}, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor_shadow-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor_shadow-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor_shadow-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/rotor_shadow-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + hr_version = { + priority = "very-low", + width = 720, + height = 600, + frame_count = 1, + draw_as_shadow = true, + direction_count = 64, + shift = {0.4, -0.5}, + scale = 0.5, + animation_speed = 8, + max_advance = 0.2, + stripes = + { + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor_shadow-0.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor_shadow-1.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor_shadow-2.png", + width_in_frames = 4, + height_in_frames = 4, + }, + { + filename = "__HelicopterRevival__/graphics/entities/heli/hr-rotor_shadow-3.png", + width_in_frames = 4, + height_in_frames = 4, + }, + }, + } + }, + } + }, + inventory_size = 0, + rotation_speed = 0.005, + weight = 50, + } +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/entities/smoke.lua b/HelicopterRevival/prototypes/entities/smoke.lua new file mode 100644 index 00000000..4167e6c4 --- /dev/null +++ b/HelicopterRevival/prototypes/entities/smoke.lua @@ -0,0 +1,37 @@ +data:extend({ + { + type = "trivial-smoke", + name = "heli-smoke", + flags = {"not-on-map"}, + duration = 50, + fade_in_duration = 20, + fade_away_duration = 30, + spread_duration = 30, + start_scale = 0.1, + end_scale = 0.3, + color = {r = 0.1, g = 0.1, b = 0.1, a = 0.1}, + cyclic = true, + affected_by_wind = true, + animation = + { + width = 152, + height = 120, + line_length = 5, + frame_count = 60, + axially_symmetrical = false, + direction_count = 1, + shift = {0, 0}, + priority = "high", + animation_speed = 0.25, + filename = "__base__/graphics/entity/smoke/smoke.png", + flags = { "smoke" } + } + } +}) + +--[[ fade_in_duration = 0, + fade_away_duration = 100, + spread_duration = 50, + start_scale = 0.1, + end_scale = 0.5, + color = {r = 0.15, g = 0.15, b = 0.15, a = 0.1},]] \ No newline at end of file diff --git a/HelicopterRevival/prototypes/equipment/equipment.lua b/HelicopterRevival/prototypes/equipment/equipment.lua new file mode 100644 index 00000000..b80fd42b --- /dev/null +++ b/HelicopterRevival/prototypes/equipment/equipment.lua @@ -0,0 +1,37 @@ +data:extend({ + { + type = "battery-equipment", + name = "heli-remote-equipment", + sprite = + { + filename = "__HelicopterRevival__/graphics/equipment/heli-remote-equipment.png", + width = 128, + height = 128, + priority = "medium", + scale = 0.5, + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + energy_source = + { + type = "electric", + buffer_capacity = "2MJ", + input_flow_limit = "1MW", + output_flow_limit = "1MW", + usage_priority = "tertiary" + }, + categories = {"armor"} + }, + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + { -- Gunship grid + type = "equipment-grid", + name = "heli-equipment-grid", + width = 8, + height = 4, + equipment_categories = {"armor"} + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/font/font.lua b/HelicopterRevival/prototypes/font/font.lua new file mode 100644 index 00000000..0f899b7c --- /dev/null +++ b/HelicopterRevival/prototypes/font/font.lua @@ -0,0 +1,9 @@ +data:extend( +{ + { + type = "font", + name = "pixelated", + from = "pixelated", + size = 12 + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/items/heli_flamethrower.lua b/HelicopterRevival/prototypes/items/heli_flamethrower.lua new file mode 100644 index 00000000..a1cec28d --- /dev/null +++ b/HelicopterRevival/prototypes/items/heli_flamethrower.lua @@ -0,0 +1,48 @@ +data:extend({ + { + type = "gun", + name = "heli-flamethrower", + icon = "__base__/graphics/icons/flamethrower.png", + icon_size = 64, + flags = {"hidden"}, + subgroup = "gun", + order = "a[basic-clips]-b[tank-machine-gun]-c[flamethrower-ammo]", + attack_parameters = + { + type = "stream", + ammo_category = "flamethrower", + cooldown = 1, + movement_slow_down_factor = 0.4, + damage_modifier = settings.startup["heli-flamethrower-damage-modifier"].value, + gun_barrel_length = 0.8, + gun_center_shift = { 0, -1 }, + range = settings.startup["heli-flamethrower-range"].value, + min_range = 3, + cyclic_sound = + { + begin_sound = + { + { + filename = "__base__/sound/fight/flamethrower-start.ogg", + volume = 0.7 + } + }, + middle_sound = + { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.7 + } + }, + end_sound = + { + { + filename = "__base__/sound/fight/flamethrower-end.ogg", + volume = 0.7 + } + } + } + }, + stack_size = 1 + } +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/items/heli_gun.lua b/HelicopterRevival/prototypes/items/heli_gun.lua new file mode 100644 index 00000000..539d3db4 --- /dev/null +++ b/HelicopterRevival/prototypes/items/heli_gun.lua @@ -0,0 +1,41 @@ +data:extend({ + { + type = "gun", + name = "heli-gun", + icon = "__base__/graphics/icons/submachine-gun.png", + icon_size = 64, + flags = {"hidden"}, + subgroup = "gun", + order = "a[basic-clips]-b[tank-machine-gun]-c[flamethrower-ammo]", + attack_parameters = + { + type = "projectile", + ammo_category = "bullet", + cooldown = 4, + damage_modifier = settings.startup["heli-gun-damage-modifier"].value, + movement_slow_down_factor = 0.7, + shell_particle = + { + name = "shell-particle", + direction_deviation = 0.1, + speed = 0.1, + speed_deviation = 0.03, + center = {0, 0}, + creation_distance = -0.6875, + starting_frame_speed = 0.4, + starting_frame_speed_deviation = 0.1 + }, + projectile_center = {-0.15625, -0.07812}, + projectile_creation_distance = 1, + range = settings.startup["heli-gun-range"].value, + sound = + { + { + filename = "__base__/sound/fight/tank-cannon.ogg", + volume = 0.45 + } + }, + }, + stack_size = 1 + } +}) diff --git a/HelicopterRevival/prototypes/items/heli_item.lua b/HelicopterRevival/prototypes/items/heli_item.lua new file mode 100644 index 00000000..7ef30548 --- /dev/null +++ b/HelicopterRevival/prototypes/items/heli_item.lua @@ -0,0 +1,13 @@ +data:extend({ + { + type = "item-with-entity-data", + name = "heli-item", + icon = "__HelicopterRevival__/graphics/icons/heli.png", + icon_size = 64, + flags = {}, + subgroup = "transport", + order = "b[personal-transport]-c[heli]", + place_result = "heli-placement-entity-_-", + stack_size = 1 + } +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/items/heli_k2_anti_material_gun.lua b/HelicopterRevival/prototypes/items/heli_k2_anti_material_gun.lua new file mode 100644 index 00000000..c9d86943 --- /dev/null +++ b/HelicopterRevival/prototypes/items/heli_k2_anti_material_gun.lua @@ -0,0 +1,46 @@ +if not mods["Krastorio2"] or not data.raw["ammo-category"]["anti-material-rifle-ammo"] then + return +end + +local anti_material_rifle_shot_sound = { + variations = { + { + filename = "__Krastorio2Assets__/sounds/weapons/advanced-tank-anti-material-rifle-1.ogg", + volume = 0.35, + }, + { + filename = "__Krastorio2Assets__/sounds/weapons/advanced-tank-anti-material-rifle-2.ogg", + volume = 0.35, + }, + }, + aggregation = { + max_count = 2, + remove = false, + count_already_playing = true, + }, + } + +data:extend({ + { + type = "gun", + name = "heli-k2-anti-material-gun", + icon = "__HelicopterRevival__/graphics/icons/anti-material-rifle.png", + icon_size = 64, + flags = {}, + subgroup = "gun", + order = "d[heli-k2-anti-material-gun]", + attack_parameters = + { + type = "projectile", + ammo_category = "anti-material-rifle-ammo", + movement_slow_down_factor = 1.2, + cooldown = 20, + damage_modifier = settings.startup["heli-k2-anti-material-gun-damage-modifier"].value, + projectile_creation_distance = 0.6, + range = settings.startup["heli-k2-anti-material-gun-range"].value, + projectile_center = {-0.17, 0}, + sound = anti_material_rifle_shot_sound + }, + stack_size = 1 + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/items/heli_rocket_launcher_item.lua b/HelicopterRevival/prototypes/items/heli_rocket_launcher_item.lua new file mode 100644 index 00000000..4e1f7c63 --- /dev/null +++ b/HelicopterRevival/prototypes/items/heli_rocket_launcher_item.lua @@ -0,0 +1,30 @@ +data:extend({ + { + type = "gun", + name = "heli-rocket-launcher-item", + icon = "__HelicopterRevival__/graphics/icons/rocket_pod.png", + icon_size = 64, + flags = {}, + subgroup = "gun", + order = "d[rocket-launcher]", + attack_parameters = + { + type = "projectile", + ammo_category = "rocket", + movement_slow_down_factor = 1.2, + cooldown = 20, + damage_modifier = settings.startup["heli-rocket-damage-modifier"].value, + projectile_creation_distance = 0.6, + range = settings.startup["heli-rocket-launcher-range"].value, + projectile_center = {-0.17, 0}, + sound = + { + { + filename = "__base__/sound/fight/rocket-launcher.ogg", + volume = 0.7 + } + } + }, + stack_size = 50 + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/items/remote_items.lua b/HelicopterRevival/prototypes/items/remote_items.lua new file mode 100644 index 00000000..362a1f9a --- /dev/null +++ b/HelicopterRevival/prototypes/items/remote_items.lua @@ -0,0 +1,26 @@ +data:extend({ + { + type = "item", + name = "heli-remote-equipment", + icon = "__HelicopterRevival__/graphics/icons/heli-remote-icon.png", + icon_size = 64, + placed_as_equipment_result = "heli-remote-equipment", + flags = {}, + subgroup = "equipment", + order = "g[heli-remote]-a[heli-remote-item]", + stack_size = 1, + default_request_amount = 1, + }, + { + type = "item", + name = "heli-pad-item", + icon = "__HelicopterRevival__/graphics/icons/heli_pad.png", + icon_size = 64, + flags = {}, + subgroup = "transport", + order = "b[personal-transport]-d[heli-pad-item]", + place_result = "heli-pad-placement-entity", + stack_size = 10 + }, +}) + diff --git a/HelicopterRevival/prototypes/recipes/heli_recipe.lua b/HelicopterRevival/prototypes/recipes/heli_recipe.lua new file mode 100644 index 00000000..dfb7f22a --- /dev/null +++ b/HelicopterRevival/prototypes/recipes/heli_recipe.lua @@ -0,0 +1,16 @@ +data:extend({ + { + type = "recipe", + name = "heli-recipe", + enabled = false, + ingredients = { + {"engine-unit", 150}, + {"steel-plate", 150}, + {"iron-gear-wheel", 250}, + {"processing-unit", 250}, + {"gun-turret", 10}, + {"rocket-launcher", 10}, + }, + result = "heli-item", + } +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/recipes/remote_recipes.lua b/HelicopterRevival/prototypes/recipes/remote_recipes.lua new file mode 100644 index 00000000..1aef6ae9 --- /dev/null +++ b/HelicopterRevival/prototypes/recipes/remote_recipes.lua @@ -0,0 +1,25 @@ +data:extend({ + { + type = "recipe", + name = "heli-remote-recipe", + enabled = false, + energy_required = 15, + ingredients = { + {"processing-unit", 125}, + {"battery", 50}, + {"plastic-bar", 40}, + {"iron-stick", 2}, + }, + result = "heli-remote-equipment", + }, + { + type = "recipe", + name = "heli-pad-recipe", + enabled = false, + energy_required = 5, + ingredients = { + {"refined-concrete", 50}, + }, + result = "heli-pad-item", + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/signals/signals.lua b/HelicopterRevival/prototypes/signals/signals.lua new file mode 100644 index 00000000..105d1e32 --- /dev/null +++ b/HelicopterRevival/prototypes/signals/signals.lua @@ -0,0 +1,20 @@ +data:extend( +{ + { + type = "virtual-signal", + name = "signal-heli-fuel-warning", + icon = "__HelicopterRevival__/graphics/icons/fuel_warning.png", + icon_size = 64, + subgroup = "virtual-signal-number", + order = "e[warnings]-[1]" + }, + + { + type = "virtual-signal", + name = "signal-heli-fuel-warning-critical", + icon = "__core__/graphics/icons/alerts/fuel-icon-red.png", + icon_size = 64, + subgroup = "virtual-signal-number", + order = "e[warnings]-[2]" + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/sounds/sounds.lua b/HelicopterRevival/prototypes/sounds/sounds.lua new file mode 100644 index 00000000..772c66e7 --- /dev/null +++ b/HelicopterRevival/prototypes/sounds/sounds.lua @@ -0,0 +1,8 @@ +data:extend({ + { + type = "sound", + name = "heli-fuel-warning", + filename = "__HelicopterRevival__/sound/fuel_warning.ogg", + volume = 0.5, + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/sprites/sprites.lua b/HelicopterRevival/prototypes/sprites/sprites.lua new file mode 100644 index 00000000..8efeab18 --- /dev/null +++ b/HelicopterRevival/prototypes/sprites/sprites.lua @@ -0,0 +1,113 @@ +data:extend({ + { + type = "sprite", + name = "heli_to_player", + filename = "__HelicopterRevival__/graphics/icons/to_player.png", + priority = "medium", + width = 64, + height = 64, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_to_map", + filename = "__HelicopterRevival__/graphics/icons/map.png", + priority = "medium", + width = 64, + height = 64, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_to_pad", + filename = "__HelicopterRevival__/graphics/icons/to_pad.png", + priority = "medium", + width = 64, + height = 64, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_stop", + filename = "__HelicopterRevival__/graphics/icons/stop.png", + priority = "medium", + width = 64, + height = 64, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_gui_selected", + filename = "__HelicopterRevival__/graphics/gui/selected.png", + priority = "medium", + width = 210, + height = 210, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_search_icon", + filename = "__HelicopterRevival__/graphics/gui/search-icon.png", + priority = "medium", + width = 15, + height = 15, + shift = {-17, 1}, + flags = {"icon"}, + }, + + { + type = "sprite", + name = "heli_void_128", + filename = "__HelicopterRevival__/graphics/gui/gauges/void_128.png", + priority = "medium", + width = 128, + height = 128, + }, + + { + type = "sprite", + name = "heli_gauge_fs", + filename = "__HelicopterRevival__/graphics/gui/gauges/gauge_fs.png", + width = 128, + height = 128, + priority = "extra-high-no-scale", + }, + + { + type = "sprite", + name = "heli_gauge_fs_led_fuel", + filename = "__HelicopterRevival__/graphics/gui/gauges/gauge_fs_led_fuel.png", + width = 128, + height = 128, + priority = "extra-high-no-scale", + }, + + { + type = "sprite", + name = "heli_gauge_hr", + filename = "__HelicopterRevival__/graphics/gui/gauges/gauge_hr.png", + width = 128, + height = 128, + priority = "extra-high-no-scale", + }, +}) + +gauge_pointers = {} + +for i = 0, 127 do + table.insert(gauge_pointers, { + type = "sprite", + name = "heli_gauge_pointer_" .. tostring(i), + filename = "__HelicopterRevival__/graphics/gui/gauges/pointers/pointer-" .. tostring(i) .. ".png", + priority = "medium", + width = 128, + height = 128, + }) +end + +data:extend(gauge_pointers) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/style/style.lua b/HelicopterRevival/prototypes/style/style.lua new file mode 100644 index 00000000..e1bf2abc --- /dev/null +++ b/HelicopterRevival/prototypes/style/style.lua @@ -0,0 +1,143 @@ +--[[data.raw["gui-style"].default["heli-listbox_button"] = +{ + type = "button_style", + parent = "button", + font = "default-bold", + align = "left", + scalable = true, + + --maximal_height = 33, + minimal_height = 33, + --maximal_width = 33, + minimal_width = 33, + + left_click_sound = + { + { + filename = "__core__/sound/list-box-click.ogg", + volume = 1 + } + }, + + default_font_color={r=1, g=1, b=1}, + default_graphical_set = + { + type = "composition", + filename = "__HelicopterRevival__/graphics/gui/black.png", + priority = "extra-high-no-scale", + position = {0, 0} + }, + + hovered_font_color={r=1, g=1, b=1}, + hovered_graphical_set = + { + type = "composition", + filename = "__HelicopterRevival__/graphics/gui/grey.png", + priority = "extra-high-no-scale", + corner_size = {0, 0}, + position = {0, 0} + }, + + clicked_font_color = {r=0, g=0, b=0}, + clicked_graphical_set = + { + type = "composition", + filename = "__HelicopterRevival__/graphics/gui/orange.png", + priority = "extra-high-no-scale", + corner_size = {0, 0}, + position = {0, 0} + }, +} +--]] +data.raw["gui-style"].default["heli-listbox_button"] = + { + type = "button_style", + parent = "button", + font = "default-bold", + --maximal_height = 33, + minimal_height = 33, + --maximal_width = 33, + minimal_width = 33, + --top_padding = 0, + --bottom_padding = 0, + --right_padding = 0, + --left_padding = 0, + left_click_sound = { + { + filename = "__core__/sound/gui-click.ogg", + volume = 1 + } + }, + right_click_sound = { + { + filename = "__core__/sound/gui-click.ogg", + volume = 1 + } + } + } + +function makeButtonStyle(width, height, image, padding) + padding = padding or {} + + return { + type = "button_style", + parent = "button", + scalable = true, + + width = width, + height = height, + + top_padding = padding.top or 0, + right_padding = padding.right or 0, + bottom_padding = padding.bottom or 0, + left_padding = padding.left or 0, + + --[[ default_graphical_set = + { + type = "monolith", + monolith_image = + { + filename = image, + priority = "extra-high-no-scale", + width = width, + height = height, + priority = "extra-high-no-scale", + }, + stretch_monolith_image_to_size = false + }, + + hovered_graphical_set = + { + type = "monolith", + monolith_image = + { + filename = image, + priority = "extra-high-no-scale", + width = width, + height = height, + x = width, + priority = "extra-high-no-scale", + }, + stretch_monolith_image_to_size = false + }, + + clicked_graphical_set = + { + type = "monolith", + monolith_image = + { + filename = image, + priority = "extra-high-no-scale", + width = width, + height = height, + x = width * 2, + priority = "extra-high-no-scale", + }, + stretch_monolith_image_to_size = false + },--]] + } +end + +data.raw["gui-style"].default["heli-clear_text_button"] = makeButtonStyle(15, 15, "__HelicopterRevival__/graphics/gui/clear-text.png", {top = 4}) +data.raw["gui-style"].default["heli-speaker_on_button"] = makeButtonStyle(15, 15, "__HelicopterRevival__/graphics/gui/speaker_on.png") +data.raw["gui-style"].default["heli-speaker_off_button"] = makeButtonStyle(15, 15, "__HelicopterRevival__/graphics/gui/speaker_off.png") \ No newline at end of file diff --git a/HelicopterRevival/prototypes/technologies/heli_technology.lua b/HelicopterRevival/prototypes/technologies/heli_technology.lua new file mode 100644 index 00000000..b762b094 --- /dev/null +++ b/HelicopterRevival/prototypes/technologies/heli_technology.lua @@ -0,0 +1,28 @@ +data:extend({ + { + type = "technology", + name = "heli-technology", + icon = "__HelicopterRevival__/graphics/technology/heli-technology.png", + icon_size = 256, + effects = + { + { + type = "unlock-recipe", + recipe = "heli-recipe" + }, + }, + prerequisites = {"automobilism", "advanced-electronics-2", "gun-turret", "rocketry"}, + unit = + { + count = 400, + ingredients = + { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 2}, + }, + time = 30 + }, + order = "e-d" + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/technologies/remote_technology.lua b/HelicopterRevival/prototypes/technologies/remote_technology.lua new file mode 100644 index 00000000..3c63c86c --- /dev/null +++ b/HelicopterRevival/prototypes/technologies/remote_technology.lua @@ -0,0 +1,33 @@ +data:extend({ + { + type = "technology", + name = "heli-remote-technology", + icon = "__HelicopterRevival__/graphics/technology/heli-remote-technology.png", + icon_size = 256, + effects = + { + { + type = "unlock-recipe", + recipe = "heli-remote-recipe" + }, + { + type = "unlock-recipe", + recipe = "heli-pad-recipe" + }, + }, + prerequisites = {"heli-technology", "concrete", "advanced-electronics-2", "battery", "modular-armor"}, + unit = + { + count = 450, + ingredients = + { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 2}, + {"utility-science-pack", 2}, + }, + time = 35 + }, + order = "e-d" + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/prototypes/tiles/heli-pad-concrete.lua b/HelicopterRevival/prototypes/tiles/heli-pad-concrete.lua new file mode 100644 index 00000000..a163a453 --- /dev/null +++ b/HelicopterRevival/prototypes/tiles/heli-pad-concrete.lua @@ -0,0 +1,8 @@ +require("util") + +local heliConcrete = table.deepcopy(data.raw.tile["refined-concrete"]) +heliConcrete.name = "heli-pad-concrete" +heliConcrete.minable = {hardness = 0.2, mining_time = 0.5} +heliConcrete.decorative_removal_probability = 1 + +data:extend({heliConcrete}) \ No newline at end of file diff --git a/HelicopterRevival/settings.lua b/HelicopterRevival/settings.lua new file mode 100644 index 00000000..abaec46d --- /dev/null +++ b/HelicopterRevival/settings.lua @@ -0,0 +1,158 @@ +data:extend({ + --------- Armory settings --------- + { + type = "double-setting", + name = "heli-gun-damage-modifier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.1, + }, + { + type = "int-setting", + name = "heli-gun-range", + setting_type = "startup", + default_value = 20, + minimum_value = 0, + }, + { + type = "double-setting", + name = "heli-flamethrower-damage-modifier", + setting_type = "startup", + default_value = 1.2, + minimum_value = 0.1, + }, + { + type = "int-setting", + name = "heli-flamethrower-range", + setting_type = "startup", + default_value = 50, + minimum_value = 0, + }, + { + type = "double-setting", + name = "heli-rocket-damage-modifier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.1, + }, + { + type = "int-setting", + name = "heli-rocket-launcher-range", + setting_type = "startup", + default_value = 30, + minimum_value = 0, + }, + { + type = "double-setting", + name = "heli-k2-anti-material-gun-damage-modifier", + setting_type = "startup", + default_value = 1, + minimum_value = 0.1, + }, + { + type = "int-setting", + name = "heli-k2-anti-material-gun-range", + setting_type = "startup", + default_value = 70, + minimum_value = 0, + }, + + ------------------------------ + { + type = "string-setting", + name = "heli-consumption", + setting_type = "startup", + default_value = "3.2MW", + }, + { + type = "string-setting", + name = "heli-braking-power", + setting_type = "startup", + default_value = "1MW", + }, + { + type = "int-setting", + name = "heli-weight", + setting_type = "startup", + default_value = 2800, + minimum_value = 0, + }, + + ------------- Misc ------------------- + { + type = "bool-setting", + name = "heli-deactivate-inserters", + setting_type = "runtime-global", + default_value = true, + }, + + { + type = "double-setting", + name = "heli-crash-dmg-mult", + setting_type = "runtime-global", + default_value = 1, + minimum_value = 0, + }, + + ---------------------------------------------- + + { + type = "bool-setting", + name = "heli-auto-focus-searchfields", + setting_type = "runtime-per-user", + default_value = false, + }, + + { + type = "double-setting", + name = "heli-gui-heliSelection-defaultZoom", + setting_type = "runtime-per-user", + default_value = 0.3, + minimum_value = 0.2, + maximum_value = 1.26, + }, + + { + type = "double-setting", + name = "heli-gui-heliPadSelection-defaultZoom", + setting_type = "runtime-per-user", + default_value = 0.2, + minimum_value = 0.025, + maximum_value = 1.0125, + }, + + { + type = "bool-setting", + name = "heli-gaugeGui-show", + setting_type = "runtime-per-user", + default_value = true, + }, + + { + type = "bool-setting", + name = "heli-gaugeGui-play-fuel-warning-sound", + setting_type = "runtime-per-user", + default_value = true, + }, + + { + type = "bool-setting", + name = "heli-fuel-alert", + setting_type = "runtime-per-user", + default_value = false, + }, + + { + type = "bool-setting", + name = "heli-remote-dont-auto-land-player", + setting_type = "runtime-per-user", + default_value = true, + }, + + { + type = "bool-setting", + name = "heli-remote-dont-land-following-player", + setting_type = "runtime-per-user", + default_value = false, + }, +}) \ No newline at end of file diff --git a/HelicopterRevival/sound/fuel_warning.ogg b/HelicopterRevival/sound/fuel_warning.ogg new file mode 100644 index 00000000..b4b1dbae Binary files /dev/null and b/HelicopterRevival/sound/fuel_warning.ogg differ diff --git a/HelicopterRevival/sound/heli_loop.ogg b/HelicopterRevival/sound/heli_loop.ogg new file mode 100644 index 00000000..bf3028ff Binary files /dev/null and b/HelicopterRevival/sound/heli_loop.ogg differ diff --git a/HelicopterRevival/sound/heli_shutdown.ogg b/HelicopterRevival/sound/heli_shutdown.ogg new file mode 100644 index 00000000..1f3f53e9 Binary files /dev/null and b/HelicopterRevival/sound/heli_shutdown.ogg differ diff --git a/HelicopterRevival/sound/heli_startup.ogg b/HelicopterRevival/sound/heli_startup.ogg new file mode 100644 index 00000000..3990e2cd Binary files /dev/null and b/HelicopterRevival/sound/heli_startup.ogg differ diff --git a/HelicopterRevival/stdlib/LICENSE b/HelicopterRevival/stdlib/LICENSE new file mode 100644 index 00000000..e0f74933 --- /dev/null +++ b/HelicopterRevival/stdlib/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2016, Afforess + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/HelicopterRevival/stdlib/area/area.lua b/HelicopterRevival/stdlib/area/area.lua new file mode 100644 index 00000000..f5891dcc --- /dev/null +++ b/HelicopterRevival/stdlib/area/area.lua @@ -0,0 +1,491 @@ +--- Tools for working with bounding boxes. +-- The tables passed into the Area functions are mutated in-place. +-- @module Area +-- @usage local Area = require('stdlib/area/area') +-- @see Position +-- @see Concepts.BoundingBox +-- @see Concepts.Position + +local Area = {_module_name = 'Area'} +setmetatable(Area, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Position = require('stdlib/area/position') + +--- By default area tables are mutated in place set this to true to make the tables immutable. +Area.immutable = false + +local function __call(_, ...) + if type((...)) == 'table' then + return Area.new(...) + else + return Area.construct(...) + end +end +Area:set_caller(__call) + +--- Converts an area in either array or table format to an area with a metatable. +-- Returns itself if it already has a metatable +-- @tparam Concepts.BoundingBox area the area to convert +-- @tparam boolean new_copy return a new copy +-- @treturn Concepts.BoundingBox a converted area +function Area.new(area, new_copy) + Is.Assert.Table(area, 'missing area value') + + local copy = new_copy or Area.immutable + if not copy and getmetatable(area) == Area._mt then + return area + end + + local left_top = Position.new(area.left_top or area[1], true) + local right_bottom = Position.new(area.right_bottom or area[2], true) + local new = {left_top = left_top, right_bottom = right_bottom, orientation = area.orientation} + return setmetatable(new, Area._mt) +end + +--- Creates an area from the two positions p1 and p2. +-- @tparam[opt=0] number x1 x-position of left_top, first position +-- @tparam[opt=0] number y1 y-position of left_top, first position +-- @tparam[opt=0] number x2 x-position of right_bottom, second position +-- @tparam[opt=0] number y2 y-position of right_bottom, second position +-- @treturn Concepts.BoundingBox the area in a table format +function Area.construct(...) + local args = {...} + + --self was passed as first argument + local t = (type(args[1]) == 'table' and 1) or 0 + + local lt_x, lt_y = args[1 + t] or 0, args[2 + t] or 0 + local rb_x, rb_y = args[3 + t] or 0, args[4 + t] + + return Area.new {{lt_x, lt_y}, {rb_x, rb_y}} +end + +--- Creates an area that is a copy of the given area. +-- @tparam Concepts.BoundingBox area the position to copy +-- @treturn Concepts.BoundingBox a new area that is a copy of the passed area +function Area.copy(area) + return Area.new(area, true) +end + +--- Loads the metatable into the passed Area without creating a new one. +-- @tparam Concepts.BoundingBox pos the Area to load the metatable onto +-- @treturn Concepts.BoundingBox the Area with metatable attached +function Area.load(area) + Is.Assert.Area(area, 'area missing or malformed') + return setmetatable(area, Area._mt) +end + +local function validate_vector(amount) + Is.Assert(amount, 'Missing amount to adjust by') + + if type(amount) == 'number' then + if amount < 0 then + error('Can not shrink or expand area by a negative amount!', 2) + end + return amount, amount + elseif type(amount) == 'table' and assert(amount[1], 'missing x vector') then + return amount[1], assert(amount[2], 'missing y vector') + else + error('amount is neither a vector or number', 2) + end +end + +--- Return a non zero sized area by expanding if needed +-- @tparam Concepts.BoundingBox area the area to check +-- @tparam number|Concepts.Vector amount the amount to expand +-- @treturn Concepts.BoundingBox the area +function Area.non_zero(area, amount) + area = Area.new(area) + amount = amount or .01 + + return Area.size(area) == 0 and Area.expand(area, amount) or area +end + +--- Shrinks the area by the given amount. +-- The area shrinks inwards from top-left towards the bottom-right, and from bottom-right towards the top-left. +-- @tparam Concepts.BoundingBox area the area to shrink +-- @tparam number|Concepts.Vector amount the amount to shrink +-- @treturn Concepts.BoundingBox the area reduced by amount +function Area.shrink(area, amount) + area = Area.new(area) + local x, y = validate_vector(amount) + + area.left_top.x = area.left_top.x + x + area.left_top.y = area.left_top.y + y + + area.right_bottom.x = area.right_bottom.x - x + area.right_bottom.y = area.right_bottom.y - y + + return area +end + +--- Expands the size of an area by the given amount. +-- @tparam Concepts.BoundingBox area the area +-- @tparam number|Concepts.Vector amount to expand each edge of the area outwards by +-- @treturn Concepts.BoundingBox the area expanded by amount +-- @see Area.shrink +function Area.expand(area, amount) + area = Area.new(area) + local x, y = validate_vector(amount) + + area.left_top.x = area.left_top.x - x + area.left_top.y = area.left_top.y - y + + area.right_bottom.x = area.right_bottom.x + x + area.right_bottom.y = area.right_bottom.y + y + + return area +end + +--- Adjust an area by shrinking or expanding. +-- Imagine pinching & holding with fingers the top-left & bottom-right corners of a 2D box and pulling outwards to expand and pushing inwards to shrink the box. +-- @usage local area = Area.adjust({{-2, -2}, {2, 2}}, {4, -1}) +-- -- returns {left_top = {x = -6, y = -1}, right_bottom = {x = 6, y = 1}} +-- @tparam Concepts.BoundingBox area the area to adjust +-- @tparam Concepts.Vector vector the vectors to use +-- @treturn Concepts.BoundingBox the adjusted bounding box +function Area.adjust(area, vector) + area = Area.new(area) + Is.Assert(vector, 'missing vector value') + + --shrink or expand on x vector + if assert(vector[1], 'x vector missing') > 0 then + area = Area.expand(area, {vector[1], 0}) + elseif vector[1] < 0 then + area = Area.shrink(area, {math.abs(vector[1]), 0}) + end + + --shrink or expand on y vector + if assert(vector[2], 'missing y vector') > 0 then + area = Area.expand(area, {0, vector[2]}) + elseif vector[2] < 0 then + area = Area.shrink(area, {0, math.abs(vector[2])}) + end + + return area +end + +--- Rotate an area such that its value of the width becomes the height, and its value of the height becomes the width. +-- @tparam Concepts.BoundingBox area the area to rotate +-- @treturn Concepts.BoundingBox the rotated area +function Area.rotate(area) + area = Area.new(area) + local _, w, h = Area.size(area) + if w == h then + return area -- no point rotating a square + elseif h > w then + local rad = h / 2 - w / 2 + return Area.adjust(area, {rad, -rad}) + elseif w > h then + local rad = w / 2 - h / 2 + return Area.adjust(area, {-rad, rad}) + end +end + +--- Offsets the area by the `{x, y}` values. +-- @tparam Concepts.BoundingBox area the area to offset +-- @tparam Concepts.Position pos the position to which the area will offset +-- @treturn Concepts.BoundingBox the area offset by the position +function Area.offset(area, pos) + area = Area.new(area) + pos = Position.new(pos) + + area.left_top = Position.add(area.left_top, pos) + area.right_bottom = Position.add(area.right_bottom, pos) + + return area +end + +--- Translates an area in the given direction. +-- @tparam Concepts.BoundingBox area the area to translate +-- @tparam defines.direction direction the direction of translation +-- @tparam number distance the distance of the translation +-- @treturn Concepts.BoundingBox the area translated +function Area.translate(area, direction, distance) + Is.Assert.Number(direction, 'missing direction argument') + + area = Area.new(area) + distance = distance or 1 + + area.left_top = Position.translate(area.left_top, direction, distance) + area.right_bottom = Position.translate(area.right_bottom, direction, distance) + return area +end + +--- Rounds down the xy-values in `area.left_top` and rounds up the xy-values in `area.right_bottom`. +-- @usage +-- local position1 = {x = 1.5, y = 1.5} +-- local position2 = {x = 1.5, y = 1.5} +-- local area = {left_top = position1, right_bottom = position2} +-- Area.round_to_integer(area) --> {left_top = {x = 1, y = 1}, right_bottom = {x = 2, y = 2}} +-- @tparam Concepts.BoundingBox area the area to round +-- @treturn Concepts.BoundingBox the area with rounded positions +function Area.round_to_integer(area) + area = Area.new(area) + + area.left_top = Position {x = math.floor(area.left_top.x), y = math.floor(area.left_top.y)} + area.right_bottom = Position {x = math.ceil(area.right_bottom.x), y = math.ceil(area.right_bottom.y)} + return area +end + +--- Normalizes the given area. +--
    +--
  • Swaps the values between `right_bottom.x` & `left_top.x` **IF** `right_bottom.x` < `left_top.x` +--
  • Swaps the values between `right_bottom.y` & `left_top.y` **IF** `right_bottom.y` < `left_top.y` +--
+-- Essentially, the normalization process constructs a new area out of the swapped coordinates. +-- @tparam Concepts.BoundingBox area the area to normalize +-- @treturn Concepts.BoundingBox the normalized area +function Area.normalize(area) + area = Area.new(area) + + local left_top = area.left_top + local right_bottom = area.right_bottom + + if right_bottom.x < left_top.x then + local x = left_top.x + left_top.x = right_bottom.x + right_bottom.x = x + end + + if right_bottom.y < left_top.y then + local y = left_top.y + left_top.y = right_bottom.y + right_bottom.y = y + end + + return area +end + +--- Gets the center positions of the tiles where the given area's two positions reside. +-- @tparam Concepts.BoundingBox area the area to examine +-- @treturn Concepts.BoundingBox the area with its two positions at the center of the tiles in which they reside +function Area.tile_center_points(area) + area = Area.new(area) + + area.left_top = Position.center(area.left_top) + area.right_bottom = Position.center(area.right_bottom) + return area +end + +--- Calculates the center of the area and returns the position. +-- @tparam Concepts.BoundingBox area the area +-- @treturn Concepts.Position the center of the area +function Area.center(area) + area = Area.new(area) + + local dist_x = area.right_bottom.x - area.left_top.x + local dist_y = area.right_bottom.y - area.left_top.y + + return Position.new {area.left_top.x + (dist_x / 2), area.left_top.y + (dist_y / 2)} +end + +--- Returns true if two areas are the same. +-- @tparam Concepts.BoundingBox area1 +-- @tparam Concepts.BoundingBox area2 +-- @treturn boolean true if areas are the same +function Area.compare(area1, area2) + if not area1 or not area2 then + return false + end + area1 = Area.new(area1) + area2 = Area.new(area2) + + local orientation = (area1.orientation or 0) == (area2.orientation or 0) + + return orientation and area1.left_top == area2.left_top and area1.right_bottom == area2.right_bottom +end + +--- Gets the properties of the given area. +-- This function returns a total of four values that represent the properties of the given area. +-- @tparam Concepts.BoundingBox area the area from which to get the size +-- @treturn number the size of the area — (width × height) +-- @treturn number the width of the area +-- @treturn number the height of the area +-- @treturn number the perimeter of the area — (2 × (width + height)) +function Area.size(area) + area = Area.new(area) + + local left_top = area.left_top + local right_bottom = area.right_bottom + + local width = math.abs(left_top.x - right_bottom.x) + local height = math.abs(left_top.y - right_bottom.y) + local area_size = width * height + local perimeter = width + width + height + height + return area_size, width, height, perimeter +end + +--- Compares the size of two areas. +-- note: The shame of either area is not taking into consideration, see @{Area.compare} +-- @tparam Concepts.BoundingBox area1 +-- @tparam Concepts.BoundingBox area2 +-- @treturn boolean is area1 the same size as area2 +function Area.equals(area1, area2) + if not area1 or not area2 then + return false + end + area1 = Area.new(area1) + area2 = Area.new(area2) + + return Area.size(area1) == Area.size(area2) +end + +--- Is area1 smaller in size than area2 +-- @tparam Concepts.BoundingBox area1 +-- @tparam Concepts.BoundingBox area2 +-- @treturn boolean is area1 less than area2 in size +function Area.less_than(area1, area2) + if not area1 or not area2 then + return false + end + area1 = Area.new(area1) + area2 = Area.new(area2) + + return Area.size(area1) < Area.size(area2) +end + +--- Is area1 smaller in size than area2 +-- @tparam Concepts.BoundingBox area1 +-- @tparam Concepts.BoundingBox area2 +-- @treturn boolean is area1 less than or equal to area2 in size +-- @local +function Area.less_than_eq(area1, area2) + if not area1 or not area2 then + return false + end + area1 = Area.new(area1) + area2 = Area.new(area2) + + return Area.size(area1) <= Area.size(area2) +end + +--- Tests if a position {x, y} is located in an area (including the border). +-- @tparam Concepts.BoundingBox area the search area +-- @tparam Concepts.Position pos the position to check +-- @treturn boolean true if the position is located in the area +function Area.inside(area, pos) + area = Area.new(area) + pos = Position.new(pos) + + local left_top = area.left_top + local right_bottom = area.right_bottom + return pos.x >= left_top.x and pos.y >= left_top.y and pos.x <= right_bottom.x and pos.y <= right_bottom.y +end + +--- Converts an area to a string. +-- @tparam Concepts.BoundingBox area the area to convert +-- @treturn string the string representation of the area +function Area.tostring(area) + area = Area.new(area) + + local left_top = 'left_top = ' .. area.left_top + local right_bottom = 'right_bottom = ' .. area.right_bottom + + local orientation = area.orientation and ', ' .. area.orientation or '' + + return '{' .. left_top .. ', ' .. right_bottom .. orientation .. '}' +end + +--- Iterates an area. +-- @usage +-- for x,y in Area.iterate({{0, -5}, {3, -3}}) do +-- ... +-- end +-- @tparam Concepts.BoundingBox area the area to iterate +-- @treturn function an iterator +function Area.iterate(area) + area = Area.new(area) + + local iterator = {idx = 0} + function iterator.iterate(area) --luacheck: ignore area + local rx = area.right_bottom.x - area.left_top.x + 1 + local dx = iterator.idx % rx + local dy = math.floor(iterator.idx / rx) + iterator.idx = iterator.idx + 1 + if (area.left_top.y + dy) > area.right_bottom.y then + return + end + return (area.left_top.x + dx), (area.left_top.y + dy) + end + return iterator.iterate, area, 0 +end + +--- Iterates the given area in a spiral as depicted below, from innermost to the outermost location. +--

![](http://i.imgur.com/EwfO0Es.png) +-- @usage for x, y in Area.spiral_iterate({{-2, -1}, {2, 1}}) do +-- print('(' .. x .. ', ' .. y .. ')') +-- end +-- prints: (0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1) (2, -1) (2, 0) (2, 1) (-2, 1) (-2, 0) (-2, -1) +-- @tparam Concepts.BoundingBox area the area on which to perform a spiral iteration +-- @treturn function an iterator +function Area.spiral_iterate(area) + area = Area.new(area) + + local rx = area.right_bottom.x - area.left_top.x + 1 + local ry = area.right_bottom.y - area.left_top.y + 1 + local half_x = math.floor(rx / 2) + local half_y = math.floor(ry / 2) + local center_x = area.left_top.x + half_x + local center_y = area.left_top.y + half_y + + local x = 0 + local y = 0 + local dx = 0 + local dy = -1 + local iterator = {list = {}, idx = 1} + for _ = 1, math.max(rx, ry) * math.max(rx, ry) do + if -(half_x) <= x and x <= half_x and -(half_y) <= y and y <= half_y then + table.insert(iterator.list, {x, y}) + end + if x == y or (x < 0 and x == -y) or (x > 0 and x == 1 - y) then + local temp = dx + dx = -(dy) + dy = temp + end + x = x + dx + y = y + dy + end + + function iterator.iterate() + if #iterator.list < iterator.idx then + return + end + local x2, y2 = unpack(iterator.list[iterator.idx]) + iterator.idx = iterator.idx + 1 + + return (center_x + x2), (center_y + y2) + end + return iterator.iterate, area, 0 +end + +function Area.shrink_to_surface_size(area, surface) + area = Area.new(area) + local w, h = surface.map_gen_settings.width, surface.map_gen_settings.height + if math.abs(area.left_top.x) > w / 2 then + area.left_top.x = -(w / 2) + area.right_bottom.x = (w / 2) + end + if math.abs(area.left_top.y) > w / 2 then + area.left_top.y = -(h / 2) + area.right_bottom.y = (h / 2) + end + return area +end + +--- Area tables are returned with these Metamethods attached. +-- @table Metamethods +Area._mt = { + __index = Area, -- If key is not found, see if there is one available in the Area module. + __add = Area.expand, -- Will expand the area by the number or vector on the RHS. + __sub = Area.shrink, -- Will shrink the area by the number or vector on the RHS. + __tostring = Area.tostring, -- Will print a string representation of the area. + __eq = Area.equals, -- Is the size of area1 the same as area2. + __lt = Area.less_than, --is the size of area1 less than area2. + __len = Area.size, -- The size of the area. + __concat = Area._concat, -- calls tostring on both sides of concat. + __call = Area.copy -- Return a new copy +} + +return Area diff --git a/HelicopterRevival/stdlib/area/chunk.lua b/HelicopterRevival/stdlib/area/chunk.lua new file mode 100644 index 00000000..ac3e8f6f --- /dev/null +++ b/HelicopterRevival/stdlib/area/chunk.lua @@ -0,0 +1,131 @@ +--- For working with chunks. +-- A chunk represents a 32 tile2 on a surface in Factorio. +-- @module Chunk +-- @usage local Chunk = require('stdlib/area/chunk') +-- @see Concepts.ChunkPosition + +local Chunk = {_module_name = 'Chunk'} +setmetatable(Chunk, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Area = require('stdlib/area/area') +local Position = require('stdlib/area/position') + +local MAX_UINT = 4294967296 + +--- Gets the chunk position of a chunk where the specified position resides. +-- @tparam Concepts.Position position a position residing somewhere in a chunk +-- @treturn Concepts.ChunkPosition the chunk position +-- @usage local chunk_x = Chunk.from_position(pos).x +function Chunk.from_position(position) + position = Position.new(position) + local x = math.floor(position.x) + local y = math.floor(position.y) + local chunk_x = bit32.arshift(x, 5) + if x < 0 then + chunk_x = chunk_x - MAX_UINT + end + local chunk_y = bit32.arshift(y, 5) + if y < 0 then + chunk_y = chunk_y - MAX_UINT + end + return Position.new({x = chunk_x, y = chunk_y}) +end + +--- Gets the area of a chunk from the specified chunk position. +-- @tparam Concepts.ChunkPosition chunk_pos the chunk position +-- @treturn Concepts.BoundingBox the chunk's area +function Chunk.to_area(chunk_pos) + chunk_pos = Position.new(chunk_pos) + + local left_top = Position.new({x = chunk_pos.x * 32, y = chunk_pos.y * 32}) + + local right_bottom = Position.offset(Position.copy(left_top), 32, 32) + + return Area.new({left_top = left_top, right_bottom = right_bottom}) +end + +--- Gets the user data that is associated with a chunk. +-- The user data is stored in the global object and it persists between loads. +-- @tparam LuaSurface surface the surface on which the user data is looked up +-- @tparam Concepts.ChunkPosition chunk_pos the chunk position on which the user data is looked up +-- @tparam[opt] Mixed default_value the user data to set for the chunk and returned if the chunk had no user data +-- @treturn ?|nil|Mixed the user data **OR** *nil* if it does not exist for the chunk and if no default_value was set +function Chunk.get_data(surface, chunk_pos, default_value) + Is.Assert(surface, 'missing surface argument') + Is.Assert(chunk_pos, 'missing chunk_pos argument') + if not global._chunk_data then + if not default_value then + return nil + end + global._chunk_data = {} + end + + local idx = Chunk.get_index(surface, chunk_pos) + local val = global._chunk_data[idx] + if not val then + global._chunk_data[idx] = default_value + val = default_value + end + + return val, idx +end + +--- Associates the user data to a chunk. +-- The user data will be stored in the global object and it will persist between loads. +-- @tparam LuaSurface surface the surface on which the user data will reside +-- @tparam Concepts.ChunkPosition chunk_pos the chunk position to associate with the user data +-- @tparam ?|nil|Mixed data the user data to set **OR** *nil* to erase the existing user data for the chunk +-- @treturn ?|nil|Mixed the previous user data associated with the chunk **OR** *nil* if the chunk had no previous user data +function Chunk.set_data(surface, chunk_pos, data) + Is.Assert(surface, 'missing surface argument') + Is.Assert(chunk_pos, 'missing chunk_pos argument') + + if not global._chunk_data then + global._chunk_data = {} + end + + local idx = Chunk.get_index(surface, chunk_pos) + local prev = global._chunk_data[idx] + global._chunk_data[idx] = data + + return prev +end + +--- Calculates and returns a stable and deterministic integer ID of a chunk from a given chunk position. +-- The chunk ID will not change once it is calculated. +-- @tparam LuaSurface surface the surface the chunk is on +-- @tparam Concepts.ChunkPosition chunk_pos +-- @treturn int the chunk ID +function Chunk.get_index(surface, chunk_pos) + Is.Assert(surface, 'missing surface argument') + Is.Assert(chunk_pos, 'missing chunk_pos argument') + + if not global._next_chunk_index then + global._next_chunk_index = 0 + end + if not global._chunk_indexes then + global._chunk_indexes = {} + end + + if type(surface) ~= table then + surface = game.surfaces[surface] + end + local surface_idx = surface.index + if not global._chunk_indexes[surface_idx] then + global._chunk_indexes[surface_idx] = {} + end + + local surface_chunks = global._chunk_indexes[surface_idx] + if not surface_chunks[chunk_pos.x] then + surface_chunks[chunk_pos.x] = {} + end + if not surface_chunks[chunk_pos.x][chunk_pos.y] then + surface_chunks[chunk_pos.x][chunk_pos.y] = global._next_chunk_index + global._next_chunk_index = global._next_chunk_index + 1 + end + + return surface_chunks[chunk_pos.x][chunk_pos.y] +end + +return Chunk diff --git a/HelicopterRevival/stdlib/area/position.lua b/HelicopterRevival/stdlib/area/position.lua new file mode 100644 index 00000000..392af773 --- /dev/null +++ b/HelicopterRevival/stdlib/area/position.lua @@ -0,0 +1,353 @@ +--- Tools for working with `` coordinates. +-- The tables passed into the Position functions are mutated in-place. +-- @module Position +-- @usage local Position = require('stdlib/area/position') +-- @see Area +-- @see Concepts.Position +-- @see defines.direction + +local Position = { + _module_name = 'Position' +} +setmetatable(Position, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +--- By default position tables are mutated in place set this to true to make the tables immutable. +Position.immutable = false + +local function __call(_, ...) + if type((...)) == 'table' then + return Position.new(...) + else + return Position.construct(...) + end +end +Position:set_caller(__call) + +--- Machine Epsilon +-- @see wiki Machine_epsilon +-- @return epsilon +Position.epsilon = 1.19e-07 + +--- Returns a correctly formated position object. +-- @usage Position.new({0, 0}) -- returns {x = 0, y = 0} +-- @tparam Concepts.Position pos the position table or array to convert +-- @tparam[opt=false] boolean new_copy return a new copy +-- @treturn Concepts.Position itself or a new correctly formated position with metatable +function Position.new(pos, new_copy) + Is.Assert.Table(pos, 'missing position argument') + + local copy = new_copy or Position.immutable + if not copy and getmetatable(pos) == Position._mt then + return pos + end + + local new = {x = pos.x or pos[1], y = pos.y or pos[2]} + return setmetatable(new, Position._mt) +end + +--- Creates a table representing the position from x and y. +-- @tparam number x x-position +-- @tparam number y y-position +-- @treturn Concepts.Position +function Position.construct(...) + local args = {...} + + --self was passed as first argument + local t = (type(args[1]) == 'table' and 1) or 0 + + local x = args[1 + t] or 0 + local y = args[2 + t] or 0 + return Position.new({x = x, y = y}) +end + +--- Creates a position that is a copy of the given position. +-- @tparam Concepts.Position pos the position to copy +-- @treturn Concepts.Position a new position with values identical to the given position +function Position.copy(pos) + return Position.new(pos, true) +end + +--- Loads the metatable into the passed position without creating a new one. +-- @tparam Concepts.Position pos the position to load the metatable onto +-- @treturn Concepts.Position the position with metatable attached +function Position.load(pos) + Is.Assert.Table(pos, 'position missing or malformed') + return setmetatable(pos, Position._mt) +end + +--- Converts a position to a string. +-- @tparam Concepts.Position pos the position to convert +-- @treturn string string representation of the position +function Position.tostring(pos) + pos = Position.new(pos) + return '{x = ' .. pos.x .. ', y = ' .. pos.y .. '}' +end + +--- Adds two positions. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position or vector +-- @treturn Concepts.Position a new position → { x = pos1.x + pos2.x, y = pos1.y + pos2.y} +function Position.add(pos1, ...) + pos1 = Position.new(pos1) + local pos2 = Position(...) + + return Position.new({x = pos1.x + pos2.x, y = pos1.y + pos2.y}) +end + +--- Subtracts two positions. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position +-- @treturn Concepts.Position a new position → { x = pos1.x - pos2.x, y = pos1.y - pos2.y } +function Position.subtract(pos1, ...) + pos1 = Position.new(pos1) + local pos2 = Position(...) + + return Position.new({x = pos1.x - pos2.x, y = pos1.y - pos2.y}) +end + +--- Tests whether or not the two given positions are equal. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position +-- @treturn boolean true if positions are equal +function Position.equals(pos1, pos2) + if not pos1 or not pos2 then + return false + end + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + local epsilon = Position.epsilon + local abs = math.abs + return abs(pos1.x - pos2.x) < epsilon and abs(pos1.y - pos2.y) < epsilon +end + +function Position.less_than(pos1, pos2) + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + return pos1.x < pos2.x and pos1.y < pos2.y +end + +function Position.less_than_eq(pos1, pos2) + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + return pos1.x <= pos2.x and pos1.y <= pos2.y +end + +--- Creates a position that is offset by x,y coordinates. +-- @tparam Concepts.Position pos the position to offset +-- @tparam number x the amount to offset the position on the x-axis +-- @tparam number y the amount to offset the position on the y-axis +-- @treturn Concepts.Position a new position, offset by the x,y coordinates +function Position.offset(pos, x, y) + Is.Assert.Number(x, 'missing x-coordinate value') + Is.Assert.Number(y, 'missing y-coordinate value') + pos = Position.new(pos) + + pos.x = pos.x + x + pos.y = pos.y + y + return pos +end + +--- Translates a position in the given direction. +-- @tparam Concepts.Position pos the position to translate +-- @tparam defines.direction direction the direction of translation +-- @tparam number distance distance of the translation +-- @treturn Concepts.Position a new translated position +function Position.translate(pos, direction, distance) + Is.Assert.Number(direction, 'missing direction argument') + distance = distance or 1 + pos = Position.new(pos) + + if direction == defines.direction.north then + pos.x = pos.x + pos.y = pos.y - distance + elseif direction == defines.direction.northeast then + pos.x = pos.x + distance + pos.y = pos.y - distance + elseif direction == defines.direction.east then + pos.x = pos.x + distance + pos.y = pos.y + elseif direction == defines.direction.southeast then + pos.x = pos.x + distance + pos.y = pos.y + distance + elseif direction == defines.direction.south then + pos.x = pos.x + pos.y = pos.y + distance + elseif direction == defines.direction.southwest then + pos.x = pos.x - distance + pos.y = pos.y + distance + elseif direction == defines.direction.west then + pos.x = pos.x - distance + pos.y = pos.y + elseif direction == defines.direction.northwest then + pos.x = pos.x - distance + pos.y = pos.y - distance + end + return pos +end + +--- Expands a position to a square area. +-- @tparam Concepts.Position pos the position to expand into an area +-- @tparam number radius half of the side length of the area +-- @treturn Concepts.BoundingBox the area +function Position.expand_to_area(pos, radius) + pos = Position.new(pos) + Is.Assert.Number(radius, 'missing radius argument') + local Area = require('stdlib/area/area') + + local left_top = Position.new({pos.x - radius, pos.y - radius}) + local right_bottom = Position.new({pos.x + radius, pos.y + radius}) + + return Area({left_top = left_top, right_bottom = right_bottom}) +end + +--- Calculates the Euclidean distance squared between two positions, useful when sqrt is not needed. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position +-- @treturn number the square of the euclidean distance +function Position.distance_squared(pos1, pos2) + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + local axbx = pos1.x - pos2.x + local ayby = pos1.y - pos2.y + return axbx * axbx + ayby * ayby +end + +--- Calculates the Euclidean distance between two positions. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position +-- @treturn number the euclidean distance +function Position.distance(pos1, pos2) + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + return math.sqrt(Position.distance_squared(pos1, pos2)) +end + +--- Calculates the manhatten distance between two positions. +-- @tparam Concepts.Position pos1 the first position +-- @tparam Concepts.Position pos2 the second position +-- @treturn number the manhatten distance +-- @see https://en.wikipedia.org/wiki/Taxicab_geometry Taxicab geometry (manhatten distance) +function Position.manhattan_distance(pos1, pos2) + pos1 = Position.new(pos1) + pos2 = Position.new(pos2) + + return math.abs(pos2.x - pos1.x) + math.abs(pos2.y - pos1.y) +end + +--- Increment a position each time it is called. +-- This can be used to increment or even decrement a position quickly. +--

Do not store function closures in the global object; use them in the current tick. +-- @usage +-- local next_pos = Position.increment({0,0}) +-- for i = 1, 5 do next_pos(0,1) -- returns {x = 0, y = 1} {x = 0, y = 2} {x = 0, y = 3} {x = 0, y = 4} {x = 0, y = 5} +-- @usage +-- local next_pos = Position.increment({0, 0}, 1) +-- next_pos() -- returns {1, 0} +-- next_pos(0, 5) -- returns {1, 5} +-- next_pos(nil, 5) -- returns {2, 10} +-- @usage +-- local next_pos = Position.increment({0, 0}, 0, 1) +-- surface.create_entity{name = 'flying-text', text = 'text', position = next_pos()} +-- surface.create_entity{name = 'flying-text', text = 'text', position = next_pos()} -- creates two flying text entities 1 tile apart +-- @tparam Concepts.Position pos the position to start with +-- @tparam[opt=0] number inc_x optional increment x by this amount +-- @tparam[opt=0] number inc_y optional increment y by this amount +-- @tparam[opt=false] boolean increment_initial Whether the first use should be incremented +-- @treturn function @{increment_closure} a function closure that returns an incremented position +function Position.increment(pos, inc_x, inc_y, increment_initial) + pos = Position.new(pos) + + local x, y = pos.x, pos.y + inc_x, inc_y = inc_x or 0, inc_y or 0 + + --- + -- @function increment_closure A closure which the @{increment} function returns. + --> Do not call this directly and do not store this in the global object. + -- @see increment + -- @tparam[opt=0] number new_inc_x + -- @tparam[opt=0] number new_inc_y + -- @treturn Concepts.Position the incremented position + return function(new_inc_x, new_inc_y) + if increment_initial then + x = x + (new_inc_x or inc_x) + y = y + (new_inc_y or inc_y) + else + x = x + y = y + increment_initial = true + end + return Position.new({x, y}) + end +end + +--- Gets the center position of a tile where the given position resides. +-- @tparam Concepts.Position pos the position which resides somewhere on a tile +-- @treturn Concepts.Position the position at the center of the tile +function Position.center(pos) + pos = Position.new(pos) + + local x, y = pos.x, pos.y + x = x >= 0 and math.floor(x) + 0.5 or math.ceil(x) - 0.5 + y = y >= 0 and math.floor(y) + 0.5 or math.ceil(y) - 0.5 + pos.x = x + pos.y = y + return pos +end + +local opposites = + (defines and defines.direction) and + { + [defines.direction.north] = defines.direction.south, + [defines.direction.south] = defines.direction.north, + [defines.direction.east] = defines.direction.west, + [defines.direction.west] = defines.direction.east, + [defines.direction.northeast] = defines.direction.southwest, + [defines.direction.southwest] = defines.direction.northeast, + [defines.direction.northwest] = defines.direction.southeast, + [defines.direction.southeast] = defines.direction.northwest + } or + {[0] = 4, [1] = 5, [2] = 6, [3] = 7, [4] = 0, [5] = 1, [6] = 2, [7] = 3} + +--- Returns the opposite direction — adapted from Factorio util.lua. +-- @release 0.8.1 +-- @tparam defines.direction direction the direction +-- @treturn defines.direction the opposite direction +function Position.opposite_direction(direction) + return opposites[direction or defines.direction.north] +end + +--- Returns the next direction. +--> For entities that only support two directions, see @{opposite_direction}. +-- @tparam defines.direction direction the starting direction +-- @tparam[opt=false] boolean reverse true to get the next direction in counter-clockwise fashion, false otherwise +-- @tparam[opt=false] boolean eight_way true to get the next direction in 8-way (note: not many prototypes support 8-way) +-- @treturn defines.direction the next direction +function Position.next_direction(direction, reverse, eight_way) + Is.Assert.Number(direction, 'missing starting direction') + + local next_dir = direction + (eight_way and ((reverse and -1) or 1) or ((reverse and -2) or 2)) + return (next_dir > 7 and next_dir - next_dir) or (reverse and next_dir < 0 and 8 + next_dir) or next_dir +end + +--- Position tables are returned with these metamethods attached +-- @table Metamethods +Position._mt = { + __index = Position, -- If key is not found, see if there is one availble in the Position module. + __tostring = Position.tostring, -- Returns a string representation of the position + __add = Position.add, -- Adds two position together. + __sub = Position.subtract, -- Subtracts one position from another. + __eq = Position.equals, -- Are two positions the same. + __lt = Position.less_than, -- Is position1 less than position2. + __le = Position.less_than_eq, -- Is position1 less than or equal to position2. + __concat = Position._concat, -- calls tostring on both sides of concact. + __call = Position.copy +} + +return Position diff --git a/HelicopterRevival/stdlib/area/surface.lua b/HelicopterRevival/stdlib/area/surface.lua new file mode 100644 index 00000000..95ec25f8 --- /dev/null +++ b/HelicopterRevival/stdlib/area/surface.lua @@ -0,0 +1,127 @@ +--- For working with surfaces. +-- Surfaces are the "domain" of the world. +-- @module Surface +-- @usage local Surface = require('stdlib/area/surface') +-- @see LuaSurface + +local Surface = {_module_name = 'Surface'} +setmetatable(Surface, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Area = require('stdlib/area/area') + +--- Flexible and safe lookup function for surfaces. +--

    +--
  • May be given a single surface name or an array of surface names in @{string}. +--
  • May be given a single surface object or an array of surface objects in @{LuaSurface}. +--
  • May also be given a @{nil}. +--
  • Returns an array of surface objects of all valid and existing surfaces. +--
  • Returns an empty array if no surfaces are given or if they are not found. +--
+-- @tparam ?|nil|string|{string,...}|LuaSurface|{LuaSurface,...} surface the surfaces to look up +-- @treturn {nil|LuaSurface,...} an array of all valid surfaces or nil otherwise +function Surface.lookup(surface) + if not surface then + return {} + end + if type(surface) == 'string' or type(surface) == 'number' then + local lookup = game.surfaces[surface] + if lookup then + return {lookup} + end + return {} + end + if type(surface) == 'table' and surface['__self'] then + return Surface.lookup(surface.name) + end + local results = {} + for _, surface_item in pairs(surface) do + if type(surface_item) == 'string' then + if game.surfaces[surface_item] then + table.insert(results, game.surfaces[surface_item]) + end + elseif type(surface_item) == 'table' and surface_item['__self'] then + table.insert(results, surface_item) + end + end + return results +end + +--- Given a @{search_criteria|search criteria}, find all entities that match the criteria. +--
    +--
  • If ***search\_criteria.name*** is not supplied, search for entities with any name. +--
  • If ***search\_criteria.type*** is not supplied, search for entities of any type. +--
  • If ***search\_criteria.force*** is not supplied, search for entities owned by any force. +--
  • If ***search\_criteria.surface*** is not supplied, search for entities on all surfaces. +--
  • If ***search\_criteria.area*** is not supplied, search the entire specified surface. +--
+-- @usage +-- surface.find_all_entities({ type = 'unit', surface = 'nauvis', area = {{-1000,20},{-153,2214}}) +-- -- returns a list containing all unit entities on the nauvis surface in the given area +-- @param search_criteria (@{search_criteria}) a table used to search for entities +-- @treturn {nil|LuaEntity,...} an array of all entities that matched the criteria **OR** *nil* if there were no matches +function Surface.find_all_entities(search_criteria) + Is.Assert.Table(search_criteria, 'missing search_criteria argument') + if search_criteria.name == nil and search_criteria.type == nil and search_criteria.force == nil and search_criteria.area == nil then + error('Missing search criteria field: name or type or force or area of entity', 2) + end + + local surface_list = Surface.lookup(search_criteria.surface) + if search_criteria.surface == nil then + surface_list = game.surfaces + end + + local results = {} + + for _, surface in pairs(surface_list) do + local entities = + surface.find_entities_filtered( + { + area = search_criteria.area, + name = search_criteria.name, + type = search_criteria.type, + force = search_criteria.force + } + ) + for _, entity in pairs(entities) do + table.insert(results, entity) + end + end + + return results +end + +--- +-- This table should be passed into @{find_all_entities} function to find entities that match the criteria. +-- @tfield[opt] string name internal name of an entity — (example: "locomotive") +-- @tfield[opt] string type type of an entity — (example: "unit") +-- @tfield[opt] string|LuaForce force the force of an entity — (examples: "neutral", "enemy") +-- @tfield[opt] ?|nil|string|{string,...}|LuaSurface|{LuaSurface,...} surface the surface to search — (example: "nauvis") +-- @tfield[opt] Concepts.BoundingBox area the area to search +-- @table search_criteria + +--- Gets the area which covers the entirety of a given surface. +-- This function is useful if you wish to compare the total number of chunks against the number of chunks within the entire area of a given surface. +-- @tparam LuaSurface surface the surface for which to get the area +-- @treturn Concepts.BoundingBox the area of a given surface +function Surface.get_surface_bounds(surface) + Is.Assert(surface, 'missing surface value') + local x1, y1, x2, y2 = 0, 0, 0, 0 + + for chunk in surface.get_chunks() do + if chunk.x < x1 then + x1 = chunk.x + elseif chunk.x > x2 then + x2 = chunk.x + end + if chunk.y < y1 then + y1 = chunk.y + elseif chunk.y > y2 then + y2 = chunk.y + end + end + + return Area.construct(x1 * 32, y1 * 32, x2 * 32, y2 * 32) +end + +return Surface diff --git a/HelicopterRevival/stdlib/area/tile.lua b/HelicopterRevival/stdlib/area/tile.lua new file mode 100644 index 00000000..a70d8b86 --- /dev/null +++ b/HelicopterRevival/stdlib/area/tile.lua @@ -0,0 +1,138 @@ +--- Tools for working with tiles. +-- A tile represents a 1 unit2 on a surface in Factorio. +-- @module Tile +-- @usage local Tile = require('stdlib/area/tile') +-- @see LuaTile + +local Tile = {_module_name = 'Tile'} +setmetatable(Tile, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Area = require('stdlib/area/area') +local Position = require('stdlib/area/position') +local Chunk = require('stdlib/area/chunk') + +--local MAX_UINT = 4294967296 + +--- Get the @{LuaTile.position|tile position} of a tile where the given position resides. +-- @tparam Concepts.Position position the position that resides somewhere in a tile +-- @treturn LuaTile.position the tile position +function Tile.from_position(position) + position = Position.new(position) + return Position.new({x = math.floor(position.x), y = math.floor(position.y)}) --Is this correct? Tile position should be the center? +end + +--- Converts a tile position to the @{Concepts.BoundingBox|area} of the tile it is in. +-- @tparam LuaTile.position tile_pos the tile position +-- @treturn Concepts.BoundingBox the area of the tile +function Tile.to_area(tile_pos) + Is.Assert(tile_pos, 'missing tile_pos argument') + local left_top = Tile.from_position(tile_pos) + local right_bottom = Position.offset(Position.copy(tile_pos), 1, 1) + + return Area.new({left_top = left_top, right_bottom = right_bottom}) +end + +--- Creates an array of tile positions for all adjacent tiles (N, E, S, W) **OR** (N, NE, E, SE, S, SW, W, NW) if diagonal is set to true. +-- @tparam LuaSurface surface the surface to examine for adjacent tiles +-- @tparam LuaTile.position position the tile position of the origin tile +-- @tparam[opt=false] boolean diagonal whether to include diagonal tiles +-- @tparam[opt] string tile_name whether to restrict adjacent tiles to a particular tile name (example: "water-tile") +-- @treturn {LuaTile.position,...} an array of tile positions of the tiles that are adjacent to the origin tile +function Tile.adjacent(surface, position, diagonal, tile_name) + Is.Assert(surface, 'missing surface argument') + Is.Assert(position, 'missing position argument') + + local offsets = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}} + if diagonal then + offsets = {{0, 1}, {1, 1}, {1, 0}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}} + end + local adjacent_tiles = {} + for _, offset in pairs(offsets) do + local adj_pos = Position.add(position, offset) + if tile_name then + local tile = surface.get_tile(adj_pos.x, adj_pos.y) + if tile and tile.name == tile_name then + table.insert(adjacent_tiles, adj_pos) + end + else + table.insert(adjacent_tiles, adj_pos) + end + end + return adjacent_tiles +end + +--- Gets the user data that is associated with a tile. +-- The user data is stored in the global object and it persists between loads. +-- @tparam LuaSurface surface the surface on which the user data is looked up +-- @tparam LuaTile.position tile_pos the tile position on which the user data is looked up +-- @tparam[opt] Mixed default_value the user data to set for the tile and returned if it did not have user data +-- @treturn ?|nil|Mixed the user data **OR** *nil* if it does not exist for the tile and no default_value was set +function Tile.get_data(surface, tile_pos, default_value) + Is.Assert(surface, 'missing surface argument') + Is.Assert(tile_pos, 'missing tile_pos argument') + if not global._tile_data then + if not default_value then + return nil + end + global._tile_data = {} + end + local chunk_idx = Chunk.get_index(surface, Chunk.from_position(tile_pos)) + if not global._tile_data[chunk_idx] then + if not default_value then + return nil + end + global._tile_data[chunk_idx] = {} + end + + local chunk_tiles = global._tile_data[chunk_idx] + if not chunk_tiles then + return nil + end + + local idx = Tile.get_index(tile_pos) + local val = chunk_tiles[idx] + if not val then + chunk_tiles[idx] = default_value + val = default_value + end + + return val +end + +--- Associates the user data to a tile. +-- The user data will be stored in the global object and it will persist between loads. +-- @tparam LuaSurface surface the surface on which the user data will reside +-- @tparam LuaTile.position tile_pos the tile position of a tile that will be associated with the user data +-- @tparam ?|nil|Mixed data the user data to set **OR** *nil* to erase the existing user data for the tile +-- @treturn ?|nil|Mixed the previous user data associated with the tile **OR** *nil* if the tile had no previous user data +function Tile.set_data(surface, tile_pos, data) + Is.Assert(surface, 'missing surface argument') + Is.Assert(tile_pos, 'missing tile_pos argument') + if not global._tile_data then + global._tile_data = {} + end + + local chunk_idx = Chunk.get_index(surface, Chunk.from_position(tile_pos)) + if not global._tile_data[chunk_idx] then + global._tile_data[chunk_idx] = {} + end + + local chunk_tiles = global._tile_data[chunk_idx] + local idx = Tile.get_index(tile_pos) + local prev = chunk_tiles[idx] + chunk_tiles[idx] = data + + return prev +end + +--- Calculates and returns a stable and deterministic integer ID of a tile from a given tile position. +-- The tile ID will not change once it is calculated, and every tile ID is unique to the chunk they are in and they may repeat across a surface. +-- @tparam LuaTile.position tile_pos +-- @treturn int the tile ID +function Tile.get_index(tile_pos) + Is.Assert(tile_pos, 'missing tile_pos argument') + return bit32.band(bit32.bor(bit32.lshift(bit32.band(tile_pos.x, 0x1F), 5), bit32.band(tile_pos.y, 0x1F)), 0x3FF) +end + +return Tile diff --git a/HelicopterRevival/stdlib/color/color.lua b/HelicopterRevival/stdlib/color/color.lua new file mode 100644 index 00000000..5ae8d461 --- /dev/null +++ b/HelicopterRevival/stdlib/color/color.lua @@ -0,0 +1,67 @@ +--- For playing with colors. +-- @module Color +-- @usage local Color = require('stdlib/utils/color') + +local Color = {_module_name = 'Color'} +setmetatable(Color, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +--- Set a value for the alpha channel in the given color table. +-- `color.a` represents the alpha channel in the given color table. +--
    +--
  • If ***alpha*** is given, set `color.a` to it. +--
  • If ***alpha*** is not given, and if the given color table does not have a value for `color.a`, set `color.a` to 1. +--
  • If ***alpha*** is not given, and if the given color table already has a value for `color.a`, then leave `color.a` alone. +--
+-- @tparam[opt=white] defines.color|Concepts.Color color the color to configure +-- @tparam[opt=1] float alpha the alpha value 0 - 1 to set for the given color +-- @treturn Concepts.Color a color table that has the specified value for the alpha channel +function Color.set(color, alpha) + color = color or defines.color.white + Color.to_table(color) + color.a = alpha or color.a or 1 + return color +end + +--- Converts a color in the array format to a color in the table format. +-- @tparam array c_arr the color to convert — { [1] = @{float}, [2] = @{float}, [3] = @{float}, [4] = @{float} } +-- @treturn Concepts.Color a converted color — { r = c\_arr[1], g = c\_arr[2], b = c\_arr[3], a = c\_arr[4] } +function Color.to_table(c_arr) + if #c_arr > 0 then + return {r = c_arr[1], g = c_arr[2], b = c_arr[3], a = c_arr[4]} + end + return c_arr +end + +--- Converts a color in the rgb format to a color table +-- @tparam[opt=0] int r 0-255 red +-- @tparam[opt=0] int g 0-255 green +-- @tparam[opt=0] int b 0-255 blue +-- @tparam[opt=255] int a 0-255 alpha +-- @treturn Concepts.Color +function Color.from_rgb(r, g, b, a) + r = r or 0 + g = g or 0 + b = b or 0 + a = a or 255 + return {r = r / 255, g = g / 255, b = b / 255, a = a / 255} +end + +--- Get a color table with a hexadecimal string. +-- Optionally provide the value for the alpha channel. +-- @tparam string hex hexadecimal color string (#ffffff, not #fff) +-- @tparam[opt=1] float alpha the alpha value to set; such that *** 0 ⋜ value ⋜ 1 *** +-- @treturn Concepts.Color a color table with RGB converted from Hex and with alpha +function Color.from_hex(hex, alpha) + --Is.Assert.Hex(hex, 'missing color hex value') + local number = tonumber(Is.Assert.Hex(hex, 'missing color hex value'), 16) + return { + r = bit32.extract(number, 16, 8) / 255, + g = bit32.extract(number, 8, 8) / 255, + b = bit32.extract(number, 0, 8) / 255, + a = alpha or 1 + } +end + +return Color diff --git a/HelicopterRevival/stdlib/config/config.lua b/HelicopterRevival/stdlib/config/config.lua new file mode 100644 index 00000000..aa6870c1 --- /dev/null +++ b/HelicopterRevival/stdlib/config/config.lua @@ -0,0 +1,195 @@ +--- For working with mod configurations. +-- @module Config +-- @usage require('stdlib/config/config') + +--- +-- @tfield function new +-- @tfield function get +-- @tfield function set +-- @tfield function delete +-- @tfield function is_set +-- @table Config +local M = {_module_name = 'Config'} +setmetatable(M, {__index = require('stdlib/core')}) + +----------------------------------------------------------------------- +--Setup repeated code for use in sub functions here +----------------------------------------------------------------------- +local reservedCharacters = [[`~!@#$%^&*+=|;:/\\\'",?()[]{}<>]] +local testReservedCharacters = function(path) + local reserved = reservedCharacters + for c in reserved:gmatch('.') do + if path:find(c, 1, true) then + return c + end + end + return nil +end + +--- Creates a new Config object to ease the management of a config table. +-- @tparam table config_table the config table to manage +-- @treturn Config the Config object to manage the config table +-- +-- @usage --[Use a global table for config that persists across game save/loads] +-- CONFIG = Config.new(global.testtable) +-- +-- @usage --[You can also create a temporary scratch pad config] +-- CONFIG = Config.new({}) -- Temporary scratch pad +-- +-- @usage --[Setting data in Config] +-- CONFIG = Config.new(global.testtable) +-- CONFIG.set("your.path.here", "myvalue") +-- +-- @usage --[Getting data out of Config] +-- CONFIG = Config.new(global.testtable) +-- my_data = CONFIG.get("your.path.here") +-- +-- @usage --[Getting data out of Config with a default to use if path is not found in Config] +-- CONFIG = Config.new(global.testtable) +-- my_data = CONFIG.get("your.path.here", "Your Default here") +-- +-- @usage --[Deleting a path from Config] +-- CONFIG = Config.new(global.testtable) +-- CONFIG.delete("your.path.here") +-- +-- @usage --[Checking if a path exists in Config] +-- CONFIG = Config.new(global.testtable) +-- CONFIG.is_set("your.path.here") +function M.new(config_table) + if not config_table then + error('config_table is a required parameter.', 2) + elseif type(config_table) ~= 'table' then + error('config_table must be a table. Was given [' .. type(config_table) .. ']', 2) + elseif type(config_table.get) == 'function' then + error("Config can't manage another Config object", 2) + end + + ----------------------------------------------------------------------- + --Setup the Config object + ----------------------------------------------------------------------- + local Config = {} + + --- Get a stored config value. + -- @tparam string path the variable to retrieve + -- @tparam[opt] Mixed default value to be used if path is nil + -- @treturn Mixed value at path or nil if not found and no default given + function Config.get(path, default) + if type(path) ~= 'string' or path:is_empty() then + error('path is invalid', 2) + end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then + error("path '" .. path .. "' contains the reserved character '" .. c .. "'", 2) + end + + local pathParts = path:split('.') + local part = config + local value = nil + + for key = 1, #pathParts, 1 do + local partKey = pathParts[key] + if (type(part) ~= 'table') then + value = nil + break + end + + value = part[partKey] + part = part[partKey] + end + + if (type(value) == 'table') then + --Force break references. + return table.deepcopy(value) + elseif (value ~= nil) then + return value + else + return default + end + end + + --- Set a stored config value. + -- @tparam string path the config path to set + -- @tparam ?|nil|Mixed data the value to set the path to. If *nil*, it behaves identical to @{delete|Config.delete()} + -- @treturn uint 0 on failure or the number of affected paths on success + function Config.set(path, data) + if type(path) ~= 'string' or path:is_empty() then + error('path is invalid', 2) + end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then + error("path contains the reserved character '" .. c .. "'", 2) + end + + local pathParts = path:split('.') + local part = config + + for key = 1, #pathParts - 1, 1 do + local partKey = pathParts[key] + if (type(part[partKey]) ~= 'table') then + part[partKey] = {} + end + + part = part[partKey] + end + + part[pathParts[#pathParts]] = data + + return 1 + end + + --- Delete a stored config value. + -- @tparam string path the config path to delete + -- @treturn uint 0 on failure or the number of affected paths on success + function Config.delete(path) + if type(path) ~= 'string' or path:is_empty() then + error('path is invalid', 2) + end + + local config = config_table + + local c = testReservedCharacters(path) + if c ~= nil then + error("path contains the reserved character '" .. c .. "'", 2) + end + + local pathParts = path:split('.') + local part = config + + for key = 1, #pathParts - 1, 1 do + local partKey = pathParts[key] + if (type(part[partKey]) ~= 'table') then + return 0 + end + + part = part[partKey] + end + + if part[pathParts[#pathParts]] == nil then + return 0 + else + part[pathParts[#pathParts]] = nil + return 1 + end + end + + --- Test the existence of a stored config value. + -- @tparam string path the config path to test + -- @treturn boolean true if the value exists, false otherwise + function Config.is_set(path) + if type(path) ~= 'string' or path:is_empty() then + error('path is invalid', 2) + end + + return Config.get(path) ~= nil + end + + return Config +end + +return M diff --git a/HelicopterRevival/stdlib/core.lua b/HelicopterRevival/stdlib/core.lua new file mode 100644 index 00000000..fac3f9ec --- /dev/null +++ b/HelicopterRevival/stdlib/core.lua @@ -0,0 +1,110 @@ +--- The Core module loads some helper functions useful in all stages +-- of a mods life cycle. All modules have an __index method into core. +-- @module Core +-- @usage local Core = require('stdlib/core') + +--Global mutates +require('stdlib/utils/globals') +require('stdlib/utils/table') +require('stdlib/utils/string') +require('stdlib/utils/math') + +--Defines Mutates +require('stdlib/defines/color') +require('stdlib/defines/time') + +local Is = require('stdlib/utils/is') + +local Core = { + _VERSION = '1.0.0', + _DESCRIPTION = 'Factorio Lua Standard Library Project', + _URL = 'https://github.com/Afforess/Factorio-Stdlib', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2016, Afforess + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + ]], + _module_name = 'Core', + _concat = function(lhs, rhs) + --Sanitize to remove address + return tostring(lhs):gsub('(%w+)%: %x+', '%1: (ADDR)') .. tostring(rhs):gsub('(%w+)%: %x+', '%1: (ADDR)') + end, + _classes = { + string_array_mt = require('stdlib/utils/classes/string_array') + } +} + +function Core.log_and_print(msg) + if game and #game.connected_players > 0 then + log(msg) + game.print(msg) + return true + end +end + +function Core.VALID_FILTER(v) + return v and v.valid +end + +--- Sets the __call metamethod on the metatable. +-- @tparam table this The object to get the metatable for +-- @tparam function caller The function to set to __call +-- @treturn table with metatable attached +function Core.set_caller(this, caller) + if getmetatable(this) then + getmetatable(this).__call = caller + return this + else + error('Metatable not found', 2) + end +end + +--- load the stdlib into globals, by default it loads everything into an ALLCAPS name. +-- Alternatively you can pass a dictionary of `[global names] -> [require path]`. +-- @tparam[opt] table files +-- @treturn Core +-- @usage +-- require('stdlib/core).create_stdlib_globals() +function Core.create_stdlib_globals(files) + files = + files or + { + GAME = 'stdlib/game', + AREA = 'stdlib/area/area', + POSITION = 'stdlib/area/position', + TILE = 'stdlib/area/tile', + SURFACE = 'stdlib/area/surface', + CHUNK = 'stdlib/area/chunk', + COLOR = 'stdlib/color/color', + ENTITY = 'stdlib/entity/entity', + INVENTORY = 'stdlib/entity/inventory', + RESOURCE = 'stdlib/entity/resource', + CONFIG = 'stdlib/config/config', + LOGGER = 'stdlib/log/logger', + QUEUE = 'stdlib/queue/queue', + EVENT = 'stdlib/event/event', + GUI = 'stdlib/event/gui', + PLAYER = 'stdlib/event/player', + FORCE = 'stdlib/event/force' + } + Is.Assert.Table(files, 'files must be a dictionary of global names -> file paths') + + for glob, path in pairs(files) do + _G[glob] = prequire((path:gsub('%.', '/'))) -- extra () required to emulate select(1) + end + return Core +end + +return Core diff --git a/HelicopterRevival/stdlib/data/category.lua b/HelicopterRevival/stdlib/data/category.lua new file mode 100644 index 00000000..4e8c63c9 --- /dev/null +++ b/HelicopterRevival/stdlib/data/category.lua @@ -0,0 +1,50 @@ +--- Category +-- @classmod Category + +local Category = { + _class = 'category' +} +setmetatable(Category, {__index = require('stdlib/data/data')}) + +Category.category_types = { + ['ammo-category'] = true, + ['equipment-category'] = true, + ['fuel-category'] = true, + ['recipe-category'] = true, + ['module-category'] = true, + ['rail-category'] = true, + ['resource-category'] = true +} + +function Category:_get(category_name, category_type) + return self:get(category_name, category_type) +end +Category:set_caller(Category._get) + +function Category:create() + return self +end + +function Category:add() + return self +end + +function Category:remove() + return self +end + +function Category:replace(a, b) + if self:valid('category') then + self:remove(a) + self:add(b) + end + return self +end + +Category._mt = { + __index = Category, + __call = Category._get, + __tostring = Category.tostring +} + +return Category diff --git a/HelicopterRevival/stdlib/data/data.lua b/HelicopterRevival/stdlib/data/data.lua new file mode 100644 index 00000000..4a194a0d --- /dev/null +++ b/HelicopterRevival/stdlib/data/data.lua @@ -0,0 +1,393 @@ +--- Data +-- @classmod Data + +if _G.remote and _G.script then + error('Data Modules can only be required in the data stage', 2) +end + +local Data = { + _class = 'data', + Sprites = require('stdlib/data/modules/sprites'), + Pipes = require('stdlib/data/modules/pipes'), + Util = require('stdlib/data/modules/util'), + _default_options = { + ['silent'] = false, + ['fail'] = false, + ['verbose'] = false + } +} +setmetatable(Data, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +local _traceback = function() return '' end +local traceback = debug and debug.traceback or _traceback + +local item_and_fluid_types = { + 'item', + 'ammo', + 'armor', + 'gun', + 'capsule', + 'repair-tool', + 'mining-tool', + 'item-with-entity-data', + 'rail-planner', + 'tool', + 'blueprint', + 'deconstruction-item', + 'blueprint-book', + 'selection-tool', + 'item-with-tags', + 'item-with-label', + 'item-with-inventory', + 'module', + 'fluid' +} + +-- load the data portion of stdlib into globals, by default it loads everything into an ALLCAPS name. +-- Alternatively you can pass a dictionary of `[global names] -> [require path]`. +-- @tparam[opt] table files +-- @treturn Data +-- @usage +-- require('stdlib/data/data).create_data_globals() +function Data.create_data_globals(files) + files = + files or + { + RECIPE = 'stdlib/data/recipe', + ITEM = 'stdlib/data/item', + FLUID = 'stdlib/data/fluid', + ENTITY = 'stdlib/data/entity', + TECHNOLOGY = 'stdlib/data/technology', + CATEGORY = 'stdlib/data/category', + DATA = 'stdlib/data/data' + } + Data.create_stdlib_globals(files) + + return Data +end + +--[Classes]-------------------------------------------------------------------- + +--- Is this a valid object +-- @tparam[opt] string class if present is the object a member of the class +-- @treturn self +function Data:valid(class) + if class then + return self._valid == class or false + else + return self._valid and true or false + end +end + +--- Invalidates the object. +-- @tparam boolean should_continue if false then invalidate the object +-- @treturn self +function Data:continue(should_continue) + if not should_continue then + self._valid = false + end + return self +end + +--- Extend object into the data table +-- @tparam[opt] boolean force Extend even if it is already extended +-- @treturn self +function Data:extend(force) + if self and ((self.name and self.type) or self:valid()) then + if not self._extended or force then + local t = data.raw[self.type] + if t == nil then + t = {} + data.raw[self.type] = t + end + t[self.name] = self + end + else + error('Could not extend data', 2) + end + return self +end + +--- Copies a recipe to a new recipe. +-- @tparam string new_name The new name for the recipe. +-- @tparam string mining_result +-- @treturn self +function Data:copy(new_name, mining_result) + Is.Assert.String(new_name, 'New name is required') + if self:valid() then + mining_result = mining_result or new_name + --local from = self.name + local copy = table.deepcopy(self) + copy.name = new_name + + -- For Entities + -- Need to also check mining_results!!!!!! + if mining_result then + if copy.minable and copy.minable.result then + copy.minable.result = mining_result + end + end + + -- For items + if copy.place_result then + copy.place_result = new_name + end + + -- For recipes, should also to check results!! + if copy.type == 'recipe' then + if copy.normal and copy.normal.result then + copy.normal.result = new_name + copy.expensive.result = new_name + else + if copy.result then + copy.result = new_name + end + end + end + + return self(copy):extend() + else + error('Cannot Copy, invalid prototype', 4) + end +end + +function Data:Flags(has_flag_string) + if self:valid() then + if self.flags then + setmetatable(self.flags, Data._classes.string_array_mt) + if has_flag_string then + return self.flags:has(has_flag_string) + end + return self.flags + end + end + return self +end + +function Data:add_flag(flag) + self:Flags():add(flag) + return self +end + +function Data:remove_flag(flag) + self:Flags():remove(flag) + return self +end + +function Data:has_flag(flag) + return self:Flags(flag) +end + +--- Run a function if the object is valid. +-- The object and any additional paramaters are passed to the function. +-- @tparam function func then function to run. +-- @treturn self +function Data:execute(func, ...) + if self:valid() then + func(self, ...) + end + return self +end + +--- Add or change a field. +-- @tparam string field the field to change. +-- @tparam mixed value the value to set on the field. +-- @treturn self +function Data:set_field(field, value) + if self:valid() then + rawset(self, field, value) + end + return self +end +Data.set = Data.set_field + +--- Get a field. +-- @tparam field +-- @treturn mixed the value of the field +-- @note Will error if the object is not valid +function Data:get_field(field) + if self:valid() then + return rawget(self, field) + end +end + +--- Iterate a dictionary table and set fields on the object. Existing fields are overwritten. +-- @tparam table tab dictionary table of fields to set. +-- @treturn self +function Data:set_fields(tab) + if self:valid() then + for k, v in pairs(tab) do + rawset(self, k, v) + end + end + return self +end + +--- Iterate a string array and set to nil. +-- @tparam table tab string array of fields to remove. +-- @treturn self +function Data:remove_fields(tab) + if self:valid() then + for _, k in pairs(tab) do + rawset(self, k, nil) + end + end + return self +end + +--- Change the item-subgroup and/or order. +-- @tparam[opt=nil] string subgroup, The subgroup to change to if valid. +-- @tparam[opt=nil] string order The order string to use +-- note if subgroup is non nil and subgroub is not valid order wil not be changed. +-- @treturn self +function Data:subgroup_order(subgroup, order) + if self:valid() then + if subgroup then + if data.raw['item-subgroup'][subgroup] then + self.subgroup = subgroup + else + order = false + end + end + if order and #order > 0 then + self.order = order + end + end + return self +end + +--- Replace an icon +-- @tparam string icon +-- @tparam int size +function Data:replace_icon(icon, size) + if self:valid() then + if type(icon) == 'table' then + self.icons = icon + self.icon = nil + else + self.icon = icon + end + self.icon_size = size or self.icon_size + end + if not self.icon_size then + error('Icon present but icon size not detected') + end + return self +end + +--- Get the icons +-- @tparam[opt=false] boolean copy return a copy of the icons table +-- @treturn table icons +function Data:get_icons(copy) + if self:valid() then + return copy and table.deepcopy(self.icons) or self.icons + end +end + +function Data:get_icon() + if self:valid() then + return self.icon + end +end + +function Data:make_icons(...) + if self:valid() then + if not self.icons then + if self.icon then + self.icons = {{icon = self.icon, icon_size = self.icon_size}} + self.icon = nil + else + self.icons = {} + end + end + for _, icon in pairs({...}) do + self.icons[#self.icons + 1] = table.deepcopy(icon) + end + end + return self +end + +function Data:set_icon_at(index, values) + if self:valid() then + if self.icons then + for k, v in pairs(values or {}) do + self.icons[index].k = v + end + end + end + return self +end + +--- Get the objects name. +-- @treturn string the objects name +function Data:tostring() + return self.name and self.type and self.name or '' +end + +--- Returns a valid thing object reference. This is the main getter +-- @tparam string|table object The thing to use, if string the thing must be in data.raw[type], tables are not verified +-- @tparam[opt] string object_type the raw type. Required if object is a string +-- @tparam[opt] table opts options to pass +-- @treturn Object +function Data:get(object, object_type, opts) + Is.Assert(object, 'object string or table is required') + + local new + if type(object) == 'table' then + Is.Assert(object.type and object.name, 'Name and Type are required') + new = object + new._extended = data.raw[object.type] and data.raw[object.type][object.name] == object + elseif type(object) == 'string' then + --Get type from object_type, or fluid or item_and_fluid_types + local types = (object_type and {object_type}) or (self._class == 'item' and item_and_fluid_types) + if types then + for _, type in pairs(types) do + new = data.raw[type] and data.raw[type][object] + if new then + new._extended = true + break + end + end + else + error('object_type is missing for ' .. (self._class or 'Unknown') .. '/' .. (object or ''), 3) + end + end + + if new then + new._valid = self._class or 'data' + new._opt = opts + new.flags = new.flags and setmetatable(new.flags, Data._classes.string_array_mt) + return setmetatable(new, self._mt):extend() + else + local trace = traceback() + local msg = (self._class and self._class or '') .. (self.name and '/' .. self.name or '') .. ' ' + msg = msg .. (object_type and (object_type .. '/') or '') .. tostring(object) .. ' does not exist.' + + trace = trace:gsub('stack traceback:\n', ''):gsub('.*%(%.%.%.tail calls%.%.%.%)\n', ''):gsub(' in main chunk.*$', '') + trace = trace:gsub('%_%_.*%_%_%/stdlib/data.*\n', ''):gsub('\n', '->'):gsub('\t', '') + trace = msg .. ' [' .. trace .. ']' + log(trace) + end + return self +end +Data:set_caller(Data.get) + +Data._mt = { + __index = Data, + __call = Data.get, + __tostring = Data.tostring +} + +return Data + +-- render layers +-- "tile-transition", "resource", "decorative", "remnants", "floor", "transport-belt-endings", "corpse", +-- "floor-mechanics", "item", "lower-object", "object", "higher-object-above", "higher-object-under", +-- "wires", "lower-radius-visualization", "radius-visualization", "entity-info-icon", "explosion", +-- "projectile", "smoke", "air-object", "air-entity-info-con", "light-effect", "selection-box", "arrow", "cursor" + +-- collision masks +-- "ground-tile", "water-tile", "resource-layer", "floor-layer", "item-layer", +-- "object-layer", "player-layer", "ghost-layer", "doodad-layer", "not-colliding-with-itself" diff --git a/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-horizontal.png b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-horizontal.png new file mode 100644 index 00000000..6a060348 Binary files /dev/null and b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-horizontal.png differ diff --git a/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-vertical.png b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-vertical.png new file mode 100644 index 00000000..ddca4aaf Binary files /dev/null and b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker-vertical.png differ diff --git a/HelicopterRevival/stdlib/data/developer/debug-chunk-marker.png b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker.png new file mode 100644 index 00000000..28f393da Binary files /dev/null and b/HelicopterRevival/stdlib/data/developer/debug-chunk-marker.png differ diff --git a/HelicopterRevival/stdlib/data/developer/developer.lua b/HelicopterRevival/stdlib/data/developer/developer.lua new file mode 100644 index 00000000..7108728d --- /dev/null +++ b/HelicopterRevival/stdlib/data/developer/developer.lua @@ -0,0 +1,108 @@ +--- Developer +-- @script Developer + +local Developer = {} +local Data = require('stdlib/data/data') +setmetatable(Developer, {__index = Data}) + +local function make_no_controls() + local controls = {} + for name in pairs(data.raw['autoplace-control']) do + controls[name] = {size = 'none', frequency = 'very-low', richness = 'very-low'} + end + return controls +end + +--- Make entities for easier mod testing. +-- @tparam string name The name of your mod +-- @usage +-- --data.lua +-- local Developer = require('stdlib/data/develper/developer') +-- Developer.make_test_entities("ModName") +function Developer.make_test_entities(name) + assert(type(name) == 'string', 'make_test_entities must be passed the name of the mod') + local path = '__' .. name .. '__/stdlib/data/developer/' + if not data.raw['simple-entity']['debug-chunk-marker'] then + if not name then + error('developer chunk markers need mod name') + end + Data { + type = 'simple-entity', + name = 'debug-chunk-marker', + localised_name = 'Debug Chunk Markers', + flags = {'placeable-off-grid'}, + selectable_in_game = false, + collision_mask = {}, + render_layer = 'light-effect', + max_health = 200, + pictures = { + { + filename = path .. 'debug-chunk-marker.png', + priority = 'extra-high-no-scale', + width = 64, + height = 64, + shift = {0, 0} + }, + { + filename = path .. 'debug-chunk-marker-horizontal.png', + priority = 'extra-high-no-scale', + width = 64, + height = 64, + shift = {0, 0} + }, + { + filename = path .. 'debug-chunk-marker-vertical.png', + priority = 'extra-high-no-scale', + width = 64, + height = 64, + shift = {0, 0} + } + } + } + end + + if not data.raw['electric-energy-interface']['debug-energy-interface'] then + Data('electric-energy-interface', 'electric-energy-interface'):copy('debug-energy-interface'):set_fields { + flags = {'placeable-off-grid'}, + localised_name = 'Debug source', + icon = data.raw['item']['electric-energy-interface'].icon, + collision_mask = {}, + selection_box = {{0.0, -0.5}, {0.5, 0.5}}, + picture = Developer.Sprites.empty_picture() + }:remove_fields {'minable', 'collision_box', 'vehicle_impact_sound', 'working_sound'} + end + + if not data.raw['electric-pole']['debug-substation'] then + Data('substation', 'electric-pole'):copy('debug-substation'):set_fields { + localised_name = 'Debug power substation', + flags = {'placeable-off-grid'}, + icon = data.raw['item']['substation'].icon, + selection_box = {{-0.5, -0.5}, {0.0, 0.5}}, + collision_mask = {}, + pictures = Developer.Sprites.empty_pictures(), + maximum_wire_distance = 64, + supply_area_distance = 64, + connection_points = Developer.Sprites.empty_connection_points(1) + }:remove_fields {'minable', 'collision_box', 'vehicle_impact_sound', 'working_sound'} + end + + data.raw.tile['lab-dark-1'].map_color = {r = 100, g = 100, b = 100} + data.raw.tile['lab-dark-2'].map_color = {r = 50, g = 50, b = 50} + + data.raw['map-gen-presets']['default']['debug'] = { + type = 'map-gen-presets', + name = 'debug', + localised_name = 'Debug', + localised_description = 'Default settings for a debug world', + order = 'z', + basic_settings = { + terrain_segmentation = 'very-low', + water = 'none', + autoplace_controls = make_no_controls(), + height = 128, + width = 128 + } + } +end + +return Developer diff --git a/HelicopterRevival/stdlib/data/entity.lua b/HelicopterRevival/stdlib/data/entity.lua new file mode 100644 index 00000000..747a1fe0 --- /dev/null +++ b/HelicopterRevival/stdlib/data/entity.lua @@ -0,0 +1,20 @@ +--- Entity class +-- @classmod Entity + +local Entity = { + _class = 'entity' +} +setmetatable(Entity, {__index = require('stdlib/data/data')}) + +function Entity:_get(entity, type) + return self:get(entity, type) +end +Entity:set_caller(Entity._get) + +Entity._mt = { + __index = Entity, + __call = Entity._get, + __tostring = Entity.tostring +} + +return Entity diff --git a/HelicopterRevival/stdlib/data/fluid.lua b/HelicopterRevival/stdlib/data/fluid.lua new file mode 100644 index 00000000..e217b351 --- /dev/null +++ b/HelicopterRevival/stdlib/data/fluid.lua @@ -0,0 +1,20 @@ +--- Fluid +-- @classmod Fluid + +local Fluid = { + _class = 'fluid' +} +setmetatable(Fluid, {__index = require('stdlib/data/data')}) + +function Fluid:_get(fluid) + return self:get(fluid) +end +Fluid:set_caller(Fluid._get) + +Fluid._mt = { + __index = Fluid, + __call = Fluid._get, + __tostring = Fluid.tostring +} + +return Fluid diff --git a/HelicopterRevival/stdlib/data/item.lua b/HelicopterRevival/stdlib/data/item.lua new file mode 100644 index 00000000..ec974c45 --- /dev/null +++ b/HelicopterRevival/stdlib/data/item.lua @@ -0,0 +1,62 @@ +--- Item +-- @classmod Item + +local Item = { + _class = 'item' +} +setmetatable(Item, {__index = require('stdlib/data/data')}) + +Item.item_types = { + 'item', + 'ammo', + 'armor', + 'gun', + 'capsule', + 'repair-tool', + 'mining-tool', + 'item-with-entity-data', + 'rail-planner', + 'tool', + 'blueprint', + 'deconstruction-item', + 'blueprint-book', + 'selection-tool', + 'item-with-tags', + 'item-with-label', + 'item-with-inventory', + 'module' +} + +function Item:_get(item, item_type) + return self:get(item, item_type) +end +Item:set_caller(Item._get) + +Item.item_types = { + 'item', + 'ammo', + 'armor', + 'gun', + 'capsule', + 'repair-tool', + 'mining-tool', + 'item-with-entity-data', + 'rail-planner', + 'tool', + 'blueprint', + 'deconstruction-item', + 'blueprint-book', + 'selection-tool', + 'item-with-tags', + 'item-with-label', + 'item-with-inventory', + 'module' +} + +Item._mt = { + __index = Item, + __call = Item._get, + __tostring = Item.tostring +} + +return Item diff --git a/HelicopterRevival/stdlib/data/modules/ing-prod.lua b/HelicopterRevival/stdlib/data/modules/ing-prod.lua new file mode 100644 index 00000000..7b573dd9 --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/ing-prod.lua @@ -0,0 +1,3 @@ +--luacheck: ignore + +return {} diff --git a/HelicopterRevival/stdlib/data/modules/ingredients.lua b/HelicopterRevival/stdlib/data/modules/ingredients.lua new file mode 100644 index 00000000..fe2de9e1 --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/ingredients.lua @@ -0,0 +1,11 @@ +--luacheck: ignore + +local Ingredients = { + _class = 'Ingredients' +} + +--Gets a single ingredient +function Ingredients.get(ingredient) +end + +return Ingredients diff --git a/HelicopterRevival/stdlib/data/modules/pipes.lua b/HelicopterRevival/stdlib/data/modules/pipes.lua new file mode 100644 index 00000000..78c01234 --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/pipes.lua @@ -0,0 +1,208 @@ +--- Pipes +-- @module Pipes + +local Pipes = {} +setmetatable(Pipes, {__index = require('stdlib/data/modules/sprites')}) + +--Define pipe connection pipe pictures, not all entities use these. This function needs some work though. +function Pipes.pictures(pictures, shift_north, shift_south, shift_west, shift_east, replacements) + local new_pictures = { + north = shift_north and + { + filename = '__base__/graphics/entity/' .. pictures .. '/' .. pictures .. '-pipe-N.png', + priority = 'extra-high', + width = 35, + height = 18, + shift = shift_north + } or + Pipes.empty_picture(), + south = shift_south and + { + filename = '__base__/graphics/entity/' .. pictures .. '/' .. pictures .. '-pipe-S.png', + priority = 'extra-high', + width = 44, + height = 31, + shift = shift_south + } or + Pipes.empty_picture(), + west = shift_west and + { + filename = '__base__/graphics/entity/' .. pictures .. '/' .. pictures .. '-pipe-W.png', + priority = 'extra-high', + width = 19, + height = 37, + shift = shift_west + } or + Pipes.empty_picture(), + east = shift_east and + { + filename = '__base__/graphics/entity/' .. pictures .. '/' .. pictures .. '-pipe-E.png', + priority = 'extra-high', + width = 20, + height = 38, + shift = shift_east + } or + Pipes.empty_picture() + } + for direction, image in pairs(replacements or {}) do + if not (new_pictures[direction].filename == '__core__/graphics/empty.png') then + new_pictures[direction].filename = image.filename + new_pictures[direction].width = image.width + new_pictures[direction].height = image.height + new_pictures[direction].priority = image.priority or new_pictures[direction].priority + end + end + return new_pictures +end + +--return pipe covers for true directions. +function Pipes.covers(n, s, w, e) + if (n == nil and s == nil and w == nil and e == nil) then + n, s, e, w = true, true, true, true + end + + n = + n and + { + layers = { + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-north.png', + priority = 'extra-high', + width = 64, + height = 64, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-north.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5 + } + }, + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-north-shadow.png', + priority = 'extra-high', + width = 64, + height = 64, + draw_as_shadow = true, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-north-shadow.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5, + draw_as_shadow = true + } + } + } + } or + Pipes.empty_picture() + e = + e and + { + layers = { + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-east.png', + priority = 'extra-high', + width = 64, + height = 64, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-east.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5 + } + }, + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-east-shadow.png', + priority = 'extra-high', + width = 64, + height = 64, + draw_as_shadow = true, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-east-shadow.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5, + draw_as_shadow = true + } + } + } + } or + Pipes.empty_picture() + s = + s and + { + layers = { + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-south.png', + priority = 'extra-high', + width = 64, + height = 64, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-south.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5 + } + }, + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-south-shadow.png', + priority = 'extra-high', + width = 64, + height = 64, + draw_as_shadow = true, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-south-shadow.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5, + draw_as_shadow = true + } + } + } + } or + Pipes.empty_picture() + w = + w and + { + layers = { + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-west.png', + priority = 'extra-high', + width = 64, + height = 64, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-west.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5 + } + }, + { + filename = '__base__/graphics/entity/pipe-covers/pipe-cover-west-shadow.png', + priority = 'extra-high', + width = 64, + height = 64, + draw_as_shadow = true, + hr_version = { + filename = '__base__/graphics/entity/pipe-covers/hr-pipe-cover-west-shadow.png', + priority = 'extra-high', + width = 128, + height = 128, + scale = 0.5, + draw_as_shadow = true + } + } + } + } or + Pipes.empty_picture() + + return {north = n, south = s, east = e, west = w} +end + +return Pipes diff --git a/HelicopterRevival/stdlib/data/modules/results.lua b/HelicopterRevival/stdlib/data/modules/results.lua new file mode 100644 index 00000000..ced2cbe7 --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/results.lua @@ -0,0 +1,7 @@ +--luacheck: ignore + +local Results = { + _class = 'Results' +} + +return Results diff --git a/HelicopterRevival/stdlib/data/modules/sprites.lua b/HelicopterRevival/stdlib/data/modules/sprites.lua new file mode 100644 index 00000000..cd9784da --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/sprites.lua @@ -0,0 +1,89 @@ +--- Sprites +-- @module Sprites + +local Sprites = {} + +function Sprites.extract_monolith(filename, x, y, w, h) + return { + type = 'monolith', + top_monolith_border = 0, + right_monolith_border = 0, + bottom_monolith_border = 0, + left_monolith_border = 0, + monolith_image = { + filename = filename, + priority = 'extra-high-no-scale', + width = w, + height = h, + x = x, + y = y + } + } +end + +--- Quick to use empty picture. +-- @treturn table an empty pictures table +function Sprites.empty_picture() + return { + filename = '__core__/graphics/empty.png', + priority = 'extra-high', + width = 1, + height = 1 + } +end + +function Sprites.empty_sprite() + return Sprites.empty_picture() +end + +--- Quick to use empty pictures. +-- @treturn table an empty pictures table +function Sprites.empty_pictures() + local empty = Sprites.empty_picture() + return { + filename = empty.filename, + width = empty.width, + height = empty.height, + line_length = 1, + frame_count = 1, + shift = {0, 0}, + animation_speed = 1, + direction_count = 1 + } +end + +function Sprites.empty_animation() + return Sprites.empty_pictures() +end + +--- Quick to use empty animation. +-- @treturn table an empty animations table +function Sprites.empty_animations() + return { + Sprites.empty_pictures() + } +end + +--- Quick to use empty connections table. +-- @tparam int count how many connection points are needed +-- @treturn table an empty pictures table +function Sprites.empty_connection_points(count) + local points = {} + for i = 1, count or 1, 1 do + points[i] = { + shadow = { + copper = {0, 0}, + green = {0, 0}, + red = {0, 0} + }, + wire = { + copper = {0, 0}, + green = {0, 0}, + red = {0, 0} + } + } + end + return points +end + +return Sprites diff --git a/HelicopterRevival/stdlib/data/modules/util.lua b/HelicopterRevival/stdlib/data/modules/util.lua new file mode 100644 index 00000000..1243eae5 --- /dev/null +++ b/HelicopterRevival/stdlib/data/modules/util.lua @@ -0,0 +1,57 @@ +--- Utilities +-- @module Util + +local Util = { + _module_name = 'Util' +} +setmetatable(Util, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +function Util.extend(proto_array) + Is.Assert.Table(proto_array, 'Missing table or array to extend') + data:extend(#proto_array > 0 and proto_array or {proto_array}) +end + +function Util.disable_control(control) + if data.raw['custom-input'] and data.raw['custom-input'][control] then + data.raw['custom-input'][control].enabled = false + end +end + +function Util.extend_style(style) + data.raw['gui-style'].default[style.name] = style +end + +--- Quickly duplicate an existing prototype into a new one. +-- @tparam string data_type The type of the object to duplicate +-- @tparam string orig_name The name of the object to duplicate +-- @tparam string new_name The new name to use. +-- @tparam[opt] string|boolean mining_result If true set mining_result to new_name, if truthy set mining_result to value +function Util.duplicate(data_type, orig_name, new_name, mining_result) + mining_result = type(mining_result) == 'boolean' and new_name or mining_result + if data.raw[data_type] and data.raw[data_type][orig_name] then + local proto = table.deepcopy(data.raw[data_type][orig_name]) + proto.name = new_name + + if mining_result then + if proto.minable and proto.minable.result then + proto.minable.result = mining_result + end + end + + if proto.place_result then + proto.place_result = new_name + end + + if proto.result then + proto.result = new_name + end + + return (proto) + else + error('Unknown Prototype ' .. data_type .. '/' .. orig_name) + end +end + +return Util diff --git a/HelicopterRevival/stdlib/data/recipe.lua b/HelicopterRevival/stdlib/data/recipe.lua new file mode 100644 index 00000000..d8621180 --- /dev/null +++ b/HelicopterRevival/stdlib/data/recipe.lua @@ -0,0 +1,539 @@ +--- Recipe class +-- @classmod Recipe + +local Recipe = { + _class = 'recipe', + _ingredients_mt = require('stdlib/data/modules/ingredients'), + _results_mt = require('stdlib/data/modules/results') +} +setmetatable(Recipe, {__index = require('stdlib/data/data')}) + +local Is = require('stdlib/utils/is') +local Item = require('stdlib/data/item') + +function Recipe:_get(recipe) + local new = self:get(recipe, 'recipe') + --[[prototype + type, name + localised_name[opt] + localised_description[opt] + subgroup, order (needed when no main product) + --]] + --[[recipe + category + icon/icons (or has main_product) + crafting_machine_tint = { + primary, secondary, tertiary + } + normal/expensive = { + ingredients + results, result, result_count[opt=1] (result ignored if results present) at least 1 result + main_product + energy_required > 0.001 + emissions_multiplier + requester_paste_multiplier + overload_multiplier + enabled + hidden + hide_from_stats + allow_decomposition + allow_as_intermediate + allow_intermediates + always_show_made_in + show_amount_in_title + always_show_products + } + --]] + + + -- Convert the recipe to difficult format + + -- Convert the ingredients to full format + --new:Ingredients() + + -- Convert the results to full format + --new:Results() + return new +end +Recipe:set_caller(Recipe._get) + +function Recipe:Results(get_expensive) + if self:valid('recipe') then + if get_expensive then + self:make_difficult() + end + if self.normal then + if self.normal.result then + self.normal.results = { + {type = 'item', name = self.normal.result, amount = self.normal.result_count or 1} + } + self.normal.result = nil + self.normal.result_count = nil + end + self.normal.results._owner = self + self.normal.results._valid = 'results' + setmetatable(self.normal.results, Recipe._results_mt) + if self.expensive.result then + self.expensive.results = { + {type = 'item', name = self.expensive.result, amount = self.expensive.result_count or 1} + } + self.expensive.result = nil + self.expensive.result_count = nil + end + self.expensive.results._owner = self + self.expensive.results._valid = 'results' + setmetatable(self.expensive.results, Recipe._results_mt) + return get_expensive and self.expensive.results or self.normal.results + else + if self.result then + self.results = { + {type = 'item', name = self.result, amount = self.result_count or 1} + } + self.result = nil + self.result_count = nil + end + self.results._owner = self + self.results._valid = 'results' + return setmetatable(self.results, Recipe._results_mt) + end + end + return self +end + +function Recipe:Ingredients(get_expensive) + if self:valid('recipe') then + if get_expensive then + self:make_difficult() + end + if self.normal then + self.normal.ingredients._owner = self + self.normal.ingredients._valid = 'ingredients' + setmetatable(self.normal.ingredients, Recipe._ingredients_mt) + self.expensive.ingredients._owner = self + self.expensive.ingredients._valid = 'ingredients' + setmetatable(self.expensive.ingredients, Recipe._ingredients_mt) + return get_expensive and self.expensive.ingredients or self.normal.ingredients + else + self.ingredients._owner = self + self.ingredients._valid = 'ingredients' + return setmetatable(self.ingredients, Recipe._ingredients_mt) + end + end + return self +end + +-- Returns a formated ingredient or prodcut table +local function format(ingredient, result_count) + --[[ + Ingredient table + {"name", amount} -- Assumes a type of "item" + { + type :: string: "item" or "fluid". + name :: string: Prototype name of the required item or fluid. + amount :: uint: Amount of the item. + minimum_temperature :: uint (optional): The minimum fluid temperature required. Has no effect if type is '"item"'. + maximum_temperature :: uint (optional): The maximum fluid temperature allowed. Has no effect if type is '"item"'. + } + + Product table + { + type :: string: "item" or "fluid". + name :: string: Prototype name of the result. + amount :: float (optional): If not specified, amount_min, amount_max and probability must all be specified. + temperature :: uint (optional): The fluid temperature of this product. Has no effect if type is '"item"'. + amount_min :: uint (optional): + amount_max :: uint (optional): + probability :: double (optional): A value in range [0, 1]. + } + --]] + local object + if type(ingredient) == 'table' then + if ingredient.valid and ingredient:valid() then + return ingredient + elseif ingredient.name then + if Item(ingredient.name, ingredient.type):valid() then + object = table.deepcopy(ingredient) + if not object.amount and not (object.amount_min and object.amount_max and object.probability) then + error('Result table requires amount or probabilities') + end + end + elseif #ingredient > 0 then + -- Can only be item types not fluid + local item = Item(ingredient[1]) + if item:valid() and item.type ~= 'fluid' then + object = { + type = 'item', + name = ingredient[1], + amount = ingredient[2] or 1 + } + end + end + elseif type(ingredient) == 'string' then + -- Our shortcut so we need to check it + local item = Item(ingredient) + if item:valid() then + object = { + type = item.type == 'fluid' and 'fluid' or 'item', + name = ingredient, + amount = result_count or 1 + } + end + end + return object +end + +-- get items for difficulties +local function get_difficulties(normal, expensive) + return format(normal), format((expensive == true and table.deepcopy(normal)) or expensive) +end + +--- Remove an ingredient from an ingredients table. +-- @tparam table ingredients +-- @tparam string name Name of the ingredient to remove +local function remove_ingredient(ingredients, name) + name = name.name + for i, ingredient in pairs(ingredients) do + if ingredient[1] == name or ingredient.name == name then + ingredients[i] = nil + return true + end + end +end + +--- Replace an ingredient. +-- @tparam table ingredients Ingredients table +-- @tparam string find ingredient to replace +-- @tparam concepts.ingredient replace +-- @tparam boolean replace_name_only Don't replace amounts +local function replace_ingredient(ingredients, find, replace, replace_name_only) + for i, ingredient in pairs(ingredients) do + if ingredient[1] == find or ingredient.name == find then + if replace_name_only then + local amount = ingredient[2] or ingredient.amount + replace.amount = amount + end + ingredients[i] = replace + return true + end + end +end + +--- Add an ingredient to a recipe. +-- @tparam string|Concepts.ingredient normal +-- @tparam[opt] string|Concepts.ingredient|boolean expensive +-- @treturn Recipe +function Recipe:add_ingredient(normal, expensive) + if self:valid() then + normal, expensive = get_difficulties(normal, expensive) + + if self.normal then + if normal then + self.normal.ingredients[#self.normal.ingredients + 1] = normal + end + if expensive then + self.expensive.ingredients[#self.expensive.ingredients + 1] = expensive + end + elseif normal then + self.ingredients[#self.ingredients + 1] = normal + end + end + return self +end + +--- Remove one ingredient completely. +-- @tparam string normal +-- @tparam string|boolean expensive expensive recipe to remove, or if true remove normal recipe from both +-- @treturn Recipe +function Recipe:remove_ingredient(normal, expensive) + if self:valid() then + normal, expensive = get_difficulties(normal, expensive) + if self.normal then + if normal then + remove_ingredient(self.normal.ingredients, normal) + end + if expensive then + remove_ingredient(self.expensive.ingredients, expensive) + end + elseif normal then + remove_ingredient(self.ingredients, normal) + end + end + return self +end + +--- Replace one ingredient with another. +-- @tparam string replace +-- @tparam string|ingredient normal +-- @tparam[opt] string|ingredient|boolean expensive +function Recipe:replace_ingredient(replace, normal, expensive) + Is.Assert(replace, 'Missing recipe to replace') + if self:valid() then + local n_string = type(normal) == 'string' + local e_string = type(expensive == true and normal or expensive) == 'string' + normal, expensive = get_difficulties(normal, expensive) + + if self.normal then + if normal then + replace_ingredient(self.normal.ingredients, replace, normal, n_string) + end + if expensive then + replace_ingredient(self.expensive.ingredients, replace, expensive, e_string) + end + elseif normal then + replace_ingredient(self.ingredients, replace, normal, n_string) + end + end + return self +end + +--- Converts a recipe to the difficulty recipe format. +-- @tparam[opt] number expensive_energy crafting energy_required for the expensive recipe +-- @treturn self +function Recipe:make_difficult(expensive_energy) + if self:valid('recipe') and not self.normal then + --convert all ingredients + local normal, expensive = {}, {} + for _, ingredient in ipairs(self.ingredients) do + local this = format(ingredient) + normal[#normal + 1] = this + expensive[#expensive + 1] = table.deepcopy(this) + end + + local r_normal, r_expensive = {}, {} + for _, ingredient in ipairs(self.results or {self.result}) do + local this = format(ingredient) + r_normal[#r_normal + 1] = this + r_expensive[#r_expensive + 1] = table.deepcopy(this) + end + + self.normal = { + enabled = self.enabled, + energy_required = self.energy_required, + ingredients = normal, + results = r_normal, + main_product = self.main_product + } + self.expensive = { + enabled = self.enabled, + energy_required = expensive_energy or self.energy_required, + ingredients = expensive, + results = r_expensive, + main_product = self.main_product + } + + self.ingredients = nil + self.result = nil + self.results = nil + self.result_count = nil + self.energy_required = nil + self.enabled = nil + self.main_product = nil + end + return self +end + +--- Change the recipe category. +-- @tparam string category_name The new crafting category +-- @treturn self +function Recipe:change_category(category_name) + if self:valid() then + local Category = require('stdlib/data/category') + self.category = Category(category_name, 'recipe-category'):valid() and category_name or self.category + end + return self +end +Recipe.set_category = Recipe.change_category + +--- Add to technology as a recipe unlock. +-- @tparam string tech_name Name of the technology to add the unlock too +-- @treturn self +function Recipe:add_unlock(tech_name) + if self:valid() then + local Tech = require('stdlib/data/technology') + Tech.add_effect(self, tech_name) + end + return self +end + +--- Remove the recipe unlock from the technology. +-- @tparam string tech_name Name of the technology to remove the unlock from +-- @treturn self +function Recipe:remove_unlock(tech_name) + if self:valid('recipe') then + local Tech = require('stdlib/data/technology') + Tech.remove_effect(self, tech_name, 'unlock-recipe') + end + return self +end + +--- Set the enabled status of the recipe. +-- @tparam boolean enabled Enable or disable the recipe +-- @treturn self +function Recipe:set_enabled(enabled) + if self:valid() then + if self.normal then + self.normal.enabled = enabled + self.expensive.enabled = enabled + else + self.enabled = enabled + end + end + return self +end + +--- Convert result type to results type. +-- @treturn self +function Recipe:convert_results() + if self:valid('recipe') then + if self.normal then + if self.normal.result then + self.normal.results = { + format(self.normal.result, self.normal.result_count or 1) + } + self.normal.result = nil + self.normal.result_count = nil + end + if self.expensive.result then + self.expensive.results = { + format(self.expensive.result, self.expensive.result_count or 1) + } + self.expensive.result = nil + self.expensive.result_count = nil + end + elseif self.result then + self.results = { + format(self.result, self.result_count or 1) + } + self.result = nil + self.result_count = nil + end + end + return self +end + +--- Set the main product of the recipe. +-- @tparam string|boolean main_product if boolean then use normal/expensive recipes passed as main product +-- @tparam[opt] Concepts.Product|string normal recipe +-- @tparam[opt] Concepts.Product|string expensive recipe +-- @treturn self +function Recipe:set_main_product(main_product, normal, expensive) + if self:valid('recipe') then + normal, expensive = get_difficulties(normal, expensive) + local normal_main, expensive_main + if main_product then + if type(main_product) == 'string' and Item(main_product):valid() then + normal_main = normal and main_product + expensive_main = expensive and main_product + elseif type(main_product) == 'boolean' then + normal_main = normal and Item(normal.name):valid() and normal.name + expensive_main = expensive and Item(expensive.name):valid() and expensive.name + end + if self.normal then + self.normal.main_product = normal_main + self.expensive.main_product = expensive_main + else + self.main_product = normal_main + end + end + end + return self +end + +--- Remove the main product of the recipe. +-- @tparam[opt=false] boolean for_normal +-- @tparam[opt=false] boolean for_expensive +function Recipe:remove_main_product(for_normal, for_expensive) + if self:valid('recipe') then + if self.normal then + if for_normal or (for_normal == nil and for_expensive == nil) then + self.normal.main_product = nil + end + if for_expensive or (for_normal == nil and for_expensive == nil) then + self.expensive.main_product = nil + end + elseif for_normal or (for_normal == nil and for_expensive == nil) then + self.main_product = nil + end + end + return self +end + +--- Add a new product to results, converts if needed. +-- @tparam string|Concepts.product normal +-- @tparam[opt] string|Concepts.product|boolean expensive +-- @tparam[opt] string main_product +function Recipe:add_result(normal, expensive, main_product) + if self:valid() then + normal, expensive = get_difficulties(normal, expensive) + self:convert_results() + self:set_main_product(main_product, normal, expensive) + + -- if self.normal then + -- if normal then + -- end + -- if expensive then + -- end + -- elseif normal then + -- end + end + return self +end + +--- Remove a product from results, converts if needed. +-- @tparam[opt] string|Concepts.product normal +-- @tparam[opt] string|Concepts.product|boolean expensive +-- @tparam[opt] string main_product new main_product to use +function Recipe:remove_result(normal, expensive, main_product) + if self:valid() then + normal, expensive = get_difficulties(normal, expensive) + self:convert_results() + self:set_main_product(main_product, normal, expensive) + + -- if self.normal then + -- if normal then + -- end + -- if expensive then + -- end + -- elseif normal then + -- end + end + return self +end + +--- Remove a product from results, converts if needed. +-- @tparam string|Concepts.product result_name +-- @tparam[opt] string|Concepts.product normal +-- @tparam[opt] string|Concepts.product|boolean expensive +-- @tparam[opt] string main_product +function Recipe:replace_result(result_name, normal, expensive, main_product) + if self:valid() and normal or expensive then + result_name = format(result_name) + if result_name then + normal, expensive = get_difficulties(normal, expensive) + self:convert_results() + self:remove_result(result_name, expensive and result_name) + self:set_main_product(main_product, normal, expensive) + + -- if self.normal then + -- if normal then + -- end + -- if expensive then + -- end + -- elseif normal then + -- end + end + end + return self +end + +Recipe.rep_ing = Recipe.replace_ingredient +Recipe.add_ing = Recipe.add_ingredient +Recipe.rem_ing = Recipe.remove_ingredient + +Recipe._mt = { + __index = Recipe, + __call = Recipe._get, + __tostring = Recipe.tostring +} + +return Recipe diff --git a/HelicopterRevival/stdlib/data/technology.lua b/HelicopterRevival/stdlib/data/technology.lua new file mode 100644 index 00000000..e75c7e60 --- /dev/null +++ b/HelicopterRevival/stdlib/data/technology.lua @@ -0,0 +1,205 @@ +--- Technology +-- @classmod Technology + +local Technology = { + _class = 'technology' +} +setmetatable(Technology, {__index = require('stdlib/data/data')}) + +local Is = require('stdlib/utils/is') + +function Technology:_get(tech) + return self:get(tech, 'technology') +end +Technology:set_caller(Technology._get) + +--[[ +type = "technology", +name = "military", +icon = "__base__/graphics/technology/military.png", +effects = +{ + { + type = "unlock-recipe", + recipe = "submachine-gun" + }, + { + type = "unlock-recipe", + recipe = "shotgun" + }, + { + type = "unlock-recipe", + recipe = "shotgun-shell" + } +}, +unit = +{ + count = 10, + ingredients = {{"science-pack-1", 1}}, + time = 15 +}, +order = "e-a-a" + +--]] +-- local function create_technology_prototype(name) +-- local new = { +-- type = type, +-- name = name, +-- } +-- data:extend{new} +-- return true +-- end + +function Technology:add_effect(effect, unlock_type) + Is.Assert(effect) + + --todo fix for non recipe types + local add_unlock = + function(technology, name) + local effects = technology.effects + effects[#effects + 1] = { + type = unlock_type, + recipe = name + } + end + + if self:valid('technology') then + local Recipe = require('stdlib/data/recipe') + unlock_type = (not unlock_type and 'unlock-recipe') or unlock_type + local r_name = type(effect) == 'table' and effect.name or effect + if unlock_type == 'unlock-recipe' or not unlock_type then + if Recipe(effect):valid() then + add_unlock(self, r_name) + end + end + elseif self:valid('recipe') then + unlock_type = 'unlock-recipe' + -- Convert to array and return first valid tech + local techs = type(effect) == 'string' and {effect} or effect + for _, name in pairs(techs) do + local tech = Technology(name) + if tech:valid('technology') then + self:set_enabled(false) + add_unlock(tech, self.name) + break + end + end + end + + return self +end + +function Technology:remove_effect(tech_name, unlock_type, name) + if self:valid('technology') then + return self, name, unlock_type -- TODO finish + elseif self:valid('recipe') then + if tech_name then + local tech = Technology(tech_name) + if tech:valid() then + for index, effect in pairs(tech.effects or {}) do + if effect.type == 'unlock-recipe' and effect.recipe == self.name then + table.remove(tech.effects, index) + end + end + end + else + for _, tech in pairs(data.raw['technology']) do + for index, effect in pairs(tech.effects or {}) do + if effect.type == 'unlock-recipe' and effect.recipe == self.name then + table.remove(tech.effects, index) + end + end + end + end + end + return self +end + +function Technology:add_pack(new_pack, count) + if self:valid('technology') then + local Item = require('stdlib/data/item') + if self.table(new_pack) then + count = new_pack[2] or 1 + new_pack = new_pack[1] + elseif self.string(new_pack) then + count = count or 1 + else + error('new_pack must be a table or string') + end + + if Item(new_pack):valid() then + self.unit.ingredients = self.unit.ingredients or {} + local ing = self.unit.ingredients + ing[#ing + 1] = {new_pack, count} + end + end + return self +end + +function Technology:remove_pack(pack) + if self:valid('technology') then + local ing = self.unit.ingredients + if ing then + for i = #ing, 1, -1 do + if ing[i][1] == pack then + ing[i] = nil + break + end + end + end + end + return self +end + +function Technology:replace_pack(old_pack, new_pack, count) + if self:valid('technology') then + local ing = self.unit.ingredients + if ing then + for i = #ing, 1, -1 do + if ing[i][1] == old_pack then + ing[i][1] = new_pack + ing[i][2] = count or ing[i][2] or 1 + break + end + end + end + end + return self +end + +function Technology:add_prereq(tech_name) + if self:valid('technology') and Technology(tech_name):valid() then + self.prerequisites = self.prerequisites or {} + local pre = self.prerequisites + for _, existing in pairs(pre) do + if existing == tech_name then + return self + end + end + + pre[#pre + 1] = tech_name + end + return self +end + +function Technology:remove_prereq(tech_name) + if self:valid('technology') then + local pre = self.prerequisites or {} + for i = #pre, 1, -1 do + if pre[i] == tech_name then + table.remove(pre, i) + end + end + if #pre == 0 then + self.prerequisites = nil + end + end + return self +end + +Technology._mt = { + __index = Technology, + __call = Technology._get +} + +return Technology diff --git a/HelicopterRevival/stdlib/defines/color.lua b/HelicopterRevival/stdlib/defines/color.lua new file mode 100644 index 00000000..8d834446 --- /dev/null +++ b/HelicopterRevival/stdlib/defines/color.lua @@ -0,0 +1,170 @@ +--- A defines module for retrieving colors by name. +-- Extends the Factorio defines table. +-- @usage require('stdlib/defines/color') +-- @module defines.color +-- @see Concepts.Color + +-- defines table is automatically required in all mod loading stages. +-- luacheck: ignore 122/defines +-- Ignore assigning to read only defines table. defines table is not ready only, however +-- marking it this way allows warnings to be generated when trying to assign values + +defines = defines or {} --luacheck: ignore defines (This is used for testing locally) + +--- A table of colors allowing retrieval by color name. +-- @usage color = defines.color.red +-- @tfield Concepts.Color white +-- @tfield Concepts.Color black +-- @tfield Concepts.Color darkgrey +-- @tfield Concepts.Color grey +-- @tfield Concepts.Color lightgrey +-- @tfield Concepts.Color red +-- @tfield Concepts.Color darkred +-- @tfield Concepts.Color lightred +-- @tfield Concepts.Color green +-- @tfield Concepts.Color darkgreen +-- @tfield Concepts.Color lightgreen +-- @tfield Concepts.Color blue +-- @tfield Concepts.Color darkblue +-- @tfield Concepts.Color lightblue +-- @tfield Concepts.Color orange +-- @tfield Concepts.Color yellow +-- @tfield Concepts.Color pink +-- @tfield Concepts.Color purple +-- @tfield Concepts.Color brown +defines.color = {} + +local colors = { + white = {r = 1.00, g = 1.00, b = 1.00}, + black = {r = 0.00, g = 0.00, b = 0.00}, + darkgrey = {r = 0.25, g = 0.25, b = 0.25}, + grey = {r = 0.50, g = 0.50, b = 0.50}, + lightgrey = {r = 0.75, g = 0.75, b = 0.75}, + red = {r = 1.00, g = 0.00, b = 0.00}, + darkred = {r = 0.50, g = 0.00, b = 0.00}, + lightred = {r = 1.00, g = 0.50, b = 0.50}, + green = {r = 0.00, g = 1.00, b = 0.00}, + darkgreen = {r = 0.00, g = 0.50, b = 0.00}, + lightgreen = {r = 0.50, g = 1.00, b = 0.50}, + blue = {r = 0.00, g = 0.00, b = 1.00}, + darkblue = {r = 0.00, g = 0.00, b = 0.50}, + lightblue = {r = 0.50, g = 0.50, b = 1.00}, + orange = {r = 1.00, g = 0.55, b = 0.10}, + yellow = {r = 1.00, g = 1.00, b = 0.00}, + pink = {r = 1.00, g = 0.00, b = 1.00}, + purple = {r = 0.60, g = 0.10, b = 0.60}, + brown = {r = 0.60, g = 0.40, b = 0.10} +} + +--- Returns white for dark colors or black for lighter colors. +-- @tfield Concepts.Color green defines.color.black +-- @tfield Concepts.Color grey defines.color.black +-- @tfield Concepts.Color lightblue defines.color.black +-- @tfield Concepts.Color lightgreen defines.color.black +-- @tfield Concepts.Color lightgrey defines.color.black +-- @tfield Concepts.Color lightred defines.color.black +-- @tfield Concepts.Color orange defines.color.black +-- @tfield Concepts.Color white defines.color.black +-- @tfield Concepts.Color yellow defines.color.black +-- @tfield Concepts.Color black defines.color.white +-- @tfield Concepts.Color blue defines.color.white +-- @tfield Concepts.Color brown defines.color.white +-- @tfield Concepts.Color darkblue defines.color.white +-- @tfield Concepts.Color darkgreen defines.color.white +-- @tfield Concepts.Color darkgrey defines.color.white +-- @tfield Concepts.Color darkred defines.color.white +-- @tfield Concepts.Color pink defines.color.white +-- @tfield Concepts.Color purple defines.color.white +-- @tfield Concepts.Color red defines.color.white +defines.anticolor = {} + +local anticolors = { + green = colors.black, + grey = colors.black, + lightblue = colors.black, + lightgreen = colors.black, + lightgrey = colors.black, + lightred = colors.black, + orange = colors.black, + white = colors.black, + yellow = colors.black, + black = colors.white, + blue = colors.white, + brown = colors.white, + darkblue = colors.white, + darkgreen = colors.white, + darkgrey = colors.white, + darkred = colors.white, + pink = colors.white, + purple = colors.white, + red = colors.white +} + +--- Returns a lighter color of a named color. +-- @tfield Concepts.Color white defines.color.lightgrey +-- @tfield Concepts.Color grey defines.color.darkgrey +-- @tfield Concepts.Color lightgrey defines.color.grey +-- @tfield Concepts.Color red defines.color.lightred +-- @tfield Concepts.Color green defines.color.lightgreen +-- @tfield Concepts.Color blue defines.color.lightblue +-- @tfield Concepts.Color yellow defines.color.orange +-- @tfield Concepts.Color pink defines.color.purple +defines.lightcolor = {} +local lightcolors = { + white = colors.lightgrey, + grey = colors.darkgrey, + lightgrey = colors.grey, + red = colors.lightred, + green = colors.lightgreen, + blue = colors.lightblue, + yellow = colors.orange, + pink = colors.purple +} + +local _mt = { + color = { + __index = function(_, c) + return colors[c] and {r = colors[c]['r'], g = colors[c]['g'], b = colors[c]['b'], a = colors[c]['a']} or {r = 1, g = 1, b = 1, a = 1} + end, + __pairs = function() + local k = nil + local c = colors + return function() + local v + k, v = next(c, k) + return k, (v and {r = v['r'], g = v['g'], b = v['b'], a = v['a']}) or nil + end + end + }, + anticolor = { + __index = function(_, c) + return anticolors[c] and {r = anticolors[c]['r'], g = anticolors[c]['g'], b = anticolors[c]['b'], a = anticolors[c]['a']} or {r = 1, g = 1, b = 1, a = 1} + end, + __pairs = function() + local k = nil + local c = anticolors + return function() + local v + k, v = next(c, k) + return k, (v and {r = v['r'], g = v['g'], b = v['b'], a = v['a']}) or nil + end + end + }, + lightcolor = { + __index = function(_, c) + return lightcolors[c] and {r = lightcolors[c]['r'], g = lightcolors[c]['g'], b = lightcolors[c]['b'], a = lightcolors[c]['a']} or {r = 1, g = 1, b = 1, a = 1} + end, + __pairs = function() + local k = nil + local c = lightcolors + return function() + local v + k, v = next(c, k) + return k, (v and {r = v['r'], g = v['g'], b = v['b'], a = v['a']}) or nil + end + end + } +} +setmetatable(defines.color, _mt.color) +setmetatable(defines.anticolor, _mt.anticolor) +setmetatable(defines.lightcolor, _mt.lightcolor) diff --git a/HelicopterRevival/stdlib/defines/time.lua b/HelicopterRevival/stdlib/defines/time.lua new file mode 100644 index 00000000..80447680 --- /dev/null +++ b/HelicopterRevival/stdlib/defines/time.lua @@ -0,0 +1,31 @@ +--- A defines module for retrieving the number of ticks in 1 unit of time. +-- Extends the Factorio defines table. +-- @module defines.time +-- @usage require('stdlib/defines/time') + +-- defines table is automatically required in all mod loading stages. +-- luacheck: ignore 122/defines +-- Ignore assigning to read only defines table. defines table is not read only, however +-- marking it this way allows warnings to be generated when trying to assign values. + +defines = defines or {} --luacheck: ignore defines (This is used for testing locally) + +local SECOND = 60 +local MINUTE = SECOND * 60 +local HOUR = MINUTE * 60 +local DAY = HOUR * 24 +local WEEK = DAY * 7 +local MONTH = DAY * 30 +local YEAR = DAY * 365 + +--- Returns the number of ticks in a second, minute, hour, day, week, month, or year. +-- @usage local ten_seconds = defines.time.second * 10 +defines.time = { + second = SECOND, -- the number of Factorio ticks in a second + minute = MINUTE, -- the number of Factorio ticks in a second + hour = HOUR, -- the number of Factorio ticks in an hour + day = DAY, -- the number of Factorio ticks in an day + week = WEEK, -- the number of Factorio ticks in a week + month = MONTH, -- the number of Factorio ticks in a month (30 days) + year = YEAR -- the number of Factorio ticks in a year (365 days) +} diff --git a/HelicopterRevival/stdlib/entity/entity.lua b/HelicopterRevival/stdlib/entity/entity.lua new file mode 100644 index 00000000..dedc4c94 --- /dev/null +++ b/HelicopterRevival/stdlib/entity/entity.lua @@ -0,0 +1,286 @@ +--- Tools for working with entities. +-- @module Entity +-- @usage local Entity = require('stdlib/entity/entity') + +local Entity = {_module_name = 'Entity'} +setmetatable(Entity, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +--- Tests whether an entity has access to a given field. +-- @tparam LuaEntity entity the entity to test the access to a field +-- @tparam string field_name the field name +-- @treturn boolean true if the entity has access to the field, false if the entity threw an exception when trying to access the field +function Entity.has(entity, field_name) + Is.Assert(entity, 'missing entity argument') + Is.Assert(field_name, 'missing field name argument') + + local status = + pcall( + function() + return entity[field_name] + end + ) + return status +end + +--- Gets the user data that is associated with an entity. +-- The user data is stored in the global object and it persists between loads. +--> The user data will be removed from an entity when the entity becomes invalid. +-- @tparam LuaEntity entity the entity to look up +-- @param Optional field to access data like a table +-- @treturn ?|nil|Mixed the user data, or nil if no data exists for the entity +function Entity.get_data(entity, field) + Is.Assert(entity, 'missing entity argument') + + if not global._entity_data then + return nil + end + + local dest + + local code, unit_number = pcall(function() return entity.unit_number end) + if code then + dest = global._entity_data[unit_number] + else + local prototype_name = entity.name + if not global._entity_data[prototype_name] then + return nil + end + + local prototype_category = global._entity_data[prototype_name] + + for i = #prototype_category, 1, -1 do + local cur_entity_data = prototype_category[i] + + if not cur_entity_data.entity.valid then + table.remove(prototype_category, i) + + elseif Entity._are_equal(cur_entity_data.entity, entity) then + dest = cur_entity_data.data + break + end + end + end + + if dest and field then + if type(dest) == "table" then + return dest[field] + else + return nil + end + end + + return dest +end + +--- Associates the user data to an entity. +-- The user data will be stored in the global object and it will persist between loads. +--> The user data will be removed from an entity when the entity becomes invalid. +-- @tparam LuaEntity entity the entity with which to associate the user data +-- @tparam ?|nil|Mixed data the data to set, or nil to delete the data associated with the entity +-- @param Optional field to set data to, treats the entity data like a table +-- @treturn ?|nil|Mixed the previous data associated with the entity, or nil if the entity had no previous data +function Entity.set_data(entity, data, field) + Is.Assert(entity, 'missing entity argument') + + if not global._entity_data then + global._entity_data = {} + end + + local dest_table, dest_key + + local code, unit_number = pcall(function() return entity.unit_number end) + if code then + dest_table = global._entity_data + dest_key = unit_number + else + local prototype_name = entity.name + dest_key = "data" + + if not global._entity_data[prototype_name] then + global._entity_data[prototype_name] = {} + end + + local prototype_category = global._entity_data[prototype_name] + + for i = #prototype_category, 1, -1 do + local cur_entity_data = prototype_category[i] + + if not cur_entity_data.entity.valid then + table.remove(prototype_category, i) + + elseif Entity._are_equal(cur_entity_data.entity, entity) then + if not field and data == nil then + local prev = cur_entity_data.data + table.remove(prototype_category, i) + return prev + end + + dest_table = cur_entity_data + break + end + end + + if not dest_table then + table.insert(prototype_category, {entity = entity}) + dest_table = prototype_category[#prototype_category] + end + end + + local prev + + if field then + if type(dest_table[dest_key]) ~= "table" then + dest_table[dest_key] = {} + end + + prev = dest_table[dest_key][field] + dest_table[dest_key][field] = data + else + prev = dest_table[dest_key] + dest_table[dest_key] = data + end + + return prev +end + +--- Freezes an entity, by making it inactive, inoperable, and non-rotatable, or unfreezes by doing the reverse. +-- @tparam LuaEntity entity the entity to freeze or unfreeze +-- @tparam[opt=true] boolean mode if true, freezes the entity, if false, unfreezes the entity. If not specified, it is set to true +-- @treturn LuaEntity the entity that has been frozen or unfrozen +function Entity.set_frozen(entity, mode) + Is.Assert(entity, 'missing entity argument') + mode = mode == false and true or false + entity.active = mode + entity.operable = mode + entity.rotatable = mode + return entity +end + +--- Makes an entity indestructible so that it cannot be damaged or mined neither by the player nor by their enemy factions. +-- @tparam LuaEntity entity the entity to make indestructable +-- @tparam[opt=true] boolean mode if true, makes the entity indestructible, if false, makes the entity destructable +-- @treturn LuaEntity the entity that has been made indestructable or destructable +function Entity.set_indestructible(entity, mode) + Is.Assert(entity, 'missing entity argument') + mode = mode == false and true or false + entity.minable = mode + entity.destructible = mode + return entity +end + +--- Tests if two entities are equal. +-- If they don't have a reference equality and ***entity\_a*** has ***equals*** function, it will be called with ***entity\_b*** as its first argument. +-- @tparam LuaEntity entity_a +-- @tparam LuaEntity entity_b +-- @treturn boolean +function Entity._are_equal(entity_a, entity_b) + if entity_a == nil then + return entity_a == entity_b + elseif entity_a == entity_b then + return true + elseif Entity.has(entity_a, 'equals') and entity_a.equals ~= nil then + return entity_a.equals(entity_b) + else + return false + end +end + +--- Functions that raise events +-- @section Raise-Events +-- from @{https://github.com/aubergine10/lifecycle-events lifecycle-events} +--
Used for raising `on_built and on_died` events for other mods + +--- Destroy an entity by first raising the event. +--> Some entities can't be destroyed, such as the rails with trains on them. +-- @tparam LuaEntity entity the entity to be destroyed +-- @tparam[opt=false] boolean died raise on_entity_died event +-- @tparam[opt] LuaEntity cause the entity if available that did the killing for on_entity_died +-- @tparam[opt] LuaForce force the force if any that did the killing +-- @treturn boolean was the entity destroyed? +function Entity.destroy_entity(entity, died, cause, force) + if entity and entity.valid and entity.can_be_destroyed then + local event = { + name = died and defines.events.on_entity_died or defines.events.script_raised_destroy, + entity = entity, + cause = cause, + force = force, + script = true + } + -- If no event name is passed, assume script_raised_destroy, otherwise raise the event + -- with the passed event name. ie. defines.events.on_preplayer_mined_item + event.script = true + event.mod_name = 'stdlib' + script.raise_event(event.name, event) + return entity.destroy() + end +end + +--- Create an entity and raise a build event. +-- @tparam LuaSurface surface the surface to create the entity on +-- @tparam table settings settings to pass to create_entity see @{LuaSurface.create_entity} +-- @tparam[opt] uint player_index the index of the player, when not present and not raise_script_event pass a fake robot +-- @tparam[opt] boolean raise_script_event raise script_raised_built +-- @treturn LuaEntity the created entity +function Entity.create_entity(surface, settings, player_index, raise_script_event) + surface = game.surfaces[surface] + local entity = surface.create_entity(settings) + if entity then + local event = { + created_entity = entity, + script = true + } + + if raise_script_event then + event.name = defines.events.script_raised_built + event.player_index = player_index + elseif player_index then + event.name = defines.events.on_built_entity + event.player_index = player_index + else + event.name = defines.events.on_robot_built_entity + event.robot = {} + end + + script.raise_event(event.name, event) + return entity + end +end + +--- Revivie an entity ghost and raise the `on_built` or `on_robot_built` event. +-- @tparam LuaEntity ghost the ghost entity to revivie +-- @tparam[opt] uint player_index if present, raise `on_built_entity` with player_index, if not present raise `on_robot_built_entity` +-- @tparam[opt] boolean raise_script_event, if true raise script_raised_built as the event +-- @treturn table the item stacks this entity collided with +-- @treturn LuaEntity the new revived entity +-- @treturn LuaEntity the item request proxy if present +function Entity.revive(ghost, player_index, raise_script_event) + if ghost and ghost.valid then + local collided, revived, proxy = ghost.revive(true) + if revived then + local event = { + created_entity = revived, + revived = true, + script = true, + modname = 'stdlib' + } + + if raise_script_event then + event.name = defines.events.script_raised_built + event.player_index = player_index + elseif player_index then + event.name = defines.events.on_built_entity + event.player_index = player_index + else + event.name = defines.events.on_robot_built_entity + event.robot = {} + end + + script.raise_event(event.name, event) + return collided, revived, proxy + end + end +end + +return Entity diff --git a/HelicopterRevival/stdlib/entity/inventory.lua b/HelicopterRevival/stdlib/entity/inventory.lua new file mode 100644 index 00000000..519ed567 --- /dev/null +++ b/HelicopterRevival/stdlib/entity/inventory.lua @@ -0,0 +1,124 @@ +--- For working with inventories. +-- @module Inventory +-- @usage local Inventory = require('stdlib/entity/inventory') + +local Inventory = {_module_name = 'Inventory'} +setmetatable(Inventory, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +--- Copies the contents of source inventory to destination inventory by using @{Concepts.SimpleItemStack}. +-- @tparam LuaInventory src the source inventory +-- @tparam LuaInventory dest the destination inventory +-- @tparam[opt=false] boolean clear clear the contents of the source inventory +-- @treturn {Concepts.SimpleItemStack,...} an array of left over items that could not be inserted into the destination +function Inventory.copy_as_simple_stacks(src, dest, clear) + Is.Assert(src, 'missing source inventory') + Is.Assert(dest, 'missing destination inventory') + + local left_over = {} + for i = 1, #src do + local stack = src[i] + if stack and stack.valid and stack.valid_for_read then + local simple_stack = { + name = stack.name, + count = stack.count, + health = stack.health or 1, + durability = stack.durability + } + -- ammo is a special case field, accessing it on non-ammo itemstacks causes an exception + simple_stack.ammo = stack.prototype.magazine_size and stack.ammo + + --Insert simple stack into inventory, add to left_over if not all were inserted. + simple_stack.count = simple_stack.count - dest.insert(simple_stack) + if simple_stack.count > 0 then + table.insert(left_over, simple_stack) + end + end + end + if clear then + src.clear() + end + return left_over +end + +-- Remove all items inside an entity and return an array of SimpleItemStacks removed +-- @param entity: The entity object to remove items from +-- @return table: a table of SimpleItemStacks or nil if empty +-- local function get_all_items_inside(entity, existing_stacks) +-- local item_stacks = existing_stacks or {} +-- --Inserters need to check held_stack +-- if entity.type == "inserter" then +-- local stack = entity.held_stack +-- if stack.valid_for_read then +-- item_stacks[#item_stacks+1] = {name=stack.name, count=stack.count, health=stack.health} +-- stack.clear() +-- end +-- --Entities with transport lines only need to check each line individually +-- elseif transport_types[entity.type] then +-- for i=1, transport_types[entity.type] do +-- local lane = entity.get_transport_line(i) +-- for name, count in pairs(lane.get_contents()) do +-- local cur_stack = {name=name, count=count, health=1} +-- item_stacks[#item_stacks+1] = cur_stack +-- lane.remove_item(cur_stack) +-- end +-- end +-- else +-- --Loop through regular inventories +-- for _, inv in pairs(defines.inventory) do +-- local inventory = entity.get_inventory(inv) +-- if inventory and inventory.valid then +-- if inventory.get_item_count() > 0 then +-- for i=1, #inventory do +-- if inventory[i].valid_for_read then +-- local stack = inventory[i] +-- item_stacks[#item_stacks+1] = {name=stack.name, count=stack.count, health=stack.health or 1} +-- stack.clear() +-- end +-- end +-- end +-- end +-- end +-- end +-- return (item_stacks[1] and item_stacks) or {} +-- end + +--- Given a function, apply it to each slot in the given inventory. +-- Passes the index of a slot as the second argument to the given function. +--

Iteration is aborted if the applied function returns true for any element during iteration. +-- @tparam LuaInventory inventory the inventory to iterate +-- @tparam function func the function to apply to values +-- @param[opt] ... additional arguments passed to the function +-- @treturn ?|nil|LuaItemStack the slot where the iteration was aborted **OR** nil if not aborted +function Inventory.each(inventory, func, ...) + local index + for i = 1, #inventory do + if func(inventory[i], i, ...) then + index = i + break + end + end + return index and inventory[index] +end + +--- Given a function, apply it to each slot in the given inventory. +-- Passes the index of a slot as the second argument to the given function. +--

Iteration is aborted if the applied function returns true for any element during iteration. +--

Iteration is performed from last to first in order to support dynamically sized inventories. +-- @tparam LuaInventory inventory the inventory to iterate +-- @tparam function func the function to apply to values +-- @param[opt] ... additional arguments passed to the function +-- @treturn ?|nil|LuaItemStack the slot where the iteration was aborted **OR** nil if not aborted +function Inventory.each_reverse(inventory, func, ...) + local index + for i = #inventory, 1, -1 do + if func(inventory[i], i, ...) then + index = i + break + end + end + return index and inventory[index] +end + +return Inventory diff --git a/HelicopterRevival/stdlib/entity/resource.lua b/HelicopterRevival/stdlib/entity/resource.lua new file mode 100644 index 00000000..c1b1518f --- /dev/null +++ b/HelicopterRevival/stdlib/entity/resource.lua @@ -0,0 +1,198 @@ +--- Resource utilities. +-- @module Resource +-- @usage local Resource = require('stdlib/entity/resource') + +local Resource = {_module_name = 'Resource'} +setmetatable(Resource, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Surface = require('stdlib/area/surface') +local Area = require('stdlib/area/area') +local Tile = require('stdlib/area/tile') +local Queue = require('stdlib/queue/queue') + +--- Gets all resource entities at the specified position and surface. +-- Adapted from *YARM/resmon.lua → find\_resource\_at* +-- @tparam string|LuaSurface surface the surface to look up +-- @tparam Concepts.Position position the position to check +-- @treturn {nil|LuaEntity,...} an array of resource entities or nil if none found +function Resource.get_resources_at(surface, position) + Is.Assert(surface, 'missing surface') + Is.Assert(position, 'missing position') + local surfaces = Surface.lookup(surface) + Is.Assert(#surfaces == 1, 'invalid surface') + + local tile_at_position = Tile.from_position(position) + local tile_area = Tile.to_area(tile_at_position) + + local resources_at_tile = table.first(surfaces).find_entities_filtered {area = tile_area, type = 'resource'} or {} + + return resources_at_tile +end + +--- From the resources at the given surface and position, return all connected (horizontally, vertically and diagonally) resource entities. +--

When the resource patches are found, the returned object will be an associative array where the key is the +-- resource-type string and the value is an array of entities that correspond to the resource-type. +--

For now, this function gets just the ore patches, since problems arise when a single resource entity spans multiple tiles. +--> This implementation is unstable; if a resource entity reference changes during the search, *both the old and the new version* of the entity might be included. +-- @tparam LuaSurface surface the surface to look up +-- @tparam Concepts.Position position the position to check +-- @return ({@{nil}} or {[@{string} <resource-type>] = {@{LuaEntity},...},...}) a map of resource types to resource entities or empty array if they don't exist +function Resource.get_resource_patches_at(surface, position) + Is.Assert(surface, 'missing surface') + Is.Assert(position, 'missing position') + + -- get the initial resource tile if there is one at the given position + local all_resource_entities = Resource.get_resources_at(surface, position) + local all_resource_types = Resource.get_resource_types(all_resource_entities) + local resource_patches = {} + + for _, type in pairs(all_resource_types) do + local resource_patch = Resource.get_resource_patch_at(surface, position, type) + resource_patches[type] = resource_patch + end + + return resource_patches +end + +--- From the resources at the given surface and position, return all connected (horizontally, vertically and diagonally) resource entities of specified type. +--

For now, this function gets just the ore patches, since problems arise when a single resource entity spans multiple tiles. +--> This implementation is unstable; if a resource entity reference changes during the search, *both the old and the new version* of the entity might be included. +-- @tparam LuaSurface surface the surface to look up +-- @tparam Concepts.Position position the position to check +-- @tparam string type the resource type (example: "iron-ore") +-- @treturn {nil|LuaEntity,...} an array containing all resources in the resource patch, or an empty array if there are no resources there +function Resource.get_resource_patch_at(surface, position, type) + Is.Assert(surface, 'missing surface') + Is.Assert(position, 'missing position') + Is.Assert(position, 'missing ore name') + local surfaces = Surface.lookup(surface) + Is.Assert(#surfaces == 1, 'invalid surface') + + surface = table.first(surfaces) + + -- get the initial resource tile if there is one at the given position + local all_resource_entities = Resource.get_resources_at(surface, position) + local filtered_resource_entities = Resource.filter_resources(all_resource_entities, {type}) + + if #filtered_resource_entities == 0 then + return {} + end + + -- for the search, keep track of the relevant entities and tiles visited + -- we use the entities as keys to prevent having a single entity multiple times in the list + local resource_patch = {} + local visited_tiles = {} + + -- local cache of bitwise functions, because they are called in a tight loop + local bitwise_or = bit32.bor + local bitwise_and = bit32.band + local bitwise_lshift = bit32.lshift + + local initial_tile = Tile.from_position(filtered_resource_entities[1].position) + + -- do a BFS starting from the initial tile + local search_queue = Queue.new() + Queue.push_last(search_queue, initial_tile) + + while not Queue.is_empty(search_queue) do + local current_tile = Queue.pop_first(search_queue) + local current_entities = surface.find_entities_filtered {area = Tile.to_area(current_tile), type = 'resource'} + local current_tile_index = bitwise_or(bitwise_lshift(bitwise_and(current_tile.x, 0xFFFF), 16), bitwise_and(current_tile.y, 0xFFFF)) + visited_tiles[current_tile_index] = true + + local filtered_current_entities = Resource.filter_resources(current_entities, {type}) + + if #filtered_current_entities ~= 0 then + -- this tile belongs to the ore patch, add the resources + table.merge(resource_patch, table.invert(filtered_current_entities)) + + -- queue all tiles around this one that we did not visit yet + for _, adjacent_tile in pairs(Tile.adjacent(surface, current_tile, true)) do + local adj_tile_index = bitwise_or(bitwise_lshift(bitwise_and(adjacent_tile.x, 0xFFFF), 16), bitwise_and(adjacent_tile.y, 0xFFFF)) + + if not visited_tiles[adj_tile_index] then + Queue.push_last(search_queue, adjacent_tile) + visited_tiles[adj_tile_index] = true + end + end + end + end + + -- map the resource entities back to an array + resource_patch = table.keys(resource_patch) + + return resource_patch +end + +--- Given an array of resource entities, get an array containing their names. +-- Every element within the new array is unique and is the name of a resource entity. +-- @tparam {LuaEntity,...} resources an array of resource entities +-- @treturn {nil|string,...} a new array with the names of the resources or nil if no resource entities are given +function Resource.get_resource_types(resources) + local result = {} + + if resources then + local resource_names = {} + + for _, resource in pairs(resources) do + resource_names[resource.name] = true + end + + result = table.keys(resource_names, false, true) + end + + return result +end + +--- Given an array of resource entities, return the ones that have the given resource names. +-- @tparam {LuaEntity,...} resources an array of resource entities +-- @tparam {string,...} resource_names the names of the resource entities +-- @treturn {nil|LuaEntity,...} a new array containing the entities matching the given resource names or nil if no matches were found +function Resource.filter_resources(resources, resource_names) + Is.Assert(resources, 'missing resource entities list') + + if not resource_names or #resource_names == 0 then + return resources + end + + -- filter the resources that have the same name as one of the given names in resource_names + local result = + table.filter( + resources, + function(resource_entity) + return table.any( + resource_names, + function(name) + return resource_entity.name == name + end + ) + end + ) + + return result +end + +--- Given a resource patch, return its area. +-- @see Resource.get_resource_patch_at +-- @tparam {LuaEntity,...} resource_patch the resource patch +-- @treturn Concepts.BoundingBox the area of the resource patch +function Resource.get_resource_patch_bounds(resource_patch) + Is.Assert(resource_patch, 'missing resource patch') + local min_x = math.huge + local min_y = math.huge + local max_x = -math.huge + local max_y = -math.huge + + for _, entity in pairs(resource_patch) do + local pos = entity.position + min_x = math.min(min_x, pos.x) + min_y = math.min(min_y, pos.y) + max_x = math.max(max_x, pos.x) + max_y = math.max(max_y, pos.y) + end + + return Area.construct(min_x, min_y, max_x, max_y) +end + +return Resource diff --git a/HelicopterRevival/stdlib/event/changes.lua b/HelicopterRevival/stdlib/event/changes.lua new file mode 100644 index 00000000..32d379fe --- /dev/null +++ b/HelicopterRevival/stdlib/event/changes.lua @@ -0,0 +1,96 @@ +--- Configuration changed event handling. +-- This module registers events +-- @module Changes +-- @usage require('stdlib/event/changes') + +local Event = require('stdlib/event/event') + +local Changes = { + _module_name = 'Changes' +} +setmetatable(Changes, {__index = require('stdlib/core')}) + +--[[ + ConfigurationChangedData + Table with the following fields: + old_version :: string (optional): Old version of the map. Present only when loading map version other than the current version. + new_version :: string (optional): New version of the map. Present only when loading map version other than the current version. + mod_changes :: dictionary string β†’ ModConfigurationChangedData: Dictionary of mod changes. It is indexed by mod name. + ModConfigurationChangedData + Table with the following fields: + old_version :: string: Old version of the mod. May be nil if the mod wasn't previously present (i.e. it was just added). + new_version :: string: New version of the mod. May be nil if the mod is no longer present (i.e. it was just removed). +--]] +Changes.versions = prequire('changes/versions') or {} +Changes['map-change-always-first'] = prequire('changes/map-change-always-first') +Changes['any-change-always-first'] = prequire('changes/any-change-always-first') +Changes['mod-change-always-first'] = prequire('changes/mod-change-always-first') +Changes['mod-change-always-last'] = prequire('changes/mod-change-always-last') +Changes['any-change-always-last'] = prequire('changes/any-change-always-last') +Changes['map-change-always-last'] = prequire('changes/map-change-always-last') + +local function run_if_exists(func) + return func and type(func) == 'function' and func() +end + +--[Mark all migrations as complete during Init]-- +function Changes.on_init() + local list = {} + local cur_version = game.active_mods[script.mod_name] + for ver in pairs(Changes.versions) do + list[ver] = cur_version + end + global._changes = list +end + +function Changes.on_configuration_changed(event) + run_if_exists(Changes['map-change-always-first']) + if event.mod_changes then + run_if_exists(Changes['any-change-always-first']) + if event.mod_changes[script.mod_name] then + run_if_exists(Changes['mod-change-always-first']) + local this_mod_changes = event.mod_changes[script.mod_name] + Changes.on_mod_changed(this_mod_changes) + log('Version changed from ' .. tostring(this_mod_changes.old_version) .. ' to ' .. tostring(this_mod_changes.new_version)) + run_if_exists(Changes['mod-change-always-last']) + end + run_if_exists(Changes['any-change-always-last']) + end + run_if_exists(Changes['map-change-always-last']) +end + +function Changes.on_mod_changed(this_mod_changes) + global._changes = global._changes or {} + + local old = this_mod_changes.old_version + if old then -- Find the last installed version + for ver, func in pairs(Changes.versions) do + if not global._changes[ver] then + run_if_exists(func) + global._changes[ver] = old + log('Migration completed for version ' .. ver) + end + end + end +end + +function Changes.register_events() + Event.register(Event.core_events.configuration_changed, Changes.on_configuration_changed) + Event.register(Event.core_events.init, Changes.on_init) + return Changes +end + +--[Always run these before any migrations]-- +--Changes["map-change-always-first"] = function() end +--Changes["any-change-always-first"] = function() end +--Changes["mod-change-always-first"] = function() end + +--Mod version changes made +--Changes.version["0.0.1"] = function() end + +--[Always run these at the end]-- +--Changes["mod-change-always-last"] = function() end +--Changes["any-change-always-last"] = function() end +--Changes["map-change-always-last"] = function() end + +return Changes diff --git a/HelicopterRevival/stdlib/event/event.lua b/HelicopterRevival/stdlib/event/event.lua new file mode 100644 index 00000000..5185a79c --- /dev/null +++ b/HelicopterRevival/stdlib/event/event.lua @@ -0,0 +1,410 @@ +--- Makes working with events in Factorio a lot more simple. +--

By default, Factorio allows you to register **only one handler** to an event. +--

This module lets you easily register **multiple handlers** to an event. +--

Using this module is as simple as replacing @{LuaBootstrap.on_event|script.on_event} with @{Event.register}. +--

+-- Due to the way that Factorio's event system works, it is not recommended to intermingle `script.on_event` and `Event.register` in a mod. +--
This module hooks into Factorio's event system, and using `script.on_event` for the same event will change which events are registered. +--
+--
+-- This module does not have many of the multiplayer protections that `script.on_event` does. +--
Due to this, great care should be taken when registering events conditionally. +--
+-- @module Event +-- @usage local Event = require('stdlib/event/event') + +--Holds the event registry +local event_registry = {} + +local Event = { + _module_name = 'Event', + core_events = { + init = 'on_init', + load = 'on_load', + configuration_changed = 'on_configuration_changed', + init_and_config = {'on_init', 'on_configuration_changed'} + }, + custom_events = {}, -- Holds custom event ids + protected_mode = false, + force_crc = false, + stop_processing = {} -- just has to be unique +} +setmetatable(Event, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +local bootstrap_register = { + on_init = function() + Event.dispatch({name = 'on_init'}) + end, + on_load = function() + Event.dispatch({name = 'on_load', tick = -1}) + end, + on_configuration_changed = function(event) + event.name = 'on_configuration_changed' + Event.dispatch(event) + end +} + +local function valid_id(id) + return (Is.Number(id) or Is.String(id)), 'Invalid Event Id, Must be string/int/defines.events, Passed in: ' .. type(id) +end + +--- Registers a handler for the given events. +-- If a `nil` handler is passed, remove the given events and stop listening to them. +--

Events dispatch in the order they are registered. +--

An *event ID* can be obtained via @{defines.events}, +-- @{LuaBootstrap.generate_event_name|script.generate_event_name} which is in @{int}, +-- and can be a custom input name which is in @{string}. +--

The `event_id` parameter takes in either a single, multiple, or mixture of @{defines.events}, @{int}, and @{string}. +-- @usage +-- -- Create an event that prints the current tick every tick. +-- Event.register(defines.events.on_tick, function(event) print event.tick end) +-- -- Create an event that prints the new ID of a train. +-- Event.register(Trains.on_train_id_changed, function(event) print(event.new_id) end) +-- -- Function call chaining +-- Event.register(event1, handler1).register(event2, handler2) +-- @param event_id (@{defines.events}, @{int}, @{string}, or {@{defines.events}, @{int}, @{string},...}) +-- @tparam function handler the function to call when the given events are triggered +-- @tparam[opt=nil] function matcher a function whose return determines if the handler is executed. event and pattern are passed into this +-- @tparam[opt=nil] mixed pattern an invariant that can be used in the matcher function, passed as the second parameter to your matcher +-- @return (@{Event}) Event module object allowing for call chaining +function Event.register(event_id, handler, matcher, pattern) + Is.Assert(event_id, 'missing event_id argument') + Is.Assert(Is.Function(handler), 'handler function is missing, use Event.remove to un register events') + Is.Assert(Is.Nil(matcher) or Is.Function(matcher), 'matcher must be a function when present') + + --Recursively handle event id tables + if Is.Table(event_id) then + for _, id in pairs(event_id) do + Event.register(id, handler) + end + return Event + end + + Is.Assert(valid_id(event_id)) + + -- If the event_id has never been registered before make sure we call the correct script action to register + -- our Event handler with factorio + if not event_registry[event_id] then + event_registry[event_id] = {} + + if Is.String(event_id) then + --String event ids will either be Bootstrap events or custom input events + if bootstrap_register[event_id] then + script[event_id](bootstrap_register[event_id]) + else + script.on_event(event_id, Event.dispatch) + end + elseif event_id >= 0 then + --Positive values will be defines.events + script.on_event(event_id, Event.dispatch) + elseif event_id < 0 then + --Use negative values to register on_nth_tick + script.on_nth_tick(math.abs(event_id), Event.dispatch) + end + end + + local registry = event_registry[event_id] + + --If handler is already registered for this event: remove it for re-insertion at the end. + if #registry > 0 then + for i, registered in ipairs(registry) do + if registered.handler == handler and registered.pattern == pattern and registered.matcher == matcher then + table.remove(registry, i) + log('Same handler already registered for event ' .. event_id .. ' at position ' .. i .. ', moving it to the bottom') + break + end + end + end + + --Finally insert the handler + table.insert(registry, {handler = handler, matcher = matcher, pattern = pattern}) + return Event +end + +--- Removes a handler from the given events. +--

When the last handler for an event is removed, stop listening to that event. +--

An *event ID* can be obtained via @{defines.events}, +-- @{LuaBootstrap.generate_event_name|script.generate_event_name} which is in @{int}, +-- and can be a custom input name which is in @{string}. +--

The `event_id` parameter takes in either a single, multiple, or mixture of @{defines.events}, @{int}, and @{string}. +-- @param event_id (@{defines.events}, @{int}, @{string}, or {@{defines.events}, @{int}, @{string},...}) +-- @tparam[opt] function handler the handler to remove, if not present remove all registered handlers for the event_id +-- @tparam[opt] function matcher +-- @tparam[opt] mixed pattern +-- @return (@{Event}) Event module object allowing for call chaining +function Event.remove(event_id, handler, matcher, pattern) + Is.Assert(event_id, 'missing event_id argument') + + -- Handle recursion here + if Is.Table(event_id) then + for _, id in pairs(event_id) do + Event.remove(id, handler) + end + return Event + end + + Is.Assert(valid_id(event_id)) + + local registry = event_registry[event_id] + if registry then + local found_something = false + for i = #registry, 1, -1 do + local registered = registry[i] + if handler then -- handler, possibly matcher, possibly pattern + if handler == registered.handler then + if not matcher and not pattern then + table.remove(registry, i) + found_something = true + elseif matcher then + if matcher == registered.matcher then + if not pattern then + table.remove(registry, i) + found_something = true + elseif pattern and pattern == registered.pattern then + table.remove(registry, i) + found_something = true + end + end + elseif pattern and pattern == registered.pattern then + table.remove(registry, i) + found_something = true + end + end + elseif matcher then -- no handler, matcher, possibly pattern + if matcher == registered.matcher then + if not pattern then + table.remove(registry, i) + found_something = true + elseif pattern and pattern == registered.pattern then + table.remove(registry, i) + found_something = true + end + end + elseif pattern then -- no handler, no matcher, pattern + if pattern == registered.pattern then + table.remove(registry, i) + found_something = true + end + else -- no handler, matcher, or pattern + table.remove(registry, i) + found_something = true + end + end + + if found_something and table.size(registry) == 0 then + -- Clear the registry data and un subscribe if there are no registered handlers left + event_registry[event_id] = nil + + if Is.String(event_id) then + -- String event ids will either be Bootstrap events or custom input events + if bootstrap_register[event_id] then + script[event_id](nil) + else + script.on_event(event_id, nil) + end + elseif event_id >= 0 then + -- Positive values will be defines.events + script.on_event(event_id, nil) + elseif event_id < 0 then + -- Use negative values to remove on_nth_tick + script.on_nth_tick(math.abs(event_id), nil) + end + elseif not found_something then + log('Attempt to deregister already non-registered listener from event: ' .. event_id) + end + else + log('Attempt to deregister already non-registered listener from event: ' .. event_id) + end + return Event +end + +-- A dispatch helper function +-- +-- Call any matcher and, as applicable, the event handler, in protected mode. Errors are +-- caught and logged to stdout but event processing proceeds thereafter; errors are suppressed. +local function run_protected(registered, event) + local success, err + if registered.matcher then + success, err = pcall(registered.matcher, event, registered.pattern) + if success and err then + success, err = pcall(registered.handler, event) + end + else + success, err = pcall(registered.handler, event) + end + + -- If the handler errors lets make sure someone notices + if not success then + if not Event.log_and_print(err) then + -- no players received the message, force a real error so someone notices + error(err) + end + end + + -- force a crc check if option is enabled. This is a debug option and will hamper performance if enabled + if (Event.force_crc or event.force_crc) and game then + log('CRC check called for event [' .. event.name .. ']') + game.force_crc() + end + + return success and err or nil +end + +--- The user should create a table in this format, for a table that will be passed into @{Event.dispatch}. +--

In general, the user should create an event data table that is in a similar format as the one that Factorio returns. +--> The event data table **MUST** have either `name` or `input_name`. +-- @tfield[opt] int|defines.events name unique event ID generated with @{LuaBootstrap.generate_event_name|script.generate_event_name} ***OR*** @{defines.events} +-- @tfield[opt] string input_name custom input name of an event +-- @field[opt] ... any # of additional fields with extra data, which are passed into the handler registered to an event that this table represents +-- @usage +-- -- below code is from Trains module. +-- -- old_id & new_id are additional fields passed into the handler that's registered to Trains.on_train_id_changed event. +-- local event_data = { +-- old_id = renaming.old_id, +-- new_id = renaming.new_id, +-- name = Trains.on_train_id_changed +-- } +-- Event.dispatch(event_data) +-- @table event_data + +--- Calls the handlers that are registered to the given event. +--

Abort calling remaining handlers if any one of them has invalid userdata. +--

Handlers are dispatched in the order they were created. +-- @param event (@{event_data}) the event data table +-- @see https://forums.factorio.com/viewtopic.php?t=32039#p202158 Invalid Event Objects +function Event.dispatch(event) + Is.Assert.Table(event, 'missing event table') + --get the registered handlers from name, input_name, or nth_tick in that priority. + local registry + if event.name then + registry = event_registry[event.name] + elseif event.input_name then + registry = event_registry[event.input_name] + elseif event.nth_tick then + registry = event_registry[-event.nth_tick] + end + + if registry then + -- protected_mode runs the handler and matcher in pcall, additionaly forcing a crc can only be + -- accomplished in protected_mode + local protected = Event.protected_mode or event.protected_mode + + --add the tick if it is not present, this only affects calling Event.dispatch manually + --doing the check up here as it will faster than checking every iteration for a constant value + event.tick = event.tick or game and game.tick or 0 + + for _, registered in ipairs(registry) do + -- Check for userdata and stop processing this and further handlers if not valid + -- This is the same behavior as factorio events. + -- This is done inside the loop as other events can modify the event. + for _, val in pairs(event) do + if Is.Object(val) and not val.valid then + return + end + end + + if protected then + if run_protected(registered, event) == Event.stop_processing then + return + end + elseif registered.matcher then + if registered.matcher(event, registered.pattern) then + if registered.handler(event) == Event.stop_processing then + return + end + end + else + if registered.handler(event) == Event.stop_processing then + return + end + end + end + end +end + +--- Retrieve or Generate an event_name and store it in Event.custom_events +-- @tparam string event_name the custom name for your event. +-- @treturn int the id associated with the event. +-- @usage +-- Event.register(Event.generate_event_name("my_custom_event"), handler) +function Event.generate_event_name(event_name) + Is.Assert.String(event_name, 'event_name must be a string.') + + local id + if Is.Number(Event.custom_events[event_name]) then + id = Event.custom_events[event_name] + else + id = script.generate_event_name() + Event.custom[event_name] = id + end + return id +end + +-- TODO complete stub +function Event.raise_event(...) + script.raise_event(...) +end + +function Event.get_event_handler(event_id) + Is.Assert(valid_id(event_id)) + return { + script = (tonumber(event_id) or 0 >= 0 or Is.String(event_id)) and script.get_event_handler(event_id), + handlers = event_registry[event_id] + } +end + +--- Retrieve the event_registry +-- @treturn table event_registry +function Event.get_registry() + return event_registry +end + +function Event.dump(reg_type) + local init, config, load, events, nth = 0, 0, 0, 0, 0 + for id, registry in pairs(event_registry) do + if tonumber(id) then + if id < 0 then + nth = nth + #registry + else + events = events + #registry + end + else + if id == "on_init" then + init = init + #registry + elseif id == "on_configuration_changed" then + config = config + #registry + elseif id == "load" then + load = load + #registry + else + events = events + #registry + end + end + end + local all = { + core = init + load + config, + init = init, + config = config, + load = load, + events = events, + nth = nth, + all = init + config + load + events + nth + } + return reg_type and all[reg_type] or all +end + +--- Filters events related to entity_type. +-- DEPRECATED +-- @tparam string event_parameter The event parameter to look inside to find the entity type +-- @tparam string entity_type The entity type to filter events for +-- @tparam callable matcher The matcher to invoke if the filter passes. The object defined in the event parameter is passed +function Event.filter_entity(event_parameter, entity_type, matcher) + return function(evt) + if (evt[event_parameter].type == entity_type) then + matcher(evt[event_parameter]) + end + end +end + +return Event diff --git a/HelicopterRevival/stdlib/event/force.lua b/HelicopterRevival/stdlib/event/force.lua new file mode 100644 index 00000000..2e1accdb --- /dev/null +++ b/HelicopterRevival/stdlib/event/force.lua @@ -0,0 +1,120 @@ +--- Force global creation. +--

All new forces will be added to the `global.forces` table. +--

This modules events should be registered after any other Init functions but before any scripts needing `global.players`. +--

This modules can register the following events: `on_force_created`, and `on_forces_merging`. +-- @module Force +-- @usage +-- local Force = require('stdlib/event/force').register_events() +-- -- inside your Init event Force.init() -- to properly handle any existing forces + +local Event = require('stdlib/event/event') + +local Force = { + _module_name = 'Force' +} +setmetatable(Force, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Game = require('stdlib/game') + +-- return new default force object +local function new(force_name) + local fdata = { + index = force_name, + name = force_name + } + if Event._new_force_data then + if type(Event._new_force_data) == 'table' then + table.merge(fdata, table.deepcopy(Event._new_force_data)) + elseif type(Event._new_force_data) == 'function' then + local new_data = Event._new_force_data(force_name) + if type(new_data) == 'table' then + table.merge(fdata, new_data) + else + error('new_player_data did not return a table') + end + else + error('new_player_data present but is not a function or table') + end + end + + return fdata +end + +function Force.additional_data(func_or_table) + Event._new_force_data = func_or_table + return Force +end + +--- Get `game.forces[name]` & `global.forces[name]`, or create `global.forces[name]` if it doesn't exist. +-- @tparam string|LuaForce force the force to get data for +-- @treturn LuaForce the force instance +-- @treturn table the force's global data +-- @usage +-- local Force = require('stdlib/event/force') +-- local force_name, force_data = Force.get("player") +-- local force_name, force_data = Force.get(game.forces["player"]) +-- -- Returns data for the force named "player" from either a string or LuaForce object +function Force.get(force) + force = Game.get_force(force) + Is.Assert(force, 'force is missing') + return game.forces[force.name], global.forces[force.name] or Force.init(force.name) +end + +--- Merge a copy of the passed data to all forces in `global.forces`. +-- @tparam table data a table containing variables to merge +-- @usage +-- local data = {a = "abc", b = "def"} +-- Force.add_data_all(data) +function Force.add_data_all(data) + table.each( + global.forces, + function(v) + table.merge(v, table.deepcopy(data)) + end + ) +end + +--- Init or re-init a force or forces. +-- Passing a `nil` event will iterate all existing forces. +-- @tparam[opt] string|table event table or a string containing force name +-- @tparam[opt=false] boolean overwrite the force data +function Force.init(event, overwrite) + global.forces = global.forces or {} + + local force = Game.get_force(event) + + if force then + if not global.forces[force.name] or (global.forces[force.name] and overwrite) then + global.forces[force.name] = new(force.name) + return global.forces[force.name] + end + else + for name in pairs(game.forces) do + if not global.forces[name] or (global.forces[name] and overwrite) then + global.forces[name] = new(name) + end + end + end + return Force +end + +-- TODO Figure out best way to handle this! +function Force.merge() +end + +function Force.register_init() + Event.register(Event.core_events.init, Force.init) + return Force +end + +function Force.register_events(skip_init) + Event.register(defines.events.on_force_created, Force.init) + Event.register(defines.events.on_forces_merging, Force.merge) + if not skip_init then + Force.register_init() + end + return Force +end + +return Force diff --git a/HelicopterRevival/stdlib/event/gui.lua b/HelicopterRevival/stdlib/event/gui.lua new file mode 100644 index 00000000..9f8f9516 --- /dev/null +++ b/HelicopterRevival/stdlib/event/gui.lua @@ -0,0 +1,80 @@ +--- Makes monolithic Factorio GUI events more manageable. +-- @module Gui +-- @usage local Gui = require('stdlib/event/gui') + +local Event = require('stdlib/event/event') + +local Gui = { + _module_name = 'Gui' +} +setmetatable(Gui, {__index = require('stdlib/core')}) + +local function matcher(event, pattern) + if event.element and event.element.valid then + local match_str = event.element.name:match(pattern) + if match_str then + event.match = match_str + event.state = event.name == defines.events.on_gui_checked_state_changed and event.element.state or nil + event.text = event.name == defines.events.on_gui_text_changed and event.element.text or nil + return match_str + end + end +end + +--- Registers a function for a given gui element name or pattern when the element is clicked. +-- @tparam string gui_element_pattern the name or string regular expression to match the gui element +-- @tparam function handler the function to call when gui element is clicked +-- @return (@{Gui}) +function Gui.on_click(gui_element_pattern, handler) + Event.register(defines.events.on_gui_click, handler, matcher, gui_element_pattern) + return Gui +end + +--- Registers a function for a given GUI element name or pattern when the element checked state changes. +-- @tparam string gui_element_pattern the name or string regular expression to match the GUI element +-- @tparam function handler the function to call when GUI element checked state changes +-- @return (@{Gui}) +function Gui.on_checked_state_changed(gui_element_pattern, handler) + Event.register(defines.events.on_gui_checked_state_changed, handler, matcher, gui_element_pattern) + return Gui +end + +--- Registers a function for a given GUI element name or pattern when the element text changes. +-- @tparam string gui_element_pattern the name or string regular expression to match the GUI element +-- @tparam function handler the function to call when GUI element text changes +-- @return (@{Gui}) +function Gui.on_text_changed(gui_element_pattern, handler) + Event.register(defines.events.on_gui_text_changed, handler, matcher, gui_element_pattern) + return Gui +end + +--- Registers a function for a given GUI element name or pattern when the element selection changes. +-- @tparam string gui_element_pattern the name or string regular expression to match the GUI element +-- @tparam function handler the function to call when GUI element selection changes +-- @return (@{Gui}) +function Gui.on_elem_changed(gui_element_pattern, handler) + Event.register(defines.events.on_gui_elem_changed, handler, matcher, gui_element_pattern) + return Gui +end + +--- Registers a function for a given GUI element name or pattern when the element state changes (drop down). +-- @tparam string gui_element_pattern the name or string regular expression to match the GUI element +-- @tparam function handler the function to call when GUI element state changes +-- @return (@{Gui}) +function Gui.on_selection_state_changed(gui_element_pattern, handler) + Event.register(defines.events.on_gui_selection_state_changed, handler, matcher, gui_element_pattern) + return Gui +end + +--- Registers a function for a given GUI element name or pattern when the element value changes (slider). +-- @tparam string gui_element_pattern the name or string regular expression to match the GUI element +-- @tparam function handler the function to call when GUI element state changes +-- @return (@{Gui}) +function Gui.on_value_changed(gui_element_pattern, handler) + Event.register(defines.events.on_gui_value_changed, handler, matcher, gui_element_pattern) + return Gui +end + +Event.Gui = Gui + +return Gui diff --git a/HelicopterRevival/stdlib/event/player.lua b/HelicopterRevival/stdlib/event/player.lua new file mode 100644 index 00000000..876c56be --- /dev/null +++ b/HelicopterRevival/stdlib/event/player.lua @@ -0,0 +1,139 @@ +--- Player global creation. +-- This module adds player helper functions, it does not automatically register events unless Player.register_events() is called +-- @module Player +-- @usage +-- local Player = require('stdlib/event/player').register_events() +-- -- The fist time this is required it will register player creation events + +local Event = require('stdlib/event/event') + +local Player = { + _module_name = 'Player' +} +setmetatable(Player, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local Game = require('stdlib/game') + +-- Return new default player object consiting of index and name +local function new(player_index) + local pdata = { + index = player_index, + name = game.players[player_index].name, + force = game.players[player_index].force.name + } + if Event._new_player_data then + if type(Event._new_player_data) == 'table' then + table.merge(pdata, table.deepcopy(Event._new_player_data)) + elseif type(Event._new_player_data) == 'function' then + local new_data = Event._new_player_data(player_index) + if type(new_data) == 'table' then + table.merge(pdata, new_data) + else + error('new_player_data did not return a table') + end + else + error('new_player_data present but is not a function or table') + end + end + return pdata +end + +function Player.additional_data(func_or_table) + Event._new_player_data = func_or_table + return Player +end + +--- Get `game.players[index]` & `global.players[index]`, or create `global.players[index]` if it doesn't exist. +-- @tparam number|string|LuaPlayer player the player index to get data for +-- @treturn LuaPlayer the player instance +-- @treturn table the player's global data +-- @usage +-- local Player = require('stdlib/event/player') +-- local player, player_data = Player.get(event.player_index) +function Player.get(player) + player = Game.get_player(player) + Is.Assert(player, 'Missing player to retrieve') + return player, global.players[player.index] or Player.init(player.index) +end + +--- Merge a copy of the passed data to all players in `global.players`. +-- @tparam table data a table containing variables to merge +-- @usage local data = {a = 'abc', b= 'def'} +-- Player.add_data_all(data) +function Player.add_data_all(data) + local pdata = global.players + table.each( + pdata, + function(v) + table.merge(v, table.deepcopy(data)) + end + ) +end + +--- Remove data for a player when they are deleted. +-- @tparam table event event table containing the `player_index` +function Player.remove(event) + local player = Game.get_player(event) + if player then + global.players[player.index] = nil + end +end + +--- Init or re-init a player or players. +-- Passing a `nil` event will iterate all existing players. +-- @tparam[opt] number|table|string|LuaPlayer event +-- @tparam[opt=false] boolean overwrite the player data +function Player.init(event, overwrite) + -- Create the global.players table if it doesn't exisit + global.players = global.players or {} + + --get a valid player object or nil + local player = Game.get_player(event) + + if player then --If player is not nil then we are working with a valid player. + if not global.players[player.index] or (global.players[player.index] and overwrite) then + global.players[player.index] = new(player.index) + return global.players[player.index] + end + else --Check all players + for index in pairs(game.players) do + if not global.players[index] or (global.players[index] and overwrite) then + global.players[index] = new(index) + end + end + end + + if global._print_queue then + table.each( + global._print_queue, + function(msg) + game.print(tostring(msg)) + end + ) + global._print_queue = nil + end + return Player +end + +function Player.update_force(event) + local player, pdata = Player.get(event.player_index) + pdata.force = player.force.name +end + +function Player.register_init() + Event.register(Event.core_events.init, Player.init) + return Player +end + +function Player.register_events(skip_init) + Event.register(defines.events.on_player_created, Player.init) + Event.register(defines.events.on_player_changed_force, Player.update_force) + Event.register(defines.events.on_player_removed, Player.remove) + if not skip_init then + Player.register_init() + end + return Player +end + +return Player diff --git a/HelicopterRevival/stdlib/event/trains.lua b/HelicopterRevival/stdlib/event/trains.lua new file mode 100644 index 00000000..485ae5a8 --- /dev/null +++ b/HelicopterRevival/stdlib/event/trains.lua @@ -0,0 +1,212 @@ +--- Tools for working with trains. +-- When this module is loaded into a mod, it automatically registers a number of new events in order to keep track of the trains as their locomotives and wagons are moved around. +--

To handle the events, you should use the @{Event} module. +-- @module Trains + +local Trains = { + _module_name = 'Trains' +} +setmetatable(Trains, {__index = require('stdlib/core')}) + +local Event = require('stdlib/event/event') +local Surface = require('stdlib/area/surface') +local Entity = require('stdlib/entity/entity') + +--- This event fires when a train's ID changes. +--

The train ID is a property of the main locomotive, +-- which means that when locomotives are attached or detached from their wagons or from other locomotives, the ID of the train changes. +--

For example: A train with a front and rear locomotives will get its ID +-- from the front locomotive. If the front locomotive gets disconnected, the rear locomotive becomes the main one and the train's ID changes. +-- @event on_train_id_changed +-- @tparam uint old_id the ID of the train before the change +-- @tparam uint new_id the ID of the train after the change +-- @usage +---- Event.register(Trains.on_train_id_changed, my_handler) +Trains.on_train_id_changed = script.generate_event_name() + +--- Given a @{criteria|search criteria}, search for trains that match the criteria. +-- * If ***criteria.surface*** is not supplied, this function searches through all existing surfaces. +-- * If ***criteria.force*** is not supplied, this function searches through all existing forces. +-- * If ***criteria.state*** is not supplied, this function gets trains in any @{defines.train_state|state}. +-- @tparam criteria criteria a table used to search for trains +-- @return ({@{train_details},...}) an array of train IDs and LuaTrain instances +-- @usage +-- Trains.find_filtered({ surface = "nauvis", state = defines.train_state.wait_station }) +function Trains.find_filtered(criteria) + criteria = criteria or {} + + local surface_list = Surface.lookup(criteria.surface) + if criteria.surface == nil then + surface_list = game.surfaces + end + + local results = {} + + for _, surface in pairs(surface_list) do + local trains = surface.get_trains(criteria.force) + for _, train in pairs(trains) do + table.insert(results, train) + end + end + + -- Apply state filters + if criteria.state then + results = + table.filter( + results, + function(train) + return train.state == criteria.state + end + ) + end + + -- Lastly, look up the train ids + results = + table.map( + results, + function(train) + return {train = train, id = Trains.get_main_locomotive(train).unit_number} + end + ) + + return results +end + +--- +-- This table should be passed into @{find_filtered} to find trains that match the criteria. +-- @tfield[opt] ?|nil|string|{string,...}|LuaSurface|{LuaSurface,...} surface the surfaces to look up for the trains +-- @tfield[opt] ?|nil|string|LuaForce force the force of the trains to search +-- @tfield[opt] ?|nil|defines.train_state state the state of the trains to search +-- @table criteria + +--- +-- @{find_filtered} returns an array with one or more of ***this*** table based on the @{criteria|search criteria}. +-- @tfield LuaTrain train an instance of the train +-- @tfield uint id the ID of the train +-- @table train_details + +--- Find the ID of a LuaTrain instance. +-- @tparam LuaTrain train +-- @treturn uint the ID of the train +function Trains.get_train_id(train) + local loco = Trains.get_main_locomotive(train) + return loco and loco.unit_number +end + +--- Event fired when some change happens to a locomotive. +-- @lfunction +function Trains._on_locomotive_changed() + -- For all the known trains + local renames = {} + for id, train in pairs(global._train_registry) do + -- Check if their known ID is the same as the LuaTrain's dervied id + local derived_id = Trains.get_train_id(train) + -- If it's not + if (id ~= derived_id) then + -- Capture the rename + table.insert(renames, {old_id = id, new_id = derived_id, train = train}) + end + end + + -- Go over the captured renaming operations + for _, renaming in pairs(renames) do + -- Rename it in the registry + -- and dispatch a renamed event + global._train_registry[renaming.new_id] = renaming.train + global._train_registry[renaming.old_id] = nil + + local event_data = { + old_id = renaming.old_id, + new_id = renaming.new_id, + name = Trains.on_train_id_changed + } + Event.dispatch(event_data) + end +end + +--- Get the main locomotive of a train. +-- @tparam LuaTrain train +-- @treturn LuaEntity the main locomotive +function Trains.get_main_locomotive(train) + if train and train.valid and train.locomotives and (#train.locomotives.front_movers > 0 or #train.locomotives.back_movers > 0) then + return train.locomotives.front_movers and train.locomotives.front_movers[1] or train.locomotives.back_movers[1] + end +end + +--- Creates an entity from a train that is compatible with the @{Entity} module. +-- @tparam LuaTrain train +-- @return (@{train_entity}) +function Trains.to_entity(train) + local name = 'train-' .. Trains.get_train_id(train) + return { + name = name, + valid = train.valid, + equals = function(entity) + return name == entity.name + end + } +end + +------ +-- @{to_entity} returns ***this*** table. +-- @tfield string name the name of the train entity with the train ID as its suffix +-- @tfield boolean valid whether or not if the train is in a valid state in the game +-- @tfield function equals — *function(entity)* — a function to check if another entity is equal to the train that ***this*** table represents +-- @table train_entity + +--- Associates the user data to a train. +-- This is a helper around @{Entity.set_data}. +--

The user data will be stored in the global object and it will persist between loads. +--> The user data will be removed from a train when the train becomes invalid. +-- @tparam LuaTrain train the train to set the user data for +-- @tparam ?|nil|Mixed data the user data to set, or nil to delete the user data associated with the train +-- @treturn ?|nil|Mixed the previous user data or nil if the train had no previous user data +function Trains.set_data(train, data) + return Entity.set_data(Trains.to_entity(train), data) +end + +--- Gets the user data that is associated with a train. +-- This is a helper around @{Entity.get_data}. +--

The user data is stored in the global object and it persists between loads. +--> The user data will be removed from a train when the train becomes invalid. +-- @tparam LuaTrain train the train to look up user data for +-- @treturn ?|nil|Mixed the user data, or nil if no user data exists for the train +function Trains.get_data(train) + return Entity.get_data(Trains.to_entity(train)) +end + +-- Creates a registry of known trains. +-- @return table a mapping of train id to LuaTrain object +function Trains.create_train_registry() + global._train_registry = global._train_registry or {} + + local all_trains = Trains.find_filtered() + for _, trainInfo in pairs(all_trains) do + global._train_registry[tonumber(trainInfo.id)] = trainInfo.train + end + + return global._train_registry +end + +function Trains.on_train_created(event) + local train_id = Trains.get_train_id(event.train) + global._train_registry[train_id] = event.train +end + +--- This needs to be called to register events for this module +-- @treturn Trains +function Trains.register_events() + require('stdlib/event/event') + -- When a locomotive is removed ... + local train_remove_events = {defines.events.on_entity_died, defines.events.on_pre_player_mined_item, defines.events.on_robot_pre_mined} + Event.register(train_remove_events, Event.filter_entity('entity', 'locomotive', Trains._on_locomotive_changed)) + + -- When a locomotive is added ... + Event.register(defines.events.on_train_created, Trains.on_train_created) + + -- When the mod is initialized the first time + Event.register(Event.core_events.init_and_config, Trains.create_train_registry) + return Trains +end + +return Trains diff --git a/HelicopterRevival/stdlib/game.lua b/HelicopterRevival/stdlib/game.lua new file mode 100644 index 00000000..61431c8f --- /dev/null +++ b/HelicopterRevival/stdlib/game.lua @@ -0,0 +1,63 @@ +--- The game module. +-- @module Game +-- @usage local Game = require('stdlib/game') + +local Game = {_module_name = 'Game'} +setmetatable(Game, {__index = require('stdlib/core')}) + +--- Return a valid player object from event, index, string, or userdata +-- @tparam string|number|LuaPlayer|event mixed +-- @treturn LuaPlayer a valid player or nil +function Game.get_player(mixed) + if type(mixed) == 'table' then + if mixed.__self then + return mixed and mixed.valid and mixed + elseif mixed.player_index then + local player = game.players[mixed.player_index] + return player + end + elseif mixed then + local player = game.players[mixed] + return player + end +end + +--- Return a valid force object from event, string, or userdata +-- @tparam string|LuaForce|event mixed +-- @treturn LuaForce a valid force or nil +function Game.get_force(mixed) + if type(mixed) == 'table' then + if mixed.__self then + return mixed and mixed.valid and mixed + elseif mixed.force then + return Game.get_force(mixed.force) + end + elseif type(mixed) == 'string' then + local force = game.forces[mixed] + return (force and force.valid) and force + end +end + +--- Messages all players currently connected to the game. +--> Offline players are not counted as having received the message. +-- If no players exist msg is stored in the `global._print_queue` table. +-- @tparam string msg the message to send to players +-- @tparam[opt] ?|nil|boolean condition the condition to be true for a player to be messaged +-- @treturn uint the number of players who received the message. +function Game.print_all(msg, condition) + local num = 0 + if #game.players > 0 then + for _, player in pairs(game.players) do + if condition == nil or select(2, pcall(condition, player)) then + player.print(msg) + num = num + 1 + end + end + return num + else + global._print_queue = global._print_queue or {} + global._print_queue[#global._print_queue + 1] = msg + end +end + +return Game diff --git a/HelicopterRevival/stdlib/log/logger.lua b/HelicopterRevival/stdlib/log/logger.lua new file mode 100644 index 00000000..289a2192 --- /dev/null +++ b/HelicopterRevival/stdlib/log/logger.lua @@ -0,0 +1,122 @@ +--- For logging debug information to files. +-- @module Logger +-- @usage +-- local Logger = require('stdlib/log/logger') +-- -- or to create a logger directly: +-- local LOGGER = require('stdlib/log/logger').new(...) +-- -- and to use the same LOGGER in multiple require files make it global by removing 'local'. + +local M = {_module_name = 'Logger'} +setmetatable(M, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') + +--- Creates a new logger object. +-- In debug mode, the logger writes to file immediately, otherwise the logger buffers the lines. +--

The logger flushes the logged messages every 60 seconds since the last message. +--

A table of @{options} may be specified when creating a logger. +-- @usage +--LOGGER = Logger.new('cool_mod_name') +--LOGGER.log("this msg will be logged!") +-- +-- @usage +--LOGGER = Logger.new('cool_mod_name', 'test', true) +--LOGGER.log("this msg will be logged and written immediately in test.log!") +-- +-- @usage +--LOGGER = Logger.new('cool_mod_name', 'test', true, { file_extension = data }) +--LOGGER.log("this msg will be logged and written immediately in test.data!") +-- +-- @tparam string mod_name [required] the name of the mod to create the logger for +-- @tparam[opt='main'] string log_name the name of the logger +-- @tparam[opt=false] boolean debug_mode toggles the debug state of logger +-- @tparam[opt={...}] options options a table with optional arguments +-- @return (@{Logger}) the logger instance +function M.new(mod_name, log_name, debug_mode, options) + Is.Assert.String(mod_name, 'Logger must be given a mod_name as the first argument') + + log_name = log_name or 'main' + options = options or {} + + local Logger = { + mod_name = mod_name, + log_name = log_name, + debug_mode = debug_mode, + buffer = {}, + last_written = 0, + ever_written = false + } + + --- + -- Used in the @{new} function for logging game ticks, specifying logfile extension, or forcing the logs to append to the end of the logfile. + -- @tfield[opt=false] boolean log_ticks whether to include the game tick timestamp in the logs + -- @tfield[opt="log"] string file_extension a string that overrides the default logfile extension + -- @tfield[opt=false] boolean force_append if true, every new message appends to the current logfile instead of creating a new one + -- @table Logger.options + Logger.options = { + log_ticks = options.log_ticks or false, + file_extension = options.file_extension or 'log', + force_append = options.force_append or false + } + + Logger.file_name = Logger.mod_name .. '/' .. Logger.log_name .. '.' .. Logger.options.file_extension + Logger.ever_written = Logger.options.force_append + + --- Logs a message. + -- @tparam string|table msg the message to log. @{table}s will be dumped using [serpent](https://github.com/pkulchenko/serpent) which is included in the official Factorio Lualib + -- @treturn boolean true if the message was written, false if it was queued for a later write + -- @see https://forums.factorio.com/viewtopic.php?f=25&t=23844 Debugging utilities built in to Factorio + function Logger.log(msg) + local format = string.format + if _G.game then + local tick = game.tick + local floor = math.floor + local time_s = floor(tick / 60) + local time_minutes = floor(time_s / 60) + local time_hours = floor(time_minutes / 60) + + if type(msg) ~= 'string' then + msg = serpent.block(msg, {comment = false, nocode = true, sparse = true}) + end + + if Logger.options.log_ticks then + table.insert(Logger.buffer, format('%02d:%02d:%02d.%02d: %s\n', time_hours, time_minutes % 60, time_s % 60, tick - time_s * 60, msg)) + else + table.insert(Logger.buffer, format('%02d:%02d:%02d: %s\n', time_hours, time_minutes % 60, time_s % 60, msg)) + end + + -- write the log every minute + if (Logger.debug_mode or (tick - Logger.last_written) > 3600) then + return Logger.write() + end + else + if _G.script then --buffer when a save is loaded but _G.game isn't available + if Logger.options.log_ticks then + table.insert(Logger.buffer, format('00:00:00:00: %s\n', msg)) + else + table.insert(Logger.buffer, format('00:00:00: %s\n', msg)) + end + else --log in data stage + log(format('%s/%s: %s', Logger.mod_name, Logger.log_name, msg)) + end + end + return false + end + + --- Writes out all buffered messages immediately. + -- @treturn boolean true if write was successful, false otherwise + function Logger.write() + if _G.game then + Logger.last_written = game.tick + game.write_file(Logger.file_name, table.concat(Logger.buffer), Logger.ever_written) + Logger.buffer = {} + Logger.ever_written = true + return true + end + return false + end + + return Logger +end + +return M diff --git a/HelicopterRevival/stdlib/queue/queue.lua b/HelicopterRevival/stdlib/queue/queue.lua new file mode 100644 index 00000000..a064cbf0 --- /dev/null +++ b/HelicopterRevival/stdlib/queue/queue.lua @@ -0,0 +1,200 @@ +--- A double queue. +-- Taken from ***Programming in Lua*** [Queues and Double Queues](http://www.lua.org/pil/11.4.html) +-- and modified to not allow nil values, and returns nil if @{pop_first} or @{pop_last} is used when the queue is empty. +-- @module Queue +-- @usage local Queue = require('stdlib/queue/queue') + +local Queue = {_module_name = 'Queue'} +setmetatable(Queue, {__index = require('stdlib/core')}) + +local Is = require('stdlib/utils/is') +local t_size = table.size + +--- Constructs a new Queue object. +-- @return (@{Queue}) a new, empty queue +function Queue.new() + local queue = {first = 1, last = 0, objects = {}} + setmetatable(queue, Queue._mt) + return queue +end +Queue:set_caller(Queue.new) + +-- Allows queue[3] to return the item at queue.objects[3] +local function __index(self, k) + if Is.number(k) then + return self.objects[k] + else + return rawget(self, k) or Queue[k] + end +end + +-- Allows queue() to pop_first and queue(data) to push_last +local function __call(self, ...) + if ... then + return self.push(self, ...) + else + return self.pop(self) + end +end + +--- Load global.queue or queues during on_load, as metatables are not persisted. +--

This is only needed if you are using the queue as an object and storing it in global. +-- @param ... (@{Queue},...) +-- @usage global.myqueue1 = Queue.new() +-- global.myqueue2 = Queue.new() +-- script.on_load(function() Queue.load(myqueue1, myqueue2)) +function Queue.load(...) + if not ... then + return + end + for _, queue in pairs({...}) do + if queue.first then + setmetatable(queue, Queue._mt) + end + end +end + +-- --- Gets the index which matches the stored data +-- TODO future direction +-- function Queue.get_index(queue, obj) +-- for i, v in pairs(queue.objects) do +-- if v == obj then +-- return i +-- end +-- end +-- end + +-- TODO pop at index, everything after index insert at -1 dec last +-- function Queue.pop_at_index(queue, index) +-- return queue.objects[index] +-- end + +-- TODO push at index, everything at and after index + 1 inc last +-- function Queue.push_at_index(queue, index) +-- return queue +-- end + +--- Push a new element to the front of the queue. +-- @param queue (@{Queue}) the queue to push an element to +-- @tparam Mixed value the element to push +function Queue.push_first(queue, value) + Is.Assert(value, 'must have a value to push') + + local first = queue.first - 1 + queue.first = first + queue.objects[first] = value + return queue +end + +--- Push a new element to the back of the queue. +-- @param queue (@{Queue}) the queue to push an element to +-- @tparam Mixed value the element to push +function Queue.push_last(queue, value) + Is.Assert(value, 'must have a value to push') + + local last = queue.last + 1 + queue.last = last + queue.objects[last] = value + return queue +end +--- Shortcut for @{Queue.push_last} +-- @function Queue.push +Queue.push = Queue.push_last + +--- Retrieve the element at the front of the queue and remove it from the queue. +-- @param queue (@{Queue}) the queue to retrieve the element from +-- @treturn Mixed value the element at the front of the queue +function Queue.pop_first(queue) + if Queue.is_empty(queue) then + return nil + end + local first = queue.first + local value = queue.objects[first] + queue.objects[first] = nil -- to allow garbage collection + queue.first = first + 1 + return value +end +--- Shortcut for @{Queue.pop_first} +-- @function Queue.pop +Queue.pop = Queue.pop_first + +--- Return the element at the front of the queue and remove it from the queue. +-- @param queue (@{Queue}) the queue to retrieve the element from +-- @treturn Mixed the element at the front of the queue +function Queue.peek_first(queue) + return queue.objects[queue.first] +end +--- Shortcut for @{Queue.peek_first} +-- @function Queue.peek +Queue.peek = Queue.peek_first + +--- Retrieve the element at the back of the queue and remove it from the queue. +-- @param queue (@{Queue}) the queue to retrieve the element from +-- @treturn Mixed the element at the back of the queue +function Queue.pop_last(queue) + if queue.is_empty(queue) then + return nil + end + + local last = queue.last + local value = queue.objects[last] + queue.objects[last] = nil -- to allow garbage collection + queue.last = last - 1 + return value +end + +--- Return the element at the back of the queue. +-- @param queue (@{Queue}) the queue to retrieve the element from +-- @treturn Mixed the element at the back of the queue +function Queue.peek_last(queue) + return queue.objects[queue.last] +end + +--- Returns true if the given queue is empty. +-- @param queue (@{Queue}) the queue to check +-- @treturn boolean true if empty, false otherwise +function Queue.is_empty(queue) + return t_size(queue.objects) == 0 +end + +--- Returns the number of items in the queue. +-- @param queue (@{Queue}) the queue to check +-- @treturn number the number of items in the queue +function Queue.count(queue) + return t_size(queue.objects) +end + +function Queue.pairs(queue, pop) + local i = queue.first - 1 + return function() + i = i + 1 + local v = pop and queue.pop(queue) or queue.objects[i] + if v then + return i, v + end + end +end +Queue.iter = Queue.pairs +Queue.iter_first = Queue.pairs + +function Queue.rpairs(queue, pop) + local i = queue.last + 1 + return function() + i = i - 1 + local v = pop and queue.pop_last(queue) or queue.objects[i] + if v then + return i, v + end + end +end +Queue.iter_last = Queue.rpairs + +Queue._mt = { + __index = __index, + __pairs = Queue.pairs, + __ipairs = Queue.pairs, + __len = Queue.count, + __call = __call +} + +return Queue diff --git a/HelicopterRevival/stdlib/utils/classes/joules.lua b/HelicopterRevival/stdlib/utils/classes/joules.lua new file mode 100644 index 00000000..af85ae36 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/classes/joules.lua @@ -0,0 +1,6 @@ +--- For working with energy strings +-- @classmod Joules + +local Joules = {} + +return Joules diff --git a/HelicopterRevival/stdlib/utils/classes/linked_list.lua b/HelicopterRevival/stdlib/utils/classes/linked_list.lua new file mode 100644 index 00000000..f4993d88 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/classes/linked_list.lua @@ -0,0 +1,420 @@ +--- A double-linked list implementation +local Is = require('stdlib/utils/is') + +-- @class LinkedListNode +-- @usage local llnode = linkedlist.append(item) +local LinkedListNode = setmetatable( + { + _module_name = 'linked_list', + _class_name = 'LinkedListNode', + _is_LinkedListNode = true, + _mt = {} + }, + { + __index = require('stdlib/core') + } +) +LinkedListNode._mt.__index = LinkedListNode +LinkedListNode._class = LinkedListNode + +-- @module linked_list +-- @usage local LinkedList = require('stdlib.utils.classes.linked_list') +local LinkedList = setmetatable( + { + _module_name = 'linked_list', + _class_name = 'LinkedList', + _is_LinkedList = true, + _node_class = LinkedListNode, + _mt = {} + }, + { + __index = require('stdlib/core') + } +) +LinkedList._class = LinkedList + +function LinkedList.new(self) + -- support LinkedList.new() syntax compatible with most stdlib classes + if Is.Nil(self) then self = LinkedList end + -- determine if this is a class or an instance; if an instance, assume they intended + -- to create a node and provide a hopefully-not-too-confusing error message. + Is.Assert.Nil(self.next, function() + return 'Use foo:new_node(), not foo:new(), to create new ' .. self._class_name .. ' nodes' + end) + local result = setmetatable({_class = self}, self._mt) + result.next = result + result.prev = result + return result +end + +function LinkedList:new_node(item, prev, next) + -- only way to determine if this is a class or an instance + Is.Assert.Not.Nil(self, 'Use foo:new_node, not foo.new_node to create new nodes') + Is.Assert.Not.Nil(self.next, 'Use :new to create LinkedList instance objects') + + -- holy crap, is there some better way to find the node class? Maybe separate + -- LinkedList:new_node from LinkedListNode:new_node? + local node_class = self._is_LinkedList and Is.Nil(self.next) and self._node_class + or self._is_LinkedList and self._class and self._class._node_class + or self._is_LinkedListNode and self._class + or self._is_LinkedListNode and self + + local result = setmetatable({_class = node_class}, node_class._mt) + result.next = next or result + result.prev = prev or result + result.item = item + return result +end +-- the new_node method is shared (physically) by both LinkedList instance objects and LinkedListNode instances +LinkedListNode.new_node = LinkedList.new_node + +function LinkedList:from_stack(stack, allow_insane_sparseness) + Is.Assert.Not.Nil(self._class, 'LinkedList:from_stack is a class method, not a static function; \z + For example LinkedList:from_stack(stack) would be a correct invocation syntax') + -- since linkedlists effectively support sparse keys, ensure we can + -- round-trip various configurations by supporting sparse pseudo-stacks + local sparsekeys = {} + for k in pairs(stack) do + if type(k) == 'number' and math.floor(k) == k and math.max(1, k) == k then + table.insert(sparsekeys, k) + else + log('LinkedList.from_stack ignoring non-stackish key value "' .. tostring(k) .. '"') + end + end + table.sort(sparsekeys) + local result = self._class:new() + -- subclasses could theoretically override the allow_insane_sparseness + -- object-level override in _class:new(), so respect their wishes here. + result.allow_insane_sparseness = result.allow_insane_sparseness or allow_insane_sparseness + local lastkey = 0 + for _,k in ipairs(sparsekeys) do + lastkey = lastkey + 1 + if lastkey < k then + if k - lastkey >= 999 then + Is.Assert(result.allow_insane_sparseness, function() + return "Refusing to create insanely sparse list at key " .. tostring(k) + end) + end + repeat + lastkey = lastkey + 1 + result.prev.next = result:new_node(nil, result.prev, result) + result.prev = result.prev.next + until lastkey == k + end + result.prev.next = result:new_node(stack[k], result.prev, result) + result.prev = result.prev.next + end + return result +end + +function LinkedList:to_stack() + local result = {} + local index = 1 + for node in self:nodes() do + if Is.Not.Nil(node.item) then + result[index] = node.item + end + index = index + 1 + end + return result +end + +function LinkedList:length() + local result = 0 + for _ in self:nodes() do + result = result + 1 + end + return result +end +LinkedList._mt.__len = LinkedList.length + +function LinkedList:is_empty() + Is.Assert.Not.Nil(self, 'LinkedList.is_empty called without self argument', 3) + Is.Assert.Not.Nil(self.next, 'LinkedList.next property is missing: structural error or bad argument', 3) + return self.next == self +end + +function LinkedList:last_node() + return self.prev ~= self and self.prev or nil +end + +function LinkedList:last_item() + local node = self:last_node() + return node and node.item or nil +end + +function LinkedList:first_node() + return self.next ~= self and self.next or nil +end + +function LinkedList:first_item() + local node = self:first_node() + return node and node.item or nil +end + +function LinkedList:concatenate(other) + if Is.Nil(other) then + return self:copy() + else + Is.Assert(other._is_LinkedList, 'cannot concatenate non-linked-list with linked-list') + end + local selfcopy = self:copy() + if not other:is_empty() then + local othercopy = other:copy() + selfcopy.prev.next = othercopy.next + othercopy.next.prev = selfcopy.prev + selfcopy.prev = othercopy.prev + othercopy.prev.next = selfcopy + end + return selfcopy +end +LinkedList._mt.__concat = LinkedList.concatenate + +function LinkedList._mt.__index(self, k) + if type(k) ~= 'number' or math.floor(k) ~= k or k < 1 then + -- any non-special index goes to the class from here + return self._class[k] + end + local count = 1 + local node = self.next + while node ~= self do + if count == k then + return node.item + end + node = node.next + count = count + 1 + end +end + +function LinkedList._mt.__newindex(self, k, v) + if type(k) ~= 'number' or math.floor(k) ~= k or k < 1 then + -- any non-special index goes straight into the table (the class is + -- immutable, but the object may opt to override class functions) + return rawset(self, k, v) + end + local count = 1 + local node = self.next + while node ~= self do + if count == k then + node.item = v + return nil + end + node = node.next + count = count + 1 + end + -- They have requested a new node to be appended, perhaps with a certain + -- number of intervening empty nodes. But, would the request create an + -- insanely sparse index? + Is.Assert(k - count < 999 or self.allow_insane_sparseness, + 'Setting requested index in linkedlist would create insanely sparse list') + repeat + -- this is a bit gross; we increment count one /exta/ time here, on the + -- first iteration; so now count == self.length + 2 + count = count + 1 + node = self:append(nil) + -- nb: count == self.length + 1 + until count > k + node.item = v +end + +function LinkedList:append(item) + self.prev.next = self:new_node(item, self.prev, self) + self.prev = self.prev.next + return self.prev +end + +function LinkedList:prepend(item) + self.next.prev = self:new_node(item, self, self.next) + self.next = self.next.prev + return self.next +end + +function LinkedList:insert(item, index) + if not index then + return self:append(item) + elseif index == 1 then + return self:prepend(item) + end + Is.Assert(type(index) == "number" and math.floor(index) == index and index >= 1, + "LinkedList:insert with irregular index") + local length = self:length() + Is.Assert(index - length <= 999 or self.allow_insane_sparseness, + "LinkedList:insert would create insanely sparse list.") + if length + 1 < index then + repeat + length = length + 1 + self:append(nil) + until length + 1 == index + return self:append(item) + else + local node = self + while index > 1 do + node = node.next + index = index - 1 + end + node.next.prev = self:new_node(item, node, node.next) + node.next = node.next.prev + return node.next.prev + end +end + +function LinkedList:remove(index) + Is.Assert.Not.Nil(self, "LinkedList:remove called without self argument.", 3) + Is.Assert.Not.Nil(index, "LinkedList:remove without index argument", 3) + Is.Assert(type(index) == "number" and math.floor(index) == index and index >= 1, + "LinkedList:remove with irregular index argument.", 3) + if self:is_empty() then + return nil + end + local count = 1 + local node = self.next + while node ~= self do + if count == index then + node.prev.next = node.next + node.next.prev = node.prev + return node + else + count = count + 1 + node = node.next + end + end +end + +function LinkedListNode:_copy_with_to(copy_fn, other_node) + other_node.item = copy_fn(self.item) +end + +function LinkedList:_copy_with_to(copy_fn, other) + local lastnode = other + for selfnode in self:nodes() do + lastnode.next = selfnode:new_node(nil, lastnode, other) + lastnode = lastnode.next + selfnode:_copy_with_to(copy_fn, lastnode) + end + other.prev = lastnode +end + +function LinkedList:_copy_with(copy_fn) + -- LinkedList.new does not permit instance:new(), so use class + local result = self._class:new() + self:_copy_with_to(copy_fn, result) + return result +end + +local function identity(x) + return x +end + +function LinkedList:copy() + return self:_copy_with(identity) +end + +LinkedList.deepcopy = table.flexcopy + +function LinkedList:nodeiter(node) + return node.next ~= self and node.next or nil +end + +function LinkedList:nodes() + return self.nodeiter, self, self +end + +function LinkedList:items() + -- we "need" a closure here in order to track the node, since it is not + -- returned by the iterator. + local iter = self.nodeiter + local node = self + return function() + -- not much we can do about nils here so ignore them + repeat + node = iter(self, node) + if node and node.item ~= nil then + return node.item + end + until node == nil + end +end + +function LinkedList:ipairs() + local i = 0 + local node = self + local iter = self.nodeiter + -- we kind-of "need" a closure here or else we'll end up having to + -- chase down the indexed node every iteration at potentially huge cost. + return function() + repeat + i = i + 1 + node = iter(self, node) + if node ~= nil and node.item ~= nil then + return i, node.item + end + until node == nil + end +end +LinkedList._mt.__ipairs = LinkedList.ipairs + +function LinkedList:tostring() + local result = self._class_name .. ':from_stack {' + local skipped = false + local firstrep = true + local count = 0 + for node in self:nodes() do + count = count + 1 + local noderep = false + if node.tostring then + noderep = node:tostring() + elseif Is.False(node.item) then + noderep = 'false' + elseif node.item then + if Is.String(node.item) then + noderep = '"' .. node.item .. '"' + else + noderep = tostring(node.item) + end + end -- else it is nil and we skip it + if noderep then + if not firstrep then + result = result .. ', ' + else + firstrep = false + end + if skipped then + -- if any index has been skipped then we provide + -- explicit lua index syntax i.e., {[2] = 'foo'} + result = result .. '[' .. tostring(count) .. '] = ' + end + result = result .. noderep + else + skipped = true + end + end + return result .. '}' +end +LinkedList._mt.__tostring = LinkedList.tostring + +function LinkedList:validate_integrity() + if self.next == self then + Is.Assert(self.prev == self, 'Empty LinkedList prev and next do not match', 2) + else + Is.Assert.Nil(self.item, 'LinkedList contains item in head node', 2) + Is.Assert.Not.Nil(self._is_LinkedList, 'LinkedList head node does not have _is_LinkedList', 2) + local iteration=0 + local i=self + local previ=self + local visited={} + while i.next ~= self do + iteration = iteration + 1 + local errhint = ' (iteration #' .. tostring(iteration) .. ')' + visited[i] = true + i = i.next + Is.Assert(i.prev == previ, 'next.prev mismatch' .. errhint, 2) + previ = i + Is.Assert.Not(visited[i], 'LinkedList contains node-loop' .. errhint, 2) + Is.Assert(i._is_LinkedListNode, "LinkedList contains LinkedList as node" .. errhint, 2) + end + Is.Assert(self.prev == previ, 'LinkedList prev is not terminal node in .next chain', 2) + end + return true +end + +return LinkedList diff --git a/HelicopterRevival/stdlib/utils/classes/string_array.lua b/HelicopterRevival/stdlib/utils/classes/string_array.lua new file mode 100644 index 00000000..cfb0b0fa --- /dev/null +++ b/HelicopterRevival/stdlib/utils/classes/string_array.lua @@ -0,0 +1,108 @@ +--- String Array Metatable +-- For working with string arrays without duplicate values +-- @classmod string_array + +local M = { + _module_name = 'string-array-class' +} + +local Is = require('stdlib/utils/is') + +--- Does this array contain name. +-- @tparam string name The string to find. +-- @treturn boolean string is in array +function M:has(name) + Is.Assert.String(name, 'name must be a string') + for _, str in ipairs(self) do + if str == name then + return true + end + end +end + +--- Add a string to the array if it doesn't exist in the array. +-- @tparam string name +-- @treturn self +function M:add(name) + Is.Assert.String(name, 'name must be a string') + for _, str in ipairs(self) do + if str == name then + return self + end + end + table.insert(self, name) + return self +end + +--- Remove the string from the array if it exists. +-- @tparam string name +-- @treturn self +function M:remove(name) + Is.Assert.String(name, 'name must be a string') + for i, str in ipairs(self) do + if str == name then + table.remove(self, i) + return self + end + end + return self +end + +--- Toggles the passed name in the array by adding it if not present or removing it if it is. +-- @tparam string name +-- @treturn self +function M:toggle(name) + Is.Assert.String(name, 'name must be a string') + for i, str in ipairs(self) do + if str == name then + table.remove(self, i) + return self + end + end + table.insert(self, name) + return self +end + +--- Clear the array returning an empty array object +-- @treturn self +function M:clear() + for i = #self, 1, -1 do + table.remove(self, i) + end + return self +end + +--- Convert the array to a string +-- @treturn string +function M:tostring() + return table.concat(self, ', ') +end + +--- Concat string-arrays and strings together +-- @tparam string|string-array rhs +-- @treturn string-array +function M:concat(rhs) + if type(self) == 'table' then + if type(rhs) == 'table' then + for _, str in ipairs(rhs) do + self:add(str) + end + elseif type(rhs) == 'string' then + self:add(rhs) + end + return self + elseif type(self) == 'string' then + return rhs:add(self) + end + return self +end + +return { + __index = M, -- Index to module + __tostring = M.tostring, -- tostring + __concat = M.concat, -- Concat + __add = M.add, -- Adds a string to the string-array object + __sub = M.remove, -- Removes a string from the string-array object + __unm = M.clear, -- Clears the array. + __call = M.has -- Has the flag +} diff --git a/HelicopterRevival/stdlib/utils/globals.lua b/HelicopterRevival/stdlib/utils/globals.lua new file mode 100644 index 00000000..5890e766 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/globals.lua @@ -0,0 +1,47 @@ +--- Additional lua globals +-- @module globals + +-- luacheck: globals prequire rawtostring inline_if serpent inspect semver + +serpent = serpent or require('stdlib/utils/vendor/serpent') +inspect = inspect or require('stdlib/utils/vendor/inspect') +semver = semver or require('stdlib/utils/vendor/semver') + +--- Require a file that may not exist +-- @tparam string module path to the module +-- @treturn mixed +function prequire(module) + local ok, err = pcall(require, module) + if ok then + return err + end +end + +--- Temporarily removes __tostring handlers and calls tostring +-- @tparam mixed t object to call rawtostring on +-- @treturn string +function rawtostring(t) + local m = getmetatable(t) + if m then + local f = m.__tostring + m.__tostring = nil + local s = tostring(t) + m.__tostring = f + return s + else + return tostring(t) + end +end + +--- Returns t if the expression is true. f if false +-- @tparam mixed exp The expression to evaluate +-- @tparam mixed t the true return +-- @tparam mixed f the false return +-- @treturn boolean +function inline_if(exp, t, f) + if exp then + return t + else + return f + end +end diff --git a/HelicopterRevival/stdlib/utils/is.lua b/HelicopterRevival/stdlib/utils/is.lua new file mode 100644 index 00000000..f60b04aa --- /dev/null +++ b/HelicopterRevival/stdlib/utils/is.lua @@ -0,0 +1,400 @@ +--- Is expression library +-- @module Is +-- @usage +-- local Is = require('stdlib/utils/is') +-- Is.True(true) +-- Is.Not.True(false) +-- Is.Assert.True(true) +-- Is.Assert.Not.True(false) + +--- Is Table +-- @section Table + +--- Is the test true. +-- @table Is +-- @field Not Is the test not true. +-- @field Assert Assert that the test is true. +-- @field Assert.Not Assert that the test is not true. + +--- Is Table Callers +-- @section Callers + +--- Is the test truthy +-- @function Is +-- @tparam mixed var +-- @treturn boolean +local Is = {} + +--- Is the test not truthy +-- @function Not +-- @tparam mixed var +-- @treturn boolean +Is.Not = {} + +--- Assert that the test is Truthy +-- @function Assert +-- @tparam mixed var +-- @treturn boolean +Is.Assert = {} + +--- Assert that the test is not Truthy +-- @function Assert.Not +-- @tparam mixed var +-- @treturn boolean +Is.Assert.Not = {} + +--- Functions +-- @section Functions + +local M = {} + +local type = type +local floor = math.floor +local INF_POS = math.huge +local INF_NEG = -math.huge + +--- Returns the var if the passed variable is a table. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Table(var) + return type(var) == 'table' and var +end +M.table = M.Table + +--- Returns the var if the passed variable is a string. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.String(var) + return type(var) == 'string' and var +end +M.string = M.String + +--- Returns the var if the passed variable is a number. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Number(var) + return type(var) == 'number' and var +end +M.number = M.Number + +function M.Thread(var) + return type(var) == 'thread' and var +end +M.thread = M.Thread + +function M.Userdata(var) + return type(var) == 'userdata' and var +end +M.userdata = M.Userdata + +--- Returns true if the passed variable is nil. +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.Nil(var) + return type(var) == 'nil' +end +M.is_nil = M.Nil + +--- Returns true if the passed variable is a boolean. +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.Boolean(var) + return type(var) == 'boolean' +end +M.boolean = M.boolean + +--- Returns true if the passed variable is true +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.True(var) + return var == true +end +M.is_true = M.True + +--- Returns the var if the passed variable is not nil or false. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Truthy(var) + return var or false +end +M.truthy = M.Truthy + +--- Returns true if the passed variable is false. +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.False(var) + return var == false +end +M.is_false = M.False + +--- Returns true if the passed variable is false or nil. +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.Falsy(var) + return not var +end +M.falsy = M.Falsy + +--- Returns true if the passed variable is nil, an empty table, or an empty string. +-- @tparam mixed var The variable to check +-- @treturn boolean +function M.Empty(var) + if M.Table(var) then + return _G.table_size and _G.table_size(var) == 0 or next(var) == nil + elseif M.String(var) then + return #string == 0 + end + return M.Nil(var) +end +M.empty = M.Empty + +function M.None(var) + return M.Empty(var) or M.False(var) or var == 0 or var ~= var +end +M.none = M.None + + +--- Returns the passed var if it is a positive number. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Positive(var) + return M.Number(var) and var >= 0 and var +end +M.positive = M.Positive + +--- Returns the passed var if it is a positive number. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Negative(var) + return M.Number(var) and var < 0 and var +end +M.negative = M.Negative + +function M.NaN(arg) + return arg ~= arg +end +M.nan = M.NaN + +function M.Finite(var) + return M.Number(var) and (var < INF_POS and var > INF_NEG) and var +end +M.finite = M.Finite + +function M.Int(var) + return M.Finite(var) and rawequal(floor(var), var) and var +end +M.int = M.Int + +function M.Int8(var) + return M.Int(var) and var >= -128 and var <= 127 and var +end +M.int8 = M.Int8 + +function M.Int16(var) + return M.Int(var) and var >= -32768 and var <= 32767 and var +end +M.int16 = M.Int16 + +function M.Int32(var) + return M.Int(var) and var >= -2147483648 and var <= 2147483647 and var +end +M.int32 = M.Int32 + +function M.Unsigned(var) + return Is.Number(var) and (var < INF_POS and var >= 0) and var +end +M.unsigned = M.Unsigned + +function M.UInt(var) + return M.Unsigned(var) and rawequal(floor(var), var) and var +end +M.uint = M.UInt + +function M.UInt8(var) + return M.UInt(var) and var <= 255 and var +end +M.uint8 = M.UInt8 + +function M.UInt16(var) + return M.UInt(var) and var <= 65535 and var +end +M.uint16 = M.UInt16 + +function M.UInt32(var) + return M.UInt(var) and var <= 4294967295 and var +end +M.uint32 = M.UInt32 + +--- Returns the passed var if it is a full position. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Position(var) + return M.Table(var) and (var.x and var.y) and var +end +M.position = M.Position + +--- Returns the passed var if it is a full area. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Area(var) + return M.Table(var) and (M.Position(var.left_top) and M.Position(var.right_bottom)) and var +end +M.area = M.Area + +--- Returns the passed var if it is a simple position/vector. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Vector(var) + return M.Table(var) and (M.Number(var[1]) and M.Number(var[2])) and var +end +M.vector = M.Vector + +--- Returns the passed var if it is a simple area/boundingbox. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.BoundingBox(var) + return M.Table(var) and (M.Vector(var[1]) and M.Vector(var[2])) +end +M.boundingbox = M.BoundingBox +M.bounding_box = M.BoundingBox +M.Bounding_Box = M.BoundingBox + +--- Returns the hex value of the passed var if it is hexadecimal. +-- @tparam mixed var The variable to check +-- @treturn mixed +function M.Hex(var) + return M.String(var) and var:match('%x%x%x%x%x%x$') +end +M.hex = M.Hex + +--- Returns true if the passed variable is a single alphbetical word. +-- Does not allow any special chars +-- @tparam mixed var The variable to check +-- @treturn boolean true if the passed variable is a single alphbetical word +function M.StrictWord(var) + return M.String(var) and var:find('^[%a]+$') == 1 +end +M.strict_word = M.StrictWord + +--- Returns true if the passed variable is a single alphbetical word. +-- Allows _ and - as part of the word +-- @tparam mixed var The variable to check +-- @treturn boolean true if the passed variable is a single alphbetical word +function M.AlphabetWord(var) + return M.String(var) and var:find('^[%a%_%-]+$') == 1 +end +M.Word = M.AlphabetWord + +--- Returns true if the passed variable is a single alphbetical word. +-- Must start with a letter, allows _ and - as part of the word +-- @tparam mixed var The variable to check +-- @treturn boolean true if the passed variable is a single alphbetical word +function M.AlphanumWord(var) + return M.String(var) and var:find('^%a+[%w%_%-]*$') == 1 +end +M.Alpha = M.AlphanumWord +M.alpha = M.AlphanumWord +M.alphanumword = M.AlphanumWord + +--- Is this factorio object valid +-- @tparam LuaObject var The variable to check +-- @treturn boolean true if this is a valid LuaObject +function M.Valid(var) + return M.Table(var) and var.valid +end +M.valid = M.Valid + +--- Is this a factorio object +-- @tparam LuaObject var The variable to check +-- @treturn boolean true if this is an LuaObject +function M.Object(var) + return M.Table(var) and var.__self +end +M.object = M.Object + +--- Returns true if the passed variable is a callable function. +-- @tparam mixed var The variable to check +-- @treturn boolean true if the passed variable is a callable function +function M.Callable(var) + return type(var) == 'function' or type((getmetatable(var) or {}).__call) == 'function' +end +M.callable = M.Callable +M.Function = M.Callable +M.is_function = M.Callable + +setmetatable( + Is, + { + __index = function(_, k) + return M[k] and function(_assert) + return M[k](_assert) + end or nil + end, + __call = function(_, ...) + return (...) + end + } +) + +setmetatable( + Is.Not, + { + __index = function(_, k) + return M[k] and function(_assert) + return not M[k](_assert) + end or nil + end, + __call = function(_, ...) + return not (...) + end + } +) + +-- convenience function for un-lambda-ing deferred error messages +local function safeinvoke(f) + local ok, msg = xpcall(f, debug.traceback) + if not ok then + -- ensure msg really is a string so there is theoretically no chance + -- of a triple fault (i.e.: from a monkey-patched debug.traceback + -- returning something that now fails to concatenate to a string) + if type(msg) == 'string' then + msg = '<<< DOUBLE FAULT: ' .. msg .. ' >>>' + end + end + -- for sanity-preservation, always return something truthy + return msg or 'Unknown Error' +end + +setmetatable( + Is.Assert, + { + __index = function(_, k) + return M[k] and function(_assert, _message, _level) + _level = tonumber(_level) or 3 + return M[k](_assert) or error(type(_message) == 'function' and safeinvoke(_message) or _message, _level) + end or nil + end, + __call = function(_, ...) + local param = {...} + return param[1] or error(type(param[2]) == 'function' and safeinvoke(param[2]) or param[2], tonumber(param[3]) or 3) + end + } +) + +setmetatable( + Is.Assert.Not, + { + __index = function(_, k) + return M[k] and function(_assert, _message, _level) + _level = tonumber(_level) or 3 + return not M[k](_assert) or error(type(_message) == 'function' and safeinvoke(_message) or _message, _level) + end or nil + end, + __call = function(_, ...) + local param = {...} + return not param[1] or error(type(param[2]) == 'function' and safeinvoke(param[2]) or param[2], tonumber(param[3]) or 3) + end + } +) + +return Is diff --git a/HelicopterRevival/stdlib/utils/iter.lua b/HelicopterRevival/stdlib/utils/iter.lua new file mode 100644 index 00000000..0f737681 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/iter.lua @@ -0,0 +1,89 @@ +--- Iterator library. +-- @module Iter + +local Iter = {} + +Iter.pairs = pairs +Iter.ipairs = ipairs + +function Iter.spairs(t, order) + -- collect the keys + local keys = {} + for k in pairs(t) do + keys[#keys + 1] = k + end + + -- if order function given, sort by it by passing the table and keys a, b, + -- otherwise just sort the keys + if order then + table.sort( + keys, + function(a, b) + return order(t, a, b) + end + ) + else + table.sort(keys) + end + + -- return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + +function Iter.top(t, stop) + local start = #t + stop = stop or 1 + + return function() + if start >= stop and t[start] ~= nil then + local cur = start + start = start - 1 + return cur, t[cur] + end + return nil + end +end + +function Iter.wrap(t, start, reverse) + --[[ + -- Returns an iterator that iterates over integer keys in table `t` from the specified start position, wrapping + -- around and ending when it reaches `start` again. + -- + -- `dir` specifies the direction to iterate (negative values for reverse, otherwise forward) + -- `start` specifies the start location. If `nil`, the first returned item will be at the at the start of the table + -- (or the end of the table, if `dir` is negative) + -- + -- Behavior if the table changes size during iteration is undefined. + ]] + local dir = (reverse and -1) or 1 + local len = #t + local i = start + start = start or (reverse and len) or 1 + + return function() + if i == nil then + i = start + return i, t[i] + end + + i = i + dir + if i < 1 then + i = i + len + elseif i > len then + i = i - len + end + + if i == start then + return nil + end + return i, t[i] + end +end + +return Iter diff --git a/HelicopterRevival/stdlib/utils/math.lua b/HelicopterRevival/stdlib/utils/math.lua new file mode 100644 index 00000000..b5e3e034 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/math.lua @@ -0,0 +1,144 @@ +--- Extends Lua 5.2 math. +-- @module math +-- @see math + +local M = {} + +local floor = math.floor +local ceil = math.ceil +local min = math.min +local max = math.max +local log10 = math.log10 + +--- Round a number. +-- @tparam number x +-- @treturn number the rounded number +function M.round(x) + return x >= 0 and floor(x + 0.5) or ceil(x - 0.5) +end + +-- Various average (means) algorithms implementation +-- See: http://en.wikipedia.org/wiki/Average + +--- Calculates the sum of a sequence of values. +-- @tparam array x and array of numbers +-- @treturn the sum +function M.sum(x) + local s = 0 + for _, v in ipairs(x) do + s = s + v + end + return s +end + +--- Calculates the arithmetic mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the arithmetic mean +function M.arithmetic_mean(x) + return (M.sum(x) / #x) +end + +M.avg = M.arithmetic_mean + +--- Calculates the geometric mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the geometric mean +function M.geometric_mean(x) + local prod = 1 + for _, v in ipairs(x) do + prod = prod * v + end + return (prod ^ (1 / #x)) +end + +--- Calculates the harmonic mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the harmonic mean +function M.harmonic_mean(x) + local s = 0 + for _, v in ipairs(x) do + s = s + (1 / v) + end + return (#x / s) +end + +--- Calculates the quadratic mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the quadratic mean +function M.quadratic_mean(x) + local squares = 0 + for _, v in ipairs(x) do + squares = squares + (v * v) + end + return math.sqrt((1 / #x) * squares) +end + +--- Calculates the generalized mean (to a specified power) of a set of values. +-- @tparam array x an array of numbers +-- @tparam number p power +-- @treturn number the generalized mean +function M.generalized_mean(x, p) + local sump = 0 + for _, v in ipairs(x) do + sump = sump + (v ^ p) + end + return ((1 / #x) * sump) ^ (1 / p) +end + +--- Calculates the weighted mean of a set of values. +-- @tparam array x an array of numbers +-- @tparam array w an array of number weights for each value +-- @treturn number the weighted mean +function M.weighted_mean(x, w) + local sump = 0 + for i, v in ipairs(x) do + sump = sump + (v * w[i]) + end + return sump / M.sum(w) +end + +--- Calculates the midrange mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the midrange mean +function M.midrange_mean(x) + return 0.5 * (min(unpack(x)) + max(unpack(x))) +end + +--- Calculates the energetic mean of a set of values. +-- @tparam array x an array of numbers +-- @treturn number the energetic mean +function M.energetic_mean(x) + local s = 0 + for _, v in ipairs(x) do + s = s + (10 ^ (v / 10)) + end + return 10 * log10((1 / #x) * s) +end + +-- Returns the number floored to p decimal spaces. +-- @tparam number x +-- @tparam[opt=0] int p the number of decimal places to floor to +-- @treturn number floored to p decimal spaces. +function M.floor_to(x, p) + if (p or 0) == 0 then + return floor(x) + end + local e = 10 ^ p + return floor(x * e) / e +end + +-- Returns the number rounded to p decimal places. +-- @tparam number x +-- @tparam[opt=0] int p the number of decimal places to round to +-- @treturn number rounded to p decimal spaces. +function M.round_to(x, p) + local e = 10 ^ (p or 0) + return floor(x * e + 0.5) / e +end + +-- Extend into math +for k, v in pairs(M) do + math[k] = v -- luacheck: globals math (Allow mutating global string) +end + +return M diff --git a/HelicopterRevival/stdlib/utils/scripts/console.lua b/HelicopterRevival/stdlib/utils/scripts/console.lua new file mode 100644 index 00000000..0ffed0f6 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/scripts/console.lua @@ -0,0 +1,82 @@ +--- Debug console. +-- Creates a textfield allowing you to run commands directly in your mod's enviorment. +--

This module requires the use of stdlib's @{Event} module for GUI interactions. +--

This module was originally the ***Console*** code from a modder named ***adil***, which has been modified for use with stdlib. +-- @script console +-- @usage +-- local console = require('stdlib/utils/console') +-- remote.add_interface('my_interface', {show = console}) +-- /c remote.call('my_interface', 'show', game.player) +-- --In the window that appears you can run lua code directly on your mod, including globals. + +local Gui = require('stdlib/event/gui') + +-- Munge hyphens as they otherwise need escaping in Lua's regexnih pattern language +local prefix = script.mod_name:gsub('%-', '_') + +local names = { + frame = prefix .. '_console', + scroll = prefix .. '_console_scroll', + textbox = prefix .. '_console_line', + enter = prefix .. '_console_enter', + clear = prefix .. '_console_clear', + close = prefix .. '_console_close' +} + +local function create_gui_player(player) + if player.gui.left[names.frame] then + player.gui.left[names.frame].destroy() + end + + local c = player.gui.left.add {type = 'frame', name = names.frame, direction = 'horizontal'} + + local scroll = c.add {type = 'scroll-pane', name = names.scroll} + scroll.style.minimal_width = 600 + scroll.style.maximal_width = 600 + scroll.style.maximal_height = 150 + scroll.style.minimal_height = 150 + + local t = scroll.add {type = 'text-box', name = names.textbox} + t.style.minimal_width = 600 + t.style.maximal_width = 600 + t.style.minimal_height = 150 + + c.add {type = 'button', name = names.enter, caption = '<', tooltip = 'Run Script'} + c.add {type = 'button', name = names.clear, caption = 'C', tooltip = 'Clear Input'} + c.add {type = 'button', name = names.close, caption = 'X', tooltip = 'Close'} +end + +local function create_gui(player) + --if not sent with a player, then enable for all players? + if not (player and player.valid) then + for _, cur_player in pairs(game.players) do + create_gui_player(cur_player) + end + else + create_gui_player(player) + end +end + +local function enter(event) + local p = game.players[event.player_index] + local s = event.element.parent[names.scroll][names.textbox].text + + local ok, err = pcall(function() return loadstring(s)() end) + if not ok then + p.print(err) + end + game.write_file(prefix .. '/console.log', s .. '\n', true, p.index) +end +Gui.on_click('^' .. names.enter .. '$', enter) + +local function close(event) + event.element.parent.destroy() +end +Gui.on_click('^' .. names.close .. '$', close) + +local function clear(event) + event.element.parent[names.scroll][names.textbox].text = '' +end +Gui.on_click('^' .. names.clear .. '$', clear) + +return create_gui diff --git a/HelicopterRevival/stdlib/utils/scripts/quickstart.lua b/HelicopterRevival/stdlib/utils/scripts/quickstart.lua new file mode 100644 index 00000000..50687791 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/scripts/quickstart.lua @@ -0,0 +1,312 @@ +--- Quickstart script. +-- Creates a quickstart world for testing mods. +--

config settings should be a created in a table retured from `config-quickstart.lua` +-- @script quickstart +-- @usage +-- -- For use with STDLIB Events +-- if DEBUG then +-- require('stdlib/utils/scripts/quickstart').register_events() +-- end +-- @usage +-- --If not using stdlibs event system +-- local quickstart = require('stdlib/utils/scripts/quickstart') +-- script.on_event(defines.events.on_player_created, function() +-- quickstart.on_player_created() -- can be wrapped in an if DEBUG type check +-- end) + +local Event = require('stdlib/event/event') +local Area = require('stdlib/area/area') + +if not remote.interfaces['quickstart-script'] then + local qs_interface = {} + qs_interface.registered_to = function() + if game then + game.print(script.mod_name) + end + return script.mod_name + end + qs_interface.creative_mode_quickstart_registerd_to = qs_interface.registered_to + remote.add_interface('quickstart-script', qs_interface) +else + -- quickstart-script has already been registered, lets not clobber things + return +end + +local QS = require('stdlib/config/config').new(prequire('config-quickstart') or {}) +local quickstart = {} + +function quickstart.on_player_created(event) + if #game.players == 1 and event.player_index == 1 then + local player = game.players[event.player_index] + local surface = player.surface + local force = player.force + + local area = Area(QS.get('area_box', {{-100, -100}, {100, 100}})):shrink_to_surface_size(surface) + + player.force.chart(surface, area) + + player.surface.always_day = QS.get('always_day', false) + + if QS.get('cheat_mode', false) then + player.cheat_mode = true + player.force.research_all_technologies() + if player.character then + player.character_running_speed_modifier = 2 + player.character_reach_distance_bonus = 100 + player.character_build_distance_bonus = 100 + end + end + + if QS.get('clear_items', false) then + player.clear_items_inside() + end + + local simple_stacks = QS.get('stacks', {}) + local qb_stacks = QS.get('quickbar', {}) + local inv = player.get_main_inventory() + local qb = player.get_quickbar() + + if inv then + for _, item in pairs(simple_stacks) do + if game.item_prototypes[item] then + inv.insert(item) + end + end + for _, item in pairs(qb_stacks) do + if game.item_prototypes[item] then + qb.insert(item) + end + end + end + + local tool_inv = player.get_inventory(defines.inventory.player_tools) + if tool_inv then + local tool = QS.get('tool', 'steel-axe') + if not game.item_prototypes[tool] then + tool = 'steel-axe' + if not game.item_prototypes[tool] then + tool = nil + end + end + if tool then + tool_inv.insert(tool) + end + end + + local power_armor = QS.get('power_armor', 'fake') + if player.character and game.item_prototypes[power_armor] then + --Put on power armor, install equipment + player.get_inventory(defines.inventory.player_armor).insert(power_armor) + local grid = player.character.grid + if grid then + for _, eq in pairs(QS.get('equipment', {'fusion-reactor-equipment'})) do + if game.equipment_prototypes[eq] then + grid.put {name = eq} + end + end + end + end + + if remote.interfaces['RSO'] then + if QS.get('disable_rso_starting', false) and remote.interfaces['RSO']['disableStartingArea'] then + remote.call('RSO', 'disableStartingArea') + end + if QS.get('disable_rso_chunk', false) and remote.interfaces['RSO']['disableChunkHandler'] then + remote.call('RSO', 'disableChunkHandler') + end + end + + if QS.get('destroy_everything', false) then + for _, entity in pairs(surface.find_entities(area)) do + -- destroying cliffs can invalidate other cliffs so .valid is needed here + if entity.valid and entity.name ~= 'player' then + entity.destroy() + end + end + end + + if QS.get('floor_tile', false) then + local tiles = {} + local floor_tile = QS.get('floor_tile') + local floor_tile_alt = QS.get('floor_tile_alt', floor_tile) + for x, y in Area.spiral_iterate(area) do + if y % 2 == 0 then + if x % 2 == 0 then + tiles[#tiles + 1] = {name = floor_tile, position = {x = x, y = y}} + else + tiles[#tiles + 1] = {name = floor_tile_alt, position = {x = x, y = y}} + end + else + if x % 2 ~= 0 then + tiles[#tiles + 1] = {name = floor_tile, position = {x = x, y = y}} + else + tiles[#tiles + 1] = {name = floor_tile_alt, position = {x = x, y = y}} + end + end + end + surface.set_tiles(tiles, true) + surface.destroy_decoratives(area) + end + + if QS.get('ore_patches', true) then + --Top left + for x, y in Area.iterate({{-37.5, -27.5}, {-33.5, -3.5}}) do + surface.create_entity {name = 'coal', position = {x, y}, amount = 2500} + end + --Top Right + for x, y in Area.iterate({{33.5, -27.5}, {37.5, -3.5}}) do + surface.create_entity {name = 'iron-ore', position = {x, y}, amount = 2500} + end + --Bottom Right + for x, y in Area.iterate({{33.5, 3.5}, {37.5, 27.5}}) do + surface.create_entity {name = 'copper-ore', position = {x, y}, amount = 2500} + end + --Bottom Left + for x, y in Area.iterate({{-37.5, 3.5}, {-33.5, 27.5}}) do + surface.create_entity {name = 'stone', position = {x, y}, amount = 2500} + end + surface.create_entity {name = 'crude-oil', position = {-35.5, 1.5}, amount = 32000} + surface.create_entity {name = 'crude-oil', position = {-35.5, -1.5}, amount = 32000} + surface.create_entity {name = 'crude-oil', position = {35.5, 1.5}, amount = 32000} + surface.create_entity {name = 'crude-oil', position = {35.5, -1.5}, amount = 32000} + + local water_tiles = {} + for x = 27.5, -27.5, -1 do + for y = 45.5, 50.5, 1 do + if x < -4 or x > 4 then + water_tiles[#water_tiles + 1] = { + name = 'water', + position = {x = x, y = y} + } + end + end + end + surface.set_tiles(water_tiles, false) + surface.create_entity {name = 'offshore-pump', position = {4.5, 44.5}, force = force, direction = defines.direction.south} + surface.create_entity {name = 'offshore-pump', position = {-4.5, 44.5}, force = force, direction = defines.direction.south} + surface.create_entity {name = 'offshore-pump', position = {27.5, 44.5}, force = force, direction = defines.direction.south} + surface.create_entity {name = 'offshore-pump', position = {-27.5, 44.5}, force = force, direction = defines.direction.south} + end + + if QS.get('chunk_bounds', false) then + if game.entity_prototypes['debug-chunk-marker'] then + local a = surface.create_entity {name = 'debug-chunk-marker', position = {0, 0}} + a.graphics_variation = 1 + for i = 1, 31, 2 do + a = surface.create_entity {name = 'debug-chunk-marker', position = {i, 0}} + a.graphics_variation = 2 + a = surface.create_entity {name = 'debug-chunk-marker', position = {-i, 0}} + a.graphics_variation = 2 + a = surface.create_entity {name = 'debug-chunk-marker', position = {0, i}} + a.graphics_variation = 3 + a = surface.create_entity {name = 'debug-chunk-marker', position = {0, -i}} + a.graphics_variation = 3 + end + end + local tiles = {} + for i = .5, 32.5, 1 do + tiles[#tiles + 1] = {name = 'hazard-concrete-left', position = {i, 32.5}} + tiles[#tiles + 1] = {name = 'hazard-concrete-right', position = {-i, 32.5}} + tiles[#tiles + 1] = {name = 'hazard-concrete-left', position = {i, -32.5}} + tiles[#tiles + 1] = {name = 'hazard-concrete-right', position = {-i, -32.5}} + + tiles[#tiles + 1] = {name = 'hazard-concrete-left', position = {32.5, i}} + tiles[#tiles + 1] = {name = 'hazard-concrete-left', position = {32.5, -i}} + tiles[#tiles + 1] = {name = 'hazard-concrete-right', position = {-32.5, i}} + tiles[#tiles + 1] = {name = 'hazard-concrete-right', position = {-32.5, -i}} + end + surface.set_tiles(tiles) + end + + if QS.get('starter_tracks', false) then + -- Create proxy blueprint from string, read in the entities and remove it. + local bp = surface.create_entity {name = 'item-on-ground', position = {0, 0}, force = force, stack = 'blueprint'} + bp.stack.import_stack(quickstart.trackstring) + local tracks = bp.stack.get_blueprint_entities() + bp.destroy() + + for _, track in pairs(tracks) do + local pos = {track.position.x + 1, track.position.y + 1} + local ent = surface.create_entity {name = track.name, position = pos, direction = track.direction, force = force} + if ent.name == 'train-stop' then + if ent.position.x > 0 and ent.position.y > 0 then + ent.backer_name = '#SOUTH' + elseif ent.position.x < 0 and ent.position.y > 0 then + ent.backer_name = '#WEST' + elseif ent.position.x > 0 and ent.position.y < 0 then + ent.backer_name = '#EAST' + else + ent.backer_name = '#NORTH' + end + end + end + + if QS.get('make_train', false) then + local loco = surface.create_entity {name = 'locomotive', position = {20, 39}, orientation = 0.25, direction = 2, force = force} + loco.orientation = .25 + --Setting the burner this way rather than using insert allows us to not inflate the production statistics + loco.burner.currently_burning = 'rocket-fuel' + loco.burner.remaining_burning_fuel = 222222222 + local cwag = surface.create_entity {name = 'cargo-wagon', position = {13, 39}, orientation = 0.25, direction = 2, force = force} + cwag.orientation = .25 + local fwag = surface.create_entity {name = 'fluid-wagon', position = {7, 39}, orientation = 0.25, direction = 2, force = force} + fwag.orientation = .25 + local awag = surface.create_entity {name = 'artillery-wagon', position = {0, 39}, orientation = 0.25, direction = 2, force = force} + awag.orientation = .25 + + local train = loco and loco.train + if train then + local records = {} + for _, name in pairs({'#SOUTH', '#EAST', '#NORTH', '#WEST'}) do + records[#records + 1] = {station = name, wait_conditions = {{type = 'time', ticks = 0, compare_type = 'and'}}} + end + records[1].wait_conditions = {{type = 'full', compare_type = 'and'}} + train.schedule = {current = 1, records = records} + train.manual_mode = false + end + end + end + + if QS.get('setup_power', false) then + if game.entity_prototypes['debug-energy-interface'] then + local es = surface.create_entity {name = 'debug-energy-interface', position = {0, 0}, force = force} + es.destructible = false + script.raise_event(defines.events.on_built_entity, {created_entity = es, player_index = player.index}) + end + if game.entity_prototypes['debug-substation'] then + local sb = surface.create_entity {name = 'debug-substation', position = {0, 0}, force = force} + sb.destructible = false + script.raise_event(defines.events.on_built_entity, {created_entity = sb, player_index = player.index}) + end + end + + if QS.get('setup_creative_mode', false) and game.active_mods['creative-mode'] then + local radar = surface.create_entity {name = 'creative-mode_super-radar', position = {3.5, -34.5}, force = force} + script.raise_event(defines.events.on_built_entity, {created_entity = radar, player_index = player.index}) + local rb = surface.create_entity {name = 'creative-mode_super-roboport', position = {-4, -35}, force = force} + script.raise_event(defines.events.on_built_entity, {created_entity = rb, player_index = player.index}) + end + end +end +Event.register(defines.events.on_player_created, quickstart.on_player_created) + +quickstart.trackstring = + [[ +0eNqdmt1u2kAUhF+l2muIvLveP677BL2tqgoSK7VEDAITNYry7rUDRYWMy0zuAOHPZ33m7O7Z8atZrQ/Ndtd2vVm8mvZ+0+3N4vur2beP3XI9/ta/bBuzMG3fP +JmZ6ZZP47fdsl2bt5lpu4fmt1nYtx8z03R927fN8fr3Ly8/u8PTqtkNf7i4cn6iz8x2sx+u2XTjjQbO3KW7MDMvw6fa3oXhBg/trrk//sO9zT5w3ZnbD+Buvu8 +3W4SNJ6i7REaA9Gfk/WH33DzM38f6ken9kenLbWZ9Zu7HOB9/9VNUl0+RVrcHH3hq5KmRp9Y8NfFUx1MzT614aqGpVsiWrXiskC5reayQL+t4rJAw63mskDHLF +5iSMb7AlITxBabkSygwgUoXmJIsur6ESB1dXcJDdXRtCfl3dGUJUnV0XSll5eiyUuYAR5eVMmE5uqyU2dXRZaUsBY4uK2XZcnxdCdnydGEp2wFPV5aydfGO27u +Nd0dbN4+Y/IrlT6H6eIlNCEuXlq8x1SJqYDev5QT1BDSSTzWdmYjCL1D1SfQuQxBdPD7/l1O4nsSXvy3J2JxcPq4a7fUrfaARBVhbeaCYwzVJN4Lx+qhqCKrlU +WFO0ANyEBTlgDDnEwKvIEgXOOYUOSALKyVUakATHKsHBMUYnBwQ5uiitlCMQRb1BEcXtYViDLKoJzi6qC0UY5BFPcHRRQ21GGVNY4wuaajEKCsaY3RBQx1GWc8 +Y84k5GnL0KRpiZDFDCUZVypgiCxmOKak6xhRZxjDfSVUxpsgihrWQVA1jiixhOE8kVcGYIgsYT6JJVfAERpYwXmSyquEJjCxivAhnVcUTGFnGeJOSVR1PYGQh4 +01cVpU8gZGljDe5WZXyBEafjaEGizwdY4zlfK36eJAzdEg329Li5BFCWRevjhBjatIRHH3AIycM3TciycLGHW5RhT2BSdoRjLdE7rJ0AnONDAhZ1GMtX9+m2qr +S3FOfbh+V2cpKx3rXTGzGOfH87Xr4HlK9avT6zARbq04vhw2q1ctho+r1ctikmr0cNqtuL4ctqttLYRUTWUiZYiILKVNMZCFlgoksZEzwkJWEBdHt5ahRdHs5a +tLcXg6aNbeXgxbN7aWgvIUs5J+3kAWp8hayUlaChyykSvCQlVwF0e3lqFF0ezlqEt1ejppFt5ejFtHtpaiChyxky3NN0ilQ7u0kx3UlYy9yDLRcW4JxfBXy/WX +JxT/vVs7Merlq1sNvX5vV4fHLt4G+H359bnb742U52VKnmOqhIfwDr9+U4w== +]] + +function quickstart.register_events() + Event.register(defines.events.on_player_created, quickstart.on_player_created) + return quickstart +end +return quickstart diff --git a/HelicopterRevival/stdlib/utils/string.lua b/HelicopterRevival/stdlib/utils/string.lua new file mode 100644 index 00000000..8cbabe1c --- /dev/null +++ b/HelicopterRevival/stdlib/utils/string.lua @@ -0,0 +1,234 @@ +--- Extends Lua 5.2 string. +-- @module string +-- @see string + +local M = {} + +local concat = table.concat +local insert = table.insert +local ceil = math.ceil +local abs = math.abs + +--- Returns a copy of the string with any leading or trailing whitespace from the string removed. +-- @tparam string s the string to remove leading or trailing whitespace from +-- @treturn string a copy of the string without leading or trailing whitespace +function M.trim(s) + return (s:gsub([[^%s*(.-)%s*$]], '%1')) +end + +--- Tests if a string starts with a given substring. +-- @tparam string s the string to check for the start substring +-- @tparam string start the substring to test for +-- @treturn boolean true if the start substring was found in the string +function M.starts_with(s, start) + return s:find(start, 1, true) == 1 +end + +--- Tests if a string ends with a given substring. +-- @tparam string s the string to check for the end substring +-- @tparam string ends the substring to test for +-- @treturn boolean true if the end substring was found in the string +function M.ends_with(s, ends) + return #s >= #ends and s:find(ends, #s - #ends + 1, true) and true or false +end + +--- Tests if a string contains a given substring. +-- @tparam string s the string to check for the substring +-- @tparam string contains the substring to test for +-- @treturn boolean true if the substring was found in the string +function M.contains(s, contains) + return s and s:find(contains, 1, true) ~= nil +end + +--- Tests whether a string is empty. +-- @tparam string s the string to test +-- @treturn boolean true if the string is empty +function M.is_empty(s) + return s == nil or s == '' +end + +--- does s only contain alphabetic characters? +-- @string s a string +function M.is_alpha(s) + return s:find('^%a+$') == 1 +end + +--- does s only contain digits? +-- @string s a string +function M.is_digit(s) + return s:find('^%d+$') == 1 +end + +--- does s only contain alphanumeric characters? +-- @string s a string +function M.is_alnum(s) + return s:find('^%w+$') == 1 +end + +--- does s only contain spaces? +-- @string s a string +function M.is_space(s) + return s:find('^%s+$') == 1 +end + +--- does s only contain lower case characters? +-- @string s a string +function M.is_lower(s) + return s:find('^[%l%s]+$') == 1 +end + +--- does s only contain upper case characters? +-- @string s a string +function M.is_upper(s) + return s:find('^[%u%s]+$') == 1 +end + +--- iniital word letters uppercase ('title case'). +-- Here 'words' mean chunks of non-space characters. +-- @string s the string +-- @return a string with each word's first letter uppercase +function M.title(s) + return (s:gsub( + [[(%S)(%S*)]], + function(f, r) + return f:upper() .. r:lower() + end + )) +end + +local ellipsis = '...' +local n_ellipsis = #ellipsis + +--- Return a shortened version of a string. +-- Fits string within w characters. Removed characters are marked with ellipsis. +-- @string s the string +-- @int w the maxinum size allowed +-- @bool tail true if we want to show the end of the string (head otherwise) +-- @usage ('1234567890'):shorten(8) == '12345...' +-- @usage ('1234567890'):shorten(8, true) == '...67890' +-- @usage ('1234567890'):shorten(20) == '1234567890' +function M.shorten(s, w, tail) + if #s > w then + if w < n_ellipsis then + return ellipsis:sub(1, w) + end + if tail then + local i = #s - w + 1 + n_ellipsis + return ellipsis .. s:sub(i) + else + return s:sub(1, w - n_ellipsis) .. ellipsis + end + end + return s +end + +--- concatenate the strings using this string as a delimiter. +-- @string s the string +-- @param seq a table of strings or numbers +-- @usage (' '):join {1,2,3} == '1 2 3' +function M.join(s, seq) + return concat(seq, s) +end + +local function _just(s, w, ch, left, right) + local n = #s + if w > n then + if not ch then + ch = ' ' + end + local f1, f2 + if left and right then + local rn =ceil((w - n) / 2) + local ln = w - n - rn + f1 = ch:rep(ln) + f2 = ch:rep(rn) + elseif right then + f1 = ch:rep(w - n) + f2 = '' + else + f2 = ch:rep(w - n) + f1 = '' + end + return f1 .. s .. f2 + else + return s + end +end + +--- left-justify s with width w. +-- @string s the string +-- @int w width of justification +-- @string[opt=' '] ch padding character +function M.ljust(s, w, ch) + return _just(s, w, ch, true, false) +end + +--- right-justify s with width w. +-- @string s the string +-- @int w width of justification +-- @string[opt=' '] ch padding character +function M.rjust(s, w, ch) + return _just(s, w, ch, false, true) +end + +--- center-justify s with width w. +-- @string s the string +-- @int w width of justification +-- @string[opt=' '] ch padding character +function M.center(s, w, ch) + return _just(s, w, ch, true, true) +end + +--- Splits a string into an array. +-- *Note:* Empty split substrings are not included in the resulting table. +--

For example, `string.split("foo.bar...", ".", false)` results in the table `{"foo", "bar"}`. +-- @tparam string s the string to split +-- @tparam[opt="."] string sep the separator to use. +-- @tparam[opt=false] boolean pattern whether to interpret the separator as a lua pattern or plaintext for the string split +-- @treturn {string,...} an array of strings +function M.split(s, sep, pattern) + sep = sep or '.' + sep = sep ~= '' and sep or '.' + sep = not pattern and sep:gsub('([^%w])', '%%%1') or sep + + local fields = {} + local start_idx, end_idx = s:find(sep) + local last_find = 1 + while start_idx do + local substr = s:sub(last_find, start_idx - 1) + if substr:len() > 0 then + table.insert(fields, s:sub(last_find, start_idx - 1)) + end + last_find = end_idx + 1 + start_idx, end_idx = s:find(sep, end_idx + 1) + end + local substr = s:sub(last_find) + if substr:len() > 0 then + insert(fields, s:sub(last_find)) + end + return fields +end + +--- Return the ordinal suffix for a number. +-- @tparam number n +-- @treturn string the ordinal suffix +function M.ordinal_suffix(n) + n = abs(n) % 100 + local d = n % 10 + if d == 1 and n ~= 11 then + return 'st' + elseif d == 2 and n ~= 12 then + return 'nd' + elseif d == 3 and n ~= 13 then + return 'rd' + else + return 'th' + end +end + +-- Extend into string +for k, v in pairs(M) do + string[k] = v -- luacheck: globals string (Allow mutating global string) +end + +return M diff --git a/HelicopterRevival/stdlib/utils/table.lua b/HelicopterRevival/stdlib/utils/table.lua new file mode 100644 index 00000000..120b3712 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/table.lua @@ -0,0 +1,544 @@ +--- Extends Lua 5.2 table. +-- @module table +-- @see table + +local M = {} + +local insert = table.insert + +--- Given a mapping function, creates a transformed copy of the table +--- by calling the function for each element in the table, and using +--- the result as the new value for the key. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.map(a, function(v) return v * 10 end) --produces: { 10, 20, 30, 40, 50 } +--- @usage a = {1, 2, 3, 4, 5} +---table.map(a, function(v, k, x) return v * k + x end, 100) --produces { 101, 104, 109, 116, 125} +-- @tparam table tbl the table to be mapped to the transform +-- @tparam function func the function to transform values +-- @param[opt] ... additional arguments passed to the function +-- @treturn table a new table containing the keys and mapped values +function M.map(tbl, func, ...) + local newtbl = {} + for i, v in pairs(tbl) do + newtbl[i] = func(v, i, ...) + end + return newtbl +end + +--- Given a filter function, creates a filtered copy of the table +--- by calling the function for each element in the table, and +--- filtering out any key-value pairs for non-true results. Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.filter(a, function(v) return v % 2 == 0 end) --produces: { 2, 4 } +--- @usage a = {1, 2, 3, 4, 5} +---table.filter(a, function(v, k, x) return k % 2 == 1 end) --produces: { 1, 3, 5 } +-- @tparam table tbl the table to be filtered +-- @tparam function func the function to filter values +-- @param[opt] ... additional arguments passed to the function +-- @treturn table a new table containing the filtered key-value pairs +function M.filter(tbl, func, ...) + local newtbl = {} + local add = #tbl > 0 + for k, v in pairs(tbl) do + if func(v, k, ...) then + if add then + insert(newtbl, v) + else + newtbl[k] = v + end + end + end + return newtbl +end + +--- Given a candidate search function, iterates over the table, calling the function +--- for each element in the table, and returns the first element the search function returned true. +--- Passes the index as second argument to the function. +--- @usage a= { 1, 2, 3, 4, 5} +---table.find(a, function(v) return v % 2 == 0 end) --produces: 2 +--- @usage a = {1, 2, 3, 4, 5} +---table.find(a, function(v, k, x) return k % 2 == 1 end) --produces: 1 +-- @tparam table tbl the table to be searched +-- @tparam function func the function to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @treturn ?|nil|Mixed the first found value, or nil if none was found +function M.find(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + return v, k + end + end + return nil +end + +--- Given a candidate search function, iterates over the table, calling the function +-- for each element in the table, and returns true if search function returned true. +-- Passes the index as second argument to the function. +-- @see table.find +--- @usage a= { 1, 2, 3, 4, 5} +---table.any(a, function(v) return v % 2 == 0 end) --produces: true +--- @usage a = {1, 2, 3, 4, 5} +---table.any(a, function(v, k, x) return k % 2 == 1 end) --produces: true +-- @tparam table tbl the table to be searched +-- @tparam function func the function to use to search for any matching element +-- @param[opt] ... additional arguments passed to the function +-- @treturn boolean true if an element was found, false if none was found +function M.any(tbl, func, ...) + return M.find(tbl, func, ...) ~= nil +end + +--- Given a function, apply it to each element in the table. +-- Passes the index as the second argument to the function. +--

Iteration is aborted if the applied function returns true for any element during iteration. +-- @usage +-- a = {10, 20, 30, 40} +-- table.each(a, function(v) game.print(v) end) --prints 10, 20, 30, 40, 50 +-- @tparam table tbl the table to be iterated +-- @tparam function func the function to apply to elements +-- @param[opt] ... additional arguments passed to the function +-- @treturn table the table where the given function has been applied to its elements +function M.each(tbl, func, ...) + for k, v in pairs(tbl) do + if func(v, k, ...) then + break + end + end + return tbl +end + +--- Returns a new array that is a one-dimensional recursive flattening of the given array. +-- For every element that is an array, extract its elements into the new array. +--

The optional level argument determines the level of recursion to flatten. +--> This function flattens an integer-indexed array, but not an associative array. +-- @tparam array tbl the array to be flattened +-- @tparam[opt] uint level recursive levels, or no limit to recursion if not supplied +-- @treturn array a new array that represents the flattened contents of the given array +function M.flatten(tbl, level) + local flattened = {} + M.each( + tbl, + function(value) + if type(value) == 'table' and #value > 0 then + if level then + if level > 0 then + M.merge(flattened, M.flatten(value, level - 1), true) + else + insert(flattened, value) + end + else + M.merge(flattened, M.flatten(value), true) + end + else + insert(flattened, value) + end + end + ) + return flattened +end + +--- Given an array, returns the first element or nil if no element exists. +-- @tparam array tbl the array +-- @treturn ?|nil|Mixed the first element +function M.first(tbl) + return tbl[1] +end + +--- Given an array, returns the last element or nil if no elements exist. +-- @tparam array tbl the array +-- @treturn ?|nil|Mixed the last element or nil +function M.last(tbl) + local size = #tbl + if size == 0 then + return nil + end + return tbl[size] +end + +--- Given an array of only numeric values, returns the minimum or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the minimum value +function M.min(tbl) + if #tbl == 0 then + return nil + end + + local min = tbl[1] + for _, num in pairs(tbl) do + min = num < min and num or min + end + return min +end + +---Given an array of only numeric values, returns the maximum or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the maximum value +function M.max(tbl) + if #tbl == 0 then + return nil + end + + local max = tbl[1] + for _, num in pairs(tbl) do + max = num > max and num or max + end + return max +end + +--- Given an array of only numeric values, return the sum of all values, or 0 for empty arrays. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn number the sum of the numbers or zero if the given array was empty +function M.sum(tbl) + local sum = 0 + for _, num in pairs(tbl) do + sum = sum + num + end + return sum +end + +--- Given an array of only numeric values, returns the average or nil if no element exists. +-- @tparam {number,...} tbl the array with only numeric values +-- @treturn ?|nil|number the average value +function M.avg(tbl) + local cnt = #tbl + return cnt ~= 0 and M.sum(tbl) / cnt or nil +end + +--- Merges two tables, values from first get overwritten by the second. +-- @usage +-- function some_func(x, y, args) +-- args = table.merge({option1=false}, args) +-- if opts.option1 == true then return x else return y end +-- end +-- some_func(1,2) -- returns 2 +-- some_func(1,2,{option1=true}) -- returns 1 +-- @tparam table tblA first table +-- @tparam table tblB second table +-- @tparam[opt=false] boolean array_merge set to true to merge the tables as an array or false for an associative array +-- @tparam[opt=false] boolean raw use rawset for associated array +-- @treturn array|table an array or an associated array where tblA and tblB have been merged +function M.merge(tblA, tblB, array_merge, raw) + if not tblB then + return tblA + end + if array_merge then + for _, v in pairs(tblB) do + table.insert(tblA, v) + end + else + for k, v in pairs(tblB) do + if raw then + rawset(tblA, k, v) + else + tblA[k] = v + end + end + end + return tblA +end + +--- Creates a new merged dictionary, if the values in tbl_b are in tbl_a they are not overwritten. +-- @usage +-- local a = {one = A} +-- local b = {one = Z, two = B} +-- local merged = table.dictionary_merge(tbl_a, tbl_b) +-- --merged = {one = A, two = B} +-- @tparam table tbl_a +-- @tparam table tbl_b +-- @treturn table with a and b merged together +function M.dictionary_merge(tbl_a, tbl_b) + local meta_a = getmetatable(tbl_a) + local meta_b = getmetatable(tbl_b) + setmetatable(tbl_a, nil) + setmetatable(tbl_b, nil) + + local new_t = {} + for k, v in pairs(tbl_a) do + new_t[k] = v + end + for k, v in pairs(tbl_b or {}) do + if not new_t[k] then + new_t[k] = v + end + end + setmetatable(tbl_a, meta_a) + setmetatable(tbl_b, meta_b) + return new_t +end + +--- Compares 2 tables for inner equality. +-- copied from factorio/data/core/lualib/util.lua +-- @tparam table tbl_a +-- @tparam table tbl_2 +-- @treturn boolean if the tables are the same +function M.compare(tbl_a, tbl_b) + if tbl_a == tbl_b then + return true + end + for k, v in pairs(tbl_a) do + if type(v) == 'table' and type(tbl_b[k]) == 'table' then + if not M.compare(v, tbl_b[k]) then + return false + end + else + if (v ~= tbl_b[k]) then + return false + end + end + end + for k, v in pairs(tbl_b) do + if type(v) == 'table' and type(tbl_a[k]) == 'table' then + if not M.compare(v, tbl_a[k]) then + return false + end + else + if v ~= tbl_a[k] then + return false + end + end + end + return true +end + +--- Creates a deep copy of table without copying Factorio objects. +-- copied from factorio/data/core/lualib/util.lua +-- @usage local copy = table.deepcopy[data.raw.["stone-furnace"]["stone-furnace"]] -- returns a copy of the stone furnace entity +-- @tparam table object the table to copy +-- @treturn table a copy of the table +function M.deepcopy(object) + local lookup_table = {} + local function _copy(this_object) + if type(this_object) ~= 'table' then + return this_object + elseif this_object.__self then + return this_object + elseif lookup_table[this_object] then + return lookup_table[this_object] + end + local new_table = {} + lookup_table[this_object] = new_table + for index, value in pairs(this_object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(this_object)) + end + return _copy(object) +end + +--- Creates a flexible deep copy of an object, recursively copying sub-objects +-- @usage local copy = table.flexcopy(data.raw.["stone-furnace"]["stone-furnace"]) -- returns a copy of the stone furnace entity +-- @tparam table object the table to copy +-- @treturn table a copy of the table +function M.flexcopy(object) + local lookup_table = {} + local function _copy(this_object) + if type(this_object) ~= 'table' then + return this_object + elseif this_object.__self then + return this_object + elseif lookup_table[this_object] then + return lookup_table[this_object] + elseif type(this_object._copy_with) == 'function' then + lookup_table[this_object] = this_object:_copy_with(_copy) + return lookup_table[this_object] + end + local new_table = {} + lookup_table[this_object] = new_table + for index, value in pairs(this_object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(this_object)) + end + return _copy(object) +end + +--- Returns a copy of all of the values in the table. +-- @tparam table tbl the table to copy the keys from, or an empty table if tbl is nil +-- @tparam[opt] boolean sorted whether to sort the keys (slower) or keep the random order from pairs() +-- @tparam[opt] boolean as_string whether to try and parse the values as strings, or leave them as their existing type +-- @treturn array an array with a copy of all the values in the table +function M.values(tbl, sorted, as_string) + if not tbl then + return {} + end + local valueset = {} + local n = 0 + if as_string then --checking as_string /before/ looping is faster + for _, v in pairs(tbl) do + n = n + 1 + valueset[n] = tostring(v) + end + else + for _, v in pairs(tbl) do + n = n + 1 + valueset[n] = v + end + end + if sorted then + table.sort( + valueset, + function(x, y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end + ) + end + return valueset +end + +--- Returns a copy of all of the keys in the table. +-- @tparam table tbl the table to copy the keys from, or an empty table if tbl is nil +-- @tparam[opt] boolean sorted whether to sort the keys (slower) or keep the random order from pairs() +-- @tparam[opt] boolean as_string whether to try and parse the keys as strings, or leave them as their existing type +-- @treturn array an array with a copy of all the keys in the table +function M.keys(tbl, sorted, as_string) + if not tbl then + return {} + end + local keyset = {} + local n = 0 + if as_string then --checking as_string /before/ looping is faster + for k, _ in pairs(tbl) do + n = n + 1 + keyset[n] = tostring(k) + end + else + for k, _ in pairs(tbl) do + n = n + 1 + keyset[n] = k + end + end + if sorted then + table.sort( + keyset, + function(x, y) --sorts tables with mixed index types. + local tx = type(x) == 'number' + local ty = type(y) == 'number' + if tx == ty then + return x < y and true or false --similar type can be compared + elseif tx == true then + return true --only x is a number and goes first + else + return false --only y is a number and goes first + end + end + ) + end + return keyset +end + +--- Removes keys from a table by setting the values associated with the keys to nil. +-- @usage local a = {1, 2, 3, 4} +--table.remove_keys(a, {1,3}) --returns {nil, 2, nil, 4} +-- @usage local b = {k1 = 1, k2 = 'foo', old_key = 'bar'} +--table.remove_keys(b, {'old_key'}) --returns {k1 = 1, k2 = 'foo'} +-- @tparam table tbl the table to remove the keys from +-- @tparam {Mixed,...} keys an array of keys that exist in the given table +-- @treturn table tbl without the specified keys +function M.remove_keys(tbl, keys) + for i = 1, #keys do + tbl[keys[i]] = nil + end + return tbl +end + +--- Returns the number of keys in a table, if func is passed only count keys when the function is true. +-- @tparam table tbl to count keys +-- @tparam[opt] function func to increment counter +-- @param[optchain] ... additional arguments passed to the function +-- @treturn number The number of keys matching the function or the number of all keys if func isn't passed +-- @treturn number The total number of keys +-- @usage local a = { 1, 2, 3, 4, 5} +-- table.count_keys(a) -- produces: 5, 5 +-- @usage local a = {1, 2, 3, 4, 5} +-- table.count_keys(a, function(v, k) return k % 2 == 1 end) -- produces: 3, 5 +function M.count_keys(tbl, func, ...) + local count, total = 0, 0 + if type(tbl) == 'table' then + for k, v in pairs(tbl) do + total = total + 1 + if func then + if func(v, k, ...) then + count = count + 1 + end + else + count = count + 1 + end + end + end + return count, total +end + +--- Returns an inverted (***{[value] = key,...}***) copy of the given table. If the values are not unique, the assigned key depends on the order of pairs(). +-- @usage local a = {k1 = 'foo', k2 = 'bar'} +--table.invert(a) --returns {'foo' = k1, 'bar' = k2} +-- @usage local b = {k1 = 'foo', k2 = 'bar', k3 = 'bar'} +--table.invert(b) --returns {'foo' = k1, 'bar' = ?} +-- @tparam table tbl the table to invert +-- @treturn table a new table with inverted mapping +function M.invert(tbl) + local inverted = {} + for k, v in pairs(tbl) do + inverted[v] = k + end + return inverted +end + +local function _size(tbl) + local count = 0 + for _ in pairs(tbl or {}) do + count = count + 1 + end + return count +end + +--- Return the size of a table using the factorio built in table_size function +-- @function size +-- @tparam table table to use +-- @treturn int size of the table +M.size = _G.table_size or _size + +--- For all string or number values in an array map them to a value = value table +-- @usage local a = {"v1", "v2"} +-- table.array_to_bool(a) -- return {["v1"] = "v1", ["v2"]= "v2"} +-- @tparam table tbl the table to convert +-- @treturn table the converted table +function M.array_to_dictionary(tbl) + local newtbl = {} + for _, v in ipairs(tbl) do + if type(v) == 'string' or type(v) == 'number' then + newtbl[v] = true + end + end + return newtbl +end + +--- Does the table contain any elements +-- @tparam table tbl +-- @treturn boolean +function M.is_empty(tbl) + return _G.table_size and _G.table_size(tbl) == 0 or next(tbl) == nil +end + +--- Clear all elements in a table +-- @tparam table tbl the table to clear +-- @treturn table the cleared table +function M.clear(tbl) + for k in pairs(tbl) do + tbl[k] = nil + end + return tbl +end + +-- Extend into table +for k, v in pairs(M) do + table[k] = v -- luacheck: globals table (Allow mutating global table) +end + +return M diff --git a/HelicopterRevival/stdlib/utils/vendor/inspect.lua b/HelicopterRevival/stdlib/utils/vendor/inspect.lua new file mode 100644 index 00000000..52d48874 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/vendor/inspect.lua @@ -0,0 +1,404 @@ +--- human-readable representations of tables +-- @script inspect + +local inspect = { + _VERSION = 'inspect.lua 3.1.0', + _URL = 'http://github.com/kikito/inspect.lua', + _DESCRIPTION = 'human-readable representations of tables', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2013 Enrique GarcΓ­a Cota + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ]] +} + +local tostring = tostring + +inspect.KEY = + setmetatable( + {}, + { + __tostring = function() + return 'inspect.KEY' + end + } +) +inspect.METATABLE = + setmetatable( + {}, + { + __tostring = function() + return 'inspect.METATABLE' + end + } +) + +-- Apostrophizes the string if it has quotes, but not aphostrophes +-- Otherwise, it returns a regular quoted string +local function smartQuote(str) + if str:match('"') and not str:match("'") then + return "'" .. str .. "'" + end + return '"' .. str:gsub('"', '\\"') .. '"' +end + +-- \a => '\\a', \0 => '\\0', 31 => '\31' +local shortControlCharEscapes = { + ['\a'] = '\\a', + ['\b'] = '\\b', + ['\f'] = '\\f', + ['\n'] = '\\n', + ['\r'] = '\\r', + ['\t'] = '\\t', + ['\v'] = '\\v' +} +local longControlCharEscapes = {} -- \a => nil, \0 => \000, 31 => \031 +for i = 0, 31 do + local ch = string.char(i) + if not shortControlCharEscapes[ch] then + shortControlCharEscapes[ch] = '\\' .. i + longControlCharEscapes[ch] = string.format('\\%03d', i) + end +end + +local function escape(str) + return (str:gsub('\\', '\\\\'):gsub('(%c)%f[0-9]', longControlCharEscapes):gsub('%c', shortControlCharEscapes)) +end + +local function isIdentifier(str) + return type(str) == 'string' and str:match('^[_%a][_%a%d]*$') +end + +local function isSequenceKey(k, sequenceLength) + return type(k) == 'number' and 1 <= k and k <= sequenceLength and math.floor(k) == k +end + +local defaultTypeOrders = { + ['number'] = 1, + ['boolean'] = 2, + ['string'] = 3, + ['table'] = 4, + ['function'] = 5, + ['userdata'] = 6, + ['thread'] = 7 +} + +local function sortKeys(a, b) + local ta, tb = type(a), type(b) + + -- strings and numbers are sorted numerically/alphabetically + if ta == tb and (ta == 'string' or ta == 'number') then + return a < b + end + + local dta, dtb = defaultTypeOrders[ta], defaultTypeOrders[tb] + -- Two default types are compared according to the defaultTypeOrders table + if dta and dtb then + return defaultTypeOrders[ta] < defaultTypeOrders[tb] + elseif dta then + return true -- default types before custom ones + elseif dtb then + return false -- custom types after default ones + end + + -- custom types are sorted out alphabetically + return ta < tb +end + +-- For implementation reasons, the behavior of rawlen & # is "undefined" when +-- tables aren't pure sequences. So we implement our own # operator. +local function getSequenceLength(t) + local len = 1 + local v = rawget(t, len) + while v ~= nil do + len = len + 1 + v = rawget(t, len) + end + return len - 1 +end + +local function getNonSequentialKeys(t) + local keys = {} + local sequenceLength = getSequenceLength(t) + for k, _ in pairs(t) do + if not isSequenceKey(k, sequenceLength) then + table.insert(keys, k) + end + end + table.sort(keys, sortKeys) + return keys, sequenceLength +end + +local function getToStringResultSafely(t, mt) + local __tostring = type(mt) == 'table' and rawget(mt, '__tostring') + local str, ok + if type(__tostring) == 'function' then + ok, str = pcall(__tostring, t) + str = ok and str or 'error: ' .. tostring(str) + end + if type(str) == 'string' and #str > 0 then + return str + end +end + +local function countTableAppearances(t, tableAppearances) + tableAppearances = tableAppearances or {} + + if type(t) == 'table' then + if not tableAppearances[t] then + tableAppearances[t] = 1 + for k, v in pairs(t) do + countTableAppearances(k, tableAppearances) + countTableAppearances(v, tableAppearances) + end + countTableAppearances(getmetatable(t), tableAppearances) + else + tableAppearances[t] = tableAppearances[t] + 1 + end + end + + return tableAppearances +end + +local copySequence = function(s) + local copy, len = {}, #s + for i = 1, len do + copy[i] = s[i] + end + return copy, len +end + +local function makePath(path, ...) + local keys = {...} + local newPath, len = copySequence(path) + for i = 1, #keys do + newPath[len + i] = keys[i] + end + return newPath +end + +local function processRecursive(process, item, path, visited) + if item == nil then + return nil + end + if visited[item] then + return visited[item] + end + + local processed = process(item, path) + if type(processed) == 'table' then + local processedCopy = {} + visited[item] = processedCopy + local processedKey + + for k, v in pairs(processed) do + processedKey = processRecursive(process, k, makePath(path, k, inspect.KEY), visited) + if processedKey ~= nil then + processedCopy[processedKey] = processRecursive(process, v, makePath(path, processedKey), visited) + end + end + + local mt = processRecursive(process, getmetatable(processed), makePath(path, inspect.METATABLE), visited) + if type(mt) ~= 'table' then + mt = nil + end -- ignore not nil/table __metatable field + setmetatable(processedCopy, mt) + processed = processedCopy + end + return processed +end + +------------------------------------------------------------------- + +local Inspector = {} +local Inspector_mt = {__index = Inspector} + +function Inspector:puts(...) + local args = {...} + local buffer = self.buffer + local len = #buffer + for i = 1, #args do + len = len + 1 + buffer[len] = args[i] + end +end + +function Inspector:down(f) + self.level = self.level + 1 + f() + self.level = self.level - 1 +end + +function Inspector:tabify() + self:puts(self.newline, string.rep(self.indent, self.level)) +end + +function Inspector:alreadyVisited(v) + return self.ids[v] ~= nil +end + +function Inspector:getId(v) + local id = self.ids[v] + if not id then + local tv = type(v) + id = (self.maxIds[tv] or 0) + 1 + self.maxIds[tv] = id + self.ids[v] = id + end + return tostring(id) +end + +function Inspector:putKey(k) + if isIdentifier(k) then + return self:puts(k) + end + self:puts('[') + self:putValue(k) + self:puts(']') +end + +function Inspector:putTable(t) + if t == inspect.KEY or t == inspect.METATABLE then + self:puts(tostring(t)) + elseif self:alreadyVisited(t) then + self:puts('') + elseif self.level >= self.depth then + self:puts('{...}') + else + if self.tableAppearances[t] > 1 then + self:puts('<', self:getId(t), '>') + end + + local nonSequentialKeys, sequenceLength = getNonSequentialKeys(t) + local mt = getmetatable(t) + local toStringResult = getToStringResultSafely(t, mt) + + self:puts('{') + self:down( + function() + if toStringResult then + self:puts(' -- ', escape(toStringResult)) + if sequenceLength >= 1 then + self:tabify() + end + end + + local count = 0 + for i = 1, sequenceLength do + if count > 0 then + self:puts(',') + end + self:puts(' ') + self:putValue(t[i]) + count = count + 1 + end + + for _, k in ipairs(nonSequentialKeys) do + if count > 0 then + self:puts(',') + end + self:tabify() + self:putKey(k) + self:puts(' = ') + self:putValue(t[k]) + count = count + 1 + end + + if type(mt) == 'table' then + if count > 0 then + self:puts(',') + end + self:tabify() + self:puts(' = ') + self:putValue(mt) + end + end + ) + + if #nonSequentialKeys > 0 or type(mt) == 'table' then -- result is multi-lined. Justify closing } + self:tabify() + elseif sequenceLength > 0 then -- array tables have one extra space before closing } + self:puts(' ') + end + + self:puts('}') + end +end + +function Inspector:putValue(v) + local tv = type(v) + + if tv == 'string' then + self:puts(smartQuote(escape(v))) + elseif tv == 'number' or tv == 'boolean' or tv == 'nil' or tv == 'cdata' or tv == 'ctype' then + self:puts(tostring(v)) + elseif tv == 'table' then + self:putTable(v) + else + self:puts('<', tv, ' ', self:getId(v), '>') + end +end + +------------------------------------------------------------------- + +function inspect.inspect(root, options) + options = options or {} + + local depth = options.depth or math.huge + local newline = options.newline or '\n' + local indent = options.indent or ' ' + local process = options.process + + if process then + root = processRecursive(process, root, {}, {}) + end + + local inspector = + setmetatable( + { + depth = depth, + level = 0, + buffer = {}, + ids = {}, + maxIds = {}, + newline = newline, + indent = indent, + tableAppearances = countTableAppearances(root) + }, + Inspector_mt + ) + + inspector:putValue(root) + + return table.concat(inspector.buffer) +end + +setmetatable( + inspect, + { + __call = function(_, ...) + return inspect.inspect(...) + end + } +) + +return inspect diff --git a/HelicopterRevival/stdlib/utils/vendor/mm.lua b/HelicopterRevival/stdlib/utils/vendor/mm.lua new file mode 100644 index 00000000..abb448ce --- /dev/null +++ b/HelicopterRevival/stdlib/utils/vendor/mm.lua @@ -0,0 +1,708 @@ +-- Terminal color (and formatting) codes. +local C = { + e = '\27[0m', -- reset + + -- Text attributes. + br = '\27[1m', -- bright + di = '\27[2m', -- dim + it = '\27[3m', -- italics + un = '\27[4m', -- underscore + bl = '\27[5m', -- blink + re = '\27[7m', -- reverse + hi = '\27[8m', -- hidden + + -- Text colors. + k = '\27[30m', -- black + r = '\27[31m', -- red + g = '\27[32m', -- green + y = '\27[33m', -- yellow + b = '\27[34m', -- blue + m = '\27[35m', -- magenta + c = '\27[36m', -- cyan + w = '\27[37m', -- white + + -- Background colors. + _k = '\27[40m', -- black + _r = '\27[41m', -- red + _g = '\27[42m', -- green + _y = '\27[43m', -- yellow + _b = '\27[44m', -- blue + _m = '\27[45m', -- magenta + _c = '\27[46m', -- cyan + _w = '\27[47m' -- white +} + +local METATABLE = { "", colors = C.it .. C.y } +local INDENT = " " + +-- The default sequence separator. +local SEP = " " + +-- The open and close brackets can be any piece (notably, a sequence with +-- colors). The separator must be a plain string. +local BOPEN, BSEP, BCLOSE = 1, 2, 3 + +-- The default frame brackets and separator. +local BRACKETS = { + { "{", colors = C.br }, + ",", + { "}", colors = C.br } +} + +local STR_HALF = 30 +local MAX_STR_LEN = STR_HALF * 2 + +-- Names to use for named references. The order is important; these are aligned +-- with the colors in `NAME_COLORS`. +local NAMES = { + "Cherry", + "Apple", + "Lemon", + "Blueberry", + "Jam", + "Cream", + "Rhubarb", + "Lime", + "Butter", + "Grape", + "Pomegranate", + "Sugar", + "Cinnamon", + "Avocado", + "Honey", +} + +-- Colors to use for named references. Don't use black nor white. +local NAME_COLORS = { C.r, C.g, C.y, C.b, C.m, C.c } + +-- Reserved Lua keywords as a convenient look-up table. +local RESERVED = { + ['and'] = true, + ['break'] = true, + ['do'] = true, + ['else'] = true, + ['elseif'] = true, + ['end'] = true, + ['false'] = true, + ['for'] = true, + ['function'] = true, + ['goto'] = true, + ['if'] = true, + ['in'] = true, + ['local'] = true, + ['nil'] = true, + ['not'] = true, + ['or'] = true, + ['repeat'] = true, + ['return'] = true, + ['then'] = true, + ['true'] = true, + ['until'] = true, + ['while'] = true +} + + +-- +-- Namers +-- + +local function new_namer () + local index = 1 + local suffix = 1 + local color_index = 1 + + return function () + -- Pick the name. + local result = NAMES [index] + if suffix > 1 then + result = result .. " " .. tostring (suffix) + end + + index = index + 1 + if index > #NAMES then + index = 1 + suffix = suffix + 1 + end + + -- Pick the color. + local color = NAME_COLORS [color_index] + + color_index = color_index + 1 + if color_index > #NAME_COLORS then + color_index = 1 + end + + return { result, colors = C.un .. color } + end +end + + +-- +-- Context +-- + + +local function new_context () + return { + occur = {}, + named = {}, + next_name = new_namer (), + + prev_indent = '', + next_indent = INDENT, + line_len = 0, + max_width = 78, + + result = '' + } +end + + +-- +-- Translating into pieces +-- + +-- Translaters take any Lua value and create pieces to represent them. +-- +-- Some values should only be serialized once, both to prevent cycles and to +-- prevent redundancy. Or in other cases, these values cannot be serialized +-- (such as functions) but if they appear multiple times we want to express +-- that they are the same. +-- +-- When a translater encounters such a value for the first time, it is +-- registered in the context in `occur`. The value is wrapped in a plain table +-- with the `id` field pointing to the original value. If the value is +-- serializable, such as a table, then the the `def` field contains the piece +-- to display. If it is unserializable or it is not the first time this value +-- has occurred, the `def` field is nil. +-- +-- In the cleaning stage, these `id` fields are replaced with their names. If a +-- `def` field is present, then a sequence is generated to define the name with +-- the piece. + +local translaters = {} +local translate, ident_friendly + + +function translate (val, ctx) + -- Try to find a type-specific translater. + local by_type = translaters [type (val)] + + if by_type then + -- If there is a type-specific translater, call it. + return by_type (val, ctx) + end + + -- Otherwise perform the default translation. + + -- Check whether we've already encountered this value. + if ctx.occur [val] then + -- We have; give it a name if we haven't already. + if not ctx.named [val] then + ctx.named [val] = ctx.next_name () + end + + -- Return the value as a reference. + return { id = val } + else + -- We haven't; mark it as encountered. + ctx.occur [val] = true + + -- Return the value as a definition. + return { id = val, def = tostring (val) } + end +end + + +translaters ['function'] = function (val, ctx) + -- Check whether we've already encountered this function. + if ctx.occur [val] then + -- We have; give it a name if we haven't already. + if not ctx.named [val] then + ctx.named [val] = ctx.next_name () + end + else + -- We haven't; mark it as encountered. + ctx.occur [val] = true + end + + -- Return the unserialized function. + return { id = val } +end + + +function translaters.table (val, ctx) + -- Check whether we've already encountered this table. + if ctx.occur [val] then + -- We have; give it a name if we haven't already. + if not ctx.named [val] then + ctx.named [val] = ctx.next_name () + end + + -- Return the unserialized table. + return { id = val } + else + -- We haven't; mark it as encountered. + ctx.occur [val] = true + + -- Construct the frame for this table. + local result = { + bracket = BRACKETS + } + + -- The equals-sign between key and value. + local eq = { "=", colors = C.di } + + -- Represent the metatable, if present. + local mt = getmetatable (val) + if mt then + -- Translate the metatable. + mt = translate (mt, ctx) + table.insert (result, { METATABLE, eq, mt }) + end + + -- Represent the contents. + for k, v in pairs (val) do + -- If it is a string key which can be represented without quotes, leave + -- it plain. + if ident_friendly (k) then + -- Leave the key as it is. + k = { k, colors = C.m } + else + -- Otherwise translate the key. + k = translate (k, ctx) + end + + -- Translate the value. + v = translate (v, ctx) + + table.insert (result, { k, eq, v }) + end + + -- Wrap the result with its id. + return { id = val, def = result } + end +end + + +function translaters.string (val) + if #val <= MAX_STR_LEN then + -- The string is short enough; display it all. + local a = string.format ('%q', val) + a = string.gsub (a, '\n', 'n') + + return { a, colors = C.g } + else + -- The string is too long. Only show the start and end. + local a = string.format ('%q', string.sub (val, 1, STR_HALF)) + a = string.gsub (a, '\n', 'n') + local b = string.format ('%q', string.sub (val, -STR_HALF)) + b = string.gsub (b, '\n', 'n') + + return { a, { "...", colors = C.di }, b, colors = C.g, sep = '', tight = true } + end +end + + +function translaters.number (val) + return { tostring (val), colors = C.m .. C.br } +end + + +-- Check whether a value can be represented as a Lua identifier, without the +-- need for quotes or translation. +-- +-- If the value is not a string, this immediately returns false. Otherwise, the +-- string must be a valid Lua name: a sequence of letters, digits, and +-- underscores that doesn't start with a digit and isn't a reserved keyword. +-- +-- See http://www.lua.org/manual/5.3/manual.html#3.1 +function ident_friendly (val) + -- The value must be a string. + if type (val) ~= 'string' then + return false + end + + if string.find (val, '^[_%a][_%a%d]*$') then + -- The value is a Lua name; check if it is reserved. + if RESERVED [val] then + -- The value is a resreved keyword. + return false + else + -- The value is a valid name. + return true + end + else + -- The value is not a Lua name. + return false + end +end + + +-- +-- Cleaning pieces +-- + + +local function clean (piece, ctx) + if type (piece) == 'table' then + -- Check if it's an id reference. + if piece.id then + local name = ctx.named [piece.id] + local def = piece.def + + -- Check whether it has been given a name. + if name then + local header = { + "<", type (piece.id), " ", name, ">", + colors = C.it, + sep = '', + tight = true + } + -- Named. Check whether the reference has a definition. + if def then + -- Create a sequence defining the name to the definition. + return { header, { "is", colors = C.di }, clean (piece.def, ctx) } + else + -- Show just the name. + return header + end + else + -- No name. Check whether the reference has a definition. + if def then + -- Display the definition without any header. + return clean (piece.def, ctx) + else + -- Display just the type. + return { + "<", type (piece.id), ">", + colors = C.it, + sep = '', + tight = true + } + end + end + + -- Check if it's a frame. + elseif piece.bracket then + -- Clean each child. + for i, child in ipairs (piece) do + piece [i] = clean (child, ctx) + end + return piece + + -- Otherwise it's a sequence. + else + -- Clean each child. + for i, child in ipairs (piece) do + piece [i] = clean (child, ctx) + end + return piece + end + else + -- It's a plain value, not a table; no cleaning is needed. + return piece + end +end + + +-- +-- Displaying pieces +-- + + +-- Pieces are either frames (with brackets), sequences (no brackets), or +-- strings. + +-- Frames are displayed either short-form as { a = 1 } or long-form as +-- { +-- a = 1 +-- }. + + +-- Declare all the local functions first, so they can refer to each other. +local min_len, display, display_frame, display_sequence, display_string, + display_frame_short, display_frame_long, newline, newline_no_indent, + write, write_nolength, space_here, space_newline + + +-- Dispatch based on the piece's type. +function display (piece, ctx) + if type (piece) == 'string' then + -- String. + return display_string (piece, ctx) + elseif piece.bracket then + -- Frame. + return display_frame (piece, ctx) + else + -- Sequence. + return display_sequence (piece, ctx) + end +end + + +-- Display a frame. +function display_frame (frame, ctx) + if #frame == 0 then + -- If the frame is empty, just display the brackets. + local str = { + frame.bracket [BOPEN], frame.bracket [BCLOSE], + sep = '', + tight = true + } + return display (str, ctx) + end + + local ml = min_len (frame) + + -- Try to fit the frame short-form on this line. + if ml <= space_here (ctx) then + return display_frame_short (frame, ctx) + + -- Otherwise try to fit it short-form on the next line. + elseif ml <= space_newline (ctx) then + newline (ctx) + return display_frame_short (frame, ctx) + + -- Otherwise display it long-form. + else + return display_frame_long (frame, ctx) + end +end + + +function display_frame_short (frame, ctx) + -- Short-form frames never wrap onto new lines, so we don't need to do any + -- length checking (it's already been done for us). + + -- Write the open bracket. + display (frame.bracket [BOPEN], ctx) + write (" ", ctx) + + -- Display the first child. + display (frame [1], ctx) + + -- Display the remaining children. + for i = 2, #frame do + local child = frame [i] + + -- Write the separator. + write (frame.bracket [BSEP], ctx) + write (" ", ctx) + + -- Display the child. + display (child, ctx) + end + + -- Write the close bracket. + write (" ", ctx) + display (frame.bracket [BCLOSE], ctx) +end + + +function display_frame_long (frame, ctx) + -- Remember the original value of next_indent. + local old_old_indent = ctx.prev_indent + local old_indent = ctx.next_indent + + -- Display the open bracket. + display (frame.bracket [BOPEN], ctx) + + -- Increase the indentation. + ctx.prev_indent = old_indent + ctx.next_indent = old_indent .. INDENT + + -- For all but the last child... + for i = 1, #frame - 1 do + local child = frame [i] + + -- Start a new line with old indentation. + newline_no_indent (ctx) + write (old_indent, ctx) + + -- Display the child. + display (child, ctx) + + -- Write the separator. + write (frame.bracket [BSEP], ctx) + end + + -- For the last child... + do + local child = frame [#frame] + + -- Start a new line with old indentation. + newline_no_indent (ctx) + write (old_indent, ctx) + + -- Display the child. + display (child, ctx) + -- No separator. + end + + -- Write the close bracket. + newline_no_indent (ctx) + write (old_old_indent, ctx) + display (frame.bracket [BCLOSE], ctx) + + -- Return to the old indentation. + ctx.prev_indent = old_old_indent + ctx.next_indent = old_indent +end + + +function display_sequence (piece, ctx) + if #piece > 0 then + -- Check if this is a tight sequence. + if piece.tight then + -- Try to fit the entire sequence on one line. + local ml = min_len (piece, ctx) + + -- If it won't fit here, but it would fit on the next line, then write it + -- on the next line; otherwise, write it here. + if ml > space_here (ctx) and ml <= space_newline (ctx) then + newline (ctx) + end + end + + -- Apply the colors, if given. + if piece.colors then + write_nolength (piece.colors, ctx) + end + + -- Display the first child. + display (piece [1], ctx) + + -- For each following children: + for i = 2, #piece do + local child = piece [i] + + -- Apply the colors, if given. + if piece.colors then + write_nolength (piece.colors, ctx) + end + + -- Write a separator. + write (piece.sep or SEP, ctx) + + -- Then display the child. + display (child, ctx) + end + + -- Reset the colors. + if piece.colors then + write_nolength (C.e, ctx) + end + end +end + + +function display_string (piece, ctx) + local ml = min_len (piece) + + -- If it won't fit here, but it would fit on the next line, then write it on + -- the next line; otherwise, write it here. + if ml > space_here (ctx) and ml <= space_newline (ctx) then + newline (ctx) + end + + write (piece, ctx) +end + + +-- The minimum length to display this piece, if it is placed all on one line. +function min_len (piece, ctx) + -- For strings, simply return their length. + if type (piece) == 'string' then + return #piece + end + + -- Otherwise, we have some calculations to do. + local result = 0 + + if piece.bracket then + -- This is a frame. + + -- If it's an empty frame, just the open and close brackets. + if #piece == 0 then + return min_len (piece.bracket [BOPEN]) + min_len (piece.bracket [BCLOSE]) + end + + -- Open and close brackets, plus a space for each. + result = result + min_len (piece.bracket [BOPEN]) + + min_len (piece.bracket [BCLOSE]) + 2 + + -- A separator between each item, plus a space for each. + result = result + (#piece - 1) * (#piece.bracket[BSEP] + 1) + else + -- This is a sequence. + + -- If it's an empty sequence, then nothing. + if #piece == 0 then + return 0 + end + + -- A single separator between each item. + result = result + (#piece - 1) * #(piece.sep or SEP) + end + + -- For both frames and sequences: + -- Find the minimum length of each child. + for _, child in ipairs (piece) do + result = result + min_len (child, ctx) + end + + return result +end + + +function newline (ctx) + ctx.result = ctx.result .. "\n" + ctx.line_len = 0 + write (ctx.next_indent, ctx) +end + + +function newline_no_indent (ctx) + ctx.result = ctx.result .. "\n" + ctx.line_len = 0 +end + + +function write (str, ctx) + ctx.result = ctx.result .. str + ctx.line_len = ctx.line_len + #str +end + + +function write_nolength (str, ctx) + ctx.result = ctx.result .. str +end + + +function space_here (ctx) + return math.max (0, ctx.max_width - ctx.line_len) +end + + +function space_newline (ctx) + return math.max (0, ctx.max_width - #ctx.next_indent) +end + + +-- +-- Main function +-- + + +return function (val) + if val == nil then + print (nil) + else + local ctx = new_context () + local piece = translate (val, ctx) + piece = clean (piece, ctx) + display (piece, ctx) + print (C.e .. ctx.result .. C.e) + end +end diff --git a/HelicopterRevival/stdlib/utils/vendor/semver.lua b/HelicopterRevival/stdlib/utils/vendor/semver.lua new file mode 100644 index 00000000..dc89fac2 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/vendor/semver.lua @@ -0,0 +1,234 @@ +--- semver for Lua +-- @script semver + +local semver = { + _VERSION = '1.2.1', + _DESCRIPTION = 'semver for Lua', + _URL = 'https://github.com/kikito/semver.lua', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2015 Enrique GarcΓ­a Cota + + Permission is hereby granted, free of charge, to any person obtaining a + copy of tother software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and tother permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ]] +} + +local function checkPositiveInteger(number, name) + assert(number >= 0, name .. ' must be a valid positive number') + assert(math.floor(number) == number, name .. ' must be an integer') +end + +local function present(value) + return value and value ~= '' +end + +-- splitByDot("a.bbc.d") == {"a", "bbc", "d"} +local function splitByDot(str) + str = str or '' + local t, count = {}, 0 + str:gsub( + '([^%.]+)', + function(c) + count = count + 1 + t[count] = c + end + ) + return t +end + +local function parsePrereleaseAndBuildWithSign(str) + local prereleaseWithSign, buildWithSign = str:match('^(-[^+]+)(+.+)$') + if not (prereleaseWithSign and buildWithSign) then + prereleaseWithSign = str:match('^(-.+)$') + buildWithSign = str:match('^(+.+)$') + end + assert(prereleaseWithSign or buildWithSign, ('The parameter %q must begin with + or - to denote a prerelease or a build'):format(str)) + return prereleaseWithSign, buildWithSign +end + +local function parsePrerelease(prereleaseWithSign) + if prereleaseWithSign then + local prerelease = prereleaseWithSign:match('^-(%w[%.%w-]*)$') + assert(prerelease, ('The prerelease %q is not a slash followed by alphanumerics, dots and slashes'):format(prereleaseWithSign)) + return prerelease + end +end + +local function parseBuild(buildWithSign) + if buildWithSign then + local build = buildWithSign:match('^%+(%w[%.%w-]*)$') + assert(build, ('The build %q is not a + sign followed by alphanumerics, dots and slashes'):format(buildWithSign)) + return build + end +end + +local function parsePrereleaseAndBuild(str) + if not present(str) then + return nil, nil + end + + local prereleaseWithSign, buildWithSign = parsePrereleaseAndBuildWithSign(str) + + local prerelease = parsePrerelease(prereleaseWithSign) + local build = parseBuild(buildWithSign) + + return prerelease, build +end + +local function parseVersion(str) + local sMajor, sMinor, sPatch, sPrereleaseAndBuild = str:match('^(%d+)%.?(%d*)%.?(%d*)(.-)$') + assert(type(sMajor) == 'string', ('Could not extract version number(s) from %q'):format(str)) + local major, minor, patch = tonumber(sMajor), tonumber(sMinor), tonumber(sPatch) + local prerelease, build = parsePrereleaseAndBuild(sPrereleaseAndBuild) + return major, minor, patch, prerelease, build +end + +-- return 0 if a == b, -1 if a < b, and 1 if a > b +local function compare(a, b) + return a == b and 0 or a < b and -1 or 1 +end + +local function compareIds(myId, otherId) + if myId == otherId then + return 0 + elseif not myId then + return -1 + elseif not otherId then + return 1 + end + + local selfNumber, otherNumber = tonumber(myId), tonumber(otherId) + + if selfNumber and otherNumber then -- numerical comparison + -- numericals are always smaller than alphanums + return compare(selfNumber, otherNumber) + elseif selfNumber then + return -1 + elseif otherNumber then + return 1 + else + return compare(myId, otherId) -- alphanumerical comparison + end +end + +local function smallerIdList(myIds, otherIds) + local myLength = #myIds + local comparison + + for i = 1, myLength do + comparison = compareIds(myIds[i], otherIds[i]) + if comparison ~= 0 then + return comparison == -1 + end + -- if comparison == 0, continue loop + end + + return myLength < #otherIds +end + +local function smallerPrerelease(mine, other) + if mine == other or not mine then + return false + elseif not other then + return true + end + + return smallerIdList(splitByDot(mine), splitByDot(other)) +end + +local methods = {} + +function methods:nextMajor() + return semver(self.major + 1, 0, 0) +end +function methods:nextMinor() + return semver(self.major, self.minor + 1, 0) +end +function methods:nextPatch() + return semver(self.major, self.minor, self.patch + 1) +end + +local mt = {__index = methods} +function mt:__eq(other) + return self.major == other.major and self.minor == other.minor and self.patch == other.patch and self.prerelease == other.prerelease + -- notice that build is ignored for precedence in semver 2.0.0 +end +function mt:__lt(other) + if self.major ~= other.major then + return self.major < other.major + end + if self.minor ~= other.minor then + return self.minor < other.minor + end + if self.patch ~= other.patch then + return self.patch < other.patch + end + return smallerPrerelease(self.prerelease, other.prerelease) + -- notice that build is ignored for precedence in semver 2.0.0 +end +-- This works like the "pessimisstic operator" in Rubygems. +-- if a and b are versions, a ^ b means "b is backwards-compatible with a" +-- in other words, "it's safe to upgrade from a to b" +function mt:__pow(other) + if self.major == 0 then + return self == other + end + return self.major == other.major and self.minor <= other.minor +end +function mt:__tostring() + local buffer = {('%d.%d.%d'):format(self.major, self.minor, self.patch)} + if self.prerelease then + table.insert(buffer, '-' .. self.prerelease) + end + if self.build then + table.insert(buffer, '+' .. self.build) + end + return table.concat(buffer) +end + +local function new(major, minor, patch, prerelease, build) + assert(major, 'At least one parameter is needed') + + if type(major) == 'string' then + major, minor, patch, prerelease, build = parseVersion(major) + end + patch = patch or 0 + minor = minor or 0 + + checkPositiveInteger(major, 'major') + checkPositiveInteger(minor, 'minor') + checkPositiveInteger(patch, 'patch') + + local result = {major = major, minor = minor, patch = patch, prerelease = prerelease, build = build} + return setmetatable(result, mt) +end + +setmetatable( + semver, + { + __call = function(_, ...) + return new(...) + end + } +) +semver._VERSION = semver(semver._VERSION) + +return semver diff --git a/HelicopterRevival/stdlib/utils/vendor/serpent.lua b/HelicopterRevival/stdlib/utils/vendor/serpent.lua new file mode 100644 index 00000000..99848142 --- /dev/null +++ b/HelicopterRevival/stdlib/utils/vendor/serpent.lua @@ -0,0 +1,141 @@ +-- luacheck: ignore +local n, v = "serpent", "0.30" -- (C) 2012-17 Paul Kulchenko; MIT License +local c, d = "Paul Kulchenko", "Lua serializer and pretty printer" +local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'} +local badtype = {thread = true, userdata = true, cdata = true} +local getmetatable = debug and debug.getmetatable or getmetatable +local pairs = function(t) return next, t end -- avoid using __pairs in Lua 5.2+ +local keyword, globals, G = {}, {}, (_G or _ENV) +for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false', + 'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat', + 'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end +for k,v in pairs(G) do globals[v] = k end -- build func to name mapping +for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do + for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end + +local function s(t, opts) + local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum + local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge + local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge) + local maxlen, metatostring = tonumber(opts.maxlength), opts.metatostring + local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge) + local numformat = opts.numformat or "%.17g" + local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0 + local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)", + -- tostring(val) is needed because __tostring may return a non-string value + function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end + local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s)) + or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026 + or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end + local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end + local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal + and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end + local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r'] + local n = name == nil and '' or name + local plain = type(n) == "string" and n:match("^[%l%u_][%w_]*$") and not keyword[n] + local safe = plain and n or '['..safestr(n)..']' + return (path or '')..(plain and path and '.' or '')..safe, safe end + local alphanumsort = type(opts.sortkeys) == 'function' and opts.sortkeys or function(k, o, n) -- k=keys, o=originaltable, n=padding + local maxn, to = tonumber(n) or 12, {number = 'a', string = 'b'} + local function padnum(d) return ("%0"..tostring(maxn).."d"):format(tonumber(d)) end + table.sort(k, function(a,b) + -- sort numeric keys first: k[key] is not nil for numerical keys + return (k[a] ~= nil and 0 or to[type(a)] or 'z')..(tostring(a):gsub("%d+",padnum)) + < (k[b] ~= nil and 0 or to[type(b)] or 'z')..(tostring(b):gsub("%d+",padnum)) end) end + local function val2str(t, name, indent, insref, path, plainindex, level) + local ttype, level, mt = type(t), (level or 0), getmetatable(t) + local spath, sname = safename(path, name) + local tag = plainindex and + ((type(name) == "number") and '' or name..space..'='..space) or + (name ~= nil and sname..space..'='..space or '') + if seen[t] then -- already seen this element + sref[#sref+1] = spath..space..'='..space..seen[t] + return tag..'nil'..comment('ref', level) end + -- protect from those cases where __tostring may fail + if type(mt) == 'table' then + local to, tr = pcall(function() return mt.__tostring(t) end) + local so, sr = pcall(function() return mt.__serialize(t) end) + if (opts.metatostring ~= false and to or so) then -- knows how to serialize itself + seen[t] = insref or spath + t = so and sr or tr + ttype = type(t) + end -- new value falls through to be serialized + end + if ttype == "table" then + if level >= maxl then return tag..'{}'..comment('maxlvl', level) end + seen[t] = insref or spath + if next(t) == nil then return tag..'{}'..comment(t, level) end -- table empty + if maxlen and maxlen < 0 then return tag..'{}'..comment('maxlen', level) end + local maxn, o, out = math.min(#t, maxnum or #t), {}, {} + for key = 1, maxn do o[key] = key end + if not maxnum or #o < maxnum then + local n = #o -- n = n + 1; o[n] is much faster than o[#o+1] on large tables + for key in pairs(t) do if o[key] ~= key then n = n + 1; o[n] = key end end end + if maxnum and #o > maxnum then o[maxnum+1] = nil end + if opts.sortkeys and #o > maxn then alphanumsort(o, t, opts.sortkeys) end + local sparse = sparse and #o > maxn -- disable sparsness if only numeric keys (shorter output) + for n, key in ipairs(o) do + local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse + if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing + or opts.keyallow and not opts.keyallow[key] + or opts.keyignore and opts.keyignore[key] + or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types + or sparse and value == nil then -- skipping nils; do nothing + elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then + if not seen[key] and not globals[key] then + sref[#sref+1] = 'placeholder' + local sname = safename(iname, gensym(key)) -- iname is table for local variables + sref[#sref] = val2str(key,sname,indent,sname,iname,true) end + sref[#sref+1] = 'placeholder' + local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']' + sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path)) + else + out[#out+1] = val2str(value,key,indent,insref,seen[t],plainindex,level+1) + if maxlen then + maxlen = maxlen - #out[#out] + if maxlen < 0 then break end + end + end + end + local prefix = string.rep(indent or '', level) + local head = indent and '{\n'..prefix..indent or '{' + local body = table.concat(out, ','..(indent and '\n'..prefix..indent or space)) + local tail = indent and "\n"..prefix..'}' or '}' + return (custom and custom(tag,head,body,tail,level) or tag..head..body..tail)..comment(t, level) + elseif badtype[ttype] then + seen[t] = insref or spath + return tag..globerr(t, level) + elseif ttype == 'function' then + seen[t] = insref or spath + if opts.nocode then return tag.."function() end"..comment(t, level) end + local ok, res = pcall(string.dump, t) + local func = ok and "((loadstring or load)("..safestr(res)..",'@serialized'))"..comment(t, level) + return tag..(func or globerr(t, level)) + else return tag..safestr(t) end -- handle all other types + end + local sepr = indent and "\n" or ";"..space + local body = val2str(t, name, indent) -- this call also populates sref + local tail = #sref>1 and table.concat(sref, sepr)..sepr or '' + local warn = opts.comment and #sref>1 and space.."--[[incomplete output with shared/self-references skipped]]" or '' + return not name and body..warn or "do local "..body..sepr..tail.."return "..name..sepr.."end" +end + +local function deserialize(data, opts) + local env = (opts and opts.safe == false) and G + or setmetatable({}, { + __index = function(t,k) return t end, + __call = function(t,...) error("cannot call functions") end + }) + local f, res = (loadstring or load)('return '..data, nil, nil, env) + if not f then f, res = (loadstring or load)(data, nil, nil, env) end + if not f then return f, res end + if setfenv then setfenv(f, env) end + return pcall(f) +end + +local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end +return { _NAME = n, _COPYRIGHT = c, _DESCRIPTION = d, _VERSION = v, serialize = s, + load = deserialize, + dump = function(a, opts) return s(a, merge({name = '_', compact = true, sparse = true}, opts)) end, + line = function(a, opts) return s(a, merge({sortkeys = true, comment = true}, opts)) end, + block = function(a, opts) return s(a, merge({indent = ' ', sortkeys = true, comment = true}, opts)) end } diff --git a/HelicopterRevival/thumbnail.png b/HelicopterRevival/thumbnail.png new file mode 100644 index 00000000..d62f4355 Binary files /dev/null and b/HelicopterRevival/thumbnail.png differ diff --git a/HelicopterRevival_0.2.2.zip b/HelicopterRevival_0.2.2.zip deleted file mode 100644 index 450663d6..00000000 Binary files a/HelicopterRevival_0.2.2.zip and /dev/null differ diff --git a/InfiniteTech_1.0.2/changelog.txt b/InfiniteTech/changelog.txt similarity index 100% rename from InfiniteTech_1.0.2/changelog.txt rename to InfiniteTech/changelog.txt diff --git a/InfiniteTech_1.0.2/data.lua b/InfiniteTech/data.lua similarity index 100% rename from InfiniteTech_1.0.2/data.lua rename to InfiniteTech/data.lua diff --git a/InfiniteTech_1.0.2/info.json b/InfiniteTech/info.json similarity index 100% rename from InfiniteTech_1.0.2/info.json rename to InfiniteTech/info.json diff --git a/InfiniteTech_1.0.2/locale/en/locale.cfg b/InfiniteTech/locale/en/locale.cfg similarity index 100% rename from InfiniteTech_1.0.2/locale/en/locale.cfg rename to InfiniteTech/locale/en/locale.cfg diff --git a/InfiniteTech_1.0.2/modules/bot-battery.lua b/InfiniteTech/modules/bot-battery.lua similarity index 100% rename from InfiniteTech_1.0.2/modules/bot-battery.lua rename to InfiniteTech/modules/bot-battery.lua diff --git a/InfiniteTech_1.0.2/modules/bot-capacity.lua b/InfiniteTech/modules/bot-capacity.lua similarity index 100% rename from InfiniteTech_1.0.2/modules/bot-capacity.lua rename to InfiniteTech/modules/bot-capacity.lua diff --git a/InfiniteTech_1.0.2/modules/fixes.lua b/InfiniteTech/modules/fixes.lua similarity index 100% rename from InfiniteTech_1.0.2/modules/fixes.lua rename to InfiniteTech/modules/fixes.lua diff --git a/InfiniteTech_1.0.2/modules/inserter-capacity.lua b/InfiniteTech/modules/inserter-capacity.lua similarity index 100% rename from InfiniteTech_1.0.2/modules/inserter-capacity.lua rename to InfiniteTech/modules/inserter-capacity.lua diff --git a/InfiniteTech_1.0.2/settings.lua b/InfiniteTech/settings.lua similarity index 100% rename from InfiniteTech_1.0.2/settings.lua rename to InfiniteTech/settings.lua diff --git a/InfiniteTech_1.0.2/thumbnail.png b/InfiniteTech/thumbnail.png similarity index 100% rename from InfiniteTech_1.0.2/thumbnail.png rename to InfiniteTech/thumbnail.png diff --git a/JunkTrain3_1.1.0/changelog.txt b/JunkTrain3/changelog.txt similarity index 100% rename from JunkTrain3_1.1.0/changelog.txt rename to JunkTrain3/changelog.txt diff --git a/JunkTrain3_1.1.0/control.lua b/JunkTrain3/control.lua similarity index 100% rename from JunkTrain3_1.1.0/control.lua rename to JunkTrain3/control.lua diff --git a/JunkTrain3_1.1.0/data-updates.lua b/JunkTrain3/data-updates.lua similarity index 100% rename from JunkTrain3_1.1.0/data-updates.lua rename to JunkTrain3/data-updates.lua diff --git a/JunkTrain3_1.1.0/data.lua b/JunkTrain3/data.lua similarity index 100% rename from JunkTrain3_1.1.0/data.lua rename to JunkTrain3/data.lua diff --git a/JunkTrain3_1.1.0/graphics/cargo-wagon.png b/JunkTrain3/graphics/cargo-wagon.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/cargo-wagon.png rename to JunkTrain3/graphics/cargo-wagon.png diff --git a/JunkTrain3_1.1.0/graphics/cargo.png b/JunkTrain3/graphics/cargo.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/cargo.png rename to JunkTrain3/graphics/cargo.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates - Copy.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates - Copy.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates - Copy.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates - Copy.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/curved-rail-vertical-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties.png b/JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties.png rename to JunkTrain3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/rail-endings/hr-rail-endings-background.png b/JunkTrain3/graphics/entity/rail-endings/hr-rail-endings-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/rail-endings/hr-rail-endings-background.png rename to JunkTrain3/graphics/entity/rail-endings/hr-rail-endings-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/rail-endings/hr-rail-endings-metals.png b/JunkTrain3/graphics/entity/rail-endings/hr-rail-endings-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/rail-endings/hr-rail-endings-metals.png rename to JunkTrain3/graphics/entity/rail-endings/hr-rail-endings-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/rail-endings/rail-endings-background.png b/JunkTrain3/graphics/entity/rail-endings/rail-endings-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/rail-endings/rail-endings-background.png rename to JunkTrain3/graphics/entity/rail-endings/rail-endings-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/rail-endings/rail-endings-metals.png b/JunkTrain3/graphics/entity/rail-endings/rail-endings-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/rail-endings/rail-endings-metals.png rename to JunkTrain3/graphics/entity/rail-endings/rail-endings-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-horizontal-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-metals.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-metals.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-ties.png b/JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/hr-straight-rail-vertical-ties.png rename to JunkTrain3/graphics/entity/straight-rail/hr-straight-rail-vertical-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-horizontal-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-horizontal-ties.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-backplates-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-backplates-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-backplates-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-backplates-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-backplates.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-backplates.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-backplates.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-backplates.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-metals-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-metals-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-metals-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-metals-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-metals.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-metals.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-metals.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-metals.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-stone-path.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-stone-path.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-ties-remnants.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-ties-remnants.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-ties-remnants.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-ties-remnants.png diff --git a/JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-ties.png b/JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-ties.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/entity/straight-rail/straight-rail-vertical-ties.png rename to JunkTrain3/graphics/entity/straight-rail/straight-rail-vertical-ties.png diff --git a/JunkTrain3_1.1.0/graphics/icon_JunkTrain.png b/JunkTrain3/graphics/icon_JunkTrain.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/icon_JunkTrain.png rename to JunkTrain3/graphics/icon_JunkTrain.png diff --git a/JunkTrain3_1.1.0/graphics/icons/curved-rail.png b/JunkTrain3/graphics/icons/curved-rail.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/icons/curved-rail.png rename to JunkTrain3/graphics/icons/curved-rail.png diff --git a/JunkTrain3_1.1.0/graphics/icons/rail.png b/JunkTrain3/graphics/icons/rail.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/icons/rail.png rename to JunkTrain3/graphics/icons/rail.png diff --git a/JunkTrain3_1.1.0/graphics/junk-train-icon.png b/JunkTrain3/graphics/junk-train-icon.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/junk-train-icon.png rename to JunkTrain3/graphics/junk-train-icon.png diff --git a/JunkTrain3_1.1.0/graphics/junk-wagon-icon.png b/JunkTrain3/graphics/junk-wagon-icon.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/junk-wagon-icon.png rename to JunkTrain3/graphics/junk-wagon-icon.png diff --git a/JunkTrain3_1.1.0/graphics/loco1.png b/JunkTrain3/graphics/loco1.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/loco1.png rename to JunkTrain3/graphics/loco1.png diff --git a/JunkTrain3_1.1.0/graphics/loco2.png b/JunkTrain3/graphics/loco2.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/loco2.png rename to JunkTrain3/graphics/loco2.png diff --git a/JunkTrain3_1.1.0/graphics/nothing.png b/JunkTrain3/graphics/nothing.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/nothing.png rename to JunkTrain3/graphics/nothing.png diff --git a/JunkTrain3_1.1.0/graphics/tech-icon.png b/JunkTrain3/graphics/tech-icon.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/tech-icon.png rename to JunkTrain3/graphics/tech-icon.png diff --git a/JunkTrain3_1.1.0/graphics/train.png b/JunkTrain3/graphics/train.png similarity index 100% rename from JunkTrain3_1.1.0/graphics/train.png rename to JunkTrain3/graphics/train.png diff --git a/JunkTrain3_1.1.0/info.json b/JunkTrain3/info.json similarity index 100% rename from JunkTrain3_1.1.0/info.json rename to JunkTrain3/info.json diff --git a/JunkTrain3_1.1.0/locale/en/locale.cfg b/JunkTrain3/locale/en/locale.cfg similarity index 100% rename from JunkTrain3_1.1.0/locale/en/locale.cfg rename to JunkTrain3/locale/en/locale.cfg diff --git a/JunkTrain3_1.1.0/prototypes/entity.lua b/JunkTrain3/prototypes/entity.lua similarity index 100% rename from JunkTrain3_1.1.0/prototypes/entity.lua rename to JunkTrain3/prototypes/entity.lua diff --git a/JunkTrain3_1.1.0/prototypes/item.lua b/JunkTrain3/prototypes/item.lua similarity index 100% rename from JunkTrain3_1.1.0/prototypes/item.lua rename to JunkTrain3/prototypes/item.lua diff --git a/JunkTrain3_1.1.0/prototypes/recipe.lua b/JunkTrain3/prototypes/recipe.lua similarity index 100% rename from JunkTrain3_1.1.0/prototypes/recipe.lua rename to JunkTrain3/prototypes/recipe.lua diff --git a/JunkTrain3_1.1.0/prototypes/style.lua b/JunkTrain3/prototypes/style.lua similarity index 100% rename from JunkTrain3_1.1.0/prototypes/style.lua rename to JunkTrain3/prototypes/style.lua diff --git a/JunkTrain3_1.1.0/prototypes/technology.lua b/JunkTrain3/prototypes/technology.lua similarity index 100% rename from JunkTrain3_1.1.0/prototypes/technology.lua rename to JunkTrain3/prototypes/technology.lua diff --git a/JunkTrain3_1.1.0/thumbnail.png b/JunkTrain3/thumbnail.png similarity index 100% rename from JunkTrain3_1.1.0/thumbnail.png rename to JunkTrain3/thumbnail.png diff --git a/KS_Power_9.3.7/control.lua b/KS_Power/control.lua similarity index 100% rename from KS_Power_9.3.7/control.lua rename to KS_Power/control.lua diff --git a/KS_Power/data-final-fixes.lua b/KS_Power/data-final-fixes.lua new file mode 100644 index 00000000..bd84b869 --- /dev/null +++ b/KS_Power/data-final-fixes.lua @@ -0,0 +1,242 @@ +local fuel_values = { + --["crude-oil"] = "1.4MJ", + --["light-oil"] = "1.5MJ", + --["heavy-oil"] = "1MJ", + --["petroleum-gas"] = "1.5MJ", + --["diesel-fuel"] = "2MJ", + +-- coefficient *8.35 above natural; 8.35*x (kg/liquid , m3/gas) + + ["gas-hydrogen"] = "150kJ", -- 10,78 ΠœΠ”ΠΆ/ΠΌ3 + ["hydrogen"] = "150kJ", -- 10,78 ΠœΠ”ΠΆ/ΠΌ3 + ["deuterium"] = "150kJ", + ["gas-deuterium"] = "150kJ", + +["liquid-multi-phase-oil"] = "360kJ", --21,5MΠ”ΠΆ/ΠΊΠ³ +["crude-oil"] = "734kJ",-- 44 ΠœΠ”ΠΆ/ΠΊΠ³ + + ["heavy-oil"] = "660kJ", -- ΠœΠΠ—Π£Π’ 40 + ["liquid-naphtha"] = "660kJ", + + ["light-oil"] = "690kJ", + ["liquid-fuel"] = "1140kJ", + ["liquid-fuel-oil"] = "890kJ", --Gas oil 38MΠ”ΠΆ/ΠΊΠ³ + ["diesel"] = "2250kJ", -- 44,8-43,5 ΠœΠ”ΠΆ/ΠΊΠ³ + ["diesel-fuel"] = "2250kJ", --375kJ + ["gasoline"] = "1540kJ", -- 46 ΠœΠ”ΠΆ/ΠΊΠ³, 32,7 ΠœΠ”ΠΆ/Π»ΠΈΡ‚Ρ€ + ["kerosene"] = "1436kJ", -- 43 ΠœΠ”ΠΆ/ΠΊΠ³ + + ["petroleum-gas"] = "700kJ", + + + ["gas-natural-1"] = "560kJ", -- 33,5 ΠœΠ”ΠΆ/ΠΌ3 + ["gas-raw-1"] = "500kJ", + ["liquid-ngl"] = "780kJ", -- 46,8 ΠœΠ”ΠΆ/ΠΊΠ³ + + ["gas-methane"] = "558kJ", -- 33,41 ΠœΠ”ΠΆ/ΠΌ3 + ["gas-ethane"] = "1000kJ", -- 59,85 ΠœΠ”ΠΆ/ΠΌ3 + ["gas-butane"] = "1900kJ", -- 113,81 ΠœΠ”ΠΆ/ΠΌ3 + + ["gas-propene"] = "760kJ", -- 45,6 ΠœΠ”ΠΆ/ΠΌ3 + ["gas-ethylene"] = "800kJ", -- 48 МдТ/ΠΌ3 + ["gas-benzene"] = "2420kJ", -- 40.45 ΠœΠ”ΠΆ/ΠΊΠ³ -- Π‘Π•ΠΠ—ΠžΠ› + + ["gas-chlor-methane"] = "432kJ", + + ["gas-butadiene"] = "1896kJ", -- butilene 113,51 + ["liquid-ethylbenzene"] = "2616kJ", + ["liquid-styrene"] = "2600kJ", --42,6 ΠœΠ”ΠΆ/ΠΊΠ³ + ["liquid-toluene"] = "2616kJ", --156,71 МдТ/ΠΌ3 + ["liquid-phenol"] = "1716kJ", --32.24ΠœΠ”ΠΆ/ΠΊΠ³ + + + ["acetylene"] = "936kJ", -- 56,04 ΠœΠ”ΠΆ/ΠΌ3 + ["liquid-polyethylene"] = "1796kJ", --47,2 ΠœΠ”ΠΆ/ΠΊΠ³ + + ["liquid-resin"] = "1896kJ", --44,7 ΠœΠ”ΠΆ/ΠΊΠ³ + ["liquid-rubber-masterbatch"] = "1850kJ", + ["liquid-rubber-pre"] = "2150kJ", --33,52 ΠœΠ”ΠΆ/ΠΊΠ³ + ["liquid-rubber"] = "2450kJ", + ["liquid-plastic"] = "1920kJ", --41,87 ΠœΠ”ΠΆ/ΠΊΠ³ + +["gas-synthesis"] = "240kJ", -- 11,5 МдТ/ΠΌ3 +["gas-residual"] = "700kJ", -- 42 МдТ/ΠΌ3 + + ["gas-methanol"] = "360kJ", -- 21,1-22 ΠœΠ”ΠΆ/ΠΊΠ³ + ["methanol"] = "360kJ", -- 21,1-22 ΠœΠ”ΠΆ/ΠΊΠ³ + ["gas-ethanol"] = "510kJ", --30,6 ΠœΠ”ΠΆ/ΠΊΠ³ + ["gas-acetone"] = "524kJ", -- 31,4 ΠœΠ”ΠΆ/ΠΊΠ³ + ["coal-gas"] = "292kJ", -- 17,5 МдТ/ΠΌ3 + + +["gas-chloroethane"] = "155kJ", -- 9,850 ΠΊΠ”ΠΆ/ΠΊΠ³ + +["gas-hydrogen-cyanide"] = "410kJ", --24,53 Π­Π½Ρ‚Π°Π»ΡŒΠΏΠΈΡ сгорания +["gas-nitrous-oxide"] = "500kJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся - ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ° странная с зСлСнью Ρ…Π»ΠΎΡ€Π° +["gas-vinyl-acetylene"] = "550kJ", --33,04 = 44 ΠœΠ”ΠΆ/ΠΊΠ³ 1198,1 ΠΊΠ”ΠΆ/моль. +["gas-vinyl-chloride"] = "310kJ", --18,1 Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся 1198,1 ΠΊΠ”ΠΆ/моль. 62,498 Π³/моль 18,1 ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-acetone-cyanohydrin"] = "300kJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся +["liquid-acrylonitrile"] = "550kJ", --33,21ΠœΠ”ΠΆ/ΠΊΠ³ Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся Π’Π΅ΠΏΠ»ΠΎΡ‚Π° сгорания стирола 43,64ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-dichlorobutene"] = "500kJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся + + +["liquid-methyl-methacrylate"] = "450kJ", -- 25,52 ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-cellulose-acetate"] = "310kJ", -- 18,75 ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-acetic-anhydride"] = "255kJ", -- 15,3 ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-raw-vegetable-oil"] = "1600kJ", -- 30 ΠœΠ”ΠΆ/ΠΊΠ³ +["liquid-vegetable-oil"] = "2100kJ", -- 39,6 ΠœΠ”ΠΆ/ΠΊΠ³ + + +["gas-enriched-hydrogen-sulfide"] = "364kJ", -- Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся ΠΊΠ°ΠΊ сСроводород + + +["gas-allylchlorid"] = "360kJ", -- 22500 +["liquid-raw-fish-oil"] = "1400kJ", --26025 ΠΊΠ”ΠΆ/ΠΊΠ³) +["liquid-fish-oil"] = "1900kJ", --36025 ΠΊΠ”ΠΆ/ΠΊΠ³ +["gas-epichlorohydrin"] = "325kJ", -- 18940 kj/kg +["liquid-glycerol"] = "310kJ", -- 17957 kj/kg +["liquid-bisphenol-a"] = "505kJ", -- 31000 +["gas-ethylene-oxide"] = "430kJ", -- 27649 kJ/kg +["liquid-ethylene-carbonate"] = "250kJ", -- 14900 +["gas-urea"] = "167kJ", --10550) +["gas-melamine"] = "262kJ", -- 15670 +["liquid-tetraethyllead"] = "335kJ", -- 19500 + + + + + + + + ["gas-formaldehyde"] = "280kJ", --17,26 ΠœΠ”ΠΆ/ΠΊΠ³ + + ["nitroglycerin"] = "730kJ", --13,5 + +["gas-methylamine"] = "575kJ", --34,900 +["gas-dimethylamine"] = "620kJ", --38,800 +["gas-dimethylhydrazine"] = "550kJ", --33,000 + + ["gas-hydrazine"] = "760kJ", --fuel_value = "380kJ", 14644 ΠΊΠ”ΠΆ/ΠΊΠ³ + + ["gas-ammonia"] = "310kJ", --18,6 МдТ/ΠΌ3 + ["gas-hydrogen-sulfide"] = "364kJ", --21,75 МдТ/ΠΌ3 + + + ["sour-gas"] = "304kJ", + ["gas-acid"] = "304kJ", + + + ["combustion-mixture1"] = "600kJ", + ["combustion-mixture2"] = "600kJ", + ["diborane"] = "600kJ", + ["refsyngas"] = "600kJ", + ["xylenol"] = "600kJ", + + + ["solid-paper"] = "0.8MJ", + ["wooden-board"] = "1MJ", + ["phenolic-board"] = "4MJ", + ["resin"] = "3.8MJ", + ["plastic-bar"] = "5MJ", + ["rubber"] = "5MJ" + + +} + +local emissions = { + ["liquid-multi-phase-oil"] = 15, + ["crude-oil"] = 10, + + ["light-oil"] = 2, + + ["heavy-oil"] = 3, + ["liquid-fuel-oil"] = 1.9, + ["petroleum-gas"] = 1, + + + ["diesel-fuel"] = 1.5, + + ["gas-hydrogen"] = -2, + + ["liquid-fuel-oil"] = 1.2, + + ["gas-methane"] = 1.1, + ["gas-ethane"] = 1.5, + ["gas-butane"] = 1.8, + + ["gas-residual"] = 4.5, + + ["liquid-naphtha"] = 3, + ["gas-propene"] = 5, + + ["gas-hydrogen"] = 0.1, + ["deuterium"] = 0.1, + ["gas-deuterium"] = 0.1, + ["gas-hydrazine"] = 0.2, + + ["sour-gas"] = 7, + ["gas-acid"] = 7, + + ["gas-synthesis"] = 0.8, + ["gas-ethylene"] = 2.8, + ["gas-butadiene"] = 3, + + ["gas-benzene"] = 6.5, + ["liquid-phenol"] = 6.5, + ["liquid-toluene"] = 6.5, + + + ["gas-ethanol"] = 0.7, + ["liquid-ngl"] = 1.2, + ["liquid-resin"] = 6.5, + ["liquid-rubber-masterbatch"] = 7, + ["liquid-rubber-pre"] = 9, + ["liquid-rubber"] = 15, + ["liquid-polyethylene"] = 6.5, + ["liquid-plastic"] = 8, + + ["wooden-board"] = 1.1, + ["phenolic-board"] = 4.9, + ["resin"] = 7, + ["plastic-bar"] = 10, + ["rubber"] = 15 + +} + +local parse_energy = function(energy) + local ending = energy:sub(energy:len()) + if not (ending == "J" or ending == "W") then + error(ending.. " is not a valid unit of energy") + end + local magnitude = energy:sub(energy:len() - 1, energy:len() - 1) + local multiplier = 1 + if type(magnitude) == "number" then + return tonumber(energy:sub(1, energy:len()-1)) + end + local char = { + k = 1000, + K = 1000, + M = 1000000, + G = 1000000000, + T = 1000000000000, + P = 1000000000000000, + E = 1000000000000000000, + Z = 1000000000000000000000, + Y = 1000000000000000000000000 + } + multiplier = char[magnitude] + if not multiplier then error(magnitude.. " is not valid magnitude") end + return tonumber(energy:sub(1, energy:len()-2)) * multiplier +end + +local names = {} + +for k, fluid in pairs (data.raw.fluid) do + --if not fluid.fuel_value then + fluid.fuel_value = nil + fluid.fuel_value = fuel_values[fluid.name] + --end + --if not fluid.emissions_multiplier then + fluid.emissions_multiplier = emissions[fluid.name] + --end +end \ No newline at end of file diff --git a/KS_Power_9.3.7/data.lua b/KS_Power/data.lua similarity index 100% rename from KS_Power_9.3.7/data.lua rename to KS_Power/data.lua diff --git a/KS_Power_9.3.7/graphics/dg_h_sheet.png b/KS_Power/graphics/dg_h_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/dg_h_sheet.png rename to KS_Power/graphics/dg_h_sheet.png diff --git a/KS_Power_9.3.7/graphics/dg_v_sheet.png b/KS_Power/graphics/dg_v_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/dg_v_sheet.png rename to KS_Power/graphics/dg_v_sheet.png diff --git a/KS_Power_9.3.7/graphics/diesel-fuel-32.png b/KS_Power/graphics/diesel-fuel-32.png similarity index 100% rename from KS_Power_9.3.7/graphics/diesel-fuel-32.png rename to KS_Power/graphics/diesel-fuel-32.png diff --git a/KS_Power_9.3.7/graphics/diesel-fuel-recipe.png b/KS_Power/graphics/diesel-fuel-recipe.png similarity index 100% rename from KS_Power_9.3.7/graphics/diesel-fuel-recipe.png rename to KS_Power/graphics/diesel-fuel-recipe.png diff --git a/KS_Power_9.3.7/graphics/diesel-fuel.png b/KS_Power/graphics/diesel-fuel.png similarity index 100% rename from KS_Power_9.3.7/graphics/diesel-fuel.png rename to KS_Power/graphics/diesel-fuel.png diff --git a/KS_Power_9.3.7/graphics/diesel-generator-icon.png b/KS_Power/graphics/diesel-generator-icon.png similarity index 100% rename from KS_Power_9.3.7/graphics/diesel-generator-icon.png rename to KS_Power/graphics/diesel-generator-icon.png diff --git a/KS_Power_9.3.7/graphics/diesel-generator-t1.png b/KS_Power/graphics/diesel-generator-t1.png similarity index 100% rename from KS_Power_9.3.7/graphics/diesel-generator-t1.png rename to KS_Power/graphics/diesel-generator-t1.png diff --git a/KS_Power_9.3.7/graphics/icons/blank.png b/KS_Power/graphics/icons/blank.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/blank.png rename to KS_Power/graphics/icons/blank.png diff --git a/KS_Power_9.3.7/graphics/icons/burn-crude-oil.png b/KS_Power/graphics/icons/burn-crude-oil.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/burn-crude-oil.png rename to KS_Power/graphics/icons/burn-crude-oil.png diff --git a/KS_Power_9.3.7/graphics/icons/burn-heavy-oil.png b/KS_Power/graphics/icons/burn-heavy-oil.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/burn-heavy-oil.png rename to KS_Power/graphics/icons/burn-heavy-oil.png diff --git a/KS_Power_9.3.7/graphics/icons/burn-light-oil.png b/KS_Power/graphics/icons/burn-light-oil.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/burn-light-oil.png rename to KS_Power/graphics/icons/burn-light-oil.png diff --git a/KS_Power_9.3.7/graphics/icons/fire-icon-128.png b/KS_Power/graphics/icons/fire-icon-128.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/fire-icon-128.png rename to KS_Power/graphics/icons/fire-icon-128.png diff --git a/KS_Power_9.3.7/graphics/icons/fire-icon-big.png b/KS_Power/graphics/icons/fire-icon-big.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/fire-icon-big.png rename to KS_Power/graphics/icons/fire-icon-big.png diff --git a/KS_Power_9.3.7/graphics/icons/fire-icon-old.png b/KS_Power/graphics/icons/fire-icon-old.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/fire-icon-old.png rename to KS_Power/graphics/icons/fire-icon-old.png diff --git a/KS_Power_9.3.7/graphics/icons/fire-icon.png b/KS_Power/graphics/icons/fire-icon.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/fire-icon.png rename to KS_Power/graphics/icons/fire-icon.png diff --git a/KS_Power_9.3.7/graphics/icons/fire.png b/KS_Power/graphics/icons/fire.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/fire.png rename to KS_Power/graphics/icons/fire.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler-1.png b/KS_Power/graphics/icons/oil-steam-boiler-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler-1.png rename to KS_Power/graphics/icons/oil-steam-boiler-1.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler-2.png b/KS_Power/graphics/icons/oil-steam-boiler-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler-2.png rename to KS_Power/graphics/icons/oil-steam-boiler-2.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler-3.png b/KS_Power/graphics/icons/oil-steam-boiler-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler-3.png rename to KS_Power/graphics/icons/oil-steam-boiler-3.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler-4.png b/KS_Power/graphics/icons/oil-steam-boiler-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler-4.png rename to KS_Power/graphics/icons/oil-steam-boiler-4.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler-5.png b/KS_Power/graphics/icons/oil-steam-boiler-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler-5.png rename to KS_Power/graphics/icons/oil-steam-boiler-5.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler.png b/KS_Power/graphics/icons/oil-steam-boiler.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler.png rename to KS_Power/graphics/icons/oil-steam-boiler.png diff --git a/KS_Power_9.3.7/graphics/icons/oil-steam-boiler32.png b/KS_Power/graphics/icons/oil-steam-boiler32.png similarity index 100% rename from KS_Power_9.3.7/graphics/icons/oil-steam-boiler32.png rename to KS_Power/graphics/icons/oil-steam-boiler32.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet-1.png b/KS_Power/graphics/ob_e_sheet-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet-1.png rename to KS_Power/graphics/ob_e_sheet-1.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet-2.png b/KS_Power/graphics/ob_e_sheet-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet-2.png rename to KS_Power/graphics/ob_e_sheet-2.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet-3.png b/KS_Power/graphics/ob_e_sheet-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet-3.png rename to KS_Power/graphics/ob_e_sheet-3.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet-4.png b/KS_Power/graphics/ob_e_sheet-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet-4.png rename to KS_Power/graphics/ob_e_sheet-4.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet-5.png b/KS_Power/graphics/ob_e_sheet-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet-5.png rename to KS_Power/graphics/ob_e_sheet-5.png diff --git a/KS_Power_9.3.7/graphics/ob_e_sheet.png b/KS_Power/graphics/ob_e_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_e_sheet.png rename to KS_Power/graphics/ob_e_sheet.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet-1.png b/KS_Power/graphics/ob_n_sheet-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet-1.png rename to KS_Power/graphics/ob_n_sheet-1.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet-2.png b/KS_Power/graphics/ob_n_sheet-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet-2.png rename to KS_Power/graphics/ob_n_sheet-2.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet-3.png b/KS_Power/graphics/ob_n_sheet-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet-3.png rename to KS_Power/graphics/ob_n_sheet-3.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet-4.png b/KS_Power/graphics/ob_n_sheet-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet-4.png rename to KS_Power/graphics/ob_n_sheet-4.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet-5.png b/KS_Power/graphics/ob_n_sheet-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet-5.png rename to KS_Power/graphics/ob_n_sheet-5.png diff --git a/KS_Power_9.3.7/graphics/ob_n_sheet.png b/KS_Power/graphics/ob_n_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_n_sheet.png rename to KS_Power/graphics/ob_n_sheet.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet-1.png b/KS_Power/graphics/ob_s_sheet-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet-1.png rename to KS_Power/graphics/ob_s_sheet-1.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet-2.png b/KS_Power/graphics/ob_s_sheet-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet-2.png rename to KS_Power/graphics/ob_s_sheet-2.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet-3.png b/KS_Power/graphics/ob_s_sheet-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet-3.png rename to KS_Power/graphics/ob_s_sheet-3.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet-4.png b/KS_Power/graphics/ob_s_sheet-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet-4.png rename to KS_Power/graphics/ob_s_sheet-4.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet-5.png b/KS_Power/graphics/ob_s_sheet-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet-5.png rename to KS_Power/graphics/ob_s_sheet-5.png diff --git a/KS_Power_9.3.7/graphics/ob_s_sheet.png b/KS_Power/graphics/ob_s_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_s_sheet.png rename to KS_Power/graphics/ob_s_sheet.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet-1.png b/KS_Power/graphics/ob_w_sheet-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet-1.png rename to KS_Power/graphics/ob_w_sheet-1.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet-2.png b/KS_Power/graphics/ob_w_sheet-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet-2.png rename to KS_Power/graphics/ob_w_sheet-2.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet-3.png b/KS_Power/graphics/ob_w_sheet-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet-3.png rename to KS_Power/graphics/ob_w_sheet-3.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet-4.png b/KS_Power/graphics/ob_w_sheet-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet-4.png rename to KS_Power/graphics/ob_w_sheet-4.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet-5.png b/KS_Power/graphics/ob_w_sheet-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet-5.png rename to KS_Power/graphics/ob_w_sheet-5.png diff --git a/KS_Power_9.3.7/graphics/ob_w_sheet.png b/KS_Power/graphics/ob_w_sheet.png similarity index 100% rename from KS_Power_9.3.7/graphics/ob_w_sheet.png rename to KS_Power/graphics/ob_w_sheet.png diff --git a/KS_Power_9.3.7/graphics/oil-boiler-tech2.png b/KS_Power/graphics/oil-boiler-tech2.png similarity index 100% rename from KS_Power_9.3.7/graphics/oil-boiler-tech2.png rename to KS_Power/graphics/oil-boiler-tech2.png diff --git a/KS_Power_9.3.7/graphics/technology/oil-boiler-tech-1.png b/KS_Power/graphics/technology/oil-boiler-tech-1.png similarity index 100% rename from KS_Power_9.3.7/graphics/technology/oil-boiler-tech-1.png rename to KS_Power/graphics/technology/oil-boiler-tech-1.png diff --git a/KS_Power_9.3.7/graphics/technology/oil-boiler-tech-2.png b/KS_Power/graphics/technology/oil-boiler-tech-2.png similarity index 100% rename from KS_Power_9.3.7/graphics/technology/oil-boiler-tech-2.png rename to KS_Power/graphics/technology/oil-boiler-tech-2.png diff --git a/KS_Power_9.3.7/graphics/technology/oil-boiler-tech-3.png b/KS_Power/graphics/technology/oil-boiler-tech-3.png similarity index 100% rename from KS_Power_9.3.7/graphics/technology/oil-boiler-tech-3.png rename to KS_Power/graphics/technology/oil-boiler-tech-3.png diff --git a/KS_Power_9.3.7/graphics/technology/oil-boiler-tech-4.png b/KS_Power/graphics/technology/oil-boiler-tech-4.png similarity index 100% rename from KS_Power_9.3.7/graphics/technology/oil-boiler-tech-4.png rename to KS_Power/graphics/technology/oil-boiler-tech-4.png diff --git a/KS_Power_9.3.7/graphics/technology/oil-boiler-tech-5.png b/KS_Power/graphics/technology/oil-boiler-tech-5.png similarity index 100% rename from KS_Power_9.3.7/graphics/technology/oil-boiler-tech-5.png rename to KS_Power/graphics/technology/oil-boiler-tech-5.png diff --git a/KS_Power_9.3.7/info.json b/KS_Power/info.json similarity index 100% rename from KS_Power_9.3.7/info.json rename to KS_Power/info.json diff --git a/KS_Power_9.3.7/locale/en/big-burner-generator.cfg b/KS_Power/locale/en/big-burner-generator.cfg similarity index 100% rename from KS_Power_9.3.7/locale/en/big-burner-generator.cfg rename to KS_Power/locale/en/big-burner-generator.cfg diff --git a/KS_Power_9.3.7/locale/en/boiler.cfg b/KS_Power/locale/en/boiler.cfg similarity index 100% rename from KS_Power_9.3.7/locale/en/boiler.cfg rename to KS_Power/locale/en/boiler.cfg diff --git a/KS_Power_9.3.7/locale/en/burner-gen.cfg b/KS_Power/locale/en/burner-gen.cfg similarity index 100% rename from KS_Power_9.3.7/locale/en/burner-gen.cfg rename to KS_Power/locale/en/burner-gen.cfg diff --git a/KS_Power_9.3.7/locale/en/diesel-gen.cfg b/KS_Power/locale/en/diesel-gen.cfg similarity index 100% rename from KS_Power_9.3.7/locale/en/diesel-gen.cfg rename to KS_Power/locale/en/diesel-gen.cfg diff --git a/KS_Power_9.3.7/locale/en/turbine.cfg b/KS_Power/locale/en/turbine.cfg similarity index 100% rename from KS_Power_9.3.7/locale/en/turbine.cfg rename to KS_Power/locale/en/turbine.cfg diff --git a/KS_Power_9.3.7/locale/ru/boiler.cfg b/KS_Power/locale/ru/boiler.cfg similarity index 100% rename from KS_Power_9.3.7/locale/ru/boiler.cfg rename to KS_Power/locale/ru/boiler.cfg diff --git a/KS_Power_9.3.7/locale/ru/diesel-gen.cfg b/KS_Power/locale/ru/diesel-gen.cfg similarity index 100% rename from KS_Power_9.3.7/locale/ru/diesel-gen.cfg rename to KS_Power/locale/ru/diesel-gen.cfg diff --git a/KS_Power_9.3.7/prototypes/diesel-generator.lua b/KS_Power/prototypes/diesel-generator.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/diesel-generator.lua rename to KS_Power/prototypes/diesel-generator.lua diff --git a/KS_Power_9.3.7/prototypes/entity/oil-boilers.lua b/KS_Power/prototypes/entity/oil-boilers.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/entity/oil-boilers.lua rename to KS_Power/prototypes/entity/oil-boilers.lua diff --git a/KS_Power_9.3.7/prototypes/item/oil-boilers.lua b/KS_Power/prototypes/item/oil-boilers.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/item/oil-boilers.lua rename to KS_Power/prototypes/item/oil-boilers.lua diff --git a/KS_Power_9.3.7/prototypes/oil-boiler.lua b/KS_Power/prototypes/oil-boiler.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/oil-boiler.lua rename to KS_Power/prototypes/oil-boiler.lua diff --git a/KS_Power_9.3.7/prototypes/recipe/oil-boilers.lua b/KS_Power/prototypes/recipe/oil-boilers.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/recipe/oil-boilers.lua rename to KS_Power/prototypes/recipe/oil-boilers.lua diff --git a/KS_Power_9.3.7/prototypes/technology/oil-boilers.lua b/KS_Power/prototypes/technology/oil-boilers.lua similarity index 100% rename from KS_Power_9.3.7/prototypes/technology/oil-boilers.lua rename to KS_Power/prototypes/technology/oil-boilers.lua diff --git a/KS_Power_9.3.7/scripts/turbine.lua b/KS_Power/scripts/turbine.lua similarity index 100% rename from KS_Power_9.3.7/scripts/turbine.lua rename to KS_Power/scripts/turbine.lua diff --git a/KS_Power_9.3.7/sounds/diesel-loop-1.ogg b/KS_Power/sounds/diesel-loop-1.ogg similarity index 100% rename from KS_Power_9.3.7/sounds/diesel-loop-1.ogg rename to KS_Power/sounds/diesel-loop-1.ogg diff --git a/KS_Power_9.3.7/sounds/diesel-loop-2.ogg b/KS_Power/sounds/diesel-loop-2.ogg similarity index 100% rename from KS_Power_9.3.7/sounds/diesel-loop-2.ogg rename to KS_Power/sounds/diesel-loop-2.ogg diff --git a/KS_Power_9.3.7/sounds/diesel-loop-3.ogg b/KS_Power/sounds/diesel-loop-3.ogg similarity index 100% rename from KS_Power_9.3.7/sounds/diesel-loop-3.ogg rename to KS_Power/sounds/diesel-loop-3.ogg diff --git a/KS_Power_9.3.7/sounds/oil-boiler-loop-2.ogg b/KS_Power/sounds/oil-boiler-loop-2.ogg similarity index 100% rename from KS_Power_9.3.7/sounds/oil-boiler-loop-2.ogg rename to KS_Power/sounds/oil-boiler-loop-2.ogg diff --git a/KS_Power_9.3.7/sounds/steam-offlet.ogg b/KS_Power/sounds/steam-offlet.ogg similarity index 100% rename from KS_Power_9.3.7/sounds/steam-offlet.ogg rename to KS_Power/sounds/steam-offlet.ogg diff --git a/KS_Power_9.3.7/thumbnail.png b/KS_Power/thumbnail.png similarity index 100% rename from KS_Power_9.3.7/thumbnail.png rename to KS_Power/thumbnail.png diff --git a/KS_Power_9.3.7/data-final-fixes.lua b/KS_Power_9.3.7/data-final-fixes.lua deleted file mode 100644 index fd0478a7..00000000 --- a/KS_Power_9.3.7/data-final-fixes.lua +++ /dev/null @@ -1,242 +0,0 @@ -local fuel_values = { - --["crude-oil"] = "1.4MJ", - --["light-oil"] = "1.5MJ", - --["heavy-oil"] = "1MJ", - --["petroleum-gas"] = "1.5MJ", - --["diesel-fuel"] = "2MJ", - --- coefficient *8.35 above natural; 8.35*x (kg/liquid , m3/gas) - - ["gas-hydrogen"] = "150KJ", -- 10,78 ΠœΠ”ΠΆ/ΠΌ3 - ["hydrogen"] = "150KJ", -- 10,78 ΠœΠ”ΠΆ/ΠΌ3 - ["deuterium"] = "150KJ", - ["gas-deuterium"] = "150KJ", - -["liquid-multi-phase-oil"] = "360KJ", --21,5MΠ”ΠΆ/ΠΊΠ³ -["crude-oil"] = "734KJ",-- 44 ΠœΠ”ΠΆ/ΠΊΠ³ - - ["heavy-oil"] = "660KJ", -- ΠœΠΠ—Π£Π’ 40 - ["liquid-naphtha"] = "660KJ", - - ["light-oil"] = "690KJ", - ["liquid-fuel"] = "1140KJ", - ["liquid-fuel-oil"] = "890KJ", --Gas oil 38MΠ”ΠΆ/ΠΊΠ³ - ["diesel"] = "2250KJ", -- 44,8-43,5 ΠœΠ”ΠΆ/ΠΊΠ³ - ["diesel-fuel"] = "2250KJ", --375KJ - ["gasoline"] = "1540KJ", -- 46 ΠœΠ”ΠΆ/ΠΊΠ³, 32,7 ΠœΠ”ΠΆ/Π»ΠΈΡ‚Ρ€ - ["kerosene"] = "1436KJ", -- 43 ΠœΠ”ΠΆ/ΠΊΠ³ - - ["petroleum-gas"] = "700KJ", - - - ["gas-natural-1"] = "560KJ", -- 33,5 ΠœΠ”ΠΆ/ΠΌ3 - ["gas-raw-1"] = "500KJ", - ["liquid-ngl"] = "780KJ", -- 46,8 ΠœΠ”ΠΆ/ΠΊΠ³ - - ["gas-methane"] = "558KJ", -- 33,41 ΠœΠ”ΠΆ/ΠΌ3 - ["gas-ethane"] = "1000KJ", -- 59,85 ΠœΠ”ΠΆ/ΠΌ3 - ["gas-butane"] = "1900KJ", -- 113,81 ΠœΠ”ΠΆ/ΠΌ3 - - ["gas-propene"] = "760KJ", -- 45,6 ΠœΠ”ΠΆ/ΠΌ3 - ["gas-ethylene"] = "800KJ", -- 48 МдТ/ΠΌ3 - ["gas-benzene"] = "2420KJ", -- 40.45 ΠœΠ”ΠΆ/ΠΊΠ³ -- Π‘Π•ΠΠ—ΠžΠ› - - ["gas-chlor-methane"] = "432KJ", - - ["gas-butadiene"] = "1896KJ", -- butilene 113,51 - ["liquid-ethylbenzene"] = "2616KJ", - ["liquid-styrene"] = "2600KJ", --42,6 ΠœΠ”ΠΆ/ΠΊΠ³ - ["liquid-toluene"] = "2616KJ", --156,71 МдТ/ΠΌ3 - ["liquid-phenol"] = "1716KJ", --32.24ΠœΠ”ΠΆ/ΠΊΠ³ - - - ["acetylene"] = "936KJ", -- 56,04 ΠœΠ”ΠΆ/ΠΌ3 - ["liquid-polyethylene"] = "1796KJ", --47,2 ΠœΠ”ΠΆ/ΠΊΠ³ - - ["liquid-resin"] = "1896KJ", --44,7 ΠœΠ”ΠΆ/ΠΊΠ³ - ["liquid-rubber-masterbatch"] = "1850KJ", - ["liquid-rubber-pre"] = "2150KJ", --33,52 ΠœΠ”ΠΆ/ΠΊΠ³ - ["liquid-rubber"] = "2450KJ", - ["liquid-plastic"] = "1920KJ", --41,87 ΠœΠ”ΠΆ/ΠΊΠ³ - -["gas-synthesis"] = "240KJ", -- 11,5 МдТ/ΠΌ3 -["gas-residual"] = "700KJ", -- 42 МдТ/ΠΌ3 - - ["gas-methanol"] = "360KJ", -- 21,1-22 ΠœΠ”ΠΆ/ΠΊΠ³ - ["methanol"] = "360KJ", -- 21,1-22 ΠœΠ”ΠΆ/ΠΊΠ³ - ["gas-ethanol"] = "510KJ", --30,6 ΠœΠ”ΠΆ/ΠΊΠ³ - ["gas-acetone"] = "524KJ", -- 31,4 ΠœΠ”ΠΆ/ΠΊΠ³ - ["coal-gas"] = "292KJ", -- 17,5 МдТ/ΠΌ3 - - -["gas-chloroethane"] = "155KJ", -- 9,850 ΠΊΠ”ΠΆ/ΠΊΠ³ - -["gas-hydrogen-cyanide"] = "410KJ", --24,53 Π­Π½Ρ‚Π°Π»ΡŒΠΏΠΈΡ сгорания -["gas-nitrous-oxide"] = "500KJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся - ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ° странная с зСлСнью Ρ…Π»ΠΎΡ€Π° -["gas-vinyl-acetylene"] = "550KJ", --33,04 = 44 ΠœΠ”ΠΆ/ΠΊΠ³ 1198,1 ΠΊΠ”ΠΆ/моль. -["gas-vinyl-chloride"] = "310KJ", --18,1 Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся 1198,1 ΠΊΠ”ΠΆ/моль. 62,498 Π³/моль 18,1 ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-acetone-cyanohydrin"] = "300KJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся -["liquid-acrylonitrile"] = "550KJ", --33,21ΠœΠ”ΠΆ/ΠΊΠ³ Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся Π’Π΅ΠΏΠ»ΠΎΡ‚Π° сгорания стирола 43,64ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-dichlorobutene"] = "500KJ", --Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся - - -["liquid-methyl-methacrylate"] = "450KJ", -- 25,52 ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-cellulose-acetate"] = "310KJ", -- 18,75 ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-acetic-anhydride"] = "255KJ", -- 15,3 ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-raw-vegetable-oil"] = "1600KJ", -- 30 ΠœΠ”ΠΆ/ΠΊΠ³ -["liquid-vegetable-oil"] = "2100KJ", -- 39,6 ΠœΠ”ΠΆ/ΠΊΠ³ - - -["gas-enriched-hydrogen-sulfide"] = "364KJ", -- Π½Π΅ Π³ΠΎΡ€ΠΈΡ‚ Π½Π΅ выпускаСтся ΠΊΠ°ΠΊ сСроводород - - -["gas-allylchlorid"] = "360KJ", -- 22500 -["liquid-raw-fish-oil"] = "1400KJ", --26025 ΠΊΠ”ΠΆ/ΠΊΠ³) -["liquid-fish-oil"] = "1900KJ", --36025 ΠΊΠ”ΠΆ/ΠΊΠ³ -["gas-epichlorohydrin"] = "325KJ", -- 18940 kj/kg -["liquid-glycerol"] = "310KJ", -- 17957 kj/kg -["liquid-bisphenol-a"] = "505KJ", -- 31000 -["gas-ethylene-oxide"] = "430KJ", -- 27649 kJ/kg -["liquid-ethylene-carbonate"] = "250KJ", -- 14900 -["gas-urea"] = "167KJ", --10550) -["gas-melamine"] = "262KJ", -- 15670 -["liquid-tetraethyllead"] = "335KJ", -- 19500 - - - - - - - - ["gas-formaldehyde"] = "280KJ", --17,26 ΠœΠ”ΠΆ/ΠΊΠ³ - - ["nitroglycerin"] = "730KJ", --13,5 - -["gas-methylamine"] = "575KJ", --34,900 -["gas-dimethylamine"] = "620KJ", --38,800 -["gas-dimethylhydrazine"] = "550KJ", --33,000 - - ["gas-hydrazine"] = "760KJ", --fuel_value = "380KJ", 14644 ΠΊΠ”ΠΆ/ΠΊΠ³ - - ["gas-ammonia"] = "310KJ", --18,6 МдТ/ΠΌ3 - ["gas-hydrogen-sulfide"] = "364KJ", --21,75 МдТ/ΠΌ3 - - - ["sour-gas"] = "304KJ", - ["gas-acid"] = "304KJ", - - - ["combustion-mixture1"] = "600KJ", - ["combustion-mixture2"] = "600KJ", - ["diborane"] = "600KJ", - ["refsyngas"] = "600KJ", - ["xylenol"] = "600KJ", - - - ["solid-paper"] = "0.8MJ", - ["wooden-board"] = "1MJ", - ["phenolic-board"] = "4MJ", - ["resin"] = "3.8MJ", - ["plastic-bar"] = "5MJ", - ["rubber"] = "5MJ" - - -} - -local emissions = { - ["liquid-multi-phase-oil"] = 15, - ["crude-oil"] = 10, - - ["light-oil"] = 2, - - ["heavy-oil"] = 3, - ["liquid-fuel-oil"] = 1.9, - ["petroleum-gas"] = 1, - - - ["diesel-fuel"] = 1.5, - - ["gas-hydrogen"] = -2, - - ["liquid-fuel-oil"] = 1.2, - - ["gas-methane"] = 1.1, - ["gas-ethane"] = 1.5, - ["gas-butane"] = 1.8, - - ["gas-residual"] = 4.5, - - ["liquid-naphtha"] = 3, - ["gas-propene"] = 5, - - ["gas-hydrogen"] = 0.1, - ["deuterium"] = 0.1, - ["gas-deuterium"] = 0.1, - ["gas-hydrazine"] = 0.2, - - ["sour-gas"] = 7, - ["gas-acid"] = 7, - - ["gas-synthesis"] = 0.8, - ["gas-ethylene"] = 2.8, - ["gas-butadiene"] = 3, - - ["gas-benzene"] = 6.5, - ["liquid-phenol"] = 6.5, - ["liquid-toluene"] = 6.5, - - - ["gas-ethanol"] = 0.7, - ["liquid-ngl"] = 1.2, - ["liquid-resin"] = 6.5, - ["liquid-rubber-masterbatch"] = 7, - ["liquid-rubber-pre"] = 9, - ["liquid-rubber"] = 15, - ["liquid-polyethylene"] = 6.5, - ["liquid-plastic"] = 8, - - ["wooden-board"] = 1.1, - ["phenolic-board"] = 4.9, - ["resin"] = 7, - ["plastic-bar"] = 10, - ["rubber"] = 15 - -} - -local parse_energy = function(energy) - local ending = energy:sub(energy:len()) - if not (ending == "J" or ending == "W") then - error(ending.. " is not a valid unit of energy") - end - local magnitude = energy:sub(energy:len() - 1, energy:len() - 1) - local multiplier = 1 - if type(magnitude) == "number" then - return tonumber(energy:sub(1, energy:len()-1)) - end - local char = { - k = 1000, - K = 1000, - M = 1000000, - G = 1000000000, - T = 1000000000000, - P = 1000000000000000, - E = 1000000000000000000, - Z = 1000000000000000000000, - Y = 1000000000000000000000000 - } - multiplier = char[magnitude] - if not multiplier then error(magnitude.. " is not valid magnitude") end - return tonumber(energy:sub(1, energy:len()-2)) * multiplier -end - -local names = {} - -for k, fluid in pairs (data.raw.fluid) do - --if not fluid.fuel_value then - fluid.fuel_value = nil - fluid.fuel_value = fuel_values[fluid.name] - --end - --if not fluid.emissions_multiplier then - fluid.emissions_multiplier = emissions[fluid.name] - --end -end \ No newline at end of file diff --git a/KaoExtended_9.16.12/config.lua b/KaoExtended/config.lua similarity index 100% rename from KaoExtended_9.16.12/config.lua rename to KaoExtended/config.lua diff --git a/KaoExtended_9.16.12/data-final-fixes.lua b/KaoExtended/data-final-fixes.lua similarity index 100% rename from KaoExtended_9.16.12/data-final-fixes.lua rename to KaoExtended/data-final-fixes.lua diff --git a/KaoExtended_9.16.12/data-updates.lua b/KaoExtended/data-updates.lua similarity index 100% rename from KaoExtended_9.16.12/data-updates.lua rename to KaoExtended/data-updates.lua diff --git a/KaoExtended_9.16.12/data.lua b/KaoExtended/data.lua similarity index 100% rename from KaoExtended_9.16.12/data.lua rename to KaoExtended/data.lua diff --git a/KaoExtended_9.16.12/graphics/Manganese_Chrome_Sorting/chrome-sorting.png b/KaoExtended/graphics/Manganese_Chrome_Sorting/chrome-sorting.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Manganese_Chrome_Sorting/chrome-sorting.png rename to KaoExtended/graphics/Manganese_Chrome_Sorting/chrome-sorting.png diff --git a/KaoExtended_9.16.12/graphics/Manganese_Chrome_Sorting/manganese-sorting.png b/KaoExtended/graphics/Manganese_Chrome_Sorting/manganese-sorting.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Manganese_Chrome_Sorting/manganese-sorting.png rename to KaoExtended/graphics/Manganese_Chrome_Sorting/manganese-sorting.png diff --git a/KaoExtended_9.16.12/graphics/NickelCrystal.png b/KaoExtended/graphics/NickelCrystal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/NickelCrystal.png rename to KaoExtended/graphics/NickelCrystal.png diff --git a/KaoExtended_9.16.12/graphics/Platinum_Sorting/platinum-sorting.png b/KaoExtended/graphics/Platinum_Sorting/platinum-sorting.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Platinum_Sorting/platinum-sorting.png rename to KaoExtended/graphics/Platinum_Sorting/platinum-sorting.png diff --git a/KaoExtended_9.16.12/graphics/QuartzCrystal.png b/KaoExtended/graphics/QuartzCrystal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/QuartzCrystal.png rename to KaoExtended/graphics/QuartzCrystal.png diff --git a/KaoExtended_9.16.12/graphics/Temp/Frostfire_Crystal.png b/KaoExtended/graphics/Temp/Frostfire_Crystal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/Frostfire_Crystal.png rename to KaoExtended/graphics/Temp/Frostfire_Crystal.png diff --git a/KaoExtended_9.16.12/graphics/Temp/bauxite-ore.png b/KaoExtended/graphics/Temp/bauxite-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/bauxite-ore.png rename to KaoExtended/graphics/Temp/bauxite-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/coal.png b/KaoExtended/graphics/Temp/coal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/coal.png rename to KaoExtended/graphics/Temp/coal.png diff --git a/KaoExtended_9.16.12/graphics/Temp/cobalt-ore.png b/KaoExtended/graphics/Temp/cobalt-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/cobalt-ore.png rename to KaoExtended/graphics/Temp/cobalt-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/copper-ore.png b/KaoExtended/graphics/Temp/copper-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/copper-ore.png rename to KaoExtended/graphics/Temp/copper-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/express-splitter.png b/KaoExtended/graphics/Temp/express-splitter.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/express-splitter.png rename to KaoExtended/graphics/Temp/express-splitter.png diff --git a/KaoExtended_9.16.12/graphics/Temp/express-transport-belt.png b/KaoExtended/graphics/Temp/express-transport-belt.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/express-transport-belt.png rename to KaoExtended/graphics/Temp/express-transport-belt.png diff --git a/KaoExtended_9.16.12/graphics/Temp/fast-splitter.png b/KaoExtended/graphics/Temp/fast-splitter.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/fast-splitter.png rename to KaoExtended/graphics/Temp/fast-splitter.png diff --git a/KaoExtended_9.16.12/graphics/Temp/fast-transport-belt.png b/KaoExtended/graphics/Temp/fast-transport-belt.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/fast-transport-belt.png rename to KaoExtended/graphics/Temp/fast-transport-belt.png diff --git a/KaoExtended_9.16.12/graphics/Temp/gold-ore.png b/KaoExtended/graphics/Temp/gold-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/gold-ore.png rename to KaoExtended/graphics/Temp/gold-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/green-splitter.png b/KaoExtended/graphics/Temp/green-splitter.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/green-splitter.png rename to KaoExtended/graphics/Temp/green-splitter.png diff --git a/KaoExtended_9.16.12/graphics/Temp/green-transport-belt.png b/KaoExtended/graphics/Temp/green-transport-belt.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/green-transport-belt.png rename to KaoExtended/graphics/Temp/green-transport-belt.png diff --git a/KaoExtended_9.16.12/graphics/Temp/iron-ore.png b/KaoExtended/graphics/Temp/iron-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/iron-ore.png rename to KaoExtended/graphics/Temp/iron-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/lead-ore.png b/KaoExtended/graphics/Temp/lead-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/lead-ore.png rename to KaoExtended/graphics/Temp/lead-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/nickel-ore.png b/KaoExtended/graphics/Temp/nickel-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/nickel-ore.png rename to KaoExtended/graphics/Temp/nickel-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/prism.1.u.png b/KaoExtended/graphics/Temp/prism.1.u.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/prism.1.u.png rename to KaoExtended/graphics/Temp/prism.1.u.png diff --git a/KaoExtended_9.16.12/graphics/Temp/purple-splitter.png b/KaoExtended/graphics/Temp/purple-splitter.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/purple-splitter.png rename to KaoExtended/graphics/Temp/purple-splitter.png diff --git a/KaoExtended_9.16.12/graphics/Temp/purple-transport-belt.png b/KaoExtended/graphics/Temp/purple-transport-belt.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/purple-transport-belt.png rename to KaoExtended/graphics/Temp/purple-transport-belt.png diff --git a/KaoExtended_9.16.12/graphics/Temp/quartz.png b/KaoExtended/graphics/Temp/quartz.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/quartz.png rename to KaoExtended/graphics/Temp/quartz.png diff --git a/KaoExtended_9.16.12/graphics/Temp/rutile-ore.png b/KaoExtended/graphics/Temp/rutile-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/rutile-ore.png rename to KaoExtended/graphics/Temp/rutile-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/sat+50.txt b/KaoExtended/graphics/Temp/sat+50.txt similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/sat+50.txt rename to KaoExtended/graphics/Temp/sat+50.txt diff --git a/KaoExtended_9.16.12/graphics/Temp/silver-ore.png b/KaoExtended/graphics/Temp/silver-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/silver-ore.png rename to KaoExtended/graphics/Temp/silver-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/slag.png b/KaoExtended/graphics/Temp/slag.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/slag.png rename to KaoExtended/graphics/Temp/slag.png diff --git a/KaoExtended_9.16.12/graphics/Temp/splitter.png b/KaoExtended/graphics/Temp/splitter.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/splitter.png rename to KaoExtended/graphics/Temp/splitter.png diff --git a/KaoExtended_9.16.12/graphics/Temp/stone.png b/KaoExtended/graphics/Temp/stone.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/stone.png rename to KaoExtended/graphics/Temp/stone.png diff --git a/KaoExtended_9.16.12/graphics/Temp/tin-ore.png b/KaoExtended/graphics/Temp/tin-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/tin-ore.png rename to KaoExtended/graphics/Temp/tin-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/transport-belt.png b/KaoExtended/graphics/Temp/transport-belt.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/transport-belt.png rename to KaoExtended/graphics/Temp/transport-belt.png diff --git a/KaoExtended_9.16.12/graphics/Temp/tungsten-ore.png b/KaoExtended/graphics/Temp/tungsten-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/tungsten-ore.png rename to KaoExtended/graphics/Temp/tungsten-ore.png diff --git a/KaoExtended_9.16.12/graphics/Temp/zinc-ore.png b/KaoExtended/graphics/Temp/zinc-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/Temp/zinc-ore.png rename to KaoExtended/graphics/Temp/zinc-ore.png diff --git a/KaoExtended_9.16.12/graphics/advanced-io.png b/KaoExtended/graphics/advanced-io.png similarity index 100% rename from KaoExtended_9.16.12/graphics/advanced-io.png rename to KaoExtended/graphics/advanced-io.png diff --git a/KaoExtended_9.16.12/graphics/advancedSC.png b/KaoExtended/graphics/advancedSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/advancedSC.png rename to KaoExtended/graphics/advancedSC.png diff --git a/KaoExtended_9.16.12/graphics/advsci-component-3.png b/KaoExtended/graphics/advsci-component-3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/advsci-component-3.png rename to KaoExtended/graphics/advsci-component-3.png diff --git a/KaoExtended_9.16.12/graphics/advsci-component-4.png b/KaoExtended/graphics/advsci-component-4.png similarity index 100% rename from KaoExtended_9.16.12/graphics/advsci-component-4.png rename to KaoExtended/graphics/advsci-component-4.png diff --git a/KaoExtended_9.16.12/graphics/anotherworldSC.png b/KaoExtended/graphics/anotherworldSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/anotherworldSC.png rename to KaoExtended/graphics/anotherworldSC.png diff --git a/KaoExtended_9.16.12/graphics/basicSC.png b/KaoExtended/graphics/basicSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/basicSC.png rename to KaoExtended/graphics/basicSC.png diff --git a/KaoExtended_9.16.12/graphics/basicSC1.png b/KaoExtended/graphics/basicSC1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/basicSC1.png rename to KaoExtended/graphics/basicSC1.png diff --git a/KaoExtended_9.16.12/graphics/basicSC2.png b/KaoExtended/graphics/basicSC2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/basicSC2.png rename to KaoExtended/graphics/basicSC2.png diff --git a/KaoExtended_9.16.12/graphics/chest/hr-titanium-chest-icon.png b/KaoExtended/graphics/chest/hr-titanium-chest-icon.png similarity index 100% rename from KaoExtended_9.16.12/graphics/chest/hr-titanium-chest-icon.png rename to KaoExtended/graphics/chest/hr-titanium-chest-icon.png diff --git a/KaoExtended_9.16.12/graphics/chest/hr-titanium-chest-shadow.png b/KaoExtended/graphics/chest/hr-titanium-chest-shadow.png similarity index 100% rename from KaoExtended_9.16.12/graphics/chest/hr-titanium-chest-shadow.png rename to KaoExtended/graphics/chest/hr-titanium-chest-shadow.png diff --git a/KaoExtended_9.16.12/graphics/chest/hr-titanium-chest.png b/KaoExtended/graphics/chest/hr-titanium-chest.png similarity index 100% rename from KaoExtended_9.16.12/graphics/chest/hr-titanium-chest.png rename to KaoExtended/graphics/chest/hr-titanium-chest.png diff --git a/KaoExtended_9.16.12/graphics/condensator.png b/KaoExtended/graphics/condensator.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator.png rename to KaoExtended/graphics/condensator.png diff --git a/KaoExtended_9.16.12/graphics/condensator2.png b/KaoExtended/graphics/condensator2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator2.png rename to KaoExtended/graphics/condensator2.png diff --git a/KaoExtended_9.16.12/graphics/condensator3-1.png b/KaoExtended/graphics/condensator3-1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator3-1.png rename to KaoExtended/graphics/condensator3-1.png diff --git a/KaoExtended_9.16.12/graphics/condensator3.png b/KaoExtended/graphics/condensator3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator3.png rename to KaoExtended/graphics/condensator3.png diff --git a/KaoExtended_9.16.12/graphics/condensator6.png b/KaoExtended/graphics/condensator6.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator6.png rename to KaoExtended/graphics/condensator6.png diff --git a/KaoExtended_9.16.12/graphics/condensator7.png b/KaoExtended/graphics/condensator7.png similarity index 100% rename from KaoExtended_9.16.12/graphics/condensator7.png rename to KaoExtended/graphics/condensator7.png diff --git a/KaoExtended_9.16.12/graphics/intelligent-io-128.png b/KaoExtended/graphics/intelligent-io-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/intelligent-io-128.png rename to KaoExtended/graphics/intelligent-io-128.png diff --git a/KaoExtended_9.16.12/graphics/intelligent-io-32-1.png b/KaoExtended/graphics/intelligent-io-32-1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/intelligent-io-32-1.png rename to KaoExtended/graphics/intelligent-io-32-1.png diff --git a/KaoExtended_9.16.12/graphics/intelligent-io-32.png b/KaoExtended/graphics/intelligent-io-32.png similarity index 100% rename from KaoExtended_9.16.12/graphics/intelligent-io-32.png rename to KaoExtended/graphics/intelligent-io-32.png diff --git a/KaoExtended_9.16.12/graphics/intermediateSC.png b/KaoExtended/graphics/intermediateSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/intermediateSC.png rename to KaoExtended/graphics/intermediateSC.png diff --git a/KaoExtended_9.16.12/graphics/intermediateSC1.png b/KaoExtended/graphics/intermediateSC1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/intermediateSC1.png rename to KaoExtended/graphics/intermediateSC1.png diff --git a/KaoExtended_9.16.12/graphics/io1.png b/KaoExtended/graphics/io1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/io1.png rename to KaoExtended/graphics/io1.png diff --git a/KaoExtended_9.16.12/graphics/lab/lab-2-base.png b/KaoExtended/graphics/lab/lab-2-base.png similarity index 100% rename from KaoExtended_9.16.12/graphics/lab/lab-2-base.png rename to KaoExtended/graphics/lab/lab-2-base.png diff --git a/KaoExtended_9.16.12/graphics/lab/lab-2-working.png b/KaoExtended/graphics/lab/lab-2-working.png similarity index 100% rename from KaoExtended_9.16.12/graphics/lab/lab-2-working.png rename to KaoExtended/graphics/lab/lab-2-working.png diff --git a/KaoExtended_9.16.12/graphics/lab/lab-module-base.png b/KaoExtended/graphics/lab/lab-module-base.png similarity index 100% rename from KaoExtended_9.16.12/graphics/lab/lab-module-base.png rename to KaoExtended/graphics/lab/lab-module-base.png diff --git a/KaoExtended_9.16.12/graphics/lab/lab-module-working.png b/KaoExtended/graphics/lab/lab-module-working.png similarity index 100% rename from KaoExtended_9.16.12/graphics/lab/lab-module-working.png rename to KaoExtended/graphics/lab/lab-module-working.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk0.png b/KaoExtended/graphics/mining-drill-bit-mk0.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk0.png rename to KaoExtended/graphics/mining-drill-bit-mk0.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk1.png b/KaoExtended/graphics/mining-drill-bit-mk1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk1.png rename to KaoExtended/graphics/mining-drill-bit-mk1.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk2.png b/KaoExtended/graphics/mining-drill-bit-mk2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk2.png rename to KaoExtended/graphics/mining-drill-bit-mk2.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk3.png b/KaoExtended/graphics/mining-drill-bit-mk3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk3.png rename to KaoExtended/graphics/mining-drill-bit-mk3.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk4.png b/KaoExtended/graphics/mining-drill-bit-mk4.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk4.png rename to KaoExtended/graphics/mining-drill-bit-mk4.png diff --git a/KaoExtended_9.16.12/graphics/mining-drill-bit-mk5.png b/KaoExtended/graphics/mining-drill-bit-mk5.png similarity index 100% rename from KaoExtended_9.16.12/graphics/mining-drill-bit-mk5.png rename to KaoExtended/graphics/mining-drill-bit-mk5.png diff --git a/KaoExtended_9.16.12/graphics/num_1-64.png b/KaoExtended/graphics/num_1-64.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_1-64.png rename to KaoExtended/graphics/num_1-64.png diff --git a/KaoExtended_9.16.12/graphics/num_1.png b/KaoExtended/graphics/num_1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_1.png rename to KaoExtended/graphics/num_1.png diff --git a/KaoExtended_9.16.12/graphics/num_2-64.png b/KaoExtended/graphics/num_2-64.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_2-64.png rename to KaoExtended/graphics/num_2-64.png diff --git a/KaoExtended_9.16.12/graphics/num_2.png b/KaoExtended/graphics/num_2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_2.png rename to KaoExtended/graphics/num_2.png diff --git a/KaoExtended_9.16.12/graphics/num_3-64.png b/KaoExtended/graphics/num_3-64.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_3-64.png rename to KaoExtended/graphics/num_3-64.png diff --git a/KaoExtended_9.16.12/graphics/num_3.png b/KaoExtended/graphics/num_3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_3.png rename to KaoExtended/graphics/num_3.png diff --git a/KaoExtended_9.16.12/graphics/num_4-64.png b/KaoExtended/graphics/num_4-64.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_4-64.png rename to KaoExtended/graphics/num_4-64.png diff --git a/KaoExtended_9.16.12/graphics/num_4.png b/KaoExtended/graphics/num_4.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_4.png rename to KaoExtended/graphics/num_4.png diff --git a/KaoExtended_9.16.12/graphics/num_5-64.png b/KaoExtended/graphics/num_5-64.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_5-64.png rename to KaoExtended/graphics/num_5-64.png diff --git a/KaoExtended_9.16.12/graphics/num_5.png b/KaoExtended/graphics/num_5.png similarity index 100% rename from KaoExtended_9.16.12/graphics/num_5.png rename to KaoExtended/graphics/num_5.png diff --git a/KaoExtended_9.16.12/graphics/old/advancedSC.png b/KaoExtended/graphics/old/advancedSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/advancedSC.png rename to KaoExtended/graphics/old/advancedSC.png diff --git a/KaoExtended_9.16.12/graphics/old/basicSC.png b/KaoExtended/graphics/old/basicSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/basicSC.png rename to KaoExtended/graphics/old/basicSC.png diff --git a/KaoExtended_9.16.12/graphics/old/intermediateSC.png b/KaoExtended/graphics/old/intermediateSC.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/intermediateSC.png rename to KaoExtended/graphics/old/intermediateSC.png diff --git a/KaoExtended_9.16.12/graphics/old/silver-cable.png b/KaoExtended/graphics/old/silver-cable.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/silver-cable.png rename to KaoExtended/graphics/old/silver-cable.png diff --git a/KaoExtended_9.16.12/graphics/old/tech1.png b/KaoExtended/graphics/old/tech1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/tech1.png rename to KaoExtended/graphics/old/tech1.png diff --git a/KaoExtended_9.16.12/graphics/old/tech2.png b/KaoExtended/graphics/old/tech2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/tech2.png rename to KaoExtended/graphics/old/tech2.png diff --git a/KaoExtended_9.16.12/graphics/old/tech3.png b/KaoExtended/graphics/old/tech3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/tech3.png rename to KaoExtended/graphics/old/tech3.png diff --git a/KaoExtended_9.16.12/graphics/old/tech4.png b/KaoExtended/graphics/old/tech4.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/tech4.png rename to KaoExtended/graphics/old/tech4.png diff --git a/KaoExtended_9.16.12/graphics/old/tech5.png b/KaoExtended/graphics/old/tech5.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/tech5.png rename to KaoExtended/graphics/old/tech5.png diff --git a/KaoExtended_9.16.12/graphics/old/techl.png b/KaoExtended/graphics/old/techl.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/techl.png rename to KaoExtended/graphics/old/techl.png diff --git a/KaoExtended_9.16.12/graphics/old/techm.png b/KaoExtended/graphics/old/techm.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/techm.png rename to KaoExtended/graphics/old/techm.png diff --git a/KaoExtended_9.16.12/graphics/old/techo.png b/KaoExtended/graphics/old/techo.png similarity index 100% rename from KaoExtended_9.16.12/graphics/old/techo.png rename to KaoExtended/graphics/old/techo.png diff --git a/KaoExtended_9.16.12/graphics/predictive-io.png b/KaoExtended/graphics/predictive-io.png similarity index 100% rename from KaoExtended_9.16.12/graphics/predictive-io.png rename to KaoExtended/graphics/predictive-io.png diff --git a/KaoExtended_9.16.12/graphics/prism.png b/KaoExtended/graphics/prism.png similarity index 100% rename from KaoExtended_9.16.12/graphics/prism.png rename to KaoExtended/graphics/prism.png diff --git a/KaoExtended_9.16.12/graphics/quantum4x.png b/KaoExtended/graphics/quantum4x.png similarity index 100% rename from KaoExtended_9.16.12/graphics/quantum4x.png rename to KaoExtended/graphics/quantum4x.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-1-128.png b/KaoExtended/graphics/sci-component-1-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-1-128.png rename to KaoExtended/graphics/sci-component-1-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-1.png b/KaoExtended/graphics/sci-component-1.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-1.png rename to KaoExtended/graphics/sci-component-1.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-2-128.png b/KaoExtended/graphics/sci-component-2-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-2-128.png rename to KaoExtended/graphics/sci-component-2-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-2.png b/KaoExtended/graphics/sci-component-2.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-2.png rename to KaoExtended/graphics/sci-component-2.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-3-128.png b/KaoExtended/graphics/sci-component-3-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-3-128.png rename to KaoExtended/graphics/sci-component-3-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-3.png b/KaoExtended/graphics/sci-component-3.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-3.png rename to KaoExtended/graphics/sci-component-3.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-4-128-blue.png b/KaoExtended/graphics/sci-component-4-128-blue.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-4-128-blue.png rename to KaoExtended/graphics/sci-component-4-128-blue.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-4-128.png b/KaoExtended/graphics/sci-component-4-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-4-128.png rename to KaoExtended/graphics/sci-component-4-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-4.png b/KaoExtended/graphics/sci-component-4.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-4.png rename to KaoExtended/graphics/sci-component-4.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-5-128.png b/KaoExtended/graphics/sci-component-5-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-5-128.png rename to KaoExtended/graphics/sci-component-5-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-5.png b/KaoExtended/graphics/sci-component-5.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-5.png rename to KaoExtended/graphics/sci-component-5.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-L-128.png b/KaoExtended/graphics/sci-component-L-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-L-128.png rename to KaoExtended/graphics/sci-component-L-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-L.png b/KaoExtended/graphics/sci-component-L.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-L.png rename to KaoExtended/graphics/sci-component-L.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-M-128.png b/KaoExtended/graphics/sci-component-M-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-M-128.png rename to KaoExtended/graphics/sci-component-M-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-M.png b/KaoExtended/graphics/sci-component-M.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-M.png rename to KaoExtended/graphics/sci-component-M.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-O-128.png b/KaoExtended/graphics/sci-component-O-128.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-O-128.png rename to KaoExtended/graphics/sci-component-O-128.png diff --git a/KaoExtended_9.16.12/graphics/sci-component-O.png b/KaoExtended/graphics/sci-component-O.png similarity index 100% rename from KaoExtended_9.16.12/graphics/sci-component-O.png rename to KaoExtended/graphics/sci-component-O.png diff --git a/KaoExtended_9.16.12/graphics/silver-cable.png b/KaoExtended/graphics/silver-cable.png similarity index 100% rename from KaoExtended_9.16.12/graphics/silver-cable.png rename to KaoExtended/graphics/silver-cable.png diff --git a/KaoExtended_9.16.12/graphics/simple-io.png b/KaoExtended/graphics/simple-io.png similarity index 100% rename from KaoExtended_9.16.12/graphics/simple-io.png rename to KaoExtended/graphics/simple-io.png diff --git a/KaoExtended_9.16.12/graphics/slag-bauxite-ore.png b/KaoExtended/graphics/slag-bauxite-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-bauxite-ore.png rename to KaoExtended/graphics/slag-bauxite-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-catalyst-metal-carrier.png b/KaoExtended/graphics/slag-catalyst-metal-carrier.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-catalyst-metal-carrier.png rename to KaoExtended/graphics/slag-catalyst-metal-carrier.png diff --git a/KaoExtended_9.16.12/graphics/slag-coal.png b/KaoExtended/graphics/slag-coal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-coal.png rename to KaoExtended/graphics/slag-coal.png diff --git a/KaoExtended_9.16.12/graphics/slag-cobalt-ore.png b/KaoExtended/graphics/slag-cobalt-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-cobalt-ore.png rename to KaoExtended/graphics/slag-cobalt-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-copper-ore.png b/KaoExtended/graphics/slag-copper-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-copper-ore.png rename to KaoExtended/graphics/slag-copper-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-empty-barrel.png b/KaoExtended/graphics/slag-empty-barrel.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-empty-barrel.png rename to KaoExtended/graphics/slag-empty-barrel.png diff --git a/KaoExtended_9.16.12/graphics/slag-empty-canister.png b/KaoExtended/graphics/slag-empty-canister.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-empty-canister.png rename to KaoExtended/graphics/slag-empty-canister.png diff --git a/KaoExtended_9.16.12/graphics/slag-filter-ceramic-used.png b/KaoExtended/graphics/slag-filter-ceramic-used.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-filter-ceramic-used.png rename to KaoExtended/graphics/slag-filter-ceramic-used.png diff --git a/KaoExtended_9.16.12/graphics/slag-filter-frame.png b/KaoExtended/graphics/slag-filter-frame.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-filter-frame.png rename to KaoExtended/graphics/slag-filter-frame.png diff --git a/KaoExtended_9.16.12/graphics/slag-gas-canister.png b/KaoExtended/graphics/slag-gas-canister.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-gas-canister.png rename to KaoExtended/graphics/slag-gas-canister.png diff --git a/KaoExtended_9.16.12/graphics/slag-gold-ore.png b/KaoExtended/graphics/slag-gold-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-gold-ore.png rename to KaoExtended/graphics/slag-gold-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-iron-ore.png b/KaoExtended/graphics/slag-iron-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-iron-ore.png rename to KaoExtended/graphics/slag-iron-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-lead-ore.png b/KaoExtended/graphics/slag-lead-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-lead-ore.png rename to KaoExtended/graphics/slag-lead-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-nickel-ore.png b/KaoExtended/graphics/slag-nickel-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-nickel-ore.png rename to KaoExtended/graphics/slag-nickel-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-quartz.png b/KaoExtended/graphics/slag-quartz.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-quartz.png rename to KaoExtended/graphics/slag-quartz.png diff --git a/KaoExtended_9.16.12/graphics/slag-rutile-ore.png b/KaoExtended/graphics/slag-rutile-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-rutile-ore.png rename to KaoExtended/graphics/slag-rutile-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-silver-ore.png b/KaoExtended/graphics/slag-silver-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-silver-ore.png rename to KaoExtended/graphics/slag-silver-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-stone.png b/KaoExtended/graphics/slag-stone.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-stone.png rename to KaoExtended/graphics/slag-stone.png diff --git a/KaoExtended_9.16.12/graphics/slag-tin-ore.png b/KaoExtended/graphics/slag-tin-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-tin-ore.png rename to KaoExtended/graphics/slag-tin-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-tungsten-ore.png b/KaoExtended/graphics/slag-tungsten-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-tungsten-ore.png rename to KaoExtended/graphics/slag-tungsten-ore.png diff --git a/KaoExtended_9.16.12/graphics/slag-zinc-ore.png b/KaoExtended/graphics/slag-zinc-ore.png similarity index 100% rename from KaoExtended_9.16.12/graphics/slag-zinc-ore.png rename to KaoExtended/graphics/slag-zinc-ore.png diff --git a/KaoExtended_9.16.12/graphics/smelting/iron-gear-wheel-stack.png b/KaoExtended/graphics/smelting/iron-gear-wheel-stack.png similarity index 100% rename from KaoExtended_9.16.12/graphics/smelting/iron-gear-wheel-stack.png rename to KaoExtended/graphics/smelting/iron-gear-wheel-stack.png diff --git a/KaoExtended_9.16.12/graphics/smelting/steel-gear-wheel-stack.png b/KaoExtended/graphics/smelting/steel-gear-wheel-stack.png similarity index 100% rename from KaoExtended_9.16.12/graphics/smelting/steel-gear-wheel-stack.png rename to KaoExtended/graphics/smelting/steel-gear-wheel-stack.png diff --git a/KaoExtended_9.16.12/graphics/standart-io.png b/KaoExtended/graphics/standart-io.png similarity index 100% rename from KaoExtended_9.16.12/graphics/standart-io.png rename to KaoExtended/graphics/standart-io.png diff --git a/KaoExtended_9.16.12/graphics/technology/Crystal.png b/KaoExtended/graphics/technology/Crystal.png similarity index 100% rename from KaoExtended_9.16.12/graphics/technology/Crystal.png rename to KaoExtended/graphics/technology/Crystal.png diff --git a/KaoExtended_9.16.12/graphics/technology/prism.png b/KaoExtended/graphics/technology/prism.png similarity index 100% rename from KaoExtended_9.16.12/graphics/technology/prism.png rename to KaoExtended/graphics/technology/prism.png diff --git a/KaoExtended_9.16.12/graphics/technology/reverse-slag.png b/KaoExtended/graphics/technology/reverse-slag.png similarity index 100% rename from KaoExtended_9.16.12/graphics/technology/reverse-slag.png rename to KaoExtended/graphics/technology/reverse-slag.png diff --git a/KaoExtended_9.16.12/info.json b/KaoExtended/info.json similarity index 100% rename from KaoExtended_9.16.12/info.json rename to KaoExtended/info.json diff --git a/KaoExtended_9.16.12/library/recipe.lua b/KaoExtended/library/recipe.lua similarity index 100% rename from KaoExtended_9.16.12/library/recipe.lua rename to KaoExtended/library/recipe.lua diff --git a/KaoExtended_9.16.12/library/technology.lua b/KaoExtended/library/technology.lua similarity index 100% rename from KaoExtended_9.16.12/library/technology.lua rename to KaoExtended/library/technology.lua diff --git a/KaoExtended_9.16.12/locale/en/item-names.cfg b/KaoExtended/locale/en/item-names.cfg similarity index 100% rename from KaoExtended_9.16.12/locale/en/item-names.cfg rename to KaoExtended/locale/en/item-names.cfg diff --git a/KaoExtended_9.16.12/locale/en/technology-names.cfg b/KaoExtended/locale/en/technology-names.cfg similarity index 100% rename from KaoExtended_9.16.12/locale/en/technology-names.cfg rename to KaoExtended/locale/en/technology-names.cfg diff --git a/KaoExtended_9.16.12/locale/ru/item-names.cfg b/KaoExtended/locale/ru/item-names.cfg similarity index 100% rename from KaoExtended_9.16.12/locale/ru/item-names.cfg rename to KaoExtended/locale/ru/item-names.cfg diff --git a/KaoExtended_9.16.12/locale/ru/technology-names.cfg b/KaoExtended/locale/ru/technology-names.cfg similarity index 100% rename from KaoExtended_9.16.12/locale/ru/technology-names.cfg rename to KaoExtended/locale/ru/technology-names.cfg diff --git a/KaoExtended_9.16.12/migration/tmp.txt b/KaoExtended/migration/tmp.txt similarity index 100% rename from KaoExtended_9.16.12/migration/tmp.txt rename to KaoExtended/migration/tmp.txt diff --git a/KaoExtended_9.16.12/prototypes/BlackTrainSmokeRevised010.lua b/KaoExtended/prototypes/BlackTrainSmokeRevised010.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/BlackTrainSmokeRevised010.lua rename to KaoExtended/prototypes/BlackTrainSmokeRevised010.lua diff --git a/KaoExtended_9.16.12/prototypes/BobLogisticZoneExpanderRadius010.lua b/KaoExtended/prototypes/BobLogisticZoneExpanderRadius010.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/BobLogisticZoneExpanderRadius010.lua rename to KaoExtended/prototypes/BobLogisticZoneExpanderRadius010.lua diff --git a/KaoExtended_9.16.12/prototypes/Bobs-alloy-recipe.lua b/KaoExtended/prototypes/Bobs-alloy-recipe.lua similarity index 94% rename from KaoExtended_9.16.12/prototypes/Bobs-alloy-recipe.lua rename to KaoExtended/prototypes/Bobs-alloy-recipe.lua index c4ac601a..6e71cdc4 100644 --- a/KaoExtended_9.16.12/prototypes/Bobs-alloy-recipe.lua +++ b/KaoExtended/prototypes/Bobs-alloy-recipe.lua @@ -15,6 +15,22 @@ data:extend({ }, allow_decomposition = false, }, + { + type = "recipe", + name = "angel-solder-alloy-x", + enabled = false, + hidden = false, + category = "mixing-furnace", + energy_required = 32, + ingredients = { + { type = "item", name = "tin-plate", amount = 5 }, + { type = "item", name = "lead-plate", amount = 4 }, + }, + results = { + { type = "item", name = "solder", amount = 1 }, + }, + allow_decomposition = false, + }, { type = "recipe", name = "brass-alloy-x", @@ -335,4 +351,5 @@ bobmods.lib.tech.add_recipe_unlock("angels-cobalt-steel-smelting-1", "cobalt-ste bobmods.lib.tech.add_recipe_unlock("angels-nickel-smelting-1", "nickel-electrolysis-x") bobmods.lib.tech.add_recipe_unlock("angels-zinc-smelting-1", "zinc-electrolysis-x") bobmods.lib.tech.add_recipe_unlock("angels-cobalt-smelting-1", "cobalat-electrolysis-x") -bobmods.lib.tech.add_recipe_unlock("angels-titanium-smelting-1", "titanium-electrolysis-x") \ No newline at end of file +bobmods.lib.tech.add_recipe_unlock("angels-titanium-smelting-1", "titanium-electrolysis-x") +bobmods.lib.tech.add_recipe_unlock("angels-solder-smelting-1", "angel-solder-alloy-x") \ No newline at end of file diff --git a/KaoExtended_9.16.12/prototypes/LandmineGridlock_102.lua b/KaoExtended/prototypes/LandmineGridlock_102.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/LandmineGridlock_102.lua rename to KaoExtended/prototypes/LandmineGridlock_102.lua diff --git a/KaoExtended_9.16.12/prototypes/Manganese_chrome_platinum_sorting.lua b/KaoExtended/prototypes/Manganese_chrome_platinum_sorting.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/Manganese_chrome_platinum_sorting.lua rename to KaoExtended/prototypes/Manganese_chrome_platinum_sorting.lua diff --git a/KaoExtended_9.16.12/prototypes/Mining_fluids_903.lua b/KaoExtended/prototypes/Mining_fluids_903.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/Mining_fluids_903.lua rename to KaoExtended/prototypes/Mining_fluids_903.lua diff --git a/KaoExtended_9.16.12/prototypes/advtech/item.lua b/KaoExtended/prototypes/advtech/item.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/advtech/item.lua rename to KaoExtended/prototypes/advtech/item.lua diff --git a/KaoExtended_9.16.12/prototypes/advtech/override_recipe.lua b/KaoExtended/prototypes/advtech/override_recipe.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/advtech/override_recipe.lua rename to KaoExtended/prototypes/advtech/override_recipe.lua diff --git a/KaoExtended_9.16.12/prototypes/advtech/recipe.lua b/KaoExtended/prototypes/advtech/recipe.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/advtech/recipe.lua rename to KaoExtended/prototypes/advtech/recipe.lua diff --git a/KaoExtended_9.16.12/prototypes/alien-artifact.lua b/KaoExtended/prototypes/alien-artifact.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/alien-artifact.lua rename to KaoExtended/prototypes/alien-artifact.lua diff --git a/KaoExtended_9.16.12/prototypes/alien-artifact.lua.bak b/KaoExtended/prototypes/alien-artifact.lua.bak similarity index 100% rename from KaoExtended_9.16.12/prototypes/alien-artifact.lua.bak rename to KaoExtended/prototypes/alien-artifact.lua.bak diff --git a/KaoExtended_9.16.12/prototypes/angelextended/angelsbioprocessing.lua b/KaoExtended/prototypes/angelextended/angelsbioprocessing.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/angelsbioprocessing.lua rename to KaoExtended/prototypes/angelextended/angelsbioprocessing.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/angelssmelting.lua b/KaoExtended/prototypes/angelextended/angelssmelting.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/angelssmelting.lua rename to KaoExtended/prototypes/angelextended/angelssmelting.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/oreCasting.lua b/KaoExtended/prototypes/angelextended/oreCasting.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/oreCasting.lua rename to KaoExtended/prototypes/angelextended/oreCasting.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/recipe-angelsmelting.lua b/KaoExtended/prototypes/angelextended/recipe-angelsmelting.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/recipe-angelsmelting.lua rename to KaoExtended/prototypes/angelextended/recipe-angelsmelting.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/slag.lua b/KaoExtended/prototypes/angelextended/slag.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/slag.lua rename to KaoExtended/prototypes/angelextended/slag.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/smelting/recipe.lua b/KaoExtended/prototypes/angelextended/smelting/recipe.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/smelting/recipe.lua rename to KaoExtended/prototypes/angelextended/smelting/recipe.lua diff --git a/KaoExtended_9.16.12/prototypes/angelextended/smelting/technology.lua b/KaoExtended/prototypes/angelextended/smelting/technology.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/angelextended/smelting/technology.lua rename to KaoExtended/prototypes/angelextended/smelting/technology.lua diff --git a/KaoExtended_9.16.12/prototypes/chest-gfx.lua b/KaoExtended/prototypes/chest-gfx.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/chest-gfx.lua rename to KaoExtended/prototypes/chest-gfx.lua diff --git a/KaoExtended_9.16.12/prototypes/custom_production_ui_100.lua b/KaoExtended/prototypes/custom_production_ui_100.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/custom_production_ui_100.lua rename to KaoExtended/prototypes/custom_production_ui_100.lua diff --git a/KaoExtended_9.16.12/prototypes/item-fuelvalue.lua b/KaoExtended/prototypes/item-fuelvalue.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/item-fuelvalue.lua rename to KaoExtended/prototypes/item-fuelvalue.lua diff --git a/KaoExtended_9.16.12/prototypes/labs-gfx.lua b/KaoExtended/prototypes/labs-gfx.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/labs-gfx.lua rename to KaoExtended/prototypes/labs-gfx.lua diff --git a/KaoExtended_9.16.12/prototypes/mining-drill-bit/item.lua b/KaoExtended/prototypes/mining-drill-bit/item.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/mining-drill-bit/item.lua rename to KaoExtended/prototypes/mining-drill-bit/item.lua diff --git a/KaoExtended_9.16.12/prototypes/mining-drill-bit/override.lua b/KaoExtended/prototypes/mining-drill-bit/override.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/mining-drill-bit/override.lua rename to KaoExtended/prototypes/mining-drill-bit/override.lua diff --git a/KaoExtended/prototypes/morestack.lua b/KaoExtended/prototypes/morestack.lua new file mode 100644 index 00000000..8b4c9a8d --- /dev/null +++ b/KaoExtended/prototypes/morestack.lua @@ -0,0 +1,11 @@ +--if data.raw["item"]["bi-woodpulp"] then +-- data.raw["item"]["wood"].stack_size = 400 +-- else +-- data.raw["item"]["wood"].stack_size = 200 +--end +if data.raw["item"]["slag"] then + data.raw["item"]["slag"].stack_size = 400 + data.raw["item"]["stone-crushed"].stack_size = 400 + data.raw["item"]["stone-brick"].stack_size = 400 + data.raw["item"]["iron-gear-wheel"].stack_size = 200 +end \ No newline at end of file diff --git a/KaoExtended_9.16.12/prototypes/nuke_cliffs_1900.lua b/KaoExtended/prototypes/nuke_cliffs_1900.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/nuke_cliffs_1900.lua rename to KaoExtended/prototypes/nuke_cliffs_1900.lua diff --git a/KaoExtended_9.16.12/prototypes/override_item.lua b/KaoExtended/prototypes/override_item.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/override_item.lua rename to KaoExtended/prototypes/override_item.lua diff --git a/KaoExtended_9.16.12/prototypes/override_machine.lua b/KaoExtended/prototypes/override_machine.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/override_machine.lua rename to KaoExtended/prototypes/override_machine.lua diff --git a/KaoExtended_9.16.12/prototypes/projectiles.lua b/KaoExtended/prototypes/projectiles.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/projectiles.lua rename to KaoExtended/prototypes/projectiles.lua diff --git a/KaoExtended_9.16.12/prototypes/pyramid.lua b/KaoExtended/prototypes/pyramid.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/pyramid.lua rename to KaoExtended/prototypes/pyramid.lua diff --git a/KaoExtended_9.16.12/prototypes/recipes/UsedCoolant.lua b/KaoExtended/prototypes/recipes/UsedCoolant.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/recipes/UsedCoolant.lua rename to KaoExtended/prototypes/recipes/UsedCoolant.lua diff --git a/KaoExtended_9.16.12/prototypes/structurecomponents/item.lua b/KaoExtended/prototypes/structurecomponents/item.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/structurecomponents/item.lua rename to KaoExtended/prototypes/structurecomponents/item.lua diff --git a/KaoExtended_9.16.12/prototypes/structurecomponents/override.lua b/KaoExtended/prototypes/structurecomponents/override.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/structurecomponents/override.lua rename to KaoExtended/prototypes/structurecomponents/override.lua diff --git a/KaoExtended_9.16.12/prototypes/technology.lua b/KaoExtended/prototypes/technology.lua similarity index 100% rename from KaoExtended_9.16.12/prototypes/technology.lua rename to KaoExtended/prototypes/technology.lua diff --git a/KaoExtended_9.16.12/settings.lua b/KaoExtended/settings.lua similarity index 100% rename from KaoExtended_9.16.12/settings.lua rename to KaoExtended/settings.lua diff --git a/KaoExtended_9.16.12/thumbnail.png b/KaoExtended/thumbnail.png similarity index 100% rename from KaoExtended_9.16.12/thumbnail.png rename to KaoExtended/thumbnail.png diff --git a/KaoExtended_9.16.12/prototypes/morestack.lua b/KaoExtended_9.16.12/prototypes/morestack.lua deleted file mode 100644 index 835638fe..00000000 --- a/KaoExtended_9.16.12/prototypes/morestack.lua +++ /dev/null @@ -1,11 +0,0 @@ ---if data.raw["item"]["bi-woodpulp"] then --- data.raw["item"]["wood"].stack_size = 400 --- else --- data.raw["item"]["wood"].stack_size = 200 ---end -if data.raw["item"]["slag"] then - data.raw["item"]["slag"].stack_size = 4000 - data.raw["item"]["stone-crushed"].stack_size = 4000 - data.raw["item"]["stone-brick"].stack_size = 4000 - data.raw["item"]["iron-gear-wheel"].stack_size = 200 -end \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/changelog.txt b/Kruise_Kontrol_Updated/changelog.txt new file mode 100644 index 00000000..32be0acb --- /dev/null +++ b/Kruise_Kontrol_Updated/changelog.txt @@ -0,0 +1,66 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.1.10 +Date: 2023-04-20 + Bugfixes: + - Fixed another infinite loop caused by objects bounding_box not matching revive functions check when building ghosts. + - Fixed cliffs breaking script, current implementation is to ignore ghosts colliding with cliffs. + - Fixed ghost entity not being placed down after crafting when building ghosts. +--------------------------------------------------------------------------------------------------- +Version: 0.1.9 +Date: 2023-04-18 + Bugfixes: + - Fixed changelog (hopefully last time). +--------------------------------------------------------------------------------------------------- +Version: 0.1.8 +Date: 2023-04-18 + Bugfixes: + - Fixed changelog (again :|). +--------------------------------------------------------------------------------------------------- +Version: 0.1.7 +Date: 2023-04-18 + Bugfixes: + - Fixed changelog. +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 +Date: 2023-04-18 + Changes: + - When clearing forest for ghosts, added a 3 tile clear radius for trees. + This should make it clear trees properly when using Tree Collision/Squeak Through/Alien Biomes or similar mods that change tree collision. + Bugfixes: + - Fixed infinite loop caused by not being able to select entity when building ghosts. +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: 2023-04-18 + Bugfixes: + - Fixed crash with Factorissimo2 when building ghosts. +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 2021-04-16 + Changes: + - Attempt at better combat AI. + - Fixed and other things probably. + - Removed command cancellation using WASD keys. +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 2021-04-11 + Changes: + - Added slurping from belts. + - Added small text remarks when issueing orders. + - Added command cancellation if you touch the movement keys. + - Extending find distances from 32 -> 64. + - Some fixes and things most likely. +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 2021-04-10 + Changes: + - Tweaks and polish +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2021-04-04 + Changes: + - Fix raising revive event. +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2021-04-04 + Changes: + - Do the whole thing diff --git a/Kruise_Kontrol_Updated/control.lua b/Kruise_Kontrol_Updated/control.lua new file mode 100644 index 00000000..a7ffbed6 --- /dev/null +++ b/Kruise_Kontrol_Updated/control.lua @@ -0,0 +1,4 @@ +local event_handler = require("event_handler") + +event_handler.add_lib(require("script/kruise_kontrol")) +event_handler.add_lib(require("script/character_interface/character")) diff --git a/Kruise_Kontrol_Updated/data.lua b/Kruise_Kontrol_Updated/data.lua new file mode 100644 index 00000000..ea4b4ef3 --- /dev/null +++ b/Kruise_Kontrol_Updated/data.lua @@ -0,0 +1,80 @@ +local input = +{ + name = "klient-move-to", + type = "custom-input", + key_sequence = "mouse-button-2", +} + +local alt_input = +{ + name = "klient-alt-move-to", + type = "custom-input", + key_sequence = "CONTROL + ALT + mouse-button-2", + consuming = "game-only" +} + +local enqueue_input = +{ + name = "klient-enqueue-command", + type = "custom-input", + key_sequence = "CONTROL + ALT + SHIFT + mouse-button-2", + consuming = "game-only" +} + +local cancel_w = +{ + name = "klient-cancel-w", + type = "custom-input", + linked_game_control = "move-up", + consuming = "none", + key_sequence = "" +} + +local cancel_a = +{ + name = "klient-cancel-a", + type = "custom-input", + linked_game_control = "move-left", + consuming = "none", + key_sequence = "" +} + +local cancel_s = +{ + name = "klient-cancel-s", + type = "custom-input", + linked_game_control = "move-down", + consuming = "none", + key_sequence = "" +} + +local cancel_d = +{ + name = "klient-cancel-d", + type = "custom-input", + linked_game_control = "move-right", + consuming = "none", + key_sequence = "" +} + +local cancel_enter = +{ + name = "klient-cancel-enter", + type = "custom-input", + linked_game_control = "toggle-driving", + consuming = "none", + key_sequence = "" +} + + +data:extend +{ + --input, + alt_input, + --enqueue_input + cancel_w, + cancel_a, + cancel_s, + cancel_d, + cancel_enter +} diff --git a/Kruise_Kontrol_Updated/info.json b/Kruise_Kontrol_Updated/info.json new file mode 100644 index 00000000..5bcf4cbf --- /dev/null +++ b/Kruise_Kontrol_Updated/info.json @@ -0,0 +1,11 @@ +{ + "name": "Kruise_Kontrol_Updated", + "version": "0.1.10", + "title": "Kruise Kontrol Updated", + "author": "Klonan, EliteHunter", + "contact": "", + "homepage": "", + "description": "Hit Kruise Kontrol and let it take care of your problems. Currently updated version only has bugfixes, no new features.", + "dependencies": ["base >= 1.1.0"], + "factorio_version": "1.1" +} \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/locale/en/kruise_kontrol.cfg b/Kruise_Kontrol_Updated/locale/en/kruise_kontrol.cfg new file mode 100644 index 00000000..5e105974 --- /dev/null +++ b/Kruise_Kontrol_Updated/locale/en/kruise_kontrol.cfg @@ -0,0 +1,14 @@ +abort-command=Aborting command +move-command=Moving to __1__ +follow-command=Following __1__ +build-command=Building ghosts +deconstruct-command=Deconstructing entities +repair-command=Repairing entities +upgrade-command=Upgrading entities +fuel-command=Fuelling entities +mine-entity-command=Mining __1__ +mine-trees-command=Mining trees +attack-command=Oh boy Here I go killing again + +[controls] +klient-alt-move-to=Klient do the thing \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/readme.md b/Kruise_Kontrol_Updated/readme.md new file mode 100644 index 00000000..aa9d37fc --- /dev/null +++ b/Kruise_Kontrol_Updated/readme.md @@ -0,0 +1,5 @@ +## Kruise Kontrol + +-------------------------------------- + +Move it diff --git a/Kruise_Kontrol_Updated/script/character_interface/character.lua b/Kruise_Kontrol_Updated/script/character_interface/character.lua new file mode 100644 index 00000000..52187e38 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/character.lua @@ -0,0 +1,744 @@ +local States = require("script/character_interface/states/states") +local util = require("script/character_script_util") + +local script_data = +{ + characters = {} +} + +local Character = {} + +Character.metatable = +{ + __index = Character, +} + +function Character.get_character(unit_number) + local character = script_data.character[unit_number] + if character and character.entity.valid then + return character + end +end + +function Character.new(character_entity) + + if character_entity.type ~= "character" then + error("Character interface only works on character entities." .. character_entity.type) + end + + script.register_on_entity_destroyed(character_entity) + + local character = + { + entity = character_entity, + state_stack = {}, + index = character_entity.unit_number, + } + + setmetatable(character, Character.metatable) + + script_data.characters[character.index] = character + return character +end + +function Character:update() + --error(serpent.block(self.state_stack)) + if not self.entity.valid then + return + end + + local state = self.state_stack[1] + if state and state.update then + state:update() + end + +end + +function Character:pop_state(dont_update_state) + self:print("Popped state "..self.state_stack[1].type) + table.remove(self.state_stack, 1) + --maybe? + if dont_update_state == nil or dont_update_state == false then + self:update() + end +end + +function Character:push_state(state) + self:print("Pushed state "..state.type) + table.insert(self.state_stack, 1, state) +end + +function Character:emplace_state(state) + self:print("Emplaced state "..state.type) + table.insert(self.state_stack, state) +end + +function Character:clear_state() + for k, state in pairs (self.state_stack) do + if state.cleanup then + state:cleanup() + end + end + self.state_stack = {} +end + +function Character:follow(target, distance) + self:push_state(States.follow(self, target, distance)) +end + +local resource_type = +{ + ["resource"] = true, + ["tree"] = true, + ["simple-entity"] = true +} + +function Character:get_mining_distance(type) + if type and resource_type[type] then + return self.entity.resource_reach_distance + else + return self.entity.reach_distance + end +end + +function Character:get_repair_distance() + return self.entity.reach_distance +end + +function Character:get_reach_distance() + return self.entity.reach_distance +end + +function Character:get_slurp_distance() + return self.entity.item_pickup_distance +end + +function Character:get_build_distance() + return self.entity.build_distance +end + +function Character:can_reach_entity(entity) + return self.entity.can_reach_entity(entity) +end + +function Character:distance(entity_or_position) + return util.distance(self.entity.position, entity_or_position.position or entity_or_position) +end + +function Character:move_to(entity_or_position, distance, timeout) + local vehicle = self.entity.vehicle + if vehicle then + if vehicle.type == "spider-vehicle" then + self:push_state(States.moving_spider(self, entity_or_position, distance)) + return + end + if vehicle.type == "car" then + self:push_state(States.moving_vehicle(self, entity_or_position, distance or 10)) + return + end + end + self:push_state(States.moving(self, entity_or_position, distance, timeout)) +end + +function Character:mine(entity, amount) + self:push_state(States.mining(self, entity, amount)) +end + +function Character:batch_job(job_type, entities) + self:push_state(States.batch_job(self, job_type, entities)) +end + +function Character:find_and_batch(job_type, param) + self:push_state(States.find_and_batch(self, job_type, param)) +end + +function Character:repair(entity) + self:push_state(States.repair(self, entity)) +end + +function Character:upgrade(entity) + self:push_state(States.upgrade(self, entity)) +end + +function Character:attack(entity, timeout) + self:push_state(States.attack(self, entity, timeout)) +end + +function Character:attack_area(position, radius) + self:push_state(States.combat(self, position, radius)) +end + +function Character:build_ghost(entity) + self:push_state(States.build_ghost(self, entity)) +end + +function Character:wait(ticks) + self:push_state(States.idle(self, ticks)) +end + +function Character:nearest_enemy(radius, position) + return self.entity.surface.find_nearest_enemy + { + position = position or self.entity.position, + max_distance = radius or 64, + force = self.entity.force + } +end + +function Character:defer_job(position, entity) + self:emplace_state(States.deferred_job(self, position, entity)) +end + +function Character:is_idle() + return not self.state_stack[1] +end + +function Character:clear_remark() + if not self.remark_id then return end + return rendering.is_valid(self.remark_id) and rendering.destroy(self.remark_id) +end + +function Character:remark(string, color) + self:clear_remark() + self.remark_id = rendering.draw_text + { + text = string, + surface = self.entity.surface, + target = self.entity, + target_offset = {0, -3}, + color = color or {1, 1, 1}, + scale = 1, + time_to_live = 120, + forces = {self.entity.force}, + players = {self.player}, + visible = true, + draw_on_ground = false, + orientation = 0, + alignment = "center", + scale_with_zoom = true, + only_in_alt_mode = false + } +end + +local can_follow = +{ + ["car"] = true, + ["locomotive"] = true, + ["cargo-wagon"] = true, + ["fluid-wagon"] = true, + ["artillery-wagon"] = true, + ["unit"] = true, + ["character"] = true, + +} + +function Character:determine_job(entity, position) + + if not (entity and entity.valid) then + self:remark{"move-command", string.format("(%.0f, %.0f)", position.x, position.y)} + self:move_to{position.x, position.y} + return + end + + if self.entity.vehicle then + -- If we're in a vehicle, we just go to the position + self:remark{"move-command", string.format("(%.0f, %.0f)", position.x, position.y)} + self:move_to{position.x, position.y} + return + end + + local force = entity.force + + if force == self.entity.force then + + if entity.type == "entity-ghost" then + self:remark{"build-command"} + self:find_and_batch("build", {type = "entity-ghost", force = force}) + self:build_ghost(entity, -1) + return + end + + if entity.type == "tile-ghost" then + self:remark{"build-command"} + self:find_and_batch("build", {type = "tile-ghost", force = force}) + self:build_ghost(entity, -1) + return + end + + if entity.to_be_deconstructed() then + self:remark{"deconstruct-command"} + self:find_and_batch("mine", {to_be_deconstructed = true, force = force}) + self:mine(entity, -1) + return + end + + if entity.get_health_ratio() and entity.get_health_ratio() < 1 then + self:remark{"repair-command"} + self:find_and_batch("repair", {radius = 50, force = force}) + self:repair(entity) + return + end + + if entity.to_be_upgraded() then + self:remark{"upgrade-command"} + self:find_and_batch("upgrade", {to_be_upgraded = true}) + self:upgrade(entity) + return + end + + local fuel_inventory = entity.get_fuel_inventory() + if fuel_inventory and fuel_inventory.is_empty() then + self:remark{"fuel-command"} + self:find_and_batch("fuel", {radius = 50, force = force}) + self:fuel_entity(entity) + return + end + + end + + if entity.to_be_deconstructed() and (force.name == "neutral") then + self:remark{"deconstruct-command"} + self:find_and_batch("mine", {to_be_deconstructed = true, force = {"neutral", self.entity.force.name}}) + self:mine(entity, -1) + return + end + + if entity.type == "resource" then + self:remark{"mine-entity-command", entity.localised_name} + self:find_and_batch("mine", {type = "resource", name = entity.name, amount = -1}) + self:mine(entity, -1) + return + end + + if entity.type == "tree" then + self:remark{"mine-trees-command"} + self:find_and_batch("mine", {type = "tree"}) + self:mine(entity, -1) + return + end + + if entity.type == "simple-entity" and force.name == "neutral" then + self:remark{"mine-entity-command", entity.localised_name} + self:find_and_batch("mine", {type = "simple-entity"}) + self:mine(entity, -1) + return + end + + if self.entity.force.get_cease_fire(entity.force) == false then + self:remark{"attack-command"} + --self:find_and_batch("attack", {radius = 50, force = entity.force}) + self:attack_area(entity.position, 64) + return + end + + if can_follow[entity.type] then + self:remark{"follow-command", entity.localised_name} + self:follow(entity) + else + self:remark{"move-command", entity.localised_name} + self:move_to(entity) + end + +end + +function Character:is_moving() + return self.state_stack[1] and self.state_stack[1].type == States.moving.type +end + +function Character:craft_item(name, count) + self:print("Told to find item "..name.." x"..count) + self:push_state(States.craft_item(self, name, count)) +end + +function Character:get_mining_progress() + return self.entity.character_mining_progress +end + +function Character:find_item(name, count) + self:push_state(States.find_item(self, name, count)) +end + +function Character:has_item(name, count) + return self.entity.get_item_count(name) >= ((count or 1)) +end + +function Character:get_item_count(name) + return self.entity.get_item_count(name) +end + +function Character:find_entities_filtered(param) + return self.entity.surface.find_entities_filtered(param) +end + +function Character:find_entity(param) + param.limit = 1 + local entities = self.entity.surface.find_entities_filtered(param) + return entities[1] +end + +function Character:is_entity_nearby(radius, param) + --Slightly optimised, will return true if there is any of the entity matching the params nearby. + local param = param or {} + param.position = self:get_position() + param.radius = radius or 64 + param.limit = 1 + return self.entity.surface.count_entities_filtered(param) > 0 +end + +function Character:get_forces(type) + if type == "any" then return nil end + if type == "enemy" then return self:get_enemy_forces() end + if type == "friend" then return self:get_friend_forces() end + if type == "neutral" then return self:get_neutral_forces() end +end + +function Character:get_enemy_forces() + local forces = {} + local our_force = self.entity.force + for k, force in pairs (game.forces) do + if our_force.get_cease_fire(force) == false then + forces[k] = force.name + end + end + return forces +end + +function Character:get_friend_forces() + local forces = {} + local our_force = self.entity.force + for k, force in pairs (game.forces) do + if our_force.get_friend(force) then + forces[k] = force.name + end + end + return forces +end + +function Character:get_neutral_forces() + local forces = + { + [game.forces.neutral.index] = "neutral" + } + local our_force = self.entity.force + for k, force in pairs (game.forces) do + if our_force.get_cease_fire(force) and not our_force.get_friend(force) then + forces[k] = force.name + end + end + return forces +end + +function Character:remove_item(name, count) + --returns how many were removed + + local to_remove = count + for k = 1, 10 do + local inventory = self.entity.get_inventory(k) + if not inventory then break end + local stack = inventory.find_item_stack(name) + + if stack then + local stack_count = stack.count + if stack_count >= to_remove then + stack.count = stack_count - to_remove + return count + end + to_remove = to_remove - stack_count + stack.clear() + + if to_remove < 1 then + return count + end + + end + end + + if self.entity.player then + local stack = self.entity.player.cursor_stack + + if stack then + local stack_count = stack.count + if stack_count >= to_remove then + stack.count = stack_count - to_remove + return count + end + to_remove = to_remove - stack_count + stack.clear() + + if to_remove < 1 then + return count + end + end + + end + + return count - to_remove +end + +function Character:can_craft_recipe(recipe) + if not recipe.enabled then return end + + if not self.entity.prototype.crafting_categories[recipe.category] then return end + + for k, ingredient in pairs (recipe.ingredients) do + if ingredient.type == "fluid" then return end + end + + return true +end + +function Character:find_nearby_entities(radius, param) + if not radius then error("Give me a radius dude") end + local param = param or {} + param.position = self:get_position() + param.radius = radius + return self.entity.surface.find_entities_filtered(param) +end + +function Character:update_every_n_ticks(n) + return (game.tick + self.index) % n == 0 +end + +function Character:clear_cursor() + -- Returns true if the cursor is empty. + local stack = self.entity.cursor_stack + + if not stack.valid_for_read then + return true + end + + local inventory = self.entity.get_main_inventory() + + local count = inventory.insert(stack) + + if count == 0 then + return false + end + + if count == stack.count then + stack.clear() + return true + end + + stack.count = stack.count - count + return false + +end + +local locale_cache = {} +local get_localised_item_name = function(name) + local localised_name = locale_cache[name] + if localised_name then + return localised_name + end + localised_name = game.item_prototypes[name].localised_name + locale_cache[name] = localised_name + return localised_name +end + +function Character:take_item_stack(stack, count, source) + + --game.print(stack.name..": "..stack.count.."; wanted: "..count) + + local inventory = self.entity.get_main_inventory() + local original = stack.count + local name = stack.name + if count > original then count = original end + stack.count = count + local given = inventory.insert(stack) + if given > original then + error("WTF"..serpent.block({stack = stack.name, wanted_count = count, given = given, stack_count = stack.count, original = original})) + end + stack.count = original - given + --self:say("Took "..given) + if source and source.valid then + source.surface.create_entity + { + name = "flying-text", + text = {"", "+", given, " ", get_localised_item_name(name), " (", inventory.get_item_count(name), ")"}, + position = {source.position.x, source.position.y - 1} + } + if self.entity.player then + self.entity.player.play_sound{path = "utility/inventory_move"} + end + end + + return given +end + +function Character:give_item(name, count, target) + + local given = target.insert{name = name, count = count} + self:remove_item(name, given) + + target.surface.create_entity + { + name = "flying-text", + text = {"", "+", given, " ", get_localised_item_name(name), " (", self.entity.get_main_inventory().get_item_count(name), ")"}, + position = {target.position.x, target.position.y - 1} + } + + if self.entity.player then + self.entity.player.play_sound{path = "utility/inventory_move"} + end + + return given +end + +function Character:take_item(target, name, count) + self:push_state(States.take_item(self, target, name, count)) +end + +function Character:take_item_from_belt(target, name, count) + self:push_state(States.take_item_from_belt(self, target, name, count)) +end + +function Character:put_item(target, name, count) + self:push_state(States.put_item(self, target, name, count)) +end + +function Character:fuel_entity(target) + self:push_state(States.fuel_entity(self, target)) +end + +function Character:fuel_entities(entities) + self:push_state(States.fuel_entities(self, entities)) +end + +local debug = false +function Character:print(text) + if not debug then return end + game.print(game.tick .. text) + self:say(text) +end + +function Character:say(text) + self.entity.surface.create_entity{name = "tutorial-flying-text", text = text, position = {self.entity.position.x, self.entity.position.y - 1}} +end + +function Character:show_speech_bubble(text) + if self.speech_bubble and self.speech_bubble.valid then + self.speech_bubble.start_fading_out() + self.speech_bubble = nil + end + if not text then return end + self.speech_bubble = self.entity.surface.create_entity{name = "compi-speech-bubble", text = text, position = {self.entity.position.x, self.entity.position.y - 1}, target = self.entity} +end + +function Character:on_script_path_request_finished(event) + local state = self.state_stack[1] + if state and state.on_script_path_request_finished then + state:on_script_path_request_finished(event) + end +end + +function Character:get_position() + return self.entity.position +end + +function Character:get_speed() + return self.entity.character_running_speed +end + +function Character:get_closest(entities) + return self.entity.surface.get_closest(self.entity.position, entities) +end + +local direction_size = 2 * defines.direction.south +function Character:get_direction_to(entity_or_position) + + local position = entity_or_position.position or entity_or_position + -- Angle in rads + local angle = util.angle(position, self:get_position()) + + -- Convert to orientation + local orientation = (angle / (2 * math.pi)) - 0.25 + if orientation < 0 then orientation = orientation + 1 end + + --round to nearest 'direction' + local direction = math.floor((orientation * direction_size) + 0.5) + if direction == direction_size then direction = 0 end + + return direction +end + +function Character:look_at(entity_or_position) + local direction = self:get_direction_to(entity_or_position) + self.entity.direction = direction +end + +function Character:on_destroyed() + --?? +end + +function Character:load() + for k, state in pairs (self.state_stack) do + local state_type = States[state.type] + assert(state_type, "WTF IS THIS STATE? "..state.type) + setmetatable(state, state_type.metatable) + end +end + +local on_tick = function(event) + for k, character in pairs (script_data.characters) do + character:update() + end +end + +local on_script_path_request_finished = function(event) + for k, character in pairs (script_data.characters) do + character:on_script_path_request_finished(event) + end +end + +local on_entity_destroyed = function(event) + local unit_number = event.unit_number + if not unit_number then return end + local character = script_data.characters[unit_number] + if character then + character:on_destroyed() + script_data.characters[unit_number] = nil + end +end + +local lib = {} + +lib.events = +{ + [defines.events.on_tick] = on_tick, + [defines.events.on_script_path_request_finished] = on_script_path_request_finished, + [defines.events.on_entity_destroyed] = on_entity_destroyed, +} + +lib.on_load = function() + script_data = global.character_interface or script_data + + for k, character in pairs (script_data.characters) do + setmetatable(character, Character.metatable) + character:load() + end + +end + +lib.on_init = function() + global.character_interface = global.character_interface or script_data + + game.forces.player.set_cease_fire("neutral", true) + game.forces.player.set_cease_fire("enemy", false) + game.forces.player.set_cease_fire("player", true) + game.forces.player.set_friend("player", true) + + game.forces.enemy.set_cease_fire("neutral", true) + game.forces.enemy.set_cease_fire("player", false) + game.forces.enemy.set_cease_fire("enemy", true) + + game.forces.neutral.set_cease_fire("neutral", true) + game.forces.neutral.set_cease_fire("player", true) + game.forces.neutral.set_cease_fire("enemy", false) +end + +lib.new = function(character_entity) + return Character.new(character_entity) +end + +return lib \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/attack.lua b/Kruise_Kontrol_Updated/script/character_interface/states/attack.lua new file mode 100644 index 00000000..69883071 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/attack.lua @@ -0,0 +1,184 @@ +local Attack = {} + +Attack.metatable = {__index = Attack} + +function Attack.new(Character, target, timeout) + local state = + { + type = "attack", + character = Character, + target = target or error("No target?"), + tick_to_timeout = (timeout and game.tick + timeout) or nil + } + return setmetatable(state, Attack.metatable) +end + +function Attack:prepare_gun() + local gun_inventory = self.character.entity.get_inventory(defines.inventory.character_guns) + local ammo_inventory = self.character.entity.get_inventory(defines.inventory.character_guns) + local index = self.character.entity.selected_gun_index + if gun_inventory[index].valid_for_read and ammo_inventory[index].valid_for_read then return true end + + for k = 1, 3 do + if gun_inventory[k].valid_for_read and ammo_inventory[k].valid_for_read then + self.character.entity.selected_gun_index = k + return true + end + end + + --todo, find a pair of gun and ammo in the inventory. + + return false +end + +function Attack:finish() + self.character.entity.shooting_state = {state = defines.shooting.not_shooting, position = {0,0}} + self.character:pop_state() +end + +function Attack:get_range() + return self:get_attack_parameters().range - (self.target.get_radius() + 1) +end + +function Attack:get_attack_parameters() + return game.item_prototypes[self.character.entity.get_inventory(defines.inventory.character_guns)[self.character.entity.selected_gun_index].name].attack_parameters +end + +function Attack:can_shoot() + if util.distance(self.character:get_position(), self.target.position) > self:get_range() then + return false + end + return self.character.entity.can_shoot(self.target, self.target.position) +end + +local does_damage = function(attack_parameters) + if not attack_parameters then return end + local ammo = attack_parameters.ammo_type + for k, trigger_item in pairs (ammo.action) do + for k, trigger_delivery in pairs (trigger_item.action_delivery) do + if trigger_delivery.type == "projectile" then return true end + for k, effect in pairs (trigger_delivery.target_effects or {}) do + if effect.type == "damage" then return true end + end + end + end +end + +local heals = function(attack_parameters) + if not attack_parameters then return end + local ammo = attack_parameters.ammo_type + for k, trigger_item in pairs (ammo.action) do + for k, trigger_delivery in pairs (trigger_item.action_delivery) do + for k, effect in pairs (trigger_delivery.target_effects or {}) do + if effect.type == "damage" and effect.damage.amount < 0 then return true end + end + end + end +end + +local find_grenade = function(inventory) + for k = 1, #inventory do + local stack = inventory[k] + if stack and stack.valid_for_read then + if stack.type == "capsule" then + local action = stack.prototype.capsule_action + if action.type == "throw" then + if does_damage(action.attack_parameters) then + return stack + end + end + end + end + end +end + +local find_fish = function(inventory) + for k = 1, #inventory do + local stack = inventory[k] + if stack and stack.valid_for_read then + if stack.type == "capsule" then + local action = stack.prototype.capsule_action + if action.type == "use-on-self" then + if heals(action.attack_parameters) then + return stack + end + end + end + end + end +end + +function Attack:find_and_use_capsule(position) + local player = self.character.entity.player + if not player then return end + + player.clear_cursor() + local inventory = player.get_main_inventory() + if not inventory then return end + + local stack + if self.character.entity.get_health_ratio() < 0.75 then + stack = find_fish(inventory) or find_grenade(inventory) + else + stack = find_grenade(inventory) + end + + if not stack then + return + end + + stack.swap_stack(player.cursor_stack) + + if player.cursor_stack.valid_for_read then + player.use_from_cursor(position) + end + + player.clear_cursor() + +end + +function Attack:update() + + if self.tick_to_timeout and game.tick > self.tick_to_timeout then + self:finish() + return + end + + if not (self.target and self.target.valid and self.target.get_health_ratio() and self.target.get_health_ratio() > 0) then + self:finish() + return + end + + if not self:prepare_gun() then + --for now? just fail + self:finish() + return + end + + if not self:can_shoot() then + --We are out of range, move to range + self.character.entity.shooting_state = {state = defines.shooting.not_shooting, position = self.target.position} + self.character.entity.clear_selected_entity() + self.character:move_to(self.target, self:get_range() - self.target.get_radius(), (self.tick_to_timeout and self.tick_to_timeout - game.tick) or nil) + return + end + + local direction = self.character:get_direction_to(self.target) + if self.character:distance(self.target) < (self:get_range() * 0.8) then + direction = (direction + defines.direction.south) % (defines.direction.south * 2) + self.character.entity.walking_state = {walking = true, direction = direction} + else + local way = (((self.target.unit_number or 1) % 2 == 0) and defines.direction.east) or defines.direction.west + direction = (direction + way) % (defines.direction.south * 2) + self.character.entity.walking_state = {walking = true, direction = direction} + end + self.character.entity.update_selected_entity(self.target.position) + self.character.entity.shooting_state = {state = defines.shooting.shooting_selected, position = self.target.position} + + if self.character:update_every_n_ticks(31) then + self:find_and_use_capsule(self.target.position) + end + +end + +return setmetatable(Attack, {__call = function(this, ...) return Attack.new(...) end}) diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/batch_job.lua b/Kruise_Kontrol_Updated/script/character_interface/states/batch_job.lua new file mode 100644 index 00000000..d25a2ec6 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/batch_job.lua @@ -0,0 +1,65 @@ +local Batch_job = {} + +Batch_job.metatable = {__index = Batch_job} + +function Batch_job.new(Character, job_type, entities) + local state = + { + type = "batch_job", + character = Character, + job_type = job_type, + entities = entities + } + return setmetatable(state, Batch_job.metatable) +end + +function Batch_job:finish() + self.character:pop_state() +end + + +function Batch_job:get_next_target() + + for k, entity in pairs (self.entities) do + if not (entity.valid) then + self.entities[k] = nil + elseif entity == self.target then + self.entities[k] = nil + end + end + + if not next(self.entities) then + return + end + + return self.character.entity.surface.get_closest(self.character:get_position(), self.entities) +end + +function Batch_job:update() + + self.target = self:get_next_target() + if not self.target then + self:finish() + return + end + + if self.job_type == "fuel" then + self.character:fuel_entity(self.target) + elseif self.job_type == "build" then + self.character:build_ghost(self.target) + elseif self.job_type == "mine" then + self.character:mine(self.target, -1) + elseif self.job_type == "attack" then + self.character:attack(self.target) + elseif self.job_type == "repair" then + self.character:repair(self.target) + elseif self.job_type == "upgrade" then + self.character:upgrade(self.target) + else + error("Unknown batch job type "..self.job_type) + end + + +end + +return setmetatable(Batch_job, {__call = function(this, ...) return Batch_job.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/build_ghost.lua b/Kruise_Kontrol_Updated/script/character_interface/states/build_ghost.lua new file mode 100644 index 00000000..b4d05de6 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/build_ghost.lua @@ -0,0 +1,164 @@ +local util = require("script/character_script_util") +local Build_ghost = {} + +Build_ghost.metatable = {__index = Build_ghost} + +function Build_ghost.new(Character, target) + local state = + { + type = "build_ghost", + character = Character, + target = target or error("No target?"), + check_index = nil + } + return setmetatable(state, Build_ghost.metatable) +end + +local items_to_place = {} + +local function get_items_to_place(entity) + local name = entity.ghost_name + if items_to_place[name] then + return items_to_place[name] + end + if entity.type == "entity-ghost" then + items_to_place[name] = game.entity_prototypes[name].items_to_place_this + elseif entity.type == "tile-ghost" then + items_to_place[name] = game.tile_prototypes[name].items_to_place_this + end + return items_to_place[name] +end + +function Build_ghost:fail() + self.character:pop_state() +end + +function Build_ghost:succeed() + self.character:pop_state() + self.character:wait(5) +end + +function Build_ghost:clear_obstacles() + local box = self.target.bounding_box + local entities = self.target.surface.find_entities_filtered{area = box, collision_mask = self.target.ghost_prototype.collision_mask} + if next(entities) == nil then + local box2 = {left_top = {x = box.left_top.x - 1, y = box.left_top.y - 1}, right_bottom = {x = box.right_bottom.x + 1, y = box.right_bottom.y + 1}} + entities = self.target.surface.find_entities_filtered{area = box2, collision_mask = self.target.ghost_prototype.collision_mask, to_be_deconstructed = true} + end + + for k, entity in pairs (entities) do + if entity.type == "cliff" then + local i = -1 + for j, state in pairs (self.character.state_stack) do + if state.type == "build_ghost" then + i = j + break + end + end + + if i ~= -1 then + table.remove(self.character.state_stack, i) + end + + for j = i - 2, 1, -1 do + table.remove(self.character.state_stack, j) + end + + self.character:update() + return + end + + if entity == self.character.entity then + local surface = entity.surface + for k, x in pairs({box.left_top.x - 1, box.right_bottom.x + 1}) do + for y = box.left_top.y - 1, box.right_bottom.y + 1, 1 do + if surface.can_place_entity{name = entity.name,position = {x, y}} then + self.character:move_to({x, y}, 0.25) + return + end + end + end + for k, y in pairs({box.left_top.y - 1, box.right_bottom.y + 1}) do + for x = box.left_top.x - 1, box.right_bottom.x + 1, 1 do + if surface.can_place_entity{name = entity.name,position = {x, y}} then + self.character:move_to({x, y}, 0.25) + return + end + end + end + elseif entity ~= self.target then + self.character:mine(entity) + end + end +end + +function Build_ghost:clear_trees(entities) + local box = self.target.bounding_box + for k, entity in pairs (entities) do + self.character:mine(entity) + end +end + +local ghost_type = +{ + ["entity-ghost"] = true, + ["tile-ghost"] = true +} + +local revive_opts = +{ + raise_revive = true +} +function Build_ghost:update() + if not self.target.valid then + self:fail() + return + end + + if not ghost_type[self.target.type] then + error("Non-ghost given to build ghost order?") + end + + if not self.item or not self.character:has_item(self.item.name, self.item.count) then + self.check_index, self.item = next(get_items_to_place(self.target), self.check_index) + end + + if not self.item then + self:fail() + return + end + + if not self.character:has_item(self.item.name, self.item.count) then + self.character:find_item(self.item.name, self.item.count) + return + end + + if self.character:distance(self.target) > self.character:get_build_distance() then + self.character:move_to(self.target, self.character:get_build_distance() - (self.target.get_radius() + 0.5)) + return + end + + self.character.entity.direction = self.character:get_direction_to(self.target) + + local entities = self.target.surface.find_entities_filtered{type = "tree", position = self.target.position, radius = self.target.get_radius() + 3, to_be_deconstructed = false} + if next(entities) ~= nil then + self:clear_trees(entities) + return + end + + local success, revive_entity = self.target.revive(revive_opts) + if not success then + self:clear_obstacles() + return + end + + self.character:remove_item(self.item.name, self.item.count) + self:succeed() + --[[ + if revive_entity and revive_entity.burner then + self.character:fuel_entity(revive_entity) + end + ]] +end + +return setmetatable(Build_ghost, {__call = function(this, ...) return Build_ghost.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/combat.lua b/Kruise_Kontrol_Updated/script/character_interface/states/combat.lua new file mode 100644 index 00000000..d64bb064 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/combat.lua @@ -0,0 +1,55 @@ +local Combat = {} + +Combat.metatable = {__index = Combat} + +function Combat.new(Character, target_position, radius) + local state = + { + type = "combat", + character = Character, + target_position = target_position, + radius = radius or 64 + } + return setmetatable(state, Combat.metatable) +end + +function Combat:finish() + self.character:pop_state() +end + +function Combat:find_target() + local nearby = self.character:nearest_enemy(self.radius) + if nearby then + return nearby + end + + local target = self.character:nearest_enemy(self.radius, self.target_position) + if target then return target end + + +end + +function Combat:update() + + local target = self:find_target() + if not target then + self:finish() + return + end + + if self.character.entity.get_health_ratio() <= 0.5 then + if self.character:distance(target) >= 100 then + self.character.entity.walking_state = {walking = false} + return + end + local direction = self.character:get_direction_to(target) + direction = (direction + defines.direction.south) % (defines.direction.south * 2) + self.character.entity.walking_state = {walking = true, direction = direction} + return + end + + self.character:attack(target, 100) + +end + +return setmetatable(Combat, {__call = function(this, ...) return Combat.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/craft_item.lua b/Kruise_Kontrol_Updated/script/character_interface/states/craft_item.lua new file mode 100644 index 00000000..c5eb21fd --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/craft_item.lua @@ -0,0 +1,144 @@ +local Craft_item = {} + +Craft_item.metatable = {__index = Craft_item} + +function Craft_item.new(Character, name, count) + local state = + { + type = "craft_item", + character = Character, + name = name, + count = count or 1, + need_new_recipe = true, + attempted_ingredients = {} + } + Character:print("Init craft item state for "..name.." x "..(count or 0)) + return setmetatable(state, Craft_item.metatable) +end + +local recipe_products_map = {} + +local get_recipes_for_product = function(name) + if recipe_products_map[name] then + return recipe_products_map[name] + end + + recipe_products_map[name] = {} + + for recipe_name, recipe in pairs (game.recipe_prototypes) do + for k, product in pairs (recipe.products) do + if product.name == name then + recipe_products_map[name][recipe_name] = true + break + end + end + end + + return recipe_products_map[name] + +end + +function Craft_item:finish() + self.character:pop_state() +end + + +function Craft_item:get_next_recipe() + -- Returns false if we have no more recipes we can use. + self.character:print("Finding next recipe to use for "..self.name) + local recipes = get_recipes_for_product(self.name) + local force_recipes = self.character.entity.force.recipes + + while true do + self.recipe = next(recipes, self.recipe) + + if self.recipe == nil then + --We have looped through all of them, none are worthy. + self.character:print("No worthy recipes ".. serpent.line(recipes)) + return + end + + if self.character:can_craft_recipe(force_recipes[self.recipe]) then + --It is a good recipe, lets try to use it. + self.need_new_recipe = false + return true + end + + end + --no recipes we can use, either tried or none unlocked, so we fail at crafting the item + + return + +end + +function Craft_item:get_ingredients() + local recipe = game.recipe_prototypes[self.recipe] + local to_try = {} + for k, ingredient in pairs (recipe.ingredients) do + + + if self.character:has_item(ingredient.name, ingredient.amount) then + -- We already have enough of this item. + elseif self.attempted_ingredients[ingredient.name] then + --We have already tried to get this ingredient (and failed). giveup. + self.character:print("Already attempted ingredient "..ingredient.name) + self.need_new_recipe = true + return + else + table.insert(to_try, ingredient) + end + end + + if not next(to_try) then + -- We have all the items I guess, return false to continue execution of main update + return + end + + for k, ingredient in pairs (to_try) do + self.attempted_ingredients[ingredient.name] = true + self.character:find_item(ingredient.name, ingredient.amount * self.count) + end + + return true +end + +function Craft_item:update() + self.character:print("Craft item update "..self.name) + + if self.character:has_item(self.name, self.count) then + --We already have enough of this item anyway. + self:finish() + return + end + + if self.character.entity.crafting_queue_size > 0 then + if game.tick % 2 == 0 then + self.character.entity.direction = (self.character.entity.direction + 1) % (2 * defines.direction.south) + end + -- We are already crafting, lets just wait and see what happens. + return + end + + if self.need_new_recipe and not self:get_next_recipe() then + self.character:print("Failed to find a recipe we can use for "..self.name) + self:finish() + return + end + + if self:get_ingredients() then + -- Returns true when its in the process of getting the ingredients. + return + end + + --At this point, we should have a recipe, and possibly the ingredients needed, lets see what the API says: + + if self.character.entity.get_craftable_count(self.recipe) < 1 then + -- We can't craft any, well, I guess we tried, pick a new recipe next update + self.need_new_recipe = true + return + end + self.character.entity.begin_crafting{recipe = self.recipe, count = 1} + self.attempted_ingredients = {} +end + +return setmetatable(Craft_item, {__call = function(this, ...) return Craft_item.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/deferred_job.lua b/Kruise_Kontrol_Updated/script/character_interface/states/deferred_job.lua new file mode 100644 index 00000000..deb213f6 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/deferred_job.lua @@ -0,0 +1,27 @@ +local Deferred_job = {} + +Deferred_job.metatable = {__index = Deferred_job} + +function Deferred_job.new(Character, position, entity) + local state = + { + type = "Deferred_job", + character = Character, + position = position, + entity = entity + } + return setmetatable(state, Deferred_job.metatable) +end + +function Deferred_job:finish() + +end + +function Deferred_job:update() + + self.character:pop_state() + self.character:determine_job(self.entity, self.position) + +end + +return setmetatable(Deferred_job, {__call = function(this, ...) return Deferred_job.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/find_and_batch.lua b/Kruise_Kontrol_Updated/script/character_interface/states/find_and_batch.lua new file mode 100644 index 00000000..d461b84c --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/find_and_batch.lua @@ -0,0 +1,77 @@ +local Find_and_batch = {} + +Find_and_batch.metatable = {__index = Find_and_batch} + +function Find_and_batch.new(Character, job_type, param) + local state = + { + type = "find_and_batch", + character = Character, + job_type = job_type, + param = param, + fail_cache = {} + } + return setmetatable(state, Find_and_batch.metatable) +end + +function Find_and_batch:finish() + self.character:pop_state() +end + +local index = function(entity) + return entity.unit_number or script.register_on_entity_destroyed(entity) +end + +function Find_and_batch:find() + local entities = self.character:find_nearby_entities(self.param.radius or 64, self.param) + + if self.job_type == "repair" then + for k, entity in pairs (entities) do + if not (entity.get_health_ratio() and entity.get_health_ratio() < 1) then + entities[k] = nil + end + end + end + + if self.job_type == "fuel" then + for k, entity in pairs (entities) do + if not entity.burner then + entities[k] = nil + end + end + end + + if self.job_type == "mine" then + for k, entity in pairs (entities) do + if entity.type == "deconstructible-tile-proxy" then + entities[k] = nil + end + end + end + + local fail_cache = self.fail_cache + for k, entity in pairs (entities) do + local key = index(entity) + if fail_cache[key] then + entities[k] = nil + else + fail_cache[key] = true + end + end + + return entities +end + +function Find_and_batch:update() + + local entities = self:find() + if not next(entities) then + self:finish() + return + end + + self.character:batch_job(self.job_type, entities) + +end + +return setmetatable(Find_and_batch, {__call = function(this, ...) return Find_and_batch.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/find_item.lua b/Kruise_Kontrol_Updated/script/character_interface/states/find_item.lua new file mode 100644 index 00000000..8103bc9c --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/find_item.lua @@ -0,0 +1,177 @@ +local Find_item = {} + +Find_item.metatable = { __index = Find_item } + +function Find_item.new(Character, name, count, radius) + local state = + { + type = "find_item", + character = Character, + name = name or error("No name given"), + count = count or 0, + radius = radius or 64 + } + + if state.count == 0 then + state.count = math.ceil(game.item_prototypes[state.name].stack_size * 0.25) + end + + return setmetatable(state, Find_item.metatable) +end + +function Find_item:finish(dont_update_state) + self.character:pop_state(dont_update_state) +end + +function Find_item:fail() + --In this case, we try to craft the item we are looking for. + self.character:print("Couldn't find " .. self.name) + self:finish(true) + self.character:craft_item(self.name, self.count) +end + +local find_types = +{ + ["container"] = 0, + ["furnace"] = 0, + ["assembling-machine"] = 0, + ["logistic-container"] = 0, + ["mining-drill"] = 5 +} + +local find_params = +{ + type = + { + "container", + "logistic-container", + "furnace", + "assembling-machine", + "mining-drill", + } +} + +function Find_item:find_new_target() + local entities = self.character:find_nearby_entities(self.radius, find_params) + for k, entity in pairs(entities) do + local inventory = entity.get_output_inventory() + if not inventory then + entities[k] = nil + elseif inventory.get_item_count(self.name) <= find_types[entity.type] then + entities[k] = nil + end + end + + if not next(entities) then return end + return self.character:get_closest(entities) +end + +local belt_params = +{ + type = { "transport-belt" } +} + +function Find_item:find_belt_target() + local entities = self.character:find_nearby_entities(self.radius, belt_params) + for k, entity in pairs(entities) do + local has = false + for i = 1, entity.get_max_transport_line_index() do + local line = entity.get_transport_line(i) + if line.get_item_count(self.name) > 0 then + has = true + break + end + end + if not has then + entities[k] = nil + end + end + + if not next(entities) then + return + end + + return self.character:get_closest(entities) +end + +local product_cache = {} +local get_products = function(entity) + local name = entity.name + local products = product_cache[name] + if products then return products end + products = {} + + if entity.prototype.mineable_properties.products == nil then + return products + end + + for k, product in pairs(entity.prototype.mineable_properties.products) do + if product.type == "item" then + products[product.name] = true + end + end + product_cache[name] = products + return products +end + +local mine_params = +{ + type = { "tree", "resource", "simple-entity" } +} + +function Find_item:find_mine_target() + local entities = self.character:find_nearby_entities(self.radius, mine_params) + for k, entity in pairs(entities) do + if not get_products(entity)[self.name] then + entities[k] = nil + end + end + + if not next(entities) then + return + end + + return self.character:get_closest(entities) +end + +local stack_size_cache = {} +local get_stack_size = function(name) + local size = stack_size_cache[name] + if size then return size end + size = game.item_prototypes[name].stack_size + stack_size_cache[name] = size + return size +end + +function Find_item:update() + self.character:print("Find item update " .. self.name) + + local needed = self.count - self.character.entity.get_item_count(self.name) + if needed <= 0 then + --We already have enough of this item anyway. + self:finish() + return + end + + local target = self:find_new_target() + if target then + self.character:take_item(target, self.name, math.max(needed, get_stack_size(self.name))) + return + end + + local belt_target = self:find_belt_target() + if belt_target then + self.character:take_item_from_belt(belt_target, self.name, math.max(needed, get_stack_size(self.name))) + return + end + + local mine_target = self:find_mine_target() + if mine_target then + self.character:mine(mine_target, math.max(needed, get_stack_size(self.name))) + return + end + + self:fail() +end + +return setmetatable(Find_item, { __call = function(this, ...) return Find_item.new(...) end }) diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/follow.lua b/Kruise_Kontrol_Updated/script/character_interface/states/follow.lua new file mode 100644 index 00000000..25f0e685 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/follow.lua @@ -0,0 +1,39 @@ +local Follow = {} + +Follow.metatable = {__index = Follow} + +function Follow.new(Character, target, distance) + local state = + { + type = "follow", + character = Character, + target = target or error("No target?"), + distance = distance or 3 + } + return setmetatable(state, Follow.metatable) +end + +function Follow:finish() + self.character:pop_state() +end + +function Follow:update() + + if not (self.target.valid) then + self:finish() + return + end + + if util.distance(self.character:get_position(), self.target.position) > self.distance then + --We are out of range, move to range + self.character:move_to(self.target, self.distance - 1) + return + end + + if self.target.type == "character" then + self.character.entity.walking_state = self.target.walking_state + end + +end + +return setmetatable(Follow, {__call = function(this, ...) return Follow.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/fuel_entity.lua b/Kruise_Kontrol_Updated/script/character_interface/states/fuel_entity.lua new file mode 100644 index 00000000..6f50827e --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/fuel_entity.lua @@ -0,0 +1,103 @@ +local State = {} + +State.metatable = {__index = State} + +local fuel_threshold = 5 + +local items = {} + +local get_category_items = function(category) + if items[category] then + return items[category] + end + + local unsorted = {} + for item_name, item in pairs (game.item_prototypes) do + if item.fuel_category and item.fuel_category == category then + table.insert(unsorted, {name = item_name, value = item.fuel_value}) + end + end + + table.sort(unsorted, function(a, b) return a.value > b.value end) + local map = {} + for k, v in pairs (unsorted) do + map[v.name] = true + end + items[category] = map + + return map +end + +local get_burner_items = function(burner) + local items = {} + for name, bool in pairs (burner.fuel_categories) do + for item, bool in pairs (get_category_items(name)) do + items[item] = true + end + end + return items +end + + +function State.new(Character, target) + local state = + { + type = "fuel_entity", + character = Character, + target = target or error("No target?"), + items = get_burner_items(target.burner), + current_item = nil + } + return setmetatable(state, State.metatable) +end + +function State:finish() + self.character:pop_state() +end + +function State:update() + + if not (self.target.valid) then + self:finish() + return + end + + local inventory = self.target.get_fuel_inventory() + + if not inventory then + self:finish() + return + end + + if not inventory.is_empty() then + self:finish() + return + end + + + if self.current_item then + + if self.character:has_item(self.current_item, fuel_threshold) then + self.character:put_item(self.target, self.current_item, fuel_threshold) + return + end + + if not self.find_attempted then + self.find_attempted = true + self.character:find_item(self.current_item, fuel_threshold) + return + end + end + + self.current_item = next(self.items, self.current_item) + self.find_attempted = false + + if not self.current_item then + --We have gone through all items, none available. + self:finish() + return + end + +end + +return setmetatable(State, {__call = function(this, ...) return State.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/idle.lua b/Kruise_Kontrol_Updated/script/character_interface/states/idle.lua new file mode 100644 index 00000000..500d9730 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/idle.lua @@ -0,0 +1,28 @@ +local Idle = +{ + type = "idle" +} + +Idle.metatable = {__index = Idle} + +function Idle.new(Character, ticks_to_wait) + local idle_state = + { + type = Idle.type, + character = Character, + finish_tick = game.tick + ticks_to_wait + } + return setmetatable(idle_state, Idle.metatable) +end + +function Idle:update() + if game.tick > self.finish_tick then + self:succeed() + end +end + +function Idle:succeed() + self.character:pop_state() +end + +return setmetatable(Idle, {__call = function(this, ...) return Idle.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/json.lua b/Kruise_Kontrol_Updated/script/character_interface/states/json.lua new file mode 100644 index 00000000..711ef786 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/json.lua @@ -0,0 +1,388 @@ +-- +-- json.lua +-- +-- Copyright (c) 2020 rxi +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy of +-- this software and associated documentation files (the "Software"), to deal in +-- the Software without restriction, including without limitation the rights to +-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +-- of the Software, and to permit persons to whom the Software is furnished to do +-- so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in all +-- copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +-- SOFTWARE. +-- + +local json = { _version = "0.1.2" } + +------------------------------------------------------------------------------- +-- Encode +------------------------------------------------------------------------------- + +local encode + +local escape_char_map = { + [ "\\" ] = "\\", + [ "\"" ] = "\"", + [ "\b" ] = "b", + [ "\f" ] = "f", + [ "\n" ] = "n", + [ "\r" ] = "r", + [ "\t" ] = "t", +} + +local escape_char_map_inv = { [ "/" ] = "/" } +for k, v in pairs(escape_char_map) do + escape_char_map_inv[v] = k +end + + +local function escape_char(c) + return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte())) +end + + +local function encode_nil(val) + return "null" +end + + +local function encode_table(val, stack) + local res = {} + stack = stack or {} + + -- Circular reference? + if stack[val] then error("circular reference") end + + stack[val] = true + + if rawget(val, 1) ~= nil or next(val) == nil then + -- Treat as array -- check keys are valid and it is not sparse + local n = 0 + for k in pairs(val) do + if type(k) ~= "number" then + error("invalid table: mixed or invalid key types") + end + n = n + 1 + end + if n ~= #val then + error("invalid table: sparse array") + end + -- Encode + for i, v in ipairs(val) do + table.insert(res, encode(v, stack)) + end + stack[val] = nil + return "[" .. table.concat(res, ",") .. "]" + + else + -- Treat as an object + for k, v in pairs(val) do + if type(k) ~= "string" then + error("invalid table: mixed or invalid key types") + end + table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) + end + stack[val] = nil + return "{" .. table.concat(res, ",") .. "}" + end +end + + +local function encode_string(val) + return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"' +end + + +local function encode_number(val) + -- Check for NaN, -inf and inf + if val ~= val or val <= -math.huge or val >= math.huge then + error("unexpected number value '" .. tostring(val) .. "'") + end + return string.format("%.14g", val) +end + + +local type_func_map = { + [ "nil" ] = encode_nil, + [ "table" ] = encode_table, + [ "string" ] = encode_string, + [ "number" ] = encode_number, + [ "boolean" ] = tostring, +} + + +encode = function(val, stack) + local t = type(val) + local f = type_func_map[t] + if f then + return f(val, stack) + end + error("unexpected type '" .. t .. "'") +end + + +function json.encode(val) + return ( encode(val) ) +end + + +------------------------------------------------------------------------------- +-- Decode +------------------------------------------------------------------------------- + +local parse + +local function create_set(...) + local res = {} + for i = 1, select("#", ...) do + res[ select(i, ...) ] = true + end + return res +end + +local space_chars = create_set(" ", "\t", "\r", "\n") +local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",") +local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u") +local literals = create_set("true", "false", "null") + +local literal_map = { + [ "true" ] = true, + [ "false" ] = false, + [ "null" ] = nil, +} + + +local function next_char(str, idx, set, negate) + for i = idx, #str do + if set[str:sub(i, i)] ~= negate then + return i + end + end + return #str + 1 +end + + +local function decode_error(str, idx, msg) + local line_count = 1 + local col_count = 1 + for i = 1, idx - 1 do + col_count = col_count + 1 + if str:sub(i, i) == "\n" then + line_count = line_count + 1 + col_count = 1 + end + end + error( string.format("%s at line %d col %d", msg, line_count, col_count) ) +end + + +local function codepoint_to_utf8(n) + -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa + local f = math.floor + if n <= 0x7f then + return string.char(n) + elseif n <= 0x7ff then + return string.char(f(n / 64) + 192, n % 64 + 128) + elseif n <= 0xffff then + return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128) + elseif n <= 0x10ffff then + return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, + f(n % 4096 / 64) + 128, n % 64 + 128) + end + error( string.format("invalid unicode codepoint '%x'", n) ) +end + + +local function parse_unicode_escape(s) + local n1 = tonumber( s:sub(1, 4), 16 ) + local n2 = tonumber( s:sub(7, 10), 16 ) + -- Surrogate pair? + if n2 then + return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000) + else + return codepoint_to_utf8(n1) + end +end + + +local function parse_string(str, i) + local res = "" + local j = i + 1 + local k = j + + while j <= #str do + local x = str:byte(j) + + if x < 32 then + decode_error(str, j, "control character in string") + + elseif x == 92 then -- `\`: Escape + res = res .. str:sub(k, j - 1) + j = j + 1 + local c = str:sub(j, j) + if c == "u" then + local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) + or str:match("^%x%x%x%x", j + 1) + or decode_error(str, j - 1, "invalid unicode escape in string") + res = res .. parse_unicode_escape(hex) + j = j + #hex + else + if not escape_chars[c] then + decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") + end + res = res .. escape_char_map_inv[c] + end + k = j + 1 + + elseif x == 34 then -- `"`: End of string + res = res .. str:sub(k, j - 1) + return res, j + 1 + end + + j = j + 1 + end + + decode_error(str, i, "expected closing quote for string") +end + + +local function parse_number(str, i) + local x = next_char(str, i, delim_chars) + local s = str:sub(i, x - 1) + local n = tonumber(s) + if not n then + decode_error(str, i, "invalid number '" .. s .. "'") + end + return n, x +end + + +local function parse_literal(str, i) + local x = next_char(str, i, delim_chars) + local word = str:sub(i, x - 1) + if not literals[word] then + decode_error(str, i, "invalid literal '" .. word .. "'") + end + return literal_map[word], x +end + + +local function parse_array(str, i) + local res = {} + local n = 1 + i = i + 1 + while 1 do + local x + i = next_char(str, i, space_chars, true) + -- Empty / end of array? + if str:sub(i, i) == "]" then + i = i + 1 + break + end + -- Read token + x, i = parse(str, i) + res[n] = x + n = n + 1 + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "]" then break end + if chr ~= "," then decode_error(str, i, "expected ']' or ','") end + end + return res, i +end + + +local function parse_object(str, i) + local res = {} + i = i + 1 + while 1 do + local key, val + i = next_char(str, i, space_chars, true) + -- Empty / end of object? + if str:sub(i, i) == "}" then + i = i + 1 + break + end + -- Read key + if str:sub(i, i) ~= '"' then + decode_error(str, i, "expected string for key") + end + key, i = parse(str, i) + -- Read ':' delimiter + i = next_char(str, i, space_chars, true) + if str:sub(i, i) ~= ":" then + decode_error(str, i, "expected ':' after key") + end + i = next_char(str, i + 1, space_chars, true) + -- Read value + val, i = parse(str, i) + -- Set + res[key] = val + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "}" then break end + if chr ~= "," then decode_error(str, i, "expected '}' or ','") end + end + return res, i +end + + +local char_func_map = { + [ '"' ] = parse_string, + [ "0" ] = parse_number, + [ "1" ] = parse_number, + [ "2" ] = parse_number, + [ "3" ] = parse_number, + [ "4" ] = parse_number, + [ "5" ] = parse_number, + [ "6" ] = parse_number, + [ "7" ] = parse_number, + [ "8" ] = parse_number, + [ "9" ] = parse_number, + [ "-" ] = parse_number, + [ "t" ] = parse_literal, + [ "f" ] = parse_literal, + [ "n" ] = parse_literal, + [ "[" ] = parse_array, + [ "{" ] = parse_object, +} + + +parse = function(str, idx) + local chr = str:sub(idx, idx) + local f = char_func_map[chr] + if f then + return f(str, idx) + end + decode_error(str, idx, "unexpected character '" .. chr .. "'") +end + + +function json.decode(str) + if type(str) ~= "string" then + error("expected argument of type string, got " .. type(str)) + end + local res, idx = parse(str, next_char(str, 1, space_chars, true)) + idx = next_char(str, idx, space_chars, true) + if idx <= #str then + decode_error(str, idx, "trailing garbage") + end + return res +end + + +return json diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/mining.lua b/Kruise_Kontrol_Updated/script/character_interface/states/mining.lua new file mode 100644 index 00000000..5fa253a5 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/mining.lua @@ -0,0 +1,105 @@ +local Mining = {} + +Mining.metatable = {__index = Mining} + +function Mining.new(Character, target, amount) + local state = + { + type = "mining", + character = Character, + target = target or error("No mining target?"), + amount = amount or 1, --related to mining resources, how many times we want to mine it. + progress = 0 + } + return setmetatable(state, Mining.metatable) +end + +function Mining:cleanup() + self:update_player_entity_setting(true) +end + +function Mining:finish() + self.character.entity.mining_state = {mining = false} + self.character.entity.clear_selected_entity() + self:cleanup() + self.character:pop_state() +end + +function Mining:get_selection_position() + if self.selection_position then return self.selection_position end + + self.selection_position = self.target.position + + self.character.entity.update_selected_entity(self.target.position) + if self.character.entity.selected == self.target then + return true + end + + local box = self.target.selection_box + + for i, x in pairs({box.left_top.x, box.right_bottom.x}) do + for j, y in pairs({box.left_top.y, box.right_bottom.y}) do + local position = {x, y} + self.character.entity.update_selected_entity(position) + self.character.entity.selected = self.target + if self.character.entity.selected == self.target then + self.selection_position = position + return true + end + end + end + + return false + +end + +function Mining:update_player_entity_setting(bool) + if self.character.entity.player then + if self.character.entity.player.valid then + self.character.entity.player.game_view_settings.update_entity_selection = bool + end + end +end + +function Mining:update() + if not self.target.valid then + --I guess we did it! + self:finish() + return + end + + if not (self.target.minable and self.target.prototype.mineable_properties.minable and not self.target.prototype.mineable_properties.required_fluid) then + --We cannot mine it + self:finish() + return + end + + if not self.character:can_reach_entity(self.target) then + --We are out of range, move to range + self:update_player_entity_setting(true) + self.character:move_to(self.target, self.character:get_mining_distance(self.target.type) - self.target.get_radius()) + return + end + + if not self:get_selection_position() then + self:finish() + return + end + + + self:update_player_entity_setting(false) + self.character.entity.mining_state = {mining = true, position = self.selection_position} + + if self.progress > self.character:get_mining_progress() then + --Our progress is higher than the current, which means we must have mined a piece + self.amount = self.amount - 1 + if self.amount == 0 then + self:finish() + return + end + end + + self.progress = self.character:get_mining_progress() +end + +return setmetatable(Mining, {__call = function(this, ...) return Mining.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/moving.lua b/Kruise_Kontrol_Updated/script/character_interface/states/moving.lua new file mode 100644 index 00000000..88052c26 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/moving.lua @@ -0,0 +1,335 @@ +local Moving = {} + +Moving.metatable = {__index = Moving} + +function Moving.new(Character, destination, radius, timeout) + if not destination.valid then + --For position type hacks. + destination.valid = true + end + local state = + { + type = "moving", + character = Character, + destination = destination or error("No destination given for creating a moving state."), + radius = radius or 0.5, + fail_count = -1, + tick_to_timeout = (timeout and game.tick + timeout) or nil + } + return setmetatable(state, Moving.metatable) +end + +function Moving:cleanup() + self:clear_path() +end + +function Moving:get_destination() + --Since destination can be either an entity or a position directly... + return (self.destination and self.destination.position) or {self.destination[1], self.destination[2]} +end + +function Moving:clear_path() + if not self.path then return end + for k, node in pairs (self.path) do + if node.rendering then + rendering.destroy(node.rendering) + node.rendering = nil + end + end + if self.next_node_render then + rendering.destroy(self.next_node_render) + end +end + +function Moving:render_path() + local path = self.path + if not path then return end + for k, node in pairs (path) do + local next_index, next_node = next(path, k) + if next_node then + node.rendering = rendering.draw_line + { + color = {0, 1, 0, 0.5}, + width = 3, + dash_length = 0.5, + gap_length = 0.5, + from = node.position, + to = next_node.position, + surface = self.character.entity.surface, + players = {self.character.player}, + visible = true, + draw_on_ground = true, + only_in_alt_mode = false + } + end + end + self:render_path_to_node() +end + +function Moving:render_path_to_node() + if self.next_node_render then + rendering.destroy(self.next_node_render) + end + local node = self.path[1] + if not node then return end + self.next_node_render = rendering.draw_line + { + color = {0, 1, 0, 0.5}, + width = 3, + dash_length = 0.5, + gap_length = 0.5, + to = self.character.entity, + from = node.position, + surface = self.character.entity.surface, + players = {self.character.player}, + visible = true, + draw_on_ground = true, + only_in_alt_mode = false + } +end + +function Moving:get_destination_radius() + return (self.destination and self.destination.get_radius and self.destination.get_radius() + self.radius) or self.radius +end + +local flags = {cache = false, allow_destroy_friendly_entities = false, prefer_straight_paths = true, no_break = true} +function Moving:request_path() + if self.path_request_index then return end + local entity = self.character.entity + local destination = self:get_destination() + local radius = self:get_destination_radius() + --error(serpent.block(destination)) + + self.path_request_index = entity.surface.request_path( + { + bounding_box = entity.prototype.collision_box, + collision_mask = entity.prototype.collision_mask, + start = entity.position, + goal = destination, + force = entity.force, + radius = radius, + can_open_gates = true, + path_resolution_modifier = self.fail_count, + pathfind_flags = flags, + entity_to_ignore = entity + }) + + self.requested_destination = destination + self.character:print("Requested a path. ") +end + +function Moving:finish() + self.character:print("No more nodes, we must be at the destination?") + self.character.entity.walking_state = {walking = false} + self.character:pop_state() + self:cleanup() +end + +function Moving:move_to_next_node() + local node = self.path[1] + --self.character:print("Reached a waypoint.") + --self.character.entity.teleport(node.position) + table.remove(self.path, 1) + if node.rendering then + rendering.destroy(node.rendering) + node.rendering = nil + end + self:render_path_to_node() +end + +function Moving:follow_path() + + local node = self.path[1] + if not node then + self:finish() + return + end + + if util.distance(node.position, self.character:get_position()) < (self.character:get_speed()) then + self:move_to_next_node() + end + + local node = self.path[1] + if not node then + self:finish() + return + end + + if node.needs_destroy_to_reach then + if self:clear_obstacles(node.position) then + return + end + end + + self.character.entity.walking_state = {walking = true, direction = self.character:get_direction_to(node.position)} + +end + +local is_near = function(a, b) + return math.abs(a - b) < 1 +end + +local rect_dist = function(position_1, position_2) + local x1 = position_1.x or position_1[1] + local x2 = position_2.x or position_2[1] + + local y1 = position_1.y or position_1[2] + local y2 = position_2.y or position_2[2] + + return math.abs(x1 - x2) + math.abs(y1 - y2) +end + +function Moving:check_path() + --This is for the case where we are moving to an entity that might have moved! + if not self.destination.position then return end + if not self.requested_destination then return end + + local destination = self:get_destination() + if rect_dist(destination, self.requested_destination) < 1 then return end + + if util.distance(self.character:get_position(), destination) < self.radius then + return true + end + + --Request a new path, but keep walking along the old as its probably its in the right direction still. + self.character:print("Target moved, recalculating path") + self:request_path() + +end + +function Moving:clear_obstacles(position) + local force = self.character.entity.force + local entities = self.character.entity.surface.find_entities_filtered + { + position = self.character:get_position(), + radius = self.character.entity.get_radius() + 0.5, + collision_mask = self.character.entity.prototype.collision_mask + } + + local stand = false + for k, entity in pairs (entities) do + if entity ~= self.character.entity and entity.type ~= "cliff" then + stand = true + if not force.get_cease_fire(entity.force) then + self.character:attack(entity) + end + self.character:mine(entity) + end + end + + if stand then + self.character.entity.walking_state = {walking = false, direction = self.character:get_direction_to(position)} + return true + end + + return false + +end + +function Moving:check_stuck() + if not (self.path and self.path[1]) then return end + + local node = self.path[1] + + if node == self.last_stuck_node then + self:request_path() + end + + self.last_stuck_node = node + +end + +function Moving:update() + + if self.tick_to_timeout and game.tick > self.tick_to_timeout then + self:finish() + return + end + + + self.character.entity.walking_state = {walking = false} + + if not self.destination.valid then + self:finish() + return + end + + if self.character:update_every_n_ticks(60) then + self:check_stuck() + end + + if self.character:update_every_n_ticks(100) then + if self:check_path() then + --Will return true if it checks and we are actually already in range. + self:finish() + return + end + end + + if not self.path then + + if self.character:distance(self.destination) <= (self.radius + 0.1) then + self:finish() + return + end + + self:request_path() + return + end + + self:follow_path() + +end + +local remove = table.remove + +function Moving:on_path_recieved(event) + + if not self.destination.valid then + self:finish() + return + end + + self.path_request_index = nil + self.character:print("Path request finished") + local path = event.path + if not path then + self.path = nil + self.fail_count = self.fail_count + 1 + if self.fail_count > 3 then + self:finish() + end + return + end + + local destination = self:get_destination() + + local dist_to_dest = rect_dist(self.character:get_position(), destination) + + for k, node in pairs (path) do + local next = path[k + 1] + if not next then break end + + local distance = rect_dist(node.position, destination) + if distance > rect_dist(next.position, destination) and distance > dist_to_dest then + remove(path, k) + else + break + end + end + + self:clear_path() + self.path = event.path + self:render_path() +end + +function Moving:on_script_path_request_finished(event) + if event.name == defines.events.on_script_path_request_finished then + if event.id == self.path_request_index then + self:on_path_recieved(event) + end + end +end + + +return setmetatable(Moving, {__call = function(this, ...) return Moving.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/moving_spider.lua b/Kruise_Kontrol_Updated/script/character_interface/states/moving_spider.lua new file mode 100644 index 00000000..103a26ac --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/moving_spider.lua @@ -0,0 +1,138 @@ +local util = require("script/character_script_util") +local Moving_spider = {} + +Moving_spider.metatable = {__index = Moving_spider} + +function Moving_spider.new(Character, destination, radius) + if not destination.valid then + --For position type hacks. + destination.valid = true + end + + local state = + { + type = "moving_spider", + character = Character, + spider = Character.entity.vehicle, + destination = destination or error("No destination given for creating a moving state."), + radius = radius or 0.5 + } + return setmetatable(state, Moving_spider.metatable) +end + +function Moving_spider:cleanup() +end + +function Moving_spider:get_destination() + --Since destination can be either an entity or a position directly... + return (self.destination and self.destination.position) or {self.destination[1], self.destination[2]} +end + +function Moving_spider:get_destination_radius() + return (self.destination and self.destination.get_radius and self.destination.get_radius() + self.radius) or self.radius +end + +local spider_mask = {"colliding-with-tiles-only", "water-tile"} +local flags = {cache = false, allow_destroy_friendly_entities = false, prefer_straight_paths = true, no_break = true} +function Moving_spider:request_path() + if self.path_request_index then return end + local entity = self.spider + local destination = self:get_destination() + local radius = self:get_destination_radius() + --error(serpent.block(destination)) + + self.path_request_index = entity.surface.request_path( + { + bounding_box = entity.prototype.collision_box, + collision_mask = spider_mask, + start = entity.position, + goal = destination, + force = entity.force, + radius = radius, + can_open_gates = true, + path_resolution_modifier = -3, + pathfind_flags = flags, + entity_to_ignore = entity + }) + + self.requested_destination = destination + self.character:print("Requested a path. ") +end + +function Moving_spider:finish() + self.character:pop_state() + self:cleanup() +end + +function Moving_spider:update() + + if not self.destination.valid then + self:finish() + return + end + + if not (self.spider and self.spider.valid and self.spider.type == "spider-vehicle") then + self:finish() + return + end + + self:request_path() + +end + +local remove = table.remove + +function Moving_spider:on_path_recieved(event) + + if not self.destination.valid then + self:finish() + return + end + + if not (self.spider and self.spider.valid and self.spider.type == "spider-vehicle") then + self:finish() + return + end + + --self.path_request_index = nil + --self.character:print("Path request finished") + local path = event.path + if not path then + self:finish() + return + end + + for k, node in pairs (path) do + local next = path[k + 1] + if not next then break end + node.orientation_to_next = util.get_orientation_to(node.position, next.position) + end + + for k = (#path), 1, -1 do + local node = path[k] + local next = path[k - 1] + if not (node and next) then break end + + if node.orientation_to_next == next.orientation_to_next then + remove(path, k) + end + end + + self.spider.autopilot_destination = nil + local add = self.spider.add_autopilot_destination + for k, node in pairs (event.path) do + add(node.position) + end + + self:finish() +end + +function Moving_spider:on_script_path_request_finished(event) + if event.name == defines.events.on_script_path_request_finished then + if event.id == self.path_request_index then + self:on_path_recieved(event) + end + end +end + +return setmetatable(Moving_spider, {__call = function(this, ...) return Moving_spider.new(...) end}) diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/moving_vehicle.lua b/Kruise_Kontrol_Updated/script/character_interface/states/moving_vehicle.lua new file mode 100644 index 00000000..a266459d --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/moving_vehicle.lua @@ -0,0 +1,393 @@ +local util = require("script/character_script_util") +local Moving_vehicle = {} + +Moving_vehicle.metatable = {__index = Moving_vehicle} + +function Moving_vehicle.new(Character, destination, radius) + if not destination.valid then + --For position type hacks. + destination.valid = true + end + local state = + { + type = "moving_vehicle", + character = Character, + destination = destination or error("No destination given for creating a moving state."), + radius = radius or 0.5, + fail_count = -1, + } + return setmetatable(state, Moving_vehicle.metatable) +end + +function Moving_vehicle:cleanup() + self:clear_path() +end + +function Moving_vehicle:get_destination() + --Since destination can be either an entity or a position directly... + return (self.destination and self.destination.position) or {self.destination[1], self.destination[2]} +end + +function Moving_vehicle:clear_path() + if not self.path then return end + for k, node in pairs (self.path) do + if node.rendering then + rendering.destroy(node.rendering) + node.rendering = nil + end + end + if self.next_node_render then + rendering.destroy(self.next_node_render) + end +end + +function Moving_vehicle:render_path() + local path = self.path + if not path then return end + for k, node in pairs (path) do + local next_index, next_node = next(path, k) + if next_node then + node.rendering = rendering.draw_line + { + color = {0, 1, 0, 0.5}, + width = 3, + dash_length = 0.5, + gap_length = 0.5, + from = node.position, + to = next_node.position, + surface = self.character.entity.surface, + players = {self.character.player}, + visible = true, + draw_on_ground = true, + only_in_alt_mode = false + } + end + end + self:render_path_to_node() +end + +function Moving_vehicle:get_destination_radius() + return (self.destination and self.destination.get_radius and self.destination.get_radius() + self.radius) or self.radius +end + +local flags = {cache = false, allow_destroy_friendly_entities = false, prefer_straight_paths = true, no_break = true} + +function Moving_vehicle:request_path() + if self.path_request_index then return end + local entity = self.character.entity.vehicle + local destination = self:get_destination() + local radius = self:get_destination_radius() + --error(serpent.block(destination)) + local r = entity.get_radius() * 1.2 + + self.path_request_index = entity.surface.request_path( + { + bounding_box = {{-r, -r},{r, r}}, + collision_mask = entity.prototype.collision_mask, + start = entity.position, + goal = destination, + --force = entity.force, + force = "neutral", + radius = radius, + can_open_gates = true, + path_resolution_modifier = -3, + pathfind_flags = flags, + entity_to_ignore = entity + }) + + self.requested_destination = destination + self.character:print("Requested a path. ") +end + +function Moving_vehicle:finish() + if self.character.entity.vehicle then + self.character.entity.vehicle.riding_state = {acceleration = defines.riding.acceleration.braking, direction = defines.riding.direction.straight} + end + self.character:pop_state() + self:cleanup() +end + +function Moving_vehicle:move_to_next_node() + local node = self.path[1] + --self.character:print("Reached a waypoint.") + table.remove(self.path, 1) + if node.rendering then + rendering.destroy(node.rendering) + node.rendering = nil + end + self.total_distance = self.total_distance - (node.distance_to_next or 0) + self:render_path_to_node() +end + +function Moving_vehicle:render_path_to_node() + if self.next_node_render then + rendering.destroy(self.next_node_render) + end + local node = self.path[1] + if not node then return end + self.next_node_render = rendering.draw_line + { + color = {0, 1, 0, 0.5}, + width = 3, + dash_length = 0.5, + gap_length = 0.5, + to = self.character.entity, + from = node.position, + surface = self.character.entity.surface, + players = {self.character.player}, + visible = true, + draw_on_ground = true, + only_in_alt_mode = false + } +end + +local get_orientation_to = util.get_orientation_to + +function Moving_vehicle:follow_path() + + local vehicle = self.character.entity.vehicle + local position = vehicle.position + local rotation_speed = vehicle.prototype.rotation_speed + local speed = vehicle.speed + if vehicle.prototype.tank_driving then + --rotation_speed = rotation_speed ^ 0.5 + rotation_speed = rotation_speed * 1.75 + else + --rotation_speed = rotation_speed * (speed ^ 0.5) + end + local vehicle_orientation = vehicle.orientation + local distance_to_node + local node + local target_orientation + local orientation_diff + while true do + node = self.path[1] + if not node then + self:finish() + return + end + distance_to_node = util.distance(position, node.position) + target_orientation = get_orientation_to(position, node.position) + + orientation_diff = (target_orientation - vehicle_orientation) + local diff = math.abs(orientation_diff) + if diff > 0.5 then diff = math.abs(diff - 1) end + + local turn = (node.orientation_to_next or vehicle_orientation) - vehicle_orientation + turn = math.abs(turn) + if turn > 0.5 then turn = -turn + 1 end + + local change = math.max(diff, turn) + local bend_radius = ((change / rotation_speed) * speed) + --local ticks = 1 + math.ceil(diff / rotation_speed) + --local turn_distance = math.max(ticks * speed, --[[15 * speed]] 1) + local turn_distance = math.max(bend_radius, 2) + + --[[ + + rendering.draw_circle + { + color={r = 1, g = 1, b = 0}, + radius=bend_radius, + width=3, + filled=false, + target=position, + surface = vehicle.surface, + time_to_live = 2 + } + ]] + + if distance_to_node < turn_distance then + self:move_to_next_node() + else + break + end + end + + local total_orientation_diff = math.abs(orientation_diff) + + local acceleration = defines.riding.acceleration.accelerating + + local direction = defines.riding.direction.straight + if speed > 0.1 and (speed * 60) > (self.total_distance + distance_to_node) then + acceleration = defines.riding.acceleration.braking + end + + if math.abs(orientation_diff) < vehicle.prototype.rotation_speed then + vehicle.orientation = target_orientation + else + orientation_diff = orientation_diff % 1 + if orientation_diff > 0.5 then orientation_diff = orientation_diff - 1 end + if orientation_diff > 0 then + direction = defines.riding.direction.right + else + direction = defines.riding.direction.left + end + end + + vehicle.riding_state = {acceleration = acceleration, direction = direction} + +end + +local is_near = function(a, b) + return math.abs(a - b) < 1 +end + +local rect_dist = function(position_1, position_2) + local x1 = position_1.x or position_1[1] + local x2 = position_2.x or position_2[1] + + local y1 = position_1.y or position_1[2] + local y2 = position_2.y or position_2[2] + + return math.abs(x1 - x2) + math.abs(y1 - y2) +end + +function Moving_vehicle:check_path() + --This is for the case where we are moving to an entity that might have moved! + if not self.destination.position then return end + if not self.requested_destination then return end + + local destination = self:get_destination() + if rect_dist(destination, self.requested_destination) < 4 then return end + + if util.distance(self.character:get_position(), destination) < self.radius then + return true + end + + --Request a new path, but keep walking along the old as its probably its in the right direction still. + self.character:print("Target moved, recalculating path") + self:request_path() + +end + +function Moving_vehicle:clear_obstacles(position) +end + +function Moving_vehicle:check_stuck() + if not (self.path and self.path[1]) then return end + + local node = self.path[1] + + if node == self.last_stuck_node then + self.character.entity.vehicle.orientation = get_orientation_to(self.character.entity.vehicle.position, node.position) + end + + self.last_stuck_node = node + +end + +function Moving_vehicle:update() + + if not self.destination.valid then + self:finish() + return + end + + if not (self.character.entity.vehicle) then + self:finish() + return + end + + if self.character:update_every_n_ticks(300) then + self:check_stuck() + end + + if self.character:update_every_n_ticks(100) then + if self:check_path() then + --Will return true if it checks and we are actually already in range. + self:finish() + return + end + end + + if not self.path then + + if self.character:distance(self.destination) <= (self.radius + 7.5) then + self:finish() + return + end + + self:request_path() + return + end + + self:follow_path() + +end + +local remove = table.remove + +function Moving_vehicle:on_path_recieved(event) + + if not self.destination.valid then + self:finish() + return + end + + self.path_request_index = nil + self.character:print("Path request finished") + local path = event.path + if not path then + self.path = nil + self.fail_count = self.fail_count + 1 + if self.fail_count > 3 then + self:finish() + end + return + end + + local destination = self:get_destination() + + local self_position = self.character:get_position() + local dist_to_dest = util.distance(self_position, destination) + + for k, node in pairs (path) do + local next = path[k + 1] + if not next then break end + + local distance = util.distance(node.position, destination) + if distance > util.distance(next.position, destination) and distance > dist_to_dest then + remove(path, k) + else + break + end + end + + local total = 0 + for k, node in pairs (path) do + local next = path[k + 1] + if not next then break end + node.distance_to_next = util.distance(node.position, next.position) + node.orientation_to_next = get_orientation_to(node.position, next.position) + total = total + node.distance_to_next + end + + for k = (#path), 1, -1 do + local node = path[k] + local next = path[k - 1] + if not (node and next) then break end + + if node.orientation_to_next == next.orientation_to_next then + next.distance_to_next = next.distance_to_next + node.distance_to_next + remove(path, k) + end + end + + self.total_distance = total + + self:clear_path() + self.path = event.path + self:render_path() +end + +function Moving_vehicle:on_script_path_request_finished(event) + if event.name == defines.events.on_script_path_request_finished then + if event.id == self.path_request_index then + self:on_path_recieved(event) + end + end +end + + +return setmetatable(Moving_vehicle, {__call = function(this, ...) return Moving_vehicle.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/put_item.lua b/Kruise_Kontrol_Updated/script/character_interface/states/put_item.lua new file mode 100644 index 00000000..ab50f514 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/put_item.lua @@ -0,0 +1,61 @@ +local Put_item = {} + +Put_item.metatable = {__index = Put_item} + +function Put_item.new(Character, target, name, count) + assert(count > 0) + local state = + { + type = "put_item", + character = Character, + target = target or error("No target?"), + name = name, + count = count + } + return setmetatable(state, Put_item.metatable) +end + +function Put_item:fail() + self.character:pop_state() +end + +function Put_item:succeed() + self.character:pop_state() +end + +function Put_item:update() + + if not self.target.valid then + self:fail() + return + end + + if not self.character:has_item(self.name, self.count) then + --We don't even have the item, so fail. + self:fail() + return + end + + if not self.character:can_reach_entity(self.target) then + --We are out of range, move to range + self.character:move_to(self.target, self.character:get_reach_distance()) + return + end + + -- we are in range of the put target + self.character:look_at(self.target) + + local given = self.character:give_item(self.name, self.count, self.target) + if given == 0 then + self:fail() + return + end + + self.count = self.count - given + --If we can't put it all anyway, we would fail, idk. + self:succeed() + + +end + +return setmetatable(Put_item, {__call = function(this, ...) return Put_item.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/repair.lua b/Kruise_Kontrol_Updated/script/character_interface/states/repair.lua new file mode 100644 index 00000000..1dd11c40 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/repair.lua @@ -0,0 +1,90 @@ +local Repair = {} + +Repair.metatable = {__index = Repair} + +function Repair.new(Character, target, distance) + local state = + { + type = "repair", + character = Character, + target = target or error("No target?"), + } + return setmetatable(state, Repair.metatable) +end + +function Repair:finish() + self.character:clear_cursor() + self.character:pop_state() +end + +local repair_tools + +local get_repair_tools = function() + if repair_tools then return repair_tools end + repair_tools = {} + for name, item in pairs (game.item_prototypes) do + if item.speed then + repair_tools[name] = true + end + end + return repair_tools +end + +function Repair:prepare_tool() + --if self.cursor_prepared then return true end + local cursor = self.character.entity.cursor_stack + if cursor.valid_for_read and get_repair_tools()[cursor.name] then + self.cursor_prepared = true + return true + end + local main_inventory = self.character.entity.get_main_inventory() + for name, bool in pairs (get_repair_tools()) do + local stack = main_inventory.find_item_stack(name) + if stack then + stack.swap_stack(cursor) + self.cursor_prepared = true + return true + end + end + return false +end + +function Repair:update() + + if not self.target.valid then + --He died lol + self:finish() + return + end + + if not self:prepare_tool() then + self.search_tool = next(get_repair_tools(), self.search_tool) + + if not self.search_tool then + self:finish() + return + end + + self.character:find_item(self.search_tool, 1) + return + + end + + if not self.character:can_reach_entity(self.target) then + --We are out of range, move to range + self.character:move_to(self.target, self.character:get_repair_distance()) + return + end + + if self.target.get_health_ratio() >= 1 then + --He is healthy! + self:finish() + return + end + + self.character.entity.update_selected_entity(self.target.position) + self.character.entity.repair_state = {repairing = true, position = self.target.position} + +end + +return setmetatable(Repair, {__call = function(this, ...) return Repair.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/state_template.lua b/Kruise_Kontrol_Updated/script/character_interface/states/state_template.lua new file mode 100644 index 00000000..c05299ac --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/state_template.lua @@ -0,0 +1,28 @@ +local State = {} + +State.metatable = {__index = State} + +function State.new(Character, target) + local state = + { + type = "follow", + character = Character, + target = target or error("No target?") + } + return setmetatable(state, State.metatable) +end + +function State:finish() + self.character:pop_state() +end + +function State:update() + + if not (self.target.valid) then + self:finish() + return + end + +end + +return setmetatable(State, {__call = function(this, ...) return State.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/states.lua b/Kruise_Kontrol_Updated/script/character_interface/states/states.lua new file mode 100644 index 00000000..37083309 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/states.lua @@ -0,0 +1,28 @@ +local States = {} + +local require = function(string) + return require("script/character_interface/states/"..string) +end + +States.attack = require("attack") +States.combat = require("combat") +States.batch_job = require("batch_job") +States.build_ghost = require("build_ghost") +States.craft_item = require("craft_item") +States.find_and_batch = require("find_and_batch") +States.find_item = require("find_item") +States.follow = require("follow") +States.fuel_entity = require("fuel_entity") +States.idle = require("idle") +States.mining = require("mining") +States.moving = require("moving") +States.moving_spider = require("moving_spider") +States.moving_vehicle = require("moving_vehicle") +States.put_item = require("put_item") +States.repair = require("repair") +States.take_item = require("take_item") +States.take_item_from_belt = require("take_item_from_belt") +States.upgrade = require("upgrade") +States.deferred_job = require("deferred_job") + +return States \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/take_item.lua b/Kruise_Kontrol_Updated/script/character_interface/states/take_item.lua new file mode 100644 index 00000000..41dc06d7 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/take_item.lua @@ -0,0 +1,61 @@ +local Take_item = {} + +Take_item.metatable = {__index = Take_item} + +function Take_item.new(Character, target, name, count) + local state = + { + type = "take_item", + character = Character, + target = target or error("No target?"), + name = name, + count = count + } + return setmetatable(state, Take_item.metatable) +end + +function Take_item:fail() + self.character:pop_state() +end + +function Take_item:succeed() + self.character:pop_state() +end + +function Take_item:update() + if not self.target.valid then + self:fail() + return + end + + if not self.character:can_reach_entity(self.target) then + --We are out of range, move to range + self.character:move_to(self.target, self.character:get_reach_distance()) + return + end + + -- we are in range of the pickup target + self.character.direction = self.character:get_direction_to(self.target) + + local inventory = self.target.get_output_inventory() + if not inventory then return end + + + local stack = inventory.find_item_stack(self.name) + if not stack then + self:fail() + return + end + + local count = self.character:take_item_stack(stack, self.count, self.target) + self.count = self.count - count + + if self.count <= 0 then + self:succeed() + self.character:print("We have enough of the item "..self.name) + end + + +end + +return setmetatable(Take_item, {__call = function(this, ...) return Take_item.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/take_item_from_belt.lua b/Kruise_Kontrol_Updated/script/character_interface/states/take_item_from_belt.lua new file mode 100644 index 00000000..8d0c2c8c --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/take_item_from_belt.lua @@ -0,0 +1,69 @@ +local Take_item_from_belt = {} + +Take_item_from_belt.metatable = {__index = Take_item_from_belt} + +function Take_item_from_belt.new(Character, target, name, count) + local state = + { + type = "take_item_from_belt", + character = Character, + target = target or error("No target?"), + name = name, + count = count + } + return setmetatable(state, Take_item_from_belt.metatable) +end + +function Take_item_from_belt:fail() + self.character.entity.picking_state = false + self.character:pop_state() +end + +function Take_item_from_belt:succeed() + self.character.entity.picking_state = false + self.character:pop_state() +end + +function Take_item_from_belt:update() + + if not self.target.valid then + self:fail() + return + end + + local distance = self.character:get_slurp_distance() + if not (self.character:distance(self.target) < distance) then + --We are out of range, move to range + self.character:move_to(self.target, distance / 2) + return + end + + -- we are in range of the belt, start slurping. + self.character.entity.picking_state = true + + local item_count = self.character:get_item_count(self.name) + if self.last_count then + local diff = (item_count - self.last_count) + if diff > 0 then + self.count = self.count - diff + self.tick_of_last_diff = game.tick + end + end + self.last_count = item_count + + if self.count <= 0 then + self:succeed() + --self.character:print("We have enough of the item "..self.name) + end + + if self.tick_of_last_diff then + if (game.tick - self.tick_of_last_diff) > 60 then + -- We slurping, but getting nowhere, so fail + self:fail() + end + end + + +end + +return setmetatable(Take_item_from_belt, {__call = function(this, ...) return Take_item_from_belt.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_interface/states/upgrade.lua b/Kruise_Kontrol_Updated/script/character_interface/states/upgrade.lua new file mode 100644 index 00000000..b194a882 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_interface/states/upgrade.lua @@ -0,0 +1,95 @@ +local Upgrade = {} + +Upgrade.metatable = {__index = Upgrade} + +function Upgrade.new(Character, target) + local state = + { + type = "upgrade", + character = Character, + target = target or error("No target?"), + check_index = nil + } + return setmetatable(state, Upgrade.metatable) +end + +local items_to_place = {} + +local function get_items_to_place(entity) + local upgrade_prototype = entity.get_upgrade_target() + local name = upgrade_prototype.name + if items_to_place[name] then + return items_to_place[name] + end + items_to_place[name] = upgrade_prototype.items_to_place_this + return items_to_place[name] +end + +function Upgrade:fail() + self.character:pop_state() +end + +function Upgrade:succeed() + self.character:pop_state() + self.character:wait(15) +end + +function Upgrade:upgrade_target() + local created = self.character.entity.surface.create_entity + { + name = self.target.get_upgrade_target().name, + position = self.target.position, + force = self.target.force, + direction = self.target.get_upgrade_direction(), + player = self.character.entity.player, + fast_replace = true, + raise_built = true + } + if created then + self.character:remove_item(self.item.name, self.item.count) + end +end + +function Upgrade:update() + + if not self.target.valid then + --ghost is gone or something + self:fail() + return + end + + if not self.target.to_be_upgraded() then + self:fail() + return + end + + + if not self.item or not self.character:has_item(self.item.name, self.item.count) then + self.check_index, self.item = next(get_items_to_place(self.target), self.check_index) + end + + if not self.item then + --no items to build + self:fail() + return + end + + if not self.character:has_item(self.item.name, self.item.count) then + self.character:find_item(self.item.name, self.item.count) + return + end + + if self.character:distance(self.target) > self.character:get_build_distance() then + --We are out of range, move to range + self.character:move_to(self.target, self.character:get_build_distance() - (self.target.get_radius() + 0.5)) + return + end + + self.character.entity.direction = self.character:get_direction_to(self.target) + + local success = self:upgrade_target() + + self:succeed() +end + +return setmetatable(Upgrade, {__call = function(this, ...) return Upgrade.new(...) end}) \ No newline at end of file diff --git a/Kruise_Kontrol_Updated/script/character_script_util.lua b/Kruise_Kontrol_Updated/script/character_script_util.lua new file mode 100644 index 00000000..17ae91cf --- /dev/null +++ b/Kruise_Kontrol_Updated/script/character_script_util.lua @@ -0,0 +1,33 @@ +local util = require("util") + +util.distance = function(p1, p2) + local x1 = p1.x or p1[1] + local y1 = p1.y or p1[2] + local x2 = p2.x or p2[1] + local y2 = p2.y or p2[2] + return (((x1 - x2) ^ 2) + ((y1 - y2) ^ 2)) ^ 0.5 +end + +util.area = function(position, radius) + local x = position[1] or position.x + local y = position[2] or position.y + return {{x - radius, y - radius}, {x + radius, y + radius}} +end + +util.angle = function(position_1, position_2) + local d_x = (position_2[1] or position_2.x) - (position_1[1] or position_1.x) + local d_y = (position_2[2] or position_2.y) - (position_1[2] or position_1.y) + return math.atan2(d_y, d_x) +end + +util.get_orientation_to = function(position_1, position_2) + + -- Angle in rads + local angle = util.angle(position_2, position_1) + + -- Convert to orientation + local orientation = (angle / (2 * math.pi)) - 0.25 + return orientation % 1 +end + +return util diff --git a/Kruise_Kontrol_Updated/script/kruise_kontrol.lua b/Kruise_Kontrol_Updated/script/kruise_kontrol.lua new file mode 100644 index 00000000..e334b368 --- /dev/null +++ b/Kruise_Kontrol_Updated/script/kruise_kontrol.lua @@ -0,0 +1,131 @@ +local Character = require("script/character_interface/character") + +local script_data = +{ + klients = {} +} + +Klient = {} +Klient.metatable = +{ + __index = Klient +} + +function Klient.new(player) + + local klient = + { + player = player, + index = player.index + } + + setmetatable(klient, Klient.metatable) + script_data.klients[player.index] = klient + return klient +end + +function Klient.get_or_make(player_index) + local klient = script_data.klients[player_index] + if klient and klient.player.valid then return klient end + + local player = game.get_player(player_index) + if not player then return end + + klient = Klient.new(player) + return klient +end + +function Klient:get_or_make_character() + if self.character then + if self.character.entity.valid then + return self.character + end + self.character = nil + end + + self:make_character() + return self.character +end + +function Klient:on_player_action_command(event) + local character = self:get_or_make_character() + if not character then return end + + character:clear_state() + local position = event.cursor_position + self.player.update_selected_entity(position) + character:determine_job(self.player.selected, position) +end + +function Klient:on_player_enqueue_action_command(event) + local character = self:get_or_make_character() + if not character then return end + + local position = event.cursor_position + self.player.update_selected_entity(position) + local selected = self.player.selected + character:defer_job(position, selected) +end + +function Klient:on_player_cancel_command(event) + local character = self:get_or_make_character() + if not character then return end + if character:is_idle() then return end + character:remark({"abort-command"}) + character:clear_state() +end + +function Klient:make_character() + if not self.player.character then return end + self.character = Character.new(self.player.character) +end + +local on_player_action_command = function(event) + local klient = Klient.get_or_make(event.player_index) + if not klient then return end + klient:on_player_action_command(event) +end + +local on_player_enqueue_action_command = function(event) + local klient = Klient.get_or_make(event.player_index) + if not klient then return end + klient:on_player_enqueue_action_command(event) +end + +local on_player_cancel_command = function(event) + local klient = Klient.get_or_make(event.player_index) + if not klient then return end + klient:on_player_cancel_command(event) +end + +local lib = {} + +lib.events = +{ + ["klient-alt-move-to"] = on_player_action_command, + --["klient-enqueue-command"] = on_player_enqueue_action_command, + --["klient-cancel-w"] = on_player_cancel_command, + --["klient-cancel-a"] = on_player_cancel_command, + --["klient-cancel-s"] = on_player_cancel_command, + --["klient-cancel-d"] = on_player_cancel_command, + ["klient-cancel-enter"] = on_player_cancel_command, + + [defines.events.on_pre_player_toggled_map_editor] = on_player_cancel_command, + [defines.events.on_pre_player_left_game] = on_player_cancel_command, + [defines.events.on_pre_player_died] = on_player_cancel_command, + [defines.events.on_player_changed_surface] = on_player_cancel_command, + [defines.events.on_player_changed_force] = on_player_cancel_command, +} + +lib.on_init = function() + global.kruise_kontrol = global.kruise_kontrol or script_data +end + +lib.on_load = function() + script_data = global.kruise_kontrol or script_data + for k, klient in pairs (script_data.klients) do + setmetatable(klient, Klient.metatable) + end +end + +return lib diff --git a/LTN_Combinator_Fix_1.1.1/changelog.txt b/LTN_Combinator_Fix/changelog.txt similarity index 100% rename from LTN_Combinator_Fix_1.1.1/changelog.txt rename to LTN_Combinator_Fix/changelog.txt diff --git a/LTN_Combinator_Fix_1.1.1/config.lua b/LTN_Combinator_Fix/config.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/config.lua rename to LTN_Combinator_Fix/config.lua diff --git a/LTN_Combinator_Fix_1.1.1/control.lua b/LTN_Combinator_Fix/control.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/control.lua rename to LTN_Combinator_Fix/control.lua diff --git a/LTN_Combinator_Fix_1.1.1/data-final-fixes.lua b/LTN_Combinator_Fix/data-final-fixes.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/data-final-fixes.lua rename to LTN_Combinator_Fix/data-final-fixes.lua diff --git a/LTN_Combinator_Fix_1.1.1/data.lua b/LTN_Combinator_Fix/data.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/data.lua rename to LTN_Combinator_Fix/data.lua diff --git a/LTN_Combinator_Fix_1.1.1/graphics/hr-ltn-combinator.png b/LTN_Combinator_Fix/graphics/hr-ltn-combinator.png similarity index 100% rename from LTN_Combinator_Fix_1.1.1/graphics/hr-ltn-combinator.png rename to LTN_Combinator_Fix/graphics/hr-ltn-combinator.png diff --git a/LTN_Combinator_Fix_1.1.1/graphics/ltn-combinator-item.png b/LTN_Combinator_Fix/graphics/ltn-combinator-item.png similarity index 100% rename from LTN_Combinator_Fix_1.1.1/graphics/ltn-combinator-item.png rename to LTN_Combinator_Fix/graphics/ltn-combinator-item.png diff --git a/LTN_Combinator_Fix_1.1.1/graphics/ltn-combinator.png b/LTN_Combinator_Fix/graphics/ltn-combinator.png similarity index 100% rename from LTN_Combinator_Fix_1.1.1/graphics/ltn-combinator.png rename to LTN_Combinator_Fix/graphics/ltn-combinator.png diff --git a/LTN_Combinator_Fix_1.1.1/info.json b/LTN_Combinator_Fix/info.json similarity index 100% rename from LTN_Combinator_Fix_1.1.1/info.json rename to LTN_Combinator_Fix/info.json diff --git a/LTN_Combinator_Fix_1.1.1/locale/en/en.cfg b/LTN_Combinator_Fix/locale/en/en.cfg similarity index 100% rename from LTN_Combinator_Fix_1.1.1/locale/en/en.cfg rename to LTN_Combinator_Fix/locale/en/en.cfg diff --git a/LTN_Combinator_Fix_1.1.1/migrations/0.1.0.lua b/LTN_Combinator_Fix/migrations/0.1.0.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/migrations/0.1.0.lua rename to LTN_Combinator_Fix/migrations/0.1.0.lua diff --git a/LTN_Combinator_Fix_1.1.1/migrations/0.5.0.lua b/LTN_Combinator_Fix/migrations/0.5.0.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/migrations/0.5.0.lua rename to LTN_Combinator_Fix/migrations/0.5.0.lua diff --git a/LTN_Combinator_Fix_1.1.1/prototypes/ltnc-prototype.lua b/LTN_Combinator_Fix/prototypes/ltnc-prototype.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/prototypes/ltnc-prototype.lua rename to LTN_Combinator_Fix/prototypes/ltnc-prototype.lua diff --git a/LTN_Combinator_Fix_1.1.1/prototypes/styles.lua b/LTN_Combinator_Fix/prototypes/styles.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/prototypes/styles.lua rename to LTN_Combinator_Fix/prototypes/styles.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/logger.lua b/LTN_Combinator_Fix/scripts/logger.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/logger.lua rename to LTN_Combinator_Fix/scripts/logger.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/ltn-combinator.lua b/LTN_Combinator_Fix/scripts/ltn-combinator.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/ltn-combinator.lua rename to LTN_Combinator_Fix/scripts/ltn-combinator.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/ltnc-events.lua b/LTN_Combinator_Fix/scripts/ltnc-events.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/ltnc-events.lua rename to LTN_Combinator_Fix/scripts/ltnc-events.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/ltnc-gui.lua b/LTN_Combinator_Fix/scripts/ltnc-gui.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/ltnc-gui.lua rename to LTN_Combinator_Fix/scripts/ltnc-gui.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/ltnc-networkconfig.lua b/LTN_Combinator_Fix/scripts/ltnc-networkconfig.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/ltnc-networkconfig.lua rename to LTN_Combinator_Fix/scripts/ltnc-networkconfig.lua diff --git a/LTN_Combinator_Fix_1.1.1/scripts/ltnc.lua b/LTN_Combinator_Fix/scripts/ltnc.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/scripts/ltnc.lua rename to LTN_Combinator_Fix/scripts/ltnc.lua diff --git a/LTN_Combinator_Fix_1.1.1/settings.lua b/LTN_Combinator_Fix/settings.lua similarity index 100% rename from LTN_Combinator_Fix_1.1.1/settings.lua rename to LTN_Combinator_Fix/settings.lua diff --git a/LTN_Combinator_Fix_1.1.1/thumbnail.png b/LTN_Combinator_Fix/thumbnail.png similarity index 100% rename from LTN_Combinator_Fix_1.1.1/thumbnail.png rename to LTN_Combinator_Fix/thumbnail.png diff --git a/LTN_Content_Reader_1.0.3/changelog.txt b/LTN_Content_Reader/changelog.txt similarity index 100% rename from LTN_Content_Reader_1.0.3/changelog.txt rename to LTN_Content_Reader/changelog.txt diff --git a/LTN_Content_Reader_1.0.3/control.lua b/LTN_Content_Reader/control.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/control.lua rename to LTN_Content_Reader/control.lua diff --git a/LTN_Content_Reader_1.0.3/data-final-fixes.lua b/LTN_Content_Reader/data-final-fixes.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/data-final-fixes.lua rename to LTN_Content_Reader/data-final-fixes.lua diff --git a/LTN_Content_Reader_1.0.3/data.lua b/LTN_Content_Reader/data.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/data.lua rename to LTN_Content_Reader/data.lua diff --git a/LTN_Content_Reader_1.0.3/graphics/entity/hr-ltn-delivery-reader.png b/LTN_Content_Reader/graphics/entity/hr-ltn-delivery-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/entity/hr-ltn-delivery-reader.png rename to LTN_Content_Reader/graphics/entity/hr-ltn-delivery-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/entity/hr-ltn-requester-reader.png b/LTN_Content_Reader/graphics/entity/hr-ltn-requester-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/entity/hr-ltn-requester-reader.png rename to LTN_Content_Reader/graphics/entity/hr-ltn-requester-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/entity/ltn-delivery-reader.png b/LTN_Content_Reader/graphics/entity/ltn-delivery-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/entity/ltn-delivery-reader.png rename to LTN_Content_Reader/graphics/entity/ltn-delivery-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/entity/ltn-requester-reader.png b/LTN_Content_Reader/graphics/entity/ltn-requester-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/entity/ltn-requester-reader.png rename to LTN_Content_Reader/graphics/entity/ltn-requester-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/icons/ltn-delivery-reader.png b/LTN_Content_Reader/graphics/icons/ltn-delivery-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/icons/ltn-delivery-reader.png rename to LTN_Content_Reader/graphics/icons/ltn-delivery-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/icons/ltn-provider-reader.png b/LTN_Content_Reader/graphics/icons/ltn-provider-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/icons/ltn-provider-reader.png rename to LTN_Content_Reader/graphics/icons/ltn-provider-reader.png diff --git a/LTN_Content_Reader_1.0.3/graphics/icons/ltn-requester-reader.png b/LTN_Content_Reader/graphics/icons/ltn-requester-reader.png similarity index 100% rename from LTN_Content_Reader_1.0.3/graphics/icons/ltn-requester-reader.png rename to LTN_Content_Reader/graphics/icons/ltn-requester-reader.png diff --git a/LTN_Content_Reader_1.0.3/info.json b/LTN_Content_Reader/info.json similarity index 100% rename from LTN_Content_Reader_1.0.3/info.json rename to LTN_Content_Reader/info.json diff --git a/LTN_Content_Reader_1.0.3/locale/en/en.cfg b/LTN_Content_Reader/locale/en/en.cfg similarity index 100% rename from LTN_Content_Reader_1.0.3/locale/en/en.cfg rename to LTN_Content_Reader/locale/en/en.cfg diff --git a/LTN_Content_Reader_1.0.3/migrations/0.1.9.lua b/LTN_Content_Reader/migrations/0.1.9.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/migrations/0.1.9.lua rename to LTN_Content_Reader/migrations/0.1.9.lua diff --git a/LTN_Content_Reader_1.0.3/migrations/0.2.1.lua b/LTN_Content_Reader/migrations/0.2.1.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/migrations/0.2.1.lua rename to LTN_Content_Reader/migrations/0.2.1.lua diff --git a/LTN_Content_Reader_1.0.3/prototypes/combinator.lua b/LTN_Content_Reader/prototypes/combinator.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/prototypes/combinator.lua rename to LTN_Content_Reader/prototypes/combinator.lua diff --git a/LTN_Content_Reader_1.0.3/settings.lua b/LTN_Content_Reader/settings.lua similarity index 100% rename from LTN_Content_Reader_1.0.3/settings.lua rename to LTN_Content_Reader/settings.lua diff --git a/LTN_Content_Reader_1.0.3/thumbnail.png b/LTN_Content_Reader/thumbnail.png similarity index 100% rename from LTN_Content_Reader_1.0.3/thumbnail.png rename to LTN_Content_Reader/thumbnail.png diff --git a/LightedPolesPlus/changelog.txt b/LightedPolesPlus/changelog.txt new file mode 100644 index 00000000..49a11632 --- /dev/null +++ b/LightedPolesPlus/changelog.txt @@ -0,0 +1,298 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.9.0 +Date: 2022-12-31 + Bugfixes: + - lighted pole recipes where added multiple times to same technology + Changes: + - added startup setting "Technology Blacklist" + - added startup setting "Fallback Technology" +--------------------------------------------------------------------------------------------------- +Version: 1.8.0 +Date: 2022-10-04 + Changes: + - only create lighted variant for poles with maximum_wire_distance > 0 + - removed blacklist entries for poles with 0 wire reach +--------------------------------------------------------------------------------------------------- +Version: 1.7.6 +Date: 2022-10-02 + Bugfixes: + - handle order string nil values (shouldn't happen according to wiki) + - blacklist biotech-biosolarpanel-pole +--------------------------------------------------------------------------------------------------- +Version: 1.7.5 +Date: 2022-07-23 + Bugfixes: + - skip over recipe sorting when no recipes are found +--------------------------------------------------------------------------------------------------- +Version: 1.7.4 +Date: 2022-07-22 + Bugfixes: + - copy-paste error in expensive recipe handling #9 + Changes: + - code cleanup +--------------------------------------------------------------------------------------------------- +Version: 1.7.3 +Date: 2022-07-21 + Bugfixes: + - support list in recipe.results, 1.7.2 expected dictionary #8 +--------------------------------------------------------------------------------------------------- +Version: 1.7.2 +Date: 2022-07-21 + Bugfixes: + - support recipe.results for poles #8 +--------------------------------------------------------------------------------------------------- +Version: 1.7.1 +Date: 2021-08-26 + Bugfixes: + - disable next_upgrade for hidden lamp #6 +--------------------------------------------------------------------------------------------------- +Version: 1.7.0 +Date: 2020-11-26 + Changes: + - pushed Factorio to 1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.6.1 +Date: 2020-09-13 + Changes: + - pushed FLib to 0.3.3 + - flagged optional dependencies as hidden +--------------------------------------------------------------------------------------------------- +Version: 1.6.0 +Date: 2020-08-26 + Features: + - pole blacklist is now a comma separated string setting +--------------------------------------------------------------------------------------------------- +Version: 1.5.11 +Date: 2020-08-20 + Changes: + - pushed Factorio to 1.0 + - blacklisted poles from editor extensions +--------------------------------------------------------------------------------------------------- +Version: 1.5.10 +Date: 2020-07-24 + Changes: + - exclude poles without copper wires, they couldn't power lamps anyway +--------------------------------------------------------------------------------------------------- +Version: 1.5.9 +Date: 2020-06-22 + Bugfixes: + - added optional dependency for reskins-bobs #4 +--------------------------------------------------------------------------------------------------- +Version: 1.5.8 +Date: 2020-06-01 + Bugfixes: + - blacklisted Tesseract poles https://mods.factorio.com/mod/LightedPolesPlus/discussion/5ed507c7196b49000d9b7e33 +--------------------------------------------------------------------------------------------------- +Version: 1.5.7 +Date: 2020-05-26 + Changes: + - replaced OpteraLib with FLib +--------------------------------------------------------------------------------------------------- +Version: 1.5.6 +Date: 2020-05-12 + Bugfixes: + - poles without technology unocks are unlocked by optics +--------------------------------------------------------------------------------------------------- +Version: 1.5.5 +Date: 2020-04-10 + Changes: + - optimized filtered event calls +--------------------------------------------------------------------------------------------------- +Version: 1.5.4 +Date: 2020-02-20 + Changes: + - support mod raised system events again +--------------------------------------------------------------------------------------------------- +Version: 1.5.3 +Date: 2020-02-16 + Features: + - Polish translation by Tomirad +--------------------------------------------------------------------------------------------------- +Version: 1.5.2 +Date: 2020-02-16 + Features: + - reduce overhead by using event filters where possible +--------------------------------------------------------------------------------------------------- +Version: 1.5.1 +Date: 2020-01-23 + Features: + - use updated OpteraLib functions +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 2020-01-21 + Features: + - updated to Factorio 0.18 +--------------------------------------------------------------------------------------------------- +Version: 1.4.4 +Date: 2020-01-08 + Features: + - support changing from lighted to normal pole using upgrade planer +--------------------------------------------------------------------------------------------------- +Version: 1.4.3 +Date: 2019-12-31 + Features: + - support script_raised_revive by phoenixuprising +--------------------------------------------------------------------------------------------------- +Version: 1.4.2 +Date: 2019-12-11 + Bugfixes: + - hidden lamps are rebuilt each time mod configuration changes in case pole entities where removed +--------------------------------------------------------------------------------------------------- +Version: 1.4.1 +Date: 2019-09-25 + Changes: + - initialization is more flexible + - use lookup dictionary for pole and lamp names + - removed more debug logging +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 2019-09-24 + Features: + - light radius and energy consumption scale with pole wire distance + - added setting "Light radius scale" + - added setting "Maximum light size" + Changes: + - removed most startup debug logging +--------------------------------------------------------------------------------------------------- +Version: 1.3.6 +Date: 2019-08-03 + Bugfixes: + - lighted poles are unlocked by electric-energy-distribution-1 and demo-steel-poles techs https://mods.factorio.com/mod/LightedPolesPlus/discussion/5d44e4d221072e000b3b90c7 +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 2019-06-10 + Bugfixes: + - correctly add lighted-small-electric-pole to optics again +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2019-05-19 + Features: + - supports script_raised_built and script_raised_destroy +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 2019-03-19 + Features: + - lighted pole versions upgrade similar to unlighted versions + Changes: + - moved functionality to Opteras Library +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 2019-02-28 + Features: + - added support for PickerDollies + - recreate hidden lamps whenever LEP is updated, prevent orphan lamps more reliably +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 2019-02-27 + Features: + - removed redundant code +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2019-02-26 + Features: + - updated to Factorio 0.17 + - added thumbnail +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 2018-12-11 + Changes: + - lighted pole recipes are always ordered after their original +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 2018-12-09 + Bugfixes: + - handle missing icons.icon_size property +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2018-12-08 + Changes: + - lighted poles are always ordered after their original + - blacklisted Bio Industries rail connector and rail poles + Bugfixes: + - icons with different sizes from 32x32 crashed the game +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2018-10-27 + Changes: + - rewrote technology lookup to accomodate for expensive pole recipes + - lighted small electric pole is only added to optics if no tech unlock for small electric pole exists + - added optional dependency to AAI Industries +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2018-02-08 + Features: + - added compatibility for qumojo's ShinyBob +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2018-02-01 + Bugfixes: + - Icons are preferred over icon, fixes ShinyBob compatibility + - Overlay is no longer applied to original poles using icons +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2017-12-26 + Features: + - in game changelog +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2017-12-13 + Changes: + - updated to Factorio 0.16 +--------------------------------------------------------------------------------------------------- +Version: 1.0.6 +Date: 2017-09-28 + Features: + - korean translation (by Xagros) + Bugfixes: + - russian translation fix (by vlan0) +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 +Date: 2017-09-28 + Changes: + - push to base 0.15.34 + Features: + - german translation + - russion translation (by vlan0) +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 2017-09-04 + Features: + - compatibility to ShinyBobGFX +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 2017-06-26 + Bugfixes: + - fast replace was broken in 1.0.0 +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 2017-06-18 + Bugfixes: + - entity validation: item placing entity must also be result of mining placed entity +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2017-06-16 + Bugfixes: + - works with differing item, entity and recipe names +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2017-06-07 + Features: + - added support for moving poles with PickerExtended + Bugfixes: + - reset positions for all lamps of older versions on update +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 2017-05-20 + Features: + - made all poles fast replacable +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2017-05-05 + Bugfixes: + - unlocks every technology + - error on entities without minable attribute +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 - First public release +Date: 2017-05-04 + Features: + - adds poles with integrated lamps diff --git a/LightedPolesPlus_1.10.0/control.lua b/LightedPolesPlus/control.lua similarity index 100% rename from LightedPolesPlus_1.10.0/control.lua rename to LightedPolesPlus/control.lua diff --git a/LightedPolesPlus_1.10.0/data-updates.lua b/LightedPolesPlus/data-updates.lua similarity index 100% rename from LightedPolesPlus_1.10.0/data-updates.lua rename to LightedPolesPlus/data-updates.lua diff --git a/LightedPolesPlus_1.10.0/graphics/icons/lighted.png b/LightedPolesPlus/graphics/icons/lighted.png similarity index 100% rename from LightedPolesPlus_1.10.0/graphics/icons/lighted.png rename to LightedPolesPlus/graphics/icons/lighted.png diff --git a/LightedPolesPlus/info.json b/LightedPolesPlus/info.json new file mode 100644 index 00000000..24ec1585 --- /dev/null +++ b/LightedPolesPlus/info.json @@ -0,0 +1,19 @@ +{ + "name": "LightedPolesPlus", + "version": "1.10.1", + "title": "Lighted Electric Poles +", + "author": "Optera", + "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729", + "homepage": "", + "description": "Adds copies of electric poles, including modded ones, with integrated lamps.", + "factorio_version": "1.1", + "dependencies": [ + "base >= 1.1.0", + "flib >= 0.6.0", + "(?)ShinyBobGFX", + "(?)ShinyBob_Icons", + "(?)reskins-bobs", + "(?)aai-industry", + "(?)nullius" + ] +} diff --git a/LightedPolesPlus_1.10.0/locale/en/locale.cfg b/LightedPolesPlus/locale/en/locale.cfg similarity index 100% rename from LightedPolesPlus_1.10.0/locale/en/locale.cfg rename to LightedPolesPlus/locale/en/locale.cfg diff --git a/LightedPolesPlus_1.10.0/locale/ru/locale.cfg b/LightedPolesPlus/locale/ru/locale.cfg similarity index 100% rename from LightedPolesPlus_1.10.0/locale/ru/locale.cfg rename to LightedPolesPlus/locale/ru/locale.cfg diff --git a/LightedPolesPlus/settings.lua b/LightedPolesPlus/settings.lua new file mode 100644 index 00000000..1c9aa0d3 --- /dev/null +++ b/LightedPolesPlus/settings.lua @@ -0,0 +1,51 @@ +data:extend({ + { + type = "double-setting", + name = "lepp_light_size_factor", + order = "aa", + setting_type = "startup", + default_value = 1, -- default size = 40 equal to a a small lamp on medium pole + minimum_value = 0, -- 0 = don't scale, use small light everywhere + maximum_value = 100, + }, + { + type = "int-setting", + name = "lepp_light_max_size", + order = "ab", + setting_type = "startup", + default_value = 75, -- game engine max light radius = 75 + minimum_value = 1, + }, + { + type = "string-setting", + name = "lepp_pole_whitelist", + order = "ba", + setting_type = "startup", + allow_blank = true, + default_value = "fish-pole,slp-dec-med-pole,slp-dec-big-pole,slp-dec-sub-pole", + }, + { + type = "string-setting", + name = "lepp_pole_blacklist", + order = "bb", + setting_type = "startup", + allow_blank = true, + default_value = "bi-power-to-rail-pole,bi-rail-hidden-power-pole,ee-super-electric-pole,ee-super-substation,se-pylon-construction,se-pylon-construction-radar", + }, + { + type = "string-setting", + name = "lepp_tech_blacklist", + order = "bc", + setting_type = "startup", + allow_blank = true, + default_value = "", + }, + { + type = "string-setting", + name = "lepp_tech_fallback", + order = "bd", + setting_type = "startup", + allow_blank = false, + default_value = "optics", + }, +}) diff --git a/LightedPolesPlus_1.10.0/thumbnail.png b/LightedPolesPlus/thumbnail.png similarity index 100% rename from LightedPolesPlus_1.10.0/thumbnail.png rename to LightedPolesPlus/thumbnail.png diff --git a/LightedPolesPlus_1.10.0/changelog.txt b/LightedPolesPlus_1.10.0/changelog.txt deleted file mode 100644 index 6f168533..00000000 --- a/LightedPolesPlus_1.10.0/changelog.txt +++ /dev/null @@ -1,303 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.10.0 -Date: 2023-09-20 - Features: - - added startup setting "Pole Whitelist" #11 ---------------------------------------------------------------------------------------------------- -Version: 1.9.0 -Date: 2022-12-31 - Bugfixes: - - lighted pole recipes where added multiple times to same technology - Changes: - - added startup setting "Technology Blacklist" - - added startup setting "Fallback Technology" ---------------------------------------------------------------------------------------------------- -Version: 1.8.0 -Date: 2022-10-04 - Changes: - - only create lighted variant for poles with maximum_wire_distance > 0 - - removed blacklist entries for poles with 0 wire reach ---------------------------------------------------------------------------------------------------- -Version: 1.7.6 -Date: 2022-10-02 - Bugfixes: - - handle order string nil values (shouldn't happen according to wiki) - - blacklist biotech-biosolarpanel-pole ---------------------------------------------------------------------------------------------------- -Version: 1.7.5 -Date: 2022-07-23 - Bugfixes: - - skip over recipe sorting when no recipes are found ---------------------------------------------------------------------------------------------------- -Version: 1.7.4 -Date: 2022-07-22 - Bugfixes: - - copy-paste error in expensive recipe handling #9 - Changes: - - code cleanup ---------------------------------------------------------------------------------------------------- -Version: 1.7.3 -Date: 2022-07-21 - Bugfixes: - - support list in recipe.results, 1.7.2 expected dictionary #8 ---------------------------------------------------------------------------------------------------- -Version: 1.7.2 -Date: 2022-07-21 - Bugfixes: - - support recipe.results for poles #8 ---------------------------------------------------------------------------------------------------- -Version: 1.7.1 -Date: 2021-08-26 - Bugfixes: - - disable next_upgrade for hidden lamp #6 ---------------------------------------------------------------------------------------------------- -Version: 1.7.0 -Date: 2020-11-26 - Changes: - - pushed Factorio to 1.1 ---------------------------------------------------------------------------------------------------- -Version: 1.6.1 -Date: 2020-09-13 - Changes: - - pushed FLib to 0.3.3 - - flagged optional dependencies as hidden ---------------------------------------------------------------------------------------------------- -Version: 1.6.0 -Date: 2020-08-26 - Features: - - pole blacklist is now a comma separated string setting ---------------------------------------------------------------------------------------------------- -Version: 1.5.11 -Date: 2020-08-20 - Changes: - - pushed Factorio to 1.0 - - blacklisted poles from editor extensions ---------------------------------------------------------------------------------------------------- -Version: 1.5.10 -Date: 2020-07-24 - Changes: - - exclude poles without copper wires, they couldn't power lamps anyway ---------------------------------------------------------------------------------------------------- -Version: 1.5.9 -Date: 2020-06-22 - Bugfixes: - - added optional dependency for reskins-bobs #4 ---------------------------------------------------------------------------------------------------- -Version: 1.5.8 -Date: 2020-06-01 - Bugfixes: - - blacklisted Tesseract poles https://mods.factorio.com/mod/LightedPolesPlus/discussion/5ed507c7196b49000d9b7e33 ---------------------------------------------------------------------------------------------------- -Version: 1.5.7 -Date: 2020-05-26 - Changes: - - replaced OpteraLib with FLib ---------------------------------------------------------------------------------------------------- -Version: 1.5.6 -Date: 2020-05-12 - Bugfixes: - - poles without technology unocks are unlocked by optics ---------------------------------------------------------------------------------------------------- -Version: 1.5.5 -Date: 2020-04-10 - Changes: - - optimized filtered event calls ---------------------------------------------------------------------------------------------------- -Version: 1.5.4 -Date: 2020-02-20 - Changes: - - support mod raised system events again ---------------------------------------------------------------------------------------------------- -Version: 1.5.3 -Date: 2020-02-16 - Features: - - Polish translation by Tomirad ---------------------------------------------------------------------------------------------------- -Version: 1.5.2 -Date: 2020-02-16 - Features: - - reduce overhead by using event filters where possible ---------------------------------------------------------------------------------------------------- -Version: 1.5.1 -Date: 2020-01-23 - Features: - - use updated OpteraLib functions ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 -Date: 2020-01-21 - Features: - - updated to Factorio 0.18 ---------------------------------------------------------------------------------------------------- -Version: 1.4.4 -Date: 2020-01-08 - Features: - - support changing from lighted to normal pole using upgrade planer ---------------------------------------------------------------------------------------------------- -Version: 1.4.3 -Date: 2019-12-31 - Features: - - support script_raised_revive by phoenixuprising ---------------------------------------------------------------------------------------------------- -Version: 1.4.2 -Date: 2019-12-11 - Bugfixes: - - hidden lamps are rebuilt each time mod configuration changes in case pole entities where removed ---------------------------------------------------------------------------------------------------- -Version: 1.4.1 -Date: 2019-09-25 - Changes: - - initialization is more flexible - - use lookup dictionary for pole and lamp names - - removed more debug logging ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 2019-09-24 - Features: - - light radius and energy consumption scale with pole wire distance - - added setting "Light radius scale" - - added setting "Maximum light size" - Changes: - - removed most startup debug logging ---------------------------------------------------------------------------------------------------- -Version: 1.3.6 -Date: 2019-08-03 - Bugfixes: - - lighted poles are unlocked by electric-energy-distribution-1 and demo-steel-poles techs https://mods.factorio.com/mod/LightedPolesPlus/discussion/5d44e4d221072e000b3b90c7 ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 -Date: 2019-06-10 - Bugfixes: - - correctly add lighted-small-electric-pole to optics again ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 -Date: 2019-05-19 - Features: - - supports script_raised_built and script_raised_destroy ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 -Date: 2019-03-19 - Features: - - lighted pole versions upgrade similar to unlighted versions - Changes: - - moved functionality to Opteras Library ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 2019-02-28 - Features: - - added support for PickerDollies - - recreate hidden lamps whenever LEP is updated, prevent orphan lamps more reliably ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 2019-02-27 - Features: - - removed redundant code ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2019-02-26 - Features: - - updated to Factorio 0.17 - - added thumbnail ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 2018-12-11 - Changes: - - lighted pole recipes are always ordered after their original ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2018-12-09 - Bugfixes: - - handle missing icons.icon_size property ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2018-12-08 - Changes: - - lighted poles are always ordered after their original - - blacklisted Bio Industries rail connector and rail poles - Bugfixes: - - icons with different sizes from 32x32 crashed the game ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2018-10-27 - Changes: - - rewrote technology lookup to accomodate for expensive pole recipes - - lighted small electric pole is only added to optics if no tech unlock for small electric pole exists - - added optional dependency to AAI Industries ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2018-02-08 - Features: - - added compatibility for qumojo's ShinyBob ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2018-02-01 - Bugfixes: - - Icons are preferred over icon, fixes ShinyBob compatibility - - Overlay is no longer applied to original poles using icons ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2017-12-26 - Features: - - in game changelog ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2017-12-13 - Changes: - - updated to Factorio 0.16 ---------------------------------------------------------------------------------------------------- -Version: 1.0.6 -Date: 2017-09-28 - Features: - - korean translation (by Xagros) - Bugfixes: - - russian translation fix (by vlan0) ---------------------------------------------------------------------------------------------------- -Version: 1.0.5 -Date: 2017-09-28 - Changes: - - push to base 0.15.34 - Features: - - german translation - - russion translation (by vlan0) ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 2017-09-04 - Features: - - compatibility to ShinyBobGFX ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2017-06-26 - Bugfixes: - - fast replace was broken in 1.0.0 ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2017-06-18 - Bugfixes: - - entity validation: item placing entity must also be result of mining placed entity ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2017-06-16 - Bugfixes: - - works with differing item, entity and recipe names ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2017-06-07 - Features: - - added support for moving poles with PickerExtended - Bugfixes: - - reset positions for all lamps of older versions on update ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 -Date: 2017-05-20 - Features: - - made all poles fast replacable ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: 2017-05-05 - Bugfixes: - - unlocks every technology - - error on entities without minable attribute ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 - First public release -Date: 2017-05-04 - Features: - - adds poles with integrated lamps diff --git a/LightedPolesPlus_1.10.0/info.json b/LightedPolesPlus_1.10.0/info.json deleted file mode 100644 index 3a47e3e0..00000000 --- a/LightedPolesPlus_1.10.0/info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "LightedPolesPlus", - "version": "1.10.0", - "title": "Lighted Electric Poles +", - "author": "Optera", - "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729", - "homepage": "", - "description": "Adds copies of electric poles, including modded ones, with integrated lamps.", - "factorio_version": "1.1", - "dependencies": [ - "base >= 1.1.0", - "flib >= 0.6.0", - "(?)ShinyBobGFX", - "(?)ShinyBob_Icons", - "(?)reskins-bobs", - "(?)aai-industry", - "(?)nullius" - ] -} diff --git a/LightedPolesPlus_1.10.0/settings.lua b/LightedPolesPlus_1.10.0/settings.lua deleted file mode 100644 index fb1aaac4..00000000 --- a/LightedPolesPlus_1.10.0/settings.lua +++ /dev/null @@ -1,51 +0,0 @@ -data:extend({ - { - type = "double-setting", - name = "lepp_light_size_factor", - order = "aa", - setting_type = "startup", - default_value = 1, -- default size = 40 equal to a a small lamp on medium pole - minimum_value = 0, -- 0 = don't scale, use small light everywhere - maximum_value = 100, - }, - { - type = "int-setting", - name = "lepp_light_max_size", - order = "ab", - setting_type = "startup", - default_value = 75, -- game engine max light radius = 75 - minimum_value = 1, - }, - { - type = "string-setting", - name = "lepp_pole_whitelist", - order = "ba", - setting_type = "startup", - allow_blank = true, - default_value = "fish-pole,slp-dec-med-pole,slp-dec-big-pole,slp-dec-sub-pole", - }, - { - type = "string-setting", - name = "lepp_pole_blacklist", - order = "bb", - setting_type = "startup", - allow_blank = true, - default_value = "bi-power-to-rail-pole,bi-rail-hidden-power-pole,ee-super-electric-pole,ee-super-substation", - }, - { - type = "string-setting", - name = "lepp_tech_blacklist", - order = "bc", - setting_type = "startup", - allow_blank = true, - default_value = "", - }, - { - type = "string-setting", - name = "lepp_tech_fallback", - order = "bd", - setting_type = "startup", - allow_blank = false, - default_value = "optics", - }, -}) diff --git a/LogisticTrainNetwork/Interface_Demo/control.lua b/LogisticTrainNetwork/Interface_Demo/control.lua new file mode 100644 index 00000000..3b8ad0e9 --- /dev/null +++ b/LogisticTrainNetwork/Interface_Demo/control.lua @@ -0,0 +1,64 @@ +--[[ + LTN API demo + Copyright (c) 2019 Optera + + For complete listing of events and properties refer to https://forums.factorio.com/viewtopic.php?f=214&t=51072#p397844 + + + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +--]] + +-- LTN interface event functions +function OnStopsUpdated(event) + log("Stop Data:"..serpent.block(event) ) +end + +function OnDispatcherUpdated(event) + log("Dispatcher Data:"..serpent.block(event) ) +end + +---- Initialisation ---- +script.on_init(function() + -- register events from LTN + if remote.interfaces["logistic-train-network"] then + script.on_event(remote.call("logistic-train-network", "on_stops_updated"), OnStopsUpdated) + script.on_event(remote.call("logistic-train-network", "on_dispatcher_updated"), OnDispatcherUpdated) + end +end) + +script.on_load(function(data) + -- register events from LTN + if remote.interfaces["logistic-train-network"] then + script.on_event(remote.call("logistic-train-network", "on_stops_updated"), OnStopsUpdated) + script.on_event(remote.call("logistic-train-network", "on_dispatcher_updated"), OnDispatcherUpdated) + --[[ alternative anonymous function: + has to be copied between on_init and on_load + script.on_event(remote.call("logistic-train-network", "on_stops_updated"), function(event) + do something with event.data + end) + ]] + end +end) diff --git a/LogisticTrainNetwork/README.md b/LogisticTrainNetwork/README.md new file mode 100644 index 00000000..42ae96b7 --- /dev/null +++ b/LogisticTrainNetwork/README.md @@ -0,0 +1,6 @@ +# Factorio - Logistic Train Network +Factorio mod adding "logistic-train-stops" acting as anchor points for building a train powered logistic network.
+It can handle multiple train configurations and will pick the best available train for a delivery.
+ +Forum: https://forums.factorio.com/viewforum.php?f=214
+Download: https://mods.factorio.com/mods/Optera/LogisticTrainNetwork
diff --git a/LogisticTrainNetwork/changelog.txt b/LogisticTrainNetwork/changelog.txt new file mode 100644 index 00000000..91782215 --- /dev/null +++ b/LogisticTrainNetwork/changelog.txt @@ -0,0 +1,1017 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.18.2 +Date: 2023-01-05 + Bugfixes: + - skip over not existing position signals with error message instead of crashing outright +--------------------------------------------------------------------------------------------------- +Version: 1.18.1 +Date: 2022-12-13 + Bugfixes: + - crash when on_train_changed_state is raised for trains stopped at invalid stops. Should only happen if scripts remove stops without raising script_raised_destroy. +--------------------------------------------------------------------------------------------------- +Version: 1.18.0 +Date: 2022-11-05 + Features: + - Create deliveries across surfaces, train surface transitions have to be handled by 3rd party mods + - added remote call connect_surfaces + - added remote call disconnect_surfaces + - added remote call clear_all_surface_connections + - added remote call reassign_delivery + - added remote call get_or_create_next_temp_stop + - added remote call get_next_logistic_stop + Changes: + - added on_dispatcher_updated.new_deliveries as replacement for on_delivery_created + - removed event on_delivery_created, running in same tick as dispatcher produced microstutter + Bugfixes: + - crash when deleting all stops in train schedule, if train is parked at requester and "Delivery completes at requester" enabled #312 +--------------------------------------------------------------------------------------------------- +Version: 1.17.1 +Date: 2022-10-10 + Features: + - create ghosts for Lamp and Combinator on stop death #307 +--------------------------------------------------------------------------------------------------- +Version: 1.17.0 +Date: 2022-09-23 + Features: + - added event on_delivery_created #304 + Changes: + - added LuaTrain to on_delivery_pickup_complete #298 + - added LuaTrain to on_delivery_completed #298 +--------------------------------------------------------------------------------------------------- +Version: 1.16.10 +Date: 2022-07-22 + Features: + - use RichText [train-stop=uid] for stations + - use RichText [train=uid] for trains + Changes: + - GPS tags disabled by default, was too spammy +--------------------------------------------------------------------------------------------------- +Version: 1.16.9 +Date: 2022-06-19 + Bugfixes: + - additional merged delivery stack size check #271 +--------------------------------------------------------------------------------------------------- +Version: 1.16.8 +Date: 2022-06-19 + Features: + - show cargo as rich text in no-provider-found, provider-found, creating-delivery #283 + - added map-setting: Providers output existing cargo (default on), workaround for inserters stuck with items #272, #294 +--------------------------------------------------------------------------------------------------- +Version: 1.16.7 +Date: 2021-11-17 + Bugfixes: + - trains didn't break for temp stops, potentially overshooting and repathing to other stops +--------------------------------------------------------------------------------------------------- +Version: 1.16.6 +Date: 2021-11-14 + Bugfixes: + - trains leaving requester didn't fully clean all delivery tables + - trains entering depot with existing delivery raise on_delivery_failed #277 +--------------------------------------------------------------------------------------------------- +Version: 1.16.5 +Date: 2021-11-07 + Features: + - use rail_direction for temp stops #275 + Bugfixes: + - schedules did not always reset when using conditional Depot Signals +--------------------------------------------------------------------------------------------------- +Version: 1.16.4 +Date: 2021-11-06 + Bugfixes: + - Add handling of on_entity_cloned event #274 +--------------------------------------------------------------------------------------------------- +Version: 1.16.3 +Date: 2021-06-30 + Bugfixes: + - changes to ltn-depot-fluid-cleaning where not applied #269 + - trains entering depots with fluids also raise an alert +--------------------------------------------------------------------------------------------------- +Version: 1.16.2 +Date: 2021-06-28 + Bugfixes: + - incorrect sprite sheet size for normal res output #267 +--------------------------------------------------------------------------------------------------- +Version: 1.16.1 +Date: 2021-06-28 + Features: + - graphics update by snouz #266 +--------------------------------------------------------------------------------------------------- +Version: 1.16.0 +Date: 2021-03-26 + Changes: + - find free trains using table.sort + Bugfixes: + - depot priority should be properly working now +--------------------------------------------------------------------------------------------------- +Version: 1.15.7 +Date: 2021-03-21 + Bugfixes: + - also check signal.name and signal.type for virtual signals +--------------------------------------------------------------------------------------------------- +Version: 1.15.6 +Date: 2021-03-20 + Bugfixes: + - skip over nil signal.name or signal.type, how can a signal name be nil in the first place? +--------------------------------------------------------------------------------------------------- +Version: 1.15.5 +Date: 2021-03-10 + Features: + - trains entering depots with cargo raise an alert + - trains entering depots can have fluid residue automatically removed #185 + Changes: + - reset schedules at requester before raising API events #255 +--------------------------------------------------------------------------------------------------- +Version: 1.15.4 +Date: 2021-02-27 + Features: + - added setting to disable GPS tags +--------------------------------------------------------------------------------------------------- +Version: 1.15.3 +Date: 2021-02-16 + Bugfixes: + - moved lamp controllers off grid, preventing adjacent lamps to connect to it #253 +--------------------------------------------------------------------------------------------------- +Version: 1.15.2 +Date: 2021-02-06 + Bugfixes: + - delivery timout messages accessed position data of stop entities without checking validity #251 +--------------------------------------------------------------------------------------------------- +Version: 1.15.1 +Date: 2021-02-03 + Features: + - added gps rich-text to station names in chat #246 + - increased verbosity of no-provider-found logfile entry #244 + Bugfixes: + - subtracted delivery from providers twice #250 +--------------------------------------------------------------------------------------------------- +Version: 1.15.0 +Date: 2020-11-26 + Features: + - updated to Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.14.6 +Date: 2020-10-04 + Features: + - Hotkey disabling/enabling Dispatcher by Steinio, default ctrl-shift-D #234 +--------------------------------------------------------------------------------------------------- +Version: 1.14.5 +Date: 2020-09-17 + Features: + - Factorio alerts can be disabled per user + Bugfixes: + - on_provider events didn't include LuaTrain + - on_requester_unscheduled_cargo_alert.unscheduled_load lacked type prefix +--------------------------------------------------------------------------------------------------- +Version: 1.14.4 +Date: 2020-09-13 + Changes: + - pushed FLib to 0.3.3 +--------------------------------------------------------------------------------------------------- +Version: 1.14.3 +Date: 2020-09-04 + Bugfixes: + - increased TrainLeaves debug log verbosity + - fluid deliveries sometimes incorrectly detected incomplete pickup due to lsb differences #230 +--------------------------------------------------------------------------------------------------- +Version: 1.14.2 +Date: 2020-08-30 + Bugfixes: + - disabled auto barreling on fluids used for alert icons #228 +--------------------------------------------------------------------------------------------------- +Version: 1.14.1 +Date: 2020-08-28 + Bugfixes: + - added missing delivery check in TrainArrives +--------------------------------------------------------------------------------------------------- +Version: 1.14.0 +Date: 2020-08-28 + Features: + - updated to Factorio 1.0 + - use Factorio alert system for common warnings and errors + - added cargo alerts +--------------------------------------------------------------------------------------------------- +Version: 1.13.10 +Date: 2020-07-28 + Features: + - increased message level of empty-depot to warning #217 + - increased message level of no-train-found to warning #217 +--------------------------------------------------------------------------------------------------- +Version: 1.13.9 +Date: 2020-06-06 + Features: + - reworked German localisation #216 + - localisation for dropdowns +--------------------------------------------------------------------------------------------------- +Version: 1.13.8 +Date: 2020-05-29 + Bugfixes: + - Checks adjusting requester amounts used stop.backer_name instead of stop.unit_number. https://forums.factorio.com/viewtopic.php?p=496164#p496164 +--------------------------------------------------------------------------------------------------- +Version: 1.13.7 +Date: 2020-05-27 + Features: + - updated icons +--------------------------------------------------------------------------------------------------- +Version: 1.13.6 +Date: 2020-05-26 + Changes: + - replaced OpteraLib with FLib +--------------------------------------------------------------------------------------------------- +Version: 1.13.5 +Date: 2020-05-20 + Bugfixes: + - multiple IO entities could be built on top of another #214 + - stops could connect to IO entities of different stops +--------------------------------------------------------------------------------------------------- +Version: 1.13.4 +Date: 2020-05-17 + Bugfixes: + - Increased selection priority on secondary entities #213 +--------------------------------------------------------------------------------------------------- +Version: 1.13.3 +Date: 2020-05-15 + Changes: + - Updated secondary entity collisions using empty collision tables +--------------------------------------------------------------------------------------------------- +Version: 1.13.2 +Date: 2020-05-15 + Changes: + - Updated secondary entity collisions using "not-colliding-with-itself" +--------------------------------------------------------------------------------------------------- +Version: 1.13.1 +Date: 2020-04-16 + Features: + - added depot priority control signal + Changes: + - refactored on_stops_updated to be in line with base event naming conventions +--------------------------------------------------------------------------------------------------- +Version: 1.13.0 +Date: 2020-04-12 + Features: + - use temp stops for train pathing, removes requirement of unique stop names by GloinTheDark #210 +--------------------------------------------------------------------------------------------------- +Version: 1.12.10 +Date: 2020-04-10 + Changes: + - optimized filtered event calls + - changed error-invalid-stop-index to warning + Bugfixes: + - script_raised_destroy wasn't properly registered +--------------------------------------------------------------------------------------------------- +Version: 1.12.9 +Date: 2020-04-08 + Changes: + - on_delivery_pickup_complete returns train inventory as actual_shipment +--------------------------------------------------------------------------------------------------- +Version: 1.12.8 +Date: 2020-04-01 + Features: + - use event filters +--------------------------------------------------------------------------------------------------- +Version: 1.12.7 +Date: 2020-03-20 + Bugfixes: + - removed support for train scedule conditions item/fluid > n https://forums.factorio.com/viewtopic.php?f=214&t=82576 +--------------------------------------------------------------------------------------------------- +Version: 1.12.6 +Date: 2020-03-07 + Bugfixes: + - prevent another possible call to invalid stop entity +--------------------------------------------------------------------------------------------------- +Version: 1.12.5 +Date: 2020-03-03 + Bugfixes: + - fixed bug introduced with 1.12.4 +--------------------------------------------------------------------------------------------------- +Version: 1.12.4 +Date: 2020-03-02 + Bugfixes: + - fixed rare crash removing ltn entities in editor mode during dispatcher update phase +--------------------------------------------------------------------------------------------------- +Version: 1.12.3 +Date: 2020-02-23 + Changes: + - refactored on_dispatcher_updated, on_delivery_pickup_complete, on_delivery_completed and on_delivery_failed to be in line with base event naming conventions +--------------------------------------------------------------------------------------------------- +Version: 1.12.2 +Date: 2020-02-12 + Changes: + - updated license + Bugfixes: + - flagged LTN-Tracker rip-off as incompatible +--------------------------------------------------------------------------------------------------- +Version: 1.12.1 +Date: 2020-01-22 + Bugfixes: + - fixed mipmap warning +--------------------------------------------------------------------------------------------------- +Version: 1.12.0 +Date: 2020-01-21 + Features: + - updated to Factorio 0.18 +--------------------------------------------------------------------------------------------------- +Version: 1.11.9 +Date: 2020-01-17 + Bugfixes: + - switching isDepot on with parked train would not properly make the train available +--------------------------------------------------------------------------------------------------- +Version: 1.11.8 +Date: 2020-01-01 + Bugfixes: + - Encoded position signal for carriage types counts incorrectly with backwards trains #200 +--------------------------------------------------------------------------------------------------- +Version: 1.11.7 +Date: 2019-12-03 + Bugfixes: + - global lookup tables are reset every time mod configuration changes +--------------------------------------------------------------------------------------------------- +Version: 1.11.6 +Date: 2019-11-07 + Bugfixes: + - fixing broken stop indexes again +--------------------------------------------------------------------------------------------------- +Version: 1.11.5 +Date: 2019-11-05 + Bugfixes: + - actually remove broken stop indexes found by 1.11.3 changes +--------------------------------------------------------------------------------------------------- +Version: 1.11.4 +Date: 2019-11-01 + Bugfixes: + - removed left over debug logging +--------------------------------------------------------------------------------------------------- +Version: 1.11.3 +Date: 2019-10-30 + Changes: + - push to stable 0.17.74 + Bugfixes: + - prevent entering too large values in timeout settings #196 + - additional safeguards against invalid indexing +--------------------------------------------------------------------------------------------------- +Version: 1.11.2 +Date: 2019-10-07 + Bugfixes: + - compare forces by object when merging forces + - process request state didn't end tick update after running out of requests #196 +--------------------------------------------------------------------------------------------------- +Version: 1.11.1 +Date: 2019-09-26 + Features: + - check if requester, provider and train are on the same surface + - check forces by object instead of name +--------------------------------------------------------------------------------------------------- +Version: 1.11.0 +Date: 2019-09-06 + Features: + - stop iteration should be more robust + - allow n-th tick stepping for all updates + - request processing spread across multiple ticks + Changes: + - replaced setting "limit stops per tick" with "updates per tick" + - added setting "update every n-th tick" + Bugfixes: + - stop name list wasn't updated correctly when removing invalid stops + - some fixes to German setting translation +--------------------------------------------------------------------------------------------------- +Version: 1.10.15 +Date: 2019-08-17 + Features: + - support script_raised_revive +--------------------------------------------------------------------------------------------------- +Version: 1.10.14 +Date: 2019-07-29 + Changes: + - replaced custom NewGame+ call with base api on_pre_surface_cleared #186 + Bugfixes: + - error-invalid-stop had no text assigned +--------------------------------------------------------------------------------------------------- +Version: 1.10.13 +Date: 2019-07-27 + Features: + - Encoded position signal for carriage types https://forums.factorio.com/viewtopic.php?f=214&t=73122 + - reorganized encoded position signals in subgroups per carriage type + Changes: + - renamed internal position signal names, signals of rolling stock from mods can't be migrated and will be missing +--------------------------------------------------------------------------------------------------- +Version: 1.10.12 +Date: 2019-07-05 + Bugfixes: + - fixed German translation #182 +--------------------------------------------------------------------------------------------------- +Version: 1.10.11 +Date: 2019-05-28 + Changes: + - depot inactivity is now in seconds + - stop timeout is now in seconds + - delivery timeout is now in seconds + - removed 60 min limits for timeouts + Bugfixes: + - changes to stop timeout only applied after save and reload #178 +--------------------------------------------------------------------------------------------------- +Version: 1.10.10 +Date: 2019-05-21 + Features: + - support script_raised_built and script_raised_destroy + Bugfixes: + - ensure remote functions exist before calling them +--------------------------------------------------------------------------------------------------- +Version: 1.10.9 +Date: 2019-05-19 + Features: + - add LTN entities to picker dolly blacklist + - added map setting for default network ID #163 +--------------------------------------------------------------------------------------------------- +Version: 1.10.8 +Date: 2019-04-21 + Bugfixes: + - Stop distance cache is reset on version updates +--------------------------------------------------------------------------------------------------- +Version: 1.10.7 +Date: 2019-04-13 + Features: + - Added on_dispatcher_no_train_found event #173 + Bugfixes: + - Fixed nil error in debug log introduced in 1.10.6 +--------------------------------------------------------------------------------------------------- +Version: 1.10.6 +Date: 2019-04-06 + Bugfixes: + - Restore lamp color after fixing stop error #171 + - always start with stop updated after a config change, ensure consistent data and filled tables +--------------------------------------------------------------------------------------------------- +Version: 1.10.5 +Date: 2019-03-30 + Changes: + - moved more functionality to Opteras Library + Bugfixes: + - signal names are generated properly for locomotives and wagons with localised_name +--------------------------------------------------------------------------------------------------- +Version: 1.10.4 +Date: 2019-03-19 + Changes: + - moved functionality to Opteras Library + Bugfixes: + - renaming stops in editor can cause errors +--------------------------------------------------------------------------------------------------- +Version: 1.10.3 +Date: 2019-03-14 + Features: + - added on_delivery_pickup_complete + Changes: + - removed get_ prefix and _event suffix from events + Bugfixes: + - fixed potential upgrade path errors +--------------------------------------------------------------------------------------------------- +Version: 1.10.2 +Date: 2019-03-07 + Features: + - added Stack Thresholds, only for items of course + Changes: + - refactored code into modules + - interface events return data formatted like base events, e.g. event.provided_by_stop, event.requests_by_stop + Bugfixes: + - fixed potential nil reference #157 +--------------------------------------------------------------------------------------------------- +Version: 1.10.1 +Date: 2019-03-03 + Features: + - recipes are more affordable with Bob Electronics + - added circuit network as dependency for technology + - fluid unloads signal fluids with constant -1 #154 + Changes: + - switched dependency for creative-mode to the 0.17 re-release +--------------------------------------------------------------------------------------------------- +Version: 1.10.0 +Date: 2019-02-27 + Features: + - updated to Factorio 0.17 + - new thumbnail + - status lamp works without power +--------------------------------------------------------------------------------------------------- +Version: 1.9.11 +Date: 11.2.2019 + Changes: + - removed placeholder dependency for Noxys Multidirectional Trains, use old versions at own peril +--------------------------------------------------------------------------------------------------- +Version: 1.9.10 +Date: 10.2.2019 + Features: + - added interface on_delivery_completed_event, {delivery = delivery, trainID = trainID} + - added interface on_delivery_failed_event, {delivery = delivery, trainID = trainID} + - added Provided_by_Stop to on_dispatcher_updated_event + Bugfixes: + - mining or destroying a train carriage will once again fail attached delivery + - Interface Stop data requester_priority always returned 0 + - typo reqestPriority in initialization +--------------------------------------------------------------------------------------------------- +Version: 1.9.9 +Date: 3.2.2019 + Bugfixes: + - Desync from 1.9.8 changes to update interval and stop index +--------------------------------------------------------------------------------------------------- +Version: 1.9.8 +Date: 3.2.2019 + Features: + - support for rewritten Noxys Multidirectional Trains https://github.com/CyaNox/Noxys_Multidirectional_Trains/pull/8 + - added Dispatcher.UpdateInterval to Interval + Bugfixes: + - Interface reported nil thresholds for error state stops +--------------------------------------------------------------------------------------------------- +Version: 1.9.7 +Date: 13.1.2019 + Features: + - added setting "limit stops per tick" + - invalid stops have IO entities and references removed when encountered during runtime + Bugfixes: + - trying to write or read from invalid stop IO entities no longer crashes + - blueprints of ltn ports preserve circuit connections + - placing stops next to each other no longer links the wrong IO entities +--------------------------------------------------------------------------------------------------- +Version: 1.9.6 +Date: 12.12.2018 + Features: + - added logistic port if cargo ships is active + Changes: + - performance tweaks + Bugfixes: + - handle layered icons of different sizes +--------------------------------------------------------------------------------------------------- +Version: 1.9.5 +Date: 7.12.2018 + Changes: + - license exempts streaming from no commercial +--------------------------------------------------------------------------------------------------- +Version: 1.9.4 +Date: 16.11.2018 + Features: + - lamp colors can also be read through red wire + - cables from hidden combinator to lamp no longer originate in the middle of the lamp sprite +--------------------------------------------------------------------------------------------------- +Version: 1.9.3 +Date: 23.10.2018 + Bugfixes: + - fix corrupted stops in on_configuration_changed + - remove corrupt stops if fixing fails +--------------------------------------------------------------------------------------------------- +Version: 1.9.2 +Date: 15.10.2018 + Bugfixes: + - left over init from 1.9.0 caused error #141 + Changes: + - renamed remote interface ltn-interface to logistic-train-network +--------------------------------------------------------------------------------------------------- +Version: 1.9.1 +Date: 14.10.2018 + Bugfixes: + - stops are removed before surface deletion #139 + - added creative mode blacklisting to on_load + Changes: + - turned remote interface callbacks into events + - added interface demo to /Interface_Demo/control.lua +--------------------------------------------------------------------------------------------------- +Version: 1.9.0 +Date: 11.10.2018 + Features: + - added remote interface callbacks to recieve stop and dispatcher data + Bugfixes: + - Trains arriving at depots in error state will not be added to available train list +--------------------------------------------------------------------------------------------------- +Version: 1.8.2 +Date: 2.10.2018 + Bugfixes: + - setting Stop timeout was missing some description + - changing "Stop is Depot" signal to 0 didn't remove available train + - deactivating a depot through circuit condition didn't remove available train + - short circuited depot didn't remove available train +--------------------------------------------------------------------------------------------------- +Version: 1.8.1 +Date: 12.9.2018 + Bugfixes: + - on_load checks for corrupt stops +--------------------------------------------------------------------------------------------------- +Version: 1.8.0 +Date: 17.8.2018 + Features: + - added optional circuit conditions to schedules + Changes: + - enabled read from train for all ltn stops by default + - enabled send to train for all ltn stops by default + - generated schedules use β‰₯ (ltn stops still parse > for loading list output) +--------------------------------------------------------------------------------------------------- +Version: 1.7.13 +Date: 29.7.2018 + Features: + - added notifications for skipping request processing due to no transport capacities in depot + - spam filter works with no-train-found notifications #128 +--------------------------------------------------------------------------------------------------- +Version: 1.7.12 +Date: 20.7.2018 + Bugfixes: + - recreate stops missing from global stop list in on_configuration_changed + Changes: + - removed incompatible flag of there-is-my-ghost 0.16.7 seems to work well with LTN + - removed creative mode from optional dependencies until it's updated to 0.16 +--------------------------------------------------------------------------------------------------- +Version: 1.7.11 +Date: 15.7.2018 + Changes: + - flagged there-is-my-ghost as incompatible until that mod stops messing up LTN's composite stop entity +--------------------------------------------------------------------------------------------------- +Version: 1.7.10 +Date: 17.6.2018 + Bugfixes: + - Avoid nil error when station is renamed during build #122 + Changes: + - pushed to 0.16.51 stable +--------------------------------------------------------------------------------------------------- +Version: 1.7.9 +Date: 31.5.2018 + Bugfixes: + - newly created deliveries reset stop lamps from blue to yellow + - FARL (and possibly other mods) could mine IO entities +--------------------------------------------------------------------------------------------------- +Version: 1.7.8 +Date: 23.5.2018 + Bugfixes: + - crash Key "icon_size" not found #116 +--------------------------------------------------------------------------------------------------- +Version: 1.7.7 +Date: 12.5.2018 + Changes: + - pushed to 0.16.36 stable + - added creative mode (fix for 0.16) to optional dependencies + - added requester network id to provider not found message + - added requester & provider merged network id to train not found and train found message + - moved train not found message to from detailed to notification level +--------------------------------------------------------------------------------------------------- +Version: 1.7.6 +Date: 37.3.2018 + Features: + - parked trains controlled by LTN are signalled with blue lamp #106 +--------------------------------------------------------------------------------------------------- +Version: 1.7.5 +Date: 3.3.2018 + Bugfixes: + - Nil reference Error when deconstructing stop with set network id #107 +--------------------------------------------------------------------------------------------------- +Version: 1.7.4 +Date: 17.2.2018 + Changes: + - Replaced lua signal merging with api function +--------------------------------------------------------------------------------------------------- +Version: 1.7.3 +Date: 10.2.2018 + Bugfixes: + - Error when copy-pasting station names https://forums.factorio.com/viewtopic.php?f=214&t=57578 and #102 +--------------------------------------------------------------------------------------------------- +Version: 1.7.2 +Date: 3.2.2018 + Features: + - remove filters and locked slots from trains entering a depot + - support entity icons with sizes other than 32x32 https://forums.factorio.com/viewtopic.php?f=48&t=57151 + Bugfixes: + - renaming could cause wrong stations being removed from station name list https://forums.factorio.com/viewtopic.php?f=214&t=57371 + Removed: + - Chinese translation, please use a language pack like https://mods.factorio.com/mod/zh-CN +--------------------------------------------------------------------------------------------------- +Version: 1.7.1 +Date: 20.1.2018 + Bugfixes: + - automatically generated icons are always cropped to 32x32 + Changes: + - Updated Chinese translation +--------------------------------------------------------------------------------------------------- +Version: 1.7.0 +Date: 20.1.2018 + Features: + - Added binary encoded network ID + - Encoded position signals have unique icons + - Encoded position signals are properly grouped by locomotive and wagon types + Changes: + - Removed obsolete migration +--------------------------------------------------------------------------------------------------- +Version: 1.6.4 +Date: 14.1.2018 + Bugfixes: + - Trains are reinitialized each configuration change to catch changes to locomotives and wagons + - Trains where not properly removed from lookup table when leaving stops +--------------------------------------------------------------------------------------------------- +Version: 1.6.3 +Date: 7.1.2018 + Bugfixes: + - Error when removing depot in state yellow #95 + Changes: + - pushed base to 0.16.14 +--------------------------------------------------------------------------------------------------- +Version: 1.6.2 +Date: 30.12.2017 + Features: + - in game changelog + Changes: + - pushed base to 0.16.8 + - data phase item detection is more robust + - migrating from versions older than 1.1.1 displays error message +--------------------------------------------------------------------------------------------------- +Version: 1.6.1 +Date: 20.12.2017 + Features: + - hr graphics + - yellow depot lamp color indicating a train with assigned delivery still being parked + Removed: + - migration support for versions < 1.1.1 (final Factorio 0.14 release) + Changes: + - stop timeout description no longer mentions inactivity #83 + - train references from MainLocomotive.unit_number to train.id + - deliveries will be removed instantly if the assigned train changes composition e.g a wagon is removed + - lamp colors update faster + Bugfixes: + - mining a single locomotive parked at an ltn stop would not update the stop +--------------------------------------------------------------------------------------------------- +Version: 1.6.0 +Date: 14.12.2017 + Features: + - updated to Factorio 0.16 + - train composition signal for artillery wagon +--------------------------------------------------------------------------------------------------- +Version: 1.5.5 - last build for Factorio 0.15 +Date: 14.12.2017 + Features: + - added depot inactivity setting + Changes: + - Mod Description includes LTN +--------------------------------------------------------------------------------------------------- +Version: 1.5.4 +Date: 8.12.2017 + Features: + - option to reset delivery and schedule when trains leave requester +--------------------------------------------------------------------------------------------------- +Version: 1.5.3 +Date: 1.12.2017 + Features: + - lamp outputs number of active deliveries as value of yellow signal (green wire only) + - lamp outputs error code as values of red/pink signal (green wire only) + - depots, short circuited and disabled stops reset stops active deliveries count completely (use to reset stops showing wrong counts) + Bugfixes: + - active deliveries to/from a stop sometimes isn't properly updated +--------------------------------------------------------------------------------------------------- +Version: 1.5.2 +Date: 13.11.2017 + Changes: + - station time out from inactivity to time passed + - reduced overhead in on_train_changed_state + - pushed base to 0.15.37 (stable) +--------------------------------------------------------------------------------------------------- +Version: 1.5.1 +Date: 3.11.2017 + Changes: + - updated Chinese translation + - stops deactivated by circuit condition or other scripts are not updated + - short circuited stops are skipped without reading circuit signals + - short circuit and deactivated error state take priority over duplicate name +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 17.10.2017 + Features: + - added request priority control signal #22 + Changes: + - changed provider priority icon to be in line with request priority + - changed provider prioritization to provider priority > #existing deliveries from provider > amount #69 + Bugfixes: + - request threshold icon to show ≀ instead of β‰₯ + - locked slots where subtracted from total train slots instead of per wagon +--------------------------------------------------------------------------------------------------- +Version: 1.4.14 +Date: 13.10.2017 + Features: + - added mod setting "Dispatcher Enabled" +--------------------------------------------------------------------------------------------------- +Version: 1.4.13 +Date: 6.10.2017 + Changes: + - reverted base dependency to 0.15.34 (stable) +--------------------------------------------------------------------------------------------------- +Version: 1.4.12 +Date: 2.10.2017 + Features: + - allowed negative provider priority again #64 + Changes: + - pushed base to 0.15.35 +--------------------------------------------------------------------------------------------------- +Version: 1.4.11 +Date: 29.9.2017 + Features: + - thresholds are read as absolute values + - ignore negative control signals except thresholds +--------------------------------------------------------------------------------------------------- +Version: 1.4.10 +Date: 15.9.2017 + Changes: + - improved circuit signal read performance + - pushed base to 0.15.34 +--------------------------------------------------------------------------------------------------- +Version: 1.4.9 +Date: 26.8.2017 + Features: + - added localized mod title and mod description + Bugfixes: + - fixed possible integer overflow from mod settings + - limit max values on stop and delivery timeout to 1 hour + - limit other int settings to 2^32 -1 +--------------------------------------------------------------------------------------------------- +Version: 1.4.8 +Date: 18.8.2017 + Features: + - added more details to debug log messages + Changes: + - "no provider found" warning message changed from message level 2 to 1 + - message level dropdown texts better reflect their behaviour +--------------------------------------------------------------------------------------------------- +Version: 1.4.7 +Date: 11.8.2017 + Bugfixes: + - distance check could prevent better matching trains from being picked + - error encoding train composition for trains longer than 31 carriages #55 +--------------------------------------------------------------------------------------------------- +Version: 1.4.6 +Date: 6.8.2017 + Changes: + - bumped required Factorio version to current stable + Bugfixes: + - Dispatcher picked trains closest to request stop instead of providing stop + - local wagon capacity lookup table could potentially cause desync +--------------------------------------------------------------------------------------------------- +Version: 1.4.5 +Date: 1.8.2017 + Changes: + - removed left over debug message +--------------------------------------------------------------------------------------------------- +Version: 1.4.4 +Date: 1.8.2017 + Changes: + - performance optimizations + Bugfixes: + - deliveries where not properly reserved +--------------------------------------------------------------------------------------------------- +Version: 1.4.3 +Date: 30.7.2017 + Bugfixes: + - fixed nil reference when no providers are available +--------------------------------------------------------------------------------------------------- +Version: 1.4.2 +Date: 30.7.2017 + Changes: + - internally store train capacity for faster access when searching available trains + - rewritten Dispatcher logic +--------------------------------------------------------------------------------------------------- +Version: 1.4.1 +Date: 30.7.2017 + Bugfixes: + - Items where not removed from providers after being added to an order + - orders where merged between different requester +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 17.7.2017 + Features: + - Dispatcher is no longer limited to 1 train/s + Changes: + - Dispatcher goes through requests by age of requests/item instead of requests/stop + - spread dispatcher update over 3 ticks +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 8.7.2017 + Features: + - "message level" for console messages only (no level 4: debug) + - "write debug logfile" checkbox for debug log generation into Factorio-current.log + Removed: + - "log level" and "log output" settings + Changes: + - provider prioritization making deliveries merge more reliably (#trains > provider priority > #existing deliveries from provider > amount) + Bugfixes: + - potential nil reference during stop update +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 21.6.2017 + Changes: + - code cleanup + - train state change and train created events are only active if LTN stops exist +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 18.6.2017 + Changes: + - automatically set output combinator limit + - exceeding output slot size results in some signals being not generated by the output and a console message +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 4.6.2017 + Changes: + - Chinese translation + Bugfixes: + - fixed error with no longer existing items #43 +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 2.6.2017 + Features: + - added support for force merging + Changes: + - added force to deliveries +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2.6.2017 + Features: + - Request Threshold and Provide Threshold + - Disable Warnings Messages control signal #34 + - limit messages to force where possible #40 + - workaround for fluid wagon residue #31 + Removed: + - Minimum Delivery Size and Ignore Minimum Delivery Size + - Best Effort, Provide Threshold = 1 does the same now + - toggle to loading list, stops only show expected inventory after loading +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 +Date: 24.5.2017 + Features: + - added German locale + - added 128x128 tech icon + - overloaded trains no longer cause requesters to flip to providers during delivery #33 + Changes: + - set expected train inventory to default to active + Bugfixes: + - bug in Chinese locale +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 19.5.2017 + Bugfixes: + - potential nil references in first_signal and stop ghost entities +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 +Date: 17.5.2017 + Bugfixes: + - error when schedule is referencing non existing items +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 16.5.2017 + Changes: + - replaced workaround with get_fluid_count and get_fluid_contents +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 13.5.2017 + Features: + - added toggle between output of positive load, negative unload amount and expected train inventory after (un-)loading + - added Chinese locale by 745275633 + - formated setting descriptions, should be less wall of text + Bugfixes: + - a crash when adding carriages to trains parked at provider or requester +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 9.5.2017 + Features: + - duplicate names are checked across all train-stops instead of only LTN Stops + Changes: + - improved performance of checking duplicate names by using events introduced with 0.15 + Bugfixes: + - desync https://forums.factorio.com/viewtopic.php?f=23&t=46873 + - dispatcher picks providers with incompatible train length +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 7.5.2017 + Changes: + - overloading trains updates delivery size once per update interval (before update was only done once train leaves provider) + Bugfixes: + - overloading trains reserved too much of an item/fluid in provider + - fluid deliveries where accidentally deleted at departure from provider +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 1.5.2017 + Changes: + - updated mod setting descriptions + - replaced floating-text hack to get inventory sizes with 0.15 functions + - added support of icons{} to signal generation +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 29.4.2017 + Features: + - updated to Factorio 0.15 + - added support for any Fluid Wagon for fluid transport + - config.lua settings moved to options-mod settings + Removed: + - support of RailTanker (RailTankers will be ignored, removed fake item conversions) + - removed grey detection signal from output + Changes: + - short circuit detection uses network id +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 - last version for Factorio 0.14 +Date: 19.5.2017 + Bugfixes: + - fixed error when schedule is referencing non existing items + - fixed potential nil references in first_signal and stop ghost entities +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 24.4.2017 + Features: + - speed up loading by skipping parts of initialization according to old_version + Changes: + - automatically remove orphaned lamp control entities + - messages differing only in item count are treated as the same message by the message filter + - decreased delivery-removed-timeout and delivery-removed-train-invalid from log level 2 to 1 + Bugfixes: + - deconstruction of broken stops properly removes stop and surrounding I/O entities diff --git a/LogisticTrainNetwork/control.lua b/LogisticTrainNetwork/control.lua new file mode 100644 index 00000000..e85150e4 --- /dev/null +++ b/LogisticTrainNetwork/control.lua @@ -0,0 +1,25 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +Get_Distance = require("__flib__.misc").get_distance +Get_Main_Locomotive = require("__flib__.train").get_main_locomotive +Get_Train_Name = require("__flib__.train").get_backer_name + +require "script.constants" +require "script.settings" +require "script.print" +require "script.alert" +require "script.utils" -- requires settings +require "script.hotkey-events" -- requires print + +require "script.stop-update" +require "script.dispatcher" +require "script.stop-events" +require "script.train-events" +require "script.train-interface" -- requires train-events +require "script.surface-interface" -- requires stop-events +require "script.interface" -- ties into other modules +require "script.init" -- requires other modules loaded first diff --git a/LogisticTrainNetwork/data-final-fixes.lua b/LogisticTrainNetwork/data-final-fixes.lua new file mode 100644 index 00000000..e1900eff --- /dev/null +++ b/LogisticTrainNetwork/data-final-fixes.lua @@ -0,0 +1,65 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +local flib = require('__flib__.data-util') + +local icon_encoded_position = { { icon = "__LogisticTrainNetwork__/graphics/icons/encoded-position.png", icon_size = 64, tint = {r=1, g=1, b=1, a=1} } } + +local function create_signal(prototype, order) + local signal = { + type = "virtual-signal", + name = "ltn-position-"..prototype.name, + icons = flib.create_icons(prototype, icon_encoded_position) or icon_encoded_position, + icon_size = nil, + subgroup = "ltn-position-signal", + order = order, + localised_name = {"virtual-signal-name.ltn-position", prototype.localised_name or {"entity-name." .. prototype.name}} + } + data:extend({signal}) +end + +local lococount = 0 +for _, loco in pairs(data.raw["locomotive"]) do + lococount=lococount+1 + create_signal(loco, "a"..string.format("%02d", lococount)) +end + +local wagoncount = 0 +for _, wagon in pairs(data.raw["cargo-wagon"]) do + wagoncount=wagoncount+1 + create_signal(wagon, "b"..string.format("%02d", wagoncount)) +end + +local wagoncount_fluid = 0 +for _, wagon in pairs(data.raw["fluid-wagon"]) do + wagoncount_fluid=wagoncount_fluid+1 + create_signal(wagon, "c"..string.format("%02d", wagoncount_fluid)) +end + +local wagoncount_artillery = 0 +for _, wagon in pairs(data.raw["artillery-wagon"]) do + wagoncount_artillery=wagoncount_artillery+1 + create_signal(wagon, "d"..string.format("%02d", wagoncount_artillery)) +end + +-- sum items, fluids and train composition signals for number of slots required in stop output +-- badly written mods may generate prototypes in final-fixes after this so additional safeguard in updating the output needs to be taken +-- turns out there are a lot of specialized types that act as items +local itemcount = 0 +local fluidcount = 0 +for type, type_data in pairs(data.raw) do + for item_name, item in pairs(type_data) do + if item.stack_size then + itemcount = itemcount + 1 + end + if type == "fluid" then + fluidcount = fluidcount + 1 + end + end +end + +data.raw["constant-combinator"]["logistic-train-stop-output"].item_slot_count = 4 + lococount + wagoncount + wagoncount_fluid + wagoncount_artillery + itemcount + fluidcount +log(string.format("[LTN] found %d items, %d fluids, %d locomotives, %d cargo wagons, %d fluid wagons, %d artillery wagons.", itemcount, fluidcount, lococount, wagoncount, wagoncount_fluid, wagoncount_artillery)) diff --git a/LogisticTrainNetwork/data.lua b/LogisticTrainNetwork/data.lua new file mode 100644 index 00000000..102caea7 --- /dev/null +++ b/LogisticTrainNetwork/data.lua @@ -0,0 +1,14 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +flib = require('__flib__.data-util') +require ("prototypes.technology") +require ("prototypes.recipes") +require ("prototypes.items") +require ("prototypes.entities") +require ("prototypes.signals") +require ("prototypes.hotkeys") +flib = nil \ No newline at end of file diff --git a/LogisticTrainNetwork/graphics/entity/hr-output.png b/LogisticTrainNetwork/graphics/entity/hr-output.png new file mode 100644 index 00000000..e2d402ed Binary files /dev/null and b/LogisticTrainNetwork/graphics/entity/hr-output.png differ diff --git a/LogisticTrainNetwork/graphics/entity/output.png b/LogisticTrainNetwork/graphics/entity/output.png new file mode 100644 index 00000000..81a0a407 Binary files /dev/null and b/LogisticTrainNetwork/graphics/entity/output.png differ diff --git a/LogisticTrainNetwork/graphics/icons/cargo-alert.png b/LogisticTrainNetwork/graphics/icons/cargo-alert.png new file mode 100644 index 00000000..e4d2dcc7 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/cargo-alert.png differ diff --git a/LogisticTrainNetwork/graphics/icons/cargo-warning.png b/LogisticTrainNetwork/graphics/icons/cargo-warning.png new file mode 100644 index 00000000..82540c40 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/cargo-warning.png differ diff --git a/LogisticTrainNetwork/graphics/icons/depot-empty.png b/LogisticTrainNetwork/graphics/icons/depot-empty.png new file mode 100644 index 00000000..6deb8ada Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/depot-empty.png differ diff --git a/LogisticTrainNetwork/graphics/icons/depot-priority.png b/LogisticTrainNetwork/graphics/icons/depot-priority.png new file mode 100644 index 00000000..7616ef8c Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/depot-priority.png differ diff --git a/LogisticTrainNetwork/graphics/icons/depot-warning.png b/LogisticTrainNetwork/graphics/icons/depot-warning.png new file mode 100644 index 00000000..1d8d2095 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/depot-warning.png differ diff --git a/LogisticTrainNetwork/graphics/icons/depot.png b/LogisticTrainNetwork/graphics/icons/depot.png new file mode 100644 index 00000000..3f1e7643 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/depot.png differ diff --git a/LogisticTrainNetwork/graphics/icons/disable-warnings.png b/LogisticTrainNetwork/graphics/icons/disable-warnings.png new file mode 100644 index 00000000..0e59ce23 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/disable-warnings.png differ diff --git a/LogisticTrainNetwork/graphics/icons/empty.png b/LogisticTrainNetwork/graphics/icons/empty.png new file mode 100644 index 00000000..9fd8c8b8 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/empty.png differ diff --git a/LogisticTrainNetwork/graphics/icons/encoded-position.png b/LogisticTrainNetwork/graphics/icons/encoded-position.png new file mode 100644 index 00000000..347b55e6 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/encoded-position.png differ diff --git a/LogisticTrainNetwork/graphics/icons/locked-slot.png b/LogisticTrainNetwork/graphics/icons/locked-slot.png new file mode 100644 index 00000000..92531339 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/locked-slot.png differ diff --git a/LogisticTrainNetwork/graphics/icons/max-train-length.png b/LogisticTrainNetwork/graphics/icons/max-train-length.png new file mode 100644 index 00000000..cbcd20ae Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/max-train-length.png differ diff --git a/LogisticTrainNetwork/graphics/icons/max-trains.png b/LogisticTrainNetwork/graphics/icons/max-trains.png new file mode 100644 index 00000000..7a8a8d08 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/max-trains.png differ diff --git a/LogisticTrainNetwork/graphics/icons/min-train-length.png b/LogisticTrainNetwork/graphics/icons/min-train-length.png new file mode 100644 index 00000000..abf30870 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/min-train-length.png differ diff --git a/LogisticTrainNetwork/graphics/icons/network-id.png b/LogisticTrainNetwork/graphics/icons/network-id.png new file mode 100644 index 00000000..d6d91dd9 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/network-id.png differ diff --git a/LogisticTrainNetwork/graphics/icons/output.png b/LogisticTrainNetwork/graphics/icons/output.png new file mode 100644 index 00000000..451d73da Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/output.png differ diff --git a/LogisticTrainNetwork/graphics/icons/provider-priority.png b/LogisticTrainNetwork/graphics/icons/provider-priority.png new file mode 100644 index 00000000..a42e96db Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/provider-priority.png differ diff --git a/LogisticTrainNetwork/graphics/icons/provider-stack-threshold.png b/LogisticTrainNetwork/graphics/icons/provider-stack-threshold.png new file mode 100644 index 00000000..377ddc3c Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/provider-stack-threshold.png differ diff --git a/LogisticTrainNetwork/graphics/icons/provider-threshold.png b/LogisticTrainNetwork/graphics/icons/provider-threshold.png new file mode 100644 index 00000000..8c274969 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/provider-threshold.png differ diff --git a/LogisticTrainNetwork/graphics/icons/requester-priority.png b/LogisticTrainNetwork/graphics/icons/requester-priority.png new file mode 100644 index 00000000..ac8fefe9 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/requester-priority.png differ diff --git a/LogisticTrainNetwork/graphics/icons/requester-stack-threshold.png b/LogisticTrainNetwork/graphics/icons/requester-stack-threshold.png new file mode 100644 index 00000000..01713f58 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/requester-stack-threshold.png differ diff --git a/LogisticTrainNetwork/graphics/icons/requester-threshold.png b/LogisticTrainNetwork/graphics/icons/requester-threshold.png new file mode 100644 index 00000000..ff505429 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/requester-threshold.png differ diff --git a/LogisticTrainNetwork/graphics/icons/train-stop.png b/LogisticTrainNetwork/graphics/icons/train-stop.png new file mode 100644 index 00000000..9acf9dd6 Binary files /dev/null and b/LogisticTrainNetwork/graphics/icons/train-stop.png differ diff --git a/LogisticTrainNetwork/graphics/technology/ltn_technology.png b/LogisticTrainNetwork/graphics/technology/ltn_technology.png new file mode 100644 index 00000000..6a4b6597 Binary files /dev/null and b/LogisticTrainNetwork/graphics/technology/ltn_technology.png differ diff --git a/LogisticTrainNetwork/info.json b/LogisticTrainNetwork/info.json new file mode 100644 index 00000000..128053c8 --- /dev/null +++ b/LogisticTrainNetwork/info.json @@ -0,0 +1,11 @@ +{ + "name": "LogisticTrainNetwork", + "version": "1.18.6", + "title": "LTN - Logistic Train Network", + "author": "Optera", + "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729", + "homepage": "https://forums.factorio.com/viewforum.php?f=214", + "description": "Adds new train stops forming a highly configurable, fully automated logistic network.", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.87", "flib >= 0.6.0", "(?)cargo-ships"] +} diff --git a/LogisticTrainNetwork/locale/en/base.cfg b/LogisticTrainNetwork/locale/en/base.cfg new file mode 100644 index 00000000..2148946a --- /dev/null +++ b/LogisticTrainNetwork/locale/en/base.cfg @@ -0,0 +1,92 @@ +[mod-name] +LogisticTrainNetwork=LTN - Logistic Train Network + +[mod-description] +LogisticTrainNetwork=Adds new train stops forming a highly configurable, fully automated logistic network. + +[entity-name] +logistic-train-stop=Logistic Train Stop +logistic-train-stop-input=Logistic Train Stop Input +logistic-train-stop-output=Logistic Train Stop Output +ltn-port=Logistic Port + +[entity-description] +logistic-train-stop=Logistic stops request and provide items and fluids. +ltn-port=Logistic ports request and provide items and fluids. + +[item-name] +logistic-train-stop=__ENTITY__logistic-train-stop__ +logistic-train-stop-input=__ENTITY__logistic-train-stop-input__ +logistic-train-stop-output=__ENTITY__logistic-train-stop-output__ + +[recipe-name] +logistic-train-stop=__ENTITY__logistic-train-stop__ +ltn-port=__ENTITY__ltn-port__ + +[technology-name] +logistic-train-network=Logistic Train Network + +[technology-description] +logistic-train-network=Logistic Train Stops request and provide items and fluids for automatically generated train schedules. + +[virtual-signal-name] +ltn-position-any-locomotive=Encoded positions of every locomotive +ltn-position-any-cargo-wagon=Encoded positions of every cargo wagon +ltn-position-any-fluid-wagon=Encoded positions of every fluid wagon +ltn-position-any-artillery-wagon=Encoded positions of every artillery cannon +ltn-position=Encoded positions of __1__ +ltn-depot=Stop is Depot +ltn-depot-priority=Depot Priority +ltn-network-id=Encoded Network ID +ltn-min-train-length=Minimum Train Length +ltn-max-train-length=Maximum Train Length +ltn-max-trains=Limit Trains +ltn-requester-threshold=Request Threshold +ltn-requester-stack-threshold=Request Stack Threshold +ltn-requester-priority=Request Priority +ltn-provider-threshold=Provide Threshold +ltn-provider-stack-threshold=Provide Stack Threshold +ltn-provider-priority=Provide Priority +ltn-locked-slots=Locked Slots per Wagon +ltn-disable-warnings=Disable Warning Messages + +[ltn-message] +error-duplicated-unit-number=[LTN] Error: Duplicated unit_number __1__. +error-stop-orientation=[LTN] Error: invalid train stop orientation __1__. +error-invalid-stop=[LTN] Error: invalid train stop __1__. +error-parse-item=[LTN] Error: could not parse item __1__. +error-no-stop=[LTN] Error: Couldn't get provider or requester stop. +error-stop-output-truncated=[LTN] Error: Inventory of train __2__ at stop __1__ exceeds stop output limit of __3__ by __4__ signals. +error-invalid-delivery=[LTN] Error: Removing invalid delivery from stop __1__ +error-invalid-stop-index=[LTN] Error: Invalid stop unit_number __1__ in global.LogisticTrainStops. +error-invalid-request-index=[LTN] Error: Invalid index __1__ in global.Dispatcher.Requests. +error-invalid-position-signal=[LTN] Error: position signal __1__ does not exist. + +warning-dispatcher-disabled=[LTN] Warning: Dispatcher disabled. No deliveries will be created. + +empty-depot-item=[LTN] No train to transport items found in depots. Skipping item processing. +empty-depot-fluid=[LTN] No train to transport fluids found in depots. Skipping fluid processing. +no-provider-found=[LTN] Requester __1__: No station supplying __2__ found in networks __3__. +provider-found=[LTN] Provider __1__: priority: __2__, deliveries: __3__, available: __4__ __5__. +no-train-found=[LTN] No train to transport from __1__ to __2__ in networks __3__ with length between __4__ and __5__ found in Depot. +train-found=[LTN] Train to transport __4__/__5__ stacks from __1__ to __2__ in networks __3__ found in Depot. +creating-delivery=[LTN] Creating delivery from __1__ to __2__: __3__ __4__. +creating-delivery-merged=[LTN] Creating merged delivery from __1__ to __2__: __3__ stacks. +delivery-removed-depot=[LTN] Delivery from __1__ to __2__ removed. Train returned to depot. +delivery-removed-train-invalid=[LTN] Delivery from __1__ to __2__ removed. Train no longer valid. +delivery-removed-timeout=[LTN] Delivery from __1__ to __2__ running for __3__ ticks removed after time out. + +train-arrived=[LTN] __1__ arrived at __2__. +train-left=[LTN] __1__ departed from __2__. + +provider_missing_cargo=[LTN] Train __1__ left provider __2__ with missing cargo. +provider_unscheduled_cargo=[LTN] Train __1__ left provider __2__ with unscheduled cargo. +requester_unscheduled_cargo=[LTN] Train __1__ arrived at requester __2__ with unscheduled cargo. +requester_left_over_cargo=[LTN] Train __1__ left requester __2__ with left over cargo. +depot_left_over_cargo=[LTN] Train __1__ entered depot __2__ with left over cargo. + +dispatcher-enabled=[LTN] Dispatcher enabled by __1__. +dispatcher-disabled=[LTN] Dispatcher disabled by __1__. + +[controls] +ltn-toggle-dispatcher=Toggle LTN-Dispatcher. \ No newline at end of file diff --git a/LogisticTrainNetwork/locale/en/settings.cfg b/LogisticTrainNetwork/locale/en/settings.cfg new file mode 100644 index 00000000..5b13695d --- /dev/null +++ b/LogisticTrainNetwork/locale/en/settings.cfg @@ -0,0 +1,51 @@ +[mod-setting-name] +ltn-interface-console-level=Message level +ltn-interface-message-filter-age=Message filter timeout (ticks) +ltn-interface-message-gps=GPS tags +ltn-interface-factorio-alerts=Factorio Alerts +ltn-interface-debug-logfile=Enable debug log + +ltn-dispatcher-enabled=Dispatcher Enabled +ltn-dispatcher-nth_tick=Update frequency (ticks) +ltn-dispatcher-updates-per-tick=Updates per tick +ltn-dispatcher-requester-threshold=Request Threshold +ltn-dispatcher-provider-threshold=Provide Threshold +ltn-dispatcher-schedule-circuit-control=Schedule circuit conditions +ltn-dispatcher-depot-inactivity(s)=Depot inactivity (sec) +ltn-dispatcher-stop-timeout(s)=Stop timeout (sec) +ltn-dispatcher-delivery-timeout(s)=Delivery timeout (sec) +ltn-dispatcher-requester-delivery-reset=Delivery completes at requester +ltn-dispatcher-finish-loading=Finish loading +ltn-depot-reset-filters=Depots reset filters +ltn-depot-fluid-cleaning=Depot fluid removal limit +ltn-stop-default-network=Default network ID +ltn-provider-show-existing-cargo=Providers output existing cargo + +[mod-setting-description] +ltn-interface-console-level=Detail level of in game messages.\n\n0: Off\nNo messages will be generated.\n\n1: Errors & Warnings\nPrint only errors and warnings.\n\n2: Notifications (default)\nPrint basic information like missing resources or generating deliveries.\n\n3: Detailed Messages\nPrint detailed information about finding providers and trains. +ltn-interface-message-filter-age=Message age in ticks before filtered messages are shown again.\ndefault = 18000 +ltn-interface-factorio-alerts=Show errors and warnings as Factorio alerts +ltn-interface-debug-logfile=Write debug information to /Factorio/factorio-current.log. + +ltn-dispatcher-enabled=Warning: Deactivating Dispatcher stops delivery generation.\nItem levels will still be monitored. +ltn-dispatcher-nth_tick=How fast stops and requests are updated.\nHigher numbers improve performance by spreading out updates over more ticks.\nWhen set > 1 forces Updates per tick to 1. +ltn-dispatcher-updates-per-tick=Limits the number of stops and requests updated per tick.\nLower numbers increase performance.\nIgnored when Update frequency > 1. +ltn-dispatcher-requester-threshold=Missing amount of items/fluids triggering a delivery.\nCan be overridden with signal at requesting stops.\ndefault = 1000 +ltn-dispatcher-provider-threshold=Amount of items/fluids required to act as provider.\nCan be overridden with signal at providing stops.\ndefault = 1000 +ltn-dispatcher-schedule-circuit-control=Adds circuit conditions to wait for red = 0 OR green β‰₯ 1 to all stops.\nWarning: All LTN stops require having "send to train" enabled and a circuit connection. Otherwise trains will be stuck waiting forever.\ndefault = false +ltn-dispatcher-depot-inactivity(s)=Duration in seconds of inactivity before trains leave the depot.\ndefault = 5 +ltn-dispatcher-stop-timeout(s)=Duration in seconds before trains are forced out of a station.\n0 deactivates this feature.\ndefault = 120 +ltn-dispatcher-delivery-timeout(s)=Duration in seconds deliveries can take before assuming the train was lost.\ndefault = 600 (10min) +ltn-dispatcher-requester-delivery-reset=False: (default)\nDelivery and schedule are reset when train arrives at depot.\nChanges to trains parked at requesting stops have no effect.\n\nTrue:\nDelivery and schedule are reset when train leaves requester.\nChanges to trains parked at requesting stops will remove delivery and reset schedule. +ltn-dispatcher-finish-loading=True: (default)\nPrevents trains from leaving while inserters/pumps are working by adding 2s inactivity condition.\n\nFalse:\nTrains will leave immediately when all items have been loaded.\nInserters at loading stations will get stuck. +ltn-depot-reset-filters=True: (default)\nCargo wagons have their filters and stack limitations cleared when entering a depot. +ltn-depot-fluid-cleaning=Maximum amount of fluid per wagon automatically destroyed when entering depots.\nSet to 0 to disable. +ltn-stop-default-network=Network ID used for stops without "Encoded Network ID" signal. +ltn-provider-show-existing-cargo=True: (default)\nCargo inside train when arriving at provider is shown in LTN Output.\nIncludes items from inserters holding items on tracks. + +[string-mod-setting] +#-= +ltn-interface-console-level-0=0: Off +ltn-interface-console-level-1=1: Errors & Warnings +ltn-interface-console-level-2=2: Notifications +ltn-interface-console-level-3=3: Detailed Messages \ No newline at end of file diff --git a/LogisticTrainNetwork/migrations/1.10.13.json b/LogisticTrainNetwork/migrations/1.10.13.json new file mode 100644 index 00000000..d38e1bd0 --- /dev/null +++ b/LogisticTrainNetwork/migrations/1.10.13.json @@ -0,0 +1,9 @@ +{ + "virtual-signal": + [ + ["LTN-locomotive", "ltn-position-locomotive"], + ["LTN-cargo-wagon", "ltn-position-cargo-wagon"], + ["LTN-fluid-wagon", "ltn-position-fluid-wagon"], + ["LTN-artillery-wagon", "ltn-position-artillery-wagon"] + ] +} \ No newline at end of file diff --git a/LogisticTrainNetwork/migrations/1.3.0.json b/LogisticTrainNetwork/migrations/1.3.0.json new file mode 100644 index 00000000..271b780b --- /dev/null +++ b/LogisticTrainNetwork/migrations/1.3.0.json @@ -0,0 +1,9 @@ +{ + "virtual-signal": + [ + ["min-train-length", "ltn-min-train-length"], + ["max-train-length", "ltn-max-train-length"], + ["stop-priority", "ltn-provider-priority"], + ["min-delivery-size", "ltn-requester-threshold"] + ] +} \ No newline at end of file diff --git a/LogisticTrainNetwork/migrations/1.9.6.lua b/LogisticTrainNetwork/migrations/1.9.6.lua new file mode 100644 index 00000000..ec607998 --- /dev/null +++ b/LogisticTrainNetwork/migrations/1.9.6.lua @@ -0,0 +1,12 @@ +for i, force in pairs(game.forces) do + force.reset_recipes() + force.reset_technologies() + + if force.technologies["logistic-train-network"].researched then + force.recipes["logistic-train-stop"].enabled = true + if force.recipes["ltn-port"] then force.recipes["ltn-port"].enabled = true end + else + force.recipes["logistic-train-stop"].enabled = false + if force.recipes["ltn-port"] then force.recipes["ltn-port"].enabled = false end + end +end diff --git a/LogisticTrainNetwork/prototypes/entities.lua b/LogisticTrainNetwork/prototypes/entities.lua new file mode 100644 index 00000000..220f0536 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/entities.lua @@ -0,0 +1,215 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +local ltn_stop = flib.copy_prototype(data.raw["train-stop"]["train-stop"], "logistic-train-stop") +ltn_stop.icon = "__LogisticTrainNetwork__/graphics/icons/train-stop.png" +ltn_stop.icon_size = 64 +ltn_stop.icon_mipmaps = 4 +ltn_stop.next_upgrade = nil +ltn_stop.selection_box = {{-0.6, -0.6}, {0.6, 0.6}} +-- ltn_stop.collision_box = {{-0.5, -0.1}, {0.5, 0.4}} + +local ltn_stop_in = flib.copy_prototype(data.raw["lamp"]["small-lamp"],"logistic-train-stop-input") +ltn_stop_in.icon = "__LogisticTrainNetwork__/graphics/icons/train-stop.png" +ltn_stop_in.icon_size = 64 +ltn_stop_in.icon_mipmaps = 4 +ltn_stop_in.next_upgrade = nil +ltn_stop_in.minable = nil +ltn_stop_in.selection_box = {{-0.5, -0.5}, {0.5, 0.5}} +ltn_stop_in.selection_priority = (ltn_stop_in.selection_priority or 50) + 10 -- increase priority to default + 10 +ltn_stop_in.collision_box = {{-0.15, -0.15}, {0.15, 0.15}} +ltn_stop_in.collision_mask = {"rail-layer"} -- collide only with rail entities +ltn_stop_in.energy_usage_per_tick = "10W" +ltn_stop_in.light = { intensity = 1, size = 6 } +ltn_stop_in.energy_source = {type="void"} + +local ltn_stop_out = flib.copy_prototype(data.raw["constant-combinator"]["constant-combinator"],"logistic-train-stop-output") +ltn_stop_out.icon = "__LogisticTrainNetwork__/graphics/icons/output.png" +ltn_stop_out.icon_size = 64 +ltn_stop_out.icon_mipmaps = nil +ltn_stop_out.next_upgrade = nil +ltn_stop_out.minable = nil +ltn_stop_out.selection_box = {{-0.5, -0.5}, {0.5, 0.5}} +ltn_stop_out.selection_priority = (ltn_stop_out.selection_priority or 50) + 10 -- increase priority to default + 10 +ltn_stop_out.collision_box = {{-0.15, -0.15}, {0.15, 0.15}} +ltn_stop_out.collision_mask = {"rail-layer"} -- collide only with rail entities +ltn_stop_out.item_slot_count = 50 +ltn_stop_out.sprites = make_4way_animation_from_spritesheet( + { layers = + { + { + filename = "__LogisticTrainNetwork__/graphics/entity/output.png", + width = 58, + height = 52, + frame_count = 1, + shift = util.by_pixel(0, 5), + hr_version = + { + scale = 0.5, + filename = "__LogisticTrainNetwork__/graphics/entity/hr-output.png", + width = 114, + height = 102, + frame_count = 1, + shift = util.by_pixel(0, 5), + }, + }, + { + filename = "__base__/graphics/entity/combinator/constant-combinator-shadow.png", + width = 50, + height = 34, + frame_count = 1, + shift = util.by_pixel(9, 6), + draw_as_shadow = true, + hr_version = + { + scale = 0.5, + filename = "__base__/graphics/entity/combinator/hr-constant-combinator-shadow.png", + width = 98, + height = 66, + frame_count = 1, + shift = util.by_pixel(8.5, 5.5), + draw_as_shadow = true, + }, + }, + }, + }) + +local control_connection_points = { + red = util.by_pixel(-3, -7), + green = util.by_pixel(-1, 0) +} + +local ltn_lamp_control = flib.copy_prototype(data.raw["constant-combinator"]["constant-combinator"],"logistic-train-stop-lamp-control") +ltn_lamp_control.icon = "__LogisticTrainNetwork__/graphics/icons/empty.png" +ltn_lamp_control.icon_size = 32 +ltn_lamp_control.icon_mipmaps = nil +ltn_lamp_control.next_upgrade = nil +ltn_lamp_control.minable = nil +ltn_lamp_control.selection_box = {{-0.0, -0.0}, {0.0, 0.0}} +ltn_lamp_control.collision_box = {{-0.0, -0.0}, {0.0, 0.0}} +ltn_lamp_control.collision_mask = {} -- disable collision +ltn_lamp_control.item_slot_count = 50 +ltn_lamp_control.flags = {"not-blueprintable", "not-deconstructable", "placeable-off-grid"} +ltn_lamp_control.sprites = +{ + north = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + x = 0, + y = 0, + width = 1, + height = 1, + frame_count = 1, + shift = {0, 0}, + }, + east = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + x = 0, + y = 0, + width = 1, + height = 1, + frame_count = 1, + shift = {0, 0}, + }, + south = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + x = 0, + y = 0, + width = 1, + height = 1, + frame_count = 1, + shift = {0, 0}, + }, + west = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + x = 0, + y = 0, + width = 1, + height = 1, + frame_count = 1, + shift = {0, 0}, + } +} +ltn_lamp_control.activity_led_sprites = +{ + north = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + width = 1, + height = 1, + frame_count = 1, + shift = {0.0, 0.0}, + }, + east = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + width = 1, + height = 1, + frame_count = 1, + shift = {0.0, 0.0}, + }, + south = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + width = 1, + height = 1, + frame_count = 1, + shift = {0.0, 0.0}, + }, + west = + { + filename = "__LogisticTrainNetwork__/graphics/icons/empty.png", + width = 1, + height = 1, + frame_count = 1, + shift = {0.0, 0.0}, + } +} +ltn_lamp_control.activity_led_light = +{ + intensity = 0.0, + size = 0, +} +ltn_lamp_control.circuit_wire_connection_points = +{ + { + shadow = control_connection_points, + wire = control_connection_points + }, + { + shadow = control_connection_points, + wire = control_connection_points + }, + { + shadow = control_connection_points, + wire = control_connection_points + }, + { + shadow = control_connection_points, + wire = control_connection_points + }, +} + + +data:extend({ + ltn_stop, + ltn_stop_in, + ltn_stop_out, + ltn_lamp_control +}) + +-- support for cargo ship ports +if mods["cargo-ships"] then + ltn_port = flib.copy_prototype(data.raw["train-stop"]["port"], "ltn-port") + ltn_port.selection_box = {{-0.01, -0.6}, {1.9, 0.6}} + -- ltn_port.collision_box = {{-0.01, -0.1}, {1.9, 0.4}} + data:extend({ + ltn_port + }) +end \ No newline at end of file diff --git a/LogisticTrainNetwork/prototypes/hotkeys.lua b/LogisticTrainNetwork/prototypes/hotkeys.lua new file mode 100644 index 00000000..6a7b9ce0 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/hotkeys.lua @@ -0,0 +1,8 @@ +data:extend{ + { + type = "custom-input", + name = "ltn-toggle-dispatcher", + key_sequence = "CONTROL + SHIFT + D", + consuming = "game-only" + } +} \ No newline at end of file diff --git a/LogisticTrainNetwork/prototypes/items.lua b/LogisticTrainNetwork/prototypes/items.lua new file mode 100644 index 00000000..7e6daa77 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/items.lua @@ -0,0 +1,43 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +local ltn_stop = flib.copy_prototype(data.raw["item"]["train-stop"], "logistic-train-stop") +ltn_stop.icon = "__LogisticTrainNetwork__/graphics/icons/train-stop.png" +ltn_stop.icon_size = 64 +ltn_stop.icon_mipmaps = 4 +ltn_stop.order = ltn_stop.order.."-c" + +local ltn_stop_in = flib.copy_prototype(data.raw["item"]["small-lamp"], "logistic-train-stop-input") +ltn_stop_in.flags = {"hidden"} + +local ltn_stop_out = flib.copy_prototype(data.raw["item"]["constant-combinator"],"logistic-train-stop-output") +ltn_stop_out.flags = {"hidden"} +ltn_stop_out.icon = "__LogisticTrainNetwork__/graphics/icons/output.png" +ltn_stop_out.icon_size = 64 +ltn_stop_out.icon_mipmaps = nil + +local ltn_lamp_control = flib.copy_prototype(data.raw["item"]["constant-combinator"],"logistic-train-stop-lamp-control") +ltn_lamp_control.flags = {"hidden"} +ltn_lamp_control.icon = "__LogisticTrainNetwork__/graphics/icons/empty.png" +ltn_lamp_control.icon_size = 32 +ltn_lamp_control.icon_mipmaps = nil + +data:extend({ + ltn_stop, + ltn_stop_in, + ltn_stop_out, + ltn_lamp_control +}) + +-- support for cargo ship ports +if mods["cargo-ships"] then + ltn_port =flib.copy_prototype(data.raw["item"]["port"], "ltn-port") + ltn_port.order = ltn_port.order.."-c" + + data:extend({ + ltn_port + }) +end \ No newline at end of file diff --git a/LogisticTrainNetwork/prototypes/recipes.lua b/LogisticTrainNetwork/prototypes/recipes.lua new file mode 100644 index 00000000..be60f2b4 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/recipes.lua @@ -0,0 +1,36 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +local ltn_stop = flib.copy_prototype(data.raw["recipe"]["train-stop"], "logistic-train-stop") +ltn_stop.ingredients = { + {"train-stop", 1}, + {"constant-combinator", 1}, + {"small-lamp", 1}, + {"green-wire", 2}, + {"red-wire", 2}, +} +ltn_stop.enabled = false + +data:extend({ + ltn_stop +}) + +-- support for cargo ship ports +if mods["cargo-ships"] then + ltn_port =flib.copy_prototype(data.raw["recipe"]["port"], "ltn-port") + ltn_port.ingredients = { + {"port", 1}, + {"constant-combinator", 1}, + {"small-lamp", 1}, + {"green-wire", 2}, + {"red-wire", 2}, + } + ltn_port.enabled = false + + data:extend({ + ltn_port + }) +end \ No newline at end of file diff --git a/LogisticTrainNetwork/prototypes/signals.lua b/LogisticTrainNetwork/prototypes/signals.lua new file mode 100644 index 00000000..1b95de22 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/signals.lua @@ -0,0 +1,260 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +data:extend({ + { + type = "item-subgroup", + name = "LTN-signal", + group = "signals", + order = "ltn0[LTN-signal]" + }, + { + type = "virtual-signal", + name = "ltn-depot", + icon = "__LogisticTrainNetwork__/graphics/icons/depot.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "a-a" + }, + { + type = "virtual-signal", + name = "ltn-depot-priority", + icon = "__LogisticTrainNetwork__/graphics/icons/depot-priority.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "a-b" + }, + { + type = "virtual-signal", + name = "ltn-network-id", + icon = "__LogisticTrainNetwork__/graphics/icons/network-id.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "a-c" + }, + { + type = "virtual-signal", + name = "ltn-min-train-length", + icon = "__LogisticTrainNetwork__/graphics/icons/min-train-length.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "b-a" + }, + { + type = "virtual-signal", + name = "ltn-max-train-length", + icon = "__LogisticTrainNetwork__/graphics/icons/max-train-length.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "b-b" + }, + { + type = "virtual-signal", + name = "ltn-max-trains", + icon = "__LogisticTrainNetwork__/graphics/icons/max-trains.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "b-c" + }, + { + type = "virtual-signal", + name = "ltn-provider-threshold", + icon = "__LogisticTrainNetwork__/graphics/icons/provider-threshold.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "c-a" + }, + { + type = "virtual-signal", + name = "ltn-provider-stack-threshold", + icon = "__LogisticTrainNetwork__/graphics/icons/provider-stack-threshold.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "c-b" + }, + { + type = "virtual-signal", + name = "ltn-provider-priority", + icon = "__LogisticTrainNetwork__/graphics/icons/provider-priority.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "c-c" + }, + { + type = "virtual-signal", + name = "ltn-locked-slots", + icon = "__LogisticTrainNetwork__/graphics/icons/locked-slot.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "c-d" + }, + { + type = "virtual-signal", + name = "ltn-requester-threshold", + icon = "__LogisticTrainNetwork__/graphics/icons/requester-threshold.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "d-a" + }, + { + type = "virtual-signal", + name = "ltn-requester-stack-threshold", + icon = "__LogisticTrainNetwork__/graphics/icons/requester-stack-threshold.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "d-b" + }, + { + type = "virtual-signal", + name = "ltn-requester-priority", + icon = "__LogisticTrainNetwork__/graphics/icons/requester-priority.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "d-c" + }, + { + type = "virtual-signal", + name = "ltn-disable-warnings", + icon = "__LogisticTrainNetwork__/graphics/icons/disable-warnings.png", + icon_size = 64, + subgroup = "LTN-signal", + order = "d-d" + }, + + { + type = "item-subgroup", + name = "ltn-position-signal", + group = "signals", + order = "ltn1[ltn-position-signal]" + }, + { + type = "item-subgroup", + name = "ltn-position-signal-cargo-wagon", + group = "signals", + order = "ltn2[ltn-position-signal-cargo-wagon]" + }, + { + type = "item-subgroup", + name = "ltn-position-signal-fluid-wagon", + group = "signals", + order = "ltn3[ltn-position-signal-fluid-wagon]" + }, + { + type = "item-subgroup", + name = "ltn-position-signal-artillery-wagon", + group = "signals", + order = "ltn4[ltn-position-signal-artillery-wagon]" + }, + { + type = "virtual-signal", + name = "ltn-position-any-locomotive", + -- localised_name = {"virtual-signal-name.ltn-position-any", {"entity-name.locomotive"}}, + icons = { + { icon = "__base__/graphics/icons/signal/signal_red.png", icon_size = 64, icon_mipmaps = 4 }, + { icon = "__base__/graphics/icons/locomotive.png", icon_size = 64, icon_mipmaps = 4, scale = 0.375 }, + }, + subgroup = "ltn-position-signal", + order = "a0" + }, + { + type = "virtual-signal", + name = "ltn-position-any-cargo-wagon", + -- localised_name = {"virtual-signal-name.ltn-position-any", {"entity-name.cargo-wagon"}}, + icons = { + { icon = "__base__/graphics/icons/signal/signal_red.png", icon_size = 64, icon_mipmaps = 4 }, + { icon = "__base__/graphics/icons/cargo-wagon.png", icon_size = 64, icon_mipmaps = 4, scale = 0.375 }, + }, + subgroup = "ltn-position-signal", + order = "b0" + }, + { + type = "virtual-signal", + name = "ltn-position-any-fluid-wagon", + -- localised_name = {"virtual-signal-name.ltn-position-any", {"entity-name.fluid-wagon"}}, + icons = { + { icon = "__base__/graphics/icons/signal/signal_red.png", icon_size = 64, icon_mipmaps = 4 }, + { icon = "__base__/graphics/icons/fluid-wagon.png", icon_size = 64, icon_mipmaps = 4, scale = 0.375 }, + }, + subgroup = "ltn-position-signal", + order = "c0" + }, + { + type = "virtual-signal", + name = "ltn-position-any-artillery-wagon", + -- localised_name = {"virtual-signal-name.ltn-position-any", {"entity-name.artillery-wagon"}}, + icons = { + { icon = "__base__/graphics/icons/signal/signal_red.png", icon_size = 64, icon_mipmaps = 4 }, + { icon = "__base__/graphics/icons/artillery-wagon.png", icon_size = 64, icon_mipmaps = 4, scale = 0.375 }, + }, + subgroup = "ltn-position-signal", + order = "d0" + }, + + { + type = "fluid", -- virtual doesn't support hidden flag + name = "ltn-cargo-warning", + icon = "__LogisticTrainNetwork__/graphics/icons/cargo-warning.png", + icon_size = 64, + icon_mipmaps = 0, + default_temperature = 15, + max_temperature = 100, + heat_capacity = "0.2KJ", + base_color = {r=0, g=0.34, b=0.6}, + flow_color = {r=0.7, g=0.7, b=0.7}, + hidden = true, + auto_barrel = false, + subgroup = "LTN-signal", + order = "v0" + }, + { + type = "fluid", -- virtual doesn't support hidden flag + name = "ltn-cargo-alert", + icon = "__LogisticTrainNetwork__/graphics/icons/cargo-alert.png", + icon_size = 64, + icon_mipmaps = 0, + default_temperature = 15, + max_temperature = 100, + heat_capacity = "0.2KJ", + base_color = {r=0, g=0.34, b=0.6}, + flow_color = {r=0.7, g=0.7, b=0.7}, + hidden = true, + auto_barrel = false, + subgroup = "LTN-signal", + order = "v1" + }, + { + type = "fluid", -- virtual doesn't support hidden flag + name = "ltn-depot-warning", + icon = "__LogisticTrainNetwork__/graphics/icons/depot-warning.png", + icon_size = 64, + icon_mipmaps = 0, + default_temperature = 15, + max_temperature = 100, + heat_capacity = "0.2KJ", + base_color = {r=0, g=0.34, b=0.6}, + flow_color = {r=0.7, g=0.7, b=0.7}, + hidden = true, + auto_barrel = false, + subgroup = "LTN-signal", + order = "v2" + }, + { + type = "fluid", -- virtual doesn't support hidden flag + name = "ltn-depot-empty", + icon = "__LogisticTrainNetwork__/graphics/icons/depot-empty.png", + icon_size = 64, + icon_mipmaps = 0, + default_temperature = 15, + max_temperature = 100, + heat_capacity = "0.2KJ", + base_color = {r=0, g=0.34, b=0.6}, + flow_color = {r=0.7, g=0.7, b=0.7}, + hidden = true, + auto_barrel = false, + subgroup = "LTN-signal", + order = "v3" + }, +}) diff --git a/LogisticTrainNetwork/prototypes/technology.lua b/LogisticTrainNetwork/prototypes/technology.lua new file mode 100644 index 00000000..7bf52a50 --- /dev/null +++ b/LogisticTrainNetwork/prototypes/technology.lua @@ -0,0 +1,42 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +data:extend({ + { + type = "technology", + name = "logistic-train-network", + icon = "__LogisticTrainNetwork__/graphics/technology/ltn_technology.png", + icon_size = 256, + icon_mipmaps = 4, + prerequisites = {"automated-rail-transportation", "circuit-network"}, + effects = + { + { + type = "unlock-recipe", + recipe = "logistic-train-stop" + } + }, + unit = + { + count = 300, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1} + }, + time = 30 + }, + order = "c-g-c" + } +}) + +-- support for cargo ship ports +if mods["cargo-ships"] then + table.insert( data.raw["technology"]["logistic-train-network"].effects, + { + type = "unlock-recipe", + recipe = "ltn-port" + } ) +end diff --git a/LogisticTrainNetwork/script/alert.lua b/LogisticTrainNetwork/script/alert.lua new file mode 100644 index 00000000..1adb11a9 --- /dev/null +++ b/LogisticTrainNetwork/script/alert.lua @@ -0,0 +1,25 @@ +--[[ Copyright (c) 2020 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +local icons = { + ["cargo-warning"] = {type="fluid", name="ltn-cargo-warning"}, + ["cargo-alert"] = {type="fluid", name="ltn-cargo-alert"}, + ["depot-warning"] = {type="fluid", name="ltn-depot-warning"}, + ["depot-empty"] = {type="fluid", name="ltn-depot-empty"}, +} + +function create_alert(entity, icon, msg, force) + force = force or (entity and entity.force) + if not force or not force.valid then + return + end + for _, player in pairs(force.players) do + if settings.get_player_settings(player)["ltn-interface-factorio-alerts"].value then + player.add_custom_alert(entity, icons[icon], msg, true) + end + end +end + diff --git a/LogisticTrainNetwork/script/constants.lua b/LogisticTrainNetwork/script/constants.lua new file mode 100644 index 00000000..27eb1c57 --- /dev/null +++ b/LogisticTrainNetwork/script/constants.lua @@ -0,0 +1,76 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +MOD_NAME = "LogisticTrainNetwork" + +ISDEPOT = "ltn-depot" +DEPOT_PRIORITY = "ltn-depot-priority" +NETWORKID = "ltn-network-id" +MINTRAINLENGTH = "ltn-min-train-length" +MAXTRAINLENGTH = "ltn-max-train-length" +MAXTRAINS = "ltn-max-trains" +REQUESTED_THRESHOLD = "ltn-requester-threshold" +REQUESTED_STACK_THRESHOLD = "ltn-requester-stack-threshold" +REQUESTED_PRIORITY = "ltn-requester-priority" +NOWARN = "ltn-disable-warnings" +PROVIDED_THRESHOLD = "ltn-provider-threshold" +PROVIDED_STACK_THRESHOLD = "ltn-provider-stack-threshold" +PROVIDED_PRIORITY = "ltn-provider-priority" +LOCKEDSLOTS = "ltn-locked-slots" + +ControlSignals = { + [ISDEPOT] = {type="virtual", name=ISDEPOT}, + [DEPOT_PRIORITY] = {type="virtual", name=DEPOT_PRIORITY}, + [NETWORKID] = {type="virtual", name=NETWORKID}, + [MINTRAINLENGTH] = {type="virtual", name=MINTRAINLENGTH}, + [MAXTRAINLENGTH] = {type="virtual", name=MAXTRAINLENGTH}, + [MAXTRAINS] = {type="virtual", name=MAXTRAINS}, + [REQUESTED_THRESHOLD] = {type="virtual", name=REQUESTED_THRESHOLD}, + [REQUESTED_STACK_THRESHOLD] = {type="virtual", name=REQUESTED_STACK_THRESHOLD}, + [REQUESTED_PRIORITY] = {type="virtual", name=REQUESTED_PRIORITY}, + [NOWARN] = {type="virtual", name=NOWARN}, + [PROVIDED_THRESHOLD] = {type="virtual", name=PROVIDED_THRESHOLD}, + [PROVIDED_STACK_THRESHOLD] = {type="virtual", name=PROVIDED_STACK_THRESHOLD}, + [PROVIDED_PRIORITY] = {type="virtual", name=PROVIDED_PRIORITY}, + [LOCKEDSLOTS] = {type="virtual", name=LOCKEDSLOTS}, +} + +ltn_stop_entity_names = { -- ltn stop entity.name with I/O entity offset away from tracks in tiles + ["logistic-train-stop"] = 0, + ["ltn-port"] = 1, +} + +ltn_stop_input = "logistic-train-stop-input" +ltn_stop_output = "logistic-train-stop-output" +ltn_stop_output_controller = "logistic-train-stop-lamp-control" + +ErrorCodes = { + [-1] = "white", -- not initialized + [1] = "red", -- short circuit / disabled + [2] = "pink", -- duplicate stop name +} + +ColorLookup = { + red = "signal-red", + green = "signal-green", + blue = "signal-blue", + yellow = "signal-yellow", + pink = "signal-pink", + cyan = "signal-cyan", + white = "signal-white", + grey = "signal-grey", + black = "signal-black" +} + +-- cache often used strings and functions +format = string.format +match = string.match +match_string = "([^,]+),([^,]+)" +btest = bit32.btest +band = bit32.band +min = math.min +ceil = math.ceil +sort = table.sort \ No newline at end of file diff --git a/LogisticTrainNetwork/script/dispatcher.lua b/LogisticTrainNetwork/script/dispatcher.lua new file mode 100644 index 00000000..46ac2469 --- /dev/null +++ b/LogisticTrainNetwork/script/dispatcher.lua @@ -0,0 +1,766 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + + +-- update global.Dispatcher.Deliveries.force when forces are removed/merged +script.on_event(defines.events.on_forces_merging, function(event) + for _, delivery in pairs(global.Dispatcher.Deliveries) do + if delivery.force == event.source then + delivery.force = event.destination + end + end +end) + + +---------------------------------- MAIN LOOP ---------------------------------- + +function OnTick(event) + local tick = event.tick + -- log("DEBUG: (OnTick) "..tick.." global.tick_state: "..tostring(global.tick_state).." global.tick_stop_index: "..tostring(global.tick_stop_index).." global.tick_request_index: "..tostring(global.tick_request_index) ) + + if global.tick_state == 1 then -- update stops + for i = 1, dispatcher_updates_per_tick, 1 do + -- reset on invalid index + if global.tick_stop_index and not global.LogisticTrainStops[global.tick_stop_index] then + global.tick_state = 0 + if message_level >= 2 then printmsg({"ltn-message.error-invalid-stop-index", global.tick_stop_index}, nil, false) end + log("(OnTick) Invalid global.tick_stop_index "..tostring(global.tick_stop_index).." in global.LogisticTrainStops. Removing stop and starting over.") + RemoveStop(global.tick_stop_index) + return + end + + local stopID, stop = next(global.LogisticTrainStops, global.tick_stop_index) + if stopID then + global.tick_stop_index = stopID + if debug_log then log("(OnTick) "..tick.." updating stopID "..tostring(stopID)) end + UpdateStop(stopID, stop) + else -- stop updates complete, moving on + global.tick_stop_index = nil + global.tick_state = 2 + return + end + end + + elseif global.tick_state == 2 then -- clean up and sort lists + global.tick_state = 3 + + -- remove messages older than message_filter_age from messageBuffer + for bufferedMsg, v in pairs(global.messageBuffer) do + if (tick - v.tick) > message_filter_age then + global.messageBuffer[bufferedMsg] = nil + end + end + + --clean up deliveries in case train was destroyed or removed + local activeDeliveryTrains = "" + for trainID, delivery in pairs (global.Dispatcher.Deliveries) do + if not(delivery.train and delivery.train.valid) then + local from_entity = global.LogisticTrainStops[delivery.from_id] and global.LogisticTrainStops[delivery.from_id].entity + local to_entity = global.LogisticTrainStops[delivery.to_id] and global.LogisticTrainStops[delivery.to_id].entity + if message_level >= 1 then + printmsg({ + "ltn-message.delivery-removed-train-invalid", + Make_Stop_RichText(from_entity) or delivery.from, + Make_Stop_RichText(to_entity) or delivery.to + }, delivery.force, false) + end + if debug_log then log("(OnTick) Delivery from "..delivery.from.." to "..delivery.to.." removed. Train no longer valid.") end + + script.raise_event(on_delivery_failed_event, {train_id = trainID, shipment = delivery.shipment}) + RemoveDelivery(trainID) + elseif tick-delivery.started > delivery_timeout then + local from_entity = global.LogisticTrainStops[delivery.from_id] and global.LogisticTrainStops[delivery.from_id].entity + local to_entity = global.LogisticTrainStops[delivery.to_id] and global.LogisticTrainStops[delivery.to_id].entity + if message_level >= 1 then + printmsg({ + "ltn-message.delivery-removed-timeout", + Make_Stop_RichText(from_entity) or delivery.from, + Make_Stop_RichText(to_entity) or delivery.to, + tick-delivery.started + }, delivery.force, false) + end + if debug_log then log("(OnTick) Delivery from "..delivery.from.." to "..delivery.to.." removed. Timed out after "..tick-delivery.started.."/"..delivery_timeout.." ticks.") end + + script.raise_event(on_delivery_failed_event, {train_id = trainID, shipment = delivery.shipment}) + RemoveDelivery(trainID) + else + activeDeliveryTrains = activeDeliveryTrains.." "..trainID + end + end + if debug_log then log("(OnTick) Trains on deliveries"..activeDeliveryTrains) end + + + -- remove no longer active requests from global.Dispatcher.RequestAge[stopID] + local newRequestAge = {} + for _,request in pairs (global.Dispatcher.Requests) do + local ageIndex = request.item..","..request.stopID + local age = global.Dispatcher.RequestAge[ageIndex] + if age then + newRequestAge[ageIndex] = age + end + end + global.Dispatcher.RequestAge = newRequestAge + + -- sort requests by priority and age + sort(global.Dispatcher.Requests, function(a, b) + if a.priority ~= b.priority then + return a.priority > b.priority + else + return a.age < b.age + end + end) + + elseif global.tick_state == 3 then -- parse requests and dispatch trains + if dispatcher_enabled then + if debug_log then log("(OnTick) Available train capacity: "..global.Dispatcher.availableTrains_total_capacity.." item stacks, "..global.Dispatcher.availableTrains_total_fluid_capacity.. " fluid capacity.") end + for i = 1, dispatcher_updates_per_tick, 1 do + -- reset on invalid index + if global.tick_request_index and not global.Dispatcher.Requests[global.tick_request_index] then + global.tick_state = 0 + if message_level >= 1 then printmsg({"ltn-message.error-invalid-request-index", global.tick_request_index}, nil, false) end + log("(OnTick) Invalid global.tick_request_index "..tostring(global.tick_request_index).." in global.Dispatcher.Requests. Starting over.") + return + end + + local request_index, request = next(global.Dispatcher.Requests, global.tick_request_index) + if request_index and request then + global.tick_request_index = request_index + if debug_log then log("(OnTick) "..tick.." parsing request "..tostring(request_index).."/"..tostring(#global.Dispatcher.Requests) ) end + ProcessRequest(request_index, request) + else -- request updates complete, moving on + global.tick_request_index = nil + global.tick_state = 4 + return + end + end + else + if message_level >= 1 then printmsg({"ltn-message.warning-dispatcher-disabled"}, nil, true) end + if debug_log then log("(OnTick) Dispatcher disabled.") end + global.tick_request_index = nil + global.tick_state = 4 + return + end + + elseif global.tick_state == 4 then -- raise API events + global.tick_state = 0 + -- raise events for mod API + script.raise_event(on_stops_updated_event, + { + logistic_train_stops = global.LogisticTrainStops, + }) + script.raise_event(on_dispatcher_updated_event, + { + update_interval = tick - global.tick_interval_start, + provided_by_stop = global.Dispatcher.Provided_by_Stop, + requests_by_stop = global.Dispatcher.Requests_by_Stop, + new_deliveries = global.Dispatcher.new_Deliveries, + deliveries = global.Dispatcher.Deliveries, + available_trains = global.Dispatcher.availableTrains, + }) + + else -- reset + global.tick_stop_index = nil + global.tick_request_index = nil + + global.tick_state = 1 + global.tick_interval_start = tick + -- clear Dispatcher.Storage + global.Dispatcher.Provided = {} + global.Dispatcher.Requests = {} + global.Dispatcher.Provided_by_Stop = {} + global.Dispatcher.Requests_by_Stop = {} + global.Dispatcher.new_Deliveries = {} + end +end + + +---------------------------------- DISPATCHER FUNCTIONS ---------------------------------- + +-- ensures removal of trainID from global.Dispatcher.Deliveries and stop.active_deliveries +function RemoveDelivery(trainID) + for stopID, stop in pairs(global.LogisticTrainStops) do + if not stop.entity.valid or not stop.input.valid or not stop.output.valid or not stop.lamp_control.valid then + RemoveStop(stopID) + else + for i=#stop.active_deliveries, 1, -1 do --trainID should be unique => checking matching stop name not required + if stop.active_deliveries[i] == trainID then + table.remove(stop.active_deliveries, i) + if #stop.active_deliveries > 0 then + setLamp(stop, "yellow", #stop.active_deliveries) + else + setLamp(stop, "green", 1) + end + end + end + end + end + global.Dispatcher.Deliveries[trainID] = nil +end + + +-- NewScheduleRecord: returns new schedule_record +local condition_circuit_red = {type = "circuit", compare_type = "and", condition = {comparator = "=", first_signal = {type = "virtual", name = "signal-red"}, constant = 0} } +local condition_circuit_green = {type = "circuit", compare_type = "or", condition = {comparator = "β‰₯", first_signal = {type = "virtual", name = "signal-green"}, constant = 1} } +local condition_wait_empty = {type = "empty", compare_type = "and" } +local condition_finish_loading = {type = "inactivity", compare_type = "and", ticks = 120 } +-- local condition_stop_timeout -- set in settings.lua to capture changes + +function NewScheduleRecord(stationName, condType, condComp, itemlist, countOverride) + local record = {station = stationName, wait_conditions = {} } + + if condType == "time" then + record.wait_conditions[#record.wait_conditions+1] = {type = condType, compare_type = "and", ticks = condComp } + + elseif condType == "item_count" then + local waitEmpty = false + -- write itemlist to conditions + for i=1, #itemlist do + local condFluid = nil + if itemlist[i].type == "fluid" then + condFluid = "fluid_count" + -- workaround for leaving with fluid residue due to Factorio rounding down to 0 + if condComp == "=" and countOverride == 0 then + waitEmpty = true + end + end + + -- make > into >= + if condComp == ">" then + countOverride = itemlist[i].count - 1 + end + + -- itemlist = {first_signal.type, first_signal.name, constant} + local cond = {comparator = condComp, first_signal = {type = itemlist[i].type, name = itemlist[i].name}, constant = countOverride or itemlist[i].count} + record.wait_conditions[#record.wait_conditions+1] = {type = condFluid or condType, compare_type = "and", condition = cond } + end + + if waitEmpty then + record.wait_conditions[#record.wait_conditions+1] = condition_wait_empty + elseif finish_loading then -- let inserter/pumps finish + record.wait_conditions[#record.wait_conditions+1] = condition_finish_loading + end + + -- with circuit control enabled keep trains waiting until red = 0 and force them out with green β‰₯ 1 + if schedule_cc then + record.wait_conditions[#record.wait_conditions+1] = condition_circuit_red + record.wait_conditions[#record.wait_conditions+1] = condition_circuit_green + end + + if stop_timeout > 0 then -- send stuck trains away when stop_timeout is set + record.wait_conditions[#record.wait_conditions+1] = condition_stop_timeout + -- should it also wait for red = 0? + if schedule_cc then + record.wait_conditions[#record.wait_conditions+1] = condition_circuit_red + end + end + + elseif condType == "inactivity" then + record.wait_conditions[#record.wait_conditions+1] = {type = condType, compare_type = "and", ticks = condComp } + -- with circuit control enabled keep trains waiting until red = 0 and force them out with green β‰₯ 1 + if schedule_cc then + record.wait_conditions[#record.wait_conditions+1] = condition_circuit_red + record.wait_conditions[#record.wait_conditions+1] = condition_circuit_green + end + end + return record +end + +local temp_wait_condition = {{type = "time", compare_type = "and", ticks = 0}} + +-- NewScheduleRecord: returns new schedule_record for waypoints +function NewTempScheduleRecord(rail, rail_direction) + local record = {wait_conditions = temp_wait_condition, rail = rail, rail_direction = rail_direction, temporary = true} + return record +end + +---- ProcessRequest ---- + +-- returns the string "number1|number2" in consistent order: the smaller number is always placed first +local function sorted_pair(number1, number2) + return (number1 < number2) and (number1..'|'..number2) or (number2..'|'..number1) +end + +-- return a list of matching { entity1, entity2, network_id } each connecting the two surfaces. The list will be empty if surface1 == surface2 and it will be nil if there are no matching connections. The second return value will be the number of entries in the list. +local function find_surface_connections(surface1, surface2, force, network_id) + if surface1 == surface2 then return {}, 0 end + + local surface_pair_key = sorted_pair(surface1.index, surface2.index) + local surface_connections = global.ConnectedSurfaces[surface_pair_key] + if not surface_connections then return nil end + + local matching_connections = {} + local count=0 + for entity_pair_key, connection in pairs(surface_connections) do + if connection.entity1.valid and connection.entity2.valid then + if btest(network_id, connection.network_id) + and connection.entity1.force == force and connection.entity2.force == force then + count = count + 1 + matching_connections[count] = connection + end + else + if debug_log then log("removing invalid surface connection "..entity_pair_key.." between surfaces "..surface_pair_key) end + surface_connections[entity_pair_key] = nil + end + end + + if count > 0 then + return matching_connections, count + else + return nil, nil + end +end + +-- return a list ordered priority > #active_deliveries > item-count of {entity, network_id, priority, activeDeliveryCount, item, count, providing_threshold, providing_threshold_stacks, min_carriages, max_carriages, locked_slots, surface_connections} +local function getProviders(requestStation, item, req_count, min_length, max_length) + local stations = {} + local providers = global.Dispatcher.Provided[item] + if not providers then + return nil + end + local toID = requestStation.entity.unit_number + local force = requestStation.entity.force + local surface = requestStation.entity.surface + + for stopID, count in pairs (providers) do + local stop = global.LogisticTrainStops[stopID] + if stop and stop.entity.valid then + local matched_networks = band(requestStation.network_id, stop.network_id) + -- log("DEBUG: comparing 0x"..format("%x", band(requestStation.network_id)).." & 0x"..format("%x", band(stop.network_id)).." = 0x"..format("%x", band(matched_networks)) ) + + if stop.entity.force == force + and matched_networks ~= 0 + -- and count >= stop.providing_threshold + and (stop.min_carriages == 0 or max_length == 0 or stop.min_carriages <= max_length) + and (stop.max_carriages == 0 or min_length == 0 or stop.max_carriages >= min_length) then + --check if provider can accept more trains + local activeDeliveryCount = #stop.active_deliveries + if activeDeliveryCount and (stop.max_trains == 0 or activeDeliveryCount < stop.max_trains) then + -- check if surface transition is possible + local surface_connections, surface_connections_count = find_surface_connections(surface, stop.entity.surface, force, matched_networks) + if surface_connections then -- for same surfaces surface_connections = {} + local from_network_id_string = format("0x%x", band(stop.network_id)) + if debug_log then log("found "..count.."("..tostring(stop.providing_threshold)..")".."/"..req_count.." ".. item.." at "..stop.entity.backer_name.." {"..from_network_id_string.."}, priority: "..stop.provider_priority..", active Deliveries: "..activeDeliveryCount..", min_carriages: "..stop.min_carriages..", max_carriages: "..stop.max_carriages..", locked Slots: "..stop.locked_slots..", #surface_connections: "..(surface_connections_count)) end + stations[#stations +1] = { + entity = stop.entity, + network_id = matched_networks, + priority = stop.provider_priority, + activeDeliveryCount = activeDeliveryCount, + item = item, + count = count, + providing_threshold = stop.providing_threshold, + providing_threshold_stacks = stop.providing_threshold_stacks, + min_carriages = stop.min_carriages, + max_carriages = stop.max_carriages, + locked_slots = stop.locked_slots, + surface_connections = surface_connections, + surface_connections_count = surface_connections_count, + } + end + end + end + end + end + -- sort best matching station to the top + sort(stations, function(a, b) + if a.priority ~= b.priority then --sort by priority, will result in train queues if trainlimit is not set + return a.priority > b.priority + elseif a.surface_connections_count ~= b.surface_connections_count then --sort providers without surface transition to top + return min(a.surface_connections_count, 1) < min(b.surface_connections_count, 1) + elseif a.activeDeliveryCount ~= b.activeDeliveryCount then --sort by #deliveries + return a.activeDeliveryCount < b.activeDeliveryCount + else + return a.count > b.count --finally sort by item count + end + end) + + if debug_log then log ("(getProviders) sorted providers: "..serpent.block(stations)) end + return stations +end + +local function getStationDistance(stationA, stationB) + local stationPair = stationA.unit_number..","..stationB.unit_number + if global.StopDistances[stationPair] then + --log(stationPair.." found, distance: "..global.StopDistances[stationPair]) + return global.StopDistances[stationPair] + else + local dist = Get_Distance(stationA.position, stationB.position) + global.StopDistances[stationPair] = dist + --log(stationPair.." calculated, distance: "..dist) + return dist + end +end + +-- returns: available trains in depots or nil +-- filtered by NetworkID, carriages and surface +-- sorted by priority, capacity - locked slots and distance to provider +local function getFreeTrains(nextStop, min_carriages, max_carriages, type, size) + local filtered_trains = {} + for trainID, trainData in pairs (global.Dispatcher.availableTrains) do + if trainData.train.valid and trainData.train.station and trainData.train.station.valid then + local depot_network_id_string -- filled only when debug_log is enabled + local dest_network_id_string -- filled only when debug_log is enabled + local inventorySize + if type == "item" then + -- subtract locked slots from every cargo wagon + inventorySize = trainData.capacity - (nextStop.locked_slots * #trainData.train.cargo_wagons) + else + inventorySize = trainData.fluid_capacity + end + + if debug_log then + depot_network_id_string = format("0x%x", band(trainData.network_id) ) + dest_network_id_string = format("0x%x", band(nextStop.network_id) ) + log("(getFreeTrain) checking train "..tostring(Get_Train_Name(trainData.train)).. + ", force "..tostring(trainData.force.name).."/"..tostring(nextStop.entity.force.name).. + ", network "..depot_network_id_string.."/"..dest_network_id_string.. + ", priority: "..trainData.depot_priority.. + ", length: "..min_carriages.."<="..#trainData.train.carriages.."<="..max_carriages.. + ", inventory size: "..inventorySize.."/"..size.. + ", distance: "..getStationDistance(trainData.train.station, nextStop.entity) ) + end + + if inventorySize > 0 -- sending trains without inventory on deliveries would be pointless + and trainData.force == nextStop.entity.force -- forces match + and trainData.surface == nextStop.entity.surface -- pathing between surfaces is impossible + and btest(trainData.network_id, nextStop.network_id) -- depot is in the same network as requester and provider + and (min_carriages == 0 or #trainData.train.carriages >= min_carriages) and (max_carriages == 0 or #trainData.train.carriages <= max_carriages) -- train length fits requester and provider limitations + then + local distance = getStationDistance(trainData.train.station, nextStop.entity) + filtered_trains[#filtered_trains+1] = { + train = trainData.train, + inventory_size = inventorySize, + depot_priority = trainData.depot_priority, + provider_distance = distance, + } + end + else + -- remove invalid train from global.Dispatcher.availableTrains + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity - global.Dispatcher.availableTrains[trainID].capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity - global.Dispatcher.availableTrains[trainID].fluid_capacity + global.Dispatcher.availableTrains[trainID] = nil + end + end + + -- return nil instead of empty table + if next(filtered_trains) == nil then return nil end + + -- sort best matching train to top + sort(filtered_trains, function(a, b) + if a.depot_priority ~= b.depot_priority then + --sort by priority + return a.depot_priority > b.depot_priority + elseif a.inventory_size ~= b.inventory_size and a.inventory_size >= size then + --sort inventories capable of whole deliveries + -- return not(b.inventory_size => size and a.inventory_size > b.inventory_size) + return b.inventory_size < size or a.inventory_size < b.inventory_size + elseif a.inventory_size ~= b.inventory_size and a.inventory_size < size then + --sort inventories for partial deliveries + -- return not(b.inventory_size >= size or b.inventory_size > a.inventory_size) + return b.inventory_size < size and b.inventory_size < a.inventory_size + else + -- sort by distance to provider + return a.provider_distance < b.provider_distance + end + end) + if debug_log then log ("(getFreeTrain) sorted trains: "..serpent.block(filtered_trains)) end + + return filtered_trains +end + +-- parse single request from global.Dispatcher.Request={stopID, item, age, count} +-- returns created delivery ID or nil +function ProcessRequest(reqIndex, request) + -- ensure validity of request stop + local toID = request.stopID + local requestStation = global.LogisticTrainStops[toID] + + if not requestStation or not (requestStation.entity and requestStation.entity.valid) then + return nil + end + + local surface_name = requestStation.entity.surface.name + local to = requestStation.entity.backer_name + local to_rail = requestStation.entity.connected_rail + local to_rail_direction = requestStation.entity.connected_rail_direction + local to_gps = Make_Stop_RichText(requestStation.entity) or to + local to_network_id_string = format("0x%x", band(requestStation.network_id)) + local item = request.item + local count = request.count + + local max_carriages = requestStation.max_carriages + local min_carriages = requestStation.min_carriages + local requestForce = requestStation.entity.force + + if debug_log then log("request "..reqIndex.."/"..#global.Dispatcher.Requests..": "..count.."("..requestStation.requesting_threshold..")".." "..item.." to "..requestStation.entity.backer_name.." {"..to_network_id_string.."} priority: "..request.priority.." min length: "..min_carriages.." max length: "..max_carriages ) end + + if not( global.Dispatcher.Requests_by_Stop[toID] and global.Dispatcher.Requests_by_Stop[toID][item] ) then + if debug_log then log("Skipping request "..requestStation.entity.backer_name..": "..item..". Item has already been processed.") end + -- goto skipRequestItem -- item has been processed already + return nil + end + + if requestStation.max_trains > 0 and #requestStation.active_deliveries >= requestStation.max_trains then + if debug_log then log(requestStation.entity.backer_name.." Request station train limit reached: "..#requestStation.active_deliveries.."("..requestStation.max_trains..")" ) end + -- goto skipRequestItem -- reached train limit + return nil + end + + -- find providers for requested item + local itype, iname = match(item, match_string) + if not (itype and iname and (game.item_prototypes[iname] or game.fluid_prototypes[iname])) then + if message_level >= 1 then printmsg({"ltn-message.error-parse-item", item}, requestForce) end + if debug_log then log("(ProcessRequests) could not parse "..item) end + -- goto skipRequestItem + return nil + end + + local localname + if itype == "fluid" then + localname = game.fluid_prototypes[iname].localised_name + -- skip if no trains are available + if (global.Dispatcher.availableTrains_total_fluid_capacity or 0) == 0 then + create_alert(requestStation.entity, "depot-empty", {"ltn-message.empty-depot-fluid"}, requestForce) + if message_level >= 1 then printmsg({"ltn-message.empty-depot-fluid"}, requestForce, true) end + if debug_log then log("Skipping request "..to.." {"..to_network_id_string.."}: "..item..". No trains available.") end + script.raise_event(on_dispatcher_no_train_found_event, {to = to, to_id = toID, network_id = requestStation.network_id, item = item}) + return nil + end + else + localname = game.item_prototypes[iname].localised_name + -- skip if no trains are available + if (global.Dispatcher.availableTrains_total_capacity or 0) == 0 then + create_alert(requestStation.entity, "depot-empty", {"ltn-message.empty-depot-item"}, requestForce) + if message_level >= 1 then printmsg({"ltn-message.empty-depot-item"}, requestForce, true) end + if debug_log then log("Skipping request "..to.." {"..to_network_id_string.."}: "..item..". No trains available.") end + script.raise_event(on_dispatcher_no_train_found_event, {to = to, to_id = toID, network_id = requestStation.network_id, item = item}) + return nil + end + end + + -- get providers ordered by priority + local providers = getProviders(requestStation, item, count, min_carriages, max_carriages) + if not providers or #providers < 1 then + if requestStation.no_warnings == false and message_level >= 1 then printmsg({"ltn-message.no-provider-found", to_gps, "[" .. itype .. "=" .. iname .. "]", to_network_id_string}, requestForce, true) end + if debug_log then log(format("No supply of %s found for Requester %s: surface: %s min length: %s, max length: %s, network-ID: %s", item, to, surface_name, min_carriages, max_carriages, to_network_id_string) ) end + -- goto skipRequestItem + return nil + end + + local providerData = providers[1] -- only one delivery/request is created so use only the best provider + local fromID = providerData.entity.unit_number + local from_rail = providerData.entity.connected_rail + local from_rail_direction = providerData.entity.connected_rail_direction + local from = providerData.entity.backer_name + local from_gps = Make_Stop_RichText(providerData.entity) or from + local matched_network_id_string = format("0x%x", band(providerData.network_id)) + + if message_level >= 3 then printmsg({"ltn-message.provider-found", from_gps, tostring(providerData.priority), tostring(providerData.activeDeliveryCount), providerData.count, "[" .. itype .. "=" .. iname .. "]"}, requestForce, true) end + + -- limit deliverySize to count at provider + local deliverySize = count + if count > providerData.count then + deliverySize = providerData.count + end + + local stacks = deliverySize -- for fluids stack = tanker capacity + if itype ~= "fluid" then + stacks = ceil(deliverySize / game.item_prototypes[iname].stack_size) -- calculate amount of stacks item count will occupy + end + + -- max_carriages = shortest set max-train-length + if providerData.max_carriages > 0 and (providerData.max_carriages < requestStation.max_carriages or requestStation.max_carriages == 0) then + max_carriages = providerData.max_carriages + end + -- min_carriages = longest set min-train-length + if providerData.min_carriages > 0 and (providerData.min_carriages > requestStation.min_carriages or requestStation.min_carriages == 0) then + min_carriages = providerData.min_carriages + end + + global.Dispatcher.Requests_by_Stop[toID][item] = nil -- remove before merge so it's not added twice + local loadingList = { {type=itype, name=iname, localname=localname, count=deliverySize, stacks=stacks} } + local totalStacks = stacks + if debug_log then log("created new order "..from.." >> "..to..": "..deliverySize.." "..item.." in "..stacks.."/"..totalStacks.." stacks, min length: "..min_carriages.." max length: "..max_carriages) end + + -- find possible mergeable items, fluids can't be merged in a sane way + if itype ~= "fluid" then + for merge_item, merge_count_req in pairs(global.Dispatcher.Requests_by_Stop[toID]) do + local merge_type, merge_name = match(merge_item, match_string) + if merge_type and merge_name and game.item_prototypes[merge_name] then + local merge_localname = game.item_prototypes[merge_name].localised_name + -- get current provider for requested item + if global.Dispatcher.Provided[merge_item] and global.Dispatcher.Provided[merge_item][fromID] then + -- set delivery Size and stacks + local merge_count_prov = global.Dispatcher.Provided[merge_item][fromID] + local merge_deliverySize = merge_count_req + if merge_count_req > merge_count_prov then + merge_deliverySize = merge_count_prov + end + local merge_stacks = ceil(merge_deliverySize / game.item_prototypes[merge_name].stack_size) -- calculate amount of stacks item count will occupy + + -- add to loading list + loadingList[#loadingList+1] = {type=merge_type, name=merge_name, localname=merge_localname, count=merge_deliverySize, stacks=merge_stacks} + totalStacks = totalStacks + merge_stacks + -- order.totalStacks = order.totalStacks + merge_stacks + -- order.loadingList[#order.loadingList+1] = loadingList + if debug_log then log("inserted into order "..from.." >> "..to..": "..merge_deliverySize.." "..merge_item.." in "..merge_stacks.."/"..totalStacks.." stacks.") end + end + end + end + end + + -- find train + local free_trains = getFreeTrains(providerData, min_carriages, max_carriages, itype, totalStacks) + if not free_trains then + create_alert(requestStation.entity, "depot-empty", {"ltn-message.no-train-found", from, to, matched_network_id_string, tostring(min_carriages), tostring(max_carriages) }, requestForce) + if message_level >= 1 then printmsg({"ltn-message.no-train-found", from_gps, to_gps, matched_network_id_string, tostring(min_carriages), tostring(max_carriages) }, requestForce, true) end + if debug_log then log("No train with "..tostring(min_carriages).." <= length <= "..tostring(max_carriages).." to transport "..tostring(totalStacks).." stacks from "..from.." to "..to.." in network "..matched_network_id_string.." found in Depot.") end + script.raise_event(on_dispatcher_no_train_found_event, { to = to, to_id = toID, from = from, from_id = fromID, network_id = requestStation.network_id, min_carriages = min_carriages, max_carriages = max_carriages, shipment = loadingList, + }) + global.Dispatcher.Requests_by_Stop[toID][item] = count -- add removed item back to list of requested items. + return nil + end + + local selectedTrain = free_trains[1].train + local trainInventorySize = free_trains[1].inventory_size + + if message_level >= 3 then printmsg({"ltn-message.train-found", from_gps, to_gps, matched_network_id_string, tostring(trainInventorySize), tostring(totalStacks) }, requestForce) end + if debug_log then log("Train to transport "..tostring(trainInventorySize).."/"..tostring(totalStacks).." stacks from "..from.." to "..to.." in network "..matched_network_id_string.." found in Depot.") end + + -- recalculate delivery amount to fit in train + if trainInventorySize < totalStacks then + -- recalculate partial shipment + if itype == "fluid" then + -- fluids are simple + loadingList[1].count = trainInventorySize + else + -- items need a bit more math + for i=#loadingList, 1, -1 do + if totalStacks - loadingList[i].stacks < trainInventorySize then + -- remove stacks until it fits in train + loadingList[i].stacks = loadingList[i].stacks - (totalStacks - trainInventorySize) + totalStacks = trainInventorySize + local newcount = loadingList[i].stacks * game.item_prototypes[loadingList[i].name].stack_size + loadingList[i].count = min(newcount, loadingList[i].count) + break + else + -- remove item and try again + totalStacks = totalStacks - loadingList[i].stacks + table.remove(loadingList, i) + end + end + end + end + + -- create delivery + if message_level >= 2 then + if #loadingList == 1 then + printmsg({"ltn-message.creating-delivery", from_gps, to_gps, loadingList[1].count, "[" .. loadingList[1].type .. "=" .. loadingList[1].name .. "]"}, requestForce) + else + printmsg({"ltn-message.creating-delivery-merged", from_gps, to_gps, totalStacks}, requestForce) + end + end + + -- create schedule + -- local selectedTrain = global.Dispatcher.availableTrains[trainID].train + local depot = global.LogisticTrainStops[selectedTrain.station.unit_number] + local schedule = {current = 1, records = {}} + schedule.records[#schedule.records + 1] = NewScheduleRecord(depot.entity.backer_name, "inactivity", depot_inactivity) + + -- make train go to specific stations by setting a temporary waypoint on the rail the station is connected to + -- schedules cannot have temporary stops on a different surface, those need to be added when the delivery is updated with a train on a different surface + if from_rail and from_rail_direction + and depot.entity.surface == from_rail.surface then + schedule.records[#schedule.records + 1] = NewTempScheduleRecord(from_rail, from_rail_direction) + else + if debug_log then log("(ProcessRequest) Warning: creating schedule without temporary stop for provider.") end + end + schedule.records[#schedule.records + 1] = NewScheduleRecord(from, "item_count", "β‰₯", loadingList) + + if to_rail and to_rail_direction + and depot.entity.surface == to_rail.surface + and (from_rail and to_rail.surface == from_rail.surface) then + schedule.records[#schedule.records + 1] = NewTempScheduleRecord(to_rail, to_rail_direction) + else + if debug_log then log("(ProcessRequest) Warning: creating schedule without temporary stop for requester.") end + end + schedule.records[#schedule.records + 1] = NewScheduleRecord(to, "item_count", "=", loadingList, 0) + + -- log("DEBUG: schedule = "..serpent.block(schedule)) + selectedTrain.schedule = schedule + + + local shipment = {} + if debug_log then log("Creating Delivery: "..totalStacks.." stacks, "..from.." >> "..to) end + for i=1, #loadingList do + local loadingListItem = loadingList[i].type..","..loadingList[i].name + -- store Delivery + shipment[loadingListItem] = loadingList[i].count + + -- subtract Delivery from Provided items and check thresholds + global.Dispatcher.Provided[loadingListItem][fromID] = global.Dispatcher.Provided[loadingListItem][fromID] - loadingList[i].count + local new_provided = global.Dispatcher.Provided[loadingListItem][fromID] + local new_provided_stacks = 0 + local useProvideStackThreshold = false + if loadingList[i].type == "item" then + if game.item_prototypes[loadingList[i].name] then + new_provided_stacks = new_provided / game.item_prototypes[loadingList[i].name].stack_size + end + useProvideStackThreshold = providerData.providing_threshold_stacks > 0 + end + + if (useProvideStackThreshold and new_provided_stacks >= providerData.providing_threshold_stacks) or + (not useProvideStackThreshold and new_provided >= providerData.providing_threshold) then + global.Dispatcher.Provided[loadingListItem][fromID] = new_provided + global.Dispatcher.Provided_by_Stop[fromID][loadingListItem] = new_provided + else + global.Dispatcher.Provided[loadingListItem][fromID] = nil + global.Dispatcher.Provided_by_Stop[fromID][loadingListItem] = nil + end + + -- remove Request and reset age + global.Dispatcher.Requests_by_Stop[toID][loadingListItem] = nil + global.Dispatcher.RequestAge[loadingListItem..","..toID] = nil + + if debug_log then log(" "..loadingListItem..", "..loadingList[i].count.." in "..loadingList[i].stacks.." stacks ") end + end + global.Dispatcher.new_Deliveries[#global.Dispatcher.new_Deliveries+1] = selectedTrain.id + global.Dispatcher.Deliveries[selectedTrain.id] = { + force = requestForce, + train = selectedTrain, + started = game.tick, + from = from, + from_id = fromID, + to = to, + to_id = toID, + network_id = providerData.network_id, + surface_connections = providerData.surface_connections, + shipment = shipment} + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity - global.Dispatcher.availableTrains[selectedTrain.id].capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity - global.Dispatcher.availableTrains[selectedTrain.id].fluid_capacity + global.Dispatcher.availableTrains[selectedTrain.id] = nil + + -- train is no longer available => set depot to yellow + setLamp(depot, "yellow", 1) + + -- update delivery count and lamps on provider and requester + for _, stopID in pairs({fromID, toID}) do + local stop = global.LogisticTrainStops[stopID] + if stop.entity.valid and (stop.entity.unit_number == fromID or stop.entity.unit_number == toID) then + table.insert(stop.active_deliveries, selectedTrain.id) + -- only update blue signal count; change to yellow if it wasn't blue + local current_signal = stop.lamp_control.get_control_behavior().get_signal(1) + if current_signal and current_signal.signal.name == "signal-blue" then + setLamp(stop, "blue", #stop.active_deliveries) + else + setLamp(stop, "yellow", #stop.active_deliveries) + end + end + end + + return selectedTrain.id -- deliveries are indexed by train.id +end + + diff --git a/LogisticTrainNetwork/script/hotkey-events.lua b/LogisticTrainNetwork/script/hotkey-events.lua new file mode 100644 index 00000000..1884e470 --- /dev/null +++ b/LogisticTrainNetwork/script/hotkey-events.lua @@ -0,0 +1,19 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * Handle hotkey events + * + * See LICENSE.md in the project directory for license information. +--]] + +script.on_event("ltn-toggle-dispatcher", function(event) + local player = game.get_player(event.player_index) + + local enabled = settings.global["ltn-dispatcher-enabled"].value + if enabled then + settings.global["ltn-dispatcher-enabled"] = {value = false} + printmsg({"ltn-message.dispatcher-disabled", player.name}, nil, false) + else + settings.global["ltn-dispatcher-enabled"] = {value = true} + printmsg({"ltn-message.dispatcher-enabled", player.name}, nil, false) + end +end) \ No newline at end of file diff --git a/LogisticTrainNetwork/script/init.lua b/LogisticTrainNetwork/script/init.lua new file mode 100644 index 00000000..baa3aae0 --- /dev/null +++ b/LogisticTrainNetwork/script/init.lua @@ -0,0 +1,344 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +---- INITIALIZATION ---- + +local function initialize(oldVersion, newVersion) + --log("oldVersion: "..tostring(oldVersion)..", newVersion: "..tostring(newVersion)) + + ---- always start with stop updated after a config change, ensure consistent data and filled tables + global.tick_state = 0 -- index determining on_tick update mode 0: init, 1: stop update, 2: sort requests, 3: parse requests, 4: raise API update events + global.tick_stop_index = nil + global.tick_request_index = nil + global.tick_interval_start = nil -- stores tick of last state 0 for on_dispatcher_updated_event.update_interval + + ---- initialize logger + global.messageBuffer = {} + + ---- initialize Dispatcher + global.Dispatcher = global.Dispatcher or {} + + -- set in UpdateAllTrains + global.Dispatcher.availableTrains = global.Dispatcher.availableTrains or {} + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity or 0 + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity or 0 + global.Dispatcher.Provided = global.Dispatcher.Provided or {} -- dictionary [type,name] used to quickly find available items + global.Dispatcher.Provided_by_Stop = global.Dispatcher.Provided_by_Stop or {} -- dictionary [stopID]; used only by interface + global.Dispatcher.Requests = global.Dispatcher.Requests or {} -- array of requests sorted by priority and age; used to loop over all requests + global.Dispatcher.Requests_by_Stop = global.Dispatcher.Requests_by_Stop or {} -- dictionary [stopID]; used to keep track of already handled requests + global.Dispatcher.RequestAge = global.Dispatcher.RequestAge or {} + global.Dispatcher.Deliveries = global.Dispatcher.Deliveries or {} + + ---- initialize stops + global.LogisticTrainStops = global.LogisticTrainStops or {} + + -- table of connections per surface used to decide if providers from another surface are valid sources + -- { [surface1.index|surface2.index] = { [entity1.unit_number|entity2.unit_number] = { entity1, entity2, network_id } } + -- entity_key_pairs are automatically removed during delivery processing if at least one of the referenced entities becomes invalid + global.ConnectedSurfaces = global.ConnectedSurfaces or {} + + -- clean obsolete global + global.Dispatcher.Requested = nil + global.Dispatcher.Orders = nil + global.Dispatcher.OrderAge = nil + global.Dispatcher.Storage = nil + global.useRailTanker = nil + global.tickCount = nil + global.stopIdStartIndex = nil + global.Dispatcher.UpdateInterval = nil + global.Dispatcher.UpdateStopsPerTick = nil + global.TrainStopNames = nil + + -- update to 1.3.0 + if oldVersion and oldVersion < "01.03.00" then + for stopID, stop in pairs(global.LogisticTrainStops) do + stop.minDelivery = nil + stop.ignoreMinDeliverySize = nil + end + end + + -- update to 1.5.0 renamed priority to provider_priority + if oldVersion and oldVersion < "01.05.00" then + for stopID, stop in pairs (global.LogisticTrainStops) do + stop.provider_priority = stop.priority or 0 + stop.priority = nil + end + global.Dispatcher.Requests = {} + global.Dispatcher.RequestAge = {} + end + + -- update to 1.6.1 migrate locomotiveID to trainID + if oldVersion and oldVersion < "01.06.01" then + local locoID_to_trainID = {} -- id dictionary + local new_availableTrains = {} + local new_Deliveries = {} + for _,surface in pairs(game.surfaces) do + local trains = surface.get_trains() + for _, train in pairs(trains) do + -- build dictionary + local loco = Get_Main_Locomotive(train) + if loco then + locoID_to_trainID[loco.unit_number] = train.id + end + end + end + -- log("locoID_to_trainID: "..serpent.block(locoID_to_trainID)) + + for locoID, delivery in pairs(global.Dispatcher.Deliveries) do + local trainID = locoID_to_trainID[locoID] + if trainID then + log("Migrating global.Dispatcher.Deliveries from ["..tostring(locoID).."] to ["..tostring(trainID).."]") + new_Deliveries[trainID] = delivery + end + end + -- log("new_Deliveries: "..serpent.dump(new_Deliveries)) + global.Dispatcher.Deliveries = new_Deliveries + end + + -- update to 1.8.0 + if oldVersion and oldVersion < "01.08.00" then + for stopID, stop in pairs(global.LogisticTrainStops) do + stop.entity.get_or_create_control_behavior().send_to_train = true + stop.entity.get_or_create_control_behavior().read_from_train = true + end + end + + -- update to 1.12.3 migrate networkID to network_id + if oldVersion and oldVersion < "01.12.03" then + for train_id, delivery in pairs(global.Dispatcher.Deliveries) do + delivery.network_id = delivery.networkID + delivery.networkID = nil + end + end + + -- update to 1.13.1 renamed almost all stop properties + if oldVersion and oldVersion < "01.13.01" and next(global.LogisticTrainStops) then + for stopID, stop in pairs(global.LogisticTrainStops) do + stop.lamp_control = stop.lamp_control or stop.lampControl + stop.lampControl = nil + stop.error_code = stop.error_code or stop.errorCode or -1 + stop.errorCode = nil + stop.active_deliveries = stop.active_deliveries or stop.activeDeliveries or {} + stop.activeDeliveries = nil + -- control signals + stop.is_depot = stop.is_depot or stop.isDepot or false + stop.isDepot = nil + stop.depot_priority = stop.depot_priority or 0 + stop.max_carriages = stop.max_carriages or stop.maxTraincars or 0 + stop.maxTraincars = nil + stop.min_carriages = stop.min_carriages or stop.minTraincars or 0 + stop.minTraincars = nil + stop.max_trains = stop.max_trains or stop.trainLimit or 0 + stop.trainLimit = nil + stop.providing_threshold = stop.providing_threshold or stop.provideThreshold or min_provided + stop.provideThreshold = nil + stop.providing_threshold_stacks = stop.providing_threshold_stacks or stop.provideStackThreshold or 0 + stop.provideStackThreshold = nil + stop.provider_priority = stop.provider_priority or stop.providePriority or 0 + stop.providePriority = nil + stop.requesting_threshold = stop.requesting_threshold or stop.requestThreshold or min_requested + stop.requestThreshold = nil + stop.requesting_threshold_stacks = stop.requesting_threshold_stacks or stop.requestStackThreshold or 0 + stop.requestStackThreshold = nil + stop.requester_priority = stop.requester_priority or stop.requestPriority or 0 + stop.requestPriority = nil + stop.locked_slots = stop.locked_slots or stop.lockedSlots or 0 + stop.lockedSlots = nil + stop.no_warnings = stop.no_warnings or stop.noWarnings or false + stop.noWarnings = nil + -- parked train data will be set during initializeTrainStops() and updateAllTrains() + stop.parkedTrain = nil + stop.parkedTrainID = nil + stop.parkedTrainFacesStop = nil + end + end + + -- update to 1.9.4 + if oldVersion and oldVersion < "01.09.04" then + for stopID, stop in pairs(global.LogisticTrainStops) do + stop.lamp_control.teleport({stop.input.position.x, stop.input.position.y}) -- move control under lamp + stop.input.disconnect_neighbour({target_entity=stop.lamp_control, wire=defines.wire_type.green}) -- reconnect wires + stop.input.disconnect_neighbour({target_entity=stop.lamp_control, wire=defines.wire_type.red}) + stop.input.connect_neighbour({target_entity=stop.lamp_control, wire=defines.wire_type.green}) + stop.input.connect_neighbour({target_entity=stop.lamp_control, wire=defines.wire_type.red}) + end + end + +end + +-- run every time the mod configuration is changed to catch stops from other mods +-- ensures global.LogisticTrainStops contains valid entities +local function initializeTrainStops() + global.LogisticTrainStops = global.LogisticTrainStops or {} + -- remove invalidated stops + for stopID, stop in pairs (global.LogisticTrainStops) do + if not stop then + log("[LTN] removing empty stop entry "..tostring(stopID) ) + global.LogisticTrainStops[stopID] = nil + elseif not(stop.entity and stop.entity.valid) then + -- stop entity is corrupt/missing remove I/O entities + log("[LTN] removing corrupt stop "..tostring(stopID) ) + if stop.input and stop.input.valid then + stop.input.destroy() + end + if stop.output and stop.output.valid then + stop.output.destroy() + end + if stop.lamp_control and stop.lamp_control.valid then + stop.lamp_control.destroy() + end + global.LogisticTrainStops[stopID] = nil + end + end + + -- add missing ltn stops + for _, surface in pairs(game.surfaces) do + local foundStops = surface.find_entities_filtered{type="train-stop"} + if foundStops then + for k, stop in pairs(foundStops) do + -- validate global.LogisticTrainStops + if ltn_stop_entity_names[stop.name] then + local ltn_stop = global.LogisticTrainStops[stop.unit_number] + if ltn_stop then + if not(ltn_stop.output and ltn_stop.output.valid and ltn_stop.input and ltn_stop.input.valid and ltn_stop.lamp_control and ltn_stop.lamp_control.valid) then + -- I/O entities are corrupted + log("[LTN] recreating corrupt stop "..tostring(stop.backer_name) ) + global.LogisticTrainStops[stop.unit_number] = nil + CreateStop(stop) -- recreate to spawn missing I/O entities + + end + else + log("[LTN] recreating stop missing from global.LogisticTrainStops "..tostring(stop.backer_name) ) + CreateStop(stop) -- recreate LTN stops missing from global.LogisticTrainStops + end + end + end + end + end +end + +-- run every time the mod configuration is changed to catch changes to wagon capacities by other mods +local function updateAllTrains() + -- reset global lookup tables + global.StoppedTrains = {} -- trains stopped at LTN stops + global.StopDistances = {} -- reset station distance lookup table + global.WagonCapacity = { --preoccupy table with wagons to ignore at 0 capacity + ["rail-tanker"] = 0 + } + global.Dispatcher.availableTrains_total_capacity = 0 + global.Dispatcher.availableTrains_total_fluid_capacity = 0 + global.Dispatcher.availableTrains = {} + + -- remove all parked train from logistic stops + for stopID, stop in pairs (global.LogisticTrainStops) do + stop.parked_train = nil + stop.parked_train_id = nil + UpdateStopOutput(stop) + end + + -- add still valid trains back to stops + for force_name, force in pairs(game.forces) do + local trains = force.get_trains() + if trains then + for _, train in pairs(trains) do + if train.station and ltn_stop_entity_names[train.station.name] then + TrainArrives(train) + end + end + end + end +end + +-- register events +local function registerEvents() + local filters_on_built = {{ filter="type", type="train-stop" }} + local filters_on_mined = {{ filter="type", type="train-stop" }, { filter="rolling-stock" }} + + -- always track built/removed train stops for duplicate name list + script.on_event( defines.events.on_built_entity, OnEntityCreated, filters_on_built ) + script.on_event( defines.events.on_robot_built_entity, OnEntityCreated, filters_on_built ) + script.on_event( {defines.events.script_raised_built, defines.events.script_raised_revive, defines.events.on_entity_cloned}, OnEntityCreated ) + + script.on_event( defines.events.on_pre_player_mined_item, OnEntityRemoved, filters_on_mined ) + script.on_event( defines.events.on_robot_pre_mined, OnEntityRemoved, filters_on_mined ) + script.on_event( defines.events.on_entity_died, function(event) OnEntityRemoved(event, true) end, filters_on_mined ) + script.on_event( defines.events.script_raised_destroy, OnEntityRemoved ) + + script.on_event( {defines.events.on_pre_surface_deleted, defines.events.on_pre_surface_cleared }, OnSurfaceRemoved ) + + if global.LogisticTrainStops and next(global.LogisticTrainStops) then + -- script.on_event(defines.events.on_tick, OnTick) + script.on_nth_tick(nil) + script.on_nth_tick(dispatcher_nth_tick, OnTick) + script.on_event(defines.events.on_train_changed_state, OnTrainStateChanged) + script.on_event(defines.events.on_train_created, OnTrainCreated) + end + + -- disable instant blueprint in creative mode + if remote.interfaces["creative-mode"] and remote.interfaces["creative-mode"]["exclude_from_instant_blueprint"] then + remote.call("creative-mode", "exclude_from_instant_blueprint", ltn_stop_input) + remote.call("creative-mode", "exclude_from_instant_blueprint", ltn_stop_output) + remote.call("creative-mode", "exclude_from_instant_blueprint", ltn_stop_output_controller) + end + + -- blacklist LTN entities from picker dollies + if remote.interfaces["PickerDollies"] and remote.interfaces["PickerDollies"]["add_blacklist_name"] then + for name, offset in pairs(ltn_stop_entity_names) do + remote.call("PickerDollies", "add_blacklist_name", name, true) + end + remote.call("PickerDollies", "add_blacklist_name", ltn_stop_input, true) + remote.call("PickerDollies", "add_blacklist_name", ltn_stop_output, true) + remote.call("PickerDollies", "add_blacklist_name", ltn_stop_output_controller, true) + end +end + +script.on_load(function() + registerEvents() +end) + +script.on_init(function() + -- format version string to "00.00.00" + local oldVersion, newVersion = nil + local newVersionString = game.active_mods[MOD_NAME] + if newVersionString then + newVersion = format("%02d.%02d.%02d", match(newVersionString, "(%d+).(%d+).(%d+)")) + end + initialize(oldVersion, newVersion) + initializeTrainStops() + updateAllTrains() + registerEvents() + + log("[LTN] ".. MOD_NAME.." "..tostring(newVersionString).." initialized.") +end) + +script.on_configuration_changed(function(data) + if data and data.mod_changes[MOD_NAME] then + -- format version string to "00.00.00" + local oldVersion, newVersion = nil + local oldVersionString = data.mod_changes[MOD_NAME].old_version + if oldVersionString then + oldVersion = format("%02d.%02d.%02d", match(oldVersionString, "(%d+).(%d+).(%d+)")) + end + local newVersionString = data.mod_changes[MOD_NAME].new_version + if newVersionString then + newVersion = format("%02d.%02d.%02d", match(newVersionString, "(%d+).(%d+).(%d+)")) + end + + if oldVersion and oldVersion < "01.01.01" then + log("[LTN] Migration failed. Migrating from "..tostring(oldVersionString).." to "..tostring(newVersionString).."not supported.") + printmsg("[LTN] Error: Direct migration from "..tostring(oldVersionString).." to "..tostring(newVersionString).." is not supported. Oldest supported version: 1.1.1") + return + else + initialize(oldVersion, newVersion) + log("[LTN] Migrating from "..tostring(oldVersionString).." to "..tostring(newVersionString).." complete.") + printmsg("[LTN] Migration from "..tostring(oldVersionString).." to "..tostring(newVersionString).." complete.") + end + end + initializeTrainStops() + updateAllTrains() + registerEvents() + log("[LTN] ".. MOD_NAME.." "..tostring(game.active_mods[MOD_NAME]).." configuration updated.") +end) diff --git a/LogisticTrainNetwork/script/interface.lua b/LogisticTrainNetwork/script/interface.lua new file mode 100644 index 00000000..9698355c --- /dev/null +++ b/LogisticTrainNetwork/script/interface.lua @@ -0,0 +1,269 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +on_stops_updated_event = script.generate_event_name() +on_dispatcher_updated_event = script.generate_event_name() +on_dispatcher_no_train_found_event = script.generate_event_name() +on_delivery_created_event = script.generate_event_name() +on_delivery_pickup_complete_event = script.generate_event_name() +on_delivery_completed_event = script.generate_event_name() +on_delivery_failed_event = script.generate_event_name() + +on_provider_missing_cargo_alert = script.generate_event_name() +on_provider_unscheduled_cargo_alert = script.generate_event_name() +on_requester_unscheduled_cargo_alert = script.generate_event_name() +on_requester_remaining_cargo_alert = script.generate_event_name() + +-- ltn_interface allows mods to register for update events +remote.add_interface("logistic-train-network", { + -- updates for ltn_stops + on_stops_updated = function() return on_stops_updated_event end, + + -- updates for dispatcher + on_dispatcher_updated = function() return on_dispatcher_updated_event end, + on_dispatcher_no_train_found = function() return on_dispatcher_no_train_found_event end, + on_delivery_created = function() return on_delivery_created_event end, + + -- update for updated deliveries after leaving provider + on_delivery_pickup_complete = function() return on_delivery_pickup_complete_event end, + + -- update for completing deliveries + on_delivery_completed = function() return on_delivery_completed_event end, + on_delivery_failed = function() return on_delivery_failed_event end, + + -- alerts + on_provider_missing_cargo = function() return on_provider_missing_cargo_alert end, + on_provider_unscheduled_cargo = function() return on_provider_unscheduled_cargo_alert end, + on_requester_unscheduled_cargo = function() return on_requester_unscheduled_cargo_alert end, + on_requester_remaining_cargo = function() return on_requester_remaining_cargo_alert end, + + -- surface connections + connect_surfaces = ConnectSurfaces, -- function(entity1 :: LuaEntity, entity2 :: LuaEntity, network_id :: int32) + disconnect_surfaces = DisconnectSurfaces, -- function(entity1 :: LuaEntity, entity2 :: LuaEntity) + clear_all_surface_connections = ClearAllSurfaceConnections, + + -- Re-assigns a delivery to a different train. + reassign_delivery = ReassignDelivery, -- function(old_train_id :: uint, new_train :: LuaTrain) :: bool + get_or_create_next_temp_stop = GetOrCreateNextTempStop, -- function(train :: LuaTrain, schedule_index :: uint?) :: uint + get_next_logistic_stop = GetNextLogisticStop, -- function(train :: LuaTrain, schedule_index :: uint?) :: uint?, uint?, string? +}) + + +--[[ register events from LTN: +if remote.interfaces["logistic-train-network"] then + script.on_event(remote.call("logistic-train-network", "on_stops_updated"), on_stops_updated) + script.on_event(remote.call("logistic-train-network", "on_dispatcher_updated"), on_dispatcher_updated) +end +]]-- + + +--[[ EVENTS +on_stops_updated +Raised every UpdateInterval, after delivery generation +-> Contains: +logistic_train_stops = { [stop_id :: uint], { + -- stop data + active_deliveries :: int, + entity :: LuaEntity, + input :: LuaEntity, + output :: LuaEntity, + lamp_control :: LuaEntity, + error_code :: int, + + -- control signals + is_depot :: bool, + depot_priority :: int32, + network_id :: int32, + max_carriages :: int32, + min_carriages :: int32, + max_trains :: int32, + providing_threshold :: int32, + providing_threshold_stacks :: int32, + provider_priority :: int32, + requesting_threshold :: int32, + requesting_threshold_stacks :: int32, + requester_priority :: int32, + locked_slots :: int32, + no_warnings :: bool, + + -- parked train data + parked_train :: LuaTrain, + parked_train_id :: uint, + parked_train_faces_stop :: bool, +}} + + +on_dispatcher_updated +Raised every UpdateInterval, after delivery generation +-> Contains: + update_interval = int -- time in ticks LTN needed to run all updates, varies depending on number of stops and requests + provided_by_stop = { [stop_id :: uint], { [item :: string], count :: int } } + requests_by_stop = { [stop_id :: uint], { [item :: string], count :: int } } + new_deliveries = { uint } -- train_ids of deliveries created this UpdateInterval + deliveries = { [train_id :: uint], { + force :: LuaForce, + train :: LuaTrain, + from :: string, + from_id :: uint, + to :: string, + to_id :: uint, + network_id: int32, + started :: uint, -- tick this delivery was created on + surface_connections = { entity1 :: LuaEntity, entity2 :: LuaEntity, network_id :: int32 }, + shipment = { [item :: string], count :: int } + } } + available_trains = { [train_id :: uint], { + capacity :: int, + fluid_capacity :: int, + force :: LuaForce, + surface :: LuaSurface, + depot_priority :: int32, + network_id :: int32, + train :: LuaTrain + } } + + +on_dispatcher_no_train_found +Raised when no train was found to handle a request +-> Contains: + to :: string -- requester.backer_name + to_id :: uint -- requester.unit_number + network_id :: int32 + (optional) item :: string + (optional) from :: string + (optional) from_id :: uint + (optional) min_carriages :: int32 + (optional) max_carriages :: int32 + (optional) shipment = { [item :: string], count :: int } + + +on_delivery_pickup_complete +Raised when a train leaves provider stop +-> Contains: + train_id :: uint + train :: LuaTrain + planned_shipment= { [item :: string], count :: int } + actual_shipment = { [item :: string], count :: int } -- shipment updated to train inventory + + +on_delivery_completed +Raised when train leaves requester stop +-> Contains: + train_id :: uint + train :: LuaTrain + shipment= { [item :: string], count :: int } + + +on_delivery_failed +Raised when rolling stock of a train gets removed, the delivery timed out, train enters depot stop with active delivery +-> Contains: + train_id :: uint + shipment= { [item :: string], count :: int } } + + +---- Alerts ---- + +on_dispatcher_no_train_found +Raised when depot was empty +-> Contains: + to :: string + to_id :: uint + network_id :: int32 + item :: string -- + +on_dispatcher_no_train_found +Raised when no matching train was found +-> Contains: + to :: string + to_id :: uint + network_id :: int32 + from :: string + from_id :: uint + min_carriages :: int32 + max_carriages :: int32 + shipment = { [item :: string], count :: int } } + +on_provider_missing_cargo +Raised when trains leave provider with less than planned load +-> Contains: + train :: LuaTrain + station :: LuaEntity + planned_shipment = { [item :: string], count :: int } } + actual_shipment = { [item :: string], count :: int } } + +on_provider_unscheduled_cargo +Raised when trains leave provider with wrong cargo +-> Contains: + train :: LuaTrain + station :: LuaEntity + planned_shipment = { [item :: string], count :: int } } + unscheduled_load = { [item :: string], count :: int } } + +on_requester_unscheduled_cargo +Raised when trains arrive at requester with wrong cargo +-> Contains: + train :: LuaTrain + station :: LuaEntity + planned_shipment = { [item :: string], count :: int } } + unscheduled_load = { [item :: string], count :: int } } + +on_requester_remaining_cargo +Raised when trains leave requester with remaining cargo +-> Contains: + train :: LuaTrain + station :: LuaEntity + remaining_load = { [item :: string], count :: int } } + +--]] + +--[[ REMOTE CALLS + +usage: +if remote.interfaces["logistic-train-network"] then + remote.call("logistic-train-network", "", ?) +end + +connect_surfaces(entity1 :: LuaEntity, entity2 :: LuaEntity, network_id :: int32) + Designates two entities on different surfaces as forming a surface connection. + Connections are bi-directional but not transitive, i.e. surface A -> B implies B -> A, but A -> B and B -> C does not imply A -> C. + LTN will generate deliveries between depot and provider on one surface and requester on the other. + Network_id acts as additional mask for potential providers. + It is the caller's responsibility to ensure: + 1) trains are moved between surfaces + 2) deliveries are updated to the new train after surface transition, see reassign_delivery() + 3) trains return to their original surface depot + +disconnect_surfaces(entity1 :: LuaEntity, entity2 :: LuaEntity) + Removes a surface connection formed by the two given entities. + Active deliveries will not be affected. + It's not necessary to call this function when deleting one or both entities. + +clear_all_surface_connections() + Clears all surface connections. + Active deliveries will not be affected + This function exists for debugging purposes, no event is raised to notify connection owners. + +reassign_delivery(old_train_id :: uint, new_train :: LuaTrain) :: bool + Re-assigns a delivery to a different train. + Should be called after creating a train based on another train, for example after moving a train to a different surface. + Calls with an old_train_id without delivery have no effect. + Don't call this function when coupling trains via script, LTN already handles that through Factorio events. + This function does not add missing temp stops. See get_or_create_next_temp_stop for that. + +get_or_create_next_temp_stop(train :: LuaTrain, schedule_index :: uint?) :: uint + Ensures the next logistic stop in the schedule has a temporary stop if it is on the same surface as the train. + If no schedule_index is given, the search for the next logistic stop starts from train.schedule.current + In case the train is currently stopping at that index, the search starts at the next higher index. + The result will be the schedule index of the temp stop of the next logistic stop or nil if there is no further logistic stop. + +get_next_logistic_stop(train :: LuaTrain, schedule_index :: uint?) :: uint?, uint?, string? + Finds the next logistic stop in the schedule of the given train. + If no schedule_index is given, the search starts from train.schedule.current. + In case the train is currently stopping at that index, the search starts at the next higher index. + The result will be three values stop_schedule_index, stop_id and either the string "provider" or "requester". + If there is no further logistic stop in the schedule, the result will be nil. + +--]] \ No newline at end of file diff --git a/LogisticTrainNetwork/script/print.lua b/LogisticTrainNetwork/script/print.lua new file mode 100644 index 00000000..3a3ab5a6 --- /dev/null +++ b/LogisticTrainNetwork/script/print.lua @@ -0,0 +1,39 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +-- write msg to console for all member of force +-- skips over any duplicate messages (clearing filter is done in on_tick) +function printmsg(msg, force, useFilter) + local msgKey = "" + if force and force.valid then + msgKey = force.name..", " + else + msgKey = "all, " + end + if type(msg) == "table" then + for k, v in pairs(msg) do + if type(v) == "table" then + msgKey = msgKey..v[1]..", " + elseif type(v) == "string" then + msgKey = msgKey..v..", " + end + end + else + msgKey = msg + end + + -- print message + if global.messageBuffer[msgKey] == nil or not useFilter then + if force and force.valid then + force.print(msg) + else + game.print(msg) + end + end + + -- add current tick to messageBuffer if msgKey doesn't exist + global.messageBuffer[msgKey] = global.messageBuffer[msgKey] or {tick = game.tick} +end diff --git a/LogisticTrainNetwork/script/settings.lua b/LogisticTrainNetwork/script/settings.lua new file mode 100644 index 00000000..9dc6a3cc --- /dev/null +++ b/LogisticTrainNetwork/script/settings.lua @@ -0,0 +1,106 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * localizes and converts global runtime settings + * + * See LICENSE.md in the project directory for license information. +--]] + +message_level = tonumber(settings.global["ltn-interface-console-level"].value) +message_filter_age = settings.global["ltn-interface-message-filter-age"].value +message_include_gps = settings.global["ltn-interface-message-gps"].value +debug_log = settings.global["ltn-interface-debug-logfile"].value +min_requested = settings.global["ltn-dispatcher-requester-threshold"].value +min_provided = settings.global["ltn-dispatcher-provider-threshold"].value +schedule_cc = settings.global["ltn-dispatcher-schedule-circuit-control"].value +depot_inactivity = settings.global["ltn-dispatcher-depot-inactivity(s)"].value * 60 +stop_timeout = settings.global["ltn-dispatcher-stop-timeout(s)"].value * 60 +condition_stop_timeout = {type = "time", compare_type = "or", ticks = stop_timeout } +delivery_timeout = settings.global["ltn-dispatcher-delivery-timeout(s)"].value * 60 +finish_loading = settings.global["ltn-dispatcher-finish-loading"].value +requester_delivery_reset = settings.global["ltn-dispatcher-requester-delivery-reset"].value +dispatcher_enabled = settings.global["ltn-dispatcher-enabled"].value +dispatcher_updates_per_tick = settings.global["ltn-dispatcher-updates-per-tick"].value +dispatcher_nth_tick = settings.global["ltn-dispatcher-nth_tick"].value +if dispatcher_nth_tick > 1 then + dispatcher_updates_per_tick = 1 +end +depot_reset_filters = settings.global["ltn-depot-reset-filters"].value +depot_fluid_cleaning = settings.global["ltn-depot-fluid-cleaning"].value +default_network = settings.global["ltn-stop-default-network"].value +provider_show_existing_cargo = settings.global["ltn-provider-show-existing-cargo"].value + + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + if not event then return end + if event.setting == "ltn-interface-console-level" then + message_level = tonumber(settings.global["ltn-interface-console-level"].value) + end + if event.setting == "ltn-interface-message-filter-age" then + message_filter_age = settings.global["ltn-interface-message-filter-age"].value + end + if event.setting == "ltn-interface-message-gps" then + message_include_gps = settings.global["ltn-interface-message-gps"].value + end + if event.setting == "ltn-interface-debug-logfile" then + debug_log = settings.global["ltn-interface-debug-logfile"].value + end + if event.setting == "ltn-dispatcher-requester-threshold" then + min_requested = settings.global["ltn-dispatcher-requester-threshold"].value + end + if event.setting == "ltn-dispatcher-provider-threshold" then + min_provided = settings.global["ltn-dispatcher-provider-threshold"].value + end + if event.setting == "ltn-dispatcher-schedule-circuit-control" then + schedule_cc = settings.global["ltn-dispatcher-schedule-circuit-control"].value + end + if event.setting == "ltn-dispatcher-depot-inactivity(s)" then + depot_inactivity = settings.global["ltn-dispatcher-depot-inactivity(s)"].value * 60 + end + if event.setting == "ltn-dispatcher-stop-timeout(s)" then + stop_timeout = settings.global["ltn-dispatcher-stop-timeout(s)"].value * 60 + condition_stop_timeout = {type = "time", compare_type = "or", ticks = stop_timeout } + end + if event.setting == "ltn-dispatcher-delivery-timeout(s)" then + delivery_timeout = settings.global["ltn-dispatcher-delivery-timeout(s)"].value * 60 + end + if event.setting == "ltn-dispatcher-finish-loading" then + finish_loading = settings.global["ltn-dispatcher-finish-loading"].value + end + if event.setting == "ltn-dispatcher-requester-delivery-reset" then + requester_delivery_reset = settings.global["ltn-dispatcher-requester-delivery-reset"].value + end + if event.setting == "ltn-dispatcher-enabled" then + dispatcher_enabled = settings.global["ltn-dispatcher-enabled"].value + end + if event.setting == "ltn-dispatcher-updates-per-tick" then + if dispatcher_nth_tick == 1 then + dispatcher_updates_per_tick = settings.global["ltn-dispatcher-updates-per-tick"].value + else + dispatcher_updates_per_tick = 1 + end + end + if event.setting == "ltn-dispatcher-nth_tick" then + dispatcher_nth_tick = settings.global["ltn-dispatcher-nth_tick"].value + if dispatcher_nth_tick == 1 then + dispatcher_updates_per_tick = settings.global["ltn-dispatcher-updates-per-tick"].value + else + dispatcher_updates_per_tick = 1 + end + script.on_nth_tick(nil) + if next(global.LogisticTrainStops) then + script.on_nth_tick(dispatcher_nth_tick, OnTick) + end + end + if event.setting == "ltn-depot-reset-filters" then + depot_reset_filters = settings.global["ltn-depot-reset-filters"].value + end + if event.setting == "ltn-depot-fluid-cleaning" then + depot_fluid_cleaning = settings.global["ltn-depot-fluid-cleaning"].value + end + if event.setting == "ltn-stop-default-network" then + default_network = settings.global["ltn-stop-default-network"].value + end + if event.setting == "ltn-provider-show-existing-cargo" then + provider_show_existing_cargo = settings.global["ltn-provider-show-existing-cargo"].value + end +end) \ No newline at end of file diff --git a/LogisticTrainNetwork/script/stop-events.lua b/LogisticTrainNetwork/script/stop-events.lua new file mode 100644 index 00000000..c1f04493 --- /dev/null +++ b/LogisticTrainNetwork/script/stop-events.lua @@ -0,0 +1,295 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + + + +--create stop +function CreateStop(entity) + if global.LogisticTrainStops[entity.unit_number] then + if message_level >= 1 then printmsg({"ltn-message.error-duplicated-unit_number", entity.unit_number}, entity.force) end + if debug_log then log("(CreateStop) duplicate stop unit number "..entity.unit_number) end + return + end + local stop_offset = ltn_stop_entity_names[entity.name] + local posIn, posOut, rotOut, search_area + --log("Stop created at "..entity.position.x.."/"..entity.position.y..", orientation "..entity.direction) + if entity.direction == 0 then --SN + posIn = {entity.position.x + stop_offset, entity.position.y - 1} + posOut = {entity.position.x - 1 + stop_offset, entity.position.y - 1} + rotOut = 0 + search_area = { + {entity.position.x + 0.001 - 1 + stop_offset, entity.position.y + 0.001 - 1}, + {entity.position.x - 0.001 + 1 + stop_offset, entity.position.y - 0.001} + } + elseif entity.direction == 2 then --WE + posIn = {entity.position.x, entity.position.y + stop_offset} + posOut = {entity.position.x, entity.position.y - 1 + stop_offset} + rotOut = 2 + search_area = { + {entity.position.x + 0.001, entity.position.y + 0.001 - 1 + stop_offset}, + {entity.position.x - 0.001 + 1, entity.position.y - 0.001 + 1 + stop_offset} + } + elseif entity.direction == 4 then --NS + posIn = {entity.position.x - 1 - stop_offset, entity.position.y} + posOut = {entity.position.x - stop_offset, entity.position.y} + rotOut = 4 + search_area = { + {entity.position.x + 0.001 - 1 - stop_offset, entity.position.y + 0.001}, + {entity.position.x - 0.001 + 1 - stop_offset, entity.position.y - 0.001 + 1} + } + elseif entity.direction == 6 then --EW + posIn = {entity.position.x - 1, entity.position.y - 1 - stop_offset} + posOut = {entity.position.x - 1, entity.position.y - stop_offset} + rotOut = 6 + search_area = { + {entity.position.x + 0.001 - 1, entity.position.y + 0.001 - 1 - stop_offset}, + {entity.position.x - 0.001, entity.position.y - 0.001 + 1 - stop_offset} + } + else --invalid orientation + if message_level >= 1 then printmsg({"ltn-message.error-stop-orientation", tostring(entity.direction)}, entity.force) end + if debug_log then log("(CreateStop) invalid train stop orientation "..tostring(entity.direction) ) end + entity.destroy() + return + end + + local input, output, lampctrl + -- handle blueprint ghosts and existing IO entities preserving circuit connections + local ghosts = entity.surface.find_entities(search_area) + for _,ghost in pairs (ghosts) do + if ghost.valid then + if ghost.name == "entity-ghost" then + if ghost.ghost_name == ltn_stop_input then + -- log("reviving ghost input at "..ghost.position.x..", "..ghost.position.y) + _, input = ghost.revive() + elseif ghost.ghost_name == ltn_stop_output then + -- log("reviving ghost output at "..ghost.position.x..", "..ghost.position.y) + _, output = ghost.revive() + elseif ghost.ghost_name == ltn_stop_output_controller then + -- log("reviving ghost lamp-control at "..ghost.position.x..", "..ghost.position.y) + _, lampctrl = ghost.revive() + end + -- something has built I/O already (e.g.) Creative Mode Instant Blueprint + elseif ghost.name == ltn_stop_input then + input = ghost + -- log("Found existing input at "..ghost.position.x..", "..ghost.position.y) + elseif ghost.name == ltn_stop_output then + output = ghost + -- log("Found existing output at "..ghost.position.x..", "..ghost.position.y) + elseif ghost.name == ltn_stop_output_controller then + lampctrl = ghost + -- log("Found existing lamp-control at "..ghost.position.x..", "..ghost.position.y) + end + end + end + + if input == nil then -- create new + input = entity.surface.create_entity + { + name = ltn_stop_input, + + position = posIn, + force = entity.force + } + end + input.operable = false -- disable gui + input.minable = false + input.destructible = false -- don't bother checking if alive + + if lampctrl == nil then + lampctrl = entity.surface.create_entity + { + name = ltn_stop_output_controller, + position = {input.position.x + 0.45, input.position.y + 0.45}, -- slight offset so adjacent lamps won't connect + force = entity.force + } + -- log("building lamp-control at "..lampctrl.position.x..", "..lampctrl.position.y) + end + lampctrl.operable = false -- disable gui + lampctrl.minable = false + lampctrl.destructible = false -- don't bother checking if alive + + -- connect lamp and control + lampctrl.get_control_behavior().parameters = {{index = 1, signal = {type="virtual",name="signal-white"}, count = 1 }} + input.connect_neighbour({target_entity=lampctrl, wire=defines.wire_type.green}) + input.connect_neighbour({target_entity=lampctrl, wire=defines.wire_type.red}) + input.get_or_create_control_behavior().use_colors = true + input.get_or_create_control_behavior().circuit_condition = {condition = {comparator=">",first_signal={type="virtual",name="signal-anything"}}} + + if output == nil then -- create new + output = entity.surface.create_entity + { + name = ltn_stop_output, + position = posOut, + direction = rotOut, + force = entity.force + } + end + output.operable = false -- disable gui + output.minable = false + output.destructible = false -- don't bother checking if alive + + -- enable reading contents and sending signals to trains + entity.get_or_create_control_behavior().send_to_train = true + entity.get_or_create_control_behavior().read_from_train = true + + global.LogisticTrainStops[entity.unit_number] = { + entity = entity, + input = input, + output = output, + lamp_control = lampctrl, + parked_train = nil, + parked_train_id = nil, + active_deliveries = {}, --delivery IDs to/from stop + error_code = -1, --key to error_codes table + is_depot = false, + depot_priority = 0, + network_id = default_network, + min_carriages = 0, + max_carriages = 0, + max_trains = 0, + requesting_threshold = min_requested, + requesting_threshold_stacks = 0, + requester_priority = 0, + no_warnings = false, + providing_threshold = min_provided, + providing_threshold_stacks = 0, + provider_priority = 0, + locked_slots = 0, + } + UpdateStopOutput(global.LogisticTrainStops[entity.unit_number]) + + -- register events + -- script.on_event(defines.events.on_tick, OnTick) + script.on_nth_tick(nil) + script.on_nth_tick(dispatcher_nth_tick, OnTick) + script.on_event(defines.events.on_train_changed_state, OnTrainStateChanged) + script.on_event(defines.events.on_train_created, OnTrainCreated) + if debug_log then log("(OnEntityCreated) on_nth_tick("..dispatcher_nth_tick.."), on_train_changed_state, on_train_created registered") end +end + +function OnEntityCreated(event) + local entity = event.created_entity or event.entity or event.destination + if not entity or not entity.valid then return end + + if ltn_stop_entity_names[entity.name] then + CreateStop(entity) + end +end + + +-- stop removed +function RemoveStop(stopID, create_ghosts) + local stop = global.LogisticTrainStops[stopID] + + -- clean lookup tables + for k,v in pairs(global.StopDistances) do + if k:find(stopID) then + global.StopDistances[k] = nil + end + end + + -- remove available train + if stop and stop.is_depot and stop.parked_train_id and global.Dispatcher.availableTrains[stop.parked_train_id] then + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity - global.Dispatcher.availableTrains[stop.parked_train_id].capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity - global.Dispatcher.availableTrains[stop.parked_train_id].fluid_capacity + global.Dispatcher.availableTrains[stop.parked_train_id] = nil + end + + -- destroy IO entities, broken IO entities should be sufficiently handled in initializeTrainStops() + if stop then + if stop.input and stop.input.valid then + if create_ghosts then + stop.input.destructible = true + stop.input.die() + else + stop.input.destroy() + end + end + if stop.output and stop.output.valid then + if create_ghosts then + stop.output.destructible = true + stop.output.die() + else + stop.output.destroy() + end + end + if stop.lamp_control and stop.lamp_control.valid then stop.lamp_control.destroy() end + end + + global.LogisticTrainStops[stopID] = nil + + if not next(global.LogisticTrainStops) then + -- reset tick indexes + global.tick_state = 0 + global.tick_stop_index = nil + global.tick_request_index = nil + + -- unregister events + script.on_nth_tick(nil) + script.on_event(defines.events.on_train_changed_state, nil) + script.on_event(defines.events.on_train_created, nil) + if debug_log then log("(OnEntityRemoved) Removed last LTN Stop: on_nth_tick, on_train_changed_state, on_train_created unregistered") end + end +end + +function OnEntityRemoved(event, create_ghosts) + local entity = event.entity + if not entity or not entity.valid then return end + + if entity.train then + local trainID = entity.train.id + -- remove from stop if parked + if global.StoppedTrains[trainID] then + TrainLeaves(trainID) + end + -- removing any carriage fails a delivery + -- otherwise I'd have to handle splitting and merging a delivery across train parts + local delivery = global.Dispatcher.Deliveries[trainID] + if delivery then + script.raise_event(on_delivery_failed_event, {train_id = trainID, shipment = delivery.shipment}) + RemoveDelivery(trainID) + end + + elseif ltn_stop_entity_names[entity.name] then + RemoveStop(entity.unit_number, create_ghosts) + end +end + +--rename stop +local function renamedStop(targetID, old_name, new_name) + -- find identical stop names + local duplicateName = false + local renameDeliveries = true + for stopID, stop in pairs(global.LogisticTrainStops) do + if not stop.entity.valid or not stop.input.valid or not stop.output.valid or not stop.lamp_control.valid then + RemoveStop(stopID) + elseif stop.entity.backer_name == old_name then + renameDeliveries = false + end + end + -- rename deliveries only if no other LTN stop old_name exists + if renameDeliveries then + if debug_log then log("(OnEntityRenamed) last LTN stop "..old_name.." renamed, updating deliveries to "..new_name..".") end + for trainID, delivery in pairs(global.Dispatcher.Deliveries) do + if delivery.to == old_name then + delivery.to = new_name + end + if delivery.from == old_name then + delivery.from = new_name + end + end + end +end + +script.on_event(defines.events.on_entity_renamed, function(event) + local uid = event.entity.unit_number + local oldName = event.old_name + local newName = event.entity.backer_name + if ltn_stop_entity_names[event.entity.name] then + renamedStop(uid, oldName, newName) + end +end) + diff --git a/LogisticTrainNetwork/script/stop-update.lua b/LogisticTrainNetwork/script/stop-update.lua new file mode 100644 index 00000000..be47a207 --- /dev/null +++ b/LogisticTrainNetwork/script/stop-update.lua @@ -0,0 +1,505 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + + +-- return true if stop, output, lamp are on same logic network +local function detectShortCircuit(checkStop) + local scdetected = false + local networks = {} + local entities = {checkStop.entity, checkStop.output, checkStop.input} + + for k, entity in pairs(entities) do + local greenWire = entity.get_circuit_network(defines.wire_type.green) + if greenWire then + if networks[greenWire.network_id] then + scdetected = true + else + networks[greenWire.network_id] = entity.unit_number + end + end + local redWire = entity.get_circuit_network(defines.wire_type.red) + if redWire then + if networks[redWire.network_id] then + scdetected = true + else + networks[redWire.network_id] = entity.unit_number + end + end + end + + return scdetected +end + +local function remove_available_train(trainID) + if debug_log then log("(UpdateStop) removing available train "..tostring(trainID).." from depot." ) end + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity - global.Dispatcher.availableTrains[trainID].capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity - global.Dispatcher.availableTrains[trainID].fluid_capacity + global.Dispatcher.availableTrains[trainID] = nil +end + +-- update stop input signals +function UpdateStop(stopID, stop) + global.Dispatcher.Requests_by_Stop[stopID] = nil + + -- remove invalid stops + if not stop or not stop.entity.valid or not stop.input.valid or not stop.output.valid or not stop.lamp_control.valid then + if message_level >= 1 then printmsg({"ltn-message.error-invalid-stop", stopID}) end + if debug_log then log(format("(UpdateStop) Removing invalid stop: [%d]", stopID )) end + RemoveStop(stopID) + return + end + + -- remove invalid trains + if stop.parked_train and not stop.parked_train.valid then + global.LogisticTrainStops[stopID].parked_train = nil + global.LogisticTrainStops[stopID].parked_train_id = nil + end + + -- remove invalid active_deliveries -- shouldn't be necessary + for i=#stop.active_deliveries, 1, -1 do + if not global.Dispatcher.Deliveries[stop.active_deliveries[i]] then + table.remove(stop.active_deliveries, i) + if message_level >= 1 then printmsg({"ltn-message.error-invalid-delivery", stop.entity.backer_name}) end + if debug_log then log("(UpdateStop) Removing invalid delivery from stop '"..tostring(stop.entity.backer_name).."': "..tostring(stop.active_deliveries[i])) end + end + end + + -- reset stop parameters in case something goes wrong + stop.min_carriages = 0 + stop.max_carriages = 0 + stop.max_trains = 0 + stop.requesting_threshold = min_requested + stop.requester_priority = 0 + stop.no_warnings = false + stop.providing_threshold = min_provided + stop.provider_priority = 0 + stop.locked_slots = 0 + stop.depot_priority = 0 + + -- skip short circuited stops + if detectShortCircuit(stop) then + stop.error_code = 1 + if stop.parked_train_id and global.Dispatcher.availableTrains[stop.parked_train_id] then + remove_available_train(stop.parked_train_id) + end + setLamp(stop, ErrorCodes[stop.error_code], 1) + if debug_log then log("(UpdateStop) Short circuit error: "..stop.entity.backer_name) end + return + end + + -- skip deactivated stops + local stopCB = stop.entity.get_control_behavior() + if stopCB and stopCB.disabled then + stop.error_code = 1 + if stop.parked_train_id and global.Dispatcher.availableTrains[stop.parked_train_id] then + remove_available_train(stop.parked_train_id) + end + setLamp(stop, ErrorCodes[stop.error_code], 2) + if debug_log then log("(UpdateStop) Circuit deactivated stop: "..stop.entity.backer_name) end + return + end + + -- initialize control signal values to defaults + local is_depot = false + local depot_priority = 0 + local network_id = default_network + local min_carriages = 0 + local max_carriages = 0 + local max_trains = 0 + local requesting_threshold = min_requested + local requesting_threshold_stacks = 0 + local requester_priority = 0 + local no_warnings = false + local providing_threshold = min_provided + local providing_threshold_stacks = 0 + local provider_priority = 0 + local locked_slots = 0 + + -- get circuit values 0.16.24 + local signals = stop.input.get_merged_signals() + if not signals then return end -- either lamp and lampctrl are not connected or lampctrl has no output signal + + local signals_filtered = {} + local signal_type_virtual = "virtual" + local abs = math.abs + + for _,v in pairs(signals) do + if v.signal.name and v.signal.type then + if v.signal.type ~= signal_type_virtual then + -- add item and fluid signals to new array + signals_filtered[v.signal] = v.count + elseif ControlSignals[v.signal.name] then + -- read out control signals + if v.signal.name == ISDEPOT and v.count > 0 then + is_depot = true + elseif v.signal.name == DEPOT_PRIORITY then + depot_priority = v.count + elseif v.signal.name == NETWORKID then + network_id = v.count + elseif v.signal.name == MINTRAINLENGTH and v.count > 0 then + min_carriages = v.count + elseif v.signal.name == MAXTRAINLENGTH and v.count > 0 then + max_carriages = v.count + elseif v.signal.name == MAXTRAINS and v.count > 0 then + max_trains = v.count + elseif v.signal.name == REQUESTED_THRESHOLD then + requesting_threshold = abs(v.count) + elseif v.signal.name == REQUESTED_STACK_THRESHOLD then + requesting_threshold_stacks = abs(v.count) + elseif v.signal.name == REQUESTED_PRIORITY then + requester_priority = v.count + elseif v.signal.name == NOWARN and v.count > 0 then + no_warnings = true + elseif v.signal.name == PROVIDED_THRESHOLD then + providing_threshold = abs(v.count) + elseif v.signal.name == PROVIDED_STACK_THRESHOLD then + providing_threshold_stacks = abs(v.count) + elseif v.signal.name == PROVIDED_PRIORITY then + provider_priority = v.count + elseif v.signal.name == LOCKEDSLOTS and v.count > 0 then + locked_slots = v.count + end + end + end + end + local network_id_string = format("0x%x", band(network_id)) + + --update lamp colors when error_code or is_depot changed state + if stop.error_code ~=0 or stop.is_depot ~= is_depot then + stop.error_code = 0 -- we are error free here + if is_depot then + if stop.parked_train_id and stop.parked_train.valid then + if global.Dispatcher.Deliveries[stop.parked_train_id] then + setLamp(stop, "yellow", 1) + else + setLamp(stop, "blue", 1) + end + else + setLamp(stop, "green", 1) + end + else + if #stop.active_deliveries > 0 then + if stop.parked_train_id and stop.parked_train.valid then + setLamp(stop, "blue", #stop.active_deliveries) + else + setLamp(stop, "yellow", #stop.active_deliveries) + end + else + setLamp(stop, "green", 1) + end + end + end + + -- check if it's a depot + if is_depot then + stop.is_depot = true + stop.depot_priority = depot_priority + stop.network_id = network_id + + -- add parked train to available trains + if stop.parked_train_id and stop.parked_train.valid then + if global.Dispatcher.Deliveries[stop.parked_train_id] then + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."}".. + ", depot priority: ".. depot_priority.. + ", assigned train.id: "..stop.parked_train_id ) + end + else + if not global.Dispatcher.availableTrains[stop.parked_train_id] then + -- full arrival handling in case ltn-depot signal was turned on with an already parked train + TrainArrives(stop.parked_train) + else + -- update properties from depot + global.Dispatcher.availableTrains[stop.parked_train_id].network_id = network_id + global.Dispatcher.availableTrains[stop.parked_train_id].depot_priority = depot_priority + end + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."}".. + ", depot priority: ".. depot_priority.. + ", available train.id: "..stop.parked_train_id ) + end + end + else + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."}".. + ", depot priority: ".. depot_priority.. + ", no available train" ) + end + end + + -- not a depot > check if the name is unique + else + stop.is_depot = false + if stop.parked_train_id and global.Dispatcher.availableTrains[stop.parked_train_id] then + remove_available_train(stop.parked_train_id) + end + + for signal, count in pairs(signals_filtered) do + local signal_type = signal.type + local signal_name = signal.name + local item = signal_type..","..signal_name + + for trainID, delivery in pairs (global.Dispatcher.Deliveries) do + local deliverycount = delivery.shipment[item] + if deliverycount then + if stop.parked_train and stop.parked_train_id == trainID then + -- calculate items +- train inventory + local traincount = 0 + if signal_type == "fluid" then + traincount = stop.parked_train.get_fluid_count(signal_name) + else + traincount = stop.parked_train.get_item_count(signal_name) + end + + if delivery.to_id == stop.entity.unit_number then + local newcount = count + traincount + if newcount > 0 then newcount = 0 end --make sure we don't turn it into a provider + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} updating requested count with train "..trainID.." inventory: "..item.." "..count.."+"..traincount.."="..newcount) end + count = newcount + elseif delivery.from_id == stop.entity.unit_number then + if traincount <= deliverycount then + local newcount = count - (deliverycount - traincount) + if newcount < 0 then newcount = 0 end --make sure we don't turn it into a request + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} updating provided count with train "..trainID.." inventory: "..item.." "..count.."-"..deliverycount - traincount.."="..newcount) end + count = newcount + else --train loaded more than delivery + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} updating delivery count with overloaded train "..trainID.." inventory: "..item.." "..traincount) end + -- update delivery to new size + global.Dispatcher.Deliveries[trainID].shipment[item] = traincount + end + end + + else + -- calculate items +- deliveries + if delivery.to_id == stop.entity.unit_number then + local newcount = count + deliverycount + if newcount > 0 then newcount = 0 end --make sure we don't turn it into a provider + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} updating requested count with delivery: "..item.." "..count.."+"..deliverycount.."="..newcount) end + count = newcount + elseif delivery.from_id == stop.entity.unit_number and not delivery.pickupDone then + local newcount = count - deliverycount + if newcount < 0 then newcount = 0 end --make sure we don't turn it into a request + if debug_log then log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} updating provided count with delivery: "..item.." "..count.."-"..deliverycount.."="..newcount) end + count = newcount + end + + end + end + end -- for delivery + + local useProvideStackThreshold = false + local useRequestStackThreshold = false + local stack_count = 0 + + if signal_type == "item" then + useProvideStackThreshold = providing_threshold_stacks > 0 + useRequestStackThreshold = requesting_threshold_stacks > 0 + if game.item_prototypes[signal_name] then + stack_count = count / game.item_prototypes[signal_name].stack_size + end + end + + -- update Dispatcher Storage + -- Providers are used when above Provider Threshold + -- Requests are handled when above Requester Threshold + if (useProvideStackThreshold and stack_count >= providing_threshold_stacks) or + (not useProvideStackThreshold and count >= providing_threshold) then + global.Dispatcher.Provided[item] = global.Dispatcher.Provided[item] or {} + global.Dispatcher.Provided[item][stopID] = count + global.Dispatcher.Provided_by_Stop[stopID] = global.Dispatcher.Provided_by_Stop[stopID] or {} + global.Dispatcher.Provided_by_Stop[stopID][item] = count + if debug_log then + local trainsEnRoute = ""; + for k,v in pairs(stop.active_deliveries) do + trainsEnRoute=trainsEnRoute.." "..v + end + log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} provides "..item.." "..count.."("..providing_threshold..")".." stacks: "..stack_count.."("..providing_threshold_stacks..")"..", priority: "..provider_priority..", min length: "..min_carriages..", max length: "..max_carriages..", trains en route: "..trainsEnRoute) + end + elseif (useRequestStackThreshold and stack_count*-1 >= requesting_threshold_stacks) or + (not useRequestStackThreshold and count*-1 >= requesting_threshold) then + count = count * -1 + local ageIndex = item..","..stopID + global.Dispatcher.RequestAge[ageIndex] = global.Dispatcher.RequestAge[ageIndex] or game.tick + global.Dispatcher.Requests[#global.Dispatcher.Requests+1] = {age = global.Dispatcher.RequestAge[ageIndex], stopID = stopID, priority = requester_priority, item = item, count = count} + global.Dispatcher.Requests_by_Stop[stopID] = global.Dispatcher.Requests_by_Stop[stopID] or {} + global.Dispatcher.Requests_by_Stop[stopID][item] = count + if debug_log then + local trainsEnRoute = ""; + for k,v in pairs(stop.active_deliveries) do + trainsEnRoute=trainsEnRoute.." "..v + end + log("(UpdateStop) "..stop.entity.backer_name.." {"..network_id_string.."} requests "..item.." "..count.."("..requesting_threshold..")".." stacks: "..tostring(stack_count*-1).."("..requesting_threshold_stacks..")"..", priority: "..requester_priority..", min length: "..min_carriages..", max length: "..max_carriages..", age: "..global.Dispatcher.RequestAge[ageIndex].."/"..game.tick..", trains en route: "..trainsEnRoute) + end + end + + end -- for circuitValues + + stop.network_id = network_id + stop.providing_threshold = providing_threshold + stop.providing_threshold_stacks = providing_threshold_stacks + stop.provider_priority = provider_priority + stop.requesting_threshold = requesting_threshold + stop.requesting_threshold_stacks = requesting_threshold_stacks + stop.requester_priority = requester_priority + stop.min_carriages = min_carriages + stop.max_carriages = max_carriages + stop.max_trains = max_trains + stop.locked_slots = locked_slots + stop.no_warnings = no_warnings + end +end + + + +function setLamp(trainStop, color, count) + -- skip invalid stops and colors + if trainStop and trainStop.lamp_control.valid and ColorLookup[color] then + trainStop.lamp_control.get_control_behavior().parameters = {{index = 1, signal = {type="virtual",name=ColorLookup[color]}, count = count }} + return true + end + return false +end + + +function UpdateStopOutput(trainStop, ignore_existing_cargo) + -- skip invalid stop outputs + if not trainStop.output.valid then + return + end + + local signals = {} + local index = 0 + + if trainStop.parked_train and trainStop.parked_train.valid then + -- get train composition + local carriages = trainStop.parked_train.carriages + local encoded_positions_by_name = {} + local encoded_positions_by_type = {} + local inventory = not(ignore_existing_cargo) and trainStop.parked_train.get_contents() or {} + local fluidInventory = not(ignore_existing_cargo) and trainStop.parked_train.get_fluid_contents() or {} + + if #carriages < 32 then --prevent circuit network integer overflow error + if trainStop.parked_train_faces_stop then --train faces forwards >> iterate normal + for i=1, #carriages do + local signal_type = format("ltn-position-any-%s", carriages[i].type) + if game.virtual_signal_prototypes[signal_type] then + if encoded_positions_by_type[signal_type] then + encoded_positions_by_type[signal_type] = encoded_positions_by_type[signal_type] + 2^(i-1) + else + encoded_positions_by_type[signal_type] = 2^(i-1) + end + else + if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_type}) end + log(format("Error: signal \"%s\" not found!", signal_type)) + end + local signal_name = format("ltn-position-%s", carriages[i].name) + if game.virtual_signal_prototypes[signal_name] then + if encoded_positions_by_name[signal_name] then + encoded_positions_by_name[signal_name] = encoded_positions_by_name[signal_name] + 2^(i-1) + else + encoded_positions_by_name[signal_name] = 2^(i-1) + end + else + if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_name}) end + log(format("Error: signal \"%s\" not found!", signal_name)) + end + end + else --train faces backwards >> iterate backwards + n = 0 + for i=#carriages, 1, -1 do + local signal_type = format("ltn-position-any-%s", carriages[i].type) + if game.virtual_signal_prototypes[signal_type] then + if encoded_positions_by_type[signal_type] then + encoded_positions_by_type[signal_type] = encoded_positions_by_type[signal_type] + 2^n + else + encoded_positions_by_type[signal_type] = 2^n + end + else + if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_type}) end + log(format("Error: signal \"%s\" not found!", signal_type)) + end + local signal_name = format("ltn-position-%s", carriages[i].name) + if game.virtual_signal_prototypes[signal_name] then + if encoded_positions_by_name[signal_name] then + encoded_positions_by_name[signal_name] = encoded_positions_by_name[signal_name] + 2^n + else + encoded_positions_by_name[signal_name] = 2^n + end + else + if message_level >= 1 then printmsg({"ltn-message.error-invalid-position-signal", signal_name}) end + log(format("Error: signal \"%s\" not found!", signal_name)) + end + n=n+1 + end + end + + for k ,v in pairs (encoded_positions_by_type) do + index = index+1 + table.insert(signals, {index = index, signal = {type="virtual",name=k}, count = v }) + end + for k ,v in pairs (encoded_positions_by_name) do + index = index+1 + table.insert(signals, {index = index, signal = {type="virtual",name=k}, count = v }) + end + end + + if not trainStop.is_depot then + -- Update normal stations + local conditions = trainStop.parked_train.schedule.records[trainStop.parked_train.schedule.current].wait_conditions + if conditions ~= nil then + for _, c in pairs(conditions) do + if c.condition and c.condition.first_signal then -- loading without mods can make first signal nil? + if c.type == "item_count" then + if (c.condition.comparator == "=" and c.condition.constant == 0) then + --train expects to be unloaded of each of this item + inventory[c.condition.first_signal.name] = nil + elseif c.condition.comparator == "β‰₯" then + --train expects to be loaded to x of this item + inventory[c.condition.first_signal.name] = c.condition.constant + end + elseif c.type == "fluid_count" then + if (c.condition.comparator == "=" and c.condition.constant == 0) then + --train expects to be unloaded of each of this fluid + fluidInventory[c.condition.first_signal.name] = -1 + elseif c.condition.comparator == "β‰₯" then + --train expects to be loaded to x of this fluid + fluidInventory[c.condition.first_signal.name] = c.condition.constant + end + end + end + end + end + + -- output expected inventory contents + for k,v in pairs(inventory) do + index = index+1 + table.insert(signals, {index = index, signal = {type="item", name=k}, count = v}) + end + for k,v in pairs(fluidInventory) do + index = index+1 + table.insert(signals, {index = index, signal = {type="fluid", name=k}, count = v}) + end + + end -- not trainStop.is_depot + + end + -- will reset if called with no parked train + if index > 0 then + -- log("[LTN] "..tostring(trainStop.entity.backer_name).. " displaying "..#signals.."/"..tostring(trainStop.output.get_control_behavior().signals_count).." signals.") + + while #signals > trainStop.output.get_control_behavior().signals_count do + -- log("[LTN] removing signal "..tostring(signals[#signals].signal.name)) + table.remove(signals) + end + if index ~= #signals then + if message_level >= 1 then printmsg({"ltn-message.error-stop-output-truncated", tostring(trainStop.entity.backer_name), tostring(trainStop.parked_train), trainStop.output.get_control_behavior().signals_count, index-#signals}, trainStop.entity.force) end + if debug_log then log("(UpdateStopOutput) Inventory of train "..tostring(trainStop.parked_train.id).." at stop "..tostring(trainStop.entity.backer_name).." exceeds stop output limit of "..trainStop.output.get_control_behavior().signals_count.." by "..index-#signals.." signals.") end + end + trainStop.output.get_control_behavior().parameters = signals + if debug_log then log("(UpdateStopOutput) Updating signals for "..tostring(trainStop.entity.backer_name)..": train "..tostring(trainStop.parked_train.id)..": "..index.." signals") end + else + trainStop.output.get_control_behavior().parameters = nil + if debug_log then log("(UpdateStopOutput) Resetting signals for "..tostring(trainStop.entity.backer_name)..".") end + end +end + diff --git a/LogisticTrainNetwork/script/surface-interface.lua b/LogisticTrainNetwork/script/surface-interface.lua new file mode 100644 index 00000000..8d753052 --- /dev/null +++ b/LogisticTrainNetwork/script/surface-interface.lua @@ -0,0 +1,105 @@ +-- removes all data about surface connections; connection owners won't be notified +function ClearAllSurfaceConnections() + global.ConnectedSurfaces = {} +end + +-- returns the string "number1|number2" in consistent order: the smaller number is always placed first +local function sorted_pair(number1, number2) + return (number1 < number2) and (number1..'|'..number2) or (number2..'|'..number1) +end + +-- removes the surface connection between the given entities from global.SurfaceConnections. Does nothing if the connection doesn't exist. +function DisconnectSurfaces(entity1, entity2) + -- ensure received data is valid and usable + if not( entity1 and entity1.valid and entity1.surface and entity1.surface.index and game.surfaces[entity1.surface.index] ) then + if debug_log then log("(DisconnectSurfaces) Recieved entity1 was invalid.") end + return + end + if not( entity2 and entity2.valid and entity2.surface and entity2.surface.index and game.surfaces[entity2.surface.index] ) then + if debug_log then log("(DisconnectSurfaces) Recieved entity2 was invalid.") end + return + end + + local surface_pair_key = sorted_pair(entity1.surface.index, entity2.surface.index) + local surface_connections = global.ConnectedSurfaces[surface_pair_key] + + if surface_connections then + local entity_pair_key = sorted_pair(entity1.unit_number, entity2.unit_number) + if debug_log then log("removing surface connection for entities "..entity_pair_key.." between surfaces "..surface_pair_key) end + surface_connections[entity_pair_key] = nil + end +end + +-- adds a surface connection between the given entities; the network_id will be used in delivery processing to discard providers that don't match the surface connection's network_id +function ConnectSurfaces(entity1, entity2, network_id) + -- ensure received data is valid and usable + if not( entity1 and entity1.valid and entity1.surface and entity1.surface.index and game.surfaces[entity1.surface.index] ) then + if debug_log then log("(ConnectSurfaces) Recieved entity1 was invalid.") end + return + end + if not( entity2 and entity2.valid and entity2.surface and entity2.surface.index and game.surfaces[entity2.surface.index] ) then + if debug_log then log("(ConnectSurfaces) Recieved entity2 was invalid.") end + return + end + if not( network_id and tonumber(network_id, 10) ) then + if debug_log then log("(ConnectSurfaces) Recieved network_id was no valid integer.") end + return + end + + if entity1.surface == entity2.surface then + if debug_log then + log(format("(ConnectSurfaces) Entities [%d] and [%d] are on the same surface %s [%d].", + entity1.unit_number, + entity2.unit_number, + entity1.surface.name, + entity1.surface.index)) + end + return + end + + local surface_pair_key = sorted_pair(entity1.surface.index, entity2.surface.index) + local surface_connections = Get_Or_Create(global.ConnectedSurfaces, surface_pair_key) + + local entity_pair_key = sorted_pair(entity1.unit_number, entity2.unit_number) + if debug_log then + log(format("(ConnectSurfaces) Creating surface connection between [%d] on %s [%d] and [%d] on %s [%d].", + entity1.unit_number, + entity1.surface.name, + entity1.surface.index, + entity2.unit_number, + entity2.surface.name, + entity2.surface.index)) + end + surface_connections[entity_pair_key] = { + -- enforce a consistent order for repeated calls with the same two entities + entity1 = entity1.unit_number <= entity2.unit_number and entity1 or entity2, + entity2 = entity1.unit_number > entity2.unit_number and entity1 or entity2, + network_id = network_id, + } +end + +-- remove entity references when deleting surfaces +function OnSurfaceRemoved(event) + -- stop references + local surfaceID = event.surface_index + log(format("Removing LTN stops and surface connections on surface [%d].", surfaceID) ) + local surface = game.surfaces[surfaceID] + if surface then + local train_stops = surface.find_entities_filtered{type = "train-stop"} + for _, entity in pairs(train_stops) do + if ltn_stop_entity_names[entity.name] then + RemoveStop(entity.unit_number) + end + end + end + + -- surface connections; surface_index will either be the first half of the key or the second + local first_surface = "^"..surfaceID.."|" + local second_surface = "|"..surfaceID.."$" + + for surface_pair_key, _ in pairs(global.ConnectedSurfaces) do + if string.find(surface_pair_key, first_surface) or string.find(surface_pair_key, second_surface) then + global.ConnectedSurfaces[surface_pair_key] = nil + end + end +end \ No newline at end of file diff --git a/LogisticTrainNetwork/script/train-events.lua b/LogisticTrainNetwork/script/train-events.lua new file mode 100644 index 00000000..91ce3fe9 --- /dev/null +++ b/LogisticTrainNetwork/script/train-events.lua @@ -0,0 +1,419 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + + +-- update stop output when train enters stop +function TrainArrives(train) + local stopID = train.station.unit_number + local stop = global.LogisticTrainStops[stopID] + if stop then + local stop_name = stop.entity.backer_name + -- assign main loco name and force + local loco = Get_Main_Locomotive(train) + local trainForce = nil + local trainName = nil + if loco then + trainName = loco.backer_name + trainForce = loco.force + end + + -- add train to global.StoppedTrains + global.StoppedTrains[train.id] = { + train = train, + name = trainName, + force = trainForce, + stopID = stopID, + } + + -- add train to global.LogisticTrainStops + stop.parked_train = train + stop.parked_train_id = train.id + + local frontDistance = Get_Distance(train.front_stock.position, train.station.position) + local backDistance = Get_Distance(train.back_stock.position, train.station.position) + if frontDistance > backDistance then + stop.parked_train_faces_stop = false + else + stop.parked_train_faces_stop = true + end + local is_provider = false + + -- if message_level >= 3 then printmsg({"ltn-message.train-arrived", tostring(trainName), stop_name}, trainForce, false) end + if message_level >= 3 then printmsg({"ltn-message.train-arrived", Make_Train_RichText(train, nil), format("[train-stop=%d]", stopID)}, trainForce, false) end + if debug_log then log(format("(TrainArrives) Train [%d] \"%s\": arrived at LTN-stop [%d] \"%s\"; train_faces_stop: %s", train.id, trainName, stopID, stop_name, stop.parked_train_faces_stop )) end + + if stop.error_code == 0 then + if stop.is_depot then + local delivery = global.Dispatcher.Deliveries[train.id] + if delivery then + -- delivery should have been removed when leaving requester. Handle like delivery timeout. + if message_level >= 1 then + printmsg({ + "ltn-message.delivery-removed-depot", + Make_Stop_RichText(from_entity) or delivery.from, + Make_Stop_RichText(to_entity) or delivery.to + }, delivery.force, false) + end + if debug_log then log(format("(TrainArrives) Train [%d] \"%s\": Entered Depot with active Delivery. Failing Delivery and reseting train.", train.id, trainName)) end + script.raise_event(on_delivery_failed_event, {train_id = train.id, shipment = delivery.shipment}) + RemoveDelivery(train.id) + end + + -- clean fluid residue + local train_items = train.get_contents() + local train_fluids = train.get_fluid_contents() + if table_size(train_fluids) > 0 and depot_fluid_cleaning > 0 then + -- cleaning per wagon + for i, wagon in pairs(train.fluid_wagons) do + for fluid, count in pairs(wagon.get_fluid_contents()) do + if count <= depot_fluid_cleaning then + local removed = wagon.remove_fluid({name=fluid, amount=count}) + if debug_log then log(format("(TrainArrives) Train \"%s\"[%d]: Depot fluid removal %s %f/%f", trainName, i, fluid, removed, count)) end + end + end + end + -- cleaning whole train doesn't work in 1.1.26 + -- for fluid, count in pairs(train_fluids) do + -- if count <= depot_fluid_cleaning then + -- local removed = train.remove_fluid({name=fluid, amount=count}) + -- log(format("Train %s: removed %s %f/%f", trainName, fluid, removed, count)) + -- end + -- end + train_fluids = train.get_fluid_contents() + end + + -- check for leftover cargo + if table_size(train_items) > 0 then + create_alert(stop.entity, "cargo-warning", {"ltn-message.depot_left_over_cargo", trainName, stop_name}, trainForce) + end + if table_size(train_fluids) > 0 then + create_alert(stop.entity, "cargo-warning", {"ltn-message.depot_left_over_cargo", trainName, stop_name}, trainForce) + end + + -- make train available for new deliveries + local capacity, fluid_capacity = GetTrainCapacity(train) + global.Dispatcher.availableTrains[train.id] = { + train = train, + surface = loco.surface, + force = trainForce, + depot_priority = stop.depot_priority, + network_id = stop.network_id, + capacity = capacity, + fluid_capacity = fluid_capacity + } + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity + capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity + fluid_capacity + -- log("added available train "..train.id..", inventory: "..tostring(global.Dispatcher.availableTrains[train.id].capacity)..", fluid capacity: "..tostring(global.Dispatcher.availableTrains[train.id].fluid_capacity)) + + -- reset schedule + local schedule = {current = 1, records = {}} + schedule.records[1] = NewScheduleRecord(stop_name, "inactivity", depot_inactivity) + train.schedule = schedule + + -- reset filters and bars + if depot_reset_filters and train.cargo_wagons then + for n,wagon in pairs(train.cargo_wagons) do + local inventory = wagon.get_inventory(defines.inventory.cargo_wagon) + if inventory then + if inventory.is_filtered() then + -- log("Cargo-Wagon["..tostring(n).."]: reseting "..tostring(#inventory).." filtered slots.") + for slotIndex=1, #inventory, 1 do + inventory.set_filter(slotIndex, nil) + end + end + if inventory.supports_bar and #inventory - inventory.get_bar() > 0 then + -- log("Cargo-Wagon["..tostring(n).."]: reseting "..tostring(#inventory - inventory.get_bar()).." locked slots.") + inventory.set_bar() + end + end + end + end + + setLamp(stop, "blue", 1) + + else -- stop is no Depot + -- check requester for incorrect shipment + local delivery = global.Dispatcher.Deliveries[train.id] + if delivery then + is_provider = delivery.from_id == stop.entity.unit_number + if delivery.to_id == stop.entity.unit_number then + local requester_unscheduled_cargo = false + local unscheduled_load = {} + local train_items = train.get_contents() + for name, count in pairs(train_items) do + local typed_name = "item,"..name + if not delivery.shipment[typed_name] then + requester_unscheduled_cargo = true + unscheduled_load[typed_name] = count + end + end + local train_fluids = train.get_fluid_contents() + for name, count in pairs(train_fluids) do + local typed_name = "fluid,"..name + if not delivery.shipment[typed_name] then + requester_unscheduled_cargo = true + unscheduled_load[typed_name] = count + end + end + if requester_unscheduled_cargo then + create_alert(stop.entity, "cargo-alert", {"ltn-message.requester_unscheduled_cargo", trainName, stop_name}, trainForce) + script.raise_event(on_requester_unscheduled_cargo_alert, {train = train, station = stop.entity, planned_shipment = delivery.shipment, unscheduled_load = unscheduled_load}) + end + end + end + + -- set lamp to blue for LTN controlled trains + for i=1, #stop.active_deliveries, 1 do + if stop.active_deliveries[i] == train.id then + setLamp(stop, "blue", #stop.active_deliveries) + break + end + end + end + end + + UpdateStopOutput(stop, is_provider and not(provider_show_existing_cargo) ) + end +end + +-- update stop output when train leaves stop +-- when called from on_train_created stoppedTrain.train will be invalid +function TrainLeaves(trainID) + local stoppedTrain = global.StoppedTrains[trainID] -- checked before every call of TrainLeaves + local train = stoppedTrain.train + local stopID = stoppedTrain.stopID + local stop = global.LogisticTrainStops[stopID] + if not stop then + if debug_log then log(format("(TrainLeaves) Error: StopID [%d] not found in global.LogisticTrainStops", stopID )) end + global.StoppedTrains[trainID] = nil + return + end + if not stop.entity.valid or not stop.input.valid or not stop.output.valid or not stop.lamp_control.valid then + if debug_log then log(format("(TrainLeaves) Error: StopID [%d] contains invalid entity. Processing skipped, train inventory not updated.", stopID )) end + global.StoppedTrains[trainID] = nil + -- don't call RemoveStop here as RemoveStop calls TrainLeaves again + return + end + local stop_name = stop.entity.backer_name + + -- train was stopped at LTN depot + if stop.is_depot then + if global.Dispatcher.availableTrains[trainID] then -- trains are normally removed when deliveries are created + global.Dispatcher.availableTrains_total_capacity = global.Dispatcher.availableTrains_total_capacity - global.Dispatcher.availableTrains[trainID].capacity + global.Dispatcher.availableTrains_total_fluid_capacity = global.Dispatcher.availableTrains_total_fluid_capacity - global.Dispatcher.availableTrains[trainID].fluid_capacity + global.Dispatcher.availableTrains[trainID] = nil + end + if stop.error_code == 0 then + setLamp(stop, "green", 1) + end + if debug_log then log(format("(TrainLeaves) Train [%d] \"%s\": left Depot [%d] \"%s\".", trainID, stoppedTrain.name, stopID, stop.entity.backer_name )) end + + -- train was stopped at LTN stop + else + -- remove delivery from stop + for i=#stop.active_deliveries, 1, -1 do + if stop.active_deliveries[i] == trainID then + table.remove(stop.active_deliveries, i) + end + end + + local delivery = global.Dispatcher.Deliveries[trainID] + if train.valid and delivery then + if delivery.from_id == stop.entity.unit_number then + -- update delivery counts to train inventory + local actual_load = {} + local unscheduled_load = {} + local provider_unscheduled_cargo = false + local provider_missing_cargo = false + local train_items = train.get_contents() + for name, count in pairs(train_items) do + local typed_name = "item,"..name + local planned_count = delivery.shipment[typed_name] + if planned_count then + actual_load[typed_name] = count -- update shipment to actual inventory + if count < planned_count then + -- underloaded + provider_missing_cargo = true + end + else + -- loaded wrong items + unscheduled_load[typed_name] = count + provider_unscheduled_cargo = true + end + end + local train_fluids = train.get_fluid_contents() + for name, count in pairs(train_fluids) do + local typed_name = "fluid,"..name + local planned_count = delivery.shipment[typed_name] + if planned_count then + actual_load[typed_name] = count -- update shipment actual inventory + if planned_count-count > 0.1 then -- prevent lsb errors + -- underloaded + provider_missing_cargo = true + end + else + -- loaded wrong fluids + unscheduled_load[typed_name] = count + provider_unscheduled_cargo = true + end + end + delivery.pickupDone = true -- remove reservations from this delivery + if debug_log then log(format("(TrainLeaves) Train [%d] \"%s\": left Provider [%d] \"%s\"; cargo: %s; unscheduled: %s ", trainID, stoppedTrain.name, stopID, stop.entity.backer_name, serpent.line(actual_load), serpent.line(unscheduled_load) )) end + global.StoppedTrains[trainID] = nil + + if provider_missing_cargo then + create_alert(stop.entity, "cargo-alert", {"ltn-message.provider_missing_cargo", stoppedTrain.name, stop_name}, stoppedTrain.force) + script.raise_event(on_provider_missing_cargo_alert, { + train = train, + station = stop.entity, + planned_shipment = delivery.shipment, + actual_shipment = actual_load + }) + end + if provider_unscheduled_cargo then + create_alert(stop.entity, "cargo-alert", {"ltn-message.provider_unscheduled_cargo", stoppedTrain.name, stop_name}, stoppedTrain.force) + script.raise_event(on_provider_unscheduled_cargo_alert, { + train = train, + station = stop.entity, + planned_shipment = delivery.shipment, + unscheduled_load = unscheduled_load + }) + end + script.raise_event(on_delivery_pickup_complete_event, { + train_id = trainID, + train = train, + planned_shipment = delivery.shipment, + actual_shipment = actual_load + }) + delivery.shipment = actual_load + + elseif delivery.to_id == stop.entity.unit_number then + -- reset schedule before API events + if requester_delivery_reset and train.schedule then + local schedule = {current = 1, records = {}} + schedule.records[1] = NewScheduleRecord(train.schedule.records[1].station, "inactivity", depot_inactivity) + train.schedule = schedule + end + + local remaining_load = {} + local requester_left_over_cargo = false + local train_items = train.get_contents() + for name, count in pairs(train_items) do + -- not fully unloaded + local typed_name = "item,"..name + requester_left_over_cargo = true + remaining_load[typed_name] = count + end + local train_fluids = train.get_fluid_contents() + for name, count in pairs(train_fluids) do + -- not fully unloaded + local typed_name = "fluid,"..name + requester_left_over_cargo = true + remaining_load[typed_name] = count + end + + if debug_log then log(format("(TrainLeaves) Train [%d] \"%s\": left Requester [%d] \"%s\" with left over cargo: %s", trainID, stoppedTrain.name, stopID, stop.entity.backer_name, serpent.line(remaining_load))) end + -- signal completed delivery and remove it + if requester_left_over_cargo then + create_alert(stop.entity, "cargo-alert", {"ltn-message.requester_left_over_cargo", stoppedTrain.name, stop_name}, stoppedTrain.force) + script.raise_event(on_requester_remaining_cargo_alert, { + train = train, + station = stop.entity, + remaining_load = remaining_load + }) + end + script.raise_event(on_delivery_completed_event, { + train_id = trainID, + train = train, + shipment = delivery.shipment}) + RemoveDelivery(trainID) + else + if debug_log then log(format("(TrainLeaves) Train [%d] \"%s\": left LTN-stop [%d] \"%s\".", trainID, stoppedTrain.name, stopID, stop.entity.backer_name)) end + end + end + if stop.error_code == 0 then + if #stop.active_deliveries > 0 then + setLamp(stop, "yellow", #stop.active_deliveries) + else + setLamp(stop, "green", 1) + end + end + end + + -- remove train reference + stop.parked_train = nil + stop.parked_train_id = nil + -- if message_level >= 3 then printmsg({"ltn-message.train-left", tostring(stoppedTrain.name), stop.entity.backer_name}, stoppedTrain.force) end + if message_level >= 3 then printmsg({"ltn-message.train-left", Make_Train_RichText(train, stoppedTrain.name), format("[train-stop=%d]", stopID)}, stoppedTrain.force, false) end + UpdateStopOutput(stop) + + global.StoppedTrains[trainID] = nil +end + +-- local reverse_defines = require('__flib__.reverse-defines') + +function OnTrainStateChanged(event) + -- log(game.tick.." (OnTrainStateChanged) Train name: "..tostring(Get_Train_Name(event.train))..", train.id:"..tostring(event.train.id).." stop: "..tostring(event.train.station and event.train.station.backer_name)..", state: "..reverse_defines.train_state[event.old_state].." > "..reverse_defines.train_state[event.train.state] ) + local train = event.train + if train.state == defines.train_state.wait_station and train.station ~= nil and ltn_stop_entity_names[train.station.name] then + TrainArrives(train) + elseif event.old_state == defines.train_state.wait_station and global.StoppedTrains[train.id] then -- update to 0.16 + TrainLeaves(train.id) + end +end + +-- updates or removes delivery references +function Update_Delivery(old_train_id, new_train) + local delivery = global.Dispatcher.Deliveries[old_train_id] + + -- expanded RemoveDelivery(old_train_id) to also update + for stopID, stop in pairs(global.LogisticTrainStops) do + if not stop.entity.valid or not stop.input.valid or not stop.output.valid or not stop.lamp_control.valid then + RemoveStop(stopID) + else + for i=#stop.active_deliveries, 1, -1 do --trainID should be unique => checking matching stop name not required + if stop.active_deliveries[i] == old_train_id then + if delivery then + stop.active_deliveries[i] = new_train.id -- update train id if delivery exists + else + table.remove(stop.active_deliveries, i) -- otherwise remove entry + if #stop.active_deliveries > 0 then + setLamp(stop, "yellow", #stop.active_deliveries) + else + setLamp(stop, "green", 1) + end + end + end + end + end + end + + -- copy global.Dispatcher.Deliveries[old_train_id] to new_train.id and change attached train in delivery + if delivery then + delivery.train = new_train + global.Dispatcher.Deliveries[new_train.id] = delivery + end + + if global.StoppedTrains[old_train_id] then + TrainLeaves(old_train_id) -- removal only, new train is added when on_train_state_changed fires with wait_station afterwards + end + global.Dispatcher.Deliveries[old_train_id] = nil + + return delivery +end + +function OnTrainCreated(event) + -- log("(on_train_created) Train name: "..tostring(Get_Train_Name(event.train))..", train.id:"..tostring(event.train.id)..", .old_train_id_1:"..tostring(event.old_train_id_1)..", .old_train_id_2:"..tostring(event.old_train_id_2)..", state: "..tostring(event.train.state)) + -- on_train_created always sets train.state to 9 manual, scripts have to set the train back to its former state. + + if event.old_train_id_1 then + Update_Delivery(event.old_train_id_1, event.train) + end + + if event.old_train_id_2 then + Update_Delivery(event.old_train_id_2, event.train) + end +end diff --git a/LogisticTrainNetwork/script/train-interface.lua b/LogisticTrainNetwork/script/train-interface.lua new file mode 100644 index 00000000..62905e94 --- /dev/null +++ b/LogisticTrainNetwork/script/train-interface.lua @@ -0,0 +1,141 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + + +---Finds the next logistic stop in the schedule of the given train. Returns nil if the train is not executing a delivery or has no further logistic stops in its schedule. +---@param train LuaTrain +---@param schedule_index integer? the index in the schedule to search from, `schedule.current` if omitted. Starts from the next position if the train is currently stopping at that station. +---@return integer? schedule_index the index of next logistic stop in the schedule or nil +---@return integer? id the unit_number of the logistic stop +---@return "provider"|"requester"|nil type +function GetNextLogisticStop(train, schedule_index) + if not (train and train.valid) then + if debug_log then log("(GetNextLogisticStop) train not valid") end + return + end + + if not train.schedule then + if debug_log then log(format("(GetNextLogisticStop) train [%d] has no schedule.", train.id)) end + return + end + + local delivery = global.Dispatcher.Deliveries[train.id] + if not delivery then + if debug_log then log(format("(GetNextLogisticStop) train [%d] not found in deliveries.", train.id)) end + return + end + + local item = next(delivery.shipment) + if not item then + -- this can happen when the train was unable to load anything at the provider + if debug_log then log(format("(GetNextLogisticStop) train [%d] no longer has a shipment list.", train.id)) end + return + end + + -- Comparing stop names is not enough to find the provider and the requester, + -- they might share names with each other or another stop in the schedule. + -- So use a heuristic that also looks at the wait conditions + local itype, iname = match(item, match_string) + local records = train.schedule.records + + local record_index = schedule_index or train.schedule.current or 2 -- defaulting to 1 is pointless because that's the depot + if record_index == train.schedule.current and train.state == defines.train_state.wait_station then + record_index = record_index + 1 + end + + local function get_wait_count_comparator(record) + if record.wait_conditions then + for _, wait_condition in pairs(record.wait_conditions) do + local condition = wait_condition.condition + if condition and condition.constant and (wait_condition.type == "item_count" or wait_condition.type == "fluid_count") then + local signal = condition.first_signal + return signal and signal.type == itype and signal.name == iname and condition.comparator + end + end + end + end + + local record = records[record_index] + while record do + if record.station == delivery.from and get_wait_count_comparator(record) == "β‰₯" then + return record_index, delivery.from_id, "provider" + end + if record.station == delivery.to and get_wait_count_comparator(record) == "=" then + return record_index, delivery.to_id, "requester" + end + + record_index = record_index + 1 + record = records[record_index] + end +end + +local temp_wait_condition = {{type = "time", compare_type = "and", ticks = 0}} + +---Ensures the next logistic stop in the schedule has a temporary stop if is on the same surface as the train. +---@param train LuaTrain +---@param schedule_index integer? the index in the schedule to search from, `schedule.current` if omitted. Starts from the next index if the train is currently stopping at that station. +---@return integer? stop_position index of created or existing temporary stop for next found logistic stop that was handled, nil if there is no further logistic stop or the next logistic stop is not on the same surface. +function GetOrCreateNextTempStop(train, schedule_index) + local stop_schedule_index, stop_id = GetNextLogisticStop(train, schedule_index) + if not stop_schedule_index then return end + + --unlike ProcessDelivery we need to consider that the stop entity might be gone + local stop = global.LogisticTrainStops[stop_id] + if not stop or not stop.entity.valid then + if debug_log then log(format("(UpdateSchedule) skipping stop [%d] for train [%d], stop-entity not valid", stop_id, train.id)) end + return + end + + local rail = stop.entity.connected_rail + local rail_direction = stop.entity.connected_rail_direction + if not rail or not rail_direction then + if debug_log then log(format("(UpdateSchedule) skipping stop [%d] for train [%d], not connected to a rail", stop_id, train.id)) end + return + end + + -- the engine does not allow temp_stops on different surfaces + -- locomotive might not work here, a new train on another surface could still be incomplete + if train.carriages[1].surface ~= stop.entity.surface then + if debug_log then log(format("(UpdateSchedule) stop [%d] is on a different surface than train [%d]", stop_id, train.id)) end + return + end + + -- insert temp stop in schedule + local schedule = train.schedule + local previous_record = schedule.records[stop_schedule_index-1] + if previous_record and previous_record.temporary then return stop_schedule_index-1 end -- schedule already up-to-date for stop_position + + if debug_log then log(format("(UpdateSchedule) adding new temp-stop before stop [%d] at rail [%d] to train [%d] ", stop_id, rail.unit_number, train.id)) end + table.insert(schedule.records, stop_schedule_index, { + wait_conditions = temp_wait_condition, + rail = rail, + rail_direction = rail_direction, + temporary = true, + }) + train.schedule = schedule + return stop_schedule_index +end + +---reassigns an existing delivery from one train to another +---@param old_train_id integer +---@param new_train LuaTrain +---@return boolean reassigned true if the old train was executing a delivery, false otherwise +function ReassignDelivery(old_train_id, new_train) + -- check if delivery exists for given train id + if not (old_train_id and global.Dispatcher.Deliveries[old_train_id]) then + if debug_log then log(format("(ReassignDelivery) train [%d] not found in deliveries.", old_train_id)) end + return false + end + -- check if new train is valid + if not (new_train and new_train.valid and new_train.object_name == "LuaTrain") then + if debug_log then log("(ReassignDelivery) Received new_train was invalid.") end + return false + end + + local delivery = Update_Delivery(old_train_id, new_train) + return delivery and true +end + diff --git a/LogisticTrainNetwork/script/utils.lua b/LogisticTrainNetwork/script/utils.lua new file mode 100644 index 00000000..660b770f --- /dev/null +++ b/LogisticTrainNetwork/script/utils.lua @@ -0,0 +1,74 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * Control stage utility functions + * + * See LICENSE.md in the project directory for license information. +--]] + +--GetTrainCapacity(train) +local function getCargoWagonCapacity(entity) + local capacity = entity.prototype.get_inventory_size(defines.inventory.cargo_wagon) + -- log("(getCargoWagonCapacity) capacity for "..entity.name.." = "..capacity) + global.WagonCapacity[entity.name] = capacity + return capacity +end + +local function getFluidWagonCapacity(entity) + local capacity = 0 + for n=1, #entity.fluidbox do + capacity = capacity + entity.fluidbox.get_capacity(n) + end + -- log("(getFluidWagonCapacity) capacity for "..entity.name.." = "..capacity) + global.WagonCapacity[entity.name] = capacity + return capacity +end + +-- returns inventory and fluid capacity of a given train +function GetTrainCapacity(train) + local inventorySize = 0 + local fluidCapacity = 0 + if train and train.valid then + for _,wagon in pairs(train.cargo_wagons) do + local capacity = global.WagonCapacity[wagon.name] or getCargoWagonCapacity(wagon) + inventorySize = inventorySize + capacity + end + for _,wagon in pairs(train.fluid_wagons) do + local capacity = global.WagonCapacity[wagon.name] or getFluidWagonCapacity(wagon) + fluidCapacity = fluidCapacity + capacity + end + end + return inventorySize, fluidCapacity +end + +-- returns rich text string for train stops, or nil if entity is invalid +function Make_Stop_RichText(entity) + if entity and entity.valid then + if message_include_gps then + return format("[train-stop=%d] [gps=%s,%s,%s]", entity.unit_number, entity.position["x"], entity.position["y"], entity.surface.name) + else + return format("[train-stop=%d]", entity.unit_number) + end + else + return nil + end +end + +-- returns rich text string for trains, or nil if entity is invalid +function Make_Train_RichText(train, train_name) + local loco = Get_Main_Locomotive(train) + if loco and loco.valid then + return format("[train=%d] %s", loco.unit_number, train_name or loco.backer_name) + else + return format("[train=] %s", train_name) + end +end + +-- same as flib.get_or_insert(a_table, key, {}) but avoids the garbage collector overhead of passing an empty table that isn't used when the key exists +function Get_Or_Create(a_table, key) + local subtable = a_table[key] + if not subtable then + subtable = {} + a_table[key] = subtable + end + return subtable +end \ No newline at end of file diff --git a/LogisticTrainNetwork/settings.lua b/LogisticTrainNetwork/settings.lua new file mode 100644 index 00000000..b0eb855e --- /dev/null +++ b/LogisticTrainNetwork/settings.lua @@ -0,0 +1,166 @@ +--[[ Copyright (c) 2017 Optera + * Part of Logistics Train Network + * + * See LICENSE.md in the project directory for license information. +--]] + +data:extend({ + { + type = "bool-setting", + name = "ltn-dispatcher-enabled", + order = "aa", + setting_type = "runtime-global", + default_value = true + }, + { + type = "int-setting", + name = "ltn-dispatcher-nth_tick", + order = "ab", + setting_type = "runtime-global", + default_value = 2, + minimum_value = 1, + maximum_value = 60, -- one stop per second + }, + { + type = "int-setting", + name = "ltn-dispatcher-updates-per-tick", + order = "ac", + setting_type = "runtime-global", + default_value = 1, + minimum_value = 1, + maximum_value = 100, -- processing too many stops/requests per tick will produce lag spikes + }, + { + type = "string-setting", + name = "ltn-interface-console-level", + order = "ad", + setting_type = "runtime-global", + default_value = "2", + allowed_values = {"0", "1", "2", "3"} + }, + { + type = "int-setting", + name = "ltn-interface-message-filter-age", + order = "ae", + setting_type = "runtime-global", + default_value = 18000, + minimum_value = 0, + maximum_value = 2147483647, -- prevent 32bit signed overflow + }, + { + type = "bool-setting", + name = "ltn-interface-message-gps", + order = "af", + setting_type = "runtime-global", + default_value = false + }, + { + type = "bool-setting", + name = "ltn-interface-factorio-alerts", + order = "ag", + setting_type = "runtime-per-user", + default_value = true + }, + { + type = "bool-setting", + name = "ltn-interface-debug-logfile", + order = "ah", + setting_type = "runtime-global", + default_value = false + }, + { + type = "int-setting", + name = "ltn-dispatcher-requester-threshold", + order = "ba", + setting_type = "runtime-global", + default_value = 1000, + minimum_value = 1, + maximum_value = 2147483647, -- prevent 32bit signed overflow + }, + { + type = "int-setting", + name = "ltn-dispatcher-provider-threshold", + order = "bb", + setting_type = "runtime-global", + default_value = 1000, + minimum_value = 1, + maximum_value = 2147483647, -- prevent 32bit signed overflow + }, + { + type = "bool-setting", + name = "ltn-dispatcher-schedule-circuit-control", + order = "ca", + setting_type = "runtime-global", + default_value = false + }, + { + type = "int-setting", + name = "ltn-dispatcher-depot-inactivity(s)", + order = "cb", + setting_type = "runtime-global", + default_value = 5, --5s + minimum_value = 1, --1s + maximum_value = 36000, -- 10h + }, + { + type = "int-setting", + name = "ltn-dispatcher-stop-timeout(s)", + order = "cc", + setting_type = "runtime-global", + default_value = 120, --2min + minimum_value = 0, --0:off + maximum_value = 36000, -- 10h + }, + { + type = "int-setting", + name = "ltn-dispatcher-delivery-timeout(s)", + order = "cd", + setting_type = "runtime-global", + default_value = 600, --10min + minimum_value = 60, -- 1min + maximum_value = 36000, -- 10h + }, + { + type = "bool-setting", + name = "ltn-dispatcher-requester-delivery-reset", + order = "ce", + setting_type = "runtime-global", + default_value = false + }, + { + type = "bool-setting", + name = "ltn-dispatcher-finish-loading", + order = "cf", + setting_type = "runtime-global", + default_value = true + }, + { + type = "bool-setting", + name = "ltn-depot-reset-filters", + order = "da", + setting_type = "runtime-global", + default_value = true + }, + { + type = "double-setting", + name = "ltn-depot-fluid-cleaning", + order = "db", + setting_type = "runtime-global", + default_value = 0, + minimum_value = 0 + }, + { + type = "int-setting", + name = "ltn-stop-default-network", + order = "ea", + setting_type = "runtime-global", + default_value = -1, -- any + }, + { + type = "bool-setting", + name = "ltn-provider-show-existing-cargo", + order = "eb", + setting_type = "runtime-global", + default_value = true + }, +}) \ No newline at end of file diff --git a/LogisticTrainNetwork/thumbnail.png b/LogisticTrainNetwork/thumbnail.png new file mode 100644 index 00000000..34dbf61e Binary files /dev/null and b/LogisticTrainNetwork/thumbnail.png differ diff --git a/LogisticTrainNetwork_1.18.6.zip b/LogisticTrainNetwork_1.18.6.zip deleted file mode 100644 index 4239df40..00000000 Binary files a/LogisticTrainNetwork_1.18.6.zip and /dev/null differ diff --git a/LootingSpaceshipWrecks_1.1.0/changelog.txt b/LootingSpaceshipWrecks/changelog.txt similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/changelog.txt rename to LootingSpaceshipWrecks/changelog.txt diff --git a/LootingSpaceshipWrecks_1.1.0/control.lua b/LootingSpaceshipWrecks/control.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/control.lua rename to LootingSpaceshipWrecks/control.lua diff --git a/LootingSpaceshipWrecks_1.1.0/data.lua b/LootingSpaceshipWrecks/data.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/data.lua rename to LootingSpaceshipWrecks/data.lua diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-light.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-light.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-light.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-light.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/crash-site-assembling-machine-1-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-light.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-light.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-light.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-light.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-assembling-machine/hr-crash-site-assembling-machine-1-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator-beams.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator-beams.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator-beams.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator-beams.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/crash-site-generator.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/crash-site-generator.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator-beams.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator-beams.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator-beams.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator-beams.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-generator/hr-crash-site-generator.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-generator/hr-crash-site-generator.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired-beams.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired-beams.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired-beams.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired-beams.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/crash-site-lab-repaired.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/crash-site-lab-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-beams.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-beams.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-beams.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-beams.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-shadow.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-shadow.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-shadow.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired-shadow.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired.png b/LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired.png rename to LootingSpaceshipWrecks/graphics/entity/crash-site-lab/hr-crash-site-lab-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-assembling-machine-1-repaired.png b/LootingSpaceshipWrecks/graphics/icons/crash-site-assembling-machine-1-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-assembling-machine-1-repaired.png rename to LootingSpaceshipWrecks/graphics/icons/crash-site-assembling-machine-1-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-generator.png b/LootingSpaceshipWrecks/graphics/icons/crash-site-generator.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-generator.png rename to LootingSpaceshipWrecks/graphics/icons/crash-site-generator.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-lab-repaired.png b/LootingSpaceshipWrecks/graphics/icons/crash-site-lab-repaired.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/icons/crash-site-lab-repaired.png rename to LootingSpaceshipWrecks/graphics/icons/crash-site-lab-repaired.png diff --git a/LootingSpaceshipWrecks_1.1.0/graphics/icons/survival-armor.png b/LootingSpaceshipWrecks/graphics/icons/survival-armor.png similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/graphics/icons/survival-armor.png rename to LootingSpaceshipWrecks/graphics/icons/survival-armor.png diff --git a/LootingSpaceshipWrecks_1.1.0/info.json b/LootingSpaceshipWrecks/info.json similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/info.json rename to LootingSpaceshipWrecks/info.json diff --git a/LootingSpaceshipWrecks_1.1.0/locale/en/locale.cfg b/LootingSpaceshipWrecks/locale/en/locale.cfg similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/locale/en/locale.cfg rename to LootingSpaceshipWrecks/locale/en/locale.cfg diff --git a/LootingSpaceshipWrecks_1.1.0/locale/ru/locale.cfg b/LootingSpaceshipWrecks/locale/ru/locale.cfg similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/locale/ru/locale.cfg rename to LootingSpaceshipWrecks/locale/ru/locale.cfg diff --git a/LootingSpaceshipWrecks_1.1.0/prototypes/animations.lua b/LootingSpaceshipWrecks/prototypes/animations.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/prototypes/animations.lua rename to LootingSpaceshipWrecks/prototypes/animations.lua diff --git a/LootingSpaceshipWrecks_1.1.0/prototypes/entities.lua b/LootingSpaceshipWrecks/prototypes/entities.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/prototypes/entities.lua rename to LootingSpaceshipWrecks/prototypes/entities.lua diff --git a/LootingSpaceshipWrecks_1.1.0/prototypes/items.lua b/LootingSpaceshipWrecks/prototypes/items.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/prototypes/items.lua rename to LootingSpaceshipWrecks/prototypes/items.lua diff --git a/LootingSpaceshipWrecks_1.1.0/settings.lua b/LootingSpaceshipWrecks/settings.lua similarity index 100% rename from LootingSpaceshipWrecks_1.1.0/settings.lua rename to LootingSpaceshipWrecks/settings.lua diff --git a/LtnManager/changelog.txt b/LtnManager/changelog.txt new file mode 100644 index 00000000..3b31aabc --- /dev/null +++ b/LtnManager/changelog.txt @@ -0,0 +1,341 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.4.17 +Date: 2023-02-11 + Fixes: + - Shift-clicking a station should now zoom to the surface the entity is on. + - Should no longer error when iterating over invalid trains. +--------------------------------------------------------------------------------------------------- +Version: 0.4.16 +Date: 2023-01-19 + Fixes: + - Fix for TrainAPI accessed while Train object is invalid. +--------------------------------------------------------------------------------------------------- +Version: 0.4.15 +Date: 2022-07-28 + Fixes: + - Fixes for a couple of mistakes in 0.4.14. +--------------------------------------------------------------------------------------------------- +Version: 0.4.14 +Date: 2022-07-26 + Misc: + - Ownership changed from raiguard to nihilistzsche + Fixes: + - Fixed a couple of nil errors and a bug caused when upgrading from space + exploration 0.5 to 0.6. +--------------------------------------------------------------------------------------------------- +Version: 0.4.13 +Date: 2022-06-23 + Bugfixes: + - Fixed wrong network id on 'History' and 'Alerts' tabs +--------------------------------------------------------------------------------------------------- +Version: 0.4.12 +Date: 2022-04-19 + Compatibility: + - Added a remote interface to toggle the GUI and read if it is currently open +--------------------------------------------------------------------------------------------------- +Version: 0.4.11 +Date: 2022-04-14 + Bugfixes: + - Fixed that text search was case-sensitive on the inventory screen (#178) +--------------------------------------------------------------------------------------------------- +Version: 0.4.10 +Date: 2022-03-01 + Bugfixes: + - Fixed unexpected load not showing in the alerts panel (credit to Gorfiend) (#176) + - Fixed a crash when a surface is deleted while the LTN data iterator is working (#177) +--------------------------------------------------------------------------------------------------- +Version: 0.4.9 +Date: 2022-01-23 + Features: + - Added a map setting to adjust the history length (#127) + - Re-added the dispatcher disabled warning (#122) + Bugfixes: + - Fixed a crash when an alert somehow has no search string (#169) + - Fixed a crash when a train's main locomotive is invalid when being added to history (#168) + - Fixed a crash when changing the iterations per tick setting (#173) + - Fixed that alerts would be cleared permanently when using "clear all" (#167) +--------------------------------------------------------------------------------------------------- +Version: 0.4.8 +Date: 2021-12-06 + Bugfixes: + - Fixed a crash when a processed train loses all of its locomotives and the GUI refreshes (#164) + - Fixed a crash when using Lua patterns in the search string (regression) (#165) +--------------------------------------------------------------------------------------------------- +Version: 0.4.7 +Date: 2021-11-25 + Bugfixes: + - Focus search with control + f now only works if the GUI is visible and not pinned (#161) (credit to duskwuff) + - Invalid stations are completely removed from the stations table instead of being skipped (#162) +--------------------------------------------------------------------------------------------------- +Version: 0.4.6 +Date: 2021-11-23 + Bugfixes: + - Fixed a crash when a station has a blank name (#159) +--------------------------------------------------------------------------------------------------- +Version: 0.4.5 +Date: 2021-11-20 + Features: + - Re-added support for LTN Combinator mods + Bugfixes: + - Fixed a crash when a station doesn't have a name (#155) +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 +Date: 2021-11-18 + Bugfixes: + - Fixed that no trains were ever being shown in the trains tab +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 +Date: 2021-11-18 + Bugfixes: + - Added missing locale for "no depots" warning (#154) + - Fixed a crash when a train doesn't have a "main locomotive" as reported by LTN (#153) +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 2021-11-17 + Bugfixes: + - Fixed a crash when upgrading from pre-0.4.0 + - Fixed the GUI width changing when clicking history shipment or alert type headers +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 2021-11-17 + Features: + - Re-added the ability to open stations on the map + Bugfixes: + - Fixed a crash when a train returns to a depot with leftover materials (#150) + - Fixed a crash when LTN passes an item that does not actually exist + - Fixed a crash when updating mods (#150) +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 2021-11-16 + Features: + - Added surface selector + - Added trains tab with minimaps for each train + - Added new search functionality - search will now cover everything on the page instead of just the name + - For example, searching "transport belt" will not only show stations with that in their name, but will show stations with transport belts in their requests / shipments + - Search also waits until you stop typing before updating the results + - Added total train, depot, station, history, and alert count badges + Changes: + - Completely rewrote the GUI from scratch + - Removed item locations from the inventory tab + - This is no longer needed because you can now search for materials on the stations or trains tabs + - Search is now universal across all tabs + - Significantly increased the overall size of the GUI + Optimizations: + - The GUI now dynamically updates its content instead of destroying and recreating it every time + +--------------------------------------------------------------------------------------------------- +Version: 0.3.11 +Date: 2021-08-08 + Changes: + - Removed the "ALPHA" label from the mod, since it is effectively complete + - Updated to flib 0.8.0 to fix a crash + - Updated status indicators to use the vanilla sprites + - Updated various GUI styles to modern standards +--------------------------------------------------------------------------------------------------- +Version: 0.3.10 +Date: 2020-11-26 + Changes: + - Updated to Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 +Date: 2020-10-29 + Bugfixes: + - Fixed a crash when a player would be removed between LTN data iteration and GUI updating +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 +Date: 2020-10-22 + Bugfixes: + - Fixed a crash related to LTN data desyncing + - Fixed a crash when a player's translations would finish in the middle of LTN data iteration + - Fixed that clicking a requester station on the inventory screen would open the shipment's provider station instead + - Fixed the clear all alerts button clearing all alerts for the rest of time +--------------------------------------------------------------------------------------------------- +Version: 0.3.7 +Date: 2020-10-02 + Bugfixes: + - Fixed a crash when a train was put into manual mode between iteration steps +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 +Date: 2020-09-26 + Bugfixes: + - Fixed crashes when adding history or alerts without all train information +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 +Date: 2020-09-22 + Bugfixes: + - Fixed a crash when every train would be deleted during the first step of train processing, causing the iterator to move to the next step prematurely +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: 2020-09-22 + Bugfixes: + - Fixed a crash when there are no LTN-controlled trains +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 2020-09-22 + Bugfixes: + - Fixed a crash when attempting to add a delivery to the history whose train doesn't exist in `data` yet + - Fixed a crash when attempting to add an alert whose train doesn't exist in `data` yet + - Fixed a crash with the LTN data iterator when the first player on the list wouldn't have completed translations yet +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 2020-09-19 + Bugfixes: + - Fixed a crash when a train would be invalidated during train data processing +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 2020-09-18 + Bugfixes: + - Fixed a crash when the LTN data iterator would attempt to sort for players whose translations were not finished +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: 2020-09-17 + Features: + - Added more verbose error messages when the GUI is unopenable + Changes: + - Updated to Factorio 1.0 + - Refactored LTN data iteration to significantly improve performance and make it easier to add new features + - Removed alert popups in favor of LTN's new built-in notifications + Bugfixes: + - Fixed that long station names would run off the edge of the in transit view +--------------------------------------------------------------------------------------------------- +Version: 0.2.7 +Date: 2020-08-10 + Bugfixes: + - Fixed a crash when a mod would removed while translations were running, but before those translations translated all of that mod's strings + - Fixed a desync related to player.connnected being unreliable during on_configuration_changed in multiplayer + - Fixed a potential crash if a GUI handler was removed between versions +--------------------------------------------------------------------------------------------------- +Version: 0.2.6 +Date: 2020-07-25 + Changes: + - Added mod description to locale so it can be translated + Bugfixes: + - Fixed a crash upon botched migration of train IDs + - Fixed crashes related to unsanitised search inputs +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 +Date: 2020-06-24 + Bugfixes: + - Fixed multiple crashes related to GUI style changes in Factorio 0.18.33 +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 +Date: 2020-06-23 + Bugfixes: + - Fixed that search-related GUI handlers wouldn't be cleaned up on GUI refresh + - Fixed a crash when the GUI has become invalid, likely due to another mod tampering with it +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: 2020-06-18 + Changes: + - Updated button colors. The mod now uses styles provided by FLib, with some additional smaller styles + Bugfixes: + - Fixed that the GUI would never become openable if mod version changes happened during LTN data iteration + - Fixed a crash when the mod would auto-update the GUI when it didn't exist yet + - Fixed a crash when a station had a white status light (uninitialized) +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 2020-05-28 + Bugfixes: + - Fixed a crash when a station is providing/requesting more than fifteen objects + - Fixed a crash when an LTN-controlled train has had its schedule modified +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 2020-05-26 + Bugfixes: + - Fixed alignment of "alert" column in alerts tab + - Fixed a crash when an alert is raised + - Fixed a crash when trying to opening an LTN combinator when the LTNC mod is not enabled +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: 2020-05-26 + Features: + - Added a new, unified search interface + - Added search to the stations tab - you can search by station name or filter by network ID + - Added search to the history tab - you can search by route or filter by network ID + - Shift + clicking a station name will open that station's LTN combinator, if one exists + Changes: + - Refactored mod structure to improve performance + - Switched from OpteraLib and RaiLuaLib to FLib + - History and alerts will be cleared on mod configuration change, to avoid migration issues + - The mod will only auto-update one GUI per tick, increasing performance on multiplayer servers + - Updated GUI styling for Factorio 0.18.27 + - The mod will only store the most recent 30 alerts, significantly improving performance + Bugfixes: + - Fixed a crash when a just-completed shipment is missing its start time + - Fixed a crash when updating the GUI after deconstructing a station, but before the next LTN update cycle +--------------------------------------------------------------------------------------------------- +Version: 0.1.10 +Date: 2020-04-27 + Changes: + - The entire inventory screen will refresh when you select a material, to fix stats inconsistencies + Bugfixes: + - Band-aided a crash when a material's translation doesn't exist - it will show the internal name instead. Please report any sightings of internal names! + - Fixed a crash when a train gets invalidated between LTN station and error processing +--------------------------------------------------------------------------------------------------- +Version: 0.1.9 +Date: 2020-04-19 + Bugfixes: + - Fixed LTN version dependency + - Fixed a crash when trying to open a station that no longer exists + - Fixed a crash when trying to process old LTN data after a mod configuration change +--------------------------------------------------------------------------------------------------- +Version: 0.1.8 +Date: 2020-04-16 + Changes: + - Updated to LTN API v1.13.1 + - Removed unused dictionary lookup and sorted translation tables from global, vastly speeding up autosave time + Bugfixes: + - Fixed that inventory search would never match the query to uppercase letters + - Fixed that the auto-refresh button state would always be "off" after recreating the GUI +--------------------------------------------------------------------------------------------------- +Version: 0.1.7 +Date: 2020-04-12 + Bugfixes: + - Fixed that translations wouldn't be automatically performed after joining a multiplayer game after a mod change +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 +Date: 2020-04-11 + Bugfixes: + - Fixed a crash with the train status function where it would use the train's current status instead of the status stored during iteration +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: 2020-04-11 + Bugfixes: + - Fixed a crash when an alert is thrown after starting a new game + - Fixed that the mod would try to use non-color virtual signals to display the station's status +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 2020-04-10 + Bugfixes: + - Fixed a crash when the alert_popups table becomes nil (somehow...) +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 2020-04-10 + Features: + - Added "/LtnManager" command for various debugging purposes, use "/h LtnManager" to see possible usecases + Changes: + - Station "control signals" display shows network ID signal + Bugfixes: + - Fixed a crash when re-opening the GUI to a material that no longer exists in the network + - Fixed a crash when setting an LTN reader signal on a station + - Fixed logic for "incorrect pickup" alert, and re-enabled the alert + - Fixed station ID duplication in depots causing an extra status to be displayed + - Fixed that long train compositions were not being clipped + - Fixed that the first station in each network would display all materials for that network +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 2020-04-10 + Features: + - Added amounts to material button tooltips + Changes: + - Completely disabled "incorrect pickup" alerts until I find a good way to account for margins of error +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2020-04-10 + Changes: + - Fluid shipments are now rounded down to account for floating-point imprecision +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2020-04-09 + Features: + - Initial alpha release diff --git a/LtnManager_0.4.23/constants.lua b/LtnManager/constants.lua similarity index 100% rename from LtnManager_0.4.23/constants.lua rename to LtnManager/constants.lua diff --git a/LtnManager/control.lua b/LtnManager/control.lua new file mode 100644 index 00000000..261d6cf4 --- /dev/null +++ b/LtnManager/control.lua @@ -0,0 +1,273 @@ +local event = require("__flib__.event") +local dictionary = require("__flib__.dictionary") +local gui = require("__flib__.gui") +local migration = require("__flib__.migration") +local on_tick_n = require("__flib__.on-tick-n") + +local global_data = require("scripts.global-data") +local ltn_data = require("scripts.ltn-data") +local migrations = require("scripts.migrations") +local player_data = require("scripts.player-data") + +local main_gui = require("scripts.gui.index") + +-- ----------------------------------------------------------------------------- +-- COMMANDS + +commands.add_command("LtnManager", { "ltnm-message.command-help" }, function(e) + if e.parameter == "refresh-player-data" then + local player = game.get_player(e.player_index) + local player_table = global.players[e.player_index] + player_data.refresh(player, player_table) + end +end) + +-- ----------------------------------------------------------------------------- +-- INTERFACES + +remote.add_interface("LtnManager", { + --- Returns whether the LTN Manager GUI is open for the given player. + --- @param player_index number + --- @return boolean + is_gui_open = function(player_index) + if not player_index or type(player_index) ~= "number" then + error("Must provide a valid player_index") + end + + if global.players then + local player_table = global.players[player_index] + if player_table then + local Gui = player_table.guis.main + if Gui then + return Gui.state.visible + end + end + end + + return false + end, + --- Toggles the LTN Manager GUI for the given player, and returns its new state. + --- @param player_index number + --- @return boolean + toggle_gui = function(player_index) + if not player_index or type(player_index) ~= "number" then + error("Must provide a valid player_index") + end + + if global.players then + local player_table = global.players[player_index] + if player_table then + local Gui = player_table.guis.main + if Gui and Gui.refs.window.valid then + Gui:toggle() + return Gui.state.visible + end + end + end + + return false + end, + get_provided_inventory_for_surface = function(surface_index) + if not surface_index or type(surface_index) ~= "number" then + error("Must provide a valid surface_index") + end + + if not global.data or not global.data.inventory or not global.data.inventory.provided then + return nil + end + + return global.data.inventory.provided[surface_index] + end, +}) + +-- ----------------------------------------------------------------------------- +-- EVENT HANDLERS +-- LTN data handlers are kept in `scripts.ltn-data` +-- all other handlers are kept here + +-- BOOTSTRAP + +event.on_init(function() + dictionary.init() + on_tick_n.init() + + global_data.init() + global_data.build_dictionaries() + + ltn_data.init() + ltn_data.connect() + + for i, player in pairs(game.players) do + player_data.init(player, i) + player_data.refresh(player, global.players[i]) + end +end) + +event.on_load(function() + dictionary.load() + ltn_data.connect() + + for _, player_table in pairs(global.players) do + if player_table.guis and player_table.guis.main then + main_gui.load(player_table.guis.main) + end + end +end) + +event.on_configuration_changed(function(e) + if migration.on_config_changed(e, migrations) then + dictionary.init() + + global_data.build_dictionaries() + ltn_data.init() + + for i, player in pairs(game.players) do + player_data.refresh(player, global.players[i]) + end + end +end) + +-- GUI + +local function handle_gui_event(msg, e) + if msg.gui == "main" then + local player_table = global.players[e.player_index] + if player_table.flags.can_open_gui then + local Gui = player_table.guis.main + if Gui and Gui.refs.window.valid then + Gui:dispatch(msg, e) + end + end + end +end + +gui.hook_events(function(e) + local msg = gui.read_action(e) + if msg then + handle_gui_event(msg, e) + end +end) + +event.register("ltnm-linked-focus-search", function(e) + local Gui = global.players[e.player_index].guis.main + if Gui and Gui.state.visible and not Gui.state.pinned then + handle_gui_event({ gui = "main", action = "focus_search" }, e) + end +end) + +-- PLAYER + +event.on_player_created(function(e) + local player = game.get_player(e.player_index) + player_data.init(player, e.player_index) + player_data.refresh(player, global.players[e.player_index]) +end) + +event.on_player_removed(function(e) + global.players[e.player_index] = nil +end) + +event.on_player_joined_game(function(e) + local player = game.get_player(e.player_index) + if player.connected then + dictionary.translate(player) + end +end) + +event.on_player_left_game(function(e) + dictionary.cancel_translation(e.player_index) +end) + +-- SHORTCUT + +event.register({ defines.events.on_lua_shortcut, "ltnm-toggle-gui" }, function(e) + if e.input_name or (e.prototype_name == "ltnm-toggle-gui") then + local player = game.get_player(e.player_index) + local player_table = global.players[e.player_index] + local flags = player_table.flags + local Gui = main_gui.get(e.player_index) + if Gui then + if flags.can_open_gui then + Gui:toggle() + else + if Gui.state.visible then + Gui:close() + end + if flags.translations_finished then + player.print({ "ltnm-message.ltn-no-data" }) + else + player.print({ "ltnm-message.translations-not-finished" }) + end + end + end + end +end) + +-- TICK + +event.on_tick(function(e) + dictionary.check_skipped() + + local tasks = on_tick_n.retrieve(e.tick) + if tasks then + for _, task in pairs(tasks) do + if task.gui then + handle_gui_event(task, { player_index = task.player_index }) + end + end + end + + local flags = global.flags + + if flags.iterating_ltn_data then + ltn_data.iterate() + end + + if flags.updating_guis then + local player_index = global.next_update_index + local player = game.get_player(player_index) + local player_table = global.players[player_index] + local player_flags = player_table.flags + if player_flags.translations_finished then + if player_flags.can_open_gui then + local Gui = main_gui.get(player_index) + if Gui and Gui.state.visible and Gui.state.auto_refresh then + Gui.state.ltn_data = global.data + Gui:update() + end + else + main_gui.build(player, player_table) + end + end + + local next_index = next(global.players, global.next_update_index) + if next_index then + global.next_update_index = next_index + else + global.next_update_index = nil + flags.updating_guis = false + end + end +end) + +-- TRANSLATIONS + +event.on_string_translated(function(e) + local language_data = dictionary.process_translation(e) + if language_data then + for _, player_index in pairs(language_data.players) do + local player_table = global.players[player_index] + -- If the player already has a language, replace it and rebuild the GUI + if player_table.dictionaries and (player_table.language or "") ~= language_data.language then + player_table.language = language_data.language + player_table.dictionaries = language_data.dictionaries + -- TODO: Rebuild GUI + elseif not player_table.flags.can_open_gui then + player_table.language = language_data.language + player_table.dictionaries = language_data.dictionaries + -- Enable opening the GUI on the next LTN update cycle + player_table.flags.translations_finished = true + end + end + end +end) diff --git a/LtnManager_0.4.23/data.lua b/LtnManager/data.lua similarity index 100% rename from LtnManager_0.4.23/data.lua rename to LtnManager/data.lua diff --git a/LtnManager_0.4.23/graphics/gui/frame-action-icons.png b/LtnManager/graphics/gui/frame-action-icons.png similarity index 100% rename from LtnManager_0.4.23/graphics/gui/frame-action-icons.png rename to LtnManager/graphics/gui/frame-action-icons.png diff --git a/LtnManager_0.4.23/graphics/shortcut/ltn-manager-shortcut.png b/LtnManager/graphics/shortcut/ltn-manager-shortcut.png similarity index 100% rename from LtnManager_0.4.23/graphics/shortcut/ltn-manager-shortcut.png rename to LtnManager/graphics/shortcut/ltn-manager-shortcut.png diff --git a/LtnManager/info.json b/LtnManager/info.json new file mode 100644 index 00000000..538551ad --- /dev/null +++ b/LtnManager/info.json @@ -0,0 +1,11 @@ +{ + "name": "LtnManager", + "version": "0.4.25", + "title": "LTN Manager", + "author": "nihilistzsche", + "contact": "Discord: nihilistzsche#0420", + "homepage": "https://github.com/nihilistzsche/LtnManager", + "description": "A GUI for managing your Logistic Train Network.", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.42", "LogisticTrainNetwork >= 1.16.3", "flib >= 0.9.2", "? LTN_Combinator_Modernized", "? space-exploration"] +} diff --git a/LtnManager_0.4.23/lib/queue.lua b/LtnManager/lib/queue.lua similarity index 100% rename from LtnManager_0.4.23/lib/queue.lua rename to LtnManager/lib/queue.lua diff --git a/LtnManager_0.4.23/locale/en/LtnManager.cfg b/LtnManager/locale/en/LtnManager.cfg similarity index 100% rename from LtnManager_0.4.23/locale/en/LtnManager.cfg rename to LtnManager/locale/en/LtnManager.cfg diff --git a/LtnManager_0.4.23/prototypes/sprite.lua b/LtnManager/prototypes/sprite.lua similarity index 100% rename from LtnManager_0.4.23/prototypes/sprite.lua rename to LtnManager/prototypes/sprite.lua diff --git a/LtnManager_0.4.23/prototypes/style.lua b/LtnManager/prototypes/style.lua similarity index 100% rename from LtnManager_0.4.23/prototypes/style.lua rename to LtnManager/prototypes/style.lua diff --git a/LtnManager_0.4.23/prototypes/util.lua b/LtnManager/prototypes/util.lua similarity index 100% rename from LtnManager_0.4.23/prototypes/util.lua rename to LtnManager/prototypes/util.lua diff --git a/LtnManager_0.4.23/scripts/global-data.lua b/LtnManager/scripts/global-data.lua similarity index 100% rename from LtnManager_0.4.23/scripts/global-data.lua rename to LtnManager/scripts/global-data.lua diff --git a/LtnManager/scripts/gui/actions.lua b/LtnManager/scripts/gui/actions.lua new file mode 100644 index 00000000..c296c38a --- /dev/null +++ b/LtnManager/scripts/gui/actions.lua @@ -0,0 +1,211 @@ +local train_util = require("__flib__.train") +local on_tick_n = require("__flib__.on-tick-n") + +local constants = require("constants") + +local util = require("scripts.util") + +local actions = {} + +local function toggle_fab(elem, sprite, state) + if state then + elem.style = "flib_selected_frame_action_button" + elem.sprite = sprite .. "_black" + else + elem.style = "frame_action_button" + elem.sprite = sprite .. "_white" + end +end + +function actions.close(Gui) Gui:close() end + +function actions.recenter(Gui) Gui.refs.window.force_auto_center() end + +function actions.toggle_auto_refresh(Gui) + Gui.state.auto_refresh = not Gui.state.auto_refresh + toggle_fab(Gui.refs.titlebar.refresh_button, "ltnm_refresh", Gui.state.auto_refresh) +end + +function actions.toggle_pinned(Gui) + Gui.state.pinned = not Gui.state.pinned + toggle_fab(Gui.refs.titlebar.pin_button, "ltnm_pin", Gui.state.pinned) + + if Gui.state.pinned then + Gui.state.pinning = true + Gui.player.opened = nil + Gui.state.pinning = false + else + Gui.player.opened = Gui.refs.window + Gui.refs.window.force_auto_center() + end +end + +function actions.update_text_search_query(Gui, _, e) + local query = e.text + -- Input sanitization + for pattern, replacement in pairs(constants.input_sanitizers) do + query = string.gsub(query, pattern, replacement) + end + Gui.state.search_query = query + + if Gui.state.search_job then on_tick_n.remove(Gui.state.search_job) end + + if #query == 0 then + Gui:schedule_update() + else + Gui.state.search_job = + on_tick_n.add(game.tick + 30, { gui = "main", action = "update", player_index = Gui.player.index }) + end +end + +function actions.update_network_id_query(Gui) + Gui.state.network_id = tonumber(Gui.refs.toolbar.network_id_field.text) or -1 + Gui:schedule_update() +end + +function actions.open_train_gui(Gui, msg) + local train_id = msg.train_id + local train_data = Gui.state.ltn_data.trains[train_id] + + if not train_data or not train_data.train.valid then + util.error_flying_text(Gui.player, { "message.ltnm-error-train-is-invalid" }) + return + end + + train_util.open_gui(Gui.player.index, train_data.train) +end + +function actions.open_station_gui(Gui, msg, e) + local station_id = msg.station_id + local station_data = Gui.state.ltn_data.stations[station_id] + + if not station_data or not station_data.entity.valid then + util.error_flying_text(Gui.player, { "message.ltnm-error-station-is-invalid" }) + return + end + + --- @type LuaPlayer + local player = Gui.player + + if e.shift then + if station_data.surface_index ~= player.surface_index then + if + remote.interfaces["space-exploration"] + and remote.call("space-exploration", "remote_view_is_unlocked", { player = player }) + then + local zone = remote.call("space-exploration", "get_zone_from_surface_index", + { surface_index = station_data.surface_index }) + if zone then + remote.call("space-exploration", "remote_view_start", { + player = player, + zone_name = zone.name, + position = station_data.entity.position, + location_name = station_data.name, + freeze_history = true, + }) + else + util.error_flying_text(player, { "message.ltnm-error-station-on-different-surface-unknown-zone" }) + return + end + else + util.error_flying_text(player, { "message.ltnm-error-station-on-different-surface" }) + return + end + else + player.zoom_to_world(station_data.entity.position, 1, station_data.entity) + end + + rendering.draw_circle({ + color = constants.colors.red.tbl, + target = station_data.entity.position, + surface = station_data.entity.surface, + radius = 0.5, + filled = false, + width = 5, + time_to_live = 60 * 3, + players = { player }, + }) + + if not Gui.state.pinned then Gui:close() end + elseif e.control and remote.interfaces["ltn-combinator"] then + if + not remote.call("ltn-combinator", "open_ltn_combinator", e.player_index, station_data.lamp_control, true) + then + util.error_flying_text(player, { "message.ltnm-error-ltn-combinator-not-found" }) + end + else + player.opened = station_data.entity + end +end + +function actions.toggle_sort(Gui, msg, e) + local tab = msg.tab + local column = msg.column + + local sorts = Gui.state.sorts[tab] + local active_column = sorts._active + if active_column == column then + sorts[column] = e.element.state + else + sorts._active = column + e.element.state = sorts[column] + + local widths = Gui.widths[tab] + + local old_checkbox = Gui.refs[tab].toolbar[active_column .. "_checkbox"] + old_checkbox.style = "ltnm_sort_checkbox" + if widths[active_column .. "_checkbox_stretchy"] then + old_checkbox.style.horizontally_stretchable = true + else + old_checkbox.style.width = widths[active_column] + end + e.element.style = "ltnm_selected_sort_checkbox" + if widths[column .. "_checkbox_stretchy"] then + e.element.style.horizontally_stretchable = true + else + e.element.style.width = widths[column] + end + end + + Gui:schedule_update() +end + +function actions.update(Gui) Gui:schedule_update() end + +function actions.change_tab(Gui, msg) + Gui.state.active_tab = msg.tab + Gui:schedule_update() +end + +function actions.change_surface(Gui, _, e) + local selected_index = e.element.selected_index + local selected_surface_index = Gui.state.ltn_data.surfaces.selected_to_index[selected_index] + if selected_surface_index then + Gui.state.surface = selected_surface_index + Gui:schedule_update() + end +end + +function actions.clear_history(Gui) + global.flags.deleted_history = true + Gui:schedule_update() +end + +function actions.delete_alert(Gui, msg) + global.active_data.alerts_to_delete[msg.alert_id] = true + Gui:schedule_update() +end + +function actions.delete_all_alerts(Gui) + global.flags.deleted_all_alerts = true + Gui:schedule_update() +end + +function actions.focus_search(Gui) + if not Gui.pinned then + Gui.refs.toolbar.text_search_field.select_all() + Gui.refs.toolbar.text_search_field.focus() + end +end + +return actions diff --git a/LtnManager_0.4.23/scripts/gui/alerts.lua b/LtnManager/scripts/gui/alerts.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/alerts.lua rename to LtnManager/scripts/gui/alerts.lua diff --git a/LtnManager_0.4.23/scripts/gui/depots.lua b/LtnManager/scripts/gui/depots.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/depots.lua rename to LtnManager/scripts/gui/depots.lua diff --git a/LtnManager_0.4.23/scripts/gui/history.lua b/LtnManager/scripts/gui/history.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/history.lua rename to LtnManager/scripts/gui/history.lua diff --git a/LtnManager_0.4.23/scripts/gui/index.lua b/LtnManager/scripts/gui/index.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/index.lua rename to LtnManager/scripts/gui/index.lua diff --git a/LtnManager/scripts/gui/inventory.lua b/LtnManager/scripts/gui/inventory.lua new file mode 100644 index 00000000..a4de2cf2 --- /dev/null +++ b/LtnManager/scripts/gui/inventory.lua @@ -0,0 +1,102 @@ +local misc = require("__flib__.misc") + +local templates = require("templates") + +local inventory_tab = {} + +function inventory_tab.build() + return { + tab = { + type = "tab", + caption = { "gui.ltnm-inventory" }, + ref = { "inventory", "tab" }, + actions = { + on_click = { gui = "main", action = "change_tab", tab = "inventory" }, + }, + }, + content = { + type = "flow", + style_mods = { horizontal_spacing = 12 }, + direction = "horizontal", + ref = { "inventory", "content_frame" }, + templates.inventory_slot_table("provided", 12), + templates.inventory_slot_table("in_transit", 8), + templates.inventory_slot_table("requested", 6), + }, + } +end + +local function update_table(self, name, color) + local translations = self.player_table.dictionaries.materials + + local state = self.state + local refs = self.refs.inventory + + local search_query = state.search_query + local search_network_id = state.network_id + local search_surface = state.surface + + local ltn_inventory = state.ltn_data.inventory[name][search_surface] + + local i = 0 + + local lua_table = table + local table = refs[name].table + local children = table.children + + local items = {} + + for name, count_by_network_id in pairs(ltn_inventory or {}) do + if + bit32.btest(count_by_network_id.combined_id, search_network_id) + and string.find(string.lower(translations[name]), string.lower(search_query)) + then + local running_count = 0 + for network_id, count in pairs(count_by_network_id) do + if network_id ~= "combined_id" and bit32.btest(network_id, search_network_id) then + running_count = running_count + count + end + end + + if running_count > 0 then + lua_table.insert(items, { + name = name, + running_count = running_count + }) + end + end + end + + local function by_descending_count(item1, item2) + return item1.running_count > item2.running_count + end + lua_table.sort(items, by_descending_count) + + for _, item in ipairs(items) do + i = i + 1 + local button = children[i] + if not button then + button = table.add({ type = "sprite-button", style = "flib_slot_button_" .. color, enabled = false }) + end + button.sprite = string.gsub(item.name, ",", "/") + button.number = item.running_count + button.tooltip = "[img=" + .. string.gsub(item.name, ",", "/") + .. "] [font=default-semibold]" + .. translations[item.name] + .. "[/font]\n" + .. misc.delineate_number(item.running_count) + end + + for j = i + 1, #children do + children[j].destroy() + end +end + +function inventory_tab.update(self) + update_table(self, "provided", "green") + update_table(self, "in_transit", "blue") + update_table(self, "requested", "red") +end + +return inventory_tab diff --git a/LtnManager_0.4.23/scripts/gui/stations.lua b/LtnManager/scripts/gui/stations.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/stations.lua rename to LtnManager/scripts/gui/stations.lua diff --git a/LtnManager_0.4.23/scripts/gui/templates.lua b/LtnManager/scripts/gui/templates.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/templates.lua rename to LtnManager/scripts/gui/templates.lua diff --git a/LtnManager_0.4.23/scripts/gui/trains.lua b/LtnManager/scripts/gui/trains.lua similarity index 100% rename from LtnManager_0.4.23/scripts/gui/trains.lua rename to LtnManager/scripts/gui/trains.lua diff --git a/LtnManager_0.4.23/scripts/ltn-data.lua b/LtnManager/scripts/ltn-data.lua similarity index 100% rename from LtnManager_0.4.23/scripts/ltn-data.lua rename to LtnManager/scripts/ltn-data.lua diff --git a/LtnManager_0.4.23/scripts/migrations.lua b/LtnManager/scripts/migrations.lua similarity index 100% rename from LtnManager_0.4.23/scripts/migrations.lua rename to LtnManager/scripts/migrations.lua diff --git a/LtnManager_0.4.23/scripts/player-data.lua b/LtnManager/scripts/player-data.lua similarity index 100% rename from LtnManager_0.4.23/scripts/player-data.lua rename to LtnManager/scripts/player-data.lua diff --git a/LtnManager_0.4.23/scripts/util.lua b/LtnManager/scripts/util.lua similarity index 100% rename from LtnManager_0.4.23/scripts/util.lua rename to LtnManager/scripts/util.lua diff --git a/LtnManager_0.4.23/settings.lua b/LtnManager/settings.lua similarity index 100% rename from LtnManager_0.4.23/settings.lua rename to LtnManager/settings.lua diff --git a/LtnManager_0.4.23/thumbnail.png b/LtnManager/thumbnail.png similarity index 100% rename from LtnManager_0.4.23/thumbnail.png rename to LtnManager/thumbnail.png diff --git a/LtnManager_0.4.23.zip b/LtnManager_0.4.23.zip deleted file mode 100644 index 6927727b..00000000 Binary files a/LtnManager_0.4.23.zip and /dev/null differ diff --git a/LtnManager_0.4.23/README.md b/LtnManager_0.4.23/README.md deleted file mode 100644 index 61bc0f6e..00000000 --- a/LtnManager_0.4.23/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Factorio-LtnManager -A GUI for managing your Logistic Train Network. A mod for Factorio. diff --git a/LtnManager_0.4.23/changelog.txt b/LtnManager_0.4.23/changelog.txt deleted file mode 100644 index 3ab93a3a..00000000 --- a/LtnManager_0.4.23/changelog.txt +++ /dev/null @@ -1,372 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.4.23 -Date: 2023-05-04 - Fixes: - - Fixed zoom being set wrong. (thanks to maritz) - - Fixed bringing up the satellite view to view remote stations. (thanks to maritz) ---------------------------------------------------------------------------------------------------- -Version: 0.4.22 - Fixes: - - Fixed a typo causing a crash with the fix from 0.4.21. ---------------------------------------------------------------------------------------------------- -Version: 0.4.21 -Date: 2023-05-02 - Fixes: - - Fixed a typo in the Space Exploration optional dependency. Oops. ---------------------------------------------------------------------------------------------------- -Version: 0.4.20 -Date: 2023-05-01 - Compatibility: - - When Space Exploration is installed, and remote view unlocked you can now view a remote station on a different surface via remote view. - - If Space Exploration is not installed, attempting to view a station on a different surface will now show an error rather than crash the game. ---------------------------------------------------------------------------------------------------- -Version: 0.4.19 -Date: 2023-04-20 - Fixes: - - Fixed a crash that could occur with Noxys Multidirectional Trains due to faulty train.valid logic. ---------------------------------------------------------------------------------------------------- -Version: 0.4.18 -Date: 2023-04-20 - Fixes: - - Fixed a bug in interate_in_transit, thanks to ComradeEcho. ---------------------------------------------------------------------------------------------------- -Version: 0.4.17 -Date: 2023-02-11 - Fixes: - - Shift-clicking a station should now zoom to the surface the entity is on. - - Should no longer error when iterating over invalid trains. ---------------------------------------------------------------------------------------------------- -Version: 0.4.16 -Date: 2023-01-19 - Fixes: - - Fix for TrainAPI accessed while Train object is invalid. ---------------------------------------------------------------------------------------------------- -Version: 0.4.15 -Date: 2022-07-28 - Fixes: - - Fixes for a couple of mistakes in 0.4.14. ---------------------------------------------------------------------------------------------------- -Version: 0.4.14 -Date: 2022-07-26 - Misc: - - Ownership changed from raiguard to nihilistzsche - Fixes: - - Fixed a couple of nil errors and a bug caused when upgrading from space - exploration 0.5 to 0.6. ---------------------------------------------------------------------------------------------------- -Version: 0.4.13 -Date: 2022-06-23 - Bugfixes: - - Fixed wrong network id on 'History' and 'Alerts' tabs ---------------------------------------------------------------------------------------------------- -Version: 0.4.12 -Date: 2022-04-19 - Compatibility: - - Added a remote interface to toggle the GUI and read if it is currently open ---------------------------------------------------------------------------------------------------- -Version: 0.4.11 -Date: 2022-04-14 - Bugfixes: - - Fixed that text search was case-sensitive on the inventory screen (#178) ---------------------------------------------------------------------------------------------------- -Version: 0.4.10 -Date: 2022-03-01 - Bugfixes: - - Fixed unexpected load not showing in the alerts panel (credit to Gorfiend) (#176) - - Fixed a crash when a surface is deleted while the LTN data iterator is working (#177) ---------------------------------------------------------------------------------------------------- -Version: 0.4.9 -Date: 2022-01-23 - Features: - - Added a map setting to adjust the history length (#127) - - Re-added the dispatcher disabled warning (#122) - Bugfixes: - - Fixed a crash when an alert somehow has no search string (#169) - - Fixed a crash when a train's main locomotive is invalid when being added to history (#168) - - Fixed a crash when changing the iterations per tick setting (#173) - - Fixed that alerts would be cleared permanently when using "clear all" (#167) ---------------------------------------------------------------------------------------------------- -Version: 0.4.8 -Date: 2021-12-06 - Bugfixes: - - Fixed a crash when a processed train loses all of its locomotives and the GUI refreshes (#164) - - Fixed a crash when using Lua patterns in the search string (regression) (#165) ---------------------------------------------------------------------------------------------------- -Version: 0.4.7 -Date: 2021-11-25 - Bugfixes: - - Focus search with control + f now only works if the GUI is visible and not pinned (#161) (credit to duskwuff) - - Invalid stations are completely removed from the stations table instead of being skipped (#162) ---------------------------------------------------------------------------------------------------- -Version: 0.4.6 -Date: 2021-11-23 - Bugfixes: - - Fixed a crash when a station has a blank name (#159) ---------------------------------------------------------------------------------------------------- -Version: 0.4.5 -Date: 2021-11-20 - Features: - - Re-added support for LTN Combinator mods - Bugfixes: - - Fixed a crash when a station doesn't have a name (#155) ---------------------------------------------------------------------------------------------------- -Version: 0.4.4 -Date: 2021-11-18 - Bugfixes: - - Fixed that no trains were ever being shown in the trains tab ---------------------------------------------------------------------------------------------------- -Version: 0.4.3 -Date: 2021-11-18 - Bugfixes: - - Added missing locale for "no depots" warning (#154) - - Fixed a crash when a train doesn't have a "main locomotive" as reported by LTN (#153) ---------------------------------------------------------------------------------------------------- -Version: 0.4.2 -Date: 2021-11-17 - Bugfixes: - - Fixed a crash when upgrading from pre-0.4.0 - - Fixed the GUI width changing when clicking history shipment or alert type headers ---------------------------------------------------------------------------------------------------- -Version: 0.4.1 -Date: 2021-11-17 - Features: - - Re-added the ability to open stations on the map - Bugfixes: - - Fixed a crash when a train returns to a depot with leftover materials (#150) - - Fixed a crash when LTN passes an item that does not actually exist - - Fixed a crash when updating mods (#150) ---------------------------------------------------------------------------------------------------- -Version: 0.4.0 -Date: 2021-11-16 - Features: - - Added surface selector - - Added trains tab with minimaps for each train - - Added new search functionality - search will now cover everything on the page instead of just the name - - For example, searching "transport belt" will not only show stations with that in their name, but will show stations with transport belts in their requests / shipments - - Search also waits until you stop typing before updating the results - - Added total train, depot, station, history, and alert count badges - Changes: - - Completely rewrote the GUI from scratch - - Removed item locations from the inventory tab - - This is no longer needed because you can now search for materials on the stations or trains tabs - - Search is now universal across all tabs - - Significantly increased the overall size of the GUI - Optimizations: - - The GUI now dynamically updates its content instead of destroying and recreating it every time - ---------------------------------------------------------------------------------------------------- -Version: 0.3.11 -Date: 2021-08-08 - Changes: - - Removed the "ALPHA" label from the mod, since it is effectively complete - - Updated to flib 0.8.0 to fix a crash - - Updated status indicators to use the vanilla sprites - - Updated various GUI styles to modern standards ---------------------------------------------------------------------------------------------------- -Version: 0.3.10 -Date: 2020-11-26 - Changes: - - Updated to Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 0.3.9 -Date: 2020-10-29 - Bugfixes: - - Fixed a crash when a player would be removed between LTN data iteration and GUI updating ---------------------------------------------------------------------------------------------------- -Version: 0.3.8 -Date: 2020-10-22 - Bugfixes: - - Fixed a crash related to LTN data desyncing - - Fixed a crash when a player's translations would finish in the middle of LTN data iteration - - Fixed that clicking a requester station on the inventory screen would open the shipment's provider station instead - - Fixed the clear all alerts button clearing all alerts for the rest of time ---------------------------------------------------------------------------------------------------- -Version: 0.3.7 -Date: 2020-10-02 - Bugfixes: - - Fixed a crash when a train was put into manual mode between iteration steps ---------------------------------------------------------------------------------------------------- -Version: 0.3.6 -Date: 2020-09-26 - Bugfixes: - - Fixed crashes when adding history or alerts without all train information ---------------------------------------------------------------------------------------------------- -Version: 0.3.5 -Date: 2020-09-22 - Bugfixes: - - Fixed a crash when every train would be deleted during the first step of train processing, causing the iterator to move to the next step prematurely ---------------------------------------------------------------------------------------------------- -Version: 0.3.4 -Date: 2020-09-22 - Bugfixes: - - Fixed a crash when there are no LTN-controlled trains ---------------------------------------------------------------------------------------------------- -Version: 0.3.3 -Date: 2020-09-22 - Bugfixes: - - Fixed a crash when attempting to add a delivery to the history whose train doesn't exist in `data` yet - - Fixed a crash when attempting to add an alert whose train doesn't exist in `data` yet - - Fixed a crash with the LTN data iterator when the first player on the list wouldn't have completed translations yet ---------------------------------------------------------------------------------------------------- -Version: 0.3.2 -Date: 2020-09-19 - Bugfixes: - - Fixed a crash when a train would be invalidated during train data processing ---------------------------------------------------------------------------------------------------- -Version: 0.3.1 -Date: 2020-09-18 - Bugfixes: - - Fixed a crash when the LTN data iterator would attempt to sort for players whose translations were not finished ---------------------------------------------------------------------------------------------------- -Version: 0.3.0 -Date: 2020-09-17 - Features: - - Added more verbose error messages when the GUI is unopenable - Changes: - - Updated to Factorio 1.0 - - Refactored LTN data iteration to significantly improve performance and make it easier to add new features - - Removed alert popups in favor of LTN's new built-in notifications - Bugfixes: - - Fixed that long station names would run off the edge of the in transit view ---------------------------------------------------------------------------------------------------- -Version: 0.2.7 -Date: 2020-08-10 - Bugfixes: - - Fixed a crash when a mod would removed while translations were running, but before those translations translated all of that mod's strings - - Fixed a desync related to player.connnected being unreliable during on_configuration_changed in multiplayer - - Fixed a potential crash if a GUI handler was removed between versions ---------------------------------------------------------------------------------------------------- -Version: 0.2.6 -Date: 2020-07-25 - Changes: - - Added mod description to locale so it can be translated - Bugfixes: - - Fixed a crash upon botched migration of train IDs - - Fixed crashes related to unsanitised search inputs ---------------------------------------------------------------------------------------------------- -Version: 0.2.5 -Date: 2020-06-24 - Bugfixes: - - Fixed multiple crashes related to GUI style changes in Factorio 0.18.33 ---------------------------------------------------------------------------------------------------- -Version: 0.2.4 -Date: 2020-06-23 - Bugfixes: - - Fixed that search-related GUI handlers wouldn't be cleaned up on GUI refresh - - Fixed a crash when the GUI has become invalid, likely due to another mod tampering with it ---------------------------------------------------------------------------------------------------- -Version: 0.2.3 -Date: 2020-06-18 - Changes: - - Updated button colors. The mod now uses styles provided by FLib, with some additional smaller styles - Bugfixes: - - Fixed that the GUI would never become openable if mod version changes happened during LTN data iteration - - Fixed a crash when the mod would auto-update the GUI when it didn't exist yet - - Fixed a crash when a station had a white status light (uninitialized) ---------------------------------------------------------------------------------------------------- -Version: 0.2.2 -Date: 2020-05-28 - Bugfixes: - - Fixed a crash when a station is providing/requesting more than fifteen objects - - Fixed a crash when an LTN-controlled train has had its schedule modified ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 -Date: 2020-05-26 - Bugfixes: - - Fixed alignment of "alert" column in alerts tab - - Fixed a crash when an alert is raised - - Fixed a crash when trying to opening an LTN combinator when the LTNC mod is not enabled ---------------------------------------------------------------------------------------------------- -Version: 0.2.0 -Date: 2020-05-26 - Features: - - Added a new, unified search interface - - Added search to the stations tab - you can search by station name or filter by network ID - - Added search to the history tab - you can search by route or filter by network ID - - Shift + clicking a station name will open that station's LTN combinator, if one exists - Changes: - - Refactored mod structure to improve performance - - Switched from OpteraLib and RaiLuaLib to FLib - - History and alerts will be cleared on mod configuration change, to avoid migration issues - - The mod will only auto-update one GUI per tick, increasing performance on multiplayer servers - - Updated GUI styling for Factorio 0.18.27 - - The mod will only store the most recent 30 alerts, significantly improving performance - Bugfixes: - - Fixed a crash when a just-completed shipment is missing its start time - - Fixed a crash when updating the GUI after deconstructing a station, but before the next LTN update cycle ---------------------------------------------------------------------------------------------------- -Version: 0.1.10 -Date: 2020-04-27 - Changes: - - The entire inventory screen will refresh when you select a material, to fix stats inconsistencies - Bugfixes: - - Band-aided a crash when a material's translation doesn't exist - it will show the internal name instead. Please report any sightings of internal names! - - Fixed a crash when a train gets invalidated between LTN station and error processing ---------------------------------------------------------------------------------------------------- -Version: 0.1.9 -Date: 2020-04-19 - Bugfixes: - - Fixed LTN version dependency - - Fixed a crash when trying to open a station that no longer exists - - Fixed a crash when trying to process old LTN data after a mod configuration change ---------------------------------------------------------------------------------------------------- -Version: 0.1.8 -Date: 2020-04-16 - Changes: - - Updated to LTN API v1.13.1 - - Removed unused dictionary lookup and sorted translation tables from global, vastly speeding up autosave time - Bugfixes: - - Fixed that inventory search would never match the query to uppercase letters - - Fixed that the auto-refresh button state would always be "off" after recreating the GUI ---------------------------------------------------------------------------------------------------- -Version: 0.1.7 -Date: 2020-04-12 - Bugfixes: - - Fixed that translations wouldn't be automatically performed after joining a multiplayer game after a mod change ---------------------------------------------------------------------------------------------------- -Version: 0.1.6 -Date: 2020-04-11 - Bugfixes: - - Fixed a crash with the train status function where it would use the train's current status instead of the status stored during iteration ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 -Date: 2020-04-11 - Bugfixes: - - Fixed a crash when an alert is thrown after starting a new game - - Fixed that the mod would try to use non-color virtual signals to display the station's status ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 -Date: 2020-04-10 - Bugfixes: - - Fixed a crash when the alert_popups table becomes nil (somehow...) ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 -Date: 2020-04-10 - Features: - - Added "/LtnManager" command for various debugging purposes, use "/h LtnManager" to see possible usecases - Changes: - - Station "control signals" display shows network ID signal - Bugfixes: - - Fixed a crash when re-opening the GUI to a material that no longer exists in the network - - Fixed a crash when setting an LTN reader signal on a station - - Fixed logic for "incorrect pickup" alert, and re-enabled the alert - - Fixed station ID duplication in depots causing an extra status to be displayed - - Fixed that long train compositions were not being clipped - - Fixed that the first station in each network would display all materials for that network ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 -Date: 2020-04-10 - Features: - - Added amounts to material button tooltips - Changes: - - Completely disabled "incorrect pickup" alerts until I find a good way to account for margins of error ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: 2020-04-10 - Changes: - - Fluid shipments are now rounded down to account for floating-point imprecision ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 -Date: 2020-04-09 - Features: - - Initial alpha release diff --git a/LtnManager_0.4.23/control.lua b/LtnManager_0.4.23/control.lua deleted file mode 100644 index 6bdb951d..00000000 --- a/LtnManager_0.4.23/control.lua +++ /dev/null @@ -1,262 +0,0 @@ -local event = require("__flib__.event") -local dictionary = require("__flib__.dictionary") -local gui = require("__flib__.gui") -local migration = require("__flib__.migration") -local on_tick_n = require("__flib__.on-tick-n") - -local global_data = require("scripts.global-data") -local ltn_data = require("scripts.ltn-data") -local migrations = require("scripts.migrations") -local player_data = require("scripts.player-data") - -local main_gui = require("scripts.gui.index") - --- ----------------------------------------------------------------------------- --- COMMANDS - -commands.add_command("LtnManager", { "ltnm-message.command-help" }, function(e) - if e.parameter == "refresh-player-data" then - local player = game.get_player(e.player_index) - local player_table = global.players[e.player_index] - player_data.refresh(player, player_table) - end -end) - --- ----------------------------------------------------------------------------- --- INTERFACES - -remote.add_interface("LtnManager", { - --- Returns whether the LTN Manager GUI is open for the given player. - --- @param player_index number - --- @return boolean - is_gui_open = function(player_index) - if not player_index or type(player_index) ~= "number" then - error("Must provide a valid player_index") - end - - if global.players then - local player_table = global.players[player_index] - if player_table then - local Gui = player_table.guis.main - if Gui then - return Gui.state.visible - end - end - end - - return false - end, - --- Toggles the LTN Manager GUI for the given player, and returns its new state. - --- @param player_index number - --- @return boolean - toggle_gui = function(player_index) - if not player_index or type(player_index) ~= "number" then - error("Must provide a valid player_index") - end - - if global.players then - local player_table = global.players[player_index] - if player_table then - local Gui = player_table.guis.main - if Gui and Gui.refs.window.valid then - Gui:toggle() - return Gui.state.visible - end - end - end - - return false - end, -}) - --- ----------------------------------------------------------------------------- --- EVENT HANDLERS --- LTN data handlers are kept in `scripts.ltn-data` --- all other handlers are kept here - --- BOOTSTRAP - -event.on_init(function() - dictionary.init() - on_tick_n.init() - - global_data.init() - global_data.build_dictionaries() - - ltn_data.init() - ltn_data.connect() - - for i, player in pairs(game.players) do - player_data.init(player, i) - player_data.refresh(player, global.players[i]) - end -end) - -event.on_load(function() - dictionary.load() - ltn_data.connect() - - for _, player_table in pairs(global.players) do - if player_table.guis and player_table.guis.main then - main_gui.load(player_table.guis.main) - end - end -end) - -event.on_configuration_changed(function(e) - if migration.on_config_changed(e, migrations) then - dictionary.init() - - global_data.build_dictionaries() - ltn_data.init() - - for i, player in pairs(game.players) do - player_data.refresh(player, global.players[i]) - end - end -end) - --- GUI - -local function handle_gui_event(msg, e) - if msg.gui == "main" then - local player_table = global.players[e.player_index] - if player_table.flags.can_open_gui then - local Gui = player_table.guis.main - if Gui and Gui.refs.window.valid then - Gui:dispatch(msg, e) - end - end - end -end - -gui.hook_events(function(e) - local msg = gui.read_action(e) - if msg then - handle_gui_event(msg, e) - end -end) - -event.register("ltnm-linked-focus-search", function(e) - local Gui = global.players[e.player_index].guis.main - if Gui and Gui.state.visible and not Gui.state.pinned then - handle_gui_event({ gui = "main", action = "focus_search" }, e) - end -end) - --- PLAYER - -event.on_player_created(function(e) - local player = game.get_player(e.player_index) - player_data.init(player, e.player_index) - player_data.refresh(player, global.players[e.player_index]) -end) - -event.on_player_removed(function(e) - global.players[e.player_index] = nil -end) - -event.on_player_joined_game(function(e) - local player = game.get_player(e.player_index) - if player.connected then - dictionary.translate(player) - end -end) - -event.on_player_left_game(function(e) - dictionary.cancel_translation(e.player_index) -end) - --- SHORTCUT - -event.register({ defines.events.on_lua_shortcut, "ltnm-toggle-gui" }, function(e) - if e.input_name or (e.prototype_name == "ltnm-toggle-gui") then - local player = game.get_player(e.player_index) - local player_table = global.players[e.player_index] - local flags = player_table.flags - local Gui = main_gui.get(e.player_index) - if Gui then - if flags.can_open_gui then - Gui:toggle() - else - if Gui.state.visible then - Gui:close() - end - if flags.translations_finished then - player.print({ "ltnm-message.ltn-no-data" }) - else - player.print({ "ltnm-message.translations-not-finished" }) - end - end - end - end -end) - --- TICK - -event.on_tick(function(e) - dictionary.check_skipped() - - local tasks = on_tick_n.retrieve(e.tick) - if tasks then - for _, task in pairs(tasks) do - if task.gui then - handle_gui_event(task, { player_index = task.player_index }) - end - end - end - - local flags = global.flags - - if flags.iterating_ltn_data then - ltn_data.iterate() - end - - if flags.updating_guis then - local player_index = global.next_update_index - local player = game.get_player(player_index) - local player_table = global.players[player_index] - local player_flags = player_table.flags - if player_flags.translations_finished then - if player_flags.can_open_gui then - local Gui = main_gui.get(player_index) - if Gui and Gui.state.visible and Gui.state.auto_refresh then - Gui.state.ltn_data = global.data - Gui:update() - end - else - main_gui.build(player, player_table) - end - end - - local next_index = next(global.players, global.next_update_index) - if next_index then - global.next_update_index = next_index - else - global.next_update_index = nil - flags.updating_guis = false - end - end -end) - --- TRANSLATIONS - -event.on_string_translated(function(e) - local language_data = dictionary.process_translation(e) - if language_data then - for _, player_index in pairs(language_data.players) do - local player_table = global.players[player_index] - -- If the player already has a language, replace it and rebuild the GUI - if player_table.dictionaries and (player_table.language or "") ~= language_data.language then - player_table.language = language_data.language - player_table.dictionaries = language_data.dictionaries - -- TODO: Rebuild GUI - elseif not player_table.flags.can_open_gui then - player_table.language = language_data.language - player_table.dictionaries = language_data.dictionaries - -- Enable opening the GUI on the next LTN update cycle - player_table.flags.translations_finished = true - end - end - end -end) diff --git a/LtnManager_0.4.23/info.json b/LtnManager_0.4.23/info.json deleted file mode 100644 index 60a1b1a1..00000000 --- a/LtnManager_0.4.23/info.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "LtnManager", - "version": "0.4.23", - "title": "LTN Manager", - "author": "nihilistzsche", - "contact": "Discord: nihilistzsche#0420", - "homepage": "https://github.com/nihilistzsche/LtnManager", - "description": "A GUI for managing your Logistic Train Network.", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.42", "LogisticTrainNetwork >= 1.16.3", "flib >= 0.9.2", "? LTN_Combinator_Modernized", "? space-exploration"] -} diff --git a/LtnManager_0.4.23/scripts/gui/actions.lua b/LtnManager_0.4.23/scripts/gui/actions.lua deleted file mode 100644 index 32d4a8df..00000000 --- a/LtnManager_0.4.23/scripts/gui/actions.lua +++ /dev/null @@ -1,211 +0,0 @@ -local train_util = require("__flib__.train") -local on_tick_n = require("__flib__.on-tick-n") - -local constants = require("constants") - -local util = require("scripts.util") - -local actions = {} - -local function toggle_fab(elem, sprite, state) - if state then - elem.style = "flib_selected_frame_action_button" - elem.sprite = sprite .. "_black" - else - elem.style = "frame_action_button" - elem.sprite = sprite .. "_white" - end -end - -function actions.close(Gui) Gui:close() end - -function actions.recenter(Gui) Gui.refs.window.force_auto_center() end - -function actions.toggle_auto_refresh(Gui) - Gui.state.auto_refresh = not Gui.state.auto_refresh - toggle_fab(Gui.refs.titlebar.refresh_button, "ltnm_refresh", Gui.state.auto_refresh) -end - -function actions.toggle_pinned(Gui) - Gui.state.pinned = not Gui.state.pinned - toggle_fab(Gui.refs.titlebar.pin_button, "ltnm_pin", Gui.state.pinned) - - if Gui.state.pinned then - Gui.state.pinning = true - Gui.player.opened = nil - Gui.state.pinning = false - else - Gui.player.opened = Gui.refs.window - Gui.refs.window.force_auto_center() - end -end - -function actions.update_text_search_query(Gui, _, e) - local query = e.text - -- Input sanitization - for pattern, replacement in pairs(constants.input_sanitizers) do - query = string.gsub(query, pattern, replacement) - end - Gui.state.search_query = query - - if Gui.state.search_job then on_tick_n.remove(Gui.state.search_job) end - - if #query == 0 then - Gui:schedule_update() - else - Gui.state.search_job = - on_tick_n.add(game.tick + 30, { gui = "main", action = "update", player_index = Gui.player.index }) - end -end - -function actions.update_network_id_query(Gui) - Gui.state.network_id = tonumber(Gui.refs.toolbar.network_id_field.text) or -1 - Gui:schedule_update() -end - -function actions.open_train_gui(Gui, msg) - local train_id = msg.train_id - local train_data = Gui.state.ltn_data.trains[train_id] - - if not train_data or not train_data.train.valid then - util.error_flying_text(Gui.player, { "message.ltnm-error-train-is-invalid" }) - return - end - - train_util.open_gui(Gui.player.index, train_data.train) -end - -function actions.open_station_gui(Gui, msg, e) - local station_id = msg.station_id - local station_data = Gui.state.ltn_data.stations[station_id] - - if not station_data or not station_data.entity.valid then - util.error_flying_text(Gui.player, { "message.ltnm-error-station-is-invalid" }) - return - end - - --- @type LuaPlayer - local player = Gui.player - - if e.shift then - if station_data.surface_index ~= player.surface_index then - if - remote.interfaces["space-exploration"] - and remote.call("space-exploration", "remote_view_is_unlocked", { player = player }) - then - local zone = remote.call("space-exploration", "get_zone_from_surface_index", - { surface_index = station_data.surface_index }) - if zone then - remote.call("space-exploration", "remote_view_start", { - player = player, - zone_name = zone.name, - position = station_data.entity.position, - location_name = station_data.name, - freeze_history = true, - }) - else - util.error_flying_text(player, { "message.ltnm-error-station-on-different-surface-unknown-zone" }) - return - end - else - util.error_flying_text(player, { "message.ltnm-error-station-on-different-surface" }) - return - end - else - player.zoom_to_world(station_data.entity.position, 1, station_data.entity) - end - - rendering.draw_circle({ - color = constants.colors.red.tbl, - target = station_data.entity.position, - surface = station_data.entity.surface, - radius = 0.5, - filled = false, - width = 5, - time_to_live = 60 * 3, - players = { player }, - }) - - if not Gui.state.pinned then Gui:close() end - elseif e.control and remote.interfaces["ltn-combinator"] then - if - not remote.call("ltn-combinator", "open_ltn_combinator", e.player_index, station_data.lamp_control, true) - then - util.error_flying_text(player, { "message.ltnm-error-ltn-combinator-not-found" }) - end - else - player.opened = station_data.entity - end -end - -function actions.toggle_sort(Gui, msg, e) - local tab = msg.tab - local column = msg.column - - local sorts = Gui.state.sorts[tab] - local active_column = sorts._active - if active_column == column then - sorts[column] = e.element.state - else - sorts._active = column - e.element.state = sorts[column] - - local widths = Gui.widths[tab] - - local old_checkbox = Gui.refs[tab].toolbar[active_column .. "_checkbox"] - old_checkbox.style = "ltnm_sort_checkbox" - if widths[active_column .. "_checkbox_stretchy"] then - old_checkbox.style.horizontally_stretchable = true - else - old_checkbox.style.width = widths[active_column] - end - e.element.style = "ltnm_selected_sort_checkbox" - if widths[column .. "_checkbox_stretchy"] then - e.element.style.horizontally_stretchable = true - else - e.element.style.width = widths[column] - end - end - - Gui:schedule_update() -end - -function actions.update(Gui) Gui:schedule_update() end - -function actions.change_tab(Gui, msg) - Gui.state.active_tab = msg.tab - Gui:schedule_update() -end - -function actions.change_surface(Gui, _, e) - local selected_index = e.element.selected_index - local selected_surface_index = Gui.state.ltn_data.surfaces.selected_to_index[selected_index] - if selected_surface_index then - Gui.state.surface = selected_surface_index - Gui:schedule_update() - end -end - -function actions.clear_history(Gui) - global.flags.deleted_history = true - Gui:schedule_update() -end - -function actions.delete_alert(Gui, msg) - global.active_data.alerts_to_delete[msg.alert_id] = true - Gui:schedule_update() -end - -function actions.delete_all_alerts(Gui) - global.flags.deleted_all_alerts = true - Gui:schedule_update() -end - -function actions.focus_search(Gui) - if not Gui.pinned then - Gui.refs.toolbar.text_search_field.select_all() - Gui.refs.toolbar.text_search_field.focus() - end -end - -return actions diff --git a/LtnManager_0.4.23/scripts/gui/inventory.lua b/LtnManager_0.4.23/scripts/gui/inventory.lua deleted file mode 100644 index f882a03f..00000000 --- a/LtnManager_0.4.23/scripts/gui/inventory.lua +++ /dev/null @@ -1,87 +0,0 @@ -local misc = require("__flib__.misc") - -local templates = require("templates") - -local inventory_tab = {} - -function inventory_tab.build() - return { - tab = { - type = "tab", - caption = { "gui.ltnm-inventory" }, - ref = { "inventory", "tab" }, - actions = { - on_click = { gui = "main", action = "change_tab", tab = "inventory" }, - }, - }, - content = { - type = "flow", - style_mods = { horizontal_spacing = 12 }, - direction = "horizontal", - ref = { "inventory", "content_frame" }, - templates.inventory_slot_table("provided", 12), - templates.inventory_slot_table("in_transit", 8), - templates.inventory_slot_table("requested", 6), - }, - } -end - -local function update_table(self, name, color) - local translations = self.player_table.dictionaries.materials - - local state = self.state - local refs = self.refs.inventory - - local search_query = state.search_query - local search_network_id = state.network_id - local search_surface = state.surface - - local ltn_inventory = state.ltn_data.inventory[name][search_surface] - - local i = 0 - - local table = refs[name].table - local children = table.children - - for name, count_by_network_id in pairs(ltn_inventory or {}) do - if - bit32.btest(count_by_network_id.combined_id, search_network_id) - and string.find(string.lower(translations[name]), string.lower(search_query)) - then - local running_count = 0 - for network_id, count in pairs(count_by_network_id) do - if network_id ~= "combined_id" and bit32.btest(network_id, search_network_id) then - running_count = running_count + count - end - end - - if running_count > 0 then - i = i + 1 - local button = children[i] - if not button then - button = table.add({ type = "sprite-button", style = "flib_slot_button_" .. color, enabled = false }) - end - button.sprite = string.gsub(name, ",", "/") - button.number = running_count - button.tooltip = "[img=" - .. string.gsub(name, ",", "/") - .. "] [font=default-semibold]" - .. translations[name] - .. "[/font]\n" - .. misc.delineate_number(running_count) - end - end - end - - for j = i + 1, #children do - children[j].destroy() - end -end - -function inventory_tab.update(self) - update_table(self, "provided", "green") - update_table(self, "in_transit", "blue") - update_table(self, "requested", "red") -end - -return inventory_tab diff --git a/LtnManager_0.4.25.zip b/LtnManager_0.4.25.zip deleted file mode 100644 index 95768961..00000000 Binary files a/LtnManager_0.4.25.zip and /dev/null differ diff --git a/MIRV_1.0.1/control.lua b/MIRV/control.lua similarity index 100% rename from MIRV_1.0.1/control.lua rename to MIRV/control.lua diff --git a/MIRV_1.0.1/data.lua b/MIRV/data.lua similarity index 100% rename from MIRV_1.0.1/data.lua rename to MIRV/data.lua diff --git a/MIRV_1.0.1/info.json b/MIRV/info.json similarity index 100% rename from MIRV_1.0.1/info.json rename to MIRV/info.json diff --git a/MIRV_1.0.1/launch-sound.ogg b/MIRV/launch-sound.ogg similarity index 100% rename from MIRV_1.0.1/launch-sound.ogg rename to MIRV/launch-sound.ogg diff --git a/MIRV_1.0.1/locale/en/mirv.cfg b/MIRV/locale/en/mirv.cfg similarity index 100% rename from MIRV_1.0.1/locale/en/mirv.cfg rename to MIRV/locale/en/mirv.cfg diff --git a/MIRV_1.0.1/locale/ru/mirv.cfg b/MIRV/locale/ru/mirv.cfg similarity index 100% rename from MIRV_1.0.1/locale/ru/mirv.cfg rename to MIRV/locale/ru/mirv.cfg diff --git a/MIRV_1.0.1/mirv-target.png b/MIRV/mirv-target.png similarity index 100% rename from MIRV_1.0.1/mirv-target.png rename to MIRV/mirv-target.png diff --git a/MIRV_1.0.1/mirv-targeting-remote.png b/MIRV/mirv-targeting-remote.png similarity index 100% rename from MIRV_1.0.1/mirv-targeting-remote.png rename to MIRV/mirv-targeting-remote.png diff --git a/MIRV_1.0.1/mirv-technology.png b/MIRV/mirv-technology.png similarity index 100% rename from MIRV_1.0.1/mirv-technology.png rename to MIRV/mirv-technology.png diff --git a/MIRV_1.0.1/mirv_anim.png b/MIRV/mirv_anim.png similarity index 100% rename from MIRV_1.0.1/mirv_anim.png rename to MIRV/mirv_anim.png diff --git a/MIRV_1.0.1/mirv_item.png b/MIRV/mirv_item.png similarity index 100% rename from MIRV_1.0.1/mirv_item.png rename to MIRV/mirv_item.png diff --git a/MIRV_1.0.1/mirv_projectile.png b/MIRV/mirv_projectile.png similarity index 100% rename from MIRV_1.0.1/mirv_projectile.png rename to MIRV/mirv_projectile.png diff --git a/MIRV_1.0.1/mirv_rocket.png b/MIRV/mirv_rocket.png similarity index 100% rename from MIRV_1.0.1/mirv_rocket.png rename to MIRV/mirv_rocket.png diff --git a/MIRV_1.0.1/mirv_static.png b/MIRV/mirv_static.png similarity index 100% rename from MIRV_1.0.1/mirv_static.png rename to MIRV/mirv_static.png diff --git a/MIRV_1.0.1/mirv_template.png b/MIRV/mirv_template.png similarity index 100% rename from MIRV_1.0.1/mirv_template.png rename to MIRV/mirv_template.png diff --git a/MIRV_1.0.1/settings.lua b/MIRV/settings.lua similarity index 100% rename from MIRV_1.0.1/settings.lua rename to MIRV/settings.lua diff --git a/MIRV_1.0.1/tf_util/empty-sound.ogg b/MIRV/tf_util/empty-sound.ogg similarity index 100% rename from MIRV_1.0.1/tf_util/empty-sound.ogg rename to MIRV/tf_util/empty-sound.ogg diff --git a/MIRV_1.0.1/tf_util/empty-sprite.png b/MIRV/tf_util/empty-sprite.png similarity index 100% rename from MIRV_1.0.1/tf_util/empty-sprite.png rename to MIRV/tf_util/empty-sprite.png diff --git a/MIRV_1.0.1/tf_util/prototype_util.lua b/MIRV/tf_util/prototype_util.lua similarity index 100% rename from MIRV_1.0.1/tf_util/prototype_util.lua rename to MIRV/tf_util/prototype_util.lua diff --git a/MIRV_1.0.1/tf_util/tf_fire_util.lua b/MIRV/tf_util/tf_fire_util.lua similarity index 100% rename from MIRV_1.0.1/tf_util/tf_fire_util.lua rename to MIRV/tf_util/tf_fire_util.lua diff --git a/MIRV_1.0.1/tf_util/tf_util.lua b/MIRV/tf_util/tf_util.lua similarity index 100% rename from MIRV_1.0.1/tf_util/tf_util.lua rename to MIRV/tf_util/tf_util.lua diff --git a/MIRV_1.0.1/thumbnail.png b/MIRV/thumbnail.png similarity index 100% rename from MIRV_1.0.1/thumbnail.png rename to MIRV/thumbnail.png diff --git a/MaxRateCalculator_3.4.48/Document2.txt b/MaxRateCalculator_3.4.48/Document2.txt deleted file mode 100644 index 3d9dfec0..00000000 --- a/MaxRateCalculator_3.4.48/Document2.txt +++ /dev/null @@ -1 +0,0 @@ -https://www.youtube.com/watch?v=QNnoBr_Gpxg \ No newline at end of file diff --git a/MaxRateCalculator_3.4.48/MaxRateCalculator_0.0.1.tws b/MaxRateCalculator_3.4.48/MaxRateCalculator_0.0.1.tws deleted file mode 100644 index 4a3e0646..00000000 Binary files a/MaxRateCalculator_3.4.48/MaxRateCalculator_0.0.1.tws and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/MaxRateCalculator_3.2.31.tws b/MaxRateCalculator_3.4.48/MaxRateCalculator_3.2.31.tws deleted file mode 100644 index 3c701b4a..00000000 Binary files a/MaxRateCalculator_3.4.48/MaxRateCalculator_3.2.31.tws and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/Notes 1.0.5.txt b/MaxRateCalculator_3.4.48/Notes 1.0.5.txt deleted file mode 100644 index 1025fb60..00000000 --- a/MaxRateCalculator_3.4.48/Notes 1.0.5.txt +++ /dev/null @@ -1,19 +0,0 @@ -Version 1.0.5 of the Max Rate Calculator mod for Factorio introduces a dropdown list with which the user can select the units the input and output rates should be displayed in, including: - - items per second - - items per minute - - fully compressed transport (yellow) belts - - fast transport (red) belts - - express transport (blue) belts. - -(Note that for inputs and outputs that are fluids, the quantities displayed for compressed belts don't make a lot of sense. In the future, I'll either display nothing for fluids, or do it in terms of full pipes.) - - -It also adds a couple of columns for "net" values for items which are both input and outputs: - -- Items per machine (in the selected rate) -- Number of extra or needed machines for a particular item, assuming it's moduled and beaconed the same - -I've also added a close button (though you can still click most anywhere in the window to close it), and tooltips for some of the information. - -A note about smelters - if there is nothing to smelt in the smelter, I don't have a recipe, so I can't display rates for it. - diff --git a/MaxRateCalculator_3.4.48/README.md b/MaxRateCalculator_3.4.48/README.md deleted file mode 100644 index 0c5574d5..00000000 --- a/MaxRateCalculator_3.4.48/README.md +++ /dev/null @@ -1,72 +0,0 @@ -Max Rate Calculator mod for Factorio -============================== - - -Provides a selection tool (default hotkey is ctrl-n), which when used to select a set of machines, calculates the maximum -possible rate of items consumed and produced by those machines. These rates are displayed in a GUI window on the left -side of the Factorio window, in items per second, and items per minute. - -# Changelog - for version # > 3.0, see changelog.txt -### 0.0.1 -* Initial release - only handles assemblers, chemical plants, refineries, centrifuges. - -### 0.0.2 -* Fixed default hotkey (CONTROL-N not CTRL-N). Fixed en locale strings - -### 0.0.3 -* Fixed calculation bug when mixed set of modules in an assembler - -### 0.1.4 -* Calculates production/consumption for furnaces (but not fuel) -* Beacon effectivity no longer hardcoded - -### 1.0.5 -* Dropdown list lets user select rate units -* Rate per machine and surplus/deficit number of machines calculated - -### 1.0.6 -* Fix red belt calculation -* Add warning if assemblers/furnaces have no recipe - -### 1.1.7 -* Adds calculations in terms of inserters -* Tooltip on item icons shows num of machines using/producing the item in the selection - -### 1.2.8 -* Vertical scroll bars if too many items -* Don't show rates of fluids on belts, in inserters -* Added rate calculations for train wagons per minute and per hour -* Items are sorted alphabetically - -### 1.2.9 -* Use LuaEntityPrototype::fluid_capacity for fluid-wagon (surfaced in 0.15.32) rather than hardcoded 75000 -* Use beacon.prototype.distribution_effectivity rather than hardcoded 0.5 (also from 0.15.32) - -### 1.2.10 -* Fixed to work with modded versions of beacons, such as Creative Mode's Super Beacon. -* Speed cost won't go lower than 20% - -### 1.2.11 -* Fixed bug with new games getting fatal error when hotkey pressed for first time - -### 2.0.12 -* Added in-game four function calculator, accessed via hotkey or toggle button on Max Rate Calculator window -* Values in MRC window, when clicked on, appear in the calculator - - -### 2.0.13 -* Added missing locale string for calc hotkey - - -### 2.0.14 -* Fixed bug with text entry in other mods crashing - -### 2.0.15 -* Fixed bug recipes (like uranium processing) that have % chance causing crash -* Added fix for possible uninitalized variable (marc_selected_units) crash reported in mod portal. Could not reproduce this, but added defensive code. - -### 2.0.18 -Fix for crash on player death when using selection tool -Calculates rates for mining drills and pumpjacks (however, not sulfuric acid consumption for uranium mining) - - diff --git a/MaxRateCalculator_3.4.48/calculator.lua b/MaxRateCalculator_3.4.48/calculator.lua deleted file mode 100644 index b9dc01c7..00000000 --- a/MaxRateCalculator_3.4.48/calculator.lua +++ /dev/null @@ -1,456 +0,0 @@ --- ---------------------------------------------------------------- --- MaxRateCalculator/calculator.lua --- ---------------------------------------------------------------- - --- TODO: keyboard +-*/= --- TODO: paste from marc_ - - -local function init_calculator(player) - global.marcalc_context[player.index] = {} - global.marcalc_context[player.index].current_value = 0 - global.marcalc_context[player.index].in_data_entry = false - global.marcalc_context[player.index].in_left_of_decimal = false - global.marcalc_context[player.index].decimal_place = 10 - global.marcalc_context[player.index].operand = 0 - global.marcalc_context[player.index].current_func = "" - -end - --- ---------------------------------------------------------------- - -local function get_gui_root(player) - return player.gui.screen -end - --- ---------------------------------------------------------------- - -local function init_context(player) - global.marcalc_context = global.marcalc_context or {} - - if global.marcalc_context[player.index] == nil - then - init_calculator(player) - end -end - --- ---------------------------------------------------------------- - -local function destroy_calculator(player) - local root = get_gui_root(player) - if root.marcalc - then - root.marcalc.destroy() - end - -end - - --- ---------------------------------------------------------------- - - -local function update_display(player,msg) - local root = get_gui_root(player) - if msg == nil or msg == "" - then - -- bug repored by EugeneBeetle indicated we somehow got in here with current_value = nil - if global.marcalc_context[player.index].current_value == nil - then - debug_print("update_display. cv is nil???") - return - end - debug_print("update_display cv is " .. global.marcalc_context[player.index].current_value) - - if global.marcalc_context[player.index].in_left_of_decimal - and global.marcalc_context[player.index].decimal_place == 10 - then - debug_print("update_display() add the dot") - root.marcalc.marcalc_display.caption = tostring(global.marcalc_context[player.index].current_value) .. "." - else - root.marcalc.marcalc_display.caption = global.marcalc_context[player.index].current_value - end - else - root.marcalc.marcalc_display.caption = msg - end -end - --- ---------------------------------------------------------------- - -function show_calculator(player) - local root = get_gui_root(player) - destroy_calculator(player) - - init_context(player) - - - marcalc = root.add({type = "frame", name = "marcalc", direction = "vertical", caption="Calc"}) - marcalc_display = marcalc.add({type = "textfield", name = "marcalc_display", caption = global.marcalc_context[player.index].current_value }) - - marcalc_mem = marcalc.add({type = "flow", name = "marcalc_mem", direction = "horizontal"}) - marcalc_mem.add({type = "button", style="marcalc_button_style", caption = "ms", name="marcalc_button_MS"}) - marcalc_mem.add({type = "button", style="marcalc_button_style", caption = "m+", name="marcalc_button_M+"}) - marcalc_mem.add({type = "button", style="marcalc_button_style", caption = "m-", name="marcalc_button_M-"}) - marcalc_mem.add({type = "button", style="marcalc_button_style", caption = "mr", name="marcalc_button_MR"}) - - marcalc_row1 = marcalc.add({type = "flow", name = "marcalc_row1", direction = "horizontal"}) - marcalc_row1.add({type = "button", style="marcalc_button_style", caption = "CE", name="marcalc_button_CE"}) - marcalc_row1.add({type = "button", style="marcalc_button_style", caption = "C", name="marcalc_button_C"}) - marcalc_row1.add({type = "button", style="marcalc_button_style", caption = "BS", name="marcalc_button_BS"}) - marcalc_row1.add({type = "button", style="marcalc_button_style", caption = "/", name="marcalc_button_DIV"}) - - marcalc_row2 = marcalc.add({type = "flow", name = "marcalc_row2", direction = "horizontal"}) - marcalc_row2.add({type = "button", style="marcalc_button_style", caption = "7", name="marcalc_button_7"}) - marcalc_row2.add({type = "button", style="marcalc_button_style", caption = "8", name="marcalc_button_8"}) - marcalc_row2.add({type = "button", style="marcalc_button_style", caption = "9", name="marcalc_button_9"}) - marcalc_row2.add({type = "button", style="marcalc_button_style", caption = "*", name="marcalc_button_MUL"}) - - marcalc_row3 = marcalc.add({type = "flow", name = "marcalc_row3", direction = "horizontal"}) - marcalc_row3.add({type = "button", style="marcalc_button_style", caption = "4", name="marcalc_button_4"}) - marcalc_row3.add({type = "button", style="marcalc_button_style", caption = "5", name="marcalc_button_5"}) - marcalc_row3.add({type = "button", style="marcalc_button_style", caption = "6", name="marcalc_button_6"}) - marcalc_row3.add({type = "button", style="marcalc_button_style", caption = "-", name="marcalc_button_SUB"}) - - marcalc_row4 = marcalc.add({type = "flow", name = "marcalc_row4", direction = "horizontal"}) - marcalc_row4.add({type = "button", style="marcalc_button_style", caption = "1", name="marcalc_button_1"}) - marcalc_row4.add({type = "button", style="marcalc_button_style", caption = "2", name="marcalc_button_2"}) - marcalc_row4.add({type = "button", style="marcalc_button_style", caption = "3", name="marcalc_button_3"}) - marcalc_row4.add({type = "button", style="marcalc_button_style", caption = "+", name="marcalc_button_ADD"}) - - marcalc_row5 = marcalc.add({type = "flow", name = "marcalc_row5", direction = "horizontal"}) - marcalc_row5.add({type = "button", style="marcalc_button_style", caption = "+-", name="marcalc_button_CHS"}) - marcalc_row5.add({type = "button", style="marcalc_button_style", caption = "0", name="marcalc_button_0"}) - marcalc_row5.add({type = "button", style="marcalc_button_style", caption = ".", name="marcalc_button_DEC"}) - marcalc_row5.add({type = "button", style="marcalc_button_style", caption = "=", name="marcalc_button_EQU"}) - - update_display(player) - -end - --- ---------------------------------------------------------------- - - - -function hide_calculator(player) - init_context(player) - destroy_calculator(player) -end - --- ---------------------------------------------------------------- - - -function toggle_calculator(player) - init_context(player) - local root = get_gui_root(player) - if root and root.marcalc - then - hide_calculator(player) - else - show_calculator(player) - end -end - --- ---------------------------------------------------------------- - -local function process_number_key(player, num) - debug_print("process_number_key(" .. num .. ")") - - if global.marcalc_context[player.index].in_left_of_decimal - then - val = num / global.marcalc_context[player.index].decimal_place - if global.marcalc_context[player.index].in_data_entry - then - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].current_value + val - else - global.marcalc_context[player.index].current_value = val - end - global.marcalc_context[player.index].decimal_place = global.marcalc_context[player.index].decimal_place * 10 - else - if global.marcalc_context[player.index].in_data_entry - then - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].current_value * 10 + num - else - global.marcalc_context[player.index].current_value = tonumber(num) - end - end - global.marcalc_context[player.index].in_data_entry = true - update_display(player) -end - --- ---------------------------------------------------------------- - -local function process_decimal_key(player, key) - debug_print("process_decimal_key(" .. key .. ")") - if global.marcalc_context[player.index].in_left_of_decimal - then - return - end - - global.marcalc_context[player.index].in_left_of_decimal = true - global.marcalc_context[player.index].decimal_place = 10 - update_display(player) -end - --- ---------------------------------------------------------------- - -local function process_change_sign_key(player, key) - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].current_value * -1 - update_display(player) -end - --- ---------------------------------------------------------------- - -local function process_equal_key(player, key) - debug_print("process_equal_key(" .. key .. ") global.marcalc_context[player.index].current_func is " .. global.marcalc_context[player.index].current_func) - - global.marcalc_context[player.index].in_data_entry = false - doing_decimal = false - - if global.marcalc_context[player.index].current_func == "ADD" - then - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].operand + global.marcalc_context[player.index].current_value - elseif global.marcalc_context[player.index].current_func == "SUB" - then - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].operand - global.marcalc_context[player.index].current_value - elseif global.marcalc_context[player.index].current_func == "MUL" - then - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].operand * global.marcalc_context[player.index].current_value - elseif global.marcalc_context[player.index].current_func == "DIV" - then - debug_print("process_equal_key global.marcalc_context[player.index].current_value " .. global.marcalc_context[player.index].current_value) - - if global.marcalc_context[player.index].current_value == 0 - then - debug_print("process_equal_key DIVIDE BY ZERO") - update_display(player, {"marcalc_divide_by_zero"}) -- TODO: localize - return - end - global.marcalc_context[player.index].current_value = global.marcalc_context[player.index].operand / global.marcalc_context[player.index].current_value - - end - global.marcalc_context[player.index].current_func = "" - global.marcalc_context[player.index].in_data_entry = false - update_display(player) - -end - - --- ---------------------------------------------------------------- - -local function process_func_key(player, key) - debug_print("process_func_key(" .. key .. ") player ix " .. player.index) - - if global.marcalc_context[player.index].current_func ~= "" - then - process_equal_key(player, key) - end - - global.marcalc_context[player.index].current_func = key - global.marcalc_context[player.index].operand = global.marcalc_context[player.index].current_value - global.marcalc_context[player.index].in_data_entry = false - global.marcalc_context[player.index].in_left_of_decimal = false -end - - --- ---------------------------------------------------------------- - -local function process_mem_key(player, key) - debug_print("process_mem_key(" .. key .. ")") - if calculator_memory == nil - then - debug_print("process_mem_key(" .. key .. ") calculator_memory was nil") - calculator_memory = 0 - end - if key == "MS" - then - calculator_memory = global.marcalc_context[player.index].current_value - elseif key == "M+" - then - calculator_memory = calculator_memory + global.marcalc_context[player.index].current_value - elseif key == "M-" - then - calculator_memory = calculator_memory - global.marcalc_context[player.index].current_value - else - global.marcalc_context[player.index].current_value = calculator_memory - end - global.marcalc_context[player.index].in_data_entry = false - update_display(player) -end - --- ---------------------------------------------------------------- - -local function process_edit_key(player, key) - debug_print("process_edit_key(" .. key .. ")") - if key == "CE" - then - global.marcalc_context[player.index].current_value = 0 - elseif key == "C" - then - init_calculator(player) - end - global.marcalc_context[player.index].in_data_entry = false - update_display(player) - -end - --- ---------------------------------------------------------------- - -local function set_current_value_to_text(player, text) - local val = tonumber(text) - if val ~= nil - then - global.marcalc_context[player.index].current_value = val - debug_print("set_current_value_to_text got value " .. text) - local plain_text = true - local dot = string.find(text, '.', 1, plain_text) - if dot ~= nil - then - local number_decimal_places = #text - dot - global.marcalc_context[player.index].decimal_place = 10 ^ (number_decimal_places + 1) - global.marcalc_context[player.index].in_left_of_decimal = true - debug_print("#text " .. #text .. " number_global.marcalc_context[player.index].decimal_places " .. - number_decimal_places .. " global.marcalc_context[player.index].decimal_place " .. global.marcalc_context[player.index].decimal_place .. " dot " .. dot .. " in_lod " .. boolstr(global.marcalc_context[player.index].in_left_of_decimal)) - else - debug_print("set_current_value_to_text no dot. set lod to false" ) - global.marcalc_context[player.index].in_left_of_decimal = false - end - else - debug_print("got junk " .. text) - end -end - --- ---------------------------------------------------------------- - -local function process_backspace_key(player, key) - local root = get_gui_root(player) - debug_print("process_backspace_key(" .. key .. ")") - local old_text = root.marcalc.marcalc_display.caption - local old_len = #old_text - text = string.sub(old_text, 1, old_len -1) - debug_print("process_backspace_key(" .. key .. ") old_text " .. old_text .. " old_len " .. old_len .. " text " .. text .. - " in_decimal " .. boolstr(global.marcalc_context[player.index].in_left_of_decimal) .. " global.marcalc_context[player.index].decimal_place " .. global.marcalc_context[player.index].decimal_place) - if #text == 0 - then - global.marcalc_context[player.index].current_value = 0 - else - set_current_value_to_text(player, text) - end - update_display(player) -end --- ---------------------------------------------------------------- - -local button_dispatch = -{ - ["1"] = process_number_key, - ["2"] = process_number_key, - ["3"] = process_number_key, - ["4"] = process_number_key, - ["5"] = process_number_key, - ["6"] = process_number_key, - ["7"] = process_number_key, - ["8"] = process_number_key, - ["9"] = process_number_key, - ["0"] = process_number_key, - ["MS"] = process_mem_key, - ["M+"] = process_mem_key, - ["M-"] = process_mem_key, - ["MR"] = process_mem_key, - ["DIV"] = process_func_key, - ["MUL"] = process_func_key, - ["ADD"] = process_func_key, - ["SUB"] = process_func_key, - ["EQU"] = process_equal_key, - ["CHS"] = process_change_sign_key, - ["CE"] = process_edit_key, - ["C"] = process_edit_key, - ["BS"] = process_backspace_key, - ["DEC"] = process_decimal_key -} - -function handle_marcalc_click(event_name, player) - - -- debug_print("handle_marcalc_click()") - local button_prefix = "marcalc_button_" - local prefix_len = string.len(button_prefix) - local s = string.sub( event_name, 1, prefix_len) - - if s == button_prefix - then - button = string.sub(event_name, prefix_len + 1 ) - -- debug_print("handle_marcalc_click button " .. button) - local dispatch_func = button_dispatch[button] - if dispatch_func then - dispatch_func(player, button) - else - debug_print("handle_marcalc_click no func") - end - end -end - - --- ---------------------------------------------------------------- - -function marcalc_intercept_func_key(player, text) - local was_not_func_key = true - local len = string.len(text) - local last = string.sub(text,len,len) - if last == "/" - then - process_func_key(player, "DIV") - was_not_func_key = false - elseif last == "=" - then - process_func_key(player, "EQU") - was_not_func_key = false - end - - return was_not_func_key -end - -function marcalc_on_gui_text_changed(event) - local player_index = event.player_index - local player = game.players[event.player_index] - local root = get_gui_root(player) - local element = event.element - if element.name ~= "marcalc_display" or root.marcalc == nil - then - return - end - local text = root.marcalc.marcalc_display.text - - debug_print("marcalc_on_gui_text_changed element.name " .. element.name .. " text " .. text .. " caption " .. root.marcalc.marcalc_display.caption) - root.marcalc.marcalc_display.caption = text - - - if element.name == "marcalc_display" - then - set_current_value_to_text(player, text) - global.marcalc_context[player.index].in_data_entry = true - - debug_print("call update_display, cv " .. global.marcalc_context[player.index].current_value .. " decimal_place " .. global.marcalc_context[player.index].decimal_place .. " in_lod " .. boolstr(global.marcalc_context[player.index].in_left_of_decimal)) - update_display(player) - - end - -end - --- ---------------------------------------------------------------- - -local function marcalc_toggle_key(event) - - local player = game.players[event.player_index] - toggle_calculator(player) -end - --- ---------------------------------------------------------------- - -function marcalc_clickable_value_clicked(player, val) -- a value in the main Max Rate Calculator has been clicked on. Paste into current value - local root = get_gui_root(player) - if root ~=nil and root.marcalc ~= nil - then - local text = tostring(val) - set_current_value_to_text(player, text) - update_display(player) - end -end - -script.on_event( "marcalc_toggle", marcalc_toggle_key ) diff --git a/MaxRateCalculator_3.4.48/changelog.txt b/MaxRateCalculator_3.4.48/changelog.txt deleted file mode 100644 index a3fdf0db..00000000 --- a/MaxRateCalculator_3.4.48/changelog.txt +++ /dev/null @@ -1,105 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 3.4.48 -Date: 2020-11-26 - Changes: - - Factorio 1.1.0 compatibility - - Boiler rates now correct for vanilla (but wrong for Krastorio2 :( ) - ---------------------------------------------------------------------------------------------------- -Version: 3.4.47 -Date: 2020-10-11 - Changes: - - Fixed crash with Space Exploration mod when creating tool - ---------------------------------------------------------------------------------------------------- -Version: 3.4.46 - Changes: - - Fixes mostly for Kras2 - ---------------------------------------------------------------------------------------------------- -Version: 3.4.39 - Changes: - - Mining/pumpjack calculation improvements - ---------------------------------------------------------------------------------------------------- -Version: 3.4.38 - Changes: - - Defensive coding against global debug not a lua table - ---------------------------------------------------------------------------------------------------- -Version: 3.4.37 - Changes: - - Mining and pumpjack calculations - ---------------------------------------------------------------------------------------------------- -Version: 3.4.36 - Changes: - - Belts and their speeds pulled from game tables rather than being hardcoded, now supports mods with faster belts - ---------------------------------------------------------------------------------------------------- -Version: 3.4.34 - Changes: - - Fixed issue with Factorio 0.18.22 and hotkeys prototypes - ---------------------------------------------------------------------------------------------------- -Version: 3.4.33 - Changes: - - Fixed issue with small beacons not seen next to large assemblers (Krastorio 2) - - Honor allowed_effects consumption flag or not - - Don't allow productivity to drop below zero - ---------------------------------------------------------------------------------------------------- -Version: 3.4.32 - Changes: - - Use catalyst_amount for prod calcs. Fixes issue with kovarex recipe - ---------------------------------------------------------------------------------------------------- -Version: 3.4.31 - Changes: - - Factorio 0.18 support - ---------------------------------------------------------------------------------------------------- -Version: 3.2.29 - Changes: - - Save window location - ---------------------------------------------------------------------------------------------------- -Version: 3.2.28 - Changes: - - Fix no recipe crash - ---------------------------------------------------------------------------------------------------- -Version: 3.2.27 - Changes: - - Use most recent recipe if furnace has no current recipe - ---------------------------------------------------------------------------------------------------- -Version: 3.2.25 - Changes: - - Window is moveable - ---------------------------------------------------------------------------------------------------- -Version: 3.1.24 - Changes: - - Use only-in-cursor flag to keep selection tool out of inventory. Attempt at thumbnail. - ---------------------------------------------------------------------------------------------------- -Version: 3.1.23 - Changes: - - Fix old-style probablistic calculations (Bob's Greenhouse) - ---------------------------------------------------------------------------------------------------- -Version: 3.1.22 - Changes: - - Fix probablistic calculations (uranium processing) - ---------------------------------------------------------------------------------------------------- -Version: 3.1.21 - Changes: - - Max Rate Calculator selection tool and 4 function calculator available on the quickbar - ---------------------------------------------------------------------------------------------------- -Version: 3.0.20 - Changes: - - 0.17 support. Removed mining calculations. Needs general rate re-testing - diff --git a/MaxRateCalculator_3.4.48/control.lua b/MaxRateCalculator_3.4.48/control.lua deleted file mode 100644 index 81e0481d..00000000 --- a/MaxRateCalculator_3.4.48/control.lua +++ /dev/null @@ -1,1755 +0,0 @@ --- control.lua --- Max Rate Calculator mod for Factorio --- --- This calculates max possible rates for a selected set of machines. --- Does not compute actual running rates - see the Efficen-See mod for that --- (from which I learned and borrowed) - -require("calculator") - -show_energy = false - -g_marc_units = {} - - --- .16 values for belts m/d = 3/40, 3/80, 1/40 - -g_marc_units[1] = {name="marc-gui-persec", localized_name = {"marc-gui-persec"}, multiplier = 1, divisor = 1, infotype="time"} -g_marc_units[2] = {name="marc-gui-permin", localized_name = {"marc-gui-permin"}, multiplier = 60, divisor = 1, infotype="time"} --- g_marc_units[3] = {name="marc-transport-belt", localized_name = {"marc-transport-belt"}, multiplier = 3, divisor = 45, infotype="transport"} --- g_marc_units[4] = {name="marc-fast-transport-belt", localized_name = {"marc-fast-transport-belt"}, multiplier = 3, divisor = 90, infotype="transport"} --- g_marc_units[5] = {name="marc-express-transport-belt", localized_name = {"marc-express-transport-belt"}, multiplier = 1, divisor = 45, infotype="transport"} -g_marc_units[3] = {name="marc-burner-inserter", localized_name = {"marc-burner-inserter"}, multiplier = 3, divisor = 1.76, infotype="inserter"} -- divisor from https://wiki.factorio.com/Inserters -g_marc_units[4] = {name="marc-basic-inserter", localized_name = {"marc-basic-inserter"}, multiplier = 3, divisor = 2.50, infotype="inserter"} -g_marc_units[5] = {name="marc-long-inserter", localized_name = {"marc-long-inserter"}, multiplier = 3, divisor = 3.46, infotype="inserter"} -g_marc_units[6] = {name="marc-fast-inserter", localized_name = {"marc-fast-inserter"}, multiplier = 1, divisor = 2.31, infotype="inserter"} -g_marc_units[7] = {name="marc-stack-inserter", localized_name = {"marc-stack-inserter"}, multiplier = 12, divisor = 27.70, infotype="stack-inserter"} -g_marc_units[8] = {name="marc-wagon-permin", localized_name = {"marc-wagon-permin"}, multiplier = 60, divisor =1 , infotype="wagon"} -g_marc_units[9] = {name="marc-wagon-perhr", localized_name = {"marc-wagon-perhr"}, multiplier = 3600, divisor =1 , infotype="wagon"} - -g_marc_units_default = 2 -- per minutes is the default - -g_belts_added = false - --- string formats so numbers are displayed in a consistent way -local persec_format = "%16.3f" -local permin_format = "%16.1f" -local watt_format = "%16.1f" - -global.marc_win_loc_x = 0 -global.marc_win_loc_y = 176 -- puts us just below rocket stats --- ---------------------------------------------------------------- - - -function boolstr(bool) - if bool - then return "T" - else return "F" - end -end - --- ---------------------------------------------------------------- - -function debug_print(str) - if global.marc_debug - then - game.print(str) - end -end --- ---------------------------------------------------------------- -function __FUNC__() - if type(debug) == "table" - then - return debug.getinfo(2, 'n').name - else - return "debug not table" - end -end --- ---------------------------------------------------------------- -function debug_log(f, str) - if global.marc_debug - then - game.print(f .. ": " .. str) - end -end --- ---------------------------------------------------------------- - -function string:split( inSplitPattern, outResults ) - if not outResults then - outResults = { } - end - local theStart = 1 - local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) - while theSplitStart do - table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) ) - theStart = theSplitEnd + 1 - theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) - end - table.insert( outResults, string.sub( self, theStart ) ) - return outResults -end - --- ---------------------------------------------------------------- - -function printObj(obj) - - for k,v in pairs(obj) - do - debug_print(k) - if(type(v) == "userdata") - then - debug_print(k .. " is userdata") - else - if (check4property(v,name)) - then - debug_print(k .. "=" .. v.name) - else - debug_print(k .. " has something") - end - end - end - -end - --- ---------------------------------------------------------------- -function check4property(obj, prop) - return ({pcall(function()if(typeof(obj[prop])=="Instance")then error()end end)})[1] -end - --- ---------------------------------------------------------------- - -local function compatible_units(item_or_fluid, unit_type) - - if item_or_fluid == "fluid" and - (unit_type ~= "time") and - (unit_type ~= "wagon") - then - return false - else - return true - end - -end - --- ---------------------------------------------------------------- - -local function get_entity_recipe(entity) - if entity.type == "furnace" - then - return (entity.get_recipe() or entity.previous_recipe) - elseif entity.type == "assembling-machine" or entity.type == "rocket-silo" - then - return entity.get_recipe() - else - return nil - end -end - - --- ---------------------------------------------------------------- - --- Return a flag indicating if name refers to an item (such as iron-plate) or a fluid -local function get_item_or_fluid(name) - local proto = game.item_prototypes[name] - item_or_fluid = "item" - if proto == nil - then - proto = game.fluid_prototypes[name] - if proto ~= nil - then - item_or_fluid = "fluid" - else - debug_log(__FUNC__(), name .. " neither item nor prototype nor fish nor fowl") - - item_or_fluid = "item" - end - end - return item_or_fluid -end - --- ---------------------------------------------------------------- - --- return the prototype -local function get_proto(name) - - local p - local itype - if get_item_or_fluid(name) == "item" - then - - p = game.item_prototypes[name] - itype = "item" - else - itype = "fluid" - p = game.fluid_prototypes[name] - end - if(p == nil) - then - debug_print(__FUNC__() .. " could not find proto for " .. itype .. " " .. name) - end - return p -end - -local function add_value_to_marcalc_clickable_list(inout_data, label_name, count) - inout_data.clickable_values[label_name] = count -end - - --- ---------------------------------------------------------------- - -local function get_gui_root(player) - -- return player.gui.left - return player.gui.screen -end - --- ---------------------------------------------------------------- - -function destroy_marc_gui(player) - local root = get_gui_root(player) - global.marc_win_loc_x = root.marc_gui_top.location.x - global.marc_win_loc_y = root.marc_gui_top.location.y - root.marc_gui_top.destroy() -end --- ---------------------------------------------------------------- - -local function init_modeffects() - return { speed = 0, prod = 0, consumption = 0, pollution = 0 } -end - --- fill out the first part of a row with the icon and the rate. Used for both inputs and outputs -local function build_gui_row(guirow, name, count, rownum, machine_count, unit_type, inout_data) - if machine_count == nil - then - machine_count = 0 - end - - local proto = get_proto(name) - if proto == nil -- not sure what this is - then - return false - end - - local item_or_fluid = get_item_or_fluid(name) - - if not compatible_units(item_or_fluid, unit_type) - then - -- showing inserter/belt rate for a fluid makes no sense - return false - end - - localized_name = proto.localised_name - - guirow.add({type = "sprite-button", sprite = item_or_fluid .. "/" .. name, name = "marc_sprite" .. rownum, style = "sprite_obj_marc_style", tooltip = {"marc-gui-tt-item-sprite",localized_name, machine_count}}) - local label_name = "marc_per_min" .. rownum - guirow.add({type = "label", name = label_name, caption = string.format(persec_format, count ), tooltip={"marc-gui-tt-rate"} }) - add_value_to_marcalc_clickable_list(inout_data, label_name, count) - return true -end - --- ---------------------------------------------------------------- - -local function find_belts() - - - if g_belts_added - then - return - end - g_belts_added = true - - local items_per_belt = 8 - - for _,entity_proto in pairs(game.entity_prototypes) - do - debug_print(__FUNC__(), "looking" .. entity_proto.name) -debug_print(__FUNC__(), "type " .. entity_proto.type) - if entity_proto.type == "transport-belt" - then - local p = entity_proto - debug_log(__FUNC__(), " found a belt " .. entity_proto.name) - - local maxh = entity_proto.max_health - local speed = entity_proto.belt_speed - local denom = items_per_belt * speed * 60 - local sz = #g_marc_units - debug_print (entity_proto.name .. " has speed " .. speed .. " denom is " .. denom .. " size " .. #g_marc_units) - - table.insert(g_marc_units,{name=p.name, localized_name = p.localised_name, multiplier = 1, divisor =denom , infotype="transport"}) - - else - debug_print(__FUNC__(), "keep looking" .. entity_proto.name) - end - end - - -end - --- ---------------------------------------------------------------- - -local function find_inserters() - debug_log(__FUNC__(), "looking for inserters") - g_inserters_added = false - - - for _,entity_proto in pairs(game.entity_prototypes) - do -debug_print(__FUNC__(), "type " .. entity_proto.type) - if entity_proto.type == "inserter" - then - local p = entity_proto - debug_print(__FUNC__(), " found a inserter " .. entity_proto.name) - --- local maxh = entity_proto.max_health --- local speed = entity_proto.inserter_speed --- local denom = items_per_inserter * speed * 60 --- local sz = #g_marc_units --- debug_print (entity_proto.name .. " has speed " .. speed .. " denom is " .. denom .. " size " .. #g_marc_units) - - --table.insert(g_marc_units,{name=p.name, localized_name = p.localised_name, multiplier = 1, divisor =denom , infotype="transport"}) - - - end - end - - -end --- ---------------------------------------------------------------- - --- create the list of rate units the user can choose from -local function build_units_dropdown_list() - - local item_list = {} - - - local listix = 1 - for _, marc_unit in ipairs(g_marc_units) - do - item_list[listix] = g_marc_units[listix].localized_name - listix = listix + 1 - end - - - - return item_list -end - --- ---------------------------------------------------------------- - -local function init_selected_units(player_index) - - global.marc_selected_units = global.marc_selected_units or {} - global.marc_selected_units[player_index] = global.marc_selected_units[player_index] or g_marc_units_default - if global.marc_selected_units[player_index] == 0 or global.marc_selected_units[player_index] > #g_marc_units - then - global.marc_selected_units[player_index] = g_marc_units_default - end -end - - - --- ---------------------------------------------------------------- - --- scale the count based on the unit. --- some rate units require more than just the multiplier/divisor in the g_marc_units table -local function scale_rate(player, name, count) - local root = get_gui_root(player) - - local selected = root.marc_gui_top.marc_gui_upper.maxrate_units.selected_index - local unit_entry = g_marc_units[selected] - local divisor = unit_entry.divisor - local multiplier = unit_entry.multiplier - local unit_type = unit_entry.infotype - - -- debug_print("scale_rate " .. name .. " mult " .. multiplier .. " div " .. divisor .. " count " .. count) - - - local proto = get_proto(name) - if proto == nil -- not sure what this is - then - debug_print("neither item nor fluid?") - return -1 - end - local item_or_fluid = get_item_or_fluid(name) - - if not compatible_units(item_or_fluid, unit_type) - then - debug_print("not compatible:" .. item_or_fluid .. " name " .. name .. " unit_type" .. unit_type) - -- showing inserter/belt rate for a fluid makes no sense - return -1 - end - - - if unit_type == "inserter" - then - local old_div = divisor - stack_size = player.force.inserter_stack_size_bonus + 1 - divisor = divisor * stack_size - elseif unit_type == "stack-inserter" - then - stack_size = player.force.stack_inserter_capacity_bonus + 1 - local old_div = divisor - divisor = divisor * stack_size - elseif unit_type == "wagon" - then - local total_capacity - - if item_or_fluid == "item" - then - cargo_wagon_proto = game.entity_prototypes["cargo-wagon"] - total_capacity = cargo_wagon_proto.get_inventory_size(1) * proto.stack_size - else - fluid_wagon_proto = game.entity_prototypes["fluid-wagon"] - total_capacity = fluid_wagon_proto.fluid_capacity - end - divisor = divisor * total_capacity - debug_print("divisor " .. divisor .. " total_capacity " .. total_capacity .. " multiplier " .. multiplier ) - debug = true - end - -- debug_print("scale_rate now " .. name .. " mult " .. multiplier .. " div " .. divisor .. " count " .. count) - return multiplier*count/divisor -end - -local function build_watt_string(watts) - debug_log(__FUNC__(),"watts " .. watts); - - local temp; - if(watts < 1000) - then - return string.format( watt_format,watts) .. " watts" - elseif (watts < 1000000) - then - return string.format( watt_format,watts/1000) .. " kW" - elseif (watts < 1000000000) - then - return string.format( watt_format,watts/1000000) .. " MW" - elseif (watts < 1000000000000) - then; - return string.format( watt_format,watts/1000000000) .. " GW" - else - return string.format( watt_format,watts/1000000000000) .. " TW" - end - -end - --- ---------------------------------------------------------------- - --- Puts the calculated info into a frame on the left side of the window --- -local function write_marc_gui(player, inout_data) - - local inputs = inout_data.inputs - local outputs = inout_data.outputs - local machines = inout_data.machines - local machines_fed = inout_data.machines_fed or {} - inout_data.clickable_values = {} - local root = get_gui_root(player) - - -- count input, output items and number in common between them - local input_items = 0 - for input_name, input_count in pairs(inout_data.inputs) - do - input_items = input_items + 1 - end - - local both_input_and_output_items = 0 - local output_items = 0 - for output_name, output_count in pairs(outputs) - do - output_items = output_items + 1 - if inputs[output_name] ~= nil - then - both_input_and_output_items = both_input_and_output_items + 1 - end - end - - if (input_items == 0 and output_items == 0) and show_energy == false - then - -- nothing to see here, move on - if root.marc_gui_top - then - destroy_marc_gui(player) - end - return - end - - - root.add({type = "frame", name = "marc_gui_top", direction = "vertical", caption={"marc-gui-top-label"}}) - - local marc_gui_top = root.marc_gui_top - debug_log(__FUNC__(), "marc location " .. root.marc_gui_top.location.x .. "," .. root.marc_gui_top.location.y) - if( global.marc_win_loc_x == nil ) - then - global.marc_win_loc_x = 0 - end - if( global.marc_win_loc_y == nil ) - then - global.marc_win_loc_y = 172 - end - root.marc_gui_top.location = { global.marc_win_loc_x, global.marc_win_loc_y } - - - - -- upper section has Rate - local marc_gui_upper = marc_gui_top.add({type = "flow", name = "marc_gui_upper", direction = "horizontal"}) - - - - - - marc_gui_upper.add({type = "label", name="marc_upper_rate_label", caption={"marc-gui-rate-colon"}, tooltip={"marc-gui-tt-rate-select"}}) - - debug_print("#g_marc_units " .. #g_marc_units) - - init_selected_units(player.index) - local ix = global.marc_selected_units[player.index] - debug_print("global.marc_selected_units[" .. player.index .. "] = " .. ix) - marc_gui_upper.add({type="drop-down", name="maxrate_units", items=build_units_dropdown_list(), selected_index=ix, tooltip={"marc-gui-tt-rate-select"}}) - - -- can't figure out a nicer way to right justify the close button - if both_input_and_output_items > 0 - then - marc_gui_upper.add({type = "label", name = "marc_top1_spacer" , caption = " "}) - else - marc_gui_upper.add({type = "label", name = "marc_top1_spacer" , caption = " "}) - end - - marc_gui_upper.add({type = "sprite-button", sprite = "sprite_marc_calculator", name = "marc_calculator_button" ,align = "right", style = "sprite_obj_marc_style"}) - - marc_gui_upper.add({type = "sprite-button", sprite = "sprite_marc_close", name = "marc_close_button" ,align = "right", style = "sprite_obj_marc_style"}) - - - - -- main marc gui has two frames, one for inputs, one for outputs - local marc_gui = marc_gui_top.add({type = "flow", name = "marc_gui", direction = "horizontal"}) - - -- marc_gui contains two frames, one for inputs and one for outputs - - -- what units are we displaying in? - local selected = root.marc_gui_top.marc_gui_upper.maxrate_units.selected_index - local unit_entry = g_marc_units[selected] - if unit_entry == nil - then - game.print("unit_entry was nil. selected is " .. selected) - unit_entry = g_marc_units[g_marc_units_default] - if unit_entry == nil - then - game.print("still nil, wtf?") - end - end - local divisor = unit_entry.divisor - local multiplier = unit_entry.multiplier - local unit_type = unit_entry.infotype - - - -- Input ingredients - -- - if input_items > 0 - then - -- frame to hold the rows of input items - gui_input_frame = marc_gui.add({type = "frame", name = "marc_inputs", direction = "vertical", caption = {"marc-gui-inputs"}}) - gui_input_scrollpane = gui_input_frame.add({type = "scroll-pane", name = "marc_inputs_pane", vertical_scroll_policy = "auto", style = "scroll_pane_marc_style", direction = "vertical", caption = {"marc-gui-inputs"}}) - - -- three columns - item icon, rate per second, rate per minute - gui_inrows= gui_input_scrollpane.add({type = "table", name = "marc_inrows", style = table_marc_style, column_count = 2 }) - gui_inrows.style.column_alignments[2] = "right" -- numbers look best right justified - - -- column headers - gui_inrows.add({type = "label", name="marc_placeholder", caption="" }) - gui_inrows.add({type = "label", name = "marc_header_rate", caption = {"marc-gui-rate"}, tooltip={"marc-gui-tt-rate-input"} }) - - - -- add a row for each input item, with sexy icon (sprite button), rate - - local rownum = 1 - local name - local count - local sorted_names = {} - - for name in pairs(inputs) do table.insert(sorted_names, name) end - table.sort(sorted_names) - - for i, name in ipairs(sorted_names) - do - count = inputs[name] - local scaled_count = scale_rate(player, name, count) - build_gui_row(gui_inrows, name, scaled_count, rownum, machines_fed[name], unit_type, inout_data) - rownum = rownum+1 - end - end - - -- Output products - -- - if output_items > 0 - then - gui_output_frame = marc_gui.add({type = "frame", name = "marc_outputs", direction = "vertical", caption = {"marc-gui-outputs"}}) - gui_output_scrollpane = gui_output_frame.add({type = "scroll-pane", name = "marc_outputs_pane", vertical_scroll_policy = "auto", style = "scroll_pane_marc_style", direction = "vertical", caption = {"marc-gui-inputs"}}) - - -- if there were items both consumed and produced, we'll have two more columns to show the net result - if both_input_and_output_items > 0 - then - cols = 5 - else - cols = 3 - end - gui_outrows = gui_output_scrollpane.add({type = "table", name = "marc_outrows", style = table_marc_style, column_count = cols }) - - -- right justify the numbers - for i=1,cols - do - gui_outrows.style.column_alignments[i] = "right" - end - - -- column headers - gui_outrows.add({type = "label", name="marc_header1_placeholder", caption=""}) -- this goes where the widget is in the rows below - gui_outrows.add({type = "label", name = "marc_header1_rate", caption = "" , tooltip={"marc-gui-tt-rate-output"}}) - gui_outrows.add({type = "label", name = "marc_header1_machine_rate", caption = {"marc-gui-items-per"}, tooltip={"marc-gui-tt-items-per-machine"} }) - if both_input_and_output_items > 0 - then - gui_outrows.add({type = "label", name = "marc_header1_net_per_sec", caption = {"marc-gui-net"} , tooltip={"marc-gui-tt-net-rate"}}) - gui_outrows.add({type = "label", name = "marc_header1_net_machine_count", caption = {"marc-gui-net"} , tooltip={"marc-gui-tt-net-machines"}}) - end - -- second row of column headers - gui_outrows.add({type = "label", name="marc_placeholder", caption=""}) -- this goes where the widget is in the rows below - gui_outrows.add({type = "label", name = "marc_header_rate", caption = {"marc-gui-rate"} , tooltip={"marc-gui-tt-rate-output"}}) - gui_outrows.add({type = "label", name = "marc_header_machine_rate", caption = {"marc-gui-machine"} , tooltip={"marc-gui-tt-items-per-machine"}}) - - if both_input_and_output_items > 0 - then - gui_outrows.add({type = "label", name = "marc_header_net_per_sec", caption = {"marc-gui-rate"} , tooltip={"marc-gui-tt-net-rate"}}) - gui_outrows.add({type = "label", name = "marc_header_net_machine_count", caption = {"marc-gui-machines"} , tooltip={"marc-gui-tt-net-machines"}}) - end - - local rownum = 1 - local sorted_names = {} - - for name in pairs(outputs) do table.insert(sorted_names, name) end - table.sort(sorted_names) - - for i, name in ipairs(sorted_names) - do - count = outputs[name] - local scaled_count = scale_rate(player, name, count) - local legit = build_gui_row(gui_outrows, name, scaled_count, rownum, machines[name], unit_type, inout_data) - if legit -- only add to row if unit_type is compatible with the item - then - local average_per_machine = count/machines[name] - local scaled_average_per_machine = scale_rate(player, name, average_per_machine) -- multiplier*average_per_machine/divisor - local label_name = "marc_machine_rate" .. rownum - gui_outrows.add({type = "label", name = label_name, caption = string.format( persec_format,scaled_average_per_machine), tooltip={"marc-gui-tt-items-per-machine"} }) - add_value_to_marcalc_clickable_list(inout_data, label_name, scaled_average_per_machine) - - -- add extra columns if an item appears in both inputs and outputs - - input_count = inout_data.inputs[name] - if input_count ~= nil - then - local net_difference = (count - input_count) - local net_count = scale_rate(player, name,net_difference) - label_name = "marc_net_per_min" .. rownum - gui_outrows.add({type = "label", name = label_name, caption = string.format( persec_format, net_count ), tooltip={"marc-gui-tt-net-rate"}}) - add_value_to_marcalc_clickable_list(inout_data, label_name, net_count) - - local net_machines = net_difference/average_per_machine - label_name = "marc_net_machines" .. rownum - gui_outrows.add({type = "label", name = label_name, caption = string.format( persec_format, net_machines ), tooltip={"marc-gui-tt-net-machines"}}) - add_value_to_marcalc_clickable_list(inout_data, label_name, net_machines) - elseif both_input_and_output_items > 0 - then - -- five column display, but this item doesn't have net info - gui_outrows.add({type = "label", name = "marc_net_per_min" .. rownum, caption = "" }) - gui_outrows.add({type = "label", name = "marc_net_machines" .. rownum, caption = "" }) - end - rownum = rownum+1 - end - end - end - - if show_energy - then - - local marc_gui_energy = marc_gui_top.add({type = "flow", name = "marc_gui_energy", direction = "horizontal"}) - marc_gui_energy.add({type = "label", name="marc-gui-energy-label", caption={"marc-gui-energy"}}) - marc_gui_energy.add({type = "label", name = minwattlabel_name, caption = build_watt_string(inout_data.min_consumption), tooltip="" }) - marc_gui_energy.add({type = "label", name = dashwattlabel_name, caption = "-", tooltip="" }) - marc_gui_energy.add({type = "label", name = maxwattlabel_name, caption = build_watt_string(inout_data.max_consumption), tooltip="" }) - end -end - --- ---------------------------------------------------------------- - --- show the gui with the rate calculations -local function open_gui(event, inout_data) - - local player = game.players[event.player_index] - local root = get_gui_root(player) - if root.marc_gui_top - then - root.marc_gui_top.destroy() - end - - -- script.on_event(defines.events.on_tick, on_tick) - - write_marc_gui(player, inout_data) -end - --- ---------------------------------------------------------------- - -local function effect_allowed_for_machine(effectname, machine_proto) - if machine_proto.allowed_effects ~= nil - then - return machine_proto.allowed_effects[effectname] - else - debug_log(__FUNC__(), "machine_proto.name " .. machine_proto.name .. "has no allowed effects table") - return false; - end -end - - --- ---------------------------------------------------------------- - --- calculate the speed and productivity effects of a single module -local function calc_mod( modname, modeffects, modquant, effectivity, machine_proto ) --- debug_print("calc_mod help " .. game.item_prototypes[modname]) - - - local dummy = 0 - protoeffects = game.item_prototypes[modname].module_effects - debug_print("mod is " .. modname .. " quantity " .. modquant .. " num machine_proto " .. machine_proto.name) - for effectname,effectvals in pairs(protoeffects) - do - debug_print("...effectname is " .. effectname .. " modquant " .. modquant) - for _,bonamount in pairs(effectvals) - do - local allowed = effect_allowed_for_machine(effectname, machine_proto) - debug_log(__FUNC__(),"...effectname " .. effectname .. ", bonamount " .. bonamount .. "...allowed " .. boolstr(allowed)) - - if allowed - then - if effectname == "speed" - then - -- debug_print("...adjust speed by " .. ( bonamount * modquant )) - modeffects.speed = modeffects.speed + ( bonamount * modquant * effectivity) - elseif effectname == "productivity" - then - -- debug_print("...adjust productivity by " .. ( bonamount * modquant )) - modeffects.prod = modeffects.prod + (bonamount * modquant * effectivity) - elseif effectname == "consumption" - then - modeffects.consumption = modeffects.consumption + (bonamount * modquant * effectivity) - elseif effectname == "pollution" - then - debug_log(__FUNC__(),"POLLUTION! " .. modeffects.pollution) - modeffects.pollution = modeffects.pollution + (bonamount * modquant * effectivity) - end - end - end - - end -end - --- ---------------------------------------------------------------- - --- calculate the effects of all the modules in the entity -local function calc_mods(entity, modeffects, effectivity, machine_proto) - modinv = entity.get_module_inventory() - modcontents = modinv.get_contents() - local ix = 1 - - for modname,modquant in pairs(modcontents) - do - debug_print("calc_mods proto is " .. game.item_prototypes[modname].name) - debug_print("calc_mods modname,modquant " .. modname .. "," .. modquant) - - calc_mod(modname, modeffects, modquant, effectivity, machine_proto) - ix = ix + 1 - end - - return modeffects -end - - --- ---------------------------------------------------------------- - -local function print_bounding_box(name, b) - debug_print(name .. " " .. b.left_top.x .. "," .. b.left_top.y .. " " .. b.right_bottom.x .. "," .. b.right_bottom.y) -end - --- ---------------------------------------------------------------- --- thanks to Psihuis for this one: - -local function do_boxes_intersect(a, b) - local a_left = a.left_top.x - local a_right = a.right_bottom.x - local a_top = a.left_top.y - local a_bottom = a.right_bottom.y - local b_left = b.left_top.x - local b_right = b.right_bottom.x - local b_top = b.left_top.y - local b_bottom = b.right_bottom.y - return (a_left < b_right and a_right > b_left) and (a_top < b_bottom and a_bottom > b_top) -end --- ---------------------------------------------------------------- - -local function is_machine_in_range_of_beacon(entity, beacon) - debug_print("is machine in range") - local machine_selection_box = entity.prototype.selection_box - local beac_dist = game.entity_prototypes[beacon.name].supply_area_distance - - -- debug_print("beac prot selbox" .. beacon.prototype.selection_box.left_top.x .. " - " .. beacon.prototype.selection_box.right_bottom.y ) - local beacsel_left = beacon.prototype.selection_box.left_top.x - local beacsel_top = beacon.prototype.selection_box.left_top.y - local beacsel_right = beacon.prototype.selection_box.right_bottom.x - local beacsel_bottom = beacon.prototype.selection_box.right_bottom.y - debug_print(beacsel_left .. " " .. beacsel_top .. " X " .. beacsel_right .. " " .. beacsel_bottom) - - debug_print(beacsel_left .. " " .. beacsel_top .. " X " .. beacsel_right .. " " .. beacsel_bottom) - - local beacon_left_top = {x = beacsel_left + beacon.position.x - beac_dist, - y = beacsel_top + beacon.position.y - beac_dist} - - local beacon_right_bottom = {x = beacsel_right + beacon.position.x + beac_dist, - y = beacsel_bottom + beacon.position.y + beac_dist} - local beacon_box = { left_top = beacon_left_top, right_bottom = beacon_right_bottom } - - local machine_left_top = { x = entity.position.x + machine_selection_box.left_top.x, - y = entity.position.y + machine_selection_box.left_top.y } - local machine_right_bottom = { x = entity.position.x + machine_selection_box.right_bottom.x, - y = entity.position.y + machine_selection_box.right_bottom.y } - - local machine_box = { left_top = machine_left_top, right_bottom = machine_right_bottom } - -- print_bounding_box(" machine_box", machine_box) - -- debug_print("..........") - --print_bounding_box(" beacon_box ", beacon_box) - -- debug_print(",,,,,,,,,,") - - - local ans = do_boxes_intersect(beacon_box, machine_box) - - - - return ans -end - - --- ---------------------------------------------------------------- - -max_beacon_dist = -1 - --- calculate effects of beacons. For our purposes, only speed effects count -local function check_beacons(surface, entity) - - local x = entity.position.x - local y = entity.position.y - local machine_proto = game.entity_prototypes[entity.name] - - if max_beacon_dist == -1 - then - debug_print("beacon distance was -1 so look") - for _,entity_proto in pairs(game.entity_prototypes) - do - - if entity_proto.type == "beacon" - then - debug_print("found a beacon " .. entity_proto.name) - local distance = game.entity_prototypes[entity_proto.name].supply_area_distance - if distance > max_beacon_dist - then - max_beacon_dist = distance - end - end - end - -- max_beacon_dist = game.entity_prototypes["beacon"].supply_area_distance - debug_print("beacon distance is " .. max_beacon_dist) - end - - debug_print("check_beacons searching around " .. x .. "," .. y .. " beacon dist is " .. max_beacon_dist) - machine_box = entity.prototype.selection_box - debug_print("check_beacons box is " .. machine_box.left_top.x .. "," .. machine_box.left_top.y .. " thru " .. machine_box.right_bottom.x .. "," .. machine_box.right_bottom.y) - modeffects = init_modeffects() - - local beacons = 0 - local mods = 0 - - -- assumes all beacons have same effect radius - search_area = { { x + machine_box.left_top.x - max_beacon_dist, y + machine_box.left_top.y - max_beacon_dist }, - { max_beacon_dist + x + machine_box.right_bottom.x, max_beacon_dist + y + machine_box.right_bottom.y }} - debug_print(" upper left " .. x + machine_box.left_top.x - max_beacon_dist .. "," .. y + machine_box.left_top.y - max_beacon_dist) - - for _,beacon in pairs(surface.find_entities_filtered{ area=search_area, type="beacon"}) - do - debug_print("test a beacon") - if is_machine_in_range_of_beacon(entity, beacon) - then - debug_print(" beacon area is " .. beacon.prototype.supply_area_distance .. " at " .. beacon.position.x .. "," .. beacon.position.y) - beacons = beacons + 1 - local effectivity = beacon.prototype.distribution_effectivity - debug_print("effectivity is " .. effectivity) - calc_mods( beacon, modeffects, effectivity, machine_proto) - end - end - - debug_print("check_beacons - Saw " .. beacons) - - return modeffects - -end - --- ---------------------------------------------------------------- - -function energy_usage(inout_data, prodproto, beacon_modeffects, mod_effects) - - local energy_usage = 0 - if prodproto.energy_usage ~= nil - then - energy_usage = prodproto.energy_usage - end - debug_log(__FUNC__(),prodproto.name .. " energy_usage is " .. energy_usage) - local active_usage = energy_usage * 60 - - local esource = prodproto.electric_energy_source_prototype - local idle_usage = 0 - - local drain = 0 - if esource ~= nil - then - debug_log(__FUNC__(), prodproto.name .. " drain is " .. esource.drain) - drain = esource.drain - - end - - local max_usage = idle_usage + active_usage - local idle_usage = drain * 60 - local beacon_consumption = 0 - if beacon_modeffects and beacon_modeffects.consumption ~= nil - then - beacon_consumption = beacon_modeffects.consumption - end - - local mod_consumption = 0 - if mod_effects and mod_effects.consumption ~= nil - then - mod_consumption = mod_effects.consumption - end - local total_consumption_effects = beacon_consumption + mod_consumption - debug_log(__FUNC__(), "total_consumption_effects = " .. total_consumption_effects) - if total_consumption_effects < -0.80 - then - total_consumption_effects = -0.80 - end - if drain ~= 0 - then - max_usage = idle_usage + active_usage * (1 + total_consumption_effects) - - debug_log(__FUNC__(), "have drain, adjusted max consumption " .. max_usage) - inout_data.max_consumption = inout_data.max_consumption + max_usage - inout_data.min_consumption = inout_data.min_consumption + idle_usage - else - max_usage = active_usage * (1 + total_consumption_effects) - debug_log(__FUNC__(), "no drain, adjusted max consumption " .. max_usage) - inout_data.max_consumption = inout_data.max_consumption + max_usage - inout_data.min_consumption = inout_data.min_consumption + max_usage - end - - debug_log(__FUNC__(), "total min " .. inout_data.min_consumption .. " max " .. inout_data.max_consumption) - -end - --- ---------------------------------------------------------------- - -local function record_input(inout_data, name, amount) - - if inout_data.inputs[name] ~= nil - then - - inout_data.inputs[name] = inout_data.inputs[name] + amount - - else - inout_data.inputs[name] = amount - - end - if inout_data.machines_fed[name] ~= nil - then - inout_data.machines_fed[name] = inout_data.machines_fed[name] + 1 - else - inout_data.machines_fed[name] = 1 - end -end - --- ---------------------------------------------------------------- - -local function record_output(inout_data, name, amount) - - if inout_data.outputs[name] ~= nil - then - inout_data.outputs[name] = inout_data.outputs[name] + amount - else - inout_data.outputs[name] = amount - end - if inout_data.machines[name] ~= nil - then - inout_data.machines[name] = inout_data.machines[name] + 1 - else - inout_data.machines[name] = 1 - end -end - --- ---------------------------------------------------------------- - --- for an individual assembler, calculate the rates all the inputs are used at and the outputs are produced at, per second -local function calc_assembler(entity, inout_data, beacon_modeffects) - - local prodproto = game.entity_prototypes[entity.name] - - -- get the machines base crafting speed, in cycles per second - local crafting_speed = entity.prototype.crafting_speed - debug_log(__FUNC__(),"entity.name " .. entity.name .. " crafting_speed " .. crafting_speed) - modeffects = init_modeffects() - local effectivity = 1 - modeffects = calc_mods(entity, modeffects, effectivity, prodproto) - - -- adjust crafting speed based on modules and beacons - local total_speed_effect = modeffects.speed + beacon_modeffects.speed - if total_speed_effect < -0.80 -- no worse than 20% - then - total_speed_effect = -0.80 - end - - -- ---------------- ENERY ------------------------- - - energy_usage(inout_data, prodproto, beacon_modeffects, mod_effects) - -- emissions values are always zero in the entity prototype, so we're not calculating pollution now - -- local pollution = esource.emissions -- * esource.emissions * 60 - -- debug_log(__FUNC__()," esource.emissions " .. pollution) - --debug_log(__FUNC__()," esource.emissions_per_minute " .. esource.emissions_per_minute) - - -- ---------------- ENERGY AND POLLUTION! ------------------------- - - - -- issue reported for Pyanodon's alien life mod says some machines don't have consumption and pollution - -- in allowed effects. I'm not seeing this in the prototype, nor in run-time tests, the fawogae plantations - -- do have consumption included in allowed_effects, and the plantation's water consumption is affected by - -- speed modules in beacons or in the plantation itself - -- - -- consumption applies to energy? Pyanodon seems to treat it as item inputs - - - debug_log(__FUNC__(), "cspeed " .. crafting_speed .. " modspeed " .. modeffects.speed .. " beacon_modeffects.speed " .. beacon_modeffects.speed .. " total_speed_effect " .. total_speed_effect) - - crafting_speed = crafting_speed * ( 1 + total_speed_effect) - - - -- how long does the item take to craft if no modules and crafting speed was 1? It's in the recipe.energy! - local recipe = get_entity_recipe(entity) - if get_entity_recipe(entity) ~= nil - then - crafting_time = recipe.energy - local ideal_rate = crafting_speed / crafting_time - local game_limited_rate = math.min(ideal_rate, 60) - debug_log(__FUNC__(),"crafting time " .. crafting_time .. " modeffects.speed " .. modeffects.speed .. " beacon_modeffects.speed " .. beacon_modeffects.speed .. " ideal rate " .. ideal_rate .. " game limited rate " .. game_limited_rate) - - if(crafting_time == 0) - then - crafting_time = 1 - debug_log(__FUNC__(),"(entity.get_recipe() or entity.previous_recipe) .energy = 0, wtf?") - end - - -- for all the ingredients in the recipe, calculate the rate - -- they're consumed at. Add to the inputs table. - for _, ingred in ipairs(recipe .ingredients) - do - - local amount = ingred.amount * game_limited_rate - - record_input(inout_data, ingred.name, amount) - - end - - --[[ - -- initial code to compute fuel consumption by stone & electric furnaces - -- not sure who cares, not in game's production graph. would also need to consider burner inserter - -- Rseding says use burner_prototype info - fuel_inventory = entity.get_fuel_inventory() - if fuel_inventory ~= nil - then - local fuel_name = fuel_inventory[1].name - debug_log(__FUNC__(),entity.name .. " has fuel " .. fuel_name) - fuel_proto = game.item_prototypes[fuel_name] - debug_log(__FUNC__(),"fuel value " .. fuel_proto.fuel_value) - end - ]]-- - - -- for all the products in the recipe (usually just one) - -- calculate the rate they're produced at and add each product to the outputs - -- table - for _, prod in ipairs(get_entity_recipe(entity) .products) - do - local chance - local amount - - -- sometime in 0.17 factorio changed uranium recipe to use a probability value * amount - -- rather than probability with a range of amount_min and amount_max - -- but some mods like Bob's Greenhouse still was using a range - if prod.probability ~= nil - then - -- debug_log(__FUNC__(),"probability is " .. prod.probability) - chance = prod.probability - if prod.amount_min ~= nil - then - amount = chance * (prod.amount_min + prod.amount_max) / 2 - else - amount = prod.amount * chance - end - else - -- debug_log(__FUNC__(),"probability is nil") - chance = 1 - - if prod.amount ~= nil - then - -- debug_log(__FUNC__(),"prod amount, modeffects.prod " .. prod.name .. " " .. prod.amount .. "," .. modeffects.prod ) - amount = prod.amount - else - amount = (prod.amount_min + prod.amount_max) / 2 - end - end - - -- gotta handle super beacons - they can affect prod too - -- debug_log(__FUNC__(), prod.name .. " amount " .. amount .. " modeffects " .. ( 1 + modeffects.prod) .. " cspeed " .. crafting_speed .. " crafting_time" .. crafting_time) - local catalyst_amount = 0 - if prod.catalyst_amount ~= nil - then - catalyst_amount = prod.catalyst_amount - end - local productivity = modeffects.prod + beacon_modeffects.prod - if productivity < 0 - then - productivity = 0 - end - - -- speed bonus applies fully to productivity bonus, but is limited to no more that 60 for non-prod boosted output - amount = amount * game_limited_rate + (amount - catalyst_amount) * productivity * ideal_rate - - record_output(inout_data, prod.name, amount) - - end - end - -end - --- ---------------------------------------------------------------- - --- for an individual mining- drill, calculate the rates all the inputs are used at and the outputs are produced at, per second -local function calc_mining(inout_data, surface, player, entity) - - local beacon_modeffects = { speed = 0, prod = 0 } - if entity.prototype.module_inventory_size > 0 - then - beacon_modeffects = check_beacons(surface, entity) - end - local drilling_bonus = player.force.mining_drill_productivity_bonus - - local x = entity.position.x - local y = entity.position.y - --debug_log(__FUNC__(),"Found a drill") - local prod = entity.mining_target - if prod == nil - then - --debug_log(__FUNC__(),"nil mining_target " .. x .. "," .. y) - return - end - - local prodproto = entity.mining_target.prototype - local drillproto = entity.prototype - - debug_log(__FUNC__(),"bse = " .. beacon_modeffects.speed) - - debug_log(__FUNC__(),"target is " .. prod.name .. " type " .. prod.type) - debug_log(__FUNC__(),"target amount " .. prod.amount .. " normal amount " .. prodproto.normal_resource_amount) - debug_log(__FUNC__(),"progress " .. entity.mining_progress .. " bonus " .. entity.bonus_mining_progress) - debug_log(__FUNC__(),"speed " .. drillproto.mining_speed ) - - -- get the machines base crafting speed, in cycles per second - local mining_speed = entity.prototype.mining_speed - local mining_power = 1 -- entity.prototype.mining_power - - local mining_time = prodproto.mineable_properties.mining_time - - - - debug_log(__FUNC__(),prodproto.name .. " number of mineable products " .. #prodproto.mineable_properties.products) - - modeffects = init_modeffects() - local effectivity = 1 - modeffects = calc_mods(entity, modeffects, effectivity, entity.prototype) - energy_usage(inout_data, drillproto, beacon_modeffects, nil) - - -- adjust crafting speed based on modules and beacons - local total_speed_effect = modeffects.speed + beacon_modeffects.speed - if total_speed_effect < -0.80 -- no worse than 20% - then - total_speed_effect = -0.80 - end - debug_log(__FUNC__(), "cspeed " .. mining_speed .. " modspeed " .. modeffects.speed .. " beacon_modeffects.speed " .. beacon_modeffects.speed .. " total_speed_effect " .. total_speed_effect) - - mining_speed = mining_speed * ( 1 + total_speed_effect) - - local amount = mining_speed / mining_time - local oldamount = amount - - amount = amount * ( 1 + drilling_bonus + modeffects.prod + beacon_modeffects.prod) - - debug_log(__FUNC__(),"amount = amount* ( 1 + drilling_bonus _modeffects.prod + beacon_modeffects.prod)") - debug_log(__FUNC__(),amount.." = " .. oldamount .. " * ( 1 +" ..drilling_bonus.. "+" .. modeffects.prod.. " +" .. beacon_modeffects.prod..")") - - for _,mineable_product in pairs(prodproto.mineable_properties.products) - do - local product_name = mineable_product.name - local result_type = get_item_or_fluid(product_name) - -- debug_log(__FUNC__(),"mineable_product.name" .. mineable_product.name) - - local required_fluid = prodproto.mineable_properties.required_fluid - if required_fluid ~= nil - then - local fluid_amount = prodproto.mineable_properties.fluid_amount * mining_speed / mining_time - fluid_amount = fluid_amount / 10 -- prodproto.mineable_properties.fluid_amount is 10x too high - record_input(inout_data, required_fluid, fluid_amount) - end - - if result_type == "fluid" - then - -- debug_log(__FUNC__(), "prod.amount is " .. prod.amount) - -- - local mineable_props = prodproto.mineable_properties.result - - local mineable_amt - if mineable_product.amount_min ~= nil - then - -- debug_log(__FUNC__(), " producst min is " .. mineable_product.amount_min) - mineable_amt = (mineable_product.amount_min + mineable_product.amount_max) / 2 - else - mineable_amt = mineable_product.amount - end - - local mining_yield = (prod.amount / prodproto.normal_resource_amount ) * mineable_amt - debug_log(__FUNC__(),"yield is " .. math.floor(mining_yield)) - mining_yield = math.min(mining_yield, 100) - - amount = amount * mining_yield - debug_log(__FUNC__(),amount .." = amount* "..mining_yield .. " for " .. product_name) - - end - - debug_log(__FUNC__(), "product_name is now " .. product_name .. " amount " .. amount) - record_output(inout_data, product_name, amount) - end - -end - --- ---------------------------------------------------------------- - -local function calc_production(inout_data, surface, entity) - local machines_with_no_recipe = 0 - local beacon_modeffects = init_modeffects() - - beacon_modeffects = check_beacons(surface, entity) - - - if get_entity_recipe(entity) == nil - then - machines_with_no_recipe = machines_with_no_recipe + 1 - end - - calc_assembler(entity, inout_data, beacon_modeffects) - - return machines_with_no_recipe -end - --- ---------------------------------------------------------------- - -local function calc_inserter(inout_data, surface, entity) - local prodproto = game.entity_prototypes[entity.name] - local esource = prodproto.electric_energy_source_prototype - if esource ~= nil - then - debug_log(__FUNC__(), "drain is " .. esource.drain) - -- debug_log(__FUNC__(), "energy_per_rotation is " .. prodproto.energy_usage) - - local idle_usage = esource.drain * 60 - local rot_speed = prodproto.inserter_rotation_speed - local energy_per_rot = 1 --prodproto.energy_usage - local ext_speed = prodproto.inserter_extension_speed - local energy_per_ext = 1 -- prodproto.energy_usage - - local active_usage = ((energy_per_rot*rot_speed) + (ext_speed*energy_per_ext)) * 60 - local max_usage = idle_usage + active_usage - max_usage = idle_usage + active_usage - - debug_log(__FUNC__(), "adjusted max consumption " .. max_usage) - inout_data.max_consumption = inout_data.max_consumption + max_usage - inout_data.min_consumption = inout_data.min_consumption + idle_usage - debug_log(__FUNC__(), "total min " .. inout_data.min_consumption .. " max " .. inout_data.max_consumption) - end - -end - --- ---------------------------------------------------------------- - -local function dump_help(prodproto, filter) - local helpText = prodproto.help() - local helpTable = helpText:split("\n") - -- debug_log(__FUNC__(), "help for " ..prodproto.name) - for hix = 1, #helpTable do - if helpTable[hix] ~= nil - then - if string.find(helpTable[hix], filter) - then - debug_log(__FUNC__(),helpTable[hix]) - end - end - end -end - --- cribbed from helmod -local function getPowerExtract(temperature, heat_capac) - - if temperature == nil then - temperature = 165 - end - if temperature < 15 then - temperature = 25 - end - if heat_capacity == nil or heat_capacity == 0 then - heat_capacity = 200 - end - return (temperature-15)*heat_capacity - -end - --- cribbed from helmod -local function getFluidProduction(proto) - local effectivity = proto.effectivity or 1 - debug_log(__FUNC__(), "effectivity is " .. effectivity) - if(proto.effectivity == nil) - then - debug_log(__FUNC__(), "proto.effectivity is nil") - end - local fluid_filter = "water" - local fluid_prototype = game.fluid_prototypes[fluid_filter] - - local heat_capacity = fluid_prototype.heat_capacity - local target_temperature = proto.target_temperature - debug_log(__FUNC__(),"target temp is " .. target_temperature .. " heat cap is " .. heat_capacity) - local power_extract = getPowerExtract(target_temperature, heat_capacity) - local energy_consumption = proto.max_energy_usage - debug_log(__FUNC__(), "energy_consumption " .. energy_consumption .. "/" .. power_extract .. " = " .. (energy_consumption / power_extract)) - return energy_consumption / (effectivity * power_extract) - -- number is too high for kras by a factor of 2.5, is correct for vanilla - -- effectivity is nil - -- energy_consumption must be wrong for Kras -end - - -local function calc_boiler(inout_data, surface, entity) - - debug_log(__FUNC__(), "boiler is " .. entity.name) - - -- prodproto.fluidbox_prototypes array has .filter.name - either steam or water - -- but since consumption/production rates not exposed by factorio (as far as I know) - -- have to use hardcoded numbers - local prodproto = game.entity_prototypes[entity.name] - debug_log(__FUNC__(), "type is " .. prodproto.type) - debug_log(__FUNC__(), "max is " .. prodproto.max_energy_usage) - -- debug_log(__FUNC__(), "fluid_usage_per_tick is " .. prodproto.fluid_usage_per_tick) - local wontwork = prodproto.emissions_per_second - debug_log(__FUNC__(), "wontwork is " .. wontwork) - local energySource = prodproto.heat_energy_source_prototype - if energySource == nil - then - debug_log(__FUNC__(), "energySource is nil") - else - debug_log(__FUNC__(), "energySource is not nil") - dump_help(energySource, "eff") - debug_log(__FUNC__(), "emissions is " .. energySource.emissions) - end - -- local emissions_per_minute = energySource.emissions_per_minute - -- debug_log(__FUNC__(),"emissions per minute " .. emissions_per_minute) --- local helpText = prodproto.help() --- local helpTable = helpText:split("\n") --- debug_log(__FUNC__(), "help # " .. #helpTable) --- for hix = 1, #helpTable do --- if helpTable[hix] ~= nil --- then --- if string.find(helpTable[hix], "fluid") --- then --- debug_log(__FUNC__(),helpTable[hix]) --- end --- if string.find(helpTable[hix], "emiss") --- then --- debug_log(__FUNC__(),helpTable[hix]) --- end --- end --- end - dump_help(prodproto, "consumption") - dump_help(prodproto, "energy") - - --debug_log(__FUNC__(), "prodproto.energy_consumption " .. (prodproto.energy_consumption or -99)) - local helsanswer = getFluidProduction(prodproto) - debug_log(__FUNC__(), "helsanswer is " .. helsanswer) - - - -- local consumptionRate -local productionRate --- if entity.name == "boiler" --- then --- consumptionRate = 20 --- productionRate = 20 --- elseif entity.name == "heat-exchanger" --- then --- consumptionRate = 20 --- productionRate = 20 --- else --- game.print("Unknown boiler " .. entity.name .. ". Fluid calculations may not be accurate") --- return --- end - - productionRate = helsanswer * 60 - - record_input(inout_data, "water", productionRate) - record_output(inout_data, "steam", productionRate) -end - --- ---------------------------------------------------------------- - -local function calc_generator(inout_data, surface, entity) - - - debug_log(__FUNC__(), "generator is " .. entity.name) - - - - local genProto = game.entity_prototypes[entity.name] - debug_log(__FUNC__(), "generator fluid usage is " .. genProto.fluid_usage_per_tick) - local consumptionRate = genProto.fluid_usage_per_tick * 60 - local fluid_name = "some fluid" - - if #genProto.fluidbox_prototypes == 1 - then - if genProto.fluidbox_prototypes[1].filter ~= nil - then - - fluid_name = genProto.fluidbox_prototypes[1].filter.name - end - end - debug_log(__FUNC__(), "generator uses " .. fluid_name) - if fluid_name ~= "some fluid" - then - record_input(inout_data, fluid_name, consumptionRate) - end -end - - --- ---------------------------------------------------------------- - --- player has selected some machines with our tool -script.on_event(defines.events.on_player_selected_area, - function(event) - local function_name = "marc event" - - -- leave if not our tool - if event.item ~= "max-rate-calculator" - then - return - end - - find_belts() - find_inserters() - - - global.marc_selected_unit_index = global.marc_selected_unit_index or {} - local player = game.players[event.player_index] - local surface = player.surface - - local inout_data = { - inputs={}, - outputs = {}, - machines = {}, - machines_fed = {}, - max_consumption = 0, - min_consumption = 0} - -- for all the machines selected, calculate consumption/production rates. - -- (note: beacons themselves don't need to be selected, if one is in range - -- of a selected machine, it will be considered) - local no_recipe_smelters = 0 - local no_recipe_assemblers = 0 - local count = 0 - for _, entity in ipairs(event.entities) - do - debug_log(function_name,"Found entity " .. entity.name .. " type " .. entity.type .. " count " .. count ) - count = count + 1 - if entity.type == "assembling-machine" or entity.type == "rocket-silo" - then - no_recipe_assemblers = no_recipe_assemblers + calc_production(inout_data, surface, entity) - elseif entity.type == "furnace" - then - no_recipe_smelters = no_recipe_smelters + calc_production(inout_data, surface, entity) - elseif entity.type == "mining-drill" - then - calc_mining( inout_data, surface, player, entity) - elseif entity.type == "beacon" - then - -- beacon prototype has drain with same value as proto's energy_usage, should be zero - local prodproto = game.entity_prototypes[entity.name] - debug_log(function_name,"TODO: beacon " .. count .. " should just be prodproto.energy_usage " .. prodproto.energy_usage .. " ignore drain"); - inout_data.max_consumption = inout_data.max_consumption + prodproto.energy_usage * 60 - inout_data.min_consumption = inout_data.min_consumption + prodproto.energy_usage * 60 - - elseif entity.type == "inserter" - then - calc_inserter( inout_data, surface, entity) - -- science, rocket launch pads, radars, lasers - elseif entity.type == "boiler" - then - calc_boiler( inout_data, surface, entity) - elseif entity.type == "generator" - then - calc_generator( inout_data, surface, entity) - else - local prodproto = game.entity_prototypes[entity.name] - debug_log(function_name,"TODO maybe: " .. entity.type) - if prodproto.fixed_recipe ~= nil - then - debug_log(function_name,"TODO fixed recipe " .. prodproto.fixed_recipe) - end - - if prodproto.fluid_usage_per_tick ~= nil - then - debug_log(function_name,"TODO fupt " .. prodproto.fluid_usage_per_tick) - end - end - end - - -- put out a warning if we found machines with no recipes - if no_recipe_assemblers > 0 or no_recipe_smelters > 0 - then - - if no_recipe_assemblers > 0 and no_recipe_smelters > 0 - then - player.print({"marc-gui-no-recipe-both", no_recipe_assemblers, no_recipe_smelters}) - else - if no_recipe_assemblers > 0 - then - player.print({"marc-gui-no-recipe-assemblers", no_recipe_assemblers}) - else - player.print({"marc-gui-no-recipe-smelters", no_recipe_smelters}) - end - end - - end - - -- save so if user changes units dropdown, we can recalculate the gui - global.marc_inout_data_by_player = global.marc_inout_data_by_player or {} - global.marc_inout_data_by_player[event.player_index] = inout_data - global.marc_inout_data = inout_data - - -- now open and show the gui with the calculations - open_gui(event, inout_data) - - -- throw away the max-rate-calculator item. User never gets one in their inventory (unless they click hotkey and directly put it in inventory) - local cursor_stack = player.cursor_stack - cursor_stack.clear() - - end -) - --- ---------------------------------------------------------------- - --- player hit the magic key, create our selection tool and put it in their hand -local function on_hotkey_main(event) - - init_selected_units(event.player_index) - local player = game.players[event.player_index] - - -- once in their life, a message is displayed giving a hint - global.marc_hint = global.marc_hint or 0 - if global.marc_hint == 0 - then - player.print({"marc-gui-select-hint"}) - global.marc_hint = 1 - end - - -- put whatever is in the player's hand back in their inventory - -- and put our selection tool in their hand - local old_cursor_had_item = "" - if player.cursor_stack ~= nil -- RusselRaZe reported crash accessing nil cursor_stack here when riding cargo rocket in space ex mod - then - if player.cursor_stack.valid_for_read - then - old_cursor_had_item = player.cursor_stack.name - end - end - - player.clear_cursor() - if player.cursor_stack ~= nil -- muppet9010 reported crash accessing nil cursor_stack here when player died - then - if old_cursor_had_item ~= "max-rate-calculator" -- if already in hand, just clear it and get out - then - local cursor_stack = player.cursor_stack - - cursor_stack.clear() - cursor_stack.set_stack({name="max-rate-calculator", type="selection-tool", count = 1}) - end - end - - -end - --- ---------------------------------------------------------------- - -local function max_rate_shortcut(event) - debug_print("Max Rate Shortcut") - if event.prototype_name == "max-rate-shortcut" - then - on_hotkey_main(event) - elseif event.prototype_name == "marc_calc_4func" - then - local player = game.players[event.player_index] - toggle_calculator(player) - end -end - - --- ---------------------------------------------------------------- - --- user has clicked somewhere. If clicked on any gui item name that starts with "marc_..." --- hide the gui -local function on_gui_click(event) - local event_name = event.element.name - debug_print("event_name " .. event_name) - local marc_prefix = "marc_" - local possible_marc_prefix = string.sub( event_name, 1, string.len(marc_prefix) ) - local player = game.players[event.player_index] - local root = get_gui_root(player) - - local marcalc_prefix = "marcalc_" - local possible_marcalc_prefix = string.sub( event_name, 1, string.len(marcalc_prefix)) - if possible_marcalc_prefix == marcalc_prefix - then - handle_marcalc_click(event_name, player) - return - end - - if global.marc_inout_data_by_player ~= nil - then - local inout_data = global.marc_inout_data_by_player[event.player_index] - if inout_data ~= nil - then - -- debug_print("on_gui_click looking for " .. event_name .. " in clickable values") - val = inout_data.clickable_values[event_name] - if val ~= nil - then - -- debug_print("on_gui_click found " .. event_name .. " in clickable values. val = " .. val) - marcalc_clickable_value_clicked(player, val) - return - end - end - end - - - if possible_marc_prefix == marc_prefix - then - if event_name == "marc_calculator_button" - then - toggle_calculator(player) - return - end - - if root.marc_gui_top then - if event_name == "marc_close_button" - then - destroy_marc_gui(player) - hide_calculator(player) - end - elseif event_name == "marc_close_button" - then - - if player.gui.left.marc_gui_top then - player.gui.left.marc_gui_top.destroy() - hide_calculator(player) - end - end - - end -end - --- ---------------------------------------------------------------- - -local function on_gui_selection(event) - - local event_name = event.element.name - local player = game.players[event.player_index] - local root = get_gui_root(player) - - - - - if event_name == "maxrate_units" - then - local selected = root.marc_gui_top.marc_gui_upper.maxrate_units.selected_index - global.marc_selected_units[event.player_index] = selected - unit_entry = g_marc_units[selected] - debug_print("selected " .. unit_entry.name .. " " .. unit_entry.multiplier .. "/" .. unit_entry.divisor) - root.marc_gui_top.destroy() - if global.marc_inout_data_by_player == nil -- by_player is new, may not exist in old save - then - open_gui(event, global.marc_inout_data) - else - open_gui(event, global.marc_inout_data_by_player[event.player_index]) - end - end -end - - --- ---------------------------------------------------------------- - -local function on_marc_command(event) - -if event.parameter == "debug" - then - global.marc_debug = true - debug_print("marc debugging is on") - elseif event.parameter == "nodebug" - then - debug_print("marc debugging is off") - global.marc_debug = false - elseif event.parameter == "showloc" - then - if global.marc_win_loc_x ~= nil - then - debug_log("event", "marc location x " .. global.marc_win_loc_x ) - end - if global.marc_win_loc_y ~= nil - then - debug_log("event", "marc location y " .. global.marc_win_loc_y) - end - elseif event.parameter == "resetloc" - then - global.marc_win_loc_x = 0 - global.marc_win_loc_y = 176 - else - game.players[event.player_index].print("unknown marc parameter: " .. event.parameter) - end -end - --- ---------------------------------------------------------------- - -script.on_event( defines.events.on_gui_selection_state_changed, on_gui_selection ) - -script.on_event( "marc_hotkey", on_hotkey_main ) - -script.on_event( defines.events.on_lua_shortcut, max_rate_shortcut ) - -script.on_event( defines.events.on_gui_click, on_gui_click) - -script.on_event( defines.events.on_gui_text_changed, marcalc_on_gui_text_changed ) - -commands.add_command( "marc", "Max Rate Calculator [ debug | nodebug ] ", on_marc_command ) - diff --git a/MaxRateCalculator_3.4.48/data.lua b/MaxRateCalculator_3.4.48/data.lua deleted file mode 100644 index d4b61324..00000000 --- a/MaxRateCalculator_3.4.48/data.lua +++ /dev/null @@ -1,3 +0,0 @@ -require("marc-prototypes") -require("marc-styles") -require("marc-hotkey") \ No newline at end of file diff --git a/MaxRateCalculator_3.4.48/graphics/calculator.png b/MaxRateCalculator_3.4.48/graphics/calculator.png deleted file mode 100644 index 0843c850..00000000 Binary files a/MaxRateCalculator_3.4.48/graphics/calculator.png and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/graphics/close.png b/MaxRateCalculator_3.4.48/graphics/close.png deleted file mode 100644 index 141f53be..00000000 Binary files a/MaxRateCalculator_3.4.48/graphics/close.png and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator.png b/MaxRateCalculator_3.4.48/graphics/max-rate-calculator.png deleted file mode 100644 index f2eb5c66..00000000 Binary files a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator.png and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator32.png b/MaxRateCalculator_3.4.48/graphics/max-rate-calculator32.png deleted file mode 100644 index 0af29d29..00000000 Binary files a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator32.png and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator64.png b/MaxRateCalculator_3.4.48/graphics/max-rate-calculator64.png deleted file mode 100644 index 3f833637..00000000 Binary files a/MaxRateCalculator_3.4.48/graphics/max-rate-calculator64.png and /dev/null differ diff --git a/MaxRateCalculator_3.4.48/info.json b/MaxRateCalculator_3.4.48/info.json deleted file mode 100644 index bd7f814e..00000000 --- a/MaxRateCalculator_3.4.48/info.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "MaxRateCalculator", - "author": "Theanderblast", - "version": "3.4.48", - "title": "Max Rate Calculator", - "homepage": "", - "description": "Calculates maximum consumption/prodution rates of assemblers, plants, etc.", - "factorio_version":"1.1", - "dependencies": ["base >= 1.1.0"] -} diff --git a/MaxRateCalculator_3.4.48/locale/en/locale.cfg b/MaxRateCalculator_3.4.48/locale/en/locale.cfg deleted file mode 100644 index 855cae8c..00000000 --- a/MaxRateCalculator_3.4.48/locale/en/locale.cfg +++ /dev/null @@ -1,51 +0,0 @@ -marc-gui-inputs=Inputs -marc-gui-outputs=Outputs -marc-gui-persec=Items per second -marc-gui-permin=Items per minute -marc-transport-belt=Transport Belts -marc-fast-transport-belt=Fast Transport Belts -marc-express-transport-belt=Express Transport Belts -marc-burner-inserter=Burner inserters -marc-basic-inserter=Basic inserters -marc-fast-inserter=Fast/Filter inserters -marc-long-inserter=Long handed inserters -marc-stack-inserter=Stack/Stack filter inserters -marc-wagon-permin=Train wagons per minute -marc-wagon-perhr=Train wagons per hour -marc-gui-top-label=Max Rate Calculator -marc-gui-select-hint=Select one or more assemblers with selection tool -marc-gui-rate=Rate -marc-gui-rate-colon=Rate: -marc-gui-net=Net -marc-gui-machines=Machines -marc-gui-machine=Machine -marc-gui-items-per=Per -marc-gui-tt-net-machines=Extra (positive) or needed (negative) number of similarly modded machines for this intermediate item -marc-gui-tt-net-rate=Surplus or deficit rate, in selected units, of production of this intermediate item -marc-gui-tt-items-per-machine=Rate, in selected units, for each machine producing this item -marc-gui-tt-rate-output=Production rate, in the units selected in the dropdown list -marc-gui-tt-rate-input=Consumption rate, in the units selected in the dropdown list -marc-gui-tt-rate=Rate, in the units selected in the dropdown list -marc-gui-tt-rate-select=Select units to display values in -marc-gui-no-recipe-both=Max Rate Calculator: __1__ assembler(s) and __2__ smelter(s) have no recipes -marc-gui-no-recipe-assemblers=Max Rate Calculator: __1__ assembler(s) have no recipes -marc-gui-no-recipe-smelters=Max Rate Calculator: __1__ smelter(s) have no recipes -marc-gui-tt-item-sprite=__1__ by __2__ machines - -marc-gui-energy=Energy Consumption - -marc-gui-netsec=net/sec. -marc-gui-netmin=net/min. - -marcalc_divide_by_zero=Divide by zero! - -[controls] -marc_hotkey=Max Rate Calculator selection tool -marcalc_toggle=Toggle four-function calculator window - -[item-name] -max-rate-calculator=Max Rate Calculator selection tool - -[shortcut-name] -max-rate-shortcut=Max Rate Calculator -marc_calc_4func=Four Function Calculator \ No newline at end of file diff --git a/MaxRateCalculator_3.4.48/marc-hotkey.lua b/MaxRateCalculator_3.4.48/marc-hotkey.lua deleted file mode 100644 index 1952d417..00000000 --- a/MaxRateCalculator_3.4.48/marc-hotkey.lua +++ /dev/null @@ -1,16 +0,0 @@ -data:extend( -{ - { - type = "custom-input", - name = "marc_hotkey", - key_sequence = "CONTROL + N", - consuming = "none" - }, - { - type = "custom-input", - name = "marcalc_toggle", - key_sequence = "CONTROL + ENTER", - consuming = "none" - } -} -) \ No newline at end of file diff --git a/MaxRateCalculator_3.4.48/marc-prototypes.lua b/MaxRateCalculator_3.4.48/marc-prototypes.lua deleted file mode 100644 index 1133ef03..00000000 --- a/MaxRateCalculator_3.4.48/marc-prototypes.lua +++ /dev/null @@ -1,67 +0,0 @@ --- Max Rate Calculator mod for Factorio --- --- This mod provides a tool for calculating the throughput rate of machines --- --- The tool is a selection tool - drag it over some machines and it calculates --- the maximum rate those macines could consume and produce items, given the --- modules in the machine, machine rate, beacon effects --- --- the max-rate-calculator selection tool is automatically created when the user --- invokes the hot key, and is destroyed when they finish selecting the area to --- be analyzed. The tool is not craftable, and requires no research. - -data:extend( -{ - { - type = "selection-tool", - name = "max-rate-calculator", - show_in_library = false, - icon = "__MaxRateCalculator__/graphics/max-rate-calculator32.png", - flags = {"hidden", "only-in-cursor"}, - subgroup = "tool", - order = "c[automated-construction]-b[tree-deconstructor]", - stack_size = 1, - icon_size = 32, - selection_color = { r = 0.6, g = 0.6, b = 0 }, - alt_selection_color = { r = 0, g = 0, b = 1 }, - selection_mode = {"blueprint", "buildable-type"}, - alt_selection_mode = {"blueprint", "buildable-type"}, - selection_cursor_box_type = "entity", - alt_selection_cursor_box_type = "not-allowed", - } - - , - { - type = "shortcut", - name = "max-rate-shortcut", - order = "b[blueprints]-h[max-rate-calc]", - action = "lua", - toggleable = false, - icon = - { - filename = "__MaxRateCalculator__/graphics/max-rate-calculator64.png", - priority = "extra-high-no-scale", - size = 64, - scale = 1, - flags = {"icon"} - } - } - , - { - type = "shortcut", - name = "marc_calc_4func", - order = "b[blueprints]-h[max-rate-calc]", - action = "lua", - toggleable = true, - icon = - { - filename = "__MaxRateCalculator__/graphics/calculator.png", - priority = "extra-high-no-scale", - size = 64, - scale = 1, - flags = {"icon"} - } - } - -}) - diff --git a/MaxRateCalculator_3.4.48/marc-styles.lua b/MaxRateCalculator_3.4.48/marc-styles.lua deleted file mode 100644 index 3e0f226b..00000000 --- a/MaxRateCalculator_3.4.48/marc-styles.lua +++ /dev/null @@ -1,70 +0,0 @@ -local default_gui = data.raw["gui-style"].default - -default_gui.sprite_obj_marc_style = -{ - type="button_style", - -- parent="button_style", - top_padding = 0, - right_padding = 0, - bottom_padding = 0, - left_padding = 0, - height = 32, - width = 32, - scalable = false -} - -default_gui.marcalc_button_style = -{ - type="button_style", - -- parent="button_style", - top_padding = 0, - right_padding = 0, - bottom_padding = 0, - left_padding = 0, - height = 40, - width = 40, - scalable = false -} - -default_gui.table_marc_style = -{ - type = "table_style", - horizontal_spacing = 5, - vertical_spacing = 1, - resize_row_to_width = false, - resize_to_row_height = false, -} - -default_gui.scroll_pane_marc_style = -{ - type = "scroll_pane_style", - -- parent="scroll_pane_style", - -- flow_style = - -- { - -- type = "flow_style", - -- parent = "flow_style" - -- }, - resize_row_to_width = true, - resize_to_row_height = false, - minimal_height=128, - maximal_height=400, - max_on_row = 1, -} - -data:extend( -{ - { - type = "sprite", - name = "sprite_marc_close", - filename = "__core__/graphics/cancel.png", - width = 64, - height = 64 - }, - { - type = "sprite", - name = "sprite_marc_calculator", - filename = "__MaxRateCalculator__/graphics/calculator.png", - width = 64, - height = 64 - } -}) \ No newline at end of file diff --git a/MaxRateCalculator_3.4.48/thumbnail.png b/MaxRateCalculator_3.4.48/thumbnail.png deleted file mode 100644 index 0e605f5a..00000000 Binary files a/MaxRateCalculator_3.4.48/thumbnail.png and /dev/null differ diff --git a/MilesBobsExpansion_9.6.1/Readme.md b/MilesBobsExpansion/Readme.md similarity index 100% rename from MilesBobsExpansion_9.6.1/Readme.md rename to MilesBobsExpansion/Readme.md diff --git a/MilesBobsExpansion_9.6.1/changelog.txt b/MilesBobsExpansion/changelog.txt similarity index 100% rename from MilesBobsExpansion_9.6.1/changelog.txt rename to MilesBobsExpansion/changelog.txt diff --git a/MilesBobsExpansion_9.6.1/data.lua b/MilesBobsExpansion/data.lua similarity index 100% rename from MilesBobsExpansion_9.6.1/data.lua rename to MilesBobsExpansion/data.lua diff --git a/MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-7.png b/MilesBobsExpansion/graphics/assembling-machine/assembling-machine-7.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-7.png rename to MilesBobsExpansion/graphics/assembling-machine/assembling-machine-7.png diff --git a/MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-8.png b/MilesBobsExpansion/graphics/assembling-machine/assembling-machine-8.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-8.png rename to MilesBobsExpansion/graphics/assembling-machine/assembling-machine-8.png diff --git a/MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-9.png b/MilesBobsExpansion/graphics/assembling-machine/assembling-machine-9.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/assembling-machine/assembling-machine-9.png rename to MilesBobsExpansion/graphics/assembling-machine/assembling-machine-9.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-10.png b/MilesBobsExpansion/graphics/icons/assembling-machine-10.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-10.png rename to MilesBobsExpansion/graphics/icons/assembling-machine-10.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-7.png b/MilesBobsExpansion/graphics/icons/assembling-machine-7.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-7.png rename to MilesBobsExpansion/graphics/icons/assembling-machine-7.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-8.png b/MilesBobsExpansion/graphics/icons/assembling-machine-8.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-8.png rename to MilesBobsExpansion/graphics/icons/assembling-machine-8.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-9.png b/MilesBobsExpansion/graphics/icons/assembling-machine-9.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/assembling-machine-9.png rename to MilesBobsExpansion/graphics/icons/assembling-machine-9.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/electric-furnace-3.png b/MilesBobsExpansion/graphics/icons/electric-furnace-3.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/electric-furnace-3.png rename to MilesBobsExpansion/graphics/icons/electric-furnace-3.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/electric-steel-furnace.png b/MilesBobsExpansion/graphics/icons/electric-steel-furnace.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/electric-steel-furnace.png rename to MilesBobsExpansion/graphics/icons/electric-steel-furnace.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/electronics-machine-4.png b/MilesBobsExpansion/graphics/icons/electronics-machine-4.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/electronics-machine-4.png rename to MilesBobsExpansion/graphics/icons/electronics-machine-4.png diff --git a/MilesBobsExpansion_9.6.1/graphics/icons/electronics-machine-5.png b/MilesBobsExpansion/graphics/icons/electronics-machine-5.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/icons/electronics-machine-5.png rename to MilesBobsExpansion/graphics/icons/electronics-machine-5.png diff --git a/MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-7.png b/MilesBobsExpansion/graphics/technology/assembling-machine-7.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-7.png rename to MilesBobsExpansion/graphics/technology/assembling-machine-7.png diff --git a/MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-8.png b/MilesBobsExpansion/graphics/technology/assembling-machine-8.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-8.png rename to MilesBobsExpansion/graphics/technology/assembling-machine-8.png diff --git a/MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-9.png b/MilesBobsExpansion/graphics/technology/assembling-machine-9.png similarity index 100% rename from MilesBobsExpansion_9.6.1/graphics/technology/assembling-machine-9.png rename to MilesBobsExpansion/graphics/technology/assembling-machine-9.png diff --git a/MilesBobsExpansion_9.6.1/info.json b/MilesBobsExpansion/info.json similarity index 100% rename from MilesBobsExpansion_9.6.1/info.json rename to MilesBobsExpansion/info.json diff --git a/MilesBobsExpansion_9.6.1/locale/en/config.cfg b/MilesBobsExpansion/locale/en/config.cfg similarity index 100% rename from MilesBobsExpansion_9.6.1/locale/en/config.cfg rename to MilesBobsExpansion/locale/en/config.cfg diff --git a/MilesBobsExpansion_9.6.1/locale/ru/config.cfg b/MilesBobsExpansion/locale/ru/config.cfg similarity index 100% rename from MilesBobsExpansion_9.6.1/locale/ru/config.cfg rename to MilesBobsExpansion/locale/ru/config.cfg diff --git a/MilesBobsExpansion_9.6.1/prototypes/assembly-electronics.lua b/MilesBobsExpansion/prototypes/assembly-electronics.lua similarity index 100% rename from MilesBobsExpansion_9.6.1/prototypes/assembly-electronics.lua rename to MilesBobsExpansion/prototypes/assembly-electronics.lua diff --git a/MilesBobsExpansion_9.6.1/prototypes/assembly.lua b/MilesBobsExpansion/prototypes/assembly.lua similarity index 100% rename from MilesBobsExpansion_9.6.1/prototypes/assembly.lua rename to MilesBobsExpansion/prototypes/assembly.lua diff --git a/MilesBobsExpansion_9.6.1/prototypes/electric-steel-furnace.lua b/MilesBobsExpansion/prototypes/electric-steel-furnace.lua similarity index 100% rename from MilesBobsExpansion_9.6.1/prototypes/electric-steel-furnace.lua rename to MilesBobsExpansion/prototypes/electric-steel-furnace.lua diff --git a/MilesBobsExpansion_9.6.1/thumbnail.png b/MilesBobsExpansion/thumbnail.png similarity index 100% rename from MilesBobsExpansion_9.6.1/thumbnail.png rename to MilesBobsExpansion/thumbnail.png diff --git a/Milestones/LICENSE b/Milestones/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/Milestones/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Milestones_1.3.20/README.md b/Milestones/README.md similarity index 100% rename from Milestones_1.3.20/README.md rename to Milestones/README.md diff --git a/Milestones/changelog.txt b/Milestones/changelog.txt new file mode 100644 index 00000000..2d6531ac --- /dev/null +++ b/Milestones/changelog.txt @@ -0,0 +1,475 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.3.25 +Date: 2024-03-03 + Bugfixes: + - Fixed crash when only 1 milestone was visible while using the mod setting to hide incomplete milestones. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.24 +Date: 2024-02-24 + Bugfixes: + - Fixed remote presets not loading in a new game, issue introduced with 1.3.23. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.23 +Date: 2024-02-19 + Bugfixes: + - Fixed Reset button not working properly for remote presets when loading a save file without mod changes. + - Fixed consumption milestones not being backfilled properly. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.22 +Date: 2024-01-24 + Features: + - Added new milestone types "item_consumption" and "fluid_consumption", which trigger on consumption rather than production. This has some niche uses for some modpacks. + Because of the niche use, these can't be added via the settings GUI yet. You can add them in presets or with the import feature. + - Added a player mod setting to allow hiding all incomplete milestones. + - Added a "Reset" button in the settings GUI, to reset your settings back to the auto-detected set (preset + addons). + + Changes: + - Infinite milestones marked as "hidden" will now only have the initial milestone hidden. Milestones created from the infinite milestone's completion will be visible. + - Added a small text to fill the space when no milestones are visible at all, to make it look more intentionally empty. + - Marked the selected preset name with "(Modified)" if the current set has been modified compared to the preset. + - Preset updates: + - Marked all character kills as "hidden". + - SEK2 preset: Changed science pack order to account for recent SEK2 changes. + - PyMods presets: Added Guar and Arqad Queen milestones, and fixed Phaidaisus milestones. + - IR3 preset: Fixed petrochemical generator milestone. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.21 +Date: 2023-12-26 + Features: + - Milestones presets can now mark milestones as "hidden". These milestones are still tracked but will only appear in the GUI after they are reached. + + Changes: + - Small additions to SE default presets: Added a couple hidden milestones for a couple spoilers. Removed "(No spoilers)" from the name of the presets. The name change will cause a "detected a new preset" message on save file load, but you can ignore it. + - Small additions to PyMods default presets: Added burner assembler 1 and splitter. + + Scripting: + - A custom event is now fired when a milestone is reached. Use the new remote interface to get the custom event ID: remote.call("milestones", "get_on_milestone_reached_event"). Thanks to Ziro2k for the idea and code inspiration. + - Milestones can now write reached milestones to a text file in the script output folder. This can be useful for external programs. This is off by default, check the new "Write milestones to file" player setting for details. + + Locale: + - Added Czech translation thanks to Bakendrid. + - Translation updates for French and Chinese. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.20 +Date: 2023-08-15 + Changes: + - Added plague rocket to default SE presets. + - Removed some overly verbose log lines. + + Bugfixes: + - Fixed turning off an infinite milestone in settings not actually applying the change. + - Fixed milestones added as part of an infinite milestone not editing the right milestone when trying to edit the estimation time. + + Compatibility: + - Presets provided via remote interface now have priority over default presets. This means other mods can override default presets. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.19 +Date: 2023-07-14 + Changes: + - Removed built-in Sea Block presets, in favor of Sea Block's own preset provided by their mod. + + Bugfixes: + - Fixed crash when loading a preset with invalid aliases. + + Locale: + - Added Spanish translation thanks to Frodo45127. + - Added Polish translation thanks to wuka. + - Updated Japanese translation thanks to YAMATO_Hajime. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.18 +Date: 2023-05-20 + Features: + - Added "Disable milestone notifications" mod setting which turns off chat notifications. This is a player setting, so each player can have it set the way they want. + + Locale: + - Updated Japanese translation thanks to nojio. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.17 +Date: 2023-04-09 + Bugfixes: + - Fix remote presets disappearing from the selectable preset list when changing mods in the middle of a game (on configuration changed). + - Remove duplicated plastic bar milestone from Sea Block presets. + + Locale: + - Ukrainian translation thanks to Met en Bouldry. + - Chinese translation update thanks to luaotix. + - German translation update thanks to knniDE. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.16 +Date: 2023-01-31 + Bugfixes: + - Fix crash when reaching a milestone near the end of the set, when several milestones are checked per tick. + + Locale: + - Russian translation update thanks to Shadow_Man. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.15 +Date: 2023-01-28 + Bugfixes: + - Fix crash caused by milestones for invalid items not being removed if they are in the last position of the set. + - Fix Bob's Modules preset addon being loaded when using Bob's Enemies instead. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.14 +Date: 2023-01-27 + Changes: + - Tweaks to IR3 preset (Added Heavy picket, graphene, and electrum. Replaced special projects pack end goal count with a technology milestone, since productivity in labs can actually make the required number of packs variable). + - Tweaks to PyMods presets (Added Dig-o-saurus, Thikat, Caravan, and Oculus) + - Large changes to the Sea Block presets with input from the Sea Block community. + - Add preset addon for the "Cat" mod. + - As usual you will need to refresh your milestone set yourself if you are already in the middle of a playthrough (Settings -> Switch to Empty -> Switch to the preset you want -> Confirm). + + Optimizations: + - Milestone checks are now spread over every tick of the frequency interval (the "Ticks between each check" mod setting) instead of happening all at once. This should solve spikes of performance hit when playing with a large amount of milestones. + + Compatibility: + - You can now have your mod provide presets and preset addons by implementing a `milestones_presets` or `milestones_preset_addons` remote interface. + Please check out the comments in presets.lua and preset_addons.lua for more details. + + Bugfixes: + - Fix GUI sometimes being too wide for the screen when using Compact mode. (Again!) + - Fix settings GUI "Add X" buttons states being wrong when changing preset. + - Fix settings GUI selection state being wrong after moving a selected line. + - Fix issue where technologies that end with a number (e.g. "Electronics 3") would be considered researched during backfilling even if they were not. + + Locale: + - Chinese translation thanks to luaotix. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.13 +Date: 2022-12-26 + Changes: + - Add presets for Industrial Revolution 3, with or without the "Special Projects" add-on. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.12 +Date: 2022-11-15 + Bugfixes: + - Fix GUI sometimes being too wide for the screen when using Compact mode. + Also, the GUI will now try to fit within 90% of the screen width instead of trying to use as much of the screen as possible. + + Locale: + - Locale updates for 1.3.10 strings. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.11 +Date: 2022-11-09 + Bugfixes: + - Fix settings page Add/Delete buttons that were still enabled after deleting selected milestones, which could cause a crash. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.10 +Date: 2022-11-06 + Changes: + - Update Nullius preset to account for boxed versions of milestones in the "Resources" group (ingots, processors, glass). + - GUI improvements: + - Milestones from different groups are now aligned properly. + - Improved the look of the scroll bars that appear when using large milestones set. + - In the settings page, you can now add milestones directly at a specific position. + - In the settings page, you can now delete multiple milestones at the same time. + - In the settings page, you can now shift-click arrows to move 5 places at a time. + + Bugfixes: + - Fix estimations not being shown when the "List by group" setting was disabled. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.9 +Date: 2022-10-19 + Changes: + - Update PyMods presets to account for changes in the latest PyMods versions. + Now comes with 4 presets depending on how many PyMods you are using: Full, Full except AE, Medium, and Short. + As usual you will need to refresh your milestone set yourself if you are already in the middle of a PyMods playthrough (Settings -> Switch to Empty -> Switch to the preset you want -> Confirm). + - Add preset addon for Fluidic Power (Thanks to stringweasel) + +--------------------------------------------------------------------------------------------------- +Version: 1.3.8 +Date: 2022-09-13 + Features: + - Add beta support for item aliases. You can indicate to Milestones that an item is worth a certain amount of another item. + - This is designed for Nullius's science, which can be created individually or as a "box" item worth several science packs. Up until now the Nullius milestones were not accurate because of these 2 ways to create science. + - For now there is no way to create aliases via the settings GUI. You can modify aliases using the export/import feature. + - Add mod setting to hide the "Β±Xm" estimations. + + Changes: + - Update Nullius preset to use aliases for science boxes. If you are already using the Nullius preset, you can update it in the settings (Switch to "Empty" preset, switch back to "Nullius", confirm). + - Add preset for K2+248k and tweak 248k preset (Thanks to quindao) + - GUI will now center when opening import/export window. + - Add requester chest to Space Exploration presets. + + Bugfixes: + - Fix crash when trying to import an empty string. + - Attempt to fix some cases where the display GUI is still growing beyond screen borders (because of the "Β±Xm" estimations). + +--------------------------------------------------------------------------------------------------- +Version: 1.3.7 +Date: 2022-08-21 + Changes: + - Add preset addons for Bob's Modules, Brass Tacks, and If I Had A Nickel (Thanks to Xynariz) + - Tweak some preset addons. + + Bugfixes: + - Fix crash when the GUI was cleared by another mod or command (again!). + + Locale: + - German translation thanks to knniDE. + - Adjustment of some whitespace after strings (e.g. after "Completed at"). + +--------------------------------------------------------------------------------------------------- +Version: 1.3.6 +Date: 2022-08-15 + Changes: + - The "created X items at" chat message will now format quantities of items starting at 10000 (as in, "10k" instead of 10000). + + Bugfixes: + - Fix main GUI that could be too tall and not wide enough in some cases. + - Fix GUI losing its position on every save file load. + + Locale: + - Japanese translation thanks to nojio. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 2022-07-11 + Changes: + - The main GUI will now adjust its number of columns to avoid going beyond screen borders. + - Remove β“˜ symbols from setting names now that Factorio does it automatically. + - Add core fragments to SE presets. + + Bugfixes: + - Fix crash when estimating milestones that were completed 1000+ hours ago. + + Locale: + - Russian translation thanks to Shadow_Man. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2022-06-30 + Changes: + - More changes to SE and SE+K2 presets (I forgot the new science packs) + +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 2022-06-30 + Changes: + - Keep entity selection box in the settings menu for invalid entries. This lets you fix broken sets more easily. + + Bugfixes: + - Fix crash when milestones tried to backfill time for an item that no longer exists after mod changes. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 2022-06-30 + Features: + - Add preset addons for "BZ Graphite & Diamonds" and "Leighzer's Uranium Innovations". (Thanks to nihilistzsche!) + + Changes: + - Update SE presets for SE 0.6 + +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 2022-06-13 + Features: + - Add preset for SE+K2+248k. + - Add preset addons for "Science Pack Galore" and various BZ mods. (Thanks to nihilistzsche for both!) + + Changes: + - Tweaks to Nullius preset to account for some boxed science packs. (This isn't perfect, fully accounting for all boxed versions of science packs will require supporting alternate items for milestones). + + Bugfixes: + - Fix crash with mods that create items before the start of the game. + + Locale: + - Locale updates from Crowdin. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2022-06-07 + Features: + - Now requires Factorio 1.1.60 or above. + - Greatly improved estimations accuracy when added to an existing game. Milestones can now use production statistics directly to backfill completed milestones. + - Accuracy is greater for more recent completion times. Expect Β±5 minutes for 50 hours games, Β±25m for 250h, Β±1h40 for 1000h. + - Editing estimation ranges is now only available for inaccurate estimations (>1hour uncertainty), and now work by just typing the time instead of typing "x minutes ago". This makes more sense now that you won't have to copy values from production statistics. + - In existing games: Leftover estimations will be replaced with the new more accurate estimations. Estimations that had already been edited with typed-in times won't be touched. + - Add milestone groups. You can create arbitrary categories, and milestones will appear grouped under these categories. + - You can switch back to the old chronological view with the new mod setting "List by group". + - Add preset for 248k Mod (Thanks to PreLeyZero!) + + Changes: + - Updated presets to use milestone groups. Existing games won't be updated unless you reload them from the preset. + - Milestones settings can now only be changed by admins, instead of relying on "Mod Settings Changed" permissions. This seems to match with Factorio's own conditions on modifying Mod Settings. + - Changing the settings in a multiplayer game will now indicate who did the change in the chat message. + + Bugfixes: + - Fix crash when the GUI was cleared through another mod or command. + +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 2022-04-01 + Features: + - Add preset for Nullius (Thanks to Anachrony's help). + - Add preset addons for Cargo Ships, Spidertron Extended, Spidertron Tiers + + Changes: + - Tweaks to various presets, most notably for Sea Block. + + Locale: + - New translations from Crowdin. If you would like to translate this mod please find FactorioMilestones here: https://crowdin.com/project/factorio-mods-localization + - French translation by yours truly. + - Korean translation thanks to x2605. + +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2022-02-20 + Bugfixes: + - Fix infinite milestone not creating next step when backfilling a milestone with an estimation range. + - Fix infinite milestones affecting the loaded set when it shouldn't. + + Changes: + - Change all character kills in presets to increase by x5 instead of x2. + +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2022-02-20 + Features: + - Infinite Milestones: + You can now set a "next" value for a milestone. When that milestone is completed, a new milestone is automatically created at a higher count, depending on that "next" value. + Example: "1000 science packs, next: x10" would create "10000 science packs" when completed, then "100000 science packs", etc. You can also use "+" for adding instead of multiplying. + - You can now export or import encoded milestone sets (for a shorter, but non-human-readable string). + - New "Compact list" Player Mod Setting, removes the "Completed at:" labels from the main view. Defaults to off. + + Changes: + - Change presets to use infinite milestones. Existing sets won't be updated unless you reload them from the preset. + - Labels now say "Killed at" and "Researched at" for kills and technologies + - Replace "cargo rocket section" with "cargo rocket" in SE and SE+K2 presets + +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2022-01-16 + Changes: + - Add "Advanced pickaxe" to K2 and SE+K2 presets + - Add debug commands to help debug and fix future crashes (use /h in-game to see them) + + Bugfixes: + - Fix kill milestones unable to be imported + - Attempt to fix a rare crash when a player's GUI becomes invalid for an unknown reason + +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2021-11-29 + Bugfixes: + - Fix crash when using research milestones + +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2021-11-28 + Features: + - Add "Initial preset" mod setting. You can paste an exported preset string that Milestones will load at the beginning of every new game. Useful for speedrunning practice. + - Add "Kill" milestone type. Used to track biter kills (or any other kills, such as killing yourself with locomotives :) ) + - Add preset addons for Bob's Enemies, Armoured Biters, Cold Biters, Explosive Biters + + Changes: + - Add kill milestones to existing presets + + Bugfixes: + - Fix crash when GUI was opened after being closed in some way that didn't trigger the on_gui_closed event + - Fix crash when using the import feature, introduced in 1.0.10 + +--------------------------------------------------------------------------------------------------- +Version: 1.0.10 +Date: 2021-11-20 + Changes: + - Add missing holmium ingot to SE+K2 preset + + Bugfixes: + - Import-export window now gets a scrollbar instead of expanding beyond the screen for large milestone lists + - Fix issues with multiple forces, where new forces could have completion times from existing forces, and players switching forces could erase completion times. This fixes issues with Editor Extensions's testing lab mode. + +--------------------------------------------------------------------------------------------------- +Version: 1.0.9 +Date: 2021-10-17 + Bugfixes: + - Fix issue where the completion time for technology milestones was not being saved properly. If you had completed technology milestones, updating to this version will allow you to enter those lost times yourself. + - Fix crash when going to settings after removing the mod that was currently selected as preset. + +--------------------------------------------------------------------------------------------------- +Version: 1.0.8 +Date: 2021-10-03 + Bugfixes: + - Fix crash when right-clicking an item selector in the settings menu + +--------------------------------------------------------------------------------------------------- +Version: 1.0.7 +Date: 2021-08-29 + Features: + - Add preset addon for Bio Industries (Thanks to snouz!) + - Add preset addon for Omnienergy and Omniscience (Thanks to NihlisticPandemonium!) + + Bugfixes: + - Fix crash that could occur in some cases in multiplayer + +--------------------------------------------------------------------------------------------------- +Version: 1.0.6 +Date: 2021-08-03 + Bugfixes: + - Fix another crash when loading from old version (oops!) + +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 +Date: 2021-08-01 + Bugfixes: + - Fix crash when loading from old version + +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 2021-08-01 + Features: + - Add settings import/export. Useful if you want to mass-edit your milestones in a text editor, or quickly import something from another save. + - Add preset addons: Small mods that can be used with any other major mod can now have preset milestones, which will be detected and added at the end of the major mod preset. + - Add preset addons: Power Armor Mk3, Space Extension (SpaceX) + + Changes: + - Add missing holmium ingot to SE preset + +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 2021-06-27 + Bugfixes: + - Fix multiplayer desync when a player joins before Milestones' intro message + +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 2021-06-23 + Features: + - Add presets: Industrial Revolution 2, Seablock + + Changes: + - Tweak Angel presets to account for changes when using "industry overhaul" + + Bugfixes: + - Fix crash when trying to confirm settings with invalid items + +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2021-06-13 + Features: + - Add presets: K2, SE+K2, Bob's, Angel's, B&A, Pyanodon's (with and without AlienLife) + + Changes: + - Fix missing items in Vanilla presets + - Add "significant data" to SE preset + +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2021-06-06 + Features: + - Initial release diff --git a/Milestones/control.lua b/Milestones/control.lua new file mode 100644 index 00000000..31dab655 --- /dev/null +++ b/Milestones/control.lua @@ -0,0 +1,125 @@ +require("scripts.commands") +require("scripts.remote_interface") +require("scripts.tracker") +require("scripts.gui") +require("scripts.presets_loader") +require("scripts.milestones_util") +require("scripts.util") +require("scripts.global_init") +local migrations = require("scripts.migrations") + +local migration = require("__flib__.migration") + + +script.on_init(function() + global.delayed_chat_messages = {} + global.forces = {} + global.players = {} + global.milestones_check_frequency_setting = settings.global["milestones_check_frequency"].value + + initial_preset_string = settings.global["milestones_initial_preset"].value + if initial_preset_string ~= "" then + initial_preset, err = convert_and_validate_imported_json(initial_preset_string) + if initial_preset == nil then + table.insert(global.delayed_chat_messages, {"milestones.message_invalid_initial_preset"}) + table.insert(global.delayed_chat_messages, err) + else + global.current_preset_name = "Imported" + global.loaded_milestones = initial_preset + table.insert(global.delayed_chat_messages, {"milestones.message_loaded_initial_preset"}) + end + end + + fetch_remote_presets() + add_remote_presets_to_preset_tables() + load_presets() + if initial_preset == nil then + load_preset_addons() + end + initialize_alias_table() + + -- Initialize for existing forces in existing save file + local backfilled_anything = false + for _, force in pairs(game.forces) do + local backfilled_anything_from_this_force = initialize_force_if_needed(force) + backfilled_anything = backfilled_anything or backfilled_anything_from_this_force + end + if backfilled_anything then + table.insert(global.delayed_chat_messages, {"milestones.message_loaded_into_exiting_game"}) + end + remove_invalid_milestones_all_forces() + + -- Initialize for existing players in existing save file + for _, player in pairs(game.players) do + initialize_player(player) + end + + if next(global.delayed_chat_messages) ~= nil then + create_delayed_chat() + end +end) + +script.on_load(function() + if global.delayed_chat_messages ~= nil and next(global.delayed_chat_messages) ~= nil then + create_delayed_chat() + end + add_remote_presets_to_preset_tables() +end) + +script.on_event(defines.events.on_force_created, function(event) + initialize_force_if_needed(event.force) +end) + +script.on_event(defines.events.on_player_changed_force, function(event) + local player = game.get_player(event.player_index) + initialize_force_if_needed(player.force) + refresh_gui_for_player(player) +end) + +script.on_event(defines.events.on_forces_merged, function(event) + clear_force(event.source_name) +end) + +script.on_event(defines.events.on_player_created, function(event) + local player = game.players[event.player_index] + initialize_player(player) + if global.forces[player.force.name] == nil then -- Possible if new player is added to empty force e.g. vanilla freeplay + initialize_force_if_needed(player.force) + end +end) + +script.on_event(defines.events.on_player_removed, function(event) + clear_player(event.player_index) +end) + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + local setting_name = event.setting + if setting_name == "milestones_check_frequency" then + global.milestones_check_frequency_setting = settings.global["milestones_check_frequency"].value + elseif setting_name == "milestones_compact_list" + or setting_name == "milestones_list_by_group" + or setting_name == "milestones_show_estimations" + or setting_name == "milestones_show_incomplete" then + refresh_gui_for_player(game.get_player(event.player_index)) + end +end) + + +script.on_configuration_changed(function(event) + -- Run migrations for version changes + migration.on_config_changed(event, migrations) + + if next(event.mod_changes) ~= nil then + fetch_remote_presets() + -- on_load is called before on_configuration_changed so we have to redo add_remote_presets_to_preset_tables here + add_remote_presets_to_preset_tables() + reload_presets() + end + remove_invalid_milestones_all_forces() + + -- We also do this here because for some reason on_nth_tick sometimes doesn't work in on_init + -- I don't know why + if next(global.delayed_chat_messages) ~= nil then + create_delayed_chat() + end +end) diff --git a/Milestones/data.lua b/Milestones/data.lua new file mode 100644 index 00000000..741a2c54 --- /dev/null +++ b/Milestones/data.lua @@ -0,0 +1,200 @@ +local data_util = require("__flib__.data-util") +local styles = data.raw["gui-style"].default + +styles.milestones_settings_outer_flow = { + type = "vertical_flow_style", + horizontal_align = "center", + vertical_spacing = 8, + padding = 15 +} + +styles.milestones_settings_scroll = { + type = "scroll_pane_style", + parent = "flib_naked_scroll_pane", + padding = 0 +} + +styles.milestones_deep_frame_in_shallow_frame = { + type = "frame_style", + parent = "deep_frame_in_shallow_frame", + left_padding = 8, + right_padding = 8, + top_padding = 4, + bottom_padding = 4, + minimal_width = 400 +} + +styles.milestones_horizontal_flow_center = { + type = "horizontal_flow_style", + parent = "horizontal_flow", + vertical_align = "center", +} + +styles.milestones_horizontal_flow_big_settings = { + type = "horizontal_flow_style", + parent = "milestones_horizontal_flow_center", + minimal_width = 150, + horizontal_spacing = 8, +} + +styles.milestones_horizontal_flow_big_display = { + type = "horizontal_flow_style", + parent = "milestones_horizontal_flow_big_settings", + left_padding = 16, + right_padding = 16 +} + +styles.milestones_table_style = { + type = "table_style", + horizontal_spacing = 0 +} + +styles.milestones_small_button = { + type = "button_style", + parent = "frame_button", + width = 16, + height = 16 +} + +styles.milestones_stretchable_button = { + type = "button_style", + parent = "button", + minimal_width = 16, + maximal_width = 200 +} + +styles.milestones_grey_button = { + type = "button_style", + parent = "tool_button", + width = 24, + height = 24, + padding = 0 +} + +styles.milestones_selected_grey_button = { + type = "button_style", + parent = "flib_selected_tool_button", + width = 24, + height = 24, + padding = 0 +} + +styles.milestones_confirm_button = { + type = "button_style", + parent = "tool_button_green", + width = 24, + height = 24, + padding = 0 +} + +styles.milestones_empty_button = { + type = "empty_widget_style", + width = 16, + height = 16 +} + +styles.milestones_small_dropdown = { + type = "dropdown_style", + minimal_width = 75 +} + +styles.milestones_small_textfield = { + type = "textbox_style", + width = 70, + natural_width = 70 +} + +styles.milestones_import_export_textbox = { + type = "textbox_style", + width = 600, + minimal_height = 300 +} + +styles.milestones_very_short_textfield = { + type = "textbox_style", + width = 40 +} + +styles.milestones_very_short_spacer = { + type = "empty_widget_style", + width = 40 +} + +styles.milestones_line_left = table.deepcopy(styles.line) +styles.milestones_line_left.border.right_end = styles.line.border.horizontal_line + +styles.milestones_line_right = table.deepcopy(styles.line) +styles.milestones_line_right.border.left_end = styles.line.border.horizontal_line + +styles.milestones_line_center = table.deepcopy(styles.line) +styles.milestones_line_center.border.right_end = styles.line.border.horizontal_line +styles.milestones_line_center.border.left_end = styles.line.border.horizontal_line + + +data:extend{ + { + type = "custom-input", + name = "milestones_toggle_gui", + key_sequence = "CONTROL + ALT + M", + order = "a" + }, + { + type = "custom-input", + name = "milestones_confirm_settings", + key_sequence = "", + linked_game_control = "confirm-gui" + }, + { + type = "custom-input", + name = "milestones_cancel_settings", + key_sequence = "", + linked_game_control = "toggle-menu" + } +} + +local shortcut_icon = "__Milestones__/graphics/shortcut-icon.png" +data:extend{ + { + type = "shortcut", + name = "milestones_toggle_gui", + icon = data_util.build_sprite(nil, {0,0}, shortcut_icon, 32, 2), + disabled_icon = data_util.build_sprite(nil, {48,0}, shortcut_icon, 32, 2), + small_icon = data_util.build_sprite(nil, {0,32}, shortcut_icon, 24, 2), + disabled_small_icon = data_util.build_sprite(nil, {36,32}, shortcut_icon, 24, 2), + associated_control_input = "milestones_toggle_gui", + toggleable = true, + action = "lua" + } +} + +-- Sprites +local toolbar_icons = "__Milestones__/graphics/toolbar-icons.png" +local infinity_icon = "__Milestones__/graphics/infinity-icon.png" +local arrows = "__Milestones__/graphics/arrows.png" +local item_icons = "__Milestones__/graphics/item-icons.png" +data:extend{ + data_util.build_sprite("milestones_main_icon_white", {48,0}, shortcut_icon, 32, 2), + + data_util.build_sprite("milestones_infinity_icon", {0, 0}, infinity_icon, 32), + + data_util.build_sprite("milestones_settings_black", {0, 0}, toolbar_icons, 32), + data_util.build_sprite("milestones_settings_white", {32, 0}, toolbar_icons, 32), + data_util.build_sprite("milestones_settings_disabled", {64, 0}, toolbar_icons, 32), + data_util.build_sprite("milestones_pin_black", {0, 32}, toolbar_icons, 32), + data_util.build_sprite("milestones_pin_white", {32, 32}, toolbar_icons, 32), + data_util.build_sprite("milestones_pin_disabled", {64, 32}, toolbar_icons, 32), + + data_util.build_sprite("milestones_arrow_up", {0, 0}, arrows, 16), + data_util.build_sprite("milestones_arrow_down", {16, 0}, arrows, 16), + + data_util.build_sprite("milestones_icon_item", {0, 0}, item_icons, 16), + data_util.build_sprite("milestones_icon_item_black", {0, 16}, item_icons, 16), + data_util.build_sprite("milestones_icon_fluid", {16, 0}, item_icons, 16), + data_util.build_sprite("milestones_icon_fluid_black", {16, 16}, item_icons, 16), + data_util.build_sprite("milestones_icon_technology", {32, 0}, item_icons, 16), + data_util.build_sprite("milestones_icon_technology_black", {32, 16}, item_icons, 16), + data_util.build_sprite("milestones_icon_kill", {48, 0}, item_icons, 16), + data_util.build_sprite("milestones_icon_kill_black", {48, 16}, item_icons, 16), + data_util.build_sprite("milestones_icon_group", {64, 0}, item_icons, 16), + data_util.build_sprite("milestones_icon_group_black", {64, 16}, item_icons, 16), +} diff --git a/Milestones/graphics/arrows.png b/Milestones/graphics/arrows.png new file mode 100644 index 00000000..7e780fd9 Binary files /dev/null and b/Milestones/graphics/arrows.png differ diff --git a/Milestones_1.3.20/graphics/infinity-icon.png b/Milestones/graphics/infinity-icon.png similarity index 100% rename from Milestones_1.3.20/graphics/infinity-icon.png rename to Milestones/graphics/infinity-icon.png diff --git a/Milestones/graphics/item-icons.png b/Milestones/graphics/item-icons.png new file mode 100644 index 00000000..6ad58529 Binary files /dev/null and b/Milestones/graphics/item-icons.png differ diff --git a/Milestones/graphics/shortcut-icon.png b/Milestones/graphics/shortcut-icon.png new file mode 100644 index 00000000..e1bee4b1 Binary files /dev/null and b/Milestones/graphics/shortcut-icon.png differ diff --git a/Milestones/graphics/toolbar-icons.png b/Milestones/graphics/toolbar-icons.png new file mode 100644 index 00000000..b0651c4d Binary files /dev/null and b/Milestones/graphics/toolbar-icons.png differ diff --git a/Milestones/info.json b/Milestones/info.json new file mode 100644 index 00000000..ac2a27c0 --- /dev/null +++ b/Milestones/info.json @@ -0,0 +1,13 @@ +{ + "name": "Milestones", + "version": "1.3.25", + "title": "Milestones", + "author": "Wiwiweb", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.60", "flib >= 0.7.0"], + "package": { + "git_publish_branch": "main", + "removeZipAfterPublish": true, + "ignore": ["*.mp4"] + } +} diff --git a/Milestones/locale/en/milestones.cfg b/Milestones/locale/en/milestones.cfg new file mode 100644 index 00000000..ead00432 --- /dev/null +++ b/Milestones/locale/en/milestones.cfg @@ -0,0 +1,118 @@ +[mod-name] +Milestones=Milestones + +[mod-description] +Milestones=Keep track of your progress by finding out how fast you created key items. Reward your brain on each step of a long playthrough, look back on your factory's history, compare with your friends, or challenge yourself.\nSupports any list of items and comes with presets for popular big mods. Can be added to existing games. + +[mod-setting-name] +milestones_check_frequency=Ticks between each check +milestones_initial_preset=Initial preset +milestones_compact_list=Compact list +milestones_list_by_group=List by group +milestones_show_estimations=Show estimations +milestones_show_incomplete=Show incomplete milestones +milestones_disable_chat_notifications=Disable milestone notifications +milestones_write_file=Write milestones to file + +[mod-setting-description] +milestones_check_frequency=The mod will wait this many ticks between each completion check.\nLower this if you care about time precision, raise if you want less performance impact.\nIf you set this to less than 60, the GUI will also show milliseconds. +milestones_initial_preset=Initial preset loaded at the start of a map. Has no effect on existing games. Use Milestones' "export" feature in-game to get a string that you can paste here. +milestones_compact_list=Removes the "Completed at" labels before each time. +milestones_list_by_group=If checked, milestones will be grouped together in categories.\nIf unchecked, all milestones will be listed together chronologically. +milestones_show_estimations=If checked, milestone times that were estimated from production history will show the estimation precision after the time (Looks like "(Β±5m)"). +milestones_show_incomplete=If checked, milestones that have not been achieved will be visible, labelled "[color=100,100,100]Incomplete[/color]". This does not affect milestones specifically marked as "hidden" in presets. +milestones_disable_chat_notifications=If checked, no chat notification will appear when a new milestone is reached. This is per-player, so it only affects you. +milestones_write_file=If checked, milestone times will be appended to a milestones-MAPSEED.txt file in the script output folder in a machine-readable format.\nThis can be useful for external programs. + +[shortcut-name] +milestones_toggle_gui=Show milestones + +[controls] +milestones_toggle_gui=Show milestones + +[milestones] +title=Milestones +incomplete_label=Incomplete +completed_label=Completed at +researched_label=Researched at +killed_label=Killed at +plus_minus_minutes=(Β±__1__m) +estimation_tooltip=Estimation based on production statistics. +estimation_tooltip_technology=There is no historical data for technologies, so no estimation can be done. +invalid_entry=Invalid: +type_item=Item +type_fluid=Fluid +type_technology=Research +type_kill=Kill +type_group=Group +type_consumption=Consumption +edit_time_tooltip=Edit estimated time +edit_time_confirm=Confirm and lock-in time +edit_time_minutes=minutes ago +edit_time_hours=hours ago +edit_time_days=days ago +edit_time_exact_time=Exact time +settings_instructions=Settings +settings_disabled=Settings (Requires Admin permissions) +pin_instructions=Keep open +no_visible_milestones=(Nothing to see here yet...) + +settings_title=Milestones settings +settings_import_title=Import settings +settings_export_title=Export settings +settings_preset=Preset: +settings_imported=Imported +settings_preset_modified=(Modified) +settings_import=Import +settings_export=Export +settings_reset_preset=Reset +settings_reset_preset_tooltip=Reset your milestones set to the auto-detected default.\nThis can be useful if you add or update mods and want to use the new default. +settings_export_encoded=Encoded: +settings_import_description=Paste a plain JSON string or an encoded string. +settings_back=Back +settings_confirm=Confirm +settings_alias=Alias +settings_add_something=Add __1__ +settings_quantity_tooltip=Quantity +settings_infinity_button_tooltip=Infinite milestone: Completing this milestone will create a new one with a higher quantity. +settings_next_textfield_tooltip=Formula for the next milestone. Example: "x10" or "+5". +settings_arrow_tooltip=__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ to move 5 at a time. +settings_checkbox_tooltip=Select to delete this milestone or to add a new milestone below it.\n__CONTROL_STYLE_BEGIN__Control-click__CONTROL_STYLE_END__ to select multiple, __CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ to select a range. +settings_add_tooltip=Add a new __1__ milestone under the selected milestone. +settings_add_group=Add a new group under the selected milestone. +settings_delete_tooltip=Delete all selected milestones. + +message_loaded_presets=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] is using the auto-detected preset: [color=green]__1__[/color]. Change it in the settings (__CONTROL__milestones_toggle_gui__). +message_loaded_initial_preset=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] successfully loaded the preset from Mod Settings. +message_loaded_preset_addons_singular=[img=milestones_main_icon_white] Also added milestones from this mod: [color=green]__1__[/color]. +message_loaded_preset_addons_plural=[img=milestones_main_icon_white] Also added milestones from these mods: [color=green]__1__[/color]. +message_loaded_into_exiting_game=[img=milestones_main_icon_white] Completion times for already-completed milestones have been backfilled using production statistics. +message_reloaded_presets_singular=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] found a new preset: [color=green]__1__[/color]. Go to settings to use it (__CONTROL__milestones_toggle_gui__). +message_reloaded_presets_plural=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] found new presets: [color=green]__1__[/color]. Go to settings to use one (__CONTROL__milestones_toggle_gui__). +message_settings_changed=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] settings changed! +message_settings_changed_multiplayer=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] settings changed by __1__! +message_settings_backfilled=Completion times for new milestones were backfilled using production statistics. +message_milestone_reached_item_first=[img=milestones_main_icon_white] [font=default-large-bold]Created the first [color=green][img=__1__]__2__[/color] at [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_item_more=[img=milestones_main_icon_white] [font=default-large-bold]Created [color=green]__1__ [img=__2__]__3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_first=[img=milestones_main_icon_white] [font=default-large-bold]Consumed the first [color=green][img=__1__]__2__[/color] at [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_more=[img=milestones_main_icon_white] [font=default-large-bold]Consumed [color=green]__1__ [img=__2__]__3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_first=[img=milestones_main_icon_white] [font=default-large-bold]Killed the first [color=green][img=__1__]__2__[/color] at [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_more=[img=milestones_main_icon_white] [font=default-large-bold]Killed [color=green]__1__ [img=__2__]__3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_technology=[img=milestones_main_icon_white] [font=default-large-bold]Researched [color=green][img=__1__]__2____3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] +message_settings_permission_denied=[color=red]Cannot change Milestones settings. You need Admin permissions.[/color] +message_invalid_import_json=[color=red]Invalid import string. This string is not a valid JSON string or encoded string.[/color] +message_invalid_import_type=[color=red]Invalid import string. Invalid type: [/color] +message_invalid_import_quantity=[color=red]Invalid import string. Invalid quantity: [/color] +message_invalid_import_next=[color=red]Invalid import string. Invalid next value: [/color] +message_invalid_import_missing_field=[color=red]Invalid import string. Missing field: [/color] +message_invalid_next=[color=red]Invalid next value: [/color] +message_invalid_initial_preset=[color=red]Milestones failed to load the initial preset from Mod Settings and will fall back to auto-detection. Error was:[/color] +message_invalid_item=[color=red]Milestones removed an invalid item from the list of milestones: __1__[/color] + +fluidic_power_tooltip=Generate __1__ of electric energy. + +[milestones.commands] +debug-print-forces=- Print the mod's internal global table, for debugging purposes. +debug-print-loaded-milestones=- Print the json of loaded milestones. Same as the "export" string available in settings. +reinitialize-gui=- Reset the mod's internal variables related to the GUI, only for the player using the command. Try this if you experience GUI-related crashes. +reinitialize-global=- Reset all of the mod's internal variables (except achieved milestones) for all players. Try this as a last resort. \ No newline at end of file diff --git a/Milestones/locale/ru/milestones.cfg b/Milestones/locale/ru/milestones.cfg new file mode 100644 index 00000000..31ac31bd --- /dev/null +++ b/Milestones/locale/ru/milestones.cfg @@ -0,0 +1,119 @@ +[mod-name] +Milestones=Milestones (Π­Ρ‚Π°ΠΏΡ‹) + +[mod-description] +Milestones=Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° своим прогрСссом, узнавая, ΠΊΠ°ΠΊ быстро Π²Ρ‹ создавали ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты. Π’ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ свой ΠΌΠΎΠ·Π³ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ прохоТдСния, ΠΎΠ³Π»ΡΠ΄Ρ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π°Π·Π°Π΄ Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ своСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, сравнивайтС с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ ΠΈΠ»ΠΈ бросайтС Π²Ρ‹Π·ΠΎΠ² самому сСбС.\nΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ любой список ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΈ поставляСтся с прСсСтами для популярных Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ². МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. + +[mod-setting-name] +milestones_check_frequency=Π’ΠΈΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ +milestones_initial_preset=ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ прСдустановки +milestones_compact_list=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ список +milestones_list_by_group=Бписок ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ +milestones_show_estimations=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ +milestones_show_incomplete=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Π΅ этапы +milestones_disable_chat_notifications=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ увСдомлСния ΠΎΠ± этапах +milestones_write_file=Π—Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ этапы Π² Ρ„Π°ΠΉΠ» + +[mod-setting-description] +milestones_check_frequency=Мод Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ это количСство Ρ‚ΠΈΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этапа.\nΠ£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π²Ρ‹ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ΡΡŒ ΠΎ точности Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.\nЕсли Π²Ρ‹ установитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΅ 60, графичСский интСрфСйс Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ миллисСкунды. +milestones_initial_preset=ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ установки, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹. НС влияСт Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ «экспорта этапов» Π² ΠΈΠ³Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сюда. +milestones_compact_list=Π£Π±ΠΈΡ€Π°Π΅Ρ‚ строку "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π²" ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. +milestones_list_by_group=Если ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, этапы Π±ΡƒΠ΄ΡƒΡ‚ сгруппированы ΠΏΠΎ катСгориям.\nЕсли Ρ„Π»Π°ΠΆΠΎΠΊ снят, всС этапы Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны вмСстС хронологичСски. +milestones_show_estimations=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, врСмя этапа, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ†Π΅Π½Π΅Π½ΠΎ ΠΈΠ· истории производства, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ послС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π² Π²ΠΈΠ΄Π΅ "(Β±5ΠΌ)"). +milestones_show_incomplete=Если ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Ρ‚ΠΎ этапы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ достигнуты, Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ "[color=100,100,100]ΠΠ΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅[/color]". Π­Ρ‚ΠΎ Π½Π΅ влияСт Π½Π° этапы, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ скрытыС Π² прСдустановках. +milestones_disable_chat_notifications=Если Ρ„Π»Π°ΠΆΠΎΠΊ установлСн, ΠΏΡ€ΠΈ достиТСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ этапа ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² Ρ‡Π°Ρ‚Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ. Настройка "для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°", поэтому ΠΎΠ½Π° влияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вас. +milestones_write_file=Если Ρ„Π»Π°ΠΆΠΎΠΊ установлСн, врСмя этапов Π±ΡƒΠ΄Π΅Ρ‚ записано Π² Ρ„Π°ΠΉΠ» "milestones-MAPSEED.txt" Π² ΠΏΠ°ΠΏΠΊΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° скриптов Π² ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.\nΠ­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. + +[shortcut-name] +milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ этапы + +[controls] +milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ этапы + +[milestones] +title=Π­Ρ‚Π°ΠΏΡ‹ +incomplete_label=НС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ +completed_label=Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π² +researched_label=ИсслСдовано Π² +killed_label=Π£Π±ΠΈΡ‚ Π² +plus_minus_minutes=(Β±__1__ ΠΌΠΈΠ½) +estimation_tooltip=ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° основС статистики производства. +estimation_tooltip_technology=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, поэтому ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. +invalid_entry=НСвСрно: +type_item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +type_fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +type_technology=ИсслСдованиС +type_kill=Убийство +type_group=Π“Ρ€ΡƒΠΏΠΏΠ° +type_consumption=ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ +edit_time_tooltip=РасчётноС врСмя +edit_time_confirm=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ врСмя +edit_time_minutes=ΠΌΠΈΠ½ΡƒΡ‚(Ρ‹) Π½Π°Π·Π°Π΄ +edit_time_hours=часов Π½Π°Π·Π°Π΄ +edit_time_days=Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ +edit_time_exact_time=Π’ΠΎΡ‡Π½ΠΎΠ΅ врСмя +settings_instructions=Настройки +settings_disabled=Настройки (Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° администратора) +pin_instructions=Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ +no_visible_milestones=(Π—Π΄Π΅ΡΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚...) + +settings_title=Настройки этапов +settings_import_title=Π˜ΠΌΠΏΠΎΡ€Ρ‚ настроСк +settings_export_title=Экспорт настроСк +settings_preset=ΠŸΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°: +settings_imported=Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ +settings_preset_modified=(ИзмСнСно) +settings_import=Π˜ΠΌΠΏΠΎΡ€Ρ‚ +settings_export=Экспорт +settings_reset_preset=Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ +settings_reset_preset_tooltip=Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ваши настройки этапов Π½Π° автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅.\nΠ­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ добавляСтС ΠΈΠ»ΠΈ обновляСтС ΠΌΠΎΠ΄Ρ‹ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. +settings_export_encoded=Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ: +settings_import_description=Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ строку JSON ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку. +settings_back=Назад +settings_confirm=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ +settings_alias=НазваниС +settings_add_something=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ __1__ +settings_quantity_tooltip=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ +settings_infinity_button_tooltip=БСсконСчный этап: Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этого этапа создаст Π½ΠΎΠ²Ρ‹ΠΉ этап с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ количСством. +settings_next_textfield_tooltip=Π€ΠΎΡ€ΠΌΡƒΠ»Π° для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ этапа. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: "x10" ΠΈΠ»ΠΈ "+5". +settings_arrow_tooltip=__CONTROL_STYLE_BEGIN__Shift-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ сразу 5. +settings_checkbox_tooltip=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот этап ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ этап ΠΏΠΎΠ΄ Π½ΠΈΠΌ.\n__CONTROL_STYLE_BEGIN__Control-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, __CONTROL_STYLE_BEGIN__Shift-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__ для Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. +settings_add_tooltip=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ этап __1__ ΠΏΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ этапом. +settings_add_group=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ этапом. +settings_delete_tooltip=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ этапы. + +message_loaded_presets=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ прСдустановку: [color=green]__1__[/color]. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Ρ‘ Π² настройках (__CONTROL__milestones_toggle_gui__). +message_loaded_initial_preset=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ прСдустановки ΠΈΠ· настроСк ΠΌΠΎΠ΄Π°. +message_loaded_preset_addons_singular=[img=milestones_main_icon_white] Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ этапы этого ΠΌΠΎΠ΄Π°: [color=green]__1__[/color]. +message_loaded_preset_addons_plural=[img=milestones_main_icon_white] Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ этапы ΠΈΠ· этих ΠΌΠΎΠ΄ΠΎΠ²: [color=green]__1__[/color]. +message_loaded_into_exiting_game=[img=milestones_main_icon_white] ВрСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… этапов Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ· статистики производства. +message_reloaded_presets_singular=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] нашли Π½ΠΎΠ²ΡƒΡŽ прСдустановку: [color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² настройки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ (__CONTROL__milestones_toggle_gui__). +message_reloaded_presets_plural=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] нашли Π½ΠΎΠ²Ρ‹Π΅ прСдустановки: [color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² настройки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… (__CONTROL__milestones_toggle_gui__). +message_settings_changed=[img=milestones_main_icon_white] Настройки [font=default-large-bold]Π­Ρ‚Π°ΠΏΠΎΠ²[/font] ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹! +message_settings_changed_multiplayer=[img=milestones_main_icon_white] Настройки [font=default-large-bold]Π­Ρ‚Π°ΠΏΠΎΠ²[/font] ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ __1__! +message_settings_backfilled=ВрСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½ΠΎΠ²Ρ‹Ρ… этапов Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ· статистики производства. +message_milestone_reached_item_first=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΎΠ·Π΄Π°Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ [color=green][img=__1__]__2__[/color] Π² [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_item_more=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΎΠ·Π΄Π°Π½ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_first=[img=milestones_main_icon_white] [font=default-large-bold]ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΠ» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ [color=green][img=__1__]__2__[/color] Π² [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_more=[img=milestones_main_icon_white] [font=default-large-bold]ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΠ» [color=green]__1__ [img=__2__]__3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_first=[img=milestones_main_icon_white] [font=default-large-bold]Π£Π±ΠΈΠ» ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ [color=green][img=__1__]__2__[/color] Π² [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_more=[img=milestones_main_icon_white] [font=default-large-bold]Π£Π±ΠΈΡ‚ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_technology=[img=milestones_main_icon_white] [font=default-large-bold]ИсслСдовано [color=green][img=__1__]__2____3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] +message_settings_permission_denied=[color=red]НСвозмоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки этапов. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€Π°Π²Π° администратора.[/color] +message_invalid_import_json=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚Π° строка Π½Π΅ являСтся допустимой строкой JSON ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строкой.[/color] +message_invalid_import_type=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСвСрный Ρ‚ΠΈΠΏ: [/color] +message_invalid_import_quantity=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСвСрноС количСство: [/color] +message_invalid_import_next=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: [/color] +message_invalid_import_missing_field=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅: [/color] +message_invalid_next=[color=red]НСвСрноС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: [/color] +message_invalid_initial_preset=[color=red]Π­Ρ‚Π°ΠΏΠ°ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ прСдустановки ΠΈΠ· настроСк ΠΌΠΎΠ΄Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ Π°Π²Ρ‚ΠΎ-ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ. Ошибка:[/color] +message_invalid_item=[color=red]Мод ΡƒΠ΄Π°Π»ΠΈΠ» нСдопустимый элСмСнт ΠΈΠ· списка этапов: __1__[/color] + +fluidic_power_tooltip=Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ __1__ элСктроэнСргии. + +[milestones.commands] +debug-print-forces=- Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΠΎΠ΄Π° для Ρ†Π΅Π»Π΅ΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. +debug-print-loaded-milestones=- Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ строку JSON Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… этапов. Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ «экспорт» Π² настройках. +reinitialize-gui=- Бброс Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π°, относящихся ΠΊ интСрфСйсу, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это Π² случаС сбоСв Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с интСрфСйсом. +reinitialize-global=- Бброс всСх Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π° (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ достигнутых этапов) для всСх ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС. + diff --git a/Milestones/locale/uk/milestones.cfg b/Milestones/locale/uk/milestones.cfg new file mode 100644 index 00000000..096ee7b2 --- /dev/null +++ b/Milestones/locale/uk/milestones.cfg @@ -0,0 +1,119 @@ +[mod-name] +Milestones=Π’Ρ–Ρ…ΠΈ + +[mod-description] +Milestones=ВідстСТуйтС свій прогрСс, Π΄Ρ–Π·Π½Π°ΡŽΡ‡ΠΈΡΡŒ, як швидко Π²ΠΈ ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Π»ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Ρ– Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. Π’ΠΈΠ½Π°Π³ΠΎΡ€ΠΎΠ΄ΠΆΡƒΠΉΡ‚Π΅ свій ΠΌΠΎΠ·ΠΎΠΊ Π½Π° ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ ΠΊΡ€ΠΎΡ†Ρ– Π΄ΠΎΠ²Π³ΠΎΠ³ΠΎ проходТСння, ΠΎΠ·ΠΈΡ€Π½Ρ–Ρ‚ΡŒΡΡ Π½Π° Ρ–ΡΡ‚ΠΎΡ€Ρ–ΡŽ своєї Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, порівняйтС Π· друзями Π°Π±ΠΎ ΠΊΠΈΠ½ΡŒΡ‚Π΅ собі Π²ΠΈΠΊΠ»ΠΈΠΊ.\nΠŸΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ” Π±ΡƒΠ΄ΡŒ-який список ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ–Π² Ρ– ΠΏΠΎΡΡ‚Π°Ρ‡Π°Ρ”Ρ‚ΡŒΡΡ Π· прСсСтами для популярних Π²Π΅Π»ΠΈΠΊΠΈΡ… ΠΌΠΎΠ΄Ρ–Π². МоТС Π±ΡƒΡ‚ΠΈ Π΄ΠΎΠ΄Π°Π½ΠΈΠΉ Π΄ΠΎ Ρ–ΡΠ½ΡƒΡŽΡ‡ΠΈΡ… Ρ–Π³ΠΎΡ€. + +[mod-setting-name] +milestones_check_frequency=Π“Π°Π»ΠΎΡ‡ΠΊΠΈ ΠΌΡ–ΠΆ коТною ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠΎΡŽ +milestones_initial_preset=ΠŸΠΎΡ‡Π°Ρ‚ΠΊΠΎΠ²Π΅ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ +milestones_compact_list=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΠΉ список +milestones_list_by_group=Бписок Π·Π° Π³Ρ€ΡƒΠΏΠ°ΠΌΠΈ +milestones_show_estimations=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ ΠΎΡ†Ρ–Π½ΠΊΠΈ +milestones_show_incomplete=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ– Π΅Ρ‚Π°ΠΏΠΈ +milestones_disable_chat_notifications=Π’ΠΈΠΌΠΊΠ½ΡƒΡ‚ΠΈ сповіщСння ΠΏΡ€ΠΎ Π΅Ρ‚Π°ΠΏΠΈ +milestones_write_file=Π—Π°ΠΏΠΈΡˆΡ–Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΡ–ΠΆΠ½Ρ– Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈ Ρƒ Ρ„Π°ΠΉΠ» + +[mod-setting-description] +milestones_check_frequency=Мод Ρ‡Π΅ΠΊΠ°Ρ‚ΠΈΠΌΠ΅ ΡΡ‚Ρ–Π»ΡŒΠΊΠΈ Ρ‚ΠΈΠΊΡ–Π² ΠΌΡ–ΠΆ коТною ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠΎΡŽ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ.\nΠ—ΠΌΠ΅Π½ΡˆΡ–Ρ‚ΡŒ Ρ†Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, якщо Π²Π°ΠΌ Π²Π°ΠΆΠ»ΠΈΠ²Π° Ρ‚ΠΎΡ‡Π½Ρ–ΡΡ‚ΡŒ часу, Π·Π±Ρ–Π»ΡŒΡˆΡ‚Π΅, якщо Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ Π·ΠΌΠ΅Π½ΡˆΠΈΡ‚ΠΈ Π²ΠΏΠ»ΠΈΠ² Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ.\nΠ―ΠΊΡ‰ΠΎ Π²ΠΈ встановитС значСння мСншС Π½Ρ–ΠΆ 60, Ρƒ Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΎΠΌΡƒ інтСрфСйсі Ρ‚Π°ΠΊΠΎΠΆ Π±ΡƒΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ мілісСкунди. +milestones_initial_preset=ΠŸΠΎΡ‡Π°Ρ‚ΠΊΠΎΠ²ΠΈΠΉ прСсСт Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΡ”Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡƒ ΠΌΠ°ΠΏΠΈ. НС Π²ΠΏΠ»ΠΈΠ²Π°Ρ” Π½Π° Ρ‰ΠΎ існує Ρ–Π³Ρ€ΠΈ. БкористайтСся Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ”ΡŽ "Скспорту" Milestones Ρƒ Π³Ρ€Ρ–, Ρ‰ΠΎΠ± ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ рядок, який ΠΌΠΎΠΆΠ½Π° вставити сюди. +milestones_compact_list=Видаляє ΠΌΡ–Ρ‚ΠΊΠΈ "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π½Π°" ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΆΠ½ΠΈΠΌ Ρ€Π°Π·ΠΎΠΌ. +milestones_list_by_group=Π―ΠΊΡ‰ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ, Π²Ρ–Ρ…ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ Π·Π³Ρ€ΡƒΠΏΠΎΠ²Π°Π½Ρ– Π·Π° катСгоріями.\nΠ―ΠΊΡ‰ΠΎ Π½Π΅ ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ, всі Π²Ρ–Ρ…ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ€Π°Ρ…ΠΎΠ²Π°Π½Ρ– Ρ€Π°Π·ΠΎΠΌ Ρƒ Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³Ρ–Ρ‡Π½ΠΎΠΌΡƒ порядку. +milestones_show_estimations=Π―ΠΊΡ‰ΠΎ ця опція встановлСна, час ΠΏΡ€ΠΎΠΌΡ–ΠΆΠ½ΠΈΡ… Π΅Ρ‚Π°ΠΏΡ–Π², які Π±ΡƒΠ»ΠΈ ΠΎΡ†Ρ–Π½Π΅Π½Ρ– Π½Π° основі історії Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π°, ΠΏΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈΠΌΠ΅ Ρ‚ΠΎΡ‡Π½Ρ–ΡΡ‚ΡŒ ΠΎΡ†Ρ–Π½ΠΊΠΈ після закінчСння часу (виглядає як "(Β±5Ρ…Π²)"). +milestones_show_incomplete=Π―ΠΊΡ‰ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ†ΡŽ ΠΎΠΏΡ†Ρ–ΡŽ, Π²Ρ–Ρ…ΠΈ, які Π½Π΅ Π±ΡƒΠ»ΠΈ досягнуті, Π±ΡƒΠ΄ΡƒΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΈΠΌΠΈ ΠΉ ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ– "[color=100,100,100]ΠΠ΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ–[/color]". Π¦Π΅ Π½Π΅ Π²ΠΏΠ»ΠΈΠ²Π°Ρ” Π½Π° Π²Ρ–Ρ…ΠΈ, ΡΠΏΠ΅Ρ†Ρ–Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ– як "ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Π½Ρ–" Ρƒ прСсСтах. +milestones_disable_chat_notifications=Π―ΠΊΡ‰ΠΎ ця опція ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½Π°, ΠΏΡ€ΠΈ досягнСнні Π½ΠΎΠ²ΠΎΡ— Π²Ρ–Ρ…ΠΈ Π² Ρ‡Π°Ρ‚Ρ– Π½Π΅ Π·'ΡΠ²Π»ΡΡ‚ΠΈΠΌΡƒΡ‚ΡŒΡΡ сповіщСння. Π¦Π΅ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ для ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ гравця, Ρ‚ΠΎΠΌΡƒ Π²ΠΎΠ½ΠΎ ΡΡ‚ΠΎΡΡƒΡ”Ρ‚ΡŒΡΡ лишС вас. +milestones_write_file=Π―ΠΊΡ‰ΠΎ ΠΏΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ, час проходТСння Π²Ρ–Ρ… Π±ΡƒΠ΄Π΅ Π΄ΠΎΠ΄Π°Π½ΠΎ Π΄ΠΎ Ρ„Π°ΠΉΠ»Ρƒ milestones-MAPSEED.txt Ρƒ Ρ‚Π΅Ρ†Ρ– Π²ΠΈΡ…Ρ–Π΄Π½ΠΈΡ… Π΄Π°Π½ΠΈΡ… скрипта Ρƒ ΠΌΠ°ΡˆΠΈΠ½ΠΎΡ‡ΠΈΡ‚Π½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ–.\nΠ¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ корисно для Π·ΠΎΠ²Π½Ρ–ΡˆΠ½Ρ–Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ. + +[shortcut-name] +milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ Π²Ρ–Ρ…ΠΈ + +[controls] +milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ Π²Ρ–Ρ…ΠΈ + +[milestones] +title=Π’Ρ–Ρ…ΠΈ +incomplete_label=НСповний +completed_label=Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π½Π° +researched_label=ДослідТСно Π½Π° +killed_label=Π’Π±ΠΈΡ‚ΠΎ Π² +plus_minus_minutes=(Β±__1__Ρ…Π²) +estimation_tooltip=ΠžΡ†Ρ–Π½ΠΊΠ° Π½Π° основі Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΡ— статистики. +estimation_tooltip_technology=Історичних Π΄Π°Π½ΠΈΡ… ΠΏΡ€ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–Ρ— Π½Π΅ΠΌΠ°Ρ”, Ρ‚ΠΎΠΌΡƒ Π½Π΅ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ ΠΆΠΎΠ΄Π½ΠΎΡ— ΠΎΡ†Ρ–Π½ΠΊΠΈ. +invalid_entry=НСдійсний: +type_item=Π’ΠΎΠ²Π°Ρ€ +type_fluid=Π Ρ–Π΄ΠΈΠ½Π° +type_technology=ДослідТСння +type_kill=Вбивство +type_group=Π“Ρ€ΡƒΠΏΠ° +type_consumption=БпоТивання +edit_time_tooltip=Π Π΅Π΄Π°Π³ΡƒΠ²Π°Ρ‚ΠΈ Ρ€ΠΎΠ·Ρ€Π°Ρ…ΡƒΠ½ΠΊΠΎΠ²ΠΈΠΉ час +edit_time_confirm=ΠŸΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΆΠ΅Π½Π½Ρ Ρ‚Π° фіксація часу +edit_time_minutes=Ρ…Π²ΠΈΠ»ΠΈΠ½ Π½Π°Π·Π°Π΄ +edit_time_hours=Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ‚ΠΎΠΌΡƒ +edit_time_days=Π΄Π½Ρ–Π² Ρ‚ΠΎΠΌΡƒ +edit_time_exact_time=Π’ΠΎΡ‡Π½ΠΈΠΉ час +settings_instructions=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ +settings_disabled=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ (ΠŸΠΎΡ‚Ρ€Ρ–Π±Π½Ρ– ΠΏΡ€Π°Π²Π° адміністратора) +pin_instructions=Π’Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈΠΌ +no_visible_milestones=(Поки Ρ‰ΠΎ Ρ‚ΡƒΡ‚ Π½Π΅ΠΌΠ°Ρ” Π½Π° Ρ‰ΠΎ дивитися...) + +settings_title=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π²Ρ–Ρ… +settings_import_title=Π†ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ +settings_export_title=Експорт Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ +settings_preset=Π¨Π°Π±Π»ΠΎΠ½: +settings_imported=Π†ΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ²Π°Π½ΠΎ +settings_preset_modified=(Π—ΠΌΡ–Π½Π΅Π½ΠΎ) +settings_import=Π†ΠΌΠΏΠΎΡ€Ρ‚ +settings_export=Експорт +settings_reset_preset=Π‘ΠΊΠΈΠ½ΡƒΡ‚ΠΈ +settings_reset_preset_tooltip=Π‘ΠΊΠΈΠ½ΡƒΡ‚ΠΈ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π²Ρ–Ρ… Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ… Π·Π° замовчуванням.\nΠ¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ корисно, якщо Π²ΠΈ Π΄ΠΎΠ΄Π°Ρ”Ρ‚Π΅ Π°Π±ΠΎ ΠΎΠ½ΠΎΠ²Π»ΡŽΡ”Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„Ρ–ΠΊΠ°Ρ†Ρ–Ρ— ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ використовувати Π½ΠΎΠ²Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π·Π° замовчуванням. +settings_export_encoded=Π—Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΎ: +settings_import_description=ВставтС Π·Π²ΠΈΡ‡Π°ΠΉΠ½ΠΈΠΉ рядок JSON Π°Π±ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΎΠ²Π°Π½ΠΈΠΉ рядок. +settings_back=Назад +settings_confirm=ΠŸΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΠΈ +settings_alias=ΠŸΡΠ΅Π²Π΄ΠΎΠ½Ρ–ΠΌ +settings_add_something=Π”ΠΎΠ΄Π°Ρ‚ΠΈ __1__ +settings_quantity_tooltip=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ +settings_infinity_button_tooltip=НСскінчСнна Π²Ρ–Ρ…Π°: Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ Ρ†ΡŒΠΎΠ³ΠΎ Π΅Ρ‚Π°ΠΏΡƒ ΠΏΡ€ΠΈΠ·Π²Π΅Π΄Π΅ Π΄ΠΎ створСння Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΅Ρ‚Π°ΠΏΡƒ Π· Π±Ρ–Π»ΡŒΡˆΠΎΡŽ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŽ. +settings_next_textfield_tooltip=Π€ΠΎΡ€ΠΌΡƒΠ»Π° для наступного Π΅Ρ‚Π°ΠΏΡƒ. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄: "x10" Π°Π±ΠΎ "+5". +settings_arrow_tooltip=__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ Ρ‰ΠΎΠ± пСрСмістити 5 Π·Π° Ρ€Π°Π·. +settings_checkbox_tooltip=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ, Ρ‰ΠΎΠ± Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ Ρ†ΡŽ Π²Ρ–Ρ…Ρƒ Π°Π±ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π½ΠΎΠ²Ρƒ Π²Ρ–Ρ…Ρƒ ΠΏΡ–Π΄ нСю.\n__CONTROL_STYLE_BEGIN__Control-click__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± Π²ΠΈΠ±Ρ€Π°Ρ‚ΠΈ Π΄Π΅ΠΊΡ–Π»ΡŒΠΊΠ°, __CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__, ΡƒΡ‚Ρ€ΠΈΠΌΡƒΡŽΡ‡ΠΈ ΠΊΠ»Π°Π²Ρ–ΡˆΡƒ Shift__, Ρ‰ΠΎΠ± Π²ΠΈΠ±Ρ€Π°Ρ‚ΠΈ Π΄Ρ–Π°ΠΏΠ°Π·ΠΎΠ½. +settings_add_tooltip=Π”ΠΎΠ΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρƒ __1__ Π²Ρ–Ρ…Ρƒ ΠΏΡ–Π΄ Π²ΠΈΠ±Ρ€Π°Π½ΠΎΡŽ Π²Ρ–Ρ…ΠΎΡŽ. +settings_add_group=Π”ΠΎΠ΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρƒ Π³Ρ€ΡƒΠΏΡƒ ΠΏΡ–Π΄ Π²ΠΈΠ±Ρ€Π°Π½ΠΎΡŽ Π²Ρ–Ρ…ΠΎΡŽ. +settings_delete_tooltip=Π’ΠΈΠ΄Π°Π»Ρ–Ρ‚ΡŒ усі Π²ΠΈΠ±Ρ€Π°Π½Ρ– Π²Ρ–Ρ…ΠΈ. + +message_loaded_presets=[img=milestones_main_icon_white] [font=default-large-bold]Π’Ρ–Ρ…ΠΈ[/font] Ρ†Π΅ використання Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½ΠΎΠ³ΠΎ прСсСта: [color=green]__1__[/color]. Π—ΠΌΡ–Π½Ρ–Ρ‚ΡŒ ΠΉΠΎΠ³ΠΎ Π² Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½ΡΡ… (__CONTROL__milestones_toggle_gui__). +message_loaded_initial_preset=[img=milestones_main_icon_white] [font=default-large-bold]Π’Ρ–Ρ…ΠΈ[/font] ΡƒΡΠΏΡ–ΡˆΠ½ΠΎ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠΈΠ»ΠΈ прСсСт Π· Mod Settings. +message_loaded_preset_addons_singular=[img=milestones_main_icon_white] Π’Π°ΠΊΠΎΠΆ Π΄ΠΎΠ΄Π°Π½ΠΎ Π²Ρ–Ρ…ΠΈ Π· Ρ†ΡŒΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π°:[color=green]__1__[/color]. +message_loaded_preset_addons_plural=[img=milestones_main_icon_white] Π’Π°ΠΊΠΎΠΆ Π΄ΠΎΠ΄Π°Π½ΠΎ Π²Ρ–Ρ…ΠΈ Π· Ρ†ΠΈΡ… ΠΌΠΎΠ΄Ρ–Π²:[color=green]__1__[/color]. +message_loaded_into_exiting_game=[img=milestones_main_icon_white] Π’Π΅Ρ€ΠΌΡ–Π½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ Π²ΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ… Π΅Ρ‚Π°ΠΏΡ–Π² Π±ΡƒΠ»ΠΈ Π·Π°ΠΏΠΎΠ²Π½Π΅Π½Ρ– Π· використанням Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΡ— статистики. +message_reloaded_presets_singular=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] знайшов Π½ΠΎΠ²ΠΈΠΉ прСсСт:[color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ–Ρ‚ΡŒ Π΄ΠΎ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ, Ρ‰ΠΎΠ± скористатися нСю(__CONTROL__milestones_toggle_gui__). +message_reloaded_presets_plural=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] знайшов Π½ΠΎΠ²Ρ– прСсСти: [color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ–Ρ‚ΡŒ Π΄ΠΎ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ, Ρ‰ΠΎΠ± використовувати ΠΎΠ΄ΠΈΠ½ Π· Π½ΠΈΡ…(__CONTROL__milestones_toggle_gui__). +message_settings_changed=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π·ΠΌΡ–Π½Π΅Π½ΠΎ! +message_settings_changed_multiplayer=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π·ΠΌΡ–Π½Π΅Π½ΠΎ Π½Π° __1__! +message_settings_backfilled=Π’Π΅Ρ€ΠΌΡ–Π½ΠΈ виконання Π½ΠΎΠ²ΠΈΡ… Π΅Ρ‚Π°ΠΏΡ–Π² Π±ΡƒΠ»ΠΈ Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½Ρ– Π½Π° основі Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΡ— статистики. +message_milestone_reached_item_first=[img=milestones_main_icon_white] [font=default-large-bold]Π‘Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ ΠΏΠ΅Ρ€ΡˆΠΈΠΉ [color=green][img=__1__]__2__[/color] Π½Π° [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_item_more=[img=milestones_main_icon_white] [font=default-large-bold]Π‘Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π½Π° [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_first=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΏΠΎΠΆΠΈΡ‚ΠΎ ΠΏΠ΅Ρ€ΡˆΠΈΠΉ [color=green][img=__1__]__2__[/color] ΠΎ [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_consumption_more=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΏΠΎΠΆΠΈΡ‚ΠΎ[color=green]__1__ [img=__2__]__3__[/color] Π·Π° Π°Π΄Ρ€Π΅ΡΠΎΡŽ[color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_first=[img=milestones_main_icon_white] [font=default-large-bold]Π’Π±ΠΈΠ² ΠΏΠ΅Ρ€ΡˆΠΎΠ³ΠΎ [color=green][img=__1__]__2__[/color] Π½Π° [color=green]__3__[img=quantity-time][/color]![/font] +message_milestone_reached_kill_more=[img=milestones_main_icon_white] [font=default-large-bold]Π’Π±ΠΈΡ‚ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π½Π° [color=green]__4__[img=quantity-time][/color]![/font] +message_milestone_reached_technology=[img=milestones_main_icon_white] [font=default-large-bold]ДослідТСно [color=green][img=__1__]__2____3__[/color] Π½Π° [color=green]__4__[img=quantity-time][/color]![/font] +message_settings_permission_denied=[color=red]НС Π²Π΄Π°Ρ”Ρ‚ΡŒΡΡ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π²Ρ–Ρ…. Π’Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½Ρ– ΠΏΡ€Π°Π²Π° адміністратора.[/color] +message_invalid_import_json=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ рядок Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ. Π¦Π΅ΠΉ рядок Π½Π΅ Ρ” допустимим рядком JSON Π°Π±ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΎΠ²Π°Π½ΠΈΠΌ рядком.[/color] +message_invalid_import_type=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ рядок Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ Ρ‚ΠΈΠΏ:[/color] +message_invalid_import_quantity=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ рядок Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ. НСвірна ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ: [/color] +message_invalid_import_next=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ рядок Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ. НСвірнС наступнС значСння: [/color] +message_invalid_import_missing_field=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΉ рядок Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ. Відсутнє ΠΏΠΎΠ»Π΅: [/color] +message_invalid_next=[color=red]ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅ наступнС значСння: [/color] +message_invalid_initial_preset=[color=red]Π’Ρ–Ρ…ΠΈ Π½Π΅ Π·ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠΈΡ‚ΠΈ ΠΏΠΎΡ‡Π°Ρ‚ΠΊΠΎΠ²ΠΈΠΉ прСсСт Π· Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ ΠΌΠΎΠ΄Π° Ρ– ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ визначСння. Π’ΠΈΠ½ΠΈΠΊΠ»Π° ΠΏΠΎΠΌΠΈΠ»ΠΊΠ°:[/color] +message_invalid_item=[color=red]Π’Ρ–Ρ…ΠΈ Π²ΠΈΠ΄Π°Π»Π΅Π½ΠΎ нСдійсний Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π·Ρ– списку Π²Ρ–Ρ…: __1__[/color] + +fluidic_power_tooltip=Π—Π³Π΅Π½Π΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ __1__ Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΈΡ‡Π½ΠΎΡ— Π΅Π½Π΅Ρ€Π³Ρ–Ρ—. + +[milestones.commands] +debug-print-forces=- Π’ΠΈΠ²Π΅Π΄Ρ–Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Ρ–ΡˆΠ½ΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†ΡŽ ΠΌΠΎΠ΄Π° для налагодТСння. +debug-print-loaded-milestones=- ВивСсти json Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠ΅Π½ΠΈΡ… Π²Ρ–Ρ…. Π’Π°ΠΊ само як Ρ– Π² рядку "export", доступному Π² Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½ΡΡ…. +reinitialize-gui=- Π‘ΠΊΠΈΠ½ΡƒΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€Ρ–ΡˆΠ½Ρ– Π·ΠΌΡ–Π½Π½Ρ– ΠΌΠΎΠ΄Π°, ΠΏΠΎΠ²'язані Π· Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΈΠΌ інтСрфСйсом, лишС для гравця, який використовує ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π‘ΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ†Π΅, якщо Ρƒ вас Π²ΠΈΠ½ΠΈΠΊΠ°ΡŽΡ‚ΡŒ Π·Π±ΠΎΡ—, ΠΏΠΎΠ²'язані Π· Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΈΠΌ інтСрфСйсом. +reinitialize-global=- Π‘ΠΊΠΈΠ½ΡŒΡ‚Π΅ всі Π²Π½ΡƒΡ‚Ρ€Ρ–ΡˆΠ½Ρ– Π·ΠΌΡ–Π½Π½Ρ– ΠΌΠΎΠ΄Π° (ΠΊΡ€Ρ–ΠΌ досягнутих Π²Ρ–Ρ…) для всіх Π³Ρ€Π°Π²Ρ†Ρ–Π². Π‘ΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ†Π΅ Π² ΠΊΡ€Π°ΠΉΠ½ΡŒΠΎΠΌΡƒ Ρ€Π°Π·Ρ–. + diff --git a/Milestones_1.3.20/presets/preset_addons.lua b/Milestones/presets/preset_addons.lua similarity index 100% rename from Milestones_1.3.20/presets/preset_addons.lua rename to Milestones/presets/preset_addons.lua diff --git a/Milestones_1.3.20/presets/presets.lua b/Milestones/presets/presets.lua similarity index 98% rename from Milestones_1.3.20/presets/presets.lua rename to Milestones/presets/presets.lua index 8c251bd6..bbeca14c 100644 --- a/Milestones_1.3.20/presets/presets.lua +++ b/Milestones/presets/presets.lua @@ -70,12 +70,12 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, - ["Space Exploration (No Spoilers)"] = { + ["Space Exploration"] = { required_mods = {"space-exploration"}, milestones = { {type="group", name="Science"}, @@ -129,6 +129,8 @@ presets = { {type="item", name="logistic-chest-requester", quantity=1}, {type="technology", name="se-spaceship", quantity=1}, {type="item", name="se-space-elevator", quantity=1}, + {type="item", name="se-dimensional-anchor", quantity=8, hidden=true}, + {type="technology", name="se-long-range-star-mapping", quantity=1, hidden=true}, {type="technology", name="se-spaceship-victory", quantity=1}, {type="group", name="Kills"}, @@ -137,7 +139,7 @@ presets = { {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, {type="item", name="se-plague-bomb", quantity=1}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -189,12 +191,12 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, - ["Space Exploration + Krastorio 2 (No Spoilers)"] = { + ["Space Exploration + Krastorio 2"] = { required_mods = {"space-exploration", "Krastorio2"}, milestones = { {type="group", name="Science"}, @@ -228,11 +230,11 @@ presets = { {type="item", name="matter-tech-card", quantity=1}, {type="item", name="se-kr-matter-science-pack-2", quantity=1}, {type="item", name="advanced-tech-card", quantity=1}, + {type="item", name="singularity-tech-card", quantity=1}, {type="item", name="se-deep-space-science-pack-1", quantity=1}, {type="item", name="se-deep-space-science-pack-2", quantity=1}, {type="item", name="se-deep-space-science-pack-3", quantity=1}, {type="item", name="se-deep-space-science-pack-4", quantity=1}, - {type="item", name="singularity-tech-card", quantity=1}, {type="item", name="se-significant-data", quantity=1000, next="x10"}, {type="group", name="Resources"}, @@ -261,6 +263,8 @@ presets = { {type="technology", name="kr-advanced-pickaxe", quantity=1}, {type="item", name="ai-core", quantity=1}, {type="fluid", name="matter", quantity=1}, + {type="item", name="se-dimensional-anchor", quantity=8, hidden=true}, + {type="technology", name="se-long-range-star-mapping", quantity=1, hidden=true}, {type="item", name="kr-intergalactic-transceiver", quantity=1}, {type="technology", name="se-spaceship-victory", quantity=1}, @@ -270,7 +274,7 @@ presets = { {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, {type="item", name="se-plague-bomb", quantity=1}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -361,7 +365,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -472,7 +476,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -511,11 +515,11 @@ presets = { {type="item", name="matter-tech-card", quantity=1}, {type="item", name="se-kr-matter-science-pack-2", quantity=1}, {type="item", name="advanced-tech-card", quantity=1}, + {type="item", name="singularity-tech-card", quantity=1}, {type="item", name="se-deep-space-science-pack-1", quantity=1}, {type="item", name="se-deep-space-science-pack-2", quantity=1}, {type="item", name="se-deep-space-science-pack-3", quantity=1}, {type="item", name="se-deep-space-science-pack-4", quantity=1}, - {type="item", name="singularity-tech-card", quantity=1}, {type="item", name="se-significant-data", quantity=1000, next="x10"}, {type="group", name="Resources"}, @@ -550,6 +554,8 @@ presets = { {type="technology", name="kr-advanced-pickaxe", quantity=1}, {type="item", name="ai-core", quantity=1}, {type="fluid", name="matter", quantity=1}, + {type="item", name="se-dimensional-anchor", quantity=8, hidden=true}, + {type="technology", name="se-long-range-star-mapping", quantity=1, hidden=true}, {type="item", name="kr-intergalactic-transceiver", quantity=1}, {type="technology", name="se-spaceship-victory", quantity=1}, @@ -604,7 +610,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -657,7 +663,7 @@ presets = { {type="item", name="rocket-part", quantity=100}, {type="group", name="Kills"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -714,7 +720,7 @@ presets = { {type="item", name="rocket-part", quantity=100}, {type="group", name="Kills"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -764,7 +770,7 @@ presets = { {type="item", name="crystal-full-harmonic", quantity=1}, {type="group", name="Kills"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -837,7 +843,7 @@ presets = { {type="item", name="solar-panel", quantity=1}, {type="group", name="Kills"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -947,7 +953,7 @@ presets = { {type="item", name="nullius-antimatter", quantity=1}, {type="group", name="Kills"}, - {type="kill", name="character", quantity=1}, + {type="kill", name="character", quantity=1, hidden=true}, } }, @@ -1025,7 +1031,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -1088,7 +1094,7 @@ presets = { {type="group", name="Power"}, {type="item", name="steam-engine", quantity=1}, - {type="item", name="steel-generator", quantity=1}, + {type="item", name="petro-generator", quantity=1}, {type="item", name="solar-panel", quantity=1}, {type="item", name="solar-array", quantity=1}, {type="item", name="uranium-fuel-cell", quantity=1}, @@ -1098,7 +1104,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, @@ -1158,7 +1164,7 @@ presets = { {type="item", name="chromium-ingot", quantity=1}, {type="item", name="platinum-ingot", quantity=1}, {type="item", name="brass-ingot", quantity=1}, - {type="item", name="carbon-foil", quantity=1}, + {type="item", name="carbon-foil", quantity=1}, {type="item", name="electrum-gem", quantity=1}, {type="item", name="electronic-circuit", quantity=1}, {type="item", name="computer-mk1", quantity=1}, @@ -1182,7 +1188,7 @@ presets = { {type="group", name="Power"}, {type="item", name="steam-engine", quantity=1}, - {type="item", name="steel-generator", quantity=1}, + {type="item", name="petro-generator", quantity=1}, {type="item", name="solar-panel", quantity=1}, {type="item", name="solar-array", quantity=1}, {type="item", name="nuclear-reactor", quantity=1}, @@ -1192,7 +1198,7 @@ presets = { {type="kill", name="big-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1}, {type="kill", name="behemoth-biter", quantity=1000, next="x10"}, - {type="kill", name="character", quantity=1, next="x5"}, + {type="kill", name="character", quantity=1, next="x5", hidden=true}, } }, } diff --git a/Milestones_1.3.20/presets/presets_pymods.lua b/Milestones/presets/presets_pymods.lua similarity index 97% rename from Milestones_1.3.20/presets/presets_pymods.lua rename to Milestones/presets/presets_pymods.lua index 5577a346..6b5a1229 100644 --- a/Milestones_1.3.20/presets/presets_pymods.lua +++ b/Milestones/presets/presets_pymods.lua @@ -157,6 +157,7 @@ presets["Full PyMods"] = { {type="item", name="tuuphra", quantity=1}, {type="item", name="yaedols", quantity=1}, {type="item", name="arqad", quantity=1}, + {type="item", name="arqad-queen", quantity=1}, {type="item", name="korlex", quantity=1}, {type="item", name="sea-sponge", quantity=1}, {type="item", name="xyhiphoe", quantity=1}, @@ -170,6 +171,7 @@ presets["Full PyMods"] = { {type="item", name="navens", quantity=1}, {type="item", name="thikat", quantity=1}, {type="item", name="bhoddos", quantity=1}, + {type="item", name="guar", quantity=1}, {type="item", name="phagnot", quantity=1}, {type="item", name="arthurian", quantity=1}, {type="item", name="cridren", quantity=1}, @@ -186,6 +188,8 @@ presets["Full PyMods"] = { {type="item", name="antelope", quantity=1}, {type="group", name="Progress"}, + {type="item", name="assembling-machine-1", quantity=1}, + {type="item", name="splitter", quantity=1}, {type="item", name="locomotive", quantity=1}, {type="item", name="mk02-locomotive", quantity=1}, {type="item", name="ht-locomotive", quantity=1}, @@ -199,7 +203,7 @@ presets["Full PyMods"] = { {type="item", name="ocula", quantity=1}, {type="item", name="crawdad", quantity=1}, {type="item", name="dingrido", quantity=1}, - {type="item", name="qaavi", quantity=1}, + {type="item", name="phadaisus", quantity=1}, {type="item", name="spidertron", quantity=1}, {type="technology", name="pyrrhic", quantity=1}, @@ -333,6 +337,7 @@ presets["Full PyMods (minus Alternative Energy)"] = { {type="item", name="tuuphra", quantity=1}, {type="item", name="yaedols", quantity=1}, {type="item", name="arqad", quantity=1}, + {type="item", name="arqad-queen", quantity=1}, {type="item", name="korlex", quantity=1}, {type="item", name="sea-sponge", quantity=1}, {type="item", name="xyhiphoe", quantity=1}, @@ -346,6 +351,7 @@ presets["Full PyMods (minus Alternative Energy)"] = { {type="item", name="navens", quantity=1}, {type="item", name="thikat", quantity=1}, {type="item", name="bhoddos", quantity=1}, + {type="item", name="guar", quantity=1}, {type="item", name="phagnot", quantity=1}, {type="item", name="arthurian", quantity=1}, {type="item", name="cridren", quantity=1}, @@ -360,6 +366,8 @@ presets["Full PyMods (minus Alternative Energy)"] = { {type="item", name="antelope", quantity=1}, {type="group", name="Progress"}, + {type="item", name="assembling-machine-1", quantity=1}, + {type="item", name="splitter", quantity=1}, {type="item", name="locomotive", quantity=1}, {type="item", name="mk02-locomotive", quantity=1}, {type="item", name="ht-locomotive", quantity=1}, @@ -371,7 +379,7 @@ presets["Full PyMods (minus Alternative Energy)"] = { {type="item", name="ocula", quantity=1}, {type="item", name="crawdad", quantity=1}, {type="item", name="dingrido", quantity=1}, - {type="item", name="qaavi", quantity=1}, + {type="item", name="phadaisus", quantity=1}, {type="item", name="spidertron", quantity=1}, {type="technology", name="pyrrhic", quantity=1}, @@ -448,6 +456,8 @@ presets["Medium PyMods"] = { {type="item", name="space-science-pack", quantity=1000, next="x10"}, {type="group", name="Progress"}, + {type="item", name="assembling-machine-1", quantity=1}, + {type="item", name="splitter", quantity=1}, {type="item", name="locomotive", quantity=1}, {type="item", name="mk02-locomotive", quantity=1}, {type="item", name="ht-locomotive", quantity=1}, diff --git a/Milestones_1.3.20/scripts/commands.lua b/Milestones/scripts/commands.lua similarity index 100% rename from Milestones_1.3.20/scripts/commands.lua rename to Milestones/scripts/commands.lua diff --git a/Milestones_1.3.20/scripts/global_init.lua b/Milestones/scripts/global_init.lua similarity index 100% rename from Milestones_1.3.20/scripts/global_init.lua rename to Milestones/scripts/global_init.lua diff --git a/Milestones/scripts/gui.lua b/Milestones/scripts/gui.lua new file mode 100644 index 00000000..5165e542 --- /dev/null +++ b/Milestones/scripts/gui.lua @@ -0,0 +1,329 @@ +require("scripts.gui_display_page") +require("scripts.gui_settings_page") +require("scripts.gui_import_export") + +local function get_frame(player_index, frame_name) + local global_player = global.players[player_index] + if not global_player[frame_name] or not global_player[frame_name].valid then + reinitialize_player(player_index) + end + return global.players[player_index][frame_name] +end + +function get_outer_frame(player_index) + return get_frame(player_index, "outer_frame") +end + +function get_main_frame(player_index) + return get_frame(player_index, "main_frame") +end + +function get_inner_frame(player_index) + return get_frame(player_index, "inner_frame") +end + +function build_gui_frames(player) + local screen_element = player.gui.screen + local outer_frame = screen_element.add{type="frame", name="milestones_outer_frame", style="outer_frame", visible=false} + local main_frame = outer_frame.add{type="frame", name="milestones_main_frame", direction="vertical"} + + local titlebar = main_frame.add{type="flow", name="milestones_titlebar", style="flib_titlebar_flow", direction="horizontal"} + titlebar.add{ + type="label", + name="milestones_main_label", + style="frame_title", + caption={"milestones.title"}, + ignored_by_interaction=true + } + titlebar.add{type="empty-widget", style="flib_titlebar_drag_handle", ignored_by_interaction=true} + local settings_button = titlebar.add{ + type="sprite-button", + name="milestones_settings_button", + style="frame_action_button", + sprite="milestones_settings_white", + hovered_sprite="milestones_settings_black", + clicked_sprite="milestones_settings_black", + mouse_button_filter={"left"}, + tooltip = {"milestones.settings_instructions"}, + tags={ + action="milestones_open_settings" + } + } + if not player.admin then + settings_button.enabled = false + settings_button.tooltip = {"milestones.settings_disabled"} + settings_button.sprite = "milestones_settings_disabled" + settings_button.hovered_sprite = "milestones_settings_disabled" + settings_button.clicked_sprite = "milestones_settings_disabled" + end + titlebar.add{ + type="sprite-button", + name="milestones_pin_button", + style="frame_action_button", + mouse_button_filter={"left"}, + sprite="milestones_pin_white", + hovered_sprite="milestones_pin_black", + clicked_sprite="milestones_pin_black", + tooltip = {"milestones.pin_instructions"}, + tags={ + action="milestones_pin_gui" + } + } + titlebar.add{ + type="sprite-button", + name="milestones_close_button", + style="frame_action_button", + mouse_button_filter={"left"}, + sprite="utility/close_white", + hovered_sprite="utility/close_black", + clicked_sprite="utility/close_black", + tooltip = {"gui.close-instruction"}, + tags={ + action="milestones_close_gui" + } + } + titlebar.drag_target = outer_frame + + local inner_frame = main_frame.add{type="frame", name="milestones_inner_frame", direction="vertical", style="inside_shallow_frame"} + + local dialog_buttons_bar = main_frame.add{type="flow", style="dialog_buttons_horizontal_flow", name="milestones_dialog_buttons", direction="horizontal"} + dialog_buttons_bar.add{type="button", style="back_button", caption={"milestones.settings_back"}, tags={action="milestones_cancel_settings"}} + dialog_buttons_bar.add{type="empty-widget", style="flib_dialog_footer_drag_handle", ignored_by_interaction=true} + dialog_buttons_bar.add{type="button", style="confirm_button", caption={"milestones.settings_confirm"}, tags={action="milestones_confirm_settings"}} + dialog_buttons_bar.drag_target = outer_frame + + -- Import/export side menu + + local import_export_frame = outer_frame.add{type="frame", name="milestones_settings_import_export", style="inner_frame_in_outer_frame", direction="vertical", visible=false} + local import_export_titlebar = import_export_frame.add{type="flow", name="milestones_settings_import_export_titlebar", style="flib_titlebar_flow", direction="horizontal"} + import_export_titlebar.add{ + type="label", + name="milestones_settings_import_export_titlebar_label", + style="frame_title", + ignored_by_interaction=true + } + import_export_titlebar.add{type="empty-widget", style="flib_titlebar_drag_handle", ignored_by_interaction=true} + import_export_titlebar.drag_target = outer_frame + + import_export_frame.add{type="flow", name="milestones_settings_import_export_inside", direction="vertical"} + + return outer_frame, main_frame, inner_frame +end + +local function update_settings_button(player) -- In case permissions changed + local main_frame = get_main_frame(player.index) + settings_button = main_frame.milestones_titlebar.milestones_settings_button + + if player.admin then + settings_button.enabled = true + settings_button.tooltip = {"milestones.settings_instructions"} + settings_button.sprite = "milestones_settings_white" + settings_button.hovered_sprite = "milestones_settings_black" + settings_button.clicked_sprite = "milestones_settings_black" + else + settings_button.enabled = false + settings_button.tooltip = {"milestones.settings_disabled"} + settings_button.sprite = "milestones_settings_disabled" + settings_button.hovered_sprite = "milestones_settings_disabled" + settings_button.clicked_sprite = "milestones_settings_disabled" + end +end + +local function open_gui(player) + local global_player = global.players[player.index] + local outer_frame = get_outer_frame(player.index) + build_display_page(player) + update_settings_button(player) + outer_frame.visible = true + outer_frame.bring_to_front() + player.opened = get_main_frame(player.index) + player.set_shortcut_toggled("milestones_toggle_gui", true) + + if not global_player.opened_once_before then -- Open in the center the first time + outer_frame.force_auto_center() + global_player.opened_once_before = true + end +end + +local function close_gui(player) + local outer_frame = get_outer_frame(player.index) + outer_frame.visible = false + outer_frame.auto_center = false -- Remove auto_center from the force_auto_center() that we did for the first open + get_inner_frame(player.index).clear() + + local import_export_frame = outer_frame.milestones_settings_import_export + local import_export_inside_frame = import_export_frame.milestones_settings_import_export_inside + import_export_inside_frame.clear() + import_export_frame.visible = false + + player.set_shortcut_toggled("milestones_toggle_gui", false) + if player.opened == get_main_frame(player.index) then + player.opened = nil + end +end + +local function toggle_gui(player) + local visible = get_outer_frame(player.index).visible + if visible == false then + open_gui(player) + else + close_gui(player) + end +end + +function refresh_gui_for_player(player) + if is_display_page_visible(player.index) then + get_inner_frame(player.index).clear() + build_display_page(player) + end +end + +function refresh_gui_for_force(force) + for _, player in pairs(force.players) do + refresh_gui_for_player(player) + end +end + +local function toggle_pinned(player, element) + local global_player = global.players[player.index] + global_player.pinned = not global_player.pinned + if global_player.pinned then + element.style = "flib_selected_frame_action_button" + element.sprite = "milestones_pin_black" + player.opened = nil + else + element.style = "frame_action_button" + element.sprite = "milestones_pin_white" + local main_frame = get_main_frame(player.index) + if player.opened == nil then + player.opened = main_frame + elseif player.opened ~= main_frame then + close_gui(player) + end + end +end + +script.on_event(defines.events.on_gui_closed, function(event) + if event.element and event.element.name == "milestones_main_frame" then + + local player = game.get_player(event.player_index) + local global_player = global.players[event.player_index] + if global_player.one_time_prevent_close then + global_player.one_time_prevent_close = false + player.opened = get_main_frame(player.index) + elseif not global_player.pinned then + close_gui(player) + end + end +end) + +script.on_event(defines.events.on_player_display_resolution_changed, function(event) + local player = game.players[event.player_index] + refresh_gui_for_player(player) +end) + +script.on_event(defines.events.on_player_display_scale_changed, function(event) + local player = game.players[event.player_index] + refresh_gui_for_player(player) +end) + +-- Quickbar shortcut +script.on_event(defines.events.on_lua_shortcut, function(event) + if event.prototype_name == "milestones_toggle_gui" then + local player = game.get_player(event.player_index) + toggle_gui(player) + end +end) + +-- Keyboard shortcuts +script.on_event("milestones_toggle_gui", function(event) + local player = game.get_player(event.player_index) + toggle_gui(player) +end) + +-- Override `E` on the settings page +script.on_event("milestones_confirm_settings", function(event) + if is_settings_page_visible(event.player_index) then + confirm_settings_page(event.player_index) + global.players[event.player_index].one_time_prevent_close = true + end +end) + +-- Override `Escape` on the settings page +script.on_event("milestones_cancel_settings", function(event) + if is_settings_page_visible(event.player_index) then + cancel_settings_page(event.player_index) + global.players[event.player_index].one_time_prevent_close = true + end +end) + +script.on_event(defines.events.on_gui_click, function(event) + if not event.element then return end + if not event.element.tags then return end + if event.element.tags.action == "milestones_close_gui" then + local player = game.get_player(event.player_index) + close_gui(player) + elseif event.element.tags.action == "milestones_pin_gui" then + local player = game.get_player(event.player_index) + toggle_pinned(player, event.element) + elseif event.element.tags.action == "milestones_open_settings" then + local player = game.get_player(event.player_index) + get_inner_frame(player.index).clear() + build_settings_page(player) + elseif event.element.tags.action == "milestones_cancel_settings" then + cancel_settings_page(event.player_index) + elseif event.element.tags.action == "milestones_confirm_settings" then + confirm_settings_page(event.player_index) + elseif event.element.tags.action == "milestones_swap_setting" then + swap_settings(event.player_index, event) + elseif event.element.tags.action == "milestones_delete_settings" then + delete_selected_settings(event.player_index) + elseif event.element.tags.action == "milestones_add_setting" then + add_setting(event.player_index, event.element) + elseif event.element.tags.action == "milestones_edit_time" then + enable_edit_time(event.player_index, event.element) + elseif event.element.tags.action == "milestones_confirm_edit_time" then + confirm_edit_time(event.player_index, event.element) + elseif event.element.tags.action == "milestones_reset_preset" then + reset_preset(event.player_index) + elseif event.element.tags.action == "milestones_open_import" then + toggle_import_export_page(event.player_index, event.element, true) + elseif event.element.tags.action == "milestones_open_export" then + toggle_import_export_page(event.player_index, event.element, false) + elseif event.element.tags.action == "milestones_close_import_export" then + close_import_export_page(event.player_index) + elseif event.element.tags.action == "milestones_import_settings" then + import_settings(event.player_index) + elseif event.element.tags.action == "milestones_settings_infinity_button" then + toggle_infinity_button(event.element) + elseif event.element.tags.action == "milestones_select_setting" then -- have to use on_gui_click instead of on_gui_checked_state_changed so we can check for shift + select_setting(event) + end +end) + +-- Textfield enter +script.on_event(defines.events.on_gui_confirmed, function(event) + if not event.element then return end + if not event.element.tags then return end + if event.element.tags.action == "milestones_confirm_edit_time_textfield" then + confirm_edit_time(event.player_index, event.element) + end +end) + +-- Checkboxes +script.on_event(defines.events.on_gui_checked_state_changed, function(event) + if not event.element then return end + if not event.element.tags then return end + if event.element.name == "milestones_export_encoded_checkbox" then + toggle_export_encoded(event.element) + end +end) + +-- Dropdowns +script.on_event(defines.events.on_gui_selection_state_changed, function(event) + if not event.element then return end + if not event.element.tags then return end + if event.element.tags.action == "milestones_change_preset" then + preset_dropdown_changed(event) + end +end) diff --git a/Milestones_1.3.20/scripts/gui_display_page.lua b/Milestones/scripts/gui_display_page.lua similarity index 85% rename from Milestones_1.3.20/scripts/gui_display_page.lua rename to Milestones/scripts/gui_display_page.lua index c7f60550..658942c2 100644 --- a/Milestones_1.3.20/scripts/gui_display_page.lua +++ b/Milestones/scripts/gui_display_page.lua @@ -1,6 +1,8 @@ local misc = require("__flib__.misc") require("scripts.milestones_util") +local empty_set_label = {type="label", caption={"", "[color=100,100,100]", {"milestones.no_visible_milestones"}, "[/color]"}, style="caption_label"} + local function get_timestamp(ticks, print_milliseconds) if print_milliseconds then local remaining_ticks = ticks % 60 @@ -9,7 +11,6 @@ local function get_timestamp(ticks, print_milliseconds) else return misc.ticks_to_timestring(ticks) end - end local function add_milestone_label(milestone_flow, milestone, compact_list, show_estimations, print_milliseconds) @@ -64,9 +65,9 @@ end local function add_milestone_item(gui_table, milestone, print_milliseconds, compact_list, show_estimations) local milestone_flow = gui_table.add{type="flow", direction="horizontal", style="milestones_horizontal_flow_big_display", tags={index=milestone.sort_index}} local prototype = nil - if milestone.type == "item" then + if milestone.type == "item" or milestone.type == "item_consumption" then prototype = game.item_prototypes[milestone.name] - elseif milestone.type == "fluid" then + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then prototype = game.fluid_prototypes[milestone.name] elseif milestone.type == "technology" then prototype = game.technology_prototypes[milestone.name] @@ -81,13 +82,11 @@ local function add_milestone_item(gui_table, milestone, print_milliseconds, comp end -- Sprite - local sprite_path_prefix = milestone.type == "kill" and "entity" or milestone.type - local sprite_path = sprite_path_prefix .. "/" .. milestone.name + local sprite_path = sprite_prefix(milestone) .. "/" .. milestone.name local sprite_number - local tooltip = milestone.tooltip -- Milestone tooltip has precidence + local tooltip = milestone.tooltip -- Milestone tooltip has precedence if milestone.quantity > 1 then sprite_number = milestone.quantity - tooltip = tooltip or {"", milestone.quantity, "x ", prototype.localised_name} end if milestone.type == "technology" then local postfix = milestone.quantity == 1 and {"milestones.type_technology"} or "Level "..milestone.quantity @@ -97,7 +96,11 @@ local function add_milestone_item(gui_table, milestone, print_milliseconds, comp tooltip = tooltip or {"", prefix, prototype.localised_name, " (", {"milestones.type_kill"}, ")"} else local prefix = milestone.quantity == 1 and "" or milestone.quantity .."x " - tooltip = tooltip or {"", prefix, prototype.localised_name} + local postfix = "" + if milestone.type == "item_consumption" or milestone.type == "fluid_consumption" then + postfix = {"", " (", {"milestones.type_consumption"}, ")"} + end + tooltip = tooltip or {"", prefix, prototype.localised_name, postfix} end milestone_flow.add{type="sprite-button", sprite=sprite_path, number=sprite_number, tooltip=tooltip, style="transparent_slot"} @@ -179,8 +182,6 @@ local function get_row_count(milestone_counts_by_group, column_count) end local function get_column_count_with_groups(player, milestones_by_group, compact_list, show_estimations) - local nb_groups = table_size(milestones_by_group) - local real_width = player.display_resolution.width * (1 / player.display_scale) local target_width = real_width * 0.9 -- 278px is about the max width of one column (3-digit hours time and 2-digit estimation) @@ -194,7 +195,6 @@ local function get_column_count_with_groups(player, milestones_by_group, compact max_column_width = max_column_width - 47 end local max_nb_columns = math.ceil(target_width / max_column_width) - 1 - local row_count = nb_groups * 2 local column_count = 1 local milestone_counts_by_group = {} for _group_name, group_milestones in pairs(milestones_by_group) do @@ -207,8 +207,8 @@ local function get_column_count_with_groups(player, milestones_by_group, compact end -- This tries to keep 3 rows per column, which results in roughly 16:9 shape - row_count = get_row_count(milestone_counts_by_group, column_count) - while row_count < column_count * 3 do + local row_count = get_row_count(milestone_counts_by_group, column_count) + while row_count < column_count * 3 and column_count > 1 do column_count = column_count - 1 row_count = get_row_count(milestone_counts_by_group, column_count) end @@ -236,16 +236,32 @@ function build_display_page(player) local global_force = global.forces[player.force.name] local print_milliseconds = settings.global["milestones_check_frequency"].value < 60 - local compact_list = settings.get_player_settings(player)["milestones_compact_list"].value - local view_by_group = settings.get_player_settings(player)["milestones_list_by_group"].value - local show_estimations = settings.get_player_settings(player)["milestones_show_estimations"].value + local player_settings = settings.get_player_settings(player) + local compact_list = player_settings["milestones_compact_list"].value + local view_by_group = player_settings["milestones_list_by_group"].value + local show_estimations = player_settings["milestones_show_estimations"].value + local show_incomplete = player_settings["milestones_show_incomplete"].value local nb_groups = table_size(global_force.milestones_by_group) if view_by_group and nb_groups > 1 then - local column_count = get_column_count_with_groups(player, global_force.milestones_by_group, compact_list, show_estimations) + local visible_milestones_per_group = {} + for group_name, group_milestones in pairs(global_force.milestones_by_group) do + visible_milestones_per_group[group_name] = filter_hidden_milestones(group_milestones, show_incomplete) + if not next(visible_milestones_per_group[group_name]) then + visible_milestones_per_group[group_name] = nil + end + end + + -- No milestones, exit early + if not next(visible_milestones_per_group) then + display_scroll.add(empty_set_label) + return + end + + local column_count = get_column_count_with_groups(player, visible_milestones_per_group, compact_list, show_estimations) local milestones_table = display_scroll.add{type="table", column_count=column_count, style="milestones_table_style"} local i = 1 - for group_name, group_milestones in pairs(global_force.milestones_by_group) do + for group_name, group_milestones in pairs(visible_milestones_per_group) do -- Group title milestones_table.add({type="label", caption=group_name, style="caption_label"}) add_n_empty_widgets(milestones_table, column_count-1) @@ -270,8 +286,16 @@ function build_display_page(player) end end else + local visible_incomplete_milestones = filter_hidden_milestones(global_force.incomplete_milestones, show_incomplete) + + -- No milestones, exit early + if not next(visible_incomplete_milestones) then + display_scroll.add(empty_set_label) + return + end + -- This tries to keep 3 rows per column, which results in roughly 16:9 shape - local nb_milestones = #global_force.complete_milestones + #global_force.incomplete_milestones + local nb_milestones = #global_force.complete_milestones + #visible_incomplete_milestones local column_count = math.max( math.min( math.ceil(math.sqrt(nb_milestones / 3)), @@ -283,7 +307,7 @@ function build_display_page(player) add_milestone_item(content_table, milestone, print_milliseconds, compact_list, show_estimations) end - for _, milestone in pairs(global_force.incomplete_milestones) do + for _, milestone in pairs(visible_incomplete_milestones) do add_milestone_item(content_table, milestone, print_milliseconds, compact_list, show_estimations) end end diff --git a/Milestones_1.3.20/scripts/gui_import_export.lua b/Milestones/scripts/gui_import_export.lua similarity index 100% rename from Milestones_1.3.20/scripts/gui_import_export.lua rename to Milestones/scripts/gui_import_export.lua diff --git a/Milestones_1.3.20/scripts/gui_settings_page.lua b/Milestones/scripts/gui_settings_page.lua similarity index 88% rename from Milestones_1.3.20/scripts/gui_settings_page.lua rename to Milestones/scripts/gui_settings_page.lua index 1ff21957..9fbc152c 100644 --- a/Milestones_1.3.20/scripts/gui_settings_page.lua +++ b/Milestones/scripts/gui_settings_page.lua @@ -47,21 +47,34 @@ local function add_milestone_setting(milestone, settings_flow, gui_index) local prototype local elem_button - local milestone_flow = settings_flow.add{type="flow", direction="horizontal", style="milestones_horizontal_flow_big_settings", index=gui_index} - milestone_flow.add{type="sprite", sprite="milestones_icon_"..milestone.type, tooltip={"milestones.type_"..milestone.type}} + local common_type + if milestone.type == "item_consumption" then + common_type = "item" + elseif milestone.type == "fluid_consumption" then + common_type = "fluid" + else + common_type = milestone.type + end - if milestone.type == "item" then + local milestone_flow = settings_flow.add{type="flow", direction="horizontal", style="milestones_horizontal_flow_big_settings", index=gui_index} + milestone_flow.add{type="sprite", sprite="milestones_icon_"..common_type, tooltip={"milestones.type_"..common_type}} + + if milestone.hidden then + milestone_flow.tags = {hidden= true} + end + + if milestone.type == "item" or milestone.type == "item_consumption" then prototype = game.item_prototypes[milestone.name] local default_selection = nil if prototype ~= nil then default_selection = milestone.name end elem_button = {type="choose-elem-button", name="milestones_settings_item", elem_type="item", - item=default_selection, tags={action="milestones_change_setting", milestone_type="item"}} - elseif milestone.type == "fluid" then + item=default_selection, tags={action="milestones_change_setting", milestone_type=milestone.type}} + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then prototype = game.fluid_prototypes[milestone.name] local default_selection = nil if prototype ~= nil then default_selection = milestone.name end elem_button = {type="choose-elem-button", name="milestones_settings_item", elem_type="fluid", - fluid=default_selection, tags={action="milestones_change_setting", milestone_type="fluid"}} + fluid=default_selection, tags={action="milestones_change_setting", milestone_type=milestone.type}} elseif milestone.type == "technology" then prototype = game.technology_prototypes[milestone.name] local default_selection = nil @@ -170,11 +183,16 @@ local function get_milestones_array_element(flow, allow_empty, player_index) next_formula = nil end end + + local hidden = flow.tags.hidden + if not hidden or hidden == "" then hidden = nil end + return { type=flow.milestones_settings_item.tags.milestone_type, name=flow.milestones_settings_item.elem_value, quantity=quantity, - next=next_formula + next=next_formula, + hidden=hidden } end @@ -200,6 +218,11 @@ function fill_settings_flow(settings_flow, milestones) refresh_all_arrow_buttons(settings_flow) end +local function is_preset_modified(current_milestones, preset_name) + return presets[preset_name] ~= nil + and not table.deep_compare(current_milestones, presets[preset_name].milestones) +end + function build_settings_page(player) local main_frame = get_main_frame(player.index) main_frame.milestones_titlebar.milestones_main_label.caption = {"milestones.settings_title"} @@ -210,32 +233,31 @@ function build_settings_page(player) local inner_frame = get_inner_frame(player.index) local settings_outer_flow = inner_frame.add{type="flow", name="milestones_settings_outer_flow", direction="vertical", style="milestones_settings_outer_flow"} - local preset_flow = settings_outer_flow.add{type="flow", name="milestones_preset_flow", direction="horizontal"} - preset_flow.add{type="label", caption={"milestones.settings_preset"}, style="caption_label"} + local preset_flow = settings_outer_flow.add{type="flow", name="milestones_preset_flow", direction="horizontal", style="milestones_horizontal_flow_center"} -- Preset dropdown + preset_flow.add{type="label", caption={"milestones.settings_preset"}, style="caption_label"} local preset_dropdown = preset_flow.add{type="drop-down", name="milestones_preset_dropdown", items=global.valid_preset_names} if global.current_preset_name == "Imported" then preset_dropdown.caption = {"milestones.settings_imported"} preset_dropdown.tags = {action="milestones_change_preset", imported=true} else - local current_preset_index = 1 - for _, value in pairs(global.valid_preset_names) do - if value == global.current_preset_name then break end - current_preset_index = current_preset_index + 1 - end - if current_preset_index > #global.valid_preset_names then -- Preset not found, can happen when removing mods - current_preset_index = 1 - end + local current_preset_index = table_get_index(global.valid_preset_names, global.current_preset_name) or 1 preset_dropdown.selected_index = current_preset_index preset_dropdown.tags = {action="milestones_change_preset", imported=false} + if is_preset_modified(global.loaded_milestones, global.current_preset_name) then + preset_dropdown.caption = {"", global.current_preset_name, " ", {"milestones.settings_preset_modified"}} + end end + preset_flow.add{type="button", caption={"milestones.settings_reset_preset"}, tooltip={"milestones.settings_reset_preset_tooltip"}, style="milestones_stretchable_button", + tags={action="milestones_reset_preset"}} preset_flow.add{type="sprite-button", name="milestones_import_button", tooltip={"milestones.settings_import"}, sprite="utility/import_slot", style="tool_button", tags={action="milestones_open_import"}} preset_flow.add{type="sprite-button", name="milestones_export_button", tooltip={"milestones.settings_export"}, sprite="utility/export_slot", style="tool_button", tags={action="milestones_open_export"}} + local settings_scroll = settings_outer_flow.add{type="scroll-pane", name="milestones_settings_scroll", style="milestones_settings_scroll"} local settings_flow = settings_scroll.add{type="frame", name="milestones_settings_inner_flow", direction="vertical", style="milestones_deep_frame_in_shallow_frame"} global.players[player.index].settings_flow = settings_flow @@ -518,12 +540,47 @@ end) function preset_dropdown_changed(event) event.element.tags = {action="milestones_change_preset", imported=false} local selected_preset_name = event.element.get_item(event.element.selected_index) - local global_player = global.players[event.player_index] + local preset_milestones = {} + if presets[selected_preset_name] then + preset_milestones = presets[selected_preset_name].milestones + end + switch_to_milestones_set(preset_milestones, event.player_index) +end + +function reset_preset(player_index) + -- Preset + local chosen_preset_name = get_auto_detected_preset_name() + local new_milestones = table.deep_copy(presets[chosen_preset_name].milestones) + + -- Preset addons + for _preset_addon_name, preset_addon in pairs(preset_addons) do + if is_preset_mods_enabled(preset_addon) then + for _, milestone in pairs(preset_addon.milestones) do + table.insert(new_milestones, milestone) + end + end + end + + local preset_dropdown = get_inner_frame(player_index).milestones_settings_outer_flow.milestones_preset_flow.milestones_preset_dropdown + local current_preset_index = table_get_index(global.valid_preset_names, chosen_preset_name) or 1 + preset_dropdown.selected_index = current_preset_index + preset_dropdown.tags = {action="milestones_change_preset", imported=false} + + switch_to_milestones_set(new_milestones, player_index) + + -- Can be modified or not depending on addons + if is_preset_modified(new_milestones, chosen_preset_name) then + preset_dropdown.caption = {"", chosen_preset_name, " ", {"milestones.settings_preset_modified"}} + end +end + +function switch_to_milestones_set(milestones_set, player_index) + local global_player = global.players[player_index] local settings_flow = global_player.settings_flow settings_flow.clear() - if selected_preset_name ~= "Empty" and presets[selected_preset_name] then - fill_settings_flow(settings_flow, presets[selected_preset_name].milestones) - get_outer_frame(event.player_index).force_auto_center() + if next(milestones_set) then + fill_settings_flow(settings_flow, milestones_set) + get_outer_frame(player_index).force_auto_center() end global_player.settings_selection_indexes = {} update_buttons_enabled_state(settings_flow.parent.parent, global_player.settings_selection_indexes) diff --git a/Milestones_1.3.20/scripts/migrations.lua b/Milestones/scripts/migrations.lua similarity index 100% rename from Milestones_1.3.20/scripts/migrations.lua rename to Milestones/scripts/migrations.lua diff --git a/Milestones_1.3.20/scripts/milestones_util.lua b/Milestones/scripts/milestones_util.lua similarity index 85% rename from Milestones_1.3.20/scripts/milestones_util.lua rename to Milestones/scripts/milestones_util.lua index cb5a29af..5f0d501c 100644 --- a/Milestones_1.3.20/scripts/milestones_util.lua +++ b/Milestones/scripts/milestones_util.lua @@ -93,11 +93,11 @@ function initialize_alias_table() valid_alias = game.entity_prototypes[loaded_milestone.name] ~= nil end if valid_alias then - global.production_aliases[loaded_milestone.equals] = {} or global.production_aliases[loaded_milestone.equals] - table.insert(global.production_aliases[loaded_milestone.equals], {name=loaded_milestone.name, quantity=loaded_milestone.quantity}) + global.production_aliases[loaded_milestone.equals] = {} or global.production_aliases[loaded_milestone.equals] + table.insert(global.production_aliases[loaded_milestone.equals], {name=loaded_milestone.name, quantity=loaded_milestone.quantity}) + end end end - end end function mark_milestone_reached(global_force, milestone, tick, milestone_index, lower_bound_tick) -- lower_bound_tick is optional @@ -144,6 +144,7 @@ function create_next_milestone(force_name, milestone) new_milestone.lower_bound_tick = nil new_milestone.completion_tick = nil new_milestone.sort_index = milestone.sort_index + 0.0001 -- Should work until there's 10000 iterations of an infinite milestone, lol + new_milestone.hidden = nil return new_milestone end @@ -158,8 +159,16 @@ function ceil_to_nearest_minute(tick) return tick - modulo + 60*60 end -local function find_precision_bracket(milestone, stats) - local total_count = stats.get_input_count(milestone.name) +local function get_total_count(stats, item_name, is_consumption) + if is_consumption then + return stats.get_output_count(item_name) + else + return stats.get_input_count(item_name) + end +end + +local function find_precision_bracket(milestone, stats, is_consumption) + local total_count = get_total_count(stats, milestone.name, is_consumption) local previous_bracket = "ALL" for _, bracket in pairs(FLOW_PRECISION_BRACKETS) do @@ -168,7 +177,7 @@ local function find_precision_bracket(milestone, stats) -- then the first creation was between 50 and 250 hours ago, and we should search the 250 hours precision bracket. if FLOW_PRECISION_BRACKETS_LENGTHS[bracket] <= game.tick then -- Skip bracket if the game is not long enough - local bracket_count = stats.get_flow_count{name=milestone.name, input=true, precision_index=bracket, count=true} + local bracket_count = stats.get_flow_count{name=milestone.name, input=(not is_consumption), precision_index=bracket, count=true} if bracket_count <= total_count - milestone.quantity then return previous_bracket end @@ -180,13 +189,13 @@ local function find_precision_bracket(milestone, stats) return previous_bracket end -local function find_sample_in_precision_bracket(milestone, bracket, stats) - local total_count = stats.get_input_count(milestone.name) - local bracket_count = stats.get_flow_count{name=milestone.name, input=true, precision_index=bracket, count=true} +local function find_sample_in_precision_bracket(milestone, bracket, stats, is_consumption) + local total_count = get_total_count(stats, milestone.name, is_consumption) + local bracket_count = stats.get_flow_count{name=milestone.name, input=(not is_consumption), precision_index=bracket, count=true} local count_before_bracket = total_count - bracket_count local count_this_bracket = 0 for i = 300,1,-1 do -- Start from oldest - sample_count = stats.get_flow_count{name=milestone.name, input=true, precision_index=bracket, count=true, sample_index=i} + local sample_count = stats.get_flow_count{name=milestone.name, input=(not is_consumption), precision_index=bracket, count=true, sample_index=i} count_this_bracket = count_this_bracket + sample_count if count_this_bracket + count_before_bracket >= milestone.quantity then return i @@ -225,8 +234,8 @@ local function get_realtime_tick_bounds(lower_bound_ticks_ago, upper_bound_ticks return lower_bound_ticks, upper_bound_ticks end -local function find_production_tick_bounds(milestone, stats) - local precision_bracket = find_precision_bracket(milestone, stats) +local function find_production_tick_bounds(milestone, stats, is_consumption) + local precision_bracket = find_precision_bracket(milestone, stats, is_consumption) log("bracket to search: " ..precision_bracket) local lower_bound_ticks_ago, upper_bound_ticks_ago @@ -235,7 +244,7 @@ local function find_production_tick_bounds(milestone, stats) -- All we know is it's between tick 0 and 1000 hours ago lower_bound_ticks_ago, upper_bound_ticks_ago = game.tick, FLOW_PRECISION_BRACKETS_LENGTHS[defines.flow_precision_index.one_thousand_hours] else - local sample_index = find_sample_in_precision_bracket(milestone, precision_bracket, stats) + local sample_index = find_sample_in_precision_bracket(milestone, precision_bracket, stats, is_consumption) if sample_index == 0 then return game.tick, game.tick -- Created this exact tick, usually on tick 0 before the start of the game end @@ -251,11 +260,15 @@ function find_completion_tick_bounds(milestone, item_stats, fluid_stats, kill_st if milestone.type == "technology" then return 0, game.tick -- No way to know past research time elseif milestone.type == "item" then - return find_production_tick_bounds(milestone, item_stats) + return find_production_tick_bounds(milestone, item_stats, false) elseif milestone.type == "fluid" then - return find_production_tick_bounds(milestone, fluid_stats) + return find_production_tick_bounds(milestone, fluid_stats, false) + elseif milestone.type == "item_consumption" then + return find_production_tick_bounds(milestone, item_stats, true) + elseif milestone.type == "fluid_consumption" then + return find_production_tick_bounds(milestone, fluid_stats, true) elseif milestone.type == "kill" then - return find_production_tick_bounds(milestone, kill_stats) + return find_production_tick_bounds(milestone, kill_stats, false) end end @@ -268,6 +281,16 @@ function sort_milestones(milestones) end) end +function filter_hidden_milestones(milestones, show_incomplete) + local visible_milestones = {} + for _, milestone in pairs(milestones) do + if milestone.completion_tick ~= nil or (show_incomplete and not milestone.hidden) then + table.insert(visible_milestones, milestone) + end + end + return visible_milestones +end + function backfill_completion_times(force) log("Backfilling completion times for " .. force.name) local backfilled_anything = false @@ -304,9 +327,9 @@ end function is_production_milestone_reached(milestone, global_force) local stats - if milestone.type == "item" then + if milestone.type == "item" or milestone.type == "item_consumption" then stats = global_force.item_stats - elseif milestone.type == "fluid" then + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then stats = global_force.fluid_stats elseif milestone.type == "kill" then stats = global_force.kill_stats @@ -314,7 +337,12 @@ function is_production_milestone_reached(milestone, global_force) error("Invalid milestone type! " .. milestone.type) end - local milestone_count = stats.get_input_count(milestone.name) + local milestone_count + if milestone.type == "item_consumption" or milestone.type == "fluid_consumption" then + milestone_count = stats.get_output_count(milestone.name) + else + milestone_count = stats.get_input_count(milestone.name) + end -- Aliases if global.production_aliases[milestone.name] then @@ -381,9 +409,9 @@ end function is_valid_milestone(milestone) local prototype - if milestone.type == "item" then + if milestone.type == "item" or milestone.type == "item_consumption" then prototype = game.item_prototypes[milestone.name] - elseif milestone.type == "fluid" then + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then prototype = game.fluid_prototypes[milestone.name] elseif milestone.type == "technology" then prototype = game.technology_prototypes[milestone.name] @@ -394,3 +422,17 @@ function is_valid_milestone(milestone) end return prototype ~= nil end + +function sprite_prefix(milestone) + if milestone.type == "item" or milestone.type == "item_consumption" then + return "item" + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then + return "fluid" + elseif milestone.type == "kill" then + return "entity" + elseif milestone.type == "technology" then + return "technology" + else + error("Unknown milestone type: " .. milestone.type) + end +end diff --git a/Milestones/scripts/presets_loader.lua b/Milestones/scripts/presets_loader.lua new file mode 100644 index 00000000..065a9345 --- /dev/null +++ b/Milestones/scripts/presets_loader.lua @@ -0,0 +1,165 @@ +local table = require("__flib__.table") + +require("scripts.util") +require("presets.presets") +require("presets.presets_pymods") +require("presets.preset_addons") + +local function validate_milestone_presets(interface_name, presets_to_validate, existing_table) + local valid = true + if type(presets_to_validate) ~= "table" then + print_delayed_red("Interface " .. interface_name .. " should return a table.") + valid = false + else + for preset_name, preset in pairs(presets_to_validate) do + if type(preset_name) ~= "string" then + print_delayed_red("Interface " .. interface_name .. " should return a table with named keys.") + valid = false + break + end + if existing_table[preset_name] then + log("Preset " .. preset_name .. " already exists. Overriding.") + end + if not preset.required_mods then + print_delayed_red("Preset " .. preset_name .. " is missing a `required_mods` value.") + valid = false + end + if not preset.milestones then + print_delayed_red("Preset " .. preset_name .. " is missing a `milestones` value.") + valid = false + else + _, error = validate_milestones(preset.milestones) + if error then + print_delayed_red({"", "Preset ", preset_name, ": ", error}) + valid = false + end + end + end + end + if not valid then + print_delayed_red("[img=utility/danger_icon] Please warn the mod author for " .. interface_name .. " about the errors above.") + end + return valid +end + +function is_preset_mods_enabled(preset) + local forbidden_mods = preset.forbidden_mods or {} + for _, mod_name in pairs(preset.required_mods) do + if not game.active_mods[mod_name] then return false end + end + for _, mod_name in pairs(forbidden_mods) do + if game.active_mods[mod_name] then return false end + end + return true +end + +local function validate_and_add_to_preset_table(interface_name, remote_milestones_presets, existing_table) + if validate_milestone_presets(interface_name, remote_milestones_presets, existing_table) then + ---@cast remote_milestones_presets table + for remote_preset_name, remote_preset in pairs(remote_milestones_presets) do + existing_table[remote_preset_name] = remote_preset + end + end +end + +function fetch_remote_presets() + -- See presets.lua to find out how to use these reverse remote interface to add your own preset or preset addon. + global.remote_presets = {} + global.remote_preset_addons = {} + for interface_name, functions in pairs(remote.interfaces) do + if functions["milestones_presets"] then + local remote_milestones_presets = remote.call(interface_name, "milestones_presets") + validate_and_add_to_preset_table("milestones_presets", remote_milestones_presets, global.remote_presets) + end + if functions["milestones_preset_addons"] then + local remote_milestones_presets = remote.call(interface_name, "milestones_preset_addons") + validate_and_add_to_preset_table("milestones_preset_addons", remote_milestones_presets, global.remote_preset_addons) + end + end +end + +function add_remote_presets_to_preset_tables() + if global.remote_presets then -- Should always be set in on_init, but just for migration safety + for remote_preset_name, remote_preset in pairs(global.remote_presets) do + presets[remote_preset_name] = remote_preset + end + end + if global.remote_preset_addons then + for remote_preset_name, remote_preset in pairs(global.remote_preset_addons) do + preset_addons[remote_preset_name] = remote_preset + end + end +end + +function get_auto_detected_preset_name() + local chosen_preset_name + local max_nb_mods_matched = -1 + for _, preset_name in pairs(global.valid_preset_names) do + local preset = presets[preset_name] + if preset and #preset.required_mods > max_nb_mods_matched then + max_nb_mods_matched = #preset.required_mods + chosen_preset_name = preset_name + end + end + return chosen_preset_name +end + +function load_presets() + global.valid_preset_names = {"Empty"} + + for preset_name, preset in pairs(presets) do + if is_preset_mods_enabled(preset) then + table.insert(global.valid_preset_names, preset_name) + end + end + log("Valid presets found: " .. serpent.line(global.valid_preset_names)) + + if global.current_preset_name == nil then + global.current_preset_name = get_auto_detected_preset_name() + log("Auto-detected preset used: " .. global.current_preset_name) + table.insert(global.delayed_chat_messages, {"milestones.message_loaded_presets", global.current_preset_name}) + global.loaded_milestones = table.deep_copy(presets[global.current_preset_name].milestones) + end +end + +function load_preset_addons() + local preset_addons_loaded = {} + for preset_addon_name, preset_addon in pairs(preset_addons) do + if is_preset_mods_enabled(preset_addon) then + table.insert(preset_addons_loaded, preset_addon_name) + for _, milestone in pairs(preset_addon.milestones) do + table.insert(global.loaded_milestones, milestone) + end + end + end + log("Preset addons loaded: " .. serpent.line(preset_addons_loaded)) + + if #preset_addons_loaded == 1 then + table.insert(global.delayed_chat_messages, {"milestones.message_loaded_preset_addons_singular", preset_addons_loaded[1]}) + elseif #preset_addons_loaded > 1 then + table.insert(global.delayed_chat_messages, {"milestones.message_loaded_preset_addons_plural", table.concat(preset_addons_loaded, ", ")}) + end +end + +function reload_presets() + log("Reloading presets") + local added_presets = {} + local new_valid_preset_names = {"Empty"} + + for preset_name, preset in pairs(presets) do + if is_preset_mods_enabled(preset) then + table.insert(new_valid_preset_names, preset_name) + if not table_contains(global.valid_preset_names, preset_name) then + table.insert(added_presets, preset_name) + end + end + end + global.valid_preset_names = new_valid_preset_names + log("New presets found: " .. serpent.line(added_presets)) + log("New list of valid presets: " .. serpent.line(global.valid_preset_names)) + if #added_presets == 1 then + table.insert(global.delayed_chat_messages, {"milestones.message_reloaded_presets_singular", added_presets[1]}) + elseif #added_presets > 1 then + table.insert(global.delayed_chat_messages, {"milestones.message_reloaded_presets_plural", table.concat(added_presets, ", ")}) + end +end diff --git a/Milestones/scripts/remote_interface.lua b/Milestones/scripts/remote_interface.lua new file mode 100644 index 00000000..8874eae5 --- /dev/null +++ b/Milestones/scripts/remote_interface.lua @@ -0,0 +1,10 @@ +On_milestone_reached_event = nil -- global + +local interface = {} + +function interface.get_on_milestone_reached_event() + if not on_milestone_reached then on_milestone_reached = script.generate_event_name() end + return on_milestone_reached +end + +remote.add_interface("milestones", interface) diff --git a/Milestones/scripts/tracker.lua b/Milestones/scripts/tracker.lua new file mode 100644 index 00000000..bca56a4f --- /dev/null +++ b/Milestones/scripts/tracker.lua @@ -0,0 +1,159 @@ +local core_util = require("__core__/lualib/util.lua") +local misc = require("__flib__.misc") +require("scripts.gui") +require("scripts.milestones_util") + +local function force_print(force, message) + for _, player in pairs(force.players) do + if not settings.get_player_settings(player)["milestones_disable_chat_notifications"].value then + player.print(message) + end + end +end + +local function raise_milestone_reached_event(force, milestone, message) + if On_milestone_reached_event then + script.raise_event(On_milestone_reached_event, { + force = force, + name = milestone.name, + quantity = milestone.quantity, + completion_tick = milestone.completion_tick, + message = message + }) + end +end + +-- Writes to a file named "milestones-.txt" +-- Each milestone reached appends a new line. +-- Each line is JSON and looks like this: +-- {"force":"player","name":"iron-ore","quantity":10,"type"="item","completion_tick":5279,"completion_time":"1:27"} +local function write_milestone_to_file(force, milestone, human_timestamp) + local file_name = string.format("milestones-%s.txt", game.default_map_gen_settings.seed) + local table = { + force = force.name, + name = milestone.name, + quantity = milestone.quantity, + type = milestone.type, + completion_tick = milestone.completion_tick, + completion_time = human_timestamp, + } + local json = game.table_to_json(table) .. "\n" + for player_index, player in pairs(force.players) do + if settings.get_player_settings(player)["milestones_write_file"].value then + game.write_file(file_name, json, true, player_index) + end + end +end + + +local function print_milestone_reached(force, milestone) + local human_timestamp = misc.ticks_to_timestring(milestone.completion_tick) + local sprite_name = sprite_prefix(milestone) .. "." .. milestone.name + local milestone_localised_name + local message + if milestone.type == "technology" then + milestone_localised_name = game.technology_prototypes[milestone.name].localised_name + local level_string = (milestone.quantity == 1 and "" or " Level "..milestone.quantity.." ") + message = {"milestones.message_milestone_reached_technology", sprite_name, milestone_localised_name, level_string, human_timestamp} + else + if milestone.type == "item" or milestone.type == "item_consumption" then + if milestone.name == "se-rocket-launch-pad-silo-dummy-result-item" then + milestone_localised_name = "Cargo rocket" + else + milestone_localised_name = game.item_prototypes[milestone.name].localised_name + end + elseif milestone.type == "fluid" or milestone.type == "fluid_consumption" then + milestone_localised_name = game.fluid_prototypes[milestone.name].localised_name + elseif milestone.type == "kill" then + milestone_localised_name = game.entity_prototypes[milestone.name].localised_name + else + error("Invalid milestone type! " .. milestone.type) + end + + local message_type + if milestone.type == "kill" then + message_type = "kill" + elseif milestone.type == "item_consumption" or milestone.type == "fluid_consumption" then + message_type = "consumption" + else + message_type = "item" + end + + local postscript + if milestone.name == "character" then + postscript = " (haha! 😁)" + end + + if milestone.quantity == 1 then + message = {"", {"milestones.message_milestone_reached_" ..message_type.. "_first", sprite_name, milestone_localised_name, human_timestamp}, postscript} + else + local print_quantity = milestone.quantity + if milestone.quantity >= 10000 then + print_quantity = core_util.format_number(milestone.quantity, true) + end + message = {"", {"milestones.message_milestone_reached_" ..message_type.. "_more", print_quantity, sprite_name, milestone_localised_name, human_timestamp}, postscript} + end + end + + force_print(force, message) + raise_milestone_reached_event(force, milestone, message) + write_milestone_to_file(force, milestone, human_timestamp) + force.play_sound{path="utility/achievement_unlocked"} +end + +function track_item_creation(event) + for force_name, global_force in pairs(global.forces) do + local milestones_per_tick = #global_force.incomplete_milestones / global.milestones_check_frequency_setting + local step_nb = event.tick % global.milestones_check_frequency_setting + local i = math.floor(milestones_per_tick * step_nb) + 1 + local to_i = math.floor(milestones_per_tick * (step_nb + 1)) + -- log("(per tick: "..milestones_per_tick..") tick " .. event.tick .. " : " .. i .. "-" .. to_i) + + while i <= to_i do + local milestone = global_force.incomplete_milestones[i] + if milestone.type ~= "technology" + and is_production_milestone_reached(milestone, global_force) then + if milestone.next then + local next_milestone = create_next_milestone(force_name, milestone) + if next_milestone then + table.insert(global_force.incomplete_milestones, next_milestone) + table.insert(global_force.milestones_by_group[next_milestone.group], next_milestone) + end + end + local force = game.forces[force_name] + mark_milestone_reached(global_force, milestone, game.tick, i) + print_milestone_reached(force, milestone) + refresh_gui_for_force(force) + to_i = math.min(to_i, #global_force.incomplete_milestones) -- Don't go past the end of the table + else + -- When a milestone is reached, incomplete_milestones loses an element + -- so we only increment when a milestone is not reached + i = i + 1 + end + end + end +end +script.on_event(defines.events.on_tick, track_item_creation) + +function check_technology_milestone_reached(event) + local technology_researched = event.research + local force = event.research.force + local global_force = global.forces[force.name] + if global_force == nil then return end + + local i = 1 + while i <= #global_force.incomplete_milestones do + local milestone = global_force.incomplete_milestones[i] + if is_tech_milestone_reached(milestone, technology_researched) then + mark_milestone_reached(global_force, milestone, game.tick, i) + print_milestone_reached(force, milestone) + refresh_gui_for_force(force) + else + -- I guess you could technically have the same technology in 2 milestones... + -- so we have to keep iterating + i = i + 1 + end + end +end +script.on_event(defines.events.on_research_finished, check_technology_milestone_reached) + diff --git a/Milestones/scripts/util.lua b/Milestones/scripts/util.lua new file mode 100644 index 00000000..5b8b706f --- /dev/null +++ b/Milestones/scripts/util.lua @@ -0,0 +1,81 @@ +function table_contains(table, element) + for _, value in pairs(table) do + if value == element then return true end + end + return false +end + +function table_get_index(table, element) + for i, value in pairs(table) do + if value == element then return i end + end + return nil +end + +function validate_milestones(milestones) + local valid_categories = {"item", "fluid", "item_consumption", "fluid_consumption", "technology", "kill", "group", "alias"} + for _, milestone in pairs(milestones) do + if not table_contains(valid_categories, milestone.type) then + return nil, {"", {"milestones.message_invalid_import_type"}, milestone.type} + end + if type(milestone.name) ~= "string" then + return nil, {"", {"milestones.message_invalid_import_missing_field"}, "name"} + end + if milestone.type ~= "group" then + local num = tonumber(milestone.quantity) + if num == nil or num < 1 then + return nil, {"", {"milestones.message_invalid_import_quantity"}, milestone.quantity} + end + if milestone.next ~= nil then + local operator, _ = parse_next_formula(milestone.next) + if operator == nil then + return nil, {"", {"milestones.message_invalid_import_next"}, milestone.next} + end + end + end + if milestone.type == "alias" and type(milestone.equals) ~= "string" then + return nil, {"", {"milestones.message_invalid_import_missing_field"}, "equals"} + end + if (type(milestone.hidden) == "boolean" and milestone.hidden) or milestone.hidden == "true" then + milestone.hidden = true + else + milestone.hidden = nil + end + end + return milestones, nil +end + +function convert_and_validate_imported_json(import_string) + local imported_milestones = game.json_to_table(import_string) + + if imported_milestones == nil then + return nil, {"milestones.message_invalid_import_json"} + end + + return validate_milestones(imported_milestones) +end + +local delayed_chat_delay = 240 + +local function print_chat_delayed(event) + if event.tick == 0 then return end + for _, delayed_chat_message in pairs(global.delayed_chat_messages) do + game.print(delayed_chat_message) + end + global.delayed_chat_messages = {} + script.on_nth_tick(delayed_chat_delay, nil) +end + +function create_delayed_chat() + script.on_nth_tick(delayed_chat_delay, function(event) + print_chat_delayed(event) + end) +end + +function print_delayed_red(message) + table.insert(global.delayed_chat_messages, ({"", "[color=red]", message, "[/color]"})) +end + +function approximately_equal(a, b) + return math.abs(a - b) < 0.00001 +end diff --git a/Milestones/settings.lua b/Milestones/settings.lua new file mode 100644 index 00000000..df4d936b --- /dev/null +++ b/Milestones/settings.lua @@ -0,0 +1,61 @@ +data:extend{ + { + type = "int-setting", + name = "milestones_check_frequency", + setting_type = "runtime-global", + minimum_value = 1, + default_value = 60, + order = "a", + }, + { + type = "string-setting", + name = "milestones_initial_preset", + setting_type = "runtime-global", + allow_blank = true, + default_value = "", + auto_trim = true, + order = "b", + }, + { + type = "bool-setting", + name = "milestones_compact_list", + setting_type = "runtime-per-user", + default_value = false, + order = "a", + }, + { + type = "bool-setting", + name = "milestones_list_by_group", + setting_type = "runtime-per-user", + default_value = true, + order = "b", + }, + { + type = "bool-setting", + name = "milestones_show_estimations", + setting_type = "runtime-per-user", + default_value = true, + order = "c", + }, + { + type = "bool-setting", + name = "milestones_show_incomplete", + setting_type = "runtime-per-user", + default_value = true, + order = "d", + }, + { + type = "bool-setting", + name = "milestones_disable_chat_notifications", + setting_type = "runtime-per-user", + default_value = false, + order = "e", + }, + { + type = "bool-setting", + name = "milestones_write_file", + setting_type = "runtime-per-user", + default_value = false, + order = "f", + } +} diff --git a/Milestones/thumbnail.png b/Milestones/thumbnail.png new file mode 100644 index 00000000..f7bf5618 Binary files /dev/null and b/Milestones/thumbnail.png differ diff --git a/Milestones_1.3.20/changelog.txt b/Milestones_1.3.20/changelog.txt deleted file mode 100644 index ea0a8486..00000000 --- a/Milestones_1.3.20/changelog.txt +++ /dev/null @@ -1,457 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.3.20 -Date: 2023-08-15 - - Changes: - - Added plague rocket to default SE presets. - - Removed some overly verbose log lines. - - Bugfixes: - - Fixed turning off an infinite milestone in settings not actually applying the change. - - Fixed milestones added as part of an infinite milestone not editing the right milestone when trying to edit the estimation time. - - Compatibility: - - Presets provided via remote interface now have priority over default presets. This means other mods can override default presets. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.19 -Date: 2023-07-14 - - Changes: - - Removed built-in Sea Block presets, in favor of Sea Block's own preset provided by their mod. - - Bugfixes: - - Fixed crash when loading a preset with invalid aliases. - - Locale: - - Added Spanish translation thanks to Frodo45127. - - Added Polish translation thanks to wuka. - - Updated Japanese translation thanks to YAMATO_Hajime. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.18 -Date: 2023-05-20 - - Features: - - Added "Disable milestone notifications" mod setting which turns off chat notifications. This is a player setting, so each player can have it set the way they want. - - Locale: - - Updated Japanese translation thanks to nojio. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.17 -Date: 2023-04-09 - - Bugfixes: - - Fix remote presets disappearing from the selectable preset list when changing mods in the middle of a game (on configuration changed). - - Remove duplicated plastic bar milestone from Sea Block presets. - - Locale: - - Ukrainian translation thanks to Met en Bouldry. - - Chinese translation update thanks to luaotix. - - German translation update thanks to knniDE. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.16 -Date: 2023-01-31 - - Bugfixes: - - Fix crash when reaching a milestone near the end of the set, when several milestones are checked per tick. - - Locale: - - Russian translation update thanks to Shadow_Man. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.15 -Date: 2023-01-28 - - Bugfixes: - - Fix crash caused by milestones for invalid items not being removed if they are in the last position of the set. - - Fix Bob's Modules preset addon being loaded when using Bob's Enemies instead. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.14 -Date: 2023-01-27 - - Changes: - - Tweaks to IR3 preset (Added Heavy picket, graphene, and electrum. Replaced special projects pack end goal count with a technology milestone, since productivity in labs can actually make the required number of packs variable). - - Tweaks to PyMods presets (Added Dig-o-saurus, Thikat, Caravan, and Oculus) - - Large changes to the Sea Block presets with input from the Sea Block community. - - Add preset addon for the "Cat" mod. - - As usual you will need to refresh your milestone set yourself if you are already in the middle of a playthrough (Settings -> Switch to Empty -> Switch to the preset you want -> Confirm). - - Optimizations: - - Milestone checks are now spread over every tick of the frequency interval (the "Ticks between each check" mod setting) instead of happening all at once. This should solve spikes of performance hit when playing with a large amount of milestones. - - Compatibility: - - You can now have your mod provide presets and preset addons by implementing a `milestones_presets` or `milestones_preset_addons` remote interface. - Please check out the comments in presets.lua and preset_addons.lua for more details. - - Bugfixes: - - Fix GUI sometimes being too wide for the screen when using Compact mode. (Again!) - - Fix settings GUI "Add X" buttons states being wrong when changing preset. - - Fix settings GUI selection state being wrong after moving a selected line. - - Fix issue where technologies that end with a number (e.g. "Electronics 3") would be considered researched during backfilling even if they were not. - - Locale: - - Chinese translation thanks to luaotix. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.13 -Date: 2022-12-26 - - Changes: - - Add presets for Industrial Revolution 3, with or without the "Special Projects" add-on. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.12 -Date: 2022-11-15 - - Bugfixes: - - Fix GUI sometimes being too wide for the screen when using Compact mode. - Also, the GUI will now try to fit within 90% of the screen width instead of trying to use as much of the screen as possible. - - Locale: - - Locale updates for 1.3.10 strings. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.11 -Date: 2022-11-09 - - Bugfixes: - - Fix settings page Add/Delete buttons that were still enabled after deleting selected milestones, which could cause a crash. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.10 -Date: 2022-11-06 - - Changes: - - Update Nullius preset to account for boxed versions of milestones in the "Resources" group (ingots, processors, glass). - - GUI improvements: - - Milestones from different groups are now aligned properly. - - Improved the look of the scroll bars that appear when using large milestones set. - - In the settings page, you can now add milestones directly at a specific position. - - In the settings page, you can now delete multiple milestones at the same time. - - In the settings page, you can now shift-click arrows to move 5 places at a time. - - Bugfixes: - - Fix estimations not being shown when the "List by group" setting was disabled. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.9 -Date: 2022-10-19 - - Changes: - - Update PyMods presets to account for changes in the latest PyMods versions. - Now comes with 4 presets depending on how many PyMods you are using: Full, Full except AE, Medium, and Short. - As usual you will need to refresh your milestone set yourself if you are already in the middle of a PyMods playthrough (Settings -> Switch to Empty -> Switch to the preset you want -> Confirm). - - Add preset addon for Fluidic Power (Thanks to stringweasel) - ---------------------------------------------------------------------------------------------------- -Version: 1.3.8 -Date: 2022-09-13 - - Features: - - Add beta support for item aliases. You can indicate to Milestones that an item is worth a certain amount of another item. - - This is designed for Nullius's science, which can be created individually or as a "box" item worth several science packs. Up until now the Nullius milestones were not accurate because of these 2 ways to create science. - - For now there is no way to create aliases via the settings GUI. You can modify aliases using the export/import feature. - - Add mod setting to hide the "Β±Xm" estimations. - - Changes: - - Update Nullius preset to use aliases for science boxes. If you are already using the Nullius preset, you can update it in the settings (Switch to "Empty" preset, switch back to "Nullius", confirm). - - Add preset for K2+248k and tweak 248k preset (Thanks to quindao) - - GUI will now center when opening import/export window. - - Add requester chest to Space Exploration presets. - - Bugfixes: - - Fix crash when trying to import an empty string. - - Attempt to fix some cases where the display GUI is still growing beyond screen borders (because of the "Β±Xm" estimations). - ---------------------------------------------------------------------------------------------------- -Version: 1.3.7 -Date: 2022-08-21 - - Changes: - - Add preset addons for Bob's Modules, Brass Tacks, and If I Had A Nickel (Thanks to Xynariz) - - Tweak some preset addons. - - Bugfixes: - - Fix crash when the GUI was cleared by another mod or command (again!). - - Locale: - - German translation thanks to knniDE. - - Adjustment of some whitespace after strings (e.g. after "Completed at"). - ---------------------------------------------------------------------------------------------------- -Version: 1.3.6 -Date: 2022-08-15 - - Changes: - - The "created X items at" chat message will now format quantities of items starting at 10000 (as in, "10k" instead of 10000). - - Bugfixes: - - Fix main GUI that could be too tall and not wide enough in some cases. - - Fix GUI losing its position on every save file load. - - Locale: - - Japanese translation thanks to nojio. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 -Date: 2022-07-11 - - Changes: - - The main GUI will now adjust its number of columns to avoid going beyond screen borders. - - Remove β“˜ symbols from setting names now that Factorio does it automatically. - - Add core fragments to SE presets. - - Bugfixes: - - Fix crash when estimating milestones that were completed 1000+ hours ago. - - Locale: - - Russian translation thanks to Shadow_Man. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 -Date: 2022-06-30 - - Changes: - - More changes to SE and SE+K2 presets (I forgot the new science packs) - ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 -Date: 2022-06-30 - - Changes: - - Keep entity selection box in the settings menu for invalid entries. This lets you fix broken sets more easily. - - Bugfixes: - - Fix crash when milestones tried to backfill time for an item that no longer exists after mod changes. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 2022-06-30 - - Features: - - Add preset addons for "BZ Graphite & Diamonds" and "Leighzer's Uranium Innovations". (Thanks to nihilistzsche!) - - Changes: - - Update SE presets for SE 0.6 - ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 2022-06-13 - - Features: - - Add preset for SE+K2+248k. - - Add preset addons for "Science Pack Galore" and various BZ mods. (Thanks to nihilistzsche for both!) - - Changes: - - Tweaks to Nullius preset to account for some boxed science packs. (This isn't perfect, fully accounting for all boxed versions of science packs will require supporting alternate items for milestones). - - Bugfixes: - - Fix crash with mods that create items before the start of the game. - - Locale: - - Locale updates from Crowdin. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2022-06-07 - - Features: - - Now requires Factorio 1.1.60 or above. - - Greatly improved estimations accuracy when added to an existing game. Milestones can now use production statistics directly to backfill completed milestones. - - Accuracy is greater for more recent completion times. Expect Β±5 minutes for 50 hours games, Β±25m for 250h, Β±1h40 for 1000h. - - Editing estimation ranges is now only available for inaccurate estimations (>1hour uncertainty), and now work by just typing the time instead of typing "x minutes ago". This makes more sense now that you won't have to copy values from production statistics. - - In existing games: Leftover estimations will be replaced with the new more accurate estimations. Estimations that had already been edited with typed-in times won't be touched. - - Add milestone groups. You can create arbitrary categories, and milestones will appear grouped under these categories. - - You can switch back to the old chronological view with the new mod setting "List by group". - - Add preset for 248k Mod (Thanks to PreLeyZero!) - - Changes: - - Updated presets to use milestone groups. Existing games won't be updated unless you reload them from the preset. - - Milestones settings can now only be changed by admins, instead of relying on "Mod Settings Changed" permissions. This seems to match with Factorio's own conditions on modifying Mod Settings. - - Changing the settings in a multiplayer game will now indicate who did the change in the chat message. - - Bugfixes: - - Fix crash when the GUI was cleared through another mod or command. - ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2022-04-01 - - Features: - - Add preset for Nullius (Thanks to Anachrony's help). - - Add preset addons for Cargo Ships, Spidertron Extended, Spidertron Tiers - - Changes: - - Tweaks to various presets, most notably for Sea Block. - - Locale: - - New translations from Crowdin. If you would like to translate this mod please find FactorioMilestones here: https://crowdin.com/project/factorio-mods-localization - - French translation by yours truly. - - Korean translation thanks to x2605. - ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2022-02-20 - - Bugfixes: - - Fix infinite milestone not creating next step when backfilling a milestone with an estimation range. - - Fix infinite milestones affecting the loaded set when it shouldn't. - - Changes: - - Change all character kills in presets to increase by x5 instead of x2. - ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2022-02-20 - - Features: - - Infinite Milestones: - You can now set a "next" value for a milestone. When that milestone is completed, a new milestone is automatically created at a higher count, depending on that "next" value. - Example: "1000 science packs, next: x10" would create "10000 science packs" when completed, then "100000 science packs", etc. You can also use "+" for adding instead of multiplying. - - You can now export or import encoded milestone sets (for a shorter, but non-human-readable string). - - New "Compact list" Player Mod Setting, removes the "Completed at:" labels from the main view. Defaults to off. - - Changes: - - Change presets to use infinite milestones. Existing sets won't be updated unless you reload them from the preset. - - Labels now say "Killed at" and "Researched at" for kills and technologies - - Replace "cargo rocket section" with "cargo rocket" in SE and SE+K2 presets - ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2022-01-16 - - Changes: - - Add "Advanced pickaxe" to K2 and SE+K2 presets - - Add debug commands to help debug and fix future crashes (use /h in-game to see them) - - Bugfixes: - - Fix kill milestones unable to be imported - - Attempt to fix a rare crash when a player's GUI becomes invalid for an unknown reason - ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2021-11-29 - - Bugfixes: - - Fix crash when using research milestones - ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2021-11-28 - - Features: - - Add "Initial preset" mod setting. You can paste an exported preset string that Milestones will load at the beginning of every new game. Useful for speedrunning practice. - - Add "Kill" milestone type. Used to track biter kills (or any other kills, such as killing yourself with locomotives :) ) - - Add preset addons for Bob's Enemies, Armoured Biters, Cold Biters, Explosive Biters - - Changes: - - Add kill milestones to existing presets - - Bugfixes: - - Fix crash when GUI was opened after being closed in some way that didn't trigger the on_gui_closed event - - Fix crash when using the import feature, introduced in 1.0.10 - ---------------------------------------------------------------------------------------------------- -Version: 1.0.10 -Date: 2021-11-20 - - Changes: - - Add missing holmium ingot to SE+K2 preset - - Bugfixes: - - Import-export window now gets a scrollbar instead of expanding beyond the screen for large milestone lists - - Fix issues with multiple forces, where new forces could have completion times from existing forces, and players switching forces could erase completion times. This fixes issues with Editor Extensions's testing lab mode. - ---------------------------------------------------------------------------------------------------- -Version: 1.0.9 -Date: 2021-10-17 - - Bugfixes: - - Fix issue where the completion time for technology milestones was not being saved properly. If you had completed technology milestones, updating to this version will allow you to enter those lost times yourself. - - Fix crash when going to settings after removing the mod that was currently selected as preset. - ---------------------------------------------------------------------------------------------------- -Version: 1.0.8 -Date: 2021-10-03 - - Bugfixes: - - Fix crash when right-clicking an item selector in the settings menu - ---------------------------------------------------------------------------------------------------- -Version: 1.0.7 -Date: 2021-08-29 - - Features: - - Add preset addon for Bio Industries (Thanks to snouz!) - - Add preset addon for Omnienergy and Omniscience (Thanks to NihlisticPandemonium!) - - Bugfixes: - - Fix crash that could occur in some cases in multiplayer - ---------------------------------------------------------------------------------------------------- -Version: 1.0.6 -Date: 2021-08-03 - - Bugfixes: - - Fix another crash when loading from old version (oops!) - ---------------------------------------------------------------------------------------------------- -Version: 1.0.5 -Date: 2021-08-01 - - Bugfixes: - - Fix crash when loading from old version - ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 2021-08-01 - - Features: - - Add settings import/export. Useful if you want to mass-edit your milestones in a text editor, or quickly import something from another save. - - Add preset addons: Small mods that can be used with any other major mod can now have preset milestones, which will be detected and added at the end of the major mod preset. - - Add preset addons: Power Armor Mk3, Space Extension (SpaceX) - - Changes: - - Add missing holmium ingot to SE preset - ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2021-06-27 - - Bugfixes: - - Fix multiplayer desync when a player joins before Milestones' intro message - ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2021-06-23 - - Features: - - Add presets: Industrial Revolution 2, Seablock - - Changes: - - Tweak Angel presets to account for changes when using "industry overhaul" - - Bugfixes: - - Fix crash when trying to confirm settings with invalid items - ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2021-06-13 - - Features: - - Add presets: K2, SE+K2, Bob's, Angel's, B&A, Pyanodon's (with and without AlienLife) - - Changes: - - Fix missing items in Vanilla presets - - Add "significant data" to SE preset - ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2021-06-06 - - Features: - - Initial release diff --git a/Milestones_1.3.20/control.lua b/Milestones_1.3.20/control.lua deleted file mode 100644 index 57b0f843..00000000 --- a/Milestones_1.3.20/control.lua +++ /dev/null @@ -1,115 +0,0 @@ -require("scripts.commands") -require("scripts.tracker") -require("scripts.gui") -require("scripts.presets_loader") -require("scripts.milestones_util") -require("scripts.util") -require("scripts.global_init") -local migrations = require("scripts.migrations") - -local migration = require("__flib__.migration") - - -script.on_init(function() - global.delayed_chat_messages = {} - global.forces = {} - global.players = {} - global.milestones_check_frequency_setting = settings.global["milestones_check_frequency"].value - - initial_preset_string = settings.global["milestones_initial_preset"].value - if initial_preset_string ~= "" then - initial_preset, err = convert_and_validate_imported_json(initial_preset_string) - if initial_preset == nil then - table.insert(global.delayed_chat_messages, {"milestones.message_invalid_initial_preset"}) - table.insert(global.delayed_chat_messages, err) - else - global.current_preset_name = "Imported" - global.loaded_milestones = initial_preset - table.insert(global.delayed_chat_messages, {"milestones.message_loaded_initial_preset"}) - end - end - - load_presets() - if initial_preset == nil then - load_preset_addons() - end - initialize_alias_table() - - -- Initialize for existing forces in existing save file - local backfilled_anything = false - for _, force in pairs(game.forces) do - local backfilled_anything_from_this_force = initialize_force_if_needed(force) - backfilled_anything = backfilled_anything or backfilled_anything_from_this_force - end - if backfilled_anything then - table.insert(global.delayed_chat_messages, {"milestones.message_loaded_into_exiting_game"}) - end - remove_invalid_milestones_all_forces() - - -- Initialize for existing players in existing save file - for _, player in pairs(game.players) do - initialize_player(player) - end - - if next(global.delayed_chat_messages) ~= nil then - create_delayed_chat() - end -end) - -script.on_load(function() - if global.delayed_chat_messages ~= nil and next(global.delayed_chat_messages) ~= nil then - create_delayed_chat() - end -end) - -script.on_event(defines.events.on_force_created, function(event) - initialize_force_if_needed(event.force) -end) - -script.on_event(defines.events.on_player_changed_force, function(event) - local player = game.get_player(event.player_index) - initialize_force_if_needed(player.force) - refresh_gui_for_player(player) -end) - -script.on_event(defines.events.on_forces_merged, function(event) - clear_force(event.source_name) -end) - -script.on_event(defines.events.on_player_created, function(event) - local player = game.players[event.player_index] - initialize_player(player) - if global.forces[player.force.name] == nil then -- Possible if new player is added to empty force e.g. vanilla freeplay - initialize_force_if_needed(player.force) - end -end) - -script.on_event(defines.events.on_player_removed, function(event) - clear_player(event.player_index) -end) - -script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - local setting_name = event.setting - if setting_name == "milestones_check_frequency" then - global.milestones_check_frequency_setting = settings.global["milestones_check_frequency"].value - elseif setting_name == "milestones_compact_list" or setting_name == "milestones_list_by_group" or setting_name == "milestones_show_estimations" then - refresh_gui_for_player(game.get_player(event.player_index)) - end -end) - - -script.on_configuration_changed(function(event) - -- Run migrations for version changes - migration.on_config_changed(event, migrations) - - if next(event.mod_changes) ~= nil then - reload_presets() - end - remove_invalid_milestones_all_forces() - - -- We also do this here because for some reason on_nth_tick sometimes doesn't work in on_init - -- I don't know why - if next(global.delayed_chat_messages) ~= nil then - create_delayed_chat() - end -end) diff --git a/Milestones_1.3.20/data.lua b/Milestones_1.3.20/data.lua deleted file mode 100644 index d2ecfbfe..00000000 --- a/Milestones_1.3.20/data.lua +++ /dev/null @@ -1,193 +0,0 @@ -local data_util = require("__flib__.data-util") -local styles = data.raw["gui-style"].default - -styles.milestones_settings_outer_flow = { - type = "vertical_flow_style", - horizontal_align = "center", - vertical_spacing = 8, - padding = 15 -} - -styles.milestones_settings_scroll = { - type = "scroll_pane_style", - parent = "flib_naked_scroll_pane", - padding = 0 -} - -styles.milestones_deep_frame_in_shallow_frame = { - type = "frame_style", - parent = "deep_frame_in_shallow_frame", - left_padding = 8, - right_padding = 8, - top_padding = 4, - bottom_padding = 4, - minimal_width = 400 -} - -styles.milestones_horizontal_flow_center = { - type = "horizontal_flow_style", - parent = "horizontal_flow", - vertical_align = "center", -} - -styles.milestones_horizontal_flow_big_settings = { - type = "horizontal_flow_style", - parent = "milestones_horizontal_flow_center", - minimal_width = 150, - horizontal_spacing = 8, -} - -styles.milestones_horizontal_flow_big_display = { - type = "horizontal_flow_style", - parent = "milestones_horizontal_flow_big_settings", - left_padding = 16, - right_padding = 16 -} - -styles.milestones_table_style = { - type = "table_style", - horizontal_spacing = 0 -} - -styles.milestones_small_button = { - type = "button_style", - parent = "frame_button", - width = 16, - height = 16 -} - -styles.milestones_grey_button = { - type = "button_style", - parent = "tool_button", - width = 24, - height = 24, - padding = 0 -} - -styles.milestones_selected_grey_button = { - type = "button_style", - parent = "flib_selected_tool_button", - width = 24, - height = 24, - padding = 0 -} - -styles.milestones_confirm_button = { - type = "button_style", - parent = "tool_button_green", - width = 24, - height = 24, - padding = 0 -} - -styles.milestones_empty_button = { - type = "empty_widget_style", - width = 16, - height = 16 -} - -styles.milestones_small_dropdown = { - type = "dropdown_style", - minimal_width = 75 -} - -styles.milestones_small_textfield = { - type = "textbox_style", - width = 70, - natural_width = 70 -} - -styles.milestones_import_export_textbox = { - type = "textbox_style", - width = 600, - minimal_height = 300 -} - -styles.milestones_very_short_textfield = { - type = "textbox_style", - width = 40 -} - -styles.milestones_very_short_spacer = { - type = "empty_widget_style", - width = 40 -} - -styles.milestones_line_left = table.deepcopy(styles.line) -styles.milestones_line_left.border.right_end = styles.line.border.horizontal_line - -styles.milestones_line_right = table.deepcopy(styles.line) -styles.milestones_line_right.border.left_end = styles.line.border.horizontal_line - -styles.milestones_line_center = table.deepcopy(styles.line) -styles.milestones_line_center.border.right_end = styles.line.border.horizontal_line -styles.milestones_line_center.border.left_end = styles.line.border.horizontal_line - - -data:extend{ - { - type = "custom-input", - name = "milestones_toggle_gui", - key_sequence = "CONTROL + ALT + M", - order = "a" - }, - { - type = "custom-input", - name = "milestones_confirm_settings", - key_sequence = "", - linked_game_control = "confirm-gui" - }, - { - type = "custom-input", - name = "milestones_cancel_settings", - key_sequence = "", - linked_game_control = "toggle-menu" - } -} - -local shortcut_icon = "__Milestones__/graphics/shortcut-icon.png" -data:extend{ - { - type = "shortcut", - name = "milestones_toggle_gui", - icon = data_util.build_sprite(nil, {0,0}, shortcut_icon, 32, 2), - disabled_icon = data_util.build_sprite(nil, {48,0}, shortcut_icon, 32, 2), - small_icon = data_util.build_sprite(nil, {0,32}, shortcut_icon, 24, 2), - disabled_small_icon = data_util.build_sprite(nil, {36,32}, shortcut_icon, 24, 2), - associated_control_input = "milestones_toggle_gui", - toggleable = true, - action = "lua" - } -} - --- Sprites -local toolbar_icons = "__Milestones__/graphics/toolbar-icons.png" -local infinity_icon = "__Milestones__/graphics/infinity-icon.png" -local arrows = "__Milestones__/graphics/arrows.png" -local item_icons = "__Milestones__/graphics/item-icons.png" -data:extend{ - data_util.build_sprite("milestones_main_icon_white", {48,0}, shortcut_icon, 32, 2), - - data_util.build_sprite("milestones_infinity_icon", {0, 0}, infinity_icon, 32), - - data_util.build_sprite("milestones_settings_black", {0, 0}, toolbar_icons, 32), - data_util.build_sprite("milestones_settings_white", {32, 0}, toolbar_icons, 32), - data_util.build_sprite("milestones_settings_disabled", {64, 0}, toolbar_icons, 32), - data_util.build_sprite("milestones_pin_black", {0, 32}, toolbar_icons, 32), - data_util.build_sprite("milestones_pin_white", {32, 32}, toolbar_icons, 32), - data_util.build_sprite("milestones_pin_disabled", {64, 32}, toolbar_icons, 32), - - data_util.build_sprite("milestones_arrow_up", {0, 0}, arrows, 16), - data_util.build_sprite("milestones_arrow_down", {16, 0}, arrows, 16), - - data_util.build_sprite("milestones_icon_item", {0, 0}, item_icons, 16), - data_util.build_sprite("milestones_icon_item_black", {0, 16}, item_icons, 16), - data_util.build_sprite("milestones_icon_fluid", {16, 0}, item_icons, 16), - data_util.build_sprite("milestones_icon_fluid_black", {16, 16}, item_icons, 16), - data_util.build_sprite("milestones_icon_technology", {32, 0}, item_icons, 16), - data_util.build_sprite("milestones_icon_technology_black", {32, 16}, item_icons, 16), - data_util.build_sprite("milestones_icon_kill", {48, 0}, item_icons, 16), - data_util.build_sprite("milestones_icon_kill_black", {48, 16}, item_icons, 16), - data_util.build_sprite("milestones_icon_group", {64, 0}, item_icons, 16), - data_util.build_sprite("milestones_icon_group_black", {64, 16}, item_icons, 16), -} diff --git a/Milestones_1.3.20/graphics/arrows.png b/Milestones_1.3.20/graphics/arrows.png deleted file mode 100644 index 56c95a4c..00000000 Binary files a/Milestones_1.3.20/graphics/arrows.png and /dev/null differ diff --git a/Milestones_1.3.20/graphics/item-icons.png b/Milestones_1.3.20/graphics/item-icons.png deleted file mode 100644 index 583aeb9e..00000000 Binary files a/Milestones_1.3.20/graphics/item-icons.png and /dev/null differ diff --git a/Milestones_1.3.20/graphics/shortcut-icon.png b/Milestones_1.3.20/graphics/shortcut-icon.png deleted file mode 100644 index b57604c2..00000000 Binary files a/Milestones_1.3.20/graphics/shortcut-icon.png and /dev/null differ diff --git a/Milestones_1.3.20/graphics/toolbar-icons.png b/Milestones_1.3.20/graphics/toolbar-icons.png deleted file mode 100644 index b5c5c18a..00000000 Binary files a/Milestones_1.3.20/graphics/toolbar-icons.png and /dev/null differ diff --git a/Milestones_1.3.20/info.json b/Milestones_1.3.20/info.json deleted file mode 100644 index 2577e619..00000000 --- a/Milestones_1.3.20/info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "Milestones", - "version": "1.3.20", - "title": "Milestones", - "author": "Wiwiweb", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.60", "flib >= 0.7.0"], - "package": { - "git_publish_branch": "main", - "removeZipAfterPublish": true, - "ignore": ["*.mp4"] - } -} \ No newline at end of file diff --git a/Milestones_1.3.20/locale/en/milestones.cfg b/Milestones_1.3.20/locale/en/milestones.cfg deleted file mode 100644 index e403e322..00000000 --- a/Milestones_1.3.20/locale/en/milestones.cfg +++ /dev/null @@ -1,107 +0,0 @@ -[mod-name] -Milestones=Milestones - -[mod-description] -Milestones=Keep track of your progress by finding out how fast you created key items. Reward your brain on each step of a long playthrough, look back on your factory's history, compare with your friends, or challenge yourself.\nSupports any list of items and comes with presets for popular big mods. Can be added to existing games. - -[mod-setting-name] -milestones_check_frequency=Ticks between each check -milestones_initial_preset=Initial preset -milestones_compact_list=Compact list -milestones_list_by_group=List by group -milestones_show_estimations=Show estimations -milestones_disable_chat_notifications=Disable milestone notifications - -[mod-setting-description] -milestones_check_frequency=The mod will wait this many ticks between each completion check.\nLower this if you care about time precision, raise if you want less performance impact.\nIf you set this to less than 60, the GUI will also show milliseconds. -milestones_initial_preset=Initial preset loaded at the start of a map. Has no effect on existing games. Use Milestones' "export" feature in-game to get a string that you can paste here. -milestones_compact_list=Removes the "Completed at" labels before each time. -milestones_list_by_group=If checked, milestones will be grouped together in categories.\nIf unchecked, all milestones will be listed together chronologically. -milestones_show_estimations=If checked, milestone times that were estimated from production history will show the estimation precision after the time (Looks like "(Β±5m)"). -milestones_disable_chat_notifications=If checked, no chat notification will appear when a new milestone is reached. This is per-player, so it only affects you. - -[shortcut-name] -milestones_toggle_gui=Show milestones - -[controls] -milestones_toggle_gui=Show milestones - -[milestones] -title=Milestones -incomplete_label=Incomplete -completed_label=Completed at -researched_label=Researched at -killed_label=Killed at -plus_minus_minutes=(Β±__1__m) -estimation_tooltip=Estimation based on production statistics. -estimation_tooltip_technology=There is no historical data for technologies, so no estimation can be done. -invalid_entry=Invalid: -type_item=Item -type_fluid=Fluid -type_technology=Research -type_kill=Kill -type_group=Group -edit_time_tooltip=Edit estimated time -edit_time_confirm=Confirm and lock-in time -edit_time_minutes=minutes ago -edit_time_hours=hours ago -edit_time_days=days ago -edit_time_exact_time=Exact time -settings_instructions=Settings -settings_disabled=Settings (Requires Admin permissions) -pin_instructions=Keep open - -settings_title=Milestones settings -settings_import_title=Import settings -settings_export_title=Export settings -settings_preset=Preset: -settings_imported=Imported -settings_import=Import -settings_export=Export -settings_export_encoded=Encoded: -settings_import_description=Paste a plain JSON string or an encoded string. -settings_back=Back -settings_confirm=Confirm -settings_alias=Alias -settings_add_something=Add __1__ -settings_quantity_tooltip=Quantity -settings_infinity_button_tooltip=Infinite milestone: Completing this milestone will create a new one with a higher quantity. -settings_next_textfield_tooltip=Formula for the next milestone. Example: "x10" or "+5". -settings_arrow_tooltip=__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ to move 5 at a time. -settings_checkbox_tooltip=Select to delete this milestone or to add a new milestone below it.\n__CONTROL_STYLE_BEGIN__Control-click__CONTROL_STYLE_END__ to select multiple, __CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ to select a range. -settings_add_tooltip=Add a new __1__ milestone under the selected milestone. -settings_add_group=Add a new group under the selected milestone. -settings_delete_tooltip=Delete all selected milestones. - -message_loaded_presets=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] is using the auto-detected preset: [color=green]__1__[/color]. Change it in the settings (__CONTROL__milestones_toggle_gui__). -message_loaded_initial_preset=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] successfully loaded the preset from Mod Settings. -message_loaded_preset_addons_singular=[img=milestones_main_icon_white] Also added milestones from this mod: [color=green]__1__[/color]. -message_loaded_preset_addons_plural=[img=milestones_main_icon_white] Also added milestones from these mods: [color=green]__1__[/color]. -message_loaded_into_exiting_game=[img=milestones_main_icon_white] Completion times for already-completed milestones have been backfilled using production statistics. -message_reloaded_presets_singular=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] found a new preset: [color=green]__1__[/color]. Go to settings to use it (__CONTROL__milestones_toggle_gui__). -message_reloaded_presets_plural=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] found new presets: [color=green]__1__[/color]. Go to settings to use one (__CONTROL__milestones_toggle_gui__). -message_settings_changed=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] settings changed! -message_settings_changed_multiplayer=[img=milestones_main_icon_white] [font=default-large-bold]Milestones[/font] settings changed by __1__! -message_settings_backfilled=Completion times for new milestones were backfilled using production statistics. -message_milestone_reached_item_first=[img=milestones_main_icon_white] [font=default-large-bold]Created the first [color=green][img=__1__]__2__[/color] at [color=green]__3__[img=quantity-time][/color]![/font] -message_milestone_reached_item_more=[img=milestones_main_icon_white] [font=default-large-bold]Created [color=green]__1__ [img=__2__]__3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] -message_milestone_reached_kill_first=[img=milestones_main_icon_white] [font=default-large-bold]Killed the first [color=green][img=__1__]__2__[/color] at [color=green]__3__[img=quantity-time][/color]![/font] -message_milestone_reached_kill_more=[img=milestones_main_icon_white] [font=default-large-bold]Killed [color=green]__1__ [img=__2__]__3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] -message_milestone_reached_technology=[img=milestones_main_icon_white] [font=default-large-bold]Researched [color=green][img=__1__]__2____3__[/color] at [color=green]__4__[img=quantity-time][/color]![/font] -message_settings_permission_denied=[color=red]Cannot change Milestones settings. You need Admin permissions.[/color] -message_invalid_import_json=[color=red]Invalid import string. This string is not a valid JSON string or encoded string.[/color] -message_invalid_import_type=[color=red]Invalid import string. Invalid type: [/color] -message_invalid_import_quantity=[color=red]Invalid import string. Invalid quantity: [/color] -message_invalid_import_next=[color=red]Invalid import string. Invalid next value: [/color] -message_invalid_import_missing_field=[color=red]Invalid import string. Missing field: [/color] -message_invalid_next=[color=red]Invalid next value: [/color] -message_invalid_initial_preset=[color=red]Milestones failed to load the initial preset from Mod Settings and will fall back to auto-detection. Error was:[/color] -message_invalid_item=[color=red]Milestones removed an invalid item from the list of milestones: __1__[/color] - -fluidic_power_tooltip=Generate __1__ of electric energy. - -[milestones.commands] -debug-print-forces=- Print the mod's internal global table, for debugging purposes. -debug-print-loaded-milestones=- Print the json of loaded milestones. Same as the "export" string available in settings. -reinitialize-gui=- Reset the mod's internal variables related to the GUI, only for the player using the command. Try this if you experience GUI-related crashes. -reinitialize-global=- Reset all of the mod's internal variables (except achieved milestones) for all players. Try this as a last resort. \ No newline at end of file diff --git a/Milestones_1.3.20/locale/ru/milestones.cfg b/Milestones_1.3.20/locale/ru/milestones.cfg deleted file mode 100644 index ffc5411b..00000000 --- a/Milestones_1.3.20/locale/ru/milestones.cfg +++ /dev/null @@ -1,109 +0,0 @@ -[mod-name] -Milestones=Milestones (Π­Ρ‚Π°ΠΏΡ‹) - -[mod-description] -Milestones=Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° своим прогрСссом, узнавая, ΠΊΠ°ΠΊ быстро Π²Ρ‹ создавали ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ элСмСнты. Π’ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ свой ΠΌΠΎΠ·Π³ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ прохоТдСния, ΠΎΠ³Π»ΡΠ΄Ρ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π°Π·Π°Π΄ Π½Π° ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ своСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, сравнивайтС с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ ΠΈΠ»ΠΈ бросайтС Π²Ρ‹Π·ΠΎΠ² самому сСбС.\nΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ любой список ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΈ поставляСтся с прСсСтами для популярных Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ². МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. - -[mod-setting-name] -milestones_check_frequency=Π’ΠΈΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ -milestones_initial_preset=ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ прСдустановки -milestones_compact_list=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ список -milestones_list_by_group=Бписок ΠΏΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌ -milestones_show_estimations=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΡƒ -milestones_disable_chat_notifications=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ увСдомлСния ΠΎΠ± этапах - -[mod-setting-description] -milestones_check_frequency=Мод Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ это количСство Ρ‚ΠΈΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этапа.\nΠ£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π²Ρ‹ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ΡΡŒ ΠΎ точности Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.\nЕсли Π²Ρ‹ установитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΅ 60, графичСский интСрфСйс Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ миллисСкунды. -milestones_initial_preset=ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ установки, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹. НС влияСт Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ «экспорта этапов» Π² ΠΈΠ³Ρ€Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ строку, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сюда. -milestones_compact_list=Π£Π±ΠΈΡ€Π°Π΅Ρ‚ строку "Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π²" ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. -milestones_list_by_group=Если ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, этапы Π±ΡƒΠ΄ΡƒΡ‚ сгруппированы ΠΏΠΎ катСгориям.\nЕсли Ρ„Π»Π°ΠΆΠΎΠΊ снят, всС этапы Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны вмСстС хронологичСски. -milestones_show_estimations=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, врСмя этапа, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ†Π΅Π½Π΅Π½ΠΎ ΠΈΠ· истории производства, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ послС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π² Π²ΠΈΠ΄Π΅ "(Β±5ΠΌ)"). -milestones_disable_chat_notifications=Если Ρ„Π»Π°ΠΆΠΎΠΊ установлСн, ΠΏΡ€ΠΈ достиТСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ этапа ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π² Ρ‡Π°Ρ‚Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ. Настройка "для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°", поэтому ΠΎΠ½Π° влияСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вас. - -[shortcut-name] -milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ этапы - -[controls] -milestones_toggle_gui=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ этапы - -[milestones] -title=Π­Ρ‚Π°ΠΏΡ‹ -incomplete_label=НС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ -completed_label=Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π² -researched_label=ИсслСдовано Π² -killed_label=Π£Π±ΠΈΡ‚ Π² -plus_minus_minutes=(Β±__1__ ΠΌΠΈΠ½) -estimation_tooltip=ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° основС статистики производства. -estimation_tooltip_technology=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, поэтому ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. -invalid_entry=НСвСрно: -type_item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -type_fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -type_technology=ИсслСдованиС -type_kill=Убийство -type_group=Π“Ρ€ΡƒΠΏΠΏΠ° -edit_time_tooltip=РасчётноС врСмя -edit_time_confirm=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ врСмя -edit_time_minutes=ΠΌΠΈΠ½ΡƒΡ‚(Ρ‹) Π½Π°Π·Π°Π΄ -edit_time_hours=часов Π½Π°Π·Π°Π΄ -edit_time_days=Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ -edit_time_exact_time=Π’ΠΎΡ‡Π½ΠΎΠ΅ врСмя -settings_instructions=Настройки -settings_disabled=Настройки (Π’Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° администратора) -pin_instructions=Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ - -settings_title=Настройки этапов -settings_import_title=Π˜ΠΌΠΏΠΎΡ€Ρ‚ настроСк -settings_export_title=Экспорт настроСк -settings_preset=ΠŸΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ°: -settings_imported=Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ -settings_import=Π˜ΠΌΠΏΠΎΡ€Ρ‚ -settings_export=Экспорт -settings_export_encoded=Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ: -settings_import_description=Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ строку JSON ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ строку. -settings_back=Назад -settings_confirm=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ -settings_alias=НазваниС -settings_add_something=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ __1__ -settings_quantity_tooltip=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ -settings_infinity_button_tooltip=БСсконСчный этап: Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этого этапа создаст Π½ΠΎΠ²Ρ‹ΠΉ этап с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ количСством. -settings_next_textfield_tooltip=Π€ΠΎΡ€ΠΌΡƒΠ»Π° для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ этапа. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: "x10" ΠΈΠ»ΠΈ "+5". -settings_arrow_tooltip=__CONTROL_STYLE_BEGIN__Shift-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ сразу 5. -settings_checkbox_tooltip=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот этап ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ этап ΠΏΠΎΠ΄ Π½ΠΈΠΌ.\n__CONTROL_STYLE_BEGIN__Control-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, __CONTROL_STYLE_BEGIN__Shift-Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__ для Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. -settings_add_tooltip=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ этап __1__ ΠΏΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ этапом. -settings_add_group=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ΄ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ этапом. -settings_delete_tooltip=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ этапы. - -message_loaded_presets=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ прСдустановку: [color=green]__1__[/color]. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Ρ‘ Π² настройках (__CONTROL__milestones_toggle_gui__). -message_loaded_initial_preset=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ прСдустановки ΠΈΠ· настроСк ΠΌΠΎΠ΄Π°. -message_loaded_preset_addons_singular=[img=milestones_main_icon_white] Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ этапы этого ΠΌΠΎΠ΄Π°: [color=green]__1__[/color]. -message_loaded_preset_addons_plural=[img=milestones_main_icon_white] Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ этапы ΠΈΠ· этих ΠΌΠΎΠ΄ΠΎΠ²: [color=green]__1__[/color]. -message_loaded_into_exiting_game=[img=milestones_main_icon_white] ВрСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… этапов Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ· статистики производства. -message_reloaded_presets_singular=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] нашли Π½ΠΎΠ²ΡƒΡŽ прСдустановку: [color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² настройки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ (__CONTROL__milestones_toggle_gui__). -message_reloaded_presets_plural=[img=milestones_main_icon_white] [font=default-large-bold]Π­Ρ‚Π°ΠΏΡ‹[/font] нашли Π½ΠΎΠ²Ρ‹Π΅ прСдустановки: [color=green]__1__[/color]. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² настройки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… (__CONTROL__milestones_toggle_gui__). -message_settings_changed=[img=milestones_main_icon_white] Настройки [font=default-large-bold]Π­Ρ‚Π°ΠΏΠΎΠ²[/font] ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹! -message_settings_changed_multiplayer=[img=milestones_main_icon_white] Настройки [font=default-large-bold]Π­Ρ‚Π°ΠΏΠΎΠ²[/font] ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ __1__! -message_settings_backfilled=ВрСмя Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π½ΠΎΠ²Ρ‹Ρ… этапов Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ· статистики производства. -message_milestone_reached_item_first=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΎΠ·Π΄Π°Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ [color=green][img=__1__]__2__[/color] Π² [color=green]__3__[img=quantity-time][/color]![/font] -message_milestone_reached_item_more=[img=milestones_main_icon_white] [font=default-large-bold]Π‘ΠΎΠ·Π΄Π°Π½ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] -message_milestone_reached_kill_first=[img=milestones_main_icon_white] [font=default-large-bold]Π£Π±ΠΈΠ» ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ [color=green][img=__1__]__2__[/color] Π² [color=green]__3__[img=quantity-time][/color]![/font] -message_milestone_reached_kill_more=[img=milestones_main_icon_white] [font=default-large-bold]Π£Π±ΠΈΡ‚ΠΎ [color=green]__1__ [img=__2__]__3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] -message_milestone_reached_technology=[img=milestones_main_icon_white] [font=default-large-bold]ИсслСдовано [color=green][img=__1__]__2____3__[/color] Π² [color=green]__4__[img=quantity-time][/color]![/font] -message_settings_permission_denied=[color=red]НСвозмоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ настройки этапов. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€Π°Π²Π° администратора.[/color] -message_invalid_import_json=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. Π­Ρ‚Π° строка Π½Π΅ являСтся допустимой строкой JSON ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строкой.[/color] -message_invalid_import_type=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСвСрный Ρ‚ΠΈΠΏ: [/color] -message_invalid_import_quantity=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСвСрноС количСство: [/color] -message_invalid_import_next=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. НСдопустимоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: [/color] -message_invalid_import_missing_field=[color=red]НСвСрная строка ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°. ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅: [/color] -message_invalid_next=[color=red]НСвСрноС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: [/color] -message_invalid_initial_preset=[color=red]Π­Ρ‚Π°ΠΏΠ°ΠΌ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ прСдустановки ΠΈΠ· настроСк ΠΌΠΎΠ΄Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ Π°Π²Ρ‚ΠΎ-ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ. Ошибка:[/color] -message_invalid_item=[color=red]Мод ΡƒΠ΄Π°Π»ΠΈΠ» нСдопустимый элСмСнт ΠΈΠ· списка этапов: __1__[/color] -message_migration_130_groups=[img=milestones_main_icon_white] Π­Ρ‚Π°ΠΏΡ‹ 1.3.0 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ этапов Π² катСгориях, Π½ΠΎ ваш ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ список Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.\nΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ прСдустановки Π² настройках (__CONTROL__milestones_toggle_gui__), Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹. - -fluidic_power_tooltip=Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ __1__ элСктроэнСргии. - -[milestones.commands] -debug-print-forces=- Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΠΎΠ΄Π° для Ρ†Π΅Π»Π΅ΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. -debug-print-loaded-milestones=- Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ строку JSON Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… этапов. Π’ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ «экспорт» Π² настройках. -reinitialize-gui=- Бброс Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π°, относящихся ΠΊ интСрфСйсу, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это Π² случаС сбоСв Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с интСрфСйсом. -reinitialize-global=- Бброс всСх Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π° (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ достигнутых этапов) для всСх ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС. - diff --git a/Milestones_1.3.20/scripts/gui.lua b/Milestones_1.3.20/scripts/gui.lua deleted file mode 100644 index 62f3e628..00000000 --- a/Milestones_1.3.20/scripts/gui.lua +++ /dev/null @@ -1,327 +0,0 @@ -require("scripts.gui_display_page") -require("scripts.gui_settings_page") -require("scripts.gui_import_export") - -local function get_frame(player_index, frame_name) - local global_player = global.players[player_index] - if not global_player[frame_name] or not global_player[frame_name].valid then - reinitialize_player(player_index) - end - return global.players[player_index][frame_name] -end - -function get_outer_frame(player_index) - return get_frame(player_index, "outer_frame") -end - -function get_main_frame(player_index) - return get_frame(player_index, "main_frame") -end - -function get_inner_frame(player_index) - return get_frame(player_index, "inner_frame") -end - -function build_gui_frames(player) - local screen_element = player.gui.screen - local outer_frame = screen_element.add{type="frame", name="milestones_outer_frame", style="outer_frame", visible=false} - local main_frame = outer_frame.add{type="frame", name="milestones_main_frame", direction="vertical"} - - local titlebar = main_frame.add{type="flow", name="milestones_titlebar", style="flib_titlebar_flow", direction="horizontal"} - titlebar.add{ - type="label", - name="milestones_main_label", - style="frame_title", - caption={"milestones.title"}, - ignored_by_interaction=true - } - titlebar.add{type="empty-widget", style="flib_titlebar_drag_handle", ignored_by_interaction=true} - local settings_button = titlebar.add{ - type="sprite-button", - name="milestones_settings_button", - style="frame_action_button", - sprite="milestones_settings_white", - hovered_sprite="milestones_settings_black", - clicked_sprite="milestones_settings_black", - mouse_button_filter={"left"}, - tooltip = {"milestones.settings_instructions"}, - tags={ - action="milestones_open_settings" - } - } - if not player.admin then - settings_button.enabled = false - settings_button.tooltip = {"milestones.settings_disabled"} - settings_button.sprite = "milestones_settings_disabled" - settings_button.hovered_sprite = "milestones_settings_disabled" - settings_button.clicked_sprite = "milestones_settings_disabled" - end - titlebar.add{ - type="sprite-button", - name="milestones_pin_button", - style="frame_action_button", - mouse_button_filter={"left"}, - sprite="milestones_pin_white", - hovered_sprite="milestones_pin_black", - clicked_sprite="milestones_pin_black", - tooltip = {"milestones.pin_instructions"}, - tags={ - action="milestones_pin_gui" - } - } - titlebar.add{ - type="sprite-button", - name="milestones_close_button", - style="frame_action_button", - mouse_button_filter={"left"}, - sprite="utility/close_white", - hovered_sprite="utility/close_black", - clicked_sprite="utility/close_black", - tooltip = {"gui.close-instruction"}, - tags={ - action="milestones_close_gui" - } - } - titlebar.drag_target = outer_frame - - local inner_frame = main_frame.add{type="frame", name="milestones_inner_frame", direction="vertical", style="inside_shallow_frame"} - - local dialog_buttons_bar = main_frame.add{type="flow", style="dialog_buttons_horizontal_flow", name="milestones_dialog_buttons", direction="horizontal"} - dialog_buttons_bar.add{type="button", style="back_button", caption={"milestones.settings_back"}, tags={action="milestones_cancel_settings"}} - dialog_buttons_bar.add{type="empty-widget", style="flib_dialog_footer_drag_handle", ignored_by_interaction=true} - dialog_buttons_bar.add{type="button", style="confirm_button", caption={"milestones.settings_confirm"}, tags={action="milestones_confirm_settings"}} - dialog_buttons_bar.drag_target = outer_frame - - -- Import/export side menu - - local import_export_frame = outer_frame.add{type="frame", name="milestones_settings_import_export", style="inner_frame_in_outer_frame", direction="vertical", visible=false} - local import_export_titlebar = import_export_frame.add{type="flow", name="milestones_settings_import_export_titlebar", style="flib_titlebar_flow", direction="horizontal"} - import_export_titlebar.add{ - type="label", - name="milestones_settings_import_export_titlebar_label", - style="frame_title", - ignored_by_interaction=true - } - import_export_titlebar.add{type="empty-widget", style="flib_titlebar_drag_handle", ignored_by_interaction=true} - import_export_titlebar.drag_target = outer_frame - - import_export_frame.add{type="flow", name="milestones_settings_import_export_inside", direction="vertical"} - - return outer_frame, main_frame, inner_frame -end - -local function update_settings_button(player) -- In case permissions changed - local main_frame = get_main_frame(player.index) - settings_button = main_frame.milestones_titlebar.milestones_settings_button - - if player.admin then - settings_button.enabled = true - settings_button.tooltip = {"milestones.settings_instructions"} - settings_button.sprite = "milestones_settings_white" - settings_button.hovered_sprite = "milestones_settings_black" - settings_button.clicked_sprite = "milestones_settings_black" - else - settings_button.enabled = false - settings_button.tooltip = {"milestones.settings_disabled"} - settings_button.sprite = "milestones_settings_disabled" - settings_button.hovered_sprite = "milestones_settings_disabled" - settings_button.clicked_sprite = "milestones_settings_disabled" - end -end - -local function open_gui(player) - local global_player = global.players[player.index] - local outer_frame = get_outer_frame(player.index) - build_display_page(player) - update_settings_button(player) - outer_frame.visible = true - outer_frame.bring_to_front() - player.opened = get_main_frame(player.index) - player.set_shortcut_toggled("milestones_toggle_gui", true) - - if not global_player.opened_once_before then -- Open in the center the first time - outer_frame.force_auto_center() - global_player.opened_once_before = true - end -end - -local function close_gui(player) - local outer_frame = get_outer_frame(player.index) - outer_frame.visible = false - outer_frame.auto_center = false -- Remove auto_center from the force_auto_center() that we did for the first open - get_inner_frame(player.index).clear() - - local import_export_frame = outer_frame.milestones_settings_import_export - local import_export_inside_frame = import_export_frame.milestones_settings_import_export_inside - import_export_inside_frame.clear() - import_export_frame.visible = false - - player.set_shortcut_toggled("milestones_toggle_gui", false) - if player.opened == get_main_frame(player.index) then - player.opened = nil - end -end - -local function toggle_gui(player) - local visible = get_outer_frame(player.index).visible - if visible == false then - open_gui(player) - else - close_gui(player) - end -end - -function refresh_gui_for_player(player) - if is_display_page_visible(player.index) then - get_inner_frame(player.index).clear() - build_display_page(player) - end -end - -function refresh_gui_for_force(force) - for _, player in pairs(force.players) do - refresh_gui_for_player(player) - end -end - -local function toggle_pinned(player, element) - local global_player = global.players[player.index] - global_player.pinned = not global_player.pinned - if global_player.pinned then - element.style = "flib_selected_frame_action_button" - element.sprite = "milestones_pin_black" - player.opened = nil - else - element.style = "frame_action_button" - element.sprite = "milestones_pin_white" - local main_frame = get_main_frame(player.index) - if player.opened == nil then - player.opened = main_frame - elseif player.opened ~= main_frame then - close_gui(player) - end - end -end - -script.on_event(defines.events.on_gui_closed, function(event) - if event.element and event.element.name == "milestones_main_frame" then - - local player = game.get_player(event.player_index) - local global_player = global.players[event.player_index] - if global_player.one_time_prevent_close then - global_player.one_time_prevent_close = false - player.opened = get_main_frame(player.index) - elseif not global_player.pinned then - close_gui(player) - end - end -end) - -script.on_event(defines.events.on_player_display_resolution_changed, function(event) - local player = game.players[event.player_index] - refresh_gui_for_player(player) -end) - -script.on_event(defines.events.on_player_display_scale_changed, function(event) - local player = game.players[event.player_index] - refresh_gui_for_player(player) -end) - --- Quickbar shortcut -script.on_event(defines.events.on_lua_shortcut, function(event) - if event.prototype_name == "milestones_toggle_gui" then - local player = game.get_player(event.player_index) - toggle_gui(player) - end -end) - --- Keyboard shortcuts -script.on_event("milestones_toggle_gui", function(event) - local player = game.get_player(event.player_index) - toggle_gui(player) -end) - --- Override `E` on the settings page -script.on_event("milestones_confirm_settings", function(event) - if is_settings_page_visible(event.player_index) then - confirm_settings_page(event.player_index) - global.players[event.player_index].one_time_prevent_close = true - end -end) - --- Override `Escape` on the settings page -script.on_event("milestones_cancel_settings", function(event) - if is_settings_page_visible(event.player_index) then - cancel_settings_page(event.player_index) - global.players[event.player_index].one_time_prevent_close = true - end -end) - -script.on_event(defines.events.on_gui_click, function(event) - if not event.element then return end - if not event.element.tags then return end - if event.element.tags.action == "milestones_close_gui" then - local player = game.get_player(event.player_index) - close_gui(player) - elseif event.element.tags.action == "milestones_pin_gui" then - local player = game.get_player(event.player_index) - toggle_pinned(player, event.element) - elseif event.element.tags.action == "milestones_open_settings" then - local player = game.get_player(event.player_index) - get_inner_frame(player.index).clear() - build_settings_page(player) - elseif event.element.tags.action == "milestones_cancel_settings" then - cancel_settings_page(event.player_index) - elseif event.element.tags.action == "milestones_confirm_settings" then - confirm_settings_page(event.player_index) - elseif event.element.tags.action == "milestones_swap_setting" then - swap_settings(event.player_index, event) - elseif event.element.tags.action == "milestones_delete_settings" then - delete_selected_settings(event.player_index) - elseif event.element.tags.action == "milestones_add_setting" then - add_setting(event.player_index, event.element) - elseif event.element.tags.action == "milestones_edit_time" then - enable_edit_time(event.player_index, event.element) - elseif event.element.tags.action == "milestones_confirm_edit_time" then - confirm_edit_time(event.player_index, event.element) - elseif event.element.tags.action == "milestones_open_import" then - toggle_import_export_page(event.player_index, event.element, true) - elseif event.element.tags.action == "milestones_open_export" then - toggle_import_export_page(event.player_index, event.element, false) - elseif event.element.tags.action == "milestones_close_import_export" then - close_import_export_page(event.player_index) - elseif event.element.tags.action == "milestones_import_settings" then - import_settings(event.player_index) - elseif event.element.tags.action == "milestones_settings_infinity_button" then - toggle_infinity_button(event.element) - elseif event.element.tags.action == "milestones_select_setting" then -- have to use on_gui_click instead of on_gui_checked_state_changed so we can check for shift - select_setting(event) - end -end) - --- Textfield enter -script.on_event(defines.events.on_gui_confirmed, function(event) - if not event.element then return end - if not event.element.tags then return end - if event.element.tags.action == "milestones_confirm_edit_time_textfield" then - confirm_edit_time(event.player_index, event.element) - end -end) - --- Checkboxes -script.on_event(defines.events.on_gui_checked_state_changed, function(event) - if not event.element then return end - if not event.element.tags then return end - if event.element.name == "milestones_export_encoded_checkbox" then - toggle_export_encoded(event.element) - end -end) - --- Dropdowns -script.on_event(defines.events.on_gui_selection_state_changed, function(event) - if not event.element then return end - if not event.element.tags then return end - if event.element.tags.action == "milestones_change_preset" then - preset_dropdown_changed(event) - end -end) diff --git a/Milestones_1.3.20/scripts/presets_loader.lua b/Milestones_1.3.20/scripts/presets_loader.lua deleted file mode 100644 index b988d6d0..00000000 --- a/Milestones_1.3.20/scripts/presets_loader.lua +++ /dev/null @@ -1,150 +0,0 @@ -require("scripts.util") -require("presets.presets") -require("presets.presets_pymods") -require("presets.preset_addons") - -local function validate_milestone_presets(interface_name, presets_to_validate, existing_table) - local valid = true - if type(presets_to_validate) ~= "table" then - print_delayed_red("Interface " .. interface_name .. " should return a table.") - valid = false - else - for preset_name, preset in pairs(presets_to_validate) do - if type(preset_name) ~= "string" then - print_delayed_red("Interface " .. interface_name .. " should return a table with named keys.") - valid = false - break - end - if existing_table[preset_name] then - log("Preset " .. preset_name .. " already exists. Overriding.") - end - if not preset.required_mods then - print_delayed_red("Preset " .. preset_name .. " is missing a `required_mods` value.") - valid = false - end - if not preset.milestones then - print_delayed_red("Preset " .. preset_name .. " is missing a `milestones` value.") - valid = false - else - _, error = validate_milestones(preset.milestones) - if error then - print_delayed_red({"", "Preset ", preset_name, ": ", error}) - valid = false - end - end - end - end - if not valid then - print_delayed_red("[img=utility/danger_icon] Please warn the mod author for " .. interface_name .. " about the errors above.") - end - return valid -end - -local function is_preset_mods_enabled(preset) - local forbidden_mods = preset.forbidden_mods or {} - for _, mod_name in pairs(preset.required_mods) do - if not game.active_mods[mod_name] then return false end - end - for _, mod_name in pairs(forbidden_mods) do - if game.active_mods[mod_name] then return false end - end - return true -end - -local function add_remote_presets_to_preset_table() - -- See presets.lua to find out how to use this reverse remote interface to add your own preset. - for interface_name, functions in pairs(remote.interfaces) do - if functions["milestones_presets"] then - local remote_milestones_presets = remote.call(interface_name, "milestones_presets") - if validate_milestone_presets(interface_name, remote_milestones_presets, presets) then - ---@cast remote_milestones_presets table - for remote_preset_name, remote_preset in pairs(remote_milestones_presets) do - presets[remote_preset_name] = remote_preset - end - end - end - end -end - -function load_presets() - global.valid_preset_names = {"Empty"} - - add_remote_presets_to_preset_table() - - local max_nb_mods_matched = -1 - for preset_name, preset in pairs(presets) do - if is_preset_mods_enabled(preset) then - table.insert(global.valid_preset_names, preset_name) - if #preset.required_mods > max_nb_mods_matched then - max_nb_mods_matched = #preset.required_mods - chosen_preset_name = preset_name - end - end - end - log("Valid presets found: " .. serpent.line(global.valid_preset_names)) - - if global.current_preset_name == nil then - global.current_preset_name = chosen_preset_name - log("Auto-detected preset used: " .. global.current_preset_name) - table.insert(global.delayed_chat_messages, {"milestones.message_loaded_presets", global.current_preset_name}) - global.loaded_milestones = presets[global.current_preset_name].milestones - end -end - -function load_preset_addons() - preset_addons_loaded = {} - - -- See presets.lua to find out how to use this reverse remote interface to add your own preset addon. - for interface_name, functions in pairs(remote.interfaces) do - if functions["milestones_preset_addons"] then - local remote_milestones_presets = remote.call(interface_name, "milestones_preset_addons") - if validate_milestone_presets(interface_name, remote_milestones_presets, preset_addons) then - ---@cast remote_milestones_presets table - for remote_preset_name, remote_preset in pairs(remote_milestones_presets) do - preset_addons[remote_preset_name] = remote_preset - end - end - end - end - - for preset_addon_name, preset_addon in pairs(preset_addons) do - if is_preset_mods_enabled(preset_addon) then - table.insert(preset_addons_loaded, preset_addon_name) - for _, milestone in ipairs(preset_addon.milestones) do - table.insert(global.loaded_milestones, milestone) - end - end - end - log("Preset addons loaded: " .. serpent.line(preset_addons_loaded)) - - if #preset_addons_loaded == 1 then - table.insert(global.delayed_chat_messages, {"milestones.message_loaded_preset_addons_singular", preset_addons_loaded[1]}) - elseif #preset_addons_loaded > 1 then - table.insert(global.delayed_chat_messages, {"milestones.message_loaded_preset_addons_plural", table.concat(preset_addons_loaded, ", ")}) - end -end - -function reload_presets() - log("Reloading presets") - local added_presets = {} - local new_valid_preset_names = {"Empty"} - - add_remote_presets_to_preset_table() - - for preset_name, preset in pairs(presets) do - if is_preset_mods_enabled(preset) then - table.insert(new_valid_preset_names, preset_name) - if not table_contains(global.valid_preset_names, preset_name) then - table.insert(added_presets, preset_name) - end - end - end - global.valid_preset_names = new_valid_preset_names - log("New presets found: " .. serpent.line(added_presets)) - log("New list of valid presets: " .. serpent.line(global.valid_preset_names)) - if #added_presets == 1 then - table.insert(global.delayed_chat_messages, {"milestones.message_reloaded_presets_singular", added_presets[1]}) - elseif #added_presets > 1 then - table.insert(global.delayed_chat_messages, {"milestones.message_reloaded_presets_plural", table.concat(added_presets, ", ")}) - end -end diff --git a/Milestones_1.3.20/scripts/tracker.lua b/Milestones_1.3.20/scripts/tracker.lua deleted file mode 100644 index c37a4b62..00000000 --- a/Milestones_1.3.20/scripts/tracker.lua +++ /dev/null @@ -1,111 +0,0 @@ -local core_util = require("__core__/lualib/util.lua") -local misc = require("__flib__.misc") -require("scripts.gui") -require("scripts.milestones_util") - -local function force_print(force, message) - for _, player in pairs(force.players) do - if not settings.get_player_settings(player)["milestones_disable_chat_notifications"].value then - player.print(message) - end - end -end - -local function print_milestone_reached(force, milestone) - local human_timestamp = misc.ticks_to_timestring(milestone.completion_tick) - local sprite_path_prefix = milestone.type == "kill" and "entity" or milestone.type - local sprite_name = sprite_path_prefix .. "." .. milestone.name - local localised_name - if milestone.type == "technology" then - localised_name = game.technology_prototypes[milestone.name].localised_name - local level_string = (milestone.quantity == 1 and "" or " Level "..milestone.quantity.." ") - force_print(force, {"milestones.message_milestone_reached_technology", sprite_name, localised_name, level_string, human_timestamp}) - else - if milestone.type == "item" then - if milestone.name == "se-rocket-launch-pad-silo-dummy-result-item" then - localised_name = "Cargo rocket" - else - localised_name = game.item_prototypes[milestone.name].localised_name - end - elseif milestone.type == "fluid" then - localised_name = game.fluid_prototypes[milestone.name].localised_name - elseif milestone.type == "kill" then - localised_name = game.entity_prototypes[milestone.name].localised_name - else - error("Invalid milestone type! " .. milestone.type) - end - - local message_type = milestone.type == "kill" and "kill" or "item" - local postscript - if milestone.name == "character" then - postscript = " (haha! 😁)" - end - if milestone.quantity == 1 then - force_print(force, {"", {"milestones.message_milestone_reached_" ..message_type.. "_first", sprite_name, localised_name, human_timestamp}, postscript}) - else - local print_quantity = milestone.quantity - if milestone.quantity >= 10000 then - print_quantity = core_util.format_number(milestone.quantity, true) - end - force_print(force, {"", {"milestones.message_milestone_reached_" ..message_type.. "_more", print_quantity, sprite_name, localised_name, human_timestamp}, postscript}) - end - end - force.play_sound{path="utility/achievement_unlocked"} -end - -function track_item_creation(event) - for force_name, global_force in pairs(global.forces) do - local milestones_per_tick = #global_force.incomplete_milestones / global.milestones_check_frequency_setting - local step_nb = event.tick % global.milestones_check_frequency_setting - local i = math.floor(milestones_per_tick * step_nb) + 1 - local to_i = math.floor(milestones_per_tick * (step_nb + 1)) - -- log("(per tick: "..milestones_per_tick..") tick " .. event.tick .. " : " .. i .. "-" .. to_i) - - while i <= to_i do - local milestone = global_force.incomplete_milestones[i] - if milestone.type ~= "technology" - and is_production_milestone_reached(milestone, global_force) then - if milestone.next then - local next_milestone = create_next_milestone(force_name, milestone) - if next_milestone then - table.insert(global_force.incomplete_milestones, next_milestone) - table.insert(global_force.milestones_by_group[next_milestone.group], next_milestone) - end - end - local force = game.forces[force_name] - mark_milestone_reached(global_force, milestone, game.tick, i) - print_milestone_reached(force, milestone) - refresh_gui_for_force(force) - to_i = math.min(to_i, #global_force.incomplete_milestones) -- Don't go past the end of the table - else - -- When a milestone is reached, incomplete_milestones loses an element - -- so we only increment when a milestone is not reached - i = i + 1 - end - end - end -end -script.on_event(defines.events.on_tick, track_item_creation) - -function check_technology_milestone_reached(event) - local technology_researched = event.research - local force = event.research.force - local global_force = global.forces[force.name] - if global_force == nil then return end - - local i = 1 - while i <= #global_force.incomplete_milestones do - local milestone = global_force.incomplete_milestones[i] - if is_tech_milestone_reached(milestone, technology_researched) then - mark_milestone_reached(global_force, milestone, game.tick, i) - print_milestone_reached(force, milestone) - refresh_gui_for_force(force) - else - -- I guess you could technically have the same technology in 2 milestones... - -- so we have to keep iterating - i = i + 1 - end - end -end -script.on_event(defines.events.on_research_finished, check_technology_milestone_reached) - diff --git a/Milestones_1.3.20/scripts/util.lua b/Milestones_1.3.20/scripts/util.lua deleted file mode 100644 index ab3a3269..00000000 --- a/Milestones_1.3.20/scripts/util.lua +++ /dev/null @@ -1,69 +0,0 @@ -function table_contains(table, element) - for _, value in pairs(table) do - if value == element then return true end - end - return false -end - -function validate_milestones(milestones) - local valid_categories = {'item', 'fluid', 'technology', 'kill', 'group', 'alias'} - for _, milestone in pairs(milestones) do - if not table_contains(valid_categories, milestone.type) then - return nil, {"", {"milestones.message_invalid_import_type"}, milestone.type} - end - if type(milestone.name) ~= "string" then - return nil, {"", {"milestones.message_invalid_import_missing_field"}, "name"} - end - if milestone.type ~= 'group' then - local num = tonumber(milestone.quantity) - if num == nil or num < 1 then - return nil, {"", {"milestones.message_invalid_import_quantity"}, milestone.quantity} - end - if milestone.next ~= nil then - local operator, _ = parse_next_formula(milestone.next) - if operator == nil then - return nil, {"", {"milestones.message_invalid_import_next"}, milestone.next} - end - end - end - if milestone.type == 'alias' and type(milestone.equals) ~= "string" then - return nil, {"", {"milestones.message_invalid_import_missing_field"}, "equals"} - end - end - return milestones, nil -end - -function convert_and_validate_imported_json(import_string) - local imported_milestones = game.json_to_table(import_string) - - if imported_milestones == nil then - return nil, {"milestones.message_invalid_import_json"} - end - - return validate_milestones(imported_milestones) -end - -local delayed_chat_delay = 240 - -local function print_chat_delayed(event) - if event.tick == 0 then return end - for _, delayed_chat_message in pairs(global.delayed_chat_messages) do - game.print(delayed_chat_message) - end - global.delayed_chat_messages = {} - script.on_nth_tick(delayed_chat_delay, nil) -end - -function create_delayed_chat() - script.on_nth_tick(delayed_chat_delay, function(event) - print_chat_delayed(event) - end) -end - -function print_delayed_red(message) - table.insert(global.delayed_chat_messages, ({"", "[color=red]", message, "[/color]"})) -end - -function approximately_equal(a, b) - return math.abs(a - b) < 0.00001 -end diff --git a/Milestones_1.3.20/settings.lua b/Milestones_1.3.20/settings.lua deleted file mode 100644 index 707478b8..00000000 --- a/Milestones_1.3.20/settings.lua +++ /dev/null @@ -1,41 +0,0 @@ -data:extend{ - { - type = "int-setting", - name = "milestones_check_frequency", - setting_type = "runtime-global", - minimum_value = 1, - default_value = 60 - }, - { - type = "string-setting", - name = "milestones_initial_preset", - setting_type = "runtime-global", - allow_blank = true, - default_value = "", - auto_trim = true - }, - { - type = "bool-setting", - name = "milestones_compact_list", - setting_type = "runtime-per-user", - default_value = false, - }, - { - type = "bool-setting", - name = "milestones_list_by_group", - setting_type = "runtime-per-user", - default_value = true, - }, - { - type = "bool-setting", - name = "milestones_show_estimations", - setting_type = "runtime-per-user", - default_value = true, - }, - { - type = "bool-setting", - name = "milestones_disable_chat_notifications", - setting_type = "runtime-per-user", - default_value = false, - } -} diff --git a/Milestones_1.3.20/thumbnail.png b/Milestones_1.3.20/thumbnail.png deleted file mode 100644 index dc3fcd66..00000000 Binary files a/Milestones_1.3.20/thumbnail.png and /dev/null differ diff --git a/ModuleInserter_5.2.5/.gitignore b/ModuleInserter/.gitignore similarity index 100% rename from ModuleInserter_5.2.5/.gitignore rename to ModuleInserter/.gitignore diff --git a/ModuleInserter_5.2.5/README.md b/ModuleInserter/README.md similarity index 100% rename from ModuleInserter_5.2.5/README.md rename to ModuleInserter/README.md diff --git a/ModuleInserter_5.2.5/changelog.txt b/ModuleInserter/changelog.txt similarity index 100% rename from ModuleInserter_5.2.5/changelog.txt rename to ModuleInserter/changelog.txt diff --git a/ModuleInserter_5.2.5/control.lua b/ModuleInserter/control.lua similarity index 100% rename from ModuleInserter_5.2.5/control.lua rename to ModuleInserter/control.lua diff --git a/ModuleInserter_5.2.5/data.lua b/ModuleInserter/data.lua similarity index 100% rename from ModuleInserter_5.2.5/data.lua rename to ModuleInserter/data.lua diff --git a/ModuleInserter_5.2.5/graphics/frame-action-icons.png b/ModuleInserter/graphics/frame-action-icons.png similarity index 100% rename from ModuleInserter_5.2.5/graphics/frame-action-icons.png rename to ModuleInserter/graphics/frame-action-icons.png diff --git a/ModuleInserter_5.2.5/graphics/module-inserter-icon.png b/ModuleInserter/graphics/module-inserter-icon.png similarity index 100% rename from ModuleInserter_5.2.5/graphics/module-inserter-icon.png rename to ModuleInserter/graphics/module-inserter-icon.png diff --git a/ModuleInserter_5.2.5/graphics/new-module-inserter-x24-white.png b/ModuleInserter/graphics/new-module-inserter-x24-white.png similarity index 100% rename from ModuleInserter_5.2.5/graphics/new-module-inserter-x24-white.png rename to ModuleInserter/graphics/new-module-inserter-x24-white.png diff --git a/ModuleInserter_5.2.5/graphics/new-module-inserter-x32-white.png b/ModuleInserter/graphics/new-module-inserter-x32-white.png similarity index 100% rename from ModuleInserter_5.2.5/graphics/new-module-inserter-x32-white.png rename to ModuleInserter/graphics/new-module-inserter-x32-white.png diff --git a/ModuleInserter_5.2.5/info.json b/ModuleInserter/info.json similarity index 100% rename from ModuleInserter_5.2.5/info.json rename to ModuleInserter/info.json diff --git a/ModuleInserter_5.2.5/lib_control.lua b/ModuleInserter/lib_control.lua similarity index 100% rename from ModuleInserter_5.2.5/lib_control.lua rename to ModuleInserter/lib_control.lua diff --git a/ModuleInserter_5.2.5/locale/en/en.cfg b/ModuleInserter/locale/en/en.cfg similarity index 100% rename from ModuleInserter_5.2.5/locale/en/en.cfg rename to ModuleInserter/locale/en/en.cfg diff --git a/ModuleInserter_5.2.5/prototypes/item.lua b/ModuleInserter/prototypes/item.lua similarity index 100% rename from ModuleInserter_5.2.5/prototypes/item.lua rename to ModuleInserter/prototypes/item.lua diff --git a/ModuleInserter_5.2.5/prototypes/style.lua b/ModuleInserter/prototypes/style.lua similarity index 100% rename from ModuleInserter_5.2.5/prototypes/style.lua rename to ModuleInserter/prototypes/style.lua diff --git a/ModuleInserter_5.2.5/scripts/gui.lua b/ModuleInserter/scripts/gui.lua similarity index 100% rename from ModuleInserter_5.2.5/scripts/gui.lua rename to ModuleInserter/scripts/gui.lua diff --git a/ModuleInserter_5.2.5/settings.lua b/ModuleInserter/settings.lua similarity index 100% rename from ModuleInserter_5.2.5/settings.lua rename to ModuleInserter/settings.lua diff --git a/ModuleInserter_5.2.5/thumbnail.png b/ModuleInserter/thumbnail.png similarity index 100% rename from ModuleInserter_5.2.5/thumbnail.png rename to ModuleInserter/thumbnail.png diff --git a/MoreAchievements_0.6.1/README.md b/MoreAchievements/README.md similarity index 100% rename from MoreAchievements_0.6.1/README.md rename to MoreAchievements/README.md diff --git a/MoreAchievements_0.6.1/changelog.txt b/MoreAchievements/changelog.txt similarity index 100% rename from MoreAchievements_0.6.1/changelog.txt rename to MoreAchievements/changelog.txt diff --git a/MoreAchievements_0.6.1/control.lua b/MoreAchievements/control.lua similarity index 100% rename from MoreAchievements_0.6.1/control.lua rename to MoreAchievements/control.lua diff --git a/MoreAchievements_0.6.1/data.lua b/MoreAchievements/data.lua similarity index 100% rename from MoreAchievements_0.6.1/data.lua rename to MoreAchievements/data.lua diff --git a/MoreAchievements_0.6.1/graphics/a-brisk-walk.png b/MoreAchievements/graphics/a-brisk-walk.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/a-brisk-walk.png rename to MoreAchievements/graphics/a-brisk-walk.png diff --git a/MoreAchievements_0.6.1/graphics/accumulating.png b/MoreAchievements/graphics/accumulating.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/accumulating.png rename to MoreAchievements/graphics/accumulating.png diff --git a/MoreAchievements_0.6.1/graphics/alien-contact.png b/MoreAchievements/graphics/alien-contact.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/alien-contact.png rename to MoreAchievements/graphics/alien-contact.png diff --git a/MoreAchievements_0.6.1/graphics/apprentice-metalsmith.png b/MoreAchievements/graphics/apprentice-metalsmith.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/apprentice-metalsmith.png rename to MoreAchievements/graphics/apprentice-metalsmith.png diff --git a/MoreAchievements_0.6.1/graphics/apprentice-slayer.png b/MoreAchievements/graphics/apprentice-slayer.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/apprentice-slayer.png rename to MoreAchievements/graphics/apprentice-slayer.png diff --git a/MoreAchievements_0.6.1/graphics/atom-smashing.png b/MoreAchievements/graphics/atom-smashing.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/atom-smashing.png rename to MoreAchievements/graphics/atom-smashing.png diff --git a/MoreAchievements_0.6.1/graphics/bitten.png b/MoreAchievements/graphics/bitten.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/bitten.png rename to MoreAchievements/graphics/bitten.png diff --git a/MoreAchievements_0.6.1/graphics/blueprinted.png b/MoreAchievements/graphics/blueprinted.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/blueprinted.png rename to MoreAchievements/graphics/blueprinted.png diff --git a/MoreAchievements_0.6.1/graphics/buildin-a-sentry.png b/MoreAchievements/graphics/buildin-a-sentry.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/buildin-a-sentry.png rename to MoreAchievements/graphics/buildin-a-sentry.png diff --git a/MoreAchievements_0.6.1/graphics/cant-see-nuthin.png b/MoreAchievements/graphics/cant-see-nuthin.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/cant-see-nuthin.png rename to MoreAchievements/graphics/cant-see-nuthin.png diff --git a/MoreAchievements_0.6.1/graphics/castle.png b/MoreAchievements/graphics/castle.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/castle.png rename to MoreAchievements/graphics/castle.png diff --git a/MoreAchievements_0.6.1/graphics/convey-your-ideas.png b/MoreAchievements/graphics/convey-your-ideas.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/convey-your-ideas.png rename to MoreAchievements/graphics/convey-your-ideas.png diff --git a/MoreAchievements_0.6.1/graphics/copy-and-pasted.png b/MoreAchievements/graphics/copy-and-pasted.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/copy-and-pasted.png rename to MoreAchievements/graphics/copy-and-pasted.png diff --git a/MoreAchievements_0.6.1/graphics/crafting-manually-is-too-slow.png b/MoreAchievements/graphics/crafting-manually-is-too-slow.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/crafting-manually-is-too-slow.png rename to MoreAchievements/graphics/crafting-manually-is-too-slow.png diff --git a/MoreAchievements_0.6.1/graphics/dedication.png b/MoreAchievements/graphics/dedication.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/dedication.png rename to MoreAchievements/graphics/dedication.png diff --git a/MoreAchievements_0.6.1/graphics/deforestation.png b/MoreAchievements/graphics/deforestation.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/deforestation.png rename to MoreAchievements/graphics/deforestation.png diff --git a/MoreAchievements_0.6.1/graphics/depleted.png b/MoreAchievements/graphics/depleted.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/depleted.png rename to MoreAchievements/graphics/depleted.png diff --git a/MoreAchievements_0.6.1/graphics/dont-panic.png b/MoreAchievements/graphics/dont-panic.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/dont-panic.png rename to MoreAchievements/graphics/dont-panic.png diff --git a/MoreAchievements_0.6.1/graphics/drop-the-bass.png b/MoreAchievements/graphics/drop-the-bass.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/drop-the-bass.png rename to MoreAchievements/graphics/drop-the-bass.png diff --git a/MoreAchievements_0.6.1/graphics/ecosystem-oriented.png b/MoreAchievements/graphics/ecosystem-oriented.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/ecosystem-oriented.png rename to MoreAchievements/graphics/ecosystem-oriented.png diff --git a/MoreAchievements_0.6.1/graphics/efficient-miner.png b/MoreAchievements/graphics/efficient-miner.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/efficient-miner.png rename to MoreAchievements/graphics/efficient-miner.png diff --git a/MoreAchievements_0.6.1/graphics/encampment.png b/MoreAchievements/graphics/encampment.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/encampment.png rename to MoreAchievements/graphics/encampment.png diff --git a/MoreAchievements_0.6.1/graphics/fortress.png b/MoreAchievements/graphics/fortress.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/fortress.png rename to MoreAchievements/graphics/fortress.png diff --git a/MoreAchievements_0.6.1/graphics/friendly-fire.png b/MoreAchievements/graphics/friendly-fire.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/friendly-fire.png rename to MoreAchievements/graphics/friendly-fire.png diff --git a/MoreAchievements_0.6.1/graphics/fully-automatic.png b/MoreAchievements/graphics/fully-automatic.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/fully-automatic.png rename to MoreAchievements/graphics/fully-automatic.png diff --git a/MoreAchievements_0.6.1/graphics/gatekeeping.png b/MoreAchievements/graphics/gatekeeping.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/gatekeeping.png rename to MoreAchievements/graphics/gatekeeping.png diff --git a/MoreAchievements_0.6.1/graphics/gear-production-1.png b/MoreAchievements/graphics/gear-production-1.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/gear-production-1.png rename to MoreAchievements/graphics/gear-production-1.png diff --git a/MoreAchievements_0.6.1/graphics/gear-production-2.png b/MoreAchievements/graphics/gear-production-2.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/gear-production-2.png rename to MoreAchievements/graphics/gear-production-2.png diff --git a/MoreAchievements_0.6.1/graphics/gear-production-3.png b/MoreAchievements/graphics/gear-production-3.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/gear-production-3.png rename to MoreAchievements/graphics/gear-production-3.png diff --git a/MoreAchievements_0.6.1/graphics/ghosted.png b/MoreAchievements/graphics/ghosted.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/ghosted.png rename to MoreAchievements/graphics/ghosted.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red-2.png b/MoreAchievements/graphics/graphic bases/achieve-base-red-2.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red-2.png rename to MoreAchievements/graphics/graphic bases/achieve-base-red-2.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red-no-line.png b/MoreAchievements/graphics/graphic bases/achieve-base-red-no-line.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red-no-line.png rename to MoreAchievements/graphics/graphic bases/achieve-base-red-no-line.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red.png b/MoreAchievements/graphics/graphic bases/achieve-base-red.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-base-red.png rename to MoreAchievements/graphics/graphic bases/achieve-base-red.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-base.png b/MoreAchievements/graphics/graphic bases/achieve-base.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-base.png rename to MoreAchievements/graphics/graphic bases/achieve-base.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-gold-base.png b/MoreAchievements/graphics/graphic bases/achieve-gold-base.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-gold-base.png rename to MoreAchievements/graphics/graphic bases/achieve-gold-base.png diff --git a/MoreAchievements_0.6.1/graphics/graphic bases/achieve-silver-base.png b/MoreAchievements/graphics/graphic bases/achieve-silver-base.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/graphic bases/achieve-silver-base.png rename to MoreAchievements/graphics/graphic bases/achieve-silver-base.png diff --git a/MoreAchievements_0.6.1/graphics/hello-world.png b/MoreAchievements/graphics/hello-world.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/hello-world.png rename to MoreAchievements/graphics/hello-world.png diff --git a/MoreAchievements_0.6.1/graphics/homewrecker.png b/MoreAchievements/graphics/homewrecker.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/homewrecker.png rename to MoreAchievements/graphics/homewrecker.png diff --git a/MoreAchievements_0.6.1/graphics/im-melting.png b/MoreAchievements/graphics/im-melting.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/im-melting.png rename to MoreAchievements/graphics/im-melting.png diff --git a/MoreAchievements_0.6.1/graphics/journeyman-metalsmith.png b/MoreAchievements/graphics/journeyman-metalsmith.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/journeyman-metalsmith.png rename to MoreAchievements/graphics/journeyman-metalsmith.png diff --git a/MoreAchievements_0.6.1/graphics/kill-it-with-fire.png b/MoreAchievements/graphics/kill-it-with-fire.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/kill-it-with-fire.png rename to MoreAchievements/graphics/kill-it-with-fire.png diff --git a/MoreAchievements_0.6.1/graphics/laser-beams.png b/MoreAchievements/graphics/laser-beams.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/laser-beams.png rename to MoreAchievements/graphics/laser-beams.png diff --git a/MoreAchievements_0.6.1/graphics/let-there-be-light.png b/MoreAchievements/graphics/let-there-be-light.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/let-there-be-light.png rename to MoreAchievements/graphics/let-there-be-light.png diff --git a/MoreAchievements_0.6.1/graphics/looted.png b/MoreAchievements/graphics/looted.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/looted.png rename to MoreAchievements/graphics/looted.png diff --git a/MoreAchievements_0.6.1/graphics/maggots.png b/MoreAchievements/graphics/maggots.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/maggots.png rename to MoreAchievements/graphics/maggots.png diff --git a/MoreAchievements_0.6.1/graphics/master-metalsmith.png b/MoreAchievements/graphics/master-metalsmith.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/master-metalsmith.png rename to MoreAchievements/graphics/master-metalsmith.png diff --git a/MoreAchievements_0.6.1/graphics/mathematical.png b/MoreAchievements/graphics/mathematical.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/mathematical.png rename to MoreAchievements/graphics/mathematical.png diff --git a/MoreAchievements_0.6.1/graphics/on-the-road-again.png b/MoreAchievements/graphics/on-the-road-again.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/on-the-road-again.png rename to MoreAchievements/graphics/on-the-road-again.png diff --git a/MoreAchievements_0.6.1/graphics/one-rocket-per-minute.png b/MoreAchievements/graphics/one-rocket-per-minute.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/one-rocket-per-minute.png rename to MoreAchievements/graphics/one-rocket-per-minute.png diff --git a/MoreAchievements_0.6.1/graphics/placeholder.png b/MoreAchievements/graphics/placeholder.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/placeholder.png rename to MoreAchievements/graphics/placeholder.png diff --git a/MoreAchievements_0.6.1/graphics/praise-the-sun.png b/MoreAchievements/graphics/praise-the-sun.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/praise-the-sun.png rename to MoreAchievements/graphics/praise-the-sun.png diff --git a/MoreAchievements_0.6.1/graphics/productive-member.png b/MoreAchievements/graphics/productive-member.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/productive-member.png rename to MoreAchievements/graphics/productive-member.png diff --git a/MoreAchievements_0.6.1/graphics/shot-down.png b/MoreAchievements/graphics/shot-down.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/shot-down.png rename to MoreAchievements/graphics/shot-down.png diff --git a/MoreAchievements_0.6.1/graphics/slavedriver.png b/MoreAchievements/graphics/slavedriver.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/slavedriver.png rename to MoreAchievements/graphics/slavedriver.png diff --git a/MoreAchievements_0.6.1/graphics/slayer-of-worlds.png b/MoreAchievements/graphics/slayer-of-worlds.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/slayer-of-worlds.png rename to MoreAchievements/graphics/slayer-of-worlds.png diff --git a/MoreAchievements_0.6.1/graphics/speed-to-the-max.png b/MoreAchievements/graphics/speed-to-the-max.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/speed-to-the-max.png rename to MoreAchievements/graphics/speed-to-the-max.png diff --git a/MoreAchievements_0.6.1/graphics/steampunk.png b/MoreAchievements/graphics/steampunk.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/steampunk.png rename to MoreAchievements/graphics/steampunk.png diff --git a/MoreAchievements_0.6.1/graphics/sticky-boots.png b/MoreAchievements/graphics/sticky-boots.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/sticky-boots.png rename to MoreAchievements/graphics/sticky-boots.png diff --git a/MoreAchievements_0.6.1/graphics/tactical-nuke-inbound.png b/MoreAchievements/graphics/tactical-nuke-inbound.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/tactical-nuke-inbound.png rename to MoreAchievements/graphics/tactical-nuke-inbound.png diff --git a/MoreAchievements_0.6.1/graphics/tango-down.png b/MoreAchievements/graphics/tango-down.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/tango-down.png rename to MoreAchievements/graphics/tango-down.png diff --git a/MoreAchievements_0.6.1/graphics/terraformer.png b/MoreAchievements/graphics/terraformer.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/terraformer.png rename to MoreAchievements/graphics/terraformer.png diff --git a/MoreAchievements_0.6.1/graphics/the-essence-of-discovery-old.png b/MoreAchievements/graphics/the-essence-of-discovery-old.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/the-essence-of-discovery-old.png rename to MoreAchievements/graphics/the-essence-of-discovery-old.png diff --git a/MoreAchievements_0.6.1/graphics/the-essence-of-discovery.png b/MoreAchievements/graphics/the-essence-of-discovery.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/the-essence-of-discovery.png rename to MoreAchievements/graphics/the-essence-of-discovery.png diff --git a/MoreAchievements_0.6.1/graphics/the-olden-days.png b/MoreAchievements/graphics/the-olden-days.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/the-olden-days.png rename to MoreAchievements/graphics/the-olden-days.png diff --git a/MoreAchievements_0.6.1/graphics/they-will-destroy-it.png b/MoreAchievements/graphics/they-will-destroy-it.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/they-will-destroy-it.png rename to MoreAchievements/graphics/they-will-destroy-it.png diff --git a/MoreAchievements_0.6.1/graphics/thomas-edison.png b/MoreAchievements/graphics/thomas-edison.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/thomas-edison.png rename to MoreAchievements/graphics/thomas-edison.png diff --git a/MoreAchievements_0.6.1/graphics/trains-are-too-hard.png b/MoreAchievements/graphics/trains-are-too-hard.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/trains-are-too-hard.png rename to MoreAchievements/graphics/trains-are-too-hard.png diff --git a/MoreAchievements_0.6.1/graphics/turret-creeper.png b/MoreAchievements/graphics/turret-creeper.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/turret-creeper.png rename to MoreAchievements/graphics/turret-creeper.png diff --git a/MoreAchievements_0.6.1/graphics/two-rockets-per-minute.png b/MoreAchievements/graphics/two-rockets-per-minute.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/two-rockets-per-minute.png rename to MoreAchievements/graphics/two-rockets-per-minute.png diff --git a/MoreAchievements_0.6.1/graphics/wall-of-guns.png b/MoreAchievements/graphics/wall-of-guns.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/wall-of-guns.png rename to MoreAchievements/graphics/wall-of-guns.png diff --git a/MoreAchievements_0.6.1/graphics/we-didnt-start-the-fire.png b/MoreAchievements/graphics/we-didnt-start-the-fire.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/we-didnt-start-the-fire.png rename to MoreAchievements/graphics/we-didnt-start-the-fire.png diff --git a/MoreAchievements_0.6.1/graphics/well-balanced.png b/MoreAchievements/graphics/well-balanced.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/well-balanced.png rename to MoreAchievements/graphics/well-balanced.png diff --git a/MoreAchievements_0.6.1/graphics/you-forgot-something.png b/MoreAchievements/graphics/you-forgot-something.png similarity index 100% rename from MoreAchievements_0.6.1/graphics/you-forgot-something.png rename to MoreAchievements/graphics/you-forgot-something.png diff --git a/MoreAchievements_0.6.1/info.json b/MoreAchievements/info.json similarity index 100% rename from MoreAchievements_0.6.1/info.json rename to MoreAchievements/info.json diff --git a/MoreAchievements_0.6.1/internal.lua b/MoreAchievements/internal.lua similarity index 100% rename from MoreAchievements_0.6.1/internal.lua rename to MoreAchievements/internal.lua diff --git a/MoreAchievements_0.6.1/locale/en/locale.cfg b/MoreAchievements/locale/en/locale.cfg similarity index 100% rename from MoreAchievements_0.6.1/locale/en/locale.cfg rename to MoreAchievements/locale/en/locale.cfg diff --git a/MoreAchievements_0.6.1/scripted.lua b/MoreAchievements/scripted.lua similarity index 100% rename from MoreAchievements_0.6.1/scripted.lua rename to MoreAchievements/scripted.lua diff --git a/MoreAchievements_0.6.1/thumbnail.png b/MoreAchievements/thumbnail.png similarity index 100% rename from MoreAchievements_0.6.1/thumbnail.png rename to MoreAchievements/thumbnail.png diff --git a/MoreAchievements_0.6.1/vanillaScripting.lua b/MoreAchievements/vanillaScripting.lua similarity index 100% rename from MoreAchievements_0.6.1/vanillaScripting.lua rename to MoreAchievements/vanillaScripting.lua diff --git a/MxlChievements_2.0.0/.gitignore b/MxlChievements/.gitignore similarity index 100% rename from MxlChievements_2.0.0/.gitignore rename to MxlChievements/.gitignore diff --git a/MxlChievements_2.0.0/README.md b/MxlChievements/README.md similarity index 100% rename from MxlChievements_2.0.0/README.md rename to MxlChievements/README.md diff --git a/MxlChievements_2.0.0/control.lua b/MxlChievements/control.lua similarity index 100% rename from MxlChievements_2.0.0/control.lua rename to MxlChievements/control.lua diff --git a/MxlChievements_2.0.0/data.lua b/MxlChievements/data.lua similarity index 100% rename from MxlChievements_2.0.0/data.lua rename to MxlChievements/data.lua diff --git a/MxlChievements_2.0.0/graphics/Ass-Machine-1.png b/MxlChievements/graphics/Ass-Machine-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Ass-Machine-1.png rename to MxlChievements/graphics/Ass-Machine-1.png diff --git a/MxlChievements_2.0.0/graphics/Ass-Machine-2.png b/MxlChievements/graphics/Ass-Machine-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Ass-Machine-2.png rename to MxlChievements/graphics/Ass-Machine-2.png diff --git a/MxlChievements_2.0.0/graphics/Ass-Machine-3.png b/MxlChievements/graphics/Ass-Machine-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Ass-Machine-3.png rename to MxlChievements/graphics/Ass-Machine-3.png diff --git a/MxlChievements_2.0.0/graphics/Ass-Machine-4.png b/MxlChievements/graphics/Ass-Machine-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Ass-Machine-4.png rename to MxlChievements/graphics/Ass-Machine-4.png diff --git a/MxlChievements_2.0.0/graphics/Ass-Machine-5.png b/MxlChievements/graphics/Ass-Machine-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Ass-Machine-5.png rename to MxlChievements/graphics/Ass-Machine-5.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Card-1.png b/MxlChievements/graphics/Blue-Card-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Card-1.png rename to MxlChievements/graphics/Blue-Card-1.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Card-2.png b/MxlChievements/graphics/Blue-Card-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Card-2.png rename to MxlChievements/graphics/Blue-Card-2.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Card-3.png b/MxlChievements/graphics/Blue-Card-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Card-3.png rename to MxlChievements/graphics/Blue-Card-3.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Card-4.png b/MxlChievements/graphics/Blue-Card-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Card-4.png rename to MxlChievements/graphics/Blue-Card-4.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Card-5.png b/MxlChievements/graphics/Blue-Card-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Card-5.png rename to MxlChievements/graphics/Blue-Card-5.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Inserter-1.png b/MxlChievements/graphics/Blue-Inserter-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Inserter-1.png rename to MxlChievements/graphics/Blue-Inserter-1.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Inserter-2.png b/MxlChievements/graphics/Blue-Inserter-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Inserter-2.png rename to MxlChievements/graphics/Blue-Inserter-2.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Inserter-3.png b/MxlChievements/graphics/Blue-Inserter-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Inserter-3.png rename to MxlChievements/graphics/Blue-Inserter-3.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Inserter-4.png b/MxlChievements/graphics/Blue-Inserter-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Inserter-4.png rename to MxlChievements/graphics/Blue-Inserter-4.png diff --git a/MxlChievements_2.0.0/graphics/Blue-Inserter-5.png b/MxlChievements/graphics/Blue-Inserter-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Blue-Inserter-5.png rename to MxlChievements/graphics/Blue-Inserter-5.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Drill-1.png b/MxlChievements/graphics/Elec-Drill-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Drill-1.png rename to MxlChievements/graphics/Elec-Drill-1.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Drill-2.png b/MxlChievements/graphics/Elec-Drill-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Drill-2.png rename to MxlChievements/graphics/Elec-Drill-2.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Drill-3.png b/MxlChievements/graphics/Elec-Drill-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Drill-3.png rename to MxlChievements/graphics/Elec-Drill-3.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Drill-4.png b/MxlChievements/graphics/Elec-Drill-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Drill-4.png rename to MxlChievements/graphics/Elec-Drill-4.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Drill-5.png b/MxlChievements/graphics/Elec-Drill-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Drill-5.png rename to MxlChievements/graphics/Elec-Drill-5.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Furn-1.png b/MxlChievements/graphics/Elec-Furn-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Furn-1.png rename to MxlChievements/graphics/Elec-Furn-1.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Furn-2.png b/MxlChievements/graphics/Elec-Furn-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Furn-2.png rename to MxlChievements/graphics/Elec-Furn-2.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Furn-3.png b/MxlChievements/graphics/Elec-Furn-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Furn-3.png rename to MxlChievements/graphics/Elec-Furn-3.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Furn-4.png b/MxlChievements/graphics/Elec-Furn-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Furn-4.png rename to MxlChievements/graphics/Elec-Furn-4.png diff --git a/MxlChievements_2.0.0/graphics/Elec-Furn-5.png b/MxlChievements/graphics/Elec-Furn-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Elec-Furn-5.png rename to MxlChievements/graphics/Elec-Furn-5.png diff --git a/MxlChievements_2.0.0/graphics/Green-Card-1.png b/MxlChievements/graphics/Green-Card-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Green-Card-1.png rename to MxlChievements/graphics/Green-Card-1.png diff --git a/MxlChievements_2.0.0/graphics/Green-Card-2.png b/MxlChievements/graphics/Green-Card-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Green-Card-2.png rename to MxlChievements/graphics/Green-Card-2.png diff --git a/MxlChievements_2.0.0/graphics/Green-Card-3.png b/MxlChievements/graphics/Green-Card-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Green-Card-3.png rename to MxlChievements/graphics/Green-Card-3.png diff --git a/MxlChievements_2.0.0/graphics/Green-Card-4.png b/MxlChievements/graphics/Green-Card-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Green-Card-4.png rename to MxlChievements/graphics/Green-Card-4.png diff --git a/MxlChievements_2.0.0/graphics/Green-Card-5.png b/MxlChievements/graphics/Green-Card-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Green-Card-5.png rename to MxlChievements/graphics/Green-Card-5.png diff --git a/MxlChievements_2.0.0/graphics/Inserter-Madness-1.png b/MxlChievements/graphics/Inserter-Madness-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Inserter-Madness-1.png rename to MxlChievements/graphics/Inserter-Madness-1.png diff --git a/MxlChievements_2.0.0/graphics/Inserter-Madness-2.png b/MxlChievements/graphics/Inserter-Madness-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Inserter-Madness-2.png rename to MxlChievements/graphics/Inserter-Madness-2.png diff --git a/MxlChievements_2.0.0/graphics/Inserter-Madness-3.png b/MxlChievements/graphics/Inserter-Madness-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Inserter-Madness-3.png rename to MxlChievements/graphics/Inserter-Madness-3.png diff --git a/MxlChievements_2.0.0/graphics/Inserter-Madness-4.png b/MxlChievements/graphics/Inserter-Madness-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Inserter-Madness-4.png rename to MxlChievements/graphics/Inserter-Madness-4.png diff --git a/MxlChievements_2.0.0/graphics/Inserter-Madness-5.png b/MxlChievements/graphics/Inserter-Madness-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Inserter-Madness-5.png rename to MxlChievements/graphics/Inserter-Madness-5.png diff --git a/MxlChievements_2.0.0/graphics/Pipe-1.png b/MxlChievements/graphics/Pipe-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Pipe-1.png rename to MxlChievements/graphics/Pipe-1.png diff --git a/MxlChievements_2.0.0/graphics/Pipe-2.png b/MxlChievements/graphics/Pipe-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Pipe-2.png rename to MxlChievements/graphics/Pipe-2.png diff --git a/MxlChievements_2.0.0/graphics/Pipe-3.png b/MxlChievements/graphics/Pipe-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Pipe-3.png rename to MxlChievements/graphics/Pipe-3.png diff --git a/MxlChievements_2.0.0/graphics/Pipe-4.png b/MxlChievements/graphics/Pipe-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Pipe-4.png rename to MxlChievements/graphics/Pipe-4.png diff --git a/MxlChievements_2.0.0/graphics/Pipe-5.png b/MxlChievements/graphics/Pipe-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Pipe-5.png rename to MxlChievements/graphics/Pipe-5.png diff --git a/MxlChievements_2.0.0/graphics/Red-Card-1.png b/MxlChievements/graphics/Red-Card-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Card-1.png rename to MxlChievements/graphics/Red-Card-1.png diff --git a/MxlChievements_2.0.0/graphics/Red-Card-2.png b/MxlChievements/graphics/Red-Card-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Card-2.png rename to MxlChievements/graphics/Red-Card-2.png diff --git a/MxlChievements_2.0.0/graphics/Red-Card-3.png b/MxlChievements/graphics/Red-Card-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Card-3.png rename to MxlChievements/graphics/Red-Card-3.png diff --git a/MxlChievements_2.0.0/graphics/Red-Card-4.png b/MxlChievements/graphics/Red-Card-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Card-4.png rename to MxlChievements/graphics/Red-Card-4.png diff --git a/MxlChievements_2.0.0/graphics/Red-Card-5.png b/MxlChievements/graphics/Red-Card-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Card-5.png rename to MxlChievements/graphics/Red-Card-5.png diff --git a/MxlChievements_2.0.0/graphics/Red-Under-1.png b/MxlChievements/graphics/Red-Under-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Under-1.png rename to MxlChievements/graphics/Red-Under-1.png diff --git a/MxlChievements_2.0.0/graphics/Red-Under-2.png b/MxlChievements/graphics/Red-Under-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Under-2.png rename to MxlChievements/graphics/Red-Under-2.png diff --git a/MxlChievements_2.0.0/graphics/Red-Under-3.png b/MxlChievements/graphics/Red-Under-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Under-3.png rename to MxlChievements/graphics/Red-Under-3.png diff --git a/MxlChievements_2.0.0/graphics/Red-Under-4.png b/MxlChievements/graphics/Red-Under-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Under-4.png rename to MxlChievements/graphics/Red-Under-4.png diff --git a/MxlChievements_2.0.0/graphics/Red-Under-5.png b/MxlChievements/graphics/Red-Under-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Red-Under-5.png rename to MxlChievements/graphics/Red-Under-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Black-1.png b/MxlChievements/graphics/Sci-Black-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Black-1.png rename to MxlChievements/graphics/Sci-Black-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Black-2.png b/MxlChievements/graphics/Sci-Black-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Black-2.png rename to MxlChievements/graphics/Sci-Black-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Black-3.png b/MxlChievements/graphics/Sci-Black-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Black-3.png rename to MxlChievements/graphics/Sci-Black-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Black-4.png b/MxlChievements/graphics/Sci-Black-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Black-4.png rename to MxlChievements/graphics/Sci-Black-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Black-5.png b/MxlChievements/graphics/Sci-Black-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Black-5.png rename to MxlChievements/graphics/Sci-Black-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Blue-1.png b/MxlChievements/graphics/Sci-Blue-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Blue-1.png rename to MxlChievements/graphics/Sci-Blue-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Blue-2.png b/MxlChievements/graphics/Sci-Blue-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Blue-2.png rename to MxlChievements/graphics/Sci-Blue-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Blue-3.png b/MxlChievements/graphics/Sci-Blue-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Blue-3.png rename to MxlChievements/graphics/Sci-Blue-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Blue-4.png b/MxlChievements/graphics/Sci-Blue-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Blue-4.png rename to MxlChievements/graphics/Sci-Blue-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Blue-5.png b/MxlChievements/graphics/Sci-Blue-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Blue-5.png rename to MxlChievements/graphics/Sci-Blue-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Green-1.png b/MxlChievements/graphics/Sci-Green-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Green-1.png rename to MxlChievements/graphics/Sci-Green-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Green-2.png b/MxlChievements/graphics/Sci-Green-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Green-2.png rename to MxlChievements/graphics/Sci-Green-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Green-3.png b/MxlChievements/graphics/Sci-Green-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Green-3.png rename to MxlChievements/graphics/Sci-Green-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Green-4.png b/MxlChievements/graphics/Sci-Green-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Green-4.png rename to MxlChievements/graphics/Sci-Green-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Green-5.png b/MxlChievements/graphics/Sci-Green-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Green-5.png rename to MxlChievements/graphics/Sci-Green-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Purple-1.png b/MxlChievements/graphics/Sci-Purple-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Purple-1.png rename to MxlChievements/graphics/Sci-Purple-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Purple-2.png b/MxlChievements/graphics/Sci-Purple-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Purple-2.png rename to MxlChievements/graphics/Sci-Purple-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Purple-3.png b/MxlChievements/graphics/Sci-Purple-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Purple-3.png rename to MxlChievements/graphics/Sci-Purple-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Purple-4.png b/MxlChievements/graphics/Sci-Purple-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Purple-4.png rename to MxlChievements/graphics/Sci-Purple-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Purple-5.png b/MxlChievements/graphics/Sci-Purple-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Purple-5.png rename to MxlChievements/graphics/Sci-Purple-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Red-1.png b/MxlChievements/graphics/Sci-Red-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Red-1.png rename to MxlChievements/graphics/Sci-Red-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Red-2.png b/MxlChievements/graphics/Sci-Red-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Red-2.png rename to MxlChievements/graphics/Sci-Red-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Red-3.png b/MxlChievements/graphics/Sci-Red-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Red-3.png rename to MxlChievements/graphics/Sci-Red-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Red-4.png b/MxlChievements/graphics/Sci-Red-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Red-4.png rename to MxlChievements/graphics/Sci-Red-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Red-5.png b/MxlChievements/graphics/Sci-Red-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Red-5.png rename to MxlChievements/graphics/Sci-Red-5.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Yellow-1.png b/MxlChievements/graphics/Sci-Yellow-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Yellow-1.png rename to MxlChievements/graphics/Sci-Yellow-1.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Yellow-2.png b/MxlChievements/graphics/Sci-Yellow-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Yellow-2.png rename to MxlChievements/graphics/Sci-Yellow-2.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Yellow-3.png b/MxlChievements/graphics/Sci-Yellow-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Yellow-3.png rename to MxlChievements/graphics/Sci-Yellow-3.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Yellow-4.png b/MxlChievements/graphics/Sci-Yellow-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Yellow-4.png rename to MxlChievements/graphics/Sci-Yellow-4.png diff --git a/MxlChievements_2.0.0/graphics/Sci-Yellow-5.png b/MxlChievements/graphics/Sci-Yellow-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Sci-Yellow-5.png rename to MxlChievements/graphics/Sci-Yellow-5.png diff --git a/MxlChievements_2.0.0/graphics/Steel-1.png b/MxlChievements/graphics/Steel-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Steel-1.png rename to MxlChievements/graphics/Steel-1.png diff --git a/MxlChievements_2.0.0/graphics/Steel-2.png b/MxlChievements/graphics/Steel-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Steel-2.png rename to MxlChievements/graphics/Steel-2.png diff --git a/MxlChievements_2.0.0/graphics/Steel-3.png b/MxlChievements/graphics/Steel-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Steel-3.png rename to MxlChievements/graphics/Steel-3.png diff --git a/MxlChievements_2.0.0/graphics/Steel-4.png b/MxlChievements/graphics/Steel-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Steel-4.png rename to MxlChievements/graphics/Steel-4.png diff --git a/MxlChievements_2.0.0/graphics/Steel-5.png b/MxlChievements/graphics/Steel-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Steel-5.png rename to MxlChievements/graphics/Steel-5.png diff --git a/MxlChievements_2.0.0/graphics/Stone-Brick-1.png b/MxlChievements/graphics/Stone-Brick-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Stone-Brick-1.png rename to MxlChievements/graphics/Stone-Brick-1.png diff --git a/MxlChievements_2.0.0/graphics/Stone-Brick-2.png b/MxlChievements/graphics/Stone-Brick-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Stone-Brick-2.png rename to MxlChievements/graphics/Stone-Brick-2.png diff --git a/MxlChievements_2.0.0/graphics/Stone-Brick-3.png b/MxlChievements/graphics/Stone-Brick-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Stone-Brick-3.png rename to MxlChievements/graphics/Stone-Brick-3.png diff --git a/MxlChievements_2.0.0/graphics/Stone-Brick-4.png b/MxlChievements/graphics/Stone-Brick-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Stone-Brick-4.png rename to MxlChievements/graphics/Stone-Brick-4.png diff --git a/MxlChievements_2.0.0/graphics/Stone-Brick-5.png b/MxlChievements/graphics/Stone-Brick-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/Stone-Brick-5.png rename to MxlChievements/graphics/Stone-Brick-5.png diff --git a/MxlChievements_2.0.0/graphics/artillery-shell.png b/MxlChievements/graphics/artillery-shell.png similarity index 100% rename from MxlChievements_2.0.0/graphics/artillery-shell.png rename to MxlChievements/graphics/artillery-shell.png diff --git a/MxlChievements_2.0.0/graphics/artillery-turret.png b/MxlChievements/graphics/artillery-turret.png similarity index 100% rename from MxlChievements_2.0.0/graphics/artillery-turret.png rename to MxlChievements/graphics/artillery-turret.png diff --git a/MxlChievements_2.0.0/graphics/barrel.png b/MxlChievements/graphics/barrel.png similarity index 100% rename from MxlChievements_2.0.0/graphics/barrel.png rename to MxlChievements/graphics/barrel.png diff --git a/MxlChievements_2.0.0/graphics/base-gold.png b/MxlChievements/graphics/base-gold.png similarity index 100% rename from MxlChievements_2.0.0/graphics/base-gold.png rename to MxlChievements/graphics/base-gold.png diff --git a/MxlChievements_2.0.0/graphics/base-silver.png b/MxlChievements/graphics/base-silver.png similarity index 100% rename from MxlChievements_2.0.0/graphics/base-silver.png rename to MxlChievements/graphics/base-silver.png diff --git a/MxlChievements_2.0.0/graphics/base.png b/MxlChievements/graphics/base.png similarity index 100% rename from MxlChievements_2.0.0/graphics/base.png rename to MxlChievements/graphics/base.png diff --git a/MxlChievements_2.0.0/graphics/battery.png b/MxlChievements/graphics/battery.png similarity index 100% rename from MxlChievements_2.0.0/graphics/battery.png rename to MxlChievements/graphics/battery.png diff --git a/MxlChievements_2.0.0/graphics/boiler.png b/MxlChievements/graphics/boiler.png similarity index 100% rename from MxlChievements_2.0.0/graphics/boiler.png rename to MxlChievements/graphics/boiler.png diff --git a/MxlChievements_2.0.0/graphics/burner-inserter.png b/MxlChievements/graphics/burner-inserter.png similarity index 100% rename from MxlChievements_2.0.0/graphics/burner-inserter.png rename to MxlChievements/graphics/burner-inserter.png diff --git a/MxlChievements_2.0.0/graphics/car.png b/MxlChievements/graphics/car.png similarity index 100% rename from MxlChievements_2.0.0/graphics/car.png rename to MxlChievements/graphics/car.png diff --git a/MxlChievements_2.0.0/graphics/centrifuge.png b/MxlChievements/graphics/centrifuge.png similarity index 100% rename from MxlChievements_2.0.0/graphics/centrifuge.png rename to MxlChievements/graphics/centrifuge.png diff --git a/MxlChievements_2.0.0/graphics/chemical-plant.png b/MxlChievements/graphics/chemical-plant.png similarity index 100% rename from MxlChievements_2.0.0/graphics/chemical-plant.png rename to MxlChievements/graphics/chemical-plant.png diff --git a/MxlChievements_2.0.0/graphics/cliff-explosives.png b/MxlChievements/graphics/cliff-explosives.png similarity index 100% rename from MxlChievements_2.0.0/graphics/cliff-explosives.png rename to MxlChievements/graphics/cliff-explosives.png diff --git a/MxlChievements_2.0.0/graphics/concrete-1.png b/MxlChievements/graphics/concrete-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/concrete-1.png rename to MxlChievements/graphics/concrete-1.png diff --git a/MxlChievements_2.0.0/graphics/concrete-2.png b/MxlChievements/graphics/concrete-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/concrete-2.png rename to MxlChievements/graphics/concrete-2.png diff --git a/MxlChievements_2.0.0/graphics/concrete-3.png b/MxlChievements/graphics/concrete-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/concrete-3.png rename to MxlChievements/graphics/concrete-3.png diff --git a/MxlChievements_2.0.0/graphics/concrete-4.png b/MxlChievements/graphics/concrete-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/concrete-4.png rename to MxlChievements/graphics/concrete-4.png diff --git a/MxlChievements_2.0.0/graphics/concrete-5.png b/MxlChievements/graphics/concrete-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/concrete-5.png rename to MxlChievements/graphics/concrete-5.png diff --git a/MxlChievements_2.0.0/graphics/copper-bar-1.png b/MxlChievements/graphics/copper-bar-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/copper-bar-1.png rename to MxlChievements/graphics/copper-bar-1.png diff --git a/MxlChievements_2.0.0/graphics/copper-bar-2.png b/MxlChievements/graphics/copper-bar-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/copper-bar-2.png rename to MxlChievements/graphics/copper-bar-2.png diff --git a/MxlChievements_2.0.0/graphics/copper-bar-3.png b/MxlChievements/graphics/copper-bar-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/copper-bar-3.png rename to MxlChievements/graphics/copper-bar-3.png diff --git a/MxlChievements_2.0.0/graphics/copper-bar-4.png b/MxlChievements/graphics/copper-bar-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/copper-bar-4.png rename to MxlChievements/graphics/copper-bar-4.png diff --git a/MxlChievements_2.0.0/graphics/copper-bar-5.png b/MxlChievements/graphics/copper-bar-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/copper-bar-5.png rename to MxlChievements/graphics/copper-bar-5.png diff --git a/MxlChievements_2.0.0/graphics/effectivity-module-1.png b/MxlChievements/graphics/effectivity-module-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/effectivity-module-1.png rename to MxlChievements/graphics/effectivity-module-1.png diff --git a/MxlChievements_2.0.0/graphics/effectivity-module-2.png b/MxlChievements/graphics/effectivity-module-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/effectivity-module-2.png rename to MxlChievements/graphics/effectivity-module-2.png diff --git a/MxlChievements_2.0.0/graphics/effectivity-module-3.png b/MxlChievements/graphics/effectivity-module-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/effectivity-module-3.png rename to MxlChievements/graphics/effectivity-module-3.png diff --git a/MxlChievements_2.0.0/graphics/effectivity-module.png b/MxlChievements/graphics/effectivity-module.png similarity index 100% rename from MxlChievements_2.0.0/graphics/effectivity-module.png rename to MxlChievements/graphics/effectivity-module.png diff --git a/MxlChievements_2.0.0/graphics/explosives.png b/MxlChievements/graphics/explosives.png similarity index 100% rename from MxlChievements_2.0.0/graphics/explosives.png rename to MxlChievements/graphics/explosives.png diff --git a/MxlChievements_2.0.0/graphics/express-splitter-1.png b/MxlChievements/graphics/express-splitter-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-splitter-1.png rename to MxlChievements/graphics/express-splitter-1.png diff --git a/MxlChievements_2.0.0/graphics/express-splitter-2.png b/MxlChievements/graphics/express-splitter-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-splitter-2.png rename to MxlChievements/graphics/express-splitter-2.png diff --git a/MxlChievements_2.0.0/graphics/express-splitter-3.png b/MxlChievements/graphics/express-splitter-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-splitter-3.png rename to MxlChievements/graphics/express-splitter-3.png diff --git a/MxlChievements_2.0.0/graphics/express-splitter-4.png b/MxlChievements/graphics/express-splitter-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-splitter-4.png rename to MxlChievements/graphics/express-splitter-4.png diff --git a/MxlChievements_2.0.0/graphics/express-splitter-5.png b/MxlChievements/graphics/express-splitter-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-splitter-5.png rename to MxlChievements/graphics/express-splitter-5.png diff --git a/MxlChievements_2.0.0/graphics/express-transport-belt-1.png b/MxlChievements/graphics/express-transport-belt-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-transport-belt-1.png rename to MxlChievements/graphics/express-transport-belt-1.png diff --git a/MxlChievements_2.0.0/graphics/express-transport-belt-2.png b/MxlChievements/graphics/express-transport-belt-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-transport-belt-2.png rename to MxlChievements/graphics/express-transport-belt-2.png diff --git a/MxlChievements_2.0.0/graphics/express-transport-belt-3.png b/MxlChievements/graphics/express-transport-belt-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-transport-belt-3.png rename to MxlChievements/graphics/express-transport-belt-3.png diff --git a/MxlChievements_2.0.0/graphics/express-transport-belt-4.png b/MxlChievements/graphics/express-transport-belt-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-transport-belt-4.png rename to MxlChievements/graphics/express-transport-belt-4.png diff --git a/MxlChievements_2.0.0/graphics/express-transport-belt-5.png b/MxlChievements/graphics/express-transport-belt-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-transport-belt-5.png rename to MxlChievements/graphics/express-transport-belt-5.png diff --git a/MxlChievements_2.0.0/graphics/express-underground-belt-1.png b/MxlChievements/graphics/express-underground-belt-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-underground-belt-1.png rename to MxlChievements/graphics/express-underground-belt-1.png diff --git a/MxlChievements_2.0.0/graphics/express-underground-belt-2.png b/MxlChievements/graphics/express-underground-belt-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-underground-belt-2.png rename to MxlChievements/graphics/express-underground-belt-2.png diff --git a/MxlChievements_2.0.0/graphics/express-underground-belt-3.png b/MxlChievements/graphics/express-underground-belt-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-underground-belt-3.png rename to MxlChievements/graphics/express-underground-belt-3.png diff --git a/MxlChievements_2.0.0/graphics/express-underground-belt-4.png b/MxlChievements/graphics/express-underground-belt-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-underground-belt-4.png rename to MxlChievements/graphics/express-underground-belt-4.png diff --git a/MxlChievements_2.0.0/graphics/express-underground-belt-5.png b/MxlChievements/graphics/express-underground-belt-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/express-underground-belt-5.png rename to MxlChievements/graphics/express-underground-belt-5.png diff --git a/MxlChievements_2.0.0/graphics/fast-splitter-1.png b/MxlChievements/graphics/fast-splitter-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-splitter-1.png rename to MxlChievements/graphics/fast-splitter-1.png diff --git a/MxlChievements_2.0.0/graphics/fast-splitter-2.png b/MxlChievements/graphics/fast-splitter-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-splitter-2.png rename to MxlChievements/graphics/fast-splitter-2.png diff --git a/MxlChievements_2.0.0/graphics/fast-splitter-3.png b/MxlChievements/graphics/fast-splitter-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-splitter-3.png rename to MxlChievements/graphics/fast-splitter-3.png diff --git a/MxlChievements_2.0.0/graphics/fast-splitter-4.png b/MxlChievements/graphics/fast-splitter-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-splitter-4.png rename to MxlChievements/graphics/fast-splitter-4.png diff --git a/MxlChievements_2.0.0/graphics/fast-splitter-5.png b/MxlChievements/graphics/fast-splitter-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-splitter-5.png rename to MxlChievements/graphics/fast-splitter-5.png diff --git a/MxlChievements_2.0.0/graphics/fast-transport-belt-1.png b/MxlChievements/graphics/fast-transport-belt-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-transport-belt-1.png rename to MxlChievements/graphics/fast-transport-belt-1.png diff --git a/MxlChievements_2.0.0/graphics/fast-transport-belt-2.png b/MxlChievements/graphics/fast-transport-belt-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-transport-belt-2.png rename to MxlChievements/graphics/fast-transport-belt-2.png diff --git a/MxlChievements_2.0.0/graphics/fast-transport-belt-3.png b/MxlChievements/graphics/fast-transport-belt-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-transport-belt-3.png rename to MxlChievements/graphics/fast-transport-belt-3.png diff --git a/MxlChievements_2.0.0/graphics/fast-transport-belt-4.png b/MxlChievements/graphics/fast-transport-belt-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-transport-belt-4.png rename to MxlChievements/graphics/fast-transport-belt-4.png diff --git a/MxlChievements_2.0.0/graphics/fast-transport-belt-5.png b/MxlChievements/graphics/fast-transport-belt-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/fast-transport-belt-5.png rename to MxlChievements/graphics/fast-transport-belt-5.png diff --git a/MxlChievements_2.0.0/graphics/filter-inserter.png b/MxlChievements/graphics/filter-inserter.png similarity index 100% rename from MxlChievements_2.0.0/graphics/filter-inserter.png rename to MxlChievements/graphics/filter-inserter.png diff --git a/MxlChievements_2.0.0/graphics/firearm-magazine.png b/MxlChievements/graphics/firearm-magazine.png similarity index 100% rename from MxlChievements_2.0.0/graphics/firearm-magazine.png rename to MxlChievements/graphics/firearm-magazine.png diff --git a/MxlChievements_2.0.0/graphics/flamethrower-turret.png b/MxlChievements/graphics/flamethrower-turret.png similarity index 100% rename from MxlChievements_2.0.0/graphics/flamethrower-turret.png rename to MxlChievements/graphics/flamethrower-turret.png diff --git a/MxlChievements_2.0.0/graphics/gear-production-1.png b/MxlChievements/graphics/gear-production-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gear-production-1.png rename to MxlChievements/graphics/gear-production-1.png diff --git a/MxlChievements_2.0.0/graphics/gear-production-2.png b/MxlChievements/graphics/gear-production-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gear-production-2.png rename to MxlChievements/graphics/gear-production-2.png diff --git a/MxlChievements_2.0.0/graphics/gear-production-3.png b/MxlChievements/graphics/gear-production-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gear-production-3.png rename to MxlChievements/graphics/gear-production-3.png diff --git a/MxlChievements_2.0.0/graphics/gear-production-4.png b/MxlChievements/graphics/gear-production-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gear-production-4.png rename to MxlChievements/graphics/gear-production-4.png diff --git a/MxlChievements_2.0.0/graphics/gear-production-5.png b/MxlChievements/graphics/gear-production-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gear-production-5.png rename to MxlChievements/graphics/gear-production-5.png diff --git a/MxlChievements_2.0.0/graphics/grenade-1.png b/MxlChievements/graphics/grenade-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/grenade-1.png rename to MxlChievements/graphics/grenade-1.png diff --git a/MxlChievements_2.0.0/graphics/grenade-2.png b/MxlChievements/graphics/grenade-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/grenade-2.png rename to MxlChievements/graphics/grenade-2.png diff --git a/MxlChievements_2.0.0/graphics/grenade-3.png b/MxlChievements/graphics/grenade-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/grenade-3.png rename to MxlChievements/graphics/grenade-3.png diff --git a/MxlChievements_2.0.0/graphics/grenade-4.png b/MxlChievements/graphics/grenade-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/grenade-4.png rename to MxlChievements/graphics/grenade-4.png diff --git a/MxlChievements_2.0.0/graphics/grenade-5.png b/MxlChievements/graphics/grenade-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/grenade-5.png rename to MxlChievements/graphics/grenade-5.png diff --git a/MxlChievements_2.0.0/graphics/gun-turret.png b/MxlChievements/graphics/gun-turret.png similarity index 100% rename from MxlChievements_2.0.0/graphics/gun-turret.png rename to MxlChievements/graphics/gun-turret.png diff --git a/MxlChievements_2.0.0/graphics/heat-exchanger.png b/MxlChievements/graphics/heat-exchanger.png similarity index 100% rename from MxlChievements_2.0.0/graphics/heat-exchanger.png rename to MxlChievements/graphics/heat-exchanger.png diff --git a/MxlChievements_2.0.0/graphics/heat-pipe.png b/MxlChievements/graphics/heat-pipe.png similarity index 100% rename from MxlChievements_2.0.0/graphics/heat-pipe.png rename to MxlChievements/graphics/heat-pipe.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-1.png b/MxlChievements/graphics/iron-bar-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-1.png rename to MxlChievements/graphics/iron-bar-1.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-2.png b/MxlChievements/graphics/iron-bar-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-2.png rename to MxlChievements/graphics/iron-bar-2.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-3.png b/MxlChievements/graphics/iron-bar-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-3.png rename to MxlChievements/graphics/iron-bar-3.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-4.png b/MxlChievements/graphics/iron-bar-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-4.png rename to MxlChievements/graphics/iron-bar-4.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-5.png b/MxlChievements/graphics/iron-bar-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-5.png rename to MxlChievements/graphics/iron-bar-5.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-6.png b/MxlChievements/graphics/iron-bar-6.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-6.png rename to MxlChievements/graphics/iron-bar-6.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-7.png b/MxlChievements/graphics/iron-bar-7.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-7.png rename to MxlChievements/graphics/iron-bar-7.png diff --git a/MxlChievements_2.0.0/graphics/iron-bar-8.png b/MxlChievements/graphics/iron-bar-8.png similarity index 100% rename from MxlChievements_2.0.0/graphics/iron-bar-8.png rename to MxlChievements/graphics/iron-bar-8.png diff --git a/MxlChievements_2.0.0/graphics/laser-turret.png b/MxlChievements/graphics/laser-turret.png similarity index 100% rename from MxlChievements_2.0.0/graphics/laser-turret.png rename to MxlChievements/graphics/laser-turret.png diff --git a/MxlChievements_2.0.0/graphics/locomotive.png b/MxlChievements/graphics/locomotive.png similarity index 100% rename from MxlChievements_2.0.0/graphics/locomotive.png rename to MxlChievements/graphics/locomotive.png diff --git a/MxlChievements_2.0.0/graphics/long-handed-inserter.png b/MxlChievements/graphics/long-handed-inserter.png similarity index 100% rename from MxlChievements_2.0.0/graphics/long-handed-inserter.png rename to MxlChievements/graphics/long-handed-inserter.png diff --git a/MxlChievements_2.0.0/graphics/low-density-structure.png b/MxlChievements/graphics/low-density-structure.png similarity index 100% rename from MxlChievements_2.0.0/graphics/low-density-structure.png rename to MxlChievements/graphics/low-density-structure.png diff --git a/MxlChievements_2.0.0/graphics/nuclear-fuel.png b/MxlChievements/graphics/nuclear-fuel.png similarity index 100% rename from MxlChievements_2.0.0/graphics/nuclear-fuel.png rename to MxlChievements/graphics/nuclear-fuel.png diff --git a/MxlChievements_2.0.0/graphics/nuclear-reactor.png b/MxlChievements/graphics/nuclear-reactor.png similarity index 100% rename from MxlChievements_2.0.0/graphics/nuclear-reactor.png rename to MxlChievements/graphics/nuclear-reactor.png diff --git a/MxlChievements_2.0.0/graphics/oil-refinery.png b/MxlChievements/graphics/oil-refinery.png similarity index 100% rename from MxlChievements_2.0.0/graphics/oil-refinery.png rename to MxlChievements/graphics/oil-refinery.png diff --git a/MxlChievements_2.0.0/graphics/piercing-rounds-magazine.png b/MxlChievements/graphics/piercing-rounds-magazine.png similarity index 100% rename from MxlChievements_2.0.0/graphics/piercing-rounds-magazine.png rename to MxlChievements/graphics/piercing-rounds-magazine.png diff --git a/MxlChievements_2.0.0/graphics/pipe-to-ground.png b/MxlChievements/graphics/pipe-to-ground.png similarity index 100% rename from MxlChievements_2.0.0/graphics/pipe-to-ground.png rename to MxlChievements/graphics/pipe-to-ground.png diff --git a/MxlChievements_2.0.0/graphics/placeholder.png b/MxlChievements/graphics/placeholder.png similarity index 100% rename from MxlChievements_2.0.0/graphics/placeholder.png rename to MxlChievements/graphics/placeholder.png diff --git a/MxlChievements_2.0.0/graphics/plastic-1.png b/MxlChievements/graphics/plastic-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/plastic-1.png rename to MxlChievements/graphics/plastic-1.png diff --git a/MxlChievements_2.0.0/graphics/plastic-2.png b/MxlChievements/graphics/plastic-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/plastic-2.png rename to MxlChievements/graphics/plastic-2.png diff --git a/MxlChievements_2.0.0/graphics/plastic-3.png b/MxlChievements/graphics/plastic-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/plastic-3.png rename to MxlChievements/graphics/plastic-3.png diff --git a/MxlChievements_2.0.0/graphics/plastic-4.png b/MxlChievements/graphics/plastic-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/plastic-4.png rename to MxlChievements/graphics/plastic-4.png diff --git a/MxlChievements_2.0.0/graphics/plastic-5.png b/MxlChievements/graphics/plastic-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/plastic-5.png rename to MxlChievements/graphics/plastic-5.png diff --git a/MxlChievements_2.0.0/graphics/productivity-module-1.png b/MxlChievements/graphics/productivity-module-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/productivity-module-1.png rename to MxlChievements/graphics/productivity-module-1.png diff --git a/MxlChievements_2.0.0/graphics/productivity-module-2.png b/MxlChievements/graphics/productivity-module-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/productivity-module-2.png rename to MxlChievements/graphics/productivity-module-2.png diff --git a/MxlChievements_2.0.0/graphics/productivity-module-3.png b/MxlChievements/graphics/productivity-module-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/productivity-module-3.png rename to MxlChievements/graphics/productivity-module-3.png diff --git a/MxlChievements_2.0.0/graphics/productivity-module.png b/MxlChievements/graphics/productivity-module.png similarity index 100% rename from MxlChievements_2.0.0/graphics/productivity-module.png rename to MxlChievements/graphics/productivity-module.png diff --git a/MxlChievements_2.0.0/graphics/pumpjack.png b/MxlChievements/graphics/pumpjack.png similarity index 100% rename from MxlChievements_2.0.0/graphics/pumpjack.png rename to MxlChievements/graphics/pumpjack.png diff --git a/MxlChievements_2.0.0/graphics/radar-1.png b/MxlChievements/graphics/radar-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar-1.png rename to MxlChievements/graphics/radar-1.png diff --git a/MxlChievements_2.0.0/graphics/radar-2.png b/MxlChievements/graphics/radar-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar-2.png rename to MxlChievements/graphics/radar-2.png diff --git a/MxlChievements_2.0.0/graphics/radar-3.png b/MxlChievements/graphics/radar-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar-3.png rename to MxlChievements/graphics/radar-3.png diff --git a/MxlChievements_2.0.0/graphics/radar-4.png b/MxlChievements/graphics/radar-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar-4.png rename to MxlChievements/graphics/radar-4.png diff --git a/MxlChievements_2.0.0/graphics/radar-5.png b/MxlChievements/graphics/radar-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar-5.png rename to MxlChievements/graphics/radar-5.png diff --git a/MxlChievements_2.0.0/graphics/radar.png b/MxlChievements/graphics/radar.png similarity index 100% rename from MxlChievements_2.0.0/graphics/radar.png rename to MxlChievements/graphics/radar.png diff --git a/MxlChievements_2.0.0/graphics/rail-chain-signal.png b/MxlChievements/graphics/rail-chain-signal.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rail-chain-signal.png rename to MxlChievements/graphics/rail-chain-signal.png diff --git a/MxlChievements_2.0.0/graphics/rail-signal.png b/MxlChievements/graphics/rail-signal.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rail-signal.png rename to MxlChievements/graphics/rail-signal.png diff --git a/MxlChievements_2.0.0/graphics/rails-1.png b/MxlChievements/graphics/rails-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rails-1.png rename to MxlChievements/graphics/rails-1.png diff --git a/MxlChievements_2.0.0/graphics/rails-2.png b/MxlChievements/graphics/rails-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rails-2.png rename to MxlChievements/graphics/rails-2.png diff --git a/MxlChievements_2.0.0/graphics/rails-3.png b/MxlChievements/graphics/rails-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rails-3.png rename to MxlChievements/graphics/rails-3.png diff --git a/MxlChievements_2.0.0/graphics/rails-4.png b/MxlChievements/graphics/rails-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rails-4.png rename to MxlChievements/graphics/rails-4.png diff --git a/MxlChievements_2.0.0/graphics/rails-5.png b/MxlChievements/graphics/rails-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rails-5.png rename to MxlChievements/graphics/rails-5.png diff --git a/MxlChievements_2.0.0/graphics/rocket-control-unit.png b/MxlChievements/graphics/rocket-control-unit.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-control-unit.png rename to MxlChievements/graphics/rocket-control-unit.png diff --git a/MxlChievements_2.0.0/graphics/rocket-fuel-2.png b/MxlChievements/graphics/rocket-fuel-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-fuel-2.png rename to MxlChievements/graphics/rocket-fuel-2.png diff --git a/MxlChievements_2.0.0/graphics/rocket-fuel-3.png b/MxlChievements/graphics/rocket-fuel-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-fuel-3.png rename to MxlChievements/graphics/rocket-fuel-3.png diff --git a/MxlChievements_2.0.0/graphics/rocket-fuel.png b/MxlChievements/graphics/rocket-fuel.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-fuel.png rename to MxlChievements/graphics/rocket-fuel.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part-1.png b/MxlChievements/graphics/rocket-part-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part-1.png rename to MxlChievements/graphics/rocket-part-1.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part-2.png b/MxlChievements/graphics/rocket-part-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part-2.png rename to MxlChievements/graphics/rocket-part-2.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part-3.png b/MxlChievements/graphics/rocket-part-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part-3.png rename to MxlChievements/graphics/rocket-part-3.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part-4.png b/MxlChievements/graphics/rocket-part-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part-4.png rename to MxlChievements/graphics/rocket-part-4.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part-5.png b/MxlChievements/graphics/rocket-part-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part-5.png rename to MxlChievements/graphics/rocket-part-5.png diff --git a/MxlChievements_2.0.0/graphics/rocket-part.png b/MxlChievements/graphics/rocket-part.png similarity index 100% rename from MxlChievements_2.0.0/graphics/rocket-part.png rename to MxlChievements/graphics/rocket-part.png diff --git a/MxlChievements_2.0.0/graphics/satellite.png b/MxlChievements/graphics/satellite.png similarity index 100% rename from MxlChievements_2.0.0/graphics/satellite.png rename to MxlChievements/graphics/satellite.png diff --git a/MxlChievements_2.0.0/graphics/solid-fuel-2.png b/MxlChievements/graphics/solid-fuel-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/solid-fuel-2.png rename to MxlChievements/graphics/solid-fuel-2.png diff --git a/MxlChievements_2.0.0/graphics/solid-fuel-3.png b/MxlChievements/graphics/solid-fuel-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/solid-fuel-3.png rename to MxlChievements/graphics/solid-fuel-3.png diff --git a/MxlChievements_2.0.0/graphics/solid-fuel-4.png b/MxlChievements/graphics/solid-fuel-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/solid-fuel-4.png rename to MxlChievements/graphics/solid-fuel-4.png diff --git a/MxlChievements_2.0.0/graphics/solid-fuel-5.png b/MxlChievements/graphics/solid-fuel-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/solid-fuel-5.png rename to MxlChievements/graphics/solid-fuel-5.png diff --git a/MxlChievements_2.0.0/graphics/solid-fuel.png b/MxlChievements/graphics/solid-fuel.png similarity index 100% rename from MxlChievements_2.0.0/graphics/solid-fuel.png rename to MxlChievements/graphics/solid-fuel.png diff --git a/MxlChievements_2.0.0/graphics/speed-module-1.png b/MxlChievements/graphics/speed-module-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/speed-module-1.png rename to MxlChievements/graphics/speed-module-1.png diff --git a/MxlChievements_2.0.0/graphics/speed-module-2.png b/MxlChievements/graphics/speed-module-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/speed-module-2.png rename to MxlChievements/graphics/speed-module-2.png diff --git a/MxlChievements_2.0.0/graphics/speed-module-3.png b/MxlChievements/graphics/speed-module-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/speed-module-3.png rename to MxlChievements/graphics/speed-module-3.png diff --git a/MxlChievements_2.0.0/graphics/splitter-1.png b/MxlChievements/graphics/splitter-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/splitter-1.png rename to MxlChievements/graphics/splitter-1.png diff --git a/MxlChievements_2.0.0/graphics/splitter-2.png b/MxlChievements/graphics/splitter-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/splitter-2.png rename to MxlChievements/graphics/splitter-2.png diff --git a/MxlChievements_2.0.0/graphics/splitter-3.png b/MxlChievements/graphics/splitter-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/splitter-3.png rename to MxlChievements/graphics/splitter-3.png diff --git a/MxlChievements_2.0.0/graphics/splitter-4.png b/MxlChievements/graphics/splitter-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/splitter-4.png rename to MxlChievements/graphics/splitter-4.png diff --git a/MxlChievements_2.0.0/graphics/splitter-5.png b/MxlChievements/graphics/splitter-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/splitter-5.png rename to MxlChievements/graphics/splitter-5.png diff --git a/MxlChievements_2.0.0/graphics/stack-filter-inserter.png b/MxlChievements/graphics/stack-filter-inserter.png similarity index 100% rename from MxlChievements_2.0.0/graphics/stack-filter-inserter.png rename to MxlChievements/graphics/stack-filter-inserter.png diff --git a/MxlChievements_2.0.0/graphics/stack-inserter.png b/MxlChievements/graphics/stack-inserter.png similarity index 100% rename from MxlChievements_2.0.0/graphics/stack-inserter.png rename to MxlChievements/graphics/stack-inserter.png diff --git a/MxlChievements_2.0.0/graphics/steam-engine.png b/MxlChievements/graphics/steam-engine.png similarity index 100% rename from MxlChievements_2.0.0/graphics/steam-engine.png rename to MxlChievements/graphics/steam-engine.png diff --git a/MxlChievements_2.0.0/graphics/steam-turbine.png b/MxlChievements/graphics/steam-turbine.png similarity index 100% rename from MxlChievements_2.0.0/graphics/steam-turbine.png rename to MxlChievements/graphics/steam-turbine.png diff --git a/MxlChievements_2.0.0/graphics/steel-furnace.png b/MxlChievements/graphics/steel-furnace.png similarity index 100% rename from MxlChievements_2.0.0/graphics/steel-furnace.png rename to MxlChievements/graphics/steel-furnace.png diff --git a/MxlChievements_2.0.0/graphics/stone-furnace.png b/MxlChievements/graphics/stone-furnace.png similarity index 100% rename from MxlChievements_2.0.0/graphics/stone-furnace.png rename to MxlChievements/graphics/stone-furnace.png diff --git a/MxlChievements_2.0.0/graphics/stone-wall.png b/MxlChievements/graphics/stone-wall.png similarity index 100% rename from MxlChievements_2.0.0/graphics/stone-wall.png rename to MxlChievements/graphics/stone-wall.png diff --git a/MxlChievements_2.0.0/graphics/storage-tank.png b/MxlChievements/graphics/storage-tank.png similarity index 100% rename from MxlChievements_2.0.0/graphics/storage-tank.png rename to MxlChievements/graphics/storage-tank.png diff --git a/MxlChievements_2.0.0/graphics/sulfur.png b/MxlChievements/graphics/sulfur.png similarity index 100% rename from MxlChievements_2.0.0/graphics/sulfur.png rename to MxlChievements/graphics/sulfur.png diff --git a/MxlChievements_2.0.0/graphics/tank.png b/MxlChievements/graphics/tank.png similarity index 100% rename from MxlChievements_2.0.0/graphics/tank.png rename to MxlChievements/graphics/tank.png diff --git a/MxlChievements_2.0.0/graphics/transport-belt-1.png b/MxlChievements/graphics/transport-belt-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/transport-belt-1.png rename to MxlChievements/graphics/transport-belt-1.png diff --git a/MxlChievements_2.0.0/graphics/transport-belt-2.png b/MxlChievements/graphics/transport-belt-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/transport-belt-2.png rename to MxlChievements/graphics/transport-belt-2.png diff --git a/MxlChievements_2.0.0/graphics/transport-belt-3.png b/MxlChievements/graphics/transport-belt-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/transport-belt-3.png rename to MxlChievements/graphics/transport-belt-3.png diff --git a/MxlChievements_2.0.0/graphics/transport-belt-4.png b/MxlChievements/graphics/transport-belt-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/transport-belt-4.png rename to MxlChievements/graphics/transport-belt-4.png diff --git a/MxlChievements_2.0.0/graphics/transport-belt-5.png b/MxlChievements/graphics/transport-belt-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/transport-belt-5.png rename to MxlChievements/graphics/transport-belt-5.png diff --git a/MxlChievements_2.0.0/graphics/underground-belt-1.png b/MxlChievements/graphics/underground-belt-1.png similarity index 100% rename from MxlChievements_2.0.0/graphics/underground-belt-1.png rename to MxlChievements/graphics/underground-belt-1.png diff --git a/MxlChievements_2.0.0/graphics/underground-belt-2.png b/MxlChievements/graphics/underground-belt-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/underground-belt-2.png rename to MxlChievements/graphics/underground-belt-2.png diff --git a/MxlChievements_2.0.0/graphics/underground-belt-3.png b/MxlChievements/graphics/underground-belt-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/underground-belt-3.png rename to MxlChievements/graphics/underground-belt-3.png diff --git a/MxlChievements_2.0.0/graphics/underground-belt-4.png b/MxlChievements/graphics/underground-belt-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/underground-belt-4.png rename to MxlChievements/graphics/underground-belt-4.png diff --git a/MxlChievements_2.0.0/graphics/underground-belt-5.png b/MxlChievements/graphics/underground-belt-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/underground-belt-5.png rename to MxlChievements/graphics/underground-belt-5.png diff --git a/MxlChievements_2.0.0/graphics/uranium-235-2.png b/MxlChievements/graphics/uranium-235-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-235-2.png rename to MxlChievements/graphics/uranium-235-2.png diff --git a/MxlChievements_2.0.0/graphics/uranium-235-3.png b/MxlChievements/graphics/uranium-235-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-235-3.png rename to MxlChievements/graphics/uranium-235-3.png diff --git a/MxlChievements_2.0.0/graphics/uranium-235-4.png b/MxlChievements/graphics/uranium-235-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-235-4.png rename to MxlChievements/graphics/uranium-235-4.png diff --git a/MxlChievements_2.0.0/graphics/uranium-235-5.png b/MxlChievements/graphics/uranium-235-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-235-5.png rename to MxlChievements/graphics/uranium-235-5.png diff --git a/MxlChievements_2.0.0/graphics/uranium-235.png b/MxlChievements/graphics/uranium-235.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-235.png rename to MxlChievements/graphics/uranium-235.png diff --git a/MxlChievements_2.0.0/graphics/uranium-238-2.png b/MxlChievements/graphics/uranium-238-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-238-2.png rename to MxlChievements/graphics/uranium-238-2.png diff --git a/MxlChievements_2.0.0/graphics/uranium-238-3.png b/MxlChievements/graphics/uranium-238-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-238-3.png rename to MxlChievements/graphics/uranium-238-3.png diff --git a/MxlChievements_2.0.0/graphics/uranium-238-4.png b/MxlChievements/graphics/uranium-238-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-238-4.png rename to MxlChievements/graphics/uranium-238-4.png diff --git a/MxlChievements_2.0.0/graphics/uranium-238-5.png b/MxlChievements/graphics/uranium-238-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-238-5.png rename to MxlChievements/graphics/uranium-238-5.png diff --git a/MxlChievements_2.0.0/graphics/uranium-238.png b/MxlChievements/graphics/uranium-238.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-238.png rename to MxlChievements/graphics/uranium-238.png diff --git a/MxlChievements_2.0.0/graphics/uranium-fuel-cell.png b/MxlChievements/graphics/uranium-fuel-cell.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-fuel-cell.png rename to MxlChievements/graphics/uranium-fuel-cell.png diff --git a/MxlChievements_2.0.0/graphics/uranium-ore-2.png b/MxlChievements/graphics/uranium-ore-2.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-ore-2.png rename to MxlChievements/graphics/uranium-ore-2.png diff --git a/MxlChievements_2.0.0/graphics/uranium-ore-3.png b/MxlChievements/graphics/uranium-ore-3.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-ore-3.png rename to MxlChievements/graphics/uranium-ore-3.png diff --git a/MxlChievements_2.0.0/graphics/uranium-ore-4.png b/MxlChievements/graphics/uranium-ore-4.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-ore-4.png rename to MxlChievements/graphics/uranium-ore-4.png diff --git a/MxlChievements_2.0.0/graphics/uranium-ore-5.png b/MxlChievements/graphics/uranium-ore-5.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-ore-5.png rename to MxlChievements/graphics/uranium-ore-5.png diff --git a/MxlChievements_2.0.0/graphics/uranium-ore.png b/MxlChievements/graphics/uranium-ore.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-ore.png rename to MxlChievements/graphics/uranium-ore.png diff --git a/MxlChievements_2.0.0/graphics/uranium-rounds-magazine.png b/MxlChievements/graphics/uranium-rounds-magazine.png similarity index 100% rename from MxlChievements_2.0.0/graphics/uranium-rounds-magazine.png rename to MxlChievements/graphics/uranium-rounds-magazine.png diff --git a/MxlChievements_2.0.0/info.json b/MxlChievements/info.json similarity index 100% rename from MxlChievements_2.0.0/info.json rename to MxlChievements/info.json diff --git a/MxlChievements_2.0.0/internal.lua b/MxlChievements/internal.lua similarity index 100% rename from MxlChievements_2.0.0/internal.lua rename to MxlChievements/internal.lua diff --git a/MxlChievements_2.0.0/locale/en/locale.cfg b/MxlChievements/locale/en/locale.cfg similarity index 100% rename from MxlChievements_2.0.0/locale/en/locale.cfg rename to MxlChievements/locale/en/locale.cfg diff --git a/MxlChievements_2.0.0/temp data.txt b/MxlChievements/temp data.txt similarity index 100% rename from MxlChievements_2.0.0/temp data.txt rename to MxlChievements/temp data.txt diff --git a/MxlChievements_2.0.0/thanks.txt b/MxlChievements/thanks.txt similarity index 100% rename from MxlChievements_2.0.0/thanks.txt rename to MxlChievements/thanks.txt diff --git a/MxlChievements_2.0.0/thumbnail.png b/MxlChievements/thumbnail.png similarity index 100% rename from MxlChievements_2.0.0/thumbnail.png rename to MxlChievements/thumbnail.png diff --git a/MxlChievements_2.0.0/updates.txt b/MxlChievements/updates.txt similarity index 100% rename from MxlChievements_2.0.0/updates.txt rename to MxlChievements/updates.txt diff --git a/Namelists_2.1.3/changelog.txt b/Namelists/changelog.txt similarity index 100% rename from Namelists_2.1.3/changelog.txt rename to Namelists/changelog.txt diff --git a/Namelists_2.1.3/control.lua b/Namelists/control.lua similarity index 100% rename from Namelists_2.1.3/control.lua rename to Namelists/control.lua diff --git a/Namelists_2.1.3/data.lua b/Namelists/data.lua similarity index 100% rename from Namelists_2.1.3/data.lua rename to Namelists/data.lua diff --git a/Namelists_2.1.3/info.json b/Namelists/info.json similarity index 100% rename from Namelists_2.1.3/info.json rename to Namelists/info.json diff --git a/Namelists_2.1.3/locale/en/locale.cfg b/Namelists/locale/en/locale.cfg similarity index 100% rename from Namelists_2.1.3/locale/en/locale.cfg rename to Namelists/locale/en/locale.cfg diff --git a/Namelists_2.1.3/settings.lua b/Namelists/settings.lua similarity index 100% rename from Namelists_2.1.3/settings.lua rename to Namelists/settings.lua diff --git a/Namelists_2.1.3/thumbnail.png b/Namelists/thumbnail.png similarity index 100% rename from Namelists_2.1.3/thumbnail.png rename to Namelists/thumbnail.png diff --git a/Nanobots_3.2.19/README.md b/Nanobots/README.md similarity index 100% rename from Nanobots_3.2.19/README.md rename to Nanobots/README.md diff --git a/Nanobots_3.2.19/changelog.txt b/Nanobots/changelog.txt similarity index 100% rename from Nanobots_3.2.19/changelog.txt rename to Nanobots/changelog.txt diff --git a/Nanobots_3.2.19/changes/versions.lua b/Nanobots/changes/versions.lua similarity index 100% rename from Nanobots_3.2.19/changes/versions.lua rename to Nanobots/changes/versions.lua diff --git a/Nanobots_3.2.19/commands.lua b/Nanobots/commands.lua similarity index 100% rename from Nanobots_3.2.19/commands.lua rename to Nanobots/commands.lua diff --git a/Nanobots_3.2.19/config.lua b/Nanobots/config.lua similarity index 100% rename from Nanobots_3.2.19/config.lua rename to Nanobots/config.lua diff --git a/Nanobots_3.2.19/control.lua b/Nanobots/control.lua similarity index 100% rename from Nanobots_3.2.19/control.lua rename to Nanobots/control.lua diff --git a/Nanobots_3.2.19/data-updates.lua b/Nanobots/data-updates.lua similarity index 100% rename from Nanobots_3.2.19/data-updates.lua rename to Nanobots/data-updates.lua diff --git a/Nanobots_3.2.19/data.lua b/Nanobots/data.lua similarity index 100% rename from Nanobots_3.2.19/data.lua rename to Nanobots/data.lua diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/combinator-led-constant-south.png b/Nanobots/graphics/entity/roboport-interface/combinator-led-constant-south.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/combinator-led-constant-south.png rename to Nanobots/graphics/entity/roboport-interface/combinator-led-constant-south.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-base-shadow.png b/Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-base-shadow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-base-shadow.png rename to Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-base-shadow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-base.png b/Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-base.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-base.png rename to Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-base.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-glow.png b/Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-glow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-glow.png rename to Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-glow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-shadow.png b/Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-shadow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface-shadow.png rename to Nanobots/graphics/entity/roboport-interface/hr-roboport-interface-shadow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface.png b/Nanobots/graphics/entity/roboport-interface/hr-roboport-interface.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/hr-roboport-interface.png rename to Nanobots/graphics/entity/roboport-interface/hr-roboport-interface.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-base-shadow.png b/Nanobots/graphics/entity/roboport-interface/roboport-interface-base-shadow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-base-shadow.png rename to Nanobots/graphics/entity/roboport-interface/roboport-interface-base-shadow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-base.png b/Nanobots/graphics/entity/roboport-interface/roboport-interface-base.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-base.png rename to Nanobots/graphics/entity/roboport-interface/roboport-interface-base.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-glow.png b/Nanobots/graphics/entity/roboport-interface/roboport-interface-glow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-glow.png rename to Nanobots/graphics/entity/roboport-interface/roboport-interface-glow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-shadow.png b/Nanobots/graphics/entity/roboport-interface/roboport-interface-shadow.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface-shadow.png rename to Nanobots/graphics/entity/roboport-interface/roboport-interface-shadow.png diff --git a/Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface.png b/Nanobots/graphics/entity/roboport-interface/roboport-interface.png similarity index 100% rename from Nanobots_3.2.19/graphics/entity/roboport-interface/roboport-interface.png rename to Nanobots/graphics/entity/roboport-interface/roboport-interface.png diff --git a/Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-feeder.png b/Nanobots/graphics/equipment/equipment-bot-chip-feeder.png similarity index 100% rename from Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-feeder.png rename to Nanobots/graphics/equipment/equipment-bot-chip-feeder.png diff --git a/Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-items.png b/Nanobots/graphics/equipment/equipment-bot-chip-items.png similarity index 100% rename from Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-items.png rename to Nanobots/graphics/equipment/equipment-bot-chip-items.png diff --git a/Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-launcher.png b/Nanobots/graphics/equipment/equipment-bot-chip-launcher.png similarity index 100% rename from Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-launcher.png rename to Nanobots/graphics/equipment/equipment-bot-chip-launcher.png diff --git a/Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-nanointerface.png b/Nanobots/graphics/equipment/equipment-bot-chip-nanointerface.png similarity index 100% rename from Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-nanointerface.png rename to Nanobots/graphics/equipment/equipment-bot-chip-nanointerface.png diff --git a/Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-trees.png b/Nanobots/graphics/equipment/equipment-bot-chip-trees.png similarity index 100% rename from Nanobots_3.2.19/graphics/equipment/equipment-bot-chip-trees.png rename to Nanobots/graphics/equipment/equipment-bot-chip-trees.png diff --git a/Nanobots_3.2.19/graphics/icons/equipment-bot-chip-feeder.png b/Nanobots/graphics/icons/equipment-bot-chip-feeder.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/equipment-bot-chip-feeder.png rename to Nanobots/graphics/icons/equipment-bot-chip-feeder.png diff --git a/Nanobots_3.2.19/graphics/icons/equipment-bot-chip-items.png b/Nanobots/graphics/icons/equipment-bot-chip-items.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/equipment-bot-chip-items.png rename to Nanobots/graphics/icons/equipment-bot-chip-items.png diff --git a/Nanobots_3.2.19/graphics/icons/equipment-bot-chip-launcher.png b/Nanobots/graphics/icons/equipment-bot-chip-launcher.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/equipment-bot-chip-launcher.png rename to Nanobots/graphics/icons/equipment-bot-chip-launcher.png diff --git a/Nanobots_3.2.19/graphics/icons/equipment-bot-chip-nanointerface.png b/Nanobots/graphics/icons/equipment-bot-chip-nanointerface.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/equipment-bot-chip-nanointerface.png rename to Nanobots/graphics/icons/equipment-bot-chip-nanointerface.png diff --git a/Nanobots_3.2.19/graphics/icons/equipment-bot-chip-trees.png b/Nanobots/graphics/icons/equipment-bot-chip-trees.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/equipment-bot-chip-trees.png rename to Nanobots/graphics/icons/equipment-bot-chip-trees.png diff --git a/Nanobots_3.2.19/graphics/icons/nano-ammo-constructors.png b/Nanobots/graphics/icons/nano-ammo-constructors.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/nano-ammo-constructors.png rename to Nanobots/graphics/icons/nano-ammo-constructors.png diff --git a/Nanobots_3.2.19/graphics/icons/nano-ammo-termites.png b/Nanobots/graphics/icons/nano-ammo-termites.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/nano-ammo-termites.png rename to Nanobots/graphics/icons/nano-ammo-termites.png diff --git a/Nanobots_3.2.19/graphics/icons/nano-gun.png b/Nanobots/graphics/icons/nano-gun.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/nano-gun.png rename to Nanobots/graphics/icons/nano-gun.png diff --git a/Nanobots_3.2.19/graphics/icons/roboport-interface-cc.png b/Nanobots/graphics/icons/roboport-interface-cc.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/roboport-interface-cc.png rename to Nanobots/graphics/icons/roboport-interface-cc.png diff --git a/Nanobots_3.2.19/graphics/icons/roboport-interface.png b/Nanobots/graphics/icons/roboport-interface.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/roboport-interface.png rename to Nanobots/graphics/icons/roboport-interface.png diff --git a/Nanobots_3.2.19/graphics/icons/signals/chop-trees.png b/Nanobots/graphics/icons/signals/chop-trees.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/signals/chop-trees.png rename to Nanobots/graphics/icons/signals/chop-trees.png diff --git a/Nanobots_3.2.19/graphics/icons/signals/closest-roboport.png b/Nanobots/graphics/icons/signals/closest-roboport.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/signals/closest-roboport.png rename to Nanobots/graphics/icons/signals/closest-roboport.png diff --git a/Nanobots_3.2.19/graphics/icons/signals/deconstruct-miners.png b/Nanobots/graphics/icons/signals/deconstruct-miners.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/signals/deconstruct-miners.png rename to Nanobots/graphics/icons/signals/deconstruct-miners.png diff --git a/Nanobots_3.2.19/graphics/icons/signals/item-on-ground.png b/Nanobots/graphics/icons/signals/item-on-ground.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/signals/item-on-ground.png rename to Nanobots/graphics/icons/signals/item-on-ground.png diff --git a/Nanobots_3.2.19/graphics/icons/signals/remove-fish.png b/Nanobots/graphics/icons/signals/remove-fish.png similarity index 100% rename from Nanobots_3.2.19/graphics/icons/signals/remove-fish.png rename to Nanobots/graphics/icons/signals/remove-fish.png diff --git a/Nanobots_3.2.19/graphics/technology/roboport-interface.png b/Nanobots/graphics/technology/roboport-interface.png similarity index 100% rename from Nanobots_3.2.19/graphics/technology/roboport-interface.png rename to Nanobots/graphics/technology/roboport-interface.png diff --git a/Nanobots_3.2.19/graphics/technology/tech-nano-range.png b/Nanobots/graphics/technology/tech-nano-range.png similarity index 100% rename from Nanobots_3.2.19/graphics/technology/tech-nano-range.png rename to Nanobots/graphics/technology/tech-nano-range.png diff --git a/Nanobots_3.2.19/graphics/technology/tech-nano-speed.png b/Nanobots/graphics/technology/tech-nano-speed.png similarity index 100% rename from Nanobots_3.2.19/graphics/technology/tech-nano-speed.png rename to Nanobots/graphics/technology/tech-nano-speed.png diff --git a/Nanobots_3.2.19/graphics/technology/tech-nanobots-cliff.png b/Nanobots/graphics/technology/tech-nanobots-cliff.png similarity index 100% rename from Nanobots_3.2.19/graphics/technology/tech-nanobots-cliff.png rename to Nanobots/graphics/technology/tech-nanobots-cliff.png diff --git a/Nanobots_3.2.19/graphics/technology/tech-nanobots.png b/Nanobots/graphics/technology/tech-nanobots.png similarity index 100% rename from Nanobots_3.2.19/graphics/technology/tech-nanobots.png rename to Nanobots/graphics/technology/tech-nanobots.png diff --git a/Nanobots_3.2.19/info.json b/Nanobots/info.json similarity index 100% rename from Nanobots_3.2.19/info.json rename to Nanobots/info.json diff --git a/Nanobots_3.2.19/interface.lua b/Nanobots/interface.lua similarity index 100% rename from Nanobots_3.2.19/interface.lua rename to Nanobots/interface.lua diff --git a/Nanobots_3.2.19/locale/en/en.cfg b/Nanobots/locale/en/en.cfg similarity index 100% rename from Nanobots_3.2.19/locale/en/en.cfg rename to Nanobots/locale/en/en.cfg diff --git a/Nanobots_3.2.19/locale/en/settings.cfg b/Nanobots/locale/en/settings.cfg similarity index 100% rename from Nanobots_3.2.19/locale/en/settings.cfg rename to Nanobots/locale/en/settings.cfg diff --git a/Nanobots_3.2.19/migrations/20200410-3.2.6-unlock-toggles.lua b/Nanobots/migrations/20200410-3.2.6-unlock-toggles.lua similarity index 100% rename from Nanobots_3.2.19/migrations/20200410-3.2.6-unlock-toggles.lua rename to Nanobots/migrations/20200410-3.2.6-unlock-toggles.lua diff --git a/Nanobots_3.2.19/prototypes/ammo/constants.lua b/Nanobots/prototypes/ammo/constants.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/ammo/constants.lua rename to Nanobots/prototypes/ammo/constants.lua diff --git a/Nanobots_3.2.19/prototypes/ammo/constructors.lua b/Nanobots/prototypes/ammo/constructors.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/ammo/constructors.lua rename to Nanobots/prototypes/ammo/constructors.lua diff --git a/Nanobots_3.2.19/prototypes/ammo/termites.lua b/Nanobots/prototypes/ammo/termites.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/ammo/termites.lua rename to Nanobots/prototypes/ammo/termites.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-feeder.lua b/Nanobots/prototypes/equipment/equipment-bot-chip-feeder.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-feeder.lua rename to Nanobots/prototypes/equipment/equipment-bot-chip-feeder.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-items.lua b/Nanobots/prototypes/equipment/equipment-bot-chip-items.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-items.lua rename to Nanobots/prototypes/equipment/equipment-bot-chip-items.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-launcher.lua b/Nanobots/prototypes/equipment/equipment-bot-chip-launcher.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-launcher.lua rename to Nanobots/prototypes/equipment/equipment-bot-chip-launcher.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-nanointerface.lua b/Nanobots/prototypes/equipment/equipment-bot-chip-nanointerface.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-nanointerface.lua rename to Nanobots/prototypes/equipment/equipment-bot-chip-nanointerface.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-trees.lua b/Nanobots/prototypes/equipment/equipment-bot-chip-trees.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/equipment-bot-chip-trees.lua rename to Nanobots/prototypes/equipment/equipment-bot-chip-trees.lua diff --git a/Nanobots_3.2.19/prototypes/equipment/make_shortcut.lua b/Nanobots/prototypes/equipment/make_shortcut.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/equipment/make_shortcut.lua rename to Nanobots/prototypes/equipment/make_shortcut.lua diff --git a/Nanobots_3.2.19/prototypes/gun-nano-emitter.lua b/Nanobots/prototypes/gun-nano-emitter.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/gun-nano-emitter.lua rename to Nanobots/prototypes/gun-nano-emitter.lua diff --git a/Nanobots_3.2.19/prototypes/roboport-interface.lua b/Nanobots/prototypes/roboport-interface.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/roboport-interface.lua rename to Nanobots/prototypes/roboport-interface.lua diff --git a/Nanobots_3.2.19/prototypes/signals.lua b/Nanobots/prototypes/signals.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/signals.lua rename to Nanobots/prototypes/signals.lua diff --git a/Nanobots_3.2.19/prototypes/sounds.lua b/Nanobots/prototypes/sounds.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/sounds.lua rename to Nanobots/prototypes/sounds.lua diff --git a/Nanobots_3.2.19/prototypes/technology/nano-range.lua b/Nanobots/prototypes/technology/nano-range.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/technology/nano-range.lua rename to Nanobots/prototypes/technology/nano-range.lua diff --git a/Nanobots_3.2.19/prototypes/technology/nano-speed.lua b/Nanobots/prototypes/technology/nano-speed.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/technology/nano-speed.lua rename to Nanobots/prototypes/technology/nano-speed.lua diff --git a/Nanobots_3.2.19/prototypes/technology/nanobots.lua b/Nanobots/prototypes/technology/nanobots.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/technology/nanobots.lua rename to Nanobots/prototypes/technology/nanobots.lua diff --git a/Nanobots_3.2.19/prototypes/technology/shortcuts.lua b/Nanobots/prototypes/technology/shortcuts.lua similarity index 100% rename from Nanobots_3.2.19/prototypes/technology/shortcuts.lua rename to Nanobots/prototypes/technology/shortcuts.lua diff --git a/Nanobots_3.2.19/scripts/armor-mods.lua b/Nanobots/scripts/armor-mods.lua similarity index 100% rename from Nanobots_3.2.19/scripts/armor-mods.lua rename to Nanobots/scripts/armor-mods.lua diff --git a/Nanobots_3.2.19/scripts/hash_queue.lua b/Nanobots/scripts/hash_queue.lua similarity index 100% rename from Nanobots_3.2.19/scripts/hash_queue.lua rename to Nanobots/scripts/hash_queue.lua diff --git a/Nanobots_3.2.19/scripts/nanobots.lua b/Nanobots/scripts/nanobots.lua similarity index 100% rename from Nanobots_3.2.19/scripts/nanobots.lua rename to Nanobots/scripts/nanobots.lua diff --git a/Nanobots_3.2.19/scripts/reprogram-gui.lua b/Nanobots/scripts/reprogram-gui.lua similarity index 100% rename from Nanobots_3.2.19/scripts/reprogram-gui.lua rename to Nanobots/scripts/reprogram-gui.lua diff --git a/Nanobots_3.2.19/scripts/roboport-interface.lua b/Nanobots/scripts/roboport-interface.lua similarity index 100% rename from Nanobots_3.2.19/scripts/roboport-interface.lua rename to Nanobots/scripts/roboport-interface.lua diff --git a/Nanobots_3.2.19/settings.lua b/Nanobots/settings.lua similarity index 100% rename from Nanobots_3.2.19/settings.lua rename to Nanobots/settings.lua diff --git a/Nanobots_3.2.19/sounds/robostep.ogg b/Nanobots/sounds/robostep.ogg similarity index 100% rename from Nanobots_3.2.19/sounds/robostep.ogg rename to Nanobots/sounds/robostep.ogg diff --git a/Nanobots_3.2.19/sounds/sawing-wood.ogg b/Nanobots/sounds/sawing-wood.ogg similarity index 100% rename from Nanobots_3.2.19/sounds/sawing-wood.ogg rename to Nanobots/sounds/sawing-wood.ogg diff --git a/Nanobots_3.2.19/thumbnail.png b/Nanobots/thumbnail.png similarity index 100% rename from Nanobots_3.2.19/thumbnail.png rename to Nanobots/thumbnail.png diff --git a/Natural_Evolution_Enemies_1.1.29/.gitattributes b/Natural_Evolution_Enemies/.gitattributes similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/.gitattributes rename to Natural_Evolution_Enemies/.gitattributes diff --git a/Natural_Evolution_Enemies_1.1.29/LICENSE b/Natural_Evolution_Enemies/LICENSE similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/LICENSE rename to Natural_Evolution_Enemies/LICENSE diff --git a/Natural_Evolution_Enemies_1.1.29/Natural Evolution Mods.docx b/Natural_Evolution_Enemies/Natural Evolution Mods.docx similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/Natural Evolution Mods.docx rename to Natural_Evolution_Enemies/Natural Evolution Mods.docx diff --git a/Natural_Evolution_Enemies_1.1.29/Test_Spawn.lua b/Natural_Evolution_Enemies/Test_Spawn.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/Test_Spawn.lua rename to Natural_Evolution_Enemies/Test_Spawn.lua diff --git a/Natural_Evolution_Enemies_1.1.29/changelog.txt b/Natural_Evolution_Enemies/changelog.txt similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/changelog.txt rename to Natural_Evolution_Enemies/changelog.txt diff --git a/Natural_Evolution_Enemies_1.1.29/common-data.lua b/Natural_Evolution_Enemies/common-data.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/common-data.lua rename to Natural_Evolution_Enemies/common-data.lua diff --git a/Natural_Evolution_Enemies_1.1.29/common.lua b/Natural_Evolution_Enemies/common.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/common.lua rename to Natural_Evolution_Enemies/common.lua diff --git a/Natural_Evolution_Enemies_1.1.29/control.lua b/Natural_Evolution_Enemies/control.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/control.lua rename to Natural_Evolution_Enemies/control.lua diff --git a/Natural_Evolution_Enemies_1.1.29/credits.txt b/Natural_Evolution_Enemies/credits.txt similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/credits.txt rename to Natural_Evolution_Enemies/credits.txt diff --git a/Natural_Evolution_Enemies_1.1.29/data-final-fixes.lua b/Natural_Evolution_Enemies/data-final-fixes.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/data-final-fixes.lua rename to Natural_Evolution_Enemies/data-final-fixes.lua diff --git a/Natural_Evolution_Enemies_1.1.29/data-updates.lua b/Natural_Evolution_Enemies/data-updates.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/data-updates.lua rename to Natural_Evolution_Enemies/data-updates.lua diff --git a/Natural_Evolution_Enemies_1.1.29/data.lua b/Natural_Evolution_Enemies/data.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/data.lua rename to Natural_Evolution_Enemies/data.lua diff --git a/Natural_Evolution_Enemies_1.1.29/info.json b/Natural_Evolution_Enemies/info.json similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/info.json rename to Natural_Evolution_Enemies/info.json diff --git a/Natural_Evolution_Enemies_1.1.29/libs/NE_Functions.lua b/Natural_Evolution_Enemies/libs/NE_Functions.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/libs/NE_Functions.lua rename to Natural_Evolution_Enemies/libs/NE_Functions.lua diff --git a/Natural_Evolution_Enemies_1.1.29/libs/collision-mask-util-extended.lua b/Natural_Evolution_Enemies/libs/collision-mask-util-extended.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/libs/collision-mask-util-extended.lua rename to Natural_Evolution_Enemies/libs/collision-mask-util-extended.lua diff --git a/Natural_Evolution_Enemies_1.1.29/locale/en/locale.cfg b/Natural_Evolution_Enemies/locale/en/locale.cfg similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/locale/en/locale.cfg rename to Natural_Evolution_Enemies/locale/en/locale.cfg diff --git a/Natural_Evolution_Enemies_1.1.29/locale/ru/locale.cfg b/Natural_Evolution_Enemies/locale/ru/locale.cfg similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/locale/ru/locale.cfg rename to Natural_Evolution_Enemies/locale/ru/locale.cfg diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Achievements/Achievements.lua b/Natural_Evolution_Enemies/prototypes/Achievements/Achievements.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Achievements/Achievements.lua rename to Natural_Evolution_Enemies/prototypes/Achievements/Achievements.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Categories/ammo-category.lua b/Natural_Evolution_Enemies/prototypes/Categories/ammo-category.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Categories/ammo-category.lua rename to Natural_Evolution_Enemies/prototypes/Categories/ammo-category.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/Bobs_Changes.lua b/Natural_Evolution_Enemies/prototypes/Compatibility/Bobs_Changes.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/Bobs_Changes.lua rename to Natural_Evolution_Enemies/prototypes/Compatibility/Bobs_Changes.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/Milestones.lua b/Natural_Evolution_Enemies/prototypes/Compatibility/Milestones.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/Milestones.lua rename to Natural_Evolution_Enemies/prototypes/Compatibility/Milestones.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/aai_programmable_vehicles.lua b/Natural_Evolution_Enemies/prototypes/Compatibility/aai_programmable_vehicles.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Compatibility/aai_programmable_vehicles.lua rename to Natural_Evolution_Enemies/prototypes/Compatibility/aai_programmable_vehicles.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/alien-artifact.lua b/Natural_Evolution_Enemies/prototypes/Extra_Loot/alien-artifact.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/alien-artifact.lua rename to Natural_Evolution_Enemies/prototypes/Extra_Loot/alien-artifact.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/extra_loot.lua b/Natural_Evolution_Enemies/prototypes/Extra_Loot/extra_loot.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/extra_loot.lua rename to Natural_Evolution_Enemies/prototypes/Extra_Loot/extra_loot.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/item.lua b/Natural_Evolution_Enemies/prototypes/Extra_Loot/item.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/item.lua rename to Natural_Evolution_Enemies/prototypes/Extra_Loot/item.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/recipe.lua b/Natural_Evolution_Enemies/prototypes/Extra_Loot/recipe.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/Extra_Loot/recipe.lua rename to Natural_Evolution_Enemies/prototypes/Extra_Loot/recipe.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Damage-types.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Damage-types.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Damage-types.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Damage-types.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Fire_Stuff.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Fire_Stuff.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Fire_Stuff.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Fire_Stuff.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Functions.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Functions.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Functions.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Functions.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Megladon_Biter_Unit.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Megladon_Biter_Unit.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Megladon_Biter_Unit.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Megladon_Biter_Unit.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Graphics_Arachnids.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Graphics_Arachnids.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Graphics_Arachnids.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Graphics_Arachnids.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Graphics_Zerg.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Graphics_Zerg.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Graphics_Zerg.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Graphics_Zerg.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Units.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Units.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Biter_Units.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Biter_Units.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spawners.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Spawners.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spawners.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Spawners.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spawners_Graphics.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Spawners_Graphics.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spawners_Graphics.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Spawners_Graphics.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spitter_Graphics_Zerg.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Spitter_Graphics_Zerg.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spitter_Graphics_Zerg.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Spitter_Graphics_Zerg.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spitter_Units.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Spitter_Units.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Spitter_Units.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Spitter_Units.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Worms.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Worms.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Worms.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Worms.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Worms_Graphics.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/New_Worms_Graphics.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/New_Worms_Graphics.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/New_Worms_Graphics.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Projectiles.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Projectiles.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Projectiles.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Projectiles.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Settings.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Settings.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Settings.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Settings.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Unit_Launcher.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Unit_Launcher.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Unit_Launcher.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Unit_Launcher.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Update_Immunities.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Update_Immunities.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Update_Immunities.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Update_Immunities.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Worm_Changes.lua b/Natural_Evolution_Enemies/prototypes/NE_Units/Worm_Changes.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/NE_Units/Worm_Changes.lua rename to Natural_Evolution_Enemies/prototypes/NE_Units/Worm_Changes.lua diff --git a/Natural_Evolution_Enemies_1.1.29/prototypes/sound.lua b/Natural_Evolution_Enemies/prototypes/sound.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/prototypes/sound.lua rename to Natural_Evolution_Enemies/prototypes/sound.lua diff --git a/Natural_Evolution_Enemies_1.1.29/settings.lua b/Natural_Evolution_Enemies/settings.lua similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/settings.lua rename to Natural_Evolution_Enemies/settings.lua diff --git a/Natural_Evolution_Enemies_1.1.29/thumbnail.png b/Natural_Evolution_Enemies/thumbnail.png similarity index 100% rename from Natural_Evolution_Enemies_1.1.29/thumbnail.png rename to Natural_Evolution_Enemies/thumbnail.png diff --git a/Natural_Evolution_Graphics/changelog.txt b/Natural_Evolution_Graphics/changelog.txt new file mode 100644 index 00000000..dc61d5f2 --- /dev/null +++ b/Natural_Evolution_Graphics/changelog.txt @@ -0,0 +1,16 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.02 +Date: 2023-07-31 + Uploaded by: + - TheSAguy + + Features: + - Removed Zerg Graphics, now requires "erm_zerg_hd_assets" as a dependancy +--------------------------------------------------------------------------------------------------- +Version: 1.1.01 +Date: 2023-07-28 + Uploaded by: + - TheSAguy + + Features: + - Initial Release - Graphics Pack for NE Mods diff --git a/Natural_Evolution_Graphics/graphics/achievements/alien-contact.png b/Natural_Evolution_Graphics/graphics/achievements/alien-contact.png new file mode 100644 index 00000000..288c8b2a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/achievements/alien-contact.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/Web_64.png b/Natural_Evolution_Graphics/graphics/entities/Web_64.png new file mode 100644 index 00000000..6d0fc49b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/Web_64.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/Web_64_shadow.png b/Natural_Evolution_Graphics/graphics/entities/Web_64_shadow.png new file mode 100644 index 00000000..59c1a6a4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/Web_64_shadow.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/acid-projectile-blue.png b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-blue.png new file mode 100644 index 00000000..7df672cf Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-blue.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/acid-projectile-green.png b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-green.png new file mode 100644 index 00000000..67cfa2e5 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-green.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/acid-projectile-purple-shadow.png b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-purple-shadow.png new file mode 100644 index 00000000..09ad9e96 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-purple-shadow.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/acid-projectile-red.png b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-red.png new file mode 100644 index 00000000..717c7a2b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-red.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/acid-projectile-yellow.png b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-yellow.png new file mode 100644 index 00000000..4de1cfba Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/acid-projectile-yellow.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-01.png new file mode 100644 index 00000000..cda21a00 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-02.png new file mode 100644 index 00000000..03c8d152 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-03.png new file mode 100644 index 00000000..13d6b71d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-04.png new file mode 100644 index 00000000..8c87a355 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-01.png new file mode 100644 index 00000000..1b3bddc1 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-02.png new file mode 100644 index 00000000..209ccc75 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-03.png new file mode 100644 index 00000000..6ca6553c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-04.png new file mode 100644 index 00000000..b1c9e7a7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask1-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-01.png new file mode 100644 index 00000000..7aadb766 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-02.png new file mode 100644 index 00000000..2cbc204a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-03.png new file mode 100644 index 00000000..42d227d2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-04.png new file mode 100644 index 00000000..5dfbdfa3 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-mask2-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-01.png new file mode 100644 index 00000000..d38ac846 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-02.png new file mode 100644 index 00000000..d84a2889 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-03.png new file mode 100644 index 00000000..e28f0816 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-04.png new file mode 100644 index 00000000..5b05124b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-attack-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-01.png new file mode 100644 index 00000000..4b14a070 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-02.png new file mode 100644 index 00000000..bc72b325 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-03.png new file mode 100644 index 00000000..4a37e58e Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-04.png new file mode 100644 index 00000000..3a485d68 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-05.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-05.png new file mode 100644 index 00000000..5bc17073 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-05.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-06.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-06.png new file mode 100644 index 00000000..5e28381f Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-06.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-07.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-07.png new file mode 100644 index 00000000..0086d186 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-07.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-08.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-08.png new file mode 100644 index 00000000..fdb9d4e1 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-08.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-09.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-09.png new file mode 100644 index 00000000..63c8934a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-09.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-10.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-10.png new file mode 100644 index 00000000..b31c0bfa Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-10.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-11.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-11.png new file mode 100644 index 00000000..0b6f798b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-11.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-12.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-12.png new file mode 100644 index 00000000..ccc0eb60 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-12.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-13.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-13.png new file mode 100644 index 00000000..b36076fc Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-13.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-14.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-14.png new file mode 100644 index 00000000..7e5dc8a7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-14.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-15.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-15.png new file mode 100644 index 00000000..3781d5f8 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-15.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-16.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-16.png new file mode 100644 index 00000000..aad5c4aa Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-16.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-17.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-17.png new file mode 100644 index 00000000..a676507b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-17.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-01.png new file mode 100644 index 00000000..b827089b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-02.png new file mode 100644 index 00000000..c9639a2c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-03.png new file mode 100644 index 00000000..e91c3aaa Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-04.png new file mode 100644 index 00000000..9d9db866 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-05.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-05.png new file mode 100644 index 00000000..773d458c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-05.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-06.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-06.png new file mode 100644 index 00000000..4ebf9988 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-06.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-07.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-07.png new file mode 100644 index 00000000..663360a6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-07.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-08.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-08.png new file mode 100644 index 00000000..45ea4772 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-08.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-09.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-09.png new file mode 100644 index 00000000..a42401b0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-09.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-10.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-10.png new file mode 100644 index 00000000..48da52f6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-10.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-11.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-11.png new file mode 100644 index 00000000..0d6614eb Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-11.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-12.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-12.png new file mode 100644 index 00000000..e6aba22a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-12.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-13.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-13.png new file mode 100644 index 00000000..4c7ba3f6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-13.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-14.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-14.png new file mode 100644 index 00000000..96e4fdd7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-14.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-15.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-15.png new file mode 100644 index 00000000..dd98f6f4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-15.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-16.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-16.png new file mode 100644 index 00000000..7defde36 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-16.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-17.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-17.png new file mode 100644 index 00000000..b5c079e0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-die-shadow-17.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-01.png new file mode 100644 index 00000000..0c8836bf Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-02.png new file mode 100644 index 00000000..8e13a56c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-03.png new file mode 100644 index 00000000..c7b185a3 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-04.png new file mode 100644 index 00000000..e3bbf7d4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-01.png new file mode 100644 index 00000000..61d1bc44 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-02.png new file mode 100644 index 00000000..6b8b917b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-03.png new file mode 100644 index 00000000..b95e53e7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-04.png new file mode 100644 index 00000000..c5f94b3d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask1-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-01.png new file mode 100644 index 00000000..0b9211a2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-02.png new file mode 100644 index 00000000..e1ef7df1 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-03.png new file mode 100644 index 00000000..e28eb6f8 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-04.png new file mode 100644 index 00000000..894b6f93 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-mask2-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-01.png new file mode 100644 index 00000000..d3410ccd Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-02.png new file mode 100644 index 00000000..fa5cd258 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-03.png new file mode 100644 index 00000000..6b852a28 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-04.png new file mode 100644 index 00000000..67265426 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/Arachnids-run-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-01.png new file mode 100644 index 00000000..507f196c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-02.png new file mode 100644 index 00000000..c9bbc6ab Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-03.png new file mode 100644 index 00000000..92504144 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-04.png new file mode 100644 index 00000000..306c37ab Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-01.png new file mode 100644 index 00000000..18d98a74 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-02.png new file mode 100644 index 00000000..f46337e2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-03.png new file mode 100644 index 00000000..77a285aa Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-04.png new file mode 100644 index 00000000..015f5d94 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask1-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-01.png new file mode 100644 index 00000000..ec8b5035 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-02.png new file mode 100644 index 00000000..d9e63e95 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-03.png new file mode 100644 index 00000000..65cf33ac Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-04.png new file mode 100644 index 00000000..8dec0a4a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-mask2-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-01.png new file mode 100644 index 00000000..62193a0a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-02.png new file mode 100644 index 00000000..69682322 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-03.png new file mode 100644 index 00000000..54ddf7fb Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-04.png new file mode 100644 index 00000000..3ccee25d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-attack-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-01.png new file mode 100644 index 00000000..b9d82e54 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-02.png new file mode 100644 index 00000000..7f8fcb96 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-03.png new file mode 100644 index 00000000..791e3e90 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-04.png new file mode 100644 index 00000000..114307cf Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-05.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-05.png new file mode 100644 index 00000000..595748a9 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-05.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-06.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-06.png new file mode 100644 index 00000000..3783abd8 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-06.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-07.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-07.png new file mode 100644 index 00000000..93588b4e Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-07.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-08.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-08.png new file mode 100644 index 00000000..23fb0f43 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-08.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-09.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-09.png new file mode 100644 index 00000000..5068f349 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-09.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-10.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-10.png new file mode 100644 index 00000000..0d991ecf Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-10.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-11.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-11.png new file mode 100644 index 00000000..6e07b216 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-11.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-12.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-12.png new file mode 100644 index 00000000..1332989d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-12.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-13.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-13.png new file mode 100644 index 00000000..28ecc658 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-13.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-14.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-14.png new file mode 100644 index 00000000..38feca8d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-14.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-15.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-15.png new file mode 100644 index 00000000..90329527 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-15.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-16.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-16.png new file mode 100644 index 00000000..6181436c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-16.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-17.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-17.png new file mode 100644 index 00000000..dbb9165b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-17.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-01.png new file mode 100644 index 00000000..67fc29b5 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-02.png new file mode 100644 index 00000000..d93b5677 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-03.png new file mode 100644 index 00000000..81133a09 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-04.png new file mode 100644 index 00000000..9d8bbb0b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-05.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-05.png new file mode 100644 index 00000000..c80c3efa Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-05.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-06.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-06.png new file mode 100644 index 00000000..50f73ab0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-06.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-07.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-07.png new file mode 100644 index 00000000..2018aa5b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-07.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-08.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-08.png new file mode 100644 index 00000000..b316c575 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-08.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-09.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-09.png new file mode 100644 index 00000000..36a234c1 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-09.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-10.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-10.png new file mode 100644 index 00000000..cde0ac6b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-10.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-11.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-11.png new file mode 100644 index 00000000..03de0414 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-11.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-12.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-12.png new file mode 100644 index 00000000..8c3a589c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-12.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-13.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-13.png new file mode 100644 index 00000000..4356d41d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-13.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-14.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-14.png new file mode 100644 index 00000000..52a3b9c2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-14.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-15.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-15.png new file mode 100644 index 00000000..aae47ff0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-15.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-16.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-16.png new file mode 100644 index 00000000..4d151ea7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-16.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-17.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-17.png new file mode 100644 index 00000000..b97bbe7a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-die-shadow-17.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-01.png new file mode 100644 index 00000000..f24c8ea2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-02.png new file mode 100644 index 00000000..07f66a03 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-03.png new file mode 100644 index 00000000..bde336e4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-04.png new file mode 100644 index 00000000..e7d19dc2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-01.png new file mode 100644 index 00000000..f1e639a4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-02.png new file mode 100644 index 00000000..d7a172b7 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-03.png new file mode 100644 index 00000000..98472402 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-04.png new file mode 100644 index 00000000..ca4695cf Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask1-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-01.png new file mode 100644 index 00000000..41d73f78 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-02.png new file mode 100644 index 00000000..0c27a2b4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-03.png new file mode 100644 index 00000000..9bc76314 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-04.png new file mode 100644 index 00000000..e99e4b78 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-mask2-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-01.png new file mode 100644 index 00000000..bef89eb2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-02.png new file mode 100644 index 00000000..5b0fb616 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-03.png new file mode 100644 index 00000000..a521b1c4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-04.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-04.png new file mode 100644 index 00000000..2c19a69d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/arachnids/hr-Arachnids-run-shadow-04.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-01.png new file mode 100644 index 00000000..10f0ef17 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-02.png new file mode 100644 index 00000000..730d2587 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-03.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-03.png new file mode 100644 index 00000000..1f21938f Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-03.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-01.png new file mode 100644 index 00000000..97fe598e Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-02.png new file mode 100644 index 00000000..0be4d3d2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-die-mask-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle-mask.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle-mask.png new file mode 100644 index 00000000..86828981 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle-mask.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle.png new file mode 100644 index 00000000..7a5b996b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/spawner/spawner-idle.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-01.png new file mode 100644 index 00000000..4c7ac9d8 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-02.png new file mode 100644 index 00000000..64d23956 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-01.png new file mode 100644 index 00000000..bfb6163b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-02.png new file mode 100644 index 00000000..4eb7e511 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-attack-mask-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die-mask.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die-mask.png new file mode 100644 index 00000000..89554d35 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die-mask.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die.png new file mode 100644 index 00000000..9b67e2c0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-die.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded-mask.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded-mask.png new file mode 100644 index 00000000..7416cd2f Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded-mask.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded.png new file mode 100644 index 00000000..d1fa97cd Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-folded.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared-mask.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared-mask.png new file mode 100644 index 00000000..3ab7eb8b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared-mask.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared.png new file mode 100644 index 00000000..ae25ec7c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-prepared.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-01.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-01.png new file mode 100644 index 00000000..ab51d088 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-01.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-02.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-02.png new file mode 100644 index 00000000..7f2cf6d0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-02.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-mask.png b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-mask.png new file mode 100644 index 00000000..aeb945a6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/alt_graphics/worm/worm-preparing-mask.png differ diff --git a/Warheads_0.0.17/graphics/blank-64.png b/Natural_Evolution_Graphics/graphics/entities/empty.png similarity index 100% rename from Warheads_0.0.17/graphics/blank-64.png rename to Natural_Evolution_Graphics/graphics/entities/empty.png diff --git a/Natural_Evolution_Graphics/graphics/entities/fire.png b/Natural_Evolution_Graphics/graphics/entities/fire.png new file mode 100644 index 00000000..edf91781 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/fire.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile.png b/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile.png new file mode 100644 index 00000000..d3fdb8a3 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile_shadow.png b/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile_shadow.png new file mode 100644 index 00000000..1abd25ee Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/land_mine_projectile_shadow.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile-shadow.png b/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile-shadow.png new file mode 100644 index 00000000..3460ab4c Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile-shadow.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile.png b/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile.png new file mode 100644 index 00000000..883beba0 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/larva-worm-projectile.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_fire.png b/Natural_Evolution_Graphics/graphics/entities/ne_fire.png new file mode 100644 index 00000000..141bfa52 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_fire.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_spark.png b/Natural_Evolution_Graphics/graphics/entities/ne_spark.png new file mode 100644 index 00000000..bd576636 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_spark.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_spark_1.png b/Natural_Evolution_Graphics/graphics/entities/ne_spark_1.png new file mode 100644 index 00000000..bd576636 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_spark_1.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_spark_2.png b/Natural_Evolution_Graphics/graphics/entities/ne_spark_2.png new file mode 100644 index 00000000..b8764aec Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_spark_2.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_spark_3.png b/Natural_Evolution_Graphics/graphics/entities/ne_spark_3.png new file mode 100644 index 00000000..19dadf91 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_spark_3.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/ne_spark_4.png b/Natural_Evolution_Graphics/graphics/entities/ne_spark_4.png new file mode 100644 index 00000000..5aed70b1 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/ne_spark_4.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/splash-1.png b/Natural_Evolution_Graphics/graphics/entities/splash-1.png new file mode 100644 index 00000000..fc729f23 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/splash-1.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/splash-2.png b/Natural_Evolution_Graphics/graphics/entities/splash-2.png new file mode 100644 index 00000000..561db732 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/splash-2.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/splash-3.png b/Natural_Evolution_Graphics/graphics/entities/splash-3.png new file mode 100644 index 00000000..b55eddb2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/splash-3.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/splash-4.png b/Natural_Evolution_Graphics/graphics/entities/splash-4.png new file mode 100644 index 00000000..88135280 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/splash-4.png differ diff --git a/Natural_Evolution_Graphics/graphics/entities/web_visible.png b/Natural_Evolution_Graphics/graphics/entities/web_visible.png new file mode 100644 index 00000000..9fd511c6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/entities/web_visible.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/Arachnids-icon.png b/Natural_Evolution_Graphics/graphics/icons/Arachnids-icon.png new file mode 100644 index 00000000..e93413f2 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/Arachnids-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/alien-artifact.png b/Natural_Evolution_Graphics/graphics/icons/alien-artifact.png new file mode 100644 index 00000000..330299ec Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/alien-artifact.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/alien-artifact_alt.png b/Natural_Evolution_Graphics/graphics/icons/alien-artifact_alt.png new file mode 100644 index 00000000..65d5543d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/alien-artifact_alt.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/biter-spawner-corpse.png b/Natural_Evolution_Graphics/graphics/icons/biter-spawner-corpse.png new file mode 100644 index 00000000..f8fb6374 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/biter-spawner-corpse.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/biter-spawner.png b/Natural_Evolution_Graphics/graphics/icons/biter-spawner.png new file mode 100644 index 00000000..a75daf8b Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/biter-spawner.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/broodling-icon.png b/Natural_Evolution_Graphics/graphics/icons/broodling-icon.png new file mode 100644 index 00000000..a52e6134 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/broodling-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/devourer-icon.png b/Natural_Evolution_Graphics/graphics/icons/devourer-icon.png new file mode 100644 index 00000000..58df4fd5 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/devourer-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/empty.png b/Natural_Evolution_Graphics/graphics/icons/empty.png new file mode 100644 index 00000000..bab0fab6 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/empty.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/hydralisk-icon.png b/Natural_Evolution_Graphics/graphics/icons/hydralisk-icon.png new file mode 100644 index 00000000..d15569bb Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/hydralisk-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set-enemy.png b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set-enemy.png new file mode 100644 index 00000000..f76bcf0a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set-enemy.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set.png b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set.png new file mode 100644 index 00000000..f76bcf0a Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine-set.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine.png b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine.png new file mode 100644 index 00000000..c387e158 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/ne-spitter-land-mine.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/overlord-icon.png b/Natural_Evolution_Graphics/graphics/icons/overlord-icon.png new file mode 100644 index 00000000..8183e16d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/overlord-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/queen-icon.png b/Natural_Evolution_Graphics/graphics/icons/queen-icon.png new file mode 100644 index 00000000..7e166c5f Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/queen-icon.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact.png b/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact.png new file mode 100644 index 00000000..6f5bdef4 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact_alt.png b/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact_alt.png new file mode 100644 index 00000000..62dd4345 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/small-alien-artifact_alt.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/small-worm-corpse.png b/Natural_Evolution_Graphics/graphics/icons/small-worm-corpse.png new file mode 100644 index 00000000..b70dcbb3 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/small-worm-corpse.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/small-worm.png b/Natural_Evolution_Graphics/graphics/icons/small-worm.png new file mode 100644 index 00000000..15c55573 Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/small-worm.png differ diff --git a/Natural_Evolution_Graphics/graphics/icons/ultralisk-icon.png b/Natural_Evolution_Graphics/graphics/icons/ultralisk-icon.png new file mode 100644 index 00000000..f7af6e5d Binary files /dev/null and b/Natural_Evolution_Graphics/graphics/icons/ultralisk-icon.png differ diff --git a/Natural_Evolution_Graphics/info.json b/Natural_Evolution_Graphics/info.json new file mode 100644 index 00000000..d3dede38 --- /dev/null +++ b/Natural_Evolution_Graphics/info.json @@ -0,0 +1,12 @@ +{ + "name": "Natural_Evolution_Graphics", + "version": "1.1.02", + "factorio_version": "1.1", + "title": "Natural Evolution Graphics", + "author": "TheSAguy", + "contact": "vvwmisc@hotmail.com", + "homepage": "http://www.factorioforums.com/forum/viewtopic.php?f=91&t=13562&p", + "description": "Graphics Download for Natural Evolution Mods.", + "dependencies": ["base >= 1.1"] + +} \ No newline at end of file diff --git a/Natural_Evolution_Graphics/thumbnail.png b/Natural_Evolution_Graphics/thumbnail.png new file mode 100644 index 00000000..971ed74b Binary files /dev/null and b/Natural_Evolution_Graphics/thumbnail.png differ diff --git a/Natural_Evolution_Graphics_1.1.02.zip b/Natural_Evolution_Graphics_1.1.02.zip deleted file mode 100644 index a36f7705..00000000 Binary files a/Natural_Evolution_Graphics_1.1.02.zip and /dev/null differ diff --git a/Nearby-Ammo-Count/ammo-icon-white.png b/Nearby-Ammo-Count/ammo-icon-white.png new file mode 100644 index 00000000..065a421d Binary files /dev/null and b/Nearby-Ammo-Count/ammo-icon-white.png differ diff --git a/Nearby-Ammo-Count/control.lua b/Nearby-Ammo-Count/control.lua new file mode 100644 index 00000000..47b4d6c1 --- /dev/null +++ b/Nearby-Ammo-Count/control.lua @@ -0,0 +1,205 @@ + +local color_normal,color_low,color_critical + +local colorbase_r, colorbase_g, colorbase_b, colorbase_a +local norm_r, norm_g, norm_b, norm_a +local crit_r, crit_g, crit_b, crit_a + +local disp_mode +--local + +local draw_norm= {target_offset={.0,-.1},only_in_alt_mode=true,scale=1.125,scale_with_zoom=true,alignment="center"} +local draw_low= {target_offset={.0,-.1},only_in_alt_mode=true,scale=1.125,scale_with_zoom=true,alignment="center"} +local draw_crit= {target_offset={.0,-.1},only_in_alt_mode=true,scale=1.125,scale_with_zoom=true,alignment="center"} + +local draw_icon = {sprite="ammo-icon-white",use_target_orientation=false,render_layer=137} + +local friend_ref + +local _TURRET_INV = defines.inventory.turret_ammo +local _mag_size,_turret_mags = {},{} + +local function mag_size(m) + local x=_mag_size[m] + if x == nil then + x = game.item_prototypes[m].magazine_size + _mag_size[m] = x + end + return x +end + +local function turret_mags(t) + local x=_turret_mags[t] + if x == nil then + x = game.entity_prototypes[t].automated_ammo_count + _turret_mags[t] = x + end + return x +end + + +local drawparams={time_to_live=61,target_offset={.2,.375},forces={},only_in_alt_mode=true,scale=1.125,scale_with_zoom=true,alignment="right"} +local function do_turret(t) + local m,info + + if disp_mode=="shot" then + local i,s=t.get_inventory(_TURRET_INV) + local shots = 0 + m = 0 + for j=1,#i do + s=i[j] + if s.valid_for_read then + m = m + s.count + shots = shots + mag_size(s.name)--[[s.prototype.magazine_size--]] * (s.count-1) + s.ammo + end + end + if m == 0 then return + elseif m <= 1 then + info = draw_crit + elseif m < turret_mags(t.name) then --t.prototype.automated_ammo_count then + info = draw_low + else + info = draw_norm + end + info.text = shots + else + m = t.get_inventory(_TURRET_INV).get_item_count() or 0 + if m == 0 then return end + if disp_mode=="magazine" then + if m <= 1 then + info = draw_crit + elseif m < turret_mags(t.name) then --t.prototype.automated_ammo_count then + info = draw_low + else + info = draw_norm + end + info.text = m + else +-- m = m/(t.prototype.automated_ammo_count) + m = m/(turret_mags(t.name)) + if m>=1 then return end + + local color + + if disp_mode=="scaled-icon" then + local scale = 1/(1+m) + draw_icon.x_scale = scale + draw_icon.y_scale = scale + end + + m=m*2 + + + if m < 1 then + m=1-m + draw_icon.tint = {colorbase_r + m*crit_r, colorbase_g + m*crit_g, colorbase_b + m*crit_b, (colorbase_a + crit_a)*(m/2)} + else + m = m - 1 + draw_icon.tint = {colorbase_r + m*norm_r, colorbase_g + m*norm_g, colorbase_b + m*norm_b, (colorbase_a + norm_a)*(1-m)/2} + end + draw_icon.surface = t.surface + draw_icon.target = t + + rendering.draw_sprite(draw_icon) + return + end + end + + info.target=t + info.surface=t.surface + info.forces=friend_ref[t.force.name] + + rendering.draw_text(info) + +end + +local function team_views() + local f + friend_ref = {} + for m,u in pairs(game.forces) do + l = {u} + for _,t in pairs(game.forces) do + if u.get_friend(t) then l[#l+1] = t end + end + friend_ref[m]=l + end + --game.print(serpent.line(friend_ref)) +end + + +local function update() + local turrets = {} + for _,p in pairs(game.connected_players) do + for _,t in pairs(p.surface.find_entities_filtered{type="ammo-turret",position=p.position,radius=100}) do + turrets[t]=true + end + end + --game.print(serpent.line(turrets)) + if not friend_ref then team_views() end + for t in pairs(turrets) do + do_turret(t) + end +end + +local function set() + +-- color_normal = settings.global["nearby-ammo-color-normal"].value +-- color_low = settings.global["nearby-ammo-color-low"].value +-- color_critical = settings.global["nearby-ammo-color-critical"].value + + + draw_icon.render_layer = 139 --or 137 + + draw_norm.color = settings.global["nearby-ammo-color-normal"].value + draw_low.color = settings.global["nearby-ammo-color-low"].value + draw_crit.color = settings.global["nearby-ammo-color-critical"].value + + colorbase_r = draw_low.color.r + norm_r = draw_norm.color.r - colorbase_r + crit_r = draw_crit.color.r - colorbase_r + + colorbase_g = draw_low.color.g + norm_g = draw_norm.color.g - colorbase_g + crit_g = draw_crit.color.g - colorbase_g + + colorbase_b = draw_low.color.b + norm_b = draw_norm.color.b - colorbase_b + crit_b = draw_crit.color.b - colorbase_b + + colorbase_a = draw_low.color.a + norm_a = draw_norm.color.a - colorbase_a + crit_a = draw_crit.color.a - colorbase_a + + disp_mode = settings.global["nearby-ammo-display-mode"].value + + if disp_mode=="icon" then + draw_icon.x_scale = 1 + draw_icon.y_scale = 1 + end + + script.on_nth_tick(nil) + local t = math.floor(60/settings.global["nearby-ammo-update-per-second"].value) + script.on_nth_tick(t,update) + t=t+1 + draw_norm.time_to_live = t + draw_low.time_to_live = t + draw_crit.time_to_live = t + draw_icon.time_to_live = t + +end + + +local function initialize() + set() + team_views() +end + + + + +script.on_event(defines.events.on_runtime_mod_setting_changed, set) +script.on_event({defines.events.on_force_friends_changed, + defines.events.on_forces_merged, + }, team_views) +script.on_load(set) +script.on_init(set) diff --git a/Nearby-Ammo-Count/data.lua b/Nearby-Ammo-Count/data.lua new file mode 100644 index 00000000..76dd2b12 --- /dev/null +++ b/Nearby-Ammo-Count/data.lua @@ -0,0 +1,12 @@ +data:extend{ + { type = "sprite", name = "ammo-icon-white", + filename = "__Nearby-Ammo-Count__/ammo-icon-white.png", + priority = "extra-high",---no-scale", + width = 64, + height = 64, +-- apply_runtime_tint = true, + flags = {"gui-icon"}, +-- mipmap_count = 2, + scale = 0.5 + }, +} \ No newline at end of file diff --git a/Nearby-Ammo-Count/info.json b/Nearby-Ammo-Count/info.json new file mode 100644 index 00000000..bcef31d2 --- /dev/null +++ b/Nearby-Ammo-Count/info.json @@ -0,0 +1,12 @@ + +{ + "name": "Nearby-Ammo-Count", + "version": "1.1.0", + "title": "Nearby Ammo Count", + "author": "Loren1350", + "contact": "Schmendrick on the Factorio Forums", + "homepage": "", + "description": "Nearby turrets show ammo count in alt mode.", + "dependencies": ["base"], + "factorio_version": "1.1" +} diff --git a/Nearby-Ammo-Count/locale/en/stuff.cfg b/Nearby-Ammo-Count/locale/en/stuff.cfg new file mode 100644 index 00000000..c7872dd1 --- /dev/null +++ b/Nearby-Ammo-Count/locale/en/stuff.cfg @@ -0,0 +1,21 @@ +[mod-setting-name] +nearby-ammo-update-per-second=Update frequency +nearby-ammo-display-mode=Display mode +nearby-ammo-color-normal=Normal +nearby-ammo-color-low=Low +nearby-ammo-color-critical=Critical +nearby-ammo-over-altmode=Icons draw over alt-mode + +[mod-setting-description] +nearby-ammo-update-per-second=Number of times per second updates are performed +nearby-ammo-display-mode=What to display +nearby-ammo-color-normal=Normal color; set alpha (A) to zero to hide +nearby-ammo-color-low=Low ammo color +nearby-ammo-color-critical=Very low ammo color + + +[string-mod-setting] +nearby-ammo-display-mode-shot=Shot count +nearby-ammo-display-mode-magazine=Magazine count +nearby-ammo-display-mode-icon=Icon +nearby-ammo-display-mode-scaled-icon=Icon (scale with urgency) diff --git a/Nearby-Ammo-Count/settings.lua b/Nearby-Ammo-Count/settings.lua new file mode 100644 index 00000000..94c9e88c --- /dev/null +++ b/Nearby-Ammo-Count/settings.lua @@ -0,0 +1,30 @@ +data:extend{ + { type = "double-setting", name = "nearby-ammo-update-per-second", + setting_type = "runtime-global", order = "basic", + default_value = 4, + allowed_values = {1,4,10,20}, + }, + { type = "string-setting", name = "nearby-ammo-display-mode", + setting_type = "runtime-global", order = "basic", + default_value = "magazine", + allowed_values = {"shot","magazine","icon","scaled-icon"}, + }, + + { type = "color-setting", name = "nearby-ammo-color-normal", + setting_type = "runtime-global", order = "colors-1", + default_value = {0,255,0,180}, + }, + + { type = "color-setting", name = "nearby-ammo-color-low", + setting_type = "runtime-global", order = "colors-2", + default_value = {255,197,0,255}, +-- default_value = {255,131,0,255}, + hidden = true, + }, + { type = "color-setting", name = "nearby-ammo-color-critical", + setting_type = "runtime-global", order = "colors-3", + default_value = {255,57,47,255}, + hidden = true, + }, + +} \ No newline at end of file diff --git a/Nearby-Ammo-Count/thumbnail.png b/Nearby-Ammo-Count/thumbnail.png new file mode 100644 index 00000000..4488c8c6 Binary files /dev/null and b/Nearby-Ammo-Count/thumbnail.png differ diff --git a/NightBrightness_1.1.8/changelog.txt b/NightBrightness/changelog.txt similarity index 100% rename from NightBrightness_1.1.8/changelog.txt rename to NightBrightness/changelog.txt diff --git a/NightBrightness_1.1.8/control.lua b/NightBrightness/control.lua similarity index 100% rename from NightBrightness_1.1.8/control.lua rename to NightBrightness/control.lua diff --git a/NightBrightness_1.1.8/data-updates.lua b/NightBrightness/data-updates.lua similarity index 100% rename from NightBrightness_1.1.8/data-updates.lua rename to NightBrightness/data-updates.lua diff --git a/NightBrightness_1.1.8/graphics/black_night.png b/NightBrightness/graphics/black_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/black_night.png rename to NightBrightness/graphics/black_night.png diff --git a/NightBrightness_1.1.8/graphics/dark_127_night.png b/NightBrightness/graphics/dark_127_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/dark_127_night.png rename to NightBrightness/graphics/dark_127_night.png diff --git a/NightBrightness_1.1.8/graphics/dark_191_night.png b/NightBrightness/graphics/dark_191_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/dark_191_night.png rename to NightBrightness/graphics/dark_191_night.png diff --git a/NightBrightness_1.1.8/graphics/lut_black_night.png b/NightBrightness/graphics/lut_black_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/lut_black_night.png rename to NightBrightness/graphics/lut_black_night.png diff --git a/NightBrightness_1.1.8/graphics/lut_dark_127_night.png b/NightBrightness/graphics/lut_dark_127_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/lut_dark_127_night.png rename to NightBrightness/graphics/lut_dark_127_night.png diff --git a/NightBrightness_1.1.8/graphics/lut_dark_191_night.png b/NightBrightness/graphics/lut_dark_191_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/lut_dark_191_night.png rename to NightBrightness/graphics/lut_dark_191_night.png diff --git a/NightBrightness_1.1.8/graphics/lut_night.png b/NightBrightness/graphics/lut_night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/lut_night.png rename to NightBrightness/graphics/lut_night.png diff --git a/NightBrightness_1.1.8/graphics/night.png b/NightBrightness/graphics/night.png similarity index 100% rename from NightBrightness_1.1.8/graphics/night.png rename to NightBrightness/graphics/night.png diff --git a/NightBrightness_1.1.8/info.json b/NightBrightness/info.json similarity index 100% rename from NightBrightness_1.1.8/info.json rename to NightBrightness/info.json diff --git a/NightBrightness_1.1.8/locale/en/locale.cfg b/NightBrightness/locale/en/locale.cfg similarity index 100% rename from NightBrightness_1.1.8/locale/en/locale.cfg rename to NightBrightness/locale/en/locale.cfg diff --git a/NightBrightness_1.1.8/settings.lua b/NightBrightness/settings.lua similarity index 100% rename from NightBrightness_1.1.8/settings.lua rename to NightBrightness/settings.lua diff --git a/NightBrightness_1.1.8/thumbnail.png b/NightBrightness/thumbnail.png similarity index 100% rename from NightBrightness_1.1.8/thumbnail.png rename to NightBrightness/thumbnail.png diff --git a/OberNuclear_1.1.0/changelog.txt b/OberNuclear/changelog.txt similarity index 100% rename from OberNuclear_1.1.0/changelog.txt rename to OberNuclear/changelog.txt diff --git a/OberNuclear_1.1.0/data-final-fixes.lua b/OberNuclear/data-final-fixes.lua similarity index 100% rename from OberNuclear_1.1.0/data-final-fixes.lua rename to OberNuclear/data-final-fixes.lua diff --git a/OberNuclear_1.1.0/data.lua b/OberNuclear/data.lua similarity index 100% rename from OberNuclear_1.1.0/data.lua rename to OberNuclear/data.lua diff --git a/OberNuclear_1.1.0/graphics/blank128.png b/OberNuclear/graphics/blank128.png similarity index 100% rename from OberNuclear_1.1.0/graphics/blank128.png rename to OberNuclear/graphics/blank128.png diff --git a/OberNuclear_1.1.0/graphics/blank32.png b/OberNuclear/graphics/blank32.png similarity index 100% rename from OberNuclear_1.1.0/graphics/blank32.png rename to OberNuclear/graphics/blank32.png diff --git a/OberNuclear_1.1.0/graphics/high_temp_oil.png b/OberNuclear/graphics/high_temp_oil.png similarity index 100% rename from OberNuclear_1.1.0/graphics/high_temp_oil.png rename to OberNuclear/graphics/high_temp_oil.png diff --git a/OberNuclear_1.1.0/graphics/hr-nuclear-furnace-glow-1.png b/OberNuclear/graphics/hr-nuclear-furnace-glow-1.png similarity index 100% rename from OberNuclear_1.1.0/graphics/hr-nuclear-furnace-glow-1.png rename to OberNuclear/graphics/hr-nuclear-furnace-glow-1.png diff --git a/OberNuclear_1.1.0/graphics/hr-nuclear-furnace.png b/OberNuclear/graphics/hr-nuclear-furnace.png similarity index 100% rename from OberNuclear_1.1.0/graphics/hr-nuclear-furnace.png rename to OberNuclear/graphics/hr-nuclear-furnace.png diff --git a/OberNuclear_1.1.0/graphics/nuclear-furnace-base.png b/OberNuclear/graphics/nuclear-furnace-base.png similarity index 100% rename from OberNuclear_1.1.0/graphics/nuclear-furnace-base.png rename to OberNuclear/graphics/nuclear-furnace-base.png diff --git a/OberNuclear_1.1.0/graphics/nuclear-furnace-glow-1.png b/OberNuclear/graphics/nuclear-furnace-glow-1.png similarity index 100% rename from OberNuclear_1.1.0/graphics/nuclear-furnace-glow-1.png rename to OberNuclear/graphics/nuclear-furnace-glow-1.png diff --git a/OberNuclear_1.1.0/graphics/nuclear-furnace.png b/OberNuclear/graphics/nuclear-furnace.png similarity index 100% rename from OberNuclear_1.1.0/graphics/nuclear-furnace.png rename to OberNuclear/graphics/nuclear-furnace.png diff --git a/OberNuclear_1.1.0/graphics/nuclear_processing.png b/OberNuclear/graphics/nuclear_processing.png similarity index 100% rename from OberNuclear_1.1.0/graphics/nuclear_processing.png rename to OberNuclear/graphics/nuclear_processing.png diff --git a/OberNuclear_1.1.0/graphics/uranium_processing.png b/OberNuclear/graphics/uranium_processing.png similarity index 100% rename from OberNuclear_1.1.0/graphics/uranium_processing.png rename to OberNuclear/graphics/uranium_processing.png diff --git a/OberNuclear_1.1.0/info.json b/OberNuclear/info.json similarity index 100% rename from OberNuclear_1.1.0/info.json rename to OberNuclear/info.json diff --git a/OberNuclear_1.1.0/locale/en/base.cfg b/OberNuclear/locale/en/base.cfg similarity index 100% rename from OberNuclear_1.1.0/locale/en/base.cfg rename to OberNuclear/locale/en/base.cfg diff --git a/OberNuclear_1.1.0/nuclear-furnace.lua b/OberNuclear/nuclear-furnace.lua similarity index 100% rename from OberNuclear_1.1.0/nuclear-furnace.lua rename to OberNuclear/nuclear-furnace.lua diff --git a/OberNuclear_1.1.0/settings.lua b/OberNuclear/settings.lua similarity index 100% rename from OberNuclear_1.1.0/settings.lua rename to OberNuclear/settings.lua diff --git a/OberNuclear_1.1.0/thumbnail.png b/OberNuclear/thumbnail.png similarity index 100% rename from OberNuclear_1.1.0/thumbnail.png rename to OberNuclear/thumbnail.png diff --git a/Oberhaul_19.16.22/changelog.txt b/Oberhaul/changelog.txt similarity index 100% rename from Oberhaul_19.16.22/changelog.txt rename to Oberhaul/changelog.txt diff --git a/Oberhaul_19.16.22/data-final-fixes.lua b/Oberhaul/data-final-fixes.lua similarity index 100% rename from Oberhaul_19.16.22/data-final-fixes.lua rename to Oberhaul/data-final-fixes.lua diff --git a/Oberhaul_19.16.22/data-updates.lua b/Oberhaul/data-updates.lua similarity index 100% rename from Oberhaul_19.16.22/data-updates.lua rename to Oberhaul/data-updates.lua diff --git a/Oberhaul_19.16.22/data.lua b/Oberhaul/data.lua similarity index 100% rename from Oberhaul_19.16.22/data.lua rename to Oberhaul/data.lua diff --git a/Oberhaul_19.16.22/graphics/solar-panel-equipment-1.png b/Oberhaul/graphics/solar-panel-equipment-1.png similarity index 100% rename from Oberhaul_19.16.22/graphics/solar-panel-equipment-1.png rename to Oberhaul/graphics/solar-panel-equipment-1.png diff --git a/Oberhaul_19.16.22/graphics/solar-panel-equipment-2.png b/Oberhaul/graphics/solar-panel-equipment-2.png similarity index 100% rename from Oberhaul_19.16.22/graphics/solar-panel-equipment-2.png rename to Oberhaul/graphics/solar-panel-equipment-2.png diff --git a/Oberhaul_19.16.22/graphics/solar-panel-equipment-3.png b/Oberhaul/graphics/solar-panel-equipment-3.png similarity index 100% rename from Oberhaul_19.16.22/graphics/solar-panel-equipment-3.png rename to Oberhaul/graphics/solar-panel-equipment-3.png diff --git a/Oberhaul_19.16.22/graphics/solar-panel-equipment-4.png b/Oberhaul/graphics/solar-panel-equipment-4.png similarity index 100% rename from Oberhaul_19.16.22/graphics/solar-panel-equipment-4.png rename to Oberhaul/graphics/solar-panel-equipment-4.png diff --git a/Oberhaul_19.16.22/info.json b/Oberhaul/info.json similarity index 100% rename from Oberhaul_19.16.22/info.json rename to Oberhaul/info.json diff --git a/Oberhaul_19.16.22/locale/en/ScienceOberhaul.cfg b/Oberhaul/locale/en/ScienceOberhaul.cfg similarity index 100% rename from Oberhaul_19.16.22/locale/en/ScienceOberhaul.cfg rename to Oberhaul/locale/en/ScienceOberhaul.cfg diff --git a/Oberhaul_19.16.22/locale/ru/ScienceOberhaul.cfg b/Oberhaul/locale/ru/ScienceOberhaul.cfg similarity index 100% rename from Oberhaul_19.16.22/locale/ru/ScienceOberhaul.cfg rename to Oberhaul/locale/ru/ScienceOberhaul.cfg diff --git a/Oberhaul_19.16.22/prototypes/alloys.lua b/Oberhaul/prototypes/alloys.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/alloys.lua rename to Oberhaul/prototypes/alloys.lua diff --git a/Oberhaul_19.16.22/prototypes/angelsconcrete.lua b/Oberhaul/prototypes/angelsconcrete.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/angelsconcrete.lua rename to Oberhaul/prototypes/angelsconcrete.lua diff --git a/Oberhaul_19.16.22/prototypes/angelsrefining.lua b/Oberhaul/prototypes/angelsrefining.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/angelsrefining.lua rename to Oberhaul/prototypes/angelsrefining.lua diff --git a/Oberhaul_19.16.22/prototypes/angelssmelting.lua b/Oberhaul/prototypes/angelssmelting.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/angelssmelting.lua rename to Oberhaul/prototypes/angelssmelting.lua diff --git a/Oberhaul_19.16.22/prototypes/beltentities.lua b/Oberhaul/prototypes/beltentities.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/beltentities.lua rename to Oberhaul/prototypes/beltentities.lua diff --git a/Oberhaul_19.16.22/prototypes/beltrecipes.lua b/Oberhaul/prototypes/beltrecipes.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/beltrecipes.lua rename to Oberhaul/prototypes/beltrecipes.lua diff --git a/Oberhaul_19.16.22/prototypes/bobinserters_technology.lua b/Oberhaul/prototypes/bobinserters_technology.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/bobinserters_technology.lua rename to Oberhaul/prototypes/bobinserters_technology.lua diff --git a/Oberhaul_19.16.22/prototypes/bobplates/alloy_recipe.lua b/Oberhaul/prototypes/bobplates/alloy_recipe.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/bobplates/alloy_recipe.lua rename to Oberhaul/prototypes/bobplates/alloy_recipe.lua diff --git a/Oberhaul_19.16.22/prototypes/bobssolar.lua b/Oberhaul/prototypes/bobssolar.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/bobssolar.lua rename to Oberhaul/prototypes/bobssolar.lua diff --git a/Oberhaul_19.16.22/prototypes/bobtechs.lua b/Oberhaul/prototypes/bobtechs.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/bobtechs.lua rename to Oberhaul/prototypes/bobtechs.lua diff --git a/Oberhaul_19.16.22/prototypes/bobwarfare.lua b/Oberhaul/prototypes/bobwarfare.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/bobwarfare.lua rename to Oberhaul/prototypes/bobwarfare.lua diff --git a/Oberhaul_19.16.22/prototypes/compactpower.lua b/Oberhaul/prototypes/compactpower.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/compactpower.lua rename to Oberhaul/prototypes/compactpower.lua diff --git a/Oberhaul_19.16.22/prototypes/electrolyser.lua b/Oberhaul/prototypes/electrolyser.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/electrolyser.lua rename to Oberhaul/prototypes/electrolyser.lua diff --git a/Oberhaul_19.16.22/prototypes/gems.lua b/Oberhaul/prototypes/gems.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/gems.lua rename to Oberhaul/prototypes/gems.lua diff --git a/Oberhaul_19.16.22/prototypes/gems2.lua b/Oberhaul/prototypes/gems2.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/gems2.lua rename to Oberhaul/prototypes/gems2.lua diff --git a/Oberhaul_19.16.22/prototypes/logistics.lua b/Oberhaul/prototypes/logistics.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/logistics.lua rename to Oberhaul/prototypes/logistics.lua diff --git a/Oberhaul_19.16.22/prototypes/misc.lua b/Oberhaul/prototypes/misc.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/misc.lua rename to Oberhaul/prototypes/misc.lua diff --git a/Oberhaul_19.16.22/prototypes/modulecosts.lua b/Oberhaul/prototypes/modulecosts.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/modulecosts.lua rename to Oberhaul/prototypes/modulecosts.lua diff --git a/Oberhaul_19.16.22/prototypes/moduleeffects.lua b/Oberhaul/prototypes/moduleeffects.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/moduleeffects.lua rename to Oberhaul/prototypes/moduleeffects.lua diff --git a/Oberhaul_19.16.22/prototypes/moduleslots.lua b/Oberhaul/prototypes/moduleslots.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/moduleslots.lua rename to Oberhaul/prototypes/moduleslots.lua diff --git a/Oberhaul_19.16.22/prototypes/petrochemchange.lua b/Oberhaul/prototypes/petrochemchange.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/petrochemchange.lua rename to Oberhaul/prototypes/petrochemchange.lua diff --git a/Oberhaul_19.16.22/prototypes/scienceoberhaul.lua b/Oberhaul/prototypes/scienceoberhaul.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/scienceoberhaul.lua rename to Oberhaul/prototypes/scienceoberhaul.lua diff --git a/Oberhaul_19.16.22/prototypes/simplecordite.lua b/Oberhaul/prototypes/simplecordite.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/simplecordite.lua rename to Oberhaul/prototypes/simplecordite.lua diff --git a/Oberhaul_19.16.22/prototypes/trains.lua b/Oberhaul/prototypes/trains.lua similarity index 100% rename from Oberhaul_19.16.22/prototypes/trains.lua rename to Oberhaul/prototypes/trains.lua diff --git a/Oberhaul_19.16.22/settings.lua b/Oberhaul/settings.lua similarity index 100% rename from Oberhaul_19.16.22/settings.lua rename to Oberhaul/settings.lua diff --git a/Oberhaul_19.16.22/thumbnail.png b/Oberhaul/thumbnail.png similarity index 100% rename from Oberhaul_19.16.22/thumbnail.png rename to Oberhaul/thumbnail.png diff --git a/Oil_Based_Paint_1.0.6/changelog.txt b/Oil_Based_Paint/changelog.txt similarity index 100% rename from Oil_Based_Paint_1.0.6/changelog.txt rename to Oil_Based_Paint/changelog.txt diff --git a/Oil_Based_Paint_1.0.6/data-final-fixes.lua b/Oil_Based_Paint/data-final-fixes.lua similarity index 100% rename from Oil_Based_Paint_1.0.6/data-final-fixes.lua rename to Oil_Based_Paint/data-final-fixes.lua diff --git a/Oil_Based_Paint_1.0.6/graphics/entity/laser-turret/hr-base-mask.png b/Oil_Based_Paint/graphics/entity/laser-turret/hr-base-mask.png similarity index 100% rename from Oil_Based_Paint_1.0.6/graphics/entity/laser-turret/hr-base-mask.png rename to Oil_Based_Paint/graphics/entity/laser-turret/hr-base-mask.png diff --git a/Oil_Based_Paint_1.0.6/graphics/icons/spidertron-remote-mask.png b/Oil_Based_Paint/graphics/icons/spidertron-remote-mask.png similarity index 100% rename from Oil_Based_Paint_1.0.6/graphics/icons/spidertron-remote-mask.png rename to Oil_Based_Paint/graphics/icons/spidertron-remote-mask.png diff --git a/Oil_Based_Paint_1.0.6/graphics/icons/spidertron-remote.png b/Oil_Based_Paint/graphics/icons/spidertron-remote.png similarity index 100% rename from Oil_Based_Paint_1.0.6/graphics/icons/spidertron-remote.png rename to Oil_Based_Paint/graphics/icons/spidertron-remote.png diff --git a/Oil_Based_Paint_1.0.6/graphics/icons/technology.png b/Oil_Based_Paint/graphics/icons/technology.png similarity index 100% rename from Oil_Based_Paint_1.0.6/graphics/icons/technology.png rename to Oil_Based_Paint/graphics/icons/technology.png diff --git a/Oil_Based_Paint_1.0.6/info.json b/Oil_Based_Paint/info.json similarity index 100% rename from Oil_Based_Paint_1.0.6/info.json rename to Oil_Based_Paint/info.json diff --git a/Oil_Based_Paint_1.0.6/locale/en/paint.cfg b/Oil_Based_Paint/locale/en/paint.cfg similarity index 100% rename from Oil_Based_Paint_1.0.6/locale/en/paint.cfg rename to Oil_Based_Paint/locale/en/paint.cfg diff --git a/Oil_Based_Paint_1.0.6/thumbnail.png b/Oil_Based_Paint/thumbnail.png similarity index 100% rename from Oil_Based_Paint_1.0.6/thumbnail.png rename to Oil_Based_Paint/thumbnail.png diff --git a/OreRadar_0.0.3/changelog.txt b/OreRadar/changelog.txt similarity index 100% rename from OreRadar_0.0.3/changelog.txt rename to OreRadar/changelog.txt diff --git a/OreRadar_0.0.3/control.lua b/OreRadar/control.lua similarity index 100% rename from OreRadar_0.0.3/control.lua rename to OreRadar/control.lua diff --git a/OreRadar_0.0.3/data-final-fixes.lua b/OreRadar/data-final-fixes.lua similarity index 100% rename from OreRadar_0.0.3/data-final-fixes.lua rename to OreRadar/data-final-fixes.lua diff --git a/OreRadar_0.0.3/data.lua b/OreRadar/data.lua similarity index 100% rename from OreRadar_0.0.3/data.lua rename to OreRadar/data.lua diff --git a/OreRadar_0.0.3/graphics/technology/radar.png b/OreRadar/graphics/technology/radar.png similarity index 100% rename from OreRadar_0.0.3/graphics/technology/radar.png rename to OreRadar/graphics/technology/radar.png diff --git a/OreRadar_0.0.3/info.json b/OreRadar/info.json similarity index 100% rename from OreRadar_0.0.3/info.json rename to OreRadar/info.json diff --git a/OreRadar_0.0.3/locale/en/OreRadar.cfg b/OreRadar/locale/en/OreRadar.cfg similarity index 100% rename from OreRadar_0.0.3/locale/en/OreRadar.cfg rename to OreRadar/locale/en/OreRadar.cfg diff --git a/OreRadar_0.0.3/thumbnail.png b/OreRadar/thumbnail.png similarity index 100% rename from OreRadar_0.0.3/thumbnail.png rename to OreRadar/thumbnail.png diff --git a/OverloadedTrains_0.18.4/changelog.txt b/OverloadedTrains/changelog.txt similarity index 100% rename from OverloadedTrains_0.18.4/changelog.txt rename to OverloadedTrains/changelog.txt diff --git a/OverloadedTrains_0.18.4/control.lua b/OverloadedTrains/control.lua similarity index 100% rename from OverloadedTrains_0.18.4/control.lua rename to OverloadedTrains/control.lua diff --git a/OverloadedTrains_0.18.4/info.json b/OverloadedTrains/info.json similarity index 100% rename from OverloadedTrains_0.18.4/info.json rename to OverloadedTrains/info.json diff --git a/OverloadedTrains_0.18.4/locale/en/locale.cfg b/OverloadedTrains/locale/en/locale.cfg similarity index 100% rename from OverloadedTrains_0.18.4/locale/en/locale.cfg rename to OverloadedTrains/locale/en/locale.cfg diff --git a/OverloadedTrains_0.18.4/settings.lua b/OverloadedTrains/settings.lua similarity index 100% rename from OverloadedTrains_0.18.4/settings.lua rename to OverloadedTrains/settings.lua diff --git a/OverloadedTrains_0.18.4/thumbnail.png b/OverloadedTrains/thumbnail.png similarity index 100% rename from OverloadedTrains_0.18.4/thumbnail.png rename to OverloadedTrains/thumbnail.png diff --git a/P-U-M-P-S_1.1.67/changelog.txt b/P-U-M-P-S/changelog.txt similarity index 100% rename from P-U-M-P-S_1.1.67/changelog.txt rename to P-U-M-P-S/changelog.txt diff --git a/P-U-M-P-S_1.1.67/control.lua b/P-U-M-P-S/control.lua similarity index 100% rename from P-U-M-P-S_1.1.67/control.lua rename to P-U-M-P-S/control.lua diff --git a/P-U-M-P-S_1.1.67/core.lua b/P-U-M-P-S/core.lua similarity index 100% rename from P-U-M-P-S_1.1.67/core.lua rename to P-U-M-P-S/core.lua diff --git a/P-U-M-P-S_1.1.67/data-final-fixes.lua b/P-U-M-P-S/data-final-fixes.lua similarity index 100% rename from P-U-M-P-S_1.1.67/data-final-fixes.lua rename to P-U-M-P-S/data-final-fixes.lua diff --git a/P-U-M-P-S_1.1.67/data-updates.lua b/P-U-M-P-S/data-updates.lua similarity index 100% rename from P-U-M-P-S_1.1.67/data-updates.lua rename to P-U-M-P-S/data-updates.lua diff --git a/P-U-M-P-S_1.1.67/data.lua b/P-U-M-P-S/data.lua similarity index 100% rename from P-U-M-P-S_1.1.67/data.lua rename to P-U-M-P-S/data.lua diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_East-underwater.png b/P-U-M-P-S/graphics/entity/common/hr-offshore-pump_East-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_East-underwater.png rename to P-U-M-P-S/graphics/entity/common/hr-offshore-pump_East-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_North-underwater.png b/P-U-M-P-S/graphics/entity/common/hr-offshore-pump_North-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_North-underwater.png rename to P-U-M-P-S/graphics/entity/common/hr-offshore-pump_North-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_South-underwater.png b/P-U-M-P-S/graphics/entity/common/hr-offshore-pump_South-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_South-underwater.png rename to P-U-M-P-S/graphics/entity/common/hr-offshore-pump_South-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_West-underwater.png b/P-U-M-P-S/graphics/entity/common/hr-offshore-pump_West-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/hr-offshore-pump_West-underwater.png rename to P-U-M-P-S/graphics/entity/common/hr-offshore-pump_West-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_East-underwater.png b/P-U-M-P-S/graphics/entity/common/offshore-pump_East-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_East-underwater.png rename to P-U-M-P-S/graphics/entity/common/offshore-pump_East-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_North-underwater.png b/P-U-M-P-S/graphics/entity/common/offshore-pump_North-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_North-underwater.png rename to P-U-M-P-S/graphics/entity/common/offshore-pump_North-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_South-underwater.png b/P-U-M-P-S/graphics/entity/common/offshore-pump_South-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_South-underwater.png rename to P-U-M-P-S/graphics/entity/common/offshore-pump_South-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_West-underwater.png b/P-U-M-P-S/graphics/entity/common/offshore-pump_West-underwater.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/common/offshore-pump_West-underwater.png rename to P-U-M-P-S/graphics/entity/common/offshore-pump_West-underwater.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/hr-offshore-pump-0-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-0/offshore-pump-0-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-0/offshore-pump-0-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/hr-offshore-pump-2-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-2/offshore-pump-2-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-2/offshore-pump-2-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/hr-offshore-pump-3-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-3/offshore-pump-3-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-3/offshore-pump-3-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/hr-offshore-pump-4-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_East.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_East.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_East.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_East.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_North.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_North.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_North.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_North.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_South.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_South.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_South.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_South.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_West.png b/P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_West.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/offshore-pump-4/offshore-pump-4-mask_West.png rename to P-U-M-P-S/graphics/entity/offshore-pump-4/offshore-pump-4-mask_West.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack-horsehead.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack-horsehead.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack-horsehead.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack-horsehead.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_East-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_East-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_East-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_East-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_East-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_East-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_East-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_East-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_North-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_North-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_North-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_North-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_North-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_North-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_North-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_North-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_South-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_South-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_South-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_South-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_South-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_South-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_South-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_South-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_West-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_West-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_West-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_West-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_West-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_West-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/hr-water-pumpjack_West-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/hr-water-pumpjack_West-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/remnants/hr-water-pumpjack-remnants.png b/P-U-M-P-S/graphics/entity/water-pumpjack/remnants/hr-water-pumpjack-remnants.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/remnants/hr-water-pumpjack-remnants.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/remnants/hr-water-pumpjack-remnants.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/remnants/water-pumpjack-remnants.png b/P-U-M-P-S/graphics/entity/water-pumpjack/remnants/water-pumpjack-remnants.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/remnants/water-pumpjack-remnants.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/remnants/water-pumpjack-remnants.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack-horsehead.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack-horsehead.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack-horsehead.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack-horsehead.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_East-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_East-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_East-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_East-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_East-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_East-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_East-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_East-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_North-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_North-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_North-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_North-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_North-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_North-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_North-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_North-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_South-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_South-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_South-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_South-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_South-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_South-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_South-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_South-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_West-base.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_West-base.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_West-base.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_West-base.png diff --git a/P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_West-shadow.png b/P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_West-shadow.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/entity/water-pumpjack/water-pumpjack_West-shadow.png rename to P-U-M-P-S/graphics/entity/water-pumpjack/water-pumpjack_West-shadow.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-0.png b/P-U-M-P-S/graphics/icons/offshore-pump-0.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-0.png rename to P-U-M-P-S/graphics/icons/offshore-pump-0.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-1.png b/P-U-M-P-S/graphics/icons/offshore-pump-1.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-1.png rename to P-U-M-P-S/graphics/icons/offshore-pump-1.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-2.png b/P-U-M-P-S/graphics/icons/offshore-pump-2.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-2.png rename to P-U-M-P-S/graphics/icons/offshore-pump-2.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-3.png b/P-U-M-P-S/graphics/icons/offshore-pump-3.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-3.png rename to P-U-M-P-S/graphics/icons/offshore-pump-3.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-4.png b/P-U-M-P-S/graphics/icons/offshore-pump-4.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/offshore-pump-4.png rename to P-U-M-P-S/graphics/icons/offshore-pump-4.png diff --git a/P-U-M-P-S_1.1.67/graphics/icons/water-pumpjack.png b/P-U-M-P-S/graphics/icons/water-pumpjack.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/icons/water-pumpjack.png rename to P-U-M-P-S/graphics/icons/water-pumpjack.png diff --git a/P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-1.png b/P-U-M-P-S/graphics/technology/offshore-pump-1.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-1.png rename to P-U-M-P-S/graphics/technology/offshore-pump-1.png diff --git a/P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-2.png b/P-U-M-P-S/graphics/technology/offshore-pump-2.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-2.png rename to P-U-M-P-S/graphics/technology/offshore-pump-2.png diff --git a/P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-3.png b/P-U-M-P-S/graphics/technology/offshore-pump-3.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-3.png rename to P-U-M-P-S/graphics/technology/offshore-pump-3.png diff --git a/P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-4.png b/P-U-M-P-S/graphics/technology/offshore-pump-4.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/technology/offshore-pump-4.png rename to P-U-M-P-S/graphics/technology/offshore-pump-4.png diff --git a/P-U-M-P-S_1.1.67/graphics/technology/water-pumpjack.png b/P-U-M-P-S/graphics/technology/water-pumpjack.png similarity index 100% rename from P-U-M-P-S_1.1.67/graphics/technology/water-pumpjack.png rename to P-U-M-P-S/graphics/technology/water-pumpjack.png diff --git a/P-U-M-P-S_1.1.67/info.json b/P-U-M-P-S/info.json similarity index 100% rename from P-U-M-P-S_1.1.67/info.json rename to P-U-M-P-S/info.json diff --git a/P-U-M-P-S_1.1.67/locale/en/en.cfg b/P-U-M-P-S/locale/en/en.cfg similarity index 100% rename from P-U-M-P-S_1.1.67/locale/en/en.cfg rename to P-U-M-P-S/locale/en/en.cfg diff --git a/P-U-M-P-S_1.1.67/locale/locale.lua b/P-U-M-P-S/locale/locale.lua similarity index 100% rename from P-U-M-P-S_1.1.67/locale/locale.lua rename to P-U-M-P-S/locale/locale.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/entities.lua b/P-U-M-P-S/prototypes/entities.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/entities.lua rename to P-U-M-P-S/prototypes/entities.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/items.lua b/P-U-M-P-S/prototypes/items.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/items.lua rename to P-U-M-P-S/prototypes/items.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/override/angel-overrides.lua b/P-U-M-P-S/prototypes/override/angel-overrides.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/override/angel-overrides.lua rename to P-U-M-P-S/prototypes/override/angel-overrides.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/override/bob-overrides.lua b/P-U-M-P-S/prototypes/override/bob-overrides.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/override/bob-overrides.lua rename to P-U-M-P-S/prototypes/override/bob-overrides.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/override/bob-updates.lua b/P-U-M-P-S/prototypes/override/bob-updates.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/override/bob-updates.lua rename to P-U-M-P-S/prototypes/override/bob-updates.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/recipes.lua b/P-U-M-P-S/prototypes/recipes.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/recipes.lua rename to P-U-M-P-S/prototypes/recipes.lua diff --git a/P-U-M-P-S_1.1.67/prototypes/technology.lua b/P-U-M-P-S/prototypes/technology.lua similarity index 100% rename from P-U-M-P-S_1.1.67/prototypes/technology.lua rename to P-U-M-P-S/prototypes/technology.lua diff --git a/P-U-M-P-S_1.1.67/script/functions.lua b/P-U-M-P-S/script/functions.lua similarity index 100% rename from P-U-M-P-S_1.1.67/script/functions.lua rename to P-U-M-P-S/script/functions.lua diff --git a/P-U-M-P-S_1.1.67/script/init.lua b/P-U-M-P-S/script/init.lua similarity index 100% rename from P-U-M-P-S_1.1.67/script/init.lua rename to P-U-M-P-S/script/init.lua diff --git a/P-U-M-P-S_1.1.67/settings.lua b/P-U-M-P-S/settings.lua similarity index 100% rename from P-U-M-P-S_1.1.67/settings.lua rename to P-U-M-P-S/settings.lua diff --git a/P-U-M-P-S_1.1.67/thumbnail.png b/P-U-M-P-S/thumbnail.png similarity index 100% rename from P-U-M-P-S_1.1.67/thumbnail.png rename to P-U-M-P-S/thumbnail.png diff --git a/P-U-M-P-S_1.1.67/utils/animation.lua b/P-U-M-P-S/utils/animation.lua similarity index 100% rename from P-U-M-P-S_1.1.67/utils/animation.lua rename to P-U-M-P-S/utils/animation.lua diff --git a/P-U-M-P-S_1.1.67/utils/lib.lua b/P-U-M-P-S/utils/lib.lua similarity index 100% rename from P-U-M-P-S_1.1.67/utils/lib.lua rename to P-U-M-P-S/utils/lib.lua diff --git a/P-U-M-P-S_1.1.67/utils/pumps.lua b/P-U-M-P-S/utils/pumps.lua similarity index 100% rename from P-U-M-P-S_1.1.67/utils/pumps.lua rename to P-U-M-P-S/utils/pumps.lua diff --git a/PCPRedux_1.0.4/changelog.txt b/PCPRedux/changelog.txt similarity index 100% rename from PCPRedux_1.0.4/changelog.txt rename to PCPRedux/changelog.txt diff --git a/PCPRedux_1.0.4/data-final-fixes.lua b/PCPRedux/data-final-fixes.lua similarity index 100% rename from PCPRedux_1.0.4/data-final-fixes.lua rename to PCPRedux/data-final-fixes.lua diff --git a/PCPRedux_1.0.4/data-updates.lua b/PCPRedux/data-updates.lua similarity index 100% rename from PCPRedux_1.0.4/data-updates.lua rename to PCPRedux/data-updates.lua diff --git a/PCPRedux_1.0.4/data.lua b/PCPRedux/data.lua similarity index 100% rename from PCPRedux_1.0.4/data.lua rename to PCPRedux/data.lua diff --git a/PCPRedux_1.0.4/graphics/icons/bacterial-mother-1.png b/PCPRedux/graphics/icons/bacterial-mother-1.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/bacterial-mother-1.png rename to PCPRedux/graphics/icons/bacterial-mother-1.png diff --git a/PCPRedux_1.0.4/graphics/icons/bacterial-mother-2.png b/PCPRedux/graphics/icons/bacterial-mother-2.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/bacterial-mother-2.png rename to PCPRedux/graphics/icons/bacterial-mother-2.png diff --git a/PCPRedux_1.0.4/graphics/icons/catalyst-metal-cyan.png b/PCPRedux/graphics/icons/catalyst-metal-cyan.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/catalyst-metal-cyan.png rename to PCPRedux/graphics/icons/catalyst-metal-cyan.png diff --git a/PCPRedux_1.0.4/graphics/icons/flask.png b/PCPRedux/graphics/icons/flask.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/flask.png rename to PCPRedux/graphics/icons/flask.png diff --git a/PCPRedux_1.0.4/graphics/icons/liquid-rubber-masterbatch.png b/PCPRedux/graphics/icons/liquid-rubber-masterbatch.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/liquid-rubber-masterbatch.png rename to PCPRedux/graphics/icons/liquid-rubber-masterbatch.png diff --git a/PCPRedux_1.0.4/graphics/icons/liquid-rubber-pre.png b/PCPRedux/graphics/icons/liquid-rubber-pre.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/liquid-rubber-pre.png rename to PCPRedux/graphics/icons/liquid-rubber-pre.png diff --git a/PCPRedux_1.0.4/graphics/icons/poly-lactic-acid-plastic.png b/PCPRedux/graphics/icons/poly-lactic-acid-plastic.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/poly-lactic-acid-plastic.png rename to PCPRedux/graphics/icons/poly-lactic-acid-plastic.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/Isoprene.png b/PCPRedux/graphics/icons/raw/Isoprene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/Isoprene.png rename to PCPRedux/graphics/icons/raw/Isoprene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/acetone-cyanohydrin.png b/PCPRedux/graphics/icons/raw/acetone-cyanohydrin.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/acetone-cyanohydrin.png rename to PCPRedux/graphics/icons/raw/acetone-cyanohydrin.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/acetylene.png b/PCPRedux/graphics/icons/raw/acetylene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/acetylene.png rename to PCPRedux/graphics/icons/raw/acetylene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/acrylonitrile.png b/PCPRedux/graphics/icons/raw/acrylonitrile.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/acrylonitrile.png rename to PCPRedux/graphics/icons/raw/acrylonitrile.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/chloroprene.png b/PCPRedux/graphics/icons/raw/chloroprene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/chloroprene.png rename to PCPRedux/graphics/icons/raw/chloroprene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/dichlorobutene.png b/PCPRedux/graphics/icons/raw/dichlorobutene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/dichlorobutene.png rename to PCPRedux/graphics/icons/raw/dichlorobutene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/hydrogen-cyanide.png b/PCPRedux/graphics/icons/raw/hydrogen-cyanide.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/hydrogen-cyanide.png rename to PCPRedux/graphics/icons/raw/hydrogen-cyanide.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/isobutylene.png b/PCPRedux/graphics/icons/raw/isobutylene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/isobutylene.png rename to PCPRedux/graphics/icons/raw/isobutylene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/lactic-acid.png b/PCPRedux/graphics/icons/raw/lactic-acid.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/lactic-acid.png rename to PCPRedux/graphics/icons/raw/lactic-acid.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/methyl-methacrylate.png b/PCPRedux/graphics/icons/raw/methyl-methacrylate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/methyl-methacrylate.png rename to PCPRedux/graphics/icons/raw/methyl-methacrylate.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/nitrous-oxide.png b/PCPRedux/graphics/icons/raw/nitrous-oxide.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/nitrous-oxide.png rename to PCPRedux/graphics/icons/raw/nitrous-oxide.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/vinyl-acetylene.png b/PCPRedux/graphics/icons/raw/vinyl-acetylene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/vinyl-acetylene.png rename to PCPRedux/graphics/icons/raw/vinyl-acetylene.png diff --git a/PCPRedux_1.0.4/graphics/icons/raw/vinyl-chloride.png b/PCPRedux/graphics/icons/raw/vinyl-chloride.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/raw/vinyl-chloride.png rename to PCPRedux/graphics/icons/raw/vinyl-chloride.png diff --git a/PCPRedux_1.0.4/graphics/icons/roll-blank.png b/PCPRedux/graphics/icons/roll-blank.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/roll-blank.png rename to PCPRedux/graphics/icons/roll-blank.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-acrylonitrile-butadiene-styrene.png b/PCPRedux/graphics/icons/solid-acrylonitrile-butadiene-styrene.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-acrylonitrile-butadiene-styrene.png rename to PCPRedux/graphics/icons/solid-acrylonitrile-butadiene-styrene.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-ammonium-sulphate.png b/PCPRedux/graphics/icons/solid-ammonium-sulphate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-ammonium-sulphate.png rename to PCPRedux/graphics/icons/solid-ammonium-sulphate.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-polycarbonate.png b/PCPRedux/graphics/icons/solid-polycarbonate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-polycarbonate.png rename to PCPRedux/graphics/icons/solid-polycarbonate.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-polymethyl-methacrylate.png b/PCPRedux/graphics/icons/solid-polymethyl-methacrylate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-polymethyl-methacrylate.png rename to PCPRedux/graphics/icons/solid-polymethyl-methacrylate.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-polyvinyl-chloride.png b/PCPRedux/graphics/icons/solid-polyvinyl-chloride.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-polyvinyl-chloride.png rename to PCPRedux/graphics/icons/solid-polyvinyl-chloride.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-additive.png b/PCPRedux/graphics/icons/solid-rubber-additive.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-additive.png rename to PCPRedux/graphics/icons/solid-rubber-additive.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-block.png b/PCPRedux/graphics/icons/solid-rubber-block.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-block.png rename to PCPRedux/graphics/icons/solid-rubber-block.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-pellet.png b/PCPRedux/graphics/icons/solid-rubber-pellet.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-pellet.png rename to PCPRedux/graphics/icons/solid-rubber-pellet.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-powder.png b/PCPRedux/graphics/icons/solid-rubber-powder.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-powder.png rename to PCPRedux/graphics/icons/solid-rubber-powder.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-slab.png b/PCPRedux/graphics/icons/solid-rubber-slab.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-slab.png rename to PCPRedux/graphics/icons/solid-rubber-slab.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-rubber-waste.png b/PCPRedux/graphics/icons/solid-rubber-waste.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-rubber-waste.png rename to PCPRedux/graphics/icons/solid-rubber-waste.png diff --git a/PCPRedux_1.0.4/graphics/icons/solid-sodium-nitrate.png b/PCPRedux/graphics/icons/solid-sodium-nitrate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/solid-sodium-nitrate.png rename to PCPRedux/graphics/icons/solid-sodium-nitrate.png diff --git a/PCPRedux_1.0.4/graphics/icons/technology-nitrous-oxide.png b/PCPRedux/graphics/icons/technology-nitrous-oxide.png similarity index 100% rename from PCPRedux_1.0.4/graphics/icons/technology-nitrous-oxide.png rename to PCPRedux/graphics/icons/technology-nitrous-oxide.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-corner-left.png b/PCPRedux/graphics/plastic-wall/hr-wall-corner-left.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-corner-left.png rename to PCPRedux/graphics/plastic-wall/hr-wall-corner-left.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-corner-right.png b/PCPRedux/graphics/plastic-wall/hr-wall-corner-right.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-corner-right.png rename to PCPRedux/graphics/plastic-wall/hr-wall-corner-right.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-ending-left.png b/PCPRedux/graphics/plastic-wall/hr-wall-ending-left.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-ending-left.png rename to PCPRedux/graphics/plastic-wall/hr-wall-ending-left.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-ending-right.png b/PCPRedux/graphics/plastic-wall/hr-wall-ending-right.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-ending-right.png rename to PCPRedux/graphics/plastic-wall/hr-wall-ending-right.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-filling.png b/PCPRedux/graphics/plastic-wall/hr-wall-filling.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-filling.png rename to PCPRedux/graphics/plastic-wall/hr-wall-filling.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-gate.png b/PCPRedux/graphics/plastic-wall/hr-wall-gate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-gate.png rename to PCPRedux/graphics/plastic-wall/hr-wall-gate.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-horizontal.png b/PCPRedux/graphics/plastic-wall/hr-wall-horizontal.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-horizontal.png rename to PCPRedux/graphics/plastic-wall/hr-wall-horizontal.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-patch.png b/PCPRedux/graphics/plastic-wall/hr-wall-patch.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-patch.png rename to PCPRedux/graphics/plastic-wall/hr-wall-patch.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-single.png b/PCPRedux/graphics/plastic-wall/hr-wall-single.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-single.png rename to PCPRedux/graphics/plastic-wall/hr-wall-single.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-t.png b/PCPRedux/graphics/plastic-wall/hr-wall-t.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-t.png rename to PCPRedux/graphics/plastic-wall/hr-wall-t.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-vertical.png b/PCPRedux/graphics/plastic-wall/hr-wall-vertical.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/hr-wall-vertical.png rename to PCPRedux/graphics/plastic-wall/hr-wall-vertical.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-corner-left.png b/PCPRedux/graphics/plastic-wall/wall-corner-left.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-corner-left.png rename to PCPRedux/graphics/plastic-wall/wall-corner-left.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-corner-right.png b/PCPRedux/graphics/plastic-wall/wall-corner-right.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-corner-right.png rename to PCPRedux/graphics/plastic-wall/wall-corner-right.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-ending-left.png b/PCPRedux/graphics/plastic-wall/wall-ending-left.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-ending-left.png rename to PCPRedux/graphics/plastic-wall/wall-ending-left.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-ending-right.png b/PCPRedux/graphics/plastic-wall/wall-ending-right.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-ending-right.png rename to PCPRedux/graphics/plastic-wall/wall-ending-right.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-filling.png b/PCPRedux/graphics/plastic-wall/wall-filling.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-filling.png rename to PCPRedux/graphics/plastic-wall/wall-filling.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-gate.png b/PCPRedux/graphics/plastic-wall/wall-gate.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-gate.png rename to PCPRedux/graphics/plastic-wall/wall-gate.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-horizontal.png b/PCPRedux/graphics/plastic-wall/wall-horizontal.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-horizontal.png rename to PCPRedux/graphics/plastic-wall/wall-horizontal.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-patch.png b/PCPRedux/graphics/plastic-wall/wall-patch.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-patch.png rename to PCPRedux/graphics/plastic-wall/wall-patch.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-single.png b/PCPRedux/graphics/plastic-wall/wall-single.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-single.png rename to PCPRedux/graphics/plastic-wall/wall-single.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-t.png b/PCPRedux/graphics/plastic-wall/wall-t.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-t.png rename to PCPRedux/graphics/plastic-wall/wall-t.png diff --git a/PCPRedux_1.0.4/graphics/plastic-wall/wall-vertical.png b/PCPRedux/graphics/plastic-wall/wall-vertical.png similarity index 100% rename from PCPRedux_1.0.4/graphics/plastic-wall/wall-vertical.png rename to PCPRedux/graphics/plastic-wall/wall-vertical.png diff --git a/PCPRedux_1.0.4/info.json b/PCPRedux/info.json similarity index 100% rename from PCPRedux_1.0.4/info.json rename to PCPRedux/info.json diff --git a/PCPRedux_1.0.4/locale/en/PCP.cfg b/PCPRedux/locale/en/PCP.cfg similarity index 100% rename from PCPRedux_1.0.4/locale/en/PCP.cfg rename to PCPRedux/locale/en/PCP.cfg diff --git a/PCPRedux_1.0.4/locale/ru/PCP.cfg b/PCPRedux/locale/ru/PCP.cfg similarity index 100% rename from PCPRedux_1.0.4/locale/ru/PCP.cfg rename to PCPRedux/locale/ru/PCP.cfg diff --git a/PCPRedux_1.0.4/prototypes/bobs-glass-OV.lua b/PCPRedux/prototypes/bobs-glass-OV.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/bobs-glass-OV.lua rename to PCPRedux/prototypes/bobs-glass-OV.lua diff --git a/PCPRedux_1.0.4/prototypes/colorLib.lua b/PCPRedux/prototypes/colorLib.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/colorLib.lua rename to PCPRedux/prototypes/colorLib.lua diff --git a/PCPRedux_1.0.4/prototypes/flask.lua b/PCPRedux/prototypes/flask.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/flask.lua rename to PCPRedux/prototypes/flask.lua diff --git a/PCPRedux_1.0.4/prototypes/fluids.lua b/PCPRedux/prototypes/fluids.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/fluids.lua rename to PCPRedux/prototypes/fluids.lua diff --git a/PCPRedux_1.0.4/prototypes/icon-functions.lua b/PCPRedux/prototypes/icon-functions.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/icon-functions.lua rename to PCPRedux/prototypes/icon-functions.lua diff --git a/PCPRedux_1.0.4/prototypes/items.lua b/PCPRedux/prototypes/items.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/items.lua rename to PCPRedux/prototypes/items.lua diff --git a/PCPRedux_1.0.4/prototypes/plas-wall.lua b/PCPRedux/prototypes/plas-wall.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/plas-wall.lua rename to PCPRedux/prototypes/plas-wall.lua diff --git a/PCPRedux_1.0.4/prototypes/polylactic-acid.lua b/PCPRedux/prototypes/polylactic-acid.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/polylactic-acid.lua rename to PCPRedux/prototypes/polylactic-acid.lua diff --git a/PCPRedux_1.0.4/prototypes/recipes.lua b/PCPRedux/prototypes/recipes.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/recipes.lua rename to PCPRedux/prototypes/recipes.lua diff --git a/PCPRedux_1.0.4/prototypes/rubber-extended.lua b/PCPRedux/prototypes/rubber-extended.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/rubber-extended.lua rename to PCPRedux/prototypes/rubber-extended.lua diff --git a/PCPRedux_1.0.4/prototypes/technology.lua b/PCPRedux/prototypes/technology.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/technology.lua rename to PCPRedux/prototypes/technology.lua diff --git a/PCPRedux_1.0.4/prototypes/updates.lua b/PCPRedux/prototypes/updates.lua similarity index 100% rename from PCPRedux_1.0.4/prototypes/updates.lua rename to PCPRedux/prototypes/updates.lua diff --git a/PCPRedux_1.0.4/settings.lua b/PCPRedux/settings.lua similarity index 100% rename from PCPRedux_1.0.4/settings.lua rename to PCPRedux/settings.lua diff --git a/PCPRedux_1.0.4/thumbnail.png b/PCPRedux/thumbnail.png similarity index 100% rename from PCPRedux_1.0.4/thumbnail.png rename to PCPRedux/thumbnail.png diff --git a/PMRPGsystem_9.0.1/changelog.txt b/PMRPGsystem/changelog.txt similarity index 100% rename from PMRPGsystem_9.0.1/changelog.txt rename to PMRPGsystem/changelog.txt diff --git a/PMRPGsystem_9.0.1/control.lua b/PMRPGsystem/control.lua similarity index 100% rename from PMRPGsystem_9.0.1/control.lua rename to PMRPGsystem/control.lua diff --git a/PMRPGsystem_9.0.1/controls.lua b/PMRPGsystem/controls.lua similarity index 100% rename from PMRPGsystem_9.0.1/controls.lua rename to PMRPGsystem/controls.lua diff --git a/PMRPGsystem_9.0.1/data-updates.lua b/PMRPGsystem/data-updates.lua similarity index 100% rename from PMRPGsystem_9.0.1/data-updates.lua rename to PMRPGsystem/data-updates.lua diff --git a/PMRPGsystem_9.0.1/data.lua b/PMRPGsystem/data.lua similarity index 100% rename from PMRPGsystem_9.0.1/data.lua rename to PMRPGsystem/data.lua diff --git a/PMRPGsystem_9.0.1/graphics/LV_Armor_Bonus_icon.png b/PMRPGsystem/graphics/LV_Armor_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Armor_Bonus_icon.png rename to PMRPGsystem/graphics/LV_Armor_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Craft_Speed_icon.png b/PMRPGsystem/graphics/LV_Craft_Speed_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Craft_Speed_icon.png rename to PMRPGsystem/graphics/LV_Craft_Speed_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Damage_Bonus_icon.png b/PMRPGsystem/graphics/LV_Damage_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Damage_Bonus_icon.png rename to PMRPGsystem/graphics/LV_Damage_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Damage_Critical_icon.png b/PMRPGsystem/graphics/LV_Damage_Critical_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Damage_Critical_icon.png rename to PMRPGsystem/graphics/LV_Damage_Critical_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Health_Bonus_icon.png b/PMRPGsystem/graphics/LV_Health_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Health_Bonus_icon.png rename to PMRPGsystem/graphics/LV_Health_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Info_icon1.png b/PMRPGsystem/graphics/LV_Info_icon1.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Info_icon1.png rename to PMRPGsystem/graphics/LV_Info_icon1.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_InvTrash_Bonus_icon.png b/PMRPGsystem/graphics/LV_InvTrash_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_InvTrash_Bonus_icon.png rename to PMRPGsystem/graphics/LV_InvTrash_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Inv_Bonus_icon.png b/PMRPGsystem/graphics/LV_Inv_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Inv_Bonus_icon.png rename to PMRPGsystem/graphics/LV_Inv_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Mining_Speed_icon.png b/PMRPGsystem/graphics/LV_Mining_Speed_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Mining_Speed_icon.png rename to PMRPGsystem/graphics/LV_Mining_Speed_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Reach_Dist_icon.png b/PMRPGsystem/graphics/LV_Reach_Dist_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Reach_Dist_icon.png rename to PMRPGsystem/graphics/LV_Reach_Dist_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Robot_Bonus_icon.png b/PMRPGsystem/graphics/LV_Robot_Bonus_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Robot_Bonus_icon.png rename to PMRPGsystem/graphics/LV_Robot_Bonus_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/LV_Run_Speed_icon.png b/PMRPGsystem/graphics/LV_Run_Speed_icon.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/LV_Run_Speed_icon.png rename to PMRPGsystem/graphics/LV_Run_Speed_icon.png diff --git a/PMRPGsystem_9.0.1/graphics/rpg_portrait.png b/PMRPGsystem/graphics/rpg_portrait.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/rpg_portrait.png rename to PMRPGsystem/graphics/rpg_portrait.png diff --git a/PMRPGsystem_9.0.1/graphics/rpg_portrait_bg.png b/PMRPGsystem/graphics/rpg_portrait_bg.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/rpg_portrait_bg.png rename to PMRPGsystem/graphics/rpg_portrait_bg.png diff --git a/PMRPGsystem_9.0.1/graphics/rpg_portrait_mask.png b/PMRPGsystem/graphics/rpg_portrait_mask.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/rpg_portrait_mask.png rename to PMRPGsystem/graphics/rpg_portrait_mask.png diff --git a/PMRPGsystem_9.0.1/graphics/speed_potion.png b/PMRPGsystem/graphics/speed_potion.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/speed_potion.png rename to PMRPGsystem/graphics/speed_potion.png diff --git a/PMRPGsystem_9.0.1/graphics/xp_potion_1.png b/PMRPGsystem/graphics/xp_potion_1.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/xp_potion_1.png rename to PMRPGsystem/graphics/xp_potion_1.png diff --git a/PMRPGsystem_9.0.1/graphics/xp_potion_2.png b/PMRPGsystem/graphics/xp_potion_2.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/xp_potion_2.png rename to PMRPGsystem/graphics/xp_potion_2.png diff --git a/PMRPGsystem_9.0.1/graphics/xp_potion_up.png b/PMRPGsystem/graphics/xp_potion_up.png similarity index 100% rename from PMRPGsystem_9.0.1/graphics/xp_potion_up.png rename to PMRPGsystem/graphics/xp_potion_up.png diff --git a/PMRPGsystem_9.0.1/info.json b/PMRPGsystem/info.json similarity index 100% rename from PMRPGsystem_9.0.1/info.json rename to PMRPGsystem/info.json diff --git a/PMRPGsystem_9.0.1/locale/de/de.cfg b/PMRPGsystem/locale/de/de.cfg similarity index 100% rename from PMRPGsystem_9.0.1/locale/de/de.cfg rename to PMRPGsystem/locale/de/de.cfg diff --git a/PMRPGsystem_9.0.1/locale/en/config.cfg b/PMRPGsystem/locale/en/config.cfg similarity index 100% rename from PMRPGsystem_9.0.1/locale/en/config.cfg rename to PMRPGsystem/locale/en/config.cfg diff --git a/PMRPGsystem_9.0.1/locale/pt-BR/pt-BR.cfg b/PMRPGsystem/locale/pt-BR/pt-BR.cfg similarity index 100% rename from PMRPGsystem_9.0.1/locale/pt-BR/pt-BR.cfg rename to PMRPGsystem/locale/pt-BR/pt-BR.cfg diff --git a/PMRPGsystem_9.0.1/locale/ru/config.cfg b/PMRPGsystem/locale/ru/config.cfg similarity index 100% rename from PMRPGsystem_9.0.1/locale/ru/config.cfg rename to PMRPGsystem/locale/ru/config.cfg diff --git a/PMRPGsystem_9.0.1/particles.lua b/PMRPGsystem/particles.lua similarity index 100% rename from PMRPGsystem_9.0.1/particles.lua rename to PMRPGsystem/particles.lua diff --git a/PMRPGsystem_9.0.1/prototypes/fonts.lua b/PMRPGsystem/prototypes/fonts.lua similarity index 100% rename from PMRPGsystem_9.0.1/prototypes/fonts.lua rename to PMRPGsystem/prototypes/fonts.lua diff --git a/PMRPGsystem_9.0.1/prototypes/sprites.lua b/PMRPGsystem/prototypes/sprites.lua similarity index 100% rename from PMRPGsystem_9.0.1/prototypes/sprites.lua rename to PMRPGsystem/prototypes/sprites.lua diff --git a/PMRPGsystem_9.0.1/prototypes/test.lua b/PMRPGsystem/prototypes/test.lua similarity index 100% rename from PMRPGsystem_9.0.1/prototypes/test.lua rename to PMRPGsystem/prototypes/test.lua diff --git a/PMRPGsystem_9.0.1/settings.lua b/PMRPGsystem/settings.lua similarity index 100% rename from PMRPGsystem_9.0.1/settings.lua rename to PMRPGsystem/settings.lua diff --git a/PMRPGsystem_9.0.1/sound/level_up.ogg b/PMRPGsystem/sound/level_up.ogg similarity index 100% rename from PMRPGsystem_9.0.1/sound/level_up.ogg rename to PMRPGsystem/sound/level_up.ogg diff --git a/PMRPGsystem_9.0.1/thumbnail.png b/PMRPGsystem/thumbnail.png similarity index 100% rename from PMRPGsystem_9.0.1/thumbnail.png rename to PMRPGsystem/thumbnail.png diff --git a/ParanoidalLocale/info.json b/ParanoidalLocale/info.json index a394babe..94f31c44 100644 --- a/ParanoidalLocale/info.json +++ b/ParanoidalLocale/info.json @@ -1,6 +1,6 @@ { "name": "ParanoidalLocale", - "version": "1.9.0", + "version": "1.8.3", "factorio_version": "1.1", "title": "PARANOIDAL Locale", "author": "SKProCH", @@ -149,21 +149,6 @@ "? zzzparanoidal", "? PMRPGsystem", "? mining-patch-planner", - "? fluid_permutations", - "? RecipeBook", - "? DragonIndustries", - "? combat-mechanics-overhaul", - "? alien-biomes-settings", - "? Natural_Evolution_Enemies", - "? nixie-tubes", - "? StatsGui-MovementSpeed", - "? RampantEvolution", - "? StatsGui-HandcraftTimer", - "? factoryplanner", - "? PipeVisualizer", - "? blueprint-sandboxes", - "? PipeMeterWLK", - "? StatsGui", - "? Bioluminescence" + "? fluid_permutations" ] } \ No newline at end of file diff --git a/PickerAtheneum_1.2.5/acknowledgements.json b/PickerAtheneum/acknowledgements.json similarity index 100% rename from PickerAtheneum_1.2.5/acknowledgements.json rename to PickerAtheneum/acknowledgements.json diff --git a/PickerAtheneum_1.2.5/changelog.txt b/PickerAtheneum/changelog.txt similarity index 100% rename from PickerAtheneum_1.2.5/changelog.txt rename to PickerAtheneum/changelog.txt diff --git a/PickerAtheneum_1.2.5/control.lua b/PickerAtheneum/control.lua similarity index 100% rename from PickerAtheneum_1.2.5/control.lua rename to PickerAtheneum/control.lua diff --git a/PickerAtheneum_1.2.5/data-final-fixes.lua b/PickerAtheneum/data-final-fixes.lua similarity index 100% rename from PickerAtheneum_1.2.5/data-final-fixes.lua rename to PickerAtheneum/data-final-fixes.lua diff --git a/PickerAtheneum_1.2.5/data.lua b/PickerAtheneum/data.lua similarity index 100% rename from PickerAtheneum_1.2.5/data.lua rename to PickerAtheneum/data.lua diff --git a/PickerAtheneum_1.2.5/graphics/arrow_bar.png b/PickerAtheneum/graphics/arrow_bar.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/arrow_bar.png rename to PickerAtheneum/graphics/arrow_bar.png diff --git a/PickerAtheneum_1.2.5/graphics/arrow_left.png b/PickerAtheneum/graphics/arrow_left.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/arrow_left.png rename to PickerAtheneum/graphics/arrow_left.png diff --git a/PickerAtheneum_1.2.5/graphics/cancel.png b/PickerAtheneum/graphics/cancel.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/cancel.png rename to PickerAtheneum/graphics/cancel.png diff --git a/PickerAtheneum_1.2.5/graphics/close.png b/PickerAtheneum/graphics/close.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/close.png rename to PickerAtheneum/graphics/close.png diff --git a/PickerAtheneum_1.2.5/graphics/gravestone.png b/PickerAtheneum/graphics/gravestone.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gravestone.png rename to PickerAtheneum/graphics/gravestone.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/big-buttons.png b/PickerAtheneum/graphics/gui/big-buttons.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/big-buttons.png rename to PickerAtheneum/graphics/gui/big-buttons.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/black.png b/PickerAtheneum/graphics/gui/black.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/black.png rename to PickerAtheneum/graphics/gui/black.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/cheat-dropdown.png b/PickerAtheneum/graphics/gui/cheat-dropdown.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/cheat-dropdown.png rename to PickerAtheneum/graphics/gui/cheat-dropdown.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/frame-button-icons.png b/PickerAtheneum/graphics/gui/frame-button-icons.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/frame-button-icons.png rename to PickerAtheneum/graphics/gui/frame-button-icons.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/grey.png b/PickerAtheneum/graphics/gui/grey.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/grey.png rename to PickerAtheneum/graphics/gui/grey.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/orange.png b/PickerAtheneum/graphics/gui/orange.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/orange.png rename to PickerAtheneum/graphics/gui/orange.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/red-button.png b/PickerAtheneum/graphics/gui/red-button.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/red-button.png rename to PickerAtheneum/graphics/gui/red-button.png diff --git a/PickerAtheneum_1.2.5/graphics/gui/right-border.png b/PickerAtheneum/graphics/gui/right-border.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/gui/right-border.png rename to PickerAtheneum/graphics/gui/right-border.png diff --git a/PickerAtheneum_1.2.5/graphics/icons/pipe-marker-shortcut.png b/PickerAtheneum/graphics/icons/pipe-marker-shortcut.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/icons/pipe-marker-shortcut.png rename to PickerAtheneum/graphics/icons/pipe-marker-shortcut.png diff --git a/PickerAtheneum_1.2.5/graphics/icons/rail-marker-shortcut.png b/PickerAtheneum/graphics/icons/rail-marker-shortcut.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/icons/rail-marker-shortcut.png rename to PickerAtheneum/graphics/icons/rail-marker-shortcut.png diff --git a/PickerAtheneum_1.2.5/graphics/icons/wire-marker-shortcut.png b/PickerAtheneum/graphics/icons/wire-marker-shortcut.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/icons/wire-marker-shortcut.png rename to PickerAtheneum/graphics/icons/wire-marker-shortcut.png diff --git a/PickerAtheneum_1.2.5/graphics/logistic-network.png b/PickerAtheneum/graphics/logistic-network.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/logistic-network.png rename to PickerAtheneum/graphics/logistic-network.png diff --git a/PickerAtheneum_1.2.5/graphics/markers/beam-arrow.png b/PickerAtheneum/graphics/markers/beam-arrow.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/markers/beam-arrow.png rename to PickerAtheneum/graphics/markers/beam-arrow.png diff --git a/PickerAtheneum_1.2.5/graphics/no-network.png b/PickerAtheneum/graphics/no-network.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/no-network.png rename to PickerAtheneum/graphics/no-network.png diff --git a/PickerAtheneum_1.2.5/graphics/reset.png b/PickerAtheneum/graphics/reset.png similarity index 100% rename from PickerAtheneum_1.2.5/graphics/reset.png rename to PickerAtheneum/graphics/reset.png diff --git a/PickerAtheneum_1.2.5/info.json b/PickerAtheneum/info.json similarity index 100% rename from PickerAtheneum_1.2.5/info.json rename to PickerAtheneum/info.json diff --git a/PickerAtheneum_1.2.5/locale/en/adjustment-pad.cfg b/PickerAtheneum/locale/en/adjustment-pad.cfg similarity index 100% rename from PickerAtheneum_1.2.5/locale/en/adjustment-pad.cfg rename to PickerAtheneum/locale/en/adjustment-pad.cfg diff --git a/PickerAtheneum_1.2.5/locale/en/locale.cfg b/PickerAtheneum/locale/en/locale.cfg similarity index 100% rename from PickerAtheneum_1.2.5/locale/en/locale.cfg rename to PickerAtheneum/locale/en/locale.cfg diff --git a/PickerAtheneum_1.2.5/prototypes/adjustment-pad.lua b/PickerAtheneum/prototypes/adjustment-pad.lua similarity index 100% rename from PickerAtheneum_1.2.5/prototypes/adjustment-pad.lua rename to PickerAtheneum/prototypes/adjustment-pad.lua diff --git a/PickerAtheneum_1.2.5/prototypes/pointer-beam.lua b/PickerAtheneum/prototypes/pointer-beam.lua similarity index 100% rename from PickerAtheneum_1.2.5/prototypes/pointer-beam.lua rename to PickerAtheneum/prototypes/pointer-beam.lua diff --git a/PickerAtheneum_1.2.5/prototypes/styles.lua b/PickerAtheneum/prototypes/styles.lua similarity index 100% rename from PickerAtheneum_1.2.5/prototypes/styles.lua rename to PickerAtheneum/prototypes/styles.lua diff --git a/PickerAtheneum_1.2.5/readme.md b/PickerAtheneum/readme.md similarity index 100% rename from PickerAtheneum_1.2.5/readme.md rename to PickerAtheneum/readme.md diff --git a/PickerAtheneum_1.2.5/scenarios/testing/config.lua b/PickerAtheneum/scenarios/testing/config.lua similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/config.lua rename to PickerAtheneum/scenarios/testing/config.lua diff --git a/PickerAtheneum_1.2.5/scenarios/testing/control.lua b/PickerAtheneum/scenarios/testing/control.lua similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/control.lua rename to PickerAtheneum/scenarios/testing/control.lua diff --git a/PickerAtheneum_1.2.5/scenarios/testing/data.lua b/PickerAtheneum/scenarios/testing/data.lua similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/data.lua rename to PickerAtheneum/scenarios/testing/data.lua diff --git a/PickerAtheneum_1.2.5/scenarios/testing/description.json b/PickerAtheneum/scenarios/testing/description.json similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/description.json rename to PickerAtheneum/scenarios/testing/description.json diff --git a/PickerAtheneum_1.2.5/scenarios/testing/image.png b/PickerAtheneum/scenarios/testing/image.png similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/image.png rename to PickerAtheneum/scenarios/testing/image.png diff --git a/PickerAtheneum_1.2.5/scenarios/testing/locale/en/en.cfg b/PickerAtheneum/scenarios/testing/locale/en/en.cfg similarity index 100% rename from PickerAtheneum_1.2.5/scenarios/testing/locale/en/en.cfg rename to PickerAtheneum/scenarios/testing/locale/en/en.cfg diff --git a/PickerAtheneum_1.2.5/scripts/event-dispatcher.lua b/PickerAtheneum/scripts/event-dispatcher.lua similarity index 100% rename from PickerAtheneum_1.2.5/scripts/event-dispatcher.lua rename to PickerAtheneum/scripts/event-dispatcher.lua diff --git a/PickerAtheneum_1.2.5/scripts/intra-mod-ticker.lua b/PickerAtheneum/scripts/intra-mod-ticker.lua similarity index 100% rename from PickerAtheneum_1.2.5/scripts/intra-mod-ticker.lua rename to PickerAtheneum/scripts/intra-mod-ticker.lua diff --git a/PickerAtheneum_1.2.5/scripts/remote-queue.lua b/PickerAtheneum/scripts/remote-queue.lua similarity index 100% rename from PickerAtheneum_1.2.5/scripts/remote-queue.lua rename to PickerAtheneum/scripts/remote-queue.lua diff --git a/PickerAtheneum_1.2.5/settings.lua b/PickerAtheneum/settings.lua similarity index 100% rename from PickerAtheneum_1.2.5/settings.lua rename to PickerAtheneum/settings.lua diff --git a/PickerAtheneum_1.2.5/thumbnail.png b/PickerAtheneum/thumbnail.png similarity index 100% rename from PickerAtheneum_1.2.5/thumbnail.png rename to PickerAtheneum/thumbnail.png diff --git a/PickerAtheneum_1.2.5/utils/adjustment-pad.lua b/PickerAtheneum/utils/adjustment-pad.lua similarity index 100% rename from PickerAtheneum_1.2.5/utils/adjustment-pad.lua rename to PickerAtheneum/utils/adjustment-pad.lua diff --git a/PickerAtheneum_1.2.5/utils/lib.lua b/PickerAtheneum/utils/lib.lua similarity index 100% rename from PickerAtheneum_1.2.5/utils/lib.lua rename to PickerAtheneum/utils/lib.lua diff --git a/PickerBlueprinter_1.1.6/acknowledgements.json b/PickerBlueprinter/acknowledgements.json similarity index 100% rename from PickerBlueprinter_1.1.6/acknowledgements.json rename to PickerBlueprinter/acknowledgements.json diff --git a/PickerBlueprinter_1.1.6/changelog.txt b/PickerBlueprinter/changelog.txt similarity index 100% rename from PickerBlueprinter_1.1.6/changelog.txt rename to PickerBlueprinter/changelog.txt diff --git a/PickerBlueprinter_1.1.6/changes/remove_old_gui.lua b/PickerBlueprinter/changes/remove_old_gui.lua similarity index 100% rename from PickerBlueprinter_1.1.6/changes/remove_old_gui.lua rename to PickerBlueprinter/changes/remove_old_gui.lua diff --git a/PickerBlueprinter_1.1.6/control.lua b/PickerBlueprinter/control.lua similarity index 100% rename from PickerBlueprinter_1.1.6/control.lua rename to PickerBlueprinter/control.lua diff --git a/PickerBlueprinter_1.1.6/data.lua b/PickerBlueprinter/data.lua similarity index 100% rename from PickerBlueprinter_1.1.6/data.lua rename to PickerBlueprinter/data.lua diff --git a/PickerBlueprinter_1.1.6/graphics/bot-prioritizer.png b/PickerBlueprinter/graphics/bot-prioritizer.png similarity index 100% rename from PickerBlueprinter_1.1.6/graphics/bot-prioritizer.png rename to PickerBlueprinter/graphics/bot-prioritizer.png diff --git a/PickerBlueprinter_1.1.6/graphics/cloned-blueprint.png b/PickerBlueprinter/graphics/cloned-blueprint.png similarity index 100% rename from PickerBlueprinter_1.1.6/graphics/cloned-blueprint.png rename to PickerBlueprinter/graphics/cloned-blueprint.png diff --git a/PickerBlueprinter_1.1.6/graphics/mirror.png b/PickerBlueprinter/graphics/mirror.png similarity index 100% rename from PickerBlueprinter_1.1.6/graphics/mirror.png rename to PickerBlueprinter/graphics/mirror.png diff --git a/PickerBlueprinter_1.1.6/graphics/upgrade.png b/PickerBlueprinter/graphics/upgrade.png similarity index 100% rename from PickerBlueprinter_1.1.6/graphics/upgrade.png rename to PickerBlueprinter/graphics/upgrade.png diff --git a/PickerBlueprinter_1.1.6/info.json b/PickerBlueprinter/info.json similarity index 100% rename from PickerBlueprinter_1.1.6/info.json rename to PickerBlueprinter/info.json diff --git a/PickerBlueprinter_1.1.6/locale/en/blueprinter_en.cfg b/PickerBlueprinter/locale/en/blueprinter_en.cfg similarity index 100% rename from PickerBlueprinter_1.1.6/locale/en/blueprinter_en.cfg rename to PickerBlueprinter/locale/en/blueprinter_en.cfg diff --git a/PickerBlueprinter_1.1.6/locale/en/bpprioritizer.cfg b/PickerBlueprinter/locale/en/bpprioritizer.cfg similarity index 100% rename from PickerBlueprinter_1.1.6/locale/en/bpprioritizer.cfg rename to PickerBlueprinter/locale/en/bpprioritizer.cfg diff --git a/PickerBlueprinter_1.1.6/locale/en/bpsnap.cfg b/PickerBlueprinter/locale/en/bpsnap.cfg similarity index 100% rename from PickerBlueprinter_1.1.6/locale/en/bpsnap.cfg rename to PickerBlueprinter/locale/en/bpsnap.cfg diff --git a/PickerBlueprinter_1.1.6/locale/en/bpupdater.cfg b/PickerBlueprinter/locale/en/bpupdater.cfg similarity index 100% rename from PickerBlueprinter_1.1.6/locale/en/bpupdater.cfg rename to PickerBlueprinter/locale/en/bpupdater.cfg diff --git a/PickerBlueprinter_1.1.6/locale/en/deconstructor.cfg b/PickerBlueprinter/locale/en/deconstructor.cfg similarity index 100% rename from PickerBlueprinter_1.1.6/locale/en/deconstructor.cfg rename to PickerBlueprinter/locale/en/deconstructor.cfg diff --git a/PickerBlueprinter_1.1.6/prototypes/blueprinter.lua b/PickerBlueprinter/prototypes/blueprinter.lua similarity index 100% rename from PickerBlueprinter_1.1.6/prototypes/blueprinter.lua rename to PickerBlueprinter/prototypes/blueprinter.lua diff --git a/PickerBlueprinter_1.1.6/prototypes/bpprioritizer.lua b/PickerBlueprinter/prototypes/bpprioritizer.lua similarity index 100% rename from PickerBlueprinter_1.1.6/prototypes/bpprioritizer.lua rename to PickerBlueprinter/prototypes/bpprioritizer.lua diff --git a/PickerBlueprinter_1.1.6/prototypes/deconstruction.lua b/PickerBlueprinter/prototypes/deconstruction.lua similarity index 100% rename from PickerBlueprinter_1.1.6/prototypes/deconstruction.lua rename to PickerBlueprinter/prototypes/deconstruction.lua diff --git a/PickerBlueprinter_1.1.6/prototypes/sprites.lua b/PickerBlueprinter/prototypes/sprites.lua similarity index 100% rename from PickerBlueprinter_1.1.6/prototypes/sprites.lua rename to PickerBlueprinter/prototypes/sprites.lua diff --git a/PickerBlueprinter_1.1.6/readme.md b/PickerBlueprinter/readme.md similarity index 100% rename from PickerBlueprinter_1.1.6/readme.md rename to PickerBlueprinter/readme.md diff --git a/PickerBlueprinter_1.1.6/scripts/blueprinter.lua b/PickerBlueprinter/scripts/blueprinter.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/blueprinter.lua rename to PickerBlueprinter/scripts/blueprinter.lua diff --git a/PickerBlueprinter_1.1.6/scripts/bpmirror.lua b/PickerBlueprinter/scripts/bpmirror.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/bpmirror.lua rename to PickerBlueprinter/scripts/bpmirror.lua diff --git a/PickerBlueprinter_1.1.6/scripts/bpprioritizer.lua b/PickerBlueprinter/scripts/bpprioritizer.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/bpprioritizer.lua rename to PickerBlueprinter/scripts/bpprioritizer.lua diff --git a/PickerBlueprinter_1.1.6/scripts/bpsnap.lua b/PickerBlueprinter/scripts/bpsnap.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/bpsnap.lua rename to PickerBlueprinter/scripts/bpsnap.lua diff --git a/PickerBlueprinter_1.1.6/scripts/bpupdater.lua b/PickerBlueprinter/scripts/bpupdater.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/bpupdater.lua rename to PickerBlueprinter/scripts/bpupdater.lua diff --git a/PickerBlueprinter_1.1.6/scripts/deconstruction.lua b/PickerBlueprinter/scripts/deconstruction.lua similarity index 100% rename from PickerBlueprinter_1.1.6/scripts/deconstruction.lua rename to PickerBlueprinter/scripts/deconstruction.lua diff --git a/PickerBlueprinter_1.1.6/settings.lua b/PickerBlueprinter/settings.lua similarity index 100% rename from PickerBlueprinter_1.1.6/settings.lua rename to PickerBlueprinter/settings.lua diff --git a/PickerBlueprinter_1.1.6/settings/blueprinter.lua b/PickerBlueprinter/settings/blueprinter.lua similarity index 100% rename from PickerBlueprinter_1.1.6/settings/blueprinter.lua rename to PickerBlueprinter/settings/blueprinter.lua diff --git a/PickerBlueprinter_1.1.6/settings/bpprioritizer.lua b/PickerBlueprinter/settings/bpprioritizer.lua similarity index 100% rename from PickerBlueprinter_1.1.6/settings/bpprioritizer.lua rename to PickerBlueprinter/settings/bpprioritizer.lua diff --git a/PickerBlueprinter_1.1.6/settings/bpsnap.lua b/PickerBlueprinter/settings/bpsnap.lua similarity index 100% rename from PickerBlueprinter_1.1.6/settings/bpsnap.lua rename to PickerBlueprinter/settings/bpsnap.lua diff --git a/PickerBlueprinter_1.1.6/settings/bpupdater.lua b/PickerBlueprinter/settings/bpupdater.lua similarity index 100% rename from PickerBlueprinter_1.1.6/settings/bpupdater.lua rename to PickerBlueprinter/settings/bpupdater.lua diff --git a/PickerBlueprinter_1.1.6/thumbnail.png b/PickerBlueprinter/thumbnail.png similarity index 100% rename from PickerBlueprinter_1.1.6/thumbnail.png rename to PickerBlueprinter/thumbnail.png diff --git a/PickerDollies_1.2.6/changelog.txt b/PickerDollies/changelog.txt similarity index 100% rename from PickerDollies_1.2.6/changelog.txt rename to PickerDollies/changelog.txt diff --git a/PickerDollies_1.2.6/control.lua b/PickerDollies/control.lua similarity index 100% rename from PickerDollies_1.2.6/control.lua rename to PickerDollies/control.lua diff --git a/PickerDollies_1.2.6/data.lua b/PickerDollies/data.lua similarity index 100% rename from PickerDollies_1.2.6/data.lua rename to PickerDollies/data.lua diff --git a/PickerDollies_1.2.6/info.json b/PickerDollies/info.json similarity index 100% rename from PickerDollies_1.2.6/info.json rename to PickerDollies/info.json diff --git a/PickerDollies_1.2.6/interface.lua b/PickerDollies/interface.lua similarity index 100% rename from PickerDollies_1.2.6/interface.lua rename to PickerDollies/interface.lua diff --git a/PickerDollies_1.2.6/locale/en/dollies_en.cfg b/PickerDollies/locale/en/dollies_en.cfg similarity index 100% rename from PickerDollies_1.2.6/locale/en/dollies_en.cfg rename to PickerDollies/locale/en/dollies_en.cfg diff --git a/PickerDollies_1.2.6/readme.md b/PickerDollies/readme.md similarity index 100% rename from PickerDollies_1.2.6/readme.md rename to PickerDollies/readme.md diff --git a/PickerDollies_1.2.6/settings.lua b/PickerDollies/settings.lua similarity index 100% rename from PickerDollies_1.2.6/settings.lua rename to PickerDollies/settings.lua diff --git a/PickerDollies_1.2.6/thumbnail.png b/PickerDollies/thumbnail.png similarity index 100% rename from PickerDollies_1.2.6/thumbnail.png rename to PickerDollies/thumbnail.png diff --git a/PickerEquipmentKeys_1.1.1/changelog.txt b/PickerEquipmentKeys/changelog.txt similarity index 100% rename from PickerEquipmentKeys_1.1.1/changelog.txt rename to PickerEquipmentKeys/changelog.txt diff --git a/PickerEquipmentKeys_1.1.1/info.json b/PickerEquipmentKeys/info.json similarity index 100% rename from PickerEquipmentKeys_1.1.1/info.json rename to PickerEquipmentKeys/info.json diff --git a/PickerEquipmentKeys_1.1.1/locale/equipmentkeys_en.cfg b/PickerEquipmentKeys/locale/equipmentkeys_en.cfg similarity index 100% rename from PickerEquipmentKeys_1.1.1/locale/equipmentkeys_en.cfg rename to PickerEquipmentKeys/locale/equipmentkeys_en.cfg diff --git a/PickerEquipmentKeys_1.1.1/readme.md b/PickerEquipmentKeys/readme.md similarity index 100% rename from PickerEquipmentKeys_1.1.1/readme.md rename to PickerEquipmentKeys/readme.md diff --git a/PickerEquipmentKeys_1.1.1/thumbnail.png b/PickerEquipmentKeys/thumbnail.png similarity index 100% rename from PickerEquipmentKeys_1.1.1/thumbnail.png rename to PickerEquipmentKeys/thumbnail.png diff --git a/PickerExtended_4.1.4/changelog.txt b/PickerExtended/changelog.txt similarity index 100% rename from PickerExtended_4.1.4/changelog.txt rename to PickerExtended/changelog.txt diff --git a/PickerExtended_4.1.4/changes/versions.lua b/PickerExtended/changes/versions.lua similarity index 100% rename from PickerExtended_4.1.4/changes/versions.lua rename to PickerExtended/changes/versions.lua diff --git a/PickerExtended_4.1.4/control.lua b/PickerExtended/control.lua similarity index 100% rename from PickerExtended_4.1.4/control.lua rename to PickerExtended/control.lua diff --git a/PickerExtended_4.1.4/data-final-fixes.lua b/PickerExtended/data-final-fixes.lua similarity index 100% rename from PickerExtended_4.1.4/data-final-fixes.lua rename to PickerExtended/data-final-fixes.lua diff --git a/PickerExtended_4.1.4/data.lua b/PickerExtended/data.lua similarity index 100% rename from PickerExtended_4.1.4/data.lua rename to PickerExtended/data.lua diff --git a/PickerExtended_4.1.4/graphics/camera.png b/PickerExtended/graphics/camera.png similarity index 100% rename from PickerExtended_4.1.4/graphics/camera.png rename to PickerExtended/graphics/camera.png diff --git a/PickerExtended_4.1.4/graphics/construction-network.png b/PickerExtended/graphics/construction-network.png similarity index 100% rename from PickerExtended_4.1.4/graphics/construction-network.png rename to PickerExtended/graphics/construction-network.png diff --git a/PickerExtended_4.1.4/graphics/ore-eraser.png b/PickerExtended/graphics/ore-eraser.png similarity index 100% rename from PickerExtended_4.1.4/graphics/ore-eraser.png rename to PickerExtended/graphics/ore-eraser.png diff --git a/PickerExtended_4.1.4/graphics/tape-measure-2.png b/PickerExtended/graphics/tape-measure-2.png similarity index 100% rename from PickerExtended_4.1.4/graphics/tape-measure-2.png rename to PickerExtended/graphics/tape-measure-2.png diff --git a/PickerExtended_4.1.4/graphics/tape-measure.png b/PickerExtended/graphics/tape-measure.png similarity index 100% rename from PickerExtended_4.1.4/graphics/tape-measure.png rename to PickerExtended/graphics/tape-measure.png diff --git a/PickerExtended_4.1.4/info.json b/PickerExtended/info.json similarity index 100% rename from PickerExtended_4.1.4/info.json rename to PickerExtended/info.json diff --git a/PickerExtended_4.1.4/locale/en/controls.cfg b/PickerExtended/locale/en/controls.cfg similarity index 100% rename from PickerExtended_4.1.4/locale/en/controls.cfg rename to PickerExtended/locale/en/controls.cfg diff --git a/PickerExtended_4.1.4/locale/en/locale.cfg b/PickerExtended/locale/en/locale.cfg similarity index 100% rename from PickerExtended_4.1.4/locale/en/locale.cfg rename to PickerExtended/locale/en/locale.cfg diff --git a/PickerExtended_4.1.4/locale/en/mod-setting.cfg b/PickerExtended/locale/en/mod-setting.cfg similarity index 100% rename from PickerExtended_4.1.4/locale/en/mod-setting.cfg rename to PickerExtended/locale/en/mod-setting.cfg diff --git a/PickerExtended_4.1.4/locale/en/playerdeath.cfg b/PickerExtended/locale/en/playerdeath.cfg similarity index 100% rename from PickerExtended_4.1.4/locale/en/playerdeath.cfg rename to PickerExtended/locale/en/playerdeath.cfg diff --git a/PickerExtended_4.1.4/prototypes/picker.lua b/PickerExtended/prototypes/picker.lua similarity index 100% rename from PickerExtended_4.1.4/prototypes/picker.lua rename to PickerExtended/prototypes/picker.lua diff --git a/PickerExtended_4.1.4/prototypes/renamer.lua b/PickerExtended/prototypes/renamer.lua similarity index 100% rename from PickerExtended_4.1.4/prototypes/renamer.lua rename to PickerExtended/prototypes/renamer.lua diff --git a/PickerExtended_4.1.4/prototypes/tools.lua b/PickerExtended/prototypes/tools.lua similarity index 100% rename from PickerExtended_4.1.4/prototypes/tools.lua rename to PickerExtended/prototypes/tools.lua diff --git a/PickerExtended_4.1.4/readme.md b/PickerExtended/readme.md similarity index 100% rename from PickerExtended_4.1.4/readme.md rename to PickerExtended/readme.md diff --git a/PickerExtended_4.1.4/scripts/crafter.lua b/PickerExtended/scripts/crafter.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/crafter.lua rename to PickerExtended/scripts/crafter.lua diff --git a/PickerExtended_4.1.4/scripts/flashlight.lua b/PickerExtended/scripts/flashlight.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/flashlight.lua rename to PickerExtended/scripts/flashlight.lua diff --git a/PickerExtended_4.1.4/scripts/oreeraser.lua b/PickerExtended/scripts/oreeraser.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/oreeraser.lua rename to PickerExtended/scripts/oreeraser.lua diff --git a/PickerExtended_4.1.4/scripts/planners.lua b/PickerExtended/scripts/planners.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/planners.lua rename to PickerExtended/scripts/planners.lua diff --git a/PickerExtended_4.1.4/scripts/playerdeath.lua b/PickerExtended/scripts/playerdeath.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/playerdeath.lua rename to PickerExtended/scripts/playerdeath.lua diff --git a/PickerExtended_4.1.4/scripts/playeroptions.lua b/PickerExtended/scripts/playeroptions.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/playeroptions.lua rename to PickerExtended/scripts/playeroptions.lua diff --git a/PickerExtended_4.1.4/scripts/renamer.lua b/PickerExtended/scripts/renamer.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/renamer.lua rename to PickerExtended/scripts/renamer.lua diff --git a/PickerExtended_4.1.4/scripts/reviver.lua b/PickerExtended/scripts/reviver.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/reviver.lua rename to PickerExtended/scripts/reviver.lua diff --git a/PickerExtended_4.1.4/scripts/tools.lua b/PickerExtended/scripts/tools.lua similarity index 100% rename from PickerExtended_4.1.4/scripts/tools.lua rename to PickerExtended/scripts/tools.lua diff --git a/PickerExtended_4.1.4/settings.lua b/PickerExtended/settings.lua similarity index 100% rename from PickerExtended_4.1.4/settings.lua rename to PickerExtended/settings.lua diff --git a/PickerExtended_4.1.4/settings/playeroptions.lua b/PickerExtended/settings/playeroptions.lua similarity index 100% rename from PickerExtended_4.1.4/settings/playeroptions.lua rename to PickerExtended/settings/playeroptions.lua diff --git a/PickerExtended_4.1.4/settings/tools.lua b/PickerExtended/settings/tools.lua similarity index 100% rename from PickerExtended_4.1.4/settings/tools.lua rename to PickerExtended/settings/tools.lua diff --git a/PickerExtended_4.1.4/thumbnail.png b/PickerExtended/thumbnail.png similarity index 100% rename from PickerExtended_4.1.4/thumbnail.png rename to PickerExtended/thumbnail.png diff --git a/PickerInventoryTools_1.1.15/LICENSE b/PickerInventoryTools/LICENSE similarity index 100% rename from PickerInventoryTools_1.1.15/LICENSE rename to PickerInventoryTools/LICENSE diff --git a/PickerInventoryTools_1.1.15/acknowledgements.json b/PickerInventoryTools/acknowledgements.json similarity index 100% rename from PickerInventoryTools_1.1.15/acknowledgements.json rename to PickerInventoryTools/acknowledgements.json diff --git a/PickerInventoryTools_1.1.15/changelog.txt b/PickerInventoryTools/changelog.txt similarity index 100% rename from PickerInventoryTools_1.1.15/changelog.txt rename to PickerInventoryTools/changelog.txt diff --git a/PickerInventoryTools_1.1.15/control.lua b/PickerInventoryTools/control.lua similarity index 100% rename from PickerInventoryTools_1.1.15/control.lua rename to PickerInventoryTools/control.lua diff --git a/PickerInventoryTools_1.1.15/data-final-fixes.lua b/PickerInventoryTools/data-final-fixes.lua similarity index 100% rename from PickerInventoryTools_1.1.15/data-final-fixes.lua rename to PickerInventoryTools/data-final-fixes.lua diff --git a/PickerInventoryTools_1.1.15/data.lua b/PickerInventoryTools/data.lua similarity index 100% rename from PickerInventoryTools_1.1.15/data.lua rename to PickerInventoryTools/data.lua diff --git a/PickerInventoryTools_1.1.15/graphics/discharge-defense-equipment-ability.png b/PickerInventoryTools/graphics/discharge-defense-equipment-ability.png similarity index 100% rename from PickerInventoryTools_1.1.15/graphics/discharge-defense-equipment-ability.png rename to PickerInventoryTools/graphics/discharge-defense-equipment-ability.png diff --git a/PickerInventoryTools_1.1.15/graphics/eq_status.png b/PickerInventoryTools/graphics/eq_status.png similarity index 100% rename from PickerInventoryTools_1.1.15/graphics/eq_status.png rename to PickerInventoryTools/graphics/eq_status.png diff --git a/PickerInventoryTools_1.1.15/graphics/filterfill.png b/PickerInventoryTools/graphics/filterfill.png similarity index 100% rename from PickerInventoryTools_1.1.15/graphics/filterfill.png rename to PickerInventoryTools/graphics/filterfill.png diff --git a/PickerInventoryTools_1.1.15/info.json b/PickerInventoryTools/info.json similarity index 100% rename from PickerInventoryTools_1.1.15/info.json rename to PickerInventoryTools/info.json diff --git a/PickerInventoryTools_1.1.15/locale/en/auto-deconstruct.cfg b/PickerInventoryTools/locale/en/auto-deconstruct.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/auto-deconstruct.cfg rename to PickerInventoryTools/locale/en/auto-deconstruct.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/cursor-carousel.cfg b/PickerInventoryTools/locale/en/cursor-carousel.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/cursor-carousel.cfg rename to PickerInventoryTools/locale/en/cursor-carousel.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/inventory-tools.cfg b/PickerInventoryTools/locale/en/inventory-tools.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/inventory-tools.cfg rename to PickerInventoryTools/locale/en/inventory-tools.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/packing-tape.cfg b/PickerInventoryTools/locale/en/packing-tape.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/packing-tape.cfg rename to PickerInventoryTools/locale/en/packing-tape.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/switch-gun.cfg b/PickerInventoryTools/locale/en/switch-gun.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/switch-gun.cfg rename to PickerInventoryTools/locale/en/switch-gun.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/toggle-scripts.cfg b/PickerInventoryTools/locale/en/toggle-scripts.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/toggle-scripts.cfg rename to PickerInventoryTools/locale/en/toggle-scripts.cfg diff --git a/PickerInventoryTools_1.1.15/locale/en/zapper.cfg b/PickerInventoryTools/locale/en/zapper.cfg similarity index 100% rename from PickerInventoryTools_1.1.15/locale/en/zapper.cfg rename to PickerInventoryTools/locale/en/zapper.cfg diff --git a/PickerInventoryTools_1.1.15/migrations/20200410-1.1.3-equipment-toggles.lua b/PickerInventoryTools/migrations/20200410-1.1.3-equipment-toggles.lua similarity index 100% rename from PickerInventoryTools_1.1.15/migrations/20200410-1.1.3-equipment-toggles.lua rename to PickerInventoryTools/migrations/20200410-1.1.3-equipment-toggles.lua diff --git a/PickerInventoryTools_1.1.15/migrations/20201124-1.1.4.old-gui.lua b/PickerInventoryTools/migrations/20201124-1.1.4.old-gui.lua similarity index 100% rename from PickerInventoryTools_1.1.15/migrations/20201124-1.1.4.old-gui.lua rename to PickerInventoryTools/migrations/20201124-1.1.4.old-gui.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/copy-chest.lua b/PickerInventoryTools/prototypes/copy-chest.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/copy-chest.lua rename to PickerInventoryTools/prototypes/copy-chest.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/cursor-carousel.lua b/PickerInventoryTools/prototypes/cursor-carousel.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/cursor-carousel.lua rename to PickerInventoryTools/prototypes/cursor-carousel.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/filter-fill.lua b/PickerInventoryTools/prototypes/filter-fill.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/filter-fill.lua rename to PickerInventoryTools/prototypes/filter-fill.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/final/disabled-equipment.lua b/PickerInventoryTools/prototypes/final/disabled-equipment.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/final/disabled-equipment.lua rename to PickerInventoryTools/prototypes/final/disabled-equipment.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/final/packing-tape.lua b/PickerInventoryTools/prototypes/final/packing-tape.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/final/packing-tape.lua rename to PickerInventoryTools/prototypes/final/packing-tape.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/inventory-sort.lua b/PickerInventoryTools/prototypes/inventory-sort.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/inventory-sort.lua rename to PickerInventoryTools/prototypes/inventory-sort.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/inventory-tools.lua b/PickerInventoryTools/prototypes/inventory-tools.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/inventory-tools.lua rename to PickerInventoryTools/prototypes/inventory-tools.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/item-zapper.lua b/PickerInventoryTools/prototypes/item-zapper.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/item-zapper.lua rename to PickerInventoryTools/prototypes/item-zapper.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/switch-gun.lua b/PickerInventoryTools/prototypes/switch-gun.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/switch-gun.lua rename to PickerInventoryTools/prototypes/switch-gun.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/toggle-equipment.lua b/PickerInventoryTools/prototypes/toggle-equipment.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/toggle-equipment.lua rename to PickerInventoryTools/prototypes/toggle-equipment.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/toggle-flashlight.lua b/PickerInventoryTools/prototypes/toggle-flashlight.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/toggle-flashlight.lua rename to PickerInventoryTools/prototypes/toggle-flashlight.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/toggle-logistics.lua b/PickerInventoryTools/prototypes/toggle-logistics.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/toggle-logistics.lua rename to PickerInventoryTools/prototypes/toggle-logistics.lua diff --git a/PickerInventoryTools_1.1.15/prototypes/toggle-minimap.lua b/PickerInventoryTools/prototypes/toggle-minimap.lua similarity index 100% rename from PickerInventoryTools_1.1.15/prototypes/toggle-minimap.lua rename to PickerInventoryTools/prototypes/toggle-minimap.lua diff --git a/PickerInventoryTools_1.1.15/readme.md b/PickerInventoryTools/readme.md similarity index 100% rename from PickerInventoryTools_1.1.15/readme.md rename to PickerInventoryTools/readme.md diff --git a/PickerInventoryTools_1.1.15/scripts/auto-deconstruct.lua b/PickerInventoryTools/scripts/auto-deconstruct.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/auto-deconstruct.lua rename to PickerInventoryTools/scripts/auto-deconstruct.lua diff --git a/PickerInventoryTools_1.1.15/scripts/chest-limit.lua b/PickerInventoryTools/scripts/chest-limit.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/chest-limit.lua rename to PickerInventoryTools/scripts/chest-limit.lua diff --git a/PickerInventoryTools_1.1.15/scripts/copy-chests.lua b/PickerInventoryTools/scripts/copy-chests.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/copy-chests.lua rename to PickerInventoryTools/scripts/copy-chests.lua diff --git a/PickerInventoryTools_1.1.15/scripts/cursor-carousel.lua b/PickerInventoryTools/scripts/cursor-carousel.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/cursor-carousel.lua rename to PickerInventoryTools/scripts/cursor-carousel.lua diff --git a/PickerInventoryTools_1.1.15/scripts/filter-fill.lua b/PickerInventoryTools/scripts/filter-fill.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/filter-fill.lua rename to PickerInventoryTools/scripts/filter-fill.lua diff --git a/PickerInventoryTools_1.1.15/scripts/inventory-sort.lua b/PickerInventoryTools/scripts/inventory-sort.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/inventory-sort.lua rename to PickerInventoryTools/scripts/inventory-sort.lua diff --git a/PickerInventoryTools_1.1.15/scripts/inventory-tools.lua b/PickerInventoryTools/scripts/inventory-tools.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/inventory-tools.lua rename to PickerInventoryTools/scripts/inventory-tools.lua diff --git a/PickerInventoryTools_1.1.15/scripts/item-count.lua b/PickerInventoryTools/scripts/item-count.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/item-count.lua rename to PickerInventoryTools/scripts/item-count.lua diff --git a/PickerInventoryTools_1.1.15/scripts/item-zapper.lua b/PickerInventoryTools/scripts/item-zapper.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/item-zapper.lua rename to PickerInventoryTools/scripts/item-zapper.lua diff --git a/PickerInventoryTools_1.1.15/scripts/packing-tape.lua b/PickerInventoryTools/scripts/packing-tape.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/packing-tape.lua rename to PickerInventoryTools/scripts/packing-tape.lua diff --git a/PickerInventoryTools_1.1.15/scripts/switch-gun.lua b/PickerInventoryTools/scripts/switch-gun.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/switch-gun.lua rename to PickerInventoryTools/scripts/switch-gun.lua diff --git a/PickerInventoryTools_1.1.15/scripts/toggle-equipment.lua b/PickerInventoryTools/scripts/toggle-equipment.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/toggle-equipment.lua rename to PickerInventoryTools/scripts/toggle-equipment.lua diff --git a/PickerInventoryTools_1.1.15/scripts/toggle-flashlight.lua b/PickerInventoryTools/scripts/toggle-flashlight.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/toggle-flashlight.lua rename to PickerInventoryTools/scripts/toggle-flashlight.lua diff --git a/PickerInventoryTools_1.1.15/scripts/toggle-groups.lua b/PickerInventoryTools/scripts/toggle-groups.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/toggle-groups.lua rename to PickerInventoryTools/scripts/toggle-groups.lua diff --git a/PickerInventoryTools_1.1.15/scripts/toggle-minimap.lua b/PickerInventoryTools/scripts/toggle-minimap.lua similarity index 100% rename from PickerInventoryTools_1.1.15/scripts/toggle-minimap.lua rename to PickerInventoryTools/scripts/toggle-minimap.lua diff --git a/PickerInventoryTools_1.1.15/settings.lua b/PickerInventoryTools/settings.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings.lua rename to PickerInventoryTools/settings.lua diff --git a/PickerInventoryTools_1.1.15/settings/auto-deconstruct.lua b/PickerInventoryTools/settings/auto-deconstruct.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/auto-deconstruct.lua rename to PickerInventoryTools/settings/auto-deconstruct.lua diff --git a/PickerInventoryTools_1.1.15/settings/cursor-carousel.lua b/PickerInventoryTools/settings/cursor-carousel.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/cursor-carousel.lua rename to PickerInventoryTools/settings/cursor-carousel.lua diff --git a/PickerInventoryTools_1.1.15/settings/item-zapper.lua b/PickerInventoryTools/settings/item-zapper.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/item-zapper.lua rename to PickerInventoryTools/settings/item-zapper.lua diff --git a/PickerInventoryTools_1.1.15/settings/packing-tape.lua b/PickerInventoryTools/settings/packing-tape.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/packing-tape.lua rename to PickerInventoryTools/settings/packing-tape.lua diff --git a/PickerInventoryTools_1.1.15/settings/toggle-groups.lua b/PickerInventoryTools/settings/toggle-groups.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/toggle-groups.lua rename to PickerInventoryTools/settings/toggle-groups.lua diff --git a/PickerInventoryTools_1.1.15/settings/toggle-minimap.lua b/PickerInventoryTools/settings/toggle-minimap.lua similarity index 100% rename from PickerInventoryTools_1.1.15/settings/toggle-minimap.lua rename to PickerInventoryTools/settings/toggle-minimap.lua diff --git a/PickerInventoryTools_1.1.15/thumbnail.png b/PickerInventoryTools/thumbnail.png similarity index 100% rename from PickerInventoryTools_1.1.15/thumbnail.png rename to PickerInventoryTools/thumbnail.png diff --git a/PickerPipeTools_1.1.4/acknowledgements.json b/PickerPipeTools/acknowledgements.json similarity index 100% rename from PickerPipeTools_1.1.4/acknowledgements.json rename to PickerPipeTools/acknowledgements.json diff --git a/PickerPipeTools_1.1.4/changelog.txt b/PickerPipeTools/changelog.txt similarity index 100% rename from PickerPipeTools_1.1.4/changelog.txt rename to PickerPipeTools/changelog.txt diff --git a/PickerPipeTools_1.1.4/control.lua b/PickerPipeTools/control.lua similarity index 100% rename from PickerPipeTools_1.1.4/control.lua rename to PickerPipeTools/control.lua diff --git a/PickerPipeTools_1.1.4/data-final-fixes.lua b/PickerPipeTools/data-final-fixes.lua similarity index 100% rename from PickerPipeTools_1.1.4/data-final-fixes.lua rename to PickerPipeTools/data-final-fixes.lua diff --git a/PickerPipeTools_1.1.4/data.lua b/PickerPipeTools/data.lua similarity index 100% rename from PickerPipeTools_1.1.4/data.lua rename to PickerPipeTools/data.lua diff --git a/PickerPipeTools_1.1.4/graphics/entity/markers/32x32highlighterbad.png b/PickerPipeTools/graphics/entity/markers/32x32highlighterbad.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/markers/32x32highlighterbad.png rename to PickerPipeTools/graphics/entity/markers/32x32highlighterbad.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/markers/32x32highlightergood.png b/PickerPipeTools/graphics/entity/markers/32x32highlightergood.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/markers/32x32highlightergood.png rename to PickerPipeTools/graphics/entity/markers/32x32highlightergood.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-down-left.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-down-left.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-down-left.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-down-left.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-down-right.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-down-right.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-down-right.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-down-right.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-up-left.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-up-left.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-up-left.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-up-left.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-up-right.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-up-right.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-corner-up-right.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-corner-up-right.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-cross.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-cross.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-cross.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-cross.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-down.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-down.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-down.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-down.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-left.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-left.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-left.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-left.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-right.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-right.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-right.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-right.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-up.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-up.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-ending-up.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-ending-up.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal-single.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal-single.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal-single.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal-single.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal-window.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal-window.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal-window.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal-window.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-horizontal.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-horizontal.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical-single.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical-single.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical-single.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical-single.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical-window.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical-window.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical-window.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical-window.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-straight-vertical.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-straight-vertical.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-down.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-t-down.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-down.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-t-down.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-left.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-t-left.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-left.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-t-left.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-right.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-t-right.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-right.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-t-right.png diff --git a/PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-up.png b/PickerPipeTools/graphics/entity/pipe/hr-pipe-t-up.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/entity/pipe/hr-pipe-t-up.png rename to PickerPipeTools/graphics/entity/pipe/hr-pipe-t-up.png diff --git a/PickerPipeTools_1.1.4/graphics/highlighter-green.png b/PickerPipeTools/graphics/highlighter-green.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/highlighter-green.png rename to PickerPipeTools/graphics/highlighter-green.png diff --git a/PickerPipeTools_1.1.4/graphics/highlighter-red.png b/PickerPipeTools/graphics/highlighter-red.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/highlighter-red.png rename to PickerPipeTools/graphics/highlighter-red.png diff --git a/PickerPipeTools_1.1.4/graphics/icons/hr-lock.png b/PickerPipeTools/graphics/icons/hr-lock.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/icons/hr-lock.png rename to PickerPipeTools/graphics/icons/hr-lock.png diff --git a/PickerPipeTools_1.1.4/graphics/icons/lock.png b/PickerPipeTools/graphics/icons/lock.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/icons/lock.png rename to PickerPipeTools/graphics/icons/lock.png diff --git a/PickerPipeTools_1.1.4/graphics/icons/pipe-cleaner.png b/PickerPipeTools/graphics/icons/pipe-cleaner.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/icons/pipe-cleaner.png rename to PickerPipeTools/graphics/icons/pipe-cleaner.png diff --git a/PickerPipeTools_1.1.4/graphics/pipe-cleaner.png b/PickerPipeTools/graphics/pipe-cleaner.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/pipe-cleaner.png rename to PickerPipeTools/graphics/pipe-cleaner.png diff --git a/PickerPipeTools_1.1.4/graphics/pipe-marker-vertical.png b/PickerPipeTools/graphics/pipe-marker-vertical.png similarity index 100% rename from PickerPipeTools_1.1.4/graphics/pipe-marker-vertical.png rename to PickerPipeTools/graphics/pipe-marker-vertical.png diff --git a/PickerPipeTools_1.1.4/info.json b/PickerPipeTools/info.json similarity index 100% rename from PickerPipeTools_1.1.4/info.json rename to PickerPipeTools/info.json diff --git a/PickerPipeTools_1.1.4/locale/en/assembler-direction.cfg b/PickerPipeTools/locale/en/assembler-direction.cfg similarity index 100% rename from PickerPipeTools_1.1.4/locale/en/assembler-direction.cfg rename to PickerPipeTools/locale/en/assembler-direction.cfg diff --git a/PickerPipeTools_1.1.4/locale/en/pipe-cleaner.cfg b/PickerPipeTools/locale/en/pipe-cleaner.cfg similarity index 100% rename from PickerPipeTools_1.1.4/locale/en/pipe-cleaner.cfg rename to PickerPipeTools/locale/en/pipe-cleaner.cfg diff --git a/PickerPipeTools_1.1.4/locale/en/pipe-filter.cfg b/PickerPipeTools/locale/en/pipe-filter.cfg similarity index 100% rename from PickerPipeTools_1.1.4/locale/en/pipe-filter.cfg rename to PickerPipeTools/locale/en/pipe-filter.cfg diff --git a/PickerPipeTools_1.1.4/locale/en/pipetools_en.cfg b/PickerPipeTools/locale/en/pipetools_en.cfg similarity index 100% rename from PickerPipeTools_1.1.4/locale/en/pipetools_en.cfg rename to PickerPipeTools/locale/en/pipetools_en.cfg diff --git a/PickerPipeTools_1.1.4/prototypes/controls.lua b/PickerPipeTools/prototypes/controls.lua similarity index 100% rename from PickerPipeTools_1.1.4/prototypes/controls.lua rename to PickerPipeTools/prototypes/controls.lua diff --git a/PickerPipeTools_1.1.4/prototypes/pipe-clamp-tool.lua b/PickerPipeTools/prototypes/pipe-clamp-tool.lua similarity index 100% rename from PickerPipeTools_1.1.4/prototypes/pipe-clamp-tool.lua rename to PickerPipeTools/prototypes/pipe-clamp-tool.lua diff --git a/PickerPipeTools_1.1.4/prototypes/pipe-clamps.lua b/PickerPipeTools/prototypes/pipe-clamps.lua similarity index 100% rename from PickerPipeTools_1.1.4/prototypes/pipe-clamps.lua rename to PickerPipeTools/prototypes/pipe-clamps.lua diff --git a/PickerPipeTools_1.1.4/prototypes/pipe-cleaner.lua b/PickerPipeTools/prototypes/pipe-cleaner.lua similarity index 100% rename from PickerPipeTools_1.1.4/prototypes/pipe-cleaner.lua rename to PickerPipeTools/prototypes/pipe-cleaner.lua diff --git a/PickerPipeTools_1.1.4/readme.md b/PickerPipeTools/readme.md similarity index 100% rename from PickerPipeTools_1.1.4/readme.md rename to PickerPipeTools/readme.md diff --git a/PickerPipeTools_1.1.4/scripts/assembler-direction.lua b/PickerPipeTools/scripts/assembler-direction.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/assembler-direction.lua rename to PickerPipeTools/scripts/assembler-direction.lua diff --git a/PickerPipeTools_1.1.4/scripts/orphans.lua b/PickerPipeTools/scripts/orphans.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/orphans.lua rename to PickerPipeTools/scripts/orphans.lua diff --git a/PickerPipeTools_1.1.4/scripts/pipe-clamps.lua b/PickerPipeTools/scripts/pipe-clamps.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/pipe-clamps.lua rename to PickerPipeTools/scripts/pipe-clamps.lua diff --git a/PickerPipeTools_1.1.4/scripts/pipe-cleaner.lua b/PickerPipeTools/scripts/pipe-cleaner.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/pipe-cleaner.lua rename to PickerPipeTools/scripts/pipe-cleaner.lua diff --git a/PickerPipeTools_1.1.4/scripts/pipe-filter.lua b/PickerPipeTools/scripts/pipe-filter.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/pipe-filter.lua rename to PickerPipeTools/scripts/pipe-filter.lua diff --git a/PickerPipeTools_1.1.4/scripts/utils.lua b/PickerPipeTools/scripts/utils.lua similarity index 100% rename from PickerPipeTools_1.1.4/scripts/utils.lua rename to PickerPipeTools/scripts/utils.lua diff --git a/PickerPipeTools_1.1.4/settings.lua b/PickerPipeTools/settings.lua similarity index 100% rename from PickerPipeTools_1.1.4/settings.lua rename to PickerPipeTools/settings.lua diff --git a/PickerPipeTools_1.1.4/thumbnail.png b/PickerPipeTools/thumbnail.png similarity index 100% rename from PickerPipeTools_1.1.4/thumbnail.png rename to PickerPipeTools/thumbnail.png diff --git a/PickerPipeTools_1.1.4/utils/not-clampable.lua b/PickerPipeTools/utils/not-clampable.lua similarity index 100% rename from PickerPipeTools_1.1.4/utils/not-clampable.lua rename to PickerPipeTools/utils/not-clampable.lua diff --git a/PickerPipeTools_1.1.4/utils/tables.lua b/PickerPipeTools/utils/tables.lua similarity index 100% rename from PickerPipeTools_1.1.4/utils/tables.lua rename to PickerPipeTools/utils/tables.lua diff --git a/PickerTweaks_2.2.7/LICENSE b/PickerTweaks/LICENSE similarity index 100% rename from PickerTweaks_2.2.7/LICENSE rename to PickerTweaks/LICENSE diff --git a/PickerTweaks_2.2.7/README.md b/PickerTweaks/README.md similarity index 100% rename from PickerTweaks_2.2.7/README.md rename to PickerTweaks/README.md diff --git a/PickerTweaks_2.2.7/acknowledgements.json b/PickerTweaks/acknowledgements.json similarity index 100% rename from PickerTweaks_2.2.7/acknowledgements.json rename to PickerTweaks/acknowledgements.json diff --git a/PickerTweaks_2.2.7/changelog.txt b/PickerTweaks/changelog.txt similarity index 100% rename from PickerTweaks_2.2.7/changelog.txt rename to PickerTweaks/changelog.txt diff --git a/PickerTweaks_2.2.7/data-final-fixes.lua b/PickerTweaks/data-final-fixes.lua similarity index 100% rename from PickerTweaks_2.2.7/data-final-fixes.lua rename to PickerTweaks/data-final-fixes.lua diff --git a/PickerTweaks_2.2.7/data-updates.lua b/PickerTweaks/data-updates.lua similarity index 100% rename from PickerTweaks_2.2.7/data-updates.lua rename to PickerTweaks/data-updates.lua diff --git a/PickerTweaks_2.2.7/graphics/electricity-icon-unplugged.png b/PickerTweaks/graphics/electricity-icon-unplugged.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/electricity-icon-unplugged.png rename to PickerTweaks/graphics/electricity-icon-unplugged.png diff --git a/PickerTweaks_2.2.7/graphics/iondicators/indication-arrow.png b/PickerTweaks/graphics/iondicators/indication-arrow.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/iondicators/indication-arrow.png rename to PickerTweaks/graphics/iondicators/indication-arrow.png diff --git a/PickerTweaks_2.2.7/graphics/iondicators/indication-line.png b/PickerTweaks/graphics/iondicators/indication-line.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/iondicators/indication-line.png rename to PickerTweaks/graphics/iondicators/indication-line.png diff --git a/PickerTweaks_2.2.7/graphics/lightcone-darkfrei.png b/PickerTweaks/graphics/lightcone-darkfrei.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/lightcone-darkfrei.png rename to PickerTweaks/graphics/lightcone-darkfrei.png diff --git a/PickerTweaks_2.2.7/graphics/lightcone-enhanced.png b/PickerTweaks/graphics/lightcone-enhanced.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/lightcone-enhanced.png rename to PickerTweaks/graphics/lightcone-enhanced.png diff --git a/PickerTweaks_2.2.7/graphics/lighter_cell.png b/PickerTweaks/graphics/lighter_cell.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/lighter_cell.png rename to PickerTweaks/graphics/lighter_cell.png diff --git a/PickerTweaks_2.2.7/graphics/material-construction.png b/PickerTweaks/graphics/material-construction.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/material-construction.png rename to PickerTweaks/graphics/material-construction.png diff --git a/PickerTweaks_2.2.7/graphics/too-far-from-roboport-icon.png b/PickerTweaks/graphics/too-far-from-roboport-icon.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/too-far-from-roboport-icon.png rename to PickerTweaks/graphics/too-far-from-roboport-icon.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/30-copper-wire.png b/PickerTweaks/graphics/wires/copper/30-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/30-copper-wire.png rename to PickerTweaks/graphics/wires/copper/30-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/30-hr-copper-wire.png b/PickerTweaks/graphics/wires/copper/30-hr-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/30-hr-copper-wire.png rename to PickerTweaks/graphics/wires/copper/30-hr-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/50-copper-wire.png b/PickerTweaks/graphics/wires/copper/50-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/50-copper-wire.png rename to PickerTweaks/graphics/wires/copper/50-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/50-green-wire.png b/PickerTweaks/graphics/wires/copper/50-green-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/50-green-wire.png rename to PickerTweaks/graphics/wires/copper/50-green-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/50-hr-copper-wire.png b/PickerTweaks/graphics/wires/copper/50-hr-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/50-hr-copper-wire.png rename to PickerTweaks/graphics/wires/copper/50-hr-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/80-copper-wire.png b/PickerTweaks/graphics/wires/copper/80-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/80-copper-wire.png rename to PickerTweaks/graphics/wires/copper/80-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/80-hr-copper-wire.png b/PickerTweaks/graphics/wires/copper/80-hr-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/80-hr-copper-wire.png rename to PickerTweaks/graphics/wires/copper/80-hr-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/copper-wire.png b/PickerTweaks/graphics/wires/copper/copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/copper-wire.png rename to PickerTweaks/graphics/wires/copper/copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/copper/hr-copper-wire.png b/PickerTweaks/graphics/wires/copper/hr-copper-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/copper/hr-copper-wire.png rename to PickerTweaks/graphics/wires/copper/hr-copper-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/50-hr-green-wire.png b/PickerTweaks/graphics/wires/green/50-hr-green-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/50-hr-green-wire.png rename to PickerTweaks/graphics/wires/green/50-hr-green-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/green-wire-b.png b/PickerTweaks/graphics/wires/green/green-wire-b.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/green-wire-b.png rename to PickerTweaks/graphics/wires/green/green-wire-b.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/green-wire.png b/PickerTweaks/graphics/wires/green/green-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/green-wire.png rename to PickerTweaks/graphics/wires/green/green-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/hr-green-wire-b.png b/PickerTweaks/graphics/wires/green/hr-green-wire-b.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/hr-green-wire-b.png rename to PickerTweaks/graphics/wires/green/hr-green-wire-b.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/hr-green-wire.png b/PickerTweaks/graphics/wires/green/hr-green-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/hr-green-wire.png rename to PickerTweaks/graphics/wires/green/hr-green-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/green/icon-blue-wire.png b/PickerTweaks/graphics/wires/green/icon-blue-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/green/icon-blue-wire.png rename to PickerTweaks/graphics/wires/green/icon-blue-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/50-hr-red-wire.png b/PickerTweaks/graphics/wires/red/50-hr-red-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/50-hr-red-wire.png rename to PickerTweaks/graphics/wires/red/50-hr-red-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/50-red-wire.png b/PickerTweaks/graphics/wires/red/50-red-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/50-red-wire.png rename to PickerTweaks/graphics/wires/red/50-red-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/hr-red-wire-y.png b/PickerTweaks/graphics/wires/red/hr-red-wire-y.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/hr-red-wire-y.png rename to PickerTweaks/graphics/wires/red/hr-red-wire-y.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/hr-red-wire.png b/PickerTweaks/graphics/wires/red/hr-red-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/hr-red-wire.png rename to PickerTweaks/graphics/wires/red/hr-red-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/icon-yellow-wire.png b/PickerTweaks/graphics/wires/red/icon-yellow-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/icon-yellow-wire.png rename to PickerTweaks/graphics/wires/red/icon-yellow-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/red-wire-y.png b/PickerTweaks/graphics/wires/red/red-wire-y.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/red-wire-y.png rename to PickerTweaks/graphics/wires/red/red-wire-y.png diff --git a/PickerTweaks_2.2.7/graphics/wires/red/red-wire.png b/PickerTweaks/graphics/wires/red/red-wire.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/red/red-wire.png rename to PickerTweaks/graphics/wires/red/red-wire.png diff --git a/PickerTweaks_2.2.7/graphics/wires/transparent-wire-shadow.png b/PickerTweaks/graphics/wires/transparent-wire-shadow.png similarity index 100% rename from PickerTweaks_2.2.7/graphics/wires/transparent-wire-shadow.png rename to PickerTweaks/graphics/wires/transparent-wire-shadow.png diff --git a/PickerTweaks_2.2.7/info.json b/PickerTweaks/info.json similarity index 100% rename from PickerTweaks_2.2.7/info.json rename to PickerTweaks/info.json diff --git a/PickerTweaks_2.2.7/locale/en/tweaks_en.cfg b/PickerTweaks/locale/en/tweaks_en.cfg similarity index 100% rename from PickerTweaks_2.2.7/locale/en/tweaks_en.cfg rename to PickerTweaks/locale/en/tweaks_en.cfg diff --git a/PickerTweaks_2.2.7/prototypes/belt-tweaks.lua b/PickerTweaks/prototypes/belt-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/belt-tweaks.lua rename to PickerTweaks/prototypes/belt-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/bot-tweaks.lua b/PickerTweaks/prototypes/bot-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/bot-tweaks.lua rename to PickerTweaks/prototypes/bot-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/collision-tweaks.lua b/PickerTweaks/prototypes/collision-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/collision-tweaks.lua rename to PickerTweaks/prototypes/collision-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/corpse-tweaks.lua b/PickerTweaks/prototypes/corpse-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/corpse-tweaks.lua rename to PickerTweaks/prototypes/corpse-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/decorative-tweaks.lua b/PickerTweaks/prototypes/decorative-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/decorative-tweaks.lua rename to PickerTweaks/prototypes/decorative-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/ghost-tweaks.lua b/PickerTweaks/prototypes/ghost-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/ghost-tweaks.lua rename to PickerTweaks/prototypes/ghost-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/ingredients-tweaks.lua b/PickerTweaks/prototypes/ingredients-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/ingredients-tweaks.lua rename to PickerTweaks/prototypes/ingredients-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/iondicators.lua b/PickerTweaks/prototypes/iondicators.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/iondicators.lua rename to PickerTweaks/prototypes/iondicators.lua diff --git a/PickerTweaks_2.2.7/prototypes/light-tweaks.lua b/PickerTweaks/prototypes/light-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/light-tweaks.lua rename to PickerTweaks/prototypes/light-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/player-tweaks.lua b/PickerTweaks/prototypes/player-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/player-tweaks.lua rename to PickerTweaks/prototypes/player-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/rail-tweaks.lua b/PickerTweaks/prototypes/rail-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/rail-tweaks.lua rename to PickerTweaks/prototypes/rail-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/smoke-tweaks.lua b/PickerTweaks/prototypes/smoke-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/smoke-tweaks.lua rename to PickerTweaks/prototypes/smoke-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/stack-tweaks.lua b/PickerTweaks/prototypes/stack-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/stack-tweaks.lua rename to PickerTweaks/prototypes/stack-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/tile-tweaks.lua b/PickerTweaks/prototypes/tile-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/tile-tweaks.lua rename to PickerTweaks/prototypes/tile-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/underground-tweaks.lua b/PickerTweaks/prototypes/underground-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/underground-tweaks.lua rename to PickerTweaks/prototypes/underground-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/vehicle-grids.lua b/PickerTweaks/prototypes/vehicle-grids.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/vehicle-grids.lua rename to PickerTweaks/prototypes/vehicle-grids.lua diff --git a/PickerTweaks_2.2.7/prototypes/weapon-tweaks.lua b/PickerTweaks/prototypes/weapon-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/weapon-tweaks.lua rename to PickerTweaks/prototypes/weapon-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/wire-tweaks.lua b/PickerTweaks/prototypes/wire-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/wire-tweaks.lua rename to PickerTweaks/prototypes/wire-tweaks.lua diff --git a/PickerTweaks_2.2.7/prototypes/wood-tweaks.lua b/PickerTweaks/prototypes/wood-tweaks.lua similarity index 100% rename from PickerTweaks_2.2.7/prototypes/wood-tweaks.lua rename to PickerTweaks/prototypes/wood-tweaks.lua diff --git a/PickerTweaks_2.2.7/settings-final-fixes.lua b/PickerTweaks/settings-final-fixes.lua similarity index 100% rename from PickerTweaks_2.2.7/settings-final-fixes.lua rename to PickerTweaks/settings-final-fixes.lua diff --git a/PickerTweaks_2.2.7/settings.lua b/PickerTweaks/settings.lua similarity index 100% rename from PickerTweaks_2.2.7/settings.lua rename to PickerTweaks/settings.lua diff --git a/PickerTweaks_2.2.7/thumbnail.png b/PickerTweaks/thumbnail.png similarity index 100% rename from PickerTweaks_2.2.7/thumbnail.png rename to PickerTweaks/thumbnail.png diff --git a/PickerVehicles_1.1.3/acknowledgements.json b/PickerVehicles/acknowledgements.json similarity index 100% rename from PickerVehicles_1.1.3/acknowledgements.json rename to PickerVehicles/acknowledgements.json diff --git a/PickerVehicles_1.1.3/changelog.txt b/PickerVehicles/changelog.txt similarity index 100% rename from PickerVehicles_1.1.3/changelog.txt rename to PickerVehicles/changelog.txt diff --git a/PickerVehicles_1.1.3/control.lua b/PickerVehicles/control.lua similarity index 100% rename from PickerVehicles_1.1.3/control.lua rename to PickerVehicles/control.lua diff --git a/PickerVehicles_1.1.3/data-final-fixes.lua b/PickerVehicles/data-final-fixes.lua similarity index 100% rename from PickerVehicles_1.1.3/data-final-fixes.lua rename to PickerVehicles/data-final-fixes.lua diff --git a/PickerVehicles_1.1.3/data-updates.lua b/PickerVehicles/data-updates.lua similarity index 100% rename from PickerVehicles_1.1.3/data-updates.lua rename to PickerVehicles/data-updates.lua diff --git a/PickerVehicles_1.1.3/data.lua b/PickerVehicles/data.lua similarity index 100% rename from PickerVehicles_1.1.3/data.lua rename to PickerVehicles/data.lua diff --git a/PickerVehicles_1.1.3/graphics/lightcone-enhanced-train.png b/PickerVehicles/graphics/lightcone-enhanced-train.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/lightcone-enhanced-train.png rename to PickerVehicles/graphics/lightcone-enhanced-train.png diff --git a/PickerVehicles_1.1.3/graphics/lightcone-enhanced-vehicle.png b/PickerVehicles/graphics/lightcone-enhanced-vehicle.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/lightcone-enhanced-vehicle.png rename to PickerVehicles/graphics/lightcone-enhanced-vehicle.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/curved-rail-horizontal-transparent.png b/PickerVehicles/graphics/nakedrails/curved-rail-horizontal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/curved-rail-horizontal-transparent.png rename to PickerVehicles/graphics/nakedrails/curved-rail-horizontal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/curved-rail-vertical-transparent.png b/PickerVehicles/graphics/nakedrails/curved-rail-vertical-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/curved-rail-vertical-transparent.png rename to PickerVehicles/graphics/nakedrails/curved-rail-vertical-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-curved-rail-horizontal-transparent.png b/PickerVehicles/graphics/nakedrails/hr-curved-rail-horizontal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-curved-rail-horizontal-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-curved-rail-horizontal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-curved-rail-vertical-transparent.png b/PickerVehicles/graphics/nakedrails/hr-curved-rail-vertical-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-curved-rail-vertical-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-curved-rail-vertical-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-rail-endings-transparent.png b/PickerVehicles/graphics/nakedrails/hr-rail-endings-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-rail-endings-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-rail-endings-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-diagonal-transparent.png b/PickerVehicles/graphics/nakedrails/hr-straight-rail-diagonal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-diagonal-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-straight-rail-diagonal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-horizontal-transparent.png b/PickerVehicles/graphics/nakedrails/hr-straight-rail-horizontal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-horizontal-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-straight-rail-horizontal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-vertical-transparent.png b/PickerVehicles/graphics/nakedrails/hr-straight-rail-vertical-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/hr-straight-rail-vertical-transparent.png rename to PickerVehicles/graphics/nakedrails/hr-straight-rail-vertical-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/naked-rails-icon.png b/PickerVehicles/graphics/nakedrails/naked-rails-icon.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/naked-rails-icon.png rename to PickerVehicles/graphics/nakedrails/naked-rails-icon.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/naked-replacer-icon.png b/PickerVehicles/graphics/nakedrails/naked-replacer-icon.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/naked-replacer-icon.png rename to PickerVehicles/graphics/nakedrails/naked-replacer-icon.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/rail-endings-transparent.png b/PickerVehicles/graphics/nakedrails/rail-endings-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/rail-endings-transparent.png rename to PickerVehicles/graphics/nakedrails/rail-endings-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/sleepers-icon.png b/PickerVehicles/graphics/nakedrails/sleepers-icon.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/sleepers-icon.png rename to PickerVehicles/graphics/nakedrails/sleepers-icon.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-diagonal-transparent.png b/PickerVehicles/graphics/nakedrails/straight-rail-diagonal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-diagonal-transparent.png rename to PickerVehicles/graphics/nakedrails/straight-rail-diagonal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-horizontal-transparent.png b/PickerVehicles/graphics/nakedrails/straight-rail-horizontal-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-horizontal-transparent.png rename to PickerVehicles/graphics/nakedrails/straight-rail-horizontal-transparent.png diff --git a/PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-vertical-transparent.png b/PickerVehicles/graphics/nakedrails/straight-rail-vertical-transparent.png similarity index 100% rename from PickerVehicles_1.1.3/graphics/nakedrails/straight-rail-vertical-transparent.png rename to PickerVehicles/graphics/nakedrails/straight-rail-vertical-transparent.png diff --git a/PickerVehicles_1.1.3/info.json b/PickerVehicles/info.json similarity index 100% rename from PickerVehicles_1.1.3/info.json rename to PickerVehicles/info.json diff --git a/PickerVehicles_1.1.3/locale/en/train_penalties_en.cfg b/PickerVehicles/locale/en/train_penalties_en.cfg similarity index 100% rename from PickerVehicles_1.1.3/locale/en/train_penalties_en.cfg rename to PickerVehicles/locale/en/train_penalties_en.cfg diff --git a/PickerVehicles_1.1.3/locale/en/vehicles_en.cfg b/PickerVehicles/locale/en/vehicles_en.cfg similarity index 100% rename from PickerVehicles_1.1.3/locale/en/vehicles_en.cfg rename to PickerVehicles/locale/en/vehicles_en.cfg diff --git a/PickerVehicles_1.1.3/prototypes/betterlights.lua b/PickerVehicles/prototypes/betterlights.lua similarity index 100% rename from PickerVehicles_1.1.3/prototypes/betterlights.lua rename to PickerVehicles/prototypes/betterlights.lua diff --git a/PickerVehicles_1.1.3/prototypes/nakedrails.lua b/PickerVehicles/prototypes/nakedrails.lua similarity index 100% rename from PickerVehicles_1.1.3/prototypes/nakedrails.lua rename to PickerVehicles/prototypes/nakedrails.lua diff --git a/PickerVehicles_1.1.3/prototypes/penalties.lua b/PickerVehicles/prototypes/penalties.lua similarity index 100% rename from PickerVehicles_1.1.3/prototypes/penalties.lua rename to PickerVehicles/prototypes/penalties.lua diff --git a/PickerVehicles_1.1.3/prototypes/unstoppabletrains.lua b/PickerVehicles/prototypes/unstoppabletrains.lua similarity index 100% rename from PickerVehicles_1.1.3/prototypes/unstoppabletrains.lua rename to PickerVehicles/prototypes/unstoppabletrains.lua diff --git a/PickerVehicles_1.1.3/prototypes/vehicles.lua b/PickerVehicles/prototypes/vehicles.lua similarity index 100% rename from PickerVehicles_1.1.3/prototypes/vehicles.lua rename to PickerVehicles/prototypes/vehicles.lua diff --git a/PickerVehicles_1.1.3/readme.md b/PickerVehicles/readme.md similarity index 100% rename from PickerVehicles_1.1.3/readme.md rename to PickerVehicles/readme.md diff --git a/PickerVehicles_1.1.3/scripts/nakedrails.lua b/PickerVehicles/scripts/nakedrails.lua similarity index 100% rename from PickerVehicles_1.1.3/scripts/nakedrails.lua rename to PickerVehicles/scripts/nakedrails.lua diff --git a/PickerVehicles_1.1.3/scripts/vehicles.lua b/PickerVehicles/scripts/vehicles.lua similarity index 100% rename from PickerVehicles_1.1.3/scripts/vehicles.lua rename to PickerVehicles/scripts/vehicles.lua diff --git a/PickerVehicles_1.1.3/settings.lua b/PickerVehicles/settings.lua similarity index 100% rename from PickerVehicles_1.1.3/settings.lua rename to PickerVehicles/settings.lua diff --git a/PickerVehicles_1.1.3/sounds/deltic_honk_1.ogg b/PickerVehicles/sounds/deltic_honk_1.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/deltic_honk_1.ogg rename to PickerVehicles/sounds/deltic_honk_1.ogg diff --git a/PickerVehicles_1.1.3/sounds/deltic_honk_2.ogg b/PickerVehicles/sounds/deltic_honk_2.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/deltic_honk_2.ogg rename to PickerVehicles/sounds/deltic_honk_2.ogg diff --git a/PickerVehicles_1.1.3/sounds/honk_2x.ogg b/PickerVehicles/sounds/honk_2x.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/honk_2x.ogg rename to PickerVehicles/sounds/honk_2x.ogg diff --git a/PickerVehicles_1.1.3/sounds/honk_long.ogg b/PickerVehicles/sounds/honk_long.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/honk_long.ogg rename to PickerVehicles/sounds/honk_long.ogg diff --git a/PickerVehicles_1.1.3/sounds/horn_honk.ogg b/PickerVehicles/sounds/horn_honk.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/horn_honk.ogg rename to PickerVehicles/sounds/horn_honk.ogg diff --git a/PickerVehicles_1.1.3/sounds/horn_xlong.ogg b/PickerVehicles/sounds/horn_xlong.ogg similarity index 100% rename from PickerVehicles_1.1.3/sounds/horn_xlong.ogg rename to PickerVehicles/sounds/horn_xlong.ogg diff --git a/PickerVehicles_1.1.3/thumbnail.png b/PickerVehicles/thumbnail.png similarity index 100% rename from PickerVehicles_1.1.3/thumbnail.png rename to PickerVehicles/thumbnail.png diff --git a/Picks-Inserter/changelog.txt b/Picks-Inserter/changelog.txt new file mode 100644 index 00000000..e35d84c3 --- /dev/null +++ b/Picks-Inserter/changelog.txt @@ -0,0 +1,75 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.110.5 +Date: 06.02.2023 + Features: + - Added cargo-wagon as target for set back (applies only to inserter cleanup planner). +--------------------------------------------------------------------------------------------------- +Version: 1.110.4 +Date: 03.02.2021 + Bugfixes: + - Fixed a bug that prevented the cleaning of the inserters if the train was in the "destination_full" status after leaving the station. + - Fixed a bug that prevented the cleaning of the inserters if the train was in the "wait_signal" status after leaving the station. +--------------------------------------------------------------------------------------------------- +Version: 1.110.3 +Date: 06.12.2020 + Bugfixes: + - Fixed a non-recoverable error occouring in some circumstates when starting a new game or loading a savegame. +--------------------------------------------------------------------------------------------------- +Version: 1.110.2 +Date: 05.12.2020 + Bugfixes: + - Fixed a bug that after loading a game, a mark was not deleted if the associated inserter was destroyed. + Info: + - With a custom-input (default: CONTROL + ALT + I or AltGr + I) orphaned marks can be removed in the game. +--------------------------------------------------------------------------------------------------- +Version: 1.110.1 +Date: 30.11.2020 + Bugfixes: + - Fixed mulitplayer desync related to imserters selected with the inserter cleanup planner + Locale: + - Updated language files + Graphics: + - Reworked icons for item and shortcut +--------------------------------------------------------------------------------------------------- +Version: 1.110.0 +Date: 23.11.2020 + Features: + - Update for game version 1.1 + Changes: + - Changed debugging behavior for better investigation + Optimisations: + - Some code optimizing in detecting if an inserter is stuck +--------------------------------------------------------------------------------------------------- +Version: 1.18.2 +Date: 26.08.2020 + Features: + - Update for game version 1.0 +--------------------------------------------------------------------------------------------------- +Version: 1.18.1 +Date: 15.02.2020 + Changes: + - Added a delay of 120 ticks for inserters marked by cleanup planer before it will be cleared again after it was successful cleared +--------------------------------------------------------------------------------------------------- +Version: 1.18.0 +Date: 22.01.2020 + Features: + - Update for game version 0.18 +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 26.12.2019 + Bugfixes: + - Corrected changelog file to show up with game's parser + - Fixed: Crafted things are no longer duplicated + - Fixed: If not using the inserter cleanup planner the player cursor is not affected anymore (e.g. by crafting something) + - Fixed debugging logik + Changes: + - Due to performance reasons reduced default value of "Selection: Maximum number per tick" from 25 to 10 +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 22.12.2019 + Info: + - Initial release + Locale: + - English, German are available. + License: + - GNU GPLv3 \ No newline at end of file diff --git a/Picks-Inserter/control.lua b/Picks-Inserter/control.lua new file mode 100644 index 00000000..47b7507b --- /dev/null +++ b/Picks-Inserter/control.lua @@ -0,0 +1,624 @@ +--[[ Copyright (c) 2019 - 2023 Picklock + * Part of Picklocks Inserter + * control.lua + * Version 1.110.5.53 + * + * See LICENSE.MD in the project directory for license information. +--]] + +--variables + --general + + local PI_debug = false + local PI_print = false --set to false in multiplayer to avoid desyncs + local PI_log = false + + local PI_general ={ + name = "Picklocks Inserter", + version = "1.110.4", + selector = "PI_inserter_selector", + isControlSet = false, + isAdmin = false, + tick = 1 + } + + --databases + PI_db_inserters = {} + PI_db_internal ={ + index=0, + cpt=10 --purges per tick + } + + --internal settings + local PI_type = { + assembler = "assembling-machine", + car = "car", + cargo = "cargo-wagon", + chest = "container", + furnace = "furnace", + inserter = "inserter", + item = "item-entity", + lab = "lab", + log_chest = "logistic-container", + miner = "mining-drill", + num = "number", + tab = "table" + } + + local PI_set = { + unlock = "PI_temp_unlock", + clear = "PI_clear_inserter", + sel = "PI_target_selection", + keep_sel = "PI_keep_selected", + mark = "PI_set_mark", + clear_max = "PI_clear_max", + train_stop = "PI_target_train_stop", + width = "PI_lines_to_check", + length = "PI_extend_length" + } + + --mod settings + local PI_temp_unlock = settings.global[PI_set.unlock].value + local PI_clear_inserter = settings.global[PI_set.clear].value + local PI_target_selection = settings.global[PI_set.sel].value + local PI_keep_selected = settings.global[PI_set.keep_sel].value + local PI_set_mark = settings.global[PI_set.mark].value + local PI_clear_max = settings.global[PI_set.clear_max].value + local PI_target_train_stop = settings.global[PI_set.train_stop].value + local PI_lines_to_check = settings.global[PI_set.width].value + local PI_extend_length = settings.global[PI_set.length].value + +--functions + --debugging information + function print_debug(msg) + if PI_debug then + --if PI_print then game.print("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) end + if PI_print then + for _, myPlayer in pairs(game.players) do + myPlayer.print("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) + end + end + if PI_log and PI_general.isAdmin then log("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) end + end + end + + --load + local function PI_load(strSource) + --local bolValue = PI_print + --if strSource == "on_load" then PI_print = false end + --PI_print = false + --if PI_debug then print_debug("function started: PI_load - from " ..strSource) end + --PI_print = bolValue + if global.PI_db_inserters then PI_db_inserters = global.PI_db_inserters or {} end + if PI_db_inserters == nil then PI_db_inserters = {} end + if global.PI_db_internal then + PI_db_internal = global.PI_db_internal or + { + index=0, + cpt=10 --purges per tick + } + end + end + + --save +-- local function PI_save() +-- --if PI_debug then print_debug("function started: PI_save") end +-- --global[PI_db.inserter] = PI_db_inserters +-- end + + --set Controls + local function PI_set_controls (myPlayer) + --if PI_debug then print_debug("function started: PI_set_controls") end + myPlayer.set_shortcut_available("PI_inserter_selector_ui_sc",PI_target_selection) + --if PI_debug then print_debug("PI_set_controls: set PI_inserter_selector_ui_sc to " ..tostring(myPlayer.is_shortcut_available("PI_inserter_selector_ui_sc")).. " for player " ..myPlayer.name ) end + PI_general.isControlSet = true + end + + --rounding + local function round(x, n) + n = math.pow(10, n or 0) + x = x * n + if x >= 0 then x = math.floor(x + 0.5) else x = math.ceil(x - 0.5) end + return x / n + end + + --Calculates bottom center of inserter to place mark there + local function PI_get_Iserter_Position(myInserter) + local pos_left_top = myInserter.prototype.selection_box.left_top + local pos_right_bottom = myInserter.prototype.selection_box.right_bottom + --Calculating center of inserter selection box + local pos_center = (pos_left_top.x + pos_right_bottom.x) / 2 + --Calculating bottom center of the selection box + local x = pos_center + local y = pos_right_bottom.y + return {x = myInserter.position.x + x, y = myInserter.position.y + y} + end + + -- set mark + local function PI_set_inserter_mark(myInserter) + --if PI_debug then print_debug("function started: PI_set_inserter_mark") end + local myMark = myInserter.surface.create_entity{name = "PI_mark", position = PI_get_Iserter_Position(myInserter), force = myInserter.force} + myMark.graphics_variation = 1 + myMark.destructible = false + return myMark + end + + --remove nark + local function PI_remove_inserter_mark(myMark) + --if PI_debug then print_debug("function started: PI_remove_inserter_mark") end + if myMark and myMark.valid then + --if PI_debug then print_debug("PI_remove_inserter_mark: Removed mark") end + myMark.destroy() + end + end + + --modify nark if mod-settings were changed + local function PI_modify_all_marks (bolForce) + --if PI_debug then print_debug("function started: PI_modify_all_marks") end + --load DB from global + PI_db_inserters = global.PI_db_inserters + if PI_db_inserters and #PI_db_inserters > 0 then + if not bolForce and PI_set_mark and PI_db_inserters[1].mark ~= nil then return end + if not bolForce and not PI_set_mark and PI_db_inserters[1].mark == nil then return end + end + if PI_db_inserters ~= nil then + for i = #PI_db_inserters, 1, -1 do + if PI_set_mark then + PI_db_inserters[i].mark = PI_set_inserter_mark (PI_db_inserters[i].inserter) + else + PI_remove_inserter_mark (PI_db_inserters[i].mark) + PI_db_inserters[i].mark = nil + end + end + end + --save DB to global + global.PI_db_inserters = PI_db_inserters + + end + + --put item stack into entity + local function PI_PutStackBack(stack, entity) + --if PI_debug then print_debug("function started: PI_PutStackBack") end + if entity.type == PI_type.chest or entity.type == PI_type.log_chest then + --if PI_debug then print_debug("entity.type: container or logistic-container") end + if PI_temp_unlock then + --if PI_debug then print_debug("settings: PI_temp_unlock enabled") end + local entityInv = entity.get_inventory(1) + local entityInvBar = entityInv.get_bar() + entityInv.set_bar() + stack.count = stack.count - entity.insert(stack) + entityInv.set_bar(entityInvBar) + else + stack.count = stack.count - entity.insert(stack) + end + elseif entity.type == PI_type.assembler or entity.type == PI_type.furnace then + --if PI_debug then print_debug("entity.type: assembling-machine or furnance") end + stack.count = stack.count - entity.get_inventory(3).insert(stack) + elseif entity.type == PI_type.miner or entity.type == PI_type.cargo then + --if PI_debug then print_debug("entity.type: mining-drill or cargo-wagon") end + stack.count = stack.count - entity.get_inventory(1).insert(stack) + elseif entity.type == PI_type.car or entity.type == PI_type.lab then + --if PI_debug then print_debug("entity.type: car or lab") end + stack.count = stack.count - entity.get_inventory(2).insert(stack) + elseif entity.type == PI_type.cargo or entity.type == PI_type.log_chest then + --if PI_debug then print_debug("entity.type: cargo-wagon") end + if PI_temp_unlock then + --if PI_debug then print_debug("settings: PI_temp_unlock enabled") end + local entityInv = entity.get_inventory(1) + local entityInvBar = entityInv.get_bar() + entityInv.set_bar() + stack.count = stack.count - entity.insert(stack) + entityInv.set_bar(entityInvBar) + else + stack.count = stack.count - entity.insert(stack) + end + end + --if PI_debug then print_debug("PI_PutStackBack - stack.count: " ..tostring(stack.count)) end + if stack.valid_for_read then + --if PI_debug then print_debug("Stack could not be set back complete: " ..stack.count.. " " ..stack.name) end + if PI_clear_inserter then + --Delete items in hand of inserter + if entity.type == PI_type.cargo then return end --exclude pickup entity "cargo-wagon" + --if PI_debug then print_debug("settings: PI_clear_inserter enabled") end + stack.clear() + --if PI_debug then print_debug("Items in hand of inserter deleted") end + end + else + --if PI_debug then print_debug("Stack was cleared succsessful") end + end + + end + + --check inserter to be struck + function PI_checkInserterIsStuck(myInserter) + --if PI_debug then print_debug("function started: PI_checkInserterIsStuck") end + local myPickupTarget = myInserter.pickup_target + if myPickupTarget == nil then return end + if myInserter.held_stack.valid_for_read and myInserter.drop_position.x == myInserter.held_stack_position.x and myInserter.drop_position.y == myInserter.held_stack_position.y then + --if PI_debug then print_debug("To be cleared: " ..myInserter.name.. "(" ..myInserter.type.. "/Pos:" ..myInserter.position.x.."/" ..myInserter.position.y.. "/Stack:" ..myInserter.held_stack.count.. " " ..myInserter.held_stack.name.. ")") end + PI_PutStackBack(myInserter.held_stack, myPickupTarget) + end + end + + --add inserter to inserter list + local function PI_addInserterToDB(myInserter) + --if PI_debug then print_debug("function started: PI_addInserterToDB") end + --load DB from global + PI_db_inserters = global.PI_db_inserters + if PI_db_inserters and #PI_db_inserters > 0 then + for i = #PI_db_inserters, 1, -1 do + if PI_db_inserters[i].inserter == myInserter then + --if PI_debug then print_debug("PI_addInserterToDB: Inserter already in DB") end + return + end + end + end + local myMark = nil + --set mark + if PI_set_mark then myMark = PI_set_inserter_mark(myInserter) end + --add inserter + if PI_db_inserters == nil then PI_db_inserters = {} end + table.insert(PI_db_inserters, {inserter = myInserter, mark = myMark, tick = 1}) -- added tick + --if PI_debug then print_debug("PI_addInserterToDB: Inserter added to DB") end + --save DB to global + global.PI_db_inserters = PI_db_inserters + end + + --remove inserter from inserter list + local function PI_remInserterFromDB(myInserter, intIndex) + --if PI_debug then print_debug("function started: PI_remInserterFromDB") end + --load DB from global + PI_db_inserters = global.PI_db_inserters + if intIndex then + --if PI_debug then print_debug("PI_remInserterFromDB: Index given") end + --remove mark + PI_remove_inserter_mark (PI_db_inserters[intIndex].mark) + table.remove(PI_db_inserters, intIndex) + --save DB to global + global.PI_db_inserters = PI_db_inserters + --if PI_debug then print_debug("PI_remInserterFromDB: Inserter removed from DB") end + else + --if PI_debug then print_debug("PI_remInserterFromDB: Inserter given") end + for i, myDBInserter in pairs(PI_db_inserters) do + while PI_db_inserters[i] == nil do table.remove(PI_db_inserters, i) end + --save DB to global + global.PI_db_inserters = PI_db_inserters + if PI_db_inserters[i].inserter == myInserter then + --if PI_debug then print_debug("PI_remInserterFromDB: Inserter detected in DB") end + PI_remInserterFromDB(myDBInserter, i) + return + end + end + end + end + + --parse entity list and return only items with set type = inserter + local function PI_parseSelectedEntityList(selEntities, myType, includeInactive) + --if PI_debug then print_debug("function started: PI_parseSelectedEntityList") end + local myTable = {} + includeInactive = (includeInactive == true) and (myType ~= nil) + for i, myEntity in pairs(selEntities) do + if myEntity.valid and (myType == nil or myEntity.type == myType) and (includeInactive or myEntity.active) then + table.insert(myTable, myEntity) + end + end + return myTable + end + + --parse inserter list + local function PI_parseInserterList(myTick) + --if PI_debug then print_debug("function started: PI_parseInserterList") end + --load DB from global + PI_db_inserters = global.PI_db_inserters + if global.PI_db_internal then PI_db_internal = global.PI_db_internal end + if PI_db_inserters and #PI_db_inserters > 0 then + if PI_db_internal.index == 0 or PI_db_internal.index >= #PI_db_inserters then + PI_db_internal.cpt = PI_clear_max + PI_db_internal.index = 0 + end + local i = PI_db_internal.index + 1 + while i <= (PI_db_internal.index + PI_db_internal.cpt) and i <= #PI_db_inserters do + + if PI_db_inserters[i] and PI_db_inserters[i].inserter and PI_db_inserters[i].inserter.valid then + if myTick > (PI_db_inserters[i].tick + 120) then + PI_checkInserterIsStuck (PI_db_inserters[i].inserter) + if PI_keep_selected then + PI_db_inserters[i].tick = myTick + i = i + 1 + else + --if PI_debug then print_debug("PI_parseInserterList: raised PI_remInserterFromDB") end + PI_remInserterFromDB(_, i) + end + else + i = i + 1 + end + else + PI_remInserterFromDB(_, i) + end + end + PI_db_internal.index = PI_db_internal.index + PI_db_internal.cpt + end + --save DB to global + global.PI_db_inserters = PI_db_inserters + global.PI_db_internal = PI_db_internal + end + + -- get Inserter around wagon + -- code modified from Shia Inserter Cleaner mod by Shia https://mods.factorio.com/mod/shia-clear-inserter + local function PI_getInsertersAroundWagon(myWagon) + --if PI_debug then print_debug("function started: PI_getInsertersAroundWagon") end + local inDirection = round(myWagon.orientation, 3) % 0.5 + local wagonArea = {} + local px = round(myWagon.position.x, 2) + local py = round(myWagon.position.y, 2) + if inDirection == 0.25 then + wagonArea = { + { + px - 3 - PI_extend_length, + py - 1 - PI_lines_to_check + + }, + { + px + 3 + PI_extend_length, + py + 1 + PI_lines_to_check + } + } + --if PI_debug then print_debug("Got area around cargo-wagon in driection "..inDirection) end + elseif inDirection == 0 then + wagonArea = { + { + px - 1 - PI_lines_to_check, + py - 3 + PI_extend_length + }, + { + px + 1 + PI_lines_to_check, + py + 3 + PI_extend_length + } + } + --if PI_debug then print_debug("Got area around cargo-wagon in driection "..inDirection) end + else + wagonArea = { + { + px, + py + }, + { + px, + py + } + } + --if PI_debug then print_debug("Cargo-wagon is not in a valid direction! Direction: "..inDirection) end + end + PI_inserters = myWagon.surface.find_entities_filtered({area=wagonArea, type = PI_type.inserter}) + --if PI_debug then print_debug("Filtered inserters around cargo-wagon") end + for i,myInserter in pairs(PI_inserters) do + --if PI_debug then print_debug("Detected: " ..myInserter.name.. "(" ..myInserter.type.. "/" ..myInserter.position.x.."/" ..myInserter.position.y..")") end + PI_checkInserterIsStuck(myInserter) + end + + end + + -- get PI_inserter_selector in player hand + local function PI_get_PI_inserter_selector (myPlayer) + --if PI_debug then print_debug("function started: PI_get_PI_inserter_selector") end + if PI_target_selection then + --if PI_debug then print_debug("PI_get_PI_inserter_selector: Inserter purge planer enabled - crafting inserter purge planer") end + --if myPlayer.clean_cursor() then -- bis V1.0 + if myPlayer.clear_cursor() then -- ab V1.1 + myPlayer.cursor_stack.set_stack({name="PI_inserter_selector", count=1}) + end + end + + end + + -- remove all mark + local function PI_remove_all_inserter_mark() + --if PI_debug then print_debug("function started: PI_remove_all_inserter_mark") end + --get all marks + local pi_db_mark = game.surfaces[1].find_entities_filtered{name = "PI_mark"} + --if PI_debug then print_debug("PI_remove_all_inserter_mark: fount marks: "..tostring(#pi_db_mark)) end + --delete marks + for _, myMark in pairs(pi_db_mark) do + myMark.destroy() + end + end + + +-- handler + + --load + script.on_init(function () + PI_load ("on_init") + PI_remove_all_inserter_mark() + end) + + script.on_load(function () + PI_load ("on_load") + end) + + --CHeck if Mod-Settings or Mod-Version were changed since last load + script.on_configuration_changed(function(myData) + --ConfigurationChangedData + --if PI_debug then print_debug("started script: on_configuration_changed") end + local bolIsThisMod = false + --if PI_debug then print_debug("on_configuration_changed: " ..tostring(myData.mod_startup_settings_changed)) end + for myMod, myVersion in pairs(myData.mod_changes) do + if myMod == "Picks-Inserter" then + --if PI_debug then print_debug("on_configuration_changed: Mod gefunden: " ..myMod.. " " ..myVersion.new_version) end + bolIsThisMod = true + end + end + + if myData.mod_startup_settings_changed or bolIsThisMod then + --if PI_debug then print_debug("on_configuration_changed: update values for mod settings") end + PI_temp_unlock = settings.global[PI_set.unlock].value + PI_clear_inserter = settings.global[PI_set.clear].value + PI_target_selection = settings.global[PI_set.sel].value + PI_keep_selected = settings.global[PI_set.keep_sel].value + PI_set_mark = settings.global[PI_set.mark].value + PI_clear_max = settings.global[PI_set.clear_max].value + PI_target_train_stop = settings.global[PI_set.train_stop].value + PI_lines_to_check = settings.global[PI_set.width].value + PI_extend_length = settings.global[PI_set.length].value + end + end) + + --mod setting + script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + --if PI_debug then print_debug("raised event: on_runtime_mod_setting_changed") end + if not event or not event.player_index then return end + --PI_temp_unlock + if event.setting == PI_set.unlock then PI_temp_unlock = settings.global[PI_set.unlock].value end + --PI_clear_inserter + if event.setting == PI_set.clear then PI_clear_inserter = settings.global[PI_set.clear].value end + --PI_target_selection + if event.setting == PI_set.sel then PI_target_selection = settings.global[PI_set.sel].value end + --PI_keep_selected + if event.setting == PI_set.keep_sel then PI_keep_selected = settings.global[PI_set.keep_sel].value end + --PI_set_mark + if event.setting == PI_set.mark then + PI_set_mark = settings.global[PI_set.mark].value + PI_modify_all_marks (false) + end + --PI_clear_max + if event.setting == PI_set.clear_max then PI_clear_max = settings.global[PI_set.clear_max].value end + --PI_target_train_stop + if event.setting == PI_set.train_stop then PI_target_train_stop = settings.global[PI_set.train_stop].value end + --PI_temp_unlock + if event.setting == PI_set.width then PI_lines_to_check = settings.global[PI_set.width].value end + --PI_extend_length + if event.setting == PI_set.length then PI_extend_length = settings.global[PI_set.length].value end + --Set controls + PI_set_controls(game.players[event.player_index]) + + end) + + --player_created + script.on_event(defines.events.on_player_created, function(event) + PI_general.isAdmin = game.players[event.player_index].admin + --if PI_debug then print_debug("raised event: on_player_joined_game") end + PI_set_controls(game.players[event.player_index]) + end) + + + --player_joined_game + script.on_event(defines.events.on_player_joined_game, function(event) + PI_general.isAdmin = game.players[event.player_index].admin + --if PI_debug then print_debug("raised event: on_player_joined_game") end + PI_set_controls(game.players[event.player_index]) + end) + + --train state + -- 0 = defines.train_state.on_the_path Normal state -- following the path. + -- 1 = defines.train_state.path_lost Had path and lost it -- must stop. + -- 2 = defines.train_state.no_schedule Doesn't have anywhere to go. + -- 3 = defines.train_state.no_path Has no path and is stopped. + -- 4 = defines.train_state.arrive_signal Braking before a rail signal. + -- 5 = defines.train_state.wait_signal Waiting at a signal. + -- 6 = defines.train_state.arrive_station Braking before a station. + -- 7 = defines.train_state.wait_station Waiting at a station. + -- 8 = defines.train_state.manual_control_stop Switched to manual control and has to stop. + -- 9 = defines.train_state.manual_control Can move if user explicitly sits in and rides the train. + --1ß = defines.train_state.destination_full Same as no_path but all candidate train stops are full + script.on_event(defines.events.on_train_changed_state, function(event, old_state) + --if PI_debug then + -- print_debug("raised event: on_train_changed_state fired by train " ..tostring(event.train.id)) + -- print_debug("train.state: " ..tostring(event.train.state)) + -- print_debug("old_state: " ..tostring(event.old_state)) + --end + if PI_target_train_stop then + --if PI_debug then print_debug("settings: PI_target_train_stop enabled") end + --if event.train.state == 0 then + if event.train.state == 0 or event.train.state == 3 or event.train.state == 5 or event.train.state == 10 then + if event.old_state == 7 then + if next(event.train.get_contents()) then + --if PI_debug then print_debug("Detect cargo_wagons connected to train") end + for i, myWagon in pairs(event.train.cargo_wagons) do + --if PI_debug then print_debug("Detected: " ..myWagon.name.. "(" ..myWagon.type.. "/" ..myWagon.position.x.."/" ..myWagon.position.y..")") end + PI_getInsertersAroundWagon(myWagon) + end + end + end + end + end + end) + + --select inserter + script.on_event(defines.events.on_player_selected_area, function(event) + --if PI_debug then print_debug("raised event: on_player_selected_area") end + if event.item and event.item == PI_general.selector then + --if PI_debug then print_debug("PI_inserter_selector detected") end + local myTable = PI_parseSelectedEntityList(event.entities, PI_type.inserter, false) + if #myTable then + --if PI_debug then print_debug(table_size(myTable).. " Inserters selected") end + for i, myInserter in pairs(myTable) do + PI_addInserterToDB(myInserter) + end +-- PI_save() + end + end + end) + + --deselect inserters with alt + script.on_event(defines.events.on_player_alt_selected_area, function(event) + --if PI_debug then print_debug("raised event: on_player_alt_selected_area") end + if event.item and event.item == PI_general.selector then + --if PI_debug then print_debug("PI_inserter_selector detected") end + local myTable = PI_parseSelectedEntityList(event.entities, PI_type.inserter, true) + if #myTable then + --if PI_debug then print_debug(table_size(myTable).. " Inserters selected") end + for i, myInserter in pairs(myTable) do + PI_remInserterFromDB(myInserter) + end +-- PI_save() + end + end + end) + + --tick + script.on_event(defines.events.on_tick, function(event) + --Set controls + if not PI_general.isControlSet then + --if PI_debug then print_debug("raised event: on_tick: not PI_general.isControlSet") end + PI_general.isAdmin = true + PI_set_controls(game.players[1]) + PI_modify_all_marks (false) + end + --Work on Inserter List + ----if PI_debug then print_debug("raised event: on_tick") end + PI_parseInserterList(event.tick) + end) + + --Control pressed inserter selector + script.on_event("PI_inserter_selector_ui", function(event) + --if PI_debug then print_debug("raised event: PI_inserter_selector_ui") end + PI_get_PI_inserter_selector (game.players[event.player_index]) + end) + + --Control pressed delete all marks + script.on_event("pi-orphan-mark-del-key", function(event) + --if PI_debug then print_debug("raised event: pi-orphan-mark-del-key") end + PI_remove_all_inserter_mark() + PI_modify_all_marks (true) + end) + + --Shrotcut selected + script.on_event(defines.events.on_lua_shortcut, function(event) + --if PI_debug then print_debug("raised event: on_lua_shortcut") end + if (event.prototype_name == "PI_inserter_selector_ui_sc") then + local myPlayer = game.players[event.player_index] + --if PI_debug then print_debug("on_lua_shortcut: PI_inserter_selector_ui_sc detected") end + PI_get_PI_inserter_selector (game.players[event.player_index]) + end + end) + + --Remove entity + --local e=defines.events + --local remove_events = {e.on_player_mined_entity, e.on_robot_pre_mined, e.on_entity_died, e.script_raised_destroy} + --script.on_event(remove_events, function(event) + -- if PI_debug then print_debug("raised event: remove_events") end + -- local myEntity = event.entity + -- if myEntity.type == PI_type.inserter then PI_remInserterFromDB(myEntity) end + + --end) + diff --git a/Picks-Inserter/data.lua b/Picks-Inserter/data.lua new file mode 100644 index 00000000..35dbdd59 --- /dev/null +++ b/Picks-Inserter/data.lua @@ -0,0 +1,14 @@ +--[[ Copyright (c) 2019 - 2023 Picklock + * Part of Picklocks Inserter + * data.lua + * Version 1.110.5.53 + * + * See LICENSE.MD in the project directory for license information. +--]] + +myModName="__Picks-Inserter__" + +require("prototypes.selector") +require("prototypes.mark") +require("prototypes.custom-inputs") + diff --git a/Picks-Inserter_1.110.6/graphics/icons/PI_selector_item.png b/Picks-Inserter/graphics/icons/PI_selector_item.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/icons/PI_selector_item.png rename to Picks-Inserter/graphics/icons/PI_selector_item.png diff --git a/Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x24.png b/Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x24.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x24.png rename to Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x24.png diff --git a/Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x24_dis.png b/Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x24_dis.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x24_dis.png rename to Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x24_dis.png diff --git a/Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x32.png b/Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x32.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x32.png rename to Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x32.png diff --git a/Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x32_dis.png b/Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x32_dis.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/icons/shortcut-toolbar/mip/pi_selector_x32_dis.png rename to Picks-Inserter/graphics/icons/shortcut-toolbar/mip/pi_selector_x32_dis.png diff --git a/Picks-Inserter_1.110.6/graphics/mark/PI_mark_32.png b/Picks-Inserter/graphics/mark/PI_mark_32.png similarity index 100% rename from Picks-Inserter_1.110.6/graphics/mark/PI_mark_32.png rename to Picks-Inserter/graphics/mark/PI_mark_32.png diff --git a/Picks-Inserter_1.110.6/info.json b/Picks-Inserter/info.json similarity index 100% rename from Picks-Inserter_1.110.6/info.json rename to Picks-Inserter/info.json diff --git a/Picks-Inserter_1.110.6/locale/en/locale_en.cfg b/Picks-Inserter/locale/en/locale_en.cfg similarity index 100% rename from Picks-Inserter_1.110.6/locale/en/locale_en.cfg rename to Picks-Inserter/locale/en/locale_en.cfg diff --git a/Picks-Inserter_1.110.6/prototypes/custom-inputs.lua b/Picks-Inserter/prototypes/custom-inputs.lua similarity index 93% rename from Picks-Inserter_1.110.6/prototypes/custom-inputs.lua rename to Picks-Inserter/prototypes/custom-inputs.lua index 63e919af..98161a16 100644 --- a/Picks-Inserter_1.110.6/prototypes/custom-inputs.lua +++ b/Picks-Inserter/prototypes/custom-inputs.lua @@ -1,7 +1,7 @@ --[[ Copyright (c) 2019 - 2023 Picklock * Part of Picklocks Inserter * custom-inputs.lua - * Version 1.110.6.54 + * Version 1.110.5.53 * * See LICENSE.MD in the project directory for license information. --]] diff --git a/Picks-Inserter_1.110.6/prototypes/mark.lua b/Picks-Inserter/prototypes/mark.lua similarity index 97% rename from Picks-Inserter_1.110.6/prototypes/mark.lua rename to Picks-Inserter/prototypes/mark.lua index 80b8a61a..d64414a4 100644 --- a/Picks-Inserter_1.110.6/prototypes/mark.lua +++ b/Picks-Inserter/prototypes/mark.lua @@ -1,7 +1,7 @@ --[[ Copyright (c) 2019 - 2023 Picklock * Part of Picklocks Inserter * mark.lua - * Version 1.110.6.54 + * Version 1.110.5.53 * * See LICENSE.MD in the project directory for license information. --]] diff --git a/Picks-Inserter_1.110.6/prototypes/selector.lua b/Picks-Inserter/prototypes/selector.lua similarity index 99% rename from Picks-Inserter_1.110.6/prototypes/selector.lua rename to Picks-Inserter/prototypes/selector.lua index c7c8ff2d..aaef2f81 100644 --- a/Picks-Inserter_1.110.6/prototypes/selector.lua +++ b/Picks-Inserter/prototypes/selector.lua @@ -1,7 +1,7 @@ --[[ Copyright (c) 2019 - 2023 Picklock * Part of Picklocks Inserter * selector.lua - * Version 1.110.6.54 + * Version 1.110.5.53 * * See LICENSE.MD in the project directory for license information. --]] diff --git a/Picks-Inserter/settings.lua b/Picks-Inserter/settings.lua new file mode 100644 index 00000000..6cdb11a4 --- /dev/null +++ b/Picks-Inserter/settings.lua @@ -0,0 +1,88 @@ +--[[ Copyright (c) 2019 - 2023 Picklock + * Part of Picklocks Inserter + * settings.lua + * Version 1.110.5.53 + * + * See LICENSE.MD in the project directory for license information. +--]] + +data:extend( +{ + { + --Temporary unlock locked slots in chests + type = "bool-setting", + name = "PI_temp_unlock", + setting_type = "runtime-global", + default_value = false, + order = "a[common]-a" + }, + { + --Destroy items in hand when they not could be put back to source + type = "bool-setting", + name = "PI_clear_inserter", + setting_type = "runtime-global", + default_value = false, + order = "a[common]-c" + }, + { + --Clean selected inserters + type = "bool-setting", + name = "PI_target_selection", + setting_type = "runtime-global", + default_value = true, + order = "b[select]-a" + }, + { + --Keep selected inserters in database after clearing + type = "bool-setting", + name = "PI_keep_selected", + setting_type = "runtime-global", + default_value = false, + order = "b[select]-b" + }, + { + --Mark selected inserters + type = "bool-setting", + name = "PI_set_mark", + setting_type = "runtime-global", + default_value = true, + order = "b[select]-c" + }, + { + --Maximum inserters cleand by tick + type = "int-setting", + name = "PI_clear_max", + setting_type = "runtime-global", + default_value = 10, + minimum_value = 1, + maximum_value = 120, + order = "b[select]-d" + }, + { + --Clean inserters around cargo-wagons + type = "bool-setting", + name = "PI_target_train_stop", + setting_type = "runtime-global", + default_value = true, + order = "t[train]-a" + }, + { + --Lines to search for inserters around cargo-wagons + type = "int-setting", + name = "PI_lines_to_check", + setting_type = "runtime-global", + default_value = 1, + allowed_values = {1, 2, 3}, + order = "t[train]-c" + }, + { + --Extended lenght to search for inserters around cargo-wagons + type = "int-setting", + name = "PI_extend_length", + setting_type = "runtime-global", + default_value = 0, + allowed_values = {0, 1, 2, 3}, + order = "t[train]-e" + } +} +) \ No newline at end of file diff --git a/Picks-Inserter_1.110.6/thumbnail.png b/Picks-Inserter/thumbnail.png similarity index 100% rename from Picks-Inserter_1.110.6/thumbnail.png rename to Picks-Inserter/thumbnail.png diff --git a/Picks-Inserter_1.110.6/changelog.txt b/Picks-Inserter_1.110.6/changelog.txt deleted file mode 100644 index d6c1a86b..00000000 --- a/Picks-Inserter_1.110.6/changelog.txt +++ /dev/null @@ -1,80 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.110.6 -Date: 01.03.2023 - Bugfixes: - - Fixed a bug causing a non-recoverable error with the event on_runtime_mod_setting_changed. ---------------------------------------------------------------------------------------------------- -Version: 1.110.5 -Date: 07.02.2023 - Features: - - Added cargo-wagon as target for set back (applies only to inserter cleanup planner). ---------------------------------------------------------------------------------------------------- -Version: 1.110.4 -Date: 03.02.2021 - Bugfixes: - - Fixed a bug that prevented the cleaning of the inserters if the train was in the "destination_full" status after leaving the station. - - Fixed a bug that prevented the cleaning of the inserters if the train was in the "wait_signal" status after leaving the station. ---------------------------------------------------------------------------------------------------- -Version: 1.110.3 -Date: 06.12.2020 - Bugfixes: - - Fixed a non-recoverable error occouring in some circumstates when starting a new game or loading a savegame. ---------------------------------------------------------------------------------------------------- -Version: 1.110.2 -Date: 05.12.2020 - Bugfixes: - - Fixed a bug that after loading a game, a mark was not deleted if the associated inserter was destroyed. - Info: - - With a custom-input (default: CONTROL + ALT + I or AltGr + I) orphaned marks can be removed in the game. ---------------------------------------------------------------------------------------------------- -Version: 1.110.1 -Date: 30.11.2020 - Bugfixes: - - Fixed mulitplayer desync related to inserters selected with the inserter cleanup planner - Locale: - - Updated language files - Graphics: - - Reworked icons for item and shortcut ---------------------------------------------------------------------------------------------------- -Version: 1.110.0 -Date: 23.11.2020 - Features: - - Update for game version 1.1 - Changes: - - Changed debugging behavior for better investigation - Optimisations: - - Some code optimizing in detecting if an inserter is stuck ---------------------------------------------------------------------------------------------------- -Version: 1.18.2 -Date: 26.08.2020 - Features: - - Update for game version 1.0 ---------------------------------------------------------------------------------------------------- -Version: 1.18.1 -Date: 15.02.2020 - Changes: - - Added a delay of 120 ticks for inserters marked by cleanup planer before it will be cleared again after it was successful cleared ---------------------------------------------------------------------------------------------------- -Version: 1.18.0 -Date: 22.01.2020 - Features: - - Update for game version 0.18 ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 26.12.2019 - Bugfixes: - - Corrected changelog file to show up with game's parser - - Fixed: Crafted things are no longer duplicated - - Fixed: If not using the inserter cleanup planner the player cursor is not affected anymore (e.g. by crafting something) - - Fixed debugging logik - Changes: - - Due to performance reasons reduced default value of "Selection: Maximum number per tick" from 25 to 10 ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 22.12.2019 - Info: - - Initial release - Locale: - - English, German are available. - License: - - GNU GPLv3 \ No newline at end of file diff --git a/Picks-Inserter_1.110.6/control.lua b/Picks-Inserter_1.110.6/control.lua deleted file mode 100644 index 37cff4d4..00000000 --- a/Picks-Inserter_1.110.6/control.lua +++ /dev/null @@ -1,624 +0,0 @@ ---[[ Copyright (c) 2019 - 2023 Picklock - * Part of Picklocks Inserter - * control.lua - * Version 1.110.6.54 - * - * See LICENSE.MD in the project directory for license information. ---]] - ---variables - --general - - local PI_debug = false - local PI_print = false --set to false in multiplayer to avoid desyncs - local PI_log = false - - local PI_general ={ - name = "Picklocks Inserter", - version = "1.110.4", - selector = "PI_inserter_selector", - isControlSet = false, - isAdmin = false, - tick = 1 - } - - --databases - PI_db_inserters = {} - PI_db_internal ={ - index=0, - cpt=10 --purges per tick - } - - --internal settings - local PI_type = { - assembler = "assembling-machine", - car = "car", - cargo = "cargo-wagon", - chest = "container", - furnace = "furnace", - inserter = "inserter", - item = "item-entity", - lab = "lab", - log_chest = "logistic-container", - miner = "mining-drill", - num = "number", - tab = "table" - } - - local PI_set = { - unlock = "PI_temp_unlock", - clear = "PI_clear_inserter", - sel = "PI_target_selection", - keep_sel = "PI_keep_selected", - mark = "PI_set_mark", - clear_max = "PI_clear_max", - train_stop = "PI_target_train_stop", - width = "PI_lines_to_check", - length = "PI_extend_length" - } - - --mod settings - local PI_temp_unlock = settings.global[PI_set.unlock].value - local PI_clear_inserter = settings.global[PI_set.clear].value - local PI_target_selection = settings.global[PI_set.sel].value - local PI_keep_selected = settings.global[PI_set.keep_sel].value - local PI_set_mark = settings.global[PI_set.mark].value - local PI_clear_max = settings.global[PI_set.clear_max].value - local PI_target_train_stop = settings.global[PI_set.train_stop].value - local PI_lines_to_check = settings.global[PI_set.width].value - local PI_extend_length = settings.global[PI_set.length].value - ---functions - --debugging information - function print_debug(msg) - if PI_debug then - --if PI_print then game.print("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) end - if PI_print then - for _, myPlayer in pairs(game.players) do - myPlayer.print("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) - end - end - if PI_log and PI_general.isAdmin then log("["..PI_general.name.." V" ..PI_general.version.. "]: "..msg) end - end - end - - --load - local function PI_load(strSource) - --local bolValue = PI_print - --if strSource == "on_load" then PI_print = false end - --PI_print = false - --if PI_debug then print_debug("function started: PI_load - from " ..strSource) end - --PI_print = bolValue - if global.PI_db_inserters then PI_db_inserters = global.PI_db_inserters or {} end - if PI_db_inserters == nil then PI_db_inserters = {} end - if global.PI_db_internal then - PI_db_internal = global.PI_db_internal or - { - index=0, - cpt=10 --purges per tick - } - end - end - - --save --- local function PI_save() --- --if PI_debug then print_debug("function started: PI_save") end --- --global[PI_db.inserter] = PI_db_inserters --- end - - --set Controls - local function PI_set_controls (myPlayer) - --if PI_debug then print_debug("function started: PI_set_controls") end - myPlayer.set_shortcut_available("PI_inserter_selector_ui_sc",PI_target_selection) - --if PI_debug then print_debug("PI_set_controls: set PI_inserter_selector_ui_sc to " ..tostring(myPlayer.is_shortcut_available("PI_inserter_selector_ui_sc")).. " for player " ..myPlayer.name ) end - PI_general.isControlSet = true - end - - --rounding - local function round(x, n) - n = math.pow(10, n or 0) - x = x * n - if x >= 0 then x = math.floor(x + 0.5) else x = math.ceil(x - 0.5) end - return x / n - end - - --Calculates bottom center of inserter to place mark there - local function PI_get_Iserter_Position(myInserter) - local pos_left_top = myInserter.prototype.selection_box.left_top - local pos_right_bottom = myInserter.prototype.selection_box.right_bottom - --Calculating center of inserter selection box - local pos_center = (pos_left_top.x + pos_right_bottom.x) / 2 - --Calculating bottom center of the selection box - local x = pos_center - local y = pos_right_bottom.y - return {x = myInserter.position.x + x, y = myInserter.position.y + y} - end - - -- set mark - local function PI_set_inserter_mark(myInserter) - --if PI_debug then print_debug("function started: PI_set_inserter_mark") end - local myMark = myInserter.surface.create_entity{name = "PI_mark", position = PI_get_Iserter_Position(myInserter), force = myInserter.force} - myMark.graphics_variation = 1 - myMark.destructible = false - return myMark - end - - --remove nark - local function PI_remove_inserter_mark(myMark) - --if PI_debug then print_debug("function started: PI_remove_inserter_mark") end - if myMark and myMark.valid then - --if PI_debug then print_debug("PI_remove_inserter_mark: Removed mark") end - myMark.destroy() - end - end - - --modify nark if mod-settings were changed - local function PI_modify_all_marks (bolForce) - --if PI_debug then print_debug("function started: PI_modify_all_marks") end - --load DB from global - PI_db_inserters = global.PI_db_inserters - if PI_db_inserters and #PI_db_inserters > 0 then - if not bolForce and PI_set_mark and PI_db_inserters[1].mark ~= nil then return end - if not bolForce and not PI_set_mark and PI_db_inserters[1].mark == nil then return end - end - if PI_db_inserters ~= nil then - for i = #PI_db_inserters, 1, -1 do - if PI_set_mark then - PI_db_inserters[i].mark = PI_set_inserter_mark (PI_db_inserters[i].inserter) - else - PI_remove_inserter_mark (PI_db_inserters[i].mark) - PI_db_inserters[i].mark = nil - end - end - end - --save DB to global - global.PI_db_inserters = PI_db_inserters - - end - - --put item stack into entity - local function PI_PutStackBack(stack, entity) - --if PI_debug then print_debug("function started: PI_PutStackBack") end - if entity.type == PI_type.chest or entity.type == PI_type.log_chest then - --if PI_debug then print_debug("entity.type: container or logistic-container") end - if PI_temp_unlock then - --if PI_debug then print_debug("settings: PI_temp_unlock enabled") end - local entityInv = entity.get_inventory(1) - local entityInvBar = entityInv.get_bar() - entityInv.set_bar() - stack.count = stack.count - entity.insert(stack) - entityInv.set_bar(entityInvBar) - else - stack.count = stack.count - entity.insert(stack) - end - elseif entity.type == PI_type.assembler or entity.type == PI_type.furnace then - --if PI_debug then print_debug("entity.type: assembling-machine or furnance") end - stack.count = stack.count - entity.get_inventory(3).insert(stack) - elseif entity.type == PI_type.miner or entity.type == PI_type.cargo then - --if PI_debug then print_debug("entity.type: mining-drill or cargo-wagon") end - stack.count = stack.count - entity.get_inventory(1).insert(stack) - elseif entity.type == PI_type.car or entity.type == PI_type.lab then - --if PI_debug then print_debug("entity.type: car or lab") end - stack.count = stack.count - entity.get_inventory(2).insert(stack) - elseif entity.type == PI_type.cargo or entity.type == PI_type.log_chest then - --if PI_debug then print_debug("entity.type: cargo-wagon") end - if PI_temp_unlock then - --if PI_debug then print_debug("settings: PI_temp_unlock enabled") end - local entityInv = entity.get_inventory(1) - local entityInvBar = entityInv.get_bar() - entityInv.set_bar() - stack.count = stack.count - entity.insert(stack) - entityInv.set_bar(entityInvBar) - else - stack.count = stack.count - entity.insert(stack) - end - end - --if PI_debug then print_debug("PI_PutStackBack - stack.count: " ..tostring(stack.count)) end - if stack.valid_for_read then - --if PI_debug then print_debug("Stack could not be set back complete: " ..stack.count.. " " ..stack.name) end - if PI_clear_inserter then - --Delete items in hand of inserter - if entity.type == PI_type.cargo then return end --exclude pickup entity "cargo-wagon" - --if PI_debug then print_debug("settings: PI_clear_inserter enabled") end - stack.clear() - --if PI_debug then print_debug("Items in hand of inserter deleted") end - end - else - --if PI_debug then print_debug("Stack was cleared succsessful") end - end - - end - - --check inserter to be struck - function PI_checkInserterIsStuck(myInserter) - --if PI_debug then print_debug("function started: PI_checkInserterIsStuck") end - local myPickupTarget = myInserter.pickup_target - if myPickupTarget == nil then return end - if myInserter.held_stack.valid_for_read and myInserter.drop_position.x == myInserter.held_stack_position.x and myInserter.drop_position.y == myInserter.held_stack_position.y then - --if PI_debug then print_debug("To be cleared: " ..myInserter.name.. "(" ..myInserter.type.. "/Pos:" ..myInserter.position.x.."/" ..myInserter.position.y.. "/Stack:" ..myInserter.held_stack.count.. " " ..myInserter.held_stack.name.. ")") end - PI_PutStackBack(myInserter.held_stack, myPickupTarget) - end - end - - --add inserter to inserter list - local function PI_addInserterToDB(myInserter) - --if PI_debug then print_debug("function started: PI_addInserterToDB") end - --load DB from global - PI_db_inserters = global.PI_db_inserters - if PI_db_inserters and #PI_db_inserters > 0 then - for i = #PI_db_inserters, 1, -1 do - if PI_db_inserters[i].inserter == myInserter then - --if PI_debug then print_debug("PI_addInserterToDB: Inserter already in DB") end - return - end - end - end - local myMark = nil - --set mark - if PI_set_mark then myMark = PI_set_inserter_mark(myInserter) end - --add inserter - if PI_db_inserters == nil then PI_db_inserters = {} end - table.insert(PI_db_inserters, {inserter = myInserter, mark = myMark, tick = 1}) -- added tick - --if PI_debug then print_debug("PI_addInserterToDB: Inserter added to DB") end - --save DB to global - global.PI_db_inserters = PI_db_inserters - end - - --remove inserter from inserter list - local function PI_remInserterFromDB(myInserter, intIndex) - --if PI_debug then print_debug("function started: PI_remInserterFromDB") end - --load DB from global - PI_db_inserters = global.PI_db_inserters - if intIndex then - --if PI_debug then print_debug("PI_remInserterFromDB: Index given") end - --remove mark - PI_remove_inserter_mark (PI_db_inserters[intIndex].mark) - table.remove(PI_db_inserters, intIndex) - --save DB to global - global.PI_db_inserters = PI_db_inserters - --if PI_debug then print_debug("PI_remInserterFromDB: Inserter removed from DB") end - else - --if PI_debug then print_debug("PI_remInserterFromDB: Inserter given") end - for i, myDBInserter in pairs(PI_db_inserters) do - while PI_db_inserters[i] == nil do table.remove(PI_db_inserters, i) end - --save DB to global - global.PI_db_inserters = PI_db_inserters - if PI_db_inserters[i].inserter == myInserter then - --if PI_debug then print_debug("PI_remInserterFromDB: Inserter detected in DB") end - PI_remInserterFromDB(myDBInserter, i) - return - end - end - end - end - - --parse entity list and return only items with set type = inserter - local function PI_parseSelectedEntityList(selEntities, myType, includeInactive) - --if PI_debug then print_debug("function started: PI_parseSelectedEntityList") end - local myTable = {} - includeInactive = (includeInactive == true) and (myType ~= nil) - for i, myEntity in pairs(selEntities) do - if myEntity.valid and (myType == nil or myEntity.type == myType) and (includeInactive or myEntity.active) then - table.insert(myTable, myEntity) - end - end - return myTable - end - - --parse inserter list - local function PI_parseInserterList(myTick) - --if PI_debug then print_debug("function started: PI_parseInserterList") end - --load DB from global - PI_db_inserters = global.PI_db_inserters - if global.PI_db_internal then PI_db_internal = global.PI_db_internal end - if PI_db_inserters and #PI_db_inserters > 0 then - if PI_db_internal.index == 0 or PI_db_internal.index >= #PI_db_inserters then - PI_db_internal.cpt = PI_clear_max - PI_db_internal.index = 0 - end - local i = PI_db_internal.index + 1 - while i <= (PI_db_internal.index + PI_db_internal.cpt) and i <= #PI_db_inserters do - - if PI_db_inserters[i] and PI_db_inserters[i].inserter and PI_db_inserters[i].inserter.valid then - if myTick > (PI_db_inserters[i].tick + 120) then - PI_checkInserterIsStuck (PI_db_inserters[i].inserter) - if PI_keep_selected then - PI_db_inserters[i].tick = myTick - i = i + 1 - else - --if PI_debug then print_debug("PI_parseInserterList: raised PI_remInserterFromDB") end - PI_remInserterFromDB(_, i) - end - else - i = i + 1 - end - else - PI_remInserterFromDB(_, i) - end - end - PI_db_internal.index = PI_db_internal.index + PI_db_internal.cpt - end - --save DB to global - global.PI_db_inserters = PI_db_inserters - global.PI_db_internal = PI_db_internal - end - - -- get Inserter around wagon - -- code modified from Shia Inserter Cleaner mod by Shia https://mods.factorio.com/mod/shia-clear-inserter - local function PI_getInsertersAroundWagon(myWagon) - --if PI_debug then print_debug("function started: PI_getInsertersAroundWagon") end - local inDirection = round(myWagon.orientation, 3) % 0.5 - local wagonArea = {} - local px = round(myWagon.position.x, 2) - local py = round(myWagon.position.y, 2) - if inDirection == 0.25 then - wagonArea = { - { - px - 3 - PI_extend_length, - py - 1 - PI_lines_to_check - - }, - { - px + 3 + PI_extend_length, - py + 1 + PI_lines_to_check - } - } - --if PI_debug then print_debug("Got area around cargo-wagon in driection "..inDirection) end - elseif inDirection == 0 then - wagonArea = { - { - px - 1 - PI_lines_to_check, - py - 3 + PI_extend_length - }, - { - px + 1 + PI_lines_to_check, - py + 3 + PI_extend_length - } - } - --if PI_debug then print_debug("Got area around cargo-wagon in driection "..inDirection) end - else - wagonArea = { - { - px, - py - }, - { - px, - py - } - } - --if PI_debug then print_debug("Cargo-wagon is not in a valid direction! Direction: "..inDirection) end - end - PI_inserters = myWagon.surface.find_entities_filtered({area=wagonArea, type = PI_type.inserter}) - --if PI_debug then print_debug("Filtered inserters around cargo-wagon") end - for i,myInserter in pairs(PI_inserters) do - --if PI_debug then print_debug("Detected: " ..myInserter.name.. "(" ..myInserter.type.. "/" ..myInserter.position.x.."/" ..myInserter.position.y..")") end - PI_checkInserterIsStuck(myInserter) - end - - end - - -- get PI_inserter_selector in player hand - local function PI_get_PI_inserter_selector (myPlayer) - --if PI_debug then print_debug("function started: PI_get_PI_inserter_selector") end - if PI_target_selection then - --if PI_debug then print_debug("PI_get_PI_inserter_selector: Inserter purge planer enabled - crafting inserter purge planer") end - --if myPlayer.clean_cursor() then -- bis V1.0 - if myPlayer.clear_cursor() then -- ab V1.1 - myPlayer.cursor_stack.set_stack({name="PI_inserter_selector", count=1}) - end - end - - end - - -- remove all mark - local function PI_remove_all_inserter_mark() - --if PI_debug then print_debug("function started: PI_remove_all_inserter_mark") end - --get all marks - local pi_db_mark = game.surfaces[1].find_entities_filtered{name = "PI_mark"} - --if PI_debug then print_debug("PI_remove_all_inserter_mark: fount marks: "..tostring(#pi_db_mark)) end - --delete marks - for _, myMark in pairs(pi_db_mark) do - myMark.destroy() - end - end - - --- handler - - --load - script.on_init(function () - PI_load ("on_init") - PI_remove_all_inserter_mark() - end) - - script.on_load(function () - PI_load ("on_load") - end) - - --CHeck if Mod-Settings or Mod-Version were changed since last load - script.on_configuration_changed(function(myData) - --ConfigurationChangedData - --if PI_debug then print_debug("started script: on_configuration_changed") end - local bolIsThisMod = false - --if PI_debug then print_debug("on_configuration_changed: " ..tostring(myData.mod_startup_settings_changed)) end - for myMod, myVersion in pairs(myData.mod_changes) do - if myMod == "Picks-Inserter" then - --if PI_debug then print_debug("on_configuration_changed: Mod gefunden: " ..myMod.. " " ..myVersion.new_version) end - bolIsThisMod = true - end - end - - if myData.mod_startup_settings_changed or bolIsThisMod then - --if PI_debug then print_debug("on_configuration_changed: update values for mod settings") end - PI_temp_unlock = settings.global[PI_set.unlock].value - PI_clear_inserter = settings.global[PI_set.clear].value - PI_target_selection = settings.global[PI_set.sel].value - PI_keep_selected = settings.global[PI_set.keep_sel].value - PI_set_mark = settings.global[PI_set.mark].value - PI_clear_max = settings.global[PI_set.clear_max].value - PI_target_train_stop = settings.global[PI_set.train_stop].value - PI_lines_to_check = settings.global[PI_set.width].value - PI_extend_length = settings.global[PI_set.length].value - end - end) - - --mod setting - script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - --if PI_debug then print_debug("raised event: on_runtime_mod_setting_changed") end - if not event or not event.player_index then return end - --PI_temp_unlock - if event.setting == PI_set.unlock then PI_temp_unlock = settings.global[PI_set.unlock].value end - --PI_clear_inserter - if event.setting == PI_set.clear then PI_clear_inserter = settings.global[PI_set.clear].value end - --PI_target_selection - if event.setting == PI_set.sel then PI_target_selection = settings.global[PI_set.sel].value end - --PI_keep_selected - if event.setting == PI_set.keep_sel then PI_keep_selected = settings.global[PI_set.keep_sel].value end - --PI_set_mark - if event.setting == PI_set.mark then - PI_set_mark = settings.global[PI_set.mark].value - PI_modify_all_marks (false) - end - --PI_clear_max - if event.setting == PI_set.clear_max then PI_clear_max = settings.global[PI_set.clear_max].value end - --PI_target_train_stop - if event.setting == PI_set.train_stop then PI_target_train_stop = settings.global[PI_set.train_stop].value end - --PI_temp_unlock - if event.setting == PI_set.width then PI_lines_to_check = settings.global[PI_set.width].value end - --PI_extend_length - if event.setting == PI_set.length then PI_extend_length = settings.global[PI_set.length].value end - --Set controls - PI_set_controls(game.players[event.player_index]) - - end) - - --player_created - script.on_event(defines.events.on_player_created, function(event) - PI_general.isAdmin = game.players[event.player_index].admin - --if PI_debug then print_debug("raised event: on_player_joined_game") end - PI_set_controls(game.players[event.player_index]) - end) - - - --player_joined_game - script.on_event(defines.events.on_player_joined_game, function(event) - PI_general.isAdmin = game.players[event.player_index].admin - --if PI_debug then print_debug("raised event: on_player_joined_game") end - PI_set_controls(game.players[event.player_index]) - end) - - --train state - -- 0 = defines.train_state.on_the_path Normal state -- following the path. - -- 1 = defines.train_state.path_lost Had path and lost it -- must stop. - -- 2 = defines.train_state.no_schedule Doesn't have anywhere to go. - -- 3 = defines.train_state.no_path Has no path and is stopped. - -- 4 = defines.train_state.arrive_signal Braking before a rail signal. - -- 5 = defines.train_state.wait_signal Waiting at a signal. - -- 6 = defines.train_state.arrive_station Braking before a station. - -- 7 = defines.train_state.wait_station Waiting at a station. - -- 8 = defines.train_state.manual_control_stop Switched to manual control and has to stop. - -- 9 = defines.train_state.manual_control Can move if user explicitly sits in and rides the train. - --1ß = defines.train_state.destination_full Same as no_path but all candidate train stops are full - script.on_event(defines.events.on_train_changed_state, function(event, old_state) - --if PI_debug then - -- print_debug("raised event: on_train_changed_state fired by train " ..tostring(event.train.id)) - -- print_debug("train.state: " ..tostring(event.train.state)) - -- print_debug("old_state: " ..tostring(event.old_state)) - --end - if PI_target_train_stop then - --if PI_debug then print_debug("settings: PI_target_train_stop enabled") end - --if event.train.state == 0 then - if event.train.state == 0 or event.train.state == 3 or event.train.state == 5 or event.train.state == 10 then - if event.old_state == 7 then - if next(event.train.get_contents()) then - --if PI_debug then print_debug("Detect cargo_wagons connected to train") end - for i, myWagon in pairs(event.train.cargo_wagons) do - --if PI_debug then print_debug("Detected: " ..myWagon.name.. "(" ..myWagon.type.. "/" ..myWagon.position.x.."/" ..myWagon.position.y..")") end - PI_getInsertersAroundWagon(myWagon) - end - end - end - end - end - end) - - --select inserter - script.on_event(defines.events.on_player_selected_area, function(event) - --if PI_debug then print_debug("raised event: on_player_selected_area") end - if event.item and event.item == PI_general.selector then - --if PI_debug then print_debug("PI_inserter_selector detected") end - local myTable = PI_parseSelectedEntityList(event.entities, PI_type.inserter, false) - if #myTable then - --if PI_debug then print_debug(table_size(myTable).. " Inserters selected") end - for i, myInserter in pairs(myTable) do - PI_addInserterToDB(myInserter) - end --- PI_save() - end - end - end) - - --deselect inserters with alt - script.on_event(defines.events.on_player_alt_selected_area, function(event) - --if PI_debug then print_debug("raised event: on_player_alt_selected_area") end - if event.item and event.item == PI_general.selector then - --if PI_debug then print_debug("PI_inserter_selector detected") end - local myTable = PI_parseSelectedEntityList(event.entities, PI_type.inserter, true) - if #myTable then - --if PI_debug then print_debug(table_size(myTable).. " Inserters selected") end - for i, myInserter in pairs(myTable) do - PI_remInserterFromDB(myInserter) - end --- PI_save() - end - end - end) - - --tick - script.on_event(defines.events.on_tick, function(event) - --Set controls - if not PI_general.isControlSet then - --if PI_debug then print_debug("raised event: on_tick: not PI_general.isControlSet") end - PI_general.isAdmin = true - -- PI_set_controls(game.players[1]) - PI_modify_all_marks (false) - end - --Work on Inserter List - ----if PI_debug then print_debug("raised event: on_tick") end - PI_parseInserterList(event.tick) - end) - - --Control pressed inserter selector - script.on_event("PI_inserter_selector_ui", function(event) - --if PI_debug then print_debug("raised event: PI_inserter_selector_ui") end - PI_get_PI_inserter_selector (game.players[event.player_index]) - end) - - --Control pressed delete all marks - script.on_event("pi-orphan-mark-del-key", function(event) - --if PI_debug then print_debug("raised event: pi-orphan-mark-del-key") end - PI_remove_all_inserter_mark() - PI_modify_all_marks (true) - end) - - --Shrotcut selected - script.on_event(defines.events.on_lua_shortcut, function(event) - --if PI_debug then print_debug("raised event: on_lua_shortcut") end - if (event.prototype_name == "PI_inserter_selector_ui_sc") then - local myPlayer = game.players[event.player_index] - --if PI_debug then print_debug("on_lua_shortcut: PI_inserter_selector_ui_sc detected") end - PI_get_PI_inserter_selector (game.players[event.player_index]) - end - end) - - --Remove entity - --local e=defines.events - --local remove_events = {e.on_player_mined_entity, e.on_robot_pre_mined, e.on_entity_died, e.script_raised_destroy} - --script.on_event(remove_events, function(event) - -- if PI_debug then print_debug("raised event: remove_events") end - -- local myEntity = event.entity - -- if myEntity.type == PI_type.inserter then PI_remInserterFromDB(myEntity) end - - --end) - diff --git a/Picks-Inserter_1.110.6/data.lua b/Picks-Inserter_1.110.6/data.lua deleted file mode 100644 index 8e349b62..00000000 --- a/Picks-Inserter_1.110.6/data.lua +++ /dev/null @@ -1,14 +0,0 @@ ---[[ Copyright (c) 2019 - 2023 Picklock - * Part of Picklocks Inserter - * data.lua - * Version 1.110.6.54 - * - * See LICENSE.MD in the project directory for license information. ---]] - -myModName="__Picks-Inserter__" - -require("prototypes.selector") -require("prototypes.mark") -require("prototypes.custom-inputs") - diff --git a/Picks-Inserter_1.110.6/settings.lua b/Picks-Inserter_1.110.6/settings.lua deleted file mode 100644 index 813d216b..00000000 --- a/Picks-Inserter_1.110.6/settings.lua +++ /dev/null @@ -1,88 +0,0 @@ ---[[ Copyright (c) 2019 - 2023 Picklock - * Part of Picklocks Inserter - * settings.lua - * Version 1.110.6.54 - * - * See LICENSE.MD in the project directory for license information. ---]] - -data:extend( -{ - { - --Temporary unlock locked slots in chests - type = "bool-setting", - name = "PI_temp_unlock", - setting_type = "runtime-global", - default_value = false, - order = "a[common]-a" - }, - { - --Destroy items in hand when they not could be put back to source - type = "bool-setting", - name = "PI_clear_inserter", - setting_type = "runtime-global", - default_value = false, - order = "a[common]-c" - }, - { - --Clean selected inserters - type = "bool-setting", - name = "PI_target_selection", - setting_type = "runtime-global", - default_value = true, - order = "b[select]-a" - }, - { - --Keep selected inserters in database after clearing - type = "bool-setting", - name = "PI_keep_selected", - setting_type = "runtime-global", - default_value = false, - order = "b[select]-b" - }, - { - --Mark selected inserters - type = "bool-setting", - name = "PI_set_mark", - setting_type = "runtime-global", - default_value = true, - order = "b[select]-c" - }, - { - --Maximum inserters cleand by tick - type = "int-setting", - name = "PI_clear_max", - setting_type = "runtime-global", - default_value = 10, - minimum_value = 1, - maximum_value = 120, - order = "b[select]-d" - }, - { - --Clean inserters around cargo-wagons - type = "bool-setting", - name = "PI_target_train_stop", - setting_type = "runtime-global", - default_value = true, - order = "t[train]-a" - }, - { - --Lines to search for inserters around cargo-wagons - type = "int-setting", - name = "PI_lines_to_check", - setting_type = "runtime-global", - default_value = 1, - allowed_values = {1, 2, 3}, - order = "t[train]-c" - }, - { - --Extended lenght to search for inserters around cargo-wagons - type = "int-setting", - name = "PI_extend_length", - setting_type = "runtime-global", - default_value = 0, - allowed_values = {0, 1, 2, 3}, - order = "t[train]-e" - } -} -) \ No newline at end of file diff --git a/PipeMeterWLK_0.0.3/changelog.txt b/PipeMeterWLK/changelog.txt similarity index 100% rename from PipeMeterWLK_0.0.3/changelog.txt rename to PipeMeterWLK/changelog.txt diff --git a/PipeMeterWLK_0.0.3/data.lua b/PipeMeterWLK/data.lua similarity index 100% rename from PipeMeterWLK_0.0.3/data.lua rename to PipeMeterWLK/data.lua diff --git a/PipeMeterWLK_0.0.3/graphics/dial_face.png b/PipeMeterWLK/graphics/dial_face.png similarity index 100% rename from PipeMeterWLK_0.0.3/graphics/dial_face.png rename to PipeMeterWLK/graphics/dial_face.png diff --git a/PipeMeterWLK_0.0.3/graphics/entity-pipe_meter.png b/PipeMeterWLK/graphics/entity-pipe_meter.png similarity index 100% rename from PipeMeterWLK_0.0.3/graphics/entity-pipe_meter.png rename to PipeMeterWLK/graphics/entity-pipe_meter.png diff --git a/PipeMeterWLK_0.0.3/graphics/icon-dial_face.png b/PipeMeterWLK/graphics/icon-dial_face.png similarity index 100% rename from PipeMeterWLK_0.0.3/graphics/icon-dial_face.png rename to PipeMeterWLK/graphics/icon-dial_face.png diff --git a/PipeMeterWLK_0.0.3/graphics/item-dial_face.png b/PipeMeterWLK/graphics/item-dial_face.png similarity index 100% rename from PipeMeterWLK_0.0.3/graphics/item-dial_face.png rename to PipeMeterWLK/graphics/item-dial_face.png diff --git a/PipeMeterWLK_0.0.3/graphics/tech-pipe_meter.png b/PipeMeterWLK/graphics/tech-pipe_meter.png similarity index 100% rename from PipeMeterWLK_0.0.3/graphics/tech-pipe_meter.png rename to PipeMeterWLK/graphics/tech-pipe_meter.png diff --git a/PipeMeterWLK_0.0.3/info.json b/PipeMeterWLK/info.json similarity index 100% rename from PipeMeterWLK_0.0.3/info.json rename to PipeMeterWLK/info.json diff --git a/PipeMeterWLK_0.0.3/locale/en/PipeMeter.cfg b/PipeMeterWLK/locale/en/PipeMeter.cfg similarity index 100% rename from PipeMeterWLK_0.0.3/locale/en/PipeMeter.cfg rename to PipeMeterWLK/locale/en/PipeMeter.cfg diff --git a/PipeMeterWLK_0.0.3/prototypes/entity.lua b/PipeMeterWLK/prototypes/entity.lua similarity index 100% rename from PipeMeterWLK_0.0.3/prototypes/entity.lua rename to PipeMeterWLK/prototypes/entity.lua diff --git a/PipeMeterWLK_0.0.3/prototypes/item.lua b/PipeMeterWLK/prototypes/item.lua similarity index 100% rename from PipeMeterWLK_0.0.3/prototypes/item.lua rename to PipeMeterWLK/prototypes/item.lua diff --git a/PipeMeterWLK_0.0.3/prototypes/recipe.lua b/PipeMeterWLK/prototypes/recipe.lua similarity index 100% rename from PipeMeterWLK_0.0.3/prototypes/recipe.lua rename to PipeMeterWLK/prototypes/recipe.lua diff --git a/PipeMeterWLK_0.0.3/prototypes/technology.lua b/PipeMeterWLK/prototypes/technology.lua similarity index 100% rename from PipeMeterWLK_0.0.3/prototypes/technology.lua rename to PipeMeterWLK/prototypes/technology.lua diff --git a/PipeMeterWLK_0.0.3/thumbnail.png b/PipeMeterWLK/thumbnail.png similarity index 100% rename from PipeMeterWLK_0.0.3/thumbnail.png rename to PipeMeterWLK/thumbnail.png diff --git a/PipeVisualizer_2.1.0/LICENSE b/PipeVisualizer/LICENSE similarity index 100% rename from PipeVisualizer_2.1.0/LICENSE rename to PipeVisualizer/LICENSE diff --git a/PipeVisualizer_2.1.0/README.md b/PipeVisualizer/README.md similarity index 100% rename from PipeVisualizer_2.1.0/README.md rename to PipeVisualizer/README.md diff --git a/PipeVisualizer_2.1.0/changelog.txt b/PipeVisualizer/changelog.txt similarity index 100% rename from PipeVisualizer_2.1.0/changelog.txt rename to PipeVisualizer/changelog.txt diff --git a/PipeVisualizer_2.1.0/control.lua b/PipeVisualizer/control.lua similarity index 100% rename from PipeVisualizer_2.1.0/control.lua rename to PipeVisualizer/control.lua diff --git a/PipeVisualizer_2.1.0/crowdin.yml b/PipeVisualizer/crowdin.yml similarity index 100% rename from PipeVisualizer_2.1.0/crowdin.yml rename to PipeVisualizer/crowdin.yml diff --git a/PipeVisualizer_2.1.0/data.lua b/PipeVisualizer/data.lua similarity index 100% rename from PipeVisualizer_2.1.0/data.lua rename to PipeVisualizer/data.lua diff --git a/PipeVisualizer_2.1.0/graphics/entity-box.png b/PipeVisualizer/graphics/entity-box.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/entity-box.png rename to PipeVisualizer/graphics/entity-box.png diff --git a/PipeVisualizer_2.1.0/graphics/fluid-arrow-input-output.png b/PipeVisualizer/graphics/fluid-arrow-input-output.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/fluid-arrow-input-output.png rename to PipeVisualizer/graphics/fluid-arrow-input-output.png diff --git a/PipeVisualizer_2.1.0/graphics/fluid-arrow-input.png b/PipeVisualizer/graphics/fluid-arrow-input.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/fluid-arrow-input.png rename to PipeVisualizer/graphics/fluid-arrow-input.png diff --git a/PipeVisualizer_2.1.0/graphics/fluid-arrow-output.png b/PipeVisualizer/graphics/fluid-arrow-output.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/fluid-arrow-output.png rename to PipeVisualizer/graphics/fluid-arrow-output.png diff --git a/PipeVisualizer_2.1.0/graphics/fluid-arrow.png b/PipeVisualizer/graphics/fluid-arrow.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/fluid-arrow.png rename to PipeVisualizer/graphics/fluid-arrow.png diff --git a/PipeVisualizer_2.1.0/graphics/overlay-dark-x24.png b/PipeVisualizer/graphics/overlay-dark-x24.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/overlay-dark-x24.png rename to PipeVisualizer/graphics/overlay-dark-x24.png diff --git a/PipeVisualizer_2.1.0/graphics/overlay-dark-x32.png b/PipeVisualizer/graphics/overlay-dark-x32.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/overlay-dark-x32.png rename to PipeVisualizer/graphics/overlay-dark-x32.png diff --git a/PipeVisualizer_2.1.0/graphics/overlay-light-x24.png b/PipeVisualizer/graphics/overlay-light-x24.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/overlay-light-x24.png rename to PipeVisualizer/graphics/overlay-light-x24.png diff --git a/PipeVisualizer_2.1.0/graphics/overlay-light-x32.png b/PipeVisualizer/graphics/overlay-light-x32.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/overlay-light-x32.png rename to PipeVisualizer/graphics/overlay-light-x32.png diff --git a/PipeVisualizer_2.1.0/graphics/pipe-connections.png b/PipeVisualizer/graphics/pipe-connections.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/pipe-connections.png rename to PipeVisualizer/graphics/pipe-connections.png diff --git a/PipeVisualizer_2.1.0/graphics/underground-connection.png b/PipeVisualizer/graphics/underground-connection.png similarity index 100% rename from PipeVisualizer_2.1.0/graphics/underground-connection.png rename to PipeVisualizer/graphics/underground-connection.png diff --git a/PipeVisualizer_2.1.0/info.json b/PipeVisualizer/info.json similarity index 100% rename from PipeVisualizer_2.1.0/info.json rename to PipeVisualizer/info.json diff --git a/PipeVisualizer_2.1.0/locale/af/PipeVisualizer.cfg b/PipeVisualizer/locale/af/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/af/PipeVisualizer.cfg rename to PipeVisualizer/locale/af/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ar/PipeVisualizer.cfg b/PipeVisualizer/locale/ar/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ar/PipeVisualizer.cfg rename to PipeVisualizer/locale/ar/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ca/PipeVisualizer.cfg b/PipeVisualizer/locale/ca/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ca/PipeVisualizer.cfg rename to PipeVisualizer/locale/ca/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/cs/PipeVisualizer.cfg b/PipeVisualizer/locale/cs/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/cs/PipeVisualizer.cfg rename to PipeVisualizer/locale/cs/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/da/PipeVisualizer.cfg b/PipeVisualizer/locale/da/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/da/PipeVisualizer.cfg rename to PipeVisualizer/locale/da/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/de/PipeVisualizer.cfg b/PipeVisualizer/locale/de/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/de/PipeVisualizer.cfg rename to PipeVisualizer/locale/de/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/el/PipeVisualizer.cfg b/PipeVisualizer/locale/el/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/el/PipeVisualizer.cfg rename to PipeVisualizer/locale/el/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/en/PipeVisualizer.cfg b/PipeVisualizer/locale/en/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/en/PipeVisualizer.cfg rename to PipeVisualizer/locale/en/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/es-ES/PipeVisualizer.cfg b/PipeVisualizer/locale/es-ES/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/es-ES/PipeVisualizer.cfg rename to PipeVisualizer/locale/es-ES/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/fi/PipeVisualizer.cfg b/PipeVisualizer/locale/fi/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/fi/PipeVisualizer.cfg rename to PipeVisualizer/locale/fi/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/fr/PipeVisualizer.cfg b/PipeVisualizer/locale/fr/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/fr/PipeVisualizer.cfg rename to PipeVisualizer/locale/fr/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/he/PipeVisualizer.cfg b/PipeVisualizer/locale/he/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/he/PipeVisualizer.cfg rename to PipeVisualizer/locale/he/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/hu/PipeVisualizer.cfg b/PipeVisualizer/locale/hu/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/hu/PipeVisualizer.cfg rename to PipeVisualizer/locale/hu/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/it/PipeVisualizer.cfg b/PipeVisualizer/locale/it/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/it/PipeVisualizer.cfg rename to PipeVisualizer/locale/it/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ja/PipeVisualizer.cfg b/PipeVisualizer/locale/ja/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ja/PipeVisualizer.cfg rename to PipeVisualizer/locale/ja/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ko/PipeVisualizer.cfg b/PipeVisualizer/locale/ko/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ko/PipeVisualizer.cfg rename to PipeVisualizer/locale/ko/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/nl/PipeVisualizer.cfg b/PipeVisualizer/locale/nl/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/nl/PipeVisualizer.cfg rename to PipeVisualizer/locale/nl/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/no/PipeVisualizer.cfg b/PipeVisualizer/locale/no/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/no/PipeVisualizer.cfg rename to PipeVisualizer/locale/no/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/pl/PipeVisualizer.cfg b/PipeVisualizer/locale/pl/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/pl/PipeVisualizer.cfg rename to PipeVisualizer/locale/pl/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/pt-BZ/PipeVisualizer.cfg b/PipeVisualizer/locale/pt-BZ/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/pt-BZ/PipeVisualizer.cfg rename to PipeVisualizer/locale/pt-BZ/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/pt-PT/PipeVisualizer.cfg b/PipeVisualizer/locale/pt-PT/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/pt-PT/PipeVisualizer.cfg rename to PipeVisualizer/locale/pt-PT/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ro/PipeVisualizer.cfg b/PipeVisualizer/locale/ro/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ro/PipeVisualizer.cfg rename to PipeVisualizer/locale/ro/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/ru/PipeVisualizer.cfg b/PipeVisualizer/locale/ru/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/ru/PipeVisualizer.cfg rename to PipeVisualizer/locale/ru/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/sr/PipeVisualizer.cfg b/PipeVisualizer/locale/sr/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/sr/PipeVisualizer.cfg rename to PipeVisualizer/locale/sr/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/sv-SE/PipeVisualizer.cfg b/PipeVisualizer/locale/sv-SE/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/sv-SE/PipeVisualizer.cfg rename to PipeVisualizer/locale/sv-SE/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/tr/PipeVisualizer.cfg b/PipeVisualizer/locale/tr/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/tr/PipeVisualizer.cfg rename to PipeVisualizer/locale/tr/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/uk/PipeVisualizer.cfg b/PipeVisualizer/locale/uk/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/uk/PipeVisualizer.cfg rename to PipeVisualizer/locale/uk/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/vi/PipeVisualizer.cfg b/PipeVisualizer/locale/vi/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/vi/PipeVisualizer.cfg rename to PipeVisualizer/locale/vi/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/zh-CN/PipeVisualizer.cfg b/PipeVisualizer/locale/zh-CN/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/zh-CN/PipeVisualizer.cfg rename to PipeVisualizer/locale/zh-CN/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/locale/zh-TW/PipeVisualizer.cfg b/PipeVisualizer/locale/zh-TW/PipeVisualizer.cfg similarity index 100% rename from PipeVisualizer_2.1.0/locale/zh-TW/PipeVisualizer.cfg rename to PipeVisualizer/locale/zh-TW/PipeVisualizer.cfg diff --git a/PipeVisualizer_2.1.0/plan.md b/PipeVisualizer/plan.md similarity index 100% rename from PipeVisualizer_2.1.0/plan.md rename to PipeVisualizer/plan.md diff --git a/PipeVisualizer_2.1.0/scripts/colors.lua b/PipeVisualizer/scripts/colors.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/colors.lua rename to PipeVisualizer/scripts/colors.lua diff --git a/PipeVisualizer_2.1.0/scripts/entity-data.lua b/PipeVisualizer/scripts/entity-data.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/entity-data.lua rename to PipeVisualizer/scripts/entity-data.lua diff --git a/PipeVisualizer_2.1.0/scripts/iterator.lua b/PipeVisualizer/scripts/iterator.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/iterator.lua rename to PipeVisualizer/scripts/iterator.lua diff --git a/PipeVisualizer_2.1.0/scripts/migrations.lua b/PipeVisualizer/scripts/migrations.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/migrations.lua rename to PipeVisualizer/scripts/migrations.lua diff --git a/PipeVisualizer_2.1.0/scripts/order.lua b/PipeVisualizer/scripts/order.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/order.lua rename to PipeVisualizer/scripts/order.lua diff --git a/PipeVisualizer_2.1.0/scripts/overlay.lua b/PipeVisualizer/scripts/overlay.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/overlay.lua rename to PipeVisualizer/scripts/overlay.lua diff --git a/PipeVisualizer_2.1.0/scripts/renderer.lua b/PipeVisualizer/scripts/renderer.lua similarity index 100% rename from PipeVisualizer_2.1.0/scripts/renderer.lua rename to PipeVisualizer/scripts/renderer.lua diff --git a/PipeVisualizer_2.1.0/settings.lua b/PipeVisualizer/settings.lua similarity index 100% rename from PipeVisualizer_2.1.0/settings.lua rename to PipeVisualizer/settings.lua diff --git a/PipeVisualizer_2.1.0/thumbnail.png b/PipeVisualizer/thumbnail.png similarity index 100% rename from PipeVisualizer_2.1.0/thumbnail.png rename to PipeVisualizer/thumbnail.png diff --git a/PipeVisualizer_1.0.6.zip b/PipeVisualizer_1.0.6.zip deleted file mode 100644 index 7d689ff0..00000000 Binary files a/PipeVisualizer_1.0.6.zip and /dev/null differ diff --git a/QueueToFrontNG_0.18.3/changelog.txt b/QueueToFrontNG/changelog.txt similarity index 100% rename from QueueToFrontNG_0.18.3/changelog.txt rename to QueueToFrontNG/changelog.txt diff --git a/QueueToFrontNG_0.18.3/control.lua b/QueueToFrontNG/control.lua similarity index 100% rename from QueueToFrontNG_0.18.3/control.lua rename to QueueToFrontNG/control.lua diff --git a/QueueToFrontNG_0.18.3/data.lua b/QueueToFrontNG/data.lua similarity index 100% rename from QueueToFrontNG_0.18.3/data.lua rename to QueueToFrontNG/data.lua diff --git a/QueueToFrontNG_0.18.3/globals.lua b/QueueToFrontNG/globals.lua similarity index 100% rename from QueueToFrontNG_0.18.3/globals.lua rename to QueueToFrontNG/globals.lua diff --git a/QueueToFrontNG_0.18.3/info.json b/QueueToFrontNG/info.json similarity index 100% rename from QueueToFrontNG_0.18.3/info.json rename to QueueToFrontNG/info.json diff --git a/QueueToFrontNG_0.18.3/locale/en/config.cfg b/QueueToFrontNG/locale/en/config.cfg similarity index 100% rename from QueueToFrontNG_0.18.3/locale/en/config.cfg rename to QueueToFrontNG/locale/en/config.cfg diff --git a/QueueToFrontNG_0.18.3/thumbnail.png b/QueueToFrontNG/thumbnail.png similarity index 100% rename from QueueToFrontNG_0.18.3/thumbnail.png rename to QueueToFrontNG/thumbnail.png diff --git a/QuickItemSearch/.gitignore b/QuickItemSearch/.gitignore new file mode 100644 index 00000000..21414a9d --- /dev/null +++ b/QuickItemSearch/.gitignore @@ -0,0 +1,2 @@ +.kakrc +.vscode diff --git a/QuickItemSearch/.mailmap b/QuickItemSearch/.mailmap new file mode 100644 index 00000000..6b022d06 --- /dev/null +++ b/QuickItemSearch/.mailmap @@ -0,0 +1,2 @@ +Caleb Heuer raiguard +Caleb Heuer raiguard <3515394+raiguard@users.noreply.github.com> diff --git a/LtnManager_0.4.23/LICENSE b/QuickItemSearch/LICENSE similarity index 100% rename from LtnManager_0.4.23/LICENSE rename to QuickItemSearch/LICENSE diff --git a/QuickItemSearch_2.1.8/README.md b/QuickItemSearch/README.md similarity index 100% rename from QuickItemSearch_2.1.8/README.md rename to QuickItemSearch/README.md diff --git a/QuickItemSearch_2.1.8/changelog.txt b/QuickItemSearch/changelog.txt similarity index 100% rename from QuickItemSearch_2.1.8/changelog.txt rename to QuickItemSearch/changelog.txt diff --git a/QuickItemSearch_2.1.8/constants.lua b/QuickItemSearch/constants.lua similarity index 100% rename from QuickItemSearch_2.1.8/constants.lua rename to QuickItemSearch/constants.lua diff --git a/QuickItemSearch_2.1.8/control.lua b/QuickItemSearch/control.lua similarity index 100% rename from QuickItemSearch_2.1.8/control.lua rename to QuickItemSearch/control.lua diff --git a/QuickItemSearch_2.1.8/data.lua b/QuickItemSearch/data.lua similarity index 100% rename from QuickItemSearch_2.1.8/data.lua rename to QuickItemSearch/data.lua diff --git a/QuickItemSearch/graphics/shortcut.png b/QuickItemSearch/graphics/shortcut.png new file mode 100644 index 00000000..fc5075a5 Binary files /dev/null and b/QuickItemSearch/graphics/shortcut.png differ diff --git a/QuickItemSearch/graphics/temporary-request.png b/QuickItemSearch/graphics/temporary-request.png new file mode 100644 index 00000000..c29cbdd4 Binary files /dev/null and b/QuickItemSearch/graphics/temporary-request.png differ diff --git a/QuickItemSearch_2.1.8/info.json b/QuickItemSearch/info.json similarity index 100% rename from QuickItemSearch_2.1.8/info.json rename to QuickItemSearch/info.json diff --git a/QuickItemSearch_2.1.8/locale/en/QuickItemSearch.cfg b/QuickItemSearch/locale/en/QuickItemSearch.cfg similarity index 100% rename from QuickItemSearch_2.1.8/locale/en/QuickItemSearch.cfg rename to QuickItemSearch/locale/en/QuickItemSearch.cfg diff --git a/QuickItemSearch_2.1.8/prototypes/custom-input.lua b/QuickItemSearch/prototypes/custom-input.lua similarity index 100% rename from QuickItemSearch_2.1.8/prototypes/custom-input.lua rename to QuickItemSearch/prototypes/custom-input.lua diff --git a/QuickItemSearch_2.1.8/prototypes/shortcut.lua b/QuickItemSearch/prototypes/shortcut.lua similarity index 100% rename from QuickItemSearch_2.1.8/prototypes/shortcut.lua rename to QuickItemSearch/prototypes/shortcut.lua diff --git a/QuickItemSearch_2.1.8/prototypes/sprite.lua b/QuickItemSearch/prototypes/sprite.lua similarity index 100% rename from QuickItemSearch_2.1.8/prototypes/sprite.lua rename to QuickItemSearch/prototypes/sprite.lua diff --git a/QuickItemSearch_2.1.8/prototypes/style.lua b/QuickItemSearch/prototypes/style.lua similarity index 100% rename from QuickItemSearch_2.1.8/prototypes/style.lua rename to QuickItemSearch/prototypes/style.lua diff --git a/QuickItemSearch_2.1.8/screenshots/infinity-filter.png b/QuickItemSearch/screenshots/infinity-filter.png similarity index 100% rename from QuickItemSearch_2.1.8/screenshots/infinity-filter.png rename to QuickItemSearch/screenshots/infinity-filter.png diff --git a/QuickItemSearch_2.1.8/screenshots/logistic-request.png b/QuickItemSearch/screenshots/logistic-request.png similarity index 100% rename from QuickItemSearch_2.1.8/screenshots/logistic-request.png rename to QuickItemSearch/screenshots/logistic-request.png diff --git a/QuickItemSearch_2.1.8/screenshots/search.png b/QuickItemSearch/screenshots/search.png similarity index 100% rename from QuickItemSearch_2.1.8/screenshots/search.png rename to QuickItemSearch/screenshots/search.png diff --git a/QuickItemSearch_2.1.8/scripts/cursor.lua b/QuickItemSearch/scripts/cursor.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/cursor.lua rename to QuickItemSearch/scripts/cursor.lua diff --git a/QuickItemSearch_2.1.8/scripts/global-data.lua b/QuickItemSearch/scripts/global-data.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/global-data.lua rename to QuickItemSearch/scripts/global-data.lua diff --git a/QuickItemSearch_2.1.8/scripts/gui/infinity-filter.lua b/QuickItemSearch/scripts/gui/infinity-filter.lua similarity index 99% rename from QuickItemSearch_2.1.8/scripts/gui/infinity-filter.lua rename to QuickItemSearch/scripts/gui/infinity-filter.lua index a7d4074e..d925e172 100644 --- a/QuickItemSearch_2.1.8/scripts/gui/infinity-filter.lua +++ b/QuickItemSearch/scripts/gui/infinity-filter.lua @@ -173,7 +173,7 @@ function infinity_filter_gui.destroy(player_table) if window and window.valid then window.destroy() end - player_table.guis.infinity_filter = nil + player_table.guis.infinity_filter = nil end end diff --git a/QuickItemSearch_2.1.8/scripts/gui/logistic-request.lua b/QuickItemSearch/scripts/gui/logistic-request.lua similarity index 99% rename from QuickItemSearch_2.1.8/scripts/gui/logistic-request.lua rename to QuickItemSearch/scripts/gui/logistic-request.lua index 44f5be30..ce510ad0 100644 --- a/QuickItemSearch_2.1.8/scripts/gui/logistic-request.lua +++ b/QuickItemSearch/scripts/gui/logistic-request.lua @@ -200,7 +200,7 @@ function logistic_request_gui.destroy(player_table) local window = gui_data.refs.window if window and window.valid then - player_table.guis.request.refs.window.destroy() + player_table.guis.request.refs.window.destroy() end player_table.guis.request = nil end diff --git a/QuickItemSearch_2.1.8/scripts/gui/search.lua b/QuickItemSearch/scripts/gui/search.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/gui/search.lua rename to QuickItemSearch/scripts/gui/search.lua diff --git a/QuickItemSearch_2.1.8/scripts/infinity-filter.lua b/QuickItemSearch/scripts/infinity-filter.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/infinity-filter.lua rename to QuickItemSearch/scripts/infinity-filter.lua diff --git a/QuickItemSearch_2.1.8/scripts/logistic-request.lua b/QuickItemSearch/scripts/logistic-request.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/logistic-request.lua rename to QuickItemSearch/scripts/logistic-request.lua diff --git a/QuickItemSearch_2.1.8/scripts/migrations.lua b/QuickItemSearch/scripts/migrations.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/migrations.lua rename to QuickItemSearch/scripts/migrations.lua diff --git a/QuickItemSearch_2.1.8/scripts/player-data.lua b/QuickItemSearch/scripts/player-data.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/player-data.lua rename to QuickItemSearch/scripts/player-data.lua diff --git a/QuickItemSearch_2.1.8/scripts/search.lua b/QuickItemSearch/scripts/search.lua similarity index 100% rename from QuickItemSearch_2.1.8/scripts/search.lua rename to QuickItemSearch/scripts/search.lua diff --git a/QuickItemSearch_2.1.8/settings.lua b/QuickItemSearch/settings.lua similarity index 100% rename from QuickItemSearch_2.1.8/settings.lua rename to QuickItemSearch/settings.lua diff --git a/QuickItemSearch/stylua.toml b/QuickItemSearch/stylua.toml new file mode 100644 index 00000000..0435f677 --- /dev/null +++ b/QuickItemSearch/stylua.toml @@ -0,0 +1,2 @@ +indent_type = "Spaces" +indent_width = 2 diff --git a/QuickItemSearch/thumbnail.png b/QuickItemSearch/thumbnail.png new file mode 100644 index 00000000..41b844e9 Binary files /dev/null and b/QuickItemSearch/thumbnail.png differ diff --git a/QuickItemSearch_2.1.8/graphics/shortcut.png b/QuickItemSearch_2.1.8/graphics/shortcut.png deleted file mode 100644 index 65cab028..00000000 Binary files a/QuickItemSearch_2.1.8/graphics/shortcut.png and /dev/null differ diff --git a/QuickItemSearch_2.1.8/graphics/temporary-request.png b/QuickItemSearch_2.1.8/graphics/temporary-request.png deleted file mode 100644 index c06bb5ee..00000000 Binary files a/QuickItemSearch_2.1.8/graphics/temporary-request.png and /dev/null differ diff --git a/QuickItemSearch_2.1.8/thumbnail.png b/QuickItemSearch_2.1.8/thumbnail.png deleted file mode 100644 index 50fbfd36..00000000 Binary files a/QuickItemSearch_2.1.8/thumbnail.png and /dev/null differ diff --git a/RITEG_1.3.4/MIT_license.txt b/RITEG/MIT_license.txt similarity index 100% rename from RITEG_1.3.4/MIT_license.txt rename to RITEG/MIT_license.txt diff --git a/RITEG_1.3.4/RITEG-control.lua b/RITEG/RITEG-control.lua similarity index 100% rename from RITEG_1.3.4/RITEG-control.lua rename to RITEG/RITEG-control.lua diff --git a/RITEG_1.3.4/RITEG-prototype.lua b/RITEG/RITEG-prototype.lua similarity index 100% rename from RITEG_1.3.4/RITEG-prototype.lua rename to RITEG/RITEG-prototype.lua diff --git a/RITEG_1.3.4/changelog.txt b/RITEG/changelog.txt similarity index 100% rename from RITEG_1.3.4/changelog.txt rename to RITEG/changelog.txt diff --git a/RITEG_1.3.4/control.lua b/RITEG/control.lua similarity index 100% rename from RITEG_1.3.4/control.lua rename to RITEG/control.lua diff --git a/RITEG_1.3.4/data-final-fixes.lua b/RITEG/data-final-fixes.lua similarity index 100% rename from RITEG_1.3.4/data-final-fixes.lua rename to RITEG/data-final-fixes.lua diff --git a/RITEG_1.3.4/data.lua b/RITEG/data.lua similarity index 100% rename from RITEG_1.3.4/data.lua rename to RITEG/data.lua diff --git a/RITEG_1.3.4/graphics/big-icon/RTG-icon_big-2.png b/RITEG/graphics/big-icon/RTG-icon_big-2.png similarity index 100% rename from RITEG_1.3.4/graphics/big-icon/RTG-icon_big-2.png rename to RITEG/graphics/big-icon/RTG-icon_big-2.png diff --git a/RITEG_1.3.4/graphics/big-icon/RTG-icon_big.png b/RITEG/graphics/big-icon/RTG-icon_big.png similarity index 100% rename from RITEG_1.3.4/graphics/big-icon/RTG-icon_big.png rename to RITEG/graphics/big-icon/RTG-icon_big.png diff --git a/RITEG_1.3.4/graphics/entities/RITEG-1.png b/RITEG/graphics/entities/RITEG-1.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/RITEG-1.png rename to RITEG/graphics/entities/RITEG-1.png diff --git a/RITEG_1.3.4/graphics/entities/RITEG-breeder.png b/RITEG/graphics/entities/RITEG-breeder.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/RITEG-breeder.png rename to RITEG/graphics/entities/RITEG-breeder.png diff --git a/RITEG_1.3.4/graphics/entities/RITEG-cyan.png b/RITEG/graphics/entities/RITEG-cyan.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/RITEG-cyan.png rename to RITEG/graphics/entities/RITEG-cyan.png diff --git a/RITEG_1.3.4/graphics/entities/RITEG-glow.png b/RITEG/graphics/entities/RITEG-glow.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/RITEG-glow.png rename to RITEG/graphics/entities/RITEG-glow.png diff --git a/RITEG_1.3.4/graphics/entities/RITEG-green.png b/RITEG/graphics/entities/RITEG-green.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/RITEG-green.png rename to RITEG/graphics/entities/RITEG-green.png diff --git a/RITEG_1.3.4/graphics/entities/hr-RITEG-1.png b/RITEG/graphics/entities/hr-RITEG-1.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/hr-RITEG-1.png rename to RITEG/graphics/entities/hr-RITEG-1.png diff --git a/RITEG_1.3.4/graphics/entities/hr-RITEG-breeder.png b/RITEG/graphics/entities/hr-RITEG-breeder.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/hr-RITEG-breeder.png rename to RITEG/graphics/entities/hr-RITEG-breeder.png diff --git a/RITEG_1.3.4/graphics/entities/hr-RITEG-cyan.png b/RITEG/graphics/entities/hr-RITEG-cyan.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/hr-RITEG-cyan.png rename to RITEG/graphics/entities/hr-RITEG-cyan.png diff --git a/RITEG_1.3.4/graphics/entities/hr-RITEG-glow.png b/RITEG/graphics/entities/hr-RITEG-glow.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/hr-RITEG-glow.png rename to RITEG/graphics/entities/hr-RITEG-glow.png diff --git a/RITEG_1.3.4/graphics/entities/hr-RITEG-green.png b/RITEG/graphics/entities/hr-RITEG-green.png similarity index 100% rename from RITEG_1.3.4/graphics/entities/hr-RITEG-green.png rename to RITEG/graphics/entities/hr-RITEG-green.png diff --git a/RITEG_1.3.4/graphics/icons/MOX-fuel.png b/RITEG/graphics/icons/MOX-fuel.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/MOX-fuel.png rename to RITEG/graphics/icons/MOX-fuel.png diff --git a/RITEG_1.3.4/graphics/icons/RITEG-1.png b/RITEG/graphics/icons/RITEG-1.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/RITEG-1.png rename to RITEG/graphics/icons/RITEG-1.png diff --git a/RITEG_1.3.4/graphics/icons/RITEG-breeder.png b/RITEG/graphics/icons/RITEG-breeder.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/RITEG-breeder.png rename to RITEG/graphics/icons/RITEG-breeder.png diff --git a/RITEG_1.3.4/graphics/icons/RITEG-cyan.png b/RITEG/graphics/icons/RITEG-cyan.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/RITEG-cyan.png rename to RITEG/graphics/icons/RITEG-cyan.png diff --git a/RITEG_1.3.4/graphics/icons/RITEG-green.png b/RITEG/graphics/icons/RITEG-green.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/RITEG-green.png rename to RITEG/graphics/icons/RITEG-green.png diff --git a/RITEG_1.3.4/graphics/icons/no-icon.png b/RITEG/graphics/icons/no-icon.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/no-icon.png rename to RITEG/graphics/icons/no-icon.png diff --git a/RITEG_1.3.4/graphics/icons/recycling-orange.png b/RITEG/graphics/icons/recycling-orange.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/recycling-orange.png rename to RITEG/graphics/icons/recycling-orange.png diff --git a/RITEG_1.3.4/graphics/icons/recycling.png b/RITEG/graphics/icons/recycling.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/recycling.png rename to RITEG/graphics/icons/recycling.png diff --git a/RITEG_1.3.4/graphics/icons/used-up-RITEG-1.png b/RITEG/graphics/icons/used-up-RITEG-1.png similarity index 100% rename from RITEG_1.3.4/graphics/icons/used-up-RITEG-1.png rename to RITEG/graphics/icons/used-up-RITEG-1.png diff --git a/RITEG_1.3.4/graphics/riteg-glow.png b/RITEG/graphics/riteg-glow.png similarity index 100% rename from RITEG_1.3.4/graphics/riteg-glow.png rename to RITEG/graphics/riteg-glow.png diff --git a/RITEG_1.3.4/info.json b/RITEG/info.json similarity index 100% rename from RITEG_1.3.4/info.json rename to RITEG/info.json diff --git a/RITEG_1.3.4/locale/en/locale.cfg b/RITEG/locale/en/locale.cfg similarity index 100% rename from RITEG_1.3.4/locale/en/locale.cfg rename to RITEG/locale/en/locale.cfg diff --git a/RITEG_1.3.4/mods/Nuclear_Fuel.lua b/RITEG/mods/Nuclear_Fuel.lua similarity index 100% rename from RITEG_1.3.4/mods/Nuclear_Fuel.lua rename to RITEG/mods/Nuclear_Fuel.lua diff --git a/RITEG_1.3.4/mods/PlutoniumEnergy.lua b/RITEG/mods/PlutoniumEnergy.lua similarity index 100% rename from RITEG_1.3.4/mods/PlutoniumEnergy.lua rename to RITEG/mods/PlutoniumEnergy.lua diff --git a/RITEG_1.3.4/settings.lua b/RITEG/settings.lua similarity index 100% rename from RITEG_1.3.4/settings.lua rename to RITEG/settings.lua diff --git a/RITEG_1.3.4/thumbnail.png b/RITEG/thumbnail.png similarity index 100% rename from RITEG_1.3.4/thumbnail.png rename to RITEG/thumbnail.png diff --git a/RU-locale_9.18.0/info.json b/RU-locale/info.json similarity index 100% rename from RU-locale_9.18.0/info.json rename to RU-locale/info.json diff --git a/RU-locale_9.18.0/locale/ru/AbandonedRuins.cfg b/RU-locale/locale/ru/AbandonedRuins.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/AbandonedRuins.cfg rename to RU-locale/locale/ru/AbandonedRuins.cfg diff --git a/RU-locale_9.18.0/locale/ru/Aircraft.cfg b/RU-locale/locale/ru/Aircraft.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Aircraft.cfg rename to RU-locale/locale/ru/Aircraft.cfg diff --git a/RU-locale_9.18.0/locale/ru/AtomicArtillery.cfg b/RU-locale/locale/ru/AtomicArtillery.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/AtomicArtillery.cfg rename to RU-locale/locale/ru/AtomicArtillery.cfg diff --git a/RU-locale_9.18.0/locale/ru/BatteryElectricTrain.cfg b/RU-locale/locale/ru/BatteryElectricTrain.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/BatteryElectricTrain.cfg rename to RU-locale/locale/ru/BatteryElectricTrain.cfg diff --git a/RU-locale_9.18.0/locale/ru/Big-Monsters.cfg b/RU-locale/locale/ru/Big-Monsters.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Big-Monsters.cfg rename to RU-locale/locale/ru/Big-Monsters.cfg diff --git a/RU-locale_9.18.0/locale/ru/BigLab.cfg b/RU-locale/locale/ru/BigLab.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/BigLab.cfg rename to RU-locale/locale/ru/BigLab.cfg diff --git a/RU-locale_9.18.0/locale/ru/Bio_Industries.cfg b/RU-locale/locale/ru/Bio_Industries.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Bio_Industries.cfg rename to RU-locale/locale/ru/Bio_Industries.cfg diff --git a/RU-locale_9.18.0/locale/ru/Building_Time.cfg b/RU-locale/locale/ru/Building_Time.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Building_Time.cfg rename to RU-locale/locale/ru/Building_Time.cfg diff --git a/RU-locale_9.18.0/locale/ru/CMHMod.cfg b/RU-locale/locale/ru/CMHMod.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/CMHMod.cfg rename to RU-locale/locale/ru/CMHMod.cfg diff --git a/RU-locale_9.18.0/locale/ru/Clowns-AngelBob-Nuclear.cfg b/RU-locale/locale/ru/Clowns-AngelBob-Nuclear.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Clowns-AngelBob-Nuclear.cfg rename to RU-locale/locale/ru/Clowns-AngelBob-Nuclear.cfg diff --git a/RU-locale_9.18.0/locale/ru/Clowns-Nuclear.cfg b/RU-locale/locale/ru/Clowns-Nuclear.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Clowns-Nuclear.cfg rename to RU-locale/locale/ru/Clowns-Nuclear.cfg diff --git a/RU-locale_9.18.0/locale/ru/Clowns-Processing.cfg b/RU-locale/locale/ru/Clowns-Processing.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Clowns-Processing.cfg rename to RU-locale/locale/ru/Clowns-Processing.cfg diff --git a/RU-locale_9.18.0/locale/ru/CoppermineBobModuleRebalancing.cfg b/RU-locale/locale/ru/CoppermineBobModuleRebalancing.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/CoppermineBobModuleRebalancing.cfg rename to RU-locale/locale/ru/CoppermineBobModuleRebalancing.cfg diff --git a/RU-locale_9.18.0/locale/ru/DeadlockLargerLamp.cfg b/RU-locale/locale/ru/DeadlockLargerLamp.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/DeadlockLargerLamp.cfg rename to RU-locale/locale/ru/DeadlockLargerLamp.cfg diff --git a/RU-locale_9.18.0/locale/ru/DeadlockResearchNotifications.cfg b/RU-locale/locale/ru/DeadlockResearchNotifications.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/DeadlockResearchNotifications.cfg rename to RU-locale/locale/ru/DeadlockResearchNotifications.cfg diff --git a/RU-locale_9.18.0/locale/ru/DewPointAggregator.cfg b/RU-locale/locale/ru/DewPointAggregator.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/DewPointAggregator.cfg rename to RU-locale/locale/ru/DewPointAggregator.cfg diff --git a/RU-locale_9.18.0/locale/ru/EfficienSee.cfg b/RU-locale/locale/ru/EfficienSee.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/EfficienSee.cfg rename to RU-locale/locale/ru/EfficienSee.cfg diff --git a/RU-locale_9.18.0/locale/ru/ElectricResistance.cfg b/RU-locale/locale/ru/ElectricResistance.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ElectricResistance.cfg rename to RU-locale/locale/ru/ElectricResistance.cfg diff --git a/RU-locale_9.18.0/locale/ru/Flow Control.cfg b/RU-locale/locale/ru/Flow Control.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Flow Control.cfg rename to RU-locale/locale/ru/Flow Control.cfg diff --git a/RU-locale_9.18.0/locale/ru/FluidMustFlow.cfg b/RU-locale/locale/ru/FluidMustFlow.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/FluidMustFlow.cfg rename to RU-locale/locale/ru/FluidMustFlow.cfg diff --git a/RU-locale_9.18.0/locale/ru/FuelTrainStop.cfg b/RU-locale/locale/ru/FuelTrainStop.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/FuelTrainStop.cfg rename to RU-locale/locale/ru/FuelTrainStop.cfg diff --git a/RU-locale_9.18.0/locale/ru/InlaidLampsExtended.cfg b/RU-locale/locale/ru/InlaidLampsExtended.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/InlaidLampsExtended.cfg rename to RU-locale/locale/ru/InlaidLampsExtended.cfg diff --git a/RU-locale_9.18.0/locale/ru/JunkTrain3.cfg b/RU-locale/locale/ru/JunkTrain3.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/JunkTrain3.cfg rename to RU-locale/locale/ru/JunkTrain3.cfg diff --git a/RU-locale_9.18.0/locale/ru/LTN_Combinator_Modernized.cfg b/RU-locale/locale/ru/LTN_Combinator_Modernized.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/LTN_Combinator_Modernized.cfg rename to RU-locale/locale/ru/LTN_Combinator_Modernized.cfg diff --git a/RU-locale_9.18.0/locale/ru/LTN_Content_Reader.cfg b/RU-locale/locale/ru/LTN_Content_Reader.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/LTN_Content_Reader.cfg rename to RU-locale/locale/ru/LTN_Content_Reader.cfg diff --git a/RU-locale_9.18.0/locale/ru/LtnManager.cfg b/RU-locale/locale/ru/LtnManager.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/LtnManager.cfg rename to RU-locale/locale/ru/LtnManager.cfg diff --git a/RU-locale_9.18.0/locale/ru/Manganese_Chrome_Sorting.cfg b/RU-locale/locale/ru/Manganese_Chrome_Sorting.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Manganese_Chrome_Sorting.cfg rename to RU-locale/locale/ru/Manganese_Chrome_Sorting.cfg diff --git a/RU-locale_9.18.0/locale/ru/MoreAchievements.cfg b/RU-locale/locale/ru/MoreAchievements.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/MoreAchievements.cfg rename to RU-locale/locale/ru/MoreAchievements.cfg diff --git a/RU-locale_9.18.0/locale/ru/MxlChievements.cfg b/RU-locale/locale/ru/MxlChievements.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/MxlChievements.cfg rename to RU-locale/locale/ru/MxlChievements.cfg diff --git a/RU-locale_9.18.0/locale/ru/Nanobots.cfg b/RU-locale/locale/ru/Nanobots.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Nanobots.cfg rename to RU-locale/locale/ru/Nanobots.cfg diff --git a/RU-locale_9.18.0/locale/ru/Natural_Evolution_Enemies.cfg b/RU-locale/locale/ru/Natural_Evolution_Enemies.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Natural_Evolution_Enemies.cfg rename to RU-locale/locale/ru/Natural_Evolution_Enemies.cfg diff --git a/RU-locale_9.18.0/locale/ru/OberNuclear.cfg b/RU-locale/locale/ru/OberNuclear.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/OberNuclear.cfg rename to RU-locale/locale/ru/OberNuclear.cfg diff --git a/RU-locale_9.18.0/locale/ru/OreRadar.cfg b/RU-locale/locale/ru/OreRadar.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/OreRadar.cfg rename to RU-locale/locale/ru/OreRadar.cfg diff --git a/RU-locale_9.18.0/locale/ru/P-U-M-P-S.cfg b/RU-locale/locale/ru/P-U-M-P-S.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/P-U-M-P-S.cfg rename to RU-locale/locale/ru/P-U-M-P-S.cfg diff --git a/RU-locale_9.18.0/locale/ru/PCP.cfg b/RU-locale/locale/ru/PCP.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/PCP.cfg rename to RU-locale/locale/ru/PCP.cfg diff --git a/RU-locale_9.18.0/locale/ru/RadioactiveDamage.cfg b/RU-locale/locale/ru/RadioactiveDamage.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/RadioactiveDamage.cfg rename to RU-locale/locale/ru/RadioactiveDamage.cfg diff --git a/RU-locale_9.18.0/locale/ru/RealisticReactors.cfg b/RU-locale/locale/ru/RealisticReactors.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/RealisticReactors.cfg rename to RU-locale/locale/ru/RealisticReactors.cfg diff --git a/RU-locale_9.18.0/locale/ru/Realistic_Electric_Trains.cfg b/RU-locale/locale/ru/Realistic_Electric_Trains.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Realistic_Electric_Trains.cfg rename to RU-locale/locale/ru/Realistic_Electric_Trains.cfg diff --git a/RU-locale_9.18.0/locale/ru/Renamer.cfg b/RU-locale/locale/ru/Renamer.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Renamer.cfg rename to RU-locale/locale/ru/Renamer.cfg diff --git a/RU-locale_9.18.0/locale/ru/Rocket-Silo-Construction.cfg b/RU-locale/locale/ru/Rocket-Silo-Construction.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/Rocket-Silo-Construction.cfg rename to RU-locale/locale/ru/Rocket-Silo-Construction.cfg diff --git a/RU-locale_9.18.0/locale/ru/SantasNixieTubeDisplay.cfg b/RU-locale/locale/ru/SantasNixieTubeDisplay.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/SantasNixieTubeDisplay.cfg rename to RU-locale/locale/ru/SantasNixieTubeDisplay.cfg diff --git a/RU-locale_9.18.0/locale/ru/SchallTankPlatoon.cfg b/RU-locale/locale/ru/SchallTankPlatoon.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/SchallTankPlatoon.cfg rename to RU-locale/locale/ru/SchallTankPlatoon.cfg diff --git a/RU-locale_9.18.0/locale/ru/SpaceMod.cfg b/RU-locale/locale/ru/SpaceMod.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/SpaceMod.cfg rename to RU-locale/locale/ru/SpaceMod.cfg diff --git a/RU-locale_9.18.0/locale/ru/WideChests.cfg b/RU-locale/locale/ru/WideChests.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/WideChests.cfg rename to RU-locale/locale/ru/WideChests.cfg diff --git a/RU-locale_9.18.0/locale/ru/aai-industry.cfg b/RU-locale/locale/ru/aai-industry.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/aai-industry.cfg rename to RU-locale/locale/ru/aai-industry.cfg diff --git a/RU-locale_9.18.0/locale/ru/additional-turret.cfg b/RU-locale/locale/ru/additional-turret.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/additional-turret.cfg rename to RU-locale/locale/ru/additional-turret.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelsaddons-oresilos.cfg b/RU-locale/locale/ru/angelsaddons-oresilos.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelsaddons-oresilos.cfg rename to RU-locale/locale/ru/angelsaddons-oresilos.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelsaddons-warehouses.cfg b/RU-locale/locale/ru/angelsaddons-warehouses.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelsaddons-warehouses.cfg rename to RU-locale/locale/ru/angelsaddons-warehouses.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelsbioprocessing.cfg b/RU-locale/locale/ru/angelsbioprocessing.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelsbioprocessing.cfg rename to RU-locale/locale/ru/angelsbioprocessing.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelsinfiniteores.cfg b/RU-locale/locale/ru/angelsinfiniteores.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelsinfiniteores.cfg rename to RU-locale/locale/ru/angelsinfiniteores.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelspetrochem.cfg b/RU-locale/locale/ru/angelspetrochem.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelspetrochem.cfg rename to RU-locale/locale/ru/angelspetrochem.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelsrefining.cfg b/RU-locale/locale/ru/angelsrefining.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelsrefining.cfg rename to RU-locale/locale/ru/angelsrefining.cfg diff --git a/RU-locale_9.18.0/locale/ru/angelssmelting.cfg b/RU-locale/locale/ru/angelssmelting.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/angelssmelting.cfg rename to RU-locale/locale/ru/angelssmelting.cfg diff --git a/RU-locale_9.18.0/locale/ru/beautiful_straight_bridge_railway.cfg b/RU-locale/locale/ru/beautiful_straight_bridge_railway.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/beautiful_straight_bridge_railway.cfg rename to RU-locale/locale/ru/beautiful_straight_bridge_railway.cfg diff --git a/RU-locale_9.18.0/locale/ru/bio_industries2.cfg b/RU-locale/locale/ru/bio_industries2.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bio_industries2.cfg rename to RU-locale/locale/ru/bio_industries2.cfg diff --git a/RU-locale_9.18.0/locale/ru/blueprint_flip_and_turn.cfg b/RU-locale/locale/ru/blueprint_flip_and_turn.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/blueprint_flip_and_turn.cfg rename to RU-locale/locale/ru/blueprint_flip_and_turn.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobassembly.cfg b/RU-locale/locale/ru/bobassembly.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobassembly.cfg rename to RU-locale/locale/ru/bobassembly.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobelectronics.cfg b/RU-locale/locale/ru/bobelectronics.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobelectronics.cfg rename to RU-locale/locale/ru/bobelectronics.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobenemies.cfg b/RU-locale/locale/ru/bobenemies.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobenemies.cfg rename to RU-locale/locale/ru/bobenemies.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobequipment.cfg b/RU-locale/locale/ru/bobequipment.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobequipment.cfg rename to RU-locale/locale/ru/bobequipment.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobgreenhouse.cfg b/RU-locale/locale/ru/bobgreenhouse.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobgreenhouse.cfg rename to RU-locale/locale/ru/bobgreenhouse.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobinserters.cfg b/RU-locale/locale/ru/bobinserters.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobinserters.cfg rename to RU-locale/locale/ru/bobinserters.cfg diff --git a/RU-locale_9.18.0/locale/ru/boblibrary.cfg b/RU-locale/locale/ru/boblibrary.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/boblibrary.cfg rename to RU-locale/locale/ru/boblibrary.cfg diff --git a/RU-locale_9.18.0/locale/ru/boblogistics.cfg b/RU-locale/locale/ru/boblogistics.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/boblogistics.cfg rename to RU-locale/locale/ru/boblogistics.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobmining.cfg b/RU-locale/locale/ru/bobmining.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobmining.cfg rename to RU-locale/locale/ru/bobmining.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobmodules.cfg b/RU-locale/locale/ru/bobmodules.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobmodules.cfg rename to RU-locale/locale/ru/bobmodules.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobores.cfg b/RU-locale/locale/ru/bobores.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobores.cfg rename to RU-locale/locale/ru/bobores.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobplates.cfg b/RU-locale/locale/ru/bobplates.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobplates.cfg rename to RU-locale/locale/ru/bobplates.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobpower.cfg b/RU-locale/locale/ru/bobpower.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobpower.cfg rename to RU-locale/locale/ru/bobpower.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobrevamp.cfg b/RU-locale/locale/ru/bobrevamp.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobrevamp.cfg rename to RU-locale/locale/ru/bobrevamp.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobtech.cfg b/RU-locale/locale/ru/bobtech.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobtech.cfg rename to RU-locale/locale/ru/bobtech.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobvehicleequipment.cfg b/RU-locale/locale/ru/bobvehicleequipment.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobvehicleequipment.cfg rename to RU-locale/locale/ru/bobvehicleequipment.cfg diff --git a/RU-locale_9.18.0/locale/ru/bobwarfare.cfg b/RU-locale/locale/ru/bobwarfare.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bobwarfare.cfg rename to RU-locale/locale/ru/bobwarfare.cfg diff --git a/RU-locale_9.18.0/locale/ru/bop.cfg b/RU-locale/locale/ru/bop.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/bop.cfg rename to RU-locale/locale/ru/bop.cfg diff --git a/RU-locale_9.18.0/locale/ru/deep-storage-unit.cfg b/RU-locale/locale/ru/deep-storage-unit.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/deep-storage-unit.cfg rename to RU-locale/locale/ru/deep-storage-unit.cfg diff --git a/RU-locale_9.18.0/locale/ru/dollies_ru.cfg b/RU-locale/locale/ru/dollies_ru.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/dollies_ru.cfg rename to RU-locale/locale/ru/dollies_ru.cfg diff --git a/RU-locale_9.18.0/locale/ru/efficient-research.cfg b/RU-locale/locale/ru/efficient-research.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/efficient-research.cfg rename to RU-locale/locale/ru/efficient-research.cfg diff --git a/RU-locale_9.18.0/locale/ru/expanded-rocket-payloads.cfg b/RU-locale/locale/ru/expanded-rocket-payloads.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/expanded-rocket-payloads.cfg rename to RU-locale/locale/ru/expanded-rocket-payloads.cfg diff --git a/RU-locale_9.18.0/locale/ru/extendedangels.cfg b/RU-locale/locale/ru/extendedangels.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/extendedangels.cfg rename to RU-locale/locale/ru/extendedangels.cfg diff --git a/RU-locale_9.18.0/locale/ru/fluid-memory-storage.cfg b/RU-locale/locale/ru/fluid-memory-storage.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/fluid-memory-storage.cfg rename to RU-locale/locale/ru/fluid-memory-storage.cfg diff --git a/RU-locale_9.18.0/locale/ru/logistic-memory-units.cfg b/RU-locale/locale/ru/logistic-memory-units.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/logistic-memory-units.cfg rename to RU-locale/locale/ru/logistic-memory-units.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltn-base.cfg b/RU-locale/locale/ru/ltn-base.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltn-base.cfg rename to RU-locale/locale/ru/ltn-base.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltn-cleanup.cfg b/RU-locale/locale/ru/ltn-cleanup.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltn-cleanup.cfg rename to RU-locale/locale/ru/ltn-cleanup.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltn-langpack.cfg b/RU-locale/locale/ru/ltn-langpack.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltn-langpack.cfg rename to RU-locale/locale/ru/ltn-langpack.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltn-settings.cfg b/RU-locale/locale/ru/ltn-settings.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltn-settings.cfg rename to RU-locale/locale/ru/ltn-settings.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltnc.cfg b/RU-locale/locale/ru/ltnc.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltnc.cfg rename to RU-locale/locale/ru/ltnc.cfg diff --git a/RU-locale_9.18.0/locale/ru/ltnt.cfg b/RU-locale/locale/ru/ltnt.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/ltnt.cfg rename to RU-locale/locale/ru/ltnt.cfg diff --git a/RU-locale_9.18.0/locale/ru/miniloader.cfg b/RU-locale/locale/ru/miniloader.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/miniloader.cfg rename to RU-locale/locale/ru/miniloader.cfg diff --git a/RU-locale_9.18.0/locale/ru/more-petrochem-hell.cfg b/RU-locale/locale/ru/more-petrochem-hell.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/more-petrochem-hell.cfg rename to RU-locale/locale/ru/more-petrochem-hell.cfg diff --git a/RU-locale_9.18.0/locale/ru/pickuptower.cfg b/RU-locale/locale/ru/pickuptower.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/pickuptower.cfg rename to RU-locale/locale/ru/pickuptower.cfg diff --git a/RU-locale_9.18.0/locale/ru/qol_research.cfg b/RU-locale/locale/ru/qol_research.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/qol_research.cfg rename to RU-locale/locale/ru/qol_research.cfg diff --git a/RU-locale_9.18.0/locale/ru/research_causes_evolution.cfg b/RU-locale/locale/ru/research_causes_evolution.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/research_causes_evolution.cfg rename to RU-locale/locale/ru/research_causes_evolution.cfg diff --git a/RU-locale_9.18.0/locale/ru/research_evolution_factor.cfg b/RU-locale/locale/ru/research_evolution_factor.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/research_evolution_factor.cfg rename to RU-locale/locale/ru/research_evolution_factor.cfg diff --git a/RU-locale_9.18.0/locale/ru/reskins-angels-locale.cfg b/RU-locale/locale/ru/reskins-angels-locale.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/reskins-angels-locale.cfg rename to RU-locale/locale/ru/reskins-angels-locale.cfg diff --git a/RU-locale_9.18.0/locale/ru/reskins-bobs-locale.cfg b/RU-locale/locale/ru/reskins-bobs-locale.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/reskins-bobs-locale.cfg rename to RU-locale/locale/ru/reskins-bobs-locale.cfg diff --git a/RU-locale_9.18.0/locale/ru/reskins-library-locale.cfg b/RU-locale/locale/ru/reskins-library-locale.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/reskins-library-locale.cfg rename to RU-locale/locale/ru/reskins-library-locale.cfg diff --git a/RU-locale_9.18.0/locale/ru/reverse-factory.cfg b/RU-locale/locale/ru/reverse-factory.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/reverse-factory.cfg rename to RU-locale/locale/ru/reverse-factory.cfg diff --git a/RU-locale_9.18.0/locale/ru/robotarmy.cfg b/RU-locale/locale/ru/robotarmy.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/robotarmy.cfg rename to RU-locale/locale/ru/robotarmy.cfg diff --git a/RU-locale_9.18.0/locale/ru/scattergun_turret.cfg b/RU-locale/locale/ru/scattergun_turret.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/scattergun_turret.cfg rename to RU-locale/locale/ru/scattergun_turret.cfg diff --git a/RU-locale_9.18.0/locale/ru/smelting-extended.cfg b/RU-locale/locale/ru/smelting-extended.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/smelting-extended.cfg rename to RU-locale/locale/ru/smelting-extended.cfg diff --git a/RU-locale_9.18.0/locale/ru/steinios_research_sensor.cfg b/RU-locale/locale/ru/steinios_research_sensor.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/steinios_research_sensor.cfg rename to RU-locale/locale/ru/steinios_research_sensor.cfg diff --git a/RU-locale_9.18.0/locale/ru/train-control-signals.cfg b/RU-locale/locale/ru/train-control-signals.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/train-control-signals.cfg rename to RU-locale/locale/ru/train-control-signals.cfg diff --git a/RU-locale_9.18.0/locale/ru/water-treatment.cfg b/RU-locale/locale/ru/water-treatment.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/water-treatment.cfg rename to RU-locale/locale/ru/water-treatment.cfg diff --git a/RU-locale_9.18.0/locale/ru/wireless-charging.cfg b/RU-locale/locale/ru/wireless-charging.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/wireless-charging.cfg rename to RU-locale/locale/ru/wireless-charging.cfg diff --git a/RU-locale_9.18.0/locale/ru/zcs-trash-landfill.cfg b/RU-locale/locale/ru/zcs-trash-landfill.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/zcs-trash-landfill.cfg rename to RU-locale/locale/ru/zcs-trash-landfill.cfg diff --git a/RU-locale_9.18.0/locale/ru/zero-fluid-info.cfg b/RU-locale/locale/ru/zero-fluid-info.cfg similarity index 100% rename from RU-locale_9.18.0/locale/ru/zero-fluid-info.cfg rename to RU-locale/locale/ru/zero-fluid-info.cfg diff --git a/RU-locale_9.18.0/thumbnail.png b/RU-locale/thumbnail.png similarity index 100% rename from RU-locale_9.18.0/thumbnail.png rename to RU-locale/thumbnail.png diff --git a/RU-locale_9.18.0/thumbnail1.png b/RU-locale/thumbnail1.png similarity index 100% rename from RU-locale_9.18.0/thumbnail1.png rename to RU-locale/thumbnail1.png diff --git a/RadioactiveDamage_0.0.4/control.lua b/RadioactiveDamage/control.lua similarity index 100% rename from RadioactiveDamage_0.0.4/control.lua rename to RadioactiveDamage/control.lua diff --git a/RadioactiveDamage_0.0.4/data.lua b/RadioactiveDamage/data.lua similarity index 100% rename from RadioactiveDamage_0.0.4/data.lua rename to RadioactiveDamage/data.lua diff --git a/RadioactiveDamage_0.0.4/hazmat-suit.png b/RadioactiveDamage/hazmat-suit.png similarity index 100% rename from RadioactiveDamage_0.0.4/hazmat-suit.png rename to RadioactiveDamage/hazmat-suit.png diff --git a/RadioactiveDamage_0.0.4/info.json b/RadioactiveDamage/info.json similarity index 100% rename from RadioactiveDamage_0.0.4/info.json rename to RadioactiveDamage/info.json diff --git a/RadioactiveDamage_0.0.4/locale/en/radio.cfg b/RadioactiveDamage/locale/en/radio.cfg similarity index 100% rename from RadioactiveDamage_0.0.4/locale/en/radio.cfg rename to RadioactiveDamage/locale/en/radio.cfg diff --git a/RadioactiveDamage_0.0.4/thumbnail.png b/RadioactiveDamage/thumbnail.png similarity index 100% rename from RadioactiveDamage_0.0.4/thumbnail.png rename to RadioactiveDamage/thumbnail.png diff --git a/RaiLuaLib_0.2.8/changelog.txt b/RaiLuaLib/changelog.txt similarity index 100% rename from RaiLuaLib_0.2.8/changelog.txt rename to RaiLuaLib/changelog.txt diff --git a/RaiLuaLib_0.2.8/control.lua b/RaiLuaLib/control.lua similarity index 100% rename from RaiLuaLib_0.2.8/control.lua rename to RaiLuaLib/control.lua diff --git a/RaiLuaLib_0.2.8/data.lua b/RaiLuaLib/data.lua similarity index 100% rename from RaiLuaLib_0.2.8/data.lua rename to RaiLuaLib/data.lua diff --git a/RaiLuaLib_0.2.8/info.json b/RaiLuaLib/info.json similarity index 100% rename from RaiLuaLib_0.2.8/info.json rename to RaiLuaLib/info.json diff --git a/RaiLuaLib_0.2.8/lualib/event.lua b/RaiLuaLib/lualib/event.lua similarity index 100% rename from RaiLuaLib_0.2.8/lualib/event.lua rename to RaiLuaLib/lualib/event.lua diff --git a/RaiLuaLib_0.2.8/lualib/gui.lua b/RaiLuaLib/lualib/gui.lua similarity index 100% rename from RaiLuaLib_0.2.8/lualib/gui.lua rename to RaiLuaLib/lualib/gui.lua diff --git a/RaiLuaLib_0.2.8/lualib/migration.lua b/RaiLuaLib/lualib/migration.lua similarity index 100% rename from RaiLuaLib_0.2.8/lualib/migration.lua rename to RaiLuaLib/lualib/migration.lua diff --git a/RaiLuaLib_0.2.8/lualib/translation.lua b/RaiLuaLib/lualib/translation.lua similarity index 100% rename from RaiLuaLib_0.2.8/lualib/translation.lua rename to RaiLuaLib/lualib/translation.lua diff --git a/RaiLuaLib_0.2.8/tests/event/control.lua b/RaiLuaLib/tests/event/control.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/event/control.lua rename to RaiLuaLib/tests/event/control.lua diff --git a/RaiLuaLib_0.2.8/tests/event/data.lua b/RaiLuaLib/tests/event/data.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/event/data.lua rename to RaiLuaLib/tests/event/data.lua diff --git a/RaiLuaLib_0.2.8/tests/gui/control.lua b/RaiLuaLib/tests/gui/control.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/gui/control.lua rename to RaiLuaLib/tests/gui/control.lua diff --git a/RaiLuaLib_0.2.8/tests/gui/data.lua b/RaiLuaLib/tests/gui/data.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/gui/data.lua rename to RaiLuaLib/tests/gui/data.lua diff --git a/RaiLuaLib_0.2.8/tests/tests.lua b/RaiLuaLib/tests/tests.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/tests.lua rename to RaiLuaLib/tests/tests.lua diff --git a/RaiLuaLib_0.2.8/tests/translation/control.lua b/RaiLuaLib/tests/translation/control.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/translation/control.lua rename to RaiLuaLib/tests/translation/control.lua diff --git a/RaiLuaLib_0.2.8/tests/translation/data.lua b/RaiLuaLib/tests/translation/data.lua similarity index 100% rename from RaiLuaLib_0.2.8/tests/translation/data.lua rename to RaiLuaLib/tests/translation/data.lua diff --git a/RaiLuaLib_0.2.8/thumbnail.png b/RaiLuaLib/thumbnail.png similarity index 100% rename from RaiLuaLib_0.2.8/thumbnail.png rename to RaiLuaLib/thumbnail.png diff --git a/RaiLuaLib_0.2.8/utilities/event-data-migration.lua b/RaiLuaLib/utilities/event-data-migration.lua similarity index 100% rename from RaiLuaLib_0.2.8/utilities/event-data-migration.lua rename to RaiLuaLib/utilities/event-data-migration.lua diff --git a/RampantEvolution_1.6.4/COPYING b/RampantEvolution_1.6.4/COPYING deleted file mode 100644 index 621d89de..00000000 --- a/RampantEvolution_1.6.4/COPYING +++ /dev/null @@ -1,619 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. diff --git a/RampantEvolution_1.6.4/README.md b/RampantEvolution_1.6.4/README.md deleted file mode 100644 index f063a918..00000000 --- a/RampantEvolution_1.6.4/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Rampant Evolution - -Changes evolution mechanic to allow for green play and changes how evolution increases - -https://mods.factorio.com/mod/RampantEvolution - -# Notes - -If you want to donate: -https://ko-fi.com/rampant - -By default: -New game map settings for evolution from pollution, spawners, and time are set to 0 - -Evolution can be configured for: - -- Pollution absorbed by Spawners -- Pollution damaging trees -- Pollution absorbed by trees -- Pollution absorbed by tiles -- Killing Spawners -- Killing Units -- Killing Worms -- Killing Hives (Rampant New Enemies) -- Total Pollution (Similar to vanilla) -- Time (Similar to vanilla) - -- Minimum Evolution can be set as a percentage of peak evolution - -Console Commands -`/rampantEvolution` displays the evolution stats in the console. diff --git a/RampantEvolution_1.6.4/changelog.txt b/RampantEvolution_1.6.4/changelog.txt deleted file mode 100644 index c6f2e17e..00000000 --- a/RampantEvolution_1.6.4/changelog.txt +++ /dev/null @@ -1,129 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.6.4 - Bugfixes: - - Fixed nans being displayed due to a division by zero when first adding the mod - ---------------------------------------------------------------------------------------------------- -Version: 1.6.3 - Bugfixes: - - Fixed evolutionMultiplier being nil due to missing version change - ---------------------------------------------------------------------------------------------------- -Version: 1.6.2 - Bugfixes: - - Fixed changelog not displaying in-game - ---------------------------------------------------------------------------------------------------- -Version: 1.6.1 - Bugfixes: - - Fixed multiplier typo in settings and descriptions - ---------------------------------------------------------------------------------------------------- -Version: 1.6.0 - Improvements: - - Added evolution multipler based on number of research completed - - Added tick multipler based on ticks that have elapsed in a game - Bugfixes: - - Fixed clamping evolution to 50% instead of 99.99999999999% - ---------------------------------------------------------------------------------------------------- -Version: 1.5.2 - Improvements: - - Breakdown now shows the proportional contribute to the current evolution - Tweaks: - - Increased auto resolution to scale to 200 hrs with additional processingPerTick - Bugfixes: - - Fixed evolution was not being properly clamped between [0,1) - ---------------------------------------------------------------------------------------------------- -Version: 1.5.1 - Bugfixes: - - Fixed /rampantEvolution display order - ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 - Improvements: - - Added evolution cap based on research - - Added evolution per player structure killed for low, medium, and high value entities - Tweaks: - - Reduced spawner kills default mod setting for evolution contribution to 300 - - Switched pause vanilla evolution factor mod setting to be enabled by default - Bugfixes: - - Fixed spawner faction units being counted as unit spawner kills (Thanks drayath) - - Fixed tooltip on gui shortcut toggle - - Fixed evolution gui not refreshing immediately after changing mod settings - ---------------------------------------------------------------------------------------------------- -Version: 1.4.2 - Bugfixes: - - Fixed gui could become orphaned on upgrade - - Fixed invalid key to next due to player leaving game, removed player index conditional - ---------------------------------------------------------------------------------------------------- -Version: 1.4.1 - Bugfixes: - - Fixed 60 minute evolution change counter - - Fixed invalid key to next due to player leaving game - ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 20. 03. 2022 - Improvements: - - Added GUI shortcut with mod setting toggle - - Added 5, 30, 60 minute changes in evolution to displayed stats - Tweaks: - - Switched license to GPLv3 - ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 27. 12. 2021 - Improvements: - - Added mod setting to control evolution calculation accuracy with an auto setting to calculate accuracy upto 80 hour game length, above 80 hrs and you may want to manually configure values. - - Added mod setting to control evolution per worm killed - Tweaks: - - Added some additional information around the console command /rampantEvolution - - Increased frequency to every 2 minutes for stats grabbed from factorio engine for computing deltas - Bugfixes: - - Fixed totalCounts were only set when previousCount didn't exist, which caused over time evolution to spiral as the deltas kept on growing (Thanks garrotte13) - ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 16. 4. 2021 - Improvements: - - Added a minimum evolution setting based off of the peak evolution reached - Tweaks: - - Doubled processing speed with a slightly lower accuracy historical reconstruction of evolution - Bugfixes: - - Historical ticks not being included in recalculating evolution - ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 16. 4. 2021 - Improvements: - - Optimized calculating evolution - - Added a mod setting to allow for recalculating all evolution history with new mod settings values, will not be a perfect reconstruction of history (lossy). - - Added mod settings for display evolution stats to console - - Added time and pollution generated evolution options - - Added console command /rampantEvolution to display a message to console - Bugfixes: - - Corrected asymptotic behavior of calculation by using counts instead of deltas allowing for counting everything separately - - Fixed dying trees not being accounted for - Tweaks: - - Mod setting default reduced evolution from spawner pollution absorption by 65% - - Mod setting default increased evolution reduction from trees absorbing pollution by 2x - - Mod setting default increased evolution from trees being damaged by pollution by 58% - - Mod setting default increased evolution from killing spawners by 10x - - Mod setting default increased evolution reduction from killing hives by 10x - - Mod setting default increased evolution reduction from killing biters to -30000 - ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 16. 4. 2021 - Bugfixes: - - Fixed mod settings being refreshed on any mod change - ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 27. 3. 2020 - Features: - - Changes evolution mechanic to allow for green play and changes how evolution increases diff --git a/RampantEvolution_1.6.4/control.lua b/RampantEvolution_1.6.4/control.lua deleted file mode 100644 index 62e670d9..00000000 --- a/RampantEvolution_1.6.4/control.lua +++ /dev/null @@ -1,830 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - --- imports - -local gui = require("libs/Gui") - ---[[ - Vanilla factors - time_factor - :: double - The amount evolution naturally progresses by every second. Defaults to 0.000004. - - destroy_factor - :: double - The amount evolution progresses for every destroyed spawner. Defaults to 0.002. - - pollution_factor - :: double - The amount evolution progresses for every unit of pollution. Defaults to 0.0000009. - - - Pollution production is the total pollution produced by buildings per tick, not the - pollution spreading on the map, so it is not reduced by trees or other absorbers. - e.g. : 10 boilers produce 300 pollution in one minute, raising the evolution factor - by around 0.027%. - - The percentages are applied on the base of (1 - current_evolution_factor)Β². So - for instance destroying enemy spawners in the beginning of the game results in - increase of evolution factor by 0.002 (0.2%) while doing this when the evolution - factor is 0.5 the increase is only 0.0005 (0.05%). - - This also means that the evolution factor approaches 1 asymptotically - generally, - increases past 0.9 or so are very slow and the number never actually reaches 1.0. ---]] - --- constants - -local SETTINGS_TO_PERCENT = 1e-7 -local SHORT_EVOLUTION_CHECK_DURATION = 5 * 60 * 60 -local LONG_EVOLUTION_CHECK_DURATION = 30 * 60 * 60 -local LONG_LONG_EVOLUTION_CHECK_DURATION = 60 * 60 * 60 - - -local LOW_VALUE_PLAYER_STRUCTURES = { - "turret", - "ammo-turret", - "electric-turret", - "fluid-turret", - "artillery-turret", - "electric-pole" -} - -local MEDIUM_VALUE_PLAYER_STRUCTURES = { - "solar-panel", - "accumulator", - "radar", - "storage-tank", - "container", - "logistic-container", - "lab" -} - -local HIGH_VALUE_PLAYER_STRUCTURES = { - "assembling-machine", - "furnace", - "roboport", - "beacon", - "boiler", - "generator", - "mining-drill", - "reactor", - "rocket-silo" -} - --- imported functions - -local sFind = string.find -local mMin = math.min -local mMax = math.max -local roundTo = gui.roundTo -local calculateDisplayValue = gui.calculateDisplayValue - --- local references - -local world - --- module code - -local function linearInterpolation(percent, min, max) - return ((max - min) * percent) + min -end - -local function variableInterpolation(percent, min, max, exponent) - return ((max - min) * (percent^exponent)) + min -end - -local function onStatsGrabPollution() - local pollutionStats = game.pollution_statistics - local counts = pollutionStats.output_counts - - for name,count in pairs(counts) do - local previousCount = world.pollutionConsumed[name] - world.pollutionConsumed[name] = count - local delta - if not previousCount then - delta = count - else - delta = count - previousCount - end - - if delta ~= 0 then - world.pollutionDeltas[name] = (world.pollutionDeltas[name] or 0) + delta - end - end -end - -local function onStatsGrabTotalPollution() - if world.evolutionPerPollution ~= 0 then - local pollutionStats = game.pollution_statistics - local counts = pollutionStats.input_counts - - for name,count in pairs(counts) do - local previousCount = world.pollutionProduced[name] - world.pollutionProduced[name] = count - local delta - if not previousCount then - delta = count - else - delta = count - previousCount - end - - if delta ~= 0 then - world.pollutionDeltas["totalPollution"] = (world.pollutionDeltas["totalPollution"] or 0) + delta - end - end - end -end - -local function onStatsGrabKill() - local killStats = game.forces.enemy.kill_count_statistics - - local counts = killStats.output_counts - for name,count in pairs(counts) do - local previousCount = world.kills[name] - world.kills[name] = count - local delta - if not previousCount then - delta = count - else - delta = count - previousCount - end - - if delta ~= 0 then - world.killDeltas[name] = (world.killDeltas[name] or 0) + delta - end - end - - counts = killStats.input_counts - for name,count in pairs(counts) do - local previousCount = world.kills[name] - world.kills[name] = count - local delta - if not previousCount then - delta = count - else - delta = count - previousCount - end - - if delta ~= 0 then - world.killDeltas[name] = (world.killDeltas[name] or 0) + delta - end - end -end - -local function reset() - world.killDeltasIterator = nil - world.pollutionDeltasIterator = nil - world.kills = {} - world.killDeltas = { - ["time"] = math.floor(game.tick / 60) - } - world.totalEvolution = 0 - world.researchCompleted = 0 - world.totalResearch = 0 - world.ticksAccrued = 0 - world.researchEvolutionMultiplier = 0 - world.tickEvolutionMultiplier = 0 - world.totalPostiveEvolution = 0 - world.totalNegativeEvolution = 0 - world.pollutionConsumed = {} - world.pollutionProduced = {} - world.pollutionDeltas = {} - world.stats = { - ["tile"] = 0, - ["tree"] = 0, - ["dyingTree"] = 0, - ["absorbed"] = 0, - ["spawner"] = 0, - ["hive"] = 0, - ["unit"] = 0, - ["worm"] = 0, - ["totalPollution"] = 0, - ["time"] = 0, - ["evolutionMultiplier"] = 0, - ["minimumEvolution"] = 0, - ["researchEvolutionCap"] = 0, - ["lowPlayer"] = 0, - ["mediumPlayer"] = 0, - ["highPlayer"] = 0 - } -end - -local function onModSettingsChange(event) - - if event and (string.sub(event.setting, 1, #"rampant-evolution") ~= "rampant-evolution") then - return false - end - - world.processingPerTick = settings.global["rampant-evolution--processingPerTick"].value - - world.evolutionPerSpawnerAbsorbed = settings.global["rampant-evolution-evolutionPerSpawnerAbsorbed"].value * SETTINGS_TO_PERCENT - world.evolutionPerTreeAbsorbed = settings.global["rampant-evolution-evolutionPerTreeAbsorbed"].value * SETTINGS_TO_PERCENT - world.evolutionPerTreeDied = settings.global["rampant-evolution-evolutionPerTreeDied"].value * SETTINGS_TO_PERCENT - world.evolutionPerTileAbsorbed = settings.global["rampant-evolution-evolutionPerTileAbsorbed"].value * SETTINGS_TO_PERCENT - world.evolutionPerSpawnerKilled = settings.global["rampant-evolution-evolutionPerSpawnerKilled"].value * SETTINGS_TO_PERCENT - world.evolutionPerUnitKilled = settings.global["rampant-evolution-evolutionPerUnitKilled"].value * SETTINGS_TO_PERCENT - world.evolutionPerHiveKilled = settings.global["rampant-evolution-evolutionPerHiveKilled"].value * SETTINGS_TO_PERCENT - world.evolutionPerWormKilled = settings.global["rampant-evolution--evolutionPerWormKilled"].value * SETTINGS_TO_PERCENT - - world.evolutionPerTime = settings.global["rampant-evolution--evolutionPerTime"].value * SETTINGS_TO_PERCENT - world.evolutionPerPollution = settings.global["rampant-evolution--evolutionPerPollution"].value * SETTINGS_TO_PERCENT - - world.displayEvolutionMsg = settings.global["rampant-evolution--displayEvolutionMsg"].value - world.displayEvolutionMsgInterval = math.ceil(settings.global["rampant-evolution--displayEvolutionMsgInterval"].value * (60 * 60)) - - world.minimumDevolutionPercentage = settings.global["rampant-evolution--minimumDevolutionPercentage"].value - - world.evolutionResolutionLevel = settings.global["rampant-evolution--evolutionResolutionLevel"].value - - world.spawnerLookup = {} - world.hiveLookup = {} - world.wormLookup = {} - world.unitLookup = {} - - if settings.global["rampant-evolution--recalculateAllEvolution"].value then - reset() - game.forces.enemy.evolution_factor = 0 - game.print({"description.rampant-evolution--refreshingEvolution"}) - end - - for entityName, entityPrototype in pairs(game.entity_prototypes) do - if (entityPrototype.type == "unit-spawner") and sFind(entityName, "-spawner") then - world.spawnerLookup[entityName] = 1 - elseif (entityPrototype.type == "unit-spawner") and sFind(entityName, "-hive") then - world.hiveLookup[entityName] = 1 - elseif (entityPrototype.type == "turret") and sFind(entityName, "-worm") then - world.wormLookup[entityName] = 1 - elseif (entityPrototype.type == "unit") and (sFind(entityName, "biter") or sFind(entityName, "spitter")) then - world.unitLookup[entityName] = 1 - end - end - - world.enabledResearchEvolutionCap = settings.global["rampant-evolution--researchEvolutionCap"].value - world.researchLookup = {} - world.researchTotals = {} - world.researchCurrent = {} - - local sciencePackWeightLookup = { - [1] = settings.global["rampant-evolution--technology-automation-science-multiplier"].value, - [2] = settings.global["rampant-evolution--technology-logistic-science-multiplier"].value, - [3] = settings.global["rampant-evolution--technology-military-science-multiplier"].value, - [4] = settings.global["rampant-evolution--technology-chemical-science-multiplier"].value, - [5] = settings.global["rampant-evolution--technology-production-science-multiplier"].value, - [6] = settings.global["rampant-evolution--technology-utility-science-multiplier"].value, - [7] = settings.global["rampant-evolution--technology-space-science-multiplier"].value - } - local sciencePackOrder = { - "automation-science-pack", - "logistic-science-pack", - "military-science-pack", - "chemical-science-pack", - "production-science-pack", - "utility-science-pack", - "space-science-pack" - } - local sciencePackOrderLookup = {} - for index, science in pairs(sciencePackOrder) do - sciencePackOrderLookup[science] = index - world.researchTotals[index] = 0 - world.researchCurrent[index] = 0 - end - - local totalTechnology = 0 - local includeUpgrades = settings.global["rampant-evolution--researchEvolutionCapIncludeUpgrades"].value - - for technologyName, technologyPrototype in pairs(game.technology_prototypes) do - local highestOrder = -1 - - if not technologyPrototype.research_unit_count_formula - and technologyPrototype.enabled - and not technologyPrototype.hidden - and ((not technologyPrototype.upgrade) or (technologyPrototype.upgrade and includeUpgrades)) - then - for _, ingredient in pairs(technologyPrototype.research_unit_ingredients) do - if sciencePackOrderLookup[ingredient.name] then - if highestOrder < sciencePackOrderLookup[ingredient.name] then - highestOrder = sciencePackOrderLookup[ingredient.name] - end - end - end - if (highestOrder ~= -1) then - local weight = sciencePackWeightLookup[highestOrder] - totalTechnology = totalTechnology + weight - world.researchTotals[highestOrder] = (world.researchTotals[highestOrder] or 0) + weight - world.researchLookup[technologyName] = {weight, highestOrder} - world.totalResearch = world.totalResearch + 1 - end - end - end - - for tech, value in pairs(world.researchLookup) do - world.researchLookup[tech][1] = value[1] / totalTechnology - end - for scienceIndex=1,#sciencePackOrder do - world.researchTotals[scienceIndex] = world.researchTotals[scienceIndex] / totalTechnology - end - - for technologyName, technology in pairs(game.forces.player.technologies) do - if technology.researched then - local evolutionIncrease = world.researchLookup[technologyName] - if evolutionIncrease then - world.researchCompleted = world.researchCompleted + 1 - if world.enabledResearchEvolutionCap then - world.researchCurrent[evolutionIncrease[2]] = world.researchCurrent[evolutionIncrease[2]] + evolutionIncrease[1] - world.stats["researchEvolutionCap"] = world.stats["researchEvolutionCap"] + evolutionIncrease[1] - end - end - end - end - - if not world.enabledResearchEvolutionCap then - world.stats["researchEvolutionCap"] = 0.9999999999999 - end - - world.toggleResearchEvolutionMultiplier = settings.global["rampant-evolution--toggleResearchEvolutionMultiplier"].value - world.startResearchEvolutionMultiplier = settings.global["rampant-evolution--startResearchMultiplier"].value - world.endResearchEvolutionMultiplier = settings.global["rampant-evolution--endResearchMultiplier"].value - world.researchMultiplierExponent = settings.global["rampant-evolution--researchMultiplierExponent"].value - - world.toggleTickEvolutionMultiplier = settings.global["rampant-evolution--toggleTickEvolutionMultiplier"].value - world.startTickEvolutionMultiplier = settings.global["rampant-evolution--startTickMultiplier"].value - world.endTickEvolutionMultiplier = settings.global["rampant-evolution--endTickMultiplier"].value - world.tickMultiplierExponent = settings.global["rampant-evolution--tickMultiplierExponent"].value - - if world.toggleResearchEvolutionMultiplier then - world.researchEvolutionMultiplier = variableInterpolation( - (world.researchCompleted / world.totalResearch), - world.startResearchEvolutionMultiplier, - world.endResearchEvolutionMultiplier, - world.researchMultiplierExponent - ) - - world.stats.evolutionMultiplier = world.researchEvolutionMultiplier + world.tickEvolutionMultiplier - end - - world.totalTicksAccruable = settings.global["rampant-evolution--totalTickMultiplier"].value * (60 * 60) - - world.evolutionPerLowPlayer = settings.global["rampant-evolution--evolutionPerLowPlayer"].value * SETTINGS_TO_PERCENT - world.evolutionPerMediumPlayer = settings.global["rampant-evolution--evolutionPerMediumPlayer"].value * SETTINGS_TO_PERCENT - world.evolutionPerHighPlayer = settings.global["rampant-evolution--evolutionPerHighPlayer"].value * SETTINGS_TO_PERCENT - - local structureTypeLookup = {} - for _, structure in pairs(LOW_VALUE_PLAYER_STRUCTURES) do - structureTypeLookup[structure] = {world.evolutionPerLowPlayer, "lowPlayer"} - end - for _, structure in pairs(MEDIUM_VALUE_PLAYER_STRUCTURES) do - structureTypeLookup[structure] = {world.evolutionPerMediumPlayer, "mediumPlayer"} - end - for _, structure in pairs(HIGH_VALUE_PLAYER_STRUCTURES) do - structureTypeLookup[structure] = {world.evolutionPerHighPlayer, "highPlayer"} - end - - world.playerStructureLookup = {} - for entityName, entityPrototype in pairs(game.entity_prototypes) do - local structureType = structureTypeLookup[entityPrototype.type] - if structureType then - world.playerStructureLookup[entityName] = structureType - end - end - - if settings.global["rampant-evolution--setMapSettingsToZero"].value then - game.map_settings.enemy_evolution.enabled = false - else - game.map_settings.enemy_evolution.enabled = true - end - - for playerIndex in pairs(world.playerGuiTick) do - world.playerGuiTick[playerIndex] = nil - end - - onStatsGrabPollution() - onStatsGrabKill() - onStatsGrabTotalPollution() - - if not settings.global["rampant-evolution--recalculateAllEvolution"].value then - world.killDeltasIterator = nil - world.pollutionDeltasIterator = nil - world.killDeltas = {} - world.pollutionDeltas = {} - end - - return true -end - -local function onConfigChanged() - if not world.version or world.version < 11 then - world.version = 11 - - reset() - - world.tickModAdded = game.tick - - world.playerGuiOpen = {} - world.playerGuiTick = {} - - world.lastChangeShortTick = 0 - world.lastChangeShortEvolution = 0 - world.lastChangeShort = 0 - world.lastChangeLongTick = 0 - world.lastChangeLongEvolution = 0 - world.lastChangeLong = 0 - world.lastChangeLongLongTick = 0 - world.lastChangeLongLongEvolution = 0 - world.lastChangeLongLong = 0 - world.playerIterator = nil - - onModSettingsChange() - - game.print("Rampant Evolution - Version 1.6.4") - end -end - -local function calculateEvolution(evo, evolutionModifier, stats, statField, runsRemaining) - if world.toggleTickEvolutionMultiplier - and (statField == "time") - then - world.ticksAccrued = world.ticksAccrued + (60 * runsRemaining) - - world.tickEvolutionMultiplier = variableInterpolation( - world.ticksAccrued / world.totalTicksAccruable, - world.startTickEvolutionMultiplier, - world.endTickEvolutionMultiplier, - world.tickMultiplierExponent - ) - - world.stats.evolutionMultiplier = world.researchEvolutionMultiplier + world.tickEvolutionMultiplier - end - - if (evolutionModifier ~= 0) then - local totalEvolution = world.totalEvolution - local totalPostiveEvolution = world.totalPostiveEvolution - local totalNegativeEvolution = world.totalNegativeEvolution - local minimumEvolution = stats.minimumEvolution - local evolutionMultiplier = 1 + stats.evolutionMultiplier - local maximumEvolution = mMin(stats.researchEvolutionCap, 0.9999999999999) - local minimumTotalEvolution = mMax(minimumEvolution / (1 - minimumEvolution), 0) - local maximumTotalEvolution = maximumEvolution / (1 - maximumEvolution) - local process = true - - while (runsRemaining > 0) and process do - runsRemaining = runsRemaining - 1 - local contribution = (((1 - evo)^2) * evolutionModifier) - local adjustedEvo = totalEvolution + (contribution * evolutionMultiplier) - if adjustedEvo <= minimumTotalEvolution then - contribution = minimumTotalEvolution - totalEvolution - process = false - elseif adjustedEvo >= maximumTotalEvolution then - contribution = maximumTotalEvolution - totalEvolution - process = false - end - - if contribution > 0 then - if process then - contribution = contribution * evolutionMultiplier - end - totalPostiveEvolution = totalPostiveEvolution + contribution - else - totalNegativeEvolution = totalNegativeEvolution + contribution - end - - totalEvolution = totalEvolution + contribution - evo = totalEvolution / (1+totalEvolution) - stats[statField] = stats[statField] + contribution - end - local newMinimumEvolution = world.minimumDevolutionPercentage * evo - if newMinimumEvolution > minimumEvolution then - stats.minimumEvolution = newMinimumEvolution - end - world.totalNegativeEvolution = totalNegativeEvolution - world.totalPostiveEvolution = totalPostiveEvolution - world.totalEvolution = totalEvolution - end - return evo -end - -local function processKill(evo, initialRunsRemaining) - local name = world.killDeltasIterator - local count - if not name then - name,count = next(world.killDeltas, nil) - else - count = world.killDeltas[name] - end - if not name then - return evo - end - world.killDeltasIterator = next(world.killDeltas, name) - local runsRemaining = math.min(initialRunsRemaining, count) - count = count - runsRemaining - if count <= 0 then - world.killDeltas[name] = nil - else - world.killDeltas[name] = count - end - - local evolutionModifier = 0 - local statField - - if name == "time" then - evolutionModifier = world.evolutionPerTime - statField = "time" - elseif world.spawnerLookup[name] then - evolutionModifier = world.evolutionPerSpawnerKilled - statField = "spawner" - elseif world.hiveLookup[name] then - evolutionModifier = world.evolutionPerHiveKilled - statField = "hive" - elseif world.wormLookup[name] then - evolutionModifier = world.evolutionPerWormKilled - statField = "worm" - elseif world.unitLookup[name] then - evolutionModifier = world.evolutionPerUnitKilled - statField = "unit" - elseif world.playerStructureLookup[name] then - local evolutionDeltaPair = world.playerStructureLookup[name] - if evolutionDeltaPair and evolutionDeltaPair[1] ~= 0 then - evolutionModifier = evolutionDeltaPair[1] - statField = evolutionDeltaPair[2] - end - end - - return calculateEvolution( - evo, - evolutionModifier, - world.stats, - statField, - runsRemaining - ) -end - -local function processPollution(evo, initialRunsRemaining) - local name = world.pollutionDeltasIterator - local count - if not name then - name,count = next(world.pollutionDeltas, nil) - else - count = world.pollutionDeltas[name] - end - if not name then - return evo - end - world.pollutionDeltasIterator = next(world.pollutionDeltas, name) - local runsRemaining = math.min(initialRunsRemaining, count) - count = count - runsRemaining - if count <= 0 then - world.pollutionDeltas[name] = nil - else - world.pollutionDeltas[name] = count - end - - local evolutionModifier = 0 - local statField - - if (name == "tile-proxy") then - evolutionModifier = world.evolutionPerTileAbsorbed - statField = "tile" - elseif (name == "tree-proxy") then - evolutionModifier = world.evolutionPerTreeAbsorbed - statField = "tree" - elseif (name == "tree-dying-proxy") then - evolutionModifier = world.evolutionPerTreeDied - statField = "dyingTree" - elseif (name == "totalPollution") then - evolutionModifier = world.evolutionPerPollution - statField = "totalPollution" - elseif world.spawnerLookup[name] then - evolutionModifier = world.evolutionPerSpawnerAbsorbed - statField = "absorbed" - end - - return calculateEvolution( - evo, - evolutionModifier, - world.stats, - statField, - runsRemaining - ) -end - -local function printEvolutionMsg() - local enemy = game.forces.enemy - local stats = world.stats - local enemyEvo = enemy.evolution_factor - game.print({ - "description.rampant-evolution--displayEvolutionMsg", - roundTo(enemyEvo*100,0.001), - roundTo(calculateDisplayValue(stats["tile"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["tree"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["dyingTree"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["absorbed"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["spawner"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["hive"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["unit"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["worm"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["totalPollution"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["time"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["lowPlayer"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["mediumPlayer"], world, enemyEvo)*100, 0.001), - roundTo(calculateDisplayValue(stats["highPlayer"], world, enemyEvo)*100, 0.001), - roundTo(stats["evolutionMultiplier"]*100, 0.001), - roundTo(stats["minimumEvolution"]*100, 0.001), - roundTo(stats["researchEvolutionCap"]*100, 0.001), - roundTo(world.lastChangeShort*100, 0.001), - roundTo(world.lastChangeLong*100, 0.001), - roundTo(world.lastChangeLongLong*100, 0.001) - }) -end - -local function processing(resolutionLevel, evo) - return processKill( - processPollution( - evo, - resolutionLevel - ), - resolutionLevel - ) -end - -local function onProcessingWrapper(event) - local enemy = game.forces.enemy - local tick = event.tick - local resolutionLevel = world.evolutionResolutionLevel - if resolutionLevel == 0 then - local x = tick / 43200000 -- (60 * 60 * 60 * 200) - resolutionLevel = linearInterpolation( - mMin(x, 1), - 20, - 4000 - ) - end - - local evo = enemy.evolution_factor - for _ = 1, world.processingPerTick do - evo = processing(resolutionLevel, evo) - end - enemy.evolution_factor = evo - - if (tick % 60) == 0 then - world.killDeltas["time"] = (world.killDeltas["time"] or 0) + 1 - end - - if (tick - world.lastChangeShortTick) >= SHORT_EVOLUTION_CHECK_DURATION then - world.lastChangeShortTick = tick - world.lastChangeShort = evo - world.lastChangeShortEvolution - world.lastChangeShortEvolution = evo - end - - if (tick - world.lastChangeLongTick) >= LONG_EVOLUTION_CHECK_DURATION then - world.lastChangeLongTick = tick - world.lastChangeLong = evo - world.lastChangeLongEvolution - world.lastChangeLongEvolution = evo - end - - if (tick - world.lastChangeLongLongTick) >= LONG_LONG_EVOLUTION_CHECK_DURATION then - world.lastChangeLongLongTick = tick - world.lastChangeLongLong = evo - world.lastChangeLongLongEvolution - world.lastChangeLongLongEvolution = evo - end - - if world.displayEvolutionMsg and ((tick % world.displayEvolutionMsgInterval) == 0) then - printEvolutionMsg() - end - - local playerId = world.playerIterator - if not playerId then - world.playerIterator = next(game.connected_players, world.playerIterator) - else - world.playerIterator = next(game.connected_players, playerId) - gui.update(world, playerId, tick) - end -end - -local function onInit() - global.world = {} - - world = global.world - - onConfigChanged() -end - -local function onLoad() - world = global.world -end - -local function onLuaShortcut(event) - if event.prototype_name == "rampant-evolution--info" then - local playerIndex = event.player_index - local guiPanel = world.playerGuiOpen[playerIndex] - if not guiPanel then - world.playerGuiOpen[playerIndex] = gui.create(game.players[playerIndex], world) - else - gui.close(world, event.player_index) - end - end -end - -local function onPlayerRemoved(event) - world.playerIterator = nil -end - -local function onResearchCompleted(event) - if not world.researchLookup then - return - end - local research = event.research - local technologyName = research.name - local evolutionIncrease = world.researchLookup[technologyName] - if world.toggleResearchEvolutionMultiplier - and evolutionIncrease - and research.force.name == "player" - then - world.researchCompleted = world.researchCompleted + 1 - world.researchEvolutionMultiplier = variableInterpolation( - (world.researchCompleted / world.totalResearch), - world.startResearchEvolutionMultiplier, - world.endResearchEvolutionMultiplier, - world.researchMultiplierExponent - ) - - world.stats.evolutionMultiplier = world.researchEvolutionMultiplier + world.tickEvolutionMultiplier - - if world.enabledResearchEvolutionCap then - world.researchCurrent[evolutionIncrease[2]] = world.researchCurrent[evolutionIncrease[2]] + evolutionIncrease[1] - world.stats["researchEvolutionCap"] = world.stats["researchEvolutionCap"] + evolutionIncrease[1] - end - end -end - -local function onResearchUncompleted(event) - if not world.researchLookup then - return - end - local research = event.research - local technologyName = research.name - local evolutionIncrease = world.researchLookup[technologyName] - if world.toggleResearchEvolutionMultiplier - and evolutionIncrease - and research.force.name == "player" - then - world.researchCompleted = world.researchCompleted - 1 - world.researchEvolutionMultiplier = variableInterpolation( - (world.researchCompleted / world.totalResearch), - world.startResearchEvolutionMultiplier, - world.endResearchEvolutionMultiplier, - world.researchMultiplierExponent - ) - - world.stats.evolutionMultiplier = world.researchEvolutionMultiplier + world.tickEvolutionMultiplier - - if world.enabledResearchEvolutionCap then - world.researchCurrent[evolutionIncrease[2]] = world.researchCurrent[evolutionIncrease[2]] + evolutionIncrease[1] - world.stats["researchEvolutionCap"] = world.stats["researchEvolutionCap"] - evolutionIncrease[1] - end - end -end - --- hooks - -script.on_event( - { - defines.events.on_player_left_game, - defines.events.on_player_kicked, - defines.events.on_player_removed, - defines.events.on_player_banned - }, - onPlayerRemoved) -script.on_event(defines.events.on_lua_shortcut, onLuaShortcut) -script.on_nth_tick((2*60*60)+0, onStatsGrabPollution) -script.on_nth_tick((2*60*60)+1, onStatsGrabKill) -script.on_nth_tick((2*60*60)+2, onStatsGrabTotalPollution) -script.on_event(defines.events.on_tick, onProcessingWrapper) -script.on_event(defines.events.on_research_finished, onResearchCompleted) -script.on_event(defines.events.on_research_reversed, onResearchUncompleted) - -script.on_init(onInit) -script.on_load(onLoad) -script.on_event(defines.events.on_runtime_mod_setting_changed, onModSettingsChange) -script.on_configuration_changed(onConfigChanged) - --- commands - -local function rampantEvolution(event) - printEvolutionMsg() -end - -commands.add_command('rampantEvolution', "", rampantEvolution) diff --git a/RampantEvolution_1.6.4/data-final-fixes.lua b/RampantEvolution_1.6.4/data-final-fixes.lua deleted file mode 100644 index 59151e43..00000000 --- a/RampantEvolution_1.6.4/data-final-fixes.lua +++ /dev/null @@ -1,66 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local presents = data.raw['map-gen-presets'].default - -if settings.startup["rampant-evolution--shortcut-bar"].value then - data:extend({ - { - type = "shortcut", - name = "rampant-evolution--info", - action = "lua", - localised_name = {"controls.rampant-evolution--toggle_evolution_info"}, - toggleable = true, - icon = - { - filename = "__core__/graphics/icons/alerts/warning-icon.png", - priority = "extra-high-no-scale", - scale = 0.25, - size = 64, - flags = {"icon"} - } - } - }) -end - --- change scenarios like death world -for present, data in pairs(presents) do - if (present ~= "type") and (present ~= "name") and (present ~= "default") then - if not data.advanced_settings then - data.advanced_settings = { - enemy_evolution = { - time_factor=0, - destroy_factor=0, - pollution_factor=0 - } - } - else - data.advanced_settings.enemy_evolution = { - time_factor=0, - destroy_factor=0, - pollution_factor=0 - } - end - end -end - --- change new map defaults -data.raw['map-settings']['map-settings'].enemy_evolution = { - enabled=true, - time_factor=0, - destroy_factor=0, - pollution_factor=0 -} diff --git a/RampantEvolution_1.6.4/info.json b/RampantEvolution_1.6.4/info.json deleted file mode 100644 index 674833d9..00000000 --- a/RampantEvolution_1.6.4/info.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name" : "RampantEvolution", - "factorio_version" : "1.1", - "version" : "1.6.4", - "title" : "Rampant Evolution", - "author" : "Veden", - "homepage" : "", - "description" : "Changes evolution mechanic to allow for green play. All evolution parameters are configurable and retroactively work on-the-fly. Tries to balance evolution level with number of nests covered by pollution. Killing units reduces evolution. Sets vanilla map evolution factors to 0 in new game settings and can change existing save map evolution factors in mod settings. If you want the vanilla options still, use the mod settings in Rampant Evolution. Has stats for displaying evolution in game. Console command /rampantEvolution", - "dependencies" : ["base >= 1.1.0", "? Rampant"] -} diff --git a/RampantEvolution_1.6.4/libs/Gui.lua b/RampantEvolution_1.6.4/libs/Gui.lua deleted file mode 100644 index 036a18ea..00000000 --- a/RampantEvolution_1.6.4/libs/Gui.lua +++ /dev/null @@ -1,455 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if guiG then - return guiG -end - --- imports - --- constants - --- import functions - -local mAbs = math.abs - --- module code - -local gui = {} - -function gui.calculateDisplayValue(e, world, evo) - local totalNegEvo = world.totalNegativeEvolution - local denominator = ( - world.totalPostiveEvolution - + mAbs(totalNegEvo) - ) - if (denominator == 0) then - return 0 - end - local negEvo = evo * (mAbs(totalNegEvo) / denominator) - - if e < 0 then - return -negEvo * (e / totalNegEvo) - else - return (evo + mAbs(negEvo)) * (e / world.totalPostiveEvolution) - end -end - -function gui.roundTo(x, multiplier) - return math.floor(x / multiplier) * multiplier -end - -function gui.create(player, world) - local guis = player.gui.screen.children - for i=1,#guis do - if guis[i].name == "rampant-evolution--metrics" then - return guis[i] - end - end - local panel = player.gui.screen.add({ - type="frame", - name="rampant-evolution--metrics", - direction="vertical", - caption="Evolution Metrics" - }) - panel.auto_center = true - local contentPanel = panel.add({type="frame", name="contentPanel", direction="horizontal"}) - local contents = contentPanel.add({type="table", name="contentTable", column_count=2}) - contents.draw_horizontal_lines = true - contents.vertical_centering = true - contents.add({ - type = "label", - caption = {"description.rampant-evolution--evolution"}, - tooltip = {"tooltip.rampant-evolution--evolution"} - }) - contents.add({ - type = "label", - name = "EvolutionValue", - tooltip = {"tooltip.rampant-evolution--evolution"} - }) - - if world.evolutionPerTileAbsorbed ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--tile"}, - tooltip = {"tooltip.rampant-evolution--tile"} - }) - contents.add({ - type = "label", - name = "TileValue", - tooltip = {"tooltip.rampant-evolution--tile"} - }) - end - - if world.evolutionPerTreeAbsorbed ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--tree"}, - tooltip = {"tooltip.rampant-evolution--tree"} - }) - contents.add({ - type = "label", - name = "TreeValue", - tooltip = {"tooltip.rampant-evolution--tree"} - }) - end - - if world.evolutionPerTreeDied ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--dyingTree"}, - tooltip = {"tooltip.rampant-evolution--dyingTree"} - }) - contents.add({ - type = "label", - name = "DyingTreeValue", - tooltip = {"tooltip.rampant-evolution--dyingTree"} - }) - end - - if world.evolutionPerSpawnerAbsorbed ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--absorbed"}, - tooltip = {"tooltip.rampant-evolution--absorbed"} - }) - contents.add({ - type = "label", - name = "AbsorbedValue", - tooltip = {"tooltip.rampant-evolution--absorbed"} - }) - end - - if world.evolutionPerSpawnerKilled ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--spawner"}, - tooltip = {"tooltip.rampant-evolution--spawner"} - }) - contents.add({ - type = "label", - name = "SpawnerValue", - tooltip = {"tooltip.rampant-evolution--spawner"} - }) - end - - if world.evolutionPerHiveKilled ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--hive"}, - tooltip = {"tooltip.rampant-evolution--hive"} - }) - contents.add({ - type = "label", - name = "HiveValue", - tooltip = {"tooltip.rampant-evolution--hive"} - }) - end - - if world.evolutionPerUnitKilled ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--unit"}, - tooltip = {"tooltip.rampant-evolution--unit"} - }) - contents.add({ - type = "label", - name = "UnitValue", - tooltip = {"tooltip.rampant-evolution--unit"} - }) - end - - if world.evolutionPerWormKilled ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--worm"}, - tooltip = {"tooltip.rampant-evolution--worm"} - }) - contents.add({ - type = "label", - name = "WormValue", - tooltip = {"tooltip.rampant-evolution--worm"} - }) - end - - if world.evolutionPerPollution ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--totalPollution"}, - tooltip = {"tooltip.rampant-evolution--totalPollution"} - }) - contents.add({ - type = "label", - name = "TotalPollutionValue", - tooltip = {"tooltip.rampant-evolution--totalPollution"} - }) - end - - if world.evolutionPerTime ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--time"}, - tooltip = {"tooltip.rampant-evolution--time"} - }) - contents.add({ - type = "label", - name = "TimeValue", - tooltip = {"tooltip.rampant-evolution--time"} - }) - end - - if world.evolutionPerLowPlayer ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--lowPlayer"}, - tooltip = {"tooltip.rampant-evolution--lowPlayer"} - }) - contents.add({ - type = "label", - name = "LowPlayer", - tooltip = {"tooltip.rampant-evolution--lowPlayer"} - }) - end - - if world.evolutionPerMediumPlayer ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--mediumPlayer"}, - tooltip = {"tooltip.rampant-evolution--mediumPlayer"} - }) - contents.add({ - type = "label", - name = "MediumPlayer", - tooltip = {"tooltip.rampant-evolution--mediumPlayer"} - }) - end - - if world.evolutionPerHighPlayer ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--highPlayer"}, - tooltip = {"tooltip.rampant-evolution--highPlayer"} - }) - contents.add({ - type = "label", - name = "HighPlayer", - tooltip = {"tooltip.rampant-evolution--highPlayer"} - }) - end - - if world.toggleTickEvolutionMultiplier or world.toggleResearchEvolutionMultiplier then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--evolutionMultiplier"}, - tooltip = {"tooltip.rampant-evolution--evolutionMultiplier"} - }) - contents.add({ - type = "label", - name = "EvolutionMultiplier", - tooltip = {"tooltip.rampant-evolution--evolutionMultiplier"} - }) - end - - if world.minimumDevolutionPercentage ~= 0 then - contents.add({ - type = "label", - caption = {"description.rampant-evolution--minimumEvolution"}, - tooltip = {"tooltip.rampant-evolution--minimumEvolution"} - }) - contents.add({ - type = "label", - name = "MinimumEvolutionValue", - tooltip = {"tooltip.rampant-evolution--minimumEvolution"} - }) - end - - if world.enabledResearchEvolutionCap then - contents.add({ - type = "label", - name = "ResearchEvolutionCapLabel", - caption = {"description.rampant-evolution--researchEvolutionCap"} - }) - contents.add({ - type = "label", - name = "ResearchEvolutionCap" - }) - end - - contents.add({ - type = "label", - caption = {"description.rampant-evolution--shortChange"}, - tooltip = {"tooltip.rampant-evolution--shortChange"} - }) - contents.add({ - type = "label", - name = "ShortChangeValue", - tooltip = {"tooltip.rampant-evolution--shortChange"} - }) - - contents.add({ - type = "label", - caption = {"description.rampant-evolution--longChange"}, - tooltip = {"tooltip.rampant-evolution--longChange"} - }) - contents.add({ - type = "label", - name = "LongChangeValue", - tooltip = {"tooltip.rampant-evolution--longChange"} - }) - - contents.add({ - type = "label", - caption = {"description.rampant-evolution--longLongChange"}, - tooltip = {"tooltip.rampant-evolution--longLongChange"} - }) - contents.add({ - type = "label", - name = "LongLongChangeValue", - tooltip = {"tooltip.rampant-evolution--longLongChange"} - }) - - - return panel -end - -function gui.close(world, playerIndex) - local guiPanel = world.playerGuiOpen[playerIndex] - if guiPanel then - guiPanel.destroy() - world.playerGuiOpen[playerIndex] = nil - world.playerGuiTick[playerIndex] = nil - end -end - -function gui.update(world, playerId, tick) - local guiPanel = world.playerGuiOpen[playerId] - if guiPanel then - if not world.playerGuiTick[playerId] or - (tick - world.playerGuiTick[playerId]) >= world.displayEvolutionMsgInterval - then - world.playerGuiTick[playerId] = tick - else - return - end - local enemy = game.forces.enemy - local contentTable = guiPanel.contentPanel.contentTable - local stats = world.stats - local enemyEvo = enemy.evolution_factor - if contentTable.EvolutionValue then - contentTable.EvolutionValue.caption = - tostring(gui.roundTo(enemyEvo*100,0.001)).."%" - end - - if contentTable.TileValue then - contentTable.TileValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["tile"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.TreeValue then - contentTable.TreeValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["tree"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.DyingTreeValue then - contentTable.DyingTreeValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["dyingTree"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.AbsorbedValue then - contentTable.AbsorbedValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["absorbed"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.SpawnerValue then - contentTable.SpawnerValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["spawner"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.HiveValue then - contentTable.HiveValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["hive"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.UnitValue then - contentTable.UnitValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["unit"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.WormValue then - contentTable.WormValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["worm"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.TotalPollutionValue then - contentTable.TotalPollutionValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["totalPollution"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.TimeValue then - contentTable.TimeValue.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["time"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.EvolutionMultiplier then - contentTable.EvolutionMultiplier.caption = - tostring(gui.roundTo(stats["evolutionMultiplier"]*100, 0.001)).."%" - end - - if contentTable.MinimumEvolutionValue then - contentTable.MinimumEvolutionValue.caption = - tostring(gui.roundTo(stats["minimumEvolution"]*100, 0.001)).."%" - end - - if contentTable.LowPlayer then - contentTable.LowPlayer.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["lowPlayer"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.MediumPlayer then - contentTable.MediumPlayer.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["mediumPlayer"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.HighPlayer then - contentTable.HighPlayer.caption = - tostring(gui.roundTo(gui.calculateDisplayValue(stats["highPlayer"], world, enemyEvo)*100, 0.001)).."%" - end - - if contentTable.ResearchEvolutionCap then - contentTable.ResearchEvolutionCap.caption = - tostring(gui.roundTo(stats["researchEvolutionCap"]*100, 0.001)).."%" - local tooltip = {"tooltip.rampant-evolution--researchEvolutionCap"} - for i=1,7 do - tooltip[#tooltip+1] = gui.roundTo(world.researchCurrent[i]*100, 0.001) or 0 - tooltip[#tooltip+1] = gui.roundTo(world.researchTotals[i]*100, 0.001) - end - contentTable.ResearchEvolutionCap.tooltip = tooltip - contentTable.ResearchEvolutionCapLabel.tooltip = tooltip - end - - contentTable.ShortChangeValue.caption = - tostring(gui.roundTo(world.lastChangeShort*100, 0.001)).."%" - - contentTable.LongChangeValue.caption = - tostring(gui.roundTo(world.lastChangeLong*100, 0.001)).."%" - - contentTable.LongLongChangeValue.caption = - tostring(gui.roundTo(world.lastChangeLongLong*100, 0.001)).."%" - end -end - -guiGend = gui -return gui diff --git a/RampantEvolution_1.6.4/locale/en/locale.cfg b/RampantEvolution_1.6.4/locale/en/locale.cfg deleted file mode 100644 index 511e1e5e..00000000 --- a/RampantEvolution_1.6.4/locale/en/locale.cfg +++ /dev/null @@ -1,139 +0,0 @@ -[entity-name] - -[entity-description] - -[mod-setting-name] -rampant-evolution--toggleResearchEvolutionMultiplier=Enable research multiplier -rampant-evolution--startResearchMultiplier=Start research multiplier -rampant-evolution--endResearchMultiplier=End research multiplier -rampant-evolution--researchMultiplierExponent=Research multiplier exponent -rampant-evolution--toggleTickEvolutionMultiplier=Enable tick multiplier -rampant-evolution--startTickMultiplier=Start tick multiplier -rampant-evolution--endTickMultiplier=End tick multiplier -rampant-evolution--tickMultiplierExponent=Tick multiplier exponent -rampant-evolution--totalTickMultiplier=Tick multiplier duration - -rampant-evolution--processingPerTick=Process per tick -rampant-evolution--evolutionPerWormKilled=Evolution per worm killed -rampant-evolution-evolutionPerUnitKilled=Evolution per biter unit killed -rampant-evolution-evolutionPerHiveKilled=Evolution per Rampant hive killed -rampant-evolution-evolutionPerSpawnerKilled=Evolution per Spawner killed -rampant-evolution-evolutionPerTileAbsorbed=Evolution per tile absorbed pollution -rampant-evolution-evolutionPerTreeDied=Evolution per tree damaged by pollution -rampant-evolution-evolutionPerTreeAbsorbed=Evolution per tree absorbed pollution -rampant-evolution-evolutionPerSpawnerAbsorbed=Evolution per Spawner absorbed pollution -rampant-evolution--recalculateAllEvolution=Recalculate evolution when settings change -rampant-evolution--displayEvolutionMsgInterval=Interval to show evolution in console or gui in minutes -rampant-evolution--displayEvolutionMsg=Enable console messages showing evolution -rampant-evolution--evolutionPerPollution=Evolution per pollution generated -rampant-evolution--evolutionPerTime=Evolution per second elapsed -rampant-evolution--setMapSettingsToZero=Pause vanilla evolution factors (Permanent) -rampant-evolution--minimumDevolutionPercentage=Peak evolution minimum percentage -rampant-evolution--evolutionResolutionLevel=Reconstruction accuracy (0 is auto based on ticks) -rampant-evolution--shortcut-bar=Show shortcut for evolution stats -rampant-evolution--researchEvolutionCap=Enable evolution research cap -rampant-evolution--researchEvolutionCapIncludeUpgrades=Include research upgrades -rampant-evolution--technology-automation-science-multiplier=Automation Science Weight -rampant-evolution--technology-logistic-science-multiplier=Logistic Science Weight -rampant-evolution--technology-military-science-multiplier=Military Science Weight -rampant-evolution--technology-chemical-science-multiplier=Chemical Science Weight -rampant-evolution--technology-production-science-multiplier=Production Science Weight -rampant-evolution--technology-utility-science-multiplier=Utility Science Weight -rampant-evolution--technology-space-science-multiplier=Space Science Weight -rampant-evolution--evolutionPerLowPlayer=Evolution per low value player structure killed -rampant-evolution--evolutionPerMediumPlayer=Evolution per medium value player structure killed -rampant-evolution--evolutionPerHighPlayer=Evolution per high value player structure killed - -[mod-setting-description] -rampant-evolution--toggleResearchEvolutionMultiplier=Enables the research evolution multiplier which increases the evolution gained based on the number of researches completed -rampant-evolution--startResearchMultiplier=This is a percentage increase of evolution gained based on how many researches have been completed. The formula to determine the multiplier is x^ where x = research completed / total research. This setting controls the initial value of the multiplier. ex) 0.2 is equal to 120% -rampant-evolution--endResearchMultiplier=This is a percentage increase of evolution gained based on how many researches have been completed. The formula to determine the multiplier is x^ where x = research completed / total research. This setting controls the ending value of the multiplier. ex) 0.2 is equal to 120% -rampant-evolution--researchMultiplierExponent=The exponent to be used in the research evolution multiplier. Formula x^ where x = research completed / total research - -rampant-evolution--toggleTickEvolutionMultiplier=Enables the tick evolution multiplier which increases the evolution gained based on the duration of the game -rampant-evolution--startTickMultiplier=This is a percentage increase of evolution gained based on how many ticks have elapsed in game. The formula to determine the multiplier is x^ where x = ticks in game / . This setting controls the initial value of the multiplier. ex) 0.2 is equal to 120% -rampant-evolution--endTickMultiplier=This is a percentage increase of evolution gained based on how many ticks have elapsed in game. The formula to determine the multiplier is x^ where x = ticks in game / . This setting controls the ending value of the multiplier. ex) 0.2 is equal to 120% -rampant-evolution--tickMultiplierExponent=The exponent to be used in the tick evolution multiplier. Formula x^ where x = ticks in game / -rampant-evolution--totalTickMultiplier=This is the number of minutes that need to elapse in-game to be at the end tick multiplier - -rampant-evolution--processingPerTick=This controls how many times the processing happens per tick at the reconstruction accuracy. -rampant-evolution--evolutionPerLowPlayer=Low value player structures include:\nammo-turret\nartillery-turret\nelectric-pole\nelectric-turret\nfluid-turret\nThis number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--evolutionPerMediumPlayer=Medium value player structures include:\naccumulator\ncontainer\nlab\nlogistic-container\nradar\nstorage-tank\nsolar-panel\nThis number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--evolutionPerHighPlayer=High value player structures include:\nassembling-machine\nbeacon\nboiler\nfurnace\ngenerator\nmining-drill\nreactor\nroboport\nrocket-silo\nThis number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--researchEvolutionCap=When enabled evolution is capped based on the amount of technology that has been researched. The highest science pack on the technology is how each technology is classified. All infinite technology is excluded. After all technology is classified, the weights for each technology are totalled and then all divided by the total number of technologies. When a technology is researched, the weighted evolution value will be added to the evolution cap. -rampant-evolution--technology-automation-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology weight. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-logistic-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-military-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-chemical-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-production-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-utility-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--technology-space-science-multiplier=This weight is relative to the other weights defined. The higher this weight the more influence these technologies wll have on evolution. Check the evolution gui to see a max potential of each technology. An example is if this settings is 5 and the rest are 1 then each technology in this group is worth 5 times more than if this weight was also a 1. -rampant-evolution--evolutionPerWormKilled=This setting changes how evolution should be affected by worms being killed. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerUnitKilled=This setting changes how evolution should be affected by biter units being killed. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerHiveKilled=This setting changes how evolution should be affected by Rampant hives being killed. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerSpawnerKilled=This setting changes how evolution should be affected by spawners being killed. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerTileAbsorbed=This setting changes how evolution should be affected by pollution being absorbed by tiles. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerTreeDied=This setting changes how evolution should be affected by pollution damaging trees. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerTreeAbsorbed=This setting changes how evolution should be affected by pollution being absorbed by trees. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution-evolutionPerSpawnerAbsorbed=This setting changes how evolution should be affected by pollution being absorbed by spawners. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--evolutionPerPollution=This setting changes how evolution should be affected by pollution being generated. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--evolutionPerTime=This setting changes how evolution should be affected by time elapsed in seconds. This number should be treated the same as the vanilla pollution, spawner, and time sliders in terms of how to interpret it -rampant-evolution--recalculateAllEvolution=When this setting is checked the evolution will be recalculated from the beginning of the game when mod settings change. This will not be a perfect reconstruction of the past evolution. -rampant-evolution--displayEvolutionMsgInterval=This is the interval that the evolution will be displayed on the console or in the gui. /rampantEvolution in the console will display the stats on-demand. -rampant-evolution--displayEvolutionMsg=This is the setting to enable evolution to be displayed on the console at the specified interval. /rampantEvolution in the console will display the stats on-demand. -rampant-evolution--setMapSettingsToZero=If you have an existing save that you want to use this mod on and you want to pause the original map evolution settings. THIS IS PERMANENT, IF YOU REMOVE THE MOD WITH THIS SETTING CHECKED THE EVOLUTION WILL STAY PAUSED. UNCHECKING SHOULD RE-ENABLE THE VANILLA EVOLUTION. -rampant-evolution--minimumDevolutionPercentage=Everytime the evolution goes up, this percentage is multiplied by evolution and stored as the lowest value the evolution can reach. So if you set the mod setting to 0.25 and your evolution hits 10% the lowest your evolution can go to is 2.5% -rampant-evolution--evolutionResolutionLevel=The number of delta counts to compute at a single point. The higher the number the worse the accuracy for recalculating evolution. The tradeoff is low numbers will take a long time to finish recalculating. When this number is 0 it will be auto calcaluted based on the number of ticks in the game. On auto mode, accuracy starts at 20 and moves to 4000 based on x where x is game.ticks / (200 hrs). At 4000, an 200 hour game will take ~45 minutes to recalculate with a single processingPerTick. -rampant-evolution--shortcut-bar=Display evolution stats gui -rampant-evolution--researchEvolutionCapIncludeUpgrades=When calculating the total number of research include the upgrade technologies in the total number of researches - -[description] -rampant-evolution--refreshingEvolution=RampantEvolution: Recalculating evolution, this could take several minutes to recalculate. Script times will be higher while reprocessing. -rampant-evolution--displayEvolutionMsg=RampantEvolution:\n__1__%: Current Evolution\n __2__%: Tile Absorbed Pollution Contribution\n __3__%: Tree Absorbed Pollution Contribution\n __4__%: Tree Damaged By Pollution Contribution\n __5__%: Spawner Absorbed Pollution Contribution\n __6__%: Killed Spawners Contribution\n __7__%: Killed Hives Contribution\n __8__%: Killed Units Contribution\n __9__%: Killed Worms Contribution\n __10__%: Pollution Generated Contribution\n __11__%: Time Generated Contribution\n __12__%: Low Player Entities\n __13__%: Medium Player Entities\n __14__%: High Player Entities\n __15__%: Evolution Multiplier\n __16__%: Minimum Evolution\n __17__%: Evolution Research Cap\n __18__%: 5 Minute Evolution Change\n __19__%: 30 Minute Evolution Change\n __20__%: 60 Minute Evolution Change - -rampant-evolution--researchEvolutionCap=Research Cap -rampant-evolution--evolution=Evolution -rampant-evolution--tile=Tiles -rampant-evolution--tree=Trees -rampant-evolution--dyingTree=Dying Trees -rampant-evolution--absorbed=Absorbed -rampant-evolution--spawner=Spawners -rampant-evolution--hive=Hives -rampant-evolution--unit=Units -rampant-evolution--worm=Worms -rampant-evolution--totalPollution=Pollution -rampant-evolution--time=Time -rampant-evolution--minimumEvolution=Min Evo -rampant-evolution--evolutionMultiplier=Evo Mult -rampant-evolution--shortChange=5 Min -rampant-evolution--longChange=30 Min -rampant-evolution--longLongChange=60 Min -rampant-evolution--lowPlayer=Low Player -rampant-evolution--mediumPlayer=Medium Player -rampant-evolution--highPlayer=High Player - -[tooltip] -rampant-evolution--lowPlayer=Low value player structures include:\nammo-turret\nartillery-turret\nelectric-pole\nelectric-turret\nfluid-turret -rampant-evolution--mediumPlayer=Medium value player structures include:\naccumulator\ncontainer\nlab\nlogistic-container\nradar\nstorage-tank\nsolar-panel -rampant-evolution--highPlayer=High value player structures include:\nassembling-machine\nbeacon\nboiler\nfurnace\ngenerator\nmining-drill\nreactor\nroboport\nrocket-silo -rampant-evolution--researchEvolutionCap=Current evolution max due to research.\nAutomation research: __1__% / __2__%\nLogistic research: __3__% / __4__%\nMilitary research: __5__% / __6__%\nChemical research: __7__% / __8__%\nProduction research: __9__% / __10__%\nUtility research: __11__% / __12__%\nSpace research: __13__% / __14__% -rampant-evolution--evolution=Current evolution of the enemy force -rampant-evolution--tile=The amount of evolution from pollution absorbed by tiles -rampant-evolution--tree=The amount of evolution from pollution absorbed by trees -rampant-evolution--dyingTree=The amount of evolution from trees dying due to pollution absorbed -rampant-evolution--absorbed=The amount of evolution from spawners absorbing pollution -rampant-evolution--spawner=The amount of evolution from killed spawners -rampant-evolution--hive=The amount of evolution from killed hives -rampant-evolution--unit=The amount of evolution from killed units -rampant-evolution--worm=The amount of evolution from killed worms -rampant-evolution--totalPollution=The amount of evolution from all generated pollution -rampant-evolution--time=The amount of evolution from time passed in seconds -rampant-evolution--minimumEvolution=The minimum evolution that the enemy force can be reduced to -rampant-evolution--shortChange=The amount evolution changed over 5 minutes -rampant-evolution--longChange=The amount evolution changed over 30 minutes -rampant-evolution--longLongChange=The amount evolution changed over 60 minutes -rampant-evolution--toggle_evolution_info=Toggle evolution gui -rampant-evolution--evolutionMultiplier=Evolution contribution multiplier only affects increasing evolution - -[controls] -rampant-evolution--toggle_evolution_info=Toggle evolution gui \ No newline at end of file diff --git a/RampantEvolution_1.6.4/settings.lua b/RampantEvolution_1.6.4/settings.lua deleted file mode 100644 index 094fba83..00000000 --- a/RampantEvolution_1.6.4/settings.lua +++ /dev/null @@ -1,431 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -data:extend({ - - { - type = "bool-setting", - name = "rampant-evolution--displayEvolutionMsg", - setting_type = "runtime-global", - default_value = false, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--shortcut-bar", - setting_type = "startup", - default_value = true, - order = "a[modifier]-b[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--setMapSettingsToZero", - setting_type = "runtime-global", - default_value = true, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant-evolution--evolutionResolutionLevel", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 0, - maximum_value = 100000, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant-evolution--processingPerTick", - setting_type = "runtime-global", - minimum_value = 1, - default_value = 5, - maximum_value = 300, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--toggleResearchEvolutionMultiplier", - setting_type = "runtime-global", - default_value = false, - order = "l[modifier]-z[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--startResearchMultiplier", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 0, - maximum_value = 10000, - order = "l[modifier]-z[unit]z", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--endResearchMultiplier", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 0, - maximum_value = 10000, - order = "l[modifier]-z[unit]zz", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--researchMultiplierExponent", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-z[unit]zzz", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--toggleTickEvolutionMultiplier", - setting_type = "runtime-global", - default_value = false, - order = "l[modifier]-zz[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--startTickMultiplier", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 0, - maximum_value = 10000, - order = "l[modifier]-zz[unit]z", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--endTickMultiplier", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 0, - maximum_value = 10000, - order = "l[modifier]-zz[unit]zz", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--tickMultiplierExponent", - setting_type = "runtime-global", - minimum_value = -10000, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-zz[unit]zzz", - per_user = false - }, - - { - type = "int-setting", - name = "rampant-evolution--totalTickMultiplier", - setting_type = "runtime-global", - minimum_value = 1, - default_value = 60 * 40, - maximum_value = 10000000000, - order = "l[modifier]-zz[unit]zzz", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--minimumDevolutionPercentage", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 0, - maximum_value = 1, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--displayEvolutionMsgInterval", - setting_type = "runtime-global", - minimum_value = 0.001, - default_value = 10.0, - maximum_value = 9999999999, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--recalculateAllEvolution", - setting_type = "runtime-global", - default_value = true, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerSpawnerAbsorbed", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 15.75, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerTreeAbsorbed", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = -8, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerTreeDied", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 27, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerTileAbsorbed", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 7, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerSpawnerKilled", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 300, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerWormKilled", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mx[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerHiveKilled", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = -30000, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution-evolutionPerUnitKilled", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = -10, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerTime", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mz[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerPollution", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mz[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerLowPlayer", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mza[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerMediumPlayer", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mzb[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--evolutionPerHighPlayer", - setting_type = "runtime-global", - minimum_value = -100000, - maximum_value = 100000, - default_value = 0, - order = "l[modifier]-mzc[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--researchEvolutionCap", - setting_type = "runtime-global", - default_value = false, - order = "l[modifier]-oz[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant-evolution--researchEvolutionCapIncludeUpgrades", - setting_type = "runtime-global", - default_value = true, - order = "l[modifier]-oz[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-automation-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-oza[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-logistic-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-ozb[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-military-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-ozc[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-chemical-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-ozd[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-production-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-oze[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-utility-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-ozf[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant-evolution--technology-space-science-multiplier", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 1, - maximum_value = 10000, - order = "l[modifier]-ozg[unit]", - per_user = false - } -}) diff --git a/RampantEvolution_1.6.4/thumbnail.png b/RampantEvolution_1.6.4/thumbnail.png deleted file mode 100644 index f4475b30..00000000 Binary files a/RampantEvolution_1.6.4/thumbnail.png and /dev/null differ diff --git a/RampantFixed/LICENSE.md b/RampantFixed/LICENSE.md new file mode 100644 index 00000000..0424f910 --- /dev/null +++ b/RampantFixed/LICENSE.md @@ -0,0 +1,7 @@ +This work is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License. +To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to Creative Commons + +PO Box 1866, +Mountain View, +CA 94042, +USA. diff --git a/RampantFixed/NOTICE b/RampantFixed/NOTICE new file mode 100644 index 00000000..de1ba71d --- /dev/null +++ b/RampantFixed/NOTICE @@ -0,0 +1,4 @@ +Copyright 2019 Veden +Copyright 2021 Dimm2101 + +CC 4.0 BY-NC \ No newline at end of file diff --git a/RampantFixed/README.md b/RampantFixed/README.md new file mode 100644 index 00000000..a5c9a2e4 --- /dev/null +++ b/RampantFixed/README.md @@ -0,0 +1,406 @@ +# Rampant fixed +Improves the enemies tactics: no pollution required, rebalance, bugfixes +Improves the enemies factiond: "living" map, factions can mutate. Bugfixes, rebalance + +# Rampant Tactics +Factorio Mod - Improves the enemies tactics by using potential fields/pheromones allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, raids, rallying death cry, and player hunting. Uses nonhoming blockable biter projectiles. Adds new Enemies (disabled by default). Difficulty setting in mod options menu. + +# Forum Post + +https://forums.factorio.com/viewtopic.php?f=94&t=31445 + +# Notes + +0.14.14 factorio version fixed save corruption +0.14.10 factorio version fixed more pathing issues +0.14.4 factorio version fixed some issues with unit groups commands + +There will be a pause the first time and on every upgrade that Rampant loads. +This is due to indexing all the chunks that have been generated. + +MP should be working +If experiencing desyncs, after an update, please do the following: + 1) let me know + 2) Load save with Rampant enabled + 3) Save the map after Rampant has been updated + 4) Load save in step 3 + +Configure Options not in game menu: +- Ramp up to max biter wave size + +# Features + +- New Enemy Factions - Neutral, Acid, Fast, Physical, Electric, Inferno, Suicide, Fire, Nuclear, Laser, Troll, Wasp, Spawner +- Swarming - Units will smoothly slide by one another allowing for streamlined attacking +- Difficulty Scaling - A mod option to control how quickly the ai can perform actions like making attack waves. +- Nocturnal Mode - A mod option to force biters to only attack at night. Does not yet affect vanilla attacks. Best use with clockwork or daynight extender mod +- Recycling Biters - When large groups of biters form on the game map and aren't assigned to a unit group or near a base will be periodically removed and refunded to the ai causing attack waves proportional to the number of units removed. +- Breaching - When biters are destroying structures nearby unit groups will come to join them +- Frenzy squads - When a unit group gets close to a player or start combat they switch to attacking everything in there path for a set radius or until there is nothing left +- Rabid squads - Is in a permanent frenzied state as soon as the group is formed +- Tactical Retreats - These will take place when a unit group is in a chunk that has reached a death threshold +- Unit Group Forming - Any chunks with spawners in it that is covered by a pollution or player clouds will form groups based on the evolution factor +- Probing Behavior Against Defenses - unit groups will attempt to avoid chunks that are soaked in death +- Player Hunting - Unit groups will track the player based on there emitted pheromone cloud +- Rallying Death Cry - When a unit is killed on a chunk that is past the retreat threshold, the unit will attempt to summon reinforcements to help them +- Counterattacks - When the player is in combat near nests they will send reinforcements to unit groups +- Reinforcements - Nests will send assistance to nearby nests under attack by the player +- No Homing Projectiles - All projectiles are fired at locations and no longer track the player +- Pathfinding - Unit groups will use potential fields to perform only single step pathfinding allowing for efficient and dynamic pathing +- Peace mode - If something sets peace mode, Rampant will respect it +- Ion Cannon Reaction - Firing the Ion Cannon will cause nests around the blast site to form into an attack wave and agitate all biters +- Rocket Reaction - Firing the rocket from the rocket silo will cause the biters to form extra attack waves +- Blockable Projectiles - Some of the biters projectiles can now be blocked by walls and trees +- Raiding AI state - The AI will periodically send attack waves based on building proximity and not just pollution +- Migration AI State - Where the ai looks for resources patches to setup new bases +- Sieging AI state - Where the ai does a migration event but also builds towards the player and their base +- Onslaught AI state - Where the ai gains 2x credits per logic cycle that can be used on units and buildings +- Vanilla AI Replacement - The default expansion and attack waves can be completely turned off and allow Rampant to work its magic + +# Planned Features + +- Tunneling Biters +- Infesting Biters + +# Version History + +New updates appear in the changelog now + +0.15.24 - +- Feature: Swarming - by reducing the unit collision_mask to 40% of its original size the units no longer have the pathing issues that plagued large groups attacking +- Optimization: further reduced memory footprint for faster saving and loading + +0.15.23 - +- Fixed: Retreat radius being centered on chunk corner instead of on the unit dying +- Fixed: Spitter flamethrower sound fx +- Moved: Item Collector into separate mod +- Balance: Adjusted spitter and worms damages, ranges, and cooldowns to be more inline with vanilla +- Optimization: Reduced memory footprint for faster saving and loading +- Framework: Reorganization of files + +0.15.22 - +- Contribution - Martok88, Improvement: Added optional attack wave message per player + +0.15.21 - +- Fixed: Added check for nil'ed itemCollection event (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=200#p302631) +- Fixed: Item Collector deconstruction not pulling items before destroying chest +- Fixed: Force Item Collector chest to be only minable and deconstructable piece to force contents to be moved to player +- Improvement: Switched over to on_player_mined_entity and on_robot_mined_entity instead of the pre variants + +0.15.20 - +- Fixed: Added Low Resolution version of overlay, ISSUE: range of collector extends past visual display because of 2048px limit on sprites (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p302128) +- Tweak: Increased item collector build time from 0.5 seconds to 10 seconds +- Improvement: Added an expensive recipe variant that doubles the cost of the item collector (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p302123) +- Optimization: Tuned chunk scoring heuristic + +0.15.19 - +- Fixed: Error when processing item collectors + +0.15.18 - +- Feature: Adds an item collector for things like alien artifacts +- Improvement: Added checks for how many squads have been created to enforce global limit over all squad creation methods +- Tweak: Increased breach multiplier from 10000 to 100000 +- Fixed: Current version wasn't be set causing the upgrade code to run repeatedly +- Fixed: Neighbors function not correctly clearing its state between calls +- Optimization: Reduced number of chunks processed per cycle from 500 to 400 +- Optimization: Reduced number of squads to regroup per cycle from 5 to 2 +- Optimization: Reduced number of chunks to scan per cycle from 6 to 5 +- Optimization: Added additional short circuits for chunk scoring + +0.15.17 - +- Fixed: Remote call load issue. (https://github.com/veden/Rampant/issues/5) +- Tweak: Increased sampling threshold for water tiles from 5 to 10 tiles +- Tweak: Increased small worm turret range from 17 to 18 +- Improvement: Added option to remove blood particles on biter deaths, which should help reduce lag spikes (Default is to remove) +- Optimization: Moved math.random to local level instead of global +- Framework: Refactored unit and attack prototypes + +0.15.16 - +- Tweak: Increased death pheromone weight for squad attack from 1 to 2 +- Tweak: Increased failed unit behaviors from 6 to 10 +- Improvement: Added labs to list of targets +- Improvement: Removed chunks processed at a time limit +- Optimization: Moved chunk reindexing to mod load as opposed to ingame +- Optimization: Preallocated a position for use in squad movement +- Optimization: Greatly reduced reindexing and chunk scoring time +- Framework: Split chunk scoring and custom ai chunk purging +- Framework: Refactored code into more appropriate modules + +0.15.15 - +- Fixed: Desync when reindexing chunks (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p287941) +- Fixed: Switched from "and" to "or" for player pheromone and base pheromone to form squads +- Fixed: Inverted logic comparison for unit group formation +- Fixed: Added checks for if a nest exists on player scan before creating squads +- Tweak: Reduced map setting for path finding min steps to check for path from 350 to 100 +- Optimization: Reduced max number of chunks to processes at anyone time from 1000 to 200 +- Optimization: Specialized neighbor search function +- Optimization: Chunk scoring for determining chunk path rating and passable status changed to two pass +- Framework: Refactored recycle biters into separate function +- Framework: Removed custom ai option until it is complete + +0.15.14 - +- Tweak: Increased pheromone output of: + - ammo-turret 2.5 -> 10 + - wall 0.25 -> 0.5 + - electric-turret 7 -> 20 + - fluid-turret 9 -> 28 + - turret 2.5 -> 10 + - mining-drill 15 -> 35 +- Tweak: Increased attack radius of squads from 28 to 32 tiles +- Tweak: Decreased movement(death) pheromone persistance from 0.98 to 0.9 +- Tweak: Increased impassable terrain generator pheromone amount from -30 to -0.1 +- Tweak: Reduced number of remembered past chunks for a squad from 10 to 7 +- Tweak: Increased unit group count for "ground shake" message from 11 to 14 +- Fixed: Pheromone is no longer placed on impassable chunks +- Improvement: Removed pollution from ai attack chunk scoring, pollution travels over water and creates weird pockets groups get stuck in +- Improvement: Made create squads aware of orientation changes when building squads +- Improvement: Recycling unit groups that are stuck +- Improvement: Allow movement from an impassable chunk to a all cardinals passable chunk +- Improvement: When creating squads base pheromone or player pheromone must be present. Prevents squad spawns when they can't reach the player(s) or player(s) structures. +- Improvement: Made retreats aware of orientation changes with retreating squads +- Improvement: Path finding check for invalid destination before making command +- Improvement: Added path rating to each chunk to reduce the scores on chunks that may be passable but are easy to invalidate the unit group by making a command to an invalid location(water, entity) +- Optimization: Collapsed chunk attributes *_PASSABLE into single attribute PASSABLE +- Optimization: Preallocated neighbors and cardinal neighbors array + +0.15.13 - +- Improvement: Added lamps to make safe options (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=160#p284736) + +0.15.12 - +- Fixed: Nil fillTunnel invocation (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=160#p284719) + +0.15.11 - +- Integration: Ion cannon mod +- Fixed: Player region scan can no longer overlap passive map scan causing double processing +- Tweak: Setting group disown distance back to the default of 10 from 5 +- Tweak: Increased group late unit threshold from 80 to 360 ticks +- Tweak: Increased rally cry chance from 0.02(@100 evo) to 0.08(@100 evo) compensate for the once per logic cycle per chunk +- Tweak: Increased player pheromone for weight multipler from 25 to 50 for hunting parties +- Improvement: Changed biter base detection from slow map scan to event +- Improvement: Added negative score contribution to nest causing biters to move around nests instead of through +- Optimization: Reduced max number of active squads from 40 to 30, reducing large lag spikes +- Optimization: Player region scan can no longer overlap passive map scan causing double processing +- Optimization: Short circuit rally cry search if not enough points to make a squad +- Optimization: Short circuit vengence squad search if not enough points to make a squad +- Optimization: Short circuit attack groups search if not enough points to make a squad +- Optimization: Precompute retreatThreshold, maxSquads, rallyThreshold, formSquadThreshold, attackWaveSize, attackWaveSizeLowerBound, attackWaveSizeUpperBound, attackWaveSizeDeviation, kamikazeThreshold, attackWaveThreshold once per logic cycle +- Optimization: Reduced garbage generated by pheromone map processing +- Optimization: Reduced garbage generated by attack formation scanning +- Optimization: Capped squad regrouping attempts to 15 per logic cycle +- Framework: renamed chunk pX,pY to x,y, so chunks could be used in calls to things like get_pollution + +0.15.10 - +- Fix: nil chunk in pheromone utils(https://mods.factorio.com/mods/Veden/Rampant/discussion/13806) +- Tweak: Increased failed behaviors before dispanding from 3 to 6 +- Improvement: Switched to untargetable indestructible safe buildings +- Improvement: Changed the "ground shake" message to be displayed at a more appropriate time +- Improvement: Recycling biter groups now has a lower threshold and checks for active nearby squads before purging the clusters +- Optimization: Adjusted factorio pathfinder parameters to favor short paths for performance +- Optimization: Moved invariants out of inner loop in pheromone dispersion +- Optimization: Reduced garbage generated when doing passive map scan +- Optimization: Switched rally cries to a once per logic cycle per chunk +- Optimization: Locallized global defines in files that use them +- Optimization: Preallocating tables of falses for chunk neighbors +- Framework: Split squad regrouping and squad cleanup + +0.15.9 - +- Improvement: Added bobs higher tier big electric poles to be included with make safe toggle for big electric poles +- Improvement: Added logic to reconnect wires when big electric poles are made safe and get destroyed (Thanks Jeroen D Stout, https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=140#p275663) +- Improvement: Added a mod option to add acid resistance to walls to make damage levels with dumb projectiles to be equal to vanilla levels. (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=120#p274792) + +0.15.8 - +- Fixed: aiPointsScaler being nil + +0.15.7 - +- Feature: Difficulty Scaling - A mod options to control how quickly the ai performs actions +- Fixed: Spelling on mod option +- Improvement: Exposed nocturnal toggle and difficulty scaling to remote interop + +0.15.6 - +- Feature: Nocturnal Mode - Causes Rampant attacks waves to only spawn at night. Best use with daynight extender mod. + +0.15.5 - +- Tweak: Increased ai refund from 2 to 3 +- Fix: Signals, Chain Signals, and Train stops now correctly rebuild when the corresponding make safe is toggled +- Feature: Remote interfaces for adjusting wave size, thresholds, ai build points, ai state, player thresholds, and attack triggers +- Improvement: Added reactor, programmable speaker, radars, lights, and rocket silo to biter targets +- Improvement: Switched all configs to global runtime except Dumb projectiles and NE Unit Launcher Options + +0.15.4 - +- Fix: Changed setting name from "make buildings safe from biters" to "Enable building safety." This is to clarify what the setting does. + +0.15.3 - +- Improvement: Added configuration for safe buildings. This will be improved after a bug fix in factorio + +0.15.2 - +- Improvement: Created in game options for + - Max biter wave size + - Use dumb projectiles + - Use Natural Evolution unit launchers (Requires NE) + - Togglable attack wave triggers (pollution, player) + - Attack wave pollution trigger threshold + +0.15.1 - +- Tweak: Increased small spitter damage from 7 to 15 +- Tweak: Increased medium spitter damage from 15 to 22 +- Improvement: Replaced game.evolution with game.forces.enemy.evolution +- Improvement: Fixed flame-thrower to flamethrower +- Improvement: Changed tunnel to have non-zero hp + +0.14.13 - +- Reverted: Pheromone generation tweaks from 0.14.11 +- Feature: Recycling large biter swarms that are stuck (causes a big attack wave, and pops up a message) +- Feature: Breaching, Biters destroying player buildings will attract other unit groups +- Tweak: Reduced unit group max size from 600 to 450 +- Tweak: Reduced unit group radius from 30 to 20 +- Fix: Unit groups merging during combat +- Optimization: Cleaned up regroup squad function to scale better +- Optimization: Retreats only fire once per chunk for every logic cycle +- Improvement: Cleaned up dispersion function for Pheromones +- Improvement: Increased attack wave frequency based on evolution factor (mainly for endgame) + +0.14.12 - +- Tweak: Decreased slow map scan chunks scanned per logic cycle from 8 to 6 +- Fix: Didn't set new version number forcing chunk recalculation every load +- Improvement: Added player buildings to slow map scan to catch buildings made outside factorio event system, (i.e. FARL) +- Improvement: Added console message when upgrading + +0.14.11 - +- Tweak: Increased pheromone generation on (This only potential affects target selection and pathfinding, these do not trigger biter waves): + - Generators from 8 to 12 + - Pumps from 2 to 5 + - Offshore Pumps from 2 to 5 + - Transport Belts from 1 to 2 + - Accumulator from 10 to 14 + - Solar Panel from 8 to 12 + - Boiler from 12 to 16 + - Assembling Machines from 10 to 16 + - Roboport from 10 to 14 + - Beacon from 10 to 14 + - Furance from 12 to 16 + - Mining Drills from 15 to 19 + - Ammo Turret from 2.5 to 5 + - Wall from 0.25 to 0.55 + - Electric Turret from 4.25 to 7 + - Fluid Turret from 5 to 9 + - Turret from 3.5 to 5 +- Tweak: Reduced map scan speed from 10 chunks to 8 chunks to account for worms in calculation +- Tweak: Increased pheromone dispersion from 0.05 to 0.1 +- Tweak: Increased unit group move distance from 32 to 40 +- Tweak: Reduced unit group member disown distance from 10 to 5 +- Tweak: Increased unit group max slow down when ahead from 0.6 to 1 +- Tweak: Reduced unit group max speedup when behind from 1.4 to 1.1 +- Tweak: Increased unit group max slowdown from slow members from 0.3 to 0.9 (this is max speed multipler, so this is faster) +- Tweak: Increased unit attack radius from 20 to 28 tiles +- Improvement: Increased movement cycles for larger groups from 4 cycles to 6 cycles +- Improvement: Biter groups should attempt to avoid getting too close to water (screws up pathing) +- Improvement: Added worms to chunk calculation for determining better unit group formation and pathing +- Improvement: Removed nest negative contribution to base pheromone map for better pathing +- Improvement: Pheromones no longer travel over impassable terrain +- Fix: Prevent group spawning on chunks with enemy structures +- Fix: Capped the max group size that can be created by merging to 600 biters +- Fix: Dispand unit groups larger than 600 (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=80#p255243, Thank you Nerchio for the save game) + +0.14.10 - +- Feature: Replaces homing projectiles with non homing versions +- Improvement: Respect for peace mode. To be used with something like the True Peace Mod +- Fix: Enforce rate limit for retreats + +0.14.9 - +- Fix: Added null check in rally cry for chunks that have yet to be generated by game engine (https://mods.factorio.com/mods/Veden/Rampant/discussion/7946) + +0.14.8 - +- Feature: Rallying death cry, when a native dies on a chunk past the death threshold it will attempt to summon reinforcements from nearby nests +- Tweak: Increased unit group merge distance from 16 to 28 tiles +- Tweak: Increased retreat grab radius from 15 tiles to 24 tiles +- Tweak: Decreased vengeance squad cost from 50 to 45 +- Improvement: On group merge recalculate the kamikaze threshold, so groups that become large have a chance to kamikaze before attacking +- Improvement: Disallow group merges when units are taking and receiving damage +- Fix: Corrected unit group frenzy trigger based on engaging a target +- Optimization: Switched to increment tick counter for processing and logic event +- Optimization: Rate limited rally cry to 3/0.75 sec +- Optimization: Rate limited retreat to 8/0.75 sec + +0.14.7 - +- Feature: Counterattack waves trigger when the player is standing in a chunk with the death pheromone past the retreat threshold +- Feature: Reinforcement waves trigger when the player is standing in a chunk that contains a nest +- Tweak: Increased max number of unit groups that can be active concurrently from 30 to 40 +- Improvement: Removed restriction on unit group formations around nests + +0.14.6 - +- Major Fix: Corrected retreat logic having inverted comparison introduced in 14.4, so unit groups stopped retreating after lots of death happened in a chunk +- Major Fix: Corrected pheromone dispersal with negative numbers +- Fix: Adjusted scoring so unit groups try to avoid nest clusters when retreating (Messes up pathfinding) +- Fix: When placing a player building ai was given credit as if they destroyed it +- Tweak: Reduced retreat time length from 4.5 to 3 seconds +- Tweak: Reduced death pheromone produced on death from 100 to 75 +- Tweak: Increased attack radius of unit groups from 16 to 20 tiles +- Tweak: Increased attack time length from 2.25 to 3 seconds +- Tweak: Increased nest pheromone production from 15 to 30 +- Tweak: Increased unit group search radius during formations from 2 chunks to 3 chunks +- Framework: Decoupled squad status and kamikaze flag +- Improvement: Biters don't retreat when dying on a chunk with a nest +- Improvement: Chunks covered by nest pheromone remove death pheromone faster +- Improvement: Attack wave size varies based on normal distribution that is centered around a scaled evolution factor that is lower than vanilla + +0.14.5 - +- Improvement: Enlarged player processing bubble from 3 to 4 chunks (pheromone radius is still 4 chunks) +- Fix: Increased player scoring weight, so biter groups correctly hunt once more (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=40#p216119) +- Improvement: Adjusted attack pathing, so groups can move diagonally +- Fix: Unit group retreating when player occupies same chunk + +0.14.4 - +- Fixed a bug in the processing queue when upgrading mod +- Greatly decreased Player pheromone radius, now sits at roughly 4 chunks around the player +- Reworked pheromone pathfinding +- Removed base and defense attack wave trigger, in favor of using player pheromone and pollution +- Added periods of time where the enemy is not sending Rampant attack waves +- Adjusted retreat percentage to suit the reduced attack wave size +- Improved responsiveness on larger maps +- Reduced AI max build points +- Fixed player iteration bug + +0.14.3 - +- Slightly lowered Rampant attack wave frequency +- Altered attack wave size to ramp up slower +- Added configuration options for: +- - Attack wave generation area + - - Attack wave threshold + - - Attack wave size + - - Turn off rampant attack waves + +0.14.2 - +- Adjusted unit retreat group size threshold +- Adjusted squad attack pattern (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=20#p203861) +- Fixed migration issue + +0.14.1 - +- Fixed ai created bases not being counted in logic +- Optimization to offset ai created bases scanning + +0.13.5 = 0.14.5 + +0.13.4 = 0.14.4 + +0.13.3 = 0.14.3 + +0.13.2 = 0.14.2 + +0.13.1 - Back ported 0.14 factorio version to 0.13 factorio version + +0.0.8 - +- Fixed retreat oscillations (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=10#p198750) +- Added scaling for kamikaze attack (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=10#p199401) +- Increased squad size max from 125 to 150, (larger waves) + +0.0.6 - +- Some speed improvements +- MP is working (https://github.com/veden/Rampant/issues/1) + +0.0.5 - +- Fix for nil chunk in ai attack (https://mods.factorio.com/mods/Veden/Rampant/discussion/2512) +- Checks for main surface (https://forums.factorio.com/viewtopic.php?f=94&t=31445&p=198228#p198563) +- Updated info with forum homepage + +0.0.4 - initial release + diff --git a/RampantFixed/RampantFixedRemote/control.lua b/RampantFixed/RampantFixedRemote/control.lua new file mode 100644 index 00000000..881f9e92 --- /dev/null +++ b/RampantFixed/RampantFixedRemote/control.lua @@ -0,0 +1 @@ +require("remote_interface_example") \ No newline at end of file diff --git a/RampantFixed/RampantFixedRemote/info.json b/RampantFixed/RampantFixedRemote/info.json new file mode 100644 index 00000000..23baf0d3 --- /dev/null +++ b/RampantFixed/RampantFixedRemote/info.json @@ -0,0 +1,10 @@ +{ + "name" : "RampantFixedRemote", + "factorio_version" : "1.1", + "version" : "0.0.1", + "title" : "Rampant, fixed - remote interface", + "author" : "Dimm2101", + "homepage" : "", + "description" : "Add some commands to remote interface tests", + "dependencies" : ["base >= 1.1.0", "RampantFixed"] +} diff --git a/RampantFixed/RampantFixedRemote/remote_interface_example.lua b/RampantFixed/RampantFixedRemote/remote_interface_example.lua new file mode 100644 index 00000000..18d8d406 --- /dev/null +++ b/RampantFixed/RampantFixedRemote/remote_interface_example.lua @@ -0,0 +1,247 @@ +---- remote test +-- copy remote_interface_example.lua to your mod folder +-- add "RampantFixed" to dependencies of your mod (this guarantees the remote interface presence) +-- add require("remote_interface_example") to control.lua + +-- parameter: nil or number (new WaveMaxSize) +commands.add_command('setWaveMaxSize', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + local result = remote.call("rampantFixed", "setWaveMaxSize_ExtCtrl", {attackWaveMaxSize = tonumber(command.parameter)}) + if result then + game.print("max wave size now:"..result) + end + end +) + +-- no parameters +commands.add_command('getWaveMaxSize', "", + function() + game.print(remote.call("rampantFixed", "getWaveMaxSize")) + end +) + +-- parameter: nil or number (new WaveSize) +commands.add_command('setWaveSize', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + local result = remote.call("rampantFixed", "setWaveSize_ExtCtrl", {attackWaveSize = tonumber(command.parameter)}) + if result then + game.print("wave size now:"..result) + end + end +) + +-- no parameters +commands.add_command('getWaveSize', "", + function() + game.print(remote.call("rampantFixed", "getWaveSize")) + end +) + +-- parameter: nil or number (how much biters in squad) +commands.add_command('createSquad', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + local result = remote.call("rampantFixed", "createSquad_ExtCtrl", {surfaceIndex = game.players[command.player_index].surface.index, size = tonumber(command.parameter), ignoreSquadLimit = true}) + if result then + game.print("squad created at [gps=" .. result.position.x .. "," .. result.position.y .."]") + else + game.print("Cant create squad") + end + end +) + +-- no parameters. print stats of the base at player position +commands.add_command('getBaseByPosition', "", + function(command) + local parameters = {} + parameters.surfaceIndex = game.players[command.player_index].surface.index + parameters.position = game.players[command.player_index].position + game.print(serpent.dump(remote.call("rampantFixed", "getBaseByPosition", parameters))) + end +) + + +-- parameter: number (id of base). print stats of specified base +commands.add_command('getBaseById', "", + function(command) + game.print(serpent.dump(remote.call("rampantFixed", "getBaseById", {id = tonumber(command.parameter)}))) + end +) + +-- no parameters. print stats of all bases +commands.add_command('getBases', "", + function() + game.print(serpent.dump(remote.call("rampantFixed", "getBases"))) + end +) + +-- no parameters. print list of factions. Shows the minimum and maximum faction tier +commands.add_command('getFactions', "", + function(command) + local factions = remote.call("rampantFixed", "getFactions") + for faction, tiers in pairs(factions) do + game.print(faction..", tiers:"..tiers.tierMin.."-"..tiers.tierMax) + end + end +) + +-- parameter: number 1..10. Tier of biters +-- Print list of factions . Shows the minimum and maximum faction tier +commands.add_command('getFactionsByTier', "", + function(command) + local factions = remote.call("rampantFixed", "getFactionsByTier", {tier = tonumber(command.parameter)}) + for faction, tiers in pairs(factions) do + game.print(faction..", tiers:"..tiers.tierMin.."-"..tiers.tierMax) + end + end +) + +-- parameter: faction name. Base at players position will mutate to specified faction. +-- Mutation can take some time (1-10 minutes) +-- print "1", if faction set succesfull +commands.add_command('setFactionToBaseAtPlayerPosition', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + local parameters = {} + parameters.surfaceIndex = game.players[command.player_index].surface.index + parameters.position = game.players[command.player_index].position + local base = remote.call("rampantFixed", "getBaseByPosition", parameters) + if not base then + game.print("no base at player position!") + return + end + if not command.parameter then + game.print("specify faction name in parameters!") + return + end + local factions = remote.call("rampantFixed", "getFactions") + if not factions[command.parameter] then + game.print("wrong faction name. Use /getFactions to show factions list") + return + end + + parameters = {id = base.id, factions = {}} + parameters.factions[command.parameter] = 1 -- 100% of specified faction + local result = remote.call("rampantFixed", "setBaseFactions_ExtCtrl", parameters) + if not result then + game.print("external control isn't allowed") -- impossible in this algorithm, because allowExternalControl checked + elseif result == 1 then + game.print("success") + elseif result == -1 then + game.print("wrong parameters") -- impossible in this algorithm, because base and factions checked + elseif result == -2 then + game.print("sum of rates is not equals 1") -- impossible in this algorithm, because "parameters.factions[command.parameter] = 1" + end + end +) + +-- no parameters. print list of groups. If its same surface then add "gps" +commands.add_command('getRampantAttackGroups', "", + function(command) + local groups = remote.call("rampantFixed", "getRampantAttackGroups") + for index, group in pairs(groups) do + if group.surface == game.players[command.player_index].surface then -- lets ping only same surface groups + game.print("group "..index..", [gps=" .. group.position.x .. "," .. group.position.y .."]") + else + game.print("group "..index..", x/y = " .. group.position.x .. "/" .. group.position.y) + end + end + end +) + + +-- no parameters: get AI points for player surface. +commands.add_command('getAI_points', "", + function(command) + local result = remote.call("rampantFixed", "getAI_points", {surfaceIndex = game.players[command.player_index].surface.index}) + if result then + game.print("AI_points: ".. result ) + else + game.print("non-rampant surface") + end + end +) + +-- parameter: number. set AI points for player surface. +commands.add_command('setAI_points', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + + local result = remote.call("rampantFixed", "setAI_points_ExtCtrl", {surfaceIndex = game.players[command.player_index].surface.index, points = (command.parameter and tonumber(command.parameter))}) + if result then + game.print("AI_points: ".. result ) + else + game.print("non-rampant surface") + end + end +) + +-- no parameters: get AI state for player surface. +commands.add_command('getAI_state', "", + function(command) + local result = remote.call("rampantFixed", "getAI_state", {surfaceIndex = game.players[command.player_index].surface.index}) + if result then + game.print("AI_state: ".. result.state .. "("..result.stateEnglish..")") + else + game.print("non-rampant surface") + end + end +) + +-- parameter: number. set AI points for player surface. +commands.add_command('setAI_state', "", + function(command) + if not remote.call("rampantFixed", "allowExternalControl") then + game.print("external control isn't allowed") + return + end + + local result = remote.call("rampantFixed", "setAI_state_ExtCtrl", {surfaceIndex = game.players[command.player_index].surface.index, state = (command.parameter and tonumber(command.parameter))}) + if result then + game.print("AI_state: ".. result.state .. "("..result.stateEnglish..")" ) + else + game.print("non-rampant surface or invalid state. Use /printValidAI_StateList") + end + end +) + +-- no parameters. Print AI state for player surface +commands.add_command('printValidAI_StateList', "", + function(command) + local result = remote.call("rampantFixed", "getValidAI_StateList") + for state, stateEnglish in pairs(result) do + game.print(""..state.." = ".. stateEnglish) + end + end +) + + +-- no parameters. Print pheromones at player position +commands.add_command('printPheromones', "", + function(command) + local parameters = {} + parameters.surfaceIndex = game.players[command.player_index].surface.index + parameters.position = game.players[command.player_index].position + local result = remote.call("rampantFixed", "getPheromones", parameters) + for pheromoneType, pheromoneLvl in pairs(result) do + game.print(""..pheromoneType.." = ".. pheromoneLvl) + end + end +) \ No newline at end of file diff --git a/RampantFixed/Upgrade.lua b/RampantFixed/Upgrade.lua new file mode 100644 index 00000000..9dec20f7 --- /dev/null +++ b/RampantFixed/Upgrade.lua @@ -0,0 +1,982 @@ +local upgrade = {} + +-- imports + +local constants = require("libs/Constants") + +-- constants + +local DEFINES_COMMAND_GROUP = defines.command.group +local DEFINES_COMMAND_WANDER = defines.command.wander +local DEFINES_COMMAND_BUILD_BASE = defines.command.build_base +local DEFINES_COMMAND_ATTACK_AREA = defines.command.attack_area +local DEFINES_COMMAND_GO_TO_LOCATION = defines.command.go_to_location +local DEFINES_COMMMAD_COMPOUND = defines.command.compound +local DEFINES_COMMAND_FLEE = defines.command.flee +local DEFINES_COMMAND_STOP = defines.command.stop + +local DEFINES_COMPOUND_COMMAND_RETURN_LAST = defines.compound_command.return_last + +local DEFINES_DISTRACTION_NONE = defines.distraction.none +local DEFINES_DISTRACTION_BY_ENEMY = defines.distraction.by_enemy +local DEFINES_DISTRACTION_BY_ANYTHING = defines.distraction.by_anything + +local CHUNK_SIZE = constants.CHUNK_SIZE +local TRIPLE_CHUNK_SIZE = constants.TRIPLE_CHUNK_SIZE + +-- imported functions + +-- module code + +local function addCommandSet(queriesAndCommands) + -- preallocating memory to be used in code, making it fast by reducing garbage generated. + queriesAndCommands.neighbors = { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + } + queriesAndCommands.cardinalNeighbors = { + -1, + -1, + -1, + -1 + } + queriesAndCommands.position = { + x=0, + y=0 + } + queriesAndCommands.position2 = { + x=0, + y=0 + } + queriesAndCommands.position3 = { + x=0, + y=0 + } + + queriesAndCommands.chunkOverlapArray = { + -1, + -1, + -1, + -1 + } + + queriesAndCommands.position2Top = {0, 0} + queriesAndCommands.position2Bottom = {0, 0} + --this is shared between two different queries + queriesAndCommands.area = { + {0, 0}, + {0, 0} + } + queriesAndCommands.area2 = { + queriesAndCommands.position2Top, + queriesAndCommands.position2Bottom + } + queriesAndCommands.buildPositionTop = {0, 0} + queriesAndCommands.buildPositionBottom = {0, 0} + queriesAndCommands.buildArea = { + queriesAndCommands.buildPositionTop, + queriesAndCommands.buildPositionBottom + } + queriesAndCommands.countResourcesQuery = { + area=queriesAndCommands.area, + type="resource" + } + + queriesAndCommands.hasPlayerStructuresQuery = { + area=queriesAndCommands.area, + force=queriesAndCommands.activePlayerForces, + limit=1 + } +-- autofill from constants + local GENERATOR_PHEROMONE_LEVEL = constants.GENERATOR_PHEROMONE_LEVEL + local BUILDING_PHEROMONES = constants.BUILDING_PHEROMONES + queriesAndCommands.filteredEntities_player_pheromones = {} + for lvlName, values in pairs(GENERATOR_PHEROMONE_LEVEL) do + queriesAndCommands.filteredEntities_player_pheromones[lvlName] = { + area=queriesAndCommands.area, + force=queriesAndCommands.activePlayerForces, + type = {} + } + local filtered_types = queriesAndCommands.filteredEntities_player_pheromones[lvlName].type + --------- + for entityType, entitylvlName in pairs(BUILDING_PHEROMONES) do + if entitylvlName == lvlName then + filtered_types[#filtered_types+1] = entityType + end + end + if #filtered_types==0 then + queriesAndCommands.filteredEntities_player_pheromones[lvlName] = nil + end + end +-- - !ΠšΠ”Π + + -- Factorissimo. Yes, this is a "storage-tank" enities + queriesAndCommands.filteredEntitiesPlayerQueryFactorissimo = { + area=queriesAndCommands.area, + force=queriesAndCommands.activePlayerForces, + collision_mask = "player-layer", + type={"storage-tank"} + } + + + queriesAndCommands.filteredEntitiesUnitQuery = { + area=queriesAndCommands.area, + force="enemy", + type="unit" + } + queriesAndCommands.filteredEntitiesEnemyStructureQuery = { + area=queriesAndCommands.area, + force="enemy", + type={ + "turret", + "unit-spawner" + } + } + + + queriesAndCommands.filteredEntitiesPointQueryLimited = { + position = queriesAndCommands.position, + radius = 10, + limit = 1, + force = "enemy", + type = { + "unit-spawner", + "turret" + } + } + + + queriesAndCommands.createBuildCloudQuery = { + name = "build-clear-cloud-rampant", + position = queriesAndCommands.position + } + + queriesAndCommands.activePlayerForces = {"player"} + queriesAndCommands.nonPlayerForces = {"neutral", "enemy"} + + for _,force in pairs(game.forces) do + local add = true + + if (force.name ~= "neutral") and (force.name ~= "enemy") then + for i=1,#queriesAndCommands.activePlayerForces do + if (queriesAndCommands.activePlayerForces[i] == force.name) then + add = false + break + end + end + + if add then + queriesAndCommands.activePlayerForces[#queriesAndCommands.activePlayerForces+1] = force.name + else + queriesAndCommands.nonPlayerForces[#queriesAndCommands.nonPlayerForces+1] = force.name + end + end + end + + queriesAndCommands.filteredEntitiesChunkNeutral = { + area=queriesAndCommands.area, + collision_mask = "player-layer", + type={ + "tree", + "simple-entity" + } + } + + local sharedArea = { + {0,0}, + {0,0} + } + queriesAndCommands.filteredEntitiesCliffQuery = { + area=sharedArea, + type="cliff", + limit = 1 + } + queriesAndCommands.filteredTilesPathQuery = { + area=sharedArea, + collision_mask="water-tile", + limit = 1 + } + queriesAndCommands.cliffQuery = { + area=queriesAndCommands.area2, + type="cliff" + } + queriesAndCommands.canPlaceQuery = { + name="", + position={0,0} + } + queriesAndCommands.filteredTilesQuery = { + collision_mask="water-tile", + area=queriesAndCommands.area + } + + queriesAndCommands.upgradeEntityQuery = { + name = "", + position = nil + } + + queriesAndCommands.attackCommand = { + type = DEFINES_COMMAND_ATTACK_AREA, + destination = queriesAndCommands.position, + radius = CHUNK_SIZE * 1.5, + distraction = DEFINES_DISTRACTION_BY_ANYTHING + } + + queriesAndCommands.moveCommand = { + type = DEFINES_COMMAND_GO_TO_LOCATION, + destination = queriesAndCommands.position, + pathfind_flags = { cache = true }, + distraction = DEFINES_DISTRACTION_BY_ENEMY + } + + queriesAndCommands.settleCommand = { + type = DEFINES_COMMAND_BUILD_BASE, + destination = queriesAndCommands.position, + distraction = DEFINES_DISTRACTION_BY_ENEMY, + ignore_planner = true + } + + queriesAndCommands.wonderCommand = { + type = DEFINES_COMMAND_WANDER, + wander_in_group = false, + radius = TRIPLE_CHUNK_SIZE*2, + ticks_to_wait = 36000 + } + + queriesAndCommands.stopCommand = { + type = DEFINES_COMMAND_STOP + } + + queriesAndCommands.compoundSettleCommand = { + type = DEFINES_COMMMAD_COMPOUND, + structure_type = DEFINES_COMPOUND_COMMAND_RETURN_LAST, + commands = { + queriesAndCommands.wonder2Command, + queriesAndCommands.settleCommand + } + } + + queriesAndCommands.retreatCommand = { + type = DEFINES_COMMAND_GROUP, + group = nil, + distraction = DEFINES_DISTRACTION_BY_ANYTHING, + use_group_distraction = true + } + + queriesAndCommands.fleeCommand = { + type = DEFINES_COMMAND_FLEE, + from = nil, + distraction = DEFINES_DISTRACTION_NONE + } + + queriesAndCommands.compoundRetreatGroupCommand = { + type = DEFINES_COMMMAD_COMPOUND, + structure_type = DEFINES_COMPOUND_COMMAND_RETURN_LAST, + commands = { + queriesAndCommands.stopCommand, + queriesAndCommands.fleeCommand, + queriesAndCommands.retreatCommand + } + } + + queriesAndCommands.formGroupCommand = { + type = DEFINES_COMMAND_GROUP, + group = nil, + distraction = DEFINES_DISTRACTION_BY_ANYTHING, + use_group_distraction = false + } + + queriesAndCommands.formCommand = { + command = queriesAndCommands.formGroupCommand, + unit_count = 0, + unit_search_distance = TRIPLE_CHUNK_SIZE + } + + queriesAndCommands.formRetreatCommand = { + command = queriesAndCommands.compoundRetreatGroupCommand, + unit_count = 1, + unit_search_distance = CHUNK_SIZE + } +end + +function upgrade.rebuildActivePlayerForces(universe) + universe.activePlayerForces = {} + universe.nonPlayerForces = {} + local forceIgnored + for _,force in pairs(game.forces) do + forceIgnored = false + if (force.name == "neutral") or (force.name == "enemy") then + forceIgnored = true + elseif game.forces["enemy"].is_friend(force) then + forceIgnored = true + end + if game.forces["enemy"].get_cease_fire(force) then + forceIgnored = true + end + if forceIgnored then + universe.nonPlayerForces[#universe.nonPlayerForces+1] = force.name + else + universe.activePlayerForces[#universe.activePlayerForces+1] = force.name + end + end + addCommandSet(universe) +end + +function upgrade.attempt(universe) + local starting = global.version + if not global.version or global.version < 114 then + global.version = 114 + + if not universe then + universe = {} + global.universe = universe + end + game.forces.enemy.kill_all_units() + + universe.safeEntities = {} + + universe.aiPointsScaler = settings.global["rampantFixed--aiPointsScaler"].value + + universe.aiPointsPrintGainsToChat = settings.global["rampantFixed--aiPointsPrintGainsToChat"].value + universe.aiPointsPrintSpendingToChat = settings.global["rampantFixed--aiPointsPrintSpendingToChat"].value + + universe.aiNocturnalMode = settings.global["rampantFixed--permanentNocturnal"].value + + universe.mapIterator = nil + universe.retreatThreshold = 0 + universe.rallyThreshold = 0 + universe.formSquadThreshold = 0 + universe.attackWaveSize = 0 + universe.attackWaveDeviation = 0 + universe.attackWaveUpperBound = 0 + universe.unitRefundAmount = 0 + universe.regroupIndex = 1 + + game.map_settings.path_finder.min_steps_to_check_path_find_termination = + constants.PATH_FINDER_MIN_STEPS_TO_CHECK_PATH + + universe.evolutionTableAlignment = {} + + universe.kamikazeThreshold = 0 + universe.attackWaveLowerBound = 1 + + universe.expansion = game.map_settings.enemy_expansion.enabled + universe.expansionMaxDistance = game.map_settings.enemy_expansion.max_expansion_distance * CHUNK_SIZE + universe.expansionMaxDistanceDerivation = universe.expansionMaxDistance * 0.33 + universe.expansionMinTime = game.map_settings.enemy_expansion.min_expansion_cooldown + universe.expansionMaxTime = game.map_settings.enemy_expansion.max_expansion_cooldown + universe.expansionMinSize = game.map_settings.enemy_expansion.settler_group_min_size + universe.expansionMaxSize = game.map_settings.enemy_expansion.settler_group_max_size + + universe.settlerWaveDeviation = 0 + universe.settlerWaveSize = 0 + + universe.enabledMigration = universe.expansion and settings.global["rampantFixed--enableMigration"].value + universe.peacefulAIToggle = settings.global["rampantFixed--peacefulAIToggle"].value + universe.printAIStateChanges = settings.global["rampantFixed--printAIStateChanges"].value + universe.debugTemperament = settings.global["rampantFixed--debugTemperament"].value + + universe.enemyAlignmentLookup = {} + + game.map_settings.unit_group.min_group_radius = constants.UNIT_GROUP_MAX_RADIUS * 0.5 + game.map_settings.unit_group.max_group_radius = constants.UNIT_GROUP_MAX_RADIUS + + game.map_settings.unit_group.max_member_speedup_when_behind = constants.UNIT_GROUP_MAX_SPEED_UP + game.map_settings.unit_group.max_member_slowdown_when_ahead = constants.UNIT_GROUP_MAX_SLOWDOWN + game.map_settings.unit_group.max_group_slowdown_factor = constants.UNIT_GROUP_SLOWDOWN_FACTOR + + game.map_settings.max_failed_behavior_count = 3 + game.map_settings.unit_group.member_disown_distance = 10 + game.map_settings.unit_group.tick_tolerance_when_member_arrives = 60 + game.forces.enemy.ai_controllable = true + + universe.evolutionLevel = game.forces.enemy.evolution_factor + global.pendingChunks = nil + global.natives = nil + global.map = nil + + universe.builderCount = 0 + universe.squadCount = 0 + + addCommandSet(universe) + end + if global.version < 116 then + global.version = 116 + + universe.maxPoints = 0 + + -- if (universe.maps) then + -- for _,map in pairs(universe.maps) do + -- for _,base in pairs(map.bases) do + -- base.damagedBy = {} + -- base.deathEvents = 0 + -- end + -- end + -- end + + --game.print("Rampant - Version 1.1.0, Rampant") + end + if global.version < 118 then + local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE + global.version = 118 + addCommandSet(universe) + universe.retribution = 0 + if universe.maps then + for _, map in pairs(universe.maps) do +-- local map = universe.maps[1] + + ------- add new map fields + -- map + if not map.chunkToPlayerBaseDetection then + map.chunkToPlayerBaseDetection = {} + end + if not map.chunkFactions then + map.chunkFactions = {} + end + if not map.chunkFactionCounts then + map.chunkFactionCounts = {} + end + if not map.chunkFactionCounts then + map.squadsGenerated = 0 + end + -- chunk[BASE_DETECTION_PHEROMONE] + local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE + local chunksProcessed = 0 + for x, nestsY in pairs(map) do + if (type(x) == "number") and (math.floor(x)==x) then + for y, chunk in pairs(nestsY) do + if not chunk[BASE_DETECTION_PHEROMONE] then + chunk[BASE_DETECTION_PHEROMONE] = 0 + chunksProcessed = chunksProcessed + 1 + end + end + end + end + if chunksProcessed>0 then + game.print("update, "..chunksProcessed.." chunks processed") + end + + -- bases + local bases = map.chunkToBase + local basesProcessed = 0 + for chunk, base in pairs(bases) do + if base and base.id and not base.chunkFactions then + base.chunkFactions = {} + if universe.evolutionLevel<0.15 then + base.tier = 1 + elseif universe.evolutionLevel<0.30 then + base.tier = 2 + elseif universe.evolutionLevel<0.50 then + base.tier = 3 + elseif universe.evolutionLevel<0.75 then + base.tier = 5 + elseif universe.evolutionLevel<0.90 then + base.tier = 8 + else + base.tier = 10 + end + base.tierHandicap = 0 + newAlignment = {} + if not base.alignment[2] then + newAlignment[base.alignment[1]] = 1 + else + newAlignment[base.alignment[1]] = 0.8 + newAlignment[base.alignment[2]] = 0.2 + end + base.alignment = newAlignment + basesProcessed = basesProcessed + 1 + end + end + if basesProcessed>0 then + game.print("update, "..basesProcessed.." bases processed") + end + end + --game.print("Rampant fixed, Version 1.0.8") + end + + end + if global.version < 119 then + global.version = 119 + universe.retribution = 0 + end + + if global.version < 120 then + global.version = 120 + if universe.maps then + local builderCount = 0 + local squadCount = 0 + for _, map in pairs(universe.maps) do + local squads = map.groupNumberToSquad + for groupNumber, squad in pairs(squads) do + --game.print(serpent.dump(groupNumber)) + if squad.settlers then + builderCount = builderCount + 1 + else + squadCount = squadCount + 1 + end + end + end + universe.builderCount = builderCount + universe.squadCount = squadCount + end + --game.print("Rampant fixed, Version 1.0.13. Recaclulate active squads") + end + + if global.version < 121 then + global.version = 121 + addCommandSet(universe) + if universe.maps then + local mapsCounter = 0 + local mapsToDelete = {} + local lastMap + local deleteMap = false + local squadsCleared = 0 + for surfaceIndex, map in pairs(universe.maps) do + local surface = map.surface + deleteMap = constants.SURFACE_IGNORED(surface, universe) + if deleteMap then + mapsToDelete[#mapsToDelete+1] = surfaceIndex + end + end + for i = 1,#mapsToDelete do + local surfaceIndex = mapsToDelete[i] + local map = universe.maps[surfaceIndex] + --- squads check + local squads = map.groupNumberToSquad -- im sure, no nests, bases, squads in factory floor! But just in case, we'll check the squads.. + local builderCount = 0 + local squadCount = 0 + for groupNumber, squad in pairs(squads) do + if squad.settlers then + builderCount = builderCount + 1 + else + squadCount = squadCount + 1 + end + if squad.group and squad.group.valid then + squad.group.destroy() + end + universe.builderCount = universe.builderCount - builderCount + universe.squadCount = universe.squadCount - squadCount + squadsCleared = squadsCleared + 1 + end + ----- + if universe.mapIterator == surfaceIndex then + universe.mapIterator = nil + end + universe.maps[surfaceIndex] = nil + + mapsCounter = mapsCounter + 1 + end + + if mapsCounter>0 then + game.print("Rampant fixed, Version 1.0.14. Factorissimo surfaces are excluded:"..mapsCounter..", squads removed: "..squadsCleared) + end + end + + end + + if global.version < 122 then + --game.print("Rampant fixed, Version 1.0.18") + global.version = 122 + + universe.processActiveNest = {} + universe.processActiveNestIterator = nil + + universe.pendingMutations = { + ["chunks"] = {}, -- {x, y, surface.index} + ["entities"] = {} + } + end + if global.version < 124 then -- Version 1.1 + global.version = 124 + universe.surfaceIgnoringSet = {} + universe.surfaceRemoteSettings = {} + universe.chunkToPassScan = {} + universe.pendingChunks = {} + + if universe.maps then + local mapsCounter = 0 + local mapsToDelete = {} + local lastMap + local deleteMap = false + local squadsCleared = 0 + for surfaceIndex, map in pairs(universe.maps) do + local surface = map.surface + deleteMap = constants.SURFACE_IGNORED(surface, universe) + if deleteMap then + mapsToDelete[#mapsToDelete+1] = surfaceIndex + end + end + for i = 1,#mapsToDelete do + local surfaceIndex = mapsToDelete[i] + local map = universe.maps[surfaceIndex] + --- squads check + local squads = map.groupNumberToSquad + local builderCount = 0 + local squadCount = 0 + for groupNumber, squad in pairs(squads) do + if squad.settlers then + builderCount = builderCount + 1 + else + squadCount = squadCount + 1 + end + if squad.group and squad.group.valid then + squad.group.destroy() + end + universe.builderCount = universe.builderCount - builderCount + universe.squadCount = universe.squadCount - squadCount + squadsCleared = squadsCleared + 1 + end + ----- + if universe.mapIterator == surfaceIndex then + universe.mapIterator = nil + end + universe.maps[surfaceIndex] = nil + + mapsCounter = mapsCounter + 1 + end + + if mapsCounter>0 then + game.print("Rampant fixed, Version 1.1.0 Surfaces excluded:"..mapsCounter..", squads removed: "..squadsCleared) + end + + for surfaceIndex, map in pairs(universe.maps) do + for event,_ in pairs(map.pendingChunks) do + universe.pendingChunks[event] = true + end + map.pendingChunks = nil + + for chunk,_ in pairs(map.chunkToPassScan) do + local chunkIndex = {chunk.x, chunk.y, map.surface.index} + universe.chunkToPassScan[chunkIndex] = true + end + + end + end + end + + if global.version < 126 then -- Version 1.1.1 + global.version = 126 + if universe.maps then + for surfaceIndex, map in pairs(universe.maps) do + map.vengenceLimiter = 0 + end + end + end + if global.version < 127 then -- Version 1.1.6 + global.version = 127 + universe.aiDifficulty = settings.global["rampantFixed--aiDifficulty"].value + universe.finalSquadCost = 1 + universe.finalVengenceSquadCost = 1 + end + + if global.version < 128 then -- Version 1.1.9 + global.version = 128 + if universe.maps then + for surfaceIndex, map in pairs(universe.maps) do + for i, base in pairs(map.bases) do + base.thisIsRampantEnemy = true + end + end + end + game.print({"description.rampantFixed--EnemySettings1_1_9"}) + end + + if global.version < 129 then -- Version 1.1.10 + global.version = 129 + if universe.NEW_ENEMIES then + game.print({"description.rampantFixed--EnemySettings1_1_10"}) + end + end + + if global.version < 131 then -- Version 1.1.11 + global.version = 131 + if universe.maps then + for surfaceIndex, map in pairs(universe.maps) do + map.chunkToPlayerTurrets = {} + end + end + end + + if global.version < 135 then -- Version 1.2.0 + global.version = 135 + universe.attackWaveMaxSizeEvoPercent = settings.global["rampantFixed--attackWaveMaxSizeEvoPercent"].value + universe.chunkToPlayerCount = {} + universe.processActiveNestIterator = nil + universe.processActiveNest = {} + universe.decomressQueue = {} + if universe.maps then + for surfaceIndex, map in pairs(universe.maps) do + map.chunkToPlayerCount = nil + map.playerToChunk = nil + for chunk, value in pairs (map.chunkToDeathGenerator) do + if (value > - 1) and (value < 1) then + map.chunkToDeathGenerator[chunk] = nil + end + end + end + end + end + + if global.version < 136 then -- Version 1.2.3 + global.version = 136 + upgrade.rebuildActivePlayerForces(universe) + universe.groupNumberToSquad = {} + + if universe.maps then + for surfaceIndex, map in pairs(universe.maps) do + for groupNumber, squad in pairs(map.groupNumberToSquad) do + squad.map = map + if squad.settlers then + squad.disbandTick = game.tick + 72000 + else + squad.disbandTick = game.tick + 18000 + end + universe.groupNumberToSquad[squad.groupNumber] = squad + end + map.groupNumberToSquad = nil + map.squadIterator = nil + end + end + end + + if global.version < 137 then -- Version 1.2.5 + global.version = 137 + universe.unitProtectionData = {} + -- if game.active_mods["space-exploration"] and game.active_mods["combat-mechanics-overhaul"] and game.active_mods["Krastorio2"] then + -- if not settings.startup["rampantFixed--useBlockableSteamAttacks"].value then + -- game.print({"description.rampantFixed--K2_SE_CMO_incompatibilityWarning"}) + -- end + -- end + end + + if global.version < 138 then -- Version 1.2.8 + local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE + global.version = 138 + if universe.maps and starting and settings.startup["rampantFixed--newEnemies"].value then + for surfaceIndex, map in pairs(universe.maps) do + local buildings = map.surface.find_entities_filtered({force = "enemy", type={"turret"}}) + local buildingsTotal = #buildings + local rndNumber = 0 + if buildingsTotal >= 70000 then + rndNumber = 0.95 + elseif buildingsTotal >= 35000 then + rndNumber = 0.9 + elseif buildingsTotal >= 15000 then + rndNumber = 0.6 + end + if rndNumber > 0 then + local wormsDeleted = 0 + for i=1,buildingsTotal do + local building = buildings[i] + if math.random() < rndNumber then + building.destroy() + wormsDeleted = wormsDeleted + 1 + end + end + if wormsDeleted > 0 then + game.print("update 1.2.8: "..map.surface.name..":".. wormsDeleted.." worm(s) removed") + end + end + end + end + + end + + if global.version < 139 then -- Version 1.2.11 + global.version = 139 + universe.unitProtectionData.unitCurrentHP = {} + end + + if global.version < 142 then -- Version 1.3 + global.version = 142 + universe.nonRampantCompressedSquads = {} + universe.bases = {} + universe.baseId = 1 + universe.recycleBaseIterator = nil + universe.raiding_minimum_base_threshold = constants.RAIDING_MINIMUM_BASE_THRESHOLD + universe.no_pollution_attack_threshold = constants.NO_POLLUTION_ATTACK_THRESHOLD + universe.AI_MAX_SQUAD_COUNT = settings.global["rampantFixed--maxNumberOfSquads"].value + if universe.maps then + -- local chunkToBaseCleared = 0 + local newId = 1 + local basesList = {} + for _, map in pairs(universe.maps) do + local bases = map.chunkToBase + local basesProcessed = 0 + + local evoTier = 1 + for tier = 10,1,-1 do + if universe.evoToTierMapping[tier] <= map.evolutionLevel then + evoTier = tier + break + end + end + + for chunk, base in pairs(bases) do + if base and base.id then +-- local distance = ((base.x - chunk.x)^2 + (base.y - chunk.y)^2) ^ 0.5 + if not basesList[base] then + basesList[base] = base.id + base.id = newId + base.mapIndex = map.surface.index + base.chunks = {} + base.state = BASE_AI_STATE_ACTIVE + if universe.NEW_ENEMIES and (not universe.ALLOW_OTHER_ENEMIES) then + if not base.thisIsRampantEnemy then + base.tier = math.max(evoTier - base.tierHandicap, 1) + + base.thisIsRampantEnemy = true + end + end + newId = newId + 1 + universe.bases[base.id] = base + end + --if distance <= 150 then + base.chunks[chunk] = true + -- else + -- chunkToBaseCleared = chunkToBaseCleared + 1 + -- bases[chunk] = nil + -- end + end + end + map.bases = nil + map.baseIndex = nil + map.baseIncrement = nil + map.baseId = nil + map.recycleBaseIterator = nil + map.chunkFactions = nil + end + -- if chunkToBaseCleared > 0 then + -- game.print("chunkToBase links deleted:"..chunkToBaseCleared) + -- end + + universe.baseId = newId + end + addCommandSet(universe) + end + + if global.version < 143 then -- Version 1.4.0 + global.version = 143 + universe.oneTickImmunityUnits = {} + universe.compressedUnits = {} + local compressedUnits = universe.compressedUnits + for groupNumber, squad in pairs(universe.groupNumberToSquad) do + local group = squad.group + if group and squad.compressedMembers then + if squad.smoothCompressed then + local unitNumber + for _, entity in pairs(group.members) do + unitNumber = entity.unit_number + local compressData = squad.compressedMembers[unitNumber] + if compressData then + compressedUnits[unitNumber] = {count = compressData.count, textId = compressData.textId, entity = entity} + end + end + + else + for _, entity in pairs(group.members) do + unitNumber = entity.unit_number + entityName = entity.name + local compressData = squad.compressedMembers[entityName] + if compressData then + compressedUnits[unitNumber] = {count = compressData.count, textId = compressData.textId, entity = entity} + squad.compressedMembers[entityName] = nil + end + end + + end + squad.compressedMembers = nil + squad.compressed = true + end + end + end + + if global.version < 144 then -- Version 1.4.2 + global.version = 144 + universe.protectedUnits = {} + end + + if global.version < 150 then -- Version 1.5 + global.version = 150 + universe.undergroundSquads = {} + universe.undergroundAttackProbability = 0 + end + + if global.version < 152 then -- Version 1.5.2 + global.version = 152 + universe.undergroundAttack = settings.global["rampantFixed--undergroundAttack"].value + end + + if global.version < 161 then -- Version 1.6.1 + global.version = 161 + for chunkIndex,_ in pairs(universe.chunkToPassScan) do + if chunkIndex and (type(attribute) == "table") then + local chunkIndexNew = "x"..chunkIndex[1].."y"..chunkIndex[2].."m"..chunkIndex[3] + local chunkData = {} + for i = 1, 3 do + chunkData[i] = chunkIndex[i] + end + universe.chunkToPassScan[chunkIndexNew] = chunkData + universe.chunkToPassScan[chunkIndex] = nil + + end + end + + universe.pendingMutations = { + ["chunks"] = {}, -- {"x"..x.."y"..y.."m"..surface.index} + ["entities"] = {} + } + universe.pendingMutationsIterator = nil + + universe.externalControlValues = {} + end + + if global.version < 164 then -- Version 1.6.4 + global.version = 164 + universe.evolveTick = 0 + universe.lvlupTick = 0 + end + + if global.version < 170 then -- Version 1.7.0 + global.version = 170 + end + + if global.version < 172 then -- Version 1.7.2 + global.version = 172 + universe.randomGenerator = nil + end + + if global.version < 180 then -- Version 1.8.0 + global.version = 180 + universe.growingBases = {} + if universe.maps then + for _, map in pairs(universe.maps) do + map.basesToGrow = {} + end + end + end + + if global.version < 183 then -- Version 1.8.3 + global.version = 183 + universe.debugSettings = {} + universe.allowExternalControl = true + end + + return (starting ~= global.version) and global.version +end + +function upgrade.compareTable(entities, option, new) + local changed = false + if (entities[option] ~= new) then + entities[option] = new + changed = true + end + return changed, new +end + +return upgrade diff --git a/RampantFixed/changelog.txt b/RampantFixed/changelog.txt new file mode 100644 index 00000000..5cd73847 --- /dev/null +++ b/RampantFixed/changelog.txt @@ -0,0 +1,842 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.8.3 +Date: 2024.02.28 + Bugfixes: + - Fixed an error that occurred when force created and deleted before game started (ArachnidsFaction + Arachnids_enemy mods) + - Fixed ignoring diplomacy changes after creating a force + Other: + - Setting "Remote interface: allow external control AI" marked as obsolete. External control is always allowed +--------------------------------------------------------------------------------------------------- +Version: 1.8.2 +Date: 2024.01.01 + Bugfixes: + - Fixed an error that occurred when the list of growing biter bases no longer contained a previously processed base + Other: + - New setting "Optimization: rebalance of stationary flamethrowers". + Reduces attack speed while maintaining overall damage. + In fact, flamethrowers become slightly stronger. + Works also on the flamethrower from Rampant Arsenal +--------------------------------------------------------------------------------------------------- +Version: 1.8.1 +Date: 2023.12.28 + Bugfixes: + - Fixed loading error if any prototype has collision box and no hit_collision_mask +--------------------------------------------------------------------------------------------------- +Version: 1.8.0 +Date: 2023.12.27 + Features: + - New AI state: Growing. Some enemy bases closest to the player will grow. + Places of suspected growth are indicated by a green cloud + - Added menu for admin players. They can make it visible through player settings. + Allows you to replace enemies with standard ones, as well as specify which surfaces/planets to ignore by AI + Also, added a command for administrators "/rampantSetSurfaces". Allows you to open the surface processing interface directly + Warning: allowing large planets to be processed can lead to long (up to half an hour) lags + - Added startup setting "World: Threshold for maximum evolution factor by distance" + Balancing: + - "Rampant Fixed" no longer modifies vanilla spitters and worms attacks + The β€œUse blockable projectiles” setting marked as obsolete + Compatibility: + - Now "Combat Mechanics Overhaul" can`t change (and broke) "Rampant Fixed" objects. Added this mod to dependency list + If this mod exists, objects are re-generated in the β€œdata-final-fixes” phase, with changes in loot being saved + Other: + - Starting peace period max value now 1200 minutes + - Now only 80% of non-vanilla nests are replaced when the "allow other enemies" setting is disabled. + This will allow you to occasionally encounter enemies of other mods if the player forgot to allow them + Also, when replacing nests, the biters do not die, but are removed. + This will help avoid destruction of neighboring nests when replacing biters with post-mortem effects + - Player setting "Show dialog to disable new enemies" removed + - Some en, ru localisation changes + Bugfixes: + - Fixed surfaces with biters being ignored if they were created after surfaces without biters (new game only) +--------------------------------------------------------------------------------------------------- +Version: 1.7.5 +Date: 2023.09.10 + Bugfixes: + - Fixed error, if a pole with a red or green wire was killed by an energy thief +--------------------------------------------------------------------------------------------------- +Version: 1.7.4 +Date: 2023.08.29 + Bugfixes: + - Fixed error, if there was an attacking squad in the trimmed part of the map + Other: + - Added a warning before the Juggernaut faction spawns + - Added a warning about ignoring the setting of new enemies side if it has changed since the start of the game +--------------------------------------------------------------------------------------------------- +Version: 1.7.3 +Date: 2023.08.25 + Compatibility: + - Space exploration: triming surface no longer stop nests mutation + Bugfixes: + - Now, chunks, once polluted and cleaned up afterwards, become inactive over time (does not participate in close range attack waves) + - Work has been done on the game crashes on biter death that (probably) appeared in factorio version 1.1.81+ + Fixed a game crash on biter mass death (now biters no longer try to escape) + Fixed a rare game crash on compressed biter death + Fixed a rare game crash when a squad tries to go underground under artillery fire + --------------------------------------------------------------------------------------------------- +Version: 1.7.2 +Date: 2023.08.07 + Balancing: + - Laser faction (units and buildings) now immune to lasers and weak to physical damage + Other: + - Setting "World: Enemy Random Seed" removed. Removed all biter's parameter randomization + - New setting "Biter buildings are immune to electrical damage". True by default. Disabling immunity will make the default level + biter buildings extremely vulnerable to the AoE damage of some mods, such as the RPG mod. + - Added underground attack path tracing to help players understand where the threat came from +--------------------------------------------------------------------------------------------------- +Version: 1.7.1 +Date: 2023.06.16 + Bugfixes: + - Spitter/worm shots no longer absorb the player's bullets from the Krastorio 2 mod (removed "layer-13" from collision mask) + Other: + - Added warning for the first detected underground attack +--------------------------------------------------------------------------------------------------- +Version: 1.7.0 +Date: 2023.05.15 + Features: + - Enrage. Destroying nests when there are a lot of biters nearby will buff them to speed. Buff stacks up to 13 times. + This is a countermeasure against attempts to destroy nests by ignoring biters, which leads to the accumulation of + a large number of them and significant lags. + Optimisations: + - Fire and acid damage no longer processed by event on_entity_damaged. "Oneshot protection" and "range-immunity" + will not work for them + - Setting "Optimization: fire safety of hand flamethrowers" reworks hand flamethrowers stream. It does not create fire, + instead dealing direct area of effect damage. + Balancing: + - Due to the fact that acid damage is no longer handled in the event on_entity_damaged, added acid resistance to biter factions + armored, fast, suicide, poison + - Armored and troll factions are flameable againg. Fire resistance of armored biters increased to from "lesser" to "minor" + - The number of biters spawned by the nest no longer increases with each level. Biter spawn interval slightly reduced + - Reduced wasps fire damage + - Reduced fire worm damage + - Inferno faction dot damage significantly increased + - Fixed too low (10 times) level one acid pool damage + - Arachnids no longer create a puddle of acid when attacking + Bugfixes: + - Fixed - compressed biters not in any group were not decompressed on death + Other: + - Collateral damage from the stream attacks, such as fire generated and damage over time, is now shown in tooltips +--------------------------------------------------------------------------------------------------- +Version: 1.6.4 +Date: 2023.04.23 + Optimisations: + - Optimization when playing with extreme settings: + Added global evolve cooldown. Mutating worm->nest->hive cannot be more than once every 5 minutes, even if there are a lot + of enemy bases + Added global lvlup cooldown. Nests and worms lvlup cannot be more than once per minute, even if there are a lot of them + Deferred mutations are now processed every tick, but no more than one mutation per tick + These measures do not affect the UPS, but reduce the the lag spikes +--------------------------------------------------------------------------------------------------- +Version: 1.6.3 +Date: 2023.04.17 + Optimisations: + - Reduced lag spikes during mass mutations (server/multiplayer games) + - Setting "Optimization: fire safety of hand flamethrowers" now applied to napalm (rampant arsenal) + - Safe fire on trees no longer deals damage, resulting in serious lag when having multiple biters nearby + - New setting "Optimization: rebalance Rampant Arsenal DOT". Acid and poison sticker damage will be dealt less often, but stronger + Bugfixes: + - Fixed missing Bob Enemies artifacts + - Fixed error when unburrow, if an underground attack containing a disabled faction + - Now, nocturnal biters always start the night with a siege + (The AI state change time is updated if it has expired. As a result, nocturnal biters do not change AI status immediately after + night falls) + Compatibility: + - Alien-module, Armoured biters, Bob Enemies, Rampant aresnal, Shall Alien Loot added as optional mods. + Other: + - Updated En description of the mod (identical to the description on the mod portal) +--------------------------------------------------------------------------------------------------- +Version: 1.6.2 +Date: 2023.02.17 + Bugfixes: + - Fixed loading in zip version of mod +--------------------------------------------------------------------------------------------------- +Version: 1.6.1 +Date: 2023.02.17 + Features: + - Experimental feature: added remote interface. Other mods can read chunk pheromones, set enemy base factions, + wave sizes, create attack squads and more. Look at remote_interface.lua + Suggestions for additional functionality are welcome. + To prevent malicious activity, access to anything other than reading is allowed only if the startup + setting "Remote interface: allow external control AI" is enabled. Disabled by default + - New setting: "AI: Daytime non-rampant actions (including in peaceful mode)". + Standard attacks due to pollution, settlement, attacks of other mods will not be prohibited + in peaceful mode and during the day in Nocturnal mode + - New setting: "Attack Wave: agressive start". The size of the squad and the frequency of attacks will be calculated from at least + 30% of evolution. This level will be reached in 1 hours from the start of the game + Balancing: + - Now underground attacks cannot pass water barriers of more than 2 chunks. Exception - revenge for shelling with artillery + - Damage and range of undergroud dust cloud halved. This will allow the mines to survive the attack passing under them. + - Weakened the reaction of biters to launching a rocket in the "space exploration" mod + Optimisations: + - Added player hunt cooldown for chunk. If the player goes deep into the bug lair, then the hunting squads will be smaller, + but they will be stronger + - Units with "not-in-kill-statistics" flag excluded from death processing + Bugfixes: + - Fixed some missed texts (En locale) + - Fixed juggernaut attack animation if "armored biters" mod is active + - Fixed compressed squads ignoring the presence of a player nearby if the player is not aggressive. Now such a squad will unpack + and attack with all biters + - Fixed excessive queuing of chunks when mass landfilling water and mass mutation. + Other: + - Biters retreat and regroup after destroying a hive only if its an artillery strike +--------------------------------------------------------------------------------------------------- +Version: 1.5.3 +Date: 2023.01.01 + Bugfixes: + - Fixed error, if underground attack is too large and set digout to queue + Other: + - Added map setting to enable/disable underground attacks +--------------------------------------------------------------------------------------------------- +Version: 1.5.1 +Date: 2022.12.31 + Bugfixes: + - Fixed error, if Warptorio 2 mod warping while underground attack is coming +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 2022.12.28 + Features: + - Underground attack. Able to attack through water barriers, although they prefer standard paths. They dig out when + they reach the target, or at some distance from military buildings. In the process of moving, a dust cloud is + created at the location. There you can also see how many bites are in the squad + The probability of underground attack can be changed in the map settings + Balancing: + - Now, when shelling a squad with artillery, it will dig in. And keep attacking underground + - Canceled feature "Unstable absorption crystal now makes nearest biters immune to damage" + - Canceled change from 1.3.0 "The number of biters controlled by the nest is lowered and same at all levels. Biters spawn rate increased" + There is no need for it, because due to optimization, the original number of biters is processed without dropping the UPS + Optimisations: + - Due major lags, now long-range immunity will not protect agains fluid-turrets. + To compensate for this, units with long-range immunity are given a constant 50% resistance to fluid-turrets + - Canceled 1.4.2 "Changed death processing of compresses biters. Instead of dying and spawning a new biter, the "compressed" + biter is healed to full health" + Compatibility: + - Eggs and drones use the Combat Mechanics Overhaul flyer layer. This will allow the player to shoot them down with + projectiles without homing (such as Krastorio 2 ammo). (Thanks to Erythion) + Bugfixes: + - Fixed broken long-range immunity + Other: + - Biters can once again retreat and regroup after destroying a hive +--------------------------------------------------------------------------------------------------- +Version: 1.4.4 +Date: 2022.12.12 + Balancing: + - Arahnids faction: fixed missing minor laser resistance + - Fixed worm animation. An animation that was too long prevented the worms from attacking at the set speed. + The attack speed of worms is reduced by 1.5 times, however, it is still significantly higher than before the fix + Compatibility: + - Added loot for Alien-module (Alien Loot Economy) mod + Bugfixes: + - Fixed error when the "energy thief" destroys an object connected to the logical network + Other: + - Increased collision box of low-level nests. These nests are now more visible on the map +--------------------------------------------------------------------------------------------------- +Version: 1.4.3 +Date: 2022.12.01 + Features: + - New setting "AI: Daytime player hunting (including in peaceful mode)". Allows biters to hunt the player at all times. Disabled by default + Balancing: + - Hunt squad spawn chance now scales with distance to nests. The closer the nest, the higher the chance + Compatibility: + - Shall Alien Loot: added alien ore to biters drop in addition to artifacts + - Bob enemies: re-added colored artifacts to biters drop +--------------------------------------------------------------------------------------------------- +Version: 1.4.2 +Date: 2022.11.25 + Features: + - Countermeasures against artificial ditches. Since labyrinths of filling with water, followed by shooting from a safe distance + cause severe lags, countermeasures are taken. Now, biters above 300 health, will gradually fill up the moat in places of + their mass death. + Balancing: + - Unstable absorption crystal now makes nearest biters immune to damage + Optimisations: + - Changed death processing of compresses biters. Instead of dying and spawning a new biter, the "compressed" biter is healed to + full health + Bugfixes: + - Fixed crash when deleting a surface with unprocessed chunks + Other: + - Non-squad compressed biters will decompress if killed from distance below 20 +--------------------------------------------------------------------------------------------------- +Version: 1.4.1 +Date: 2022.11.02 + Bugfixes: + - Fixed crush, when checking lost compressed units +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 2022.11.02 + Features: + - New faction: Tier 4. Arachnids. Leave eggs after death, which must be destroyed by physical damage for a limited time + Faction has weakness to physical damage + The goal of the faction is to force the player to spend resources on ammo + If the Arachnids mod is installed, the biter model from this mod will be used + - Now you can set the duration of the peace period at the beginning of the game (map settings) + Set when the map is created, changes are ignored later + Balancing: + - Now, when destroying objects at ultra-long distances (90+) with electric turrets, there is a 0,5% chance to create an Unstable + absorption crystal. Changed the health and resistances of all Unstable crystals + - Energy-chief factions: added weakness to physical damage. Removed attribute "low health" + - Energy-chief and electic factions: attack cooldown and damage increased by x1.5 + - Increased low-tier armor electic resistace + - Removed overpopulation control. It is not needed due hives no longer spawn nests and worms + - Player hunting squads probability is greatly reduced + - Armored biters now tier 5 (up from 4). Reduced fire resistance + - Some factions now immune to fire stickers: Armored, fast, regenerative, suicide, nuclear and energy-chief + Compatibility: + - Compatible with Arachnids mod + - Compatible with "Hive Mind MitchPlay: Default". Moved definition of spawners from data-final-fixes to data section. + Bugfixes: + - Fixed mistake due to which the player's pheromones were not processed + - Fixed squad compression near players + - Fixed invisibility of wasp drones and spawner eggs + Other: + - Changed binding of data on compressed units from a squad to a specific unit. Compressed units can now be transferred between + squads or have no squad at al + - En locale: brutal biters name now is "armored" + - En, ru locale: "Target dummies" renamed to "Unstable crystall" +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 2022.10.07 + Balancing: + - Hives. Increased health at low levels + Other: + - Ru locale: changes in resistances are included in the description of factions + - The concept of Hives has been changed. They will no longer spawn other nests and worms. + Instead, they will spawn strong biters earlier and more often. The reason is that the possibility of spawning anything + other than units is not provided by the developers and is handled differently on Linux and windows servers, + which leads to desynchronization +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2022.09.29 + Balancing: + - Fire deathcloud damage significantly increased at absolute levels 5+ (in versions 1.3.0+) + Bugfixes: + - Fixed loading error for 10th level enemies +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 2022.09.29 + Bugfixes: + - Fixed error if the dialog for disabling new enemies was somehow closed without removing the interface +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 2022.09.29 + Bugfixes: + - Fixed error with factorissimo entitities pheromones +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2022.09.29 + Features: + - Dynamic squad compression. Long-range squads are compressed to one unit per type. + At medium distances from the player's base, fully compressed squads are converted to partially compressed + Near the player or his buildings there is a complete decompression + Optimisations: + - Major performance improvement in endgame and after a massive artillery bombardments + Lags are possible, but they will only be at the moment when a large number of squads decompressed near the base at the same time + The limit of units that the game is able to handle without serious performance problems has been discovered. + The following parameters have been changed so that the number of attacking units at the same time is less than this threshold: + Dynamic compression is now applied to any squads, including those under the control of a standard AI + Setting "Attack Wave: Max number of attack groups" default and max value is 30 + The number of attacking squads cannot exceed 70% of the maximum. 30% is reserved for other types of squads + The number of biters controlled by the nest is lowered and same at all levels. Biters spawn rate increased. This will weaken + retaliation when attacking large settlements + Late game squad cost discounter can't exceed 50%. Late game squad size bonus can't exceed 50 units. + Late game AI points gained is limited by 1400 per minute (for non onslaught state) + - Rewrited the method of counting pheromones of player buildings. The number of queries has been reduced + - The calculation of mutations has been changed to reduce the load on overpopulated maps. Mutations are rarer, but gene changes are potentially stronger + Balancing: + - Fire stream speed tripled + - Factorissimo buildings pheromones greatly reduced, but if destroyed biters will receive the full value of this building + - Added "pipe-to-ground", "storage-tank" and "container" pheromones + - If there are no nearby nests then AI will switch to raid state + - The level of evolution is included in the estimation of the number of nests. Sieges on sparsely populated maps will become more frequent + - Pollution attack cost at absolute levels 6+ is decreased (~ 1/3) + - 20% attacks in agressive AI state will be from distant nests (if raids allowed) + - Acid faction now immune to poison + - Energy-chief faction: added minor explosion resistance + - Added minor acid resistance to physical and laser factions + - Worms and buildings now immune to electric damage. Removed any electric weakness. The reason is a magic skill in RPG-mod + Bugfixes: + - Fixed the breakdown of the list of bases during a long game, as a result of which the enemy base checks did not find anything. + This could lead to the creation of a new base instead of using the genes of the existing one + - Fixed a bug when building a new nest, in which a chunk could be assigned to a random base, instead of the nearest one + - Fixed a bug when checking for nests in a chunk. The bases created when they are found will now also be able to mutate + - "Oneshot protection" and "range-immunity" will not work if its percentage differs from the Rampant settings. This will prevent + the immortality of units from other mods that are assigned these resistances. + Other: + - Retribution counter no longer increases the pheromone limit of the player's buildings. Instead, the threshold of sensitivity of biters to pheromones decreases + - "Base detection" pheromones are not weakened by a chunk if it passes by more than 10% + - "Base detection" pheromones now is maximum possible for turrets + - Ru locale: changed suiciders faction locale name +--------------------------------------------------------------------------------------------------- +Version: 1.2.11 +Date: 2022.09.14 + Optimisations: + - Hives spawn radius and spawning spacing are same for all levels (spawn raduis greatly reduced at high levels) + - Squad decompress range now ~4 chuncks from playes buildings and ignore late game modifiers + - Vengence squads cant exceed 0.8 * Max biter group size and ignore late game modifiers + - Large bases mutation threshold increased to prevent frequent changes of the same nests + - The calculation method of "Oneshot protection" and "range-immunity" has been changed. Events "on_script_trigger_effect" is no longer used +--------------------------------------------------------------------------------------------------- +Version: 1.2.9 +Date: 2022.09.07 + Balancing: + - Hives can spawn worms again. As soon as the limit of worms in the chunk is exceeded, only nests will appear. + This will slow down the strengthening of the chunk where the hive appeared + - Hives spawn interval increased from 3 to 5 min + - Worms limit increased to 10 + - Hives will despawn, if chunk population is half of max +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 +Date: 2022.09.07 + Optimisations: + - The reason for the fall of the ups in long games was found - these are worms. The concept of worms has been changed - now they are rare, but very dangerous units. The rebalance list is below + Balancing: + - The rate of fire of worms is tripled. Reduced delay before firing. Sticker damage on time increased by 1.5 times. The health of worms at absolute levels 2-5 is increased (~ x1.5) + - Overpopulation control: chunk cannot contain more than 7 worms. Nests ans worm limit reduced from 60 to 40 + - Cluster projectiles (laser/electtic worms, laser spitters) accelerated by 5% + - Wasp worm damage reduced reduced by ~2 times. Added DOT when hit player + - Fire worm damage mutiplier is 6 again + - Hives can no longer spawn worms. Reduced the number of spawned nests before mutation + - Removed randomization of attributes + - Laser spitters now have "QuickCooldown" ability + Bugfixes: + - Fixed missing DOT on inferno worm/spitter hit +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 2022.08.26 + Bugfixes + - fixed loading error, if gate/wall explosion resitance exist, but decrease value is nill +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 +Date: 2022.08.26 + Balancing: + - Fire worm bonus range now is 7 (lowered from 8) + - Nuclear biters: since the explosion now occurs at a distance from the target, the explosion radius is increased by 3 + - Nuclear biters: direct target damage has been returned due to the fact that mobile targets, such as the player, could completely avoid a nuclear explosion. Now, some of the damage will be done immediately + - Acid biters: acid pool damage significantly increased + - The probability of factions at maximum evolution is now the same + - Setting "Increase wall resistance to spitters". Added explosion protection (reduces explosion damage by 40). Setting renamed to "Safety; Increase acid, poison and explosion wall resistance" + - High-level Juggernaut healing significantly reduced + Other: + - Setting "World: Units affected by tiles" removed due to abuse of coatings that slow down movement (for example, K2 creep) in front of the defense line + Bugfixes: + - Removed setting "World: Units affected by tiles" theoretically could lead to desynchronization when playing on the server + - Mutation in the case when no faction is available no longer causes an error +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 2022.08.20 + Balancing: + - Setting "Safety; Increase wall resistance to spitters" increase in the resistance of walls from poison and acid, only if object had acid resistance initially + - To compensate for the "effective level" bugfix, the health of nests and worms at absolute levels 3-5 is reduced. Since other parameters, such as damage, are no longer reduced twice, the worms have become more dangerous with the default settings. For those playing at the maximum enemy level, levels 3-5 have 30% less health + - Fire worm damage mutiplier now is 5 (lowered from 6). Energy-thief worm damage mutiplier now is 3 (lowered from 4) + - Suicide faction: The resists of the buildings are now the same as those of the biters + Bugfixes: + - The correction for the effective level for worms and nests is now applied once, not twice. The biters and spitters didn't have this mistake, so they have not changed + - The presence of walls and gates with indeterminate resistance in the game now does not lead to a loading error + - The reason for desynchronization when playing on a multi-player server may have been fixed. Now, data on the special-protection of the biters, as well as their health, are included in the stored data. Perhaps this was the reason for desynchronization + Compatibility: + - New setting: Projectiles: replace steam attacks with blockable projectiles. Add alternative attack for fire and inferno spitters: combination of mods "K2+SE+Combat Mechanics Overhaul" breaks the steam-attacks, if Combat Mechanics Overhaul mod settings: "Spitter spit blockable" and "Worm spit blockable" enabled. In this case use an alternative attack + Other: + - En, Ru locale: A system for generating localized names from Rampant 3 has been applied. Changed Ru locale for physical faction +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 2022.08.05 + Compatibility: + - AI takes into account the settings of diplomacy, excluding from enemies the forces of allies and those with whom there is a cease-fire. + - Mods such as "abandoned ruins" do not cause attacks to stop due to the fact that all units are sent to friendly buildings + Bugfixes: + - The frequency of sieges has been returned to the state up to version 1.2.3 (with the "AI migration" setting disabled). Due to insufficient sieges in the case when the nests are too far away + Other: + - Maximum lifetime of squads is 40 minutes + - Squads are processed regardless of the currently active map +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 2022.08.01 + Balancing: + - 10% of settlers in migrate mode now is "siege" squads + - Add discount on the cost of long-distance settlement squads in migration mode. The discount can reach 30% for very long distances + - The conditions for selecting the migrate mode have been changed. Now it will be selected less often + - Fast faction: "Quick cooldown" attribute no longer reduce direct dmg by 1/3. Fast spitters range reduced by 2. Fast spitter "long-range immunity" now has range 25 (up from 20) + - Oneshot protection now disabled at negative resistance (if there is no protection against long-range damage) + - Nuclear biters: the explosion now appears at the location of the biter, not its target. Direct target damage removed. The radius of additional damage in the epicenter has been increased and is 30% of the maximum radius. The radius of the nuclear explosion now takes into account the "enemy level" setting (significant nerf) + - "AI: Action points scaling" setting is now taken into account when calculating the dependence of temperament on the number of killed biters + Compatibility: + - Space exploration: biters reaction for rocket launch weakened (5 times) + Bugfixes: + - Now, migration mode spawn attack squads only from raid nests (any nests before) + - Death by mutation no longer triggers revenge on the player + - Now, groups that have not received new orders within 5 minutes (if building base then 10 minutes) are disbanded unconditionally + - Suicide biters now never survive after their attack + Other: + - Juggernaut attack cloud now rendering at floor layer(does not hide units) + - Redesigned changelog. I hope it will now be displayed in the game, in the list of mods +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 2022.07.11 + Balancing: + - Major resistance: decrease values decreased by 1 (1.2.1 version did not apply this change) + Bugfixes: + - Fixed deleting associated units, when units are invalid +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2022.07.09 + Balancing: + - Major resistance: decrease values decreased by 1 + - Poison death-cloud now ignore wind + Bugfixes: + - Fixed loading error if setting "Optimization: Remove blood particles (Reduces lag spikes)" is true +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2022.07.05 + Features: + - New setting "Attack Wave: The maximum wave size starts with the % of evolution". Default value is 100%. + - New feature: large attacking squads far away from the player, are compressed to one unit of each type + Optimisations: + - Disabled friendly fire. Setting "Safety: Disallow Friendly Fire Splash Damage" removed due to caused lags + - Any fire from the biters now affects "not-same" forces + - Maximum Fire spitters fire lifetime reduced from 30 sec to 4 sec. Doubled initial damage + - Maximum Inferno fire lifetime reduced from 30 sec to 10 sec + - Reduced the number of blood particles when taking damage. Only physical damage makes blood. Due to the fall of UPS during mass attacks (~2000 biters), blood particles on the death are left only at worms and nests + - The interval between processing the AI state has been increased from 7 to 60 ticks + - When the nests mutate, associated idle biters die + Balancing: + - Due to the cancellation of friendly fire, the changes of versions 1.1.14, 1.1.15 (fire, inderno and poison faction) has been canceled: Fire spiters - acid resistance returned, Inferno fire now have "acid" damage, Poison faction: removed major acid resistance + - The number of divergent rays in cluster attacks has been reduced by 25% + - Major resistance now 80 - 92% (65 - 90% before) + - "Range-immunity efficiency" default value lowered from 98 to 95% + - Nuclear faction: Removed "range-immunity" from biters. Increased "oneshot protection" by 1 hit. Added major resistance to acid. Buildings now have explosion weakness (same resistances as biters) + - Self damage of nuclear biters and suiciders now hit them twice to kill guaranteed. + - Fixed mistakes in the calculation of AI action points. Added dependence of the points received on the number of far nests. The influence of nearby nests has been weakened + - The spawn level decreases by 2 at each death, not by 1 + - The increase in the wave size in the late game is now limited and cannot exceed 75 of the specified maximum size + - Worms hitbox increased. Now, it's easier to hit them with a shotgun + Bugfixes: + - Fixed small amounts of death generator not being rounded to nil + - Fixed a bug where the player's pheromones were not taken into account + - Fixed excessive queuing of active nests for processing + - Now reaching the maximum number of squads does not block the creation of other types of squads + Other: + - Setting "World: Enemy Variations" now is obsolete. In the future, it is worth removing it. The existing objects will remain, but all new ones will be variant = 1 + - Setting "AI: Temperament Rate Modifier" removed due to a different algorithm for determining the state of the AI + - The description of the settings "AI: Enable Migration" and "AI: Enable Peaceful" has been clarified, for a better understanding of their effect + - Some En, Ru locale changes +--------------------------------------------------------------------------------------------------- +Version: 1.1.17 +Date: 2022.06.01 + Bugfixes: + - Hand flamethrowers sticker applied on immune enemies now also does not cause massive forest fires. +--------------------------------------------------------------------------------------------------- +Version: 1.1.16 +Date: 2022.05.31 + New: + - AI: casualties and causing losses are included in the defense assessment and can change the line of attacks + - AI: during the attack, the death check at the next point of the route was removed. Now biters are not afraid to attack after heavy losses without result. Even if the assessment of protection led them to the place of mass death, they will continue the attack instead of switching to patrolling + Bugfixes: + - AI: during mass attacks on a small area of defense, squads do not block each other's path, which previously forced them to switch to patrolling instead of attacking (the number of these squads could exceed the maximum allowed number of squads, which disabled the creation of new attacks) + Balancing: + - "AI: Action points scaling" setting now also increases the base number of squads in aggressive mode. This will allow the AI to spend points evenly +--------------------------------------------------------------------------------------------------- +Version: 1.1.15 +Date: 2022.05.29 + Balancing: + - Fire spiters: acid resistance removed. The sticker applied to mobile enemy units (DOT) lasts 2 times less, but its damage is 4 times higher + - Poison faction: added major acid resistance + Performance: + - Now, fires from streaming attacks do not spread far from the area of occurrence + - The stickers applied by biters now cant spread fire + - New setting "Optimization: fire safety of hand flamethrowers". True as default. Hand flamethrowers do not cause massive forest fire + Bugfixes: + - Fixed a bug when fire spitters attacks did not apply sticker DOT on the player +--------------------------------------------------------------------------------------------------- +Version: 1.1.14 +Date: 2022.05.17 + Performance: + - Inferno fire now have "poison" damage (changed from "acid"). This change removes lags from endless internal wars after artillery attacks. + Balancing: + - Inferno damage reduced by 30% to compensate for the lack of resistance from the player and the walls +--------------------------------------------------------------------------------------------------- +Version: 1.1.13 +Date: 2022.05.14 +Date: + New: + - Energy-chief worms now have electic beam attack (and makes energy-drain pylons if electic objects destroyed) + - Fire biters: added dungerous small fire cloud on death + Balancing: + - Cluster attacks (laser worms and spitters, electric worms) now makes more beams + Misc: + - "Range-immunity efficiency" default value now is 98% + - "World: Allow other enemies" setting now disabled as default + Bugfixes: + - Fire worms and spitter attacks moved from "flamethrower" to "biological" category and does not shown at bonus table + - Fixed typo in "Oneshot protection efficiency" and "Range-immunity efficiency" description (En localisation) +--------------------------------------------------------------------------------------------------- +Version: 1.1.12 +Date: 2022.05.12 + Bugfixes: + - When combining long-range and short-range damage, long-range damage no longer heals a biters with immunity from long-range damage +--------------------------------------------------------------------------------------------------- +Version: 1.1.11 +Date: 2022.04.28 + New: + - AI takes into account the presence of defense when choosing an attack path + - New settings: "Oneshot protection efficiency" and "Range-immunity efficiency". 100% as default + Bugfixes: + - AI units are no longer in a permanent kamikaze state and take into account previous losses +--------------------------------------------------------------------------------------------------- +Version: 1.1.10 +Date: 2022.04.17 + Misc: + - Now it is possible to replace the nests of new enemies with standard ones. This can be useful if you want to continue the game without new enemies or remove the mod without losing nests (player settings- "Show dialog to disable new enemies"). Singleplayer game or "admin" players only + - At Veden`s request, the license was returned. Unfortunately, despite the fact that "Rampant" switched from version 2.2.0 to "GPLv3", the author does not give permission for a similar replacement in "Rampant Fixed", because it was developed based on version 1.1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.1.9 +Date: 2022.04.11 + New: + - A mixed settlement of rampant and other enemies is available (see startup settings). Only in the new game. Set as default if the mod is installed for the first time + Balancing: + - Killing of bitters from a distance of 90 and more is equated to Artillery + - Previous losses in determining the path have a stronger impact on the choice + - AI no longer regain points for disbanded groups, increased passive points generation for lower temperament values to provide starting migration + - The early sieges, removed in version 1.1.6, have been returned. Monitoring the map by radars is again a necessity + Compatibility: + - Compatibility with "swarmageddon" - huge "service" entities now dissappears instantly + - AI no longer control standard/other mods attacks and settlements. Only squads for action points are "smart". There will still be no attacks/settlements during the daytime in Nocturnal mode or passive mode + Misc: + - Removed license CC 4.0 BY-NC +--------------------------------------------------------------------------------------------------- +Version: 1.1.8 +Date: 2022.02.24 + Balancing: + - Resistance to unregistered damage types limited to 70% (90% before) + - Destruction of nests by artillery now give 20% additional action points (50% before) + - Destruction of nests by artillery increases the overall difficulty not so much (the effect is about 1.5 times weaker) + - Juggernaut biters acid resistance reduced to Minor +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 2022.02.23 + Compatibility: + - Added check for unknown moded damage types. Resistance for this types is (biter level-1)*10% + Balancing: + - End-game: large retribution counter values remove restrictions on 2 sieges/onslaught in a row + - Wasp: doubled drone speed and lifetime + - Fixed a lack of AI action points on heavily cleaned maps in late game after 1.1.6 + - Now some of the factions are aimed at countering acid damage: + - Juggernaut: fixed missing extreme acid resistance + - Inferno: increased acid resitance, increased laser weakness + - Acid: now immune to acid damage + Bugfixes: + - Fixed the destruction of nests by artillery was not taken into account when increasing the counter of retribution + - Fixed the destruction of nests by artillery was not give additional action points +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 2022.02.06 + New: + - New setting: AI Difficulty. "Hard" (as default, AI work same as before 1.1.6), "Lite" - for a more comfortable game (mid-game and later). The response to the player's actions is weaker, attacks are less frequent + Balancing: + - 6, 7, 8, 9 enemy levels appear later (6th level - much later, at 65%). The maximum probability of spawning remained at the same levels of evolution + - The cost of the squads increases with the increase in the number of units in it (affects the late game) + - End-game: Retribution counter now also reduce cost of AI squads (each 1 rocket launch or 5000 artillery kills = x0.99 cost) + - Significantly increased fire worm damage + - AI: Nocturnal Mode: if the AI finds that there are not enough nests, then the night is guaranteed to start with a siege mode. Also, 2 or more sieges in a row allowed in Nocturnal Mode + - Siege can't occure 1st hour of game + - Setting "Safety; Increase wall resistance to spitters" now also set wall resistance to poison to 75% + Compatibility: + - Added Shall Alien Loot artifacts drop + Performance: + - Spawn corpses now have fade time 3 sec +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2022.01.27 + Balancing: + - Increased vulnerability of the Poison and Fire and Inferno faction to the laser + - Siege mode now attack from nearby and far nests. + - Migrate mode now attack from nearby and far nests. + Bugfixes: + - Fixed siege and migrate mode idle when no nearby nests +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2022.01.26 + Misc: + - Settlements probability now in mod settings. Default value 40% (60% atack). + - Vengence settings now can be configured. This affects the duration of the response to the aggressive actions of the player and the siege of his base by nearby nests. + Bugfixes: + - Fixed 0% settlements probability in siege/migration mode after 1.1.0 . + - Fixed crush when deleting SE surface (if there is theoretically possible the presence of biters) + - Map suspending: checking surfaces with nests for "cleanness from biters" now checks all surfaces, not just the first one in the array. This does not affect the performance of the mod as a whole. However, because of this bug, there is no expected performance gain in games with many defeated worlds +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2022.01.23 + Bugfixes: + - Fixed crush when cliffs explosion +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2022.01.22 + Balancing: + - Poison faction now is REALLY tier 6 + - Nuclear faction now tier 7 (up from 6) + - Siege mode now mix atacks and settlement close to player + - Siege and onslaught modes now cant roll 2 times in a row + - Vengence of the biters is no longer infinite on the deathworlds 600*600 and does not replace other attacks. In addition, the probability of triggering revenge no longer increases by evolution above 30% + - Destroying walls no longer gives AI action points + Bugfixes: + - Known bug: Factorio 1.1.53 causes fights between biters when receiving friendlyfire damage. This is not a feature of Rampant or Rampant fixed. The bug is being studied, possible solutions are not yet known. + - Fixed crush when start new game without enemies + - Fixed crush when created new surface without autoplace enemy-base settings + - Fixed crush that occurred when removing the surface when disabling mods + - I thank the players for their feedback, who sent error messages and testing the mod in extreme settings +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2022.01.21 + Balancing: + - Poison faction now tier 6 (up from 2) + - Inferno faction probability reduced at high evolution to same as another factions rate + - The damage of the fire spitters has been returned to the values of version 1.0.12 (reduced by 1.5 times) + - The growth curve of the health of spitters at the average levels of evolution has been smoothed (with the default settings, levels 4 and 5 spitters will have ~5-15% less health) + - Increased electric resistance of light, heavy and mk1 armor + Compatibility: + - Exclude non-biter surfaces from processing + - Exclude cleared surfaces to from processing until the appearance of new nests + - AI Planning will now happen on up to 15 surface per cycle (based on an idea from Rampant 2) + - Only homeworld can there be a starting peace period + Misc: + - Long range immunity now can be disabled in mod settings + - Oneshot protection now can be disabled in mod settings + - Update locales +--------------------------------------------------------------------------------------------------- +Version: 1.0.19 +Date: 2022.01.06 + Bugfixes: + - fixed crush 1.0.18 +--------------------------------------------------------------------------------------------------- +Version: 1.0.18 +Date: 2022.01.06 + New: + - Added death chance to overpopulated area (to hives/nests/worms) + Performance: + - Queuing mass mutations to reduce lags + - Queuing nest processing to reduce lags + Bugfixes: + - fixed incorrect description of the nests resistances (nests havnt oneshot protection and long range immunity) +---------------------------------------------------------------------------------------------------- +Version: 1.0.17 +Date: 2021.12.20 + Balancing: + - Level 8 bitters evo now: 0.74 - 0.98 (before: 0.74 - 0.975) + - Level 9 bitters evo now: 0.82 - 0.99 (before: 0.82 - 0.975) + Bugfixes: + - fixed crash when disabling a faction at the time of building a new enemy base +---------------------------------------------------------------------------------------------------- +Version: 1.0.16 +Date: 2021.12.15 + Balancing: + - Hives now spawn only its own level and faction objects + - The hive spawning interval has been significantly increased + Performance: + - Neutral death events that aren't cliffs are no longer processed (Veden, Rampant 2.0) + Bugfixes: + - Chunk processing now will create enemy base when found unregistered nest + - Fixed frequent hive switching between factions + - Fixed desynchronization when connecting to a server from a windows client (~1+ hours of play) +--------------------------------------------------------------------------------------------------- +Version: 1.0.15 +Date: 2021.12.11 + Bugfixes: + - Pass-through version for testing client-server bugfix. Distributed by an Zip-file without a mod portal +--------------------------------------------------------------------------------------------------- +Version: 1.0.14 +Date: 2021.12.07 + Compatibility: + - improved compatibility with factorissimo: surfaces excluded from processing, now biters notice factorissimo buildings + Balancing: + - acid factions probability is increased at high levels of evolution + - cluster atack projectile slowed by 1/4, bigger, added red light at night. Now the player can understand what killed him + Bugfixes: + - fixed player processing bug (ignored surface) + - fixed crash when destroying nests with modded multiple-source damage weapons (example: True-Nukes mod) + - now disabling a faction allows you to continue the game in which it was. But, although, there is no more error, it is still not recommended: these nests will be deleted +--------------------------------------------------------------------------------------------------- +Version: 1.0.13 +Date: 2021.12.03 + New: + - New high tier faction(tier 9, 85% evo) : Juggernaut. Slowly, big biters with extreme physical and fire resists. Cloud atack, healing allies and harming enemies. This is a dps-check of your laser defence + Balancing: + - increased tier by 1: fire faction now tier 4, inferno - tier 6 + - suicide (only suicide, not nuclear!) bitters don't have friendly fire anymore (before: always). Don't worry, they're still useless... + - no more resists RND. + - global buff - the percentage of vulnerability is now the same for all levels (50% minor (35-60), 100% major (65 - 90)). Non-percent vulnerability are set to 0 (3-10 and 7-13 before). It will be of practical importance for the Trolls (vulnerability to fire) and Fire, Poison, Physical (weakness to laser) factions. + Misc: + - Optimization: no collision box for spawns + - Optimization+rebalance: fire spitters, large waves caused a drop in performance due to the appearance of many fire zones. Now, significantly (5 times) reduced the attack speed of fire spitters. Increased direct hit damage (x1.5). The duration of the fire zone has been reduced (10 sec now, 30 sec before). The damage during a long attacks decreased, but in short battles they have become more dangerous. + - misc: Factions sorted by tier. Update locales (ru, en) + Bugfixes: + - Fixed fire spitters: now respect "Disallow Friendly Fire Splash Damage" setting + - Fixed poison cloud ignoring the setting of the maximum level of enemies. Now, for the default level = 5, it's damage and healing has halved + - Fixed Retribution counter reset after save/load + - Fixed vengence squads only processing half the expected chunks (Veden, Rampant 2.0) + - Fixed new enemy regional base recycling would only process half the bases (Veden, Rampant 2.0) + - Fixed enemy destroying a player structure only processing half of the chunks it should have been (Veden, Rampant 2.0) + - Fixed squad cleanup would periodically skip a squad when cleaning up dead unit groups (Veden, Rampant 2.0) + - Fixed leaving the builders counter in the negative after a long game ("rampant fixed" bug). Recalculation of active squads when switching to 1.0.13 +--------------------------------------------------------------------------------------------------- +Version: 1.0.12 +Date: 2021.11.27 + Compatibility: + - added health to invisible entities, for 5dimm compatibility +--------------------------------------------------------------------------------------------------- +Version: 1.0.11 +Date: 2021.11.27 + Compatibility: + - Added support for other enemies. To do this, enable the "allow other enemies" parameter. Enemies with their own AI (example: enemy race manager) are not supported - their work may be incorrect. +--------------------------------------------------------------------------------------------------- +Version: 1.0.10 +Date: 2021.11.26 + Misc: + - Localization: en - the names of units and buildings has been shortened (t1 Larva --> Lvl 1) + Bugfixes: + - fixed: An error in setting a plasma resist. if it is not b&a. +--------------------------------------------------------------------------------------------------- +Version: 1.0.9 +Date: 2021.11.25 + Bugfixes: + - fixed settler bugs +--------------------------------------------------------------------------------------------------- +Version: 1.0.8 +Date: 2021.11.23 + Bugfixes: + - release fixes +--------------------------------------------------------------------------------------------------- +Version: 1.0.6 +Date: 2021.11.23 + Misc: + - Release + - Improves the enemies tactics: no pollution required, rebalance, bugfixes +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 + New: + - Localization: ru - the names of units and buildings have been shortened + - Balance: Biters melee damage values are close to vanilla + - Balance: Biters polution costs are close to vanilla + - Balance: inferno now 5 tier (inc from 3) + - Balance: nuclear now 6 tier (inc from 4) + - Fire, spawners factions reworked + - New attibutes: long range immunity, oneshot protection + - no more range RND +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 + New: + - Balance: suicide now 2 tier (dec from 3), add minor fire resistance + - Balance: "Fast-spawning" (example: suicide bitters) now also reduces the polution cost + - Balance: The bitters and spitters speed gradually increases from the level (before: decreased) +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 + New: + - Balance: new enemy levels appear earlier (L2 = 20% <- 25, L3 = 27..) + - Balance: new genome tiers appear earlier (t2 faction 15%<-30, t3=27 <- 38) + - Added smooth attributes scalling per level + - Existing nests updates the level to match the current level of enemies +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 + New: + - Existing nests are updated depending on the current genome of the enemy base +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 + New: + - Add base genome, mutations mechanic +--------------------------------------------------------------------------------------------------- diff --git a/RampantFixed/collision-mask-util-extended/data/collision-mask-util-extended.lua b/RampantFixed/collision-mask-util-extended/data/collision-mask-util-extended.lua new file mode 100644 index 00000000..326f2f0b --- /dev/null +++ b/RampantFixed/collision-mask-util-extended/data/collision-mask-util-extended.lua @@ -0,0 +1,197 @@ +-- source: combat-mechanics-overhaul mod +-- File Licence: You can copy and distribute this file regardless of the mod's general licence. This licence exception does not affect other files of this mod. +local collision_mask_util_extended = require("__core__/lualib/collision-mask-util") + +--[[ + +Named collision masks allow a collision mask to be passed to the control phase. +The arrow object used to stor the mask is accessible under: game.entity_prototypes["collision-mask-flying-layer"] +The layer used is therefore: game.entity_prototypes["collision-mask-flying-layer"].collision_mask .. something + +-------------------------------------------------------------------------------- +-- INSTRUCTIONS +-------------------------------------------------------------------------------- + +-- flying-layer example: +-- data phase ------------------------------------------------------------------ +(data.lua data-updates.lua data-final-fixes.lua etc) get/make a layer: + +-- load the modified util +local collision_mask_util_extended = require("collision-mask-util-extended") + +-- get a collision layer by name, if the name is not assigned to a layer it will assign one +local flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") + +-- control phase --------------------------------------------------------------- +(conrtol.lua) Note: most mods don't need to know collision layers in control code. +local collision_mask_util_extended = require("collision-mask-util-control") + +-- Example usage +local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer") +local entities = surface.find_entities_filtered{collision_mask={flying_layer}} + +-------------------------------------------------------------------------------- +-- Additional named layers +-------------------------------------------------------------------------------- +"flying-layer" +-- local collision_mask_flying_layer = get_make_named_collision_mask("flying-layer") +Flying vehicles, units, and characters. +It is useful to also set the mask "not-colliding-with-itself" to prefent air-air collisions. +The mask can also be added to interior walls that are full height so can't be flown over. + +"projectile-layer" +-- local collision_mask_projectile_layer = get_make_named_collision_mask("projectile-layer") +Projectiles. The the projectile should have the layers or most things it can hit (flying-layer). +Walls and shields can also use this layer to block the projectile. +Note: Projectiles use hit_collision_mask not collision_mask. force_condition = "not-friend" means it won't hit your stuff. +Note: Streams can't collide. + +"vehicle-layer" +-- local collision_mask_vehicle_layer = get_make_named_collision_mask("vehicle-layer") +Car type vehicles and things that collide with them. Allows separation of vehicle-layer and player-layer in certain situations. Add to cars, trees, pipes + +"space-tile" +-- local collision_mask_space_tile = get_make_named_collision_mask("space-tile") +All tiles in space zones (orbit/asteroid fields) including empty space and space platform. + +"empty-space-tile" +-- local collision_mask_empty_space_tile = get_make_named_collision_mask("empty-space-tile") +tiles in space without flooring. +Different from void becuase there is no grravity and stuff can float there. + +"interior-tile" +-- local collision_mask_interior_tile = get_make_named_collision_mask("interior-tile") +Tiles that represent interior spaces and don't have sky, like underground, factory building interiors, etc. +Rocket silos, artillery, telescopes, and space elevators may not be appropriate here. + +"moving-tile" +-- local collision_mask_moving_tile = get_make_named_collision_mask("moving-tile") +Tiles that might change surface, such as spaceship tiles or warp structures. + +"void-tile" +-- local collision_mask_void_tile = get_make_named_collision_mask("void-tile") +Tiles where there is a drop in to the ground (so you can't walk over or build on) but you can fly/jump over. + +]] +local collision_flags = +{ + "consider-tile-transitions", + "not-colliding-with-itself", + "colliding-with-tiles-only" +} +collision_mask_util_extended.collision_flags = table.deepcopy(collision_flags) + +collision_mask_util_extended.vanilla_named_collision_masks = { + ["ground-tile"] = "ground-tile", + ["water-tile"] = "water-tile", + ["resource-layer"] = "resource-layer", + ["doodad-layer"] = "doodad-layer", + ["floor-layer"] = "floor-layer", + ["item-layer"] = "item-layer", + ["ghost-layer"] = "ghost-layer", + ["object-layer"] = "object-layer", + ["player-layer"] = "player-layer", + ["train-layer"] = "train-layer", + ["rail-layer"] = "rail-layer", + ["transport-belt-layer"] = "transport-belt-layer" +} + +-- fix issue reported in F1.1.5 +collision_mask_util_extended.get_default_mask_vanilla = collision_mask_util_extended.get_default_mask +collision_mask_util_extended.get_default_mask = function (type) + if type == "unit" then + return {"player-layer", "train-layer", "not-colliding-with-itself"} + else + return collision_mask_util_extended.get_default_mask_vanilla(type) + end +end + +collision_mask_util_extended.get_default_hit_mask = function (type) + if type == "projectile" then + return {"player-layer", "train-layer", "object-layer", + collision_mask_util_extended.get_make_named_collision_mask("flying-layer"), + collision_mask_util_extended.get_make_named_collision_mask("projectile-layer"), + collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer"), + "not-colliding-with-itself"} + else + return {} + end +end + +_named_collision_masks = _named_collision_masks or table.deepcopy(collision_mask_util_extended.vanilla_named_collision_masks) -- do not modify directly +named_collision_masks = table.deepcopy(_named_collision_masks) -- readonly +collision_mask_util_extended.named_collision_masks = named_collision_masks +-- tracks mod layers only. format: named_collision_masks[mask_name] == "layer-"..x + +function collision_mask_util_extended.get_named_collision_mask(mask_name) + return _named_collision_masks[mask_name] +end + +function collision_mask_util_extended.get_make_named_collision_mask(mask_name) + local layer = collision_mask_util_extended.get_named_collision_mask(mask_name) + if not layer then + layer = collision_mask_util_extended.get_first_unused_layer() + log("Named collision layer ["..mask_name .."] set to layer ["..layer.."]") + data:extend({ + { + type = "arrow", + name = "collision-mask-"..mask_name, + collision_mask = {layer}, + flags = {"placeable-off-grid", "not-on-map"}, + circle_picture = { filename = "__core__/graphics/empty.png", priority = "low", width = 1, height = 1}, + arrow_picture = { filename = "__core__/graphics/empty.png", priority = "low", width = 1, height = 1} + } + }) + end + _named_collision_masks[mask_name] = layer + named_collision_masks = table.deepcopy(_named_collision_masks) -- readonly + collision_mask_util_extended.named_collision_masks = named_collision_masks + return layer +end + +function collision_mask_util_extended.named_collision_mask_integrity_check() + -- This function will check that collision mask marker objects have 1 collision mask + for mask_name, layer_name in pairs(_named_collision_masks) do + if not collision_mask_util_extended.vanilla_named_collision_masks[mask_name] then + local mask_bearer = data.raw.arrow["collision-mask-"..mask_name] + local layer + if mask_bearer then + if mask_bearer.collision_mask then + for i, mask in pairs(mask_bearer.collision_mask) do + if i == 1 then + if mask == "not-colliding-with-itself" + or mask == "consider-tile-transitions" + or mask == "colliding-with-tiles-only" then + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Collision mask must be a collision layer, not a collision option.\n\n") + end + layer = mask + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n") + end + end + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n") + end + else + error("\n\n\nA reserved collision mask object "..mask_name.." has been removed.\n\n") + end + end + end +end + +function collision_mask_util_extended.is_mask_empty(mask) + for _, layer in pairs(mask) do + local is_flag = false + for _, option in pairs(collision_flags) do + if layer == option then + is_flag = true + end + end + if not is_flag then + return false + end + end + return true +end + +return collision_mask_util_extended diff --git a/RampantFixed/config.lua b/RampantFixed/config.lua new file mode 100644 index 00000000..a444f805 --- /dev/null +++ b/RampantFixed/config.lua @@ -0,0 +1,52 @@ +local config = {} + +-- imported + +local mathUtils = require("libs/MathUtils") + +-- imported functions + +local gaussianRandomRange = mathUtils.gaussianRandomRange +local mCeil = math.ceil + + +-- configurations + +function config.getAttackWaveMaxSize(universe) + if universe.allowExternalControl and universe.externalControlValues.attackWaveMaxSize then + return universe.externalControlValues.attackWaveMaxSize + else + return universe.attackWaveMaxSize + end +end + +function config.getAttackWaveSize(universe) + if universe.allowExternalControl and universe.externalControlValues.attackWaveSize then + return universe.externalControlValues.attackWaveSize + else + return universe.attackWaveSize + end +end + +--[[ + attackWaveScaling is used to calculate the attack wave size from the evolutionFactor + default is universe.attackWaveMaxSize * (evolutionFactor ^ 1.666667) + DOES NOT affect vanilla biters waves +--]] +config.attackWaveScaling = function (universe) + return mCeil(gaussianRandomRange(config.getAttackWaveSize(universe), + universe.attackWaveDeviation, + 1, + universe.attackWaveUpperBound)) +end + +config.settlerWaveScaling = function (universe) + return mCeil(gaussianRandomRange(universe.settlerWaveSize, + universe.settlerWaveDeviation, + universe.expansionMinSize, + universe.expansionMaxSize)) +end + +return config + + diff --git a/RampantFixed/control.lua b/RampantFixed/control.lua new file mode 100644 index 00000000..debf896d --- /dev/null +++ b/RampantFixed/control.lua @@ -0,0 +1,1902 @@ +-- Copyright (C) 2022 Dimm2101 + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. + + +-- imports + +local chunkPropertyUtils = require("libs/ChunkPropertyUtils") +local unitUtils = require("libs/UnitUtils") +local baseUtils = require("libs/BaseUtils") +local bitersEnrage = require("libs/BitersEnrage") +local mapUtils = require("libs/MapUtils") +local mathUtils = require("libs/MathUtils") +local unitGroupUtils = require("libs/UnitGroupUtils") +local chunkProcessor = require("libs/ChunkProcessor") +local mapProcessor = require("libs/MapProcessor") +local constants = require("libs/Constants") +local pheromoneUtils = require("libs/PheromoneUtils") +local squadDefense = require("libs/SquadDefense") +local squadAttack = require("libs/SquadAttack") +local squadCompression = require("libs/SquadCompression") +local tests = require("libs/Tests") +local undergroundAttack = require("libs/UndergroundAttack") + +local aiAttackWave = require("libs/AIAttackWave") +local aiPlanning = require("libs/AIPlanning") +local chunkUtils = require("libs/ChunkUtils") +local upgrade = require("Upgrade") +local config = require("config") +local aiPredicates = require("libs/AIPredicates") +local stringUtils = require("libs/StringUtils") + +require("remote_interface") + +-- constants +local BASE_CHANGING_CHANCE = constants.BASE_CHANGING_CHANCE + +local AI_SETTLER_COST = constants.AI_SETTLER_COST + +local RECOVER_NEST_COST = constants.RECOVER_NEST_COST +local RECOVER_WORM_COST = constants.RECOVER_WORM_COST + +local RETREAT_GRAB_RADIUS = constants.RETREAT_GRAB_RADIUS + +local RETREAT_SPAWNER_GRAB_RADIUS = constants.RETREAT_SPAWNER_GRAB_RADIUS + +local PROCESS_QUEUE_SIZE = constants.PROCESS_QUEUE_SIZE + +local DEFINES_WIRE_TYPE_RED = defines.wire_type.red +local DEFINES_WIRE_TYPE_GREEN = defines.wire_type.green + +local ENERGY_THIEF_CONVERSION_TABLE = constants.ENERGY_THIEF_CONVERSION_TABLE +local ENERGY_THIEF_LOOKUP = constants.ENERGY_THIEF_LOOKUP + +local SURFACE_IGNORED = constants.SURFACE_IGNORED +local OVERDAMAGEPROTECTION_THRESHOLD = constants.OVERDAMAGEPROTECTION_THRESHOLD + +local VANILLA_ENTITIES = constants.VANILLA_ENTITIES +-- imported functions + +local isRampantSetting = stringUtils.isRampantSetting + +local canMigrate = aiPredicates.canMigrate + +local convertTypeToDrainCrystal = unitUtils.convertTypeToDrainCrystal + +local squadDispatch = squadAttack.squadDispatch +local processDecompressQueue = squadCompression.processDecompressQueue +local processNonRampantSquads = squadCompression.processNonRampantSquads +local removeOneTickImmunity = squadCompression.removeOneTickImmunity +local onUnitPreKilled = squadCompression.onUnitPreKilled + +local createUndergroudAttack = undergroundAttack.createUndergroudAttack +local enrageBitersInRange = bitersEnrage.enrageBitersInRange +local addDebugButton = tests.addDebugButton +local onDebugElementClick = tests.onDebugElementClick +local debug_onUnitDamaged = tests.debug_onUnitDamaged +local in_debug_list = tests.in_debug_list + +local cleanUpMapTables = mapProcessor.cleanUpMapTables + +local positionToChunkXY = mapUtils.positionToChunkXY + +local processMapAIs = aiPlanning.processMapAIs + + +local processVengence = mapProcessor.processVengence +local processSpawners = mapProcessor.processSpawners + +local processStaticMap = mapProcessor.processStaticMap + +local disperseVictoryScent = pheromoneUtils.disperseVictoryScent + +local getChunkByPosition = mapUtils.getChunkByPosition + +local entityForPassScan = chunkUtils.entityForPassScan + +local processPendingChunks = chunkProcessor.processPendingChunks +local processScanChunks = chunkProcessor.processScanChunks +local processPendingMutations = chunkProcessor.processPendingMutations + +local processMap = mapProcessor.processMap +local processPlayers = mapProcessor.processPlayers +local scanEnemyMap = mapProcessor.scanEnemyMap +local scanPlayerMap = mapProcessor.scanPlayerMap +local scanResourceMap = mapProcessor.scanResourceMap +local suspendClearedMaps = mapProcessor.suspendClearedMaps + +local processNests = mapProcessor.processNests +local processGrowingBases = mapProcessor.processGrowingBases + +local rallyUnits = aiAttackWave.rallyUnits + +local recycleBases = baseUtils.recycleBases + +local deathScent = pheromoneUtils.deathScent +local victoryScent = pheromoneUtils.victoryScent + +local createSquad = unitGroupUtils.createSquad + +local createBase = baseUtils.createBase +local findNearbyBase = baseUtils.findNearbyBase + +local processActiveNests = mapProcessor.processActiveNests + +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator + +local retreatUnits = squadDefense.retreatUnits + +local accountPlayerEntity = chunkUtils.accountPlayerEntity +local unregisterEnemyBaseStructure = chunkUtils.unregisterEnemyBaseStructure +local registerEnemyBaseStructure = chunkUtils.registerEnemyBaseStructure +local makeImmortalEntity = chunkUtils.makeImmortalEntity + +local registerResource = chunkUtils.registerResource +local unregisterResource = chunkUtils.unregisterResource + +local cleanSquads = squadAttack.cleanSquads + +local processCompression = squadCompression.processCompression + +local upgradeEntity = baseUtils.upgradeEntity +local rebuildNativeTables = baseUtils.rebuildNativeTables + +local mRandom = math.random + +local tRemove = table.remove + +local sFind = string.find +local sSub = string.sub +local ShowNewBaseAligments = baseUtils.ShowNewBaseAligments +local thisIsNewEnemyPosition = chunkPropertyUtils.thisIsNewEnemyPosition + +local mMax = math.max +local mMin = math.min + +-- local references to global + +local universe -- manages the chunks that make up the game universe + +-- hook functions + +local function onIonCannonFired(event) + --[[ + event.force, event.surface, event.player_index, event.position, event.radius + --]] + local map = universe.maps[event.surface.index] + if not map then + return + end + universe.retribution = universe.retribution + 1 + map.vengenceLimiter = 0 + map.ionCannonBlasts = map.ionCannonBlasts + 1 + map.points = map.points + 4000 + if universe.aiPointsPrintGainsToChat then + game.print(map.surface.name .. ": Points: +" .. 4000 .. ". [Ion Cannon] Total: " .. string.format("%.2f", map.points)) + end + + local chunk = getChunkByPosition(map, event.position) + if (chunk ~= -1) then + rallyUnits(chunk, map, event.tick) + end +end + + +local function hookEvents() + if settings.startup["ion-cannon-radius"] ~= nil then + script.on_event(remote.call("orbital_ion_cannon", "on_ion_cannon_fired"), + onIonCannonFired) + end +end + + +local function onLoad() + universe = global.universe + hookEvents() +end + +local function onChunkGenerated(event) + -- queue generated chunk for delayed processing, queuing is required because + -- some mods (RSO) mess with chunk as they are generated, which messes up the + -- scoring. + universe.pendingChunks[event] = true +end + +local function onChunkDeleted(event) + local surfaceIndex = event.surface_index + local map = universe.maps[surfaceIndex] + if map then + local positions = event.positions + for i=1,#positions do + local position = positions[i] + local x = position.x * 32 + local y = position.y * 32 + local chunk = mapUtils.getChunkByXY(map, x, y) + if chunk ~= -1 then + mapUtils.removeChunkFromMap(map, chunk) + end + end + end +end + +local function prepMap(surface) + + local surfaceIndex = surface.index + + if not universe.maps then + universe.maps = {} + end + + if SURFACE_IGNORED(surface, universe) then + return + end + + surface.print("Rampant, fixed - Indexing surface:" .. tostring(surface.index) .. ", please wait.") + + local map = universe.maps[surfaceIndex] + if not map then + map = {} + universe.maps[surfaceIndex] = map + end + + map.processedChunks = 0 + map.processQueue = {} + map.processIndex = 1 + map.cleanupIndex = 1 + map.scanPlayerIndex = 1 + map.scanResourceIndex = 1 + map.scanEnemyIndex = 1 + map.processStaticIndex = 1 + map.outgoingScanWave = true + map.outgoingStaticScanWave = true + + map.chunkToPlayerTurrets = {} + map.chunkToBase = {} + map.chunkToNests = {} + map.chunkToTurrets = {} + map.chunkToTraps = {} + map.chunkToUtilities = {} + map.chunkToHives = {} + map.chunkToPlayerBase = {} + map.chunkToPlayerBaseDetection = {} + map.chunkToResource = {} + + map.chunkToSquad = {} + + map.chunkToRetreats = {} + map.chunkToRallys = {} + + map.chunkToPassable = {} + map.chunkToPathRating = {} + map.chunkToDeathGenerator = {} + map.chunkToDrained = {} + map.chunkToVictory = {} + map.chunkToActiveNest = {} + map.chunkToActiveRaidNest = {} + + map.nextChunkSort = 0 + map.nextChunkSortTick = 0 + + map.deployVengenceIterator = nil + map.recycleBaseIterator = nil + map.processActiveSpawnerIterator = nil + map.processActiveRaidSpawnerIterator = nil + map.processMigrationIterator = nil + map.processNestIterator = nil + map.victoryScentIterator = nil + + map.chunkScanCounts = {} + map.chunkFactionCounts = {} + + map.enemiesToSquad = {} + map.enemiesToSquad.len = 0 + map.chunkRemovals = {} + map.processActiveNest = {} + map.tickActiveNest = {} + + map.emptySquadsOnChunk = {} + + map.surface = surface + map.universe = universe + + map.vengenceQueue = {} + map.points = 0 + map.state = constants.AI_STATE_AGGRESSIVE + map.baseId = 0 + map.squads = nil + map.pendingAttack = nil + map.building = nil + + map.evolutionLevel = game.forces.enemy.evolution_factor + map.canAttackTick = 0 + map.drainPylons = {} + map.groupNumberToSquad = {} + map.activeRaidNests = 0 + map.activeNests = 0 + map.destroyPlayerBuildings = 0 + map.lostEnemyUnits = 0 + map.lostEnemyBuilding = 0 + map.rocketLaunched = 0 + map.builtEnemyBuilding = 0 + map.ionCannonBlasts = 0 + map.artilleryBlasts = 0 + + map.vengenceLimiter = 0 + map.squadsGenerated = 0 -- (every 20 active Nests chunks = 1 max squad in agressive mode), aiAttackWave.formSquads + map.temperament = 0.5 + map.temperamentScore = 0 + map.stateTick = 0 + + map.nextPlayerScan = 0 + + map.basesToGrow = {} + + -- queue all current chunks that wont be generated during play + local tick = game.tick + local position = {0,0} + map.nextChunkSort = 0 + for chunk in surface.get_chunks() do + local x = chunk.x + local y = chunk.y + position[1] = x + position[2] = y + if surface.is_chunk_generated(position) then + onChunkGenerated({ surface = surface, + area = { left_top = { x = x * 32, + y = y * 32}}}) + end + end + + processPendingChunks(universe, tick, true) +end + +local function setNewEnemySide() + universe["ALLOW_OTHER_ENEMIES"] = settings.startup["rampantFixed--allowOtherEnemies"].value + universe["NEW_ENEMIES_SIDE"] = settings.startup["rampantFixed--newEnemiesSide"].value +end + +local function onBuild(event) + local entity = event.created_entity or event.entity + if entity.valid then +-- game.print("onBuild.."..entity.name) + local map = universe.maps[entity.surface.index] + if not map then + return + end + if (entity.type == "resource") and (entity.force.name == "neutral") then + registerResource(entity, map) + else + accountPlayerEntity(entity, map, true, false) + if universe.safeBuildings then + if universe.safeEntities[entity.type] or universe.safeEntities[entity.name] then + entity.destructible = false + end + end + end + end +end + +local function onMine(event) + local entity = event.entity + if entity.valid then + local map = universe.maps[entity.surface.index] + if not map then + return + end + if (entity.type == "resource") and (entity.force.name == "neutral") then + if (entity.amount == 0) then + unregisterResource(entity, map) + end + else + accountPlayerEntity(entity, map, false, false) + end + end +end + +----------------- +local landfillVectors = {{0,0}, {1,0}, {0,1}, {-1,0}, {0,-1}} + +local function biters_landfill(entity) + if (not entity) or (not entity.valid) then return end + if entity.prototype.max_health < 300 then return end + local position = entity.position + local surface = entity.surface + for _, vector in pairs(landfillVectors) do + local tile = surface.get_tile({position.x + vector[1], position.y + vector[2]}) + if tile.collides_with("resource-layer") then + surface.set_tiles({{name = "landfill", position = tile.position}},true,true,true,true) + local particle_pos = {tile.position.x + 0.5, tile.position.y + 0.5} + for _ = 1, 50, 1 do + surface.create_particle({ + name = "stone-particle", + position = particle_pos, + frame_speed = 0.1, + vertical_speed = 0.12, + height = 0.01, + movement = {-0.05 + mRandom(0, 100) * 0.001, -0.05 + mRandom(0, 100) * 0.001} + }) + end + end + end +end +----------------- +local function onDeath(event) + local entity = event.entity + if entity.valid then + local surface = entity.surface + local map = universe.maps[surface.index] + if not map then + return + end + if (entity.force.name == "neutral") then + if (entity.name == "cliff") then + entityForPassScan(map, entity) + end + return + end + if entity.prototype.has_flag("not-in-kill-statistics") then + return + end + local entityPosition = entity.position + local chunk = getChunkByPosition(map, entityPosition) + local cause = event.cause + local tick = event.tick + local entityType = entity.type + if (entity.force.name == "enemy") then + + local artilleryBlast = (cause and + ((cause.type == "artillery-wagon") or (cause.type == "artillery-turret"))) + + if (not artilleryBlast) and (entity.force.name == "enemy") then + local incomingRange = 0 + if event.cause and event.cause.valid then + incomingRange = mathUtils.euclideanDistancePoints(entity.position.x, entity.position.y, event.cause.position.x, event.cause.position.y) + if incomingRange >= 90 then + artilleryBlast = true + end + end + + + end + + if artilleryBlast then + map.artilleryBlasts = map.artilleryBlasts + 1 + map.vengenceLimiter = 0 + universe.retribution = universe.retribution + 0.002 + + if cause and cause.valid and (cause.type == "electric-turret") then + if mRandom() < 0.005 then + entity.surface.create_entity({ + name = "targetDummyPlasma-rampant", + position = entityPosition, + force = "enemy", + }) + end + end + end + + if (entityType == "unit") then + if (chunk ~= -1) then + if event.force and (event.force.name ~= "enemy") then + biters_landfill(entity) + -- drop death pheromone where unit died + deathScent(map, chunk) + + -- if (not artilleryBlast) and (-getDeathGenerator(map, chunk) < -universe.retreatThreshold) and cause and cause.valid then + -- retreatUnits(chunk, + -- cause, + -- map, + -- tick, + -- (artilleryBlast and RETREAT_SPAWNER_GRAB_RADIUS) or RETREAT_GRAB_RADIUS) + -- end + + map.lostEnemyUnits = map.lostEnemyUnits + 1 + local chainVengenceCoefficient = settings.global["rampantFixed--chainVengenceCoefficient"].value -- 0.6 default + local vengenceOffset = chainVengenceCoefficient ^ map.vengenceLimiter + if (not surface.peaceful_mode) and (mRandom() < (universe.rallyThreshold * vengenceOffset)) then + rallyUnits(chunk, map, tick) + end + end + if artilleryBlast and universe.undergroundAttack then + undergroundAttack.onUnitKilled_DigIn(map, entity, cause) + else + squadCompression.onUnitKilled(universe, surface, entity, event.force, cause) + end + end + elseif event.force and (event.force.name ~= "enemy") and + ((entityType == "unit-spawner") or (entityType == "turret")) + then + map.vengenceLimiter = 0 + local pointsGain = 0 + if (entityType == "unit-spawner") then + if artilleryBlast then + universe.retribution = universe.retribution + 0.018 -- additional retribution points + end + if universe.aiDifficulty ~= "Hard" then + pointsGain = RECOVER_NEST_COST * 0.2 + else + pointsGain = RECOVER_NEST_COST + end + else + if universe.aiDifficulty ~= "Hard" then + pointsGain = RECOVER_WORM_COST * 0.01 + else + pointsGain = RECOVER_WORM_COST + end + end + + if artilleryBlast then + pointsGain = pointsGain * 1.2 + end + + map.points = map.points + pointsGain + if universe.aiPointsPrintGainsToChat and (pointsGain > 0) then + game.print(map.surface.name .. ": Points: +" .. pointsGain .. ". [Worm or Nest Lost] Total: " .. string.format("%.2f", map.points)) + end + + + unregisterEnemyBaseStructure(map, entity, event.damage_type) + + if (chunk ~= -1) then + rallyUnits(chunk, map, tick) + if cause and cause.valid and (cause.type == "character") then + enrageBitersInRange(map, cause.position, getChunkByPosition(map, cause.position), tick) + end + -- if artilleryBlast and cause and cause.valid then + -- retreatUnits(chunk, + -- cause, + -- map, + -- tick, + -- RETREAT_SPAWNER_GRAB_RADIUS) + -- end + end + else + local entityUnitNumber = entity.unit_number + local pair = map.drainPylons[entityUnitNumber] + if pair then + local target = pair[1] + local pole = pair[2] + if target == entity then + map.drainPylons[entityUnitNumber] = nil + if pole.valid then + map.drainPylons[pole.unit_number] = nil + pole.die() + end + elseif (pole == entity) then + map.drainPylons[entityUnitNumber] = nil + if target.valid then + map.drainPylons[target.unit_number] = nil + target.destroy() + end + end + end + end + + elseif (entity.force.name ~= "enemy") then + local creditNatives = false + if (event.force ~= nil) and (event.force.name == "enemy") then + creditNatives = true + if (chunk ~= -1) then + victoryScent(map, chunk, entityType) + end + + local drained = (entityType == "electric-turret") and map.chunkToDrained[chunk] + if cause or (drained and (drained - tick) > 0) then + if ((cause and ENERGY_THIEF_LOOKUP[cause.name]) or (not cause)) then + local conversion = ENERGY_THIEF_CONVERSION_TABLE[entityType] + if conversion then + local newEntity = surface.create_entity({ + position=entity.position, + name=convertTypeToDrainCrystal(entity.force.evolution_factor, conversion), + direction=entity.direction + }) + if (conversion == "pole") then + local targetEntity = surface.create_entity({ + position=entity.position, + name="pylon-target-rampant", + direction=entity.direction + }) + targetEntity.backer_name = "" + local pair = {targetEntity, newEntity} + map.drainPylons[targetEntity.unit_number] = pair + map.drainPylons[newEntity.unit_number] = pair + local wires = entity.neighbours + if wires then + for _,v in pairs(wires.copper) do + if (v.valid) then + newEntity.connect_neighbour(v); + end + end + -- for _,v in pairs(wires.red) do + -- if (v.valid) then + -- newEntity.connect_neighbour({ + -- wire = DEFINES_WIRE_TYPE_RED, + -- target_entity = v + -- }); + -- end + -- end + -- for _,v in pairs(wires.green) do + -- if (v.valid) then + -- newEntity.connect_neighbour({ + -- wire = DEFINES_WIRE_TYPE_GREEN, + -- target_entity = v + -- }); + -- end + -- end + end + elseif newEntity.backer_name then + newEntity.backer_name = "" + end + end + end + end + elseif (entity.type == "resource") and (entity.force.name == "neutral") then + if (entity.amount == 0) then + unregisterResource(entity, map) + end + end + if creditNatives and universe.safeBuildings and + (universe.safeEntities[entityType] or universe.safeEntities[entity.name]) + then + makeImmortalEntity(surface, entity) + else + accountPlayerEntity(entity, map, false, creditNatives) + end + end + end +end + +local function onEnemyBaseBuild(event) + local entity = event.entity + if entity.valid then + local map = universe.maps[entity.surface.index] + if not map then + return + end + + if map.suspended then + map.suspended = false + map.suspendCheckTick = event.tick + end + + local chunk = getChunkByPosition(map, entity.position) + if (chunk ~= -1) then + local base + if universe.NEW_ENEMIES then + local thisIsRampantEnemy = false + base = findNearbyBase(map, chunk, MAXIMUM_BASE_RADIUS, BASE_CHANGING_CHANCE) + if not base then + thisIsRampantEnemy = thisIsNewEnemyPosition(universe, chunk.x, chunk.y) + base = createBase(map, + chunk, + event.tick, + thisIsRampantEnemy) + end + if base and base.thisIsRampantEnemy then + if VANILLA_ENTITIES[entity.name] or ((not universe.ALLOW_OTHER_ENEMIES) and (mRandom()<0.8)) then -- if change this, look also chunkUtils.initialScan + entity = upgradeEntity(entity, + base.alignment, + map ,nil, true) + end + end + end + if entity and entity.valid then + event.entity = registerEnemyBaseStructure(map, entity, base) + end + else + local x,y = positionToChunkXY(entity.position) + onChunkGenerated({ + surface = entity.surface, + area = { + left_top = { + x = x, + y = y + } + } + }) + end + end +end + +local function onSurfaceTileChange(event) + local surfaceIndex = event.surface_index or (event.robot and event.robot.surface and event.robot.surface.index) + local map = universe.maps[surfaceIndex] + if not map then + return + end + local surface = map.surface + local chunks = {} + local tiles = event.tiles + if event.tile then + if ((event.tile.name == "landfill") or sFind(event.tile.name, "water")) then + for i=1,#tiles do + local position = tiles[i].position + local chunk = getChunkByPosition(map, position) + + if (chunk ~= -1) then + local chunkData = {chunk.x, chunk.y, map.surface.index} + local chunkIndex = "x"..chunkData[1].."y"..chunkData[2].."m"..chunkData[3] + + universe.chunkToPassScan[chunkIndex] = chunkData + else + local x,y = positionToChunkXY(position) + local addMe = true + for ci=1,#chunks do + local c = chunks[ci] + if (c.x == x) and (c.y == y) then + addMe = false + break + end + end + if addMe then + local chunkXY = {x=x,y=y} + chunks[#chunks+1] = chunkXY + onChunkGenerated({area = { left_top = chunkXY }, + surface = surface}) + end + end + end + end + else + for i=1,#tiles do + local tile = tiles[i] + if (tile.name == "landfill") or sFind(tile.name, "water") then + local position = tile.position + local chunk = getChunkByPosition(map, position) + + if (chunk ~= -1) then + local chunkData = {chunk.x, chunk.y, map.surface.index} + local chunkIndex = "x"..chunkData[1].."y"..chunkData[2].."m"..chunkData[3] + + universe.chunkToPassScan[chunkIndex] = chunkData + else + local x,y = positionToChunkXY(position) + local addMe = true + for ci=1,#chunks do + local c = chunks[ci] + if (c.x == x) and (c.y == y) then + addMe = false + break + end + end + if addMe then + local chunkXY = {x=x,y=y} + chunks[#chunks+1] = chunkXY + onChunkGenerated({area = { left_top = chunkXY }, + surface = surface}) + end + end + end + end + end +end + +local function onResourceDepleted(event) + local entity = event.entity + if entity.valid then + local map = universe.maps[entity.surface.index] + if not map then + return + end + unregisterResource(entity, map) + end +end + +local function onRobotCliff(event) + local entity = event.robot + if entity.valid then + local map = universe.maps[entity.surface.index] + if not map then + return + end + if (event.item.name == "cliff-explosives") then + entityForPassScan(map, event.cliff) + end + end +end + +local function onUsedCapsule(event) + local surface = game.players[event.player_index].surface + local map = universe.maps[surface.index] + if not map then + return + end + if (event.item.name == "cliff-explosives") then + local position2Top = universe.position2Top + local position2Bottom = universe.position2Bottom + position2Top.x = event.position.x-0.75 + position2Top.y = event.position.y-0.75 + position2Bottom.x = event.position.x+0.75 + position2Bottom.y = event.position.y+0.75 + local cliffs = surface.find_entities_filtered(universe.cliffQuery) + for i=1,#cliffs do + entityForPassScan(map, cliffs[i]) + end + end +end + +local function onRocketLaunch(event) + local entity = event.rocket_silo or event.rocket + if entity.valid then + local map = universe.maps[entity.surface.index] + local points + if game.active_mods["space-exploration"] then + universe.retribution = universe.retribution + 0.1 + points = 500 + else + universe.retribution = universe.retribution + 10 + points = 5000 + end + if not map then + return + end + map.vengenceLimiter = 0 + map.rocketLaunched = map.rocketLaunched + 1 + map.points = map.points + points + if universe.aiPointsPrintGainsToChat then + game.print(map.surface.name .. ": Points: +" .. points .. ". [Rocket Launch] Total: " .. string.format("%.2f", map.points)) + end + end +end + +local function onTriggerEntityCreated(event) + local entity = event.entity + + if entity.valid and (entity.name == "drain-trigger-rampant") then + local map = universe.maps[entity.surface.index] + if not map then + return + end + local chunk = getChunkByPosition(map, entity.position) + if (chunk ~= -1) then + map.chunkToDrained[chunk] = event.tick + 60 + end + entity.destroy() + end +end + +local function onGroupFinishedGathering(event) + local group = event.group + if not group.valid or (group.force.name ~= "enemy") then + return + end + local map = universe.maps[group.surface.index] + if not map then + --group.destroy() + return + end + local squad = universe.groupNumberToSquad[group.group_number] + if (not group.is_script_driven) or (squad and not squad.vengence) then + if (not group.is_script_driven) and (not settings.global["rampantFixed--allowDaytimeNonRampantActions"].value) then + if (map.state == constants.AI_STATE_PEACEFUL) or (universe.aiNocturnalMode and (group.surface.darkness <= 0.65)) then + group.destroy() + return + end + end + end + + if squad then + if not squad.undergoundAttack then + processCompression(map, squad, getChunkByPosition(map, group.position), true) + else + createUndergroudAttack(map, squad) + end + elseif (#group.members > 70) and group.position and not group.is_script_driven then + local nonRampantSquad = createSquad(group.position, map, group, false) + nonRampantSquad.nonRampantSquad = true + processCompression(map, nonRampantSquad, getChunkByPosition(map, group.position), false) + if nonRampantSquad.compressed then + universe.nonRampantCompressedSquads[group.group_number] = nonRampantSquad + --game.print("non-rampant squad#"..group.group_number..", "..#group.members.." units [gps=" .. group.position.x .. "," .. group.position.y .."]") -- debug + end + end + + -- group can be destroyed after createUndergroudAttack() + if squad and group.valid and group.is_script_driven then + squadDispatch(map, squad) + end +end + +local function onForceCreated(event) + upgrade.rebuildActivePlayerForces(universe) + -- if event.force then + -- if game.forces["enemy"].is_friend(event.force) then + -- return + -- end + -- if game.forces["enemy"].get_cease_fire(event.force) then + -- return + -- end + -- end + -- universe.activePlayerForces[#universe.activePlayerForces+1] = event.force.name +end + +local function onForceDiplomacyChanged(event) + upgrade.rebuildActivePlayerForces(universe) + -- local otherForce = event.force + -- if event.force.name == "enemy" then + -- otherForce = event.other_force + -- end + -- local thisIsEnemyFriend = game.forces["enemy"].is_friend(otherForce) + -- thisIsEnemyFriend = thisIsEnemyFriend or game.forces["enemy"].get_cease_fire(otherForce) + -- if thisIsEnemyFriend then + -- for i=#universe.activePlayerForces,1,-1 do + -- if (universe.activePlayerForces[i] == otherForce.name) then + -- tRemove(universe.activePlayerForces, i) + -- break + -- end + -- end + -- else + -- local forceFound = false + -- for i=#universe.activePlayerForces,1,-1 do + -- if (universe.activePlayerForces[i] == otherForce.name) then + -- forceFound = true + -- break + -- end + -- end + -- if not forceFound then + -- universe.activePlayerForces[#universe.activePlayerForces+1] = otherForce.name + -- end + -- end +end + +local function onForceMerged(event) + upgrade.rebuildActivePlayerForces(universe) + -- for i=#universe.activePlayerForces,1,-1 do + -- if (universe.activePlayerForces[i] == event.source_name) then + -- tRemove(universe.activePlayerForces, i) + -- break + -- end + -- end +end + +local function onSurfaceCreated(event) + local surface = game.surfaces[event.surface_index] + if not SURFACE_IGNORED(surface, universe) then + prepMap(surface) + end +end + +local function onSurfaceDeleted(event) + local surfaceIndex = event.surface_index + if (universe.mapIterator == surfaceIndex) then + universe.mapIterator, universe.activeMap = next(universe.maps, universe.mapIterator) + end + if (universe.suspendMapsIterator == surfaceIndex) then + universe.suspendMapsIterator = next(universe.maps, universe.suspendMapsIterator) + end + + universe.maps[surfaceIndex] = nil + --game.print("onSurfaceDeleted: surfaceIndex =".. tostring(surfaceIndex)) -- debug + -- bases and squads will be deleted by baseUtils.recycleBases and squadAttack.cleanSquads +end + +local function onBuilderArrived(event) + local builder = event.group + if not (builder and builder.valid) then + builder = event.unit + if not (builder and builder.valid and builder.force.name == "enemy") then + return + end + elseif (builder.force.name ~= "enemy") then + return + end + local targetPosition = universe.position + targetPosition.x = builder.position.x + targetPosition.y = builder.position.y + + if universe.aiPointsPrintSpendingToChat then + game.print("Settled: [gps=" .. targetPosition.x .. "," .. targetPosition.y .."]") + end + builder.surface.create_entity(universe.createBuildCloudQuery) +end + +local targetDummyArray= {} +targetDummyArray["targetDummyPlasma-rampant"] = true +targetDummyArray["targetDummyFire-rampant"] = true +targetDummyArray["targetDummyPhysical-rampant"] = true +targetDummyArray["targetDummyLaser-rampant"] = true +local protectedAreaUnitsQuery = { + position = nil, + radius = 6, + force = "enemy", + type={"unit"} + } + +local function onSectorScanned(event) + local entity = event.radar + if entity.valid then + if targetDummyArray[entity.name] then + -- canceled since 1.5.0 + -- if entity.name == "targetDummyPlasma-rampant" then + -- protectedAreaUnitsQuery.position = entity.position + -- local protectedEntities = entity.surface.find_entities_filtered(protectedAreaUnitsQuery) + -- for i = 1, #protectedEntities do + -- local protectedEntity = protectedEntities[i] + -- protectedEntity.destructible = false + -- universe.protectedUnits[protectedEntity.unit_number] = {entity = protectedEntity, tick = game.tick + 120} + -- --game.print("tick:"..game.tick.. " add protection to "..universe.protectedUnits[protectedEntity.unit_number].tick) + -- end + -- end + entity.damage(30, "neutral") + elseif entity.name == "test-rampant" then + onEntitySpawned(event) + entity.damage(1, "neutral") + end + end + return +end + +local function processProtectedUnits() + -- if not universe then + -- return + -- end + for unitNumber, protectionData in pairs(universe.protectedUnits) do + if not protectionData.entity.valid then + universe.protectedUnits[unitNumber] = nil + elseif protectionData.tick <= game.tick then + protectionData.entity.destructible = true + universe.protectedUnits[unitNumber] = nil + --game.print("tick:"..game.tick.." remove protection") + end + end +end + + +-- this variables reset after reloading (player can change/disable protecion at startup settings) +-- as practice has shown, local variables do not lead to desynchronization, unless it leads to different results +local unitsProtection = {} +local OP_EfficiencyPercent = settings.startup["rampantFixed--oneshotProtection_efficiency"].value +local LR_EfficiencyPercent = settings.startup["rampantFixed--longRangeImmunity_efficiency"].value +local OP_efficienty = OP_EfficiencyPercent * 0.01 +local LR_Efficiency = LR_EfficiencyPercent * 0.01 +local LR_DamageKf = 1 - LR_Efficiency +local allowOneshotProtection = settings.startup["rampantFixed--allowOneshotProtection"] +local allowLongRangeImmunity = settings.startup["rampantFixed--allowLongRangeImmunity"] + +local LR_exceptions = {} +LR_exceptions["fluid-turret"] = true +LR_exceptions["artillery-turret"] = true +LR_exceptions["artillery-wagon"] = true +local LR_exceptions_DamageKf = 0.5 + + +local function fillAndReturnUnitProtections(entity) + if unitsProtection[entity.name] then + return unitsProtection[entity.name] + else + local longRangeImmunity + local overdamageProtection + if entity.prototype.resistances then + for resistance, values in pairs(entity.prototype.resistances) do + -- some checks, becouse mods can assign there resistances to their own units. And make them almost immortal + if resistance == "rampant-longRangeImmunity" then + if values.percent and (math.floor(100*values.percent+0.1) == LR_EfficiencyPercent) and (values.decrease > 10) then -- -- bug: sometimes percent can differ (ex: 0.949000049) + longRangeImmunity = values.decrease + end + elseif resistance == "rampant-overdamageProtection" then + if values.percent and (math.floor(100*values.percent+0.1) == OP_EfficiencyPercent) and (values.decrease > 5) then + overdamageProtection = values.decrease + end + end + end + end + unitsProtection[entity.name] = {longRangeImmunity = longRangeImmunity, overdamageProtection = overdamageProtection} + -- game.print("LRI = "..tostring(longRangeImmunity).." , OP = "..tostring(overdamageProtection)) -- debug + return unitsProtection[entity.name] + end +end + +local function onEntityDamaged(event) + if not event.entity then + return + end + if event.entity.valid and event.entity.unit_number then + local entity = event.entity + + local unitProtection = fillAndReturnUnitProtections(event.entity) + if (event.final_damage_amount > 0) and event.cause and (event.cause ~= event.entity) then + if (event.cause.type == "character") and debug_onUnitDamaged(event, universe.debugSettings) then + return + end + ----------------- + if allowLongRangeImmunity and unitProtection.longRangeImmunity then + local incomingRange = 0 + if event.cause and event.cause.valid then + if LR_exceptions[event.cause.type] then + incomingRange = -1 + else + incomingRange = mathUtils.euclideanDistancePoints(entity.position.x, entity.position.y, event.cause.position.x, event.cause.position.y) + end + if incomingRange == - 1 then + local startHP = universe.unitProtectionData.unitCurrentHP[entity.unit_number] or (entity.prototype.max_health) + event.final_damage_amount = event.final_damage_amount * LR_exceptions_DamageKf + entity.health = startHP - event.final_damage_amount + event.final_health = entity.health + elseif incomingRange>unitProtection.longRangeImmunity then + local startHP = universe.unitProtectionData.unitCurrentHP[entity.unit_number] or (entity.prototype.max_health) + if LR_DamageKf > 0 then + event.final_damage_amount = event.final_damage_amount * LR_DamageKf + else + event.final_damage_amount = 0 + end + entity.health = startHP - event.final_damage_amount + event.final_health = entity.health + -- game.print("LRI:"..startHP.."-("..event.original_damage_amount.."->"..event.final_damage_amount..")="..entity.health) -- DEBUG + end + end + end + ----------------- + if allowOneshotProtection and unitProtection.overdamageProtection and (event.original_damage_amount > OVERDAMAGEPROTECTION_THRESHOLD) and (event.original_damage_amount >= event.final_damage_amount) then + local maxDamage = unitProtection.overdamageProtection + local startHP = universe.unitProtectionData.unitCurrentHP[entity.unit_number] or (entity.prototype.max_health) + if maxDamage"..event.final_damage_amount..")="..entity.health..", source = ".. tostring(event.cause.name)) -- DEBUG + end + end + + -- canceled since 1.5.0 + -- if entity.health<=0 then + -- local compressedUnit = universe.compressedUnits[entity.unit_number] + -- if compressedUnit and (compressedUnit.count > 1) then + -- onUnitPreKilled(universe, entity.surface, entity, event.force, event.cause) + -- end + -- end + + if unitProtection.longRangeImmunity or unitProtection.overdamageProtection then + if entity.health<=0 then + universe.unitProtectionData.unitCurrentHP[entity.unit_number] = nil + else + universe.unitProtectionData.unitCurrentHP[entity.unit_number] = entity.health + end + end + end +end + +local function showNewgameMessages() + -- if universe.NEW_ENEMIES then + -- game.print({"description.rampantFixed--EnemySettings1_1_10"}) + -- end + -- if game.active_mods["space-exploration"] and game.active_mods["combat-mechanics-overhaul"] and game.active_mods["Krastorio2"] then + -- if not settings.startup["rampantFixed--useBlockableSteamAttacks"].value then + -- game.print({"description.rampantFixed--K2_SE_CMO_incompatibilityWarning"}) + -- end + -- end +end + + +-- hooks + +script.on_event(defines.events.on_tick, + function () + local gameRef = game + local tick = gameRef.tick + local pick = tick % 8 + local pick60 = tick % 60 + --------- + if tick == 1 then + showNewgameMessages() + end + --------- + removeOneTickImmunity(universe) + processProtectedUnits() + + local map = universe.activeMap + local mapCounter = 0 -- it looks very much like some mods are able to remove the main world. If this happens and there are no worlds left with biters, it will turn out to be an endless cycle. + if (not map) or map.suspended or (universe.processedChunks > #map.processQueue) then + repeat + universe.mapIterator, map = next(universe.maps, universe.mapIterator) + if not map then + universe.mapIterator, map = next(universe.maps, nil) + break + end + mapCounter = mapCounter + 1 + until map and ((not map.suspended) or (map.surface.name == "nauvis") or (mapCounter > 1000)) -- nauvis cant be suspended, but just in case... + + universe.processedChunks = 0 + universe.activeMap = map + end + if not map then + if universe.mapIterator then + universe.maps[universe.mapIterator] = nil + universe.mapIterator = nil + end + processPendingChunks(universe, tick) + processScanChunks(universe) + universe.processedChunks = universe.processedChunks + PROCESS_QUEUE_SIZE + return + end + + + if (pick == 0) then + processPendingChunks(universe, tick) + processScanChunks(universe) + universe.processedChunks = universe.processedChunks + PROCESS_QUEUE_SIZE + if universe.NEW_ENEMIES then + recycleBases(universe, tick) + end + cleanUpMapTables(map, tick) + suspendClearedMaps(universe, tick) + elseif (pick == 1) then + processPlayers(gameRef.connected_players, universe, tick) + elseif (pick == 2) then + processMap(map, tick) + elseif (pick == 3) then + processStaticMap(map) + disperseVictoryScent(map) + processVengence(map) + elseif (pick == 4) then + scanResourceMap(map, tick) + elseif (pick == 5) then + scanEnemyMap(map, tick) + processSpawners(map, tick) + elseif (pick == 6) then + scanPlayerMap(map, tick) + processNests(map, tick) + elseif (pick == 7) then + processGrowingBases(universe, tick) + end + + if pick60 == 0 then + processMapAIs(universe, gameRef.forces.enemy.evolution_factor, tick) + end + + if pick~=5 then + processPendingMutations(universe) + end + processActiveNests(universe, tick) + processDecompressQueue(universe) + cleanSquads(universe) +end +) + +script.on_nth_tick(30000, + function() + if universe then + local evo = game.forces.enemy.evolution_factor + if settings.startup["rampantFixed--JuggernautEnemy"].value and (not universe.JuggernautAlertShown) and (evo > 0.75) and (evo < 0.82) then + universe.JuggernautAlertShown = true + game.print({"description.rampantFixed--JuggernautAlert"}) + end + baseUtils.setRandomBaseToMutate(universe) + end + end +) + +--- copressed and underground squads +script.on_nth_tick(60, + function() + if universe then + if universe.nonRampantCompressedSquads then + processNonRampantSquads(universe) + end + end + end +) + +script.on_nth_tick(30, + function() + if universe then + undergroundAttack.processUndergroundSquads(universe) + end + end +) + +script.on_nth_tick(3600, + function() + if universe then + undergroundAttack.updateUndergroundAttackProbability(universe) + end + end +) + +script.on_nth_tick(36000, + function() + squadCompression.checkCompressedUnitsList(universe) + end +) +--- +---- GUI + ---------- +local function surfaceStatusCaption(surfaceIgnored) + if surfaceIgnored then + return {"description.rampantFixed--surfaceIgnored_True"} + else + return {"description.rampantFixed--surfaceIgnored_False"} + end +end + +function create_surfaceIteraction_frame(player) + local gui = player.gui.screen + + for i, children in pairs(gui.children) do + if children.name == "rampantFixed--surfaceIteraction_frame" then + children.destroy() + break + end + end + + local root = gui.add{name = "rampantFixed--surfaceIteraction_frame", type = "frame", direction = "vertical"} -- , style = "non_draggable_frame", caption={"description.rampantFixed--surfaceIteraction_frame"} + root.force_auto_center() + + player.opened = root + if not (root and root.valid) then return end -- setting player.opened can cause other scripts to delete UIs + + -- Titlebar + local titlebar = root.add { + type = "flow", + name = "rampantFixed_closeSurfaceTitle", + direction = "horizontal" + } + titlebar.drag_target = root + titlebar.add { -- Title + type = "label", + caption = {"description.rampantFixed--surfaceIteraction_frame"}, + ignored_by_interaction = true, + style = "frame_title" + } + titlebar.add { + type = "empty-widget", + ignored_by_interaction = true, + } + + titlebar.add { -- Close button + type = "sprite-button", + name="rampantFixed_closeSurfaceStatus", + sprite = "utility/close_white", + hovered_sprite = "utility/close_black", + clicked_sprite = "utility/close_black", + style = "close_button" + } + --------------- + local title_table = root.add{type="table", name="rampantFixed--surfaceIteraction_table", column_count=2, draw_horizontal_lines=false} + title_table.style.horizontally_stretchable = true + title_table.style.column_alignments[1] = "left" + title_table.style.column_alignments[2] = "right" + title_table.drag_target = root + + title_table.add{type="label", name="rampantFixed_surfaceName_Title", caption={"description.rampantFixed--surfaceName_Title"}} + title_table.add{type="label", name="rampantFixed_surfaceIgnored_Title", caption={"description.rampantFixed--surfaceIgnored_Title"}} + + for _,surface in pairs(game.surfaces) do + local surfaceName = surface.name + if not constants.isExcludedSurface(surfaceName) then + title_table.add{type="label", name="rampantFixed_surfaceName_"..tostring(surface.index), caption=surfaceName} + title_table.add{type="button", name="rampantFixed_surfaceStatus_"..tostring(surface.index), caption=surfaceStatusCaption(SURFACE_IGNORED(surface, universe)), style = "rampantFixed_surfaceStatus_button"} + end + end +end + +function setSurfaceStatus(surface, newStatus) + if not surface then + -- game.print("setSurfaceStatus: no surface") -- debug + return true + end + + if newStatus then + universe.surfaceIgnoringSet[surface.index] = 1 + --game.print("setSurfaceStatus: ignored") -- debug + if universe.maps[surface.index] then + --game.print("setSurfaceStatus: call onSurfaceDeleted") -- debug + onSurfaceDeleted({surface_index = surface.index}) + end + else + --game.print("setSurfaceStatus: prepmap") -- debug + universe.surfaceIgnoringSet[surface.index] = 0 + prepMap(surface) + end + return newStatus +end + +function surfaceStatusClick(guiElement) + local surfaceIndex = tonumber(string.sub(guiElement.name, 28)) + local surface = game.surfaces[surfaceIndex] + if not surface then + game.print("Surface #"..surfaceIndex.." is not found") + return + end + + local newStatus = setSurfaceStatus(surface, not SURFACE_IGNORED(surface, universe)) + + guiElement.caption = surfaceStatusCaption(newStatus) + if newStatus then + game.print("Surface <"..surface.name.."> now is ignored") + else + game.print("Surface <"..surface.name.."> now processed") + end +end + +local function replaceNewEnemiesNests() + local totalReplaced = 0 + for _,surface in pairs(game.surfaces) do + local buildings = surface.find_entities_filtered({force = "enemy", type={"turret", "unit-spawner"}}) + local buildingsTotal = #buildings + for i=1,buildingsTotal do + local building = buildings[i] + local entityName + local entityPosition = {x = 0, y = 0} + + if building.type == "turret" then + local wormTier = 0 + wormTier = universe.buildingTierLookup[building.name] + if wormTier then + if wormTier < 3 then + entityName = "small-worm-turret" + elseif wormTier < 6 then + entityName = "medium-worm-turret" + elseif wormTier < 9 then + entityName = "big-worm-turret" + else + entityName = "behemoth-worm-turret" + end + end + elseif building.type == "unit-spawner" then + local faction = universe.enemyAlignmentLookup[building.name] + local hiveType = universe.buildingHiveTypeLookup[building.name] + if faction then + if hiveType == "spitter-spawner" then + entityName = "spitter-spawner" + else + entityName = "biter-spawner" + end + end + end + if entityName then + entityPosition.x = building.position.x + entityPosition.y = building.position.y + building.destroy() + surface.create_entity({name = entityName, position = entityPosition, force = "enemy"}) + totalReplaced = totalReplaced + 1 + end + end + + if universe.bases then + for i, base in pairs(universe.bases) do + base.thisIsRampantEnemy = false + end + end + end + game.print({"description.rampantFixed--msg_replaceNewEnemiesNests", totalReplaced}) + universe.NEW_ENEMIES = false +end + +local function create_disableAdminMenu(player) + local gui = player.gui.screen + + for i, children in pairs(gui.children) do + if children.name == "rampantFixed_AdminMenu_frame" then + children.destroy() + return + --break + end + end + + local root = gui.add{name = "rampantFixed_AdminMenu_frame", type = "frame", direction = "vertical"} -- , style = "non_draggable_frame", caption={"description.rampantFixed--surfaceIteraction_frame"} + root.force_auto_center() + player.opened = root + if not (root and root.valid) then return end -- setting player.opened can cause other scripts to delete UIs + + -- Titlebar + local titlebar = root.add { + type = "flow", + name = "rampantFixed_AdminMenuTitle", + alignment = "right", + direction = "horizontal" + } + titlebar.drag_target = root + titlebar.add { -- Title + type = "label", + caption = {"description.rampantFixed--AdminMenu"}, + ignored_by_interaction = true, + style = "rampantFixed_menu_label" --"frame_title" + } + titlebar.add { + type = "empty-widget", + ignored_by_interaction = true, + } + + titlebar.add { -- Close button + type = "sprite-button", + name="rampantFixed_closeAdminMenu", + sprite = "utility/close_white", + hovered_sprite = "utility/close_black", + clicked_sprite = "utility/close_black", + style = "close_button" + } + --------------- + -- local menu_table = root.add{type="table", name="rampantFixed--adminMenu_table", column_count=2, draw_horizontal_lines=false} + -- menu_table.style.horizontally_stretchable = true + -- menu_table.style.column_alignments[1] = "left" + -- menu_table.style.column_alignments[2] = "right" + -- menu_table.drag_target = root + -- menu_table.add{type="label", caption="1."} + root.add{type = "button", name = "rampantFixed_showDisableNewEnemiesDialog", caption = {"description.rampantFixed--showDisableNewEnemies"}, style = "rampantFixed_menu_button"} + -- menu_table.add{type="label", caption="2."} + root.add{type = "button", name = "rampantFixed_showSurfaceIteractionFrame", caption = {"description.rampantFixed--surfaceIteraction_frame"}, style = "rampantFixed_menu_button"} + + addDebugButton(player, root) +end + +local function create_disableNewEnemies_frame(player) + local gui = player.gui.screen + + for i, children in pairs(gui.children) do + if children.name == "rampantFixed--disableNewEnemies_frame" then + children.destroy() + break + end + end + + local root = gui.add{name = "rampantFixed--disableNewEnemies_frame", type = "frame", style = "non_draggable_frame", direction = "vertical", caption={"description.rampantFixed--msg-ask-disableNewEnemies"}} + root.force_auto_center() + player.opened = root + if not (root and root.valid) then return end -- setting player.opened can cause other scripts to delete UIs + + root.add{type = "label", name = "rampantFixed--disableNewEnemies_text" , caption = {"description.rampantFixed--disableNewEnemies_text"}} + frame = root.add{type="table", name="rampantFixed--disableNewEnemies_table", column_count=2, draw_horizontal_lines=false} + frame.add{type = "button", name = "rampantFixed--button_disableNewEnemies_disable", caption = {"description.rampantFixed--button_disableNewEnemies_disable"}} + frame.add{type = "button", name = "rampantFixed--button_disableNewEnemies_cancel", caption = {"description.rampantFixed--button_disableNewEnemies_cancel"}} +end + + +local function on_gui_click(event) + local guiElement = event.element + if guiElement.name == "rampantFixed_adminMenuButton" then + create_disableAdminMenu(game.players[event.player_index]) + elseif guiElement.name == "rampantFixed_showDisableNewEnemiesDialog" then + create_disableNewEnemies_frame(game.players[event.player_index]) + elseif guiElement.name == "rampantFixed_showSurfaceIteractionFrame" then + create_surfaceIteraction_frame(game.players[event.player_index]) + elseif guiElement.name == "rampantFixed_closeAdminMenu" then + guiElement.parent.parent.destroy() + elseif guiElement.name == "rampantFixed--button_disableNewEnemies_disable" then + replaceNewEnemiesNests() + guiElement.parent.parent.destroy() + elseif guiElement.name == "rampantFixed--button_disableNewEnemies_cancel" then + guiElement.parent.parent.destroy() + elseif (guiElement.name == "rampantFixed_closeSurfaceStatus") then + guiElement.parent.parent.destroy() + elseif string.sub(guiElement.name, 1 , 27 ) == "rampantFixed_surfaceStatus_" then + surfaceStatusClick(guiElement) + elseif string.sub(guiElement.name, 1 , 18 ) == "rampantFixed_Debug" then + onDebugElementClick(event, universe) + end + +end + +local function create_disableAdminMenuButton(player, showButton) + local gui = player.gui.top + + for i, children in pairs(gui.children) do + if children.name == "rampantFixed_adminMenuButton" then + children.destroy() + break + end + end + + if showButton then + gui.add{type = "sprite-button", name = "rampantFixed_adminMenuButton", caption = "RFx", sprite = "entity/big-biter"} + end + +end +--- GUI - + +local function onModSettingsChange(event) + + if not isRampantSetting(event.setting) then + return + end + + -- game.print("onModSettingsChange() processing for Rampant") + + upgrade.compareTable(universe, + "safeBuildings", + settings.global["rampantFixed--safeBuildings"].value) + upgrade.compareTable(universe.safeEntities, + "curved-rail", + settings.global["rampantFixed--safeBuildings-curvedRail"].value) + upgrade.compareTable(universe.safeEntities, + "straight-rail", + settings.global["rampantFixed--safeBuildings-straightRail"].value) + upgrade.compareTable(universe.safeEntities, + "rail-signal", + settings.global["rampantFixed--safeBuildings-railSignals"].value) + upgrade.compareTable(universe.safeEntities, + "rail-chain-signal", + settings.global["rampantFixed--safeBuildings-railChainSignals"].value) + upgrade.compareTable(universe.safeEntities, + "train-stop", + settings.global["rampantFixed--safeBuildings-trainStops"].value) + upgrade.compareTable(universe.safeEntities, + "lamp", + settings.global["rampantFixed--safeBuildings-lamps"].value) + + local changed, newValue = upgrade.compareTable(universe.safeEntities, + "big-electric-pole", + settings.global["rampantFixed--safeBuildings-bigElectricPole"].value) + if changed then + universe.safeEntities["big-electric-pole"] = newValue + universe.safeEntities["big-electric-pole-2"] = newValue + universe.safeEntities["big-electric-pole-3"] = newValue + universe.safeEntities["big-electric-pole-4"] = newValue + universe.safeEntities["lighted-big-electric-pole-4"] = newValue + universe.safeEntities["lighted-big-electric-pole-3"] = newValue + universe.safeEntities["lighted-big-electric-pole-2"] = newValue + universe.safeEntities["lighted-big-electric-pole"] = newValue + end + + upgrade.compareTable(universe, + "aiDifficulty", + settings.global["rampantFixed--aiDifficulty"].value) + upgrade.compareTable(universe, + "raidAIToggle", + settings.global["rampantFixed--raidAIToggle"].value) + upgrade.compareTable(universe, + "siegeAIToggle", + settings.global["rampantFixed--siegeAIToggle"].value) + + universe.undergroundAttack = settings.global["rampantFixed--undergroundAttack"].value + + upgrade.compareTable(universe, + "attackPlayerThreshold", + settings.global["rampantFixed--attackPlayerThreshold"].value) + upgrade.compareTable(universe, + "attackUsePlayer", + settings.global["rampantFixed--attackWaveGenerationUsePlayerProximity"].value) + + upgrade.compareTable(universe, + "attackWaveMaxSize", + settings.global["rampantFixed--attackWaveMaxSize"].value) + upgrade.compareTable(universe, + "agressiveStart", + settings.global["rampantFixed--agressiveStart"].value) + upgrade.compareTable(universe, + "attackWaveMaxSizeEvoPercent", + settings.global["rampantFixed--attackWaveMaxSizeEvoPercent"].value) + upgrade.compareTable(universe, + "aiNocturnalMode", + settings.global["rampantFixed--permanentNocturnal"].value) + upgrade.compareTable(universe, + "aiPointsScaler", + settings.global["rampantFixed--aiPointsScaler"].value) + + universe.aiPointsPrintGainsToChat = settings.global["rampantFixed--aiPointsPrintGainsToChat"].value + universe.aiPointsPrintSpendingToChat = settings.global["rampantFixed--aiPointsPrintSpendingToChat"].value + + universe.enabledMigration = universe.expansion and settings.global["rampantFixed--enableMigration"].value + universe.peacefulAIToggle = settings.global["rampantFixed--peacefulAIToggle"].value + universe.printAIStateChanges = settings.global["rampantFixed--printAIStateChanges"].value + universe.debugTemperament = settings.global["rampantFixed--debugTemperament"].value + + upgrade.compareTable(universe, + "AI_MAX_SQUAD_COUNT", + settings.global["rampantFixed--maxNumberOfSquads"].value) + upgrade.compareTable(universe, + "AI_MAX_BUILDER_COUNT", + settings.global["rampantFixed--maxNumberOfBuilders"].value) + + for playerIndex, player in pairs(game.players) do + local player_settings = settings.get_player_settings(player) + if player.admin or in_debug_list(player) then + if player_settings["rampantFixed--showAdminMenu"].value then + create_disableAdminMenuButton(player, true) + else + create_disableAdminMenuButton(player, false) + end + end + end + + return true +end + +local function onConfigChanged() + local version = upgrade.attempt(universe) + if version then + if not universe then + universe = global.universe + end + end + + onModSettingsChange({setting="rampantFixed--"}) + + upgrade.compareTable(universe, + "ENEMY_VARIATIONS", + settings.startup["rampantFixed--newEnemyVariations"].value) + upgrade.compareTable(universe, + "NEW_ENEMIES", + settings.startup["rampantFixed--newEnemies"].value) + + -- upgrade.compareTable(universe, + -- "allowExternalControl", + -- settings.startup["rampantFixed--allowExternalControl"].value) -- 1.8.3++ + + upgrade.rebuildActivePlayerForces(universe) + + if universe.NEW_ENEMIES then + rebuildNativeTables(universe) + if not universe["NEW_ENEMIES_SIDE"] then + setNewEnemySide() + elseif (universe["NEW_ENEMIES_SIDE"] ~= settings.startup["rampantFixed--newEnemiesSide"].value) + or (universe["ALLOW_OTHER_ENEMIES"] ~= settings.startup["rampantFixed--allowOtherEnemies"].value) + then + game.print({"description.rampantFixed--NEW_ENEMIES_SIDE_ignored"}) + end + else + universe.buildingHiveTypeLookup = {} + universe.buildingHiveTypeLookup["biter-spawner"] = "biter-spawner" + universe.buildingHiveTypeLookup["spitter-spawner"] = "spitter-spawner" + universe.buildingHiveTypeLookup["small-worm-turret"] = "turret" + universe.buildingHiveTypeLookup["medium-worm-turret"] = "turret" + universe.buildingHiveTypeLookup["big-worm-turret"] = "turret" + universe.buildingHiveTypeLookup["behemoth-worm-turret"] = "turret" + end + + for _,surface in pairs(game.surfaces) do + if not universe.maps then + universe.maps = {} + end + if (not universe.maps[surface.index]) and (not SURFACE_IGNORED(surface, universe)) then + prepMap(surface) + end + end + +end + +local function onInit() + global.universe = {} + hookEvents() + onConfigChanged() + setNewEnemySide() + +end + +script.on_event(defines.events.on_surface_deleted, onSurfaceDeleted) +script.on_event(defines.events.on_surface_cleared, onSurfaceCreated) +script.on_event(defines.events.on_surface_created, onSurfaceCreated) + +script.on_init(onInit) +script.on_load(onLoad) +script.on_event(defines.events.on_runtime_mod_setting_changed, onModSettingsChange) +script.on_configuration_changed(onConfigChanged) + +script.on_event(defines.events.on_resource_depleted, onResourceDepleted) +script.on_event({defines.events.on_player_built_tile, + defines.events.on_robot_built_tile, + defines.events.script_raised_set_tiles}, onSurfaceTileChange) + +script.on_event(defines.events.on_player_used_capsule, onUsedCapsule) + +script.on_event(defines.events.on_trigger_created_entity, onTriggerEntityCreated) + +script.on_event(defines.events.on_pre_robot_exploded_cliff, onRobotCliff) + +script.on_event(defines.events.on_biter_base_built, onEnemyBaseBuild) +script.on_event({defines.events.on_player_mined_entity, + defines.events.on_robot_mined_entity}, onMine) + +script.on_event({defines.events.on_built_entity, + defines.events.on_robot_built_entity, + defines.events.script_raised_built, + defines.events.script_raised_revive}, onBuild) + + +script.on_event(defines.events.on_rocket_launched, onRocketLaunch) +script.on_event({defines.events.on_entity_died, + defines.events.script_raised_destroy}, onDeath) +script.on_event(defines.events.on_chunk_generated, onChunkGenerated) +script.on_event(defines.events.on_chunk_deleted, onChunkDeleted) +script.on_event(defines.events.on_force_created, onForceCreated) +script.on_event(defines.events.on_forces_merged, onForceMerged) +script.on_event(defines.events.on_force_cease_fire_changed, onForceDiplomacyChanged) +script.on_event(defines.events.on_force_friends_changed, onForceDiplomacyChanged) + +script.on_event(defines.events.on_unit_group_finished_gathering, onGroupFinishedGathering) + +script.on_event(defines.events.on_build_base_arrived, onBuilderArrived) + +-- + !ΠšΠ”Π 2021.11 +script.on_event(defines.events.on_sector_scanned, onSectorScanned) +--script.on_event(defines.events.on_script_trigger_effect, onScriptTriggerEffect) +script.on_event(defines.events.on_entity_damaged, onEntityDamaged, { + {filter="type", type="unit"}, + {mode = "and", invert = true, filter="damage-type", type ="fire"}, + {mode = "and", invert = true, filter="damage-type", type ="acid"}, + {mode = "or", filter="original-damage-amount", value = 200, comparison = ">"}, + {mode = "and", filter="type", type="unit"}, + }) +-- - !ΠšΠ”Π 2021.11 +script.on_event(defines.events.on_gui_click, on_gui_click) + + +local function setSurfaces(event) + create_surfaceIteraction_frame(game.players[event.player_index]) +end +commands.add_command('rampantSetSurfaces', "", setSurfaces) + +local function rampantSetAIState(event) + local surfaceIndex = game.players[event.player_index].surface.index + local map = universe.maps[surfaceIndex] + if not map then + local surfaceName = game.players[event.player_index].surface.name + game.print(surfaceName .. " is excluded from processing ") + return + end + + game.print(map.surface.name .. " is in " .. constants.stateEnglish[map.state]) + + if event.parameter then + local target = tonumber(event.parameter) + + if (target == nil) then + game.print("invalid param") + return + end + + if (target ~= constants.AI_STATE_PEACEFUL + and target ~= constants.AI_STATE_AGGRESSIVE + and target ~= constants.AI_STATE_RAIDING + and target ~= constants.AI_STATE_MIGRATING + and target ~= constants.AI_STATE_SIEGE + and target ~= constants.AI_STATE_ONSLAUGHT + and target ~= constants.AI_STATE_GROWING + ) then + game.print(target .. " is not a valid state") + return + else + + map.state = target + if map.state == constants.AI_STATE_GROWING then + aiPlanning.updateBasesToGrow(map, game.tick, false) + end + game.print(map.surface.name .. " is now in " .. constants.stateEnglish[map.state]) + end + end +end + +commands.add_command('rampantSetAIState', "", rampantSetAIState) + +local function rampantForceMutations(event) + local i = 0 + local basesTotal = 0 + + for id, base in pairs(universe.bases) do + basesTotal = basesTotal + 1 + if base and base.thisIsRampantEnemy then + base.tier = 0 + i = i + 1 + end + end + game.print("Bases forces to mutate: ".. i.."/"..basesTotal) + +end + +commands.add_command('rampantForceMutations', "", rampantForceMutations) + +local function rampantCreateCompressedBiter(event) + local newEntity = game.players[event.player_index].surface.create_entity({ + name = "small-biter", + position = {0, 0} + }) + if newEntity then + local compressedUnits = universe.compressedUnits + compressedUnits[newEntity.unit_number] = {count = 10, entity = newEntity} + end + +end + +--commands.add_command('rampantCreateCompressedBiter', "", rampantCreateCompressedBiter) diff --git a/RampantFixed/data-final-fixes.lua b/RampantFixed/data-final-fixes.lua new file mode 100644 index 00000000..fb576bac --- /dev/null +++ b/RampantFixed/data-final-fixes.lua @@ -0,0 +1,262 @@ +local vanillaBuildings = require("prototypes/buildings/UpdatesVanilla") +local immunityUpdates = require("prototypes/utils/UpdateImmunities") + + +-- if settings.startup["rampantFixed--removeBloodParticles"].value then + -- local explosions = data.raw["explosion"] + + -- for k,v in pairs(explosions) do + -- if string.find(k, "blood") then + -- v["created_effect"] = nil + -- end + -- end +-- end + +--------- assign flying_layer to projectiles +local function table_contains(table, check) + for k,v in pairs(table) do if v == check then return true end end + return false +end + +if not mods["combat-mechanics-overhaul"] then + local collision_mask_util_extended = require("collision-mask-util-extended/data/collision-mask-util-extended") + flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") + + for _, prototype in pairs(data.raw.projectile) do + if prototype.collision_box then + if not prototype.hit_collision_mask then + prototype.hit_collision_mask = collision_mask_util_extended.get_default_hit_mask("projectile") + else + if not table_contains(prototype.hit_collision_mask, flying_layer) then + table.insert(prototype.hit_collision_mask, flying_layer) + end + end + end + end +else -- rebuild units (CMO broke stream attacks) + log("combat-mechanics-overhaul -> rebuild units") + if settings.startup["rampantFixed--newEnemies"].value then + local swarmUtils = require("prototypes/SwarmUtils") + swarmUtils.processFactions() + end +end + + +if settings.startup["rampantFixed--newEnemies"].value then + if data.raw["damage-type"]["plasma"] then + immunityUpdates.setPlasmaImmunities() + end + if data.raw["damage-type"]["bob-pierce"] then + immunityUpdates.setPierceImmunities() + end + immunityUpdates.setArmorLaserElectricImmunities() + immunityUpdates.setResistanceToUnknownDamageTypes() +end + +if settings.startup["rampantFixed--fireSafety-flamethrower"].value then + local flamethrowerStream = data.raw["stream"]["handheld-flamethrower-fire-stream"] + flamethrowerStream.action[1].action_delivery.target_effects[1].sticker = "safe-fire-sticker-rampant" + local action_delivery = flamethrowerStream.action[1].action_delivery + if action_delivery.target_effects[2] and (action_delivery.target_effects[2].type == "damage") and (action_delivery.target_effects[2].damage.type == "fire") then + action_delivery.target_effects[2].damage.amount = (action_delivery.target_effects[2].damage.amount or 0) + 4 + action_delivery.target_effects[2].apply_damage_to_trees = true + else + action_delivery.target_effects[#action_delivery.target_effects+1] = { + type = "damage", + damage = { amount = 6, type = "fire" }, + apply_damage_to_trees = true + } + end + if flamethrowerStream.action[2] then + table.remove(flamethrowerStream.action, 2) + end + + -- for i, action in pairs (flamethrowerStream.action) do + -- if action.action_delivery and action.action_delivery.target_effects then + -- for u, target_effect in pairs (action.action_delivery.target_effects) do + -- if target_effect.entity_name and (target_effect.entity_name == "fire-flame") then + -- target_effect.type = "damage" + -- target_effect.damage = { amount = 40, type = "fire" } + -- target_effect.apply_damage_to_trees = true + -- target_effect.entity_name = nil --"safe-fire-flame-rampant" + -- end + -- end + -- end + -- end + + + local napalmStream = data.raw["stream"]["napalm-handheld-stream-rampant-arsenal"] + if napalmStream then + local flameFound = false + for i, action in pairs (napalmStream.action) do + if action.action_delivery and action.action_delivery.target_effects then + for u, target_effect in pairs (action.action_delivery.target_effects) do + if target_effect.entity_name and (target_effect.entity_name == "fire-flame") then + table.remove(action.action_delivery.target_effects, u) + flameFound = true + end + end + end + end + if flameFound then + for i, action in pairs (napalmStream.action) do + if action.action_delivery and action.action_delivery.target_effects then + for u, target_effect in pairs (action.action_delivery.target_effects) do + if (target_effect.type == "damage") and target_effect.damage and (target_effect.damage.type == "fire") then + target_effect.damage.amount = (target_effect.damage.amount or 0) + 8 + target_effect.apply_damage_to_trees = true + end + end + end + end + end + local napalmSticker = data.raw["sticker"]["small-fire-sticker-rampant-arsenal"] + if napalmSticker and napalmSticker.spread_fire_entity then + napalmSticker.spread_fire_entity = "safe-fire-flame-on-tree-rampant" + end + end + +end + +if settings.startup["rampantFixed--flamethrowerTurretsRebalance"].value then + local fireFlameShortLife = table.deepcopy(data.raw["fire"]["fire-flame"]) + fireFlameShortLife.name = "fire-flame-shortlife-rampant" + fireFlameShortLife.maximum_damage_multiplier = 7 + fireFlameShortLife.damage_multiplier_increase_per_added_fuel = 3 + fireFlameShortLife.damage_multiplier_decrease_per_tick = 0.01 + fireFlameShortLife.lifetime_increase_by = 150 + fireFlameShortLife.maximum_lifetime = 300 + fireFlameShortLife.lifetime_increase_cooldown = 12, + data:extend({fireFlameShortLife}) + + local flamethrowerStream2 = table.deepcopy(data.raw["stream"]["flamethrower-fire-stream"]) + local flamethrowerTurret = data.raw["fluid-turret"]["flamethrower-turret"] + + flamethrowerStream2.name = "flamethrower-fire-stream2" + flamethrowerStream2.action[1].action_delivery.target_effects[2].damage.amount = 4 + flamethrowerStream2.action[2].action_delivery.target_effects[1].entity_name = "fire-flame-shortlife-rampant" + data:extend({flamethrowerStream2}) + + flamethrowerTurret.attack_parameters.cooldown = 12 + flamethrowerTurret.attack_parameters.fluid_consumption = 0.6 + flamethrowerTurret.attack_parameters.ammo_type.action.action_delivery.stream = "flamethrower-fire-stream2" + flamethrowerTurret.attack_parameters.gun_barrel_length = 0.6 + + --------------- + if data.raw["stream"]["suppression-cannon-stream-rampant-arsenal"] then + local flamethrowerTurretRA_Stream = data.raw["stream"]["suppression-cannon-stream-rampant-arsenal"] + table.remove(flamethrowerTurretRA_Stream.action[1].action_delivery.target_effects, 2) + flamethrowerTurretRA_Stream.action[2].action_delivery.target_effects[2].damage.amount = flamethrowerTurretRA_Stream.action[2].action_delivery.target_effects[2].damage.amount * 4 + + + local flamethrowerTurretRA = data.raw["fluid-turret"]["suppression-cannon-fluid-turret-rampant-arsenal"] + flamethrowerTurretRA.attack_parameters.cooldown = 30 + flamethrowerTurretRA.attack_parameters.fluid_consumption = 15 + data:extend({flamethrowerTurretRA}) + end +end + -- -- debug + + + -- local biterTest = table.deepcopy(data.raw["unit"]["small-biter"]) + -- biterTest.max_health = 100000 + -- biterTest.name = "BiterTest" + -- data:extend({biterTest}) + -- --------------- + +if settings.startup["rampantFixed--rampantArsenalRebalance"].value then + local damage_interval = 15 + for i, sticker in pairs(data.raw["sticker"]) do + if string.find(sticker.name, "arsenal") and string.find(sticker.name, "rampant") then + if (sticker.duration_in_ticks >= 60) and sticker.damage_per_tick and (sticker.damage_per_tick.amount > 0) and ((not sticker.damage_interval) or (sticker.damage_interval < 10)) then + local kf = damage_interval/(sticker.damage_interval or 1) + sticker.damage_interval = damage_interval + sticker.damage_per_tick.amount = sticker.damage_per_tick.amount * kf + end + end + end +end + +if settings.startup["rampantFixed--unitSpawnerBreath"].value then + for _, unitSpawner in pairs(data.raw["unit-spawner"]) do + if (string.find(unitSpawner.name, "hive") or string.find(unitSpawner.name, "biter") or + string.find(unitSpawner.name, "spitter")) then + if not unitSpawner.flags then + unitSpawner.flags = {} + end + unitSpawner.flags[#unitSpawner.flags+1] = "breaths-air" + end + end +end + + +for k, unit in pairs(data.raw["unit"]) do + if (string.find(k, "biter") or string.find(k, "spitter")) and unit.collision_box then + if settings.startup["rampantFixed--enableSwarm"].value then + unit.collision_box = { + {unit.collision_box[1][1] * 0.20, unit.collision_box[1][2] * 0.20}, + {unit.collision_box[2][1] * 0.20, unit.collision_box[2][2] * 0.20} + } + end + + -- if string.find(k, "-rampant") and (string.find(k, "nuclear-biter") or string.find(k, "suicide-biter") or string.find(k, "fast-biter")) then + -- unit.affected_by_tiles = false + -- else + -- unit.affected_by_tiles = settings.startup["rampantFixed--unitsAffectedByTiles"].value + -- end + + unit.ai_settings = { + destroy_when_commands_fail = false, + allow_try_return_to_spawner = true + } + end +end + +if settings.startup["rampantFixed--enableShrinkNestsAndWorms"].value then + for k, unit in pairs(data.raw["unit-spawner"]) do + if (string.find(k, "biter") or string.find(k, "spitter") or string.find(k, "hive")) and unit.collision_box then + local minDxDy = math.min(unit.collision_box[2][1] - unit.collision_box[1][1], unit.collision_box[2][2] - unit.collision_box[1][2]) + if minDxDy >= 3 then + unit.collision_box = { + {unit.collision_box[1][1] * 0.50, unit.collision_box[1][2] * 0.50}, + {unit.collision_box[2][1] * 0.50, unit.collision_box[2][2] * 0.50} + } + else + local k = 1 - (0.5 * minDxDy / 3) + unit.collision_box = { + {unit.collision_box[1][1] * k, unit.collision_box[1][2] * k}, + {unit.collision_box[2][1] * k, unit.collision_box[2][2] * k} + } + end + end + end + + for k, unit in pairs(data.raw["turret"]) do + if string.find(k, "worm") and unit.collision_box then + unit.collision_box = { + {unit.collision_box[1][1] * 0.70, unit.collision_box[1][2] * 0.70}, + {unit.collision_box[2][1] * 0.70, unit.collision_box[2][2] * 0.70} + } + end + end +end + +if settings.startup["rampantFixed--enableFadeTime"].value then + for k, corpse in pairs(data.raw["corpse"]) do + if (string.find(k, "biter") or string.find(k, "spitter") or string.find(k, "hive") or + string.find(k, "worm") or string.find(k, "spawner")) then + if string.sub(k, 1, 13) == "spawner-spawn" then + corpse.time_before_removed = 60 + else + corpse.time_before_removed = settings.startup["rampantFixed--unitAndSpawnerFadeTime"].value * 60 + end + end + end +end + +if settings.startup["rampantFixed--addWallResistanceAcid"].value then + vanillaBuildings.addWallResistance() +end + + + diff --git a/RampantFixed/data-updates.lua b/RampantFixed/data-updates.lua new file mode 100644 index 00000000..23aec744 --- /dev/null +++ b/RampantFixed/data-updates.lua @@ -0,0 +1,70 @@ +local vanillaUpdates = require("prototypes/utils/UpdatesVanilla") + +local attackBall = require("prototypes/utils/AttackBall") +local constants = require("libs/Constants") + +-- if settings.startup["rampantFixed--useDumbProjectiles"].value or settings.startup["rampantFixed--newEnemies"].value then + -- attackBall.generateVanilla() + -- vanillaUpdates.useDumbProjectiles() +-- end + +for _, robot in pairs(data.raw["logistic-robot"]) do + -- if not robot.collision_mask then + -- robot.collision_mask = {} + -- end + -- robot.collision_mask[#robot.collision_mask+1] = "layer-13" + + if (settings.startup["rampantFixed--unkillableLogisticRobots"].value) then + robot.resistances = {} + for damageType, _ in pairs(data.raw["damage-type"]) do + robot.resistances[damageType] = { + type = damageType, + percent = 100 + } + end + end +end + +for _, robot in pairs(data.raw["construction-robot"]) do + -- if not robot.collision_mask then + -- robot.collision_mask = {} + -- end + -- robot.collision_mask[#robot.collision_mask+1] = "layer-13" + + if (settings.startup["rampantFixed--unkillableConstructionRobots"].value) then + robot.resistances = {} + for damageType, _ in pairs(data.raw["damage-type"]) do + robot.resistances[damageType] = { + type = damageType, + percent = 100 + } + end + end +end + + +-- for _, robot in pairs(data.raw["combat-robot"]) do +-- if not robot.collision_mask then +-- robot.collision_mask = {} +-- end +-- robot.collision_mask[#robot.collision_mask+1] = "layer-13" +-- end + +--[[ + try to make sure new maps use the correct map settings without having to completely load the mod. + done because seeing desync issues with dynamic map-settings changes before re-saving the map. +--]] +local mapSettings = data.raw["map-settings"]["map-settings"] + +mapSettings.max_failed_behavior_count = 3 -- constants.MAX_FAILED_BEHAVIORS + +mapSettings.unit_group.member_disown_distance = constants.UNIT_GROUP_DISOWN_DISTANCE +mapSettings.unit_group.tick_tolerance_when_member_arrives = constants.UNIT_GROUP_TICK_TOLERANCE + +mapSettings.unit_group.max_group_radius = constants.UNIT_GROUP_MAX_RADIUS +mapSettings.unit_group.max_member_speedup_when_behind = constants.UNIT_GROUP_MAX_SPEED_UP +mapSettings.unit_group.max_member_slowdown_when_ahead = constants.UNIT_GROUP_MAX_SLOWDOWN +mapSettings.unit_group.max_group_slowdown_factor = constants.UNIT_GROUP_SLOWDOWN_FACTOR + + +-- data.raw["utility-constants"]["default"].unit_group_pathfinding_resolution = -5 diff --git a/RampantFixed/data.lua b/RampantFixed/data.lua new file mode 100644 index 00000000..c91cab75 --- /dev/null +++ b/RampantFixed/data.lua @@ -0,0 +1,161 @@ +-- import + +local colorUtils = require("prototypes/utils/ColorUtils") +local smokeUtils = require("prototypes/utils/SmokeUtils") +local targetDummy = require("prototypes/TargetDummy") + +-- imported functions + +local makeSmokeSoft = smokeUtils.makeSmokeSoft +local makeSmokeWithGlow = smokeUtils.makeSmokeWithGlow +local makeSmokeWithoutGlow = smokeUtils.makeSmokeWithoutGlow +local makeSmokeAddingFuel = smokeUtils.makeSmokeAddingFuel + +local makeColor = colorUtils.makeColor + +-- module code + +makeSmokeSoft({name="the", softSmokeTint=makeColor(0.3, 0.75, 0.3, 0.1)}) +makeSmokeWithGlow({name="the", smokeWithGlowTint=makeColor(0.3, 0.75, 0.3, 0.1)}) +makeSmokeWithoutGlow({name="the", smokeWithoutGlowTint=makeColor(0.3, 0.75, 0.3, 0.1)}) +makeSmokeAddingFuel({name="the"}) + +require("prototypes/buildings/ChunkScanner") +require("prototypes/gui_style") + +-- + !ΠšΠ”Π 2021.11 +data:extend( +{ + { + type = "damage-type", + name = "rampant-longRangeImmunity" + }, + { + type = "damage-type", + name = "rampant-overdamageProtection" + }, +} +) +-- - !ΠšΠ”Π 2021.11 + +local attributes = {} + +if not data.raw["corpse"]["acid-splash-purple"] then + data:extend({ + { + type = "corpse", + name = "acid-splash-purple", + flags = {"not-on-map"}, + time_before_removed = 60 * 30, + final_render_layer = "corpse", + splash = + { + { + filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", + line_length = 8, + direction_count = 1, + width = 106, + height = 116, + frame_count = 26, + shift = util.mul_shift(util.by_pixel(-12, -10), attributes.scale or 1), + tint = attributes.tint, + scale = (attributes.scale or 1), + hr_version = { + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", + line_length = 8, + direction_count = 1, + width = 210, + height = 224, + frame_count = 26, + shift = util.mul_shift(util.by_pixel(-12, -8), attributes.scale or 1), + tint = attributes.tint, + scale = 0.5 * (attributes.scale or 1), + } + }, + { + filename = "__base__/graphics/entity/acid-splash/acid-splash-2.png", + line_length = 8, + direction_count = 1, + width = 88, + height = 76, + frame_count = 29, + shift = util.mul_shift(util.by_pixel(-10, -18), attributes.scale or 1), + tint = attributes.tint, + scale = (attributes.scale or 1), + hr_version = { + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2.png", + line_length = 8, + direction_count = 1, + width = 174, + height = 150, + frame_count = 29, + shift = util.mul_shift(util.by_pixel(-9, -17), attributes.scale or 1), + tint = attributes.tint, + scale = 0.5 * (attributes.scale or 1), + } + }, + { + filename = "__base__/graphics/entity/acid-splash/acid-splash-3.png", + line_length = 8, + direction_count = 1, + width = 118, + height = 104, + frame_count = 29, + shift = util.mul_shift(util.by_pixel(22, -16), attributes.scale or 1), + tint = attributes.tint, + scale = (attributes.scale or 1), + hr_version = { + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3.png", + line_length = 8, + direction_count = 1, + width = 236, + height = 208, + frame_count = 29, + shift = util.mul_shift(util.by_pixel(22, -16), attributes.scale or 1), + tint = attributes.tint, + scale = 0.5 * (attributes.scale or 1), + } + }, + { + filename = "__base__/graphics/entity/acid-splash/acid-splash-4.png", + line_length = 8, + direction_count = 1, + width = 128, + height = 80, + frame_count = 24, + shift = util.mul_shift(util.by_pixel(16, -20), attributes.scale or 1), + tint = attributes.tint, + scale = (attributes.scale or 1), + hr_version = { + filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4.png", + line_length = 8, + direction_count = 1, + width = 252, + height = 154, + frame_count = 24, + shift = util.mul_shift(util.by_pixel(17, -19), attributes.scale or 1), + tint = attributes.tint, + scale = 0.5 * (attributes.scale or 1), + } + } + }, + splash_speed = 0.03 + } + }) +end + +local swarmUtils = require("prototypes/SwarmUtils") + +if settings.startup["rampantFixed--newEnemies"].value then + targetDummy.addTargetDummies() + targetDummy.addDummySetters() + + swarmUtils.processFactions() + swarmUtils.generateSpawnerProxy(data.raw["unit-spawner"]["neutral-biter-spawner-v1-t10-rampant"].result_units) + +else + swarmUtils.generateSpawnerProxy(data.raw["unit-spawner"]["biter-spawner"].result_units) +end + +local bitersEnrage = require("libs/BitersEnrage") +bitersEnrage.createStickers() \ No newline at end of file diff --git a/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png b/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png new file mode 100644 index 00000000..c126a9a6 Binary files /dev/null and b/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png differ diff --git a/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple.png b/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple.png new file mode 100644 index 00000000..c954ad86 Binary files /dev/null and b/RampantFixed/graphics/acid-projectile-purple/acid-projectile-purple.png differ diff --git a/RampantFixed/graphics/acid-splash-purple/splash-1.png b/RampantFixed/graphics/acid-splash-purple/splash-1.png new file mode 100644 index 00000000..f656af80 Binary files /dev/null and b/RampantFixed/graphics/acid-splash-purple/splash-1.png differ diff --git a/RampantFixed/graphics/acid-splash-purple/splash-2.png b/RampantFixed/graphics/acid-splash-purple/splash-2.png new file mode 100644 index 00000000..f1657b2a Binary files /dev/null and b/RampantFixed/graphics/acid-splash-purple/splash-2.png differ diff --git a/RampantFixed/graphics/acid-splash-purple/splash-3.png b/RampantFixed/graphics/acid-splash-purple/splash-3.png new file mode 100644 index 00000000..7a6c9eec Binary files /dev/null and b/RampantFixed/graphics/acid-splash-purple/splash-3.png differ diff --git a/RampantFixed/graphics/acid-splash-purple/splash-4.png b/RampantFixed/graphics/acid-splash-purple/splash-4.png new file mode 100644 index 00000000..acd16a30 Binary files /dev/null and b/RampantFixed/graphics/acid-splash-purple/splash-4.png differ diff --git a/RampantFixed/graphics/entities/thief/crystal-drain-pole.png b/RampantFixed/graphics/entities/thief/crystal-drain-pole.png new file mode 100644 index 00000000..3bfac7b6 Binary files /dev/null and b/RampantFixed/graphics/entities/thief/crystal-drain-pole.png differ diff --git a/RampantFixed/graphics/entities/thief/crystal-drain.png b/RampantFixed/graphics/entities/thief/crystal-drain.png new file mode 100644 index 00000000..1355785d Binary files /dev/null and b/RampantFixed/graphics/entities/thief/crystal-drain.png differ diff --git a/RampantFixed/graphics/entities/tunnel/tunnelEntrance.png b/RampantFixed/graphics/entities/tunnel/tunnelEntrance.png new file mode 100644 index 00000000..4a20dc76 Binary files /dev/null and b/RampantFixed/graphics/entities/tunnel/tunnelEntrance.png differ diff --git a/RampantFixed/graphics/icons/thief/crystal-drain-pole.png b/RampantFixed/graphics/icons/thief/crystal-drain-pole.png new file mode 100644 index 00000000..d126f27b Binary files /dev/null and b/RampantFixed/graphics/icons/thief/crystal-drain-pole.png differ diff --git a/RampantFixed/graphics/icons/thief/crystal-drain.png b/RampantFixed/graphics/icons/thief/crystal-drain.png new file mode 100644 index 00000000..66ac3fcb Binary files /dev/null and b/RampantFixed/graphics/icons/thief/crystal-drain.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt-inner-corner.png b/RampantFixed/graphics/tiles/fillableDirt/dirt-inner-corner.png new file mode 100644 index 00000000..29d7bb45 Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt-inner-corner.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt-outer-corner.png b/RampantFixed/graphics/tiles/fillableDirt/dirt-outer-corner.png new file mode 100644 index 00000000..c70e79ab Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt-outer-corner.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt-side.png b/RampantFixed/graphics/tiles/fillableDirt/dirt-side.png new file mode 100644 index 00000000..a0895a46 Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt-side.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt1.png b/RampantFixed/graphics/tiles/fillableDirt/dirt1.png new file mode 100644 index 00000000..e349148f Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt1.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt2.png b/RampantFixed/graphics/tiles/fillableDirt/dirt2.png new file mode 100644 index 00000000..e72a06b0 Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt2.png differ diff --git a/RampantFixed/graphics/tiles/fillableDirt/dirt4.png b/RampantFixed/graphics/tiles/fillableDirt/dirt4.png new file mode 100644 index 00000000..61ce15e0 Binary files /dev/null and b/RampantFixed/graphics/tiles/fillableDirt/dirt4.png differ diff --git a/RampantFixed/info.json b/RampantFixed/info.json new file mode 100644 index 00000000..6f852f87 --- /dev/null +++ b/RampantFixed/info.json @@ -0,0 +1,10 @@ +{ + "name" : "RampantFixed", + "factorio_version" : "1.1", + "version" : "1.8.3", + "title" : "Rampant, fixed", + "author" : "Dimm2101 (fixes), Veden (Rampant)", + "homepage" : "", + "description" : "Based on Rampant 1.1.1 (new AI and enemies). \n 1. AI significantly rewritten, gameplay different. Can attack from afar. Improved search for a passage in the defense. By default, it does not populate the entire map \n 2. +2 Factions. Can mutate existing nests. Mixed attacks from different factions. Can be combined with nests of other enemies \n Details on the mod portal", + "dependencies" : ["base >= 1.1.0", "!Rampant", "?alien-module", "?Arachnids", "?ArmouredBiters", "?bobenemies", "?combat-mechanics-overhaul", "?RampantArsenal", "?SchallAlienLoot"] +} diff --git a/RampantFixed/libs/AIAttackWave.lua b/RampantFixed/libs/AIAttackWave.lua new file mode 100644 index 00000000..37ea2f59 --- /dev/null +++ b/RampantFixed/libs/AIAttackWave.lua @@ -0,0 +1,440 @@ +if (aiAttackWaveG) then + return aiAttackWaveG +end +local aiAttackWave = {} + +-- imports + +local constants = require("Constants") +local mapUtils = require("MapUtils") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local unitGroupUtils = require("UnitGroupUtils") +local movementUtils = require("MovementUtils") +local mathUtils = require("MathUtils") +local config = require("__RampantFixed__/config") +local scoreChunks = require("ScoreChunks") + + +-- constants + +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE +local MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK = constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK + +local AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION = constants.AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION +local AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION = constants.AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION + +local AI_SQUAD_COST = constants.AI_SQUAD_COST +local AI_SETTLER_COST = constants.AI_SETTLER_COST +local AI_VENGENCE_SQUAD_COST = constants.AI_VENGENCE_SQUAD_COST +local AI_STATE_AGGRESSIVE = constants.AI_STATE_AGGRESSIVE + +local COOLDOWN_RALLY = constants.COOLDOWN_RALLY + +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS + +local CHUNK_SIZE = constants.CHUNK_SIZE + +local RALLY_CRY_DISTANCE = constants.RALLY_CRY_DISTANCE + +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE +local AI_STATE_MIGRATING = constants.AI_STATE_MIGRATING +local AI_STATE_RAIDING = constants.AI_STATE_RAIDING + +-- imported functions + +local randomTickEvent = mathUtils.randomTickEvent + +local calculateKamikazeThreshold = unitGroupUtils.calculateKamikazeThreshold + +local mRandom = math.random +local mMax = math.max +local mMin = math.min + +local positionFromDirectionAndChunk = mapUtils.positionFromDirectionAndChunk + +local getPassable = chunkPropertyUtils.getPassable +local getNestCount = chunkPropertyUtils.getNestCount +local getRaidNestActiveness = chunkPropertyUtils.getRaidNestActiveness +local getNestActiveness = chunkPropertyUtils.getNestActiveness +local getRallyTick = chunkPropertyUtils.getRallyTick +local setRallyTick = chunkPropertyUtils.setRallyTick + +local gaussianRandomRange = mathUtils.gaussianRandomRange + +local getNeighborChunks = mapUtils.getNeighborChunks +local getChunkByXY = mapUtils.getChunkByXY +local scoreNeighborsForFormation = movementUtils.scoreNeighborsForFormation +local scoreNeighborsForResource = movementUtils.scoreNeighborsForResource +local createSquad = unitGroupUtils.createSquad +local attackWaveScaling = config.attackWaveScaling +local settlerWaveScaling = config.settlerWaveScaling +local getAttackWaveMaxSize = config.getAttackWaveMaxSize +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator + +local validSiegeLocation = scoreChunks.validSiegeLocation +local validSettlerLocation = scoreChunks.validSettlerLocation +local validUnitGroupLocation = scoreChunks.validUnitGroupLocation + +local scoreUnitGroupLocation = scoreChunks.scoreUnitGroupLocation +local scoreSiegeLocation = scoreChunks.scoreSiegeLocation +local scoreSettlerLocation = scoreChunks.scoreSettlerLocation + +-- module code + +local function attackWaveValidCandidate(chunk, map) + local isValid = getNestActiveness(map, chunk) + if (map.state == AI_STATE_RAIDING) or (map.state == AI_STATE_SIEGE) or (map.state == AI_STATE_MIGRATING) then + isValid = isValid + getRaidNestActiveness(map, chunk) + end + return (isValid > 0) +end + +-- + !ΠšΠ”Π +local function getFreeNeighborChunks(neighborChunks, map) + local freeChunks = 0 + for x=1,8 do + local neighborChunk = neighborChunks[x] + if (neighborChunk ~= -1) + and (getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS) + and (getNestCount(map, neighborChunk) == 0) + then + freeChunks = freeChunks + 1 + end + end + return freeChunks +end +-- - !ΠšΠ”Π + +local function visitPattern(o, cX, cY, distance) + local startX + local endX + local stepX + local startY + local endY + local stepY + if (o == 0) then + startX = cX - distance + endX = cX + distance + stepX = 32 + startY = cY - distance + endY = cY + distance + stepY = 32 + elseif (o == 1) then + startX = cX + distance + endX = cX - distance + stepX = -32 + startY = cY + distance + endY = cY - distance + stepY = -32 + elseif (o == 2) then + startX = cX - distance + endX = cX + distance + stepX = 32 + startY = cY + distance + endY = cY - distance + stepY = -32 + elseif (o == 3) then + startX = cX + distance + endX = cX - distance + stepX = -32 + startY = cY - distance + endY = cY + distance + stepY = 32 + end + return startX, endX, stepX, startY, endY, stepY +end + +function aiAttackWave.rallyUnits(chunk, map, tick) + if ((tick - getRallyTick(map, chunk) > COOLDOWN_RALLY) and (map.points >= AI_VENGENCE_SQUAD_COST)) then + setRallyTick(map, chunk, tick) + local cX = chunk.x + local cY = chunk.y + local startX, endX, stepX, startY, endY, stepY = visitPattern(tick % 4, cX, cY, RALLY_CRY_DISTANCE) + local vengenceQueue = map.vengenceQueue + for x=startX, endX, stepX do + for y=startY, endY, stepY do + if (x ~= cX) and (y ~= cY) then + local rallyChunk = getChunkByXY(map, x, y) + if (rallyChunk ~= -1) and (getNestCount(map, rallyChunk) > 0) then + local count = vengenceQueue[rallyChunk] + if not count then + count = 0 + vengenceQueue[rallyChunk] = count + end + vengenceQueue[rallyChunk] = count + 1 + end + end + end + end + + return true + end +end + +function aiAttackWave.formSettlers(map, chunk) + local universe = map.universe + local squadCreated = false + + if (universe.builderCount < universe.AI_MAX_BUILDER_COUNT) and + (mRandom() < universe.formSquadThreshold) and + ((map.points - AI_SETTLER_COST) > 0) + then + local surface = map.surface + local squadPath, squadDirection + local neighborChunks = getNeighborChunks(map, chunk.x, chunk.y) + -- single nests have priority + local FreeNeighborChunks = getFreeNeighborChunks(neighborChunks, map) -- number of non-settled chunks + local settleRoll= 1/(mMax(9-FreeNeighborChunks, 1)) -- 8 = 1, 7 - 50%, 6 - 25%, 5 = 12% ... + local settlerType = "Settler" + + if (map.state == AI_STATE_SIEGE) or (universe.siegeAIToggle and (mRandom() <= 0.1)) then + settlerType = "Siege" + end + + if (settlerType == "Siege") then + local siegeRoll + local pheromones = chunk[BASE_DETECTION_PHEROMONE] + if pheromones > universe.no_pollution_attack_threshold then + siegeRoll = 1 + elseif pheromones < universe.raiding_minimum_base_threshold then + if map.activeNests < 5 then + siegeRoll = 1 + else + siegeRoll = 0 + end + else + siegeRoll = (pheromones - universe.raiding_minimum_base_threshold)/(universe.no_pollution_attack_threshold - universe.raiding_minimum_base_threshold) + end + settleRoll = settleRoll * siegeRoll + end + if (settleRoll==1) or (mRandom() < settleRoll) then + -- - !ΠšΠ”Π + + if (settlerType == "Siege") then + squadPath, squadDirection = scoreNeighborsForResource(chunk, + getNeighborChunks(map, chunk.x, chunk.y), + validSiegeLocation, + scoreSiegeLocation, + map) + + else + squadPath, squadDirection = scoreNeighborsForResource(chunk, + getNeighborChunks(map, chunk.x, chunk.y), + validSettlerLocation, + scoreSettlerLocation, + map) + end + + if (squadPath ~= -1) then + local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", + positionFromDirectionAndChunk(squadDirection, + chunk, + universe.position, + 0.98), + CHUNK_SIZE, + 4, + true) + if squadPosition then + local squad = createSquad(squadPosition, map, nil, true) + + squad.maxDistance = gaussianRandomRange(universe.expansionMaxDistance * 0.5, + universe.expansionMaxDistanceDerivation, + 10, + universe.expansionMaxDistance) + + if settlerType == "Siege" then + squad.siege = true + end + local scaledWaveSize = settlerWaveScaling(universe) + universe.formGroupCommand.group = squad.group + universe.formCommand.unit_count = scaledWaveSize + local foundUnits = surface.set_multi_command(universe.formCommand) + if (foundUnits > 0) then + squad.kamikaze = mRandom() < calculateKamikazeThreshold(foundUnits, universe) + universe.builderCount = universe.builderCount + 1 + local rangeKf = 1 + if map.state == AI_STATE_MIGRATING then + rangeKf = 0.7 + mMin(chunk[BASE_DETECTION_PHEROMONE]/universe.no_pollution_attack_threshold, 0.3) + end + local settlerCost = math.floor(AI_SETTLER_COST * rangeKf) + map.points = map.points - settlerCost + if universe.aiPointsPrintSpendingToChat then + game.print(map.surface.name .. ": Points: -" .. settlerCost .. ". ["..settlerType.."] Total: " .. string.format("%.2f", map.points) .. " [gps=" .. squadPosition.x .. "," .. squadPosition.y .. "]") + end + universe.groupNumberToSquad[squad.groupNumber] = squad + map.vengenceLimiter = mMax(0, map.vengenceLimiter - 3) + squadCreated = true + else + if (squad.group.valid) then + squad.group.destroy() + end + end + end + end + end + end + return squadCreated +end + +function aiAttackWave.formVengenceSquad(map, chunk) + local universe = map.universe + local finalSquadCost = universe.finalSquadCost + local finalVengenceSquadCost = universe.finalVengenceSquadCost + if (universe.squadCount < universe.AI_MAX_SQUAD_COUNT) and + ((map.points - finalVengenceSquadCost) > 0) and + (mRandom() < universe.formSquadThreshold) + then + local surface = map.surface + local squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), + validUnitGroupLocation, + scoreUnitGroupLocation, + map) + if (squadPath ~= -1) then + local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", + positionFromDirectionAndChunk(squadDirection, + chunk, + universe.position, + 0.98), + CHUNK_SIZE, + 4, + true) + if squadPosition then + local squad = createSquad(squadPosition, map) + squad.vengence = true + squad.rabid = mRandom() < 0.03 + + local scaledWaveSize = mMin(attackWaveScaling(universe), getAttackWaveMaxSize(universe)*0.8) + universe.formGroupCommand.group = squad.group + universe.formCommand.unit_count = scaledWaveSize + local foundUnits = surface.set_multi_command(universe.formCommand) + if (foundUnits > 0) then + squad.kamikaze = mRandom() < calculateKamikazeThreshold(foundUnits, universe) + universe.groupNumberToSquad[squad.groupNumber] = squad + universe.squadCount = universe.squadCount + 1 + if (map.points < finalSquadCost*4) or (universe.aiDifficulty~="Hard") then + map.vengenceLimiter = map.vengenceLimiter + 1 + else + map.vengenceLimiter = map.vengenceLimiter + 0.5 + end + + map.points = map.points - finalVengenceSquadCost + if universe.aiPointsPrintSpendingToChat then + game.print(map.surface.name .. ": Points: -" .. finalVengenceSquadCost .. ". [Vengence] Total: " .. string.format("%.2f", map.points) .. " [gps=" .. squadPosition.x .. "," .. squadPosition.y .. "]") + end + else + if (squad.group.valid) then + squad.group.destroy() + end + end + end + end + end +end + +function aiAttackWave.formSquads(map, chunk, tick, remoteInterfaceParameters) + local universe = map.universe + local squadCreated = false + local squad + local finalSquadCost = universe.finalSquadCost + local canCreateSquad = (remoteInterfaceParameters and remoteInterfaceParameters.ignoreSquadLimit) or (universe.squadCount < (universe.AI_MAX_SQUAD_COUNT*0.7)) + if remoteInterfaceParameters then + finalSquadCost = mMin(finalSquadCost, map.points) + end + if canCreateSquad and + attackWaveValidCandidate(chunk, map) and + ((map.points - finalSquadCost) >= 0) and + (remoteInterfaceParameters or (mRandom() < universe.formSquadThreshold)) + then + local surface = map.surface + local squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), + validUnitGroupLocation, + scoreUnitGroupLocation, + map) + if (squadPath ~= -1) then + local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", + positionFromDirectionAndChunk(squadDirection, + chunk, + universe.position, + 0.98), + CHUNK_SIZE, + 4, + true) + if squadPosition then + squad = createSquad(squadPosition, map) + if universe.undergroundAttack and (not remoteInterfaceParameters) and (universe.undergroundAttackProbability > 0) and (mRandom() < universe.undergroundAttackProbability) then + -- if mRandom() < 0.2 then + -- squad.undergoundAttack = "randomTarget" -- look at undergroundAttack.createUndergroudAttack + -- else + squad.undergoundAttack = "common" + -- end + end + squad.rabid = mRandom() < 0.03 + + local scaledWaveSize = attackWaveScaling(universe) + universe.formGroupCommand.group = squad.group + if remoteInterfaceParameters and remoteInterfaceParameters.size and remoteInterfaceParameters.size > 0 then + universe.formCommand.unit_count = remoteInterfaceParameters.size + else + universe.formCommand.unit_count = scaledWaveSize + end + + local foundUnits = surface.set_multi_command(universe.formCommand) + if (foundUnits > 0) then + squad.kamikaze = mRandom() < calculateKamikazeThreshold(foundUnits, universe) + + map.points = map.points - finalSquadCost + map.vengenceLimiter = mMax(0, map.vengenceLimiter - 2) + + squadCreated = true + universe.squadCount = universe.squadCount + 1 + universe.groupNumberToSquad[squad.groupNumber] = squad + + if tick and ((map.state == AI_STATE_AGGRESSIVE) or (map.state ==AI_STATE_GROWING)) then + map.squadsGenerated = (map.squadsGenerated or 0) + 1 -- this "attack-wave" only + chanceForAdditionalSquad = map.activeNests/15-map.squadsGenerated + if universe.aiPointsScaler > 1 then + chanceForAdditionalSquad = chanceForAdditionalSquad + universe.aiPointsScaler - 1 + end + chanceForAdditionalSquad = chanceForAdditionalSquad + map.points / 5000 + + local needMoreSuads + if chanceForAdditionalSquad<=0 then + needMoreSuads = false + elseif chanceForAdditionalSquad>=1 then + needMoreSuads = true + else + needMoreSuads = (mRandom()<=chanceForAdditionalSquad) + end + if not needMoreSuads then + map.squadsGenerated = 0 + + map.canAttackTick = randomTickEvent(tick, + AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION, + AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION) + end + end + if universe.aiPointsPrintSpendingToChat then + game.print(map.surface.name .. ": Points: -" .. finalSquadCost .. ". [Squad] Total: " .. string.format("%.2f", map.points) .. " [gps=" .. squadPosition.x .. "," .. squadPosition.y .. "]") + end + else + if (squad.group.valid) then + squad.group.destroy() + end + end + end + end + end + if remoteInterfaceParameters then + if squadCreated then + remoteInterfaceParameters.squad = squad + end + end + return squadCreated +end + + +aiAttackWaveG = aiAttackWave +return aiAttackWave diff --git a/RampantFixed/libs/AIPlanning.lua b/RampantFixed/libs/AIPlanning.lua new file mode 100644 index 00000000..0a1ae10f --- /dev/null +++ b/RampantFixed/libs/AIPlanning.lua @@ -0,0 +1,608 @@ +if aiPlanningG then + return aiPlanningG +end +local aiPlanning = {} + +-- imports + +local constants = require("Constants") +local mathUtils = require("MathUtils") +local config = require("__RampantFixed__/config") + +-- local aiPredicates = require("AIPredicates") + +-- constants + +local NO_RETREAT_BASE_PERCENT = constants.NO_RETREAT_BASE_PERCENT +local NO_RETREAT_EVOLUTION_BONUS_MAX = constants.NO_RETREAT_EVOLUTION_BONUS_MAX +local RAIDING_MINIMUM_BASE_THRESHOLD = constants.RAIDING_MINIMUM_BASE_THRESHOLD +local NO_POLLUTION_ATTACK_THRESHOLD = constants.NO_POLLUTION_ATTACK_THRESHOLD + +local AI_STATE_PEACEFUL = constants.AI_STATE_PEACEFUL +local AI_STATE_AGGRESSIVE = constants.AI_STATE_AGGRESSIVE +local AI_STATE_RAIDING = constants.AI_STATE_RAIDING +local AI_STATE_MIGRATING = constants.AI_STATE_MIGRATING +local AI_STATE_ONSLAUGHT = constants.AI_STATE_ONSLAUGHT +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE +local AI_STATE_GROWING = constants.AI_STATE_GROWING + +local AI_UNIT_REFUND = constants.AI_UNIT_REFUND + +local AI_MAX_POINTS = constants.AI_MAX_POINTS +local AI_POINT_GENERATOR_AMOUNT = constants.AI_POINT_GENERATOR_AMOUNT + +local AI_MIN_STATE_DURATION = constants.AI_MIN_STATE_DURATION +local AI_MAX_STATE_DURATION = constants.AI_MAX_STATE_DURATION + +local BASE_RALLY_CHANCE = constants.BASE_RALLY_CHANCE +local BONUS_RALLY_CHANCE = constants.BONUS_RALLY_CHANCE + +local RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN = constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN +local RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX = constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX +local MINIMUM_AI_POINTS = constants.MINIMUM_AI_POINTS + +local K_NO_ACTIVE_NESTS = constants.K_NO_ACTIVE_NESTS +local K_TOO_LOW_ACTIVE_NESTS = constants.K_TOO_LOW_ACTIVE_NESTS +local K_LOW_ACTIVE_NESTS = constants.K_LOW_ACTIVE_NESTS + + +-- imported functions + +local randomTickEvent = mathUtils.randomTickEvent + +local linearInterpolation = mathUtils.linearInterpolation + +local mFloor = math.floor + +local mRandom = math.random + +local mMax = math.max +local mMin = math.min + +-- module code + +local function getTimeStringFromTick(tick) + + local tickToSeconds = tick / 60 + + local days = math.floor(tickToSeconds / 86400) + local hours = math.floor((tickToSeconds % 86400) / 3600) + local minutes = math.floor((tickToSeconds % 3600) / 60) + local seconds = math.floor(tickToSeconds % 60) + return days .. "d " .. hours .. "h " .. minutes .. "m " .. seconds .. "s" +end + +local function getEvoAI(universe, evolution_factor, tick) + if universe.agressiveStart then + return mMax(evolution_factor,mMin(0.3, 0.1 + 0.2 * tick / 216000)) -- 432000 = 60*60*60 + end + return evolution_factor +end + +local function getMaxActiveRaidNests(universe) + local activeRaidNests = 0 + for mapId, map in pairs(universe.maps) do + if map and not map.suspended then + activeRaidNests = mMax(activeRaidNests, map.activeRaidNests) + end + end + return activeRaidNests +end + +function aiPlanning.planningUniverse(universe, evo, tick) + local evolution_factor = getEvoAI(universe, evo, tick) + universe.evolutionLevel = evolution_factor + local maxPoints = mMax(AI_MAX_POINTS * evolution_factor, MINIMUM_AI_POINTS) + universe.maxPoints = maxPoints + + local attackWaveMaxSize = config.getAttackWaveMaxSize(universe) + universe.retreatThreshold = linearInterpolation(evolution_factor, + RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN, + RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX) + universe.rallyThreshold = BASE_RALLY_CHANCE + (mMin(evolution_factor, 0.3) * BONUS_RALLY_CHANCE) + local vengefulnessModifier = settings.global["rampantFixed--vengenceProbabilityPercent"].value*25 -- 0.04 is default + if vengefulnessModifier ~= 1 then + universe.rallyThreshold = universe.rallyThreshold * vengefulnessModifier + end + universe.formSquadThreshold = mMax((0.35 * evolution_factor), 0.1) + local thresholdKf = 1 / mMin((1 + universe.retribution*0.01), 2.5) + universe.raiding_minimum_base_threshold = mFloor(RAIDING_MINIMUM_BASE_THRESHOLD * thresholdKf) + universe.no_pollution_attack_threshold = mFloor(NO_POLLUTION_ATTACK_THRESHOLD * thresholdKf) + + local newWaveSize + local evoForMaxWaveSize = mMin(evolution_factor / (universe.attackWaveMaxSizeEvoPercent * 0.01), 1) + newWaveSize = mMin(mMax(attackWaveMaxSize * (evoForMaxWaveSize ^ 1.4), getMaxActiveRaidNests(universe)*0.02), attackWaveMaxSize) + universe.attackWaveSize = newWaveSize + mMin(mFloor(universe.retribution*0.3), 50) + if (universe.attackWaveSize < 2) then + universe.attackWaveSize = 2 + end + newWaveSize = config.getAttackWaveSize(universe) -- if universe.externalControlValues.attackWaveSize defined, then use this value + + ---------- + local aiDifficultySquadCostModifier + if universe.aiDifficulty == "Hard" then + aiDifficultySquadCostModifier = 1 + mMax(newWaveSize / attackWaveMaxSize - 0.5, 0)*0.5 + else + aiDifficultySquadCostModifier = 1 + mMax(newWaveSize / attackWaveMaxSize - 0.3, 0)*2 + end + aiDifficultySquadCostModifier = aiDifficultySquadCostModifier * mMax(0.99^(mFloor(universe.retribution*0.1)), 0.5) + universe.finalSquadCost = mFloor(constants.AI_SQUAD_COST * aiDifficultySquadCostModifier) + universe.finalVengenceSquadCost = mFloor(constants.AI_VENGENCE_SQUAD_COST * aiDifficultySquadCostModifier) + ---------- + + universe.attackWaveDeviation = (newWaveSize * 0.333) + universe.attackWaveUpperBound = newWaveSize + (newWaveSize * 0.35) + + universe.settlerWaveSize = linearInterpolation(evolution_factor ^ 1.66667, + universe.expansionMinSize, + universe.expansionMaxSize) + universe.settlerWaveDeviation = (universe.settlerWaveSize * 0.33) + + universe.kamikazeThreshold = NO_RETREAT_BASE_PERCENT + (evolution_factor * NO_RETREAT_EVOLUTION_BONUS_MAX) + +end + + +function aiPlanning.updateBasesToGrow(map, tick, ingnoreGrowingState) + local universe = map.universe + local basesToGrowSize = 0 + universe.growingBasesIterator = nil + -- local basesIdList = "" -- debug + for baseId, base in pairs (map.basesToGrow) do + universe.growingBases[baseId] = nil + basesToGrowSize = basesToGrowSize + 1 + + -- -- debug + -- if basesIdList == "" then + -- basesIdList = tostring(baseId) + -- else + -- basesIdList = basesIdList .. ", " .. tostring(baseId) + -- end + end + -- game.print(" aiPlanning.updateBasesToGrow: clear bases, universe.growingBases = "..serpent.dump(universe.growingBases)) + -- game.print(" aiPlanning.updateBasesToGrow: clear bases, map.basesToGrow = "..basesIdList) + -- + + if (basesToGrowSize > 0) and ((map.state == AI_STATE_GROWING) or ingnoreGrowingState)then + growCnt = mRandom(mMin(basesToGrowSize, 3)) + local growIndexes = mathUtils.getRandomElementIndexes(map.basesToGrow, growCnt) + -- game.print(" aiPlanning.updateBasesToGrow:growIndexes "..serpent.dump(growIndexes)) -- debug + for i = 1, #growIndexes do + local baseId = growIndexes[i] + universe.growingBases[baseId] = {tick = tick} + -- game.print("base #"..baseId.." selected to grow") -- debug + end + end +end + +local function planningMap(map, evolution_factor, tick) + local activeRaidNests = map.activeRaidNests + local activeNests = map.activeNests + local universe = map.universe + + map.evolutionLevel = evolution_factor + local activeRaidNests_evo = activeRaidNests + mMin(mFloor(evolution_factor*50), 30) + + local noActiveNests = (activeNests < mFloor(activeRaidNests_evo/K_NO_ACTIVE_NESTS)) + local tooLowActiveNests = (activeNests < mFloor(activeRaidNests_evo/K_TOO_LOW_ACTIVE_NESTS)) + local lowActiveNests = (activeNests < mFloor(activeRaidNests_evo/K_LOW_ACTIVE_NESTS)) + local activeNestsModified = mMax(mMin(universe.retribution, 1)*60, activeNests) + + + if not map.state then + map.state = AI_STATE_AGGRESSIVE + end + + local maxPoints = universe.maxPoints + local maxOverflowPoints = maxPoints * 3 + + local points = mMin(universe.evolutionLevel, 1)*100 + (activeNestsModified * 2) + mMin(universe.evolutionLevel*100, activeRaidNests)*0.1 + if (map.temperament < 0.05) then -- settlers cost a lot AP + points = points + 180 + elseif map.temperament > 0.95 then + points = points + 120 + elseif (map.temperament < 0.25) or (map.temperament > 0.75) then + points = points + 90 + elseif (map.temperament < 0.40) or (map.temperament > 0.60) then + points = points + 60 + end + if points > 1200 then + points = 1200 + end + + if (map.state == AI_STATE_ONSLAUGHT) then + points = points * 2 + end + + if (map.pointsTick) and (tick > map.pointsTick) then + points = math.floor(points * universe.aiPointsScaler * ((tick - map.pointsTick)/360))*0.1 + else + points = 0 + end + map.pointsTick = tick + + local currentPoints = map.points + + if (currentPoints < maxPoints) then + map.points = currentPoints + points + end + + if (currentPoints > maxOverflowPoints) then + map.points = maxOverflowPoints + end + + local mapState = map.state + local mapStateChanged = false + + if (map.surface.index == 1) and (map.stateTick == 0) and (tick<=72000) and (universe.peacefulAIToggle) then + if not (map.state == AI_STATE_PEACEFUL) and settings.global["rampantFixed--peacePeriod"].value > 0 then + game.print(":"..map.surface.name.." surface. Passive mode for the first ".. settings.global["rampantFixed--peacePeriod"].value.." minutes") + map.state = AI_STATE_PEACEFUL + map.stateTick = settings.global["rampantFixed--peacePeriod"].value*3600 + end + elseif (universe.aiNocturnalMode and map.surface.darkness < 0.65) -- if daytime and aiNocturnalMode... + and (tick>216000) + and universe.siegeAIToggle + and (activeRaidNests > 0) + then + if (map.stateTick <= tick) then + map.state = AI_STATE_SIEGE + mapStateChanged = true + end + else + if (map.stateTick <= tick) then + -- + local basesToGrowCnt = table_size(map.basesToGrow) + -- + local roll = mRandom() + if (basesToGrowCnt > 0) and (mRandom() < 0.1) and (tick>36000) then -- dont use "roll" variable here + map.state = AI_STATE_GROWING + mapStateChanged = true + elseif (map.temperament < 0.05) then -- 0 - 0.05 + if universe.enabledMigration then + if (roll < 0.7) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + else + map.state = AI_STATE_MIGRATING + end + else + if universe.raidAIToggle then + if roll < 0.85 then + map.state = AI_STATE_AGGRESSIVE + else + map.state = AI_STATE_RAIDING + end + else + map.state = AI_STATE_AGGRESSIVE + end + end + elseif (map.temperament < 0.20) then -- 0.05 - 0.2 + if (universe.enabledMigration) then + if (roll < 0.4) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif (roll < 0.6) and universe.raidAIToggle then + map.state = AI_STATE_RAIDING + else + map.state = AI_STATE_MIGRATING + end + else + if (roll < 0.2) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif universe.raidAIToggle then + if (roll < 0.95) then + map.state = AI_STATE_AGGRESSIVE + else + map.state = AI_STATE_RAIDING + end + else + map.state = AI_STATE_AGGRESSIVE + end + end + elseif (map.temperament < 0.4) then -- 0.2 - 0.4 + if (universe.enabledMigration) then + if (roll < 0.2) then + map.state = AI_STATE_AGGRESSIVE + elseif (roll < 0.4) and universe.raidAIToggle then + map.state = AI_STATE_RAIDING + elseif (roll < 0.6) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif (roll < 0.8) then + map.state = AI_STATE_MIGRATING + elseif universe.peacefulAIToggle and (map.destroyPlayerBuildings > 0) then + map.state = AI_STATE_PEACEFUL + else + map.state = AI_STATE_MIGRATING + end + else + if (roll < 0.6) then + map.state = AI_STATE_AGGRESSIVE + elseif universe.peacefulAIToggle and (map.destroyPlayerBuildings > 0) then + map.state = AI_STATE_PEACEFUL + else + map.state = AI_STATE_AGGRESSIVE + end + end + elseif (map.temperament < 0.6) then -- 0.4 - 0.6 + if (roll < 0.6) then + map.state = AI_STATE_AGGRESSIVE + elseif universe.siegeAIToggle and (roll < 0.65) then + map.state = AI_STATE_SIEGE + elseif universe.peacefulAIToggle and (map.destroyPlayerBuildings > 0) then + map.state = AI_STATE_PEACEFUL + else + if universe.enabledMigration then + map.state = AI_STATE_MIGRATING + else + map.state = AI_STATE_AGGRESSIVE + end + end + elseif (map.temperament < 0.8) then -- 0.6 - 0.8 + if (roll < 0.4) then + map.state = AI_STATE_AGGRESSIVE + elseif (roll < 0.6) then + map.state = AI_STATE_ONSLAUGHT + elseif (roll < 0.8) then + if universe.raidAIToggle then + map.state = AI_STATE_RAIDING + else + map.state = AI_STATE_AGGRESSIVE + end + elseif universe.peacefulAIToggle and (map.destroyPlayerBuildings > 0) then + map.state = AI_STATE_PEACEFUL + else + map.state = AI_STATE_AGGRESSIVE + end + elseif (map.temperament < 0.95) then -- 0.8 - 0.95 + if (universe.enabledMigration and universe.raidAIToggle) then + if (roll < 0.20) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif (roll < 0.45) then + map.state = AI_STATE_RAIDING + elseif (roll < 0.85) then + map.state = AI_STATE_ONSLAUGHT + else + map.state = AI_STATE_AGGRESSIVE + end + elseif (universe.enabledMigration) then + if (roll < 0.20) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif (roll < 0.75) then + map.state = AI_STATE_ONSLAUGHT + else + map.state = AI_STATE_AGGRESSIVE + end + elseif (universe.raidAIToggle) then + if (roll < 0.45) then + map.state = AI_STATE_ONSLAUGHT + elseif (roll < 0.75) then + map.state = AI_STATE_RAIDING + else + map.state = AI_STATE_AGGRESSIVE + end + else + if (roll < 0.65) then + map.state = AI_STATE_ONSLAUGHT + else + map.state = AI_STATE_AGGRESSIVE + end + end + else + if (universe.enabledMigration and universe.raidAIToggle) then + if (roll < 0.30) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + elseif (roll < 0.65) then + map.state = AI_STATE_RAIDING + else + map.state = AI_STATE_ONSLAUGHT + end + elseif (universe.enabledMigration) then + if (roll < 0.30) and universe.siegeAIToggle then + map.state = AI_STATE_SIEGE + else + map.state = AI_STATE_ONSLAUGHT + end + elseif (universe.raidAIToggle) then + if (roll < 0.45) then + map.state = AI_STATE_ONSLAUGHT + else + map.state = AI_STATE_RAIDING + end + else + map.state = AI_STATE_ONSLAUGHT + end + end + + + + -- post-processing + roll = mRandom() + if map.state == AI_STATE_ONSLAUGHT then + if activeNests< 70 and (universe.retribution < 1) then + map.state = AI_STATE_AGGRESSIVE + end + elseif map.state == AI_STATE_SIEGE then + -- if tick<=216000 or ((not lowActiveNests) and (activeRaidNests< 40)) then -- no siege if 1'st hour (60*60*60) + -- if universe.raidAIToggle and (roll<0.5) then + -- map.state = AI_STATE_RAIDING + -- else + -- map.state = AI_STATE_AGGRESSIVE + -- end + -- end + else + if universe.siegeAIToggle and (tick>216000) then + if (map.state == AI_STATE_MIGRATING) and lowActiveNests then + map.state = AI_STATE_SIEGE + elseif (map.state == AI_STATE_AGGRESSIVE) and ( + (noActiveNests or (tooLowActiveNests and (roll<0.3)) or (lowActiveNests and (roll< (0.05 + mMin(0.1,activeRaidNests*0.00005))) )) + ) then + map.state = AI_STATE_SIEGE + end + end + if (universe.raidAIToggle) then + if (map.state == AI_STATE_AGGRESSIVE) + and ( + ((activeNests == 0) and (activeRaidNests > 0)) + or tooLowActiveNests + or ((map.points>=maxPoints*0.9) and ((roll> 0.3) and (roll< 0.6))) + ) + then + map.state = AI_STATE_RAIDING + end + end + end + + if (universe.retribution < 1) and (map.state == AI_STATE_ONSLAUGHT) and (mapState == AI_STATE_ONSLAUGHT) then + if universe.raidAIToggle then + map.state = AI_STATE_RAIDING + else + map.state = AI_STATE_AGGRESSIVE + end + end + ------ + mapStateChanged = true + end + end + + if mapStateChanged then + map.squadsGenerated = 0 + map.destroyPlayerBuildings = 0 + map.lostEnemyUnits = 0 + map.lostEnemyBuilding = 0 + map.rocketLaunched = 0 + map.builtEnemyBuilding = 0 + map.ionCannonBlasts = 0 + map.artilleryBlasts = 0 + + aiPlanning.updateBasesToGrow(map, tick, false) + + map.stateTick = randomTickEvent(tick, AI_MIN_STATE_DURATION, AI_MAX_STATE_DURATION) + elseif map.stateTick < tick then + map.stateTick = randomTickEvent(tick, AI_MIN_STATE_DURATION, AI_MAX_STATE_DURATION) + end + + + if universe.printAIStateChanges and game.tick % 3600 == 0 then + game.print(map.surface.name .. ": AI is now: " .. constants.stateEnglish[map.state] .. ", Next state change is in " .. string.format("%.2f", (map.stateTick - tick) / (60*60)) .. " minutes @ " .. getTimeStringFromTick(map.stateTick) .. " playtime") + end +end + +local function temperamentPlanner(map) + local destroyPlayerBuildings = map.destroyPlayerBuildings + local lostEnemyUnits = map.lostEnemyUnits + local lostEnemyBuilding = map.lostEnemyBuilding + local rocketLaunched = map.rocketLaunched + local builtEnemyBuilding = map.builtEnemyBuilding + local ionCannonBlasts = map.ionCannonBlasts + local artilleryBlasts = map.artilleryBlasts + local activeNests = map.activeNests + local activeRaidNests = map.activeRaidNests + + local currentTemperament = map.temperamentScore + local delta = 0 + + local universe = map.universe + + local evoK + if map.evolutionLevel < 0.3 then + evoK = 0.025 + elseif map.evolutionLevel < 0.5 then + evoK = 0.0125 + elseif map.evolutionLevel < 0.7 then + evoK = 0.00625 + elseif map.evolutionLevel < 0.9 then + evoK = 0.003125 + elseif map.evolutionLevel < 0.95 then + evoK = 0.0015625 + else + evoK = 0.00078125 + end + local balancingK = 0.5 + local attackWaveSize = config.getAttackWaveSize(universe) + if attackWaveSize > 0 then + evoK = balancingK * evoK + end + if universe.aiPointsScaler > 1 then + evoK = evoK / universe.aiPointsScaler + end + if attackWaveSize > 75 then + evoK = evoK * (75 / attackWaveSize) + end + local LEU_evo = lostEnemyUnits * evoK + + local AN = mMax(activeNests - destroyPlayerBuildings*0.5 - lostEnemyBuilding*1.5 - LEU_evo, 0) + local newTemp + local ARN_AN = 0 + if AN == 0 then + ARN_AN = 1000 + else + ARN_AN = activeRaidNests/AN + end + if ARN_AN>=1000 then + newTemp = 0 + elseif ARN_AN >= K_NO_ACTIVE_NESTS then -- 40 - 1000 + local percent = (ARN_AN - K_NO_ACTIVE_NESTS) / (1000 - K_NO_ACTIVE_NESTS) + newTemp = linearInterpolation(percent, 0.05, 0) -- ARN_AN = 40 =>0.05, ARN_AN = 1000 => 0 + elseif ARN_AN >= K_TOO_LOW_ACTIVE_NESTS then -- 20 - 40 + local percent = (ARN_AN - K_TOO_LOW_ACTIVE_NESTS) / (K_NO_ACTIVE_NESTS - K_TOO_LOW_ACTIVE_NESTS) + newTemp = linearInterpolation(percent, 0.2, 0.05) + elseif ARN_AN >= K_LOW_ACTIVE_NESTS then -- 10 - 20 + local percent = (ARN_AN - K_LOW_ACTIVE_NESTS) / (K_TOO_LOW_ACTIVE_NESTS - K_LOW_ACTIVE_NESTS) + newTemp = linearInterpolation(percent, 0.7, 0.2) + elseif ARN_AN >= (K_LOW_ACTIVE_NESTS*0.5) then -- 5 - 10 + local percent = (ARN_AN - (K_LOW_ACTIVE_NESTS*0.5)) / (K_LOW_ACTIVE_NESTS-(K_LOW_ACTIVE_NESTS*0.5)) + newTemp = linearInterpolation(percent, 0.95, 0.7) + elseif ARN_AN >= 1 then -- 1 - 5 + local percent = (ARN_AN - 1) / ((K_LOW_ACTIVE_NESTS*0.5)-1) + newTemp = linearInterpolation(percent, 1, 0.95) + else + newTemp = 1 + end + map.temperament = newTemp + + if universe.debugTemperament then + if game.tick % 1800 == 0 then + game.print("Rampant Stats:") + game.print("aN:" .. map.activeNests .. ", aRN:" .. map.activeRaidNests .. ", dPB:" .. map.destroyPlayerBuildings .. + ", lEU:" .. map.lostEnemyUnits .."(evoK="..evoK..", LEU_evo:"..LEU_evo.. "), lEB:" .. map.lostEnemyBuilding ..", ARN_AN:"..ARN_AN) + game.print("temp: " .. map.temperament .. "-->" .. newTemp .. ", points:" .. math.floor(map.points).."/"..math.floor(universe.maxPoints).. ", state:" .. constants.stateEnglish[map.state] .. ", surface:" .. map.surface.index .. " [" .. map.surface.name .. "]") + game.print("aS:" .. universe.squadCount .. ", aB:" .. universe.builderCount .. ", atkSize:" .. attackWaveSize .. ", stlSize:" .. universe.settlerWaveSize .. ", formGroup:" .. universe.formSquadThreshold + .. ", Rtrb = "..universe.retribution) + + game.print("Next state change is in " .. string.format("%.2f", (map.stateTick - game.tick) / (60*60))) + end + end +end + +-- universe.evolutionLevel - takes into account the setting "rampantFixed--agressiveStart". Affects squad size and AI behavior +-- map.evolutionLevel - equals the actual evolution. Affects biter tier and nest/worm levels +function aiPlanning.processMapAIs(universe, evo, tick) + aiPlanning.planningUniverse(universe, evo, tick) + + local mapId = universe.processMapAIIterator + local map + if not mapId then + mapId, map = next(universe.maps, nil) + else + map = universe.maps[mapId] + end + + local mapCnt = 0 + while mapId do + if map then + if not map.suspended then + planningMap(map, evo, tick) + temperamentPlanner(map) + end + end + mapId, map = next(universe.maps, mapId) + mapCnt = mapCnt + 1 + if (mapCnt>=15) then + break + end + end + + universe.processMapAIIterator = mapId +end + +aiPlanningG = aiPlanning +return aiPlanning diff --git a/RampantFixed/libs/AIPredicates.lua b/RampantFixed/libs/AIPredicates.lua new file mode 100644 index 00000000..7c27292d --- /dev/null +++ b/RampantFixed/libs/AIPredicates.lua @@ -0,0 +1,52 @@ +if (aiPredicatesG) then + return aiPredicatesG +end +local aiPredicates = {} + +-- imports + +local constants = require("Constants") + +-- constants + +local AI_STATE_RAIDING = constants.AI_STATE_RAIDING +local AI_STATE_AGGRESSIVE = constants.AI_STATE_AGGRESSIVE +local AI_STATE_MIGRATING = constants.AI_STATE_MIGRATING +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE +local AI_STATE_ONSLAUGHT = constants.AI_STATE_ONSLAUGHT +local AI_STATE_GROWING = constants.AI_STATE_GROWING + +-- imported functions + +-- module code + +function aiPredicates.canAttack(map, tick) + local surface = map.surface + if surface.peaceful_mode then + return false + end + if map.universe.aiNocturnalMode and (surface.darkness <= 0.65) then + return false + end + + local goodAI = (((map.state == AI_STATE_AGGRESSIVE) and (map.canAttackTick < tick)) or + (map.state == AI_STATE_RAIDING) or + (map.state == AI_STATE_SIEGE) or + (map.state == AI_STATE_MIGRATING) or + (map.state == AI_STATE_ONSLAUGHT) or + (map.state == AI_STATE_GROWING) + ) + return goodAI +end + +function aiPredicates.canMigrate(map) + local surface = map.surface + local universe = map.universe + local nocturalMode = universe.aiNocturnalMode + local goodAI = (map.state == AI_STATE_MIGRATING) or (map.state == AI_STATE_SIEGE) + local noctural = (not nocturalMode) or (nocturalMode and surface.darkness > 0.65) + return goodAI and universe.expansion and not surface.peaceful_mode and noctural +end + +aiPredicatesG = aiPredicates +return aiPredicates diff --git a/RampantFixed/libs/BaseUtils.lua b/RampantFixed/libs/BaseUtils.lua new file mode 100644 index 00000000..5af198ce --- /dev/null +++ b/RampantFixed/libs/BaseUtils.lua @@ -0,0 +1,1569 @@ +if baseUtilsG then + return baseUtilsG +end +local baseUtils = {} + +-- imports + +local mathUtils = require("MathUtils") +local constants = require("Constants") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local mapUtils = require("MapUtils") + +-- constants + +local FACTION_CHANGING_MAPPING = constants.FACTION_CHANGING_MAPPING +local FACTION_EVOLVE_MAPPING = constants.FACTION_EVOLVE_MAPPING + +local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER + +local BASE_AI_STATE_ACTIVE = constants.BASE_AI_STATE_ACTIVE +local BASE_AI_STATE_MUTATE = constants.BASE_AI_STATE_MUTATE +local BASE_EVOLVE_THRESHOLD = constants.BASE_EVOLVE_THRESHOLD +local GLOBAL_EVOLVE_COOLDOWN = constants.GLOBAL_EVOLVE_COOLDOWN + +local FACTION_SET = constants.FACTION_SET + +local BASE_DEADZONE_TTL = constants.BASE_DEADZONE_TTL + +local BASE_AI_MIN_STATE_DURATION = constants.BASE_AI_MIN_STATE_DURATION +local BASE_AI_MAX_STATE_DURATION = constants.BASE_AI_MAX_STATE_DURATION + +local HIVE_BUILDINGS_COST = constants.HIVE_BUILDINGS_COST + +local BASE_DISTANCE_THRESHOLD = constants.BASE_DISTANCE_THRESHOLD +local BASE_DISTANCE_LEVEL_BONUS = constants.BASE_DISTANCE_LEVEL_BONUS +local BASE_DISTANCE_TO_EVO_INDEX = constants.BASE_DISTANCE_TO_EVO_INDEX + +local BASE_COLLECTION_THRESHOLD = constants.BASE_COLLECTION_THRESHOLD + +local CHUNK_SIZE = constants.CHUNK_SIZE + +-- imported functions + +local randomTickEvent = mathUtils.randomTickEvent +local euclideanDistancePoints = mathUtils.euclideanDistancePoints + +local getChunkByPosition = mapUtils.getChunkByPosition + +local gaussianRandomRange = mathUtils.gaussianRandomRange + +local linearInterpolation = mathUtils.linearInterpolation + +local mFloor = math.floor + +local mMin = math.min +local mMax = math.max +local distort = mathUtils.distort + +local getChunkBase = chunkPropertyUtils.getChunkBase +local setChunkBase = chunkPropertyUtils.setChunkBase +local getResourceGenerator = chunkPropertyUtils.getResourceGenerator +local getNestCount = chunkPropertyUtils.getNestCount +local getHiveCount = chunkPropertyUtils.getHiveCount +local getTurretCount = chunkPropertyUtils.getTurretCount +local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount +local getNestActiveness = chunkPropertyUtils.getNestActiveness + +local next = next + +local mRandom = math.random + +-- module code + +local function evoToTier(universe, evolutionFactor) + local v + for i=10,1,-1 do + if universe.evoToTierMapping[i] <= evolutionFactor then + v = i + if mRandom() <= 0.65 then + break + end + end + end + return v +end + +-- + !ΠšΠ”Π 2021.11 +local function evoToTierNorandom(universe, evolutionFactor) + local v + for i=10,1,-1 do + if universe.evoToTierMapping[i] <= evolutionFactor then + v = i + break + end + end + return v +end +-- - !ΠšΠ”Π 2021.11 + +function baseUtils.findNearbyBase(map, chunk, maxDistance, baseChangingChance) + local x = chunk.x + local y = chunk.y + + local closest = MAGIC_MAXIMUM_NUMBER + local foundBase = getChunkBase(map, chunk) + if not foundBase then + if baseChangingChance and (mRandom() < baseChangingChance) then + return nil + else + local bases = map.universe.bases + local basesScanned = 0 + for i, base in pairs(bases) do + if base.mapIndex == map.surface.index then + basesScanned = basesScanned + 1 + local distance = euclideanDistancePoints(base.x, base.y, x, y) + if (distance <= base.distanceThreshold) and (distance < closest) then + closest = distance + foundBase = bases[i] --base + end + end + end + if maxDistance and (closest > maxDistance) then + foundBase = nil + end + end + end + return foundBase +end + +-- + !ΠšΠ”Π 2021.11 +-- return faction name. +local function getFactionFromAligment(baseAlignment) + if not baseAlignment then + return "neutral" + end + local factions = {} + local factionTotal = 0 + local ratesTotal = 0 + for faction, rate in pairs(baseAlignment) do + factionTotal = factionTotal + 1 + factions[factionTotal] = faction + ratesTotal = ratesTotal + mMax(rate,0) + end + if factionTotal == 0 then + return "neutral" + end + if factionTotal == 1 then + return factions[1] + end + + local roll = mRandom()*ratesTotal + for faction, rate in pairs(baseAlignment) do + roll = roll - mMax(rate,0) + if (roll <= 0) then + return faction + end + end + return factions[1] +end +-- - !ΠšΠ”Π 2021.11 + +-- return faction name. "neutral", "troll, etc.. +local function findBaseMutation(map, targetEvolution, targetTier) + local universe = map.universe + local tier + if targetTier then + tier = targetTier + else + tier = evoToTierNorandom(universe, targetEvolution or map.evolutionLevel) + end + + local alignments = universe.evolutionTableAlignment[tier] + local roll = mRandom() + for i=1,#alignments do + local alignment = alignments[i] + + roll = roll - alignment[1] + + if (roll <= 0) then + return alignment[2] + end + end + return (alignments[#alignments] or "neutral") +end + +-- example: exceptFactions = {"neutral", "acid"} +-- alignments[x] = {0.2, "neutral"}... +-- filteredAligments{neutral = 0.2, acid = 0.1, ...} +-- mutationRates = {n1, n2,...} ==> return {faction1 = n1, faction2 = n2,...} +-- return {troll = 1, electic = 1,...} +local function findBaseMutations(map, targetEvolution, targetTier, mutationCount, mutationRates,exceptFactions) + local universe = map.universe + local tier + if targetTier then + tier = targetTier + else + tier = evoToTierNorandom(universe, targetEvolution or map.evolutionLevel) + end + local alignments = universe.evolutionTableAlignment[tier] + + local filteredAligments = {} + local aligmentsCount = 0 + local ratesSum = 0 + for i=1,#alignments do + local alignment = alignments[i] + local FactionEnabled = true + if exceptFactions then + for u=1,#exceptFactions do + if alignment[2] == exceptFactions[u] then + FactionEnabled = false + break + end + end + end + if FactionEnabled then + aligmentsCount = aligmentsCount + 1 + ratesSum = ratesSum + alignment[1] + filteredAligments[alignment[2]] = alignment[1] + end + end + + + local maxMutations = 1 + if mutationCount then + maxMutations = mutationCount + end + local result = {} + for u = 1, maxMutations do + local roll = mRandom()*ratesSum + for faction, rate in pairs(filteredAligments) do + local alignment = alignments[i] + roll = roll - filteredAligments[faction] + if (roll <= 0) then + if mutationRates and mutationRates[u] then + result[faction] = mutationRates[u] + else + result[faction] = 1 + end + + aligmentsCount = aligmentsCount - 1 + ratesSum = ratesSum - filteredAligments[faction] + filteredAligments[faction] = nil + break + end + end + if aligmentsCount == 0 then + break + end + end + return result +end + +local function initialEntityUpgrade(faction, tier, maxTier, map, useHiveType) + local evolutionTable = map.universe.buildingEvolveLookup + local entity + + local useTier + + local tierRoll = mRandom() + if (tierRoll < 0.4) then + useTier = maxTier + elseif (tierRoll < 0.7) then + useTier = mMax(maxTier - 1, tier) + elseif (tierRoll < 0.9) then + useTier = mMax(maxTier - 2, tier) + else + useTier = mMax(maxTier - 3, tier) + end + + local upgradesTier = evolutionTable[faction] + if not upgradesTier then + upgradesTier = evolutionTable["neutral"] + end + local upgrades = upgradesTier[useTier] + + if upgrades then + if useHiveType then + for ui=1,#upgrades do + local upgrade = upgrades[ui] + if upgrade[3] == useHiveType then + entity = upgrade[2][mRandom(#upgrade[2])] + break + end + end + end + if not entity then + local roll = mRandom() + + for ui=1,#upgrades do + local upgrade = upgrades[ui] + + roll = roll - upgrade[1] + + if (roll <= 0) then + entity = upgrade[2][mRandom(#upgrade[2])] + break + end + end + end + end + + return entity +end + +local function entityEvolve(originalEntity, map) + local universe = map.universe + local hiveType = universe.buildingHiveTypeLookup[originalEntity.name] + if not hiveType then + return originalEntity.name + end + local mapTypes = FACTION_EVOLVE_MAPPING[hiveType] + if not mapTypes then + return originalEntity.name + end + + local faction = universe.enemyAlignmentLookup[originalEntity.name] + if not faction then + return originalEntity.name + end + + local tier = universe.buildingTierLookup[originalEntity.name] + if not tier then + return originalEntity.name + end + + + local evolutionTable = map.universe.buildingEvolveLookup + local upgradesTier = evolutionTable[faction] + if not upgradesTier then + upgradesTier = evolutionTable["neutral"] + end + local upgrades = upgradesTier[tier] + if not upgrades then + return originalEntity.name + end + + -- example: evolutionTable["troll"][3][1]={0.1, buildingSet, "biter-spawner"} (tier 3) + + local factionUpgrades = {} + local ratesSum = 0 + for i=1, #upgrades do + local upgrade = upgrades[i] + if mapTypes[upgrade[3]] then + ratesSum = ratesSum + upgrade[1] + factionUpgrades[#factionUpgrades+1] = {upgrade[1], upgrade[2], upgrade[3]} + end + end + local initRoll = mRandom()*ratesSum + local roll = initRoll + 0 + for i = 1,#factionUpgrades do + local upgrade = factionUpgrades[i] + roll = roll - upgrade[1] + if roll<=0 then + local buildingSet = upgrade[2] +-- if (upgrade[3]~= hiveType) and (oldFaction==faction) then +-- game.print("entityUpgrade---------------start") + -- for u = 1,#factionUpgrades do + -- game.print(""..u..":"..factionUpgrades[u][1].."," .. factionUpgrades[u][3]..( (u == 1 and "<--here") or "")) + -- end +-- game.print("entityUpgrade---------------end") +-- end + return buildingSet[mRandom(#buildingSet)] + end + end + + return originalEntity.name + +end + + +local function entityUpgrade(faction, tier, maxTier, originalEntity, map) + local universe = map.universe + local hiveType = universe.buildingHiveTypeLookup[originalEntity.name] + if not hiveType then + return originalEntity.name + end + + local oldFaction = universe.enemyAlignmentLookup[originalEntity.name] + local mapTypes = {} + if oldFaction==faction then + mapTypes[hiveType] = 0 + else + mapTypes = FACTION_CHANGING_MAPPING[hiveType] + if not mapTypes then + return originalEntity.name + end + end + + local useTier + if tier == maxTier then + useTier = maxTier + else + local tierRoll = mRandom() + if (tierRoll < 0.4) then + useTier = maxTier + elseif (tierRoll < 0.7) then + useTier = mMax(maxTier - 1, tier) + elseif (tierRoll < 0.9) then + useTier = mMax(maxTier - 2, tier) + else + useTier = mMax(maxTier - 3, tier) + end + end + + local evolutionTable = map.universe.buildingEvolveLookup + if not evolutionTable[faction] then + return originalEntity.name + end + local upgrades = evolutionTable[faction][useTier] + if not upgrades then + return originalEntity.name + end + + -- example: evolutionTable["troll"][3][1]={0.1, buildingSet, "biter-spawner"} (tier 3) + local factionUpgrades = {} + local ratesSum = 0 + for i=1, #upgrades do + local upgrade = upgrades[i] + if mapTypes[upgrade[3]] then + ratesSum = ratesSum + upgrade[1] + factionUpgrades[#factionUpgrades+1] = {upgrade[1], upgrade[2], upgrade[3]} + end + end + local initRoll = mRandom()*ratesSum + local roll = initRoll + 0 + for i = 1,#factionUpgrades do + local upgrade = factionUpgrades[i] + roll = roll - upgrade[1] + if roll<=0 then + local buildingSet = upgrade[2] +-- if (upgrade[3]~= hiveType) and (oldFaction==faction) then +-- game.print("entityUpgrade---------------start") + -- for u = 1,#factionUpgrades do + -- game.print(""..u..":"..factionUpgrades[u][1].."," .. factionUpgrades[u][3]..( (u == 1 and "<--here") or "")) + -- end +-- game.print("entityUpgrade---------------end") +-- end + return buildingSet[mRandom(#buildingSet)] + end + end + return originalEntity.name +end + +local function findEntityUpgrade(faction, currentEvo, evoIndex, originalEntity, map, evolve) + local universe = map.universe + local adjCurrentEvo = mMax( + ((faction ~= universe.enemyAlignmentLookup[originalEntity.name]) and 0) or currentEvo, + 0 + ) + + local tier = evoToTier(universe, adjCurrentEvo) + local maxTier = evoToTierNorandom(universe, evoIndex) + + if (tier > maxTier) then + tier = maxTier +-- return nil + end + + if evolve then + local chunk = getChunkByPosition(map, originalEntity.position) + local makeHive = false + if not chunk == -1 then + if getResourceGenerator(map, chunk) > 0 then + if mRandom() < 0.2 then + makeHive = true + end + else + if mRandom() < 0.02 then + makeHive = true + end + end + end + return initialEntityUpgrade(faction, tier, maxTier, map, (makeHive and "hive")) + else + return entityUpgrade(faction, tier, maxTier, originalEntity, map) + end +end + +local function findBaseInitialAlignment(map, evoIndex) + local dev = evoIndex * 0.3 + local evoTop = evoIndex + + local result + if mRandom() < 0.05 then + result = findBaseMutations(map, evoTop, nil, 2, {0.5, 0.5}) --{troll = 0.5, acid = 0.5} -- + !ΠšΠ”Π 2021.11 + else + result = findBaseMutations(map, evoTop, nil, 2, {0.8, 0.2}) + end + + return result +end + +function baseUtils.recycleBases(universe) + if not universe.bases then + return + end + local bases = universe.bases + local id = universe.recycleBaseIterator + if not id then + id, base = next(bases, nil) + end + if not id then + universe.recycleBaseIterator = nil + else + local base + base = bases[id] + if base then + local map = universe.maps[base.mapIndex] + if not map then + universe.growingBases[id] = nil + if universe.growingBasesIterator == id then + universe.growingBasesIterator = nil + end + bases[id] = nil + return + end + for chunk, _ in pairs(base.chunks) do + chunkBase = getChunkBase(map, chunk) + if (not chunkBase) then + setChunkBase(map, chunk, base) + --game.print("restore lost chunk [gps=" .. chunk.x .. "," .. chunk.y .."] to base [gps=" .. base.x .. "," .. base.y .."]") -- debug + elseif chunkBase.id ~= base.id then + base.chunks[chunk] = nil + chunkBase.chunks[chunk] = true + --game.print("reassign chunk [gps=" .. chunk.x .. "," .. chunk.y .."]".." from [gps=" .. base.x .. "," .. base.y .."] to [gps=" .. chunkBase.x .. "," .. chunkBase.y .."]") -- debug + end + end + + local chunk = next(base.chunks, nil) + if not chunk then + --game.print("recycled base [gps=" .. base.x .. "," .. base.y .."]".. serpent.dump(base.chunks)) -- debug + universe.growingBases[id] = nil + if universe.growingBasesIterator == id then + universe.growingBasesIterator = nil + end + map.basesToGrow[id] = nil + bases[id] = nil + end + end + universe.recycleBaseIterator = next(bases, id) + end +end + + +local function deleteAssociatedUnits(entity) + if entity.valid and (entity.type == "unit-spawner") then + if entity.units then + for i, unit in pairs(entity.units) do + if unit and unit.valid and (unit.type == "unit") and (not unit.unit_group) then + unit.destroy() --unit.die(unit.force) + end + end + end + end +end + +-- baseAlignment{fire = 0.8, acid = 0.2,...} +function baseUtils.upgradeEntity(entity, baseAlignment, map, disPos, evolve, addEntity) + local surface = map.surface + local position = entity.position + local currentEvo = (addEntity and 0) or entity.prototype.build_base_evolution_requirement or 0 + local universe = map.universe + + local faction + if type(baseAlignment)=="string" then + faction = baseAlignment + else + faction = getFactionFromAligment(baseAlignment) + end + + if not faction then + if not addEntity then + entity.destroy() + end + return nil + end + + local distance = mMin(1, euclideanDistancePoints(position.x, position.y, 0, 0) * BASE_DISTANCE_TO_EVO_INDEX) + local evoIndex = mMax(distance, map.evolutionLevel) + + local spawnerName = findEntityUpgrade(faction, + currentEvo, + evoIndex, + entity, + map, + evolve) + + + if spawnerName and (addEntity or (spawnerName~=entity.name)) then + --game.print(entity.name.."->"..spawnerName.." [gps=" .. entity.position.x .. "," .. entity.position.y .."]") -- debug + if not addEntity then + deleteAssociatedUnits(entity) + entity.destroy() + end + local name = universe.buildingSpaceLookup[spawnerName] or spawnerName + local query = universe.upgradeEntityQuery + query.name = name + query.position = disPos or position + + if addEntity or (not surface.can_place_entity(query)) then + local newPosition = surface.find_non_colliding_position( + (addEntity and "chunk-scanner-squad-rampant") or name, + disPos or position, + CHUNK_SIZE, + 1, + true + ) + -- if addEntity then + -- game.print(entity.name.."baseUtils.upgradeEntity: add source = "..entity.name .." [gps=" .. entity.position.x .. "," .. entity.position.y .."]") -- debug + -- end + if addEntity and not newPosition then + return nil + end + query.position = newPosition or disPos or position + end + + query.name = spawnerName + if remote.interfaces["kr-creep"] then + remote.call("kr-creep", "spawn_creep_at_position", surface, query.position) + end + + local newEntity = surface.create_entity(query) + return newEntity + + end + return nil +end + +function baseUtils.evolveEntity(entity, map) + if not entity.valid then + return nil + end + + local oldName = entity.name + local spawnerName = entityEvolve(entity, map) + if spawnerName and (spawnerName~=oldName)then + -- game.print("evolve "..entity.name.."-->"..spawnerName) -- debug + local surface = map.surface + local position = entity.position + local universe = map.universe + + deleteAssociatedUnits(entity) + entity.destroy() + local name = universe.buildingSpaceLookup[spawnerName] or spawnerName + local query = universe.upgradeEntityQuery + query.name = name + query.position = position + + if not surface.can_place_entity(query) then + local newPosition = surface.find_non_colliding_position( + name, + position, + CHUNK_SIZE, + 1, + true + ) + query.position = newPosition or position + end + + query.name = spawnerName + if remote.interfaces["kr-creep"] then + remote.call("kr-creep", "spawn_creep_at_position", surface, query.position) + end + return surface.create_entity(query) + else + --game.print("cant evolve "..entity.name) + end + return nil + + +end + +function baseUtils.changeEntityTier(entity, newTier, map) + local surface = map.surface + local position = entity.position + local universe = map.universe + + local oldFaction = universe.enemyAlignmentLookup[entity.name] + if not oldFaction then + return nil + end + local oldName = entity.name + --local tier = universe.buildingTierLookup[entity.name] + local spawnerName = entityUpgrade(oldFaction, newTier, newTier, entity, map) + + if spawnerName and (spawnerName~=oldName)then + local name = spawnerName + local query = {} + query.name = name + query.position = position --position + query.move_stuck_players = true + + local NewEntity = surface.create_entity(query) + if NewEntity then + deleteAssociatedUnits(entity) + entity.destroy() + return NewEntity + end + end + return nil + + + -- if not (spawnerName==oldName)then + -- entity.destroy() + -- local name = universe.buildingSpaceLookup[spawnerName] or spawnerName + -- local query = universe.upgradeEntityQuery + -- query.name = name + -- query.position = position + + -- if not surface.can_place_entity(query) then + -- local newPosition = surface.find_non_colliding_position( + -- name, + -- position, + -- CHUNK_SIZE, + -- 1, + -- true + -- ) + -- query.position = newPosition or position + -- end + + -- query.name = spawnerName + -- if remote.interfaces["kr-creep"] then + -- remote.call("kr-creep", "spawn_creep_at_position", surface, query.position) + -- end + -- local newEntity = surface.create_entity(query) + -- if newEntity.valid then + -- return newEntity + -- else + -- return nil + -- end + -- end + -- return nil + +end + + +function baseUtils.changeEntityAligment(entity, newAlignments, map) + if not entity.valid then + return nil + end + local surface = map.surface + local position = entity.position + local universe = map.universe + local newFaction + if type(newAlignments)=="string" then + newFaction = newAlignments + else + newFaction = getFactionFromAligment(newAlignments) + end + if not newFaction then + return nil + end + local oldFaction = universe.enemyAlignmentLookup[entity.name] + if oldFaction == newFaction then + return nil + end + + local oldName = entity.name + local tier = universe.buildingTierLookup[entity.name] + local spawnerName = entityUpgrade(newFaction, tier, tier, entity, map) + if spawnerName and (spawnerName~=oldName) then + local name = spawnerName + local query = {} + query.name = name + query.position = position --position + query.move_stuck_players = true + + local NewEntity = surface.create_entity(query) + if NewEntity then + deleteAssociatedUnits(entity) + entity.destroy() + return NewEntity + end + end + return nil + +end +-- - !ΠšΠ”Π 2021.11 + + +local function replaceDeletedFactions(baseAlignment, map) + local evolutionTable = map.universe.buildingEvolveLookup + local factionsArray = {} + local alignmentCount = 0 + for faction, rate in pairs(baseAlignment) do + alignmentCount = alignmentCount + 1 + if not evolutionTable[faction] then + factionsArray[#factionsArray+1] = faction + end + end + for i = 1,#factionsArray do + alignmentCount = alignmentCount - 1 + baseAlignment[factionsArray[i]] = nil +-- game.print("Removeing deleted faction:"..factionsArray[i]) + end + if alignmentCount == 0 then + baseAlignment["neutral"] = 1 + end +end + +local function baseAlignmentAsString(baseAlignment) + local baseAlignmentAsString = "" + for faction, rate in pairs(baseAlignment) do + baseAlignmentAsString = baseAlignmentAsString..faction.."="..rate.."%, " + end + return baseAlignmentAsString +end + +-- base.baseAlignment{troll = 0.7, acid = .3} +-- upgradeType = 0 - change rates: instant changes (changing base.alignment) +-- 1 - change rates, allow change lowest rated faction: instant changes +-- 2 - change lowest rated faction: lasting changes (changing base.newAlignmentAndSteps) +-- 3 - new aligments (new tier, for example): lasting changes +-- 4 - new rates for same factions: lasting changes +local function upgradeBase(map, base, upgradeType) + local RateStep = 0.05 + local result = false + local oldAlignment + if base.newAlignmentAndSteps then + oldAlignment = base.newAlignmentAndSteps[2] + else + oldAlignment = base.alignment + end + local baseAlignment = base.alignment + local baseTier = base.tier + -- debug + -- local alignmentStr = "" + -- for faction, rate in pairs(oldAlignment) do + -- alignmentStr = alignmentStr .. faction .. ": "..rate.."," + -- end + -- + if (upgradeType == 0) or (upgradeType == 1) then -- not used since v1.3. So, mistakes possible + local factions = {} + local factionTotal = 0 + for faction, rate in pairs(oldAlignment) do + factionTotal = factionTotal + 1 + factions[factionTotal] = faction + end + if factionTotal>1 then + local roll = mRandom(factionTotal) + local roll2 = mRandom(factionTotal-1) + if roll2 >= roll then roll2 = roll2+1 end + + if (oldAlignment[factions[roll]] - RateStep) < 0.005 then -- if rate too low, then do nothing or change faction + if upgradeType == 1 then + newFaction = findBaseMutation(map, nil, baseTier) + if not oldAlignment[newFaction] then + oldAlignment[newFaction] = oldAlignment[factions[roll]] + oldAlignment[factions[roll]] = nil + factions[roll] = newFaction -- optional, but let it be + result = true + end + end + else + oldAlignment[factions[roll]] = oldAlignment[factions[roll]] - RateStep + oldAlignment[factions[roll2]] = oldAlignment[factions[roll2]] + RateStep + result = true + end + end + elseif upgradeType == 2 then + local newFaction = findBaseMutation(map, nil, baseTier) + if not oldAlignment[newFaction] then + local oldFaction + local newAlignmentAndSteps = {10, {}} + local newAlignment = newAlignmentAndSteps[2] + + for faction, rate in pairs(oldAlignment) do + newAlignment[faction] = rate + if not oldFaction or rate" + -- for faction, rate in pairs(newAlignmentDebug) do + -- alignmentStr = alignmentStr .. faction .. ": "..rate.."," + -- end + -- game.print("upgradeBase #"..base.id..", type = " ..upgradeType.." "..alignmentStr.." [gps=" .. base.x .. "," .. base.y .."]") + -- alignmentStr = "" + -- for chunk, _ in pairs(base.chunks) do + -- alignmentStr = alignmentStr .. "[gps=" .. chunk.x .. "," .. chunk.y .."]" + -- end + -- game.print(alignmentStr) + -- end + return result +end + +local function updateBaseFactionsTotal(base) + local factionsTotal = {} + local totalCount = 0 + for chunk, counts in pairs(base.chunkFactions) do + for faction,count in pairs(counts) do + if count>0 then + factionsTotal[faction] = (factionsTotal[faction] or 0) + count + totalCount = totalCount + count + end + end + end + base.factionsTotal = {totalCount, factionsTotal} + +end + + +local function calculateDynamicRates(dynamicRates, factionsTotal) + if not factionsTotal then + return + end + local totalDynamicRate = 0 + local changesCnt = 0 -- recommended changes + local obsoleteCnt = 0 + local dynamicRatesTable = dynamicRates.dynamicRatesTable + dynamicRatesTable.dynamicRate = {} + local fieldRate = dynamicRatesTable.rate + local fieldDynamicRate = dynamicRatesTable.dynamicRate + local fieldReqCount = dynamicRatesTable.reqCount + + for faction,rates in pairs(fieldRate) do + fieldDynamicRate[faction] = fieldReqCount[faction] - (factionsTotal[faction] or 0) + local dynamicRate = fieldDynamicRate[faction] + if dynamicRate>0 then + totalDynamicRate = totalDynamicRate + dynamicRate + end + changesCnt = changesCnt + mMax(mFloor(dynamicRate), 0) + if (fieldRate[faction] or 0) <=0 and (factionsTotal[faction] or 0)>0 then + obsoleteCnt = obsoleteCnt + 1 + end + end + if totalDynamicRate == 0 then totalDynamicRate = 1 end + dynamicRates.totalDynamicRate = totalDynamicRate + dynamicRates.changesCnt = changesCnt + dynamicRates.obsoleteCnt = obsoleteCnt +end + +-- return {totalRate=N, totalDynamicRate=N, changesCnt=N, obsoleteCnt=N, dynamicRatesTable={rate={},reqCount = {},dynamicRate = {}}) +-- example : base.factionsTotal{{"acid",7},{"fire", 3}}, base.alignment{{"acid",0.8},{"troll",0.2}} +-- => totalCount=10, totalRate = 1 +-- => dynamicRatesTable["reqCount"] = {acid = 10*(0.8/1)=8, troll = 10*(0.2/1)=2, fire = 10*0=0 } +-- => dynamicRatesTable["dynamicRate"] = {acid = 8-7=1, troll = 2 - 0 = 2, fire = 0-3 =>0 } , totalDynamicRate = 1+2=3 +-- => 33% acid, 67% troll, 0% fire +function baseUtils.getDynamicRates(base) + local msgSting = "baseUtils.getDynamicRates: ("..tostring(base.x)..","..tostring(base.y)..")" -- + !ΠšΠ”Π 2021.11 + + local aligments + aligments = base.alignment + local totalRate = 0 + local dynamicRates = {totalRate = 0, totalDynamicRate = 0, changesCnt = 0, obsoleteCnt = 0, dynamicRatesTable={}} + local dynamicRatesTable = {rate={}} + local fieldRate = dynamicRatesTable.rate + for faction,rate in pairs(aligments) do + totalRate = totalRate + rate + fieldRate[faction] = rate + end + if totalRate == 0 then totalRate = 1 end + + local totalCount + if not(base.factionsTotal) or base.factionsTotal[1]==0 then + totalCount = 0 + else + totalCount = base.factionsTotal[1] + end + local factionsTotal = base.factionsTotal[2] + for faction,rate in pairs(factionsTotal) do + if not fieldRate[faction] then + fieldRate[faction] = 0 + end + end + + dynamicRatesTable.reqCount = {} + local fieldReqCount = dynamicRatesTable.reqCount + for faction,rates in pairs(fieldRate) do + fieldReqCount[faction] = totalCount*(fieldRate[faction]/totalRate) + end + dynamicRates.dynamicRatesTable = dynamicRatesTable + + calculateDynamicRates(dynamicRates, factionsTotal) + + dynamicRates.totalRate = totalRate + + return dynamicRates +end + +function baseUtils.changeEntityAndUpdateDynamicRates(entity, dynamicRates, map, base) + local universe = map.universe + local oldCnt = 0 + local newFaction + + if not universe.buildingHiveTypeLookup[entity.name] then + return nil + end + + local oldFaction = universe.enemyAlignmentLookup[entity.name] + if not oldFaction then + return nil + end + local dynamicRatesTable = dynamicRates.dynamicRatesTable + if (dynamicRates.dynamicRatesTable.dynamicRate[oldFaction] or 0)>0 then + return nil + end + -- preventing the "flashing" of the hive. + if (universe.buildingHiveTypeLookup[entity.name] == "hive") and (dynamicRates.dynamicRatesTable.dynamicRate[oldFaction] or 0)>-0.3 then + return nil + end + + if entity.type =="unit-spawner" then + oldCnt = 1 + newFaction = getFactionFromAligment(dynamicRates.dynamicRatesTable.dynamicRate) + + else + newFaction = getFactionFromAligment(dynamicRates.dynamicRatesTable.rate) + end + if oldFaction == newFaction then + return nil + end + + local newEntity = baseUtils.changeEntityAligment(entity, newFaction, map) + + if newEntity then + if base and base.factionsTotal then + local factionsTotal = base.factionsTotal[2] + local newCnt = 0 + if newEntity.type =="unit-spawner" then + newCnt = 1 + end + if oldCnt > 0 then + factionsTotal[oldFaction] = (factionsTotal[oldFaction] or 0) - oldCnt + end + if newCnt > 0 then + factionsTotal[newFaction] = (factionsTotal[newFaction] or 0) - newCnt + end + base.factionsTotal[1] = base.factionsTotal[1] + newCnt - oldCnt + if oldCnt>0 or newCnt>0 then + calculateDynamicRates(dynamicRates, factionsTotal) + end + end + return newEntity + end + return nil +end + +local function updateBaseStats(base) + local aligments + aligments = base.alignment + if not aligments then + return false + end + + -- base.factionsTotal = {totalCount, factionsTotal} + + updateBaseFactionsTotal(base) + dynamicRates = baseUtils.getDynamicRates(base) -- => {totalRate=N, totalDynamicRate=N, changesCnt=N, obsoleteCnt=N, dynamicRatesTable=Table) + + base.changingEntities = false + -- if dynamicRates.obsoleteCnt > 0 then + -- base.changingEntities = true + -- else + if base.factionsTotal then + local totalCount = base.factionsTotal[1] + local thresholdCount = 0 + if totalCount <= 3 then + thresholdCount = 1 + elseif totalCount<10 then + thresholdCount = 2 + else + thresholdCount = mMin(totalCount*0.2, 8) + end + if dynamicRates.changesCnt >= thresholdCount then + base.changingEntities = true + end + end + +end + +-- alignmentAndStep{N, alignment} +-- be careful: changing alignmentAndStep[1] +local function convertAlignment(alignment, alignmentAndStep, writeToalignment) + if not alignmentAndStep then + return alignment + end + local steps = alignmentAndStep[1] + if steps<=1 then + if not writeToalignment then + alignmentAndStep[1] = 0 + return alignmentAndStep[2] + else + alignmentAndStep[1] = 1 + end + end + + local newAlignment = {} + for faction,rate in pairs(alignmentAndStep[2]) do + newAlignment[faction] = rate + end + for faction,rate in pairs(alignment) do + newAlignment[faction] = (newAlignment[faction] or 0) - rate + end + local TableToChange + if writeToalignment then + TableToChange = alignment + else + TableToChange = newAlignment + end + + for faction,rate in pairs(newAlignment) do + TableToChange[faction] = (alignment[faction] or 0) + rate/steps + if TableToChange[faction]<=0 then TableToChange[faction]=nil end + end + alignmentAndStep[1] = alignmentAndStep[1] - 1 + return TableToChange +end + +function baseUtils.chunkCanGrow(map, chunk) + if chunk.growFails and (chunk.growFails > 5) then + return false + end + local nestCount = getNestCount(map, chunk) + getHiveCount(map, chunk) + local turretCount = getTurretCount(map, chunk) + if (nestCount < 3) or ((nestCount + turretCount) < 10) then + return true + end + --game.print("baseUtils.chunkCanGrow: [gps=" .. chunk.x .. "," .. chunk.y .."] = false" ) -- debug + return false +end + +function baseUtils.processBase(chunk, map, tick, base) + if not base.alignment then + return + end + if not tick then + return + end + if not chunk then + return + end + if not base.thisIsRampantEnemy then + base.tick = tick+36000 + return + end + + local surface = map.surface + local universe = map.universe + local point = universe.position + + point.x = chunk.x + (CHUNK_SIZE * mRandom()) + point.y = chunk.y + (CHUNK_SIZE * mRandom()) + local newTier = evoToTierNorandom(map.universe, map.evolutionLevel) - base.tierHandicap + if base.tier < newTier then + base.tier = newTier + base.nextMutationTick = tick + 36000 + upgradeBase(map, base, 3) + base.state = BASE_AI_STATE_ACTIVE + elseif (base.state == BASE_AI_STATE_MUTATE) and ((base.nextMutationTick or 0) < tick) and (not base.changingEntities) and (not base.newAlignmentAndSteps) then + local mutateRoll = mRandom() + --base.nextMutationTick = tick + 36000 + if (mutateRoll < 0.05) then + upgradeBase(map, base, 3) + elseif (mutateRoll< 0.3) then + upgradeBase(map, base, 2) + else + upgradeBase(map, base, 4) + end + base.state = BASE_AI_STATE_ACTIVE + end + + replaceDeletedFactions(base.alignment, map) + if base.newAlignmentAndSteps then + replaceDeletedFactions(base.newAlignmentAndSteps[2], map) + end + + updateBaseStats(base) + ------- growing + local baseCanGrow = false + local chunksCount = 0 + local activeChunks = 0 + for chunk, _ in pairs(base.chunks) do + if (getNestActiveness(map, chunk) > 0) then + activeChunks = activeChunks + 1 + -- baseCanGrow = baseCanGrow or baseUtils.chunkCanGrow(map, chunk) -- only active chunk + end + chunksCount = chunksCount + 1 + end + if (activeChunks > 0) and (chunksCount <= 5) then + for chunk, _ in pairs(base.chunks) do + baseCanGrow = baseCanGrow or baseUtils.chunkCanGrow(map, chunk) -- only active chunk + end + end + + if baseCanGrow then + if not map.basesToGrow[base.id] then + map.basesToGrow[base.id] = base + -- game.print("add base to growing list: #"..base.id) -- debug + end + else + if map.basesToGrow[base.id] then + universe.growingBases[base.id] = nil + map.basesToGrow[base.id] = nil + if universe.growingBasesIterator == base.id then + universe.growingBasesIterator = nil + end + -- game.print("base stop growing: #"..base.id.." activeChunks = "..activeChunks..", baseCanGrow =".. tostring(baseCanGrow)..", chunksCount = "..chunksCount) -- debug + end + end + ------- + + if base.newAlignmentAndSteps then + convertAlignment(base.alignment, base.newAlignmentAndSteps, true) + if base.newAlignmentAndSteps[1] == 0 then base.newAlignmentAndSteps = nil end + end + if (universe.evolveTick <=tick) and (not base.changingEntities) and (not base.newAlignmentAndSteps) and ((base.evolveTick or 0) <= tick) then + local entities = surface.find_entities_filtered(universe.filteredEntitiesPointQueryLimited) + if #entities ~= 0 then + local entity = entities[1] + local cost = universe.costLookup[entity.name] + if cost then + local newEntity = baseUtils.evolveEntity(entity, map) + if newEntity then + base.evolveTick = tick + cost + universe.evolveTick = tick + GLOBAL_EVOLVE_COOLDOWN + end + end + end + end + + base.tick = tick +end + +function baseUtils.createBase(map, chunk, tick, thisIsRampantEnemy) + if not tick then + return nil + end + if not chunk then + return nil + end + + local universe = map.universe + local x = chunk.x + local y = chunk.y + local distance = euclideanDistancePoints(x, y, 0, 0) + + local meanLevel = mFloor(distance * 0.005) + + local distanceIndex = mMin(1, distance * BASE_DISTANCE_TO_EVO_INDEX) + local evoIndex = mMax(distanceIndex, map.evolutionLevel) + + local tier = evoToTierNorandom(map.universe, evoIndex) + local tierHandicap + if tier == 1 then + if mRandom()<0.7 then + tierHandicap = 0 + else + tierHandicap = 1 + end + else + tierHandicap = mRandom(mMin(3, tier))-1 + end + + local baseTick = (tick or 0) + local alignment + + alignment = findBaseInitialAlignment(map, evoIndex) or {neutral = 1} + + + local baseLevel = gaussianRandomRange(meanLevel, meanLevel * 0.3, meanLevel * 0.50, meanLevel * 1.50) + local baseDistanceThreshold = gaussianRandomRange(BASE_DISTANCE_THRESHOLD, + BASE_DISTANCE_THRESHOLD * 0.2, + BASE_DISTANCE_THRESHOLD * 0.75, + BASE_DISTANCE_THRESHOLD * 1.50) + local distanceThreshold = (baseLevel * BASE_DISTANCE_LEVEL_BONUS) + baseDistanceThreshold + + local base = { + x = x, + y = y, + distanceThreshold = distanceThreshold, -- not used, but maybe later... + tick = baseTick, + alignment = alignment, + state = BASE_AI_STATE_ACTIVE, + damagedBy = {}, + stateTick = 0, + createdTick = (tick or 0), + evolveTick = (tick or 0) + BASE_EVOLVE_THRESHOLD, + nextMutationTick = tick + 36000, + points = 0, + thisIsRampantEnemy = thisIsRampantEnemy, + mapIndex = map.surface.index, + chunks = {}, + basesToGrow = {}, + id = universe.baseId + , chunkFactions = {}, factionsTotal = nil, changingEntities = false, tier = tier, tierHandicap = tierHandicap, newAlignmentAndSteps = nil + } + universe.baseId = universe.baseId + 1 + + setChunkBase(map, chunk, base) + + universe.bases[base.id] = base + return base +end + +-- + !ΠšΠ”Π 2021.11 +function baseUtils.findNewBaseAligment(map, chunk) + if not chunk then + return {neutral = 1} + end + + local x = chunk.x + local y = chunk.y + local distance = euclideanDistancePoints(x, y, 0, 0) + + local distanceIndex = mMin(1, distance * BASE_DISTANCE_TO_EVO_INDEX) + local evoIndex = mMax(distanceIndex, map.evolutionLevel) + local alignment = findBaseInitialAlignment(map, evoIndex) or {neutral = 1} + return alignment +end +-- - !ΠšΠ”Π 2021.11 + +function baseUtils.rebuildNativeTables(universe) + local alignmentSet = {} + universe.evolutionTableAlignment = alignmentSet + local buildingSpaceLookup = {} + universe.buildingSpaceLookup = buildingSpaceLookup + local enemyAlignmentLookup = {} + universe.enemyAlignmentLookup = enemyAlignmentLookup + local evoToTierMapping = {} + universe.evoToTierMapping = evoToTierMapping + local upgradeLookup = {} + universe.upgradeLookup = upgradeLookup + local buildingEvolveLookup = {} + universe.buildingEvolveLookup = buildingEvolveLookup + local costLookup = {} + universe.costLookup = costLookup + local buildingHiveTypeLookup = {} + universe.buildingHiveTypeLookup = buildingHiveTypeLookup + local buildingTierLookup = {} -- + !ΠšΠ”Π 2021.11 + universe.buildingTierLookup = buildingTierLookup + + for i=1,10 do + evoToTierMapping[#evoToTierMapping+1] = (((i - 1) * 0.1) ^ 0.8) - 0.01 + end + + for i=1,#FACTION_SET do + local faction = FACTION_SET[i] + + local factionUpgradeLookup = {} + upgradeLookup[faction.type] = factionUpgradeLookup + local factionBuildingPicker = {} + buildingEvolveLookup[faction.type] = factionBuildingPicker + + for t=1,10 do + local alignments = alignmentSet[t] + if not alignments then + alignments = {} + alignmentSet[t] = alignments + end + + --[[ + alignments table is a table that is used for selecting what factions are available + to pick given an evolution level. + + evolutionTable is a table that given a faction allows the selection of a building + type based on the propabilities given. Once the the building type is selected given + a faction, then the evolution decides what level of building to select + --]] + local factionAcceptRate = faction.acceptRate + + local low = factionAcceptRate[1] + local high = factionAcceptRate[2] + if (low <= t) and (t <= high) then + alignments[#alignments+1] = {linearInterpolation((t - low) / (high - low), factionAcceptRate[3], factionAcceptRate[4]), faction.type} + end + + local tieredUpgradeBuildingSet = factionUpgradeLookup[t] + if not tieredUpgradeBuildingSet then + tieredUpgradeBuildingSet = {} + factionUpgradeLookup[t] = tieredUpgradeBuildingSet + end + + local tieredBuildingPickerSet = factionBuildingPicker[t] + if not tieredBuildingPickerSet then + tieredBuildingPickerSet = {} + factionBuildingPicker[t] = tieredBuildingPickerSet + end + + for b=1,#faction.buildings do + local building = faction.buildings[b] + + local buildingSet = tieredUpgradeBuildingSet[building.type] + if not buildingSet then + buildingSet = {} + tieredUpgradeBuildingSet[building.type] = buildingSet + end + + local variationSet = {} + for v=1,universe.ENEMY_VARIATIONS do + local entry = faction.type .. "-" .. building.name .. "-v" .. v .. "-t" .. t .. "-rampant" + enemyAlignmentLookup[entry] = faction.type + costLookup[entry] = HIVE_BUILDINGS_COST[building.type] + buildingHiveTypeLookup[entry] = building.type + buildingTierLookup[entry] = t + if v==1 then + variationSet[#variationSet+1] = entry + end + end + + local buildingAcceptRate = building.acceptRate + + local buildingLow = buildingAcceptRate[1] + local buildingHigh = buildingAcceptRate[2] + if (buildingLow <= t) and (t <= buildingHigh) then + for vi=1,#variationSet do + local variation = variationSet[vi] + buildingSet[#buildingSet+1] = variation + end + tieredBuildingPickerSet[#tieredBuildingPickerSet+1] = { + linearInterpolation((t - buildingLow) / (buildingHigh - buildingLow), + buildingAcceptRate[3], + buildingAcceptRate[4]), + variationSet, + building.type + } + end + + end + end + end + + for t=1,10 do + local alignments = alignmentSet[t] + local totalAlignment = 0 + for i=1,#alignments do + totalAlignment = totalAlignment + alignments[i][1] + end + for i=1,#alignments do + alignments[i][1] = alignments[i][1] / totalAlignment + end + + for fi=1,#FACTION_SET do + local faction = FACTION_SET[fi] + local factionBuildingSet = buildingEvolveLookup[faction.type][t] + local totalBuildingSet = 0 + for i=1,#factionBuildingSet do + totalBuildingSet = totalBuildingSet + factionBuildingSet[i][1] + end + for i=1,#factionBuildingSet do + factionBuildingSet[i][1] = factionBuildingSet[i][1] / totalBuildingSet + end + end + end + + + + local cnt = 0 --------------------------- + if universe.maps then + for _,base in pairs(universe.bases) do + local map = universe.maps[base.mapIndex] + if map then + local evoIndex = evoToTier(universe, map.evolutionLevel) + cnt = cnt + 1 + for x=1,#base.alignment do + local alignment = base.alignment[x] + if not universe.buildingEvolveLookup[alignment] then + base.alignment = findBaseInitialAlignment(map, evoIndex) or {neutral = 1} + break + end + end + end + end + end +end + +function baseUtils.setRandomBaseToMutate(universe) + if not universe.NEW_ENEMIES then + return + end + if game.tick < 2000 then + return + end + + local basesId = {} + for _,base in pairs(universe.bases) do + if base and base.thisIsRampantEnemy and base.alignment and (base.state ~= BASE_AI_STATE_MUTATE) and (base.tier > 1) then + basesId[#basesId + 1] = base.id + end + end + if #basesId == 0 then + return + end + local base = universe.bases[basesId[mRandom(1, #basesId)]] + base.state = BASE_AI_STATE_MUTATE +end + +-- + !ΠšΠ”Π 2021.10 debug +function baseUtils.ShowNewBaseAligments(universe, targetEvolution) + if universe == nil then + return "" + end + local tier = evoToTierNorandom(universe, targetEvolution) + local alignments = universe.evolutionTableAlignment[tier] + game.print("Evo = "..tostring(targetEvolution*100).."%, tier:"..tostring(tier)) + for i=1,#alignments do + local alignment = alignments[i] + local aligmentStats = tostring(i)..":" + for x=1,#alignment do + aligmentStats = aligmentStats .. ", " .. alignment[x] + end + game.print(aligmentStats) + end + return "" +end + +function baseUtils.ShowEvoToTierMapping(universe) + for i=10,1,-1 do + game.print(tostring(i)..":"..tostring(universe.evoToTierMapping[i])) + end + return "" +end + +-- - !ΠšΠ”Π + + + +baseUtilsG = baseUtils +return baseUtils diff --git a/RampantFixed/libs/BitersEnrage.lua b/RampantFixed/libs/BitersEnrage.lua new file mode 100644 index 00000000..71cf089e --- /dev/null +++ b/RampantFixed/libs/BitersEnrage.lua @@ -0,0 +1,143 @@ +if (bitersEnrageG) then + return bitersEnrageG +end +local bitersEnrage = {} + +local bitersInRange_Query = { + position = nil, + radius = 32, + limit = 200, + force = "enemy", + type = {"unit"} + } + +local function enrageStickersParameters() + local enrageStickers = {} + for i = 1, 13 do + enrageStickers[#enrageStickers+1] = {lvl = i, movementModifier = 1 + (i-1)*0.10, tint = {r = 0.3+(i-1)*0.05, g = 0.7-(i-1)*0.05, b = 0.5-(i-1)*0.02, a = 0.005 + 0.02*(i-1) }, name = "enrage-sticker-lvl"..i.."-rampant"} + end + return enrageStickers +end + +function bitersEnrage.createStickers() + + local enrageStickers = enrageStickersParameters() + for i, stickerParameters in pairs (enrageStickers) do + -- stickerTemplate.animation.tint = stickerParameters.tint + -- stickerTemplate.target_movement_modifier = stickerParameters.movementModifier + data:extend({{ + type = "sticker", + name = stickerParameters.name, + flags = {"not-on-map"}, + + animation = + { + filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", + line_length = 8, + width = 60, + height = 118, + frame_count = 25, + blend_mode = "normal", + animation_speed = 0.5, + scale = 0.3, + tint = stickerParameters.tint, + --shift = math3d.vector2.mul({-0.078125, -1.8125}, 0.1), + draw_as_glow = true + }, + force_visibility = "ally", + duration_in_ticks = 30 * 60, + target_movement_modifier = stickerParameters.movementModifier + }} + ) + + end +end + +local function createEnrageSequence() + local enrageSequence = {} + local enrageStickers = enrageStickersParameters() + local prevSticker + for i, stickerParameters in pairs (enrageStickers) do + enrageSequence[(prevSticker or "none")] = stickerParameters.name + prevSticker = stickerParameters.name + end + if prevSticker then + enrageSequence[prevSticker] = prevSticker + end + return enrageSequence +end +local enrageSequence = createEnrageSequence() + +local function getNeighborChunksArray(map, x, y) + local neighbors = {} + local chunkYRow1 = y - 32 + local chunkYRow3 = y + 32 + local xChunks = map[x-32] + if xChunks then + neighbors[#neighbors+1] = xChunks[chunkYRow1] + neighbors[#neighbors+1] = xChunks[y] + neighbors[#neighbors+1] = xChunks[chunkYRow3] + end + + xChunks = map[x+32] + if xChunks then + neighbors[#neighbors+1] = xChunks[chunkYRow1] + neighbors[#neighbors+1] = xChunks[y] + neighbors[#neighbors+1] = xChunks[chunkYRow3] + end + + xChunks = map[x] + if xChunks then + neighbors[#neighbors+1] = xChunks[chunkYRow1] + neighbors[#neighbors+1] = xChunks[chunkYRow3] + end + return neighbors +end + +function bitersEnrage.enrageBitersInRange(map, position, chunk, tick) + if chunk == -1 then + return false + end + if chunk.enrageTick and (chunk.enrageTick > tick) then + return false + end + local surface = map.surface + bitersInRange_Query.position = position + local entities = surface.find_entities_filtered(bitersInRange_Query) + + chunk.enrageTick = tick + 600 + if #entities > 60 then + local neighbors = getNeighborChunksArray(map, chunk.x, chunk.y) + for i, neighborChunk in pairs(neighbors) do + if neighborChunk ~= -1 then + neighborChunk.enrageTick = chunk.enrageTick + end + end + local flyingTextparameters = {text = "biters enraged", surface = surface, position = position, color = {1, 0, 0}, speed = 4, time_to_live = 120} + for i, player in pairs(game.connected_players) do + if player.valid then + if map.surface.index == ((player.surface and player.surface.index) or 0) then + player.create_local_flying_text(flyingTextparameters) + end + end + end + local enrageStickerName + for i, entity in pairs(entities) do + if entity.valid and (not entity.has_flag("not-in-kill-statistics")) then + if entity.stickers then + for ii, sticker in pairs(entity.stickers) do + if enrageSequence[sticker.name] then + enrageStickerName = enrageSequence[sticker.name] + end + end + end + enrageStickerName = (enrageStickerName or enrageSequence["none"]) + surface.create_entity({name= enrageStickerName, position = position, target = entity}) + end + end + end +end + + +bitersEnrageG = bitersEnrage +return bitersEnrage \ No newline at end of file diff --git a/RampantFixed/libs/ChunkProcessor.lua b/RampantFixed/libs/ChunkProcessor.lua new file mode 100644 index 00000000..a275859e --- /dev/null +++ b/RampantFixed/libs/ChunkProcessor.lua @@ -0,0 +1,237 @@ +if (chunkProcessorG) then + return chunkProcessorG +end +local chunkProcessor = {} + +-- imports + +local chunkUtils = require("ChunkUtils") +local mathUtils = require("MathUtils") +local constants = require("Constants") +local baseUtils = require("BaseUtils") + +-- constants + +local CHUNK_SIZE = constants.CHUNK_SIZE + +local MAX_TICKS_BEFORE_SORT_CHUNKS = constants.MAX_TICKS_BEFORE_SORT_CHUNKS + +-- imported functions + +local mapScanEnemyChunk = chunkUtils.mapScanEnemyChunk +local mapScanPlayerChunk = chunkUtils.mapScanPlayerChunk +local mapScanResourceChunk = chunkUtils.mapScanResourceChunk + +local createChunk = chunkUtils.createChunk +local initialScan = chunkUtils.initialScan +local chunkPassScan = chunkUtils.chunkPassScan + +local euclideanDistanceNamed = mathUtils.euclideanDistanceNamed + +local changeEntityAndUpdateDynamicRates = baseUtils.changeEntityAndUpdateDynamicRates +local getDynamicRates = baseUtils.getDynamicRates + +local tSort = table.sort + +local abs = math.abs +local next = next +local table_size = table_size + +local tRemove = table.remove + +-- module code + +local origin = {x=0,y=0} + +local function sorter(a, b) + local aDistance = euclideanDistanceNamed(a, origin) + local bDistance = euclideanDistanceNamed(b, origin) + + if (aDistance == bDistance) then + if (a.x == b.x) then + return (abs(a.y) < abs(b.y)) + else + return (abs(a.x) < abs(b.x)) + end + end + + return (aDistance < bDistance) +end + +function chunkProcessor.processPendingChunks(universe, tick, flush) + local pendingChunks = universe.pendingChunks + + local area = universe.area + local topOffset = area[1] + local bottomOffset = area[2] + + local endCount = 2 + local chunkCount = 0 + -- if flush then + -- endCount = table_size(pendingChunks) + -- end + for event, _ in pairs(pendingChunks) do + local map = event.surface.valid and universe.maps[event.surface.index] + if map then + chunkCount = chunkCount + 1 + local topLeft = event.area.left_top + local x = topLeft.x + local y = topLeft.y + + topOffset[1] = x + topOffset[2] = y + bottomOffset[1] = x + CHUNK_SIZE + bottomOffset[2] = y + CHUNK_SIZE + + if map[x] and map[x][y] then + local chunk = map[x][y] + mapScanPlayerChunk(chunk, map) + mapScanEnemyChunk(chunk, map) + mapScanResourceChunk(chunk, map) + else + if map[x] == nil then + map[x] = {} + end + + local chunk = createChunk(x, y) + + chunk = initialScan(chunk, map, tick) + + if (chunk ~= -1) then + map[x][y] = chunk + local processQueue = map.processQueue + processQueue[#processQueue+1] = chunk + end + end + end + pendingChunks[event] = nil + if (not flush) and (chunkCount >= endCount) then + break + end + end + -- if (#processQueue > map.nextChunkSort) or + -- (((tick - map.nextChunkSortTick) > MAX_TICKS_BEFORE_SORT_CHUNKS) and + -- ((map.nextChunkSort - 150) < #processQueue)) + -- then + -- map.nextChunkSort = #processQueue + 150 + -- map.nextChunkSortTick = tick + -- tSort(processQueue, sorter) + -- end +end + +function chunkProcessor.processScanChunks(universe) + local area = universe.area + + local topOffset = area[1] + local bottomOffset = area[2] + + --local removals = map.chunkRemovals + + local endCount = 2 + local chunkCount = 0 + + local chunkToPassScan = universe.chunkToPassScan + + for chunkIndex, chunkData in pairs(chunkToPassScan) do + local x = chunkData[1] + local y = chunkData[2] + local map = universe.maps[chunkData[3]] + if map then + + topOffset[1] = x + topOffset[2] = y + bottomOffset[1] = x + CHUNK_SIZE + bottomOffset[2] = y + CHUNK_SIZE + + local preScanChunk = map[x] and map[x][y] + if not preScanChunk or (chunkPassScan(preScanChunk, map) == -1) then + map[x][y] = nil + -- removals[chunkCount] = preScanChunk + end + + chunkCount = chunkCount + 1 + chunkToPassScan[chunkIndex] = nil + if chunkCount >= endCount then + break + end + else + chunkToPassScan[chunkIndex] = nil + end + end + + -- if (chunkCount > 0) then + -- local processQueue = map.processQueue + -- for i=#processQueue,1,-1 do + -- for ri=chunkCount,1,-1 do + -- if (removals[ri] == processQueue[i]) then + -- tRemove(processQueue, i) + -- -- tRemove(removals, ri) + -- break + -- end + -- end + -- end + -- end +end + +function chunkProcessor.processPendingMutations(universe) + local pendingChunks = universe.pendingMutations["chunks"] + local pendingEntities = universe.pendingMutations["entities"] + local entityId = universe.pendingMutationsIterator + local entityData + if not entityId then + entityId, entityData = next(pendingEntities, nil) + else + entityData = pendingEntities[entityId] + end + + if not entityId then + universe.pendingMutationsIterator = nil + return + end + + local dynamicRates + local base + local map + + local processedCnt = 0 + local mutatesCnt = 0 + local maxMutations = 1 + while entityId and (maxMutations > mutatesCnt) and (processedCnt < 100) do + local entityValid + local chunkIndex = entityData.chunkIndex + map = universe.maps[entityData.surfaceIndex] + entityValid = entityData.entity.valid and entityData.base and map + if entityValid then + if not base or (base ~= entityData.base) then + base = entityData.base + dynamicRates = getDynamicRates(base) + end + newBuilding = changeEntityAndUpdateDynamicRates(entityData.entity, dynamicRates, map, base) + if newBuilding then + mutatesCnt = mutatesCnt + 1 + end + end + processedCnt = processedCnt + 1 + + pendingEntities[entityId] = nil + pendingChunks[chunkIndex] = pendingChunks[chunkIndex] - 1 + + entityId, entityData = next(pendingEntities, entityId) + end + + local pendingEntities_left = table_size(pendingEntities) + if pendingEntities_left == 0 then + universe.pendingMutationsIterator = nil + + universe.pendingMutations = { + ["chunks"] = {}, + ["entities"] = {} + } + else + universe.pendingMutationsIterator = entityId + end +end + + +chunkProcessorG = chunkProcessor +return chunkProcessor diff --git a/RampantFixed/libs/ChunkPropertyUtils.lua b/RampantFixed/libs/ChunkPropertyUtils.lua new file mode 100644 index 00000000..3e2b77d5 --- /dev/null +++ b/RampantFixed/libs/ChunkPropertyUtils.lua @@ -0,0 +1,425 @@ +if chunkPropertyUtilsG then + return chunkPropertyUtilsG +end +local chunkPropertyUtils = {} + +local constants = require("Constants") + +-- constants + +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE -- + !ΠšΠ”Π + +local MOVEMENT_GENERATOR_PERSISTANCE = constants.MOVEMENT_GENERATOR_PERSISTANCE +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS + +-- imported functions + +local mMin = math.min +local mRandom = math.random + +-- module code +function chunkPropertyUtils.thisIsNewEnemyPosition(universe, x, y) + if not universe.ALLOW_OTHER_ENEMIES then + return true + end + if not universe.NEW_ENEMIES_SIDE then + return true + end + + + local NEW_ENEMIES_SIDE = universe.NEW_ENEMIES_SIDE + if NEW_ENEMIES_SIDE == "MIXED" then + local retVal = (mRandom() <= 0.6) + return retVal + elseif NEW_ENEMIES_SIDE == "NORTH" then + return (y<0) + elseif NEW_ENEMIES_SIDE == "EAST" then + return (x>=0) + elseif NEW_ENEMIES_SIDE == "SOUTH" then + return (y>=0) + elseif NEW_ENEMIES_SIDE == "WEST" then + return (x<0) + elseif NEW_ENEMIES_SIDE == "NORTH-EAST" then + return ((y<0) and (x>=0)) + elseif NEW_ENEMIES_SIDE == "SOUTH-EAST" then + return ((y>=0) and (x>=0)) + elseif NEW_ENEMIES_SIDE == "SOUTH-WEST" then + return ((y>=0) and (x<0)) + elseif NEW_ENEMIES_SIDE == "NORTH-WEST" then + return ((y<0) and (x<0)) + end + return false +end + +function chunkPropertyUtils.getPlayerTurretCount(map, chunk) + return map.chunkToPlayerTurrets[chunk] or 0 +end + +function chunkPropertyUtils.getNestCount(map, chunk) + return map.chunkToNests[chunk] or 0 +end + +function chunkPropertyUtils.getTurretCount(map, chunk) + return map.chunkToTurrets[chunk] or 0 +end + +function chunkPropertyUtils.getTrapCount(map, chunk) + return map.chunkToTraps[chunk] or 0 +end + +function chunkPropertyUtils.getUtilityCount(map, chunk) + return map.chunkToUtilities[chunk] or 0 +end + +function chunkPropertyUtils.getHiveCount(map, chunk) + return map.chunkToHives[chunk] or 0 +end + + +function chunkPropertyUtils.setPlayerTurretCount(map, chunk, count) + if (count <= 0) then + map.chunkToPlayerTurrets[chunk] = nil + else + map.chunkToPlayerTurrets[chunk] = count + end +end + +function chunkPropertyUtils.setTurretCount(map, chunk, count) + if (count <= 0) then + map.chunkToTurrets[chunk] = nil + else + map.chunkToTurrets[chunk] = count + end +end + +function chunkPropertyUtils.setHiveCount(map, chunk, count) + if (count <= 0) then + map.chunkToHives[chunk] = nil + else + map.chunkToHives[chunk] = count + end +end + +function chunkPropertyUtils.setTrapCount(map, chunk, count) + if (count <= 0) then + map.chunkToTraps[chunk] = nil + else + map.chunkToTraps[chunk] = count + end +end + +function chunkPropertyUtils.setUtilityCount(map, chunk, count) + if (count <= 0) then + map.chunkToUtilities[chunk] = nil + else + map.chunkToUtilities[chunk] = count + end +end + +function chunkPropertyUtils.setNestCount(map, chunk, count) + if (count <= 0) then + map.chunkToNests[chunk] = nil + if (map.processMigrationIterator == chunk) then + map.processMigrationIterator = nil + end + if (map.processNestIterator == chunk) then + map.processNestIterator = nil + end + else + map.chunkToNests[chunk] = count + end +end + +function chunkPropertyUtils.getChunkBase(map, chunk) + return map.chunkToBase[chunk] +end + +function chunkPropertyUtils.setChunkBase(map, chunk, base) + map.chunkToBase[chunk] = base + base.chunks[chunk] = true +end + +function chunkPropertyUtils.removeChunkBase(map, chunk, base) + if base then + base.chunks[chunk] = nil + base.chunkFactions[chunk] = nil -- we know for sure that there is nothing in the chunk + else + local baseFromChunk = map.chunkToBase[chunk] + if baseFromChunk then + baseFromChunk.chunks[chunk] = nil + baseFromChunk.chunkFactions[chunk] = nil + end + end + map.chunkToBase[chunk] = nil +end + + +function chunkPropertyUtils.getEnemyStructureCount(map, chunk) + return (map.chunkToNests[chunk] or 0) + (map.chunkToTurrets[chunk] or 0) + (map.chunkToTraps[chunk] or 0) + + (map.chunkToUtilities[chunk] or 0) + (map.chunkToHives[chunk] or 0) +end + +function chunkPropertyUtils.getRetreatTick(map, chunk) + return map.chunkToRetreats[chunk] or 0 +end + +function chunkPropertyUtils.getRallyTick(map, chunk) + return map.chunkToRallys[chunk] or 0 +end + +function chunkPropertyUtils.setRallyTick(map, chunk, tick) + map.chunkToRallys[chunk] = tick +end + +function chunkPropertyUtils.setRetreatTick(map, chunk, tick) + map.chunkToRetreats[chunk] = tick +end + +function chunkPropertyUtils.setResourceGenerator(map, chunk, resourceGenerator) + if (resourceGenerator <= 0) then + map.chunkToResource[chunk] = nil + else + map.chunkToResource[chunk] = resourceGenerator + end +end + +function chunkPropertyUtils.getResourceGenerator(map, chunk) + return map.chunkToResource[chunk] or 0 +end + +function chunkPropertyUtils.addResourceGenerator(map, chunk, delta) + map.chunkToResource[chunk] = (map.chunkToResource[chunk] or 0) + delta +end + +function chunkPropertyUtils.getDeathGenerator(map, chunk) + return map.chunkToDeathGenerator[chunk] or 0 +end + +function chunkPropertyUtils.getPassable(map, chunk) + return map.chunkToPassable[chunk] or CHUNK_ALL_DIRECTIONS +end + + +function chunkPropertyUtils.getRaidNestActiveness(map, chunk) + return map.chunkToActiveRaidNest[chunk] or 0 +end + +function chunkPropertyUtils.setRaidNestActiveness(map, chunk, value) + if (value <= 0) then + if (map.chunkToActiveRaidNest[chunk] ~= nil) then + map.activeRaidNests = map.activeRaidNests - 1 + end + if (map.processActiveRaidSpawnerIterator == chunk) then + map.processActiveRaidSpawnerIterator = nil + end + map.chunkToActiveRaidNest[chunk] = nil + else + if (map.chunkToActiveRaidNest[chunk] == nil) then + map.activeRaidNests = map.activeRaidNests + 1 + end + map.chunkToActiveRaidNest[chunk] = value + end +end + +function chunkPropertyUtils.getNestActiveTick(map, chunk) + return map.tickActiveNest[chunk] or 0 +end + +function chunkPropertyUtils.setNestActiveTick(map, chunk, tick) + if (tick == 0) then + map.tickActiveNest[chunk] = nil + else + map.tickActiveNest[chunk] = tick + end +end + +function chunkPropertyUtils.getNestActiveness(map, chunk) + return map.chunkToActiveNest[chunk] or 0 +end + +function chunkPropertyUtils.setNestActiveness(map, chunk, value) + if (value <= 0) then + if (map.chunkToActiveNest[chunk] ~= nil) then + map.activeNests = map.activeNests - 1 + end + if (map.processActiveSpawnerIterator == chunk) then + map.processActiveSpawnerIterator = nil + end + map.chunkToActiveNest[chunk] = nil + else + if (map.chunkToActiveNest[chunk] == nil) then + map.activeNests = map.activeNests + 1 + end + map.chunkToActiveNest[chunk] = value + end +end + +function chunkPropertyUtils.setPassable(map, chunk, value) + if (value == CHUNK_ALL_DIRECTIONS) then + map.chunkToPassable[chunk] = nil + else + map.chunkToPassable[chunk] = value + end +end + +function chunkPropertyUtils.getPathRating(map, chunk) + return map.chunkToPathRating[chunk] or 1 +end + +function chunkPropertyUtils.setPathRating(map, chunk, value) + if (value == 1) then + map.chunkToPathRating[chunk] = nil + else + map.chunkToPathRating[chunk] = value + end +end + +function chunkPropertyUtils.addDeathGenerator(map, chunk, value) + map.chunkToDeathGenerator[chunk] = (map.chunkToDeathGenerator[chunk] or 0) + value +end + +function chunkPropertyUtils.addVictoryGenerator(map, chunk, value) + map.chunkToVictory[chunk] = (map.chunkToVictory[chunk] or 0) + value +end + +function chunkPropertyUtils.decayDeathGenerator(map, chunk) + local gen = map.chunkToDeathGenerator[chunk] + if gen then + gen = gen * MOVEMENT_GENERATOR_PERSISTANCE + + if (gen >= -2) and (gen <= 2) then + map.chunkToDeathGenerator[chunk] = nil + else + map.chunkToDeathGenerator[chunk] = gen + end + end +end + +function chunkPropertyUtils.getPlayerBaseGenerator(map, chunk, pheromoneType) + if pheromoneType == BASE_PHEROMONE then + return map.chunkToPlayerBase[chunk] or 0 + elseif pheromoneType == BASE_DETECTION_PHEROMONE then + return map.chunkToPlayerBaseDetection[chunk] or 0 + else + return 0 + end +end + +function chunkPropertyUtils.addSquadToChunk(map, chunk, squad) + local chunkToSquad = map.chunkToSquad + + if (chunk ~= -1) and (squad.chunk ~= chunk) then + chunkPropertyUtils.removeSquadFromChunk(map, squad) + local squads = chunkToSquad[chunk] + if not squads then + squads = {} + chunkToSquad[chunk] = squads + end + squads[squad.groupNumber] = squad + squad.chunk = chunk + end +end + +function chunkPropertyUtils.removeSquadsFromChunk(map, chunk) + local chunkToSquad = map.chunkToSquad + local squads = chunkToSquad[chunk] + if squads then + for groupNumber, squad in pairs(squads) do + squad.chunk = nil + end + chunkToSquad[chunk] = nil + end +end + +function chunkPropertyUtils.removeSquadFromChunk(map, squad) + local chunkToSquad = map.chunkToSquad + local chunk = squad.chunk + local squads = chunkToSquad[chunk] + if squads then + squads[squad.groupNumber] = nil + if (table_size(squads) == 0) then + chunkToSquad[chunk] = nil + end + end +end + +function chunkPropertyUtils.getSquadsOnChunk(map, chunk) + return map.chunkToSquad[chunk] or map.emptySquadsOnChunk +end + +function chunkPropertyUtils.setPlayerBaseGenerator(map, chunk, playerGenerator, pheromoneType) + local chunkToPlayerBaseGenerator + if pheromoneType == BASE_PHEROMONE then + chunkToPlayerBaseGenerator = map.chunkToPlayerBase + elseif pheromoneType == BASE_DETECTION_PHEROMONE then + chunkToPlayerBaseGenerator = map.chunkToPlayerBaseDetection + else + return + end + + if (playerGenerator < 1) then + chunkToPlayerBaseGenerator[chunk] = nil + else + chunkToPlayerBaseGenerator[chunk] = playerGenerator + end +end + +function chunkPropertyUtils.addPlayerBaseGenerator(map, chunk, playerGenerator, pheromoneType) + if pheromoneType == BASE_PHEROMONE then + map.chunkToPlayerBase[chunk] = (map.chunkToPlayerBase[chunk] or 0) + playerGenerator + elseif pheromoneType == BASE_DETECTION_PHEROMONE then + map.chunkToPlayerBaseDetection[chunk] = (map.chunkToPlayerBaseDetection[chunk] or 0) + playerGenerator + end +end + +function chunkPropertyUtils.processNestActiveness(map, chunk) + local nests = chunkPropertyUtils.getNestCount(map, chunk) + if (nests > 0) then + local surface = map.surface + local activeness = chunkPropertyUtils.getNestActiveness(map, chunk) + local universe = map.universe + local raidActiveness = chunkPropertyUtils.getRaidNestActiveness(map, chunk) + + if (chunk[BASE_DETECTION_PHEROMONE] > universe.raiding_minimum_base_threshold) then + chunkPropertyUtils.setRaidNestActiveness(map, chunk, mMin(raidActiveness + 3, 20)) + else + chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 1) + end + if universe.attackUsePlayer and (chunk[PLAYER_PHEROMONE] > universe.attackPlayerThreshold) then + chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20)) + elseif (chunk[BASE_DETECTION_PHEROMONE] > universe.no_pollution_attack_threshold) then + chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20)) + elseif (chunk[BASE_DETECTION_PHEROMONE] > 0) then + local pollutionThreshold = 3 + local pollutionActiveness = false + if (surface.get_pollution({chunk.x, chunk.y}) > pollutionThreshold) then + pollutionActiveness = true + elseif (surface.get_pollution({chunk.x+32, chunk.y}) > pollutionThreshold) then + pollutionActiveness = true + elseif (surface.get_pollution({chunk.x-32, chunk.y}) > pollutionThreshold) then + pollutionActiveness = true + elseif (surface.get_pollution({chunk.x, chunk.y+32}) > pollutionThreshold) then + pollutionActiveness = true + elseif (surface.get_pollution({chunk.x, chunk.y-32}) > pollutionThreshold) then + pollutionActiveness = true + end + if pollutionActiveness then + chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20)) + else + chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 2) + end + else + chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 5) + chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 5) + end + else + chunkPropertyUtils.setNestActiveness(map, chunk, 0) + chunkPropertyUtils.setRaidNestActiveness(map, chunk, 0) + end +end + + +chunkPropertyUtilsG = chunkPropertyUtils +return chunkPropertyUtils diff --git a/RampantFixed/libs/ChunkUtils.lua b/RampantFixed/libs/ChunkUtils.lua new file mode 100644 index 00000000..b99cb2a1 --- /dev/null +++ b/RampantFixed/libs/ChunkUtils.lua @@ -0,0 +1,846 @@ +if chunkUtilsG then + return chunkUtilsG +end +local chunkUtils = {} + +-- imports + +local baseUtils = require("BaseUtils") +local constants = require("Constants") +local mapUtils = require("MapUtils") +local chunkPropertyUtils = require("ChunkPropertyUtils") + +-- constants + +local HIVE_BUILDINGS_TYPES = constants.HIVE_BUILDINGS_TYPES + +local DEFINES_WIRE_TYPE_RED = defines.wire_type.red +local DEFINES_WIRE_TYPE_GREEN = defines.wire_type.green + +local CHUNK_PASS_THRESHOLD = constants.CHUNK_PASS_THRESHOLD + +local AI_STATE_ONSLAUGHT = constants.AI_STATE_ONSLAUGHT + +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE +local GENERATOR_PHEROMONE_LEVEL = constants.GENERATOR_PHEROMONE_LEVEL + +local GET_ENTITY_PHEROMONES = constants.GET_ENTITY_PHEROMONES +local BUILDING_PHEROMONES = constants.BUILDING_PHEROMONES +local FACTORISSIMO_ENTITY = constants.FACTORISSIMO_ENTITY +local FACTORISSIMO_ENTITY_FEROMONE = constants.FACTORISSIMO_ENTITY_FEROMONE + + +local CHUNK_SIZE = constants.CHUNK_SIZE +local CHUNK_SIZE_DIVIDER = constants.CHUNK_SIZE_DIVIDER + +local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH +local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST + +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS +local CHUNK_IMPASSABLE = constants.CHUNK_IMPASSABLE + +local RESOURCE_NORMALIZER = constants.RESOURCE_NORMALIZER + +local CHUNK_TICK = constants.CHUNK_TICK +local GLOBAL_LVLUP_COOLDOWN = constants.GLOBAL_LVLUP_COOLDOWN + +local MAXIMUM_BASE_RADIUS = constants.MAXIMUM_BASE_RADIUS +local BASE_CHANGING_CHANCE = constants.BASE_CHANGING_CHANCE + +local VANILLA_ENTITIES = constants.VANILLA_ENTITIES + + +-- imported functions + +local setNestCount = chunkPropertyUtils.setNestCount +local setPlayerBaseGenerator = chunkPropertyUtils.setPlayerBaseGenerator +local addPlayerBaseGenerator = chunkPropertyUtils.addPlayerBaseGenerator + + +local setResourceGenerator = chunkPropertyUtils.setResourceGenerator +local addResourceGenerator = chunkPropertyUtils.addResourceGenerator +local setPlayerTurretCount = chunkPropertyUtils.setPlayerTurretCount +local setHiveCount = chunkPropertyUtils.setHiveCount +local setTrapCount = chunkPropertyUtils.setTrapCount +local setTurretCount = chunkPropertyUtils.setTurretCount +local setUtilityCount = chunkPropertyUtils.setUtilityCount +local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator +local getNestCount = chunkPropertyUtils.getNestCount +local getHiveCount = chunkPropertyUtils.getHiveCount +local getTrapCount = chunkPropertyUtils.getTrapCount +local getUtilityCount = chunkPropertyUtils.getUtilityCount +local getTurretCount = chunkPropertyUtils.getTurretCount +local setRaidNestActiveness = chunkPropertyUtils.setRaidNestActiveness +local setNestActiveness = chunkPropertyUtils.setNestActiveness + +local processNestActiveness = chunkPropertyUtils.processNestActiveness + +local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount + +local findNearbyBase = baseUtils.findNearbyBase +local createBase = baseUtils.createBase +local upgradeEntity = baseUtils.upgradeEntity + +local changeEntityAligment = baseUtils.changeEntityAligment +local changeEntityTier = baseUtils.changeEntityTier +local getDynamicRates = baseUtils.getDynamicRates +local changeEntityAndUpdateDynamicRates = baseUtils.changeEntityAndUpdateDynamicRates + +local thisIsNewEnemyPosition = chunkPropertyUtils.thisIsNewEnemyPosition + +local getChunkBase = chunkPropertyUtils.getChunkBase +local setChunkBase = chunkPropertyUtils.setChunkBase +local removeChunkBase = chunkPropertyUtils.removeChunkBase +local setPassable = chunkPropertyUtils.setPassable +local setPathRating = chunkPropertyUtils.setPathRating + +local getChunkByXY = mapUtils.getChunkByXY + +local mMin = math.min +local mMax = math.max +local mFloor = math.floor +local mRandom = math.random + +-- module code + +local function getEntityOverlapChunks(map, entity) + local boundingBox = entity.prototype.collision_box or entity.prototype.selection_box; + local overlapArray = map.universe.chunkOverlapArray + + overlapArray[1] = -1 --LeftTop + overlapArray[2] = -1 --RightTop + overlapArray[3] = -1 --LeftBottom + overlapArray[4] = -1 --RightBottom + + if boundingBox then + local center = entity.position + local topXOffset + local topYOffset + + local bottomXOffset + local bottomYOffset + + topXOffset = boundingBox.left_top.x + topYOffset = boundingBox.left_top.y + bottomXOffset = boundingBox.right_bottom.x + bottomYOffset = boundingBox.right_bottom.y + + local leftTopChunkX = mFloor((center.x + topXOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + local leftTopChunkY = mFloor((center.y + topYOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + + local rightTopChunkX = mFloor((center.x + bottomXOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + local leftBottomChunkY = mFloor((center.y + bottomYOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + + overlapArray[1] = getChunkByXY(map, leftTopChunkX, leftTopChunkY) -- LeftTop + if (leftTopChunkX ~= rightTopChunkX) then + overlapArray[2] = getChunkByXY(map, rightTopChunkX, leftTopChunkY) -- RightTop + end + if (leftTopChunkY ~= leftBottomChunkY) then + overlapArray[3] = getChunkByXY(map, leftTopChunkX, leftBottomChunkY) -- LeftBottom + end + if (leftTopChunkX ~= rightTopChunkX) and (leftTopChunkY ~= leftBottomChunkY) then + overlapArray[4] = getChunkByXY(map, rightTopChunkX, leftBottomChunkY) -- RightBottom + end + end + return overlapArray +end + +local function scanPaths(chunk, map) + local surface = map.surface + local pass = CHUNK_IMPASSABLE + + local x = chunk.x + local y = chunk.y + + local universe = map.universe + local filteredEntitiesCliffQuery = universe.filteredEntitiesCliffQuery + local filteredTilesPathQuery = universe.filteredTilesPathQuery + local count_entities_filtered = surface.count_entities_filtered + local count_tiles_filtered = surface.count_tiles_filtered + + local passableNorthSouth = false + local passableEastWest = false + + local topPosition = filteredEntitiesCliffQuery.area[1] + local bottomPosition = filteredEntitiesCliffQuery.area[2] + topPosition[2] = y + bottomPosition[2] = y + 32 + + for xi=x, x + 32 do + topPosition[1] = xi + bottomPosition[1] = xi + 1 + if (count_entities_filtered(filteredEntitiesCliffQuery) == 0) and + (count_tiles_filtered(filteredTilesPathQuery) == 0) + then + passableNorthSouth = true + break + end + end + + topPosition[1] = x + bottomPosition[1] = x + 32 + + for yi=y, y + 32 do + topPosition[2] = yi + bottomPosition[2] = yi + 1 + if (count_entities_filtered(filteredEntitiesCliffQuery) == 0) and + (count_tiles_filtered(filteredTilesPathQuery) == 0) + then + passableEastWest = true + break + end + end + + if passableEastWest and passableNorthSouth then + pass = CHUNK_ALL_DIRECTIONS + elseif passableEastWest then + pass = CHUNK_EAST_WEST + elseif passableNorthSouth then + pass = CHUNK_NORTH_SOUTH + end + return pass +end + +local function scorePlayerBuildings(map, chunk) + local surface = map.surface + local universe = map.universe + local turretsCount = 0 + local pheromones = {} + pheromones[BASE_PHEROMONE] = 0 + pheromones[BASE_DETECTION_PHEROMONE] = 0 + if surface.count_entities_filtered(universe.hasPlayerStructuresQuery) > 0 then + for lvlName, values in pairs(GENERATOR_PHEROMONE_LEVEL) do + local query = universe.filteredEntities_player_pheromones[lvlName] + if query then + local enityCnt = surface.count_entities_filtered(query) + pheromones[BASE_PHEROMONE] = pheromones[BASE_PHEROMONE] + enityCnt*values[BASE_PHEROMONE] + pheromones[BASE_DETECTION_PHEROMONE] = pheromones[BASE_DETECTION_PHEROMONE] + enityCnt*values[BASE_DETECTION_PHEROMONE] + if lvlName == "turrets" then + turretsCount = turretsCount + enityCnt + end + end + end + + local entities = surface.find_entities_filtered(universe.filteredEntitiesPlayerQueryFactorissimo) -- + for i = 1, #entities do + local entity = entities[i] + if FACTORISSIMO_ENTITY(entity) then + pheromones[BASE_PHEROMONE] = pheromones[BASE_PHEROMONE] + FACTORISSIMO_ENTITY_FEROMONE[BASE_PHEROMONE] + pheromones[BASE_DETECTION_PHEROMONE] = pheromones[BASE_DETECTION_PHEROMONE] + FACTORISSIMO_ENTITY_FEROMONE[BASE_DETECTION_PHEROMONE] + end + end + end + setPlayerBaseGenerator(map, chunk, pheromones[BASE_PHEROMONE], BASE_PHEROMONE) + setPlayerBaseGenerator(map, chunk, pheromones[BASE_DETECTION_PHEROMONE], BASE_DETECTION_PHEROMONE) + setPlayerTurretCount(map, chunk, turretsCount) + + return pheromones[BASE_PHEROMONE] +end + +function chunkUtils.initialScan(chunk, map, tick) + local surface = map.surface + local universe = map.universe + local waterTiles = (1 - (surface.count_tiles_filtered(universe.filteredTilesQuery) * 0.0009765625)) * 0.80 + local enemyBuildings = surface.find_entities_filtered(universe.filteredEntitiesEnemyStructureQuery) + + if (waterTiles >= CHUNK_PASS_THRESHOLD) or (#enemyBuildings > 0) then + local neutralObjects = mMax(0, + mMin(1 - (surface.count_entities_filtered(universe.filteredEntitiesChunkNeutral) * 0.005), + 1) * 0.20) + local pass = scanPaths(chunk, map) + + local pheromones = scorePlayerBuildings(map, chunk) + + if ((pheromones > 0) or (#enemyBuildings > 0)) and (pass == CHUNK_IMPASSABLE) then + pass = CHUNK_ALL_DIRECTIONS + end + + if (pass ~= CHUNK_IMPASSABLE) then + local resources = surface.count_entities_filtered(universe.countResourcesQuery) * RESOURCE_NORMALIZER + + local buildingHiveTypeLookup = universe.buildingHiveTypeLookup + local counts = map.chunkScanCounts + for i=1,#HIVE_BUILDINGS_TYPES do + counts[HIVE_BUILDINGS_TYPES[i]] = 0 + end + local unknownNests = 0 + if (#enemyBuildings > 0) then + local thisIsRampantEnemy = false + local base + if universe.NEW_ENEMIES then + base = findNearbyBase(map, chunk, MAXIMUM_BASE_RADIUS, BASE_CHANGING_CHANCE) + if base then + setChunkBase(map, chunk, base) + else + base = createBase(map, chunk, tick, thisIsNewEnemyPosition(universe, chunk.x, chunk.y)) + end + thisIsRampantEnemy = base.thisIsRampantEnemy + end + + if thisIsRampantEnemy then + local alignment = base.alignment + local unitList = surface.find_entities_filtered(universe.filteredEntitiesUnitQuery) + for i=1,#unitList do + local unit = unitList[i] + if (unit.valid) then + unit.destroy() + end + end + + for i = 1, #enemyBuildings do + local enemyBuilding = enemyBuildings[i] + if not buildingHiveTypeLookup[enemyBuilding.name] then + local newEntity + if VANILLA_ENTITIES[enemyBuilding.name] or ((not universe.ALLOW_OTHER_ENEMIES) and (mRandom()<0.8)) then + newEntity = upgradeEntity(enemyBuilding, alignment, map, nil, true) + end + if newEntity then + local hiveType = buildingHiveTypeLookup[newEntity.name] + counts[hiveType] = counts[hiveType] + 1 + elseif (enemyBuilding and enemyBuilding.type == "unit-spawner") then + unknownNests = unknownNests + 1 + end + end + end + setNestCount(map, chunk, counts["spitter-spawner"] + counts["biter-spawner"] + unknownNests) + setUtilityCount(map, chunk, counts["utility"]) + setHiveCount(map, chunk, counts["hive"]) + setTrapCount(map, chunk, counts["trap"]) + setTurretCount(map, chunk, counts["turret"]) + + else + for i=1,#enemyBuildings do + local building = enemyBuildings[i] + local hiveType = buildingHiveTypeLookup[building.name] or + ((building.type == "turret") and "turret") + if hiveType then + counts[hiveType] = counts[hiveType] + 1 + elseif building.type == "unit-spawner" then + unknownNests = unknownNests + 1 + end + end + setNestCount(map, chunk, counts["spitter-spawner"] + counts["biter-spawner"] + unknownNests) + setTurretCount(map, chunk, counts["turret"]) + end + if map.suspended then + map.suspended = false + map.suspendCheckTick = tick + end + end + + setResourceGenerator(map, chunk, resources) + + setPassable(map, chunk, pass) + setPathRating(map, chunk, waterTiles + neutralObjects) + + return chunk + end + end + + return -1 +end + +function chunkUtils.chunkPassScan(chunk, map) + local surface = map.surface + local universe = map.universe + local waterTiles = (1 - (surface.count_tiles_filtered(universe.filteredTilesQuery) * 0.0009765625)) * 0.80 + + if (waterTiles >= CHUNK_PASS_THRESHOLD) then + local neutralObjects = mMax(0, + mMin(1 - (surface.count_entities_filtered(universe.filteredEntitiesChunkNeutral) * 0.005), + 1) * 0.20) + local pass = scanPaths(chunk, map) + + local playerObjects = getPlayerBaseGenerator(map, chunk, BASE_PHEROMONE) + + local nests = getNestCount(map, chunk) + + if ((playerObjects > 0) or (nests > 0)) and (pass == CHUNK_IMPASSABLE) then + pass = CHUNK_ALL_DIRECTIONS + end + + setPassable(map, chunk, pass) + setPathRating(map, chunk, waterTiles + neutralObjects) + + return chunk + end + + return -1 +end + +function chunkUtils.mapScanPlayerChunk(chunk, map) + scorePlayerBuildings(map, chunk) +end + +function chunkUtils.mapScanResourceChunk(chunk, map) + local surface = map.surface + local universe = map.universe + local resources = surface.count_entities_filtered(universe.countResourcesQuery) * RESOURCE_NORMALIZER + setResourceGenerator(map, chunk, resources) + local waterTiles = (1 - (surface.count_tiles_filtered(universe.filteredTilesQuery) * 0.0009765625)) * 0.80 + local neutralObjects = mMax(0, + mMin(1 - (surface.count_entities_filtered(universe.filteredEntitiesChunkNeutral) * 0.005), + 1) * 0.20) + setPathRating(map, chunk, waterTiles + neutralObjects) +end + +function chunkUtils.mapScanEnemyChunk(chunk, map) + local universe = map.universe + local buildingHiveTypeLookup = universe.buildingHiveTypeLookup + local buildings = map.surface.find_entities_filtered(universe.filteredEntitiesEnemyStructureQuery) + local counts = map.chunkScanCounts + + local FactionCounts = {} + local enemyAlignmentLookup = universe.enemyAlignmentLookup + local base = getChunkBase(map, chunk) + local changingEntities = false + local dynamicRates + + local baseTier = 1 + local newTier = 1 + + local thisIsRampantEnemy = false + if universe.NEW_ENEMIES and base and base.thisIsRampantEnemy then + thisIsRampantEnemy = true + changingEntities = base.changingEntities + baseTier = mMax(base.tier-base.tierHandicap, 1) + newTier = mMax(baseTier - mRandom(0, 2), 1) + end + + if changingEntities then + dynamicRates = baseUtils.getDynamicRates(base) + end + + for i=1,#HIVE_BUILDINGS_TYPES do + counts[HIVE_BUILDINGS_TYPES[i]] = 0 + end + + local mutatesCnt = 0 + local maxMutations = 5 + local tick = game.tick + + local pendingMutations = universe.pendingMutations + local pendingEntities = pendingMutations["entities"] + local pendingChunks = pendingMutations["chunks"] + local pendingEntitiesCnt = 0 + local chunkIndex = "x"..chunk.x.."y"..chunk.y.."m"..map.surface.index + + local buildingsCnt = #buildings + + for i=1,#buildings do + local building = buildings[i] + local newBuilding + -- mutation and upgrade-- + if thisIsRampantEnemy and (not pendingChunks[chunkIndex]) and building.valid then + if changingEntities then + if ((chunk.nextMutationTick or 0) < tick) and (buildingHiveTypeLookup[building.name] or (building.type == "turret")) then + -- if mutatesCnt>maxMutations then + pendingEntitiesCnt = pendingEntitiesCnt + 1 + local entityData = { + ["chunkIndex"] = chunkIndex, + ["surfaceIndex"] = map.surface.index, + ["base"] = base, + ["entity"] = building + } + pendingEntities[building.unit_number] = entityData + -- else + -- newBuilding = changeEntityAndUpdateDynamicRates(building, dynamicRates, map, base) + -- if newBuilding then + -- mutatesCnt = mutatesCnt + 1 + -- building = newBuilding + -- end + -- end + end + else + local oldTier = universe.buildingTierLookup[building.name] + if oldTier and (oldTier"..newBuilding.name) -- debug + universe.lvlupTick = tick + GLOBAL_LVLUP_COOLDOWN + building = newBuilding + end + end + end + end + end + + ----- + if building.valid then + local hiveType = buildingHiveTypeLookup[building.name] or + (((building.type == "turret") and "turret") + or ((building.type =="unit-spawner") and "biter-spawner") + ) + counts[hiveType] = counts[hiveType] + 1 + + + if universe.NEW_ENEMIES then + if building.type =="unit-spawner" then + local faction = enemyAlignmentLookup[building.name] + if faction then + FactionCounts[faction] = (FactionCounts[faction] or 0) + 1 + end + end + end + end + end + + if pendingEntitiesCnt > 0 then + pendingChunks[chunkIndex] = pendingEntitiesCnt + end + + if (mutatesCnt > 0) or (pendingEntitiesCnt > 0) then + chunk.nextMutationTick = tick + mMin(pendingEntitiesCnt + mutatesCnt, 20)*1800 + end + + + if universe.NEW_ENEMIES then + if (buildingsCnt > 0) and not base then + base = findNearbyBase(map, chunk, MAXIMUM_BASE_RADIUS, BASE_CHANGING_CHANCE) + if base then + setChunkBase(map, chunk, base) + else + local FactionCountsIterator = next(FactionCounts, nil) + if FactionCountsIterator then + base = createBase(map, chunk, game.tick, true) + else + base = createBase(map, chunk, game.tick, thisIsNewEnemyPosition(universe, chunk.x, chunk.y)) + end + setChunkBase(map, chunk, base) + end + thisIsRampantEnemy = base.thisIsRampantEnemy + ---------------- + end + if (buildingsCnt == 0) and base then + removeChunkBase(map, chunk, base) + end + end + + + setNestCount(map, chunk, counts["spitter-spawner"] + counts["biter-spawner"]) + setUtilityCount(map, chunk, counts["utility"]) + setHiveCount(map, chunk, counts["hive"]) + setTrapCount(map, chunk, counts["trap"]) + setTurretCount(map, chunk, counts["turret"]) + + if universe.NEW_ENEMIES and thisIsRampantEnemy then + local baseChunkFactions = {} + + if base then + base.chunkFactions[chunk] = FactionCounts + end + end + + if map.suspended and (counts["spitter-spawner"] + counts["biter-spawner"] > 0) then + map.suspended = false + map.suspendCheckTick = game.tick + end +end + +function chunkUtils.entityForPassScan(map, entity) + local overlapArray = getEntityOverlapChunks(map, entity) + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if (chunk ~= -1) then + local chunkData = {chunk.x, chunk.y, map.surface.index} + local chunkIndex = "x"..chunkData[1].."y"..chunkData[2].."m"..chunkData[3] + map.universe.chunkToPassScan[chunkIndex] = chunkData + end + end +end + +function chunkUtils.createChunk(topX, topY) + local chunk = { + x = topX, + y = topY + } + chunk[BASE_PHEROMONE] = 0 + chunk[BASE_DETECTION_PHEROMONE] = 0 -- + !ΠšΠ”Π + chunk[PLAYER_PHEROMONE] = 0 + chunk[RESOURCE_PHEROMONE] = 0 + chunk[CHUNK_TICK] = 0 + chunk["deathLevel"] = nil + + return chunk +end + +function chunkUtils.colorChunk(chunk, surface, color) + local lx = math.floor(chunk.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + local ly = math.floor(chunk.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + + rendering.draw_rectangle({ + color = color or {0.1, 0.3, 0.1, 0.6}, + width = 32 * 32, + filled = true, + left_top = {lx, ly}, + right_bottom = {lx+32, ly+32}, + surface = surface, + time_to_live = 180, + draw_on_ground = true, + visible = true + }) +end + +function chunkUtils.colorXY(x, y, surface, color) + local lx = math.floor(x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + local ly = math.floor(y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + + rendering.draw_rectangle({ + color = color or {0.1, 0.3, 0.1, 0.6}, + width = 32 * 32, + filled = true, + left_top = {lx, ly}, + right_bottom = {lx+32, ly+32}, + surface = surface, + time_to_live = 180, + draw_on_ground = true, + visible = true + }) +end + + +function chunkUtils.registerEnemyBaseStructure(map, entity, base) + local entityType = entity.type + if ((entityType == "unit-spawner") or (entityType == "turret")) and (entity.force.name == "enemy") then + local overlapArray = getEntityOverlapChunks(map, entity) + + local getFunc + local setFunc + local universe = map.universe + local hiveTypeLookup = universe.buildingHiveTypeLookup + local hiveType = hiveTypeLookup[entity.name] + if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getNestCount + setFunc = setNestCount + elseif (hiveType == "turret") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getTurretCount + setFunc = setTurretCount + elseif (hiveType == "trap") then + getFunc = getTrapCount + setFunc = setTrapCount + elseif (hiveType == "utility") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getUtilityCount + setFunc = setUtilityCount + elseif (hiveType == "hive") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getHiveCount + setFunc = setHiveCount + else + if (entityType == "turret") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getTurretCount + setFunc = setTurretCount + elseif (entityType == "unit-spawner") then + map.builtEnemyBuilding = map.builtEnemyBuilding + 1 + getFunc = getNestCount + setFunc = setNestCount + end + end + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if (chunk ~= -1) then + setFunc(map, chunk, getFunc(map, chunk) + 1) + if base then + setChunkBase(map, chunk, base) + end + processNestActiveness(map, chunk) + end + end + end + + return entity +end + +function chunkUtils.unregisterEnemyBaseStructure(map, entity, damageType) + local entityType = entity.type + if ((entityType == "unit-spawner") or (entityType == "turret")) and (entity.force.name == "enemy") then + local overlapArray = getEntityOverlapChunks(map, entity) + local getFunc + local setFunc + local hiveTypeLookup = map.universe.buildingHiveTypeLookup + local hiveType = hiveTypeLookup[entity.name] + if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getNestCount + setFunc = setNestCount + elseif (hiveType == "turret") then + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getTurretCount + setFunc = setTurretCount + elseif (hiveType == "trap") then + getFunc = getTrapCount + setFunc = setTrapCount + elseif (hiveType == "utility") then + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getUtilityCount + setFunc = setUtilityCount + elseif (hiveType == "hive") then + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getHiveCount + setFunc = setHiveCount + else + if (entityType == "turret") then + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getTurretCount + setFunc = setTurretCount + elseif (entityType == "unit-spawner") then + hiveType = "biter-spawner" + map.lostEnemyBuilding = map.lostEnemyBuilding + 1 + getFunc = getNestCount + setFunc = setNestCount + end + end + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if (chunk ~= -1) then + local count = getFunc(map, chunk) + if count then + if (count <= 1) then + if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then + setRaidNestActiveness(map, chunk, 0) + setNestActiveness(map, chunk, 0) + end + setFunc(map, chunk, 0) + if (getEnemyStructureCount(map, chunk) == 0) then + removeChunkBase(map, chunk) + end + else + setFunc(map, chunk, count - 1) + end + end + end + end + end +end + +local function ignoredForce(force, universe) + local forceIgnored = true + for i = 1, #universe.activePlayerForces do + if universe.activePlayerForces[i] == force.name then + forceIgnored = false + break + end + end + return forceIgnored +end + +function chunkUtils.accountPlayerEntity(entity, map, addObject, creditNatives) + if ignoredForce(entity.force, map.universe) then + return + end + local GENERATOR_PHEROMONE_LEVEL = constants.GENERATOR_PHEROMONE_LEVEL + local pointsToAccount = {BASE_PHEROMONE, BASE_DETECTION_PHEROMONE} + for i = 1, #pointsToAccount do + local pheromoneType = pointsToAccount[i] + if (entity.force.name ~= "enemy") then + local universe = map.universe + local entityValue = GET_ENTITY_PHEROMONES(entity, pheromoneType) + local overlapArray = getEntityOverlapChunks(map, entity) + if not addObject then + if (creditNatives) and (pheromoneType==BASE_PHEROMONE) then + if entity.type ~= "wall" then -- + !ΠšΠ”Π 2021.11 + map.destroyPlayerBuildings = map.destroyPlayerBuildings + 1 + if universe.aiDifficulty == "Hard" then + if (map.state == AI_STATE_ONSLAUGHT) then + map.points = map.points + entityValue + if universe.aiPointsPrintGainsToChat then + game.print(map.surface.name .. ": Points: +" .. math.floor(entityValue) .. ". [Structure Kill] Total: " .. string.format("%.2f", map.points)) + end + else + map.points = map.points + entityValue * 0.12 + if universe.aiPointsPrintGainsToChat then + game.print(map.surface.name .. ": Points: +" .. math.floor(entityValue * 0.12) .. ". [Structure Kill] Total: " .. string.format("%.2f", map.points)) + end + end + end + end + end + entityValue = -entityValue + end + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if chunk ~= -1 then + addPlayerBaseGenerator(map, chunk, entityValue, pheromoneType) + end + end + end + end + return entity +end + +function chunkUtils.unregisterResource(entity, map) + if entity.prototype.infinite_resource then + return + end + local overlapArray = getEntityOverlapChunks(map, entity) + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if (chunk ~= -1) then + addResourceGenerator(map, chunk, -RESOURCE_NORMALIZER) + end + end +end + +function chunkUtils.registerResource(entity, map) + local overlapArray = getEntityOverlapChunks(map, entity) + + for i=1,#overlapArray do + local chunk = overlapArray[i] + if (chunk ~= -1) then + addResourceGenerator(map, chunk, RESOURCE_NORMALIZER) + end + end +end + +function chunkUtils.makeImmortalEntity(surface, entity) + local repairPosition = entity.position + local repairName = entity.name + local repairForce = entity.force + local repairDirection = entity.direction + + local wires + if (entity.type == "electric-pole") then + wires = entity.neighbours + end + entity.destroy() + local newEntity = surface.create_entity({position=repairPosition, + name=repairName, + direction=repairDirection, + force=repairForce}) + if wires then + for _,v in pairs(wires.copper) do + if (v.valid) then + newEntity.connect_neighbour(v); + end + end + for _,v in pairs(wires.red) do + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); + end + end + for _,v in pairs(wires.green) do + if (v.valid) then + newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); + end + end + end + + newEntity.destructible = false +end + +chunkUtilsG = chunkUtils +return chunkUtils diff --git a/RampantFixed/libs/Constants.lua b/RampantFixed/libs/Constants.lua new file mode 100644 index 00000000..0a3c8f9f --- /dev/null +++ b/RampantFixed/libs/Constants.lua @@ -0,0 +1,1830 @@ +if constantsG then + return constantsG +end +local constants = {} + +-- versions + +constants.VERSION_5 = 5 +constants.VERSION_10 = 10 +constants.VERSION_11 = 11 +constants.VERSION_12 = 12 +constants.VERSION_16 = 16 +constants.VERSION_18 = 18 +constants.VERSION_20 = 20 +constants.VERSION_22 = 22 +constants.VERSION_23 = 23 +constants.VERSION_25 = 25 +constants.VERSION_26 = 26 +constants.VERSION_27 = 27 +constants.VERSION_28 = 28 +constants.VERSION_33 = 33 +constants.VERSION_38 = 38 +constants.VERSION_41 = 41 +constants.VERSION_44 = 44 +constants.VERSION_51 = 51 +constants.VERSION_57 = 57 +constants.VERSION_72 = 72 +constants.VERSION_73 = 73 +constants.VERSION_75 = 75 +constants.VERSION_76 = 76 +constants.VERSION_77 = 77 +constants.VERSION_85 = 85 +constants.VERSION_86 = 86 +constants.VERSION_87 = 87 +constants.VERSION_88 = 88 + +-- misc + +-- constants.WATER_TILE_NAMES = { "water", "deepwater", "water-green", "deepwater-green" } + +constants.MAGIC_MAXIMUM_NUMBER = 1e99 -- used in loops trying to find the lowest/highest score +constants.MAGIC_MAXIMUM_BASE_NUMBER = 100000000 +constants.MAXIMUM_BASE_RADIUS = 128 -- + !ΠšΠ”Π 2021.11 (chunkUtils.initialScan) <32 - 1 chunk, 50 ~ 3x3, 128 - 4 chunk radius, ... +constants.BASE_CHANGING_CHANCE = 0.1 -- + !ΠšΠ”Π 2021.11 (chunkUtils.initialScan) + +constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN = 1000 +constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX = 130000 + +constants.PROCESS_QUEUE_SIZE = 140 +constants.SCAN_QUEUE_SIZE = 2 +constants.RESOURCE_QUEUE_SIZE = 7 +constants.ENEMY_QUEUE_SIZE = 7 +constants.PLAYER_QUEUE_SIZE = 7 +constants.CLEANUP_QUEUE_SIZE = 8 +constants.ATTACK_QUEUE_SIZE = 18 +constants.BASE_QUEUE_SIZE = 1 +constants.PROCESS_STATIC_QUEUE_SIZE = 20 +constants.PROCESS_PLAYER_BOUND = 128 +constants.VICTORY_SCENT_BOUND = 128 + +constants.TICKS_A_SECOND = 60 +constants.TICKS_A_MINUTE = constants.TICKS_A_SECOND * 60 + +constants.OVERDAMAGEPROTECTION_THRESHOLD = 20 + +constants.CHUNK_PASS_THRESHOLD = 0.2 + +-- constants.INTERVAL_PLAYER_PROCESS = 63 +-- constants.INTERVAL_MAP_PROCESS = 5 +-- constants.INTERVAL_MAP_STATIC_PROCESS = 11 +-- constants.INTERVAL_SCAN = 19 +-- constants.INTERVAL_CHUNK_PROCESS = 23 +-- constants.INTERVAL_LOGIC = 59 +-- constants.INTERVAL_TEMPERAMENT = 121 +-- constants.INTERVAL_SQUAD = 14 +-- constants.INTERVAL_NEST = 16 +-- constants.INTERVAL_PASS_SCAN = 29 +-- constants.INTERVAL_RESQUAD = 101 +-- constants.INTERVAL_SPAWNER = 19 +-- constants.INTERVAL_VICTORY = 10 +-- constants.INTERVAL_CLEANUP = 34 + +constants.COOLDOWN_RALLY = constants.TICKS_A_SECOND * 10 +constants.COOLDOWN_RETREAT = constants.TICKS_A_SECOND * 10 + +constants.RESOURCE_NORMALIZER = 1 / 1024 + +constants.PLAYER_PHEROMONE_MULTIPLER = 100 + +constants.DURATION_ACTIVE_NEST = 60 * constants.TICKS_A_SECOND + +constants.DURATION_ACTIVE_NEST_DIVIDER = 1 / constants.DURATION_ACTIVE_NEST + +-- chunk properties + +constants.CHUNK_SIZE = 32 +constants.CHUNK_AND_HALF_SIZE = constants.CHUNK_SIZE * 1.5 +constants.DOUBLE_CHUNK_SIZE = constants.CHUNK_SIZE * 2 +constants.TRIPLE_CHUNK_SIZE = constants.CHUNK_SIZE * 3 +constants.HALF_CHUNK_SIZE = constants.CHUNK_SIZE / 2 +constants.QUARTER_CHUNK_SIZE = constants.HALF_CHUNK_SIZE / 2 + +constants.CHUNK_SIZE_DIVIDER = 1 / constants.CHUNK_SIZE + +constants.CHUNK_IMPASSABLE = 0 +constants.CHUNK_NORTH_SOUTH = 1 +constants.CHUNK_EAST_WEST = 2 +constants.CHUNK_ALL_DIRECTIONS = 3 +-- constants.CHUNK_PLAYER_BORDER = 4 +-- constants.CHUNK_PLAYER_INTERIOR = 5 + +constants.BASE_SEARCH_RADIUS = 4 * constants.CHUNK_SIZE +constants.EVOLUTION_INCREMENTS = 0.05 + +constants.DIVISOR_DEATH_TRAIL_TABLE = { 0.75, 0.65, 0.55, 0.45, 0.35 } + +-- ai + +constants.MAX_TICKS_BEFORE_SORT_CHUNKS = 60 * 60 * 30 -- 1 tick = 1/60 sec * 60 = 1 second + +constants.RESOURCE_MINIMUM_FORMATION_DELTA = 15 + +constants.MINIMUM_AI_POINTS = 400 +constants.AI_SQUAD_COST = 175 +constants.RECOVER_NEST_COST = constants.AI_SQUAD_COST +constants.RECOVER_WORM_COST = constants.AI_SQUAD_COST * 0.5 +constants.AI_VENGENCE_SQUAD_COST = 45 +constants.AI_SETTLER_COST = 300 +constants.AI_BASE_BUILDING_COST = 500 +constants.AI_TUNNEL_COST = 100 +constants.AI_MAX_POINTS = 15500 + +constants.AI_UNIT_REFUND = 3 + +constants.AI_MAX_BITER_GROUP_SIZE = 600 + +constants.AI_SQUAD_MERGE_THRESHOLD = constants.AI_MAX_BITER_GROUP_SIZE * 0.75 + +constants.AI_MAX_SQUADS_PER_CYCLE = 7 + +constants.AI_STATE_PEACEFUL = 1 +constants.AI_STATE_AGGRESSIVE = 2 +constants.AI_STATE_RAIDING = 4 +constants.AI_STATE_MIGRATING = 5 +constants.AI_STATE_SIEGE = 6 +constants.AI_STATE_ONSLAUGHT = 7 +constants.AI_STATE_GROWING = 8 + +constants.stateEnglish = {} +constants.stateEnglish[constants.AI_STATE_PEACEFUL] = "AI_STATE_PEACEFUL" +constants.stateEnglish[constants.AI_STATE_AGGRESSIVE] = "AI_STATE_AGGRESSIVE" +constants.stateEnglish[constants.AI_STATE_RAIDING] = "AI_STATE_RAIDING" +constants.stateEnglish[constants.AI_STATE_MIGRATING] = "AI_STATE_MIGRATING" +constants.stateEnglish[constants.AI_STATE_SIEGE] = "AI_STATE_SIEGE" +constants.stateEnglish[constants.AI_STATE_ONSLAUGHT] = "AI_STATE_ONSLAUGHT" +constants.stateEnglish[constants.AI_STATE_GROWING] = "AI_STATE_GROWING" + +constants.BASE_AI_STATE_DORMANT = 0 +constants.BASE_AI_STATE_ACTIVE = 1 +constants.BASE_AI_STATE_OVERDRIVE = 2 +constants.BASE_AI_STATE_MUTATE = 3 + +constants.AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION = 0.5 +constants.AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION = 3 + +constants.AI_MIN_STATE_DURATION = 10 +constants.AI_MAX_STATE_DURATION = 25 + +constants.AI_MIN_TEMPERAMENT_DURATION = 25 -- ?? +constants.AI_MAX_TEMPERAMENT_DURATION = 32 + +constants.BASE_AI_MIN_STATE_DURATION = 12 +constants.BASE_AI_MAX_STATE_DURATION = 20 + +constants.GROWING_COOLDOWN = 3600 + +-- ai base + +constants.BASE_CLEAN_DISTANCE = 13 + +constants.BASE_DEADZONE_TTL = constants.TICKS_A_MINUTE * 18 + +constants.BASE_COLLECTION_THRESHOLD = constants.TICKS_A_MINUTE * 2 + +constants.BASE_DISTANCE_TO_EVO_INDEX = 1 / settings.startup["rampantFixed--max-evo-dist"].value + +constants.BASE_SPAWNER_UPGRADE = 30*60*60 -- 30min -- 250 +constants.BASE_WORM_UPGRADE = 20*60*60 -- 20min -- 200 +constants.BASE_EVOLVE_THRESHOLD = constants.BASE_SPAWNER_UPGRADE -- 1st evolve time +constants.GLOBAL_EVOLVE_COOLDOWN = 5*60*60 +constants.GLOBAL_LVLUP_COOLDOWN = 1*60*60 + +constants.BASE_DISTANCE_THRESHOLD = 30 * constants.CHUNK_SIZE +constants.BASE_DISTANCE_LEVEL_BONUS = 15 + +constants.BASE_PROCESS_INTERVAL = constants.TICKS_A_SECOND * 2 + +-- ai retreat + +constants.NO_RETREAT_BASE_PERCENT = 0.10 +constants.NO_RETREAT_EVOLUTION_BONUS_MAX = 0.25 + +-- pheromone amounts + +constants.MOVEMENT_PENALTY_AMOUNT = 300000 +constants.DEATH_PHEROMONE_GENERATOR_AMOUNT = 1300 +constants.DOUBLE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 2 +constants.TEN_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 10 +constants.FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 5 +constants.SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT = 200 +constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT = 300 + +constants.IMPASSABLE_TERRAIN_GENERATOR_AMOUNT = 0 + +-- pheromone diffusion amounts + +constants.MOVEMENT_GENERATOR_PERSISTANCE = 0.90 + +-- chunk attributes + +constants.BASE_PHEROMONE = 1 +constants.PLAYER_PHEROMONE = 2 +constants.RESOURCE_PHEROMONE = 3 + +-- constants.PASSABLE = 5 + +constants.CHUNK_TICK = 4 +constants.BASE_DETECTION_PHEROMONE = 5 -- + !ΠšΠ”Π 2021.11 + +-- constants.PATH_RATING = 7 + +-- Squad status + +constants.SQUAD_RETREATING = 1 -- used during squad retreat +constants.SQUAD_GUARDING = 2 -- used when squad is idle +constants.SQUAD_BURROWING = 3 +constants.SQUAD_RAIDING = 4 -- used when player stuff is close +constants.SQUAD_SETTLING = 5 +constants.SQUAD_BUILDING = 6 + +-- Squad Related + +constants.RETREAT_GRAB_RADIUS = 24 +constants.RETREAT_SPAWNER_GRAB_RADIUS = 75 + +constants.BASE_RALLY_CHANCE = 0.02 +constants.BONUS_RALLY_CHANCE = 0.06 + +constants.RALLY_CRY_DISTANCE = 96 +constants.SETTLER_DISTANCE = 224 +constants.COOLDOWN_HUNT = 600 -- ticks + +constants.GROUP_MERGE_DISTANCE = 28 + +constants.MAX_PENALTY_BEFORE_PURGE = 36000 + +-- player building pheromones +constants.FACTORISSIMO_ENTITY_FEROMONE = {} -- + !ΠšΠ”Π see also updgrade.lua, chunkUtils.accountPlayerEntity +constants.FACTORISSIMO_ENTITY_FEROMONE[constants.BASE_PHEROMONE] = 5000 +constants.FACTORISSIMO_ENTITY_FEROMONE[constants.BASE_DETECTION_PHEROMONE] = 15000 + + +constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK = 10000 +constants.NO_POLLUTION_ATTACK_THRESHOLD = 5900 -- ~ 5 chunks raduis (if 10000 max value) +constants.K_NO_ACTIVE_NESTS = 40 +constants.K_TOO_LOW_ACTIVE_NESTS = 20 +constants.K_LOW_ACTIVE_NESTS = 10 +constants.RAIDING_MINIMUM_BASE_THRESHOLD = 550 -- ~ 27 chunks raduis (if 10000 max value) + +constants.GENERATOR_PHEROMONE_LEVEL = {} +local GENERATOR_PHEROMONE_LEVEL = constants.GENERATOR_PHEROMONE_LEVEL +GENERATOR_PHEROMONE_LEVEL["1"] = {} +GENERATOR_PHEROMONE_LEVEL["1"][constants.BASE_PHEROMONE] = 25 +GENERATOR_PHEROMONE_LEVEL["1"][constants.BASE_DETECTION_PHEROMONE] = 25 +GENERATOR_PHEROMONE_LEVEL["2"] = {} +GENERATOR_PHEROMONE_LEVEL["2"][constants.BASE_PHEROMONE] = 100 +GENERATOR_PHEROMONE_LEVEL["2"][constants.BASE_DETECTION_PHEROMONE] = 100 +GENERATOR_PHEROMONE_LEVEL["3"] = {} +GENERATOR_PHEROMONE_LEVEL["3"][constants.BASE_PHEROMONE] = 500 +GENERATOR_PHEROMONE_LEVEL["3"][constants.BASE_DETECTION_PHEROMONE] = 500 +GENERATOR_PHEROMONE_LEVEL["4"] = {} +GENERATOR_PHEROMONE_LEVEL["4"][constants.BASE_PHEROMONE] = 1000 +GENERATOR_PHEROMONE_LEVEL["4"][constants.BASE_DETECTION_PHEROMONE] = 1000 +GENERATOR_PHEROMONE_LEVEL["5"] = {} +GENERATOR_PHEROMONE_LEVEL["5"][constants.BASE_PHEROMONE] = 1750 +GENERATOR_PHEROMONE_LEVEL["5"][constants.BASE_DETECTION_PHEROMONE] = 1750 +GENERATOR_PHEROMONE_LEVEL["6"] = {} +GENERATOR_PHEROMONE_LEVEL["6"][constants.BASE_PHEROMONE] = 6000 +GENERATOR_PHEROMONE_LEVEL["6"][constants.BASE_DETECTION_PHEROMONE] = 6000 +GENERATOR_PHEROMONE_LEVEL["turrets"] = {} +GENERATOR_PHEROMONE_LEVEL["turrets"][constants.BASE_PHEROMONE] = 100 +GENERATOR_PHEROMONE_LEVEL["turrets"][constants.BASE_DETECTION_PHEROMONE] = constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK +GENERATOR_PHEROMONE_LEVEL["radar"] = {} +GENERATOR_PHEROMONE_LEVEL["radar"][constants.BASE_PHEROMONE] = 1750 +GENERATOR_PHEROMONE_LEVEL["radar"][constants.BASE_DETECTION_PHEROMONE] = constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK + +----------------------- +constants.BUILDING_PHEROMONES = {} +local BUILDING_PHEROMONES = constants.BUILDING_PHEROMONES +-- -- if changes BUILDING_PHEROMONES, dont forget to increase version in Upgrade.lua +-- look at ChunkUtils.scorePlayerBuildings, chunkUtils.accountPlayerEntity +BUILDING_PHEROMONES["transport-belt"] = "1" +BUILDING_PHEROMONES["lamp"] = "1" +BUILDING_PHEROMONES["programmable-speaker"] = "1" +BUILDING_PHEROMONES["wall"] = "1" + +BUILDING_PHEROMONES["splitter"] = "3" +BUILDING_PHEROMONES["pump"] = "3" +BUILDING_PHEROMONES["offshore-pump"] = "3" +BUILDING_PHEROMONES["solar-panel"] = "3" +BUILDING_PHEROMONES["programmable-speaker"] = "3" +BUILDING_PHEROMONES["accumulator"] = "3" +BUILDING_PHEROMONES["assembling-machine"] = "3" +BUILDING_PHEROMONES["pipe-to-ground"] = "3" +BUILDING_PHEROMONES["storage-tank"] = "3" +BUILDING_PHEROMONES["container"] = "3" + +BUILDING_PHEROMONES["furnace"] = "5" +BUILDING_PHEROMONES["lab"] = "5" +BUILDING_PHEROMONES["roboport"] = "5" +BUILDING_PHEROMONES["beacon"] = "5" +BUILDING_PHEROMONES["boiler"] = "5" +BUILDING_PHEROMONES["generator"] = "5" +BUILDING_PHEROMONES["mining-drill"] = "5" + +BUILDING_PHEROMONES["artillery-turret"] = "6" +BUILDING_PHEROMONES["reactor"] = "6" +BUILDING_PHEROMONES["rocket-silo"] = "6" + +BUILDING_PHEROMONES["turret"] = "turrets" +BUILDING_PHEROMONES["ammo-turret"] = "turrets" +BUILDING_PHEROMONES["fluid-turret"] = "turrets" +BUILDING_PHEROMONES["electric-turret"] = "turrets" + +BUILDING_PHEROMONES["radar"] = "radar" +------ +constants.VICTORY_SCENT = {} -- points if destoyed +for enitityType, pheromoneLvl in pairs(BUILDING_PHEROMONES) do + if enitityType ~= "wall" then + constants.VICTORY_SCENT[enitityType] = GENERATOR_PHEROMONE_LEVEL[pheromoneLvl][constants.BASE_PHEROMONE]*10 + end +end +------------------------- + +function constants.GET_ENTITY_PHEROMONES(entity, pheromoneType) + local pheromoneLvl + pheromoneLvl = BUILDING_PHEROMONES[entity.type] + if not pheromoneLvl then + return 0 + end + + local scoreValue = GENERATOR_PHEROMONE_LEVEL[pheromoneLvl][pheromoneType] + if constants.FACTORISSIMO_ENTITY(entity) then + scoreValue = scoreValue + constants.FACTORISSIMO_ENTITY_FEROMONE[pheromoneType] + end + + return scoreValue +end + +local sFind = string.find +-- list of names. Can't be enabled manually/by remote interface +function constants.isExcludedSurface(surfaceName) + return (sFind(surfaceName, "Factory floor") or + sFind(surfaceName, " Orbit") or + sFind(surfaceName, "clonespace") or + sFind(surfaceName, "BPL_TheLabplayer") or + sFind(surfaceName, "starmap-") or + (surfaceName == "aai-signals") or + sFind(surfaceName, "NiceFill") or + sFind(surfaceName, "Asteroid Belt") or + sFind(surfaceName, "Vault ") or + (surfaceName == "RTStasisRealm") or + sFind(surfaceName, "spaceship") + )~=nil +end + +-- ignored surfaces (factorissimo at 2021.12). !!!! universe.maps[surfaceIndex] now can be nil !!!! +function constants.SURFACE_IGNORED(surface, universe) + if not surface then + return true + end + if not universe.surfaceIgnoringSet then + universe.surfaceIgnoringSet = {} + end + + local surfaceIgnoringSet = universe.surfaceIgnoringSet[surface.index] + if surfaceIgnoringSet then + return (surfaceIgnoringSet == 1) -- 1 -> ignored + end + local surfaceName = surface.name + local isExcludedSurface = false + + if not constants.isExcludedSurface(surfaceName) then + local map_gen_settings = surface.map_gen_settings + local autoplace_controls = map_gen_settings and map_gen_settings.autoplace_controls + if (not autoplace_controls) and (map_gen_settings.default_enable_all_autoplace_controls) then + autoplace_controls = game.default_map_gen_settings.autoplace_controls + end + local enemy_base_settings = autoplace_controls and autoplace_controls["enemy-base"] + if enemy_base_settings and (enemy_base_settings.frequency>0) and (enemy_base_settings.richness>0) and (enemy_base_settings.size>0) then + -- log(surfaceName..".enemy_base_settings:"..serpent.dump(enemy_base_settings)) -- debug + else + -- if enemy_base_settings then + -- log(surfaceName..".enemy_base_settings:"..serpent.dump(enemy_base_settings)) -- debug + -- else + -- log(surfaceName..".enemy_base_settings: nil") -- debug + -- end + isExcludedSurface = true + end + end + -- game.print(surface.name.." will be ignored: "..tostring(isExcludedSurface)) -- debug + + if isExcludedSurface then + universe.surfaceIgnoringSet[surface.index] = 1 + else + universe.surfaceIgnoringSet[surface.index] = 0 + end + + return isExcludedSurface +end + +function constants.FACTORISSIMO_ENTITY(entity) + local entityNames = {"factory-"} + if not entity or not entity.valid then + return false + end + if not entity.type == "storage-tank" then -- Factorissimo. Yes, this is a "storage-tank" enities + return false + end + + local sLen = string.len + local returnValue = false + for _, entityName in pairs(entityNames) do + local lenSurface = sLen(entityName) + if (sLen(entity.name)>=lenSurface) and (string.sub(entity.name, 1, lenSurface) == entityName) then + returnValue = true + break + end + end + --game.print(entity.name.." is factorissimo building: "..tostring(returnValue)) + return returnValue +end + +constants.VANILLA_ENTITIES = {} +constants.VANILLA_ENTITIES["biter-spawner"] = true +constants.VANILLA_ENTITIES["spitter-spawner"] = true +constants.VANILLA_ENTITIES["small-worm-turret"] = true +constants.VANILLA_ENTITIES["medium-worm-turret"] = true +constants.VANILLA_ENTITIES["big-worm-turret"] = true +constants.VANILLA_ENTITIES["behemoth-worm-turret"] = true + + +-- map settings tweaks + +constants.PATH_FINDER_SHORT_REQUEST_RATIO = 0.8 +constants.PATH_FINDER_SHORT_CACHE_SIZE = 25 +constants.PATH_FINDER_LONG_REQUEST_RATIO = 5 +constants.PATH_FINDER_MIN_STEPS_TO_CHECK_PATH = 1000 + +constants.MAX_FAILED_BEHAVIORS = 1000 + +constants.UNIT_GROUP_DISOWN_DISTANCE = 100 +constants.UNIT_GROUP_TICK_TOLERANCE = 3600000 + +constants.UNIT_GROUP_MAX_RADIUS = 15 +constants.UNIT_GROUP_MAX_SPEED_UP = 2 +constants.UNIT_GROUP_MAX_SLOWDOWN = 1.0 +constants.UNIT_GROUP_SLOWDOWN_FACTOR = 1.0 + +constants.CONVERSION_TABLE = { + "neutral", + "fire", + "nuclear", + "suicide", + "neutral", + "acid", + "fire", + "physical", + "laser", + "inferno", + "poison", + "troll", + "fast", + "neutral", + "neutral", + "neutral", + "energy-thief", + "electric", + "wasp", + nil, + "acid", + "acid", + "spawner", + "laser", + "inferno", + "suicide", + "acid", + "spawner" +} + +-- constants.BASE_ALIGNMENT_NEUTRAL = 1 +-- constants.BASE_ALIGNMENT_FIRE = 2 +-- constants.BASE_ALIGNMENT_NUCLEAR = 3 +-- constants.BASE_ALIGNMENT_SUICIDE = 4 +-- constants.BASE_ALIGNMENT_INFEST = 5 +-- constants.BASE_ALIGNMENT_ACID = 6 +-- constants.BASE_ALIGNMENT_FIRE = 7 +-- constants.BASE_ALIGNMENT_PHYSICAL = 8 +-- constants.BASE_ALIGNMENT_LASER = 9 +-- constants.BASE_ALIGNMENT_INFERNO = 10 +-- constants.BASE_ALIGNMENT_POISON = 11 +-- constants.BASE_ALIGNMENT_TROLL = 12 +-- constants.BASE_ALIGNMENT_FAST = 13 +-- constants.BASE_ALIGNMENT_WEB = 14 +-- constants.BASE_ALIGNMENT_DECAYING = 15 +-- constants.BASE_ALIGNMENT_UNDYING = 16 +-- constants.BASE_ALIGNMENT_ENERGY_THIEF = 17 +-- constants.BASE_ALIGNMENT_ELECTRIC = 18 +-- constants.BASE_ALIGNMENT_WASP = 19 +-- constants.BASE_ALIGNMENT_DEADZONE = 20 +constants.BASE_ALIGNMENT_NE = 21 +-- constants.BASE_ALIGNMENT_BOBS = 22 +-- constants.BASE_ALIGNMENT_SPAWNER = 23 +-- constants.BASE_ALIGNMENT_NE_BLUE = 24 +-- constants.BASE_ALIGNMENT_NE_RED = 25 +-- constants.BASE_ALIGNMENT_NE_YELLOW = 26 +-- constants.BASE_ALIGNMENT_NE_GREEN = 27 +-- constants.BASE_ALIGNMENT_NE_PINK = 28 + +-- sentinels + +constants.ENERGY_THIEF_CONVERSION_TABLE = { + ["generator"] = "unit", + ["pump"] = "smallUnit", + ["inserter"] = "smallUnit", + ["reactor"] = "bigUnit", + ["accumulator"] = "unit", + ["solar-panel"] = "unit", + ["assembling-machine"] = "unit", + ["roboport"] = "bigUnit", + ["beacon"] = "bigUnit", + ["programmable-speaker"] = "unit", + ["mining-drill"] = "unit", + ["rocket-silo"] = "bigUnit", + ["lamp"] = "smallUnit", + ["radar"] = "bigUnit", + ["lab"] = "unit", + ["electric-turret"] = "unit", + ["electric-pole"] = "pole" +} + +constants.ENERGY_THIEF_DRAIN_CRYSTALS = { + "crystal-v1-drain-rampant", + "crystal-v2-drain-rampant", + "crystal-v3-drain-rampant", + "crystal-v4-drain-rampant", + "crystal-v5-drain-rampant", + "crystal-v6-drain-rampant", + "crystal-v7-drain-rampant", + "crystal-v8-drain-rampant", + "crystal-v9-drain-rampant", + "crystal-v10-drain-rampant" +} + +constants.NEIGHBOR_DIVIDER = {1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8} + +-- unit spawners + +local function roundToNearest(number, multiple) + local num = number + (multiple * 0.5) + return num - (num % multiple) +end + +local tiers10 = {} + +local tierStart = settings.startup["rampantFixed--tierStart"].value +local tierEnd = settings.startup["rampantFixed--tierEnd"].value + +local tiers10AsIs = {} -- + !ΠšΠ”Π 2021.11 +local function buildTier(size, tiers, tiersAsIs) -- + !ΠšΠ”Π 2021.11 tiersAsIs + local step = (tierEnd - tierStart) / (size - 1) + local i = tierStart + for _=1,size do + tiers[#tiers+1] = roundToNearest(i, 1) + tiersAsIs[#tiersAsIs+1] = i + i = i + step + end +end + +buildTier(10, tiers10, tiers10AsIs) -- + !ΠšΠ”Π 2021.11 tiersAsIs + +constants.TIER_UPGRADE_SET_10 = tiers10 +constants.TIER_UPGRADE_SET_10_AS_IS = tiers10AsIs -- + !ΠšΠ”Π 2021.11 + + +local variations = (settings.startup["rampantFixed--newEnemyVariations"].value or 1) -- + !ΠšΠ”Π 2021.11 + +constants.ENERGY_THIEF_LOOKUP = {} + +for tier=1, 10 do + for i=1,variations do + constants.ENERGY_THIEF_LOOKUP["energy-thief-worm-v" .. i .. "-t" .. tier .. "-rampant"] = true + end +end + +for tier=1, 10 do + for i=1,variations do + constants.ENERGY_THIEF_LOOKUP["energy-thief-biter-v" .. i .. "-t" .. tier .. "-rampant"] = true + end +end + +constants.OVERDAMAGE_PROTECTED_LIST = {} +constants.LONGRANGE_IMMUNE_LIST = {} + + +-- + !ΠšΠ”Π see alse: prototypes/utils/UpdateImmunities +constants.FACTION_SET = {} + +-- + !ΠšΠ”Π 2021.11 add overdamageProtection (max hit = maxHP/N before resists counts) and longRangeImmunity (0 dmg from N+ range) for some units (hello, bobwarfare!) +constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "neutral", + tint = {r=0.9, g=0.9, b=0.9, a=1}, + tint2 = {r=1, g=1, b=1, a=1}, + -- acceptRate = {1, 7, 0.3, 0.1}, -- + !ΠšΠ”Π 2021.10 + acceptRate = {1, 6, 0.15, 0.01}, + evo = 0, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + majorResistances = {}, + minorResistances = {}, + attributes = {}, + drops = {"nilArtifact"} + }, + { + type = "spitter", + attackAttributes = {"spit", "acid"}, + name = "spitter", + majorResistances = {}, + minorResistances = {}, + attributes = {}, + drops = {"nilArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + majorResistances = {}, + acceptRate = {1, 10, 0.3, 0.5}, + minorResistances = {}, + attributes = {}, + drops = {"nilArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {}, + acceptRate = {1, 10, 0.3, 0.5}, + minorResistances = {}, + attributes = {}, + drops = {"nilArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {}, + acceptRate = {1, 10, 0.8, 0.6}, + minorResistances = {}, + attackAttributes = {"spit", "acid"}, + attributes = {}, + drops = {"nilArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {}, + minorResistances = {}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"nilArtifact"}, + buildSets = { + {"spitter", 1, 10}, + {"biter", 1, 10} + } + } + } +} + +if settings.startup["rampantFixed--acidEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "acid", + tint = {r=1, g=1, b=1, a=1}, + tint2 = {r=0.4, g=0.9, b=0.4, a=1}, + -- acceptRate = {1, 10, 0.1, 0.2}, + acceptRate = {1, 10, 0.1, 0.15}, -- + !ΠšΠ”Π 2021.10 + evo = 0, + units = { + { + type = "biter", + attackAttributes = {"melee", "acidPool"}, + name = "biter", + immunity = {"acid", "poison"}, + attributes = {}, + drops = {"nilArtifact"} + }, + { + type = "spitter", + attackAttributes = {"spit", "acid"}, + name = "spitter", + immunity = {"acid", "poison"}, + attributes = {}, + drops = {"nilArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + immunity = {"acid", "poison"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {}, + drops = {"nilArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "biter-spawner", + name = "biter-spawner", + immunity = {"acid", "poison"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {}, + drops = {"nilArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + immunity = {"acid", "poison"}, + attackAttributes = {"spit", "acid"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {}, + drops = {"nilArtifact"} + }, + { + type = "hive", + name = "hive", + immunity = {"acid", "poison"}, + acceptRate = {2, 10, 0.001, 0.0175}, + attributes = {}, + drops = {"nilArtifact"}, + buildSets = { + {"spitter", 1, 10}, + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--laserEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "laser", + tint = {r=0, g=0.6, b=0.6, a=1}, -- + !ΠšΠ”Π 2021.11 {r=0.3, g=0.3, b=0.42, a=1} + tint2 = {r=0, g=1, b=1, a=1}, + acceptRate = {2, 10, 0.1, 0.15}, + evo = 0.10, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + immunity = {"laser"}, + majorResistances = {"electric"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + attributes = {{"overdamageProtection", 1.5}}, + drops = {"blueArtifact"} + }, + { + type = "spitter", + attackAttributes = {"spit", "laser", "cluster"}, + name = "spitter", + immunity = {"laser"}, + majorResistances = {"electric"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + attributes = {"quickCooldown", {"overdamageProtection", 1.5}}, + drops = {"blueArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + immunity = {"laser"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {}, + drops = {"blueArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "biter-spawner", + name = "biter-spawner", + immunity = {"laser"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {}, + drops = {"blueArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + immunity = {"laser"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + attackAttributes = {"spit", "laser", "cluster"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {}, + drops = {"blueArtifact"} + }, + { + type = "hive", + name = "hive", + immunity = {"laser"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"physical"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"blueArtifact"}, + buildSets = { + {"spitter", 1, 10}, + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--fireEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "fire", + tint = {r=1, g=1, b=1, a=1}, + tint2 = {r=0.9, g=0.2, b=0.2, a=1}, + acceptRate = {4, 10, 0.1, 0.15}, -- {2, 10, 0.1, 0.15} + evo = 0.12, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + immunity = {"fire"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + minorWeaknesses = {"laser"}, + attributes = {"fireDeathCloud"}, + drops = {"redArtifact"} + }, + { + type = "spitter", + attackAttributes = {{"flame", 2}}, -- {"flame", rangebonus} {"spit", "acid"}, + name = "spitter", + immunity = {"fire"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + majorWeaknesses = {"laser"}, + attributes = {}, + drops = {"redArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + immunity = {"fire","electric"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + minorWeaknesses = {"laser"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {"fireDeathCloud"}, + drops = {"redArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "biter-spawner", + name = "biter-spawner", + immunity = {"fire"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + minorWeaknesses = {"laser"}, + acceptRate = {1, 10, 0.3, 0.5}, + minorResistances = {}, + attributes = {"fireDeathCloud"}, + drops = {"redArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + immunity = {"fire"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + minorWeaknesses = {"laser"}, + attackAttributes = {{"flame", 8, 5}}, -- , 8, 6: +8 add range, x6 damage --{"spit", "acid"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {"fireDeathCloud", "largePrepRange"}, + drops = {"redArtifact"} + }, + { + type = "hive", + name = "hive", + immunity = {"fire"}, + majorResistances = {"acid"}, + minorResistances = {"physical"}, + minorWeaknesses = {"laser"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"redArtifact"}, + buildSets = { + {"spitter", 1, 10}, + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--infernoEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "inferno", + tint = {r=0.5, g=0.1, b=0.1, a=1}, + tint2 = {r=0.9, g=0.1, b=0.1, a=1}, + acceptRate = {6, 10, 0.05, 0.15}, -- + !ΠšΠ”Π 2021.11 {3, 10, 0.1, 0.125} + evo = 0.2, + units ={ + { + type = "spitter", + attackAttributes = {"stream", "acid"}, + name = "spitter", + extremeResistances = {"acid", "fire"}, + minorWeaknesses = {"poison"}, + majorWeaknesses = {"laser"}, + attributes = {}, + drops = {"orangeArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + extremeResistances = {"acid", "fire"}, + minorWeaknesses = {"poison"}, + majorWeaknesses = {"laser"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {}, + drops = {"orangeArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + extremeResistances = {"acid", "fire"}, + minorWeaknesses = {"poison"}, + majorWeaknesses = {"laser"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"stream", "acid"}, + attributes = {}, + drops = {"orangeArtifact"} + }, + { + type = "hive", + name = "hive", + extremeResistances = {"fire", "acid"}, + minorWeaknesses = {"poison"}, + majorWeaknesses = {"laser"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"orangeArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--waspEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "wasp", + tint = {r=1, g=1, b=0, a=1}, + tint2 = {r=0, g=0, b=0, a=1}, + acceptRate = {3, 10, 0.1, 0.15}, + evo = 0.2, + units = { + { + type = "drone", + attackAttributes = {"spit", "acid"}, + name = "wasp", + attributes = {"followsPlayer", "notInKillStatistics"}, + drops = {"purpleArtifact"} + }, + { + type = "drone", + attackAttributes = {"lowDamageStream", "acid"}, + name = "worm-wasp", + attributes = {"stationary", "notInKillStatistics"}, + drops = {} + }, + { + type = "spitter", + attackAttributes = {"capsule", {"drone", "wasp"}}, + name = "spitter", + attributes = {}, + drops = {"purpleArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + attributes = {}, + acceptRate = {1, 10, 0.4, 0.6}, + drops = {"purpleArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + attackAttributes = {"capsule", {"drone", "worm-wasp"}}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {}, + drops = {"purpleArtifact"} + }, + { + type = "hive", + name = "hive", + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"purpleArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--spawnerEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "spawner", + tint = {r=0.7, g=0.1, b=0.7, a=1}, + tint2 = {r=1, g=0.4, b=1, a=1}, + acceptRate = {3, 10, 0.1, 0.15}, + evo = 0.2, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "spawn", + attributes = {"noCollision","fragile", "unstable", "smallest", "selfDamaging", "notInKillStatistics", "noLoot", {"spawnOnDeath", "spawn", -2, 1}}, + drops = {} + }, + { + type = "drone", + attackAttributes = {"touch", "acid"}, + name = "egg", + attributes = {"stationary", "bigger", "notInKillStatistics", {"clusterDeath", "spawn"}}, + drops = {} + }, + { + type = "drone", + attackAttributes = {"touch", "acid"}, + name = "worm-egg", + attributes = {"stationary", "bigger", "notInKillStatistics", {"clusterDeath", "spawn"}}, + drops = {} + }, + { + type = "spitter", + attackAttributes = {{"spawnSpit", "egg", 0, 1, "drone"}}, --{"capsule", {"drone", "egg"}} + name = "spitter", + attributes = {"selfDamaging", {"spawnOnDeath", "spawn", 0, 3}, {"longRangeImmunity", 30}}, + drops = {"purpleArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + attributes = {}, + drops = {"purpleArtifact"}, + acceptRate = {1, 10, 0.4, 0.6}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + attackAttributes = {"capsule", {"drone", "worm-egg"}}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {}, + drops = {"purpleArtifact"} + }, + { + type = "hive", + name = "hive", + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"purpleArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--electricEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "electric", + tint = {r=0.7, g=0.7, b=1.0, a=1}, + tint2 = {r=0.2, g=0.2, b=1, a=1}, + acceptRate = {2, 10, 0.1, 0.15}, + evo = 0.1, + units = { + { + type = "biter", + attackAttributes = {"beam", "electric"}, + name = "biter", + immunity = {"electric"}, + minorResistances = {"laser"}, + attributes = {"slowCooldown","lowHealth"}, + drops = {"blueArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + immunity = {"electric"}, + minorResistances = {"laser"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {}, + drops = {"blueArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + immunity = {"electric"}, + minorResistances = {"laser"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"spit", "electric", "cluster"}, + attributes = {}, + drops = {"blueArtifact"} + }, + { + type = "hive", + name = "hive", + immunity = {"electric"}, + minorResistances = {"laser"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"blueArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--physicalEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "physical", + tint = {r=0.5, g=0.5, b=0.5, a=1}, -- + !ΠšΠ”Π 2021.11 {r=0.9, g=0.9, b=0.9, a=1} + tint2 = {r=0.4, g=0.4, b=0.4, a=1}, -- + !ΠšΠ”Π 2021.11 {r=0.8, g=0.8, b=0.8, a=1} + acceptRate = {5, 10, 0.1, 0.15}, + evo = 0.12, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + majorResistances = {"physical", "explosion", "acid"}, + minorResistances = {"fire"}, + minorWeaknesses = {"laser"}, + attributes = {"highHealth", "longReach", "big", "slowMovement", "altBiterArmored", {"overdamageProtection", 2}}, + drops = {"redArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {"physical", "explosion", "acid"}, + minorResistances = {"fire"}, + minorWeaknesses = {"laser"}, + attributes = {"highHealth", "bigger"}, + acceptRate = {1, 10, 0.4, 0.6}, + drops = {"redArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {"physical", "explosion", "acid"}, + minorResistances = {"fire"}, + minorWeaknesses = {"laser"}, + attackAttributes = {"spit", "physical"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {"highHealth", "bigger"}, + drops = {"redArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {"physical", "explosion", "acid"}, + minorResistances = {"fire"}, + minorWeaknesses = {"laser"}, + attributes = {"highHealth", "bigger"}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"redArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--trollEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "troll", + tint = {r=0.4, g=0.4, b=0.4, a=1}, -- {r=0.4, g=0.4, b=0.4, a=1} + tint2 = {r=0.55, g=0, b=0, a=1}, -- {r=1, g=0.2, b=0.2, a=1} + acceptRate = {3, 10, 0.1, 0.15}, + evo = 0.17, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + majorResistances = {"explosion"}, + minorResistances = {"physical"}, + majorWeaknesses = {"fire"}, + attributes = {"highestHealth", "longReach", "bigger", + "highestRegen", "slowMovement", "altBiterArmored", {"overdamageProtection", 5}}, + drops = {"redArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + minorResistances = {"physical", "explosion"}, + majorWeaknesses = {"fire"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {"highestHealth", "bigger", "highestRegen"}, + drops = {"redArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + minorResistances = {"physical", "explosion"}, + majorWeaknesses = {"fire"}, + attackAttributes = {"spit", "physical"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {"highestHealth", "bigger", "highestRegen"}, + drops = {"redArtifact"} + }, + { + type = "hive", + name = "hive", + minorResistances = {"physical", "explosion"}, + majorWeaknesses = {"fire"}, + attributes = {"highestHealth", "bigger", "highRegen"}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"redArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--poisonEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "poison", + tint = {r=0.4, g=0.6, b=0.5, a=1}, + tint2 = {r=0, g=0.7, b=0, a=1}, +-- acceptRate = {2, 10, 0.1, 0.15}, + acceptRate = {6, 10, 0.075, 0.15}, + evo = 0.17, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + majorResistances = {"poison"}, + minorResistances = {"fire", "acid"}, + majorWeaknesses = {"laser"}, + minorWeaknesses = {"explosion"}, + attributes = {"poisonDeathCloud"}, + drops = {"greenArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {"poison"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"explosion", "laser"}, + attributes = {"poisonDeathCloud"}, + acceptRate = {1, 10, 0.4, 0.6}, + drops = {"greenArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {"poison"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"explosion", "laser"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"spit", "poison"}, + attributes = {"poisonDeathCloud"}, + drops = {"greenArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {"poison"}, + minorResistances = {"fire", "acid"}, + minorWeaknesses = {"explosion", "laser"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"greenArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--suicideEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "suicide", + tint = {r=0.8, g=0.8, b=0.8, a=1}, + tint2 = {r=1, g=0.5, b=0, a=1}, + acceptRate = {2, 10, 0.1, 0.15}, --{2, 10, 0.05, 0.15} + evo = 0.35, + units = { + { + type = "biter", + attackAttributes = {"bomb"}, + name = "biter", + majorResistances = {"fire", "acid"}, + minorResistances = {"poison"}, + majorWeaknesses = {"explosion"}, + attributes = {"lowestHealth", "quickSpawning", "quickMovement", "killsSelf", "lowestCollision", {"longRangeImmunity", 18}, {"overdamageProtection", 4}}, + drops = {"yellowArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {"fire", "acid"}, + minorResistances = {"poison"}, + majorWeaknesses = {"explosion"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {}, + drops = {"yellowArtifact", "quickSpawning", "lowUnits"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {"fire", "acid"}, + minorResistances = {"poison"}, + majorWeaknesses = {"explosion"}, + attackAttributes = {"spit", "acid", "slow"}, + acceptRate = {1, 10, 0.8, 0.6}, + attributes = {}, + drops = {"yellowArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {"fire", "acid"}, + minorResistances = {"poison"}, + majorWeaknesses = {"explosion"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"yellowArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--nuclearEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "nuclear", + tint = {r=0.1, g=0.5, b=0.1, a=1}, + tint2 = {r=1, g=0.5, b=0, a=1}, + --acceptRate = {4, 10, 0.1, 0.125}, + acceptRate = {7, 10, 0.025, 0.15}, + evo = 0.65, + units = { + { + type = "biter", + attackAttributes = {"nuclear"}, + name = "biter", + majorResistances = {"fire", "acid"}, + majorWeaknesses = {"explosion"}, + attributes = {"lowestHealth", "quickMovement", "quickSpawning", "killsSelf", {"overdamageProtection", 5}}, + drops = {"yellowArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {"fire", "acid"}, + majorWeaknesses = {"explosion"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {"quickSpawning"}, + drops = {"yellowArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {"fire", "acid"}, + majorWeaknesses = {"explosion"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"spit", "acid", "slow"}, + attributes = {}, + drops = {"yellowArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {"fire", "acid"}, + majorWeaknesses = {"explosion"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"yellowArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--energyThiefEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "energy-thief", + tint = {r=0.2, g=0.2, b=0.4, a=1}, + tint2 = {r=0.1, g=0.1, b=0.1, a=1}, + acceptRate = {3, 10, 0.1, 0.15}, + evo = 0.2, + units = { + { + type = "biter", + attackAttributes = {"beam", "electric", "drainCrystal"}, + name = "biter", + majorResistances = {"electric", "laser"}, + minorResistances = {"explosion"}, + minorWeaknesses = {"physical"}, + attributes = {"slowCooldown", "not-flammable", {"overdamageProtection", 2}}, + drops = {"blueArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {"electric", "laser"}, + minorResistances = {"explosion"}, + acceptRate = {1, 10, 0.4, 0.6}, + attributes = {}, + drops = {"blueArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {"electric", "laser"}, + minorResistances = {"explosion"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"beam", "electric", "drainCrystal", {"bonusRange", 14}, {"damageKoefficient", 5}, {"durationKoefficient", 0.8}}, + attributes = {}, + drops = {"blueArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {"electric", "laser"}, + minorResistances = {"explosion"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"blueArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--fastEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "fast", + tint = {r=0.9, g=0.9, b=0.9, a=1}, + tint2 = {r=1, g=1, b=0.1, a=1}, + acceptRate = {2, 10, 0.1, 0.15}, + evo = 0.12, + units = { + { + type = "biter", + attackAttributes = {"melee"}, + name = "biter", + majorResistances = {}, + minorResistances = {"explosion","acid"}, + attributes = {"quickCooldown", "quickMovement", "not-flammable", {"longRangeImmunity", 20}}, + drops = {"purpleArtifact"} + }, + { + type = "spitter", + attackAttributes = {"spit", "acid"}, + name = "spitter", + majorResistances = {}, + minorResistances = {"explosion", "acid"}, + attributes = {"quickCooldown", "quickMovement", "not-flammable", {"longRangeImmunity", 25}, {"bonusRange", -2}}, + drops = {"purpleArtifact"} + } + }, + buildings = { + { + type = "spitter-spawner", + name = "spitter-spawner", + majorResistances = {}, + minorResistances = {"explosion", "acid"}, + attributes = {"quickSpawning"}, + acceptRate = {1, 10, 0.3, 0.5}, + drops = {"purpleArtifact"}, + buildSets = { + {"spitter", 1, 10} + } + }, + { + type = "biter-spawner", + name = "biter-spawner", + majorResistances = {}, + minorResistances = {"explosion", "acid"}, + acceptRate = {1, 10, 0.3, 0.5}, + attributes = {"quickSpawning"}, + drops = {"purpleArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + majorResistances = {}, + minorResistances = {"explosion", "acid"}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"spit", "acid"}, + attributes = {"quickCooldown"}, + drops = {"purpleArtifact"} + }, + { + type = "hive", + name = "hive", + majorResistances = {}, + minorResistances = {"explosion", "acid"}, + attributes = {"quickSpawning"}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"purpleArtifact"}, + buildSets = { + {"biter", 1, 10}, + {"spitter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--JuggernautEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "juggernaut", + tint = {r=0.7, g=0.2, b=0.2, a=1}, + tint2 = {r=0, g=0.7, b=0, a=0.7}, + acceptRate = {9, 10, 0.10, 0.15}, + evo = 0.75, + units = { + { + type = "biter", + attackAttributes = {"meleePoisonCloud"}, + name = "biter", + extremeResistances = {"fire", "physical"}, + majorResistances = {"poison","explosion"}, + minorResistances = {"acid"}, + attributes = {"highestHealth", "longReach", "bigger", + {"movement", 0.8}, "altBiterArmored", "poisonDeathCloud"}, + drops = {"greenArtifact"} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + extremeResistances = {"fire", "acid", "physical"}, + majorResistances = {"poison","explosion"}, + minorResistances = {}, + attributes = {"highestHealth", "bigger", "highestRegen", "poisonDeathCloud"}, + acceptRate = {1, 10, 0.4, 0.6}, + drops = {"greenArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + extremeResistances = {"fire", "acid", "physical"}, + majorResistances = {"poison","explosion"}, + minorResistances = {}, + acceptRate = {1, 10, 0.8, 0.6}, + attackAttributes = {"spit", "poison"}, + attributes = {"poisonDeathCloud"}, + drops = {"greenArtifact"} + }, + { + type = "hive", + name = "hive", + extremeResistances = {"fire", "acid", "physical"}, + majorResistances = {"poison","explosion"}, + attributes = {"highestHealth", "highestRegen", "poisonDeathCloud"}, + minorResistances = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"greenArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end + +if settings.startup["rampantFixed--ArachnidsEnemy"].value then + constants.FACTION_SET[#constants.FACTION_SET+1] = { + type = "arachnids", + tint = {r=0.6, g=0.2, b=1, a=1}, + tint2 = {r=0.6, g=0.2, b=1, a=1}, + acceptRate = {4, 10, 0.10, 0.15}, + evo = 0.75, + units = { + { + type = "biter", + attackAttributes = {"melee", "acid"}, --, "acidPool" + name = "biter", + immunity = {"acid", "poison"}, + minorResistances = {"laser", "fire"}, + majorWeaknesses = {"physical"}, + attributes = {"highestHealth", {"movement", 0.8}, "altBiterArachnid", {"spawnOnDeath", "egg", 0, 1, "drone"}}, + drops = {"nilArtifact"} + }, + { + type = "drone", + attackAttributes = {"touch", "acid"}, + name = "egg", + immunity = {"acid", "poison"}, + majorResistances = {"laser", "explosion", "fire", "electric"}, + majorWeaknesses = {"physical"}, + attributes = {"egg", "notInKillStatistics", {"clusterDeath", "biter", 1}}, --{"clusterDeath", "biter", 2} + drops = {} + } + }, + buildings = { + { + type = "biter-spawner", + name = "biter-spawner", + immunity = {"acid", "poison"}, + minorResistances = {"laser","fire"}, + attributes = {}, + acceptRate = {1, 10, 0.4, 0.6}, + drops = {"nilArtifact"}, + buildSets = { + {"biter", 1, 10} + } + }, + { + type = "turret", + name = "worm", + immunity = {"acid", "poison"}, + minorResistances = {"laser","fire"}, + majorWeaknesses = {"physical"}, + acceptRate = {1, 10, 0.4, 0.6}, + attackAttributes = {"spit", "acidPool"}, + attributes = {}, + drops = {"nilArtifact"} + }, + { + type = "hive", + name = "hive", + immunity = {"acid", "poison"}, + minorResistances = {"laser","fire"}, + majorWeaknesses = {"physical"}, + attributes = {}, + acceptRate = {2, 10, 0.001, 0.0175}, + drops = {"nilArtifact"}, + buildSets = { + {"biter", 1, 10} + } + } + } + } +end +constants.HIVE_BUILDINGS_TYPES = { + "trap", + "turret", + "utility", + "spitter-spawner", + "biter-spawner", + "hive" +} + +constants.VICTORY_SCENT_MULTIPLER = {} +for x=1,9 do + for y=1,9 do + local adjV + local v + if x <= 5 and y <= 5 then + v = math.min(x, y) + elseif x > 5 and y < 5 then + v = math.min((10-x), y) + elseif x < 5 and y > 5 then + v = math.min(x, (10-y)) + else + v = math.min((10-x), (10-y)) + end + if v < 5 then + adjV = v / 5 + else + adjV = 1 + end + constants.VICTORY_SCENT_MULTIPLER[#constants.VICTORY_SCENT_MULTIPLER+1] = adjV + end +end + +constants.HIVE_BUILDINGS_COST = {} +constants.HIVE_BUILDINGS_COST["trap"] = constants.BASE_WORM_UPGRADE * 0.5 +constants.HIVE_BUILDINGS_COST["turret"] = constants.BASE_WORM_UPGRADE +constants.HIVE_BUILDINGS_COST["utility"] = constants.BASE_SPAWNER_UPGRADE * 1.5 +constants.HIVE_BUILDINGS_COST["spitter-spawner"] = constants.BASE_SPAWNER_UPGRADE +constants.HIVE_BUILDINGS_COST["biter-spawner"] = constants.BASE_SPAWNER_UPGRADE +constants.HIVE_BUILDINGS_COST["hive"] = constants.BASE_SPAWNER_UPGRADE * 2 + +local biterAndSpitter = {} +biterAndSpitter["biter-spawner"] = 0 +biterAndSpitter["spitter-spawner"] = 0 -- any non-nil value + +constants.FACTION_CHANGING_MAPPING = {} +constants.FACTION_CHANGING_MAPPING["spitter-spawner"] = biterAndSpitter +constants.FACTION_CHANGING_MAPPING["biter-spawner"] = biterAndSpitter +constants.FACTION_CHANGING_MAPPING["hive"] = {hive = 0} +constants.FACTION_CHANGING_MAPPING["turret"] = {turret = 0} +constants.FACTION_CHANGING_MAPPING["trap"] = {trap = 0} +constants.FACTION_CHANGING_MAPPING["utility"] = {utility = 0} + +constants.FACTION_EVOLVE_MAPPING = {} +constants.FACTION_EVOLVE_MAPPING["spitter-spawner"] = {hive = 0} +constants.FACTION_EVOLVE_MAPPING["biter-spawner"] = {hive = 0} +constants.FACTION_EVOLVE_MAPPING["turret"] = biterAndSpitter + +constantsG = constants +return constants diff --git a/RampantFixed/libs/MapProcessor.lua b/RampantFixed/libs/MapProcessor.lua new file mode 100644 index 00000000..8d858bc8 --- /dev/null +++ b/RampantFixed/libs/MapProcessor.lua @@ -0,0 +1,803 @@ +if mapProcessorG then + return mapProcessorG +end +local mapProcessor = {} + +-- imports + +local pheromoneUtils = require("PheromoneUtils") +local aiAttackWave = require("AIAttackWave") +local aiPredicates = require("AIPredicates") +local constants = require("Constants") +local mapUtils = require("MapUtils") +local playerUtils = require("PlayerUtils") +local chunkUtils = require("ChunkUtils") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local baseUtils = require("BaseUtils") +local squadCompression = require("SquadCompression") + +-- constants + +local DURATION_ACTIVE_NEST_DIVIDER = constants.DURATION_ACTIVE_NEST_DIVIDER +local DURATION_ACTIVE_NEST = constants.DURATION_ACTIVE_NEST + +local PROCESS_QUEUE_SIZE = constants.PROCESS_QUEUE_SIZE +local RESOURCE_QUEUE_SIZE = constants.RESOURCE_QUEUE_SIZE +local ENEMY_QUEUE_SIZE = constants.ENEMY_QUEUE_SIZE +local PLAYER_QUEUE_SIZE = constants.PLAYER_QUEUE_SIZE + +local CLEANUP_QUEUE_SIZE = constants.CLEANUP_QUEUE_SIZE + +local CHUNK_SIZE = constants.CHUNK_SIZE + +local PROCESS_PLAYER_BOUND = constants.PROCESS_PLAYER_BOUND +local CHUNK_TICK = constants.CHUNK_TICK + +local PROCESS_STATIC_QUEUE_SIZE = constants.PROCESS_STATIC_QUEUE_SIZE + +local AI_VENGENCE_SQUAD_COST = constants.AI_VENGENCE_SQUAD_COST +local AI_STATE_AGGRESSIVE = constants.AI_STATE_AGGRESSIVE + +local AI_STATE_PEACEFUL = constants.AI_STATE_PEACEFUL +local AI_STATE_MIGRATING = constants.AI_STATE_MIGRATING +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE +local AI_STATE_GROWING = constants.AI_STATE_GROWING + +local GROWING_COOLDOWN = constants.GROWING_COOLDOWN + +local COOLDOWN_RALLY = constants.COOLDOWN_RALLY +local COOLDOWN_RETREAT = constants.COOLDOWN_RETREAT +local COOLDOWN_HUNT = constants.COOLDOWN_HUNT + +local BASE_PROCESS_INTERVAL = constants.BASE_PROCESS_INTERVAL + +-- imported functions + +local processStaticPheromone = pheromoneUtils.processStaticPheromone +local processPheromone = pheromoneUtils.processPheromone + +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator +local processBase = baseUtils.processBase + +local processNestActiveness = chunkPropertyUtils.processNestActiveness + +local formSquads = aiAttackWave.formSquads +local formVengenceSquad = aiAttackWave.formVengenceSquad +local formSettlers = aiAttackWave.formSettlers + +local getChunkByPosition = mapUtils.getChunkByPosition +local getChunkByXY = mapUtils.getChunkByXY + +local validPlayer = playerUtils.validPlayer + +local mapScanEnemyChunk = chunkUtils.mapScanEnemyChunk +local mapScanPlayerChunk = chunkUtils.mapScanPlayerChunk +local mapScanResourceChunk = chunkUtils.mapScanResourceChunk +local registerEnemyBaseStructure = chunkUtils.registerEnemyBaseStructure + +local getNestCount = chunkPropertyUtils.getNestCount +local getHiveCount = chunkPropertyUtils.getHiveCount +local getTurretCount = chunkPropertyUtils.getTurretCount +local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount +local getNestActiveness = chunkPropertyUtils.getNestActiveness +local getNestActiveTick = chunkPropertyUtils.getNestActiveTick +local setNestActiveTick = chunkPropertyUtils.setNestActiveTick + +local getRaidNestActiveness = chunkPropertyUtils.getRaidNestActiveness +local thisIsNewEnemyPosition = chunkPropertyUtils.thisIsNewEnemyPosition +local getSquadsOnChunk = chunkPropertyUtils.getSquadsOnChunk + +local squadDecompress = squadCompression.squadDecompress + +local canAttack = aiPredicates.canAttack +local canMigrate = aiPredicates.canMigrate + +local tableSize = table_size + +local mMin = math.min +local mMax = math.max + +local next = next +local mRandom = math.random + +-- module code + +--[[ + processing is not consistant as it depends on the number of chunks that have been generated + so if we process 400 chunks an iteration and 200 chunks have been generated than these are + processed 3 times a second and 1200 generated chunks would be processed once a second + In theory, this might be fine as smaller bases have less surface to attack and need to have + pheromone dissipate at a faster rate. +--]] +function mapProcessor.processMap(map, tick) + local index = map.processIndex + + local outgoingWave = map.outgoingScanWave + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local step + local endIndex + if outgoingWave then + step = 1 + endIndex = mMin(index + PROCESS_QUEUE_SIZE, processQueueLength) + else + step = -1 + endIndex = mMax(index - PROCESS_QUEUE_SIZE, 1) + end + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex,step do + local chunk = processQueue[x] + if chunk and (chunk[CHUNK_TICK] ~= tick) then + chunk[CHUNK_TICK] = tick + processPheromone(map, chunk) + end + end + + if (endIndex == processQueueLength) then + map.outgoingScanWave = false + elseif (endIndex == 1) then + map.outgoingScanWave = true + elseif outgoingWave then + map.processIndex = endIndex + 1 + else + map.processIndex = endIndex - 1 + end +end + +function mapProcessor.processStaticMap(map) + local index = map.processStaticIndex + + local outgoingWave = map.outgoingStaticScanWave + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local step + local endIndex + if outgoingWave then + step = 1 + endIndex = mMin(index + PROCESS_STATIC_QUEUE_SIZE, processQueueLength) + else + step = -1 + endIndex = mMax(index - PROCESS_STATIC_QUEUE_SIZE, 1) + end + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex,step do + local chunk = processQueue[x] + processStaticPheromone(map, chunk) + end + + if (endIndex == processQueueLength) then + map.outgoingStaticScanWave = false + elseif (endIndex == 1) then + map.outgoingStaticScanWave = true + elseif outgoingWave then + map.processStaticIndex = endIndex + 1 + else + map.processStaticIndex = endIndex - 1 + end +end + +local function queueNestSpawners(map, chunk, tick) + local processActiveNest = map.universe.processActiveNest + if not processActiveNest[chunk] then + if (getNestActiveness(map, chunk) > 0) or (getRaidNestActiveness(map, chunk) > 0) then + processActiveNest[chunk] = { + map = map, + tick = tick + DURATION_ACTIVE_NEST + } + end + end +end + + +local xyVector = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}} +local huntingChance = {} +huntingChance[0] = 1 +huntingChance[32] = 0.5 +huntingChance[64] = 0.1 +huntingChance[96] = 0.02 +huntingChance[128] = 0.004 +--[[ + Localized player radius were processing takes place in realtime, doesn't store state + between calls. + vs + the slower passive version processing the entire map in multiple passes. +--]] +function mapProcessor.processPlayers(players, universe, tick) + -- put down player pheromone for player hunters + -- randomize player order to ensure a single player isn't singled out + -- not looping everyone because the cost is high enough already in multiplayer + local enemyForce = game.forces["enemy"] + universe.chunkToPlayerCount = {} + for i=1,#players do + local player = players[i] + if validPlayer(player) and enemyForce.is_enemy(player.force) then + local playerCharacter = player.character + if playerCharacter then + local map = universe.maps[playerCharacter.surface.index] + if map then + local chunk = getChunkByPosition(map, playerCharacter.position) + if (chunk ~= -1) then + universe.chunkToPlayerCount[chunk] = (universe.chunkToPlayerCount[chunk] or 0) + 1 + end + end + end + end + end + + if (#players > 0) then + local player = players[mRandom(#players)] + if validPlayer(player) and enemyForce.is_enemy(player.force) then + local playerCharacter = player.character + if playerCharacter then + local map = universe.maps[playerCharacter.surface.index] + if map then + local playerChunk = getChunkByPosition(map, playerCharacter.position) + if (playerChunk ~= -1) then + local roll = mRandom() + local allowingAttacks = canAttack(map, tick) + local allowingVengence = (allowingAttacks or settings.global["rampantFixed--allowDaytimePlayerHunting"].value) and (map.points >= (AI_VENGENCE_SQUAD_COST*0)) + + local forceVengence = (getEnemyStructureCount(map, playerChunk) > 0) + + for dx= 0, PROCESS_PLAYER_BOUND, 32 do + for dy= 0, PROCESS_PLAYER_BOUND, 32 do + local vengence = allowingVengence and (forceVengence or (roll < (huntingChance[mMax(dx, dy)] or 0.002))) + for _, vector in pairs(xyVector) do + local x = playerChunk.x + dx*vector[1] + local y = playerChunk.y - dy*vector[2] + local chunk = getChunkByXY(map, x, y) + if (chunk ~= -1) and (chunk[CHUNK_TICK] ~= tick) then + chunk[CHUNK_TICK] = tick + processPheromone(map, chunk, true) + if (not chunk.nextHuntTick) or (chunk.nextHuntTick <= tick) then + if (getNestCount(map, chunk) > 0) then + processNestActiveness(map, chunk) + --queueNestSpawners(map, chunk, tick) -- + !ΠšΠ”Π too high cost. Lets just set "active" + + if vengence then + local count = map.vengenceQueue[chunk] + if not count then + count = 0 + map.vengenceQueue[chunk] = count + end + map.vengenceQueue[chunk] = count + 1 + chunk.nextHuntTick = tick + COOLDOWN_HUNT + end + end + end + end + --- compressed squads + if (chunk ~= -1) then + for _,squad in pairs(getSquadsOnChunk(map, chunk)) do + local unitGroup = squad.group + if squad.compressed and unitGroup and unitGroup.valid then + squadDecompress(universe, map.surface, squad, nil, playerCharacter, true) + end + end + end + --- compressed squads + end + end + end + end + end + end + end + end +end + +function mapProcessor.cleanUpMapTables(map, tick) + local index = map.cleanupIndex + + local retreats = map.chunkToRetreats + local rallys = map.chunkToRallys + local drained = map.chunkToDrained + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local endIndex = mMin(index + CLEANUP_QUEUE_SIZE, processQueueLength) + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex do + local chunk = processQueue[x] + + local retreatTick = retreats[chunk] + if retreatTick and ((tick - retreatTick) > COOLDOWN_RETREAT) then + retreats[chunk] = nil + end + + local rallyTick = rallys[chunk] + if rallyTick and ((tick - rallyTick) > COOLDOWN_RALLY) then + rallys[chunk] = nil + end + + local drainTick = drained[chunk] + if drainTick and ((tick - drainTick) > 0) then + drained[chunk] = nil + end + end + + if (endIndex == processQueueLength) then + map.cleanupIndex = 1 + else + map.cleanupIndex = endIndex + 1 + end +end + +--[[ + Passive scan to find entities that have been generated outside the factorio event system +--]] +function mapProcessor.scanPlayerMap(map, tick) + if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or + (map.nextEnemyScan == tick) or (map.nextChunkProcess == tick) + then + return + end + local index = map.scanPlayerIndex + + local area = map.universe.area + local offset = area[2] + local chunkBox = area[1] + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local endIndex = mMin(index + PLAYER_QUEUE_SIZE, processQueueLength) + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex do + local chunk = processQueue[x] + + chunkBox[1] = chunk.x + chunkBox[2] = chunk.y + + offset[1] = chunk.x + CHUNK_SIZE + offset[2] = chunk.y + CHUNK_SIZE + + mapScanPlayerChunk(chunk, map) + end + + if (endIndex == processQueueLength) then + map.scanPlayerIndex = 1 + else + map.scanPlayerIndex = endIndex + 1 + end +end + +function mapProcessor.scanEnemyMap(map, tick) + if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or (map.nextChunkProcess == tick) then + return + end + + local index = map.scanEnemyIndex + + local area = map.universe.area + local offset = area[2] + local chunkBox = area[1] + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local endIndex = mMin(index + ENEMY_QUEUE_SIZE, #processQueue) + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex do + local chunk = processQueue[x] + + chunkBox[1] = chunk.x + chunkBox[2] = chunk.y + + offset[1] = chunk.x + CHUNK_SIZE + offset[2] = chunk.y + CHUNK_SIZE + + mapScanEnemyChunk(chunk, map) + end + + if (endIndex == processQueueLength) then + map.scanEnemyIndex = 1 + else + map.scanEnemyIndex = endIndex + 1 + end +end + +function mapProcessor.scanResourceMap(map, tick) + if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or + (map.nextEnemyScan == tick) or (map.nextChunkProcess == tick) + then + return + end + local index = map.scanResourceIndex + + local area = map.universe.area + local offset = area[2] + local chunkBox = area[1] + local processQueue = map.processQueue + local processQueueLength = #processQueue + + local endIndex = mMin(index + RESOURCE_QUEUE_SIZE, processQueueLength) + + if (processQueueLength == 0) then + return + end + + for x=index,endIndex do + local chunk = processQueue[x] + + chunkBox[1] = chunk.x + chunkBox[2] = chunk.y + + offset[1] = chunk.x + CHUNK_SIZE + offset[2] = chunk.y + CHUNK_SIZE + + mapScanResourceChunk(chunk, map) + end + + if (endIndex == processQueueLength) then + map.scanResourceIndex = 1 + else + map.scanResourceIndex = endIndex + 1 + end +end + +function mapProcessor.processActiveNests(universe, tick) + local processActiveNest = universe.processActiveNest + local chunk = universe.processActiveNestIterator + local chunkPack + if not chunk then + chunk, chunkPack = next(processActiveNest, nil) + else + chunkPack = processActiveNest[chunk] + end + if not chunk then + universe.processActiveNestIterator = nil + else + universe.processActiveNestIterator = next(processActiveNest, chunk) + if chunkPack.tick < tick then + local map = chunkPack.map + if (not map) or (not map.surface.valid) then + processActiveNest[chunk] = nil + return + end + processNestActiveness(map, chunk) + if (getNestActiveness(map, chunk) == 0) and (getRaidNestActiveness(map, chunk) == 0) then + processActiveNest[chunk] = nil + else + chunkPack.tick = tick + DURATION_ACTIVE_NEST + end + end + end +end + + +function mapProcessor.processVengence(map) + local ss = map.vengenceQueue + local chunk = map.deployVengenceIterator + if not chunk then + chunk = next(ss, nil) + end + if not chunk then + map.deployVengenceIterator = nil + if (tableSize(ss) == 0) then + map.vengenceQueue = {} + end + else + map.deployVengenceIterator = next(ss, chunk) + formVengenceSquad(map, chunk) + ss[chunk] = nil + end +end + +function mapProcessor.processNests(map, tick) + local bases = map.chunkToBase + local chunks = map.chunkToNests + local chunk = next(chunks, map.processNestIterator) + + if not chunk then + map.processNestIterator = nil + return + else + processNestActiveness(map, chunk) + queueNestSpawners(map, chunk, tick) + + if map.universe.NEW_ENEMIES then + local base = bases[chunk] + if base and base.thisIsRampantEnemy and ((tick - base.tick) > BASE_PROCESS_INTERVAL) then + processBase(chunk, map, tick, base) + end + end + end + map.processNestIterator = chunk +end + + +local function chooseSquad(map, migrate, attack) + local settlementsProbability = settings.global["rampantFixed--settlementsProbability"].value + if migrate and ((map.activeRaidNests == 0) or (mRandom()= map.universe.AI_MAX_BUILDER_COUNT then + currentSquad = "attack" + end + elseif migrate and (map.universe.squadCount >= (map.universe.AI_MAX_SQUAD_COUNT*0.8)) then + currentSquad = "migrate" + end + local squadCreated = false + if remoteInterfaceParameters then + currentSquad = "attack" + squadCreated = formSquads(map, chunk, tick, remoteInterfaceParameters) + elseif migrate and (currentSquad == "migrate") then + squadCreated = formSettlers(map, chunk) + elseif attack then + squadCreated = formSquads(map, chunk, tick) + end + if squadCreated then + if remoteInterfaceParameters then + if settings.global["rampantFixed--aiPointsPrintSpendingToChat"].value then + game.print(currentSquad.." squad created by remote interface") + end + else + map.nextSquad = chooseSquad(map, migrate, attack) + if settings.global["rampantFixed--aiPointsPrintSpendingToChat"].value then + game.print(currentSquad.." squad created. Next is "..map.nextSquad.." squad") + end + end + end + end + map[iterator] = chunk +end + +function mapProcessor.processSpawners(map, tick, remoteInterfaceParameters) + if (map.state ~= AI_STATE_PEACEFUL) then + if (map.state == AI_STATE_MIGRATING) then + if remoteInterfaceParameters or (map.nextSquad and (map.nextSquad == "attack")) then + processSpawners(map, + tick, + "processActiveRaidSpawnerIterator", + map.chunkToActiveRaidNest + , remoteInterfaceParameters + ) + else + processSpawners(map, + tick, + "processMigrationIterator", + map.chunkToNests + , remoteInterfaceParameters + ) + end + elseif (map.state == AI_STATE_AGGRESSIVE) or (map.state == AI_STATE_GROWING) then + if map.universe.raidAIToggle and (mRandom() < 0.2) then + processSpawners(map, + tick, + "processActiveRaidSpawnerIterator", + map.chunkToActiveRaidNest + , remoteInterfaceParameters + ) + else + processSpawners(map, + tick, + "processActiveSpawnerIterator", + map.chunkToActiveNest + , remoteInterfaceParameters + ) + end + elseif (map.state == AI_STATE_SIEGE) then + processSpawners(map, + tick, + "processActiveSpawnerIterator", + map.chunkToActiveNest + , remoteInterfaceParameters + ) + processSpawners(map, + tick, + "processActiveRaidSpawnerIterator", + map.chunkToActiveRaidNest + , remoteInterfaceParameters + ) + processSpawners(map, + tick, + "processMigrationIterator", + map.chunkToNests + , remoteInterfaceParameters + ) + else + processSpawners(map, + tick, + "processActiveSpawnerIterator", + map.chunkToActiveNest + , remoteInterfaceParameters + ) + processSpawners(map, + tick, + "processActiveRaidSpawnerIterator", + map.chunkToActiveRaidNest + , remoteInterfaceParameters + ) + end + end +end + +local querySpawners = {area={}, force="enemy", type={"turret", "unit-spawner"}} +-- growType = 0 - center +local function growChunk(map, base, chunk, growType) + local growCenter + if growType == 0 then + local universe = map.universe + querySpawners.area = {{chunk.x, chunk.y}, {chunk.x + 32, chunk.y + 32}} + local entities = map.surface.find_entities_filtered(querySpawners) + if #entities == 0 then + return false + end + newEntity = baseUtils.upgradeEntity(entities[mRandom(#entities)], base.alignment, map, nil, true, true) + if newEntity and newEntity.valid then + chunk.growFails = nil + registerEnemyBaseStructure(map, newEntity, base) + -- game.print("Growing chunk: [gps=" .. newEntity.position.x .. "," .. newEntity.position.y .."] ".. newEntity.name) -- debug + return true + else + chunk.growFails = (chunk.growFails or 0) + 1 + -- game.print("Growing chunk: [gps=" .. chunk.x .. "," .. chunk.y .."], can't place "..chunk.growFails.."/5") -- debug + end + + end + return false +end + +function mapProcessor.processGrowingBases(universe, tick) + local growingBases = universe.growingBases + local baseId + if universe.growingBasesIterator and growingBases[universe.growingBasesIterator] then + baseId = next(growingBases, nil) + else + baseId = next(growingBases, universe.growingBasesIterator) + end + + if not baseId then + universe.growingBasesIterator = nil + return + end + local growingData = growingBases[baseId] + if not growingData then + return + end + local base = universe.bases[baseId] + if not base then + universe.growingBases[baseId] = nil + universe.growingBasesIterator = nil + return + end + local map = universe.maps[base.mapIndex] + if not map then + universe.growingBases[baseId] = nil + universe.growingBasesIterator = nil + return + end + local surface = map.surface + if not surface then + return + end + -- if map.state ~= AI_STATE_GROWING then + -- return + -- end + + universe.growingBasesIterator = baseId + + if growingData.tick > tick then + return + end + + local growed = false + local chunksCount = 0 + local activeChunks = 0 + local chunksArray = {} + for chunk, _ in pairs(base.chunks) do + local nestCount = getNestCount(map, chunk) + getHiveCount(map, chunk) + local turretCount = getTurretCount(map, chunk) + chunksCount = chunksCount + 1 + if (getNestActiveness(map, chunk) > 0) then + activeChunks = activeChunks + 1 + end + if baseUtils.chunkCanGrow(map, chunk) then + chunksArray[#chunksArray+1] = chunk + -- if not growed then + -- -- if growingData.nests and (growingData.nests>0) then + -- -- growChunk(map, base, chunk, 1) + -- -- growingData.nests = growingData.nests - 1 + -- -- elseif growingData.worms and (growingData.worms>0) then + -- -- growChunk(map, base, chunk, 2) + -- -- growingData.worms = growingData.worms - 1 + -- -- else + -- growed = growChunk(map, base, chunk, 0) + -- -- end + -- end + surface.create_trivial_smoke({name = "growing-dust-nonTriggerCloud-rampant", position = {chunk.x + 16, chunk.y + 16}}) + end + end + + if #chunksArray > 0 then + growed = growChunk(map, base, chunksArray[mRandom(#chunksArray)], 0) + end + + if not growed then + base.growFails = (base.growFails or 0) + 1 + -- game.print("base fail to grow: #"..base.id.." try # = "..base.growFails) -- debug + if (base.growFails > 5) or (activeChunks == 0) or (chunksCount >= 6) then + -- game.print("base stop growing: #"..base.id.." activeChunks = "..activeChunks..", growFails =".. base.growFails..", chunksCount = "..chunksCount) -- debug + universe.growingBases[baseId] = nil + universe.growingBasesIterator = nil + end + else + base.growFails = nil + end + growingData.tick = tick + GROWING_COOLDOWN + +end + + +function mapProcessor.suspendClearedMaps(universe, tick) + local map + if not universe.suspendMapsIterator then + universe.suspendMapsIterator, map = next(universe.maps, nil) + else + map = universe.maps[universe.suspendMapsIterator] + end + if (not map) or (not map.surface) then + if map and (not map.suspended) then + map.suspended = true + map.suspendCheckTick = tick + end + universe.suspendMapsIterator, map = next(universe.maps, universe.suspendMapsIterator) + return + end + + if map.surface.name == "nauvis" then + else + if not map.suspended then + if (map.activeRaidNests < 1) and (tick - (map.suspendCheckTick or 0) > 3600)then + local enemySpawners = map.surface.count_entities_filtered({force = "enemy", type = "unit-spawner", limit = 1}) + if enemySpawners == 0 then + map.suspended = true + --game.print("suspend clear surface:"..map.surface.name) -- debug map.suspended + end + map.suspendCheckTick = tick + end + end + end + universe.suspendMapsIterator, map = next(universe.maps, universe.suspendMapsIterator) +end + +mapProcessorG = mapProcessor +return mapProcessor diff --git a/RampantFixed/libs/MapUtils.lua b/RampantFixed/libs/MapUtils.lua new file mode 100644 index 00000000..6ca64706 --- /dev/null +++ b/RampantFixed/libs/MapUtils.lua @@ -0,0 +1,288 @@ +if mapUtilsG then + return mapUtilsG +end +local mapUtils = {} + +-- imports + +local constants = require("Constants") +local chunkPropertyUtils = require("ChunkPropertyUtils") + +-- constants + +local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH +local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST +local CHUNK_IMPASSABLE = constants.CHUNK_IMPASSABLE +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS + +-- local PASSABLE = constants.PASSABLE + +local CHUNK_SIZE = constants.CHUNK_SIZE + +local CHUNK_SIZE_DIVIDER = constants.CHUNK_SIZE_DIVIDER + +-- imported functions + +local mFloor = math.floor +local getPassable = chunkPropertyUtils.getPassable + +-- module code + +function mapUtils.getChunkByXY(map, x, y) + local chunkX = map[x] + if chunkX then + return chunkX[y] or -1 + end + return -1 +end + +function mapUtils.getChunkByPosition(map, position) + local chunkX = map[mFloor(position.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE] + if chunkX then + return chunkX[mFloor(position.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE] or -1 + end + return -1 +end + +function mapUtils.positionToChunkXY(position) + local chunkX = mFloor(position.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + local chunkY = mFloor(position.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE + return chunkX, chunkY +end + +function mapUtils.getChunkListInRange(map, x, y, range) + local chunkList = {} + for dx = -range * CHUNK_SIZE, range * CHUNK_SIZE, CHUNK_SIZE do + local xChunks = map[x + dx] + if xChunks then + for dy = -range * CHUNK_SIZE, range * CHUNK_SIZE, CHUNK_SIZE do + if not ((dx == 0) and (dy == 0)) and xChunks[y + dy] then + chunkList[#chunkList+1] = xChunks[y + dy] + end + end + end + end + return chunkList +end + +function mapUtils.removeChunkFromMap(map, chunk) + local x = chunk.x + local y = chunk.y + + if not map[x][y] then + return + end + local universe = map.universe + map[x][y] = nil + + local chunkData = {chunk.x, chunk.y, map.surface.index} + local chunkIndex = "x"..chunkData[1].."y"..chunkData[2].."m"..chunkData[3] + universe.chunkToPassScan[chunkIndex] = nil + + chunkPropertyUtils.setNestActiveTick(map, chunk, 0) + + chunkPropertyUtils.setNestActiveness(map, chunk, 0) -- map.chunkToActiveNest[chunk] = nil + chunkPropertyUtils.setRaidNestActiveness(map, chunk, 0) -- map.chunkToActiveRaidNest[chunk] = nil + chunkPropertyUtils.removeChunkBase(map, chunk, nil) -- map.chunkToBase[chunk] = nil + map.chunkToDeathGenerator[chunk] = nil + map.chunkToDrained[chunk] = nil + chunkPropertyUtils.setHiveCount(map, chunk, 0) -- map.chunkToHives[chunk] = nil + chunkPropertyUtils.setNestCount(map, chunk, 0) -- map.chunkToNests[chunk] = nil + map.chunkToPassable[chunk] = nil + map.chunkToPathRating[chunk] = nil + map.chunkToPlayerBase[chunk] = nil + map.chunkToPlayerBaseDetection[chunk] = nil + chunkPropertyUtils.setPlayerTurretCount(map, chunk, 0) -- map.chunkToPlayerTurrets[chunk] = nil + map.chunkToRallys[chunk] = nil + map.chunkToResource[chunk] = nil + map.chunkToRetreats[chunk] = nil + chunkPropertyUtils.removeSquadsFromChunk(map, chunk) -- map.chunkToSquad[chunk] = nil + chunkPropertyUtils.setTrapCount(map, chunk, 0) -- map.chunkToTraps[chunk] = nil + chunkPropertyUtils.setNestCount(map, chunk, 0) -- map.chunkToTurrets[chunk] = nil + chunkPropertyUtils.setUtilityCount(map, chunk, 0) -- map.chunkToUtilities[chunk] = nil + map.chunkToVictory[chunk] = nil + + + if map.processNestIterator == chunk then + map.processNestIterator = nil + end + if map.processActiveSpawnerIterator == chunk then + map.processActiveSpawnerIterator = nil + end + if map.processActiveRaidSpawnerIterator == chunk then + map.processActiveRaidSpawnerIterator = nil + end + if map.processMigrationIterator == chunk then + map.processMigrationIterator = nil + end +end + +--[[ + 1 2 3 + \|/ + 4- -5 + /|\ + 6 7 8 +]]-- +function mapUtils.getNeighborChunks(map, x, y) + local neighbors = map.universe.neighbors + local chunkYRow1 = y - CHUNK_SIZE + local chunkYRow3 = y + CHUNK_SIZE + local xChunks = map[x-CHUNK_SIZE] + if xChunks then + neighbors[1] = xChunks[chunkYRow1] or -1 + neighbors[4] = xChunks[y] or -1 + neighbors[6] = xChunks[chunkYRow3] or -1 + else + neighbors[1] = -1 + neighbors[4] = -1 + neighbors[6] = -1 + end + + xChunks = map[x+CHUNK_SIZE] + if xChunks then + neighbors[3] = xChunks[chunkYRow1] or -1 + neighbors[5] = xChunks[y] or -1 + neighbors[8] = xChunks[chunkYRow3] or -1 + else + neighbors[3] = -1 + neighbors[5] = -1 + neighbors[8] = -1 + end + + xChunks = map[x] + if xChunks then + neighbors[2] = xChunks[chunkYRow1] or -1 + neighbors[7] = xChunks[chunkYRow3] or -1 + else + neighbors[2] = -1 + neighbors[7] = -1 + end + return neighbors +end + + +--[[ + 1 2 3 + \|/ + 4- -5 + /|\ + 6 7 8 +]]-- +function mapUtils.canMoveChunkDirection(map, direction, startChunk, endChunk) + local canMove = false + local startPassable = getPassable(map, startChunk) + local endPassable = getPassable(map, endChunk) + -- print(direction, startPassable, endPassable) + if (startPassable == CHUNK_ALL_DIRECTIONS) then + if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then + canMove = (endPassable == CHUNK_ALL_DIRECTIONS) + elseif (direction == 2) or (direction == 7) then + canMove = ((endPassable == CHUNK_NORTH_SOUTH) or (endPassable == CHUNK_ALL_DIRECTIONS)) + elseif (direction == 4) or (direction == 5) then + canMove = ((endPassable == CHUNK_EAST_WEST) or (endPassable == CHUNK_ALL_DIRECTIONS)) + end + elseif (startPassable == CHUNK_NORTH_SOUTH) then + if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then + canMove = (endPassable == CHUNK_ALL_DIRECTIONS) + elseif (direction == 2) or (direction == 7) then + canMove = ((endPassable == CHUNK_NORTH_SOUTH) or (endPassable == CHUNK_ALL_DIRECTIONS)) + end + elseif (startPassable == CHUNK_EAST_WEST) then + if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then + canMove = (endPassable == CHUNK_ALL_DIRECTIONS) + elseif (direction == 4) or (direction == 5) then + canMove = ((endPassable == CHUNK_EAST_WEST) or (endPassable == CHUNK_ALL_DIRECTIONS)) + end + else + canMove = (endPassable ~= CHUNK_IMPASSABLE) + end + return canMove +end + +function mapUtils.getCardinalChunks(map, x, y) + local neighbors = map.universe.cardinalNeighbors + local xChunks = map[x] + if xChunks then + neighbors[1] = xChunks[y-CHUNK_SIZE] or -1 + neighbors[4] = xChunks[y+CHUNK_SIZE] or -1 + else + neighbors[1] = -1 + neighbors[4] = -1 + end + + xChunks = map[x-CHUNK_SIZE] + if xChunks then + neighbors[2] = xChunks[y] or -1 + else + neighbors[2] = -1 + end + + xChunks = map[x+CHUNK_SIZE] + if xChunks then + neighbors[3] = xChunks[y] or -1 + else + neighbors[3] = -1 + end + return neighbors +end + +function mapUtils.positionFromDirectionAndChunk(direction, startPosition, endPosition, scaling) + if (direction == 1) then + endPosition.x = startPosition.x - CHUNK_SIZE * (scaling - 0.1) + endPosition.y = startPosition.y - CHUNK_SIZE * (scaling - 0.1) + elseif (direction == 2) then + endPosition.x = startPosition.x + endPosition.y = startPosition.y - CHUNK_SIZE * (scaling + 0.25) + elseif (direction == 3) then + endPosition.x = startPosition.x + CHUNK_SIZE * (scaling - 0.1) + endPosition.y = startPosition.y - CHUNK_SIZE * (scaling - 0.1) + elseif (direction == 4) then + endPosition.x = startPosition.x - CHUNK_SIZE * (scaling + 0.25) + endPosition.y = startPosition.y + elseif (direction == 5) then + endPosition.x = startPosition.x + CHUNK_SIZE * (scaling + 0.25) + endPosition.y = startPosition.y + elseif (direction == 6) then + endPosition.x = startPosition.x - CHUNK_SIZE * (scaling - 0.1) + endPosition.y = startPosition.y + CHUNK_SIZE * (scaling - 0.1) + elseif (direction == 7) then + endPosition.x = startPosition.x + endPosition.y = startPosition.y + CHUNK_SIZE * (scaling + 0.25) + elseif (direction == 8) then + endPosition.x = startPosition.x + CHUNK_SIZE * (scaling - 0.1) + endPosition.y = startPosition.y + CHUNK_SIZE * (scaling - 0.1) + end + return endPosition +end + +function mapUtils.positionFromDirectionAndFlat(direction, startPosition, endPosition) + local lx = startPosition.x + local ly = startPosition.y + if (direction == 1) then + lx = lx - CHUNK_SIZE + ly = ly - CHUNK_SIZE + elseif (direction == 2) then + ly = ly - CHUNK_SIZE + elseif (direction == 3) then + lx = lx + CHUNK_SIZE + ly = ly - CHUNK_SIZE + elseif (direction == 4) then + lx = lx - CHUNK_SIZE + elseif (direction == 5) then + lx = lx + CHUNK_SIZE + elseif (direction == 6) then + lx = lx - CHUNK_SIZE + ly = ly + CHUNK_SIZE + elseif (direction == 7) then + ly = ly + CHUNK_SIZE + elseif (direction == 8) then + lx = lx + CHUNK_SIZE + ly = ly + CHUNK_SIZE + end + endPosition.x = lx + endPosition.y = ly +end + +mapUtilsG = mapUtils +return mapUtils diff --git a/RampantFixed/libs/MathUtils.lua b/RampantFixed/libs/MathUtils.lua new file mode 100644 index 00000000..a7c30eca --- /dev/null +++ b/RampantFixed/libs/MathUtils.lua @@ -0,0 +1,248 @@ +if mathUtilsG then + return mathUtilsG +end +local mathUtils = {} + +-- imports + +local constants = require("Constants") + +-- constants + +local TICKS_A_MINUTE = constants.TICKS_A_MINUTE + +-- imported functions + +local mSqrt = math.sqrt +local mLog10 = math.log10 + +local mRandom = math.random +local mFloor = math.floor +local mAbs = math.abs + +-- module code + +function mathUtils.roundToFloor(number, multiple) + return mFloor(number / multiple) * multiple +end + +function mathUtils.roundToNearest(number, multiple) + local num = number + (multiple * 0.5) + return num - (num % multiple) +end + +function mathUtils.randomTickEvent(tick, low, high) + local range = high - low + local minutesToTick = (range * mRandom()) + low + return tick + mathUtils.roundToNearest(TICKS_A_MINUTE * minutesToTick, 1) +end + +function mathUtils.distort(xorRandom, num, stdDev, min, max) + local amin = min or num * 0.70 + local amax = max or num * 1.30 + local sd = stdDev or 0.17 + if (num < 0) then + local t = amin + amin = amax + amax = t + end + return mathUtils.roundToNearest(mathUtils.gaussianRandomRangeRG(num, num * sd, amin, amax, xorRandom), 0.01) +end + +function mathUtils.linearInterpolation(percent, min, max) + return ((max - min) * percent) + min +end + +function mathUtils.xorRandom(state) + local xor = bit32.bxor + local lshift = bit32.lshift + local rshift = bit32.rshift + + state = state + 21594771 + + return function() + state = xor(state, lshift(state, 13)) + state = xor(state, rshift(state, 17)) + state = xor(state, lshift(state, 5)) + state = state % 2147483647 + return state * 4.65661287525e-10 + end +end + +function mathUtils.linearInterpolation(percent, min, max) + return ((max - min) * percent) + min +end + +--[[ + Used for gaussian random numbers +--]] +function mathUtils.gaussianRandom(mean, std_dev) + -- marsagliaPolarMethod + local iid1 + local iid2 + local q + repeat + iid1 = 2 * mRandom() + -1 + iid2 = 2 * mRandom() + -1 + q = (iid1 * iid1) + (iid2 * iid2) + until (q ~= 0) and (q < 1) + local s = mSqrt((-2 * mLog10(q)) / q) + local v = iid1 * s + + return mean + (v * std_dev) +end + +function mathUtils.gaussianRandomRange(mean, std_dev, min, max) + if (min >= max) then + return min + end + local r + repeat + local iid1 + local iid2 + local q + repeat + iid1 = 2 * mRandom() + -1 + iid2 = 2 * mRandom() + -1 + q = (iid1 * iid1) + (iid2 * iid2) + until (q ~= 0) and (q < 1) + local s = mSqrt((-2 * mLog10(q)) / q) + local v = iid1 * s + + r = mean + (v * std_dev) + until (r >= min) and (r <= max) + return r +end + +function mathUtils.gaussianRandomRG(mean, std_dev, rg) + -- marsagliaPolarMethod + local iid1 + local iid2 + local q + repeat + iid1 = 2 * rg() + -1 + iid2 = 2 * rg() + -1 + q = (iid1 * iid1) + (iid2 * iid2) + until (q ~= 0) and (q < 1) + local s = mSqrt((-2 * mLog10(q)) / q) + local v = iid1 * s + + return mean + (v * std_dev) +end + +function mathUtils.gaussianRandomRangeRG(mean, std_dev, min, max, rg) + local r + if (min >= max) then + return min + end + repeat + local iid1 + local iid2 + local q + repeat + iid1 = 2 * rg() + -1 + iid2 = 2 * rg() + -1 + q = (iid1 * iid1) + (iid2 * iid2) + until (q ~= 0) and (q < 1) + local s = mSqrt((-2 * mLog10(q)) / q) + local v = iid1 * s + r = mean + (v * std_dev) + until (r >= min) and (r <= max) + return r +end + +function mathUtils.euclideanDistanceNamed(p1, p2) + local xs = p1.x - p2.x + local ys = p1.y - p2.y + return ((xs * xs) + (ys * ys)) ^ 0.5 +end + +function mathUtils.euclideanDistancePoints(x1, y1, x2, y2) + local xs = x1 - x2 + local ys = y1 - y2 + return ((xs * xs) + (ys * ys)) ^ 0.5 +end + +function mathUtils.mahattenDistancePoints(x1, y1, x2, y2) + local xs = x1 - x2 + local ys = y1 - y2 + return mAbs(xs + ys) +end + +function mathUtils.euclideanDistanceArray(p1, p2) + local xs = p1[1] - p2[1] + local ys = p1[2] - p2[2] + return ((xs * xs) + (ys * ys)) ^ 0.5 +end + +function mathUtils.distortPosition(position, size) + local xDistort = mathUtils.gaussianRandomRange(1, 0.5, 0, 2) - 1 + local yDistort = mathUtils.gaussianRandomRange(1, 0.5, 0, 2) - 1 + position.x = position.x + (xDistort * size) + position.y = position.y + (yDistort * size) + return position +end + +-- + !ΠšΠ”Π 2021.11 for SwarmUtils +-- example: +-- Values{1, 3, 5, 10,...} +-- Levels{1.5, 3.5} +-- result{2, 7.5} +-- precision = 0 => to integer, 1 => 0.1, 2=>0.01... +function mathUtils.calculateValuesForLevels(Values, Levels, precision) + local multipiler = 0 + if precision then + multipiler = 10^precision + end + local newTierValues = {} + for i = 1, #Levels do + local lvl = Levels[i] + if not lvl then lvl = 1 end + local lvlMin = mFloor(lvl) + if (lvlMin==lvl) or not(Values[lvlMin+1]) then + newTierValues[i] = Values[lvlMin] + else + local Val1 = Values[lvlMin] + local Val2 = Values[lvlMin+1] + + newTierValues[i] = mathUtils.linearInterpolation(lvl - lvlMin, Val1, Val2) + if not (multipiler==0) then + newTierValues[i] = mFloor(newTierValues[i]*multipiler)/multipiler + end + end + end + return newTierValues +end +-- - !ΠšΠ”Π 2021.11 + +-- example: Tbl = {1, 2, 3, 4, 5, 6, 7}, k = 5 +-- rolls: {5, 2, 3, 2, 2} +-- result: {5, 2, 3, 4, 6} +function mathUtils.getRandomElementIndexes(Tbl, k) + local result = {} + local tableAsArray = {} + for index, value in pairs(Tbl) do + tableAsArray[#tableAsArray+1] = {index = index} --, value = value} + end + local tblSize = #tableAsArray + local rndRolls = {} + for i = 1, k do + local roll = mRandom(tblSize) + --game.print("roll "..roll.."/"..tblSize) -- debug + tblSize = tblSize - 1 + while true do + if not rndRolls[roll] then + rndRolls[roll] = 1 + break + else + rndRolls[roll] = rndRolls[roll] + 1 + roll = roll + (rndRolls[roll] - 1) + --game.print("roll -->"..roll) -- debug + end + end + result[#result+1] = tableAsArray[roll].index + end + return result +end +mathUtilsG = mathUtils +return mathUtils diff --git a/Rampant_3.1.2/libs/MovementUtils.lua b/RampantFixed/libs/MovementUtils.lua similarity index 78% rename from Rampant_3.1.2/libs/MovementUtils.lua rename to RampantFixed/libs/MovementUtils.lua index 3d3405c3..a6227d41 100644 --- a/Rampant_3.1.2/libs/MovementUtils.lua +++ b/RampantFixed/libs/MovementUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - if movementUtilsG then return movementUtilsG end @@ -24,18 +8,13 @@ local movementUtils = {} local constants = require("Constants") local mapUtils = require("MapUtils") local mathUtils = require("MathUtils") -local unitGroupUtils = require("UnitGroupUtils") -- constants local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER -local SQUAD_SETTLING = constants.SQUAD_SETTLING - -- imported functions -local calculateSettlerMaxDistance = unitGroupUtils.calculateSettlerMaxDistance - local canMoveChunkDirection = mapUtils.canMoveChunkDirection local getNeighborChunks = mapUtils.getNeighborChunks @@ -72,23 +51,10 @@ function movementUtils.addMovementPenalty(squad, chunk) local penaltyCount = #penalties for i=1,penaltyCount do local penalty = penalties[i] - if (penalty.c.id == chunk.id) then + if (penalty.c == chunk) then penalty.v = penalty.v + 1 - if (penalty.v > 2) and (penalty.v < 15) then + if (penalty.v > 4) then squad.kamikaze = true - elseif penalty.v >= 15 then - local universe = squad.map.universe - if universe.enabledMigration and - (universe.builderCount < universe.AI_MAX_BUILDER_COUNT) then - squad.settler = true - squad.originPosition.x = squad.group.position.x - squad.originPosition.y = squad.group.position.y - squad.maxDistance = calculateSettlerMaxDistance(universe) - - squad.status = SQUAD_SETTLING - else - squad.group.destroy() - end end return end @@ -113,7 +79,7 @@ function movementUtils.scoreNeighborsForAttack(map, chunk, neighborDirectionChun for x=1,8 do local neighborChunk = neighborDirectionChunks[x] if (neighborChunk ~= -1) then - if (chunk == -1) or canMoveChunkDirection(map, x, chunk, neighborChunk) then + if canMoveChunkDirection(map, x, chunk, neighborChunk) or (chunk == -1) then local score = scoreFunction(map, neighborChunk) if (score > highestScore) then highestScore = score @@ -132,7 +98,7 @@ function movementUtils.scoreNeighborsForAttack(map, chunk, neighborDirectionChun neighborDirectionChunks = getNeighborChunks(map, highestChunk.x, highestChunk.y) for x=1,8 do local neighborChunk = neighborDirectionChunks[x] - if ((neighborChunk ~= -1) and ((chunk == -1) or (neighborChunk.id ~= chunk.id)) and + if ((neighborChunk ~= -1) and (neighborChunk ~= chunk) and canMoveChunkDirection(map, x, highestChunk, neighborChunk)) then local score = scoreFunction(map, neighborChunk) if (score > nextHighestScore) then @@ -159,7 +125,7 @@ function movementUtils.scoreNeighborsForSettling(map, chunk, neighborDirectionCh for x=1,8 do local neighborChunk = neighborDirectionChunks[x] if (neighborChunk ~= -1) then - if (chunk == -1) or canMoveChunkDirection(map, x, chunk, neighborChunk) then + if canMoveChunkDirection(map, x, chunk, neighborChunk) or (chunk == -1) then local score = scoreFunction(map, neighborChunk) if (score > highestScore) then highestScore = score @@ -182,7 +148,7 @@ function movementUtils.scoreNeighborsForSettling(map, chunk, neighborDirectionCh neighborDirectionChunks = getNeighborChunks(map, highestChunk.x, highestChunk.y) for x=1,8 do local neighborChunk = neighborDirectionChunks[x] - if ((neighborChunk ~= -1) and ((chunk == -1) or (neighborChunk.id ~= chunk.id)) and + if ((neighborChunk ~= -1) and (neighborChunk ~= chunk) and canMoveChunkDirection(map, x, highestChunk, neighborChunk)) then local score = scoreFunction(map, neighborChunk) if (score > nextHighestScore) then @@ -208,7 +174,7 @@ function movementUtils.scoreNeighborsForResource(chunk, neighborDirectionChunks, local neighborChunk = neighborDirectionChunks[x] if (neighborChunk ~= -1) and canMoveChunkDirection(map, x, chunk, neighborChunk) and - validFunction(map, chunk, neighborChunk) + validFunction(map, neighborChunk) then local score = scoreFunction(map, neighborChunk) if (score > highestScore) then @@ -237,7 +203,7 @@ function movementUtils.scoreNeighborsForRetreat(chunk, neighborDirectionChunks, for x=1,8 do local neighborChunk = neighborDirectionChunks[x] if (neighborChunk ~= -1) then - if (chunk == -1) or canMoveChunkDirection(map, x, chunk, neighborChunk) then + if canMoveChunkDirection(map, x, chunk, neighborChunk) or (chunk == -1) then local score = scoreFunction(map, neighborChunk) if (score > highestScore) then highestScore = score @@ -257,7 +223,7 @@ function movementUtils.scoreNeighborsForRetreat(chunk, neighborDirectionChunks, for x=1,8 do local neighborChunk = neighborDirectionChunks[x] - if ((neighborChunk ~= -1) and ((chunk == -1) or (neighborChunk.id ~= chunk.id)) and + if ((neighborChunk ~= -1) and (neighborChunk ~= chunk) and canMoveChunkDirection(map, x, highestChunk, neighborChunk)) then local score = scoreFunction(map, neighborChunk) if (score > nextHighestScore) then diff --git a/RampantFixed/libs/PheromoneUtils.lua b/RampantFixed/libs/PheromoneUtils.lua new file mode 100644 index 00000000..a7664e3f --- /dev/null +++ b/RampantFixed/libs/PheromoneUtils.lua @@ -0,0 +1,520 @@ +if pheromoneUtilsG then + return pheromoneUtilsG +end +local pheromoneUtils = {} + +-- imports +local mathUtils = require("MathUtils") +local mapUtils = require("MapUtils") +local constants = require("Constants") +local chunkPropertyUtils = require("ChunkPropertyUtils") + +-- constants + +local VICTORY_SCENT_MULTIPLER = constants.VICTORY_SCENT_MULTIPLER +local VICTORY_SCENT_BOUND = constants.VICTORY_SCENT_BOUND + +local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER + +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS +local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH +local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST + +local MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK = constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK -- + !ΠšΠ”Π +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE -- + !ΠšΠ”Π +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE + +local VICTORY_SCENT = constants.VICTORY_SCENT + +local PLAYER_PHEROMONE_GENERATOR_AMOUNT = constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT + +local DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT + +-- imported functions + +local addVictoryGenerator = chunkPropertyUtils.addVictoryGenerator + +local getNeighborChunks = mapUtils.getNeighborChunks + +local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount +local getPlayerTurretCount = chunkPropertyUtils.getPlayerTurretCount +local getPathRating = chunkPropertyUtils.getPathRating +local getPassable = chunkPropertyUtils.getPassable +local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator +local getResourceGenerator = chunkPropertyUtils.getResourceGenerator +local addDeathGenerator = chunkPropertyUtils.addDeathGenerator +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator +local decayDeathGenerator = chunkPropertyUtils.decayDeathGenerator + +local linearInterpolation = mathUtils.linearInterpolation +local mMin = math.min +local mMax = math.max + +local getChunkByXY = mapUtils.getChunkByXY + +local next = next + +-- module code + +function pheromoneUtils.victoryScent(map, chunk, entityType) + local value = VICTORY_SCENT[entityType] + if value then + addVictoryGenerator(map, chunk, value) + end +end + +function pheromoneUtils.disperseVictoryScent(map) + local chunk = map.victoryScentIterator + local chunkToVictory = map.chunkToVictory + local pheromone + if not chunk then + chunk, pheromone = next(chunkToVictory, nil) + else + pheromone = chunkToVictory[chunk] + end + if not chunk then + map.victoryScentIterator = nil + else + map.victoryScentIterator = next(chunkToVictory, chunk) + local chunkX = chunk.x + local chunkY = chunk.y + local i = 1 + for x=chunkX - VICTORY_SCENT_BOUND, chunkX + VICTORY_SCENT_BOUND,32 do + for y = chunkY - VICTORY_SCENT_BOUND, chunkY + VICTORY_SCENT_BOUND,32 do + local c = getChunkByXY(map, x, y) + if (c ~= -1) then + addDeathGenerator(map, c, -pheromone * VICTORY_SCENT_MULTIPLER[i] * getPathRating(map, c)) + end + i = i + 1 + end + end + + chunkToVictory[chunk] = nil + end +end + +function pheromoneUtils.deathScent(map, chunk) + addDeathGenerator(map, chunk, DEATH_PHEROMONE_GENERATOR_AMOUNT) +end + +local function compare_pheromones(neighbor, pheromone_neighbor) + local pheromone + pheromone = neighbor[BASE_PHEROMONE] + if pheromone_neighbor.chunkBase < pheromone then + pheromone_neighbor.chunkBase = pheromone + pheromone_neighbor.src = "[gps=" .. neighbor.x .. "," .. neighbor.y .."]" + end + pheromone = neighbor[BASE_DETECTION_PHEROMONE] or 0 + if pheromone_neighbor.chunkBaseDetection < pheromone then + pheromone_neighbor.chunkBaseDetection = pheromone + end + pheromone = neighbor[RESOURCE_PHEROMONE] + if pheromone_neighbor.chunkResource < pheromone then + pheromone_neighbor.chunkResource = pheromone + end +end + +local pheromoneMultipliers = {} +for i = 1, 10 do + pheromoneMultipliers[i] = 0.9^i +end + +local function getPheromoneMultiplier(turretCount) + if (not turretCount) or (turretCount == 0) then + return 1 + end + if turretCount > #pheromoneMultipliers then + return pheromoneMultipliers[#pheromoneMultipliers] + end + + local pheromoneMultiplier = pheromoneMultipliers[turretCount] + if pheromoneMultiplier then + return pheromoneMultiplier + end + + return 1 +end + + +--[[ + 1 2 3 + \|/ + 4- -5 + /|\ + 6 7 8 +]]-- +function pheromoneUtils.processStaticPheromone(map, chunk) + local chunkBase = -MAGIC_MAXIMUM_NUMBER + local chunkBaseDetection = -MAGIC_MAXIMUM_NUMBER + local chunkResource = -MAGIC_MAXIMUM_NUMBER + local chunkPathRating = getPathRating(map, chunk) + + local clear = getEnemyStructureCount(map, chunk) + + local tempNeighbors = getNeighborChunks(map, chunk.x, chunk.y) + + local neighbor + local neighborPass + + local chunkPass = getPassable(map, chunk) + local pheromone + local pheromone_neighbor = {chunkBase = 0, chunkBaseDetection = 0, chunkResource = 0} + + if (chunkPass == CHUNK_ALL_DIRECTIONS) then + neighbor = tempNeighbors[2] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[7] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[4] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[5] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[1] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[3] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[6] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[8] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + elseif (chunkPass == CHUNK_EAST_WEST) then + + neighbor = tempNeighbors[4] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[5] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + elseif (chunkPass == CHUNK_NORTH_SOUTH) then + + neighbor = tempNeighbors[2] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + + neighbor = tempNeighbors[7] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + compare_pheromones(neighbor, pheromone_neighbor) + end + end + end + + pheromone_neighbor.chunkBaseDetection = mMin(pheromone_neighbor.chunkBaseDetection, MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK) * 0.9 + pheromone = mMin(getPlayerBaseGenerator(map, chunk, BASE_DETECTION_PHEROMONE), MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK) + + if pheromone_neighbor.chunkBaseDetection < pheromone then + chunk[BASE_DETECTION_PHEROMONE] = pheromone + else + chunk[BASE_DETECTION_PHEROMONE] = pheromone_neighbor.chunkBaseDetection + end + if chunkPathRating <= 0.1 then + chunk[BASE_DETECTION_PHEROMONE] = pheromone * chunkPathRating + end + + pheromone_neighbor.chunkBase = pheromone_neighbor.chunkBase * 0.9 + pheromone = getPlayerBaseGenerator(map, chunk, BASE_PHEROMONE) + + if pheromone_neighbor.chunkBase < pheromone then + chunk[BASE_PHEROMONE] = pheromone * chunkPathRating + else + chunk[BASE_PHEROMONE] = pheromone_neighbor.chunkBase * chunkPathRating + end + + -- turrets and kills + local turretCount = 0 + for i = 1, 8 do + turretCount = turretCount + getPlayerTurretCount(map, tempNeighbors[i]) + end + turretCount = math.floor(turretCount * 0.3) + getPlayerTurretCount(map, chunk) + local pheromoneMultiplier = getPheromoneMultiplier(turretCount) + + local casualitiesAsAdditionalTurrets = mMin(math.floor(0.05 * getDeathGenerator(map, chunk) / DEATH_PHEROMONE_GENERATOR_AMOUNT), 5) + pheromoneMultiplier = pheromoneMultiplier * getPheromoneMultiplier(casualitiesAsAdditionalTurrets) + chunk[BASE_PHEROMONE] = chunk[BASE_PHEROMONE] * pheromoneMultiplier + -------------- + + chunk[BASE_DETECTION_PHEROMONE] = math.floor(chunk[BASE_DETECTION_PHEROMONE]) + chunk[BASE_PHEROMONE] = math.floor(chunk[BASE_PHEROMONE]) + + -- DEBUG + -- local chunkText = ""..chunk[BASE_PHEROMONE].."/"..chunk[BASE_DETECTION_PHEROMONE].."("..(math.floor(pheromoneMultiplier*100)/100)..") " + -- if chunk.textId then + -- rendering.set_text(chunk.textId, chunkText) + -- else + -- chunk.textId = rendering.draw_text({ + -- text = chunkText, + -- surface = map.surface, + -- target = {x = chunk.x, y = chunk.y}, + -- color = {r = 0, g = 0.5, b = 0, a = 0.5}, + -- forces = {"player"}, + -- scale = 5 + -- }) + -- end + + + pheromone_neighbor.chunkResource = pheromone_neighbor.chunkResource * 0.9 + pheromone = getResourceGenerator(map, chunk) + if (pheromone > 0) and clear then + pheromone = linearInterpolation(pheromone, 15000, 20000) + end + if chunkResource < pheromone then + if clear then + chunk[RESOURCE_PHEROMONE] = pheromone * chunkPathRating + else + chunk[RESOURCE_PHEROMONE] = pheromone * chunkPathRating * 0.1 + end + else + if clear then + chunk[RESOURCE_PHEROMONE] = pheromone_neighbor.chunkResource * chunkPathRating + else + chunk[RESOURCE_PHEROMONE] = pheromone_neighbor.chunkResource * chunkPathRating * 0.1 + end + end +end + +function pheromoneUtils.processPheromone(map, chunk, player) + local chunkPlayer = -MAGIC_MAXIMUM_NUMBER + local chunkPathRating = getPathRating(map, chunk) + + local tempNeighbors = getNeighborChunks(map, chunk.x, chunk.y) + + local neighbor + local neighborPass + + local chunkPass = getPassable(map, chunk) + local pheromone + if (chunkPass == CHUNK_ALL_DIRECTIONS) then + neighbor = tempNeighbors[2] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[7] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[4] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[5] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[1] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[3] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[6] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[8] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if (neighborPass == CHUNK_ALL_DIRECTIONS) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + elseif (chunkPass == CHUNK_EAST_WEST) then + + neighbor = tempNeighbors[4] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[5] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + elseif (chunkPass == CHUNK_NORTH_SOUTH) then + + neighbor = tempNeighbors[2] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + + neighbor = tempNeighbors[7] + if (neighbor ~= -1) then + neighborPass = getPassable(map, neighbor) + if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then + pheromone = neighbor[PLAYER_PHEROMONE] + if chunkPlayer < pheromone then + chunkPlayer = pheromone + end + end + end + end + + if not player then + decayDeathGenerator(map, chunk) + end + + chunkPlayer = chunkPlayer * 0.45 + pheromone = ((map.universe.chunkToPlayerCount[chunk] and 1) or 0) * PLAYER_PHEROMONE_GENERATOR_AMOUNT + + if chunkPlayer < pheromone then + chunk[PLAYER_PHEROMONE] = pheromone * chunkPathRating + else + chunk[PLAYER_PHEROMONE] = chunkPlayer * chunkPathRating + end + + if chunk[PLAYER_PHEROMONE] < 1 then + chunk[PLAYER_PHEROMONE] = 0 + end + + -- DEBUG + -- local chunkText = " PLAYERS = "..tostring((map.universe.chunkToPlayerCount[chunk] or 0))..", "..math.floor(chunk[PLAYER_PHEROMONE]) + -- if chunk.textId then + -- rendering.set_text(chunk.textId, chunkText) + -- else + -- chunk.textId = rendering.draw_text({ + -- text = chunkText, + -- surface = map.surface, + -- target = {x = chunk.x, y = chunk.y}, + -- color = {r = 0, g = 0.5, b = 0, a = 0.5}, + -- forces = {"player"}, + -- scale = 5 + -- }) + -- end + -- +end + +pheromoneUtilsG = pheromoneUtils +return pheromoneUtils diff --git a/RampantFixed/libs/PlayerUtils.lua b/RampantFixed/libs/PlayerUtils.lua new file mode 100644 index 00000000..884c02ae --- /dev/null +++ b/RampantFixed/libs/PlayerUtils.lua @@ -0,0 +1,21 @@ +if playerUtilsG then + return playerUtilsG +end +local playerUtils = {} + +-- imports + +-- imported functions + +-- module code + +function playerUtils.validPlayer(player) + if player and player.valid then + local char = player.character + return char and char.valid + end + return false +end + +playerUtilsG = playerUtils +return playerUtils diff --git a/RampantFixed/libs/ScoreChunks.lua b/RampantFixed/libs/ScoreChunks.lua new file mode 100644 index 00000000..e9cba21e --- /dev/null +++ b/RampantFixed/libs/ScoreChunks.lua @@ -0,0 +1,110 @@ +if (scoreChunksG) then + return scoreChunksG +end +local scoreChunks = {} + + +local constants = require("Constants") +local chunkPropertyUtils = require("ChunkPropertyUtils") + + +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE +local AI_STATE_RAIDING = constants.AI_STATE_RAIDING + +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE +local PLAYER_PHEROMONE_MULTIPLER = constants.PLAYER_PHEROMONE_MULTIPLER + +local MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK = constants.MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK + +local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS + +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator +local getPassable = chunkPropertyUtils.getPassable +local getNestCount = chunkPropertyUtils.getNestCount + +---- validation +function scoreChunks.validSiegeLocation(map, neighborChunk) + return (getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS) + and (neighborChunk[BASE_DETECTION_PHEROMONE] <= MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK*0.9) + and (getNestCount(map, neighborChunk) == 0) +end + +function scoreChunks.validSettlerLocation(map, neighborChunk) + return (getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS) + and (getNestCount(map, neighborChunk) == 0) +end + +function scoreChunks.validUnitGroupLocation(map, neighborChunk) + return getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS and + (getNestCount(map, neighborChunk) == 0) +end + + +---- score + + +function scoreChunks.scoreUnitGroupLocation(map, neighborChunk) + return neighborChunk[PLAYER_PHEROMONE] + + -getDeathGenerator(map, neighborChunk) + + neighborChunk[BASE_PHEROMONE] + 0.01 * neighborChunk[BASE_DETECTION_PHEROMONE] +end + +function scoreChunks.scoreResourceLocation(map, neighborChunk) + local settle = -getDeathGenerator(map, neighborChunk) + neighborChunk[RESOURCE_PHEROMONE] + return settle - (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) +end + +function scoreChunks.scoreResourceLocationKamikaze(_, neighborChunk) + local settle = neighborChunk[RESOURCE_PHEROMONE] + return settle - (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) +end + +function scoreChunks.scoreAttackLocation(map, neighborChunk) + local damage = neighborChunk[BASE_PHEROMONE] + 0.01 * neighborChunk[BASE_DETECTION_PHEROMONE] + + (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) + return damage +end + +function scoreChunks.scoreAttackKamikazeLocation(_, neighborChunk) + local damage = neighborChunk[BASE_DETECTION_PHEROMONE] + (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) + return damage +end + +function scoreChunks.scoreSettlerLocation(map, neighborChunk) + return neighborChunk[RESOURCE_PHEROMONE] + + -getDeathGenerator(map, neighborChunk) + + -neighborChunk[PLAYER_PHEROMONE] +end + +function scoreChunks.scoreSiegeLocation(map, neighborChunk) + local pheromones = neighborChunk[BASE_DETECTION_PHEROMONE] + local maxBasePoints = MAX_BASE_DETECTION_PHEROMONES_IN_CHUNK + if pheromones >= maxBasePoints then + return 0 + else + local scores = 0.1*neighborChunk[RESOURCE_PHEROMONE] + + neighborChunk[BASE_PHEROMONE] + + - (2*getDeathGenerator(map, neighborChunk)) + + if pheromones > maxBasePoints*0.81 then + return scores*.5 + else + return scores + end + end +end + +function scoreChunks.scoreSiegeLocationKamikaze(_, neighborChunk) + local settle = neighborChunk[BASE_DETECTION_PHEROMONE] + + 0.1*neighborChunk[RESOURCE_PHEROMONE] + + return settle +end + +---------------------- + +scoreChunksG = scoreChunks +return scoreChunks \ No newline at end of file diff --git a/RampantFixed/libs/SquadAttack.lua b/RampantFixed/libs/SquadAttack.lua new file mode 100644 index 00000000..cced7ddf --- /dev/null +++ b/RampantFixed/libs/SquadAttack.lua @@ -0,0 +1,512 @@ +if (squadAttackG) then + return squadAttackG +end +local squadAttack = {} + +-- imports + +local constants = require("Constants") +local mapUtils = require("MapUtils") +local movementUtils = require("MovementUtils") +local mathUtils = require("MathUtils") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local scoreChunks = require("ScoreChunks") +local squadCompression = require("SquadCompression") + +-- constants + +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE +local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE +local PLAYER_PHEROMONE_GENERATOR_AMOUNT = constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT + +local TEN_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.TEN_DEATH_PHEROMONE_GENERATOR_AMOUNT +local FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT +local SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT + + +local SQUAD_BUILDING = constants.SQUAD_BUILDING + +local SQUAD_RAIDING = constants.SQUAD_RAIDING +local SQUAD_SETTLING = constants.SQUAD_SETTLING +local SQUAD_GUARDING = constants.SQUAD_GUARDING +local SQUAD_RETREATING = constants.SQUAD_RETREATING + +local AI_STATE_SIEGE = constants.AI_STATE_SIEGE + +local PLAYER_PHEROMONE_MULTIPLER = constants.PLAYER_PHEROMONE_MULTIPLER + +local DEFINES_DISTRACTION_NONE = defines.distraction.none +local DEFINES_DISTRACTION_BY_ENEMY = defines.distraction.by_enemy +local DEFINES_DISTRACTION_BY_ANYTHING = defines.distraction.by_anything +local DEFINES_DISTRACTION_BY_DAMAGE = defines.distraction.by_damage -- + !ΠšΠ”Π + +-- imported functions + +local euclideanDistancePoints = mathUtils.euclideanDistancePoints + +local findMovementPosition = movementUtils.findMovementPosition + +local removeSquadFromChunk = chunkPropertyUtils.removeSquadFromChunk +local addDeathGenerator = chunkPropertyUtils.addDeathGenerator +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator + +local getNestCount = chunkPropertyUtils.getNestCount + +local getNeighborChunks = mapUtils.getNeighborChunks +local addSquadToChunk = chunkPropertyUtils.addSquadToChunk +local getChunkByXY = mapUtils.getChunkByXY +local positionToChunkXY = mapUtils.positionToChunkXY +local addMovementPenalty = movementUtils.addMovementPenalty +local positionFromDirectionAndFlat = mapUtils.positionFromDirectionAndFlat + +local euclideanDistanceNamed = mathUtils.euclideanDistanceNamed + + +local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator +local getResourceGenerator = chunkPropertyUtils.getResourceGenerator + +local scoreNeighborsForAttack = movementUtils.scoreNeighborsForAttack +local scoreNeighborsForSettling = movementUtils.scoreNeighborsForSettling + +local scoreResourceLocationKamikaze = scoreChunks.scoreResourceLocationKamikaze +local scoreSiegeLocation = scoreChunks.scoreSiegeLocation +local scoreSiegeLocationKamikaze = scoreChunks.scoreSiegeLocationKamikaze +local scoreResourceLocation = scoreChunks.scoreResourceLocation +local scoreAttackLocation = scoreChunks.scoreAttackLocation +local scoreAttackKamikazeLocation = scoreChunks.scoreAttackKamikazeLocation + +local validSiegeLocation = scoreChunks.validSiegeLocation +local validSettlerLocation = scoreChunks.validSettlerLocation + +local processCompression = squadCompression.processCompression +local clearComresseData = squadCompression.clearComresseData + +local mCeil = math.ceil + +------------------squadCompression--------------------------------------- + +--------------------------------------------------------------------------- + +local function settleHere(map, group, squad, dontDistract) + if not squad then + return + end + local universe = map.universe + local targetPosition = universe.position + local surface = map.surface + local groupPosition = group.position + position = findMovementPosition(surface, groupPosition) + + if not position then + position = groupPosition + end + + targetPosition.x = position.x + targetPosition.y = position.y + + cmd = universe.settleCommand + if squad.kamikaze or dontDistract then + cmd.distraction = DEFINES_DISTRACTION_NONE + else + cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY + end + + squad.status = SQUAD_BUILDING + + group.set_command(cmd) + squad.checkTick = game.tick + 36000 -- some groups get stuck + +end + +local function goToLastvalidSettlerLocation(universe, group, squad) + cmd = universe.moveCommand + cmd.destination.x = squad.lastValidChunk.x + cmd.destination.y = squad.lastValidChunk.y + group.set_command(cmd) + + squad.settleFirstChance = true + --game.print("settle ("..groupPosition.x..","..groupPosition.y..") - maxDistance, last valid chunk ("..squad.lastValidChunk.x..","..squad.lastValidChunk.y..")") + squad.lastValidChunk = nil + squad.checkTick = game.tick + 18000 +end + +local function settleMove(map, squad) + if not squad then + return + end + + local universe = map.universe + local targetPosition = universe.position + local targetPosition2 = universe.position2 + local group = squad.group + + local groupPosition = group.position + local x, y = positionToChunkXY(groupPosition) + local chunk = getChunkByXY(map, x, y) + local scoreFunction = scoreResourceLocation + local validFunction = validSettlerLocation + if squad.siege then + validFunction = validSiegeLocation + if squad.kamikaze then + scoreFunction = scoreSiegeLocationKamikaze + else + scoreFunction = scoreSiegeLocation + end + elseif squad.kamikaze then + scoreFunction = scoreResourceLocationKamikaze + end + + if chunk==-1 then --bitters found unregistered chunk, and stopped on it... yes, this is really possible... + chunk = squad.prevChunk + end + addDeathGenerator(map, chunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) -- FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT + addSquadToChunk(map, chunk, squad) + if squad.prevChunk and (chunk == squad.prevChunk) then + --game.print("settleMove, chunk = squad.prevChunk ("..chunk.x..","..chunk.y..")") + else + if validFunction(map, chunk) then + squad.lastValidChunk = chunk + end + addMovementPenalty(squad, chunk) + end + local distance = euclideanDistancePoints(groupPosition.x, + groupPosition.y, + squad.originPosition.x, + squad.originPosition.y) + local cmd + local position + local surface = map.surface + + if squad.settleFirstChance + and squad.lastValidChunk + and ((squad.lastValidChunk.x == chunk.x) and (squad.lastValidChunk.y == chunk.y)) + then + settleHere(map, group, squad, true) + elseif distance >= squad.maxDistance then + if getNestCount(map, chunk) == 0 then + settleHere(map, group, squad) + elseif squad.lastValidChunk then + goToLastvalidSettlerLocation(universe, group, squad) + else + squad.settleFirstChance = true -------------------------------------------------------------- + squad.maxDistance = squad.maxDistance + 1 + end + elseif (getResourceGenerator(map, chunk) ~= 0) and (getNestCount(map, chunk) == 0) then + settleHere(map, group, squad) + else + local attackChunk, + attackDirection, + nextAttackChunk, + nextAttackDirection = scoreNeighborsForSettling(map, + chunk, + getNeighborChunks(map, x, y), + scoreFunction) + local prevChunk + if not (squad.prevChunk and (squad.prevChunk ~= -1)) then + prevChunk = {x = 1, y = 1} -- we never find chunk(x=1, y=1) becouse coordinates are multiples of 32 + else + prevChunk = squad.prevChunk + end + if (attackDirection ~= 0) and (prevChunk.x == attackChunk.x) and (prevChunk.y == attackChunk.y) then + if (getNestCount(map, chunk) == 0) then + settleHere(map, group, squad, true) + elseif squad.lastValidChunk then + goToLastvalidSettlerLocation(universe, group, squad) + else + settleHere(map, group, squad, true) + end + else + if (attackChunk == -1) then + settleHere(map, group, squad, true) + elseif (attackDirection ~= 0) then + local attackPlayerThreshold = universe.attackPlayerThreshold + + if (nextAttackChunk ~= -1) then + attackChunk = nextAttackChunk + positionFromDirectionAndFlat(attackDirection, groupPosition, targetPosition) + positionFromDirectionAndFlat(nextAttackDirection, targetPosition, targetPosition2) + position = findMovementPosition(surface, targetPosition2) + else + positionFromDirectionAndFlat(attackDirection, groupPosition, targetPosition) + position = findMovementPosition(surface, targetPosition) + end + + if position then + targetPosition.x = position.x + targetPosition.y = position.y + if nextAttackChunk then + addDeathGenerator(map, nextAttackChunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) -- FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT + else + addDeathGenerator(map, attackChunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) -- FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT + end + end + + if (getPlayerBaseGenerator(map, attackChunk) ~= 0) or + (attackChunk[PLAYER_PHEROMONE] >= attackPlayerThreshold) + then + cmd = universe.attackCommand + + if not squad.rabid then + squad.frenzy = true + squad.frenzyPosition.x = groupPosition.x + squad.frenzyPosition.y = groupPosition.y + end + else + cmd = universe.moveCommand + if squad.rabid or squad.kamikaze then + cmd.distraction = DEFINES_DISTRACTION_NONE + else + cmd.distraction = DEFINES_DISTRACTION_BY_DAMAGE -- DEFINES_DISTRACTION_BY_ENEMY + end + end + group.set_command(cmd) + squad.checkTick = game.tick + 18000 + else + settleHere(map, group, squad, true) + end + end + squad.prevChunk = chunk -- prevent 1-2-1-2-1-2-1.. moving + end +end + +local function attackMove(map, squad) + if not squad then + return + end + + local universe = map.universe + local targetPosition = universe.position + local targetPosition2 = universe.position2 + + local group = squad.group + + local surface = map.surface + local position + local groupPosition = group.position + local x, y = positionToChunkXY(groupPosition) + local chunk = getChunkByXY(map, x, y) + local attackScorer = scoreAttackLocation + if squad.kamikaze then + attackScorer = scoreAttackKamikazeLocation + end + + if (chunk ~= -1) and (chunk[PLAYER_PHEROMONE] == 0) and (chunk[BASE_DETECTION_PHEROMONE] == 0) then + if not squad.checkTick or ((game.tick + 600) < squad.checkTick) then + squad.checkTick = game.tick + 600 + end + return + end + + + processCompression(map, squad, chunk, true) + + if squad.chunk and (squad.chunk ~= -1) then + addDeathGenerator(map, squad.chunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) --FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) + end + + addSquadToChunk(map, chunk, squad) + addMovementPenalty(squad, chunk) + squad.frenzy = (squad.frenzy and (euclideanDistanceNamed(groupPosition, squad.frenzyPosition) < 100)) + local attackChunk, attackDirection, + nextAttackChunk, nextAttackDirection = scoreNeighborsForAttack(map, + chunk, + getNeighborChunks(map, x, y), + attackScorer) + local cmd + if (attackChunk == -1) then + cmd = universe.wonderCommand + group.set_command(cmd) + return + elseif (nextAttackChunk ~= -1) then + attackChunk = nextAttackChunk + positionFromDirectionAndFlat(attackDirection, groupPosition, targetPosition) + positionFromDirectionAndFlat(nextAttackDirection, targetPosition, targetPosition2) + position = findMovementPosition(surface, targetPosition2) + else + positionFromDirectionAndFlat(attackDirection, groupPosition, targetPosition) + position = findMovementPosition(surface, targetPosition) + end + + if not position then + cmd = universe.wonderCommand + group.set_command(cmd) + return + else + targetPosition.x = position.x + targetPosition.y = position.y + if nextAttackChunk then + addDeathGenerator(map, nextAttackChunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) --FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) + else + addDeathGenerator(map, attackChunk, SQUAD_PATH_DEATH_PHEROMONE_GENERATOR_AMOUNT) --FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) + end + end + + if (getPlayerBaseGenerator(map, attackChunk) ~= 0) and + (attackChunk[PLAYER_PHEROMONE] >= universe.attackPlayerThreshold) + then + cmd = universe.attackCommand + + if not squad.rabid then + squad.frenzy = true + squad.frenzyPosition.x = groupPosition.x + squad.frenzyPosition.y = groupPosition.y + end + else + cmd = universe.moveCommand + if squad.rabid or squad.frenzy then + cmd.distraction = DEFINES_DISTRACTION_BY_ANYTHING + else + cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY + end + end + -- DEBUG + -- if not squad.debugPath then + -- squad.debugPath = {} + -- end + + -- local lineColor = {0, 1, 0} + -- if squad.frenzy then + -- lineColor = {1, 0.5, 0} + -- elseif squad.rabid then + -- lineColor = {1, 1, 0} + -- elseif squad.kamikaze then + -- lineColor = {1, 0, 0} + -- end + -- squad.debugPath[#squad.debugPath+1] = rendering.draw_line{surface = group.surface, from = group.position, to = targetPosition, color = lineColor, width = 2} + -- squad.debugPath[#squad.debugPath+1] = rendering.draw_text{text = tostring((#squad.debugPath+1)*0.5), surface = group.surface, target = targetPosition, color = lineColor, scale = 3} + -- DEBUG + + squad.checkTick = game.tick + 18000 -- some groups get stuck + group.set_command(cmd) +end + +local function buildMove(map, squad) + if not squad then + return + end + local group = squad.group + local universe = map.universe + local position = universe.position + local groupPosition = findMovementPosition(map.surface, group.position) + + if not groupPosition then + groupPosition = group.position + end + + position.x = groupPosition.x + position.y = groupPosition.y + + group.set_command(universe.compoundSettleCommand) + squad.checkTick = game.tick + 18000 -- some groups get stuck + +end + +-- DEBUG +local function clearDebugLines(squad) + if not squad.debugPath then + return + end + local debugLen = #squad.debugPath + 0 + for i=1,debugLen do + rendering.destroy(squad.debugPath[i]) + end + squad.debugPath = {} +end +-- DEBUG + +local function disbandSquad(universe, squads, groupId) + local squad = squads[groupId] + if squad.settlers then + universe.builderCount = universe.builderCount - 1 + else + universe.squadCount = universe.squadCount - 1 + end + if squad.map then + removeSquadFromChunk(squad.map, squad) + local group = squad.group + if group.valid then + group.destroy() + end + clearDebugLines(squad) -- DEBUG + clearComresseData(universe, squad) + end + squads[groupId] = nil +end + +function squadAttack.cleanSquads(universe) + local squads = universe.groupNumberToSquad + local groupId = universe.squadIterator + local squad + if not groupId then + groupId, squad = next(squads, groupId) + else + squad = squads[groupId] + end + if not groupId then + universe.squadIterator = nil + if (table_size(squads) == 0) then + -- this is needed as the next command remembers the max length a table has been + universe.groupNumberToSquad = {} + end + else + local map = squad.map + local group = squad.group + if not map then + disbandSquad(universe, squads, groupId) + elseif not group.valid then + if squad.chunk and (squad.chunk ~= -1) then + addDeathGenerator(map, squad.chunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) + end + disbandSquad(universe, squads, groupId) + elseif squad.disbandTick < game.tick then + disbandSquad(universe, squads, groupId) + elseif (group.state == 4) then + squadAttack.squadDispatch(map, squad) + elseif not squad.checkTick then + squad.checkTick = game.tick + 18000 + elseif squad.checkTick < game.tick then -- some groups get stuck. stuck + ignoring new commands! + disbandSquad(universe, squads, groupId) + end + universe.squadIterator = next(squads, groupId) + end +end + +function squadAttack.squadDispatch(map, squad) + if not squad then + return + end + local group = squad.group + if group and group.valid then + local status = squad.status + if (status == SQUAD_RAIDING) then + attackMove(map, squad) + elseif (status == SQUAD_SETTLING) then + settleMove(map, squad) + elseif (status == SQUAD_RETREATING) then + squad.compressed = true -- some compressed units can join while retreating + if squad.settlers then + squad.status = SQUAD_SETTLING + settleMove(map, squad) + else + squad.status = SQUAD_RAIDING + attackMove(map, squad) + end + elseif (status == SQUAD_BUILDING) then + removeSquadFromChunk(map, squad) + buildMove(map, squad) + elseif (status == SQUAD_GUARDING) then + if squad.settlers then + squad.status = SQUAD_SETTLING + settleMove(map, squad) + else + squad.status = SQUAD_RAIDING + attackMove(map, squad) + end + end + end +end + +squadAttackG = squadAttack +return squadAttack diff --git a/RampantFixed/libs/SquadCompression.lua b/RampantFixed/libs/SquadCompression.lua new file mode 100644 index 00000000..a4f1ae4b --- /dev/null +++ b/RampantFixed/libs/SquadCompression.lua @@ -0,0 +1,606 @@ +if (squadCompressionG) then + return squadCompressionG +end +local squadCompression = {} + +local constants = require("Constants") +local mapUtils = require("MapUtils") +local mathUtils = require("MathUtils") + + +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE +local PLAYER_PHEROMONE_GENERATOR_AMOUNT = constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT + +local getChunkByXY = mapUtils.getChunkByXY +local getChunkByPosition = mapUtils.getChunkByPosition +local positionToChunkXY = mapUtils.positionToChunkXY + +local euclideanDistancePoints = mathUtils.euclideanDistancePoints + +local mCeil = math.ceil +local mMax = math.max + +local compressedColor = {r = 0.3, g = 0.5, b = 0, a = 0.3} +local smthCompressedColor = {r = 0.3, g = 0.5, b = 0, a = 0.3} --{r = 0.7, g = 0.3, b = 0, a = 0.5} + + +function squadCompression.clearComresseData(universe, squad) + if not squad then + return + end + local group = squad.group + if group and group.valid then + local compresseData + for _, entity in pairs(group.members) do + compresseData = universe.compressedUnits[entity.unit_number] + if compresseData then + if compresseData.textId and rendering.is_valid(compresseData.textId) then + rendering.destroy(compresseData.textId) + end + universe.compressedUnits[entity.unit_number] = nil + end + end + end + squad.compressed = nil + squad.smoothCompressed = nil +end + +function squadCompression.decompressUnit(universe, surface, entity) + compressIndex = entity.unit_number + compressedUnit = universe.compressedUnits[compressIndex] + if compressedUnit then + local decompressed = 1 + if (compressedUnit.count > 1) then + for i = 2, compressedUnit.count do + local newEntity = surface.create_entity({ + name = entity.name, + position = entity.position, + direction = entity.direction, + force = entity.force, + }) + if newEntity and newEntity.valid then + newEntity.destructible = false + universe.oneTickImmunityUnits[#universe.oneTickImmunityUnits+1] = {entity = newEntity, tick = game.tick + 1} + end + decompressed = decompressed + 1 + end + if compressedUnit.textId and rendering.is_valid(compressedUnit.textId) then + rendering.destroy(compressedUnit.textId) + end + end + universe.compressedUnits[compressIndex] = nil + return decompressed + else + return 0 + end +end + +function squadCompression.squadDecompress(universe, surface, squad, group, cause, forceDecompress) + if not surface then + return + end + + if (not squad) then + if not group then + return + end + elseif not forceDecompress then + if not squad.compressed then + return + end + end + + if not group then + group = squad.group + end + local decomressedTotal = 0 + local queuedMembers = {} + local decomressLater = false + local compressedUnit + local compressIndex + if group and group.valid then + for _, entity in pairs(group.members) do + compressIndex = entity.unit_number + compressedUnit = universe.compressedUnits[compressIndex] + if compressedUnit then + if (compressedUnit.count > 1) then + local decomressed = 1 + for i = 2, compressedUnit.count do + if decomressedTotal >= 200 then + break + end + local newEntity = surface.create_entity({ + name = entity.name, + position = entity.position, + direction = entity.direction, + force = entity.force, + }) + if newEntity.valid then + group.add_member(newEntity) + end + newEntity.destructible = false + universe.oneTickImmunityUnits[#universe.oneTickImmunityUnits+1] = {entity = newEntity, tick = game.tick + 1} + decomressedTotal = decomressedTotal + 1 + decomressed = decomressed + 1 + end + if decomressed < compressedUnit.count then + queuedMembers[compressIndex] = { + count = compressedUnit.count - decomressed, + name = entity.name, + position = {x = entity.position.x, y = entity.position.y}, + direction = entity.direction, + force = entity.force + } + decomressLater = true + end + if compressedUnit.textId and rendering.is_valid(compressedUnit.textId) then + rendering.destroy(compressedUnit.textId) + end + end + universe.compressedUnits[compressIndex] = nil + end + end + if decomressLater then + universe.decomressQueue[group] = queuedMembers + end + --game.print(group.group_number..": decompressed: + "..decomressedTotal.." units [gps=" .. group.position.x .. "," .. group.position.y .."]") -- DEBUG + end + + if squad then + squad.compressed = nil + squad.smoothCompressed = nil + squad.compressTick = game.tick + squad.decompressCause = cause + end +end + +function squadCompression.processDecompressQueue(universe) + local decomressQueue = universe.decomressQueue + local group + local queuedMembers + group, queuedMembers = next(decomressQueue, nil) + if group then + local decomresseFinished = true + if group.valid then + local decomressedTotal = 0 + + for compressIndex, compressedData in pairs (queuedMembers) do + if decomressedTotal >= 50 then + decomresseFinished = false + break + end + local decomressed = 0 + for i = 1, compressedData.count do + if decomressedTotal >= 50 then + decomresseFinished = false + break + end + local newEntity = group.surface.create_entity({ + name = compressedData.name, + position = compressedData.position, + direction = compressedData.direction, + force = compressedData.force, + }) + if newEntity.valid then + group.add_member(newEntity) + end + decomressedTotal = decomressedTotal + 1 + decomressed = decomressed + 1 + end + compressedData.count = compressedData.count - decomressed + if compressedData.count <= 0 then + queuedMembers[compressIndex] = nil + end + end + end + if decomresseFinished then + decomressQueue[group] = nil + end + end +end + +local function draw_CompressedText(count, surface, entity, color, textId) + if textId and rendering.is_valid(textId) then + rendering.destroy(textId) + end + return rendering.draw_text{text = tostring(count), + surface = surface, + target = entity, + only_in_alt_mode = false, + color = (color or compressedColor), + scale = 2.5 + } + +end + +local function destroy_CompressedText(textId) + if textId and rendering.is_valid(textId) then + rendering.destroy(textId) + end +end + + +local function squadCompress(map, squad) + if not squad then + return + end + if squad.compressed then + return + end + + if squad.compressTick and ((game.tick - squad.compressTick) < 3600) then + return + end + + local group = squad.group + if not group then + return + end + + local surface = map.surface + local position + local groupPosition = group.position + local x, y = positionToChunkXY(groupPosition) + + if squad.decompressCause and squad.decompressCause.valid then + local causeRange = mathUtils.euclideanDistancePoints(x, y, squad.decompressCause.position.x, squad.decompressCause.position.y) + if causeRange < 100 then + return + end + end + + squad.decompressCause = nil + squad.compressTick = game.tick + + local compressedUnits = map.universe.compressedUnits + local compressedUnit + local compressedMembers = {} + local unitsCounter = 0 + + if #group.members > 35 then + for _, entity in pairs(group.members) do + if entity.valid then + compressIndex = entity.name + if not compressedMembers[entity.name] then + compressedMembers[entity.name] = {count = 0} + end + compressedUnit = compressedUnits[entity.unit_number] + if compressedUnit then + compressedMembers[entity.name].count = compressedMembers[entity.name].count + compressedUnit.count + destroy_CompressedText(compressedUnit.textId) + compressedUnits[entity.unit_number] = nil + else + compressedMembers[entity.name].count = compressedMembers[entity.name].count + 1 + end + if compressedMembers[entity.name].count > 1 then + unitsCounter = unitsCounter + compressedMembers[entity.name].count + entity.destroy() + end + end + end + for _, entity in pairs(group.members) do + if entity.valid then + local stackSize = compressedMembers[entity.name].count + if stackSize > 1 then + compressedUnits[entity.unit_number] = {count = stackSize, entity = entity} + if squad.nonRampantSquad then + compressedUnits[entity.unit_number].textId = draw_CompressedText(compressedUnits[entity.unit_number].count, surface, entity, {r = 0, g = 0.5, b = 0, a = 0.3}) + else + compressedUnits[entity.unit_number].textId = draw_CompressedText(compressedUnits[entity.unit_number].count, surface, entity, compressedColor) + end + end + end + end + squad.compressed = true + +-- game.print("compressed: + "..unitsCounter.." units [gps=" .. group.position.x .. "," .. group.position.y .."]") -- DEBUG + end +end + +----------------- +-- compressDatas +-- name1 10 biters +-- name2 20 +-- name3 15 +-- name4 25 +-- name5 30 +-- membersToCompress = 100 +-- compressedSize = 30 +-- ==> averageStackSize = 4 +-- result: +-- name1 3 4 3 3 10 +-- name2 5 4 4 4 4 4 20 +-- name3 4 4 4 4 3 15 +-- name4 7 4 4 4 4 3 3 3 25 +-- name5 8 4 4 4 4 4 4 3 3 30 +-- 27 100 +local function squadSmoothCompress(map, squad, compressedSize) + if not squad then + return + end + if not compressedSize then + return + end + if squad.smoothCompressed then + return + end + + local group = squad.group + if not group then + return + end + + if #group.members < (compressedSize + 5) then + return + end + + if not squad.compressed and (squad.compressTick and ((game.tick - squad.compressTick) < 3600)) then + return + end + + local compressedUnits = map.universe.compressedUnits + local compressedUnit + local surface = group.surface + + ------------------ + local compressDatas = {} + local membersToCompress = 0 + local unitsCounter = 0 -- debug + + for _, entity in pairs(group.members) do + if entity.valid then + if not compressDatas[entity.name] then + compressDatas[entity.name] = {count = 0, entities = {}, unitSample = entity} + end + compressedUnit = compressedUnits[entity.unit_number] + if compressedUnit then + compressDatas[entity.name].count = compressDatas[entity.name].count + compressedUnit.count + membersToCompress = membersToCompress + compressedUnit.count + destroy_CompressedText(compressedUnit.textId) + compressedUnits[entity.unit_number] = nil + else + compressDatas[entity.name].count = compressDatas[entity.name].count + 1 + membersToCompress = membersToCompress + 1 + end + local entities = compressDatas[entity.name].entities + entities[#entities+1] = entity + end + end + local averageStackSize = mCeil(membersToCompress/compressedSize) + for entityName, compressData in pairs(compressDatas) do + compressData.maxStacks = mCeil(compressData.count / averageStackSize) + + local entities = compressData.entities + local unitsToCreate = compressData.maxStacks - #entities + if unitsToCreate > 0 then + for i = 1, unitsToCreate do + local unitSample = compressData.unitSample + local entity = surface.create_entity({ + name = unitSample.name, + position = unitSample.position, + direction = unitSample.direction, + force = unitSample.force, + }) + entities[#entities+1] = entity + group.add_member(entity) + end + elseif unitsToCreate < 0 then + for i = #entities, (compressData.maxStacks + 1), -1 do + entities[i].destroy() + end + end + + local unitsCounted = 0 + local stacksCreated = 0 + for i = compressData.maxStacks, 1, - 1 do + local entity = entities[i] + local stackSize = mCeil((compressData.count - unitsCounted) / i) + unitsCounted = unitsCounted + stackSize + if stackSize > 1 then + compressedUnits[entity.unit_number] = {count = stackSize, entity = entity} + if squad.nonRampantSquad then + compressedUnits[entity.unit_number].textId = draw_CompressedText(compressedUnits[entity.unit_number].count, surface, entity, {r = 0, g = 0.5, b = 0, a = 0.3}) + else + compressedUnits[entity.unit_number].textId = draw_CompressedText(compressedUnits[entity.unit_number].count, surface, entity, smthCompressedColor) + end + unitsCounter = unitsCounter + stackSize -- debug + end + end + end + ------------------ + + squad.compressed = true + squad.smoothCompressed = true + -- if unitsCounter > 0 then + -- game.print("squadSmoothCompress: compressed: + "..unitsCounter.." units [gps=" .. group.position.x .. "," .. group.position.y .."]") -- debug + -- end +end + +function squadCompression.processCompression(map, squad, chunk, fullCompressAllowed, debugMessages) + if not map then + return + end + if chunk and (chunk ~= -1) then + if not squad.compressed then + if (chunk[PLAYER_PHEROMONE] < PLAYER_PHEROMONE_GENERATOR_AMOUNT * 0.008) then -- ~6 chunks + if fullCompressAllowed and (chunk[BASE_DETECTION_PHEROMONE] < 3138) then + squadCompress(map, squad) + elseif (chunk[BASE_DETECTION_PHEROMONE] < 5000) then + local squadSize = 100 + if map.universe.squadCount < 5 then + squadSize = 100 + else + squadSize = mMax(20, mCeil(500 / (map.universe.squadCount))) + end + squadSmoothCompress(map, squad, squadSize) + end + else + squad.compressTick = game.tick + end + else + if (chunk[BASE_DETECTION_PHEROMONE] > 7000) or (chunk[PLAYER_PHEROMONE] > PLAYER_PHEROMONE_GENERATOR_AMOUNT * 0.04) then -- ~ 4 chunks + if debugMessages then + game.print("processCompression: squad#"..squad.groupNumber.." squadDecompress [gps=" .. squad.group.position.x .. "," .. squad.group.position.y .."]") -- debug + end + squadCompression.squadDecompress(map.universe, map.surface, squad) + elseif (not squad.smoothCompressed) and (chunk[BASE_DETECTION_PHEROMONE] > 3874) then + local squadSize = 100 + if map.universe.squadCount < 5 then + squadSize = 100 + else + squadSize = mMax(20, mCeil(500 / (map.universe.squadCount))) + end + + if debugMessages then + game.print("processCompression: squad#"..squad.groupNumber.." squadSmoothCompress [gps=" .. squad.group.position.x .. "," .. squad.group.position.y .."]") -- debug + end + squadSmoothCompress(map, squad, squadSize) -- squadFullToSmoothCompress + end + end + end +end + +-- DEBUG +-- local renderColor = {0, 1, 0} +-- local renderColor2 = {1, 0, 0} + + +function squadCompression.processNonRampantSquads(universe) + local map + local u = 0 + for i, squad in pairs(universe.nonRampantCompressedSquads) do + u = u + 1 + map = squad.map + if map and squad.group.valid then + squadCompression.processCompression(map, squad, getChunkByPosition(map, squad.group.position), false, false) -- debug , true + -- debug + -- rendering.draw_circle{color = renderColor, filled = false, radius = 0.5, width = 2, target = squad.group.position, surface = squad.group.surface, time_to_live = 600} + -- rendering.draw_text{text = tostring(u), surface = squad.group.surface, target = squad.group.position, color = renderColor2, scale = 3, time_to_live = 600} + else + squad.compressed = nil + end + if not squad.compressed then + universe.nonRampantCompressedSquads[i] = nil + end + end +end + +function squadCompression.onUnitKilled(universe, surface, entity, eventForce, cause) + if (not entity) or not (entity.valid) then + return + end + local compressedUnits = universe.compressedUnits + local compressedUnit = compressedUnits[entity.unit_number] + if not compressedUnit then + return + end + + compressedUnit.count = compressedUnit.count - 1 + if compressedUnit.count < 1 then + compressedUnits[entity.unit_number] = nil + else + newEntity = surface.create_entity({ + name = entity.name, + position = entity.position, + direction = entity.direction, + force = entity.force, + }) + if compressedUnit.count > 1 then + compressedUnits[newEntity.unit_number] = {count = compressedUnit.count, entity = newEntity} + compressedUnits[newEntity.unit_number].textId = draw_CompressedText(compressedUnits[newEntity.unit_number].count, surface, newEntity) + end + compressedUnits[entity.unit_number] = nil + + local group = entity.unit_group + if group then + group.add_member(newEntity) + end + + if eventForce and (eventForce.name ~= "enemy") and cause and cause.valid then + newEntity.destructible = false + universe.oneTickImmunityUnits[#universe.oneTickImmunityUnits+1] = {entity = newEntity, tick = game.tick + 5} + + local incomingRange = mathUtils.euclideanDistancePoints(entity.position.x, entity.position.y, cause.position.x, cause.position.y) + if group then + local squad = universe.groupNumberToSquad[group.group_number] or universe.nonRampantCompressedSquads[group.group_number] + if incomingRange < 70 then + squadCompression.squadDecompress(universe, surface, squad, group, cause, true) + end + elseif incomingRange < 20 then + squadCompression.decompressUnit(universe, surface, newEntity) + end + end + end +end + +function squadCompression.onUnitPreKilled(universe, surface, entity, eventForce, cause) + local compressedUnits = universe.compressedUnits + local compressedUnit = compressedUnits[entity.unit_number] + if not compressedUnit then + return + end + + if compressedUnit.count < 2 then + compressedUnits[entity.unit_number] = nil + else + destroy_CompressedText(compressedUnit.textId) + + entity.health = entity.prototype.max_health + compressedUnit.count = compressedUnit.count - 1 + if compressedUnit.count > 1 then + compressedUnit.textId = draw_CompressedText(compressedUnit.count, surface, entity) + end + + newEntity = surface.create_entity({ + name = entity.name, + position = entity.position, + direction = entity.direction, + force = entity.force, + }) + if newEntity and newEntity.valid then + newEntity.health = 0 + end + + if eventForce and (eventForce.name ~= "enemy") and cause and cause.valid then + local incomingRange = mathUtils.euclideanDistancePoints(entity.position.x, entity.position.y, cause.position.x, cause.position.y) + if group then + local squad = universe.groupNumberToSquad[group.group_number] or universe.nonRampantCompressedSquads[group.group_number] + if incomingRange < 70 then + squadCompression.squadDecompress(universe, surface, squad, group, cause, true) + end + elseif incomingRange < 20 then + squadCompression.decompressUnit(universe, surface, entity) + end + end + + end +end + + +function squadCompression.removeOneTickImmunity(universe) + for i,entityData in pairs(universe.oneTickImmunityUnits) do + if game.tick >= entityData.tick then + local entity = entityData.entity + if entity.valid then + entity.destructible = true + end + universe.oneTickImmunityUnits[i] = nil + end + end +end + +function squadCompression.checkCompressedUnitsList(universe) + if universe then + local compressedUnits = universe.compressedUnits + for compressedIndex, compressedUnit in pairs(compressedUnits) do + if (not compressedUnit.entity) or (not compressedUnit.entity.valid) then + compressedUnits[compressedIndex] = nil + end + end + end +end + +squadCompressionG = squadCompression +return squadCompression diff --git a/RampantFixed/libs/SquadDefense.lua b/RampantFixed/libs/SquadDefense.lua new file mode 100644 index 00000000..c5364e69 --- /dev/null +++ b/RampantFixed/libs/SquadDefense.lua @@ -0,0 +1,138 @@ +if aiDefenseG then + return aiDefenseG +end +local aiDefense = {} + +-- imports + +local constants = require("Constants") +local mapUtils = require("MapUtils") +local unitGroupUtils = require("UnitGroupUtils") +local movementUtils = require("MovementUtils") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local baseUtils = require("BaseUtils") + +-- constants + +local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE +local BASE_PHEROMONE = constants.BASE_PHEROMONE +local BASE_DETECTION_PHEROMONE = constants.BASE_DETECTION_PHEROMONE + +local PLAYER_PHEROMONE_MULTIPLER = constants.PLAYER_PHEROMONE_MULTIPLER + +local SQUAD_RETREATING = constants.SQUAD_RETREATING + +local COOLDOWN_RETREAT = constants.COOLDOWN_RETREAT + +-- imported functions + +local findNearbyBase = baseUtils.findNearbyBase + +local addSquadToChunk = chunkPropertyUtils.addSquadToChunk + +local positionFromDirectionAndFlat = mapUtils.positionFromDirectionAndFlat +local getNeighborChunks = mapUtils.getNeighborChunks +local findNearbyRetreatingSquad = unitGroupUtils.findNearbyRetreatingSquad +local createSquad = unitGroupUtils.createSquad +local scoreNeighborsForRetreat = movementUtils.scoreNeighborsForRetreat +local findMovementPosition = movementUtils.findMovementPosition + +local getRetreatTick = chunkPropertyUtils.getRetreatTick +local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator +local setRetreatTick = chunkPropertyUtils.setRetreatTick +local getDeathGenerator = chunkPropertyUtils.getDeathGenerator +local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount + +-- module code + +local function scoreRetreatLocation(map, neighborChunk) + return (-neighborChunk[BASE_DETECTION_PHEROMONE] + -- + !ΠšΠ”Π BASE_PHEROMONE + -getDeathGenerator(map, neighborChunk) + + -(neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) + + -(getPlayerBaseGenerator(map, neighborChunk, BASE_PHEROMONE) * 1000)) +end + +function aiDefense.retreatUnits(chunk, cause, map, tick, radius) + if (tick - getRetreatTick(map, chunk) > COOLDOWN_RETREAT) and (getEnemyStructureCount(map, chunk) == 0) then + + setRetreatTick(map, chunk, tick) + local exitPath,exitDirection, + nextExitPath,nextExitDirection = scoreNeighborsForRetreat(chunk, + getNeighborChunks(map, + chunk.x, + chunk.y), + scoreRetreatLocation, + map) + local universe = map.universe + local position = universe.position + local targetPosition2 = universe.position2 + local retreatPosition + position.x = chunk.x + 16 + position.y = chunk.y + 16 + local surface = map.surface + if (exitPath == -1) then + return + elseif (nextExitPath ~= -1) then + positionFromDirectionAndFlat(exitDirection, position, targetPosition2) + positionFromDirectionAndFlat(nextExitDirection, targetPosition2, position) + retreatPosition = findMovementPosition(surface, position) + exitPath = nextExitPath + else + positionFromDirectionAndFlat(exitDirection, position, targetPosition2) + retreatPosition = findMovementPosition(surface, targetPosition2) + end + + if retreatPosition then + position.x = retreatPosition.x + position.y = retreatPosition.y + else + return + end + + local newSquad = findNearbyRetreatingSquad(map, exitPath) + local created = false + + if not newSquad then + if (universe.squadCount < universe.AI_MAX_SQUAD_COUNT) then + created = true + newSquad = createSquad(position, map) + else + return + end + end + + universe.fleeCommand.from = cause + universe.retreatCommand.group = newSquad.group + + universe.formRetreatCommand.unit_search_distance = radius + + local foundUnits = surface.set_multi_command(universe.formRetreatCommand) + + if (foundUnits == 0) then + if created then + newSquad.group.destroy() + end + return + end + + if created then + -- if universe.NEW_ENEMIES then + -- newSquad.base = findNearbyBase(map, chunk) + -- end + universe.groupNumberToSquad[newSquad.groupNumber] = newSquad + universe.squadCount = universe.squadCount + 1 + end + + newSquad.status = SQUAD_RETREATING + + addSquadToChunk(map, chunk, newSquad) + + newSquad.frenzy = true + local squadPosition = newSquad.group.position + newSquad.frenzyPosition.x = squadPosition.x + newSquad.frenzyPosition.y = squadPosition.y + end +end + +aiDefenseG = aiDefense +return aiDefense diff --git a/RampantFixed/libs/StringUtils.lua b/RampantFixed/libs/StringUtils.lua new file mode 100644 index 00000000..32d63340 --- /dev/null +++ b/RampantFixed/libs/StringUtils.lua @@ -0,0 +1,13 @@ +if stringUtilsG then + return stringUtilsG +end +local stringUtils = {} + +local sSub = string.sub + +function stringUtils.isRampantSetting(str) + return sSub(str, 1, #"rampantFixed--") == "rampantFixed--" +end + +stringUtilsG = stringUtils +return stringUtils diff --git a/RampantFixed/libs/Tests.lua b/RampantFixed/libs/Tests.lua new file mode 100644 index 00000000..621776d8 --- /dev/null +++ b/RampantFixed/libs/Tests.lua @@ -0,0 +1,134 @@ +if (testsG) then + return testsG +end +local tests = {} + +local debug_players_list = {} +debug_players_list["Dimm2101"] = true + +function tests.in_debug_list(player) + if player and player.valid and debug_players_list[player.name] then + return true + end + return false +end + +function tests.addDebugButton(player, root) + if tests.in_debug_list(player) then + root.add{type = "button", name = "rampantFixed_DebugMenu", caption = "DEBUG", style = "rampantFixed_menu_button"} + end +end + +local function createDebugMenu(player, universeDebugSettings) + if not universeDebugSettings[player.name] then + universeDebugSettings[player.name] = {} + end + local debugSettings = universeDebugSettings[player.name] + + local gui = player.gui.screen + + for i, children in pairs(gui.children) do + if children.name == "rampantFixed_DebugMenu_frame" then + children.destroy() + return + end + end + + local root = gui.add{name = "rampantFixed_DebugMenu_frame", type = "frame", direction = "vertical"} + root.force_auto_center() + player.opened = root + if not (root and root.valid) then return end -- setting player.opened can cause other scripts to delete UIs + + -- Titlebar + local titlebar = root.add { + type = "flow", + name = "rampantFixed_DebugMenuTitle", + alignment = "right", + direction = "horizontal" + } + titlebar.drag_target = root + titlebar.add { -- Title + type = "label", + caption = "DEBUG", + ignored_by_interaction = true, + style = "rampantFixed_menu_label" --"frame_title" + } + titlebar.add { + type = "empty-widget", + ignored_by_interaction = true, + } + + titlebar.add { -- Close button + type = "sprite-button", + name= "rampantFixed_DebugMenuClose", + sprite = "utility/close_white", + hovered_sprite = "utility/close_black", + clicked_sprite = "utility/close_black", + style = "close_button" + } + local buttonCaption = "oneshot biters:" + if debugSettings.oneshotBiters then + buttonCaption = buttonCaption .. " ON" + else + buttonCaption = buttonCaption .. " OFF" + end + root.add{type = "button", name = "rampantFixed_Debug_OneshotBitersSwitch", caption = buttonCaption, style = "rampantFixed_menu_button"} + + local pointButtons = root.add { + type = "flow", + name = "rampantFixed_pointButtons", + alignment = "right", + direction = "horizontal" + } + pointButtons.add({type = "label", caption = "AI Points:"}) + pointButtons.add{type = "button", name = "rampantFixed_Debug_SetPointsTo0", caption = "-> 0"} + pointButtons.add{type = "button", name = "rampantFixed_Debug_Add100Points", caption = "+100"} + pointButtons.add{type = "button", name = "rampantFixed_Debug_Add1000Points", caption = "+1000"} + + root.add{type = "button", name = "rampantFixed_Debug_BasesManagment", caption = "Bases managment", style = "rampantFixed_menu_button"} + root.add{type = "button", name = "rampantFixed_Debug_SquadsManagment", caption = "Squads managment", style = "rampantFixed_menu_button"} + + + -- root.add{type = "button", name = "rampantFixed_showSurfaceIteractionFrame", caption = {"description.rampantFixed--surfaceIteraction_frame"}, style = "rampantFixed_menu_button"} +end + +function tests.onDebugElementClick(event, universe) + local guiElement = event.element + if guiElement.name == "rampantFixed_DebugMenu" then + createDebugMenu(game.players[event.player_index], universe.debugSettings) + elseif guiElement.name == "rampantFixed_DebugMenuClose" then + guiElement.parent.parent.destroy() + elseif guiElement.name == "rampantFixed_Debug_OneshotBitersSwitch" then + local player = game.players[event.player_index] + if not universe.debugSettings[player.name] then + universe.debugSettings[player.name] = {oneshotBiters = true} + else + universe.debugSettings[player.name].oneshotBiters = not universe.debugSettings[player.name].oneshotBiters + end + + local buttonCaption = "oneshot biters:" + if universe.debugSettings[player.name].oneshotBiters then + buttonCaption = buttonCaption .. " ON" + else + buttonCaption = buttonCaption .. " OFF" + end + guiElement.caption = buttonCaption + end +end + +function tests.debug_onUnitDamaged(event, universeDebugSettings) + if not event.cause.player then + return false + end + if (not universeDebugSettings[event.cause.player.name]) or (not universeDebugSettings[event.cause.player.name].oneshotBiters) then + return false + end + event.entity.health = 0 + event.final_health = event.entity.health + return true +end + + + +testsG = tests +return tests diff --git a/RampantFixed/libs/UndergroundAttack.lua b/RampantFixed/libs/UndergroundAttack.lua new file mode 100644 index 00000000..666f6bf4 --- /dev/null +++ b/RampantFixed/libs/UndergroundAttack.lua @@ -0,0 +1,447 @@ +if (undergroundAttackG) then + return undergroundAttackG +end +local undergroundAttack = {} + +local mapUtils = require("libs/MapUtils") +local mathUtils = require("libs/MathUtils") +local scoreChunks = require("ScoreChunks") +local unitGroupUtils = require("libs/UnitGroupUtils") + +local positionToChunkXY = mapUtils.positionToChunkXY +local getChunkListInRange = mapUtils.getChunkListInRange +local getChunkByXY = mapUtils.getChunkByXY +local scoreAttackLocation = scoreChunks.scoreAttackLocation +local createSquad = unitGroupUtils.createSquad + +local mRandom = math.random + +local processingInterval = 120 +local undergroundSpeed = 5 -- tiles +local undergroundScanRange = 15 +local playerMilitaryInRange_Query = { + --force = universe.activePlayerForces, + force = nil, + type = {"ammo-turret", "fluid-turret", "electric-turret", "radar"}, + position = nil, + radius = undergroundScanRange, + limit=1 + } + +local playerRandomUndergroundTarget_Query = { + --force = universe.activePlayerForces, + force = nil, + type = {"mining-drill", "generator", "artillery-turret", "radar", "train-stop"} + } + + +function undergroundAttack.drawDigInDust(surface, position) + surface.create_trivial_smoke({name = "digIn-dust-nonTriggerCloud-rampant", position = position}) +end + +function undergroundAttack.drawDigOutDust(surface, position) + surface.create_entity({name = "digOut-dust-cloud-rampant", position = position}) +end + +function undergroundAttack.drawUndegroundDust(surface, position) + surface.create_entity({name = "undeground-dust-cloud-rampant", position = position}) + surface.create_trivial_smoke({name = "undergroundTrace-dust-nonTriggerCloud-rampant", position = position}) + +end + +local sideVectors = {{1,0}, {0,1}, {-1,0}, {0,-1}} +local function digOut(undergroundSquad, targetPosition) + local map = undergroundSquad.map + if (not map) or (not map.surface.valid) then + return + end + local universe = map.universe + local surface = map.surface + + local squadMembers = undergroundSquad.squadMembers + local members = squadMembers.members + -- game.print("digOut: [gps=" .. undergroundSquad.position.x .. "," .. undergroundSquad.position.y .."]") -- debug + local queuedMembers = {} + local decomressLater = false + local squad = createSquad(undergroundSquad.position, map, nil, false) + local group + squad.disbandTick = game.tick + 18000 + + if squad and squad.group and squad.group.valid then + squad.rabid = true + local digOutPositions = {} + ------------------- + if targetPosition then + digOutPositions = {} + local dx + local dy + if targetPosition.x > undergroundSquad.position.x then + dx = 1 + else + dx = -1 + end + if targetPosition.y > undergroundSquad.position.y then + dy = 1 + else + dy = -1 + end + for x = undergroundSquad.position.x - 5*dx, undergroundSquad.position.x, dx do + for y = undergroundSquad.position.y - 5*dy, undergroundSquad.position.y, dy do + local tile = surface.get_tile({x, y}) + if tile and (not tile.collides_with("resource-layer")) then + digOutPositions[#digOutPositions+1] = {x = x, y = y} + end + end + end + + if #digOutPositions < 5 then + for x = undergroundSquad.position.x, targetPosition.x, dx do + for y = undergroundSquad.position.y, targetPosition.y, dy do + local tile = surface.get_tile({x , y}) + if tile and (not tile.collides_with("resource-layer")) then + digOutPositions[#digOutPositions+1] = {x = x, y = y} + end + end + end + end + + if #digOutPositions == 0 then + digOutPositions[1] = {x = targetPosition.x, y = targetPosition.y} + end + + else + + for dx = 1, 5 do + for dy = 1, 5 do + for _, vector in pairs(sideVectors) do + local x = undergroundSquad.position.x + dx*vector[1] + local y = undergroundSquad.position.y + dx*vector[2] + local tile = surface.get_tile({x, y}) + if tile and (not tile.collides_with("resource-layer")) then + digOutPositions[#digOutPositions+1] = {x = x, y = y} + end + end + end + if #digOutPositions == 0 then + digOutPositions[1] = {x = undergroundSquad.position.x, y = undergroundSquad.position.y} + end + end + + end + ------------------- + + + group = squad.group + + local undergroundTotal = 0 + local unitsInTile = 999 + local digOutIndex + local digOutPosition + + for entityName, count in pairs (members) do + if count > 1 then + for i = 1, count do + if unitsInTile > 5 then + unitsInTile = 0 + digOutIndex, digOutPosition = next(digOutPositions, digOutIndex) + if not digOutIndex then + digOutIndex, digOutPosition = next(digOutPositions, nil) + end + end + local prototypeList = game.get_filtered_entity_prototypes({{filter = "name", name = entityName}}) + + if prototypeList and (#prototypeList>0) then + local newEntity = surface.create_entity({ + name = entityName, + position = digOutPosition, + force = "enemy", + }) + if newEntity and newEntity.valid then + unitsInTile = unitsInTile + 1 + group.add_member(newEntity) + + newEntity.destructible = false + universe.oneTickImmunityUnits[#universe.oneTickImmunityUnits+1] = {entity = newEntity, tick = game.tick + 1} + undergroundTotal = undergroundTotal + 1 + + if undergroundTotal >= 200 then + queuedMembers[newEntity.unit_number] = { + count = count - i, + name = entityName, + position = {x = newEntity.position.x, y = newEntity.position.y}, + direction = newEntity.direction, + force = "enemy" + } + decomressLater = true + break + end + end + end + end + end + end + + if undergroundTotal > 0 then + undergroundAttack.drawDigOutDust(surface, undergroundSquad.position) + universe.squadCount = universe.squadCount + 1 + universe.groupNumberToSquad[squad.groupNumber] = squad + end + universe.undergroundSquads[undergroundSquad.groupNumber] = nil + + if decomressLater then + universe.decomressQueue[group] = queuedMembers + end + end + + + return squad +end + +local function getRandomUndergroundTarget(map) + local surface = map.surface + local entities = surface.find_entities_filtered(playerRandomUndergroundTarget_Query) + if #entities > 0 then + local entity = entities[mRandom(1, #entities)] + if entity.valid then + return entity + else + return nil + end + end + return nil +end + +local function showFlyingText(parameters) + for i, player in pairs(game.connected_players) do + if player.valid then + if (not parameters.surface) or (parameters.surface.index == ((player.surface and player.surface.index) or 0)) then + player.create_local_flying_text(parameters) + end + end + end +end + +function undergroundAttack.createUndergroudAttack(map, squad) + if (not squad) then + return + end + local group = squad.group + if not group then + return + end + local universe = map.universe + local compressedUnits = universe.compressedUnits + + local surface = map.surface + local squadMembers = {total = 0, members = {}} + local members = squadMembers.members + local dustCloudPositions = {} + for _, entity in pairs(group.members) do + if entity.valid then + local positionIndex = "x"..math.ceil(entity.position.x).."y"..math.ceil(entity.position.y) + local entityIndex = entity.name + local compressedUnit = compressedUnits[entity.unit_number] + if compressedUnit then + members[entityIndex] = (members[entityIndex] or 0) + compressedUnit.count + squadMembers.total = squadMembers.total + compressedUnit.count + + compressedUnits[entity.unit_number] = nil + else + members[entityIndex] = (members[entityIndex] or 0) + 1 + squadMembers.total = squadMembers.total + 1 + end + dustCloudPositions[positionIndex] = {x = entity.position.x, y = entity.position.y} + entity.destroy() + end + end + + local undergroundSquad = createSquad(group.position, map, group, false) + undergroundSquad.position = {x = group.position.x, y = group.position.y} + undergroundSquad.nextTick = game.tick + processingInterval + undergroundSquad.squadMembers = squadMembers + if squad.undergoundAttack == "randomTarget" then + playerRandomUndergroundTarget_Query.force = universe.activePlayerForces + local target = getRandomUndergroundTarget(map) + if target then + undergroundSquad.targetPosition = {x = target.position.x, y = target.position.y} + end + elseif (squad.undergoundAttack == "position") and (squad.targetPosition) then + undergroundSquad.targetPosition = {x = squad.targetPosition.x, y = squad.targetPosition.y} + end + -- debug + -- if undergroundSquad.targetPosition then + -- rendering.draw_line{surface = group.surface, from = group.position, to = undergroundSquad.targetPosition, color = {1,0,0}, width = 2, time_to_live = 3600} + -- end + + for _, position in pairs(dustCloudPositions) do + undergroundAttack.drawDigInDust(surface, position) + end + + map.universe.undergroundSquads[undergroundSquad.groupNumber] = undergroundSquad + -- game.print(undergroundSquad.groupNumber..": undergroundAttack.nextTick = "..undergroundSquad.nextTick.."[gps=" .. squad.group.position.x .. "," .. squad.group.position.y .."]") -- debug + + group.destroy() + -- squad will be deleted in squadAttack.cleanSquads + return undergroundSquad +end + +function undergroundAttack.onUnitKilled_DigIn(map, entity, cause) + if (not entity) or not (entity.valid) then + return + end + local group = entity.unit_group + if not group then + return + end + local squad = map.universe.groupNumberToSquad[group.group_number] -- or universe.nonRampantCompressedSquads[group.group_number] + if (not squad) or squad.rabid or squad.frenzy then + return + end + local roll = math.random() + if roll < 0.2 then + squad.undergoundAttack = "randomTarget" + elseif roll < 0.6 then + squad.undergoundAttack = "common" + else + squad.undergoundAttack = "position" + squad.targetPosition = {x = cause.position.x, y = cause.position.y} + end + undergroundAttack.createUndergroudAttack(map, squad) +end + +local function findNextAttackChunk(map, undergroundSquad) + local x, y = positionToChunkXY(undergroundSquad.position) + local chunk = getChunkByXY(map, x, y) + local chunkList = getChunkListInRange(map, x, y, undergroundSquad.range or 2) + + local highestScore = -1 + local highestChunk = -1 + if chunk ~= -1 then + highestScore = scoreAttackLocation(map, chunk) + end + for i = 1, #chunkList do + local neighborChunk = chunkList[i] + if neighborChunk~=-1 then + local score = scoreAttackLocation(map, neighborChunk) + if (score > highestScore) then + highestScore = score + highestChunk = neighborChunk + end + end + end + return highestChunk +end + +-- move to target position, check for military, dig out. +local function processUndergroundSquad(map, undergroundSquad) + local surface = map.surface + + local traveled = 0 + local dx = 0 + local dy = 0 + local range = 1 + if undergroundSquad.targetPosition then + dx = undergroundSquad.targetPosition.x - undergroundSquad.position.x + dy = undergroundSquad.targetPosition.y - undergroundSquad.position.y + range = mathUtils.euclideanDistancePoints(undergroundSquad.position.x, undergroundSquad.position.y, undergroundSquad.targetPosition.x, undergroundSquad.targetPosition.y) + end + + if range <= undergroundSpeed then + if undergroundSquad.targetPosition then + undergroundSquad.position.x = undergroundSquad.targetPosition.x + undergroundSquad.position.y = undergroundSquad.targetPosition.y + end + local nextAttackChunk = findNextAttackChunk(map, undergroundSquad) + if nextAttackChunk == - 1 then + --game.print("processUndergroundSquad : no nextAttackChunk") -- debug + digOut(undergroundSquad) + return + else + undergroundSquad.targetPosition = {x = nextAttackChunk.x, y = nextAttackChunk.y} + traveled = range + + dx = undergroundSquad.targetPosition.x - undergroundSquad.position.x + dy = undergroundSquad.targetPosition.y - undergroundSquad.position.y + range = mathUtils.euclideanDistancePoints(undergroundSquad.position.x, undergroundSquad.position.y, undergroundSquad.targetPosition.x, undergroundSquad.targetPosition.y) + end + end + local kf = math.min((undergroundSpeed - traveled)/ range , 1) + undergroundSquad.position.x = math.ceil(undergroundSquad.position.x + dx * kf) + undergroundSquad.position.y = math.ceil(undergroundSquad.position.y + dy * kf) + undergroundSquad.nextTick = game.tick + processingInterval + + + playerMilitaryInRange_Query.force = map.universe.activePlayerForces + playerMilitaryInRange_Query.position = undergroundSquad.position + local entities = surface.find_entities_filtered(playerMilitaryInRange_Query) + if #entities > 0 then + -- game.print("processUndergroundSquad : digOut, military ") -- debug + digOut(undergroundSquad, entities[1].position) + else + undergroundAttack.drawUndegroundDust(surface, undergroundSquad.position) + showFlyingText({text = tostring(undergroundSquad.squadMembers.total).." [entity=big-biter]", surface = surface, position = undergroundSquad.position, color = {1, 0, 0}, speed = 1, time_to_live = 30}) + if not map.universe.firtstUndergroundAlertShown then + local chunkX = math.floor(undergroundSquad.position.x / 32) + local chunkY = math.floor(undergroundSquad.position.y / 32) + if game.forces["player"].is_chunk_visible(surface, {x = chunkX, y = chunkY}) then + game.print({"", {"description.rampantFixed--firstUndergroundAttackWarning"},": ", ("[gps=" .. undergroundSquad.position.x .. "," .. undergroundSquad.position.y .."]")}) + map.universe.firtstUndergroundAlertShown = true + end + end + end +end + +local maxSquadsPerProcessing = 10 +function undergroundAttack.processUndergroundSquads(universe) + if not universe.undergroundAttack then + return + end + local squadsProcessed = 0 + for i, undergroundSquad in pairs(universe.undergroundSquads) do + map = undergroundSquad.map + if map and map.surface and map.surface.valid then + if undergroundSquad.nextTick <= game.tick then + processUndergroundSquad(map, undergroundSquad) + squadsProcessed = squadsProcessed + 1 + if squadsProcessed >= maxSquadsPerProcessing then + break + end + end + else + universe.undergroundSquads[i] = nil + end + end +end + + +function undergroundAttack.updateUndergroundAttackProbability(universe) + if not universe.undergroundAttack then + return + end + + local newUndergroundAttackProbability + local evolution_factor = game.forces.enemy.evolution_factor + local minEvo = 0.4 + local maxEvo = 0.8 + if evolution_factor <= minEvo then + newUndergroundAttackProbability = 0 + elseif evolution_factor >= maxEvo then + newUndergroundAttackProbability = settings.global["rampantFixed--undergroundAttackProbability"].value + else + newUndergroundAttackProbability = settings.global["rampantFixed--undergroundAttackProbability"].value * ((evolution_factor - minEvo) / (maxEvo - minEvo)) + if newUndergroundAttackProbability < 0.001 then + newUndergroundAttackProbability = 0 + end + end + if universe.undergroundAttackProbability == 0 then + universe.undergroundAttackProbability = newUndergroundAttackProbability + if newUndergroundAttackProbability > 0 then + game.print({"description.rampantFixed--undergroundAttackWarning"}) + end + else + universe.undergroundAttackProbability = math.max(newUndergroundAttackProbability, 0.0001) + end +end + +undergroundAttackG = undergroundAttack +return undergroundAttack diff --git a/RampantFixed/libs/UnitGroupUtils.lua b/RampantFixed/libs/UnitGroupUtils.lua new file mode 100644 index 00000000..e1a1384e --- /dev/null +++ b/RampantFixed/libs/UnitGroupUtils.lua @@ -0,0 +1,121 @@ +if unitGroupUtilsG then + return unitGroupUtilsG +end +local unitGroupUtils = {} + +-- imports + +local mapUtils = require("MapUtils") +local constants = require("Constants") +local chunkPropertyUtils = require("ChunkPropertyUtils") +local config = require("__RampantFixed__/config") + +-- constants + +local SQUAD_RETREATING = constants.SQUAD_RETREATING +local SQUAD_GUARDING = constants.SQUAD_GUARDING + +-- imported functions + +local getSquadsOnChunk = chunkPropertyUtils.getSquadsOnChunk + +local getNeighborChunks = mapUtils.getNeighborChunks + +-- module code + +function unitGroupUtils.findNearbyRetreatingSquad(map, chunk) + + for _,squad in pairs(getSquadsOnChunk(map, chunk)) do + local unitGroup = squad.group + if (squad.status == SQUAD_RETREATING) and unitGroup and unitGroup.valid then + return squad + end + end + + local neighbors = getNeighborChunks(map, chunk.x, chunk.y) + + for i=1,#neighbors do + local neighbor = neighbors[i] + if neighbor ~= -1 then + for _,squad in pairs(getSquadsOnChunk(map, neighbor)) do + local unitGroup = squad.group + if (squad.status == SQUAD_RETREATING) and unitGroup and unitGroup.valid then + return squad + end + end + end + end + return nil +end + +function unitGroupUtils.findNearbySquad(map, chunk) + + for _,squad in pairs(getSquadsOnChunk(map, chunk)) do + local unitGroup = squad.group + if unitGroup and unitGroup.valid then + return squad + end + end + + local neighbors = getNeighborChunks(map, chunk.x, chunk.y) + + for i=1,#neighbors do + local neighbor = neighbors[i] + if neighbor ~= -1 then + for _,squad in pairs(getSquadsOnChunk(map, neighbor)) do + local unitGroup = squad.group + if unitGroup and unitGroup.valid then + return squad + end + end + end + end + + return nil +end + +function unitGroupUtils.createSquad(position, map, group, settlers) + local unitGroup = group or map.surface.create_unit_group({position=position}) + + local squad = { + group = unitGroup, + status = SQUAD_GUARDING, + rabid = false, + penalties = {}, + base = nil, + frenzy = false, + map = map, + disbandTick = game.tick + 144000, + settlers = settlers or false, + siege = false, + kamikaze = false, + vengence = false, + frenzyPosition = {x = 0, + y = 0}, + maxDistance = 0, + groupNumber = unitGroup.group_number, + originPosition = {x = 0, + y = 0}, + prevChunk = -1, + undergoundAttack = nil, -- if true then it will be converted to underground attack when finish gathering + chunk = -1 + } + + if position then + squad.originPosition.x = position.x + squad.originPosition.y = position.y + elseif group then + squad.originPosition.x = group.position.x + squad.originPosition.y = group.position.y + end + + return squad +end + +function unitGroupUtils.calculateKamikazeThreshold(memberCount, universe) + local threshold = (memberCount / config.getAttackWaveMaxSize(universe)) * 0.2 + (universe.evolutionLevel * 0.2) + return threshold +end + +unitGroupUtilsG = unitGroupUtils +return unitGroupUtils diff --git a/RampantFixed/libs/UnitUtils.lua b/RampantFixed/libs/UnitUtils.lua new file mode 100644 index 00000000..d612c58d --- /dev/null +++ b/RampantFixed/libs/UnitUtils.lua @@ -0,0 +1,57 @@ +if (unitUtilsG) then + return unitUtilsG +end +local unitUtils = {} + +-- imports + +local constants = require("Constants") + +-- constants + +local ENERGY_THIEF_DRAIN_CRYSTALS = constants.ENERGY_THIEF_DRAIN_CRYSTALS + +-- imported functions + +-- module code + +function unitUtils.convertTypeToDrainCrystal(evolutionFactor, entity) + if (entity == "pole") then + return "crystal-drain-pole-rampant" + else + if (entity == "smallUnit") then + if (evolutionFactor < 0.25) then + return ENERGY_THIEF_DRAIN_CRYSTALS[1] + elseif (evolutionFactor < 0.50) then + return ENERGY_THIEF_DRAIN_CRYSTALS[2] + elseif (evolutionFactor < 0.75) then + return ENERGY_THIEF_DRAIN_CRYSTALS[3] + else + return ENERGY_THIEF_DRAIN_CRYSTALS[4] + end + elseif (entity == "unit") then + if (evolutionFactor < 0.25) then + return ENERGY_THIEF_DRAIN_CRYSTALS[4] + elseif (evolutionFactor < 0.50) then + return ENERGY_THIEF_DRAIN_CRYSTALS[5] + elseif (evolutionFactor < 0.75) then + return ENERGY_THIEF_DRAIN_CRYSTALS[6] + else + return ENERGY_THIEF_DRAIN_CRYSTALS[7] + end + else + if (evolutionFactor < 0.25) then + return ENERGY_THIEF_DRAIN_CRYSTALS[7] + elseif (evolutionFactor < 0.50) then + return ENERGY_THIEF_DRAIN_CRYSTALS[8] + elseif (evolutionFactor < 0.75) then + return ENERGY_THIEF_DRAIN_CRYSTALS[9] + else + return ENERGY_THIEF_DRAIN_CRYSTALS[10] + end + end + end +end + +unitUtilsG = unitUtils +return unitUtils diff --git a/RampantFixed/locale/en/locale.cfg b/RampantFixed/locale/en/locale.cfg new file mode 100644 index 00000000..6c79e598 --- /dev/null +++ b/RampantFixed/locale/en/locale.cfg @@ -0,0 +1,379 @@ +[rampant] +neutral=Common +acid=Acidic +physical=Armored +electric=Electric +suicide=Suicide +nuclear=Nuclear +fire=Fire +inferno=Inferno +troll=Regenerative +fast=Fast +laser=Laser +wasp=Wasp +spawner=Spawner +poison=Poison +energy=Sapper +energy-thief=Sapper +juggernaut=Juggernaut +arachnids=Arachnids + +biter=Biter: +spitter=Spitter: +biter-spawner=Biter Nest: +spitter-spawner=Spitter Nest: +worm=Worm: +turret=Worm: +hive=Hive: +spitter-wasp=Drone: +worm-wasp=Drone: +spawn=Biter: +egg=Eggs: +worm-egg=Eggs: + +t1=Lvl.1 +t2=Lvl.2 +t3=Lvl.3 +t4=Lvl.4 +t5=Lvl.5 +t6=Lvl.6 +t7=Lvl.7 +t8=Lvl.8 +t9=Lvl.9 +t10=Lvl.10 + +acid-pool=Acid Pool +fire-pool=Fire + +[damage-type-name] +rampant-longRangeImmunity=Long range immunity +rampant-overdamageProtection=Overdamage protection, max dmg +healing=healing + +[entity-name] +fire-flame-shortlife-rampant=Fire +safe-fire-flame-rampant=Safe fire +biters-safe-fire-rampant=Safe fire + +targetDummyPlasma-rampant=Unstable absorption crystal +targetDummyFire-rampant=Unstable fireproof crystal +targetDummyPhysical-rampant=Unstable armored crystal +targetDummyLaser-rampant=Unstable scattering crystal + +plasmaDummySetter-rampant=Crystal setter (absorption) +fireDummySetter-rampant=Crystal setter (fireproof) +physicalDummySetter-rampant=Crystal setter (armored) +laserDummySetter-rampant=Crystal setter (scattering) + +randomDummySetter-rampant=Crystal setter + +crystal-v1-drain-rampant=Power Draining Crystal +crystal-v2-drain-rampant=Power Draining Crystal +crystal-v3-drain-rampant=Power Draining Crystal +crystal-v4-drain-rampant=Power Draining Crystal +crystal-v5-drain-rampant=Power Draining Crystal +crystal-v6-drain-rampant=Power Draining Crystal +crystal-v7-drain-rampant=Power Draining Crystal +crystal-v8-drain-rampant=Power Draining Crystal +crystal-v9-drain-rampant=Power Draining Crystal +crystal-v10-drain-rampant=Power Draining Crystal +crystal-drain-pole-rampant=Crystal Pylon +pylon-target-rampant=Crystal Pylon + +acid-ball-acid-fire-rampant=Acid Pool +acid-ball-1-acid-fire-rampant=Acid Pool +acid-ball-2-acid-fire-rampant=Acid Pool +acid-ball-2-direction-acid-fire-rampant=Acid Pool +acid-ball-3-acid-fire-rampant=Acid Pool +acid-ball-3-direction-acid-fire-rampant=Acid Pool +acid-ball-4-acid-fire-rampant=Acid Pool +acid-ball-5-acid-fire-rampant=Acid Pool + +poison-cloud-Dmg-Heal1-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal2-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal3-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal4-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal5-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal6-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal7-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal8-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal9-cloud-rampant=Healing poison cloud +poison-cloud-Dmg-Heal10-cloud-rampant=Healing poison cloud + +spawner-proxy-1-rampant=Spawner Proxy +spawner-proxy-2-rampant=Spawner Proxy +spawner-proxy-3-rampant=Spawner Proxy + +[entity-description] + +[mod-setting-name] +rampantFixed--allowExternalControl=Remote interface: allow external control AI. Obsolete +rampantFixed--unitsAffectedByTiles=World: Units affected by tiles +rampantFixed--oldRedEnemyMapColor=Map: Revert Enemy Map Color +rampantFixed--unitSpawnerBreath=World: Unit Nest breath air +rampantFixed--useDumbProjectiles=Projectiles: Use blockable projectiles. Obsolete +rampantFixed--useBlockableSteamAttacks=Projectiles: replace steam attacks with blockable projectiles +rampantFixed--attackWaveGenerationThresholdMax=Attack Wave: Starting chunk attack threshold +rampantFixed--attackWaveGenerationThresholdMin=Attack Wave: Ending chunk attack threshold +rampantFixed--attackWaveMaxSize=Attack Wave: Max biter group size that can be directly formed +rampantFixed--attackWaveMaxSizeEvoPercent=Attack Wave: The maximum wave size starts with the % of evolution +rampantFixed--agressiveStart=Attack Wave: agressive start +rampantFixed--maxNumberOfSquads=Attack Wave: Max number of attack groups that can be active at once +rampantFixed--maxNumberOfBuilders=Attack Wave: Max number of building groups that can be active at once +rampantFixed--safeBuildings=Safety: Enable building safety. +rampantFixed--safeBuildings-curvedRail=Safety: Make curved rails safe from biters +rampantFixed--safeBuildings-straightRail=Safety: Make straight rails safe from biters +rampantFixed--safeBuildings-bigElectricPole=Safety: Make big electric poles safe from biters +rampantFixed--safeBuildings-railChainSignals=Safety: Make rail chain signals safe from biters +rampantFixed--safeBuildings-railSignals=Safety: Make rail signals safe from biters +rampantFixed--safeBuildings-trainStops=Safety: Make train stops safe from biters +rampantFixed--permanentNocturnal=AI: Nocturnal Mode +rampantFixed--allowDaytimePlayerHunting=AI: Daytime player hunting (including in peaceful mode) +rampantFixed--allowDaytimeNonRampantActions=AI: Daytime non-rampant actions (including in peaceful mode) +rampantFixed--aiPointsScaler=AI: Action points scaling +rampantFixed--aiDifficulty=AI: Difficulty +rampantFixed--aiPointsPrintSpendingToChat=AI: Print Point Spending to Chat +rampantFixed--aiPointsPrintGainsToChat=AI: Print Point Gains to Chat +rampantFixed--addWallResistanceAcid=Safety; Increase acid, poison and explosion wall resistance +rampantFixed--safeBuildings-lamps=Safety: Make lamps safe from biters +rampantFixed--removeBloodParticles=Optimization: Remove blood particles (Reduces lag spikes) +rampantFixed--fireSafety-flamethrower=Optimization: fire safety of hand flamethrowers +rampantFixed--flamethrowerTurretsRebalance=Optimization: rebalance of stationary flamethrowers +rampantFixed--rampantArsenalRebalance=Optimization: rebalance Rampant Arsenal DOT +rampantFixed--attack-warning=Notification: Enable attack wave warnings +rampantFixed--enableSwarm=Attack Wave: Enable the swarm +rampantFixed--newEnemies=World: Enable new enemies +rampantFixed--allowOtherEnemies=World: Allow other enemies, new factions only from the specified side +rampantFixed--newEnemiesSide=World: settle the factions on the selected side +rampantFixed--newEnemyVariations=World: Enemy Variations (highly recommended = 1). Obsolete +rampantFixed--enableBobsUnits=World: Enable Bobs as a faction +rampantFixed--enableNEUnits=World: Enable NE as a faction +rampantFixed--tierStart=World: Beginning enemy level +rampantFixed--tierEnd=World: Ending enemy level (recommended = 5) +rampantFixed--allowLongRangeImmunity=World: Long range immunity for some factions +rampantFixed--longRangeImmunity_efficiency=Efficiency of long range protection. +rampantFixed--allowOneshotProtection=World: Oneshot protection for some factions +rampantFixed--oneshotProtection_efficiency=Efficiency of overdamage protection. +rampantFixed--buildingsImmuneToElectic=Biter buildings are immune to electrical damage +rampantFixed--enableMigration=AI: Enable Migration (survival mode!) +rampantFixed--peacefulAIToggle=AI: Enable Peaceful +rampantFixed--peacePeriod=Duration of the peace period (at the beginning of the game only) +rampantFixed--printAIStateChanges=AI: Print State Changes to Chat +rampantFixed--debugTemperament=DEBUG: Print Temperament Changes to Chat +rampantFixed--max-evo-dist=World: Threshold for maximum evolution factor by distance + +rampantFixed--attackWaveGenerationUsePlayerProximity=Attack Wave: Use Player Proximity as attack trigger +rampantFixed--attackPlayerThreshold=Attack Wave: Player score contribution threshold + +rampantFixed--unkillableLogisticRobots=World: Unkillable logistic bots +rampantFixed--unkillableConstructionRobots=World: Unkillable construction bots + +rampantFixed--unitBiterHealthScaler=Modifier: Biter Health Scaler +rampantFixed--unitBiterSpeedScaler=Modifier: Biter Speed Scaler +rampantFixed--unitBiterDamageScaler=Modifier: Biter Damage Scaler +rampantFixed--unitBiterRangeScaler=Modifier: Biter Range Scaler +rampantFixed--unitBiterHealingScaler=Modifier: Biter Healing Scaler +rampantFixed--unitSpitterHealthScaler=Modifier: Spitter Health Scaler +rampantFixed--unitSpitterSpeedScaler=Modifier: Spitter Speed Scaler +rampantFixed--unitSpitterDamageScaler=Modifier: Spitter Damage Scaler +rampantFixed--unitSpitterRangeScaler=Modifier: Spitter Range Scaler +rampantFixed--unitSpitterHealingScaler=Modifier: Spitter Healing Scaler +rampantFixed--unitDroneHealthScaler=Modifier: Drone Health Scaler +rampantFixed--unitDroneSpeedScaler=Modifier: Drone Speed Scaler +rampantFixed--unitDroneDamageScaler=Modifier: Drone Damage Scaler +rampantFixed--unitDroneRangeScaler=Modifier: Drone Range Scaler +rampantFixed--unitDroneHealingScaler=Modifier: Drone Healing Scaler +rampantFixed--unitWormHealthScaler=Modifier: Worm Health Scaler +rampantFixed--unitWormDamageScaler=Modifier: Worm Damage Scaler +rampantFixed--unitWormRangeScaler=Modifier: Worm Range Scaler +rampantFixed--unitWormHealingScaler=Modifier: Worm Healing Scaler +rampantFixed--unitSpawnerHealthScaler=Modifier: Unit Spawner Health Scaler +rampantFixed--unitSpawnerOwnedScaler=Modifier: Unit Spawner Owned Count Scaler +rampantFixed--unitSpawnerSpawnScaler=Modifier: Unit Spawner Spawn Count Scaler +rampantFixed--unitSpawnerRespawnScaler=Modifier: Unit Spawner Respawn Rate Scaler +rampantFixed--unitSpawnerHealingScaler=Modifier: Unit Spawner Healing Scaler + +rampantFixed--unitHiveHealthScaler=Modifier: Hive Health Scaler +rampantFixed--unitHiveHealingScaler=Modifier: Hive Healing Scaler +rampantFixed--unitHiveRespawnScaler=Modifier: Hive Respawn Scaler + +rampantFixed--enableShrinkNestsAndWorms=Attack Wave: Shrink Nests and Worms + +rampantFixed--raidAIToggle=AI: Enable Raiding AI +rampantFixed--siegeAIToggle=AI: Enable Siege AI +rampantFixed--siegeMinDistance=AI: Minimum chunks from the perimeter +rampantFixed--undergroundAttack=AI: Underground attacks +rampantFixed--undergroundAttackProbability=AI: Probability of underground attack + + +rampantFixed--acidEnemy=World: T1 Acidic Biter Faction +rampantFixed--laserEnemy=World: T2 Laser Biter Faction +rampantFixed--electricEnemy=World: T2 Electric Biter Faction +rampantFixed--fastEnemy=World: T2 Fast Biter Faction +rampantFixed--suicideEnemy=World: T2 Suicide Biter Faction +rampantFixed--waspEnemy=World: T3 Wasp Biter Faction +rampantFixed--spawnerEnemy=World: T3 Spawner Biter Faction +rampantFixed--trollEnemy=World: T3 Regenerative Biter Faction +rampantFixed--energyThiefEnemy=World: T3 Sapper Biter Faction +rampantFixed--fireEnemy=World: T4 Fire Biter Faction +rampantFixed--ArachnidsEnemy=World: T4 Arachnids Biter Faction (Arachnids mod recommended) +rampantFixed--physicalEnemy=World: T5 Armored Biter Faction +rampantFixed--infernoEnemy=World: T6 Inferno Biter Faction +rampantFixed--poisonEnemy=World: T6 Poison Biter Faction +rampantFixed--nuclearEnemy=World: T7 Nuclear Biter Faction +rampantFixed--JuggernautEnemy=World: T9 Juggernaut Biter Faction + + +rampantFixed--disableCollidingProjectiles=Projectiles: Non biter force colliding projectiles +rampantFixed--enableFullMapScan=Compatibility: Enable full map scanning +rampantFixed--unitAndSpawnerFadeTime=Biter, Spitter, Worm, Nest, and Hive Corpse Fade Time +rampantFixed--enableFadeTime=Enable corpse fade time +rampantFixed--settlementsProbability=AI: settlements probability in siege/migration mode +rampantFixed--vengenceProbabilityPercent=AI: basic vengence probability per kill +rampantFixed--chainVengenceCoefficient=AI: probability of forming a sequence of vengence squads +rampantFixed--showAdminMenu=Show the button to open the menu of additional administrator options + +[mod-setting-description] +rampantFixed--allowExternalControl=Allow other mods not only to read Rampant's data, but also to set its value. Obsolete. External control is always allowed starting from version 1.8.3. +rampantFixed--unitAndSpawnerFadeTime=The time in seconds for how long biter corpses stay around +rampantFixed--oldRedEnemyMapColor=Reverts the enemy map color to the vanilla enemy map color +rampantFixed--unitSpawnerBreath=Now unit spawners breath air so they are affected by things like poison capsules +rampantFixed--useDumbProjectiles=Use the vanilla projectile attacks that are blockable. Do nothing now. +rampantFixed--useBlockableSteamAttacks=The attacks of the infernal and fire faction will be replaced with blockable projectiles. It is recommended to enable it if there is a mod "combat mechanics overhaul" with the enabled settings "Spitter/worm spit blockable" +rampantFixed--attackWaveGenerationThresholdMax=The total score that a chunk must reach in order for an attack wave to spawn. DOES NOT affect vanilla biters waves. Scaling linearly with evolution factor (starting threshold @ 0.0 evolution) +rampantFixed--attackWaveGenerationThresholdMin=The total score that a chunk must reach in order for an attack wave to spawn. DOES NOT affect vanilla biters waves. Scaling linearly with evolution factor (ending threshold @ 100.0 evolution) +rampantFixed--attackWaveMaxSize=If you wish to change how the attack wave scales with evolution you will need to modify the config.lua in the zip file. +rampantFixed--attackWaveMaxSizeEvoPercent=If you wish to get the maximum size attack earlier, then specify the desired percentage +rampantFixed--agressiveStart=The size of the squad and the frequency of attacks will be calculated from at least 30% of evolution. This level will be reached in 1 hours from the start of the game +rampantFixed--safeBuildings=This needs to be toggle for the safe building toggles to work. This will cause entities made safe to regenerate with the destructible flag set to false, which causes them to never be targeted or damaged again. +rampantFixed--safeBuildings-curvedRail=Make curved rails safe from biters +rampantFixed--safeBuildings-straightRail=Make straight rails safe from biters +rampantFixed--safeBuildings-bigElectricPole=Make big electric poles safe from biters +rampantFixed--safeBuildings-railChainSignals=Make rail chain signals safe from biters +rampantFixed--safeBuildings-railSignals=Make rail signals safe from biters +rampantFixed--safeBuildings-lamps=Make lamps safe from biters +rampantFixed--safeBuildings-trainStops=Make train stops safe from biters +rampantFixed--permanentNocturnal=Toggling this will cause Rampant attack waves to spawn at night. Works better with the clockwork mod or a mod that extends night. +rampantFixed--allowDaytimePlayerHunting=Allows biters to hunt the player at all times +rampantFixed--allowDaytimeNonRampantActions=Allows standard attacks due to pollution, settlement, attacks of other mods at all times +rampantFixed--aiPointsScaler=Between 0.0 and 100.0. This scales how many action points the ai gets per logic cycle to perform actions like making attack waves. 0.3 - very easy, 0.75 - easy, 1.0 - medium, 1.25+ - hard +rampantFixed--aiDifficulty=Hard - default level. Lite - for a more comfortable game. The response to the player's actions is weaker, attacks are less frequent +rampantFixed--aiPointsPrintSpendingToChat=Print a message to chat whenever Rampant spends points. Includes GPS coordinates. Keep disabled for the hardest Rampant experience. Heads up: can fill up chat quickly during busy battles! +rampantFixed--aiPointsPrintGainsToChat=Print a message to chat whenever Rampant gains points. Does not show passive point generation. Keep disabled for the hardest Rampant experience. Heads up: can fill up chat quickly during busy battles! +rampantFixed--addWallResistanceAcid=Toggling this will cause a 60% acid,75% poison resistance and 40 decrease explosion to be added to all wall entities. +rampantFixed--removeBloodParticles=The blood particles that are created when biters are being killed can cause UPS spikes, this removes them. +rampantFixed--fireSafety-flamethrower=Hand flamethrowers do not cause fires, instead dealing direct area of effect damage. Significantly reduces game lag when having multiple biters nearby +rampantFixed--flamethrowerTurretsRebalance=Reduces attack speed while maintaining overall damage. In the case of the Arsenal Rampant flamethrower, it removes very significant lags +rampantFixed--rampantArsenalRebalance=Acid and poison sticker damage will be dealt less often, but stronger. Significantly reduces late game lag when using poison and acid +rampantFixed--enableSwarm=This reduces the size of the unit collision_mask causing them to reduce pathing collisions and smooth out the attacks +rampantFixed--attack-warning=Shows a message warning players that an attack wave is incoming +rampantFixed--newEnemies=Adds news enemies that will be dispersed over the world. This increases the RAM requirements. With 1 variation for each biter, worm, and nest and 5 tiers expect upto a 2GB RAM increase. With 20 variations and 10 tiers set expect up to 9GB RAM increase. Variations add randominess to each tier of biter, worms, or nests. Tiers are the power level of the biters. +rampantFixed--allowOtherEnemies=Only in a new game or on a map without Rampant. Restricts the placement of , leaving room for the enemies of the other mods. +rampantFixed--newEnemiesSide=Only in a new game or on a map without Rampant. New factions will appear only on the specified side if the setting is enabled +rampantFixed--newEnemyVariations=Only for compatibility with Rampant. All new objects will be as if the number of options is equal to 1 +rampantFixed--tierStart=This is the starting level of the enemy that will be used when generating the set of enemies for the specified number of tiers and increases linearly to the end tier for as many tiers selected. Roughly healthwise each tier is a follows (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). min 1, max 10 +rampantFixed--tierEnd=This is the ending tier level that is reached after increasing linearly from the start tier for as many tiers selected. Roughly healthwise each tier is as follows (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). min 1, max 10, , recommended =5 (slightly weaker normal biters) +rampantFixed--allowLongRangeImmunity=Some factions can't be killed from long range. Fire and acid damage ignore this immunity. Disabling the setting may make these factions too weak +rampantFixed--longRangeImmunity_efficiency=100% - immune to damage from Range N+. 10% - will take 90% damage +rampantFixed--allowOneshotProtection=Some factions reqiure multiple hits to die. Fire and acid damage ignore this protection. Disabling the setting may make these factions too weak +rampantFixed--oneshotProtection_efficiency=100% - taken damage cant exceed overdamage threshold. 10% - overdamage will reduced 10% +rampantFixed--buildingsImmuneToElectic=Nests and worms do not take electrical damage + +rampantFixed--enableMigration=The AI will start capturing the entire map. Respects the map settings for biter expansion. (Be carefull! This is hard mode!) +rampantFixed--peacefulAIToggle=Peaceful period at the beginning of the game. Also, sometimes AI can roll the peaceful state. Disable for the hardest Rampant experience. +rampantFixed--peacePeriod=During this time, there will be no attacks, including from pollution. Set in minutes. Set when the map is created, changes are ignored later. +rampantFixed--printAIStateChanges=Gives you information in the game chat about Rampant's AI state. Messages are displayed for each surface. Disable for the hardest Rampant experience. +rampantFixed--debugTemperament=Prints to chat AI temperament information that controls AI state rolls. This is used for debugging. +rampantFixed--max-evo-dist=The higher the value, the greater the distance from the center for the appearance of strong factions + +rampantFixed--enableShrinkNestsAndWorms=Reduce the collision box size of nests and worms by 50%. May cause overlapping entities due to the collision box being smaller than the entity graphic. +rampantFixed--attackWaveGenerationUsePlayerProximity=Include player pheromones amount for threshold on chunks with biter nests that will generate a Rampant attack wave. DOES NOT affect vanilla biters waves +rampantFixed--attackPlayerThreshold=The score that a chunk must reach for it to contribute to the attack threshold. Increasing reduces player pheromone cloud impact. + +rampantFixed--unkillableLogisticRobots=This will make logistic bots immune to all damage +rampantFixed--unkillableConstructionRobots=This will make construction bots immune to all damage + +rampantFixed--unitBiterHealthScaler=Scales by a percentage all new enemy biter health +rampantFixed--unitBiterSpeedScaler=Scales by a percentage all new enemy biter speed +rampantFixed--unitBiterDamageScaler=Scales by a percentage all new enemy biter damage +rampantFixed--unitBiterRangeScaler=Scales by a percentage all new enemy biter attack range +rampantFixed--unitBiterHealingScaler=Scales by a percentage all new enemy biter Healing +rampantFixed--unitSpitterHealthScaler=Scales by a percentage all new enemy spitter health +rampantFixed--unitSpitterSpeedScaler=Scales by a percentage all new enemy spitter speed +rampantFixed--unitSpitterDamageScaler=Scales by a percentage all new enemy spitter damage +rampantFixed--unitSpitterRangeScaler=Scales by a percentage all new enemy spitter range +rampantFixed--unitSpitterHealingScaler=Scales by a percentage all new enemy spitter Healing +rampantFixed--unitDroneHealthScaler=Scales by a percentage all new enemy drone health. Drones come from the factions spawner and wasp +rampantFixed--unitDroneSpeedScaler=Scales by a percentage all new enemy drone speed. Drones come from the factions spawner and wasp +rampantFixed--unitDroneDamageScaler=Scales by a percentage all new enemy drone damage. Drones come from the factions spawner and wasp +rampantFixed--unitDroneRangeScaler=Scales by a percentage all new enemy drone range. Drones come from the factions spawner and wasp +rampantFixed--unitDroneHealingScaler=Scales by a percentage all new enemy drone healing. Drones come from the factions spawner and wasp +rampantFixed--unitWormHealthScaler=Scales by a percentage all new enemy worm health +rampantFixed--unitWormDamageScaler=Scales by a percentage all new enemy worm damage +rampantFixed--unitWormRangeScaler=Scales by a percentage all new enemy worm range +rampantFixed--unitWormHealingScaler=Scales by a percentage all new enemy worm healing +rampantFixed--unitSpawnerHealthScaler=Scales by a percentage all new enemy unit spawner health +rampantFixed--unitSpawnerOwnedScaler=Scales by a percentage all new enemy unit spawner max number of units controlled per spawner +rampantFixed--unitSpawnerSpawnScaler=Scales by a percentage all new enemy unit spawner number of units spawned at any one time +rampantFixed--unitSpawnerRespawnScaler=Scales by a percentage all new enemy unit spawner time to spawn new units +rampantFixed--unitSpawnerHealingScaler=Scales by a percentage all new enemy unit spawner healing +rampantFixed--unitHiveHealthScaler=Scales by a percentage all new enemy unit hive health +rampantFixed--unitHiveHealingScaler=Scales by a percentage all new enemy unit hive healing +rampantFixed--unitHiveRespawnScaler=Scales by a percentage all new enemy unit hive time to spawn new units + +rampantFixed--raidAIToggle=Toggles the ai raiding parties distant nests +rampantFixed--siegeAIToggle=Toggles the ai siege parties that will settle near the player +rampantFixed--siegeMinDistance=Sieges can't settle closer than the specified number of chunks from military buildings +rampantFixed--undergroundAttack=Some attacks will reach the target underground. They prefer conventional paths, but will go over any surface if necessary. Visible on the map. Can be intercepted by turrets. Also, when shelling a squad with artillery, it will dig in. And keep attacking underground. Cannot cross impassable terrain wider than 2 chunks, except when retaliating for artillery fire +rampantFixed--undergroundAttackProbability=Probability depends on evolution. Does not affect burrowing when shelled by artillery + +rampantFixed--laserEnemy=Laser Biter Faction, Laser is major resistance, electric is a minor resistance. Has Biters and Spitter unit types. Overdamage protection 1.5 (~80% max hp dmg) +rampantFixed--waspEnemy=Wasp Biter Faction, Spitter only units and each spitter spits small drones. +rampantFixed--spawnerEnemy=Spawner Biter Faction, Only Spitters produced by spawners and spitters make eggs that hatch into biters. Long range immunity(30+) +rampantFixed--trollEnemy=Regenerative Biter Faction, High health regeneration, major weakness to fire, minor resistance to physical, minor resistance to explosive. Overdamage protection 5 (20% max hp dmg) +rampantFixed--fastEnemy=Fast Biter Faction, High rate of movement, minor resistance to explosive. Overdamage protection 4 (25% max hp dmg), long range immunity(20+) +rampantFixed--infernoEnemy=Inferno Biter Faction, Only Spitters that spit flaming acid that burns everything. Extreme resistance to Acid & Fire, Minor weakness to poison. Major weakness to laser +rampantFixed--nuclearEnemy=Nuclear Biter Faction, Only Biters that explode like a atomic bomb. Major acid and fire resist. Major weakness to explosive. Fast, low HP, overdamage protection 5 (20% max hp dmg) +rampantFixed--electricEnemy=Electric Biter Faction, Only Biters with a short range attack that hits multiple entities in a line. Major resistance to Electric, Minor resistance to Laser. +rampantFixed--fireEnemy=Fire Biter Faction, Major resistance to Acid. Fire immunity. Laser weakness. Fire stream atack. +rampantFixed--ArachnidsEnemy=They look like spiders (if the Arachnids mod is installed). Vulnerable to physical damage (x2). Upon death, eggs are left, from which, after 5 seconds, a new biter will hatch. Eggs are vulnerable to physical damage. The task of the faction is to force the player to spend ammo. +rampantFixed--suicideEnemy=Suicide Biter Faction, Only Biters that explode when they attack. Minor resistance to Poison, Fire, Major weakness to explosive. Fast, low HP, overdamage protection 4 (25% max hp dmg), long range immunity(18+) +rampantFixed--physicalEnemy=Armored Biter Faction, Only Biters. Major resistance to physical, Major resistance to explosive, Minor resistance to Fire. Minor Weakness to Electric and Laser. Overdamage protection 2 (50% max hp dmg) +rampantFixed--acidEnemy=Acid Biter Faction, Immune to Acid, Minor resistance to Poison. +rampantFixed--energyThiefEnemy=Sapper Biter Faction, Major resistance to Electric, Minor resistance to Laser. Destroying powered structures creates draining crystals. +rampantFixed--poisonEnemy=Poison Biter Faction, Only Biters. On death creates a cloud that heals biters and hurts player objects. Major resistance to Poison, Minor resistance to Fire.Minor weakness to Laser, Electric. +rampantFixed--JuggernautEnemy=Slowly, big biters with extreme physical, acid and fire resists. Cloud atack, healing allies and harming enemies. This is a dps-check of your laser defence + + +rampantFixed--disableCollidingProjectiles=Biter projectiles no longer collide with other biters, worms or nests. Everything else still collides with biter projectiles. +rampantFixed--enableFullMapScan=This setting causes the game map to slowly be scanned for entities created or destroyed outside of the factorio event system. (If a mod isnt using script_raised_built or script_raised_destroyed this will cause Rampant to still eventually be consistent with the game map) + +rampantFixed--enableFadeTime=Enable the fade time to reduce or increase biter, spitter, worm, spawner, and hive. If disabled, no alterations are made to corpse times. + +rampantFixed--maxNumberOfBuilders=More builders requires more UPS. +rampantFixed--maxNumberOfSquads=More squads requires more UPS. +rampantFixed--settlementsProbability=Default value = 0.4 (40% settle, 60% atack). Only for migrate/siege mode. Does not affect regular settlements +rampantFixed--vengenceProbabilityPercent=Default value = 0.04. Changes the probability of forming vengence squads after each biter's death. +rampantFixed--chainVengenceCoefficient=Default value = 0.6. The probability of each subsequent vengence squad is multiplied by this coefficient. New aggressive actions of the player instantly increase the probability to the original one. Standard attacks increase the probability gradually. The effect is twice as weak with an excess of AI action points +rampantFixed--showAdminMenu=Solo game or admin player. Adds a button to the top of the screen. Its menu allows you to replace enemies with standard ones, as well as specify which surfaces/planets to ignore + +[description] +rampantFixed--EnemySettings1_1_9=Rampant Fixed: since version 1.1.9, a mixed settlement of rampant and other enemies is available (see startup settings). Only in the new game. +rampantFixed--EnemySettings1_1_10=Rampant Fixed: since version 1.1.10 it is possible to replace the nests of new enemies with standard ones. This can be useful if you want to continue the game without new enemies or remove the mod without losing nests (player settings- "Show dialog to disable new enemies"). Singleplayer game or "admin" players only +rampantFixed--disableNewEnemies_text=Nests are replaced on all planets. They will not be returned +rampantFixed--msg-ask-disableNewEnemies=Replacing the nests of new enemies with standard ones. It may take time on large maps. Start a replacement? +rampantFixed--button_disableNewEnemies_disable=Yes (may take some time) +rampantFixed--button_disableNewEnemies_cancel=Cancel +rampantFixed--msg_replaceNewEnemiesNests=Replacement of nests is completed. Nests processed:__1__ . If desired, the mod can be removed. +rampantFixed--K2_SE_CMO_incompatibilityWarning=A combination of mods K2+SE + combat-mechanics-overhaul was found. In this combination, the mod settings : Spitter/worm spit blockable "[font=heading-1][color=red] incorrectly converts the attacks of [/color][/font] fire and infernal factions. If they are enabled, then enable an alternative attack (Rampant Fixed setting: Projectiles: replace steam attacks with blockable projectiles) +rampantFixed--undergroundAttackWarning=Warning: biters learned underground attacks! +rampantFixed--firstUndergroundAttackWarning=First underground attack detected (next attacks will come without warning) +rampantFixed--JuggernautAlert=Rampant Fixed: ATTENTION! AT 82% EVOLUTION A JUGGERNAUTS FACTION IS POSSIBLE! They are extremely resistant to fire and physical damage. +rampantFixed--NEW_ENEMIES_SIDE_ignored=Rampant Fixed: setting of new enemies side has been changed. Its change is available only at the beginning of the game and it will be ignored +rampantFixed--AdminMenu=Rampant fixed. Admin menu +rampantFixed--showDisableNewEnemies=Show dialogue for disabling Rampant enemies +rampantFixed--surfaceIteraction_frame=Surface processing setup +rampantFixed--surfaceName_Title=Surface name +rampantFixed--surfaceIgnored_Title=Processing +rampantFixed--surfaceIgnored_True=Ignore +rampantFixed--surfaceIgnored_False=Process diff --git a/RampantFixed/locale/ru/locale.cfg b/RampantFixed/locale/ru/locale.cfg new file mode 100644 index 00000000..5bacd927 --- /dev/null +++ b/RampantFixed/locale/ru/locale.cfg @@ -0,0 +1,366 @@ +[mod-description] +RampantFixed= Π‘Π΄Π΅Π»Π°Π½ΠΎ Π½Π° основС Rampant 1.1.1. \n \n1. ИИ пСрСписан, Π³Π΅ΠΉΠΌΠΏΠ»Π΅ΠΉ отличаСтся. ΠœΠΎΠΆΠ΅Ρ‚ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ поиск ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Π² ΠΎΠ±ΠΎΡ€ΠΎΠ½Π΅. По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ засСляСт всю ΠΊΠ°Ρ€Ρ‚Ρƒ\n2. +2 Π€Ρ€Π°ΠΊΡ†ΠΈΠΈ. ΠœΠΎΠ³ΡƒΡ‚ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π³Π½Π΅Π·Π΄Π°. Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ сочСтаниС с Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π²Ρ€Π°Π³ΠΎΠ²\n Π”Π΅Ρ‚Π°Π»ΠΈ Π½Π° ΠΌΠΎΠ΄-ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ + +[rampant] +neutral=ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ +acid=ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹ΠΉ +physical=Π‘Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ +electric=ЭлСктричСский +suicide=КамикадзС, +nuclear=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ +fire=ΠžΠ³Π½Π΅Π½Π½Ρ‹ΠΉ +inferno=Адский +troll=Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ +fast=Быстрый +laser=Π›Π°Π·Π΅Ρ€Π½Ρ‹ΠΉ +wasp=Оса, +spawner=ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ- +poison=Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹ΠΉ +energy=Π­Π½Π΅Ρ€Π³ΠΎΠ²ΠΎΡ€- +energy-thief=Π­Π½Π΅Ρ€Π³ΠΎΠ²ΠΎΡ€- +juggernaut=Π”ΠΆΠ°Π³Π³Π΅Ρ€Π½Π°ΡƒΡ‚- +arachnids=Арахниды, + +biter=ΠšΡƒΡΠ°ΠΊΠ°: +spitter=ПлСвака: +biter-spawner=Π“Π½Π΅Π·Π΄ΠΎ кусак: +spitter-spawner=Π“Π½Π΅Π·Π΄ΠΎ ΠΏΠ»Π΅Π²Π°ΠΊ: +worm=Π§Π΅Ρ€Π²ΡŒ: +turret=Π§Π΅Ρ€Π²ΡŒ: +hive=Π£Π»Π΅ΠΉ: +spitter-wasp=Π”Ρ€ΠΎΠ½: +worm-wasp=Π”Ρ€ΠΎΠ½: +spawn=ΠšΡƒΡΠ°ΠΊΠ°: +egg=Π―ΠΉΡ†Π°: +worm-egg=Π―ΠΉΡ†Π°: + +t1=ΡƒΡ€.1 +t2=ΡƒΡ€.2 +t3=ΡƒΡ€.3 +t4=ΡƒΡ€.4 +t5=ΡƒΡ€.5 +t6=ΡƒΡ€.6 +t7=ΡƒΡ€.7 +t8=ΡƒΡ€.8 +t9=ΡƒΡ€.9 +t10=ΡƒΡ€.10 + +acid-pool=Π›ΡƒΠΆΠ° кислоты +fire-pool=Огонь + +[damage-type-name] +rampant-longRangeImmunity=Π˜ΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ дальним Π°Ρ‚Π°ΠΊΠ°ΠΌ +rampant-overdamageProtection=Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ свСрхурона, max dmg +healing=Π˜ΡΡ†Π΅Π»Π΅Π½ΠΈΠ΅ + +[entity-name] +fire-flame-shortlife-rampant=Огонь +safe-fire-flame-rampant=ΠŸΠΎΠΆΠ°Ρ€ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΉ огонь +biters-safe-fire-rampant=ΠŸΠΎΠΆΠ°Ρ€ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΉ огонь кусак + +targetDummyPlasma-rampant=ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ³Π»ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ кристалл +targetDummyFire-rampant=ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ³Π½Π΅ΡƒΠΏΠΎΡ€Π½Ρ‹ΠΉ кристалл +targetDummyPhysical-rampant=ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ кристалл +targetDummyLaser-rampant=ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°ΡΡΠ΅ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ кристалл + +plasmaDummySetter-rampant=Установщик кристаллов (ΠΏΠΎΠ³Π»ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ) +fireDummySetter-rampant=Установщик кристаллов (ΠΎΠ³Π½Π΅ΡƒΠΏΠΎΡ€Π½Ρ‹ΠΉ) +physicalDummySetter-rampant=Установщик кристаллов (Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ) +laserDummySetter-rampant=Установщик кристаллов (Ρ€Π°ΡΡΠ΅ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ) + +randomDummySetter-rampant=Установщик кристаллов + + +crystal-v1-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v2-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v3-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v4-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v5-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v6-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v7-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v8-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v9-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-v10-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии +crystal-drain-pole-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π»ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΈΠ»ΠΎΠ½ +pylon-target-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π»ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΈΠ»ΠΎΠ½ + +acid-ball-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-1-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-2-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-2-direction-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-3-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-3-direction-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-4-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты +acid-ball-5-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты + +poison-cloud-Dmg-Heal1-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal2-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal3-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal4-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal5-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal6-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal7-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal8-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal9-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда +poison-cloud-Dmg-Heal10-cloud-rampant=Облако Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ яда + +spawner-proxy-1-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ +spawner-proxy-2-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ +spawner-proxy-3-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ + +[entity-description] + +[mod-setting-name] +rampantFixed--allowExternalControl=Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ внСшний ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ИИ (устарСло) +rampantFixed--unitsAffectedByTiles=ΠœΠΈΡ€: Ρ‚Π°ΠΉΠ»Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΡŽΠ½ΠΈΡ‚Ρ‹ +rampantFixed--oldRedEnemyMapColor=ΠšΠ°Ρ€Ρ‚Π°: Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π° Π²Ρ€Π°Π³ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ +rampantFixed--unitSpawnerBreath=ΠœΠΈΡ€: Π“Π½Ρ‘Π·Π΄Π° Π΄Ρ‹ΡˆΠ°Ρ‚ Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠΌ +rampantFixed--useDumbProjectiles=Бнаряды: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды для "Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹Ρ…" кусак. УстарСло +rampantFixed--useBlockableSteamAttacks=Бнаряды: Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ струйныС Π°Ρ‚Π°ΠΊΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды +rampantFixed--attackWaveGenerationThresholdMax=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π°Π½ΠΊΠ° +rampantFixed--attackWaveGenerationThresholdMin=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π°Π½ΠΊΠ° +rampantFixed--attackWaveMaxSize=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ кусак, сформированный Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ +rampantFixed--attackWaveMaxSizeEvoPercent=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ кусак начнСтся с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ +rampantFixed--agressiveStart=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: агрСссивный старт +rampantFixed--maxNumberOfSquads=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: МаксимальноС количСство Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ Π·Π° Ρ€Π°Π· +rampantFixed--maxNumberOfBuilders=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: МаксимальноС количСство Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ Π·Π° Ρ€Π°Π· +rampantFixed--safeBuildings=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ строСний +rampantFixed--safeBuildings-curvedRail=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-straightRail=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ прямыС Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-bigElectricPole=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ большиС ΠΎΠΏΠΎΡ€Ρ‹ Π›Π­ΠŸ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-railChainSignals=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ свСтофоры ΠΎΡ‚ кусак +rampantFixed--safeBuildings-railSignals=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ свСтофоры ΠΎΡ‚ кусак +rampantFixed--safeBuildings-trainStops=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ Π–Π”-станции ΠΎΡ‚ кусак +rampantFixed--permanentNocturnal=ИИ: Π½ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ +rampantFixed--allowDaytimePlayerHunting=ИИ: ΠΎΡ…ΠΎΡ‚Π° "Π½ΠΎΡ‡Π½Ρ‹Ρ…" кусак Π½Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° Π΄Π½Π΅ΠΌ. ΠžΡ…ΠΎΡ‚Π° Π½Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΌΠΈΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ +rampantFixed--allowDaytimeNonRampantActions=ИИ: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ стандартныС Π°Ρ‚Π°ΠΊΠΈ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π°Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ² (Π΄Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π² ΠΌΠΈΡ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅) +rampantFixed--aiPointsScaler=ИИ: ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‡ΠΊΠΎΠ² дСйствий +rampantFixed--aiDifficulty=ИИ: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности +rampantFixed--addWallResistanceAcid=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ сопротивлСниС стСн ΠΊ яду, кислотС ΠΈ Π²Π·Ρ€Ρ‹Π²Ρƒ +rampantFixed--safeBuildings-lamps=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: кусаки Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ Π»Π°ΠΌΠΏΡ‹ +rampantFixed--removeBloodParticles=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: Π£Π±Ρ€Π°Ρ‚ΡŒ Π±Ρ€Ρ‹Π·Π³ΠΈ ΠΊΡ€ΠΎΠ²ΠΈ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π»Π°Π³ΠΈ) +rampantFixed--fireSafety-flamethrower=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: поТарная Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ пСрСносных ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠ² +rampantFixed--flamethrowerTurretsRebalance=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: рСбаланс стационарных ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠ² +rampantFixed--rampantArsenalRebalance=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ частоту Π”ΠžΠ’'ΠΎΠ² ΠΈΠ· Rampant Arsenal +rampantFixed--attack-warning=Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ прСдупрСТдСния ΠΎ Π²ΠΎΠ»Π½Π΅ Π°Ρ‚Π°ΠΊΠΈ +rampantFixed--enableSwarm=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠΉ +rampantFixed--newEnemies=ΠœΠΈΡ€: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ² +rampantFixed--allowOtherEnemies=ΠœΠΈΡ€: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π²Ρ€Π°Π³ΠΎΠ², Π½ΠΎΠ²Ρ‹Π΅ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ стороны +rampantFixed--newEnemiesSide=ΠœΠΈΡ€: ΠΏΠΎΡΠ΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ сторонС +rampantFixed--newEnemyVariations=ΠœΠΈΡ€: Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ€Π°Π³ΠΎΠ² (рСкомСндуСтся = 1). УстарСло +rampantFixed--enableBobsUnits=ΠœΠΈΡ€: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ· ΠΌΠΎΠ΄Π° Bob +rampantFixed--enableNEUnits=ΠœΠΈΡ€: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ· ΠΌΠΎΠ΄Π° NE +rampantFixed--tierStart=ΠœΠΈΡ€: Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ² +rampantFixed--tierEnd=ΠœΠΈΡ€: ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ² +rampantFixed--allowLongRangeImmunity=ΠœΠΈΡ€: ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ ΡΠ²Π΅Ρ€Ρ…Π΄Π°Π»ΡŒΠ½ΠΈΠΌ Π°Ρ‚Π°ΠΊΠ°ΠΌ Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ. +rampantFixed--longRangeImmunity_efficiency=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚Π° ΠΎΡ‚ ΡΠ²Π΅Ρ€Ρ…Π΄Π°Π»ΡŒΠ½ΠΈΡ… Π°Ρ‚Π°ΠΊ +rampantFixed--allowOneshotProtection=ΠœΠΈΡ€: Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ свСрхурона Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ. +rampantFixed--oneshotProtection_efficiency=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ свСрхурона +rampantFixed--buildingsImmuneToElectic=ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΠΊΠΈ кусак ΠΈΠΌΠΌΡƒΠ½Π½Ρ‹ ΠΊ элСктричСству +rampantFixed--enableMigration=ИИ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ (Ρ€Π΅ΠΆΠΈΠΌ выТивания) +rampantFixed--peacefulAIToggle=ИИ: Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠΈΡ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ +rampantFixed--peacePeriod=Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΈΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹) +rampantFixed--max-evo-dist=ΠœΠΈΡ€:Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ ΠΎΡ‚ расстояния +# rampantFixed--liteMode=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: простой Ρ€Π΅ΠΆΠΈΠΌ +rampantFixed--attackWaveGenerationUsePlayerProximity=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΈΠ·ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ Π°Ρ‚Π°ΠΊΠΈ +rampantFixed--attackPlayerThreshold=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠΏΠΎΡ€ΠΎΠ³ Π²ΠΊΠ»Π°Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° +rampantFixed--unkillableLogisticRobots=ΠœΠΈΡ€: бСссмСртныС транспортныС Π΄Ρ€ΠΎΠ½Ρ‹ +rampantFixed--unkillableConstructionRobots=ΠœΠΈΡ€: бСссмСртныС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Ρ€ΠΎΠ½Ρ‹ +rampantFixed--unitBiterHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ кусак +rampantFixed--unitBiterSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ скорости кусак +rampantFixed--unitBiterDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° кусак +rampantFixed--unitBiterRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ кусак +rampantFixed--unitBiterHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ кусак +rampantFixed--unitSpitterHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠ»Π΅Π²Π°ΠΊ +rampantFixed--unitSpitterSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ скорости ΠΏΠ»Π΅Π²Π°ΠΊ +rampantFixed--unitSpitterDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° ΠΏΠ»Π΅Π²Π°ΠΊ +rampantFixed--unitSpitterRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ +rampantFixed--unitSpitterHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ +rampantFixed--unitDroneHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--unitDroneSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ скорости Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--unitDroneDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--unitDroneRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--unitDroneHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--unitWormHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Ρ‡Π΅Ρ€Π²Π΅ΠΉ +rampantFixed--unitWormDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Ρ‡Π΅Ρ€Π²Π΅ΠΉ +rampantFixed--unitWormRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ +rampantFixed--unitWormHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ +rampantFixed--unitSpawnerHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π³Π½Π΅Π·Π΄ +rampantFixed--unitSpawnerOwnedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ макс. количСства Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… кусак Ρƒ Π³Π½Π΅Π·Π΄ +rampantFixed--unitSpawnerSpawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ количСства ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ кусак Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ Π·Π° Ρ€Π°Π· +rampantFixed--unitSpawnerRespawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ частоты ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ кусак Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ +rampantFixed--unitSpawnerHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π³Π½Π΅Π·Π΄ +rampantFixed--unitHiveHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΡƒΠ»ΡŒΠ΅Π² +rampantFixed--unitHiveHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ»ΡŒΠ΅Π² +rampantFixed--unitHiveRespawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ частоты Ρ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ· ΡƒΠ»ΡŒΠ΅Π² +# rampantFixed--suppress-surface-change-warnings=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС прСдупрСТдСния ΠΎ смСнС повСрхности +# rampantFixed--aiAggressiveness=ИИ: Π°Π³Ρ€Π΅ΡΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ИИ +rampantFixed--enableShrinkNestsAndWorms=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΡƒΡ€Π΅Π·Π°Ρ‚ΡŒ Π³Π½Ρ‘Π·Π΄Π° ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ +rampantFixed--raidAIToggle=ИИ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΉΠ΄ΠΎΠ²Ρ‹ΠΉ ИИ +rampantFixed--siegeAIToggle=ИИ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ осадный ИИ +rampantFixed--siegeMinDistance=ИИ: осада. МинимальноС количСство Ρ‡Π°Π½ΠΊΠΎΠ² ΠΎΡ‚ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π° +rampantFixed--undergroundAttack=ИИ: ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ +rampantFixed--undergroundAttackProbability=ИИ: Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ + +# rampantFixed--onslaughtAIToggle=ИИ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π°ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ ИИ +rampantFixed--acidEnemy=ΠœΠΈΡ€: T1 фракция ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹Π΅ кусаки +rampantFixed--laserEnemy=ΠœΠΈΡ€: T2 фракция Π›Π°Π·Π΅Ρ€Π½Ρ‹Π΅ кусаки +rampantFixed--electricEnemy=ΠœΠΈΡ€: T2 фракция ЭлСктричСскиС кусаки +rampantFixed--fastEnemy=ΠœΠΈΡ€: T2 фракция БыстрыС кусаки +rampantFixed--suicideEnemy=ΠœΠΈΡ€: T2 фракция КамикадзС +rampantFixed--waspEnemy=ΠœΠΈΡ€: T3 фракция ΠžΡΡ‹ +rampantFixed--spawnerEnemy=ΠœΠΈΡ€: T3 фракция ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ +rampantFixed--trollEnemy=ΠœΠΈΡ€: T3 фракция Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ кусаки +rampantFixed--energyThiefEnemy=ΠœΠΈΡ€: T3 фракция Π­Π½Π΅Ρ€Π³ΠΎΠΊΡ€Π°Π΄Ρ‹ +rampantFixed--fireEnemy=ΠœΠΈΡ€: T4 фракция ΠžΠ³Π½Π΅Π½Π½Ρ‹Π΅ кусаки +rampantFixed--ArachnidsEnemy=ΠœΠΈΡ€: T4 фракция Арахниды (рСкомСндуСтся ΠΌΠΎΠ΄ Arachnids) +rampantFixed--physicalEnemy=ΠœΠΈΡ€: T5 фракция Π‘Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ кусаки +rampantFixed--infernoEnemy=ΠœΠΈΡ€: T6 фракция АдскиС кусаки +rampantFixed--poisonEnemy=ΠœΠΈΡ€: T6 фракция Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹Π΅ кусаки +rampantFixed--nuclearEnemy=ΠœΠΈΡ€: T7 фракция Π―Π΄Π΅Ρ€Π½Ρ‹Π΅ кусаки +rampantFixed--JuggernautEnemy=ΠœΠΈΡ€: T9 фракция Π”ΠΆΠ°Π³Π³Π΅Ρ€Π½Π°ΡƒΡ‚Ρ‹ + +rampantFixed--disableCollidingProjectiles=Бнаряды: Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ снаряды кусак +rampantFixed--enableFullMapScan=Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сканированиС всСй ΠΊΠ°Ρ€Ρ‚Ρ‹ +rampantFixed--unitAndSpawnerFadeTime=ВрСмя исчСзновСния Ρ‚Ρ€ΡƒΠΏΠΎΠ² кусак, ΠΏΠ»Π΅Π²Π°ΠΊ, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ ΡƒΠ»ΡŒΠ΅Π² +rampantFixed--enableFadeTime=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ врСмя исчСзновСния Ρ‚Ρ€ΡƒΠΏΠΎΠ² +rampantFixed--settlementsProbability=ИИ: Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ отряда рассСлСния +rampantFixed--vengenceProbabilityPercent=ИИ: базовая Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ появлСния отрядов мщСния +rampantFixed--chainVengenceCoefficient=ИИ: Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ формирования ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ отрядов мщСния +rampantFixed--showAdminMenu=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ открытия мСню Π΄ΠΎΠΏ.возмоТностСй администратора + + +[mod-setting-description] +rampantFixed--allowExternalControl=Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ ΠΌΠΎΠ΄Π°ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π Π°ΠΌΠΏΠ°Π½Ρ‚Π°, Π½ΠΎ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. УстарСло. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ всСгда начиная с вСрсии 1.8.3 +rampantFixed--oldRedEnemyMapColor=Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ Π²Ρ€Π°Π³ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΊ Ρ†Π²Π΅Ρ‚Ρƒ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ³Ρ€Π΅ +rampantFixed--unitSpawnerBreath=Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΡŽΠ½ΠΈΡ‚ΠΎΠ² Π΄Ρ‹ΡˆΠ°Ρ‚ Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° Π½ΠΈΡ… Π²Π»ΠΈΡΡŽΡ‚ Π²Π΅Ρ‰ΠΈ Ρ‚ΠΈΠΏΠ° ядовитых капсул +rampantFixed--useDumbProjectiles=Атаки Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ‡Π΅Ρ€Π²Π΅ΠΉ ΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ стСнами. УстарСло, Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ +rampantFixed--useBlockableSteamAttacks=Атаки адской ΠΈ ΠΎΠ³Π½Π΅Π½Π½ΠΎΠΉ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды. РСкомСндуСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ссли Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ <ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ> с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ настройкой Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды ΠΏΠ»Π΅Π²Π°ΠΊ/Ρ‡Π΅Ρ€Π²Π΅ΠΉ". +rampantFixed--attackWaveGenerationThresholdMax=ΠžΠ±Ρ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ. НЕ влияСт Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ кусак. Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с коэффициСнтом ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ ΠΏΡ€ΠΈ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ 0,0) +rampantFixed--attackWaveGenerationThresholdMin=ΠžΠ±Ρ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ. НЕ влияСт Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ кусак. Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с коэффициСнтом ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ ΠΏΡ€ΠΈ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ 100,0) +rampantFixed--attackWaveMaxSize=Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΠ»Π½Ρ‹ Π°Ρ‚Π°ΠΊΠΈ ΠΎΡ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» config.lua Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΌΠΎΠ΄Π°. +rampantFixed--attackWaveMaxSizeEvoPercent=Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ Π½Π° 100% ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ, Ρ‚ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ +rampantFixed--agressiveStart=Π Π°Π·ΠΌΠ΅Ρ€ отряда ΠΈ частота Π°Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ 30% ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ достигнут постСпСнно, Ρ‡Π΅Ρ€Π΅Π· час ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΠ³Ρ€Ρ‹ +rampantFixed--maxNumberOfSquads=Π‘ΠΎΠ»ΡŒΡˆΠ΅ отрядов Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС UPS. +rampantFixed--maxNumberOfBuilders=Π‘ΠΎΠ»ΡŒΡˆΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС UPS. +rampantFixed--safeBuildings=Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ бСзопасноС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с Ρ„Π»Π°Π³ΠΎΠΌ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅ΠΌΠΎΡΡ‚ΠΈ, установлСнным Π² false, Ρ‡Ρ‚ΠΎ заставит ΠΈΡ… большС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½Π½Ρ‹ΠΌΠΈ. +rampantFixed--safeBuildings-curvedRail=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-straightRail=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ прямыС Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-bigElectricPole=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ большиС ΠΎΠΏΠΎΡ€Ρ‹ Π›Π­ΠŸ ΠΎΡ‚ кусак +rampantFixed--safeBuildings-railChainSignals=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ свСтофоры ΠΎΡ‚ кусак +rampantFixed--safeBuildings-railSignals=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ свСтофоры ΠΎΡ‚ кусак +rampantFixed--safeBuildings-trainStops=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ Π–Π”-станции ΠΎΡ‚ кусак +rampantFixed--permanentNocturnal=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ появлСниС Π²ΠΎΠ»Π½ Π°Ρ‚Π°ΠΊ ΠΌΠΎΠ΄Π° Rampant Π½ΠΎΡ‡ΡŒΡŽ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ с ΠΌΠΎΠ΄ΠΎΠΌ Clockwork ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄Π°ΠΌΠΈ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΡ‡ΡŒ. +rampantFixed--allowDaytimePlayerHunting=Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ кусакам ΠΎΡ…ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° всСгда +rampantFixed--allowDaytimeNonRampantActions=Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ загрязСния, засСлСниС, Π°Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° +rampantFixed--aiPointsScaler=ΠžΡ‚ 0.0 Π΄ΠΎ 100.0. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ опрСдСляСт, сколько ΠΎΡ‡ΠΊΠΎΠ² дСйствия ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ИИ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ логичСский Ρ†ΠΈΠΊΠ» для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, создания Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ… Π²ΠΎΠ»Π½. 0.3 - ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ, 0.75 - Π»Π΅Π³ΠΊΠΎ, 1.0 - срСднС, 1.25+ - тяТСло. +rampantFixed--aiDifficulty=Hard - ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Lite - для Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹: ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° дСйствия ΠΈΠ³Ρ€ΠΎΠΊΠ° слабСС, Π°Ρ‚Π°ΠΊΠΈ - Ρ€Π΅ΠΆΠ΅ +rampantFixed--addWallResistanceAcid=ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ стСны ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ 60% сопротивлСния кислотС, 75% ΠΊ яду ΠΈ 40 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΊ Π²Π·Ρ€Ρ‹Π²Ρƒ +rampantFixed--safeBuildings-lamps=ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ Π»Π°ΠΌΠΏΡ‹ ΠΎΡ‚ кусак +rampantFixed--removeBloodParticles=Π‘Ρ€Ρ‹Π·Π³ΠΈ ΠΊΡ€ΠΎΠ²ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ убийствС кусак, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ UPS. +rampantFixed--fireSafety-flamethrower=Π ΡƒΡ‡Π½Ρ‹Π΅ ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚Ρ‹ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ огонь, нанося ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ½ вмСсто этого. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт Π»Π°Π³ΠΈ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ мноТСства кусак рядом +rampantFixed--flamethrowerTurretsRebalance=Π‘Π½ΠΈΠΆΠ΅Π½Π½ΠΈΠ΅ скорости Π°Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΈ сохранСнии дпс ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠ² (Π² Ρ‚.Ρ‡. ΠΈΠ· Rampant Arsenal). Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π»Π°Π³ΠΈ ΠΎΡ‚ ΠΈΡ… использования +rampantFixed--rampantArsenalRebalance=Π£Ρ€ΠΎΠ½ ΠΎΡ‚ стикСров Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Ρ€Π΅ΠΆΠ΅, Π½ΠΎ сильнСС. Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт Π»Π°Π³ΠΈ Π² ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ ΠΈΠ³Ρ€Π΅ ΠΏΡ€ΠΈ использовании яда ΠΈ кислоты +rampantFixed--attack-warning=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сообщСниС, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΎ Π½Π°Π΄Π²ΠΈΠ³Π°ΡŽΡ‰Π΅ΠΉΡΡ Π²ΠΎΠ»Π½Π΅ Π°Ρ‚Π°ΠΊΠΈ +rampantFixed--enableSwarm=Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта collision_mask, Ρ‡Ρ‚ΠΎ позволяСт кусакам ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство столкновСний ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½ΠΎΠΉ Π²ΠΎΠ»Π½ΠΎΠΉ +rampantFixed--newEnemies=ДобавляСт Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ распространСны ΠΏΠΎ ΠΌΠΈΡ€Ρƒ. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠžΠ—Π£. По 1 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ Π½Π° кусак, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ 5 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈΡ… развития это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠžΠ—Π£ Π½Π° 2 Π“Π‘. По 20 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ 10 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ развития - Π΄ΠΎ 9 Π“Π‘ потрСблСния ΠžΠ—Π£. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ случайности ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ кусак, Ρ‡Π΅Ρ€Π²Π΅ΠΉ ΠΈ Π³Π½Ρ‘Π·Π΄. +rampantFixed--allowOtherEnemies=Волько Π² Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Rampant Fixed. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ <Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ²> ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ, оставляя мСсто для Π²Ρ€Π°Π³ΠΎΠ² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ². +rampantFixed--newEnemiesSide=Волько Π² Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Rampant Fixed. НовыС Π²Ρ€Π°Π³ΠΈ Ρ€Π°ΠΌΠΏΠ°Π½Ρ‚Π° появятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ сторонС, Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° настройка <Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Π²Ρ€Π°Π³ΠΎΠ²> +rampantFixed--newEnemyVariations= Волько для совмСстимости со стандартным Π Π°ΠΌΠΏΠ°Π½Ρ‚ΠΎΠΌ. ВсС Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β„–1 +rampantFixed--tierStart=Π­Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Π½Π°Π±ΠΎΡ€Π° Π²Ρ€Π°Π³ΠΎΠ² для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ увСличиваСтся Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1 Π΄ΠΎ 10. +rampantFixed--tierEnd=Π­Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Π½Π°Π±ΠΎΡ€Π° Π²Ρ€Π°Π³ΠΎΠ² для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ увСличиваСтся Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1 Π΄ΠΎ 10. РСкомСндуСтся =5 для ΠΈΠ³Ρ€Ρ‹ Π±Π΅Π· ΠΌΠΎΠ΄ΠΎΠ² (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ стандартным Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ) +rampantFixed--allowLongRangeImmunity=НСкоторыС Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±ΠΈΡ‚ΡŒ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°, Ρ‡Ρ‚ΠΎ компСнсируСтся ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ΠΌ. Огонь ΠΈ кислота ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ эту Π·Π°Ρ‰ΠΈΡ‚Ρƒ. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этой настройки ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти Π²ΠΈΠ΄Ρ‹ слишком слабыми. +rampantFixed--longRangeImmunity_efficiency=100% - ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ Π΄Π°Π»ΡŒΠ½Π΅ΠΌΡƒ ΡƒΡ€ΠΎΠ½Ρƒ. 10% - ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ 90% ΡƒΡ€ΠΎΠ½Π° +rampantFixed--allowOneshotProtection=НСкоторыС Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ нСсколько ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Ρ€Π΅Ρ‚ΡŒ. Огонь ΠΈ кислота ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ эту Π·Π°Ρ‰ΠΈΡ‚Ρƒ. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этой настройки сдСлаСт ΠΎΡ€ΡƒΠΆΠΈΠ΅ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ² слишком эффСктивным +rampantFixed--oneshotProtection_efficiency=100% - ΡƒΡ€ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ (послС Ρ‡Π΅Π³ΠΎ Π΅Ρ‰Π΅ примСнится ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠ΅ сопротивлСниС). 10% - сниТСниС свСрхурона составит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 10% +ΠΊampantFixed--buildingsImmuneToElectic=Π“Π½Π΅Π·Π΄Π° ΠΈ Ρ‡Π΅Ρ€Π²ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΡƒΡ€ΠΎΠ½Π° ΠΎΡ‚ элСктричСства +rampantFixed--enableMigration=ИИ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚ всСй ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅! На стандартном ΠΌΠΈΡ€Π΅ смСрти, Ρ‡Π΅Ρ€Π΅Π· 3-4 часа Π±ΡƒΠ΄Π΅Ρ‚ осада Π±Π°Π·Ρ‹. +rampantFixed--peacefulAIToggle=ΠœΠΈΡ€Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹. Π’Π°ΠΊΠΆΠ΅ ИИ ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΌΠΈΡ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ +rampantFixed--peacePeriod=Π’ это врСмя Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ‚Π°ΠΊ, Π² Ρ‚ΠΎΠΌ числС ΠΎΡ‚ загрязнСния. ЗадаСтся Π² ΠΌΠΈΠ½ΡƒΡ‚Π°Ρ…. ЗадаСтся ΠΏΡ€ΠΈ создании ΠΊΠ°Ρ€Ρ‚Ρ‹, измСнСния ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ +rampantFixed--max-evo-dist=Π§Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ дальшС ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ (ΠΏΡ€ΠΈ нСдостаточной ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ) +# rampantFixed--liteMode=ИИ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½, Π½ΠΎ сканированиС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠ°Ρ€Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ дольшС, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ количСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹Ρ… Π°Ρ‚Π°ΠΊ, Π° Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½Ρ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅. +rampantFixed--attackWaveGenerationUsePlayerProximity=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ количСство Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½ΠΎΠ² ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ‡Π°Π½ΠΊΠ°ΠΌ с Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ кусак, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ Rampant. НЕ влияСт Π½Π° Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ Π°Ρ‚Π°ΠΊΠΈ. +rampantFixed--attackPlayerThreshold=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ сниТаСт влияниС Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠ°. +rampantFixed--unkillableLogisticRobots=Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ транспортных Π΄Ρ€ΠΎΠ½ΠΎΠ² нСвосприимчивыми ΠΊ поврСТдСниям +rampantFixed--unkillableConstructionRobots=Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Ρ€ΠΎΠ½ΠΎΠ² нСвосприимчивыми ΠΊ поврСТдСниям +rampantFixed--unitBiterHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitBiterSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitBiterDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitBiterRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitBiterHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpitterHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpitterSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpitterDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpitterRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpitterHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitDroneHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. +rampantFixed--unitDroneSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. +rampantFixed--unitDroneDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. +rampantFixed--unitDroneRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. +rampantFixed--unitDroneHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. +rampantFixed--unitWormHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitWormDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitWormRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitWormHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpawnerHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpawnerOwnedScaler=МаксимальноС количСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpawnerSpawnScaler=МаксимальноС количСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpawnerRespawnScaler=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ появлСниями Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitSpawnerHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitHiveHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΡƒΠ»ΡŒΠ΅Π² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitHiveHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ»ΡŒΠ΅Π² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +rampantFixed--unitHiveRespawnScaler=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ появлСниями Π½ΠΎΠ²Ρ‹Ρ… ΡŽΠ½ΠΈΡ‚ΠΎΠ² ΠΈΠ· ΡƒΠ»ΡŒΠ΅Π², Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… +# rampantFixed--suppress-surface-change-warnings=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС прСдупрСТдСния, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ смСнС повСрхности (ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°), сообщСния появятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ появлСнии Π² ΠΌΠΈΡ€Π΅. +# rampantFixed--aiAggressiveness=Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ часто ИИ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠΈΡ€Π½ΠΎΠ΅ состояниС. МСньшС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ заставит ΠΊΡƒΡΠ°ΡŽΡ‰ΠΈΡ… Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ агрСссивными, большС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ - Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΡ€ΠΎΠ»ΡŽΠ±ΠΈΠ²Ρ‹Π΅. Установка этого значСния Π½Π° ноль ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ИИ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΠΎΠΊΠΎΠ΅. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ 2. +rampantFixed--enableShrinkNestsAndWorms=Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈΡ† столкновСния Ρƒ Π³Π½Ρ‘Π·Π΄ ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π½Π° 50% (для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ прохоТдСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ). ΠœΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ пСрСкрытия ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈΡ† столкновСния Π±ΡƒΠ΄Π΅Ρ‚ мСньшС, Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. +rampantFixed--raidAIToggle=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΉΠ΄Ρ‹ ИИ ΠΈΠ·-Π·Π° Π΄Π°Π»ΡŒΠ½ΠΈΡ… Π³Π½Π΅Π·Π΄ +rampantFixed--siegeAIToggle=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ осадныС Π³Ρ€ΡƒΠΏΠΏΡ‹ ИИ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π½Π΅Π·Π΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ стСнами +rampantFixed--siegeMinDistance=ΠžΡΠ°Π΄Ρ‹ сСлятся Π½Π΅ Π±Π»ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ Π·Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство Ρ‡Π°Π½ΠΊΠΎΠ² ΠΎΡ‚ Π²ΠΎΠ΅Π½Π½Ρ‹Ρ… построСк +rampantFixed--undergroundAttack=НСкоторыС Π°Ρ‚Π°ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ†Π΅Π»ΠΈ ΠΏΠΎΠ΄ Π·Π΅ΠΌΠ»Π΅ΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости ΠΏΡ€ΠΎΠΉΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ. Π’ΠΈΠ΄Π½Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. МоТно ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ турСлями. Π’Π°ΠΊΠΆΠ΅, ΠΏΡ€ΠΈ обстрСлС Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΠ΅ΠΉ отряд закопаСтся. И ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π°Ρ‚Π°ΠΊΡƒ ΠΏΠΎΠ΄ Π·Π΅ΠΌΠ»Π΅ΠΉ. НС ΠΌΠΎΠΆΠ΅Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ Π½Π΅ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΡˆΠΈΡ€Π΅, Ρ‡Π΅ΠΌ 2 Ρ‡Π°Π½ΠΊΠ°, ΠΊΡ€ΠΎΠΌΠ΅ случаСв мСсти Π·Π° обстрСл Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΠ΅ΠΉ +rampantFixed--undergroundAttackProbability=Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. НС влияСт Π½Π° Π·Π°ΠΊΠ°ΠΏΡ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ обстрСлС Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΠ΅ΠΉ +# rampantFixed--onslaughtAIToggle=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ агрСссивного нападСния, ИИ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² 2 Ρ€Π°Π·Π° большС ΠΎΡ‡ΠΊΠΎΠ² дСйствия Π½Π° логичСский Ρ†ΠΈΠΊΠ» +rampantFixed--laserEnemy=Ѐракция Π»Π°Π·Π΅Ρ€Π½Ρ‹Ρ… кусак, большоС сопротивлСниС Π»Π°Π·Π΅Ρ€Ρƒ, нСбольшоС - элСктричСству, кислотС ΠΈ огню. ΠΠ½ΠΈΡ‚Ρ‹: кусаки ΠΈ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ. Π—Π°Π΄Π°Ρ‡Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρƒ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ физичСского ΡƒΡ€ΠΎΠ½Π°. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ максимального ΡƒΡ€ΠΎΠ½Π° Π·Π° Ρ€Π°Π· ~ 85% ΠΎΡ‚ макс.Π·Π΄Ρ€ΠΎΠ²ΡŒΡ +rampantFixed--waspEnemy=Ѐракция ос, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΏΠ»ΡŽΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ΅Π»ΠΊΠΈΠΌΠΈ Π΄Ρ€ΠΎΠ½Π°ΠΌΠΈ. Ѐракция ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ огонь Π½Π° Π΄Ρ€ΠΎΠ½ΠΎΠ² +rampantFixed--spawnerEnemy=Ѐракция ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡŽΠ½ΠΈΡ‚Ρ‹ - ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠ· ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΏΠ»Π΅Π²Π°ΠΊΠΈ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ яйца, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π»ΡƒΠΏΠ»ΡΡŽΡ‚ΡΡ кусаки. Π—Π°Π΄Π°Ρ‡Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ aoe ΡƒΡ€ΠΎΠ½Π° ΠΈΠ»ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚Ρ€Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ оруТия. Π˜ΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ ΡƒΡ€ΠΎΠ½Ρƒ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ° (30+). +rampantFixed--trollEnemy=Ѐракция Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… кусак, мощная рСгСнСрация, ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ огню, нСбольшоС сопротивлСниС физичСским Π°Ρ‚Π°ΠΊΠ°ΠΌ, нСбольшоС сопротивлСниС Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ максимального ΡƒΡ€ΠΎΠ½Π° Π·Π° Ρ€Π°Π· ~ 20% ΠΎΡ‚ макс.Π·Π΄Ρ€ΠΎΠ²ΡŒΡ. Π§Ρ‚ΠΎ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΈΠΌ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° слабых рСзистов ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ скорости... +rampantFixed--fastEnemy=Ѐракция быстрых кусак, большая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСдвиТСния, нСбольшоС сопротивлСниС Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅, Π˜ΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ ΡƒΡ€ΠΎΠ½Ρƒ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ° (20+). Π—Π°Π΄Π°Ρ‡Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ - ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… систСм дальнСго огня. +rampantFixed--infernoEnemy=Ѐракция адских кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΡŽΡŽΡ‚ΡΡ Π·Π°ΠΆΠΈΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ кислотой, ΡΠΆΠΈΠ³Π°ΡŽΡ‰Π΅ΠΉ всё. Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ сопротивлСниС кислотС ΠΈ огню, нСбольшая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ яду ΠΈ большая - ΠΊ Π»Π°Π·Π΅Ρ€Ρƒ. Π—Π°Π΄Π°Ρ‡Π° - Π΄ΠΎΠΉΡ‚ΠΈ ΠΈ хотя Π±Ρ‹ Ρ€Π°Π· ΠΏΠ»ΡŽΠ½ΡƒΡ‚ΡŒ. Π­Ρ‚ΠΎΠ³ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ для уничтоТСния Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈΡ… ΠΏΠΎΡ‡ΠΈΠ½ΠΈΡ‚ΡŒ +rampantFixed--nuclearEnemy=Ѐракция ядСрных кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π²Π·Ρ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ°ΠΊ атомная Π±ΠΎΠΌΠ±Π°. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. Π‘ΠΎΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊ огню ΠΈ кислотС. НС ΠΌΠ΅Π½Π΅Π΅ 5 ΡƒΠ΄Π°Ρ€ΠΎΠ² Π΄ΠΎ Π³ΠΈΠ±Π΅Π»ΠΈ, быстрый. МалоС Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅, поэтому кусаСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ большим ΠΏΡ€Π°Π·Π΄Π½ΠΈΠΊΠ°ΠΌ. +rampantFixed--electricEnemy=Ѐракция элСктричСских кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π½Π° нСбольшом расстоянии ΠΏΠΎΡ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ элСктричСством нСсколько Ρ†Π΅Π»Π΅ΠΉ Π½Π° Π»ΠΈΠ½ΠΈΠΈ ΡƒΠ΄Π°Ρ€Π°. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС элСктричСству, нСбольшоС сопротивлСниС Π»Π°Π·Π΅Ρ€Ρƒ. +rampantFixed--fireEnemy=Ѐракция ΠΎΠ³Π½Π΅Π½Π½Ρ‹Ρ… кусак ΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ, большоС сопротивлСниС кислотС, нСбольшоС - физичСскому ΡƒΡ€ΠΎΠ½Ρƒ. Π˜ΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ огню. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Π°Ρ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π»Π°Π·Π΅Ρ€Π°ΠΌ. ПлСваки Π°Ρ‚Π°ΠΊΡƒΡŽΡ‚ струСй кислотного огня, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ стСн ΠΈ ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠ² Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚. Π—Π°Π΄Π°Ρ‡Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ - Π½Π°ΠΌΠ΅ΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Π° Π±Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π»Π°Π·Π΅Ρ€Π°Ρ…, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π΄ΠΆΠ°Π³Π³Π΅Ρ€Π½Π°ΡƒΡ‚Ρ‹. +rampantFixed--ArachnidsEnemy=Π˜ΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄ ΠΏΠ°ΡƒΠΊΠΎΠ² (Ссли установлСн ΠΌΠΎΠ΄ Arachnids). Уязвимы ΠΊ физичСскому ΡƒΡ€ΠΎΠ½Ρƒ (x2). ΠŸΡ€ΠΈ смСрти ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ яйца, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· 5 сСкунд вылупится новая кусака. Π―ΠΉΡ†Π° уязвимы ΠΊ физичСскому ΡƒΡ€ΠΎΠ½Ρƒ. Π—Π°Π΄Π°Ρ‡Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ - Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ‚Ρ€ΠΎΠ½Ρ‹. +rampantFixed--suicideEnemy=Ѐракция кусак-самоубийц, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π²Π·Ρ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ Π°Ρ‚Π°ΠΊΠ΅. НСбольшоС сопротивлСниС яду, большоС - ΠΊ огню. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. БыстрыС, ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ дальним Π°Ρ‚Π°ΠΊΠ°ΠΌ (18+). ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎΠ΅ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅. НС Π²Ρ€Π΅Π΄ΠΈΡ‚ союзникам. +rampantFixed--physicalEnemy=Ѐракция Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС физичСским Π°Ρ‚Π°ΠΊΠ°ΠΌ ΠΈ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅, нСбольшоС - ΠΊ огню ΠΈ кислотС. НС ΠΌΠ΅Π½Π΅Π΅ 2 ΡƒΠ΄Π°Ρ€ΠΎΠ² Π΄ΠΎ Π³ΠΈΠ±Π΅Π»ΠΈ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π»Π°Π·Π΅Ρ€Ρƒ. Если ΠΊ ΠΈΡ… ΠΏΡ€ΠΈΡ…ΠΎΠ΄Ρƒ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ физичСский ΡƒΡ€ΠΎΠ½, Ρ‚ΠΎ ΠΏΠ°Ρ‚Ρ€ΠΎΠ½ΠΎΠ² скоро Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. +rampantFixed--acidEnemy=Ѐракция кислотных кусак, ΠΈΠΌΠΌΡƒΠ½ΠΈΡ‚Π΅Ρ‚ ΠΊ кислотС ΠΈ яду. +rampantFixed--energyThiefEnemy=Ѐракция кусак-энСргокрадов, большоС сопротивлСниС элСктричСству ΠΈ Π»Π°Π·Π΅Ρ€Ρƒ, нСбольшоС сопротивлСниС Π²Π·Ρ€Ρ‹Π²Ρƒ. Π Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ структуры, создавая ΡΠ½Π΅Ρ€Π³ΠΎΠΏΠΎΠ³Π»ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ кристаллы. Из-Π·Π° Π½ΠΈΡ…, ΠΎΡΡ‚Π°Π²ΡˆΠΈΡΡŒ Π±Π΅Π· энСргии, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ +rampantFixed--poisonEnemy=Ѐракция ядовитых кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки. ΠŸΡ€ΠΈ смСрти создаёт ΠΎΠ±Π»Π°ΠΊΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π»Π΅Ρ‡ΠΈΡ‚ кусак ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠ°. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС яду, нСбольшоС сопротивлСниС ΠΊ огню. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π»Π°Π·Π΅Ρ€Ρƒ. +rampantFixed--JuggernautEnemy=Волько кусаки. Облако "Ρ†Π΅Π»Π΅Π±Π½ΠΎΠ³ΠΎ" яда ΠΏΡ€ΠΈ смСрти ΠΈ Π°Ρ‚Π°ΠΊΠ΅. Π’Π°Π½ΠΊ, способный Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ линию ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ·Π°Π±Ρ‹Π»ΠΈ ΠΎΡΠ½Π°ΡΡ‚ΠΈΡ‚ΡŒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ°Ρ‚Ρ€ΠΎΠ½ΠΎΠ², кислоты ΠΈ ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠ². Π’Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ° ΠΈ яд Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠ»ΠΎΡ…ΠΎ. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ бСзопасны для пСрсонаТа ΠΈΠ·-Π·Π° ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Π½ΠΎΠΉ скорости. +rampantFixed--disableCollidingProjectiles=Бнаряды (ΠΏΠ»Π΅Π²ΠΊΠΈ) кусак Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ кусаками, чСрвями ΠΈΠ»ΠΈ Π³Π½Ρ‘Π·Π΄Π°ΠΌΠΈ. Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ с Π½ΠΈΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ. +rampantFixed--enableFullMapScan=Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ заставляСт ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ³Ρ€Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сущностСй, созданных ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ систСмы событий factorio. (Если Π² ΠΌΠΎΠ΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ script_raised_built ΠΈΠ»ΠΈ script_raised_destroyed, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Rampant Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Π΅ ΠΈΠ³Ρ€Ρ‹). +rampantFixed--unitAndSpawnerFadeTime=ВрСмя Π² сСкундах, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€ΡƒΠΏΡ‹ кусак Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ +rampantFixed--enableFadeTime=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ врСмя исчСзновСния для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ увСличСния кусак, ΠΏΠ»Π΅Π²Π°ΠΊ, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ ΡƒΠ»ΡŒΠ΅Π². Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, врСмя сущСствования Ρ‚Ρ€ΡƒΠΏΠΎΠ² Π½Π΅ измСнится. +rampantFixed--settlementsProbability=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = 0.4 (40% рассСлСниС, 60% Π°Ρ‚Π°ΠΊΠ°). НС влияСт Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ рассСлСниС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° отряды Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… осады/ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ +rampantFixed--vengenceProbabilityPercent=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = 0.04. Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ формирования отрядов возмСздия послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ смСрти кусак +rampantFixed--chainVengenceCoefficient=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = 0.6. Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ отряда возмСздия умноТаСтся Π½Π° этот коэффициСнт. НовыС агрСссивныС дСйствия ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎ исходной. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ постСпСнно. ВлияниС Π²Π΄Π²ΠΎΠ΅ слабСС ΠΏΡ€ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΊΠ΅ ΠΎΡ‡ΠΊΠΎΠ² дСйствий Ρƒ ИИ +rampantFixed--showAdminMenu=Волько одиночная ΠΈΠ³Ρ€Π° ΠΈΠ»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ-администратор. ДобавляСт Π² Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Ρ‡Π°ΡΡ‚ΡŒ экрана ΠΊΠ½ΠΎΠΏΠΊΡƒ. Π•Ρ‘ мСню позволяСт Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ€Π°Π³ΠΎΠ² Π½Π° стандартных, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ повСрхности/ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ + +[description] +rampantFixed--EnemySettings1_1_9=Rampant Fixed: с вСрсии 1.1.9 доступно смСшанноС рассСлСниС Π²Ρ€Π°Π³ΠΎΠ² Ρ€Π°ΠΌΠΏΠ°Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… (смотритС настройки запуска). Волько Π² Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Π΅ +rampantFixed--EnemySettings1_1_10=Rampant Fixed: с вСрсии 1.1.10 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π·Π°ΠΌΠ΅Π½Π° Π³Π½Π΅Π·Π΄ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ² Π½Π° стандартныС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π±Π΅Π· Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π³Π½Π΅Π·Π΄ (настройки ΠΈΠ³Ρ€ΠΎΠΊΠ°-"ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ²"). Волько Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Π΅ ΠΈΠ»ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² с ΠΏΡ€Π°Π²Π°ΠΌΠΈ администратора +rampantFixed--disableNewEnemies_text=Π“Π½Π΅Π·Π΄Π° Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° всСх ΠΏΠ»Π°Π½Π΅Ρ‚Π°Ρ…. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ нСльзя +rampantFixed--msg-ask-disableNewEnemies=Π—Π°ΠΌΠ΅Π½Π° Π³Π½Π΅Π·Π΄ Π²Ρ€Π°Π³ΠΎΠ² Π Π°ΠΌΠΏΠ°Π½Ρ‚Π° Π½Π° стандартных. ΠœΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ врСмя Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ€Ρ‚Π°Ρ…. ΠΠ°Ρ‡Π°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρƒ? +rampantFixed--button_disableNewEnemies_disable=Π”Π° (ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя) +rampantFixed--button_disableNewEnemies_cancel=ΠžΡ‚ΠΌΠ΅Π½Π° +rampantFixed--msg_replaceNewEnemiesNests=Π—Π°ΠΌΠ΅Π½Π° Π³Π½Π΅Π·Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π³Π½Π΅Π·Π΄: __1__ . ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π±Π΅Π· послСдствий. +rampantFixed--K2_SE_CMO_incompatibilityWarning=ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ сочСтаниС ΠΌΠΎΠ΄ΠΎΠ² К2+SE+ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ. Π’ этом сочСтании, настройки ΠΌΠΎΠ΄Π° <ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ>: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды ΠΏΠ»Π΅Π²Π°ΠΊ/Ρ‡Π΅Ρ€Π²Π΅ΠΉ "[font=heading-1][color=red]Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π°Ρ‚Π°ΠΊΠΈ [/color][/font] ΠΎΠ³Π½Π΅Π½Π½Ρ‹Ρ… ΠΈ ΠΈΠ½Ρ„Π΅Ρ€Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ. Если ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π°Ρ‚Π°ΠΊΡƒ (настройка Rampant Fixed: Бнаряды: Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ струйныС Π°Ρ‚Π°ΠΊΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды) +rampantFixed--undergroundAttackWarning=ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: кусаки Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½Ρ‹ΠΌ Π°Ρ‚Π°ΠΊΠ°ΠΌ! +rampantFixed--firstUndergroundAttackWarning=ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° пСрвая подзСмная Π°Ρ‚Π°ΠΊΠ° (ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Π°ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ Π±Π΅Π· прСдупрСТдСния) +rampantFixed--JuggernautAlert=Rampant Fixed: Π’ΠΠ˜ΠœΠΠΠ˜Π•! Π‘ 82% Π­Π’ΠžΠ›ΠЦИИ Π’ΠžΠ—ΠœΠžΠ–ΠΠž ΠŸΠžΠ―Π’Π›Π•ΠΠ˜Π• ЀРАКЦИИ Π”Π–ΠΠ“Π“Π•Π ΠΠΠ£Π’ΠžΠ’! Они ΠΊΡ€Π°ΠΉΠ½Π΅ устойчивы ΠΊ огню ΠΈ физичСскому ΡƒΡ€ΠΎΠ½Ρƒ +rampantFixed--NEW_ENEMIES_SIDE_ignored=Rampant Fixed: ИзмСнилась настройка располоТСния Π²Ρ€Π°Π³ΠΎΠ². Π•Ρ‘ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ +rampantFixed--AdminMenu=Π Π°ΠΌΠΏΠ°Π½Ρ‚ фиксСд. МСню администратора +rampantFixed--showDisableNewEnemies=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ€Π°Π³ΠΎΠ² Π Π°ΠΌΠΏΠ°Π½Ρ‚Π° +rampantFixed--surfaceIteraction_frame=Настройка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ повСрхностСй +rampantFixed--surfaceName_Title=Имя повСрхности +rampantFixed--surfaceIgnored_Title=ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° +rampantFixed--surfaceIgnored_True=Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ +rampantFixed--surfaceIgnored_False=ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ diff --git a/Rampant_3.1.2/prototypes/EnergyThief.lua b/RampantFixed/prototypes/EnergyThief.lua similarity index 83% rename from Rampant_3.1.2/prototypes/EnergyThief.lua rename to RampantFixed/prototypes/EnergyThief.lua index 86ff7832..1cd1000a 100644 --- a/Rampant_3.1.2/prototypes/EnergyThief.lua +++ b/RampantFixed/prototypes/EnergyThief.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -- imports @@ -41,7 +25,7 @@ function energyThief.addFactionAddon() minable = {mining_time = 1, result = "drain-trigger-rampant"}, max_health = 100, selectable_in_game = false, - corpse = nil, + corpse = "small-remnants", collision_box = {{-0.35, -0.35}, {0.35, 0.35}}, selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, picture = @@ -57,7 +41,7 @@ function energyThief.addFactionAddon() { type = "item", name = "drain-trigger-rampant", - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", icon_size = 32, icon_mipmaps = 1, flags = {"hidden"}, @@ -70,7 +54,7 @@ function energyThief.addFactionAddon() { type = "item", name = "crystal-drain-pole-rampant", - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", icon_size = 32, icon_mipmaps = 1, flags = {"hidden"}, @@ -83,7 +67,7 @@ function energyThief.addFactionAddon() { type = "electric-pole", name = "crystal-drain-pole-rampant", - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", icon_size = 32, icon_mipmaps = 1, flags = {"hidden"}, @@ -91,7 +75,7 @@ function energyThief.addFactionAddon() minable = {hardness = 0.2, mining_time = 0.5, result = "big-electric-pole"}, max_health = 750, healing_per_tick = 0.02, - corpse = nil, + corpse = "medium-remnants", resistances = { { @@ -119,7 +103,7 @@ function energyThief.addFactionAddon() vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, pictures = { - filename = "__Rampant__/graphics/entities/thief/crystal-drain-pole.png", + filename = "__RampantFixed__/graphics/entities/thief/crystal-drain-pole.png", priority = "high", width = 168, height = 130, @@ -197,28 +181,25 @@ function energyThief.addFactionAddon() local chest = util.table.deepcopy(data.raw["radar"]["radar"]) chest.name = "pylon-target-rampant" - chest.icon = "__Rampant__/graphics/icons/thief/crystal-drain.png" + chest.icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png" chest.icon_size = 32 - chest.corpse = nil chest.icon_mipmaps = 1 chest.flags = {"not-repairable", "not-on-map", "hidden"} chest.subgroup = "enemies" chest.next_upgrade = nil chest.backer_name = false - chest.rotation_speed = 0 - data.raw["simple-entity-with-force"]["drain-trigger-rampant"].dying_explosion = chest.dying_explosion chest.pictures = { layers={ { - filename = "__Rampant__/graphics/entities/thief/crystal-drain-pole.png", - priority = "high", - width = 168, - height = 130, - direction_count = 4, - shift = {1.6, -1.4} + filename = "__core__/graphics/empty.png", + priority = "low", + width = 1, + height = 1, + direction_count = 1, + line_length = 1, + shift = {0, 0} } - } - } + }} chest.max_health = 750 chest.resistances = { @@ -259,7 +240,7 @@ function energyThief.addFactionAddon() { type = "item", name = "pylon-target-rampant", - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", icon_size = 32, icon_mipmaps = 1, flags = {"hidden"}, diff --git a/RampantFixed/prototypes/Poison.lua b/RampantFixed/prototypes/Poison.lua new file mode 100644 index 00000000..32895c98 --- /dev/null +++ b/RampantFixed/prototypes/Poison.lua @@ -0,0 +1,228 @@ +-- imports + +local smokeUtils = require("utils/SmokeUtils") + +-- constants + +local poison = {} + +-- imported functions + +local makeCloud = smokeUtils.makeCloud + +function poison.addFactionAddon(deathCloudNumeric) + + for i=1,10 do + local cooldown = 20 + local damage = (cooldown/60)*deathCloudNumeric["dps"][i] -- ["dps"] = {12, 24, 36, 48, 60, 72, 84, 96, 108, 120 } if maxlvl=10 (at 2021.12) + local healing = -1*(cooldown/60)*deathCloudNumeric["hps"][i] -- ["hps"] = {24, 48, 72, 96, 120, 144, 168, 192, 216, 240} + makeCloud( + { + name = "poison-cloud-v" .. i, + scale = 0.80 + (i * 0.15), + wind = false, --true, + slowdown = -1.3, + duration = deathCloudNumeric["duration"][i], --10 * (i * 5), + cooldown = cooldown --5 + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "nested-result", + action = + { + { + type = "area", + radius = deathCloudNumeric["radius"][i], --2 + (i * 0.5), + force = "ally", + entity_flags = {"placeable-enemy"}, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = healing -- -2 * i + , type = "healing"} + } + } + }, + { + type = "area", + radius = deathCloudNumeric["radius"][i], --2 + (i * 0.5), + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = damage --0.9 * i + , type = "poison"} + } + } + } + } + } + } + } + ) + end + +end + +function poison.createAttackPoisonClouds(poisonAttacksNumeric) + local attackCooldown = 20 + for i=1,10 do + + makeCloud( + { + name = "poison-cloud-Dmg-Heal"..i, + -- scale = 1, + tint = { r = 0.2, g = 0.8, b = 0.5, a = 0.05}, + render_layer = "floor", + wind = true, + slowdown = -1.3, + duration = 120, + cooldown = attackCooldown + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "nested-result", + action = + { + { + type = "area", + radius = poisonAttacksNumeric["radius"][i], + force = "ally", + entity_flags = {"placeable-enemy"}, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = -1*(attackCooldown/60)*poisonAttacksNumeric["hps"][i], type = "healing"} + } + } + }, + { + type = "area", + radius = poisonAttacksNumeric["radius"][i], + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + show_in_tooltip = true, + damage = {amount = (attackCooldown/60)*poisonAttacksNumeric["dps"][i], type = "poison"} + } + } + } + } + } + } + } + ) + end +end + +function poison.createFireClouds(fireCloudNumeric) + local attackCooldown = 12 + for i=1,10 do + + makeCloud( + { + name = "fire-cloud-Dmg"..i, + scale = fireCloudNumeric["radius"][i]*0.5, + tint = { r = 0.8, g = 0.5, b = 0.2, a = 0.05}, + wind = false, + slowdown = -1.3, + duration = 600, + cooldown = attackCooldown + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "nested-result", + action = + { + { + type = "area", + radius = fireCloudNumeric["radius"][i], + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + show_in_tooltip = true, + damage = {amount = (attackCooldown/60)*fireCloudNumeric["dps"][i], type = "fire"} + } + } + } + } + } + } + } + ) + end +end + +-- ----------------------- +-- function poison.createPoisonProjectile() + -- { + -- type = "projectile", + -- name = "poison-Projectile", + -- flags = {"not-on-map"}, + -- acceleration = 0.005, + -- action = + -- { + -- { + -- type = "direct", + -- action_delivery = + -- { + -- type = "instant", + -- target_effects = + -- { + -- { + -- type = "create-smoke", + -- show_in_tooltip = true, + -- entity_name = "poison-cloud", + -- initial_height = 0 + -- }, + -- { + -- type = "create-particle", + -- particle_name = "poison-capsule-metal-particle", + -- repeat_count = 8, + -- initial_height = 1, + -- initial_vertical_speed = 0.1, + -- initial_vertical_speed_deviation = 0.05, + -- offset_deviation = {{-0.1, -0.1}, {0.1, 0.1}}, + -- speed_from_center = 0.05, + -- speed_from_center_deviation = 0.01 + -- } + -- } + -- } + -- } + -- }, +-- end + ------------------------ + +return poison diff --git a/RampantFixed/prototypes/SwarmUtils.lua b/RampantFixed/prototypes/SwarmUtils.lua new file mode 100644 index 00000000..2927ce3f --- /dev/null +++ b/RampantFixed/prototypes/SwarmUtils.lua @@ -0,0 +1,1910 @@ +local swarmUtils = {} +-- imports + +local bombUtils = require("utils/BombUtils") +local attackFlame = require("utils/AttackFlame") +local energyThiefFaction = require("EnergyThief") +local poisonFaction = require("Poison") +local beamUtils = require("utils/BeamUtils") +local acidBall = require("utils/AttackBall") +local droneUtils = require("utils/DroneUtils") +local biterUtils = require("utils/BiterUtils") +local particleUtils = require("utils/ParticleUtils") +local stickerUtils = require("utils/StickerUtils") +local unitUtils = require("utils/UnitUtils") +local fireUtils = require("utils/FireUtils") +local spawnUtils = require("utils/SpawnUtils") + +local constants = require("__RampantFixed__/libs/Constants") +local mathUtils = require("__RampantFixed__/libs/MathUtils") + +-- imported functions + +local roundToNearest = mathUtils.roundToNearest + +local mMax = math.max +local mMin = math.min + +local deepcopy = util.table.deepcopy + +local TIER_UPGRADE_SET_10 = constants.TIER_UPGRADE_SET_10 +-- + !ΠšΠ”Π 2021.11 +local TIER_UPGRADE_SET_10_AS_IS = constants.TIER_UPGRADE_SET_10_AS_IS +local OVERDAMAGEPROTECTION_THRESHOLD = constants.OVERDAMAGEPROTECTION_THRESHOLD +local calculateValuesForLevels = mathUtils.calculateValuesForLevels +local addTrigger_effect = biterUtils.addTrigger_effect + +local blockableStreams = false +blockableStreams = settings.startup["rampantFixed--useBlockableSteamAttacks"].value +-- if mods["combat-mechanics-overhaul"] and mods["Krastorio2"] and mods["space-exploration"] then + -- log(serpent.dump(settings)) + -- if settings.startup["combat-mechanics-overhaul-spitter-spit-blockable"].value or settings.startup["combat-mechanics-overhaul--worm-spit-blockable"].value then + -- blockableStreams = true + -- end +-- end + +local function recalculateTableForEffectiveLevel(attributeTable, tierSet, precision, specPrecisionTable, ignoredAttributes) + if not precision then precision = 4 end + for i,tierValues in pairs(attributeTable) do + if ignoredAttributes and ignoredAttributes[i] then + else + local specPrecision + if specPrecisionTable then + specPrecision = specPrecisionTable[i] + end + attributeTable[i] = calculateValuesForLevels(tierValues, tierSet, (specPrecision or precision)) + end + end +end +-- - !ΠšΠ”Π 2021.11 + +local biterattackanimation = unitUtils.biterattackanimation + +local createProjectileAttack = biterUtils.createProjectileAttack +local createCapsuleProjectile = droneUtils.createCapsuleProjectile +local makeSticker = stickerUtils.makeSticker +local makeAtomicBlast = bombUtils.makeAtomicBlast +local makeLaser = beamUtils.makeLaser +local createAttackBall = acidBall.createAttackBall +local createSpitFire = acidBall.createSpitFire +local createRangedAttack = biterUtils.createRangedAttack +local createMeleeAttack = biterUtils.createMeleeAttack +local makeMeleePoisonCloud = biterUtils.makeMeleePoisonCloud +local makeflamerAtack = biterUtils.makeflamerAtack +local createSpawnAttack = biterUtils.createSpawnAttack +local createSpawnBall = spawnUtils.createSpawnBall + + +local makeAcidSplashFire = fireUtils.makeAcidSplashFire + +local makeWormAlienLootTable = biterUtils.makeWormAlienLootTable +local makeUnitAlienLootTable = biterUtils.makeUnitAlienLootTable +local makeSpawnerAlienLootTable = biterUtils.makeSpawnerAlienLootTable +local makeSchallAlienLootTables = biterUtils.makeSchallAlienLootTables +local makeAlienLootEconomyTables = biterUtils.makeAlienLootEconomyTables + +local createSuicideAttack = biterUtils.createSuicideAttack + +local createAttackFlame = attackFlame.createAttackFlame +local createStreamAttack = biterUtils.createStreamAttack + +local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG + +local makeBloodFountains = particleUtils.makeBloodFountains + +local makeBubble = beamUtils.makeBubble +local makeBeam = beamUtils.makeBeam +local createElectricAttack = biterUtils.createElectricAttack + +local makeBiter = biterUtils.makeBiter +local makeDrone = droneUtils.makeDrone +local makeSpitter = biterUtils.makeSpitter +local makeWorm = biterUtils.makeWorm +local makeUnitSpawner = biterUtils.makeUnitSpawner + +-- module code + +local scorchmarkTiers = { + "small-scorchmark", + "small-scorchmark", + "medium-scorchmark", + "medium-scorchmark", + "medium-scorchmark", + "big-scorchmark", + "big-scorchmark", + "big-scorchmark", + "huge-scorchmark", + "huge-scorchmark" +} + +local explosionTiers = { + "explosion", + "explosion", + "big-explosion", + "big-explosion", + "big-explosion", + "big-explosion", + "massive-explosion", + "massive-explosion", + "massive-explosion", + "massive-explosion" +} + +local bloodFountains = { + "blood-explosion-small-rampant", + "blood-explosion-small-rampant", + "blood-explosion-small-rampant", + "blood-explosion-small-rampant", + "blood-explosion-big-rampant", + "blood-explosion-big-rampant", + "blood-explosion-big-rampant", + "blood-explosion-huge-rampant", + "blood-explosion-huge-rampant", + "blood-explosion-huge-rampant", +} + + +local nuclearAttackNumeric = { + ["damage"] = { 75, 100, 150, 187, 270, 360, 500, 550, 600, 650 }, -- instant dmg to target + ["repeatCount"] = { 150, 175, 250, 300, 350, 400, 450, 500, 550, 600 }, + ["radius"] = { 10, 13, 14, 15, 17, 18, 19, 20, 21, 22 }, + ["explosionDistance"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, + ["explosionCount"] = { 3, 3, 3, 4, 4, 4, 5, 5, 6, 6 } +} +--recalculateTableForEffectiveLevel(nuclearAttackNumeric,TIER_UPGRADE_SET_10_AS_IS, 0) -- + !ΠšΠ”Π 2021.11 +nuclearAttackNumeric["damage"] = calculateValuesForLevels(nuclearAttackNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 0) +nuclearAttackNumeric["radius"] = calculateValuesForLevels(nuclearAttackNumeric["radius"], TIER_UPGRADE_SET_10_AS_IS, 0) +nuclearAttackNumeric["repeatCount"] = calculateValuesForLevels(nuclearAttackNumeric["repeatCount"], TIER_UPGRADE_SET_10_AS_IS, 0) + + +local bombAttackNumeric = { + ["damage"] = { 75, 112, 150, 187, 270, 360, 600, 720, 975, 1050 }, + ["radius"] = { 1.75, 1.75, 2, 2.5, 3, 3, 3.5, 3.5, 3.75, 4 }, + ["explosionDistance"] = { 2, 2, 2, 2, 2, 2.5, 2.5, 2.5, 3, 3 }, + ["explosionCount"] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } +} +bombAttackNumeric["damage"] = calculateValuesForLevels(bombAttackNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 1) + +local streamAttackNumeric = { + ["stickerDamagePerTick"] = { 0.6, 0.8, 1, 1.5, 2, 2.5, 3, 4, 5, 6 }, + ["particleTimeout"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, + ["fireSpreadRadius"] = { 0.75, 0.75, 0.77, 0.77, 0.79, 0.79, 0.83, 0.83, 0.85, 0.85 }, + ["damageMaxMultipler"] = { 6, 6, 7, 7, 7, 7, 8, 8, 8, 9 }, + ["stickerMovementModifier"] = { 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1 }, + ["fireSpreadCooldown"] = { 30, 30, 29, 29, 28, 28, 27, 27, 25, 25 }, + ["stickerDuration"] = { 800, 800, 900, 900, 1000, 1000, 1100, 1100, 1200, 1200 }, + ["damage"] = { 3, 3, 4, 4, 5, 5, 5, 5, 5, 6 } -- used as steam dmg per tick if default steam attack builded. As direct hit damage if alternative atack builded + ,["fireDamagePerTick"] = {1, 1.2, 1.5, 2, 3, 4, 5, 6, 7, 8 } -- used as fire dmg per tick when alternative atack builded (fire/inferno spitters) +} +recalculateTableForEffectiveLevel(streamAttackNumeric,TIER_UPGRADE_SET_10_AS_IS, 1, {particleTimeout = 0, fireSpreadCooldown = 0, stickerDuration = 0, fireDamagePerTick = 2}) -- + !ΠšΠ”Π 2021.11 +--log("streamAttackNumeric="..serpent.dump(streamAttackNumeric.fireDamagePerTick)) + +local lowDamageStreamAttackNumeric = { + ["stickerDamagePerTick"] = { 0.6, 0.6, 0.8, 0.8, 0.8, 0.9, 1, 1, 1.3, 1.5 }, + ["particleTimeout"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, + ["fireSpreadRadius"] = { 0.75, 0.75, 0.77, 0.77, 0.79, 0.79, 0.83, 0.83, 0.85, 0.85 }, + ["damageMaxMultipler"] = { 6, 6, 7, 7, 7, 7, 8, 8, 8, 9 }, + ["stickerMovementModifier"] = { 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1 }, + ["fireSpreadCooldown"] = { 30, 30, 29, 29, 28, 28, 27, 27, 25, 25 }, + ["stickerDuration"] = { 800, 800, 900, 900, 1000, 1000, 1100, 1100, 1200, 1200 }, + ["damage"] = { 0.5, 0.7, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5 } -- used as steam dmg per tick if default steam attack builded. As direct hit damage if alternative atack builded + ,["fireDamagePerTick"] = {0.8, 0.9, 1, 1.5, 2, 3, 4, 5, 6, 7 } -- used as fire dmg per tick when alternative atack builded (fire/inferno spitters) +} +recalculateTableForEffectiveLevel(lowDamageStreamAttackNumeric,TIER_UPGRADE_SET_10_AS_IS, 1, {particleTimeout = 0, fireSpreadCooldown = 0, stickerDuration = 0, fireDamagePerTick = 2}) + + + +local beamAttackNumeric = { + ["range"] = { 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }, + ["damage"] = { 3.6, 6, 9, 12, 18, 27, 36, 45, 54, 90 }, + ["duration"] = { 20, 20, 21, 21, 22, 22, 23, 23, 24, 24 }, + ["damageInterval"] = { 20, 20, 21, 21, 22, 22, 23, 23, 24, 24 }, + ["width"] = { 1.5, 1.5, 1.6, 1.6, 1.7, 1.7, 1.8, 1.8, 1.9, 1.9 } +} +-- + !ΠšΠ”Π 2021.11 +beamAttackNumeric["damage"] = calculateValuesForLevels(beamAttackNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 1) +beamAttackNumeric["duration"] = calculateValuesForLevels(beamAttackNumeric["duration"], TIER_UPGRADE_SET_10_AS_IS, 1) +--beamAttackNumeric["damageInterval"] = calculateValuesForLevels(beamAttackNumeric["damageInterval"], TIER_UPGRADE_SET_10_AS_IS, 0) +-- - !ΠšΠ”Π 2021.11 + + +local clusterAttackNumeric = { + ["clusterDistance"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, + ["clusters"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, + ["startingSpeed"] = { 0.25, 0.25, 0.27, 0.27, 0.29, 0.29, 0.31, 0.31, 0.33, 0.33 } +} +--recalculateTableForEffectiveLevel(clusterAttackNumeric,TIER_UPGRADE_SET_10_AS_IS, 0, {startingSpeed = 2}) -- + !ΠšΠ”Π 2021.11 + +local biterAttributeNumeric = { + ["range"] = { 0.5, 0.5, 0.75, 0.75, 1.0, 1.0, 1.25, 1.50, 1.75, 2.0 }, + ["radius"] = { 0.5, 0.65, 0.75, 0.85, 0.95, 1.1, 1.2, 1.3, 1.4, 1.5 }, + ["cooldown"] = { 40, 41, 42, 44, 46, 48, 50, 52, 55, 57 }, + ["damage"] = {7, 20, 35, 60, 115, 145, 175, 205.0, 235.0, 265.0 }, -- + !ΠšΠ”Π 2021.11 defs{7, 15, 30, 90} { 16, 35, 65, 85, 115, 145, 175, 205.0, 235.0, 265.0 } + ["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 }, + ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, + ["physicalDecrease"] = { 0, 2, 4, 5, 6, 8, 11, 13, 16, 17 }, -- + !ΠšΠ”Π 2021.11 { 0, 0, 4, 5, 6, 8, 11, 13, 16, 17 } + ["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 16, 18, 20 }, + ["explosionDecrease"] = { 0, 0, 0, 0, 0, 10, 12, 14, 16, 20 }, + ["explosionPercent"] = { 0, 0, 0, 10, 12, 13, 15, 16, 17, 20 }, + -- ["distancePerFrame"] = { 0.1, 0.125, 0.15, 0.19, 0.195, 0.2, 0.2, 0.2, 0.2, 0.2 }, + ["distancePerFrame"] = { 0.08, 0.10, 0.125, 0.15, 0.18, 0.195, 0.2, 0.2, 0.2, 0.2 }, + ["movement"] = { 0.2, 0.2, 0.21, 0.21, 0.22, 0.22, 0.22, 0.22, 0.22, 0.20 }, -- + !ΠšΠ”Π ΠšΠ”Π 2021.11 { 0.2, 0.19, 0.185, 0.18, 0.175, 0.17, 0.17, 0.17, 0.17, 0.17 } + ["health"] = { 15, 75, 150, 250, 1000, 2000, 3500, 7500, 15000, 30000 }, + ["pollutionToAttack"] = {8, 20, 30, 50, 140, 200, 260, 320, 400, 500 }, -- + !ΠšΠ”Π defs {4, 20, 80, 400} { 10, 40, 80, 120, 200, 300, 450, 550, 650, 750 } + ["spawningTimeModifer"] = { 1, 1, 1, 2, 3, 7, 10, 10, 12, 12 } +} +-- + !ΠšΠ”Π 2021.11 +recalculateTableForEffectiveLevel(biterAttributeNumeric,TIER_UPGRADE_SET_10_AS_IS, + 2, + {cooldown = 0, spawningTimeModifer = 0, health = 0}, + {physicalPercent = "", explosionPercent = "", movement = "", distancePerFrame = ""} + ) + +-- + !ΠšΠ”Π 2021.12 +local poisonAttacksNumeric = { + ["dps"] = {7, 20, 35, 60, 115, 145, 175, 205.0, 235.0, 265.0 }, + ["hps"] = {7, 20, 35, 60, 115, 145, 175, 205.0, 235.0, 265.0 }, + ["radius"] = {2, 2.3, 2.6, 3, 3.2, 3.6, 4, 4.2, 4.4, 4.6 } +} +poisonAttacksNumeric["dps"] = calculateValuesForLevels(poisonAttacksNumeric["dps"], TIER_UPGRADE_SET_10_AS_IS, 2) +poisonAttacksNumeric["hps"] = calculateValuesForLevels(poisonAttacksNumeric["hps"], TIER_UPGRADE_SET_10_AS_IS, 2) +-- - !ΠšΠ”Π 2021.12 + +local acidPuddleAttributeNumeric = { + ["damagePerTick"] = { 0.05, 0.1, 0.3, 0.6, 1, 1.4, 2, 3, 4.5, 6 }, + ["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 }, + ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 } +} +recalculateTableForEffectiveLevel(acidPuddleAttributeNumeric,TIER_UPGRADE_SET_10_AS_IS, 2, nil, {stickerDuration = ""}) -- + !ΠšΠ”Π 2021.11 + +local spitterAttributeNumeric = { + ["range"] = { 11, 11, 11, 12, 12, 12, 13, 13, 14, 14 }, + ["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 }, + ["cooldown"] = { 100, 100, 97, 97, 95, 95, 93, 93, 90, 90 }, + ["warmup"] = { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21 }, + ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 }, + ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, + ["stickerDamagePerTick"] = { 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25 }, + ["stickerMovementModifier"] = { 0.97, 0.96, 0.95, 0.94, 0.93, 0.92, 0.91, 0.90, 0.89, 0.88 }, + ["damage"] = { 4, 7.5, 11.25, 15, 22.5, 27.5, 32.5, 37.5, 42.5, 47.5 }, + ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, + ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, + ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, + ["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 }, + ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, + ["physicalDecrease"] = { 0, 0, 0, 0, 2, 4, 6, 8, 10, 12 }, + ["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 14, 15, 15 }, + ["explosionPercent"] = { 0, 0, 10, 10, 20, 20, 30, 30, 40, 40 }, + ["distancePerFrame"] = { 0.04, 0.045, 0.050, 0.055, 0.060, 0.065, 0.067, 0.069, 0.071, 0.073 }, + ["movement"] = { 0.185, 0.185, 0.19, 0.19, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20 }, -- + !ΠšΠ”Π ΠšΠ”Π 2021.11 { 0.185, 0.18, 0.18, 0.17, 0.17, 0.16, 0.16, 0.15, 0.15, 0.14 } + ["health"] = { 10, 50, 150, 320, 1000, 2250, 3250, 6500, 12500, 25000 }, -- + !ΠšΠ”Π ΠšΠ”Π 2022.01 { 10, 50, 200, 350, 1250, 2250, 3250, 6500, 12500, 25000 } + ["pollutionToAttack"] = {6, 20, 45, 60, 160, 200, 260, 320, 400, 500 }, -- + !ΠšΠ”Π defs (4, 12, 30, 200), { 10, 40, 80, 120, 200, 300, 450, 550, 650, 750 } + ["spawningTimeModifer"] = { 1, 1, 1, 2, 2, 5, 8, 8, 10, 10 }, +} +-- + !ΠšΠ”Π 2021.11 +-- recalculateTableForEffectiveLevel(spitterAttributeNumeric,TIER_UPGRADE_SET_10_AS_IS, + -- 2, + -- {cooldown = 0, particleHoizontalSpeedDeviation = 4, spawningTimeModifer = 0, health = 0, stickerDamagePerTick = 4}, + -- {range = "", radius="", movement = "", distancePerFrame = "",}) +spitterAttributeNumeric["damagePerTick"] = calculateValuesForLevels(spitterAttributeNumeric["damagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 2) +spitterAttributeNumeric["stickerDamagePerTick"] = calculateValuesForLevels(spitterAttributeNumeric["stickerDamagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 4) +spitterAttributeNumeric["damage"] = calculateValuesForLevels(spitterAttributeNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 2) +spitterAttributeNumeric["scale"] = calculateValuesForLevels(spitterAttributeNumeric["scale"], TIER_UPGRADE_SET_10_AS_IS, 2) +spitterAttributeNumeric["healing"] = calculateValuesForLevels(spitterAttributeNumeric["healing"], TIER_UPGRADE_SET_10_AS_IS, 4) +spitterAttributeNumeric["physicalDecrease"] = calculateValuesForLevels(spitterAttributeNumeric["physicalDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +spitterAttributeNumeric["health"] = calculateValuesForLevels(spitterAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) +spitterAttributeNumeric["pollutionToAttack"] = calculateValuesForLevels(spitterAttributeNumeric["pollutionToAttack"], TIER_UPGRADE_SET_10_AS_IS, 0) +spitterAttributeNumeric["spawningTimeModifer"] = calculateValuesForLevels(spitterAttributeNumeric["spawningTimeModifer"], TIER_UPGRADE_SET_10_AS_IS, 1) +-- - !ΠšΠ”Π 2021.11 + +local droneAttributeNumeric = { + ["scale"] = { 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 }, -- { 0.3, 0.32, 0.34, 0.36, 0.4, 0.42, 0.44, 0.5, 0.52, 0.54 } + ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, + ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, + ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, + ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 }, + ["stickerMovementModifier"] = { 0.8, 0.8, 0.75, 0.75, 0.7, 0.7, 0.65, 0.65, 0.5, 0.5 }, + ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, + ["cooldown"] = { 60, 60, 55, 55, 50, 50, 45, 45, 40, 40 }, + ["warmup"] = { 20, 19, 18, 17, 16, 15, 14, 13, 12, 11 }, + ["ttl"] = { 300, 300, 350, 350, 400, 400, 450, 450, 500, 500 }, + ["damage"] = { 2, 4, 7, 13, 15, 18, 22, 28, 35, 40 }, + -- ["movement"] = { 0.06, 0.06, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.1 }, + ["movement"] = { 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2 }, + ["distancePerFrame"] = { 0.1, 0.1, 0.105, 0.105, 0.110, 0.110, 0.112, 0.112, 0.114, 0.114 }, + -- ["rangeFromPlayer"] = { 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }, + ["rangeFromPlayer"] = { 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }, + ["range"] = { 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 }, + ["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 }, + ["health"] = { 15, 75, 100, 150, 200, 250, 275, 300, 325, 350 }, + ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, +} + +-- + !ΠšΠ”Π 2021.11 +--recalculateTableForEffectiveLevel(droneAttributeNumeric,TIER_UPGRADE_SET_10_AS_IS,nil,nil,{cooldown="", warmup="", range="", rangeFromPlayer=""}) -- + !ΠšΠ”Π 2021.11 +droneAttributeNumeric["damagePerTick"] = calculateValuesForLevels(droneAttributeNumeric["damagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 2) +droneAttributeNumeric["damage"] = calculateValuesForLevels(droneAttributeNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 0) +droneAttributeNumeric["health"] = calculateValuesForLevels(droneAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) +droneAttributeNumeric["healing"] = calculateValuesForLevels(droneAttributeNumeric["healing"], TIER_UPGRADE_SET_10_AS_IS, 0) +-- - !ΠšΠ”Π 2021.11 + + +local eggsAttributeNumeric = { + ["scale"] = { 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6 }, + ["stickerDuration"] = { 600, 600, 600, 600, 600, 600, 600, 600, 600, 600 }, + ["stickerMovementModifier"] = { 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6 }, + ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, + ["cooldown"] = { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, + ["warmup"] = { 20, 19, 18, 17, 16, 15, 14, 13, 12, 11 }, + ["ttl"] = { 300, 300, 300, 300, 300, 300, 300, 280, 260, 240 }, + ["damage"] = { 2, 4, 7, 13, 15, 18, 22, 28, 30, 30 }, + ["movement"] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + ["health"] = { 15, 75, 150, 300, 450, 600, 750, 1000, 1500, 3000 }, +} +eggsAttributeNumeric["damagePerTick"] = calculateValuesForLevels(eggsAttributeNumeric["damagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 2) +eggsAttributeNumeric["ttl"] = calculateValuesForLevels(eggsAttributeNumeric["ttl"], TIER_UPGRADE_SET_10_AS_IS, 0) +eggsAttributeNumeric["damage"] = calculateValuesForLevels(eggsAttributeNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 0) +eggsAttributeNumeric["health"] = calculateValuesForLevels(eggsAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) + +local unitSpawnerAttributeNumeric = { + ["health"] = { 350, 500, 750, 1000, 1500, 3500, 11000, 20000, 30000, 45000 }, + ["healing"] = { 0.02, 0.02, 0.022, 0.024, 0.026, 0.028, 0.03, 0.032, 0.034, 0.036 }, + ["spawningCooldownStart"] = { 1080, 1075, 1020, 1015, 950, 940, 920, 910, 900, 880 }, + ["spawningCooldownEnd"] = { 350, 335, 320, 310, 300, 290, 280, 270, 260, 250 }, + ["unitsToSpawn"] = { 11, 11, 10, 10, 9, 9, 8, 8, 8, 7 }, + ["scale"] = { 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 }, + ["unitsOwned"] = { 9, 9, 9, 9, 9, 8, 8, 8, 8, 7 }, + ["physicalDecrease"] = { 1, 2, 3, 4, 6, 6, 8, 10, 12, 14 }, + ["physicalPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, + ["explosionDecrease"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, + ["explosionPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, + ["fireDecrease"] = { 3, 3, 4, 4, 4, 4, 4, 4, 5, 5 }, + ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, + ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }, + ["cooldown"] = { 50, 50, 45, 45, 40, 40, 35, 35, 30, 30 } +} +-- + !ΠšΠ”Π 2021.11 +unitSpawnerAttributeNumeric["health"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) +unitSpawnerAttributeNumeric["healing"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["healing"], TIER_UPGRADE_SET_10_AS_IS, 4) +unitSpawnerAttributeNumeric["scale"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["scale"], TIER_UPGRADE_SET_10_AS_IS, 2) +unitSpawnerAttributeNumeric["physicalDecrease"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["physicalDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +unitSpawnerAttributeNumeric["explosionDecrease"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["explosionDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +unitSpawnerAttributeNumeric["fireDecrease"] = calculateValuesForLevels(unitSpawnerAttributeNumeric["fireDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +-- - !ΠšΠ”Π 2021.11 + +local hiveAttributeNumeric = { + ["health"] = { 1000, 1500, 2000, 3000, 4500, 15000, 22000, 40000, 60000, 90000 }, + ["healing"] = { 0.02, 0.02, 0.022, 0.024, 0.026, 0.028, 0.03, 0.032, 0.034, 0.036 }, + ["spawningCooldownStart"] = {180, 180, 180, 180, 180, 180, 180, 180, 180, 180 }, + ["spawningCooldownEnd"] = { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 }, + ["unitsToSpawn"] = { 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 }, + ["scale"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1 }, + ["unitsOwned"] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 }, + ["physicalDecrease"] = { 1, 2, 3, 4, 6, 6, 8, 10, 12, 14 }, + ["physicalPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, + ["explosionDecrease"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, + ["explosionPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, + ["fireDecrease"] = { 3, 3, 4, 4, 4, 4, 4, 4, 5, 5 }, + ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, + ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }, + ["cooldown"] = { 50, 50, 45, 45, 40, 40, 35, 35, 30, 30 } +} +-- + !ΠšΠ”Π 2021.11 +hiveAttributeNumeric["health"] = calculateValuesForLevels(hiveAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) +hiveAttributeNumeric["healing"] = calculateValuesForLevels(hiveAttributeNumeric["healing"], TIER_UPGRADE_SET_10_AS_IS, 4) +hiveAttributeNumeric["scale"] = calculateValuesForLevels(hiveAttributeNumeric["scale"], TIER_UPGRADE_SET_10_AS_IS, 2) +hiveAttributeNumeric["physicalDecrease"] = calculateValuesForLevels(hiveAttributeNumeric["physicalDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +hiveAttributeNumeric["explosionDecrease"] = calculateValuesForLevels(hiveAttributeNumeric["explosionDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +hiveAttributeNumeric["fireDecrease"] = calculateValuesForLevels(hiveAttributeNumeric["fireDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +-- - !ΠšΠ”Π 2021.11 + + +local wormAttributeNumeric = { + ["stickerDuration"] = { 800, 810, 820, 830, 840, 850, 860, 870, 880, 890 }, + ["stickerMovementModifier"] = { 0.8, 0.8, 0.75, 0.75, 0.7, 0.7, 0.65, 0.65, 0.5, 0.5 }, + ["damagePerTick"] = { 0.15, 0.3, 0.4, 0.6, 0.7, 0.8, 1, 1.2, 1.5, 2 }, -- { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 } + ["range"] = { 25, 27, 31, 33, 35, 36, 37, 38, 39, 40 }, +-- ["cooldown"] = { 70, 70, 68, 66, 64, 62, 60, 58, 56, 54 }, + ["cooldown"] = { 60, 55, 50, 48, 44, 40, 36, 34, 32, 30 }, + ["damage"] = { 12, 22.5, 33.75, 45, 67.5, 82.5, 97.5, 112.5, 127.5, 142.5 }, + ["scale"] = { 0.60, 0.80, 0.90, 1, 1.1, 1.2, 1.3, 1.4, 1.6, 1.8 }, --{ 0.40, 0.50, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 } + ["radius"] = { 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.3, 2.5, 3.0 }, + ["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 }, + ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, + ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, + ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, +-- ["foldingSpeed"] = { 0.15, 0.15, 0.16, 0.16, 0.16, 0.17, 0.17, 0.18, 0.18, 0.19 }, + ["preparingSpeed"] = { 0.025, 0.025, 0.026, 0.026, 0.027, 0.027, 0.028, 0.028, 0.029, 0.029 }, + ["prepareRange"] = { 30, 30, 35, 35, 40, 40, 40, 40, 45, 45 }, + ["physicalDecrease"] = { 0, 0, 5, 5, 8, 8, 10, 10, 12, 12 }, + ["explosionDecrease"] = { 0, 0, 5, 5, 8, 8, 10, 10, 12, 12 }, + ["explosionPercent"] = { 0, 0, 10, 10, 20, 20, 30, 30, 40, 40 }, + ["fireDecrease"] = { 3, 3, 4, 4, 5, 5, 5, 5, 5, 6 }, + ["health"] = { 200, 500, 800, 1400, 2500, 3500, 7500, 12000, 20000, 25000 }, + ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, + ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, + ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 } +} + +wormAttributeNumeric["damagePerTick"] = calculateValuesForLevels(wormAttributeNumeric["damagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 4) +wormAttributeNumeric["damage"] = calculateValuesForLevels(wormAttributeNumeric["damage"], TIER_UPGRADE_SET_10_AS_IS, 1) +wormAttributeNumeric["scale"] = calculateValuesForLevels(wormAttributeNumeric["scale"], TIER_UPGRADE_SET_10_AS_IS, 2) +wormAttributeNumeric["stickerDamagePerTick"] = calculateValuesForLevels(wormAttributeNumeric["stickerDamagePerTick"], TIER_UPGRADE_SET_10_AS_IS, 4) +wormAttributeNumeric["physicalDecrease"] = calculateValuesForLevels(wormAttributeNumeric["physicalDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +wormAttributeNumeric["explosionDecrease"] = calculateValuesForLevels(wormAttributeNumeric["explosionDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +wormAttributeNumeric["fireDecrease"] = calculateValuesForLevels(wormAttributeNumeric["fireDecrease"], TIER_UPGRADE_SET_10_AS_IS, 2) +wormAttributeNumeric["health"] = calculateValuesForLevels(wormAttributeNumeric["health"], TIER_UPGRADE_SET_10_AS_IS, 0) +wormAttributeNumeric["healing"] = calculateValuesForLevels(wormAttributeNumeric["healing"], TIER_UPGRADE_SET_10_AS_IS, 4) + +local propTables10 = { + {{0, 1}, {0.27, 0.0}}, + {{0.15, 1}, {0.38, 0.0}}, + {{0.27, 1}, {0.47, 0.0}}, + {{0.38, 1}, {0.56, 0.0}}, + {{0.47, 1}, {0.65, 0.0}}, + {{0.56, 1}, {0.74, 0.0}}, + {{0.65, 1}, {0.82, 0.0}}, + {{0.74, 1}, {0.91, 0.0}}, + {{0.82, 1}, {1, 0.0}}, + {{0.91, 1}, {1, 1.0}} + } + + +local function fillUnitTable(result, unitSet, tier, probability) + for x=1,#unitSet[tier] do + result[#result+1] = {unitSet[tier][x], probability} + end +end + +local function unitSetToProbabilityTable(unitSet) -- biters per evo + local result = {} + local tierEnd = settings.startup["rampantFixed--tierEnd"].value + local evoOffset = mMax(tierEnd-5, 0)*0.02 + + fillUnitTable(result, unitSet, 1, {{0, 1}, {0.40, 0.0}}) + fillUnitTable(result, unitSet, 2, {{0.10+evoOffset*0.5, 0}, {0.25+evoOffset, 0.5}, {0.50, 0.0}}) + fillUnitTable(result, unitSet, 3, {{0.22+evoOffset*0.5, 0}, {0.45+evoOffset*0.5, 0.5}, {0.60, 0.0}}) + fillUnitTable(result, unitSet, 4, {{0.38, 0}, {0.55+evoOffset, 0.5}, {0.70+evoOffset, 0.0}}) + fillUnitTable(result, unitSet, 5, {{0.47, 0}, {0.65+evoOffset, 0.5}, {0.80+evoOffset, 0.0}}) + fillUnitTable(result, unitSet, 6, {{0.65, 0}, {0.75+(evoOffset*0.5), 0.5}, {0.975, 0.0}}) + fillUnitTable(result, unitSet, 7, {{0.74, 0}, {0.825+(evoOffset*0.5), 0.5}, {0.975, 0.0}}) + fillUnitTable(result, unitSet, 8, {{0.80, 0}, {0.875, 0.5}, {0.98, 0.0}}) + fillUnitTable(result, unitSet, 9, {{0.85, 0}, {0.925, 0.5}, {0.99, 0.0}}) + fillUnitTable(result, unitSet, 10, {{0.91, 0}, {1, 1.0}}) + + + return result +end + +local function unitSetToHiveProbabilityTable(unitSet) -- +1 lvl + local result = {} + local tierEnd = settings.startup["rampantFixed--tierEnd"].value + local evoOffset = mMax(tierEnd-5, 0)*0.02 + + fillUnitTable(result, unitSet, 1, {{0, 1}, {0.15, 0.0}}) + fillUnitTable(result, unitSet, 2, {{0.00, 0}, {0.15, 0.5}, {0.27, 0.0}}) + fillUnitTable(result, unitSet, 3, {{0.15, 0}, {0.27, 0.5}, {0.38, 0.0}}) + fillUnitTable(result, unitSet, 4, {{0.27, 0}, {0.38, 0.5}, {0.47, 0.0}}) + fillUnitTable(result, unitSet, 5, {{0.38, 0}, {0.47, 0.5}, {0.65, 0.0}}) + fillUnitTable(result, unitSet, 6, {{0.47, 0}, {0.65, 0.5}, {0.74, 0.0}}) + fillUnitTable(result, unitSet, 7, {{0.65, 0}, {0.74, 0.5}, {0.85, 0.0}}) + fillUnitTable(result, unitSet, 8, {{0.74, 0}, {0.80, 0.5}, {0.95, 0.0}}) + fillUnitTable(result, unitSet, 9, {{0.80, 0}, {0.85, 0.5}, {0.98, 0.0}}) + fillUnitTable(result, unitSet, 10, {{0.85, 0}, {1, 1.0}}) + return result + +end + + +local function addImmunity(entity, name) + entity.resistances[name] = {decrease = 0, percent = 100} +end + +local function addExtremeResistance(entity, name) + entity.resistances[name] = {decrease = 3, percent = 99.99} +end + +local function addMajorResistance(entity, name, tier) + local decreases = { 5, 6, 7, 10, 13, 14, 16, 17, 19, 23 } -- { 7, 7, 10, 10, 13, 13, 16, 16, 19, 23 } + decreases = calculateValuesForLevels(decreases, TIER_UPGRADE_SET_10_AS_IS, 0) + + local percents = { 80, 80, 84, 86, 88, 90, 92, 92, 92, 93 } + entity.resistances[name] = {decrease = decreases[tier], percent = percents[tier]} +end + +local function addMinorResistance(entity, name, tier) + local decreases = { 3, 4, 7, 10, 12, 12, 13, 13, 16, 18 } + decreases = calculateValuesForLevels(decreases, TIER_UPGRADE_SET_10_AS_IS, 0) + local percents = { 35, 35, 40, 40, 45, 45, 50, 55, 60, 65 } + entity.resistances[name] = {decrease = decreases[tier], percent = percents[tier]} +end + +local function addLesserResistance(entity, name, tier) + local decreases = { 3, 4, 7, 10, 12, 12, 13, 13, 16, 18 } + decreases = calculateValuesForLevels(decreases, TIER_UPGRADE_SET_10_AS_IS, 0) + local percents = { 0, 5, 10, 15, 20, 25, 30, 30, 30, 35 } + entity.resistances[name] = {decrease = decreases[tier], percent = percents[tier]} +end + +local function addMajorWeakness(entity, name, tier) + local decreases ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + decreases = calculateValuesForLevels(decreases, TIER_UPGRADE_SET_10_AS_IS, 0) + local percents = { -100, -100, -100, -100, -100, -100, -100, -100, -100, -100 } + entity.resistances[name] = {decrease = decreases[tier], percent = percents[tier]} +end + +local function addMinorWeakness(entity, name, tier) + local decreases = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } -- { -3, -3, -7, -7, -10, -10, -13, -13, -16, -18 } + decreases = calculateValuesForLevels(decreases, TIER_UPGRADE_SET_10_AS_IS, 0) + local percents = { -50, -50, -50, -50, -50, -50, -50, -50, -50, -50 } -- { -35, -35, -40, -40, -45, -45, -50, -55, -55, -60 } + entity.resistances[name] = {decrease = decreases[tier], percent = percents[tier]} +end + +local function scaleAttributes (entity) + if (entity.type == "biter") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitBiterHealthScaler"].value + entity["movement"] = entity["movement"] * settings.startup["rampantFixed--unitBiterSpeedScaler"].value + entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampantFixed--unitBiterSpeedScaler"].value + entity["damage"] = entity["damage"] * settings.startup["rampantFixed--unitBiterDamageScaler"].value + entity["range"] = entity["range"] * settings.startup["rampantFixed--unitBiterRangeScaler"].value + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitBiterHealingScaler"].value + elseif (entity.type == "spitter") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitSpitterHealthScaler"].value + entity["movement"] = entity["movement"] * settings.startup["rampantFixed--unitSpitterSpeedScaler"].value + entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampantFixed--unitSpitterSpeedScaler"].value + entity["damage"] = entity["damage"] * settings.startup["rampantFixed--unitSpitterDamageScaler"].value + if entity["stickerDamagePerTick"] then + entity["stickerDamagePerTick"] = entity["stickerDamagePerTick"] * settings.startup["rampantFixed--unitSpitterDamageScaler"].value + end + entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampantFixed--unitSpitterDamageScaler"].value + entity["range"] = entity["range"] * settings.startup["rampantFixed--unitSpitterRangeScaler"].value + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitSpitterHealingScaler"].value + elseif (entity.type == "drone") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitDroneHealthScaler"].value + entity["movement"] = entity["movement"] * settings.startup["rampantFixed--unitDroneSpeedScaler"].value + entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampantFixed--unitDroneSpeedScaler"].value + entity["damage"] = entity["damage"] * settings.startup["rampantFixed--unitDroneDamageScaler"].value + entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampantFixed--unitDroneDamageScaler"].value + entity["range"] = entity["range"] * settings.startup["rampantFixed--unitDroneRangeScaler"].value + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitDroneHealingScaler"].value + elseif (entity.type == "biter-spawner") or (entity.type == "spitter-spawner") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitSpawnerHealthScaler"].value + entity["unitsOwned"] = entity["unitsOwned"] * settings.startup["rampantFixed--unitSpawnerOwnedScaler"].value + entity["unitsToSpawn"] = entity["unitsToSpawn"] * settings.startup["rampantFixed--unitSpawnerSpawnScaler"].value + entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * settings.startup["rampantFixed--unitSpawnerRespawnScaler"].value + entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * settings.startup["rampantFixed--unitSpawnerRespawnScaler"].value + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitSpawnerHealingScaler"].value + elseif (entity.type == "turret") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitWormHealthScaler"].value + entity["damage"] = entity["damage"] * settings.startup["rampantFixed--unitWormDamageScaler"].value + entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampantFixed--unitWormDamageScaler"].value + entity["range"] = entity["range"] * settings.startup["rampantFixed--unitWormRangeScaler"].value + entity["prepareRange"] = entity["prepareRange"] * settings.startup["rampantFixed--unitWormRangeScaler"].value -- + !ΠšΠ”Π 2021.11 + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitWormHealingScaler"].value + elseif (entity.type == "hive") then + entity["health"] = entity["health"] * settings.startup["rampantFixed--unitHiveHealthScaler"].value + entity["healing"] = entity["healing"] * settings.startup["rampantFixed--unitHiveHealingScaler"].value + entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * settings.startup["rampantFixed--unitHiveRespawnScaler"].value + entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * settings.startup["rampantFixed--unitHiveRespawnScaler"].value + end +end + +local lootTables = {} +lootTables[1] = makeSchallAlienLootTables() +lootTables[2] = makeAlienLootEconomyTables() + +local function fillEntityTemplate(entity) + local tier = entity.effectiveLevel + local allowLongRangeImmunity = settings.startup["rampantFixed--allowLongRangeImmunity"].value + local allowOneshotProtection = settings.startup["rampantFixed--allowOneshotProtection"].value + local buildingsImmuneToElectic = settings.startup["rampantFixed--buildingsImmuneToElectic"].value + + entity.noLoot = false + + if (entity.type == "biter") then + for key,value in pairs(biterAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + elseif (entity.type == "spitter") then + for key,value in pairs(spitterAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + elseif (entity.type == "biter-spawner") or (entity.type == "spitter-spawner") then + for key,value in pairs(unitSpawnerAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + elseif (entity.type == "hive") then + for key,value in pairs(hiveAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + elseif (entity.type == "turret") then + for key,value in pairs(wormAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + elseif (entity.type == "drone") then + for key,value in pairs(droneAttributeNumeric) do + if not entity[key] then + entity[key] = value[tier] + else + entity[key] = entity[key][tier] + end + end + end + + if buildingsImmuneToElectic and ((entity.type == "turret") or (entity.type == "hive") or (entity.type == "biter-spawner") or (entity.type == "spitter-spawner")) then + entity.resistances["electric"] = {decrease = 0, percent = 100} + end + + + for k,v in pairs(entity) do + local startDecrease = string.find(k, "Decrease") + local startPercent = string.find(k, "Percent") + if startDecrease or startPercent then + local damageType = string.sub(k, 1, (startDecrease or startPercent)-1) + if not entity.resistances[damageType] then + entity.resistances[damageType] = {} + end + + if startDecrease then + entity.resistances[damageType].decrease = v + elseif startPercent then + entity.resistances[damageType].percent = v + end + end + end + + for i=1,#entity.addon do + for k,v in pairs(entity.addon[i]) do + entity[k] = v[tier] + end + end + + for key, value in pairs(entity) do + if (key == "drops") then + if not entity.loot then + entity.loot = {} + end + for _,lootTable in pairs(entity.drops) do + entity.loot[#entity.loot+1] = lootTable[tier] + end + elseif (key == "explosion") then + local ti = tier + if (entity.type == "drone") then + ti = 1 + end + entity["hitSprayName"] = entity[key] .. "-" .. "damaged-fountain-rampant" + entity[key] = entity[key] .. "-" .. bloodFountains[ti] + elseif (key == "evolutionFunction") then + entity["evolutionRequirement"] = value(tier) + elseif (key == "immunity") then + for i=1,#value do + addImmunity(entity, value[i]) + end + elseif (key == "extremeResistances") then + for i=1,#value do + addExtremeResistance(entity, value[i]) + end + elseif (key == "majorResistances") then + for i=1,#value do + addMajorResistance(entity, value[i], tier) + end + elseif (key == "minorResistances") then + for i=1,#value do + addMinorResistance(entity, value[i], tier) + end + elseif (key == "lesserResistances") then + for i=1,#value do + addLesserResistance(entity, value[i], tier) + end + elseif (key == "majorWeaknesses") then + for i=1,#value do + addMajorWeakness(entity, value[i], tier) + end + elseif (key == "minorWeaknesses") then + for i=1,#value do + addMinorWeakness(entity, value[i], tier) + end + elseif (key == "explosionTiers") then + entity.attackExplosion = entity.explosionTiers[tier] + entity.attackScorchmark = entity.scorchmarkTiers[tier] + elseif (key == "attributes") then + for i=1,#entity[key] do + local attribute = entity[key][i] + if (attribute == "lowHealth") then + entity["health"] = entity["health"] * 0.75 + elseif (attribute == "lowestHealth") then + entity["health"] = entity["health"] * 0.50 + elseif (attribute == "slowCooldown") then + entity["cooldown"] = entity["cooldown"] * 1.50 + entity["damage"] = entity["damage"] * 1.50 + if entity["damagePerTick"] then + entity["damagePerTick"] = entity["damagePerTick"] * 1.5 + end + elseif (attribute == "quickCooldown") then + entity["cooldown"] = entity["cooldown"] * 0.50 + -- entity["damage"] = entity["damage"] * 0.65 + if entity["damagePerTick"] then + entity["damagePerTick"] = entity["damagePerTick"] * 0.65 + end + elseif (attribute == "slowMovement") then + entity["movement"] = entity["movement"] * 0.35 + entity["distancePerFrame"] = entity["distancePerFrame"] * 0.65 + elseif (attribute == "quickMovement") then + local k = 1.1+(tier*0.03) + entity["movement"] = entity["movement"] * k -- (1.25 + entity["distancePerFrame"] = entity["distancePerFrame"] * (1.35*(k/1.25)) -- *1.35 + elseif (attribute == "quickSpawning") then + if entity["spawningCooldownStart"] then + entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * 0.85 + entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * 0.85 + end + if entity["spawningTimeModifer"] then + entity["spawningTimeModifer"] = entity["spawningTimeModifer"] * 0.85 + end + if entity["pollutionToAttack"] then + entity["pollutionToAttack"] = entity["pollutionToAttack"] * 0.5 + end + elseif (attribute == "altBiterArmored") then + entity["altBiter"] = "armored" + elseif (attribute == "altBiterArachnid") then + entity["altBiter"] = "arachnid" + elseif (attribute == "highRegen") then + entity["healing"] = entity["healing"] * 1.5 + elseif (attribute == "highestRegen") then + entity["healing"] = entity["healing"] * 3.5 + elseif (attribute == "big") then + entity["scale"] = entity["scale"] * 1.2 + elseif (attribute == "bigger") then + entity["scale"] = entity["scale"] * 1.35 + elseif (attribute == "lowestCollision") then + entity["collisionModifier"] = 0.1 + elseif (attribute == "noCollision") then + entity["collisionModifier"] = 0 + elseif (attribute == "addReach") then + entity["range"] = entity["range"] * 1.5 + elseif (attribute == "longReach") then + entity["range"] = entity["range"] * 3 + elseif (attribute == "largePrepRange") then + if entity["prepareRange"] then + entity["prepareRange"] = entity["prepareRange"] + 5 + end + elseif (attribute == "smallest") then + entity["scale"] = entity["scale"] * 0.5 + elseif (attribute == "fragile") then + entity["health"] = entity["health"] * 0.1 + elseif (attribute == "selfDamaging") then + local divider + if entity.health < 100 then + divider = 2 + else + divider = 2.5 + end + entity.healthDamage = entity.health / divider + entity.sourceEffect = function (attributes) + return + { + { + type = "damage", + affects_target = true, + damage = {amount = attributes.healthDamage or 5, type = attributes.damageType or "physical"} + } + } + end + elseif (attribute == "killsSelf") then + entity.healthDamage = entity.health * 3 + elseif (attribute == "unstable") then + entity["healing"] = -0.0033 * entity["health"] + elseif (attribute == "checkBuildability") then + entity.checkBuildability = true + elseif (attribute == "followsPlayer") then + entity.followsPlayer = true + elseif (attribute == "stationary") then + entity.movement = 0 + entity.distancePerFrame = 0 + elseif (attribute == "egg") then + for key,value in pairs(eggsAttributeNumeric) do + entity[key] = value[tier] + end + + elseif (attribute == "highHealth") then + entity["health"] = entity["health"] * 1.50 + elseif (attribute == "poisonDeathCloud") then + entity.dyingEffect = { + type = "create-entity", + entity_name = "poison-cloud-v" .. tier .. "-cloud-rampant" + } + elseif (attribute == "fireDeathCloud") then + entity.dyingEffect = { + type = "create-entity", + entity_name = "fire-cloud-Dmg"..tier.."-cloud-rampant" + } + elseif (attribute == "highestHealth") then + entity["health"] = entity["health"] * 2 + elseif type(attribute) == "table" then + if (attribute[1] == "clusterDeath") then + entity.deathGenerator = function (attack) + if (attribute[3] or attack.clusters) == 1 then + return { + { + type = "direct", + action_delivery = + { + type = "instant", + source_effects = { + { + type = "create-entity", + entity_name = attack.faction .. "-" .. attribute[2] + .. "-v" .. attack.variation .. "-t" + .. attack.effectiveLevel .. "-rampant", + repeat_count = attribute[4] or 1, + } + } + } + } + } + else + return { + { + type = "cluster", + cluster_count = attribute[3] or attack.clusters, + distance = attack.clusterDistance, + distance_deviation = 3, + action_delivery = + { + type = "projectile", + projectile = createCapsuleProjectile(attack, + attack.faction .. "-" .. attribute[2] + .. "-v" .. attack.variation .. "-t" + .. attack.effectiveLevel .. "-rampant"), + direction_deviation = 0.6, + starting_speed = 0.25, + max_range = attack.range, + starting_speed_deviation = 0.3 + } + } + } + end + end + elseif (attribute[1] == "spawnOnDestroyed") then -- + !2022.10 + local spawnLevel = entity.effectiveLevel + (attribute[3] or 0) -- be careful: same unit and attribute[3]=0 ==> infinite respawn + local entity_name + if (spawnLevel<1) and (entity.effectiveLevel > 1) then + spawnLevel = 1 + end + if (spawnLevel>=1) or (spawnLevel<=10) then + entity.deathGenerator = function (attack) + return { + { + type = "create-entity", + entity_name = entity.faction .. "-" .. attribute[2] .. "-v1-t" ..spawnLevel.. ((attribute[5] and ("-"..attribute[5])) or "") .. "-rampant", + repeat_count = attribute[4] or 1, + } + } + end + end + elseif (attribute[1] == "spawnOnDeath") then -- + !ΠšΠ”Π 2021.11 + local spawnLevel = entity.effectiveLevel + (attribute[3] or 0) -- be careful: same unit and attribute[3]=0 ==> infinite respawn + if (spawnLevel<1) and (entity.effectiveLevel > 1) then + spawnLevel = 1 + end + if (spawnLevel<1) or (spawnLevel>10) then + entity.dyingEffect = nil + else + entity.dyingEffect = { + type = "create-entity", + entity_name = entity.faction .. "-" .. attribute[2] .. "-v1-t" ..spawnLevel.. ((attribute[5] and ("-"..attribute[5])) or "") .. "-rampant", + repeat_count = attribute[4] or 1, + } + end + elseif (attribute[1] == "longRangeImmunity") then -- + !ΠšΠ”Π 2021.11 + if allowLongRangeImmunity then + entity.resistances["rampant-longRangeImmunity"] = {decrease = attribute[2], percent = settings.startup["rampantFixed--longRangeImmunity_efficiency"].value} + end + elseif (attribute[1] == "overdamageProtection") then -- + !ΠšΠ”Π 2021.11 + if allowOneshotProtection then + local maxDamage = mMax(entity["health"]/attribute[2], OVERDAMAGEPROTECTION_THRESHOLD) + entity.resistances["rampant-overdamageProtection"] = {decrease = maxDamage, percent = settings.startup["rampantFixed--oneshotProtection_efficiency"].value} + end + elseif (attribute[1] == "movement") then -- + !ΠšΠ”Π 2021.12 + entity["movement"] = entity["movement"] * attribute[2] + if attribute[2]<1 then + local k = 1 - ((1 - attribute[2]) / 2) + entity["distancePerFrame"] = entity["distancePerFrame"] * k + elseif attribute[2]>1 then + local k = 1 + ((attribute[2] - 1) / 2) + entity["distancePerFrame"] = entity["distancePerFrame"] * k + end + elseif (attribute[1] == "bonusRange") then -- + !ΠšΠ”Π 2021.11 + entity["range"] = entity["range"] + attribute[2] + else + error("Unknown table attribute " .. attribute[1]) + end + elseif (attribute == "notInKillStatistics") then + entity.additionalFlags[#entity.additionalFlags+1] = "not-in-kill-statistics" + elseif (attribute == "not-flammable") then + entity.additionalFlags[#entity.additionalFlags+1] = "not-flammable" + elseif (attribute == "noLoot") then + entity.noLoot = true + else + error("Unknown attribute " .. attribute) + end + end + end + end + + -- print(serpent.dump(entity)) + scaleAttributes(entity) +end + +local function generateApperance(unit) + local tier = unit.effectiveLevel + if unit.scale then + unit.scale = unit.scale[tier] + end +end + +local function addEntityLoot(entity, lootType, effectiveLevel) + for _, lootTable in pairs(lootTables) do + local entityLoot = lootTable[lootType] and lootTable[lootType][effectiveLevel] + if entityLoot then + if not entity.loot then + entity.loot = {} + end + for lootIndex = 1, #entityLoot do + entity.loot[#entity.loot+1] = entityLoot[lootIndex] + end + end + end +end + +function swarmUtils.buildUnits(template, dyingEffects) + local unitSet = {} + + local variations = settings.startup["rampantFixed--newEnemyVariations"].value + + for tier=1, 10 do + --local effectiveLevel = TIER_UPGRADE_SET_10[tier] + local effectiveLevel = tier -- + !ΠšΠ”Π 2021.11 + local result = {} + + for i=1,variations do + local unit = deepcopy(template) + unit.name = unit.name .. "-v" .. i .. "-t" .. tier + -- unit.nameSuffix = "-v" .. i .. "-t" .. tier + unit.effectiveLevel = effectiveLevel + unit.tier = tier + unit.variation = i + generateApperance(unit) + fillEntityTemplate(unit) + unit.attack = unit.attackGenerator(unit) + unit.death = (unit.deathGenerator and unit.deathGenerator(unit)) or nil + + local entity + if (unit.type == "spitter") then + entity = makeSpitter(unit) + if (not entity.noLoot) then + addEntityLoot(entity, "biterLoot", effectiveLevel) + end + elseif (unit.type == "biter") then + entity = makeBiter(unit) + if (not entity.noLoot) then + addEntityLoot(entity, "biterLoot", effectiveLevel) + end + elseif (unit.type == "drone") then + -- if not unit.death then + -- unit.death = { + -- type = "direct", + -- action_delivery = + -- { + -- type = "instant", + -- target_effects = + -- { + -- type = "create-entity", + -- entity_name = "massive-explosion" + -- } + -- } + -- } + -- end + entity = makeDrone(unit) + end + if i == 1 then + result[#result+1] = entity.name + end + + if unit.noLoot then + entity.loot = nil + end + + if entity.dying_trigger_effect then + dyingEffects[#dyingEffects+1] = {dyingEffect = deepcopy(entity.dying_trigger_effect), type = entity.type, name = entity.name, effectType = "dying_trigger_effect"} + entity.dying_trigger_effect = nil + end + if entity.destroy_action then + dyingEffects[#dyingEffects+1] = {dyingEffect = deepcopy(entity.destroy_action), type = entity.type, name = entity.name, effectType = "destroy_action"} + entity.destroy_action = nil + end + if data.raw[entity.type][entity.name] and data.raw[entity.type][entity.name].loot then + log("rebuilding ".. entity.name.. ", saving existing loot") + entity.loot = deepcopy(data.raw[entity.type][entity.name].loot) + end + data:extend({entity}) + end + + unitSet[#unitSet+1] = result + end + + return unitSet +end + +function swarmUtils.buildEntitySpawner(template, factionBuildings) + local variations = settings.startup["rampantFixed--newEnemyVariations"].value + + for tier=1, 10 do + --local effectiveLevel = TIER_UPGRADE_SET_10[tier] + local effectiveLevel = tier + + for i=1,variations do + local unitSpawner = deepcopy(template) + unitSpawner.name = unitSpawner.name .. "-v" .. i .. "-t" .. tier + unitSpawner.effectiveLevel = effectiveLevel + unitSpawner.tier = tier + unitSpawner.variation = i + unitSpawner.unitSet = unitSetToHiveProbabilityTable(template.unitSet) + generateApperance(unitSpawner) + fillEntityTemplate(unitSpawner) + + if (not unitSpawner.noLoot) then + addEntityLoot(unitSpawner, "spawnerLoot", effectiveLevel) + end + + + if unitSpawner.autoplace then + unitSpawner.autoplace = unitSpawner.autoplace[effectiveLevel] + end + + data:extend({ + makeUnitSpawner(unitSpawner) + }) + end + end +end + +function swarmUtils.buildUnitSpawner(template) + local variations = settings.startup["rampantFixed--newEnemyVariations"].value + + for tier=1, 10 do + --local effectiveLevel = TIER_UPGRADE_SET_10[tier] + local effectiveLevel = tier + + for i=1,variations do + local unitSpawner = deepcopy(template) + unitSpawner.name = unitSpawner.name .. "-v" .. i .. "-t" .. tier + unitSpawner.effectiveLevel = effectiveLevel + unitSpawner.tier = tier + unitSpawner.variation = i + local unitTable = unitSetToProbabilityTable(template.unitSet) + unitSpawner.unitSet = unitTable + generateApperance(unitSpawner) + fillEntityTemplate(unitSpawner) + + if (not unitSpawner.noLoot) then + addEntityLoot(unitSpawner, "spawnerLoot", effectiveLevel) + end + + if unitSpawner.autoplace then + unitSpawner.autoplace = unitSpawner.autoplace[effectiveLevel] + end + + data:extend({ + makeUnitSpawner(unitSpawner) + }) + end + end +end + +function swarmUtils.buildWorm(template) + local variations = settings.startup["rampantFixed--newEnemyVariations"].value + + for tier=1, 10 do + --local effectiveLevel = TIER_UPGRADE_SET_10[tier] + local effectiveLevel = tier + + for i=1,variations do + local worm = deepcopy(template) + worm.name = worm.name .. "-v" .. i .. "-t" .. tier + worm.effectiveLevel = effectiveLevel + worm.tier = tier + worm.variation = i + generateApperance(worm) + fillEntityTemplate(worm) + + if (not worm.noLoot) then + addEntityLoot(worm, "wormLoot", effectiveLevel) + end + + worm.attack = worm.attackGenerator(worm) + + if worm.autoplace then + worm.attributes["autoplace"] = worm.autoplace[effectiveLevel] + end + data:extend({ + makeWorm(worm) + }) + end + end +end + +local function makeLootTables(template) + local makeLootTable + if (template.type == "biter") or (template.type == "spitter") then + makeLootTable = makeUnitAlienLootTable + elseif (template.type == "worm") then + makeLootTable = makeWormAlienLootTable + elseif (template.type == "biter-spawner") or (template.type == "spitter-spawner") then + makeLootTable = makeSpawnerAlienLootTable + elseif (template.type == "hive") then + makeLootTable = makeSpawnerAlienLootTable + else + return nil + end + + local newDrops = {} + for i=1,#template.drops do + local attribute = template.drops[i] + if (attribute == "greenArtifact") then + newDrops[#newDrops+1] = makeLootTable("green") + elseif (attribute == "yellowArtifact") then + newDrops[#newDrops+1] = makeLootTable("yellow") + elseif (attribute == "blueArtifact") then + newDrops[#newDrops+1] = makeLootTable("blue") + elseif (attribute == "orangeArtifact") then + newDrops[#newDrops+1] = makeLootTable("orange") + elseif (attribute == "redArtifact") then + newDrops[#newDrops+1] = makeLootTable("red") + elseif (attribute == "purpleArtifact") then + newDrops[#newDrops+1] = makeLootTable("purple") + elseif (attribute == "nilArtifact") then + newDrops[#newDrops+1] = makeLootTable(nil) + end + end + + return newDrops +end + +-- + !ΠšΠ”Π 2021.11 +local rangePerTier = { 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.4 } +rangePerTier = calculateValuesForLevels(rangePerTier, TIER_UPGRADE_SET_10_AS_IS, 1) +-- - !ΠšΠ”Π 2021.11 + +local function buildAttack(faction, template) + for i=1,#template.attackAttributes do + local attack = template.attackAttributes[i] + if (attack == "melee") then + template.attackGenerator = createMeleeAttack + elseif (attack == "acidPool") then + template.addon[#template.addon+1] = acidPuddleAttributeNumeric + template.meleePuddleGenerator = function (attributes) + attributes.stickerDamagePerTickType = "acid" + return { + type="create-fire", + entity_name = makeAcidSplashFire(attributes, attributes.stickerName or makeSticker(attributes)), + check_buildability = true, + initial_ground_flame_count = 2, + show_in_tooltip = true + } + end + elseif (attack == "spit") then + template.attackType = "projectile" + -- template.attackDirectionOnly = true + + template.attackGenerator = function (attack) + return createRangedAttack(attack, + createAttackBall(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "touch") then + template.attackType = "projectile" + -- template.attackDirectionOnly = true + template.range = rangePerTier -- + !ΠšΠ”Π 2021.11 { 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.4 } + + template.attackGenerator = function (attack) + return createRangedAttack(attack, + createAttackBall(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "drainCrystal") then + template.actions = function(attributes, electricBeam) + return + { + { + type = "instant", + target_effects = + { + type = "create-entity", + trigger_created_entity = true, + entity_name = "drain-trigger-rampant" + } + }, + { + type = "beam", + beam = electricBeam or "electric-beam", + duration = attributes.duration or 20 + } + } + end + elseif (attack == "physical") then + template.explosionTiers = explosionTiers + template.scorchmarkTiers = scorchmarkTiers + template.damageType = "physical" + template.fireDamagePerTickType = "physical" + template.stickerDamagePerTickType = "physical" + template.attackPointEffects = function (attributes) + return { + { + type= "create-entity", + entity_name = attributes.attackScorchmark + }, + { + type= "create-entity", + entity_name = attributes.attackExplosion + } + } + end + elseif (attack == "acid") then + template.damageType = "acid" + template.fireDamagePerTickType = "acid" + template.stickerDamagePerTickType = "acid" + elseif (attack == "laser") then + template.damageType = "laser" + template.fireDamagePerTickType = "laser" + template.stickerDamagePerTickType = "laser" + elseif (attack == "electric") then + template.damageType = "electric" + template.fireDamagePerTickType = "electric" + template.stickerDamagePerTickType = "electric" + elseif (attack == "poison") then + template.damageType = "poison" + template.fireDamagePerTickType = "poison" + template.stickerDamagePerTickType = "poison" + template.attackPointEffects = function(attributes) + return + { + { + type="create-entity", + entity_name = "poison-cloud-v" .. attributes.effectiveLevel .. "-cloud-rampant" + } + } + end + elseif (attack == "stream") then + if blockableStreams then -- alternative attack + template.attackModifiers = {damage = 2, fireDamage = 1} + template.attackType = "projectile" + template.addon[#template.addon+1] = streamAttackNumeric + template.attackGenerator = function (attack) + return createRangedAttack(attack, + createSpitFire(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + else + template.addon[#template.addon+1] = streamAttackNumeric + template.attackGenerator = function (attack) + return createStreamAttack(attack, + createAttackFlame(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + end + elseif (attack == "lowDamageStream") then + if blockableStreams then -- alternative attack + template.attackModifiers = {damage = 2, fireDamage = 1} + template.attackType = "projectile" + template.addon[#template.addon+1] = lowDamageStreamAttackNumeric + template.attackGenerator = function (attack) + return createRangedAttack(attack, + createSpitFire(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + else + template.addon[#template.addon+1] = lowDamageStreamAttackNumeric + template.attackGenerator = function (attack) + return createStreamAttack(attack, + createAttackFlame(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + end + + elseif (attack == "beam") then + template.addon[#template.addon+1] = beamAttackNumeric + template.attackGenerator = function (attack) + return createElectricAttack(attack, + makeBeam(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "cluster") then + template.addon[#template.addon+1] = clusterAttackNumeric + template.attackBubble = makeBubble(template) + template.clusterAttack = true -- so dungreous ==> slower speed, bigger. + template.attackPointEffects = function(attributes) + return + { + { + type="nested-result", + action = { + { + type = "cluster", + cluster_count = attributes.clusters, + distance = attributes.clusterDistance, + distance_deviation = 3, + action_delivery = + { + type = "projectile", + projectile = makeLaser(attributes), + duration = 30, -- 20, + direction_deviation = 0.6, + starting_speed = attributes.startingSpeed, + starting_speed_deviation = 0.15 --0.3 + } + , repeat_count = 3 -- 2022.05 (2) + } + } + } + } + end + elseif (attack == "slow") then + template.force = "not-same" + template.stickerAnimation = { + filename = "__base__/graphics/entity/slowdown-sticker/slowdown-sticker.png", + priority = "extra-high", + line_length = 5, + width = 22, + height = 24, + frame_count = 50, + animation_speed = 0.5, + tint = {r = 0.3500, g = 0.663, b = 0.000, a = 0.694}, -- #4a900b1 + shift = util.by_pixel (2,-1), + hr_version = + { + filename = "__base__/graphics/entity/slowdown-sticker/hr-slowdown-sticker.png", + line_length = 5, + width = 42, + height = 48, + frame_count = 50, + animation_speed = 0.5, + tint = {r = 0.3500, g = 0.663, b = 0.000, a = 0.694}, -- #ffa900b1 + shift = util.by_pixel(2, -0.5), + scale = 0.5 + } + } + template.areaEffects = function (attributes) + return { + { + type = "damage", + damage = { amount = attributes.damage, type = "acid" } + }, + { + type = "create-sticker", + sticker = makeSticker(attributes) + } + } + end + elseif (attack == "nuclear") then + template.addon[#template.addon+1] = nuclearAttackNumeric + template.explosionTiers = explosionTiers + template.scorchmarkTiers = scorchmarkTiers + template.nuclear = true + template.attackGenerator = function (attack) + return createSuicideAttack(attack, + makeAtomicBlast(attack), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "bomb") then + template.addon[#template.addon+1] = bombAttackNumeric + template.explosionTiers = explosionTiers + template.scorchmarkTiers = scorchmarkTiers + template.attackGenerator = function (attack) + return createSuicideAttack(attack, + nil, + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "capsule") then + template.attackType = "projectile" + -- template.attackDirectionOnly = true + template.attackGenerator = function (attack) + attack.range = attack.range + 1 + return createProjectileAttack(attack, + createCapsuleProjectile(attack, + attack.entityGenerator(attack)), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + elseif (attack == "noFriendlyFire") then + template["force"] = "not-same" + elseif (attack == "noAcidPuddle") then + template.noAcidPuddle = true + elseif (attack == "meleePoisonCloud") then + template.attackGenerator = function(attributes) + return makeMeleePoisonCloud(attributes.range + , attributes.effectiveLevel + , (template.attackAnimation and template.attackAnimation(attributes.scale, + attributes.tint, + attributes.tint2, + attributes.altBiter)) or nil) --range, tier, animation + end + elseif (type(attack) == "table") then + if (attack[1] == "drone") then + template.entityGenerator = function (attributes) + return template.faction .. "-" .. attack[2] .. "-v" .. + attributes.variation .. "-t" .. attributes.effectiveLevel .. "-drone-rampant" + end + elseif (attack[1] == "flame") then -- + !ΠšΠ”Π 2021.11 + if blockableStreams then -- alternative attack + template.attackModifiers = {range = (attack[2] or 0), damage = (attack[3] or 1)*4, fireDamage = (attack[3] or 1) * 0.2} + template.attackType = "projectile" + template.addon[#template.addon+1] = streamAttackNumeric + template.attackGenerator = function (attack) + return createRangedAttack(attack, + createSpitFire(attack, data.raw["stream"]["flamethrower-fire-stream"].particle, data.raw["stream"]["flamethrower-fire-stream"].shadow), + (template.attackAnimation and template.attackAnimation(attack.scale, + attack.tint, + attack.tint2)) or nil) + end + else + template.attackGenerator = function(attributes) + return makeflamerAtack(attributes.range+attack[2] --or 0) + , attributes.damage * (attack[3] or 1) + , (template.attackAnimation and template.attackAnimation(attributes.scale, + attributes.tint, + attributes.tint2)) or nil) --range, damage, animation + end + end + elseif (attack[1] == "spawnSpit") then + template.spawningAttributes={spawnName = attack[2], spawnStep = attack[3] or 1, spawnCounts = attack[4] or 1, entitySuffix = ((attack[5] and ("-".. attack[5])) or "")} + --------------------------- + template.attackGenerator = function (attributes) + local spawningAttributes = attributes.spawningAttributes + local spawnLvl = attributes.effectiveLevel+spawningAttributes.spawnStep + if spawnLvl<1 then + spawnLvl = 1 + elseif spawnLvl>10 then + spawnLvl = 10 + end + local entityName = attributes.faction .. "-" .. spawningAttributes.spawnName .. "-v1-t" ..spawnLvl.. spawningAttributes.entitySuffix .. "-rampant" + + return createSpawnAttack(attributes, + createSpawnBall(attributes, entityName, spawningAttributes.spawnCounts), + (template.attackAnimation and template.attackAnimation(attributes.scale, + attributes.tint, + attributes.tint2)) or nil) + end + elseif (attack[1] == "bonusRange") then + for i = 1, 10 do + template.addon[#template.addon]["range"][i] = template.addon[#template.addon]["range"][i] + attack[2] + end + elseif (attack[1] == "damageKoefficient") then + for i = 1, 10 do + template.addon[#template.addon]["damage"][i] = template.addon[#template.addon]["damage"][i] * attack[2] + end + elseif (attack[1] == "durationKoefficient") then + for i = 1, 10 do + template.addon[#template.addon]["duration"][i] = template.addon[#template.addon]["duration"][i] * attack[2] + template.addon[#template.addon]["damageInterval"][i] = template.addon[#template.addon]["damageInterval"][i] * attack[2] + end + end + else + error ("unknown attack " .. type(attack).." = "..attack) + end + end +end + +local function checkForAddons(template) + for i=1,#template.attributes do + local attribute = template.attributes[i] + if (type(attribute) == "table") then + if (attribute[1] == "clusterDeath") then + template.addon[#template.addon+1] = clusterAttackNumeric + end + end + end +end + +local function buildUnitTemplate(faction, unit) + local template = deepcopy(unit) + + template.name = faction.type .. "-" .. unit.name + template.tint = faction.tint + template.tint2 = faction.tint2 + + template.faction = faction.type + template.unitName = unit.name + + template.addon = {} + template.explosion = faction.type + + template.resistances = {} + template.additionalFlags = {} + + if (template.type == "biter") then + template.attackAnimation = biterattackanimation + elseif (template.type == "spitter") then + template.attackAnimation = spitterattackanimation + end + + checkForAddons(template) + + buildAttack(faction, template) + + if template.drops then + template.drops = makeLootTables(template) + end + + if not template.attackGenerator then + error("missing attack generator " .. faction.type .. " " .. template.name) + end + + return template +end + +local function buildTurretTemplate(faction, turret) + local template = deepcopy(turret) + + template.name = faction.type .. "-" .. turret.name + template.tint = faction.tint + template.tint2 = faction.tint2 + + template.faction = faction.type + template.unitName = turret.name + + template.evolutionFunction = function (tier) + if (tier == 0) then + return 0 + else + return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) + end + end + + template.explosion = faction.type + + template.addon = {} + template.resistances = {} + + buildAttack(faction, template) + + checkForAddons(template) + + if template.drops then + template.drops = makeLootTables(template) + end + + if not template.attackGenerator then + error("missing attack generator " .. faction.type .. " " .. template.name) + end + + return template +end + +local function buildUnitSpawnerTemplate(faction, incomingTemplate, unitSets) + local template = deepcopy(incomingTemplate) + + template.name = faction.type .. "-" .. template.name + template.tint = faction.tint + template.tint2 = faction.tint2 + + template.faction = faction.type + template.unitName = incomingTemplate.name + + template.evolutionFunction = function (tier) + if (tier == 0) then + return 0 + else + return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) + end + end + + template.explosion = faction.type + template.addon = {} + + checkForAddons(template) + + template.resistances = {} + + local unitSet = {} + + -- local unitVariations = settings.startup["rampantFixed--newEnemyVariations"].value + + for t=1,10 do + for i=1,#template.buildSets do + local buildSet = template.buildSets[i] + if (buildSet[2] <= t) and (t <= buildSet[3]) then + local activeUnitSet = unitSets[buildSet[1]][t] + local unitSetTier = unitSet[t] + if unitSetTier then + for b=1,#activeUnitSet do + unitSetTier[#unitSetTier+1] = activeUnitSet[b] + end + else + unitSet[t] = deepcopy(activeUnitSet) + end + end + end + -- while (#unitSet[t] > unitVariations) do + -- table.remove(unitSet, math.random(#unitSet[t])) + -- end + end + + template.unitSet = unitSet + if template.drops then + template.drops = makeLootTables(template) + end + + return template +end + +-- local function buildHiveTemplate(faction, incomingTemplate, unitSets) + -- local template = deepcopy(incomingTemplate) + + -- template.name = faction.type .. "-" .. template.name + -- template.tint = faction.tint + -- template.tint2 = faction.tint2 + + -- template.faction = faction.type + -- template.unitName = incomingTemplate.name + + -- template.evolutionFunction = function (tier) + -- if (tier == 0) then + -- return 0 + -- else + -- return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) + -- end + -- end + + -- template.explosion = faction.type + -- template.addon = {} + + -- checkForAddons(template) + + -- template.resistances = {} + + -- local unitSet = {} + + -- -- local unitVariations = settings.startup["rampantFixed--newEnemyVariations"].value + + -- for t=1,10 do + -- for i=1,#template.buildSets do + -- local buildSet = template.buildSets[i] + -- if (buildSet[2] <= t) and (t <= buildSet[3]) then + -- local activeUnitSet = unitSets[buildSet[1]][t] + -- local unitSetTier = unitSet[t] + -- if unitSetTier then + -- for b=1,#activeUnitSet do + -- unitSetTier[#unitSetTier+1] = activeUnitSet[b] + -- end + -- else + -- unitSet[t] = deepcopy(activeUnitSet) + -- end + -- end + -- end + -- -- while (#unitSet[t] > unitVariations) do + -- -- table.remove(unitSet, math.random(#unitSet[t])) + -- -- end + -- end + + -- template.unitSet = unitSet + + -- if template.drops then + -- template.drops = makeLootTables(template) + -- end + + -- return template +-- end + +local function generateSpawnerProxyTemplate(name, health, result_units) + return { + type = "unit-spawner", + name = name, + icon = "__base__/graphics/icons/biter-spawner.png", + icon_size = 64, + icon_mipmaps = 4, + flags = {"placeable-player", "placeable-enemy", "not-repairable"}, + max_health = health, + order="b-b-g", + subgroup="enemies", + loot = nil, + resistances = nil, + working_sound = nil, + dying_sound = nil, + damaged_trigger_effect = nil, + healing_per_tick = -1, + -- collision_box = {{-3,-3},{3,3}}, + -- selection_box = {{-3,-3},{3,3}}, + collision_box = nil, + selection_box = nil, + -- in ticks per 1 pu + pollution_absorption_absolute = 10, + pollution_absorption_proportional = 0.005, + map_generator_bounding_box = nil, + corpse = nil, + dying_explosion = nil, + dying_trigger_effect = nil, + max_count_of_owned_units = 0, + max_friends_around_to_spawn = 0, + enemy_map_color = {r=0,g=0,b=0,a=0}, + -- enemy_map_color = {r=0,g=1,b=1,a=1}, + animations = { filename = "__core__/graphics/empty.png", size = 1 }, + -- animations ={ + -- spawner_idle_animation(0, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), + -- spawner_idle_animation(1, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), + -- spawner_idle_animation(2, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), + -- spawner_idle_animation(3, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}) + -- }, + integration = nil, + result_units = result_units, + -- With zero evolution the spawn rate is 6 seconds, with max evolution it is 2.5 seconds + spawning_cooldown = {360, 150}, + spawning_radius = 10, + spawning_spacing = 3, + max_spawn_shift = 0, + max_richness_for_spawn_shift = 100, + build_base_evolution_requirement = 0.0, + call_for_help_radius = 50 + } +end + +function swarmUtils.generateSpawnerProxy(result_units) + + data:extend({ + generateSpawnerProxyTemplate("spawner-proxy-1-rampant", 1 * 60 * 60, result_units), + generateSpawnerProxyTemplate("spawner-proxy-2-rampant", 2 * 60 * 60, result_units), + generateSpawnerProxyTemplate("spawner-proxy-3-rampant", 3 * 60 * 60, result_units) + }) +end + +-- + !ΠšΠ”Π 2021.12 +local deathCloudNumeric = { +-- ["dps"] = {12, 24, 36, 48, 60, 72, 84, 96, 108, 120 }, + ["dps"] = {12, 15, 18, 21, 24, 30, 42, 76, 100, 120 }, + ["hps"] = {24, 48, 72, 96, 120, 144, 168, 192, 216, 240}, + ["radius"] = {2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7 }, + ["duration"] = {50, 100, 150, 200, 250, 300, 350, 400, 450, 500 } --ticks +} +deathCloudNumeric["dps"] = calculateValuesForLevels(deathCloudNumeric["dps"], TIER_UPGRADE_SET_10_AS_IS, 2) +deathCloudNumeric["hps"] = calculateValuesForLevels(deathCloudNumeric["hps"], TIER_UPGRADE_SET_10_AS_IS, 2) + +local poisonAttacksNumeric = { + ["dps"] = {5, 15, 25, 30, 60, 115, 140, 155.0, 180.0, 200.0 }, -- duration: always 2 sec, atack speed - twice per sec, so it can stack 4 times (per biter) + ["hps"] = {7, 20, 35, 45, 60, 115, 140, 155.0, 180.0, 200.0 }, + ["radius"] = {2, 2.3, 2.6, 3, 3.2, 3.6, 4, 4.2, 4.4, 4.6 } +} +poisonAttacksNumeric["dps"] = calculateValuesForLevels(poisonAttacksNumeric["dps"], TIER_UPGRADE_SET_10_AS_IS, 2) +poisonAttacksNumeric["hps"] = calculateValuesForLevels(poisonAttacksNumeric["hps"], TIER_UPGRADE_SET_10_AS_IS, 2) + +local fireCloudNumeric = { + ["dps"] = {100, 140, 200, 300, 500, 750, 1250, 2000, 3000, 4000 }, -- duration: always 10 sec, attack speed - 5 per sec1 + ["radius"] = {1, 1.1, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2} +} +fireCloudNumeric["dps"] = calculateValuesForLevels(fireCloudNumeric["dps"], TIER_UPGRADE_SET_10_AS_IS, 2) +-- - !ΠšΠ”Π 2021.12 + +function swarmUtils.processFactions() + local dyingEffects = {} + + local deathCloudAdded = false + for i=1,#constants.FACTION_SET do + local faction = constants.FACTION_SET[i] + + if (faction.type == "energy-thief") then + energyThiefFaction.addFactionAddon() + elseif ((faction.type == "poison") or (faction.type == "juggernaut") or (faction.type == "fire")) then + if not data.raw["damage-type"]["healing"] then + + data:extend({ + { + type = "damage-type", + name = "healing" + } + }) + end + if not deathCloudAdded then + poisonFaction.addFactionAddon(deathCloudNumeric) + deathCloudAdded = true + end + if (faction.type == "juggernaut") then + poisonFaction.createAttackPoisonClouds(poisonAttacksNumeric) + end + if (faction.type == "fire") then + poisonFaction.createFireClouds(fireCloudNumeric) + end + end + + makeBloodFountains({ + name = faction.type, + tint2 = faction.tint2 + }) + + local unitSets = {} + + for iu=1,#faction.units do + local unit = faction.units[iu] + local template = buildUnitTemplate(faction, unit) + + unitSets[unit.name] = swarmUtils.buildUnits(template, dyingEffects) -- + ΠšΠ”Π 2022.07 now only first variant in unit list + end + + local factionBuildings = {} + for iu=1,#faction.buildings do + local building = faction.buildings[iu] + factionBuildings[building.type] = building.name -- 1:1 + + if (building.type == "spitter-spawner") then + local template = buildUnitSpawnerTemplate(faction, building, unitSets) + + swarmUtils.buildUnitSpawner(template) + elseif (building.type == "biter-spawner") then + local template = buildUnitSpawnerTemplate(faction, building, unitSets) + + swarmUtils.buildUnitSpawner(template) + elseif (building.type == "turret") then + local template = buildTurretTemplate(faction, building) + swarmUtils.buildWorm(template) + elseif (building.type == "hive") then + local template = buildUnitSpawnerTemplate(faction, building, unitSets) + + swarmUtils.buildEntitySpawner(template, factionBuildings) + elseif (building.type == "trap") then + + elseif (building.type == "utility") then + + end + + + end + end + + for _, unitData in pairs(dyingEffects) do + if unitData.name then + local entity = data.raw[unitData.type][unitData.name] + entity[unitData.effectType] = unitData.dyingEffect + data:extend({entity}) + end + end + +end + +return swarmUtils diff --git a/RampantFixed/prototypes/TargetDummy.lua b/RampantFixed/prototypes/TargetDummy.lua new file mode 100644 index 00000000..b034fad3 --- /dev/null +++ b/RampantFixed/prototypes/TargetDummy.lua @@ -0,0 +1,195 @@ +local targetDummy = {} + +require ("__base__.prototypes.entity.biter-animations") +local small_biter_scale = 0.5 +local small_biter_tint1 = {r=0.60, g=0.58, b=0.51, a=1} +local small_biter_tint2 = {r=0.9 , g=0.83, b=0.54, a=1} + +function targetDummy.addTargetDummies() + + data:extend({ + { + type = "radar", + name = "targetDummyPlasma-rampant", + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {"placeable-enemy"}, + minable = nil, + max_health = 10000, + healing_per_tick = -0.1, + corpse = "small-remnants", + collision_box = {{-0.8, -0.8 }, {0.8, 0.8}}, + selection_box = {{-1, -1}, {1, 1}}, + energy_per_nearby_scan = "6MJ", + energy_per_sector = "6MJ", + emissions_per_second = 1, + max_distance_of_sector_revealed = 0, + max_distance_of_nearby_sector_revealed = 1, + resistances = { + { + type = "physical", + decrease = -90, + percent = -1000 + }, + { + type = "electric", + percent = 100 + }, + { + type = "explosion", + percent = 99 + }, + { + type = "laser", + percent = 99 + } + }, + call_for_help_radius = 1, + energy_source = {type = "void"}, + energy_usage = "100kJ", + pictures = + { + filename = "__RampantFixed__/graphics/entities/thief/crystal-drain.png", + priority = "low", + width = 128, + height = 128, + scale = 1, + apply_projection = false, + direction_count = 32, + animation_speed = 0.5, + line_length = 8, + shift = {0.65, 0} + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + radius_minimap_visualisation_color = { r = 0.059, g = 0.092, b = 0.8, a = 0.275 } + } + }) + --------------------- + local targetDummy = util.table.deepcopy(data.raw["radar"]["targetDummyPlasma-rampant"]) + targetDummy.name = "targetDummyFire-rampant" + targetDummy.resistances = { + { + type = "physical", + decrease = -90, + percent = -1000 + }, + { + type = "fire", + percent = 99 + }, + { + type = "laser", + decrease = -90, + percent = -1000 + } + } + + data:extend({targetDummy}) + --------------------- + local targetDummy = util.table.deepcopy(data.raw["radar"]["targetDummyPlasma-rampant"]) + targetDummy.name = "targetDummyPhysical-rampant" + targetDummy.resistances = { + { + type = "physical", + decrease = 0, + percent = 99 + }, + { + type = "fire", + decrease = -90, + percent = -1000 + }, + { + type = "laser", + decrease = -90, + percent = -1000 + } + } + + data:extend({targetDummy}) + --------------------- + local targetDummy = util.table.deepcopy(data.raw["radar"]["targetDummyPlasma-rampant"]) + targetDummy.name = "targetDummyLaser-rampant" + targetDummy.resistances = { + { + type = "physical", + decrease = -90, + percent = -1000 + }, + { + type = "fire", + decrease = -90, + percent = -1000 + }, + { + type = "laser", + percent = 99 + } + } + + data:extend({targetDummy}) + + +end + +function targetDummy.addDummySetters() + local scale = small_biter_scale * 0.8 + local DummySetter = util.table.deepcopy(data.raw["unit"]["small-biter"]) + DummySetter.name = "plasmaDummySetter-rampant" + DummySetter.collision_box = {{-0.2*scale, -0.2*scale}, {0.2*scale, 0.2*scale}} + DummySetter.selection_box = {{-0.4*scale, -0.7*scale}, {0.4*scale, 0.4*scale}} + DummySetter.attack_parameters["animation"] = biterattackanimation(scale, small_biter_tint1, small_biter_tint2) + DummySetter.run_animation = biterrunanimation(scale, small_biter_tint1, small_biter_tint2) + DummySetter.water_reflection = biter_water_reflection(scale) + ----------------------- tests + local damaged_trigger_effect = {{type = "script", effect_id = "overdamageProtection, 5"}, + {type = "script", effect_id = "longRangeImmunity, 5"}} + DummySetter.damaged_trigger_effect = damaged_trigger_effect + ------------------------- + DummySetter.dying_trigger_effect = { + type = "create-entity", + entity_name = "targetDummyPlasma-rampant" + } + + data:extend({DummySetter}) + --------------------------- + local DummySetter = util.table.deepcopy(data.raw["unit"]["plasmaDummySetter-rampant"]) + DummySetter.name = "fireDummySetter-rampant" + DummySetter.dying_trigger_effect = { + type = "create-entity", + entity_name = "targetDummyFire-rampant" + } + data:extend({DummySetter}) + --------------------------- + local DummySetter = util.table.deepcopy(data.raw["unit"]["plasmaDummySetter-rampant"]) + DummySetter.name = "physicalDummySetter-rampant" + DummySetter.dying_trigger_effect = { + type = "create-entity", + entity_name = "targetDummyPhysical-rampant" + } + data:extend({DummySetter}) + --------------------------- + local DummySetter = util.table.deepcopy(data.raw["unit"]["plasmaDummySetter-rampant"]) + DummySetter.name = "laserDummySetter-rampant" + DummySetter.dying_trigger_effect = { + type = "create-entity", + entity_name = "targetDummyLaser-rampant" + } + data:extend({DummySetter}) + + + + + + --------------------------- + local DummySetter = util.table.deepcopy(data.raw["unit"]["plasmaDummySetter-rampant"]) + DummySetter.name = "randomDummySetter-rampant" + DummySetter.dying_trigger_effect = { + type = "script", + effect_id = "createRandomTargetDummy-rampant" + } + data:extend({DummySetter}) + +end + +return targetDummy \ No newline at end of file diff --git a/RampantFixed/prototypes/buildings/ChunkScanner.lua b/RampantFixed/prototypes/buildings/ChunkScanner.lua new file mode 100644 index 00000000..7987c5fd --- /dev/null +++ b/RampantFixed/prototypes/buildings/ChunkScanner.lua @@ -0,0 +1,144 @@ +local smokeUtils = require("prototypes/utils/SmokeUtils") + +local chunkScannerCorpse = util.table.deepcopy(data.raw["corpse"]["small-biter-corpse"]) +chunkScannerCorpse.name = "chunk-scanner-corpse" +chunkScannerCorpse.time_before_removed = 1 +data:extend({chunkScannerCorpse}) + +local chunkScannerSquad = util.table.deepcopy(data.raw["unit"]["small-biter"]) +chunkScannerSquad.name = "chunk-scanner-squad-rampant" +chunkScannerSquad.health = 1 +chunkScannerSquad.collision_box = {{-6, -6}, {6, 6}} +chunkScannerSquad.healing_per_tick = -1 +chunkScannerSquad.corpse = "chunk-scanner-corpse" +data:extend({chunkScannerSquad}) + +local chunkScannerSquadMovement = util.table.deepcopy(data.raw["unit"]["small-biter"]) +chunkScannerSquadMovement.name = "chunk-scanner-squad-movement-rampant" +chunkScannerSquadMovement.health = 1 +chunkScannerSquadMovement.collision_box = {{-1, -1}, {1, 1}} +chunkScannerSquadMovement.healing_per_tick = -1 +chunkScannerSquadMovement.corpse = "chunk-scanner-corpse" +data:extend({chunkScannerSquadMovement}) + + + +smokeUtils.makeNewCloud( + { + name = "build-clear", + wind = false, + scale = 9, + duration = 540, + cooldown = 10, + tint = { r=0.7, g=0.2, b=0.7 } + }, + { + type = "area", + radius = 17, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = 1.1, type = "poison"} + }, + { + type = "damage", + damage = { amount = 1.1, type = "acid"} + }, + { + type = "damage", + damage = { amount = 1.1, type = "fire"} + } + } + } + } +) + +smokeUtils.makeNewCloud( + { + name = "undeground-dust", + wind = false, + flags = {}, + scale = 4, + duration = 200, + cooldown = 20, + tint = { r=0.5, g=0.25, b=0.05, a=0.3} + }, + { + type = "area", + radius = 2, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = 0.5, type = "acid"} + } + } + } + } +) + +smokeUtils.makeNewCloud( + { + name = "digOut-dust", + wind = false, + scale = 4, + duration = 600, + cooldown = 20, + tint = { r=0.7, g=0.4, b=0.1, a=0.1} + }, + { + type = "area", + radius = 4, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = 0.5, type = "acid"} + } + } + } + } + ) + +smokeUtils.makeNonTriggerCloud( + { + name = "digIn-dust", + wind = false, + scale = 1, + duration = 30, + tint = { r=0.5, g=0.25, b=0.05, a=0.5} + } +) + +smokeUtils.makeNonTriggerCloud2( + { + name = "undergroundTrace-dust", + wind = false, + scale = 1, + duration = 7200, + tint = { r=0.5, g=0.25, b=0.05, a=0.025} + } +) + +smokeUtils.makeNonTriggerCloud2( + { + name = "growing-dust", + wind = false, + scale = 12, + duration = 4200, + tint = { r=0.25, g=0.5, b=0.05, a=0.01} + } +) diff --git a/RampantFixed/prototypes/buildings/UpdatesVanilla.lua b/RampantFixed/prototypes/buildings/UpdatesVanilla.lua new file mode 100644 index 00000000..d819f629 --- /dev/null +++ b/RampantFixed/prototypes/buildings/UpdatesVanilla.lua @@ -0,0 +1,77 @@ +local vanillaUpdates = {} + +function vanillaUpdates.addWallResistance() + local walls = data.raw["wall"] + + for _,wall in pairs(walls) do + local acidIndex + local poisonIndex + local explosionIndex + + if wall.resistances then + for i = 1, #wall.resistances do + local resistance = wall.resistances[i] + if resistance.type == "acid" then + acidIndex = i + 0 + elseif resistance.type == "poison" then + poisonIndex = i + 0 + elseif resistance.type == "explosion" then + explosionIndex = i + 0 + end + end + if acidIndex and (wall.resistances[acidIndex].percent > 0) then + local resistance = wall.resistances[acidIndex] + if (resistance.percent < 60) then + resistance.percent = 60 + end + if not poisonIndex then + wall.resistances[#wall.resistances+1] = {type="poison",percent=75} + elseif wall.resistances[poisonIndex].percent < 75 then + wall.resistances[poisonIndex].percent = 75 + end + if not explosionIndex then + wall.resistances[#wall.resistances+1] = {type="explosion",decrease=40} + elseif (wall.resistances[explosionIndex].decrease or 0) < 40 then + wall.resistances[explosionIndex].decrease = 40 + end + end + end + end + + walls = data.raw["gate"] + for _,wall in pairs(walls) do + local acidIndex + local poisonIndex + local explosionIndex + if wall.resistances then + for i = 1, #wall.resistances do + local resistance = wall.resistances[i] + if resistance.type == "acid" then + acidIndex = i + 0 + elseif resistance.type == "poison" then + poisonIndex = i + 0 + elseif resistance.type == "explosion" then + explosionIndex = i + 0 + end + end + if acidIndex and (wall.resistances[acidIndex].percent > 0) then + local resistance = wall.resistances[acidIndex] + if (resistance.percent < 60) then + resistance.percent = 60 + end + if not poisonIndex then + wall.resistances[#wall.resistances+1] = {type="poison",percent=75} + elseif wall.resistances[poisonIndex].percent < 75 then + wall.resistances[poisonIndex].percent = 75 + end + if not explosionIndex then + wall.resistances[#wall.resistances+1] = {type="explosion",decrease=40} + elseif (wall.resistances[explosionIndex].decrease or 0) < 40 then + wall.resistances[explosionIndex].decrease = 40 + end + end + end + end +end + +return vanillaUpdates diff --git a/RampantFixed/prototypes/buildings/tunnel.lua b/RampantFixed/prototypes/buildings/tunnel.lua new file mode 100644 index 00000000..08fc3121 --- /dev/null +++ b/RampantFixed/prototypes/buildings/tunnel.lua @@ -0,0 +1,25 @@ +data:extend({ +{ + type = "simple-entity", + name = "tunnel-entrance-rampant", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/small-scorchmark.png", + icon_size = 32, + subgroup = "grass", + order = "b[decorative]-k[tunnel-entrance]-a[big]", + collision_box = {{-1.3, -1.3}, {1.3, 1.3}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + render_layer = "remnants", + destructible = "false", + max_health = 1, + pictures = + { + { + filename = "__RampantFixed__/graphics/entities/tunnel/tunnelEntrance.png", + width = 142, + height = 104, + shift = {0, 0} + } + } + } +}) diff --git a/RampantFixed/prototypes/gui_style.lua b/RampantFixed/prototypes/gui_style.lua new file mode 100644 index 00000000..1386a477 --- /dev/null +++ b/RampantFixed/prototypes/gui_style.lua @@ -0,0 +1,23 @@ +data.raw["gui-style"].default["rampantFixed_menu_button"] = +{ + type = "button_style", + height = 24, + width = 450, + scalable = false, +} + +data.raw["gui-style"].default["rampantFixed_surfaceStatus_button"] = +{ + type = "button_style", + width = 150, + scalable = false, +} + + +data.raw["gui-style"].default["rampantFixed_menu_label"] = +{ + type = "label_style", + height = 24, + width = 450, + scalable = false, +} diff --git a/Rampant_3.1.2/prototypes/samples/healingBiter.lua b/RampantFixed/prototypes/samples/healingBiter.lua similarity index 88% rename from Rampant_3.1.2/prototypes/samples/healingBiter.lua rename to RampantFixed/prototypes/samples/healingBiter.lua index e0fc39cc..fc1ecd8f 100644 --- a/Rampant_3.1.2/prototypes/samples/healingBiter.lua +++ b/RampantFixed/prototypes/samples/healingBiter.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local smallbiterscale = 0.5 local small_biter_tint1 = {r=0.56, g=0.46, b=0.42, a=0.65} local small_biter_tint2 = {r=1, g=0.63, b=0, a=0.4} diff --git a/RampantFixed/prototypes/tile/fillableDirt.lua b/RampantFixed/prototypes/tile/fillableDirt.lua new file mode 100644 index 00000000..d704afc9 --- /dev/null +++ b/RampantFixed/prototypes/tile/fillableDirt.lua @@ -0,0 +1,51 @@ +data:extend({ + { + type = "tile", + name = "fillableDirt", + needs_correction = false, + collision_mask = + { + "water-tile", + }, + layer = 40, + variants = + { + main = + { + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt1.png", + count = 8, + size = 1 + } + , + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt2.png", + count = 8, + size = 2 + }, + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt4.png", + count = 6, + size = 4 + } + }, + inner_corner = + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt-inner-corner.png", + count = 6 + }, + outer_corner = + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt-outer-corner.png", + count = 6 + }, + side = + { + picture = "__RampantFixed__/graphics/tiles/fillableDirt/dirt-side.png", + count = 8 + } + }, + map_color={r=0.4196, g=0.3294, b=0.2196}, + ageing=0 + } +}) \ No newline at end of file diff --git a/Rampant_3.1.2/prototypes/utils/AttackBall.lua b/RampantFixed/prototypes/utils/AttackBall.lua similarity index 87% rename from Rampant_3.1.2/prototypes/utils/AttackBall.lua rename to RampantFixed/prototypes/utils/AttackBall.lua index 39f5c240..d9adb84c 100644 --- a/Rampant_3.1.2/prototypes/utils/AttackBall.lua +++ b/RampantFixed/prototypes/utils/AttackBall.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -- import local fireUtils = require("FireUtils") @@ -23,28 +7,28 @@ local projectileUtils = require("ProjectileUtils") -- constants -local DISALLOW_FRIENDLY_FIRE = settings.startup["rampant--disallowFriendlyFire"].value - -- imported functions local makeStream = streamUtils.makeStream local makeSticker = stickerUtils.makeSticker local makeProjectile = projectileUtils.makeProjectile +local makeClusterProjectile = projectileUtils.makeClusterProjectile local makeAcidSplashFire = fireUtils.makeAcidSplashFire + local makeFire = fireUtils.makeFire -local makeSpreadEffect = fireUtils.makeSpreadEffect +local makeSpreadOnceEffect = fireUtils.makeSpreadOnceEffect + -- dumb acid projectiles local AttackBall = {} function AttackBall.createAttackBall(attributes) - local templateAOEDamage = { amount = attributes.damage * 0.75, type = attributes.damageType or "acid" } local templateDirectDamage = { amount = attributes.damage * 0.25, type = attributes.damageType or "acid" } local templateArea = { type = "area", - radius = attributes.radius, - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or attributes.force or nil, + force = "not-same", + radius = attributes.radius, ignore_collision_condition = true, action_delivery = (attributes.areaActionDelivery and attributes.areaActionDelivery(attributes)) or { @@ -114,7 +98,6 @@ function AttackBall.createAttackBall(attributes) templateArea, { type = "direct", - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, action_delivery = { type = "instant", target_effects = targetEffects @@ -123,21 +106,38 @@ function AttackBall.createAttackBall(attributes) } local name + -- local template if (attributes.attackType == "stream") then + -- template = { + -- name = attributes.name, + -- tint = attributes.tint, + -- particleVertialAcceleration = attributes.particleVertialAcceleration, + -- particleHoizontalSpeed = attributes.particleHoizontalSpeed, + -- particleHoizontalSpeedDeviation = attributes.particleHoizontalSpeedDeviation, + -- actions = templateActions, + -- scale = attributes.scale + -- } attributes.actions = templateActions name = makeStream(attributes) else - name = makeProjectile(attributes, templateActions) + if attributes.clusterAttack then + name = makeClusterProjectile(attributes, templateActions) + else + name = makeProjectile(attributes, templateActions) + end end return name end -function AttackBall.createSpitFire(attributes) - local spawnEntityName = makeSpreadEffect({ +function AttackBall.createSpitFire(attributes, animationProjectile, shadowProjectile) + local damageModifier = (attributes.attackModifiers and attributes.attackModifiers.damage) or 1 + local fireDamageModifier = (attributes.attackModifiers and attributes.attackModifiers.fireDamage) or 1 + + local spawnEntityName = makeSpreadOnceEffect({ name = attributes.name, tint2 = attributes.tint2, - fireDamagePerTick = attributes.fireDamagePerTick, + fireDamagePerTick = attributes.fireDamagePerTick * fireDamageModifier, fireDamagePerTickType = attributes.fireDamagePerTickType, }) local stickerName = makeSticker({ @@ -154,7 +154,7 @@ function AttackBall.createSpitFire(attributes) name = attributes.name, tint2 = attributes.tint2 or {r=0, g=0.9, b=0, a=0.5}, spawnEntityName = spawnEntityName, - fireDamagePerTick = attributes.fireDamagePerTick, + fireDamagePerTick = attributes.fireDamagePerTick * fireDamageModifier, fireDamagePerTickType = attributes.fireDamagePerTickType, damageMaxMultipler = attributes.damageMaxMultipler, multiplerIncrease = attributes.multiplerIncrease, @@ -185,7 +185,7 @@ function AttackBall.createSpitFire(attributes) }, { type = "damage", - damage = { amount = attributes.damage, type = attributes.damageType or "fire" } + damage = { amount = attributes.damage*damageModifier, type = "acid" } } } } @@ -220,7 +220,8 @@ function AttackBall.createSpitFire(attributes) } } } - } + }, + animationProjectile, shadowProjectile ) end diff --git a/RampantFixed/prototypes/utils/AttackFlame.lua b/RampantFixed/prototypes/utils/AttackFlame.lua new file mode 100644 index 00000000..51d1fe2c --- /dev/null +++ b/RampantFixed/prototypes/utils/AttackFlame.lua @@ -0,0 +1,99 @@ +local attackFlame = {} + +-- imported + +local streamUtils = require("StreamUtils") +local fireUtils = require("FireUtils") +local stickerUtils = require("StickerUtils") + +-- constants + +-- imported functions + +local makeStream = streamUtils.makeStream +local makeFire = fireUtils.makeFire +local makeSticker = stickerUtils.makeSticker +local makeSpreadEffect = fireUtils.makeSpreadEffect +local makeSpreadOnceEffect = fireUtils.makeSpreadOnceEffect + +-- module code + +function attackFlame.createAttackFlame(attributes) + + local spawnEntityName = makeSpreadOnceEffect({ --makeSpreadEffect({ + name = attributes.name, + tint2 = attributes.tint2, + fireDamagePerTick = attributes.fireDamagePerTick, + fireDamagePerTickType = attributes.fireDamagePerTickType, + }) + local fireName = makeFire({ + name = attributes.name, + tint2 = attributes.tint2 or {r=0, g=0.9, b=0, a=0.5}, + spawnEntityName = spawnEntityName, + fireDamagePerTick = attributes.fireDamagePerTick, + fireDamagePerTickType = attributes.fireDamagePerTickType, + damageMaxMultipler = attributes.damageMaxMultipler, + multiplerIncrease = attributes.multiplerIncrease, + multiplerDecrease = attributes.multiplerDecrease + }) + local stickerName = makeSticker({ + name = attributes.name, + --spawnEntityName = spawnEntityName, + stickerDuration = attributes.stickerDuration, + stickerDamagePerTick = attributes.stickerDamagePerTick, + stickerDamagePerTickType = attributes.stickerDamagePerTickType, + stickerMovementModifier = attributes.stickerMovementModifier, + tint2 = attributes.tint2, + fireSpreadRadius = attributes.fireSpreadRadius + }) + + return makeStream({ + name = attributes.name, + tint2 = attributes.tint2 or {r=0, g=1, b=1, a=0.5}, + particleTimeout = attributes.particleTimeout, + scale = attributes.scale, + actions = { + { + type = "area", + radius = attributes.radius or 2.5, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "create-sticker", + show_in_tooltip = true, + sticker = stickerName, + check_buildability = true + }, + { + type = "create-entity", + entity_name = "water-splash", + tile_collision_mask = { "ground-tile" } + }, + { + type = "damage", + damage = { amount = attributes.damage, type = attributes.damageType or "fire" } + } + } + } + }, + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type= "create-fire", + show_in_tooltip = true, + entity_name = fireName, + check_buildability = true + } + } + } + } + }) +end + +return attackFlame diff --git a/Rampant_3.1.2/prototypes/utils/BeamUtils.lua b/RampantFixed/prototypes/utils/BeamUtils.lua similarity index 88% rename from Rampant_3.1.2/prototypes/utils/BeamUtils.lua rename to RampantFixed/prototypes/utils/BeamUtils.lua index 91c72ae2..0e61aeb4 100644 --- a/Rampant_3.1.2/prototypes/utils/BeamUtils.lua +++ b/RampantFixed/prototypes/utils/BeamUtils.lua @@ -1,23 +1,4 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local beamUtils = {} - -local DISALLOW_FRIENDLY_FIRE = settings.startup["rampant--disallowFriendlyFire"].value - function beamUtils.makeBubble(attributes) local name = attributes.name .. "-bubble-rampant" data:extend({{ @@ -30,8 +11,8 @@ function beamUtils.makeBubble(attributes) { filename = "__base__/graphics/entity/laser-bubble/laser-bubble.png", priority = "extra-high", - width = 8, - height = 8, + width = 8, + height = 8, tint = attributes.tint2, frame_count = 5 } @@ -52,11 +33,11 @@ function beamUtils.makeLaser(attributes) flags = {"not-on-map"}, collision_box = attributes.collisionBox or {{-0.3, -1.1}, {0.3, 1.1}}, acceleration = attributes.acceleration or 0.03, - force_condition = (settings.startup["rampant--disableCollidingProjectiles"].value and "not-same") or nil, + force_condition = "not-same", action = { type = "direct", - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, + force = "not-same", action_delivery = { type = "instant", @@ -84,7 +65,7 @@ function beamUtils.makeLaser(attributes) priority = "high", blend_mode = "additive" }, - speed = 0.15 + speed = 0.15 -- 0.15 }}) return name end @@ -97,10 +78,10 @@ function beamUtils.makeBeam(attributes) width = attributes.width or 0.5, collision_box = attributes.collisionBox or {{-0.3, -1.1}, {0.3, 1.1}}, damage_interval = attributes.damageInterval or 20, + force = "not-same", action = { type = "direct", - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, action_delivery = { type = "instant", @@ -239,7 +220,6 @@ function beamUtils.makeBeam(attributes) local name = attributes.name .. "-beam-rampant" result.name = name - data:extend({result}) return name end diff --git a/RampantFixed/prototypes/utils/BiterUtils.lua b/RampantFixed/prototypes/utils/BiterUtils.lua new file mode 100644 index 00000000..0cfb123f --- /dev/null +++ b/RampantFixed/prototypes/utils/BiterUtils.lua @@ -0,0 +1,1704 @@ +local biterFunctions = {} + +local sounds = require("__base__.prototypes.entity.sounds") +local unitSpawnerUtils = require("UnitSpawnerUtils") +local unitUtils = require("UnitUtils") +local wormUtils = require("WormUtils") +local particleUtils = require("ParticleUtils") + +local biterdieanimation = unitUtils.biterdieanimation +local biterattackanimation = unitUtils.biterattackanimation +local biterrunanimation = unitUtils.biterrunanimation +local spitter_alternative_attacking_animation_sequence = unitUtils.spitter_alternative_attacking_animation_sequence +local spawner_integration = unitSpawnerUtils.spawner_integration +local spawner_idle_animation = unitSpawnerUtils.spawner_idle_animation +local spawner_die_animation = unitSpawnerUtils.spawner_die_animation +local wormFoldedAnimation = wormUtils.wormFoldedAnimation +local wormPreparingAnimation = wormUtils.wormPreparingAnimation +local wormPreparedAnimation = wormUtils.wormPreparedAnimation +local wormPreparedAlternativeAnimation = wormUtils.wormPreparedAlternativeAnimation +local wormStartAttackAnimation = wormUtils.wormStartAttackAnimation +local wormEndAttackAnimation = wormUtils.wormEndAttackAnimation +local wormDieAnimation = wormUtils.wormDieAnimation +local biter_water_reflection = unitUtils.biter_water_reflection +local spitter_water_reflection = unitUtils.spitter_water_reflection +local math3d = require "math3d" -- + !ΠšΠ”Π 2021.11 +-- + !ΠšΠ”Π 2021.11 +local fireUtils = require("FireUtils") +fireUtils.makeAcidFireStream() +-- - !ΠšΠ”Π 2021.11 +local makeDamagedParticle = particleUtils.makeDamagedParticle + +local function makeSpitterCorpse(attributes) + local name = attributes.name .. "-corpse-rampant" + + local corpse = { + type = "corpse", + name = name, + icon = "__base__/graphics/icons/big-biter-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selectable_in_game = false, + selection_box = {{-1, -1}, {1, 1}}, + subgroup="corpses", + order = "c[corpse]-b[spitter]-a[small]", + flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map"}, + } + + corpse.animation = spitterdyinganimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint) + corpse.dying_speed = 0.04 + corpse.time_before_removed = 15 * 60 * 60 + corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } } + corpse.shuffle_directions_at_frame = 4 + corpse.final_render_layer = "lower-object-above-shadow" + + corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration" + corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes + corpse.ground_patch_fade_in_speed = 0.002 + corpse.ground_patch_fade_out_start = 50 * 60 + corpse.ground_patch_fade_out_duration = 20 * 60 + + local a = 1 + local d = 0.9 + corpse.ground_patch = + { + sheet = + { + filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png", + flags = { "low-object" }, + line_length = 4, + variation_count = 4, + frame_count = 1, + width = 84, + height = 68, + shift = util.by_pixel(1, 0), + tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, + scale = attributes.scale * 2, + hr_version = + { + filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png", + flags = { "low-object" }, + line_length = 4, + variation_count = 4, + frame_count = 1, + width = 164, + height = 134, + shift = util.by_pixel(-0.5,-0.5), + tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, + scale = attributes.scale + } + } + } + + data:extend( + { + corpse + }) + return name +end + +local function makeBiterCorpse(attributes) + local name = attributes.name .. "-corpse-rampant" + + local corpse = { + type = "corpse", + name = name, + icon = "__base__/graphics/icons/small-biter-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selection_box = {{-0.8, -0.8}, {0.8, 0.8}}, + selectable_in_game = false, + subgroup="corpses", + order = "c[corpse]-a[biter]-a[small]", + flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"} + } + + corpse.animation = biterdieanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint, attributes.altBiter) + corpse.dying_speed = 0.04 + corpse.time_before_removed = 15 * 60 * 60 + corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } } + corpse.shuffle_directions_at_frame = 7 + corpse.final_render_layer = "lower-object-above-shadow" + + corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration" + corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes + corpse.ground_patch_fade_in_speed = 0.002 + corpse.ground_patch_fade_out_start = 50 * 60 + corpse.ground_patch_fade_out_duration = 20 * 60 + + local a = 1 + local d = 0.9 + corpse.ground_patch = + { + sheet = + { + filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png", + flags = { "low-object" }, + line_length = 4, + variation_count = 4, + frame_count = 1, + width = 84, + height = 68, + shift = util.by_pixel(1, 0), + tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, + scale = attributes.scale * 2, + hr_version = + { + filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png", + flags = { "low-object" }, + line_length = 4, + variation_count = 4, + frame_count = 1, + width = 164, + height = 134, + shift = util.by_pixel(-0.5,-0.5), + tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, + scale = attributes.scale + } + } + } + + data:extend({ + corpse + }) + return name +end + +local function makeUnitSpawnerCorpse(attributes) + local name = attributes.name .. "-corpse-rampant" + data:extend({ + { + type = "corpse", + name = name, + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/biter-spawner-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-2, -2}, {2, 2}}, + selectable_in_game = false, + dying_speed = 0.04, + time_before_removed = 15 * 60 * 60, + subgroup="corpses", + order = "c[corpse]-c[spitter-spawner]", + final_render_layer = "remnants", + animation = + { + spawner_die_animation(0, attributes.tint, attributes.scale, attributes.tint2), + spawner_die_animation(1, attributes.tint, attributes.scale, attributes.tint2), + spawner_die_animation(2, attributes.tint, attributes.scale, attributes.tint2), + spawner_die_animation(3, attributes.tint, attributes.scale, attributes.tint2) + } + } + }) + return name +end + +local function makeWormCorpse(attributes) + local name = attributes.name .. "-corpse-rampant" + data:extend({ + { + type = "corpse", + name = name, + icon = "__base__/graphics/icons/medium-worm-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selection_box = {{-0.8, -0.8}, {0.8, 0.8}}, + selectable_in_game = false, + subgroup="corpses", + order = "c[corpse]-c[worm]-b[medium]", + flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"}, + dying_speed = 0.01, + time_before_removed = 15 * 60 * 60, + final_render_layer = "lower-object-above-shadow", + animation = wormDieAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + ground_patch = + { + sheet = worm_integration(attributes.scale) + } + } + }) + return name +end + +-- + !ΠšΠ”Π 2021.11 +function biterFunctions.addTrigger_effect(trigger, addTrigger) + if not trigger then + return {addTrigger} + end + if not (type(trigger)=="table") then + return {addTrigger} + end + if not addTrigger then + return trigger + end + + local returnValue = {} + if trigger["type"] then -- this is not array of triggers, we need {trigger1, trigger2, trigger} + returnValue = {trigger} + else + for i = 1, #trigger do + returnValue[i] = trigger[i] + end + end + returnValue[#returnValue+1] = addTrigger + return returnValue +end +-- - !ΠšΠ”Π 2021.11 + +function biterFunctions.makeBiter(attributes) + local resistances = {} + for k,v in pairs(attributes.resistances) do + v.type = k + resistances[#resistances+1] = v + end + -- print(name .. " " .. biterAttributes.health) + local collisionBoxRange = (attributes.collisionModifier or 1) + if not (collisionBoxRange == 0) then + collisionBoxRange = math.max(collisionBoxRange, 0.1) + end + + local entity = { + type = "unit", + name = attributes.name .. "-rampant", + localised_name = { + "", + {"rampant."..attributes.faction}, + {"rampant."..attributes.unitName}, + {"rampant.t"..attributes.tier} + }, + icon = "__base__/graphics/icons/small-biter.png", + icon_size = 64, + icon_mipmaps = 4, + flags = attributes.flags or {"placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air"}, + max_health = attributes.health or 1, + order = "b-b-a", + subgroup="enemies", + healing_per_tick = attributes.healing or 0, + damaged_trigger_effect = attributes.damaged_trigger_effect, + water_reflection = biter_water_reflection(attributes.scale), + resistances = resistances, + collision_box = { + {-0.4 * collisionBoxRange, -0.4 * collisionBoxRange}, + {0.4 * collisionBoxRange, 0.4 * collisionBoxRange} + }, + selection_box = { + {-0.7 * attributes.scale, -1.5 * attributes.scale}, + {0.7 * attributes.scale, 0.3 * attributes.scale} + }, + sticker_box = { + {-0.6 * attributes.scale, -0.8 * attributes.scale}, + {0.6 * attributes.scale, 0} + }, + attack_parameters = attributes.attack, + vision_distance = attributes.vision or 30, + movement_speed = attributes.movement, + loot = attributes.loot, + spawning_time_modifier = attributes.spawningTimeModifer or nil, + distance_per_frame = attributes.distancePerFrame or 0.1, + pollution_to_join_attack = attributes.pollutionToAttack or 200, + distraction_cooldown = attributes.distractionCooldown or 300, + corpse = makeBiterCorpse(attributes), +-- dying_explosion = attributes.explosion, + dying_trigger_effect = attributes.dyingEffect, + enemy_map_color = ((not settings.startup["rampantFixed--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, + affected_by_tiles = false, + dying_sound = sounds.biter_dying(0.3 + (0.05 * attributes.effectiveLevel)), + working_sound = sounds.biter_calls(0.2 + (0.05 * attributes.effectiveLevel)), + running_sound_animation_positions = {2,}, + run_animation = biterrunanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint, attributes.altBiter), + ai_settings = { destroy_when_commands_fail = false, allow_try_return_to_spawner = true } + } + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + entity.flags[#entity.flags+1] = attributes.additionalFlags[i] + end + end + if attributes.collisionMask then + entity.collision_mask = attributes.collisionMask + end + + if not settings.startup["rampantFixed--removeBloodParticles"].value then + entity.damaged_trigger_effect = biterFunctions.addTrigger_effect(entity.damaged_trigger_effect, makeDamagedParticle(attributes)) + end + return entity +end + +function biterFunctions.makeSpitter(attributes) + local resistances = {} + for k,v in pairs(attributes.resistances) do + v.type = k + resistances[#resistances+1] = v + end + -- print(name .. " " .. biterAttributes.health) + local entity = { + type = "unit", + name = attributes.name .. "-rampant", + localised_name = { + "", + {"rampant."..attributes.faction}, + {"rampant."..attributes.unitName}, + {"rampant.t"..attributes.tier} + }, + icon = "__base__/graphics/icons/small-spitter.png", + icon_size = 64, + icon_mipmaps = 4, + flags = attributes.flags or {"placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air"}, + max_health = attributes.health, + order = "b-b-a", + subgroup="enemies", + healing_per_tick = attributes.healing, + damaged_trigger_effect = attributes.damaged_trigger_effect, + resistances = resistances, + collision_box = {{-0.4 * attributes.scale * (attributes.collisionModifier or 1), -0.4 * attributes.scale * (attributes.collisionModifier or 1)}, + {0.4 * attributes.scale * (attributes.collisionModifier or 1), 0.4 * attributes.scale * (attributes.collisionModifier or 1)}}, + selection_box = {{-0.7 * attributes.scale, -1.5 * attributes.scale}, + {0.7 * attributes.scale, 0.3 * attributes.scale}}, + sticker_box = {{-0.6 * attributes.scale, -0.8 * attributes.scale}, + {0.6 * attributes.scale, 0}}, + attack_parameters = attributes.attack, + loot = attributes.loot, + vision_distance = attributes.vision or 30, + movement_speed = attributes.movement, + spawning_time_modifier = attributes.spawningTimeModifer or nil, + distance_per_frame = attributes.distancePerFrame or 0.1, + pollution_to_join_attack = attributes.pollutionToAttack or 200, + distraction_cooldown = attributes.distractionCooldown or 300, + alternative_attacking_frame_sequence = spitter_alternative_attacking_animation_sequence(), + corpse = makeSpitterCorpse(attributes), +-- dying_explosion = attributes.explosion, + enemy_map_color = ((not settings.startup["rampantFixed--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, + dying_trigger_effect = attributes.dyingEffect, + dying_sound = sounds.spitter_dying(0.3 + (0.05 * attributes.effectiveLevel)), + working_sound = sounds.biter_calls(0.2 + (0.05 * attributes.effectiveLevel)), + running_sound_animation_positions = {2,}, + water_reflection = spitter_water_reflection(attributes.scale), + affected_by_tiles = false, + run_animation = spitterrunanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + ai_settings = { destroy_when_commands_fail = false, allow_try_return_to_spawner = true } + } + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + entity.flags[#entity.flags+1] = attributes.additionalFlags[i] + end + end + if attributes.collisionMask then + entity.collision_mask = attributes.collisionMask + end + if not settings.startup["rampantFixed--removeBloodParticles"].value then + entity.damaged_trigger_effect = biterFunctions.addTrigger_effect(entity.damaged_trigger_effect, makeDamagedParticle(attributes)) + end + return entity +end + +function biterFunctions.makeUnitSpawner(attributes) + local resistances = {} + for k,v in pairs(attributes.resistances) do + v.type = k + resistances[#resistances+1] = v + end + -- print(attributes.name) + local o = { + type = "unit-spawner", + name = attributes.name .. "-rampant", + localised_name = { + "", + {"rampant."..attributes.faction}, + {"rampant."..attributes.unitName}, + {"rampant.t"..attributes.tier} + }, + icon = "__base__/graphics/icons/biter-spawner.png", + icon_size = 64, + icon_mipmaps = 4, + flags = {"placeable-player", "placeable-enemy", "not-repairable"}, + max_health = attributes.health, + order="b-b-g", + subgroup="enemies", + loot = attributes.loot, + resistances = resistances, + working_sound = + { + sound = + { + { + filename = "__base__/sound/creatures/spawner.ogg", + volume = 0.2 + (0.05 * attributes.effectiveLevel) + } + }, + apparent_volume = 0.4 + (0.1 * attributes.effectiveLevel) + }, + dying_sound = + { + { + filename = "__base__/sound/creatures/spawner-death-1.ogg", + volume = 0.4 + (0.05 * attributes.effectiveLevel) + }, + { + filename = "__base__/sound/creatures/spawner-death-2.ogg", + volume = 0.4 + (0.05 * attributes.effectiveLevel) + } + }, + healing_per_tick = attributes.healing or 0.02, + collision_box = {{-3.0 * attributes.scale, -2.0 * attributes.scale}, {2.0 * attributes.scale, 2.0 * attributes.scale}}, + selection_box = {{-3.5 * attributes.scale, -2.5 * attributes.scale}, {2.5 * attributes.scale, 2.5 * attributes.scale}}, + -- in ticks per 1 pu + pollution_absorption_absolute = attributes.pollutionAbsorptionAbs or 20, + pollution_absorption_proportional = attributes.pollutionAbsorptionPro or 0.01, + map_generator_bounding_box = {{-4.2 * attributes.scale, -3.2 * attributes.scale}, {3.2 * attributes.scale, 3.2 * attributes.scale}}, + corpse = makeUnitSpawnerCorpse(attributes), + dying_explosion = attributes.explosion or "blood-explosion-huge", + dying_trigger_effect = attributes.dyingEffect, + max_count_of_owned_units = attributes.unitsOwned or 7, + max_friends_around_to_spawn = attributes.unitsToSpawn or 5, + enemy_map_color = ((not settings.startup["rampantFixed--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, + animations = + { + spawner_idle_animation(0, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), + spawner_idle_animation(1, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), + spawner_idle_animation(2, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), + spawner_idle_animation(3, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint) + }, + integration = + { + sheet = spawner_integration(attributes.scale) + }, + result_units = attributes.unitSet, + -- With zero evolution the spawn rate is 6 seconds, with max evolution it is 2.5 seconds + spawning_cooldown = attributes.spawningCooldown or ((attributes.spawningCooldownStart and attributes.spawningCooldownEnd) and {attributes.spawningCooldownStart, attributes.spawningCooldownEnd}) or {360, 150}, + spawning_radius = attributes.spawningRadius or 10, + spawning_spacing = attributes.spawningSpacing or 3, + max_spawn_shift = 0, + max_richness_for_spawn_shift = 100, + build_base_evolution_requirement = attributes.evolutionRequirement or 0.0, + call_for_help_radius = attributes.helpRadius or 50, + spawn_decorations_on_expansion = true, + spawn_decoration = + { + { + decorative = "light-mud-decal", + spawn_min = 0, + spawn_max = 2, + spawn_min_radius = 2, + spawn_max_radius = 5, + }, + { + decorative = "dark-mud-decal", + spawn_min = 0, + spawn_max = 3, + spawn_min_radius = 2, + spawn_max_radius = 6, + }, + { + decorative = "enemy-decal", + spawn_min = 3, + spawn_max = 5, + spawn_min_radius = 2, + spawn_max_radius = 7, + }, + { + decorative = "enemy-decal-transparent", + spawn_min = 4, + spawn_max = 20, + spawn_min_radius = 2, + spawn_max_radius = 14, + radius_curve = 0.9 + }, + { + decorative = "muddy-stump", + spawn_min = 2, + spawn_max = 5, + spawn_min_radius = 3, + spawn_max_radius = 6, + }, + { + decorative = "red-croton", + spawn_min = 2, + spawn_max = 8, + spawn_min_radius = 3, + spawn_max_radius = 6, + }, + { + decorative = "red-pita", + spawn_min = 1, + spawn_max = 5, + spawn_min_radius = 3, + spawn_max_radius = 6, + }, + { + decorative = "lichen-decal", + spawn_min = 1, + spawn_max = 2, + spawn_min_radius = 2, + spawn_max_radius = 7 + } + } + } + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + entity.flags[#entity.flags+1] = attributes.additionalFlags[i] + end + end + if attributes.autoplace then + o["autoplace"] = enemy_spawner_autoplace(attributes.autoplace) + end + return o +end + +function biterFunctions.makeWorm(attributes) + local resistances = {} + for k,v in pairs(attributes.resistances) do + v.type = k + resistances[#resistances+1] = v + end + -- if attributes.clusterAttack then + -- error(serpent.dump(attributes.attack)) + -- end + -- print(name .. " " .. attributes.health) + local o = { + type = "turret", + name = attributes.name .. "-rampant", + localised_name = { + "", + {"rampant."..attributes.faction}, + {"rampant."..attributes.unitName}, + {"rampant.t"..attributes.tier} + }, + icon = "__base__/graphics/icons/medium-worm.png", + icon_size = 64, icon_mipmaps = 4, + flags = attributes.flags or {"placeable-player", "placeable-enemy", "not-repairable", "not-repairable", "breaths-air"}, + order="b-b-e", + subgroup="enemies", + max_health = attributes.health, + loot = attributes.loot, + -- shooting_cursor_size = 3.5 * attributes.scale, + resistances = resistances, + healing_per_tick = attributes.healing or 0.01, + collision_box = {{-1.1 * attributes.scale, -1.0 * attributes.scale}, {1.1 * attributes.scale, 1.0 * attributes.scale}}, + selection_box = {{-1.1 * attributes.scale, -1.0 * attributes.scale}, {1.1 * attributes.scale, 1.0 * attributes.scale}}, + shooting_cursor_size = attributes.cursorSize or 3, + rotation_speed = attributes.rotationSpeed or 1, + corpse = makeWormCorpse(attributes), + dying_explosion = attributes.explosion or "blood-explosion-big", + dying_trigger_effect = attributes.dyingEffect, + inventory_size = attributes.inventorySize, + dying_sound = sounds.worm_dying(0.3 + (0.05 * attributes.effectiveLevel)), + folded_speed = 0.01, + folded_speed_secondary = 0.024, + folded_animation = wormFoldedAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + preparing_speed = attributes.preparingSpeed or 0.024, + preparing_animation = wormPreparingAnimation(attributes.scale, attributes.tint, "forward", attributes.tint2 or attributes.tint), + preparing_sound = sounds.worm_standup(0.4 + (0.05 * attributes.effectiveLevel)), + prepared_speed = 1, -- 0.024 +-- prepared_speed_secondary = 0.012, --0.012, + prepared_animation = wormPreparedAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + prepared_sound = sounds.worm_breath(0.2 + (0.05 * attributes.effectiveLevel)), + -- prepared_alternative_speed = 0.5, --0.014, + -- prepared_alternative_speed_secondary = 0.5, --0.010, + -- prepared_alternative_chance = 0.2, + -- prepared_alternative_animation = wormPreparedAlternativeAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + -- prepared_alternative_sound = sounds.worm_roar_alternative(0.2 + (0.05 * attributes.effectiveLevel)), + + + starting_attack_speed = 0.1, --0.034, + starting_attack_animation = wormStartAttackAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + starting_attack_sound = sounds.worm_roars(0.2 + (0.05 * attributes.effectiveLevel)), + ending_attack_speed = 0.1, --0.016, + ending_attack_animation = wormEndAttackAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), + folding_speed = 0.1, --attributes.foldingSpeed or 0.015, + folding_animation = wormPreparingAnimation(attributes.scale, attributes.tint, "backward", attributes.tint2 or attributes.tint), + folding_sound = sounds.worm_fold (0.4 + (0.05 * attributes.effectiveLevel)), + prepare_range = attributes.prepareRange or (attributes.range and (attributes.range+7)) or 30, -- + !ΠšΠ”Π 2021.11 and (attributes.range+7)) + integration = worm_integration(attributes.scale), + attack_parameters = attributes.attack, + secondary_animation = true, + enemy_map_color = ((not settings.startup["rampantFixed--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, + random_animation_offset = true, + attack_from_start_frame = true, + + allow_turning_when_starting_attack = true, + build_base_evolution_requirement = attributes.evolutionRequirement or 0.0, + call_for_help_radius = attributes.helpRadius or 60, + spawn_decorations_on_expansion = true, + spawn_decoration = + { + { + decorative = "worms-decal", + spawn_min = 1, + spawn_max = 3, + spawn_min_radius = 1, + spawn_max_radius = 5 + }, + { + decorative = "shroom-decal", + spawn_min = 1, + spawn_max = 2, + spawn_min_radius = 1, + spawn_max_radius = 2 + }, + { + decorative = "enemy-decal", + spawn_min = 1, + spawn_max = 4, + spawn_min_radius = 1, + spawn_max_radius = 4, + }, + { + decorative = "enemy-decal-transparent", + spawn_min = 3, + spawn_max = 5, + spawn_min_radius = 1, + spawn_max_radius = 4, + }, + } + } + + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + entity.flags[#entity.flags+1] = attributes.additionalFlags[i] + end + end + if attributes.autoplace then + o["autoplace"] = enemy_worm_autoplace(attributes.autoplace) + end + return o + +end + +function biterFunctions.createSuicideAttack(attributes, blastWave, animation) + local o = { + type = "projectile", + range = 2, + cooldown = attributes.cooldown or 35, + range_mode = "bounding-box-to-bounding-box", + ammo_category = "melee", + ammo_type = { + category = "biological" + }, + sound = sounds.biter_roars(0.3 + (attributes.effectiveLevel * 0.05)), + animation = animation + } + + if attributes.nuclear then + o.range = 5 -- + !ΠšΠ”Π + o.ammo_type.action = { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = { + { + type = "damage", + show_in_tooltip = true, + affects_target = true, + damage = {amount = attributes.damage, type = "explosion"} + } + }, + source_effects = { + { + type = "damage", + affects_target = true, + show_in_tooltip = false, + damage = {amount = attributes.healthDamage or 5, type = "explosion"} + }, + -- }, + -- target_effects = + -- { + { + type = "set-tile", + tile_name = "nuclear-ground", + radius = attributes.radius * 0.25, + apply_projection = true, + tile_collision_mask = { "water-tile" }, + }, + { + type = "destroy-cliffs", + radius = attributes.radius * 0.18, + explosion = "explosion" + }, + { + type = "create-entity", + entity_name = "nuke-explosion" + }, + { + type = "camera-effect", + effect = "screen-burn", + duration = 60, + ease_in_duration = 5, + ease_out_duration = 60, + delay = 0, + strength = 6, + full_strength_max_distance = 200, + max_distance = 800 + }, + { + type = "play-sound", + sound = sounds.nuclear_explosion(0.9), + play_on_target_position = false, + -- min_distance = 200, + max_distance = 1000, + -- volume_modifier = 1, + audible_distance_modifier = 3 + }, + { + type = "play-sound", + sound = sounds.nuclear_explosion_aftershock(0.4), + play_on_target_position = false, + -- min_distance = 200, + max_distance = 1000, + -- volume_modifier = 1, + audible_distance_modifier = 3 + }, + -- { + -- type = "damage", + -- show_in_tooltip = true, + -- affects_target = true, + -- damage = {amount = attributes.damage, type = "explosion"} + -- }, + { + type = "create-entity", + entity_name = "huge-scorchmark", + check_buildability = true, + }, + { + type = "invoke-tile-trigger", + repeat_count = 1, + }, + { + type = "destroy-decoratives", + include_soft_decoratives = true, -- soft decoratives are decoratives with grows_through_rail_path = true + include_decals = true, + invoke_decorative_trigger = true, + decoratives_with_trigger_only = false, -- if true, destroys only decoratives that have trigger_effect set + radius = attributes.radius * 0.35 -- large radius for demostrative purposes + }, + { + type = "create-decorative", + decorative = "nuclear-ground-patch", + spawn_min_radius = attributes.radius * 0.1, + spawn_max_radius = attributes.radius * 0.12, + spawn_min = 30, + spawn_max = 40, + apply_projection = true, + spread_evenly = true + }, + { + type = "nested-result", + show_in_tooltip = true, + affects_target = true, + action = + { + type = "area", + target_entities = false, + show_in_tooltip = true, + trigger_from_target = true, + repeat_count = 100, + radius = attributes.radius * 0.30, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-ground-zero-projectile", + starting_speed = 0.6 * 0.8, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + show_in_tooltip = true, + affects_target = true, + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = attributes.radius, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave", + starting_speed = 0.5 * 0.7, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = attributes.radius * 0.75, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-cluster-nuke-explosion", + starting_speed = 0.5 * 0.7, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 50, + radius = attributes.radius * 0.07, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-fire-smoke-explosion", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = attributes.radius * 0.07, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-nuke-shockwave-explosion", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = attributes.radius * 0.85, + action_delivery = + { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-nuclear-smoke", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 10, + radius = attributes.radius * 0.18, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "create-entity", + entity_name = "nuclear-smouldering-smoke-source", + tile_collision_mask = { "water-tile" } + } + } + } + } + } + } + } + } + else + o.ammo_type.action = { + type = "direct", + action_delivery = { + type = "instant", + source_effects = { + { + type = "damage", + affects_target = true, + show_in_tooltip = false, + damage = {amount =attributes.healthDamage or 5, type = "explosion"} + } + }, + target_effects = { + { + type = "create-entity", + entity_name = attributes.attackExplosion + }, + { + type = "nested-result", + action = { + type = "area", + radius = attributes.radius, + force = "not-same", + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { + amount = attributes.damage, + type = attributes.damageType or "explosion" + } + }, + } + } + } + }, + { + type = "create-entity", + entity_name = attributes.attackScorchmark or "small-scorchmark", + check_buildability = true + } + } + + }, + } + + end + return o +end + +-- + !ΠšΠ”Π 2021.11 +function biterFunctions.makeflamerAtack(range, damage, animation) + local attack_parameters = + { + type = "stream", + cooldown = 20, + range = range, + min_range = 1, + + turn_range = 1, -- 1.0 / 3.0 + fire_penalty = 15, + damage_modifier = damage*0.04, + + gun_barrel_length = 0.4, + + animation = animation, + ammo_type = + { + category = "biological", + action = + { + type = "direct", + action_delivery = --flamesteam(damage) + { + type = "stream", + stream = "acidFire-stream-rampant", + source_offset = {0.15, -0.5} + } + } + }, + + cyclic_sound = + { + begin_sound = + { + { + filename = "__base__/sound/fight/flamethrower-turret-start-01.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-start-02.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-start-03.ogg", + volume = 0.5 + } + }, + middle_sound = + { + { + filename = "__base__/sound/fight/flamethrower-turret-mid-01.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-mid-02.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-mid-03.ogg", + volume = 0.5 + } + }, + end_sound = + { + { + filename = "__base__/sound/fight/flamethrower-turret-end-01.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-end-02.ogg", + volume = 0.5 + }, + { + filename = "__base__/sound/fight/flamethrower-turret-end-03.ogg", + volume = 0.5 + } + } + } + } + return attack_parameters +end +-- + !ΠšΠ”Π 2021.11 + +-- + !ΠšΠ”Π 2021.12 +function biterFunctions.makeMeleePoisonCloud(range, tier, animation) + local attack_parameters = + { + type = "projectile", + range = range, + cooldown = 30, + range_mode = "bounding-box-to-bounding-box", + ammo_category = "melee", + ammo_type = { + category = "biological", + action = + { + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "create-smoke", + show_in_tooltip = true, + entity_name = "poison-cloud-Dmg-Heal"..tier.."-cloud-rampant", + initial_height = 0 + } + } + } + } + }, + + }, + animation = animation + } + return attack_parameters +end +-- + !ΠšΠ”Π 2021.11 + + +function biterFunctions.makeWormAlienLootTable(name) + local biterLoot + + local a = settings.startup["bobmods-enemies-enableartifacts"] + local b = settings.startup["NE_Alien_Artifacts"] + local d = settings.startup["NE_Bio_Ammo_Damage"] + local artifacts = (a and a.value) or (b and b.value) or d + local c = settings.startup["bobmods-enemies-enablenewartifacts"] + local newArtifacts = c and c.value + + if newArtifacts and name then + local itemname = "alien-artifact-" .. name + if data.raw["item"][itemname] then + biterLoot = { + [1] = { item = itemname, count_min = 1, count_max = 1, probability = 0.5 }, + [2] = { item = itemname, count_min = 1, count_max = 2, probability = 0.5 }, + [3] = { item = itemname, count_min = 1, count_max = 3, probability = 0.5 }, + [4] = { item = itemname, count_min = 2, count_max = 3, probability = 0.5 }, + [5] = { item = itemname, count_min = 2, count_max = 3, probability = 0.5 }, + [6] = { item = itemname, count_min = 2, count_max = 3, probability = 0.5 }, + [7] = { item = itemname, count_min = 2, count_max = 4, probability = 0.75 }, + [8] = { item = itemname, count_min = 2, count_max = 4, probability = 0.75 }, + [9] = { item = itemname, count_min = 2, count_max = 4, probability = 0.75 }, + [10] = { item = itemname, count_min = 2, count_max = 4, probability = 0.75 } + } + end + elseif artifacts then + biterLoot = { + [1] = { item = "alien-artifact", count_min = 1, count_max = 1, probability = 0.5 }, + [2] = { item = "alien-artifact", count_min = 1, count_max = 2, probability = 0.5 }, + [3] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, + [4] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, + [5] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, + [6] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, + [7] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, + [8] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, + [9] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, + [10] = { item = "alien-artifact", count_min = 3, count_max = 4, probability = 0.75 } + } + end + + return biterLoot +end + +function biterFunctions.makeSpawnerAlienLootTable(name) + local biterLoot + local a = settings.startup["bobmods-enemies-enableartifacts"] + local b = settings.startup["NE_Alien_Artifacts"] + local d = settings.startup["NE_Bio_Ammo_Damage"] + local artifacts = (a and a.value) or (b and b.value) or d + local c = settings.startup["bobmods-enemies-enablenewartifacts"] + local newArtifacts = c and c.value + + if newArtifacts and name then + local itemname = "alien-artifact-" .. name + if data.raw["item"][itemname] then + biterLoot = { + [1] = { item = itemname, count_min = 1, count_max = 1, probability = 0.5 }, + [2] = { item = itemname, count_min = 1, count_max = 2, probability = 0.5 }, + [3] = { item = itemname, count_min = 1, count_max = 3, probability = 0.5 }, + [4] = { item = itemname, count_min = 2, count_max = 4, probability = 0.5 }, + [5] = { item = itemname, count_min = 2, count_max = 5, probability = 0.5 }, + [6] = { item = itemname, count_min = 2, count_max = 5, probability = 0.5 }, + [7] = { item = itemname, count_min = 2, count_max = 6, probability = 0.75 }, + [8] = { item = itemname, count_min = 2, count_max = 6, probability = 0.75 }, + [9] = { item = itemname, count_min = 3, count_max = 7, probability = 0.75 }, + [10] = { item = itemname, count_min = 3, count_max = 7, probability = 0.75 } + } + end + elseif artifacts then + biterLoot = { + [1] = { item = "alien-artifact", count_min = 1, count_max = 1, probability = 0.5 }, + [2] = { item = "alien-artifact", count_min = 1, count_max = 2, probability = 0.5 }, + [3] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, + [4] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.5 }, + [5] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, + [6] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, + [7] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.75 }, + [8] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, + [9] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, + [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } + } + end + + return biterLoot +end + +function biterFunctions.makeUnitAlienLootTable(name) + local biterLoot + local a = settings.startup["bobmods-enemies-enableartifacts"] + local b = settings.startup["NE_Alien_Artifacts"] + local artifacts = (a and a.value) or (b and b.value) + local c = settings.startup["bobmods-enemies-enablesmallartifacts"] + local smallArtifacts = (c and c.value) or (b and b.value) + local d = settings.startup["bobmods-enemies-enablenewartifacts"] + local newArtifacts = d and d.value + + if (c and c.value) and newArtifacts and name then + local itemname = "small-alien-artifact-" .. name + if data.raw["item"][itemname] then + biterLoot = { + [1] = { item = itemname, count_min = 1, count_max = 1, probability = 0.25 }, + [2] = { item = itemname, count_min = 1, count_max = 2, probability = 0.25 }, + [3] = { item = itemname, count_min = 1, count_max = 3, probability = 0.25 }, + [4] = { item = itemname, count_min = 2, count_max = 4, probability = 0.5 }, + [5] = { item = itemname, count_min = 2, count_max = 5, probability = 0.5 }, + [6] = { item = itemname, count_min = 2, count_max = 5, probability = 0.5 }, + [7] = { item = itemname, count_min = 2, count_max = 6, probability = 0.75 }, + [8] = { item = itemname, count_min = 2, count_max = 6, probability = 0.75 }, + [9] = { item = itemname, count_min = 3, count_max = 7, probability = 0.75 }, + [10] = { item = itemname, count_min = 3, count_max = 7, probability = 0.75 } + } + end + elseif smallArtifacts then + biterLoot = { + [1] = { item = "small-alien-artifact", count_min = 1, count_max = 1, probability = 0.25 }, + [2] = { item = "small-alien-artifact", count_min = 1, count_max = 2, probability = 0.25 }, + [3] = { item = "small-alien-artifact", count_min = 1, count_max = 3, probability = 0.25 }, + [4] = { item = "small-alien-artifact", count_min = 2, count_max = 4, probability = 0.5 }, + [5] = { item = "small-alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, + [6] = { item = "small-alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, + [7] = { item = "small-alien-artifact", count_min = 2, count_max = 6, probability = 0.75 }, + [8] = { item = "small-alien-artifact", count_min = 2, count_max = 6, probability = 0.75 }, + [9] = { item = "small-alien-artifact", count_min = 3, count_max = 7, probability = 0.75 }, + [10] = { item = "small-alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } + } + elseif artifacts then + biterLoot = { + [1] = nil, + [2] = nil, + [3] = nil, + [4] = nil, + [5] = nil, + [6] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, + [7] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.75 }, + [8] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, + [9] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, + [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } + } + end + + return biterLoot +end + +------- SchallAlienLoot +function biterFunctions.makeSchallAlienLootTables() + local lootTables = {} + if not settings.startup["alienloot-artifact-drop"] then + return lootTables + end + local artifactDrop = settings.startup["alienloot-artifact-drop"].value + local tierMultiplier = settings.startup["alienloot-loot-tier-multiplier"].value + local artifactAmountSpawner = settings.startup["alienloot-artifact-amount-spawner"].value + local richness = settings.startup["alienloot-richness"].value + + local richness_Table = { + ["none"] = 0, + ["basic"] = 1, + ["low"] = 1.5, + ["medium"] = 2, + ["2Γ—"] = 4, + ["4Γ—"] = 8, + } + local count_max = (richness_Table[richness] or 0) + if count_max == 0 then + return lootTables + end + + local alienOre1 = "alien-ore-1" + local alienOre2 = "alien-ore-2" + local alienOre3 = "alien-ore-3" + local alienArtifact = "alien-artifact" + local tierMultipliers = {} + for i = 1, 4 do + tierMultipliers[i] = tierMultiplier^(i-1) + end + local artifact_table = { + ["off"] = {spawner = false, worm = false, mover = false}, + ["spawner"] = {spawner = true, worm = false, mover = false}, + ["spawner-worm"] = {spawner = true, worm = true, mover = false}, + ["all"] = {spawner = true, worm = true, mover = true }, + } + + if artifact_table[artifactDrop].mover then + lootTables.biterLoot = { + [1] = {{ item = alienOre1, count_min = 1, count_max = count_max, probability = 0.5 }}, + [2] = {{ item = alienOre1, count_min = 1, count_max = count_max, probability = 1}}, + [3] = {{ item = alienOre1, count_min = 1, count_max = count_max, probability = 1}, { item = alienOre2, count_min = 1, count_max = count_max, probability = 0.25}}, + [4] = {{ item = alienOre1, count_min = 1, count_max = count_max, probability = 1}, { item = alienOre2, count_min = 1, count_max = count_max, probability = 0.5}}, + [5] = {{ item = alienOre1, count_min = 1, count_max = count_max, probability = 0.5}, { item = alienOre2, count_min = 1, count_max = count_max, probability = 1}}, + [6] = {{ item = alienOre2, count_min = 1, count_max = count_max, probability = 1}, { item = alienOre3, count_min = 1, count_max = count_max, probability = 0.25}}, + [7] = {{ item = alienOre2, count_min = 1, count_max = count_max, probability = 0.5}, { item = alienOre3, count_min = 1, count_max = count_max, probability = 0.5}}, + [8] = {{ item = alienOre3, count_min = 1, count_max = count_max, probability = 1}, { item = alienArtifact, count_min = 1, count_max = count_max, probability = 0.25}}, + [9] = {{ item = alienOre3, count_min = 1, count_max = count_max, probability = 0.5}, { item = alienArtifact, count_min = 1, count_max = count_max, probability = 0.5}}, + [10] ={{ item = alienOre3, count_min = 1, count_max = count_max, probability = 0.5},{ item = alienArtifact, count_min = 1, count_max = count_max, probability = 1}}, + } + end + if artifact_table[artifactDrop].worm then + lootTables.wormLoot = { + [1] = {{ item = alienArtifact, count_min = 1, count_max = count_max, probability = 0.25 }}, + [2] = {{ item = alienArtifact, count_min = 1, count_max = count_max, probability = 0.30 }}, + [3] = {{ item = alienArtifact, count_min = 1, count_max = count_max, probability = 0.35 }}, + [4] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[2], probability = 0.40 }}, + [5] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[2], probability = 0.45 }}, + [6] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[2], probability = 0.50 }}, + [7] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[3], probability = 0.55 }}, + [8] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[3], probability = 0.60 }}, + [9] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[3], probability = 0.65 }}, + [10] = {{ item = alienArtifact, count_min = 1, count_max = count_max * tierMultipliers[4], probability = 0.70 }} + } + end + if artifact_table[artifactDrop].spawner then + lootTables.spawnerLoot = { + [1] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner, probability = 0.65 }}, + [2] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner, probability = 0.70 }}, + [3] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner, probability = 0.75 }}, + [4] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[2], probability = 0.80 }}, + [5] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[2], probability = 0.85 }}, + [6] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[2], probability = 0.90 }}, + [7] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[3], probability = 0.95 }}, + [8] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[3], probability = 1.00 }}, + [9] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[3], probability = 1.00 }}, + [10] = {{ item = alienArtifact, count_min = 1, count_max = artifactAmountSpawner * tierMultipliers[4], probability = 1.00 }} + } + end + return lootTables +end +------- +------- alien-module mod (aka Alien Loot Economy). +function biterFunctions.makeAlienLootEconomyTables() + local lootTables = {} + if not settings.startup["alien-module-drop-amount"] then + return lootTables + end + local kf = settings.startup["alien-module-drop-amount"].value / 100 + + local alienOre = "artifact-ore" + + lootTables.biterLoot = { + [1] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.2}}, + [2] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.3}}, + [3] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.4}}, + [4] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.5}}, + [5] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.6}}, + [6] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.7}}, + [7] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.8}}, + [8] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 0.9}}, + [9] = {{ item = alienOre, count_min = kf, count_max = kf, probability = 1}}, + [10] ={{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 1}}, + } + lootTables.wormLoot = { + [1] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.2}}, + [2] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.3}}, + [3] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.4}}, + [4] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.5}}, + [5] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.6}}, + [6] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.7}}, + [7] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.8}}, + [8] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 0.9}}, + [9] = {{ item = alienOre, count_min = kf, count_max = 2*kf, probability = 1}}, + [10] ={{ item = alienOre, count_min = 2*kf, count_max = 3*kf, probability = 1}}, + } + lootTables.spawnerLoot = { + [1] = {{ item = alienOre, count_min = 2*kf, count_max = 3*kf, probability = 1}}, + [2] = {{ item = alienOre, count_min = 3*kf, count_max = 4*kf, probability = 1}}, + [3] = {{ item = alienOre, count_min = 4*kf, count_max = 5*kf, probability = 1}}, + [4] = {{ item = alienOre, count_min = 5*kf, count_max = 6*kf, probability = 1}}, + [5] = {{ item = alienOre, count_min = 6*kf, count_max = 7*kf, probability = 1}}, + [6] = {{ item = alienOre, count_min = 7*kf, count_max = 8*kf, probability = 1}}, + [7] = {{ item = alienOre, count_min = 8*kf, count_max = 9*kf, probability = 1}}, + [8] = {{ item = alienOre, count_min = 9*kf, count_max = 10*kf, probability = 1}}, + [9] = {{ item = alienOre, count_min = 10*kf, count_max = 12*kf, probability = 1}}, + [10] ={{ item = alienOre, count_min = 12*kf, count_max = 15*kf, probability = 1}}, + } + return lootTables +end +------- +function biterFunctions.findRange(entity) + return entity.attack_parameters.range +end + +local function findKey(key, obj) + for k,v in pairs(obj) do + if (k == key) and v then + return v + elseif (type(v) == "table") then + local val = findKey(key, v) + if val then + return val + end + end + end +end + +function biterFunctions.findRunScale(entity) + return findKey("scale", entity.run_animation.layers) +end + +function biterFunctions.findTint(entity) + return findKey("tint", entity.run_animation.layers) +end + +function biterFunctions.createElectricAttack(attributes, electricBeam, animation) + return + { + type = "beam", + ammo_category = "biological", + range_mode = "bounding-box-to-bounding-box", + cooldown = attributes.cooldown or 20, + warmup = attributes.warmup, + min_attack_distance = (attributes.range and (attributes.range - 2)) or 15, + range = (attributes.range and (attributes.range + 2)) or 15, + ammo_type = + { + category = "biological", + action = + { + type = "line", + range = (attributes.range and (attributes.range + 2)) or 15, + width = attributes.width or 0.5, + force = "not-same", + action_delivery = (attributes.actions and attributes.actions(attributes, electricBeam)) or + { + type = "beam", + beam = electricBeam or "electric-beam", + duration = attributes.duration or 20 + } + } + }, + animation = animation + } +end + +function biterFunctions.createProjectileAttack(attributes, projectile, animation) + local speed_modifier = 1 + if attributes.clusterAttack then + speed_modifier = 0.8 + end + local rangeModifier = (attributes.attackModifiers and attributes.attackModifiers.range) or 0 + local damageModifier = (attributes.attackModifiers and attributes.attackModifiers.damage) or 1 + return { + type = "projectile", + ammo_category = "biological", + range_mode = "bounding-box-to-bounding-box", + cooldown = attributes.cooldown or 15, + warmup = attributes.warmup, + cooldown_deviation = 0.15, + projectile_creation_distance = 0.6, + range = rangeModifier + (attributes.range or 20), + min_attack_distance = rangeModifier + ((attributes.range and (attributes.range - 2)) or 20), + lead_target_for_projectile_speed = 0.95, + use_shooter_direction = true, + ammo_type = + { + category = "biological", + clamp_position = true, + target_type = "position", + action = + { + type = "direct", + action_delivery = + { + type = "projectile", + projectile = projectile or "defender-bullet", + starting_speed = (attributes.startingSpeed or 0.6)*speed_modifier, + max_range = rangeModifier + (attributes.maxRange or (attributes.range + 1) or 20) + } + } + }, + animation = animation + } +end + +-- + !ΠšΠ”Π 2021.11 +function biterFunctions.createSpawnAttack(attributes, projectile, animation) + return { + type = "projectile", + ammo_category = "biological", + range_mode = "bounding-box-to-bounding-box", + cooldown = attributes.cooldown or 15, + warmup = attributes.warmup, + cooldown_deviation = 0.15, + projectile_creation_distance = 0.6, + range = attributes.range or 20, + min_attack_distance = (attributes.range and (attributes.range - 2)) or 20, + lead_target_for_projectile_speed = 0.95, + use_shooter_direction = true, + ammo_type = + { + category = "biological", + clamp_position = true, + target_type = "position", + action = + { + type = "direct", + action_delivery = + { + type = "projectile", + projectile = projectile, + starting_speed = attributes.startingSpeed or 0.6, + max_range = attributes.maxRange or (attributes.range + 1) or 20 + } + } + }, + animation = animation + } + +end +-- - !ΠšΠ”Π + +function biterFunctions.createMeleeAttack(attackAttributes) + local meleeAttackEffects = { + type = "damage", + damage = { amount = attackAttributes.damage * 0.25, type = attackAttributes.damageType or "physical" } + } + + if attackAttributes.meleePuddleGenerator then + local o = {} + o[1] = meleeAttackEffects + o[2] = attackAttributes.meleePuddleGenerator(attackAttributes) + meleeAttackEffects = o + end + return { + type = "projectile", + range = attackAttributes.range or 0.5, + cooldown = attackAttributes.cooldown or 35, + cooldown_deviation = 0.15, + range_mode = "bounding-box-to-bounding-box", + ammo_category = "melee", + ammo_type = { + category = "melee", + target_type = "entity", + action = + { + { + type = "area", + radius = attackAttributes.radius, + force = "not-same", + ignore_collision_condition = true, + action_delivery = + { + type = "instant", + source_effects = attackAttributes.sourceEffect and attackAttributes.sourceEffect(attackAttributes), + target_effects = + { + type = "damage", + damage = { amount = attackAttributes.damage * 0.75, type = attackAttributes.damageType or "physical" } + } + } + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = meleeAttackEffects + } + } + } + }, + sound = sounds.biter_roars(0.2 + (attackAttributes.effectiveLevel * 0.05)), + animation = biterattackanimation(attackAttributes.scale, attackAttributes.tint, attackAttributes.tint2 or attackAttributes.tint, attackAttributes.altBiter) + } +end + +function biterFunctions.biterAttackSounds(effectiveLevel) + return { + { + filename = "__base__/sound/creatures/Spiters_1_1.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_1_2.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_2_1.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_2_2.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_3_1.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_3_2.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_4_1.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_4_2.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_5_1.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + }, + { + filename = "__base__/sound/creatures/Spiters_5_2.ogg", + volume = 0.2 + (effectiveLevel * 0.05) + } + } +end + +function biterFunctions.createRangedAttack(attributes, attack, animation) + if (attributes.attackType == "stream") then + return biterFunctions.createStreamAttack(attributes, attack, animation) + elseif (attributes.attackType == "projectile") then + return biterFunctions.createProjectileAttack(attributes, attack, animation) + else + error("Unknown range attack") + end +end + +function biterFunctions.createStreamAttack(attributes, fireAttack, animation) + local attack = { + type = "stream", + ammo_category = "biological", + cooldown = attributes.cooldown, + range = attributes.range, + min_range = attributes.minRange, + cooldown_deviation = 0.15, + + turn_range = attributes.turnRange, + fire_penalty = attributes.firePenalty, + + warmup = attributes.warmup or 0, + + damage_modifier = attributes.damageModifier or 1.0, + range_mode = "bounding-box-to-bounding-box", + lead_target_for_projectile_speed = attributes.particleHoizontalSpeed or 0.6, + + projectile_creation_parameters = spitter_shoot_shiftings(attributes.scale, attributes.scale * 20), + + use_shooter_direction = true, + + gun_barrel_length = 2 * attributes.scale, + gun_center_shift = { + north = {0, -0.65 * attributes.scale}, + east = {0, 0}, + south = {0, 0}, + west = {0, 0} + }, + ammo_type = + { + category = "biological", + action = + { + type = "direct", + action_delivery = + { + type = "stream", + stream = fireAttack, + duration = 160, + } + } + }, + + cyclic_sound = + { + begin_sound = biterFunctions.biterAttackSounds(attributes.effectiveLevel), + middle_sound = + { + { + filename = attributes.midSound or "__RampantFixed__/sounds/attacks/acid-mid.ogg", + volume = 0.2 + (attributes.effectiveLevel * 0.05) + } + }, + end_sound = + { + { + filename = attributes.endSound or "__RampantFixed__/sounds/attacks/acid-end.ogg", + volume = 0.2 + (attributes.effectiveLevel * 0.05) + } + } + }, + animation = animation + } + + return attack +end + +function biterFunctions.makeResistance(name, decrease, percentage) + local obj = { + type = name, + } + if (decrease ~= 0) then + obj.decrease = decrease + end + if (percentage ~= 0) then + obj.percentage = percentage + end + return obj +end + +return biterFunctions diff --git a/Rampant_3.1.2/prototypes/utils/BombUtils.lua b/RampantFixed/prototypes/utils/BombUtils.lua similarity index 77% rename from Rampant_3.1.2/prototypes/utils/BombUtils.lua rename to RampantFixed/prototypes/utils/BombUtils.lua index 12fc9dfc..96f42356 100644 --- a/Rampant_3.1.2/prototypes/utils/BombUtils.lua +++ b/RampantFixed/prototypes/utils/BombUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local bombUtils = {} function bombUtils.makeAtomicBlast(attributes) diff --git a/RampantFixed/prototypes/utils/ColorUtils.lua b/RampantFixed/prototypes/utils/ColorUtils.lua new file mode 100644 index 00000000..504f5847 --- /dev/null +++ b/RampantFixed/prototypes/utils/ColorUtils.lua @@ -0,0 +1,9 @@ +local colorUtils = {} + +-- module code + +function colorUtils.makeColor(r_,g_,b_,a_) + return { r = r_ * a_, g = g_ * a_, b = b_ * a_, a = a_ } +end + +return colorUtils diff --git a/Rampant_3.1.2/prototypes/utils/DroneUtils.lua b/RampantFixed/prototypes/utils/DroneUtils.lua similarity index 85% rename from Rampant_3.1.2/prototypes/utils/DroneUtils.lua rename to RampantFixed/prototypes/utils/DroneUtils.lua index f44936d8..3262d519 100644 --- a/Rampant_3.1.2/prototypes/utils/DroneUtils.lua +++ b/RampantFixed/prototypes/utils/DroneUtils.lua @@ -1,24 +1,18 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - -local biterUtils = require("BiterUtils") local util = require ("util") local droneUtils = {} -local DISALLOW_FRIENDLY_FIRE = settings.startup["rampant--disallowFriendlyFire"].value +------------ +local flying_layer +local collision_mask_util_extended +if mods["combat-mechanics-overhaul"] then + collision_mask_util_extended = require("__combat-mechanics-overhaul__/collision-mask-util-extended/data/collision-mask-util-extended") +else + collision_mask_util_extended = require("collision-mask-util-extended/data/collision-mask-util-extended") +end +flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") +------------ + function droneUtils.makeDrone(attributes) local n = attributes.name .. "-drone-rampant" @@ -28,19 +22,25 @@ function droneUtils.makeDrone(attributes) resistances[#resistances+1] = v end -- attributes.name = name - + local scale = attributes.scale -- 0.5 or local drone = { type = "combat-robot", name = n, - localised_name = biterUtils.getLocalisedName(attributes), + localised_name = { + "", + {"rampant."..attributes.faction}, + {"rampant."..attributes.unitName}, + {"rampant.t"..attributes.tier} + }, icon = "__base__/graphics/icons/defender.png", icon_size = 32, - flags = attributes.flags or {"placeable-off-grid", "not-on-map", "not-repairable", "breaths-air", "hidden"}, + flags = {"placeable-off-grid", "not-on-map", "not-repairable", "breaths-air", "hidden"}, subgroup="capsule", order="e-a-a", max_health = attributes.health or 60, healing_per_tick = attributes.healing, alert_when_damaged = false, + resistances = resistances, collision_box = {{0, 0}, {0, 0}}, selection_box = {{-0.5, -1.5}, {0.5, -0.5}}, distance_per_frame = attributes.distancePerFrame or 0, @@ -65,7 +65,7 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = {0, 0.015625}, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot.png", priority = "high", @@ -76,7 +76,7 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = util.by_pixel(0, 0.25), - scale = attributes.scale * 0.5 + scale = scale * 0.5 } }, { @@ -90,7 +90,7 @@ function droneUtils.makeDrone(attributes) direction_count = 16, shift = {0, -0.125}, -- apply_runtime_tint = true, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-mask.png", priority = "high", @@ -102,7 +102,7 @@ function droneUtils.makeDrone(attributes) direction_count = 16, shift = util.by_pixel(0, -4.75), -- apply_runtime_tint = true, - scale = attributes.scale * 0.5 + scale = scale * 0.5 } }, } @@ -117,7 +117,7 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = {0.859375, 0.609375}, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-shadow.png", priority = "high", @@ -127,7 +127,7 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = util.by_pixel(25.5, 19), - scale = attributes.scale * 0.5 + scale = scale * 0.5 } }, in_motion = @@ -145,7 +145,7 @@ function droneUtils.makeDrone(attributes) direction_count = 16, shift = {0, 0.015625}, y = 33, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot.png", priority = "high", @@ -157,7 +157,7 @@ function droneUtils.makeDrone(attributes) direction_count = 16, shift = util.by_pixel(0, 0.25), y = 59, - scale = attributes.scale * 0.5 + scale = scale * 0.5 } }, { @@ -171,7 +171,7 @@ function droneUtils.makeDrone(attributes) tint = attributes.tint2, shift = {0, -0.125}, y = 16, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-mask.png", priority = "high", @@ -183,7 +183,7 @@ function droneUtils.makeDrone(attributes) tint = attributes.tint2, shift = util.by_pixel(0, -4.75), y = 21, - scale = attributes.scale * 0.5 + scale = scale * 0.5 } }, } @@ -198,7 +198,7 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = {0.859375, 0.609375}, - scale = attributes.scale, + scale = scale, hr_version = { filename = "__base__/graphics/entity/defender-robot/hr-defender-robot-shadow.png", priority = "high", @@ -208,15 +208,21 @@ function droneUtils.makeDrone(attributes) frame_count = 1, direction_count = 16, shift = util.by_pixel(25.5, 19), - scale = attributes.scale * 0.5 + scale = scale * 0.5 } } } - if attributes.appendFlags then - for flag in pairs(attributes.appendFlags) do - drone.flags[#drone.flags+1] = flag - end - end + + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + drone.flags[#drone.flags+1] = attributes.additionalFlags[i] + end + end + + if flying_layer then + drone.collision_mask = {flying_layer, "not-colliding-with-itself"} + drone.collision_box = {{0, 0}, {0, 0}} + end return drone end @@ -226,7 +232,7 @@ function droneUtils.createCapsuleProjectile(attributes, entityName) local actions = { { type = "direct", - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, + force = "not-same", action_delivery = { type = "instant", @@ -242,6 +248,7 @@ function droneUtils.createCapsuleProjectile(attributes, entityName) }, { type = "damage", + force = "not-same", damage = {amount = attributes.damage or 5, type = attributes.damageType or "explosion"} } } @@ -261,7 +268,7 @@ function droneUtils.createCapsuleProjectile(attributes, entityName) collision_mask = attributes.collisionMask, direction_only = attributes.attackDirectionOnly, piercing_damage = attributes.piercingDamage or 0, - force_condition = (settings.startup["rampant--disableCollidingProjectiles"].value and "not-same") or nil, + force_condition = "not-same", acceleration = attributes.acceleration or 0.01, action = actions, light = {intensity = 0.5, size = 4}, @@ -312,6 +319,12 @@ function droneUtils.createCapsuleProjectile(attributes, entityName) } } } + + if attributes.additionalFlags then + for i = 1, #attributes.additionalFlags do + cap.flags[#cap.flags+1] = attributes.additionalFlags[i] + end + end data:extend({cap}) return n diff --git a/Rampant_3.1.2/prototypes/utils/FireUtils.lua b/RampantFixed/prototypes/utils/FireUtils.lua similarity index 76% rename from Rampant_3.1.2/prototypes/utils/FireUtils.lua rename to RampantFixed/prototypes/utils/FireUtils.lua index 14f21365..4dbd811c 100644 --- a/Rampant_3.1.2/prototypes/utils/FireUtils.lua +++ b/RampantFixed/prototypes/utils/FireUtils.lua @@ -1,24 +1,8 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local fireUtils = {} +-- constants -- imported -local biterUtils = require("BiterUtils") local colorUtils = require("ColorUtils") local imageUtils = require("ImageUtils") @@ -41,7 +25,8 @@ function fireUtils.makeSpreadEffect(attributes) name = name, flags = {"placeable-off-grid", "not-on-map"}, - damage_per_tick = { amount = attributes.fireDamagePerTick or 45/60, type = attributes.fireDamagePerTickType or "fire" }, + -- damage_per_tick = { amount = attributes.fireDamagePerTick or 45/60, type = attributes.fireDamagePerTickType or "fire" }, + damage_per_tick = { amount = 0, type = attributes.fireDamagePerTickType or "fire" }, spawn_entity = name, maximum_spread_count = 100, @@ -60,6 +45,134 @@ function fireUtils.makeSpreadEffect(attributes) smoke_fade_out_duration = 130, delay_between_initial_flames = 20, + on_damage_tick_effect = + { + type = "area", + radius = attributes.radius or 2.5, + force = "not-same", + ignore_collision_condition = true, + -- filter_enabled = true, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = attributes.fireDamagePerTick or 45/10, type = attributes.fireDamagePerTickType or "fire" } + } + } + } + }, + + small_tree_fire_pictures = create_small_tree_flame_animations({ blend_mode = "additive", animation_speed = 0.5, scale = 0.7 * 0.75, tint2 = attributes.tint2 }), + + pictures = create_fire_pictures({ blend_mode = "additive", animation_speed = 1, scale = 0.5 * 1.25, tint2 = attributes.tint2}), + + smoke_source_pictures = + { + { + filename = "__base__/graphics/entity/fire-flame/fire-smoke-source-1.png", + line_length = 8, + width = 101, + height = 138, + frame_count = 31, + axially_symmetrical = false, + direction_count = 1, + scale = 0.6, + shift = {-0.109375 * 0.6, -1.1875 * 0.6}, + animation_speed = 0.5, + tint = makeColor(0,1,0, 0.75), + }, + { + filename = "__base__/graphics/entity/fire-flame/fire-smoke-source-2.png", + line_length = 8, + width = 99, + height = 138, + frame_count = 31, + axially_symmetrical = false, + direction_count = 1, + scale = 0.6, + shift = {-0.203125 * 0.6, -1.21875 * 0.6}, + animation_speed = 0.5, + tint = makeColor(0,1,0, 0.75), + }, + }, + + trivial_smoke = + { + { + name = smokeName, + deviation = {0.5, 0.5}, + frequency = 0.25 / 2, + position = {0.0, -0.8}, + starting_vertical_speed = 0.008, + starting_vertical_speed_deviation = 0.05, + starting_frame_deviation = 60, + height = -0.5, + } + }, + + light = {intensity = 1, size = 20}, + + working_sound = + { + sound = { filename = "__base__/sound/furnace.ogg" }, + max_sounds_per_type = 3 + }, + }}) + return name +end + +function fireUtils.makeSpreadOnceEffect(attributes) + local name = attributes.name .. "-spreadOnce-rampant" + local smokeName = "the-glow-smoke-rampant" + data:extend({ + { + type = "fire", + name = name, + flags = {"placeable-off-grid", "not-on-map"}, + +-- damage_per_tick = { amount = attributes.fireDamagePerTick or 45/60, type = attributes.fireDamagePerTickType or "fire" }, + damage_per_tick = { amount = 0, type = attributes.fireDamagePerTickType or "fire" }, + + spawn_entity = nil, + maximum_spread_count = 0, + + spread_delay = 0, + spread_delay_deviation = 0, + flame_alpha = 0.35, + flame_alpha_deviation = 0.05, + + tree_dying_factor = 0.7, + emissions_per_second = 0.005, + + fade_in_duration = 120, + fade_out_duration = 100, + smoke_fade_in_duration = 100, + smoke_fade_out_duration = 130, + delay_between_initial_flames = 20, + + on_damage_tick_effect = + { + type = "area", + radius = attributes.radius or 2.5, + force = "not-same", + ignore_collision_condition = true, + -- filter_enabled = true, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = attributes.fireDamagePerTick or 45/10, type = attributes.fireDamagePerTickType or "fire" } + } + } + } + }, + small_tree_fire_pictures = create_small_tree_flame_animations({ blend_mode = "additive", animation_speed = 0.5, scale = 0.7 * 0.75, tint2 = attributes.tint2 }), pictures = create_fire_pictures({ blend_mode = "additive", animation_speed = 1, scale = 0.5 * 1.25, tint2 = attributes.tint2}), @@ -127,10 +240,11 @@ function fireUtils.makeFire(attributes) data:extend({{ type = "fire", name = name, - localised_name = {"", {"rampant.fire-pool"}}, flags = {"placeable-off-grid", "not-on-map"}, + localised_name = {"", {"rampant.fire-pool"}}, color = attributes.tint2, - damage_per_tick = { amount = attributes.fireDamagePerTick or 45/60, type = attributes.fireDamagePerTickType or "fire" }, +-- damage_per_tick = { amount = attributes.fireDamagePerTick or 45/60, type = attributes.fireDamagePerTickType or "fire" }, + damage_per_tick = {amount = 0, type = "fire"}, maximum_damage_multiplier = attributes.damageMaxMultipler or 6, damage_multiplier_increase_per_added_fuel = attributes.mutliplerIncrease or 1, @@ -138,9 +252,9 @@ function fireUtils.makeFire(attributes) spawn_entity = spawnEntityName, - spread_delay = 30, + spread_delay = 20, spread_delay_deviation = 10, - maximum_spread_count = 100, + maximum_spread_count = 10, flame_alpha = 0.35, flame_alpha_deviation = 0.05, @@ -151,57 +265,56 @@ function fireUtils.makeFire(attributes) fade_in_duration = 30, fade_out_duration = 30, - initial_lifetime = 20, + initial_lifetime = 120, lifetime_increase_by = 2, lifetime_increase_cooldown = 1, - maximum_lifetime = 1800, + maximum_lifetime = 600, delay_between_initial_flames = 10, --initial_flame_count = 1, burnt_patch_lifetime = 1800, - on_damage_tick_effect = + on_damage_tick_effect = + { + type = "area", + radius = attributes.radius or 2.5, + force = "not-same", + ignore_collision_condition = true, + -- filter_enabled = true, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = {amount = (attributes.fireDamagePerTick or (45/60)), type = attributes.fireDamagePerTickType or "fire" } + } + } + } + }, + + + on_fuel_added_action = { - type = "area", - radius = attributes.radius or 2.5, - force = "not-same", - ignore_collision_condition = true, - -- filter_enabled = true, + type = "direct", action_delivery = { type = "instant", target_effects = { { - type = "create-sticker", - sticker = attributes.stickerName + type = "create-trivial-smoke", + smoke_name = smokeAddingFuelName, + -- speed = {-0.03, 0}, + -- speed_multiplier = 0.99, + -- speed_multiplier_deviation = 1.1, + offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}, + speed_from_center = 0.01 } } } }, - on_fuel_added_action = - { - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - { - type = "create-trivial-smoke", - smoke_name = smokeAddingFuelName, - -- speed = {-0.03, 0}, - -- speed_multiplier = 0.99, - -- speed_multiplier_deviation = 1.1, - offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}, - speed_from_center = 0.01 - } - } - } - } - }, - pictures = create_fire_pictures({ blend_mode = "normal", animation_speed = 1, scale = 0.5, tint2 = attributes.tint2}), smoke_source_pictures = @@ -280,8 +393,8 @@ function fireUtils.makeAcidSplashFire(attributes, stickerName) local acidFire = { type = "fire", name = name, - localised_name = {"", {"rampant.acid-pool"}}, flags = {"placeable-off-grid", "not-on-map"}, + localised_name = {"", {"rampant.acid-pool"}}, damage_per_tick = {amount = 0, type = "acid"}, maximum_damage_multiplier = 3, damage_multiplier_increase_per_added_fuel = 1, @@ -331,7 +444,7 @@ function fireUtils.makeAcidSplashFire(attributes, stickerName) { type = "area", radius = attributes.radius or 2.5, - force = "enemy", + force = "not-same", ignore_collision_condition = true, -- filter_enabled = true, action_delivery = @@ -345,7 +458,7 @@ function fireUtils.makeAcidSplashFire(attributes, stickerName) }, { type = "damage", - damage = { amount = attributes.damagePerTick or 0, type = attributes.damageType or "acid" } + damage = { amount = (attributes.damagePerTick or 0)*10, type = attributes.damageType or "acid" } -- hit 6 times per sec (can't be changed) } } } @@ -758,4 +871,121 @@ function fireUtils.makeAcidSplashFire(attributes, stickerName) return name end +-- + !ΠšΠ”Π 2021.11 +local safeFireOnTree = util.table.deepcopy(data.raw["fire"]["fire-flame-on-tree"]) +safeFireOnTree.name = "safe-fire-flame-on-tree-rampant" +safeFireOnTree.spawn_entity = nil +safeFireOnTree.damage_per_tick = {amount = 0, type = "fire"} +data:extend({safeFireOnTree}) + +local safeFire = util.table.deepcopy(data.raw["fire"]["fire-flame"]) +safeFire.name = "safe-fire-flame-rampant" +safeFire.spawn_entity = "safe-fire-flame-on-tree-rampant" +safeFire.maximum_spread_count = 10 +data:extend({safeFire}) + +local bitersSafeFire = util.table.deepcopy(data.raw["fire"]["fire-flame"]) +bitersSafeFire.name = "biters-safe-fire-rampant" +bitersSafeFire.spawn_entity = "safe-fire-flame-on-tree-rampant" +bitersSafeFire.maximum_spread_count = 10 +bitersSafeFire.maximum_lifetime = 240 +bitersSafeFire.damage_per_tick = {amount = 0, type = "fire"} +bitersSafeFire.on_damage_tick_effect = + { + type = "area", + radius = 0.5, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = { amount = 2, type = "fire" } + } + } + } + } +data:extend({bitersSafeFire}) + +local safeFireSticker = util.table.deepcopy(data.raw["sticker"]["fire-sticker"]) +safeFireSticker.name = "safe-fire-sticker-rampant" +safeFireSticker.spread_fire_entity = "safe-fire-flame-on-tree-rampant" +data:extend({safeFireSticker}) + + +function fireUtils.makeAcidFireStream() + + local acidFireSticker = util.table.deepcopy(data.raw["sticker"]["fire-sticker"]) + acidFireSticker.name = "acidFire-sticker-rampant" + -- acidFireSticker.spread_fire_entity = "safe-fire-flame-rampant" + -- acidFireSticker.fire_spread_cooldown = 100 + -- acidFireSticker.fire_spread_radius = 2.5 + acidFireSticker.spread_fire_entity = nil + acidFireSticker.fire_spread_cooldown = nil + acidFireSticker.fire_spread_radius = nil + acidFireSticker.animation.tint = { r = 0.5, g = 0.7, b = 0.5, a = 0.28 } + acidFireSticker.duration_in_ticks = 5 * 60 + acidFireSticker.damage_interval = 10 + acidFireSticker.damage_per_tick = { amount = 200 / 60, type = "fire" } + data:extend( + {acidFireSticker} + ) + + + local AcidFireSteam = util.table.deepcopy(data.raw["stream"]["flamethrower-fire-stream"]) + AcidFireSteam.name = "acidFire-stream-rampant" +-- AcidFireSteam.particle_vertical_acceleration = 0.02 + AcidFireSteam.particle_horizontal_speed = 0.6 + AcidFireSteam.action = {} + AcidFireSteam.action[1] = + { + type = "area", + radius = 2.5, + force = "not-same", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "create-sticker", + sticker = "acidFire-sticker-rampant", + show_in_tooltip = true + }, + { + type = "damage", + damage = { amount = 0.5, type = "fire" }, + apply_damage_to_trees = false + }, + { + type = "damage", + damage = { amount = 1, type = "acid" }, + apply_damage_to_trees = false + } + } + } + } + AcidFireSteam.action[2] = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "create-fire", + entity_name = "biters-safe-fire-rampant", + show_in_tooltip = true + } + } + } + } + AcidFireSteam.spine_animation.tint = {r=0.5, g=1, b=0.5, a=0.3} + data:extend({AcidFireSteam}) +end + + return fireUtils diff --git a/Rampant_3.1.2/prototypes/utils/ImageUtils.lua b/RampantFixed/prototypes/utils/ImageUtils.lua similarity index 94% rename from Rampant_3.1.2/prototypes/utils/ImageUtils.lua rename to RampantFixed/prototypes/utils/ImageUtils.lua index 6d8208f2..9a28846a 100644 --- a/Rampant_3.1.2/prototypes/utils/ImageUtils.lua +++ b/RampantFixed/prototypes/utils/ImageUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local imageUtils = {} -- module code diff --git a/Rampant_3.1.2/prototypes/utils/ParticleUtils.lua b/RampantFixed/prototypes/utils/ParticleUtils.lua similarity index 90% rename from Rampant_3.1.2/prototypes/utils/ParticleUtils.lua rename to RampantFixed/prototypes/utils/ParticleUtils.lua index 8b9ed67c..40765204 100644 --- a/Rampant_3.1.2/prototypes/utils/ParticleUtils.lua +++ b/RampantFixed/prototypes/utils/ParticleUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local particleUtils = {} -- module code @@ -58,8 +42,10 @@ function particleUtils.makeDamagedParticle(attributes) entity_name = name, offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}, offsets = {{0,0}}, - damage_type_filters = {"fire", "acid"} - } + damage_type_filters = { + whitelist = true, + types = "physical"} + } end @@ -764,31 +750,31 @@ function particleUtils.makeBloodFountains(attributes) tail_length_deviation = 0, tail_width = 1 }, - { - type = "create-particle", - repeat_count = 4, - repeat_count_deviation = 2, - probability = 1, - affects_target = false, - show_in_tooltip = false, - particle_name = "guts-entrails-particle-big", - offsets = { - { 0, 0 } - }, - offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - tile_collision_mask = nil, - initial_height = 0.02, - initial_height_deviation = 0.5, - initial_vertical_speed = 0.125, - initial_vertical_speed_deviation = 0.05, - speed_from_center = 0.035, - speed_from_center_deviation = 0.05, - frame_speed = 1, - frame_speed_deviation = 0, - tail_length = 2, - tail_length_deviation = 0, - tail_width = 1 - }, + -- { + -- type = "create-particle", + -- repeat_count = 4, + -- repeat_count_deviation = 2, + -- probability = 1, + -- affects_target = false, + -- show_in_tooltip = false, + -- particle_name = "guts-entrails-particle-big", + -- offsets = { + -- { 0, 0 } + -- }, + -- offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + -- tile_collision_mask = nil, + -- initial_height = 0.02, + -- initial_height_deviation = 0.5, + -- initial_vertical_speed = 0.125, + -- initial_vertical_speed_deviation = 0.05, + -- speed_from_center = 0.035, + -- speed_from_center_deviation = 0.05, + -- frame_speed = 1, + -- frame_speed_deviation = 0, + -- tail_length = 2, + -- tail_length_deviation = 0, + -- tail_width = 1 + -- }, { type = "create-entity", entity_name = attributes.name .. "-blood-fountain-rampant", @@ -825,8 +811,8 @@ function particleUtils.makeBloodFountains(attributes) { { type = "create-particle", - repeat_count = 100, - repeat_count_deviation = 20, + repeat_count = 10, --100, + repeat_count_deviation = 2, --20, particle_name = bloodParticle, initial_height = 0.5, speed_from_center = 0.08, @@ -837,8 +823,8 @@ function particleUtils.makeBloodFountains(attributes) }, { type = "create-particle", - repeat_count = 4, - repeat_count_deviation = 2, + repeat_count = 2, --4, +-- repeat_count_deviation = 2, probability = 1, affects_target = false, show_in_tooltip = false, @@ -860,31 +846,31 @@ function particleUtils.makeBloodFountains(attributes) tail_length_deviation = 0, tail_width = 1 }, - { - type = "create-particle", - repeat_count = 4, - repeat_count_deviation = 1, - probability = 1, - affects_target = false, - show_in_tooltip = false, - particle_name = "guts-entrails-particle-big", - offsets = { - { 0, 0 } - }, - offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - tile_collision_mask = nil, - initial_height = 0.02, - initial_height_deviation = 0.5, - initial_vertical_speed = 0.125, - initial_vertical_speed_deviation = 0.05, - speed_from_center = 0.035, - speed_from_center_deviation = 0.05, - frame_speed = 1, - frame_speed_deviation = 0, - tail_length = 2, - tail_length_deviation = 0, - tail_width = 1 - }, + -- { + -- type = "create-particle", + -- repeat_count = 4, + -- repeat_count_deviation = 1, + -- probability = 1, + -- affects_target = false, + -- show_in_tooltip = false, + -- particle_name = "guts-entrails-particle-big", + -- offsets = { + -- { 0, 0 } + -- }, + -- offset_deviation = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + -- tile_collision_mask = nil, + -- initial_height = 0.02, + -- initial_height_deviation = 0.5, + -- initial_vertical_speed = 0.125, + -- initial_vertical_speed_deviation = 0.05, + -- speed_from_center = 0.035, + -- speed_from_center_deviation = 0.05, + -- frame_speed = 1, + -- frame_speed_deviation = 0, + -- tail_length = 2, + -- tail_length_deviation = 0, + -- tail_width = 1 + -- }, { type = "create-entity", entity_name = attributes.name .. "-blood-fountain-big-rampant", diff --git a/RampantFixed/prototypes/utils/ProjectileUtils.lua b/RampantFixed/prototypes/utils/ProjectileUtils.lua new file mode 100644 index 00000000..b1f6f807 --- /dev/null +++ b/RampantFixed/prototypes/utils/ProjectileUtils.lua @@ -0,0 +1,166 @@ +local projectileUtils = {} + +function projectileUtils.makeClusterProjectile(attributes, attack) + local n = attributes.name .. "-clusterProjectile-rampant" + local speedModifier = 0.75 + local scaleModifier = 1.5 + local n = attributes.name .. "-projectile-rampant" + + data:extend({{ + type = "projectile", + name = n, + flags = {"not-on-map"}, + collision_box = attributes.attackCollisionBox or {{-0.025, -0.025}, {0.025, 0.025}}, + collision_mask = attributes.attackCollisionMask, + direction_only = attributes.attackDirectionOnly, + piercing_damage = attributes.attackPiercingDamage or 0, + acceleration = attributes.attackAcceleration or 0.000001, + max_speed = math.min(math.max(attributes.scale*0.60, 0.4), 0.7), + force_condition = (settings.startup["rampantFixed--disableCollidingProjectiles"].value and "not-same") or nil, + action = attack, + light = {intensity = 1, size = 10, color = {r = 1.0, g = 0.0, b = 0.0}}, --attributes.tint2 or + animation = + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + line_length = 5, + width = 22, + height = 84, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), + tint = attributes.tint2, + priority = "high", + scale = (attributes.scale*1.2 or 1)*scaleModifier, + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + line_length = 5, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), + tint = attributes.tint2, + priority = "high", + scale = 0.5 * (attributes.scale*1.2 or 1), + animation_speed = 1, + } + }, + shadow = + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + line_length = 15, + width = 22, + height = 84, + frame_count = 15, + priority = "high", + shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), + draw_as_shadow = true, + scale = (attributes.scale*1.2 or 1), + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + line_length = 15, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), + draw_as_shadow = true, + priority = "high", + scale = 0.5 * (attributes.scale*1.2 or 1), + animation_speed = 1, + } + }, + -- rotatable = false, + oriented_particle = true, + shadow_scale_enabled = true, + + }}) + + return n +end + +function projectileUtils.makeProjectile(attributes, attack, animation, shadow) + local n = attributes.name .. "-projectile-rampant" + local projectile = { + type = "projectile", + name = n, + flags = {"not-on-map"}, + collision_box = attributes.attackCollisionBox or {{-0.025, -0.025}, {0.025, 0.025}}, + collision_mask = attributes.attackCollisionMask, + direction_only = attributes.attackDirectionOnly, + piercing_damage = attributes.attackPiercingDamage or 0, + acceleration = attributes.attackAcceleration or 0.000001, + max_speed = math.min(math.max(attributes.scale*0.60, 0.4), 0.7), + force_condition = (settings.startup["rampantFixed--disableCollidingProjectiles"].value and "not-same") or nil, + action = attack, + animation = animation or + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + line_length = 5, + width = 22, + height = 84, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), + tint = attributes.tint2, + priority = "high", + scale = (attributes.scale*1.2 or 1), + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + line_length = 5, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), + tint = attributes.tint2, + priority = "high", + scale = 0.5 * (attributes.scale*1.2 or 1), + animation_speed = 1, + } + }, + shadow = shadow or + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + line_length = 15, + width = 22, + height = 84, + frame_count = 15, + priority = "high", + shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), + draw_as_shadow = true, + scale = (attributes.scale*1.2 or 1), + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + line_length = 15, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), + draw_as_shadow = true, + priority = "high", + scale = 0.5 * (attributes.scale*1.2 or 1), + animation_speed = 1, + } + }, + -- rotatable = false, + oriented_particle = true, + shadow_scale_enabled = true, + + } + if animation then + projectile.animation.scale = 0.1 + (attributes.scale or 1)*0.5 + projectile.animation.tint = {r = attributes.tint2.r, g = attributes.tint2.g, b=attributes.tint2.b, a=0.05} + end + if shadow then + projectile.shadow.scale = 0.1 + (attributes.scale or 1)*0.5 + end + data:extend({projectile}) + + return n +end + +return projectileUtils diff --git a/Rampant_3.1.2/prototypes/utils/SmokeUtils.lua b/RampantFixed/prototypes/utils/SmokeUtils.lua similarity index 84% rename from Rampant_3.1.2/prototypes/utils/SmokeUtils.lua rename to RampantFixed/prototypes/utils/SmokeUtils.lua index 0f28bc0b..f3ce05b3 100644 --- a/Rampant_3.1.2/prototypes/utils/SmokeUtils.lua +++ b/RampantFixed/prototypes/utils/SmokeUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local smokeUtils = {} -- module code @@ -25,7 +9,7 @@ function smokeUtils.makeNewCloud(attributes, attack) { type = "smoke-with-trigger", name = "dummy-" .. name, - flags = {"not-on-map"}, + flags = attributes.flags or {"not-on-map"}, show_when_smoke_off = true, particle_count = 24, particle_spread = { 3.6 * 1.05, 3.6 * 0.6 * 1.05 }, @@ -156,6 +140,75 @@ function smokeUtils.makeNewCloud(attributes, attack) return name end +function smokeUtils.makeNonTriggerCloud(attributes) + local name = attributes.name .. "-nonTriggerCloud-rampant" + + data:extend({ + { + type = "trivial-smoke", + name = name, + flags = {"not-on-map"}, + show_when_smoke_off = true, + animation = + { + filename = "__base__/graphics/entity/cloud/cloud-45-frames.png", + flags = { "compressed" }, + priority = "low", + width = 256, + height = 256, + frame_count = 45, + animation_speed = 0.5, + line_length = 7, + scale = attributes.scale or 3, + }, + render_layer = attributes.render_layer, + slow_down_factor = attributes.slowdown or 0, + affected_by_wind = attributes.wind, + cyclic = true, + duration = attributes.duration or 60 * 20, + fade_away_duration = attributes.outDuration or (attributes.duration and attributes.duration * 0.25) or 2 * 60, + spread_duration = attributes.inDuration or (attributes.duration and attributes.duration * 0.25) or 10, + color = attributes.tint or { r = 0.2, g = 0.9, b = 0.2 }, + } + }) + return name +end + +function smokeUtils.makeNonTriggerCloud2(attributes) + local name = attributes.name .. "-nonTriggerCloud-rampant" + + data:extend({ + { + type = "trivial-smoke", + name = name, + flags = {"not-on-map"}, + show_when_smoke_off = true, + animation = + { + width = 152, + height = 120, + line_length = 5, + frame_count = 60, + shift = {-0.53125, -0.4375}, + priority = "high", + animation_speed = 0.25, + scale = attributes.scale or 1, + filename = "__base__/graphics/entity/smoke/smoke.png", + flags = { "smoke" } + }, + render_layer = attributes.render_layer, + slow_down_factor = attributes.slowdown or 0, + affected_by_wind = attributes.wind, + cyclic = true, + duration = attributes.duration or 60 * 20, + fade_away_duration = attributes.outDuration or (attributes.duration and attributes.duration * 0.25) or 2 * 60, + spread_duration = attributes.inDuration or (attributes.duration and attributes.duration * 0.25) or 10, + color = attributes.tint or { r = 0.2, g = 0.9, b = 0.2 }, + } + }) + return name +end + function smokeUtils.makeCloud(attributes, attack) local name = attributes.name .. "-cloud-rampant" @@ -178,6 +231,7 @@ function smokeUtils.makeCloud(attributes, attack) line_length = 7, scale = attributes.scale or 3, }, + render_layer = attributes.render_layer, slow_down_factor = attributes.slowdown or 0, affected_by_wind = attributes.wind, cyclic = true, diff --git a/RampantFixed/prototypes/utils/SpawnUtils.lua b/RampantFixed/prototypes/utils/SpawnUtils.lua new file mode 100644 index 00000000..e75b2a2b --- /dev/null +++ b/RampantFixed/prototypes/utils/SpawnUtils.lua @@ -0,0 +1,310 @@ +local projectileUtils = require("ProjectileUtils") +local makeProjectile = projectileUtils.makeProjectile + +local spawnUtils = {} + +-- + !ΠšΠ”Π 2021.11 +-- function droneUtils.createSpawnProjectile(attributes, entityName) + -- local n = "spawn" .. entityName .. "-projectile-rampant" + -- data:extend({{ + -- type = "projectile", + -- name = n, + -- flags = {"not-on-map"}, + -- collision_box = {{-0.025, -0.025}, {0.025, 0.025}}, + -- collision_mask = {"layer-13"}, + -- direction_only = false, + -- piercing_damage = 0, + -- acceleration = 0.000001, + -- max_speed = 0.7, + -- force_condition = "not-same", + -- action = attack, + -- animation = + -- { + -- filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + -- line_length = 5, + -- width = 22, + -- height = 84, + -- frame_count = 15, + -- shift = util.mul_shift(util.by_pixel(-2, 30), 1), +-- -- tint = attributes.tint2, + -- priority = "high", + -- scale = 1, + -- animation_speed = 1, + -- hr_version = + -- { + -- filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + -- line_length = 5, + -- width = 42, + -- height = 164, + -- frame_count = 15, + -- shift = util.mul_shift(util.by_pixel(-2, 31), 1), + -- tint = attributes.tint2, + -- priority = "high", + -- scale = 1, + -- animation_speed = 1, + -- } + -- }, + -- shadow = + -- { + -- filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + -- line_length = 15, + -- width = 22, + -- height = 84, + -- frame_count = 15, + -- priority = "high", + -- shift = util.mul_shift(util.by_pixel(-2, 30), 1), + -- draw_as_shadow = true, + -- scale = 1, + -- animation_speed = 1, + -- hr_version = + -- { + -- filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + -- line_length = 15, + -- width = 42, + -- height = 164, + -- frame_count = 15, + -- shift = util.mul_shift(util.by_pixel(-2, 31), 1), + -- draw_as_shadow = true, + -- priority = "high", + -- scale = 0.5, + -- animation_speed = 1, + -- } + -- }, + -- -- rotatable = false, + -- oriented_particle = true, + -- shadow_scale_enabled = true, + + -- }}) + -- return n +-- end + +local function makeClusterSpawnProjectile(entityName) + local name = "clusterSpawnProjectile_"..entityName .. "-rampant" + data:extend({{ + --------------- + type = "projectile", + name = name, + flags = {"not-on-map"}, + collision_box = {{-0.025, -0.025}, {0.025, 0.025}}, + --direction_only = attributes.attackDirectionOnly, + piercing_damage = 0, + acceleration = 0.000001, + max_speed = 1, + force_condition = "not-same", + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects ={{type = "create-entity", entity_name = entityName, show_in_tooltip = true}} + } + }, + animation = + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + line_length = 5, + width = 22, + height = 84, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 30), 0.1), + tint = {r = 0, g = 0, b = 0}, + priority = "high", + scale = 0.1, + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + line_length = 5, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), 0.1 ), + tint = {r = 0, g = 0, b = 0}, + priority = "high", + scale = 0.5 * 0.1 , + animation_speed = 1, + } + }, + shadow = + { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + line_length = 15, + width = 22, + height = 84, + frame_count = 15, + priority = "high", + shift = util.mul_shift(util.by_pixel(-2, 30), 0.1), + draw_as_shadow = true, + scale = 0.1, + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + line_length = 15, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), 0.1), + draw_as_shadow = true, + priority = "high", + scale = 0.5 * 0.1, + animation_speed = 1, + } + }, + }}) + return name +end + +local function makeSpawnClusterTargetEffects(entityName, spawnCounts) + local targetEffects = {} + target_effects = {{ + type="nested-result", + repeat_count = spawnCounts, + action = { + { + type = "cluster", + cluster_count = 10, -- ? + distance = 3, + distance_deviation = 3, + action_delivery = + { + type = "instant", + {{type = "create-entity", + show_in_tooltip = true, + entity_name = entityName, + check_buildability = true + }} + --type = "projectile", {{ + -- projectile = makeClusterSpawnProjectile(entityName), + -- duration = 20, + -- direction_deviation = 0.6, + -- starting_speed = 2, + -- starting_speed_deviation = 0.3 + } + } + } + }} + +end + +--function createSpawnAttack(attributes, spawnBall, animation) + + -- type = "projectile", + -- ammo_category = "biological", + -- range_mode = "bounding-box-to-bounding-box", + -- cooldown = attributes.cooldown or 15, + -- warmup = attributes.warmup, + -- cooldown_deviation = 0.15, + -- projectile_creation_distance = 0.6, + -- range = attributes.range or 4, + -- min_attack_distance = (attributes.range and (attributes.range - 2)) or 4, + -- lead_target_for_projectile_speed = 0.95, + -- use_shooter_direction = true, + -- ammo_type = + -- { + -- category = "biological", + -- clamp_position = true, + -- target_type = "position", + -- action ={type = "direct", + -- action_delivery = function (attributes) + -- local returnValue + -- local spawnLvl = attributes.effectiveLevel+template.spawnStep + -- if spawnLvl < 1 then + -- spawnLvl = 1 + -- elseif spawnLvl>10 then + -- spawnLvl = 10 + -- end + -- --if template.spawnCounts == 1 then + -- returnValue = {type = "instant", target_effects = {}} + -- local target_effects = returnValue["target_effects"] + -- target_effects[1] = { + -- type = "create-entity", + -- show_in_tooltip = true, + -- --trigger_created_entity = attributes.triggerCreated, + -- entity_name = attributes.SpawnOnHit_1sPart .. "-v" ..attributes.variation .. "-t" ..spawnLvl.. "" .. "-rampant", --(attributes.effectiveLevel-attributes.effectiveLevelDecrease) + -- check_buildability = true + -- } + -- --end + -- ------------- + +-- -- {type = "projectile", +-- -- projectile = projectile or "defender-bullet", +-- -- starting_speed = attributes.startingSpeed or 0.6, +-- -- max_range = attributes.maxRange or (attributes.range + 1) or 4 +-- -- } + -- } + -- }, + -- animation = animation + -- } + + + + + + + + +-- ----------- + -- return + -- { + -- { + -- type="nested-result", + -- action = { + -- { + -- type = "cluster", + -- cluster_count = attributes.clusters, + -- distance = attributes.clusterDistance, + -- distance_deviation = 3, + -- action_delivery = + -- { + -- type = "projectile", + -- projectile = makeLaser(attributes), + -- duration = 20, + -- direction_deviation = 0.6, + -- starting_speed = attributes.startingSpeed, + -- starting_speed_deviation = 0.3 + -- }, + -- repeat_count = 2 + -- } + -- } + -- } + -- } + +-- end + +function spawnUtils.createSpawnBall(attributes, entityName, spawnCounts) + local templateArea = { + type = "area", + radius = 2, + force = "not-same", + ignore_collision_condition = true, + } + + local target_effects + target_effects = {{type = "create-entity", + show_in_tooltip = true, + entity_name = entityName, + repeat_count = spawnCounts, + check_buildability = false + }} + + local templateActions = { + templateArea, + { + type = "direct", + action_delivery = { + type = "instant", + source_effects = attributes.sourceEffect and attributes.sourceEffect(attributes), + target_effects = target_effects + } + } + } + + local name + name = makeProjectile(attributes, templateActions) + + return name +end + +return spawnUtils \ No newline at end of file diff --git a/RampantFixed/prototypes/utils/StickerUtils.lua b/RampantFixed/prototypes/utils/StickerUtils.lua new file mode 100644 index 00000000..4d6649bd --- /dev/null +++ b/RampantFixed/prototypes/utils/StickerUtils.lua @@ -0,0 +1,56 @@ + +local stickerUtils = {} + +-- imported + +local math3d = require("math3d") + +-- module code + +function stickerUtils.makeSticker(attributes) + local name = attributes.name .. "-sticker-rampant" + + local o = { + type = "sticker", + name = name, + flags = {"not-on-map"}, + + animation = attributes.stickerAnimation or + { + filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", + line_length = 8, + width = 60, + height = 118, + frame_count = 25, + axially_symmetrical = false, + direction_count = 1, + blend_mode = "normal", + animation_speed = 2, + scale = 0.4, + tint = attributes.tint2 or { r = 1, g = 1, b = 1, a = 0.35 }, + shift = math3d.vector2.mul({-0.078125, -1.8125}, 0.1), + }, + + duration_in_ticks = attributes.stickerDuration or (30 * 60), + target_movement_modifier_from = attributes.stickerMovementModifier or 1, + target_movement_modifier_to = 1, + vehicle_speed_modifier_from = (attributes.stickerMovementModifier and math.min(attributes.stickerMovementModifier * 1.25, 1)) or 1, + -- vehicle_speed_modifier_from = attributes.stickerMovementModifier or 1, + vehicle_speed_modifier_to = 1, + -- vehicle_friction_modifier_from = 1.5, + -- vehicle_friction_modifier_from = 1, + -- vehicle_friction_modifier_to = 1, + + damage_per_tick = attributes.stickerDamagePerTick and { amount = attributes.stickerDamagePerTick or 100 / 60, + type = attributes.stickerDamagePerTickType or "fire" }, + spread_fire_entity = attributes.spawnEntityName, + fire_spread_cooldown = attributes.fireSpreadCooldown, + fire_spread_radius = attributes.fireSpreadRadius + } + + data:extend({o}) + return name +end + + +return stickerUtils diff --git a/Rampant_3.1.2/prototypes/utils/StreamUtils.lua b/RampantFixed/prototypes/utils/StreamUtils.lua similarity index 90% rename from Rampant_3.1.2/prototypes/utils/StreamUtils.lua rename to RampantFixed/prototypes/utils/StreamUtils.lua index 9c43b6cd..12896c5b 100644 --- a/Rampant_3.1.2/prototypes/utils/StreamUtils.lua +++ b/RampantFixed/prototypes/utils/StreamUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local streamUtils = {} -- module code @@ -70,7 +54,7 @@ function streamUtils.makeStream(attributes) shadow = { - filename = "__Rampant__/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png", + filename = "__RampantFixed__/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png", line_length = 5, width = 28, height = 16, diff --git a/RampantFixed/prototypes/utils/ThiefUtils.lua b/RampantFixed/prototypes/utils/ThiefUtils.lua new file mode 100644 index 00000000..0c6683a4 --- /dev/null +++ b/RampantFixed/prototypes/utils/ThiefUtils.lua @@ -0,0 +1,90 @@ +local thiefUtils = {} + +-- module code + +function thiefUtils.makeDrainCrystal(attributes) + local name = attributes.name .. "-drain-rampant" + local itemName = attributes.name .. "-item-drain-rampant" + + data:extend({ + { + type = "item", + name = itemName, + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {"hidden"}, + subgroup = "energy", + order = "e[accumulator]-a[accumulator]", + place_result = name, + stack_size = 50 + }, + + { + type = "radar", + name = name, + icon = "__RampantFixed__/graphics/icons/thief/crystal-drain.png", + icon_size = 32, + flags = {"placeable-enemy"}, + minable = {hardness = 0.2, mining_time = 0.5, result = itemName}, + max_health = attributes.health or 500, + corpse = "small-remnants", + collision_box = {{-0.9 * attributes.scale, -0.9 * attributes.scale}, {0.9 * attributes.scale, 0.9 * attributes.scale}}, + selection_box = {{-1.1 * attributes.scale, -1.1 * attributes.scale}, {1.1 * attributes.scale, 1.1 * attributes.scale}}, + energy_per_sector = "100MJ", + max_distance_of_sector_revealed = 0, + max_distance_of_nearby_sector_revealed = 0, + energy_per_nearby_scan = "750kJ", + resistances = { + { + type = "physical", + percent = 25 + }, + { + type = "fire", + percent = 85 + }, + { + type = "electric", + percent = 95 + }, + { + type = "laser", + percent = 90 + } + }, + energy_source = + { + type = "electric", + usage_priority = "primary-input" + }, + energy_usage = attributes.drain or "500kW", + pictures = + { + filename = "__RampantFixed__/graphics/entities/thief/crystal-drain.png", + priority = "low", + width = 128, + height = 128, + scale = attributes.scale, + apply_projection = false, + direction_count = 32, + animation_speed = 0.5, + line_length = 8, + shift = {0.65, 0} + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = + { + sound = { + { + filename = "__base__/sound/accumulator-working.ogg" + } + }, + apparent_volume = 2, + }, + radius_minimap_visualisation_color = { r = 0.059, g = 0.092, b = 0.8, a = 0.275 } + } + }) + return +end + +return thiefUtils diff --git a/Rampant_3.1.2/prototypes/utils/UnitSpawnerUtils.lua b/RampantFixed/prototypes/utils/UnitSpawnerUtils.lua similarity index 90% rename from Rampant_3.1.2/prototypes/utils/UnitSpawnerUtils.lua rename to RampantFixed/prototypes/utils/UnitSpawnerUtils.lua index 77ca300e..18e1b594 100644 --- a/Rampant_3.1.2/prototypes/utils/UnitSpawnerUtils.lua +++ b/RampantFixed/prototypes/utils/UnitSpawnerUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local unitSpawnerUtils = {} diff --git a/RampantFixed/prototypes/utils/UnitUtils.lua b/RampantFixed/prototypes/utils/UnitUtils.lua new file mode 100644 index 00000000..7753a05f --- /dev/null +++ b/RampantFixed/prototypes/utils/UnitUtils.lua @@ -0,0 +1,1925 @@ +local unitUtils = {} + +function unitUtils.spitter_water_reflection(scale) + return + { + pictures = + { + filename = "__base__/graphics/entity/spitter/spitter-reflection.png", + priority = "extra-high", + width = 20, + height = 32, + shift = util.by_pixel(5, 15), + scale = 5 * scale, + variation_count = 1, + }, + rotate = true, + orientation_to_variation = false + } +end + +function unitUtils.biter_water_reflection(scale) + return + { + pictures = + { + filename = "__base__/graphics/entity/biter/biter-reflection.png", + priority = "extra-high", + width = 20, + height = 28, + shift = util.by_pixel(5, 15), + scale = 5 * scale, + variation_count = 1, + }, + rotate = true, + orientation_to_variation = false + } +end + + +function unitUtils.spitter_alternative_attacking_animation_sequence() + return { + warmup_frame_sequence = { 1, 2, 3, 4, 5, 6 }, + warmup2_frame_sequence = { 7, 7, 7, 7, 7, 7 }, + attacking_frame_sequence = { 7, 8, 9, 10, 11, 12, 13, 14, 13, 14, 13, 12, 11, 10, 9, 8 }, + cooldown_frame_sequence = { 7 }, + prepared_frame_sequence = { 7 }, + back_to_walk_frame_sequence = { 6, 5, 4, 3, 2, 1 }, + + warmup_animation_speed = 1 / 6 * 0.4, + attacking_animation_speed = 1 / 16 * 0.4, + cooldown_animation_speed = 1 / 1 * 0.4 * 0.125; + prepared_animation_speed = 1 / 1 * 0.5 * 0.4, + back_to_walk_animation_speed = 1 / 6 * 0.4, + } +end + +local function vanillaDieBiter(scale, tint1, tint2) + return { + layers= + { + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-01.png", + "__base__/graphics/entity/biter/biter-die-02.png", + "__base__/graphics/entity/biter/biter-die-03.png", + "__base__/graphics/entity/biter/biter-die-04.png", + "__base__/graphics/entity/biter/biter-die-05.png", + "__base__/graphics/entity/biter/biter-die-06.png", + "__base__/graphics/entity/biter/biter-die-07.png", + "__base__/graphics/entity/biter/biter-die-08.png", + "__base__/graphics/entity/biter/biter-die-09.png", + "__base__/graphics/entity/biter/biter-die-10.png", + "__base__/graphics/entity/biter/biter-die-11.png", + "__base__/graphics/entity/biter/biter-die-12.png", + "__base__/graphics/entity/biter/biter-die-13.png", + "__base__/graphics/entity/biter/biter-die-14.png", + "__base__/graphics/entity/biter/biter-die-15.png", + "__base__/graphics/entity/biter/biter-die-16.png", + "__base__/graphics/entity/biter/biter-die-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 276, + height = 202, + frame_count = 17, + direction_count = 16, + shift= util.mul_shift(util.by_pixel(-2, -4), scale), + scale = scale, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-01.png", + "__base__/graphics/entity/biter/hr-biter-die-02.png", + "__base__/graphics/entity/biter/hr-biter-die-03.png", + "__base__/graphics/entity/biter/hr-biter-die-04.png", + "__base__/graphics/entity/biter/hr-biter-die-05.png", + "__base__/graphics/entity/biter/hr-biter-die-06.png", + "__base__/graphics/entity/biter/hr-biter-die-07.png", + "__base__/graphics/entity/biter/hr-biter-die-08.png", + "__base__/graphics/entity/biter/hr-biter-die-09.png", + "__base__/graphics/entity/biter/hr-biter-die-10.png", + "__base__/graphics/entity/biter/hr-biter-die-11.png", + "__base__/graphics/entity/biter/hr-biter-die-12.png", + "__base__/graphics/entity/biter/hr-biter-die-13.png", + "__base__/graphics/entity/biter/hr-biter-die-14.png", + "__base__/graphics/entity/biter/hr-biter-die-15.png", + "__base__/graphics/entity/biter/hr-biter-die-16.png", + "__base__/graphics/entity/biter/hr-biter-die-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 544, + height = 402, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(0, -4), scale), + direction_count = 16, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-mask1-01.png", + "__base__/graphics/entity/biter/biter-die-mask1-02.png", + "__base__/graphics/entity/biter/biter-die-mask1-03.png", + "__base__/graphics/entity/biter/biter-die-mask1-04.png", + "__base__/graphics/entity/biter/biter-die-mask1-05.png", + "__base__/graphics/entity/biter/biter-die-mask1-06.png", + "__base__/graphics/entity/biter/biter-die-mask1-07.png", + "__base__/graphics/entity/biter/biter-die-mask1-08.png", + "__base__/graphics/entity/biter/biter-die-mask1-09.png", + "__base__/graphics/entity/biter/biter-die-mask1-10.png", + "__base__/graphics/entity/biter/biter-die-mask1-11.png", + "__base__/graphics/entity/biter/biter-die-mask1-12.png", + "__base__/graphics/entity/biter/biter-die-mask1-13.png", + "__base__/graphics/entity/biter/biter-die-mask1-14.png", + "__base__/graphics/entity/biter/biter-die-mask1-15.png", + "__base__/graphics/entity/biter/biter-die-mask1-16.png", + "__base__/graphics/entity/biter/biter-die-mask1-17.png", + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 198, + height = 166, + frame_count = 17, + direction_count = 16, + shift = util.mul_shift(util.by_pixel(0, -22), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-mask1-01.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-02.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-03.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-04.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-05.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-06.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-07.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-08.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-09.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-10.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-11.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-12.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-13.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-14.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-15.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-16.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 398, + height = 328, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(-1, -21), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-mask2-01.png", + "__base__/graphics/entity/biter/biter-die-mask2-02.png", + "__base__/graphics/entity/biter/biter-die-mask2-03.png", + "__base__/graphics/entity/biter/biter-die-mask2-04.png", + "__base__/graphics/entity/biter/biter-die-mask2-05.png", + "__base__/graphics/entity/biter/biter-die-mask2-06.png", + "__base__/graphics/entity/biter/biter-die-mask2-07.png", + "__base__/graphics/entity/biter/biter-die-mask2-08.png", + "__base__/graphics/entity/biter/biter-die-mask2-09.png", + "__base__/graphics/entity/biter/biter-die-mask2-10.png", + "__base__/graphics/entity/biter/biter-die-mask2-11.png", + "__base__/graphics/entity/biter/biter-die-mask2-12.png", + "__base__/graphics/entity/biter/biter-die-mask2-13.png", + "__base__/graphics/entity/biter/biter-die-mask2-14.png", + "__base__/graphics/entity/biter/biter-die-mask2-15.png", + "__base__/graphics/entity/biter/biter-die-mask2-16.png", + "__base__/graphics/entity/biter/biter-die-mask2-17.png", + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 200, + height = 166, + frame_count = 17, + direction_count = 16, + shift = util.mul_shift(util.by_pixel(-2, -22), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-mask2-01.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-02.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-03.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-04.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-05.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-06.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-07.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-08.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-09.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-10.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-11.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-12.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-13.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-14.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-15.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-16.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 396, + height = 330, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(-1, -22), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-shadow-01.png", + "__base__/graphics/entity/biter/biter-die-shadow-02.png", + "__base__/graphics/entity/biter/biter-die-shadow-03.png", + "__base__/graphics/entity/biter/biter-die-shadow-04.png", + "__base__/graphics/entity/biter/biter-die-shadow-05.png", + "__base__/graphics/entity/biter/biter-die-shadow-06.png", + "__base__/graphics/entity/biter/biter-die-shadow-07.png", + "__base__/graphics/entity/biter/biter-die-shadow-08.png", + "__base__/graphics/entity/biter/biter-die-shadow-09.png", + "__base__/graphics/entity/biter/biter-die-shadow-10.png", + "__base__/graphics/entity/biter/biter-die-shadow-11.png", + "__base__/graphics/entity/biter/biter-die-shadow-12.png", + "__base__/graphics/entity/biter/biter-die-shadow-13.png", + "__base__/graphics/entity/biter/biter-die-shadow-14.png", + "__base__/graphics/entity/biter/biter-die-shadow-15.png", + "__base__/graphics/entity/biter/biter-die-shadow-16.png", + "__base__/graphics/entity/biter/biter-die-shadow-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 282, + height = 192, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(4, 0), scale), + direction_count = 16, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-shadow-01.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-02.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-03.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-04.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-05.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-06.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-07.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-08.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-09.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-10.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-11.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-12.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-13.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-14.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-15.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-16.png", + "__base__/graphics/entity/biter/hr-biter-die-shadow-17.png", + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 564, + height = 384, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(4, 0), scale), + direction_count = 16, + scale = 0.5 * scale, + draw_as_shadow = true, + } + }, + } + } +end + +local function armoredDieBiter(scale, tint1, tint2) + return { + layers= + { + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-04.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-05.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-06.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-07.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-08.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-09.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-10.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-11.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-12.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-13.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-14.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-15.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift= {0,0}, + tint=tint1, + scale = scale, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-04.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-05.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-06.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-07.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-08.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-09.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-10.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-11.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-12.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-13.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-14.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-15.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-04.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-05.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-06.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-07.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-08.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-09.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-10.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-11.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-12.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-13.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-14.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-15.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-16.png" + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-04.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-05.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-06.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-07.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-08.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-09.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-10.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-11.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-12.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-13.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-14.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-15.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-04.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-05.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-06.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-07.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-08.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-09.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-10.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-11.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-12.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-13.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-14.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-15.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-16.png" + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-04.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-05.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-06.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-07.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-08.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-09.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-10.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-11.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-12.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-13.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-14.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-15.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-04.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-05.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-06.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-07.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-08.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-09.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-10.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-11.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-12.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-13.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-14.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-15.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 238, + height = 170, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-04.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-05.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-06.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-07.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-08.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-09.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-10.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-11.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-12.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-13.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-14.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-15.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-16.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + draw_as_shadow = true, + } + } + } + } +end + +local function vanillaAttackBiter(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__base__/graphics/entity/biter/biter-attack-01.png", + "__base__/graphics/entity/biter/biter-attack-02.png", + "__base__/graphics/entity/biter/biter-attack-03.png", + "__base__/graphics/entity/biter/biter-attack-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 182, + height = 176, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = util.mul_shift(util.by_pixel(-2, -26), scale), + scale = scale, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-attack-01.png", + "__base__/graphics/entity/biter/hr-biter-attack-02.png", + "__base__/graphics/entity/biter/hr-biter-attack-03.png", + "__base__/graphics/entity/biter/hr-biter-attack-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 356, + height = 348, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(0, -25), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-attack-mask1-01.png", + "__base__/graphics/entity/biter/biter-attack-mask1-02.png", + "__base__/graphics/entity/biter/biter-attack-mask1-03.png", + "__base__/graphics/entity/biter/biter-attack-mask1-04.png", + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 178, + height = 144, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = util.mul_shift(util.by_pixel(0, -42), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-attack-mask1-01.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask1-02.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask1-03.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask1-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 360, + height = 282, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(-1, -41), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-attack-mask2-01.png", + "__base__/graphics/entity/biter/biter-attack-mask2-02.png", + "__base__/graphics/entity/biter/biter-attack-mask2-03.png", + "__base__/graphics/entity/biter/biter-attack-mask2-04.png", + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 182, + height = 144, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = util.mul_shift(util.by_pixel(-2, -42), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-attack-mask2-01.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask2-02.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask2-03.png", + "__base__/graphics/entity/biter/hr-biter-attack-mask2-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 358, + height = 282, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(-1, -41), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-attack-shadow-01.png", + "__base__/graphics/entity/biter/biter-attack-shadow-02.png", + "__base__/graphics/entity/biter/biter-attack-shadow-03.png", + "__base__/graphics/entity/biter/biter-attack-shadow-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 240, + height = 128, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(30, 0), scale), + direction_count = 16, + animation_speed = 0.4, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-attack-shadow-01.png", + "__base__/graphics/entity/biter/hr-biter-attack-shadow-02.png", + "__base__/graphics/entity/biter/hr-biter-attack-shadow-03.png", + "__base__/graphics/entity/biter/hr-biter-attack-shadow-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 476, + height = 258, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(31, -1), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + draw_as_shadow = true, + } + }, + } + } +end + +local function armoredAttackBiter(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 238, + height = 170, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = {0,0}, + tint=tint1, + scale = scale, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 476, + height = 340, + frame_count = 11, + shift = {0,0}, + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-04.png", + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 238, + height = 170, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 476, + height = 340, + frame_count = 11, + shift = {0,0}, + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-04.png", + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 238, + height = 170, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 476, + height = 340, + frame_count = 11, + shift = {0,0}, + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 238, + height = 170, + frame_count = 11, + shift = {0,0}, + direction_count = 16, + animation_speed = 0.4, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-04.png", + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 476, + height = 340, + frame_count = 11, + shift = {0,0}, + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + draw_as_shadow = true, + } + }, + } + } +end + +local function armoredRunBiter(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift = {0,0}, + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-04.png", + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-04.png", + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 238, + height = 170, + frame_count = 16, + direction_count = 16, + shift = {0,0}, + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 238, + height = 170, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-01.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-02.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-03.png", + "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 476, + height = 340, + frame_count = 16, + shift = {0,0}, + direction_count = 16, + scale = 0.5 * scale, + draw_as_shadow = true, + } + } + } + } +end + +local function vanillaRunBiter(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__base__/graphics/entity/biter/biter-run-01.png", + "__base__/graphics/entity/biter/biter-run-02.png", + "__base__/graphics/entity/biter/biter-run-03.png", + "__base__/graphics/entity/biter/biter-run-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 202, + height = 158, + frame_count = 16, + direction_count = 16, + shift = util.mul_shift(util.by_pixel(-2, -6), scale), + scale = scale, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-run-01.png", + "__base__/graphics/entity/biter/hr-biter-run-02.png", + "__base__/graphics/entity/biter/hr-biter-run-03.png", + "__base__/graphics/entity/biter/hr-biter-run-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 398, + height = 310, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(-1, -5), scale), + direction_count = 16, + scale = 0.5 * scale, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-run-mask1-01.png", + "__base__/graphics/entity/biter/biter-run-mask1-02.png", + "__base__/graphics/entity/biter/biter-run-mask1-03.png", + "__base__/graphics/entity/biter/biter-run-mask1-04.png", + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 118, + height = 94, + frame_count = 16, + direction_count = 16, + shift = util.mul_shift(util.by_pixel(0, -38), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-run-mask1-01.png", + "__base__/graphics/entity/biter/hr-biter-run-mask1-02.png", + "__base__/graphics/entity/biter/hr-biter-run-mask1-03.png", + "__base__/graphics/entity/biter/hr-biter-run-mask1-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 238, + height = 182, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(-1, -37), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint1, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-run-mask2-01.png", + "__base__/graphics/entity/biter/biter-run-mask2-02.png", + "__base__/graphics/entity/biter/biter-run-mask2-03.png", + "__base__/graphics/entity/biter/biter-run-mask2-04.png", + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 120, + height = 92, + frame_count = 16, + direction_count = 16, + shift = util.mul_shift(util.by_pixel(-2, -38), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-run-mask2-01.png", + "__base__/graphics/entity/biter/hr-biter-run-mask2-02.png", + "__base__/graphics/entity/biter/hr-biter-run-mask2-03.png", + "__base__/graphics/entity/biter/hr-biter-run-mask2-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 232, + height = 184, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(0, -38), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint2, + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-run-shadow-01.png", + "__base__/graphics/entity/biter/biter-run-shadow-02.png", + "__base__/graphics/entity/biter/biter-run-shadow-03.png", + "__base__/graphics/entity/biter/biter-run-shadow-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 216, + height = 144, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(8, 0), scale), + direction_count = 16, + scale = scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-run-shadow-01.png", + "__base__/graphics/entity/biter/hr-biter-run-shadow-02.png", + "__base__/graphics/entity/biter/hr-biter-run-shadow-03.png", + "__base__/graphics/entity/biter/hr-biter-run-shadow-04.png", + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 432, + height = 292, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(8, -1), scale), + direction_count = 16, + scale = 0.5 * scale, + draw_as_shadow = true, + } + } + } + } +end + +-------------- arachnids --------- +local function arachnidsrunanimation(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__Arachnids__/graphics/Arachnids-run-01.png", + "__Arachnids__/graphics/Arachnids-run-02.png", + "__Arachnids__/graphics/Arachnids-run-03.png", + "__Arachnids__/graphics/Arachnids-run-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 199, + height = 175, + frame_count = 16, + direction_count = 16, + --shift = util.mul_shift(util.by_pixel(-2, -6), scale), + scale = scale, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-run-01.png", + "__Arachnids__/graphics/hr-Arachnids-run-02.png", + "__Arachnids__/graphics/hr-Arachnids-run-03.png", + "__Arachnids__/graphics/hr-Arachnids-run-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 398, + height = 350, + frame_count = 16, + --shift = util.mul_shift(util.by_pixel(-1, -5), scale), + direction_count = 16, + scale = 0.5 * scale + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-run-mask1-01.png", + "__Arachnids__/graphics/Arachnids-run-mask1-02.png", + "__Arachnids__/graphics/Arachnids-run-mask1-03.png", + "__Arachnids__/graphics/Arachnids-run-mask1-04.png" + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 199, + height = 175, + frame_count = 16, + direction_count = 16, + --shift = util.mul_shift(util.by_pixel(-2, -6), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-run-mask1-01.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask1-02.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask1-03.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask1-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 398, + height = 350, + frame_count = 16, + --shift = util.mul_shift(util.by_pixel(-1, -37), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint1 + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-run-mask2-01.png", + "__Arachnids__/graphics/Arachnids-run-mask2-02.png", + "__Arachnids__/graphics/Arachnids-run-mask2-03.png", + "__Arachnids__/graphics/Arachnids-run-mask2-04.png" + }, + slice = 8, + lines_per_file = 8, + flags = { "mask" }, + line_length = 8, + width = 199, + height = 175, + frame_count = 16, + direction_count = 16, + --shift = util.mul_shift(util.by_pixel(-2, -6), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-run-mask2-01.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask2-02.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask2-03.png", + "__Arachnids__/graphics/hr-Arachnids-run-mask2-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 398, + height = 350, + frame_count = 16, + --shift = util.mul_shift(util.by_pixel(-1, -5), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint2 + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-run-shadow-01.png", + "__Arachnids__/graphics/Arachnids-run-shadow-02.png", + "__Arachnids__/graphics/Arachnids-run-shadow-03.png", + "__Arachnids__/graphics/Arachnids-run-shadow-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 199, + height = 120, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + scale = 1.24 * scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-run-shadow-01.png", + "__Arachnids__/graphics/hr-Arachnids-run-shadow-02.png", + "__Arachnids__/graphics/hr-Arachnids-run-shadow-03.png", + "__Arachnids__/graphics/hr-Arachnids-run-shadow-04.png" + }, + slice = 8, + lines_per_file = 8, + line_length = 8, + width = 398, + height = 240, + frame_count = 16, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + scale = 0.62 * scale, + draw_as_shadow = true + } + } + } + } +end + +local function arachnidsattackanimation(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + "__Arachnids__/graphics/Arachnids-attack-01.png", + "__Arachnids__/graphics/Arachnids-attack-02.png", + "__Arachnids__/graphics/Arachnids-attack-03.png", + "__Arachnids__/graphics/Arachnids-attack-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 199, + height = 175, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + --shift = util.mul_shift(util.by_pixel(-2, -26), scale), + scale = scale, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-attack-01.png", + "__Arachnids__/graphics/hr-Arachnids-attack-02.png", + "__Arachnids__/graphics/hr-Arachnids-attack-03.png", + "__Arachnids__/graphics/hr-Arachnids-attack-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 398, + height = 350, + frame_count = 11, + --shift = util.mul_shift(util.by_pixel(0, -25), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-attack-mask1-01.png", + "__Arachnids__/graphics/Arachnids-attack-mask1-02.png", + "__Arachnids__/graphics/Arachnids-attack-mask1-03.png", + "__Arachnids__/graphics/Arachnids-attack-mask1-04.png" + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 199, + height = 175, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + --shift = util.mul_shift(util.by_pixel(0, -42), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-attack-mask1-01.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask1-02.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask1-03.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask1-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 398, + height = 350, + frame_count = 11, + --shift = util.mul_shift(util.by_pixel(-1, -41), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint1 + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-attack-mask2-01.png", + "__Arachnids__/graphics/Arachnids-attack-mask2-02.png", + "__Arachnids__/graphics/Arachnids-attack-mask2-03.png", + "__Arachnids__/graphics/Arachnids-attack-mask2-04.png" + }, + slice = 11, + lines_per_file = 4, + flags = { "mask" }, + line_length = 16, + width = 199, + height = 175, + frame_count = 11, + direction_count = 16, + animation_speed = 0.4, + --shift = util.mul_shift(util.by_pixel(-2, -42), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-attack-mask2-01.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask2-02.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask2-03.png", + "__Arachnids__/graphics/hr-Arachnids-attack-mask2-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 398, + height = 350, + frame_count = 11, + --shift = util.mul_shift(util.by_pixel(-1, -41), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.5 * scale, + tint = tint2 + } + }, + { + filenames = + { + "__Arachnids__/graphics/Arachnids-attack-shadow-01.png", + "__Arachnids__/graphics/Arachnids-attack-shadow-02.png", + "__Arachnids__/graphics/Arachnids-attack-shadow-03.png", + "__Arachnids__/graphics/Arachnids-attack-shadow-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 199, + height = 120, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 1.24 * scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-attack-shadow-01.png", + "__Arachnids__/graphics/hr-Arachnids-attack-shadow-02.png", + "__Arachnids__/graphics/hr-Arachnids-attack-shadow-03.png", + "__Arachnids__/graphics/hr-Arachnids-attack-shadow-04.png" + }, + slice = 11, + lines_per_file = 4, + line_length = 16, + width = 398, + height = 240, + frame_count = 11, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + animation_speed = 0.4, + scale = 0.62 * scale, + draw_as_shadow = true + } + } + } + } +end + +local function arachnidsdieanimation(scale, tint1, tint2) + return + { + layers= + { + { + filenames = + { + + "__Arachnids__/graphics/Arachnids-die-01.png", + "__Arachnids__/graphics/Arachnids-die-02.png", + "__Arachnids__/graphics/Arachnids-die-03.png", + "__Arachnids__/graphics/Arachnids-die-04.png", + "__Arachnids__/graphics/Arachnids-die-05.png", + "__Arachnids__/graphics/Arachnids-die-06.png", + "__Arachnids__/graphics/Arachnids-die-07.png", + "__Arachnids__/graphics/Arachnids-die-08.png", + "__Arachnids__/graphics/Arachnids-die-09.png", + "__Arachnids__/graphics/Arachnids-die-10.png", + "__Arachnids__/graphics/Arachnids-die-11.png", + "__Arachnids__/graphics/Arachnids-die-12.png", + "__Arachnids__/graphics/Arachnids-die-13.png", + "__Arachnids__/graphics/Arachnids-die-14.png", + "__Arachnids__/graphics/Arachnids-die-15.png", + "__Arachnids__/graphics/Arachnids-die-16.png", + "__Arachnids__/graphics/Arachnids-die-17.png" + + + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 199, + height = 175, + frame_count = 17, + direction_count = 16, + --shift= util.mul_shift(util.by_pixel(-2, -4), scale), + scale = scale, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-die-01.png", + "__Arachnids__/graphics/hr-Arachnids-die-02.png", + "__Arachnids__/graphics/hr-Arachnids-die-03.png", + "__Arachnids__/graphics/hr-Arachnids-die-04.png", + "__Arachnids__/graphics/hr-Arachnids-die-05.png", + "__Arachnids__/graphics/hr-Arachnids-die-06.png", + "__Arachnids__/graphics/hr-Arachnids-die-07.png", + "__Arachnids__/graphics/hr-Arachnids-die-08.png", + "__Arachnids__/graphics/hr-Arachnids-die-09.png", + "__Arachnids__/graphics/hr-Arachnids-die-10.png", + "__Arachnids__/graphics/hr-Arachnids-die-11.png", + "__Arachnids__/graphics/hr-Arachnids-die-12.png", + "__Arachnids__/graphics/hr-Arachnids-die-13.png", + "__Arachnids__/graphics/hr-Arachnids-die-14.png", + "__Arachnids__/graphics/hr-Arachnids-die-15.png", + "__Arachnids__/graphics/hr-Arachnids-die-16.png", + "__Arachnids__/graphics/hr-Arachnids-die-17.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 398, + height = 350, + frame_count = 17, + --shift = util.mul_shift(util.by_pixel(0, -4), scale), + direction_count = 16, + scale = 0.5 * scale + } + }, + + + +--[[ + + + + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-mask1-01.png", + "__base__/graphics/entity/biter/biter-die-mask1-02.png", + "__base__/graphics/entity/biter/biter-die-mask1-03.png", + "__base__/graphics/entity/biter/biter-die-mask1-04.png", + "__base__/graphics/entity/biter/biter-die-mask1-05.png", + "__base__/graphics/entity/biter/biter-die-mask1-06.png", + "__base__/graphics/entity/biter/biter-die-mask1-07.png", + "__base__/graphics/entity/biter/biter-die-mask1-08.png", + "__base__/graphics/entity/biter/biter-die-mask1-09.png", + "__base__/graphics/entity/biter/biter-die-mask1-10.png", + "__base__/graphics/entity/biter/biter-die-mask1-11.png", + "__base__/graphics/entity/biter/biter-die-mask1-12.png", + "__base__/graphics/entity/biter/biter-die-mask1-13.png", + "__base__/graphics/entity/biter/biter-die-mask1-14.png", + "__base__/graphics/entity/biter/biter-die-mask1-15.png", + "__base__/graphics/entity/biter/biter-die-mask1-16.png", + "__base__/graphics/entity/biter/biter-die-mask1-17.png" + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 198, + height = 166, + frame_count = 17, + direction_count = 16, + --shift = util.mul_shift(util.by_pixel(0, -22), scale), + scale = scale, + tint = tint1, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-mask1-01.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-02.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-03.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-04.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-05.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-06.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-07.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-08.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-09.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-10.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-11.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-12.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-13.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-14.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-15.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-16.png", + "__base__/graphics/entity/biter/hr-biter-die-mask1-17.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 398, + height = 328, + frame_count = 17, + --shift = util.mul_shift(util.by_pixel(-1, -21), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint1 + } + }, + { + filenames = + { + "__base__/graphics/entity/biter/biter-die-mask2-01.png", + "__base__/graphics/entity/biter/biter-die-mask2-02.png", + "__base__/graphics/entity/biter/biter-die-mask2-03.png", + "__base__/graphics/entity/biter/biter-die-mask2-04.png", + "__base__/graphics/entity/biter/biter-die-mask2-05.png", + "__base__/graphics/entity/biter/biter-die-mask2-06.png", + "__base__/graphics/entity/biter/biter-die-mask2-07.png", + "__base__/graphics/entity/biter/biter-die-mask2-08.png", + "__base__/graphics/entity/biter/biter-die-mask2-09.png", + "__base__/graphics/entity/biter/biter-die-mask2-10.png", + "__base__/graphics/entity/biter/biter-die-mask2-11.png", + "__base__/graphics/entity/biter/biter-die-mask2-12.png", + "__base__/graphics/entity/biter/biter-die-mask2-13.png", + "__base__/graphics/entity/biter/biter-die-mask2-14.png", + "__base__/graphics/entity/biter/biter-die-mask2-15.png", + "__base__/graphics/entity/biter/biter-die-mask2-16.png", + "__base__/graphics/entity/biter/biter-die-mask2-17.png" + }, + slice = 4, + lines_per_file = 4, + flags = { "mask" }, + line_length = 4, + width = 200, + height = 166, + frame_count = 17, + direction_count = 16, + --shift = util.mul_shift(util.by_pixel(-2, -22), scale), + scale = scale, + tint = tint2, + hr_version = + { + filenames = + { + "__base__/graphics/entity/biter/hr-biter-die-mask2-01.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-02.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-03.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-04.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-05.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-06.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-07.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-08.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-09.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-10.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-11.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-12.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-13.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-14.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-15.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-16.png", + "__base__/graphics/entity/biter/hr-biter-die-mask2-17.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 396, + height = 330, + frame_count = 17, + --shift = util.mul_shift(util.by_pixel(-1, -22), scale), + direction_count = 16, + scale = 0.5 * scale, + tint = tint2 + } + }, + + + + --]] + + + + { + filenames = + { + + "__Arachnids__/graphics/Arachnids-die-shadow-01.png", + "__Arachnids__/graphics/Arachnids-die-shadow-02.png", + "__Arachnids__/graphics/Arachnids-die-shadow-03.png", + "__Arachnids__/graphics/Arachnids-die-shadow-04.png", + "__Arachnids__/graphics/Arachnids-die-shadow-05.png", + "__Arachnids__/graphics/Arachnids-die-shadow-06.png", + "__Arachnids__/graphics/Arachnids-die-shadow-07.png", + "__Arachnids__/graphics/Arachnids-die-shadow-08.png", + "__Arachnids__/graphics/Arachnids-die-shadow-09.png", + "__Arachnids__/graphics/Arachnids-die-shadow-10.png", + "__Arachnids__/graphics/Arachnids-die-shadow-11.png", + "__Arachnids__/graphics/Arachnids-die-shadow-12.png", + "__Arachnids__/graphics/Arachnids-die-shadow-13.png", + "__Arachnids__/graphics/Arachnids-die-shadow-14.png", + "__Arachnids__/graphics/Arachnids-die-shadow-15.png", + "__Arachnids__/graphics/Arachnids-die-shadow-16.png", + "__Arachnids__/graphics/Arachnids-die-shadow-17.png" + + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 199, + height = 120, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + scale = 1.24 * scale, + draw_as_shadow = true, + hr_version = + { + filenames = + { + "__Arachnids__/graphics/hr-Arachnids-die-shadow-01.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-02.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-03.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-04.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-05.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-06.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-07.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-08.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-09.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-10.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-11.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-12.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-13.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-14.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-15.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-16.png", + "__Arachnids__/graphics/hr-Arachnids-die-shadow-17.png" + }, + slice = 4, + lines_per_file = 4, + line_length = 4, + width = 398, + height = 240, + frame_count = 17, + shift = util.mul_shift(util.by_pixel(18, 18), scale), + direction_count = 16, + scale = 0.62 * scale, + draw_as_shadow = true + } + } + } + } +end + +---------------------------------- + +function unitUtils.biterdieanimation(scale, tint1, tint2, altBiter) + if (altBiter == "armored") and mods["ArmouredBiters"] then + return armoredDieBiter(scale, tint1, tint2) + elseif (altBiter == "arachnid") and mods["Arachnids"] then + return arachnidsdieanimation(scale, tint1, tint2) + else + return vanillaDieBiter(scale, tint1, tint2) + end +end + +function unitUtils.biterattackanimation(scale, tint1, tint2, altBiter) + if (altBiter == "armored") and mods["ArmouredBiters"] then + return armoredAttackBiter(scale, tint1, tint2) + elseif (altBiter == "arachnid") and mods["Arachnids"] then + return arachnidsattackanimation(scale, tint1, tint2) + else + return vanillaAttackBiter(scale, tint1, tint2) + end +end + + +function unitUtils.biterrunanimation(scale, tint1, tint2, altBiter) + if (altBiter == "armored") and mods["ArmouredBiters"] then + return armoredRunBiter(scale, tint1, tint2) + elseif (altBiter == "arachnid") and mods["Arachnids"] then + return arachnidsrunanimation(scale, tint1, tint2) + else + return vanillaRunBiter(scale, tint1, tint2) + end +end + + +return unitUtils diff --git a/RampantFixed/prototypes/utils/UpdateImmunities.lua b/RampantFixed/prototypes/utils/UpdateImmunities.lua new file mode 100644 index 00000000..90e5df9f --- /dev/null +++ b/RampantFixed/prototypes/utils/UpdateImmunities.lua @@ -0,0 +1,267 @@ +local constants = require ("__RampantFixed__.libs.Constants") +local FACTION_SET = constants.FACTION_SET + +local immunityUpdates = {} + + +local function setResistancePercent(entity, resistanceType, setPercent) + local entityResist + for i = 1, #entity.resistances do + if entity.resistances[i].type == resistanceType then + entityResist = entity.resistances[i] + break + end + end + if not setPercent then + if entityResist then + return entityResist.percent or 0 + else + return 0 + end + end + if not entityResist then + entity.resistances[#entity.resistances+1] = {type = resistanceType, decrease = 0, percent = 0} + entityResist = entity.resistances[#entity.resistances] + end + entityResist.percent = setPercent + return entityResist.percent +end + +local function setResistanceDecrease(entity, resistanceType, setDecrease) + local entityResist + for i = 1, #entity.resistances do + if entity.resistances[i].type == resistanceType then + entityResist = entity.resistances[i] + break + end + end + if not setDecrease then + if entityResist then + return entityResist.decrease or 0 + else + return 0 + end + end + if not entityResist then + entity.resistances[#entity.resistances+1] = {type = resistanceType, decrease = 0, percent = 0} + entityResist = entity.resistances[#entity.resistances] + end + entityResist.decrease = setDecrease + return entityResist.decrease +end + + +function immunityUpdates.setPlasmaImmunities() + local names = {{"biter", "unit"}, {"spitter", "unit"}, {"spitter-spawner", "unit-spawner"}, {"biter-spawner", "unit-spawner"}, {"worm", "turret"}, {"hive", "unit-spawner"}} + local immuneFactions = {"laser", "electric", "troll", "suicide", "nuclear", "energy-thief"} + + local bobPlasmaFound = data.raw["electric-turret"]["bob-plasma-turret-1"] + + local plasma = data.raw["damage-type"]["plasma"] + for i=1,#immuneFactions do + local factionName = immuneFactions[i] + for u=1,#names do + local name_type = names[u] + for tier = 1, 10 do + for variant = 1, 20 do + entity_name = factionName .. "-" .. name_type[1] .. "-v"..variant.."-t" ..tier.."-rampant" + local entity = data.raw[name_type[2]][entity_name] + if not entity then + break + end + + if bobPlasmaFound then + electicResist = setResistancePercent(entity, "electric") + electicResist = setResistancePercent(entity, "electric", math.max(electicResist, 70)) + + entity.resistances[#entity.resistances+1] = { + type = "plasma", + decrease = 0, + percent = math.max(electicResist, 90) + } + else + electicResist = setResistancePercent(entity, "electric") + entity.resistances[#entity.resistances+1] = { + type = "plasma", + decrease = 0, + percent = math.max(electicResist, 70) + } + end + + end + end + end + end + + local targetDummy = data.raw["radar"]["targetDummyPlasma-rampant"] + if targetDummy then + targetDummy.resistances[#targetDummy.resistances+1] = { + type = "plasma", + decrease = 0, + percent = 100 + } + end + +end + +function immunityUpdates.setPierceImmunities() + local names = {{"biter", "unit"}, {"spitter", "unit"}, {"spitter-spawner", "unit-spawner"}, {"biter-spawner", "unit-spawner"}, {"worm", "turret"}, {"hive", "unit-spawner"}} + --local immuneFactions = {"laser", "electric", "troll", "suicide", "nuclear", "energy-thief"} + + for i=1,#FACTION_SET do + local factionName = FACTION_SET[i].type + for u=1,#names do + local name_type = names[u] + for tier = 1, 10 do + for variant = 1, 20 do + entity_name = factionName .. "-" .. name_type[1] .. "-v"..variant.."-t" ..tier.."-rampant" + local entity = data.raw[name_type[2]][entity_name] + if not entity then + break + end + local physResistance = 0 + for i = 1, #entity.resistances do + if entity.resistances[i].type == "physical" then + physResistance = entity.resistances[i]["percent"] or 0 + break + end + end + if physResistance>0 then + pierceResistance = physResistance + math.max((40 - physResistance)/4, 0.5) -- just becouse no pierce "decrease" + --error("pierceResistance = "..pierceResistance) + if not (pierceResistance==0) then + entity.resistances[#entity.resistances+1] = { + type = "bob-pierce", + decrease = 0, + percent = math.min(pierceResistance+10, 100) + } + end + end + end + end + end + end + + local targetDummy = data.raw["radar"]["targetDummyPhysical-rampant"] + --if targetDummy then + targetDummy.resistances["bob-pierce"] = { + type = "bob-pierce", + percent = 100 + } + --end + +end + +function immunityUpdates.setArmorLaserElectricImmunities() + local electricResist + local electricResist + local laserResist + local entity + + entity = data.raw["armor"]["modular-armor"] + fireResist = setResistancePercent(entity, "fire") + electricResist = setResistancePercent(entity, "electric") + laserResist = setResistancePercent(entity, "laser") + setResistancePercent(entity, "electric", math.max(electricResist, fireResist*0.5)) + setResistanceDecrease(entity, "electric", 3) + setResistancePercent(entity, "laser", math.max(laserResist, fireResist*0.5)) + + entity = data.raw["armor"]["power-armor"] + fireResist = setResistancePercent(entity, "fire") + electricResist = setResistancePercent(entity, "electric") + laserResist = setResistancePercent(entity, "laser") + setResistancePercent(entity, "electric", math.max(electricResist, fireResist*0.5)) + setResistancePercent(entity, "laser", math.max(laserResist, fireResist*0.5)) + + entity = data.raw["armor"]["power-armor-mk2"] + fireResist = setResistancePercent(entity, "fire") + electricResist = setResistancePercent(entity, "electric") + laserResist = setResistancePercent(entity, "laser") + setResistancePercent(entity, "electric", math.max(electricResist, fireResist*0.5)) + setResistancePercent(entity, "laser", math.max(laserResist, fireResist*0.5)) + + entity = data.raw["armor"]["heavy-armor"] + setResistancePercent(entity, "electric", 15) + setResistanceDecrease(entity, "electric", 2) + setResistancePercent(entity, "laser", 10) + + entity = data.raw["armor"]["light-armor"] + setResistancePercent(entity, "electric", 10) + setResistanceDecrease(entity, "electric", 1) + +end + +function immunityUpdates.setResistanceToUnknownDamageTypes() + local knownDamageTypes = {} + knownDamageTypes["impact"] = true + knownDamageTypes["acid"] = true + knownDamageTypes["fire"] = true + knownDamageTypes["poison"] = true + knownDamageTypes["physical"] = true + knownDamageTypes["laser"] = true + knownDamageTypes["electric"] = true + knownDamageTypes["explosion"] = true + knownDamageTypes["plasma"] = true + knownDamageTypes["bob-pierce"] = true + + knownDamageTypes["rampant-longRangeImmunity"] = true + knownDamageTypes["rampant-overdamageProtection"] = true + knownDamageTypes["healing"] = true + + local names = {{"biter", "unit"}, {"spitter", "unit"}, {"spitter-spawner", "unit-spawner"}, {"biter-spawner", "unit-spawner"}, {"worm", "turret"}, {"hive", "unit-spawner"}} + + for damageType, _ in pairs(data.raw["damage-type"]) do + if not knownDamageTypes[damageType] then + log("update immunities to "..damageType) + for i=1,#FACTION_SET do + local factionName = FACTION_SET[i].type + for u=1,#names do + local name_type = names[u] + if not (factionName=="neutral") then + for tier = 2, 10 do + for variant = 1, 20 do + entity_name = factionName .. "-" .. name_type[1] .. "-v"..variant.."-t" ..tier.."-rampant" + local entity = data.raw[name_type[2]][entity_name] + if not entity then + break + end + entity.resistances[damageType] = { + type = damageType, + percent = math.min((tier - 1)*10, 70) + } + end + end + end + end + end + end + end + + local entity + for damageType, _ in pairs(data.raw["damage-type"]) do + if not knownDamageTypes[damageType] then + entity = data.raw["radar"]["targetDummyPlasma-rampant"] + entity.resistances[damageType] = { + type = damageType, + percent = 99.99 + } + entity = data.raw["radar"]["targetDummyFire-rampant"] + entity.resistances[damageType] = { + type = damageType, + percent = 99.99 + } + entity = data.raw["radar"]["targetDummyPhysical-rampant"] + entity.resistances[damageType] = { + type = damageType, + percent = 99.99 + } + entity = data.raw["radar"]["targetDummyLaser-rampant"] + entity.resistances[damageType] = { + type = damageType, + percent = 99.99 + } + end + end +end + +return immunityUpdates diff --git a/RampantFixed/prototypes/utils/UpdatesVanilla.lua b/RampantFixed/prototypes/utils/UpdatesVanilla.lua new file mode 100644 index 00000000..d3c76343 --- /dev/null +++ b/RampantFixed/prototypes/utils/UpdatesVanilla.lua @@ -0,0 +1,264 @@ +local vanillaUpdates = {} + +local biterUtils = require("BiterUtils") + +function vanillaUpdates.useDumbProjectiles() + local turrets = data.raw["turret"]; + + local attackType = "projectile" + + turrets["small-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 60, + range = 25, + min_range = 5, + turn_range = 1, + attackType = "projectile", + fire_penalty = 0, + damageModifier = 0.9, + effectiveLevel = 1, + scale = 0.8 + }, + "acid-ball-2-" .. attackType .. "-rampant") + + turrets["medium-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 60, + range = 30, + min_range = 3, + turn_range = 1, + attackType = "projectile", + fire_penalty = 0, + damageModifier = 0.87, + effectiveLevel = 3, + scale = 1 + }, + "acid-ball-3-" .. attackType .. "-rampant") + + + turrets["big-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 60, + range = 38, + min_range = 3, + attackType = "projectile", + turn_range = 1, + fire_penalty = 0, + effectiveLevel = 5, + scale = 1.2 + }, + "acid-ball-4-" .. attackType .. "-rampant") + + turrets["behemoth-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 60, + range = 48, + min_range = 3, + attackType = "projectile", + turn_range = 1, + fire_penalty = 0, + effectiveLevel = 7, + scale = 1.5 + }, + "acid-ball-5-" .. attackType .. "-rampant") + + local units = data.raw["unit"]; + + local unit = units["small-spitter"] + unit["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 100, + range = 13, + warmup = 30, + min_range = 3, + turn_range = 1, + attackType = "projectile", + effectiveLevel = 1, + fire_penalty = 15, + scale = biterUtils.findRunScale(unit) + }, + "acid-ball-" .. attackType .. "-rampant", + spitterattackanimation(biterUtils.findRunScale(unit), + tint_1_spitter_small, + tint_2_spitter_small)) + + unit = units["medium-spitter"] + unit["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 95, + range = 14, + min_range = 3, + attackType = "projectile", + warmup = 30, + turn_range = 1, + effectiveLevel = 3, + fire_penalty = 15, + scale = biterUtils.findRunScale(unit) + }, + "acid-ball-1-" .. attackType .. "-rampant", + spitterattackanimation(biterUtils.findRunScale(unit), + tint_1_spitter_medium, + tint_2_spitter_medium)) + + unit = units["big-spitter"] + unit["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 90, + range = 15, + min_range = 3, + attackType = "projectile", + warmup = 30, + turn_range = 1, + effectiveLevel = 5, + fire_penalty = 15, + scale = biterUtils.findRunScale(unit) + }, + "acid-ball-2-direction-" .. attackType .. "-rampant", + spitterattackanimation(biterUtils.findRunScale(unit), + tint_1_spitter_big, + tint_2_spitter_big)) + + unit = units["behemoth-spitter"] + unit["attack_parameters"] = biterUtils.createRangedAttack( + { + cooldown = 90, + range = 16, + min_range = 3, + warmup = 30, + attackType = "projectile", + turn_range = 1, + effectiveLevel = 7, + fire_penalty = 15, + scale = biterUtils.findRunScale(unit) + }, + "acid-ball-3-direction-" .. attackType .. "-rampant", + spitterattackanimation(biterUtils.findRunScale(unit), + tint_1_spitter_behemoth, + tint_2_spitter_behemoth)) + + unit = units["small-biter"] + unit["attack_parameters"]["ammo_type"]["action"] = { + { + type = "area", + radius = 0.2, + force = "enemy", + ignore_collision_condition = true, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 7 * 0.75, type = "physical" } + } + } + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 7 * 0.25, type = "physical" } + } + } + } + } + + unit = units["medium-biter"] + unit["attack_parameters"]["ammo_type"]["action"] = { + { + type = "area", + radius = 0.6, + force = "enemy", + ignore_collision_condition = true, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 15 * 0.75, type = "physical" } + } + } + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 15 * 0.25, type = "physical" } + } + } + } + } + + unit = units["big-biter"] + unit["attack_parameters"]["ammo_type"]["action"] = { + { + type = "area", + radius = 0.9, + force = "enemy", + ignore_collision_condition = true, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 30 * 0.75, type = "physical" } + } + } + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 30 * 0.25, type = "physical" } + } + } + } + } + + unit = units["behemoth-biter"] + unit["attack_parameters"]["ammo_type"]["action"] = { + { + type = "area", + radius = 1.2, + force = "enemy", + ignore_collision_condition = true, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 90 * 0.75, type = "physical" } + } + } + }, + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = { amount = 90 * 0.25, type = "physical" } + } + } + } + } +end + +return vanillaUpdates diff --git a/Rampant_3.1.2/prototypes/utils/WormUtils.lua b/RampantFixed/prototypes/utils/WormUtils.lua similarity index 98% rename from Rampant_3.1.2/prototypes/utils/WormUtils.lua rename to RampantFixed/prototypes/utils/WormUtils.lua index 73764fe5..c35bc296 100644 --- a/Rampant_3.1.2/prototypes/utils/WormUtils.lua +++ b/RampantFixed/prototypes/utils/WormUtils.lua @@ -1,19 +1,3 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - local wormUtils = {} function wormUtils.wormFoldedAnimation(scale, tint, tint2) diff --git a/RampantFixed/remote_interface.lua b/RampantFixed/remote_interface.lua new file mode 100644 index 00000000..6757f482 --- /dev/null +++ b/RampantFixed/remote_interface.lua @@ -0,0 +1,470 @@ +-- Suggestions for additional functionality are welcome +-- look in RampantFixedRemote\remote_interface_example.lua for some tips + +-- now you can: +-- get/set maximum wave size: wave sizes are proportional to this value +-- get/set wave size: specifies the size of the waves directly and disables its recalculation +-- get array of LuaUnitGroup for rampant squads (only attack squads) +-- order to create an attack squad of a specified size or a default size. +-- get array of all enemy bases stats, or get enemy base stats for specified position / specified Id +-- directly set enemy base factions +-- get/set AI points and AI state for specified surface +-- get pheromones for specified chunk +-- set enemy base to grow + +-- setting parameters requires permission. Don't forget to check it out +-- all functions *_ExtCtrl do nothing and return nil, if startup setting "rampantFixed--allowExternalControl" (Remote interface: allow external control AI) disabled -- upd. 1.8.3+ "allowExternalControl" always true +-- it is recommended to issue a message to the user to enable setting + +local aiPlanning = require("libs/AIPlanning") +local baseUtils = require("libs/BaseUtils") +local chunkPropertyUtils = require("libs/ChunkPropertyUtils") +local constants = require("Constants") +local mapProcessor = require("libs/MapProcessor") +local mapUtils = require("libs/MapUtils") +local config = require("__RampantFixed__/config") + +local function getBaseStats(base) + if not base then + return nil + end + local baseStats = { + id = base.id, -- number + mapIndex = base.mapIndex, -- its same as surface.index + x = base.x, -- 1st chunk, where base has been created. x, y coordinates + y = base.y, + thisIsRampantEnemy = base.thisIsRampantEnemy, -- boolean. Only if true, base will mutate + tierHandicap = base.tierHandicap, -- 0..2. Lesser than base.tier. Actual tier = base.tier - base.tierHandicap. + tier = base.tier, -- number 1..10 + factions = {}, -- {factionName1 = number, ..., factionNameN = number }. Sum of numbers must be equal 1 + chunks = {} -- list of base chunks coordinates (upper left corner) {{x = number, y = number}, ... ...,{x = number, y = number}} + } + local alignment + if base.newAlignmentAndSteps then + alignment = base.newAlignmentAndSteps[2] + else + alignment = base.alignment + end + + for faction, rate in pairs(alignment) do + baseStats.factions[faction] = rate + end + + for chunk, _ in pairs(base.chunks) do + if chunk and (type(chunk) == "table") then + baseStats.chunks[#baseStats.chunks + 1] = {x = chunk.x, y = chunk.y} + end + end + return baseStats +end + +local function getFactionsList() + local factions = {} + for i=1,#constants.FACTION_SET do + local faction = constants.FACTION_SET[i] + factions[faction.type] = {tierMin = faction.acceptRate[1], tierMax = faction.acceptRate[2]} + end + return factions +end + +local validAI_StateList = {} +validAI_StateList[constants.AI_STATE_PEACEFUL] = constants.stateEnglish[constants.AI_STATE_PEACEFUL] -- [1] +validAI_StateList[constants.AI_STATE_AGGRESSIVE] = constants.stateEnglish[constants.AI_STATE_AGGRESSIVE] -- [2] +validAI_StateList[constants.AI_STATE_RAIDING] = constants.stateEnglish[constants.AI_STATE_RAIDING] -- [4] -- its not typo. state 3 isn't exist +validAI_StateList[constants.AI_STATE_MIGRATING] = constants.stateEnglish[constants.AI_STATE_MIGRATING] -- [5] +validAI_StateList[constants.AI_STATE_SIEGE] = constants.stateEnglish[constants.AI_STATE_SIEGE] -- [6] +validAI_StateList[constants.AI_STATE_ONSLAUGHT] = constants.stateEnglish[constants.AI_STATE_ONSLAUGHT] -- [7] +validAI_StateList[constants.AI_STATE_GROWING] = constants.stateEnglish[constants.AI_STATE_GROWING] -- [8] + + +remote.add_interface("rampantFixed", { + -------------------- + -- return true if external control is enabled + -- note: all functions *_ExtCtrl do nothing and return nil, if allowExternalControl = false + -- note: since the "rampantFixed--allowExternalControl" is a startup setting, it is enough to check it once (on every load) + allowExternalControl = function() + return global.universe.allowExternalControl + end + , + -------------------- + -- set maximum wave size. Canceled if no value is passed, or a value outside the allowed range. + -- parameters: {attackWaveMaxSize = number} + -- return: number + setWaveMaxSize_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if parameters and parameters.attackWaveMaxSize and (type(parameters.attackWaveMaxSize) == "number") and (parameters.attackWaveMaxSize > 0) and (parameters.attackWaveMaxSize <= 1000) then + global.universe.externalControlValues.attackWaveMaxSize = parameters.attackWaveMaxSize + else + global.universe.externalControlValues.attackWaveMaxSize = nil + end + aiPlanning.planningUniverse(global.universe, game.forces.enemy.evolution_factor, game.tick) + return config.getAttackWaveMaxSize(global.universe) + end + , + -------------------- + -- return: number of maximum wave size + -- note: Based on maximum wave size, the wave size is calculated + getWaveMaxSize = function() + return config.getAttackWaveMaxSize(global.universe) + end + , + -------------------- + -- set and freeze wave size. Canceled if no value is passed, or a value outside the allowed range + -- parameters: {attackWaveSize = number} + -- return: number + -- note: its average wave size, including all modifiers. When forming attacking squads, this value is taken + -- note: starting from 50% of the maximum size, the cost of the squad increases + setWaveSize_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if parameters and parameters.attackWaveSize and (type(parameters.attackWaveSize) == "number") and (parameters.attackWaveSize > 0) and (parameters.attackWaveSize <= 1000) then + global.universe.externalControlValues.attackWaveSize = parameters.attackWaveSize + else + global.universe.externalControlValues.attackWaveSize = nil + end + aiPlanning.planningUniverse(global.universe, game.forces.enemy.evolution_factor, game.tick) + return config.getAttackWaveSize(global.universe) + end + , + -------------------- + -- return: number + -- note: its average wave size, including all modifiers. When forming attacking squads, this value is taken + getWaveSize = function() + return config.getAttackWaveSize(global.universe) + end + , + -------------------- + -- return: array of luaUnitGroup. All surfaces. Only Rampant squads. Settlers and underground attacks are not in this list + getRampantAttackGroups = function() + local groups = {} + for groupNumber, squad in pairs(global.universe.groupNumberToSquad) do + if squad.map and squad.group.valid then + groups[#groups+1] = squad.group + end + end + return groups + end + , + -------------------- + -- Creates an attack squad based on the current AI mode. Won't spawn a squad if peaceful mode, no suitable nests, or no biters near nests or no player base + -- It is not recommended to call many times per tick: the procedure for gathering a squad is resource-intensive. + -- A newly created squad must first gather at a rally point before it is ready to attack. + -- If the AI does not have enough action points, then squad will be free + -- + -- parameters: {surfaceIndex = number, ignoreSquadLimit = bool, size = nil or numeric} + -- ignoreSquadLimit - allow to create more squads then "rampantFixed--maxNumberOfSquads" + -- size (optional)- number of squad members. If not specified, the default squad size is used. If there are no so many biters, then the actual size will be smaller + -- + -- return: LuaUnitGroup or nil, if cant create squad + createSquad_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + local remoteInterfaceParameters + if parameters.size and (type(parameters.size) == "number") then + remoteInterfaceParameters = {ignoreSquadLimit = parameters.ignoreSquadLimit, size = parameters.size} + else + remoteInterfaceParameters = {ignoreSquadLimit = parameters.ignoreSquadLimit} + end + + for i = 1, 10 do + remoteInterfaceParameters.i = i + mapProcessor.processSpawners(map, game.tick, remoteInterfaceParameters) + if remoteInterfaceParameters.squad then + return remoteInterfaceParameters.squad.group + end + end + return nil + end + , + -------------------- + -- parameters: {surfaceIndex = number, position = {x = number , y = number}} + -- + -- return: table of base stats or nil, if no base + -- see the list of props in the "local function getBaseStats " + getBaseByPosition = function(parameters) + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + if not parameters.position then + return nil + end + + local chunk = mapUtils.getChunkByPosition(map, parameters.position) + if (chunk == -1) then + return nil + end + local base = chunkPropertyUtils.getChunkBase(map, chunk) + if not base then + return nil + end + return getBaseStats(base) + end + , + -------------------- + -- parameters: {id = number} + -- return: table of base stats or nil, if no base + getBaseById = function(parameters) + if parameters and parameters.id then + return getBaseStats(global.universe.bases[parameters.id]) + else + return nil + end + end + , + -------------------- + -- return array of bases stats (look at getBaseStats) + getBases = function() + local bases = {} + for i, base in pairs(global.universe.bases) do + bases[#bases+1] = getBaseStats(base) + end + return bases + end + , + -------------------- + -- Returns a factions based on the mod settings (players can disable factions in the launch options) + -- return: table { + -- factionName1 = {tierMin = Number, tierMax = Number}, + -- ..., + -- factionNameN = ...} + getFactions = function() + return getFactionsList() + end + , + -------------------- + -- Returns a factions for specified tier. + -- parameters: {tier = Number 1..10} + -- return: table { + -- factionName1 = {tierMin = Number, tierMax = Number}, + -- ..., + -- factionNameN = ...} + getFactionsByTier = function(parameters) + local factions = {} + if parameters and parameters.tier and (type(parameters.tier) == "number") then + for i=1,#constants.FACTION_SET do + local faction = constants.FACTION_SET[i] + if (faction.acceptRate[1]<=parameters.tier) and faction.acceptRate[2]>=parameters.tier then + factions[faction.type] = {tierMin = faction.acceptRate[1], tierMax = faction.acceptRate[2]} + end + end + end + return factions + end + + , + -------------------- + -- Assigns a set of factions to the base. The mutation will happen by itself, after some time + -- + -- parameters: {id = number, factions = {factionName1 = rate1, factionName2 = rate2}} + -- sum of rates must be = 1 + -- The number of factions should preferably be equal 2, although 1 or 3+ will also work. + -- return: + -- -1 if no parameters or wrong parameters (wrong base id, missed "factions", etc...) + -- -2 if sum of rates not equals 1 + -- 1 if set is successful + -- + -- note: missed factions will be write as "neutral" faction + -- note: it can take up to 10 minutes between the installation of new genes and the actual mutation. Depends + -- on the size of the map and how long ago there was a mutation in the chunk. Mutation is not possible more than once every 10 minutes + -- also, if there is already a mass mutation in the chunk at the time the command is issued, then the delay will increase + setBaseFactions_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if (not parameters) or (not parameters.id) then + return -1 + end + local base = global.universe.bases[parameters.id] + if not base then + return -1 + end + if (not parameters) or (not parameters.factions) or (not type(parameters.factions) == "table") then + return -1 + end + -- lets check new factions for mistakes + local factionsList = getFactionsList() + local sumRates = 0 + local baseFactions = {} + for faction, rate in pairs(parameters.factions) do + if (type(faction) == "string") and (type(rate) == "number") then + sumRates = sumRates + rate + if factionsList[faction] then + baseFactions[faction] = (baseFactions[faction] or 0) + rate + else + baseFactions["neutral"] = (baseFactions["neutral"] or 0) + rate + end + end + end + + if (sumRates >= 0.99) and (sumRates <= 1.01) then + local tick = game.tick + base.newAlignmentAndSteps = nil + base.alignment = baseFactions + changingEntities = true + base.nextMutationTick = tick + 54000 -- prevent ingame mutations for 15 min + for chunk, _ in pairs(base.chunks) do + chunk.nextMutationTick = tick + end + return 1 + else + return -2 + end + end + , + -------------------- + -- parameters: {surfaceIndex = number} + -- return: nil or number of points + getAI_points = function(parameters) + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + return map.points + end + + , + -------------------- + -- set AI point for specified surface. Return nil, if no surface, or surface is ignored by Rampant, or rampantFixed--allowExternalControl is disabled + -- set points if parameters.points defined + -- parameters: {surfaceIndex = number, points = number} + -- return: nil or number of points + -- note: attack squad cost 175 points (can vary from 90 to 350, depending on various modifiers). But it is worth focusing on the value 175 + setAI_points_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + if parameters.points then + if parameters.points <= 0 then + map.points = 0 + elseif parameters.points > 100000 then + map.points = 100000 + else + map.points = parameters.points + end + end + return map.points + end + , + -------------------- + -- set AI state for specified surface. Return nil, if no surface, or surface is ignored by Rampant, or rampantFixed--allowExternalControl is disabled + -- parameters: {surfaceIndex = number, state = number} + -- return: nil or number (new AI state) + setAI_state_ExtCtrl = function(parameters) + if not global.universe.allowExternalControl then + return nil + end + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + if (not parameters.state) or (not validAI_StateList[parameters.state]) then + return nil + end + + map.state = parameters.state + return {state = map.state, stateEnglish = validAI_StateList[map.state]} + end + , + -------------------- + -- parameters: {surfaceIndex = number} + -- return: nil or number + getAI_state = function(parameters) + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + return {state = map.state, stateEnglish = validAI_StateList[map.state]} + end + , + -------------------- + -- return: table { + -- 1 = "AI_STATE_PEACEFUL", + -- 2 = + -- .. + -- } + getValidAI_StateList = function() + return validAI_StateList + end + + , + -------------------- + -- Returns a pheromones in specificed chunk + -- parameters: {surfaceIndex = number, position = {x = number , y = number}} + -- return: table {BASE_PHEROMONE = number, BASE_DETECTION_PHEROMONE = number, PLAYER_PHEROMONE = number, RESOURCE_PHEROMONE = number} (or nil if surface ignored or chunk isn't generated or not processed yet) + getPheromones = function(parameters) + if (not parameters) or (not parameters.surfaceIndex) then + return nil + end + local map = global.universe.maps[parameters.surfaceIndex] + if not map then + return nil + end + + if not parameters.position then + return nil + end + local chunk = mapUtils.getChunkByPosition(map, parameters.position) + if (chunk == -1) then + return nil + end + local pheromones = {} + pheromones["BASE_PHEROMONE"] = chunk[constants.BASE_PHEROMONE] or 0 -- most attacks go the way of increasing this pheromone. Reduced by 10% per chunk. Hugely reduced when passing through a chunk with a lot of defense. A large number of losses also reduces this value + pheromones["BASE_DETECTION_PHEROMONE"] = chunk[constants.BASE_DETECTION_PHEROMONE] or 0 -- max value 10000. Reduced by 10% per chunk. Military biuldings set BASE_DETECTION_PHEROMONE to 10000. Other buildings are different. If there are few buildings, then there will be less than 10000 + pheromones["PLAYER_PHEROMONE"] = chunk[constants.PLAYER_PHEROMONE] or 0 -- max value 300, if player(s) inside this chunk (and no defence). Reduced by 55% per chunk + pheromones["RESOURCE_PHEROMONE"] = chunk[constants.RESOURCE_PHEROMONE] or 0 -- normalized resource estimate. Find out empirically. + -- note: pheromones are weakened more if the chunk is poorly passable. + -- pheromones are not transmitted from an adjacent chunk if the rampant thinks there is no passage + -- pheromones also spread diagonally + -- Keep in mind that pheromones do not spread immediately, and the situation on the map changes + return pheromones + end + -- , + -- setBaseToGrow_ExtCtrl = function(parameters) + -- local universe = global.universe + -- if not universe.allowExternalControl then + -- return nil + -- end + -- if (not parameters) or (not parameters.id) then + -- return -1 + -- end + -- local base = universe.bases[parameters.id] + -- if not base then + -- return -1 + -- end + + -- universe.growingBases[base.id] = {tick = 0, nests = 5, worms = 5} + -- return 1 + -- end + } +) \ No newline at end of file diff --git a/RampantFixed/settings.lua b/RampantFixed/settings.lua new file mode 100644 index 00000000..72ee83b4 --- /dev/null +++ b/RampantFixed/settings.lua @@ -0,0 +1,1142 @@ +data:extend({ + { + type = "bool-setting", + name = "rampantFixed--allowExternalControl", + description = "rampantFixed--allowExternalControl", + setting_type = "startup", + default_value = false, + order = "a[modifier]-a0[remote]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--useDumbProjectiles", + description = "rampantFixed--useDumbProjectiles", + setting_type = "startup", + default_value = true, + order = "a[modifier]-a1[projectiles]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--disableCollidingProjectiles", + setting_type = "startup", + default_value = true, + order = "b[modifier]-b1[trigger]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--useBlockableSteamAttacks", + setting_type = "startup", + default_value = false, + order = "b[modifier]-b2[trigger]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--oldRedEnemyMapColor", + setting_type = "startup", + default_value = false, + order = "b[modifier]-c[trigger]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--attackWaveMaxSize", + setting_type = "runtime-global", + minimum_value = 20, + maximum_value = 600, + default_value = 75, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--attackWaveMaxSizeEvoPercent", + setting_type = "runtime-global", + minimum_value = 5, + maximum_value = 100, + default_value = 100, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--agressiveStart", + setting_type = "runtime-global", + default_value = false, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--maxNumberOfSquads", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 30, + default_value = 30, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--maxNumberOfBuilders", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 120, + default_value = 35, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--unitAndSpawnerFadeTime", + setting_type = "startup", + minimum_value = 1, + maximum_value = 30000000 * 60, + default_value = 5 * 60, + order = "b[modifier]-f[wave]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--enableFadeTime", + setting_type = "startup", + default_value = true, + order = "b[modifier]-f[wave]", + per_user = false + }, + + -- { + -- type = "bool-setting", + -- name = "rampantFixed--liteMode", + -- setting_type = "startup", + -- default_value = false, + -- order = "b[modifier]-g[ai]", + -- per_user = false + -- }, + + { + type = "bool-setting", + name = "rampantFixed--enableSwarm", + description = "rampantFixed--enableSwarm", + setting_type = "startup", + default_value = true, + order = "b[modifier]-j[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--enableShrinkNestsAndWorms", + description = "rampantFixed--enableShrinkNestsAndWorms", + setting_type = "startup", + default_value = true, + order = "b[modifier]-j[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-a[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-curvedRail", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-b[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-straightRail", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-c[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-bigElectricPole", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-d[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-railSignals", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-e[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-railChainSignals", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-f[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-trainStops", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-g[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--safeBuildings-lamps", + setting_type = "runtime-global", + default_value = false, + order = "c[modifier]-h[safe]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--addWallResistanceAcid", + description = "rampantFixed--addWallResistanceAcid", + setting_type = "startup", + default_value = false, + order = "c[modifier]-j[damage]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--newEnemies", + description = "rampantFixed--newEnemies", + setting_type = "startup", + default_value = true, + order = "e[modifier]-a[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--allowOtherEnemies", + description = "rampantFixed--allowOtherEnemies", + setting_type = "startup", + default_value = false, + order = "e[modifier]-a[unit]_01", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--max-evo-dist", + setting_type = "startup", + default_value = 9600, + minimum_value = 1000, + maximum_value = 1000000, + order = "e[modifier]-b[unit]", + per_user = false + }, + + + { + type = "string-setting", + name = "rampantFixed--newEnemiesSide", + description = "rampantFixed--newEnemiesSide", + setting_type = "startup", + default_value = "MIXED", + order = "e[modifier]-a[unit]_02", + allowed_values = {"MIXED", "NORTH", "EAST", "SOUTH", "WEST", "NORTH-EAST", "SOUTH-EAST", "SOUTH-WEST", "NORTH-WEST"}, + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--newEnemyVariations", + description = "rampantFixed--newEnemyVariations", + setting_type = "startup", + minimum_value = 1, + maximum_value = 20, + default_value = 1, + order = "l[modifier]-h[unit]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--tierStart", + setting_type = "startup", + default_value = 1, + minimum_value = 1, + maximum_value = 10, + order = "l[modifier]-l[unit]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--tierEnd", + setting_type = "startup", + minimum_value = 1, + maximum_value = 10, + default_value = 5, + order = "l[modifier]-m[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--allowLongRangeImmunity", + setting_type = "startup", + default_value = true, + order = "l[modifier]-n1[unit]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--longRangeImmunity_efficiency", + setting_type = "startup", + minimum_value = 10, + maximum_value = 100, + default_value = 95, + order = "l[modifier]-n2[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--allowOneshotProtection", + setting_type = "startup", + default_value = true, + order = "l[modifier]-o1[unit]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--oneshotProtection_efficiency", + setting_type = "startup", + minimum_value = 10, + maximum_value = 100, + default_value = 100, + order = "l[modifier]-o2[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--buildingsImmuneToElectic", + description = "rampantFixed--buildingsImmuneToElectic", + setting_type = "startup", + default_value = true, + order = "l[modifier]-p1[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--acidEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t1[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--laserEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t2[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--electricEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t2a[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--suicideEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t2c[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--fastEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t2d[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--waspEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t3[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--spawnerEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t3a[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--trollEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t3b[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--energyThiefEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t3c[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--fireEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t4[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--ArachnidsEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t4a[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--physicalEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t5[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--infernoEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t6a[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--poisonEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t6b[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--nuclearEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t7[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--JuggernautEnemy", + setting_type = "startup", + default_value = true, + order = "l[modifier]-t9[unit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--unitSpawnerBreath", + setting_type = "startup", + default_value = true, + order = "l[modifier]-zb[unit]", + per_user = false + }, + + -- { + -- type = "bool-setting", + -- name = "rampantFixed--disableVanillaAI", + -- description = "rampantFixed--disableVanillaAI", + -- setting_type = 'runtime-global', + -- default_value = true, + -- order = "m[total]-a[ai]", + -- per_user = false + -- }, + + { + type = "bool-setting", + name = "rampantFixed--enableMigration", + description = "rampantFixed--enableMigration", + setting_type = 'runtime-global', + default_value = false, + order = "m[total]-c1[ai]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--peacefulAIToggle", + setting_type = "runtime-global", + default_value = true, + order = "m[total]-c2[ai]", + per_user = false + }, + + { + type = "int-setting", + name = "rampantFixed--peacePeriod", + setting_type = "runtime-global", + minimum_value = 0, + maximum_value = 1200, + default_value = 20, + order = "m[total]-c2a[ai]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--raidAIToggle", + setting_type = "runtime-global", + default_value = true, + order = "m[total]-c3[ai]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--siegeAIToggle", + setting_type = "runtime-global", + default_value = true, + order = "m[total]-c4[ai]", + per_user = false + }, + + -- { + -- type = "int-setting", + -- name = "rampantFixed--siegeMinDistance", + -- setting_type = "runtime-global", + -- minimum_value = 0, + -- maximum_value = 3, + -- default_value = 1, + -- order = "m[total]-c4a[ai]", + -- per_user = false + -- }, + + { + type = "bool-setting", + name = "rampantFixed--undergroundAttack", + setting_type = "runtime-global", + default_value = true, + order = "m[total]-c5[ai]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--undergroundAttackProbability", + setting_type = "runtime-global", + minimum_value = 0.01, + maximum_value = 0.50, + default_value = 0.15, + order = "m[total]-c6[ai]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--permanentNocturnal", + description = "rampantFixed--permanentNocturnal", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-a[ai]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--allowDaytimePlayerHunting", + description = "rampantFixed--allowDaytimePlayerHunting", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-a[ai]2", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--allowDaytimeNonRampantActions", + description = "rampantFixed--allowDaytimeNonRampantActions", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-a[ai]3", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--aiPointsScaler", + description = "rampantFixed--aiPointsScaler", + setting_type = "runtime-global", + default_value = 1.0, + minimum_value = 0.0, + maximum_value = 100.0, + order = "m[total]-b[ai]1", + per_user = false + }, + + { + type = "string-setting", + name = "rampantFixed--aiDifficulty", + description = "rampantFixed--aiDifficulty", + setting_type = "runtime-global", + default_value = "Hard", + order = "m[total]-b[ai]m", + allowed_values = {"Hard", "Lite"}, + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--aiPointsPrintGainsToChat", + description = "rampantFixed--aiPointsPrintGainsToChat", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-d1[ai]z", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--aiPointsPrintSpendingToChat", + description = "rampantFixed--aiPointsPrintSpendingToChat", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-d2[ai]z", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--printAIStateChanges", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-d3[ai]z", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--debugTemperament", + setting_type = "runtime-global", + default_value = false, + order = "m[total]-d4[ai]zz", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--showAdminMenu", + description = "rampantFixed--showAdminMenu", + setting_type = "runtime-per-user", + default_value = false, + order = "m[total]-c[ai]z1", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--settlementsProbability", + setting_type = "runtime-global", + default_value = 0.400, + minimum_value = 0.001, + maximum_value = 1, + order = "m[total]-b[ai]a", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--vengenceProbabilityPercent", + setting_type = "runtime-global", + default_value = 0.04, + minimum_value = 0, + maximum_value = 1, + order = "m[total]-b[ai]a1", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--chainVengenceCoefficient", + setting_type = "runtime-global", + default_value = 0.6, + minimum_value = 0, + maximum_value = 1, + order = "m[total]-b[ai]a2", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--removeBloodParticles", + description = "rampantFixed--reduceBloodParticles", + setting_type = "startup", + default_value = false, + order = "n[modifier]-a[optimize]", + per_user = false + }, + { + type = "bool-setting", + name = "rampantFixed--fireSafety-flamethrower", + setting_type = "startup", + default_value = true, + order = "n[modifier]-b[optimize]", + per_user = false + }, + { + type = "bool-setting", + name = "rampantFixed--flamethrowerTurretsRebalance", + setting_type = "startup", + default_value = false, + order = "n[modifier]-c[optimize]", + per_user = false + }, + { + type = "bool-setting", + name = "rampantFixed--rampantArsenalRebalance", + setting_type = "startup", + default_value = true, + order = "n[modifier]-d[optimize]", + per_user = false + }, + + -- { + -- type = "bool-setting", + -- name = "rampantFixed--enableFullMapScan", + -- setting_type = "runtime-global", + -- default_value = true, + -- order = "n[modifier]-a[optimize]", + -- per_user = false + -- }, + + { + type = "bool-setting", + name = "rampantFixed--unkillableLogisticRobots", + setting_type = "startup", + default_value = false, + order = "n[modifier]-d[optimize]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--unkillableConstructionRobots", + setting_type = "startup", + default_value = false, + order = "n[modifier]-c[optimize]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitBiterHealthScaler", + description = "rampantFixed--unitBiterHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-a[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitBiterHealingScaler", + description = "rampantFixed--unitBiterHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-a[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitBiterSpeedScaler", + description = "rampantFixed--unitBiterSpeedScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-b[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitBiterDamageScaler", + description = "rampantFixed--unitBiterDamageScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-c[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitBiterRangeScaler", + description = "rampantFixed--unitBiterRangeScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-d[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpitterHealthScaler", + description = "rampantFixed--unitSpitterHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-e[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpitterHealingScaler", + description = "rampantFixed--unitSpitterHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-e[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpitterSpeedScaler", + description = "rampantFixed--unitSpitterSpeedScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-f[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpitterDamageScaler", + description = "rampantFixed--unitSpitterDamageScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-g[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpitterRangeScaler", + description = "rampantFixed--unitSpitterRangeScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-h[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitDroneHealthScaler", + description = "rampantFixed--unitDroneHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-i[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitDroneHealingScaler", + description = "rampantFixed--unitDroneHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-i[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitDroneSpeedScaler", + description = "rampantFixed--unitDroneSpeedScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-j[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitDroneDamageScaler", + description = "rampantFixed--unitDroneDamageScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-k[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitDroneRangeScaler", + description = "rampantFixed--unitDroneRangeScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-l[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitWormHealthScaler", + description = "rampantFixed--unitWormHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-m[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitWormHealingScaler", + description = "rampantFixed--unitWormHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-m[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitWormDamageScaler", + description = "rampantFixed--unitWormDamageScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-n[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitWormRangeScaler", + description = "rampantFixed--unitWormRangeScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-o[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpawnerHealthScaler", + description = "rampantFixed--unitSpawnerHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-p[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpawnerHealingScaler", + description = "rampantFixed--unitSpawnerHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-p[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpawnerOwnedScaler", + description = "rampantFixed--unitSpawnerOwnedScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-q[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpawnerSpawnScaler", + description = "rampantFixed--unitSpawnerSpawnScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-r[unit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitSpawnerRespawnScaler", + description = "rampantFixed--unitSpawnerRespawnScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-r[unit]", + per_user = false + }, + + + { + type = "double-setting", + name = "rampantFixed--unitHiveRespawnScaler", + description = "rampantFixed--unitHiveRespawnScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-r[zunit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitHiveHealthScaler", + description = "rampantFixed--unitHiveHealthScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-r[zunit]", + per_user = false + }, + + { + type = "double-setting", + name = "rampantFixed--unitHiveHealingScaler", + description = "rampantFixed--unitHiveHealingScaler", + setting_type = "startup", + default_value = 1.0, + minimum_value = 0.0001, + maximum_value = 100000.0, + order = "p[modifier]-r[zunit]", + per_user = false + }, + + { + type = "bool-setting", + name = "rampantFixed--attackWaveGenerationUsePlayerProximity", + setting_type = "runtime-global", + default_value = true, + order = "b[modifier]-b[trigger]", + per_user = false + + }, + + { + type = "double-setting", + name = "rampantFixed--attackPlayerThreshold", + setting_type = "runtime-global", + minimum_value = 0, + default_value = 20, + order = "b[modifier]-c[threshold]", + per_user = false + } + +}) \ No newline at end of file diff --git a/RampantFixed/sounds/attacks/acid-end.ogg b/RampantFixed/sounds/attacks/acid-end.ogg new file mode 100644 index 00000000..dfc6c07b Binary files /dev/null and b/RampantFixed/sounds/attacks/acid-end.ogg differ diff --git a/RampantFixed/sounds/attacks/acid-mid.ogg b/RampantFixed/sounds/attacks/acid-mid.ogg new file mode 100644 index 00000000..1342c61b Binary files /dev/null and b/RampantFixed/sounds/attacks/acid-mid.ogg differ diff --git a/RampantFixed/thumbnail.png b/RampantFixed/thumbnail.png new file mode 100644 index 00000000..5ac34512 Binary files /dev/null and b/RampantFixed/thumbnail.png differ diff --git a/Rampant_3.1.2/COPYING b/Rampant_3.1.2/COPYING deleted file mode 100644 index 621d89de..00000000 --- a/Rampant_3.1.2/COPYING +++ /dev/null @@ -1,619 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. diff --git a/Rampant_3.1.2/NOTICE b/Rampant_3.1.2/NOTICE deleted file mode 100644 index 29562203..00000000 --- a/Rampant_3.1.2/NOTICE +++ /dev/null @@ -1,16 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - diff --git a/Rampant_3.1.2/README.md b/Rampant_3.1.2/README.md deleted file mode 100644 index 27145057..00000000 --- a/Rampant_3.1.2/README.md +++ /dev/null @@ -1,406 +0,0 @@ -# Rampant Tactics -Factorio Mod - Improves the enemies tactics by using potential fields (pheromones) allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, raids, rallying death cry, and player hunting. Uses blockable biter projectiles. Adds new Enemies which can be disabled in mod settings. Difficulty setting in mod options menu. - -# Site - -https://mods.factorio.com/mod/Rampant - -# Forum Post - -https://forums.factorio.com/viewtopic.php?f=94&t=31445 - -# Notes - -0.14.14 factorio version fixed save corruption -0.14.10 factorio version fixed more pathing issues -0.14.4 factorio version fixed some issues with unit groups commands - -There will be a pause the first time and on every upgrade that Rampant loads. -This is due to indexing all the chunks that have been generated. - -MP should be working -If experiencing desyncs, after an update, please do the following: - 1) let me know - 2) Load save with Rampant enabled - 3) Save the map after Rampant has been updated - 4) Load save in step 3 - -Configure Options not in game menu: -- Ramp up to max biter wave size - -# Features - -- New Enemy Factions - Neutral, Acid, Fast, Physical, Electric, Inferno, Suicide, Fire, Nuclear, Laser, Troll, Wasp, Spawner -- Swarming - Units will smoothly slide by one another allowing for streamlined attacking -- Difficulty Scaling - A mod option to control how quickly the ai can perform actions like making attack waves. -- Nocturnal Mode - A mod option to force biters to only attack at night. Does not yet affect vanilla attacks. Best use with clockwork or daynight extender mod -- Recycling Biters - When large groups of biters form on the game map and aren't assigned to a unit group or near a base will be periodically removed and refunded to the ai causing attack waves proportional to the number of units removed. -- Breaching - When biters are destroying structures nearby unit groups will come to join them -- Frenzy squads - When a unit group gets close to a player or start combat they switch to attacking everything in there path for a set radius or until there is nothing left -- Rabid squads - Is in a permanent frenzied state as soon as the group is formed -- Tactical Retreats - These will take place when a unit group is in a chunk that has reached a death threshold -- Unit Group Forming - Any chunks with spawners in it that is covered by a pollution or player clouds will form groups based on the evolution factor -- Probing Behavior Against Defenses - unit groups will attempt to avoid chunks that are soaked in death -- Player Hunting - Unit groups will track the player based on there emitted pheromone cloud -- Rallying Death Cry - When a unit is killed on a chunk that is past the retreat threshold, the unit will attempt to summon reinforcements to help them -- Counterattacks - When the player is in combat near nests they will send reinforcements to unit groups -- Reinforcements - Nests will send assistance to nearby nests under attack by the player -- No Homing Projectiles - All projectiles are fired at locations and no longer track the player -- Pathfinding - Unit groups will use potential fields to perform only single step pathfinding allowing for efficient and dynamic pathing -- Peace mode - If something sets peace mode, Rampant will respect it -- Ion Cannon Reaction - Firing the Ion Cannon will cause nests around the blast site to form into an attack wave and agitate all biters -- Rocket Reaction - Firing the rocket from the rocket silo will cause the biters to form extra attack waves -- Blockable Projectiles - Some of the biters projectiles can now be blocked by walls and trees -- Raiding AI state - The AI will periodically send attack waves based on building proximity and not just pollution -- Migration AI State - Where the ai looks for resources patches to setup new bases -- Sieging AI state - Where the ai does a migration event but also builds towards the player and their base -- Onslaught AI state - Where the ai gains 2x credits per logic cycle that can be used on units and buildings -- Vanilla AI Replacement - The default expansion and attack waves can be completely turned off and allow Rampant to work its magic - -# Planned Features - -- Tunneling Biters -- Infesting Biters - -# Version History - -New updates appear in the changelog now - -0.15.24 - -- Feature: Swarming - by reducing the unit collision_mask to 40% of its original size the units no longer have the pathing issues that plagued large groups attacking -- Optimization: further reduced memory footprint for faster saving and loading - -0.15.23 - -- Fixed: Retreat radius being centered on chunk corner instead of on the unit dying -- Fixed: Spitter flamethrower sound fx -- Moved: Item Collector into separate mod -- Balance: Adjusted spitter and worms damages, ranges, and cooldowns to be more inline with vanilla -- Optimization: Reduced memory footprint for faster saving and loading -- Framework: Reorganization of files - -0.15.22 - -- Contribution - Martok88, Improvement: Added optional attack wave message per player - -0.15.21 - -- Fixed: Added check for nil'ed itemCollection event (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=200#p302631) -- Fixed: Item Collector deconstruction not pulling items before destroying chest -- Fixed: Force Item Collector chest to be only minable and deconstructable piece to force contents to be moved to player -- Improvement: Switched over to on_player_mined_entity and on_robot_mined_entity instead of the pre variants - -0.15.20 - -- Fixed: Added Low Resolution version of overlay, ISSUE: range of collector extends past visual display because of 2048px limit on sprites (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p302128) -- Tweak: Increased item collector build time from 0.5 seconds to 10 seconds -- Improvement: Added an expensive recipe variant that doubles the cost of the item collector (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p302123) -- Optimization: Tuned chunk scoring heuristic - -0.15.19 - -- Fixed: Error when processing item collectors - -0.15.18 - -- Feature: Adds an item collector for things like alien artifacts -- Improvement: Added checks for how many squads have been created to enforce global limit over all squad creation methods -- Tweak: Increased breach multiplier from 10000 to 100000 -- Fixed: Current version wasn't be set causing the upgrade code to run repeatedly -- Fixed: Neighbors function not correctly clearing its state between calls -- Optimization: Reduced number of chunks processed per cycle from 500 to 400 -- Optimization: Reduced number of squads to regroup per cycle from 5 to 2 -- Optimization: Reduced number of chunks to scan per cycle from 6 to 5 -- Optimization: Added additional short circuits for chunk scoring - -0.15.17 - -- Fixed: Remote call load issue. (https://github.com/veden/Rampant/issues/5) -- Tweak: Increased sampling threshold for water tiles from 5 to 10 tiles -- Tweak: Increased small worm turret range from 17 to 18 -- Improvement: Added option to remove blood particles on biter deaths, which should help reduce lag spikes (Default is to remove) -- Optimization: Moved math.random to local level instead of global -- Framework: Refactored unit and attack prototypes - -0.15.16 - -- Tweak: Increased death pheromone weight for squad attack from 1 to 2 -- Tweak: Increased failed unit behaviors from 6 to 10 -- Improvement: Added labs to list of targets -- Improvement: Removed chunks processed at a time limit -- Optimization: Moved chunk reindexing to mod load as opposed to ingame -- Optimization: Preallocated a position for use in squad movement -- Optimization: Greatly reduced reindexing and chunk scoring time -- Framework: Split chunk scoring and custom ai chunk purging -- Framework: Refactored code into more appropriate modules - -0.15.15 - -- Fixed: Desync when reindexing chunks (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=180#p287941) -- Fixed: Switched from "and" to "or" for player pheromone and base pheromone to form squads -- Fixed: Inverted logic comparison for unit group formation -- Fixed: Added checks for if a nest exists on player scan before creating squads -- Tweak: Reduced map setting for path finding min steps to check for path from 350 to 100 -- Optimization: Reduced max number of chunks to processes at anyone time from 1000 to 200 -- Optimization: Specialized neighbor search function -- Optimization: Chunk scoring for determining chunk path rating and passable status changed to two pass -- Framework: Refactored recycle biters into separate function -- Framework: Removed custom ai option until it is complete - -0.15.14 - -- Tweak: Increased pheromone output of: - - ammo-turret 2.5 -> 10 - - wall 0.25 -> 0.5 - - electric-turret 7 -> 20 - - fluid-turret 9 -> 28 - - turret 2.5 -> 10 - - mining-drill 15 -> 35 -- Tweak: Increased attack radius of squads from 28 to 32 tiles -- Tweak: Decreased movement(death) pheromone persistance from 0.98 to 0.9 -- Tweak: Increased impassable terrain generator pheromone amount from -30 to -0.1 -- Tweak: Reduced number of remembered past chunks for a squad from 10 to 7 -- Tweak: Increased unit group count for "ground shake" message from 11 to 14 -- Fixed: Pheromone is no longer placed on impassable chunks -- Improvement: Removed pollution from ai attack chunk scoring, pollution travels over water and creates weird pockets groups get stuck in -- Improvement: Made create squads aware of orientation changes when building squads -- Improvement: Recycling unit groups that are stuck -- Improvement: Allow movement from an impassable chunk to a all cardinals passable chunk -- Improvement: When creating squads base pheromone or player pheromone must be present. Prevents squad spawns when they can't reach the player(s) or player(s) structures. -- Improvement: Made retreats aware of orientation changes with retreating squads -- Improvement: Path finding check for invalid destination before making command -- Improvement: Added path rating to each chunk to reduce the scores on chunks that may be passable but are easy to invalidate the unit group by making a command to an invalid location(water, entity) -- Optimization: Collapsed chunk attributes *_PASSABLE into single attribute PASSABLE -- Optimization: Preallocated neighbors and cardinal neighbors array - -0.15.13 - -- Improvement: Added lamps to make safe options (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=160#p284736) - -0.15.12 - -- Fixed: Nil fillTunnel invocation (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=160#p284719) - -0.15.11 - -- Integration: Ion cannon mod -- Fixed: Player region scan can no longer overlap passive map scan causing double processing -- Tweak: Setting group disown distance back to the default of 10 from 5 -- Tweak: Increased group late unit threshold from 80 to 360 ticks -- Tweak: Increased rally cry chance from 0.02(@100 evo) to 0.08(@100 evo) compensate for the once per logic cycle per chunk -- Tweak: Increased player pheromone for weight multipler from 25 to 50 for hunting parties -- Improvement: Changed biter base detection from slow map scan to event -- Improvement: Added negative score contribution to nest causing biters to move around nests instead of through -- Optimization: Reduced max number of active squads from 40 to 30, reducing large lag spikes -- Optimization: Player region scan can no longer overlap passive map scan causing double processing -- Optimization: Short circuit rally cry search if not enough points to make a squad -- Optimization: Short circuit vengence squad search if not enough points to make a squad -- Optimization: Short circuit attack groups search if not enough points to make a squad -- Optimization: Precompute retreatThreshold, maxSquads, rallyThreshold, formSquadThreshold, attackWaveSize, attackWaveSizeLowerBound, attackWaveSizeUpperBound, attackWaveSizeDeviation, kamikazeThreshold, attackWaveThreshold once per logic cycle -- Optimization: Reduced garbage generated by pheromone map processing -- Optimization: Reduced garbage generated by attack formation scanning -- Optimization: Capped squad regrouping attempts to 15 per logic cycle -- Framework: renamed chunk pX,pY to x,y, so chunks could be used in calls to things like get_pollution - -0.15.10 - -- Fix: nil chunk in pheromone utils(https://mods.factorio.com/mods/Veden/Rampant/discussion/13806) -- Tweak: Increased failed behaviors before dispanding from 3 to 6 -- Improvement: Switched to untargetable indestructible safe buildings -- Improvement: Changed the "ground shake" message to be displayed at a more appropriate time -- Improvement: Recycling biter groups now has a lower threshold and checks for active nearby squads before purging the clusters -- Optimization: Adjusted factorio pathfinder parameters to favor short paths for performance -- Optimization: Moved invariants out of inner loop in pheromone dispersion -- Optimization: Reduced garbage generated when doing passive map scan -- Optimization: Switched rally cries to a once per logic cycle per chunk -- Optimization: Locallized global defines in files that use them -- Optimization: Preallocating tables of falses for chunk neighbors -- Framework: Split squad regrouping and squad cleanup - -0.15.9 - -- Improvement: Added bobs higher tier big electric poles to be included with make safe toggle for big electric poles -- Improvement: Added logic to reconnect wires when big electric poles are made safe and get destroyed (Thanks Jeroen D Stout, https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=140#p275663) -- Improvement: Added a mod option to add acid resistance to walls to make damage levels with dumb projectiles to be equal to vanilla levels. (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=120#p274792) - -0.15.8 - -- Fixed: aiPointsScaler being nil - -0.15.7 - -- Feature: Difficulty Scaling - A mod options to control how quickly the ai performs actions -- Fixed: Spelling on mod option -- Improvement: Exposed nocturnal toggle and difficulty scaling to remote interop - -0.15.6 - -- Feature: Nocturnal Mode - Causes Rampant attacks waves to only spawn at night. Best use with daynight extender mod. - -0.15.5 - -- Tweak: Increased ai refund from 2 to 3 -- Fix: Signals, Chain Signals, and Train stops now correctly rebuild when the corresponding make safe is toggled -- Feature: Remote interfaces for adjusting wave size, thresholds, ai build points, ai state, player thresholds, and attack triggers -- Improvement: Added reactor, programmable speaker, radars, lights, and rocket silo to biter targets -- Improvement: Switched all configs to global runtime except Dumb projectiles and NE Unit Launcher Options - -0.15.4 - -- Fix: Changed setting name from "make buildings safe from biters" to "Enable building safety." This is to clarify what the setting does. - -0.15.3 - -- Improvement: Added configuration for safe buildings. This will be improved after a bug fix in factorio - -0.15.2 - -- Improvement: Created in game options for - - Max biter wave size - - Use dumb projectiles - - Use Natural Evolution unit launchers (Requires NE) - - Togglable attack wave triggers (pollution, player) - - Attack wave pollution trigger threshold - -0.15.1 - -- Tweak: Increased small spitter damage from 7 to 15 -- Tweak: Increased medium spitter damage from 15 to 22 -- Improvement: Replaced game.evolution with game.forces.enemy.evolution -- Improvement: Fixed flame-thrower to flamethrower -- Improvement: Changed tunnel to have non-zero hp - -0.14.13 - -- Reverted: Pheromone generation tweaks from 0.14.11 -- Feature: Recycling large biter swarms that are stuck (causes a big attack wave, and pops up a message) -- Feature: Breaching, Biters destroying player buildings will attract other unit groups -- Tweak: Reduced unit group max size from 600 to 450 -- Tweak: Reduced unit group radius from 30 to 20 -- Fix: Unit groups merging during combat -- Optimization: Cleaned up regroup squad function to scale better -- Optimization: Retreats only fire once per chunk for every logic cycle -- Improvement: Cleaned up dispersion function for Pheromones -- Improvement: Increased attack wave frequency based on evolution factor (mainly for endgame) - -0.14.12 - -- Tweak: Decreased slow map scan chunks scanned per logic cycle from 8 to 6 -- Fix: Didn't set new version number forcing chunk recalculation every load -- Improvement: Added player buildings to slow map scan to catch buildings made outside factorio event system, (i.e. FARL) -- Improvement: Added console message when upgrading - -0.14.11 - -- Tweak: Increased pheromone generation on (This only potential affects target selection and pathfinding, these do not trigger biter waves): - - Generators from 8 to 12 - - Pumps from 2 to 5 - - Offshore Pumps from 2 to 5 - - Transport Belts from 1 to 2 - - Accumulator from 10 to 14 - - Solar Panel from 8 to 12 - - Boiler from 12 to 16 - - Assembling Machines from 10 to 16 - - Roboport from 10 to 14 - - Beacon from 10 to 14 - - Furance from 12 to 16 - - Mining Drills from 15 to 19 - - Ammo Turret from 2.5 to 5 - - Wall from 0.25 to 0.55 - - Electric Turret from 4.25 to 7 - - Fluid Turret from 5 to 9 - - Turret from 3.5 to 5 -- Tweak: Reduced map scan speed from 10 chunks to 8 chunks to account for worms in calculation -- Tweak: Increased pheromone dispersion from 0.05 to 0.1 -- Tweak: Increased unit group move distance from 32 to 40 -- Tweak: Reduced unit group member disown distance from 10 to 5 -- Tweak: Increased unit group max slow down when ahead from 0.6 to 1 -- Tweak: Reduced unit group max speedup when behind from 1.4 to 1.1 -- Tweak: Increased unit group max slowdown from slow members from 0.3 to 0.9 (this is max speed multipler, so this is faster) -- Tweak: Increased unit attack radius from 20 to 28 tiles -- Improvement: Increased movement cycles for larger groups from 4 cycles to 6 cycles -- Improvement: Biter groups should attempt to avoid getting too close to water (screws up pathing) -- Improvement: Added worms to chunk calculation for determining better unit group formation and pathing -- Improvement: Removed nest negative contribution to base pheromone map for better pathing -- Improvement: Pheromones no longer travel over impassable terrain -- Fix: Prevent group spawning on chunks with enemy structures -- Fix: Capped the max group size that can be created by merging to 600 biters -- Fix: Dispand unit groups larger than 600 (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=80#p255243, Thank you Nerchio for the save game) - -0.14.10 - -- Feature: Replaces homing projectiles with non homing versions -- Improvement: Respect for peace mode. To be used with something like the True Peace Mod -- Fix: Enforce rate limit for retreats - -0.14.9 - -- Fix: Added null check in rally cry for chunks that have yet to be generated by game engine (https://mods.factorio.com/mods/Veden/Rampant/discussion/7946) - -0.14.8 - -- Feature: Rallying death cry, when a native dies on a chunk past the death threshold it will attempt to summon reinforcements from nearby nests -- Tweak: Increased unit group merge distance from 16 to 28 tiles -- Tweak: Increased retreat grab radius from 15 tiles to 24 tiles -- Tweak: Decreased vengeance squad cost from 50 to 45 -- Improvement: On group merge recalculate the kamikaze threshold, so groups that become large have a chance to kamikaze before attacking -- Improvement: Disallow group merges when units are taking and receiving damage -- Fix: Corrected unit group frenzy trigger based on engaging a target -- Optimization: Switched to increment tick counter for processing and logic event -- Optimization: Rate limited rally cry to 3/0.75 sec -- Optimization: Rate limited retreat to 8/0.75 sec - -0.14.7 - -- Feature: Counterattack waves trigger when the player is standing in a chunk with the death pheromone past the retreat threshold -- Feature: Reinforcement waves trigger when the player is standing in a chunk that contains a nest -- Tweak: Increased max number of unit groups that can be active concurrently from 30 to 40 -- Improvement: Removed restriction on unit group formations around nests - -0.14.6 - -- Major Fix: Corrected retreat logic having inverted comparison introduced in 14.4, so unit groups stopped retreating after lots of death happened in a chunk -- Major Fix: Corrected pheromone dispersal with negative numbers -- Fix: Adjusted scoring so unit groups try to avoid nest clusters when retreating (Messes up pathfinding) -- Fix: When placing a player building ai was given credit as if they destroyed it -- Tweak: Reduced retreat time length from 4.5 to 3 seconds -- Tweak: Reduced death pheromone produced on death from 100 to 75 -- Tweak: Increased attack radius of unit groups from 16 to 20 tiles -- Tweak: Increased attack time length from 2.25 to 3 seconds -- Tweak: Increased nest pheromone production from 15 to 30 -- Tweak: Increased unit group search radius during formations from 2 chunks to 3 chunks -- Framework: Decoupled squad status and kamikaze flag -- Improvement: Biters don't retreat when dying on a chunk with a nest -- Improvement: Chunks covered by nest pheromone remove death pheromone faster -- Improvement: Attack wave size varies based on normal distribution that is centered around a scaled evolution factor that is lower than vanilla - -0.14.5 - -- Improvement: Enlarged player processing bubble from 3 to 4 chunks (pheromone radius is still 4 chunks) -- Fix: Increased player scoring weight, so biter groups correctly hunt once more (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=40#p216119) -- Improvement: Adjusted attack pathing, so groups can move diagonally -- Fix: Unit group retreating when player occupies same chunk - -0.14.4 - -- Fixed a bug in the processing queue when upgrading mod -- Greatly decreased Player pheromone radius, now sits at roughly 4 chunks around the player -- Reworked pheromone pathfinding -- Removed base and defense attack wave trigger, in favor of using player pheromone and pollution -- Added periods of time where the enemy is not sending Rampant attack waves -- Adjusted retreat percentage to suit the reduced attack wave size -- Improved responsiveness on larger maps -- Reduced AI max build points -- Fixed player iteration bug - -0.14.3 - -- Slightly lowered Rampant attack wave frequency -- Altered attack wave size to ramp up slower -- Added configuration options for: -- - Attack wave generation area - - - Attack wave threshold - - - Attack wave size - - - Turn off rampant attack waves - -0.14.2 - -- Adjusted unit retreat group size threshold -- Adjusted squad attack pattern (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=20#p203861) -- Fixed migration issue - -0.14.1 - -- Fixed ai created bases not being counted in logic -- Optimization to offset ai created bases scanning - -0.13.5 = 0.14.5 - -0.13.4 = 0.14.4 - -0.13.3 = 0.14.3 - -0.13.2 = 0.14.2 - -0.13.1 - Back ported 0.14 factorio version to 0.13 factorio version - -0.0.8 - -- Fixed retreat oscillations (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=10#p198750) -- Added scaling for kamikaze attack (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=10#p199401) -- Increased squad size max from 125 to 150, (larger waves) - -0.0.6 - -- Some speed improvements -- MP is working (https://github.com/veden/Rampant/issues/1) - -0.0.5 - -- Fix for nil chunk in ai attack (https://mods.factorio.com/mods/Veden/Rampant/discussion/2512) -- Checks for main surface (https://forums.factorio.com/viewtopic.php?f=94&t=31445&p=198228#p198563) -- Updated info with forum homepage - -0.0.4 - initial release - diff --git a/Rampant_3.1.2/Upgrade.lua b/Rampant_3.1.2/Upgrade.lua deleted file mode 100644 index fcf5a69a..00000000 --- a/Rampant_3.1.2/Upgrade.lua +++ /dev/null @@ -1,718 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local upgrade = {} - --- imports - -local constants = require("libs/Constants") -local chunkProcessor = require("libs/ChunkProcessor") -local mapUtils = require("libs/MapUtils") - --- constants - -local MINIMUM_EXPANSION_DISTANCE = constants.MINIMUM_EXPANSION_DISTANCE -local DEFINES_COMMAND_GROUP = defines.command.group -local DEFINES_COMMAND_WANDER = defines.command.wander -local DEFINES_COMMAND_BUILD_BASE = defines.command.build_base -local DEFINES_COMMAND_ATTACK_AREA = defines.command.attack_area -local DEFINES_COMMAND_GO_TO_LOCATION = defines.command.go_to_location -local DEFINES_COMMMAD_COMPOUND = defines.command.compound -local DEFINES_COMMAND_FLEE = defines.command.flee -local DEFINES_COMMAND_STOP = defines.command.stop - -local DEFINES_COMPOUND_COMMAND_RETURN_LAST = defines.compound_command.return_last - -local DEFINES_DISTRACTION_NONE = defines.distraction.none -local DEFINES_DISTRACTION_BY_ENEMY = defines.distraction.by_enemy -local DEFINES_DISTRACTION_BY_ANYTHING = defines.distraction.by_anything - -local CHUNK_SIZE = constants.CHUNK_SIZE -local TRIPLE_CHUNK_SIZE = constants.TRIPLE_CHUNK_SIZE - -local ENEMY_PHEROMONE = constants.ENEMY_PHEROMONE -local CHUNK_TICK = constants.CHUNK_TICK - --- imported functions - -local sFind = string.find -local queueGeneratedChunk = mapUtils.queueGeneratedChunk -local processPendingChunks = chunkProcessor.processPendingChunks - --- module code - -local function isExcludedSurface(surfaceName) - return - (surfaceName == "aai-signals") or - (surfaceName == "RTStasisRealm") or - (surfaceName == "minime_dummy_dungeon") or - (surfaceName == "minime-preview-character") or - (surfaceName == "pipelayer") or - (surfaceName == "beltlayer") or - - sFind(surfaceName, "Factory floor") or - sFind(surfaceName, " Orbit") or - sFind(surfaceName, "clonespace") or - sFind(surfaceName, "BPL_TheLabplayer") or - sFind(surfaceName, "starmap%-") or - sFind(surfaceName, "NiceFill") or - sFind(surfaceName, "Asteroid Belt") or - sFind(surfaceName, "Vault ") or - sFind(surfaceName, "spaceship") or - sFind(surfaceName, "bpsb%-lab%-") -end - -local function addCommandSet(queriesAndCommands) - -- preallocating memory to be used in code, making it fast by reducing garbage generated. - queriesAndCommands.neighbors = { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - } - queriesAndCommands.cardinalNeighbors = { - -1, - -1, - -1, - -1 - } - - queriesAndCommands.chunkOverlapArray = { - -1, - -1, - -1, - -1 - } - - queriesAndCommands.playerForces = {} - queriesAndCommands.enemyForces = {} - queriesAndCommands.npcForces = {} - queriesAndCommands.nonPlayerForces = {} - - -- pb - queriesAndCommands.pbFilteredEntitiesPointQueryLimited = { - position = {0, 0}, - radius = 10, - limit = 1, - force = queriesAndCommands.enemyForces, - type = { - "unit-spawner", - "turret" - } - } - - -- msec - queriesAndCommands.msecFilteredEntitiesEnemyStructureQuery = { - area={ - {0,0}, - {0,0} - }, - force=queriesAndCommands.enemyForces, - type={ - "turret", - "unit-spawner" - } - } - - -- oba - queriesAndCommands.obaCreateBuildCloudQuery = { - name = "build-clear-cloud-rampant", - position = {0,0} - } - - -- sp - local spbSharedChunkArea = { - {0,0}, - {0,0} - } - queriesAndCommands.spbHasPlayerStructuresQuery = { - area=spbSharedChunkArea, - force=queriesAndCommands.nonPlayerForces, - invert=true, - limit=1 - } - queriesAndCommands.spbFilteredEntitiesPlayerQueryLowest = { - area=spbSharedChunkArea, - force=queriesAndCommands.playerForces, - collision_mask = "player-layer", - type={ - "wall", - "transport-belt" - } - } - queriesAndCommands.spbFilteredEntitiesPlayerQueryLow = { - area=spbSharedChunkArea, - force=queriesAndCommands.playerForces, - collision_mask = "player-layer", - type={ - "splitter", - "pump", - "offshore-pump", - "lamp", - "solar-panel", - "programmable-speaker", - "accumulator", - "assembling-machine", - "turret", - "ammo-turret" - } - } - queriesAndCommands.spbFilteredEntitiesPlayerQueryHigh = { - area=spbSharedChunkArea, - force=queriesAndCommands.playerForces, - collision_mask = "player-layer", - type={ - "furnace", - "lab", - "roboport", - "beacon", - "radar", - "electric-turret", - "boiler", - "generator", - "fluid-turret", - "mining-drill" - } - } - queriesAndCommands.spbFilteredEntitiesPlayerQueryHighest = { - area=spbSharedChunkArea, - force=queriesAndCommands.playerForces, - collision_mask = "player-layer", - type={ - "artillery-turret", - "reactor", - "rocket-silo" - } - } - - -- is - local isSharedChunkArea = { - {0,0}, - {0,0} - } - queriesAndCommands.isFilteredTilesQuery = { - collision_mask="water-tile", - area=isSharedChunkArea - } - queriesAndCommands.isFilteredEntitiesChunkNeutral = { - area=isSharedChunkArea, - collision_mask = "player-layer", - type={ - "tree", - "simple-entity" - } - } - queriesAndCommands.isFilteredEntitiesEnemyStructureQuery = { - area=isSharedChunkArea, - force=queriesAndCommands.enemyForces, - type={ - "turret", - "unit-spawner" - } - } - queriesAndCommands.isCountResourcesQuery = { - area=isSharedChunkArea, - type="resource" - } - queriesAndCommands.isFilteredEntitiesUnitQuery = { - area=isSharedChunkArea, - force=queriesAndCommands.enemyForces, - type="unit" - } - - -- cps - local cpsSharedChunkArea = { - {0,0}, - {0,0} - } - queriesAndCommands.cpsFilteredTilesQuery = { - collision_mask="water-tile", - area=cpsSharedChunkArea - } - queriesAndCommands.cpsFilteredEntitiesChunkNeutral = { - area=cpsSharedChunkArea, - collision_mask = "player-layer", - type={ - "tree", - "simple-entity" - } - } - queriesAndCommands.cpsFilteredEnemyAnyFound = { - area=cpsSharedChunkArea, - force=queriesAndCommands.enemyForces, - type={ - "turret", - "unit-spawner" - }, - limit = 1 - } - - -- msrc - local msrcSharedChunkArea = { - {0,0}, - {0,0} - } - queriesAndCommands.msrcFilteredTilesQuery = { - collision_mask="water-tile", - area=msrcSharedChunkArea - } - queriesAndCommands.msrcFilteredEntitiesChunkNeutral = { - area=msrcSharedChunkArea, - collision_mask = "player-layer", - type={ - "tree", - "simple-entity" - } - } - queriesAndCommands.msrcCountResourcesQuery = { - area=msrcSharedChunkArea, - type="resource" - } - - -- sp - local spSharedAreaChunk = { - {0,0}, - {0,0} - } - queriesAndCommands.spFilteredEntitiesCliffQuery = { - area=spSharedAreaChunk, - type="cliff", - limit = 1 - } - queriesAndCommands.spFilteredTilesPathQuery = { - area=spSharedAreaChunk, - collision_mask="water-tile", - limit = 1 - } - - -- ouc - queriesAndCommands.oucCliffQuery = { - area={ - {0,0}, - {0,0} - }, - type="cliff" - } - - -- ppu - queriesAndCommands.ppuUpgradeEntityQuery = { - name = "", - position = {0,0} - } - - queriesAndCommands.attackCommand = { - type = DEFINES_COMMAND_ATTACK_AREA, - destination = {0,0}, - radius = CHUNK_SIZE * 1.5, - distraction = DEFINES_DISTRACTION_BY_ANYTHING - } - - queriesAndCommands.moveCommand = { - type = DEFINES_COMMAND_GO_TO_LOCATION, - destination = {0,0}, - pathfind_flags = { cache = true }, - distraction = DEFINES_DISTRACTION_BY_ENEMY - } - - queriesAndCommands.settleCommand = { - type = DEFINES_COMMAND_BUILD_BASE, - destination = {0,0}, - distraction = DEFINES_DISTRACTION_BY_ENEMY, - ignore_planner = true - } - - queriesAndCommands.wanderCommand = { - type = DEFINES_COMMAND_WANDER, - wander_in_group = false, - radius = TRIPLE_CHUNK_SIZE*2, - ticks_to_wait = 20 * 60 - } - - queriesAndCommands.wander2Command = { - type = DEFINES_COMMAND_WANDER, - wander_in_group = true, - radius = TRIPLE_CHUNK_SIZE*2, - ticks_to_wait = 2 * 60 - } - - queriesAndCommands.stopCommand = { - type = DEFINES_COMMAND_STOP - } - - queriesAndCommands.compoundSettleCommand = { - type = DEFINES_COMMMAD_COMPOUND, - structure_type = DEFINES_COMPOUND_COMMAND_RETURN_LAST, - commands = { - queriesAndCommands.wonder2Command, - queriesAndCommands.settleCommand - } - } - - queriesAndCommands.retreatCommand = { - type = DEFINES_COMMAND_GROUP, - group = nil, - distraction = DEFINES_DISTRACTION_BY_ANYTHING, - use_group_distraction = true - } - - queriesAndCommands.fleeCommand = { - type = DEFINES_COMMAND_FLEE, - from = nil, - distraction = DEFINES_DISTRACTION_NONE - } - - queriesAndCommands.compoundRetreatGroupCommand = { - type = DEFINES_COMMMAD_COMPOUND, - structure_type = DEFINES_COMPOUND_COMMAND_RETURN_LAST, - commands = { - queriesAndCommands.stopCommand, - queriesAndCommands.fleeCommand, - queriesAndCommands.retreatCommand - } - } - - queriesAndCommands.formGroupCommand = { - type = DEFINES_COMMAND_GROUP, - group = nil, - distraction = DEFINES_DISTRACTION_BY_ANYTHING, - use_group_distraction = false - } - - queriesAndCommands.formCommand = { - command = queriesAndCommands.formGroupCommand, - unit_count = 0, - unit_search_distance = TRIPLE_CHUNK_SIZE - } - - queriesAndCommands.formRetreatCommand = { - command = queriesAndCommands.compoundRetreatGroupCommand, - unit_count = 1, - unit_search_distance = CHUNK_SIZE - } -end - -function upgrade.setCommandForces(universe, npcForces, enemyForces) - for force in pairs(universe.playerForces) do - universe.playerForces[force] = nil - end - for force in pairs(universe.npcForces) do - universe.npcForces[force] = nil - end - for force in pairs(universe.enemyForces) do - universe.enemyForces[force] = nil - end - for force in pairs(universe.nonPlayerForces) do - universe.nonPlayerForces[force] = nil - end - for _,force in pairs(game.forces) do - if not npcForces[force.name] and not enemyForces[force.name] then - universe.playerForces[#universe.playerForces+1] = force.name - end - end - for force in pairs(enemyForces) do - universe.enemyForces[#universe.enemyForces+1] = force - universe.nonPlayerForces[#universe.nonPlayerForces+1] = force - end - for force in pairs(npcForces) do - universe.npcForces[#universe.npcForces+1] = force - universe.nonPlayerForces[#universe.nonPlayerForces+1] = force - end -end - -function upgrade.attempt(universe) - local starting = global.version - if not global.version or global.version < 302 then - global.version = 302 - - if not universe then - universe = {} - global.universe = universe - end - - game.forces.enemy.kill_all_units() - - universe.safeEntities = {} - - universe.aiPointsScaler = settings.global["rampant--aiPointsScaler"].value - - universe.aiPointsPrintGainsToChat = settings.global["rampant--aiPointsPrintGainsToChat"].value - universe.aiPointsPrintSpendingToChat = settings.global["rampant--aiPointsPrintSpendingToChat"].value - - universe.aiNocturnalMode = settings.global["rampant--permanentNocturnal"].value - - universe.mapIterator = nil - universe.retreatThreshold = 0 - universe.rallyThreshold = 0 - universe.formSquadThreshold = 0 - universe.attackWaveSize = 0 - universe.attackWaveDeviation = 0 - universe.attackWaveUpperBound = 0 - universe.unitRefundAmount = 0 - universe.regroupIndex = 1 - - game.map_settings.path_finder.min_steps_to_check_path_find_termination = - constants.PATH_FINDER_MIN_STEPS_TO_CHECK_PATH - - universe.evolutionTableAlignment = {} - - universe.kamikazeThreshold = 0 - universe.attackWaveLowerBound = 1 - - universe.expansion = game.map_settings.enemy_expansion.enabled - universe.expansionMaxDistance = game.map_settings.enemy_expansion.max_expansion_distance * CHUNK_SIZE - universe.expansionMinTime = game.map_settings.enemy_expansion.min_expansion_cooldown - universe.expansionMaxTime = game.map_settings.enemy_expansion.max_expansion_cooldown - universe.expansionMinSize = game.map_settings.enemy_expansion.settler_group_min_size - universe.expansionMaxSize = game.map_settings.enemy_expansion.settler_group_max_size - - universe.expansionMaxDistanceDerivation = nil - universe.expansionLowTargetDistance = (universe.expansionMaxDistance + MINIMUM_EXPANSION_DISTANCE) * 0.33 - universe.expansionMediumTargetDistance = (universe.expansionMaxDistance + MINIMUM_EXPANSION_DISTANCE) * 0.50 - universe.expansionHighTargetDistance = (universe.expansionMaxDistance + MINIMUM_EXPANSION_DISTANCE) * 0.75 - universe.expansionDistanceDeviation = universe.expansionMediumTargetDistance * 0.33 - - universe.settlerCooldown = 0 - universe.settlerWaveDeviation = 0 - universe.settlerWaveSize = 0 - - universe.enabledMigration = universe.expansion and settings.global["rampant--enableMigration"].value - universe.peacefulAIToggle = settings.global["rampant--peacefulAIToggle"].value - universe.printAIStateChanges = settings.global["rampant--printAIStateChanges"].value - universe.debugTemperament = settings.global["rampant--debugTemperament"].value - - universe.enemyAlignmentLookup = {} - - game.map_settings.unit_group.min_group_radius = constants.UNIT_GROUP_MAX_RADIUS * 0.5 - game.map_settings.unit_group.max_group_radius = constants.UNIT_GROUP_MAX_RADIUS - - game.map_settings.unit_group.max_member_speedup_when_behind = constants.UNIT_GROUP_MAX_SPEED_UP - game.map_settings.unit_group.max_member_slowdown_when_ahead = constants.UNIT_GROUP_MAX_SLOWDOWN - game.map_settings.unit_group.max_group_slowdown_factor = constants.UNIT_GROUP_SLOWDOWN_FACTOR - - game.map_settings.max_failed_behavior_count = 3 - game.map_settings.unit_group.member_disown_distance = 10 - game.map_settings.unit_group.tick_tolerance_when_member_arrives = 60 - game.forces.enemy.ai_controllable = true - - universe.evolutionLevel = game.forces.enemy.evolution_factor - global.pendingChunks = nil -- removes old pendingChunks - global.natives = nil -- removes old natives - global.map = nil -- removes old map - - universe.eventId = 0 - universe.chunkId = 0 - universe.randomGenerator = nil - game.forces.enemy.kill_all_units() - universe.maps = {} - universe.chunkIdToChunk = {} - universe.groupNumberToSquad = {} - universe.pendingUpgrades = {} - universe.chunkToVictory = {} - universe.pendingChunks = {} - universe.processActiveNest = {} - universe.processActiveNestIterator = nil - universe.deployVengenceIterator = nil - universe.pendingUpgradeIterator = nil - universe.victoryScentIterator = nil - universe.squadIterator = nil - universe.processMapAIIterator = nil - universe.processNestIterator = nil - universe.vengenceQueue = {} - universe.activeMap = nil - universe.mapIterator = nil - universe.builderCount = 0 - universe.squadCount = 0 - universe.chunkToNests = {} - universe.processActiveSpawnerIterator = nil - universe.processActiveRaidSpawnerIterator = nil - universe.processMigrationIterator = nil - universe.chunkToDrainedIterator = nil - universe.chunkToActiveNest = {} - universe.chunkToActiveRaidNest = {} - universe.chunkToDrained = {} - universe.chunkToRetreatIterator = nil - universe.chunkToRetreats = {} - universe.chunkToRallyIterator = nil - universe.chunkToRallys = {} - universe.chunkToPassScan = {} - universe.chunkToPassScanIterator = nil - universe.baseId = 0 - universe.awake = false - - universe.recycleBaseIterator = nil - - universe.maxPoints = 0 - universe.maxOverflowPoints = 0 - - universe.proxyEntityLookup = {} - universe.vanillaEntityLookups = {} - - addCommandSet(universe) - - local evoToTierMapping = {} - universe.evoToTierMapping = evoToTierMapping - universe.bases = {} - - for i=1,10 do - evoToTierMapping[#evoToTierMapping+1] = (((i - 1) * 0.1) ^ 0.5) - 0.05 - end - - for _,map in pairs(universe.maps) do - if (map.surface.valid) then - local entities = map.surface.find_entities_filtered({type="land-mine"}) - for i=1,#entities do - local entity = entities[i] - if entity.valid and string.find(entity.name, "entity-proxy-") then - entity.destroy() - end - end - end - end - - for mapId,map in pairs(universe.maps) do - local toBeRemoved = not map.surface.valid or isExcludedSurface(map.surface.name) - if toBeRemoved then - if universe.mapIterator == mapId then - universe.mapIterator, universe.activeMap = next(universe.maps, universe.mapIterator) - end - if universe.processMapAIIterator == mapId then - universe.processMapAIIterator = nil - end - universe.maps[mapId] = nil - end - end - - universe.processBaseAIIterator = nil - end - if global.version < 303 then - global.version = 303 - - universe.entitySkipCountLookup = {} - end - if global.version < 304 then - global.version = 304 - - universe.random = game.create_random_generator() - - for _,map in pairs(universe.maps) do - map.random = universe.random - local processQueue = map.processQueue - for i=1,#processQueue do - local chunk = processQueue[i] - chunk[CHUNK_TICK] = chunk[ENEMY_PHEROMONE] - chunk[ENEMY_PHEROMONE] = 0 - end - end - - game.print("Rampant - Version 3.1.1") - end - - return (starting ~= global.version) and global.version -end - -function upgrade.prepMap(universe, surface) - local surfaceName = surface.name - if isExcludedSurface(surfaceName) then - return - end - - game.print("Rampant - Indexing surface:" .. surfaceName .. ", index:" .. tostring(surface.index) .. ", please wait.") - - local surfaceIndex = surface.index - - if not universe.maps then - universe.maps = {} - end - - local map = {} - universe.maps[surfaceIndex] = map - - map.activatedMap = false - - map.processedChunks = 0 - map.processQueue = {} - map.processIndex = 1 - map.scanPlayerIndex = 1 - map.scanResourceIndex = 1 - map.scanEnemyIndex = 1 - map.processStaticIndex = 1 - map.outgoingScanWave = true - map.outgoingStaticScanWave = true - - map.chunkToBase = {} - map.chunkToTurrets = {} - map.chunkToTraps = {} - map.chunkToUtilities = {} - map.chunkToHives = {} - map.chunkToNestIds = {} - map.chunkToHiveIds = {} - map.chunkToTrapIds = {} - map.chunkToTurretIds = {} - map.chunkToUtilityIds = {} - map.drainPylons = {} - - map.chunkToPlayerBase = {} - map.chunkToResource = {} - map.chunkToPlayerCount = {} - map.playerToChunk = {} - - map.chunkToSquad = {} - - map.chunkToPassable = {} - map.chunkToPathRating = {} - map.chunkToDeathGenerator = {} - - map.chunkScanCounts = {} - - map.emptySquadsOnChunk = {} - - map.surface = surface - map.universe = universe - - map.bases = {} - map.squads = nil - map.pendingAttack = nil - map.building = nil - - map.random = universe.random - - -- queue all current chunks that wont be generated during play - local tick = game.tick - for chunk in surface.get_chunks() do - if surface.is_chunk_generated(chunk) then - queueGeneratedChunk(universe, - { - surface = surface, - tick = tick, - area = { - left_top = { - x = chunk.x * 32, - y = chunk.y * 32 - } - } - } - ) - end - end - - processPendingChunks(universe, tick, true) -end - -return upgrade diff --git a/Rampant_3.1.2/changelog.txt b/Rampant_3.1.2/changelog.txt deleted file mode 100644 index 2827b3b8..00000000 --- a/Rampant_3.1.2/changelog.txt +++ /dev/null @@ -1,1678 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 3.1.2 - Contribution: - - Updated RU locale for Rampant by Astorin - Tweaks: - - Siege groups have their attraction to resource patches reduced by 50% - - Reduced resource patch pheromone when enemy structures exist on chunk by 100x - - Increased enemy pheromone weight for pathing by 2.5x - - Increased hive spawning outside resources chunks by 5x - - Changed mod setting to default to disallowFriendlyFire - - Increased spawner egg and wasp health by 5, 75, 200, 300, 400, 550, 725, 1700, 3675, 7650 - - Increased default mod settings max squads to 30 - - Increased default mod settings max enemy level to 6 - - Increased major,minor resistance percents and Increased minor weakness percents primarily in the lower enemy levels - - Increased spawner faction spawned biters health by 25% - - Capped max unit resistance at 99% - - Increased number of spawner spitter shots per unit - - Increased spawner faction eggs regeneration - Bugfixes: - - Fixed sent aggressive squads, builder count, squad count could be negative - - Added missing sent and max siege groups on debug log - - Fixed small amounts of death generator not being rounded to nil - - Fixed enemy base pheromone missing decay based on radius - - Fixed resource pheromone generator not be cancelled out by enemy structures - - Fixed unit groups gathering and then being disbanded immediately after they finish gathering, which will prevent biter clumps when groups are disbanded at extreme distances from the player - - Fixed max squads and builders being exhausted by the game engine with gathering unit groups - - Fixed electric biter attack causing biters to attack each other and expanded friendly fire protection to additional projectiles - - Fixed energy thief crystal pole spinning - Framework: - - Updated visualizer tool for debugging - ---------------------------------------------------------------------------------------------------- -Version: 3.1.1 - Bugfixes: - - Fixed enemy ending tier level of 10 would crash on startup - ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 - Improvements: - - Readded enemy pheromone for pathfinding incorporating enemy bases - - Migration and siege groups now try to avoid chunks with existing enemy structures - Tweaks: - - Runtime number generator just uses the map seed now - - Changed inferno faction to a projectile with fire aoe - Bugfixes: - - Fixed the period of the xor number generator being cut in half - - Fixed desync when hives would generate buildings using the landmine event (workaround before created_effect existed) - - Fixed acid damage causing hit effects for enemies which caused UPS loss - - Fixed initial scan generation of hives on resources patches not having resources set before determining upgrades - ---------------------------------------------------------------------------------------------------- -Version: 3.0.3 - Bugfixes: - - Fixed settling squads not detecting players on a chunk when deciding to settle early - - Fixed recycling bases not clearing processBaseAIs iterator - ---------------------------------------------------------------------------------------------------- -Version: 3.0.2 - Bugfixes: - - Fixed on_rocket_launched enemy base not be close enough for point gain - - Fixed when new enemies are disabled the ai trying to mutate to a new enemy faction that doesn't exist - ---------------------------------------------------------------------------------------------------- -Version: 3.0.1 - Contributions: - - ahmedcharles provided a fix for the missing map parameter in rocket launch event - Bugfixes: - - Removed console print statement when recycling bases - - Fixed entitySkipCountLookup being nil when new enemies are disabled - ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 - Notes: - - Will reset maps of in progress games. This means that all enemy units will be removed and new enemy faction mutations will be reset. if you have used a pre-release 3.0.0, you will need to reset your mod options otherwise startup will fail. - Contributions: - - Added custom colors from ErdwurmJim - - Simplification and refactor of locale generation with local for zh-CN from PlexPt - - Added KO locale from x2605 for Rampant 3.0.0 - - Added updated RU locale from Astorin for Rampant 3.0.0 - Improvement: - - Modified death pheromone squad path scoring - - AI is now per regional base - - Regional bases now have there own aggressive and siege squad counter and cleanup process - - Added beltlayer, pipelayer, minime, and blueprint-sandboxes mod surfaces to surface exclusion list - - Added mod settings to customize factions colors - - Added on_chunk_deleted event for updating map and base stats - - Walking sounds have been added to new biters - - Laser sounds to beam attacks - - Biter melee attacks should now have a sound - - Dying, working, roaring sounds should now better match the size and level of the new enemy entities - Tweaks: - - Increased unit spawner cooldown by 2x - - Added point loss on unit death - - Removed squad refunds when vanilla AI or other mods create enemy unit groups above the squad limit - - Halved the base distance bonus per regional base level so regional base cover less ground - - Walls and transport belts no longer provide points to the AI when they are destroyed - - Siege groups should try to settle slightly further from player structures - - AI Debugging states are now printed to console and in-game - - Added mod description into locale for translation - - Reduced inferno fire damage by 97%, added fire patch cluster per attack starting at 2 upto 4 - Bugfixes: - - Fixed Krastorio2 on_force_created playerforces being nil - - Fixed enemy map scan creating bases unnecessarily - - Fixed base.index reference error in displaying ai state - - Fixed rampantSetAIState command to work with multiple ais per surface - - Fixed base recycling on invalid surfaces - - Fixed base chunk count not being decremented when chunks are removed - - Fixed base iterator processing being nil - - Fixed spawner spawns and wasp drones being included in kill stats, death pheromones, and AI stats - ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 29. 12. 2021 - Contributions: - - PlexPt has provided an update Chinese locale - Improvements: - - Added integration with schallAlienLoot (Thank you garrotte for the code snippet) - - New enemy hives only spawn structures during daylight hours now - Tweaks: - - Set maximum value on enemy seed to 4294967295 - - Slightly increased spacing between enemy structures - - License has changed to GPLv3 - - Greatly reduced chance of hive outside resoure chunks on initial structure creation (1 in about 500 spawners will be hives) - - Separated mod setting into printing settlers building and ai spending points - - Reduced visual size of spawners and hives - - Increased visual size of worms - - Inverted Hive colors for easier visual identification - - Decreased occupied resource pheromone generation by 10x - Bugfixes: - - Fixed added check for hives on resource chunks before early building - - Fixed Hives spawning excessive amounts of entities - - Fixed chunkPack nil in processNests (Thanks Skallywaggz for the report) - - Fixed random generator seed overflow (Thanks NeveHanter for the report) - - Fixed removing chunks could index outside processQueueLength (Thanks thecheat789 for the report) - - Fixed processMap and processStaticMap could index outside processQueueLength - - Fixed base alignments could be blank when removing factions (Thanks kind_killer for the report) - - Fixed hive proxy entities would occasionally not be destroyed or upgraded correctly - - Fixed hive proxy entities not respecting initial proxy type when determining initial upgrades - - Fixed hive entities being initialized from turrets - Optimizations: - - Added early stopping to removeProcessQueueChunk - ---------------------------------------------------------------------------------------------------- -Version: 2.1.2 -Date: 28. 12. 2021 - Bugfixes: - - Fixed Chinese locale - ---------------------------------------------------------------------------------------------------- -Version: 2.1.1 -Date: 28. 12. 2021 - Improvements: - - Settlers now have a 40% chance to move roughly 50% of max expansion distance, 25% chance to move roughly 33% of max expansion distance, and 25% chance to move roughly 75% of max expansion distance, 5% chance to settler where the group formed, 5% chance to go 100% of max expansion distance - Bugfixes: - - Settlers in some cases not setting a maxDistance which caused settlers to build where they were formed - ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 27. 12. 2021 - Contributions: - - PlexPt has completed the Chinese locale - Improvements: - - re-added finding non-colliding position for enemy structures but if it can't find a position then overlap them - Tweaks: - - Modified spawning_time_modifier on biters to be roughly 25% faster at high tiers - - Modified spawning_time_modifier on spitters to be roughly 20% faster at high tiers - ---------------------------------------------------------------------------------------------------- -Version: 2.0.4 -Date: 17. 12. 2021 - Contributions: - - PlexPt has added a Chinese locale - Improvements: - - Added RTStasisRealm to surface exclusion list - - Added space exploration spaceship surface to exclusion list - - Added pass during upgrade to remove in-memory maps that are on the exclusion list for surfaces - Bugfixes: - - Fixed onBuilderArrived if the builder was a unit and not a group (Thanks DBotThePony for reporting) - - Fixed adding player to chunk crash - - Fixed surface deletion with chunk processor indexing nil - - Fixed enemy structures not being counted for faction adaptation - - Fixed when new enemies is enabled partway through game that all enemy structures are registered correctly - ---------------------------------------------------------------------------------------------------- -Version: 2.0.3 -Date: 15. 12. 2021 - Tweaks: - - Added explosions to crystal pylon death - Bugfixes: - - Fixed typo in require import for upgrade on setChunkBase (Thanks Eerrikki for reporting) - - Fixed upgradeEntity could return a nil name which failed in a surface.create_entity call (Thanks SimplyData for reporting) - - Fixed energyThief crystal pylons turning into radar corpses when they died - - Fixed energyThief crystal pylon hover picture not displaying - ---------------------------------------------------------------------------------------------------- -Version: 2.0.2 -Date: 15. 12. 2021 - Bugfixes: - - Fixed base missing in unregisteredEnemyStructure with Rampant already active in a save before enabling new enemies (Thanks Biviho for the report) - ---------------------------------------------------------------------------------------------------- -Version: 2.0.1 -Date: 23. 11. 2021 - Contributions: - - RealSimplyData fixed missing map parameter in onUnitGroupCreated (Thanks illiander42 for reporting) - Bugfixes: - - Fixed chunkPassScanning not checking for enemy structures when determining passability - - Fixed chunks that become impassable not being properly removed from all tables and iterators (Thanks ZwerOxotnik for reporting) - - Potential bugfix for evolutionTable being nil, still need a save to verify (Thanks ZwerOxotnik for reporting) - - Corrected Krastorio2 position parameter wanting xy pair. (Krastorio2 1.1.6 that is currently published at the time of this update is broken still, see thread https://mods.factorio.com/mod/Rampant/discussion/5f44980455e55634147d01f4) - - Fixed vengence squad queue could get stuck if the surface it was about to process was invalidated - ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 23. 11. 2021 - Contributions: - - Special thanks to Garrotte13 for play testing early builds and providing invaluable feedback and bug reports. - - Astorin has provide an updated RU locale up through Rampant 2.0.0 - Improvements: - - Removed bounding box check when placing enemy buildings or upgrading buildings inplace - - Limited base faction mutations to 2 (configurable) with a small probability to be granted additional mutations or be locked into those factions forever - - Readded regional bases going dormant in regards to upgrading structures to allow for a buildup of base points to upgrade larger structures like hives. DOES NOT EFFECT ATTACK WAVES. - - Number of groups that can be active in aggressive AI state now scales with the number of active nests. Rougly for every 30 pollution covered nests you will get an additional attack group. - - Optimized regional base upgrades so that the work is spread over many ticks reducing lag spikes - - Optimized adding new chunks to the Rampant in-memory state map - - Added minimum building cost upgrade check before base upgrade performs scanning - - Added max number of wander commands in a row for squads that aren't going anywhere before disbanding squad - - Optimized energy thief faction by switch to electric AOE projectile - - Factorissimo, Space Exploration Orbits, asteroid belts, secret maps, starmap, AAI-signal, NiceFill, Blueprint lab surfaces are no longer processed - - Map processing around player now changes to the surface the player is standing on - - Squads now get processed regardless of the current active map being processed - - Added max number of move commands that touch the same chunk to squads before disbanding or settling based on if migration is enabled - - Enemy structure upgrades now are processed regardless of current active map - - Spawners covered by pollution are now processed regardless of current active map - - Optimized processing spawners covered by pollution - - Newly generated chunks are now processed regardless of current active map - - Neutral death events that aren't cliffs are no longer processed - - Added support for AbandonedRuins mod - - Victory scent is now processed regardless of current active map - - Pheromone map processing only does upto 5% of generated chunks on a surface before switching to the next surface - - AI Planning will now happen on upto 15 surface per cycle - - Spawners not covered by pollution are now processed regardless of current active map - - Attack waves are processed regardless of current active map - - Surfaces are allocated but don't begin processing until the first enemy structure or unit group is found - - Map cleanup is now processed regardless of current active map - - Chunk pass scanning is now processed regardless of current active map - - Siege AI state now sends roughly 1 raid group every 2 settler groups if raiding is enabled - - Siege groups now try to settle just outside player structures as opposed to attacking - - Added Raid AI state to lower temperament scores @ 20% at 0 temperament and 15% at (0.2, 0.4) - - Vengence squads now have a 7.5% chance to be a settler group if migration is enabled - - Added configurable initial amount of time before the AI goes out of peaceful mode (Thank you Dimm2101) - Tweaks: - - Increase chance to upgrade an enemy structure from 5% to 30% - - New enemy regional bases that have two factions now do 75% on one faction and 25% on the faction for building and upgrading enemy structures - - Doubled the processing rate of regional faction bases with new enemies - - Added a small chance (0.5%) that Hives can spawn outside resource patches (Thank you Dimm2101) - - Increased suicide and nuclear biters attack range from 0.5 to 1 - - Increased base point accumulation by 3000%, used for enemy building upgrades - - Added early stopping when determining the faction tier to use, so higher level factions will appear more frequently - - Increased acceptance rate of higher evolution to tiers when calculated factions - - Decreased evolution target variability when calculating bases faction type - - Decreased wander time when a settle command fails to 20 seconds - - Reduced player, enemy, resource scanned chunks to 2 every 7 ticks - - Reduced pheromone map processed chunks to 105 every 7 ticks - - All random numbers now are based of the mod settings seed added with the map seed. This means that the AI should always perform the same actions when loading a save. - - Increased nest activeness duration upto 2 minutes between checks - - Increased deathThreshold for adaptation to 4500<50%evo, 7500<75%evo, 11000<90%evo, 16000 - - Now one spawner covered in pollution is worth 25 raid spawners to offset temperament contribution - - Now one spawner covered in pollution is worth 15 destroyed enemy structures to offset temperament contribution - - Now one spawner covered in pollution is worth 22 built enemy structures to offset temperament contribution - - Now one spawner covered in pollution is worth (69:<30%evo, 138:<50%evo, 276:<70%evo, 552:<90%, 1104:>90%evo) lost enemy units to offset temperament contribution - - Now +/-0.05 temperament from 0.5 gives an extra 0.1 points to AI each cycle, +/-0.15 gives 0.2, +/-0.30 gives 0.3, +/-0.5 gives 0.5 - - Increased migration ai state chance at min temperament by 5% and if migration is disabled increased raiding to 70% chance - - Increased siege chance to 60% chance between temperament (0.05, 0.20) and if migration is disabled increased raiding to 60% - - Settling group formed during AI siege state are 2.5x more likely to be kamikaze - - Reduced vengence chance by 25% so 2 out 100 units @ 0evo upto 6 out 100 units @ 100evo - - Changed out aggressive state for raiding between (0.2, 0.4) temperament - - Added raiding state to temperament (0.4, 0.6) at 10% chance - - Reduced peaceful state only to 25% and added migration at 25% chance at (0.4, 0.6) temperament - Bugfixes: - - Fixed chunks not processed due to chunk not being actually generated by game engine. You may notice a small delay before the spawners and worms convert to Rampant new enemy versions. - - Fixed vengence squads only processing half the expected chunks - - Fixed nest processing only processing half the nests (Thank you Dimm2101) - - Fixed active and raid nest processing only processing half the nests (Thank you Dimm2101) - - Fixed new enemy building upgrade could replace an entity with the same entity (Thank you Dimm2101) - - Fixed new enemy regional base recycling would only process half the bases - - Fixed new enemy adaptation due to damage type not correctly calculating probability for adaptation - - Fixed squad cleanup would periodically skip a squad when cleaning up dead unit groups - - Fixed enemy destroying a player structure only processing half of the chunks it should have been - - Fixed unit groups spawned by factorio in noctural mode during the day would give points to the AI (Thanks Deathlymad) - - Added command timeout for unit groups in case a command hangs or unit groups are stuck gathering (Thank you Dimm2101) - - Corrected spelling of wonder command to wander command - - Fixed enemy structures destroyed by the enemy were not being unregistered from Rampants map - - Fixed regional bases would not be corrected distributed or cleaned up on spawners - - Fixed chunks that became impassable would not return an impassable chunk flag when pass scanned - - Fixed kastorio creep code be spawned when the building failed to upgrade - - Potential desync fix in relation to reference comparison and deserialization - - Fixed squad attack move would not properly place warding pheromone on taken path - - Fixed players added to a chunk not taking player surface into account - - Fixed picking damageType during faction mutation (Thank you Garrotte13) - - Fixed surfaceTileChange trying to use a boolean inplace of an object (Thank you Garrotte13) - - Fixed onslaught AI state not using raid actived nests - - Fixed settlers calculating kamikazeThreshold using attackWaveMaxSize instead of settlerWaveMaxSize - Framework: - - Fixed Rampant in-memory map visualization tool for debugging - - Added debug mod settings for showing enemy structures being upgraded in place - - Moved config methods into relevant code files - - Removed unnecessary unregisterResource called on onMine event - - Cleaned up energy thief code in control - - Pre-allocated objects no longer cross function boundaries - Removals: - - Removed map deadzones as they were breaking regional bases - - Removed make building safe mod option, now each individual toggle works as people are expecting - ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 25. 07. 2021 - Tweaks: - - Added mod setting to modify distance between factions - - Added mod settings for debug values around faction mutation - Bugfixes: - - Fixed factions being added to damage table incorrectly - ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 24. 07. 2021 - Bugfixes: - - Account for optional Rampant new enemies - - Corrected testing value - ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 24. 07. 2021 - Features: - - Rampant new enemies now adapt to the damage type they are killed with - Tweaks: - - Reduced default max number of active squads to 25 and active builders to 10 - - Added kux ion cannon optional dependency in info.json - ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 02. 05. 2021 - Contributions: - - Dagothur fixed factions removed mid-playthrough causing crash - - Dagothur fixed aggressive ai state not creating attack groups - ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 29. 04. 2021 - Contributions: - - Astorin removed old unused ru.cfg locale - - Dagothur added a mod setting to print ai point gains to chat - - Dagothur added a mod setting to print ai point usage to chat - - Dagothur added a /rampantSetAIState to modify the ai state - Improvements: - - Increased ai baseline point accumulation based on temperament - Tweaks: - - Increased spitter and worm projectile size by 20% - - Decreased spitter and worm projectile speed by ~40% - - Increased baseline ai point accumulation for active nests by x3 - - Increased baseline ai point accumulation at min and max temperament by 0.2 - - Increased raid nest contribution to temperament by x2.7 - - Increased siege chance at temperament above 50% by 50% - - Decreased settler cost to ai by 33% - - Increased base ai min and max duration by ~x1.8 - - Increased biter base point gain by x3.5 - - AI Siege state now tries to expand active spawners then raid spawners then all spawners - Bugfixes: - - Settlers not spawning as they should do to incorrect weighting on spawn locations - - Fixed new enemies factions not mutating or upgrading structures over time - - Spawners built on impassable chunks now get tracked properly - ---------------------------------------------------------------------------------------------------- -Version: 1.0.9 -Date: 21. 04. 2021 - Bugfixes: - - Surface tile changes using waterfill causing excess UPS usage - ---------------------------------------------------------------------------------------------------- -Version: 1.0.8 -Date: 16. 04. 2021 - Contributions: - - Dagothur has added a mod settings option for disabling the peaceful AI state of Rampant - - Dagothur has added a mod settings option for displaying the Rampant state information on state change - - Dagothur has added a tier level to new enemies names - - Astorin has provided a corrected RU locale - Improvements: - - Added a debug map setting for AI temperament - Tweaks: - - Increased form group chance minimum by 100% and maximum by 75% - Bugfixes: - - Changed nest processing for siege state to work across all spawners not just active nests - ---------------------------------------------------------------------------------------------------- -Version: 1.0.7 -Date: 03. 04. 2021 - Contributions: - - Metallumere has added more distinct colors for each faction. - - Metallumere has changed the names of sizes and some faction names to more common terms - - Metallumere has increased attack speed of fast faction while keeping total DPS the same - - Metallumere has increased movement speed of fast, nuclear, and suicide factions - Tweaks: - - Decreased Poison faction cloud damage by 25% - - Increased suicide biters damage by 50% - - Added scorchmark scaling to new enemies - - Increased squad used chunks that are tracked by 30% - - Reduced movement penalty on chunks added by squad movement by 50% - - Increased minimum AI points allow for one settler group - - Reworked AI point gain - Bugfixes: - - Fixed nocturnal biters mod setting description. As vanilla attacks have been integrated - - Fixed missing locale for fire spitter acid pool - - Fixed tooltip for suicide and nuclear biters - - Fixed removing a faction mid play-through caused a crash - - Fixed squads not getting commands processed every ticks - - Fixed AI not gaining points at low levels of evolution - - Fixed temperament not starting at 0.5 - ---------------------------------------------------------------------------------------------------- -Version: 1.0.6 -Date: 28. 03. 2021 - Tweaks: - - Increased max ai points by 24% - - Added chance for normal migration at minimum temperament - - Added raiding at medium-high temperament - - Increased raiding chance at high temperament - - Added a max temperament stage that is all raiding, onslaught, and siege - - Increased active nest contribution to temperament by 38% - Bugfixes: - - Fixed ion cannon event typo in points - - Fixed suicide biters explosions being lots of small explosions to one big explosion - - Fixed unit movement resolution modifer being to low to path effectively - - Fixed range_mode not being set on new enemies for bounding box to bounding box - ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 28. 02. 2021 - Bugfixes: - - Fixed multipler not being defined above 0.9 evolution - - Fixed nil indexing on unit group creation - ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 06. 02. 2021 - Improvements: - - AI temperament logic now will calm down after you destroy enough units and/or nests - - Rampant now functions on all surfaces - - Rampant no longer clears surface information on mod changes - - Added a temperament modifer setting to adjust how quickly the ai will reach extremes in attacking and expansion. - Tweaks: - - Increased minimum points the AI can work with to 200 - - Reduced spitter range by 2 across all new enemy tiers - - Increased spitter projectile collision box by 5x - - Decreased movement debuff from spitter acid puddle by roughly 70% - - Decreased acid pool sticker damage by 50% - - Decreased suicide biter damage 90% and radius by roughly 50% - - Decreased nuclear biter damage 90% - - Decreased default max wave size to 75 units - - Increased evolution requirement for suicide and nuclear biters to 20% and 45% - - Decreased squad size ramp up to evolution_factor^1.4 - - Increased unit lost temperament contribution to 0.03 - - Decreased active spawner temperament contribution to 0.25 - - Increased builder squad cost to 400 - - Decreased siege ai state chance to 15% at peak temperament - - Halved AI temperament rate of change - - Increased ai state duration minimum to 10 and maximum to 25 minutes - - Changed default enemy seed to non-zero - Bugfixes: - - Fixed suicide and nuclear enemies explosion centered on target instead self - - Fixed process spawners function reading missing globals - - Fixed potential desync in squad attack movement - - Fixed potential desync in unit group creation event - - Fixed potential desync in building native tables - - Fixed find entity upgrade incorrectly calculating evolution - - Fixed bug with the mod new game+ - - Fixed existing spawner upgrading in place over time - - Fixed add wall acid resistance setting would overwrite higher resistance and not effect gates - ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 06. 12. 2020 - Improvements: - - Added setting for enabling fade time of corpses - Bugfixes: - - Fixed missing fade time for spawners - ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 19. 10. 2020 - Contributions: - - Astorin added RU locale - - oralordos updated Rampant to Factorio 1.1.0 - - oralordos added support for Krastorio2 creep - Tweaks: - - AI Temperament per logic cycle normalized to full contribution - - Increased active raid nest contribution to 0.00675 - ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 18. 10. 2020 - Improvements: - - Added spawner creep from vanilla to Rampant spawners and worms - - Added nuclear biters atomic shockwave - - Added corpse expiration time setting in mod settings - Tweaks: - - Increased active raid nest contribution to AI temperament to 0.0075 - - Reduced destroyed player buildings effect on AI temperament to 5 - - Reduced destroyed enemy buildings effect on AI temperament to 5 - - Increased minimum logic cycle contribution change to AI temperament to 10% - - Increased units to spawn around new enemy spawners by 6 and units owned by 2 - - Added caching to goto_location command - Bugfixes: - - Missing EN locale for acid pool on vanilla worm and spitter attack - - Temporary unit group size check on build command to prevent infinite loop until factorio 1.1 is released - - Fixed mod settings ordering for hive settings - Optimizations: - - Removed ai command completed event as cost was too high - ---------------------------------------------------------------------------------------------------- -Version: 0.18.17 -Date: 08. 07. 2020 - Improvements: - - Re-added siege toggle - Tweaks: - - Reduced Purple cloud damage by 72.5% - Bugfixes: - - Purple cloud triggering before builders arrived - - Fixed factorio base update breaking slow sticker - Framework: - - Fixed spelling mistake in code - - Fixed duplicate definition of loot in spawner utils - ---------------------------------------------------------------------------------------------------- -Version: 0.18.16 -Date: 27. 04. 2020 - Bugfixes: - - Fixed landmines being removed after arming - ---------------------------------------------------------------------------------------------------- -Version: 0.18.15 -Date: 25. 04. 2020 - Bugfixes: - - Fixed score resources nil neighborChunk - - Fixed unit group gathering force and squad check - ---------------------------------------------------------------------------------------------------- -Version: 0.18.14 -Date: 25. 04. 2020 - Bugfixes: - - Tile placement fixed - ---------------------------------------------------------------------------------------------------- -Version: 0.18.13 -Date: 16. 04. 2020 - Improvements: - - Added neutral objects to scanning to decrease chunk rating based on number of things present - - Swapped to ai command completed for unit movements - - Added effect when spawners build to destroy build site - - Integrated vanilla AI into Rampant for pollution management - - Map processing sweep now does and forward and reverse pass - - Better handling of death pheromone and squad coordination - - Added support for script_raised_set_tiles - - Added setting option for max squads active - - Added setting option for max settlers active - Tweaks: - - Increased Victory scent to x10 pheromone value - - Reduced active raid nest contribution to AI state to 0.002 - - Changed ai credits per rocket launched to 5000 - - Refactored calculateKamikazeThreshold based on member count and current evolution - - Reduced enemy unit lost contribution to AI state to 0.001 - - Reduced RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX to 190000 - - Removed lite mode setting - - Removed disable vanilla ai setting - Bugfixes: - - fixed add movement penalty not using squad chunk - - fixed landfill and waterfill getting registered properly - - fixed surface filter queries grabbing player buildings that didn't have a collision mask - - fixed worm icon in kill stats - - fixed units not counting for ai state shift - Optimizations: - - Cleaned up regroup squads - - Cleaned up invalid group detection - - Minimized use of group.members - - Changed how settlers remove entities around build sites - - Split map processing and unit group creation - - Refactored pheromone map - ---------------------------------------------------------------------------------------------------- -Version: 0.18.11 -Date: 13. 04. 2020 - Improvements: - - Groups stolen from vanilla AI can now become settlers based on ai state - - AI now gains extra credits based on the number of spawners in pollution - Tweaks: - - Increased chance to 45% for both attack and settle on a map processing logic cycle - - Squads and settlers created per map scan capped at 7 - Bugfixes: - - fixed script_raised_destroy not being pass to the onDeath handler - - fixed SENTINEL_IMPASSABLE_CHUNK not being defined in base entity upgrade handler - - fixed rapid in squad defense to rabid (Thanks to jnshi) - - fixed squads being able to record movement penalties for SENTINEL_IMPASSABLE_CHUNK - - fixed squads being able to be added to SENTINEL_IMPASSABLE_CHUNK - - fixed new unit scalers now have a minimum of 0.0001 - - fixed tile changes using surface index instead of surface name - - fixed squad cap due to spawning not taking into account pending squads - ---------------------------------------------------------------------------------------------------- -Version: 0.18.10 -Date: 04. 04. 2020 - Bugfixes: - - fixed gameSurfaces not being set after adding game surfaces by upgrade - ---------------------------------------------------------------------------------------------------- -Version: 0.18.9 -Date: 03. 04. 2020 - Bugfixes: - - gameSurfs crash on game upgrade - ---------------------------------------------------------------------------------------------------- -Version: 0.18.8 -Date: 03. 04. 2020 - Improvements: - - Rampant now has a mechanism to drain pollution around spawners as before they were filling up and stopped absorbing pollution. - Bugfixes: - - Spawner pollution proxies being counted against enemy force spawner evolution - ---------------------------------------------------------------------------------------------------- -Version: 0.18.7 -Date: 03. 04. 2020 - Improvements: - - Added logic for switching active surfaces and Rampant alerting when players enter new surfaces. Rampant can only handle one active surface still. - Tweaks: - - Spawners periodically spawn lower level units at higher evolutions - - Reduced player pheromone cloud range by half (Player threshold setting from 7 to 20) - Bugfixes: - - Remove second info.json dependency entry for Rampant Resources - - Remove desync warning message from biters affected by tiles as it was fixed in factorio 0.18.16 - - Fixed biter, spitters, worms, and spawner icons - ---------------------------------------------------------------------------------------------------- -Version: 0.18.6 -Date: 25. 03. 2020 - Tweaks: - - Changed setting default to true for units affected by tile as factorio 0.18.16 fixes the desync issue - - AI now has a minimum number of points that it can always accrue up to (100) - - Buffed Rampant Enemies biter close range damage by 70% for all tiers - - Nerfed Rampant Enemies spitter damage by 75% for all tiers - - Nerfed Rampant Enemies electric biter damage by 40% - - Nerfed Rampant Enemies worm damage by taking the spitter damage range and multipling by 3 - - Nerfed damage for vanilla blockable projectile by roughly 50% for all tiers - - Added a warmup pause for spitters to spit (30 ticks tier 1, 20 ticks tier 10) - - Added cooldown deviation to Rampant Enemies - - Reduced stdDev of Rampant enemies attributes to 17% - - Reduced minimum of Rampant enemies attributes to 70% - - Added a min_attack_distance to new Rampant enemies spitters - - Added 0.18.18 new death effects for Rampant enemies - Bugfixes: - - Squads size correctly scales with evolution now. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.5 -Date: 14. 3. 2020 - Improvements: - - Added on hit damage for biters include filter for fire - Tweaks: - - Increased range of visible size of enemy units - - Full map scan has been re-enabled by default to ensure eventual map consistency - - Decreased sticker movement speed reduction and removed friction modifier from vehicle - - Vehicles are less slowed then the character on foot for stickers - - Added setting to enable units affected_by_tiles (As of 0.18.15, this setting can cause desyncs) - Bugfixes: - - Fixed splash damage with friendly fire disabled not affecting neutral objects - - Fixed rally flag being set by the wrong function - - Fixed mod settings getting recalculated for rampant arsenal and rampant resources - - Fixed desyncs around units having affected_by_tiles set to true (boskid) - Optimizations: - - Combined enemy structure query in full map scan - ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 2. 2. 2020 - Improvements: - - Unit groups created by factorio when shelling spawners are now converted to Rampant squads - Bugfixes: - - Re-added removed settings that were actual used with Rampant - - Potential squad getting stuck on impassable terrain - ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 1. 2. 2020 - Improvements: - - Fixed scaler settings not applying to worms or unit spawners - - Added scaler settings for hives - Tweaks: - - Increased Hive spawn times by 1.75 - Bugfixes: - - Removed settings that were unused with Rampant - - Fixed removing factions during play - ---------------------------------------------------------------------------------------------------- -Version: 0.18.2 -Date: 1. 2. 2019 - Contributions: - - RuZZone - Updated to 18.2 fixing engine breaking changes - Improvements: - - Added blood effects on damaged for new enemies - - Added water reflections for new biters and spitters - Bugfixes: - - Fixed blood fountains not finding updated particles - - removed water effect from blood particles - - Reduced pollution to attack for vanilla AI on Rampant New Enemies - ---------------------------------------------------------------------------------------------------- -Version: 0.17.32 -Date: 24. 12. 2019 - Contributions: - - Billbo99 - Energy thief crystal next_upgrade was not getting set to nil. - Bugfixes: - - script_raised_revive was not being listened for (AMCH0507) (https://mods.factorio.com/mod/Rampant/discussion/5e02758ead17f4000c086b7b) - ---------------------------------------------------------------------------------------------------- -Version: 0.17.31 -Date: 19. 12. 2019 - Tweaks: - - Added setting to revert enemy map color change - ---------------------------------------------------------------------------------------------------- -Version: 0.17.30 -Date: 17. 12. 2019 - Bugfixes: - - Hive buildings not getting swapped out correctly - - Hive and Spawner spawning cooldown was using wrong start and end values - ---------------------------------------------------------------------------------------------------- -Version: 0.17.29 -Date: 15. 12. 2019 - Optional Graphics: - - New Hi and Low resolution graphics for Troll and Physical Factions biters, armored biters (Thanks to CybranM, requires downloading separate mod Armoured Biters) - Features: - - Hives that can produce unit spawners, turrets, or more hives. Typically appear on resources patches. - Improvements: - - Pathfinding now looks two steps ahead - - Squad formation now has a gathering delay to allow all members to make the initial group - - Better tracking of squads on chunks to accommodate the two step path finding - - Collision checker for squads and squad movement from a container to a unit - - Attack waves should generate more localized squad formations, so that biters appear to attack from all sides less - - New AI temperament system - - Spawner pollution coverage detection - - Acid biter melee attack now leaves acid puddle - Tweaks: - - Reduced size of new enemy lower tiers - - Onslaught AI setting and aiAggressiveness setting removed - - Increased minimum unit count for a retreat from 3 to 6 - - Biters and Spitters now are affected by tile modifiers - - Nerfed inferno spitter fire damage and duration to reasonable levels - - Buffed suicide biters damage and health - - Nerfed poison biters cloud damage and duration - - Added blood color to match new enemy color - - Added blood explosions to each new enemy - - Nuclear biters have more visual explosions - - Changed poison biter death cloud to be generated using dying_trigger_effect - - Reduced sticker damage and duration everywhere - - Switched general spit projectile from direction only to positional targeting - - Added spit projectile stickers to tooltip - - Default for new enemies spit projectile stickers damage reduced by half - - Spawner spitter and worm eggs now damage the immediate area around the egg - - Acid pools no longer cause friendly fire - - Prioritize settler group creation over attack squads - - Biter faction color should match map color now - - Increased unit spawner spawning time by 3x - Optimizations: - - Better object reuse for squad and pending attack, creating less garbage - - Trimmed table creation where possible - - Regrouping squads and builder clean up put onto separate intervals - - Reusing chunk scanner tables - Bugfixes: - - Fixed spawner egg and wasp size being larger than intended - - Fixed old savegames penalties having nil chunk index - - Fixed that mining a resource by hand unregister all remaining resource on a tile - - Fixed pheromone dispersal not following pathing restrictions - - Fixed chunk scan and player building pheromone generator mismatch - - Fixed ai credits being uncapped and accumulating more than Max Credits available for that evolution level - - Fixed retreating squads being adding to squad set multiple times - - Fixed retreating squads not waiting long enough to assemble all units before movement - - Fixed spitter max projectile range could cause a spitter to attack but not hit a target - - Fixed non retreating group formation not having a distraction modifier - - Fixed icon size not being set energy thief drain crystal - - Fixed new enemies attacks following naming levels instead effective levels - - New spawner enemies color mask should fit much better now - - Fixed blood particle size not increasing with tiers - - Fixed enemy volume not changing based on tier - - Fixed Nuclear and Suicide spawners instantly spawning low level units - - Fixed Physical and troll spawner and worm scales - - Fixed chunk processing not checking chunk generation status - Framework: - - Bobs enemies and Natural Evolution Enemies no longer able to be active with Rampant's new enemies - - Cleaned up new enemy creation - - Dropped support for 5 tier new enemy configuration - - Changed default blood particle removal optimization to off - - Added interop function that allows other mods to set the active surface for the AI processing - License: - - License change from Apache2 to CC BY-NC 4.0 - ---------------------------------------------------------------------------------------------------- -Version: 0.17.28 -Date: 8. 17. 2019 - Bugfixes: - - Fixed uninitialized enemy seed lookup - ---------------------------------------------------------------------------------------------------- -Version: 0.17.27 -Date: 8. 16. 2019 - Bugfixes: - - Fixed settle move position error - - Fixed gaussianRandom having min greater than max causing hangs - ---------------------------------------------------------------------------------------------------- -Version: 0.17.26 -Date: 5. 14. 2019 - Contributions: - - Choumiko - Added event hooks for script_built and script_destroyed events - Optimizations: - - Disabled full map scan by default in favor of script_built and script_destroyed events. If a mod does not use these events and creates or destroys entities through scripts, you may need to re-enable this feature in the mod map settings under Compatibility: enable full map scan. - Improvements: - - Added a check for script created resources in the script_built and script_destroyed events - - When a squad is destroyed its last few chunk moves now receive a portion of the death generator pheromone from the chunk they died on - Tweaks: - - Removed unused mapping tables - - Chunk properties now use <= instead of == when checking for minimum allowed values - - Increased death pheromone generator amount to 1300 - - Increased retreat levels by 30% - - Increased raiding base activition threshold to 550 - - Decreased minimum cooldown time for attack waves in aggressive state to 30 seconds - - Reduced all player generator values by half - Bugfixes: - - Memory leak with settlers last tick map - - Multiple version of chunks where in the processing queue causing double processing issues with a duplicate context - ---------------------------------------------------------------------------------------------------- -Version: 0.17.25 -Date: 5. 8. 2019 - Improvements: - - Added lite mode which causes the mod to run with a lower UPS cost by making the ai scan and process the game map slower - Tweaks: - - Reduced default spitter projectile AOE damage by 25% - - Added default spitter projectile direct damage for 1/3 damage of AOE, spitters don't get stopped by trees now with friendly fire disabled - - Renamed nest to spawner in unit-spawner prototypes - - Normalized player building pheromone generation into six groups 50, 200, 1000, 2000, 3500, 12000 - - Increased player process tick interval to 63 - Optimizations: - - Refactored player building scoring - ---------------------------------------------------------------------------------------------------- -Version: 0.17.24 -Date: 5. 3. 2019 - Improvements: - - Added interop functions for getSettlerCooldown and getSettlerWaveSize - Tweaks: - - Increased spitter projectile acceleration to 0.02 - - Increased spitter projectile starting speed to 0.6 - - Added projectile lead with default spitter and worm projectiles - - Switched to water-tile collision mask in chunk scanning for surface queries - - Added checks to spitter puddles on water so they dont happen - - Reduced the settler standard deviation to 1/3 of the wave size - Bugfixes: - - Fixed settler cooldown increasing with evolution as opposed to decreasing - ---------------------------------------------------------------------------------------------------- -Version: 0.17.23 -Date: 4. 30. 2019 - Tweaks: - - Added support for lighted-big-poles for safety - Bugfixes: - - Fixed interop register unit group not actually registering new squad - ---------------------------------------------------------------------------------------------------- -Version: 0.17.22 -Date: 4. 24. 2019 - Tweaks: - - Normalized unit 10 tier evolution spawns ((1, 0%) -> (2, 30%) -> (3, 40%) -> (4, 50%) -> (5, 60%) -> (6, 70%) -> (7, 80%) -> (8, 85%) -> (9, 90%) -> (10, 93%)) - - Normalized unit 5 tier evolution spawns ((1, 0%) -> (2, 40%) -> (3, 60%) -> (4, 70%) -> (5, 90%)) - - Decreased default new enemy physical decrease for (level, newVal) (1, 1) (3, 3) (7, 8) (8, 10) - - Changed default unit tiers to 10 - - Changed aggressive AI state to spawn unit groups with 1 to 3 minutes between groups, (raid, onslaught, siege, and migration still can mass spawn) - Bugfixes: - - Fixed random tick generator not being uniform over provided range - - Fixed AI migration state not respecting peaceful surfaces - ---------------------------------------------------------------------------------------------------- -Version: 0.17.21 -Date: 4. 21. 2019 - Bugfixes: - - Fixed 1 and 2 levels of biters instantly spawning due to 0 spawn time modifier - ---------------------------------------------------------------------------------------------------- -Version: 0.17.20 -Date: 4. 19. 2019 - Improvements: - - Spawner faction spit spawned biters now lose life over time - - Added mod setting that causes biter projectiles to no longer collide with other biters but still collides everything else - Tweaks: - - Doubled all spawner faction spit spawned biters health (30,60,90,120,150,180,220,500,1000,2000) - Bugfixes: - - Fixed unkillable construction robot settings not clearing and setting new resistance table - ---------------------------------------------------------------------------------------------------- -Version: 0.17.19 -Date: 4. 08. 2019 - Bugfixes: - - Fixed energy thief faction buildings not being hidden from filter bar - ---------------------------------------------------------------------------------------------------- -Version: 0.17.18 -Date: 4. 08. 2019 - Bugfixes: - - Fixed missing mod variables due to an internal update not taking place - ---------------------------------------------------------------------------------------------------- -Version: 0.17.17 -Date: 4. 07. 2019 - Improvements: - - When settlers start building they will clear the immediate area of colliding neutral objects - - Added initial pause when forming squads allowing members time to group - Bugfixes: - - Fixed settlers groups being in a finished state when building - ---------------------------------------------------------------------------------------------------- -Version: 0.17.16 -Date: 4. 07. 2019 - Tweaks: - - Reduced biter AoE damage by 25% - - Added biter direct target damage in the amount of 1/3 of the AoE damage - - Reduced the average distance settlers travel by 50% - Bugfixes: - - Fixed biters not being able to kill neutral objects - ---------------------------------------------------------------------------------------------------- -Version: 0.17.15 -Date: 4. 06. 2019 - Tweaks: - - Split enable swarm setting and shrink nest + worm - Bugfixes: - - Fixed mod setting breathing and enable swarm not using correct valueu - ---------------------------------------------------------------------------------------------------- -Version: 0.17.14 -Date: 4. 05. 2019 - Improvements: - - Added mod setting to directly affect ai aggressiveness - - Added mod setting to toggle construction bot and logistic being immune to all damage - - Killing spawners cause the ai to gain points to spawn up to 1 squads per nest - - Killing worms cause the ai to gain points to spawn up to 0.5 squads per worm - Tweaks: - - Increased new enemies default scale for levels 7+ by 0.2 - - Increased new enemies troll and physical scale for levels 6+ by 0.2 - ---------------------------------------------------------------------------------------------------- -Version: 0.17.13 -Date: 3. 28. 2019 - Bugfixes: - - Fixed bobs and NE find non colliding error - ---------------------------------------------------------------------------------------------------- -Version: 0.17.12 -Date: 3. 27. 2019 - Improvements: - - Changed new enemy unit spawning probabilities to follow a gaussian distribution over the level of the nest, so lower level nest spawn lower level enemies longer. - - Increased new enemy building spacing - Tweaks: - - Added a collision box reduction to all nests and worm turrets of 50% on the mod setting Enable the Swarm. - Bugfixes: - - Fixed spitter pollution to attack numbers - ---------------------------------------------------------------------------------------------------- -Version: 0.17.10 -Date: 3. 17. 2019 - Bugfixes: - - Fixed vanilla spawner autoplace requirement - - Fixed unit spawner breath setting only working if new enemies is checked - ---------------------------------------------------------------------------------------------------- -Version: 0.17.9 -Date: 3. 16. 2019 - Improvements: - - Updated spit graphics to 0.17 version - - Updated spit effects and damages to 0.17 vanilla - - Allow mod settings toggle between blockable and unblockable projectiles for vanilla - - Switched wasp drones to blockable projectiles - - Added AOE to melee attacks based on size - - Switch new enemies over to acid splash from vanilla - - Updated stickers to work on vehicles - - Added lead targeting to inferno biters - - Added acid puddle slowdown from vanilla as default spitter attack effect - - Added damaging acid puddle slowdown from vanilla as default worm attack effect - - Added damaging acid puddle slowdown from vanilla on acid faction - Tweaks: - - Removed bob blockable projectile logic - - Removed force old projectiles setting option - - Changed color of spawner egg and wasp drone - - Added better explosion effect to troll and physical worms - - Increased on wasp range from spitter by 6 - Bugfixes: - - Fixed troll spitters having a homing projectile - - Fixed spitters changing color when attacking - - Fixed biter attacks getting bonuses from player research - - Fixed suicide biter level 9 and 10 wouldn't die when they attacked - - Fixed physical and troll worm turrets having incorrect health values - - Fixed physical and troll nests having incorrect health values - - Fixed more damage then expected on enemy projectiles - ---------------------------------------------------------------------------------------------------- -Version: 0.17.8 -Date: 3. 14. 2019 - Improvements: - - Added some basic description of the faction to the mod settings description for each faction - - Added rough approximation of health per tier to mod settings start and end tiers - - Updated enemy variations description to better describe what it does for randomness per tier - Tweaks: - - Increased spawner egg life 2-10 (100->120, 110->120, 110->170, 120->170, 120->200, 130->200, 130->250, 140->300, 140->350) - Bugfixes: - - Fixed spelling from 0.17.12 factorio - - Fixed upcoming emissions_per_tick to emissions_per_second - ---------------------------------------------------------------------------------------------------- -Version: 0.17.7 -Date: 3. 12. 2019 - Improvements: - - Added setting for unit spawners breathing air to allow poison capsules to affect them - ---------------------------------------------------------------------------------------------------- -Version: 0.17.6 -Date: 3. 12. 2019 - Improvements: - - Reworked base upgrade system - Tweaks: - - Increased max evolution level for new biters from 95% to 97% - - Decreased distance to evolution from 1/7200 to 1/9600 - - Normalized evolution requirement for Neutral faction 1-9 (0.08->0, 0.16->0.1, 0.24->0.2, 0.35->0.3, 0.4->0.4, 0.45->0.5, 0.55->0.6, 0.65->0.7, 0.75->0.8) - - Increased evolution requirement for levels 2+ by 2% per tier on Acid, Electric, Fire, Laser, Physical - - Increased evolution requirement for levels 2+ by 5% per tier on Energy Thief, Inferno, Poison, Troll, Wasp - - Increased evolution requirement for levels 2+ by 7% per tier on Nuclear, Spawner, Suicide - - readded acid splash purple for spitter attacks - Bugfixes: - - Fixed nest and worms incorrectly being upgraded resulting in lost entities - - Fixed NE and Bobs faction alignments being correctly selected - ---------------------------------------------------------------------------------------------------- -Version: 0.17.5 -Date: 3. 10. 2019 - Improvements: - - Added robot on pre cliff destroy to invoke a passability scan on the chunk - Bugfixes: - - Fixed cliff explosive error due to removed code fragment - - Fixed expansion being forced on for testing - - Fixed process scan chunk process removing potentially incorrect chunk from processing - ---------------------------------------------------------------------------------------------------- -Version: 0.17.4 -Date: 3. 5. 2019 - Improvements: - - Increased chunk processing from 825 to 1020 chunks - - Settler groups now occasionally disregard everything to reach a spot to build a base, instead of attacking player or buildings - - Reworked attack move commands and settle move commands - Tweaks: - - Reduced full chunk scan threshold for water from 0.4 to 0.25 - - Removed old map path finder settings - - Added new find position centered flag to positions searches - - Adjusted new enemy worm ranges to vanilla levels - - Added kill_all_units on first add with new enemies for nest and worm space - - Increased migration ai state to 10% - - Removed attack wave message - - Decreased max squads from 40 to 35 - - Increased squad movement penalty from 10000 to 300000 - - Balanced squad movement distance between straight and diagonals - - Increased find path location entity size to 2x2 for better position resolution - - Added exponential growth to squad movement penalties - Optimizations: - - Improved squad processing and squad cleanup - - Refactored chunk utilities - - Refactored unit group utilities - Bugfixes: - - Fixed player pheromone not having highest value on chunk player was on - - Fixed settlers not being able to see chunks with resources on them - - Fixed retreat command not disengaging biters - - Fixed Poison faction poison death cloud crash - - Fixed new enemies newly built settlements not creating nests or worms - - Fixed find new enemy faction base by distance - - Fixed base recycling - - Fixed base alignment deadzone ttl and usage - - Fixed squad movement penalty lookup - - Fixed orphaned unit group recycling - - Fixed retreat scoring causing retreat location to be on player buildings - ---------------------------------------------------------------------------------------------------- -Version: 0.17.3 -Date: 2. 28. 2019 - Bugfixes: - - Fixed NE enemies version numbering change - ---------------------------------------------------------------------------------------------------- -Version: 0.17.2 -Date: 2. 27. 2019 - Bugfixes: - - Readded renamed or missing assets - ---------------------------------------------------------------------------------------------------- -Version: 0.17.1 -Date: 2. 27. 2019 - Bugfixes: - - Fixed bobs enemies integration - ---------------------------------------------------------------------------------------------------- -Version: 0.17.0 -Date: 2. 26. 2019 - Improvements: - - Added thumbnail - Tweaks: - - Updated to 0.17 - - Synced worm vanilla to worm template - - Synced spawner vanilla to spawner template - - Changed ground shakes warning message to off by default - - For now, acid-splash-purple replaced explosion - Bugfixes: - - Require statement path changes - - Removed unused chunk scanner entity causing load errors - - Removed acid splash spitter and worm decal as it no longer exist - - Fixed 0.17.2 hide-from-bonus-gui - ---------------------------------------------------------------------------------------------------- -Version: 0.16.42 -Date: 2. 18. 2019 - Improvements: - - Reworked how nests are activated by pollution, player, and base pheromone for better nest tracking - - Reworked chunk passability to only look for water or cliffs for impassable terrain - - Removed use pollution map setting - - Removed min and max attack threshold settings - Tweaks: - - Increased max squad count from 30 to 40 - Bugfixes: - - Reverted pheromone projection - - Reverted settings default player threshold to 7 - - Fixed radial pattern sort not being trigger on map rebuild - ---------------------------------------------------------------------------------------------------- -Version: 0.16.41 -Date: 2. 18. 2019 - Note: - - Enemy level maxes have changed what was 10 is now roughly equal to 8 - Tweaks: - - Added energy thief crystal and pylon physical resistance 25% - - Increased crystal pylon health from 150 to 750 - - Decreased electric and energy thiefs faction damages (7->6, 15->10, 22.5->15, 35->20, 45->30, 60->45, 75->60, 90->75, 150->90, 200->150) - - Decreased energy thief beam width (1.5->1, 1.5->1, 1.6->1.2, 1.6->1.2, 1.7->1.3, 1.7->1.3, 1.8->1.4, 1.8->1.4, 1.9->1.5, 1.9->1.5) - - Decreased energy thief range (11->9, 11->9, 12->10, 12->10, 13->11, 13->11, 14->12, 14->12, 15->13, 15->13) - - Decreased crystal pylon resistances for fire, electric, laser from 100, 100, 100 to 85, 95, 90 - - Added energy drain to crystal pylon of 500kW - - Increased drain crystal drain amount from 300kW per tier to 1.3MW - - Increased drain crystal health from 100 per tier to 400 per tier - - Increased all biter default health for levels 5 to 10 (400->1000, 750->2000, 1500->3500, 3000->7500, 5000->15000, 10000->30000) - - Increased physical and troll biter default health for levels 5 to 10 (800->1500, 1500->3000, 3000->5000, 6000->12000, 10000->20000, 20000->40000) - - Increased all spitter default health for levels 5 to 10 (750->1250, 1000->2250, 1500->3250, 2500->6500, 4500->12500, 7000->25000) - - Increased all nests default health for levels 5 to 10 (2500->3500, 3500->7500, 5000->11000, 7000->20000, 10000->30000, 15000->45000) - - Increased all worms default health for levels 5 to 10 (750->2000, 1000->3500, 1500->7500, 3000->12000, 5000->20000, 9000->25000) - - Increased nuclear and suicide biter faction health for levels 9 to 10 (3000->5000, 5000->10000) - - Increased spawner spawned biter faction health for levels 8 to 10 (145->250, 165->500, 180->1000) - Bugfixes: - - Fixed a chance that connecting wires on entity death has invalid target - - Fixed electric turret not being counted for energy thief conversion - - Fixed pylons not being targeted by turrets - ---------------------------------------------------------------------------------------------------- -Version: 0.16.40 -Date: 2. 16. 2019 - Bugfixes: - - Switched to numeric value to represent scoring functions - ---------------------------------------------------------------------------------------------------- -Version: 0.16.39 -Date: 2. 15. 2019 - Bugfixes: - - Reset squad scoring functions and set default scoring function - - Switched to single instance require statements causing multiple sentinel memory objects - ---------------------------------------------------------------------------------------------------- -Version: 0.16.38 -Date: 2. 14. 2019 - Bugfixes: - - Fixed squad attack being nil due to timing delay in update - ---------------------------------------------------------------------------------------------------- -Version: 0.16.37 -Date: 2. 10. 2019 - Improvements: - - Added the energy thief faction that will convert powered player structure into electric draining crystals - - Added the poison faction that when killed creates a damaging toxic cloud - - Removed unnecessary grouping mechanism when spawner eggs produce units - - Added individual base faction ai to manage base development - - During onslaught ai state player building destroyed by biters credits x10 to the biters - - Increased dispersion projection of pheromone by 20% allowing for further pathing - - Reworked squad attack scoring to better account for death pheromone - - Squads that kamikaze may now occasionally disregard death pheromone - - Maintain sorted chunk array for processing in a radial pattern from origin - - Hide spawner drones from the bonus gui screen - Tweaks: - - Increased resource pheromone min from 9000 to 15000 - - Increased resource pheromone max from 10000 to 20000 - - Increased retreat pheromone min from 1000 to 10000 - - Increased retreat pheromone max from 17000 to 170000 - - Increased player pheromone multipler from 500 to 2500 - - Increased bad squad movement penalty from 4000 to 10000 - - Increased death pheromone generator from 125 to 750 - - Increased victory pheromone by x3 - - Decreased death pheromone generator persistance from 0.995 to 0.9 - - Decreased death pheromone persistance from 0.99 to 0.975 - - Removed arbitrary player gen multipler in retreat scoring function - - Increased default setting of player score attack contribution from 7 to 16 - - Added minor resistance to poison to acid faction - - Added minor resistance to laser to electric faction - - Added minor resistance to explosion to fast faction - - Added minor resistance to electric to laser faction - - Added major resistance to explosion to physical faction - - Added minor resistance to poison to suicide faction - - Added minor resistance to physical to troll faction - - Added minor resistance to explosion to troll faction - - Added minor weakness to poison to inferno faction - - Added minor weakness to laser to physical faction - - Added minor weakness to electric to physical faction - - Increased general biters physical decrease for levels 7 - 10, (10->11,12->13,14->16,15->17) - - Increased general biters physical percent for levels 7 - 10, (13->14,13->16,14->18,15->20) - - Increased general biters explosion decrease for levels 6 - 10, (0->10,10->12,12->14,14->16,15->20) - - Increased general biters explosion percent for levels 6 - 10, (12->13,13->15,13->16,14->17,15->20) - - Added general spitters physical decrease for levels 1 - 10, (0,0,0,0,2,4,6,8,10,12) - - Added general spitters physical percent for levels 1 - 10, (0,0,0,10,12,12,14,14,15,15) - - Decreased base spawner upgrade from 300 to 250 - - Decreased base worm upgrade from 250 to 200 - - Removed evolution requirement rounding for bobs spawners and ne spawners - Bugfixes: - - Fixed pheromone dispersion when non-cardinal directions receiving pheromone when it shouldn't - - Fixed ai states of migrating and seige when expansion is disabled on the map instead onslaught state happens 10% more in place - - Fixed retreat score function not using correct player multiplier - - Fixed kamikaze flag being removed on merged group if mergee group didn't have kamikaze - ---------------------------------------------------------------------------------------------------- -Version: 0.16.36 -Date: 2. 5. 2019 - Improvements: - - Integrated nocturnal mode with siege, migration, and raiding states so they work together now. - - Swapped scoring function when in siege mode causing the biter lines to actually advance now. - - Added Onslaught AI state where ai gets 2x credits per logic cycle - Tweaks: - - Reverted nest upgrade chance to 0.05% - - Increased Biter credits per destroyed building by 10% after fixing 10x credit bug - - Increased settler unit groups standard deviation by roughly 30% - - Increased death pheromone persistance from 0.975 to 0.995 - Bugfixes: - - Fix for squad movement penalties not be boosted alongside building pheromone causes units to repeat movement into chunks more frequently than needed - - Fix for biter getting 10x credits for destroying buildings causing relentless onslaughts. - - Fix Siege spelling - - Updated retreat chunk scoring function to use negative for player and player base generator - ---------------------------------------------------------------------------------------------------- -Version: 0.16.35 -Date: 2. 1. 2019 - Improvements: - - Added options to toggle new enemy factions - - Randomized base alignment array with map seed so faction distribution changes from map to map - - Added a setting to disable siege ai state, which may have been causing extra non pollution biter movements - Tweaks: - - Added upgrade path for neutral faction to laser resist faction - - Removed upgrade path from electric biters to laser resist faction - - Increased nest upgrade chance from 0.05% to 1.5% - Bugfixes: - - Fix for base upgrade framework to leveling nests correctly due to rounding errors in floating percision for lookup - - Fix for migration toggle setting not preventing the ai migration state - - Fix for entity upgrades allowing for a evolution decrease instead of start from current evolution requirement - ---------------------------------------------------------------------------------------------------- -Version: 0.16.34 -Date: 10. 19. 2018 - Improvements: - - Reworked dispersion to process pheromone in two phases. - - Switch to all adjacent neighbors instead of cardinal neighbors for dispersion - Tweaks: - - Reduced chunks process per interval from 400 to 300 - - Increased building pheromone generator by 10x - - Reduced Retreat pheromone max level from 20000 to 17000 - - Reduced Retreat pheromone min level from 1500 to 1000 - - Increased death generator from 75 to 125 - - Increased movement persistence from 0.875 to 0.975 - - Increased player persistence from 0.98 to 0.97 - - Increased resource persistence from 0.99 to 0.97 - Bugfixes: - - Fix for unit groups not being able to move off of impassable terrain - - Fix for incorrect variable name in interop - ---------------------------------------------------------------------------------------------------- -Version: 0.16.33 -Date: 9. 25. 2018 - Improvements: - - Reworked how death pheromone sticks to terrain and how long it is active for - Optimizations: - - Reduced in memory map footprint increasing save speed - Bugfixes: - - Fix for unit groups getting stuck in random locations - - Fix for unit retreats causing excessive retreats due to inverted comparison - - Fix for unit groups not creating new settlements - ---------------------------------------------------------------------------------------------------- -Version: 0.16.32 -Date: 8. 1. 2018 - Improvements: - - Raiding AI Toggle - toggles the ai raiding parties from outside your pollution cloud - - Added a check for waterfill to trigger pass ability scan on affected chunks - Tweaks: - - Lowered base alignment selection threshold from 0.65 to 0.35, causing more variation in the later stages of the game for factions - - Lowered upgrade entity selection threshold from 0.65 to 0.35, causing more variation in the later stages of the game for spawners and worms - Bugfixes: - - Invalid surface index for creative mode blueprinted tiles - - Surface tile change event wasn't correctly accounting active surface - - Normalized evolution requirements so when starting at a higher enemy level they are placed at the correct starting distances - - Fixed NEE compatibility - - Version upgrade map rebuild will no longer reapply deadzones - - Parenthesis in the wrong spot in pheromone dispersal algorithm - - Moved AI toggles to map settings instead of startup settings - - Changing new biter settings mid game no longer crashes the saves, still can cause entity loss - ---------------------------------------------------------------------------------------------------- -Version: 0.16.31 -Date: 7. 19. 2018 - Bugfixes: - - MAJOR BUG: fixed typo in inverted filter for processing player buildings and enemy nests, which eventually lead to all aliens going inactive due to invalid targets [https://mods.factorio.com/mod/Rampant/discussion/5b48e84e1495c8000be8f961] - - For changing start and end enemy level in relation to scaling value error [https://mods.factorio.com/mod/Rampant/discussion/5b4e37227ffb42000a2dc40d] - ---------------------------------------------------------------------------------------------------- -Version: 0.16.30 -Date: 6. 7. 2018 - Improvements: - - Raiding AI state nows requires an evolution of 0.04 before it can trigger - Bugfixes: - - Fixed fire biter nest size - - Fixed Acid spitter resistances to be more inline with vanilla resistances - - Fixed laser faction not having in-place evolution path from electric biters - - Fixed range of unit levels being off by one, limiting the max units to level 9 only instead of 10 - - Fixed missing wasp worm drone locale entry - Tweaks: - - Increased troll units scale +0.2 - - Increased troll health regeneration for units by ~3x, spawners and worms by ~7x - - Increased the lower attribute bound from 0.7 to 0.85 - - Increased the base distance to evolution index ratio from (1 / 5480) to (1 / 7200) - - Increased the chance that initial base alignment picks a lower tier alignment by 0.15 - - Normalized all enemy faction attributes through the defaults, should be minor unit corrections - Framework: - - Refactored new enemy modules - - Created default attributes for all unit, unit spawner, worms - ---------------------------------------------------------------------------------------------------- -Version: 0.16.29 -Date: 6. 3. 2018 - Tweaks: - - Increased ai state min time from 1 to 7 minutes - - Increased ai state max time from 4 to 17 minutes - - Increased ai temperament min time from 5 to 25 minutes - - Increased ai temperament max time from 15 to 32 minutes - ---------------------------------------------------------------------------------------------------- -Version: 0.16.28 -Date: 6. 1. 2018 - Bugfixes: - - Fixed new enemies setting units and worms to different numbers for variations or tiers causing startup crash - ---------------------------------------------------------------------------------------------------- -Version: 0.16.27 -Date: 5. 23. 2018 - Tweaks: - - Changed spawner faction loot drops from green to orange. - - Changed attack prototype for wasps so it doesn't show up in bonuses bullet gui - Improvements: - - Changes to player accounting to enable multi player forces in a pvp scenario. - - Check for battle_surface_1 & 2 used in pvp and store and use discovered surface index. - ---------------------------------------------------------------------------------------------------- -Version: 0.16.26 -Date: 5. 19. 2018 - Bugfixes: - - Fix for combination of NE and Bobs with non-standard mod settings in relation to alien artifacts. - ---------------------------------------------------------------------------------------------------- -Version: 0.16.25 -Date: 5. 19. 2018 - Improvements: - - Configuration options for scaling biter, spitter, worm, and nests stats by a scaler. - Optimizations: - - Switched passScore per chunk calculation to use the mutli filter query instead of individual calls for tile counts - Bugfixes: - - Changed how mod settings are set in memory to prevent missing unit crashes (https://forums.factorio.com/viewtopic.php?f=190&t=31445&start=320#p362819) - - Cleaned up NE and Bobs detection - - Fixed locale typo in deadZoneFrequency description from with to without(https://forums.factorio.com/viewtopic.php?f=190&t=31445&start=320#p363436) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.24 -Date: 4. 14. 2018 - Tweaks: - - Reduced Inferno biters damage at levels 8+ - Bugfixes: - - Removed all conditional requires in data, data-update, and data-update-final - - ---------------------------------------------------------------------------------------------------- -Version: 0.16.23 -Date: 3. 1. 2018 - Improvements: - - Changed nuclear blast damage to scale with tiers and increased explosion count at higher tiers (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=260#p346147) - Bugfixes: - - Fix for bobs enemies and ne dumb projectiles (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=260#p345778) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.22 -Date: 2. 18. 2018 - Features: - - AI State Migration, where the ai looks for resources patches to setup new bases - - AI State Siege, where the ai does a migration event but also builds towards the player and their base - - Default is vanilla AI is off by default now - Tweaks: - - Death pheromone persistance increased from 0.9 to 0.99 - - Death pheromone per death increased from 600 to 3000 - - Death Retreat threshold switched to linear interpolation between, 2.5 deaths @ 0%, 400 @ 100% evolution - - Increased player pheromone weight for squad movement from 100 to 500 - - Decreased victory scent multipler from 100000 to 10000 - - Increased ai max stored points from 10000 to 12500 - Improvements: - - Added splitters to be detected by enemies - - Added added a recycle waypoint threshold for paths that the unit seems to be stuck in a cycle - Bugfixes: - - Nests and worms not getting counted correctly when upgrading - - Fixed getEntityOverlapping chunks returning more than it should have - Framework: - - Fixed exportaistate visualizer - ---------------------------------------------------------------------------------------------------- -Version: 0.16.21 -Date: 2. 16. 2018 - Improvements: - - All other robots now take damage from biter projectiles and explosions (https://mods.factorio.com/mod/Rampant/discussion/5a81bd380333a5000c939c7f) - - Removed unnecessary squad roll during map processing - Optimizations: - - Switched over to the nth tick functions for logic and processing - ---------------------------------------------------------------------------------------------------- -Version: 0.16.20 -Date: 2. 11. 2018 - Improvements: - - Removed squad movement penalty before disband - - Combat robots now take damage from biter projectiles and explosions - - Spawner biters are now put into groups after they are spawned - - Changed pheromone spread to no longer take into account water tiles - - Added enemy nests to the resource pheromone field as a negative weight - Bugfixes: - - Removed Deadzone nests and worms from the internal memory map - - Fix for unit spawner scaling based on tier (Existing saves will have spawners overlap due to scale increase) - - Removed movement from spawner egg sacks - - Fixed local of worm spawner eggs - Tweaks: - - Increased damage spawner spitters take when shooting - - Increased resource persistance from 0.9 to 0.99 - - Increased base and resource dispersal from 0.3 to 0.35 - - Increased resource generation range from a min of 90 to a min of 900 - - Adjusted unit spawner collision and selection box - - Reduced spawner biter size - Optimizations: - - Added property garbage collection for certain chunk properties - Framework: - - Fixed visualizer selection - ---------------------------------------------------------------------------------------------------- -Version: 0.16.19 -Date: 2. 09. 2018 - Features: - - Blockable projectiles, most projectiles will be stop by walls and other objects - - Rocket launches now agitate biters - - Added Raiding phase where for a short period of time the ai triggers based on player base proximity for an attack wave to form - Improvements: - - Switched linear tier generation from rounding using ceiling to nearest number - - Spawner faction spitters now degrade when attacking and check buildability for units to prevent infinite biter masses when attacking - - Added a random roll to form biters during map processing to cause a more spread out squad formations - Bugfixes: - - Added check for null group (https://github.com/veden/Rampant/issues/16) - - Added check for null alignment table (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=240#p342122) - - Fix for adaptive factions only adapting one chunk of each faction instead of the whole faction - Tweaks: - - Changed Spawner baseline evolution requirement from 60 to 70% - Framework: - - Added interop function for registering unit groups from other mods for Rampant AI management - - ---------------------------------------------------------------------------------------------------- -Version: 0.16.18 -Date: 2. 05. 2018 - Bugfixes: - - Fixed the enemy naming so the enemy tiers can be changed without losing enemies (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=240#p340944) - - Fixed bob enemies load error (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=240#p340897) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.17 -Date: 2. 02. 2018 - Features: - - Added the Wasp faction, an enemy that throws smaller flying enemies - - Added the Spawner faction, an enemy that throws egg sack that make biters - Improvements: - - Added setting to turn off most of the friendly fire for worm and spitter splash damage - - Changed electric biters to target multiple entities with their beams at a time - - Changed electric worms to shoot a projectile that explodes into an electrical cluster - - Added settings for controlling what tier enemies start and end at - - Changed laser spitters and worms to shoot a projectile that explodes into an laser cluster - Bugfixes: - - Added laser resistance to laser worms - ---------------------------------------------------------------------------------------------------- -Version: 0.16.16 -Date: 1. 31. 2018 - Improvements: - - Added support for NE Buildings artifacts - - Switched biter clump scanner to chunk based search for roughly constant performance - Bugfixes: - - Potential desync fix relating to squads - - unitGroup being nil (https://mods.factorio.com/mod/Rampant/discussion/5a72832d3b14f30009910dce) - - Squads not being deallocated for chunks when group is no longer valid - - Fix for 5 tier of units resulted in only the larva class - Tweaks: - - Increased player base pheromone generation by 10 times - - Increased retreat threshold max from 10000 to 18000 - - Increased the spread of player base pheromone from 0.25 to 0.30 (this is only for pathfinding) - - Increased the generation of player pheromone from 150 to 300 - - Increased the death pheromone from enemys from 500 to 600 - - Increased the player aggro distance from 4 chunks to just over 5 chunks - Framework: - - Changing squads on a chunk to a map instead of an array - ---------------------------------------------------------------------------------------------------- -Version: 0.16.15 -Date: 1. 29. 2018 - Bugfixes: - - Fixed NE and bobs integration - Tweaks: - - Increased base processing passes from every 5 to 2 seconds - ---------------------------------------------------------------------------------------------------- -Version: 0.16.14 -Date: 1. 28. 2018 - Bugfixes: - - Fixed inverted check for bobs and ne (https://mods.factorio.com/mod/Rampant/discussion/5a6ec83c1650e7000ee173b2) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.13 -Date: 1. 28. 2018 - Bugfixes: - - Fixed load error for mod dependencies (https://github.com/veden/Rampant/issues/15) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.12 -Date: 1. 28. 2018 - Bugfixes: - - Fixed an error where item could be nil (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=240#p339033) - Improvements: - - Added support for bobs and NE artifacts - - Added options to include Bobs or NE as factions - ---------------------------------------------------------------------------------------------------- -Version: 0.16.11 -Date: 1. 27. 2018 - Bugfixes: - - A a null check for nil'ed squad groups (https://mods.factorio.com/mod/Rampant/discussion/5a6d09cb9a95f7000b165865) - Improvements: - - Added setting options for changing tiers and variations to allow for a smaller memory footprint - ---------------------------------------------------------------------------------------------------- -Version: 0.16.10 -Date: 1. 27. 2018 - Bugfixes: - - Fixed missing function in surfaceTileChange call (https://mods.factorio.com/mod/Rampant/discussion/5a6cf2ff68436500096b638b) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.9 -Date: 1. 27. 2018 - Bugfixes: - - Fixed uninitialized kamikazeThreshold - - Fixed that deadzones wouldn't expire allowing for resettling - ---------------------------------------------------------------------------------------------------- -Version: 0.16.8 -Date: 1. 26. 2018 - Bugfixes: - - Fixed on_tick empty interval (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=220#p338531) - ---------------------------------------------------------------------------------------------------- -Version: 0.16.7 -Date: 1. 26. 2018 - Improvements: - - Reduced the number of trivial smoke created to 4 from ~20 - Tweaks: - - Turned off new enemies by default - - Set default number of enemy variations per tier to 1 - ---------------------------------------------------------------------------------------------------- -Version: 0.16.6 -Date: 1. 25. 2018 - Features: - - Generated enemies for a large variety of things to battle - - Evolving bases now get stronger over time and specialize their units - - Creates areas clear of biters - Bugfixes: - - Fixed a cause where squads could get stuck on hard to pass terrain - Tweaks: - - Increased squad movement penalty before removal from 8000 to 10000 - ---------------------------------------------------------------------------------------------------- -Version: 0.16.5 -Date: 1. 24. 2018 - Bugfixes: - - Fix from Pxanych for calculatekamikazethreshold passing table instead of a number - ---------------------------------------------------------------------------------------------------- -Version: 0.16.4 -Date: 1. 23. 2018 - Bugfixes: - - Fix for invalid ai max squad variable reference - ---------------------------------------------------------------------------------------------------- -Version: 0.16.3 -Date: 1. 13. 2018 - Bugfixes: - - Fixed creative mode tile wand robot error (https://forums.factorio.com/viewtopic.php?f=94&t=31445&start=220&hilit=rampant#p335574) - - Fix from CyaNox for build tile positions to array of tiles change in factorio 0.16.17 - Improvements: - - Removed squad limit - - Squads converted from vanilla control receive immediate kamikaze roll - - Units not under a unit group, now get a kamikaze roll before being put into a retreating squad - Optimizations: - - Reworked squad regrouping to be surrounding chunks instead comparing against master list - Framework: - - Add squads to chunk map for faster location sensitive lookups - ---------------------------------------------------------------------------------------------------- -Version: 0.16.2 -Date: 1. 2. 2018 - Bugfixes: - - Fixed invalid function call due to a function renaming - ---------------------------------------------------------------------------------------------------- -Version: 0.16.1 -Date: 1. 1. 2018 - Features: - - Artillery shell impacts cause biter squads to form and prevents the single file line of retaliation - - Unit spawners now rally troops when they die - Improvements: - - Cliffs and impassable areas due to object density have been added to the pathfinder - - Terrain that is dynamically altered (landfilled, cleared of trees, cleared of cliffs) will be accounted for now - - Added artillery turret to buildings that emit pheromones - - Increased kamikaze frequency by increasing the chance to roll for Kamikaze from 70% to 100% - Optimizations: - - Switch scanning for cliffs, resources, and tiles to event based instead of polling - - Reduced number of table allocations when working with squads - Bugfixes: - - fixed changelog so it shows up in-game interface - - Added checks for correct surface before processing build events - Framework: - - Created visualler for viewing internal Rampant ai game state - ---------------------------------------------------------------------------------------------------- -Version: 0.16.0 -Date: 13. 12. 2017 - Tweaks: - - Updated info.json - Bugfixes: - - Fixed broken icon size prototypes - - Fixed create-smoke calls - - Fixed perimeter to radius - - Fixed smoke - - Fixed missing fire tile properties diff --git a/Rampant_3.1.2/control.lua b/Rampant_3.1.2/control.lua deleted file mode 100644 index d9f95872..00000000 --- a/Rampant_3.1.2/control.lua +++ /dev/null @@ -1,1157 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - --- imports - -local chunkPropertyUtils = require("libs/ChunkPropertyUtils") -local unitUtils = require("libs/UnitUtils") -local baseUtils = require("libs/BaseUtils") -local mapUtils = require("libs/MapUtils") -local mathUtils = require("libs/MathUtils") -local unitGroupUtils = require("libs/UnitGroupUtils") -local chunkProcessor = require("libs/ChunkProcessor") -local mapProcessor = require("libs/MapProcessor") -local constants = require("libs/Constants") -local pheromoneUtils = require("libs/PheromoneUtils") -local squadDefense = require("libs/SquadDefense") -local squadAttack = require("libs/SquadAttack") -local aiAttackWave = require("libs/AIAttackWave") -local aiPlanning = require("libs/AIPlanning") -local tests = require("tests") -local chunkUtils = require("libs/ChunkUtils") -local upgrade = require("Upgrade") -local aiPredicates = require("libs/AIPredicates") -local stringUtils = require("libs/StringUtils") -local queryUtils = require("libs/QueryUtils") - --- constants - -local TICKS_A_MINUTE = constants.TICKS_A_MINUTE -local COMMAND_TIMEOUT = constants.COMMAND_TIMEOUT - -local RECOVER_NEST_COST = constants.RECOVER_NEST_COST -local RECOVER_WORM_COST = constants.RECOVER_WORM_COST - -local RETREAT_GRAB_RADIUS = constants.RETREAT_GRAB_RADIUS - -local RETREAT_SPAWNER_GRAB_RADIUS = constants.RETREAT_SPAWNER_GRAB_RADIUS - -local UNIT_DEATH_POINT_COST = constants.UNIT_DEATH_POINT_COST - -local MAX_HIVE_TTL = constants.MAX_HIVE_TTL -local MIN_HIVE_TTL = constants.MIN_HIVE_TTL -local DEV_HIVE_TTL = constants.DEV_HIVE_TTL - --- imported functions - -local planning = aiPlanning.planning - -local addBasesToAllEnemyStructures = chunkUtils.addBasesToAllEnemyStructures - -local setPointAreaInQuery = queryUtils.setPointAreaInQuery -local setPositionInQuery = queryUtils.setPositionInQuery - -local nextMap = mapUtils.nextMap - -local distortPosition = mathUtils.distortPosition -local linearInterpolation = mathUtils.linearInterpolation -local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG -local prepMap = upgrade.prepMap - -local processBaseAIs = aiPlanning.processBaseAIs - -local registerEnemyBaseStructure = chunkUtils.registerEnemyBaseStructure - -local queueGeneratedChunk = mapUtils.queueGeneratedChunk -local isRampantSetting = stringUtils.isRampantSetting - -local processPendingUpgrades = chunkProcessor.processPendingUpgrades -local canMigrate = aiPredicates.canMigrate - -local squadDispatch = squadAttack.squadDispatch - -local cleanUpMapTables = mapProcessor.cleanUpMapTables - -local positionToChunkXY = mapUtils.positionToChunkXY - -local processVengence = mapProcessor.processVengence -local processAttackWaves = mapProcessor.processAttackWaves - -local processStaticMap = mapProcessor.processStaticMap - -local disperseVictoryScent = pheromoneUtils.disperseVictoryScent - -local getChunkByPosition = mapUtils.getChunkByPosition - -local removeChunkFromMap = mapUtils.removeChunkFromMap -local getChunkByXY = mapUtils.getChunkByXY - -local entityForPassScan = chunkUtils.entityForPassScan - -local processPendingChunks = chunkProcessor.processPendingChunks -local processScanChunks = chunkProcessor.processScanChunks - -local processMap = mapProcessor.processMap -local processPlayers = mapProcessor.processPlayers -local scanEnemyMap = mapProcessor.scanEnemyMap -local scanPlayerMap = mapProcessor.scanPlayerMap -local scanResourceMap = mapProcessor.scanResourceMap - -local processNests = mapProcessor.processNests - -local rallyUnits = aiAttackWave.rallyUnits - -local recycleBases = baseUtils.recycleBases - -local deathScent = pheromoneUtils.deathScent -local victoryScent = pheromoneUtils.victoryScent - -local createSquad = unitGroupUtils.createSquad - -local createBase = baseUtils.createBase -local findNearbyBaseByPosition = chunkPropertyUtils.findNearbyBaseByPosition -local findNearbyBase = chunkPropertyUtils.findNearbyBase - -local processActiveNests = mapProcessor.processActiveNests - -local removeDrainPylons = chunkPropertyUtils.removeDrainPylons -local getDrainPylonPair = chunkPropertyUtils.getDrainPylonPair - -local createDrainPylon = unitUtils.createDrainPylon - -local isDrained = chunkPropertyUtils.isDrained -local setDrainedTick = chunkPropertyUtils.setDrainedTick -local getDeathGeneratorRating = chunkPropertyUtils.getDeathGeneratorRating - -local retreatUnits = squadDefense.retreatUnits - -local accountPlayerEntity = chunkUtils.accountPlayerEntity -local unregisterEnemyBaseStructure = chunkUtils.unregisterEnemyBaseStructure -local makeImmortalEntity = chunkUtils.makeImmortalEntity - -local registerResource = chunkUtils.registerResource -local unregisterResource = chunkUtils.unregisterResource - -local cleanSquads = squadAttack.cleanSquads - -local upgradeEntity = baseUtils.upgradeEntity -local rebuildNativeTables = baseUtils.rebuildNativeTables - -local tRemove = table.remove - -local sFind = string.find - --- local references to global - -local universe -- manages the chunks that make up the game universe - --- hook functions - -local function onIonCannonFired(event) - --[[ - event.force, event.surface, event.player_index, event.position, event.radius - --]] - local map = universe.maps[event.surface.index] - if not map then - return - end - - local chunk = getChunkByPosition(map, event.position) - if (chunk ~= -1) then - local base = findNearbyBase(map, chunk) - if base then - base.ionCannonBlasts = base.ionCannonBlasts + 1 - rallyUnits(chunk, map, event.tick, base) - base.unitPoints = base.unitPoints + 4000 - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. 4000 .. ". [Ion Cannon] Total: " .. - string.format("%.2f", base.unitPoints)) - end - end - end -end - -local function onAbandonedRuins(event) - local entity = event.entity - if entity.valid and (entity.force.name ~= "enemy") then - local map = universe.maps[entity.surface.index] - if not map then - return - end - accountPlayerEntity(entity, map, true) - end -end - -local function hookEvents() - if settings.startup["ion-cannon-radius"] ~= nil then - script.on_event(remote.call("orbital_ion_cannon", "on_ion_cannon_fired"), - onIonCannonFired) - end - if settings.global["AbandonedRuins-set"] ~= nil then - script.on_event(remote.call("AbandonedRuins", "get_on_entity_force_changed_event"), - onAbandonedRuins) - end -end - -local function onLoad() - universe = global.universe - - hookEvents() -end - -local function onChunkGenerated(event) - -- queue generated chunk for delayed processing, queuing is required because - -- some mods (RSO) mess with chunk as they are generated, which messes up the - -- scoring. - queueGeneratedChunk(universe, event) -end - -local function onModSettingsChange(event) - - if not isRampantSetting(event.setting) then - return - end - - universe.safeEntities["curved-rail"] = settings.global["rampant--safeBuildings-curvedRail"].value - universe.safeEntities["straight-rail"] = settings.global["rampant--safeBuildings-straightRail"].value - universe.safeEntities["rail-signal"] = settings.global["rampant--safeBuildings-railSignals"].value - universe.safeEntities["rail-chain-signal"] = settings.global["rampant--safeBuildings-railChainSignals"].value - universe.safeEntities["train-stop"] = settings.global["rampant--safeBuildings-trainStops"].value - universe.safeEntities["lamp"] = settings.global["rampant--safeBuildings-lamps"].value - - universe.safeEntities["big-electric-pole"] = settings.global["rampant--safeBuildings-bigElectricPole"].value - - universe.safeEntities["big-electric-pole"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["big-electric-pole-2"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["big-electric-pole-3"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["big-electric-pole-4"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["lighted-big-electric-pole-4"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["lighted-big-electric-pole-3"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["lighted-big-electric-pole-2"] = universe.safeEntities["big-electric-pole"] - universe.safeEntities["lighted-big-electric-pole"] = universe.safeEntities["big-electric-pole"] - - universe["temperamentRateModifier"] = settings.global["rampant--temperamentRateModifier"].value - universe["baseDistanceModifier"] = settings.global["rampant--baseDistanceModifier"].value - universe["printBaseAdaptation"] = settings.global["rampant--printBaseAdaptation"].value - universe["adaptationModifier"] = settings.global["rampant--adaptationModifier"].value - - universe["raidAIToggle"] = settings.global["rampant--raidAIToggle"].value - universe["siegeAIToggle"] = settings.global["rampant--siegeAIToggle"].value - universe["attackPlayerThreshold"] = settings.global["rampant--attackPlayerThreshold"].value - universe["attackUsePlayer"] = settings.global["rampant--attackWaveGenerationUsePlayerProximity"].value - - universe["attackWaveMaxSize"] = settings.global["rampant--attackWaveMaxSize"].value - universe["aiNocturnalMode"] = settings.global["rampant--permanentNocturnal"].value - universe["aiPointsScaler"] = settings.global["rampant--aiPointsScaler"].value - - universe["aiPointsPrintGainsToChat"] = settings.global["rampant--aiPointsPrintGainsToChat"].value - universe["aiPointsPrintSpendingToChat"] = settings.global["rampant--aiPointsPrintSpendingToChat"].value - universe["printBaseUpgrades"] = settings.global["rampant--printBaseUpgrades"].value - universe["PRINT_BASE_SETTLING"] = settings.global["rampant--printBaseSettling"].value - - universe["enabledMigration"] = universe.expansion and settings.global["rampant--enableMigration"].value - universe["peacefulAIToggle"] = settings.global["rampant--peacefulAIToggle"].value - universe["printAIStateChanges"] = settings.global["rampant--printAIStateChanges"].value - universe["debugTemperament"] = settings.global["rampant--debugTemperament"].value - - universe["AI_MAX_SQUAD_COUNT"] = settings.global["rampant--maxNumberOfSquads"].value - universe["AI_MAX_BUILDER_COUNT"] = settings.global["rampant--maxNumberOfBuilders"].value - universe["AI_MAX_VANILLA_SQUAD_COUNT"] = universe["AI_MAX_SQUAD_COUNT"] * 0.65 - universe["AI_MAX_VANILLA_BUILDER_COUNT"] = universe["AI_MAX_BUILDER_COUNT"] * 0.65 - universe["MAX_BASE_MUTATIONS"] = settings.global["rampant--max-base-mutations"].value - - universe["initialPeaceTime"] = settings.global["rampant--initialPeaceTime"].value * TICKS_A_MINUTE - universe["printAwakenMessage"] = settings.global["rampant--printAwakenMessage"].value - - return true -end - -local function onConfigChanged() - local version = upgrade.attempt(universe) - if version then - if not universe then - universe = global.universe - end - end - - onModSettingsChange({setting="rampant--"}) - - universe["ENEMY_SEED"] = settings.startup["rampant--enemySeed"].value - universe["ENEMY_VARIATIONS"] = settings.startup["rampant--newEnemyVariations"].value - universe["NEW_ENEMIES"] = settings.startup["rampant--newEnemies"].value - - if universe.NEW_ENEMIES then - rebuildNativeTables(universe, universe.random) - else - universe.buildingHiveTypeLookup = {} - universe.buildingHiveTypeLookup["biter-spawner"] = "biter-spawner" - universe.buildingHiveTypeLookup["spitter-spawner"] = "spitter-spawner" - universe.buildingHiveTypeLookup["small-worm-turret"] = "turret" - universe.buildingHiveTypeLookup["medium-worm-turret"] = "turret" - universe.buildingHiveTypeLookup["big-worm-turret"] = "turret" - universe.buildingHiveTypeLookup["behemoth-worm-turret"] = "turret" - end - - -- not a completed implementation needs if checks to use all forces - -- both in the data stage, commands, and if then logic - local enemyForces = { - ["enemy"]=true - } - - local npcForces = { - ["neutral"]=true - } - - if game.active_mods["AbandonedRuins"] then - npcForces["AbandonedRuins:enemy"] = true - end - - upgrade.setCommandForces(universe, npcForces, enemyForces) - - if not universe.maps then - universe.maps = {} - end - for _,surface in pairs(game.surfaces) do - if not universe.maps[surface.index] then - prepMap(universe, surface) - end - end - addBasesToAllEnemyStructures(universe, game.tick) - - if not universe.ranIncompatibleMessage and universe.newEnemies and - (game.active_mods["bobenemies"] or game.active_mods["Natural_Evolution_Enemies"]) then - universe.ranIncompatibleMessage = true - game.print({"description.rampant-bobs-nee-newEnemies"}) - end -end - -local function onBuild(event) - local entity = event.created_entity or event.entity - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - if (entity.type == "resource") and (entity.force.name == "neutral") then - registerResource(entity, map) - else - accountPlayerEntity(entity, map, true) - if universe.safeEntities[entity.type] or universe.safeEntities[entity.name] then - entity.destructible = false - end - end - end -end - -local function onMine(event) - local entity = event.entity - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - accountPlayerEntity(entity, map, false) - end -end - -local function onDeath(event) - local entity = event.entity - if not entity.valid then - return - end - local surface = entity.surface - local map = universe.maps[surface.index] - if not map then - return - end - local entityForceName = entity.force.name - if (entityForceName == "neutral") then - if (entity.name == "cliff") then - entityForPassScan(map, entity) - end - return - end - local cause = event.cause - local causedByEnemyForce = event.force and (event.force.name == "enemy") - local tick = event.tick - local entityType = entity.type - local entityPosition = entity.position - local damageTypeName = event.damage_type and event.damage_type.name - local chunk = getChunkByPosition(map, entityPosition) - local base - - if entityForceName == "enemy" then - if entityType ~= "unit" then - if getDrainPylonPair(map, entity.unit_number) then - removeDrainPylons(map, entity.unit_number) - else - unregisterEnemyBaseStructure(map, entity, damageTypeName) - end - else - local group = entity.unit_group - if group then - local squad = universe.groupNumberToSquad[group.group_number] - if damageTypeName and squad then - base = squad.base - end - end - end - - if (chunk ~= -1) then - deathScent(map, chunk) - - if not base then - base = findNearbyBase(map, chunk) - end - - local artilleryBlast = (cause and ((cause.type == "artillery-wagon") or (cause.type == "artillery-turret"))) - if (entityType == "unit") and not universe.entitySkipCountLookup[entity.name] then - if base then - base.lostEnemyUnits = base.lostEnemyUnits + 1 - if damageTypeName then - base.damagedBy[damageTypeName] = (base.damagedBy[damageTypeName] or 0) + 0.01 - base.deathEvents = base.deathEvents + 1 - end - base.unitPoints = base.unitPoints - UNIT_DEATH_POINT_COST - if universe.aiPointsPrintSpendingToChat then - game.print(map.surface.name .. ": Points: -" .. UNIT_DEATH_POINT_COST .. ". [Unit Lost] Total: " .. string.format("%.2f", base.unitPoints)) - end - if (universe.random() < universe.rallyThreshold) and not surface.peaceful_mode then - rallyUnits(chunk, map, tick, base) - end - if artilleryBlast then - base.artilleryBlasts = base.artilleryBlasts + 1 - end - end - - if (getDeathGeneratorRating(map, chunk) < universe.retreatThreshold) and cause and cause.valid then - retreatUnits(chunk, - cause, - map, - tick, - (artilleryBlast and RETREAT_SPAWNER_GRAB_RADIUS) or RETREAT_GRAB_RADIUS) - end - elseif universe.buildingHiveTypeLookup[entity.name] or - (entityType == "unit-spawner") or - (entityType == "turret") - then - if base then - if (entityType == "unit-spawner") then - base.unitPoints = base.unitPoints + RECOVER_NEST_COST - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. RECOVER_NEST_COST .. - ". [Nest Lost] Total: " .. string.format("%.2f", base.unitPoints)) - end - elseif (entityType == "turret") then - base.unitPoints = base.unitPoints + RECOVER_WORM_COST - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. RECOVER_WORM_COST .. - ". [Worm Lost] Total: " .. string.format("%.2f", base.unitPoints)) - end - end - rallyUnits(chunk, map, tick, base) - if artilleryBlast then - base.artilleryBlasts = base.artilleryBlasts + 1 - end - end - - if cause and cause.valid then - retreatUnits(chunk, - cause, - map, - tick, - RETREAT_SPAWNER_GRAB_RADIUS) - end - end - end - else - local creditNatives = false - if causedByEnemyForce then - creditNatives = true - local drained = false - if chunk ~= -1 then - victoryScent(map, chunk, entityType) - drained = (entityType == "electric-turret") and isDrained(map, chunk, tick) - if cause and cause.type == "unit" then - local group = cause.unit_group - if group and group.valid then - local squad = universe.groupNumberToSquad[group.group_number] - if squad then - base = squad.base - end - end - end - if not base then - base = findNearbyBase(map, chunk) - end - end - - if cause or drained then - createDrainPylon(map, cause, entity, entityType) - end - end - if creditNatives and (universe.safeEntities[entityType] or universe.safeEntities[entity.name]) - then - makeImmortalEntity(surface, entity) - else - accountPlayerEntity(entity, map, false, base) - end - end -end - -local function onEnemyBaseBuild(event) - local entity = event.entity - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - map.activeSurface = true - local chunk = getChunkByPosition(map, entity.position) - if (chunk ~= -1) then - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, - chunk, - event.tick) - end - - registerEnemyBaseStructure(map, entity, base) - - if universe.NEW_ENEMIES then - upgradeEntity(entity, - base, - map, - nil, - true, - true) - end - else - local x,y = positionToChunkXY(entity.position) - onChunkGenerated({ - surface = entity.surface, - tick = event.tick, - area = { - left_top = { - x = x, - y = y - } - } - }) - end - end -end - -local function processSurfaceTile(map, position, chunks, tick) - local chunk = getChunkByPosition(map, position) - - if (chunk ~= -1) then - if not map.universe.chunkToPassScan[chunk.id] then - map.universe.chunkToPassScan[chunk.id] = { - map=map, - chunk=chunk - } - end - else - local x,y = positionToChunkXY(position) - local addMe = true - for ci=1,#chunks do - local c = chunks[ci] - if (c.x == x) and (c.y == y) then - addMe = false - break - end - end - if addMe then - local chunkXY = {x=x,y=y} - chunks[#chunks+1] = chunkXY - onChunkGenerated({area = { left_top = chunkXY }, - tick = tick, - surface = map.surface}) - end - end -end - -local function onSurfaceTileChange(event) - local surfaceIndex = event.surface_index or (event.robot and event.robot.surface and event.robot.surface.index) - local map = universe.maps[surfaceIndex] - if not map then - return - end - local chunks = {} - local tiles = event.tiles - if event.tile then - if ((event.tile.name == "landfill") or sFind(event.tile.name, "water")) then - for i=1,#tiles do - processSurfaceTile(map, tiles[i].position, chunks, event.tick) - end - end - else - for i=1,#tiles do - local tile = tiles[i] - if (tile.name == "landfill") or sFind(tile.name, "water") then - processSurfaceTile(map, tiles[i].position, chunks, event.tick) - end - end - end -end - -local function onResourceDepleted(event) - local entity = event.entity - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - unregisterResource(entity, map) - end -end - -local function onRobotCliff(event) - local entity = event.robot - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - if (event.item.name == "cliff-explosives") then - entityForPassScan(map, event.cliff) - end - end -end - -local function onUsedCapsule(event) - local surface = game.players[event.player_index].surface - local map = universe.maps[surface.index] - if not map then - return - end - if (event.item.name == "cliff-explosives") then - setPointAreaInQuery(universe.oucCliffQuery, event.position, 0.75) - local cliffs = surface.find_entities_filtered(universe.oucCliffQuery) - for i=1,#cliffs do - entityForPassScan(map, cliffs[i]) - end - end -end - -local function onRocketLaunch(event) - local entity = event.rocket_silo or event.rocket - if entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - local chunk = getChunkByPosition(map, entity.position) - if (chunk ~= -1) then - local base = findNearbyBase(map, chunk) - if base then - base.rocketLaunched = base.rocketLaunched + 1 - base.unitPoints = base.unitPoints + 5000 - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. 5000 .. ". [Rocket Launch] Total: " .. string.format("%.2f", base.unitPoints)) - end - end - end - end -end - -local function onEntitySpawned(entity, tick) - if universe.NEW_ENEMIES and entity.valid then - local map = universe.maps[entity.surface.index] - if not map then - return - end - if universe.buildingHiveTypeLookup[entity.name] then - map.activeSurface = true - local disPos = distortPosition(universe.random, entity.position, 8) - - local chunk = getChunkByPosition(map, disPos) - if (chunk ~= -1) then - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, - chunk, - tick) - end - - local meanTTL = linearInterpolation(universe.evolutionLevel, MAX_HIVE_TTL, MIN_HIVE_TTL) - - upgradeEntity(entity, - base, - map, - disPos, - true, - true, - tick + gaussianRandomRangeRG(meanTTL, - DEV_HIVE_TTL, - MIN_HIVE_TTL, - MAX_HIVE_TTL, - universe.random)) - else - local x,y = positionToChunkXY(entity.position) - onChunkGenerated({ - surface = entity.surface, - tick = tick, - area = { - left_top = { - x = x, - y = y - } - } - }) - entity.destroy() - end - end - end -end - -local function onTriggerEntityCreated(event) - if (event.effect_id == "hive-spawned--rampant") then - onEntitySpawned(event.source_entity, event.tick) - elseif (event.effect_id == "rampant-drain-trigger") then - local entity = event.target_entity - if (entity and entity.valid) then - local map = universe.maps[event.surface_index] - if not map then - return - end - local chunk = getChunkByPosition(map, entity.position) - if (chunk ~= -1) then - setDrainedTick(map, chunk, event.tick) - end - elseif (event.target_position) then - local map = universe.maps[event.surface_index] - if not map then - return - end - local chunk = getChunkByPosition(map, event.target_position) - if (chunk ~= -1) then - setDrainedTick(map, chunk, event.tick) - end - end - end -end - -local function onInit() - global.universe = {} - - universe = global.universe - - hookEvents() - onConfigChanged() -end - -local function onUnitGroupCreated(event) - local group = event.group - if (group.force.name ~= "enemy") then - return - end - local surface = group.surface - local squad - if group.is_script_driven then - return - end - local map = universe.maps[surface.index] - if not map then - return - end - map.activeSurface = true - local position = group.position - local chunk = getChunkByPosition(map, position) - local base - if (chunk == -1) then - base = findNearbyBaseByPosition(map, position.x, position.y) - else - base = findNearbyBase(map, chunk) - end - if not base then - group.destroy() - return - end - if not universe.aiNocturnalMode then - local settler = canMigrate(map, base) and - (universe.builderCount < universe.AI_MAX_VANILLA_BUILDER_COUNT) and - (universe.random() < 0.25) - - if not settler and (universe.squadCount >= universe.AI_MAX_VANILLA_SQUAD_COUNT) then - group.destroy() - return - end - - squad = createSquad(nil, map, group, settler, base) - universe.groupNumberToSquad[group.group_number] = squad - - squad.base = base - - if settler then - universe.builderCount = universe.builderCount + 1 - else - universe.squadCount = universe.squadCount + 1 - end - else - if not (surface.darkness > 0.65) then - group.destroy() - return - end - - local settler = canMigrate(map, base) and - (universe.builderCount < universe.AI_MAX_VANILLA_BUILDER_COUNT) and - (universe.random() < 0.25) - - if not settler and (universe.squadCount >= universe.AI_MAX_VANILLA_SQUAD_COUNT) then - group.destroy() - return - end - - squad = createSquad(nil, map, group, settler, base) - universe.groupNumberToSquad[group.group_number] = squad - - squad.base = base - - if settler then - universe.builderCount = universe.builderCount + 1 - else - universe.squadCount = universe.squadCount + 1 - end - end -end - -local function onGroupFinishedGathering(event) - local group = event.group - if not group.valid or (group.force.name ~= "enemy") then - return - end - local map = universe.maps[group.surface.index] - if not map then - return - end - map.activeSurface = true - local squad = universe.groupNumberToSquad[group.group_number] - if squad then - if squad.settler then - if (universe.builderCount <= universe.AI_MAX_BUILDER_COUNT) then - squadDispatch(map, squad, event.tick) - else - group.destroy() - end - else - if (universe.squadCount <= universe.AI_MAX_SQUAD_COUNT) then - squadDispatch(map, squad, event.tick) - else - group.destroy() - end - end - else - local position = group.position - local chunk = getChunkByPosition(map, position) - local base - if chunk == -1 then - base = findNearbyBaseByPosition(map, position.x, position.y) - else - base = findNearbyBase(map, chunk) - end - if not base then - group.destroy() - return - end - local settler = canMigrate(map, base) and - (universe.builderCount < universe.AI_MAX_VANILLA_BUILDER_COUNT) and - (universe.random() < 0.25) - - if not settler and (universe.squadCount >= universe.AI_MAX_VANILLA_SQUAD_COUNT) then - group.destroy() - return - end - - squad = createSquad(nil, map, group, settler, base) - universe.groupNumberToSquad[group.group_number] = squad - if settler then - universe.builderCount = universe.builderCount + 1 - else - universe.squadCount = universe.squadCount + 1 - end - squadDispatch(map, squad, event.tick) - end -end - -local function onForceCreated(event) - if universe.playerForces then - universe.playerForces[#universe.playerForces+1] = event.force.name - end -end - -local function onForceMerged(event) - for i=#universe.playerForces,1,-1 do - if (universe.playerForces[i] == event.source_name) then - tRemove(universe.playerForces, i) - break - end - end -end - -local function onSurfaceCreated(event) - prepMap(universe, game.surfaces[event.surface_index]) -end - -local function onSurfaceDeleted(event) - local surfaceIndex = event.surface_index - if (universe.mapIterator == surfaceIndex) then - universe.mapIterator, universe.activeMap = next(universe.maps, universe.mapIterator) - end - if (universe.processMapAIIterator == surfaceIndex) then - universe.processMapAIIterator = nil - end - universe.maps[surfaceIndex] = nil -end - -local function onSurfaceCleared(event) - onSurfaceDeleted(event) - onSurfaceCreated(event) -end - -local function onChunkDeleted(event) - local surfaceIndex = event.surface_index - local map = universe.maps[surfaceIndex] - if map then - local positions = event.positions - for i=1,#positions do - local position = positions[i] - local x = position.x * 32 - local y = position.y * 32 - local chunk = getChunkByXY(map, x, y) - if chunk ~= -1 then - removeChunkFromMap(map, chunk) - end - end - end -end - -local function onBuilderArrived(event) - local builder = event.group - local usingUnit = false - if not (builder and builder.valid) then - builder = event.unit - if not (builder and builder.valid and builder.force.name == "enemy") then - return - end - usingUnit = true - elseif (builder.force.name ~= "enemy") then - return - end - - local map = universe.maps[builder.surface.index] - if not map then - return - end - map.activeSurface = true - if not usingUnit then - local squad = universe.groupNumberToSquad[builder.group_number] - squad.commandTick = event.tick + COMMAND_TIMEOUT * 10 - end - if universe.PRINT_BASE_SETTLING then - game.print("Settled: [gps=" .. builder.position.x .. "," .. builder.position.y .."]") - end - setPositionInQuery(universe.obaCreateBuildCloudQuery, builder.position) - map.surface.create_entity(universe.obaCreateBuildCloudQuery) -end - --- hooks - -script.on_event(defines.events.on_tick, - function () - local gameRef = game - local tick = gameRef.tick - local pick = tick % 8 - - -- local profiler = game.create_profiler() - - local map = universe.activeMap - if (not map) or (universe.processedChunks > (#map.processQueue * 0.05)) then - universe.processedChunks = 0 - map = nextMap(universe) - universe.activeMap = map - end - - if (pick == 0) then - processPendingChunks(universe, tick) - if map then - recycleBases(universe) - end - cleanUpMapTables(universe, tick) - elseif (pick == 1) then - processPlayers(gameRef.connected_players, universe, tick) - elseif (pick == 2) then - if map then - processMap(map, tick) - end - elseif (pick == 3) then - if map then - processStaticMap(map) - end - disperseVictoryScent(universe) - processVengence(universe) - elseif (pick == 4) then - if map then - scanResourceMap(map, tick) - scanEnemyMap(map, tick) - end - elseif (pick == 5) then - processAttackWaves(universe) - if map then - scanEnemyMap(map, tick) - end - elseif (pick == 6) then - if map then - scanPlayerMap(map, tick) - end - processNests(universe, tick) - elseif (pick == 7) then - processPendingChunks(universe, tick) - processScanChunks(universe) - planning(universe, gameRef.forces.enemy.evolution_factor) - end - - processBaseAIs(universe, tick) - processActiveNests(universe, tick) - processPendingUpgrades(universe, tick) - processPendingUpgrades(universe, tick) - cleanSquads(universe, tick) - - -- game.print({"", "--dispatch4 ", profiler, ", ", pick, ", ", game.tick, " ", universe.random()}) -end) - -script.on_event(defines.events.on_chunk_deleted, onChunkDeleted) -script.on_event(defines.events.on_surface_deleted, onSurfaceDeleted) -script.on_event(defines.events.on_surface_cleared, onSurfaceCleared) -script.on_event(defines.events.on_surface_created, onSurfaceCreated) - -script.on_init(onInit) -script.on_load(onLoad) -script.on_event(defines.events.on_runtime_mod_setting_changed, onModSettingsChange) -script.on_configuration_changed(onConfigChanged) - -script.on_event(defines.events.on_resource_depleted, onResourceDepleted) -script.on_event({defines.events.on_player_built_tile, - defines.events.on_robot_built_tile, - defines.events.script_raised_set_tiles}, onSurfaceTileChange) - -script.on_event(defines.events.on_player_used_capsule, onUsedCapsule) - -script.on_event(defines.events.on_script_trigger_effect, onTriggerEntityCreated) - -script.on_event(defines.events.on_pre_robot_exploded_cliff, onRobotCliff) - -script.on_event(defines.events.on_biter_base_built, onEnemyBaseBuild) -script.on_event({defines.events.on_player_mined_entity, - defines.events.on_robot_mined_entity}, onMine) - -script.on_event({defines.events.on_built_entity, - defines.events.on_robot_built_entity, - defines.events.script_raised_built, - defines.events.script_raised_revive}, onBuild) - -script.on_event(defines.events.on_rocket_launched, onRocketLaunch) -script.on_event({defines.events.on_entity_died, - defines.events.script_raised_destroy}, onDeath) -script.on_event(defines.events.on_chunk_generated, onChunkGenerated) -script.on_event(defines.events.on_unit_group_created, onUnitGroupCreated) -script.on_event(defines.events.on_force_created, onForceCreated) -script.on_event(defines.events.on_forces_merged, onForceMerged) -script.on_event(defines.events.on_unit_group_finished_gathering, onGroupFinishedGathering) - -script.on_event(defines.events.on_build_base_arrived, onBuilderArrived) - --- testing - -remote.add_interface("rampantTests", - { - pheromoneLevels = tests.pheromoneLevels, - activeSquads = tests.activeSquads, - entitiesOnPlayerChunk = tests.entitiesOnPlayerChunk, - findNearestPlayerEnemy = tests.findNearestPlayerEnemy, - morePoints = tests.morePoints, - aiStats = tests.aiStats, - dumpEnvironment = tests.dumpEnvironment, - fillableDirtTest = tests.fillableDirtTest, - tunnelTest = tests.tunnelTest, - dumpNatives = tests.dumpatives, - createEnemy = tests.createEnemy, - attackOrigin = tests.attackOrigin, - cheatMode = tests.cheatMode, - gaussianRandomTest = tests.gaussianRandomTest, - reveal = tests.reveal, - showMovementGrid = tests.showMovementGrid, - showBaseGrid = tests.showBaseGrid, - baseStats = tests.baseStats, - mergeBases = tests.mergeBases, - clearBases = tests.clearBases, - getOffsetChunk = tests.getOffsetChunk, - registeredNest = tests.registeredNest, - colorResourcePoints = tests.colorResourcePoints, - entityStats = tests.entityStats, - stepAdvanceTendrils = tests.stepAdvanceTendrils, - unitGroupBuild = tests.unitGroupBuild, - exportAiState = tests.exportAiState(nil), - createEnergyTest = tests.createEnergyTest, - killActiveSquads = tests.killActiveSquads, - scanChunkPaths = tests.scanChunkPaths, - scanEnemy = tests.scanEnemy, - getEnemyStructureCount = tests.getEnemyStructureCount - } -) - -local function rampantSetAIState(event) - if event.parameter then - local target - local baseId - local i = 0 - - for m in string.gmatch(event.parameter, "%d+") do - if i == 0 then - i = i + 1 - target = tonumber(m) - else - baseId = tonumber(m) - end - end - - if target ~= constants.BASE_AI_STATE_PEACEFUL and - target ~= constants.BASE_AI_STATE_AGGRESSIVE and - target ~= constants.BASE_AI_STATE_RAIDING and - target ~= constants.BASE_AI_STATE_MIGRATING and - target ~= constants.BASE_AI_STATE_SIEGE and - target ~= constants.BASE_AI_STATE_ONSLAUGHT - then - game.print(target .. " is not a valid state. /rampantSetAIState ") - return - else - local base = universe.bases[baseId] - if not base then - game.print(baseId .. " is not a valid base. /rampantSetAIState ") - return - end - base.stateAI = target - local surface = base.map.surface - if not surface.valid then - game.print("Base is invalid because surface is invalid") - return - end - game.print("id:" .. baseId .. " on surface:" .. surface.name .. " is now in " .. constants.stateEnglish[base.stateAI]) - end - end -end - -commands.add_command('rampantSetAIState', "", rampantSetAIState) diff --git a/Rampant_3.1.2/data-final-fixes.lua b/Rampant_3.1.2/data-final-fixes.lua deleted file mode 100644 index 4eb675c4..00000000 --- a/Rampant_3.1.2/data-final-fixes.lua +++ /dev/null @@ -1,118 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - -local vanillaBuildings = require("prototypes/buildings/UpdatesVanilla") - -local swarmUtils = require("prototypes/SwarmUtils") - -local constants = require("libs/Constants") - - -if settings.startup["rampant--newEnemies"].value then - swarmUtils.processFactions() - swarmUtils.generateSpawnerProxy(data.raw["unit-spawner"]["neutral-biter-spawner-v1-t10-rampant"].result_units) - - if mods["SchallAlienLoot"] then - local SizeLootRampant = {1, 2, 3, 3, 4, 4, 4, 5, 5, 6} - for _,faction in pairs(constants.FACTION_SET) do - for v=1,settings.startup["rampant--newEnemyVariations"].value do - for factionSize = 1, 10 do - SchallAlienLoot_add_spawner(faction.type.."-hive-v"..v.."-t"..factionSize.."-rampant") - SchallAlienLoot_add_spawner(faction.type.."-spitter-spawner-v"..v.."-t"..factionSize.."-rampant") - SchallAlienLoot_add_spawner(faction.type.."-biter-spawner-v"..v.."-t"..factionSize.."-rampant") - SchallAlienLoot_add_worm(faction.type.."-worm-v"..v.."-t"..factionSize.."-rampant", factionSize) - SchallAlienLoot_add_mover(faction.type.."-spitter-v"..v.."-t"..factionSize.."-rampant", SizeLootRampant[factionSize]) - SchallAlienLoot_add_mover(faction.type.."-biter-v"..v.."-t"..factionSize.."-rampant", SizeLootRampant[factionSize]) - end - end - end - end -else - swarmUtils.generateSpawnerProxy(data.raw["unit-spawner"]["biter-spawner"].result_units) -end - -if settings.startup["rampant--removeBloodParticles"].value then - local explosions = data.raw["explosion"] - - for k,v in pairs(explosions) do - if string.find(k, "blood") then - v["created_effect"] = nil - end - end -end - -if settings.startup["rampant--unitSpawnerBreath"].value then - for _, unitSpawner in pairs(data.raw["unit-spawner"]) do - if (string.find(unitSpawner.name, "hive") or string.find(unitSpawner.name, "biter") or - string.find(unitSpawner.name, "spitter")) then - if not unitSpawner.flags then - unitSpawner.flags = {} - end - unitSpawner.flags[#unitSpawner.flags+1] = "breaths-air" - end - end -end - - -for k, unit in pairs(data.raw["unit"]) do - if (string.find(k, "biter") or string.find(k, "spitter")) and unit.collision_box then - if settings.startup["rampant--enableSwarm"].value then - unit.collision_box = { - {unit.collision_box[1][1] * 0.20, unit.collision_box[1][2] * 0.20}, - {unit.collision_box[2][1] * 0.20, unit.collision_box[2][2] * 0.20} - } - end - - unit.affected_by_tiles = settings.startup["rampant--unitsAffectedByTiles"].value - - unit.ai_settings = { - destroy_when_commands_fail = false, - allow_try_return_to_spawner = true - } - end -end - -if settings.startup["rampant--enableShrinkNestsAndWorms"].value then - for k, unit in pairs(data.raw["unit-spawner"]) do - if (string.find(k, "biter") or string.find(k, "spitter") or string.find(k, "hive")) and unit.collision_box then - unit.collision_box = { - {unit.collision_box[1][1] * 0.50, unit.collision_box[1][2] * 0.50}, - {unit.collision_box[2][1] * 0.50, unit.collision_box[2][2] * 0.50} - } - end - end - - for k, unit in pairs(data.raw["turret"]) do - if string.find(k, "worm") and unit.collision_box then - unit.collision_box = { - {unit.collision_box[1][1] * 0.50, unit.collision_box[1][2] * 0.50}, - {unit.collision_box[2][1] * 0.50, unit.collision_box[2][2] * 0.50} - } - end - end -end - -if settings.startup["rampant--enableFadeTime"].value then - for k, corpse in pairs(data.raw["corpse"]) do - if (string.find(k, "biter") or string.find(k, "spitter") or string.find(k, "hive") or - string.find(k, "worm") or string.find(k, "spawner")) then - corpse.time_before_removed = settings.startup["rampant--unitAndSpawnerFadeTime"].value * 60 - end - end -end - -if settings.startup["rampant--addWallResistanceAcid"].value then - vanillaBuildings.addWallAcidResistance() -end diff --git a/Rampant_3.1.2/data-updates.lua b/Rampant_3.1.2/data-updates.lua deleted file mode 100644 index e9402929..00000000 --- a/Rampant_3.1.2/data-updates.lua +++ /dev/null @@ -1,81 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local vanillaUpdates = require("prototypes/utils/UpdatesVanilla") -local attackBall = require("prototypes/utils/AttackBall") -local constants = require("libs/Constants") - -if settings.startup["rampant--useDumbProjectiles"].value or settings.startup["rampant--newEnemies"].value then - attackBall.generateVanilla() - vanillaUpdates.useDumbProjectiles() -end - -for _, robot in pairs(data.raw["logistic-robot"]) do - -- if not robot.collision_mask then - -- robot.collision_mask = {} - -- end - -- robot.collision_mask[#robot.collision_mask+1] = "layer-13" - - if (settings.startup["rampant--unkillableLogisticRobots"].value) then - robot.resistances = {} - for damageType, _ in pairs(data.raw["damage-type"]) do - robot.resistances[damageType] = { - type = damageType, - percent = 100 - } - end - end -end - -for _, robot in pairs(data.raw["construction-robot"]) do - -- if not robot.collision_mask then - -- robot.collision_mask = {} - -- end - -- robot.collision_mask[#robot.collision_mask+1] = "layer-13" - - if (settings.startup["rampant--unkillableConstructionRobots"].value) then - robot.resistances = {} - for damageType, _ in pairs(data.raw["damage-type"]) do - robot.resistances[damageType] = { - type = damageType, - percent = 100 - } - end - end -end - --- for _, robot in pairs(data.raw["combat-robot"]) do --- if not robot.collision_mask then --- robot.collision_mask = {} --- end --- robot.collision_mask[#robot.collision_mask+1] = "layer-13" --- end - ---[[ - try to make sure new maps use the correct map settings without having to completely load the mod. - done because seeing desync issues with dynamic map-settings changes before re-saving the map. ---]] -local mapSettings = data.raw["map-settings"]["map-settings"] - -mapSettings.max_failed_behavior_count = 3 -- constants.MAX_FAILED_BEHAVIORS - -mapSettings.unit_group.member_disown_distance = constants.UNIT_GROUP_DISOWN_DISTANCE -mapSettings.unit_group.tick_tolerance_when_member_arrives = constants.UNIT_GROUP_TICK_TOLERANCE - -mapSettings.unit_group.max_group_radius = constants.UNIT_GROUP_MAX_RADIUS -mapSettings.unit_group.max_member_speedup_when_behind = constants.UNIT_GROUP_MAX_SPEED_UP -mapSettings.unit_group.max_member_slowdown_when_ahead = constants.UNIT_GROUP_MAX_SLOWDOWN -mapSettings.unit_group.max_group_slowdown_factor = constants.UNIT_GROUP_SLOWDOWN_FACTOR diff --git a/Rampant_3.1.2/data.lua b/Rampant_3.1.2/data.lua deleted file mode 100644 index 55f8c94d..00000000 --- a/Rampant_3.1.2/data.lua +++ /dev/null @@ -1,144 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - --- import - -local colorUtils = require("prototypes/utils/ColorUtils") -local smokeUtils = require("prototypes/utils/SmokeUtils") - --- imported functions - -local makeSmokeSoft = smokeUtils.makeSmokeSoft -local makeSmokeWithGlow = smokeUtils.makeSmokeWithGlow -local makeSmokeWithoutGlow = smokeUtils.makeSmokeWithoutGlow -local makeSmokeAddingFuel = smokeUtils.makeSmokeAddingFuel - -local makeColor = colorUtils.makeColor - --- module code - -makeSmokeSoft({name="the", softSmokeTint=makeColor(0.3, 0.75, 0.3, 0.1)}) -makeSmokeWithGlow({name="the", smokeWithGlowTint=makeColor(0.3, 0.75, 0.3, 0.1)}) -makeSmokeWithoutGlow({name="the", smokeWithoutGlowTint=makeColor(0.3, 0.75, 0.3, 0.1)}) -makeSmokeAddingFuel({name="the"}) - -require("prototypes/buildings/ChunkScanner") - -local attributes = {} - -if not data.raw["corpse"]["acid-splash-purple"] then - data:extend({ - { - type = "corpse", - name = "acid-splash-purple", - flags = {"not-on-map"}, - time_before_removed = 60 * 30, - final_render_layer = "corpse", - splash = - { - { - filename = "__base__/graphics/entity/acid-splash/acid-splash-1.png", - line_length = 8, - direction_count = 1, - width = 106, - height = 116, - frame_count = 26, - shift = util.mul_shift(util.by_pixel(-12, -10), attributes.scale or 1), - tint = attributes.tint, - scale = (attributes.scale or 1), - hr_version = { - filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-1.png", - line_length = 8, - direction_count = 1, - width = 210, - height = 224, - frame_count = 26, - shift = util.mul_shift(util.by_pixel(-12, -8), attributes.scale or 1), - tint = attributes.tint, - scale = 0.5 * (attributes.scale or 1), - } - }, - { - filename = "__base__/graphics/entity/acid-splash/acid-splash-2.png", - line_length = 8, - direction_count = 1, - width = 88, - height = 76, - frame_count = 29, - shift = util.mul_shift(util.by_pixel(-10, -18), attributes.scale or 1), - tint = attributes.tint, - scale = (attributes.scale or 1), - hr_version = { - filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-2.png", - line_length = 8, - direction_count = 1, - width = 174, - height = 150, - frame_count = 29, - shift = util.mul_shift(util.by_pixel(-9, -17), attributes.scale or 1), - tint = attributes.tint, - scale = 0.5 * (attributes.scale or 1), - } - }, - { - filename = "__base__/graphics/entity/acid-splash/acid-splash-3.png", - line_length = 8, - direction_count = 1, - width = 118, - height = 104, - frame_count = 29, - shift = util.mul_shift(util.by_pixel(22, -16), attributes.scale or 1), - tint = attributes.tint, - scale = (attributes.scale or 1), - hr_version = { - filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-3.png", - line_length = 8, - direction_count = 1, - width = 236, - height = 208, - frame_count = 29, - shift = util.mul_shift(util.by_pixel(22, -16), attributes.scale or 1), - tint = attributes.tint, - scale = 0.5 * (attributes.scale or 1), - } - }, - { - filename = "__base__/graphics/entity/acid-splash/acid-splash-4.png", - line_length = 8, - direction_count = 1, - width = 128, - height = 80, - frame_count = 24, - shift = util.mul_shift(util.by_pixel(16, -20), attributes.scale or 1), - tint = attributes.tint, - scale = (attributes.scale or 1), - hr_version = { - filename = "__base__/graphics/entity/acid-splash/hr-acid-splash-4.png", - line_length = 8, - direction_count = 1, - width = 252, - height = 154, - frame_count = 24, - shift = util.mul_shift(util.by_pixel(17, -19), attributes.scale or 1), - tint = attributes.tint, - scale = 0.5 * (attributes.scale or 1), - } - } - }, - splash_speed = 0.03 - } - }) -end diff --git a/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png b/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png deleted file mode 100644 index b05f982a..00000000 Binary files a/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple-shadow.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple.png b/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple.png deleted file mode 100644 index 7356fc44..00000000 Binary files a/Rampant_3.1.2/graphics/acid-projectile-purple/acid-projectile-purple.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/acid-splash-purple/splash-1.png b/Rampant_3.1.2/graphics/acid-splash-purple/splash-1.png deleted file mode 100644 index 38ed48e4..00000000 Binary files a/Rampant_3.1.2/graphics/acid-splash-purple/splash-1.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/acid-splash-purple/splash-2.png b/Rampant_3.1.2/graphics/acid-splash-purple/splash-2.png deleted file mode 100644 index 4092494a..00000000 Binary files a/Rampant_3.1.2/graphics/acid-splash-purple/splash-2.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/acid-splash-purple/splash-3.png b/Rampant_3.1.2/graphics/acid-splash-purple/splash-3.png deleted file mode 100644 index 17835cd3..00000000 Binary files a/Rampant_3.1.2/graphics/acid-splash-purple/splash-3.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/acid-splash-purple/splash-4.png b/Rampant_3.1.2/graphics/acid-splash-purple/splash-4.png deleted file mode 100644 index abd18e81..00000000 Binary files a/Rampant_3.1.2/graphics/acid-splash-purple/splash-4.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/entities/thief/crystal-drain-pole.png b/Rampant_3.1.2/graphics/entities/thief/crystal-drain-pole.png deleted file mode 100644 index 9b090300..00000000 Binary files a/Rampant_3.1.2/graphics/entities/thief/crystal-drain-pole.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/entities/thief/crystal-drain.png b/Rampant_3.1.2/graphics/entities/thief/crystal-drain.png deleted file mode 100644 index d0ee46b9..00000000 Binary files a/Rampant_3.1.2/graphics/entities/thief/crystal-drain.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/entities/tunnel/tunnelEntrance.png b/Rampant_3.1.2/graphics/entities/tunnel/tunnelEntrance.png deleted file mode 100644 index 08f3f5cf..00000000 Binary files a/Rampant_3.1.2/graphics/entities/tunnel/tunnelEntrance.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/icons/thief/crystal-drain-pole.png b/Rampant_3.1.2/graphics/icons/thief/crystal-drain-pole.png deleted file mode 100644 index b6e29846..00000000 Binary files a/Rampant_3.1.2/graphics/icons/thief/crystal-drain-pole.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/icons/thief/crystal-drain.png b/Rampant_3.1.2/graphics/icons/thief/crystal-drain.png deleted file mode 100644 index 1acaf3ab..00000000 Binary files a/Rampant_3.1.2/graphics/icons/thief/crystal-drain.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-inner-corner.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-inner-corner.png deleted file mode 100644 index ac78925c..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-inner-corner.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-outer-corner.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-outer-corner.png deleted file mode 100644 index 5502c613..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-outer-corner.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-side.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-side.png deleted file mode 100644 index d43dee9e..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt-side.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt1.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt1.png deleted file mode 100644 index f6a655ff..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt1.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt2.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt2.png deleted file mode 100644 index 0fc119f3..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt2.png and /dev/null differ diff --git a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt4.png b/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt4.png deleted file mode 100644 index 055fae7f..00000000 Binary files a/Rampant_3.1.2/graphics/tiles/fillableDirt/dirt4.png and /dev/null differ diff --git a/Rampant_3.1.2/info.json b/Rampant_3.1.2/info.json deleted file mode 100644 index 968ca9eb..00000000 --- a/Rampant_3.1.2/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name" : "Rampant", - "factorio_version" : "1.1", - "version" : "3.1.2", - "title" : "Rampant", - "author" : "Veden", - "homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445", - "dependencies" : ["base >= 1.1.36", "? bobenemies", "? Natural_Evolution_Enemies >= 0.17.0", "? Clockwork", "? Kux-OrbitalIonCannon", "? Orbital Ion Cannon", "? ArmouredBiters", "? Krastorio2", "? SchallAlienLoot >= 0.17.6"] -} diff --git a/Rampant_3.1.2/libs/AIAttackWave.lua b/Rampant_3.1.2/libs/AIAttackWave.lua deleted file mode 100644 index 3be8ed3e..00000000 --- a/Rampant_3.1.2/libs/AIAttackWave.lua +++ /dev/null @@ -1,432 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if (aiAttackWaveG) then - return aiAttackWaveG -end -local aiAttackWave = {} - --- imports - -local constants = require("Constants") -local mapUtils = require("MapUtils") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local unitGroupUtils = require("UnitGroupUtils") -local movementUtils = require("MovementUtils") -local mathUtils = require("MathUtils") - --- constants - -local BASE_PHEROMONE = constants.BASE_PHEROMONE -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE - -local AI_SQUAD_COST = constants.AI_SQUAD_COST -local AI_SETTLER_COST = constants.AI_SETTLER_COST -local AI_VENGENCE_SQUAD_COST = constants.AI_VENGENCE_SQUAD_COST - -local COOLDOWN_RALLY = constants.COOLDOWN_RALLY - -local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS - -local CHUNK_SIZE = constants.CHUNK_SIZE - -local RALLY_CRY_DISTANCE = constants.RALLY_CRY_DISTANCE - -local BASE_AI_STATE_SIEGE = constants.BASE_AI_STATE_SIEGE -local BASE_AI_STATE_ONSLAUGHT = constants.BASE_AI_STATE_ONSLAUGHT -local BASE_AI_STATE_RAIDING = constants.BASE_AI_STATE_RAIDING -local BASE_AI_STATE_AGGRESSIVE = constants.BASE_AI_STATE_AGGRESSIVE - --- imported functions - -local calculateKamikazeSettlerThreshold = unitGroupUtils.calculateKamikazeSettlerThreshold -local calculateKamikazeSquadThreshold = unitGroupUtils.calculateKamikazeSquadThreshold - -local positionFromDirectionAndChunk = mapUtils.positionFromDirectionAndChunk - -local getPassable = chunkPropertyUtils.getPassable -local getNestCount = chunkPropertyUtils.getNestCount -local getRaidNestActiveness = chunkPropertyUtils.getRaidNestActiveness -local getNestActiveness = chunkPropertyUtils.getNestActiveness -local getRallyTick = chunkPropertyUtils.getRallyTick -local setRallyTick = chunkPropertyUtils.setRallyTick - -local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG - -local getNeighborChunks = mapUtils.getNeighborChunks -local getChunkByXY = mapUtils.getChunkByXY -local scoreNeighborsForFormation = movementUtils.scoreNeighborsForFormation -local scoreNeighborsForResource = movementUtils.scoreNeighborsForResource -local createSquad = unitGroupUtils.createSquad -local getDeathGeneratorRating = chunkPropertyUtils.getDeathGeneratorRating - -local mCeil = math.ceil - --- module code - -local function settlerWaveScaling(universe) - return mCeil(gaussianRandomRangeRG(universe.settlerWaveSize, - universe.settlerWaveDeviation, - universe.expansionMinSize, - universe.expansionMaxSize, - universe.random)) -end - -local function attackWaveScaling(universe) - return mCeil(gaussianRandomRangeRG(universe.attackWaveSize, - universe.attackWaveDeviation, - 1, - universe.attackWaveUpperBound, - universe.random)) -end - -local function attackWaveValidCandidate(chunk, map, base) - local isValid = getNestActiveness(map, chunk) - if (base.stateAI == BASE_AI_STATE_RAIDING) or - (base.stateAI == BASE_AI_STATE_SIEGE) or - (base.stateAI == BASE_AI_STATE_ONSLAUGHT) - then - isValid = isValid + getRaidNestActiveness(map, chunk) - end - return (isValid > 0) -end - -local function scoreSettlerLocation(map, neighborChunk) - return (getDeathGeneratorRating(map, neighborChunk) * neighborChunk[RESOURCE_PHEROMONE]) + - -neighborChunk[PLAYER_PHEROMONE] -end - -local function scoreSiegeSettlerLocation(map, neighborChunk) - return ((neighborChunk[RESOURCE_PHEROMONE] + - neighborChunk[BASE_PHEROMONE]) * getDeathGeneratorRating(map, neighborChunk)) + - -neighborChunk[PLAYER_PHEROMONE] -end - -local function scoreUnitGroupLocation(map, neighborChunk) - return (neighborChunk[PLAYER_PHEROMONE] + neighborChunk[BASE_PHEROMONE]) * - getDeathGeneratorRating(map, neighborChunk) -end - -local function validSiegeSettlerLocation(map, neighborChunk) - return (getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS) and - (getNestCount(map, neighborChunk) == 0) -end - -local function validSettlerLocation(map, chunk, neighborChunk) - local chunkResource = chunk[RESOURCE_PHEROMONE] - return (getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS) and - (getNestCount(map, neighborChunk) == 0) and - (neighborChunk[RESOURCE_PHEROMONE] >= chunkResource) -end - -local function validUnitGroupLocation(map, neighborChunk) - return getPassable(map, neighborChunk) == CHUNK_ALL_DIRECTIONS and - (getNestCount(map, neighborChunk) == 0) -end - -local function visitPattern(o, cX, cY, distance) - local startX - local endX - local stepX - local startY - local endY - local stepY - if (o == 0) then - startX = cX - distance - endX = cX + distance - stepX = 32 - startY = cY - distance - endY = cY + distance - stepY = 32 - elseif (o == 1) then - startX = cX + distance - endX = cX - distance - stepX = -32 - startY = cY + distance - endY = cY - distance - stepY = -32 - elseif (o == 2) then - startX = cX - distance - endX = cX + distance - stepX = 32 - startY = cY + distance - endY = cY - distance - stepY = -32 - elseif (o == 3) then - startX = cX + distance - endX = cX - distance - stepX = -32 - startY = cY - distance - endY = cY + distance - stepY = 32 - end - return startX, endX, stepX, startY, endY, stepY -end - -function aiAttackWave.rallyUnits(chunk, map, tick, base) - if ((tick - getRallyTick(map, chunk) > COOLDOWN_RALLY) and (base.unitPoints >= AI_VENGENCE_SQUAD_COST)) then - setRallyTick(map, chunk, tick) - local cX = chunk.x - local cY = chunk.y - local startX, endX, stepX, startY, endY, stepY = visitPattern(tick % 4, cX, cY, RALLY_CRY_DISTANCE) - local vengenceQueue = map.universe.vengenceQueue - for x=startX, endX, stepX do - for y=startY, endY, stepY do - if (x ~= cX) and (y ~= cY) then - local rallyChunk = getChunkByXY(map, x, y) - if (rallyChunk ~= -1) and (getNestCount(map, rallyChunk) > 0) then - local pack = vengenceQueue[rallyChunk.id] - if not pack then - pack = { - v = 0, - map = map, - base = base - } - vengenceQueue[rallyChunk.id] = pack - end - pack.v = pack.v + 1 - end - end - end - end - - return true - end -end - -function aiAttackWave.formSettlers(map, chunk, base) - local universe = map.universe - if (universe.builderCount < universe.AI_MAX_BUILDER_COUNT) and - (map.random() < universe.formSquadThreshold) and - ((base.unitPoints - AI_SETTLER_COST) > 0) - then - local surface = map.surface - local squadPath, squadDirection - if (base.stateAI == BASE_AI_STATE_SIEGE) then - squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), - validSiegeSettlerLocation, - scoreSiegeSettlerLocation, - map) - else - squadPath, squadDirection = scoreNeighborsForResource(chunk, - getNeighborChunks(map, chunk.x, chunk.y), - validSettlerLocation, - scoreSettlerLocation, - map) - end - - if (squadPath ~= -1) then - local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", - positionFromDirectionAndChunk(squadDirection, - chunk, - 0.98), - CHUNK_SIZE, - 4, - true) - if squadPosition then - local squad = createSquad(squadPosition, map, nil, true, base) - - local scaledWaveSize = settlerWaveScaling(universe) - universe.formGroupCommand.group = squad.group - universe.formCommand.unit_count = scaledWaveSize - local foundUnits = surface.set_multi_command(universe.formCommand) - if (foundUnits > 0) then - if (base.stateAI == BASE_AI_STATE_SIEGE) then - base.sentSiegeGroups = base.sentSiegeGroups + 1 - end - - squad.base = base - local kamikazeThreshold = calculateKamikazeSettlerThreshold(foundUnits, universe) - if base.stateAI == BASE_AI_STATE_SIEGE then - kamikazeThreshold = kamikazeThreshold * 2.5 - end - squad.kamikaze = map.random() < kamikazeThreshold - - universe.builderCount = universe.builderCount + 1 - base.unitPoints = base.unitPoints - AI_SETTLER_COST - if universe.aiPointsPrintSpendingToChat then - game.print(map.surface.name .. ": Points: -" .. AI_SETTLER_COST .. ". [Settler] Total: " .. - string.format("%.2f", base.unitPoints) .. " [gps=" .. squadPosition.x .. "," .. - squadPosition.y .. "]") - end - universe.groupNumberToSquad[squad.groupNumber] = squad - else - if (squad.group.valid) then - squad.group.destroy() - end - end - end - end - end -end - -function aiAttackWave.formVengenceSquad(map, chunk, base) - local universe = map.universe - if (universe.squadCount < universe.AI_MAX_SQUAD_COUNT) and - (map.random() < universe.formSquadThreshold) and - ((base.unitPoints - AI_VENGENCE_SQUAD_COST) > 0) - then - local surface = map.surface - local squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), - validUnitGroupLocation, - scoreUnitGroupLocation, - map) - if (squadPath ~= -1) then - local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", - positionFromDirectionAndChunk(squadDirection, - chunk, - 0.98), - CHUNK_SIZE, - 4, - true) - if squadPosition then - local squad = createSquad(squadPosition, map, nil, false, base) - - squad.rabid = map.random() < 0.03 - - local scaledWaveSize = attackWaveScaling(universe) - universe.formGroupCommand.group = squad.group - universe.formCommand.unit_count = scaledWaveSize - local foundUnits = surface.set_multi_command(universe.formCommand) - if (foundUnits > 0) then - squad.base = base - squad.kamikaze = map.random() < calculateKamikazeSquadThreshold(foundUnits, universe) - universe.groupNumberToSquad[squad.groupNumber] = squad - universe.squadCount = universe.squadCount + 1 - base.unitPoints = base.unitPoints - AI_VENGENCE_SQUAD_COST - if universe.aiPointsPrintSpendingToChat then - game.print(map.surface.name .. ": Points: -" .. AI_VENGENCE_SQUAD_COST .. ". [Vengence] Total: " .. - string.format("%.2f", base.unitPoints) .. " [gps=" .. squadPosition.x .. "," .. squadPosition.y .. "]") - end - else - if (squad.group.valid) then - squad.group.destroy() - end - end - end - end - end -end - -function aiAttackWave.formVengenceSettler(map, chunk, base) - local universe = map.universe - if (universe.builderCount < universe.AI_MAX_BUILDER_COUNT) and - (map.random() < universe.formSquadThreshold) and - ((base.unitPoints - AI_VENGENCE_SQUAD_COST) > 0) - then - local surface = map.surface - local squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), - validUnitGroupLocation, - scoreUnitGroupLocation, - map) - if (squadPath ~= -1) then - local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", - positionFromDirectionAndChunk(squadDirection, - chunk, - 0.98), - CHUNK_SIZE, - 4, - true) - if squadPosition then - local squad = createSquad(squadPosition, map, nil, true, base) - - squad.rabid = map.random() < 0.03 - - local scaledWaveSize = settlerWaveScaling(universe) - universe.formGroupCommand.group = squad.group - universe.formCommand.unit_count = scaledWaveSize - local foundUnits = surface.set_multi_command(universe.formCommand) - if (foundUnits > 0) then - squad.base = base - squad.kamikaze = map.random() < calculateKamikazeSettlerThreshold(foundUnits, universe) - universe.groupNumberToSquad[squad.groupNumber] = squad - universe.builderCount = universe.builderCount + 1 - base.unitPoints = base.unitPoints - AI_VENGENCE_SQUAD_COST - if universe.aiPointsPrintSpendingToChat then - game.print(map.surface.name .. ": Points: -" .. AI_VENGENCE_SQUAD_COST .. ". [Vengence Settlers] Total: " .. - string.format("%.2f", base.unitPoints) .. " [gps=" .. squadPosition.x .. "," .. squadPosition.y .. "]") - end - else - if (squad.group.valid) then - squad.group.destroy() - end - end - end - end - end -end - -function aiAttackWave.formSquads(map, chunk, base) - local universe = map.universe - if (universe.squadCount < universe.AI_MAX_SQUAD_COUNT) and - attackWaveValidCandidate(chunk, map, base) and - (map.random() < universe.formSquadThreshold) and - ((base.unitPoints - AI_SQUAD_COST) > 0) - then - local surface = map.surface - local squadPath, squadDirection = scoreNeighborsForFormation(getNeighborChunks(map, chunk.x, chunk.y), - validUnitGroupLocation, - scoreUnitGroupLocation, - map) - if (squadPath ~= -1) then - local squadPosition = surface.find_non_colliding_position("chunk-scanner-squad-rampant", - positionFromDirectionAndChunk(squadDirection, - chunk, - 0.98), - CHUNK_SIZE, - 4, - true) - if squadPosition then - local squad = createSquad(squadPosition, map, nil, false, base) - - squad.rabid = map.random() < 0.03 - - local scaledWaveSize = attackWaveScaling(universe) - universe.formGroupCommand.group = squad.group - universe.formCommand.unit_count = scaledWaveSize - local foundUnits = surface.set_multi_command(universe.formCommand) - if (foundUnits > 0) then - if (base.stateAI == BASE_AI_STATE_SIEGE) then - base.sentSiegeGroups = 0 - end - - squad.base = base - squad.kamikaze = map.random() < calculateKamikazeSquadThreshold(foundUnits, universe) - base.unitPoints = base.unitPoints - AI_SQUAD_COST - universe.squadCount = universe.squadCount + 1 - universe.groupNumberToSquad[squad.groupNumber] = squad - if (base.stateAI == BASE_AI_STATE_AGGRESSIVE) then - base.sentAggressiveGroups = base.sentAggressiveGroups + 1 - end - if universe.aiPointsPrintSpendingToChat then - game.print(map.surface.name .. ": Points: -" .. AI_SQUAD_COST .. ". [Squad] Total: " .. - string.format("%.2f", base.unitPoints) .. " [gps=" .. squadPosition.x .. "," .. - squadPosition.y .. "]") - end - else - if (squad.group.valid) then - squad.group.destroy() - end - end - end - end - end -end - - -aiAttackWaveG = aiAttackWave -return aiAttackWave diff --git a/Rampant_3.1.2/libs/AIPlanning.lua b/Rampant_3.1.2/libs/AIPlanning.lua deleted file mode 100644 index 3f22a6a8..00000000 --- a/Rampant_3.1.2/libs/AIPlanning.lua +++ /dev/null @@ -1,572 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if aiPlanningG then - return aiPlanningG -end -local aiPlanning = {} - --- imports - -local constants = require("Constants") -local mathUtils = require("MathUtils") -local baseUtils = require("BaseUtils") - --- constants - -local BASE_PROCESS_INTERVAL = constants.BASE_PROCESS_INTERVAL - -local BASE_GENERATION_STATE_ACTIVE = constants.BASE_GENERATION_STATE_ACTIVE -local BASE_GENERATION_STATE_DORMANT = constants.BASE_GENERATION_STATE_DORMANT - -local BASE_GENERATION_MIN_STATE_DURATION = constants.BASE_GENERATION_MIN_STATE_DURATION -local BASE_GENERATION_MAX_STATE_DURATION = constants.BASE_GENERATION_MAX_STATE_DURATION - -local TEMPERAMENT_RANGE_MAX = constants.TEMPERAMENT_RANGE_MAX -local TEMPERAMENT_RANGE_MIN = constants.TEMPERAMENT_RANGE_MIN -local TEMPERAMENT_DIVIDER = constants.TEMPERAMENT_DIVIDER -local NO_RETREAT_BASE_PERCENT = constants.NO_RETREAT_BASE_PERCENT -local NO_RETREAT_EVOLUTION_BONUS_MAX = constants.NO_RETREAT_EVOLUTION_BONUS_MAX - -local AI_UNIT_REFUND = constants.AI_UNIT_REFUND - -local AI_MAX_POINTS = constants.AI_MAX_POINTS - -local BASE_RALLY_CHANCE = constants.BASE_RALLY_CHANCE -local BONUS_RALLY_CHANCE = constants.BONUS_RALLY_CHANCE - -local RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN = constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN -local RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX = constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX -local MINIMUM_AI_POINTS = constants.MINIMUM_AI_POINTS - -local AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION = constants.AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION -local AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION = constants.AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION -local ACTIVE_NESTS_PER_AGGRESSIVE_GROUPS = constants.ACTIVE_NESTS_PER_AGGRESSIVE_GROUPS -local ALL_NESTS_PER_SIEGE_GROUPS = constants.ALL_NESTS_PER_SIEGE_GROUPS - -local BASE_AI_STATE_PEACEFUL = constants.BASE_AI_STATE_PEACEFUL -local BASE_AI_STATE_AGGRESSIVE = constants.BASE_AI_STATE_AGGRESSIVE -local BASE_AI_STATE_RAIDING = constants.BASE_AI_STATE_RAIDING -local BASE_AI_STATE_MIGRATING = constants.BASE_AI_STATE_MIGRATING -local BASE_AI_STATE_ONSLAUGHT = constants.BASE_AI_STATE_ONSLAUGHT -local BASE_AI_STATE_SIEGE = constants.BASE_AI_STATE_SIEGE -local AI_POINT_GENERATOR_AMOUNT = constants.AI_POINT_GENERATOR_AMOUNT - -local BASE_AI_MIN_STATE_DURATION = constants.BASE_AI_MIN_STATE_DURATION -local BASE_AI_MAX_STATE_DURATION = constants.BASE_AI_MAX_STATE_DURATION - - --- imported functions - -local randomTickEvent = mathUtils.randomTickEvent - -local upgradeBaseBasedOnDamage = baseUtils.upgradeBaseBasedOnDamage - -local linearInterpolation = mathUtils.linearInterpolation - -local mFloor = math.floor - -local mMax = math.max -local mMin = math.min - -local mCeil = math.ceil - --- module code - -local function getTimeStringFromTick(tick) - - local tickToSeconds = tick / 60 - - local days = mFloor(tickToSeconds / 86400) - local hours = mFloor((tickToSeconds % 86400) / 3600) - local minutes = mFloor((tickToSeconds % 3600) / 60) - local seconds = mFloor(tickToSeconds % 60) - return days .. "d " .. hours .. "h " .. minutes .. "m " .. seconds .. "s" -end - -function aiPlanning.planning(universe, evolutionLevel) - universe.evolutionLevel = evolutionLevel - local maxPoints = mMax(AI_MAX_POINTS * evolutionLevel, MINIMUM_AI_POINTS) - universe.maxPoints = maxPoints - - local maxOverflowPoints = maxPoints * 3 - universe.maxOverflowPoints = maxOverflowPoints - - local attackWaveMaxSize = universe.attackWaveMaxSize - universe.retreatThreshold = linearInterpolation(evolutionLevel, - RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN, - RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX) - universe.rallyThreshold = BASE_RALLY_CHANCE + (evolutionLevel * BONUS_RALLY_CHANCE) - universe.formSquadThreshold = mMax((0.35 * evolutionLevel), 0.1) - - universe.attackWaveSize = attackWaveMaxSize * (evolutionLevel ^ 1.4) - universe.attackWaveDeviation = (universe.attackWaveSize * 0.333) - universe.attackWaveUpperBound = universe.attackWaveSize + (universe.attackWaveSize * 0.35) - - if (universe.attackWaveSize < 1) then - universe.attackWaveSize = 2 - universe.attackWaveDeviation = 1 - universe.attackWaveUpperBound = 3 - end - - universe.settlerWaveSize = linearInterpolation(evolutionLevel ^ 1.66667, - universe.expansionMinSize, - universe.expansionMaxSize) - universe.settlerWaveDeviation = (universe.settlerWaveSize * 0.33) - - universe.settlerCooldown = mFloor(linearInterpolation(evolutionLevel ^ 1.66667, - universe.expansionMaxTime, - universe.expansionMinTime)) - - universe.unitRefundAmount = AI_UNIT_REFUND * evolutionLevel - universe.kamikazeThreshold = NO_RETREAT_BASE_PERCENT + (evolutionLevel * NO_RETREAT_EVOLUTION_BONUS_MAX) -end - -local function processBase(universe, base, tick) - - base.maxAggressiveGroups = mCeil(base.activeNests / ACTIVE_NESTS_PER_AGGRESSIVE_GROUPS) - base.maxSiegeGroups = mCeil((base.activeNests + base.activeRaidNests) / ALL_NESTS_PER_SIEGE_GROUPS) - - local points = (AI_POINT_GENERATOR_AMOUNT * universe.random()) + - (base.activeNests * 0.144) + - (AI_POINT_GENERATOR_AMOUNT * mMax(universe.evolutionLevel ^ 2.5, 0.1)) - - if (base.temperament == 0) or (base.temperament == 1) then - points = points + 24 - elseif (base.temperament < 0.20) or (base.temperament > 0.80) then - points = points + 14.4 - elseif (base.temperament < 0.35) or (base.temperament > 0.65) then - points = points + 9.6 - elseif (base.temperament < 0.45) or (base.temperament > 0.55) then - points = points + 4.8 - end - - if (base.stateAI == BASE_AI_STATE_ONSLAUGHT) then - points = points * 2 - end - - points = points * universe.aiPointsScaler - - local currentPoints = base.unitPoints - - if (currentPoints <= 0) then - currentPoints = 0 - end - - if (currentPoints < universe.maxPoints) then - base.unitPoints = currentPoints + points - elseif currentPoints > universe.maxOverflowPoints then - base.unitPoints = universe.maxOverflowPoints - end - - if (base.points < universe.maxPoints) then - base.points = base.points + (points * 0.75) - else - base.points = universe.maxPoints - end - - if universe.NEW_ENEMIES then - local deathThreshold - local evolutionLevel = universe.evolutionLevel - if (evolutionLevel < 0.5) then - deathThreshold = 4500 - elseif (evolutionLevel < 0.7) then - deathThreshold = 7500 - elseif (evolutionLevel < 0.9) then - deathThreshold = 11000 - else - deathThreshold = 16000 - end - - deathThreshold = universe.adaptationModifier * deathThreshold - if ((base.deathEvents > deathThreshold) and (universe.random() > 0.95)) then - if (base.mutations < universe.MAX_BASE_MUTATIONS) then - base.mutations = base.mutations + 1 - upgradeBaseBasedOnDamage(universe, base) - elseif (base.mutations == universe.MAX_BASE_MUTATIONS) then - local roll = universe.random() - if (roll < 0.001) then - base.mutations = 0 - if (universe.printBaseAdaptation) then - game.print({"description.rampant--adaptationResetDebugMessage", - base.x, - base.y, - base.mutations, - universe.MAX_BASE_MUTATIONS}) - end - elseif (roll > 0.999) then - base.mutations = base.mutations + 1 - if (universe.printBaseAdaptation) then - game.print({"description.rampant--adaptationFrozenDebugMessage", - base.x, - base.y}) - end - end - end - base.damagedBy = {} - base.deathEvents = 0 - end - else - base.damagedBy = {} - base.deathEvents = 0 - end - - if (base.stateGenerationTick <= tick) then - local roll = universe.random() - if (roll < 0.85) then - base.stateGeneration = BASE_GENERATION_STATE_ACTIVE - else - base.stateGeneration = BASE_GENERATION_STATE_DORMANT - end - base.stateGenerationTick = randomTickEvent(universe.random, - tick, - BASE_GENERATION_MIN_STATE_DURATION, - BASE_GENERATION_MAX_STATE_DURATION) - end - - base.tick = tick -end - -local function temperamentPlanner(base, evolutionLevel) - local destroyPlayerBuildings = base.destroyPlayerBuildings - local lostEnemyUnits = base.lostEnemyUnits - local lostEnemyBuilding = base.lostEnemyBuilding - local rocketLaunched = base.rocketLaunched - local builtEnemyBuilding = base.builtEnemyBuilding - local ionCannonBlasts = base.ionCannonBlasts - local artilleryBlasts = base.artilleryBlasts - local activeNests = base.activeNests - local activeRaidNests = base.activeRaidNests - - local currentTemperament = base.temperamentScore - local delta = 0 - - if activeNests > 0 then - local val = (5.76 * activeNests) - delta = delta + val - else - delta = delta - 5.553792 - end - - if destroyPlayerBuildings > 0 then - if currentTemperament > 0 then - delta = delta - (5.553792 * destroyPlayerBuildings) - else - delta = delta + (5.553792 * destroyPlayerBuildings) - end - end - - if activeRaidNests > 0 then - local val = (0.2304 * activeRaidNests) - delta = delta - val - else - delta = delta - 3.84 - end - - if lostEnemyUnits > 0 then - local multipler - if evolutionLevel < 0.3 then - multipler = 0.083328 - elseif evolutionLevel < 0.5 then - multipler = 0.041472 - elseif evolutionLevel < 0.7 then - multipler = 0.020736 - elseif evolutionLevel < 0.9 then - multipler = 0.010368 - elseif evolutionLevel < 0.9 then - multipler = 0.005184 - else - multipler = 0.002592 - end - local val = (multipler * lostEnemyUnits) - if (currentTemperament > 0) then - delta = delta - val - else - delta = delta + val - end - end - - if lostEnemyBuilding > 0 then - local val = (0.576 * lostEnemyBuilding) - if (currentTemperament > 0) then - delta = delta - val - else - delta = delta + val - end - end - - if builtEnemyBuilding > 0 then - local val = (0.261952 * builtEnemyBuilding) - if (currentTemperament > 0) then - delta = delta - val - else - delta = delta + val - end - else - delta = delta - 2.777088 - end - - if (rocketLaunched > 0) then - local val = (27.76 * rocketLaunched) - delta = delta + val - end - - if (ionCannonBlasts > 0) then - local val = (13.924864 * ionCannonBlasts) - delta = delta + val - end - - if (artilleryBlasts > 0) then - local val = (13.924864 * artilleryBlasts) - delta = delta + val - end - - local universe = base.universe - - delta = delta * universe.temperamentRateModifier - base.temperamentScore = mMin(TEMPERAMENT_RANGE_MAX, mMax(TEMPERAMENT_RANGE_MIN, currentTemperament + delta)) - base.temperament = ((base.temperamentScore + TEMPERAMENT_RANGE_MAX) * TEMPERAMENT_DIVIDER) - - if universe.debugTemperament then - local strConsole = "Rampant Stats:\nbaseId:".. base.id .. ", aN:" .. base.activeNests .. - ", aRN:" .. base.activeRaidNests .. ", dPB:" .. - base.destroyPlayerBuildings .. ", lEU:" .. base.lostEnemyUnits .. ", lEB:" .. - base.lostEnemyBuilding .. ", rL:" .. base.rocketLaunched .. ", bEB:" .. - base.builtEnemyBuilding .. ", iCB:" .. base.ionCannonBlasts .. ", aB:" .. - base.artilleryBlasts .. ", temp:" .. base.temperament .. ", tempScore:" .. base.temperamentScore .. - ", points:" .. base.points .. ", unitPoints:" .. base.unitPoints .. ", state:" .. - constants.stateEnglish[base.stateAI] .. ", surface:" .. base.map.surface.index .. " [" .. - base.map.surface.name .. "]" .. ", aS:" .. universe.squadCount .. ", aB:" .. universe.builderCount .. - ", atkSize:" .. universe.attackWaveSize .. ", stlSize:" .. universe.settlerWaveSize .. - ", formGroup:" .. universe.formSquadThreshold .. ", sAgg:".. base.sentAggressiveGroups .. - ", mAgg:" .. base.maxAggressiveGroups .. ", baseState:" .. base.stateGeneration .. ", sS:" - .. base.sentSiegeGroups .. ", mS:" .. base.maxSiegeGroups - game.print(strConsole) - print(strConsole) - end -end - -local function processState(universe, base, tick) - - if (base.stateAITick > tick) or not universe.awake then - if (not universe.awake) and (tick >= universe.initialPeaceTime) then - universe.awake = true - if universe.printAwakenMessage then - game.print({"description.rampant--planetHasAwoken"}) - end - else - return - end - end - local roll = universe.random() - if (base.temperament < 0.05) then -- 0 - 0.05 - if universe.enabledMigration then - if (roll < 0.30) then - base.stateAI = BASE_AI_STATE_MIGRATING - elseif (roll < 0.50) and universe.raidAIToggle then - base.stateAI = BASE_AI_STATE_RAIDING - elseif universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - else - base.stateAI = BASE_AI_STATE_MIGRATING - end - else - if universe.raidAIToggle then - if (roll < 0.70) then - base.stateAI = BASE_AI_STATE_RAIDING - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - end - elseif (base.temperament < 0.20) then -- 0.05 - 0.2 - if (universe.enabledMigration) then - if (roll < 0.4) then - base.stateAI = BASE_AI_STATE_MIGRATING - elseif (roll < 0.55) and universe.raidAIToggle then - base.stateAI = BASE_AI_STATE_RAIDING - elseif universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - else - base.stateAI = BASE_AI_STATE_MIGRATING - end - else - if universe.raidAIToggle then - if (roll < 0.40) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - else - base.stateAI = BASE_AI_STATE_RAIDING - end - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - end - elseif (base.temperament < 0.4) then -- 0.2 - 0.4 - if (universe.enabledMigration) then - if (roll < 0.2) and universe.raidAIToggle then - base.stateAI = BASE_AI_STATE_RAIDING - elseif (roll < 0.2) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - elseif (roll < 0.8) then - base.stateAI = BASE_AI_STATE_MIGRATING - elseif universe.peacefulAIToggle then - base.stateAI = BASE_AI_STATE_PEACEFUL - else - base.stateAI = BASE_AI_STATE_MIGRATING - end - else - if (roll < 0.3) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - elseif (roll < 0.6) and universe.raidAIToggle then - base.stateAI = BASE_AI_STATE_RAIDING - elseif (roll < 0.6) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - elseif universe.peacefulAIToggle then - base.stateAI = BASE_AI_STATE_PEACEFUL - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - end - elseif (base.temperament < 0.6) then -- 0.4 - 0.6 - if (roll < 0.4) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - elseif (roll < 0.5) and universe.raidAIToggle then - base.stateAI = BASE_AI_STATE_RAIDING - elseif (roll < 0.75) and universe.peacefulAIToggle then - base.stateAI = BASE_AI_STATE_PEACEFUL - else - if universe.enabledMigration then - base.stateAI = BASE_AI_STATE_MIGRATING - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - end - elseif (base.temperament < 0.8) then -- 0.6 - 0.8 - if (roll < 0.4) then - base.stateAI = BASE_AI_STATE_AGGRESSIVE - elseif (roll < 0.6) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - elseif (roll < 0.8) then - base.stateAI = BASE_AI_STATE_RAIDING - elseif universe.peacefulAIToggle then - base.stateAI = BASE_AI_STATE_PEACEFUL - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - elseif (base.temperament < 0.95) then -- 0.8 - 0.95 - if (universe.enabledMigration and universe.raidAIToggle) then - if (roll < 0.20) and universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - elseif (roll < 0.45) then - base.stateAI = BASE_AI_STATE_RAIDING - elseif (roll < 0.85) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - elseif (universe.enabledMigration) then - if (roll < 0.20) and universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - elseif (roll < 0.75) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - elseif (universe.raidAIToggle) then - if (roll < 0.45) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - elseif (roll < 0.75) then - base.stateAI = BASE_AI_STATE_RAIDING - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - else - if (roll < 0.65) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - else - base.stateAI = BASE_AI_STATE_AGGRESSIVE - end - end - else - if (universe.enabledMigration and universe.raidAIToggle) then - if (roll < 0.30) and universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - elseif (roll < 0.65) then - base.stateAI = BASE_AI_STATE_RAIDING - else - base.stateAI = BASE_AI_STATE_ONSLAUGHT - end - elseif (universe.enabledMigration) then - if (roll < 0.30) and universe.siegeAIToggle then - base.stateAI = BASE_AI_STATE_SIEGE - else - base.stateAI = BASE_AI_STATE_ONSLAUGHT - end - elseif (universe.raidAIToggle) then - if (roll < 0.45) then - base.stateAI = BASE_AI_STATE_ONSLAUGHT - else - base.stateAI = BASE_AI_STATE_RAIDING - end - else - base.stateAI = BASE_AI_STATE_ONSLAUGHT - end - end - - base.destroyPlayerBuildings = 0 - base.lostEnemyUnits = 0 - base.lostEnemyBuilding = 0 - base.rocketLaunched = 0 - base.builtEnemyBuilding = 0 - base.ionCannonBlasts = 0 - base.artilleryBlasts = 0 - - base.stateAITick = randomTickEvent(universe.random, tick, BASE_AI_MIN_STATE_DURATION, BASE_AI_MAX_STATE_DURATION) - - if universe.printAIStateChanges then - game.print(base.id .. ": AI is now: " .. constants.stateEnglish[base.stateAI] .. ", Next state change is in " - .. string.format("%.2f", (base.stateAITick - tick) / (60*60)) .. " minutes @ " .. - getTimeStringFromTick(base.stateAITick) .. " playtime") - end - -end - -function aiPlanning.processBaseAIs(universe, tick) - local baseId = universe.processBaseAIIterator - local base - if not baseId then - baseId, base = next(universe.bases, nil) - else - base = universe.bases[baseId] - end - if not baseId then - universe.processBaseAIIterator = nil - return - else - universe.processBaseAIIterator = next(universe.bases, baseId) - if (tick - base.tick) <= BASE_PROCESS_INTERVAL then - return - end - temperamentPlanner(base, universe.evolutionLevel) - processState(universe, base, tick) - processBase(universe, base, tick) - end -end - -aiPlanningG = aiPlanning -return aiPlanning diff --git a/Rampant_3.1.2/libs/AIPredicates.lua b/Rampant_3.1.2/libs/AIPredicates.lua deleted file mode 100644 index 895aa14a..00000000 --- a/Rampant_3.1.2/libs/AIPredicates.lua +++ /dev/null @@ -1,60 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if (aiPredicatesG) then - return aiPredicatesG -end -local aiPredicates = {} - --- imports - -local constants = require("Constants") - --- constants - -local BASE_AI_STATE_RAIDING = constants.BASE_AI_STATE_RAIDING -local BASE_AI_STATE_AGGRESSIVE = constants.BASE_AI_STATE_AGGRESSIVE -local BASE_AI_STATE_MIGRATING = constants.BASE_AI_STATE_MIGRATING -local BASE_AI_STATE_SIEGE = constants.BASE_AI_STATE_SIEGE -local BASE_AI_STATE_ONSLAUGHT = constants.BASE_AI_STATE_ONSLAUGHT - --- imported functions - --- module code - -function aiPredicates.canAttack(map, base) - local surface = map.surface - local goodAI = (((base.stateAI == BASE_AI_STATE_AGGRESSIVE) and (base.sentAggressiveGroups < base.maxAggressiveGroups)) or - (base.stateAI == BASE_AI_STATE_RAIDING) or - (base.stateAI == BASE_AI_STATE_ONSLAUGHT) or - (map.universe.raidAIToggle and (base.stateAI == BASE_AI_STATE_SIEGE) and (base.sentSiegeGroups >= base.maxSiegeGroups))) - local notPeaceful = not surface.peaceful_mode - local nocturalMode = map.universe.aiNocturnalMode - local noctural = (not nocturalMode) or (nocturalMode and surface.darkness > 0.65) - return goodAI and notPeaceful and noctural -end - -function aiPredicates.canMigrate(map, base) - local surface = map.surface - local universe = map.universe - local nocturalMode = universe.aiNocturnalMode - local goodAI = (base.stateAI == BASE_AI_STATE_MIGRATING) or (base.stateAI == BASE_AI_STATE_SIEGE) - local noctural = (not nocturalMode) or (nocturalMode and surface.darkness > 0.65) - return goodAI and universe.expansion and not surface.peaceful_mode and noctural -end - -aiPredicatesG = aiPredicates -return aiPredicates diff --git a/Rampant_3.1.2/libs/BaseUtils.lua b/Rampant_3.1.2/libs/BaseUtils.lua deleted file mode 100644 index f75785da..00000000 --- a/Rampant_3.1.2/libs/BaseUtils.lua +++ /dev/null @@ -1,709 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if baseUtilsG then - return baseUtilsG -end -local baseUtils = {} - --- imports - -local mathUtils = require("MathUtils") -local constants = require("Constants") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local mapUtils = require("MapUtils") -local queryUtils = require("QueryUtils") - --- constants - -local MINIMUM_BUILDING_COST = constants.MINIMUM_BUILDING_COST -local FACTION_MUTATION_MAPPING = constants.FACTION_MUTATION_MAPPING - -local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER - -local FACTIONS_BY_DAMAGE_TYPE = constants.FACTIONS_BY_DAMAGE_TYPE - -local BASE_GENERATION_STATE_ACTIVE = constants.BASE_GENERATION_STATE_ACTIVE - -local FACTION_SET = constants.FACTION_SET - -local HIVE_BUILDINGS_COST = constants.HIVE_BUILDINGS_COST - -local BASE_DISTANCE_THRESHOLD = constants.BASE_DISTANCE_THRESHOLD -local BASE_DISTANCE_LEVEL_BONUS = constants.BASE_DISTANCE_LEVEL_BONUS -local BASE_DISTANCE_TO_EVO_INDEX = constants.BASE_DISTANCE_TO_EVO_INDEX - -local CHUNK_SIZE = constants.CHUNK_SIZE - -local BASE_AI_STATE_PEACEFUL = constants.BASE_AI_STATE_PEACEFUL - --- imported functions - -local setPositionXYInQuery = queryUtils.setPositionXYInQuery - -local euclideanDistancePoints = mathUtils.euclideanDistancePoints - -local getChunkByPosition = mapUtils.getChunkByPosition - -local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG - -local linearInterpolation = mathUtils.linearInterpolation - -local mFloor = math.floor - -local mMin = math.min -local mMax = math.max -local distort = mathUtils.distort - -local getResourceGenerator = chunkPropertyUtils.getResourceGenerator - -local next = next - --- module code - -local function evoToTier(universe, evolutionFactor, maxSkips) - local v - local skipsRemaining = maxSkips - for i=10,1,-1 do - if universe.evoToTierMapping[i] <= evolutionFactor then - v = i - if (skipsRemaining == 0) or (universe.random() <= 0.75) then - break - end - skipsRemaining = skipsRemaining - 1 - end - end - return v -end - -local function findBaseMutation(universe, targetEvolution) - local tier = evoToTier(universe, targetEvolution or universe.evolutionLevel, 2) - local alignments = universe.evolutionTableAlignment[tier] - - local roll = universe.random() - for i=1,#alignments do - local alignment = alignments[i] - - roll = roll - alignment[1] - - if (roll <= 0) then - return alignment[2] - end - end - return alignments[#alignments] -end - -local function initialEntityUpgrade(baseAlignment, tier, maxTier, map, useHiveType, entityType) - local evolutionTable = map.universe.buildingEvolveLookup - local entity - - local useTier - - local tierRoll = map.random() - if (tierRoll < 0.4) then - useTier = maxTier - elseif (tierRoll < 0.7) then - useTier = mMax(maxTier - 1, tier) - elseif (tierRoll < 0.9) then - useTier = mMax(maxTier - 2, tier) - else - useTier = mMax(maxTier - 3, tier) - end - - local alignmentTable = evolutionTable[baseAlignment] - local upgrades = alignmentTable[useTier] - - if upgrades then - if useHiveType then - for ui=1,#upgrades do - local upgrade = upgrades[ui] - if upgrade[3] == useHiveType then - entity = upgrade[2][map.random(#upgrade[2])] - break - end - end - end - if not entity then - for ui=1,#upgrades do - local upgrade = upgrades[ui] - if upgrade[3] == entityType then - entity = upgrade[2][map.random(#upgrade[2])] - end - end - if not entity then - local mapTypes = FACTION_MUTATION_MAPPING[entityType] - for i=1, #mapTypes do - local mappedType = mapTypes[i] - for ui=1,#upgrades do - local upgrade = upgrades[ui] - if upgrade[3] == mappedType then - return upgrade[2][map.random(#upgrade[2])] - end - end - end - end - end - end - - return entity -end - -local function entityUpgrade(baseAlignment, tier, maxTier, originalEntity, map) - local universe = map.universe - local buildingHiveTypeLookup = universe.buildingHiveTypeLookup - local evolutionTable = universe.upgradeLookup - local entity - - local hiveType = buildingHiveTypeLookup[originalEntity.name] - - for t=maxTier,tier,-1 do - local factionLookup = evolutionTable[baseAlignment][t] - local upgrades = factionLookup[hiveType] - if not upgrades then - local mapTypes = FACTION_MUTATION_MAPPING[hiveType] - for i=1, #mapTypes do - local upgrade = factionLookup[mapTypes[i]] - if upgrade and (#upgrade > 0) then - entity = upgrade[map.random(#upgrade)] - if map.random() < 0.55 then - return entity - end - end - end - elseif (#upgrades > 0) then - entity = upgrades[map.random(#upgrades)] - if map.random() < 0.55 then - return entity - end - end - end - return entity -end - -local function findEntityUpgrade(baseAlignment, currentEvo, evoIndex, originalEntity, map, evolve) - local universe = map.universe - local adjCurrentEvo = mMax( - ((baseAlignment ~= universe.enemyAlignmentLookup[originalEntity.name]) and 0) or currentEvo, - 0 - ) - - local tier = evoToTier(universe, adjCurrentEvo, 5) - local maxTier = evoToTier(universe, evoIndex, 4) - - if (tier > maxTier) then - maxTier = tier - end - - if evolve then - local chunk = getChunkByPosition(map, originalEntity.position) - local entityName = originalEntity.name - local entityType = map.universe.buildingHiveTypeLookup[entityName] - if not entityType then - if map.random() < 0.5 then - entityType = "biter-spawner" - else - entityType = "spitter-spawner" - end - end - local roll = map.random() - local makeHive = (chunk ~= -1) and - ( - (entityType == "biter-spawner") or (entityType == "spitter-spawner") - ) - and - ( - ( - (roll <= 0.01) and - not map.universe.proxyEntityLookup[entityName] - ) - or - ( - (roll <= 0.210) and - (getResourceGenerator(map, chunk) > 0) - ) - ) - return initialEntityUpgrade(baseAlignment, tier, maxTier, map, (makeHive and "hive"), entityType) - else - return entityUpgrade(baseAlignment, tier, maxTier, originalEntity, map) - end -end - -local function findBaseInitialAlignment(universe, evoIndex) - local dev = evoIndex * 0.15 - local evoTop = gaussianRandomRangeRG(evoIndex - (evoIndex * 0.075), dev, 0, evoIndex, universe.random) - - local result - if universe.random() < 0.05 then - result = {findBaseMutation(universe, evoTop), findBaseMutation(universe, evoTop)} - else - result = {findBaseMutation(universe, evoTop)} - end - - return result -end - -function baseUtils.recycleBases(universe) - local bases = universe.bases - local id = universe.recycleBaseIterator - local base - if not id then - id, base = next(bases, nil) - else - base = bases[id] - end - if not id then - universe.recycleBaseIterator = nil - else - universe.recycleBaseIterator = next(bases, id) - local map = base.map - if (base.chunkCount == 0) or not map.surface.valid then - bases[id] = nil - if universe.processBaseAIIterator == id then - universe.processBaseAIIterator = nil - end - if map.surface.valid then - map.universe.bases[id] = nil - end - end - end -end - -function baseUtils.upgradeEntity(entity, base, map, disPos, evolve, register, timeDelay) - local position = entity.position - local currentEvo = entity.prototype.build_base_evolution_requirement or 0 - - local distance = mMin(1, euclideanDistancePoints(position.x, position.y, 0, 0) * BASE_DISTANCE_TO_EVO_INDEX) - local evoIndex = mMax(distance, map.universe.evolutionLevel) - local baseAlignment = base.alignment - - local pickedBaseAlignment - if baseAlignment[2] then - if map.random() < 0.75 then - pickedBaseAlignment = baseAlignment[2] - else - pickedBaseAlignment = baseAlignment[1] - end - else - pickedBaseAlignment = baseAlignment[1] - end - - local spawnerName = findEntityUpgrade(pickedBaseAlignment, - currentEvo, - evoIndex, - entity, - map, - evolve) - - if spawnerName and (spawnerName ~= entity.name) then - local entityData = { - ["name"] = spawnerName, - ["position"] = disPos, - ["register"] = register, - ["map"] = map, - ["base"] = base, - ["entity"] = entity, - ["delayTLL"] = timeDelay - } - map.universe.pendingUpgrades[entity.unit_number] = entityData - return spawnerName - end - if entity.valid then - if map.universe.proxyEntityLookup[entity.name] then - entity.destroy() - end - end - return nil -end - -local function pickMutationFromDamageType(universe, damageType, roll, base) - local baseAlignment = base.alignment - - local damageFactions = FACTIONS_BY_DAMAGE_TYPE[damageType] - local mutation - - if (damageFactions and (#damageFactions > 0)) then - mutation = damageFactions[universe.random(#damageFactions)] - if baseAlignment[2] then - if (roll < 0.05) then - baseAlignment[2] = nil - baseAlignment[1] = mutation - elseif (roll < 0.25) then - baseAlignment[1] = mutation - else - baseAlignment[2] = mutation - end - else - if (roll < 0.85) then - base.alignment[1] = mutation - else - base.alignment[2] = mutation - end - end - else - mutation = findBaseMutation(universe) - if baseAlignment[2] then - if (roll < 0.05) then - baseAlignment[2] = nil - baseAlignment[1] = mutation - elseif (roll < 0.25) then - baseAlignment[1] = mutation - else - baseAlignment[2] = mutation - end - else - if (roll < 0.85) then - base.alignment[1] = mutation - else - base.alignment[2] = mutation - end - end - end - if (universe.printBaseAdaptation) then - if baseAlignment[2] then - game.print({"description.rampant--adaptation2DebugMessage", - damageType, - {"description.rampant--"..baseAlignment[1].."EnemyName"}, - {"description.rampant--"..baseAlignment[2].."EnemyName"}, - base.x, - base.y, - base.mutations, - universe.MAX_BASE_MUTATIONS}) - else - game.print({"description.rampant--adaptation1DebugMessage", - damageType, - {"description.rampant--"..baseAlignment[1].."EnemyName"}, - base.x, - base.y, - base.mutations, - universe.MAX_BASE_MUTATIONS}) - end - end -end - -function baseUtils.upgradeBaseBasedOnDamage(universe, base) - - local total = 0 - - for _,amount in pairs(base.damagedBy) do - total = total + amount - end - local mutationAmount = total * 0.176471 - base.damagedBy["RandomMutation"] = mutationAmount - total = total + mutationAmount - local pickedDamage - local roll = universe.random() - for damageTypeName,amount in pairs(base.damagedBy) do - base.damagedBy[damageTypeName] = amount / total - end - for damageType,amount in pairs(base.damagedBy) do - roll = roll - amount - if (roll <= 0) then - pickedDamage = damageType - break - end - end - - pickMutationFromDamageType(universe, pickedDamage, roll, base) -end - -function baseUtils.processBaseMutation(chunk, map, base) - if not base.alignment[1] or - (base.stateGeneration ~= BASE_GENERATION_STATE_ACTIVE) or - (map.random() >= 0.30) - then - return - end - - if (base.points >= MINIMUM_BUILDING_COST) then - local surface = map.surface - local universe = map.universe - setPositionXYInQuery(universe.pbFilteredEntitiesPointQueryLimited, - chunk.x + (CHUNK_SIZE * map.random()), - chunk.y + (CHUNK_SIZE * map.random())) - - local entities = surface.find_entities_filtered(universe.pbFilteredEntitiesPointQueryLimited) - if #entities ~= 0 then - local entity = entities[1] - local cost = (universe.costLookup[entity.name] or MAGIC_MAXIMUM_NUMBER) - if (base.points >= cost) then - local newEntity = baseUtils.upgradeEntity(entity, base, map) - if newEntity then - if universe.printBaseUpgrades then - surface.print("[gps=".. entity.position.x ..",".. entity.position.y .."] " .. "Scheduled upgrade for ".. entity.name .. " to " .. newEntity) - end - base.points = base.points - cost - end - end - end - end -end - -function baseUtils.createBase(map, chunk, tick) - local x = chunk.x - local y = chunk.y - local distance = euclideanDistancePoints(x, y, 0, 0) - - local meanLevel = mFloor(distance * 0.005) - - local universe = map.universe - local distanceIndex = mMin(1, distance * BASE_DISTANCE_TO_EVO_INDEX) - local evoIndex = mMax(distanceIndex, universe.evolutionLevel) - - local alignment = (universe.NEW_ENEMIES and findBaseInitialAlignment(universe, evoIndex)) or {"neutral"} - - local baseLevel = gaussianRandomRangeRG(meanLevel, - meanLevel * 0.3, - meanLevel * 0.50, - meanLevel * 1.50, - universe.random) - local baseDistanceThreshold = gaussianRandomRangeRG(BASE_DISTANCE_THRESHOLD, - BASE_DISTANCE_THRESHOLD * 0.2, - BASE_DISTANCE_THRESHOLD * 0.75, - BASE_DISTANCE_THRESHOLD * 1.50, - universe.random) - local distanceThreshold = (baseLevel * BASE_DISTANCE_LEVEL_BONUS) + baseDistanceThreshold - - local base = { - x = x, - y = y, - distanceThreshold = distanceThreshold * universe.baseDistanceModifier, - tick = tick, - alignment = alignment, - damagedBy = {}, - deathEvents = 0, - mutations = 0, - stateGeneration = BASE_GENERATION_STATE_ACTIVE, - stateGenerationTick = 0, - chunkCount = 0, - createdTick = tick, - points = 0, - unitPoints = 0, - stateAI = BASE_AI_STATE_PEACEFUL, - stateAITick = 0, - maxAggressiveGroups = 0, - sentAggressiveGroups = 0, - maxSiegeGroups = 0, - sentSiegeGroups = 0, - activeRaidNests = 0, - activeNests = 0, - destroyPlayerBuildings = 0, - lostEnemyUnits = 0, - lostEnemyBuilding = 0, - rocketLaunched = 0, - builtEnemyBuilding = 0, - ionCannonBlasts = 0, - artilleryBlasts = 0, - temperament = 0.5, - temperamentScore = 0, - universe = universe, - map = map, - id = universe.baseId - } - universe.baseId = universe.baseId + 1 - - map.bases[base.id] = base - universe.bases[base.id] = base - - return base -end - -local function isMember(lst, x) - for _,l in pairs(lst) do - if l == x then - return true - end - end - return false -end - -function baseUtils.rebuildNativeTables(universe, rg) - local alignmentSet = {} - universe.evolutionTableAlignment = alignmentSet - local buildingSpaceLookup = {} - universe.buildingSpaceLookup = buildingSpaceLookup - local enemyAlignmentLookup = {} - universe.enemyAlignmentLookup = enemyAlignmentLookup - local upgradeLookup = {} - universe.upgradeLookup = upgradeLookup - local buildingEvolveLookup = {} - universe.buildingEvolveLookup = buildingEvolveLookup - local costLookup = {} - universe.costLookup = costLookup - local buildingHiveTypeLookup = {} - universe.buildingHiveTypeLookup = buildingHiveTypeLookup - local proxyEntityLookup = {} - universe.proxyEntityLookup = proxyEntityLookup - local vanillaEntityLookup = {} - universe.vanillaEntityTypeLookup = vanillaEntityLookup - local entitySkipCountLookup = {} - universe.entitySkipCountLookup = entitySkipCountLookup - - buildingHiveTypeLookup["biter-spawner"] = "biter-spawner" - buildingHiveTypeLookup["spitter-spawner"] = "spitter-spawner" - buildingHiveTypeLookup["small-worm-turret"] = "turret" - buildingHiveTypeLookup["medium-worm-turret"] = "turret" - buildingHiveTypeLookup["big-worm-turret"] = "turret" - buildingHiveTypeLookup["behemoth-worm-turret"] = "turret" - - vanillaEntityLookup["biter-spawner"] = true - vanillaEntityLookup["spitter-spawner"] = true - vanillaEntityLookup["small-worm-turret"] = true - vanillaEntityLookup["medium-worm-turret"] = true - vanillaEntityLookup["big-worm-turret"] = true - vanillaEntityLookup["behemoth-worm-turret"] = true - - for i=1,#FACTION_SET do - local faction = FACTION_SET[i] - - local factionUpgradeLookup = {} - upgradeLookup[faction.type] = factionUpgradeLookup - local factionBuildingPicker = {} - buildingEvolveLookup[faction.type] = factionBuildingPicker - - for t=1,10 do - local alignments = alignmentSet[t] - if not alignments then - alignments = {} - alignmentSet[t] = alignments - end - - --[[ - alignments table is a table that is used for selecting what factions are available - to pick given an evolution level. - - evolutionTable is a table that given a faction allows the selection of a building - type based on the propabilities given. Once the the building type is selected given - a faction, then the evolution decides what level of building to select - --]] - local factionAcceptRate = faction.acceptRate - - local low = factionAcceptRate[1] - local high = factionAcceptRate[2] - if (low <= t) and (t <= high) then - alignments[#alignments+1] = { - distort(rg, - linearInterpolation((t - low) / (high - low), factionAcceptRate[3], factionAcceptRate[4])), - faction.type - } - end - - local tieredUpgradeBuildingSet = factionUpgradeLookup[t] - if not tieredUpgradeBuildingSet then - tieredUpgradeBuildingSet = {} - factionUpgradeLookup[t] = tieredUpgradeBuildingSet - end - - local tieredBuildingPickerSet = factionBuildingPicker[t] - if not tieredBuildingPickerSet then - tieredBuildingPickerSet = {} - factionBuildingPicker[t] = tieredBuildingPickerSet - end - - for b=1,#faction.buildings do - local building = faction.buildings[b] - - local buildingSet = tieredUpgradeBuildingSet[building.type] - if not buildingSet then - buildingSet = {} - tieredUpgradeBuildingSet[building.type] = buildingSet - end - - local variationSet = {} - for v=1,universe.ENEMY_VARIATIONS do - local entry = faction.type .. "-" .. building.name .. "-v" .. v .. "-t" .. t .. "-rampant" - enemyAlignmentLookup[entry] = faction.type - local proxyEntity = "entity-proxy-" .. building.type .. "-t" .. t .. "-rampant" - proxyEntityLookup[proxyEntity] = true - buildingSpaceLookup[entry] = proxyEntity - costLookup[entry] = HIVE_BUILDINGS_COST[building.type] - buildingHiveTypeLookup[entry] = building.type - if not buildingHiveTypeLookup[proxyEntity] then - buildingHiveTypeLookup[proxyEntity] = building.type - end - variationSet[#variationSet+1] = entry - for _,unit in pairs(faction.units) do - if isMember(unit.attributes, "skipKillCount") then - local name = faction.type .. "-" .. unit.name .. "-v" .. v .. "-t" .. t .. "-rampant" - universe.entitySkipCountLookup[name] = true - end - end - end - - local buildingAcceptRate = building.acceptRate - - local buildingLow = buildingAcceptRate[1] - local buildingHigh = buildingAcceptRate[2] - if (buildingLow <= t) and (t <= buildingHigh) then - for vi=1,#variationSet do - local variation = variationSet[vi] - buildingSet[#buildingSet+1] = variation - end - tieredBuildingPickerSet[#tieredBuildingPickerSet+1] = { - distort(rg, - linearInterpolation((t - buildingLow) / (buildingHigh - buildingLow), - buildingAcceptRate[3], - buildingAcceptRate[4])), - variationSet, - building.type - } - end - end - end - end - - for t=1,10 do - local alignments = alignmentSet[t] - local totalAlignment = 0 - for i=1,#alignments do - totalAlignment = totalAlignment + alignments[i][1] - end - for i=1,#alignments do - alignments[i][1] = alignments[i][1] / totalAlignment - end - - for fi=1,#FACTION_SET do - local faction = FACTION_SET[fi] - local factionBuildingSet = buildingEvolveLookup[faction.type][t] - local totalBuildingSet = 0 - for i=1,#factionBuildingSet do - totalBuildingSet = totalBuildingSet + factionBuildingSet[i][1] - end - for i=1,#factionBuildingSet do - factionBuildingSet[i][1] = factionBuildingSet[i][1] / totalBuildingSet - end - end - end - - local evoIndex = evoToTier(universe, universe.evolutionLevel, 2) - - if universe.bases then - for _,base in pairs(universe.bases) do - for x=1,2 do - local alignment = base.alignment[x] - if alignment and not universe.buildingEvolveLookup[alignment] then - base.alignment = findBaseInitialAlignment(universe, evoIndex) - break - elseif not alignment and (x == 1) then - base.alignment = findBaseInitialAlignment(universe, evoIndex) - break - end - end - end - end -end - -baseUtilsG = baseUtils -return baseUtils diff --git a/Rampant_3.1.2/libs/ChunkProcessor.lua b/Rampant_3.1.2/libs/ChunkProcessor.lua deleted file mode 100644 index aca0f30d..00000000 --- a/Rampant_3.1.2/libs/ChunkProcessor.lua +++ /dev/null @@ -1,207 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if (chunkProcessorG) then - return chunkProcessorG -end -local chunkProcessor = {} - --- imports - -local chunkUtils = require("ChunkUtils") -local queryUtils = require("QueryUtils") -local mapUtils = require("MapUtils") --- local constants = require("Constants") - --- constants - --- local CHUNK_SIZE = constants.CHUNK_SIZE --- local HALF_CHUNK_SIZE = constants.HALF_CHUNK_SIZE --- local QUARTER_CHUNK_SIZE = constants.QUARTER_CHUNK_SIZE - --- imported functions - -local findInsertionPoint = mapUtils.findInsertionPoint -local removeChunkFromMap = mapUtils.removeChunkFromMap -local setPositionInQuery = queryUtils.setPositionInQuery -local registerEnemyBaseStructure = chunkUtils.registerEnemyBaseStructure -local unregisterEnemyBaseStructure = chunkUtils.unregisterEnemyBaseStructure - -local createChunk = chunkUtils.createChunk -local initialScan = chunkUtils.initialScan -local chunkPassScan = chunkUtils.chunkPassScan - -local next = next -local table_size = table_size - -local tInsert = table.insert - --- module code - -function chunkProcessor.processPendingChunks(universe, tick, flush) - local pendingChunks = universe.pendingChunks - local eventId = universe.chunkProcessorIterator - local event - - if not eventId then - eventId, event = next(pendingChunks, nil) - else - event = pendingChunks[eventId] - end - local endCount = 1 - if flush then - endCount = table_size(pendingChunks) - eventId, event = next(pendingChunks, nil) - end - for _=1,endCount do - if not eventId then - universe.chunkProcessorIterator = nil - if (table_size(pendingChunks) == 0) then - -- this is needed as the next command remembers the max length a table has been - universe.pendingChunks = {} - end - break - else - if not flush and (event.tick > tick) then - universe.chunkProcessorIterator = eventId - return - end - local newEventId, newEvent = next(pendingChunks, eventId) - pendingChunks[eventId] = nil - local map = event.map - if not map.surface.valid then - universe.chunkProcessorIterator = newEventId - return - end - - local topLeft = event.area.left_top - local x = topLeft.x - local y = topLeft.y - - if not map[x] then - map[x] = {} - end - - if map[x][y] then - local oldChunk = map[x][y] - local chunk = initialScan(oldChunk, map, tick) - if (chunk == -1) then - removeChunkFromMap(map, oldChunk) - end - else - local initialChunk = createChunk(map, x, y) - map[x][y] = initialChunk - universe.chunkIdToChunk[initialChunk.id] = initialChunk - local chunk = initialScan(initialChunk, map, tick) - if (chunk ~= -1) then - tInsert( - map.processQueue, - findInsertionPoint(map.processQueue, chunk), - chunk - ) - else - map[x][y] = nil - universe.chunkIdToChunk[initialChunk.id] = nil - end - end - - eventId = newEventId - event = newEvent - end - end - universe.chunkProcessorIterator = eventId -end - -function chunkProcessor.processPendingUpgrades(universe, tick) - local entityId = universe.pendingUpgradeIterator - local entityData - if not entityId then - entityId, entityData = next(universe.pendingUpgrades, nil) - else - entityData = universe.pendingUpgrades[entityId] - end - if not entityId then - universe.pendingUpgradeIterator = nil - if table_size(universe.pendingUpgrades) == 0 then - universe.pendingUpgrades = {} - end - else - local entity = entityData.entity - if entity.valid then - universe.pendingUpgradeIterator = next(universe.pendingUpgrades, entityId) - if entityData.delayTLL and tick < entityData.delayTLL then - return - end - universe.pendingUpgrades[entityId] = nil - local surface = entity.surface - local query = universe.ppuUpgradeEntityQuery - local position = entityData.position or entity.position - query.name = entityData.name - unregisterEnemyBaseStructure(entityData.map, entity, nil, true) - entity.destroy() - local foundPosition = surface.find_non_colliding_position(universe.buildingSpaceLookup[entityData.name], - position, - 2, - 1, - true) - setPositionInQuery(query, foundPosition or position) - local createdEntity = surface.create_entity(query) - if createdEntity and createdEntity.valid then - registerEnemyBaseStructure(entityData.map, createdEntity, entityData.base, true) - if remote.interfaces["kr-creep"] then - remote.call("kr-creep", "spawn_creep_at_position", surface, foundPosition or position) - end - end - else - universe.pendingUpgradeIterator = next(universe.pendingUpgrades, entityId) - universe.pendingUpgrades[entityId] = nil - end - end -end - - -function chunkProcessor.processScanChunks(universe) - local chunkId = universe.chunkToPassScanIterator - local chunkPack - if not chunkId then - chunkId, chunkPack = next(universe.chunkToPassScan, nil) - else - chunkPack = universe.chunkToPassScan[chunkId] - end - - if not chunkId then - universe.chunkToPassScanIterator = nil - if (table_size(universe.chunkToPassScan) == 0) then - -- this is needed as the next command remembers the max length a table has been - universe.chunkToPassScan = {} - end - else - universe.chunkToPassScanIterator = next(universe.chunkToPassScan, chunkId) - universe.chunkToPassScan[chunkId] = nil - local map = chunkPack.map - if not map.surface.valid then - return - end - local chunk = chunkPack.chunk - - if (chunkPassScan(chunk, map) == -1) then - removeChunkFromMap(map, chunk) - end - end -end - -chunkProcessorG = chunkProcessor -return chunkProcessor diff --git a/Rampant_3.1.2/libs/ChunkPropertyUtils.lua b/Rampant_3.1.2/libs/ChunkPropertyUtils.lua deleted file mode 100644 index 2474c1a1..00000000 --- a/Rampant_3.1.2/libs/ChunkPropertyUtils.lua +++ /dev/null @@ -1,670 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if chunkPropertyUtilsG then - return chunkPropertyUtilsG -end -local chunkPropertyUtils = {} - -local constants = require("Constants") -local mathUtils = require("MathUtils") - --- constants - -local COOLDOWN_DRAIN = constants.COOLDOWN_DRAIN - -local RAIDING_MINIMUM_BASE_THRESHOLD = constants.RAIDING_MINIMUM_BASE_THRESHOLD - -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local BASE_PHEROMONE = constants.BASE_PHEROMONE - -local MOVEMENT_GENERATOR_PERSISTANCE = constants.MOVEMENT_GENERATOR_PERSISTANCE -local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS - -local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER - --- imported functions - -local manhattenDistancePoints = mathUtils.manhattenDistancePoints - -local mMin = math.min - --- module code - -function chunkPropertyUtils.getTurretCount(map, chunk) - return map.chunkToTurrets[chunk.id] or 0 -end - -function chunkPropertyUtils.getTrapCount(map, chunk) - return map.chunkToTraps[chunk.id] or 0 -end - -function chunkPropertyUtils.getUtilityCount(map, chunk) - return map.chunkToUtilities[chunk.id] or 0 -end - -function chunkPropertyUtils.getHiveCount(map, chunk) - return map.chunkToHives[chunk.id] or 0 -end - -function chunkPropertyUtils.addTurretCount(map, chunk, unitNumber) - map.activeSurface = true - if not map.chunkToTurretIds[chunk.id] then - map.chunkToTurretIds[chunk.id] = {} - end - if not map.chunkToTurretIds[chunk.id][unitNumber] then - map.chunkToTurretIds[chunk.id][unitNumber] = true - map.chunkToTurrets[chunk.id] = (map.chunkToTurrets[chunk.id] or 0) + 1 - return true - end - return false -end - -function chunkPropertyUtils.removeTurretCount(map, chunk, unitNumber) - if map.chunkToTurretIds[chunk.id] and map.chunkToTurretIds[chunk.id][unitNumber] then - map.chunkToTurretIds[chunk.id][unitNumber] = nil - map.chunkToTurrets[chunk.id] = map.chunkToTurrets[chunk.id] - 1 - if map.chunkToTurrets[chunk.id] == 0 then - map.chunkToTurretIds[chunk.id] = nil - map.chunkToTurrets[chunk.id] = nil - end - return true - end - return false -end - -function chunkPropertyUtils.addTrapCount(map, chunk, unitNumber) - map.activeSurface = true - if not map.chunkToTrapIds[chunk.id] then - map.chunkToTrapIds[chunk.id] = {} - end - if not map.chunkToTrapIds[chunk.id][unitNumber] then - map.chunkToTrapIds[chunk.id][unitNumber] = true - map.chunkToTraps[chunk.id] = (map.chunkToTraps[chunk.id] or 0) + 1 - return true - end - return false -end - -function chunkPropertyUtils.removeTrapCount(map, chunk, unitNumber) - if map.chunkToTrapIds[chunk.id] and map.chunkToTrapIds[chunk.id][unitNumber] then - map.chunkToTrapIds[chunk.id][unitNumber] = nil - map.chunkToTraps[chunk.id] = map.chunkToTraps[chunk.id] - 1 - if map.chunkToTraps[chunk.id] == 0 then - map.chunkToTrapIds[chunk.id] = nil - map.chunkToTraps[chunk.id] = nil - end - return true - end - return false -end - -function chunkPropertyUtils.addUtilitiesCount(map, chunk, unitNumber) - map.activeSurface = true - if not map.chunkToUtilityIds[chunk.id] then - map.chunkToUtilityIds[chunk.id] = {} - end - if not map.chunkToUtilityIds[chunk.id][unitNumber] then - map.chunkToUtilityIds[chunk.id][unitNumber] = true - map.chunkToUtilities[chunk.id] = (map.chunkToUtilities[chunk.id] or 0) + 1 - return true - end - return false -end - -function chunkPropertyUtils.removeUtilitiesCount(map, chunk, unitNumber) - if map.chunkToUtilityIds[chunk.id] and map.chunkToUtilityIds[chunk.id][unitNumber] then - map.chunkToUtilityIds[chunk.id][unitNumber] = nil - map.chunkToUtilities[chunk.id] = map.chunkToUtilities[chunk.id] - 1 - if map.chunkToUtilities[chunk.id] == 0 then - map.chunkToUtilityIds[chunk.id] = nil - map.chunkToUtilities[chunk.id] = nil - end - return true - end - return false -end - -function chunkPropertyUtils.addHiveCount(map, chunk, unitNumber) - map.activeSurface = true - if not map.chunkToHiveIds[chunk.id] then - map.chunkToHiveIds[chunk.id] = {} - end - if not map.chunkToHiveIds[chunk.id][unitNumber] then - map.chunkToHiveIds[chunk.id][unitNumber] = true - map.chunkToHives[chunk.id] = (map.chunkToHives[chunk.id] or 0) + 1 - return true - end - return false -end - -function chunkPropertyUtils.removeHiveCount(map, chunk, unitNumber) - if map.chunkToHiveIds[chunk.id] and map.chunkToHiveIds[chunk.id][unitNumber] then - map.chunkToHiveIds[chunk.id][unitNumber] = nil - map.chunkToHives[chunk.id] = map.chunkToHives[chunk.id] - 1 - if map.chunkToHives[chunk.id] == 0 then - map.chunkToHiveIds[chunk.id] = nil - map.chunkToHives[chunk.id] = nil - end - return true - end - return false -end - -function chunkPropertyUtils.addNestCount(map, chunk, unitNumber) - map.activeSurface = true - local chunkId = chunk.id - if not map.chunkToNestIds[chunkId] then - map.chunkToNestIds[chunkId] = {} - end - if not map.chunkToNestIds[chunkId][unitNumber] then - map.chunkToNestIds[chunkId][unitNumber] = true - local cToN = map.universe.chunkToNests - local pack = cToN[chunkId] - if not pack then - cToN[chunkId] = { - map = map, - v = 0 - } - end - cToN[chunkId].v = cToN[chunkId].v + 1 - return true - end - return false -end - -function chunkPropertyUtils.removeNestCount(map, chunk, unitNumber) - local chunkId = chunk.id - if map.chunkToNestIds[chunkId] and map.chunkToNestIds[chunkId][unitNumber] then - map.chunkToNestIds[chunkId][unitNumber] = nil - local cToN = map.universe.chunkToNests - cToN[chunkId].v = cToN[chunkId].v - 1 - if cToN[chunkId].v == 0 then - map.chunkToNestIds[chunkId] = nil - cToN[chunkId] = nil - if (map.universe.processMigrationIterator == chunkId) then - map.universe.processMigrationIterator = nil - end - if (map.universe.processNestIterator == chunkId) then - map.universe.processNestIterator = nil - end - end - return true - end - return false -end - -function chunkPropertyUtils.getNestCount(map, chunk) - local nestPack = map.universe.chunkToNests[chunk.id] - if not nestPack then - return 0 - end - return nestPack.v -end - -function chunkPropertyUtils.getChunkBase(map, chunk) - return map.chunkToBase[chunk.id] -end - -function chunkPropertyUtils.removeChunkBase(map, chunk, base) - if map.chunkToBase[chunk.id] then - base.chunkCount = base.chunkCount - 1 - map.chunkToBase[chunk.id] = nil - end -end - -function chunkPropertyUtils.setChunkBase(map, chunk, base) - if not map.chunkToBase[chunk.id] then - base.chunkCount = base.chunkCount + 1 - map.chunkToBase[chunk.id] = base - end -end - -function chunkPropertyUtils.getEnemyStructureCount(map, chunk) - local nests = 0 - local nestPack = map.universe.chunkToNests[chunk.id] - if nestPack then - nests = nestPack.v - end - return nests + (map.chunkToTurrets[chunk.id] or 0) + (map.chunkToTraps[chunk.id] or 0) + - (map.chunkToUtilities[chunk.id] or 0) + (map.chunkToHives[chunk.id] or 0) -end - -function chunkPropertyUtils.setDrainPylons(map, entity1, entity2) - local pair = {entity1, entity2} - map.drainPylons[entity1.unit_number] = pair - map.drainPylons[entity2.unit_number] = pair -end - -function chunkPropertyUtils.removeDrainPylons(map, unitNumber) - local pair = map.drainPylons[unitNumber] - if pair then - local target = pair[1] - local pole = pair[2] - if target.unit_number == unitNumber then - map.drainPylons[unitNumber] = nil - if pole.valid then - map.drainPylons[pole.unit_number] = nil - pole.destroy() - end - elseif (pole.unit_number == unitNumber) then - map.drainPylons[unitNumber] = nil - if target.valid then - map.drainPylons[target.unit_number] = nil - target.die() - end - end - end -end - -function chunkPropertyUtils.getDrainPylonPair(map, unitNumber) - return map.drainPylons[unitNumber] -end - -function chunkPropertyUtils.isDrained(map, chunk, tick) - local pack = map.universe.chunkToDrained[chunk.id] - if not pack then - return false - end - return (tick - pack.tick) < COOLDOWN_DRAIN -end - -function chunkPropertyUtils.setDrainedTick(map, chunk, tick) - local chunkId = chunk.id - local pack = map.universe.chunkToDrained[chunkId] - if not pack then - pack = { - map = map, - tick = 0 - } - map.universe.chunkToDrained[chunkId] = pack - end - pack.tick = tick -end - -function chunkPropertyUtils.getRetreatTick(map, chunk) - local pack = map.universe.chunkToRetreats[chunk.id] - if not pack then - return 0 - end - return pack.tick -end - -function chunkPropertyUtils.getRallyTick(map, chunk) - local pack = map.universe.chunkToRallys[chunk.id] - if not pack then - return 0 - end - return pack.tick -end - -function chunkPropertyUtils.setRallyTick(map, chunk, tick) - local chunkId = chunk.id - local pack = map.universe.chunkToRallys[chunkId] - if not pack then - pack = { - map = map, - tick = tick - } - map.universe.chunkToRallys[chunkId] = pack - end - pack.tick = tick -end - -function chunkPropertyUtils.setRetreatTick(map, chunk, tick) - local chunkId = chunk.id - local pack = map.universe.chunkToRetreats[chunkId] - if not pack then - pack = { - map = map, - tick = tick - } - map.universe.chunkToRetreats[chunkId] = pack - end - pack.tick = tick -end - -function chunkPropertyUtils.setResourceGenerator(map, chunk, resourceGenerator) - if (resourceGenerator <= 0) then - map.chunkToResource[chunk.id] = nil - else - map.chunkToResource[chunk.id] = resourceGenerator - end -end - -function chunkPropertyUtils.getResourceGenerator(map, chunk) - return map.chunkToResource[chunk.id] or 0 -end - -function chunkPropertyUtils.addResourceGenerator(map, chunk, delta) - map.chunkToResource[chunk.id] = (map.chunkToResource[chunk.id] or 0) + delta -end - -function chunkPropertyUtils.getDeathGeneratorRating(map, chunk) - return 1 - (map.chunkToDeathGenerator[chunk.id] or 0) -end - -function chunkPropertyUtils.getDeathGenerator(map, chunk) - return map.chunkToDeathGenerator[chunk.id] or 0 -end - -function chunkPropertyUtils.getPassable(map, chunk) - return map.chunkToPassable[chunk.id] or CHUNK_ALL_DIRECTIONS -end - - -function chunkPropertyUtils.getRaidNestActiveness(map, chunk) - local activeness = map.universe.chunkToActiveRaidNest[chunk.id] - if not activeness then - return 0 - end - return activeness.v or 0 -end - -function chunkPropertyUtils.setRaidNestActiveness(map, chunk, value, base) - local universe = map.universe - if (value <= 0) then - if universe.chunkToActiveRaidNest[chunk.id] then - base.activeRaidNests = base.activeRaidNests - 1 - end - if (universe.processActiveRaidSpawnerIterator == chunk.id) then - universe.processActiveRaidSpawnerIterator = nil - end - universe.chunkToActiveRaidNest[chunk.id] = nil - else - if not universe.chunkToActiveRaidNest[chunk.id] then - base.activeRaidNests = base.activeRaidNests + 1 - universe.chunkToActiveRaidNest[chunk.id] = { - map = map, - v = 0 - } - end - universe.chunkToActiveRaidNest[chunk.id].v = value - end -end - -function chunkPropertyUtils.getNestActiveness(map, chunk) - local activeness = map.universe.chunkToActiveNest[chunk.id] - if not activeness then - return 0 - end - return activeness.v or 0 -end - -function chunkPropertyUtils.setNestActiveness(map, chunk, value, base) - local universe = map.universe - if (value <= 0) then - if universe.chunkToActiveNest[chunk.id] then - base.activeNests = base.activeNests - 1 - end - if (universe.processActiveSpawnerIterator == chunk.id) then - universe.processActiveSpawnerIterator = nil - end - universe.chunkToActiveNest[chunk.id] = nil - else - if not universe.chunkToActiveNest[chunk.id] then - base.activeNests = base.activeNests + 1 - universe.chunkToActiveNest[chunk.id] = { - map = map, - v = 0 - } - end - universe.chunkToActiveNest[chunk.id].v = value - end -end - -function chunkPropertyUtils.setPassable(map, chunk, value) - if (value == CHUNK_ALL_DIRECTIONS) then - map.chunkToPassable[chunk.id] = nil - else - map.chunkToPassable[chunk.id] = value - end -end - -function chunkPropertyUtils.getPathRating(map, chunk) - return map.chunkToPathRating[chunk.id] or 1 -end - -function chunkPropertyUtils.setPathRating(map, chunk, value) - if (value == 1) then - map.chunkToPathRating[chunk.id] = nil - else - map.chunkToPathRating[chunk.id] = value - end -end - -function chunkPropertyUtils.addDeathGenerator(map, chunk, value) - local v = (map.chunkToDeathGenerator[chunk.id] or 0) + value - if (v >= 1) then - v = 0.9999 - end - map.chunkToDeathGenerator[chunk.id] = v -end - -function chunkPropertyUtils.setDeathGenerator(map, chunk, value) - if (value <= 0.001) then - map.chunkToDeathGenerator[chunk.id] = nil - else - map.chunkToDeathGenerator[chunk.id] = value - end -end - -function chunkPropertyUtils.addVictoryGenerator(map, chunk, value) - local cToV = map.universe.chunkToVictory - local chunkId = chunk.id - if not cToV[chunkId] then - cToV[chunkId] = { - map = map, - v = 0 - } - end - cToV[chunkId].v = cToV[chunkId].v + value -end - -function chunkPropertyUtils.decayDeathGenerator(map, chunk) - local gen = map.chunkToDeathGenerator[chunk.id] - if gen then - local v = gen * MOVEMENT_GENERATOR_PERSISTANCE - if v <= 0.001 then - map.chunkToDeathGenerator[chunk.id] = nil - else - map.chunkToDeathGenerator[chunk.id] = v - end - end -end - -function chunkPropertyUtils.addPlayerToChunk(map, chunk, name) - local playerCountChunks = map.chunkToPlayerCount - local playerChunk = map.playerToChunk[name] - if not playerChunk then - map.playerToChunk[name] = chunk - local playerCount = playerCountChunks[chunk.id] - if not playerCount then - playerCountChunks[chunk.id] = 1 - else - playerCountChunks[chunk.id] = playerCount + 1 - end - elseif (playerChunk.id ~= chunk.id) then - map.playerToChunk[name] = chunk - local playerCount = playerCountChunks[playerChunk.id] - if playerCount then - chunkPropertyUtils.setPlayersOnChunk(map, playerChunk, playerCount - 1) - end - playerCount = playerCountChunks[chunk.id] - if not playerCount then - playerCountChunks[chunk.id] = 1 - else - playerCountChunks[chunk.id] = playerCount + 1 - end - end -end - -function chunkPropertyUtils.setPlayersOnChunk(map, chunk, value) - if (value <= 0) then - map.chunkToPlayerCount[chunk.id] = nil - else - map.chunkToPlayerCount[chunk.id] = value - end -end - -function chunkPropertyUtils.getPlayersOnChunk(map, chunk) - return map.chunkToPlayerCount[chunk.id] or 0 -end - -function chunkPropertyUtils.getPlayerBaseGenerator(map, chunk) - return map.chunkToPlayerBase[chunk.id] or 0 -end - -function chunkPropertyUtils.addSquadToChunk(map, chunk, squad) - local chunkToSquad = map.chunkToSquad - - if (chunk ~= -1) and ((squad.chunk == -1) or (squad.chunk.id ~= chunk.id)) then - chunkPropertyUtils.removeSquadFromChunk(map, squad) - local squads = chunkToSquad[chunk.id] - if not squads then - squads = {} - chunkToSquad[chunk.id] = squads - end - squads[squad.groupNumber] = squad - squad.chunk = chunk - end -end - -function chunkPropertyUtils.removeSquadFromChunk(map, squad) - local chunkToSquad = map.chunkToSquad - local chunk = squad.chunk - if (chunk ~= -1) then - local squads = chunkToSquad[chunk.id] - if squads then - squads[squad.groupNumber] = nil - if (table_size(squads) == 0) then - chunkToSquad[chunk.id] = nil - end - end - end -end - -function chunkPropertyUtils.getSquadsOnChunk(map, chunk) - return map.chunkToSquad[chunk.id] or map.emptySquadsOnChunk -end - -function chunkPropertyUtils.setPlayerBaseGenerator(map, chunk, playerGenerator) - if (playerGenerator <= 0) then - map.chunkToPlayerBase[chunk.id] = nil - else - map.chunkToPlayerBase[chunk.id] = playerGenerator - end -end - -function chunkPropertyUtils.addPlayerBaseGenerator(map, chunk, playerGenerator) - map.chunkToPlayerBase[chunk.id] = (map.chunkToPlayerBase[chunk.id] or 0) + playerGenerator -end - -function chunkPropertyUtils.findNearbyBase(map, chunk) - local x = chunk.x - local y = chunk.y - - local foundBase = chunkPropertyUtils.getChunkBase(map, chunk) - if foundBase then - return foundBase - end - - local closest = MAGIC_MAXIMUM_NUMBER - for _, base in pairs(map.bases) do - local distance = manhattenDistancePoints(base.x, base.y, x, y) - if (distance <= base.distanceThreshold) and (distance < closest) then - closest = distance - foundBase = base - end - end - - return foundBase -end - -function chunkPropertyUtils.findNearbyBaseByPosition(map, x, y) - local foundBase - - local closest = MAGIC_MAXIMUM_NUMBER - for _, base in pairs(map.bases) do - local distance = manhattenDistancePoints(base.x, base.y, x, y) - if (distance <= base.distanceThreshold) and (distance < closest) then - closest = distance - foundBase = base - end - end - - return foundBase -end - -function chunkPropertyUtils.processNestActiveness(map, chunk) - local nests = chunkPropertyUtils.getNestCount(map, chunk) - local base = chunkPropertyUtils.findNearbyBase(map, chunk) - if (nests > 0) then - local surface = map.surface - local activeness = chunkPropertyUtils.getNestActiveness(map, chunk) - local universe = map.universe - local raidActiveness = chunkPropertyUtils.getRaidNestActiveness(map, chunk) - if universe.attackUsePlayer and (chunk[PLAYER_PHEROMONE] > universe.attackPlayerThreshold) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - elseif (chunk[BASE_PHEROMONE] > 0) then - if (surface.get_pollution(chunk) > 0) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - else - local x = chunk.x - local y = chunk.y - local position = {x=0,y=0} - position.x = x + 32 - position.y = y - if (surface.get_pollution(position) > 0) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - else - position.x = x - 32 - if (surface.get_pollution(position) > 0) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - else - position.x = x - position.y = y - 32 - if (surface.get_pollution(position) > 0) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - else - position.y = y + 32 - if (surface.get_pollution(position) > 0) then - chunkPropertyUtils.setNestActiveness(map, chunk, mMin(activeness + 5, 20), base) - else - chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 2, base) - if (chunk[BASE_PHEROMONE] > RAIDING_MINIMUM_BASE_THRESHOLD) then - chunkPropertyUtils.setRaidNestActiveness(map, chunk, mMin(raidActiveness + 3, 20), base) - else - chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 1, base) - end - end - end - end - end - end - else - chunkPropertyUtils.setNestActiveness(map, chunk, activeness - 5, base) - chunkPropertyUtils.setRaidNestActiveness(map, chunk, raidActiveness - 5, base) - end - elseif base then - chunkPropertyUtils.setNestActiveness(map, chunk, 0, base) - chunkPropertyUtils.setRaidNestActiveness(map, chunk, 0, base) - end -end - - -chunkPropertyUtilsG = chunkPropertyUtils -return chunkPropertyUtils diff --git a/Rampant_3.1.2/libs/ChunkUtils.lua b/Rampant_3.1.2/libs/ChunkUtils.lua deleted file mode 100644 index ba6b4c66..00000000 --- a/Rampant_3.1.2/libs/ChunkUtils.lua +++ /dev/null @@ -1,682 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if chunkUtilsG then - return chunkUtilsG -end -local chunkUtils = {} - --- imports - -local baseUtils = require("BaseUtils") -local constants = require("Constants") -local mapUtils = require("MapUtils") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local mathUtils = require("MathUtils") -local queryUtils = require("QueryUtils") - --- constants - -local HIVE_BUILDINGS_TYPES = constants.HIVE_BUILDINGS_TYPES - -local DEFINES_WIRE_TYPE_RED = defines.wire_type.red -local DEFINES_WIRE_TYPE_GREEN = defines.wire_type.green - -local CHUNK_PASS_THRESHOLD = constants.CHUNK_PASS_THRESHOLD - -local BASE_AI_STATE_ONSLAUGHT = constants.BASE_AI_STATE_ONSLAUGHT - -local BASE_PHEROMONE = constants.BASE_PHEROMONE -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE -local ENEMY_PHEROMONE = constants.ENEMY_PHEROMONE -local BUILDING_PHEROMONES = constants.BUILDING_PHEROMONES - -local CHUNK_SIZE = constants.CHUNK_SIZE -local CHUNK_SIZE_DIVIDER = constants.CHUNK_SIZE_DIVIDER - -local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH -local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST - -local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS -local CHUNK_IMPASSABLE = constants.CHUNK_IMPASSABLE - -local RESOURCE_NORMALIZER = constants.RESOURCE_NORMALIZER - -local CHUNK_TICK = constants.CHUNK_TICK - -local GENERATOR_PHEROMONE_LEVEL_1 = constants.GENERATOR_PHEROMONE_LEVEL_1 -local GENERATOR_PHEROMONE_LEVEL_3 = constants.GENERATOR_PHEROMONE_LEVEL_3 -local GENERATOR_PHEROMONE_LEVEL_5 = constants.GENERATOR_PHEROMONE_LEVEL_5 -local GENERATOR_PHEROMONE_LEVEL_6 = constants.GENERATOR_PHEROMONE_LEVEL_6 - --- imported functions - -local setAreaInQueryChunkSize = queryUtils.setAreaInQueryChunkSize -local setAreaXInQuery = queryUtils.setAreaXInQuery -local setAreaYInQuery = queryUtils.setAreaYInQuery - -local setPlayerBaseGenerator = chunkPropertyUtils.setPlayerBaseGenerator -local addPlayerBaseGenerator = chunkPropertyUtils.addPlayerBaseGenerator -local setResourceGenerator = chunkPropertyUtils.setResourceGenerator -local addResourceGenerator = chunkPropertyUtils.addResourceGenerator - -local addNestCount = chunkPropertyUtils.addNestCount -local removeNestCount = chunkPropertyUtils.removeNestCount -local addHiveCount = chunkPropertyUtils.addHiveCount -local removeHiveCount = chunkPropertyUtils.removeHiveCount -local addTrapCount = chunkPropertyUtils.addTrapCount -local removeTrapCount = chunkPropertyUtils.removeTrapCount -local addTurretCount = chunkPropertyUtils.addTurretCount -local removeTurretCount = chunkPropertyUtils.removeTurretCount -local addUtilityCount = chunkPropertyUtils.addUtilityCount -local removeUtilityCount = chunkPropertyUtils.removeUtilityCount - -local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator -local setRaidNestActiveness = chunkPropertyUtils.setRaidNestActiveness -local setNestActiveness = chunkPropertyUtils.setNestActiveness -local getChunkById = mapUtils.getChunkById - -local processNestActiveness = chunkPropertyUtils.processNestActiveness - -local removeChunkBase = chunkPropertyUtils.removeChunkBase -local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount - -local findNearbyBase = chunkPropertyUtils.findNearbyBase -local createBase = baseUtils.createBase - -local upgradeEntity = baseUtils.upgradeEntity - -local euclideanDistancePoints = mathUtils.euclideanDistancePoints - -local getChunkBase = chunkPropertyUtils.getChunkBase -local setChunkBase = chunkPropertyUtils.setChunkBase -local setPassable = chunkPropertyUtils.setPassable -local setPathRating = chunkPropertyUtils.setPathRating - -local getChunkByXY = mapUtils.getChunkByXY - -local mMin = math.min -local mMax = math.max -local mFloor = math.floor - --- module code - -local function getEntityOverlapChunks(map, entity) - local boundingBox = entity.prototype.collision_box or entity.prototype.selection_box - local overlapArray = map.universe.chunkOverlapArray - - overlapArray[1] = -1 --LeftTop - overlapArray[2] = -1 --RightTop - overlapArray[3] = -1 --LeftBottom - overlapArray[4] = -1 --RightBottom - - if boundingBox then - local center = entity.position - - local topXOffset = boundingBox.left_top.x - local topYOffset = boundingBox.left_top.y - - local bottomXOffset = boundingBox.right_bottom.x - local bottomYOffset = boundingBox.right_bottom.y - - local leftTopChunkX = mFloor((center.x + topXOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - local leftTopChunkY = mFloor((center.y + topYOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - - local rightTopChunkX = mFloor((center.x + bottomXOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - local leftBottomChunkY = mFloor((center.y + bottomYOffset) * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - - overlapArray[1] = getChunkByXY(map, leftTopChunkX, leftTopChunkY) -- LeftTop - if (leftTopChunkX ~= rightTopChunkX) then - overlapArray[2] = getChunkByXY(map, rightTopChunkX, leftTopChunkY) -- RightTop - end - if (leftTopChunkY ~= leftBottomChunkY) then - overlapArray[3] = getChunkByXY(map, leftTopChunkX, leftBottomChunkY) -- LeftBottom - end - if (leftTopChunkX ~= rightTopChunkX) and (leftTopChunkY ~= leftBottomChunkY) then - overlapArray[4] = getChunkByXY(map, rightTopChunkX, leftBottomChunkY) -- RightBottom - end - end - return overlapArray -end - -local function scanPaths(chunk, map) - local surface = map.surface - local pass = CHUNK_IMPASSABLE - - local x = chunk.x - local y = chunk.y - - local universe = map.universe - local filteredEntitiesCliffQuery = universe.spFilteredEntitiesCliffQuery - local filteredTilesPathQuery = universe.spFilteredTilesPathQuery - local count_entities_filtered = surface.count_entities_filtered - local count_tiles_filtered = surface.count_tiles_filtered - - local passableNorthSouth = false - local passableEastWest = false - - setAreaYInQuery(filteredEntitiesCliffQuery, y, y + CHUNK_SIZE) - - for xi=x, x + CHUNK_SIZE do - setAreaXInQuery(filteredEntitiesCliffQuery, xi, xi + 1) - if (count_entities_filtered(filteredEntitiesCliffQuery) == 0) and - (count_tiles_filtered(filteredTilesPathQuery) == 0) - then - passableNorthSouth = true - break - end - end - - setAreaXInQuery(filteredEntitiesCliffQuery, x, x + CHUNK_SIZE) - - for yi=y, y + CHUNK_SIZE do - setAreaYInQuery(filteredEntitiesCliffQuery, yi, yi + 1) - if (count_entities_filtered(filteredEntitiesCliffQuery) == 0) and - (count_tiles_filtered(filteredTilesPathQuery) == 0) - then - passableEastWest = true - break - end - end - - if passableEastWest and passableNorthSouth then - pass = CHUNK_ALL_DIRECTIONS - elseif passableEastWest then - pass = CHUNK_EAST_WEST - elseif passableNorthSouth then - pass = CHUNK_NORTH_SOUTH - end - return pass -end - -local function scorePlayerBuildings(map, chunk) - local surface = map.surface - local universe = map.universe - setAreaInQueryChunkSize(universe.spbHasPlayerStructuresQuery, chunk) - if surface.count_entities_filtered(universe.spbHasPlayerStructuresQuery) > 0 then - return (surface.count_entities_filtered(universe.spbFilteredEntitiesPlayerQueryLowest) * GENERATOR_PHEROMONE_LEVEL_1) + - (surface.count_entities_filtered(universe.spbFilteredEntitiesPlayerQueryLow) * GENERATOR_PHEROMONE_LEVEL_3) + - (surface.count_entities_filtered(universe.spbFilteredEntitiesPlayerQueryHigh) * GENERATOR_PHEROMONE_LEVEL_5) + - (surface.count_entities_filtered(universe.spbFilteredEntitiesPlayerQueryHighest) * GENERATOR_PHEROMONE_LEVEL_6) - end - return 0 -end - -function chunkUtils.initialScan(chunk, map, tick) - local surface = map.surface - local universe = map.universe - setAreaInQueryChunkSize(universe.isFilteredTilesQuery, chunk) - local waterTiles = (1 - (surface.count_tiles_filtered(universe.isFilteredTilesQuery) * 0.0009765625)) * 0.80 - local enemyBuildings = surface.find_entities_filtered(universe.isFilteredEntitiesEnemyStructureQuery) - - if (waterTiles >= CHUNK_PASS_THRESHOLD) or (#enemyBuildings > 0) then - local neutralObjects = mMax(0, - mMin(1 - (surface.count_entities_filtered(universe.isFilteredEntitiesChunkNeutral) * 0.005), - 1) * 0.20) - local pass = scanPaths(chunk, map) - - local playerObjects = scorePlayerBuildings(map, chunk) - - if ((playerObjects > 0) or (#enemyBuildings > 0)) and (pass == CHUNK_IMPASSABLE) then - pass = CHUNK_ALL_DIRECTIONS - end - - if (pass ~= CHUNK_IMPASSABLE) then - setPassable(map, chunk, pass) - setPathRating(map, chunk, waterTiles + neutralObjects) - setPlayerBaseGenerator(map, chunk, playerObjects) - - local resources = surface.count_entities_filtered(universe.isCountResourcesQuery) * RESOURCE_NORMALIZER - setResourceGenerator(map, chunk, resources) - - local vanillaEntityTypeLookup = universe.vanillaEntityTypeLookup - local buildingHiveTypeLookup = universe.buildingHiveTypeLookup - local counts = map.chunkScanCounts - for i=1,#HIVE_BUILDINGS_TYPES do - counts[HIVE_BUILDINGS_TYPES[i]] = 0 - end - - if (#enemyBuildings > 0) then - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - - if universe.NEW_ENEMIES then - local unitList = surface.find_entities_filtered(universe.isFilteredEntitiesUnitQuery) - for i=1,#unitList do - local unit = unitList[i] - if (unit.valid) then - unit.destroy() - end - end - - for i = 1, #enemyBuildings do - local enemyBuilding = enemyBuildings[i] - chunkUtils.registerEnemyBaseStructure(map, enemyBuilding, base) - local entityName = enemyBuilding.name - local isVanilla = vanillaEntityTypeLookup[entityName] - if isVanilla or (not isVanilla and not buildingHiveTypeLookup[entityName]) then - upgradeEntity(enemyBuilding, base, map, nil, true) - end - end - else - for i=1,#enemyBuildings do - local building = enemyBuildings[i] - chunkUtils.registerEnemyBaseStructure(map, building, base) - end - end - end - - return chunk - end - end - - return -1 -end - -function chunkUtils.chunkPassScan(chunk, map) - local surface = map.surface - local universe = map.universe - setAreaInQueryChunkSize(universe.cpsFilteredTilesQuery, chunk) - local waterTiles = (1 - (surface.count_tiles_filtered(universe.cpsFilteredTilesQuery) * 0.0009765625)) * 0.80 - local enemyCount = surface.count_entities_filtered(universe.cpsFilteredEnemyAnyFound) - - if (waterTiles >= CHUNK_PASS_THRESHOLD) or (enemyCount > 0) then - local neutralObjects = mMax(0, - mMin(1 - (surface.count_entities_filtered(universe.cpsFilteredEntitiesChunkNeutral) * 0.005), - 1) * 0.20) - local pass = scanPaths(chunk, map) - - local playerObjects = getPlayerBaseGenerator(map, chunk) - - if ((playerObjects > 0) or (enemyCount > 0)) and (pass == CHUNK_IMPASSABLE) then - pass = CHUNK_ALL_DIRECTIONS - end - - setPassable(map, chunk, pass) - setPathRating(map, chunk, waterTiles + neutralObjects) - - if pass == CHUNK_IMPASSABLE then - return -1 - end - - return chunk - end - - return -1 -end - -function chunkUtils.mapScanPlayerChunk(chunk, map) - local playerObjects = scorePlayerBuildings(map, chunk) - setPlayerBaseGenerator(map, chunk, playerObjects) -end - -function chunkUtils.mapScanResourceChunk(chunk, map) - local universe = map.universe - setAreaInQueryChunkSize(universe.msrcCountResourcesQuery, chunk) - local surface = map.surface - local resources = surface.count_entities_filtered(universe.msrcCountResourcesQuery) * RESOURCE_NORMALIZER - setResourceGenerator(map, chunk, resources) - local waterTiles = (1 - (surface.count_tiles_filtered(universe.msrcFilteredTilesQuery) * 0.0009765625)) * 0.80 - local neutralObjects = mMax(0, - mMin(1 - (surface.count_entities_filtered(universe.msrcFilteredEntitiesChunkNeutral) * 0.005), - 1) * 0.20) - setPathRating(map, chunk, waterTiles + neutralObjects) -end - -function chunkUtils.mapScanEnemyChunk(chunk, map, tick) - local universe = map.universe - setAreaInQueryChunkSize(universe.msecFilteredEntitiesEnemyStructureQuery, chunk) - local buildings = map.surface.find_entities_filtered(universe.msecFilteredEntitiesEnemyStructureQuery) - local counts = map.chunkScanCounts - for i=1,#HIVE_BUILDINGS_TYPES do - counts[HIVE_BUILDINGS_TYPES[i]] = 0 - end - if (#buildings > 0) then - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - for i=1,#buildings do - local building = buildings[i] - - chunkUtils.registerEnemyBaseStructure(map, building, base) - end - end -end - -function chunkUtils.addBasesToAllEnemyStructures(universe, tick) - for chunkId, chunkPack in pairs(universe.chunkToNests) do - local map = chunkPack.map - if map.surface.valid then - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - setChunkBase(map, chunk, base) - end - end - for _, map in pairs(universe.maps) do - if map.surface.valid then - for chunkId in pairs(map.chunkToTurrets) do - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - setChunkBase(map, chunk, base) - end - for chunkId in pairs(map.chunkToHives) do - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - setChunkBase(map, chunk, base) - end - for chunkId in pairs(map.chunkToUtilities) do - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - setChunkBase(map, chunk, base) - end - for chunkId in pairs(map.chunkToTraps) do - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if not base then - base = createBase(map, chunk, tick) - end - setChunkBase(map, chunk, base) - end - end - end -end - -function chunkUtils.entityForPassScan(map, entity) - local overlapArray = getEntityOverlapChunks(map, entity) - - for i=1,#overlapArray do - local chunk = overlapArray[i] - if (chunk ~= -1) and not map.universe.chunkToPassScan[chunk.id] then - map.universe.chunkToPassScan[chunk.id] = { - map = map, - chunk = chunk - } - end - end -end - -local function newChunkId(universe) - local id = universe.chunkId - universe.chunkId = universe.chunkId + 1 - return id -end - -function chunkUtils.createChunk(map, topX, topY) - local chunk = { - x = topX, - y = topY, - dOrigin = euclideanDistancePoints(topX, topY, 0, 0), - id = newChunkId(map.universe) - } - chunk[BASE_PHEROMONE] = 0 - chunk[PLAYER_PHEROMONE] = 0 - chunk[RESOURCE_PHEROMONE] = 0 - chunk[ENEMY_PHEROMONE] = 0 - chunk[CHUNK_TICK] = 0 - - return chunk -end - -function chunkUtils.colorChunk(chunk, surface, color, ttl) - local lx = math.floor(chunk.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - local ly = math.floor(chunk.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - - rendering.draw_rectangle({ - color = color or {0.1, 0.3, 0.1, 0.6}, - width = 32 * 32, - filled = true, - left_top = {lx, ly}, - right_bottom = {lx+32, ly+32}, - surface = surface, - time_to_live = ttl or 180, - draw_on_ground = true, - visible = true - }) -end - -function chunkUtils.colorXY(x, y, surface, color) - local lx = math.floor(x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - local ly = math.floor(y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - - rendering.draw_rectangle({ - color = color or {0.1, 0.3, 0.1, 0.6}, - width = 32 * 32, - filled = true, - left_top = {lx, ly}, - right_bottom = {lx+32, ly+32}, - surface = surface, - time_to_live = 180, - draw_on_ground = true, - visible = true - }) -end - -function chunkUtils.registerEnemyBaseStructure(map, entity, base, skipCount) - local entityType = entity.type - - local addFunc - local universe = map.universe - local hiveTypeLookup = universe.buildingHiveTypeLookup - local hiveType = hiveTypeLookup[entity.name] - if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then - addFunc = addNestCount - elseif (hiveType == "turret") then - addFunc = addTurretCount - elseif (hiveType == "trap") then - addFunc = addTrapCount - elseif (hiveType == "utility") then - addFunc = addUtilityCount - elseif (hiveType == "hive") then - addFunc = addHiveCount - else - if (entityType == "turret") then - addFunc = addTurretCount - else - addFunc = addNestCount - end - end - - local added = false - local entityUnitNumber = entity.unit_number - local chunks = getEntityOverlapChunks(map, entity) - for i=1,#chunks do - local chunk = chunks[i] - if (chunk ~= -1) then - if addFunc(map, chunk, entityUnitNumber) then - added = true - setChunkBase(map, chunk, base) - end - if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then - processNestActiveness(map, chunk) - end - end - end - if added and (not skipCount) then - base.builtEnemyBuilding = base.builtEnemyBuilding + 1 - end -end - -function chunkUtils.unregisterEnemyBaseStructure(map, entity, damageTypeName, skipCount) - local entityType = entity.type - - local removeFunc - local hiveTypeLookup = map.universe.buildingHiveTypeLookup - local hiveType = hiveTypeLookup[entity.name] - if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then - removeFunc = removeNestCount - elseif (hiveType == "turret") then - removeFunc = removeTurretCount - elseif (hiveType == "trap") then - removeFunc = removeTrapCount - elseif (hiveType == "utility") then - removeFunc = removeUtilityCount - elseif (hiveType == "hive") then - removeFunc = removeHiveCount - else - if (entityType == "turret") then - removeFunc = removeTurretCount - else - hiveType = "biter-spawner" - removeFunc = removeNestCount - end - end - - local entityUnitNumber = entity.unit_number - local usedBases = {} - local chunks = getEntityOverlapChunks(map, entity) - for i=1,#chunks do - local chunk = chunks[i] - if (chunk ~= -1) then - local base = getChunkBase(map, chunk) - if (hiveType == "spitter-spawner") or (hiveType == "biter-spawner") then - setRaidNestActiveness(map, chunk, 0, base) - setNestActiveness(map, chunk, 0, base) - end - if removeFunc(map, chunk, entityUnitNumber) then - if not usedBases[base.id] then - usedBases[base.id] = true - if damageTypeName then - base.damagedBy[damageTypeName] = (base.damagedBy[damageTypeName] or 0) + 3 - base.deathEvents = base.deathEvents + 3 - end - if (not skipCount) and (hiveType ~= "trap") then - base.lostEnemyBuilding = base.lostEnemyBuilding + 1 - end - end - if (getEnemyStructureCount(map, chunk) <= 0) then - removeChunkBase(map, chunk, base) - end - end - end - end -end - -function chunkUtils.accountPlayerEntity(entity, map, addObject, base) - if (BUILDING_PHEROMONES[entity.type] ~= nil) and (entity.force.name ~= "enemy") then - local universe = map.universe - local entityValue = BUILDING_PHEROMONES[entity.type] - local overlapArray = getEntityOverlapChunks(map, entity) - if not addObject then - if base then - local pointValue = entityValue - if pointValue == GENERATOR_PHEROMONE_LEVEL_1 then - pointValue = 0 - end - base.destroyPlayerBuildings = base.destroyPlayerBuildings + 1 - if (base.stateAI == BASE_AI_STATE_ONSLAUGHT) then - base.unitPoints = base.unitPoints + pointValue - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. math.floor(pointValue) .. ". [Structure Kill] Total: " .. string.format("%.2f", base.unitPoints)) - end - else - base.unitPoints = base.unitPoints + (pointValue * 0.12) - if universe.aiPointsPrintGainsToChat then - game.print(map.surface.name .. ": Points: +" .. math.floor(pointValue) .. ". [Structure Kill] Total: " .. string.format("%.2f", base.unitPoints)) - end - end - end - entityValue = -entityValue - end - - for i=1,#overlapArray do - local chunk = overlapArray[i] - if (chunk ~= -1) then - addPlayerBaseGenerator(map, chunk, entityValue) - end - end - end - return entity -end - -function chunkUtils.unregisterResource(entity, map) - if entity.prototype.infinite_resource then - return - end - local overlapArray = getEntityOverlapChunks(map, entity) - - for i=1,#overlapArray do - local chunk = overlapArray[i] - if (chunk ~= -1) then - addResourceGenerator(map, chunk, -RESOURCE_NORMALIZER) - end - end -end - -function chunkUtils.registerResource(entity, map) - local overlapArray = getEntityOverlapChunks(map, entity) - - for i=1,#overlapArray do - local chunk = overlapArray[i] - if (chunk ~= -1) then - addResourceGenerator(map, chunk, RESOURCE_NORMALIZER) - end - end -end - -function chunkUtils.makeImmortalEntity(surface, entity) - local repairPosition = entity.position - local repairName = entity.name - local repairForce = entity.force - local repairDirection = entity.direction - - local wires - if (entity.type == "electric-pole") then - wires = entity.neighbours - end - entity.destroy() - local newEntity = surface.create_entity({position=repairPosition, - name=repairName, - direction=repairDirection, - force=repairForce}) - if wires then - for _,v in pairs(wires.copper) do - if (v.valid) then - newEntity.connect_neighbour(v); - end - end - for _,v in pairs(wires.red) do - if (v.valid) then - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_RED, target_entity = v}); - end - end - for _,v in pairs(wires.green) do - if (v.valid) then - newEntity.connect_neighbour({wire = DEFINES_WIRE_TYPE_GREEN, target_entity = v}); - end - end - end - - newEntity.destructible = false -end - -chunkUtilsG = chunkUtils -return chunkUtils diff --git a/Rampant_3.1.2/libs/Constants.lua b/Rampant_3.1.2/libs/Constants.lua deleted file mode 100644 index d6a2523e..00000000 --- a/Rampant_3.1.2/libs/Constants.lua +++ /dev/null @@ -1,1669 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if constantsG then - return constantsG -end -local constants = {} - --- versions - -constants.VERSION_5 = 5 -constants.VERSION_10 = 10 -constants.VERSION_11 = 11 -constants.VERSION_12 = 12 -constants.VERSION_16 = 16 -constants.VERSION_18 = 18 -constants.VERSION_20 = 20 -constants.VERSION_22 = 22 -constants.VERSION_23 = 23 -constants.VERSION_25 = 25 -constants.VERSION_26 = 26 -constants.VERSION_27 = 27 -constants.VERSION_28 = 28 -constants.VERSION_33 = 33 -constants.VERSION_38 = 38 -constants.VERSION_41 = 41 -constants.VERSION_44 = 44 -constants.VERSION_51 = 51 -constants.VERSION_57 = 57 -constants.VERSION_72 = 72 -constants.VERSION_73 = 73 -constants.VERSION_75 = 75 -constants.VERSION_76 = 76 -constants.VERSION_77 = 77 -constants.VERSION_85 = 85 -constants.VERSION_86 = 86 -constants.VERSION_87 = 87 -constants.VERSION_88 = 88 - --- misc - --- constants.WATER_TILE_NAMES = { "water", "deepwater", "water-green", "deepwater-green" } - -constants.MAGIC_MAXIMUM_NUMBER = 1e99 -- used in loops trying to find the lowest/highest score -constants.MAGIC_MAXIMUM_BASE_NUMBER = 100000000 -constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MIN = (1 - 0.001) -constants.RETREAT_MOVEMENT_PHEROMONE_LEVEL_MAX = (1 - 0.800) - -constants.TEMPERAMENT_RANGE_MAX = 10000 -constants.TEMPERAMENT_RANGE_MIN = -constants.TEMPERAMENT_RANGE_MAX -constants.TEMPERAMENT_DIVIDER = 1 / (2 * constants.TEMPERAMENT_RANGE_MAX) - -constants.PROCESS_QUEUE_SIZE = 105 -constants.SCAN_QUEUE_SIZE = 2 -constants.RESOURCE_QUEUE_SIZE = 2 -constants.ENEMY_QUEUE_SIZE = 1 -constants.PLAYER_QUEUE_SIZE = 2 -constants.CLEANUP_QUEUE_SIZE = 8 -constants.ATTACK_QUEUE_SIZE = 18 -constants.BASE_QUEUE_SIZE = 1 -constants.PROCESS_STATIC_QUEUE_SIZE = 20 -constants.PROCESS_PLAYER_BOUND = 128 -constants.VICTORY_SCENT_BOUND = 128 - -constants.TICKS_A_SECOND = 60 -constants.TICKS_A_MINUTE = constants.TICKS_A_SECOND * 60 - -constants.CHUNK_PASS_THRESHOLD = 0.2 - -constants.COOLDOWN_RALLY = constants.TICKS_A_SECOND * 10 -constants.COOLDOWN_RETREAT = constants.TICKS_A_SECOND * 10 -constants.COOLDOWN_DRAIN = constants.TICKS_A_SECOND * 1 - -constants.RESOURCE_NORMALIZER = 1 / 1024 - -constants.PLAYER_PHEROMONE_MULTIPLER = 100 -constants.ENEMY_PHEROMONE_MULTIPLER = 500 - -constants.DURATION_ACTIVE_NEST = 120 * constants.TICKS_A_SECOND - --- chunk properties - -constants.CHUNK_SIZE = 32 -constants.CHUNK_AND_HALF_SIZE = constants.CHUNK_SIZE * 1.5 -constants.DOUBLE_CHUNK_SIZE = constants.CHUNK_SIZE * 2 -constants.TRIPLE_CHUNK_SIZE = constants.CHUNK_SIZE * 3 -constants.HALF_CHUNK_SIZE = constants.CHUNK_SIZE / 2 -constants.QUARTER_CHUNK_SIZE = constants.HALF_CHUNK_SIZE / 2 - -constants.CHUNK_SIZE_DIVIDER = 1 / constants.CHUNK_SIZE - -constants.CHUNK_IMPASSABLE = 0 -constants.CHUNK_NORTH_SOUTH = 1 -constants.CHUNK_EAST_WEST = 2 -constants.CHUNK_ALL_DIRECTIONS = 3 --- constants.CHUNK_PLAYER_BORDER = 4 --- constants.CHUNK_PLAYER_INTERIOR = 5 - -constants.BASE_SEARCH_RADIUS = 4 * constants.CHUNK_SIZE -constants.EVOLUTION_INCREMENTS = 0.05 - -constants.DIVISOR_DEATH_TRAIL_TABLE = { 0.75, 0.65, 0.55, 0.45, 0.35 } - --- ai - -constants.RESOURCE_MINIMUM_FORMATION_DELTA = 15 - -constants.MINIMUM_AI_POINTS = 400 -constants.AI_POINT_GENERATOR_AMOUNT = 15 -constants.AI_SQUAD_COST = 175 -constants.RECOVER_NEST_COST = constants.AI_SQUAD_COST -constants.RECOVER_WORM_COST = constants.AI_SQUAD_COST * 0.5 -constants.AI_VENGENCE_SQUAD_COST = 45 -constants.AI_SETTLER_COST = 300 -constants.AI_BASE_BUILDING_COST = 500 -constants.AI_TUNNEL_COST = 100 -constants.AI_MAX_POINTS = 15500 -constants.AI_MAX_OVERFLOW_POINTS = constants.AI_MAX_POINTS * 3 - -constants.RAIDING_MINIMUM_BASE_THRESHOLD = 550 - -constants.AI_UNIT_REFUND = 3 - -constants.AI_MAX_BITER_GROUP_SIZE = 600 - -constants.AI_SQUAD_MERGE_THRESHOLD = constants.AI_MAX_BITER_GROUP_SIZE * 0.75 - -constants.AI_MAX_SQUADS_PER_CYCLE = 7 - -constants.BASE_AI_STATE_PEACEFUL = 1 -constants.BASE_AI_STATE_AGGRESSIVE = 2 -constants.BASE_AI_STATE_RAIDING = 4 -constants.BASE_AI_STATE_MIGRATING = 5 -constants.BASE_AI_STATE_SIEGE = 6 -constants.BASE_AI_STATE_ONSLAUGHT = 7 - -constants.stateEnglish = {} -constants.stateEnglish[constants.BASE_AI_STATE_PEACEFUL] = "AI_STATE_PEACEFUL" -constants.stateEnglish[constants.BASE_AI_STATE_AGGRESSIVE] = "AI_STATE_AGGRESSIVE" -constants.stateEnglish[constants.BASE_AI_STATE_RAIDING] = "AI_STATE_RAIDING" -constants.stateEnglish[constants.BASE_AI_STATE_MIGRATING] = "AI_STATE_MIGRATING" -constants.stateEnglish[constants.BASE_AI_STATE_SIEGE] = "AI_STATE_SIEGE" -constants.stateEnglish[constants.BASE_AI_STATE_ONSLAUGHT] = "AI_STATE_ONSLAUGHT" - -constants.BASE_GENERATION_STATE_DORMANT = 0 -constants.BASE_GENERATION_STATE_ACTIVE = 1 --- constants.BASE_AI_STATE_OVERDRIVE = 2 --- constants.BASE_AI_STATE_MUTATE = 3 - -constants.ACTIVE_NESTS_PER_AGGRESSIVE_GROUPS = 30 -constants.ALL_NESTS_PER_SIEGE_GROUPS = 150 -constants.AGGRESSIVE_CAN_ATTACK_WAIT_MIN_DURATION = 0.5 -constants.AGGRESSIVE_CAN_ATTACK_WAIT_MAX_DURATION = 3 - -constants.BASE_AI_MIN_STATE_DURATION = 10 -constants.BASE_AI_MAX_STATE_DURATION = 25 - --- constants.AI_MIN_TEMPERAMENT_DURATION = 25 --- constants.AI_MAX_TEMPERAMENT_DURATION = 32 - -constants.BASE_GENERATION_MIN_STATE_DURATION = 12 -constants.BASE_GENERATION_MAX_STATE_DURATION = 20 - --- ai base - -constants.BASE_CLEAN_DISTANCE = 13 - -constants.BASE_COLLECTION_THRESHOLD = constants.TICKS_A_MINUTE * 2 - -constants.BASE_DISTANCE_TO_EVO_INDEX = 1 / 9600 - -constants.BASE_SPAWNER_UPGRADE = 500 -constants.BASE_WORM_UPGRADE = 400 -constants.BASE_UPGRADE = 1500 - -constants.BASE_DISTANCE_THRESHOLD = 30 * constants.CHUNK_SIZE -constants.BASE_DISTANCE_LEVEL_BONUS = 7.5 - -constants.BASE_PROCESS_INTERVAL = constants.TICKS_A_SECOND * 20 - --- ai retreat - -constants.NO_RETREAT_BASE_PERCENT = 0.10 -constants.NO_RETREAT_EVOLUTION_BONUS_MAX = 0.25 - --- pheromone amounts - -constants.DEATH_PHEROMONE_GENERATOR_AMOUNT = 0.001 -constants.DOUBLE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 2 -constants.TEN_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 10 -constants.FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT * 5 -constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT = 300 - -constants.IMPASSABLE_TERRAIN_GENERATOR_AMOUNT = 0 - --- pheromone diffusion amounts - -constants.MOVEMENT_GENERATOR_PERSISTANCE = 0.92 - --- chunk attributes - -constants.BASE_PHEROMONE = 1 -constants.PLAYER_PHEROMONE = 2 -constants.RESOURCE_PHEROMONE = 3 -constants.ENEMY_PHEROMONE = 4 -constants.CHUNK_TICK = 5 - --- constants.PATH_RATING = 7 - --- Squad status - -constants.SQUAD_RETREATING = 1 -- used during squad retreat -constants.SQUAD_GUARDING = 2 -- used when squad is idle -constants.SQUAD_BURROWING = 3 -constants.SQUAD_RAIDING = 4 -- used when player stuff is close -constants.SQUAD_SETTLING = 5 -constants.SQUAD_BUILDING = 6 - --- Squad Related - -constants.MINIMUM_EXPANSION_DISTANCE = 10 - -constants.RETREAT_GRAB_RADIUS = 24 -constants.RETREAT_SPAWNER_GRAB_RADIUS = 75 - -constants.BASE_RALLY_CHANCE = 0.02 -constants.BONUS_RALLY_CHANCE = 0.04 - -constants.RALLY_CRY_DISTANCE = 96 -constants.SETTLER_DISTANCE = 224 - -constants.GROUP_MERGE_DISTANCE = 28 - -constants.MAX_PENALTY_BEFORE_PURGE = 36000 - -constants.COMMAND_TIMEOUT = 30 * 60 - --- player building pheromones - -constants.GENERATOR_PHEROMONE_LEVEL_1 = 25 -constants.GENERATOR_PHEROMONE_LEVEL_2 = 100 -constants.GENERATOR_PHEROMONE_LEVEL_3 = 500 -constants.GENERATOR_PHEROMONE_LEVEL_4 = 1000 -constants.GENERATOR_PHEROMONE_LEVEL_5 = 1750 -constants.GENERATOR_PHEROMONE_LEVEL_6 = 6000 - -constants.BUILDING_PHEROMONES = {} -constants.BUILDING_PHEROMONES["wall"] = constants.GENERATOR_PHEROMONE_LEVEL_1 -constants.BUILDING_PHEROMONES["transport-belt"] = constants.GENERATOR_PHEROMONE_LEVEL_1 - -constants.BUILDING_PHEROMONES["splitter"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["pump"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["offshore-pump"] = constants.GENERATOR_PHEROMONE_LEVEL_3 - -constants.BUILDING_PHEROMONES["lamp"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["solar-panel"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["programmable-speaker"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["accumulator"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["assembling-machine"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["turret"] = constants.GENERATOR_PHEROMONE_LEVEL_3 -constants.BUILDING_PHEROMONES["ammo-turret"] = constants.GENERATOR_PHEROMONE_LEVEL_3 - -constants.BUILDING_PHEROMONES["furnace"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["lab"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["roboport"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["beacon"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["radar"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["electric-turret"] = constants.GENERATOR_PHEROMONE_LEVEL_5 - -constants.BUILDING_PHEROMONES["boiler"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["generator"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["fluid-turret"] = constants.GENERATOR_PHEROMONE_LEVEL_5 -constants.BUILDING_PHEROMONES["mining-drill"] = constants.GENERATOR_PHEROMONE_LEVEL_5 - -constants.BUILDING_PHEROMONES["artillery-turret"] = constants.GENERATOR_PHEROMONE_LEVEL_6 -constants.BUILDING_PHEROMONES["reactor"] = constants.GENERATOR_PHEROMONE_LEVEL_6 -constants.BUILDING_PHEROMONES["rocket-silo"] = constants.GENERATOR_PHEROMONE_LEVEL_6 - -constants.VICTORY_SCENT = {} -constants.VICTORY_SCENT["wall"] = constants.BUILDING_PHEROMONES["wall"] * 10 -constants.VICTORY_SCENT["transport-belt"] = constants.BUILDING_PHEROMONES["transport-belt"] * 10 - -constants.VICTORY_SCENT["splitter"] = constants.BUILDING_PHEROMONES["splitter"] * 10 -constants.VICTORY_SCENT["pump"] = constants.BUILDING_PHEROMONES["pump"] * 10 -constants.VICTORY_SCENT["offshore-pump"] = constants.BUILDING_PHEROMONES["offshore-pump"] * 10 - -constants.VICTORY_SCENT["lamp"] = constants.BUILDING_PHEROMONES["lamp"] * 10 -constants.VICTORY_SCENT["solar-panel"] = constants.BUILDING_PHEROMONES["solar-panel"] * 10 -constants.VICTORY_SCENT["programmable-speaker"] = constants.BUILDING_PHEROMONES["programmable-speaker"] * 10 -constants.VICTORY_SCENT["accumulator"] = constants.BUILDING_PHEROMONES["accumulator"] * 10 -constants.VICTORY_SCENT["assembling-machine"] = constants.BUILDING_PHEROMONES["assembling-machine"] * 10 -constants.VICTORY_SCENT["turret"] = constants.BUILDING_PHEROMONES["turret"] * 10 -constants.VICTORY_SCENT["ammo-turret"] = constants.BUILDING_PHEROMONES["ammo-turret"] * 10 - -constants.VICTORY_SCENT["furnace"] = constants.BUILDING_PHEROMONES["furnace"] * 10 -constants.VICTORY_SCENT["lab"] = constants.BUILDING_PHEROMONES["lab"] * 10 -constants.VICTORY_SCENT["roboport"] = constants.BUILDING_PHEROMONES["roboport"] * 10 -constants.VICTORY_SCENT["beacon"] = constants.BUILDING_PHEROMONES["beacon"] * 10 -constants.VICTORY_SCENT["radar"] = constants.BUILDING_PHEROMONES["radar"] * 10 -constants.VICTORY_SCENT["electric-turret"] = constants.BUILDING_PHEROMONES["electric-turret"] * 10 - -constants.VICTORY_SCENT["boiler"] = constants.BUILDING_PHEROMONES["boiler"] * 10 -constants.VICTORY_SCENT["generator"] = constants.BUILDING_PHEROMONES["generator"] * 10 -constants.VICTORY_SCENT["fluid-turret"] = constants.BUILDING_PHEROMONES["fluid-turret"] * 10 -constants.VICTORY_SCENT["mining-drill"] = constants.BUILDING_PHEROMONES["mining-drill"] * 10 - -constants.VICTORY_SCENT["artillery-turret"] = constants.BUILDING_PHEROMONES["artillery-turret"] * 10 -constants.VICTORY_SCENT["reactor"] = constants.BUILDING_PHEROMONES["reactor"] * 10 -constants.VICTORY_SCENT["rocket-silo"] = constants.BUILDING_PHEROMONES["rocket-silo"] * 10 - --- map settings tweaks - -constants.PATH_FINDER_SHORT_REQUEST_RATIO = 0.8 -constants.PATH_FINDER_SHORT_CACHE_SIZE = 25 -constants.PATH_FINDER_LONG_REQUEST_RATIO = 5 -constants.PATH_FINDER_MIN_STEPS_TO_CHECK_PATH = 1000 - -constants.MAX_FAILED_BEHAVIORS = 1000 - -constants.UNIT_GROUP_DISOWN_DISTANCE = 100 -constants.UNIT_GROUP_TICK_TOLERANCE = 3600000 - -constants.UNIT_GROUP_MAX_RADIUS = 15 -constants.UNIT_GROUP_MAX_SPEED_UP = 2 -constants.UNIT_GROUP_MAX_SLOWDOWN = 1.0 -constants.UNIT_GROUP_SLOWDOWN_FACTOR = 1.0 - -constants.BASE_ALIGNMENT_NEUTRAL = 1 -constants.BASE_ALIGNMENT_FIRE = 2 -constants.BASE_ALIGNMENT_NUCLEAR = 3 -constants.BASE_ALIGNMENT_SUICIDE = 4 -constants.BASE_ALIGNMENT_INFEST = 5 -constants.BASE_ALIGNMENT_ACID = 6 -constants.BASE_ALIGNMENT_FIRE = 7 -constants.BASE_ALIGNMENT_PHYSICAL = 8 -constants.BASE_ALIGNMENT_LASER = 9 -constants.BASE_ALIGNMENT_INFERNO = 10 -constants.BASE_ALIGNMENT_POISON = 11 -constants.BASE_ALIGNMENT_TROLL = 12 -constants.BASE_ALIGNMENT_FAST = 13 -constants.BASE_ALIGNMENT_WEB = 14 -constants.BASE_ALIGNMENT_DECAYING = 15 -constants.BASE_ALIGNMENT_UNDYING = 16 -constants.BASE_ALIGNMENT_ENERGY_THIEF = 17 -constants.BASE_ALIGNMENT_ELECTRIC = 18 -constants.BASE_ALIGNMENT_WASP = 19 -constants.BASE_ALIGNMENT_SPAWNER = 20 - --- sentinels - -constants.ENERGY_THIEF_CONVERSION_TABLE = { - ["generator"] = "unit", - ["pump"] = "smallUnit", - ["inserter"] = "smallUnit", - ["reactor"] = "bigUnit", - ["accumulator"] = "unit", - ["solar-panel"] = "unit", - ["assembling-machine"] = "unit", - ["roboport"] = "bigUnit", - ["beacon"] = "bigUnit", - ["programmable-speaker"] = "unit", - ["mining-drill"] = "unit", - ["rocket-silo"] = "bigUnit", - ["lamp"] = "smallUnit", - ["radar"] = "bigUnit", - ["lab"] = "unit", - ["electric-turret"] = "unit", - ["electric-pole"] = "pole" -} - -constants.ENERGY_THIEF_DRAIN_CRYSTALS = { - "crystal-v1-drain-rampant", - "crystal-v2-drain-rampant", - "crystal-v3-drain-rampant", - "crystal-v4-drain-rampant", - "crystal-v5-drain-rampant", - "crystal-v6-drain-rampant", - "crystal-v7-drain-rampant", - "crystal-v8-drain-rampant", - "crystal-v9-drain-rampant", - "crystal-v10-drain-rampant" -} - -constants.NEIGHBOR_DIVIDER = {1/1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8} - --- unit spawners - -local function roundToNearest(number, multiple) - local num = number + (multiple * 0.5) - return num - (num % multiple) -end - -local tiers10 = {} - -local tierStart = settings.startup["rampant--tierStart"].value -local tierEnd = settings.startup["rampant--tierEnd"].value - -local function buildTier(size, tiers) - local step = (tierEnd - tierStart) / (size - 1) - local i = tierStart - for _=1,size do - tiers[#tiers+1] = roundToNearest(i, 1) - i = i + step - end -end - -buildTier(10, tiers10) - -constants.TIER_UPGRADE_SET_10 = tiers10 - -local variations = settings.startup["rampant--newEnemyVariations"].value - -constants.ENERGY_THIEF_LOOKUP = {} - -for tier=1, 10 do - for i=1,variations do - constants.ENERGY_THIEF_LOOKUP["energy-thief-worm-v" .. i .. "-t" .. tier .. "-rampant"] = true - end -end - -for tier=1, 10 do - for i=1,variations do - constants.ENERGY_THIEF_LOOKUP["energy-thief-biter-v" .. i .. "-t" .. tier .. "-rampant"] = true - end -end - -local function hexToRGBA(hex) - local index = 1 - local a = {"r","g","b","a"} - local tint = {} - string.gsub( - hex, - "..", - function(cc) - tint[a[index]] = tonumber(cc, 16) / 255 - index = index+1 - end - ) - return tint -end - -local function convertHexPairs(hexPairString) - if #hexPairString ~= 26 then - error( - "Invalid rgba hex value for Rampant new enemy color, each color needs to have `rrggbbaa rrggbbaa rrggbbaa`:" .. hexPairString - ) - end - local index = 1 - local a = {"tint", "tint2", "tint3"} - local tints = {} - for hex in string.gmatch(hexPairString, "%x%x%x%x%x%x%x%x") do - tints[a[index]] = hexToRGBA(hex) - index = index + 1 - end - return tints -end - -constants.FACTIONS_BY_DAMAGE_TYPE = { - ["physical"] = { - -- "physical", - -- "troll", - -- "acid", - -- "fast", - -- "spawner" - }, - ["impact"] = { - -- "nuclear", - -- "suicide", - -- "spawner", - -- "physical", - -- "troll" - }, - ["poison"] = { - -- "poison", - -- "suicide", - -- "nuclear", - -- "acid" - }, - ["explosion"] = { - -- "fast", - -- "troll", - -- "physical", - -- "acid" - }, - ["fire"] = { - -- "fire", - -- "inferno", - -- "poison", - -- "fast" - }, - ["laser"] = { - -- "laser", - -- "energy-thief", - -- "electric", - -- "wasp", - -- "spawner" - }, - ["acid"] = { - -- "acid", - -- "inferno", - -- "fire", - -- "poison" - }, - ["electric"] = { - -- "laser", - -- "energy-thief", - -- "electric", - -- "wasp", - -- "spawner" - } -} - -constants.FACTION_SET = {} - -local neutralTints = convertHexPairs(settings.startup["rampant--neutralTints"].value) -constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "neutral", - tint = neutralTints.tint, - tint2 = neutralTints.tint2, - tint3 = neutralTints.tint3, - acceptRate = {1, 7, 0.3, 0.1}, - evo = 0, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - majorResistances = {}, - minorResistances = {}, - attributes = {}, - drops = {"nilArtifact"} - }, - { - type = "spitter", - attackAttributes = {"spit", "acid"}, - name = "spitter", - majorResistances = {}, - minorResistances = {}, - attributes = {}, - drops = {"nilArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {}, - acceptRate = {1, 10, 0.3, 0.5}, - minorResistances = {}, - attributes = {}, - drops = {"nilArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {}, - acceptRate = {1, 10, 0.3, 0.5}, - minorResistances = {}, - attributes = {}, - drops = {"nilArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {}, - acceptRate = {1, 10, 0.8, 0.6}, - minorResistances = {}, - attackAttributes = {"spit", "acid"}, - attributes = {}, - drops = {"nilArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {}, - minorResistances = {}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"nilArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } -} - -if settings.startup["rampant--acidEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "acid" - constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "acid" - constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "acid" - constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "acid" - local acidTints = convertHexPairs(settings.startup["rampant--acidTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "acid", - tint = acidTints.tint, - tint2 = acidTints.tint2, - tint3 = acidTints.tint3, - acceptRate = {1, 10, 0.1, 0.2}, - evo = 0, - units = { - { - type = "biter", - attackAttributes = {"melee", "acidPool"}, - name = "biter", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - attributes = {}, - drops = {"greenArtifact"} - }, - { - type = "spitter", - attackAttributes = {"spit", "acid"}, - name = "spitter", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - attributes = {}, - drops = {"greenArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {}, - drops = {"greenArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {}, - drops = {"greenArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - attackAttributes = {"spit", "acid"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"greenArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"acid"}, - minorResistances = {"poison"}, - acceptRate = {2, 10, 0.001, 0.0175}, - attributes = {"spawnDuringDays"}, - drops = {"greenArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--laserEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "laser" - constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "laser" - local laserTints = convertHexPairs(settings.startup["rampant--laserTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "laser", - tint = laserTints.tint, - tint2 = laserTints.tint2, - tint3 = laserTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.10, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - majorResistances = {"laser", "electric"}, - attributes = {}, - drops = {"blueArtifact"} - }, - { - type = "spitter", - attackAttributes = {"spit", "laser", "cluster"}, - name = "spitter", - majorResistances = {"laser", "electric"}, - attributes = {}, - drops = {"blueArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {"laser", "electric"}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {}, - drops = {"blueArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"laser", "electric"}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {}, - drops = {"blueArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"laser", "electric"}, - attackAttributes = {"spit", "laser", "cluster"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"blueArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"laser", "electric"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"blueArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--fireEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "fire" - constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "fire" - local fireTints = convertHexPairs(settings.startup["rampant--fireTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "fire", - tint = fireTints.tint, - tint2 = fireTints.tint2, - tint3 = fireTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.12, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - attributes = {}, - drops = {"redArtifact"} - }, - { - type = "spitter", - attackAttributes = {"spit", "acid"}, - name = "spitter", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - attributes = {}, - drops = {"redArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {}, - drops = {"redArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"fire", "acid"}, - acceptRate = {1, 10, 0.3, 0.5}, - minorResistances = {}, - attributes = {}, - drops = {"redArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - attackAttributes = {"spit", "acid"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"redArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"redArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--infernoEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "inferno" - constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "inferno" - local infernoTints = convertHexPairs(settings.startup["rampant--infernoTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "inferno", - tint = infernoTints.tint, - tint2 = infernoTints.tint2, - tint3 = infernoTints.tint3, - acceptRate = {3, 10, 0.1, 0.125}, - evo = 0.2, - units = { - { - type = "spitter", - attackAttributes = {"spitFire", "acid"}, - name = "spitter", - majorResistances = {"acid", "fire"}, - minorWeaknesses = {"poison"}, - attributes = {}, - drops = {"orangeArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {"acid", "fire"}, - minorWeaknesses = {"poison"}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {}, - drops = {"orangeArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"acid", "fire"}, - minorWeaknesses = {"poison"}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spitFire", "acid"}, - attributes = {}, - drops = {"orangeArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"fire", "acid"}, - minorResistances = {}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"orangeArtifact"}, - buildSets = { - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--waspEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "wasp" - constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "wasp" - local waspTints = convertHexPairs(settings.startup["rampant--waspTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "wasp", - tint = waspTints.tint, - tint2 = waspTints.tint2, - tint3 = waspTints.tint3, - acceptRate = {3, 10, 0.1, 0.125}, - evo = 0.2, - units = { - { - type = "drone", - attackAttributes = {"spit", "acid"}, - name = "spitter-wasp", - attributes = {"followsPlayer", "skipKillCount"}, - drops = {} - }, - { - type = "drone", - attackAttributes = {"stream", "acid"}, - name = "worm-wasp", - attributes = {"stationary", "skipKillCount"}, - drops = {} - }, - { - type = "spitter", - attackAttributes = {"capsule", {"drone", "spitter-wasp"}}, - name = "spitter", - attributes = {}, - drops = {"purpleArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - attributes = {}, - acceptRate = {1, 10, 0.4, 0.6}, - drops = {"purpleArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - attackAttributes = {"capsule", {"drone", "worm-wasp"}}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"purpleArtifact"} - }, - { - type = "hive", - name = "hive", - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"purpleArtifact"}, - buildSets = { - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--spawnerEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "spawner" - constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "spawner" - constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "spawner" - constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "spawner" - local spawnerTints = convertHexPairs(settings.startup["rampant--spawnerTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "spawner", - tint = spawnerTints.tint, - tint2 = spawnerTints.tint2, - tint3 = spawnerTints.tint3, - acceptRate = {3, 10, 0.1, 0.125}, - evo = 0.2, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "spawn", - attributes = {"fragile", "unstable", "smallest", "skipKillCount"}, - drops = {} - }, - { - type = "drone", - attackAttributes = {"touch", "acid"}, - name = "spitter-egg", - attributes = {"stationary", "bigger", "highestRegen", {"clusterDeath", "spawn"}, "skipKillCount"}, - drops = {} - }, - { - type = "drone", - attackAttributes = {"touch", "acid"}, - name = "worm-egg", - attributes = {"stationary", "bigger", "highestRegen", {"clusterDeath", "spawn"}, "skipKillCount"}, - drops = {} - }, - { - type = "spitter", - attackAttributes = {"capsule", {"drone", "spitter-egg"}}, - name = "spitter", - attributes = {"selfDamaging"}, - drops = {"orangeArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - attributes = {}, - drops = {"orangeArtifact"}, - acceptRate = {1, 10, 0.4, 0.6}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - attackAttributes = {"capsule", {"drone", "worm-egg"}}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"orangeArtifact"} - }, - { - type = "hive", - name = "hive", - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"orangeArtifact"}, - buildSets = { - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--electricEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "electric" - constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "electric" - local electricTints = convertHexPairs(settings.startup["rampant--electricTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "electric", - tint = electricTints.tint, - tint2 = electricTints.tint2, - tint3 = electricTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.1, - units = { - { - type = "biter", - attackAttributes = {"scatterBeam", "electric"}, - name = "biter", - majorResistances = {"electric"}, - minorResistances = {"laser"}, - attributes = {"lowHealth"}, - drops = {"blueArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"electric"}, - minorResistances = {"laser"}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {}, - drops = {"blueArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"electric"}, - minorResistances = {"laser"}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spit", "electric", "cluster"}, - attributes = {}, - drops = {"blueArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"electric"}, - minorResistances = {"laser"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"blueArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--physicalEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "physical" - constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "physical" - constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "physical" - local physicalTints = convertHexPairs(settings.startup["rampant--physicalTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "physical", - tint = physicalTints.tint, - tint2 = physicalTints.tint2, - tint3 = physicalTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.12, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - majorResistances = {"physical", "explosion"}, - minorWeaknesses = {"laser", "electric"}, - attributes = {"highHealth", "longReach", "big", "slowMovement", "altBiterArmored"}, - drops = {"redArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"physical", "explosion"}, - minorWeaknesses = {"laser", "electric"}, - attributes = {"highHealth", "bigger"}, - acceptRate = {1, 10, 0.4, 0.6}, - drops = {"redArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"physical", "explosion"}, - minorWeaknesses = {"laser", "electric"}, - attackAttributes = {"spit", "physical"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {"highHealth", "bigger"}, - drops = {"redArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"physical", "explosion"}, - minorResistances = {"laser", "electric"}, - attributes = {"highHealth", "bigger", "spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"redArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--trollEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "troll" - constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "troll" - constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "troll" - local trollTints = convertHexPairs(settings.startup["rampant--trollTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "troll", - tint = trollTints.tint, - tint2 = trollTints.tint2, - tint3 = trollTints.tint3, - acceptRate = {3, 10, 0.1, 0.125}, - evo = 0.17, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - minorResistances = {"physical", "explosion"}, - majorWeaknesses = {"fire"}, - attributes = {"highestHealth", "longReach", "bigger", - "highestRegen", "slowMovement", "altBiterArmored"}, - drops = {"greenArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - minorResistances = {"physical", "explosion"}, - majorWeaknesses = {"fire"}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {"highestHealth", "bigger", "highestRegen"}, - drops = {"greenArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - minorResistances = {"physical", "explosion"}, - majorWeaknesses = {"fire"}, - attackAttributes = {"spit", "physical"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {"highestHealth", "bigger", "highestRegen"}, - drops = {"greenArtifact"} - }, - { - type = "hive", - name = "hive", - minorResistances = {"physical", "explosion"}, - majorWeaknesses = {"fire"}, - attributes = {"highestHealth", "bigger", "highRegen","spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"greenArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--poisonEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "poison" - constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "poison" - constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "poison" - local poisonTints = convertHexPairs(settings.startup["rampant--poisonTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "poison", - tint = poisonTints.tint, - tint2 = poisonTints.tint2, - tint3 = poisonTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.17, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - minorResistances = {"fire"}, - majorResistances = {"poison"}, - minorWeaknesses = {"electric", "explosion", "laser"}, - attributes = {"poisonDeathCloud"}, - drops = {"greenArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - minorResistances = {"fire"}, - majorResistances = {"poison"}, - minorWeaknesses = {"electric", "explosion", "laser"}, - attributes = {"poisonDeathCloud"}, - acceptRate = {1, 10, 0.4, 0.6}, - drops = {"greenArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - minorResistances = {"fire"}, - majorResistances = {"poison"}, - minorWeaknesses = {"electric", "explosion", "laser"}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spit", "poison"}, - attributes = {"poisonDeathCloud"}, - drops = {"greenArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"poison"}, - minorResistances = {"fire"}, - minorWeaknesses = {"electric", "explosion", "laser"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"greenArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--suicideEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "suicide" - constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "suicide" - local suicideTints = convertHexPairs(settings.startup["rampant--suicideTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "suicide", - tint = suicideTints.tint, - tint2 = suicideTints.tint2, - tint3 = suicideTints.tint3, - acceptRate = {2, 10, 0.05, 0.15}, - evo = 0.35, - units = { - { - type = "biter", - attackAttributes = {"bomb"}, - name = "biter", - majorWeaknesses = {"explosion"}, - minorResistances = {"poison"}, - attributes = {"lowestHealth", "quickSpawning", "quickMovement", "killsSelf"}, - drops = {"yellowArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"explosion"}, - minorResistances = {"poison"}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {}, - drops = {"yellowArtifact", "quickSpawning", "lowUnits"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"explosion"}, - minorResistances = {"poison"}, - attackAttributes = {"spit", "acid", "slow"}, - acceptRate = {1, 10, 0.8, 0.6}, - attributes = {}, - drops = {"yellowArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"explosion"}, - minorResistances = {"poison"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"yellowArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--nuclearEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "nuclear" - constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "nuclear" - local nuclearTints = convertHexPairs(settings.startup["rampant--nuclearTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "nuclear", - tint = nuclearTints.tint, - tint2 = nuclearTints.tint2, - tint3 = nuclearTints.tint3, - acceptRate = {4, 10, 0.1, 0.125}, - evo = 0.45, - units = { - { - type = "biter", - attackAttributes = {"nuclear"}, - name = "biter", - majorWeaknesses = {"explosion"}, - attributes = {"lowestHealth", "quickSpawning", "quickMovement", "killsSelf"}, - drops = {"yellowArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"explosion"}, - minorResistances = {"fire"}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {}, - drops = {"yellowArtifact", "quickSpawning", "lowUnits"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"explosion"}, - minorResistances = {"fire"}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spit", "acid", "slow"}, - attributes = {}, - drops = {"yellowArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"explosion"}, - minorResistances = {"fire"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"yellowArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--energyThiefEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "energy-thief" - constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "energy-thief" - local energyThiefTints = convertHexPairs(settings.startup["rampant--energyThiefTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "energy-thief", - tint = energyThiefTints.tint, - tint2 = energyThiefTints.tint2, - tint3 = energyThiefTints.tint3, - acceptRate = {3, 10, 0.1, 0.125}, - evo = 0.2, - units = { - { - type = "biter", - attackAttributes = {"spit", "electric", "drainCrystal"}, - name = "biter", - majorResistances = {"electric", "laser"}, - minorResistances = {}, - attributes = {"lowHealth"}, - drops = {"blueArtifact"} - } - }, - buildings = { - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {"electric", "laser"}, - minorResistances = {}, - acceptRate = {1, 10, 0.4, 0.6}, - attributes = {}, - drops = {"blueArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {"electric", "laser"}, - minorResistances = {}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spit", "electric", "cluster"}, - attributes = {}, - drops = {"blueArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {"electric", "laser"}, - attributes = {"spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"blueArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -if settings.startup["rampant--fastEnemy"].value then - constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "fast" - constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "fast" - constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "fast" - local fastTints = convertHexPairs(settings.startup["rampant--fastTints"].value) - constants.FACTION_SET[#constants.FACTION_SET+1] = { - type = "fast", - tint = fastTints.tint, - tint2 = fastTints.tint2, - tint3 = fastTints.tint3, - acceptRate = {2, 10, 0.1, 0.15}, - evo = 0.12, - units = { - { - type = "biter", - attackAttributes = {"melee"}, - name = "biter", - majorResistances = {}, - minorResistances = {"explosion"}, - attributes = {"quickCooldown", "quickMovement"}, - drops = {"purpleArtifact"} - }, - { - type = "spitter", - attackAttributes = {"spit", "acid"}, - name = "spitter", - majorResistances = {}, - minorResistances = {"explosion"}, - attributes = {"quickCooldown", "quickMovement"}, - drops = {"purpleArtifact"} - } - }, - buildings = { - { - type = "spitter-spawner", - name = "spitter-spawner", - majorResistances = {}, - minorResistances = {"explosion"}, - attributes = {"quickSpawning"}, - acceptRate = {1, 10, 0.3, 0.5}, - drops = {"purpleArtifact"}, - buildSets = { - {"spitter", 1, 10} - } - }, - { - type = "biter-spawner", - name = "biter-spawner", - majorResistances = {}, - minorResistances = {"explosion"}, - acceptRate = {1, 10, 0.3, 0.5}, - attributes = {"quickSpawning"}, - drops = {"purpleArtifact"}, - buildSets = { - {"biter", 1, 10} - } - }, - { - type = "turret", - name = "worm", - majorResistances = {}, - minorResistances = {"explosion"}, - acceptRate = {1, 10, 0.8, 0.6}, - attackAttributes = {"spit", "acid"}, - attributes = {"quickCooldown"}, - drops = {"purpleArtifact"} - }, - { - type = "hive", - name = "hive", - majorResistances = {}, - minorResistances = {"explosion"}, - attributes = {"quickSpawning", "spawnDuringDays"}, - acceptRate = {2, 10, 0.001, 0.0175}, - drops = {"purpleArtifact"}, - buildSets = { - {"biter-spawner", 1, 10, 0.15, 0.3}, - {"spitter-spawner", 1, 10, 0.15, 0.3}, - {"turret", 1, 10, 0.8, 0.57}, - {"hive", 2, 10, 0.002, 0.02} - } - } - } - } -end - -constants.HIVE_BUILDINGS_TYPES = { - "trap", - "turret", - "utility", - "spitter-spawner", - "biter-spawner", - "hive" -} - -constants.VICTORY_SCENT_MULTIPLER = {} -for x=1,9 do - for y=1,9 do - local adjV - local v - if x <= 5 and y <= 5 then - v = math.min(x, y) - elseif x > 5 and y < 5 then - v = math.min((10-x), y) - elseif x < 5 and y > 5 then - v = math.min(x, (10-y)) - else - v = math.min((10-x), (10-y)) - end - if v < 5 then - adjV = v / 5 - else - adjV = 1 - end - constants.VICTORY_SCENT_MULTIPLER[#constants.VICTORY_SCENT_MULTIPLER+1] = adjV - end -end - -constants.HIVE_BUILDINGS_COST = {} -constants.HIVE_BUILDINGS_COST["trap"] = constants.BASE_WORM_UPGRADE -constants.HIVE_BUILDINGS_COST["turret"] = constants.BASE_WORM_UPGRADE -constants.HIVE_BUILDINGS_COST["utility"] = constants.BASE_SPAWNER_UPGRADE * 1.5 -constants.HIVE_BUILDINGS_COST["spitter-spawner"] = constants.BASE_SPAWNER_UPGRADE -constants.HIVE_BUILDINGS_COST["biter-spawner"] = constants.BASE_SPAWNER_UPGRADE -constants.HIVE_BUILDINGS_COST["hive"] = constants.BASE_SPAWNER_UPGRADE * 2 - -constants.UNIT_DEATH_POINT_COST = 0.5 - -constants.MINIMUM_BUILDING_COST = constants.MAGIC_MAXIMUM_NUMBER -for _,cost in pairs(constants.HIVE_BUILDINGS_COST) do - if cost < constants.MINIMUM_BUILDING_COST then - constants.MINIMUM_BUILDING_COST = cost - end -end - -constants.FACTION_MUTATION_MAPPING = {} -constants.FACTION_MUTATION_MAPPING["spitter-spawner"] = {"biter-spawner", "hive"} -constants.FACTION_MUTATION_MAPPING["biter-spawner"] = {"spitter-spawner", "hive"} -constants.FACTION_MUTATION_MAPPING["hive"] = {"utility", "biter-spawner", "spitter-spawner"} -constants.FACTION_MUTATION_MAPPING["turret"] = {"trap"} -constants.FACTION_MUTATION_MAPPING["trap"] = {"turret"} -constants.FACTION_MUTATION_MAPPING["utility"] = {"hive", "biter-spawner", "spitter-spawner"} - -function constants.gpsDebug(x, y, msg) - game.print("[gps=".. x .. "," .. y .. "]" .. msg) -end - -constants.MAX_HIVE_TTL = 2485 -constants.MIN_HIVE_TTL = 890 -constants.DEV_HIVE_TTL = 150 - -constantsG = constants -return constants diff --git a/Rampant_3.1.2/libs/MapProcessor.lua b/Rampant_3.1.2/libs/MapProcessor.lua deleted file mode 100644 index d9144d3f..00000000 --- a/Rampant_3.1.2/libs/MapProcessor.lua +++ /dev/null @@ -1,557 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if mapProcessorG then - return mapProcessorG -end -local mapProcessor = {} - --- imports - -local pheromoneUtils = require("PheromoneUtils") -local aiAttackWave = require("AIAttackWave") -local aiPredicates = require("AIPredicates") -local constants = require("Constants") -local mapUtils = require("MapUtils") -local playerUtils = require("PlayerUtils") -local chunkUtils = require("ChunkUtils") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local baseUtils = require("BaseUtils") - --- constants - -local DURATION_ACTIVE_NEST = constants.DURATION_ACTIVE_NEST - -local PROCESS_QUEUE_SIZE = constants.PROCESS_QUEUE_SIZE -local RESOURCE_QUEUE_SIZE = constants.RESOURCE_QUEUE_SIZE -local ENEMY_QUEUE_SIZE = constants.ENEMY_QUEUE_SIZE -local PLAYER_QUEUE_SIZE = constants.PLAYER_QUEUE_SIZE - -local CLEANUP_QUEUE_SIZE = constants.CLEANUP_QUEUE_SIZE - -local PROCESS_PLAYER_BOUND = constants.PROCESS_PLAYER_BOUND -local CHUNK_TICK = constants.CHUNK_TICK - -local PROCESS_STATIC_QUEUE_SIZE = constants.PROCESS_STATIC_QUEUE_SIZE - -local AI_VENGENCE_SQUAD_COST = constants.AI_VENGENCE_SQUAD_COST - -local BASE_AI_STATE_AGGRESSIVE = constants.BASE_AI_STATE_AGGRESSIVE -local BASE_AI_STATE_SIEGE = constants.BASE_AI_STATE_SIEGE -local BASE_AI_STATE_PEACEFUL = constants.BASE_AI_STATE_PEACEFUL -local BASE_AI_STATE_MIGRATING = constants.BASE_AI_STATE_MIGRATING - -local COOLDOWN_DRAIN = constants.COOLDOWN_DRAIN -local COOLDOWN_RALLY = constants.COOLDOWN_RALLY -local COOLDOWN_RETREAT = constants.COOLDOWN_RETREAT - --- imported functions - -local findNearbyBase = chunkPropertyUtils.findNearbyBase - -local removeChunkToNest = mapUtils.removeChunkToNest - -local processStaticPheromone = pheromoneUtils.processStaticPheromone -local processPheromone = pheromoneUtils.processPheromone - -local getDeathGeneratorRating = chunkPropertyUtils.getDeathGeneratorRating -local processBaseMutation = baseUtils.processBaseMutation - -local processNestActiveness = chunkPropertyUtils.processNestActiveness -local getChunkBase = chunkPropertyUtils.getChunkBase - -local formSquads = aiAttackWave.formSquads -local formVengenceSquad = aiAttackWave.formVengenceSquad -local formVengenceSettler = aiAttackWave.formVengenceSettler -local formSettlers = aiAttackWave.formSettlers - -local getChunkByPosition = mapUtils.getChunkByPosition -local getChunkByXY = mapUtils.getChunkByXY -local getChunkById = mapUtils.getChunkById - -local validPlayer = playerUtils.validPlayer - -local addPlayerToChunk = chunkPropertyUtils.addPlayerToChunk - -local mapScanEnemyChunk = chunkUtils.mapScanEnemyChunk -local mapScanPlayerChunk = chunkUtils.mapScanPlayerChunk -local mapScanResourceChunk = chunkUtils.mapScanResourceChunk - -local getNestCount = chunkPropertyUtils.getNestCount -local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount -local getNestActiveness = chunkPropertyUtils.getNestActiveness - -local getRaidNestActiveness = chunkPropertyUtils.getRaidNestActiveness - -local canAttack = aiPredicates.canAttack -local canMigrate = aiPredicates.canMigrate - -local tableSize = table_size - -local mMin = math.min -local mMax = math.max - -local next = next - --- module code - ---[[ - processing is not consistant as it depends on the number of chunks that have been generated - so if we process 400 chunks an iteration and 200 chunks have been generated than these are - processed 3 times a second and 1200 generated chunks would be processed once a second - In theory, this might be fine as smaller bases have less surface to attack and need to have - pheromone dissipate at a faster rate. ---]] -function mapProcessor.processMap(map, tick) - local outgoingWave = map.outgoingScanWave - local processQueue = map.processQueue - local processQueueLength = #processQueue - local index = mMin(map.processIndex, processQueueLength) - - local step - local endIndex - if outgoingWave then - step = 1 - endIndex = mMin(index + PROCESS_QUEUE_SIZE, processQueueLength) - else - step = -1 - endIndex = mMax(index - PROCESS_QUEUE_SIZE, 1) - end - - if (processQueueLength == 0) then - return - end - - for x=index,endIndex,step do - local chunk = processQueue[x] - if chunk[CHUNK_TICK] ~= tick then - chunk[CHUNK_TICK] = tick - processPheromone(map, chunk) - end - end - - if (endIndex == processQueueLength) then - map.outgoingScanWave = false - elseif (endIndex == 1) then - map.outgoingScanWave = true - elseif outgoingWave then - map.processIndex = endIndex + 1 - else - map.processIndex = endIndex - 1 - end - map.universe.processedChunks = map.universe.processedChunks + PROCESS_QUEUE_SIZE -end - -function mapProcessor.processStaticMap(map) - local outgoingWave = map.outgoingStaticScanWave - local processQueue = map.processQueue - local processQueueLength = #processQueue - local index = mMin(map.processStaticIndex, processQueueLength) - - local step - local endIndex - if outgoingWave then - step = 1 - endIndex = mMin(index + PROCESS_STATIC_QUEUE_SIZE, processQueueLength) - else - step = -1 - endIndex = mMax(index - PROCESS_STATIC_QUEUE_SIZE, 1) - end - - if (processQueueLength == 0) then - return - end - - for x=index,endIndex,step do - processStaticPheromone(map, processQueue[x]) - end - - if (endIndex == processQueueLength) then - map.outgoingStaticScanWave = false - elseif (endIndex == 1) then - map.outgoingStaticScanWave = true - elseif outgoingWave then - map.processStaticIndex = endIndex + 1 - else - map.processStaticIndex = endIndex - 1 - end -end - -local function queueNestSpawners(map, chunk, tick) - local processActiveNest = map.universe.processActiveNest - - local chunkId = chunk.id - if not processActiveNest[chunkId] then - if (getNestActiveness(map, chunk) > 0) or (getRaidNestActiveness(map, chunk) > 0) then - processActiveNest[chunkId] = { - map = map, - chunk = chunk, - tick = tick + DURATION_ACTIVE_NEST - } - end - end -end - ---[[ - Localized player radius were processing takes place in realtime, doesn't store state - between calls. - vs - the slower passive version processing the entire map in multiple passes. ---]] -function mapProcessor.processPlayers(players, universe, tick) - -- put down player pheromone for player hunters - -- randomize player order to ensure a single player isn't singled out - -- not looping everyone because the cost is high enough already in multiplayer - if (#players > 0) then - local player = players[universe.random(#players)] - if validPlayer(player) then - local char = player.character - local map = universe.maps[char.surface.index] - if map then - local playerChunk = getChunkByPosition(map, char.position) - - if (playerChunk ~= -1) then - local base = findNearbyBase(map, playerChunk) - if not base then - return - end - local allowingAttacks = canAttack(map, base) - local vengence = allowingAttacks and - (base.unitPoints >= AI_VENGENCE_SQUAD_COST) and - ((getEnemyStructureCount(map, playerChunk) > 0) or - (getDeathGeneratorRating(map, playerChunk) < universe.retreatThreshold)) - - for x=playerChunk.x - PROCESS_PLAYER_BOUND, playerChunk.x + PROCESS_PLAYER_BOUND, 32 do - for y=playerChunk.y - PROCESS_PLAYER_BOUND, playerChunk.y + PROCESS_PLAYER_BOUND, 32 do - local chunk = getChunkByXY(map, x, y) - - if (chunk ~= -1) and (chunk[CHUNK_TICK] ~= tick) then - chunk[CHUNK_TICK] = tick - processPheromone(map, chunk, true) - - if (getNestCount(map, chunk) > 0) then - processNestActiveness(map, chunk) - queueNestSpawners(map, chunk, tick) - - if vengence then - local pack = universe.vengenceQueue[chunk.id] - if not pack then - pack = { - v = 0, - map = map, - base = base - } - universe.vengenceQueue[chunk.id] = pack - end - pack.v = pack.v + 1 - end - end - end - end - end - end - end - end - end - - for i=1,#players do - local player = players[i] - if validPlayer(player) then - local char = player.character - local map = universe.maps[char.surface.index] - if map then - local playerChunk = getChunkByPosition(map, char.position) - - if (playerChunk ~= -1) then - addPlayerToChunk(map, playerChunk, player.name) - end - end - end - end -end - -local function processCleanUp(universe, chunks, iterator, tick, duration) - local chunkId = universe[iterator] - local chunkPack - if not chunkId then - chunkId, chunkPack = next(chunks, nil) - else - chunkPack = chunks[chunkId] - end - if not chunkId then - universe[iterator] = nil - else - universe[iterator] = next(chunks, chunkId) - if (tick - chunkPack.tick) > duration then - chunks[chunkId] = nil - end - end -end - -function mapProcessor.cleanUpMapTables(universe, tick) - local retreats = universe.chunkToRetreats - local rallys = universe.chunkToRallys - local drained = universe.chunkToDrained - - for _=1,CLEANUP_QUEUE_SIZE do - processCleanUp(universe, retreats, "chunkToRetreatIterator", tick, COOLDOWN_RETREAT) - - processCleanUp(universe, rallys, "chunkToRallyIterator", tick, COOLDOWN_RALLY) - - processCleanUp(universe, drained, "chunkToDrainedIterator", tick, COOLDOWN_DRAIN) - end -end - ---[[ - Passive scan to find entities that have been generated outside the factorio event system ---]] -function mapProcessor.scanPlayerMap(map, tick) - if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or - (map.nextEnemyScan == tick) or (map.nextChunkProcess == tick) - then - return - end - local index = map.scanPlayerIndex - - local processQueue = map.processQueue - local processQueueLength = #processQueue - - local endIndex = mMin(index + PLAYER_QUEUE_SIZE, processQueueLength) - - if (processQueueLength == 0) then - return - end - - for x=index,endIndex do - mapScanPlayerChunk(processQueue[x], map) - end - - if (endIndex == processQueueLength) then - map.scanPlayerIndex = 1 - else - map.scanPlayerIndex = endIndex + 1 - end -end - -function mapProcessor.scanEnemyMap(map, tick) - if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or (map.nextChunkProcess == tick) then - return - end - - local index = map.scanEnemyIndex - - local processQueue = map.processQueue - local processQueueLength = #processQueue - - local endIndex = mMin(index + ENEMY_QUEUE_SIZE, #processQueue) - - if (processQueueLength == 0) then - return - end - - for x=index,endIndex do - mapScanEnemyChunk(processQueue[x], map, tick) - end - - if (endIndex == processQueueLength) then - map.scanEnemyIndex = 1 - else - map.scanEnemyIndex = endIndex + 1 - end -end - -function mapProcessor.scanResourceMap(map, tick) - if (map.nextProcessMap == tick) or (map.nextPlayerScan == tick) or - (map.nextEnemyScan == tick) or (map.nextChunkProcess == tick) - then - return - end - local index = map.scanResourceIndex - - local processQueue = map.processQueue - local processQueueLength = #processQueue - - local endIndex = mMin(index + RESOURCE_QUEUE_SIZE, processQueueLength) - - if (processQueueLength == 0) then - return - end - - for x=index,endIndex do - mapScanResourceChunk(processQueue[x], map) - end - - if (endIndex == processQueueLength) then - map.scanResourceIndex = 1 - else - map.scanResourceIndex = endIndex + 1 - end -end - -function mapProcessor.processActiveNests(universe, tick) - local processActiveNest = universe.processActiveNest - local chunkId = universe.processActiveNestIterator - local chunkPack - if not chunkId then - chunkId, chunkPack = next(processActiveNest, nil) - else - chunkPack = processActiveNest[chunkId] - end - if not chunkId then - universe.processActiveNestIterator = nil - else - universe.processActiveNestIterator = next(processActiveNest, chunkId) - if chunkPack.tick < tick then - local map = chunkPack.map - if not map.surface.valid then - processActiveNest[chunkId] = nil - return - end - local chunk = chunkPack.chunk - processNestActiveness(map, chunk) - if (getNestActiveness(map, chunk) == 0) and (getRaidNestActiveness(map, chunk) == 0) then - processActiveNest[chunkId] = nil - else - chunkPack.tick = tick + DURATION_ACTIVE_NEST - end - end - end -end - -function mapProcessor.processVengence(universe) - local vengenceQueue = universe.vengenceQueue - local chunkId = universe.deployVengenceIterator - local vengencePack - if not chunkId then - chunkId, vengencePack = next(vengenceQueue, nil) - else - vengencePack = vengenceQueue[chunkId] - end - if not chunkId then - universe.deployVengenceIterator = nil - if (tableSize(vengenceQueue) == 0) then - universe.vengenceQueue = {} - end - else - universe.deployVengenceIterator = next(vengenceQueue, chunkId) - vengenceQueue[chunkId] = nil - local map = vengencePack.map - if not map.surface.valid then - return - end - local chunk = getChunkById(vengencePack.map, chunkId) - if universe.enabledMigration and (universe.random() < 0.075) then - formVengenceSettler(map, chunk, vengencePack.base) - else - formVengenceSquad(map, chunk, vengencePack.base) - end - end -end - -function mapProcessor.processNests(universe, tick) - local chunkId = universe.processNestIterator - local chunkPack - if not chunkId then - chunkId,chunkPack = next(universe.chunkToNests, nil) - else - chunkPack = universe.chunkToNests[chunkId] - end - if not chunkId then - universe.processNestIterator = nil - else - universe.processNestIterator = next(universe.chunkToNests, chunkId) - local map = chunkPack.map - if not map.surface.valid then - removeChunkToNest(universe, chunkId) - return - end - local chunk = getChunkById(map, chunkId) - processNestActiveness(map, chunk) - queueNestSpawners(map, chunk, tick) - - if universe.NEW_ENEMIES then - processBaseMutation(chunk, - map, - getChunkBase(map, chunk)) - end - end -end - -local function processSpawnersBody(universe, iterator, chunks) - local chunkId = universe[iterator] - local chunkPack - if not chunkId then - chunkId,chunkPack = next(chunks, nil) - else - chunkPack = chunks[chunkId] - end - if not chunkId then - universe[iterator] = nil - else - universe[iterator] = next(chunks, chunkId) - local map = chunkPack.map - if not map.surface.valid then - if (iterator == "processMigrationIterator") then - removeChunkToNest(universe, chunkId) - else - chunks[chunkId] = nil - end - return - end - local chunk = getChunkById(map, chunkId) - local base = findNearbyBase(map, chunk) - if base.stateAI == BASE_AI_STATE_PEACEFUL then - return - end - if iterator == "processMigrationIterator" then - if (base.stateAI ~= BASE_AI_STATE_MIGRATING) and (base.stateAI ~= BASE_AI_STATE_SIEGE) then - return - end - elseif iterator == "processActiveRaidSpawnerIterator" then - if (base.stateAI == BASE_AI_STATE_AGGRESSIVE) or (base.stateAI == BASE_AI_STATE_MIGRATING) then - return - end - elseif iterator == "processActiveSpawnerIterator" then - if (base.stateAI == BASE_AI_STATE_MIGRATING) then - return - end - end - - local migrate = canMigrate(map, base) - local attack = canAttack(map, base) - if migrate then - formSettlers(map, chunk, base) - end - if attack then - formSquads(map, chunk, base) - end - end -end - -function mapProcessor.processAttackWaves(universe) - processSpawnersBody(universe, - "processActiveSpawnerIterator", - universe.chunkToActiveNest) - processSpawnersBody(universe, - "processActiveRaidSpawnerIterator", - universe.chunkToActiveRaidNest) - processSpawnersBody(universe, - "processMigrationIterator", - universe.chunkToNests) -end - -mapProcessorG = mapProcessor -return mapProcessor diff --git a/Rampant_3.1.2/libs/MapUtils.lua b/Rampant_3.1.2/libs/MapUtils.lua deleted file mode 100644 index 4a9c3f82..00000000 --- a/Rampant_3.1.2/libs/MapUtils.lua +++ /dev/null @@ -1,387 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if mapUtilsG then - return mapUtilsG -end -local mapUtils = {} - --- imports - -local constants = require("Constants") -local chunkPropertyUtils = require("ChunkPropertyUtils") - --- constants - -local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH -local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST -local CHUNK_IMPASSABLE = constants.CHUNK_IMPASSABLE -local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS - -local CHUNK_SIZE = constants.CHUNK_SIZE - -local CHUNK_SIZE_DIVIDER = constants.CHUNK_SIZE_DIVIDER - --- imported functions - -local mFloor = math.floor -local getPassable = chunkPropertyUtils.getPassable -local tRemove = table.remove -local mCeil = math.ceil - --- module code - -function mapUtils.getChunkByXY(map, x, y) - local chunkX = map[x] - if chunkX then - return chunkX[y] or -1 - end - return -1 -end - -function mapUtils.getChunkByPosition(map, position) - local chunkX = map[mFloor(position.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE] - if chunkX then - local chunkY = mFloor(position.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - return chunkX[chunkY] or -1 - end - return -1 -end - -function mapUtils.getChunkById(map, chunkId) - return map.universe.chunkIdToChunk[chunkId] or -1 -end - -function mapUtils.positionToChunkXY(position) - local chunkX = mFloor(position.x * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - local chunkY = mFloor(position.y * CHUNK_SIZE_DIVIDER) * CHUNK_SIZE - return chunkX, chunkY -end - -function mapUtils.queueGeneratedChunk(universe, event) - local map = universe.maps[event.surface.index] - if not map then - return - end - event.tick = (event.tick or game.tick) + 20 - event.id = universe.eventId - event.map = map - universe.pendingChunks[event.id] = event - universe.eventId = universe.eventId + 1 -end - -function mapUtils.nextMap(universe) - local mapIterator = universe.mapIterator - repeat - local map - universe.mapIterator, map = next(universe.maps, universe.mapIterator) - if map and map.activeSurface then - return map - end - until mapIterator == universe.mapIterator -end - -function mapUtils.removeChunkToNest(universe, chunkId) - universe.chunkToNests[chunkId] = nil - if (chunkId == universe.processNestIterator) then - universe.processNestIterator = nil - end - if (chunkId == universe.processMigrationIterator) then - universe.processMigrationIterator = nil - end -end - -function mapUtils.findInsertionPoint(processQueue, chunk) - local low = 1 - local high = #processQueue - local pivot - while (low <= high) do - pivot = mCeil((low + high) * 0.5) - local pivotChunk = processQueue[pivot] - if (pivotChunk.dOrigin > chunk.dOrigin) then - high = pivot - 1 - elseif (pivotChunk.dOrigin <= chunk.dOrigin) then - low = pivot + 1 - end - end - return low -end - -function mapUtils.removeProcessQueueChunk(processQueue, chunk) - local insertionPoint = mapUtils.findInsertionPoint(processQueue, chunk) - if insertionPoint > #processQueue then - insertionPoint = insertionPoint - 1 - end - for i=insertionPoint,1,-1 do - local pqChunk = processQueue[i] - if pqChunk.id == chunk.id then - tRemove(processQueue, i) - return - elseif pqChunk.dOrigin < chunk.dOrigin then - return - end - end -end - -function mapUtils.removeChunkFromMap(map, chunk) - local chunkId = chunk.id - local x = chunk.x - local y = chunk.y - mapUtils.removeProcessQueueChunk(map.processQueue, chunk) - local universe = map.universe - map[x][y] = nil - universe.chunkIdToChunk[chunkId] = nil - universe.chunkToActiveNest[chunkId] = nil - universe.chunkToActiveRaidNest[chunkId] = nil - universe.chunkToDrained[chunkId] = nil - universe.chunkToRetreats[chunkId] = nil - universe.chunkToRallys[chunkId] = nil - universe.chunkToPassScan[chunkId] = nil - universe.chunkToNests[chunkId] = nil - universe.vengenceQueue[chunkId] = nil - universe.processActiveNest[chunkId] = nil - universe.chunkToVictory[chunkId] = nil - local base = map.chunkToBase[chunkId] - if base then - base.chunkCount = base.chunkCount - 1 - map.chunkToBase[chunkId] = nil - end - map.chunkToTurrets[chunkId] = nil - map.chunkToTraps[chunkId] = nil - map.chunkToUtilities[chunkId] = nil - map.chunkToHives[chunkId] = nil - map.chunkToNestIds[chunkId] = nil - map.chunkToHiveIds[chunkId] = nil - map.chunkToTrapIds[chunkId] = nil - map.chunkToTurretIds[chunkId] = nil - map.chunkToUtilityIds[chunkId] = nil - map.chunkToPlayerBase[chunkId] = nil - map.chunkToResource[chunkId] = nil - map.chunkToPlayerCount[chunkId] = nil - map.chunkToSquad[chunkId] = nil - map.chunkToPassable[chunkId] = nil - map.chunkToPathRating[chunkId] = nil - map.chunkToDeathGenerator[chunkId] = nil - - if universe.processActiveNestIterator == chunkId then - universe.processActiveNestIterator = nil - end - if universe.victoryScentIterator == chunkId then - universe.victoryScentIterator = nil - end - if universe.processNestIterator == chunkId then - universe.processNestIterator = nil - end - if universe.chunkToDrainedIterator == chunkId then - universe.chunkToDrainedIterator = nil - end - if universe.chunkToRetreatIterator == chunkId then - universe.chunkToRetreatIterator = nil - end - if universe.chunkToRallyIterator == chunkId then - universe.chunkToRallyIterator = nil - end - if universe.chunkToPassScanIterator == chunkId then - universe.chunkToPassScanIterator = nil - end - if universe.processActiveSpawnerIterator == chunkId then - universe.processActiveSpawnerIterator = nil - end - if universe.processActiveRaidSpawnerIterator == chunkId then - universe.processActiveRaidSpawnerIterator = nil - end - if universe.processMigrationIterator == chunkId then - universe.processMigrationIterator = nil - end - if universe.deployVengenceIterator == chunkId then - universe.deployVengenceIterator = nil - end -end - ---[[ - 1 2 3 - \|/ - 4- -5 - /|\ - 6 7 8 -]]-- -function mapUtils.getNeighborChunks(map, x, y) - local neighbors = map.universe.neighbors - local chunkYRow1 = y - CHUNK_SIZE - local chunkYRow3 = y + CHUNK_SIZE - local xChunks = map[x-CHUNK_SIZE] - if xChunks then - neighbors[1] = xChunks[chunkYRow1] or -1 - neighbors[4] = xChunks[y] or -1 - neighbors[6] = xChunks[chunkYRow3] or -1 - else - neighbors[1] = -1 - neighbors[4] = -1 - neighbors[6] = -1 - end - - xChunks = map[x+CHUNK_SIZE] - if xChunks then - neighbors[3] = xChunks[chunkYRow1] or -1 - neighbors[5] = xChunks[y] or -1 - neighbors[8] = xChunks[chunkYRow3] or -1 - else - neighbors[3] = -1 - neighbors[5] = -1 - neighbors[8] = -1 - end - - xChunks = map[x] - if xChunks then - neighbors[2] = xChunks[chunkYRow1] or -1 - neighbors[7] = xChunks[chunkYRow3] or -1 - else - neighbors[2] = -1 - neighbors[7] = -1 - end - return neighbors -end - - ---[[ - 1 2 3 - \|/ - 4- -5 - /|\ - 6 7 8 -]]-- -function mapUtils.canMoveChunkDirection(map, direction, startChunk, endChunk) - local canMove = false - local startPassable = getPassable(map, startChunk) - local endPassable = getPassable(map, endChunk) - if (startPassable == CHUNK_ALL_DIRECTIONS) then - if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then - canMove = (endPassable == CHUNK_ALL_DIRECTIONS) - elseif (direction == 2) or (direction == 7) then - canMove = ((endPassable == CHUNK_NORTH_SOUTH) or (endPassable == CHUNK_ALL_DIRECTIONS)) - elseif (direction == 4) or (direction == 5) then - canMove = ((endPassable == CHUNK_EAST_WEST) or (endPassable == CHUNK_ALL_DIRECTIONS)) - end - elseif (startPassable == CHUNK_NORTH_SOUTH) then - if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then - canMove = (endPassable == CHUNK_ALL_DIRECTIONS) - elseif (direction == 2) or (direction == 7) then - canMove = ((endPassable == CHUNK_NORTH_SOUTH) or (endPassable == CHUNK_ALL_DIRECTIONS)) - end - elseif (startPassable == CHUNK_EAST_WEST) then - if ((direction == 1) or (direction == 3) or (direction == 6) or (direction == 8)) then - canMove = (endPassable == CHUNK_ALL_DIRECTIONS) - elseif (direction == 4) or (direction == 5) then - canMove = ((endPassable == CHUNK_EAST_WEST) or (endPassable == CHUNK_ALL_DIRECTIONS)) - end - else - canMove = (endPassable ~= CHUNK_IMPASSABLE) - end - return canMove -end - -function mapUtils.getCardinalChunks(map, x, y) - local neighbors = map.universe.cardinalNeighbors - local xChunks = map[x] - if xChunks then - neighbors[1] = xChunks[y-CHUNK_SIZE] or -1 - neighbors[4] = xChunks[y+CHUNK_SIZE] or -1 - else - neighbors[1] = -1 - neighbors[4] = -1 - end - - xChunks = map[x-CHUNK_SIZE] - if xChunks then - neighbors[2] = xChunks[y] or -1 - else - neighbors[2] = -1 - end - - xChunks = map[x+CHUNK_SIZE] - if xChunks then - neighbors[3] = xChunks[y] or -1 - else - neighbors[3] = -1 - end - return neighbors -end - -function mapUtils.positionFromDirectionAndChunk(direction, startPosition, scaling) - local endPosition = {} - if (direction == 1) then - endPosition.x = startPosition.x - CHUNK_SIZE * (scaling - 0.1) - endPosition.y = startPosition.y - CHUNK_SIZE * (scaling - 0.1) - elseif (direction == 2) then - endPosition.x = startPosition.x - endPosition.y = startPosition.y - CHUNK_SIZE * (scaling + 0.25) - elseif (direction == 3) then - endPosition.x = startPosition.x + CHUNK_SIZE * (scaling - 0.1) - endPosition.y = startPosition.y - CHUNK_SIZE * (scaling - 0.1) - elseif (direction == 4) then - endPosition.x = startPosition.x - CHUNK_SIZE * (scaling + 0.25) - endPosition.y = startPosition.y - elseif (direction == 5) then - endPosition.x = startPosition.x + CHUNK_SIZE * (scaling + 0.25) - endPosition.y = startPosition.y - elseif (direction == 6) then - endPosition.x = startPosition.x - CHUNK_SIZE * (scaling - 0.1) - endPosition.y = startPosition.y + CHUNK_SIZE * (scaling - 0.1) - elseif (direction == 7) then - endPosition.x = startPosition.x - endPosition.y = startPosition.y + CHUNK_SIZE * (scaling + 0.25) - elseif (direction == 8) then - endPosition.x = startPosition.x + CHUNK_SIZE * (scaling - 0.1) - endPosition.y = startPosition.y + CHUNK_SIZE * (scaling - 0.1) - end - return endPosition -end - -function mapUtils.positionFromDirectionAndFlat(direction, startPosition, multipler) - local lx = startPosition.x - local ly = startPosition.y - if not multipler then - multipler = 1 - end - if (direction == 1) then - lx = lx - CHUNK_SIZE * multipler - ly = ly - CHUNK_SIZE * multipler - elseif (direction == 2) then - ly = ly - CHUNK_SIZE * multipler - elseif (direction == 3) then - lx = lx + CHUNK_SIZE * multipler - ly = ly - CHUNK_SIZE * multipler - elseif (direction == 4) then - lx = lx - CHUNK_SIZE * multipler - elseif (direction == 5) then - lx = lx + CHUNK_SIZE * multipler - elseif (direction == 6) then - lx = lx - CHUNK_SIZE * multipler - ly = ly + CHUNK_SIZE * multipler - elseif (direction == 7) then - ly = ly + CHUNK_SIZE * multipler - elseif (direction == 8) then - lx = lx + CHUNK_SIZE * multipler - ly = ly + CHUNK_SIZE * multipler - end - return { - x = lx, - y = ly - } -end - -mapUtilsG = mapUtils -return mapUtils diff --git a/Rampant_3.1.2/libs/MathUtils.lua b/Rampant_3.1.2/libs/MathUtils.lua deleted file mode 100644 index 8fe29f77..00000000 --- a/Rampant_3.1.2/libs/MathUtils.lua +++ /dev/null @@ -1,157 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if mathUtilsG then - return mathUtilsG -end -local mathUtils = {} - --- imports - -local constants = require("Constants") - --- constants - -local TICKS_A_MINUTE = constants.TICKS_A_MINUTE - --- imported functions - -local mSqrt = math.sqrt -local mLog10 = math.log10 - -local mFloor = math.floor -local mAbs = math.abs - --- module code - -function mathUtils.roundToFloor(number, multiple) - return mFloor(number / multiple) * multiple -end - -function mathUtils.roundToNearest(number, multiple) - local num = number + (multiple * 0.5) - return num - (num % multiple) -end - -function mathUtils.randomTickEvent(rg, tick, low, high) - local range = high - low - local minutesToTick = (range * rg()) + low - return tick + mathUtils.roundToNearest(TICKS_A_MINUTE * minutesToTick, 1) -end - -function mathUtils.distort(xorRandom, num, stdDev, min, max) - local amin = min or num * 0.70 - local amax = max or num * 1.30 - local sd = stdDev or 0.17 - if (num < 0) then - local t = amin - amin = amax - amax = t - end - return mathUtils.roundToNearest(mathUtils.gaussianRandomRangeRG(num, num * sd, amin, amax, xorRandom), 0.01) -end - -function mathUtils.linearInterpolation(percent, min, max) - return ((max - min) * percent) + min -end - -function mathUtils.xorRandom(state) - local xor = bit32.bxor - local lshift = bit32.lshift - local rshift = bit32.rshift - - local seed = state + 32685453 - - return function() - seed = xor(seed, lshift(seed, 13)) - seed = xor(seed, rshift(seed, 17)) - seed = xor(seed, lshift(seed, 5)) - return seed * 2.32830643654e-10 -- 2.32830643654e-10 = 1 / 2^32, 2.32830643708e-10 = 1 / ((2^32)-1) - end -end - ---[[ - Used for gaussian random numbers ---]] -function mathUtils.gaussianRandomRG(mean, std_dev, rg) - -- marsagliaPolarMethod - local iid1 - local iid2 - local q - repeat - iid1 = 2 * rg() + -1 - iid2 = 2 * rg() + -1 - q = (iid1 * iid1) + (iid2 * iid2) - until (q ~= 0) and (q < 1) - local s = mSqrt((-2 * mLog10(q)) / q) - local v = iid1 * s - - return mean + (v * std_dev) -end - -function mathUtils.gaussianRandomRangeRG(mean, std_dev, min, max, rg) - local r - if (min >= max) then - return min - end - repeat - local iid1 - local iid2 - local q - repeat - iid1 = 2 * rg() + -1 - iid2 = 2 * rg() + -1 - q = (iid1 * iid1) + (iid2 * iid2) - until (q ~= 0) and (q < 1) - local s = mSqrt((-2 * mLog10(q)) / q) - local v = iid1 * s - r = mean + (v * std_dev) - until (r >= min) and (r <= max) - return r -end - -function mathUtils.euclideanDistanceNamed(p1, p2) - local xs = p1.x - p2.x - local ys = p1.y - p2.y - return ((xs * xs) + (ys * ys)) ^ 0.5 -end - -function mathUtils.euclideanDistancePoints(x1, y1, x2, y2) - local xs = x1 - x2 - local ys = y1 - y2 - return ((xs * xs) + (ys * ys)) ^ 0.5 -end - -function mathUtils.manhattenDistancePoints(x1, y1, x2, y2) - return mAbs((x1 - x2) + (y1 - y2)) -end - -function mathUtils.euclideanDistanceArray(p1, p2) - local xs = p1[1] - p2[1] - local ys = p1[2] - p2[2] - return ((xs * xs) + (ys * ys)) ^ 0.5 -end - -function mathUtils.distortPosition(rg, position, size) - local xDistort = mathUtils.gaussianRandomRangeRG(1, 0.5, 0, 2, rg) - 1 - local yDistort = mathUtils.gaussianRandomRangeRG(1, 0.5, 0, 2, rg) - 1 - position.x = position.x + (xDistort * size) - position.y = position.y + (yDistort * size) - return position -end - -mathUtilsG = mathUtils -return mathUtils diff --git a/Rampant_3.1.2/libs/PheromoneUtils.lua b/Rampant_3.1.2/libs/PheromoneUtils.lua deleted file mode 100644 index acb7a3c0..00000000 --- a/Rampant_3.1.2/libs/PheromoneUtils.lua +++ /dev/null @@ -1,623 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if pheromoneUtilsG then - return pheromoneUtilsG -end -local pheromoneUtils = {} - --- imports -local mathUtils = require("MathUtils") -local mapUtils = require("MapUtils") -local constants = require("Constants") -local chunkPropertyUtils = require("ChunkPropertyUtils") - --- constants - -local ENEMY_PHEROMONE_MULTIPLER = constants.ENEMY_PHEROMONE_MULTIPLER -local VICTORY_SCENT_MULTIPLER = constants.VICTORY_SCENT_MULTIPLER -local VICTORY_SCENT_BOUND = constants.VICTORY_SCENT_BOUND - -local MAGIC_MAXIMUM_NUMBER = constants.MAGIC_MAXIMUM_NUMBER - -local CHUNK_ALL_DIRECTIONS = constants.CHUNK_ALL_DIRECTIONS -local CHUNK_NORTH_SOUTH = constants.CHUNK_NORTH_SOUTH -local CHUNK_EAST_WEST = constants.CHUNK_EAST_WEST - -local BASE_PHEROMONE = constants.BASE_PHEROMONE -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE -local ENEMY_PHEROMONE = constants.ENEMY_PHEROMONE - -local VICTORY_SCENT = constants.VICTORY_SCENT - -local PLAYER_PHEROMONE_GENERATOR_AMOUNT = constants.PLAYER_PHEROMONE_GENERATOR_AMOUNT - -local DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.DEATH_PHEROMONE_GENERATOR_AMOUNT - --- imported functions - -local addVictoryGenerator = chunkPropertyUtils.addVictoryGenerator -local getDeathGenerator = chunkPropertyUtils.getDeathGenerator -local setDeathGenerator = chunkPropertyUtils.setDeathGenerator - -local getPlayersOnChunk = chunkPropertyUtils.getPlayersOnChunk - -local getNeighborChunks = mapUtils.getNeighborChunks -local getChunkById = mapUtils.getChunkById - -local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount -local getNestCount = chunkPropertyUtils.getNestCount -local getHiveCount = chunkPropertyUtils.getHiveCount -local getPathRating = chunkPropertyUtils.getPathRating -local getPassable = chunkPropertyUtils.getPassable -local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator -local getResourceGenerator = chunkPropertyUtils.getResourceGenerator -local addDeathGenerator = chunkPropertyUtils.addDeathGenerator - -local decayDeathGenerator = chunkPropertyUtils.decayDeathGenerator - -local linearInterpolation = mathUtils.linearInterpolation - -local getChunkByXY = mapUtils.getChunkByXY - -local next = next - --- module code - -function pheromoneUtils.victoryScent(map, chunk, entityType) - local value = VICTORY_SCENT[entityType] - if value then - addVictoryGenerator(map, chunk, value) - end -end - -function pheromoneUtils.disperseVictoryScent(universe) - local chunkId = universe.victoryScentIterator - local chunkToVictory = universe.chunkToVictory - local pheromonePack - if not chunkId then - chunkId, pheromonePack = next(chunkToVictory, nil) - else - pheromonePack = chunkToVictory[chunkId] - end - if not chunkId then - universe.victoryScentIterator = nil - else - universe.victoryScentIterator = next(chunkToVictory, chunkId) - chunkToVictory[chunkId] = nil - local map = pheromonePack.map - if not map.surface.valid then - return - end - local chunk = getChunkById(map, chunkId) - local chunkX = chunk.x - local chunkY = chunk.y - local i = 1 - for x=chunkX - VICTORY_SCENT_BOUND, chunkX + VICTORY_SCENT_BOUND,32 do - for y = chunkY - VICTORY_SCENT_BOUND, chunkY + VICTORY_SCENT_BOUND,32 do - local c = getChunkByXY(map, x, y) - if (c ~= -1) then - addDeathGenerator(map, c, -pheromonePack.v * VICTORY_SCENT_MULTIPLER[i] * getPathRating(map, c)) - end - i = i + 1 - end - end - end -end - -function pheromoneUtils.deathScent(map, chunk) - addDeathGenerator(map, chunk, DEATH_PHEROMONE_GENERATOR_AMOUNT) -end - -function pheromoneUtils.processStaticPheromone(map, chunk) - local chunkBase = -MAGIC_MAXIMUM_NUMBER - local chunkResource = -MAGIC_MAXIMUM_NUMBER - local chunkEnemy = -MAGIC_MAXIMUM_NUMBER - local chunkPathRating = getPathRating(map, chunk) - - local clear = getEnemyStructureCount(map, chunk) == 0 - - local tempNeighbors = getNeighborChunks(map, chunk.x, chunk.y) - - local neighbor - local neighborPass - - local chunkPass = getPassable(map, chunk) - local pheromone - if (chunkPass == CHUNK_ALL_DIRECTIONS) then - neighbor = tempNeighbors[2] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[7] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[4] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[5] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[1] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[3] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[6] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[8] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - elseif (chunkPass == CHUNK_EAST_WEST) then - - neighbor = tempNeighbors[4] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[5] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - elseif (chunkPass == CHUNK_NORTH_SOUTH) then - - neighbor = tempNeighbors[2] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - - neighbor = tempNeighbors[7] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[BASE_PHEROMONE] - if chunkBase < pheromone then - chunkBase = pheromone - end - pheromone = neighbor[ENEMY_PHEROMONE] - if chunkEnemy < pheromone then - chunkEnemy = pheromone - end - pheromone = neighbor[RESOURCE_PHEROMONE] - if chunkResource < pheromone then - chunkResource = pheromone - end - end - end - end - - chunkBase = chunkBase * 0.9 - pheromone = getPlayerBaseGenerator(map, chunk) - if chunkBase < pheromone then - chunk[BASE_PHEROMONE] = pheromone * chunkPathRating - else - chunk[BASE_PHEROMONE] = chunkBase * chunkPathRating - end - - chunkEnemy = chunkEnemy * 0.9 - pheromone = (getNestCount(map, chunk) + getHiveCount(map, chunk)) * ENEMY_PHEROMONE_MULTIPLER - if chunkEnemy < pheromone then - chunk[ENEMY_PHEROMONE] = pheromone * chunkPathRating - else - chunk[ENEMY_PHEROMONE] = chunkEnemy * chunkPathRating - end - - chunkResource = chunkResource * 0.9 - pheromone = getResourceGenerator(map, chunk) - if (pheromone > 0) and clear then - pheromone = linearInterpolation(pheromone, 15000, 20000) - end - if chunkResource < pheromone then - if clear then - chunk[RESOURCE_PHEROMONE] = pheromone * chunkPathRating - else - chunk[RESOURCE_PHEROMONE] = pheromone * chunkPathRating * 0.0001 - end - else - if clear then - chunk[RESOURCE_PHEROMONE] = chunkResource * chunkPathRating - else - chunk[RESOURCE_PHEROMONE] = chunkResource * chunkPathRating * 0.0001 - end - end -end - -function pheromoneUtils.processPheromone(map, chunk, player) - local chunkPlayer = -MAGIC_MAXIMUM_NUMBER - local chunkDeath = 0 - local chunkPathRating = getPathRating(map, chunk) - - local tempNeighbors = getNeighborChunks(map, chunk.x, chunk.y) - - local neighbor - local neighborPass - - local chunkPass = getPassable(map, chunk) - local pheromone - if (chunkPass == CHUNK_ALL_DIRECTIONS) then - neighbor = tempNeighbors[2] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[7] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[4] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[5] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[1] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[3] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[6] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[8] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if (neighborPass == CHUNK_ALL_DIRECTIONS) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - elseif (chunkPass == CHUNK_EAST_WEST) then - - neighbor = tempNeighbors[4] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[5] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_EAST_WEST)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - elseif (chunkPass == CHUNK_NORTH_SOUTH) then - - neighbor = tempNeighbors[2] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - - neighbor = tempNeighbors[7] - if (neighbor ~= -1) then - neighborPass = getPassable(map, neighbor) - if ((neighborPass == CHUNK_ALL_DIRECTIONS) or (neighborPass == CHUNK_NORTH_SOUTH)) then - pheromone = neighbor[PLAYER_PHEROMONE] - if chunkPlayer < pheromone then - chunkPlayer = pheromone - end - pheromone = getDeathGenerator(map, chunk) - if chunkDeath < pheromone then - chunkDeath = pheromone - end - end - end - end - - if chunkDeath > 0 then - setDeathGenerator(map, chunk, chunkDeath * 0.95) - end - - if not player then - decayDeathGenerator(map, chunk) - end - - chunkPlayer = chunkPlayer * 0.45 - pheromone = getPlayersOnChunk(map, chunk) * PLAYER_PHEROMONE_GENERATOR_AMOUNT - if chunkPlayer < pheromone then - chunk[PLAYER_PHEROMONE] = pheromone * chunkPathRating - else - chunk[PLAYER_PHEROMONE] = chunkPlayer * chunkPathRating - end -end - -pheromoneUtilsG = pheromoneUtils -return pheromoneUtils diff --git a/Rampant_3.1.2/libs/PlayerUtils.lua b/Rampant_3.1.2/libs/PlayerUtils.lua deleted file mode 100644 index c4207a09..00000000 --- a/Rampant_3.1.2/libs/PlayerUtils.lua +++ /dev/null @@ -1,37 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if playerUtilsG then - return playerUtilsG -end -local playerUtils = {} - --- imports - --- imported functions - --- module code - -function playerUtils.validPlayer(player) - if player and player.valid then - local char = player.character - return char and char.valid - end - return false -end - -playerUtilsG = playerUtils -return playerUtils diff --git a/Rampant_3.1.2/libs/QueryUtils.lua b/Rampant_3.1.2/libs/QueryUtils.lua deleted file mode 100644 index 84819df9..00000000 --- a/Rampant_3.1.2/libs/QueryUtils.lua +++ /dev/null @@ -1,81 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if queryUtilsG then - return queryUtilsG -end -local queryUtils = {} - -local constants = require("Constants") - -local CHUNK_SIZE = constants.CHUNK_SIZE - -function queryUtils.setPositionInQuery(query, position) - local point = query.position - point[1] = position.x - point[2] = position.y -end - -function queryUtils.setPositionInCommand(cmd, position) - local point = cmd.destination - point[1] = position.x - point[2] = position.y -end - -function queryUtils.setPositionXYInQuery(query, x, y) - local point = query.position - point[1] = x - point[2] = y -end - -function queryUtils.setAreaInQuery(query, topLeftPosition, size) - local area = query.area - area[1][1] = topLeftPosition.x - area[1][2] = topLeftPosition.y - area[2][1] = topLeftPosition.x + size - area[2][2] = topLeftPosition.y + size -end - -function queryUtils.setAreaInQueryChunkSize(query, topLeftPosition) - local area = query.area - area[1][1] = topLeftPosition.x - area[1][2] = topLeftPosition.y - area[2][1] = topLeftPosition.x + CHUNK_SIZE - area[2][2] = topLeftPosition.y + CHUNK_SIZE -end - -function queryUtils.setPointAreaInQuery(query, position, size) - local area = query.area - area[1][1] = position.x - size - area[1][2] = position.y - size - area[2][1] = position.x + size - area[2][2] = position.y + size -end - -function queryUtils.setAreaYInQuery(query, y1, y2) - local area = query.area - area[1][2] = y1 - area[2][2] = y2 -end - -function queryUtils.setAreaXInQuery(query, x1, x2) - local area = query.area - area[1][1] = x1 - area[2][1] = x2 -end - -queryUtilsG = queryUtils -return queryUtils diff --git a/Rampant_3.1.2/libs/SquadAttack.lua b/Rampant_3.1.2/libs/SquadAttack.lua deleted file mode 100644 index 11f464ba..00000000 --- a/Rampant_3.1.2/libs/SquadAttack.lua +++ /dev/null @@ -1,511 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if (squadAttackG) then - return squadAttackG -end -local squadAttack = {} - --- imports - -local constants = require("Constants") -local mapUtils = require("MapUtils") -local movementUtils = require("MovementUtils") -local mathUtils = require("MathUtils") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local queryUtils = require("QueryUtils") - --- constants - -local COMMAND_TIMEOUT = constants.COMMAND_TIMEOUT -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local BASE_PHEROMONE = constants.BASE_PHEROMONE -local ENEMY_PHEROMONE = constants.ENEMY_PHEROMONE -local RESOURCE_PHEROMONE = constants.RESOURCE_PHEROMONE - -local FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT = constants.FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT - -local SQUAD_BUILDING = constants.SQUAD_BUILDING - -local SQUAD_RAIDING = constants.SQUAD_RAIDING -local SQUAD_SETTLING = constants.SQUAD_SETTLING -local SQUAD_GUARDING = constants.SQUAD_GUARDING -local SQUAD_RETREATING = constants.SQUAD_RETREATING - -local BASE_AI_STATE_SIEGE = constants.BASE_AI_STATE_SIEGE -local BASE_AI_STATE_AGGRESSIVE = constants.BASE_AI_STATE_AGGRESSIVE - -local PLAYER_PHEROMONE_MULTIPLER = constants.PLAYER_PHEROMONE_MULTIPLER - -local DEFINES_DISTRACTION_NONE = defines.distraction.none -local DEFINES_DISTRACTION_BY_ENEMY = defines.distraction.by_enemy -local DEFINES_DISTRACTION_BY_ANYTHING = defines.distraction.by_anything - --- imported functions - -local setPositionInCommand = queryUtils.setPositionInCommand - -local euclideanDistancePoints = mathUtils.euclideanDistancePoints - -local findMovementPosition = movementUtils.findMovementPosition - -local removeSquadFromChunk = chunkPropertyUtils.removeSquadFromChunk -local addDeathGenerator = chunkPropertyUtils.addDeathGenerator -local getDeathGeneratorRating = chunkPropertyUtils.getDeathGeneratorRating - -local getPlayersOnChunk = chunkPropertyUtils.getPlayersOnChunk -local getHiveCount = chunkPropertyUtils.getHiveCount -local getNestCount = chunkPropertyUtils.getNestCount - -local getNeighborChunks = mapUtils.getNeighborChunks -local addSquadToChunk = chunkPropertyUtils.addSquadToChunk -local getChunkByXY = mapUtils.getChunkByXY -local positionToChunkXY = mapUtils.positionToChunkXY -local addMovementPenalty = movementUtils.addMovementPenalty -local positionFromDirectionAndFlat = mapUtils.positionFromDirectionAndFlat - -local euclideanDistanceNamed = mathUtils.euclideanDistanceNamed - -local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator -local getResourceGenerator = chunkPropertyUtils.getResourceGenerator - -local scoreNeighborsForAttack = movementUtils.scoreNeighborsForAttack -local scoreNeighborsForSettling = movementUtils.scoreNeighborsForSettling - --- module code - -local function scoreResourceLocationKamikaze(_, neighborChunk) - local settle = neighborChunk[RESOURCE_PHEROMONE] - return settle - - (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[ENEMY_PHEROMONE] -end - -local function scoreSiegeLocationKamikaze(_, neighborChunk) - local settle = neighborChunk[BASE_PHEROMONE] - + neighborChunk[RESOURCE_PHEROMONE] * 0.5 - + (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[ENEMY_PHEROMONE] - - return settle -end - -local function scoreResourceLocation(map, neighborChunk) - local settle = (getDeathGeneratorRating(map, neighborChunk) * neighborChunk[RESOURCE_PHEROMONE]) - return settle - - (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[ENEMY_PHEROMONE] -end - -local function scoreSiegeLocation(map, neighborChunk) - local settle = neighborChunk[BASE_PHEROMONE] - + neighborChunk[RESOURCE_PHEROMONE] * 0.5 - + (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[ENEMY_PHEROMONE] - - return settle * getDeathGeneratorRating(map, neighborChunk) -end - -local function scoreAttackLocation(map, neighborChunk) - local damage = neighborChunk[BASE_PHEROMONE] + - (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - return damage * getDeathGeneratorRating(map, neighborChunk) -end - -local function scoreAttackKamikazeLocation(_, neighborChunk) - local damage = neighborChunk[BASE_PHEROMONE] + (neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) - return damage -end - -local function settleMove(map, squad) - local universe = map.universe - local group = squad.group - local targetPosition = {x=0,y=0} - - local groupPosition = group.position - local x, y = positionToChunkXY(groupPosition) - local chunk = getChunkByXY(map, x, y) - local scoreFunction = scoreResourceLocation - if (squad.type == BASE_AI_STATE_SIEGE) then - if squad.kamikaze then - scoreFunction = scoreSiegeLocationKamikaze - else - scoreFunction = scoreSiegeLocation - end - elseif squad.kamikaze then - scoreFunction = scoreResourceLocationKamikaze - end - local squadChunk = squad.chunk - if squadChunk ~= -1 then - addDeathGenerator(map, squadChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - end - if chunk ~= -1 then - addSquadToChunk(map, chunk, squad) - addMovementPenalty(squad, chunk) - if not squad.group.valid then - return - end - end - local distance = euclideanDistancePoints(groupPosition.x, - groupPosition.y, - squad.originPosition.x, - squad.originPosition.y) - local cmd - local position - local surface = map.surface - - if (chunk ~= -1) and - ( - (distance >= squad.maxDistance) or - ( - (getResourceGenerator(map, chunk) ~= 0) and (getNestCount(map, chunk) == 0) and (getHiveCount(map, chunk) == 0) - ) - ) - then - position = findMovementPosition(surface, groupPosition) - - if not position then - position = groupPosition - end - - cmd = universe.settleCommand - if squad.kamikaze then - cmd.distraction = DEFINES_DISTRACTION_NONE - else - cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY - end - - setPositionInCommand(cmd, position) - - squad.status = SQUAD_BUILDING - - group.set_command(cmd) - else - local attackChunk, - attackDirection, - nextAttackChunk, - nextAttackDirection = scoreNeighborsForSettling(map, - chunk, - getNeighborChunks(map, x, y), - scoreFunction) - - if (attackChunk == -1) then - cmd = universe.wanderCommand - group.set_command(cmd) - return - elseif (attackDirection ~= 0) then - local attackPlayerThreshold = universe.attackPlayerThreshold - - if (nextAttackChunk ~= -1) then - if (getPlayerBaseGenerator(map, nextAttackChunk) == 0) and (getPlayersOnChunk(map, nextAttackChunk) == 0) - then - attackChunk = nextAttackChunk - position = findMovementPosition( - surface, - positionFromDirectionAndFlat( - nextAttackDirection, - positionFromDirectionAndFlat( - attackDirection, - groupPosition - ) - ) - ) - else - position = groupPosition - end - else - position = findMovementPosition( - surface, - positionFromDirectionAndFlat( - attackDirection, - groupPosition - ) - ) - end - - if position then - targetPosition.x = position.x - targetPosition.y = position.y - if nextAttackChunk ~= -1 then - addDeathGenerator(map, nextAttackChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - else - addDeathGenerator(map, attackChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - end - else - cmd = universe.wanderCommand - group.set_command(cmd) - return - end - - if (nextAttackChunk ~= -1) and - ((getPlayerBaseGenerator(map, nextAttackChunk) ~= 0) or (getPlayersOnChunk(map, nextAttackChunk) ~= 0)) - then - cmd = universe.settleCommand - squad.status = SQUAD_BUILDING - if squad.kamikaze then - cmd.distraction = DEFINES_DISTRACTION_NONE - else - cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY - end - elseif (getPlayerBaseGenerator(map, attackChunk) ~= 0) or - (attackChunk[PLAYER_PHEROMONE] >= attackPlayerThreshold) - then - cmd = universe.attackCommand - - if not squad.rabid then - squad.frenzy = true - squad.frenzyPosition.x = groupPosition.x - squad.frenzyPosition.y = groupPosition.y - end - else - cmd = universe.moveCommand - if squad.rabid or squad.kamikaze then - cmd.distraction = DEFINES_DISTRACTION_NONE - else - cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY - end - end - else - cmd = universe.settleCommand - targetPosition.x = groupPosition.x - targetPosition.y = groupPosition.y - - if squad.kamikaze then - cmd.distraction = DEFINES_DISTRACTION_NONE - else - cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY - end - - squad.status = SQUAD_BUILDING - end - - setPositionInCommand(cmd, targetPosition) - - group.set_command(cmd) - end -end - -local function attackMove(map, squad) - - local universe = map.universe - local targetPosition = {0,0} - - local group = squad.group - - local surface = map.surface - local position - local groupPosition = group.position - local x, y = positionToChunkXY(groupPosition) - local chunk = getChunkByXY(map, x, y) - local attackScorer = scoreAttackLocation - if squad.kamikaze then - attackScorer = scoreAttackKamikazeLocation - end - local squadChunk = squad.chunk - if squadChunk ~= -1 then - addDeathGenerator(map, squadChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - end - if chunk ~= -1 then - addSquadToChunk(map, chunk, squad) - addMovementPenalty(squad, chunk) - if not squad.group.valid then - return - end - end - squad.frenzy = (squad.frenzy and (euclideanDistanceNamed(groupPosition, squad.frenzyPosition) < 100)) - local attackChunk, attackDirection, - nextAttackChunk, nextAttackDirection = scoreNeighborsForAttack(map, - chunk, - getNeighborChunks(map, x, y), - attackScorer) - local cmd - if (attackChunk == -1) then - cmd = universe.wanderCommand - group.set_command(cmd) - return - end - - if (nextAttackChunk ~= -1) then - attackChunk = nextAttackChunk - position = findMovementPosition( - surface, - positionFromDirectionAndFlat( - nextAttackDirection, - positionFromDirectionAndFlat( - attackDirection, - groupPosition - ) - ) - ) - else - position = findMovementPosition( - surface, - positionFromDirectionAndFlat( - attackDirection, - groupPosition - ) - ) - end - - if not position then - cmd = universe.wanderCommand - group.set_command(cmd) - return - else - targetPosition.x = position.x - targetPosition.y = position.y - if (nextAttackChunk ~= -1) then - addDeathGenerator(map, nextAttackChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - else - addDeathGenerator(map, attackChunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - end - end - - if (getPlayerBaseGenerator(map, attackChunk) ~= 0) and - (attackChunk[PLAYER_PHEROMONE] >= universe.attackPlayerThreshold) - then - cmd = universe.attackCommand - - if not squad.rabid then - squad.frenzy = true - squad.frenzyPosition.x = groupPosition.x - squad.frenzyPosition.y = groupPosition.y - end - else - cmd = universe.moveCommand - if squad.rabid or squad.frenzy then - cmd.distraction = DEFINES_DISTRACTION_BY_ANYTHING - else - cmd.distraction = DEFINES_DISTRACTION_BY_ENEMY - end - end - setPositionInCommand(cmd, targetPosition) - - group.set_command(cmd) -end - -local function buildMove(map, squad) - local group = squad.group - local universe = map.universe - local groupPosition = group.position - local newGroupPosition = findMovementPosition(map.surface, groupPosition) - - if not newGroupPosition then - setPositionInCommand(universe.settleCommand, groupPosition) - else - setPositionInCommand(universe.settleCommand, newGroupPosition) - end - - group.set_command(universe.compoundSettleCommand) -end - -function squadAttack.cleanSquads(universe, tick) - local squads = universe.groupNumberToSquad - local groupId = universe.squadIterator - local squad - if not groupId then - groupId, squad = next(squads, groupId) - else - squad = squads[groupId] - end - if not groupId then - universe.squadIterator = nil - if (table_size(squads) == 0) then - -- this is needed as the next command remembers the max length a table has been - universe.groupNumberToSquad = {} - end - else - universe.squadIterator = next(squads, groupId) - local group = squad.group - if not group.valid then - if squad.chunk ~= -1 then - addDeathGenerator(squad.map, squad.chunk, FIVE_DEATH_PHEROMONE_GENERATOR_AMOUNT) - end - removeSquadFromChunk(squad.map, squad) - if squad.settlers then - universe.builderCount = universe.builderCount - 1 - if universe.builderCount < 0 then - universe.builderCount = 0 - end - else - universe.squadCount = universe.squadCount - 1 - if squad.type == BASE_AI_STATE_AGGRESSIVE then - local base = squad.base - base.sentAggressiveGroups = base.sentAggressiveGroups - 1 - if base.sentAggressiveGroups < 0 then - base.sentAggressiveGroups = 0 - end - end - if universe.squadCount < 0 then - universe.squadCount = 0 - end - end - squads[groupId] = nil - elseif (group.state == 4) then - squad.wanders = 0 - squadAttack.squadDispatch(squad.map, squad, tick) - elseif (squad.commandTick and (squad.commandTick < tick)) then - if squad.wanders > 5 then - squad.group.destroy() - else - squad.wanders = squad.wanders + 1 - local cmd = universe.wander2Command - squad.commandTick = tick + COMMAND_TIMEOUT - group.set_command(cmd) - group.start_moving() - end - end - end -end - -function squadAttack.squadDispatch(map, squad, tick) - local group = squad.group - if group and group.valid then - local status = squad.status - if (status == SQUAD_RAIDING) then - squad.commandTick = tick + COMMAND_TIMEOUT - attackMove(map, squad) - elseif (status == SQUAD_SETTLING) then - squad.commandTick = tick + COMMAND_TIMEOUT - settleMove(map, squad) - elseif (status == SQUAD_RETREATING) then - squad.commandTick = tick + COMMAND_TIMEOUT - if squad.settlers then - squad.status = SQUAD_SETTLING - settleMove(map, squad) - else - squad.status = SQUAD_RAIDING - attackMove(map, squad) - end - elseif (status == SQUAD_BUILDING) then - squad.commandTick = tick + COMMAND_TIMEOUT - removeSquadFromChunk(map, squad) - buildMove(map, squad) - elseif (status == SQUAD_GUARDING) then - squad.commandTick = tick + COMMAND_TIMEOUT - if squad.settlers then - squad.status = SQUAD_SETTLING - settleMove(map, squad) - else - squad.status = SQUAD_RAIDING - attackMove(map, squad) - end - end - end -end - -squadAttackG = squadAttack -return squadAttack diff --git a/Rampant_3.1.2/libs/SquadDefense.lua b/Rampant_3.1.2/libs/SquadDefense.lua deleted file mode 100644 index 434ad1a0..00000000 --- a/Rampant_3.1.2/libs/SquadDefense.lua +++ /dev/null @@ -1,166 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if aiDefenseG then - return aiDefenseG -end -local aiDefense = {} - --- imports - -local constants = require("Constants") -local mapUtils = require("MapUtils") -local unitGroupUtils = require("UnitGroupUtils") -local movementUtils = require("MovementUtils") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local baseUtils = require("BaseUtils") - --- constants - -local PLAYER_PHEROMONE = constants.PLAYER_PHEROMONE -local BASE_PHEROMONE = constants.BASE_PHEROMONE - -local PLAYER_PHEROMONE_MULTIPLER = constants.PLAYER_PHEROMONE_MULTIPLER - -local SQUAD_RETREATING = constants.SQUAD_RETREATING - -local COOLDOWN_RETREAT = constants.COOLDOWN_RETREAT - --- imported functions - -local findNearbyBase = chunkPropertyUtils.findNearbyBase - -local addSquadToChunk = chunkPropertyUtils.addSquadToChunk - -local positionFromDirectionAndFlat = mapUtils.positionFromDirectionAndFlat -local getNeighborChunks = mapUtils.getNeighborChunks -local findNearbyRetreatingSquad = unitGroupUtils.findNearbyRetreatingSquad -local createSquad = unitGroupUtils.createSquad -local scoreNeighborsForRetreat = movementUtils.scoreNeighborsForRetreat -local findMovementPosition = movementUtils.findMovementPosition - -local getRetreatTick = chunkPropertyUtils.getRetreatTick -local getPlayerBaseGenerator = chunkPropertyUtils.getPlayerBaseGenerator -local setRetreatTick = chunkPropertyUtils.setRetreatTick -local getDeathGeneratorRating = chunkPropertyUtils.getDeathGeneratorRating -local getEnemyStructureCount = chunkPropertyUtils.getEnemyStructureCount - --- module code - -local function scoreRetreatLocation(map, neighborChunk) - return (-neighborChunk[BASE_PHEROMONE] + - -(neighborChunk[PLAYER_PHEROMONE] * PLAYER_PHEROMONE_MULTIPLER) + - -(getPlayerBaseGenerator(map, neighborChunk) * 1000)) * - getDeathGeneratorRating(map, neighborChunk) -end - -function aiDefense.retreatUnits(chunk, cause, map, tick, radius) - if (tick - getRetreatTick(map, chunk) > COOLDOWN_RETREAT) and (getEnemyStructureCount(map, chunk) == 0) then - - setRetreatTick(map, chunk, tick) - local exitPath,exitDirection, - nextExitPath,nextExitDirection = scoreNeighborsForRetreat(chunk, - getNeighborChunks(map, - chunk.x, - chunk.y), - scoreRetreatLocation, - map) - local universe = map.universe - local position = { - x = chunk.x + 16, - y = chunk.y + 16 - } - local retreatPosition - local surface = map.surface - if (exitPath == -1) then - return - elseif (nextExitPath ~= -1) then - retreatPosition = findMovementPosition( - surface, - positionFromDirectionAndFlat( - nextExitDirection, - positionFromDirectionAndFlat( - exitDirection, - position - ) - ) - ) - exitPath = nextExitPath - else - retreatPosition = findMovementPosition( - surface, - positionFromDirectionAndFlat( - exitDirection, - position - ) - ) - end - - if retreatPosition then - position.x = retreatPosition.x - position.y = retreatPosition.y - else - return - end - - local newSquad = findNearbyRetreatingSquad(map, exitPath) - local created = false - - if not newSquad then - if (universe.squadCount < universe.AI_MAX_SQUAD_COUNT) then - created = true - local base = findNearbyBase(map, chunk) - if not base then - return - end - newSquad = createSquad(position, map, nil, false, base) - else - return - end - end - - universe.fleeCommand.from = cause - universe.retreatCommand.group = newSquad.group - - universe.formRetreatCommand.unit_search_distance = radius - - local foundUnits = surface.set_multi_command(universe.formRetreatCommand) - - if (foundUnits == 0) then - if created then - newSquad.group.destroy() - end - return - end - - if created then - universe.groupNumberToSquad[newSquad.groupNumber] = newSquad - universe.squadCount = universe.squadCount + 1 - end - - newSquad.status = SQUAD_RETREATING - - addSquadToChunk(map, chunk, newSquad) - - newSquad.frenzy = true - local squadPosition = newSquad.group.position - newSquad.frenzyPosition.x = squadPosition.x - newSquad.frenzyPosition.y = squadPosition.y - end -end - -aiDefenseG = aiDefense -return aiDefense diff --git a/Rampant_3.1.2/libs/StringUtils.lua b/Rampant_3.1.2/libs/StringUtils.lua deleted file mode 100644 index 379ce4e7..00000000 --- a/Rampant_3.1.2/libs/StringUtils.lua +++ /dev/null @@ -1,29 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if stringUtilsG then - return stringUtilsG -end -local stringUtils = {} - -local sSub = string.sub - -function stringUtils.isRampantSetting(str) - return sSub(str, 1, #"rampant--") == "rampant--" -end - -stringUtilsG = stringUtils -return stringUtils diff --git a/Rampant_3.1.2/libs/UnitGroupUtils.lua b/Rampant_3.1.2/libs/UnitGroupUtils.lua deleted file mode 100644 index 1d050ec1..00000000 --- a/Rampant_3.1.2/libs/UnitGroupUtils.lua +++ /dev/null @@ -1,168 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if unitGroupUtilsG then - return unitGroupUtilsG -end -local unitGroupUtils = {} - --- imports - -local mapUtils = require("MapUtils") -local constants = require("Constants") -local chunkPropertyUtils = require("ChunkPropertyUtils") -local mathUtils = require("MathUtils") - --- constants - -local MINIMUM_EXPANSION_DISTANCE = constants.MINIMUM_EXPANSION_DISTANCE -local SQUAD_RETREATING = constants.SQUAD_RETREATING -local SQUAD_GUARDING = constants.SQUAD_GUARDING - --- imported functions - -local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG - -local getSquadsOnChunk = chunkPropertyUtils.getSquadsOnChunk - -local getNeighborChunks = mapUtils.getNeighborChunks - --- module code - -function unitGroupUtils.findNearbyRetreatingSquad(map, chunk) - - for _,squad in pairs(getSquadsOnChunk(map, chunk)) do - local unitGroup = squad.group - if (squad.status == SQUAD_RETREATING) and unitGroup and unitGroup.valid then - return squad - end - end - - local neighbors = getNeighborChunks(map, chunk.x, chunk.y) - - for i=1,#neighbors do - local neighbor = neighbors[i] - if neighbor ~= -1 then - for _,squad in pairs(getSquadsOnChunk(map, neighbor)) do - local unitGroup = squad.group - if (squad.status == SQUAD_RETREATING) and unitGroup and unitGroup.valid then - return squad - end - end - end - end - return nil -end - -function unitGroupUtils.findNearbySquad(map, chunk) - - for _,squad in pairs(getSquadsOnChunk(map, chunk)) do - local unitGroup = squad.group - if unitGroup and unitGroup.valid then - return squad - end - end - - local neighbors = getNeighborChunks(map, chunk.x, chunk.y) - - for i=1,#neighbors do - local neighbor = neighbors[i] - if neighbor ~= -1 then - for _,squad in pairs(getSquadsOnChunk(map, neighbor)) do - local unitGroup = squad.group - if unitGroup and unitGroup.valid then - return squad - end - end - end - end - - return nil -end - -function unitGroupUtils.calculateSettlerMaxDistance(universe) - local targetDistance - local distanceRoll = universe.random() - if distanceRoll < 0.05 then - return 0 - elseif distanceRoll < 0.30 then - targetDistance = universe.expansionLowTargetDistance - elseif distanceRoll < 0.70 then - targetDistance = universe.expansionMediumTargetDistance - elseif distanceRoll < 0.95 then - targetDistance = universe.expansionHighTargetDistance - else - return universe.expansionMaxDistance - end - return gaussianRandomRangeRG(targetDistance, - universe.expansionDistanceDeviation, - MINIMUM_EXPANSION_DISTANCE, - universe.expansionMaxDistance, - universe.random) -end - -function unitGroupUtils.createSquad(position, map, group, settlers, base) - local unitGroup = group or map.surface.create_unit_group({position=position}) - - local squad = { - group = unitGroup, - status = SQUAD_GUARDING, - rabid = false, - penalties = {}, - base = base, - type = base.stateAI, - frenzy = false, - map = map, - wanders = 0, - settlers = settlers or false, - kamikaze = false, - frenzyPosition = {x = 0, - y = 0}, - maxDistance = 0, - groupNumber = unitGroup.group_number, - originPosition = {x = 0, - y = 0}, - commandTick = nil, - chunk = -1 - } - - if settlers then - squad.maxDistance = unitGroupUtils.calculateSettlerMaxDistance(map.universe) - end - - if position then - squad.originPosition.x = position.x - squad.originPosition.y = position.y - elseif group then - squad.originPosition.x = group.position.x - squad.originPosition.y = group.position.y - end - - return squad -end - -function unitGroupUtils.calculateKamikazeSquadThreshold(memberCount, universe) - local threshold = (memberCount / universe.attackWaveMaxSize) * 0.2 + (universe.evolutionLevel * 0.2) - return threshold -end - -function unitGroupUtils.calculateKamikazeSettlerThreshold(memberCount, universe) - local threshold = (memberCount / universe.expansionMaxSize) * 0.2 + (universe.evolutionLevel * 0.2) - return threshold -end - -unitGroupUtilsG = unitGroupUtils -return unitGroupUtils diff --git a/Rampant_3.1.2/libs/UnitUtils.lua b/Rampant_3.1.2/libs/UnitUtils.lua deleted file mode 100644 index 73b712dd..00000000 --- a/Rampant_3.1.2/libs/UnitUtils.lua +++ /dev/null @@ -1,130 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -if (unitUtilsG) then - return unitUtilsG -end -local unitUtils = {} - --- imports - -local constants = require("Constants") -local chunkPropertyUtils = require("ChunkPropertyUtils") - --- constants - -local DEFINES_WIRE_TYPE_RED = defines.wire_type.red -local DEFINES_WIRE_TYPE_GREEN = defines.wire_type.green - -local ENERGY_THIEF_CONVERSION_TABLE = constants.ENERGY_THIEF_CONVERSION_TABLE -local ENERGY_THIEF_LOOKUP = constants.ENERGY_THIEF_LOOKUP - -local ENERGY_THIEF_DRAIN_CRYSTALS = constants.ENERGY_THIEF_DRAIN_CRYSTALS - --- imported functions - -local setDrainPylons = chunkPropertyUtils.setDrainPylons - --- module code - -local function convertTypeToDrainCrystal(evolutionFactor, entity) - if (entity == "pole") then - return "crystal-drain-pole-rampant" - else - if (entity == "smallUnit") then - if (evolutionFactor < 0.25) then - return ENERGY_THIEF_DRAIN_CRYSTALS[1] - elseif (evolutionFactor < 0.50) then - return ENERGY_THIEF_DRAIN_CRYSTALS[2] - elseif (evolutionFactor < 0.75) then - return ENERGY_THIEF_DRAIN_CRYSTALS[3] - else - return ENERGY_THIEF_DRAIN_CRYSTALS[4] - end - elseif (entity == "unit") then - if (evolutionFactor < 0.25) then - return ENERGY_THIEF_DRAIN_CRYSTALS[4] - elseif (evolutionFactor < 0.50) then - return ENERGY_THIEF_DRAIN_CRYSTALS[5] - elseif (evolutionFactor < 0.75) then - return ENERGY_THIEF_DRAIN_CRYSTALS[6] - else - return ENERGY_THIEF_DRAIN_CRYSTALS[7] - end - else - if (evolutionFactor < 0.25) then - return ENERGY_THIEF_DRAIN_CRYSTALS[7] - elseif (evolutionFactor < 0.50) then - return ENERGY_THIEF_DRAIN_CRYSTALS[8] - elseif (evolutionFactor < 0.75) then - return ENERGY_THIEF_DRAIN_CRYSTALS[9] - else - return ENERGY_THIEF_DRAIN_CRYSTALS[10] - end - end - end -end - -function unitUtils.createDrainPylon(map, cause, entity, entityType) - if ((cause and ENERGY_THIEF_LOOKUP[cause.name]) or (not cause)) then - local conversion = ENERGY_THIEF_CONVERSION_TABLE[entityType] - if conversion then - local newEntity = map.surface.create_entity({ - position=entity.position, - name=convertTypeToDrainCrystal(entity.force.evolution_factor, conversion), - direction=entity.direction - }) - if (conversion == "pole") then - local targetEntity = map.surface.create_entity({ - position=entity.position, - name="pylon-target-rampant", - direction=entity.direction - }) - targetEntity.backer_name = "" - local wires = entity.neighbours - if wires then - for _,v in pairs(wires.copper) do - if (v.valid) then - newEntity.connect_neighbour(v); - end - end - for _,v in pairs(wires.red) do - if (v.valid) then - newEntity.connect_neighbour({ - wire = DEFINES_WIRE_TYPE_RED, - target_entity = v - }); - end - end - for _,v in pairs(wires.green) do - if (v.valid) then - newEntity.connect_neighbour({ - wire = DEFINES_WIRE_TYPE_GREEN, - target_entity = v - }); - end - end - end - setDrainPylons(map, targetEntity, newEntity) - elseif newEntity.backer_name then - newEntity.backer_name = "" - end - end - end -end - -unitUtilsG = unitUtils -return unitUtils diff --git a/Rampant_3.1.2/locale/en/locale.cfg b/Rampant_3.1.2/locale/en/locale.cfg deleted file mode 100644 index 4cb08655..00000000 --- a/Rampant_3.1.2/locale/en/locale.cfg +++ /dev/null @@ -1,349 +0,0 @@ -[mod-description] -Rampant=Improves the enemies tactics by using potential fields (pheromones) allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, raids, rallying death cry, and player hunting. Uses blockable biter projectiles. Adds new Enemies which can be disabled in mod settings. Difficulty setting in mod options menu. - -[rampant] - -neutral=Common -acid=Acidic -physical=Brutal -electric=Electric -suicide=Suicide -nuclear=Nuclear -fire=Fire -inferno=Inferno -troll=Regenerative -fast=Fast -laser=Laser -wasp=Wasp -spawner=Spawner -poison=Poison -energy=Sapper -energy-thief=Sapper -entity-proxy=Spawning - -biter=Biter: -spitter=Spitter: -biter-spawner=Biter Nest: -spitter-spawner=Spitter Nest: -worm=Worm: -turret=Worm: -hive=Hive: -spitter-wasp=Drone: -worm-wasp=Drone: -spawn=Biter: -spitter-egg=Eggs: -worm-egg=Eggs: - -t1=Larva T1 -t2=Pupae T2 -t3=Worker T3 -t4=Grunt T4 -t5=Soldier T5 -t6=Elite T6 -t7=Champion T7 -t8=Overlord T8 -t9=Titan T9 -t10=Leviathan T10 - -acid-pool=Acid Pool -fire-pool=Fire - -[entity-name] -crystal-v1-drain-rampant=Power Draining Crystal -crystal-v2-drain-rampant=Power Draining Crystal -crystal-v3-drain-rampant=Power Draining Crystal -crystal-v4-drain-rampant=Power Draining Crystal -crystal-v5-drain-rampant=Power Draining Crystal -crystal-v6-drain-rampant=Power Draining Crystal -crystal-v7-drain-rampant=Power Draining Crystal -crystal-v8-drain-rampant=Power Draining Crystal -crystal-v9-drain-rampant=Power Draining Crystal -crystal-v10-drain-rampant=Power Draining Crystal -crystal-drain-pole-rampant=Crystal Pylon -pylon-target-rampant=Crystal Pylon - -acid-ball-acid-fire-rampant=Acid Pool -acid-ball-1-acid-fire-rampant=Acid Pool -acid-ball-2-acid-fire-rampant=Acid Pool -acid-ball-2-direction-acid-fire-rampant=Acid Pool -acid-ball-3-acid-fire-rampant=Acid Pool -acid-ball-3-direction-acid-fire-rampant=Acid Pool -acid-ball-4-acid-fire-rampant=Acid Pool -acid-ball-5-acid-fire-rampant=Acid Pool - -spawner-proxy-1-rampant=Spawner Proxy -spawner-proxy-2-rampant=Spawner Proxy -spawner-proxy-3-rampant=Spawner Proxy - -[entity-description] - -[mod-setting-name] -rampant--printBaseSettling=AI: Print when settlers start building -rampant--printAwakenMessage=World: Print when initial peace ends -rampant--initialPeaceTime=World: Starting peace duration -rampant--printBaseUpgrades=AI: Print Faction Base Upgrades -rampant--max-base-mutations=World: Max Mutations per faction -rampant--baseDistanceModifier=AI: Faction Base Distance Modifier -rampant--printBaseAdaptation=AI: Print Faction Mutations -rampant--adaptationModifier=AI: Adaption Modifier -rampant--unitsAffectedByTiles=World: Units affected by tiles -rampant--oldRedEnemyMapColor=Map: Revert Enemy Map Color -rampant--unitSpawnerBreath=World: Unit Nest breath air -rampant--useDumbProjectiles=Projectiles: Use blockable projectiles -rampant--attackWaveGenerationThresholdMax=Attack Wave: Starting chunk attack threshold -rampant--attackWaveGenerationThresholdMin=Attack Wave: Ending chunk attack threshold -rampant--attackWaveMaxSize=Attack Wave: Max biter group size that can be directly formed -rampant--maxNumberOfSquads=Attack Wave: Max number of attack groups that can be active at once -rampant--maxNumberOfBuilders=Attack Wave: Max number of building groups that can be active at once -rampant--safeBuildings=Safety: Enable building safety. -rampant--safeBuildings-curvedRail=Safety: Make curved rails safe from biters -rampant--safeBuildings-straightRail=Safety: Make straight rails safe from biters -rampant--safeBuildings-bigElectricPole=Safety: Make big electric poles safe from biters -rampant--safeBuildings-railChainSignals=Safety: Make rail chain signals safe from biters -rampant--safeBuildings-railSignals=Safety: Make rail signals safe from biters -rampant--safeBuildings-trainStops=Safety: Make train stops safe from biters -rampant--permanentNocturnal=AI: Nocturnal Mode -rampant--aiPointsScaler=AI: Difficulty Scaling -rampant--aiPointsPrintSpendingToChat=AI: Print Point Spending to Chat -rampant--aiPointsPrintGainsToChat=AI: Print Point Gains to Chat -rampant--addWallResistanceAcid=Safety; Increase wall resistance to spitters -rampant--safeBuildings-lamps=Safety: Make lamps safe from biters -rampant--removeBloodParticles=Optimization: Remove blood particles (Reduces lag spikes) -rampant--attack-warning=Notification: Enable attack wave warnings -rampant--enableSwarm=Attack Wave: Enable the swarm -rampant--newEnemies=World: Enable new enemies -rampant--enemySeed=World: Enemy Random Seed -rampant--deadZoneFrequency=World: Enemy deadzone frequency -rampant--newEnemyVariations=World: Enemy Variations -rampant--enableBobsUnits=World: Enable Bobs as a faction -rampant--enableNEUnits=World: Enable NE as a faction -rampant--disallowFriendlyFire=Safety: Disallow Friendly Fire Splash Damage -rampant--tierStart=World: Beginning enemy level -rampant--tierEnd=World: Ending enemy level -rampant--enableMigration=AI: Enable Migration -rampant--peacefulAIToggle=AI: Enable Peaceful -rampant--printAIStateChanges=AI: Print State Changes to Chat -rampant--debugTemperament=DEBUG: Print Temperament Changes to Chat - -rampant--attackWaveGenerationUsePlayerProximity=Attack Wave: Use Player Proximity as attack trigger -rampant--attackPlayerThreshold=Attack Wave: Player score contribution threshold - -rampant--unkillableLogisticRobots=World: Unkillable logistic bots -rampant--unkillableConstructionRobots=World: Unkillable construction bots - -rampant--unitBiterHealthScaler=Modifier: Biter Health Scaler -rampant--unitBiterSpeedScaler=Modifier: Biter Speed Scaler -rampant--unitBiterDamageScaler=Modifier: Biter Damage Scaler -rampant--unitBiterRangeScaler=Modifier: Biter Range Scaler -rampant--unitBiterHealingScaler=Modifier: Biter Healing Scaler -rampant--unitSpitterHealthScaler=Modifier: Spitter Health Scaler -rampant--unitSpitterSpeedScaler=Modifier: Spitter Speed Scaler -rampant--unitSpitterDamageScaler=Modifier: Spitter Damage Scaler -rampant--unitSpitterRangeScaler=Modifier: Spitter Range Scaler -rampant--unitSpitterHealingScaler=Modifier: Spitter Healing Scaler -rampant--unitDroneHealthScaler=Modifier: Drone Health Scaler -rampant--unitDroneSpeedScaler=Modifier: Drone Speed Scaler -rampant--unitDroneDamageScaler=Modifier: Drone Damage Scaler -rampant--unitDroneRangeScaler=Modifier: Drone Range Scaler -rampant--unitDroneHealingScaler=Modifier: Drone Healing Scaler -rampant--unitWormHealthScaler=Modifier: Worm Health Scaler -rampant--unitWormDamageScaler=Modifier: Worm Damage Scaler -rampant--unitWormRangeScaler=Modifier: Worm Range Scaler -rampant--unitWormHealingScaler=Modifier: Worm Healing Scaler -rampant--unitSpawnerHealthScaler=Modifier: Unit Spawner Health Scaler -rampant--unitSpawnerOwnedScaler=Modifier: Unit Spawner Owned Count Scaler -rampant--unitSpawnerSpawnScaler=Modifier: Unit Spawner Spawn Count Scaler -rampant--unitSpawnerRespawnScaler=Modifier: Unit Spawner Respawn Rate Scaler -rampant--unitSpawnerHealingScaler=Modifier: Unit Spawner Healing Scaler - -rampant--unitHiveHealthScaler=Modifier: Hive Health Scaler -rampant--unitHiveHealingScaler=Modifier: Hive Healing Scaler -rampant--unitHiveRespawnScaler=Modifier: Hive Respawn Scaler - -rampant--enableShrinkNestsAndWorms=Attack Wave: Shrink Nests and Worms - -rampant--raidAIToggle=AI: Enable Raiding AI -rampant--siegeAIToggle=AI: Enable Siege AI - -rampant--laserEnemy=World: Laser Biter Faction -rampant--waspEnemy=World: Wasp Biter Faction -rampant--spawnerEnemy=World: Spawner Biter Faction -rampant--trollEnemy=World: Regenerative Biter Faction -rampant--fastEnemy=World: Fast Biter Faction -rampant--infernoEnemy=World: Inferno Biter Faction -rampant--nuclearEnemy=World: Nuclear Biter Faction -rampant--electricEnemy=World: Electric Biter Faction -rampant--fireEnemy=World: Fire Biter Faction -rampant--suicideEnemy=World: Suicide Biter Faction -rampant--physicalEnemy=World: Brutal Biter Faction -rampant--acidEnemy=World: Acidic Biter Faction -rampant--energyThiefEnemy=World: Sapper Biter Faction -rampant--poisonEnemy=World: Poison Biter Faction - -rampant--neutralTints=World: Neutral Biter Faction Colors -rampant--laserTints=World: Laser Biter Faction Colors -rampant--waspTints=World: Wasp Biter Faction Colors -rampant--spawnerTints=World: Spawner Biter Faction Colors -rampant--trollTints=World: Regenerative Biter Faction Colors -rampant--fastTints=World: Fast Biter Faction Colors -rampant--infernoTints=World: Inferno Biter Faction Colors -rampant--nuclearTints=World: Nuclear Biter Faction Colors -rampant--electricTints=World: Electric Biter Faction Colors -rampant--fireTints=World: Fire Biter Faction Colors -rampant--suicideTints=World: Suicide Biter Faction Colors -rampant--physicalTints=World: Brutal Biter Faction Colors -rampant--acidTints=World: Acidic Biter Faction Colors -rampant--energyThiefTints=World: Sapper Biter Faction Colors -rampant--poisonTints=World: Poison Biter Faction Colors - -rampant--disableCollidingProjectiles=Projectiles: Non biter force colliding projectiles -rampant--enableFullMapScan=Compatibility: Enable full map scanning -rampant--unitAndSpawnerFadeTime=Biter, Spitter, Worm, Nest, and Hive Corpse Fade Time -rampant--enableFadeTime=Enable corpse fade time -rampant--temperamentRateModifier=AI: Temperament Rate Modifier - -[mod-setting-description] -rampant--printBaseSettling=Print a message to the console when settlers begin building a nest -rampant--printAwakenMessage=Print a message to the console when the initial peace time ends -rampant--initialPeaceTime=The AI will remain in the peaceful state until the specified number of minutes have passed in game. This should give time for someone to get an initial base started. -rampant--printBaseUpgrades=Print to console when a building is upgraded by the AI. These should not happen during a migration, but over the lifetime of a enemy structure. -rampant--max-base-mutations=Requires Rampant new enemies to have any affect. This number represents the number of times a regional faction group can mutate into other factions. Regional faction groups adapt over time typically to a faction that is strong against the type of damage they are being killed with. Death threshold for mutation is based on evolution. (4500 Deaths:<50% Evolution, 7500:<70%, 11000:<90%, 16000) -rampant--baseDistanceModifier=Modifies the distance between factions as a percentage change. Low percentages may impact performance. -rampant--printBaseAdaptation=Display a message to the chat console when a faction mutates based on the number of enemies killed -rampant--adaptationModifier=Modifies the number of units or enemy buildings that must be destroyed before the adaptation happens based on the damage types that killed the units or buildings. This modifier is a percentage change using the following as starting place (Default deaths events starts at 4500 under 0.5 evo, under 0.7 is 7500, under 0.9 is 11000, and +0.9 is 16000) -rampant--unitAndSpawnerFadeTime=The time in seconds for how long biter corpses stay around -rampant--unitsAffectedByTiles=Units are affected by tile movement modifiers -rampant--oldRedEnemyMapColor=Reverts the enemy map color to the vanilla enemy map color -rampant--unitSpawnerBreath=Now unit spawners breath air so they are affected by things like poison capsules -rampant--useDumbProjectiles=Use the projectile attacks that are blockable. This should be checked if you are using the new enemies. -rampant--attackWaveGenerationThresholdMax=The total score that a chunk must reach in order for an attack wave to spawn. DOES NOT affect vanilla biters waves. Scaling linearly with evolution factor (starting threshold @ 0.0 evolution) -rampant--attackWaveGenerationThresholdMin=The total score that a chunk must reach in order for an attack wave to spawn. DOES NOT affect vanilla biters waves. Scaling linearly with evolution factor (ending threshold @ 100.0 evolution) -rampant--attackWaveMaxSize=If you wish to change how the attack wave scales with evolution you will need to modify the config.lua in the zip file. -rampant--safeBuildings=This needs to be toggle for the safe building toggles to work. This will cause entities made safe to regenerate with the destructible flag set to false, which causes them to never be targeted or damaged again. -rampant--safeBuildings-curvedRail=Make curved rails safe from biters -rampant--safeBuildings-straightRail=Make straight rails safe from biters -rampant--safeBuildings-bigElectricPole=Make big electric poles safe from biters -rampant--safeBuildings-railChainSignals=Make rail chain signals safe from biters -rampant--safeBuildings-railSignals=Make rail signals safe from biters -rampant--safeBuildings-lamps=Make lamps safe from biters -rampant--safeBuildings-trainStops=Make train stops safe from biters -rampant--permanentNocturnal=Toggling this will cause Rampant attack waves to spawn at night. Works better with the clockwork mod or a mod that extends night. -rampant--aiPointsScaler=Between 0.0 and 100.0. This scales how many action points the ai gets per logic cycle to perform actions like making attack waves. 0.3 - very easy, 0.75 - easy, 1.0 - medium, 1.25+ - hard -rampant--aiPointsPrintSpendingToChat=Print a message to chat whenever Rampant spends points. Includes GPS coordinates. Keep disabled for the hardest Rampant experience. Heads up: can fill up chat quickly during busy battles! -rampant--aiPointsPrintGainsToChat=Print a message to chat whenever Rampant gains points. Does not show passive point generation. Keep disabled for the hardest Rampant experience. Heads up: can fill up chat quickly during busy battles! -rampant--addWallResistanceAcid=Toggling this will cause a %60 acid resistance to be added to all wall entities to reduce the damage done by spitters to walls. -rampant--removeBloodParticles=The blood particles that are created when biters are being killed can cause UPS spikes, this removes them. -rampant--enableSwarm=This reduces the size of the unit collision_mask causing them to reduce pathing collisions and smooth out the attacks -rampant--attack-warning=Shows a message warning players that an attack wave is incoming -rampant--newEnemies=Adds news enemies that will be dispersed over the world. This increases the RAM requirements. With 1 variation for each biter, worm, and nest and 5 tiers expect upto a 2GB RAM increase. With 20 variations and 10 tiers set expect up to 9GB RAM increase. Variations add randominess to each tier of biter, worms, or nests. Tiers are the power level of the biters. -rampant--enemySeed=The seed that powers all of the unit generation, so change this if you want the enemy stats to change -rampant--deadZoneFrequency=The percentage of zones that start without worms or nests -rampant--newEnemyVariations=This number corresponds to the number of variations per tier. This adds randominess to each tier power level. Min 1, Max 20 -rampant--disallowFriendlyFire=Prevents enemy spitters and worms from damaging units or buildings from the same force through splash damage -rampant--tierStart=This is the starting level of the enemy that will be used when generating the set of enemies for the specified number of tiers and increases linearly to the end tier for as many tiers selected. Roughly healthwise each tier is a follows (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). min 1, max 10 -rampant--tierEnd=This is the ending tier level that is reached after increasing linearly from the start tier for as many tiers selected. Roughly healthwise each tier is as follows (1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000). min 1, max 10 -rampant--enableMigration=This will allow the ai to expand its worms and nests. Respects the map settings for biter expansion. -rampant--peacefulAIToggle=The Rampant AI can roll the peaceful state. If this is disabled and the biters roll the peaceful state, they are instead changed to aggressive or migrating state depending on AI: Enabled Migration setting. This does not relate to whether your map has Factorio's Peaceful Mode enabled or disabled. Disable for the hardest Rampant experience. -rampant--printAIStateChanges=Gives you information in the game chat about Rampant's AI state. Messages are displayed for each surface. Disable for the hardest Rampant experience. -rampant--debugTemperament=Prints to chat AI temperament information that controls AI state rolls. This is used for debugging. - -rampant--enableShrinkNestsAndWorms=Reduce the collision box size of nests and worms by 50%. May cause overlapping entities due to the collision box being smaller than the entity graphic. -rampant--attackWaveGenerationUsePlayerProximity=Include player pheromones amount for threshold on chunks with biter nests that will generate a Rampant attack wave. DOES NOT affect vanilla biters waves -rampant--attackPlayerThreshold=The score that a chunk must reach for it to contribute to the attack threshold. Increasing reduces player pheromone cloud impact. - -rampant--unkillableLogisticRobots=This will make logistic bots immune to all damage -rampant--unkillableConstructionRobots=This will make construction bots immune to all damage - -rampant--unitBiterHealthScaler=Scales by a percentage all new enemy biter health -rampant--unitBiterSpeedScaler=Scales by a percentage all new enemy biter speed -rampant--unitBiterDamageScaler=Scales by a percentage all new enemy biter damage -rampant--unitBiterRangeScaler=Scales by a percentage all new enemy biter attack range -rampant--unitBiterHealingScaler=Scales by a percentage all new enemy biter Healing -rampant--unitSpitterHealthScaler=Scales by a percentage all new enemy spitter health -rampant--unitSpitterSpeedScaler=Scales by a percentage all new enemy spitter speed -rampant--unitSpitterDamageScaler=Scales by a percentage all new enemy spitter damage -rampant--unitSpitterRangeScaler=Scales by a percentage all new enemy spitter range -rampant--unitSpitterHealingScaler=Scales by a percentage all new enemy spitter Healing -rampant--unitDroneHealthScaler=Scales by a percentage all new enemy drone health. Drones come from the factions spawner and wasp -rampant--unitDroneSpeedScaler=Scales by a percentage all new enemy drone speed. Drones come from the factions spawner and wasp -rampant--unitDroneDamageScaler=Scales by a percentage all new enemy drone damage. Drones come from the factions spawner and wasp -rampant--unitDroneRangeScaler=Scales by a percentage all new enemy drone range. Drones come from the factions spawner and wasp -rampant--unitDroneHealingScaler=Scales by a percentage all new enemy drone healing. Drones come from the factions spawner and wasp -rampant--unitWormHealthScaler=Scales by a percentage all new enemy worm health -rampant--unitWormDamageScaler=Scales by a percentage all new enemy worm damage -rampant--unitWormRangeScaler=Scales by a percentage all new enemy worm range -rampant--unitWormHealingScaler=Scales by a percentage all new enemy worm healing -rampant--unitSpawnerHealthScaler=Scales by a percentage all new enemy unit spawner health -rampant--unitSpawnerOwnedScaler=Scales by a percentage all new enemy unit spawner max number of units controlled per spawner -rampant--unitSpawnerSpawnScaler=Scales by a percentage all new enemy unit spawner number of units spawned at any one time -rampant--unitSpawnerRespawnScaler=Scales by a percentage all new enemy unit spawner time to spawn new units -rampant--unitSpawnerHealingScaler=Scales by a percentage all new enemy unit spawner healing -rampant--unitHiveHealthScaler=Scales by a percentage all new enemy unit hive health -rampant--unitHiveHealingScaler=Scales by a percentage all new enemy unit hive healing -rampant--unitHiveRespawnScaler=Scales by a percentage all new enemy unit hive time to spawn new units - -rampant--raidAIToggle=Toggles the ai raiding parties from outside your pollution cloud -rampant--siegeAIToggle=Toggles the ai siege parties from outside your pollution cloud that attack or nest - -rampant--laserEnemy=Laser Biter Faction, Laser is major resistance, electric is a minor resistance. Has Biters and Spitter unit types. -rampant--waspEnemy=Wasp Biter Faction, Spitter only units and each spitter spits small drones. -rampant--spawnerEnemy=Spawner Biter Faction, Only Spitters produced by spawners and spitters make eggs that hatch into biters. -rampant--trollEnemy=Regenerative Biter Faction, High health regeneration, major weakness to fire, minor resistance to physical, minor resistance to explosive. -rampant--fastEnemy=Fast Biter Faction, High rate of movement, minor resistance to explosive. -rampant--infernoEnemy=Inferno Biter Faction, Only Spitters that spit flaming acid that burns everything. Major resistance to Acid & Fire, Minor weakness to poison. -rampant--nuclearEnemy=Nuclear Biter Faction, Only Biters that explode like a atomic bomb. Major weakness to explosive. -rampant--electricEnemy=Electric Biter Faction, Only Biters with a short range attack that hits multiple entities in a line. Major resistance to Electric, Minor resistance to Laser. -rampant--fireEnemy=Fire Biter Faction, Major resistance to Acid & Fire. -rampant--suicideEnemy=Suicide Biter Faction, Only Biters that explode when they attack. Minor resistance to Poison, Major weakness to explosive. -rampant--physicalEnemy=Brutal Biter Faction, Only Biters. Major resistance to physical, Major resistance to explosive, Minor Weakness to Electric. -rampant--acidEnemy=Acid Biter Faction, Major resistance to Acid, Minor resistance to Poison. -rampant--energyThiefEnemy=Sapper Biter Faction, Major resistance to Electric, Minor resistance to Laser. Destroying powered structures creates draining crystals. -rampant--poisonEnemy=Poison Biter Faction, Only Biters. On death creates a cloud that heals biters and hurts player objects. Major resistance to Poison, Minor weakness to Electric, Minor weakness to Explosive, Minor weakness to Laser, Minor resistance to Fire. - -rampant--neutralTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--laserTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--waspTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--spawnerTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--trollTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--fastTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--infernoTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--nuclearTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--electricTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--fireTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--suicideTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--physicalTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--acidTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--energyThiefTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color -rampant--poisonTints=All colors should have 8 hex characters rrggbbaa, first color is the base color, second color is the tinting color, third color is the hives color - -rampant--disableCollidingProjectiles=Biter projectiles no longer collide with other biters, worms or nests. Everything else still collides with biter projectiles. -rampant--enableFullMapScan=This setting causes the game map to slowly be scanned for entities created or destroyed outside of the factorio event system. (If a mod isnt using script_raised_built or script_raised_destroyed this will cause Rampant to still eventually be consistent with the game map) - -rampant--enableFadeTime=Enable the fade time to reduce or increase biter, spitter, worm, spawner, and hive. If disabled, no alterations are made to corpse times. - -rampant--maxNumberOfBuilders=More builders requires more UPS. -rampant--maxNumberOfSquads=More squads requires more UPS. -rampant--temperamentRateModifier=Change how quickly Rampant will hit extremes in the ai temperament stat which control attacking and expanding. This is a percentage increase or decrease with 1 being equal to 100%. - -[description] -rampant--planetHasAwoken=Rampant: The natives are beginning to react to your presence. -rampant-bobs-nee-newEnemies=Bobs enemies or NEE has been detected with Rampants new enemies,\nthe artifacts from each of these mods will still work with Rampants new enemies.\nThe generation of bobs or NEE unit spawners explicitly by Rampant is\nno longer supported when the Rampants new enemies are active. -rampant--adaptation2DebugMessage=Faction has mutated bacause the damage type called __1__. Now the Faction will produce __2__ and __3__. Faction mutations __6__ out of __7__. [gps=__4__,__5__] -rampant--adaptation1DebugMessage=Faction has mutated bacause the damage type called __1__. Now the Faction will produce __2__. Faction mutations __5__ out of __6__. [gps=__3__,__4__] -rampant--adaptationFrozenDebugMessage=Faction will no longer mutate into new factions. [gps=__1__,__2__] -rampant--adaptationResetDebugMessage=Faction mutations have been reset. __2__ of __3__ mutations remaining. [gps=__1__,__2__] -rampant--laserEnemyName=Laser Biter -rampant--waspEnemyName=Wasp Biter -rampant--spawnerEnemyName=Spawner Biter -rampant--trollEnemyName=Regenerative Biter -rampant--fastEnemyName=Fast Biter -rampant--infernoEnemyName=Inferno Biter -rampant--nuclearEnemyName=Nuclear Biter -rampant--electricEnemyName=Electric Biter -rampant--fireEnemyName=Fire Biter -rampant--neutralEnemyName=Common Biter -rampant--suicideEnemyName=Suicide Biter -rampant--physicalEnemyName=Brutal Biter -rampant--acidEnemyName=Acidic Biter -rampant--energyThiefEnemyName=Sapper Biter -rampant--poisonEnemyName=Poison Biter diff --git a/Rampant_3.1.2/locale/ko/locale.cfg b/Rampant_3.1.2/locale/ko/locale.cfg deleted file mode 100644 index 94e80843..00000000 --- a/Rampant_3.1.2/locale/ko/locale.cfg +++ /dev/null @@ -1,349 +0,0 @@ -[mod-description] -Rampant=잠재적 ν•„λ“œ(페둜λͺ¬)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°©μ–΄, 후퇴, 증원, 반격, 돌파, 슡격, 죽음의 μ™ΈμΉ¨μ˜ μ§‘κ²° 및 ν”Œλ ˆμ΄μ–΄ 사λƒ₯을 일으켜 적의 μ „μˆ μ„ κ°œμ„ ν•©λ‹ˆλ‹€. 차단 κ°€λŠ₯ν•œ 바이터 λ°œμ‚¬μ²΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λͺ¨λ“œ μ„€μ •μ—μ„œ λΉ„ν™œμ„±ν™”ν•  수 μžˆλŠ” μƒˆλ‘œμš΄ 적을 μΆ”κ°€ν•©λ‹ˆλ‹€. λͺ¨λ“œ μ˜΅μ…˜ λ©”λ‰΄μ˜ 섀정이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. - -[rampant] - -neutral=ν‰λ²”ν•œ -acid=μ‚°μ„± -physical=μž”ν˜Ήν•œ -electric=μ „κΈ° -suicide=자폭 -nuclear=ν•΅ -fire=뢈 -inferno=λΆˆλ°”λ‹€ -troll=μž¬μƒ -fast=고속 -laser=λ ˆμ΄μ € -wasp=말벌 -spawner=μ‚°λž€μž -poison=독 -energy=곡병 -energy-thief=곡병 -entity-proxy= - -biter=바이터: -spitter=μŠ€ν”Όν„°: -biter-spawner=바이터 μ‚°λž€μž₯: -spitter-spawner=μŠ€ν”Όν„° μ‚°λž€μž₯: -worm=λ•…λ²Œλ ˆ: -turret=λ•…λ²Œλ ˆ: -hive=ꡰ락: -spitter-wasp=λ“œλ‘ : -worm-wasp=λ“œλ‘ : -spawn=바이터: -spitter-egg=μ•Œ: -worm-egg=μ•Œ: - -t1=μ• λ²Œλ ˆ T1 -t2=번데기 T2 -t3=일꾼 T3 -t4=그런트 T4 -t5=솔져 T5 -t6=μ—˜λ¦¬νŠΈ T6 -t7=μ±”ν”Όμ–Έ T7 -t8=μ˜€λ²„λ‘œλ“œ T8 -t9=타이탄 T9 -t10=λ ˆλΉ„μ•„νƒ„ T10 - -acid-pool=μ‚°μ„± μ—°λͺ» -fire-pool=뢈 - -[entity-name] -crystal-v1-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v2-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v3-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v4-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v5-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v6-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v7-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v8-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v9-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-v10-drain-rampant=동λ ₯ 유좜 κ²°μ • -crystal-drain-pole-rampant=κ²°μ • 파일런 -pylon-target-rampant=κ²°μ • 파일런 - -acid-ball-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-1-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-2-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-2-direction-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-3-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-3-direction-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-4-acid-fire-rampant=μ‚°μ„± μ—°λͺ» -acid-ball-5-acid-fire-rampant=μ‚°μ„± μ—°λͺ» - -spawner-proxy-1-rampant=μ‚°λž€μž ν”„λ‘μ‹œ -spawner-proxy-2-rampant=μ‚°λž€μž ν”„λ‘μ‹œ -spawner-proxy-3-rampant=μ‚°λž€μž ν”„λ‘μ‹œ - -[entity-description] - -[mod-setting-name] -rampant--printBaseSettling=AI: 원주민듀이 건섀을 μ‹œμž‘ν•˜λ©΄ λ©”μ„Έμ§€ -rampant--printAwakenMessage=세계: 초기 평화가 λλ‚˜λ©΄ λ©”μ„Έμ§€ -rampant--initialPeaceTime=세계: μ‹œμž‘ 평화 지속 κΈ°κ°„ -rampant--printBaseUpgrades=AI: 파벌 κΈ°μ§€ μ—…κ·Έλ ˆμ΄λ“œμ‹œ λ©”μ„Έμ§€ -rampant--max-base-mutations=세계: νŒŒλ²Œλ‹Ή μ΅œλŒ€ 변이 -rampant--baseDistanceModifier=AI: 파벌 κΈ°μ§€ 거리 λ³€κ²½μΉ˜ -rampant--printBaseAdaptation=AI: 파벌 λ³€μ΄μ‹œ λ©”μ„Έμ§€ -rampant--adaptationModifier=AI: 적응 λ³€κ²½μΉ˜ -rampant--unitsAffectedByTiles=세계: 타일에 영ν–₯λ°›λŠ” μœ λ‹› -rampant--oldRedEnemyMapColor=지도: 적 지도 색 λ³€κ²½ -rampant--unitSpawnerBreath=세계: μœ λ‹› λ‘₯μ§€λŠ” 곡기둜 호흑 -rampant--useDumbProjectiles=λ°œμ‚¬μ²΄: 막을 수 μžˆλŠ” λ°œμ‚¬μ²΄ μ‚¬μš© -rampant--attackWaveGenerationThresholdMax=곡격 μ›¨μ΄λΈŒ: 청크 곡격 μ‹œμž‘ μž„κ³„κ°’ -rampant--attackWaveGenerationThresholdMin=곡격 μ›¨μ΄λΈŒ: 청크 곡격 μ’…λ£Œ μž„κ³„κ°’ -rampant--attackWaveMaxSize=곡격 μ›¨μ΄λΈŒ: 직접 ν˜•μ„±λ  수 μžˆλŠ” μ΅œλŒ€ 바이터 κ·Έλ£Ή 크기 -rampant--maxNumberOfSquads=곡격 μ›¨μ΄λΈŒ: ν•œλ²ˆμ— ν™œμ„±ν™”λ  수 μžˆλŠ” μ΅œλŒ€ 곡격 κ·Έλ£Ή 숫자 -rampant--maxNumberOfBuilders=곡격 μ›¨μ΄λΈŒ: ν•œλ²ˆμ— ν™œμ„±ν™”λ  수 μžˆλŠ” μ΅œλŒ€ 건섀 κ·Έλ£Ή 숫자 -rampant--safeBuildings=μ•ˆμ „: 건물 μ•ˆμ „ ν™œμ„±ν™” -rampant--safeBuildings-curvedRail=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° 곑선 철도λ₯Ό μ•ˆμ „ν•˜κ²Œ 함 -rampant--safeBuildings-straightRail=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° 직선 철도λ₯Ό μ•ˆμ „ν•˜κ²Œ 함 -rampant--safeBuildings-bigElectricPole=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° λŒ€ν˜• μ „μ‹ μ£Όλ₯Ό μ•ˆμ „ν•˜κ²Œ 함 -rampant--safeBuildings-railChainSignals=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° 연속 μ‹ ν˜Έλ₯Ό μ•ˆμ „ν•˜κ²Œ 함 -rampant--safeBuildings-railSignals=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° 철도 μ‹ ν˜Έλ₯Ό μ•ˆμ „ν•˜κ²Œ 함 -rampant--safeBuildings-trainStops=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° κΈ°μ°¨ μ •λ₯˜μž₯을 μ•ˆμ „ν•˜κ²Œ 함 -rampant--permanentNocturnal=AI: μ•Όν–‰μ„± λͺ¨λ“œ -rampant--aiPointsScaler=AI: λ‚œμ΄λ„ 쑰절 -rampant--aiPointsPrintSpendingToChat=AI: μ±„νŒ…μ— μ†ŒλΉ„λ˜λŠ” 점수 좜λ ₯ -rampant--aiPointsPrintGainsToChat=AI: μ±„νŒ…μ— μ–»λŠ” 점수 좜λ ₯ -rampant--addWallResistanceAcid=μ•ˆμ „: μŠ€ν”Όν„°μ— λŒ€ν•œ 벽체의 μ €ν•­ 증가 -rampant--safeBuildings-lamps=μ•ˆμ „: λ°”μ΄ν„°λ‘œλΆ€ν„° μ‘°λͺ…을 μ•ˆμ „ν•˜κ²Œ 함 -rampant--removeBloodParticles=μ΅œμ ν™”: ν”Ό μž…μž 제거 (λ ‰ 슀파이크 κ°μ†Œ) -rampant--attack-warning=μ•Œλ¦Ό: 곡격 μ›¨μ΄λΈŒ κ²½κ³  ν™œμ„±ν™” -rampant--enableSwarm=곡격 μ›¨μ΄λΈŒ: λŒ€κ΅° ν™œμ„±ν™” -rampant--newEnemies=세계: μƒˆλ‘œμš΄ 적 ν™œμ„±ν™” -rampant--enemySeed=세계: 적 랜덀 μ‹œλ“œ -rampant--deadZoneFrequency=세계: 적 λ°λ“œμ‘΄ λΉˆλ„ -rampant--newEnemyVariations=세계: 적 λ°”λ¦¬μ—μ΄μ…˜ -rampant--enableBobsUnits=세계: Bobsλ₯Ό 파벌둜 ν™œμ„±ν™” -rampant--enableNEUnits=세계: NEλ₯Ό 파벌둜 ν™œμ„±ν™” -rampant--disallowFriendlyFire=μ•ˆμ „: 같은 μ„Έλ ₯의 뢈 μŠ€ν”Œλž˜μ‰¬ ν”Όν•΄λ₯Ό λΉ„ν—ˆμš© -rampant--tierStart=세계: μ‹œμž‘ 적 레벨 -rampant--tierEnd=세계: μ΅œμ’… 적 레벨 -rampant--enableMigration=AI: λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν™œμ„±ν™” -rampant--peacefulAIToggle=AI: 평화 ν™œμ„±ν™” -rampant--printAIStateChanges=AI: μƒνƒœ λ³€ν™”λ₯Ό μ±„νŒ…μ— 좜λ ₯ -rampant--debugTemperament=디버그: 기질 λ³€ν™”λ₯Ό μ±„νŒ…μ— 좜λ ₯ - -rampant--attackWaveGenerationUsePlayerProximity=곡격 μ›¨μ΄λΈŒ: 곡격 λ°œλ™ 쑰건으둜 ν”Œλ ˆμ΄μ–΄ 쑴재λ₯Ό μ‚¬μš© -rampant--attackPlayerThreshold=곡격 μ›¨μ΄λΈŒ: ν”Œλ ˆμ΄μ–΄ 점수 κΈ°μ—¬ μž„κ³„κ°’ - -rampant--unkillableLogisticRobots=세계: 무적 λ¬Όλ₯˜ λ‘œλ΄‡ -rampant--unkillableConstructionRobots=세계: 무적 건섀 λ‘œλ΄‡ - -rampant--unitBiterHealthScaler=λ³€κ²½μΉ˜: 바이터 체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitBiterSpeedScaler=λ³€κ²½μΉ˜: 바이터 속도 λΉ„μœ¨ μ‘°μ • -rampant--unitBiterDamageScaler=λ³€κ²½μΉ˜: 바이터 ν”Όν•΄ λΉ„μœ¨ μ‘°μ • -rampant--unitBiterRangeScaler=λ³€κ²½μΉ˜: 바이터 사거리 λΉ„μœ¨ μ‘°μ • -rampant--unitBiterHealingScaler=λ³€κ²½μΉ˜: 바이터 치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitSpitterHealthScaler=λ³€κ²½μΉ˜: μŠ€ν”Όν„° 체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitSpitterSpeedScaler=λ³€κ²½μΉ˜: μŠ€ν”Όν„° 속도 λΉ„μœ¨ μ‘°μ • -rampant--unitSpitterDamageScaler=λ³€κ²½μΉ˜: μŠ€ν”Όν„° ν”Όν•΄ λΉ„μœ¨ μ‘°μ • -rampant--unitSpitterRangeScaler=λ³€κ²½μΉ˜: μŠ€ν”Όν„° 사거리 λΉ„μœ¨ μ‘°μ • -rampant--unitSpitterHealingScaler=λ³€κ²½μΉ˜: μŠ€ν”Όν„° 치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitDroneHealthScaler=λ³€κ²½μΉ˜: λ“œλ‘  체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitDroneSpeedScaler=λ³€κ²½μΉ˜: λ“œλ‘  속도 λΉ„μœ¨ μ‘°μ • -rampant--unitDroneDamageScaler=λ³€κ²½μΉ˜: λ“œλ‘  ν”Όν•΄ λΉ„μœ¨ μ‘°μ • -rampant--unitDroneRangeScaler=λ³€κ²½μΉ˜: λ“œλ‘  사거리 λΉ„μœ¨ μ‘°μ • -rampant--unitDroneHealingScaler=λ³€κ²½μΉ˜: λ“œλ‘  치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitWormHealthScaler=λ³€κ²½μΉ˜: λ•…λ²Œλ ˆ 체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitWormDamageScaler=λ³€κ²½μΉ˜: λ•…λ²Œλ ˆ ν”Όν•΄ λΉ„μœ¨ μ‘°μ • -rampant--unitWormRangeScaler=λ³€κ²½μΉ˜: λ•…λ²Œλ ˆ 사거리 λΉ„μœ¨ μ‘°μ • -rampant--unitWormHealingScaler=λ³€κ²½μΉ˜: λ•…λ²Œλ ˆ 치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitSpawnerHealthScaler=λ³€κ²½μΉ˜: μœ λ‹› μ‚°λž€μž 체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitSpawnerOwnedScaler=λ³€κ²½μΉ˜: μœ λ‹› μ‚°λž€μž μ†Œμœ  숫자 λΉ„μœ¨ μ‘°μ • -rampant--unitSpawnerSpawnScaler=λ³€κ²½μΉ˜: μœ λ‹› μ‚°λž€μž 생성 숫자 λΉ„μœ¨ μ‘°μ • -rampant--unitSpawnerRespawnScaler=λ³€κ²½μΉ˜: μœ λ‹› μ‚°λž€μž μž¬μƒμ„± λΉ„μœ¨ μ‘°μ • -rampant--unitSpawnerHealingScaler=λ³€κ²½μΉ˜: μœ λ‹› μ‚°λž€μž 치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • - -rampant--unitHiveHealthScaler=λ³€κ²½μΉ˜: ꡰ락 체λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitHiveHealingScaler=λ³€κ²½μΉ˜: ꡰ락 치유 λŠ₯λ ₯ λΉ„μœ¨ μ‘°μ • -rampant--unitHiveRespawnScaler=λ³€κ²½μΉ˜: ꡰ락 μž¬μƒμ„± λΉ„μœ¨ μ‘°μ • - -rampant--enableShrinkNestsAndWorms=곡격 μ›¨μ΄λΈŒ: λ‘₯지와 λ•…λ²Œλ ˆ μΆ•μ†Œ - -rampant--raidAIToggle=AI: 곡격 AI ν™œμ„±ν™” -rampant--siegeAIToggle=AI: 곡성 AI ν™œμ„±ν™” - -rampant--laserEnemy=세계: λ ˆμ΄μ € 바이터 파벌 -rampant--waspEnemy=세계: 말벌 바이터 파벌 -rampant--spawnerEnemy=세계: μ‚°λž€μž 바이터 파벌 -rampant--trollEnemy=세계: μž¬μƒ 바이터 파벌 -rampant--fastEnemy=세계: 고속 바이터 파벌 -rampant--infernoEnemy=세계: λΆˆλ°”λ‹€ 바이터 파벌 -rampant--nuclearEnemy=세계: ν•΅ 바이터 파벌 -rampant--electricEnemy=세계: μ „κΈ° 바이터 파벌 -rampant--fireEnemy=세계: 뢈 바이터 파벌 -rampant--suicideEnemy=세계: 자폭 바이터 파벌 -rampant--physicalEnemy=세계: μž”ν˜Ήν•œ 바이터 파벌 -rampant--acidEnemy=세계: μ‚°μ„± 바이터 파벌 -rampant--energyThiefEnemy=세계: 곡병 바이터 파벌 -rampant--poisonEnemy=세계: 독 바이터 파벌 - -rampant--neutralTints=세계: ν‰λ²”ν•œ 바이터 파벌 색상 -rampant--laserTints=세계: λ ˆμ΄μ € 바이터 파벌 색상 -rampant--waspTints=세계: 말벌 바이터 파벌 색상 -rampant--spawnerTints=세계: μ‚°λž€μž 바이터 파벌 색상 -rampant--trollTints=세계: μž¬μƒ 바이터 파벌 색상 -rampant--fastTints=세계: 고속 바이터 파벌 색상 -rampant--infernoTints=세계: λΆˆλ°”λ‹€ 바이터 파벌 색상 -rampant--nuclearTints=세계: ν•΅ 바이터 파벌 색상 -rampant--electricTints=세계: μ „κΈ° 바이터 파벌 색상 -rampant--fireTints=세계: 뢈 바이터 파벌 색상 -rampant--suicideTints=세계: 자폭 바이터 파벌 색상 -rampant--physicalTints=세계: μž”ν˜Ήν•œ 바이터 파벌 색상 -rampant--acidTints=세계: μ‚°μ„± 바이터 파벌 색상 -rampant--energyThiefTints=세계: 곡병 바이터 파벌 색상 -rampant--poisonTints=세계: 독 바이터 파벌 색상 - -rampant--disableCollidingProjectiles=λ°œμ‚¬μ²΄: 바이터 μ„Έλ ₯이 μ•„λ‹Œ μ„Έλ ₯의 μΆ©λŒν•˜λŠ” λ°œμ‚¬μ²΄ -rampant--enableFullMapScan=ν˜Έν™˜μ„±: 전체 λ§΅ μŠ€μΊ” ν™œμ„±ν™” -rampant--unitAndSpawnerFadeTime=바이터, μŠ€ν”Όν„°, λ•…λ²Œλ ˆ, λ‘₯μ§€, ꡰ락의 μ‹œμ²΄ νŽ˜μ΄λ“œ μ‹œκ°„ -rampant--enableFadeTime=μ‹œμ²΄ νŽ˜μ΄λ“œ μ‹œμž‘ ν™œμ„±ν™” -rampant--temperamentRateModifier=AI: 기질 λΉ„μœ¨ λ³€κ²½μΉ˜ - -[mod-setting-description] -rampant--printBaseSettling=원주민듀이 λ‘₯μ§€λ₯Ό μ§“κΈ° μ‹œμž‘ν•˜λ©΄ μ½˜μ†”μ— λ©”μ‹œμ§€ 좜λ ₯ -rampant--printAwakenMessage=초기 평화 μ‹œκ°„μ΄ λλ‚˜λ©΄ μ½˜μ†”μ— λ©”μ‹œμ§€ 좜λ ₯ -rampant--initialPeaceTime=κ²Œμž„μ—μ„œ μ§€μ •λœ μ‹œκ°„μ΄ κ²½κ³Όν•  λ•ŒκΉŒμ§€ AIλŠ” ν‰μ˜¨ν•œ μƒνƒœλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ λˆ„κ΅°κ°€κ°€ 초기 κΈ°μ§€λ₯Ό μ‹œμž‘ν•  수 μžˆλŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ§‘λ‹ˆλ‹€. -rampant--printBaseUpgrades=AIκ°€ 건물 μ—…κ·Έλ ˆμ΄λ“œ μ‹œ μ½˜μ†”λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 상황은 이행 쀑에 λ°œμƒν•˜λŠ” 것이 μ•„λ‹ˆλΌ 적 ꡬ쑰물의 라이프 사이클 전체에 걸쳐 λ°œμƒν•©λ‹ˆλ‹€. -rampant--max-base-mutations=μƒˆλ‘œμš΄ λž¨νŽ€νŠΈ μ μ—κ²Œ 영ν–₯을 μ€λ‹ˆλ‹€. 이 μˆ«μžλŠ” μ§€μ—­ 파벌 그룹이 λ‹€λ₯Έ 파벌둜 변이할 수 μžˆλŠ” 횟수λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ§€μ—­ 파벌 그룹은 μ‹œκ°„μ΄ 지남에 따라 그듀이 μ‚΄ν•΄λ‹Ήν•˜λŠ” μœ ν˜•μ˜ 피해에 λŒ€ν•΄ κ°•ν•œ νŒŒλ²Œμ— μ μ‘ν•©λ‹ˆλ‹€. λŒμ—°λ³€μ΄μ˜ 사망 μž„κ³„κ°’μ€ 진화에 κΈ°μ΄ˆν•©λ‹ˆλ‹€. (4500 사망: <50% μ§„ν™”, 7500: <70%, 11000: <90%, 16000) -rampant--baseDistanceModifier=파벌 κ°„ 거리λ₯Ό λ°±λΆ„μœ¨ λ³€ν™”λ‘œ μˆ˜μ •ν•©λ‹ˆλ‹€. λΉ„μœ¨μ΄ λ‚μœΌλ©΄ μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. -rampant--printBaseAdaptation=죽은 적의 μˆ˜μ— 따라 파벌이 변이할 λ•Œ μ±„νŒ… μ½˜μ†”μ— λ©”μ‹œμ§€ ν‘œμ‹œ -rampant--adaptationModifier=적응이 이루어지기 전에 νŒŒκ΄΄ν•΄μ•Ό ν•˜λŠ” μœ λ‹› λ˜λŠ” 적 건물의 수λ₯Ό μœ λ‹› λ˜λŠ” 건물의 사망 μœ ν˜•μ„ κΈ°μ€€μœΌλ‘œ μˆ˜μ •ν•©λ‹ˆλ‹€. 이 λ³€κ²½μΉ˜λŠ” λ‹€μŒμ„ κΈ°μ€€ μœ„μΉ˜λ‘œ μ‚¬μš©ν•˜λŠ” λ°±λΆ„μœ¨ λ³€ν™”μž…λ‹ˆλ‹€(κΈ°λ³Έ 사망 μ΄λ²€νŠΈλŠ” 0.5 μ§„ν™” 미만 4500μ—μ„œ μ‹œμž‘, 0.7 미만 7500, 0.9 미만 11000, +0.9 16000). -rampant--unitAndSpawnerFadeTime=바이터 μ‹œμ²΄κ°€ 주변에 λ¨Έλ¬΄λŠ” μ‹œκ°„(초) -rampant--unitsAffectedByTiles=μœ λ‹›μ€ 타일 이동 λ³€κ²½μΉ˜μ˜ 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€. -rampant--oldRedEnemyMapColor=적 지도 색상을 바닐라 적 지도 μƒ‰μœΌλ‘œ λ˜λŒλ¦½λ‹ˆλ‹€. -rampant--unitSpawnerBreath=μœ λ‹› λ‘₯μ§€λŠ” 곡기λ₯Ό λ§ˆμ‹œκΈ° λ•Œλ¬Έμ— λ…μΊ‘μŠ λ“±μ˜ 영ν–₯을 λ°›μŠ΅λ‹ˆλ‹€. -rampant--useDumbProjectiles=차단 κ°€λŠ₯ν•œ λ°œμ‚¬μ²΄ 곡격을 μ‚¬μš©ν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ 적을 μ‚¬μš©ν•˜λŠ” 경우 이 μ²΄ν¬λ°•μŠ€λ₯Ό μΌœμ•Ό ν•©λ‹ˆλ‹€. -rampant--attackWaveGenerationThresholdMax=청크가 곡격 μ›¨μ΄λΈŒλ₯Ό λ°œμƒμ‹œν‚€κΈ° μœ„ν•΄ 도달해야 ν•˜λŠ” 총 점수. 바닐라 바이터 μ›¨μ΄λΈŒμ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ§„ν™” μš”μΈμ— 따라 μ„ ν˜•μ μœΌλ‘œ ν™•μž₯ κ°€λŠ₯(0.0 μ§„ν™” μ‹œ μ‹œμž‘ μž„κ³„κ°’) -rampant--attackWaveGenerationThresholdMin=청크가 곡격 μ›¨μ΄λΈŒλ₯Ό λ°œμƒμ‹œν‚€κΈ° μœ„ν•΄ 도달해야 ν•˜λŠ” 총 점수. 바닐라 바이터 μ›¨μ΄λΈŒμ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ§„ν™” μš”μΈμ— 따라 μ„ ν˜•μ μœΌλ‘œ ν™•μž₯ κ°€λŠ₯(100.0 μ§„ν™” μ‹œ μ’…λ£Œ μž„κ³„κ°’) -rampant--attackWaveMaxSize=진화에 따라 곡격 μ›¨μ΄λΈŒκ°€ ν™•λŒ€λ˜λŠ” 방식을 λ³€κ²½ν•˜λ €λ©΄ zip νŒŒμΌμ—μ„œ config.luaλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. -rampant--safeBuildings=μ•ˆμ „ ꡬ쑰물 토글이 μž‘λ™ν•˜λ €λ©΄ 토글을 μ „ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이둜 인해 파괴 κ°€λŠ₯ν•œ ν”Œλž˜κ·Έκ°€ false둜 μ„€μ •λœ μƒνƒœλ‘œ μ•ˆμ „ν•˜κ²Œ μœ μ§€λœ μ—”ν‹°ν‹°κ°€ μž¬μƒμ„±λ˜μ–΄ λ‹€μ‹œλŠ” 타깃이 λ˜κ±°λ‚˜ μ†μƒλ˜μ§€ μ•Šκ²Œ λ©λ‹ˆλ‹€. -rampant--safeBuildings-curvedRail=곑선 λ ˆμΌμ„ λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-straightRail=직선 λ ˆμΌμ„ λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-bigElectricPole=큰 μ „λ΄‡λŒ€λ₯Ό λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-railChainSignals=레일 체인 μ‹ ν˜Έλ₯Ό λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-railSignals=레일 μ‹ ν˜Έλ₯Ό λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-lamps=λž¨ν”„λ₯Ό λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--safeBuildings-trainStops=κΈ°μ°¨ μ •λ₯˜μž₯을 λ°”μ΄ν„°λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--permanentNocturnal=μ „ν™˜ μ‹œ 야간에 λ§Ήλ ¬ν•œ 곡격 μ›¨μ΄λΈŒκ°€ λ°œμƒν•©λ‹ˆλ‹€. clockwork λͺ¨λ“œ λ˜λŠ” μ•Όκ°„ μ—°μž₯ λͺ¨λ“œμ™€ ν•¨κ»˜ 더 잘 μž‘λ™ν•©λ‹ˆλ‹€. -rampant--aiPointsScaler=0.0 ~ 100.0 사이. 이것은 aiκ°€ 둜직 사이클당 μ–Όλ§ˆλ‚˜ λ§Žμ€ μ•‘μ…˜ 포인트λ₯Ό νšλ“ν•˜μ—¬ 곡격 μ›¨μ΄λΈŒλ₯Ό λ§Œλ“œλŠ” 것과 같은 μ•‘μ…˜μ„ μˆ˜ν–‰ν•˜λŠ”μ§€ 척도가 λ©λ‹ˆλ‹€. 0.3 - 맀우 쉬움, 0.75 - 쉬움, 1.0 - 쀑간, 1.25+ - 어렀움 -rampant--aiPointsPrintSpendingToChat=λž¨νŽ€νŠΈκ°€ 포인트λ₯Ό μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ μ±„νŒ… λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. GPS μ’Œν‘œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. κ°€μž₯ μ–΄λ €μš΄ λž¨νŽ€νŠΈ κ²½ν—˜μ„ μœ„ν•΄ λΉ„ν™œμ„±ν™”λœ μƒνƒœλ₯Ό μœ μ§€ν•˜μ‹­μ‹œμ˜€. κ²½κ³ : λ°”μœ μ „νˆ¬ 쀑에 λΉ λ₯΄κ²Œ μ±„νŒ…μ°½μ΄ μ±„μ›Œμ§‘λ‹ˆλ‹€! -rampant--aiPointsPrintGainsToChat=λž¨νŽ€νŠΈκ°€ 포인트λ₯Ό νšλ“ν•  λ•Œλ§ˆλ‹€ μ±„νŒ… λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. νŒ¨μ‹œλΈŒ 점수 생성을 λ‚˜νƒ€λ‚΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ°€μž₯ μ–΄λ €μš΄ λž¨νŽ€νŠΈ κ²½ν—˜μ„ μœ„ν•΄ λΉ„ν™œμ„±ν™”λœ μƒνƒœλ₯Ό μœ μ§€ν•˜μ‹­μ‹œμ˜€. κ²½κ³ : λ°”μœ μ „νˆ¬ 쀑에 λΉ λ₯΄κ²Œ μ±„νŒ…μ°½μ΄ μ±„μ›Œμ§‘λ‹ˆλ‹€! -rampant--addWallResistanceAcid=이 섀정을 μ „ν™˜ν•˜λ©΄ 60% 내산성이 λͺ¨λ“  벽체에 μΆ”κ°€λ˜μ–΄ 벽체에 λŒ€ν•œ μŠ€ν”Όν„°λ‘œ μΈν•œ 손상을 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. -rampant--removeBloodParticles=바이터λ₯Ό 죽일 λ•Œ μƒκΈ°λŠ” ν”Ό μž…μžκ°€ UPS 슀파이크λ₯Ό μΌμœΌν‚¬ 수 μžˆμœΌλ―€λ‘œ μ œκ±°ν•©λ‹ˆλ‹€. -rampant--enableSwarm=μœ λ‹› collision_mask의 크기λ₯Ό 쀄여 이동 쀑 μΆ©λŒμ„ 쀄이고 곡격을 μœ μ—°ν•˜κ²Œ ν•©λ‹ˆλ‹€. -rampant--attack-warning=ν”Œλ ˆμ΄μ–΄μ—κ²Œ 곡격 μ›¨μ΄λΈŒκ°€ 였고 μžˆμŒμ„ κ²½κ³ ν•˜λŠ” λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. -rampant--newEnemies=μ „ 세계에 λΆ„μ‚°λ˜λŠ” μƒˆλ‘œμš΄ 적을 μΆ”κ°€ν•©λ‹ˆλ‹€. 이둜 인해 RAM μš”κ±΄μ΄ μ¦κ°€ν•©λ‹ˆλ‹€. 바이터, λ•…λ²Œλ ˆ 및 λ‘₯μ§€λ³„λ‘œ 1개의 λ³€ν˜•μ΄ 있으며 5개의 계측은 μ΅œλŒ€ 2GB의 RAM 증가λ₯Ό μ˜ˆμƒν•©λ‹ˆλ‹€. 20개의 μ’…λ₯˜μ™€ 10개의 계측이 μ„€μ •λ˜μ–΄ μžˆμ–΄ μ΅œλŒ€ 9GB의 RAM이 증가할 κ²ƒμœΌλ‘œ μ˜ˆμƒλ©λ‹ˆλ‹€. 닀양성에 따라 바이터, λ•…λ²Œλ ˆ 및 λ‘₯μ§€μ˜ 각 계측에 λžœλ€μ„±μ΄ μΆ”κ°€λ©λ‹ˆλ‹€. 계측은 λ°”μ΄ν„°μ˜ 강함 μˆ˜μ€€μž…λ‹ˆλ‹€. -rampant--enemySeed=λͺ¨λ“  μœ λ‹› 생성에 νž˜μ„ μ‹€μ–΄μ£ΌλŠ” μ‹œλ“œμ΄λ―€λ‘œ 적의 톡계λ₯Ό λ³€κ²½ν•˜λ €λ©΄ λ³€κ²½ν•˜μ‹­μ‹œμ˜€. -rampant--deadZoneFrequency=λ•…λ²Œλ ˆ λ˜λŠ” λ‘₯μ§€ 없이 μ‹œμž‘ν•˜λŠ” κ΅¬μ—­μ˜ λ°±λΆ„μœ¨ -rampant--newEnemyVariations=이 μˆ˜μΉ˜λŠ” 계측별 변동 μˆ˜μ— ν•΄λ‹Ήν•©λ‹ˆλ‹€. 이것에 μ˜ν•΄, 각 κ³„μΈ΅μ˜ 힘 μˆ˜μ€€μ— λžœλ€μ„±μ΄ μΆ”κ°€λ©λ‹ˆλ‹€. μ΅œμ†Œ 1, μ΅œλŒ€ 20 -rampant--disallowFriendlyFire=μŠ€ν”Œλž˜μ‰¬ ν”Όν•΄λ₯Ό 톡해 적의 μŠ€ν”Όν„°μ™€ λ•…λ²Œλ ˆκ°€ λ™μΌν•œ μ„Έλ ₯의 μœ λ‹›μ΄λ‚˜ 건물에 ν”Όν•΄λ₯Ό μ£ΌλŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€. -rampant--tierStart=μ§€μ •ν•œ 수의 계측에 λŒ€ν•œ 적 집합을 생성할 λ•Œ μ‚¬μš©λ˜λŠ” 적의 μ‹œμž‘ 레벨둜 μ„ νƒν•œ 계측 μˆ˜μ— 따라 끝 계측에 μ„ ν˜•μ μœΌλ‘œ μ¦κ°€ν•©λ‹ˆλ‹€. λŒ€λž΅μ μœΌλ‘œ 각 계측은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(1-15, 2-75, 3-150, 4-250, 5-1000, 6-2000, 7-3500, 8-7500, 9-15000, 10-30000). μ΅œμ†Œ 1, μ΅œλŒ€ 10 -rampant--tierEnd=μ„ νƒν•œ 계측 수만큼 μ‹œμž‘ κ³„μΈ΅μ—μ„œ μ„ ν˜•μ μœΌλ‘œ μ¦κ°€ν•˜μ—¬ λ„λ‹¬ν•˜λŠ” 끝 계측 λ ˆλ²¨μž…λ‹ˆλ‹€. λŒ€λž΅μ μœΌλ‘œ 각 계측은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(1-15, 2-75, 3-150, 4-250, 5-1000, 6-2000, 7-3500, 8-7500, 9-15000, 10-30000). μ΅œμ†Œ 1, μ΅œλŒ€ 10 -rampant--enableMigration=이것을 ν—ˆμš©ν•˜λ©΄ AIλŠ” λ•…λ²Œλ ˆμ™€ λ‘₯μ§€λ₯Ό ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 바이터 ν™•μž₯을 μœ„ν•œ λ§΅ 섀정을 μ‘΄μ€‘ν•©λ‹ˆλ‹€. -rampant--peacefulAIToggle=λž¨νŽ€νŠΈ AIλŠ” ν‰ν™”λ‘œμš΄ μƒνƒœλ₯Ό 뒀흔듀 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  바이터가 평화 μƒνƒœλ₯Ό 둀링할 경우 AI: λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν™œμ„±ν™” 섀정에 따라 곡격 λ˜λŠ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μƒνƒœλ‘œ λ³€κ²½λ©λ‹ˆλ‹€. μ΄λŠ” 맡에 νŒ©ν† λ¦¬μ˜€μ˜ 평화 λͺ¨λ“œκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”μ§€ 여뢀와 관련이 μ—†μŠ΅λ‹ˆλ‹€. κ°€μž₯ μ–΄λ €μš΄ λž¨νŽ€νŠΈ κ²½ν—˜μ„ μœ„ν•΄ λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. -rampant--printAIStateChanges=κ²Œμž„ μ±„νŒ…μ—μ„œ λž¨νŽ€νŠΈ AI μƒνƒœμ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 각 ν‘œλ©΄μ— λŒ€ν•΄ λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. κ°€μž₯ μ–΄λ €μš΄ λž¨νŽ€νŠΈ κ²½ν—˜μ„ μœ„ν•΄ λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. -rampant--debugTemperament=AI μƒνƒœ ꡴림을 μ œμ–΄ν•˜λŠ” AI 기질 정보λ₯Ό 좜λ ₯ν•˜μ—¬ μ±„νŒ…ν•©λ‹ˆλ‹€. 이것은 디버깅에 μ‚¬μš©λ©λ‹ˆλ‹€. - -rampant--enableShrinkNestsAndWorms=λ‘₯μ§€ 및 λ•…λ²Œλ ˆμ˜ 좩돌 μƒμž 크기λ₯Ό 50% κ°μ†Œμ‹œν‚΅λ‹€. 좩돌 μƒμžκ°€ 개체 κ·Έλž˜ν”½λ³΄λ‹€ μž‘κΈ° λ•Œλ¬Έμ— κ°œμ²΄κ°€ 쀑첩될 수 μžˆμŠ΅λ‹ˆλ‹€. -rampant--attackWaveGenerationUsePlayerProximity=λž¨νŽ€νŠΈ 곡격 μ›¨μ΄λΈŒλ₯Ό λ°œμƒμ‹œν‚€λŠ” 바이터 λ‘₯μ§€κ°€ μžˆλŠ” 청크에 ν”Œλ ˆμ΄μ–΄ 페둜λͺ¬μ˜ μž„κ³„κ°’μ„ ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€. 바닐라 바이터 μ›¨μ΄λΈŒμ— 영ν–₯을 μ£Όμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -rampant--attackPlayerThreshold=청크가 곡격 μž„κ³„κ°’μ— κΈ°μ—¬ν•˜κΈ° μœ„ν•΄ 도달해야 ν•˜λŠ” μ μˆ˜μž…λ‹ˆλ‹€. μ¦κ°€ν•˜λ©΄ ν”Œλ ˆμ΄μ–΄ 페둜λͺ¬ κ΅¬λ¦„μ˜ 영ν–₯을 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. - -rampant--unkillableLogisticRobots=μ΄κ²ƒμœΌλ‘œ λ¬Όλ₯˜ λ‘œλ΄‡μ΄ λͺ¨λ“  손상에 λŒ€ν•΄ 면역이 λ©λ‹ˆλ‹€. -rampant--unkillableConstructionRobots=μ΄κ²ƒμœΌλ‘œ 건섀 λ‘œλ΄‡μ΄ λͺ¨λ“  손상에 λŒ€ν•΄ 면역이 λ©λ‹ˆλ‹€. - -rampant--unitBiterHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ°”μ΄ν„°μ˜ 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitBiterSpeedScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ°”μ΄ν„°μ˜ 속도가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitBiterDamageScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ°”μ΄ν„°μ˜ ν”Όν•΄κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitBiterRangeScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ°”μ΄ν„°μ˜ 곡격 λ²”μœ„κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitBiterHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ°”μ΄ν„°μ˜ 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpitterHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μŠ€ν”Όν„°μ˜ 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpitterSpeedScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μŠ€ν”Όν„°μ˜ 속도가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpitterDamageScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μŠ€ν”Όν„°μ˜ ν”Όν•΄κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpitterRangeScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μŠ€ν”Όν„°μ˜ 사거리가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpitterHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μŠ€ν”Όν„°μ˜ 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitDroneHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ“œλ‘ μ˜ 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. λ“œλ‘ μ€ μ‚°λž€μžμ™€ 말벌 νŒŒλ²Œλ‘œλΆ€ν„° μ˜΅λ‹ˆλ‹€. -rampant--unitDroneSpeedScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ“œλ‘ μ˜ 속도가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. λ“œλ‘ μ€ μ‚°λž€μžμ™€ 말벌 νŒŒλ²Œλ‘œλΆ€ν„° μ˜΅λ‹ˆλ‹€. -rampant--unitDroneDamageScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ“œλ‘ μ˜ ν”Όν•΄κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. λ“œλ‘ μ€ μ‚°λž€μžμ™€ 말벌 νŒŒλ²Œλ‘œλΆ€ν„° μ˜΅λ‹ˆλ‹€. -rampant--unitDroneRangeScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ“œλ‘ μ˜ 사거리가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. λ“œλ‘ μ€ μ‚°λž€μžμ™€ 말벌 νŒŒλ²Œλ‘œλΆ€ν„° μ˜΅λ‹ˆλ‹€. -rampant--unitDroneHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ“œλ‘ μ˜ 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. λ“œλ‘ μ€ μ‚°λž€μžμ™€ 말벌 νŒŒλ²Œλ‘œλΆ€ν„° μ˜΅λ‹ˆλ‹€. -rampant--unitWormHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ•…λ²Œλ ˆμ˜ 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitWormDamageScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ•…λ²Œλ ˆμ˜ ν”Όν•΄κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitWormRangeScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ•…λ²Œλ ˆμ˜ 사거리가 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitWormHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 λ•…λ²Œλ ˆμ˜ 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpawnerHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μœ λ‹› μƒμ„±κΈ°μ˜ 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpawnerOwnedScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μœ λ‹› 생성기 1κ°œλ‹Ή μ œμ–΄λ˜λŠ” μœ λ‹›μ˜ μ΅œλŒ€ μˆ˜κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpawnerSpawnScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μœ λ‹› 생성기에 ν•œλ²ˆμ— μƒμ„±λ˜λŠ” μœ λ‹› μˆ˜κ°€ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpawnerRespawnScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μœ λ‹› 생성기가 μƒˆλ‘œμš΄ μœ λ‹›μ„ μƒμ„±ν•˜κΈ° μœ„ν•œ μ‹œκ°„μ΄ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitSpawnerHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 μœ λ‹› μƒμ„±κΈ°μ˜ 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitHiveHealthScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 ꡰ락의 체λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitHiveHealingScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 ꡰ락의 치유 λŠ₯λ ₯이 λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. -rampant--unitHiveRespawnScaler=λͺ¨λ“  μƒˆλ‘œμš΄ 적 ꡰ락이 μƒˆλ‘œμš΄ μœ λ‹›μ„ μƒμ„±ν•˜κΈ° μœ„ν•œ μ‹œκ°„μ΄ λ°±λΆ„μœ¨μ— 따라 μ‘°μ •λ©λ‹ˆλ‹€. - -rampant--raidAIToggle=곡해 ꡬ름 λ°–μ˜ AI 곡격 λΆ€λŒ€λ₯Ό ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. -rampant--siegeAIToggle=곡해 ꡬ름 λ°–μ—μ„œ κ³΅κ²©ν•˜κ±°λ‚˜ λ‘₯μ§€λ₯Ό ν‹€ AI 곡성 λΆ€λŒ€λ₯Ό ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. - -rampant--laserEnemy=λ ˆμ΄μ € 바이터 파벌, λ ˆμ΄μ €λŠ” 큰 μ €ν•­, μ „κΈ°λŠ” μž‘μ€ μ €ν•­μž…λ‹ˆλ‹€. 바이터와 μŠ€ν”Όν„°μ˜ μœ λ‹› νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€. -rampant--waspEnemy=말벌 바이터 파벌, μŠ€ν”Όν„° μ „μš©μœΌλ‘œ 및 각 μŠ€ν”Όν„°λŠ” μ†Œν˜• λ“œλ‘ μ„ λ±‰μŠ΅λ‹ˆλ‹€. -rampant--spawnerEnemy=μ‚°λž€μž 바이터 파벌, μŠ€ν”Όν„°λ§Œμ΄ μ‚°λž€μžμ— μ˜ν•΄ μƒμ„±λ˜κ³  μŠ€ν”Όν„°λŠ” 바이터λ₯Ό λ‚³λŠ” μ•Œμ„ λ§Œλ“­λ‹ˆλ‹€. -rampant--trollEnemy=μž¬μƒ 바이터 파벌, 높은 체λ ₯ μž¬μƒ, λΆˆμ— λŒ€ν•œ 큰 약점, 물리에 λŒ€ν•œ μž‘μ€ μ €ν•­, ν­λ°œλ¬Όμ— λŒ€ν•œ μž‘μ€ μ €ν•­. -rampant--fastEnemy=고속 바이터 파벌, 높은 이동 속도, ν­λ°œλ¬Όμ— λŒ€ν•œ μ•½κ°„μ˜ μ €ν•­. -rampant--infernoEnemy=λΆˆλ°”λ‹€ 바이터 파벌, λͺ¨λ“  것을 νƒœμšΈ 수 μžˆλŠ” λΆˆμ‚°μ„ λ±‰λŠ” μŠ€ν”Όν„°λ§Œμ˜ 파벌. μ‚°μ„± 및 ν™”μž¬μ— λŒ€ν•œ 내성이 크며 독에 λŒ€ν•œ 내성이 μž‘μŠ΅λ‹ˆλ‹€. -rampant--nuclearEnemy=ν•΅ 바이터 파벌, μ›μžν­νƒ„μ²˜λŸΌ ν­λ°œν•˜λŠ” λ°”μ΄ν„°λ§Œμ˜ 파벌. ν­λ°œμ— λŒ€ν•œ 큰 약점 -rampant--electricEnemy=μ „κΈ° 바이터 파벌, ν•œ 쀄에 μžˆλŠ” μ—¬λŸ¬ 물체λ₯Ό νƒ€κ²©ν•˜λŠ” 단거리 곡격을 ν•˜λŠ” λ°”μ΄ν„°λ§Œμ˜ 파벌. 전기에 λŒ€ν•œ 큰 μ €ν•­, λ ˆμ΄μ €μ— λŒ€ν•œ μž‘μ€ μ €ν•­. -rampant--fireEnemy=뢈 바이터 파벌, μ‚°μ„± 및 λΆˆμ— λŒ€ν•œ 큰 μ €ν•­. -rampant--suicideEnemy=자폭 바이터 파벌, 곡격 μ‹œμ—λ§Œ ν­λ°œν•˜λŠ” λ°”μ΄ν„°λ§Œμ˜ 파벌. 독에 λŒ€ν•œ μž‘μ€ μ €ν•­λ ₯, ν­λ°œμ— λŒ€ν•œ 큰 약점. -rampant--physicalEnemy=μž”ν˜Ήν•œ 바이터 파벌, λ°”μ΄ν„°λ§Œ. 큰 물리 μ €ν•­λ ₯, 큰 폭발 μ €ν•­λ ₯, 전기에 λŒ€ν•œ μž‘μ€ 약점. -rampant--acidEnemy=μ‚°μ„± 바이터 파벌, 산에 λŒ€ν•œ 큰 μ €ν•­μ„±, 독에 λŒ€ν•œ μž‘μ€ μ €ν•­μ„±. -rampant--energyThiefEnemy=곡병 바이터 파벌, 큰 μ „κΈ° μ €ν•­, μž‘μ€ λ ˆμ΄μ € μ €ν•­. 동λ ₯ ꡬ쑰물을 νŒŒκ΄΄ν•˜λ©΄ 동λ ₯을 μœ μΆœν•˜λŠ” 결정체가 λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. -rampant--poisonEnemy=독 바이터 파벌, λ°”μ΄ν„°λ§Œ λ“±μž₯. 사망 μ‹œ ꡬ름이 μƒμ„±λ˜μ–΄ ν”Œλ ˆμ΄μ–΄ κ°œμ²΄μ— ν”Όν•΄λ₯Ό μ£Όκ³  바이터λ₯Ό μΉ˜μœ ν•©λ‹ˆλ‹€. 독에 λŒ€ν•œ 큰 μ €ν•­λ ₯, 전기에 λŒ€ν•œ μž‘μ€ 약점, ν­λ°œμ— λŒ€ν•œ μž‘μ€ 약점, λ ˆμ΄μ €μ— λŒ€ν•œ μž‘μ€ 약점, λΆˆμ— λŒ€ν•œ μž‘μ€ μ €ν•­. - -rampant--neutralTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--laserTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--waspTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--spawnerTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--trollTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--fastTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--infernoTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--nuclearTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--electricTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--fireTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--suicideTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--physicalTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--acidTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--energyThiefTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 -rampant--poisonTints=λͺ¨λ“  색상은 8개의 ν—₯슀(hex) λ¬Έμžμ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. rrggbbaa, 첫 색은 배색, 두 번째 색은 염색, μ„Έ 번째 색은 ꡰ락 색 - -rampant--disableCollidingProjectiles=바이터 λ°œμ‚¬μ²΄λŠ” 더 이상 λ‹€λ₯Έ 바이터, λ•…λ²Œλ ˆ λ˜λŠ” λ‘₯지와 μΆ©λŒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ λͺ¨λ“  것듀은 μ—¬μ „νžˆ 바이터 λ°œμ‚¬μ²΄μ™€ μΆ©λŒν•©λ‹ˆλ‹€. -rampant--enableFullMapScan=이 섀정을 μ‚¬μš©ν•˜λ©΄ νŒ©ν† λ¦¬μ˜€ 이벀트 μ‹œμŠ€ν…œ μ™ΈλΆ€μ—μ„œ μƒμ„±λ˜κ±°λ‚˜ 파괴된 κ°œμ²΄κ°€ μžˆλŠ”μ§€ κ²Œμž„ 맡을 천천히 μŠ€μΊ”ν•©λ‹ˆλ‹€. (λͺ¨λ“œκ°€ script_raised_built λ˜λŠ” script_raised_destroyedλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 경우, 이 경우 λž¨νŽ€νŠΈλŠ” κ²Œμž„ λ§΅κ³Ό μ—¬μ „νžˆ μΌμΉ˜ν•©λ‹ˆλ‹€.) - -rampant--enableFadeTime=바이터, μŠ€ν”Όν„°, λ•…λ²Œλ ˆ, λ‘₯μ§€, ꡰ락의 μ‹œμ²΄μ˜ νŽ˜μ΄λ“œ νƒ€μž„μ„ μ€„μ΄κ±°λ‚˜ μ¦κ°€μ‹œν‚€κΈ° μœ„ν•œ 섀정을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€. λΉ„ν™œμ„±ν™” μ‹œ μ‹œμ²΄ μ‹œκ°„μ€ λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. - -rampant--maxNumberOfBuilders=κ±΄μ„€μžκ°€ λŠ˜μ–΄λ‚ μˆ˜λ‘ UPSκ°€ 더 많이 ν•„μš”ν•©λ‹ˆλ‹€. -rampant--maxNumberOfSquads=λΆ„λŒ€κ°€ λ§Žμ„μˆ˜λ‘ UPSκ°€ 더 많이 ν•„μš”ν•©λ‹ˆλ‹€. -rampant--temperamentRateModifier=곡격과 ν™•μž₯을 μ œμ–΄ν•˜λŠ” AI 기질 μƒνƒœμ—μ„œ λž¨νŽ€νŠΈκ°€ κ·Ήλ‹¨μœΌλ‘œ μΉ˜λ‹«λŠ” 속도λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. 이것은 증가 λ˜λŠ” κ°μ†Œμ‹œν‚¬ 수 μžˆλŠ” λ°±λΆ„μœ¨μ΄λ©° 1이 100%μž…λ‹ˆλ‹€. - -[description] -rampant--planetHasAwoken=λž¨νŽ€νŠΈ: 원주민듀이 λ‹Ήμ‹ μ˜ μ‘΄μž¬μ— λ°˜μ‘ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. -rampant-bobs-nee-newEnemies=λž¨νŽ€νŠΈμ˜ μƒˆλ‘œμš΄ 적과 ν•¨κ»˜ Bobs enemies λ˜λŠ” NEEκ°€ νƒμ§€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.\n각 λͺ¨λ“œμ˜ μ•„ν‹°νŒ©νŠΈλŠ” λž¨νŽ€νŠΈμ˜ μƒˆλ‘œμš΄ 적과 ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€.\nλž¨νŽ€νŠΈμ— μ˜ν•΄ λͺ…μ‹œμ μ΄ 된 bobsλ‚˜ NEE μœ λ‹›μ˜ 생성은\nλž¨νŽ€νŠΈμ˜ μƒˆ 적이 ν™œμ„±ν™”λ˜λ©΄ 더 이상 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -rampant--adaptation2DebugMessage=νŒŒλ²Œμ€ __1__λΌλŠ” ν”Όν•΄ μœ ν˜•μœΌλ‘œ 인해 변이λ₯Ό μΌμœΌμΌ°μŠ΅λ‹ˆλ‹€. 이제 νŒŒλ²Œμ€ __2__와 __3__λ₯Ό 생산할 κ²ƒμž…λ‹ˆλ‹€. 파벌 λŒμ—°λ³€μ΄ __7__ 쀑 __6__. [gps=__4__,__5__] -rampant--adaptation1DebugMessage=νŒŒλ²Œμ€ __1__λΌλŠ” ν”Όν•΄ μœ ν˜•μœΌλ‘œ 인해 변이λ₯Ό μΌμœΌμΌ°μŠ΅λ‹ˆλ‹€. 이제 νŒŒλ²Œμ€ __2__λ₯Ό μƒμ‚°ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 파벌 λŒμ—°λ³€μ΄ __6__ 쀑 __5__. [gps=__3__,__4__] -rampant--adaptationFrozenDebugMessage=νŒŒλ²Œμ€ 더 이상 μƒˆλ‘œμš΄ 파벌둜 λ³€μ΄ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. [gps=__1__,__2__] -rampant--adaptationResetDebugMessage=파벌 λŒμ—°λ³€μ΄κ°€ μž¬μ„€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. __3__의 __2__ 변이가 남아 μžˆμŠ΅λ‹ˆλ‹€. [gps=__1__,__2__] -rampant--laserEnemyName=λ ˆμ΄μ € 바이터 -rampant--waspEnemyName=말벌 바이터 -rampant--spawnerEnemyName=μ‚°λž€μž 바이터 -rampant--trollEnemyName=μž¬μƒ 바이터 -rampant--fastEnemyName=고속 바이터 -rampant--infernoEnemyName=λΆˆλ°”λ‹€ 바이터 -rampant--nuclearEnemyName=ν•΅ 바이터 -rampant--electricEnemyName=μ „κΈ° 바이터 -rampant--fireEnemyName=뢈 바이터 -rampant--neutralEnemyName=ν‰λ²”ν•œ 바이터 -rampant--suicideEnemyName=자폭 바이터 -rampant--physicalEnemyName=μž”ν˜Ήν•œ 바이터 -rampant--acidEnemyName=μ‚°μ„± 바이터 -rampant--energyThiefEnemyName=곡병 바이터 -rampant--poisonEnemyName=독 바이터 diff --git a/Rampant_3.1.2/locale/ru/locale.cfg b/Rampant_3.1.2/locale/ru/locale.cfg deleted file mode 100644 index adccdd0f..00000000 --- a/Rampant_3.1.2/locale/ru/locale.cfg +++ /dev/null @@ -1,323 +0,0 @@ -[mod-description] -Rampant=Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΡƒ Π²Ρ€Π°Π³ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ поля ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΠΎΠ² (Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½Ρ‹), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‰ΡƒΠΏΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρƒ, отступлСния, подкрСплСния, ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ‚Π°ΠΊΠΈ, ΠΏΡ€ΠΎΡ€Ρ‹Π²Ρ‹, Ρ€Π΅ΠΉΠ΄Ρ‹, ΡΠΏΠ»Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ прСдсмСртный ΠΊΠ»ΠΈΡ‡ ΠΈ ΠΎΡ…ΠΎΡ‚Ρƒ Π½Π° ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды кусак. ДобавляСт Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² настройках ΠΌΠΎΠ΄Π°. Настройка слоТности Π² мСню настроСк ΠΌΠΎΠ΄Π°. - -[rampant] -neutral=ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ -acid=ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹ΠΉ -physical=ЖСстокий -electric=ЭлСктричСский -suicide=Π‘Π°ΠΌΠΎΡƒΠ±ΠΈΠΉΡ†Π° -nuclear=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ -fire=ΠžΠ³Π½Π΅Π½Π½Ρ‹ΠΉ -inferno=Адский -troll=Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ -fast=Быстрый -laser=Π›Π°Π·Π΅Ρ€Π½Ρ‹ΠΉ -wasp=Оса -spawner=ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ -poison=Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹ΠΉ -energy=Π‘Π°ΠΏΡ‘Ρ€ -energy-thief=Π‘Π°ΠΏΡ‘Ρ€ -entity-proxy=ΠŸΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ -biter=ΠšΡƒΡΠ°ΠΊΠ°: -spitter=ПлСвака: -biter-spawner=Π“Π½Π΅Π·Π΄ΠΎ кусак: -spitter-spawner=Π“Π½Π΅Π·Π΄ΠΎ ΠΏΠ»Π΅Π²Π°ΠΊ: -worm=Π§Π΅Ρ€Π²ΡŒ: -turret=Π§Π΅Ρ€Π²ΡŒ: -hive=Π£Π»Π΅ΠΉ: -spitter-wasp=Π”Ρ€ΠΎΠ½: -worm-wasp=Π”Ρ€ΠΎΠ½: -spawn=ΠšΡƒΡΠ°ΠΊΠ°: -spitter-egg=Π―ΠΉΡ†Π°: -worm-egg=Π―ΠΉΡ†Π°: -t1=ΡƒΡ€.1, Π›ΠΈΡ‡ΠΈΠ½ΠΊΠ° -t2=ΡƒΡ€.2, ΠšΡƒΠΊΠΎΠ»ΠΊΠ° -t3=ΡƒΡ€.3, Π Π°Π±ΠΎΡ‡ΠΈΠΉ -t4=ΡƒΡ€.4, Π“Ρ€ΠΎΠΌΠΈΠ»Π° -t5=ΡƒΡ€.5, Π‘ΠΎΠ»Π΄Π°Ρ‚ -t6=ΡƒΡ€.6, Π­Π»ΠΈΡ‚Π° -t7=ΡƒΡ€.7, Π§Π΅ΠΌΠΏΠΈΠΎΠ½ -t8=ΡƒΡ€.8, ΠŸΠΎΠ²Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ -t9=ΡƒΡ€.9, Π’ΠΈΡ‚Π°Π½ -t10=ΡƒΡ€.10, Π›Π΅Π²ΠΈΠ°Ρ„Π°Π½ -acid-pool=Π›ΡƒΠΆΠ° кислоты -fire-pool=Огонь - -[entity-name] -crystal-v1-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v2-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v3-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v4-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v5-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v6-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v7-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v8-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v9-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-v10-drain-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π» высасывания энСргии -crystal-drain-pole-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π»ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΈΠ»ΠΎΠ½ -pylon-target-rampant=ΠšΡ€ΠΈΡΡ‚Π°Π»Π»ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΈΠ»ΠΎΠ½ -acid-ball-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-1-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-2-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-2-direction-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-3-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-3-direction-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-4-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -acid-ball-5-acid-fire-rampant=Π›ΡƒΠΆΠ° кислоты -spawner-proxy-1-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ -spawner-proxy-2-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ -spawner-proxy-3-rampant=ΠœΠ΅ΡΡ‚ΠΎ для ΡƒΠ»ΡŒΡ - -[mod-setting-name] -rampant--printBaseSettling=ИИ: Π‘ΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° посСлСнцы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ -rampant--printAwakenMessage=ΠœΠΈΡ€: Π‘ΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ заканчиваСтся -rampant--initialPeaceTime=ΠœΠΈΡ€: Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ стартового ΠΌΠΈΡ€Π° -rampant--printBaseUpgrades=ИИ: Π‘ΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΡ… Π±Π°Π· Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ -rampant--max-base-mutations=ΠœΠΈΡ€: ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ Π½Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ -rampant--baseDistanceModifier=ИИ: ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·Π°ΠΌΠΈ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ -rampant--printBaseAdaptation=ИИ: Π‘ΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎ мутациях Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ -rampant--adaptationModifier=ИИ: ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ -rampant--unitsAffectedByTiles=ΠœΠΈΡ€: Π’Π°ΠΉΠ»Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΡŽΠ½ΠΈΡ‚Ρ‹ -rampant--oldRedEnemyMapColor=ΠšΠ°Ρ€Ρ‚Π°: ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° Π²Ρ€Π°Π³ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ -rampant--unitSpawnerBreath=ΠœΠΈΡ€: Π“Π½Ρ‘Π·Π΄Π° Π΄Ρ‹ΡˆΠ°Ρ‚ Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠΌ -rampant--useDumbProjectiles=Бнаряды: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ снаряды -rampant--attackWaveGenerationThresholdMax=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π°Π½ΠΊΠ° -rampant--attackWaveGenerationThresholdMin=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π°Π½ΠΊΠ° -rampant--attackWaveMaxSize=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ кусак, сформированный Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ -rampant--maxNumberOfSquads=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: МаксимальноС количСство Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ Π·Π° Ρ€Π°Π· -rampant--maxNumberOfBuilders=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: МаксимальноС количСство Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ Π·Π° Ρ€Π°Π· -rampant--safeBuildings=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ строСний -rampant--safeBuildings-curvedRail=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак -rampant--safeBuildings-straightRail=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ прямыС Ρ€Π΅Π»ΡŒΡΡ‹ ΠΎΡ‚ кусак -rampant--safeBuildings-bigElectricPole=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ большиС ΠΎΠΏΠΎΡ€Ρ‹ Π›Π­ΠŸ ΠΎΡ‚ кусак -rampant--safeBuildings-railChainSignals=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ свСтофоры ΠΎΡ‚ кусак -rampant--safeBuildings-railSignals=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ свСтофоры ΠΎΡ‚ кусак -rampant--safeBuildings-trainStops=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ Π–Π”-станции ΠΎΡ‚ кусак -rampant--permanentNocturnal=ИИ: Ночной Ρ€Π΅ΠΆΠΈΠΌ -rampant--aiPointsScaler=ИИ: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ слоТности -rampant--aiPointsPrintSpendingToChat=ИИ: ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ Π² Ρ‡Π°Ρ‚ -rampant--aiPointsPrintGainsToChat=ИИ: ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ Π² Ρ‡Π°Ρ‚ -rampant--addWallResistanceAcid=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ сопротивлСниС стСн ΠΊ Π°Ρ‚Π°ΠΊΠ°ΠΌ ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--safeBuildings-lamps=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ Π»Π°ΠΌΠΏΡ‹ ΠΎΡ‚ кусак -rampant--removeBloodParticles=ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ: Π£Π±Ρ€Π°Ρ‚ΡŒ Π±Ρ€Ρ‹Π·Π³ΠΈ ΠΊΡ€ΠΎΠ²ΠΈ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π»Π°Π³ΠΈ) -rampant--attack-warning=Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ»Π½Π΅ Π°Ρ‚Π°ΠΊΠΈ -rampant--enableSwarm=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€ΠΎΠΉ -rampant--newEnemies=ΠœΠΈΡ€: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ² -rampant--enemySeed=ΠœΠΈΡ€: Π—Π΅Ρ€Π½ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ€Π°Π³ΠΎΠ² -rampant--deadZoneFrequency=ΠœΠΈΡ€: Частота ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹Ρ… Π·ΠΎΠ½ -rampant--newEnemyVariations=ΠœΠΈΡ€: Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ€Π°Π³ΠΎΠ² -rampant--enableBobsUnits=ΠœΠΈΡ€: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ· ΠΌΠΎΠ΄Π° Bob -rampant--enableNEUnits=ΠœΠΈΡ€: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ· ΠΌΠΎΠ΄Π° NE -rampant--disallowFriendlyFire=Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ друТСствСнный огонь ΠΎΠ³Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠ»Π΅Π²ΠΊΠΎΠ² -rampant--tierStart=ΠœΠΈΡ€: ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ² -rampant--tierEnd=ΠœΠΈΡ€: ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ² -rampant--enableMigration=ИИ: Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ -rampant--peacefulAIToggle=ИИ: Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠΈΡ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ -rampant--printAIStateChanges=ИИ: ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния Π² Ρ‡Π°Ρ‚ -rampant--debugTemperament=ΠžΡ‚Π»Π°Π΄ΠΊΠ°: ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ измСнСния Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚Π° Π² Ρ‡Π°Ρ‚ -rampant--attackWaveGenerationUsePlayerProximity=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΈΠ·ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ Π°Ρ‚Π°ΠΊΠΈ -rampant--attackPlayerThreshold=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: ΠŸΠΎΡ€ΠΎΠ³ Π²ΠΊΠ»Π°Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊΠ° -rampant--unkillableLogisticRobots=ΠœΠΈΡ€: БСссмСртныС транспортныС Π΄Ρ€ΠΎΠ½Ρ‹ -rampant--unkillableConstructionRobots=ΠœΠΈΡ€: БСссмСртныС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Ρ€ΠΎΠ½Ρ‹ -rampant--unitBiterHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ кусак -rampant--unitBiterSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости кусак -rampant--unitBiterDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° кусак -rampant--unitBiterRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ кусак -rampant--unitBiterHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ кусак -rampant--unitSpitterHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--unitSpitterSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--unitSpitterDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--unitSpitterRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--unitSpitterHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ -rampant--unitDroneHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π΄Ρ€ΠΎΠ½ΠΎΠ² -rampant--unitDroneSpeedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости Π΄Ρ€ΠΎΠ½ΠΎΠ² -rampant--unitDroneDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Π΄Ρ€ΠΎΠ½ΠΎΠ² -rampant--unitDroneRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² -rampant--unitDroneHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ² -rampant--unitWormHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rampant--unitWormDamageScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rampant--unitWormRangeScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rampant--unitWormHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rampant--unitSpawnerHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ -rampant--unitSpawnerOwnedScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ количСства ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ -rampant--unitSpawnerSpawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ количСства ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π·Π° Ρ€Π°Π· -rampant--unitSpawnerRespawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ частоты ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ -rampant--unitSpawnerHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ -rampant--unitHiveHealthScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ ΡƒΠ»ΡŒΠ΅Π² -rampant--unitHiveHealingScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ»ΡŒΠ΅Π² -rampant--unitHiveRespawnScaler=ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ частоты Ρ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ· ΡƒΠ»ΡŒΠ΅Π² -rampant--enableShrinkNestsAndWorms=Π’ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ: Π£Ρ€Π΅Π·Π°Ρ‚ΡŒ Π³Π½Ρ‘Π·Π΄Π° ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rampant--raidAIToggle=ИИ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΉΠ΄ΠΎΠ²Ρ‹ΠΉ ИИ -rampant--siegeAIToggle=ИИ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ осадный ИИ -rampant--laserEnemy=ΠœΠΈΡ€: Ѐракция Π›Π°Π·Π΅Ρ€Π½Ρ‹Π΅ кусаки -rampant--waspEnemy=ΠœΠΈΡ€: Ѐракция ΠžΡΡ‹ -rampant--spawnerEnemy=ΠœΠΈΡ€: Ѐракция ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ -rampant--trollEnemy=ΠœΠΈΡ€: Ѐракция Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ кусаки -rampant--fastEnemy=ΠœΠΈΡ€: Ѐракция БыстрыС кусаки -rampant--infernoEnemy=ΠœΠΈΡ€: Ѐракция АдскиС кусаки -rampant--nuclearEnemy=ΠœΠΈΡ€: Ѐракция Π―Π΄Π΅Ρ€Π½Ρ‹Π΅ кусаки -rampant--electricEnemy=ΠœΠΈΡ€: Ѐракция ЭлСктричСскиС кусаки -rampant--fireEnemy=ΠœΠΈΡ€: Ѐракция ΠžΠ³Π½Π΅Π½Π½Ρ‹Π΅ кусаки -rampant--suicideEnemy=ΠœΠΈΡ€: Ѐракция Π‘Π°ΠΌΠΎΡƒΠ±ΠΈΠΉΡ†Ρ‹ -rampant--physicalEnemy=ΠœΠΈΡ€: Ѐракция ЖСстокиС кусаки -rampant--acidEnemy=ΠœΠΈΡ€: Ѐракция ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹Π΅ кусаки -rampant--energyThiefEnemy=ΠœΠΈΡ€: Ѐракция Π‘Π°ΠΏΡ‘Ρ€Ρ‹ -rampant--poisonEnemy=ΠœΠΈΡ€: Ѐракция Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹Π΅ кусаки -rampant--neutralTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ кусаки -rampant--laserTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π›Π°Π·Π΅Ρ€Π½Ρ‹Π΅ кусаки -rampant--waspTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠžΡΡ‹ -rampant--spawnerTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ -rampant--trollTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ кусаки -rampant--fastTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ БыстрыС кусаки -rampant--infernoTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ АдскиС кусаки -rampant--nuclearTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π―Π΄Π΅Ρ€Π½Ρ‹Π΅ кусаки -rampant--electricTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ЭлСктричСскиС кусаки -rampant--fireTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠžΠ³Π½Π΅Π½Π½Ρ‹Π΅ кусаки -rampant--suicideTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π‘Π°ΠΌΠΎΡƒΠ±ΠΈΠΉΡ†Ρ‹ -rampant--physicalTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ЖСстокиС кусаки -rampant--acidTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹Π΅ кусаки -rampant--energyThiefTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π‘Π°ΠΏΡ‘Ρ€Ρ‹ -rampant--poisonTints=ΠœΠΈΡ€: Π¦Π²Π΅Ρ‚Π° Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹Π΅ кусаки -rampant--disableCollidingProjectiles=Бнаряды: НС ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ снаряды кусак -rampant--enableFullMapScan=Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сканированиС всСй ΠΊΠ°Ρ€Ρ‚Ρ‹ -rampant--unitAndSpawnerFadeTime=ВрСмя исчСзновСния Ρ‚Ρ€ΡƒΠΏΠΎΠ² кусак, ΠΏΠ»Π΅Π²Π°ΠΊ, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ ΡƒΠ»ΡŒΠ΅Π² -rampant--enableFadeTime=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ врСмя исчСзновСния Ρ‚Ρ€ΡƒΠΏΠΎΠ² -rampant--temperamentRateModifier=ИИ: ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ уровня Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚Π° - -[mod-setting-description] -rampant--printBaseSettling=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Π² консоль, ΠΊΠΎΠ³Π΄Π° посСлСнцы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Π½Π΅Π·Π΄ΠΎ -rampant--printAwakenMessage=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Π² консоль, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΈΡ€Π½ΠΎΠ΅ врСмя заканчиваСтся -rampant--initialPeaceTime=ИИ Π±ΡƒΠ΄Π΅Ρ‚ Π² состоянии ΠΌΠΈΡ€Π°, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство ΠΌΠΈΠ½ΡƒΡ‚ с Π½Π°Ρ‡Π°Π»Π° ΠΈΠ³Ρ€Ρ‹. Π­Ρ‚ΠΎ даст Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ. -rampant--printBaseUpgrades=ΠŸΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π² Ρ‡Π°Ρ‚ сообщСниС, ΠΊΠΎΠ³Π΄Π° ИИ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ строСниС. Π­Ρ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΎ врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ враТСской структуры. -rampant--max-base-mutations=НовыС Π²Ρ€Π°Π³ΠΈ Rampant Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ. Π­Ρ‚ΠΎ число прСдставляСт, сколько Ρ€Π°Π· Π³Ρ€ΡƒΠΏΠΏΠ° Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ. Π Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ Π²ΠΎ Ρ„Ρ€Π°ΠΊΡ†ΠΈΡŽ, которая устойчива ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΡƒΡ€ΠΎΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΡ… ΡƒΠ±ΠΈΠ²Π°ΡŽΡ‚. ΠŸΠΎΡ€ΠΎΠ³ смСрти для ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ основан Π½Π° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. (4500 смСртСй: <50% ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ, 7500: <70%, 11000: <90%, 16000: 90%+). -rampant--baseDistanceModifier=ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ фракциями. ΠœΠ°Π»Ρ‹Π΅ значСния ΡƒΡ…ΡƒΠ΄ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. -rampant--printBaseAdaptation=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Π² Ρ‡Π°Ρ‚, ΠΊΠΎΠ³Π΄Π° фракция ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ·-Π·Π° количСства ΡƒΠ±ΠΈΡ‚Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ². -rampant--adaptationModifier=Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ количСство ΡŽΠ½ΠΈΡ‚ΠΎΠ² ΠΈΠ»ΠΈ враТСских построСк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ адаптация Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡƒΠ±ΠΈΠ»ΠΈ ΡŽΠ½ΠΈΡ‚Ρ‹ ΠΈΠ»ΠΈ здания. Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСдставляСт собой ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ с использованиСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ (события смСртСй ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 4500 Π΄ΠΎ 0.5 ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ, 7500 - Π΄ΠΎ 0.7, 11000 - Π΄ΠΎ 0.9 ΠΈ 16000 - 0.9+). -rampant--unitsAffectedByTiles=На ΡŽΠ½ΠΈΡ‚ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ пСрСдвиТСния Ρ‚Π°ΠΉΠ»ΠΎΠ². -rampant--oldRedEnemyMapColor=Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π²Π΅Ρ‚ Π²Ρ€Π°Π³ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΊ Ρ†Π²Π΅Ρ‚Ρƒ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ³Ρ€Π΅ -rampant--unitSpawnerBreath=Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΡŽΠ½ΠΈΡ‚ΠΎΠ² Π΄Ρ‹ΡˆΠ°Ρ‚ Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° Π½ΠΈΡ… Π²Π»ΠΈΡΡŽΡ‚ Π²Π΅Ρ‰ΠΈ Ρ‚ΠΈΠΏΠ° ядовитых капсул -rampant--useDumbProjectiles=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ снаряды Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ (стСнами). Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ². -rampant--attackWaveGenerationThresholdMax=ΠžΠ±Ρ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ. НЕ влияСт Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ кусак. Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с коэффициСнтом ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ (Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ ΠΏΡ€ΠΈ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ 0,0) -rampant--attackWaveGenerationThresholdMin=ΠžΠ±Ρ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΠ»Π½Π° Π°Ρ‚Π°ΠΊΠΈ. НЕ влияСт Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ кусак. Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ с коэффициСнтом ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ (ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠ³ ΠΏΡ€ΠΈ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ 100,0) -rampant--attackWaveMaxSize=Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎΠ»Π½Ρ‹ Π°Ρ‚Π°ΠΊΠΈ ΠΎΡ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» config.lua Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΌΠΎΠ΄Π°. -rampant--maxNumberOfSquads=Π‘ΠΎΠ»ΡŒΡˆΠ΅ отрядов Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС UPS. -rampant--maxNumberOfBuilders=Π‘ΠΎΠ»ΡŒΡˆΠ΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС UPS. -rampant--safeBuildings=Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ бСзопасноС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², с Ρ„Π»Π°Π³ΠΎΠΌ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅ΠΌΠΎΡΡ‚ΠΈ, установлСнным Π² false, Ρ‡Ρ‚ΠΎ заставит ΠΈΡ… большС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΡŒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½Π½Ρ‹ΠΌΠΈ. -rampant--safeBuildings-curvedRail=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ ΠΈΠ·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ -rampant--safeBuildings-straightRail=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ прямыС Ρ€Π΅Π»ΡŒΡΡ‹ -rampant--safeBuildings-bigElectricPole=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ большиС ΠΎΠΏΠΎΡ€Ρ‹ Π›Π­ΠŸ -rampant--safeBuildings-railChainSignals=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹Π΅ свСтофоры -rampant--safeBuildings-railSignals=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ свСтофоры -rampant--safeBuildings-trainStops=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ Π–Π”-станции -rampant--permanentNocturnal=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ появлСниС Π²ΠΎΠ»Π½ Π°Ρ‚Π°ΠΊ ΠΌΠΎΠ΄Π° Rampant Π½ΠΎΡ‡ΡŒΡŽ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ с ΠΌΠΎΠ΄ΠΎΠΌ Clockwork ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄Π°ΠΌΠΈ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΌΠΈ Π½ΠΎΡ‡ΡŒ. -rampant--aiPointsScaler=ΠžΡ‚ 0.0 Π΄ΠΎ 100.0. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ опрСдСляСт, сколько ΠΎΡ‡ΠΊΠΎΠ² дСйствия ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ИИ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ логичСский Ρ†ΠΈΠΊΠ» для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ дСйствий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, создания Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΡ… Π²ΠΎΠ»Π½. 0.3 - ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ, 0.75 - Π»Π΅Π³ΠΊΠΎ, 1.0 - срСднС, 1.25+ - тяТСло. -rampant--aiPointsPrintSpendingToChat=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Π² Ρ‡Π°Ρ‚, ΠΊΠΎΠ³Π΄Π° Rampant Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΡ‡ΠΊΠΈ. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ GPS. Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ для самого тяТёлого ΠΎΠΏΡ‹Ρ‚Π° ΠΈΠ³Ρ€Ρ‹ Π² Rampant. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‡Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ быстро Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π²ΠΎ врСмя напряТённых сраТСний! -rampant--aiPointsPrintGainsToChat=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сообщСниС Π² Ρ‡Π°Ρ‚, ΠΊΠΎΠ³Π΄Π° Rampant ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‡ΠΊΠΈ. НС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ пассивных Ρ‚ΠΎΡ‡Π΅ΠΊ. Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ для самого тяТёлого ΠΎΠΏΡ‹Ρ‚Π° ΠΈΠ³Ρ€Ρ‹ Π² Rampant. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‡Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ быстро Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π²ΠΎ врСмя напряТённых сраТСний! -rampant--addWallResistanceAcid=ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ стСны ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ 60% сопротивлСния кислотС, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ поврСТдСния ΠΎΡ‚ Π°Ρ‚Π°ΠΊ ΠΏΠ»Π΅Π²Π°ΠΊ. -rampant--safeBuildings-lamps=ΠšΡƒΡΠ°ΠΊΠΈ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚ Π»Π°ΠΌΠΏΡ‹ -rampant--removeBloodParticles=Π‘Ρ€Ρ‹Π·Π³ΠΈ ΠΊΡ€ΠΎΠ²ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ убийствС кусак, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ UPS. -rampant--attack-warning=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сообщСниС, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΎ Π½Π°Π΄Π²ΠΈΠ³Π°ΡŽΡ‰Π΅ΠΉΡΡ Π²ΠΎΠ»Π½Π΅ Π°Ρ‚Π°ΠΊΠΈ -rampant--enableSwarm=Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта collision_mask, Ρ‡Ρ‚ΠΎ позволяСт кусакам ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ количСство столкновСний ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½ΠΎΠΉ Π²ΠΎΠ»Π½ΠΎΠΉ -rampant--newEnemies=ДобавляСт Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ распространСны ΠΏΠΎ ΠΌΠΈΡ€Ρƒ. Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠžΠ—Π£. По 1 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ Π½Π° кусак, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ 5 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈΡ… развития это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ ΠžΠ—Π£ Π½Π° 2 Π“Π‘. По 20 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ 10 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ развития - Π΄ΠΎ 9 Π“Π‘ потрСблСния ΠžΠ—Π£. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ случайности ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ кусак, Ρ‡Π΅Ρ€Π²Π΅ΠΉ ΠΈ Π³Π½Ρ‘Π·Π΄. -rampant--enemySeed=Π—Π΅Ρ€Π½ΠΎ случайной Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх ΡŽΠ½ΠΈΡ‚ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ характСристики Π²Ρ€Π°Π³ΠΎΠ² -rampant--deadZoneFrequency=ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ Π·ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π±Π΅Π· Ρ‡Π΅Ρ€Π²Π΅ΠΉ ΠΈΠ»ΠΈ Π³Π½Ρ‘Π·Π΄ -rampant--newEnemyVariations=Число опрСдСляСт количСство Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ развития. Π­Ρ‚ΠΎ добавляСт случайности ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ развития. ΠžΡ‚ 1 Π΄ΠΎ 20. -rampant--disallowFriendlyFire=НС позволяСт враТСским ΠΏΠ»Π΅Π²Π°ΠΊΠ°ΠΌ ΠΈ чСрвям Π½Π°Π½ΠΎΡΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ½ ΡŽΠ½ΠΈΡ‚Π°ΠΌ ΠΈΠ»ΠΈ зданиям ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ силы Π·Π° счСт ΡƒΡ€ΠΎΠ½Π° ΠΏΠΎ области. -rampant--tierStart=Π­Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Π½Π°Π±ΠΎΡ€Π° Π²Ρ€Π°Π³ΠΎΠ² для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ увСличиваСтся Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (1-15, 2-75, 3-150, 4-250, 5-1000, 6-2000, 7-3500, 8-7500, 9-15000, 10-30000). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1 Π΄ΠΎ 10. -rampant--tierEnd=Π­Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ€Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Π½Π°Π±ΠΎΡ€Π° Π²Ρ€Π°Π³ΠΎΠ² для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ увСличиваСтся Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ уровня. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (1-15, 2-75, 3-150, 4-250, 5-1000, 6-2000, 7-3500, 8-7500, 9-15000, 10-30000). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1 Π΄ΠΎ 10. -rampant--enableMigration=Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ИИ Ρ€Π°ΡΡΠ΅Π»ΡΡ‚ΡŒΡΡ чСрвям ΠΈ Π³Π½Ρ‘Π·Π΄Π°ΠΌ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ настройки ΠΊΠ°Ρ€Ρ‚Ρ‹ для настройки рассСлСния кусак. -rampant--peacefulAIToggle=ИИ Rampant смоТСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΌΠΈΡ€Π½ΠΎΠ΅ состояниС. Если это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, ΠΈ кусаки пСрСходят Π² ΠΌΠΈΡ€Π½ΠΎΠ΅ состояниС, ΠΎΠ½ΠΈ вмСсто этого ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° агрСссивноС ΠΈΠ»ΠΈ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ состояниС Π² зависимости ΠΎΡ‚ настройки "ИИ: Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ". Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Ρ‚ΠΎΠΌΡƒ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΌΠΈΡ€Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Factorio Π½Π° вашСй ΠΊΠ°Ρ€Ρ‚Π΅. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ для самого тяТёлого ΠΎΠΏΡ‹Ρ‚Π° ΠΈΠ³Ρ€Ρ‹ Π² Rampant. -rampant--printAIStateChanges=Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ‡Π°Ρ‚ ΠΎ состоянии ИИ Rampant. БообщСния ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ повСрхности. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ для самого тяТёлого ΠΎΠΏΡ‹Ρ‚Π° ΠΈΠ³Ρ€Ρ‹ Π² Rampant. -rampant--debugTemperament=ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π² Ρ‡Π°Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚Π΅ ИИ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт измСнСниями состояния ИИ. Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. -rampant--attackWaveGenerationUsePlayerProximity=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ количСство Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½ΠΎΠ² ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ‡Π°Π½ΠΊΠ°ΠΌ с Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ кусак, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ Rampant. НЕ влияСт Π½Π° Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ Π°Ρ‚Π°ΠΊΠΈ. -rampant--attackPlayerThreshold=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‡Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² ΠΏΠΎΡ€ΠΎΠ³ Π°Ρ‚Π°ΠΊΠΈ. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ сниТаСт влияниС Ρ„Π΅Ρ€ΠΎΠΌΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΠΊΠ° ΠΈΠ³Ρ€ΠΎΠΊΠ°. -rampant--unkillableLogisticRobots=Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ транспортных Π΄Ρ€ΠΎΠ½ΠΎΠ² нСвосприимчивыми ΠΊ поврСТдСниям -rampant--unkillableConstructionRobots=Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Ρ€ΠΎΠ½ΠΎΠ² нСвосприимчивыми ΠΊ поврСТдСниям -rampant--unitBiterHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitBiterSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitBiterDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitBiterRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitBiterHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских кусак Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpitterHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpitterSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpitterDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpitterRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpitterHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠ»Π΅Π²Π°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitDroneHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. -rampant--unitDroneSpeedScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ скорости всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. -rampant--unitDroneDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. -rampant--unitDroneRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. -rampant--unitDroneHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Π΄Ρ€ΠΎΠ½ΠΎΠ² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ…. Π”Ρ€ΠΎΠ½Ρ‹ исходят ΠΎΡ‚ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΉ ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ Оса. -rampant--unitWormHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitWormDamageScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ΡƒΡ€ΠΎΠ½Π° всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitWormRangeScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ‚Π°ΠΊΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitWormHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpawnerHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpawnerOwnedScaler=МаксимальноС количСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ враТСскиС ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpawnerSpawnScaler=МаксимальноС количСство ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ враТСскиС ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpawnerRespawnScaler=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ появлСниями Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ, Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitSpawnerHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitHiveHealthScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΡƒΠ»ΡŒΠ΅Π² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitHiveHealingScaler=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π΅Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΡƒΠ»ΡŒΠ΅Π² Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--unitHiveRespawnScaler=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ появлСниями Π½ΠΎΠ²Ρ‹Ρ… ΡŽΠ½ΠΈΡ‚ΠΎΠ² ΠΈΠ· всСх Π½ΠΎΠ²Ρ‹Ρ… враТСских ΡƒΠ»ΡŒΠ΅Π², Π² ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°Ρ… -rampant--enableShrinkNestsAndWorms=Π£ΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈΡ† столкновСния Ρƒ Π³Π½Ρ‘Π·Π΄ ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ Π½Π° 50% (для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ прохоТдСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ). ΠœΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ пСрСкрытия ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π³Ρ€Π°Π½ΠΈΡ† столкновСния Π±ΡƒΠ΄Π΅Ρ‚ мСньшС, Ρ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. -rampant--raidAIToggle=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΉΠ΄Ρ‹ ИИ ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² ΠΎΠ±Π»Π°ΠΊΠ° загрязнСния -rampant--siegeAIToggle=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ осадныС Π³Ρ€ΡƒΠΏΠΏΡ‹ ИИ ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² ΠΎΠ±Π»Π°ΠΊΠ° загрязнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π³Π½Π΅Π·Π΄ΠΈΡ‚ΡŒΡΡ -rampant--laserEnemy=Ѐракция Π»Π°Π·Π΅Ρ€Π½Ρ‹Ρ… кусак, большоС сопротивлСниС Π»Π°Π·Π΅Ρ€Ρƒ, нСбольшоС - элСктричСству. ΠΠ½ΠΈΡ‚Ρ‹: кусаки ΠΈ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ. -rampant--waspEnemy=Ѐракция ос, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΏΠ»ΡŽΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ΅Π»ΠΊΠΈΠΌΠΈ Π΄Ρ€ΠΎΠ½Π°ΠΌΠΈ. -rampant--spawnerEnemy=Ѐракция ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡŽΠ½ΠΈΡ‚Ρ‹ - ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΠ· ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΏΠ»Π΅Π²Π°ΠΊΠΈ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ яйца, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π»ΡƒΠΏΠ»ΡΡŽΡ‚ΡΡ кусаки. -rampant--trollEnemy=Ѐракция Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… кусак, мощная рСгСнСрация, большая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ огню, нСбольшоС сопротивлСниС физичСским Π°Ρ‚Π°ΠΊΠ°ΠΌ, нСбольшоС сопротивлСниС Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. -rampant--fastEnemy=Ѐракция быстрых кусак, большая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСдвиТСния, нСбольшоС сопротивлСниС Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. -rampant--infernoEnemy=Ѐракция адских кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΡŽΡŽΡ‚ΡΡ Π·Π°ΠΆΠΈΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ кислотой, ΡΠΆΠΈΠ³Π°ΡŽΡ‰Π΅ΠΉ всё. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС кислотС ΠΈ огню, нСбольшая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ яду. -rampant--nuclearEnemy=Ѐракция ядСрных кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π²Π·Ρ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ°ΠΊ атомная Π±ΠΎΠΌΠ±Π°. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅. -rampant--electricEnemy=Ѐракция элСктричСских кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π½Π° нСбольшом расстоянии ΠΏΠΎΡ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ элСктричСством нСсколько Ρ†Π΅Π»Π΅ΠΉ Π½Π° Π»ΠΈΠ½ΠΈΠΈ ΡƒΠ΄Π°Ρ€Π°. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС элСктричСству, нСбольшоС сопротивлСниС Π»Π°Π·Π΅Ρ€Ρƒ. -rampant--fireEnemy=Ѐракция ΠΎΠ³Π½Π΅Π½Π½Ρ‹Ρ… кусак, большоС сопротивлСниС кислотС ΠΈ огню. -rampant--suicideEnemy=Ѐракция кусак-самоубийц, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки, Π²Π·Ρ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΈ Π°Ρ‚Π°ΠΊΠ΅. НСбольшоС сопротивлСниС яду, большая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅, -rampant--physicalEnemy=Ѐракция ТСстоких кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС физичСским Π°Ρ‚Π°ΠΊΠ°ΠΌ ΠΈ Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅, нСбольшая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ элСктричСству. -rampant--acidEnemy=Ѐракция кислотных кусак, большоС сопротивлСниС кислотС, нСбольшоС сопротивлСниС яду. -rampant--energyThiefEnemy=Ѐракция кусак-сапёров, большоС сопротивлСниС элСктричСству, нСбольшоС сопротивлСниС Π»Π°Π·Π΅Ρ€Ρƒ. Π Π°Π·Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ структуры, создавая ΡΠ½Π΅Ρ€Π³ΠΎΠΏΠΎΠ³Π»ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ кристаллы. -rampant--poisonEnemy=Ѐракция ядовитых кусак, ΡŽΠ½ΠΈΡ‚Ρ‹ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кусаки. ΠŸΡ€ΠΈ смСрти создаёт ΠΎΠ±Π»Π°ΠΊΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π»Π΅Ρ‡ΠΈΡ‚ кусак ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠ°. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ сопротивлСниС яду, нСбольшая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ элСктричСству, Π²Π·Ρ€Ρ‹Π²Ρ‡Π°Ρ‚ΠΊΠ΅ ΠΈ Π»Π°Π·Π΅Ρ€Ρƒ, нСбольшоС сопротивлСниС огню. -rampant--neutralTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--laserTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--waspTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--spawnerTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--trollTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--fastTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--infernoTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--nuclearTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--electricTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--fireTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--suicideTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--physicalTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--acidTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--energyThiefTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--poisonTints=Π¦Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RRGGBBAA, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ - основной, Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ - Ρ†Π²Π΅Ρ‚ ΡƒΠ»ΡŒΡ -rampant--disableCollidingProjectiles=Бнаряды (ΠΏΠ»Π΅Π²ΠΊΠΈ) кусак Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ кусаками, чСрвями ΠΈΠ»ΠΈ Π³Π½Ρ‘Π·Π΄Π°ΠΌΠΈ. Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ с Π½ΠΈΠΌΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ. -rampant--enableFullMapScan=Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ заставляСт ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ³Ρ€Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ сущностСй, созданных ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ систСмы событий factorio. (Если Π² ΠΌΠΎΠ΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ script_raised_built ΠΈΠ»ΠΈ script_raised_destroyed, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Rampant Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Π΅ ΠΈΠ³Ρ€Ρ‹). -rampant--unitAndSpawnerFadeTime=ВрСмя Π² сСкундах, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€ΡƒΠΏΡ‹ кусак Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠΊΡ€ΡƒΠ³ -rampant--enableFadeTime=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ врСмя исчСзновСния для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ увСличСния кусак, ΠΏΠ»Π΅Π²Π°ΠΊ, Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π³Π½Ρ‘Π·Π΄ ΠΈ ΡƒΠ»ΡŒΠ΅Π². Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, врСмя сущСствования Ρ‚Ρ€ΡƒΠΏΠΎΠ² Π½Π΅ измСнится. -rampant--temperamentRateModifier=Как быстро Rampant достигнСт ΠΏΠΈΠΊΠ° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚Π° ИИ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ‚Π°ΠΊΠΈ ΠΈ распространСниС. ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½Ρ‹ΠΉ, Ρ‚.Π΅. 1 = 100% - -[description] -rampant--planetHasAwoken=Rampant: ΠœΠ΅ΡΡ‚Π½Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° вашС присутствиС. -rampant-bobs-nee-newEnemies=ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π²Ρ€Π°Π³ΠΈ ΠΈΠ· ΠΌΠΎΠ΄ΠΎΠ² Bob ΠΈ NEE вмСстС с Π²Ρ€Π°Π³Π°ΠΌΠΈ Rampant,\nΠ°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих ΠΌΠΎΠ΄ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π²Ρ€Π°Π³Π°ΠΌΠΈ Rampant.\nГСнСрация создатСлСй ΡŽΠ½ΠΈΡ‚ΠΎΠ² Bob ΠΈ NEE Π½Π΅ поддСрТиваСтся Rampant,\nΠΊΠΎΠ³Π΄Π° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π²Ρ€Π°Π³ΠΈ Rampant. -rampant--adaptation2DebugMessage=Ѐракция ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π° ΠΈΠ·-Π·Π° ΡƒΡ€ΠΎΠ½Π°: __1__. Π’Π΅ΠΏΠ΅Ρ€ΡŒ фракция создаёт __2__ ΠΈ __3__. ΠœΡƒΡ‚Π°Ρ†ΠΈΡ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ __6__ ΠΈΠ· __7__. [gps=__4__,__5__] -rampant--adaptation1DebugMessage=Ѐракция ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π° ΠΈΠ·-Π·Π° ΡƒΡ€ΠΎΠ½Π°: __1__. Π’Π΅ΠΏΠ΅Ρ€ΡŒ фракция создаёт __2__. ΠœΡƒΡ‚Π°Ρ†ΠΈΡ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ __5__ ΠΈΠ· __6__. [gps=__3__,__4__] -rampant--adaptationFrozenDebugMessage=Ѐракция Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ. [gps=__1__,__2__] -rampant--adaptationResetDebugMessage=ΠœΡƒΡ‚Π°Ρ†ΠΈΠΈ Ρ„Ρ€Π°ΠΊΡ†ΠΈΠΈ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹. __2__ ΠΈΠ· __3__ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ. [gps=__1__,__2__] -rampant--laserEnemyName=Π›Π°Π·Π΅Ρ€Π½Ρ‹ΠΉ кусака -rampant--waspEnemyName=ΠšΡƒΡΠ°ΠΊΠ°-оса -rampant--spawnerEnemyName=ΠšΡƒΡΠ°ΠΊΠ°-ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ -rampant--trollEnemyName=Π Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ кусака -rampant--fastEnemyName=Быстрый кусака -rampant--infernoEnemyName=Адский кусака -rampant--nuclearEnemyName=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ кусака -rampant--electricEnemyName=ЭлСктричСский кусака -rampant--fireEnemyName=ΠžΠ³Π½Π΅Π½Π½Ρ‹ΠΉ кусака -rampant--neutralEnemyName=ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ кусака -rampant--suicideEnemyName=ΠšΡƒΡΠ°ΠΊΠ°-самоубийца -rampant--physicalEnemyName=ЖСстокий кусака -rampant--acidEnemyName=ΠšΠΈΡΠ»ΠΎΡ‚Π½Ρ‹ΠΉ кусака -rampant--energyThiefEnemyName=ΠšΡƒΡΠ°ΠΊΠ°-сапёр -rampant--poisonEnemyName=Π―Π΄ΠΎΠ²ΠΈΡ‚Ρ‹ΠΉ кусака diff --git a/Rampant_3.1.2/locale/zh-CN/locale.cfg b/Rampant_3.1.2/locale/zh-CN/locale.cfg deleted file mode 100644 index 87953d32..00000000 --- a/Rampant_3.1.2/locale/zh-CN/locale.cfg +++ /dev/null @@ -1,326 +0,0 @@ -chunk-scanner-squad-movement-rampant=BOSS2 ? -chunk-scanner-squad-rampant=BOSS ? - -[rampant] -entity=ι™·ι˜±: -neutral=ζ™ι€š -acid=ι…Έι…Έ -physical=ζ‹ι…· -electric=ι›·η”΅ζ³•ηŽ‹ -suicide=θ‡ͺηˆ† -nuclear=ζ ΈεΌΉ -fire=火焰 -inferno=εœ°η‹± -troll=ε†η”Ÿ -fast=ζžι€Ÿ -laser=ζΏ€ε…‰ -wasp=ι»„θœ‚ -spawner=产卡 -energy=ε·₯ε…΅ -energy-thief=ε·₯ε…΅ -poison=ηŒ›ζ―’ - -biter=虫子: -spitter=喷吐虫: -biter-spawner=θ™«ε·’: -spitter-spawner=喷吐虫巒: -worm=ζ²™θ™«: -hive=θœ‚ε·’: -worm-drone=ι»„θœ‚: -worm-wasp=ι»„θœ‚: -drone=θ›‹ -worm-egg=θ›‹ -spawn=θ™«ε·’: -egg=θ›‹: - -t1=t1 εΉΌθ™« -t2=t2 θ›Ή -t3=t3 η€Ύη•œ -t4=t4 δ½Žη­‰ε…΅ -t5=t5 士兡 -t6=t6 η²Ύθ‹± -t7=t7 冠军 -t8=t8 ιœΈηŽ‹ -t9=t9 泰坦 -t10=t10 ι²² - -[entity-name] -crystal-v1-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v2-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v3-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v4-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v5-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v6-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v7-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v8-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v9-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-v10-drain-rampant=θ€—η”΅ζ°΄ζ™Ά -crystal-drain-pole-rampant=ζ°΄ζ™Άε‘” -pylon-target-rampant=ζ°΄ζ™Άε‘” - -acid-ball-acid-fire-rampant=ι…Έζ±  -acid-ball-1-acid-fire-rampant=ι…Έζ±  -acid-ball-2-acid-fire-rampant=ι…Έζ±  -acid-ball-2-direction-acid-fire-rampant=ι…Έζ±  -acid-ball-3-acid-fire-rampant=ι…Έζ±  -acid-ball-3-direction-acid-fire-rampant=ι…Έζ±  -acid-ball-4-acid-fire-rampant=ι…Έζ±  -acid-ball-5-acid-fire-rampant=ι…Έζ±  - -spawner-proxy-1-rampant=η”Ÿζˆε™¨δ»£η† -spawner-proxy-2-rampant=η”Ÿζˆε™¨δ»£η† -spawner-proxy-3-rampant=η”Ÿζˆε™¨δ»£η† - -entity-proxy-trap-t1-rampant=ι™·ι˜±: t1 εΉΌθ™« -entity-proxy-turret-t1-rampant=ζ²™θ™«: t1 εΉΌθ™« -entity-proxy-utility-t1-rampant=ε·₯ε…·: t1 εΉΌθ™« -entity-proxy-spitter-spawner-t1-rampant=喷吐虫巒: t1 εΉΌθ™« -entity-proxy-biter-spawner-t1-rampant=θ™«ε·’: t1 εΉΌθ™« -entity-proxy-hive-t1-rampant=θœ‚ε·’: t1 εΉΌθ™« - - -[entity-description] - -[mod-setting-name] -rampant--printBaseSettling=AI: 当εšε±…者开始建造既打印 -rampant--printAwakenMessage=δΈ–η•Œ: ζ˜Ύη€Ίεˆε§‹ε’ŒεΉ³η»“ζŸ -rampant--initialPeaceTime=δΈ–η•Œ: εΌ€ε§‹ε’ŒεΉ³ζŒη»­ζ—Άι—΄ -rampant--printBaseUpgrades=AI: ζ˜Ύη€Ίζ΄Ύη³»εŸΊη‘€ε‡ηΊ§ -rampant--max-base-mutations=δΈ–η•Œ: 每δΈͺζ΄Ύη³»ζœ€ε€§ε˜εΌ‚ζ¬‘ζ•° -rampant--baseDistanceModifier=AI: ζ΄Ύη³»εŸΊη‘€θ·η¦»ηΌ–θΎ‘ -rampant--printBaseAdaptation=AI: ζ˜Ύη€Ίζ΄Ύη³»ε˜εΌ‚ -rampant--adaptationModifier=AI: 适应δΏζ”Ή -rampant--unitsAffectedByTiles=δΈ–η•Œ: ε•δ½ε—εœ°η –ε½±ε“ -rampant--oldRedEnemyMapColor=εœ°ε›Ύ: ζ’ε€ζ•ŒδΊΊεœ°ε›Ύι’œθ‰² -rampant--unitSpawnerBreath=δΈ–η•Œ: θ™«ε·’ε•δ½δΌšε‘ΌεΈη©Ίζ°” -rampant--useDumbProjectiles=ζŠ›ε°„η‰©: δ½Ώη”¨ε―ι˜»ζŒ‘ηš„εΌΉδΈΈ -rampant--attackWaveGenerationThresholdMax=攻击泒: θ΅·ε§‹ε—ζ”»ε‡»ι˜ˆε€Ό -rampant--attackWaveGenerationThresholdMin=攻击泒: η»“ζŸε—ζ”»ε‡»ι˜ˆε€Ό -rampant--attackWaveMaxSize=攻击泒: 可δ»₯η›΄ζŽ₯ε½’ζˆηš„ζœ€ε€§θ™«ηΎ€ε€§ε° -rampant--maxNumberOfSquads=攻击泒: εŒζ—Άε―δ»₯ζΏ€ζ΄»ηš„ζœ€ε€§ζ”»ε‡»η»„ζ•° -rampant--maxNumberOfBuilders=攻击泒: εŒζ—Άε―δ»₯ζΏ€ζ΄»ηš„ε»Ίη­‘η»„ηš„ζœ€ε€§η»„ζ•° -rampant--safeBuildings=ε‰ε…¨ζ€§: δ½Ώε»Ίη­‘ε‰ε…¨. -rampant--safeBuildings-curvedRail=ε‰ε…¨ζ€§: δ½ΏεΌ―ζ›²ηš„ι“θ½¨ε…ε—ε’¬δΌ€ -rampant--safeBuildings-straightRail=ε‰ε…¨ζ€§: 使直轨免受咬伀 -rampant--safeBuildings-bigElectricPole=ε‰ε…¨ζ€§: 使倧甡线杆免受咬伀 -rampant--safeBuildings-railChainSignals=ε‰ε…¨ζ€§: 使铁路链俑号免受咬伀 -rampant--safeBuildings-railSignals=ε‰ε…¨ζ€§: 使铁路俑号免受咬伀 -rampant--safeBuildings-trainStops=ε‰ε…¨ζ€§: 火车站免受咬伀 -rampant--permanentNocturnal=AI: ε€œι—΄ζ¨‘εΌ -rampant--aiPointsScaler=AI: ιšΎεΊ¦ηΌ©ζ”Ύ -rampant--aiPointsPrintSpendingToChat=AI: ζ˜Ύη€Ίη‚Ήζ•°θŠ±θ΄Ήεˆ°θŠε€© -rampant--aiPointsPrintGainsToChat=AI: ζ˜Ύη€Ίη‚Ήζ•°ε’žη›Šεˆ°θŠε€© -rampant--addWallResistanceAcid=ε‰ε…¨ζ€§; ε’žεŠ ε’™ε£ε―Ήε–·ζΊ…η‰©ηš„ζŠ΅ζŠ—εŠ› -rampant--safeBuildings-lamps=ε‰ε…¨ζ€§: 使灯具免受咬伀 -rampant--removeBloodParticles=δΌ˜εŒ–: 移陀葀梲粒子 (ε‡ε°‘ε»ΆθΏŸε³°ε€Ό) -rampant--attack-warning=ι€šηŸ₯: ε―η”¨ζ”»ε‡»ζ³’θ­¦ε‘Š -rampant--enableSwarm=攻击泒: 启用羀 -rampant--newEnemies=δΈ–η•Œ: ε―η”¨ζ–°ζ•ŒδΊΊ -rampant--enemySeed=δΈ–η•Œ: ζ•ŒδΊΊιšζœΊη§ε­ -rampant--deadZoneFrequency=δΈ–η•Œ: ζ•ŒδΊΊζ­»εŒΊι’‘ηŽ‡ -rampant--newEnemyVariations=δΈ–η•Œ: ζ•ŒδΊΊε˜εΌ‚ -rampant--enableBobsUnits=δΈ–η•Œ: 启用 Bobs 作为派系 -rampant--enableNEUnits=δΈ–η•Œ: 启用 NE 作为派系 -rampant--disallowFriendlyFire=ε‰ε…¨ζ€§: η¦ζ­’ε‹ζ–Ήη«η„°ζΊ…ε°„δΌ€ε³ -rampant--tierStart=δΈ–η•Œ: εˆε§‹ζ•ŒδΊΊη­‰ηΊ§ -rampant--tierEnd=δΈ–η•Œ: ζœ€ε€§ζ•ŒδΊΊη­‰ηΊ§ -rampant--enableMigration=AI: 启用迁移 -rampant--peacefulAIToggle=AI: ε―η”¨ε’ŒεΉ³ -rampant--printAIStateChanges=AI: ζ˜Ύη€ΊηŠΆζ€ζ›΄ζ”Ήεˆ°θŠε€© -rampant--debugTemperament=DEBUG: 调试用 ζ˜Ύη€Ίζ€§ζƒ…ε˜εŒ–εˆ°θŠε€© - -rampant--attackWaveGenerationUsePlayerProximity=攻击泒: δ½Ώη”¨ηŽ©εΆζŽ₯θΏ‘εΊ¦δ½œδΈΊζ”»ε‡»θ§¦ε‘ε™¨ -rampant--attackPlayerThreshold=攻击泒: 玩εΆεΎ—εˆ†θ΄‘ηŒι˜ˆε€Ό - -rampant--unkillableLogisticRobots=δΈ–η•Œ: ζ— ζ³•ζ€ζ­»ηš„η‰©ζ΅ζœΊε™¨δΊΊ -rampant--unkillableConstructionRobots=δΈ–η•Œ: ζ— ζ³•ζ€ζ­»ηš„ε»Ίη­‘ζœΊε™¨δΊΊ - -rampant--unitBiterHealthScaler=δΏζ”Ή: ζ’•ε’¬θ™«η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitBiterSpeedScaler=δΏζ”Ή: ζ’•ε’¬θ™«ι€ŸεΊ¦ηΌ©ζ”Ύ -rampant--unitBiterDamageScaler=δΏζ”Ή: ζ’•ε’¬θ™«δΌ€ε³ηΌ©ζ”Ύ -rampant--unitBiterRangeScaler=δΏζ”Ή: 撕咬虫攻击距离缩放 -rampant--unitBiterHealingScaler=δΏζ”Ή: ζ’•ε’¬θ™«ε›žε€ηΌ©ζ”Ύ -rampant--unitSpitterHealthScaler=δΏζ”Ή: ε–·εθ™«η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitSpitterSpeedScaler=δΏζ”Ή: ε–·εθ™«ι€ŸεΊ¦ηΌ©ζ”Ύ -rampant--unitSpitterDamageScaler=δΏζ”Ή: 喷吐虫伀ε³ηΌ©ζ”Ύ -rampant--unitSpitterRangeScaler=δΏζ”Ή: 喷吐虫伀ε³ηΌ©ζ”Ύ -rampant--unitSpitterHealingScaler=δΏζ”Ή: ε–·εθ™«ε›žε€ηΌ©ζ”Ύ -rampant--unitDroneHealthScaler=δΏζ”Ή: Drone η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitDroneSpeedScaler=δΏζ”Ή: Drone ι€ŸεΊ¦ηΌ©ζ”Ύ -rampant--unitDroneDamageScaler=δΏζ”Ή: Drone δΌ€ε³ηΌ©ζ”Ύ -rampant--unitDroneRangeScaler=δΏζ”Ή: Drone 攻击距离缩放 -rampant--unitDroneHealingScaler=δΏζ”Ή: Drone ε›žε€ηΌ©ζ”Ύ -rampant--unitWormHealthScaler=δΏζ”Ή: ζ²™θ™«η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitWormDamageScaler=δΏζ”Ή: ζ²™θ™«δΌ€ε³ηΌ©ζ”Ύ -rampant--unitWormRangeScaler=δΏζ”Ή: 沙虫攻击距离缩放 -rampant--unitWormHealingScaler=δΏζ”Ή: ζ²™θ™«ε›žε€ηΌ©ζ”Ύ -rampant--unitSpawnerHealthScaler=δΏζ”Ή: 单位产卡者 η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitSpawnerOwnedScaler=δΏζ”Ή: 单位产卡者 ζ‹₯ζœ‰ζ•°ι‡ηΌ©ζ”Ύ -rampant--unitSpawnerSpawnScaler=δΏζ”Ή: 单位产卡者 产卡数缩放 -rampant--unitSpawnerRespawnScaler=δΏζ”Ή: 单位产卡者 ι‡η”ŸηŽ‡ηΌ©ζ”Ύ -rampant--unitSpawnerHealingScaler=δΏζ”Ή: 单位产卡者 ε›žε€ηΌ©ζ”Ύ - -rampant--unitHiveHealthScaler=δΏζ”Ή: θœ‚ε·’ η”Ÿε‘½ηΌ©ζ”Ύ -rampant--unitHiveHealingScaler=δΏζ”Ή: θœ‚ε·’ ε›žε€ηΌ©ζ”Ύ -rampant--unitHiveRespawnScaler=δΏζ”Ή: θœ‚ε·’ ι‡η”ŸηΌ©ζ”Ύ - -rampant--enableShrinkNestsAndWorms=攻击泒: ζ”ΆηΌ©ε·’ε’Œζ²™θ™« - -rampant--raidAIToggle=AI: 启用ηͺθ’­ AI -rampant--siegeAIToggle=AI: 启用围攻 AI - -rampant--laserEnemy=δΈ–η•Œ: ζΏ€ε…‰θ™«ζ΄Ύη³» -rampant--waspEnemy=δΈ–η•Œ: ι»„θœ‚θ™«ζ΄Ύη³» -rampant--spawnerEnemy=δΈ–η•Œ: 产卡虫派系 -rampant--trollEnemy=δΈ–η•Œ: ε†η”Ÿθ™«ζ΄Ύη³» -rampant--fastEnemy=δΈ–η•Œ: ζžι€Ÿθ™«ζ΄Ύη³» -rampant--infernoEnemy=δΈ–η•Œ: εœ°η‹±θ™«ζ΄Ύη³» -rampant--nuclearEnemy=δΈ–η•Œ: ζ ΈεΌΉθ™«ζ΄Ύη³» -rampant--electricEnemy=δΈ–η•Œ: ι›·η”΅ζ³•ηŽ‹θ™«ζ΄Ύη³» -rampant--fireEnemy=δΈ–η•Œ: 火焰虫派系 -rampant--suicideEnemy=δΈ–η•Œ: θ‡ͺηˆ†θ™«ζ΄Ύη³» -rampant--physicalEnemy=δΈ–η•Œ: ζ‹ι…·θ™«ζ΄Ύη³» -rampant--acidEnemy=δΈ–η•Œ: ι…Έι…Έθ™«ζ΄Ύη³» -rampant--energyThiefEnemy=δΈ–η•Œ: ε·₯ε…΅θ™«ζ΄Ύη³» -rampant--poisonEnemy=δΈ–η•Œ: ηŒ›ζ―’θ™«ζ΄Ύη³» - -rampant--disableCollidingProjectiles=ζŠ›ε°„η‰©: ιžζ’•ε’¬θ™«εΌΊεˆΆι˜»ζŒ‘εΌΉδΈΈ -rampant--enableFullMapScan=ε…ΌεΉζ€§: 开启全图扫描 -rampant--unitAndSpawnerFadeTime=5η§θ™«ε­ηš„ε°Έδ½“ζΆˆι€€ζ—Άι—΄ -rampant--enableFadeTime=ε―η”¨ε°Έδ½“ζΆˆι€€ζ—Άι—΄ -rampant--temperamentRateModifier=AI: ζš΄θΊη¨‹εΊ¦ - -[mod-setting-description] -rampant--printBaseSettling=当εšε±…θ€…εΌ€ε§‹η­‘ε·’ζ—ΆοΌŒε‘ζŽ§εˆΆε°ζ‰“ε°δΈ€ζ‘ζΆˆζ― -rampant--printAwakenMessage=εˆε§‹ε’ŒεΉ³ζ—Άι—΄η»“ζŸζ—Άε‘ζŽ§εˆΆε°ζ‰“ε°δΈ€ζ‘ζΆˆζ― -rampant--initialPeaceTime=AI ε°†δΏζŒε’ŒεΉ³ηŠΆζ€οΌŒη›΄εˆ°εœ¨ζΈΈζˆδΈ­η»θΏ‡ζŒ‡εšηš„εˆ†ι’Ÿζ•°γ€‚ θΏ™εΊ”θ―₯θ©δΊΊζœ‰ζ—Άι—΄εΌ€ε§‹δΈ€δΈͺεˆε§‹εŸΊεœ°γ€‚ -rampant--printBaseUpgrades=当 AI ε‡ηΊ§ε»Ίη­‘η‰©ζ—Άζ‰“ε°εˆ°ζŽ§εˆΆε°γ€‚ 这些不应θ―₯εœ¨θΏη§»ζœŸι—΄ε‘η”ŸοΌŒθ€Œζ˜―εœ¨ζ•Œζ–Ήη»“ζž„ηš„ζ•΄δΈͺη”Ÿε‘½ε‘¨ζœŸδΈ­ε‘η”Ÿγ€‚ -rampant--max-base-mutations=ιœ€θ¦ηŒ–η—ηš„ζ–°ζ•ŒδΊΊζ‰θƒ½δΊ§η”Ÿδ»»δ½•ε½±ε“γ€‚ θΏ™δΈͺ数字代葨了一δΈͺ地区派系可δ»₯ε˜εΌ‚ζˆε…Άδ»–ζ΄Ύη³»ηš„ζ¬‘ζ•°γ€‚ ιšη€ζ—Άι—΄ηš„ζŽ¨η§»οΌŒεŒΊεŸŸζ΄Ύη³»ε›’δ½“ι€šεΈΈδΌšι€‚εΊ”δΈ€δΈͺε―Ήδ»–δ»¬ζ­£εœ¨θ’«ζ€ζ­»ηš„δΌ€ε³η±»εž‹ε…·ζœ‰εΌΊε€§ζŠ΅ζŠ—εŠ›ηš„ζ΄Ύη³»γ€‚ ηͺε˜ηš„ζ­»δΊ‘ι˜ˆε€Όζ˜―εŸΊδΊŽθΏ›εŒ–ηš„γ€‚ (4500 ζ­»δΊ‘:<50% θΏ›εŒ–, 7500:<70%, 11000:<90%, 16000) -rampant--baseDistanceModifier=ε°†ζ΄Ύη³»δΉ‹ι—΄ηš„θ·η¦»δΏζ”ΉδΈΊη™Ύεˆ†ζ―”ε˜εŒ–γ€‚ δ½Žη™Ύεˆ†ζ―”ε―θƒ½δΌšε½±ε“ζ€§θƒ½γ€‚ -rampant--printBaseAdaptation=当派系根ζζ€ζ­»ηš„ζ•ŒδΊΊζ•°ι‡ε‘η”Ÿε˜εΌ‚ζ—ΆοΌŒε‘θŠε€©ζŽ§εˆΆε°ζ˜Ύη€ΊδΈ€ζ‘梈息 -rampant--adaptationModifier=ζ Ήζζ€ζ­»ε•δ½ζˆ–ε»Ίη­‘η‰©ηš„δΌ€ε³η±»εž‹οΌŒδΏζ”Ήεœ¨ι€‚εΊ”ε‘η”ŸδΉ‹ε‰εΏ…ι‘»ζ‘§ζ―ηš„ε•δ½ζˆ–ζ•Œζ–Ήε»Ίη­‘η‰©ηš„ζ•°ι‡γ€‚ ζ­€δΏζ”Ήε™¨ζ˜―使用δ»₯δΈ‹δ½œδΈΊθ΅·η‚Ήηš„η™Ύεˆ†ζ―”ε˜εŒ–οΌˆι»˜θ€ζ­»δΊ‘δΊ‹δ»Άδ»Ž 4500 εΌ€ε§‹οΌŒδ½ŽδΊŽ 0.5 evo,低于 0.7 δΈΊ 7500,低于 0.9 δΈΊ 11000,+0.9 δΈΊ 16000οΌ‰ -rampant--unitAndSpawnerFadeTime=θ™«ε°Έδ½“εœ¨ι™„θΏ‘εœη•™ηš„ζ—Άι—΄οΌˆδ»₯秒为单位) -rampant--unitsAffectedByTiles=ε•δ½ε—εœ°η –δΏζ”Ήηš„影响 -rampant--oldRedEnemyMapColor=ε°†ζ•Œζ–Ήεœ°ε›Ύι’œθ‰²θΏ˜εŽŸδΈΊεŽŸη‰ˆζ•Œζ–Ήεœ°ε›Ύι’œθ‰² -rampant--unitSpawnerBreath=ηŽ°εœ¨ε•δ½δΊ§ε΅θ™«δΌšε‘ΌεΈη©Ίζ°”οΌŒε› ζ­€εƒδ»¬δΌšε—εˆ°ζ―’θ―θƒΆε›ŠδΉ‹η±»ηš„δΈœθ₯Ώηš„影响 -rampant--useDumbProjectiles=δ½Ώη”¨ε―ι˜»ζŒ‘ηš„ζŠ•ε°„η‰©ζ”»ε‡»γ€‚ ε¦‚ζžœζ‚¨δ½Ώη”¨ηš„ζ˜―ζ–°ζ•ŒδΊΊοΌŒεˆ™εΊ”ζ£€ζŸ₯歀鑹。 -rampant--attackWaveGenerationThresholdMax=εŒΊε—δΊ§η”Ÿζ”»ε‡»ζ³’εΏ…ι‘»θΎΎεˆ°ηš„ζ€»εˆ†γ€‚ δΈε½±ε“εŽŸη‰ˆθ™«ε­γ€‚ δΈŽθΏ›εŒ–ε› ε­ηΊΏζ€§ηΌ©ζ”ΎοΌˆθ΅·ε§‹θΏ›εŒ–ι˜ˆε€Ό@ 0.0 οΌ‰ -rampant--attackWaveGenerationThresholdMin=εŒΊε—δΊ§η”Ÿζ”»ε‡»ζ³’εΏ…ι‘»θΎΎεˆ°ηš„ζ€»εˆ†γ€‚ δΈε½±ε“εŽŸη‰ˆθ™«ε­γ€‚ δΈŽθΏ›εŒ–ε› ε­ηΊΏζ€§ηΌ©ζ”ΎοΌˆη»“ζŸθΏ›εŒ–ι˜ˆε€Ό@ 100.0 οΌ‰ -rampant--attackWaveMaxSize=ε¦‚ζžœδ½ ζƒ³ζ”Ήε˜ζ”»ε‡»ζ³’ε¦‚δ½•ιšη€θΏ›εŒ–θ€Œε˜εŒ–οΌŒδ½ ιœ€θ¦δΏζ”Ή zip ζ–‡δ»ΆδΈ­ηš„ config.lua。 -rampant--safeBuildings=θΏ™ιœ€θ¦εˆ‡ζ’ε‰ε…¨ε»Ίη­‘εˆ‡ζ’才能ε·₯δ½œγ€‚ 这将导致ε‰ε…¨ηš„εžδ½“εœ¨ε―破坏标志θΎη½δΈΊ false ηš„ζƒ…ε†΅δΈ‹ι‡ζ–°η”ŸζˆοΌŒδ»Žθ€Œδ½Ώεƒδ»¬ζ°ΈθΏœδΈδΌšε†ζ¬‘成为η›ζ ‡ζˆ–ζŸεγ€‚ -rampant--safeBuildings-curvedRail=使弯轨免受咬伀 -rampant--safeBuildings-straightRail=使直轨免受咬伀 -rampant--safeBuildings-bigElectricPole=使倧甡线杆免受咬伀 -rampant--safeBuildings-railChainSignals=使铁路俑号免受咬伀 -rampant--safeBuildings-railSignals=使铁路俑号免受咬伀 -rampant--safeBuildings-lamps=使灯具免受咬伀 -rampant--safeBuildings-trainStops=使火车站免受咬 -rampant--permanentNocturnal=εˆ‡ζ’ζ­€ι€‰ι‘Ήε°†ε―Όθ‡΄ηŒ–η—ηš„ζ”»ε‡»ζ³’εœ¨ε€œι—΄δΊ§η”Ÿγ€‚ δΈŽε‘ζ‘ζ¨‘η»„ζˆ–ε»Άι•Ώε€œζ™šηš„ζ¨‘η»„ι…εˆδ½Ώη”¨ζ•ˆζžœζ›΄ε₯½γ€‚ -rampant--aiPointsScaler=在 0.0 ε’Œ 100.0 之间。 θΏ™δΌšθ‘‘ι‡δΊΊε·₯ζ™Ίθƒ½εœ¨ζ―δΈͺι€»θΎ‘ε‘¨ζœŸθŽ·εΎ—ε€šε°‘εŠ¨δ½œη‚Ήζ₯ζ‰§θ‘Œθ―Έε¦‚εˆΆι€ ζ”»ε‡»ζ³’δΉ‹η±»ηš„εŠ¨δ½œγ€‚ 0.3 - 非常εΉζ˜“οΌŒ0.75 - εΉζ˜“οΌŒ1.0 - δΈ­η­‰οΌŒ1.25+ - ε›°ιšΎ -rampant--aiPointsPrintSpendingToChat=每当 ηŒ–η— θŠ±θ΄Ήη‚Ήζ•°ζ—ΆοΌŒζ˜Ύη€ΊδΈ€ζ‘ζΆˆζ―εˆ°θŠε€©ζ γ€‚ εŒ…ζ‹¬ GPS 坐标。 δΏζŒη¦η”¨δ»₯θŽ·εΎ—ζœ€εŽŸζ±εŽŸε‘³ηš„ηŒ–η—δ½“ιͺŒγ€‚ ζ³¨ζ„οΌšε―δ»₯εœ¨ηΉεΏ™ηš„ζˆ˜ζ–—δΈ­εΏ«ι€Ÿεˆ·ζ»‘θŠε€©οΌ -rampant--aiPointsPrintGainsToChat=每当 ηŒ–η— θŽ·εΎ—η§―εˆ†ζ—ΆοΌŒζ˜Ύη€ΊδΈ€ζ‘ζΆˆζ―εˆ°θŠε€©ζ γ€‚ δΈζ˜Ύη€Ίθ’«εŠ¨η”Ÿζˆηš„η§―εˆ†γ€‚ δΏζŒη¦η”¨δ»₯θŽ·εΎ—ζœ€εŽŸζ±εŽŸε‘³ηš„ηŒ–η—δ½“ιͺŒγ€‚ ζ³¨ζ„οΌšε―δ»₯εœ¨ηΉεΏ™ηš„ζˆ˜ζ–—δΈ­εΏ«ι€Ÿεˆ·ζ»‘θŠε€©οΌ -rampant--addWallResistanceAcid=εˆ‡ζ’ζ­€ι€‰ι‘Ήε°†ε―Όθ‡΄ 60% θ€ι…Έθ’«ζ·»εŠ εˆ°ζ‰€ζœ‰ε’™ε£εžδ½“οΌŒδ»₯ε‡ε°‘ε–·ζΊ…η‰©ε―Ήε’™ε£ι€ ζˆηš„ζŸεγ€‚ -rampant--removeBloodParticles=ζ€ζ­»θ™«ζ—ΆδΊ§η”Ÿηš„θ‘€ζΆ²ι’—η²’δΌšε―Όθ‡΄ UPS θΎΎεˆ°ε³°ε€ΌοΌŒθΏ™δΈͺδΌšζΆˆι™€εƒδ»¬γ€‚ -rampant--enableSwarm=θΏ™ε‡ε°‘δΊ†ε•ε…ƒη’°ζ’žζŽ©η ηš„ε€§ε°οΌŒε―Όθ‡΄εƒδ»¬ε‡ε°‘θ·―εΎ„η’°ζ’žεΉΆεΉ³ζ»‘ζ”»ε‡» -rampant--attack-warning=ζ˜Ύη€ΊδΈ€ζ‘ζΆˆζ―θ­¦ε‘ŠηŽ©εΆζ”»ε‡»ζ³’ε³ε°†εˆ°ζ₯ -rampant--newEnemies=ζ·»εŠ ε°†εˆ†ζ•£εœ¨δΈ–η•Œε„εœ°ηš„ζ–°ζ•ŒδΊΊγ€‚ θΏ™δΌšε’žεŠ  ε†…ε­˜ε η”¨γ€‚ 每δΈͺθ™«ε­ε’Œθ™«ε·’ιƒ½ζœ‰1δΈͺε˜δ½“οΌŒ5层钄θ‘ζœ€ε€šε―ε’žεŠ 2GB ε†…ε­˜γ€‚ θΎη½δΊ† 20 δΈͺε˜δ½“ε’Œ 10 δΈͺε±‚οΌŒι’„θ‘ζœ€ε€šε―ε’žεŠ  9GB ε†…ε­˜ε η”¨γ€‚ ε˜εŒ–δΈΊζ―δΈ€ε±‚ηš„θ™«ζˆ–ε·’η©΄ε’žεŠ δΊ†ιšζœΊζ€§γ€‚ η­‰ηΊ§ζ˜―θ™«ε­ηš„εŠ›ι‡ζ°΄εΉ³γ€‚ -rampant--enemySeed=δΈΊζ‰€ζœ‰ε•δ½η”ŸζˆζδΎ›εŠ¨εŠ›ηš„η§ε­οΌŒε› ζ­€ε¦‚ζžœζ‚¨εΈŒζœ›ζ•ŒδΊΊηš„η»Ÿθ‘ζ•°ζε‘η”Ÿε˜εŒ–οΌŒθ―·ζ›΄ζ”Ήζ­€θΎη½ -rampant--deadZoneFrequency=εΌ€ε§‹ζ—Άζ²‘ζœ‰ζ²™θ™«ζˆ–ε·’η©΄ηš„εŒΊεŸŸηš„η™Ύεˆ†ζ―” -rampant--newEnemyVariations=θ―₯ζ•°ε­—ε―ΉεΊ”δΊŽζ―ε±‚ηš„ε˜δ½“ζ•°ι‡γ€‚ θΏ™ε’žεŠ δΊ†ζ―ε±‚εŠŸηŽ‡ζ°΄εΉ³ηš„ιšζœΊζ€§γ€‚ ζœ€ε°‘ 1οΌŒζœ€ε€š 20 -rampant--disallowFriendlyFire=ι˜²ζ­’ζ•Œζ–Ήε–·ζ°΄θ™«ε’Œζ²™θ™«ι€šθΏ‡ι£žζΊ…δΌ€ε³ε―ΉεŒδΈ€ιƒ¨ι˜Ÿηš„ε•δ½ζˆ–ε»Ίη­‘η‰©ι€ ζˆδΌ€ε³ -rampant--tierStart=θΏ™ζ˜―εœ¨δΈΊζŒ‡εšηš„ε±‚ζ•°η”ŸζˆδΈ€η»„ζ•ŒδΊΊζ—Άε°†δ½Ώη”¨ηš„ζ•ŒδΊΊηš„θ΅·ε§‹ηΊ§εˆ«οΌŒεΉΆηΊΏζ€§ε’žεŠ εˆ°ζ‰€ι€‰ε±‚ζ•°ηš„η»“ζŸε±‚γ€‚ 倧致ε₯εΊ·ζ–Ήι’οΌŒζ―δΈ€ε±‚ε¦‚δΈ‹οΌˆ1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000)。 ζœ€ε°‘ 1οΌŒζœ€ε€š 10 -rampant--tierEnd=θΏ™ζ˜―δ»Žθ΅·ε§‹ε±‚ηΊΏζ€§ε’žεŠ θ‡³ζ‰€ι€‰ε±‚ζ•°εŽθΎΎεˆ°ηš„η»“ζŸε±‚ηΊ§γ€‚ 倧致ε₯εΊ·ζ–Ήι’ηš„ζ―δΈ€ε±‚ε¦‚δΈ‹οΌˆ1-15,2-75,3-150,4-250,5-1000,6-2000,7-3500,8-7500,9-15000,10-30000)。 ζœ€ε°‘ 1οΌŒζœ€ε€š 10 -rampant--enableMigration=θΏ™ε°†ε…θΈ AI ζ‰©ε±•ε…Άθ™«ε’Œε·’η©΄γ€‚ ε°Šι‡θ™«ζ‰©ε±•ηš„εœ°ε›ΎθΎη½γ€‚ -rampant--peacefulAIToggle=ηŒ–η— AI可δ»₯ζ»šεŠ¨ε’ŒεΉ³ηŠΆζ€γ€‚ ε¦‚ζžœθΏ™θ’«η¦η”¨εΉΆδΈ”ε’¬η‰™θ€…ζ»šεŠ¨ε’ŒεΉ³ηŠΆζ€οΌŒεƒδ»¬δΌšζ”ΉδΈΊζ”»ε‡»ζ€§ζˆ–θΏη§»ηŠΆζ€οΌŒε…·δ½“ε–ε†³δΊŽ AI: β€ε―η”¨θΏη§»β€œθΎη½γ€‚ θΏ™δΈŽζ‚¨ηš„εœ°ε›Ύζ˜―ε¦ε―η”¨ζˆ–η¦η”¨ Factorio ηš„ε’ŒεΉ³ζ¨‘εΌζ— ε…³γ€‚ η¦η”¨ζœ€ιšΎηš„ηŒ–η—δ½“ιͺŒγ€‚ -rampant--printAIStateChanges=εœ¨ζΈΈζˆθŠε€©δΈ­δΈΊζ‚¨ζδΎ›ζœ‰ε…³ ηŒ–η— ηš„ AI ηŠΆζ€ηš„δΏ‘ζ―γ€‚ 为每δΈͺθ‘¨ι’ζ˜Ύη€ΊζΆˆζ―γ€‚ η¦η”¨ζœ€ιšΎηš„ηŒ–η—δ½“ιͺŒγ€‚ -rampant--debugTemperament=聊倩显瀺控刢AIηš„ηŠΆζ€δΏ‘ζ―γ€‚ θΏ™η”¨δΊŽθ°ƒθ―•γ€‚ - -rampant--enableShrinkNestsAndWorms=减少 50% ηš„ε·’ε’Œζ²™θ™«ηš„η’°ζ’žη›’ε€§ε°γ€‚ η”±δΊŽη’°ζ’žζ‘†ε°δΊŽεžδ½“ε›Ύε½’οΌŒε―θƒ½δΌšε―Όθ‡΄εžδ½“重叠。 -rampant--attackWaveGenerationUsePlayerProximity=εŒ…ζ‹¬ηŽ©εΆδΏ‘ζ―η΄ ζ•°ι‡δ½œδΈΊε…·ζœ‰θ™«ε·’ηš„εŒΊε—ηš„ι˜ˆε€ΌοΌŒθΏ™ε°†δΊ§η”ŸδΈ€δΈͺηŒ–η—ηš„ζ”»ε‡»ζ³’γ€‚ δΈε½±ε“εŽŸη‰ˆθ™«ε­γ€‚ -rampant--attackPlayerThreshold=δΈ€δΈͺε—δΈΊζ”»ε‡»ι˜ˆε€Όεšε‡Ίθ΄‘ηŒεΏ…ι‘»θΎΎεˆ°ηš„εˆ†ζ•°γ€‚ε’žεŠ δΌšε‡ε°‘ηŽ©εΆδΏ‘ζ―η΄ δΊ‘ηš„ε½±ε“γ€‚ - -rampant--unkillableLogisticRobots=θΏ™ε°†δ½Ώη‰©ζ΅ζœΊε™¨δΊΊε…ε—ζ‰€ζœ‰δΌ€ε³ -rampant--unkillableConstructionRobots=θΏ™ε°†δ½Ώε»Ίη­‘ζœΊε™¨δΊΊε…ε—ζ‰€ζœ‰δΌ€ε³ - -rampant--unitBiterHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ’•ε’¬θ™«οΌ‰ηš„η”Ÿε‘½ -rampant--unitBiterSpeedScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ’•ε’¬θ™«οΌ‰ηš„ι€ŸεΊ¦ -rampant--unitBiterDamageScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ’•ε’¬θ™«οΌ‰ηš„δΌ€ε³ -rampant--unitBiterRangeScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ’•ε’¬θ™«οΌ‰ηš„ζ”»ε‡»θ·η¦» -rampant--unitBiterHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ’•ε’¬θ™«οΌ‰ηš„ε›žε€ -rampant--unitSpitterHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆε–·εθ™«οΌ‰ηš„η”Ÿε‘½ -rampant--unitSpitterSpeedScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆε–·εθ™«οΌ‰ηš„ι€ŸεΊ¦ -rampant--unitSpitterDamageScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆε–·εθ™«οΌ‰ηš„δΌ€ε³ -rampant--unitSpitterRangeScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆε–·εθ™«οΌ‰ηš„ζ”»ε‡»θ·η¦» -rampant--unitSpitterHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆε–·εθ™«οΌ‰ηš„ε›žε€ -rampant--unitDroneHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ drone ηš„η”Ÿε‘½. Drones ζ₯θ‡ͺζ΄Ύη³»δΊ§ε΅θ€…ε’Œι»„θœ‚ -rampant--unitDroneSpeedScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ drone ηš„ι€ŸεΊ¦. Drones ζ₯θ‡ͺζ΄Ύη³»δΊ§ε΅θ€…ε’Œι»„θœ‚ -rampant--unitDroneDamageScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ drone ηš„δΌ€ε³. Drones ζ₯θ‡ͺζ΄Ύη³»δΊ§ε΅θ€…ε’Œι»„θœ‚ -rampant--unitDroneRangeScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ drone ηš„ζ”»ε‡»θ·η¦». Drones ζ₯θ‡ͺζ΄Ύη³»δΊ§ε΅θ€…ε’Œι»„θœ‚ -rampant--unitDroneHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ drone ηš„ε›žε€. Drones ζ₯θ‡ͺζ΄Ύη³»δΊ§ε΅θ€…ε’Œι»„θœ‚ -rampant--unitWormHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ²™θ™«οΌ‰ηš„η”Ÿε‘½ -rampant--unitWormDamageScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ²™θ™«οΌ‰ηš„δΌ€ε³ -rampant--unitWormRangeScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ²™θ™«οΌ‰ηš„ζ”»ε‡»θ·η¦» -rampant--unitWormHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊοΌˆζ²™θ™«οΌ‰ηš„ε›žε€ -rampant--unitSpawnerHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ 产卡者 ηš„η”Ÿε‘½ -rampant--unitSpawnerOwnedScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊδΊ§ε΅θ€… 每δΈͺδΊ§ε΅θ€…ζŽ§εˆΆηš„ζœ€ε€§ε•δ½ζ•° -rampant--unitSpawnerSpawnScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ 产卡者 εœ¨εŒδΈ€ζ—Άι—΄δΊ§η”Ÿηš„ε•δ½ζ•°ι‡ -rampant--unitSpawnerRespawnScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ 产卡者 δΊ§η”Ÿζ–°ε•δ½ηš„ζ—Άι—΄ -rampant--unitSpawnerHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ 产卡者 ηš„ε›žε€ -rampant--unitHiveHealthScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ θœ‚ε·’ ηš„η”Ÿε‘½ -rampant--unitHiveHealingScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ θœ‚ε·’ ηš„ε›žε€ -rampant--unitHiveRespawnScaler=ζŒ‰η™Ύεˆ†ζ―”ηΌ©ζ”Ύζ‰€ζœ‰ζ–°ζ•ŒδΊΊ θœ‚ε·’ δΊ§η”Ÿζ–°ε•δ½ηš„ζ—Άι—΄ - -rampant--raidAIToggle=δ»Žδ½ ηš„ζ±‘ζŸ“δΊ‘δΉ‹ε€–εˆ‡ζ’ ai 蒭击方 -rampant--siegeAIToggle=εˆ‡ζ’ζ₯θ‡ͺζ±‘ζŸ“δΊ‘δΉ‹ε€–ηš„ζ”»ε‡»ζˆ–η­‘ε·’ηš„ AI ζ”»εŸŽζ–Ήι˜Ÿ - -rampant--laserEnemy=ζΏ€ε…‰θ™«ζ΄Ύη³», ζΏ€ε…‰ζ˜―ε€§η”΅ι˜»οΌŒη”΅ζ˜―ε°η”΅ι˜»γ€‚ ζœ‰ ζ’•ε’¬θ™« ε’Œ 喷吐虫 ε•δ½η±»εž‹γ€‚ -rampant--waspEnemy=ι»„θœ‚θ™«ζ΄Ύη³», εͺζœ‰ε–·εθ™«ε•δ½οΌŒζ―δΈͺε–·εθ™«ιƒ½δΌšεε‡Ίε°εž‹ι»„θœ‚γ€‚ -rampant--spawnerEnemy=产卡虫派系, εͺζœ‰δΊ§ε΅θ™«ε’Œε–·εθ™«δΊ§η”Ÿηš„θ›‹ζ‰θƒ½ε­΅εŒ–ε‡Ίε’¬ε’¬θ™«γ€‚ -rampant--trollEnemy=ε†η”Ÿθ™«ζ΄Ύη³», ι«˜η”Ÿε‘½ζ’ε€οΌŒδΈ»θ¦εΌ±η‚Ήζ˜―η«οΌŒε…Άζ¬‘η‰©η†ζŠ—ζ€§οΌŒηˆ†η‚ΈζŠ—ζ€§γ€‚ -rampant--fastEnemy=ζžι€Ÿθ™«ζ΄Ύη³», η§»εŠ¨ι€ŸεΊ¦ι«˜οΌŒε―Ήηˆ†η‚Έηš„ζŠ΅ζŠ—εŠ›θΎƒε°γ€‚ -rampant--infernoEnemy=εœ°η‹±θ™«ζ΄Ύη³», εͺζœ‰ε–·εθ™«γ€‚δΌšεε‡Ίθƒ½η‡ƒηƒ§δΈ€εˆ‡ηš„ηƒˆζ€§ι…ΈζΆ²γ€‚ ζœ‰ι…ΈζŠ—ε’Œη«ζŠ—οΌŒεΌ±η‚Ήζ˜―ζ―’θ―γ€‚ -rampant--nuclearEnemy=ζ ΈεΌΉθ™«ζ΄Ύη³», εͺζœ‰ζ’•ε’¬θ™«γ€‚εƒεŽŸε­εΌΉδΈ€ζ ·ηˆ†η‚Έηš„θ™«γ€‚ δΈ»θ¦εΌ±η‚Ήζ˜―ηˆ†ε‘εŠ›γ€‚ -rampant--electricEnemy=ι›·η”΅ζ³•ηŽ‹θ™«ζ΄Ύη³», εͺζœ‰ζ’•ε’¬θ™«γ€‚ε…·ζœ‰ηŸ­θ·η¦»ζ”»ε‡»ηš„θ™«οΌŒε―δ»₯ε‡»δΈ­δΈ€ζ‘η›΄ηΊΏδΈŠηš„ε€šδΈͺεžδ½“。 ε€§η”΅ζŠ—οΌŒε‰―ζŠ—ζΏ€ε…‰γ€‚ -rampant--fireEnemy=火焰虫派系, θ€ι…Έε’Œθ€η«γ€‚ -rampant--suicideEnemy=θ‡ͺηˆ†θ™«ζ΄Ύη³», εͺζœ‰ζ’•ε’¬θ™«γ€‚ζ”»ε‡»ζ—ΆδΌšηˆ†η‚Έηš„θ™«ε­γ€‚ ε―Ήζ―’ηš„ζŠ΅ζŠ—εŠ›θΎƒε°οΌŒδΈ»θ¦εΌ±η‚Ήζ˜―ηˆ†η‚Έγ€‚ -rampant--physicalEnemy=ζ‹ι…·θ™«ζ΄Ύη³», εͺζœ‰ζ’•ε’¬θ™«γ€‚ η‰©η†ζŠ—ζ€§εΌΊοΌŒηˆ†η‚ΈζŠ—ζ€§εΌΊοΌŒη”΅ζŠ—εΌ±γ€‚ -rampant--acidEnemy=ι…Έι…Έθ™«ζ΄Ύη³», εΌΊζŠ—ι…ΈοΌŒζ¬‘ζŠ—ζ―’γ€‚ -rampant--energyThiefEnemy=ε·₯ε…΅θ™«ζ΄Ύη³», δΈ»θ¦θ€η”΅οΌŒθ€ζΏ€ε…‰γ€‚ ζ‘§ζ―ε……θƒ½η»“ζž„δΌšδΊ§η”ŸζΆˆθ€—ζ°΄ζ™Άγ€‚ -rampant--poisonEnemy=ηŒ›ζ―’θ™«ζ΄Ύη³», εͺζœ‰ζ’•ε’¬θ™«γ€‚ ζ­»δΊ‘ζ—ΆδΌšη”ŸζˆδΈ€ζœ΅δΊ‘ζ₯治疗虫子幢伀ε³ηŽ©εΆε―Ήθ±‘。 ι«˜ζ―’ζŠ—οΌŒη«ζŠ—γ€‚εΌ±η‚ΉοΌšη”΅οΌŒηˆ†η‚ΈοΌŒζΏ€ε…‰γ€‚ - -rampant--disableCollidingProjectiles=θ™«ε­ηš„εΌΉδΈΈδΈε†δΈŽε…Άδ»–ε’¬δΊΊγ€ζ²™θ™«ζˆ–ε·’η©΄ε‘η”Ÿη’°ζ’žγ€‚ ε…Άδ»–ζ‰€ζœ‰δΈœθ₯Ώδ»η„ΆδΌšδΈŽθ™«ε­ηš„εΌΉδΈΈη›Έζ’žγ€‚ -rampant--enableFullMapScan=ζ­€θΎη½δΌšε―Όθ‡΄ηΌ“ζ…’ζ‰«ζζΈΈζˆεœ°ε›Ύδ»₯ζŸ₯ζ‰Ύεœ¨ factorio δΊ‹δ»Άη³»η»ŸδΉ‹ε€–εˆ›ε»Ίζˆ–ι”€ζ―ηš„εžδ½“。 οΌˆε¦‚ζžœ mod ζ²‘ζœ‰δ½Ώη”¨ script_raised_built ζˆ– script_raised_destroyed 这将导致 ηŒ–η— ζœ€η»ˆδ»δΈŽζΈΈζˆεœ°ε›ΎδΏζŒδΈ€θ‡΄οΌ‰ - -rampant--enableFadeTime=启用淑ε…₯ζ·‘ε‡Ίζ—Άι—΄δ»₯ε‡ε°‘ζˆ–ε’žεŠ εε’¬γ€ε–·ζΊ…γ€ζ²™θ™«γ€εˆ·ζ€ͺη±ε’Œθœ‚ε·’γ€‚ε¦‚ζžœη¦η”¨οΌŒεˆ™δΈδΌšζ›΄ζ”Ήε°Έδ½“ζ—Άι—΄γ€‚ - -rampant--maxNumberOfBuilders=ζ›΄ε€šηš„ε»Ίι€ θ€…ιœ€θ¦ζ›΄ε€šηš„ UPS。 -rampant--maxNumberOfSquads=ζ›΄ε€šηš„ε°η»„ιœ€θ¦ζ›΄ε€šηš„UPS。 -rampant--temperamentRateModifier=ζ”Ήε˜ηŒ–η—modεœ¨ζŽ§εˆΆζ”»ε‡»ε’Œζ‰©εΌ ηš„aiζ°”θ΄¨η»Ÿθ‘δΈ­θΎΎεˆ°ζžη«―ηš„ι€ŸεΊ¦. θΏ™ζ˜―ε’žεŠ ζˆ–ε‡ε°‘ηš„η™Ύεˆ†ζ―”οΌŒ1 η­‰δΊŽ 100%。 - -[description] -rampant--planetHasAwoken=[color=#ee00ff]ηŒ–η—[/color]: [color=#ad13ad]"εŽŸδ½ζ°‘"[/color]εΌ€ε§‹ε―Ήδ½ ηš„ε‡ΊηŽ°εšε‡ΊεεΊ”. -rampant-bobs-nee-newEnemies=Bob之虫子 ζˆ– NEE ε·²ζ£€ζ΅‹εˆ°[color=ad13ad]ηŒ–η—[/color]ηš„ζ–°ζ•ŒδΊΊ,\nθΏ™δΊ› mod δΈ­ηš„ε™¨η‰©δ»η„Άι€‚η”¨δΊŽ [color=ad13ad]ηŒ–η—[/color] ηš„ζ–°ζ•ŒδΊΊγ€‚\n当 [color=ad13ad]ηŒ–η—[/color] ζ–°ζ•ŒδΊΊε―η”¨ζ—ΆοΌŒδΈε†ζ”―ζŒ [color=ad13ad]ηŒ–η—[/color] 明η‘η”Ÿζˆ bob ζˆ– NEE ε•δ½η”Ÿζˆε™¨γ€‚ -rampant--adaptation2DebugMessage=ζ΄Ύη³»ε‘η”ŸδΊ†ε˜εΌ‚οΌŒε› δΈΊδΌ€ε³η±»εž‹ζ˜― __1__. ηŽ°εœ¨ζ΄Ύη³»ε°†δΊ§η”Ÿ __2__ ε’Œ __3__. ζ΄Ύη³»ηͺε˜ __6__ 在 __7__ δΉ‹ε€–. [gps=__4__,__5__] -rampant--adaptation1DebugMessage=ζ΄Ύη³»ε‘η”ŸδΊ†ε˜εΌ‚οΌŒε› δΈΊδΌ€ε³η±»εž‹ζ˜― __1__. ηŽ°εœ¨ζ΄Ύη³»ε°†δΊ§η”Ÿ __2__. ζ΄Ύη³»ηͺε˜ __5__ 在 __6__ δΉ‹ε€–. [gps=__3__,__4__] -rampant--adaptationFrozenDebugMessage=ζ΄Ύη³»ε°†δΈε†ε˜εΌ‚δΈΊζ–°ζ΄Ύη³». [gps=__1__,__2__] -rampant--adaptationResetDebugMessage=ζ΄Ύη³»ηͺε˜ε·²θ’«ι‡η½. 剩余ηͺε˜ __2__ of __3__ . [gps=__1__,__2__] -rampant--laserEnemyName=ζΏ€ε…‰θ™« -rampant--waspEnemyName=ι»„θœ‚θ™« -rampant--spawnerEnemyName=产卡虫 -rampant--trollEnemyName=ζ°ΈεŠ¨θ™« -rampant--fastEnemyName=ζ€₯ι€Ÿθ™« -rampant--infernoEnemyName=εœ°η‹±θ™« -rampant--nuclearEnemyName=ζ ΈεΌΉθ™« -rampant--electricEnemyName=ι›·η”΅ζ³•ηŽ‹θ™« -rampant--fireEnemyName=火焰虫 -rampant--neutralEnemyName=ζ™ι€šθ™« -rampant--suicideEnemyName=θ‡ͺηˆ†θ™« -rampant--physicalEnemyName=ι‡Žθ›θ™« -rampant--acidEnemyName=ι…Έι…Έθ™« -rampant--energyThiefEnemyName=ε·₯ε…΅θ™« -rampant--poisonEnemyName=ηŒ›ζ―’θ™« - -[mod-name] -Rampant=ηŒ–η—ηš„ζ•ŒδΊΊ -[mod-description] -Rampant=使用[color=#ee00ff]"ι‡ε­εŠ›ε­¦"[/color]ζ”ΉθΏ›ζ•ŒδΊΊηš„ζˆ˜ζœ―οΌŒε…θΈθ™«ε­δΎ¦ε―Ÿι˜²εΎ‘γ€ζ’€ι€€γ€ε’žζ΄γ€εε‡»γ€ηͺη ΄γ€ηͺθ’­γ€ι›†η»“ζ­»δΊ‘ε‘ε–Šε’ŒηŽ©εΆη‹©ηŒŽγ€‚ θ™«ε­δ½Ώη”¨ε―ι˜»ζŒ‘ηš„ε£ζ°΄γ€‚ ζ·»εŠ ζ–°ηš„ζ•ŒδΊΊοΌˆι»˜θ€η¦η”¨οΌ‰γ€‚ modι€‰ι‘Ήθœε•δΈ­ζœ‰ιšΎεΊ¦θΎη½γ€‚(ζ±‰εŒ–ε€§ε‘οΌŒ2w倚δΈͺ词村)ζ±‰εŒ–οΌšplexpt QQ:1125094786 diff --git a/Rampant_3.1.2/migrations/rampant-0.17.25.json b/Rampant_3.1.2/migrations/rampant-0.17.25.json deleted file mode 100644 index 7d439208..00000000 --- a/Rampant_3.1.2/migrations/rampant-0.17.25.json +++ /dev/null @@ -1,4205 +0,0 @@ -{ - "entity": [ - - ["neutral-biter-nest-v1-t1-rampant", "neutral-biter-spawner-v1-t1-rampant"], - ["neutral-spitter-nest-v1-t1-rampant", "neutral-spitter-spawner-v1-t1-rampant"], - ["acid-biter-nest-v1-t1-rampant", "acid-biter-spawner-v1-t1-rampant"], - ["acid-spitter-nest-v1-t1-rampant", "acid-spitter-spawner-v1-t1-rampant"], - ["physical-biter-nest-v1-t1-rampant", "physical-biter-spawner-v1-t1-rampant"], - ["electric-biter-nest-v1-t1-rampant", "electric-biter-spawner-v1-t1-rampant"], - ["suicide-biter-nest-v1-t1-rampant", "suicide-biter-spawner-v1-t1-rampant"], - ["nuclear-biter-nest-v1-t1-rampant", "nuclear-biter-spawner-v1-t1-rampant"], - ["fire-biter-nest-v1-t1-rampant", "fire-biter-spawner-v1-t1-rampant"], - ["fire-spitter-nest-v1-t1-rampant", "fire-spitter-spawner-v1-t1-rampant"], - ["interno-spitter-nest-v1-t1-rampant", "interno-spitter-spawner-v1-t1-rampant"], - ["troll-biter-nest-v1-t1-rampant", "troll-biter-spawner-v1-t1-rampant"], - ["troll-spitter-nest-v1-t1-rampant", "troll-spitter-spawner-v1-t1-rampant"], - ["laser-biter-nest-v1-t1-rampant", "laser-biter-spawner-v1-t1-rampant"], - ["laser-spitter-nest-v1-t1-rampant", "laser-spitter-spawner-v1-t1-rampant"], - ["fast-biter-nest-v1-t1-rampant", "fast-biter-spawner-v1-t1-rampant"], - ["fast-spitter-nest-v1-t1-rampant", "fast-spitter-spawner-v1-t1-rampant"], - ["wasp-spitter-nest-v1-t1-rampant", "wasp-spitter-spawner-v1-t1-rampant"], - ["spawner-spitter-nest-v1-t1-rampant", "spawner-spitter-spawner-v1-t1-rampant"], - ["energy-thief-biter-nest-v1-t1-rampant", "energy-thief-biter-spawner-v1-t1-rampant"], - ["poison-biter-nest-v1-t1-rampant", "poison-biter-spawner-v1-t1-rampant"], - ["neutral-biter-nest-v2-t1-rampant", "neutral-biter-spawner-v2-t1-rampant"], - ["neutral-spitter-nest-v2-t1-rampant", "neutral-spitter-spawner-v2-t1-rampant"], - ["acid-biter-nest-v2-t1-rampant", "acid-biter-spawner-v2-t1-rampant"], - ["acid-spitter-nest-v2-t1-rampant", "acid-spitter-spawner-v2-t1-rampant"], - ["physical-biter-nest-v2-t1-rampant", "physical-biter-spawner-v2-t1-rampant"], - ["electric-biter-nest-v2-t1-rampant", "electric-biter-spawner-v2-t1-rampant"], - ["suicide-biter-nest-v2-t1-rampant", "suicide-biter-spawner-v2-t1-rampant"], - ["nuclear-biter-nest-v2-t1-rampant", "nuclear-biter-spawner-v2-t1-rampant"], - ["fire-biter-nest-v2-t1-rampant", "fire-biter-spawner-v2-t1-rampant"], - ["fire-spitter-nest-v2-t1-rampant", "fire-spitter-spawner-v2-t1-rampant"], - ["interno-spitter-nest-v2-t1-rampant", "interno-spitter-spawner-v2-t1-rampant"], - ["troll-biter-nest-v2-t1-rampant", "troll-biter-spawner-v2-t1-rampant"], - ["troll-spitter-nest-v2-t1-rampant", "troll-spitter-spawner-v2-t1-rampant"], - ["laser-biter-nest-v2-t1-rampant", "laser-biter-spawner-v2-t1-rampant"], - ["laser-spitter-nest-v2-t1-rampant", "laser-spitter-spawner-v2-t1-rampant"], - ["fast-biter-nest-v2-t1-rampant", "fast-biter-spawner-v2-t1-rampant"], - ["fast-spitter-nest-v2-t1-rampant", "fast-spitter-spawner-v2-t1-rampant"], - ["wasp-spitter-nest-v2-t1-rampant", "wasp-spitter-spawner-v2-t1-rampant"], - ["spawner-spitter-nest-v2-t1-rampant", "spawner-spitter-spawner-v2-t1-rampant"], - ["energy-thief-biter-nest-v2-t1-rampant", "energy-thief-biter-spawner-v2-t1-rampant"], - ["poison-biter-nest-v2-t1-rampant", "poison-biter-spawner-v2-t1-rampant"], - ["neutral-biter-nest-v3-t1-rampant", "neutral-biter-spawner-v3-t1-rampant"], - ["neutral-spitter-nest-v3-t1-rampant", "neutral-spitter-spawner-v3-t1-rampant"], - ["acid-biter-nest-v3-t1-rampant", "acid-biter-spawner-v3-t1-rampant"], - ["acid-spitter-nest-v3-t1-rampant", "acid-spitter-spawner-v3-t1-rampant"], - ["physical-biter-nest-v3-t1-rampant", "physical-biter-spawner-v3-t1-rampant"], - ["electric-biter-nest-v3-t1-rampant", "electric-biter-spawner-v3-t1-rampant"], - ["suicide-biter-nest-v3-t1-rampant", "suicide-biter-spawner-v3-t1-rampant"], - ["nuclear-biter-nest-v3-t1-rampant", "nuclear-biter-spawner-v3-t1-rampant"], - ["fire-biter-nest-v3-t1-rampant", "fire-biter-spawner-v3-t1-rampant"], - ["fire-spitter-nest-v3-t1-rampant", "fire-spitter-spawner-v3-t1-rampant"], - ["interno-spitter-nest-v3-t1-rampant", "interno-spitter-spawner-v3-t1-rampant"], - ["troll-biter-nest-v3-t1-rampant", "troll-biter-spawner-v3-t1-rampant"], - ["troll-spitter-nest-v3-t1-rampant", "troll-spitter-spawner-v3-t1-rampant"], - ["laser-biter-nest-v3-t1-rampant", "laser-biter-spawner-v3-t1-rampant"], - ["laser-spitter-nest-v3-t1-rampant", "laser-spitter-spawner-v3-t1-rampant"], - ["fast-biter-nest-v3-t1-rampant", "fast-biter-spawner-v3-t1-rampant"], - ["fast-spitter-nest-v3-t1-rampant", "fast-spitter-spawner-v3-t1-rampant"], - ["wasp-spitter-nest-v3-t1-rampant", "wasp-spitter-spawner-v3-t1-rampant"], - ["spawner-spitter-nest-v3-t1-rampant", "spawner-spitter-spawner-v3-t1-rampant"], - ["energy-thief-biter-nest-v3-t1-rampant", "energy-thief-biter-spawner-v3-t1-rampant"], - ["poison-biter-nest-v3-t1-rampant", "poison-biter-spawner-v3-t1-rampant"], - ["neutral-biter-nest-v4-t1-rampant", "neutral-biter-spawner-v4-t1-rampant"], - ["neutral-spitter-nest-v4-t1-rampant", "neutral-spitter-spawner-v4-t1-rampant"], - ["acid-biter-nest-v4-t1-rampant", "acid-biter-spawner-v4-t1-rampant"], - ["acid-spitter-nest-v4-t1-rampant", "acid-spitter-spawner-v4-t1-rampant"], - ["physical-biter-nest-v4-t1-rampant", "physical-biter-spawner-v4-t1-rampant"], - ["electric-biter-nest-v4-t1-rampant", "electric-biter-spawner-v4-t1-rampant"], - ["suicide-biter-nest-v4-t1-rampant", "suicide-biter-spawner-v4-t1-rampant"], - ["nuclear-biter-nest-v4-t1-rampant", "nuclear-biter-spawner-v4-t1-rampant"], - ["fire-biter-nest-v4-t1-rampant", "fire-biter-spawner-v4-t1-rampant"], - ["fire-spitter-nest-v4-t1-rampant", "fire-spitter-spawner-v4-t1-rampant"], - ["interno-spitter-nest-v4-t1-rampant", "interno-spitter-spawner-v4-t1-rampant"], - ["troll-biter-nest-v4-t1-rampant", "troll-biter-spawner-v4-t1-rampant"], - ["troll-spitter-nest-v4-t1-rampant", "troll-spitter-spawner-v4-t1-rampant"], - ["laser-biter-nest-v4-t1-rampant", "laser-biter-spawner-v4-t1-rampant"], - ["laser-spitter-nest-v4-t1-rampant", "laser-spitter-spawner-v4-t1-rampant"], - ["fast-biter-nest-v4-t1-rampant", "fast-biter-spawner-v4-t1-rampant"], - ["fast-spitter-nest-v4-t1-rampant", "fast-spitter-spawner-v4-t1-rampant"], - ["wasp-spitter-nest-v4-t1-rampant", "wasp-spitter-spawner-v4-t1-rampant"], - ["spawner-spitter-nest-v4-t1-rampant", "spawner-spitter-spawner-v4-t1-rampant"], - ["energy-thief-biter-nest-v4-t1-rampant", "energy-thief-biter-spawner-v4-t1-rampant"], - ["poison-biter-nest-v4-t1-rampant", "poison-biter-spawner-v4-t1-rampant"], - ["neutral-biter-nest-v5-t1-rampant", "neutral-biter-spawner-v5-t1-rampant"], - ["neutral-spitter-nest-v5-t1-rampant", "neutral-spitter-spawner-v5-t1-rampant"], - ["acid-biter-nest-v5-t1-rampant", "acid-biter-spawner-v5-t1-rampant"], - ["acid-spitter-nest-v5-t1-rampant", "acid-spitter-spawner-v5-t1-rampant"], - ["physical-biter-nest-v5-t1-rampant", "physical-biter-spawner-v5-t1-rampant"], - ["electric-biter-nest-v5-t1-rampant", "electric-biter-spawner-v5-t1-rampant"], - ["suicide-biter-nest-v5-t1-rampant", "suicide-biter-spawner-v5-t1-rampant"], - ["nuclear-biter-nest-v5-t1-rampant", "nuclear-biter-spawner-v5-t1-rampant"], - ["fire-biter-nest-v5-t1-rampant", "fire-biter-spawner-v5-t1-rampant"], - ["fire-spitter-nest-v5-t1-rampant", "fire-spitter-spawner-v5-t1-rampant"], - ["interno-spitter-nest-v5-t1-rampant", "interno-spitter-spawner-v5-t1-rampant"], - ["troll-biter-nest-v5-t1-rampant", "troll-biter-spawner-v5-t1-rampant"], - ["troll-spitter-nest-v5-t1-rampant", "troll-spitter-spawner-v5-t1-rampant"], - ["laser-biter-nest-v5-t1-rampant", "laser-biter-spawner-v5-t1-rampant"], - ["laser-spitter-nest-v5-t1-rampant", "laser-spitter-spawner-v5-t1-rampant"], - ["fast-biter-nest-v5-t1-rampant", "fast-biter-spawner-v5-t1-rampant"], - ["fast-spitter-nest-v5-t1-rampant", "fast-spitter-spawner-v5-t1-rampant"], - ["wasp-spitter-nest-v5-t1-rampant", "wasp-spitter-spawner-v5-t1-rampant"], - ["spawner-spitter-nest-v5-t1-rampant", "spawner-spitter-spawner-v5-t1-rampant"], - ["energy-thief-biter-nest-v5-t1-rampant", "energy-thief-biter-spawner-v5-t1-rampant"], - ["poison-biter-nest-v5-t1-rampant", "poison-biter-spawner-v5-t1-rampant"], - ["neutral-biter-nest-v6-t1-rampant", "neutral-biter-spawner-v6-t1-rampant"], - ["neutral-spitter-nest-v6-t1-rampant", "neutral-spitter-spawner-v6-t1-rampant"], - ["acid-biter-nest-v6-t1-rampant", "acid-biter-spawner-v6-t1-rampant"], - ["acid-spitter-nest-v6-t1-rampant", "acid-spitter-spawner-v6-t1-rampant"], - ["physical-biter-nest-v6-t1-rampant", "physical-biter-spawner-v6-t1-rampant"], - ["electric-biter-nest-v6-t1-rampant", "electric-biter-spawner-v6-t1-rampant"], - ["suicide-biter-nest-v6-t1-rampant", "suicide-biter-spawner-v6-t1-rampant"], - ["nuclear-biter-nest-v6-t1-rampant", "nuclear-biter-spawner-v6-t1-rampant"], - ["fire-biter-nest-v6-t1-rampant", "fire-biter-spawner-v6-t1-rampant"], - ["fire-spitter-nest-v6-t1-rampant", "fire-spitter-spawner-v6-t1-rampant"], - ["interno-spitter-nest-v6-t1-rampant", "interno-spitter-spawner-v6-t1-rampant"], - ["troll-biter-nest-v6-t1-rampant", "troll-biter-spawner-v6-t1-rampant"], - ["troll-spitter-nest-v6-t1-rampant", "troll-spitter-spawner-v6-t1-rampant"], - ["laser-biter-nest-v6-t1-rampant", "laser-biter-spawner-v6-t1-rampant"], - ["laser-spitter-nest-v6-t1-rampant", "laser-spitter-spawner-v6-t1-rampant"], - ["fast-biter-nest-v6-t1-rampant", "fast-biter-spawner-v6-t1-rampant"], - ["fast-spitter-nest-v6-t1-rampant", "fast-spitter-spawner-v6-t1-rampant"], - ["wasp-spitter-nest-v6-t1-rampant", "wasp-spitter-spawner-v6-t1-rampant"], - ["spawner-spitter-nest-v6-t1-rampant", "spawner-spitter-spawner-v6-t1-rampant"], - ["energy-thief-biter-nest-v6-t1-rampant", "energy-thief-biter-spawner-v6-t1-rampant"], - ["poison-biter-nest-v6-t1-rampant", "poison-biter-spawner-v6-t1-rampant"], - ["neutral-biter-nest-v7-t1-rampant", "neutral-biter-spawner-v7-t1-rampant"], - ["neutral-spitter-nest-v7-t1-rampant", "neutral-spitter-spawner-v7-t1-rampant"], - ["acid-biter-nest-v7-t1-rampant", "acid-biter-spawner-v7-t1-rampant"], - ["acid-spitter-nest-v7-t1-rampant", "acid-spitter-spawner-v7-t1-rampant"], - ["physical-biter-nest-v7-t1-rampant", "physical-biter-spawner-v7-t1-rampant"], - ["electric-biter-nest-v7-t1-rampant", "electric-biter-spawner-v7-t1-rampant"], - ["suicide-biter-nest-v7-t1-rampant", "suicide-biter-spawner-v7-t1-rampant"], - ["nuclear-biter-nest-v7-t1-rampant", "nuclear-biter-spawner-v7-t1-rampant"], - ["fire-biter-nest-v7-t1-rampant", "fire-biter-spawner-v7-t1-rampant"], - ["fire-spitter-nest-v7-t1-rampant", "fire-spitter-spawner-v7-t1-rampant"], - ["interno-spitter-nest-v7-t1-rampant", "interno-spitter-spawner-v7-t1-rampant"], - ["troll-biter-nest-v7-t1-rampant", "troll-biter-spawner-v7-t1-rampant"], - ["troll-spitter-nest-v7-t1-rampant", "troll-spitter-spawner-v7-t1-rampant"], - ["laser-biter-nest-v7-t1-rampant", "laser-biter-spawner-v7-t1-rampant"], - ["laser-spitter-nest-v7-t1-rampant", "laser-spitter-spawner-v7-t1-rampant"], - ["fast-biter-nest-v7-t1-rampant", "fast-biter-spawner-v7-t1-rampant"], - ["fast-spitter-nest-v7-t1-rampant", "fast-spitter-spawner-v7-t1-rampant"], - ["wasp-spitter-nest-v7-t1-rampant", "wasp-spitter-spawner-v7-t1-rampant"], - ["spawner-spitter-nest-v7-t1-rampant", "spawner-spitter-spawner-v7-t1-rampant"], - ["energy-thief-biter-nest-v7-t1-rampant", "energy-thief-biter-spawner-v7-t1-rampant"], - ["poison-biter-nest-v7-t1-rampant", "poison-biter-spawner-v7-t1-rampant"], - ["neutral-biter-nest-v8-t1-rampant", "neutral-biter-spawner-v8-t1-rampant"], - ["neutral-spitter-nest-v8-t1-rampant", "neutral-spitter-spawner-v8-t1-rampant"], - ["acid-biter-nest-v8-t1-rampant", "acid-biter-spawner-v8-t1-rampant"], - ["acid-spitter-nest-v8-t1-rampant", "acid-spitter-spawner-v8-t1-rampant"], - ["physical-biter-nest-v8-t1-rampant", "physical-biter-spawner-v8-t1-rampant"], - ["electric-biter-nest-v8-t1-rampant", "electric-biter-spawner-v8-t1-rampant"], - ["suicide-biter-nest-v8-t1-rampant", "suicide-biter-spawner-v8-t1-rampant"], - ["nuclear-biter-nest-v8-t1-rampant", "nuclear-biter-spawner-v8-t1-rampant"], - ["fire-biter-nest-v8-t1-rampant", "fire-biter-spawner-v8-t1-rampant"], - ["fire-spitter-nest-v8-t1-rampant", "fire-spitter-spawner-v8-t1-rampant"], - ["interno-spitter-nest-v8-t1-rampant", "interno-spitter-spawner-v8-t1-rampant"], - ["troll-biter-nest-v8-t1-rampant", "troll-biter-spawner-v8-t1-rampant"], - ["troll-spitter-nest-v8-t1-rampant", "troll-spitter-spawner-v8-t1-rampant"], - ["laser-biter-nest-v8-t1-rampant", "laser-biter-spawner-v8-t1-rampant"], - ["laser-spitter-nest-v8-t1-rampant", "laser-spitter-spawner-v8-t1-rampant"], - ["fast-biter-nest-v8-t1-rampant", "fast-biter-spawner-v8-t1-rampant"], - ["fast-spitter-nest-v8-t1-rampant", "fast-spitter-spawner-v8-t1-rampant"], - ["wasp-spitter-nest-v8-t1-rampant", "wasp-spitter-spawner-v8-t1-rampant"], - ["spawner-spitter-nest-v8-t1-rampant", "spawner-spitter-spawner-v8-t1-rampant"], - ["energy-thief-biter-nest-v8-t1-rampant", "energy-thief-biter-spawner-v8-t1-rampant"], - ["poison-biter-nest-v8-t1-rampant", "poison-biter-spawner-v8-t1-rampant"], - ["neutral-biter-nest-v9-t1-rampant", "neutral-biter-spawner-v9-t1-rampant"], - ["neutral-spitter-nest-v9-t1-rampant", "neutral-spitter-spawner-v9-t1-rampant"], - ["acid-biter-nest-v9-t1-rampant", "acid-biter-spawner-v9-t1-rampant"], - ["acid-spitter-nest-v9-t1-rampant", "acid-spitter-spawner-v9-t1-rampant"], - ["physical-biter-nest-v9-t1-rampant", "physical-biter-spawner-v9-t1-rampant"], - ["electric-biter-nest-v9-t1-rampant", "electric-biter-spawner-v9-t1-rampant"], - ["suicide-biter-nest-v9-t1-rampant", "suicide-biter-spawner-v9-t1-rampant"], - ["nuclear-biter-nest-v9-t1-rampant", "nuclear-biter-spawner-v9-t1-rampant"], - ["fire-biter-nest-v9-t1-rampant", "fire-biter-spawner-v9-t1-rampant"], - ["fire-spitter-nest-v9-t1-rampant", "fire-spitter-spawner-v9-t1-rampant"], - ["interno-spitter-nest-v9-t1-rampant", "interno-spitter-spawner-v9-t1-rampant"], - ["troll-biter-nest-v9-t1-rampant", "troll-biter-spawner-v9-t1-rampant"], - ["troll-spitter-nest-v9-t1-rampant", "troll-spitter-spawner-v9-t1-rampant"], - ["laser-biter-nest-v9-t1-rampant", "laser-biter-spawner-v9-t1-rampant"], - ["laser-spitter-nest-v9-t1-rampant", "laser-spitter-spawner-v9-t1-rampant"], - ["fast-biter-nest-v9-t1-rampant", "fast-biter-spawner-v9-t1-rampant"], - ["fast-spitter-nest-v9-t1-rampant", "fast-spitter-spawner-v9-t1-rampant"], - ["wasp-spitter-nest-v9-t1-rampant", "wasp-spitter-spawner-v9-t1-rampant"], - ["spawner-spitter-nest-v9-t1-rampant", "spawner-spitter-spawner-v9-t1-rampant"], - ["energy-thief-biter-nest-v9-t1-rampant", "energy-thief-biter-spawner-v9-t1-rampant"], - ["poison-biter-nest-v9-t1-rampant", "poison-biter-spawner-v9-t1-rampant"], - ["neutral-biter-nest-v10-t1-rampant", "neutral-biter-spawner-v10-t1-rampant"], - ["neutral-spitter-nest-v10-t1-rampant", "neutral-spitter-spawner-v10-t1-rampant"], - ["acid-biter-nest-v10-t1-rampant", "acid-biter-spawner-v10-t1-rampant"], - ["acid-spitter-nest-v10-t1-rampant", "acid-spitter-spawner-v10-t1-rampant"], - ["physical-biter-nest-v10-t1-rampant", "physical-biter-spawner-v10-t1-rampant"], - ["electric-biter-nest-v10-t1-rampant", "electric-biter-spawner-v10-t1-rampant"], - ["suicide-biter-nest-v10-t1-rampant", "suicide-biter-spawner-v10-t1-rampant"], - ["nuclear-biter-nest-v10-t1-rampant", "nuclear-biter-spawner-v10-t1-rampant"], - ["fire-biter-nest-v10-t1-rampant", "fire-biter-spawner-v10-t1-rampant"], - ["fire-spitter-nest-v10-t1-rampant", "fire-spitter-spawner-v10-t1-rampant"], - ["interno-spitter-nest-v10-t1-rampant", "interno-spitter-spawner-v10-t1-rampant"], - ["troll-biter-nest-v10-t1-rampant", "troll-biter-spawner-v10-t1-rampant"], - ["troll-spitter-nest-v10-t1-rampant", "troll-spitter-spawner-v10-t1-rampant"], - ["laser-biter-nest-v10-t1-rampant", "laser-biter-spawner-v10-t1-rampant"], - ["laser-spitter-nest-v10-t1-rampant", "laser-spitter-spawner-v10-t1-rampant"], - ["fast-biter-nest-v10-t1-rampant", "fast-biter-spawner-v10-t1-rampant"], - ["fast-spitter-nest-v10-t1-rampant", "fast-spitter-spawner-v10-t1-rampant"], - ["wasp-spitter-nest-v10-t1-rampant", "wasp-spitter-spawner-v10-t1-rampant"], - ["spawner-spitter-nest-v10-t1-rampant", "spawner-spitter-spawner-v10-t1-rampant"], - ["energy-thief-biter-nest-v10-t1-rampant", "energy-thief-biter-spawner-v10-t1-rampant"], - ["poison-biter-nest-v10-t1-rampant", "poison-biter-spawner-v10-t1-rampant"], - ["neutral-biter-nest-v11-t1-rampant", "neutral-biter-spawner-v11-t1-rampant"], - ["neutral-spitter-nest-v11-t1-rampant", "neutral-spitter-spawner-v11-t1-rampant"], - ["acid-biter-nest-v11-t1-rampant", "acid-biter-spawner-v11-t1-rampant"], - ["acid-spitter-nest-v11-t1-rampant", "acid-spitter-spawner-v11-t1-rampant"], - ["physical-biter-nest-v11-t1-rampant", "physical-biter-spawner-v11-t1-rampant"], - ["electric-biter-nest-v11-t1-rampant", "electric-biter-spawner-v11-t1-rampant"], - ["suicide-biter-nest-v11-t1-rampant", "suicide-biter-spawner-v11-t1-rampant"], - ["nuclear-biter-nest-v11-t1-rampant", "nuclear-biter-spawner-v11-t1-rampant"], - ["fire-biter-nest-v11-t1-rampant", "fire-biter-spawner-v11-t1-rampant"], - ["fire-spitter-nest-v11-t1-rampant", "fire-spitter-spawner-v11-t1-rampant"], - ["interno-spitter-nest-v11-t1-rampant", "interno-spitter-spawner-v11-t1-rampant"], - ["troll-biter-nest-v11-t1-rampant", "troll-biter-spawner-v11-t1-rampant"], - ["troll-spitter-nest-v11-t1-rampant", "troll-spitter-spawner-v11-t1-rampant"], - ["laser-biter-nest-v11-t1-rampant", "laser-biter-spawner-v11-t1-rampant"], - ["laser-spitter-nest-v11-t1-rampant", "laser-spitter-spawner-v11-t1-rampant"], - ["fast-biter-nest-v11-t1-rampant", "fast-biter-spawner-v11-t1-rampant"], - ["fast-spitter-nest-v11-t1-rampant", "fast-spitter-spawner-v11-t1-rampant"], - ["wasp-spitter-nest-v11-t1-rampant", "wasp-spitter-spawner-v11-t1-rampant"], - ["spawner-spitter-nest-v11-t1-rampant", "spawner-spitter-spawner-v11-t1-rampant"], - ["energy-thief-biter-nest-v11-t1-rampant", "energy-thief-biter-spawner-v11-t1-rampant"], - ["poison-biter-nest-v11-t1-rampant", "poison-biter-spawner-v11-t1-rampant"], - ["neutral-biter-nest-v12-t1-rampant", "neutral-biter-spawner-v12-t1-rampant"], - ["neutral-spitter-nest-v12-t1-rampant", "neutral-spitter-spawner-v12-t1-rampant"], - ["acid-biter-nest-v12-t1-rampant", "acid-biter-spawner-v12-t1-rampant"], - ["acid-spitter-nest-v12-t1-rampant", "acid-spitter-spawner-v12-t1-rampant"], - ["physical-biter-nest-v12-t1-rampant", "physical-biter-spawner-v12-t1-rampant"], - ["electric-biter-nest-v12-t1-rampant", "electric-biter-spawner-v12-t1-rampant"], - ["suicide-biter-nest-v12-t1-rampant", "suicide-biter-spawner-v12-t1-rampant"], - ["nuclear-biter-nest-v12-t1-rampant", "nuclear-biter-spawner-v12-t1-rampant"], - ["fire-biter-nest-v12-t1-rampant", "fire-biter-spawner-v12-t1-rampant"], - ["fire-spitter-nest-v12-t1-rampant", "fire-spitter-spawner-v12-t1-rampant"], - ["interno-spitter-nest-v12-t1-rampant", "interno-spitter-spawner-v12-t1-rampant"], - ["troll-biter-nest-v12-t1-rampant", "troll-biter-spawner-v12-t1-rampant"], - ["troll-spitter-nest-v12-t1-rampant", "troll-spitter-spawner-v12-t1-rampant"], - ["laser-biter-nest-v12-t1-rampant", "laser-biter-spawner-v12-t1-rampant"], - ["laser-spitter-nest-v12-t1-rampant", "laser-spitter-spawner-v12-t1-rampant"], - ["fast-biter-nest-v12-t1-rampant", "fast-biter-spawner-v12-t1-rampant"], - ["fast-spitter-nest-v12-t1-rampant", "fast-spitter-spawner-v12-t1-rampant"], - ["wasp-spitter-nest-v12-t1-rampant", "wasp-spitter-spawner-v12-t1-rampant"], - ["spawner-spitter-nest-v12-t1-rampant", "spawner-spitter-spawner-v12-t1-rampant"], - ["energy-thief-biter-nest-v12-t1-rampant", "energy-thief-biter-spawner-v12-t1-rampant"], - ["poison-biter-nest-v12-t1-rampant", "poison-biter-spawner-v12-t1-rampant"], - ["neutral-biter-nest-v13-t1-rampant", "neutral-biter-spawner-v13-t1-rampant"], - ["neutral-spitter-nest-v13-t1-rampant", "neutral-spitter-spawner-v13-t1-rampant"], - ["acid-biter-nest-v13-t1-rampant", "acid-biter-spawner-v13-t1-rampant"], - ["acid-spitter-nest-v13-t1-rampant", "acid-spitter-spawner-v13-t1-rampant"], - ["physical-biter-nest-v13-t1-rampant", "physical-biter-spawner-v13-t1-rampant"], - ["electric-biter-nest-v13-t1-rampant", "electric-biter-spawner-v13-t1-rampant"], - ["suicide-biter-nest-v13-t1-rampant", "suicide-biter-spawner-v13-t1-rampant"], - ["nuclear-biter-nest-v13-t1-rampant", "nuclear-biter-spawner-v13-t1-rampant"], - ["fire-biter-nest-v13-t1-rampant", "fire-biter-spawner-v13-t1-rampant"], - ["fire-spitter-nest-v13-t1-rampant", "fire-spitter-spawner-v13-t1-rampant"], - ["interno-spitter-nest-v13-t1-rampant", "interno-spitter-spawner-v13-t1-rampant"], - ["troll-biter-nest-v13-t1-rampant", "troll-biter-spawner-v13-t1-rampant"], - ["troll-spitter-nest-v13-t1-rampant", "troll-spitter-spawner-v13-t1-rampant"], - ["laser-biter-nest-v13-t1-rampant", "laser-biter-spawner-v13-t1-rampant"], - ["laser-spitter-nest-v13-t1-rampant", "laser-spitter-spawner-v13-t1-rampant"], - ["fast-biter-nest-v13-t1-rampant", "fast-biter-spawner-v13-t1-rampant"], - ["fast-spitter-nest-v13-t1-rampant", "fast-spitter-spawner-v13-t1-rampant"], - ["wasp-spitter-nest-v13-t1-rampant", "wasp-spitter-spawner-v13-t1-rampant"], - ["spawner-spitter-nest-v13-t1-rampant", "spawner-spitter-spawner-v13-t1-rampant"], - ["energy-thief-biter-nest-v13-t1-rampant", "energy-thief-biter-spawner-v13-t1-rampant"], - ["poison-biter-nest-v13-t1-rampant", "poison-biter-spawner-v13-t1-rampant"], - ["neutral-biter-nest-v14-t1-rampant", "neutral-biter-spawner-v14-t1-rampant"], - ["neutral-spitter-nest-v14-t1-rampant", "neutral-spitter-spawner-v14-t1-rampant"], - ["acid-biter-nest-v14-t1-rampant", "acid-biter-spawner-v14-t1-rampant"], - ["acid-spitter-nest-v14-t1-rampant", "acid-spitter-spawner-v14-t1-rampant"], - ["physical-biter-nest-v14-t1-rampant", "physical-biter-spawner-v14-t1-rampant"], - ["electric-biter-nest-v14-t1-rampant", "electric-biter-spawner-v14-t1-rampant"], - ["suicide-biter-nest-v14-t1-rampant", "suicide-biter-spawner-v14-t1-rampant"], - ["nuclear-biter-nest-v14-t1-rampant", "nuclear-biter-spawner-v14-t1-rampant"], - ["fire-biter-nest-v14-t1-rampant", "fire-biter-spawner-v14-t1-rampant"], - ["fire-spitter-nest-v14-t1-rampant", "fire-spitter-spawner-v14-t1-rampant"], - ["interno-spitter-nest-v14-t1-rampant", "interno-spitter-spawner-v14-t1-rampant"], - ["troll-biter-nest-v14-t1-rampant", "troll-biter-spawner-v14-t1-rampant"], - ["troll-spitter-nest-v14-t1-rampant", "troll-spitter-spawner-v14-t1-rampant"], - ["laser-biter-nest-v14-t1-rampant", "laser-biter-spawner-v14-t1-rampant"], - ["laser-spitter-nest-v14-t1-rampant", "laser-spitter-spawner-v14-t1-rampant"], - ["fast-biter-nest-v14-t1-rampant", "fast-biter-spawner-v14-t1-rampant"], - ["fast-spitter-nest-v14-t1-rampant", "fast-spitter-spawner-v14-t1-rampant"], - ["wasp-spitter-nest-v14-t1-rampant", "wasp-spitter-spawner-v14-t1-rampant"], - ["spawner-spitter-nest-v14-t1-rampant", "spawner-spitter-spawner-v14-t1-rampant"], - ["energy-thief-biter-nest-v14-t1-rampant", "energy-thief-biter-spawner-v14-t1-rampant"], - ["poison-biter-nest-v14-t1-rampant", "poison-biter-spawner-v14-t1-rampant"], - ["neutral-biter-nest-v15-t1-rampant", "neutral-biter-spawner-v15-t1-rampant"], - ["neutral-spitter-nest-v15-t1-rampant", "neutral-spitter-spawner-v15-t1-rampant"], - ["acid-biter-nest-v15-t1-rampant", "acid-biter-spawner-v15-t1-rampant"], - ["acid-spitter-nest-v15-t1-rampant", "acid-spitter-spawner-v15-t1-rampant"], - ["physical-biter-nest-v15-t1-rampant", "physical-biter-spawner-v15-t1-rampant"], - ["electric-biter-nest-v15-t1-rampant", "electric-biter-spawner-v15-t1-rampant"], - ["suicide-biter-nest-v15-t1-rampant", "suicide-biter-spawner-v15-t1-rampant"], - ["nuclear-biter-nest-v15-t1-rampant", "nuclear-biter-spawner-v15-t1-rampant"], - ["fire-biter-nest-v15-t1-rampant", "fire-biter-spawner-v15-t1-rampant"], - ["fire-spitter-nest-v15-t1-rampant", "fire-spitter-spawner-v15-t1-rampant"], - ["interno-spitter-nest-v15-t1-rampant", "interno-spitter-spawner-v15-t1-rampant"], - ["troll-biter-nest-v15-t1-rampant", "troll-biter-spawner-v15-t1-rampant"], - ["troll-spitter-nest-v15-t1-rampant", "troll-spitter-spawner-v15-t1-rampant"], - ["laser-biter-nest-v15-t1-rampant", "laser-biter-spawner-v15-t1-rampant"], - ["laser-spitter-nest-v15-t1-rampant", "laser-spitter-spawner-v15-t1-rampant"], - ["fast-biter-nest-v15-t1-rampant", "fast-biter-spawner-v15-t1-rampant"], - ["fast-spitter-nest-v15-t1-rampant", "fast-spitter-spawner-v15-t1-rampant"], - ["wasp-spitter-nest-v15-t1-rampant", "wasp-spitter-spawner-v15-t1-rampant"], - ["spawner-spitter-nest-v15-t1-rampant", "spawner-spitter-spawner-v15-t1-rampant"], - ["energy-thief-biter-nest-v15-t1-rampant", "energy-thief-biter-spawner-v15-t1-rampant"], - ["poison-biter-nest-v15-t1-rampant", "poison-biter-spawner-v15-t1-rampant"], - ["neutral-biter-nest-v16-t1-rampant", "neutral-biter-spawner-v16-t1-rampant"], - ["neutral-spitter-nest-v16-t1-rampant", "neutral-spitter-spawner-v16-t1-rampant"], - ["acid-biter-nest-v16-t1-rampant", "acid-biter-spawner-v16-t1-rampant"], - ["acid-spitter-nest-v16-t1-rampant", "acid-spitter-spawner-v16-t1-rampant"], - ["physical-biter-nest-v16-t1-rampant", "physical-biter-spawner-v16-t1-rampant"], - ["electric-biter-nest-v16-t1-rampant", "electric-biter-spawner-v16-t1-rampant"], - ["suicide-biter-nest-v16-t1-rampant", "suicide-biter-spawner-v16-t1-rampant"], - ["nuclear-biter-nest-v16-t1-rampant", "nuclear-biter-spawner-v16-t1-rampant"], - ["fire-biter-nest-v16-t1-rampant", "fire-biter-spawner-v16-t1-rampant"], - ["fire-spitter-nest-v16-t1-rampant", "fire-spitter-spawner-v16-t1-rampant"], - ["interno-spitter-nest-v16-t1-rampant", "interno-spitter-spawner-v16-t1-rampant"], - ["troll-biter-nest-v16-t1-rampant", "troll-biter-spawner-v16-t1-rampant"], - ["troll-spitter-nest-v16-t1-rampant", "troll-spitter-spawner-v16-t1-rampant"], - ["laser-biter-nest-v16-t1-rampant", "laser-biter-spawner-v16-t1-rampant"], - ["laser-spitter-nest-v16-t1-rampant", "laser-spitter-spawner-v16-t1-rampant"], - ["fast-biter-nest-v16-t1-rampant", "fast-biter-spawner-v16-t1-rampant"], - ["fast-spitter-nest-v16-t1-rampant", "fast-spitter-spawner-v16-t1-rampant"], - ["wasp-spitter-nest-v16-t1-rampant", "wasp-spitter-spawner-v16-t1-rampant"], - ["spawner-spitter-nest-v16-t1-rampant", "spawner-spitter-spawner-v16-t1-rampant"], - ["energy-thief-biter-nest-v16-t1-rampant", "energy-thief-biter-spawner-v16-t1-rampant"], - ["poison-biter-nest-v16-t1-rampant", "poison-biter-spawner-v16-t1-rampant"], - ["neutral-biter-nest-v17-t1-rampant", "neutral-biter-spawner-v17-t1-rampant"], - ["neutral-spitter-nest-v17-t1-rampant", "neutral-spitter-spawner-v17-t1-rampant"], - ["acid-biter-nest-v17-t1-rampant", "acid-biter-spawner-v17-t1-rampant"], - ["acid-spitter-nest-v17-t1-rampant", "acid-spitter-spawner-v17-t1-rampant"], - ["physical-biter-nest-v17-t1-rampant", "physical-biter-spawner-v17-t1-rampant"], - ["electric-biter-nest-v17-t1-rampant", "electric-biter-spawner-v17-t1-rampant"], - ["suicide-biter-nest-v17-t1-rampant", "suicide-biter-spawner-v17-t1-rampant"], - ["nuclear-biter-nest-v17-t1-rampant", "nuclear-biter-spawner-v17-t1-rampant"], - ["fire-biter-nest-v17-t1-rampant", "fire-biter-spawner-v17-t1-rampant"], - ["fire-spitter-nest-v17-t1-rampant", "fire-spitter-spawner-v17-t1-rampant"], - ["interno-spitter-nest-v17-t1-rampant", "interno-spitter-spawner-v17-t1-rampant"], - ["troll-biter-nest-v17-t1-rampant", "troll-biter-spawner-v17-t1-rampant"], - ["troll-spitter-nest-v17-t1-rampant", "troll-spitter-spawner-v17-t1-rampant"], - ["laser-biter-nest-v17-t1-rampant", "laser-biter-spawner-v17-t1-rampant"], - ["laser-spitter-nest-v17-t1-rampant", "laser-spitter-spawner-v17-t1-rampant"], - ["fast-biter-nest-v17-t1-rampant", "fast-biter-spawner-v17-t1-rampant"], - ["fast-spitter-nest-v17-t1-rampant", "fast-spitter-spawner-v17-t1-rampant"], - ["wasp-spitter-nest-v17-t1-rampant", "wasp-spitter-spawner-v17-t1-rampant"], - ["spawner-spitter-nest-v17-t1-rampant", "spawner-spitter-spawner-v17-t1-rampant"], - ["energy-thief-biter-nest-v17-t1-rampant", "energy-thief-biter-spawner-v17-t1-rampant"], - ["poison-biter-nest-v17-t1-rampant", "poison-biter-spawner-v17-t1-rampant"], - ["neutral-biter-nest-v18-t1-rampant", "neutral-biter-spawner-v18-t1-rampant"], - ["neutral-spitter-nest-v18-t1-rampant", "neutral-spitter-spawner-v18-t1-rampant"], - ["acid-biter-nest-v18-t1-rampant", "acid-biter-spawner-v18-t1-rampant"], - ["acid-spitter-nest-v18-t1-rampant", "acid-spitter-spawner-v18-t1-rampant"], - ["physical-biter-nest-v18-t1-rampant", "physical-biter-spawner-v18-t1-rampant"], - ["electric-biter-nest-v18-t1-rampant", "electric-biter-spawner-v18-t1-rampant"], - ["suicide-biter-nest-v18-t1-rampant", "suicide-biter-spawner-v18-t1-rampant"], - ["nuclear-biter-nest-v18-t1-rampant", "nuclear-biter-spawner-v18-t1-rampant"], - ["fire-biter-nest-v18-t1-rampant", "fire-biter-spawner-v18-t1-rampant"], - ["fire-spitter-nest-v18-t1-rampant", "fire-spitter-spawner-v18-t1-rampant"], - ["interno-spitter-nest-v18-t1-rampant", "interno-spitter-spawner-v18-t1-rampant"], - ["troll-biter-nest-v18-t1-rampant", "troll-biter-spawner-v18-t1-rampant"], - ["troll-spitter-nest-v18-t1-rampant", "troll-spitter-spawner-v18-t1-rampant"], - ["laser-biter-nest-v18-t1-rampant", "laser-biter-spawner-v18-t1-rampant"], - ["laser-spitter-nest-v18-t1-rampant", "laser-spitter-spawner-v18-t1-rampant"], - ["fast-biter-nest-v18-t1-rampant", "fast-biter-spawner-v18-t1-rampant"], - ["fast-spitter-nest-v18-t1-rampant", "fast-spitter-spawner-v18-t1-rampant"], - ["wasp-spitter-nest-v18-t1-rampant", "wasp-spitter-spawner-v18-t1-rampant"], - ["spawner-spitter-nest-v18-t1-rampant", "spawner-spitter-spawner-v18-t1-rampant"], - ["energy-thief-biter-nest-v18-t1-rampant", "energy-thief-biter-spawner-v18-t1-rampant"], - ["poison-biter-nest-v18-t1-rampant", "poison-biter-spawner-v18-t1-rampant"], - ["neutral-biter-nest-v19-t1-rampant", "neutral-biter-spawner-v19-t1-rampant"], - ["neutral-spitter-nest-v19-t1-rampant", "neutral-spitter-spawner-v19-t1-rampant"], - ["acid-biter-nest-v19-t1-rampant", "acid-biter-spawner-v19-t1-rampant"], - ["acid-spitter-nest-v19-t1-rampant", "acid-spitter-spawner-v19-t1-rampant"], - ["physical-biter-nest-v19-t1-rampant", "physical-biter-spawner-v19-t1-rampant"], - ["electric-biter-nest-v19-t1-rampant", "electric-biter-spawner-v19-t1-rampant"], - ["suicide-biter-nest-v19-t1-rampant", "suicide-biter-spawner-v19-t1-rampant"], - ["nuclear-biter-nest-v19-t1-rampant", "nuclear-biter-spawner-v19-t1-rampant"], - ["fire-biter-nest-v19-t1-rampant", "fire-biter-spawner-v19-t1-rampant"], - ["fire-spitter-nest-v19-t1-rampant", "fire-spitter-spawner-v19-t1-rampant"], - ["interno-spitter-nest-v19-t1-rampant", "interno-spitter-spawner-v19-t1-rampant"], - ["troll-biter-nest-v19-t1-rampant", "troll-biter-spawner-v19-t1-rampant"], - ["troll-spitter-nest-v19-t1-rampant", "troll-spitter-spawner-v19-t1-rampant"], - ["laser-biter-nest-v19-t1-rampant", "laser-biter-spawner-v19-t1-rampant"], - ["laser-spitter-nest-v19-t1-rampant", "laser-spitter-spawner-v19-t1-rampant"], - ["fast-biter-nest-v19-t1-rampant", "fast-biter-spawner-v19-t1-rampant"], - ["fast-spitter-nest-v19-t1-rampant", "fast-spitter-spawner-v19-t1-rampant"], - ["wasp-spitter-nest-v19-t1-rampant", "wasp-spitter-spawner-v19-t1-rampant"], - ["spawner-spitter-nest-v19-t1-rampant", "spawner-spitter-spawner-v19-t1-rampant"], - ["energy-thief-biter-nest-v19-t1-rampant", "energy-thief-biter-spawner-v19-t1-rampant"], - ["poison-biter-nest-v19-t1-rampant", "poison-biter-spawner-v19-t1-rampant"], - ["neutral-biter-nest-v20-t1-rampant", "neutral-biter-spawner-v20-t1-rampant"], - ["neutral-spitter-nest-v20-t1-rampant", "neutral-spitter-spawner-v20-t1-rampant"], - ["acid-biter-nest-v20-t1-rampant", "acid-biter-spawner-v20-t1-rampant"], - ["acid-spitter-nest-v20-t1-rampant", "acid-spitter-spawner-v20-t1-rampant"], - ["physical-biter-nest-v20-t1-rampant", "physical-biter-spawner-v20-t1-rampant"], - ["electric-biter-nest-v20-t1-rampant", "electric-biter-spawner-v20-t1-rampant"], - ["suicide-biter-nest-v20-t1-rampant", "suicide-biter-spawner-v20-t1-rampant"], - ["nuclear-biter-nest-v20-t1-rampant", "nuclear-biter-spawner-v20-t1-rampant"], - ["fire-biter-nest-v20-t1-rampant", "fire-biter-spawner-v20-t1-rampant"], - ["fire-spitter-nest-v20-t1-rampant", "fire-spitter-spawner-v20-t1-rampant"], - ["interno-spitter-nest-v20-t1-rampant", "interno-spitter-spawner-v20-t1-rampant"], - ["troll-biter-nest-v20-t1-rampant", "troll-biter-spawner-v20-t1-rampant"], - ["troll-spitter-nest-v20-t1-rampant", "troll-spitter-spawner-v20-t1-rampant"], - ["laser-biter-nest-v20-t1-rampant", "laser-biter-spawner-v20-t1-rampant"], - ["laser-spitter-nest-v20-t1-rampant", "laser-spitter-spawner-v20-t1-rampant"], - ["fast-biter-nest-v20-t1-rampant", "fast-biter-spawner-v20-t1-rampant"], - ["fast-spitter-nest-v20-t1-rampant", "fast-spitter-spawner-v20-t1-rampant"], - ["wasp-spitter-nest-v20-t1-rampant", "wasp-spitter-spawner-v20-t1-rampant"], - ["spawner-spitter-nest-v20-t1-rampant", "spawner-spitter-spawner-v20-t1-rampant"], - ["energy-thief-biter-nest-v20-t1-rampant", "energy-thief-biter-spawner-v20-t1-rampant"], - ["poison-biter-nest-v20-t1-rampant", "poison-biter-spawner-v20-t1-rampant"], - ["neutral-biter-nest-v1-t2-rampant", "neutral-biter-spawner-v1-t2-rampant"], - ["neutral-spitter-nest-v1-t2-rampant", "neutral-spitter-spawner-v1-t2-rampant"], - ["acid-biter-nest-v1-t2-rampant", "acid-biter-spawner-v1-t2-rampant"], - ["acid-spitter-nest-v1-t2-rampant", "acid-spitter-spawner-v1-t2-rampant"], - ["physical-biter-nest-v1-t2-rampant", "physical-biter-spawner-v1-t2-rampant"], - ["electric-biter-nest-v1-t2-rampant", "electric-biter-spawner-v1-t2-rampant"], - ["suicide-biter-nest-v1-t2-rampant", "suicide-biter-spawner-v1-t2-rampant"], - ["nuclear-biter-nest-v1-t2-rampant", "nuclear-biter-spawner-v1-t2-rampant"], - ["fire-biter-nest-v1-t2-rampant", "fire-biter-spawner-v1-t2-rampant"], - ["fire-spitter-nest-v1-t2-rampant", "fire-spitter-spawner-v1-t2-rampant"], - ["interno-spitter-nest-v1-t2-rampant", "interno-spitter-spawner-v1-t2-rampant"], - ["troll-biter-nest-v1-t2-rampant", "troll-biter-spawner-v1-t2-rampant"], - ["troll-spitter-nest-v1-t2-rampant", "troll-spitter-spawner-v1-t2-rampant"], - ["laser-biter-nest-v1-t2-rampant", "laser-biter-spawner-v1-t2-rampant"], - ["laser-spitter-nest-v1-t2-rampant", "laser-spitter-spawner-v1-t2-rampant"], - ["fast-biter-nest-v1-t2-rampant", "fast-biter-spawner-v1-t2-rampant"], - ["fast-spitter-nest-v1-t2-rampant", "fast-spitter-spawner-v1-t2-rampant"], - ["wasp-spitter-nest-v1-t2-rampant", "wasp-spitter-spawner-v1-t2-rampant"], - ["spawner-spitter-nest-v1-t2-rampant", "spawner-spitter-spawner-v1-t2-rampant"], - ["energy-thief-biter-nest-v1-t2-rampant", "energy-thief-biter-spawner-v1-t2-rampant"], - ["poison-biter-nest-v1-t2-rampant", "poison-biter-spawner-v1-t2-rampant"], - ["neutral-biter-nest-v2-t2-rampant", "neutral-biter-spawner-v2-t2-rampant"], - ["neutral-spitter-nest-v2-t2-rampant", "neutral-spitter-spawner-v2-t2-rampant"], - ["acid-biter-nest-v2-t2-rampant", "acid-biter-spawner-v2-t2-rampant"], - ["acid-spitter-nest-v2-t2-rampant", "acid-spitter-spawner-v2-t2-rampant"], - ["physical-biter-nest-v2-t2-rampant", "physical-biter-spawner-v2-t2-rampant"], - ["electric-biter-nest-v2-t2-rampant", "electric-biter-spawner-v2-t2-rampant"], - ["suicide-biter-nest-v2-t2-rampant", "suicide-biter-spawner-v2-t2-rampant"], - ["nuclear-biter-nest-v2-t2-rampant", "nuclear-biter-spawner-v2-t2-rampant"], - ["fire-biter-nest-v2-t2-rampant", "fire-biter-spawner-v2-t2-rampant"], - ["fire-spitter-nest-v2-t2-rampant", "fire-spitter-spawner-v2-t2-rampant"], - ["interno-spitter-nest-v2-t2-rampant", "interno-spitter-spawner-v2-t2-rampant"], - ["troll-biter-nest-v2-t2-rampant", "troll-biter-spawner-v2-t2-rampant"], - ["troll-spitter-nest-v2-t2-rampant", "troll-spitter-spawner-v2-t2-rampant"], - ["laser-biter-nest-v2-t2-rampant", "laser-biter-spawner-v2-t2-rampant"], - ["laser-spitter-nest-v2-t2-rampant", "laser-spitter-spawner-v2-t2-rampant"], - ["fast-biter-nest-v2-t2-rampant", "fast-biter-spawner-v2-t2-rampant"], - ["fast-spitter-nest-v2-t2-rampant", "fast-spitter-spawner-v2-t2-rampant"], - ["wasp-spitter-nest-v2-t2-rampant", "wasp-spitter-spawner-v2-t2-rampant"], - ["spawner-spitter-nest-v2-t2-rampant", "spawner-spitter-spawner-v2-t2-rampant"], - ["energy-thief-biter-nest-v2-t2-rampant", "energy-thief-biter-spawner-v2-t2-rampant"], - ["poison-biter-nest-v2-t2-rampant", "poison-biter-spawner-v2-t2-rampant"], - ["neutral-biter-nest-v3-t2-rampant", "neutral-biter-spawner-v3-t2-rampant"], - ["neutral-spitter-nest-v3-t2-rampant", "neutral-spitter-spawner-v3-t2-rampant"], - ["acid-biter-nest-v3-t2-rampant", "acid-biter-spawner-v3-t2-rampant"], - ["acid-spitter-nest-v3-t2-rampant", "acid-spitter-spawner-v3-t2-rampant"], - ["physical-biter-nest-v3-t2-rampant", "physical-biter-spawner-v3-t2-rampant"], - ["electric-biter-nest-v3-t2-rampant", "electric-biter-spawner-v3-t2-rampant"], - ["suicide-biter-nest-v3-t2-rampant", "suicide-biter-spawner-v3-t2-rampant"], - ["nuclear-biter-nest-v3-t2-rampant", "nuclear-biter-spawner-v3-t2-rampant"], - ["fire-biter-nest-v3-t2-rampant", "fire-biter-spawner-v3-t2-rampant"], - ["fire-spitter-nest-v3-t2-rampant", "fire-spitter-spawner-v3-t2-rampant"], - ["interno-spitter-nest-v3-t2-rampant", "interno-spitter-spawner-v3-t2-rampant"], - ["troll-biter-nest-v3-t2-rampant", "troll-biter-spawner-v3-t2-rampant"], - ["troll-spitter-nest-v3-t2-rampant", "troll-spitter-spawner-v3-t2-rampant"], - ["laser-biter-nest-v3-t2-rampant", "laser-biter-spawner-v3-t2-rampant"], - ["laser-spitter-nest-v3-t2-rampant", "laser-spitter-spawner-v3-t2-rampant"], - ["fast-biter-nest-v3-t2-rampant", "fast-biter-spawner-v3-t2-rampant"], - ["fast-spitter-nest-v3-t2-rampant", "fast-spitter-spawner-v3-t2-rampant"], - ["wasp-spitter-nest-v3-t2-rampant", "wasp-spitter-spawner-v3-t2-rampant"], - ["spawner-spitter-nest-v3-t2-rampant", "spawner-spitter-spawner-v3-t2-rampant"], - ["energy-thief-biter-nest-v3-t2-rampant", "energy-thief-biter-spawner-v3-t2-rampant"], - ["poison-biter-nest-v3-t2-rampant", "poison-biter-spawner-v3-t2-rampant"], - ["neutral-biter-nest-v4-t2-rampant", "neutral-biter-spawner-v4-t2-rampant"], - ["neutral-spitter-nest-v4-t2-rampant", "neutral-spitter-spawner-v4-t2-rampant"], - ["acid-biter-nest-v4-t2-rampant", "acid-biter-spawner-v4-t2-rampant"], - ["acid-spitter-nest-v4-t2-rampant", "acid-spitter-spawner-v4-t2-rampant"], - ["physical-biter-nest-v4-t2-rampant", "physical-biter-spawner-v4-t2-rampant"], - ["electric-biter-nest-v4-t2-rampant", "electric-biter-spawner-v4-t2-rampant"], - ["suicide-biter-nest-v4-t2-rampant", "suicide-biter-spawner-v4-t2-rampant"], - ["nuclear-biter-nest-v4-t2-rampant", "nuclear-biter-spawner-v4-t2-rampant"], - ["fire-biter-nest-v4-t2-rampant", "fire-biter-spawner-v4-t2-rampant"], - ["fire-spitter-nest-v4-t2-rampant", "fire-spitter-spawner-v4-t2-rampant"], - ["interno-spitter-nest-v4-t2-rampant", "interno-spitter-spawner-v4-t2-rampant"], - ["troll-biter-nest-v4-t2-rampant", "troll-biter-spawner-v4-t2-rampant"], - ["troll-spitter-nest-v4-t2-rampant", "troll-spitter-spawner-v4-t2-rampant"], - ["laser-biter-nest-v4-t2-rampant", "laser-biter-spawner-v4-t2-rampant"], - ["laser-spitter-nest-v4-t2-rampant", "laser-spitter-spawner-v4-t2-rampant"], - ["fast-biter-nest-v4-t2-rampant", "fast-biter-spawner-v4-t2-rampant"], - ["fast-spitter-nest-v4-t2-rampant", "fast-spitter-spawner-v4-t2-rampant"], - ["wasp-spitter-nest-v4-t2-rampant", "wasp-spitter-spawner-v4-t2-rampant"], - ["spawner-spitter-nest-v4-t2-rampant", "spawner-spitter-spawner-v4-t2-rampant"], - ["energy-thief-biter-nest-v4-t2-rampant", "energy-thief-biter-spawner-v4-t2-rampant"], - ["poison-biter-nest-v4-t2-rampant", "poison-biter-spawner-v4-t2-rampant"], - ["neutral-biter-nest-v5-t2-rampant", "neutral-biter-spawner-v5-t2-rampant"], - ["neutral-spitter-nest-v5-t2-rampant", "neutral-spitter-spawner-v5-t2-rampant"], - ["acid-biter-nest-v5-t2-rampant", "acid-biter-spawner-v5-t2-rampant"], - ["acid-spitter-nest-v5-t2-rampant", "acid-spitter-spawner-v5-t2-rampant"], - ["physical-biter-nest-v5-t2-rampant", "physical-biter-spawner-v5-t2-rampant"], - ["electric-biter-nest-v5-t2-rampant", "electric-biter-spawner-v5-t2-rampant"], - ["suicide-biter-nest-v5-t2-rampant", "suicide-biter-spawner-v5-t2-rampant"], - ["nuclear-biter-nest-v5-t2-rampant", "nuclear-biter-spawner-v5-t2-rampant"], - ["fire-biter-nest-v5-t2-rampant", "fire-biter-spawner-v5-t2-rampant"], - ["fire-spitter-nest-v5-t2-rampant", "fire-spitter-spawner-v5-t2-rampant"], - ["interno-spitter-nest-v5-t2-rampant", "interno-spitter-spawner-v5-t2-rampant"], - ["troll-biter-nest-v5-t2-rampant", "troll-biter-spawner-v5-t2-rampant"], - ["troll-spitter-nest-v5-t2-rampant", "troll-spitter-spawner-v5-t2-rampant"], - ["laser-biter-nest-v5-t2-rampant", "laser-biter-spawner-v5-t2-rampant"], - ["laser-spitter-nest-v5-t2-rampant", "laser-spitter-spawner-v5-t2-rampant"], - ["fast-biter-nest-v5-t2-rampant", "fast-biter-spawner-v5-t2-rampant"], - ["fast-spitter-nest-v5-t2-rampant", "fast-spitter-spawner-v5-t2-rampant"], - ["wasp-spitter-nest-v5-t2-rampant", "wasp-spitter-spawner-v5-t2-rampant"], - ["spawner-spitter-nest-v5-t2-rampant", "spawner-spitter-spawner-v5-t2-rampant"], - ["energy-thief-biter-nest-v5-t2-rampant", "energy-thief-biter-spawner-v5-t2-rampant"], - ["poison-biter-nest-v5-t2-rampant", "poison-biter-spawner-v5-t2-rampant"], - ["neutral-biter-nest-v6-t2-rampant", "neutral-biter-spawner-v6-t2-rampant"], - ["neutral-spitter-nest-v6-t2-rampant", "neutral-spitter-spawner-v6-t2-rampant"], - ["acid-biter-nest-v6-t2-rampant", "acid-biter-spawner-v6-t2-rampant"], - ["acid-spitter-nest-v6-t2-rampant", "acid-spitter-spawner-v6-t2-rampant"], - ["physical-biter-nest-v6-t2-rampant", "physical-biter-spawner-v6-t2-rampant"], - ["electric-biter-nest-v6-t2-rampant", "electric-biter-spawner-v6-t2-rampant"], - ["suicide-biter-nest-v6-t2-rampant", "suicide-biter-spawner-v6-t2-rampant"], - ["nuclear-biter-nest-v6-t2-rampant", "nuclear-biter-spawner-v6-t2-rampant"], - ["fire-biter-nest-v6-t2-rampant", "fire-biter-spawner-v6-t2-rampant"], - ["fire-spitter-nest-v6-t2-rampant", "fire-spitter-spawner-v6-t2-rampant"], - ["interno-spitter-nest-v6-t2-rampant", "interno-spitter-spawner-v6-t2-rampant"], - ["troll-biter-nest-v6-t2-rampant", "troll-biter-spawner-v6-t2-rampant"], - ["troll-spitter-nest-v6-t2-rampant", "troll-spitter-spawner-v6-t2-rampant"], - ["laser-biter-nest-v6-t2-rampant", "laser-biter-spawner-v6-t2-rampant"], - ["laser-spitter-nest-v6-t2-rampant", "laser-spitter-spawner-v6-t2-rampant"], - ["fast-biter-nest-v6-t2-rampant", "fast-biter-spawner-v6-t2-rampant"], - ["fast-spitter-nest-v6-t2-rampant", "fast-spitter-spawner-v6-t2-rampant"], - ["wasp-spitter-nest-v6-t2-rampant", "wasp-spitter-spawner-v6-t2-rampant"], - ["spawner-spitter-nest-v6-t2-rampant", "spawner-spitter-spawner-v6-t2-rampant"], - ["energy-thief-biter-nest-v6-t2-rampant", "energy-thief-biter-spawner-v6-t2-rampant"], - ["poison-biter-nest-v6-t2-rampant", "poison-biter-spawner-v6-t2-rampant"], - ["neutral-biter-nest-v7-t2-rampant", "neutral-biter-spawner-v7-t2-rampant"], - ["neutral-spitter-nest-v7-t2-rampant", "neutral-spitter-spawner-v7-t2-rampant"], - ["acid-biter-nest-v7-t2-rampant", "acid-biter-spawner-v7-t2-rampant"], - ["acid-spitter-nest-v7-t2-rampant", "acid-spitter-spawner-v7-t2-rampant"], - ["physical-biter-nest-v7-t2-rampant", "physical-biter-spawner-v7-t2-rampant"], - ["electric-biter-nest-v7-t2-rampant", "electric-biter-spawner-v7-t2-rampant"], - ["suicide-biter-nest-v7-t2-rampant", "suicide-biter-spawner-v7-t2-rampant"], - ["nuclear-biter-nest-v7-t2-rampant", "nuclear-biter-spawner-v7-t2-rampant"], - ["fire-biter-nest-v7-t2-rampant", "fire-biter-spawner-v7-t2-rampant"], - ["fire-spitter-nest-v7-t2-rampant", "fire-spitter-spawner-v7-t2-rampant"], - ["interno-spitter-nest-v7-t2-rampant", "interno-spitter-spawner-v7-t2-rampant"], - ["troll-biter-nest-v7-t2-rampant", "troll-biter-spawner-v7-t2-rampant"], - ["troll-spitter-nest-v7-t2-rampant", "troll-spitter-spawner-v7-t2-rampant"], - ["laser-biter-nest-v7-t2-rampant", "laser-biter-spawner-v7-t2-rampant"], - ["laser-spitter-nest-v7-t2-rampant", "laser-spitter-spawner-v7-t2-rampant"], - ["fast-biter-nest-v7-t2-rampant", "fast-biter-spawner-v7-t2-rampant"], - ["fast-spitter-nest-v7-t2-rampant", "fast-spitter-spawner-v7-t2-rampant"], - ["wasp-spitter-nest-v7-t2-rampant", "wasp-spitter-spawner-v7-t2-rampant"], - ["spawner-spitter-nest-v7-t2-rampant", "spawner-spitter-spawner-v7-t2-rampant"], - ["energy-thief-biter-nest-v7-t2-rampant", "energy-thief-biter-spawner-v7-t2-rampant"], - ["poison-biter-nest-v7-t2-rampant", "poison-biter-spawner-v7-t2-rampant"], - ["neutral-biter-nest-v8-t2-rampant", "neutral-biter-spawner-v8-t2-rampant"], - ["neutral-spitter-nest-v8-t2-rampant", "neutral-spitter-spawner-v8-t2-rampant"], - ["acid-biter-nest-v8-t2-rampant", "acid-biter-spawner-v8-t2-rampant"], - ["acid-spitter-nest-v8-t2-rampant", "acid-spitter-spawner-v8-t2-rampant"], - ["physical-biter-nest-v8-t2-rampant", "physical-biter-spawner-v8-t2-rampant"], - ["electric-biter-nest-v8-t2-rampant", "electric-biter-spawner-v8-t2-rampant"], - ["suicide-biter-nest-v8-t2-rampant", "suicide-biter-spawner-v8-t2-rampant"], - ["nuclear-biter-nest-v8-t2-rampant", "nuclear-biter-spawner-v8-t2-rampant"], - ["fire-biter-nest-v8-t2-rampant", "fire-biter-spawner-v8-t2-rampant"], - ["fire-spitter-nest-v8-t2-rampant", "fire-spitter-spawner-v8-t2-rampant"], - ["interno-spitter-nest-v8-t2-rampant", "interno-spitter-spawner-v8-t2-rampant"], - ["troll-biter-nest-v8-t2-rampant", "troll-biter-spawner-v8-t2-rampant"], - ["troll-spitter-nest-v8-t2-rampant", "troll-spitter-spawner-v8-t2-rampant"], - ["laser-biter-nest-v8-t2-rampant", "laser-biter-spawner-v8-t2-rampant"], - ["laser-spitter-nest-v8-t2-rampant", "laser-spitter-spawner-v8-t2-rampant"], - ["fast-biter-nest-v8-t2-rampant", "fast-biter-spawner-v8-t2-rampant"], - ["fast-spitter-nest-v8-t2-rampant", "fast-spitter-spawner-v8-t2-rampant"], - ["wasp-spitter-nest-v8-t2-rampant", "wasp-spitter-spawner-v8-t2-rampant"], - ["spawner-spitter-nest-v8-t2-rampant", "spawner-spitter-spawner-v8-t2-rampant"], - ["energy-thief-biter-nest-v8-t2-rampant", "energy-thief-biter-spawner-v8-t2-rampant"], - ["poison-biter-nest-v8-t2-rampant", "poison-biter-spawner-v8-t2-rampant"], - ["neutral-biter-nest-v9-t2-rampant", "neutral-biter-spawner-v9-t2-rampant"], - ["neutral-spitter-nest-v9-t2-rampant", "neutral-spitter-spawner-v9-t2-rampant"], - ["acid-biter-nest-v9-t2-rampant", "acid-biter-spawner-v9-t2-rampant"], - ["acid-spitter-nest-v9-t2-rampant", "acid-spitter-spawner-v9-t2-rampant"], - ["physical-biter-nest-v9-t2-rampant", "physical-biter-spawner-v9-t2-rampant"], - ["electric-biter-nest-v9-t2-rampant", "electric-biter-spawner-v9-t2-rampant"], - ["suicide-biter-nest-v9-t2-rampant", "suicide-biter-spawner-v9-t2-rampant"], - ["nuclear-biter-nest-v9-t2-rampant", "nuclear-biter-spawner-v9-t2-rampant"], - ["fire-biter-nest-v9-t2-rampant", "fire-biter-spawner-v9-t2-rampant"], - ["fire-spitter-nest-v9-t2-rampant", "fire-spitter-spawner-v9-t2-rampant"], - ["interno-spitter-nest-v9-t2-rampant", "interno-spitter-spawner-v9-t2-rampant"], - ["troll-biter-nest-v9-t2-rampant", "troll-biter-spawner-v9-t2-rampant"], - ["troll-spitter-nest-v9-t2-rampant", "troll-spitter-spawner-v9-t2-rampant"], - ["laser-biter-nest-v9-t2-rampant", "laser-biter-spawner-v9-t2-rampant"], - ["laser-spitter-nest-v9-t2-rampant", "laser-spitter-spawner-v9-t2-rampant"], - ["fast-biter-nest-v9-t2-rampant", "fast-biter-spawner-v9-t2-rampant"], - ["fast-spitter-nest-v9-t2-rampant", "fast-spitter-spawner-v9-t2-rampant"], - ["wasp-spitter-nest-v9-t2-rampant", "wasp-spitter-spawner-v9-t2-rampant"], - ["spawner-spitter-nest-v9-t2-rampant", "spawner-spitter-spawner-v9-t2-rampant"], - ["energy-thief-biter-nest-v9-t2-rampant", "energy-thief-biter-spawner-v9-t2-rampant"], - ["poison-biter-nest-v9-t2-rampant", "poison-biter-spawner-v9-t2-rampant"], - ["neutral-biter-nest-v10-t2-rampant", "neutral-biter-spawner-v10-t2-rampant"], - ["neutral-spitter-nest-v10-t2-rampant", "neutral-spitter-spawner-v10-t2-rampant"], - ["acid-biter-nest-v10-t2-rampant", "acid-biter-spawner-v10-t2-rampant"], - ["acid-spitter-nest-v10-t2-rampant", "acid-spitter-spawner-v10-t2-rampant"], - ["physical-biter-nest-v10-t2-rampant", "physical-biter-spawner-v10-t2-rampant"], - ["electric-biter-nest-v10-t2-rampant", "electric-biter-spawner-v10-t2-rampant"], - ["suicide-biter-nest-v10-t2-rampant", "suicide-biter-spawner-v10-t2-rampant"], - ["nuclear-biter-nest-v10-t2-rampant", "nuclear-biter-spawner-v10-t2-rampant"], - ["fire-biter-nest-v10-t2-rampant", "fire-biter-spawner-v10-t2-rampant"], - ["fire-spitter-nest-v10-t2-rampant", "fire-spitter-spawner-v10-t2-rampant"], - ["interno-spitter-nest-v10-t2-rampant", "interno-spitter-spawner-v10-t2-rampant"], - ["troll-biter-nest-v10-t2-rampant", "troll-biter-spawner-v10-t2-rampant"], - ["troll-spitter-nest-v10-t2-rampant", "troll-spitter-spawner-v10-t2-rampant"], - ["laser-biter-nest-v10-t2-rampant", "laser-biter-spawner-v10-t2-rampant"], - ["laser-spitter-nest-v10-t2-rampant", "laser-spitter-spawner-v10-t2-rampant"], - ["fast-biter-nest-v10-t2-rampant", "fast-biter-spawner-v10-t2-rampant"], - ["fast-spitter-nest-v10-t2-rampant", "fast-spitter-spawner-v10-t2-rampant"], - ["wasp-spitter-nest-v10-t2-rampant", "wasp-spitter-spawner-v10-t2-rampant"], - ["spawner-spitter-nest-v10-t2-rampant", "spawner-spitter-spawner-v10-t2-rampant"], - ["energy-thief-biter-nest-v10-t2-rampant", "energy-thief-biter-spawner-v10-t2-rampant"], - ["poison-biter-nest-v10-t2-rampant", "poison-biter-spawner-v10-t2-rampant"], - ["neutral-biter-nest-v11-t2-rampant", "neutral-biter-spawner-v11-t2-rampant"], - ["neutral-spitter-nest-v11-t2-rampant", "neutral-spitter-spawner-v11-t2-rampant"], - ["acid-biter-nest-v11-t2-rampant", "acid-biter-spawner-v11-t2-rampant"], - ["acid-spitter-nest-v11-t2-rampant", "acid-spitter-spawner-v11-t2-rampant"], - ["physical-biter-nest-v11-t2-rampant", "physical-biter-spawner-v11-t2-rampant"], - ["electric-biter-nest-v11-t2-rampant", "electric-biter-spawner-v11-t2-rampant"], - ["suicide-biter-nest-v11-t2-rampant", "suicide-biter-spawner-v11-t2-rampant"], - ["nuclear-biter-nest-v11-t2-rampant", "nuclear-biter-spawner-v11-t2-rampant"], - ["fire-biter-nest-v11-t2-rampant", "fire-biter-spawner-v11-t2-rampant"], - ["fire-spitter-nest-v11-t2-rampant", "fire-spitter-spawner-v11-t2-rampant"], - ["interno-spitter-nest-v11-t2-rampant", "interno-spitter-spawner-v11-t2-rampant"], - ["troll-biter-nest-v11-t2-rampant", "troll-biter-spawner-v11-t2-rampant"], - ["troll-spitter-nest-v11-t2-rampant", "troll-spitter-spawner-v11-t2-rampant"], - ["laser-biter-nest-v11-t2-rampant", "laser-biter-spawner-v11-t2-rampant"], - ["laser-spitter-nest-v11-t2-rampant", "laser-spitter-spawner-v11-t2-rampant"], - ["fast-biter-nest-v11-t2-rampant", "fast-biter-spawner-v11-t2-rampant"], - ["fast-spitter-nest-v11-t2-rampant", "fast-spitter-spawner-v11-t2-rampant"], - ["wasp-spitter-nest-v11-t2-rampant", "wasp-spitter-spawner-v11-t2-rampant"], - ["spawner-spitter-nest-v11-t2-rampant", "spawner-spitter-spawner-v11-t2-rampant"], - ["energy-thief-biter-nest-v11-t2-rampant", "energy-thief-biter-spawner-v11-t2-rampant"], - ["poison-biter-nest-v11-t2-rampant", "poison-biter-spawner-v11-t2-rampant"], - ["neutral-biter-nest-v12-t2-rampant", "neutral-biter-spawner-v12-t2-rampant"], - ["neutral-spitter-nest-v12-t2-rampant", "neutral-spitter-spawner-v12-t2-rampant"], - ["acid-biter-nest-v12-t2-rampant", "acid-biter-spawner-v12-t2-rampant"], - ["acid-spitter-nest-v12-t2-rampant", "acid-spitter-spawner-v12-t2-rampant"], - ["physical-biter-nest-v12-t2-rampant", "physical-biter-spawner-v12-t2-rampant"], - ["electric-biter-nest-v12-t2-rampant", "electric-biter-spawner-v12-t2-rampant"], - ["suicide-biter-nest-v12-t2-rampant", "suicide-biter-spawner-v12-t2-rampant"], - ["nuclear-biter-nest-v12-t2-rampant", "nuclear-biter-spawner-v12-t2-rampant"], - ["fire-biter-nest-v12-t2-rampant", "fire-biter-spawner-v12-t2-rampant"], - ["fire-spitter-nest-v12-t2-rampant", "fire-spitter-spawner-v12-t2-rampant"], - ["interno-spitter-nest-v12-t2-rampant", "interno-spitter-spawner-v12-t2-rampant"], - ["troll-biter-nest-v12-t2-rampant", "troll-biter-spawner-v12-t2-rampant"], - ["troll-spitter-nest-v12-t2-rampant", "troll-spitter-spawner-v12-t2-rampant"], - ["laser-biter-nest-v12-t2-rampant", "laser-biter-spawner-v12-t2-rampant"], - ["laser-spitter-nest-v12-t2-rampant", "laser-spitter-spawner-v12-t2-rampant"], - ["fast-biter-nest-v12-t2-rampant", "fast-biter-spawner-v12-t2-rampant"], - ["fast-spitter-nest-v12-t2-rampant", "fast-spitter-spawner-v12-t2-rampant"], - ["wasp-spitter-nest-v12-t2-rampant", "wasp-spitter-spawner-v12-t2-rampant"], - ["spawner-spitter-nest-v12-t2-rampant", "spawner-spitter-spawner-v12-t2-rampant"], - ["energy-thief-biter-nest-v12-t2-rampant", "energy-thief-biter-spawner-v12-t2-rampant"], - ["poison-biter-nest-v12-t2-rampant", "poison-biter-spawner-v12-t2-rampant"], - ["neutral-biter-nest-v13-t2-rampant", "neutral-biter-spawner-v13-t2-rampant"], - ["neutral-spitter-nest-v13-t2-rampant", "neutral-spitter-spawner-v13-t2-rampant"], - ["acid-biter-nest-v13-t2-rampant", "acid-biter-spawner-v13-t2-rampant"], - ["acid-spitter-nest-v13-t2-rampant", "acid-spitter-spawner-v13-t2-rampant"], - ["physical-biter-nest-v13-t2-rampant", "physical-biter-spawner-v13-t2-rampant"], - ["electric-biter-nest-v13-t2-rampant", "electric-biter-spawner-v13-t2-rampant"], - ["suicide-biter-nest-v13-t2-rampant", "suicide-biter-spawner-v13-t2-rampant"], - ["nuclear-biter-nest-v13-t2-rampant", "nuclear-biter-spawner-v13-t2-rampant"], - ["fire-biter-nest-v13-t2-rampant", "fire-biter-spawner-v13-t2-rampant"], - ["fire-spitter-nest-v13-t2-rampant", "fire-spitter-spawner-v13-t2-rampant"], - ["interno-spitter-nest-v13-t2-rampant", "interno-spitter-spawner-v13-t2-rampant"], - ["troll-biter-nest-v13-t2-rampant", "troll-biter-spawner-v13-t2-rampant"], - ["troll-spitter-nest-v13-t2-rampant", "troll-spitter-spawner-v13-t2-rampant"], - ["laser-biter-nest-v13-t2-rampant", "laser-biter-spawner-v13-t2-rampant"], - ["laser-spitter-nest-v13-t2-rampant", "laser-spitter-spawner-v13-t2-rampant"], - ["fast-biter-nest-v13-t2-rampant", "fast-biter-spawner-v13-t2-rampant"], - ["fast-spitter-nest-v13-t2-rampant", "fast-spitter-spawner-v13-t2-rampant"], - ["wasp-spitter-nest-v13-t2-rampant", "wasp-spitter-spawner-v13-t2-rampant"], - ["spawner-spitter-nest-v13-t2-rampant", "spawner-spitter-spawner-v13-t2-rampant"], - ["energy-thief-biter-nest-v13-t2-rampant", "energy-thief-biter-spawner-v13-t2-rampant"], - ["poison-biter-nest-v13-t2-rampant", "poison-biter-spawner-v13-t2-rampant"], - ["neutral-biter-nest-v14-t2-rampant", "neutral-biter-spawner-v14-t2-rampant"], - ["neutral-spitter-nest-v14-t2-rampant", "neutral-spitter-spawner-v14-t2-rampant"], - ["acid-biter-nest-v14-t2-rampant", "acid-biter-spawner-v14-t2-rampant"], - ["acid-spitter-nest-v14-t2-rampant", "acid-spitter-spawner-v14-t2-rampant"], - ["physical-biter-nest-v14-t2-rampant", "physical-biter-spawner-v14-t2-rampant"], - ["electric-biter-nest-v14-t2-rampant", "electric-biter-spawner-v14-t2-rampant"], - ["suicide-biter-nest-v14-t2-rampant", "suicide-biter-spawner-v14-t2-rampant"], - ["nuclear-biter-nest-v14-t2-rampant", "nuclear-biter-spawner-v14-t2-rampant"], - ["fire-biter-nest-v14-t2-rampant", "fire-biter-spawner-v14-t2-rampant"], - ["fire-spitter-nest-v14-t2-rampant", "fire-spitter-spawner-v14-t2-rampant"], - ["interno-spitter-nest-v14-t2-rampant", "interno-spitter-spawner-v14-t2-rampant"], - ["troll-biter-nest-v14-t2-rampant", "troll-biter-spawner-v14-t2-rampant"], - ["troll-spitter-nest-v14-t2-rampant", "troll-spitter-spawner-v14-t2-rampant"], - ["laser-biter-nest-v14-t2-rampant", "laser-biter-spawner-v14-t2-rampant"], - ["laser-spitter-nest-v14-t2-rampant", "laser-spitter-spawner-v14-t2-rampant"], - ["fast-biter-nest-v14-t2-rampant", "fast-biter-spawner-v14-t2-rampant"], - ["fast-spitter-nest-v14-t2-rampant", "fast-spitter-spawner-v14-t2-rampant"], - ["wasp-spitter-nest-v14-t2-rampant", "wasp-spitter-spawner-v14-t2-rampant"], - ["spawner-spitter-nest-v14-t2-rampant", "spawner-spitter-spawner-v14-t2-rampant"], - ["energy-thief-biter-nest-v14-t2-rampant", "energy-thief-biter-spawner-v14-t2-rampant"], - ["poison-biter-nest-v14-t2-rampant", "poison-biter-spawner-v14-t2-rampant"], - ["neutral-biter-nest-v15-t2-rampant", "neutral-biter-spawner-v15-t2-rampant"], - ["neutral-spitter-nest-v15-t2-rampant", "neutral-spitter-spawner-v15-t2-rampant"], - ["acid-biter-nest-v15-t2-rampant", "acid-biter-spawner-v15-t2-rampant"], - ["acid-spitter-nest-v15-t2-rampant", "acid-spitter-spawner-v15-t2-rampant"], - ["physical-biter-nest-v15-t2-rampant", "physical-biter-spawner-v15-t2-rampant"], - ["electric-biter-nest-v15-t2-rampant", "electric-biter-spawner-v15-t2-rampant"], - ["suicide-biter-nest-v15-t2-rampant", "suicide-biter-spawner-v15-t2-rampant"], - ["nuclear-biter-nest-v15-t2-rampant", "nuclear-biter-spawner-v15-t2-rampant"], - ["fire-biter-nest-v15-t2-rampant", "fire-biter-spawner-v15-t2-rampant"], - ["fire-spitter-nest-v15-t2-rampant", "fire-spitter-spawner-v15-t2-rampant"], - ["interno-spitter-nest-v15-t2-rampant", "interno-spitter-spawner-v15-t2-rampant"], - ["troll-biter-nest-v15-t2-rampant", "troll-biter-spawner-v15-t2-rampant"], - ["troll-spitter-nest-v15-t2-rampant", "troll-spitter-spawner-v15-t2-rampant"], - ["laser-biter-nest-v15-t2-rampant", "laser-biter-spawner-v15-t2-rampant"], - ["laser-spitter-nest-v15-t2-rampant", "laser-spitter-spawner-v15-t2-rampant"], - ["fast-biter-nest-v15-t2-rampant", "fast-biter-spawner-v15-t2-rampant"], - ["fast-spitter-nest-v15-t2-rampant", "fast-spitter-spawner-v15-t2-rampant"], - ["wasp-spitter-nest-v15-t2-rampant", "wasp-spitter-spawner-v15-t2-rampant"], - ["spawner-spitter-nest-v15-t2-rampant", "spawner-spitter-spawner-v15-t2-rampant"], - ["energy-thief-biter-nest-v15-t2-rampant", "energy-thief-biter-spawner-v15-t2-rampant"], - ["poison-biter-nest-v15-t2-rampant", "poison-biter-spawner-v15-t2-rampant"], - ["neutral-biter-nest-v16-t2-rampant", "neutral-biter-spawner-v16-t2-rampant"], - ["neutral-spitter-nest-v16-t2-rampant", "neutral-spitter-spawner-v16-t2-rampant"], - ["acid-biter-nest-v16-t2-rampant", "acid-biter-spawner-v16-t2-rampant"], - ["acid-spitter-nest-v16-t2-rampant", "acid-spitter-spawner-v16-t2-rampant"], - ["physical-biter-nest-v16-t2-rampant", "physical-biter-spawner-v16-t2-rampant"], - ["electric-biter-nest-v16-t2-rampant", "electric-biter-spawner-v16-t2-rampant"], - ["suicide-biter-nest-v16-t2-rampant", "suicide-biter-spawner-v16-t2-rampant"], - ["nuclear-biter-nest-v16-t2-rampant", "nuclear-biter-spawner-v16-t2-rampant"], - ["fire-biter-nest-v16-t2-rampant", "fire-biter-spawner-v16-t2-rampant"], - ["fire-spitter-nest-v16-t2-rampant", "fire-spitter-spawner-v16-t2-rampant"], - ["interno-spitter-nest-v16-t2-rampant", "interno-spitter-spawner-v16-t2-rampant"], - ["troll-biter-nest-v16-t2-rampant", "troll-biter-spawner-v16-t2-rampant"], - ["troll-spitter-nest-v16-t2-rampant", "troll-spitter-spawner-v16-t2-rampant"], - ["laser-biter-nest-v16-t2-rampant", "laser-biter-spawner-v16-t2-rampant"], - ["laser-spitter-nest-v16-t2-rampant", "laser-spitter-spawner-v16-t2-rampant"], - ["fast-biter-nest-v16-t2-rampant", "fast-biter-spawner-v16-t2-rampant"], - ["fast-spitter-nest-v16-t2-rampant", "fast-spitter-spawner-v16-t2-rampant"], - ["wasp-spitter-nest-v16-t2-rampant", "wasp-spitter-spawner-v16-t2-rampant"], - ["spawner-spitter-nest-v16-t2-rampant", "spawner-spitter-spawner-v16-t2-rampant"], - ["energy-thief-biter-nest-v16-t2-rampant", "energy-thief-biter-spawner-v16-t2-rampant"], - ["poison-biter-nest-v16-t2-rampant", "poison-biter-spawner-v16-t2-rampant"], - ["neutral-biter-nest-v17-t2-rampant", "neutral-biter-spawner-v17-t2-rampant"], - ["neutral-spitter-nest-v17-t2-rampant", "neutral-spitter-spawner-v17-t2-rampant"], - ["acid-biter-nest-v17-t2-rampant", "acid-biter-spawner-v17-t2-rampant"], - ["acid-spitter-nest-v17-t2-rampant", "acid-spitter-spawner-v17-t2-rampant"], - ["physical-biter-nest-v17-t2-rampant", "physical-biter-spawner-v17-t2-rampant"], - ["electric-biter-nest-v17-t2-rampant", "electric-biter-spawner-v17-t2-rampant"], - ["suicide-biter-nest-v17-t2-rampant", "suicide-biter-spawner-v17-t2-rampant"], - ["nuclear-biter-nest-v17-t2-rampant", "nuclear-biter-spawner-v17-t2-rampant"], - ["fire-biter-nest-v17-t2-rampant", "fire-biter-spawner-v17-t2-rampant"], - ["fire-spitter-nest-v17-t2-rampant", "fire-spitter-spawner-v17-t2-rampant"], - ["interno-spitter-nest-v17-t2-rampant", "interno-spitter-spawner-v17-t2-rampant"], - ["troll-biter-nest-v17-t2-rampant", "troll-biter-spawner-v17-t2-rampant"], - ["troll-spitter-nest-v17-t2-rampant", "troll-spitter-spawner-v17-t2-rampant"], - ["laser-biter-nest-v17-t2-rampant", "laser-biter-spawner-v17-t2-rampant"], - ["laser-spitter-nest-v17-t2-rampant", "laser-spitter-spawner-v17-t2-rampant"], - ["fast-biter-nest-v17-t2-rampant", "fast-biter-spawner-v17-t2-rampant"], - ["fast-spitter-nest-v17-t2-rampant", "fast-spitter-spawner-v17-t2-rampant"], - ["wasp-spitter-nest-v17-t2-rampant", "wasp-spitter-spawner-v17-t2-rampant"], - ["spawner-spitter-nest-v17-t2-rampant", "spawner-spitter-spawner-v17-t2-rampant"], - ["energy-thief-biter-nest-v17-t2-rampant", "energy-thief-biter-spawner-v17-t2-rampant"], - ["poison-biter-nest-v17-t2-rampant", "poison-biter-spawner-v17-t2-rampant"], - ["neutral-biter-nest-v18-t2-rampant", "neutral-biter-spawner-v18-t2-rampant"], - ["neutral-spitter-nest-v18-t2-rampant", "neutral-spitter-spawner-v18-t2-rampant"], - ["acid-biter-nest-v18-t2-rampant", "acid-biter-spawner-v18-t2-rampant"], - ["acid-spitter-nest-v18-t2-rampant", "acid-spitter-spawner-v18-t2-rampant"], - ["physical-biter-nest-v18-t2-rampant", "physical-biter-spawner-v18-t2-rampant"], - ["electric-biter-nest-v18-t2-rampant", "electric-biter-spawner-v18-t2-rampant"], - ["suicide-biter-nest-v18-t2-rampant", "suicide-biter-spawner-v18-t2-rampant"], - ["nuclear-biter-nest-v18-t2-rampant", "nuclear-biter-spawner-v18-t2-rampant"], - ["fire-biter-nest-v18-t2-rampant", "fire-biter-spawner-v18-t2-rampant"], - ["fire-spitter-nest-v18-t2-rampant", "fire-spitter-spawner-v18-t2-rampant"], - ["interno-spitter-nest-v18-t2-rampant", "interno-spitter-spawner-v18-t2-rampant"], - ["troll-biter-nest-v18-t2-rampant", "troll-biter-spawner-v18-t2-rampant"], - ["troll-spitter-nest-v18-t2-rampant", "troll-spitter-spawner-v18-t2-rampant"], - ["laser-biter-nest-v18-t2-rampant", "laser-biter-spawner-v18-t2-rampant"], - ["laser-spitter-nest-v18-t2-rampant", "laser-spitter-spawner-v18-t2-rampant"], - ["fast-biter-nest-v18-t2-rampant", "fast-biter-spawner-v18-t2-rampant"], - ["fast-spitter-nest-v18-t2-rampant", "fast-spitter-spawner-v18-t2-rampant"], - ["wasp-spitter-nest-v18-t2-rampant", "wasp-spitter-spawner-v18-t2-rampant"], - ["spawner-spitter-nest-v18-t2-rampant", "spawner-spitter-spawner-v18-t2-rampant"], - ["energy-thief-biter-nest-v18-t2-rampant", "energy-thief-biter-spawner-v18-t2-rampant"], - ["poison-biter-nest-v18-t2-rampant", "poison-biter-spawner-v18-t2-rampant"], - ["neutral-biter-nest-v19-t2-rampant", "neutral-biter-spawner-v19-t2-rampant"], - ["neutral-spitter-nest-v19-t2-rampant", "neutral-spitter-spawner-v19-t2-rampant"], - ["acid-biter-nest-v19-t2-rampant", "acid-biter-spawner-v19-t2-rampant"], - ["acid-spitter-nest-v19-t2-rampant", "acid-spitter-spawner-v19-t2-rampant"], - ["physical-biter-nest-v19-t2-rampant", "physical-biter-spawner-v19-t2-rampant"], - ["electric-biter-nest-v19-t2-rampant", "electric-biter-spawner-v19-t2-rampant"], - ["suicide-biter-nest-v19-t2-rampant", "suicide-biter-spawner-v19-t2-rampant"], - ["nuclear-biter-nest-v19-t2-rampant", "nuclear-biter-spawner-v19-t2-rampant"], - ["fire-biter-nest-v19-t2-rampant", "fire-biter-spawner-v19-t2-rampant"], - ["fire-spitter-nest-v19-t2-rampant", "fire-spitter-spawner-v19-t2-rampant"], - ["interno-spitter-nest-v19-t2-rampant", "interno-spitter-spawner-v19-t2-rampant"], - ["troll-biter-nest-v19-t2-rampant", "troll-biter-spawner-v19-t2-rampant"], - ["troll-spitter-nest-v19-t2-rampant", "troll-spitter-spawner-v19-t2-rampant"], - ["laser-biter-nest-v19-t2-rampant", "laser-biter-spawner-v19-t2-rampant"], - ["laser-spitter-nest-v19-t2-rampant", "laser-spitter-spawner-v19-t2-rampant"], - ["fast-biter-nest-v19-t2-rampant", "fast-biter-spawner-v19-t2-rampant"], - ["fast-spitter-nest-v19-t2-rampant", "fast-spitter-spawner-v19-t2-rampant"], - ["wasp-spitter-nest-v19-t2-rampant", "wasp-spitter-spawner-v19-t2-rampant"], - ["spawner-spitter-nest-v19-t2-rampant", "spawner-spitter-spawner-v19-t2-rampant"], - ["energy-thief-biter-nest-v19-t2-rampant", "energy-thief-biter-spawner-v19-t2-rampant"], - ["poison-biter-nest-v19-t2-rampant", "poison-biter-spawner-v19-t2-rampant"], - ["neutral-biter-nest-v20-t2-rampant", "neutral-biter-spawner-v20-t2-rampant"], - ["neutral-spitter-nest-v20-t2-rampant", "neutral-spitter-spawner-v20-t2-rampant"], - ["acid-biter-nest-v20-t2-rampant", "acid-biter-spawner-v20-t2-rampant"], - ["acid-spitter-nest-v20-t2-rampant", "acid-spitter-spawner-v20-t2-rampant"], - ["physical-biter-nest-v20-t2-rampant", "physical-biter-spawner-v20-t2-rampant"], - ["electric-biter-nest-v20-t2-rampant", "electric-biter-spawner-v20-t2-rampant"], - ["suicide-biter-nest-v20-t2-rampant", "suicide-biter-spawner-v20-t2-rampant"], - ["nuclear-biter-nest-v20-t2-rampant", "nuclear-biter-spawner-v20-t2-rampant"], - ["fire-biter-nest-v20-t2-rampant", "fire-biter-spawner-v20-t2-rampant"], - ["fire-spitter-nest-v20-t2-rampant", "fire-spitter-spawner-v20-t2-rampant"], - ["interno-spitter-nest-v20-t2-rampant", "interno-spitter-spawner-v20-t2-rampant"], - ["troll-biter-nest-v20-t2-rampant", "troll-biter-spawner-v20-t2-rampant"], - ["troll-spitter-nest-v20-t2-rampant", "troll-spitter-spawner-v20-t2-rampant"], - ["laser-biter-nest-v20-t2-rampant", "laser-biter-spawner-v20-t2-rampant"], - ["laser-spitter-nest-v20-t2-rampant", "laser-spitter-spawner-v20-t2-rampant"], - ["fast-biter-nest-v20-t2-rampant", "fast-biter-spawner-v20-t2-rampant"], - ["fast-spitter-nest-v20-t2-rampant", "fast-spitter-spawner-v20-t2-rampant"], - ["wasp-spitter-nest-v20-t2-rampant", "wasp-spitter-spawner-v20-t2-rampant"], - ["spawner-spitter-nest-v20-t2-rampant", "spawner-spitter-spawner-v20-t2-rampant"], - ["energy-thief-biter-nest-v20-t2-rampant", "energy-thief-biter-spawner-v20-t2-rampant"], - ["poison-biter-nest-v20-t2-rampant", "poison-biter-spawner-v20-t2-rampant"], - ["neutral-biter-nest-v1-t3-rampant", "neutral-biter-spawner-v1-t3-rampant"], - ["neutral-spitter-nest-v1-t3-rampant", "neutral-spitter-spawner-v1-t3-rampant"], - ["acid-biter-nest-v1-t3-rampant", "acid-biter-spawner-v1-t3-rampant"], - ["acid-spitter-nest-v1-t3-rampant", "acid-spitter-spawner-v1-t3-rampant"], - ["physical-biter-nest-v1-t3-rampant", "physical-biter-spawner-v1-t3-rampant"], - ["electric-biter-nest-v1-t3-rampant", "electric-biter-spawner-v1-t3-rampant"], - ["suicide-biter-nest-v1-t3-rampant", "suicide-biter-spawner-v1-t3-rampant"], - ["nuclear-biter-nest-v1-t3-rampant", "nuclear-biter-spawner-v1-t3-rampant"], - ["fire-biter-nest-v1-t3-rampant", "fire-biter-spawner-v1-t3-rampant"], - ["fire-spitter-nest-v1-t3-rampant", "fire-spitter-spawner-v1-t3-rampant"], - ["interno-spitter-nest-v1-t3-rampant", "interno-spitter-spawner-v1-t3-rampant"], - ["troll-biter-nest-v1-t3-rampant", "troll-biter-spawner-v1-t3-rampant"], - ["troll-spitter-nest-v1-t3-rampant", "troll-spitter-spawner-v1-t3-rampant"], - ["laser-biter-nest-v1-t3-rampant", "laser-biter-spawner-v1-t3-rampant"], - ["laser-spitter-nest-v1-t3-rampant", "laser-spitter-spawner-v1-t3-rampant"], - ["fast-biter-nest-v1-t3-rampant", "fast-biter-spawner-v1-t3-rampant"], - ["fast-spitter-nest-v1-t3-rampant", "fast-spitter-spawner-v1-t3-rampant"], - ["wasp-spitter-nest-v1-t3-rampant", "wasp-spitter-spawner-v1-t3-rampant"], - ["spawner-spitter-nest-v1-t3-rampant", "spawner-spitter-spawner-v1-t3-rampant"], - ["energy-thief-biter-nest-v1-t3-rampant", "energy-thief-biter-spawner-v1-t3-rampant"], - ["poison-biter-nest-v1-t3-rampant", "poison-biter-spawner-v1-t3-rampant"], - ["neutral-biter-nest-v2-t3-rampant", "neutral-biter-spawner-v2-t3-rampant"], - ["neutral-spitter-nest-v2-t3-rampant", "neutral-spitter-spawner-v2-t3-rampant"], - ["acid-biter-nest-v2-t3-rampant", "acid-biter-spawner-v2-t3-rampant"], - ["acid-spitter-nest-v2-t3-rampant", "acid-spitter-spawner-v2-t3-rampant"], - ["physical-biter-nest-v2-t3-rampant", "physical-biter-spawner-v2-t3-rampant"], - ["electric-biter-nest-v2-t3-rampant", "electric-biter-spawner-v2-t3-rampant"], - ["suicide-biter-nest-v2-t3-rampant", "suicide-biter-spawner-v2-t3-rampant"], - ["nuclear-biter-nest-v2-t3-rampant", "nuclear-biter-spawner-v2-t3-rampant"], - ["fire-biter-nest-v2-t3-rampant", "fire-biter-spawner-v2-t3-rampant"], - ["fire-spitter-nest-v2-t3-rampant", "fire-spitter-spawner-v2-t3-rampant"], - ["interno-spitter-nest-v2-t3-rampant", "interno-spitter-spawner-v2-t3-rampant"], - ["troll-biter-nest-v2-t3-rampant", "troll-biter-spawner-v2-t3-rampant"], - ["troll-spitter-nest-v2-t3-rampant", "troll-spitter-spawner-v2-t3-rampant"], - ["laser-biter-nest-v2-t3-rampant", "laser-biter-spawner-v2-t3-rampant"], - ["laser-spitter-nest-v2-t3-rampant", "laser-spitter-spawner-v2-t3-rampant"], - ["fast-biter-nest-v2-t3-rampant", "fast-biter-spawner-v2-t3-rampant"], - ["fast-spitter-nest-v2-t3-rampant", "fast-spitter-spawner-v2-t3-rampant"], - ["wasp-spitter-nest-v2-t3-rampant", "wasp-spitter-spawner-v2-t3-rampant"], - ["spawner-spitter-nest-v2-t3-rampant", "spawner-spitter-spawner-v2-t3-rampant"], - ["energy-thief-biter-nest-v2-t3-rampant", "energy-thief-biter-spawner-v2-t3-rampant"], - ["poison-biter-nest-v2-t3-rampant", "poison-biter-spawner-v2-t3-rampant"], - ["neutral-biter-nest-v3-t3-rampant", "neutral-biter-spawner-v3-t3-rampant"], - ["neutral-spitter-nest-v3-t3-rampant", "neutral-spitter-spawner-v3-t3-rampant"], - ["acid-biter-nest-v3-t3-rampant", "acid-biter-spawner-v3-t3-rampant"], - ["acid-spitter-nest-v3-t3-rampant", "acid-spitter-spawner-v3-t3-rampant"], - ["physical-biter-nest-v3-t3-rampant", "physical-biter-spawner-v3-t3-rampant"], - ["electric-biter-nest-v3-t3-rampant", "electric-biter-spawner-v3-t3-rampant"], - ["suicide-biter-nest-v3-t3-rampant", "suicide-biter-spawner-v3-t3-rampant"], - ["nuclear-biter-nest-v3-t3-rampant", "nuclear-biter-spawner-v3-t3-rampant"], - ["fire-biter-nest-v3-t3-rampant", "fire-biter-spawner-v3-t3-rampant"], - ["fire-spitter-nest-v3-t3-rampant", "fire-spitter-spawner-v3-t3-rampant"], - ["interno-spitter-nest-v3-t3-rampant", "interno-spitter-spawner-v3-t3-rampant"], - ["troll-biter-nest-v3-t3-rampant", "troll-biter-spawner-v3-t3-rampant"], - ["troll-spitter-nest-v3-t3-rampant", "troll-spitter-spawner-v3-t3-rampant"], - ["laser-biter-nest-v3-t3-rampant", "laser-biter-spawner-v3-t3-rampant"], - ["laser-spitter-nest-v3-t3-rampant", "laser-spitter-spawner-v3-t3-rampant"], - ["fast-biter-nest-v3-t3-rampant", "fast-biter-spawner-v3-t3-rampant"], - ["fast-spitter-nest-v3-t3-rampant", "fast-spitter-spawner-v3-t3-rampant"], - ["wasp-spitter-nest-v3-t3-rampant", "wasp-spitter-spawner-v3-t3-rampant"], - ["spawner-spitter-nest-v3-t3-rampant", "spawner-spitter-spawner-v3-t3-rampant"], - ["energy-thief-biter-nest-v3-t3-rampant", "energy-thief-biter-spawner-v3-t3-rampant"], - ["poison-biter-nest-v3-t3-rampant", "poison-biter-spawner-v3-t3-rampant"], - ["neutral-biter-nest-v4-t3-rampant", "neutral-biter-spawner-v4-t3-rampant"], - ["neutral-spitter-nest-v4-t3-rampant", "neutral-spitter-spawner-v4-t3-rampant"], - ["acid-biter-nest-v4-t3-rampant", "acid-biter-spawner-v4-t3-rampant"], - ["acid-spitter-nest-v4-t3-rampant", "acid-spitter-spawner-v4-t3-rampant"], - ["physical-biter-nest-v4-t3-rampant", "physical-biter-spawner-v4-t3-rampant"], - ["electric-biter-nest-v4-t3-rampant", "electric-biter-spawner-v4-t3-rampant"], - ["suicide-biter-nest-v4-t3-rampant", "suicide-biter-spawner-v4-t3-rampant"], - ["nuclear-biter-nest-v4-t3-rampant", "nuclear-biter-spawner-v4-t3-rampant"], - ["fire-biter-nest-v4-t3-rampant", "fire-biter-spawner-v4-t3-rampant"], - ["fire-spitter-nest-v4-t3-rampant", "fire-spitter-spawner-v4-t3-rampant"], - ["interno-spitter-nest-v4-t3-rampant", "interno-spitter-spawner-v4-t3-rampant"], - ["troll-biter-nest-v4-t3-rampant", "troll-biter-spawner-v4-t3-rampant"], - ["troll-spitter-nest-v4-t3-rampant", "troll-spitter-spawner-v4-t3-rampant"], - ["laser-biter-nest-v4-t3-rampant", "laser-biter-spawner-v4-t3-rampant"], - ["laser-spitter-nest-v4-t3-rampant", "laser-spitter-spawner-v4-t3-rampant"], - ["fast-biter-nest-v4-t3-rampant", "fast-biter-spawner-v4-t3-rampant"], - ["fast-spitter-nest-v4-t3-rampant", "fast-spitter-spawner-v4-t3-rampant"], - ["wasp-spitter-nest-v4-t3-rampant", "wasp-spitter-spawner-v4-t3-rampant"], - ["spawner-spitter-nest-v4-t3-rampant", "spawner-spitter-spawner-v4-t3-rampant"], - ["energy-thief-biter-nest-v4-t3-rampant", "energy-thief-biter-spawner-v4-t3-rampant"], - ["poison-biter-nest-v4-t3-rampant", "poison-biter-spawner-v4-t3-rampant"], - ["neutral-biter-nest-v5-t3-rampant", "neutral-biter-spawner-v5-t3-rampant"], - ["neutral-spitter-nest-v5-t3-rampant", "neutral-spitter-spawner-v5-t3-rampant"], - ["acid-biter-nest-v5-t3-rampant", "acid-biter-spawner-v5-t3-rampant"], - ["acid-spitter-nest-v5-t3-rampant", "acid-spitter-spawner-v5-t3-rampant"], - ["physical-biter-nest-v5-t3-rampant", "physical-biter-spawner-v5-t3-rampant"], - ["electric-biter-nest-v5-t3-rampant", "electric-biter-spawner-v5-t3-rampant"], - ["suicide-biter-nest-v5-t3-rampant", "suicide-biter-spawner-v5-t3-rampant"], - ["nuclear-biter-nest-v5-t3-rampant", "nuclear-biter-spawner-v5-t3-rampant"], - ["fire-biter-nest-v5-t3-rampant", "fire-biter-spawner-v5-t3-rampant"], - ["fire-spitter-nest-v5-t3-rampant", "fire-spitter-spawner-v5-t3-rampant"], - ["interno-spitter-nest-v5-t3-rampant", "interno-spitter-spawner-v5-t3-rampant"], - ["troll-biter-nest-v5-t3-rampant", "troll-biter-spawner-v5-t3-rampant"], - ["troll-spitter-nest-v5-t3-rampant", "troll-spitter-spawner-v5-t3-rampant"], - ["laser-biter-nest-v5-t3-rampant", "laser-biter-spawner-v5-t3-rampant"], - ["laser-spitter-nest-v5-t3-rampant", "laser-spitter-spawner-v5-t3-rampant"], - ["fast-biter-nest-v5-t3-rampant", "fast-biter-spawner-v5-t3-rampant"], - ["fast-spitter-nest-v5-t3-rampant", "fast-spitter-spawner-v5-t3-rampant"], - ["wasp-spitter-nest-v5-t3-rampant", "wasp-spitter-spawner-v5-t3-rampant"], - ["spawner-spitter-nest-v5-t3-rampant", "spawner-spitter-spawner-v5-t3-rampant"], - ["energy-thief-biter-nest-v5-t3-rampant", "energy-thief-biter-spawner-v5-t3-rampant"], - ["poison-biter-nest-v5-t3-rampant", "poison-biter-spawner-v5-t3-rampant"], - ["neutral-biter-nest-v6-t3-rampant", "neutral-biter-spawner-v6-t3-rampant"], - ["neutral-spitter-nest-v6-t3-rampant", "neutral-spitter-spawner-v6-t3-rampant"], - ["acid-biter-nest-v6-t3-rampant", "acid-biter-spawner-v6-t3-rampant"], - ["acid-spitter-nest-v6-t3-rampant", "acid-spitter-spawner-v6-t3-rampant"], - ["physical-biter-nest-v6-t3-rampant", "physical-biter-spawner-v6-t3-rampant"], - ["electric-biter-nest-v6-t3-rampant", "electric-biter-spawner-v6-t3-rampant"], - ["suicide-biter-nest-v6-t3-rampant", "suicide-biter-spawner-v6-t3-rampant"], - ["nuclear-biter-nest-v6-t3-rampant", "nuclear-biter-spawner-v6-t3-rampant"], - ["fire-biter-nest-v6-t3-rampant", "fire-biter-spawner-v6-t3-rampant"], - ["fire-spitter-nest-v6-t3-rampant", "fire-spitter-spawner-v6-t3-rampant"], - ["interno-spitter-nest-v6-t3-rampant", "interno-spitter-spawner-v6-t3-rampant"], - ["troll-biter-nest-v6-t3-rampant", "troll-biter-spawner-v6-t3-rampant"], - ["troll-spitter-nest-v6-t3-rampant", "troll-spitter-spawner-v6-t3-rampant"], - ["laser-biter-nest-v6-t3-rampant", "laser-biter-spawner-v6-t3-rampant"], - ["laser-spitter-nest-v6-t3-rampant", "laser-spitter-spawner-v6-t3-rampant"], - ["fast-biter-nest-v6-t3-rampant", "fast-biter-spawner-v6-t3-rampant"], - ["fast-spitter-nest-v6-t3-rampant", "fast-spitter-spawner-v6-t3-rampant"], - ["wasp-spitter-nest-v6-t3-rampant", "wasp-spitter-spawner-v6-t3-rampant"], - ["spawner-spitter-nest-v6-t3-rampant", "spawner-spitter-spawner-v6-t3-rampant"], - ["energy-thief-biter-nest-v6-t3-rampant", "energy-thief-biter-spawner-v6-t3-rampant"], - ["poison-biter-nest-v6-t3-rampant", "poison-biter-spawner-v6-t3-rampant"], - ["neutral-biter-nest-v7-t3-rampant", "neutral-biter-spawner-v7-t3-rampant"], - ["neutral-spitter-nest-v7-t3-rampant", "neutral-spitter-spawner-v7-t3-rampant"], - ["acid-biter-nest-v7-t3-rampant", "acid-biter-spawner-v7-t3-rampant"], - ["acid-spitter-nest-v7-t3-rampant", "acid-spitter-spawner-v7-t3-rampant"], - ["physical-biter-nest-v7-t3-rampant", "physical-biter-spawner-v7-t3-rampant"], - ["electric-biter-nest-v7-t3-rampant", "electric-biter-spawner-v7-t3-rampant"], - ["suicide-biter-nest-v7-t3-rampant", "suicide-biter-spawner-v7-t3-rampant"], - ["nuclear-biter-nest-v7-t3-rampant", "nuclear-biter-spawner-v7-t3-rampant"], - ["fire-biter-nest-v7-t3-rampant", "fire-biter-spawner-v7-t3-rampant"], - ["fire-spitter-nest-v7-t3-rampant", "fire-spitter-spawner-v7-t3-rampant"], - ["interno-spitter-nest-v7-t3-rampant", "interno-spitter-spawner-v7-t3-rampant"], - ["troll-biter-nest-v7-t3-rampant", "troll-biter-spawner-v7-t3-rampant"], - ["troll-spitter-nest-v7-t3-rampant", "troll-spitter-spawner-v7-t3-rampant"], - ["laser-biter-nest-v7-t3-rampant", "laser-biter-spawner-v7-t3-rampant"], - ["laser-spitter-nest-v7-t3-rampant", "laser-spitter-spawner-v7-t3-rampant"], - ["fast-biter-nest-v7-t3-rampant", "fast-biter-spawner-v7-t3-rampant"], - ["fast-spitter-nest-v7-t3-rampant", "fast-spitter-spawner-v7-t3-rampant"], - ["wasp-spitter-nest-v7-t3-rampant", "wasp-spitter-spawner-v7-t3-rampant"], - ["spawner-spitter-nest-v7-t3-rampant", "spawner-spitter-spawner-v7-t3-rampant"], - ["energy-thief-biter-nest-v7-t3-rampant", "energy-thief-biter-spawner-v7-t3-rampant"], - ["poison-biter-nest-v7-t3-rampant", "poison-biter-spawner-v7-t3-rampant"], - ["neutral-biter-nest-v8-t3-rampant", "neutral-biter-spawner-v8-t3-rampant"], - ["neutral-spitter-nest-v8-t3-rampant", "neutral-spitter-spawner-v8-t3-rampant"], - ["acid-biter-nest-v8-t3-rampant", "acid-biter-spawner-v8-t3-rampant"], - ["acid-spitter-nest-v8-t3-rampant", "acid-spitter-spawner-v8-t3-rampant"], - ["physical-biter-nest-v8-t3-rampant", "physical-biter-spawner-v8-t3-rampant"], - ["electric-biter-nest-v8-t3-rampant", "electric-biter-spawner-v8-t3-rampant"], - ["suicide-biter-nest-v8-t3-rampant", "suicide-biter-spawner-v8-t3-rampant"], - ["nuclear-biter-nest-v8-t3-rampant", "nuclear-biter-spawner-v8-t3-rampant"], - ["fire-biter-nest-v8-t3-rampant", "fire-biter-spawner-v8-t3-rampant"], - ["fire-spitter-nest-v8-t3-rampant", "fire-spitter-spawner-v8-t3-rampant"], - ["interno-spitter-nest-v8-t3-rampant", "interno-spitter-spawner-v8-t3-rampant"], - ["troll-biter-nest-v8-t3-rampant", "troll-biter-spawner-v8-t3-rampant"], - ["troll-spitter-nest-v8-t3-rampant", "troll-spitter-spawner-v8-t3-rampant"], - ["laser-biter-nest-v8-t3-rampant", "laser-biter-spawner-v8-t3-rampant"], - ["laser-spitter-nest-v8-t3-rampant", "laser-spitter-spawner-v8-t3-rampant"], - ["fast-biter-nest-v8-t3-rampant", "fast-biter-spawner-v8-t3-rampant"], - ["fast-spitter-nest-v8-t3-rampant", "fast-spitter-spawner-v8-t3-rampant"], - ["wasp-spitter-nest-v8-t3-rampant", "wasp-spitter-spawner-v8-t3-rampant"], - ["spawner-spitter-nest-v8-t3-rampant", "spawner-spitter-spawner-v8-t3-rampant"], - ["energy-thief-biter-nest-v8-t3-rampant", "energy-thief-biter-spawner-v8-t3-rampant"], - ["poison-biter-nest-v8-t3-rampant", "poison-biter-spawner-v8-t3-rampant"], - ["neutral-biter-nest-v9-t3-rampant", "neutral-biter-spawner-v9-t3-rampant"], - ["neutral-spitter-nest-v9-t3-rampant", "neutral-spitter-spawner-v9-t3-rampant"], - ["acid-biter-nest-v9-t3-rampant", "acid-biter-spawner-v9-t3-rampant"], - ["acid-spitter-nest-v9-t3-rampant", "acid-spitter-spawner-v9-t3-rampant"], - ["physical-biter-nest-v9-t3-rampant", "physical-biter-spawner-v9-t3-rampant"], - ["electric-biter-nest-v9-t3-rampant", "electric-biter-spawner-v9-t3-rampant"], - ["suicide-biter-nest-v9-t3-rampant", "suicide-biter-spawner-v9-t3-rampant"], - ["nuclear-biter-nest-v9-t3-rampant", "nuclear-biter-spawner-v9-t3-rampant"], - ["fire-biter-nest-v9-t3-rampant", "fire-biter-spawner-v9-t3-rampant"], - ["fire-spitter-nest-v9-t3-rampant", "fire-spitter-spawner-v9-t3-rampant"], - ["interno-spitter-nest-v9-t3-rampant", "interno-spitter-spawner-v9-t3-rampant"], - ["troll-biter-nest-v9-t3-rampant", "troll-biter-spawner-v9-t3-rampant"], - ["troll-spitter-nest-v9-t3-rampant", "troll-spitter-spawner-v9-t3-rampant"], - ["laser-biter-nest-v9-t3-rampant", "laser-biter-spawner-v9-t3-rampant"], - ["laser-spitter-nest-v9-t3-rampant", "laser-spitter-spawner-v9-t3-rampant"], - ["fast-biter-nest-v9-t3-rampant", "fast-biter-spawner-v9-t3-rampant"], - ["fast-spitter-nest-v9-t3-rampant", "fast-spitter-spawner-v9-t3-rampant"], - ["wasp-spitter-nest-v9-t3-rampant", "wasp-spitter-spawner-v9-t3-rampant"], - ["spawner-spitter-nest-v9-t3-rampant", "spawner-spitter-spawner-v9-t3-rampant"], - ["energy-thief-biter-nest-v9-t3-rampant", "energy-thief-biter-spawner-v9-t3-rampant"], - ["poison-biter-nest-v9-t3-rampant", "poison-biter-spawner-v9-t3-rampant"], - ["neutral-biter-nest-v10-t3-rampant", "neutral-biter-spawner-v10-t3-rampant"], - ["neutral-spitter-nest-v10-t3-rampant", "neutral-spitter-spawner-v10-t3-rampant"], - ["acid-biter-nest-v10-t3-rampant", "acid-biter-spawner-v10-t3-rampant"], - ["acid-spitter-nest-v10-t3-rampant", "acid-spitter-spawner-v10-t3-rampant"], - ["physical-biter-nest-v10-t3-rampant", "physical-biter-spawner-v10-t3-rampant"], - ["electric-biter-nest-v10-t3-rampant", "electric-biter-spawner-v10-t3-rampant"], - ["suicide-biter-nest-v10-t3-rampant", "suicide-biter-spawner-v10-t3-rampant"], - ["nuclear-biter-nest-v10-t3-rampant", "nuclear-biter-spawner-v10-t3-rampant"], - ["fire-biter-nest-v10-t3-rampant", "fire-biter-spawner-v10-t3-rampant"], - ["fire-spitter-nest-v10-t3-rampant", "fire-spitter-spawner-v10-t3-rampant"], - ["interno-spitter-nest-v10-t3-rampant", "interno-spitter-spawner-v10-t3-rampant"], - ["troll-biter-nest-v10-t3-rampant", "troll-biter-spawner-v10-t3-rampant"], - ["troll-spitter-nest-v10-t3-rampant", "troll-spitter-spawner-v10-t3-rampant"], - ["laser-biter-nest-v10-t3-rampant", "laser-biter-spawner-v10-t3-rampant"], - ["laser-spitter-nest-v10-t3-rampant", "laser-spitter-spawner-v10-t3-rampant"], - ["fast-biter-nest-v10-t3-rampant", "fast-biter-spawner-v10-t3-rampant"], - ["fast-spitter-nest-v10-t3-rampant", "fast-spitter-spawner-v10-t3-rampant"], - ["wasp-spitter-nest-v10-t3-rampant", "wasp-spitter-spawner-v10-t3-rampant"], - ["spawner-spitter-nest-v10-t3-rampant", "spawner-spitter-spawner-v10-t3-rampant"], - ["energy-thief-biter-nest-v10-t3-rampant", "energy-thief-biter-spawner-v10-t3-rampant"], - ["poison-biter-nest-v10-t3-rampant", "poison-biter-spawner-v10-t3-rampant"], - ["neutral-biter-nest-v11-t3-rampant", "neutral-biter-spawner-v11-t3-rampant"], - ["neutral-spitter-nest-v11-t3-rampant", "neutral-spitter-spawner-v11-t3-rampant"], - ["acid-biter-nest-v11-t3-rampant", "acid-biter-spawner-v11-t3-rampant"], - ["acid-spitter-nest-v11-t3-rampant", "acid-spitter-spawner-v11-t3-rampant"], - ["physical-biter-nest-v11-t3-rampant", "physical-biter-spawner-v11-t3-rampant"], - ["electric-biter-nest-v11-t3-rampant", "electric-biter-spawner-v11-t3-rampant"], - ["suicide-biter-nest-v11-t3-rampant", "suicide-biter-spawner-v11-t3-rampant"], - ["nuclear-biter-nest-v11-t3-rampant", "nuclear-biter-spawner-v11-t3-rampant"], - ["fire-biter-nest-v11-t3-rampant", "fire-biter-spawner-v11-t3-rampant"], - ["fire-spitter-nest-v11-t3-rampant", "fire-spitter-spawner-v11-t3-rampant"], - ["interno-spitter-nest-v11-t3-rampant", "interno-spitter-spawner-v11-t3-rampant"], - ["troll-biter-nest-v11-t3-rampant", "troll-biter-spawner-v11-t3-rampant"], - ["troll-spitter-nest-v11-t3-rampant", "troll-spitter-spawner-v11-t3-rampant"], - ["laser-biter-nest-v11-t3-rampant", "laser-biter-spawner-v11-t3-rampant"], - ["laser-spitter-nest-v11-t3-rampant", "laser-spitter-spawner-v11-t3-rampant"], - ["fast-biter-nest-v11-t3-rampant", "fast-biter-spawner-v11-t3-rampant"], - ["fast-spitter-nest-v11-t3-rampant", "fast-spitter-spawner-v11-t3-rampant"], - ["wasp-spitter-nest-v11-t3-rampant", "wasp-spitter-spawner-v11-t3-rampant"], - ["spawner-spitter-nest-v11-t3-rampant", "spawner-spitter-spawner-v11-t3-rampant"], - ["energy-thief-biter-nest-v11-t3-rampant", "energy-thief-biter-spawner-v11-t3-rampant"], - ["poison-biter-nest-v11-t3-rampant", "poison-biter-spawner-v11-t3-rampant"], - ["neutral-biter-nest-v12-t3-rampant", "neutral-biter-spawner-v12-t3-rampant"], - ["neutral-spitter-nest-v12-t3-rampant", "neutral-spitter-spawner-v12-t3-rampant"], - ["acid-biter-nest-v12-t3-rampant", "acid-biter-spawner-v12-t3-rampant"], - ["acid-spitter-nest-v12-t3-rampant", "acid-spitter-spawner-v12-t3-rampant"], - ["physical-biter-nest-v12-t3-rampant", "physical-biter-spawner-v12-t3-rampant"], - ["electric-biter-nest-v12-t3-rampant", "electric-biter-spawner-v12-t3-rampant"], - ["suicide-biter-nest-v12-t3-rampant", "suicide-biter-spawner-v12-t3-rampant"], - ["nuclear-biter-nest-v12-t3-rampant", "nuclear-biter-spawner-v12-t3-rampant"], - ["fire-biter-nest-v12-t3-rampant", "fire-biter-spawner-v12-t3-rampant"], - ["fire-spitter-nest-v12-t3-rampant", "fire-spitter-spawner-v12-t3-rampant"], - ["interno-spitter-nest-v12-t3-rampant", "interno-spitter-spawner-v12-t3-rampant"], - ["troll-biter-nest-v12-t3-rampant", "troll-biter-spawner-v12-t3-rampant"], - ["troll-spitter-nest-v12-t3-rampant", "troll-spitter-spawner-v12-t3-rampant"], - ["laser-biter-nest-v12-t3-rampant", "laser-biter-spawner-v12-t3-rampant"], - ["laser-spitter-nest-v12-t3-rampant", "laser-spitter-spawner-v12-t3-rampant"], - ["fast-biter-nest-v12-t3-rampant", "fast-biter-spawner-v12-t3-rampant"], - ["fast-spitter-nest-v12-t3-rampant", "fast-spitter-spawner-v12-t3-rampant"], - ["wasp-spitter-nest-v12-t3-rampant", "wasp-spitter-spawner-v12-t3-rampant"], - ["spawner-spitter-nest-v12-t3-rampant", "spawner-spitter-spawner-v12-t3-rampant"], - ["energy-thief-biter-nest-v12-t3-rampant", "energy-thief-biter-spawner-v12-t3-rampant"], - ["poison-biter-nest-v12-t3-rampant", "poison-biter-spawner-v12-t3-rampant"], - ["neutral-biter-nest-v13-t3-rampant", "neutral-biter-spawner-v13-t3-rampant"], - ["neutral-spitter-nest-v13-t3-rampant", "neutral-spitter-spawner-v13-t3-rampant"], - ["acid-biter-nest-v13-t3-rampant", "acid-biter-spawner-v13-t3-rampant"], - ["acid-spitter-nest-v13-t3-rampant", "acid-spitter-spawner-v13-t3-rampant"], - ["physical-biter-nest-v13-t3-rampant", "physical-biter-spawner-v13-t3-rampant"], - ["electric-biter-nest-v13-t3-rampant", "electric-biter-spawner-v13-t3-rampant"], - ["suicide-biter-nest-v13-t3-rampant", "suicide-biter-spawner-v13-t3-rampant"], - ["nuclear-biter-nest-v13-t3-rampant", "nuclear-biter-spawner-v13-t3-rampant"], - ["fire-biter-nest-v13-t3-rampant", "fire-biter-spawner-v13-t3-rampant"], - ["fire-spitter-nest-v13-t3-rampant", "fire-spitter-spawner-v13-t3-rampant"], - ["interno-spitter-nest-v13-t3-rampant", "interno-spitter-spawner-v13-t3-rampant"], - ["troll-biter-nest-v13-t3-rampant", "troll-biter-spawner-v13-t3-rampant"], - ["troll-spitter-nest-v13-t3-rampant", "troll-spitter-spawner-v13-t3-rampant"], - ["laser-biter-nest-v13-t3-rampant", "laser-biter-spawner-v13-t3-rampant"], - ["laser-spitter-nest-v13-t3-rampant", "laser-spitter-spawner-v13-t3-rampant"], - ["fast-biter-nest-v13-t3-rampant", "fast-biter-spawner-v13-t3-rampant"], - ["fast-spitter-nest-v13-t3-rampant", "fast-spitter-spawner-v13-t3-rampant"], - ["wasp-spitter-nest-v13-t3-rampant", "wasp-spitter-spawner-v13-t3-rampant"], - ["spawner-spitter-nest-v13-t3-rampant", "spawner-spitter-spawner-v13-t3-rampant"], - ["energy-thief-biter-nest-v13-t3-rampant", "energy-thief-biter-spawner-v13-t3-rampant"], - ["poison-biter-nest-v13-t3-rampant", "poison-biter-spawner-v13-t3-rampant"], - ["neutral-biter-nest-v14-t3-rampant", "neutral-biter-spawner-v14-t3-rampant"], - ["neutral-spitter-nest-v14-t3-rampant", "neutral-spitter-spawner-v14-t3-rampant"], - ["acid-biter-nest-v14-t3-rampant", "acid-biter-spawner-v14-t3-rampant"], - ["acid-spitter-nest-v14-t3-rampant", "acid-spitter-spawner-v14-t3-rampant"], - ["physical-biter-nest-v14-t3-rampant", "physical-biter-spawner-v14-t3-rampant"], - ["electric-biter-nest-v14-t3-rampant", "electric-biter-spawner-v14-t3-rampant"], - ["suicide-biter-nest-v14-t3-rampant", "suicide-biter-spawner-v14-t3-rampant"], - ["nuclear-biter-nest-v14-t3-rampant", "nuclear-biter-spawner-v14-t3-rampant"], - ["fire-biter-nest-v14-t3-rampant", "fire-biter-spawner-v14-t3-rampant"], - ["fire-spitter-nest-v14-t3-rampant", "fire-spitter-spawner-v14-t3-rampant"], - ["interno-spitter-nest-v14-t3-rampant", "interno-spitter-spawner-v14-t3-rampant"], - ["troll-biter-nest-v14-t3-rampant", "troll-biter-spawner-v14-t3-rampant"], - ["troll-spitter-nest-v14-t3-rampant", "troll-spitter-spawner-v14-t3-rampant"], - ["laser-biter-nest-v14-t3-rampant", "laser-biter-spawner-v14-t3-rampant"], - ["laser-spitter-nest-v14-t3-rampant", "laser-spitter-spawner-v14-t3-rampant"], - ["fast-biter-nest-v14-t3-rampant", "fast-biter-spawner-v14-t3-rampant"], - ["fast-spitter-nest-v14-t3-rampant", "fast-spitter-spawner-v14-t3-rampant"], - ["wasp-spitter-nest-v14-t3-rampant", "wasp-spitter-spawner-v14-t3-rampant"], - ["spawner-spitter-nest-v14-t3-rampant", "spawner-spitter-spawner-v14-t3-rampant"], - ["energy-thief-biter-nest-v14-t3-rampant", "energy-thief-biter-spawner-v14-t3-rampant"], - ["poison-biter-nest-v14-t3-rampant", "poison-biter-spawner-v14-t3-rampant"], - ["neutral-biter-nest-v15-t3-rampant", "neutral-biter-spawner-v15-t3-rampant"], - ["neutral-spitter-nest-v15-t3-rampant", "neutral-spitter-spawner-v15-t3-rampant"], - ["acid-biter-nest-v15-t3-rampant", "acid-biter-spawner-v15-t3-rampant"], - ["acid-spitter-nest-v15-t3-rampant", "acid-spitter-spawner-v15-t3-rampant"], - ["physical-biter-nest-v15-t3-rampant", "physical-biter-spawner-v15-t3-rampant"], - ["electric-biter-nest-v15-t3-rampant", "electric-biter-spawner-v15-t3-rampant"], - ["suicide-biter-nest-v15-t3-rampant", "suicide-biter-spawner-v15-t3-rampant"], - ["nuclear-biter-nest-v15-t3-rampant", "nuclear-biter-spawner-v15-t3-rampant"], - ["fire-biter-nest-v15-t3-rampant", "fire-biter-spawner-v15-t3-rampant"], - ["fire-spitter-nest-v15-t3-rampant", "fire-spitter-spawner-v15-t3-rampant"], - ["interno-spitter-nest-v15-t3-rampant", "interno-spitter-spawner-v15-t3-rampant"], - ["troll-biter-nest-v15-t3-rampant", "troll-biter-spawner-v15-t3-rampant"], - ["troll-spitter-nest-v15-t3-rampant", "troll-spitter-spawner-v15-t3-rampant"], - ["laser-biter-nest-v15-t3-rampant", "laser-biter-spawner-v15-t3-rampant"], - ["laser-spitter-nest-v15-t3-rampant", "laser-spitter-spawner-v15-t3-rampant"], - ["fast-biter-nest-v15-t3-rampant", "fast-biter-spawner-v15-t3-rampant"], - ["fast-spitter-nest-v15-t3-rampant", "fast-spitter-spawner-v15-t3-rampant"], - ["wasp-spitter-nest-v15-t3-rampant", "wasp-spitter-spawner-v15-t3-rampant"], - ["spawner-spitter-nest-v15-t3-rampant", "spawner-spitter-spawner-v15-t3-rampant"], - ["energy-thief-biter-nest-v15-t3-rampant", "energy-thief-biter-spawner-v15-t3-rampant"], - ["poison-biter-nest-v15-t3-rampant", "poison-biter-spawner-v15-t3-rampant"], - ["neutral-biter-nest-v16-t3-rampant", "neutral-biter-spawner-v16-t3-rampant"], - ["neutral-spitter-nest-v16-t3-rampant", "neutral-spitter-spawner-v16-t3-rampant"], - ["acid-biter-nest-v16-t3-rampant", "acid-biter-spawner-v16-t3-rampant"], - ["acid-spitter-nest-v16-t3-rampant", "acid-spitter-spawner-v16-t3-rampant"], - ["physical-biter-nest-v16-t3-rampant", "physical-biter-spawner-v16-t3-rampant"], - ["electric-biter-nest-v16-t3-rampant", "electric-biter-spawner-v16-t3-rampant"], - ["suicide-biter-nest-v16-t3-rampant", "suicide-biter-spawner-v16-t3-rampant"], - ["nuclear-biter-nest-v16-t3-rampant", "nuclear-biter-spawner-v16-t3-rampant"], - ["fire-biter-nest-v16-t3-rampant", "fire-biter-spawner-v16-t3-rampant"], - ["fire-spitter-nest-v16-t3-rampant", "fire-spitter-spawner-v16-t3-rampant"], - ["interno-spitter-nest-v16-t3-rampant", "interno-spitter-spawner-v16-t3-rampant"], - ["troll-biter-nest-v16-t3-rampant", "troll-biter-spawner-v16-t3-rampant"], - ["troll-spitter-nest-v16-t3-rampant", "troll-spitter-spawner-v16-t3-rampant"], - ["laser-biter-nest-v16-t3-rampant", "laser-biter-spawner-v16-t3-rampant"], - ["laser-spitter-nest-v16-t3-rampant", "laser-spitter-spawner-v16-t3-rampant"], - ["fast-biter-nest-v16-t3-rampant", "fast-biter-spawner-v16-t3-rampant"], - ["fast-spitter-nest-v16-t3-rampant", "fast-spitter-spawner-v16-t3-rampant"], - ["wasp-spitter-nest-v16-t3-rampant", "wasp-spitter-spawner-v16-t3-rampant"], - ["spawner-spitter-nest-v16-t3-rampant", "spawner-spitter-spawner-v16-t3-rampant"], - ["energy-thief-biter-nest-v16-t3-rampant", "energy-thief-biter-spawner-v16-t3-rampant"], - ["poison-biter-nest-v16-t3-rampant", "poison-biter-spawner-v16-t3-rampant"], - ["neutral-biter-nest-v17-t3-rampant", "neutral-biter-spawner-v17-t3-rampant"], - ["neutral-spitter-nest-v17-t3-rampant", "neutral-spitter-spawner-v17-t3-rampant"], - ["acid-biter-nest-v17-t3-rampant", "acid-biter-spawner-v17-t3-rampant"], - ["acid-spitter-nest-v17-t3-rampant", "acid-spitter-spawner-v17-t3-rampant"], - ["physical-biter-nest-v17-t3-rampant", "physical-biter-spawner-v17-t3-rampant"], - ["electric-biter-nest-v17-t3-rampant", "electric-biter-spawner-v17-t3-rampant"], - ["suicide-biter-nest-v17-t3-rampant", "suicide-biter-spawner-v17-t3-rampant"], - ["nuclear-biter-nest-v17-t3-rampant", "nuclear-biter-spawner-v17-t3-rampant"], - ["fire-biter-nest-v17-t3-rampant", "fire-biter-spawner-v17-t3-rampant"], - ["fire-spitter-nest-v17-t3-rampant", "fire-spitter-spawner-v17-t3-rampant"], - ["interno-spitter-nest-v17-t3-rampant", "interno-spitter-spawner-v17-t3-rampant"], - ["troll-biter-nest-v17-t3-rampant", "troll-biter-spawner-v17-t3-rampant"], - ["troll-spitter-nest-v17-t3-rampant", "troll-spitter-spawner-v17-t3-rampant"], - ["laser-biter-nest-v17-t3-rampant", "laser-biter-spawner-v17-t3-rampant"], - ["laser-spitter-nest-v17-t3-rampant", "laser-spitter-spawner-v17-t3-rampant"], - ["fast-biter-nest-v17-t3-rampant", "fast-biter-spawner-v17-t3-rampant"], - ["fast-spitter-nest-v17-t3-rampant", "fast-spitter-spawner-v17-t3-rampant"], - ["wasp-spitter-nest-v17-t3-rampant", "wasp-spitter-spawner-v17-t3-rampant"], - ["spawner-spitter-nest-v17-t3-rampant", "spawner-spitter-spawner-v17-t3-rampant"], - ["energy-thief-biter-nest-v17-t3-rampant", "energy-thief-biter-spawner-v17-t3-rampant"], - ["poison-biter-nest-v17-t3-rampant", "poison-biter-spawner-v17-t3-rampant"], - ["neutral-biter-nest-v18-t3-rampant", "neutral-biter-spawner-v18-t3-rampant"], - ["neutral-spitter-nest-v18-t3-rampant", "neutral-spitter-spawner-v18-t3-rampant"], - ["acid-biter-nest-v18-t3-rampant", "acid-biter-spawner-v18-t3-rampant"], - ["acid-spitter-nest-v18-t3-rampant", "acid-spitter-spawner-v18-t3-rampant"], - ["physical-biter-nest-v18-t3-rampant", "physical-biter-spawner-v18-t3-rampant"], - ["electric-biter-nest-v18-t3-rampant", "electric-biter-spawner-v18-t3-rampant"], - ["suicide-biter-nest-v18-t3-rampant", "suicide-biter-spawner-v18-t3-rampant"], - ["nuclear-biter-nest-v18-t3-rampant", "nuclear-biter-spawner-v18-t3-rampant"], - ["fire-biter-nest-v18-t3-rampant", "fire-biter-spawner-v18-t3-rampant"], - ["fire-spitter-nest-v18-t3-rampant", "fire-spitter-spawner-v18-t3-rampant"], - ["interno-spitter-nest-v18-t3-rampant", "interno-spitter-spawner-v18-t3-rampant"], - ["troll-biter-nest-v18-t3-rampant", "troll-biter-spawner-v18-t3-rampant"], - ["troll-spitter-nest-v18-t3-rampant", "troll-spitter-spawner-v18-t3-rampant"], - ["laser-biter-nest-v18-t3-rampant", "laser-biter-spawner-v18-t3-rampant"], - ["laser-spitter-nest-v18-t3-rampant", "laser-spitter-spawner-v18-t3-rampant"], - ["fast-biter-nest-v18-t3-rampant", "fast-biter-spawner-v18-t3-rampant"], - ["fast-spitter-nest-v18-t3-rampant", "fast-spitter-spawner-v18-t3-rampant"], - ["wasp-spitter-nest-v18-t3-rampant", "wasp-spitter-spawner-v18-t3-rampant"], - ["spawner-spitter-nest-v18-t3-rampant", "spawner-spitter-spawner-v18-t3-rampant"], - ["energy-thief-biter-nest-v18-t3-rampant", "energy-thief-biter-spawner-v18-t3-rampant"], - ["poison-biter-nest-v18-t3-rampant", "poison-biter-spawner-v18-t3-rampant"], - ["neutral-biter-nest-v19-t3-rampant", "neutral-biter-spawner-v19-t3-rampant"], - ["neutral-spitter-nest-v19-t3-rampant", "neutral-spitter-spawner-v19-t3-rampant"], - ["acid-biter-nest-v19-t3-rampant", "acid-biter-spawner-v19-t3-rampant"], - ["acid-spitter-nest-v19-t3-rampant", "acid-spitter-spawner-v19-t3-rampant"], - ["physical-biter-nest-v19-t3-rampant", "physical-biter-spawner-v19-t3-rampant"], - ["electric-biter-nest-v19-t3-rampant", "electric-biter-spawner-v19-t3-rampant"], - ["suicide-biter-nest-v19-t3-rampant", "suicide-biter-spawner-v19-t3-rampant"], - ["nuclear-biter-nest-v19-t3-rampant", "nuclear-biter-spawner-v19-t3-rampant"], - ["fire-biter-nest-v19-t3-rampant", "fire-biter-spawner-v19-t3-rampant"], - ["fire-spitter-nest-v19-t3-rampant", "fire-spitter-spawner-v19-t3-rampant"], - ["interno-spitter-nest-v19-t3-rampant", "interno-spitter-spawner-v19-t3-rampant"], - ["troll-biter-nest-v19-t3-rampant", "troll-biter-spawner-v19-t3-rampant"], - ["troll-spitter-nest-v19-t3-rampant", "troll-spitter-spawner-v19-t3-rampant"], - ["laser-biter-nest-v19-t3-rampant", "laser-biter-spawner-v19-t3-rampant"], - ["laser-spitter-nest-v19-t3-rampant", "laser-spitter-spawner-v19-t3-rampant"], - ["fast-biter-nest-v19-t3-rampant", "fast-biter-spawner-v19-t3-rampant"], - ["fast-spitter-nest-v19-t3-rampant", "fast-spitter-spawner-v19-t3-rampant"], - ["wasp-spitter-nest-v19-t3-rampant", "wasp-spitter-spawner-v19-t3-rampant"], - ["spawner-spitter-nest-v19-t3-rampant", "spawner-spitter-spawner-v19-t3-rampant"], - ["energy-thief-biter-nest-v19-t3-rampant", "energy-thief-biter-spawner-v19-t3-rampant"], - ["poison-biter-nest-v19-t3-rampant", "poison-biter-spawner-v19-t3-rampant"], - ["neutral-biter-nest-v20-t3-rampant", "neutral-biter-spawner-v20-t3-rampant"], - ["neutral-spitter-nest-v20-t3-rampant", "neutral-spitter-spawner-v20-t3-rampant"], - ["acid-biter-nest-v20-t3-rampant", "acid-biter-spawner-v20-t3-rampant"], - ["acid-spitter-nest-v20-t3-rampant", "acid-spitter-spawner-v20-t3-rampant"], - ["physical-biter-nest-v20-t3-rampant", "physical-biter-spawner-v20-t3-rampant"], - ["electric-biter-nest-v20-t3-rampant", "electric-biter-spawner-v20-t3-rampant"], - ["suicide-biter-nest-v20-t3-rampant", "suicide-biter-spawner-v20-t3-rampant"], - ["nuclear-biter-nest-v20-t3-rampant", "nuclear-biter-spawner-v20-t3-rampant"], - ["fire-biter-nest-v20-t3-rampant", "fire-biter-spawner-v20-t3-rampant"], - ["fire-spitter-nest-v20-t3-rampant", "fire-spitter-spawner-v20-t3-rampant"], - ["interno-spitter-nest-v20-t3-rampant", "interno-spitter-spawner-v20-t3-rampant"], - ["troll-biter-nest-v20-t3-rampant", "troll-biter-spawner-v20-t3-rampant"], - ["troll-spitter-nest-v20-t3-rampant", "troll-spitter-spawner-v20-t3-rampant"], - ["laser-biter-nest-v20-t3-rampant", "laser-biter-spawner-v20-t3-rampant"], - ["laser-spitter-nest-v20-t3-rampant", "laser-spitter-spawner-v20-t3-rampant"], - ["fast-biter-nest-v20-t3-rampant", "fast-biter-spawner-v20-t3-rampant"], - ["fast-spitter-nest-v20-t3-rampant", "fast-spitter-spawner-v20-t3-rampant"], - ["wasp-spitter-nest-v20-t3-rampant", "wasp-spitter-spawner-v20-t3-rampant"], - ["spawner-spitter-nest-v20-t3-rampant", "spawner-spitter-spawner-v20-t3-rampant"], - ["energy-thief-biter-nest-v20-t3-rampant", "energy-thief-biter-spawner-v20-t3-rampant"], - ["poison-biter-nest-v20-t3-rampant", "poison-biter-spawner-v20-t3-rampant"], - ["neutral-biter-nest-v1-t4-rampant", "neutral-biter-spawner-v1-t4-rampant"], - ["neutral-spitter-nest-v1-t4-rampant", "neutral-spitter-spawner-v1-t4-rampant"], - ["acid-biter-nest-v1-t4-rampant", "acid-biter-spawner-v1-t4-rampant"], - ["acid-spitter-nest-v1-t4-rampant", "acid-spitter-spawner-v1-t4-rampant"], - ["physical-biter-nest-v1-t4-rampant", "physical-biter-spawner-v1-t4-rampant"], - ["electric-biter-nest-v1-t4-rampant", "electric-biter-spawner-v1-t4-rampant"], - ["suicide-biter-nest-v1-t4-rampant", "suicide-biter-spawner-v1-t4-rampant"], - ["nuclear-biter-nest-v1-t4-rampant", "nuclear-biter-spawner-v1-t4-rampant"], - ["fire-biter-nest-v1-t4-rampant", "fire-biter-spawner-v1-t4-rampant"], - ["fire-spitter-nest-v1-t4-rampant", "fire-spitter-spawner-v1-t4-rampant"], - ["interno-spitter-nest-v1-t4-rampant", "interno-spitter-spawner-v1-t4-rampant"], - ["troll-biter-nest-v1-t4-rampant", "troll-biter-spawner-v1-t4-rampant"], - ["troll-spitter-nest-v1-t4-rampant", "troll-spitter-spawner-v1-t4-rampant"], - ["laser-biter-nest-v1-t4-rampant", "laser-biter-spawner-v1-t4-rampant"], - ["laser-spitter-nest-v1-t4-rampant", "laser-spitter-spawner-v1-t4-rampant"], - ["fast-biter-nest-v1-t4-rampant", "fast-biter-spawner-v1-t4-rampant"], - ["fast-spitter-nest-v1-t4-rampant", "fast-spitter-spawner-v1-t4-rampant"], - ["wasp-spitter-nest-v1-t4-rampant", "wasp-spitter-spawner-v1-t4-rampant"], - ["spawner-spitter-nest-v1-t4-rampant", "spawner-spitter-spawner-v1-t4-rampant"], - ["energy-thief-biter-nest-v1-t4-rampant", "energy-thief-biter-spawner-v1-t4-rampant"], - ["poison-biter-nest-v1-t4-rampant", "poison-biter-spawner-v1-t4-rampant"], - ["neutral-biter-nest-v2-t4-rampant", "neutral-biter-spawner-v2-t4-rampant"], - ["neutral-spitter-nest-v2-t4-rampant", "neutral-spitter-spawner-v2-t4-rampant"], - ["acid-biter-nest-v2-t4-rampant", "acid-biter-spawner-v2-t4-rampant"], - ["acid-spitter-nest-v2-t4-rampant", "acid-spitter-spawner-v2-t4-rampant"], - ["physical-biter-nest-v2-t4-rampant", "physical-biter-spawner-v2-t4-rampant"], - ["electric-biter-nest-v2-t4-rampant", "electric-biter-spawner-v2-t4-rampant"], - ["suicide-biter-nest-v2-t4-rampant", "suicide-biter-spawner-v2-t4-rampant"], - ["nuclear-biter-nest-v2-t4-rampant", "nuclear-biter-spawner-v2-t4-rampant"], - ["fire-biter-nest-v2-t4-rampant", "fire-biter-spawner-v2-t4-rampant"], - ["fire-spitter-nest-v2-t4-rampant", "fire-spitter-spawner-v2-t4-rampant"], - ["interno-spitter-nest-v2-t4-rampant", "interno-spitter-spawner-v2-t4-rampant"], - ["troll-biter-nest-v2-t4-rampant", "troll-biter-spawner-v2-t4-rampant"], - ["troll-spitter-nest-v2-t4-rampant", "troll-spitter-spawner-v2-t4-rampant"], - ["laser-biter-nest-v2-t4-rampant", "laser-biter-spawner-v2-t4-rampant"], - ["laser-spitter-nest-v2-t4-rampant", "laser-spitter-spawner-v2-t4-rampant"], - ["fast-biter-nest-v2-t4-rampant", "fast-biter-spawner-v2-t4-rampant"], - ["fast-spitter-nest-v2-t4-rampant", "fast-spitter-spawner-v2-t4-rampant"], - ["wasp-spitter-nest-v2-t4-rampant", "wasp-spitter-spawner-v2-t4-rampant"], - ["spawner-spitter-nest-v2-t4-rampant", "spawner-spitter-spawner-v2-t4-rampant"], - ["energy-thief-biter-nest-v2-t4-rampant", "energy-thief-biter-spawner-v2-t4-rampant"], - ["poison-biter-nest-v2-t4-rampant", "poison-biter-spawner-v2-t4-rampant"], - ["neutral-biter-nest-v3-t4-rampant", "neutral-biter-spawner-v3-t4-rampant"], - ["neutral-spitter-nest-v3-t4-rampant", "neutral-spitter-spawner-v3-t4-rampant"], - ["acid-biter-nest-v3-t4-rampant", "acid-biter-spawner-v3-t4-rampant"], - ["acid-spitter-nest-v3-t4-rampant", "acid-spitter-spawner-v3-t4-rampant"], - ["physical-biter-nest-v3-t4-rampant", "physical-biter-spawner-v3-t4-rampant"], - ["electric-biter-nest-v3-t4-rampant", "electric-biter-spawner-v3-t4-rampant"], - ["suicide-biter-nest-v3-t4-rampant", "suicide-biter-spawner-v3-t4-rampant"], - ["nuclear-biter-nest-v3-t4-rampant", "nuclear-biter-spawner-v3-t4-rampant"], - ["fire-biter-nest-v3-t4-rampant", "fire-biter-spawner-v3-t4-rampant"], - ["fire-spitter-nest-v3-t4-rampant", "fire-spitter-spawner-v3-t4-rampant"], - ["interno-spitter-nest-v3-t4-rampant", "interno-spitter-spawner-v3-t4-rampant"], - ["troll-biter-nest-v3-t4-rampant", "troll-biter-spawner-v3-t4-rampant"], - ["troll-spitter-nest-v3-t4-rampant", "troll-spitter-spawner-v3-t4-rampant"], - ["laser-biter-nest-v3-t4-rampant", "laser-biter-spawner-v3-t4-rampant"], - ["laser-spitter-nest-v3-t4-rampant", "laser-spitter-spawner-v3-t4-rampant"], - ["fast-biter-nest-v3-t4-rampant", "fast-biter-spawner-v3-t4-rampant"], - ["fast-spitter-nest-v3-t4-rampant", "fast-spitter-spawner-v3-t4-rampant"], - ["wasp-spitter-nest-v3-t4-rampant", "wasp-spitter-spawner-v3-t4-rampant"], - ["spawner-spitter-nest-v3-t4-rampant", "spawner-spitter-spawner-v3-t4-rampant"], - ["energy-thief-biter-nest-v3-t4-rampant", "energy-thief-biter-spawner-v3-t4-rampant"], - ["poison-biter-nest-v3-t4-rampant", "poison-biter-spawner-v3-t4-rampant"], - ["neutral-biter-nest-v4-t4-rampant", "neutral-biter-spawner-v4-t4-rampant"], - ["neutral-spitter-nest-v4-t4-rampant", "neutral-spitter-spawner-v4-t4-rampant"], - ["acid-biter-nest-v4-t4-rampant", "acid-biter-spawner-v4-t4-rampant"], - ["acid-spitter-nest-v4-t4-rampant", "acid-spitter-spawner-v4-t4-rampant"], - ["physical-biter-nest-v4-t4-rampant", "physical-biter-spawner-v4-t4-rampant"], - ["electric-biter-nest-v4-t4-rampant", "electric-biter-spawner-v4-t4-rampant"], - ["suicide-biter-nest-v4-t4-rampant", "suicide-biter-spawner-v4-t4-rampant"], - ["nuclear-biter-nest-v4-t4-rampant", "nuclear-biter-spawner-v4-t4-rampant"], - ["fire-biter-nest-v4-t4-rampant", "fire-biter-spawner-v4-t4-rampant"], - ["fire-spitter-nest-v4-t4-rampant", "fire-spitter-spawner-v4-t4-rampant"], - ["interno-spitter-nest-v4-t4-rampant", "interno-spitter-spawner-v4-t4-rampant"], - ["troll-biter-nest-v4-t4-rampant", "troll-biter-spawner-v4-t4-rampant"], - ["troll-spitter-nest-v4-t4-rampant", "troll-spitter-spawner-v4-t4-rampant"], - ["laser-biter-nest-v4-t4-rampant", "laser-biter-spawner-v4-t4-rampant"], - ["laser-spitter-nest-v4-t4-rampant", "laser-spitter-spawner-v4-t4-rampant"], - ["fast-biter-nest-v4-t4-rampant", "fast-biter-spawner-v4-t4-rampant"], - ["fast-spitter-nest-v4-t4-rampant", "fast-spitter-spawner-v4-t4-rampant"], - ["wasp-spitter-nest-v4-t4-rampant", "wasp-spitter-spawner-v4-t4-rampant"], - ["spawner-spitter-nest-v4-t4-rampant", "spawner-spitter-spawner-v4-t4-rampant"], - ["energy-thief-biter-nest-v4-t4-rampant", "energy-thief-biter-spawner-v4-t4-rampant"], - ["poison-biter-nest-v4-t4-rampant", "poison-biter-spawner-v4-t4-rampant"], - ["neutral-biter-nest-v5-t4-rampant", "neutral-biter-spawner-v5-t4-rampant"], - ["neutral-spitter-nest-v5-t4-rampant", "neutral-spitter-spawner-v5-t4-rampant"], - ["acid-biter-nest-v5-t4-rampant", "acid-biter-spawner-v5-t4-rampant"], - ["acid-spitter-nest-v5-t4-rampant", "acid-spitter-spawner-v5-t4-rampant"], - ["physical-biter-nest-v5-t4-rampant", "physical-biter-spawner-v5-t4-rampant"], - ["electric-biter-nest-v5-t4-rampant", "electric-biter-spawner-v5-t4-rampant"], - ["suicide-biter-nest-v5-t4-rampant", "suicide-biter-spawner-v5-t4-rampant"], - ["nuclear-biter-nest-v5-t4-rampant", "nuclear-biter-spawner-v5-t4-rampant"], - ["fire-biter-nest-v5-t4-rampant", "fire-biter-spawner-v5-t4-rampant"], - ["fire-spitter-nest-v5-t4-rampant", "fire-spitter-spawner-v5-t4-rampant"], - ["interno-spitter-nest-v5-t4-rampant", "interno-spitter-spawner-v5-t4-rampant"], - ["troll-biter-nest-v5-t4-rampant", "troll-biter-spawner-v5-t4-rampant"], - ["troll-spitter-nest-v5-t4-rampant", "troll-spitter-spawner-v5-t4-rampant"], - ["laser-biter-nest-v5-t4-rampant", "laser-biter-spawner-v5-t4-rampant"], - ["laser-spitter-nest-v5-t4-rampant", "laser-spitter-spawner-v5-t4-rampant"], - ["fast-biter-nest-v5-t4-rampant", "fast-biter-spawner-v5-t4-rampant"], - ["fast-spitter-nest-v5-t4-rampant", "fast-spitter-spawner-v5-t4-rampant"], - ["wasp-spitter-nest-v5-t4-rampant", "wasp-spitter-spawner-v5-t4-rampant"], - ["spawner-spitter-nest-v5-t4-rampant", "spawner-spitter-spawner-v5-t4-rampant"], - ["energy-thief-biter-nest-v5-t4-rampant", "energy-thief-biter-spawner-v5-t4-rampant"], - ["poison-biter-nest-v5-t4-rampant", "poison-biter-spawner-v5-t4-rampant"], - ["neutral-biter-nest-v6-t4-rampant", "neutral-biter-spawner-v6-t4-rampant"], - ["neutral-spitter-nest-v6-t4-rampant", "neutral-spitter-spawner-v6-t4-rampant"], - ["acid-biter-nest-v6-t4-rampant", "acid-biter-spawner-v6-t4-rampant"], - ["acid-spitter-nest-v6-t4-rampant", "acid-spitter-spawner-v6-t4-rampant"], - ["physical-biter-nest-v6-t4-rampant", "physical-biter-spawner-v6-t4-rampant"], - ["electric-biter-nest-v6-t4-rampant", "electric-biter-spawner-v6-t4-rampant"], - ["suicide-biter-nest-v6-t4-rampant", "suicide-biter-spawner-v6-t4-rampant"], - ["nuclear-biter-nest-v6-t4-rampant", "nuclear-biter-spawner-v6-t4-rampant"], - ["fire-biter-nest-v6-t4-rampant", "fire-biter-spawner-v6-t4-rampant"], - ["fire-spitter-nest-v6-t4-rampant", "fire-spitter-spawner-v6-t4-rampant"], - ["interno-spitter-nest-v6-t4-rampant", "interno-spitter-spawner-v6-t4-rampant"], - ["troll-biter-nest-v6-t4-rampant", "troll-biter-spawner-v6-t4-rampant"], - ["troll-spitter-nest-v6-t4-rampant", "troll-spitter-spawner-v6-t4-rampant"], - ["laser-biter-nest-v6-t4-rampant", "laser-biter-spawner-v6-t4-rampant"], - ["laser-spitter-nest-v6-t4-rampant", "laser-spitter-spawner-v6-t4-rampant"], - ["fast-biter-nest-v6-t4-rampant", "fast-biter-spawner-v6-t4-rampant"], - ["fast-spitter-nest-v6-t4-rampant", "fast-spitter-spawner-v6-t4-rampant"], - ["wasp-spitter-nest-v6-t4-rampant", "wasp-spitter-spawner-v6-t4-rampant"], - ["spawner-spitter-nest-v6-t4-rampant", "spawner-spitter-spawner-v6-t4-rampant"], - ["energy-thief-biter-nest-v6-t4-rampant", "energy-thief-biter-spawner-v6-t4-rampant"], - ["poison-biter-nest-v6-t4-rampant", "poison-biter-spawner-v6-t4-rampant"], - ["neutral-biter-nest-v7-t4-rampant", "neutral-biter-spawner-v7-t4-rampant"], - ["neutral-spitter-nest-v7-t4-rampant", "neutral-spitter-spawner-v7-t4-rampant"], - ["acid-biter-nest-v7-t4-rampant", "acid-biter-spawner-v7-t4-rampant"], - ["acid-spitter-nest-v7-t4-rampant", "acid-spitter-spawner-v7-t4-rampant"], - ["physical-biter-nest-v7-t4-rampant", "physical-biter-spawner-v7-t4-rampant"], - ["electric-biter-nest-v7-t4-rampant", "electric-biter-spawner-v7-t4-rampant"], - ["suicide-biter-nest-v7-t4-rampant", "suicide-biter-spawner-v7-t4-rampant"], - ["nuclear-biter-nest-v7-t4-rampant", "nuclear-biter-spawner-v7-t4-rampant"], - ["fire-biter-nest-v7-t4-rampant", "fire-biter-spawner-v7-t4-rampant"], - ["fire-spitter-nest-v7-t4-rampant", "fire-spitter-spawner-v7-t4-rampant"], - ["interno-spitter-nest-v7-t4-rampant", "interno-spitter-spawner-v7-t4-rampant"], - ["troll-biter-nest-v7-t4-rampant", "troll-biter-spawner-v7-t4-rampant"], - ["troll-spitter-nest-v7-t4-rampant", "troll-spitter-spawner-v7-t4-rampant"], - ["laser-biter-nest-v7-t4-rampant", "laser-biter-spawner-v7-t4-rampant"], - ["laser-spitter-nest-v7-t4-rampant", "laser-spitter-spawner-v7-t4-rampant"], - ["fast-biter-nest-v7-t4-rampant", "fast-biter-spawner-v7-t4-rampant"], - ["fast-spitter-nest-v7-t4-rampant", "fast-spitter-spawner-v7-t4-rampant"], - ["wasp-spitter-nest-v7-t4-rampant", "wasp-spitter-spawner-v7-t4-rampant"], - ["spawner-spitter-nest-v7-t4-rampant", "spawner-spitter-spawner-v7-t4-rampant"], - ["energy-thief-biter-nest-v7-t4-rampant", "energy-thief-biter-spawner-v7-t4-rampant"], - ["poison-biter-nest-v7-t4-rampant", "poison-biter-spawner-v7-t4-rampant"], - ["neutral-biter-nest-v8-t4-rampant", "neutral-biter-spawner-v8-t4-rampant"], - ["neutral-spitter-nest-v8-t4-rampant", "neutral-spitter-spawner-v8-t4-rampant"], - ["acid-biter-nest-v8-t4-rampant", "acid-biter-spawner-v8-t4-rampant"], - ["acid-spitter-nest-v8-t4-rampant", "acid-spitter-spawner-v8-t4-rampant"], - ["physical-biter-nest-v8-t4-rampant", "physical-biter-spawner-v8-t4-rampant"], - ["electric-biter-nest-v8-t4-rampant", "electric-biter-spawner-v8-t4-rampant"], - ["suicide-biter-nest-v8-t4-rampant", "suicide-biter-spawner-v8-t4-rampant"], - ["nuclear-biter-nest-v8-t4-rampant", "nuclear-biter-spawner-v8-t4-rampant"], - ["fire-biter-nest-v8-t4-rampant", "fire-biter-spawner-v8-t4-rampant"], - ["fire-spitter-nest-v8-t4-rampant", "fire-spitter-spawner-v8-t4-rampant"], - ["interno-spitter-nest-v8-t4-rampant", "interno-spitter-spawner-v8-t4-rampant"], - ["troll-biter-nest-v8-t4-rampant", "troll-biter-spawner-v8-t4-rampant"], - ["troll-spitter-nest-v8-t4-rampant", "troll-spitter-spawner-v8-t4-rampant"], - ["laser-biter-nest-v8-t4-rampant", "laser-biter-spawner-v8-t4-rampant"], - ["laser-spitter-nest-v8-t4-rampant", "laser-spitter-spawner-v8-t4-rampant"], - ["fast-biter-nest-v8-t4-rampant", "fast-biter-spawner-v8-t4-rampant"], - ["fast-spitter-nest-v8-t4-rampant", "fast-spitter-spawner-v8-t4-rampant"], - ["wasp-spitter-nest-v8-t4-rampant", "wasp-spitter-spawner-v8-t4-rampant"], - ["spawner-spitter-nest-v8-t4-rampant", "spawner-spitter-spawner-v8-t4-rampant"], - ["energy-thief-biter-nest-v8-t4-rampant", "energy-thief-biter-spawner-v8-t4-rampant"], - ["poison-biter-nest-v8-t4-rampant", "poison-biter-spawner-v8-t4-rampant"], - ["neutral-biter-nest-v9-t4-rampant", "neutral-biter-spawner-v9-t4-rampant"], - ["neutral-spitter-nest-v9-t4-rampant", "neutral-spitter-spawner-v9-t4-rampant"], - ["acid-biter-nest-v9-t4-rampant", "acid-biter-spawner-v9-t4-rampant"], - ["acid-spitter-nest-v9-t4-rampant", "acid-spitter-spawner-v9-t4-rampant"], - ["physical-biter-nest-v9-t4-rampant", "physical-biter-spawner-v9-t4-rampant"], - ["electric-biter-nest-v9-t4-rampant", "electric-biter-spawner-v9-t4-rampant"], - ["suicide-biter-nest-v9-t4-rampant", "suicide-biter-spawner-v9-t4-rampant"], - ["nuclear-biter-nest-v9-t4-rampant", "nuclear-biter-spawner-v9-t4-rampant"], - ["fire-biter-nest-v9-t4-rampant", "fire-biter-spawner-v9-t4-rampant"], - ["fire-spitter-nest-v9-t4-rampant", "fire-spitter-spawner-v9-t4-rampant"], - ["interno-spitter-nest-v9-t4-rampant", "interno-spitter-spawner-v9-t4-rampant"], - ["troll-biter-nest-v9-t4-rampant", "troll-biter-spawner-v9-t4-rampant"], - ["troll-spitter-nest-v9-t4-rampant", "troll-spitter-spawner-v9-t4-rampant"], - ["laser-biter-nest-v9-t4-rampant", "laser-biter-spawner-v9-t4-rampant"], - ["laser-spitter-nest-v9-t4-rampant", "laser-spitter-spawner-v9-t4-rampant"], - ["fast-biter-nest-v9-t4-rampant", "fast-biter-spawner-v9-t4-rampant"], - ["fast-spitter-nest-v9-t4-rampant", "fast-spitter-spawner-v9-t4-rampant"], - ["wasp-spitter-nest-v9-t4-rampant", "wasp-spitter-spawner-v9-t4-rampant"], - ["spawner-spitter-nest-v9-t4-rampant", "spawner-spitter-spawner-v9-t4-rampant"], - ["energy-thief-biter-nest-v9-t4-rampant", "energy-thief-biter-spawner-v9-t4-rampant"], - ["poison-biter-nest-v9-t4-rampant", "poison-biter-spawner-v9-t4-rampant"], - ["neutral-biter-nest-v10-t4-rampant", "neutral-biter-spawner-v10-t4-rampant"], - ["neutral-spitter-nest-v10-t4-rampant", "neutral-spitter-spawner-v10-t4-rampant"], - ["acid-biter-nest-v10-t4-rampant", "acid-biter-spawner-v10-t4-rampant"], - ["acid-spitter-nest-v10-t4-rampant", "acid-spitter-spawner-v10-t4-rampant"], - ["physical-biter-nest-v10-t4-rampant", "physical-biter-spawner-v10-t4-rampant"], - ["electric-biter-nest-v10-t4-rampant", "electric-biter-spawner-v10-t4-rampant"], - ["suicide-biter-nest-v10-t4-rampant", "suicide-biter-spawner-v10-t4-rampant"], - ["nuclear-biter-nest-v10-t4-rampant", "nuclear-biter-spawner-v10-t4-rampant"], - ["fire-biter-nest-v10-t4-rampant", "fire-biter-spawner-v10-t4-rampant"], - ["fire-spitter-nest-v10-t4-rampant", "fire-spitter-spawner-v10-t4-rampant"], - ["interno-spitter-nest-v10-t4-rampant", "interno-spitter-spawner-v10-t4-rampant"], - ["troll-biter-nest-v10-t4-rampant", "troll-biter-spawner-v10-t4-rampant"], - ["troll-spitter-nest-v10-t4-rampant", "troll-spitter-spawner-v10-t4-rampant"], - ["laser-biter-nest-v10-t4-rampant", "laser-biter-spawner-v10-t4-rampant"], - ["laser-spitter-nest-v10-t4-rampant", "laser-spitter-spawner-v10-t4-rampant"], - ["fast-biter-nest-v10-t4-rampant", "fast-biter-spawner-v10-t4-rampant"], - ["fast-spitter-nest-v10-t4-rampant", "fast-spitter-spawner-v10-t4-rampant"], - ["wasp-spitter-nest-v10-t4-rampant", "wasp-spitter-spawner-v10-t4-rampant"], - ["spawner-spitter-nest-v10-t4-rampant", "spawner-spitter-spawner-v10-t4-rampant"], - ["energy-thief-biter-nest-v10-t4-rampant", "energy-thief-biter-spawner-v10-t4-rampant"], - ["poison-biter-nest-v10-t4-rampant", "poison-biter-spawner-v10-t4-rampant"], - ["neutral-biter-nest-v11-t4-rampant", "neutral-biter-spawner-v11-t4-rampant"], - ["neutral-spitter-nest-v11-t4-rampant", "neutral-spitter-spawner-v11-t4-rampant"], - ["acid-biter-nest-v11-t4-rampant", "acid-biter-spawner-v11-t4-rampant"], - ["acid-spitter-nest-v11-t4-rampant", "acid-spitter-spawner-v11-t4-rampant"], - ["physical-biter-nest-v11-t4-rampant", "physical-biter-spawner-v11-t4-rampant"], - ["electric-biter-nest-v11-t4-rampant", "electric-biter-spawner-v11-t4-rampant"], - ["suicide-biter-nest-v11-t4-rampant", "suicide-biter-spawner-v11-t4-rampant"], - ["nuclear-biter-nest-v11-t4-rampant", "nuclear-biter-spawner-v11-t4-rampant"], - ["fire-biter-nest-v11-t4-rampant", "fire-biter-spawner-v11-t4-rampant"], - ["fire-spitter-nest-v11-t4-rampant", "fire-spitter-spawner-v11-t4-rampant"], - ["interno-spitter-nest-v11-t4-rampant", "interno-spitter-spawner-v11-t4-rampant"], - ["troll-biter-nest-v11-t4-rampant", "troll-biter-spawner-v11-t4-rampant"], - ["troll-spitter-nest-v11-t4-rampant", "troll-spitter-spawner-v11-t4-rampant"], - ["laser-biter-nest-v11-t4-rampant", "laser-biter-spawner-v11-t4-rampant"], - ["laser-spitter-nest-v11-t4-rampant", "laser-spitter-spawner-v11-t4-rampant"], - ["fast-biter-nest-v11-t4-rampant", "fast-biter-spawner-v11-t4-rampant"], - ["fast-spitter-nest-v11-t4-rampant", "fast-spitter-spawner-v11-t4-rampant"], - ["wasp-spitter-nest-v11-t4-rampant", "wasp-spitter-spawner-v11-t4-rampant"], - ["spawner-spitter-nest-v11-t4-rampant", "spawner-spitter-spawner-v11-t4-rampant"], - ["energy-thief-biter-nest-v11-t4-rampant", "energy-thief-biter-spawner-v11-t4-rampant"], - ["poison-biter-nest-v11-t4-rampant", "poison-biter-spawner-v11-t4-rampant"], - ["neutral-biter-nest-v12-t4-rampant", "neutral-biter-spawner-v12-t4-rampant"], - ["neutral-spitter-nest-v12-t4-rampant", "neutral-spitter-spawner-v12-t4-rampant"], - ["acid-biter-nest-v12-t4-rampant", "acid-biter-spawner-v12-t4-rampant"], - ["acid-spitter-nest-v12-t4-rampant", "acid-spitter-spawner-v12-t4-rampant"], - ["physical-biter-nest-v12-t4-rampant", "physical-biter-spawner-v12-t4-rampant"], - ["electric-biter-nest-v12-t4-rampant", "electric-biter-spawner-v12-t4-rampant"], - ["suicide-biter-nest-v12-t4-rampant", "suicide-biter-spawner-v12-t4-rampant"], - ["nuclear-biter-nest-v12-t4-rampant", "nuclear-biter-spawner-v12-t4-rampant"], - ["fire-biter-nest-v12-t4-rampant", "fire-biter-spawner-v12-t4-rampant"], - ["fire-spitter-nest-v12-t4-rampant", "fire-spitter-spawner-v12-t4-rampant"], - ["interno-spitter-nest-v12-t4-rampant", "interno-spitter-spawner-v12-t4-rampant"], - ["troll-biter-nest-v12-t4-rampant", "troll-biter-spawner-v12-t4-rampant"], - ["troll-spitter-nest-v12-t4-rampant", "troll-spitter-spawner-v12-t4-rampant"], - ["laser-biter-nest-v12-t4-rampant", "laser-biter-spawner-v12-t4-rampant"], - ["laser-spitter-nest-v12-t4-rampant", "laser-spitter-spawner-v12-t4-rampant"], - ["fast-biter-nest-v12-t4-rampant", "fast-biter-spawner-v12-t4-rampant"], - ["fast-spitter-nest-v12-t4-rampant", "fast-spitter-spawner-v12-t4-rampant"], - ["wasp-spitter-nest-v12-t4-rampant", "wasp-spitter-spawner-v12-t4-rampant"], - ["spawner-spitter-nest-v12-t4-rampant", "spawner-spitter-spawner-v12-t4-rampant"], - ["energy-thief-biter-nest-v12-t4-rampant", "energy-thief-biter-spawner-v12-t4-rampant"], - ["poison-biter-nest-v12-t4-rampant", "poison-biter-spawner-v12-t4-rampant"], - ["neutral-biter-nest-v13-t4-rampant", "neutral-biter-spawner-v13-t4-rampant"], - ["neutral-spitter-nest-v13-t4-rampant", "neutral-spitter-spawner-v13-t4-rampant"], - ["acid-biter-nest-v13-t4-rampant", "acid-biter-spawner-v13-t4-rampant"], - ["acid-spitter-nest-v13-t4-rampant", "acid-spitter-spawner-v13-t4-rampant"], - ["physical-biter-nest-v13-t4-rampant", "physical-biter-spawner-v13-t4-rampant"], - ["electric-biter-nest-v13-t4-rampant", "electric-biter-spawner-v13-t4-rampant"], - ["suicide-biter-nest-v13-t4-rampant", "suicide-biter-spawner-v13-t4-rampant"], - ["nuclear-biter-nest-v13-t4-rampant", "nuclear-biter-spawner-v13-t4-rampant"], - ["fire-biter-nest-v13-t4-rampant", "fire-biter-spawner-v13-t4-rampant"], - ["fire-spitter-nest-v13-t4-rampant", "fire-spitter-spawner-v13-t4-rampant"], - ["interno-spitter-nest-v13-t4-rampant", "interno-spitter-spawner-v13-t4-rampant"], - ["troll-biter-nest-v13-t4-rampant", "troll-biter-spawner-v13-t4-rampant"], - ["troll-spitter-nest-v13-t4-rampant", "troll-spitter-spawner-v13-t4-rampant"], - ["laser-biter-nest-v13-t4-rampant", "laser-biter-spawner-v13-t4-rampant"], - ["laser-spitter-nest-v13-t4-rampant", "laser-spitter-spawner-v13-t4-rampant"], - ["fast-biter-nest-v13-t4-rampant", "fast-biter-spawner-v13-t4-rampant"], - ["fast-spitter-nest-v13-t4-rampant", "fast-spitter-spawner-v13-t4-rampant"], - ["wasp-spitter-nest-v13-t4-rampant", "wasp-spitter-spawner-v13-t4-rampant"], - ["spawner-spitter-nest-v13-t4-rampant", "spawner-spitter-spawner-v13-t4-rampant"], - ["energy-thief-biter-nest-v13-t4-rampant", "energy-thief-biter-spawner-v13-t4-rampant"], - ["poison-biter-nest-v13-t4-rampant", "poison-biter-spawner-v13-t4-rampant"], - ["neutral-biter-nest-v14-t4-rampant", "neutral-biter-spawner-v14-t4-rampant"], - ["neutral-spitter-nest-v14-t4-rampant", "neutral-spitter-spawner-v14-t4-rampant"], - ["acid-biter-nest-v14-t4-rampant", "acid-biter-spawner-v14-t4-rampant"], - ["acid-spitter-nest-v14-t4-rampant", "acid-spitter-spawner-v14-t4-rampant"], - ["physical-biter-nest-v14-t4-rampant", "physical-biter-spawner-v14-t4-rampant"], - ["electric-biter-nest-v14-t4-rampant", "electric-biter-spawner-v14-t4-rampant"], - ["suicide-biter-nest-v14-t4-rampant", "suicide-biter-spawner-v14-t4-rampant"], - ["nuclear-biter-nest-v14-t4-rampant", "nuclear-biter-spawner-v14-t4-rampant"], - ["fire-biter-nest-v14-t4-rampant", "fire-biter-spawner-v14-t4-rampant"], - ["fire-spitter-nest-v14-t4-rampant", "fire-spitter-spawner-v14-t4-rampant"], - ["interno-spitter-nest-v14-t4-rampant", "interno-spitter-spawner-v14-t4-rampant"], - ["troll-biter-nest-v14-t4-rampant", "troll-biter-spawner-v14-t4-rampant"], - ["troll-spitter-nest-v14-t4-rampant", "troll-spitter-spawner-v14-t4-rampant"], - ["laser-biter-nest-v14-t4-rampant", "laser-biter-spawner-v14-t4-rampant"], - ["laser-spitter-nest-v14-t4-rampant", "laser-spitter-spawner-v14-t4-rampant"], - ["fast-biter-nest-v14-t4-rampant", "fast-biter-spawner-v14-t4-rampant"], - ["fast-spitter-nest-v14-t4-rampant", "fast-spitter-spawner-v14-t4-rampant"], - ["wasp-spitter-nest-v14-t4-rampant", "wasp-spitter-spawner-v14-t4-rampant"], - ["spawner-spitter-nest-v14-t4-rampant", "spawner-spitter-spawner-v14-t4-rampant"], - ["energy-thief-biter-nest-v14-t4-rampant", "energy-thief-biter-spawner-v14-t4-rampant"], - ["poison-biter-nest-v14-t4-rampant", "poison-biter-spawner-v14-t4-rampant"], - ["neutral-biter-nest-v15-t4-rampant", "neutral-biter-spawner-v15-t4-rampant"], - ["neutral-spitter-nest-v15-t4-rampant", "neutral-spitter-spawner-v15-t4-rampant"], - ["acid-biter-nest-v15-t4-rampant", "acid-biter-spawner-v15-t4-rampant"], - ["acid-spitter-nest-v15-t4-rampant", "acid-spitter-spawner-v15-t4-rampant"], - ["physical-biter-nest-v15-t4-rampant", "physical-biter-spawner-v15-t4-rampant"], - ["electric-biter-nest-v15-t4-rampant", "electric-biter-spawner-v15-t4-rampant"], - ["suicide-biter-nest-v15-t4-rampant", "suicide-biter-spawner-v15-t4-rampant"], - ["nuclear-biter-nest-v15-t4-rampant", "nuclear-biter-spawner-v15-t4-rampant"], - ["fire-biter-nest-v15-t4-rampant", "fire-biter-spawner-v15-t4-rampant"], - ["fire-spitter-nest-v15-t4-rampant", "fire-spitter-spawner-v15-t4-rampant"], - ["interno-spitter-nest-v15-t4-rampant", "interno-spitter-spawner-v15-t4-rampant"], - ["troll-biter-nest-v15-t4-rampant", "troll-biter-spawner-v15-t4-rampant"], - ["troll-spitter-nest-v15-t4-rampant", "troll-spitter-spawner-v15-t4-rampant"], - ["laser-biter-nest-v15-t4-rampant", "laser-biter-spawner-v15-t4-rampant"], - ["laser-spitter-nest-v15-t4-rampant", "laser-spitter-spawner-v15-t4-rampant"], - ["fast-biter-nest-v15-t4-rampant", "fast-biter-spawner-v15-t4-rampant"], - ["fast-spitter-nest-v15-t4-rampant", "fast-spitter-spawner-v15-t4-rampant"], - ["wasp-spitter-nest-v15-t4-rampant", "wasp-spitter-spawner-v15-t4-rampant"], - ["spawner-spitter-nest-v15-t4-rampant", "spawner-spitter-spawner-v15-t4-rampant"], - ["energy-thief-biter-nest-v15-t4-rampant", "energy-thief-biter-spawner-v15-t4-rampant"], - ["poison-biter-nest-v15-t4-rampant", "poison-biter-spawner-v15-t4-rampant"], - ["neutral-biter-nest-v16-t4-rampant", "neutral-biter-spawner-v16-t4-rampant"], - ["neutral-spitter-nest-v16-t4-rampant", "neutral-spitter-spawner-v16-t4-rampant"], - ["acid-biter-nest-v16-t4-rampant", "acid-biter-spawner-v16-t4-rampant"], - ["acid-spitter-nest-v16-t4-rampant", "acid-spitter-spawner-v16-t4-rampant"], - ["physical-biter-nest-v16-t4-rampant", "physical-biter-spawner-v16-t4-rampant"], - ["electric-biter-nest-v16-t4-rampant", "electric-biter-spawner-v16-t4-rampant"], - ["suicide-biter-nest-v16-t4-rampant", "suicide-biter-spawner-v16-t4-rampant"], - ["nuclear-biter-nest-v16-t4-rampant", "nuclear-biter-spawner-v16-t4-rampant"], - ["fire-biter-nest-v16-t4-rampant", "fire-biter-spawner-v16-t4-rampant"], - ["fire-spitter-nest-v16-t4-rampant", "fire-spitter-spawner-v16-t4-rampant"], - ["interno-spitter-nest-v16-t4-rampant", "interno-spitter-spawner-v16-t4-rampant"], - ["troll-biter-nest-v16-t4-rampant", "troll-biter-spawner-v16-t4-rampant"], - ["troll-spitter-nest-v16-t4-rampant", "troll-spitter-spawner-v16-t4-rampant"], - ["laser-biter-nest-v16-t4-rampant", "laser-biter-spawner-v16-t4-rampant"], - ["laser-spitter-nest-v16-t4-rampant", "laser-spitter-spawner-v16-t4-rampant"], - ["fast-biter-nest-v16-t4-rampant", "fast-biter-spawner-v16-t4-rampant"], - ["fast-spitter-nest-v16-t4-rampant", "fast-spitter-spawner-v16-t4-rampant"], - ["wasp-spitter-nest-v16-t4-rampant", "wasp-spitter-spawner-v16-t4-rampant"], - ["spawner-spitter-nest-v16-t4-rampant", "spawner-spitter-spawner-v16-t4-rampant"], - ["energy-thief-biter-nest-v16-t4-rampant", "energy-thief-biter-spawner-v16-t4-rampant"], - ["poison-biter-nest-v16-t4-rampant", "poison-biter-spawner-v16-t4-rampant"], - ["neutral-biter-nest-v17-t4-rampant", "neutral-biter-spawner-v17-t4-rampant"], - ["neutral-spitter-nest-v17-t4-rampant", "neutral-spitter-spawner-v17-t4-rampant"], - ["acid-biter-nest-v17-t4-rampant", "acid-biter-spawner-v17-t4-rampant"], - ["acid-spitter-nest-v17-t4-rampant", "acid-spitter-spawner-v17-t4-rampant"], - ["physical-biter-nest-v17-t4-rampant", "physical-biter-spawner-v17-t4-rampant"], - ["electric-biter-nest-v17-t4-rampant", "electric-biter-spawner-v17-t4-rampant"], - ["suicide-biter-nest-v17-t4-rampant", "suicide-biter-spawner-v17-t4-rampant"], - ["nuclear-biter-nest-v17-t4-rampant", "nuclear-biter-spawner-v17-t4-rampant"], - ["fire-biter-nest-v17-t4-rampant", "fire-biter-spawner-v17-t4-rampant"], - ["fire-spitter-nest-v17-t4-rampant", "fire-spitter-spawner-v17-t4-rampant"], - ["interno-spitter-nest-v17-t4-rampant", "interno-spitter-spawner-v17-t4-rampant"], - ["troll-biter-nest-v17-t4-rampant", "troll-biter-spawner-v17-t4-rampant"], - ["troll-spitter-nest-v17-t4-rampant", "troll-spitter-spawner-v17-t4-rampant"], - ["laser-biter-nest-v17-t4-rampant", "laser-biter-spawner-v17-t4-rampant"], - ["laser-spitter-nest-v17-t4-rampant", "laser-spitter-spawner-v17-t4-rampant"], - ["fast-biter-nest-v17-t4-rampant", "fast-biter-spawner-v17-t4-rampant"], - ["fast-spitter-nest-v17-t4-rampant", "fast-spitter-spawner-v17-t4-rampant"], - ["wasp-spitter-nest-v17-t4-rampant", "wasp-spitter-spawner-v17-t4-rampant"], - ["spawner-spitter-nest-v17-t4-rampant", "spawner-spitter-spawner-v17-t4-rampant"], - ["energy-thief-biter-nest-v17-t4-rampant", "energy-thief-biter-spawner-v17-t4-rampant"], - ["poison-biter-nest-v17-t4-rampant", "poison-biter-spawner-v17-t4-rampant"], - ["neutral-biter-nest-v18-t4-rampant", "neutral-biter-spawner-v18-t4-rampant"], - ["neutral-spitter-nest-v18-t4-rampant", "neutral-spitter-spawner-v18-t4-rampant"], - ["acid-biter-nest-v18-t4-rampant", "acid-biter-spawner-v18-t4-rampant"], - ["acid-spitter-nest-v18-t4-rampant", "acid-spitter-spawner-v18-t4-rampant"], - ["physical-biter-nest-v18-t4-rampant", "physical-biter-spawner-v18-t4-rampant"], - ["electric-biter-nest-v18-t4-rampant", "electric-biter-spawner-v18-t4-rampant"], - ["suicide-biter-nest-v18-t4-rampant", "suicide-biter-spawner-v18-t4-rampant"], - ["nuclear-biter-nest-v18-t4-rampant", "nuclear-biter-spawner-v18-t4-rampant"], - ["fire-biter-nest-v18-t4-rampant", "fire-biter-spawner-v18-t4-rampant"], - ["fire-spitter-nest-v18-t4-rampant", "fire-spitter-spawner-v18-t4-rampant"], - ["interno-spitter-nest-v18-t4-rampant", "interno-spitter-spawner-v18-t4-rampant"], - ["troll-biter-nest-v18-t4-rampant", "troll-biter-spawner-v18-t4-rampant"], - ["troll-spitter-nest-v18-t4-rampant", "troll-spitter-spawner-v18-t4-rampant"], - ["laser-biter-nest-v18-t4-rampant", "laser-biter-spawner-v18-t4-rampant"], - ["laser-spitter-nest-v18-t4-rampant", "laser-spitter-spawner-v18-t4-rampant"], - ["fast-biter-nest-v18-t4-rampant", "fast-biter-spawner-v18-t4-rampant"], - ["fast-spitter-nest-v18-t4-rampant", "fast-spitter-spawner-v18-t4-rampant"], - ["wasp-spitter-nest-v18-t4-rampant", "wasp-spitter-spawner-v18-t4-rampant"], - ["spawner-spitter-nest-v18-t4-rampant", "spawner-spitter-spawner-v18-t4-rampant"], - ["energy-thief-biter-nest-v18-t4-rampant", "energy-thief-biter-spawner-v18-t4-rampant"], - ["poison-biter-nest-v18-t4-rampant", "poison-biter-spawner-v18-t4-rampant"], - ["neutral-biter-nest-v19-t4-rampant", "neutral-biter-spawner-v19-t4-rampant"], - ["neutral-spitter-nest-v19-t4-rampant", "neutral-spitter-spawner-v19-t4-rampant"], - ["acid-biter-nest-v19-t4-rampant", "acid-biter-spawner-v19-t4-rampant"], - ["acid-spitter-nest-v19-t4-rampant", "acid-spitter-spawner-v19-t4-rampant"], - ["physical-biter-nest-v19-t4-rampant", "physical-biter-spawner-v19-t4-rampant"], - ["electric-biter-nest-v19-t4-rampant", "electric-biter-spawner-v19-t4-rampant"], - ["suicide-biter-nest-v19-t4-rampant", "suicide-biter-spawner-v19-t4-rampant"], - ["nuclear-biter-nest-v19-t4-rampant", "nuclear-biter-spawner-v19-t4-rampant"], - ["fire-biter-nest-v19-t4-rampant", "fire-biter-spawner-v19-t4-rampant"], - ["fire-spitter-nest-v19-t4-rampant", "fire-spitter-spawner-v19-t4-rampant"], - ["interno-spitter-nest-v19-t4-rampant", "interno-spitter-spawner-v19-t4-rampant"], - ["troll-biter-nest-v19-t4-rampant", "troll-biter-spawner-v19-t4-rampant"], - ["troll-spitter-nest-v19-t4-rampant", "troll-spitter-spawner-v19-t4-rampant"], - ["laser-biter-nest-v19-t4-rampant", "laser-biter-spawner-v19-t4-rampant"], - ["laser-spitter-nest-v19-t4-rampant", "laser-spitter-spawner-v19-t4-rampant"], - ["fast-biter-nest-v19-t4-rampant", "fast-biter-spawner-v19-t4-rampant"], - ["fast-spitter-nest-v19-t4-rampant", "fast-spitter-spawner-v19-t4-rampant"], - ["wasp-spitter-nest-v19-t4-rampant", "wasp-spitter-spawner-v19-t4-rampant"], - ["spawner-spitter-nest-v19-t4-rampant", "spawner-spitter-spawner-v19-t4-rampant"], - ["energy-thief-biter-nest-v19-t4-rampant", "energy-thief-biter-spawner-v19-t4-rampant"], - ["poison-biter-nest-v19-t4-rampant", "poison-biter-spawner-v19-t4-rampant"], - ["neutral-biter-nest-v20-t4-rampant", "neutral-biter-spawner-v20-t4-rampant"], - ["neutral-spitter-nest-v20-t4-rampant", "neutral-spitter-spawner-v20-t4-rampant"], - ["acid-biter-nest-v20-t4-rampant", "acid-biter-spawner-v20-t4-rampant"], - ["acid-spitter-nest-v20-t4-rampant", "acid-spitter-spawner-v20-t4-rampant"], - ["physical-biter-nest-v20-t4-rampant", "physical-biter-spawner-v20-t4-rampant"], - ["electric-biter-nest-v20-t4-rampant", "electric-biter-spawner-v20-t4-rampant"], - ["suicide-biter-nest-v20-t4-rampant", "suicide-biter-spawner-v20-t4-rampant"], - ["nuclear-biter-nest-v20-t4-rampant", "nuclear-biter-spawner-v20-t4-rampant"], - ["fire-biter-nest-v20-t4-rampant", "fire-biter-spawner-v20-t4-rampant"], - ["fire-spitter-nest-v20-t4-rampant", "fire-spitter-spawner-v20-t4-rampant"], - ["interno-spitter-nest-v20-t4-rampant", "interno-spitter-spawner-v20-t4-rampant"], - ["troll-biter-nest-v20-t4-rampant", "troll-biter-spawner-v20-t4-rampant"], - ["troll-spitter-nest-v20-t4-rampant", "troll-spitter-spawner-v20-t4-rampant"], - ["laser-biter-nest-v20-t4-rampant", "laser-biter-spawner-v20-t4-rampant"], - ["laser-spitter-nest-v20-t4-rampant", "laser-spitter-spawner-v20-t4-rampant"], - ["fast-biter-nest-v20-t4-rampant", "fast-biter-spawner-v20-t4-rampant"], - ["fast-spitter-nest-v20-t4-rampant", "fast-spitter-spawner-v20-t4-rampant"], - ["wasp-spitter-nest-v20-t4-rampant", "wasp-spitter-spawner-v20-t4-rampant"], - ["spawner-spitter-nest-v20-t4-rampant", "spawner-spitter-spawner-v20-t4-rampant"], - ["energy-thief-biter-nest-v20-t4-rampant", "energy-thief-biter-spawner-v20-t4-rampant"], - ["poison-biter-nest-v20-t4-rampant", "poison-biter-spawner-v20-t4-rampant"], - ["neutral-biter-nest-v1-t5-rampant", "neutral-biter-spawner-v1-t5-rampant"], - ["neutral-spitter-nest-v1-t5-rampant", "neutral-spitter-spawner-v1-t5-rampant"], - ["acid-biter-nest-v1-t5-rampant", "acid-biter-spawner-v1-t5-rampant"], - ["acid-spitter-nest-v1-t5-rampant", "acid-spitter-spawner-v1-t5-rampant"], - ["physical-biter-nest-v1-t5-rampant", "physical-biter-spawner-v1-t5-rampant"], - ["electric-biter-nest-v1-t5-rampant", "electric-biter-spawner-v1-t5-rampant"], - ["suicide-biter-nest-v1-t5-rampant", "suicide-biter-spawner-v1-t5-rampant"], - ["nuclear-biter-nest-v1-t5-rampant", "nuclear-biter-spawner-v1-t5-rampant"], - ["fire-biter-nest-v1-t5-rampant", "fire-biter-spawner-v1-t5-rampant"], - ["fire-spitter-nest-v1-t5-rampant", "fire-spitter-spawner-v1-t5-rampant"], - ["interno-spitter-nest-v1-t5-rampant", "interno-spitter-spawner-v1-t5-rampant"], - ["troll-biter-nest-v1-t5-rampant", "troll-biter-spawner-v1-t5-rampant"], - ["troll-spitter-nest-v1-t5-rampant", "troll-spitter-spawner-v1-t5-rampant"], - ["laser-biter-nest-v1-t5-rampant", "laser-biter-spawner-v1-t5-rampant"], - ["laser-spitter-nest-v1-t5-rampant", "laser-spitter-spawner-v1-t5-rampant"], - ["fast-biter-nest-v1-t5-rampant", "fast-biter-spawner-v1-t5-rampant"], - ["fast-spitter-nest-v1-t5-rampant", "fast-spitter-spawner-v1-t5-rampant"], - ["wasp-spitter-nest-v1-t5-rampant", "wasp-spitter-spawner-v1-t5-rampant"], - ["spawner-spitter-nest-v1-t5-rampant", "spawner-spitter-spawner-v1-t5-rampant"], - ["energy-thief-biter-nest-v1-t5-rampant", "energy-thief-biter-spawner-v1-t5-rampant"], - ["poison-biter-nest-v1-t5-rampant", "poison-biter-spawner-v1-t5-rampant"], - ["neutral-biter-nest-v2-t5-rampant", "neutral-biter-spawner-v2-t5-rampant"], - ["neutral-spitter-nest-v2-t5-rampant", "neutral-spitter-spawner-v2-t5-rampant"], - ["acid-biter-nest-v2-t5-rampant", "acid-biter-spawner-v2-t5-rampant"], - ["acid-spitter-nest-v2-t5-rampant", "acid-spitter-spawner-v2-t5-rampant"], - ["physical-biter-nest-v2-t5-rampant", "physical-biter-spawner-v2-t5-rampant"], - ["electric-biter-nest-v2-t5-rampant", "electric-biter-spawner-v2-t5-rampant"], - ["suicide-biter-nest-v2-t5-rampant", "suicide-biter-spawner-v2-t5-rampant"], - ["nuclear-biter-nest-v2-t5-rampant", "nuclear-biter-spawner-v2-t5-rampant"], - ["fire-biter-nest-v2-t5-rampant", "fire-biter-spawner-v2-t5-rampant"], - ["fire-spitter-nest-v2-t5-rampant", "fire-spitter-spawner-v2-t5-rampant"], - ["interno-spitter-nest-v2-t5-rampant", "interno-spitter-spawner-v2-t5-rampant"], - ["troll-biter-nest-v2-t5-rampant", "troll-biter-spawner-v2-t5-rampant"], - ["troll-spitter-nest-v2-t5-rampant", "troll-spitter-spawner-v2-t5-rampant"], - ["laser-biter-nest-v2-t5-rampant", "laser-biter-spawner-v2-t5-rampant"], - ["laser-spitter-nest-v2-t5-rampant", "laser-spitter-spawner-v2-t5-rampant"], - ["fast-biter-nest-v2-t5-rampant", "fast-biter-spawner-v2-t5-rampant"], - ["fast-spitter-nest-v2-t5-rampant", "fast-spitter-spawner-v2-t5-rampant"], - ["wasp-spitter-nest-v2-t5-rampant", "wasp-spitter-spawner-v2-t5-rampant"], - ["spawner-spitter-nest-v2-t5-rampant", "spawner-spitter-spawner-v2-t5-rampant"], - ["energy-thief-biter-nest-v2-t5-rampant", "energy-thief-biter-spawner-v2-t5-rampant"], - ["poison-biter-nest-v2-t5-rampant", "poison-biter-spawner-v2-t5-rampant"], - ["neutral-biter-nest-v3-t5-rampant", "neutral-biter-spawner-v3-t5-rampant"], - ["neutral-spitter-nest-v3-t5-rampant", "neutral-spitter-spawner-v3-t5-rampant"], - ["acid-biter-nest-v3-t5-rampant", "acid-biter-spawner-v3-t5-rampant"], - ["acid-spitter-nest-v3-t5-rampant", "acid-spitter-spawner-v3-t5-rampant"], - ["physical-biter-nest-v3-t5-rampant", "physical-biter-spawner-v3-t5-rampant"], - ["electric-biter-nest-v3-t5-rampant", "electric-biter-spawner-v3-t5-rampant"], - ["suicide-biter-nest-v3-t5-rampant", "suicide-biter-spawner-v3-t5-rampant"], - ["nuclear-biter-nest-v3-t5-rampant", "nuclear-biter-spawner-v3-t5-rampant"], - ["fire-biter-nest-v3-t5-rampant", "fire-biter-spawner-v3-t5-rampant"], - ["fire-spitter-nest-v3-t5-rampant", "fire-spitter-spawner-v3-t5-rampant"], - ["interno-spitter-nest-v3-t5-rampant", "interno-spitter-spawner-v3-t5-rampant"], - ["troll-biter-nest-v3-t5-rampant", "troll-biter-spawner-v3-t5-rampant"], - ["troll-spitter-nest-v3-t5-rampant", "troll-spitter-spawner-v3-t5-rampant"], - ["laser-biter-nest-v3-t5-rampant", "laser-biter-spawner-v3-t5-rampant"], - ["laser-spitter-nest-v3-t5-rampant", "laser-spitter-spawner-v3-t5-rampant"], - ["fast-biter-nest-v3-t5-rampant", "fast-biter-spawner-v3-t5-rampant"], - ["fast-spitter-nest-v3-t5-rampant", "fast-spitter-spawner-v3-t5-rampant"], - ["wasp-spitter-nest-v3-t5-rampant", "wasp-spitter-spawner-v3-t5-rampant"], - ["spawner-spitter-nest-v3-t5-rampant", "spawner-spitter-spawner-v3-t5-rampant"], - ["energy-thief-biter-nest-v3-t5-rampant", "energy-thief-biter-spawner-v3-t5-rampant"], - ["poison-biter-nest-v3-t5-rampant", "poison-biter-spawner-v3-t5-rampant"], - ["neutral-biter-nest-v4-t5-rampant", "neutral-biter-spawner-v4-t5-rampant"], - ["neutral-spitter-nest-v4-t5-rampant", "neutral-spitter-spawner-v4-t5-rampant"], - ["acid-biter-nest-v4-t5-rampant", "acid-biter-spawner-v4-t5-rampant"], - ["acid-spitter-nest-v4-t5-rampant", "acid-spitter-spawner-v4-t5-rampant"], - ["physical-biter-nest-v4-t5-rampant", "physical-biter-spawner-v4-t5-rampant"], - ["electric-biter-nest-v4-t5-rampant", "electric-biter-spawner-v4-t5-rampant"], - ["suicide-biter-nest-v4-t5-rampant", "suicide-biter-spawner-v4-t5-rampant"], - ["nuclear-biter-nest-v4-t5-rampant", "nuclear-biter-spawner-v4-t5-rampant"], - ["fire-biter-nest-v4-t5-rampant", "fire-biter-spawner-v4-t5-rampant"], - ["fire-spitter-nest-v4-t5-rampant", "fire-spitter-spawner-v4-t5-rampant"], - ["interno-spitter-nest-v4-t5-rampant", "interno-spitter-spawner-v4-t5-rampant"], - ["troll-biter-nest-v4-t5-rampant", "troll-biter-spawner-v4-t5-rampant"], - ["troll-spitter-nest-v4-t5-rampant", "troll-spitter-spawner-v4-t5-rampant"], - ["laser-biter-nest-v4-t5-rampant", "laser-biter-spawner-v4-t5-rampant"], - ["laser-spitter-nest-v4-t5-rampant", "laser-spitter-spawner-v4-t5-rampant"], - ["fast-biter-nest-v4-t5-rampant", "fast-biter-spawner-v4-t5-rampant"], - ["fast-spitter-nest-v4-t5-rampant", "fast-spitter-spawner-v4-t5-rampant"], - ["wasp-spitter-nest-v4-t5-rampant", "wasp-spitter-spawner-v4-t5-rampant"], - ["spawner-spitter-nest-v4-t5-rampant", "spawner-spitter-spawner-v4-t5-rampant"], - ["energy-thief-biter-nest-v4-t5-rampant", "energy-thief-biter-spawner-v4-t5-rampant"], - ["poison-biter-nest-v4-t5-rampant", "poison-biter-spawner-v4-t5-rampant"], - ["neutral-biter-nest-v5-t5-rampant", "neutral-biter-spawner-v5-t5-rampant"], - ["neutral-spitter-nest-v5-t5-rampant", "neutral-spitter-spawner-v5-t5-rampant"], - ["acid-biter-nest-v5-t5-rampant", "acid-biter-spawner-v5-t5-rampant"], - ["acid-spitter-nest-v5-t5-rampant", "acid-spitter-spawner-v5-t5-rampant"], - ["physical-biter-nest-v5-t5-rampant", "physical-biter-spawner-v5-t5-rampant"], - ["electric-biter-nest-v5-t5-rampant", "electric-biter-spawner-v5-t5-rampant"], - ["suicide-biter-nest-v5-t5-rampant", "suicide-biter-spawner-v5-t5-rampant"], - ["nuclear-biter-nest-v5-t5-rampant", "nuclear-biter-spawner-v5-t5-rampant"], - ["fire-biter-nest-v5-t5-rampant", "fire-biter-spawner-v5-t5-rampant"], - ["fire-spitter-nest-v5-t5-rampant", "fire-spitter-spawner-v5-t5-rampant"], - ["interno-spitter-nest-v5-t5-rampant", "interno-spitter-spawner-v5-t5-rampant"], - ["troll-biter-nest-v5-t5-rampant", "troll-biter-spawner-v5-t5-rampant"], - ["troll-spitter-nest-v5-t5-rampant", "troll-spitter-spawner-v5-t5-rampant"], - ["laser-biter-nest-v5-t5-rampant", "laser-biter-spawner-v5-t5-rampant"], - ["laser-spitter-nest-v5-t5-rampant", "laser-spitter-spawner-v5-t5-rampant"], - ["fast-biter-nest-v5-t5-rampant", "fast-biter-spawner-v5-t5-rampant"], - ["fast-spitter-nest-v5-t5-rampant", "fast-spitter-spawner-v5-t5-rampant"], - ["wasp-spitter-nest-v5-t5-rampant", "wasp-spitter-spawner-v5-t5-rampant"], - ["spawner-spitter-nest-v5-t5-rampant", "spawner-spitter-spawner-v5-t5-rampant"], - ["energy-thief-biter-nest-v5-t5-rampant", "energy-thief-biter-spawner-v5-t5-rampant"], - ["poison-biter-nest-v5-t5-rampant", "poison-biter-spawner-v5-t5-rampant"], - ["neutral-biter-nest-v6-t5-rampant", "neutral-biter-spawner-v6-t5-rampant"], - ["neutral-spitter-nest-v6-t5-rampant", "neutral-spitter-spawner-v6-t5-rampant"], - ["acid-biter-nest-v6-t5-rampant", "acid-biter-spawner-v6-t5-rampant"], - ["acid-spitter-nest-v6-t5-rampant", "acid-spitter-spawner-v6-t5-rampant"], - ["physical-biter-nest-v6-t5-rampant", "physical-biter-spawner-v6-t5-rampant"], - ["electric-biter-nest-v6-t5-rampant", "electric-biter-spawner-v6-t5-rampant"], - ["suicide-biter-nest-v6-t5-rampant", "suicide-biter-spawner-v6-t5-rampant"], - ["nuclear-biter-nest-v6-t5-rampant", "nuclear-biter-spawner-v6-t5-rampant"], - ["fire-biter-nest-v6-t5-rampant", "fire-biter-spawner-v6-t5-rampant"], - ["fire-spitter-nest-v6-t5-rampant", "fire-spitter-spawner-v6-t5-rampant"], - ["interno-spitter-nest-v6-t5-rampant", "interno-spitter-spawner-v6-t5-rampant"], - ["troll-biter-nest-v6-t5-rampant", "troll-biter-spawner-v6-t5-rampant"], - ["troll-spitter-nest-v6-t5-rampant", "troll-spitter-spawner-v6-t5-rampant"], - ["laser-biter-nest-v6-t5-rampant", "laser-biter-spawner-v6-t5-rampant"], - ["laser-spitter-nest-v6-t5-rampant", "laser-spitter-spawner-v6-t5-rampant"], - ["fast-biter-nest-v6-t5-rampant", "fast-biter-spawner-v6-t5-rampant"], - ["fast-spitter-nest-v6-t5-rampant", "fast-spitter-spawner-v6-t5-rampant"], - ["wasp-spitter-nest-v6-t5-rampant", "wasp-spitter-spawner-v6-t5-rampant"], - ["spawner-spitter-nest-v6-t5-rampant", "spawner-spitter-spawner-v6-t5-rampant"], - ["energy-thief-biter-nest-v6-t5-rampant", "energy-thief-biter-spawner-v6-t5-rampant"], - ["poison-biter-nest-v6-t5-rampant", "poison-biter-spawner-v6-t5-rampant"], - ["neutral-biter-nest-v7-t5-rampant", "neutral-biter-spawner-v7-t5-rampant"], - ["neutral-spitter-nest-v7-t5-rampant", "neutral-spitter-spawner-v7-t5-rampant"], - ["acid-biter-nest-v7-t5-rampant", "acid-biter-spawner-v7-t5-rampant"], - ["acid-spitter-nest-v7-t5-rampant", "acid-spitter-spawner-v7-t5-rampant"], - ["physical-biter-nest-v7-t5-rampant", "physical-biter-spawner-v7-t5-rampant"], - ["electric-biter-nest-v7-t5-rampant", "electric-biter-spawner-v7-t5-rampant"], - ["suicide-biter-nest-v7-t5-rampant", "suicide-biter-spawner-v7-t5-rampant"], - ["nuclear-biter-nest-v7-t5-rampant", "nuclear-biter-spawner-v7-t5-rampant"], - ["fire-biter-nest-v7-t5-rampant", "fire-biter-spawner-v7-t5-rampant"], - ["fire-spitter-nest-v7-t5-rampant", "fire-spitter-spawner-v7-t5-rampant"], - ["interno-spitter-nest-v7-t5-rampant", "interno-spitter-spawner-v7-t5-rampant"], - ["troll-biter-nest-v7-t5-rampant", "troll-biter-spawner-v7-t5-rampant"], - ["troll-spitter-nest-v7-t5-rampant", "troll-spitter-spawner-v7-t5-rampant"], - ["laser-biter-nest-v7-t5-rampant", "laser-biter-spawner-v7-t5-rampant"], - ["laser-spitter-nest-v7-t5-rampant", "laser-spitter-spawner-v7-t5-rampant"], - ["fast-biter-nest-v7-t5-rampant", "fast-biter-spawner-v7-t5-rampant"], - ["fast-spitter-nest-v7-t5-rampant", "fast-spitter-spawner-v7-t5-rampant"], - ["wasp-spitter-nest-v7-t5-rampant", "wasp-spitter-spawner-v7-t5-rampant"], - ["spawner-spitter-nest-v7-t5-rampant", "spawner-spitter-spawner-v7-t5-rampant"], - ["energy-thief-biter-nest-v7-t5-rampant", "energy-thief-biter-spawner-v7-t5-rampant"], - ["poison-biter-nest-v7-t5-rampant", "poison-biter-spawner-v7-t5-rampant"], - ["neutral-biter-nest-v8-t5-rampant", "neutral-biter-spawner-v8-t5-rampant"], - ["neutral-spitter-nest-v8-t5-rampant", "neutral-spitter-spawner-v8-t5-rampant"], - ["acid-biter-nest-v8-t5-rampant", "acid-biter-spawner-v8-t5-rampant"], - ["acid-spitter-nest-v8-t5-rampant", "acid-spitter-spawner-v8-t5-rampant"], - ["physical-biter-nest-v8-t5-rampant", "physical-biter-spawner-v8-t5-rampant"], - ["electric-biter-nest-v8-t5-rampant", "electric-biter-spawner-v8-t5-rampant"], - ["suicide-biter-nest-v8-t5-rampant", "suicide-biter-spawner-v8-t5-rampant"], - ["nuclear-biter-nest-v8-t5-rampant", "nuclear-biter-spawner-v8-t5-rampant"], - ["fire-biter-nest-v8-t5-rampant", "fire-biter-spawner-v8-t5-rampant"], - ["fire-spitter-nest-v8-t5-rampant", "fire-spitter-spawner-v8-t5-rampant"], - ["interno-spitter-nest-v8-t5-rampant", "interno-spitter-spawner-v8-t5-rampant"], - ["troll-biter-nest-v8-t5-rampant", "troll-biter-spawner-v8-t5-rampant"], - ["troll-spitter-nest-v8-t5-rampant", "troll-spitter-spawner-v8-t5-rampant"], - ["laser-biter-nest-v8-t5-rampant", "laser-biter-spawner-v8-t5-rampant"], - ["laser-spitter-nest-v8-t5-rampant", "laser-spitter-spawner-v8-t5-rampant"], - ["fast-biter-nest-v8-t5-rampant", "fast-biter-spawner-v8-t5-rampant"], - ["fast-spitter-nest-v8-t5-rampant", "fast-spitter-spawner-v8-t5-rampant"], - ["wasp-spitter-nest-v8-t5-rampant", "wasp-spitter-spawner-v8-t5-rampant"], - ["spawner-spitter-nest-v8-t5-rampant", "spawner-spitter-spawner-v8-t5-rampant"], - ["energy-thief-biter-nest-v8-t5-rampant", "energy-thief-biter-spawner-v8-t5-rampant"], - ["poison-biter-nest-v8-t5-rampant", "poison-biter-spawner-v8-t5-rampant"], - ["neutral-biter-nest-v9-t5-rampant", "neutral-biter-spawner-v9-t5-rampant"], - ["neutral-spitter-nest-v9-t5-rampant", "neutral-spitter-spawner-v9-t5-rampant"], - ["acid-biter-nest-v9-t5-rampant", "acid-biter-spawner-v9-t5-rampant"], - ["acid-spitter-nest-v9-t5-rampant", "acid-spitter-spawner-v9-t5-rampant"], - ["physical-biter-nest-v9-t5-rampant", "physical-biter-spawner-v9-t5-rampant"], - ["electric-biter-nest-v9-t5-rampant", "electric-biter-spawner-v9-t5-rampant"], - ["suicide-biter-nest-v9-t5-rampant", "suicide-biter-spawner-v9-t5-rampant"], - ["nuclear-biter-nest-v9-t5-rampant", "nuclear-biter-spawner-v9-t5-rampant"], - ["fire-biter-nest-v9-t5-rampant", "fire-biter-spawner-v9-t5-rampant"], - ["fire-spitter-nest-v9-t5-rampant", "fire-spitter-spawner-v9-t5-rampant"], - ["interno-spitter-nest-v9-t5-rampant", "interno-spitter-spawner-v9-t5-rampant"], - ["troll-biter-nest-v9-t5-rampant", "troll-biter-spawner-v9-t5-rampant"], - ["troll-spitter-nest-v9-t5-rampant", "troll-spitter-spawner-v9-t5-rampant"], - ["laser-biter-nest-v9-t5-rampant", "laser-biter-spawner-v9-t5-rampant"], - ["laser-spitter-nest-v9-t5-rampant", "laser-spitter-spawner-v9-t5-rampant"], - ["fast-biter-nest-v9-t5-rampant", "fast-biter-spawner-v9-t5-rampant"], - ["fast-spitter-nest-v9-t5-rampant", "fast-spitter-spawner-v9-t5-rampant"], - ["wasp-spitter-nest-v9-t5-rampant", "wasp-spitter-spawner-v9-t5-rampant"], - ["spawner-spitter-nest-v9-t5-rampant", "spawner-spitter-spawner-v9-t5-rampant"], - ["energy-thief-biter-nest-v9-t5-rampant", "energy-thief-biter-spawner-v9-t5-rampant"], - ["poison-biter-nest-v9-t5-rampant", "poison-biter-spawner-v9-t5-rampant"], - ["neutral-biter-nest-v10-t5-rampant", "neutral-biter-spawner-v10-t5-rampant"], - ["neutral-spitter-nest-v10-t5-rampant", "neutral-spitter-spawner-v10-t5-rampant"], - ["acid-biter-nest-v10-t5-rampant", "acid-biter-spawner-v10-t5-rampant"], - ["acid-spitter-nest-v10-t5-rampant", "acid-spitter-spawner-v10-t5-rampant"], - ["physical-biter-nest-v10-t5-rampant", "physical-biter-spawner-v10-t5-rampant"], - ["electric-biter-nest-v10-t5-rampant", "electric-biter-spawner-v10-t5-rampant"], - ["suicide-biter-nest-v10-t5-rampant", "suicide-biter-spawner-v10-t5-rampant"], - ["nuclear-biter-nest-v10-t5-rampant", "nuclear-biter-spawner-v10-t5-rampant"], - ["fire-biter-nest-v10-t5-rampant", "fire-biter-spawner-v10-t5-rampant"], - ["fire-spitter-nest-v10-t5-rampant", "fire-spitter-spawner-v10-t5-rampant"], - ["interno-spitter-nest-v10-t5-rampant", "interno-spitter-spawner-v10-t5-rampant"], - ["troll-biter-nest-v10-t5-rampant", "troll-biter-spawner-v10-t5-rampant"], - ["troll-spitter-nest-v10-t5-rampant", "troll-spitter-spawner-v10-t5-rampant"], - ["laser-biter-nest-v10-t5-rampant", "laser-biter-spawner-v10-t5-rampant"], - ["laser-spitter-nest-v10-t5-rampant", "laser-spitter-spawner-v10-t5-rampant"], - ["fast-biter-nest-v10-t5-rampant", "fast-biter-spawner-v10-t5-rampant"], - ["fast-spitter-nest-v10-t5-rampant", "fast-spitter-spawner-v10-t5-rampant"], - ["wasp-spitter-nest-v10-t5-rampant", "wasp-spitter-spawner-v10-t5-rampant"], - ["spawner-spitter-nest-v10-t5-rampant", "spawner-spitter-spawner-v10-t5-rampant"], - ["energy-thief-biter-nest-v10-t5-rampant", "energy-thief-biter-spawner-v10-t5-rampant"], - ["poison-biter-nest-v10-t5-rampant", "poison-biter-spawner-v10-t5-rampant"], - ["neutral-biter-nest-v11-t5-rampant", "neutral-biter-spawner-v11-t5-rampant"], - ["neutral-spitter-nest-v11-t5-rampant", "neutral-spitter-spawner-v11-t5-rampant"], - ["acid-biter-nest-v11-t5-rampant", "acid-biter-spawner-v11-t5-rampant"], - ["acid-spitter-nest-v11-t5-rampant", "acid-spitter-spawner-v11-t5-rampant"], - ["physical-biter-nest-v11-t5-rampant", "physical-biter-spawner-v11-t5-rampant"], - ["electric-biter-nest-v11-t5-rampant", "electric-biter-spawner-v11-t5-rampant"], - ["suicide-biter-nest-v11-t5-rampant", "suicide-biter-spawner-v11-t5-rampant"], - ["nuclear-biter-nest-v11-t5-rampant", "nuclear-biter-spawner-v11-t5-rampant"], - ["fire-biter-nest-v11-t5-rampant", "fire-biter-spawner-v11-t5-rampant"], - ["fire-spitter-nest-v11-t5-rampant", "fire-spitter-spawner-v11-t5-rampant"], - ["interno-spitter-nest-v11-t5-rampant", "interno-spitter-spawner-v11-t5-rampant"], - ["troll-biter-nest-v11-t5-rampant", "troll-biter-spawner-v11-t5-rampant"], - ["troll-spitter-nest-v11-t5-rampant", "troll-spitter-spawner-v11-t5-rampant"], - ["laser-biter-nest-v11-t5-rampant", "laser-biter-spawner-v11-t5-rampant"], - ["laser-spitter-nest-v11-t5-rampant", "laser-spitter-spawner-v11-t5-rampant"], - ["fast-biter-nest-v11-t5-rampant", "fast-biter-spawner-v11-t5-rampant"], - ["fast-spitter-nest-v11-t5-rampant", "fast-spitter-spawner-v11-t5-rampant"], - ["wasp-spitter-nest-v11-t5-rampant", "wasp-spitter-spawner-v11-t5-rampant"], - ["spawner-spitter-nest-v11-t5-rampant", "spawner-spitter-spawner-v11-t5-rampant"], - ["energy-thief-biter-nest-v11-t5-rampant", "energy-thief-biter-spawner-v11-t5-rampant"], - ["poison-biter-nest-v11-t5-rampant", "poison-biter-spawner-v11-t5-rampant"], - ["neutral-biter-nest-v12-t5-rampant", "neutral-biter-spawner-v12-t5-rampant"], - ["neutral-spitter-nest-v12-t5-rampant", "neutral-spitter-spawner-v12-t5-rampant"], - ["acid-biter-nest-v12-t5-rampant", "acid-biter-spawner-v12-t5-rampant"], - ["acid-spitter-nest-v12-t5-rampant", "acid-spitter-spawner-v12-t5-rampant"], - ["physical-biter-nest-v12-t5-rampant", "physical-biter-spawner-v12-t5-rampant"], - ["electric-biter-nest-v12-t5-rampant", "electric-biter-spawner-v12-t5-rampant"], - ["suicide-biter-nest-v12-t5-rampant", "suicide-biter-spawner-v12-t5-rampant"], - ["nuclear-biter-nest-v12-t5-rampant", "nuclear-biter-spawner-v12-t5-rampant"], - ["fire-biter-nest-v12-t5-rampant", "fire-biter-spawner-v12-t5-rampant"], - ["fire-spitter-nest-v12-t5-rampant", "fire-spitter-spawner-v12-t5-rampant"], - ["interno-spitter-nest-v12-t5-rampant", "interno-spitter-spawner-v12-t5-rampant"], - ["troll-biter-nest-v12-t5-rampant", "troll-biter-spawner-v12-t5-rampant"], - ["troll-spitter-nest-v12-t5-rampant", "troll-spitter-spawner-v12-t5-rampant"], - ["laser-biter-nest-v12-t5-rampant", "laser-biter-spawner-v12-t5-rampant"], - ["laser-spitter-nest-v12-t5-rampant", "laser-spitter-spawner-v12-t5-rampant"], - ["fast-biter-nest-v12-t5-rampant", "fast-biter-spawner-v12-t5-rampant"], - ["fast-spitter-nest-v12-t5-rampant", "fast-spitter-spawner-v12-t5-rampant"], - ["wasp-spitter-nest-v12-t5-rampant", "wasp-spitter-spawner-v12-t5-rampant"], - ["spawner-spitter-nest-v12-t5-rampant", "spawner-spitter-spawner-v12-t5-rampant"], - ["energy-thief-biter-nest-v12-t5-rampant", "energy-thief-biter-spawner-v12-t5-rampant"], - ["poison-biter-nest-v12-t5-rampant", "poison-biter-spawner-v12-t5-rampant"], - ["neutral-biter-nest-v13-t5-rampant", "neutral-biter-spawner-v13-t5-rampant"], - ["neutral-spitter-nest-v13-t5-rampant", "neutral-spitter-spawner-v13-t5-rampant"], - ["acid-biter-nest-v13-t5-rampant", "acid-biter-spawner-v13-t5-rampant"], - ["acid-spitter-nest-v13-t5-rampant", "acid-spitter-spawner-v13-t5-rampant"], - ["physical-biter-nest-v13-t5-rampant", "physical-biter-spawner-v13-t5-rampant"], - ["electric-biter-nest-v13-t5-rampant", "electric-biter-spawner-v13-t5-rampant"], - ["suicide-biter-nest-v13-t5-rampant", "suicide-biter-spawner-v13-t5-rampant"], - ["nuclear-biter-nest-v13-t5-rampant", "nuclear-biter-spawner-v13-t5-rampant"], - ["fire-biter-nest-v13-t5-rampant", "fire-biter-spawner-v13-t5-rampant"], - ["fire-spitter-nest-v13-t5-rampant", "fire-spitter-spawner-v13-t5-rampant"], - ["interno-spitter-nest-v13-t5-rampant", "interno-spitter-spawner-v13-t5-rampant"], - ["troll-biter-nest-v13-t5-rampant", "troll-biter-spawner-v13-t5-rampant"], - ["troll-spitter-nest-v13-t5-rampant", "troll-spitter-spawner-v13-t5-rampant"], - ["laser-biter-nest-v13-t5-rampant", "laser-biter-spawner-v13-t5-rampant"], - ["laser-spitter-nest-v13-t5-rampant", "laser-spitter-spawner-v13-t5-rampant"], - ["fast-biter-nest-v13-t5-rampant", "fast-biter-spawner-v13-t5-rampant"], - ["fast-spitter-nest-v13-t5-rampant", "fast-spitter-spawner-v13-t5-rampant"], - ["wasp-spitter-nest-v13-t5-rampant", "wasp-spitter-spawner-v13-t5-rampant"], - ["spawner-spitter-nest-v13-t5-rampant", "spawner-spitter-spawner-v13-t5-rampant"], - ["energy-thief-biter-nest-v13-t5-rampant", "energy-thief-biter-spawner-v13-t5-rampant"], - ["poison-biter-nest-v13-t5-rampant", "poison-biter-spawner-v13-t5-rampant"], - ["neutral-biter-nest-v14-t5-rampant", "neutral-biter-spawner-v14-t5-rampant"], - ["neutral-spitter-nest-v14-t5-rampant", "neutral-spitter-spawner-v14-t5-rampant"], - ["acid-biter-nest-v14-t5-rampant", "acid-biter-spawner-v14-t5-rampant"], - ["acid-spitter-nest-v14-t5-rampant", "acid-spitter-spawner-v14-t5-rampant"], - ["physical-biter-nest-v14-t5-rampant", "physical-biter-spawner-v14-t5-rampant"], - ["electric-biter-nest-v14-t5-rampant", "electric-biter-spawner-v14-t5-rampant"], - ["suicide-biter-nest-v14-t5-rampant", "suicide-biter-spawner-v14-t5-rampant"], - ["nuclear-biter-nest-v14-t5-rampant", "nuclear-biter-spawner-v14-t5-rampant"], - ["fire-biter-nest-v14-t5-rampant", "fire-biter-spawner-v14-t5-rampant"], - ["fire-spitter-nest-v14-t5-rampant", "fire-spitter-spawner-v14-t5-rampant"], - ["interno-spitter-nest-v14-t5-rampant", "interno-spitter-spawner-v14-t5-rampant"], - ["troll-biter-nest-v14-t5-rampant", "troll-biter-spawner-v14-t5-rampant"], - ["troll-spitter-nest-v14-t5-rampant", "troll-spitter-spawner-v14-t5-rampant"], - ["laser-biter-nest-v14-t5-rampant", "laser-biter-spawner-v14-t5-rampant"], - ["laser-spitter-nest-v14-t5-rampant", "laser-spitter-spawner-v14-t5-rampant"], - ["fast-biter-nest-v14-t5-rampant", "fast-biter-spawner-v14-t5-rampant"], - ["fast-spitter-nest-v14-t5-rampant", "fast-spitter-spawner-v14-t5-rampant"], - ["wasp-spitter-nest-v14-t5-rampant", "wasp-spitter-spawner-v14-t5-rampant"], - ["spawner-spitter-nest-v14-t5-rampant", "spawner-spitter-spawner-v14-t5-rampant"], - ["energy-thief-biter-nest-v14-t5-rampant", "energy-thief-biter-spawner-v14-t5-rampant"], - ["poison-biter-nest-v14-t5-rampant", "poison-biter-spawner-v14-t5-rampant"], - ["neutral-biter-nest-v15-t5-rampant", "neutral-biter-spawner-v15-t5-rampant"], - ["neutral-spitter-nest-v15-t5-rampant", "neutral-spitter-spawner-v15-t5-rampant"], - ["acid-biter-nest-v15-t5-rampant", "acid-biter-spawner-v15-t5-rampant"], - ["acid-spitter-nest-v15-t5-rampant", "acid-spitter-spawner-v15-t5-rampant"], - ["physical-biter-nest-v15-t5-rampant", "physical-biter-spawner-v15-t5-rampant"], - ["electric-biter-nest-v15-t5-rampant", "electric-biter-spawner-v15-t5-rampant"], - ["suicide-biter-nest-v15-t5-rampant", "suicide-biter-spawner-v15-t5-rampant"], - ["nuclear-biter-nest-v15-t5-rampant", "nuclear-biter-spawner-v15-t5-rampant"], - ["fire-biter-nest-v15-t5-rampant", "fire-biter-spawner-v15-t5-rampant"], - ["fire-spitter-nest-v15-t5-rampant", "fire-spitter-spawner-v15-t5-rampant"], - ["interno-spitter-nest-v15-t5-rampant", "interno-spitter-spawner-v15-t5-rampant"], - ["troll-biter-nest-v15-t5-rampant", "troll-biter-spawner-v15-t5-rampant"], - ["troll-spitter-nest-v15-t5-rampant", "troll-spitter-spawner-v15-t5-rampant"], - ["laser-biter-nest-v15-t5-rampant", "laser-biter-spawner-v15-t5-rampant"], - ["laser-spitter-nest-v15-t5-rampant", "laser-spitter-spawner-v15-t5-rampant"], - ["fast-biter-nest-v15-t5-rampant", "fast-biter-spawner-v15-t5-rampant"], - ["fast-spitter-nest-v15-t5-rampant", "fast-spitter-spawner-v15-t5-rampant"], - ["wasp-spitter-nest-v15-t5-rampant", "wasp-spitter-spawner-v15-t5-rampant"], - ["spawner-spitter-nest-v15-t5-rampant", "spawner-spitter-spawner-v15-t5-rampant"], - ["energy-thief-biter-nest-v15-t5-rampant", "energy-thief-biter-spawner-v15-t5-rampant"], - ["poison-biter-nest-v15-t5-rampant", "poison-biter-spawner-v15-t5-rampant"], - ["neutral-biter-nest-v16-t5-rampant", "neutral-biter-spawner-v16-t5-rampant"], - ["neutral-spitter-nest-v16-t5-rampant", "neutral-spitter-spawner-v16-t5-rampant"], - ["acid-biter-nest-v16-t5-rampant", "acid-biter-spawner-v16-t5-rampant"], - ["acid-spitter-nest-v16-t5-rampant", "acid-spitter-spawner-v16-t5-rampant"], - ["physical-biter-nest-v16-t5-rampant", "physical-biter-spawner-v16-t5-rampant"], - ["electric-biter-nest-v16-t5-rampant", "electric-biter-spawner-v16-t5-rampant"], - ["suicide-biter-nest-v16-t5-rampant", "suicide-biter-spawner-v16-t5-rampant"], - ["nuclear-biter-nest-v16-t5-rampant", "nuclear-biter-spawner-v16-t5-rampant"], - ["fire-biter-nest-v16-t5-rampant", "fire-biter-spawner-v16-t5-rampant"], - ["fire-spitter-nest-v16-t5-rampant", "fire-spitter-spawner-v16-t5-rampant"], - ["interno-spitter-nest-v16-t5-rampant", "interno-spitter-spawner-v16-t5-rampant"], - ["troll-biter-nest-v16-t5-rampant", "troll-biter-spawner-v16-t5-rampant"], - ["troll-spitter-nest-v16-t5-rampant", "troll-spitter-spawner-v16-t5-rampant"], - ["laser-biter-nest-v16-t5-rampant", "laser-biter-spawner-v16-t5-rampant"], - ["laser-spitter-nest-v16-t5-rampant", "laser-spitter-spawner-v16-t5-rampant"], - ["fast-biter-nest-v16-t5-rampant", "fast-biter-spawner-v16-t5-rampant"], - ["fast-spitter-nest-v16-t5-rampant", "fast-spitter-spawner-v16-t5-rampant"], - ["wasp-spitter-nest-v16-t5-rampant", "wasp-spitter-spawner-v16-t5-rampant"], - ["spawner-spitter-nest-v16-t5-rampant", "spawner-spitter-spawner-v16-t5-rampant"], - ["energy-thief-biter-nest-v16-t5-rampant", "energy-thief-biter-spawner-v16-t5-rampant"], - ["poison-biter-nest-v16-t5-rampant", "poison-biter-spawner-v16-t5-rampant"], - ["neutral-biter-nest-v17-t5-rampant", "neutral-biter-spawner-v17-t5-rampant"], - ["neutral-spitter-nest-v17-t5-rampant", "neutral-spitter-spawner-v17-t5-rampant"], - ["acid-biter-nest-v17-t5-rampant", "acid-biter-spawner-v17-t5-rampant"], - ["acid-spitter-nest-v17-t5-rampant", "acid-spitter-spawner-v17-t5-rampant"], - ["physical-biter-nest-v17-t5-rampant", "physical-biter-spawner-v17-t5-rampant"], - ["electric-biter-nest-v17-t5-rampant", "electric-biter-spawner-v17-t5-rampant"], - ["suicide-biter-nest-v17-t5-rampant", "suicide-biter-spawner-v17-t5-rampant"], - ["nuclear-biter-nest-v17-t5-rampant", "nuclear-biter-spawner-v17-t5-rampant"], - ["fire-biter-nest-v17-t5-rampant", "fire-biter-spawner-v17-t5-rampant"], - ["fire-spitter-nest-v17-t5-rampant", "fire-spitter-spawner-v17-t5-rampant"], - ["interno-spitter-nest-v17-t5-rampant", "interno-spitter-spawner-v17-t5-rampant"], - ["troll-biter-nest-v17-t5-rampant", "troll-biter-spawner-v17-t5-rampant"], - ["troll-spitter-nest-v17-t5-rampant", "troll-spitter-spawner-v17-t5-rampant"], - ["laser-biter-nest-v17-t5-rampant", "laser-biter-spawner-v17-t5-rampant"], - ["laser-spitter-nest-v17-t5-rampant", "laser-spitter-spawner-v17-t5-rampant"], - ["fast-biter-nest-v17-t5-rampant", "fast-biter-spawner-v17-t5-rampant"], - ["fast-spitter-nest-v17-t5-rampant", "fast-spitter-spawner-v17-t5-rampant"], - ["wasp-spitter-nest-v17-t5-rampant", "wasp-spitter-spawner-v17-t5-rampant"], - ["spawner-spitter-nest-v17-t5-rampant", "spawner-spitter-spawner-v17-t5-rampant"], - ["energy-thief-biter-nest-v17-t5-rampant", "energy-thief-biter-spawner-v17-t5-rampant"], - ["poison-biter-nest-v17-t5-rampant", "poison-biter-spawner-v17-t5-rampant"], - ["neutral-biter-nest-v18-t5-rampant", "neutral-biter-spawner-v18-t5-rampant"], - ["neutral-spitter-nest-v18-t5-rampant", "neutral-spitter-spawner-v18-t5-rampant"], - ["acid-biter-nest-v18-t5-rampant", "acid-biter-spawner-v18-t5-rampant"], - ["acid-spitter-nest-v18-t5-rampant", "acid-spitter-spawner-v18-t5-rampant"], - ["physical-biter-nest-v18-t5-rampant", "physical-biter-spawner-v18-t5-rampant"], - ["electric-biter-nest-v18-t5-rampant", "electric-biter-spawner-v18-t5-rampant"], - ["suicide-biter-nest-v18-t5-rampant", "suicide-biter-spawner-v18-t5-rampant"], - ["nuclear-biter-nest-v18-t5-rampant", "nuclear-biter-spawner-v18-t5-rampant"], - ["fire-biter-nest-v18-t5-rampant", "fire-biter-spawner-v18-t5-rampant"], - ["fire-spitter-nest-v18-t5-rampant", "fire-spitter-spawner-v18-t5-rampant"], - ["interno-spitter-nest-v18-t5-rampant", "interno-spitter-spawner-v18-t5-rampant"], - ["troll-biter-nest-v18-t5-rampant", "troll-biter-spawner-v18-t5-rampant"], - ["troll-spitter-nest-v18-t5-rampant", "troll-spitter-spawner-v18-t5-rampant"], - ["laser-biter-nest-v18-t5-rampant", "laser-biter-spawner-v18-t5-rampant"], - ["laser-spitter-nest-v18-t5-rampant", "laser-spitter-spawner-v18-t5-rampant"], - ["fast-biter-nest-v18-t5-rampant", "fast-biter-spawner-v18-t5-rampant"], - ["fast-spitter-nest-v18-t5-rampant", "fast-spitter-spawner-v18-t5-rampant"], - ["wasp-spitter-nest-v18-t5-rampant", "wasp-spitter-spawner-v18-t5-rampant"], - ["spawner-spitter-nest-v18-t5-rampant", "spawner-spitter-spawner-v18-t5-rampant"], - ["energy-thief-biter-nest-v18-t5-rampant", "energy-thief-biter-spawner-v18-t5-rampant"], - ["poison-biter-nest-v18-t5-rampant", "poison-biter-spawner-v18-t5-rampant"], - ["neutral-biter-nest-v19-t5-rampant", "neutral-biter-spawner-v19-t5-rampant"], - ["neutral-spitter-nest-v19-t5-rampant", "neutral-spitter-spawner-v19-t5-rampant"], - ["acid-biter-nest-v19-t5-rampant", "acid-biter-spawner-v19-t5-rampant"], - ["acid-spitter-nest-v19-t5-rampant", "acid-spitter-spawner-v19-t5-rampant"], - ["physical-biter-nest-v19-t5-rampant", "physical-biter-spawner-v19-t5-rampant"], - ["electric-biter-nest-v19-t5-rampant", "electric-biter-spawner-v19-t5-rampant"], - ["suicide-biter-nest-v19-t5-rampant", "suicide-biter-spawner-v19-t5-rampant"], - ["nuclear-biter-nest-v19-t5-rampant", "nuclear-biter-spawner-v19-t5-rampant"], - ["fire-biter-nest-v19-t5-rampant", "fire-biter-spawner-v19-t5-rampant"], - ["fire-spitter-nest-v19-t5-rampant", "fire-spitter-spawner-v19-t5-rampant"], - ["interno-spitter-nest-v19-t5-rampant", "interno-spitter-spawner-v19-t5-rampant"], - ["troll-biter-nest-v19-t5-rampant", "troll-biter-spawner-v19-t5-rampant"], - ["troll-spitter-nest-v19-t5-rampant", "troll-spitter-spawner-v19-t5-rampant"], - ["laser-biter-nest-v19-t5-rampant", "laser-biter-spawner-v19-t5-rampant"], - ["laser-spitter-nest-v19-t5-rampant", "laser-spitter-spawner-v19-t5-rampant"], - ["fast-biter-nest-v19-t5-rampant", "fast-biter-spawner-v19-t5-rampant"], - ["fast-spitter-nest-v19-t5-rampant", "fast-spitter-spawner-v19-t5-rampant"], - ["wasp-spitter-nest-v19-t5-rampant", "wasp-spitter-spawner-v19-t5-rampant"], - ["spawner-spitter-nest-v19-t5-rampant", "spawner-spitter-spawner-v19-t5-rampant"], - ["energy-thief-biter-nest-v19-t5-rampant", "energy-thief-biter-spawner-v19-t5-rampant"], - ["poison-biter-nest-v19-t5-rampant", "poison-biter-spawner-v19-t5-rampant"], - ["neutral-biter-nest-v20-t5-rampant", "neutral-biter-spawner-v20-t5-rampant"], - ["neutral-spitter-nest-v20-t5-rampant", "neutral-spitter-spawner-v20-t5-rampant"], - ["acid-biter-nest-v20-t5-rampant", "acid-biter-spawner-v20-t5-rampant"], - ["acid-spitter-nest-v20-t5-rampant", "acid-spitter-spawner-v20-t5-rampant"], - ["physical-biter-nest-v20-t5-rampant", "physical-biter-spawner-v20-t5-rampant"], - ["electric-biter-nest-v20-t5-rampant", "electric-biter-spawner-v20-t5-rampant"], - ["suicide-biter-nest-v20-t5-rampant", "suicide-biter-spawner-v20-t5-rampant"], - ["nuclear-biter-nest-v20-t5-rampant", "nuclear-biter-spawner-v20-t5-rampant"], - ["fire-biter-nest-v20-t5-rampant", "fire-biter-spawner-v20-t5-rampant"], - ["fire-spitter-nest-v20-t5-rampant", "fire-spitter-spawner-v20-t5-rampant"], - ["interno-spitter-nest-v20-t5-rampant", "interno-spitter-spawner-v20-t5-rampant"], - ["troll-biter-nest-v20-t5-rampant", "troll-biter-spawner-v20-t5-rampant"], - ["troll-spitter-nest-v20-t5-rampant", "troll-spitter-spawner-v20-t5-rampant"], - ["laser-biter-nest-v20-t5-rampant", "laser-biter-spawner-v20-t5-rampant"], - ["laser-spitter-nest-v20-t5-rampant", "laser-spitter-spawner-v20-t5-rampant"], - ["fast-biter-nest-v20-t5-rampant", "fast-biter-spawner-v20-t5-rampant"], - ["fast-spitter-nest-v20-t5-rampant", "fast-spitter-spawner-v20-t5-rampant"], - ["wasp-spitter-nest-v20-t5-rampant", "wasp-spitter-spawner-v20-t5-rampant"], - ["spawner-spitter-nest-v20-t5-rampant", "spawner-spitter-spawner-v20-t5-rampant"], - ["energy-thief-biter-nest-v20-t5-rampant", "energy-thief-biter-spawner-v20-t5-rampant"], - ["poison-biter-nest-v20-t5-rampant", "poison-biter-spawner-v20-t5-rampant"], - ["neutral-biter-nest-v1-t6-rampant", "neutral-biter-spawner-v1-t6-rampant"], - ["neutral-spitter-nest-v1-t6-rampant", "neutral-spitter-spawner-v1-t6-rampant"], - ["acid-biter-nest-v1-t6-rampant", "acid-biter-spawner-v1-t6-rampant"], - ["acid-spitter-nest-v1-t6-rampant", "acid-spitter-spawner-v1-t6-rampant"], - ["physical-biter-nest-v1-t6-rampant", "physical-biter-spawner-v1-t6-rampant"], - ["electric-biter-nest-v1-t6-rampant", "electric-biter-spawner-v1-t6-rampant"], - ["suicide-biter-nest-v1-t6-rampant", "suicide-biter-spawner-v1-t6-rampant"], - ["nuclear-biter-nest-v1-t6-rampant", "nuclear-biter-spawner-v1-t6-rampant"], - ["fire-biter-nest-v1-t6-rampant", "fire-biter-spawner-v1-t6-rampant"], - ["fire-spitter-nest-v1-t6-rampant", "fire-spitter-spawner-v1-t6-rampant"], - ["interno-spitter-nest-v1-t6-rampant", "interno-spitter-spawner-v1-t6-rampant"], - ["troll-biter-nest-v1-t6-rampant", "troll-biter-spawner-v1-t6-rampant"], - ["troll-spitter-nest-v1-t6-rampant", "troll-spitter-spawner-v1-t6-rampant"], - ["laser-biter-nest-v1-t6-rampant", "laser-biter-spawner-v1-t6-rampant"], - ["laser-spitter-nest-v1-t6-rampant", "laser-spitter-spawner-v1-t6-rampant"], - ["fast-biter-nest-v1-t6-rampant", "fast-biter-spawner-v1-t6-rampant"], - ["fast-spitter-nest-v1-t6-rampant", "fast-spitter-spawner-v1-t6-rampant"], - ["wasp-spitter-nest-v1-t6-rampant", "wasp-spitter-spawner-v1-t6-rampant"], - ["spawner-spitter-nest-v1-t6-rampant", "spawner-spitter-spawner-v1-t6-rampant"], - ["energy-thief-biter-nest-v1-t6-rampant", "energy-thief-biter-spawner-v1-t6-rampant"], - ["poison-biter-nest-v1-t6-rampant", "poison-biter-spawner-v1-t6-rampant"], - ["neutral-biter-nest-v2-t6-rampant", "neutral-biter-spawner-v2-t6-rampant"], - ["neutral-spitter-nest-v2-t6-rampant", "neutral-spitter-spawner-v2-t6-rampant"], - ["acid-biter-nest-v2-t6-rampant", "acid-biter-spawner-v2-t6-rampant"], - ["acid-spitter-nest-v2-t6-rampant", "acid-spitter-spawner-v2-t6-rampant"], - ["physical-biter-nest-v2-t6-rampant", "physical-biter-spawner-v2-t6-rampant"], - ["electric-biter-nest-v2-t6-rampant", "electric-biter-spawner-v2-t6-rampant"], - ["suicide-biter-nest-v2-t6-rampant", "suicide-biter-spawner-v2-t6-rampant"], - ["nuclear-biter-nest-v2-t6-rampant", "nuclear-biter-spawner-v2-t6-rampant"], - ["fire-biter-nest-v2-t6-rampant", "fire-biter-spawner-v2-t6-rampant"], - ["fire-spitter-nest-v2-t6-rampant", "fire-spitter-spawner-v2-t6-rampant"], - ["interno-spitter-nest-v2-t6-rampant", "interno-spitter-spawner-v2-t6-rampant"], - ["troll-biter-nest-v2-t6-rampant", "troll-biter-spawner-v2-t6-rampant"], - ["troll-spitter-nest-v2-t6-rampant", "troll-spitter-spawner-v2-t6-rampant"], - ["laser-biter-nest-v2-t6-rampant", "laser-biter-spawner-v2-t6-rampant"], - ["laser-spitter-nest-v2-t6-rampant", "laser-spitter-spawner-v2-t6-rampant"], - ["fast-biter-nest-v2-t6-rampant", "fast-biter-spawner-v2-t6-rampant"], - ["fast-spitter-nest-v2-t6-rampant", "fast-spitter-spawner-v2-t6-rampant"], - ["wasp-spitter-nest-v2-t6-rampant", "wasp-spitter-spawner-v2-t6-rampant"], - ["spawner-spitter-nest-v2-t6-rampant", "spawner-spitter-spawner-v2-t6-rampant"], - ["energy-thief-biter-nest-v2-t6-rampant", "energy-thief-biter-spawner-v2-t6-rampant"], - ["poison-biter-nest-v2-t6-rampant", "poison-biter-spawner-v2-t6-rampant"], - ["neutral-biter-nest-v3-t6-rampant", "neutral-biter-spawner-v3-t6-rampant"], - ["neutral-spitter-nest-v3-t6-rampant", "neutral-spitter-spawner-v3-t6-rampant"], - ["acid-biter-nest-v3-t6-rampant", "acid-biter-spawner-v3-t6-rampant"], - ["acid-spitter-nest-v3-t6-rampant", "acid-spitter-spawner-v3-t6-rampant"], - ["physical-biter-nest-v3-t6-rampant", "physical-biter-spawner-v3-t6-rampant"], - ["electric-biter-nest-v3-t6-rampant", "electric-biter-spawner-v3-t6-rampant"], - ["suicide-biter-nest-v3-t6-rampant", "suicide-biter-spawner-v3-t6-rampant"], - ["nuclear-biter-nest-v3-t6-rampant", "nuclear-biter-spawner-v3-t6-rampant"], - ["fire-biter-nest-v3-t6-rampant", "fire-biter-spawner-v3-t6-rampant"], - ["fire-spitter-nest-v3-t6-rampant", "fire-spitter-spawner-v3-t6-rampant"], - ["interno-spitter-nest-v3-t6-rampant", "interno-spitter-spawner-v3-t6-rampant"], - ["troll-biter-nest-v3-t6-rampant", "troll-biter-spawner-v3-t6-rampant"], - ["troll-spitter-nest-v3-t6-rampant", "troll-spitter-spawner-v3-t6-rampant"], - ["laser-biter-nest-v3-t6-rampant", "laser-biter-spawner-v3-t6-rampant"], - ["laser-spitter-nest-v3-t6-rampant", "laser-spitter-spawner-v3-t6-rampant"], - ["fast-biter-nest-v3-t6-rampant", "fast-biter-spawner-v3-t6-rampant"], - ["fast-spitter-nest-v3-t6-rampant", "fast-spitter-spawner-v3-t6-rampant"], - ["wasp-spitter-nest-v3-t6-rampant", "wasp-spitter-spawner-v3-t6-rampant"], - ["spawner-spitter-nest-v3-t6-rampant", "spawner-spitter-spawner-v3-t6-rampant"], - ["energy-thief-biter-nest-v3-t6-rampant", "energy-thief-biter-spawner-v3-t6-rampant"], - ["poison-biter-nest-v3-t6-rampant", "poison-biter-spawner-v3-t6-rampant"], - ["neutral-biter-nest-v4-t6-rampant", "neutral-biter-spawner-v4-t6-rampant"], - ["neutral-spitter-nest-v4-t6-rampant", "neutral-spitter-spawner-v4-t6-rampant"], - ["acid-biter-nest-v4-t6-rampant", "acid-biter-spawner-v4-t6-rampant"], - ["acid-spitter-nest-v4-t6-rampant", "acid-spitter-spawner-v4-t6-rampant"], - ["physical-biter-nest-v4-t6-rampant", "physical-biter-spawner-v4-t6-rampant"], - ["electric-biter-nest-v4-t6-rampant", "electric-biter-spawner-v4-t6-rampant"], - ["suicide-biter-nest-v4-t6-rampant", "suicide-biter-spawner-v4-t6-rampant"], - ["nuclear-biter-nest-v4-t6-rampant", "nuclear-biter-spawner-v4-t6-rampant"], - ["fire-biter-nest-v4-t6-rampant", "fire-biter-spawner-v4-t6-rampant"], - ["fire-spitter-nest-v4-t6-rampant", "fire-spitter-spawner-v4-t6-rampant"], - ["interno-spitter-nest-v4-t6-rampant", "interno-spitter-spawner-v4-t6-rampant"], - ["troll-biter-nest-v4-t6-rampant", "troll-biter-spawner-v4-t6-rampant"], - ["troll-spitter-nest-v4-t6-rampant", "troll-spitter-spawner-v4-t6-rampant"], - ["laser-biter-nest-v4-t6-rampant", "laser-biter-spawner-v4-t6-rampant"], - ["laser-spitter-nest-v4-t6-rampant", "laser-spitter-spawner-v4-t6-rampant"], - ["fast-biter-nest-v4-t6-rampant", "fast-biter-spawner-v4-t6-rampant"], - ["fast-spitter-nest-v4-t6-rampant", "fast-spitter-spawner-v4-t6-rampant"], - ["wasp-spitter-nest-v4-t6-rampant", "wasp-spitter-spawner-v4-t6-rampant"], - ["spawner-spitter-nest-v4-t6-rampant", "spawner-spitter-spawner-v4-t6-rampant"], - ["energy-thief-biter-nest-v4-t6-rampant", "energy-thief-biter-spawner-v4-t6-rampant"], - ["poison-biter-nest-v4-t6-rampant", "poison-biter-spawner-v4-t6-rampant"], - ["neutral-biter-nest-v5-t6-rampant", "neutral-biter-spawner-v5-t6-rampant"], - ["neutral-spitter-nest-v5-t6-rampant", "neutral-spitter-spawner-v5-t6-rampant"], - ["acid-biter-nest-v5-t6-rampant", "acid-biter-spawner-v5-t6-rampant"], - ["acid-spitter-nest-v5-t6-rampant", "acid-spitter-spawner-v5-t6-rampant"], - ["physical-biter-nest-v5-t6-rampant", "physical-biter-spawner-v5-t6-rampant"], - ["electric-biter-nest-v5-t6-rampant", "electric-biter-spawner-v5-t6-rampant"], - ["suicide-biter-nest-v5-t6-rampant", "suicide-biter-spawner-v5-t6-rampant"], - ["nuclear-biter-nest-v5-t6-rampant", "nuclear-biter-spawner-v5-t6-rampant"], - ["fire-biter-nest-v5-t6-rampant", "fire-biter-spawner-v5-t6-rampant"], - ["fire-spitter-nest-v5-t6-rampant", "fire-spitter-spawner-v5-t6-rampant"], - ["interno-spitter-nest-v5-t6-rampant", "interno-spitter-spawner-v5-t6-rampant"], - ["troll-biter-nest-v5-t6-rampant", "troll-biter-spawner-v5-t6-rampant"], - ["troll-spitter-nest-v5-t6-rampant", "troll-spitter-spawner-v5-t6-rampant"], - ["laser-biter-nest-v5-t6-rampant", "laser-biter-spawner-v5-t6-rampant"], - ["laser-spitter-nest-v5-t6-rampant", "laser-spitter-spawner-v5-t6-rampant"], - ["fast-biter-nest-v5-t6-rampant", "fast-biter-spawner-v5-t6-rampant"], - ["fast-spitter-nest-v5-t6-rampant", "fast-spitter-spawner-v5-t6-rampant"], - ["wasp-spitter-nest-v5-t6-rampant", "wasp-spitter-spawner-v5-t6-rampant"], - ["spawner-spitter-nest-v5-t6-rampant", "spawner-spitter-spawner-v5-t6-rampant"], - ["energy-thief-biter-nest-v5-t6-rampant", "energy-thief-biter-spawner-v5-t6-rampant"], - ["poison-biter-nest-v5-t6-rampant", "poison-biter-spawner-v5-t6-rampant"], - ["neutral-biter-nest-v6-t6-rampant", "neutral-biter-spawner-v6-t6-rampant"], - ["neutral-spitter-nest-v6-t6-rampant", "neutral-spitter-spawner-v6-t6-rampant"], - ["acid-biter-nest-v6-t6-rampant", "acid-biter-spawner-v6-t6-rampant"], - ["acid-spitter-nest-v6-t6-rampant", "acid-spitter-spawner-v6-t6-rampant"], - ["physical-biter-nest-v6-t6-rampant", "physical-biter-spawner-v6-t6-rampant"], - ["electric-biter-nest-v6-t6-rampant", "electric-biter-spawner-v6-t6-rampant"], - ["suicide-biter-nest-v6-t6-rampant", "suicide-biter-spawner-v6-t6-rampant"], - ["nuclear-biter-nest-v6-t6-rampant", "nuclear-biter-spawner-v6-t6-rampant"], - ["fire-biter-nest-v6-t6-rampant", "fire-biter-spawner-v6-t6-rampant"], - ["fire-spitter-nest-v6-t6-rampant", "fire-spitter-spawner-v6-t6-rampant"], - ["interno-spitter-nest-v6-t6-rampant", "interno-spitter-spawner-v6-t6-rampant"], - ["troll-biter-nest-v6-t6-rampant", "troll-biter-spawner-v6-t6-rampant"], - ["troll-spitter-nest-v6-t6-rampant", "troll-spitter-spawner-v6-t6-rampant"], - ["laser-biter-nest-v6-t6-rampant", "laser-biter-spawner-v6-t6-rampant"], - ["laser-spitter-nest-v6-t6-rampant", "laser-spitter-spawner-v6-t6-rampant"], - ["fast-biter-nest-v6-t6-rampant", "fast-biter-spawner-v6-t6-rampant"], - ["fast-spitter-nest-v6-t6-rampant", "fast-spitter-spawner-v6-t6-rampant"], - ["wasp-spitter-nest-v6-t6-rampant", "wasp-spitter-spawner-v6-t6-rampant"], - ["spawner-spitter-nest-v6-t6-rampant", "spawner-spitter-spawner-v6-t6-rampant"], - ["energy-thief-biter-nest-v6-t6-rampant", "energy-thief-biter-spawner-v6-t6-rampant"], - ["poison-biter-nest-v6-t6-rampant", "poison-biter-spawner-v6-t6-rampant"], - ["neutral-biter-nest-v7-t6-rampant", "neutral-biter-spawner-v7-t6-rampant"], - ["neutral-spitter-nest-v7-t6-rampant", "neutral-spitter-spawner-v7-t6-rampant"], - ["acid-biter-nest-v7-t6-rampant", "acid-biter-spawner-v7-t6-rampant"], - ["acid-spitter-nest-v7-t6-rampant", "acid-spitter-spawner-v7-t6-rampant"], - ["physical-biter-nest-v7-t6-rampant", "physical-biter-spawner-v7-t6-rampant"], - ["electric-biter-nest-v7-t6-rampant", "electric-biter-spawner-v7-t6-rampant"], - ["suicide-biter-nest-v7-t6-rampant", "suicide-biter-spawner-v7-t6-rampant"], - ["nuclear-biter-nest-v7-t6-rampant", "nuclear-biter-spawner-v7-t6-rampant"], - ["fire-biter-nest-v7-t6-rampant", "fire-biter-spawner-v7-t6-rampant"], - ["fire-spitter-nest-v7-t6-rampant", "fire-spitter-spawner-v7-t6-rampant"], - ["interno-spitter-nest-v7-t6-rampant", "interno-spitter-spawner-v7-t6-rampant"], - ["troll-biter-nest-v7-t6-rampant", "troll-biter-spawner-v7-t6-rampant"], - ["troll-spitter-nest-v7-t6-rampant", "troll-spitter-spawner-v7-t6-rampant"], - ["laser-biter-nest-v7-t6-rampant", "laser-biter-spawner-v7-t6-rampant"], - ["laser-spitter-nest-v7-t6-rampant", "laser-spitter-spawner-v7-t6-rampant"], - ["fast-biter-nest-v7-t6-rampant", "fast-biter-spawner-v7-t6-rampant"], - ["fast-spitter-nest-v7-t6-rampant", "fast-spitter-spawner-v7-t6-rampant"], - ["wasp-spitter-nest-v7-t6-rampant", "wasp-spitter-spawner-v7-t6-rampant"], - ["spawner-spitter-nest-v7-t6-rampant", "spawner-spitter-spawner-v7-t6-rampant"], - ["energy-thief-biter-nest-v7-t6-rampant", "energy-thief-biter-spawner-v7-t6-rampant"], - ["poison-biter-nest-v7-t6-rampant", "poison-biter-spawner-v7-t6-rampant"], - ["neutral-biter-nest-v8-t6-rampant", "neutral-biter-spawner-v8-t6-rampant"], - ["neutral-spitter-nest-v8-t6-rampant", "neutral-spitter-spawner-v8-t6-rampant"], - ["acid-biter-nest-v8-t6-rampant", "acid-biter-spawner-v8-t6-rampant"], - ["acid-spitter-nest-v8-t6-rampant", "acid-spitter-spawner-v8-t6-rampant"], - ["physical-biter-nest-v8-t6-rampant", "physical-biter-spawner-v8-t6-rampant"], - ["electric-biter-nest-v8-t6-rampant", "electric-biter-spawner-v8-t6-rampant"], - ["suicide-biter-nest-v8-t6-rampant", "suicide-biter-spawner-v8-t6-rampant"], - ["nuclear-biter-nest-v8-t6-rampant", "nuclear-biter-spawner-v8-t6-rampant"], - ["fire-biter-nest-v8-t6-rampant", "fire-biter-spawner-v8-t6-rampant"], - ["fire-spitter-nest-v8-t6-rampant", "fire-spitter-spawner-v8-t6-rampant"], - ["interno-spitter-nest-v8-t6-rampant", "interno-spitter-spawner-v8-t6-rampant"], - ["troll-biter-nest-v8-t6-rampant", "troll-biter-spawner-v8-t6-rampant"], - ["troll-spitter-nest-v8-t6-rampant", "troll-spitter-spawner-v8-t6-rampant"], - ["laser-biter-nest-v8-t6-rampant", "laser-biter-spawner-v8-t6-rampant"], - ["laser-spitter-nest-v8-t6-rampant", "laser-spitter-spawner-v8-t6-rampant"], - ["fast-biter-nest-v8-t6-rampant", "fast-biter-spawner-v8-t6-rampant"], - ["fast-spitter-nest-v8-t6-rampant", "fast-spitter-spawner-v8-t6-rampant"], - ["wasp-spitter-nest-v8-t6-rampant", "wasp-spitter-spawner-v8-t6-rampant"], - ["spawner-spitter-nest-v8-t6-rampant", "spawner-spitter-spawner-v8-t6-rampant"], - ["energy-thief-biter-nest-v8-t6-rampant", "energy-thief-biter-spawner-v8-t6-rampant"], - ["poison-biter-nest-v8-t6-rampant", "poison-biter-spawner-v8-t6-rampant"], - ["neutral-biter-nest-v9-t6-rampant", "neutral-biter-spawner-v9-t6-rampant"], - ["neutral-spitter-nest-v9-t6-rampant", "neutral-spitter-spawner-v9-t6-rampant"], - ["acid-biter-nest-v9-t6-rampant", "acid-biter-spawner-v9-t6-rampant"], - ["acid-spitter-nest-v9-t6-rampant", "acid-spitter-spawner-v9-t6-rampant"], - ["physical-biter-nest-v9-t6-rampant", "physical-biter-spawner-v9-t6-rampant"], - ["electric-biter-nest-v9-t6-rampant", "electric-biter-spawner-v9-t6-rampant"], - ["suicide-biter-nest-v9-t6-rampant", "suicide-biter-spawner-v9-t6-rampant"], - ["nuclear-biter-nest-v9-t6-rampant", "nuclear-biter-spawner-v9-t6-rampant"], - ["fire-biter-nest-v9-t6-rampant", "fire-biter-spawner-v9-t6-rampant"], - ["fire-spitter-nest-v9-t6-rampant", "fire-spitter-spawner-v9-t6-rampant"], - ["interno-spitter-nest-v9-t6-rampant", "interno-spitter-spawner-v9-t6-rampant"], - ["troll-biter-nest-v9-t6-rampant", "troll-biter-spawner-v9-t6-rampant"], - ["troll-spitter-nest-v9-t6-rampant", "troll-spitter-spawner-v9-t6-rampant"], - ["laser-biter-nest-v9-t6-rampant", "laser-biter-spawner-v9-t6-rampant"], - ["laser-spitter-nest-v9-t6-rampant", "laser-spitter-spawner-v9-t6-rampant"], - ["fast-biter-nest-v9-t6-rampant", "fast-biter-spawner-v9-t6-rampant"], - ["fast-spitter-nest-v9-t6-rampant", "fast-spitter-spawner-v9-t6-rampant"], - ["wasp-spitter-nest-v9-t6-rampant", "wasp-spitter-spawner-v9-t6-rampant"], - ["spawner-spitter-nest-v9-t6-rampant", "spawner-spitter-spawner-v9-t6-rampant"], - ["energy-thief-biter-nest-v9-t6-rampant", "energy-thief-biter-spawner-v9-t6-rampant"], - ["poison-biter-nest-v9-t6-rampant", "poison-biter-spawner-v9-t6-rampant"], - ["neutral-biter-nest-v10-t6-rampant", "neutral-biter-spawner-v10-t6-rampant"], - ["neutral-spitter-nest-v10-t6-rampant", "neutral-spitter-spawner-v10-t6-rampant"], - ["acid-biter-nest-v10-t6-rampant", "acid-biter-spawner-v10-t6-rampant"], - ["acid-spitter-nest-v10-t6-rampant", "acid-spitter-spawner-v10-t6-rampant"], - ["physical-biter-nest-v10-t6-rampant", "physical-biter-spawner-v10-t6-rampant"], - ["electric-biter-nest-v10-t6-rampant", "electric-biter-spawner-v10-t6-rampant"], - ["suicide-biter-nest-v10-t6-rampant", "suicide-biter-spawner-v10-t6-rampant"], - ["nuclear-biter-nest-v10-t6-rampant", "nuclear-biter-spawner-v10-t6-rampant"], - ["fire-biter-nest-v10-t6-rampant", "fire-biter-spawner-v10-t6-rampant"], - ["fire-spitter-nest-v10-t6-rampant", "fire-spitter-spawner-v10-t6-rampant"], - ["interno-spitter-nest-v10-t6-rampant", "interno-spitter-spawner-v10-t6-rampant"], - ["troll-biter-nest-v10-t6-rampant", "troll-biter-spawner-v10-t6-rampant"], - ["troll-spitter-nest-v10-t6-rampant", "troll-spitter-spawner-v10-t6-rampant"], - ["laser-biter-nest-v10-t6-rampant", "laser-biter-spawner-v10-t6-rampant"], - ["laser-spitter-nest-v10-t6-rampant", "laser-spitter-spawner-v10-t6-rampant"], - ["fast-biter-nest-v10-t6-rampant", "fast-biter-spawner-v10-t6-rampant"], - ["fast-spitter-nest-v10-t6-rampant", "fast-spitter-spawner-v10-t6-rampant"], - ["wasp-spitter-nest-v10-t6-rampant", "wasp-spitter-spawner-v10-t6-rampant"], - ["spawner-spitter-nest-v10-t6-rampant", "spawner-spitter-spawner-v10-t6-rampant"], - ["energy-thief-biter-nest-v10-t6-rampant", "energy-thief-biter-spawner-v10-t6-rampant"], - ["poison-biter-nest-v10-t6-rampant", "poison-biter-spawner-v10-t6-rampant"], - ["neutral-biter-nest-v11-t6-rampant", "neutral-biter-spawner-v11-t6-rampant"], - ["neutral-spitter-nest-v11-t6-rampant", "neutral-spitter-spawner-v11-t6-rampant"], - ["acid-biter-nest-v11-t6-rampant", "acid-biter-spawner-v11-t6-rampant"], - ["acid-spitter-nest-v11-t6-rampant", "acid-spitter-spawner-v11-t6-rampant"], - ["physical-biter-nest-v11-t6-rampant", "physical-biter-spawner-v11-t6-rampant"], - ["electric-biter-nest-v11-t6-rampant", "electric-biter-spawner-v11-t6-rampant"], - ["suicide-biter-nest-v11-t6-rampant", "suicide-biter-spawner-v11-t6-rampant"], - ["nuclear-biter-nest-v11-t6-rampant", "nuclear-biter-spawner-v11-t6-rampant"], - ["fire-biter-nest-v11-t6-rampant", "fire-biter-spawner-v11-t6-rampant"], - ["fire-spitter-nest-v11-t6-rampant", "fire-spitter-spawner-v11-t6-rampant"], - ["interno-spitter-nest-v11-t6-rampant", "interno-spitter-spawner-v11-t6-rampant"], - ["troll-biter-nest-v11-t6-rampant", "troll-biter-spawner-v11-t6-rampant"], - ["troll-spitter-nest-v11-t6-rampant", "troll-spitter-spawner-v11-t6-rampant"], - ["laser-biter-nest-v11-t6-rampant", "laser-biter-spawner-v11-t6-rampant"], - ["laser-spitter-nest-v11-t6-rampant", "laser-spitter-spawner-v11-t6-rampant"], - ["fast-biter-nest-v11-t6-rampant", "fast-biter-spawner-v11-t6-rampant"], - ["fast-spitter-nest-v11-t6-rampant", "fast-spitter-spawner-v11-t6-rampant"], - ["wasp-spitter-nest-v11-t6-rampant", "wasp-spitter-spawner-v11-t6-rampant"], - ["spawner-spitter-nest-v11-t6-rampant", "spawner-spitter-spawner-v11-t6-rampant"], - ["energy-thief-biter-nest-v11-t6-rampant", "energy-thief-biter-spawner-v11-t6-rampant"], - ["poison-biter-nest-v11-t6-rampant", "poison-biter-spawner-v11-t6-rampant"], - ["neutral-biter-nest-v12-t6-rampant", "neutral-biter-spawner-v12-t6-rampant"], - ["neutral-spitter-nest-v12-t6-rampant", "neutral-spitter-spawner-v12-t6-rampant"], - ["acid-biter-nest-v12-t6-rampant", "acid-biter-spawner-v12-t6-rampant"], - ["acid-spitter-nest-v12-t6-rampant", "acid-spitter-spawner-v12-t6-rampant"], - ["physical-biter-nest-v12-t6-rampant", "physical-biter-spawner-v12-t6-rampant"], - ["electric-biter-nest-v12-t6-rampant", "electric-biter-spawner-v12-t6-rampant"], - ["suicide-biter-nest-v12-t6-rampant", "suicide-biter-spawner-v12-t6-rampant"], - ["nuclear-biter-nest-v12-t6-rampant", "nuclear-biter-spawner-v12-t6-rampant"], - ["fire-biter-nest-v12-t6-rampant", "fire-biter-spawner-v12-t6-rampant"], - ["fire-spitter-nest-v12-t6-rampant", "fire-spitter-spawner-v12-t6-rampant"], - ["interno-spitter-nest-v12-t6-rampant", "interno-spitter-spawner-v12-t6-rampant"], - ["troll-biter-nest-v12-t6-rampant", "troll-biter-spawner-v12-t6-rampant"], - ["troll-spitter-nest-v12-t6-rampant", "troll-spitter-spawner-v12-t6-rampant"], - ["laser-biter-nest-v12-t6-rampant", "laser-biter-spawner-v12-t6-rampant"], - ["laser-spitter-nest-v12-t6-rampant", "laser-spitter-spawner-v12-t6-rampant"], - ["fast-biter-nest-v12-t6-rampant", "fast-biter-spawner-v12-t6-rampant"], - ["fast-spitter-nest-v12-t6-rampant", "fast-spitter-spawner-v12-t6-rampant"], - ["wasp-spitter-nest-v12-t6-rampant", "wasp-spitter-spawner-v12-t6-rampant"], - ["spawner-spitter-nest-v12-t6-rampant", "spawner-spitter-spawner-v12-t6-rampant"], - ["energy-thief-biter-nest-v12-t6-rampant", "energy-thief-biter-spawner-v12-t6-rampant"], - ["poison-biter-nest-v12-t6-rampant", "poison-biter-spawner-v12-t6-rampant"], - ["neutral-biter-nest-v13-t6-rampant", "neutral-biter-spawner-v13-t6-rampant"], - ["neutral-spitter-nest-v13-t6-rampant", "neutral-spitter-spawner-v13-t6-rampant"], - ["acid-biter-nest-v13-t6-rampant", "acid-biter-spawner-v13-t6-rampant"], - ["acid-spitter-nest-v13-t6-rampant", "acid-spitter-spawner-v13-t6-rampant"], - ["physical-biter-nest-v13-t6-rampant", "physical-biter-spawner-v13-t6-rampant"], - ["electric-biter-nest-v13-t6-rampant", "electric-biter-spawner-v13-t6-rampant"], - ["suicide-biter-nest-v13-t6-rampant", "suicide-biter-spawner-v13-t6-rampant"], - ["nuclear-biter-nest-v13-t6-rampant", "nuclear-biter-spawner-v13-t6-rampant"], - ["fire-biter-nest-v13-t6-rampant", "fire-biter-spawner-v13-t6-rampant"], - ["fire-spitter-nest-v13-t6-rampant", "fire-spitter-spawner-v13-t6-rampant"], - ["interno-spitter-nest-v13-t6-rampant", "interno-spitter-spawner-v13-t6-rampant"], - ["troll-biter-nest-v13-t6-rampant", "troll-biter-spawner-v13-t6-rampant"], - ["troll-spitter-nest-v13-t6-rampant", "troll-spitter-spawner-v13-t6-rampant"], - ["laser-biter-nest-v13-t6-rampant", "laser-biter-spawner-v13-t6-rampant"], - ["laser-spitter-nest-v13-t6-rampant", "laser-spitter-spawner-v13-t6-rampant"], - ["fast-biter-nest-v13-t6-rampant", "fast-biter-spawner-v13-t6-rampant"], - ["fast-spitter-nest-v13-t6-rampant", "fast-spitter-spawner-v13-t6-rampant"], - ["wasp-spitter-nest-v13-t6-rampant", "wasp-spitter-spawner-v13-t6-rampant"], - ["spawner-spitter-nest-v13-t6-rampant", "spawner-spitter-spawner-v13-t6-rampant"], - ["energy-thief-biter-nest-v13-t6-rampant", "energy-thief-biter-spawner-v13-t6-rampant"], - ["poison-biter-nest-v13-t6-rampant", "poison-biter-spawner-v13-t6-rampant"], - ["neutral-biter-nest-v14-t6-rampant", "neutral-biter-spawner-v14-t6-rampant"], - ["neutral-spitter-nest-v14-t6-rampant", "neutral-spitter-spawner-v14-t6-rampant"], - ["acid-biter-nest-v14-t6-rampant", "acid-biter-spawner-v14-t6-rampant"], - ["acid-spitter-nest-v14-t6-rampant", "acid-spitter-spawner-v14-t6-rampant"], - ["physical-biter-nest-v14-t6-rampant", "physical-biter-spawner-v14-t6-rampant"], - ["electric-biter-nest-v14-t6-rampant", "electric-biter-spawner-v14-t6-rampant"], - ["suicide-biter-nest-v14-t6-rampant", "suicide-biter-spawner-v14-t6-rampant"], - ["nuclear-biter-nest-v14-t6-rampant", "nuclear-biter-spawner-v14-t6-rampant"], - ["fire-biter-nest-v14-t6-rampant", "fire-biter-spawner-v14-t6-rampant"], - ["fire-spitter-nest-v14-t6-rampant", "fire-spitter-spawner-v14-t6-rampant"], - ["interno-spitter-nest-v14-t6-rampant", "interno-spitter-spawner-v14-t6-rampant"], - ["troll-biter-nest-v14-t6-rampant", "troll-biter-spawner-v14-t6-rampant"], - ["troll-spitter-nest-v14-t6-rampant", "troll-spitter-spawner-v14-t6-rampant"], - ["laser-biter-nest-v14-t6-rampant", "laser-biter-spawner-v14-t6-rampant"], - ["laser-spitter-nest-v14-t6-rampant", "laser-spitter-spawner-v14-t6-rampant"], - ["fast-biter-nest-v14-t6-rampant", "fast-biter-spawner-v14-t6-rampant"], - ["fast-spitter-nest-v14-t6-rampant", "fast-spitter-spawner-v14-t6-rampant"], - ["wasp-spitter-nest-v14-t6-rampant", "wasp-spitter-spawner-v14-t6-rampant"], - ["spawner-spitter-nest-v14-t6-rampant", "spawner-spitter-spawner-v14-t6-rampant"], - ["energy-thief-biter-nest-v14-t6-rampant", "energy-thief-biter-spawner-v14-t6-rampant"], - ["poison-biter-nest-v14-t6-rampant", "poison-biter-spawner-v14-t6-rampant"], - ["neutral-biter-nest-v15-t6-rampant", "neutral-biter-spawner-v15-t6-rampant"], - ["neutral-spitter-nest-v15-t6-rampant", "neutral-spitter-spawner-v15-t6-rampant"], - ["acid-biter-nest-v15-t6-rampant", "acid-biter-spawner-v15-t6-rampant"], - ["acid-spitter-nest-v15-t6-rampant", "acid-spitter-spawner-v15-t6-rampant"], - ["physical-biter-nest-v15-t6-rampant", "physical-biter-spawner-v15-t6-rampant"], - ["electric-biter-nest-v15-t6-rampant", "electric-biter-spawner-v15-t6-rampant"], - ["suicide-biter-nest-v15-t6-rampant", "suicide-biter-spawner-v15-t6-rampant"], - ["nuclear-biter-nest-v15-t6-rampant", "nuclear-biter-spawner-v15-t6-rampant"], - ["fire-biter-nest-v15-t6-rampant", "fire-biter-spawner-v15-t6-rampant"], - ["fire-spitter-nest-v15-t6-rampant", "fire-spitter-spawner-v15-t6-rampant"], - ["interno-spitter-nest-v15-t6-rampant", "interno-spitter-spawner-v15-t6-rampant"], - ["troll-biter-nest-v15-t6-rampant", "troll-biter-spawner-v15-t6-rampant"], - ["troll-spitter-nest-v15-t6-rampant", "troll-spitter-spawner-v15-t6-rampant"], - ["laser-biter-nest-v15-t6-rampant", "laser-biter-spawner-v15-t6-rampant"], - ["laser-spitter-nest-v15-t6-rampant", "laser-spitter-spawner-v15-t6-rampant"], - ["fast-biter-nest-v15-t6-rampant", "fast-biter-spawner-v15-t6-rampant"], - ["fast-spitter-nest-v15-t6-rampant", "fast-spitter-spawner-v15-t6-rampant"], - ["wasp-spitter-nest-v15-t6-rampant", "wasp-spitter-spawner-v15-t6-rampant"], - ["spawner-spitter-nest-v15-t6-rampant", "spawner-spitter-spawner-v15-t6-rampant"], - ["energy-thief-biter-nest-v15-t6-rampant", "energy-thief-biter-spawner-v15-t6-rampant"], - ["poison-biter-nest-v15-t6-rampant", "poison-biter-spawner-v15-t6-rampant"], - ["neutral-biter-nest-v16-t6-rampant", "neutral-biter-spawner-v16-t6-rampant"], - ["neutral-spitter-nest-v16-t6-rampant", "neutral-spitter-spawner-v16-t6-rampant"], - ["acid-biter-nest-v16-t6-rampant", "acid-biter-spawner-v16-t6-rampant"], - ["acid-spitter-nest-v16-t6-rampant", "acid-spitter-spawner-v16-t6-rampant"], - ["physical-biter-nest-v16-t6-rampant", "physical-biter-spawner-v16-t6-rampant"], - ["electric-biter-nest-v16-t6-rampant", "electric-biter-spawner-v16-t6-rampant"], - ["suicide-biter-nest-v16-t6-rampant", "suicide-biter-spawner-v16-t6-rampant"], - ["nuclear-biter-nest-v16-t6-rampant", "nuclear-biter-spawner-v16-t6-rampant"], - ["fire-biter-nest-v16-t6-rampant", "fire-biter-spawner-v16-t6-rampant"], - ["fire-spitter-nest-v16-t6-rampant", "fire-spitter-spawner-v16-t6-rampant"], - ["interno-spitter-nest-v16-t6-rampant", "interno-spitter-spawner-v16-t6-rampant"], - ["troll-biter-nest-v16-t6-rampant", "troll-biter-spawner-v16-t6-rampant"], - ["troll-spitter-nest-v16-t6-rampant", "troll-spitter-spawner-v16-t6-rampant"], - ["laser-biter-nest-v16-t6-rampant", "laser-biter-spawner-v16-t6-rampant"], - ["laser-spitter-nest-v16-t6-rampant", "laser-spitter-spawner-v16-t6-rampant"], - ["fast-biter-nest-v16-t6-rampant", "fast-biter-spawner-v16-t6-rampant"], - ["fast-spitter-nest-v16-t6-rampant", "fast-spitter-spawner-v16-t6-rampant"], - ["wasp-spitter-nest-v16-t6-rampant", "wasp-spitter-spawner-v16-t6-rampant"], - ["spawner-spitter-nest-v16-t6-rampant", "spawner-spitter-spawner-v16-t6-rampant"], - ["energy-thief-biter-nest-v16-t6-rampant", "energy-thief-biter-spawner-v16-t6-rampant"], - ["poison-biter-nest-v16-t6-rampant", "poison-biter-spawner-v16-t6-rampant"], - ["neutral-biter-nest-v17-t6-rampant", "neutral-biter-spawner-v17-t6-rampant"], - ["neutral-spitter-nest-v17-t6-rampant", "neutral-spitter-spawner-v17-t6-rampant"], - ["acid-biter-nest-v17-t6-rampant", "acid-biter-spawner-v17-t6-rampant"], - ["acid-spitter-nest-v17-t6-rampant", "acid-spitter-spawner-v17-t6-rampant"], - ["physical-biter-nest-v17-t6-rampant", "physical-biter-spawner-v17-t6-rampant"], - ["electric-biter-nest-v17-t6-rampant", "electric-biter-spawner-v17-t6-rampant"], - ["suicide-biter-nest-v17-t6-rampant", "suicide-biter-spawner-v17-t6-rampant"], - ["nuclear-biter-nest-v17-t6-rampant", "nuclear-biter-spawner-v17-t6-rampant"], - ["fire-biter-nest-v17-t6-rampant", "fire-biter-spawner-v17-t6-rampant"], - ["fire-spitter-nest-v17-t6-rampant", "fire-spitter-spawner-v17-t6-rampant"], - ["interno-spitter-nest-v17-t6-rampant", "interno-spitter-spawner-v17-t6-rampant"], - ["troll-biter-nest-v17-t6-rampant", "troll-biter-spawner-v17-t6-rampant"], - ["troll-spitter-nest-v17-t6-rampant", "troll-spitter-spawner-v17-t6-rampant"], - ["laser-biter-nest-v17-t6-rampant", "laser-biter-spawner-v17-t6-rampant"], - ["laser-spitter-nest-v17-t6-rampant", "laser-spitter-spawner-v17-t6-rampant"], - ["fast-biter-nest-v17-t6-rampant", "fast-biter-spawner-v17-t6-rampant"], - ["fast-spitter-nest-v17-t6-rampant", "fast-spitter-spawner-v17-t6-rampant"], - ["wasp-spitter-nest-v17-t6-rampant", "wasp-spitter-spawner-v17-t6-rampant"], - ["spawner-spitter-nest-v17-t6-rampant", "spawner-spitter-spawner-v17-t6-rampant"], - ["energy-thief-biter-nest-v17-t6-rampant", "energy-thief-biter-spawner-v17-t6-rampant"], - ["poison-biter-nest-v17-t6-rampant", "poison-biter-spawner-v17-t6-rampant"], - ["neutral-biter-nest-v18-t6-rampant", "neutral-biter-spawner-v18-t6-rampant"], - ["neutral-spitter-nest-v18-t6-rampant", "neutral-spitter-spawner-v18-t6-rampant"], - ["acid-biter-nest-v18-t6-rampant", "acid-biter-spawner-v18-t6-rampant"], - ["acid-spitter-nest-v18-t6-rampant", "acid-spitter-spawner-v18-t6-rampant"], - ["physical-biter-nest-v18-t6-rampant", "physical-biter-spawner-v18-t6-rampant"], - ["electric-biter-nest-v18-t6-rampant", "electric-biter-spawner-v18-t6-rampant"], - ["suicide-biter-nest-v18-t6-rampant", "suicide-biter-spawner-v18-t6-rampant"], - ["nuclear-biter-nest-v18-t6-rampant", "nuclear-biter-spawner-v18-t6-rampant"], - ["fire-biter-nest-v18-t6-rampant", "fire-biter-spawner-v18-t6-rampant"], - ["fire-spitter-nest-v18-t6-rampant", "fire-spitter-spawner-v18-t6-rampant"], - ["interno-spitter-nest-v18-t6-rampant", "interno-spitter-spawner-v18-t6-rampant"], - ["troll-biter-nest-v18-t6-rampant", "troll-biter-spawner-v18-t6-rampant"], - ["troll-spitter-nest-v18-t6-rampant", "troll-spitter-spawner-v18-t6-rampant"], - ["laser-biter-nest-v18-t6-rampant", "laser-biter-spawner-v18-t6-rampant"], - ["laser-spitter-nest-v18-t6-rampant", "laser-spitter-spawner-v18-t6-rampant"], - ["fast-biter-nest-v18-t6-rampant", "fast-biter-spawner-v18-t6-rampant"], - ["fast-spitter-nest-v18-t6-rampant", "fast-spitter-spawner-v18-t6-rampant"], - ["wasp-spitter-nest-v18-t6-rampant", "wasp-spitter-spawner-v18-t6-rampant"], - ["spawner-spitter-nest-v18-t6-rampant", "spawner-spitter-spawner-v18-t6-rampant"], - ["energy-thief-biter-nest-v18-t6-rampant", "energy-thief-biter-spawner-v18-t6-rampant"], - ["poison-biter-nest-v18-t6-rampant", "poison-biter-spawner-v18-t6-rampant"], - ["neutral-biter-nest-v19-t6-rampant", "neutral-biter-spawner-v19-t6-rampant"], - ["neutral-spitter-nest-v19-t6-rampant", "neutral-spitter-spawner-v19-t6-rampant"], - ["acid-biter-nest-v19-t6-rampant", "acid-biter-spawner-v19-t6-rampant"], - ["acid-spitter-nest-v19-t6-rampant", "acid-spitter-spawner-v19-t6-rampant"], - ["physical-biter-nest-v19-t6-rampant", "physical-biter-spawner-v19-t6-rampant"], - ["electric-biter-nest-v19-t6-rampant", "electric-biter-spawner-v19-t6-rampant"], - ["suicide-biter-nest-v19-t6-rampant", "suicide-biter-spawner-v19-t6-rampant"], - ["nuclear-biter-nest-v19-t6-rampant", "nuclear-biter-spawner-v19-t6-rampant"], - ["fire-biter-nest-v19-t6-rampant", "fire-biter-spawner-v19-t6-rampant"], - ["fire-spitter-nest-v19-t6-rampant", "fire-spitter-spawner-v19-t6-rampant"], - ["interno-spitter-nest-v19-t6-rampant", "interno-spitter-spawner-v19-t6-rampant"], - ["troll-biter-nest-v19-t6-rampant", "troll-biter-spawner-v19-t6-rampant"], - ["troll-spitter-nest-v19-t6-rampant", "troll-spitter-spawner-v19-t6-rampant"], - ["laser-biter-nest-v19-t6-rampant", "laser-biter-spawner-v19-t6-rampant"], - ["laser-spitter-nest-v19-t6-rampant", "laser-spitter-spawner-v19-t6-rampant"], - ["fast-biter-nest-v19-t6-rampant", "fast-biter-spawner-v19-t6-rampant"], - ["fast-spitter-nest-v19-t6-rampant", "fast-spitter-spawner-v19-t6-rampant"], - ["wasp-spitter-nest-v19-t6-rampant", "wasp-spitter-spawner-v19-t6-rampant"], - ["spawner-spitter-nest-v19-t6-rampant", "spawner-spitter-spawner-v19-t6-rampant"], - ["energy-thief-biter-nest-v19-t6-rampant", "energy-thief-biter-spawner-v19-t6-rampant"], - ["poison-biter-nest-v19-t6-rampant", "poison-biter-spawner-v19-t6-rampant"], - ["neutral-biter-nest-v20-t6-rampant", "neutral-biter-spawner-v20-t6-rampant"], - ["neutral-spitter-nest-v20-t6-rampant", "neutral-spitter-spawner-v20-t6-rampant"], - ["acid-biter-nest-v20-t6-rampant", "acid-biter-spawner-v20-t6-rampant"], - ["acid-spitter-nest-v20-t6-rampant", "acid-spitter-spawner-v20-t6-rampant"], - ["physical-biter-nest-v20-t6-rampant", "physical-biter-spawner-v20-t6-rampant"], - ["electric-biter-nest-v20-t6-rampant", "electric-biter-spawner-v20-t6-rampant"], - ["suicide-biter-nest-v20-t6-rampant", "suicide-biter-spawner-v20-t6-rampant"], - ["nuclear-biter-nest-v20-t6-rampant", "nuclear-biter-spawner-v20-t6-rampant"], - ["fire-biter-nest-v20-t6-rampant", "fire-biter-spawner-v20-t6-rampant"], - ["fire-spitter-nest-v20-t6-rampant", "fire-spitter-spawner-v20-t6-rampant"], - ["interno-spitter-nest-v20-t6-rampant", "interno-spitter-spawner-v20-t6-rampant"], - ["troll-biter-nest-v20-t6-rampant", "troll-biter-spawner-v20-t6-rampant"], - ["troll-spitter-nest-v20-t6-rampant", "troll-spitter-spawner-v20-t6-rampant"], - ["laser-biter-nest-v20-t6-rampant", "laser-biter-spawner-v20-t6-rampant"], - ["laser-spitter-nest-v20-t6-rampant", "laser-spitter-spawner-v20-t6-rampant"], - ["fast-biter-nest-v20-t6-rampant", "fast-biter-spawner-v20-t6-rampant"], - ["fast-spitter-nest-v20-t6-rampant", "fast-spitter-spawner-v20-t6-rampant"], - ["wasp-spitter-nest-v20-t6-rampant", "wasp-spitter-spawner-v20-t6-rampant"], - ["spawner-spitter-nest-v20-t6-rampant", "spawner-spitter-spawner-v20-t6-rampant"], - ["energy-thief-biter-nest-v20-t6-rampant", "energy-thief-biter-spawner-v20-t6-rampant"], - ["poison-biter-nest-v20-t6-rampant", "poison-biter-spawner-v20-t6-rampant"], - ["neutral-biter-nest-v1-t7-rampant", "neutral-biter-spawner-v1-t7-rampant"], - ["neutral-spitter-nest-v1-t7-rampant", "neutral-spitter-spawner-v1-t7-rampant"], - ["acid-biter-nest-v1-t7-rampant", "acid-biter-spawner-v1-t7-rampant"], - ["acid-spitter-nest-v1-t7-rampant", "acid-spitter-spawner-v1-t7-rampant"], - ["physical-biter-nest-v1-t7-rampant", "physical-biter-spawner-v1-t7-rampant"], - ["electric-biter-nest-v1-t7-rampant", "electric-biter-spawner-v1-t7-rampant"], - ["suicide-biter-nest-v1-t7-rampant", "suicide-biter-spawner-v1-t7-rampant"], - ["nuclear-biter-nest-v1-t7-rampant", "nuclear-biter-spawner-v1-t7-rampant"], - ["fire-biter-nest-v1-t7-rampant", "fire-biter-spawner-v1-t7-rampant"], - ["fire-spitter-nest-v1-t7-rampant", "fire-spitter-spawner-v1-t7-rampant"], - ["interno-spitter-nest-v1-t7-rampant", "interno-spitter-spawner-v1-t7-rampant"], - ["troll-biter-nest-v1-t7-rampant", "troll-biter-spawner-v1-t7-rampant"], - ["troll-spitter-nest-v1-t7-rampant", "troll-spitter-spawner-v1-t7-rampant"], - ["laser-biter-nest-v1-t7-rampant", "laser-biter-spawner-v1-t7-rampant"], - ["laser-spitter-nest-v1-t7-rampant", "laser-spitter-spawner-v1-t7-rampant"], - ["fast-biter-nest-v1-t7-rampant", "fast-biter-spawner-v1-t7-rampant"], - ["fast-spitter-nest-v1-t7-rampant", "fast-spitter-spawner-v1-t7-rampant"], - ["wasp-spitter-nest-v1-t7-rampant", "wasp-spitter-spawner-v1-t7-rampant"], - ["spawner-spitter-nest-v1-t7-rampant", "spawner-spitter-spawner-v1-t7-rampant"], - ["energy-thief-biter-nest-v1-t7-rampant", "energy-thief-biter-spawner-v1-t7-rampant"], - ["poison-biter-nest-v1-t7-rampant", "poison-biter-spawner-v1-t7-rampant"], - ["neutral-biter-nest-v2-t7-rampant", "neutral-biter-spawner-v2-t7-rampant"], - ["neutral-spitter-nest-v2-t7-rampant", "neutral-spitter-spawner-v2-t7-rampant"], - ["acid-biter-nest-v2-t7-rampant", "acid-biter-spawner-v2-t7-rampant"], - ["acid-spitter-nest-v2-t7-rampant", "acid-spitter-spawner-v2-t7-rampant"], - ["physical-biter-nest-v2-t7-rampant", "physical-biter-spawner-v2-t7-rampant"], - ["electric-biter-nest-v2-t7-rampant", "electric-biter-spawner-v2-t7-rampant"], - ["suicide-biter-nest-v2-t7-rampant", "suicide-biter-spawner-v2-t7-rampant"], - ["nuclear-biter-nest-v2-t7-rampant", "nuclear-biter-spawner-v2-t7-rampant"], - ["fire-biter-nest-v2-t7-rampant", "fire-biter-spawner-v2-t7-rampant"], - ["fire-spitter-nest-v2-t7-rampant", "fire-spitter-spawner-v2-t7-rampant"], - ["interno-spitter-nest-v2-t7-rampant", "interno-spitter-spawner-v2-t7-rampant"], - ["troll-biter-nest-v2-t7-rampant", "troll-biter-spawner-v2-t7-rampant"], - ["troll-spitter-nest-v2-t7-rampant", "troll-spitter-spawner-v2-t7-rampant"], - ["laser-biter-nest-v2-t7-rampant", "laser-biter-spawner-v2-t7-rampant"], - ["laser-spitter-nest-v2-t7-rampant", "laser-spitter-spawner-v2-t7-rampant"], - ["fast-biter-nest-v2-t7-rampant", "fast-biter-spawner-v2-t7-rampant"], - ["fast-spitter-nest-v2-t7-rampant", "fast-spitter-spawner-v2-t7-rampant"], - ["wasp-spitter-nest-v2-t7-rampant", "wasp-spitter-spawner-v2-t7-rampant"], - ["spawner-spitter-nest-v2-t7-rampant", "spawner-spitter-spawner-v2-t7-rampant"], - ["energy-thief-biter-nest-v2-t7-rampant", "energy-thief-biter-spawner-v2-t7-rampant"], - ["poison-biter-nest-v2-t7-rampant", "poison-biter-spawner-v2-t7-rampant"], - ["neutral-biter-nest-v3-t7-rampant", "neutral-biter-spawner-v3-t7-rampant"], - ["neutral-spitter-nest-v3-t7-rampant", "neutral-spitter-spawner-v3-t7-rampant"], - ["acid-biter-nest-v3-t7-rampant", "acid-biter-spawner-v3-t7-rampant"], - ["acid-spitter-nest-v3-t7-rampant", "acid-spitter-spawner-v3-t7-rampant"], - ["physical-biter-nest-v3-t7-rampant", "physical-biter-spawner-v3-t7-rampant"], - ["electric-biter-nest-v3-t7-rampant", "electric-biter-spawner-v3-t7-rampant"], - ["suicide-biter-nest-v3-t7-rampant", "suicide-biter-spawner-v3-t7-rampant"], - ["nuclear-biter-nest-v3-t7-rampant", "nuclear-biter-spawner-v3-t7-rampant"], - ["fire-biter-nest-v3-t7-rampant", "fire-biter-spawner-v3-t7-rampant"], - ["fire-spitter-nest-v3-t7-rampant", "fire-spitter-spawner-v3-t7-rampant"], - ["interno-spitter-nest-v3-t7-rampant", "interno-spitter-spawner-v3-t7-rampant"], - ["troll-biter-nest-v3-t7-rampant", "troll-biter-spawner-v3-t7-rampant"], - ["troll-spitter-nest-v3-t7-rampant", "troll-spitter-spawner-v3-t7-rampant"], - ["laser-biter-nest-v3-t7-rampant", "laser-biter-spawner-v3-t7-rampant"], - ["laser-spitter-nest-v3-t7-rampant", "laser-spitter-spawner-v3-t7-rampant"], - ["fast-biter-nest-v3-t7-rampant", "fast-biter-spawner-v3-t7-rampant"], - ["fast-spitter-nest-v3-t7-rampant", "fast-spitter-spawner-v3-t7-rampant"], - ["wasp-spitter-nest-v3-t7-rampant", "wasp-spitter-spawner-v3-t7-rampant"], - ["spawner-spitter-nest-v3-t7-rampant", "spawner-spitter-spawner-v3-t7-rampant"], - ["energy-thief-biter-nest-v3-t7-rampant", "energy-thief-biter-spawner-v3-t7-rampant"], - ["poison-biter-nest-v3-t7-rampant", "poison-biter-spawner-v3-t7-rampant"], - ["neutral-biter-nest-v4-t7-rampant", "neutral-biter-spawner-v4-t7-rampant"], - ["neutral-spitter-nest-v4-t7-rampant", "neutral-spitter-spawner-v4-t7-rampant"], - ["acid-biter-nest-v4-t7-rampant", "acid-biter-spawner-v4-t7-rampant"], - ["acid-spitter-nest-v4-t7-rampant", "acid-spitter-spawner-v4-t7-rampant"], - ["physical-biter-nest-v4-t7-rampant", "physical-biter-spawner-v4-t7-rampant"], - ["electric-biter-nest-v4-t7-rampant", "electric-biter-spawner-v4-t7-rampant"], - ["suicide-biter-nest-v4-t7-rampant", "suicide-biter-spawner-v4-t7-rampant"], - ["nuclear-biter-nest-v4-t7-rampant", "nuclear-biter-spawner-v4-t7-rampant"], - ["fire-biter-nest-v4-t7-rampant", "fire-biter-spawner-v4-t7-rampant"], - ["fire-spitter-nest-v4-t7-rampant", "fire-spitter-spawner-v4-t7-rampant"], - ["interno-spitter-nest-v4-t7-rampant", "interno-spitter-spawner-v4-t7-rampant"], - ["troll-biter-nest-v4-t7-rampant", "troll-biter-spawner-v4-t7-rampant"], - ["troll-spitter-nest-v4-t7-rampant", "troll-spitter-spawner-v4-t7-rampant"], - ["laser-biter-nest-v4-t7-rampant", "laser-biter-spawner-v4-t7-rampant"], - ["laser-spitter-nest-v4-t7-rampant", "laser-spitter-spawner-v4-t7-rampant"], - ["fast-biter-nest-v4-t7-rampant", "fast-biter-spawner-v4-t7-rampant"], - ["fast-spitter-nest-v4-t7-rampant", "fast-spitter-spawner-v4-t7-rampant"], - ["wasp-spitter-nest-v4-t7-rampant", "wasp-spitter-spawner-v4-t7-rampant"], - ["spawner-spitter-nest-v4-t7-rampant", "spawner-spitter-spawner-v4-t7-rampant"], - ["energy-thief-biter-nest-v4-t7-rampant", "energy-thief-biter-spawner-v4-t7-rampant"], - ["poison-biter-nest-v4-t7-rampant", "poison-biter-spawner-v4-t7-rampant"], - ["neutral-biter-nest-v5-t7-rampant", "neutral-biter-spawner-v5-t7-rampant"], - ["neutral-spitter-nest-v5-t7-rampant", "neutral-spitter-spawner-v5-t7-rampant"], - ["acid-biter-nest-v5-t7-rampant", "acid-biter-spawner-v5-t7-rampant"], - ["acid-spitter-nest-v5-t7-rampant", "acid-spitter-spawner-v5-t7-rampant"], - ["physical-biter-nest-v5-t7-rampant", "physical-biter-spawner-v5-t7-rampant"], - ["electric-biter-nest-v5-t7-rampant", "electric-biter-spawner-v5-t7-rampant"], - ["suicide-biter-nest-v5-t7-rampant", "suicide-biter-spawner-v5-t7-rampant"], - ["nuclear-biter-nest-v5-t7-rampant", "nuclear-biter-spawner-v5-t7-rampant"], - ["fire-biter-nest-v5-t7-rampant", "fire-biter-spawner-v5-t7-rampant"], - ["fire-spitter-nest-v5-t7-rampant", "fire-spitter-spawner-v5-t7-rampant"], - ["interno-spitter-nest-v5-t7-rampant", "interno-spitter-spawner-v5-t7-rampant"], - ["troll-biter-nest-v5-t7-rampant", "troll-biter-spawner-v5-t7-rampant"], - ["troll-spitter-nest-v5-t7-rampant", "troll-spitter-spawner-v5-t7-rampant"], - ["laser-biter-nest-v5-t7-rampant", "laser-biter-spawner-v5-t7-rampant"], - ["laser-spitter-nest-v5-t7-rampant", "laser-spitter-spawner-v5-t7-rampant"], - ["fast-biter-nest-v5-t7-rampant", "fast-biter-spawner-v5-t7-rampant"], - ["fast-spitter-nest-v5-t7-rampant", "fast-spitter-spawner-v5-t7-rampant"], - ["wasp-spitter-nest-v5-t7-rampant", "wasp-spitter-spawner-v5-t7-rampant"], - ["spawner-spitter-nest-v5-t7-rampant", "spawner-spitter-spawner-v5-t7-rampant"], - ["energy-thief-biter-nest-v5-t7-rampant", "energy-thief-biter-spawner-v5-t7-rampant"], - ["poison-biter-nest-v5-t7-rampant", "poison-biter-spawner-v5-t7-rampant"], - ["neutral-biter-nest-v6-t7-rampant", "neutral-biter-spawner-v6-t7-rampant"], - ["neutral-spitter-nest-v6-t7-rampant", "neutral-spitter-spawner-v6-t7-rampant"], - ["acid-biter-nest-v6-t7-rampant", "acid-biter-spawner-v6-t7-rampant"], - ["acid-spitter-nest-v6-t7-rampant", "acid-spitter-spawner-v6-t7-rampant"], - ["physical-biter-nest-v6-t7-rampant", "physical-biter-spawner-v6-t7-rampant"], - ["electric-biter-nest-v6-t7-rampant", "electric-biter-spawner-v6-t7-rampant"], - ["suicide-biter-nest-v6-t7-rampant", "suicide-biter-spawner-v6-t7-rampant"], - ["nuclear-biter-nest-v6-t7-rampant", "nuclear-biter-spawner-v6-t7-rampant"], - ["fire-biter-nest-v6-t7-rampant", "fire-biter-spawner-v6-t7-rampant"], - ["fire-spitter-nest-v6-t7-rampant", "fire-spitter-spawner-v6-t7-rampant"], - ["interno-spitter-nest-v6-t7-rampant", "interno-spitter-spawner-v6-t7-rampant"], - ["troll-biter-nest-v6-t7-rampant", "troll-biter-spawner-v6-t7-rampant"], - ["troll-spitter-nest-v6-t7-rampant", "troll-spitter-spawner-v6-t7-rampant"], - ["laser-biter-nest-v6-t7-rampant", "laser-biter-spawner-v6-t7-rampant"], - ["laser-spitter-nest-v6-t7-rampant", "laser-spitter-spawner-v6-t7-rampant"], - ["fast-biter-nest-v6-t7-rampant", "fast-biter-spawner-v6-t7-rampant"], - ["fast-spitter-nest-v6-t7-rampant", "fast-spitter-spawner-v6-t7-rampant"], - ["wasp-spitter-nest-v6-t7-rampant", "wasp-spitter-spawner-v6-t7-rampant"], - ["spawner-spitter-nest-v6-t7-rampant", "spawner-spitter-spawner-v6-t7-rampant"], - ["energy-thief-biter-nest-v6-t7-rampant", "energy-thief-biter-spawner-v6-t7-rampant"], - ["poison-biter-nest-v6-t7-rampant", "poison-biter-spawner-v6-t7-rampant"], - ["neutral-biter-nest-v7-t7-rampant", "neutral-biter-spawner-v7-t7-rampant"], - ["neutral-spitter-nest-v7-t7-rampant", "neutral-spitter-spawner-v7-t7-rampant"], - ["acid-biter-nest-v7-t7-rampant", "acid-biter-spawner-v7-t7-rampant"], - ["acid-spitter-nest-v7-t7-rampant", "acid-spitter-spawner-v7-t7-rampant"], - ["physical-biter-nest-v7-t7-rampant", "physical-biter-spawner-v7-t7-rampant"], - ["electric-biter-nest-v7-t7-rampant", "electric-biter-spawner-v7-t7-rampant"], - ["suicide-biter-nest-v7-t7-rampant", "suicide-biter-spawner-v7-t7-rampant"], - ["nuclear-biter-nest-v7-t7-rampant", "nuclear-biter-spawner-v7-t7-rampant"], - ["fire-biter-nest-v7-t7-rampant", "fire-biter-spawner-v7-t7-rampant"], - ["fire-spitter-nest-v7-t7-rampant", "fire-spitter-spawner-v7-t7-rampant"], - ["interno-spitter-nest-v7-t7-rampant", "interno-spitter-spawner-v7-t7-rampant"], - ["troll-biter-nest-v7-t7-rampant", "troll-biter-spawner-v7-t7-rampant"], - ["troll-spitter-nest-v7-t7-rampant", "troll-spitter-spawner-v7-t7-rampant"], - ["laser-biter-nest-v7-t7-rampant", "laser-biter-spawner-v7-t7-rampant"], - ["laser-spitter-nest-v7-t7-rampant", "laser-spitter-spawner-v7-t7-rampant"], - ["fast-biter-nest-v7-t7-rampant", "fast-biter-spawner-v7-t7-rampant"], - ["fast-spitter-nest-v7-t7-rampant", "fast-spitter-spawner-v7-t7-rampant"], - ["wasp-spitter-nest-v7-t7-rampant", "wasp-spitter-spawner-v7-t7-rampant"], - ["spawner-spitter-nest-v7-t7-rampant", "spawner-spitter-spawner-v7-t7-rampant"], - ["energy-thief-biter-nest-v7-t7-rampant", "energy-thief-biter-spawner-v7-t7-rampant"], - ["poison-biter-nest-v7-t7-rampant", "poison-biter-spawner-v7-t7-rampant"], - ["neutral-biter-nest-v8-t7-rampant", "neutral-biter-spawner-v8-t7-rampant"], - ["neutral-spitter-nest-v8-t7-rampant", "neutral-spitter-spawner-v8-t7-rampant"], - ["acid-biter-nest-v8-t7-rampant", "acid-biter-spawner-v8-t7-rampant"], - ["acid-spitter-nest-v8-t7-rampant", "acid-spitter-spawner-v8-t7-rampant"], - ["physical-biter-nest-v8-t7-rampant", "physical-biter-spawner-v8-t7-rampant"], - ["electric-biter-nest-v8-t7-rampant", "electric-biter-spawner-v8-t7-rampant"], - ["suicide-biter-nest-v8-t7-rampant", "suicide-biter-spawner-v8-t7-rampant"], - ["nuclear-biter-nest-v8-t7-rampant", "nuclear-biter-spawner-v8-t7-rampant"], - ["fire-biter-nest-v8-t7-rampant", "fire-biter-spawner-v8-t7-rampant"], - ["fire-spitter-nest-v8-t7-rampant", "fire-spitter-spawner-v8-t7-rampant"], - ["interno-spitter-nest-v8-t7-rampant", "interno-spitter-spawner-v8-t7-rampant"], - ["troll-biter-nest-v8-t7-rampant", "troll-biter-spawner-v8-t7-rampant"], - ["troll-spitter-nest-v8-t7-rampant", "troll-spitter-spawner-v8-t7-rampant"], - ["laser-biter-nest-v8-t7-rampant", "laser-biter-spawner-v8-t7-rampant"], - ["laser-spitter-nest-v8-t7-rampant", "laser-spitter-spawner-v8-t7-rampant"], - ["fast-biter-nest-v8-t7-rampant", "fast-biter-spawner-v8-t7-rampant"], - ["fast-spitter-nest-v8-t7-rampant", "fast-spitter-spawner-v8-t7-rampant"], - ["wasp-spitter-nest-v8-t7-rampant", "wasp-spitter-spawner-v8-t7-rampant"], - ["spawner-spitter-nest-v8-t7-rampant", "spawner-spitter-spawner-v8-t7-rampant"], - ["energy-thief-biter-nest-v8-t7-rampant", "energy-thief-biter-spawner-v8-t7-rampant"], - ["poison-biter-nest-v8-t7-rampant", "poison-biter-spawner-v8-t7-rampant"], - ["neutral-biter-nest-v9-t7-rampant", "neutral-biter-spawner-v9-t7-rampant"], - ["neutral-spitter-nest-v9-t7-rampant", "neutral-spitter-spawner-v9-t7-rampant"], - ["acid-biter-nest-v9-t7-rampant", "acid-biter-spawner-v9-t7-rampant"], - ["acid-spitter-nest-v9-t7-rampant", "acid-spitter-spawner-v9-t7-rampant"], - ["physical-biter-nest-v9-t7-rampant", "physical-biter-spawner-v9-t7-rampant"], - ["electric-biter-nest-v9-t7-rampant", "electric-biter-spawner-v9-t7-rampant"], - ["suicide-biter-nest-v9-t7-rampant", "suicide-biter-spawner-v9-t7-rampant"], - ["nuclear-biter-nest-v9-t7-rampant", "nuclear-biter-spawner-v9-t7-rampant"], - ["fire-biter-nest-v9-t7-rampant", "fire-biter-spawner-v9-t7-rampant"], - ["fire-spitter-nest-v9-t7-rampant", "fire-spitter-spawner-v9-t7-rampant"], - ["interno-spitter-nest-v9-t7-rampant", "interno-spitter-spawner-v9-t7-rampant"], - ["troll-biter-nest-v9-t7-rampant", "troll-biter-spawner-v9-t7-rampant"], - ["troll-spitter-nest-v9-t7-rampant", "troll-spitter-spawner-v9-t7-rampant"], - ["laser-biter-nest-v9-t7-rampant", "laser-biter-spawner-v9-t7-rampant"], - ["laser-spitter-nest-v9-t7-rampant", "laser-spitter-spawner-v9-t7-rampant"], - ["fast-biter-nest-v9-t7-rampant", "fast-biter-spawner-v9-t7-rampant"], - ["fast-spitter-nest-v9-t7-rampant", "fast-spitter-spawner-v9-t7-rampant"], - ["wasp-spitter-nest-v9-t7-rampant", "wasp-spitter-spawner-v9-t7-rampant"], - ["spawner-spitter-nest-v9-t7-rampant", "spawner-spitter-spawner-v9-t7-rampant"], - ["energy-thief-biter-nest-v9-t7-rampant", "energy-thief-biter-spawner-v9-t7-rampant"], - ["poison-biter-nest-v9-t7-rampant", "poison-biter-spawner-v9-t7-rampant"], - ["neutral-biter-nest-v10-t7-rampant", "neutral-biter-spawner-v10-t7-rampant"], - ["neutral-spitter-nest-v10-t7-rampant", "neutral-spitter-spawner-v10-t7-rampant"], - ["acid-biter-nest-v10-t7-rampant", "acid-biter-spawner-v10-t7-rampant"], - ["acid-spitter-nest-v10-t7-rampant", "acid-spitter-spawner-v10-t7-rampant"], - ["physical-biter-nest-v10-t7-rampant", "physical-biter-spawner-v10-t7-rampant"], - ["electric-biter-nest-v10-t7-rampant", "electric-biter-spawner-v10-t7-rampant"], - ["suicide-biter-nest-v10-t7-rampant", "suicide-biter-spawner-v10-t7-rampant"], - ["nuclear-biter-nest-v10-t7-rampant", "nuclear-biter-spawner-v10-t7-rampant"], - ["fire-biter-nest-v10-t7-rampant", "fire-biter-spawner-v10-t7-rampant"], - ["fire-spitter-nest-v10-t7-rampant", "fire-spitter-spawner-v10-t7-rampant"], - ["interno-spitter-nest-v10-t7-rampant", "interno-spitter-spawner-v10-t7-rampant"], - ["troll-biter-nest-v10-t7-rampant", "troll-biter-spawner-v10-t7-rampant"], - ["troll-spitter-nest-v10-t7-rampant", "troll-spitter-spawner-v10-t7-rampant"], - ["laser-biter-nest-v10-t7-rampant", "laser-biter-spawner-v10-t7-rampant"], - ["laser-spitter-nest-v10-t7-rampant", "laser-spitter-spawner-v10-t7-rampant"], - ["fast-biter-nest-v10-t7-rampant", "fast-biter-spawner-v10-t7-rampant"], - ["fast-spitter-nest-v10-t7-rampant", "fast-spitter-spawner-v10-t7-rampant"], - ["wasp-spitter-nest-v10-t7-rampant", "wasp-spitter-spawner-v10-t7-rampant"], - ["spawner-spitter-nest-v10-t7-rampant", "spawner-spitter-spawner-v10-t7-rampant"], - ["energy-thief-biter-nest-v10-t7-rampant", "energy-thief-biter-spawner-v10-t7-rampant"], - ["poison-biter-nest-v10-t7-rampant", "poison-biter-spawner-v10-t7-rampant"], - ["neutral-biter-nest-v11-t7-rampant", "neutral-biter-spawner-v11-t7-rampant"], - ["neutral-spitter-nest-v11-t7-rampant", "neutral-spitter-spawner-v11-t7-rampant"], - ["acid-biter-nest-v11-t7-rampant", "acid-biter-spawner-v11-t7-rampant"], - ["acid-spitter-nest-v11-t7-rampant", "acid-spitter-spawner-v11-t7-rampant"], - ["physical-biter-nest-v11-t7-rampant", "physical-biter-spawner-v11-t7-rampant"], - ["electric-biter-nest-v11-t7-rampant", "electric-biter-spawner-v11-t7-rampant"], - ["suicide-biter-nest-v11-t7-rampant", "suicide-biter-spawner-v11-t7-rampant"], - ["nuclear-biter-nest-v11-t7-rampant", "nuclear-biter-spawner-v11-t7-rampant"], - ["fire-biter-nest-v11-t7-rampant", "fire-biter-spawner-v11-t7-rampant"], - ["fire-spitter-nest-v11-t7-rampant", "fire-spitter-spawner-v11-t7-rampant"], - ["interno-spitter-nest-v11-t7-rampant", "interno-spitter-spawner-v11-t7-rampant"], - ["troll-biter-nest-v11-t7-rampant", "troll-biter-spawner-v11-t7-rampant"], - ["troll-spitter-nest-v11-t7-rampant", "troll-spitter-spawner-v11-t7-rampant"], - ["laser-biter-nest-v11-t7-rampant", "laser-biter-spawner-v11-t7-rampant"], - ["laser-spitter-nest-v11-t7-rampant", "laser-spitter-spawner-v11-t7-rampant"], - ["fast-biter-nest-v11-t7-rampant", "fast-biter-spawner-v11-t7-rampant"], - ["fast-spitter-nest-v11-t7-rampant", "fast-spitter-spawner-v11-t7-rampant"], - ["wasp-spitter-nest-v11-t7-rampant", "wasp-spitter-spawner-v11-t7-rampant"], - ["spawner-spitter-nest-v11-t7-rampant", "spawner-spitter-spawner-v11-t7-rampant"], - ["energy-thief-biter-nest-v11-t7-rampant", "energy-thief-biter-spawner-v11-t7-rampant"], - ["poison-biter-nest-v11-t7-rampant", "poison-biter-spawner-v11-t7-rampant"], - ["neutral-biter-nest-v12-t7-rampant", "neutral-biter-spawner-v12-t7-rampant"], - ["neutral-spitter-nest-v12-t7-rampant", "neutral-spitter-spawner-v12-t7-rampant"], - ["acid-biter-nest-v12-t7-rampant", "acid-biter-spawner-v12-t7-rampant"], - ["acid-spitter-nest-v12-t7-rampant", "acid-spitter-spawner-v12-t7-rampant"], - ["physical-biter-nest-v12-t7-rampant", "physical-biter-spawner-v12-t7-rampant"], - ["electric-biter-nest-v12-t7-rampant", "electric-biter-spawner-v12-t7-rampant"], - ["suicide-biter-nest-v12-t7-rampant", "suicide-biter-spawner-v12-t7-rampant"], - ["nuclear-biter-nest-v12-t7-rampant", "nuclear-biter-spawner-v12-t7-rampant"], - ["fire-biter-nest-v12-t7-rampant", "fire-biter-spawner-v12-t7-rampant"], - ["fire-spitter-nest-v12-t7-rampant", "fire-spitter-spawner-v12-t7-rampant"], - ["interno-spitter-nest-v12-t7-rampant", "interno-spitter-spawner-v12-t7-rampant"], - ["troll-biter-nest-v12-t7-rampant", "troll-biter-spawner-v12-t7-rampant"], - ["troll-spitter-nest-v12-t7-rampant", "troll-spitter-spawner-v12-t7-rampant"], - ["laser-biter-nest-v12-t7-rampant", "laser-biter-spawner-v12-t7-rampant"], - ["laser-spitter-nest-v12-t7-rampant", "laser-spitter-spawner-v12-t7-rampant"], - ["fast-biter-nest-v12-t7-rampant", "fast-biter-spawner-v12-t7-rampant"], - ["fast-spitter-nest-v12-t7-rampant", "fast-spitter-spawner-v12-t7-rampant"], - ["wasp-spitter-nest-v12-t7-rampant", "wasp-spitter-spawner-v12-t7-rampant"], - ["spawner-spitter-nest-v12-t7-rampant", "spawner-spitter-spawner-v12-t7-rampant"], - ["energy-thief-biter-nest-v12-t7-rampant", "energy-thief-biter-spawner-v12-t7-rampant"], - ["poison-biter-nest-v12-t7-rampant", "poison-biter-spawner-v12-t7-rampant"], - ["neutral-biter-nest-v13-t7-rampant", "neutral-biter-spawner-v13-t7-rampant"], - ["neutral-spitter-nest-v13-t7-rampant", "neutral-spitter-spawner-v13-t7-rampant"], - ["acid-biter-nest-v13-t7-rampant", "acid-biter-spawner-v13-t7-rampant"], - ["acid-spitter-nest-v13-t7-rampant", "acid-spitter-spawner-v13-t7-rampant"], - ["physical-biter-nest-v13-t7-rampant", "physical-biter-spawner-v13-t7-rampant"], - ["electric-biter-nest-v13-t7-rampant", "electric-biter-spawner-v13-t7-rampant"], - ["suicide-biter-nest-v13-t7-rampant", "suicide-biter-spawner-v13-t7-rampant"], - ["nuclear-biter-nest-v13-t7-rampant", "nuclear-biter-spawner-v13-t7-rampant"], - ["fire-biter-nest-v13-t7-rampant", "fire-biter-spawner-v13-t7-rampant"], - ["fire-spitter-nest-v13-t7-rampant", "fire-spitter-spawner-v13-t7-rampant"], - ["interno-spitter-nest-v13-t7-rampant", "interno-spitter-spawner-v13-t7-rampant"], - ["troll-biter-nest-v13-t7-rampant", "troll-biter-spawner-v13-t7-rampant"], - ["troll-spitter-nest-v13-t7-rampant", "troll-spitter-spawner-v13-t7-rampant"], - ["laser-biter-nest-v13-t7-rampant", "laser-biter-spawner-v13-t7-rampant"], - ["laser-spitter-nest-v13-t7-rampant", "laser-spitter-spawner-v13-t7-rampant"], - ["fast-biter-nest-v13-t7-rampant", "fast-biter-spawner-v13-t7-rampant"], - ["fast-spitter-nest-v13-t7-rampant", "fast-spitter-spawner-v13-t7-rampant"], - ["wasp-spitter-nest-v13-t7-rampant", "wasp-spitter-spawner-v13-t7-rampant"], - ["spawner-spitter-nest-v13-t7-rampant", "spawner-spitter-spawner-v13-t7-rampant"], - ["energy-thief-biter-nest-v13-t7-rampant", "energy-thief-biter-spawner-v13-t7-rampant"], - ["poison-biter-nest-v13-t7-rampant", "poison-biter-spawner-v13-t7-rampant"], - ["neutral-biter-nest-v14-t7-rampant", "neutral-biter-spawner-v14-t7-rampant"], - ["neutral-spitter-nest-v14-t7-rampant", "neutral-spitter-spawner-v14-t7-rampant"], - ["acid-biter-nest-v14-t7-rampant", "acid-biter-spawner-v14-t7-rampant"], - ["acid-spitter-nest-v14-t7-rampant", "acid-spitter-spawner-v14-t7-rampant"], - ["physical-biter-nest-v14-t7-rampant", "physical-biter-spawner-v14-t7-rampant"], - ["electric-biter-nest-v14-t7-rampant", "electric-biter-spawner-v14-t7-rampant"], - ["suicide-biter-nest-v14-t7-rampant", "suicide-biter-spawner-v14-t7-rampant"], - ["nuclear-biter-nest-v14-t7-rampant", "nuclear-biter-spawner-v14-t7-rampant"], - ["fire-biter-nest-v14-t7-rampant", "fire-biter-spawner-v14-t7-rampant"], - ["fire-spitter-nest-v14-t7-rampant", "fire-spitter-spawner-v14-t7-rampant"], - ["interno-spitter-nest-v14-t7-rampant", "interno-spitter-spawner-v14-t7-rampant"], - ["troll-biter-nest-v14-t7-rampant", "troll-biter-spawner-v14-t7-rampant"], - ["troll-spitter-nest-v14-t7-rampant", "troll-spitter-spawner-v14-t7-rampant"], - ["laser-biter-nest-v14-t7-rampant", "laser-biter-spawner-v14-t7-rampant"], - ["laser-spitter-nest-v14-t7-rampant", "laser-spitter-spawner-v14-t7-rampant"], - ["fast-biter-nest-v14-t7-rampant", "fast-biter-spawner-v14-t7-rampant"], - ["fast-spitter-nest-v14-t7-rampant", "fast-spitter-spawner-v14-t7-rampant"], - ["wasp-spitter-nest-v14-t7-rampant", "wasp-spitter-spawner-v14-t7-rampant"], - ["spawner-spitter-nest-v14-t7-rampant", "spawner-spitter-spawner-v14-t7-rampant"], - ["energy-thief-biter-nest-v14-t7-rampant", "energy-thief-biter-spawner-v14-t7-rampant"], - ["poison-biter-nest-v14-t7-rampant", "poison-biter-spawner-v14-t7-rampant"], - ["neutral-biter-nest-v15-t7-rampant", "neutral-biter-spawner-v15-t7-rampant"], - ["neutral-spitter-nest-v15-t7-rampant", "neutral-spitter-spawner-v15-t7-rampant"], - ["acid-biter-nest-v15-t7-rampant", "acid-biter-spawner-v15-t7-rampant"], - ["acid-spitter-nest-v15-t7-rampant", "acid-spitter-spawner-v15-t7-rampant"], - ["physical-biter-nest-v15-t7-rampant", "physical-biter-spawner-v15-t7-rampant"], - ["electric-biter-nest-v15-t7-rampant", "electric-biter-spawner-v15-t7-rampant"], - ["suicide-biter-nest-v15-t7-rampant", "suicide-biter-spawner-v15-t7-rampant"], - ["nuclear-biter-nest-v15-t7-rampant", "nuclear-biter-spawner-v15-t7-rampant"], - ["fire-biter-nest-v15-t7-rampant", "fire-biter-spawner-v15-t7-rampant"], - ["fire-spitter-nest-v15-t7-rampant", "fire-spitter-spawner-v15-t7-rampant"], - ["interno-spitter-nest-v15-t7-rampant", "interno-spitter-spawner-v15-t7-rampant"], - ["troll-biter-nest-v15-t7-rampant", "troll-biter-spawner-v15-t7-rampant"], - ["troll-spitter-nest-v15-t7-rampant", "troll-spitter-spawner-v15-t7-rampant"], - ["laser-biter-nest-v15-t7-rampant", "laser-biter-spawner-v15-t7-rampant"], - ["laser-spitter-nest-v15-t7-rampant", "laser-spitter-spawner-v15-t7-rampant"], - ["fast-biter-nest-v15-t7-rampant", "fast-biter-spawner-v15-t7-rampant"], - ["fast-spitter-nest-v15-t7-rampant", "fast-spitter-spawner-v15-t7-rampant"], - ["wasp-spitter-nest-v15-t7-rampant", "wasp-spitter-spawner-v15-t7-rampant"], - ["spawner-spitter-nest-v15-t7-rampant", "spawner-spitter-spawner-v15-t7-rampant"], - ["energy-thief-biter-nest-v15-t7-rampant", "energy-thief-biter-spawner-v15-t7-rampant"], - ["poison-biter-nest-v15-t7-rampant", "poison-biter-spawner-v15-t7-rampant"], - ["neutral-biter-nest-v16-t7-rampant", "neutral-biter-spawner-v16-t7-rampant"], - ["neutral-spitter-nest-v16-t7-rampant", "neutral-spitter-spawner-v16-t7-rampant"], - ["acid-biter-nest-v16-t7-rampant", "acid-biter-spawner-v16-t7-rampant"], - ["acid-spitter-nest-v16-t7-rampant", "acid-spitter-spawner-v16-t7-rampant"], - ["physical-biter-nest-v16-t7-rampant", "physical-biter-spawner-v16-t7-rampant"], - ["electric-biter-nest-v16-t7-rampant", "electric-biter-spawner-v16-t7-rampant"], - ["suicide-biter-nest-v16-t7-rampant", "suicide-biter-spawner-v16-t7-rampant"], - ["nuclear-biter-nest-v16-t7-rampant", "nuclear-biter-spawner-v16-t7-rampant"], - ["fire-biter-nest-v16-t7-rampant", "fire-biter-spawner-v16-t7-rampant"], - ["fire-spitter-nest-v16-t7-rampant", "fire-spitter-spawner-v16-t7-rampant"], - ["interno-spitter-nest-v16-t7-rampant", "interno-spitter-spawner-v16-t7-rampant"], - ["troll-biter-nest-v16-t7-rampant", "troll-biter-spawner-v16-t7-rampant"], - ["troll-spitter-nest-v16-t7-rampant", "troll-spitter-spawner-v16-t7-rampant"], - ["laser-biter-nest-v16-t7-rampant", "laser-biter-spawner-v16-t7-rampant"], - ["laser-spitter-nest-v16-t7-rampant", "laser-spitter-spawner-v16-t7-rampant"], - ["fast-biter-nest-v16-t7-rampant", "fast-biter-spawner-v16-t7-rampant"], - ["fast-spitter-nest-v16-t7-rampant", "fast-spitter-spawner-v16-t7-rampant"], - ["wasp-spitter-nest-v16-t7-rampant", "wasp-spitter-spawner-v16-t7-rampant"], - ["spawner-spitter-nest-v16-t7-rampant", "spawner-spitter-spawner-v16-t7-rampant"], - ["energy-thief-biter-nest-v16-t7-rampant", "energy-thief-biter-spawner-v16-t7-rampant"], - ["poison-biter-nest-v16-t7-rampant", "poison-biter-spawner-v16-t7-rampant"], - ["neutral-biter-nest-v17-t7-rampant", "neutral-biter-spawner-v17-t7-rampant"], - ["neutral-spitter-nest-v17-t7-rampant", "neutral-spitter-spawner-v17-t7-rampant"], - ["acid-biter-nest-v17-t7-rampant", "acid-biter-spawner-v17-t7-rampant"], - ["acid-spitter-nest-v17-t7-rampant", "acid-spitter-spawner-v17-t7-rampant"], - ["physical-biter-nest-v17-t7-rampant", "physical-biter-spawner-v17-t7-rampant"], - ["electric-biter-nest-v17-t7-rampant", "electric-biter-spawner-v17-t7-rampant"], - ["suicide-biter-nest-v17-t7-rampant", "suicide-biter-spawner-v17-t7-rampant"], - ["nuclear-biter-nest-v17-t7-rampant", "nuclear-biter-spawner-v17-t7-rampant"], - ["fire-biter-nest-v17-t7-rampant", "fire-biter-spawner-v17-t7-rampant"], - ["fire-spitter-nest-v17-t7-rampant", "fire-spitter-spawner-v17-t7-rampant"], - ["interno-spitter-nest-v17-t7-rampant", "interno-spitter-spawner-v17-t7-rampant"], - ["troll-biter-nest-v17-t7-rampant", "troll-biter-spawner-v17-t7-rampant"], - ["troll-spitter-nest-v17-t7-rampant", "troll-spitter-spawner-v17-t7-rampant"], - ["laser-biter-nest-v17-t7-rampant", "laser-biter-spawner-v17-t7-rampant"], - ["laser-spitter-nest-v17-t7-rampant", "laser-spitter-spawner-v17-t7-rampant"], - ["fast-biter-nest-v17-t7-rampant", "fast-biter-spawner-v17-t7-rampant"], - ["fast-spitter-nest-v17-t7-rampant", "fast-spitter-spawner-v17-t7-rampant"], - ["wasp-spitter-nest-v17-t7-rampant", "wasp-spitter-spawner-v17-t7-rampant"], - ["spawner-spitter-nest-v17-t7-rampant", "spawner-spitter-spawner-v17-t7-rampant"], - ["energy-thief-biter-nest-v17-t7-rampant", "energy-thief-biter-spawner-v17-t7-rampant"], - ["poison-biter-nest-v17-t7-rampant", "poison-biter-spawner-v17-t7-rampant"], - ["neutral-biter-nest-v18-t7-rampant", "neutral-biter-spawner-v18-t7-rampant"], - ["neutral-spitter-nest-v18-t7-rampant", "neutral-spitter-spawner-v18-t7-rampant"], - ["acid-biter-nest-v18-t7-rampant", "acid-biter-spawner-v18-t7-rampant"], - ["acid-spitter-nest-v18-t7-rampant", "acid-spitter-spawner-v18-t7-rampant"], - ["physical-biter-nest-v18-t7-rampant", "physical-biter-spawner-v18-t7-rampant"], - ["electric-biter-nest-v18-t7-rampant", "electric-biter-spawner-v18-t7-rampant"], - ["suicide-biter-nest-v18-t7-rampant", "suicide-biter-spawner-v18-t7-rampant"], - ["nuclear-biter-nest-v18-t7-rampant", "nuclear-biter-spawner-v18-t7-rampant"], - ["fire-biter-nest-v18-t7-rampant", "fire-biter-spawner-v18-t7-rampant"], - ["fire-spitter-nest-v18-t7-rampant", "fire-spitter-spawner-v18-t7-rampant"], - ["interno-spitter-nest-v18-t7-rampant", "interno-spitter-spawner-v18-t7-rampant"], - ["troll-biter-nest-v18-t7-rampant", "troll-biter-spawner-v18-t7-rampant"], - ["troll-spitter-nest-v18-t7-rampant", "troll-spitter-spawner-v18-t7-rampant"], - ["laser-biter-nest-v18-t7-rampant", "laser-biter-spawner-v18-t7-rampant"], - ["laser-spitter-nest-v18-t7-rampant", "laser-spitter-spawner-v18-t7-rampant"], - ["fast-biter-nest-v18-t7-rampant", "fast-biter-spawner-v18-t7-rampant"], - ["fast-spitter-nest-v18-t7-rampant", "fast-spitter-spawner-v18-t7-rampant"], - ["wasp-spitter-nest-v18-t7-rampant", "wasp-spitter-spawner-v18-t7-rampant"], - ["spawner-spitter-nest-v18-t7-rampant", "spawner-spitter-spawner-v18-t7-rampant"], - ["energy-thief-biter-nest-v18-t7-rampant", "energy-thief-biter-spawner-v18-t7-rampant"], - ["poison-biter-nest-v18-t7-rampant", "poison-biter-spawner-v18-t7-rampant"], - ["neutral-biter-nest-v19-t7-rampant", "neutral-biter-spawner-v19-t7-rampant"], - ["neutral-spitter-nest-v19-t7-rampant", "neutral-spitter-spawner-v19-t7-rampant"], - ["acid-biter-nest-v19-t7-rampant", "acid-biter-spawner-v19-t7-rampant"], - ["acid-spitter-nest-v19-t7-rampant", "acid-spitter-spawner-v19-t7-rampant"], - ["physical-biter-nest-v19-t7-rampant", "physical-biter-spawner-v19-t7-rampant"], - ["electric-biter-nest-v19-t7-rampant", "electric-biter-spawner-v19-t7-rampant"], - ["suicide-biter-nest-v19-t7-rampant", "suicide-biter-spawner-v19-t7-rampant"], - ["nuclear-biter-nest-v19-t7-rampant", "nuclear-biter-spawner-v19-t7-rampant"], - ["fire-biter-nest-v19-t7-rampant", "fire-biter-spawner-v19-t7-rampant"], - ["fire-spitter-nest-v19-t7-rampant", "fire-spitter-spawner-v19-t7-rampant"], - ["interno-spitter-nest-v19-t7-rampant", "interno-spitter-spawner-v19-t7-rampant"], - ["troll-biter-nest-v19-t7-rampant", "troll-biter-spawner-v19-t7-rampant"], - ["troll-spitter-nest-v19-t7-rampant", "troll-spitter-spawner-v19-t7-rampant"], - ["laser-biter-nest-v19-t7-rampant", "laser-biter-spawner-v19-t7-rampant"], - ["laser-spitter-nest-v19-t7-rampant", "laser-spitter-spawner-v19-t7-rampant"], - ["fast-biter-nest-v19-t7-rampant", "fast-biter-spawner-v19-t7-rampant"], - ["fast-spitter-nest-v19-t7-rampant", "fast-spitter-spawner-v19-t7-rampant"], - ["wasp-spitter-nest-v19-t7-rampant", "wasp-spitter-spawner-v19-t7-rampant"], - ["spawner-spitter-nest-v19-t7-rampant", "spawner-spitter-spawner-v19-t7-rampant"], - ["energy-thief-biter-nest-v19-t7-rampant", "energy-thief-biter-spawner-v19-t7-rampant"], - ["poison-biter-nest-v19-t7-rampant", "poison-biter-spawner-v19-t7-rampant"], - ["neutral-biter-nest-v20-t7-rampant", "neutral-biter-spawner-v20-t7-rampant"], - ["neutral-spitter-nest-v20-t7-rampant", "neutral-spitter-spawner-v20-t7-rampant"], - ["acid-biter-nest-v20-t7-rampant", "acid-biter-spawner-v20-t7-rampant"], - ["acid-spitter-nest-v20-t7-rampant", "acid-spitter-spawner-v20-t7-rampant"], - ["physical-biter-nest-v20-t7-rampant", "physical-biter-spawner-v20-t7-rampant"], - ["electric-biter-nest-v20-t7-rampant", "electric-biter-spawner-v20-t7-rampant"], - ["suicide-biter-nest-v20-t7-rampant", "suicide-biter-spawner-v20-t7-rampant"], - ["nuclear-biter-nest-v20-t7-rampant", "nuclear-biter-spawner-v20-t7-rampant"], - ["fire-biter-nest-v20-t7-rampant", "fire-biter-spawner-v20-t7-rampant"], - ["fire-spitter-nest-v20-t7-rampant", "fire-spitter-spawner-v20-t7-rampant"], - ["interno-spitter-nest-v20-t7-rampant", "interno-spitter-spawner-v20-t7-rampant"], - ["troll-biter-nest-v20-t7-rampant", "troll-biter-spawner-v20-t7-rampant"], - ["troll-spitter-nest-v20-t7-rampant", "troll-spitter-spawner-v20-t7-rampant"], - ["laser-biter-nest-v20-t7-rampant", "laser-biter-spawner-v20-t7-rampant"], - ["laser-spitter-nest-v20-t7-rampant", "laser-spitter-spawner-v20-t7-rampant"], - ["fast-biter-nest-v20-t7-rampant", "fast-biter-spawner-v20-t7-rampant"], - ["fast-spitter-nest-v20-t7-rampant", "fast-spitter-spawner-v20-t7-rampant"], - ["wasp-spitter-nest-v20-t7-rampant", "wasp-spitter-spawner-v20-t7-rampant"], - ["spawner-spitter-nest-v20-t7-rampant", "spawner-spitter-spawner-v20-t7-rampant"], - ["energy-thief-biter-nest-v20-t7-rampant", "energy-thief-biter-spawner-v20-t7-rampant"], - ["poison-biter-nest-v20-t7-rampant", "poison-biter-spawner-v20-t7-rampant"], - ["neutral-biter-nest-v1-t8-rampant", "neutral-biter-spawner-v1-t8-rampant"], - ["neutral-spitter-nest-v1-t8-rampant", "neutral-spitter-spawner-v1-t8-rampant"], - ["acid-biter-nest-v1-t8-rampant", "acid-biter-spawner-v1-t8-rampant"], - ["acid-spitter-nest-v1-t8-rampant", "acid-spitter-spawner-v1-t8-rampant"], - ["physical-biter-nest-v1-t8-rampant", "physical-biter-spawner-v1-t8-rampant"], - ["electric-biter-nest-v1-t8-rampant", "electric-biter-spawner-v1-t8-rampant"], - ["suicide-biter-nest-v1-t8-rampant", "suicide-biter-spawner-v1-t8-rampant"], - ["nuclear-biter-nest-v1-t8-rampant", "nuclear-biter-spawner-v1-t8-rampant"], - ["fire-biter-nest-v1-t8-rampant", "fire-biter-spawner-v1-t8-rampant"], - ["fire-spitter-nest-v1-t8-rampant", "fire-spitter-spawner-v1-t8-rampant"], - ["interno-spitter-nest-v1-t8-rampant", "interno-spitter-spawner-v1-t8-rampant"], - ["troll-biter-nest-v1-t8-rampant", "troll-biter-spawner-v1-t8-rampant"], - ["troll-spitter-nest-v1-t8-rampant", "troll-spitter-spawner-v1-t8-rampant"], - ["laser-biter-nest-v1-t8-rampant", "laser-biter-spawner-v1-t8-rampant"], - ["laser-spitter-nest-v1-t8-rampant", "laser-spitter-spawner-v1-t8-rampant"], - ["fast-biter-nest-v1-t8-rampant", "fast-biter-spawner-v1-t8-rampant"], - ["fast-spitter-nest-v1-t8-rampant", "fast-spitter-spawner-v1-t8-rampant"], - ["wasp-spitter-nest-v1-t8-rampant", "wasp-spitter-spawner-v1-t8-rampant"], - ["spawner-spitter-nest-v1-t8-rampant", "spawner-spitter-spawner-v1-t8-rampant"], - ["energy-thief-biter-nest-v1-t8-rampant", "energy-thief-biter-spawner-v1-t8-rampant"], - ["poison-biter-nest-v1-t8-rampant", "poison-biter-spawner-v1-t8-rampant"], - ["neutral-biter-nest-v2-t8-rampant", "neutral-biter-spawner-v2-t8-rampant"], - ["neutral-spitter-nest-v2-t8-rampant", "neutral-spitter-spawner-v2-t8-rampant"], - ["acid-biter-nest-v2-t8-rampant", "acid-biter-spawner-v2-t8-rampant"], - ["acid-spitter-nest-v2-t8-rampant", "acid-spitter-spawner-v2-t8-rampant"], - ["physical-biter-nest-v2-t8-rampant", "physical-biter-spawner-v2-t8-rampant"], - ["electric-biter-nest-v2-t8-rampant", "electric-biter-spawner-v2-t8-rampant"], - ["suicide-biter-nest-v2-t8-rampant", "suicide-biter-spawner-v2-t8-rampant"], - ["nuclear-biter-nest-v2-t8-rampant", "nuclear-biter-spawner-v2-t8-rampant"], - ["fire-biter-nest-v2-t8-rampant", "fire-biter-spawner-v2-t8-rampant"], - ["fire-spitter-nest-v2-t8-rampant", "fire-spitter-spawner-v2-t8-rampant"], - ["interno-spitter-nest-v2-t8-rampant", "interno-spitter-spawner-v2-t8-rampant"], - ["troll-biter-nest-v2-t8-rampant", "troll-biter-spawner-v2-t8-rampant"], - ["troll-spitter-nest-v2-t8-rampant", "troll-spitter-spawner-v2-t8-rampant"], - ["laser-biter-nest-v2-t8-rampant", "laser-biter-spawner-v2-t8-rampant"], - ["laser-spitter-nest-v2-t8-rampant", "laser-spitter-spawner-v2-t8-rampant"], - ["fast-biter-nest-v2-t8-rampant", "fast-biter-spawner-v2-t8-rampant"], - ["fast-spitter-nest-v2-t8-rampant", "fast-spitter-spawner-v2-t8-rampant"], - ["wasp-spitter-nest-v2-t8-rampant", "wasp-spitter-spawner-v2-t8-rampant"], - ["spawner-spitter-nest-v2-t8-rampant", "spawner-spitter-spawner-v2-t8-rampant"], - ["energy-thief-biter-nest-v2-t8-rampant", "energy-thief-biter-spawner-v2-t8-rampant"], - ["poison-biter-nest-v2-t8-rampant", "poison-biter-spawner-v2-t8-rampant"], - ["neutral-biter-nest-v3-t8-rampant", "neutral-biter-spawner-v3-t8-rampant"], - ["neutral-spitter-nest-v3-t8-rampant", "neutral-spitter-spawner-v3-t8-rampant"], - ["acid-biter-nest-v3-t8-rampant", "acid-biter-spawner-v3-t8-rampant"], - ["acid-spitter-nest-v3-t8-rampant", "acid-spitter-spawner-v3-t8-rampant"], - ["physical-biter-nest-v3-t8-rampant", "physical-biter-spawner-v3-t8-rampant"], - ["electric-biter-nest-v3-t8-rampant", "electric-biter-spawner-v3-t8-rampant"], - ["suicide-biter-nest-v3-t8-rampant", "suicide-biter-spawner-v3-t8-rampant"], - ["nuclear-biter-nest-v3-t8-rampant", "nuclear-biter-spawner-v3-t8-rampant"], - ["fire-biter-nest-v3-t8-rampant", "fire-biter-spawner-v3-t8-rampant"], - ["fire-spitter-nest-v3-t8-rampant", "fire-spitter-spawner-v3-t8-rampant"], - ["interno-spitter-nest-v3-t8-rampant", "interno-spitter-spawner-v3-t8-rampant"], - ["troll-biter-nest-v3-t8-rampant", "troll-biter-spawner-v3-t8-rampant"], - ["troll-spitter-nest-v3-t8-rampant", "troll-spitter-spawner-v3-t8-rampant"], - ["laser-biter-nest-v3-t8-rampant", "laser-biter-spawner-v3-t8-rampant"], - ["laser-spitter-nest-v3-t8-rampant", "laser-spitter-spawner-v3-t8-rampant"], - ["fast-biter-nest-v3-t8-rampant", "fast-biter-spawner-v3-t8-rampant"], - ["fast-spitter-nest-v3-t8-rampant", "fast-spitter-spawner-v3-t8-rampant"], - ["wasp-spitter-nest-v3-t8-rampant", "wasp-spitter-spawner-v3-t8-rampant"], - ["spawner-spitter-nest-v3-t8-rampant", "spawner-spitter-spawner-v3-t8-rampant"], - ["energy-thief-biter-nest-v3-t8-rampant", "energy-thief-biter-spawner-v3-t8-rampant"], - ["poison-biter-nest-v3-t8-rampant", "poison-biter-spawner-v3-t8-rampant"], - ["neutral-biter-nest-v4-t8-rampant", "neutral-biter-spawner-v4-t8-rampant"], - ["neutral-spitter-nest-v4-t8-rampant", "neutral-spitter-spawner-v4-t8-rampant"], - ["acid-biter-nest-v4-t8-rampant", "acid-biter-spawner-v4-t8-rampant"], - ["acid-spitter-nest-v4-t8-rampant", "acid-spitter-spawner-v4-t8-rampant"], - ["physical-biter-nest-v4-t8-rampant", "physical-biter-spawner-v4-t8-rampant"], - ["electric-biter-nest-v4-t8-rampant", "electric-biter-spawner-v4-t8-rampant"], - ["suicide-biter-nest-v4-t8-rampant", "suicide-biter-spawner-v4-t8-rampant"], - ["nuclear-biter-nest-v4-t8-rampant", "nuclear-biter-spawner-v4-t8-rampant"], - ["fire-biter-nest-v4-t8-rampant", "fire-biter-spawner-v4-t8-rampant"], - ["fire-spitter-nest-v4-t8-rampant", "fire-spitter-spawner-v4-t8-rampant"], - ["interno-spitter-nest-v4-t8-rampant", "interno-spitter-spawner-v4-t8-rampant"], - ["troll-biter-nest-v4-t8-rampant", "troll-biter-spawner-v4-t8-rampant"], - ["troll-spitter-nest-v4-t8-rampant", "troll-spitter-spawner-v4-t8-rampant"], - ["laser-biter-nest-v4-t8-rampant", "laser-biter-spawner-v4-t8-rampant"], - ["laser-spitter-nest-v4-t8-rampant", "laser-spitter-spawner-v4-t8-rampant"], - ["fast-biter-nest-v4-t8-rampant", "fast-biter-spawner-v4-t8-rampant"], - ["fast-spitter-nest-v4-t8-rampant", "fast-spitter-spawner-v4-t8-rampant"], - ["wasp-spitter-nest-v4-t8-rampant", "wasp-spitter-spawner-v4-t8-rampant"], - ["spawner-spitter-nest-v4-t8-rampant", "spawner-spitter-spawner-v4-t8-rampant"], - ["energy-thief-biter-nest-v4-t8-rampant", "energy-thief-biter-spawner-v4-t8-rampant"], - ["poison-biter-nest-v4-t8-rampant", "poison-biter-spawner-v4-t8-rampant"], - ["neutral-biter-nest-v5-t8-rampant", "neutral-biter-spawner-v5-t8-rampant"], - ["neutral-spitter-nest-v5-t8-rampant", "neutral-spitter-spawner-v5-t8-rampant"], - ["acid-biter-nest-v5-t8-rampant", "acid-biter-spawner-v5-t8-rampant"], - ["acid-spitter-nest-v5-t8-rampant", "acid-spitter-spawner-v5-t8-rampant"], - ["physical-biter-nest-v5-t8-rampant", "physical-biter-spawner-v5-t8-rampant"], - ["electric-biter-nest-v5-t8-rampant", "electric-biter-spawner-v5-t8-rampant"], - ["suicide-biter-nest-v5-t8-rampant", "suicide-biter-spawner-v5-t8-rampant"], - ["nuclear-biter-nest-v5-t8-rampant", "nuclear-biter-spawner-v5-t8-rampant"], - ["fire-biter-nest-v5-t8-rampant", "fire-biter-spawner-v5-t8-rampant"], - ["fire-spitter-nest-v5-t8-rampant", "fire-spitter-spawner-v5-t8-rampant"], - ["interno-spitter-nest-v5-t8-rampant", "interno-spitter-spawner-v5-t8-rampant"], - ["troll-biter-nest-v5-t8-rampant", "troll-biter-spawner-v5-t8-rampant"], - ["troll-spitter-nest-v5-t8-rampant", "troll-spitter-spawner-v5-t8-rampant"], - ["laser-biter-nest-v5-t8-rampant", "laser-biter-spawner-v5-t8-rampant"], - ["laser-spitter-nest-v5-t8-rampant", "laser-spitter-spawner-v5-t8-rampant"], - ["fast-biter-nest-v5-t8-rampant", "fast-biter-spawner-v5-t8-rampant"], - ["fast-spitter-nest-v5-t8-rampant", "fast-spitter-spawner-v5-t8-rampant"], - ["wasp-spitter-nest-v5-t8-rampant", "wasp-spitter-spawner-v5-t8-rampant"], - ["spawner-spitter-nest-v5-t8-rampant", "spawner-spitter-spawner-v5-t8-rampant"], - ["energy-thief-biter-nest-v5-t8-rampant", "energy-thief-biter-spawner-v5-t8-rampant"], - ["poison-biter-nest-v5-t8-rampant", "poison-biter-spawner-v5-t8-rampant"], - ["neutral-biter-nest-v6-t8-rampant", "neutral-biter-spawner-v6-t8-rampant"], - ["neutral-spitter-nest-v6-t8-rampant", "neutral-spitter-spawner-v6-t8-rampant"], - ["acid-biter-nest-v6-t8-rampant", "acid-biter-spawner-v6-t8-rampant"], - ["acid-spitter-nest-v6-t8-rampant", "acid-spitter-spawner-v6-t8-rampant"], - ["physical-biter-nest-v6-t8-rampant", "physical-biter-spawner-v6-t8-rampant"], - ["electric-biter-nest-v6-t8-rampant", "electric-biter-spawner-v6-t8-rampant"], - ["suicide-biter-nest-v6-t8-rampant", "suicide-biter-spawner-v6-t8-rampant"], - ["nuclear-biter-nest-v6-t8-rampant", "nuclear-biter-spawner-v6-t8-rampant"], - ["fire-biter-nest-v6-t8-rampant", "fire-biter-spawner-v6-t8-rampant"], - ["fire-spitter-nest-v6-t8-rampant", "fire-spitter-spawner-v6-t8-rampant"], - ["interno-spitter-nest-v6-t8-rampant", "interno-spitter-spawner-v6-t8-rampant"], - ["troll-biter-nest-v6-t8-rampant", "troll-biter-spawner-v6-t8-rampant"], - ["troll-spitter-nest-v6-t8-rampant", "troll-spitter-spawner-v6-t8-rampant"], - ["laser-biter-nest-v6-t8-rampant", "laser-biter-spawner-v6-t8-rampant"], - ["laser-spitter-nest-v6-t8-rampant", "laser-spitter-spawner-v6-t8-rampant"], - ["fast-biter-nest-v6-t8-rampant", "fast-biter-spawner-v6-t8-rampant"], - ["fast-spitter-nest-v6-t8-rampant", "fast-spitter-spawner-v6-t8-rampant"], - ["wasp-spitter-nest-v6-t8-rampant", "wasp-spitter-spawner-v6-t8-rampant"], - ["spawner-spitter-nest-v6-t8-rampant", "spawner-spitter-spawner-v6-t8-rampant"], - ["energy-thief-biter-nest-v6-t8-rampant", "energy-thief-biter-spawner-v6-t8-rampant"], - ["poison-biter-nest-v6-t8-rampant", "poison-biter-spawner-v6-t8-rampant"], - ["neutral-biter-nest-v7-t8-rampant", "neutral-biter-spawner-v7-t8-rampant"], - ["neutral-spitter-nest-v7-t8-rampant", "neutral-spitter-spawner-v7-t8-rampant"], - ["acid-biter-nest-v7-t8-rampant", "acid-biter-spawner-v7-t8-rampant"], - ["acid-spitter-nest-v7-t8-rampant", "acid-spitter-spawner-v7-t8-rampant"], - ["physical-biter-nest-v7-t8-rampant", "physical-biter-spawner-v7-t8-rampant"], - ["electric-biter-nest-v7-t8-rampant", "electric-biter-spawner-v7-t8-rampant"], - ["suicide-biter-nest-v7-t8-rampant", "suicide-biter-spawner-v7-t8-rampant"], - ["nuclear-biter-nest-v7-t8-rampant", "nuclear-biter-spawner-v7-t8-rampant"], - ["fire-biter-nest-v7-t8-rampant", "fire-biter-spawner-v7-t8-rampant"], - ["fire-spitter-nest-v7-t8-rampant", "fire-spitter-spawner-v7-t8-rampant"], - ["interno-spitter-nest-v7-t8-rampant", "interno-spitter-spawner-v7-t8-rampant"], - ["troll-biter-nest-v7-t8-rampant", "troll-biter-spawner-v7-t8-rampant"], - ["troll-spitter-nest-v7-t8-rampant", "troll-spitter-spawner-v7-t8-rampant"], - ["laser-biter-nest-v7-t8-rampant", "laser-biter-spawner-v7-t8-rampant"], - ["laser-spitter-nest-v7-t8-rampant", "laser-spitter-spawner-v7-t8-rampant"], - ["fast-biter-nest-v7-t8-rampant", "fast-biter-spawner-v7-t8-rampant"], - ["fast-spitter-nest-v7-t8-rampant", "fast-spitter-spawner-v7-t8-rampant"], - ["wasp-spitter-nest-v7-t8-rampant", "wasp-spitter-spawner-v7-t8-rampant"], - ["spawner-spitter-nest-v7-t8-rampant", "spawner-spitter-spawner-v7-t8-rampant"], - ["energy-thief-biter-nest-v7-t8-rampant", "energy-thief-biter-spawner-v7-t8-rampant"], - ["poison-biter-nest-v7-t8-rampant", "poison-biter-spawner-v7-t8-rampant"], - ["neutral-biter-nest-v8-t8-rampant", "neutral-biter-spawner-v8-t8-rampant"], - ["neutral-spitter-nest-v8-t8-rampant", "neutral-spitter-spawner-v8-t8-rampant"], - ["acid-biter-nest-v8-t8-rampant", "acid-biter-spawner-v8-t8-rampant"], - ["acid-spitter-nest-v8-t8-rampant", "acid-spitter-spawner-v8-t8-rampant"], - ["physical-biter-nest-v8-t8-rampant", "physical-biter-spawner-v8-t8-rampant"], - ["electric-biter-nest-v8-t8-rampant", "electric-biter-spawner-v8-t8-rampant"], - ["suicide-biter-nest-v8-t8-rampant", "suicide-biter-spawner-v8-t8-rampant"], - ["nuclear-biter-nest-v8-t8-rampant", "nuclear-biter-spawner-v8-t8-rampant"], - ["fire-biter-nest-v8-t8-rampant", "fire-biter-spawner-v8-t8-rampant"], - ["fire-spitter-nest-v8-t8-rampant", "fire-spitter-spawner-v8-t8-rampant"], - ["interno-spitter-nest-v8-t8-rampant", "interno-spitter-spawner-v8-t8-rampant"], - ["troll-biter-nest-v8-t8-rampant", "troll-biter-spawner-v8-t8-rampant"], - ["troll-spitter-nest-v8-t8-rampant", "troll-spitter-spawner-v8-t8-rampant"], - ["laser-biter-nest-v8-t8-rampant", "laser-biter-spawner-v8-t8-rampant"], - ["laser-spitter-nest-v8-t8-rampant", "laser-spitter-spawner-v8-t8-rampant"], - ["fast-biter-nest-v8-t8-rampant", "fast-biter-spawner-v8-t8-rampant"], - ["fast-spitter-nest-v8-t8-rampant", "fast-spitter-spawner-v8-t8-rampant"], - ["wasp-spitter-nest-v8-t8-rampant", "wasp-spitter-spawner-v8-t8-rampant"], - ["spawner-spitter-nest-v8-t8-rampant", "spawner-spitter-spawner-v8-t8-rampant"], - ["energy-thief-biter-nest-v8-t8-rampant", "energy-thief-biter-spawner-v8-t8-rampant"], - ["poison-biter-nest-v8-t8-rampant", "poison-biter-spawner-v8-t8-rampant"], - ["neutral-biter-nest-v9-t8-rampant", "neutral-biter-spawner-v9-t8-rampant"], - ["neutral-spitter-nest-v9-t8-rampant", "neutral-spitter-spawner-v9-t8-rampant"], - ["acid-biter-nest-v9-t8-rampant", "acid-biter-spawner-v9-t8-rampant"], - ["acid-spitter-nest-v9-t8-rampant", "acid-spitter-spawner-v9-t8-rampant"], - ["physical-biter-nest-v9-t8-rampant", "physical-biter-spawner-v9-t8-rampant"], - ["electric-biter-nest-v9-t8-rampant", "electric-biter-spawner-v9-t8-rampant"], - ["suicide-biter-nest-v9-t8-rampant", "suicide-biter-spawner-v9-t8-rampant"], - ["nuclear-biter-nest-v9-t8-rampant", "nuclear-biter-spawner-v9-t8-rampant"], - ["fire-biter-nest-v9-t8-rampant", "fire-biter-spawner-v9-t8-rampant"], - ["fire-spitter-nest-v9-t8-rampant", "fire-spitter-spawner-v9-t8-rampant"], - ["interno-spitter-nest-v9-t8-rampant", "interno-spitter-spawner-v9-t8-rampant"], - ["troll-biter-nest-v9-t8-rampant", "troll-biter-spawner-v9-t8-rampant"], - ["troll-spitter-nest-v9-t8-rampant", "troll-spitter-spawner-v9-t8-rampant"], - ["laser-biter-nest-v9-t8-rampant", "laser-biter-spawner-v9-t8-rampant"], - ["laser-spitter-nest-v9-t8-rampant", "laser-spitter-spawner-v9-t8-rampant"], - ["fast-biter-nest-v9-t8-rampant", "fast-biter-spawner-v9-t8-rampant"], - ["fast-spitter-nest-v9-t8-rampant", "fast-spitter-spawner-v9-t8-rampant"], - ["wasp-spitter-nest-v9-t8-rampant", "wasp-spitter-spawner-v9-t8-rampant"], - ["spawner-spitter-nest-v9-t8-rampant", "spawner-spitter-spawner-v9-t8-rampant"], - ["energy-thief-biter-nest-v9-t8-rampant", "energy-thief-biter-spawner-v9-t8-rampant"], - ["poison-biter-nest-v9-t8-rampant", "poison-biter-spawner-v9-t8-rampant"], - ["neutral-biter-nest-v10-t8-rampant", "neutral-biter-spawner-v10-t8-rampant"], - ["neutral-spitter-nest-v10-t8-rampant", "neutral-spitter-spawner-v10-t8-rampant"], - ["acid-biter-nest-v10-t8-rampant", "acid-biter-spawner-v10-t8-rampant"], - ["acid-spitter-nest-v10-t8-rampant", "acid-spitter-spawner-v10-t8-rampant"], - ["physical-biter-nest-v10-t8-rampant", "physical-biter-spawner-v10-t8-rampant"], - ["electric-biter-nest-v10-t8-rampant", "electric-biter-spawner-v10-t8-rampant"], - ["suicide-biter-nest-v10-t8-rampant", "suicide-biter-spawner-v10-t8-rampant"], - ["nuclear-biter-nest-v10-t8-rampant", "nuclear-biter-spawner-v10-t8-rampant"], - ["fire-biter-nest-v10-t8-rampant", "fire-biter-spawner-v10-t8-rampant"], - ["fire-spitter-nest-v10-t8-rampant", "fire-spitter-spawner-v10-t8-rampant"], - ["interno-spitter-nest-v10-t8-rampant", "interno-spitter-spawner-v10-t8-rampant"], - ["troll-biter-nest-v10-t8-rampant", "troll-biter-spawner-v10-t8-rampant"], - ["troll-spitter-nest-v10-t8-rampant", "troll-spitter-spawner-v10-t8-rampant"], - ["laser-biter-nest-v10-t8-rampant", "laser-biter-spawner-v10-t8-rampant"], - ["laser-spitter-nest-v10-t8-rampant", "laser-spitter-spawner-v10-t8-rampant"], - ["fast-biter-nest-v10-t8-rampant", "fast-biter-spawner-v10-t8-rampant"], - ["fast-spitter-nest-v10-t8-rampant", "fast-spitter-spawner-v10-t8-rampant"], - ["wasp-spitter-nest-v10-t8-rampant", "wasp-spitter-spawner-v10-t8-rampant"], - ["spawner-spitter-nest-v10-t8-rampant", "spawner-spitter-spawner-v10-t8-rampant"], - ["energy-thief-biter-nest-v10-t8-rampant", "energy-thief-biter-spawner-v10-t8-rampant"], - ["poison-biter-nest-v10-t8-rampant", "poison-biter-spawner-v10-t8-rampant"], - ["neutral-biter-nest-v11-t8-rampant", "neutral-biter-spawner-v11-t8-rampant"], - ["neutral-spitter-nest-v11-t8-rampant", "neutral-spitter-spawner-v11-t8-rampant"], - ["acid-biter-nest-v11-t8-rampant", "acid-biter-spawner-v11-t8-rampant"], - ["acid-spitter-nest-v11-t8-rampant", "acid-spitter-spawner-v11-t8-rampant"], - ["physical-biter-nest-v11-t8-rampant", "physical-biter-spawner-v11-t8-rampant"], - ["electric-biter-nest-v11-t8-rampant", "electric-biter-spawner-v11-t8-rampant"], - ["suicide-biter-nest-v11-t8-rampant", "suicide-biter-spawner-v11-t8-rampant"], - ["nuclear-biter-nest-v11-t8-rampant", "nuclear-biter-spawner-v11-t8-rampant"], - ["fire-biter-nest-v11-t8-rampant", "fire-biter-spawner-v11-t8-rampant"], - ["fire-spitter-nest-v11-t8-rampant", "fire-spitter-spawner-v11-t8-rampant"], - ["interno-spitter-nest-v11-t8-rampant", "interno-spitter-spawner-v11-t8-rampant"], - ["troll-biter-nest-v11-t8-rampant", "troll-biter-spawner-v11-t8-rampant"], - ["troll-spitter-nest-v11-t8-rampant", "troll-spitter-spawner-v11-t8-rampant"], - ["laser-biter-nest-v11-t8-rampant", "laser-biter-spawner-v11-t8-rampant"], - ["laser-spitter-nest-v11-t8-rampant", "laser-spitter-spawner-v11-t8-rampant"], - ["fast-biter-nest-v11-t8-rampant", "fast-biter-spawner-v11-t8-rampant"], - ["fast-spitter-nest-v11-t8-rampant", "fast-spitter-spawner-v11-t8-rampant"], - ["wasp-spitter-nest-v11-t8-rampant", "wasp-spitter-spawner-v11-t8-rampant"], - ["spawner-spitter-nest-v11-t8-rampant", "spawner-spitter-spawner-v11-t8-rampant"], - ["energy-thief-biter-nest-v11-t8-rampant", "energy-thief-biter-spawner-v11-t8-rampant"], - ["poison-biter-nest-v11-t8-rampant", "poison-biter-spawner-v11-t8-rampant"], - ["neutral-biter-nest-v12-t8-rampant", "neutral-biter-spawner-v12-t8-rampant"], - ["neutral-spitter-nest-v12-t8-rampant", "neutral-spitter-spawner-v12-t8-rampant"], - ["acid-biter-nest-v12-t8-rampant", "acid-biter-spawner-v12-t8-rampant"], - ["acid-spitter-nest-v12-t8-rampant", "acid-spitter-spawner-v12-t8-rampant"], - ["physical-biter-nest-v12-t8-rampant", "physical-biter-spawner-v12-t8-rampant"], - ["electric-biter-nest-v12-t8-rampant", "electric-biter-spawner-v12-t8-rampant"], - ["suicide-biter-nest-v12-t8-rampant", "suicide-biter-spawner-v12-t8-rampant"], - ["nuclear-biter-nest-v12-t8-rampant", "nuclear-biter-spawner-v12-t8-rampant"], - ["fire-biter-nest-v12-t8-rampant", "fire-biter-spawner-v12-t8-rampant"], - ["fire-spitter-nest-v12-t8-rampant", "fire-spitter-spawner-v12-t8-rampant"], - ["interno-spitter-nest-v12-t8-rampant", "interno-spitter-spawner-v12-t8-rampant"], - ["troll-biter-nest-v12-t8-rampant", "troll-biter-spawner-v12-t8-rampant"], - ["troll-spitter-nest-v12-t8-rampant", "troll-spitter-spawner-v12-t8-rampant"], - ["laser-biter-nest-v12-t8-rampant", "laser-biter-spawner-v12-t8-rampant"], - ["laser-spitter-nest-v12-t8-rampant", "laser-spitter-spawner-v12-t8-rampant"], - ["fast-biter-nest-v12-t8-rampant", "fast-biter-spawner-v12-t8-rampant"], - ["fast-spitter-nest-v12-t8-rampant", "fast-spitter-spawner-v12-t8-rampant"], - ["wasp-spitter-nest-v12-t8-rampant", "wasp-spitter-spawner-v12-t8-rampant"], - ["spawner-spitter-nest-v12-t8-rampant", "spawner-spitter-spawner-v12-t8-rampant"], - ["energy-thief-biter-nest-v12-t8-rampant", "energy-thief-biter-spawner-v12-t8-rampant"], - ["poison-biter-nest-v12-t8-rampant", "poison-biter-spawner-v12-t8-rampant"], - ["neutral-biter-nest-v13-t8-rampant", "neutral-biter-spawner-v13-t8-rampant"], - ["neutral-spitter-nest-v13-t8-rampant", "neutral-spitter-spawner-v13-t8-rampant"], - ["acid-biter-nest-v13-t8-rampant", "acid-biter-spawner-v13-t8-rampant"], - ["acid-spitter-nest-v13-t8-rampant", "acid-spitter-spawner-v13-t8-rampant"], - ["physical-biter-nest-v13-t8-rampant", "physical-biter-spawner-v13-t8-rampant"], - ["electric-biter-nest-v13-t8-rampant", "electric-biter-spawner-v13-t8-rampant"], - ["suicide-biter-nest-v13-t8-rampant", "suicide-biter-spawner-v13-t8-rampant"], - ["nuclear-biter-nest-v13-t8-rampant", "nuclear-biter-spawner-v13-t8-rampant"], - ["fire-biter-nest-v13-t8-rampant", "fire-biter-spawner-v13-t8-rampant"], - ["fire-spitter-nest-v13-t8-rampant", "fire-spitter-spawner-v13-t8-rampant"], - ["interno-spitter-nest-v13-t8-rampant", "interno-spitter-spawner-v13-t8-rampant"], - ["troll-biter-nest-v13-t8-rampant", "troll-biter-spawner-v13-t8-rampant"], - ["troll-spitter-nest-v13-t8-rampant", "troll-spitter-spawner-v13-t8-rampant"], - ["laser-biter-nest-v13-t8-rampant", "laser-biter-spawner-v13-t8-rampant"], - ["laser-spitter-nest-v13-t8-rampant", "laser-spitter-spawner-v13-t8-rampant"], - ["fast-biter-nest-v13-t8-rampant", "fast-biter-spawner-v13-t8-rampant"], - ["fast-spitter-nest-v13-t8-rampant", "fast-spitter-spawner-v13-t8-rampant"], - ["wasp-spitter-nest-v13-t8-rampant", "wasp-spitter-spawner-v13-t8-rampant"], - ["spawner-spitter-nest-v13-t8-rampant", "spawner-spitter-spawner-v13-t8-rampant"], - ["energy-thief-biter-nest-v13-t8-rampant", "energy-thief-biter-spawner-v13-t8-rampant"], - ["poison-biter-nest-v13-t8-rampant", "poison-biter-spawner-v13-t8-rampant"], - ["neutral-biter-nest-v14-t8-rampant", "neutral-biter-spawner-v14-t8-rampant"], - ["neutral-spitter-nest-v14-t8-rampant", "neutral-spitter-spawner-v14-t8-rampant"], - ["acid-biter-nest-v14-t8-rampant", "acid-biter-spawner-v14-t8-rampant"], - ["acid-spitter-nest-v14-t8-rampant", "acid-spitter-spawner-v14-t8-rampant"], - ["physical-biter-nest-v14-t8-rampant", "physical-biter-spawner-v14-t8-rampant"], - ["electric-biter-nest-v14-t8-rampant", "electric-biter-spawner-v14-t8-rampant"], - ["suicide-biter-nest-v14-t8-rampant", "suicide-biter-spawner-v14-t8-rampant"], - ["nuclear-biter-nest-v14-t8-rampant", "nuclear-biter-spawner-v14-t8-rampant"], - ["fire-biter-nest-v14-t8-rampant", "fire-biter-spawner-v14-t8-rampant"], - ["fire-spitter-nest-v14-t8-rampant", "fire-spitter-spawner-v14-t8-rampant"], - ["interno-spitter-nest-v14-t8-rampant", "interno-spitter-spawner-v14-t8-rampant"], - ["troll-biter-nest-v14-t8-rampant", "troll-biter-spawner-v14-t8-rampant"], - ["troll-spitter-nest-v14-t8-rampant", "troll-spitter-spawner-v14-t8-rampant"], - ["laser-biter-nest-v14-t8-rampant", "laser-biter-spawner-v14-t8-rampant"], - ["laser-spitter-nest-v14-t8-rampant", "laser-spitter-spawner-v14-t8-rampant"], - ["fast-biter-nest-v14-t8-rampant", "fast-biter-spawner-v14-t8-rampant"], - ["fast-spitter-nest-v14-t8-rampant", "fast-spitter-spawner-v14-t8-rampant"], - ["wasp-spitter-nest-v14-t8-rampant", "wasp-spitter-spawner-v14-t8-rampant"], - ["spawner-spitter-nest-v14-t8-rampant", "spawner-spitter-spawner-v14-t8-rampant"], - ["energy-thief-biter-nest-v14-t8-rampant", "energy-thief-biter-spawner-v14-t8-rampant"], - ["poison-biter-nest-v14-t8-rampant", "poison-biter-spawner-v14-t8-rampant"], - ["neutral-biter-nest-v15-t8-rampant", "neutral-biter-spawner-v15-t8-rampant"], - ["neutral-spitter-nest-v15-t8-rampant", "neutral-spitter-spawner-v15-t8-rampant"], - ["acid-biter-nest-v15-t8-rampant", "acid-biter-spawner-v15-t8-rampant"], - ["acid-spitter-nest-v15-t8-rampant", "acid-spitter-spawner-v15-t8-rampant"], - ["physical-biter-nest-v15-t8-rampant", "physical-biter-spawner-v15-t8-rampant"], - ["electric-biter-nest-v15-t8-rampant", "electric-biter-spawner-v15-t8-rampant"], - ["suicide-biter-nest-v15-t8-rampant", "suicide-biter-spawner-v15-t8-rampant"], - ["nuclear-biter-nest-v15-t8-rampant", "nuclear-biter-spawner-v15-t8-rampant"], - ["fire-biter-nest-v15-t8-rampant", "fire-biter-spawner-v15-t8-rampant"], - ["fire-spitter-nest-v15-t8-rampant", "fire-spitter-spawner-v15-t8-rampant"], - ["interno-spitter-nest-v15-t8-rampant", "interno-spitter-spawner-v15-t8-rampant"], - ["troll-biter-nest-v15-t8-rampant", "troll-biter-spawner-v15-t8-rampant"], - ["troll-spitter-nest-v15-t8-rampant", "troll-spitter-spawner-v15-t8-rampant"], - ["laser-biter-nest-v15-t8-rampant", "laser-biter-spawner-v15-t8-rampant"], - ["laser-spitter-nest-v15-t8-rampant", "laser-spitter-spawner-v15-t8-rampant"], - ["fast-biter-nest-v15-t8-rampant", "fast-biter-spawner-v15-t8-rampant"], - ["fast-spitter-nest-v15-t8-rampant", "fast-spitter-spawner-v15-t8-rampant"], - ["wasp-spitter-nest-v15-t8-rampant", "wasp-spitter-spawner-v15-t8-rampant"], - ["spawner-spitter-nest-v15-t8-rampant", "spawner-spitter-spawner-v15-t8-rampant"], - ["energy-thief-biter-nest-v15-t8-rampant", "energy-thief-biter-spawner-v15-t8-rampant"], - ["poison-biter-nest-v15-t8-rampant", "poison-biter-spawner-v15-t8-rampant"], - ["neutral-biter-nest-v16-t8-rampant", "neutral-biter-spawner-v16-t8-rampant"], - ["neutral-spitter-nest-v16-t8-rampant", "neutral-spitter-spawner-v16-t8-rampant"], - ["acid-biter-nest-v16-t8-rampant", "acid-biter-spawner-v16-t8-rampant"], - ["acid-spitter-nest-v16-t8-rampant", "acid-spitter-spawner-v16-t8-rampant"], - ["physical-biter-nest-v16-t8-rampant", "physical-biter-spawner-v16-t8-rampant"], - ["electric-biter-nest-v16-t8-rampant", "electric-biter-spawner-v16-t8-rampant"], - ["suicide-biter-nest-v16-t8-rampant", "suicide-biter-spawner-v16-t8-rampant"], - ["nuclear-biter-nest-v16-t8-rampant", "nuclear-biter-spawner-v16-t8-rampant"], - ["fire-biter-nest-v16-t8-rampant", "fire-biter-spawner-v16-t8-rampant"], - ["fire-spitter-nest-v16-t8-rampant", "fire-spitter-spawner-v16-t8-rampant"], - ["interno-spitter-nest-v16-t8-rampant", "interno-spitter-spawner-v16-t8-rampant"], - ["troll-biter-nest-v16-t8-rampant", "troll-biter-spawner-v16-t8-rampant"], - ["troll-spitter-nest-v16-t8-rampant", "troll-spitter-spawner-v16-t8-rampant"], - ["laser-biter-nest-v16-t8-rampant", "laser-biter-spawner-v16-t8-rampant"], - ["laser-spitter-nest-v16-t8-rampant", "laser-spitter-spawner-v16-t8-rampant"], - ["fast-biter-nest-v16-t8-rampant", "fast-biter-spawner-v16-t8-rampant"], - ["fast-spitter-nest-v16-t8-rampant", "fast-spitter-spawner-v16-t8-rampant"], - ["wasp-spitter-nest-v16-t8-rampant", "wasp-spitter-spawner-v16-t8-rampant"], - ["spawner-spitter-nest-v16-t8-rampant", "spawner-spitter-spawner-v16-t8-rampant"], - ["energy-thief-biter-nest-v16-t8-rampant", "energy-thief-biter-spawner-v16-t8-rampant"], - ["poison-biter-nest-v16-t8-rampant", "poison-biter-spawner-v16-t8-rampant"], - ["neutral-biter-nest-v17-t8-rampant", "neutral-biter-spawner-v17-t8-rampant"], - ["neutral-spitter-nest-v17-t8-rampant", "neutral-spitter-spawner-v17-t8-rampant"], - ["acid-biter-nest-v17-t8-rampant", "acid-biter-spawner-v17-t8-rampant"], - ["acid-spitter-nest-v17-t8-rampant", "acid-spitter-spawner-v17-t8-rampant"], - ["physical-biter-nest-v17-t8-rampant", "physical-biter-spawner-v17-t8-rampant"], - ["electric-biter-nest-v17-t8-rampant", "electric-biter-spawner-v17-t8-rampant"], - ["suicide-biter-nest-v17-t8-rampant", "suicide-biter-spawner-v17-t8-rampant"], - ["nuclear-biter-nest-v17-t8-rampant", "nuclear-biter-spawner-v17-t8-rampant"], - ["fire-biter-nest-v17-t8-rampant", "fire-biter-spawner-v17-t8-rampant"], - ["fire-spitter-nest-v17-t8-rampant", "fire-spitter-spawner-v17-t8-rampant"], - ["interno-spitter-nest-v17-t8-rampant", "interno-spitter-spawner-v17-t8-rampant"], - ["troll-biter-nest-v17-t8-rampant", "troll-biter-spawner-v17-t8-rampant"], - ["troll-spitter-nest-v17-t8-rampant", "troll-spitter-spawner-v17-t8-rampant"], - ["laser-biter-nest-v17-t8-rampant", "laser-biter-spawner-v17-t8-rampant"], - ["laser-spitter-nest-v17-t8-rampant", "laser-spitter-spawner-v17-t8-rampant"], - ["fast-biter-nest-v17-t8-rampant", "fast-biter-spawner-v17-t8-rampant"], - ["fast-spitter-nest-v17-t8-rampant", "fast-spitter-spawner-v17-t8-rampant"], - ["wasp-spitter-nest-v17-t8-rampant", "wasp-spitter-spawner-v17-t8-rampant"], - ["spawner-spitter-nest-v17-t8-rampant", "spawner-spitter-spawner-v17-t8-rampant"], - ["energy-thief-biter-nest-v17-t8-rampant", "energy-thief-biter-spawner-v17-t8-rampant"], - ["poison-biter-nest-v17-t8-rampant", "poison-biter-spawner-v17-t8-rampant"], - ["neutral-biter-nest-v18-t8-rampant", "neutral-biter-spawner-v18-t8-rampant"], - ["neutral-spitter-nest-v18-t8-rampant", "neutral-spitter-spawner-v18-t8-rampant"], - ["acid-biter-nest-v18-t8-rampant", "acid-biter-spawner-v18-t8-rampant"], - ["acid-spitter-nest-v18-t8-rampant", "acid-spitter-spawner-v18-t8-rampant"], - ["physical-biter-nest-v18-t8-rampant", "physical-biter-spawner-v18-t8-rampant"], - ["electric-biter-nest-v18-t8-rampant", "electric-biter-spawner-v18-t8-rampant"], - ["suicide-biter-nest-v18-t8-rampant", "suicide-biter-spawner-v18-t8-rampant"], - ["nuclear-biter-nest-v18-t8-rampant", "nuclear-biter-spawner-v18-t8-rampant"], - ["fire-biter-nest-v18-t8-rampant", "fire-biter-spawner-v18-t8-rampant"], - ["fire-spitter-nest-v18-t8-rampant", "fire-spitter-spawner-v18-t8-rampant"], - ["interno-spitter-nest-v18-t8-rampant", "interno-spitter-spawner-v18-t8-rampant"], - ["troll-biter-nest-v18-t8-rampant", "troll-biter-spawner-v18-t8-rampant"], - ["troll-spitter-nest-v18-t8-rampant", "troll-spitter-spawner-v18-t8-rampant"], - ["laser-biter-nest-v18-t8-rampant", "laser-biter-spawner-v18-t8-rampant"], - ["laser-spitter-nest-v18-t8-rampant", "laser-spitter-spawner-v18-t8-rampant"], - ["fast-biter-nest-v18-t8-rampant", "fast-biter-spawner-v18-t8-rampant"], - ["fast-spitter-nest-v18-t8-rampant", "fast-spitter-spawner-v18-t8-rampant"], - ["wasp-spitter-nest-v18-t8-rampant", "wasp-spitter-spawner-v18-t8-rampant"], - ["spawner-spitter-nest-v18-t8-rampant", "spawner-spitter-spawner-v18-t8-rampant"], - ["energy-thief-biter-nest-v18-t8-rampant", "energy-thief-biter-spawner-v18-t8-rampant"], - ["poison-biter-nest-v18-t8-rampant", "poison-biter-spawner-v18-t8-rampant"], - ["neutral-biter-nest-v19-t8-rampant", "neutral-biter-spawner-v19-t8-rampant"], - ["neutral-spitter-nest-v19-t8-rampant", "neutral-spitter-spawner-v19-t8-rampant"], - ["acid-biter-nest-v19-t8-rampant", "acid-biter-spawner-v19-t8-rampant"], - ["acid-spitter-nest-v19-t8-rampant", "acid-spitter-spawner-v19-t8-rampant"], - ["physical-biter-nest-v19-t8-rampant", "physical-biter-spawner-v19-t8-rampant"], - ["electric-biter-nest-v19-t8-rampant", "electric-biter-spawner-v19-t8-rampant"], - ["suicide-biter-nest-v19-t8-rampant", "suicide-biter-spawner-v19-t8-rampant"], - ["nuclear-biter-nest-v19-t8-rampant", "nuclear-biter-spawner-v19-t8-rampant"], - ["fire-biter-nest-v19-t8-rampant", "fire-biter-spawner-v19-t8-rampant"], - ["fire-spitter-nest-v19-t8-rampant", "fire-spitter-spawner-v19-t8-rampant"], - ["interno-spitter-nest-v19-t8-rampant", "interno-spitter-spawner-v19-t8-rampant"], - ["troll-biter-nest-v19-t8-rampant", "troll-biter-spawner-v19-t8-rampant"], - ["troll-spitter-nest-v19-t8-rampant", "troll-spitter-spawner-v19-t8-rampant"], - ["laser-biter-nest-v19-t8-rampant", "laser-biter-spawner-v19-t8-rampant"], - ["laser-spitter-nest-v19-t8-rampant", "laser-spitter-spawner-v19-t8-rampant"], - ["fast-biter-nest-v19-t8-rampant", "fast-biter-spawner-v19-t8-rampant"], - ["fast-spitter-nest-v19-t8-rampant", "fast-spitter-spawner-v19-t8-rampant"], - ["wasp-spitter-nest-v19-t8-rampant", "wasp-spitter-spawner-v19-t8-rampant"], - ["spawner-spitter-nest-v19-t8-rampant", "spawner-spitter-spawner-v19-t8-rampant"], - ["energy-thief-biter-nest-v19-t8-rampant", "energy-thief-biter-spawner-v19-t8-rampant"], - ["poison-biter-nest-v19-t8-rampant", "poison-biter-spawner-v19-t8-rampant"], - ["neutral-biter-nest-v20-t8-rampant", "neutral-biter-spawner-v20-t8-rampant"], - ["neutral-spitter-nest-v20-t8-rampant", "neutral-spitter-spawner-v20-t8-rampant"], - ["acid-biter-nest-v20-t8-rampant", "acid-biter-spawner-v20-t8-rampant"], - ["acid-spitter-nest-v20-t8-rampant", "acid-spitter-spawner-v20-t8-rampant"], - ["physical-biter-nest-v20-t8-rampant", "physical-biter-spawner-v20-t8-rampant"], - ["electric-biter-nest-v20-t8-rampant", "electric-biter-spawner-v20-t8-rampant"], - ["suicide-biter-nest-v20-t8-rampant", "suicide-biter-spawner-v20-t8-rampant"], - ["nuclear-biter-nest-v20-t8-rampant", "nuclear-biter-spawner-v20-t8-rampant"], - ["fire-biter-nest-v20-t8-rampant", "fire-biter-spawner-v20-t8-rampant"], - ["fire-spitter-nest-v20-t8-rampant", "fire-spitter-spawner-v20-t8-rampant"], - ["interno-spitter-nest-v20-t8-rampant", "interno-spitter-spawner-v20-t8-rampant"], - ["troll-biter-nest-v20-t8-rampant", "troll-biter-spawner-v20-t8-rampant"], - ["troll-spitter-nest-v20-t8-rampant", "troll-spitter-spawner-v20-t8-rampant"], - ["laser-biter-nest-v20-t8-rampant", "laser-biter-spawner-v20-t8-rampant"], - ["laser-spitter-nest-v20-t8-rampant", "laser-spitter-spawner-v20-t8-rampant"], - ["fast-biter-nest-v20-t8-rampant", "fast-biter-spawner-v20-t8-rampant"], - ["fast-spitter-nest-v20-t8-rampant", "fast-spitter-spawner-v20-t8-rampant"], - ["wasp-spitter-nest-v20-t8-rampant", "wasp-spitter-spawner-v20-t8-rampant"], - ["spawner-spitter-nest-v20-t8-rampant", "spawner-spitter-spawner-v20-t8-rampant"], - ["energy-thief-biter-nest-v20-t8-rampant", "energy-thief-biter-spawner-v20-t8-rampant"], - ["poison-biter-nest-v20-t8-rampant", "poison-biter-spawner-v20-t8-rampant"], - ["neutral-biter-nest-v1-t9-rampant", "neutral-biter-spawner-v1-t9-rampant"], - ["neutral-spitter-nest-v1-t9-rampant", "neutral-spitter-spawner-v1-t9-rampant"], - ["acid-biter-nest-v1-t9-rampant", "acid-biter-spawner-v1-t9-rampant"], - ["acid-spitter-nest-v1-t9-rampant", "acid-spitter-spawner-v1-t9-rampant"], - ["physical-biter-nest-v1-t9-rampant", "physical-biter-spawner-v1-t9-rampant"], - ["electric-biter-nest-v1-t9-rampant", "electric-biter-spawner-v1-t9-rampant"], - ["suicide-biter-nest-v1-t9-rampant", "suicide-biter-spawner-v1-t9-rampant"], - ["nuclear-biter-nest-v1-t9-rampant", "nuclear-biter-spawner-v1-t9-rampant"], - ["fire-biter-nest-v1-t9-rampant", "fire-biter-spawner-v1-t9-rampant"], - ["fire-spitter-nest-v1-t9-rampant", "fire-spitter-spawner-v1-t9-rampant"], - ["interno-spitter-nest-v1-t9-rampant", "interno-spitter-spawner-v1-t9-rampant"], - ["troll-biter-nest-v1-t9-rampant", "troll-biter-spawner-v1-t9-rampant"], - ["troll-spitter-nest-v1-t9-rampant", "troll-spitter-spawner-v1-t9-rampant"], - ["laser-biter-nest-v1-t9-rampant", "laser-biter-spawner-v1-t9-rampant"], - ["laser-spitter-nest-v1-t9-rampant", "laser-spitter-spawner-v1-t9-rampant"], - ["fast-biter-nest-v1-t9-rampant", "fast-biter-spawner-v1-t9-rampant"], - ["fast-spitter-nest-v1-t9-rampant", "fast-spitter-spawner-v1-t9-rampant"], - ["wasp-spitter-nest-v1-t9-rampant", "wasp-spitter-spawner-v1-t9-rampant"], - ["spawner-spitter-nest-v1-t9-rampant", "spawner-spitter-spawner-v1-t9-rampant"], - ["energy-thief-biter-nest-v1-t9-rampant", "energy-thief-biter-spawner-v1-t9-rampant"], - ["poison-biter-nest-v1-t9-rampant", "poison-biter-spawner-v1-t9-rampant"], - ["neutral-biter-nest-v2-t9-rampant", "neutral-biter-spawner-v2-t9-rampant"], - ["neutral-spitter-nest-v2-t9-rampant", "neutral-spitter-spawner-v2-t9-rampant"], - ["acid-biter-nest-v2-t9-rampant", "acid-biter-spawner-v2-t9-rampant"], - ["acid-spitter-nest-v2-t9-rampant", "acid-spitter-spawner-v2-t9-rampant"], - ["physical-biter-nest-v2-t9-rampant", "physical-biter-spawner-v2-t9-rampant"], - ["electric-biter-nest-v2-t9-rampant", "electric-biter-spawner-v2-t9-rampant"], - ["suicide-biter-nest-v2-t9-rampant", "suicide-biter-spawner-v2-t9-rampant"], - ["nuclear-biter-nest-v2-t9-rampant", "nuclear-biter-spawner-v2-t9-rampant"], - ["fire-biter-nest-v2-t9-rampant", "fire-biter-spawner-v2-t9-rampant"], - ["fire-spitter-nest-v2-t9-rampant", "fire-spitter-spawner-v2-t9-rampant"], - ["interno-spitter-nest-v2-t9-rampant", "interno-spitter-spawner-v2-t9-rampant"], - ["troll-biter-nest-v2-t9-rampant", "troll-biter-spawner-v2-t9-rampant"], - ["troll-spitter-nest-v2-t9-rampant", "troll-spitter-spawner-v2-t9-rampant"], - ["laser-biter-nest-v2-t9-rampant", "laser-biter-spawner-v2-t9-rampant"], - ["laser-spitter-nest-v2-t9-rampant", "laser-spitter-spawner-v2-t9-rampant"], - ["fast-biter-nest-v2-t9-rampant", "fast-biter-spawner-v2-t9-rampant"], - ["fast-spitter-nest-v2-t9-rampant", "fast-spitter-spawner-v2-t9-rampant"], - ["wasp-spitter-nest-v2-t9-rampant", "wasp-spitter-spawner-v2-t9-rampant"], - ["spawner-spitter-nest-v2-t9-rampant", "spawner-spitter-spawner-v2-t9-rampant"], - ["energy-thief-biter-nest-v2-t9-rampant", "energy-thief-biter-spawner-v2-t9-rampant"], - ["poison-biter-nest-v2-t9-rampant", "poison-biter-spawner-v2-t9-rampant"], - ["neutral-biter-nest-v3-t9-rampant", "neutral-biter-spawner-v3-t9-rampant"], - ["neutral-spitter-nest-v3-t9-rampant", "neutral-spitter-spawner-v3-t9-rampant"], - ["acid-biter-nest-v3-t9-rampant", "acid-biter-spawner-v3-t9-rampant"], - ["acid-spitter-nest-v3-t9-rampant", "acid-spitter-spawner-v3-t9-rampant"], - ["physical-biter-nest-v3-t9-rampant", "physical-biter-spawner-v3-t9-rampant"], - ["electric-biter-nest-v3-t9-rampant", "electric-biter-spawner-v3-t9-rampant"], - ["suicide-biter-nest-v3-t9-rampant", "suicide-biter-spawner-v3-t9-rampant"], - ["nuclear-biter-nest-v3-t9-rampant", "nuclear-biter-spawner-v3-t9-rampant"], - ["fire-biter-nest-v3-t9-rampant", "fire-biter-spawner-v3-t9-rampant"], - ["fire-spitter-nest-v3-t9-rampant", "fire-spitter-spawner-v3-t9-rampant"], - ["interno-spitter-nest-v3-t9-rampant", "interno-spitter-spawner-v3-t9-rampant"], - ["troll-biter-nest-v3-t9-rampant", "troll-biter-spawner-v3-t9-rampant"], - ["troll-spitter-nest-v3-t9-rampant", "troll-spitter-spawner-v3-t9-rampant"], - ["laser-biter-nest-v3-t9-rampant", "laser-biter-spawner-v3-t9-rampant"], - ["laser-spitter-nest-v3-t9-rampant", "laser-spitter-spawner-v3-t9-rampant"], - ["fast-biter-nest-v3-t9-rampant", "fast-biter-spawner-v3-t9-rampant"], - ["fast-spitter-nest-v3-t9-rampant", "fast-spitter-spawner-v3-t9-rampant"], - ["wasp-spitter-nest-v3-t9-rampant", "wasp-spitter-spawner-v3-t9-rampant"], - ["spawner-spitter-nest-v3-t9-rampant", "spawner-spitter-spawner-v3-t9-rampant"], - ["energy-thief-biter-nest-v3-t9-rampant", "energy-thief-biter-spawner-v3-t9-rampant"], - ["poison-biter-nest-v3-t9-rampant", "poison-biter-spawner-v3-t9-rampant"], - ["neutral-biter-nest-v4-t9-rampant", "neutral-biter-spawner-v4-t9-rampant"], - ["neutral-spitter-nest-v4-t9-rampant", "neutral-spitter-spawner-v4-t9-rampant"], - ["acid-biter-nest-v4-t9-rampant", "acid-biter-spawner-v4-t9-rampant"], - ["acid-spitter-nest-v4-t9-rampant", "acid-spitter-spawner-v4-t9-rampant"], - ["physical-biter-nest-v4-t9-rampant", "physical-biter-spawner-v4-t9-rampant"], - ["electric-biter-nest-v4-t9-rampant", "electric-biter-spawner-v4-t9-rampant"], - ["suicide-biter-nest-v4-t9-rampant", "suicide-biter-spawner-v4-t9-rampant"], - ["nuclear-biter-nest-v4-t9-rampant", "nuclear-biter-spawner-v4-t9-rampant"], - ["fire-biter-nest-v4-t9-rampant", "fire-biter-spawner-v4-t9-rampant"], - ["fire-spitter-nest-v4-t9-rampant", "fire-spitter-spawner-v4-t9-rampant"], - ["interno-spitter-nest-v4-t9-rampant", "interno-spitter-spawner-v4-t9-rampant"], - ["troll-biter-nest-v4-t9-rampant", "troll-biter-spawner-v4-t9-rampant"], - ["troll-spitter-nest-v4-t9-rampant", "troll-spitter-spawner-v4-t9-rampant"], - ["laser-biter-nest-v4-t9-rampant", "laser-biter-spawner-v4-t9-rampant"], - ["laser-spitter-nest-v4-t9-rampant", "laser-spitter-spawner-v4-t9-rampant"], - ["fast-biter-nest-v4-t9-rampant", "fast-biter-spawner-v4-t9-rampant"], - ["fast-spitter-nest-v4-t9-rampant", "fast-spitter-spawner-v4-t9-rampant"], - ["wasp-spitter-nest-v4-t9-rampant", "wasp-spitter-spawner-v4-t9-rampant"], - ["spawner-spitter-nest-v4-t9-rampant", "spawner-spitter-spawner-v4-t9-rampant"], - ["energy-thief-biter-nest-v4-t9-rampant", "energy-thief-biter-spawner-v4-t9-rampant"], - ["poison-biter-nest-v4-t9-rampant", "poison-biter-spawner-v4-t9-rampant"], - ["neutral-biter-nest-v5-t9-rampant", "neutral-biter-spawner-v5-t9-rampant"], - ["neutral-spitter-nest-v5-t9-rampant", "neutral-spitter-spawner-v5-t9-rampant"], - ["acid-biter-nest-v5-t9-rampant", "acid-biter-spawner-v5-t9-rampant"], - ["acid-spitter-nest-v5-t9-rampant", "acid-spitter-spawner-v5-t9-rampant"], - ["physical-biter-nest-v5-t9-rampant", "physical-biter-spawner-v5-t9-rampant"], - ["electric-biter-nest-v5-t9-rampant", "electric-biter-spawner-v5-t9-rampant"], - ["suicide-biter-nest-v5-t9-rampant", "suicide-biter-spawner-v5-t9-rampant"], - ["nuclear-biter-nest-v5-t9-rampant", "nuclear-biter-spawner-v5-t9-rampant"], - ["fire-biter-nest-v5-t9-rampant", "fire-biter-spawner-v5-t9-rampant"], - ["fire-spitter-nest-v5-t9-rampant", "fire-spitter-spawner-v5-t9-rampant"], - ["interno-spitter-nest-v5-t9-rampant", "interno-spitter-spawner-v5-t9-rampant"], - ["troll-biter-nest-v5-t9-rampant", "troll-biter-spawner-v5-t9-rampant"], - ["troll-spitter-nest-v5-t9-rampant", "troll-spitter-spawner-v5-t9-rampant"], - ["laser-biter-nest-v5-t9-rampant", "laser-biter-spawner-v5-t9-rampant"], - ["laser-spitter-nest-v5-t9-rampant", "laser-spitter-spawner-v5-t9-rampant"], - ["fast-biter-nest-v5-t9-rampant", "fast-biter-spawner-v5-t9-rampant"], - ["fast-spitter-nest-v5-t9-rampant", "fast-spitter-spawner-v5-t9-rampant"], - ["wasp-spitter-nest-v5-t9-rampant", "wasp-spitter-spawner-v5-t9-rampant"], - ["spawner-spitter-nest-v5-t9-rampant", "spawner-spitter-spawner-v5-t9-rampant"], - ["energy-thief-biter-nest-v5-t9-rampant", "energy-thief-biter-spawner-v5-t9-rampant"], - ["poison-biter-nest-v5-t9-rampant", "poison-biter-spawner-v5-t9-rampant"], - ["neutral-biter-nest-v6-t9-rampant", "neutral-biter-spawner-v6-t9-rampant"], - ["neutral-spitter-nest-v6-t9-rampant", "neutral-spitter-spawner-v6-t9-rampant"], - ["acid-biter-nest-v6-t9-rampant", "acid-biter-spawner-v6-t9-rampant"], - ["acid-spitter-nest-v6-t9-rampant", "acid-spitter-spawner-v6-t9-rampant"], - ["physical-biter-nest-v6-t9-rampant", "physical-biter-spawner-v6-t9-rampant"], - ["electric-biter-nest-v6-t9-rampant", "electric-biter-spawner-v6-t9-rampant"], - ["suicide-biter-nest-v6-t9-rampant", "suicide-biter-spawner-v6-t9-rampant"], - ["nuclear-biter-nest-v6-t9-rampant", "nuclear-biter-spawner-v6-t9-rampant"], - ["fire-biter-nest-v6-t9-rampant", "fire-biter-spawner-v6-t9-rampant"], - ["fire-spitter-nest-v6-t9-rampant", "fire-spitter-spawner-v6-t9-rampant"], - ["interno-spitter-nest-v6-t9-rampant", "interno-spitter-spawner-v6-t9-rampant"], - ["troll-biter-nest-v6-t9-rampant", "troll-biter-spawner-v6-t9-rampant"], - ["troll-spitter-nest-v6-t9-rampant", "troll-spitter-spawner-v6-t9-rampant"], - ["laser-biter-nest-v6-t9-rampant", "laser-biter-spawner-v6-t9-rampant"], - ["laser-spitter-nest-v6-t9-rampant", "laser-spitter-spawner-v6-t9-rampant"], - ["fast-biter-nest-v6-t9-rampant", "fast-biter-spawner-v6-t9-rampant"], - ["fast-spitter-nest-v6-t9-rampant", "fast-spitter-spawner-v6-t9-rampant"], - ["wasp-spitter-nest-v6-t9-rampant", "wasp-spitter-spawner-v6-t9-rampant"], - ["spawner-spitter-nest-v6-t9-rampant", "spawner-spitter-spawner-v6-t9-rampant"], - ["energy-thief-biter-nest-v6-t9-rampant", "energy-thief-biter-spawner-v6-t9-rampant"], - ["poison-biter-nest-v6-t9-rampant", "poison-biter-spawner-v6-t9-rampant"], - ["neutral-biter-nest-v7-t9-rampant", "neutral-biter-spawner-v7-t9-rampant"], - ["neutral-spitter-nest-v7-t9-rampant", "neutral-spitter-spawner-v7-t9-rampant"], - ["acid-biter-nest-v7-t9-rampant", "acid-biter-spawner-v7-t9-rampant"], - ["acid-spitter-nest-v7-t9-rampant", "acid-spitter-spawner-v7-t9-rampant"], - ["physical-biter-nest-v7-t9-rampant", "physical-biter-spawner-v7-t9-rampant"], - ["electric-biter-nest-v7-t9-rampant", "electric-biter-spawner-v7-t9-rampant"], - ["suicide-biter-nest-v7-t9-rampant", "suicide-biter-spawner-v7-t9-rampant"], - ["nuclear-biter-nest-v7-t9-rampant", "nuclear-biter-spawner-v7-t9-rampant"], - ["fire-biter-nest-v7-t9-rampant", "fire-biter-spawner-v7-t9-rampant"], - ["fire-spitter-nest-v7-t9-rampant", "fire-spitter-spawner-v7-t9-rampant"], - ["interno-spitter-nest-v7-t9-rampant", "interno-spitter-spawner-v7-t9-rampant"], - ["troll-biter-nest-v7-t9-rampant", "troll-biter-spawner-v7-t9-rampant"], - ["troll-spitter-nest-v7-t9-rampant", "troll-spitter-spawner-v7-t9-rampant"], - ["laser-biter-nest-v7-t9-rampant", "laser-biter-spawner-v7-t9-rampant"], - ["laser-spitter-nest-v7-t9-rampant", "laser-spitter-spawner-v7-t9-rampant"], - ["fast-biter-nest-v7-t9-rampant", "fast-biter-spawner-v7-t9-rampant"], - ["fast-spitter-nest-v7-t9-rampant", "fast-spitter-spawner-v7-t9-rampant"], - ["wasp-spitter-nest-v7-t9-rampant", "wasp-spitter-spawner-v7-t9-rampant"], - ["spawner-spitter-nest-v7-t9-rampant", "spawner-spitter-spawner-v7-t9-rampant"], - ["energy-thief-biter-nest-v7-t9-rampant", "energy-thief-biter-spawner-v7-t9-rampant"], - ["poison-biter-nest-v7-t9-rampant", "poison-biter-spawner-v7-t9-rampant"], - ["neutral-biter-nest-v8-t9-rampant", "neutral-biter-spawner-v8-t9-rampant"], - ["neutral-spitter-nest-v8-t9-rampant", "neutral-spitter-spawner-v8-t9-rampant"], - ["acid-biter-nest-v8-t9-rampant", "acid-biter-spawner-v8-t9-rampant"], - ["acid-spitter-nest-v8-t9-rampant", "acid-spitter-spawner-v8-t9-rampant"], - ["physical-biter-nest-v8-t9-rampant", "physical-biter-spawner-v8-t9-rampant"], - ["electric-biter-nest-v8-t9-rampant", "electric-biter-spawner-v8-t9-rampant"], - ["suicide-biter-nest-v8-t9-rampant", "suicide-biter-spawner-v8-t9-rampant"], - ["nuclear-biter-nest-v8-t9-rampant", "nuclear-biter-spawner-v8-t9-rampant"], - ["fire-biter-nest-v8-t9-rampant", "fire-biter-spawner-v8-t9-rampant"], - ["fire-spitter-nest-v8-t9-rampant", "fire-spitter-spawner-v8-t9-rampant"], - ["interno-spitter-nest-v8-t9-rampant", "interno-spitter-spawner-v8-t9-rampant"], - ["troll-biter-nest-v8-t9-rampant", "troll-biter-spawner-v8-t9-rampant"], - ["troll-spitter-nest-v8-t9-rampant", "troll-spitter-spawner-v8-t9-rampant"], - ["laser-biter-nest-v8-t9-rampant", "laser-biter-spawner-v8-t9-rampant"], - ["laser-spitter-nest-v8-t9-rampant", "laser-spitter-spawner-v8-t9-rampant"], - ["fast-biter-nest-v8-t9-rampant", "fast-biter-spawner-v8-t9-rampant"], - ["fast-spitter-nest-v8-t9-rampant", "fast-spitter-spawner-v8-t9-rampant"], - ["wasp-spitter-nest-v8-t9-rampant", "wasp-spitter-spawner-v8-t9-rampant"], - ["spawner-spitter-nest-v8-t9-rampant", "spawner-spitter-spawner-v8-t9-rampant"], - ["energy-thief-biter-nest-v8-t9-rampant", "energy-thief-biter-spawner-v8-t9-rampant"], - ["poison-biter-nest-v8-t9-rampant", "poison-biter-spawner-v8-t9-rampant"], - ["neutral-biter-nest-v9-t9-rampant", "neutral-biter-spawner-v9-t9-rampant"], - ["neutral-spitter-nest-v9-t9-rampant", "neutral-spitter-spawner-v9-t9-rampant"], - ["acid-biter-nest-v9-t9-rampant", "acid-biter-spawner-v9-t9-rampant"], - ["acid-spitter-nest-v9-t9-rampant", "acid-spitter-spawner-v9-t9-rampant"], - ["physical-biter-nest-v9-t9-rampant", "physical-biter-spawner-v9-t9-rampant"], - ["electric-biter-nest-v9-t9-rampant", "electric-biter-spawner-v9-t9-rampant"], - ["suicide-biter-nest-v9-t9-rampant", "suicide-biter-spawner-v9-t9-rampant"], - ["nuclear-biter-nest-v9-t9-rampant", "nuclear-biter-spawner-v9-t9-rampant"], - ["fire-biter-nest-v9-t9-rampant", "fire-biter-spawner-v9-t9-rampant"], - ["fire-spitter-nest-v9-t9-rampant", "fire-spitter-spawner-v9-t9-rampant"], - ["interno-spitter-nest-v9-t9-rampant", "interno-spitter-spawner-v9-t9-rampant"], - ["troll-biter-nest-v9-t9-rampant", "troll-biter-spawner-v9-t9-rampant"], - ["troll-spitter-nest-v9-t9-rampant", "troll-spitter-spawner-v9-t9-rampant"], - ["laser-biter-nest-v9-t9-rampant", "laser-biter-spawner-v9-t9-rampant"], - ["laser-spitter-nest-v9-t9-rampant", "laser-spitter-spawner-v9-t9-rampant"], - ["fast-biter-nest-v9-t9-rampant", "fast-biter-spawner-v9-t9-rampant"], - ["fast-spitter-nest-v9-t9-rampant", "fast-spitter-spawner-v9-t9-rampant"], - ["wasp-spitter-nest-v9-t9-rampant", "wasp-spitter-spawner-v9-t9-rampant"], - ["spawner-spitter-nest-v9-t9-rampant", "spawner-spitter-spawner-v9-t9-rampant"], - ["energy-thief-biter-nest-v9-t9-rampant", "energy-thief-biter-spawner-v9-t9-rampant"], - ["poison-biter-nest-v9-t9-rampant", "poison-biter-spawner-v9-t9-rampant"], - ["neutral-biter-nest-v10-t9-rampant", "neutral-biter-spawner-v10-t9-rampant"], - ["neutral-spitter-nest-v10-t9-rampant", "neutral-spitter-spawner-v10-t9-rampant"], - ["acid-biter-nest-v10-t9-rampant", "acid-biter-spawner-v10-t9-rampant"], - ["acid-spitter-nest-v10-t9-rampant", "acid-spitter-spawner-v10-t9-rampant"], - ["physical-biter-nest-v10-t9-rampant", "physical-biter-spawner-v10-t9-rampant"], - ["electric-biter-nest-v10-t9-rampant", "electric-biter-spawner-v10-t9-rampant"], - ["suicide-biter-nest-v10-t9-rampant", "suicide-biter-spawner-v10-t9-rampant"], - ["nuclear-biter-nest-v10-t9-rampant", "nuclear-biter-spawner-v10-t9-rampant"], - ["fire-biter-nest-v10-t9-rampant", "fire-biter-spawner-v10-t9-rampant"], - ["fire-spitter-nest-v10-t9-rampant", "fire-spitter-spawner-v10-t9-rampant"], - ["interno-spitter-nest-v10-t9-rampant", "interno-spitter-spawner-v10-t9-rampant"], - ["troll-biter-nest-v10-t9-rampant", "troll-biter-spawner-v10-t9-rampant"], - ["troll-spitter-nest-v10-t9-rampant", "troll-spitter-spawner-v10-t9-rampant"], - ["laser-biter-nest-v10-t9-rampant", "laser-biter-spawner-v10-t9-rampant"], - ["laser-spitter-nest-v10-t9-rampant", "laser-spitter-spawner-v10-t9-rampant"], - ["fast-biter-nest-v10-t9-rampant", "fast-biter-spawner-v10-t9-rampant"], - ["fast-spitter-nest-v10-t9-rampant", "fast-spitter-spawner-v10-t9-rampant"], - ["wasp-spitter-nest-v10-t9-rampant", "wasp-spitter-spawner-v10-t9-rampant"], - ["spawner-spitter-nest-v10-t9-rampant", "spawner-spitter-spawner-v10-t9-rampant"], - ["energy-thief-biter-nest-v10-t9-rampant", "energy-thief-biter-spawner-v10-t9-rampant"], - ["poison-biter-nest-v10-t9-rampant", "poison-biter-spawner-v10-t9-rampant"], - ["neutral-biter-nest-v11-t9-rampant", "neutral-biter-spawner-v11-t9-rampant"], - ["neutral-spitter-nest-v11-t9-rampant", "neutral-spitter-spawner-v11-t9-rampant"], - ["acid-biter-nest-v11-t9-rampant", "acid-biter-spawner-v11-t9-rampant"], - ["acid-spitter-nest-v11-t9-rampant", "acid-spitter-spawner-v11-t9-rampant"], - ["physical-biter-nest-v11-t9-rampant", "physical-biter-spawner-v11-t9-rampant"], - ["electric-biter-nest-v11-t9-rampant", "electric-biter-spawner-v11-t9-rampant"], - ["suicide-biter-nest-v11-t9-rampant", "suicide-biter-spawner-v11-t9-rampant"], - ["nuclear-biter-nest-v11-t9-rampant", "nuclear-biter-spawner-v11-t9-rampant"], - ["fire-biter-nest-v11-t9-rampant", "fire-biter-spawner-v11-t9-rampant"], - ["fire-spitter-nest-v11-t9-rampant", "fire-spitter-spawner-v11-t9-rampant"], - ["interno-spitter-nest-v11-t9-rampant", "interno-spitter-spawner-v11-t9-rampant"], - ["troll-biter-nest-v11-t9-rampant", "troll-biter-spawner-v11-t9-rampant"], - ["troll-spitter-nest-v11-t9-rampant", "troll-spitter-spawner-v11-t9-rampant"], - ["laser-biter-nest-v11-t9-rampant", "laser-biter-spawner-v11-t9-rampant"], - ["laser-spitter-nest-v11-t9-rampant", "laser-spitter-spawner-v11-t9-rampant"], - ["fast-biter-nest-v11-t9-rampant", "fast-biter-spawner-v11-t9-rampant"], - ["fast-spitter-nest-v11-t9-rampant", "fast-spitter-spawner-v11-t9-rampant"], - ["wasp-spitter-nest-v11-t9-rampant", "wasp-spitter-spawner-v11-t9-rampant"], - ["spawner-spitter-nest-v11-t9-rampant", "spawner-spitter-spawner-v11-t9-rampant"], - ["energy-thief-biter-nest-v11-t9-rampant", "energy-thief-biter-spawner-v11-t9-rampant"], - ["poison-biter-nest-v11-t9-rampant", "poison-biter-spawner-v11-t9-rampant"], - ["neutral-biter-nest-v12-t9-rampant", "neutral-biter-spawner-v12-t9-rampant"], - ["neutral-spitter-nest-v12-t9-rampant", "neutral-spitter-spawner-v12-t9-rampant"], - ["acid-biter-nest-v12-t9-rampant", "acid-biter-spawner-v12-t9-rampant"], - ["acid-spitter-nest-v12-t9-rampant", "acid-spitter-spawner-v12-t9-rampant"], - ["physical-biter-nest-v12-t9-rampant", "physical-biter-spawner-v12-t9-rampant"], - ["electric-biter-nest-v12-t9-rampant", "electric-biter-spawner-v12-t9-rampant"], - ["suicide-biter-nest-v12-t9-rampant", "suicide-biter-spawner-v12-t9-rampant"], - ["nuclear-biter-nest-v12-t9-rampant", "nuclear-biter-spawner-v12-t9-rampant"], - ["fire-biter-nest-v12-t9-rampant", "fire-biter-spawner-v12-t9-rampant"], - ["fire-spitter-nest-v12-t9-rampant", "fire-spitter-spawner-v12-t9-rampant"], - ["interno-spitter-nest-v12-t9-rampant", "interno-spitter-spawner-v12-t9-rampant"], - ["troll-biter-nest-v12-t9-rampant", "troll-biter-spawner-v12-t9-rampant"], - ["troll-spitter-nest-v12-t9-rampant", "troll-spitter-spawner-v12-t9-rampant"], - ["laser-biter-nest-v12-t9-rampant", "laser-biter-spawner-v12-t9-rampant"], - ["laser-spitter-nest-v12-t9-rampant", "laser-spitter-spawner-v12-t9-rampant"], - ["fast-biter-nest-v12-t9-rampant", "fast-biter-spawner-v12-t9-rampant"], - ["fast-spitter-nest-v12-t9-rampant", "fast-spitter-spawner-v12-t9-rampant"], - ["wasp-spitter-nest-v12-t9-rampant", "wasp-spitter-spawner-v12-t9-rampant"], - ["spawner-spitter-nest-v12-t9-rampant", "spawner-spitter-spawner-v12-t9-rampant"], - ["energy-thief-biter-nest-v12-t9-rampant", "energy-thief-biter-spawner-v12-t9-rampant"], - ["poison-biter-nest-v12-t9-rampant", "poison-biter-spawner-v12-t9-rampant"], - ["neutral-biter-nest-v13-t9-rampant", "neutral-biter-spawner-v13-t9-rampant"], - ["neutral-spitter-nest-v13-t9-rampant", "neutral-spitter-spawner-v13-t9-rampant"], - ["acid-biter-nest-v13-t9-rampant", "acid-biter-spawner-v13-t9-rampant"], - ["acid-spitter-nest-v13-t9-rampant", "acid-spitter-spawner-v13-t9-rampant"], - ["physical-biter-nest-v13-t9-rampant", "physical-biter-spawner-v13-t9-rampant"], - ["electric-biter-nest-v13-t9-rampant", "electric-biter-spawner-v13-t9-rampant"], - ["suicide-biter-nest-v13-t9-rampant", "suicide-biter-spawner-v13-t9-rampant"], - ["nuclear-biter-nest-v13-t9-rampant", "nuclear-biter-spawner-v13-t9-rampant"], - ["fire-biter-nest-v13-t9-rampant", "fire-biter-spawner-v13-t9-rampant"], - ["fire-spitter-nest-v13-t9-rampant", "fire-spitter-spawner-v13-t9-rampant"], - ["interno-spitter-nest-v13-t9-rampant", "interno-spitter-spawner-v13-t9-rampant"], - ["troll-biter-nest-v13-t9-rampant", "troll-biter-spawner-v13-t9-rampant"], - ["troll-spitter-nest-v13-t9-rampant", "troll-spitter-spawner-v13-t9-rampant"], - ["laser-biter-nest-v13-t9-rampant", "laser-biter-spawner-v13-t9-rampant"], - ["laser-spitter-nest-v13-t9-rampant", "laser-spitter-spawner-v13-t9-rampant"], - ["fast-biter-nest-v13-t9-rampant", "fast-biter-spawner-v13-t9-rampant"], - ["fast-spitter-nest-v13-t9-rampant", "fast-spitter-spawner-v13-t9-rampant"], - ["wasp-spitter-nest-v13-t9-rampant", "wasp-spitter-spawner-v13-t9-rampant"], - ["spawner-spitter-nest-v13-t9-rampant", "spawner-spitter-spawner-v13-t9-rampant"], - ["energy-thief-biter-nest-v13-t9-rampant", "energy-thief-biter-spawner-v13-t9-rampant"], - ["poison-biter-nest-v13-t9-rampant", "poison-biter-spawner-v13-t9-rampant"], - ["neutral-biter-nest-v14-t9-rampant", "neutral-biter-spawner-v14-t9-rampant"], - ["neutral-spitter-nest-v14-t9-rampant", "neutral-spitter-spawner-v14-t9-rampant"], - ["acid-biter-nest-v14-t9-rampant", "acid-biter-spawner-v14-t9-rampant"], - ["acid-spitter-nest-v14-t9-rampant", "acid-spitter-spawner-v14-t9-rampant"], - ["physical-biter-nest-v14-t9-rampant", "physical-biter-spawner-v14-t9-rampant"], - ["electric-biter-nest-v14-t9-rampant", "electric-biter-spawner-v14-t9-rampant"], - ["suicide-biter-nest-v14-t9-rampant", "suicide-biter-spawner-v14-t9-rampant"], - ["nuclear-biter-nest-v14-t9-rampant", "nuclear-biter-spawner-v14-t9-rampant"], - ["fire-biter-nest-v14-t9-rampant", "fire-biter-spawner-v14-t9-rampant"], - ["fire-spitter-nest-v14-t9-rampant", "fire-spitter-spawner-v14-t9-rampant"], - ["interno-spitter-nest-v14-t9-rampant", "interno-spitter-spawner-v14-t9-rampant"], - ["troll-biter-nest-v14-t9-rampant", "troll-biter-spawner-v14-t9-rampant"], - ["troll-spitter-nest-v14-t9-rampant", "troll-spitter-spawner-v14-t9-rampant"], - ["laser-biter-nest-v14-t9-rampant", "laser-biter-spawner-v14-t9-rampant"], - ["laser-spitter-nest-v14-t9-rampant", "laser-spitter-spawner-v14-t9-rampant"], - ["fast-biter-nest-v14-t9-rampant", "fast-biter-spawner-v14-t9-rampant"], - ["fast-spitter-nest-v14-t9-rampant", "fast-spitter-spawner-v14-t9-rampant"], - ["wasp-spitter-nest-v14-t9-rampant", "wasp-spitter-spawner-v14-t9-rampant"], - ["spawner-spitter-nest-v14-t9-rampant", "spawner-spitter-spawner-v14-t9-rampant"], - ["energy-thief-biter-nest-v14-t9-rampant", "energy-thief-biter-spawner-v14-t9-rampant"], - ["poison-biter-nest-v14-t9-rampant", "poison-biter-spawner-v14-t9-rampant"], - ["neutral-biter-nest-v15-t9-rampant", "neutral-biter-spawner-v15-t9-rampant"], - ["neutral-spitter-nest-v15-t9-rampant", "neutral-spitter-spawner-v15-t9-rampant"], - ["acid-biter-nest-v15-t9-rampant", "acid-biter-spawner-v15-t9-rampant"], - ["acid-spitter-nest-v15-t9-rampant", "acid-spitter-spawner-v15-t9-rampant"], - ["physical-biter-nest-v15-t9-rampant", "physical-biter-spawner-v15-t9-rampant"], - ["electric-biter-nest-v15-t9-rampant", "electric-biter-spawner-v15-t9-rampant"], - ["suicide-biter-nest-v15-t9-rampant", "suicide-biter-spawner-v15-t9-rampant"], - ["nuclear-biter-nest-v15-t9-rampant", "nuclear-biter-spawner-v15-t9-rampant"], - ["fire-biter-nest-v15-t9-rampant", "fire-biter-spawner-v15-t9-rampant"], - ["fire-spitter-nest-v15-t9-rampant", "fire-spitter-spawner-v15-t9-rampant"], - ["interno-spitter-nest-v15-t9-rampant", "interno-spitter-spawner-v15-t9-rampant"], - ["troll-biter-nest-v15-t9-rampant", "troll-biter-spawner-v15-t9-rampant"], - ["troll-spitter-nest-v15-t9-rampant", "troll-spitter-spawner-v15-t9-rampant"], - ["laser-biter-nest-v15-t9-rampant", "laser-biter-spawner-v15-t9-rampant"], - ["laser-spitter-nest-v15-t9-rampant", "laser-spitter-spawner-v15-t9-rampant"], - ["fast-biter-nest-v15-t9-rampant", "fast-biter-spawner-v15-t9-rampant"], - ["fast-spitter-nest-v15-t9-rampant", "fast-spitter-spawner-v15-t9-rampant"], - ["wasp-spitter-nest-v15-t9-rampant", "wasp-spitter-spawner-v15-t9-rampant"], - ["spawner-spitter-nest-v15-t9-rampant", "spawner-spitter-spawner-v15-t9-rampant"], - ["energy-thief-biter-nest-v15-t9-rampant", "energy-thief-biter-spawner-v15-t9-rampant"], - ["poison-biter-nest-v15-t9-rampant", "poison-biter-spawner-v15-t9-rampant"], - ["neutral-biter-nest-v16-t9-rampant", "neutral-biter-spawner-v16-t9-rampant"], - ["neutral-spitter-nest-v16-t9-rampant", "neutral-spitter-spawner-v16-t9-rampant"], - ["acid-biter-nest-v16-t9-rampant", "acid-biter-spawner-v16-t9-rampant"], - ["acid-spitter-nest-v16-t9-rampant", "acid-spitter-spawner-v16-t9-rampant"], - ["physical-biter-nest-v16-t9-rampant", "physical-biter-spawner-v16-t9-rampant"], - ["electric-biter-nest-v16-t9-rampant", "electric-biter-spawner-v16-t9-rampant"], - ["suicide-biter-nest-v16-t9-rampant", "suicide-biter-spawner-v16-t9-rampant"], - ["nuclear-biter-nest-v16-t9-rampant", "nuclear-biter-spawner-v16-t9-rampant"], - ["fire-biter-nest-v16-t9-rampant", "fire-biter-spawner-v16-t9-rampant"], - ["fire-spitter-nest-v16-t9-rampant", "fire-spitter-spawner-v16-t9-rampant"], - ["interno-spitter-nest-v16-t9-rampant", "interno-spitter-spawner-v16-t9-rampant"], - ["troll-biter-nest-v16-t9-rampant", "troll-biter-spawner-v16-t9-rampant"], - ["troll-spitter-nest-v16-t9-rampant", "troll-spitter-spawner-v16-t9-rampant"], - ["laser-biter-nest-v16-t9-rampant", "laser-biter-spawner-v16-t9-rampant"], - ["laser-spitter-nest-v16-t9-rampant", "laser-spitter-spawner-v16-t9-rampant"], - ["fast-biter-nest-v16-t9-rampant", "fast-biter-spawner-v16-t9-rampant"], - ["fast-spitter-nest-v16-t9-rampant", "fast-spitter-spawner-v16-t9-rampant"], - ["wasp-spitter-nest-v16-t9-rampant", "wasp-spitter-spawner-v16-t9-rampant"], - ["spawner-spitter-nest-v16-t9-rampant", "spawner-spitter-spawner-v16-t9-rampant"], - ["energy-thief-biter-nest-v16-t9-rampant", "energy-thief-biter-spawner-v16-t9-rampant"], - ["poison-biter-nest-v16-t9-rampant", "poison-biter-spawner-v16-t9-rampant"], - ["neutral-biter-nest-v17-t9-rampant", "neutral-biter-spawner-v17-t9-rampant"], - ["neutral-spitter-nest-v17-t9-rampant", "neutral-spitter-spawner-v17-t9-rampant"], - ["acid-biter-nest-v17-t9-rampant", "acid-biter-spawner-v17-t9-rampant"], - ["acid-spitter-nest-v17-t9-rampant", "acid-spitter-spawner-v17-t9-rampant"], - ["physical-biter-nest-v17-t9-rampant", "physical-biter-spawner-v17-t9-rampant"], - ["electric-biter-nest-v17-t9-rampant", "electric-biter-spawner-v17-t9-rampant"], - ["suicide-biter-nest-v17-t9-rampant", "suicide-biter-spawner-v17-t9-rampant"], - ["nuclear-biter-nest-v17-t9-rampant", "nuclear-biter-spawner-v17-t9-rampant"], - ["fire-biter-nest-v17-t9-rampant", "fire-biter-spawner-v17-t9-rampant"], - ["fire-spitter-nest-v17-t9-rampant", "fire-spitter-spawner-v17-t9-rampant"], - ["interno-spitter-nest-v17-t9-rampant", "interno-spitter-spawner-v17-t9-rampant"], - ["troll-biter-nest-v17-t9-rampant", "troll-biter-spawner-v17-t9-rampant"], - ["troll-spitter-nest-v17-t9-rampant", "troll-spitter-spawner-v17-t9-rampant"], - ["laser-biter-nest-v17-t9-rampant", "laser-biter-spawner-v17-t9-rampant"], - ["laser-spitter-nest-v17-t9-rampant", "laser-spitter-spawner-v17-t9-rampant"], - ["fast-biter-nest-v17-t9-rampant", "fast-biter-spawner-v17-t9-rampant"], - ["fast-spitter-nest-v17-t9-rampant", "fast-spitter-spawner-v17-t9-rampant"], - ["wasp-spitter-nest-v17-t9-rampant", "wasp-spitter-spawner-v17-t9-rampant"], - ["spawner-spitter-nest-v17-t9-rampant", "spawner-spitter-spawner-v17-t9-rampant"], - ["energy-thief-biter-nest-v17-t9-rampant", "energy-thief-biter-spawner-v17-t9-rampant"], - ["poison-biter-nest-v17-t9-rampant", "poison-biter-spawner-v17-t9-rampant"], - ["neutral-biter-nest-v18-t9-rampant", "neutral-biter-spawner-v18-t9-rampant"], - ["neutral-spitter-nest-v18-t9-rampant", "neutral-spitter-spawner-v18-t9-rampant"], - ["acid-biter-nest-v18-t9-rampant", "acid-biter-spawner-v18-t9-rampant"], - ["acid-spitter-nest-v18-t9-rampant", "acid-spitter-spawner-v18-t9-rampant"], - ["physical-biter-nest-v18-t9-rampant", "physical-biter-spawner-v18-t9-rampant"], - ["electric-biter-nest-v18-t9-rampant", "electric-biter-spawner-v18-t9-rampant"], - ["suicide-biter-nest-v18-t9-rampant", "suicide-biter-spawner-v18-t9-rampant"], - ["nuclear-biter-nest-v18-t9-rampant", "nuclear-biter-spawner-v18-t9-rampant"], - ["fire-biter-nest-v18-t9-rampant", "fire-biter-spawner-v18-t9-rampant"], - ["fire-spitter-nest-v18-t9-rampant", "fire-spitter-spawner-v18-t9-rampant"], - ["interno-spitter-nest-v18-t9-rampant", "interno-spitter-spawner-v18-t9-rampant"], - ["troll-biter-nest-v18-t9-rampant", "troll-biter-spawner-v18-t9-rampant"], - ["troll-spitter-nest-v18-t9-rampant", "troll-spitter-spawner-v18-t9-rampant"], - ["laser-biter-nest-v18-t9-rampant", "laser-biter-spawner-v18-t9-rampant"], - ["laser-spitter-nest-v18-t9-rampant", "laser-spitter-spawner-v18-t9-rampant"], - ["fast-biter-nest-v18-t9-rampant", "fast-biter-spawner-v18-t9-rampant"], - ["fast-spitter-nest-v18-t9-rampant", "fast-spitter-spawner-v18-t9-rampant"], - ["wasp-spitter-nest-v18-t9-rampant", "wasp-spitter-spawner-v18-t9-rampant"], - ["spawner-spitter-nest-v18-t9-rampant", "spawner-spitter-spawner-v18-t9-rampant"], - ["energy-thief-biter-nest-v18-t9-rampant", "energy-thief-biter-spawner-v18-t9-rampant"], - ["poison-biter-nest-v18-t9-rampant", "poison-biter-spawner-v18-t9-rampant"], - ["neutral-biter-nest-v19-t9-rampant", "neutral-biter-spawner-v19-t9-rampant"], - ["neutral-spitter-nest-v19-t9-rampant", "neutral-spitter-spawner-v19-t9-rampant"], - ["acid-biter-nest-v19-t9-rampant", "acid-biter-spawner-v19-t9-rampant"], - ["acid-spitter-nest-v19-t9-rampant", "acid-spitter-spawner-v19-t9-rampant"], - ["physical-biter-nest-v19-t9-rampant", "physical-biter-spawner-v19-t9-rampant"], - ["electric-biter-nest-v19-t9-rampant", "electric-biter-spawner-v19-t9-rampant"], - ["suicide-biter-nest-v19-t9-rampant", "suicide-biter-spawner-v19-t9-rampant"], - ["nuclear-biter-nest-v19-t9-rampant", "nuclear-biter-spawner-v19-t9-rampant"], - ["fire-biter-nest-v19-t9-rampant", "fire-biter-spawner-v19-t9-rampant"], - ["fire-spitter-nest-v19-t9-rampant", "fire-spitter-spawner-v19-t9-rampant"], - ["interno-spitter-nest-v19-t9-rampant", "interno-spitter-spawner-v19-t9-rampant"], - ["troll-biter-nest-v19-t9-rampant", "troll-biter-spawner-v19-t9-rampant"], - ["troll-spitter-nest-v19-t9-rampant", "troll-spitter-spawner-v19-t9-rampant"], - ["laser-biter-nest-v19-t9-rampant", "laser-biter-spawner-v19-t9-rampant"], - ["laser-spitter-nest-v19-t9-rampant", "laser-spitter-spawner-v19-t9-rampant"], - ["fast-biter-nest-v19-t9-rampant", "fast-biter-spawner-v19-t9-rampant"], - ["fast-spitter-nest-v19-t9-rampant", "fast-spitter-spawner-v19-t9-rampant"], - ["wasp-spitter-nest-v19-t9-rampant", "wasp-spitter-spawner-v19-t9-rampant"], - ["spawner-spitter-nest-v19-t9-rampant", "spawner-spitter-spawner-v19-t9-rampant"], - ["energy-thief-biter-nest-v19-t9-rampant", "energy-thief-biter-spawner-v19-t9-rampant"], - ["poison-biter-nest-v19-t9-rampant", "poison-biter-spawner-v19-t9-rampant"], - ["neutral-biter-nest-v20-t9-rampant", "neutral-biter-spawner-v20-t9-rampant"], - ["neutral-spitter-nest-v20-t9-rampant", "neutral-spitter-spawner-v20-t9-rampant"], - ["acid-biter-nest-v20-t9-rampant", "acid-biter-spawner-v20-t9-rampant"], - ["acid-spitter-nest-v20-t9-rampant", "acid-spitter-spawner-v20-t9-rampant"], - ["physical-biter-nest-v20-t9-rampant", "physical-biter-spawner-v20-t9-rampant"], - ["electric-biter-nest-v20-t9-rampant", "electric-biter-spawner-v20-t9-rampant"], - ["suicide-biter-nest-v20-t9-rampant", "suicide-biter-spawner-v20-t9-rampant"], - ["nuclear-biter-nest-v20-t9-rampant", "nuclear-biter-spawner-v20-t9-rampant"], - ["fire-biter-nest-v20-t9-rampant", "fire-biter-spawner-v20-t9-rampant"], - ["fire-spitter-nest-v20-t9-rampant", "fire-spitter-spawner-v20-t9-rampant"], - ["interno-spitter-nest-v20-t9-rampant", "interno-spitter-spawner-v20-t9-rampant"], - ["troll-biter-nest-v20-t9-rampant", "troll-biter-spawner-v20-t9-rampant"], - ["troll-spitter-nest-v20-t9-rampant", "troll-spitter-spawner-v20-t9-rampant"], - ["laser-biter-nest-v20-t9-rampant", "laser-biter-spawner-v20-t9-rampant"], - ["laser-spitter-nest-v20-t9-rampant", "laser-spitter-spawner-v20-t9-rampant"], - ["fast-biter-nest-v20-t9-rampant", "fast-biter-spawner-v20-t9-rampant"], - ["fast-spitter-nest-v20-t9-rampant", "fast-spitter-spawner-v20-t9-rampant"], - ["wasp-spitter-nest-v20-t9-rampant", "wasp-spitter-spawner-v20-t9-rampant"], - ["spawner-spitter-nest-v20-t9-rampant", "spawner-spitter-spawner-v20-t9-rampant"], - ["energy-thief-biter-nest-v20-t9-rampant", "energy-thief-biter-spawner-v20-t9-rampant"], - ["poison-biter-nest-v20-t9-rampant", "poison-biter-spawner-v20-t9-rampant"], - ["neutral-biter-nest-v1-t10-rampant", "neutral-biter-spawner-v1-t10-rampant"], - ["neutral-spitter-nest-v1-t10-rampant", "neutral-spitter-spawner-v1-t10-rampant"], - ["acid-biter-nest-v1-t10-rampant", "acid-biter-spawner-v1-t10-rampant"], - ["acid-spitter-nest-v1-t10-rampant", "acid-spitter-spawner-v1-t10-rampant"], - ["physical-biter-nest-v1-t10-rampant", "physical-biter-spawner-v1-t10-rampant"], - ["electric-biter-nest-v1-t10-rampant", "electric-biter-spawner-v1-t10-rampant"], - ["suicide-biter-nest-v1-t10-rampant", "suicide-biter-spawner-v1-t10-rampant"], - ["nuclear-biter-nest-v1-t10-rampant", "nuclear-biter-spawner-v1-t10-rampant"], - ["fire-biter-nest-v1-t10-rampant", "fire-biter-spawner-v1-t10-rampant"], - ["fire-spitter-nest-v1-t10-rampant", "fire-spitter-spawner-v1-t10-rampant"], - ["interno-spitter-nest-v1-t10-rampant", "interno-spitter-spawner-v1-t10-rampant"], - ["troll-biter-nest-v1-t10-rampant", "troll-biter-spawner-v1-t10-rampant"], - ["troll-spitter-nest-v1-t10-rampant", "troll-spitter-spawner-v1-t10-rampant"], - ["laser-biter-nest-v1-t10-rampant", "laser-biter-spawner-v1-t10-rampant"], - ["laser-spitter-nest-v1-t10-rampant", "laser-spitter-spawner-v1-t10-rampant"], - ["fast-biter-nest-v1-t10-rampant", "fast-biter-spawner-v1-t10-rampant"], - ["fast-spitter-nest-v1-t10-rampant", "fast-spitter-spawner-v1-t10-rampant"], - ["wasp-spitter-nest-v1-t10-rampant", "wasp-spitter-spawner-v1-t10-rampant"], - ["spawner-spitter-nest-v1-t10-rampant", "spawner-spitter-spawner-v1-t10-rampant"], - ["energy-thief-biter-nest-v1-t10-rampant", "energy-thief-biter-spawner-v1-t10-rampant"], - ["poison-biter-nest-v1-t10-rampant", "poison-biter-spawner-v1-t10-rampant"], - ["neutral-biter-nest-v2-t10-rampant", "neutral-biter-spawner-v2-t10-rampant"], - ["neutral-spitter-nest-v2-t10-rampant", "neutral-spitter-spawner-v2-t10-rampant"], - ["acid-biter-nest-v2-t10-rampant", "acid-biter-spawner-v2-t10-rampant"], - ["acid-spitter-nest-v2-t10-rampant", "acid-spitter-spawner-v2-t10-rampant"], - ["physical-biter-nest-v2-t10-rampant", "physical-biter-spawner-v2-t10-rampant"], - ["electric-biter-nest-v2-t10-rampant", "electric-biter-spawner-v2-t10-rampant"], - ["suicide-biter-nest-v2-t10-rampant", "suicide-biter-spawner-v2-t10-rampant"], - ["nuclear-biter-nest-v2-t10-rampant", "nuclear-biter-spawner-v2-t10-rampant"], - ["fire-biter-nest-v2-t10-rampant", "fire-biter-spawner-v2-t10-rampant"], - ["fire-spitter-nest-v2-t10-rampant", "fire-spitter-spawner-v2-t10-rampant"], - ["interno-spitter-nest-v2-t10-rampant", "interno-spitter-spawner-v2-t10-rampant"], - ["troll-biter-nest-v2-t10-rampant", "troll-biter-spawner-v2-t10-rampant"], - ["troll-spitter-nest-v2-t10-rampant", "troll-spitter-spawner-v2-t10-rampant"], - ["laser-biter-nest-v2-t10-rampant", "laser-biter-spawner-v2-t10-rampant"], - ["laser-spitter-nest-v2-t10-rampant", "laser-spitter-spawner-v2-t10-rampant"], - ["fast-biter-nest-v2-t10-rampant", "fast-biter-spawner-v2-t10-rampant"], - ["fast-spitter-nest-v2-t10-rampant", "fast-spitter-spawner-v2-t10-rampant"], - ["wasp-spitter-nest-v2-t10-rampant", "wasp-spitter-spawner-v2-t10-rampant"], - ["spawner-spitter-nest-v2-t10-rampant", "spawner-spitter-spawner-v2-t10-rampant"], - ["energy-thief-biter-nest-v2-t10-rampant", "energy-thief-biter-spawner-v2-t10-rampant"], - ["poison-biter-nest-v2-t10-rampant", "poison-biter-spawner-v2-t10-rampant"], - ["neutral-biter-nest-v3-t10-rampant", "neutral-biter-spawner-v3-t10-rampant"], - ["neutral-spitter-nest-v3-t10-rampant", "neutral-spitter-spawner-v3-t10-rampant"], - ["acid-biter-nest-v3-t10-rampant", "acid-biter-spawner-v3-t10-rampant"], - ["acid-spitter-nest-v3-t10-rampant", "acid-spitter-spawner-v3-t10-rampant"], - ["physical-biter-nest-v3-t10-rampant", "physical-biter-spawner-v3-t10-rampant"], - ["electric-biter-nest-v3-t10-rampant", "electric-biter-spawner-v3-t10-rampant"], - ["suicide-biter-nest-v3-t10-rampant", "suicide-biter-spawner-v3-t10-rampant"], - ["nuclear-biter-nest-v3-t10-rampant", "nuclear-biter-spawner-v3-t10-rampant"], - ["fire-biter-nest-v3-t10-rampant", "fire-biter-spawner-v3-t10-rampant"], - ["fire-spitter-nest-v3-t10-rampant", "fire-spitter-spawner-v3-t10-rampant"], - ["interno-spitter-nest-v3-t10-rampant", "interno-spitter-spawner-v3-t10-rampant"], - ["troll-biter-nest-v3-t10-rampant", "troll-biter-spawner-v3-t10-rampant"], - ["troll-spitter-nest-v3-t10-rampant", "troll-spitter-spawner-v3-t10-rampant"], - ["laser-biter-nest-v3-t10-rampant", "laser-biter-spawner-v3-t10-rampant"], - ["laser-spitter-nest-v3-t10-rampant", "laser-spitter-spawner-v3-t10-rampant"], - ["fast-biter-nest-v3-t10-rampant", "fast-biter-spawner-v3-t10-rampant"], - ["fast-spitter-nest-v3-t10-rampant", "fast-spitter-spawner-v3-t10-rampant"], - ["wasp-spitter-nest-v3-t10-rampant", "wasp-spitter-spawner-v3-t10-rampant"], - ["spawner-spitter-nest-v3-t10-rampant", "spawner-spitter-spawner-v3-t10-rampant"], - ["energy-thief-biter-nest-v3-t10-rampant", "energy-thief-biter-spawner-v3-t10-rampant"], - ["poison-biter-nest-v3-t10-rampant", "poison-biter-spawner-v3-t10-rampant"], - ["neutral-biter-nest-v4-t10-rampant", "neutral-biter-spawner-v4-t10-rampant"], - ["neutral-spitter-nest-v4-t10-rampant", "neutral-spitter-spawner-v4-t10-rampant"], - ["acid-biter-nest-v4-t10-rampant", "acid-biter-spawner-v4-t10-rampant"], - ["acid-spitter-nest-v4-t10-rampant", "acid-spitter-spawner-v4-t10-rampant"], - ["physical-biter-nest-v4-t10-rampant", "physical-biter-spawner-v4-t10-rampant"], - ["electric-biter-nest-v4-t10-rampant", "electric-biter-spawner-v4-t10-rampant"], - ["suicide-biter-nest-v4-t10-rampant", "suicide-biter-spawner-v4-t10-rampant"], - ["nuclear-biter-nest-v4-t10-rampant", "nuclear-biter-spawner-v4-t10-rampant"], - ["fire-biter-nest-v4-t10-rampant", "fire-biter-spawner-v4-t10-rampant"], - ["fire-spitter-nest-v4-t10-rampant", "fire-spitter-spawner-v4-t10-rampant"], - ["interno-spitter-nest-v4-t10-rampant", "interno-spitter-spawner-v4-t10-rampant"], - ["troll-biter-nest-v4-t10-rampant", "troll-biter-spawner-v4-t10-rampant"], - ["troll-spitter-nest-v4-t10-rampant", "troll-spitter-spawner-v4-t10-rampant"], - ["laser-biter-nest-v4-t10-rampant", "laser-biter-spawner-v4-t10-rampant"], - ["laser-spitter-nest-v4-t10-rampant", "laser-spitter-spawner-v4-t10-rampant"], - ["fast-biter-nest-v4-t10-rampant", "fast-biter-spawner-v4-t10-rampant"], - ["fast-spitter-nest-v4-t10-rampant", "fast-spitter-spawner-v4-t10-rampant"], - ["wasp-spitter-nest-v4-t10-rampant", "wasp-spitter-spawner-v4-t10-rampant"], - ["spawner-spitter-nest-v4-t10-rampant", "spawner-spitter-spawner-v4-t10-rampant"], - ["energy-thief-biter-nest-v4-t10-rampant", "energy-thief-biter-spawner-v4-t10-rampant"], - ["poison-biter-nest-v4-t10-rampant", "poison-biter-spawner-v4-t10-rampant"], - ["neutral-biter-nest-v5-t10-rampant", "neutral-biter-spawner-v5-t10-rampant"], - ["neutral-spitter-nest-v5-t10-rampant", "neutral-spitter-spawner-v5-t10-rampant"], - ["acid-biter-nest-v5-t10-rampant", "acid-biter-spawner-v5-t10-rampant"], - ["acid-spitter-nest-v5-t10-rampant", "acid-spitter-spawner-v5-t10-rampant"], - ["physical-biter-nest-v5-t10-rampant", "physical-biter-spawner-v5-t10-rampant"], - ["electric-biter-nest-v5-t10-rampant", "electric-biter-spawner-v5-t10-rampant"], - ["suicide-biter-nest-v5-t10-rampant", "suicide-biter-spawner-v5-t10-rampant"], - ["nuclear-biter-nest-v5-t10-rampant", "nuclear-biter-spawner-v5-t10-rampant"], - ["fire-biter-nest-v5-t10-rampant", "fire-biter-spawner-v5-t10-rampant"], - ["fire-spitter-nest-v5-t10-rampant", "fire-spitter-spawner-v5-t10-rampant"], - ["interno-spitter-nest-v5-t10-rampant", "interno-spitter-spawner-v5-t10-rampant"], - ["troll-biter-nest-v5-t10-rampant", "troll-biter-spawner-v5-t10-rampant"], - ["troll-spitter-nest-v5-t10-rampant", "troll-spitter-spawner-v5-t10-rampant"], - ["laser-biter-nest-v5-t10-rampant", "laser-biter-spawner-v5-t10-rampant"], - ["laser-spitter-nest-v5-t10-rampant", "laser-spitter-spawner-v5-t10-rampant"], - ["fast-biter-nest-v5-t10-rampant", "fast-biter-spawner-v5-t10-rampant"], - ["fast-spitter-nest-v5-t10-rampant", "fast-spitter-spawner-v5-t10-rampant"], - ["wasp-spitter-nest-v5-t10-rampant", "wasp-spitter-spawner-v5-t10-rampant"], - ["spawner-spitter-nest-v5-t10-rampant", "spawner-spitter-spawner-v5-t10-rampant"], - ["energy-thief-biter-nest-v5-t10-rampant", "energy-thief-biter-spawner-v5-t10-rampant"], - ["poison-biter-nest-v5-t10-rampant", "poison-biter-spawner-v5-t10-rampant"], - ["neutral-biter-nest-v6-t10-rampant", "neutral-biter-spawner-v6-t10-rampant"], - ["neutral-spitter-nest-v6-t10-rampant", "neutral-spitter-spawner-v6-t10-rampant"], - ["acid-biter-nest-v6-t10-rampant", "acid-biter-spawner-v6-t10-rampant"], - ["acid-spitter-nest-v6-t10-rampant", "acid-spitter-spawner-v6-t10-rampant"], - ["physical-biter-nest-v6-t10-rampant", "physical-biter-spawner-v6-t10-rampant"], - ["electric-biter-nest-v6-t10-rampant", "electric-biter-spawner-v6-t10-rampant"], - ["suicide-biter-nest-v6-t10-rampant", "suicide-biter-spawner-v6-t10-rampant"], - ["nuclear-biter-nest-v6-t10-rampant", "nuclear-biter-spawner-v6-t10-rampant"], - ["fire-biter-nest-v6-t10-rampant", "fire-biter-spawner-v6-t10-rampant"], - ["fire-spitter-nest-v6-t10-rampant", "fire-spitter-spawner-v6-t10-rampant"], - ["interno-spitter-nest-v6-t10-rampant", "interno-spitter-spawner-v6-t10-rampant"], - ["troll-biter-nest-v6-t10-rampant", "troll-biter-spawner-v6-t10-rampant"], - ["troll-spitter-nest-v6-t10-rampant", "troll-spitter-spawner-v6-t10-rampant"], - ["laser-biter-nest-v6-t10-rampant", "laser-biter-spawner-v6-t10-rampant"], - ["laser-spitter-nest-v6-t10-rampant", "laser-spitter-spawner-v6-t10-rampant"], - ["fast-biter-nest-v6-t10-rampant", "fast-biter-spawner-v6-t10-rampant"], - ["fast-spitter-nest-v6-t10-rampant", "fast-spitter-spawner-v6-t10-rampant"], - ["wasp-spitter-nest-v6-t10-rampant", "wasp-spitter-spawner-v6-t10-rampant"], - ["spawner-spitter-nest-v6-t10-rampant", "spawner-spitter-spawner-v6-t10-rampant"], - ["energy-thief-biter-nest-v6-t10-rampant", "energy-thief-biter-spawner-v6-t10-rampant"], - ["poison-biter-nest-v6-t10-rampant", "poison-biter-spawner-v6-t10-rampant"], - ["neutral-biter-nest-v7-t10-rampant", "neutral-biter-spawner-v7-t10-rampant"], - ["neutral-spitter-nest-v7-t10-rampant", "neutral-spitter-spawner-v7-t10-rampant"], - ["acid-biter-nest-v7-t10-rampant", "acid-biter-spawner-v7-t10-rampant"], - ["acid-spitter-nest-v7-t10-rampant", "acid-spitter-spawner-v7-t10-rampant"], - ["physical-biter-nest-v7-t10-rampant", "physical-biter-spawner-v7-t10-rampant"], - ["electric-biter-nest-v7-t10-rampant", "electric-biter-spawner-v7-t10-rampant"], - ["suicide-biter-nest-v7-t10-rampant", "suicide-biter-spawner-v7-t10-rampant"], - ["nuclear-biter-nest-v7-t10-rampant", "nuclear-biter-spawner-v7-t10-rampant"], - ["fire-biter-nest-v7-t10-rampant", "fire-biter-spawner-v7-t10-rampant"], - ["fire-spitter-nest-v7-t10-rampant", "fire-spitter-spawner-v7-t10-rampant"], - ["interno-spitter-nest-v7-t10-rampant", "interno-spitter-spawner-v7-t10-rampant"], - ["troll-biter-nest-v7-t10-rampant", "troll-biter-spawner-v7-t10-rampant"], - ["troll-spitter-nest-v7-t10-rampant", "troll-spitter-spawner-v7-t10-rampant"], - ["laser-biter-nest-v7-t10-rampant", "laser-biter-spawner-v7-t10-rampant"], - ["laser-spitter-nest-v7-t10-rampant", "laser-spitter-spawner-v7-t10-rampant"], - ["fast-biter-nest-v7-t10-rampant", "fast-biter-spawner-v7-t10-rampant"], - ["fast-spitter-nest-v7-t10-rampant", "fast-spitter-spawner-v7-t10-rampant"], - ["wasp-spitter-nest-v7-t10-rampant", "wasp-spitter-spawner-v7-t10-rampant"], - ["spawner-spitter-nest-v7-t10-rampant", "spawner-spitter-spawner-v7-t10-rampant"], - ["energy-thief-biter-nest-v7-t10-rampant", "energy-thief-biter-spawner-v7-t10-rampant"], - ["poison-biter-nest-v7-t10-rampant", "poison-biter-spawner-v7-t10-rampant"], - ["neutral-biter-nest-v8-t10-rampant", "neutral-biter-spawner-v8-t10-rampant"], - ["neutral-spitter-nest-v8-t10-rampant", "neutral-spitter-spawner-v8-t10-rampant"], - ["acid-biter-nest-v8-t10-rampant", "acid-biter-spawner-v8-t10-rampant"], - ["acid-spitter-nest-v8-t10-rampant", "acid-spitter-spawner-v8-t10-rampant"], - ["physical-biter-nest-v8-t10-rampant", "physical-biter-spawner-v8-t10-rampant"], - ["electric-biter-nest-v8-t10-rampant", "electric-biter-spawner-v8-t10-rampant"], - ["suicide-biter-nest-v8-t10-rampant", "suicide-biter-spawner-v8-t10-rampant"], - ["nuclear-biter-nest-v8-t10-rampant", "nuclear-biter-spawner-v8-t10-rampant"], - ["fire-biter-nest-v8-t10-rampant", "fire-biter-spawner-v8-t10-rampant"], - ["fire-spitter-nest-v8-t10-rampant", "fire-spitter-spawner-v8-t10-rampant"], - ["interno-spitter-nest-v8-t10-rampant", "interno-spitter-spawner-v8-t10-rampant"], - ["troll-biter-nest-v8-t10-rampant", "troll-biter-spawner-v8-t10-rampant"], - ["troll-spitter-nest-v8-t10-rampant", "troll-spitter-spawner-v8-t10-rampant"], - ["laser-biter-nest-v8-t10-rampant", "laser-biter-spawner-v8-t10-rampant"], - ["laser-spitter-nest-v8-t10-rampant", "laser-spitter-spawner-v8-t10-rampant"], - ["fast-biter-nest-v8-t10-rampant", "fast-biter-spawner-v8-t10-rampant"], - ["fast-spitter-nest-v8-t10-rampant", "fast-spitter-spawner-v8-t10-rampant"], - ["wasp-spitter-nest-v8-t10-rampant", "wasp-spitter-spawner-v8-t10-rampant"], - ["spawner-spitter-nest-v8-t10-rampant", "spawner-spitter-spawner-v8-t10-rampant"], - ["energy-thief-biter-nest-v8-t10-rampant", "energy-thief-biter-spawner-v8-t10-rampant"], - ["poison-biter-nest-v8-t10-rampant", "poison-biter-spawner-v8-t10-rampant"], - ["neutral-biter-nest-v9-t10-rampant", "neutral-biter-spawner-v9-t10-rampant"], - ["neutral-spitter-nest-v9-t10-rampant", "neutral-spitter-spawner-v9-t10-rampant"], - ["acid-biter-nest-v9-t10-rampant", "acid-biter-spawner-v9-t10-rampant"], - ["acid-spitter-nest-v9-t10-rampant", "acid-spitter-spawner-v9-t10-rampant"], - ["physical-biter-nest-v9-t10-rampant", "physical-biter-spawner-v9-t10-rampant"], - ["electric-biter-nest-v9-t10-rampant", "electric-biter-spawner-v9-t10-rampant"], - ["suicide-biter-nest-v9-t10-rampant", "suicide-biter-spawner-v9-t10-rampant"], - ["nuclear-biter-nest-v9-t10-rampant", "nuclear-biter-spawner-v9-t10-rampant"], - ["fire-biter-nest-v9-t10-rampant", "fire-biter-spawner-v9-t10-rampant"], - ["fire-spitter-nest-v9-t10-rampant", "fire-spitter-spawner-v9-t10-rampant"], - ["interno-spitter-nest-v9-t10-rampant", "interno-spitter-spawner-v9-t10-rampant"], - ["troll-biter-nest-v9-t10-rampant", "troll-biter-spawner-v9-t10-rampant"], - ["troll-spitter-nest-v9-t10-rampant", "troll-spitter-spawner-v9-t10-rampant"], - ["laser-biter-nest-v9-t10-rampant", "laser-biter-spawner-v9-t10-rampant"], - ["laser-spitter-nest-v9-t10-rampant", "laser-spitter-spawner-v9-t10-rampant"], - ["fast-biter-nest-v9-t10-rampant", "fast-biter-spawner-v9-t10-rampant"], - ["fast-spitter-nest-v9-t10-rampant", "fast-spitter-spawner-v9-t10-rampant"], - ["wasp-spitter-nest-v9-t10-rampant", "wasp-spitter-spawner-v9-t10-rampant"], - ["spawner-spitter-nest-v9-t10-rampant", "spawner-spitter-spawner-v9-t10-rampant"], - ["energy-thief-biter-nest-v9-t10-rampant", "energy-thief-biter-spawner-v9-t10-rampant"], - ["poison-biter-nest-v9-t10-rampant", "poison-biter-spawner-v9-t10-rampant"], - ["neutral-biter-nest-v10-t10-rampant", "neutral-biter-spawner-v10-t10-rampant"], - ["neutral-spitter-nest-v10-t10-rampant", "neutral-spitter-spawner-v10-t10-rampant"], - ["acid-biter-nest-v10-t10-rampant", "acid-biter-spawner-v10-t10-rampant"], - ["acid-spitter-nest-v10-t10-rampant", "acid-spitter-spawner-v10-t10-rampant"], - ["physical-biter-nest-v10-t10-rampant", "physical-biter-spawner-v10-t10-rampant"], - ["electric-biter-nest-v10-t10-rampant", "electric-biter-spawner-v10-t10-rampant"], - ["suicide-biter-nest-v10-t10-rampant", "suicide-biter-spawner-v10-t10-rampant"], - ["nuclear-biter-nest-v10-t10-rampant", "nuclear-biter-spawner-v10-t10-rampant"], - ["fire-biter-nest-v10-t10-rampant", "fire-biter-spawner-v10-t10-rampant"], - ["fire-spitter-nest-v10-t10-rampant", "fire-spitter-spawner-v10-t10-rampant"], - ["interno-spitter-nest-v10-t10-rampant", "interno-spitter-spawner-v10-t10-rampant"], - ["troll-biter-nest-v10-t10-rampant", "troll-biter-spawner-v10-t10-rampant"], - ["troll-spitter-nest-v10-t10-rampant", "troll-spitter-spawner-v10-t10-rampant"], - ["laser-biter-nest-v10-t10-rampant", "laser-biter-spawner-v10-t10-rampant"], - ["laser-spitter-nest-v10-t10-rampant", "laser-spitter-spawner-v10-t10-rampant"], - ["fast-biter-nest-v10-t10-rampant", "fast-biter-spawner-v10-t10-rampant"], - ["fast-spitter-nest-v10-t10-rampant", "fast-spitter-spawner-v10-t10-rampant"], - ["wasp-spitter-nest-v10-t10-rampant", "wasp-spitter-spawner-v10-t10-rampant"], - ["spawner-spitter-nest-v10-t10-rampant", "spawner-spitter-spawner-v10-t10-rampant"], - ["energy-thief-biter-nest-v10-t10-rampant", "energy-thief-biter-spawner-v10-t10-rampant"], - ["poison-biter-nest-v10-t10-rampant", "poison-biter-spawner-v10-t10-rampant"], - ["neutral-biter-nest-v11-t10-rampant", "neutral-biter-spawner-v11-t10-rampant"], - ["neutral-spitter-nest-v11-t10-rampant", "neutral-spitter-spawner-v11-t10-rampant"], - ["acid-biter-nest-v11-t10-rampant", "acid-biter-spawner-v11-t10-rampant"], - ["acid-spitter-nest-v11-t10-rampant", "acid-spitter-spawner-v11-t10-rampant"], - ["physical-biter-nest-v11-t10-rampant", "physical-biter-spawner-v11-t10-rampant"], - ["electric-biter-nest-v11-t10-rampant", "electric-biter-spawner-v11-t10-rampant"], - ["suicide-biter-nest-v11-t10-rampant", "suicide-biter-spawner-v11-t10-rampant"], - ["nuclear-biter-nest-v11-t10-rampant", "nuclear-biter-spawner-v11-t10-rampant"], - ["fire-biter-nest-v11-t10-rampant", "fire-biter-spawner-v11-t10-rampant"], - ["fire-spitter-nest-v11-t10-rampant", "fire-spitter-spawner-v11-t10-rampant"], - ["interno-spitter-nest-v11-t10-rampant", "interno-spitter-spawner-v11-t10-rampant"], - ["troll-biter-nest-v11-t10-rampant", "troll-biter-spawner-v11-t10-rampant"], - ["troll-spitter-nest-v11-t10-rampant", "troll-spitter-spawner-v11-t10-rampant"], - ["laser-biter-nest-v11-t10-rampant", "laser-biter-spawner-v11-t10-rampant"], - ["laser-spitter-nest-v11-t10-rampant", "laser-spitter-spawner-v11-t10-rampant"], - ["fast-biter-nest-v11-t10-rampant", "fast-biter-spawner-v11-t10-rampant"], - ["fast-spitter-nest-v11-t10-rampant", "fast-spitter-spawner-v11-t10-rampant"], - ["wasp-spitter-nest-v11-t10-rampant", "wasp-spitter-spawner-v11-t10-rampant"], - ["spawner-spitter-nest-v11-t10-rampant", "spawner-spitter-spawner-v11-t10-rampant"], - ["energy-thief-biter-nest-v11-t10-rampant", "energy-thief-biter-spawner-v11-t10-rampant"], - ["poison-biter-nest-v11-t10-rampant", "poison-biter-spawner-v11-t10-rampant"], - ["neutral-biter-nest-v12-t10-rampant", "neutral-biter-spawner-v12-t10-rampant"], - ["neutral-spitter-nest-v12-t10-rampant", "neutral-spitter-spawner-v12-t10-rampant"], - ["acid-biter-nest-v12-t10-rampant", "acid-biter-spawner-v12-t10-rampant"], - ["acid-spitter-nest-v12-t10-rampant", "acid-spitter-spawner-v12-t10-rampant"], - ["physical-biter-nest-v12-t10-rampant", "physical-biter-spawner-v12-t10-rampant"], - ["electric-biter-nest-v12-t10-rampant", "electric-biter-spawner-v12-t10-rampant"], - ["suicide-biter-nest-v12-t10-rampant", "suicide-biter-spawner-v12-t10-rampant"], - ["nuclear-biter-nest-v12-t10-rampant", "nuclear-biter-spawner-v12-t10-rampant"], - ["fire-biter-nest-v12-t10-rampant", "fire-biter-spawner-v12-t10-rampant"], - ["fire-spitter-nest-v12-t10-rampant", "fire-spitter-spawner-v12-t10-rampant"], - ["interno-spitter-nest-v12-t10-rampant", "interno-spitter-spawner-v12-t10-rampant"], - ["troll-biter-nest-v12-t10-rampant", "troll-biter-spawner-v12-t10-rampant"], - ["troll-spitter-nest-v12-t10-rampant", "troll-spitter-spawner-v12-t10-rampant"], - ["laser-biter-nest-v12-t10-rampant", "laser-biter-spawner-v12-t10-rampant"], - ["laser-spitter-nest-v12-t10-rampant", "laser-spitter-spawner-v12-t10-rampant"], - ["fast-biter-nest-v12-t10-rampant", "fast-biter-spawner-v12-t10-rampant"], - ["fast-spitter-nest-v12-t10-rampant", "fast-spitter-spawner-v12-t10-rampant"], - ["wasp-spitter-nest-v12-t10-rampant", "wasp-spitter-spawner-v12-t10-rampant"], - ["spawner-spitter-nest-v12-t10-rampant", "spawner-spitter-spawner-v12-t10-rampant"], - ["energy-thief-biter-nest-v12-t10-rampant", "energy-thief-biter-spawner-v12-t10-rampant"], - ["poison-biter-nest-v12-t10-rampant", "poison-biter-spawner-v12-t10-rampant"], - ["neutral-biter-nest-v13-t10-rampant", "neutral-biter-spawner-v13-t10-rampant"], - ["neutral-spitter-nest-v13-t10-rampant", "neutral-spitter-spawner-v13-t10-rampant"], - ["acid-biter-nest-v13-t10-rampant", "acid-biter-spawner-v13-t10-rampant"], - ["acid-spitter-nest-v13-t10-rampant", "acid-spitter-spawner-v13-t10-rampant"], - ["physical-biter-nest-v13-t10-rampant", "physical-biter-spawner-v13-t10-rampant"], - ["electric-biter-nest-v13-t10-rampant", "electric-biter-spawner-v13-t10-rampant"], - ["suicide-biter-nest-v13-t10-rampant", "suicide-biter-spawner-v13-t10-rampant"], - ["nuclear-biter-nest-v13-t10-rampant", "nuclear-biter-spawner-v13-t10-rampant"], - ["fire-biter-nest-v13-t10-rampant", "fire-biter-spawner-v13-t10-rampant"], - ["fire-spitter-nest-v13-t10-rampant", "fire-spitter-spawner-v13-t10-rampant"], - ["interno-spitter-nest-v13-t10-rampant", "interno-spitter-spawner-v13-t10-rampant"], - ["troll-biter-nest-v13-t10-rampant", "troll-biter-spawner-v13-t10-rampant"], - ["troll-spitter-nest-v13-t10-rampant", "troll-spitter-spawner-v13-t10-rampant"], - ["laser-biter-nest-v13-t10-rampant", "laser-biter-spawner-v13-t10-rampant"], - ["laser-spitter-nest-v13-t10-rampant", "laser-spitter-spawner-v13-t10-rampant"], - ["fast-biter-nest-v13-t10-rampant", "fast-biter-spawner-v13-t10-rampant"], - ["fast-spitter-nest-v13-t10-rampant", "fast-spitter-spawner-v13-t10-rampant"], - ["wasp-spitter-nest-v13-t10-rampant", "wasp-spitter-spawner-v13-t10-rampant"], - ["spawner-spitter-nest-v13-t10-rampant", "spawner-spitter-spawner-v13-t10-rampant"], - ["energy-thief-biter-nest-v13-t10-rampant", "energy-thief-biter-spawner-v13-t10-rampant"], - ["poison-biter-nest-v13-t10-rampant", "poison-biter-spawner-v13-t10-rampant"], - ["neutral-biter-nest-v14-t10-rampant", "neutral-biter-spawner-v14-t10-rampant"], - ["neutral-spitter-nest-v14-t10-rampant", "neutral-spitter-spawner-v14-t10-rampant"], - ["acid-biter-nest-v14-t10-rampant", "acid-biter-spawner-v14-t10-rampant"], - ["acid-spitter-nest-v14-t10-rampant", "acid-spitter-spawner-v14-t10-rampant"], - ["physical-biter-nest-v14-t10-rampant", "physical-biter-spawner-v14-t10-rampant"], - ["electric-biter-nest-v14-t10-rampant", "electric-biter-spawner-v14-t10-rampant"], - ["suicide-biter-nest-v14-t10-rampant", "suicide-biter-spawner-v14-t10-rampant"], - ["nuclear-biter-nest-v14-t10-rampant", "nuclear-biter-spawner-v14-t10-rampant"], - ["fire-biter-nest-v14-t10-rampant", "fire-biter-spawner-v14-t10-rampant"], - ["fire-spitter-nest-v14-t10-rampant", "fire-spitter-spawner-v14-t10-rampant"], - ["interno-spitter-nest-v14-t10-rampant", "interno-spitter-spawner-v14-t10-rampant"], - ["troll-biter-nest-v14-t10-rampant", "troll-biter-spawner-v14-t10-rampant"], - ["troll-spitter-nest-v14-t10-rampant", "troll-spitter-spawner-v14-t10-rampant"], - ["laser-biter-nest-v14-t10-rampant", "laser-biter-spawner-v14-t10-rampant"], - ["laser-spitter-nest-v14-t10-rampant", "laser-spitter-spawner-v14-t10-rampant"], - ["fast-biter-nest-v14-t10-rampant", "fast-biter-spawner-v14-t10-rampant"], - ["fast-spitter-nest-v14-t10-rampant", "fast-spitter-spawner-v14-t10-rampant"], - ["wasp-spitter-nest-v14-t10-rampant", "wasp-spitter-spawner-v14-t10-rampant"], - ["spawner-spitter-nest-v14-t10-rampant", "spawner-spitter-spawner-v14-t10-rampant"], - ["energy-thief-biter-nest-v14-t10-rampant", "energy-thief-biter-spawner-v14-t10-rampant"], - ["poison-biter-nest-v14-t10-rampant", "poison-biter-spawner-v14-t10-rampant"], - ["neutral-biter-nest-v15-t10-rampant", "neutral-biter-spawner-v15-t10-rampant"], - ["neutral-spitter-nest-v15-t10-rampant", "neutral-spitter-spawner-v15-t10-rampant"], - ["acid-biter-nest-v15-t10-rampant", "acid-biter-spawner-v15-t10-rampant"], - ["acid-spitter-nest-v15-t10-rampant", "acid-spitter-spawner-v15-t10-rampant"], - ["physical-biter-nest-v15-t10-rampant", "physical-biter-spawner-v15-t10-rampant"], - ["electric-biter-nest-v15-t10-rampant", "electric-biter-spawner-v15-t10-rampant"], - ["suicide-biter-nest-v15-t10-rampant", "suicide-biter-spawner-v15-t10-rampant"], - ["nuclear-biter-nest-v15-t10-rampant", "nuclear-biter-spawner-v15-t10-rampant"], - ["fire-biter-nest-v15-t10-rampant", "fire-biter-spawner-v15-t10-rampant"], - ["fire-spitter-nest-v15-t10-rampant", "fire-spitter-spawner-v15-t10-rampant"], - ["interno-spitter-nest-v15-t10-rampant", "interno-spitter-spawner-v15-t10-rampant"], - ["troll-biter-nest-v15-t10-rampant", "troll-biter-spawner-v15-t10-rampant"], - ["troll-spitter-nest-v15-t10-rampant", "troll-spitter-spawner-v15-t10-rampant"], - ["laser-biter-nest-v15-t10-rampant", "laser-biter-spawner-v15-t10-rampant"], - ["laser-spitter-nest-v15-t10-rampant", "laser-spitter-spawner-v15-t10-rampant"], - ["fast-biter-nest-v15-t10-rampant", "fast-biter-spawner-v15-t10-rampant"], - ["fast-spitter-nest-v15-t10-rampant", "fast-spitter-spawner-v15-t10-rampant"], - ["wasp-spitter-nest-v15-t10-rampant", "wasp-spitter-spawner-v15-t10-rampant"], - ["spawner-spitter-nest-v15-t10-rampant", "spawner-spitter-spawner-v15-t10-rampant"], - ["energy-thief-biter-nest-v15-t10-rampant", "energy-thief-biter-spawner-v15-t10-rampant"], - ["poison-biter-nest-v15-t10-rampant", "poison-biter-spawner-v15-t10-rampant"], - ["neutral-biter-nest-v16-t10-rampant", "neutral-biter-spawner-v16-t10-rampant"], - ["neutral-spitter-nest-v16-t10-rampant", "neutral-spitter-spawner-v16-t10-rampant"], - ["acid-biter-nest-v16-t10-rampant", "acid-biter-spawner-v16-t10-rampant"], - ["acid-spitter-nest-v16-t10-rampant", "acid-spitter-spawner-v16-t10-rampant"], - ["physical-biter-nest-v16-t10-rampant", "physical-biter-spawner-v16-t10-rampant"], - ["electric-biter-nest-v16-t10-rampant", "electric-biter-spawner-v16-t10-rampant"], - ["suicide-biter-nest-v16-t10-rampant", "suicide-biter-spawner-v16-t10-rampant"], - ["nuclear-biter-nest-v16-t10-rampant", "nuclear-biter-spawner-v16-t10-rampant"], - ["fire-biter-nest-v16-t10-rampant", "fire-biter-spawner-v16-t10-rampant"], - ["fire-spitter-nest-v16-t10-rampant", "fire-spitter-spawner-v16-t10-rampant"], - ["interno-spitter-nest-v16-t10-rampant", "interno-spitter-spawner-v16-t10-rampant"], - ["troll-biter-nest-v16-t10-rampant", "troll-biter-spawner-v16-t10-rampant"], - ["troll-spitter-nest-v16-t10-rampant", "troll-spitter-spawner-v16-t10-rampant"], - ["laser-biter-nest-v16-t10-rampant", "laser-biter-spawner-v16-t10-rampant"], - ["laser-spitter-nest-v16-t10-rampant", "laser-spitter-spawner-v16-t10-rampant"], - ["fast-biter-nest-v16-t10-rampant", "fast-biter-spawner-v16-t10-rampant"], - ["fast-spitter-nest-v16-t10-rampant", "fast-spitter-spawner-v16-t10-rampant"], - ["wasp-spitter-nest-v16-t10-rampant", "wasp-spitter-spawner-v16-t10-rampant"], - ["spawner-spitter-nest-v16-t10-rampant", "spawner-spitter-spawner-v16-t10-rampant"], - ["energy-thief-biter-nest-v16-t10-rampant", "energy-thief-biter-spawner-v16-t10-rampant"], - ["poison-biter-nest-v16-t10-rampant", "poison-biter-spawner-v16-t10-rampant"], - ["neutral-biter-nest-v17-t10-rampant", "neutral-biter-spawner-v17-t10-rampant"], - ["neutral-spitter-nest-v17-t10-rampant", "neutral-spitter-spawner-v17-t10-rampant"], - ["acid-biter-nest-v17-t10-rampant", "acid-biter-spawner-v17-t10-rampant"], - ["acid-spitter-nest-v17-t10-rampant", "acid-spitter-spawner-v17-t10-rampant"], - ["physical-biter-nest-v17-t10-rampant", "physical-biter-spawner-v17-t10-rampant"], - ["electric-biter-nest-v17-t10-rampant", "electric-biter-spawner-v17-t10-rampant"], - ["suicide-biter-nest-v17-t10-rampant", "suicide-biter-spawner-v17-t10-rampant"], - ["nuclear-biter-nest-v17-t10-rampant", "nuclear-biter-spawner-v17-t10-rampant"], - ["fire-biter-nest-v17-t10-rampant", "fire-biter-spawner-v17-t10-rampant"], - ["fire-spitter-nest-v17-t10-rampant", "fire-spitter-spawner-v17-t10-rampant"], - ["interno-spitter-nest-v17-t10-rampant", "interno-spitter-spawner-v17-t10-rampant"], - ["troll-biter-nest-v17-t10-rampant", "troll-biter-spawner-v17-t10-rampant"], - ["troll-spitter-nest-v17-t10-rampant", "troll-spitter-spawner-v17-t10-rampant"], - ["laser-biter-nest-v17-t10-rampant", "laser-biter-spawner-v17-t10-rampant"], - ["laser-spitter-nest-v17-t10-rampant", "laser-spitter-spawner-v17-t10-rampant"], - ["fast-biter-nest-v17-t10-rampant", "fast-biter-spawner-v17-t10-rampant"], - ["fast-spitter-nest-v17-t10-rampant", "fast-spitter-spawner-v17-t10-rampant"], - ["wasp-spitter-nest-v17-t10-rampant", "wasp-spitter-spawner-v17-t10-rampant"], - ["spawner-spitter-nest-v17-t10-rampant", "spawner-spitter-spawner-v17-t10-rampant"], - ["energy-thief-biter-nest-v17-t10-rampant", "energy-thief-biter-spawner-v17-t10-rampant"], - ["poison-biter-nest-v17-t10-rampant", "poison-biter-spawner-v17-t10-rampant"], - ["neutral-biter-nest-v18-t10-rampant", "neutral-biter-spawner-v18-t10-rampant"], - ["neutral-spitter-nest-v18-t10-rampant", "neutral-spitter-spawner-v18-t10-rampant"], - ["acid-biter-nest-v18-t10-rampant", "acid-biter-spawner-v18-t10-rampant"], - ["acid-spitter-nest-v18-t10-rampant", "acid-spitter-spawner-v18-t10-rampant"], - ["physical-biter-nest-v18-t10-rampant", "physical-biter-spawner-v18-t10-rampant"], - ["electric-biter-nest-v18-t10-rampant", "electric-biter-spawner-v18-t10-rampant"], - ["suicide-biter-nest-v18-t10-rampant", "suicide-biter-spawner-v18-t10-rampant"], - ["nuclear-biter-nest-v18-t10-rampant", "nuclear-biter-spawner-v18-t10-rampant"], - ["fire-biter-nest-v18-t10-rampant", "fire-biter-spawner-v18-t10-rampant"], - ["fire-spitter-nest-v18-t10-rampant", "fire-spitter-spawner-v18-t10-rampant"], - ["interno-spitter-nest-v18-t10-rampant", "interno-spitter-spawner-v18-t10-rampant"], - ["troll-biter-nest-v18-t10-rampant", "troll-biter-spawner-v18-t10-rampant"], - ["troll-spitter-nest-v18-t10-rampant", "troll-spitter-spawner-v18-t10-rampant"], - ["laser-biter-nest-v18-t10-rampant", "laser-biter-spawner-v18-t10-rampant"], - ["laser-spitter-nest-v18-t10-rampant", "laser-spitter-spawner-v18-t10-rampant"], - ["fast-biter-nest-v18-t10-rampant", "fast-biter-spawner-v18-t10-rampant"], - ["fast-spitter-nest-v18-t10-rampant", "fast-spitter-spawner-v18-t10-rampant"], - ["wasp-spitter-nest-v18-t10-rampant", "wasp-spitter-spawner-v18-t10-rampant"], - ["spawner-spitter-nest-v18-t10-rampant", "spawner-spitter-spawner-v18-t10-rampant"], - ["energy-thief-biter-nest-v18-t10-rampant", "energy-thief-biter-spawner-v18-t10-rampant"], - ["poison-biter-nest-v18-t10-rampant", "poison-biter-spawner-v18-t10-rampant"], - ["neutral-biter-nest-v19-t10-rampant", "neutral-biter-spawner-v19-t10-rampant"], - ["neutral-spitter-nest-v19-t10-rampant", "neutral-spitter-spawner-v19-t10-rampant"], - ["acid-biter-nest-v19-t10-rampant", "acid-biter-spawner-v19-t10-rampant"], - ["acid-spitter-nest-v19-t10-rampant", "acid-spitter-spawner-v19-t10-rampant"], - ["physical-biter-nest-v19-t10-rampant", "physical-biter-spawner-v19-t10-rampant"], - ["electric-biter-nest-v19-t10-rampant", "electric-biter-spawner-v19-t10-rampant"], - ["suicide-biter-nest-v19-t10-rampant", "suicide-biter-spawner-v19-t10-rampant"], - ["nuclear-biter-nest-v19-t10-rampant", "nuclear-biter-spawner-v19-t10-rampant"], - ["fire-biter-nest-v19-t10-rampant", "fire-biter-spawner-v19-t10-rampant"], - ["fire-spitter-nest-v19-t10-rampant", "fire-spitter-spawner-v19-t10-rampant"], - ["interno-spitter-nest-v19-t10-rampant", "interno-spitter-spawner-v19-t10-rampant"], - ["troll-biter-nest-v19-t10-rampant", "troll-biter-spawner-v19-t10-rampant"], - ["troll-spitter-nest-v19-t10-rampant", "troll-spitter-spawner-v19-t10-rampant"], - ["laser-biter-nest-v19-t10-rampant", "laser-biter-spawner-v19-t10-rampant"], - ["laser-spitter-nest-v19-t10-rampant", "laser-spitter-spawner-v19-t10-rampant"], - ["fast-biter-nest-v19-t10-rampant", "fast-biter-spawner-v19-t10-rampant"], - ["fast-spitter-nest-v19-t10-rampant", "fast-spitter-spawner-v19-t10-rampant"], - ["wasp-spitter-nest-v19-t10-rampant", "wasp-spitter-spawner-v19-t10-rampant"], - ["spawner-spitter-nest-v19-t10-rampant", "spawner-spitter-spawner-v19-t10-rampant"], - ["energy-thief-biter-nest-v19-t10-rampant", "energy-thief-biter-spawner-v19-t10-rampant"], - ["poison-biter-nest-v19-t10-rampant", "poison-biter-spawner-v19-t10-rampant"], - ["neutral-biter-nest-v20-t10-rampant", "neutral-biter-spawner-v20-t10-rampant"], - ["neutral-spitter-nest-v20-t10-rampant", "neutral-spitter-spawner-v20-t10-rampant"], - ["acid-biter-nest-v20-t10-rampant", "acid-biter-spawner-v20-t10-rampant"], - ["acid-spitter-nest-v20-t10-rampant", "acid-spitter-spawner-v20-t10-rampant"], - ["physical-biter-nest-v20-t10-rampant", "physical-biter-spawner-v20-t10-rampant"], - ["electric-biter-nest-v20-t10-rampant", "electric-biter-spawner-v20-t10-rampant"], - ["suicide-biter-nest-v20-t10-rampant", "suicide-biter-spawner-v20-t10-rampant"], - ["nuclear-biter-nest-v20-t10-rampant", "nuclear-biter-spawner-v20-t10-rampant"], - ["fire-biter-nest-v20-t10-rampant", "fire-biter-spawner-v20-t10-rampant"], - ["fire-spitter-nest-v20-t10-rampant", "fire-spitter-spawner-v20-t10-rampant"], - ["interno-spitter-nest-v20-t10-rampant", "interno-spitter-spawner-v20-t10-rampant"], - ["troll-biter-nest-v20-t10-rampant", "troll-biter-spawner-v20-t10-rampant"], - ["troll-spitter-nest-v20-t10-rampant", "troll-spitter-spawner-v20-t10-rampant"], - ["laser-biter-nest-v20-t10-rampant", "laser-biter-spawner-v20-t10-rampant"], - ["laser-spitter-nest-v20-t10-rampant", "laser-spitter-spawner-v20-t10-rampant"], - ["fast-biter-nest-v20-t10-rampant", "fast-biter-spawner-v20-t10-rampant"], - ["fast-spitter-nest-v20-t10-rampant", "fast-spitter-spawner-v20-t10-rampant"], - ["wasp-spitter-nest-v20-t10-rampant", "wasp-spitter-spawner-v20-t10-rampant"], - ["spawner-spitter-nest-v20-t10-rampant", "spawner-spitter-spawner-v20-t10-rampant"], - ["energy-thief-biter-nest-v20-t10-rampant", "energy-thief-biter-spawner-v20-t10-rampant"], - ["poison-biter-nest-v20-t10-rampant", "poison-biter-spawner-v20-t10-rampant"] - ] -} diff --git a/Rampant_3.1.2/prototypes/Poison.lua b/Rampant_3.1.2/prototypes/Poison.lua deleted file mode 100644 index a7bfdf87..00000000 --- a/Rampant_3.1.2/prototypes/Poison.lua +++ /dev/null @@ -1,89 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - --- imports - -local smokeUtils = require("utils/SmokeUtils") - --- constants - -local poison = {} - --- imported functions - -local makeCloud = smokeUtils.makeCloud - -function poison.addFactionAddon() - - for i=1,10 do - makeCloud( - { - name = "poison-cloud-v" .. i, - scale = 0.80 + (i * 0.15), - wind = true, - slowdown = -1.3, - duration = 10 * (i * 5), - cooldown = 5 - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - type = "nested-result", - action = - { - { - type = "area", - radius = 2 + (i * 0.5), - force = "ally", - entity_flags = {"placeable-enemy"}, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = -2 * i, type = "healing"} - } - } - }, - { - type = "area", - radius = 2 + (i * 0.5), - force = "enemy", - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 0.9 * i, type = "poison"} - } - } - } - } - } - } - } - ) - end - -end - -return poison diff --git a/Rampant_3.1.2/prototypes/SwarmUtils.lua b/Rampant_3.1.2/prototypes/SwarmUtils.lua deleted file mode 100644 index e80fa8e7..00000000 --- a/Rampant_3.1.2/prototypes/SwarmUtils.lua +++ /dev/null @@ -1,1738 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local swarmUtils = {} --- imports - -local sounds = require ("__base__.prototypes.entity.sounds") - -local bombUtils = require("utils/BombUtils") -local attackFlame = require("utils/AttackFlame") -local energyThiefFaction = require("EnergyThief") -local poisonFaction = require("Poison") -local beamUtils = require("utils/BeamUtils") -local acidBall = require("utils/AttackBall") -local droneUtils = require("utils/DroneUtils") -local biterUtils = require("utils/BiterUtils") -local particleUtils = require("utils/ParticleUtils") -local stickerUtils = require("utils/StickerUtils") -local unitUtils = require("utils/UnitUtils") -local fireUtils = require("utils/FireUtils") - -local constants = require("__Rampant__/libs/Constants") -local mathUtils = require("__Rampant__/libs/MathUtils") - --- imported functions - -local roundToNearest = mathUtils.roundToNearest - -local mMax = math.max -local mMin = math.min - -local distort = mathUtils.distort - -local deepcopy = util.table.deepcopy - -local TIER_UPGRADE_SET_10 = constants.TIER_UPGRADE_SET_10 - -local xorRandom = mathUtils.xorRandom(settings.startup["rampant--enemySeed"].value) - -local biterattackanimation = unitUtils.biterattackanimation - -local createProjectileAttack = biterUtils.createProjectileAttack -local createCapsuleProjectile = droneUtils.createCapsuleProjectile -local makeSticker = stickerUtils.makeSticker -local makeAtomicBlast = bombUtils.makeAtomicBlast -local makeLaser = beamUtils.makeLaser -local createAttackBall = acidBall.createAttackBall -local createSpitFire = acidBall.createSpitFire -local createRangedAttack = biterUtils.createRangedAttack -local createMeleeAttack = biterUtils.createMeleeAttack -local makeAcidSplashFire = fireUtils.makeAcidSplashFire - -local makeWormAlienLootTable = biterUtils.makeWormAlienLootTable -local makeUnitAlienLootTable = biterUtils.makeUnitAlienLootTable -local makeSpawnerAlienLootTable = biterUtils.makeSpawnerAlienLootTable - -local createSuicideAttack = biterUtils.createSuicideAttack - -local createAttackFlame = attackFlame.createAttackFlame -local createStreamAttack = biterUtils.createStreamAttack - -local gaussianRandomRangeRG = mathUtils.gaussianRandomRangeRG - -local makeBloodFountains = particleUtils.makeBloodFountains - -local makeBubble = beamUtils.makeBubble -local makeBeam = beamUtils.makeBeam -local createElectricAttack = biterUtils.createElectricAttack -local createBeamAttack = biterUtils.createBeamAttack - -local makeBiter = biterUtils.makeBiter -local makeDrone = droneUtils.makeDrone -local makeSpitter = biterUtils.makeSpitter -local makeWorm = biterUtils.makeWorm -local makeUnitSpawner = biterUtils.makeUnitSpawner - --- module code - -local scorchmarkTiers = { - "small-scorchmark", - "small-scorchmark", - "medium-scorchmark", - "medium-scorchmark", - "medium-scorchmark", - "big-scorchmark", - "big-scorchmark", - "big-scorchmark", - "huge-scorchmark", - "huge-scorchmark" -} - -local explosionTiers = { - "explosion", - "explosion", - "big-explosion", - "big-explosion", - "big-explosion", - "big-explosion", - "massive-explosion", - "massive-explosion", - "massive-explosion", - "massive-explosion" -} - -local bloodFountains = { - "blood-explosion-small-rampant", - "blood-explosion-small-rampant", - "blood-explosion-small-rampant", - "blood-explosion-small-rampant", - "blood-explosion-big-rampant", - "blood-explosion-big-rampant", - "blood-explosion-big-rampant", - "blood-explosion-huge-rampant", - "blood-explosion-huge-rampant", - "blood-explosion-huge-rampant", -} - -local biterDyingSounds = { - sounds.biter_dying(0.45), - sounds.biter_dying(0.50), - sounds.biter_dying(0.55), - sounds.biter_dying(0.60), - sounds.biter_dying(0.65), - sounds.biter_dying_big(0.40), - sounds.biter_dying_big(0.45), - sounds.biter_dying_big(0.50), - sounds.biter_dying_big(0.55), - sounds.biter_dying_big(0.60) -} - -local biterWorkingSounds = { - sounds.biter_calls(0.75), - sounds.biter_calls(0.80), - sounds.biter_calls(0.87), - sounds.biter_calls_big(0.62), - sounds.biter_calls_big(0.67), - sounds.biter_calls_big(0.73), - sounds.biter_calls_big(0.80), - sounds.biter_calls_behemoth(0.90), - sounds.biter_calls_behemoth(0.95), - sounds.biter_calls_behemoth(1) -} - -local biterWalkingSounds = { - sounds.biter_walk(0.15), - sounds.biter_walk(0.20), - sounds.biter_walk(0.25), - sounds.biter_walk(0.30), - sounds.biter_walk(0.35), - sounds.biter_walk_big(0.70), - sounds.biter_walk_big(0.74), - sounds.biter_walk_big(0.78), - sounds.biter_walk_big(0.82), - sounds.biter_walk_big(0.86) -} - -local biterRoarSounds = { - sounds.biter_roars(0.30), - sounds.biter_roars(0.40), - sounds.biter_roars_mid(0.68), - sounds.biter_roars_mid(0.73), - sounds.biter_roars_mid(0.78), - sounds.biter_roars_big(0.32), - sounds.biter_roars_big(0.37), - sounds.biter_roars_big(0.42), - sounds.biter_roars_behemoth(0.60), - sounds.biter_roars_behemoth(0.70) -} - -local spitterDyingSounds = { - sounds.spitter_dying(0.40), - sounds.spitter_dying(0.50), - sounds.spitter_dying_mid(0.55), - sounds.spitter_dying_mid(0.65), - sounds.spitter_dying_mid(0.75), - sounds.spitter_dying_big(0.67), - sounds.spitter_dying_big(0.71), - sounds.spitter_dying_big(0.75), - sounds.spitter_dying_behemoth(0.60), - sounds.spitter_dying_behemoth(0.70) -} - -local spitterWorkingSounds = { - sounds.spitter_calls(0.39), - sounds.spitter_calls(0.44), - sounds.spitter_calls(0.49), - sounds.spitter_calls_med(0.48), - sounds.spitter_calls_med(0.53), - sounds.spitter_calls_med(0.58), - sounds.spitter_calls_med(0.63), - sounds.spitter_calls_big(0.50), - sounds.spitter_calls_big(0.55), - sounds.spitter_calls_big(0.60) -} - -local spitterWalkingSounds = { - sounds.spitter_walk(0.20), - sounds.spitter_walk(0.30), - sounds.spitter_walk(0.40), - sounds.spitter_walk(0.50), - sounds.spitter_walk(0.60), - sounds.spitter_walk_big(0.45), - sounds.spitter_walk_big(0.50), - sounds.spitter_walk_big(0.55), - sounds.spitter_walk_big(0.60), - sounds.spitter_walk_big(0.65) -} - -local wormFoldSounds = { - sounds.worm_fold(0.74), - sounds.worm_fold(0.77), - sounds.worm_fold(0.80), - sounds.worm_fold(0.83), - sounds.worm_fold(0.86), - sounds.worm_fold(0.89), - sounds.worm_fold(0.92), - sounds.worm_fold(0.95), - sounds.worm_fold(0.98), - sounds.worm_fold(1) -} - -local wormStandupSounds = { - sounds.worm_standup_small(0.75), - sounds.worm_standup_small(0.82), - sounds.worm_standup_small(0.89), - sounds.worm_standup_small(1), - sounds.worm_standup(0.75), - sounds.worm_standup(0.80), - sounds.worm_standup(0.85), - sounds.worm_standup(0.90), - sounds.worm_standup(0.95), - sounds.worm_standup(1) -} - -local wormBreathSounds = { - sounds.worm_breath(0.4), - sounds.worm_breath(0.5), - sounds.worm_breath(0.6), - sounds.worm_breath(0.7), - sounds.worm_breath(0.8), - sounds.worm_breath_big(0.80), - sounds.worm_breath_big(0.85), - sounds.worm_breath_big(0.90), - sounds.worm_breath_big(0.95), - sounds.worm_breath_big(1) -} - -local wormDyingSounds = { - sounds.worm_dying_small(0.52), - sounds.worm_dying_small(0.57), - sounds.worm_dying_small(0.65), - sounds.worm_dying(0.60), - sounds.worm_dying(0.65), - sounds.worm_dying(0.7), - sounds.worm_dying(0.75), - sounds.worm_dying_big(0.67), - sounds.worm_dying_big(0.72), - sounds.worm_dying_big(0.77) -} - -local wormRoarSounds = { - sounds.worm_roars(0.51), - sounds.worm_roars(0.56), - sounds.worm_roars(0.62), - sounds.worm_roars(0.68), - sounds.worm_roars(0.73), - sounds.worm_roars_big(0.62), - sounds.worm_roars_big(0.67), - sounds.worm_roars_big(0.72), - sounds.worm_roars_big(0.77), - sounds.worm_roars_big(0.82) -} - -local wormAltRoarSounds = { - sounds.worm_roar_alternative(0.54), - sounds.worm_roar_alternative(0.59), - sounds.worm_roar_alternative(0.64), - sounds.worm_roar_alternative(0.68), - sounds.worm_roar_alternative(0.73), - sounds.worm_roar_alternative_big(0.67), - sounds.worm_roar_alternative_big(0.72), - sounds.worm_roar_alternative_big(0.82), - sounds.worm_roar_alternative_big(0.87), - sounds.worm_roar_alternative_big(0.92) -} - -local nuclearAttackNumeric = { - ["damage"] = { 15, 15, 25, 25, 35, 35, 45, 45, 55, 55 }, - ["repeatCount"] = { 150, 175, 250, 300, 350, 400, 450, 500, 550, 600 }, - ["radius"] = { 5, 10, 10, 12, 14, 16, 16, 18, 18, 20 }, - ["explosionDistance"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, - ["explosionCount"] = { 3, 3, 3, 4, 4, 4, 5, 5, 6, 6 } -} - -local bombAttackNumeric = { - ["damage"] = { 75, 112, 150, 187, 270, 360, 600, 720, 975, 1050 }, - ["radius"] = { 1.75, 1.75, 2, 2.5, 3, 3, 3.5, 3.5, 3.75, 4 }, - ["explosionDistance"] = { 2, 2, 2, 2, 2, 2.5, 2.5, 2.5, 3, 3 }, - ["explosionCount"] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } -} - -local streamAttackNumeric = { - ["stickerDamagePerTick"] = { 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60, 0.65 }, - ["stickerDuration"] = { 400, 410, 420, 430, 440, 450, 440, 470, 480, 490 }, - ["particleTimeout"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, - ["fireSpreadRadius"] = { 0.75, 0.75, 0.77, 0.77, 0.79, 0.79, 0.83, 0.83, 0.85, 0.85 }, - ["damageMaxMultipler"] = { 2, 2, 2, 3, 3, 3, 4, 4, 4, 5 }, - ["fireSpreadCooldown"] = { 30, 30, 29, 29, 28, 28, 27, 27, 25, 25 }, - ["fireDamagePerTick"] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4 }, - ["damage"] = { 4, 7.5, 11.25, 15, 22.5, 27.5, 32.5, 37.5, 42.5, 47.5 } -} - -local beamAttackNumeric = { - ["range"] = { 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }, - ["damage"] = { 3.6, 6, 9, 12, 18, 27, 36, 45, 54, 90 }, - ["duration"] = { 20, 20, 21, 21, 22, 22, 23, 23, 24, 24 }, - ["damageInterval"] = { 20, 20, 21, 21, 22, 22, 23, 23, 24, 24 }, - ["width"] = { 1.5, 1.5, 1.6, 1.6, 1.7, 1.7, 1.8, 1.8, 1.9, 1.9 } -} - -local clusterAttackNumeric = { - ["clusterDistance"] = { 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 }, - ["clusters"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, - ["startingSpeed"] = { 0.25, 0.25, 0.27, 0.27, 0.29, 0.29, 0.31, 0.31, 0.33, 0.33 } -} - -local liteClusterAttackNumeric = { - ["clusterDistance"] = { 2, 2, 3, 3, 3, 4, 4, 4, 5, 5 }, - ["clusters"] = { 2, 2, 3, 3, 4, 4, 5, 5, 6, 6 }, - ["startingSpeed"] = { 0.25, 0.25, 0.27, 0.27, 0.29, 0.29, 0.31, 0.31, 0.33, 0.33 }, - ["damage"] = { 4, 7.5, 11.25, 15, 22.5, 27.5, 32.5, 37.5, 42.5, 47.5 } -} - -local biterAttributeNumeric = { - ["range"] = { 0.5, 0.5, 0.75, 0.75, 1.0, 1.0, 1.25, 1.50, 1.75, 2.0 }, - ["radius"] = { 0.5, 0.65, 0.75, 0.85, 0.95, 1.1, 1.2, 1.3, 1.4, 1.5 }, - ["cooldown"] = { 40, 41, 42, 44, 46, 48, 50, 52, 55, 57 }, - ["damage"] = { 16, 35, 65, 85, 115, 145, 175, 205.0, 235.0, 265.0 }, - ["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 }, - ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, - ["physicalDecrease"] = { 0, 0, 4, 5, 6, 8, 11, 13, 16, 17 }, - ["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 16, 18, 20 }, - ["explosionDecrease"] = { 0, 0, 0, 0, 0, 10, 12, 14, 16, 20 }, - ["explosionPercent"] = { 0, 0, 0, 10, 12, 13, 15, 16, 17, 20 }, - -- ["distancePerFrame"] = { 0.1, 0.125, 0.15, 0.19, 0.195, 0.2, 0.2, 0.2, 0.2, 0.2 }, - ["distancePerFrame"] = { 0.08, 0.10, 0.125, 0.15, 0.18, 0.195, 0.2, 0.2, 0.2, 0.2 }, - ["movement"] = { 0.2, 0.19, 0.185, 0.18, 0.175, 0.17, 0.17, 0.17, 0.17, 0.17 }, - ["health"] = { 15, 75, 150, 250, 1000, 2000, 3500, 7500, 15000, 30000 }, - ["pollutionToAttack"] = { 10, 40, 80, 120, 200, 300, 450, 550, 650, 750 }, - ["spawningTimeModifer"] = { 1, 1, 2, 2, 4, 4, 6, 6, 8, 8 } -} - -local acidPuddleAttributeNumeric = { - ["damagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 }, - ["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 }, - ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 } -} - -local spitterAttributeNumeric = { - ["range"] = { 11, 11, 11, 12, 12, 12, 13, 13, 14, 14 }, - ["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 }, - ["cooldown"] = { 100, 100, 97, 97, 95, 95, 93, 93, 90, 90 }, - ["warmup"] = { 30, 29, 28, 27, 26, 25, 24, 23, 22, 21 }, - ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 }, - ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, - ["stickerDamagePerTick"] = { 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25 }, - ["stickerMovementModifier"] = { 0.97, 0.96, 0.95, 0.94, 0.93, 0.92, 0.91, 0.90, 0.89, 0.88 }, - ["damage"] = { 4, 7.5, 11.25, 15, 22.5, 27.5, 32.5, 37.5, 42.5, 47.5 }, - ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, - ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, - ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, - ["scale"] = { 0.25, 0.40, 0.60, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8 }, - ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, - ["physicalDecrease"] = { 0, 0, 0, 0, 2, 4, 6, 8, 10, 12 }, - ["physicalPercent"] = { 0, 0, 0, 10, 12, 12, 14, 14, 15, 15 }, - ["explosionPercent"] = { 0, 0, 10, 10, 20, 20, 30, 30, 40, 40 }, - ["distancePerFrame"] = { 0.04, 0.045, 0.050, 0.055, 0.060, 0.065, 0.067, 0.069, 0.071, 0.073 }, - ["movement"] = { 0.185, 0.18, 0.18, 0.17, 0.17, 0.16, 0.16, 0.15, 0.15, 0.14 }, - ["health"] = { 10, 50, 200, 350, 1250, 2250, 3250, 6500, 12500, 25000 }, - ["pollutionToAttack"] = { 10, 40, 80, 120, 200, 300, 450, 550, 650, 750 }, - ["spawningTimeModifer"] = { 1, 1, 2, 2, 4, 4, 6, 6, 8, 8 } -} - -local droneAttributeNumeric = { - ["scale"] = { 0.3, 0.32, 0.34, 0.36, 0.4, 0.42, 0.44, 0.5, 0.52, 0.54 }, - ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, - ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, - ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, - ["stickerDuration"] = { 600, 610, 620, 630, 640, 650, 660, 670, 680, 690 }, - ["stickerMovementModifier"] = { 0.8, 0.8, 0.75, 0.75, 0.7, 0.7, 0.65, 0.65, 0.5, 0.5 }, - ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, - ["cooldown"] = { 60, 60, 55, 55, 50, 50, 45, 45, 40, 40 }, - ["warmup"] = { 20, 19, 18, 17, 16, 15, 14, 13, 12, 11 }, - ["ttl"] = { 300, 300, 350, 350, 400, 400, 450, 450, 500, 500 }, - ["damage"] = { 2, 4, 7, 13, 15, 18, 22, 28, 35, 40 }, - ["movement"] = { 0.06, 0.06, 0.07, 0.07, 0.08, 0.08, 0.09, 0.09, 0.1, 0.1 }, - ["distancePerFrame"] = { 0.1, 0.1, 0.105, 0.105, 0.110, 0.110, 0.112, 0.112, 0.114, 0.114 }, - ["rangeFromPlayer"] = { 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }, - ["range"] = { 10, 10, 11, 11, 12, 12, 13, 13, 14, 14 }, - ["radius"] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.5 }, - ["health"] = { 20, 150, 300, 450, 600, 800, 1000, 2000, 4000, 8000 }, - ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, -} - -local unitSpawnerAttributeNumeric = { - ["health"] = { 350, 500, 750, 1500, 3500, 7500, 11000, 20000, 30000, 45000 }, - ["healing"] = { 0.02, 0.02, 0.022, 0.024, 0.026, 0.028, 0.03, 0.032, 0.034, 0.036 }, - ["spawningCooldownStart"] = { 2160, 2150, 2140, 2130, 2120, 2110, 2100, 2090, 2080, 2070 }, - ["spawningCooldownEnd"] = { 700, 690, 680, 670, 660, 650, 640, 630, 620, 610 }, - ["unitsToSpawn"] = { 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }, - ["cooldown"] = { 50, 50, 45, 45, 40, 40, 35, 35, 30, 30 }, - ["unitsOwned"] = { 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }, - ["physicalDecrease"] = { 1, 2, 3, 4, 6, 6, 8, 10, 12, 14 }, - ["physicalPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, - ["explosionDecrease"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, - ["explosionPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, - ["fireDecrease"] = { 3, 3, 4, 4, 4, 4, 4, 4, 5, 5 }, - ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, - ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }, - ["scale"] = { 0.80, 0.85, 0.90, 0.95, 1, 1.05, 1.1, 1.15, 1.2, 1.25 } -} - -local hiveAttributeNumeric = { - ["health"] = { 700, 1000, 1500, 3000, 7000, 15000, 22000, 40000, 60000, 90000 }, - ["healing"] = { 0.02, 0.02, 0.022, 0.024, 0.026, 0.028, 0.03, 0.032, 0.034, 0.036 }, - ["spawningCooldownStart"] = { 2485, 2465, 2445, 2425, 2405, 2390, 2370, 2350, 2330, 2310 }, - ["spawningRadius"] = { 10, 13, 15, 17, 20, 23, 26, 29, 32, 35 }, - ["spawningSpacing"] = { 5, 5, 5, 6, 6, 6, 7, 7, 7, 8 }, - ["spawningCooldownEnd"] = { 892, 890, 887, 885, 882, 880, 877, 875, 872, 870 }, - ["unitsToSpawn"] = { 3000, 3000, 300, 3000, 3000, 3000, 3000, 3000, 3000, 3000 }, - ["scale"] = { 1.0, 1.05, 1.1, 1.15, 1.20, 1.25, 1.30, 1.35, 1.4, 1.45 }, - ["unitsOwned"] = { 7, 7, 8, 8, 9, 9, 10, 10, 11, 11 }, - ["physicalDecrease"] = { 1, 2, 3, 4, 6, 6, 8, 10, 12, 14 }, - ["physicalPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, - ["explosionDecrease"] = { 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }, - ["explosionPercent"] = { 15, 15, 17, 17, 18, 18, 19, 19, 20, 20 }, - ["fireDecrease"] = { 3, 3, 4, 4, 4, 4, 4, 4, 5, 5 }, - ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, - ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }, - ["cooldown"] = { 50, 50, 45, 45, 40, 40, 35, 35, 30, 30 } -} - -local wormAttributeNumeric = { - ["stickerDuration"] = { 800, 810, 820, 830, 840, 850, 860, 870, 880, 890 }, - ["stickerMovementModifier"] = { 0.8, 0.8, 0.75, 0.75, 0.7, 0.7, 0.65, 0.65, 0.5, 0.5 }, - ["damagePerTick"] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1 }, - ["range"] = { 25, 27, 31, 33, 35, 36, 37, 38, 39, 40 }, - ["cooldown"] = { 70, 70, 68, 66, 64, 62, 60, 58, 56, 54 }, - ["damage"] = { 12, 22.5, 33.75, 45, 67.5, 82.5, 97.5, 112.5, 127.5, 142.5 }, - ["scale"] = { 0.75, 0.85, 0.95, 1.05, 1.15, 1.25, 1.35, 1.45, 1.55, 1.65 }, - ["radius"] = { 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.3, 2.5, 3.0 }, - ["stickerDamagePerTick"] = { 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 }, - ["particleVerticalAcceleration"] = { 0.01, 0.01, 0.02, 0.02, 0.03, 0.03, 0.04, 0.04, 0.05, 0.05 }, - ["particleHoizontalSpeed"] = { 0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1, 1 }, - ["particleHoizontalSpeedDeviation"] = { 0.0025, 0.0025, 0.0024, 0.0024, 0.0023, 0.0023, 0.0022, 0.0022, 0.0021, 0.0021 }, - ["foldingSpeed"] = { 0.15, 0.15, 0.16, 0.16, 0.16, 0.17, 0.17, 0.18, 0.18, 0.19 }, - ["preparingSpeed"] = { 0.025, 0.025, 0.026, 0.026, 0.027, 0.027, 0.028, 0.028, 0.029, 0.029 }, - ["prepareRange"] = { 30, 30, 35, 35, 40, 40, 40, 40, 45, 45 }, - ["physicalDecrease"] = { 0, 0, 5, 5, 8, 8, 10, 10, 12, 12 }, - ["explosionDecrease"] = { 0, 0, 5, 5, 8, 8, 10, 10, 12, 12 }, - ["explosionPercent"] = { 0, 0, 10, 10, 20, 20, 30, 30, 40, 40 }, - ["fireDecrease"] = { 3, 3, 4, 4, 5, 5, 5, 5, 5, 6 }, - ["health"] = { 200, 350, 500, 750, 2000, 3500, 7500, 12000, 20000, 25000 }, - ["firePercent"] = { 40, 40, 42, 42, 43, 43, 44, 44, 45, 45 }, - ["healing"] = { 0.01, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.12, 0.14, 0.16 }, - ["evolutionRequirement"] = { 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 } -} - -local propTables10 = { - {{0, 1}, {0.65, 0.0}}, - {{0.3, 0}, {0.35, 0.5}, {0.80, 0.0}}, - {{0.4, 0}, {0.45, 0.5}, {0.90, 0.0}}, - {{0.5, 0}, {0.55, 0.5}, {0.90, 0.0}}, - {{0.6, 0}, {0.65, 0.5}, {0.95, 0.0}}, - {{0.7, 0}, {0.75, 0.5}, {0.975, 0.0}}, - {{0.8, 0}, {0.825, 0.5}, {0.975, 0.0}}, - {{0.85, 0}, {0.875, 0.5}, {0.975, 0.0}}, - {{0.90, 0}, {0.925, 0.5}, {0.975, 0.0}}, - {{0.93, 0}, {1, 1.0}} -} - -local function fillUnitTable(result, unitSet, tier, probability) - for x=1,#unitSet[tier] do - result[#result+1] = {unitSet[tier][x], probability} - end -end - -local function unitSetToProbabilityTable(unitSet) - local result = {} - - fillUnitTable(result, unitSet, 1, {{0, 1}, {0.65, 0.0}}) - fillUnitTable(result, unitSet, 2, {{0.3, 0}, {0.35, 0.5}, {0.80, 0.0}}) - fillUnitTable(result, unitSet, 3, {{0.4, 0}, {0.45, 0.5}, {0.90, 0.0}}) - fillUnitTable(result, unitSet, 4, {{0.5, 0}, {0.55, 0.5}, {0.90, 0.0}}) - fillUnitTable(result, unitSet, 5, {{0.6, 0}, {0.65, 0.5}, {0.95, 0.0}}) - fillUnitTable(result, unitSet, 6, {{0.7, 0}, {0.75, 0.5}, {0.975, 0.0}}) - fillUnitTable(result, unitSet, 7, {{0.8, 0}, {0.825, 0.5}, {0.975, 0.0}}) - fillUnitTable(result, unitSet, 8, {{0.85, 0}, {0.875, 0.5}, {0.975, 0.0}}) - fillUnitTable(result, unitSet, 9, {{0.90, 0}, {0.925, 0.5}, {0.975, 0.0}}) - fillUnitTable(result, unitSet, 10, {{0.93, 0}, {1, 1.0}}) - - return result -end - -local function addMajorResistance(entity, name, tier) - local decreases = { 7, 7, 10, 10, 13, 13, 16, 16, 19, 23 } - local percents = { 80, 80, 84, 84, 89, 89, 93, 93, 97, 97 } - entity.resistances[name] = { - decrease = roundToNearest(gaussianRandomRangeRG(decreases[tier], decreases[tier] * 0.1, decreases[tier] * 0.85, decreases[tier] * 1.30, xorRandom), 0.1), - percent = roundToNearest(gaussianRandomRangeRG(percents[tier], percents[tier] * 0.1, percents[tier] * 0.85, 0.99, xorRandom), 0.1) - } -end - -local function addMinorResistance(entity, name, tier) - local decreases = { 3, 3, 7, 7, 10, 10, 13, 13, 16, 18 } - local percents = { 40, 40, 44, 44, 48, 48, 52, 56, 56, 60 } - entity.resistances[name] = { - decrease = roundToNearest(gaussianRandomRangeRG(decreases[tier], decreases[tier] * 0.1, decreases[tier] * 0.85, decreases[tier] * 1.30, xorRandom), 0.1), - percent = roundToNearest(gaussianRandomRangeRG(percents[tier], percents[tier] * 0.1, percents[tier] * 0.85, percents[tier] * 1.30, xorRandom), 0.1) - } -end - -local function addMajorWeakness(entity, name, tier) - local decreases = { -7, -7, -10, -10, -13, -13, -16, -16, -19, -23 } - local percents = { -65, -65, -70, -75, -75, -80, -85, -85, -90, -90 } - entity.resistances[name] = { - decrease = roundToNearest(gaussianRandomRangeRG(decreases[tier], decreases[tier] * 0.1, decreases[tier] * 0.85, decreases[tier] * 1.30, xorRandom), 0.1), - percent = roundToNearest(gaussianRandomRangeRG(percents[tier], percents[tier] * 0.1, percents[tier] * 0.85, percents[tier] * 1.30, xorRandom), 0.1) - } -end - -local function addMinorWeakness(entity, name, tier) - local decreases = { -3, -3, -7, -7, -10, -10, -13, -13, -16, -18 } - local percents = { -40, -40, -44, -44, -48, -48, -52, -56, -56, -60 } - entity.resistances[name] = { - decrease = roundToNearest(gaussianRandomRangeRG(decreases[tier], decreases[tier] * 0.1, decreases[tier] * 0.85, decreases[tier] * 1.30, xorRandom), 0.1), - percent = roundToNearest(gaussianRandomRangeRG(percents[tier], percents[tier] * 0.1, percents[tier] * 0.85, percents[tier] * 1.30, xorRandom), 0.1) - } -end - - -local function scaleAttributes (entity) - if (entity.type == "biter") then - entity["health"] = entity["health"] * settings.startup["rampant--unitBiterHealthScaler"].value - entity["movement"] = entity["movement"] * settings.startup["rampant--unitBiterSpeedScaler"].value - entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampant--unitBiterSpeedScaler"].value - entity["damage"] = entity["damage"] * settings.startup["rampant--unitBiterDamageScaler"].value - entity["range"] = entity["range"] * settings.startup["rampant--unitBiterRangeScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitBiterHealingScaler"].value - elseif (entity.type == "spitter") then - entity["health"] = entity["health"] * settings.startup["rampant--unitSpitterHealthScaler"].value - entity["movement"] = entity["movement"] * settings.startup["rampant--unitSpitterSpeedScaler"].value - entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampant--unitSpitterSpeedScaler"].value - entity["damage"] = entity["damage"] * settings.startup["rampant--unitSpitterDamageScaler"].value - if entity["stickerDamagePerTick"] then - entity["stickerDamagePerTick"] = entity["stickerDamagePerTick"] * settings.startup["rampant--unitSpitterDamageScaler"].value - end - entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampant--unitSpitterDamageScaler"].value - entity["range"] = entity["range"] * settings.startup["rampant--unitSpitterRangeScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitSpitterHealingScaler"].value - elseif (entity.type == "drone") then - entity["health"] = entity["health"] * settings.startup["rampant--unitDroneHealthScaler"].value - entity["movement"] = entity["movement"] * settings.startup["rampant--unitDroneSpeedScaler"].value - entity["distancePerFrame"] = entity["distancePerFrame"] * settings.startup["rampant--unitDroneSpeedScaler"].value - entity["damage"] = entity["damage"] * settings.startup["rampant--unitDroneDamageScaler"].value - entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampant--unitDroneDamageScaler"].value - entity["range"] = entity["range"] * settings.startup["rampant--unitDroneRangeScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitDroneHealingScaler"].value - elseif (entity.type == "biter-spawner") or (entity.type == "spitter-spawner") then - entity["health"] = entity["health"] * settings.startup["rampant--unitSpawnerHealthScaler"].value - entity["unitsOwned"] = entity["unitsOwned"] * settings.startup["rampant--unitSpawnerOwnedScaler"].value - entity["unitsToSpawn"] = entity["unitsToSpawn"] * settings.startup["rampant--unitSpawnerSpawnScaler"].value - entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * settings.startup["rampant--unitSpawnerRespawnScaler"].value - entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * settings.startup["rampant--unitSpawnerRespawnScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitSpawnerHealingScaler"].value - elseif (entity.type == "turret") then - entity["health"] = entity["health"] * settings.startup["rampant--unitWormHealthScaler"].value - entity["damage"] = entity["damage"] * settings.startup["rampant--unitWormDamageScaler"].value - entity["damagePerTick"] = entity["damagePerTick"] * settings.startup["rampant--unitWormDamageScaler"].value - entity["range"] = entity["range"] * settings.startup["rampant--unitWormRangeScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitWormHealingScaler"].value - elseif (entity.type == "hive") then - entity["health"] = entity["health"] * settings.startup["rampant--unitHiveHealthScaler"].value - entity["healing"] = entity["healing"] * settings.startup["rampant--unitHiveHealingScaler"].value - entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * settings.startup["rampant--unitHiveRespawnScaler"].value - entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * settings.startup["rampant--unitHiveRespawnScaler"].value - end -end - --- local function distort(xorRandom, num, min, max) --- local min = min or num * 0.85 --- local max = max or num * 1.30 --- if (num < 0) then --- local t = min --- min = max --- max = t --- end --- return roundToNearest(gaussianRandomRangeRG(num, num * 0.15, min, max, xorRandom), 0.01) --- end - -local function fillEntityTemplate(entity) - local tier = entity.effectiveLevel - - if (entity.type == "biter") then - for key,value in pairs(biterAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - elseif (entity.type == "spitter") then - for key,value in pairs(spitterAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - elseif (entity.type == "biter-spawner") or (entity.type == "spitter-spawner") then - for key,value in pairs(unitSpawnerAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - elseif (entity.type == "hive") then - for key,value in pairs(hiveAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - elseif (entity.type == "turret") then - for key,value in pairs(wormAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - elseif (entity.type == "drone") then - for key,value in pairs(droneAttributeNumeric) do - if not entity[key] then - entity[key] = distort(xorRandom, value[tier]) - else - entity[key] = distort(xorRandom, entity[key][tier]) - end - end - end - - for k,v in pairs(entity) do - local startDecrease = string.find(k, "Decrease") - local startPercent = string.find(k, "Percent") - if startDecrease or startPercent then - local damageType = string.sub(k, 1, (startDecrease or startPercent)-1) - if not entity.resistances[damageType] then - entity.resistances[damageType] = {} - end - - if startDecrease then - entity.resistances[damageType].decrease = v - elseif startPercent then - entity.resistances[damageType].percent = v - end - end - end - - for i=1,#entity.addon do - for k,v in pairs(entity.addon[i]) do - entity[k] = v[tier] - end - end - - for key, value in pairs(entity) do - if (key == "drops") then - if not entity.loot then - entity.loot = {} - end - for _,lootTable in pairs(entity.drops) do - entity.loot[#entity.loot+1] = lootTable[tier] - end - elseif (key == "explosion") then - local ti = tier - if (entity.type == "drone") then - ti = 1 - end - entity["hitSprayName"] = entity.faction .. "-" .. "damaged-fountain-rampant" - entity["explosion"] = entity.faction .. "-" .. bloodFountains[ti] - elseif (key == "evolutionFunction") then - entity["evolutionRequirement"] = distort(xorRandom, value(tier)) - elseif (key == "majorResistances") then - for i=1,#value do - addMajorResistance(entity, value[i], tier) - end - elseif (key == "minorResistances") then - for i=1,#value do - addMinorResistance(entity, value[i], tier) - end - elseif (key == "majorWeaknesses") then - for i=1,#value do - addMajorWeakness(entity, value[i], tier) - end - elseif (key == "minorWeaknesses") then - for i=1,#value do - addMinorWeakness(entity, value[i], tier) - end - elseif (key == "explosionTiers") then - entity.attackExplosion = entity.explosionTiers[tier] - entity.attackScorchmark = entity.scorchmarkTiers[tier] - end - end - - if entity.attributes then - for i=1,#entity.attributes do - local attribute = entity.attributes[i] - if (attribute == "lowHealth") then - entity["health"] = entity["health"] * 0.75 - elseif (attribute == "lowestHealth") then - entity["health"] = entity["health"] * 0.50 - elseif (attribute == "quickCooldown") then - entity["cooldown"] = entity["cooldown"] * 0.50 - entity["damage"] = entity["damage"] * 0.65 - if entity["damagePerTick"] then - entity["damagePerTick"] = entity["damagePerTick"] * 0.65 - end - elseif (attribute == "slowMovement") then - entity["movement"] = entity["movement"] * 0.35 - entity["distancePerFrame"] = entity["distancePerFrame"] * 0.65 - elseif (attribute == "quickMovement") then - entity["movement"] = entity["movement"] * 1.25 - entity["distancePerFrame"] = entity["distancePerFrame"] * 1.35 - elseif (attribute == "quickSpawning") then - if entity["spawningCooldownStart"] then - entity["spawningCooldownStart"] = entity["spawningCooldownStart"] * 0.85 - entity["spawningCooldownEnd"] = entity["spawningCooldownEnd"] * 0.85 - end - if entity["spawningTimeModifer"] then - entity["spawningTimeModifer"] = entity["spawningTimeModifer"] * 0.85 - end - elseif (attribute == "altBiterArmored") then - entity["altBiter"] = "armored" - elseif (attribute == "highRegen") then - entity["healing"] = entity["healing"] * 1.5 - elseif (attribute == "highestRegen") then - entity["healing"] = entity["healing"] * 3.5 - elseif (attribute == "big") then - entity["scale"] = entity["scale"] * 1.2 - elseif (attribute == "bigger") then - entity["scale"] = entity["scale"] * 1.35 - elseif (attribute == "longReach") then - entity["range"] = entity["range"] * 3 - elseif (attribute == "smallest") then - entity["scale"] = entity["scale"] * 0.5 - elseif (attribute == "fragile") then - entity["health"] = entity["health"] * 0.35 - entity["explosion"] = entity.faction .. "-" .. "damaged-fountain-rampant" - elseif (attribute == "selfDamaging") then - local divider - if entity.health < 100 then - divider = 5 - else - divider = 7 - end - entity.healthDamage = entity.health / divider - entity.sourceEffect = function (attributes) - return - { - { - type = "damage", - affects_target = true, - damage = {amount = attributes.healthDamage or 5, type = attributes.damageType or "physical"} - } - } - end - elseif (attribute == "killsSelf") then - entity.healthDamage = entity.health * 3 - elseif (attribute == "unstable") then - entity["healing"] = entity["healing"] * -1 - elseif (attribute == "checkBuildability") then - entity.checkBuildability = true - elseif (attribute == "spawnDuringDays") then - entity.minSpawnDarkness = 0 - entity.maxSpawnDarkness = 0.45 - elseif (attribute == "followsPlayer") then - entity.followsPlayer = true - elseif (attribute == "stationary") then - entity.movement = 0 - entity.distancePerFrame = 0 - elseif (attribute == "highHealth") then - entity["health"] = entity["health"] * 1.50 - elseif (attribute == "poisonDeathCloud") then - entity.dyingEffect = { - type = "create-entity", - entity_name = "poison-cloud-v" .. tier .. "-cloud-rampant" - } - elseif (attribute == "highestHealth") then - entity["health"] = entity["health"] * 2 - elseif (attribute == "skipKillCount") then - if not entity["appendFlags"] then - entity["appendFlags"] = {} - end - entity["appendFlags"]["not-in-kill-statistics"] = true - elseif type(attribute) == "table" then - if (attribute[1] == "clusterDeath") then - entity.deathGenerator = function (attack) - return { - { - type = "cluster", - cluster_count = attack.clusters, - distance = attack.clusterDistance, - distance_deviation = 3, - action_delivery = - { - type = "projectile", - projectile = createCapsuleProjectile(attack, - attack.faction .. "-" .. attribute[2] - .. "-v" .. attack.variation .. "-t" - .. attack.effectiveLevel .. "-rampant"), - direction_deviation = 0.6, - starting_speed = 0.25, - max_range = attack.range, - starting_speed_deviation = 0.3 - } - } - } - end - else - error("Unknown table attribute " .. attribute[1]) - end - else - error("Unknown attribute " .. attribute) - end - end - end - - -- print(serpent.dump(entity)) - scaleAttributes(entity) -end - -local function calculateRGBa(tint, tier, staticAlpha, invert) - local stdDevMultipler = 0.10 + (0.005 * tier) - local lowMultipler = 0.85 - (0.005 * tier) - local r = gaussianRandomRangeRG(tint.r, - tint.r * stdDevMultipler, - mMax(tint.r * lowMultipler, 0), - mMin(tint.r * 1.15, 1), xorRandom) - local g = gaussianRandomRangeRG(tint.g, - tint.g * stdDevMultipler, - mMax(tint.g * lowMultipler, 0), - mMin((tint.g * 1.15), 1), xorRandom) - local b = gaussianRandomRangeRG(tint.b, - tint.b * stdDevMultipler, - mMax(tint.b * lowMultipler, 0), - mMin(tint.b * 1.15, 1), xorRandom) - local a = tint.a - if not staticAlpha then - a = gaussianRandomRangeRG(tint.a, - tint.a * stdDevMultipler, - mMax(tint.a * lowMultipler, 0), - mMin(tint.a * 1.15, 1), xorRandom) - end - - if invert then - return { r=(1-r), g=(1-g), b=(1-b), a=(1-a) } - else - return { r=r, g=g, b=b, a=a } - end -end - -local function generateApperance(unit, invert) - local tier = unit.effectiveLevel - if unit.scale then - local scaleValue = unit.scale[tier] - local scale = gaussianRandomRangeRG(scaleValue, scaleValue * 0.20, scaleValue * 0.50, scaleValue * 1.30, xorRandom) - unit.scale = scale - end - if invert then - if unit.tint then - unit.tint = calculateRGBa(unit.tint3, tier, true) -- calculateRGBa(unit.tint2, tier, true, true) - end - if unit.tint2 then - unit.tint2 = {r=1,g=1,b=1,a=1} - end - else - if unit.tint then - unit.tint = calculateRGBa(unit.tint, tier, true) - end - if unit.tint2 then - unit.tint2 = calculateRGBa(unit.tint2, tier, true) - end - end -end - -function swarmUtils.buildUnits(template) - local unitSet = {} - - local variations = settings.startup["rampant--newEnemyVariations"].value - - for tier=1, 10 do - local effectiveLevel = TIER_UPGRADE_SET_10[tier] - local result = {} - - for i=1,variations do - local unit = deepcopy(template) - unit.name = unit.name .. "-v" .. i .. "-t" .. tier - unit.tier = tier - -- unit.nameSuffix = "-v" .. i .. "-t" .. tier - unit.effectiveLevel = effectiveLevel - unit.variation = i - generateApperance(unit) - fillEntityTemplate(unit) - unit.roarSounds = biterRoarSounds[effectiveLevel] - unit.attack = unit.attackGenerator(unit) - unit.death = (unit.deathGenerator and unit.deathGenerator(unit)) or nil - - local entity - if (unit.type == "spitter") then - unit.dyingSounds = spitterDyingSounds[effectiveLevel] - unit.workingSounds = spitterWorkingSounds[effectiveLevel] - unit.walkingSounds = spitterWalkingSounds[effectiveLevel] - entity = makeSpitter(unit) - elseif (unit.type == "biter") then - unit.dyingSounds = biterDyingSounds[effectiveLevel] - unit.workingSounds = biterWorkingSounds[effectiveLevel] - unit.walkingSounds = biterWalkingSounds[effectiveLevel] - unit.roarSounds = biterRoarSounds[effectiveLevel] - entity = makeBiter(unit) - elseif (unit.type == "drone") then - -- if not unit.death then - -- unit.death = { - -- type = "direct", - -- action_delivery = - -- { - -- type = "instant", - -- target_effects = - -- { - -- type = "create-entity", - -- entity_name = "massive-explosion" - -- } - -- } - -- } - -- end - entity = makeDrone(unit) - end - - result[#result+1] = entity.name - - data:extend({entity}) - end - - unitSet[#unitSet+1] = result - end - - return unitSet -end - -local function buildEntities(entityTemplates) - local unitSet = {} - - for tier=1, 10 do - local effectiveLevel = TIER_UPGRADE_SET_10[tier] - - local entityTemplate = entityTemplates[effectiveLevel] - - for ei=1,#entityTemplate do - local template = entityTemplate[ei] - - local probability = deepcopy(propTables10[tier]) - - for z=1,#probability do - probability[z][2] = probability[z][2] * template[2] - end - unitSet[#unitSet+1] = {template[1] .. "-t" .. tier .. "-rampant", probability} - end - end - - return unitSet -end - -function swarmUtils.buildEntitySpawner(template) - local variations = settings.startup["rampant--newEnemyVariations"].value - - for tier=1, 10 do - local effectiveLevel = TIER_UPGRADE_SET_10[tier] - - for i=1,variations do - local unitSpawner = deepcopy(template) - unitSpawner.name = unitSpawner.name .. "-v" .. i .. "-t" .. tier - unitSpawner.tier = tier - unitSpawner.effectiveLevel = effectiveLevel - unitSpawner.variation = i - generateApperance(unitSpawner, true) - unitSpawner.death = (unitSpawner.deathGenerator and unitSpawner.deathGenerator(unitSpawner)) or nil - fillEntityTemplate(unitSpawner) - - if unitSpawner.autoplace then - unitSpawner.autoplace = unitSpawner.autoplace[effectiveLevel] - end - - data:extend({ - makeUnitSpawner(unitSpawner) - }) - end - end -end - -function swarmUtils.buildUnitSpawner(template) - local variations = settings.startup["rampant--newEnemyVariations"].value - - for tier=1, 10 do - local effectiveLevel = TIER_UPGRADE_SET_10[tier] - - for i=1,variations do - local unitSpawner = deepcopy(template) - unitSpawner.name = unitSpawner.name .. "-v" .. i .. "-t" .. tier - unitSpawner.tier = tier - unitSpawner.effectiveLevel = effectiveLevel - unitSpawner.variation = i - local unitTable = unitSetToProbabilityTable(template.unitSet) - unitSpawner.unitSet = unitTable - generateApperance(unitSpawner) - unitSpawner.death = (unitSpawner.deathGenerator and unitSpawner.deathGenerator(unitSpawner)) or nil - fillEntityTemplate(unitSpawner) - - if unitSpawner.autoplace then - unitSpawner.autoplace = unitSpawner.autoplace[effectiveLevel] - end - - data:extend({ - makeUnitSpawner(unitSpawner) - }) - end - end -end - -function swarmUtils.buildWorm(template) - local variations = settings.startup["rampant--newEnemyVariations"].value - - for tier=1, 10 do - local effectiveLevel = TIER_UPGRADE_SET_10[tier] - for i=1,variations do - local worm = deepcopy(template) - worm.name = worm.name .. "-v" .. i .. "-t" .. tier - worm.tier = tier - worm.effectiveLevel = effectiveLevel - worm.variation = i - generateApperance(worm) - worm.death = (worm.deathGenerator and worm.deathGenerator(worm)) or nil - fillEntityTemplate(worm) - - worm.standupSounds = wormStandupSounds[effectiveLevel] - worm.breathSounds = wormBreathSounds[effectiveLevel] - worm.dyingSounds = wormDyingSounds[effectiveLevel] - worm.roarSounds = wormRoarSounds[effectiveLevel] - worm.altRoarSounds = wormAltRoarSounds[effectiveLevel] - worm.foldSounds = wormFoldSounds[effectiveLevel] - - worm.attack = worm.attackGenerator(worm) - - if worm.autoplace then - worm.attributes["autoplace"] = worm.autoplace[effectiveLevel] - end - data:extend({ - makeWorm(worm) - }) - end - end -end - -local function makeLootTables(template) - local makeLootTable - if (template.type == "biter") or (template.type == "spitter") then - makeLootTable = makeUnitAlienLootTable - elseif (template.type == "worm") then - makeLootTable = makeWormAlienLootTable - elseif (template.type == "biter-spawner") or (template.type == "spitter-spawner") then - makeLootTable = makeSpawnerAlienLootTable - elseif (template.type == "hive") then - makeLootTable = makeSpawnerAlienLootTable - else - return nil - end - - local newDrops = {} - for i=1,#template.drops do - local attribute = template.drops[i] - if (attribute == "greenArtifact") then - newDrops[#newDrops+1] = makeLootTable("green") - elseif (attribute == "yellowArtifact") then - newDrops[#newDrops+1] = makeLootTable("yellow") - elseif (attribute == "blueArtifact") then - newDrops[#newDrops+1] = makeLootTable("blue") - elseif (attribute == "orangeArtifact") then - newDrops[#newDrops+1] = makeLootTable("orange") - elseif (attribute == "redArtifact") then - newDrops[#newDrops+1] = makeLootTable("red") - elseif (attribute == "purpleArtifact") then - newDrops[#newDrops+1] = makeLootTable("purple") - elseif (attribute == "nilArtifact") then - newDrops[#newDrops+1] = makeLootTable(nil) - end - end - - return newDrops -end - -local function buildAttack(faction, template) - for i=1,#template.attackAttributes do - local attack = template.attackAttributes[i] - if (attack == "melee") then - template.attackGenerator = createMeleeAttack - elseif (attack == "acidPool") then - template.addon[#template.addon+1] = acidPuddleAttributeNumeric - template.meleePuddleGenerator = function (attributes) - attributes.stickerDamagePerTickType = "acid" - return { - type="create-fire", - entity_name = makeAcidSplashFire(attributes, attributes.stickerName or makeSticker(attributes)), - check_buildability = true, - initial_ground_flame_count = 2, - show_in_tooltip = true - } - end - elseif (attack == "spit") then - template.attackType = "projectile" - -- template.attackDirectionOnly = true - - template.attackGenerator = function (attack) - return createRangedAttack(attack, - createAttackBall(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "spitFire") then - template.attackType = "projectile" - -- template.attackDirectionOnly = true - template.addon[#template.addon+1] = streamAttackNumeric - - template.attackGenerator = function (attack) - return createRangedAttack(attack, - createSpitFire(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "touch") then - template.attackType = "projectile" - -- template.attackDirectionOnly = true - template.range = { 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3, 0.3, 0.3, 0.4 } - - template.attackGenerator = function (attack) - return createRangedAttack(attack, - createAttackBall(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "drainCrystal") then - template.range = { 6, 6, 7, 7, 8, 8, 9, 9, 10, 10 } - template.addon[#template.addon+1] = liteClusterAttackNumeric - template.attackPointEffects = function(attributes) - return - { - { - type = "script", - effect_id = "rampant-drain-trigger" - }, - { - type = "damage", - damage = { type="laser", amount = attributes.damage } - }, - { - type="nested-result", - action = { - { - type = "cluster", - cluster_count = attributes.clusters, - distance = attributes.clusterDistance, - distance_deviation = 1, - action_delivery = - { - type = "projectile", - projectile = makeLaser(attributes), - duration = 20, - direction_deviation = 0.6, - starting_speed = attributes.startingSpeed, - starting_speed_deviation = 0.3 - }, - repeat_count = 2 - } - } - } - } - end - elseif (attack == "physical") then - template.explosionTiers = explosionTiers - template.scorchmarkTiers = scorchmarkTiers - template.damageType = "physical" - template.fireDamagePerTickType = "physical" - template.stickerDamagePerTickType = "physical" - template.attackPointEffects = function (attributes) - return { - { - type= "create-entity", - entity_name = attributes.attackScorchmark - }, - { - type= "create-entity", - entity_name = attributes.attackExplosion - } - } - end - elseif (attack == "acid") then - template.damageType = "acid" - template.fireDamagePerTickType = "acid" - template.stickerDamagePerTickType = "acid" - elseif (attack == "laser") then - template.damageType = "laser" - template.fireDamagePerTickType = "laser" - template.stickerDamagePerTickType = "laser" - elseif (attack == "electric") then - template.damageType = "electric" - template.fireDamagePerTickType = "electric" - template.stickerDamagePerTickType = "electric" - elseif (attack == "poison") then - template.damageType = "poison" - template.fireDamagePerTickType = "poison" - template.stickerDamagePerTickType = "poison" - template.attackPointEffects = function(attributes) - return - { - { - type="create-entity", - entity_name = "poison-cloud-v" .. attributes.effectiveLevel .. "-cloud-rampant" - } - } - end - elseif (attack == "stream") then - template.addon[#template.addon+1] = streamAttackNumeric - template.attackGenerator = function (attack) - return createStreamAttack(attack, - createAttackFlame(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "scatterBeam") then - template.addon[#template.addon+1] = beamAttackNumeric - template.attackGenerator = function (attack) - return createElectricAttack(attack, - makeBeam(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "beam") then - template.addon[#template.addon+1] = beamAttackNumeric - template.attackGenerator = function (attack) - return createBeamAttack(attack, - makeBeam(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "cluster") then - template.addon[#template.addon+1] = clusterAttackNumeric - template.attackBubble = makeBubble(template) - template.attackPointEffects = function(attributes) - return - { - { - type="nested-result", - action = { - { - type = "cluster", - cluster_count = attributes.clusters, - distance = attributes.clusterDistance, - distance_deviation = 3, - action_delivery = - { - type = "projectile", - projectile = makeLaser(attributes), - duration = 20, - direction_deviation = 0.6, - starting_speed = attributes.startingSpeed, - starting_speed_deviation = 0.3 - }, - repeat_count = 2 - } - } - } - } - end - elseif (attack == "slow") then - template.force = "not-same" - template.stickerAnimation = { - filename = "__base__/graphics/entity/slowdown-sticker/slowdown-sticker.png", - priority = "extra-high", - line_length = 5, - width = 22, - height = 24, - frame_count = 50, - animation_speed = 0.5, - tint = {r = 0.3500, g = 0.663, b = 0.000, a = 0.694}, -- #4a900b1 - shift = util.by_pixel (2,-1), - hr_version = - { - filename = "__base__/graphics/entity/slowdown-sticker/hr-slowdown-sticker.png", - line_length = 5, - width = 42, - height = 48, - frame_count = 50, - animation_speed = 0.5, - tint = {r = 0.3500, g = 0.663, b = 0.000, a = 0.694}, -- #ffa900b1 - shift = util.by_pixel(2, -0.5), - scale = 0.5 - } - } - template.areaEffects = function (attributes) - return { - { - type = "damage", - damage = { amount = attributes.damage, type = "acid" } - }, - { - type = "create-sticker", - sticker = makeSticker(attributes) - } - } - end - elseif (attack == "nuclear") then - template.addon[#template.addon+1] = nuclearAttackNumeric - template.explosionTiers = explosionTiers - template.scorchmarkTiers = scorchmarkTiers - template.nuclear = true - template.attackGenerator = function (attack) - return createSuicideAttack(attack, - makeAtomicBlast(attack), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "bomb") then - template.addon[#template.addon+1] = bombAttackNumeric - template.explosionTiers = explosionTiers - template.scorchmarkTiers = scorchmarkTiers - template.attackGenerator = function (attack) - return createSuicideAttack(attack, - nil, - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "capsule") then - template.attackType = "projectile" - -- template.attackDirectionOnly = true - - template.attackGenerator = function (attack) - return createProjectileAttack(attack, - createCapsuleProjectile(attack, - attack.entityGenerator(attack)), - (template.attackAnimation and template.attackAnimation(attack.scale, - attack.tint, - attack.tint2)) or nil) - end - elseif (attack == "noFriendlyFire") then - template["force"] = "not-same" - elseif (attack == "noAcidPuddle") then - template.noAcidPuddle = true - elseif (type(attack) == "table") then - if (attack[1] == "drone") then - template.entityGenerator = function (attributes) - return template.faction .. "-" .. attack[2] .. "-v" .. - attributes.variation .. "-t" .. attributes.effectiveLevel .. "-drone-rampant" - end - end - else - error ("unknown attack " .. attack) - end - end -end - -local function checkForAddons(template) - for i=1,#template.attributes do - local attribute = template.attributes[i] - if (type(attribute) == "table") then - if (attribute[1] == "clusterDeath") then - template.addon[#template.addon+1] = clusterAttackNumeric - end - end - end -end - -local function buildUnitTemplate(faction, unit) - local template = deepcopy(unit) - - template.name = faction.type .. "-" .. unit.name - template.unit_name = unit.name - template.isRampant = true - template.tint = faction.tint - template.tint2 = faction.tint2 - template.tint3 = faction.tint3 - - template.faction = faction.type - - template.addon = {} - template.explosion = faction.type - - template.resistances = {} - - if (template.type == "biter") then - template.attackAnimation = biterattackanimation - elseif (template.type == "spitter") then - template.attackAnimation = spitterattackanimation - end - - checkForAddons(template) - - buildAttack(faction, template) - - if template.drops then - template.drops = makeLootTables(template) - end - - if not template.attackGenerator then - error("missing attack generator " .. faction.type .. " " .. template.name) - end - - return template -end - -local function buildTurretTemplate(faction, turret) - local template = deepcopy(turret) - - template.name = faction.type .. "-" .. turret.name - template.unit_name = turret.name - template.isRampant = true - template.tint = faction.tint - template.tint2 = faction.tint2 - template.tint3 = faction.tint3 - - template.faction = faction.type - - template.evolutionFunction = function (tier) - if (tier == 0) then - return 0 - else - return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) - end - end - - template.explosion = faction.type - - template.addon = {} - template.resistances = {} - - buildAttack(faction, template) - - checkForAddons(template) - - if template.drops then - template.drops = makeLootTables(template) - end - - if not template.attackGenerator then - error("missing attack generator " .. faction.type .. " " .. template.name) - end - - return template -end - -local function buildUnitSpawnerTemplate(faction, incomingTemplate, unitSets) - local template = deepcopy(incomingTemplate) - - template.name = faction.type .. "-" .. template.name - template.unit_name = incomingTemplate.name - template.isRampant = true - template.tint = faction.tint - template.tint2 = faction.tint2 - template.tint3 = faction.tint3 - - template.faction = faction.type - - template.evolutionFunction = function (tier) - if (tier == 0) then - return 0 - else - return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) - end - end - - template.explosion = faction.type - template.addon = {} - - checkForAddons(template) - - template.resistances = {} - - local unitSet = {} - - -- local unitVariations = settings.startup["rampant--newEnemyVariations"].value - - for t=1,10 do - for i=1,#template.buildSets do - local buildSet = template.buildSets[i] - if (buildSet[2] <= t) and (t <= buildSet[3]) then - local activeUnitSet = unitSets[buildSet[1]][t] - local unitSetTier = unitSet[t] - if unitSetTier then - for b=1,#activeUnitSet do - unitSetTier[#unitSetTier+1] = activeUnitSet[b] - end - else - unitSet[t] = deepcopy(activeUnitSet) - end - end - end - -- while (#unitSet[t] > unitVariations) do - -- table.remove(unitSet, math.random(#unitSet[t])) - -- end - end - - template.unitSet = unitSet - - if template.drops then - template.drops = makeLootTables(template) - end - - return template -end - -local function buildHiveTemplate(faction, incomingTemplate) - local template = deepcopy(incomingTemplate) - - template.name = faction.type .. "-" .. template.name - template.unit_name = incomingTemplate.name - template.isRampant = true - template.tint = faction.tint - template.tint2 = faction.tint2 - template.tint3 = faction.tint3 - - template.faction = faction.type - - template.evolutionFunction = function (tier) - if (tier == 0) then - return 0 - else - return math.min(faction.evo + ((tier - 2) * 0.10), 0.92) - end - end - - template.addon = {} - template.explosion = faction.type - - checkForAddons(template) - - template.resistances = {} - - local unitSet = {} - - for t=1,10 do - local unitSetTier = unitSet[t] - for i=1,#template.buildSets do - local buildSet = template.buildSets[i] - if (buildSet[2] <= t) and (t <= buildSet[3]) then - if not unitSetTier then - unitSetTier = {} - unitSet[t] = unitSetTier - end - - unitSetTier[#unitSetTier+1] = { - "entity-proxy-" .. buildSet[1], - mathUtils.linearInterpolation((t-1)/9, - buildSet[4], - buildSet[5]) - } - end - end - local total = 0 - for i=1,#unitSetTier do - total = total + unitSetTier[i][2] - end - for i=1,#unitSetTier do - unitSetTier[i][2] = unitSetTier[i][2] / total - end - -- while (#unitSet[t] > unitVariations) do - -- table.remove(unitSet, math.random(#unitSet[t])) - -- end - end - - template.unitSet = buildEntities(unitSet) - - if template.drops then - template.drops = makeLootTables(template) - end - - return template -end - -local function generateSpawnerProxyTemplate(name, health, result_units) - return { - type = "unit-spawner", - name = name, - icon = "__base__/graphics/icons/biter-spawner.png", - icon_size = 64, - icon_mipmaps = 4, - flags = {"placeable-player", "placeable-enemy", "not-repairable"}, - max_health = health, - order="b-b-g", - subgroup="enemies", - loot = nil, - resistances = nil, - working_sound = nil, - dying_sound = nil, - damaged_trigger_effect = nil, - healing_per_tick = -1, - -- collision_box = {{-3,-3},{3,3}}, - -- selection_box = {{-3,-3},{3,3}}, - collision_box = nil, - selection_box = nil, - -- in ticks per 1 pu - pollution_absorption_absolute = 10, - pollution_absorption_proportional = 0.005, - map_generator_bounding_box = nil, - corpse = nil, - dying_explosion = nil, - dying_trigger_effect = nil, - max_count_of_owned_units = 0, - max_friends_around_to_spawn = 0, - enemy_map_color = {r=0,g=0,b=0,a=0}, - -- enemy_map_color = {r=0,g=1,b=1,a=1}, - animations = { filename = "__core__/graphics/empty.png", size = 1 }, - -- animations ={ - -- spawner_idle_animation(0, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), - -- spawner_idle_animation(1, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), - -- spawner_idle_animation(2, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}), - -- spawner_idle_animation(3, {r=1,b=1,g=1,a=1}, 1, {r=1,b=1,g=1,a=1}) - -- }, - integration = nil, - result_units = result_units, - -- With zero evolution the spawn rate is 6 seconds, with max evolution it is 2.5 seconds - spawning_cooldown = {360, 150}, - spawning_radius = 10, - spawning_spacing = 3, - max_spawn_shift = 0, - max_richness_for_spawn_shift = 100, - build_base_evolution_requirement = 0.0, - call_for_help_radius = 50 - } -end - -function swarmUtils.generateSpawnerProxy(result_units) - - data:extend({ - generateSpawnerProxyTemplate("spawner-proxy-1-rampant", 1 * 60 * 60, result_units), - generateSpawnerProxyTemplate("spawner-proxy-2-rampant", 2 * 60 * 60, result_units), - generateSpawnerProxyTemplate("spawner-proxy-3-rampant", 3 * 60 * 60, result_units) - }) -end - -function swarmUtils.processFactions() - for i=1,#constants.FACTION_SET do - local faction = constants.FACTION_SET[i] - - if (faction.type == "energy-thief") then - energyThiefFaction.addFactionAddon() - elseif (faction.type == "poison") then - data:extend({ - { - type = "damage-type", - name = "healing" - } - }) - poisonFaction.addFactionAddon() - end - - makeBloodFountains({ - name = faction.type, - tint2 = faction.tint2 - }) - - local unitSets = {} - - for iu=1,#faction.units do - local unit = faction.units[iu] - local template = buildUnitTemplate(faction, unit) - - unitSets[unit.name] = swarmUtils.buildUnits(template) - end - - for iu=1,#faction.buildings do - local building = faction.buildings[iu] - - if (building.type == "spitter-spawner") then - local template = buildUnitSpawnerTemplate(faction, building, unitSets) - - swarmUtils.buildUnitSpawner(template) - elseif (building.type == "biter-spawner") then - local template = buildUnitSpawnerTemplate(faction, building, unitSets) - - swarmUtils.buildUnitSpawner(template) - elseif (building.type == "turret") then - local template = buildTurretTemplate(faction, building) - - swarmUtils.buildWorm(template) - elseif (building.type == "hive") then - local template = buildHiveTemplate(faction, building) - - swarmUtils.buildEntitySpawner(template) - elseif (building.type == "trap") then - - elseif (building.type == "utility") then - - end - - - end - end -end - -return swarmUtils diff --git a/Rampant_3.1.2/prototypes/UnitClasses.lua b/Rampant_3.1.2/prototypes/UnitClasses.lua deleted file mode 100644 index a47a53d7..00000000 --- a/Rampant_3.1.2/prototypes/UnitClasses.lua +++ /dev/null @@ -1,333 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - --- module code - -function generateMigration() - - for t = 1, 10 do - for v = 1, 20 do - print("[\"neutral-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"neutral-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"neutral-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"neutral-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"acid-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"acid-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"acid-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"acid-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"physical-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"physical-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"electric-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"electric-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"suicide-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"suicide-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"nuclear-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"nuclear-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"fire-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"fire-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"fire-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"fire-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"interno-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"interno-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"troll-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"troll-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"troll-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"troll-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"laser-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"laser-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"laser-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"laser-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"fast-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"fast-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - print("[\"fast-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"fast-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"wasp-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"wasp-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"spawner-spitter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"spawner-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"energy-thief-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"energy-thief-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - - print("[\"poison-biter-nest-v" .. v .. "-t" .. t .. "-rampant\", \"poison-biter-spawner-v" .. v .. "-t" .. t .. "-rampant\"],") - end - end -end - --- local FACTION_TYPES = { --- "neutral", --- "acid", --- "physical", --- "electric", --- "suicide", --- "nuclear", --- "fire", --- "inferno", --- "troll", --- "fast", --- "laser", --- "wasp", --- "spawner", --- "energy-thief", --- "poison" --- } - -function generateLocal() - -- local names = {"Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega"} - local names = {"Common", "Acidic", "Brutal", "Electric", "Suicide", "Nuclear", "Fire", "Inferno", "Regenerative", "Fast", "Laser", "Wasp", "Spawner", "Sapper", "Poison", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega"} - local sizes = {"Larva", "Pupae", "Worker", "Grunt", "Soldier", "Elite", "Champion", "Overlord", "Titan", "Leviathan"} - - - local HIVE_BUILDINGS_TYPES = { - "trap", - "turret", - "utility", - "spitter-spawner", - "biter-spawner", - "hive" - } - - local HIVE_BUILDINGS_NAMES = { - "Traps", - "Turrets", - "Utilities", - "Spitter Spawners", - "Biter Spawners", - "Hives" - } - - local HIVE_BUILDING_NAME_MAP = { - ["trap"] = "trap", - ["turret"] = "turret", - ["utility"] = "utility", - ["spitter-spawner"] = "spitter spawner", - ["biter-spawner"] = "biter spawner", - ["hive"] = "hive" - } - - local name = names[1] - - for t = 1, 10 do - for i=1,#HIVE_BUILDINGS_TYPES do - print("entity-proxy-" .. HIVE_BUILDINGS_TYPES[i] .. "-t" .. t .. "-rampant=" .. HIVE_BUILDINGS_NAMES[i] .. ": " .. "t" .. t .. " " .. sizes[t] .. " class") - end - - local size = sizes[t] - for v = 1, 20 do - print("neutral-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("neutral-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("neutral-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("neutral-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("neutral-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("neutral-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("neutral-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("neutral-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[2] - - for t = 1, 10 do - local size = sizes[t] - - for v = 1, 20 do - print("acid-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("acid-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("acid-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("acid-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("acid-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("acid-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("acid-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("acid-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("acid-biter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[3] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("physical-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("physical-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("physical-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("physical-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[4] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("electric-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("electric-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("electric-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("electric-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[5] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("suicide-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("suicide-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("suicide-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("suicide-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("suicide-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[6] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("nuclear-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("nuclear-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("nuclear-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("nuclear-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("nuclear-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[7] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("fire-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("fire-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("fire-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("fire-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("fire-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("fire-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("fire-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("fire-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[8] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("inferno-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("inferno-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("inferno-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("inferno-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[9] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("troll-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("troll-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("troll-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("troll-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("troll-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("troll-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[10] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("fast-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("fast-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("fast-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("fast-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("fast-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("fast-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("fast-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("fast-worm-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[11] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("laser-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("laser-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("laser-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("laser-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("laser-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("laser-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[12] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("wasp-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("wasp-wasp-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. ": " .. "t" .. t .. " " .. size .. " class") - print("wasp-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("wasp-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("wasp-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("wasp-worm-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. ": " .. "t" .. t .. " " .. size .. " class") - print("wasp-wasp-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("wasp-worm-wasp-v" .. v .. "-t" .. t .. "-drone-rampant=Wasp: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[13] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("spawner-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("spawner-drone-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " eggs: " .. "t" .. t .. " " .. size .. " class") - print("spawner-spitter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter: " .. "t" .. t .. " " .. size .. " class") - print("spawner-worm-egg-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " eggs: " .. "t" .. t .. " " .. size .. " class") - print("spawner-worm-egg-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("spawner-spawn-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("spawner-spitter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " spitter nest: " .. "t" .. t .. " " .. size .. " class") - print("spawner-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - print("spawner-spitter-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("spawner-egg-v" .. v .. "-t" .. t .. "-acid-fire-rampant=Acid pool: " .. "t" .. t .. " " .. size .. " class") - print("spawner-egg-v" .. v .. "-t" .. t .. "-drone-rampant=" .. name .. " egg: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[14] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("energy-thief-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("energy-thief-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("energy-thief-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("energy-thief-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - name = names[15] - - for t = 1, 10 do - local size = sizes[t] - for v = 1, 20 do - print("poison-hive-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " hive: " .. "t" .. t .. " " .. size .. " class") - print("poison-biter-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter: " .. "t" .. t .. " " .. size .. " class") - print("poison-biter-spawner-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " biter nest: " .. "t" .. t .. " " .. size .. " class") - print("poison-worm-v" .. v .. "-t" .. t .. "-rampant=" .. name .. " worm: " .. "t" .. t .. " " .. size .. " class") - end - end - - -end diff --git a/Rampant_3.1.2/prototypes/buildings/ChunkScanner.lua b/Rampant_3.1.2/prototypes/buildings/ChunkScanner.lua deleted file mode 100644 index 7e8c96f3..00000000 --- a/Rampant_3.1.2/prototypes/buildings/ChunkScanner.lua +++ /dev/null @@ -1,220 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local biterUtils = require("prototypes/utils/BiterUtils") -local constants = require("libs/Constants") -local smokeUtils = require("prototypes/utils/SmokeUtils") - -data:extend({ - biterUtils.makeBiter({ - name = "chunk-scanner-squad", - scale=15, - movement=1, - effectiveLevel=1, - resistances = {}, - hitSprayName = "blood-fountain-hit-spray", - attack = biterUtils.createMeleeAttack({ - radius=1, - damage=1, - scale=15, - effectiveLevel=1 - }) - }), - - biterUtils.makeBiter({ - name = "chunk-scanner-squad-movement", - scale=2.5, - movement=1, - effectiveLevel=1, - resistances = {}, - hitSprayName = "blood-fountain-hit-spray", - attack = biterUtils.createMeleeAttack({ - radius=1, - damage=1, - scale=15, - effectiveLevel=1 - }) - }) -}) - -local function generateCollisionBox(scale, entityType) - if entityType == "turret" then - return { - {-1.1 * scale, -1.0 * scale}, - {1.1 * scale, 1.0 * scale} - } - elseif (entityType == "biter-spawner") or (entityType == "spitter-spawner") then - return { - {-3 * scale, -2 * scale}, - {2 * scale, 2 * scale} - } - elseif entityType == "hive" then - return { - {-3 * scale, -2 * scale}, - {2 * scale, 2 * scale} - } - end -end - -local scales = { - -- ["trap"] = {}, - -- ["utility"] = {}, - ["spitter-spawner"] = { - [1] = 0.70, [2] = 0.83, [3] = 0.96, [4] = 1.09, [5] = 1.22, - [6] = 1.35, [7] = 1.48, [8] = 1.61, [9] = 1.74, [10] = 1.87 - }, - ["biter-spawner"] = { - [1] = 0.83, [2] = 0.96, [3] = 1.09, [4] = 1.22, [5] = 1.35, - [6] = 1.48, [7] = 1.61, [8] = 1.74, [9] = 1.87, [10] = 2.0 - }, - ["hive"] = { - [1] = 1.35, [2] = 1.48, [3] = 1.61, [4] = 1.74, [5] = 1.87, - [6] = 2.0, [7] = 2.13, [8] = 2.26, [9] = 2.39, [10] = 2.52 - }, - ["turret"] = { - [1] = 0.635, [2] = 0.765, [3] = 0.895, [4] = 1.025, [5] = 1.155, - [6] = 1.285, [7] = 1.415, [8] = 1.545, [9] = 1.675, [10] = 1.805 - } -} - -local subTypes = constants.HIVE_BUILDINGS_TYPES - - -for si=1,#subTypes do - local st = subTypes[si] - if scales[st] then - for t=1,10 do - -- local scale = scales[st][t] - local scale = scales["biter-spawner"][t] - - local eggPicture - if (st == "turret") then - eggPicture = { - filename = "__base__/graphics/entity/spawner/hr-spawner-idle-integration.png", - -- priority = "very-low", - -- flags = {"low-object"}, - draw_as_shadow = true, - scale = 0.25, - width = 522, - height = 380 - } - elseif (st == "biter-spawner") or (st == "spitter-spawner") then - eggPicture = { - filename = "__base__/graphics/entity/spawner/hr-spawner-idle-integration.png", - -- priority = "very-low", - -- flags = {"low-object"}, - draw_as_shadow = true, - scale = 0.5, - width = 522, - height = 380 - } - elseif (st == "hive") then - eggPicture = { - filename = "__base__/graphics/entity/spawner/hr-spawner-idle-integration.png", - -- priority = "very-low", - -- flags = {"low-object"}, - draw_as_shadow = true, - scale = 0.75, - width = 522, - height = 380 - } - -- else - -- eggPicture = { - -- filename = "__core__/graphics/empty.png", - -- priority = "extra-high", - -- width = 1, - -- height = 1 - -- } - end - - data:extend( - { - { - type = "simple-entity-with-force", - name = "entity-proxy-" .. st .. "-t" .. t .. "-rampant", - localised_name = biterUtils.getLocalisedName({ - faction="entity-proxy", - unit_name=st, - tier=t, - isRampant=true - }), - icon = "__base__/graphics/icons/steel-chest.png", - icon_size = 32, - flags = {}, - build_base_evolution_requirement = 0.08 * (t-1), - collision_mask = {"player-layer", "object-layer", "water-tile", "train-layer"}, - minable = nil, - max_health = 300 * t, - corpse = nil, - collision_box = generateCollisionBox(scale, "biter-spawner"), - selection_box = generateCollisionBox(scale, "biter-spawner"), - - picture = eggPicture, - - created_effect = { - { - type = "direct", - action_delivery = { - type = "instant", - source_effects = { - type = "script", - effect_id = "hive-spawned--rampant" - } - } - } - } - } - } - ) - end - end -end - - -smokeUtils.makeNewCloud( - { - name = "build-clear", - wind = false, - scale = 9, - duration = 540, - cooldown = 10, - tint = { r=0.7, g=0.2, b=0.7 } - }, - { - type = "area", - radius = 17, - force = "not-same", - action_delivery = - { - type = "instant", - target_effects = - { - { - type = "damage", - damage = { amount = 1.1, type = "poison"} - }, - { - type = "damage", - damage = { amount = 1.1, type = "acid"} - }, - { - type = "damage", - damage = { amount = 1.1, type = "fire"} - } - } - } - } -) diff --git a/Rampant_3.1.2/prototypes/buildings/UpdatesVanilla.lua b/Rampant_3.1.2/prototypes/buildings/UpdatesVanilla.lua deleted file mode 100644 index c7af14d1..00000000 --- a/Rampant_3.1.2/prototypes/buildings/UpdatesVanilla.lua +++ /dev/null @@ -1,56 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local vanillaUpdates = {} - -function vanillaUpdates.addWallAcidResistance() - local walls = data.raw["wall"] - - for _,wall in pairs(walls) do - local foundAcid = false - for _,resistance in pairs(wall.resistances) do - if resistance.type == "acid" then - if resistance.percent < 60 then - resistance.percent = 60 - end - foundAcid = true - break - end - end - if not foundAcid then - wall.resistances[#wall.resistances+1] = {type="acid",percent=60} - end - end - - walls = data.raw["gate"] - for _,wall in pairs(walls) do - local foundAcid = false - for _,resistance in pairs(wall.resistances) do - if resistance.type == "acid" then - if resistance.percent < 60 then - resistance.percent = 60 - end - foundAcid = true - break - end - end - if not foundAcid then - wall.resistances[#wall.resistances+1] = {type="acid",percent=60} - end - end -end - -return vanillaUpdates diff --git a/Rampant_3.1.2/prototypes/buildings/tunnel.lua b/Rampant_3.1.2/prototypes/buildings/tunnel.lua deleted file mode 100644 index f692a41b..00000000 --- a/Rampant_3.1.2/prototypes/buildings/tunnel.lua +++ /dev/null @@ -1,41 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -data:extend({ -{ - type = "simple-entity", - name = "tunnel-entrance-rampant", - flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, - icon = "__base__/graphics/icons/small-scorchmark.png", - icon_size = 32, - subgroup = "grass", - order = "b[decorative]-k[tunnel-entrance]-a[big]", - collision_box = {{-1.3, -1.3}, {1.3, 1.3}}, - selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, - render_layer = "remnants", - destructible = "false", - max_health = 1, - pictures = - { - { - filename = "__Rampant__/graphics/entities/tunnel/tunnelEntrance.png", - width = 142, - height = 104, - shift = {0, 0} - } - } - } -}) diff --git a/Rampant_3.1.2/prototypes/tile/fillableDirt.lua b/Rampant_3.1.2/prototypes/tile/fillableDirt.lua deleted file mode 100644 index 7c815e50..00000000 --- a/Rampant_3.1.2/prototypes/tile/fillableDirt.lua +++ /dev/null @@ -1,67 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -data:extend({ - { - type = "tile", - name = "fillableDirt", - needs_correction = false, - collision_mask = - { - "water-tile", - }, - layer = 40, - variants = - { - main = - { - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt1.png", - count = 8, - size = 1 - } - , - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt2.png", - count = 8, - size = 2 - }, - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt4.png", - count = 6, - size = 4 - } - }, - inner_corner = - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt-inner-corner.png", - count = 6 - }, - outer_corner = - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt-outer-corner.png", - count = 6 - }, - side = - { - picture = "__Rampant__/graphics/tiles/fillableDirt/dirt-side.png", - count = 8 - } - }, - map_color={r=0.4196, g=0.3294, b=0.2196}, - ageing=0 - } -}) diff --git a/Rampant_3.1.2/prototypes/utils/AttackFlame.lua b/Rampant_3.1.2/prototypes/utils/AttackFlame.lua deleted file mode 100644 index 41ba12f9..00000000 --- a/Rampant_3.1.2/prototypes/utils/AttackFlame.lua +++ /dev/null @@ -1,134 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local attackFlame = {} - --- imported - -local streamUtils = require("StreamUtils") -local fireUtils = require("FireUtils") -local stickerUtils = require("StickerUtils") - --- constants - -local DISALLOW_FRIENDLY_FIRE = settings.startup["rampant--disallowFriendlyFire"].value - --- imported functions - -local makeStream = streamUtils.makeStream -local makeFire = fireUtils.makeFire -local makeSticker = stickerUtils.makeSticker -local makeSpreadEffect = fireUtils.makeSpreadEffect - --- module code - -function attackFlame.createAttackFlame(attributes) - - local spawnEntityName = makeSpreadEffect({ - name = attributes.name, - tint2 = attributes.tint2, - fireDamagePerTick = attributes.fireDamagePerTick, - fireDamagePerTickType = attributes.fireDamagePerTickType, - }) - local stickerName = makeSticker({ - name = attributes.name, - spawnEntityName = spawnEntityName, - stickerDuration = attributes.stickerDuration, - stickerDamagePerTick = attributes.stickerDamagePerTick, - stickerDamagePerTickType = attributes.stickerDamagePerTickType, - stickerMovementModifier = attributes.stickerMovementModifier, - tint2 = attributes.tint2, - fireSpreadRadius = attributes.fireSpreadRadius - }) - local fireName = makeFire({ - name = attributes.name, - tint2 = attributes.tint2 or {r=0, g=0.9, b=0, a=0.5}, - spawnEntityName = spawnEntityName, - fireDamagePerTick = attributes.fireDamagePerTick, - fireDamagePerTickType = attributes.fireDamagePerTickType, - damageMaxMultipler = attributes.damageMaxMultipler, - multiplerIncrease = attributes.multiplerIncrease, - multiplerDecrease = attributes.multiplerDecrease, - stickerName = stickerName - }) - - return makeStream({ - name = attributes.name, - tint2 = attributes.tint2 or {r=0, g=1, b=1, a=0.5}, - particleTimeout = attributes.particleTimeout, - scale = attributes.scale, - actions = { - { - type = "area", - radius = attributes.radius or 2.5, - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, - action_delivery = - { - type = "instant", - target_effects = - { - { - type = "create-sticker", - sticker = stickerName, - check_buildability = true - }, - { - type = "create-entity", - entity_name = "water-splash", - tile_collision_mask = { "ground-tile" } - }, - { - type = "damage", - damage = { amount = attributes.damage, type = attributes.damageType or "fire" } - } - } - } - }, - { - type = "cluster", - cluster_count = 2, - distance = 2 + (0.1 * attributes.effectiveLevel), - distance_deviation = 1.5, - action_delivery = { - type = "instant", - target_effects = { - { - type="create-fire", - entity_name = fireName, - check_buildability = true, - initial_ground_flame_count = 2, - show_in_tooltip = true - } - } - } - }, - { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type= "create-fire", - entity_name = fireName, - check_buildability = true, - show_in_tooltip = true - } - } - } - } - }) -end - -return attackFlame diff --git a/Rampant_3.1.2/prototypes/utils/BiterUtils.lua b/Rampant_3.1.2/prototypes/utils/BiterUtils.lua deleted file mode 100644 index add4e1ea..00000000 --- a/Rampant_3.1.2/prototypes/utils/BiterUtils.lua +++ /dev/null @@ -1,1375 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local biterUtils = {} - -local sounds = require("__base__.prototypes.entity.sounds") -local particleUtils = require("ParticleUtils") -local unitSpawnerUtils = require("UnitSpawnerUtils") -local unitUtils = require("UnitUtils") -local wormUtils = require("WormUtils") - -local biterdieanimation = unitUtils.biterdieanimation -local biterattackanimation = unitUtils.biterattackanimation -local biterrunanimation = unitUtils.biterrunanimation -local spitter_alternative_attacking_animation_sequence = unitUtils.spitter_alternative_attacking_animation_sequence -local spawner_integration = unitSpawnerUtils.spawner_integration -local spawner_idle_animation = unitSpawnerUtils.spawner_idle_animation -local spawner_die_animation = unitSpawnerUtils.spawner_die_animation -local wormFoldedAnimation = wormUtils.wormFoldedAnimation -local wormPreparingAnimation = wormUtils.wormPreparingAnimation -local wormPreparedAnimation = wormUtils.wormPreparedAnimation -local wormPreparedAlternativeAnimation = wormUtils.wormPreparedAlternativeAnimation -local wormStartAttackAnimation = wormUtils.wormStartAttackAnimation -local wormEndAttackAnimation = wormUtils.wormEndAttackAnimation -local wormDieAnimation = wormUtils.wormDieAnimation -local makeDamagedParticle = particleUtils.makeDamagedParticle -local biter_water_reflection = unitUtils.biter_water_reflection -local spitter_water_reflection = unitUtils.spitter_water_reflection - -local DISALLOW_FRIENDLY_FIRE = settings.startup["rampant--disallowFriendlyFire"].value - -local function makeSpitterCorpse(attributes) - local name = attributes.name .. "-corpse-rampant" - - local corpse = { - type = "corpse", - name = name, - icon = "__base__/graphics/icons/big-biter-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selectable_in_game = false, - selection_box = {{-1, -1}, {1, 1}}, - subgroup="corpses", - order = "c[corpse]-b[spitter]-a[small]", - flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map"}, - } - - corpse.animation = spitterdyinganimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint) - corpse.dying_speed = 0.04 - corpse.time_before_removed = 15 * 60 * 60 - corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } } - corpse.shuffle_directions_at_frame = 4 - corpse.final_render_layer = "lower-object-above-shadow" - - corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration" - corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes - corpse.ground_patch_fade_in_speed = 0.002 - corpse.ground_patch_fade_out_start = 50 * 60 - corpse.ground_patch_fade_out_duration = 20 * 60 - - local a = 1 - local d = 0.9 - corpse.ground_patch = - { - sheet = - { - filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png", - flags = { "low-object" }, - line_length = 4, - variation_count = 4, - frame_count = 1, - width = 84, - height = 68, - shift = util.by_pixel(1, 0), - tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, - scale = attributes.scale * 2, - hr_version = - { - filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png", - flags = { "low-object" }, - line_length = 4, - variation_count = 4, - frame_count = 1, - width = 164, - height = 134, - shift = util.by_pixel(-0.5,-0.5), - tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, - scale = attributes.scale - } - } - } - - data:extend( - { - corpse - }) - return name -end - -local function makeBiterCorpse(attributes) - local name = attributes.name .. "-corpse-rampant" - - local corpse = { - type = "corpse", - name = name, - icon = "__base__/graphics/icons/small-biter-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selection_box = {{-0.8, -0.8}, {0.8, 0.8}}, - selectable_in_game = false, - subgroup="corpses", - order = "c[corpse]-a[biter]-a[small]", - flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"} - } - - corpse.animation = biterdieanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint, attributes.altBiter) - corpse.dying_speed = 0.04 - corpse.time_before_removed = 15 * 60 * 60 - corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } } - corpse.shuffle_directions_at_frame = 7 - corpse.final_render_layer = "lower-object-above-shadow" - - corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration" - corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes - corpse.ground_patch_fade_in_speed = 0.002 - corpse.ground_patch_fade_out_start = 50 * 60 - corpse.ground_patch_fade_out_duration = 20 * 60 - - local a = 1 - local d = 0.9 - corpse.ground_patch = - { - sheet = - { - filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png", - flags = { "low-object" }, - line_length = 4, - variation_count = 4, - frame_count = 1, - width = 84, - height = 68, - shift = util.by_pixel(1, 0), - tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, - scale = attributes.scale * 2, - hr_version = - { - filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png", - flags = { "low-object" }, - line_length = 4, - variation_count = 4, - frame_count = 1, - width = 164, - height = 134, - shift = util.by_pixel(-0.5,-0.5), - tint = attributes.tint2 or attributes.tint or {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a}, - scale = attributes.scale - } - } - } - - data:extend({ - corpse - }) - return name -end - -local function makeUnitSpawnerCorpse(attributes) - local name = attributes.name .. "-corpse-rampant" - data:extend({ - { - type = "corpse", - name = name, - flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, - icon = "__base__/graphics/icons/biter-spawner-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - collision_box = {{-2, -2}, {2, 2}}, - selection_box = {{-2, -2}, {2, 2}}, - selectable_in_game = false, - dying_speed = 0.04, - time_before_removed = 15 * 60 * 60, - subgroup="corpses", - order = "c[corpse]-c[spitter-spawner]", - final_render_layer = "remnants", - animation = - { - spawner_die_animation(0, attributes.tint, attributes.scale, attributes.tint2), - spawner_die_animation(1, attributes.tint, attributes.scale, attributes.tint2), - spawner_die_animation(2, attributes.tint, attributes.scale, attributes.tint2), - spawner_die_animation(3, attributes.tint, attributes.scale, attributes.tint2) - } - } - }) - return name -end - -local function makeWormCorpse(attributes) - local name = attributes.name .. "-corpse-rampant" - data:extend({ - { - type = "corpse", - name = name, - icon = "__base__/graphics/icons/medium-worm-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selection_box = {{-0.8, -0.8}, {0.8, 0.8}}, - selectable_in_game = false, - subgroup="corpses", - order = "c[corpse]-c[worm]-b[medium]", - flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"}, - dying_speed = 0.01, - time_before_removed = 15 * 60 * 60, - final_render_layer = "lower-object-above-shadow", - animation = wormDieAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - ground_patch = - { - sheet = worm_integration(attributes.scale) - } - } - }) - return name -end - -function biterUtils.getLocalisedName(attributes) - if attributes.isRampant then - return { - "", - {"rampant."..attributes.faction}, - {"rampant."..attributes.unit_name}, - {"rampant.t"..attributes.tier} - } - end - - return {attributes.name .. "-rampant"} -end - -function biterUtils.makeBiter(attributes) - local resistances = {} - for k,v in pairs(attributes.resistances) do - v.type = k - resistances[#resistances+1] = v - end - -- print(name .. " " .. biterAttributes.health) - local entity = { - type = "unit", - name = attributes.name .. "-rampant", - localised_name = biterUtils.getLocalisedName(attributes), - icon = "__base__/graphics/icons/small-biter.png", - icon_size = 64, - icon_mipmaps = 4, - flags = attributes.flags or {"placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air"}, - max_health = attributes.health, - order = "b-b-a", - subgroup="enemies", - healing_per_tick = attributes.healing, - damaged_trigger_effect = ((not settings.startup["rampant--removeBloodParticles"].value) and makeDamagedParticle(attributes)) or nil, - water_reflection = biter_water_reflection(attributes.scale), - resistances = resistances, - collision_box = { - {-0.4 * attributes.scale, -0.4 * attributes.scale}, - {0.4 * attributes.scale, 0.4 * attributes.scale} - }, - selection_box = { - {-0.7 * attributes.scale, -1.5 * attributes.scale}, - {0.7 * attributes.scale, 0.3 * attributes.scale} - }, - sticker_box = { - {-0.6 * attributes.scale, -0.8 * attributes.scale}, - {0.6 * attributes.scale, 0} - }, - attack_parameters = attributes.attack, - vision_distance = attributes.vision or 30, - movement_speed = attributes.movement, - loot = attributes.loot, - spawning_time_modifier = attributes.spawningTimeModifer or nil, - distance_per_frame = attributes.distancePerFrame or 0.1, - pollution_to_join_attack = attributes.pollutionToAttack or 200, - distraction_cooldown = attributes.distractionCooldown or 300, - corpse = makeBiterCorpse(attributes), - dying_explosion = attributes.explosion, - dying_trigger_effect = attributes.dyingEffect, - enemy_map_color = ((not settings.startup["rampant--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, - affected_by_tiles = settings.startup["rampant--unitsAffectedByTiles"].value, - dying_sound = attributes.dyingSounds, - working_sound = attributes.workingSounds, - walking_sound = attributes.walkingSounds, - running_sound_animation_positions = {2,}, - run_animation = biterrunanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint, attributes.altBiter) - } - if attributes.collisionMask then - entity.collision_mask = attributes.collisionMask - end - if attributes.appendFlags then - for flag in pairs(attributes.appendFlags) do - entity.flags[#entity.flags+1] = flag - end - end - return entity -end - -function biterUtils.makeSpitter(attributes) - local resistances = {} - for k,v in pairs(attributes.resistances) do - v.type = k - resistances[#resistances+1] = v - end - -- print(name .. " " .. biterAttributes.health) - local entity = { - type = "unit", - name = attributes.name .. "-rampant", - localised_name = biterUtils.getLocalisedName(attributes), - icon = "__base__/graphics/icons/small-spitter.png", - icon_size = 64, - icon_mipmaps = 4, - flags = attributes.flags or {"placeable-player", "placeable-enemy", "placeable-off-grid", "not-repairable", "breaths-air"}, - max_health = attributes.health, - order = "b-b-a", - subgroup="enemies", - healing_per_tick = attributes.healing, - resistances = resistances, - collision_box = {{-0.4 * attributes.scale, -0.4 * attributes.scale}, - {0.4 * attributes.scale, 0.4 * attributes.scale}}, - selection_box = {{-0.7 * attributes.scale, -1.5 * attributes.scale}, - {0.7 * attributes.scale, 0.3 * attributes.scale}}, - sticker_box = {{-0.6 * attributes.scale, -0.8 * attributes.scale}, - {0.6 * attributes.scale, 0}}, - attack_parameters = attributes.attack, - loot = attributes.loot, - vision_distance = attributes.vision or 30, - movement_speed = attributes.movement, - spawning_time_modifier = attributes.spawningTimeModifer or nil, - distance_per_frame = attributes.distancePerFrame or 0.1, - pollution_to_join_attack = attributes.pollutionToAttack or 200, - distraction_cooldown = attributes.distractionCooldown or 300, - alternative_attacking_frame_sequence = spitter_alternative_attacking_animation_sequence(), - corpse = makeSpitterCorpse(attributes), - dying_explosion = attributes.explosion, - enemy_map_color = ((not settings.startup["rampant--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, - dying_trigger_effect = attributes.dyingEffect, - dying_sound = attributes.dyingSounds, - working_sound = attributes.workingSounds, - walking_sound = attributes.walkingSounds, - running_sound_animation_positions = {2,}, - water_reflection = spitter_water_reflection(attributes.scale), - damaged_trigger_effect = ((not settings.startup["rampant--removeBloodParticles"].value) and makeDamagedParticle(attributes)) or nil, - affected_by_tiles = settings.startup["rampant--unitsAffectedByTiles"].value, - run_animation = spitterrunanimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint) - } - if attributes.collisionMask then - entity.collision_mask = attributes.collisionMask - end - if attributes.appendFlags then - for flag in pairs(attributes.appendFlags) do - entity.flags[#entity.flags+1] = flag - end - end - return entity -end - -function biterUtils.makeUnitSpawner(attributes) - local resistances = {} - for k,v in pairs(attributes.resistances) do - v.type = k - resistances[#resistances+1] = v - end - -- print(attributes.name) - local o = { - type = "unit-spawner", - name = attributes.name .. "-rampant", - localised_name = biterUtils.getLocalisedName(attributes), - icon = "__base__/graphics/icons/biter-spawner.png", - icon_size = 64, - icon_mipmaps = 4, - flags = {"placeable-player", "placeable-enemy", "not-repairable"}, - max_health = attributes.health, - order="b-b-g", - subgroup="enemies", - loot = attributes.loot, - resistances = resistances, - working_sound = - { - sound = - { - { - filename = "__base__/sound/creatures/spawner.ogg", - volume = 0.2 + (0.05 * attributes.effectiveLevel) - } - }, - apparent_volume = 0.4 + (0.1 * attributes.effectiveLevel) - }, - dying_sound = - { - { - filename = "__base__/sound/creatures/spawner-death-1.ogg", - volume = 0.4 + (0.05 * attributes.effectiveLevel) - }, - { - filename = "__base__/sound/creatures/spawner-death-2.ogg", - volume = 0.4 + (0.05 * attributes.effectiveLevel) - } - }, - damaged_trigger_effect = ((not settings.startup["rampant--removeBloodParticles"].value) and makeDamagedParticle(attributes)) or nil, - healing_per_tick = attributes.healing or 0.02, - collision_box = {{-3.0 * attributes.scale, -2.0 * attributes.scale}, {2.0 * attributes.scale, 2.0 * attributes.scale}}, - selection_box = {{-3.5 * attributes.scale, -2.5 * attributes.scale}, {2.5 * attributes.scale, 2.5 * attributes.scale}}, - -- in ticks per 1 pu - pollution_absorption_absolute = attributes.pollutionAbsorptionAbs or 20, - pollution_absorption_proportional = attributes.pollutionAbsorptionPro or 0.01, - map_generator_bounding_box = {{-4.2 * attributes.scale, -3.2 * attributes.scale}, {3.2 * attributes.scale, 3.2 * attributes.scale}}, - corpse = makeUnitSpawnerCorpse(attributes), - dying_explosion = attributes.explosion or "blood-explosion-huge", - min_darkness_to_spawn = attributes.minSpawnDarkness or 0, - max_darkness_to_spawn = attributes.maxSpawnDarkness or 1, - dying_trigger_effect = attributes.dyingEffect, - max_count_of_owned_units = attributes.unitsOwned or 7, - max_friends_around_to_spawn = attributes.unitsToSpawn or 5, - enemy_map_color = ((not settings.startup["rampant--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, - animations = - { - spawner_idle_animation(0, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), - spawner_idle_animation(1, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), - spawner_idle_animation(2, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint), - spawner_idle_animation(3, attributes.tint, attributes.scale, attributes.tint2 or attributes.tint) - }, - integration = - { - sheet = spawner_integration(attributes.scale) - }, - result_units = attributes.unitSet, - -- With zero evolution the spawn rate is 6 seconds, with max evolution it is 2.5 seconds - spawning_cooldown = attributes.spawningCooldown or ((attributes.spawningCooldownStart and attributes.spawningCooldownEnd) and {attributes.spawningCooldownStart, attributes.spawningCooldownEnd}) or {360, 150}, - spawning_radius = attributes.spawningRadius or 10, - spawning_spacing = attributes.spawningSpacing or 3, - max_spawn_shift = 0, - max_richness_for_spawn_shift = 100, - build_base_evolution_requirement = attributes.evolutionRequirement or 0.0, - call_for_help_radius = attributes.helpRadius or 50, - spawn_decorations_on_expansion = true, - spawn_decoration = - { - { - decorative = "light-mud-decal", - spawn_min = 0, - spawn_max = 2, - spawn_min_radius = 2, - spawn_max_radius = 5, - }, - { - decorative = "dark-mud-decal", - spawn_min = 0, - spawn_max = 3, - spawn_min_radius = 2, - spawn_max_radius = 6, - }, - { - decorative = "enemy-decal", - spawn_min = 3, - spawn_max = 5, - spawn_min_radius = 2, - spawn_max_radius = 7, - }, - { - decorative = "enemy-decal-transparent", - spawn_min = 4, - spawn_max = 20, - spawn_min_radius = 2, - spawn_max_radius = 14, - radius_curve = 0.9 - }, - { - decorative = "muddy-stump", - spawn_min = 2, - spawn_max = 5, - spawn_min_radius = 3, - spawn_max_radius = 6, - }, - { - decorative = "red-croton", - spawn_min = 2, - spawn_max = 8, - spawn_min_radius = 3, - spawn_max_radius = 6, - }, - { - decorative = "red-pita", - spawn_min = 1, - spawn_max = 5, - spawn_min_radius = 3, - spawn_max_radius = 6, - }, - { - decorative = "lichen-decal", - spawn_min = 1, - spawn_max = 2, - spawn_min_radius = 2, - spawn_max_radius = 7 - } - } - } - if attributes.autoplace then - o["autoplace"] = enemy_spawner_autoplace(attributes.autoplace) - end - if attributes.appendFlags then - for flag in pairs(attributes.appendFlags) do - o.flags[#o.flags+1] = flag - end - end - return o -end - -function biterUtils.makeWorm(attributes) - local resistances = {} - for k,v in pairs(attributes.resistances) do - v.type = k - resistances[#resistances+1] = v - end - -- print(name .. " " .. attributes.health) - local o = { - type = "turret", - name = attributes.name .. "-rampant", - localised_name = biterUtils.getLocalisedName(attributes), - icon = "__base__/graphics/icons/medium-worm.png", - icon_size = 64, icon_mipmaps = 4, - flags = attributes.flags or {"placeable-player", "placeable-enemy", "not-repairable", "not-repairable", "breaths-air"}, - order="b-b-e", - subgroup="enemies", - max_health = attributes.health, - loot = attributes.loot, - -- shooting_cursor_size = 3.5 * attributes.scale, - resistances = resistances, - healing_per_tick = attributes.healing or 0.01, - collision_box = {{-1.1 * attributes.scale, -1.0 * attributes.scale}, {1.1 * attributes.scale, 1.0 * attributes.scale}}, - selection_box = {{-1.1 * attributes.scale, -1.0 * attributes.scale}, {1.1 * attributes.scale, 1.0 * attributes.scale}}, - shooting_cursor_size = attributes.cursorSize or 3, - rotation_speed = attributes.rotationSpeed or 1, - corpse = makeWormCorpse(attributes), - dying_explosion = attributes.explosion or "blood-explosion-big", - dying_trigger_effect = attributes.dyingEffect, - inventory_size = attributes.inventorySize, - dying_sound = attributes.dyingSounds, - folded_speed = 0.01, - folded_speed_secondary = 0.024, - folded_animation = wormFoldedAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - preparing_speed = attributes.preparingSpeed or 0.024, - preparing_animation = wormPreparingAnimation(attributes.scale, attributes.tint, "forward", attributes.tint2 or attributes.tint), - preparing_sound = attributes.standupSounds, - prepared_speed = 0.024, - prepared_speed_secondary = 0.012, - prepared_animation = wormPreparedAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - prepared_sound = attributes.breathSounds, - prepared_alternative_speed = 0.014, - prepared_alternative_speed_secondary = 0.010, - prepared_alternative_chance = 0.2, - prepared_alternative_animation = wormPreparedAlternativeAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - prepared_alternative_sound = attributes.altRoarSounds, - - damaged_trigger_effect = ((not settings.startup["rampant--removeBloodParticles"].value) and makeDamagedParticle(attributes)) or nil, - - starting_attack_speed = 0.034, - starting_attack_animation = wormStartAttackAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - starting_attack_sound = attributes.roarSounds, - ending_attack_speed = 0.016, - ending_attack_animation = wormEndAttackAnimation(attributes.scale, attributes.tint, attributes.tint2 or attributes.tint), - folding_speed = attributes.foldingSpeed or 0.015, - folding_animation = wormPreparingAnimation(attributes.scale, attributes.tint, "backward", attributes.tint2 or attributes.tint), - folding_sound = attributes.foldSounds, - prepare_range = attributes.prepareRange or 30, - integration = worm_integration(attributes.scale), - attack_parameters = attributes.attack, - secondary_animation = true, - enemy_map_color = ((not settings.startup["rampant--oldRedEnemyMapColor"].value) and attributes.tint2) or nil, - random_animation_offset = true, - attack_from_start_frame = true, - - allow_turning_when_starting_attack = true, - build_base_evolution_requirement = attributes.evolutionRequirement or 0.0, - call_for_help_radius = attributes.helpRadius or 60, - spawn_decorations_on_expansion = true, - spawn_decoration = - { - { - decorative = "worms-decal", - spawn_min = 1, - spawn_max = 3, - spawn_min_radius = 1, - spawn_max_radius = 5 - }, - { - decorative = "shroom-decal", - spawn_min = 1, - spawn_max = 2, - spawn_min_radius = 1, - spawn_max_radius = 2 - }, - { - decorative = "enemy-decal", - spawn_min = 1, - spawn_max = 4, - spawn_min_radius = 1, - spawn_max_radius = 4, - }, - { - decorative = "enemy-decal-transparent", - spawn_min = 3, - spawn_max = 5, - spawn_min_radius = 1, - spawn_max_radius = 4, - }, - } - } - - if attributes.autoplace then - o["autoplace"] = enemy_worm_autoplace(attributes.autoplace) - end - if attributes.appendFlags then - for flag in pairs(attributes.appendFlags) do - o.flags[#o.flags+1] = flag - end - end - return o - -end - -function biterUtils.createSuicideAttack(attributes, blastWave, animation) - local o = { - type = "projectile", - range = -- attributes.range or - 1, - cooldown = attributes.cooldown or 35, - range_mode = "bounding-box-to-bounding-box", - ammo_category = "melee", - ammo_type = { - category = "biological" - }, - sound = attributes.roarSounds, - animation = animation - } - - if attributes.nuclear then - o.ammo_type.action = { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - { - type = "set-tile", - tile_name = "nuclear-ground", - radius = attributes.radius * 0.25, - apply_projection = true, - tile_collision_mask = { "water-tile" }, - }, - { - type = "destroy-cliffs", - radius = attributes.radius * 0.18, - explosion = "explosion" - }, - { - type = "create-entity", - entity_name = "nuke-explosion" - }, - { - type = "camera-effect", - effect = "screen-burn", - duration = 60, - ease_in_duration = 5, - ease_out_duration = 60, - delay = 0, - strength = 6, - full_strength_max_distance = 200, - max_distance = 800 - }, - { - type = "play-sound", - sound = sounds.nuclear_explosion(0.9), - play_on_target_position = false, - -- min_distance = 200, - max_distance = 1000, - -- volume_modifier = 1, - audible_distance_modifier = 3 - }, - { - type = "play-sound", - sound = sounds.nuclear_explosion_aftershock(0.4), - play_on_target_position = false, - -- min_distance = 200, - max_distance = 1000, - -- volume_modifier = 1, - audible_distance_modifier = 3 - }, - { - type = "damage", - damage = {amount = attributes.damage, type = "explosion"} - }, - { - type = "create-entity", - entity_name = "huge-scorchmark", - check_buildability = true, - }, - { - type = "invoke-tile-trigger", - repeat_count = 1, - }, - { - type = "destroy-decoratives", - include_soft_decoratives = true, -- soft decoratives are decoratives with grows_through_rail_path = true - include_decals = true, - invoke_decorative_trigger = true, - decoratives_with_trigger_only = false, -- if true, destroys only decoratives that have trigger_effect set - radius = attributes.radius * 0.35 -- large radius for demostrative purposes - }, - { - type = "create-decorative", - decorative = "nuclear-ground-patch", - spawn_min_radius = attributes.radius * 0.1, - spawn_max_radius = attributes.radius * 0.12, - spawn_min = 30, - spawn_max = 40, - apply_projection = true, - spread_evenly = true - }, - { - type = "nested-result", - action = - { - type = "area", - target_entities = false, - trigger_from_target = true, - repeat_count = 100, - radius = attributes.radius * 0.10, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-ground-zero-projectile", - starting_speed = 0.6 * 0.8, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - target_entities = false, - trigger_from_target = true, - repeat_count = 100, - radius = attributes.radius, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-wave", - starting_speed = 0.5 * 0.7, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 100, - radius = attributes.radius * 0.75, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-cluster-nuke-explosion", - starting_speed = 0.5 * 0.7, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 50, - radius = attributes.radius * 0.07, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-fire-smoke-explosion", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 100, - radius = attributes.radius * 0.07, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-nuke-shockwave-explosion", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 100, - radius = attributes.radius * 0.85, - action_delivery = - { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-nuclear-smoke", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - } - } - }, - { - type = "nested-result", - action = - { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 10, - radius = attributes.radius * 0.18, - action_delivery = - { - type = "instant", - target_effects = - { - { - type = "create-entity", - entity_name = "nuclear-smouldering-smoke-source", - tile_collision_mask = { "water-tile" } - } - } - } - } - } - } - } - } - else - o.ammo_type.action = { - type = "direct", - action_delivery = { - type = "instant", - source_effects = { - { - type = "damage", - affects_target = true, - show_in_tooltip = false, - damage = {amount = attributes.healthDamage or 5, type = "explosion"} - } - }, - target_effects = { - { - type = "create-entity", - entity_name = attributes.attackExplosion - }, - { - type = "nested-result", - action = { - type = "area", - radius = attributes.radius, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { - amount = attributes.damage, - type = attributes.damageType or "explosion" - } - }, - } - } - } - }, - { - type = "create-entity", - entity_name = attributes.attackScorchmark or "small-scorchmark", - check_buildability = true - } - } - - }, - } - - end - return o -end - -function biterUtils.makeWormAlienLootTable(name) - local biterLoot - - local a = settings.startup["bobmods-enemies-enableartifacts"] - local b = settings.startup["NE_Alien_Artifacts"] - local d = settings.startup["NE_Bio_Ammo_Damage"] - local artifacts = (a and a.value) or (b and b.value) or d - local c = settings.startup["bobmods-enemies-enablenewartifacts"] - local newArtifacts = c and c.value - - if newArtifacts and name then - biterLoot = { - [1] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 1, probability = 0.5 }, - [2] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 2, probability = 0.5 }, - [3] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 3, probability = 0.5 }, - [4] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 3, probability = 0.5 }, - [5] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 3, probability = 0.5 }, - [6] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 3, probability = 0.5 }, - [7] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.75 }, - [8] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.75 }, - [9] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.75 }, - [10] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.75 } - } - elseif artifacts then - biterLoot = { - [1] = { item = "alien-artifact", count_min = 1, count_max = 1, probability = 0.5 }, - [2] = { item = "alien-artifact", count_min = 1, count_max = 2, probability = 0.5 }, - [3] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, - [4] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, - [5] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, - [6] = { item = "alien-artifact", count_min = 2, count_max = 3, probability = 0.5 }, - [7] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, - [8] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, - [9] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.75 }, - [10] = { item = "alien-artifact", count_min = 3, count_max = 4, probability = 0.75 } - } - end - - return biterLoot -end - -function biterUtils.makeSpawnerAlienLootTable(name) - local biterLoot - local a = settings.startup["bobmods-enemies-enableartifacts"] - local b = settings.startup["NE_Alien_Artifacts"] - local d = settings.startup["NE_Bio_Ammo_Damage"] - local artifacts = (a and a.value) or (b and b.value) or d - local c = settings.startup["bobmods-enemies-enablenewartifacts"] - local newArtifacts = c and c.value - - if newArtifacts and name then - biterLoot = { - [1] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 1, probability = 0.5 }, - [2] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 2, probability = 0.5 }, - [3] = { item = "alien-artifact-" .. name, count_min = 1, count_max = 3, probability = 0.5 }, - [4] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.5 }, - [5] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 5, probability = 0.5 }, - [6] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 5, probability = 0.5 }, - [7] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 6, probability = 0.75 }, - [8] = { item = "alien-artifact-" .. name, count_min = 2, count_max = 6, probability = 0.75 }, - [9] = { item = "alien-artifact-" .. name, count_min = 3, count_max = 7, probability = 0.75 }, - [10] = { item = "alien-artifact-" .. name, count_min = 3, count_max = 7, probability = 0.75 } - } - elseif artifacts then - biterLoot = { - [1] = { item = "alien-artifact", count_min = 1, count_max = 1, probability = 0.5 }, - [2] = { item = "alien-artifact", count_min = 1, count_max = 2, probability = 0.5 }, - [3] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, - [4] = { item = "alien-artifact", count_min = 2, count_max = 4, probability = 0.5 }, - [5] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, - [6] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, - [7] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.75 }, - [8] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, - [9] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, - [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } - } - end - - return biterLoot -end - -function biterUtils.makeUnitAlienLootTable(name) - local biterLoot - local a = settings.startup["bobmods-enemies-enableartifacts"] - local b = settings.startup["NE_Alien_Artifacts"] - local artifacts = (a and a.value) or (b and b.value) - local c = settings.startup["bobmods-enemies-enablesmallartifacts"] - local smallArtifacts = (c and c.value) or (b and b.value) - local d = settings.startup["bobmods-enemies-enablenewartifacts"] - local newArtifacts = d and d.value - - if (c and c.value) and newArtifacts and name then - biterLoot = { - [1] = { item = "small-alien-artifact-" .. name, count_min = 1, count_max = 1, probability = 0.25 }, - [2] = { item = "small-alien-artifact-" .. name, count_min = 1, count_max = 2, probability = 0.25 }, - [3] = { item = "small-alien-artifact-" .. name, count_min = 1, count_max = 3, probability = 0.25 }, - [4] = { item = "small-alien-artifact-" .. name, count_min = 2, count_max = 4, probability = 0.5 }, - [5] = { item = "small-alien-artifact-" .. name, count_min = 2, count_max = 5, probability = 0.5 }, - [6] = { item = "small-alien-artifact-" .. name, count_min = 2, count_max = 5, probability = 0.5 }, - [7] = { item = "small-alien-artifact-" .. name, count_min = 2, count_max = 6, probability = 0.75 }, - [8] = { item = "small-alien-artifact-" .. name, count_min = 2, count_max = 6, probability = 0.75 }, - [9] = { item = "small-alien-artifact-" .. name, count_min = 3, count_max = 7, probability = 0.75 }, - [10] = { item = "small-alien-artifact-" .. name, count_min = 3, count_max = 7, probability = 0.75 } - } - elseif smallArtifacts then - biterLoot = { - [1] = { item = "small-alien-artifact", count_min = 1, count_max = 1, probability = 0.25 }, - [2] = { item = "small-alien-artifact", count_min = 1, count_max = 2, probability = 0.25 }, - [3] = { item = "small-alien-artifact", count_min = 1, count_max = 3, probability = 0.25 }, - [4] = { item = "small-alien-artifact", count_min = 2, count_max = 4, probability = 0.5 }, - [5] = { item = "small-alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, - [6] = { item = "small-alien-artifact", count_min = 2, count_max = 5, probability = 0.5 }, - [7] = { item = "small-alien-artifact", count_min = 2, count_max = 6, probability = 0.75 }, - [8] = { item = "small-alien-artifact", count_min = 2, count_max = 6, probability = 0.75 }, - [9] = { item = "small-alien-artifact", count_min = 3, count_max = 7, probability = 0.75 }, - [10] = { item = "small-alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } - } - elseif artifacts then - biterLoot = { - [1] = nil, - [2] = nil, - [3] = nil, - [4] = nil, - [5] = nil, - [6] = { item = "alien-artifact", count_min = 1, count_max = 3, probability = 0.5 }, - [7] = { item = "alien-artifact", count_min = 2, count_max = 5, probability = 0.75 }, - [8] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, - [9] = { item = "alien-artifact", count_min = 3, count_max = 6, probability = 0.75 }, - [10] = { item = "alien-artifact", count_min = 3, count_max = 7, probability = 0.75 } - } - end - - return biterLoot -end - -function biterUtils.findRange(entity) - return entity.attack_parameters.range -end - -local function findKey(key, obj) - for k,v in pairs(obj) do - if (k == key) and v then - return v - elseif (type(v) == "table") then - local val = findKey(key, v) - if val then - return val - end - end - end -end - -function biterUtils.findRunScale(entity) - return findKey("scale", entity.run_animation.layers) -end - -function biterUtils.findTint(entity) - return findKey("tint", entity.run_animation.layers) -end - -function biterUtils.createElectricAttack(attributes, electricBeam, animation) - return - { - type = "beam", - ammo_category = "biological", - range_mode = "bounding-box-to-bounding-box", - cooldown = attributes.cooldown or 20, - warmup = attributes.warmup, - min_attack_distance = (attributes.range and (attributes.range - 2)) or 15, - range = (attributes.range and (attributes.range + 2)) or 15, - sound = make_laser_sounds(), - ammo_type = - { - category = "biological", - action = - { - type = "line", - range = (attributes.range and (attributes.range + 2)) or 15, - width = attributes.width or 0.5, - force = (DISALLOW_FRIENDLY_FIRE and "not-same") or nil, - action_delivery = (attributes.actions and attributes.actions(attributes, electricBeam)) or - { - type = "beam", - beam = electricBeam or "electric-beam", - duration = attributes.duration or 20 - } - } - }, - animation = animation - } -end - -function biterUtils.createBeamAttack(attributes, electricBeam, animation) - return - { - type = "beam", - ammo_category = "biological", - range_mode = "bounding-box-to-bounding-box", - cooldown = attributes.cooldown or 20, - warmup = attributes.warmup, - damage_modifier = 2.5, - min_attack_distance = (attributes.range and (attributes.range - 2)) or 15, - range = (attributes.range and (attributes.range + 2)) or 15, - sound = make_laser_sounds(), - ammo_type = - { - category = "biological", - action = - { - type = "direct", - action_delivery = (attributes.actions and attributes.actions(attributes, electricBeam)) or - { - type = "beam", - beam = electricBeam or "electric-beam", - duration = attributes.duration or 20 - } - } - }, - animation = animation - } -end - -function biterUtils.createProjectileAttack(attributes, projectile, animation) - return { - type = "projectile", - ammo_category = "biological", - range_mode = "bounding-box-to-bounding-box", - cooldown = attributes.cooldown or 15, - warmup = attributes.warmup, - cooldown_deviation = 0.15, - projectile_creation_distance = 0.6, - force_condition = (settings.startup["rampant--disableCollidingProjectiles"].value and "not-same") or nil, - range = attributes.range or 20, - min_attack_distance = (attributes.range and (attributes.range - 2)) or 20, - lead_target_for_projectile_speed = 0.95, - use_shooter_direction = true, - ammo_type = - { - category = "biological", - clamp_position = true, - target_type = "position", - action = - { - type = "direct", - action_delivery = - { - type = "projectile", - projectile = projectile or "defender-bullet", - starting_speed = attributes.startingSpeed or 0.6, - max_range = attributes.maxRange or (attributes.range + 1) or 20 - } - } - }, - sound = biterUtils.biterAttackSounds(attributes.effectiveLevel), - animation = animation - } -end - -function biterUtils.createMeleeAttack(attackAttributes) - local meleeAttackEffects = { - type = "damage", - damage = { amount = attackAttributes.damage * 0.25, type = attackAttributes.damageType or "physical" } - } - - if attackAttributes.meleePuddleGenerator then - local o = {} - o[1] = meleeAttackEffects - o[2] = attackAttributes.meleePuddleGenerator(attackAttributes) - meleeAttackEffects = o - end - - return { - type = "projectile", - range = attackAttributes.range or 0.5, - cooldown = attackAttributes.cooldown or 35, - cooldown_deviation = 0.15, - range_mode = "bounding-box-to-bounding-box", - ammo_category = "melee", - ammo_type = { - category = "melee", - target_type = "entity", - action = - { - { - type = "area", - radius = attackAttributes.radius, - force = "enemy", - ignore_collision_condition = true, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = attackAttributes.damage * 0.75, type = attackAttributes.damageType or "physical" } - } - } - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = meleeAttackEffects - } - } - } - }, - sound = attackAttributes.roarSounds, - animation = biterattackanimation(attackAttributes.scale, attackAttributes.tint, attackAttributes.tint2 or attackAttributes.tint, attackAttributes.altBiter) - } -end - -function biterUtils.biterAttackSounds(effectiveLevel) - return { - { - filename = "__base__/sound/creatures/Spiters_1_1.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_1_2.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_2_1.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_2_2.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_3_1.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_3_2.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_4_1.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_4_2.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_5_1.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - }, - { - filename = "__base__/sound/creatures/Spiters_5_2.ogg", - volume = 0.2 + (effectiveLevel * 0.05) - } - } -end - -function biterUtils.createRangedAttack(attributes, attack, animation) - if (attributes.attackType == "stream") then - return biterUtils.createStreamAttack(attributes, attack, animation) - elseif (attributes.attackType == "projectile") then - return biterUtils.createProjectileAttack(attributes, attack, animation) - else - error("Unknown range attack") - end -end - -function biterUtils.createStreamAttack(attributes, fireAttack, animation) - local attack = { - type = "stream", - ammo_category = "biological", - cooldown = attributes.cooldown, - range = attributes.range, - min_range = attributes.minRange, - cooldown_deviation = 0.15, - - turn_range = attributes.turnRange, - fire_penalty = attributes.firePenalty, - - warmup = attributes.warmup or 0, - - damage_modifier = attributes.damageModifier or 1.0, - range_mode = "bounding-box-to-bounding-box", - lead_target_for_projectile_speed = attributes.particleHoizontalSpeed or 0.6, - - projectile_creation_parameters = spitter_shoot_shiftings(attributes.scale, attributes.scale * 20), - - use_shooter_direction = true, - - gun_barrel_length = 2 * attributes.scale, - gun_center_shift = { - north = {0, -0.65 * attributes.scale}, - east = {0, 0}, - south = {0, 0}, - west = {0, 0} - }, - ammo_type = - { - category = "biological", - action = - { - type = "direct", - action_delivery = - { - type = "stream", - stream = fireAttack, - duration = 160, - } - } - }, - - cyclic_sound = - { - begin_sound = biterUtils.biterAttackSounds(attributes.effectiveLevel), - middle_sound = - { - { - filename = attributes.midSound or "__Rampant__/sounds/attacks/acid-mid.ogg", - volume = 0.2 + (attributes.effectiveLevel * 0.05) - } - }, - end_sound = - { - { - filename = attributes.endSound or "__Rampant__/sounds/attacks/acid-end.ogg", - volume = 0.2 + (attributes.effectiveLevel * 0.05) - } - } - }, - animation = animation - } - - return attack -end - -function biterUtils.makeResistance(name, decrease, percentage) - local obj = { - type = name, - } - if (decrease ~= 0) then - obj.decrease = decrease - end - if (percentage ~= 0) then - obj.percentage = percentage - end - return obj -end - -return biterUtils diff --git a/Rampant_3.1.2/prototypes/utils/ColorUtils.lua b/Rampant_3.1.2/prototypes/utils/ColorUtils.lua deleted file mode 100644 index e5e48187..00000000 --- a/Rampant_3.1.2/prototypes/utils/ColorUtils.lua +++ /dev/null @@ -1,25 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local colorUtils = {} - --- module code - -function colorUtils.makeColor(r_,g_,b_,a_) - return { r = r_ * a_, g = g_ * a_, b = b_ * a_, a = a_ } -end - -return colorUtils diff --git a/Rampant_3.1.2/prototypes/utils/ProjectileUtils.lua b/Rampant_3.1.2/prototypes/utils/ProjectileUtils.lua deleted file mode 100644 index 98972755..00000000 --- a/Rampant_3.1.2/prototypes/utils/ProjectileUtils.lua +++ /dev/null @@ -1,96 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local projectileUtils = {} - - -function projectileUtils.makeProjectile(attributes, attack) - local n = attributes.name .. "-projectile-rampant" - - data:extend({{ - type = "projectile", - name = n, - flags = {"not-on-map"}, - collision_box = attributes.attackCollisionBox or {{-0.025, -0.025}, {0.025, 0.025}}, - collision_mask = attributes.attackCollisionMask or {"layer-13"}, - direction_only = attributes.attackDirectionOnly, - piercing_damage = attributes.attackPiercingDamage or 0, - acceleration = attributes.attackAcceleration or 0.000001, - max_speed = math.min(math.max(attributes.scale*0.60, 0.4), 0.7), - force_condition = (settings.startup["rampant--disableCollidingProjectiles"].value and "not-same") or nil, - action = attack, - animation = - { - filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", - line_length = 5, - width = 22, - height = 84, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), - tint = attributes.tint2, - priority = "high", - scale = (attributes.scale*1.2 or 1), - animation_speed = 1, - hr_version = - { - filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", - line_length = 5, - width = 42, - height = 164, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), - tint = attributes.tint2, - priority = "high", - scale = 0.5 * (attributes.scale*1.2 or 1), - animation_speed = 1, - } - }, - shadow = - { - filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", - line_length = 15, - width = 22, - height = 84, - frame_count = 15, - priority = "high", - shift = util.mul_shift(util.by_pixel(-2, 30), attributes.scale*1.2 or 1), - draw_as_shadow = true, - scale = (attributes.scale*1.2 or 1), - animation_speed = 1, - hr_version = - { - filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", - line_length = 15, - width = 42, - height = 164, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 31), attributes.scale*1.2 or 1), - draw_as_shadow = true, - priority = "high", - scale = 0.5 * (attributes.scale*1.2 or 1), - animation_speed = 1, - } - }, - -- rotatable = false, - oriented_particle = true, - shadow_scale_enabled = true, - - }}) - - return n -end - -return projectileUtils diff --git a/Rampant_3.1.2/prototypes/utils/StickerUtils.lua b/Rampant_3.1.2/prototypes/utils/StickerUtils.lua deleted file mode 100644 index 00b9d744..00000000 --- a/Rampant_3.1.2/prototypes/utils/StickerUtils.lua +++ /dev/null @@ -1,72 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - - -local stickerUtils = {} - --- imported - -local math3d = require("math3d") - --- module code - -function stickerUtils.makeSticker(attributes) - local name = attributes.name .. "-sticker-rampant" - - local o = { - type = "sticker", - name = name, - flags = {"not-on-map"}, - - animation = attributes.stickerAnimation or - { - filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", - line_length = 8, - width = 60, - height = 118, - frame_count = 25, - axially_symmetrical = false, - direction_count = 1, - blend_mode = "normal", - animation_speed = 2, - scale = 0.4, - tint = attributes.tint2 or { r = 1, g = 1, b = 1, a = 0.35 }, - shift = math3d.vector2.mul({-0.078125, -1.8125}, 0.1), - }, - - duration_in_ticks = attributes.stickerDuration or (30 * 60), - target_movement_modifier_from = attributes.stickerMovementModifier or 1, - target_movement_modifier_to = 1, - vehicle_speed_modifier_from = (attributes.stickerMovementModifier and math.min(attributes.stickerMovementModifier * 1.25, 1)) or 1, - -- vehicle_speed_modifier_from = attributes.stickerMovementModifier or 1, - vehicle_speed_modifier_to = 1, - -- vehicle_friction_modifier_from = 1.5, - -- vehicle_friction_modifier_from = 1, - -- vehicle_friction_modifier_to = 1, - - damage_per_tick = attributes.stickerDamagePerTick and { amount = attributes.stickerDamagePerTick or 100 / 60, - type = attributes.stickerDamagePerTickType or "fire" }, - spread_fire_entity = attributes.spawnEntityName, - fire_spread_cooldown = attributes.fireSpreadCooldown, - fire_spread_radius = attributes.fireSpreadRadius - } - - data:extend({o}) - return name -end - - -return stickerUtils diff --git a/Rampant_3.1.2/prototypes/utils/ThiefUtils.lua b/Rampant_3.1.2/prototypes/utils/ThiefUtils.lua deleted file mode 100644 index 6b8e6768..00000000 --- a/Rampant_3.1.2/prototypes/utils/ThiefUtils.lua +++ /dev/null @@ -1,107 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local thiefUtils = {} - --- module code - -function thiefUtils.makeDrainCrystal(attributes) - local name = attributes.name .. "-drain-rampant" - local itemName = attributes.name .. "-item-drain-rampant" - - data:extend({ - { - type = "item", - name = itemName, - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", - icon_size = 32, - flags = {"hidden"}, - subgroup = "energy", - order = "e[accumulator]-a[accumulator]", - place_result = name, - stack_size = 50 - }, - - { - type = "radar", - name = name, - icon = "__Rampant__/graphics/icons/thief/crystal-drain.png", - icon_size = 32, - flags = {"placeable-enemy"}, - minable = {hardness = 0.2, mining_time = 0.5, result = itemName}, - max_health = attributes.health or 500, - corpse = nil, - collision_box = {{-0.9 * attributes.scale, -0.9 * attributes.scale}, {0.9 * attributes.scale, 0.9 * attributes.scale}}, - selection_box = {{-1.1 * attributes.scale, -1.1 * attributes.scale}, {1.1 * attributes.scale, 1.1 * attributes.scale}}, - energy_per_sector = "100MJ", - max_distance_of_sector_revealed = 0, - max_distance_of_nearby_sector_revealed = 0, - energy_per_nearby_scan = "750kJ", - dying_explosion = "radar-explosion", - resistances = { - { - type = "physical", - percent = 25 - }, - { - type = "fire", - percent = 85 - }, - { - type = "electric", - percent = 95 - }, - { - type = "laser", - percent = 90 - } - }, - energy_source = - { - type = "electric", - usage_priority = "primary-input" - }, - energy_usage = attributes.drain or "500kW", - pictures = - { - filename = "__Rampant__/graphics/entities/thief/crystal-drain.png", - priority = "low", - width = 128, - height = 128, - scale = attributes.scale, - apply_projection = false, - direction_count = 32, - animation_speed = 0.5, - line_length = 8, - shift = {0.65, 0} - }, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - working_sound = - { - sound = { - { - filename = "__base__/sound/accumulator-working.ogg" - } - }, - apparent_volume = 2, - }, - radius_minimap_visualisation_color = { r = 0.059, g = 0.092, b = 0.8, a = 0.275 }, - } - }) - return -end - -return thiefUtils diff --git a/Rampant_3.1.2/prototypes/utils/UnitUtils.lua b/Rampant_3.1.2/prototypes/utils/UnitUtils.lua deleted file mode 100644 index 26524c6e..00000000 --- a/Rampant_3.1.2/prototypes/utils/UnitUtils.lua +++ /dev/null @@ -1,1306 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local unitUtils = {} - -function unitUtils.spitter_water_reflection(scale) - return - { - pictures = - { - filename = "__base__/graphics/entity/spitter/spitter-reflection.png", - priority = "extra-high", - width = 20, - height = 32, - shift = util.by_pixel(5, 15), - scale = 5 * scale, - variation_count = 1, - }, - rotate = true, - orientation_to_variation = false - } -end - -function unitUtils.biter_water_reflection(scale) - return - { - pictures = - { - filename = "__base__/graphics/entity/biter/biter-reflection.png", - priority = "extra-high", - width = 20, - height = 28, - shift = util.by_pixel(5, 15), - scale = 5 * scale, - variation_count = 1, - }, - rotate = true, - orientation_to_variation = false - } -end - - -function unitUtils.spitter_alternative_attacking_animation_sequence() - return { - warmup_frame_sequence = { 1, 2, 3, 4, 5, 6 }, - warmup2_frame_sequence = { 7, 7, 7, 7, 7, 7 }, - attacking_frame_sequence = { 7, 8, 9, 10, 11, 12, 13, 14, 13, 14, 13, 12, 11, 10, 9, 8 }, - cooldown_frame_sequence = { 7 }, - prepared_frame_sequence = { 7 }, - back_to_walk_frame_sequence = { 6, 5, 4, 3, 2, 1 }, - - warmup_animation_speed = 1 / 6 * 0.4, - attacking_animation_speed = 1 / 16 * 0.4, - cooldown_animation_speed = 1 / 1 * 0.4 * 0.125; - prepared_animation_speed = 1 / 1 * 0.5 * 0.4, - back_to_walk_animation_speed = 1 / 6 * 0.4, - } -end - -local function vanillaDieBiter(scale, tint1, tint2) - return { - layers= - { - { - filenames = - { - "__base__/graphics/entity/biter/biter-die-01.png", - "__base__/graphics/entity/biter/biter-die-02.png", - "__base__/graphics/entity/biter/biter-die-03.png", - "__base__/graphics/entity/biter/biter-die-04.png", - "__base__/graphics/entity/biter/biter-die-05.png", - "__base__/graphics/entity/biter/biter-die-06.png", - "__base__/graphics/entity/biter/biter-die-07.png", - "__base__/graphics/entity/biter/biter-die-08.png", - "__base__/graphics/entity/biter/biter-die-09.png", - "__base__/graphics/entity/biter/biter-die-10.png", - "__base__/graphics/entity/biter/biter-die-11.png", - "__base__/graphics/entity/biter/biter-die-12.png", - "__base__/graphics/entity/biter/biter-die-13.png", - "__base__/graphics/entity/biter/biter-die-14.png", - "__base__/graphics/entity/biter/biter-die-15.png", - "__base__/graphics/entity/biter/biter-die-16.png", - "__base__/graphics/entity/biter/biter-die-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 276, - height = 202, - frame_count = 17, - direction_count = 16, - shift= util.mul_shift(util.by_pixel(-2, -4), scale), - scale = scale, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-die-01.png", - "__base__/graphics/entity/biter/hr-biter-die-02.png", - "__base__/graphics/entity/biter/hr-biter-die-03.png", - "__base__/graphics/entity/biter/hr-biter-die-04.png", - "__base__/graphics/entity/biter/hr-biter-die-05.png", - "__base__/graphics/entity/biter/hr-biter-die-06.png", - "__base__/graphics/entity/biter/hr-biter-die-07.png", - "__base__/graphics/entity/biter/hr-biter-die-08.png", - "__base__/graphics/entity/biter/hr-biter-die-09.png", - "__base__/graphics/entity/biter/hr-biter-die-10.png", - "__base__/graphics/entity/biter/hr-biter-die-11.png", - "__base__/graphics/entity/biter/hr-biter-die-12.png", - "__base__/graphics/entity/biter/hr-biter-die-13.png", - "__base__/graphics/entity/biter/hr-biter-die-14.png", - "__base__/graphics/entity/biter/hr-biter-die-15.png", - "__base__/graphics/entity/biter/hr-biter-die-16.png", - "__base__/graphics/entity/biter/hr-biter-die-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 544, - height = 402, - frame_count = 17, - shift = util.mul_shift(util.by_pixel(0, -4), scale), - direction_count = 16, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-die-mask1-01.png", - "__base__/graphics/entity/biter/biter-die-mask1-02.png", - "__base__/graphics/entity/biter/biter-die-mask1-03.png", - "__base__/graphics/entity/biter/biter-die-mask1-04.png", - "__base__/graphics/entity/biter/biter-die-mask1-05.png", - "__base__/graphics/entity/biter/biter-die-mask1-06.png", - "__base__/graphics/entity/biter/biter-die-mask1-07.png", - "__base__/graphics/entity/biter/biter-die-mask1-08.png", - "__base__/graphics/entity/biter/biter-die-mask1-09.png", - "__base__/graphics/entity/biter/biter-die-mask1-10.png", - "__base__/graphics/entity/biter/biter-die-mask1-11.png", - "__base__/graphics/entity/biter/biter-die-mask1-12.png", - "__base__/graphics/entity/biter/biter-die-mask1-13.png", - "__base__/graphics/entity/biter/biter-die-mask1-14.png", - "__base__/graphics/entity/biter/biter-die-mask1-15.png", - "__base__/graphics/entity/biter/biter-die-mask1-16.png", - "__base__/graphics/entity/biter/biter-die-mask1-17.png", - }, - slice = 4, - lines_per_file = 4, - flags = { "mask" }, - line_length = 4, - width = 198, - height = 166, - frame_count = 17, - direction_count = 16, - shift = util.mul_shift(util.by_pixel(0, -22), scale), - scale = scale, - tint = tint1, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-die-mask1-01.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-02.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-03.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-04.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-05.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-06.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-07.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-08.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-09.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-10.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-11.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-12.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-13.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-14.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-15.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-16.png", - "__base__/graphics/entity/biter/hr-biter-die-mask1-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 398, - height = 328, - frame_count = 17, - shift = util.mul_shift(util.by_pixel(-1, -21), scale), - direction_count = 16, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-die-mask2-01.png", - "__base__/graphics/entity/biter/biter-die-mask2-02.png", - "__base__/graphics/entity/biter/biter-die-mask2-03.png", - "__base__/graphics/entity/biter/biter-die-mask2-04.png", - "__base__/graphics/entity/biter/biter-die-mask2-05.png", - "__base__/graphics/entity/biter/biter-die-mask2-06.png", - "__base__/graphics/entity/biter/biter-die-mask2-07.png", - "__base__/graphics/entity/biter/biter-die-mask2-08.png", - "__base__/graphics/entity/biter/biter-die-mask2-09.png", - "__base__/graphics/entity/biter/biter-die-mask2-10.png", - "__base__/graphics/entity/biter/biter-die-mask2-11.png", - "__base__/graphics/entity/biter/biter-die-mask2-12.png", - "__base__/graphics/entity/biter/biter-die-mask2-13.png", - "__base__/graphics/entity/biter/biter-die-mask2-14.png", - "__base__/graphics/entity/biter/biter-die-mask2-15.png", - "__base__/graphics/entity/biter/biter-die-mask2-16.png", - "__base__/graphics/entity/biter/biter-die-mask2-17.png", - }, - slice = 4, - lines_per_file = 4, - flags = { "mask" }, - line_length = 4, - width = 200, - height = 166, - frame_count = 17, - direction_count = 16, - shift = util.mul_shift(util.by_pixel(-2, -22), scale), - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-die-mask2-01.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-02.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-03.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-04.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-05.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-06.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-07.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-08.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-09.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-10.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-11.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-12.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-13.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-14.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-15.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-16.png", - "__base__/graphics/entity/biter/hr-biter-die-mask2-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 396, - height = 330, - frame_count = 17, - shift = util.mul_shift(util.by_pixel(-1, -22), scale), - direction_count = 16, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-die-shadow-01.png", - "__base__/graphics/entity/biter/biter-die-shadow-02.png", - "__base__/graphics/entity/biter/biter-die-shadow-03.png", - "__base__/graphics/entity/biter/biter-die-shadow-04.png", - "__base__/graphics/entity/biter/biter-die-shadow-05.png", - "__base__/graphics/entity/biter/biter-die-shadow-06.png", - "__base__/graphics/entity/biter/biter-die-shadow-07.png", - "__base__/graphics/entity/biter/biter-die-shadow-08.png", - "__base__/graphics/entity/biter/biter-die-shadow-09.png", - "__base__/graphics/entity/biter/biter-die-shadow-10.png", - "__base__/graphics/entity/biter/biter-die-shadow-11.png", - "__base__/graphics/entity/biter/biter-die-shadow-12.png", - "__base__/graphics/entity/biter/biter-die-shadow-13.png", - "__base__/graphics/entity/biter/biter-die-shadow-14.png", - "__base__/graphics/entity/biter/biter-die-shadow-15.png", - "__base__/graphics/entity/biter/biter-die-shadow-16.png", - "__base__/graphics/entity/biter/biter-die-shadow-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 282, - height = 192, - frame_count = 17, - shift = util.mul_shift(util.by_pixel(4, 0), scale), - direction_count = 16, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-die-shadow-01.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-02.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-03.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-04.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-05.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-06.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-07.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-08.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-09.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-10.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-11.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-12.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-13.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-14.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-15.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-16.png", - "__base__/graphics/entity/biter/hr-biter-die-shadow-17.png", - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 564, - height = 384, - frame_count = 17, - shift = util.mul_shift(util.by_pixel(4, 0), scale), - direction_count = 16, - scale = 0.5 * scale, - draw_as_shadow = true, - } - }, - } - } -end - -local function armoredDieBiter(scale, tint1, tint2) - return { - layers= - { - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-04.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-05.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-06.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-07.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-08.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-09.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-10.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-11.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-12.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-13.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-14.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-15.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift= {0,0}, - tint=tint1, - scale = scale, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-04.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-05.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-06.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-07.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-08.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-09.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-10.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-11.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-12.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-13.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-14.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-15.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-04.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-05.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-06.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-07.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-08.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-09.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-10.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-11.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-12.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-13.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-14.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-15.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask1-16.png" - }, - slice = 4, - lines_per_file = 4, - flags = { "mask" }, - line_length = 4, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-04.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-05.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-06.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-07.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-08.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-09.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-10.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-11.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-12.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-13.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-14.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-15.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask1-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-04.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-05.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-06.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-07.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-08.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-09.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-10.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-11.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-12.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-13.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-14.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-15.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-mask2-16.png" - }, - slice = 4, - lines_per_file = 4, - flags = { "mask" }, - line_length = 4, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-04.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-05.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-06.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-07.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-08.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-09.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-10.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-11.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-12.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-13.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-14.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-15.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-mask2-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-04.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-05.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-06.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-07.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-08.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-09.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-10.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-11.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-12.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-13.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-14.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-15.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-die-shadow-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 238, - height = 170, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-04.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-05.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-06.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-07.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-08.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-09.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-10.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-11.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-12.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-13.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-14.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-15.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-die-shadow-16.png" - }, - slice = 4, - lines_per_file = 4, - line_length = 4, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - draw_as_shadow = true, - } - } - } - } -end - -local function vanillaAttackBiter(scale, tint1, tint2) - return - { - layers= - { - { - filenames = - { - "__base__/graphics/entity/biter/biter-attack-01.png", - "__base__/graphics/entity/biter/biter-attack-02.png", - "__base__/graphics/entity/biter/biter-attack-03.png", - "__base__/graphics/entity/biter/biter-attack-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 182, - height = 176, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = util.mul_shift(util.by_pixel(-2, -26), scale), - scale = scale, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-attack-01.png", - "__base__/graphics/entity/biter/hr-biter-attack-02.png", - "__base__/graphics/entity/biter/hr-biter-attack-03.png", - "__base__/graphics/entity/biter/hr-biter-attack-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 356, - height = 348, - frame_count = 11, - shift = util.mul_shift(util.by_pixel(0, -25), scale), - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-attack-mask1-01.png", - "__base__/graphics/entity/biter/biter-attack-mask1-02.png", - "__base__/graphics/entity/biter/biter-attack-mask1-03.png", - "__base__/graphics/entity/biter/biter-attack-mask1-04.png", - }, - slice = 11, - lines_per_file = 4, - flags = { "mask" }, - line_length = 16, - width = 178, - height = 144, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = util.mul_shift(util.by_pixel(0, -42), scale), - scale = scale, - tint = tint1, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-attack-mask1-01.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask1-02.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask1-03.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask1-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 360, - height = 282, - frame_count = 11, - shift = util.mul_shift(util.by_pixel(-1, -41), scale), - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-attack-mask2-01.png", - "__base__/graphics/entity/biter/biter-attack-mask2-02.png", - "__base__/graphics/entity/biter/biter-attack-mask2-03.png", - "__base__/graphics/entity/biter/biter-attack-mask2-04.png", - }, - slice = 11, - lines_per_file = 4, - flags = { "mask" }, - line_length = 16, - width = 182, - height = 144, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = util.mul_shift(util.by_pixel(-2, -42), scale), - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-attack-mask2-01.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask2-02.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask2-03.png", - "__base__/graphics/entity/biter/hr-biter-attack-mask2-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 358, - height = 282, - frame_count = 11, - shift = util.mul_shift(util.by_pixel(-1, -41), scale), - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-attack-shadow-01.png", - "__base__/graphics/entity/biter/biter-attack-shadow-02.png", - "__base__/graphics/entity/biter/biter-attack-shadow-03.png", - "__base__/graphics/entity/biter/biter-attack-shadow-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 240, - height = 128, - frame_count = 11, - shift = util.mul_shift(util.by_pixel(30, 0), scale), - direction_count = 16, - animation_speed = 0.4, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-attack-shadow-01.png", - "__base__/graphics/entity/biter/hr-biter-attack-shadow-02.png", - "__base__/graphics/entity/biter/hr-biter-attack-shadow-03.png", - "__base__/graphics/entity/biter/hr-biter-attack-shadow-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 476, - height = 258, - frame_count = 11, - shift = util.mul_shift(util.by_pixel(31, -1), scale), - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - draw_as_shadow = true, - } - }, - } - } -end - -local function armoredAttackBiter(scale, tint1, tint2) - return - { - layers= - { - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 238, - height = 170, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = {0,0}, - tint=tint1, - scale = scale, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 476, - height = 340, - frame_count = 11, - shift = {0,0}, - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask1-04.png", - }, - slice = 11, - lines_per_file = 4, - flags = { "mask" }, - line_length = 16, - width = 238, - height = 170, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask1-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 476, - height = 340, - frame_count = 11, - shift = {0,0}, - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-mask2-04.png", - }, - slice = 11, - lines_per_file = 4, - flags = { "mask" }, - line_length = 16, - width = 238, - height = 170, - frame_count = 11, - direction_count = 16, - animation_speed = 0.4, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-mask2-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 476, - height = 340, - frame_count = 11, - shift = {0,0}, - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-attack-shadow-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 238, - height = 170, - frame_count = 11, - shift = {0,0}, - direction_count = 16, - animation_speed = 0.4, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-attack-shadow-04.png", - }, - slice = 11, - lines_per_file = 4, - line_length = 16, - width = 476, - height = 340, - frame_count = 11, - shift = {0,0}, - direction_count = 16, - animation_speed = 0.4, - scale = 0.5 * scale, - draw_as_shadow = true, - } - }, - } - } -end - -local function armoredRunBiter(scale, tint1, tint2) - return - { - layers= - { - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift = {0,0}, - scale = scale, - tint = tint1, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask1-04.png", - }, - slice = 8, - lines_per_file = 8, - flags = { "mask" }, - line_length = 8, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask1-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-mask2-04.png", - }, - slice = 8, - lines_per_file = 8, - flags = { "mask" }, - line_length = 8, - width = 238, - height = 170, - frame_count = 16, - direction_count = 16, - shift = {0,0}, - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-mask2-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/LowRes/armoured-biter-run-shadow-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 238, - height = 170, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-01.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-02.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-03.png", - "__ArmouredBiters__/graphics/armoured-biter/HighRes/hr-armoured-biter-run-shadow-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 476, - height = 340, - frame_count = 16, - shift = {0,0}, - direction_count = 16, - scale = 0.5 * scale, - draw_as_shadow = true, - } - } - } - } -end - -local function vanillaRunBiter(scale, tint1, tint2) - return - { - layers= - { - { - filenames = - { - "__base__/graphics/entity/biter/biter-run-01.png", - "__base__/graphics/entity/biter/biter-run-02.png", - "__base__/graphics/entity/biter/biter-run-03.png", - "__base__/graphics/entity/biter/biter-run-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 202, - height = 158, - frame_count = 16, - direction_count = 16, - shift = util.mul_shift(util.by_pixel(-2, -6), scale), - scale = scale, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-run-01.png", - "__base__/graphics/entity/biter/hr-biter-run-02.png", - "__base__/graphics/entity/biter/hr-biter-run-03.png", - "__base__/graphics/entity/biter/hr-biter-run-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 398, - height = 310, - frame_count = 16, - shift = util.mul_shift(util.by_pixel(-1, -5), scale), - direction_count = 16, - scale = 0.5 * scale, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-run-mask1-01.png", - "__base__/graphics/entity/biter/biter-run-mask1-02.png", - "__base__/graphics/entity/biter/biter-run-mask1-03.png", - "__base__/graphics/entity/biter/biter-run-mask1-04.png", - }, - slice = 8, - lines_per_file = 8, - flags = { "mask" }, - line_length = 8, - width = 118, - height = 94, - frame_count = 16, - direction_count = 16, - shift = util.mul_shift(util.by_pixel(0, -38), scale), - scale = scale, - tint = tint1, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-run-mask1-01.png", - "__base__/graphics/entity/biter/hr-biter-run-mask1-02.png", - "__base__/graphics/entity/biter/hr-biter-run-mask1-03.png", - "__base__/graphics/entity/biter/hr-biter-run-mask1-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 238, - height = 182, - frame_count = 16, - shift = util.mul_shift(util.by_pixel(-1, -37), scale), - direction_count = 16, - scale = 0.5 * scale, - tint = tint1, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-run-mask2-01.png", - "__base__/graphics/entity/biter/biter-run-mask2-02.png", - "__base__/graphics/entity/biter/biter-run-mask2-03.png", - "__base__/graphics/entity/biter/biter-run-mask2-04.png", - }, - slice = 8, - lines_per_file = 8, - flags = { "mask" }, - line_length = 8, - width = 120, - height = 92, - frame_count = 16, - direction_count = 16, - shift = util.mul_shift(util.by_pixel(-2, -38), scale), - scale = scale, - tint = tint2, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-run-mask2-01.png", - "__base__/graphics/entity/biter/hr-biter-run-mask2-02.png", - "__base__/graphics/entity/biter/hr-biter-run-mask2-03.png", - "__base__/graphics/entity/biter/hr-biter-run-mask2-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 232, - height = 184, - frame_count = 16, - shift = util.mul_shift(util.by_pixel(0, -38), scale), - direction_count = 16, - scale = 0.5 * scale, - tint = tint2, - } - }, - { - filenames = - { - "__base__/graphics/entity/biter/biter-run-shadow-01.png", - "__base__/graphics/entity/biter/biter-run-shadow-02.png", - "__base__/graphics/entity/biter/biter-run-shadow-03.png", - "__base__/graphics/entity/biter/biter-run-shadow-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 216, - height = 144, - frame_count = 16, - shift = util.mul_shift(util.by_pixel(8, 0), scale), - direction_count = 16, - scale = scale, - draw_as_shadow = true, - hr_version = - { - filenames = - { - "__base__/graphics/entity/biter/hr-biter-run-shadow-01.png", - "__base__/graphics/entity/biter/hr-biter-run-shadow-02.png", - "__base__/graphics/entity/biter/hr-biter-run-shadow-03.png", - "__base__/graphics/entity/biter/hr-biter-run-shadow-04.png", - }, - slice = 8, - lines_per_file = 8, - line_length = 8, - width = 432, - height = 292, - frame_count = 16, - shift = util.mul_shift(util.by_pixel(8, -1), scale), - direction_count = 16, - scale = 0.5 * scale, - draw_as_shadow = true, - } - } - } - } -end - -function unitUtils.biterdieanimation(scale, tint1, tint2, altBiter) - if (altBiter == "armored") and mods["ArmouredBiters"] then - return armoredDieBiter(scale, tint1, tint2) - else - return vanillaDieBiter(scale, tint1, tint2) - end -end - -function unitUtils.biterattackanimation(scale, tint1, tint2, altBiter) - if (altBiter == "armored") and mods["ArmouredBiters"] then - return armoredAttackBiter(scale, tint1, tint2) - else - return vanillaAttackBiter(scale, tint1, tint2) - end -end - - -function unitUtils.biterrunanimation(scale, tint1, tint2, altBiter) - if (altBiter == "armored") and mods["ArmouredBiters"] then - return armoredRunBiter(scale, tint1, tint2) - else - return vanillaRunBiter(scale, tint1, tint2) - end -end - - -return unitUtils diff --git a/Rampant_3.1.2/prototypes/utils/UpdatesVanilla.lua b/Rampant_3.1.2/prototypes/utils/UpdatesVanilla.lua deleted file mode 100644 index d396be0d..00000000 --- a/Rampant_3.1.2/prototypes/utils/UpdatesVanilla.lua +++ /dev/null @@ -1,280 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local vanillaUpdates = {} - -local biterUtils = require("BiterUtils") - -function vanillaUpdates.useDumbProjectiles() - local turrets = data.raw["turret"]; - - local attackType = "projectile" - - turrets["small-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 60, - range = 25, - min_range = 5, - turn_range = 1, - attackType = "projectile", - fire_penalty = 0, - damageModifier = 0.9, - effectiveLevel = 1, - scale = 0.8 - }, - "acid-ball-2-" .. attackType .. "-rampant") - - turrets["medium-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 60, - range = 30, - min_range = 3, - turn_range = 1, - attackType = "projectile", - fire_penalty = 0, - damageModifier = 0.87, - effectiveLevel = 3, - scale = 1 - }, - "acid-ball-3-" .. attackType .. "-rampant") - - - turrets["big-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 60, - range = 38, - min_range = 3, - attackType = "projectile", - turn_range = 1, - fire_penalty = 0, - effectiveLevel = 5, - scale = 1.2 - }, - "acid-ball-4-" .. attackType .. "-rampant") - - turrets["behemoth-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 60, - range = 48, - min_range = 3, - attackType = "projectile", - turn_range = 1, - fire_penalty = 0, - effectiveLevel = 7, - scale = 1.5 - }, - "acid-ball-5-" .. attackType .. "-rampant") - - local units = data.raw["unit"]; - - local unit = units["small-spitter"] - unit["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 100, - range = 13, - warmup = 30, - min_range = 3, - turn_range = 1, - attackType = "projectile", - effectiveLevel = 1, - fire_penalty = 15, - scale = biterUtils.findRunScale(unit) - }, - "acid-ball-" .. attackType .. "-rampant", - spitterattackanimation(biterUtils.findRunScale(unit), - tint_1_spitter_small, - tint_2_spitter_small)) - - unit = units["medium-spitter"] - unit["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 95, - range = 14, - min_range = 3, - attackType = "projectile", - warmup = 30, - turn_range = 1, - effectiveLevel = 3, - fire_penalty = 15, - scale = biterUtils.findRunScale(unit) - }, - "acid-ball-1-" .. attackType .. "-rampant", - spitterattackanimation(biterUtils.findRunScale(unit), - tint_1_spitter_medium, - tint_2_spitter_medium)) - - unit = units["big-spitter"] - unit["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 90, - range = 15, - min_range = 3, - attackType = "projectile", - warmup = 30, - turn_range = 1, - effectiveLevel = 5, - fire_penalty = 15, - scale = biterUtils.findRunScale(unit) - }, - "acid-ball-2-direction-" .. attackType .. "-rampant", - spitterattackanimation(biterUtils.findRunScale(unit), - tint_1_spitter_big, - tint_2_spitter_big)) - - unit = units["behemoth-spitter"] - unit["attack_parameters"] = biterUtils.createRangedAttack( - { - cooldown = 90, - range = 16, - min_range = 3, - warmup = 30, - attackType = "projectile", - turn_range = 1, - effectiveLevel = 7, - fire_penalty = 15, - scale = biterUtils.findRunScale(unit) - }, - "acid-ball-3-direction-" .. attackType .. "-rampant", - spitterattackanimation(biterUtils.findRunScale(unit), - tint_1_spitter_behemoth, - tint_2_spitter_behemoth)) - - unit = units["small-biter"] - unit["attack_parameters"]["ammo_type"]["action"] = { - { - type = "area", - radius = 0.2, - force = "enemy", - ignore_collision_condition = true, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 7 * 0.75, type = "physical" } - } - } - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 7 * 0.25, type = "physical" } - } - } - } - } - - unit = units["medium-biter"] - unit["attack_parameters"]["ammo_type"]["action"] = { - { - type = "area", - radius = 0.6, - force = "enemy", - ignore_collision_condition = true, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 15 * 0.75, type = "physical" } - } - } - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 15 * 0.25, type = "physical" } - } - } - } - } - - unit = units["big-biter"] - unit["attack_parameters"]["ammo_type"]["action"] = { - { - type = "area", - radius = 0.9, - force = "enemy", - ignore_collision_condition = true, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 30 * 0.75, type = "physical" } - } - } - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 30 * 0.25, type = "physical" } - } - } - } - } - - unit = units["behemoth-biter"] - unit["attack_parameters"]["ammo_type"]["action"] = { - { - type = "area", - radius = 1.2, - force = "enemy", - ignore_collision_condition = true, - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 90 * 0.75, type = "physical" } - } - } - }, - { - type = "direct", - action_delivery = - { - type = "instant", - target_effects = - { - type = "damage", - damage = { amount = 90 * 0.25, type = "physical" } - } - } - } - } -end - -return vanillaUpdates diff --git a/Rampant_3.1.2/settings.lua b/Rampant_3.1.2/settings.lua deleted file mode 100644 index 4331572d..00000000 --- a/Rampant_3.1.2/settings.lua +++ /dev/null @@ -1,1153 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - -data:extend({ - - { - type = "bool-setting", - name = "rampant--useDumbProjectiles", - description = "rampant--useDumbProjectiles", - setting_type = "startup", - default_value = true, - order = "a[modifier]-a[projectiles]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--disableCollidingProjectiles", - setting_type = "startup", - default_value = true, - order = "b[modifier]-b[trigger]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--unitsAffectedByTiles", - setting_type = "startup", - default_value = true, - order = "b[modifier]-b[trigger]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--oldRedEnemyMapColor", - setting_type = "startup", - default_value = false, - order = "b[modifier]-c[trigger]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--attackWaveMaxSize", - setting_type = "runtime-global", - minimum_value = 20, - maximum_value = 600, - default_value = 75, - order = "b[modifier]-f[wave]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--maxNumberOfSquads", - setting_type = "runtime-global", - minimum_value = 1, - maximum_value = 300, - default_value = 30, - order = "b[modifier]-f[wave]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--maxNumberOfBuilders", - setting_type = "runtime-global", - minimum_value = 1, - maximum_value = 120, - default_value = 10, - order = "b[modifier]-f[wave]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--unitAndSpawnerFadeTime", - setting_type = "startup", - minimum_value = 1, - maximum_value = 30000000 * 60, - default_value = 5 * 60, - order = "b[modifier]-f[wave]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--enableFadeTime", - setting_type = "startup", - default_value = true, - order = "b[modifier]-f[wave]", - per_user = false - }, - - -- { - -- type = "bool-setting", - -- name = "rampant--liteMode", - -- setting_type = "startup", - -- default_value = false, - -- order = "b[modifier]-g[ai]", - -- per_user = false - -- }, - - { - type = "bool-setting", - name = "rampant--enableSwarm", - description = "rampant--enableSwarm", - setting_type = "startup", - default_value = true, - order = "b[modifier]-j[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--enableShrinkNestsAndWorms", - description = "rampant--enableShrinkNestsAndWorms", - setting_type = "startup", - default_value = true, - order = "b[modifier]-j[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-curvedRail", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-b[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-straightRail", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-c[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-bigElectricPole", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-d[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-railSignals", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-e[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-railChainSignals", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-f[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-trainStops", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-g[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--safeBuildings-lamps", - setting_type = "runtime-global", - default_value = false, - order = "c[modifier]-h[safe]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--addWallResistanceAcid", - description = "rampant--addWallResistanceAcid", - setting_type = "startup", - default_value = false, - order = "c[modifier]-j[damage]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--disallowFriendlyFire", - setting_type = "startup", - default_value = true, - order = "c[modifier]-k[trigger]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--adaptationModifier", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 0.001, - maximum_value = 100.0, - order = "m[total]-b[ai]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--max-base-mutations", - setting_type = "runtime-global", - minimum_value = 0, - maximum_value = 9999999999, - default_value = 2, - order = "d[modifier]-a[ai]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--initialPeaceTime", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 20, - maximum_value = 9999999999, - order = "d[modifier]-a[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--printAwakenMessage", - setting_type = "runtime-global", - default_value = true, - order = "d[modifier]-a[ai]", - per_user = false - }, - - -- { - -- type = "double-setting", - -- name = "rampant--deadZoneFrequency", - -- description = "rampant--deadZoneFrequency", - -- setting_type = "runtime-global", - -- default_value = 0.1, - -- minimum_value = 0.0, - -- maximum_value = 1.0, - -- order = "d[modifier]-a[ai]", - -- per_user = false - -- }, - - { - type = "bool-setting", - name = "rampant--newEnemies", - description = "rampant--newEnemies", - setting_type = "startup", - default_value = true, - order = "e[modifier]-a[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--enemySeed", - description = "rampant--enemySeed", - setting_type = "startup", - minimum_value = 1, - default_value = 1024567, - maximum_value = 4294967295, - order = "l[modifer]-b[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--newEnemyVariations", - description = "rampant--newEnemyVariations", - setting_type = "startup", - minimum_value = 1, - maximum_value = 20, - default_value = 1, - order = "l[modifier]-h[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--tierStart", - setting_type = "startup", - default_value = 1, - minimum_value = 1, - maximum_value = 10, - order = "l[modifier]-l[unit]", - per_user = false - }, - - { - type = "int-setting", - name = "rampant--tierEnd", - setting_type = "startup", - minimum_value = 1, - maximum_value = 10, - default_value = 6, - order = "l[modifier]-m[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--acidEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-n[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--physicalEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-o[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--suicideEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-p[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--fireEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-q[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--electricEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-r[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--nuclearEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-s[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--infernoEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-t[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--fastEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-u[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--trollEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-v[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--spawnerEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-w[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--waspEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-x[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--laserEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-y[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--energyThiefEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-z[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--poisonEnemy", - setting_type = "startup", - default_value = true, - order = "l[modifier]-za[unit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--unitSpawnerBreath", - setting_type = "startup", - default_value = true, - order = "l[modifier]-zb[unit]", - per_user = false - }, - - -- { - -- type = "bool-setting", - -- name = "rampant--disableVanillaAI", - -- description = "rampant--disableVanillaAI", - -- setting_type = 'runtime-global', - -- default_value = true, - -- order = "m[total]-a[ai]", - -- per_user = false - -- }, - - { - type = "bool-setting", - name = "rampant--enableMigration", - description = "rampant--enableMigration", - setting_type = 'runtime-global', - default_value = true, - order = "m[total]-c[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--raidAIToggle", - setting_type = "runtime-global", - default_value = true, - order = "m[total]-c[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--siegeAIToggle", - setting_type = "runtime-global", - default_value = true, - order = "m[total]-c[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--peacefulAIToggle", - setting_type = "runtime-global", - default_value = true, - order = "m[total]-c[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--printAIStateChanges", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--printBaseAdaptation", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--printBaseUpgrades", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--printBaseSettling", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--debugTemperament", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]zz", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--permanentNocturnal", - description = "rampant--permanentNocturnal", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-a[ai]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--aiPointsScaler", - description = "rampant--aiPointsScaler", - setting_type = "runtime-global", - default_value = 1.0, - minimum_value = 0.0, - maximum_value = 100.0, - order = "m[total]-b[ai]1", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--aiPointsPrintSpendingToChat", - description = "rampant--aiPointsPrintSpendingToChat", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--aiPointsPrintGainsToChat", - description = "rampant--aiPointsPrintGainsToChat", - setting_type = "runtime-global", - default_value = false, - order = "m[total]-c[ai]z", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--temperamentRateModifier", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 0.001, - maximum_value = 100.0, - order = "m[total]-b[ai]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--baseDistanceModifier", - setting_type = "runtime-global", - default_value = 1, - minimum_value = 0.001, - maximum_value = 100.0, - order = "m[total]-b[ai]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--removeBloodParticles", - description = "rampant--reduceBloodParticles", - setting_type = "startup", - default_value = false, - order = "n[modifier]-a[optimize]", - per_user = false - }, - - -- { - -- type = "bool-setting", - -- name = "rampant--enableFullMapScan", - -- setting_type = "runtime-global", - -- default_value = true, - -- order = "n[modifier]-a[optimize]", - -- per_user = false - -- }, - - { - type = "bool-setting", - name = "rampant--unkillableLogisticRobots", - setting_type = "startup", - default_value = false, - order = "n[modifier]-b[optimize]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--unkillableConstructionRobots", - setting_type = "startup", - default_value = false, - order = "n[modifier]-c[optimize]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitBiterHealthScaler", - description = "rampant--unitBiterHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-a[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitBiterHealingScaler", - description = "rampant--unitBiterHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-a[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitBiterSpeedScaler", - description = "rampant--unitBiterSpeedScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-b[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitBiterDamageScaler", - description = "rampant--unitBiterDamageScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-c[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitBiterRangeScaler", - description = "rampant--unitBiterRangeScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-d[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpitterHealthScaler", - description = "rampant--unitSpitterHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-e[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpitterHealingScaler", - description = "rampant--unitSpitterHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-e[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpitterSpeedScaler", - description = "rampant--unitSpitterSpeedScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-f[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpitterDamageScaler", - description = "rampant--unitSpitterDamageScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-g[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpitterRangeScaler", - description = "rampant--unitSpitterRangeScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-h[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitDroneHealthScaler", - description = "rampant--unitDroneHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-i[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitDroneHealingScaler", - description = "rampant--unitDroneHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-i[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitDroneSpeedScaler", - description = "rampant--unitDroneSpeedScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-j[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitDroneDamageScaler", - description = "rampant--unitDroneDamageScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-k[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitDroneRangeScaler", - description = "rampant--unitDroneRangeScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-l[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitWormHealthScaler", - description = "rampant--unitWormHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitWormHealingScaler", - description = "rampant--unitWormHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-m[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitWormDamageScaler", - description = "rampant--unitWormDamageScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-n[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitWormRangeScaler", - description = "rampant--unitWormRangeScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-o[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpawnerHealthScaler", - description = "rampant--unitSpawnerHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-p[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpawnerHealingScaler", - description = "rampant--unitSpawnerHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-p[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpawnerOwnedScaler", - description = "rampant--unitSpawnerOwnedScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-q[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpawnerSpawnScaler", - description = "rampant--unitSpawnerSpawnScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-r[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitSpawnerRespawnScaler", - description = "rampant--unitSpawnerRespawnScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-r[unit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitHiveRespawnScaler", - description = "rampant--unitHiveRespawnScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-r[zunit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitHiveHealthScaler", - description = "rampant--unitHiveHealthScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-r[zunit]", - per_user = false - }, - - { - type = "double-setting", - name = "rampant--unitHiveHealingScaler", - description = "rampant--unitHiveHealingScaler", - setting_type = "startup", - default_value = 1.0, - minimum_value = 0.0001, - maximum_value = 100000.0, - order = "p[modifier]-r[zunit]", - per_user = false - }, - - { - type = "bool-setting", - name = "rampant--attackWaveGenerationUsePlayerProximity", - setting_type = "runtime-global", - default_value = true, - order = "b[modifier]-b[trigger]", - per_user = false - - }, - - { - type = "double-setting", - name = "rampant--attackPlayerThreshold", - setting_type = "runtime-global", - minimum_value = 0, - default_value = 20, - order = "b[modifier]-c[threshold]", - per_user = false - } - -}) - --- Converts the RGBA struct to Hexadecimal discarding the alpha value. --- Since the RGBA struct stores values as percent (0-1) and not actual RGB (0-255) there might be precision errors when converting. -local function rgbaToHex(rgba) - local r = string.format("%x", rgba.r * 255) - local g = string.format("%x", rgba.g * 255) - local b = string.format("%x", rgba.b * 255) - local a = string.format("%x", rgba.a * 255) - if #r == 1 then - r = "0"..r - end - if #g == 1 then - g = "0"..g - end - if #b == 1 then - b = "0"..b - end - if #a == 1 then - a = "0"..a - end - return r..g..b..a -end - --- Sets the default value of the faction tint settings. --- Change this function if the formating of the tint settings changes. -local function setDefaultValue(tint, tint2, tint3) - return rgbaToHex(tint) .. " " .. rgbaToHex(tint2) .. " " .. rgbaToHex(tint3) -end - -local FACTIONS = { - { - -- Neutral faction - type = "neutral", - tint = {r = 0.90, g = 0.90, b = 0.90, a = 1.00}, - tint2 = {r = 1.00, g = 1.00, b = 1.00, a = 1.00}, - tint3 = {r = 0.50, g = 0.50, b = 0.50, a = 0.20} - }, - { - -- Acidic faction - type = "acid", - tint = {r = 1.00, g = 1.00, b = 1.00, a = 1.00}, - tint2 = {r = 0.40, g = 0.90, b = 0.40, a = 1.00}, - tint3 = {r = 0.40, g = 0.60, b = 0.40, a = 0.20} - }, - { - -- Laser faction - type = "laser", - tint = {r = 0.60, g = 0.60, b = 0.84, a = 1.00}, - tint2 = {r = 0.60, g = 0.60, b = 0.84, a = 1.00}, - tint3 = {r = 0.30, g = 0.30, b = 0.70, a = 0.20} - }, - { - -- Fire faction - type = "fire", - tint = {r = 1.00, g = 1.00, b = 1.00, a = 1.00}, - tint2 = {r = 0.90, g = 0.20, b = 0.20, a = 1.00}, - tint3 = {r = 0.90, g = 0.70, b = 0.70, a = 0.20} - }, - { - -- Inferno faction - type = "inferno", - tint = {r = 0.90, g = 0.75, b = 0.75, a = 1.00}, - tint2 = {r = 0.70, g = 0.30, b = 0.30, a = 1.00}, - tint3 = {r = 0.50, g = 0.00, b = 0.00, a = 0.20} - }, - { - -- Wasp faction - type = "wasp", - tint = {r = 1.00, g = 1.00, b = 0.70, a = 1.00}, - tint2 = {r = 0.50, g = 0.50, b = 0.00, a = 1.00}, - tint3 = {r = 0.80, g = 0.80, b = 0.00, a = 0.20} - }, - { - -- Spawner faction - type = "spawner", - tint = {r = 1.00, g = 0.80, b = 1.00, a = 1.00}, - tint2 = {r = 0.90, g = 0.30, b = 0.90, a = 1.00}, - tint3 = {r = 0.60, g = 0.10, b = 0.60, a = 0.20} - }, - { - -- Electric faction - type = "electric", - tint = {r = 0.80, g = 0.80, b = 1.00, a = 1.00}, - tint2 = {r = 0.30, g = 0.30, b = 1.00, a = 1.00}, - tint3 = {r = 0.10, g = 0.10, b = 0.70, a = 0.20} - }, - { - -- Brutal faction - type = "physical", - tint = {r = 0.90, g = 0.90, b = 0.90, a = 1.00}, - tint2 = {r = 0.80, g = 0.80, b = 0.80, a = 1.00}, - tint3 = {r = 0.20, g = 0.20, b = 0.20, a = 0.20} - }, - { - -- Regenerative faction - type = "troll", - tint = {r = 0.55, g = 0.55, b = 0.55, a = 1.00}, - tint2 = {r = 1.00, g = 0.30, b = 0.30, a = 1.00}, - tint3 = {r = 0.30, g = 0.10, b = 0.10, a = 0.20} - }, - { - -- Poison faction - type = "poison", - tint = {r = 0.50, g = 0.70, b = 0.60, a = 1.00}, - tint2 = {r = 0.30, g = 0.90, b = 0.30, a = 1.00}, - tint3 = {r = 0.05, g = 0.30, b = 0.05, a = 0.20} - }, - { - -- Suicide faction - type = "suicide", - tint = {r = 0.80, g = 0.80, b = 0.80, a = 1.00}, - tint2 = {r = 1.00, g = 0.50, b = 0.00, a = 1.00}, - tint3 = {r = 0.55, g = 0.30, b = 0.15, a = 0.20} - }, - { - -- Nuclear faction - type = "nuclear", - tint = {r = 0.10, g = 0.95, b = 0.10, a = 1.00}, - tint2 = {r = 1.00, g = 0.50, b = 0.00, a = 1.00}, - tint3 = {r = 0.50, g = 0.75, b = 0.00, a = 0.20} - }, - { - -- Sapper faction - type = "energyThief", - tint = {r = 0.50, g = 0.50, b = 0.70, a = 1.00}, - tint2 = {r = 0.40, g = 0.40, b = 0.40, a = 1.00}, - tint3 = {r = 0.10, g = 0.10, b = 0.40, a = 0.20} - }, - { - -- Fast faction - type = "fast", - tint = {r = 0.90, g = 0.90, b = 0.90, a = 1.00}, - tint2 = {r = 1.00, g = 1.00, b = 0.10, a = 1.00}, - tint3 = {r = 0.50, g = 0.50, b = 0.00, a = 0.20} - } -} - -for i = 1, #FACTIONS do - local entry = FACTIONS[i] - local setting = "rampant--" .. entry.type .. "Tints" - - data:extend({ - { - type = "string-setting", - name = setting, - description = setting, - setting_type = "startup", - default_value = setDefaultValue(entry.tint, entry.tint2, entry.tint3), - order = "p[modifier]-r[zzunit]", - }, - }) -end diff --git a/Rampant_3.1.2/sounds/attacks/acid-end.ogg b/Rampant_3.1.2/sounds/attacks/acid-end.ogg deleted file mode 100644 index 2beffaa1..00000000 Binary files a/Rampant_3.1.2/sounds/attacks/acid-end.ogg and /dev/null differ diff --git a/Rampant_3.1.2/sounds/attacks/acid-mid.ogg b/Rampant_3.1.2/sounds/attacks/acid-mid.ogg deleted file mode 100644 index 788a99f8..00000000 Binary files a/Rampant_3.1.2/sounds/attacks/acid-mid.ogg and /dev/null differ diff --git a/Rampant_3.1.2/tests.lua b/Rampant_3.1.2/tests.lua deleted file mode 100644 index eedbf5a4..00000000 --- a/Rampant_3.1.2/tests.lua +++ /dev/null @@ -1,647 +0,0 @@ --- Copyright (C) 2022 veden - --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. - --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. - --- You should have received a copy of the GNU General Public License --- along with this program. If not, see . - - -local tests = {} - -local constants = require("libs/Constants") -local mathUtils = require("libs/MathUtils") -local chunkUtils = require("libs/ChunkUtils") -local chunkPropertyUtils = require("libs/ChunkPropertyUtils") -local mapUtils = require("libs/MapUtils") -local baseUtils = require("libs/BaseUtils") -local queryUtils = require("libs/QueryUtils") --- local tendrilUtils = require("libs/TendrilUtils") - -function tests.pheromoneLevels(size) - local player = game.player.character - local playerChunkX = math.floor(player.position.x / 32) * constants.CHUNK_SIZE - local playerChunkY = math.floor(player.position.y / 32) * constants.CHUNK_SIZE - if not size then - size = 3 * constants.CHUNK_SIZE - else - size = size * constants.CHUNK_SIZE - end - print("------") - print(#global.map.processQueue) - print(playerChunkX .. ", " .. playerChunkY) - print("--") - for y=playerChunkY-size, playerChunkY+size,32 do - for x=playerChunkX-size, playerChunkX+size,32 do - if (global.map[x] ~= nil) then - local chunk = global.map[x][y] - if (chunk ~= nil) then - local str = "" - for i=1,#chunk do - str = str .. " " .. tostring(i) .. "/" .. tostring(chunk[i]) - end - str = str .. " " .. "p/" .. game.get_surface(global.natives.activeSurface).get_pollution(chunk) .. " " .. "n/" .. chunkPropertyUtils.getNestCount(global.map, chunk) .. " " .. "w/" .. chunkPropertyUtils.getTurretCount(global.map, chunk) .. " pg/" .. chunkPropertyUtils.getPlayerBaseGenerator(global.map, chunk) - if (chunk.x == playerChunkX) and (chunk.y == playerChunkY) then - print("=============") - print(chunk.x, chunk.y, str) - print("=============") - else - print(chunk.x, chunk.y, str) - end - -- print(str) - print("----") - end - end - end - print("------------------") - end -end - -function tests.killActiveSquads() - print("--") - for i=1, global.natives.squads.len do - local squad = global.natives.squads[i] - if (squad.group.valid) then - local members = squad.group.members - for x=1, #members do - local member = members[x] - local val = member.valid and member.die() - end - end - end -end - -function tests.activeSquads() - print("-----") - print(defines.group_state.gathering .. " is equal to gathering") - print(defines.group_state.finished .. " is equal to finished") - -- print("Squads", global.natives.groupNumberToSquad) - for un, squad in pairs(global.natives.groupNumberToSquad) do - print("-") - -- local squad = global.natives.squads[i] - local squadHealth = 0 - local squadMakeup = {} - if squad.group.valid then - -- for x=1,#squad.group.members do - -- local member = squad.group.members[x].prototype - -- if not squadMakeup[member.name] then - -- squadMakeup[member.name] = 0 - -- end - - -- squadHealth = squadHealth + member.max_health - -- squadMakeup[member.name] = squadMakeup[member.name] + 1 - -- end - print(math.floor(squad.group.position.x * 0.03125), math.floor(squad.group.position.y * 0.03125), squad.status, squad.group.state, #squad.group.members, squad.cycles, squad.group.group_number -- , squadHealth - ) - -- print(serpent.dump(squadResistances)) - -- print(serpent.dump(squadMakeup)) - -- print(serpent.dump(squad)) - end - end - -- print("---") - -- print("pending", global.natives.pendingAttack.len) - -- for i=1, global.natives.pendingAttack.len do - -- print("-") - -- local squad = global.natives.pendingAttack[i] - -- local squadHealth = 0 - -- local squadMakeup = {} - -- if squad.group.valid then - -- -- for x=1,#squad.group.members do - -- -- local member = squad.group.members[x].prototype - -- -- if not squadMakeup[member.name] then - -- -- squadMakeup[member.name] = 0 - -- -- end - - -- -- squadHealth = squadHealth + member.max_health - -- -- squadMakeup[member.name] = squadMakeup[member.name] + 1 - -- -- end - -- print(math.floor(squad.group.position.x * 0.03125), math.floor(squad.group.position.y * 0.03125), squad.status, squad.group.state, #squad.group.members, squad.cycles, -- squadHealth, - -- squad.group.group_number) - -- -- print(serpent.dump(squadResistances)) - -- -- print(serpent.dump(squadMakeup)) - -- -- print(serpent.dump(squad)) - -- end - -- end - -- print("---") - -- print("building", #global.natives.building) - -- for i=1, #global.natives.building do - -- print("-") - -- local squad = global.natives.building[i] - -- local squadHealth = 0 - -- local squadMakeup = {} - -- if squad.group.valid then - -- -- for x=1,#squad.group.members do - -- -- local member = squad.group.members[x].prototype - -- -- if not squadMakeup[member.name] then - -- -- squadMakeup[member.name] = 0 - -- -- end - - -- -- squadHealth = squadHealth + member.max_health - -- -- squadMakeup[member.name] = squadMakeup[member.name] + 1 - -- -- end - -- print(math.floor(squad.group.position.x * 0.03125), math.floor(squad.group.position.y * 0.03125), squad.status, squad.group.state, #squad.group.members, squad.cycles, squad.group.group_number, squadHealth) - -- -- print(serpent.dump(squadResistances)) - -- -- print(serpent.dump(squadMakeup)) - -- -- print(serpent.dump(squad)) - -- end - -- end - -end - -function tests.entitiesOnPlayerChunk() - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - local entities = game.get_surface(global.natives.activeSurface).find_entities_filtered({area={{chunkX, chunkY}, - {chunkX + constants.CHUNK_SIZE, chunkY + constants.CHUNK_SIZE}}, - force="player"}) - for i=1, #entities do - print(entities[i].name) - end - print("--") -end - -function tests.findNearestPlayerEnemy() - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - local entity = game.get_surface(global.natives.activeSurface).find_nearest_enemy({position={chunkX, chunkY}, - max_distance=constants.CHUNK_SIZE, - force = "enemy"}) - if (entity ~= nil) then - print(entity.name) - end - print("--") -end - -function tests.morePoints(points) - global.natives.points = global.natives.points + points -end - -function tests.getOffsetChunk(x, y) - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) - local chunkY = math.floor(playerPosition.y * 0.03125) - local chunk = mapUtils.getChunkByIndex(global.map, chunkX + x, chunkY + y) - print(serpent.dump(chunk)) -end - -function tests.aiStats() - print(global.natives.points, game.tick, global.natives.state, global.natives.temperament, global.natives.stateTick, global.natives.temperamentTick, global.natives.activeNests, global.natives.activeRaidNests) -end - -function tests.fillableDirtTest() - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - game.get_surface(global.natives.activeSurface).set_tiles({{name="fillableDirt", position={chunkX-1, chunkY-1}}, - {name="fillableDirt", position={chunkX, chunkY-1}}, - {name="fillableDirt", position={chunkX-1, chunkY}}, - {name="fillableDirt", position={chunkX, chunkY}}}, - false) -end - -function tests.tunnelTest() - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - game.get_surface(global.natives.activeSurface).create_entity({name="tunnel-entrance-rampant", position={chunkX, chunkY}}) -end - -function tests.createEnemy(x,d) - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - local a = {name=x, position={chunkX, chunkY}, force="enemy"} - if d then - a['direction'] = d - end - return game.get_surface(global.natives.activeSurface).create_entity(a) -end - -function tests.attackOrigin() - local enemy = game.get_surface(global.natives.activeSurface).find_nearest_enemy({position={0,0}, - max_distance = 1000}) - if (enemy ~= nil) and enemy.valid then - print(enemy, enemy.unit_number) - enemy.set_command({type=defines.command.go_to_location, - destination={0,0}, - radius=15}) - end -end - -function tests.dumpNatives() - print(serpent.dump(global.natives)) -end - -function tests.cheatMode() - game.players[1].cheat_mode = true - game.forces.player.research_all_technologies() -end - -function tests.gaussianRandomTest() - local result = {} - for x=0,100,1 do - result[x] = 0 - end - for _=1,10000 do - local s = mathUtils.roundToNearest(mathUtils.gaussianRandomRange(50, 25, 0, 100), 1) - result[s] = result[s] + 1 - end - for x=0,100,1 do - print(x, result[x]) - end -end - -function tests.reveal (size) - local pos = game.player.character.position - game.player.force.chart(game.player.surface, - {{x=-size+pos.x, y=-size+pos.y}, {x=size+pos.x, y=size+pos.y}}) -end - -function tests.baseStats() - local natives = global.natives - print ("x", "y", "distanceThreshold", "tick", "points", "temperament", "temperamentTick", "state", "stateTick", "alignments") - for i=1, #natives.bases do - local base = natives.bases[i] - print(base.x, - base.y, - base.distanceThreshold, - base.tick, - base.points, - base.temperament, - base.temperamentTick, - base.state, - base.stateTick, - serpent.dump(base.alignment)) - print("---") - end -end - -function tests.clearBases() - - local surface = game.get_surface(global.natives.activeSurface) - for x=#global.natives.bases,1,-1 do - local base = global.natives.bases[x] - for c=1,#base.chunks do - local chunk = base.chunks[c] - chunkUtils.clearChunkNests(chunk, surface) - end - - base.chunks = {} - - if (surface.can_place_entity({name="biter-spawner-powered", position={base.cX * 32, base.cY * 32}})) then - surface.create_entity({name="biter-spawner-powered", position={base.cX * 32, base.cY * 32}}) - local slice = math.pi / 12 - local pos = 0 - for i=1,24 do - if (math.random() < 0.8) then - local distance = mathUtils.roundToNearest(mathUtils.gaussianRandomRange(45, 5, 37, 60), 1) - if (surface.can_place_entity({name="biter-spawner", position={base.cX * 32 + (distance*math.sin(pos)), base.cY * 32 + (distance*math.cos(pos))}})) then - if (math.random() < 0.3) then - surface.create_entity({name="small-worm-turret", position={base.cX * 32 + (distance*math.sin(pos)), base.cY * 32 + (distance*math.cos(pos))}}) - else - surface.create_entity({name="biter-spawner", position={base.cX * 32 + (distance*math.sin(pos)), base.cY * 32 + (distance*math.cos(pos))}}) - end - end - end - pos = pos + slice - end - else - table.remove(global.natives.bases, x) - end - end -end - -function tests.mergeBases() - local natives = global.natives - baseUtils.mergeBases(global.natives) -end - -function tests.unitBuildBase() -end - -function tests.showBaseGrid(time) - local map = global.universe.maps[game.player.surface.index] - local chunks = map.chunkToBase - for chunk in pairs(chunks) do - local count = chunkPropertyUtils.getEnemyStructureCount(map, chunk) - chunkUtils.mapScanEnemyChunk(chunk, map, game.tick) - local newCount = chunkPropertyUtils.getEnemyStructureCount(map, chunk) - if newCount ~= count then - constants.gpsDebug(chunk.x+16,chunk.y+16, "f2:" .. tostring(count) .. "/" .. tostring(newCount)) - chunkUtils.colorChunk(chunk, game.player.surface.index, {0.3, 0.1, 0.1, 0.6}, time and tonumber(time)) - else - chunkUtils.colorChunk(chunk, game.player.surface.index, nil, time and tonumber(time)) - end - end -end - -function tests.getEnemyStructureCount() - local map = global.universe.maps[game.player.surface.index] - local chunk = mapUtils.getChunkByPosition(map, game.player.character.position) - - print(chunk.x, chunk.y, chunkPropertyUtils.getEnemyStructureCount(map, chunk)) -end - -function tests.scanEnemy() - local map = global.universe.maps[game.player.surface.index] - local chunk = mapUtils.getChunkByPosition(map, game.player.character.position) - local universe = map.universe - local buildingHiveTypeLookup = universe.buildingHiveTypeLookup - local query = universe.filteredEntitiesEnemyStructureQuery - queryUtils.setAreaInQuery(query, chunk, constants.CHUNK_SIZE) - local buildings = map.surface.find_entities_filtered(query) - local counts = map.chunkScanCounts - for i=1,#constants.HIVE_BUILDINGS_TYPES do - counts[constants.HIVE_BUILDINGS_TYPES[i]] = 0 - end - for i=1,#buildings do - local building = buildings[i] - local hiveType = buildingHiveTypeLookup[building.name] or - (((building.type == "turret") and "turret") or "biter-spawner") - counts[hiveType] = counts[hiveType] + 1 - end - - print(game.tick, serpent.dump(counts)) -end - -function tests.showMovementGrid() - local chunks = global.map.processQueue - for i=1,#chunks do - local chunk = chunks[i] - local color = "concrete" - if (chunkPropertyUtils.getPassable(global.map, chunk) == constants.CHUNK_ALL_DIRECTIONS) then - color = "hazard-concrete-left" - elseif (chunkPropertyUtils.getPassable(global.map, chunk) == constants.CHUNK_NORTH_SOUTH) then - color = "concrete" - elseif (chunkPropertyUtils.getPassable(global.map, chunk) == constants.CHUNK_EAST_WEST) then - color = "stone-path" - end - chunkUtils.colorChunk(chunk.x, chunk.y, color, game.get_surface(global.natives.activeSurface)) - end -end - -function tests.colorResourcePoints() - local chunks = global.map.processQueue - for i=1,#chunks do - local chunk = chunks[i] - local color = "concrete" - if (chunk[constants.RESOURCE_GENERATOR] ~= 0) and (chunk[constants.NEST_COUNT] ~= 0) then - color = "hazard-concrete-left" - elseif (chunk[constants.RESOURCE_GENERATOR] ~= 0) then - color = "deepwater" - elseif (chunk[constants.NEST_COUNT] ~= 0) then - color = "stone-path" - end - chunkUtils.colorChunk(chunk.x, chunk.y, color, game.get_surface(global.natives.activeSurface)) - end -end - -function tests.entityStats(name, d) - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - local a = game.get_surface(global.natives.activeSurface).create_entity({name=name, position={chunkX, chunkY}}) - if d then - a['direction'] = d - end - print(serpent.dump(a)) - a.destroy() -end - -local function lookupIndexFaction(targetFaction) - for i=1,#constants.FACTION_SET do - if constants.FACTION_SET[i].type == targetFaction then - return i - end - end - return 0 -end - -local function scoreResourceLocationKamikaze(_, neighborChunk) - local settle = neighborChunk[constants.RESOURCE_PHEROMONE] - return settle - - (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[constants.ENEMY_PHEROMONE] -end - -local function scoreSiegeLocationKamikaze(_, neighborChunk) - local settle = neighborChunk[constants.BASE_PHEROMONE] - + neighborChunk[constants.RESOURCE_PHEROMONE] * 0.5 - + (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[constants.ENEMY_PHEROMONE] - - return settle -end - -local function scoreResourceLocation(map, neighborChunk) - local settle = (chunkPropertyUtils.getDeathGeneratorRating(map, neighborChunk) * neighborChunk[constants.RESOURCE_PHEROMONE]) - return settle - - (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[constants.ENEMY_PHEROMONE] -end - -local function scoreSiegeLocation(map, neighborChunk) - local settle = neighborChunk[constants.BASE_PHEROMONE] - + neighborChunk[constants.RESOURCE_PHEROMONE] * 0.5 - + (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - - neighborChunk[constants.ENEMY_PHEROMONE] - - return settle * chunkPropertyUtils.getDeathGeneratorRating(map, neighborChunk) -end - -local function scoreAttackLocation(map, neighborChunk) - local damage = neighborChunk[constants.BASE_PHEROMONE] + - (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - return damage * chunkPropertyUtils.getDeathGeneratorRating(map, neighborChunk) -end - -local function scoreAttackKamikazeLocation(_, neighborChunk) - local damage = neighborChunk[constants.BASE_PHEROMONE] + (neighborChunk[constants.PLAYER_PHEROMONE] * constants.PLAYER_PHEROMONE_MULTIPLER) - return damage -end - -function tests.exportAiState() - - local printState = function () - local map = global.universe.maps[game.players[1].surface.index] - local chunks = map.processQueue - local s = "" - for i=1,#chunks do - local chunk = chunks[i] - - local base = chunkPropertyUtils.getChunkBase(map, chunk) - local alignmentCount = 0 - - if base then - if (#base.alignment == 2) then - alignmentCount = (math.abs(base.x) * 10000) + (math.abs(base.y) * 10000) + (lookupIndexFaction(base.alignment[1]) * 100) + lookupIndexFaction(base.alignment[2]) - else - alignmentCount = (math.abs(base.x) * 10000) + (math.abs(base.y) * 10000) + lookupIndexFaction(base.alignment[1]) - end - end - - s = s .. table.concat({chunk.x, - chunk.y, - chunkPropertyUtils.getDeathGeneratorRating(map, chunk), - chunk[constants.BASE_PHEROMONE], - chunk[constants.PLAYER_PHEROMONE], - chunk[constants.RESOURCE_PHEROMONE], - chunk[constants.ENEMY_PHEROMONE], - chunkPropertyUtils.getPassable(map, chunk), - chunk[constants.CHUNK_TICK], - chunkPropertyUtils.getPathRating(map, chunk), - chunkPropertyUtils.getNestCount(map, chunk), - chunkPropertyUtils.getTurretCount(map, chunk), - chunkPropertyUtils.getRallyTick(map, chunk), - chunkPropertyUtils.getRetreatTick(map, chunk), - chunkPropertyUtils.getResourceGenerator(map, chunk), - chunkPropertyUtils.getPlayerBaseGenerator(map, chunk), - chunkPropertyUtils.getDeathGenerator(map, chunk), - scoreResourceLocationKamikaze(map, chunk), - scoreResourceLocation(map, chunk), - scoreSiegeLocationKamikaze(map, chunk), - scoreSiegeLocation(map, chunk), - scoreAttackKamikazeLocation(map, chunk), - scoreAttackLocation(map, chunk), - game.get_surface(game.players[1].surface.index).get_pollution(chunk), - chunkPropertyUtils.getNestActiveness(map, chunk), - chunkPropertyUtils.getRaidNestActiveness(map, chunk), - table_size(chunkPropertyUtils.getSquadsOnChunk(map, chunk)), - alignmentCount, - chunkPropertyUtils.getHiveCount(map, chunk), - chunkPropertyUtils.getTrapCount(map, chunk), - chunkPropertyUtils.getUtilityCount(map, chunk), - global.universe.chunkToVictory[chunk] or 0 - }, ",") .. "\n" - end - game.write_file("rampantState.txt", s, false) - end - - return function(interval) - if not interval then - interval = 0 - else - interval = tonumber(interval) - end - - printState() - - if (interval > 0) then - script.on_nth_tick(interval, printState) - end - end -end - -function tests.createEnergyTest(x) - local entity = tests.createEnemy(x) - - local playerPosition = game.players[1].position - local chunkX = math.floor(playerPosition.x * 0.03125) * 32 - local chunkY = math.floor(playerPosition.y * 0.03125) * 32 - local entities = game.get_surface(global.natives.activeSurface).find_entities_filtered({area={{chunkX, chunkY}, - {chunkX + constants.CHUNK_SIZE, chunkY + constants.CHUNK_SIZE}}, - type = "electric-pole", - force="player"}) - -- for i=1, #entities do - -- print(entities[i].name) - -- end - local wires - - if #entities > 0 then - entity.connect_neighbour(entities[1]) - end - - -- if wires then - -- for connectType,neighbourGroup in pairs(wires) do - -- if connectType == "copper" then - -- for _,v in pairs(neighbourGroup) do - -- ; - -- end - -- end - -- end - -- end -end - --- function tests.unitGroupBuild() --- local surface = game.get_surface(global.natives.activeSurface) --- local group = surface.create_unit_group({position={-32, -32}}) - --- for i=1,10 do --- group.add_member(surface.create_entity({name="small-biter", position={-32, -32}})) --- end - --- group.set_command({ --- type = defines.command.build_base, --- destination = {-64, -64}, --- distraction = defines.distraction.by_enemy, --- ignore_planner = true --- }) --- end - -function tests.unitGroupBuild() - local surface = game.get_surface(global.natives.activeSurface) - local group = surface.create_unit_group({position={-32, -32}}) - - for i=1,10 do - group.add_member(surface.create_entity({name="small-biter", position={-32, -32}})) - -- surface.create_entity({name="small-biter", position={-32, -32}}) - end - - local group2 = surface.create_unit_group({position={32, 32}}) - - for i=1,10 do - -- group2.add_member(surface.create_entity({name="small-biter", position={32, 32}})) - surface.create_entity({name="small-biter", position={32, 32}}) - end - - group.destroy() - - -- group.set_command({ - -- type = defines.command.build_base, - -- destination = {-64, -64}, - -- distraction = defines.distraction.by_enemy, - -- ignore_planner = true - -- }) - - surface.set_multi_command({ - command = { - type = defines.command.group, - group = group2, - distraction = defines.distraction.none, - use_group_distraction = false - }, - unit_count = 900, - unit_search_distance = 32 * 8 - }) - -end - -function tests.dumpEnvironment(x) - print (serpent.dump(global[x])) -end - --- function tests.scanChunkPaths() --- local surface = game.get_surface(global.natives.activeSurface) --- local playerPosition = game.players[1].position --- local chunk = mapUtils.getChunkByPosition(global.map, playerPosition) --- print("------") --- print(chunkUtils.scanChunkPaths(chunk, surface, global.map)) --- print("------") --- end - -function tests.stepAdvanceTendrils() - -- for _, base in pairs(global.natives.bases) do - -- tendrilUtils.advanceTendrils(global.map, base, game.get_surface(global.natives.activeSurface), {nil,nil,nil,nil,nil,nil,nil,nil}) - -- end -end - -return tests diff --git a/Rampant_3.1.2/thumbnail.png b/Rampant_3.1.2/thumbnail.png deleted file mode 100644 index c9212ae1..00000000 Binary files a/Rampant_3.1.2/thumbnail.png and /dev/null differ diff --git a/RateCalculator_3.2.3/LICENSE b/RateCalculator/LICENSE similarity index 100% rename from RateCalculator_3.2.3/LICENSE rename to RateCalculator/LICENSE diff --git a/RateCalculator/README.md b/RateCalculator/README.md new file mode 100644 index 00000000..d524efa6 --- /dev/null +++ b/RateCalculator/README.md @@ -0,0 +1,62 @@ +[![shield](https://img.shields.io/badge/Ko--fi-Donate%20-hotpink?logo=kofi&logoColor=white)](https://ko-fi.com/raiguard) +[![shield](https://img.shields.io/badge/Crowdin-Translate-brightgreen)](https://crowdin.com/project/raiguards-factorio-mods) +[![shield](https://img.shields.io/badge/dynamic/json?color=orange&label=Factorio&query=downloads_count&suffix=%20downloads&url=https%3A%2F%2Fmods.factorio.com%2Fapi%2Fmods%2FRateCalculator)](https://mods.factorio.com/mod/RateCalculator) + +# Rate Calculator + +Calculate maximum production and consumption rates for the selected machines. + +## Installation + +[Download on the Mod Portal.](https://mods.factorio.com/mod/RateCalculator) + +## Usage + +Select some machines with the selection tool (found on the shortcut bar, or use +the hotkey `Alt + X`) to calculate the maximum production and consumption rates +for those machines. The rates will be displayed in the GUI: + +![](screenshots/gui.png) + +The GUI shows rates in several categories: + +- **Ingredients:** Materials that the machines import. +- **Products:** Materials that the machines export. +- **Intermediates:** Materials that some machines produce and others consume. +The displayed rate is the "net rate" of that intermediate material. + +With a given set, your goal is to make all of the intermediate net rates +positive (green) or neutral (white). The numbers in parenthesis next to the +machine counts denote "net producers" i.e. how many fewer or more +similarly-configured machines you need to build to produce the material at the +required rate. + +The above screenshot shows that this yellow science set needs at least 1 +more assembler producing engine units to achieve the required input rates. It +also shows that there is an extra assembler making low density structures that +can safely be removed from the set. + +Use the dropdown to change the timescale for the measurements. Select a +container or cargo wagon with the entity selector to scale the measurements to +that container or wagon's capacity (accounting for stack sizes). Select a +transport belt or inserter to measure against that belt or inserter's maximum +item transfer rate. + +Use the manual multiplier input and/or buttons to scale the entire subfactory's +rates and machine counts by that multiplier. + +You can access the previous ten sets by using the navigation buttons in the +titlebar. + +## Tips and tricks + +- Selecting normally will produce a new selection. Alternatively, you can also +hold **shift** to append the existing selection, or use **shift + right click** +to remove machines from the selection. +- Press the shortcut / use the hotkey again when already holding the tool to +show the GUI. +- Power input rates are not shown by default, but can be enabled in the mod +settings. +- Hovering over an entry will give more detailed information about that rate: + +![](screenshots/gui-tooltip.png) diff --git a/RateCalculator/changelog.txt b/RateCalculator/changelog.txt new file mode 100644 index 00000000..5d64b8ce --- /dev/null +++ b/RateCalculator/changelog.txt @@ -0,0 +1,412 @@ +--------------------------------------------------------------------------------------------------- +Version: 3.2.4 +Date: 2023-12-20 + Bugfixes: + - Fixed that machines in intermediate rate tooltips were listed backwards. + - Fixed that inserter rates did not account for item stack sizes. (#141) + - [Space Exploration] Fixed that the spaceship console would show infinite power production. (#142) +--------------------------------------------------------------------------------------------------- +Version: 3.2.3 +Date: 2023-07-30 + Changes: + - Removed the "some rates have been filtered" error - it isn't very useful + Bugfixes: + - Fixed that closing the GUI with the timescale dropdown open would not close the dropdown (#128) + - Fixed that container rates would not take stack sizes into account (#129) +--------------------------------------------------------------------------------------------------- +Version: 3.2.2 +Date: 2023-06-24 + Bugfixes: + - Fixed a crash when selecting a solar panel (#126) +--------------------------------------------------------------------------------------------------- +Version: 3.2.1 +Date: 2023-06-20 + Changes: + - Made adjustments to better support game controllers + Bugfixes: + - Fixed several crashes when the GUI window becomes invalid (#123, #124) + - Fixed an error in Polish translation that was preventing the game from starting +--------------------------------------------------------------------------------------------------- +Version: 3.2.0 +Date: 2023-06-20 + Features: + - Added a new column to intermediate rates showing the output and input rates separately (#111) + - Added alt+click to open the row's material in recipe book (#119) + - Re-added pollution rates (#109) + Changes: + - Improved power icon + - Increased precision of measurements by one decimal place (#115) + Bugfixes: + - Fixed that clicking the close button while pinned would close whatever GUI was open at the time + - Fixed that fluid energy source effectivity was not taken into account (#117) +--------------------------------------------------------------------------------------------------- +Version: 3.1.2 +Date: 2023-05-06 + Changes: + - Adjusted colors to be more readable + Bugfixes: + - Fixed being unable to input zeroes after the decimal point in the manual multiplier field (#112) + - Fixed that the GUI would be created and steal focus if hitting control+f before making the first selection (#113) +--------------------------------------------------------------------------------------------------- +Version: 3.1.1 +Date: 2023-05-02 + Bugfixes: + - Fixed a crash when a fluid with temperature is filtered due to the selected divisor +--------------------------------------------------------------------------------------------------- +Version: 3.1.0 +Date: 2023-04-30 + Features: + - Added a per-player setting to change the default timescale (#102) + - Added optional checkboxes for marking a row as "completed" (#103) + - Re-added set history, saving the last ten sets (#104) + - Re-added support for fluid output temperatures (#107) + Changes: + - Changed default timescale to "per second" + - Manual multiplier will be reset to 1 when making a new selection (#101) + - Renamed "measure" to "timescale" + - Updated base dependency to 1.1.80, flib dependency to 0.12.7 + Bugfixes: + - Fixed that row tooltips were shown inconsistently depending on GUI contents + - Fixed a crash when changing mod options before making an initial selection (#106) + - Fixed that fluid energy source filters were not considered when calculating fluid rates (#105) + - Fixed that power and heat were not shown as watts in intermediate tooltips + - Fixed that some inserters would show NaN rates due to imprecision in an arccosine operation +--------------------------------------------------------------------------------------------------- +Version: 3.0.2 +Date: 2023-04-29 + Gui: + - Added a description to the "some machines have no power" error + Bugfixes: + - Fixed that inserter rates were incorrect and would be divided by zero if no stack size bonuses were researched +--------------------------------------------------------------------------------------------------- +Version: 3.0.1 +Date: 2023-04-28 + Bugfixes: + - Fixed unknown key in timescale dropdown +--------------------------------------------------------------------------------------------------- +Version: 3.0.0 +Date: 2023-04-28 + Features: + - Added localised search + - Machines can be removed from the calculation with shift + right-drag + - Added a per-player setting to change the default GUI position (top-left, center) + - Added a per-player setting to show calculation errors in the GUI + Changes: + - Removed alternate selection tool modes + - Removed pollution rates + - Removed selection history + - Removed tips and tricks + Gui: + - Redesigned the GUI to be more concise and easier to read, and to improve performance + - Ingredients, products, and intermediates are shown in separate tables with clear separation + - Power and heat rates are integrated into the main tables instead of being separate categories + - Manual multiplier has been moved to the header, and the slider has been replaced with up/down buttons + - The machines column displays the icons of the producing machines + - The net rate tooltip shows producing and consuming machines as well as a breakdown of net rate, net machines, and input/output rates/machines + - Calculation errors are shown at the bottom of the GUI + - GUI default position is now at the top-left of the screen + Optimizations: + - Improved performance of rate calculations + - Noticeably reduced GUI update times + - Removed the spreading of rate calculations over multiple ticks + Bugfixes: + - Fixed that mining drills without a fluid box were shown as being able to mine resources with fluid +--------------------------------------------------------------------------------------------------- +Version: 2.4.8 +Date: 2023-02-20 + Bugfixes: + - Fixed that certain buildings generated by Omnicompression would not be selectable +--------------------------------------------------------------------------------------------------- +Version: 2.4.7 +Date: 2023-02-19 + Compatibility: + - Holographic signs are no longer included in the container filters list + Bugfixes: + - Fixed accidental inclusion of development files in mod package + - Fixed a crash when a mining drill mines a resource with no products + - Fixed a crash when filtering by a container with zero inventory slots + - Fixed that heat calculations did not account for efficiency modules +--------------------------------------------------------------------------------------------------- +Version: 2.4.6 +Date: 2022-10-30 + Bugfixes: + - Fixed a crash when using a container filter +--------------------------------------------------------------------------------------------------- +Version: 2.4.5 +Date: 2022-10-27 + Features: + - Added advanced tooltips to material rates that show which recipes are producing or consuming the material + Changes: + - Input rates are no longer displayed as negative numbers for technical reasons + - Updated base and flib dependencies + Bugfixes: + - Fixed boiler rates being inaccurate when input and output fluids have different heat capacities +--------------------------------------------------------------------------------------------------- +Version: 2.4.4 +Date: 2022-05-29 + Changes: + - Updated Chinese locale (by PlexPt) (#92) + - Updated Russian locale (by Astorin) (#91) + Bugfixes: + - Fixed a crash when a fluid energy source has fluid at its default temperature +--------------------------------------------------------------------------------------------------- +Version: 2.4.3 +Date: 2022-02-20 + Features: + - A warning will display when selecting an inserter connected to a belt (#83) + Changes: + - Added Chinese and Korean locales + Bugfixes: + - Fixed that generators did not show pollution rates (#88) + - Fixed that generators without fluid filters would not show rates (#88) + - Fixed that production of fuel burnt results was not being shown (#86) + - Fixed that rocket part rates did not account for the time the rocket took to launch (#85) + - Fixed that the surface's solar power multiplier was not taken into account for solar power output + - Fixed that zero net rates would occasionally show as green or red due to floating point imprecision +--------------------------------------------------------------------------------------------------- +Version: 2.4.2 +Date: 2021-12-09 + Bugfixes: + - Fixed the calculator not correctly handling catalysts (again) +--------------------------------------------------------------------------------------------------- +Version: 2.4.1 +Date: 2021-12-08 + Changes: + - Updated Russian locale (by Astorin) (#77) + Bugfixes: + - Fixed appending selections not working (#78) +--------------------------------------------------------------------------------------------------- +Version: 2.4.0 +Date: 2021-12-03 + Features: + - Added basic support for fluid output temperatures (#57) + - Fluid input temperatures are not supported due to their complexity + - Added navigation buttons, allowing you to access the last ten selections (#18) + - Using the hotkey or clicking the shortcut while already holding the selection tool will open the GUI + Changes: + - Updated tips and tricks content and screenshots + - Updated Russian locale (by Astorin) + Bugfixes: + - Fixed machines from the "Mini Machines" mod being unselectable in some cases (#64) + - The calculator now accounts for the game engine's 1 craft per tick limitation (#66) +--------------------------------------------------------------------------------------------------- +Version: 2.3.1 +Date: 2021-10-25 + Features: + - Added a warning when selecting a lab without an active research + Changes: + - Updated Russian locale (by Astorin) + Bugfixes: + - Fixed rate tooltips rounding to the nearest whole number + - Fixed the GUI soft-locking when selecting the inserter units in some situations +--------------------------------------------------------------------------------------------------- +Version: 2.3.0 +Date: 2021-10-23 + Features: + - Added a setting to automatically dismiss the selection tool when the GUI opens + - Added a warning when selecting unpowered beacons + Gui: + - Added warnings when there are no rates for the selected timescale, and when there are no search results + - Middle-clicking the titlebar will re-center the GUI + - Search results will only update after you quit typing for half a second + - The rates table now uses an easier-to-digest alternating colors style + Bugfixes: + - Fixed that lab calculations did not account for lab input compatibility + - Fixed that mining drill calculations did not account for mining probability on a resource (#72) +--------------------------------------------------------------------------------------------------- +Version: 2.2.0 +Date: 2021-05-04 + Features: + - Added inserter rates + - Requires you to select an inserter in-world + - Given rates can be somewhat inaccurate when dealing with belts + Changes: + - The UI will now shrink to fit if there are less than nine rows in the table +--------------------------------------------------------------------------------------------------- +Version: 2.1.4 +Date: 2021-04-25 + Bugfixes: + - Fixed an extremely rare desync that could happen on extremely specific ticks + - Fixed not being able to select some Space Exploration entities + - Fixed pollution calculations not accounting for pollution modifier modules +--------------------------------------------------------------------------------------------------- +Version: 2.1.3 +Date: 2021-03-07 + Bugfixes: + - Fixed burner generators not being selectable +--------------------------------------------------------------------------------------------------- +Version: 2.1.2 +Date: 2021-03-02 + Bugfixes: + - Fixed lab calculations not accounting for a lab's base research speed +--------------------------------------------------------------------------------------------------- +Version: 2.1.1 +Date: 2021-02-25 + Features: + - Added tooltips to the frame action buttons (search, pin, close) + Changes: + - Search textfield will not open on Control + F if the GUI is pinned + Bugfixes: + - Fixed GUI not resetting when search was closed with escape +--------------------------------------------------------------------------------------------------- +Version: 2.1.0 +Date: 2021-02-17 + Features: + - Shift + selecting with the tool will append the new rates onto the previous selection instead of making a new one + - Added name search to GUI (unlocalised) + Changes: + - Adjusted titlebar spacing to match base game + - Updated Russian locale + Bugfixes: + - Fixed entity and tile ghosts being selectable +--------------------------------------------------------------------------------------------------- +Version: 2.0.7 +Date: 2020-12-29 + Features: + - Selecting a furnace will use the previous recipe if no recipe is currently active on that furnace + Changes: + - Added deadlock's stacking beltboxes entities to blacklist +--------------------------------------------------------------------------------------------------- +Version: 2.0.6 +Date: 2020-12-24 + Bugfixes: + - Fixed a crash when another mod removes the vanilla "introduction" tip +--------------------------------------------------------------------------------------------------- +Version: 2.0.5 +Date: 2020-12-20 + Features: + - Added per-player setting to adjust the number of visible rows in the rates table + Changes: + - Increased default visible rows count to ten + Bugfixes: + - Fixed incorrect burner energy source calculations with reguards to burner efficiency + - Fixed being able to select Factorissimo buildings and hidden lights + - Fixed horizontal scroll bar showing up at imperfect GUI scales + - Fixed rates not being shown for fluid energy sources in some cases +--------------------------------------------------------------------------------------------------- +Version: 2.0.4 +Date: 2020-12-15 + Bugfixes: + - Fixed being able to select many entities that made no sense +--------------------------------------------------------------------------------------------------- +Version: 2.0.3 +Date: 2020-12-15 + Bugfixes: + - Fixed a crash when selecting a miner with no ore underneath +--------------------------------------------------------------------------------------------------- +Version: 2.0.2 +Date: 2020-12-07 + Bugfixes: + - Fixed another crash on configuration changed + - Fixed a crash when using any non-english locale +--------------------------------------------------------------------------------------------------- +Version: 2.0.1 +Date: 2020-12-07 + Changes: + - Updated Russian locale + Bugfixes: + - Fixed a crash on configuration changed + - Fixed a crash when the GUI was opened +--------------------------------------------------------------------------------------------------- +Version: 2.0.0 +Date: 2020-12-07 + Features: + - Added new rates + - Energy source consumption (burner, fluid, and heat) for all entities + - Pollution production and consumption for all entities + - Heat output for reactors + - Fluid input and output rates for boilers + - Added new units + - Per-second, minute, and hour for all containers and storage tanks (alongside cargo and fluid wagons) + - Per-second, minute, and hour for pollution + - Added manual multiplier box and slider + - Added tips and tricks + Changes: + - Changed how the selection tool behaves + - Regular select will select production machines + - Shift + select will select entities that produce or consume electricity + - Redesigned the GUI + - The input and output tables are combined into one + - Inputs will be shown as negative numbers and are colored red, while outputs are colored green + - Consolidated train wagon units into the generic materials "per" rates +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2020-11-29 + Features: + - Added Russian locale (by Astorin) +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2020-11-23 + Features: + - Added power production for all entities where it is applicable + Changes: + - Updated to Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 2020-10-29 + Bugfixes: + - Fixed fluid wagon measurements not showing (by robosa) +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 2020-10-26 + Bugfixes: + - ACTUALLY ACTUALLY fixed product catalyst calculations (by robosa) +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2020-10-02 + Bugfixes: + - Fixed a crash when one player's selection would finish while more than one selection was being processed +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2020-09-19 + Bugfixes: + - Fixed a crash when right-clicking the choose elem button to unset it +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2020-09-18 + Bugfixes: + - Fixed productivity bonus being applied ONLY to product catalysts, instead of the other way around +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2020-09-17 + Bugfixes: + - Fixed inaccurate electric consumption stats for entities with consumption bonuses and/or drain +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2020-09-16 + Bugfixes: + - Fixed productivity bonus being applied to product catalysts +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020-09-15 + Features: + - Added the following rates: + - Electric consumption for all machines + - Electric production and consumption for electric energy interfaces + - Electric production for solar panels + - Fluid consumption for generators + - Added the ability to "pin" the GUI so it will remain open alongside other windows + - Results are sorted by rate from largest to smallest + Changes: + - Updated to Factorio 1.0 + - The base mod is now marked as optional, to enable support for total overhaul mods +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 2020-06-24 + Bugfixes: + - Fixed a crash related to GUI style changes in Factorio 0.18.33 +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 2020-06-20 + Bugfixes: + - ACTUALLY fixed incorrect lab consumption calculations +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2020-06-09 + Bugfixes: + - Fixed incorrect lab consumption calculations +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2020-05-27 + Features: + - Initial release diff --git a/RateCalculator_3.2.3/control.lua b/RateCalculator/control.lua similarity index 100% rename from RateCalculator_3.2.3/control.lua rename to RateCalculator/control.lua diff --git a/RateCalculator_3.2.3/data.lua b/RateCalculator/data.lua similarity index 100% rename from RateCalculator_3.2.3/data.lua rename to RateCalculator/data.lua diff --git a/RateCalculator_3.2.3/graphics/nudge-decrease.png b/RateCalculator/graphics/nudge-decrease.png similarity index 100% rename from RateCalculator_3.2.3/graphics/nudge-decrease.png rename to RateCalculator/graphics/nudge-decrease.png diff --git a/RateCalculator_3.2.3/graphics/nudge-increase.png b/RateCalculator/graphics/nudge-increase.png similarity index 100% rename from RateCalculator_3.2.3/graphics/nudge-increase.png rename to RateCalculator/graphics/nudge-increase.png diff --git a/RateCalculator_3.2.3/graphics/pollution.png b/RateCalculator/graphics/pollution.png similarity index 100% rename from RateCalculator_3.2.3/graphics/pollution.png rename to RateCalculator/graphics/pollution.png diff --git a/RateCalculator_3.2.3/graphics/power.png b/RateCalculator/graphics/power.png similarity index 100% rename from RateCalculator_3.2.3/graphics/power.png rename to RateCalculator/graphics/power.png diff --git a/RateCalculator_3.2.3/graphics/shortcut-x24-black.png b/RateCalculator/graphics/shortcut-x24-black.png similarity index 100% rename from RateCalculator_3.2.3/graphics/shortcut-x24-black.png rename to RateCalculator/graphics/shortcut-x24-black.png diff --git a/RateCalculator_3.2.3/graphics/shortcut-x24-white.png b/RateCalculator/graphics/shortcut-x24-white.png similarity index 100% rename from RateCalculator_3.2.3/graphics/shortcut-x24-white.png rename to RateCalculator/graphics/shortcut-x24-white.png diff --git a/RateCalculator_3.2.3/graphics/shortcut-x32-black.png b/RateCalculator/graphics/shortcut-x32-black.png similarity index 100% rename from RateCalculator_3.2.3/graphics/shortcut-x32-black.png rename to RateCalculator/graphics/shortcut-x32-black.png diff --git a/RateCalculator_3.2.3/graphics/shortcut-x32-white.png b/RateCalculator/graphics/shortcut-x32-white.png similarity index 100% rename from RateCalculator_3.2.3/graphics/shortcut-x32-white.png rename to RateCalculator/graphics/shortcut-x32-white.png diff --git a/RateCalculator/info.json b/RateCalculator/info.json new file mode 100644 index 00000000..77c79a0f --- /dev/null +++ b/RateCalculator/info.json @@ -0,0 +1,19 @@ +{ + "name": "RateCalculator", + "version": "3.2.4", + "title": "Rate Calculator", + "description": "Calculate maximum production and consumption rates for the selected machines.", + "author": "raiguard", + "contact": "https://github.com/raiguard/RateCalculator", + "homepage": "https://github.com/raiguard/RateCalculator", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.80", "flib >= 0.12.9"], + "package": { + "git_publish_branch": "master", + "ignore": [ "crowdin.yml", "imgui.ini", "screenshots/*", "stylua.toml" ], + "scripts": { + "prepublish": "factorio-crowdin-sync" + }, + "sync_portal_details": true + } +} diff --git a/RateCalculator_3.2.3/locale/af/RateCalculator.cfg b/RateCalculator/locale/af/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/af/RateCalculator.cfg rename to RateCalculator/locale/af/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/ar/RateCalculator.cfg b/RateCalculator/locale/ar/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/ar/RateCalculator.cfg rename to RateCalculator/locale/ar/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/ca/RateCalculator.cfg b/RateCalculator/locale/ca/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/ca/RateCalculator.cfg rename to RateCalculator/locale/ca/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/cs/RateCalculator.cfg b/RateCalculator/locale/cs/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/cs/RateCalculator.cfg rename to RateCalculator/locale/cs/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/da/RateCalculator.cfg b/RateCalculator/locale/da/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/da/RateCalculator.cfg rename to RateCalculator/locale/da/RateCalculator.cfg diff --git a/RateCalculator/locale/de/RateCalculator.cfg b/RateCalculator/locale/de/RateCalculator.cfg new file mode 100644 index 00000000..b6eacf69 --- /dev/null +++ b/RateCalculator/locale/de/RateCalculator.cfg @@ -0,0 +1,86 @@ +[controls] +rcalc-get-selection-tool=Erhalte das Raten-Berechnungs-Werkzeug + +[gui] +rcalc-capacity-divisor-description=[font=default-bold][color=255, 230, 192]KapazitΓ€tsdivisor[/color][/font]\nWΓ€hle ein Objekt aus, um die Zeitspanne mit der Gegenstand- oder FlΓΌssigkeitskapazitΓ€t dieses Objektes zu verrechnen. +rcalc-caption-with-suffix=__1__ __2__ +rcalc-colored-caption=[color=__2__]__1__[/color] +rcalc-consumption=Verbrauch +rcalc-error-incompatible-science-packs=Einige Labore haben inkompatible Wissenschaftspakete +rcalc-error-inserter-rates-estimates-description=Bei der Berechnung der Greifarme wird davon ausgegangen, dass der Greifarm direkt von einem Container in einen anderen umschlΓ€gt und dass er seine Standard-Aufnahme- und Abgabeorte verwendet. Wenn der Greifarm mit einem Transportband interagiert oder wenn die Aufnahme- und Abgabeorte geΓ€ndert wurden, weichen die tatsΓ€chlichen Raten von den angezeigten Werten ab. +rcalc-error-inserter-rates-estimates=Greifarm-basierte Raten sind nur SchΓ€tzungen [img=info] +rcalc-error-max-crafting-speed-description=Die Factorio-Engine hat ein hartes Limit von einem Herstellungszyklus und einem ProduktivitΓ€tszyklus pro Spieltick. Sobald diese Grenze erreicht ist, hat eine weitere ErhΓΆhung der Herstellungsgeschwindigkeit oder der ProduktivitΓ€t keine Wirkung mehr. +rcalc-error-max-crafting-speed=Einige Maschinen haben die maximale Herstellungsgeschwindigkeit erreicht [img=info] +rcalc-error-no-active-research=Es gibt keine aktive Forschung +rcalc-error-no-fuel=Einige Maschinen haben keinen Treibstoff +rcalc-error-no-input-fluid=Einige Maschinen haben keine EingangsflΓΌssigkeit +rcalc-error-no-mineable-resources=Einige Bohrer haben keine abbaubaren Ressourcen +rcalc-error-no-power-description=Effektverteiler mΓΌssen Strom haben, damit ihre Module die Raten von Maschinen in Reichweite beeinflussen kΓΆnnen. +rcalc-error-no-power=Einige Maschinen haben keinen Strom [img=info] +rcalc-error-no-recipe=Einige Maschinen haben kein festes Rezept +rcalc-ingredients=Komponenten +rcalc-intermediates=Zwischenprodukte +rcalc-machines-caption=__1__ Γ— __2__ +rcalc-machines=Maschinen +rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]Manueller Multiplikator[/color][/font]\nAlle Raten werden mit dieser Zahl multipliziert. +rcalc-net-machines-caption=__1__ [color=__2__](__3__)[/color] +rcalc-net-rate=Netto-Rate +rcalc-next-set=NΓ€chstes Set (__1__/__2__) +rcalc-no-rates-to-display=Keine Raten zum Anzeigen +rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__: In __1__ ΓΆffnen +rcalc-parenthesized-caption=(__1__) +rcalc-previous-set=Vorheriges Set (__1__/__2__) +rcalc-producers=Produzenten +rcalc-production=Produktion +rcalc-products=Produkte +rcalc-rate=Rate +rcalc-timescale-suffix-inserters= Greifarme +rcalc-timescale-suffix-per-hour=/Std +rcalc-timescale-suffix-per-minute=/Min +rcalc-timescale-suffix-per-second=/Sek +rcalc-timescale-suffix-transport-belts= FließbΓ€nder +rcalc-timescale=Zeitspanne +rcalc-tooltip-entry=[font=default-semibold]__1__:[/font] __2__\n +rcalc-tooltip-title=[font=default-bold][color=255, 230, 192]__1__[/color][/font]\n + +[item-name] +rcalc-heat-dummy=WΓ€rme +rcalc-pollution-dummy=Umweltverschmutzung +rcalc-power-dummy=Strom +rcalc-selection-tool=WΓ€hler fΓΌr Ratenrechner + +[mod-description] +RateCalculator=Berechnet die maximalen Produktions- und Verbrauchsraten fΓΌr die ausgewΓ€hlten Maschinen. + +[mod-name] +RateCalculator=Rate Calculator + +[mod-setting-description] +rcalc-default-gui-location=Sie kΓΆnnen die GUI jederzeit auf ihre Standardposition zurΓΌcksetzen, indem Sie mit einem Mittelklick auf die Titelleiste klicken. +rcalc-dismiss-tool-on-selection=Nachdem Sie einen Bereich ausgewΓ€hlt haben, wird das Tool Rate Calculator automatisch von Ihrem Cursor entfernt. +rcalc-show-calculation-errors=Wenn Probleme wΓ€hrend der Berechnungen erkannt werden, werden diese in der GUI angezeigt. +rcalc-show-power-consumption=Stromverbrauch in der GUI anzeigen. StandardmÀßig deaktiviert, da es nicht sehr oft nΓΌtzlich ist. + +[mod-setting-name] +rcalc-default-gui-location=Standard-GUI-Position +rcalc-default-timescale=Standard-Zeitspanne +rcalc-dismiss-tool-on-selection=Werkzeug nach Auswahl verwerfen +rcalc-show-calculation-errors=Rechenfehler anzeigen +rcalc-show-completion-checkboxes=KontrollkΓ€stchen fΓΌr Fertigstellung anzeigen +rcalc-show-intermediate-breakdowns=Spalte der Ausgangs-/Eingangsraten von Zwischenprodukten anzeigen +rcalc-show-pollution=Zeige Umweltverschmutzungs-Raten +rcalc-show-power-consumption=Zeige Stromverbrauch + +[shortcut-name] +rcalc-get-selection-tool=Ratenberechner + +[string-mod-setting] +rcalc-default-gui-location-center=Zentrum +rcalc-default-gui-location-top-left=Oben links +rcalc-default-timescale-inserters=Greifarme +rcalc-default-timescale-per-hour=Pro Stunde +rcalc-default-timescale-per-minute=Pro Minute +rcalc-default-timescale-per-second=Pro Sekunde +rcalc-default-timescale-power=Strom +rcalc-default-timescale-transport-belts=FließbΓ€nder + diff --git a/RateCalculator_3.2.3/locale/el/RateCalculator.cfg b/RateCalculator/locale/el/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/el/RateCalculator.cfg rename to RateCalculator/locale/el/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/en/RateCalculator.cfg b/RateCalculator/locale/en/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/en/RateCalculator.cfg rename to RateCalculator/locale/en/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/es-ES/RateCalculator.cfg b/RateCalculator/locale/es-ES/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/es-ES/RateCalculator.cfg rename to RateCalculator/locale/es-ES/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/fi/RateCalculator.cfg b/RateCalculator/locale/et/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/fi/RateCalculator.cfg rename to RateCalculator/locale/et/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/he/RateCalculator.cfg b/RateCalculator/locale/fi/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/he/RateCalculator.cfg rename to RateCalculator/locale/fi/RateCalculator.cfg diff --git a/RateCalculator/locale/fr/RateCalculator.cfg b/RateCalculator/locale/fr/RateCalculator.cfg new file mode 100644 index 00000000..df709bfd --- /dev/null +++ b/RateCalculator/locale/fr/RateCalculator.cfg @@ -0,0 +1,86 @@ +[controls] +rcalc-get-selection-tool=Prendre l'outil de calcul de taux + +[gui] +rcalc-capacity-divisor-description=[font=default-bold][color=255,230,192]Diviseur de capacitΓ©[/color][/font]\nChoisissez une entitΓ© avec laquelle mesurer la capacitΓ© de cet Γ©lΓ©ment ou fluide. +rcalc-caption-with-suffix=__1__ __2__ +rcalc-colored-caption=[color=__2__]__1__[/color] +rcalc-consumption=Consommation +rcalc-error-incompatible-science-packs=Certains laboratoires ont des packs de science incompatibles +rcalc-error-inserter-rates-estimates-description=Le taux des bras robotisΓ©s est calculΓ© en supposant que celui-ci transfΓ¨re directement d'un contenant Γ  un autre, et qu'il utilise les emplacements par dΓ©faut de ramassage et de dΓ©pΓ΄t. Si le bras intΓ©ragit avec un convoyeur, ou si l'emplacement de ramassage/dΓ©pΓ΄t ont Γ©tΓ© modifiΓ©s, alors le taux rΓ©el va diffΓ©rΓ© de ce qui est affichΓ©. +rcalc-error-inserter-rates-estimates=Les taux basΓ©s sur les bras robotisΓ©s sont des estimations [img=info] +rcalc-error-max-crafting-speed-description=L'engin de Factorio a une limite stricte de un cycle de fabrication et de un cycle de production par tique du jeu. Une fois cette limite atteinte, augmenter la vitesse de fabrication ou de production n'a pas d'effet supplΓ©mentaire. +rcalc-error-max-crafting-speed=Certaines machines ont atteint la vitesse de fabrication maximale [img=info] +rcalc-error-no-active-research=Il n'y a aucune recherche active +rcalc-error-no-fuel=Certaines machines n'ont pas de carburant +rcalc-error-no-input-fluid=Certaines machines ne disposent pas de fluide d'entrΓ©e +rcalc-error-no-mineable-resources=Certaines foreuses ne disposent pas de ressources minables +rcalc-error-no-power-description=Les balises doivent avoir du courant pour que leurs modules affectent les vitesses des machines Γ  portΓ©e. +rcalc-error-no-power=Certaines machines n'ont pas de courant [img=info] +rcalc-error-no-recipe=Certaines machines n'ont aucune recette dΓ©finie +rcalc-ingredients=IngrΓ©dients +rcalc-intermediates=IntermΓ©diaires +rcalc-machines-caption=__1__ Γ— __2__ +rcalc-machines=machines +rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]Multiplicateur manuel[/color][/font]\nTous les taux seront multipliΓ©s par ce nombre. +rcalc-net-machines-caption=__1__ [color=__2__](__3__)[/color] +rcalc-net-rate=Taux net +rcalc-next-set=Prochain ensemble (__1__/__2__) +rcalc-no-rates-to-display=Aucun taux Γ  afficher +rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__ : Ouvrir dans __1__ +rcalc-parenthesized-caption=(__1__) +rcalc-previous-set=Ensemble prΓ©cΓ©dent (__1__/__2__) +rcalc-producers=producteurs +rcalc-production=Production +rcalc-products=Produits +rcalc-rate=Taux +rcalc-timescale-suffix-inserters= bras robotisΓ©s +rcalc-timescale-suffix-per-hour=/h +rcalc-timescale-suffix-per-minute=/m +rcalc-timescale-suffix-per-second=/s +rcalc-timescale-suffix-transport-belts= convoyeurs +rcalc-timescale=Γ‰chelle de temps +rcalc-tooltip-entry=[font=default-semibold]__1__ :[/font] __2__\n +rcalc-tooltip-title=[font=default-bold][color=255, 230, 192]__1__[/color][/font]\n + +[item-name] +rcalc-heat-dummy=Chaleur +rcalc-pollution-dummy=Pollution +rcalc-power-dummy=Γ‰nergie +rcalc-selection-tool=SΓ©lecteur du Calculateur de Taux + +[mod-description] +RateCalculator=Calculer les taux de production et de consommation maximaux des machines sΓ©lectionnΓ©es. + +[mod-name] +RateCalculator=Calculateur de dΓ©bits + +[mod-setting-description] +rcalc-default-gui-location=Vous pouvez rΓ©initialiser l'interface Γ  son emplacement par dΓ©faut Γ  tout moment en cliquant avec le bouton du milieu la barre de titre. +rcalc-dismiss-tool-on-selection=AprΓ¨s avoir sΓ©lectionnΓ© une zone, l'outil Calculateur de taux sera automatiquement retirΓ© de votre curseur. +rcalc-show-calculation-errors=Si des problΓ¨mes sont dΓ©tectΓ©s pendant l'exΓ©cution des calculs, ils seront affichΓ©s dans l'interface graphique. +rcalc-show-power-consumption=Affiche le taux de consommation d'Γ©nergie dans l'interface graphique. DΓ©sactivΓ© par dΓ©faut car il n'est pas utile trΓ¨s souvent. + +[mod-setting-name] +rcalc-default-gui-location=Emplacement de l'interface par dΓ©faut +rcalc-default-timescale=Γ‰chelle de temps par dΓ©faut +rcalc-dismiss-tool-on-selection=Retirer l'outil aprΓ¨s la sΓ©lection +rcalc-show-calculation-errors=Afficher les erreurs de calcul +rcalc-show-completion-checkboxes=Afficher les cases Γ  cocher de complΓ©tion +rcalc-show-intermediate-breakdowns=Afficher la colonne de taux de sortie/entrΓ©e des intermΓ©diaires +rcalc-show-pollution=Afficher le taux de pollution +rcalc-show-power-consumption=Afficher la consommation d'Γ©nergie + +[shortcut-name] +rcalc-get-selection-tool=Calculateur de taux + +[string-mod-setting] +rcalc-default-gui-location-center=Centrer +rcalc-default-gui-location-top-left=En haut Γ  gauche +rcalc-default-timescale-inserters=Bras robotisΓ©s +rcalc-default-timescale-per-hour=Par heure +rcalc-default-timescale-per-minute=Par minute +rcalc-default-timescale-per-second=Par seconde +rcalc-default-timescale-power=Γ‰nergie +rcalc-default-timescale-transport-belts=Convoyeurs + diff --git a/RateCalculator_3.2.3/locale/hu/RateCalculator.cfg b/RateCalculator/locale/he/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/hu/RateCalculator.cfg rename to RateCalculator/locale/he/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/it/RateCalculator.cfg b/RateCalculator/locale/hu/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/it/RateCalculator.cfg rename to RateCalculator/locale/hu/RateCalculator.cfg diff --git a/RateCalculator/locale/it/RateCalculator.cfg b/RateCalculator/locale/it/RateCalculator.cfg new file mode 100644 index 00000000..e5a05678 --- /dev/null +++ b/RateCalculator/locale/it/RateCalculator.cfg @@ -0,0 +1,86 @@ +[controls] +rcalc-get-selection-tool=Ottieni calcolatore di rateo + +[gui] +rcalc-capacity-divisor-description=[font=default-bold][color=255,230,192]Divisore di capacitΓ [/color][/font]\nScegli un'entitΓ  da misurare in confronto alla capacitΓ  fluida o di oggetti di tale entitΓ . +rcalc-caption-with-suffix=__1__ __2__ +rcalc-colored-caption=[color=__2__]__1__[/color] +rcalc-consumption=Consumo +rcalc-error-incompatible-science-packs=Alcuni laboratori hanno pacchetti scientifici incompatibili +rcalc-error-inserter-rates-estimates-description=I ratei degli inseritori sono calcolati partendo dal presupposto che l'inseritore sta trasferendo direttamente da un contenitore a un altro, e che sta utilizzando le posizioni di carico e scarico predefinite. Se l'inseritore sta interagendo con un rullo trasportatore, o se le posizioni di carico/scarico sono state modificate, allora il rateo effettivo differirΓ  da quanto riportato. +rcalc-error-inserter-rates-estimates=I ratei basati sugli inseritori sono stimati [img=info] +rcalc-error-max-crafting-speed-description=Il calcolatore di Factorio ha la limitazione di un ciclo di lavorazione e un ciclo di produzione per tick di gioco. Una volta raggiunto il limite, aumentare la velocitΓ  di produzione ulteriormente non ha effetto. +rcalc-error-max-crafting-speed=Alcuni macchinari hanno raggiunto la massima velocitΓ  di lavorazione [img=info] +rcalc-error-no-active-research=Non ci sono ricerche attive +rcalc-error-no-fuel=Alcuni macchinari non hanno combustibile +rcalc-error-no-input-fluid=Alcuni macchinari non hanno fluido in ingresso +rcalc-error-no-mineable-resources=Alcune trivelle non hanno risorse scavabili +rcalc-error-no-power-description=I fari devono avere potenza affinchΓ© i loro moduli possano avere effetto sui macchinari a portata. +rcalc-error-no-power=Alcuni macchinari non hanno potenza [img=info] +rcalc-error-no-recipe=Alcuni macchinari non hanno ricette impostate +rcalc-ingredients=Ingredienti +rcalc-intermediates=Intermedi +rcalc-machines-caption=__1__ Γ— __2__ +rcalc-machines=macchinari +rcalc-manual-multiplier-description=[font=default-bold][color=255,230,192]Moltiplicatore manuale[/color][/font]\nTutti i ratei saranno moltiplicati per questo numero. +rcalc-net-machines-caption=__1__ [color=__2__](__3__)[/color] +rcalc-net-rate=Rateo netto +rcalc-next-set=Prossimo set (__1__/__2__) +rcalc-no-rates-to-display=Nessun rateo da visualizzare +rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__: Apri in __1__ +rcalc-parenthesized-caption=(__1__) +rcalc-previous-set=Set precedente (__1__/__2__) +rcalc-producers=produttori +rcalc-production=Produzione +rcalc-products=Prodotti +rcalc-rate=Rateo +rcalc-timescale-suffix-inserters= inseritori +rcalc-timescale-suffix-per-hour=/hr +rcalc-timescale-suffix-per-minute=/m +rcalc-timescale-suffix-per-second=/s +rcalc-timescale-suffix-transport-belts= rulli +rcalc-timescale=Scala temporale +rcalc-tooltip-entry=[font=default-semibold]__1__:[/font] __2__\n +rcalc-tooltip-title=[font=default-bold][color=255, 230, 192]__1__[/color][/font]\n + +[item-name] +rcalc-heat-dummy=Calore +rcalc-pollution-dummy=Inquinamento +rcalc-power-dummy=Potenza +rcalc-selection-tool=Selettore del calcolatore di rateo + +[mod-description] +RateCalculator=Calcola la produzione massima e ratei di consumo per i macchinari selezionati. + +[mod-name] +RateCalculator=Calcolatore di rateo + +[mod-setting-description] +rcalc-default-gui-location=Puoi reimpostare l'interfaccia alla sua posizione originale in ogni momento premento il tasto centrale del mouse sulla barra tel titolo. +rcalc-dismiss-tool-on-selection=Dopo aver selezionato un'area, il Calcolatore di Rateo verrΓ  automaticamente rimosso dal cursore. +rcalc-show-calculation-errors=Se vengono rilevati problemi durante l'esecuzione di calcoli, verranno visualizzati nell'interfaccia. +rcalc-show-power-consumption=Visualizza il consumo energetico nell'interfaccia. Disabilitato come predefinito in quanto non molto utile. + +[mod-setting-name] +rcalc-default-gui-location=Posizione predefinita dell'interfaccia +rcalc-default-timescale=Scala temporale predefinita +rcalc-dismiss-tool-on-selection=Rimuovi lo strumento dopo la selezione +rcalc-show-calculation-errors=Mostra errori di calcolo +rcalc-show-completion-checkboxes=Mostra caselle di completamento +rcalc-show-intermediate-breakdowns=Mostra colonna dei ratei intermedi in ingresso/uscita +rcalc-show-pollution=Mostra rateo di inquinamento +rcalc-show-power-consumption=Mostra consumo energetico + +[shortcut-name] +rcalc-get-selection-tool=Calcolatore di rateo + +[string-mod-setting] +rcalc-default-gui-location-center=Centro +rcalc-default-gui-location-top-left=In alto a sinistra +rcalc-default-timescale-inserters=Inseritori +rcalc-default-timescale-per-hour=Ogni ora +rcalc-default-timescale-per-minute=Ogni minuto +rcalc-default-timescale-per-second=Ogni secondo +rcalc-default-timescale-power=Potenza +rcalc-default-timescale-transport-belts=Rulli trasportatori + diff --git a/RateCalculator/locale/ja/RateCalculator.cfg b/RateCalculator/locale/ja/RateCalculator.cfg new file mode 100644 index 00000000..a9fe2b77 --- /dev/null +++ b/RateCalculator/locale/ja/RateCalculator.cfg @@ -0,0 +1,78 @@ +[controls] +rcalc-get-selection-tool=γƒ¬γƒΌγƒˆθ¨ˆη—ツールを取得します + +[gui] +rcalc-capacity-divisor-description=[font=default-bold][color=255, 230, 192]εΉι‡ι™€ζ•°[/color][/font]\nζ–½θ¨­γ‚’ιΈζŠžγ—γ€γγζ–½θ¨­γγ‚’γ‚€γƒ†γƒ γΎγŸγ―ζ΅δ½“γεΉι‡γ«ε―Ύγ—γ¦γ‚Ώγ‚€γƒ γ‚Ήγ‚±γƒΌγƒ«γ‚’θ‘Œγ„γΎγ™γ€‚ +rcalc-consumption=梈費 +rcalc-error-incompatible-science-packs=いく぀かγη ”穢所では互換性γγͺγ„γ‚΅γ‚€γ‚¨γƒ³γ‚Ήγƒ‘γƒƒγ‚―γŒγ‚γ‚ŠγΎγ™ +rcalc-error-inserter-rates-estimates-description=γ‚€γƒ³γ‚΅γƒΌγ‚Ώζ―”ηŽ‡γ―γ€γ‚€γƒ³γ‚΅γƒΌγ‚ΏγŒγƒγ‚§γ‚Ήγƒˆγ‹γ‚‰εˆ₯γγƒγ‚§γ‚ΉγƒˆγΈη›΄ζŽ₯η§»ε‹•γ—γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγγƒ”γƒƒγ‚―γ‚’γƒƒγƒ—γŠγ‚ˆγ³γƒ‰γƒ­γƒƒγƒ—γ‚ͺγƒ•ε ΄ζ‰€γ‚’δ½Ώη”¨γ—γ¦γ„γ‚‹γ¨γ„γ†ε‰ζγ§θ¨ˆη—γ•γ‚Œγ¦γ„γΎγ™γ€‚γ‚€γƒ³γ‚΅γƒΌγ‚ΏγƒΌγŒζ¬ι€γƒ™γƒ«γƒˆγ¨η›ΈδΊ’δ½œη”¨γ—γ¦γ„γ‚‹ε ΄εˆγ€γΎγŸγ―ピックをップ/ドロップγ‚ͺγƒ•ε ΄ζ‰€γŒε€‰ζ›΄γ•γ‚Œγ¦γ„γ‚‹ε ΄εˆγ€εŸιš›γζ―”ηŽ‡γ―θ‘¨η€Ίγ•γ‚Œγ‚‹γ‚‚γγ¨γ―η•°γͺγ‚ŠγΎγ™γ€‚ +rcalc-error-inserter-rates-estimates=γ‚€γƒ³γ‚΅γƒΌγ‚ΏεŸΊζΊ–γζ―”ηŽ‡γ―推εšε€€γ§γ™[img=info] +rcalc-error-max-crafting-speed-description=Factorioγγ‚²γƒΌγƒ γ‚¨γƒ³γ‚Έγƒ³γ«γ―、1γ‚²γƒΌγƒ γƒ†γ‚£γƒƒγ‚―γ‚γŸγ‚Š1θ£½δ½œγ‚΅γ‚€γ‚―γƒ«γ¨1η”Ÿη”£εŠ›θ£½δ½œγ‚΅γ‚€γ‚―γƒ«γγƒγƒΌγƒ‰γͺεˆΆη΄„γŒγ‚γ‚ŠγΎγ™γ€‚γ“γεˆΆη΄„γ«ι”γ™γ‚‹γ¨γ€θ£½δ½œγι€ŸεΊ¦γ‚„η”Ÿη”£εŠ›γ‚’γ•γ‚‰γ«δΈŠγ’γ¦γ‚‚εŠΉζžœγ―γ‚γ‚ŠγΎγ›γ‚“γ€‚ +rcalc-error-max-crafting-speed=いく぀かγθ£½ι€ ζ‰€γ―ζœ€ε€§θ£½δ½œι€ŸεΊ¦γ«ι”γ—γΎγ—γŸ[img=info] +rcalc-error-no-active-research=をクティブγͺη ”η©Άγ―γ‚γ‚ŠγΎγ›γ‚“ +rcalc-error-no-fuel=いく぀かγθ£½ι€ ζ‰€γ«η‡ƒζ–™γŒγ‚γ‚ŠγΎγ›γ‚“ +rcalc-error-no-input-fluid=いく぀かγθ£½ι€ ζ‰€γ«γ―桁体γε…₯εŠ›γŒγ‚γ‚ŠγΎγ›γ‚“ +rcalc-error-no-mineable-resources=いく぀かγζŽ˜ε‰Šζ©Ÿγ«ζŽ‘ζŽ˜ε―θƒ½γͺθ³‡ζΊγŒγ‚γ‚ŠγΎγ›γ‚“ +rcalc-error-no-power-description=ビーコンは、そγγƒ’γ‚Έγƒ₯ールを範囲内γθ£½ι€ ζ‰€γζ―”ηŽ‡γ«ε½±ιŸΏγ‚’δΈŽγˆγ‚‹γŸγ‚γ«γ€ι›»εŠ›γŒεΏ…θ¦γ§γ™γ€‚ +rcalc-error-no-power=いく぀かγθ£½ι€ ζ‰€γ«γ―ι›»εŠ›γŒγ‚γ‚ŠγΎγ›γ‚“ [img=info] +rcalc-error-no-recipe=いく぀かγθ£½ι€ ζ‰€γ«γ―γƒ¬γ‚·γƒ”γŒθ¨­εšγ•γ‚Œγ¦γ„γΎγ›γ‚“ +rcalc-ingredients=材料 +rcalc-intermediates=δΈ­ι–“η”Ÿη”£η‰© +rcalc-machines=製造所 +rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]δΉ—ζ•°γζ‰‹ε…₯εŠ›[/color][/font]\nすべてγζ―”ηŽ‡γ«γ“γζ•°ε€€γŒδΉ—η—γ•γ‚ŒγΎγ™γ€‚ +rcalc-net-rate=η΄”ζ―”ηŽ‡ +rcalc-next-set=欑γγ‚»γƒƒγƒˆ (__1__/__2__) +rcalc-no-rates-to-display=θ‘¨η€Ίγ™γ‚‹ζ―”ηŽ‡γŒγ‚γ‚ŠγΎγ›γ‚“ +rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__: γƒ¬γ‚·γƒ”ζœ¬γ‚’ι–‹γ +rcalc-previous-set=前γγ‚»γƒƒγƒˆ (__1__/__2__) +rcalc-producers=θ£½ι€ θ€… +rcalc-production=θ£½ι€  +rcalc-products=製品 +rcalc-rate=ζ―”ηŽ‡ +rcalc-timescale-suffix-inserters= むンァータ +rcalc-timescale-suffix-per-hour=/ζ™‚ +rcalc-timescale-suffix-per-minute=/εˆ† +rcalc-timescale-suffix-per-second=/η§’ +rcalc-timescale-suffix-transport-belts= γƒ™γƒ«γƒˆ +rcalc-timescale=タむムスケール + +[item-name] +rcalc-heat-dummy=熱 +rcalc-pollution-dummy=ζ±šζŸ“ +rcalc-power-dummy=ι›»εŠ› +rcalc-selection-tool=Rate CalculatorγιΈζŠž + +[mod-description] +RateCalculator=ιΈζŠžγ—γŸθ£½ι€ ζ‰€γζœ€ε€§η”Ÿη”£ζ―”ηŽ‡γ¨ζΆˆθ²»ζ―”ηŽ‡γ‚’θ¨ˆη—する。 + +[mod-name] + +[mod-setting-description] +rcalc-default-gui-location=γ‚Ώγ‚€γƒˆγƒ«γƒγƒΌγ‚’δΈ­γ‚―γƒͺックすることで、い぀でもGUIγ‚’γƒ‡γƒ•γ‚©γƒ«γƒˆγδ½η½γ«ζˆ»γ™γ“γ¨γŒγ§γγΎγ™γ€‚ +rcalc-dismiss-tool-on-selection=エγƒͺγ‚’ιΈζŠžεΎŒγ€θ‡ͺε‹•ηš„γ«Rate Calculator γƒ„γƒΌγƒ«γ―γƒžγ‚¦γ‚Ήγ‚«γƒΌγ‚½γƒ«γ‹γ‚‰θ§£ι™€γ•γ‚ŒγΎγ™γ€‚ +rcalc-show-calculation-errors=計η—εŸθ‘ŒδΈ­γ«ε•ι‘ŒγŒζ€œε‡Ίγ•γ‚ŒγŸε ΄εˆγ―、GUIγ«θ‘¨η€Ίγ•γ‚ŒγΎγ™γ€‚ +rcalc-show-power-consumption=GUIγ§ζΆˆθ²»ι›»εŠ›ζ―”ηŽ‡γ‚’θ‘¨η€Ίγ—γΎγ™γ€‚γ‚γΎγ‚Šε½Ήγ«η«‹γŸγͺいγγ§γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγ§γ―η„‘εŠΉγ«γͺっています。 + +[mod-setting-name] +rcalc-default-gui-location=γƒ‡γƒ•γ‚©γƒ«γƒˆγGUIγε ΄ζ‰€ +rcalc-default-timescale=γƒ‡γƒ•γ‚©γƒ«γƒˆγγ‚Ώγ‚€γƒ γ‚Ήγ‚±γƒΌγƒ«: +rcalc-dismiss-tool-on-selection=ιΈζŠžγ—γŸεΎŒγ«γƒ„γƒΌγƒ«γ‚’ι–‰γ˜γ‚‹ +rcalc-show-calculation-errors=計η—エラーを葨瀺する +rcalc-show-completion-checkboxes=εŒδΊ†γγƒγ‚§γƒƒγ‚―γƒœγƒƒγ‚―γ‚Ήγ‚’θ‘¨η€Ίγ™γ‚‹ +rcalc-show-intermediate-breakdowns=δΈ­ι–“ε‡ΊεŠ›/ε…₯εŠ›γƒ¬γƒΌγƒˆεˆ—γ‚’θ‘¨η€Ί +rcalc-show-pollution=ζ±šζŸ“ηŽ‡γ‚’θ‘¨η€Ί +rcalc-show-power-consumption=ζΆˆθ²»ι›»εŠ›γ‚’θ‘¨η€Ίγ™γ‚‹ + +[shortcut-name] +rcalc-get-selection-tool=γƒ¬γƒΌγƒˆθ¨ˆη—ツール + +[string-mod-setting] +rcalc-default-gui-location-center=δΈ­ε€ +rcalc-default-gui-location-top-left=左上 +rcalc-default-timescale-inserters=むンァータ +rcalc-default-timescale-per-hour=ζ―Žζ™‚ +rcalc-default-timescale-per-minute=ζ―Žεˆ† +rcalc-default-timescale-per-second=ζ―Žη§’ +rcalc-default-timescale-power=ι›»εŠ› +rcalc-default-timescale-transport-belts=ζ¬ι€γƒ™γƒ«γƒˆ + diff --git a/RateCalculator_3.2.3/locale/ko/RateCalculator.cfg b/RateCalculator/locale/ko/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/ko/RateCalculator.cfg rename to RateCalculator/locale/ko/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/nl/RateCalculator.cfg b/RateCalculator/locale/nl/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/nl/RateCalculator.cfg rename to RateCalculator/locale/nl/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/no/RateCalculator.cfg b/RateCalculator/locale/no/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/no/RateCalculator.cfg rename to RateCalculator/locale/no/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/pl/RateCalculator.cfg b/RateCalculator/locale/pl/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/pl/RateCalculator.cfg rename to RateCalculator/locale/pl/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/pt-BZ/RateCalculator.cfg b/RateCalculator/locale/pt-BZ/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/pt-BZ/RateCalculator.cfg rename to RateCalculator/locale/pt-BZ/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/pt-PT/RateCalculator.cfg b/RateCalculator/locale/pt-PT/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/pt-PT/RateCalculator.cfg rename to RateCalculator/locale/pt-PT/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/ro/RateCalculator.cfg b/RateCalculator/locale/ro/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/ro/RateCalculator.cfg rename to RateCalculator/locale/ro/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/ru/RateCalculator.cfg b/RateCalculator/locale/ru/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/ru/RateCalculator.cfg rename to RateCalculator/locale/ru/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/sr/RateCalculator.cfg b/RateCalculator/locale/sr/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/sr/RateCalculator.cfg rename to RateCalculator/locale/sr/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/sv-SE/RateCalculator.cfg b/RateCalculator/locale/sv-SE/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/sv-SE/RateCalculator.cfg rename to RateCalculator/locale/sv-SE/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/tr/RateCalculator.cfg b/RateCalculator/locale/tr/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/tr/RateCalculator.cfg rename to RateCalculator/locale/tr/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/uk/RateCalculator.cfg b/RateCalculator/locale/uk/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/uk/RateCalculator.cfg rename to RateCalculator/locale/uk/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/vi/RateCalculator.cfg b/RateCalculator/locale/vi/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/vi/RateCalculator.cfg rename to RateCalculator/locale/vi/RateCalculator.cfg diff --git a/RateCalculator_3.2.3/locale/zh-CN/RateCalculator.cfg b/RateCalculator/locale/zh-CN/RateCalculator.cfg similarity index 100% rename from RateCalculator_3.2.3/locale/zh-CN/RateCalculator.cfg rename to RateCalculator/locale/zh-CN/RateCalculator.cfg diff --git a/RateCalculator/locale/zh-TW/RateCalculator.cfg b/RateCalculator/locale/zh-TW/RateCalculator.cfg new file mode 100644 index 00000000..156804a5 --- /dev/null +++ b/RateCalculator/locale/zh-TW/RateCalculator.cfg @@ -0,0 +1,64 @@ +[controls] + +[gui] +rcalc-caption-with-suffix=__1__ __2__ +rcalc-colored-caption=[color=__2__]__1__[/color] +rcalc-consumption=ζΆˆθ€—ι‡ +rcalc-error-no-active-research=η„‘ζ­£εœ¨ι€²θ‘Œηš„η ”η©Ά +rcalc-error-no-fuel=ζœ‰δΊ›ζ©Ÿε™¨η„‘η‡ƒζ–™ +rcalc-error-no-input-fluid=ζœ‰δΊ›ζ©Ÿε™¨η„‘ζ΅ι«”θΌΈε…₯ +rcalc-error-no-mineable-resources=ζœ‰δΊ›ζŽ‘η€¦ζ©Ÿη„‘ε―ζŽ‘ι›†ηš„θ³‡ζΊ +rcalc-error-no-power=ζœ‰δΊ›ζ©Ÿε™¨η„‘δΎ›ι›» +rcalc-error-no-recipe=ζœ‰δΊ›ζ©Ÿε™¨ζœͺθ¨­εšι…ζ–Ή +rcalc-ingredients=εŽŸζ–™ +rcalc-intermediates=中間甒物 +rcalc-machines-caption=__1__ Γ— __2__ +rcalc-machines=ζ©Ÿε™¨ +rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]手動倍數[/color][/font]\nζ‰€ζœ‰ι€ŸηŽ‡ε°‡δΉ˜δ»₯該數字。 +rcalc-net-machines-caption=__1__ [color=__2__](__3__)[/color] +rcalc-net-rate=ε―¦ +rcalc-next-set=δΈ‹δΈ€η΅„ (__1__/__2__) +rcalc-no-rates-to-display=η„‘ι€ŸηŽ‡ε―ι‘―η€Ί +rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__οΌšζ–Ό__1__中打開 +rcalc-parenthesized-caption=(__1__) +rcalc-previous-set=δΈŠδΈ€η΅„ (__1__/__2__) +rcalc-producers=η”Ÿη”’θ€… +rcalc-production=甒物 +rcalc-products=甒物 +rcalc-rate=ι€ŸηŽ‡ +rcalc-timescale-suffix-inserters= ζ©Ÿζ’°θ‡‚ +rcalc-timescale-suffix-per-hour=/ζ™‚ +rcalc-timescale-suffix-per-minute=/εˆ† +rcalc-timescale-suffix-per-second=/η§’ +rcalc-timescale-suffix-transport-belts= 傳送帢 +rcalc-tooltip-entry=[font=default-semibold]__1__:[/font] __2__\n +rcalc-tooltip-title=[font=default-bold][color=255, 230, 192]__1__[/color][/font]\n + +[item-name] +rcalc-heat-dummy=熱 +rcalc-pollution-dummy=ζ±™ζŸ“ +rcalc-power-dummy=ι›»εŠ› + +[mod-description] + +[mod-name] +RateCalculator=Rate Calculator + +[mod-setting-description] + +[mod-setting-name] +rcalc-show-pollution=ι‘―η€Ίζ±‘ζŸ“ι€ŸηŽ‡ +rcalc-show-power-consumption=ι‘―η€Ίι›»εŠ›ζΆˆθ€— + +[shortcut-name] + +[string-mod-setting] +rcalc-default-gui-location-center=δΈ­ι–“ +rcalc-default-gui-location-top-left=左上 +rcalc-default-timescale-inserters=ζ©Ÿζ’°θ‡‚ +rcalc-default-timescale-per-hour=每小時 +rcalc-default-timescale-per-minute=ζ―εˆ†ι˜ +rcalc-default-timescale-per-second=每秒 +rcalc-default-timescale-power=ι›»εŠ› +rcalc-default-timescale-transport-belts=傳送帢 + diff --git a/RateCalculator_3.2.3/prototypes/custom-input.lua b/RateCalculator/prototypes/custom-input.lua similarity index 100% rename from RateCalculator_3.2.3/prototypes/custom-input.lua rename to RateCalculator/prototypes/custom-input.lua diff --git a/RateCalculator_3.2.3/prototypes/item.lua b/RateCalculator/prototypes/item.lua similarity index 100% rename from RateCalculator_3.2.3/prototypes/item.lua rename to RateCalculator/prototypes/item.lua diff --git a/RateCalculator_3.2.3/prototypes/shortcut.lua b/RateCalculator/prototypes/shortcut.lua similarity index 100% rename from RateCalculator_3.2.3/prototypes/shortcut.lua rename to RateCalculator/prototypes/shortcut.lua diff --git a/RateCalculator_3.2.3/prototypes/sprite.lua b/RateCalculator/prototypes/sprite.lua similarity index 100% rename from RateCalculator_3.2.3/prototypes/sprite.lua rename to RateCalculator/prototypes/sprite.lua diff --git a/RateCalculator_3.2.3/prototypes/style.lua b/RateCalculator/prototypes/style.lua similarity index 100% rename from RateCalculator_3.2.3/prototypes/style.lua rename to RateCalculator/prototypes/style.lua diff --git a/RateCalculator_3.2.3/scripts/calc-util.lua b/RateCalculator/scripts/calc-util.lua similarity index 99% rename from RateCalculator_3.2.3/scripts/calc-util.lua rename to RateCalculator/scripts/calc-util.lua index 2491cf24..73aa3fa0 100644 --- a/RateCalculator_3.2.3/scripts/calc-util.lua +++ b/RateCalculator/scripts/calc-util.lua @@ -1,4 +1,5 @@ local flib_bounding_box = require("__flib__/bounding-box") +local flib_math = require("__flib__/math") local flib_table = require("__flib__/table") --- @alias RateCategory @@ -284,7 +285,7 @@ function calc_util.process_electric_energy_source(set, entity, invert, emissions local added_emissions = 0 local max_energy_usage = entity_prototype.max_energy_usage or 0 - if max_energy_usage > 0 then + if max_energy_usage > 0 and max_energy_usage < flib_math.max_int53 then local consumption_bonus = (entity.consumption_bonus + 1) local drain = electric_energy_source_prototype.drain local amount = max_energy_usage * consumption_bonus @@ -299,7 +300,7 @@ function calc_util.process_electric_energy_source(set, entity, invert, emissions end local max_energy_production = entity_prototype.max_energy_production - if max_energy_production > 0 then + if max_energy_production > 0 and max_energy_production < flib_math.max_int53 then if entity.type == "solar-panel" then max_energy_production = max_energy_production * entity.surface.solar_power_multiplier end diff --git a/RateCalculator_3.2.3/scripts/calc.lua b/RateCalculator/scripts/calc.lua similarity index 100% rename from RateCalculator_3.2.3/scripts/calc.lua rename to RateCalculator/scripts/calc.lua diff --git a/RateCalculator_3.2.3/scripts/gui-rates.lua b/RateCalculator/scripts/gui-rates.lua similarity index 96% rename from RateCalculator_3.2.3/scripts/gui-rates.lua rename to RateCalculator/scripts/gui-rates.lua index e4d5483c..f99c2ea9 100644 --- a/RateCalculator_3.2.3/scripts/gui-rates.lua +++ b/RateCalculator/scripts/gui-rates.lua @@ -188,7 +188,7 @@ local function on_rates_flow_hovered(e) --- @type LocalisedString local intermediate_breakdown_caption = { "" } if category == "intermediates" then - machine_counts_caption = build_machine_icons(input.machine_counts, true) .. "β†’ " .. machine_counts_caption + machine_counts_caption = machine_counts_caption .. "β†’ " .. build_machine_icons(input.machine_counts, true) local net_rate = output.rate - input.rate rate_caption = { @@ -379,7 +379,7 @@ function gui_rates.update_display_data(self, set) local timescale_data = gui_util.timescale_data[self.selected_timescale] local manual_multiplier = self.manual_multiplier local multiplier = timescale_data.multiplier or 1 - local divisor, type_filter, divide_stacks = gui_util.get_divisor(self) + local divisor, type_filter, divide_stacks, inserter_stack_size = gui_util.get_divisor(self) local dictionary = flib_dictionary.get(self.player.index, "search") or {} local show_power_input = self.player.mod_settings["rcalc-show-power-consumption"].value --[[@as boolean]] local show_pollution = self.player.mod_settings["rcalc-show-pollution"].value --[[@as boolean]] @@ -420,6 +420,12 @@ function gui_rates.update_display_data(self, set) input.rate = input.rate / stack_size end + if inserter_stack_size and inserter_stack_size > 0 and rates.type == "item" and not is_watts then + local stack_size = math.min(game.item_prototypes[rates.name].stack_size, inserter_stack_size) + output.rate = output.rate / stack_size + input.rate = input.rate / stack_size + end + --- @type DisplayCategory local category = "products" local sorting_rate = output.rate diff --git a/RateCalculator_3.2.3/scripts/gui-util.lua b/RateCalculator/scripts/gui-util.lua similarity index 93% rename from RateCalculator_3.2.3/scripts/gui-util.lua rename to RateCalculator/scripts/gui-util.lua index c36d1830..db608968 100644 --- a/RateCalculator_3.2.3/scripts/gui-util.lua +++ b/RateCalculator/scripts/gui-util.lua @@ -89,7 +89,7 @@ function gui_util.calc_inserter_cycles_per_second(inserter) end --- @param self GuiData ---- @return double|uint?, string?, boolean? +--- @return double|uint?, string?, boolean?, uint? function gui_util.get_divisor(self) local timescale_data = gui_util.timescale_data[self.selected_timescale] local type_filter @@ -116,6 +116,7 @@ function gui_util.get_divisor(self) end end + local inserter_stack_size = 0 local divide_stacks = false if divisor_name then local prototype = game.entity_prototypes[divisor_name] @@ -134,19 +135,17 @@ function gui_util.get_divisor(self) divisor = prototype.belt_speed * 480 type_filter = "item" elseif prototype.type == "inserter" then - local cycles_per_second = gui_util.calc_inserter_cycles_per_second(prototype) + divisor = gui_util.calc_inserter_cycles_per_second(prototype) if prototype.stack then - divisor = cycles_per_second - * (1 + prototype.inserter_stack_size_bonus + self.player.force.stack_inserter_capacity_bonus) + inserter_stack_size = 1 + prototype.inserter_stack_size_bonus + self.player.force.stack_inserter_capacity_bonus else - divisor = cycles_per_second - * (1 + prototype.inserter_stack_size_bonus + self.player.force.inserter_stack_size_bonus) + inserter_stack_size = 1 + prototype.inserter_stack_size_bonus + self.player.force.inserter_stack_size_bonus end type_filter = "item" end end - return divisor, type_filter, divide_stacks + return divisor, type_filter, divide_stacks, inserter_stack_size end --- @param filters EntityPrototypeFilter[] diff --git a/RateCalculator_3.2.3/scripts/gui.lua b/RateCalculator/scripts/gui.lua similarity index 100% rename from RateCalculator_3.2.3/scripts/gui.lua rename to RateCalculator/scripts/gui.lua diff --git a/RateCalculator_3.2.3/scripts/migrations.lua b/RateCalculator/scripts/migrations.lua similarity index 100% rename from RateCalculator_3.2.3/scripts/migrations.lua rename to RateCalculator/scripts/migrations.lua diff --git a/RateCalculator_3.2.3/scripts/shortcut.lua b/RateCalculator/scripts/shortcut.lua similarity index 100% rename from RateCalculator_3.2.3/scripts/shortcut.lua rename to RateCalculator/scripts/shortcut.lua diff --git a/RateCalculator_3.2.3/settings.lua b/RateCalculator/settings.lua similarity index 100% rename from RateCalculator_3.2.3/settings.lua rename to RateCalculator/settings.lua diff --git a/RateCalculator_3.2.3/thumbnail.png b/RateCalculator/thumbnail.png similarity index 100% rename from RateCalculator_3.2.3/thumbnail.png rename to RateCalculator/thumbnail.png diff --git a/RateCalculator_3.2.3/README.md b/RateCalculator_3.2.3/README.md deleted file mode 100644 index 02d80f77..00000000 --- a/RateCalculator_3.2.3/README.md +++ /dev/null @@ -1,62 +0,0 @@ -[![shield](https://img.shields.io/badge/Ko--fi-Donate%20-hotpink?logo=kofi&logoColor=white)](https://ko-fi.com/raiguard) -[![shield](https://img.shields.io/badge/Crowdin-Translate-brightgreen)](https://crowdin.com/project/raiguards-factorio-mods) -[![shield](https://img.shields.io/badge/dynamic/json?color=orange&label=Factorio&query=downloads_count&suffix=%20downloads&url=https%3A%2F%2Fmods.factorio.com%2Fapi%2Fmods%2FRateCalculator)](https://mods.factorio.com/mod/RateCalculator) - -# Rate Calculator - -Calculate maximum production and consumption rates for the selected machines. - -## Installation - -[Download on the Mod Portal.](https://mods.factorio.com/mod/RateCalculator) - -## Usage - -Select some machines with the selection tool (found on the shortcut bar, or use -the hotkey `Alt + X`) to calculate the maximum production and consumption rates -for those machines. The rates will be displayed in the GUI: - -![](screenshots/gui.png) - -The GUI shows rates in several categories: - -- **Ingredients:** Materials that the machines import. -- **Products:** Materials that the machines export. -- **Intermediates:** Materials that some machines produce and others consume. -The displayed rate is the "net rate" of that intermediate material. - -With a given set, your goal is to make all of the intermediate net rates -positive (green) or neutral (white). The numbers in parenthesis next to the -machine counts denote "net producers" i.e. how many fewer or more -similarly-configured machines you need to build to produce the material at the -required rate. - -The above screenshot shows that this yellow science set needs at least 1.07 -more assemblers producing engine units to achieve the required input rates. It -also shows that there is an extra assembler making low density structures that -can safely be removed from the set. - -Use the dropdown to change the timescale for the measurements. Select a -container or cargo wagon with the entity selector to scale the measurements to -that container or wagon's capacity (accounting for stack sizes). Select a -transport belt or inserter to measure against that belt or inserter's maximum -item transfer rate. - -Use the manual multiplier input and/or buttons to scale the entire subfactory's -rates and machine counts by that multiplier. - -You can access the previous ten sets by using the navigation buttons in the -titlebar. - -## Tips and tricks - -- Selecting normally will produce a new selection. Alternatively, you can also -hold **shift** to append the existing selection, or use **shift + right click** -to remove machines from the selection. -- Press the shortcut / use the hotkey again when already holding the tool to -show the GUI. -- Power input rates are not shown by default, but can be enabled in the mod -settings. -- Hovering over an entry will give more detailed information about that rate: - -![](screenshots/gui-tooltip.png) diff --git a/RateCalculator_3.2.3/changelog.txt b/RateCalculator_3.2.3/changelog.txt deleted file mode 100644 index 1480ab4d..00000000 --- a/RateCalculator_3.2.3/changelog.txt +++ /dev/null @@ -1,405 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 3.2.3 -Date: 2023-07-30 - Changes: - - Removed the "some rates have been filtered" error - it isn't very useful - Bugfixes: - - Fixed that closing the GUI with the timescale dropdown open would not close the dropdown (#128) - - Fixed that container rates would not take stack sizes into account (#129) ---------------------------------------------------------------------------------------------------- -Version: 3.2.2 -Date: 2023-06-24 - Bugfixes: - - Fixed a crash when selecting a solar panel (#126) ---------------------------------------------------------------------------------------------------- -Version: 3.2.1 -Date: 2023-06-20 - Changes: - - Made adjustments to better support game controllers - Bugfixes: - - Fixed several crashes when the GUI window becomes invalid (#123, #124) - - Fixed an error in Polish translation that was preventing the game from starting ---------------------------------------------------------------------------------------------------- -Version: 3.2.0 -Date: 2023-06-20 - Features: - - Added a new column to intermediate rates showing the output and input rates separately (#111) - - Added alt+click to open the row's material in recipe book (#119) - - Re-added pollution rates (#109) - Changes: - - Improved power icon - - Increased precision of measurements by one decimal place (#115) - Bugfixes: - - Fixed that clicking the close button while pinned would close whatever GUI was open at the time - - Fixed that fluid energy source effectivity was not taken into account (#117) ---------------------------------------------------------------------------------------------------- -Version: 3.1.2 -Date: 2023-05-06 - Changes: - - Adjusted colors to be more readable - Bugfixes: - - Fixed being unable to input zeroes after the decimal point in the manual multiplier field (#112) - - Fixed that the GUI would be created and steal focus if hitting control+f before making the first selection (#113) ---------------------------------------------------------------------------------------------------- -Version: 3.1.1 -Date: 2023-05-02 - Bugfixes: - - Fixed a crash when a fluid with temperature is filtered due to the selected divisor ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 -Date: 2023-04-30 - Features: - - Added a per-player setting to change the default timescale (#102) - - Added optional checkboxes for marking a row as "completed" (#103) - - Re-added set history, saving the last ten sets (#104) - - Re-added support for fluid output temperatures (#107) - Changes: - - Changed default timescale to "per second" - - Manual multiplier will be reset to 1 when making a new selection (#101) - - Renamed "measure" to "timescale" - - Updated base dependency to 1.1.80, flib dependency to 0.12.7 - Bugfixes: - - Fixed that row tooltips were shown inconsistently depending on GUI contents - - Fixed a crash when changing mod options before making an initial selection (#106) - - Fixed that fluid energy source filters were not considered when calculating fluid rates (#105) - - Fixed that power and heat were not shown as watts in intermediate tooltips - - Fixed that some inserters would show NaN rates due to imprecision in an arccosine operation ---------------------------------------------------------------------------------------------------- -Version: 3.0.2 -Date: 2023-04-29 - Gui: - - Added a description to the "some machines have no power" error - Bugfixes: - - Fixed that inserter rates were incorrect and would be divided by zero if no stack size bonuses were researched ---------------------------------------------------------------------------------------------------- -Version: 3.0.1 -Date: 2023-04-28 - Bugfixes: - - Fixed unknown key in timescale dropdown ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 -Date: 2023-04-28 - Features: - - Added localised search - - Machines can be removed from the calculation with shift + right-drag - - Added a per-player setting to change the default GUI position (top-left, center) - - Added a per-player setting to show calculation errors in the GUI - Changes: - - Removed alternate selection tool modes - - Removed pollution rates - - Removed selection history - - Removed tips and tricks - Gui: - - Redesigned the GUI to be more concise and easier to read, and to improve performance - - Ingredients, products, and intermediates are shown in separate tables with clear separation - - Power and heat rates are integrated into the main tables instead of being separate categories - - Manual multiplier has been moved to the header, and the slider has been replaced with up/down buttons - - The machines column displays the icons of the producing machines - - The net rate tooltip shows producing and consuming machines as well as a breakdown of net rate, net machines, and input/output rates/machines - - Calculation errors are shown at the bottom of the GUI - - GUI default position is now at the top-left of the screen - Optimizations: - - Improved performance of rate calculations - - Noticeably reduced GUI update times - - Removed the spreading of rate calculations over multiple ticks - Bugfixes: - - Fixed that mining drills without a fluid box were shown as being able to mine resources with fluid ---------------------------------------------------------------------------------------------------- -Version: 2.4.8 -Date: 2023-02-20 - Bugfixes: - - Fixed that certain buildings generated by Omnicompression would not be selectable ---------------------------------------------------------------------------------------------------- -Version: 2.4.7 -Date: 2023-02-19 - Compatibility: - - Holographic signs are no longer included in the container filters list - Bugfixes: - - Fixed accidental inclusion of development files in mod package - - Fixed a crash when a mining drill mines a resource with no products - - Fixed a crash when filtering by a container with zero inventory slots - - Fixed that heat calculations did not account for efficiency modules ---------------------------------------------------------------------------------------------------- -Version: 2.4.6 -Date: 2022-10-30 - Bugfixes: - - Fixed a crash when using a container filter ---------------------------------------------------------------------------------------------------- -Version: 2.4.5 -Date: 2022-10-27 - Features: - - Added advanced tooltips to material rates that show which recipes are producing or consuming the material - Changes: - - Input rates are no longer displayed as negative numbers for technical reasons - - Updated base and flib dependencies - Bugfixes: - - Fixed boiler rates being inaccurate when input and output fluids have different heat capacities ---------------------------------------------------------------------------------------------------- -Version: 2.4.4 -Date: 2022-05-29 - Changes: - - Updated Chinese locale (by PlexPt) (#92) - - Updated Russian locale (by Astorin) (#91) - Bugfixes: - - Fixed a crash when a fluid energy source has fluid at its default temperature ---------------------------------------------------------------------------------------------------- -Version: 2.4.3 -Date: 2022-02-20 - Features: - - A warning will display when selecting an inserter connected to a belt (#83) - Changes: - - Added Chinese and Korean locales - Bugfixes: - - Fixed that generators did not show pollution rates (#88) - - Fixed that generators without fluid filters would not show rates (#88) - - Fixed that production of fuel burnt results was not being shown (#86) - - Fixed that rocket part rates did not account for the time the rocket took to launch (#85) - - Fixed that the surface's solar power multiplier was not taken into account for solar power output - - Fixed that zero net rates would occasionally show as green or red due to floating point imprecision ---------------------------------------------------------------------------------------------------- -Version: 2.4.2 -Date: 2021-12-09 - Bugfixes: - - Fixed the calculator not correctly handling catalysts (again) ---------------------------------------------------------------------------------------------------- -Version: 2.4.1 -Date: 2021-12-08 - Changes: - - Updated Russian locale (by Astorin) (#77) - Bugfixes: - - Fixed appending selections not working (#78) ---------------------------------------------------------------------------------------------------- -Version: 2.4.0 -Date: 2021-12-03 - Features: - - Added basic support for fluid output temperatures (#57) - - Fluid input temperatures are not supported due to their complexity - - Added navigation buttons, allowing you to access the last ten selections (#18) - - Using the hotkey or clicking the shortcut while already holding the selection tool will open the GUI - Changes: - - Updated tips and tricks content and screenshots - - Updated Russian locale (by Astorin) - Bugfixes: - - Fixed machines from the "Mini Machines" mod being unselectable in some cases (#64) - - The calculator now accounts for the game engine's 1 craft per tick limitation (#66) ---------------------------------------------------------------------------------------------------- -Version: 2.3.1 -Date: 2021-10-25 - Features: - - Added a warning when selecting a lab without an active research - Changes: - - Updated Russian locale (by Astorin) - Bugfixes: - - Fixed rate tooltips rounding to the nearest whole number - - Fixed the GUI soft-locking when selecting the inserter units in some situations ---------------------------------------------------------------------------------------------------- -Version: 2.3.0 -Date: 2021-10-23 - Features: - - Added a setting to automatically dismiss the selection tool when the GUI opens - - Added a warning when selecting unpowered beacons - Gui: - - Added warnings when there are no rates for the selected timescale, and when there are no search results - - Middle-clicking the titlebar will re-center the GUI - - Search results will only update after you quit typing for half a second - - The rates table now uses an easier-to-digest alternating colors style - Bugfixes: - - Fixed that lab calculations did not account for lab input compatibility - - Fixed that mining drill calculations did not account for mining probability on a resource (#72) ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 2021-05-04 - Features: - - Added inserter rates - - Requires you to select an inserter in-world - - Given rates can be somewhat inaccurate when dealing with belts - Changes: - - The UI will now shrink to fit if there are less than nine rows in the table ---------------------------------------------------------------------------------------------------- -Version: 2.1.4 -Date: 2021-04-25 - Bugfixes: - - Fixed an extremely rare desync that could happen on extremely specific ticks - - Fixed not being able to select some Space Exploration entities - - Fixed pollution calculations not accounting for pollution modifier modules ---------------------------------------------------------------------------------------------------- -Version: 2.1.3 -Date: 2021-03-07 - Bugfixes: - - Fixed burner generators not being selectable ---------------------------------------------------------------------------------------------------- -Version: 2.1.2 -Date: 2021-03-02 - Bugfixes: - - Fixed lab calculations not accounting for a lab's base research speed ---------------------------------------------------------------------------------------------------- -Version: 2.1.1 -Date: 2021-02-25 - Features: - - Added tooltips to the frame action buttons (search, pin, close) - Changes: - - Search textfield will not open on Control + F if the GUI is pinned - Bugfixes: - - Fixed GUI not resetting when search was closed with escape ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 2021-02-17 - Features: - - Shift + selecting with the tool will append the new rates onto the previous selection instead of making a new one - - Added name search to GUI (unlocalised) - Changes: - - Adjusted titlebar spacing to match base game - - Updated Russian locale - Bugfixes: - - Fixed entity and tile ghosts being selectable ---------------------------------------------------------------------------------------------------- -Version: 2.0.7 -Date: 2020-12-29 - Features: - - Selecting a furnace will use the previous recipe if no recipe is currently active on that furnace - Changes: - - Added deadlock's stacking beltboxes entities to blacklist ---------------------------------------------------------------------------------------------------- -Version: 2.0.6 -Date: 2020-12-24 - Bugfixes: - - Fixed a crash when another mod removes the vanilla "introduction" tip ---------------------------------------------------------------------------------------------------- -Version: 2.0.5 -Date: 2020-12-20 - Features: - - Added per-player setting to adjust the number of visible rows in the rates table - Changes: - - Increased default visible rows count to ten - Bugfixes: - - Fixed incorrect burner energy source calculations with reguards to burner efficiency - - Fixed being able to select Factorissimo buildings and hidden lights - - Fixed horizontal scroll bar showing up at imperfect GUI scales - - Fixed rates not being shown for fluid energy sources in some cases ---------------------------------------------------------------------------------------------------- -Version: 2.0.4 -Date: 2020-12-15 - Bugfixes: - - Fixed being able to select many entities that made no sense ---------------------------------------------------------------------------------------------------- -Version: 2.0.3 -Date: 2020-12-15 - Bugfixes: - - Fixed a crash when selecting a miner with no ore underneath ---------------------------------------------------------------------------------------------------- -Version: 2.0.2 -Date: 2020-12-07 - Bugfixes: - - Fixed another crash on configuration changed - - Fixed a crash when using any non-english locale ---------------------------------------------------------------------------------------------------- -Version: 2.0.1 -Date: 2020-12-07 - Changes: - - Updated Russian locale - Bugfixes: - - Fixed a crash on configuration changed - - Fixed a crash when the GUI was opened ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 2020-12-07 - Features: - - Added new rates - - Energy source consumption (burner, fluid, and heat) for all entities - - Pollution production and consumption for all entities - - Heat output for reactors - - Fluid input and output rates for boilers - - Added new units - - Per-second, minute, and hour for all containers and storage tanks (alongside cargo and fluid wagons) - - Per-second, minute, and hour for pollution - - Added manual multiplier box and slider - - Added tips and tricks - Changes: - - Changed how the selection tool behaves - - Regular select will select production machines - - Shift + select will select entities that produce or consume electricity - - Redesigned the GUI - - The input and output tables are combined into one - - Inputs will be shown as negative numbers and are colored red, while outputs are colored green - - Consolidated train wagon units into the generic materials "per" rates ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2020-11-29 - Features: - - Added Russian locale (by Astorin) ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2020-11-23 - Features: - - Added power production for all entities where it is applicable - Changes: - - Updated to Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 1.1.7 -Date: 2020-10-29 - Bugfixes: - - Fixed fluid wagon measurements not showing (by robosa) ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 2020-10-26 - Bugfixes: - - ACTUALLY ACTUALLY fixed product catalyst calculations (by robosa) ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 2020-10-02 - Bugfixes: - - Fixed a crash when one player's selection would finish while more than one selection was being processed ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 2020-09-19 - Bugfixes: - - Fixed a crash when right-clicking the choose elem button to unset it ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2020-09-18 - Bugfixes: - - Fixed productivity bonus being applied ONLY to product catalysts, instead of the other way around ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2020-09-17 - Bugfixes: - - Fixed inaccurate electric consumption stats for entities with consumption bonuses and/or drain ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2020-09-16 - Bugfixes: - - Fixed productivity bonus being applied to product catalysts ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2020-09-15 - Features: - - Added the following rates: - - Electric consumption for all machines - - Electric production and consumption for electric energy interfaces - - Electric production for solar panels - - Fluid consumption for generators - - Added the ability to "pin" the GUI so it will remain open alongside other windows - - Results are sorted by rate from largest to smallest - Changes: - - Updated to Factorio 1.0 - - The base mod is now marked as optional, to enable support for total overhaul mods ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2020-06-24 - Bugfixes: - - Fixed a crash related to GUI style changes in Factorio 0.18.33 ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2020-06-20 - Bugfixes: - - ACTUALLY fixed incorrect lab consumption calculations ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2020-06-09 - Bugfixes: - - Fixed incorrect lab consumption calculations ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2020-05-27 - Features: - - Initial release diff --git a/RateCalculator_3.2.3/info.json b/RateCalculator_3.2.3/info.json deleted file mode 100644 index 664cf9ef..00000000 --- a/RateCalculator_3.2.3/info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "RateCalculator", - "version": "3.2.3", - "title": "Rate Calculator", - "description": "Calculate maximum production and consumption rates for the selected machines.", - "author": "raiguard", - "contact": "https://github.com/raiguard/RateCalculator", - "homepage": "https://github.com/raiguard/RateCalculator", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.80", "flib >= 0.12.9"], - "package": { - "git_publish_branch": "master", - "ignore": [ "crowdin.yml", "imgui.ini", "screenshots/*", "stylua.toml" ], - "scripts": { - "prepublish": "factorio-crowdin-sync" - }, - "sync_portal_details": true - } -} diff --git a/RateCalculator_3.2.3/locale/de/RateCalculator.cfg b/RateCalculator_3.2.3/locale/de/RateCalculator.cfg deleted file mode 100644 index 613ad904..00000000 --- a/RateCalculator_3.2.3/locale/de/RateCalculator.cfg +++ /dev/null @@ -1,71 +0,0 @@ -[controls] -rcalc-get-selection-tool=Raten Rechner Werkzeug - -[gui] -rcalc-capacity-divisor-description=[font=default-bold][color=255, 230, 192]KapazitΓ€tsdivisor[/color][/font]\nWΓ€hle ein Element aus, um die Zeitspanne mit der Artikel- oder FluidkapazitΓ€t dieses Elements zu verrechnen. -rcalc-error-incompatible-science-packs=Einige Labore haben inkompatible Wissenschaftspakete -rcalc-error-inserter-rates-estimates-description=Bei der Berechnung der Greifarme wird davon ausgegangen, dass der Greifarm direkt von einem Container in einen anderen umschlΓ€gt und dass er seine Standard-Aufnahme- und Abgabeorte verwendet. Wenn der Greifarm mit einem Transportband interagiert oder wenn die Aufnahme- und Abgabeorte geΓ€ndert wurden, weichen die tatsΓ€chlichen Raten von den angezeigten Werten ab. -rcalc-error-inserter-rates-estimates=Greifarm-basierte Raten sind nur SchΓ€tzungen [img=info] -rcalc-error-max-crafting-speed-description=Die Factorio-Engine hat ein hartes Limit von einem Herstellungszyklus und einem ProduktivitΓ€tszyklus pro Spieltick. Sobald diese Grenze erreicht ist, hat eine weitere ErhΓΆhung der Herstellungsgeschwindigkeit oder der ProduktivitΓ€t keine Wirkung mehr. -rcalc-error-max-crafting-speed=Einige Maschinen haben die maximale Herstellungsgeschwindigkeit erreicht [img=info] -rcalc-error-no-active-research=Es gibt keine aktive Forschung -rcalc-error-no-fuel=Einige Maschinen haben keinen Treibstoff -rcalc-error-no-input-fluid=Einige Maschinen haben keine EingangsflΓΌssigkeit -rcalc-error-no-mineable-resources=Einige Bohrer haben keine abbaubaren Ressourcen -rcalc-error-no-power-description=Effektverteiler mΓΌssen Strom haben, damit ihre Module die Raten von Maschinen in Reichweite beeinflussen kΓΆnnen. -rcalc-error-no-power=Einige Maschinen haben keinen Strom [img=info] -rcalc-error-no-recipe=Einige Maschinen haben kein festes Rezept -rcalc-ingredients=Komponenten -rcalc-intermediates=Zwischenprodukte -rcalc-machines-caption=__1__ Γ— __2__ -rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]Manueller Multiplikator[/color][/font]\nAlle Raten werden mit dieser Zahl multipliziert. -rcalc-net-machines-caption=__1__ [color=__2__](__3__)[/color] -rcalc-next-set=NΓ€chstes Set (__1__/__2__) -rcalc-no-rates-to-display=Keine Raten zum Anzeigen -rcalc-previous-set=Vorheriges Set (__1__/__2__) -rcalc-products=Produkte -rcalc-timescale-suffix-inserters= Greifarme -rcalc-timescale-suffix-per-hour=/h -rcalc-timescale-suffix-per-minute=/min -rcalc-timescale-suffix-per-second=/s -rcalc-timescale-suffix-transport-belts= FließbΓ€nder -rcalc-timescale=Zeitspanne - -[item-name] -rcalc-heat-dummy=WΓ€rme -rcalc-power-dummy=Strom -rcalc-selection-tool=Ratenrechner-Selektor - -[mod-description] -RateCalculator=Berechnet die maximalen Produktions- und Verbrauchsraten fΓΌr die ausgewΓ€hlten Maschinen. - -[mod-name] -RateCalculator=Raten Rechner - -[mod-setting-description] -rcalc-default-gui-location=Sie kΓΆnnen die GUI jederzeit auf ihre Standardposition zurΓΌcksetzen, indem Sie mit einem Mittelklick auf die Titelleiste klicken. -rcalc-dismiss-tool-on-selection=Nachdem Sie einen Bereich ausgewΓ€hlt haben, wird das Tool Rate Calculator automatisch von Ihrem Cursor entfernt. -rcalc-show-calculation-errors=Wenn Probleme wΓ€hrend der Berechnungen erkannt werden, werden diese in der GUI angezeigt. -rcalc-show-power-consumption=Stromverbrauch in der GUI anzeigen. StandardmÀßig deaktiviert, da es nicht sehr oft nΓΌtzlich ist. - -[mod-setting-name] -rcalc-default-gui-location=Standard-GUI-Position -rcalc-default-timescale=Standard-Zeitspanne -rcalc-dismiss-tool-on-selection=Werkzeug nach Auswahl schließen -rcalc-show-calculation-errors=Rechenfehler anzeigen -rcalc-show-completion-checkboxes=KontrollkΓ€stchen fΓΌr Fertigstellung anzeigen -rcalc-show-power-consumption=Zeige Stromverbrauch - -[shortcut-name] -rcalc-get-selection-tool=Rate calculator - -[string-mod-setting] -rcalc-default-gui-location-center=Zentrum -rcalc-default-gui-location-top-left=Oben links -rcalc-default-timescale-inserters=Greifarme -rcalc-default-timescale-per-hour=Pro Stunde -rcalc-default-timescale-per-minute=Pro Minute -rcalc-default-timescale-per-second=Pro Sekunde -rcalc-default-timescale-power=Leistung -rcalc-default-timescale-transport-belts=FließbΓ€nder - diff --git a/RateCalculator_3.2.3/locale/fr/RateCalculator.cfg b/RateCalculator_3.2.3/locale/fr/RateCalculator.cfg deleted file mode 100644 index 4b9dca85..00000000 --- a/RateCalculator_3.2.3/locale/fr/RateCalculator.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[controls] - -[gui] -rcalc-error-no-fuel=Certaines machines n'ont pas de carburant -rcalc-error-no-mineable-resources=Certaines foreuses ne disposent pas de ressources minables -rcalc-error-no-recipe=Certaines machines n'ont aucune recette dΓ©finie -rcalc-ingredients=IngrΓ©dients -rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]Multiplicateur manuel[/color][/font]\nTous les taux seront multipliΓ©s par ce nombre. - -[item-name] - -[mod-description] - -[mod-name] -RateCalculator=Calculateur de dΓ©bits - -[mod-setting-description] - -[mod-setting-name] - -[shortcut-name] - -[string-mod-setting] - diff --git a/RateCalculator_3.2.3/locale/ja/RateCalculator.cfg b/RateCalculator_3.2.3/locale/ja/RateCalculator.cfg deleted file mode 100644 index f3984b64..00000000 --- a/RateCalculator_3.2.3/locale/ja/RateCalculator.cfg +++ /dev/null @@ -1,77 +0,0 @@ -[controls] -rcalc-get-selection-tool=γƒ¬γƒΌγƒˆθ¨ˆη—ツールを取得します - -[gui] -rcalc-capacity-divisor-description=[font=default-bold][color=255, 230, 192]εΉι‡ι™€ζ•°[/color][/font]\nζ–½θ¨­γ‚’ιΈζŠžγ—γ€γγζ–½θ¨­γγ‚’γ‚€γƒ†γƒ γΎγŸγ―ζ΅δ½“γεΉι‡γ«ε―Ύγ—γ¦γ‚Ώγ‚€γƒ γ‚Ήγ‚±γƒΌγƒ«γ‚’θ‘Œγ„γΎγ™γ€‚ -rcalc-consumption=梈費 -rcalc-error-incompatible-science-packs=いく぀かγη ”穢所では互換性γγͺγ„γ‚΅γ‚€γ‚¨γƒ³γ‚Ήγƒ‘γƒƒγ‚―γŒγ‚γ‚ŠγΎγ™ -rcalc-error-inserter-rates-estimates-description=γ‚€γƒ³γ‚΅γƒΌγ‚Ώζ―”ηŽ‡γ―γ€γ‚€γƒ³γ‚΅γƒΌγ‚ΏγŒγƒγ‚§γ‚Ήγƒˆγ‹γ‚‰εˆ₯γγƒγ‚§γ‚ΉγƒˆγΈη›΄ζŽ₯η§»ε‹•γ—γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγγƒ”γƒƒγ‚―γ‚’γƒƒγƒ—γŠγ‚ˆγ³γƒ‰γƒ­γƒƒγƒ—γ‚ͺγƒ•ε ΄ζ‰€γ‚’δ½Ώη”¨γ—γ¦γ„γ‚‹γ¨γ„γ†ε‰ζγ§θ¨ˆη—γ•γ‚Œγ¦γ„γΎγ™γ€‚γ‚€γƒ³γ‚΅γƒΌγ‚ΏγƒΌγŒζ¬ι€γƒ™γƒ«γƒˆγ¨η›ΈδΊ’δ½œη”¨γ—γ¦γ„γ‚‹ε ΄εˆγ€γΎγŸγ―ピックをップ/ドロップγ‚ͺγƒ•ε ΄ζ‰€γŒε€‰ζ›΄γ•γ‚Œγ¦γ„γ‚‹ε ΄εˆγ€εŸιš›γζ―”ηŽ‡γ―θ‘¨η€Ίγ•γ‚Œγ‚‹γ‚‚γγ¨γ―η•°γͺγ‚ŠγΎγ™γ€‚ -rcalc-error-inserter-rates-estimates=γ‚€γƒ³γ‚΅γƒΌγ‚ΏεŸΊζΊ–γζ―”ηŽ‡γ―推εšε€€γ§γ™[img=info] -rcalc-error-max-crafting-speed-description=Factorioγγ‚²γƒΌγƒ γ‚¨γƒ³γ‚Έγƒ³γ«γ―、1γ‚²γƒΌγƒ γƒ†γ‚£γƒƒγ‚―γ‚γŸγ‚Š1θ£½δ½œγ‚΅γ‚€γ‚―γƒ«γ¨1η”Ÿη”£εŠ›θ£½δ½œγ‚΅γ‚€γ‚―γƒ«γγƒγƒΌγƒ‰γͺεˆΆη΄„γŒγ‚γ‚ŠγΎγ™γ€‚γ“γεˆΆη΄„γ«ι”γ™γ‚‹γ¨γ€θ£½δ½œγι€ŸεΊ¦γ‚„η”Ÿη”£εŠ›γ‚’γ•γ‚‰γ«δΈŠγ’γ¦γ‚‚εŠΉζžœγ―γ‚γ‚ŠγΎγ›γ‚“γ€‚ -rcalc-error-max-crafting-speed=いく぀かγθ£½ι€ ζ‰€γ―ζœ€ε€§θ£½δ½œι€ŸεΊ¦γ«ι”γ—γΎγ—γŸ[img=info] -rcalc-error-no-active-research=をクティブγͺη ”η©Άγ―γ‚γ‚ŠγΎγ›γ‚“ -rcalc-error-no-fuel=いく぀かγθ£½ι€ ζ‰€γ«η‡ƒζ–™γŒγ‚γ‚ŠγΎγ›γ‚“ -rcalc-error-no-input-fluid=いく぀かγθ£½ι€ ζ‰€γ«γ―桁体γε…₯εŠ›γŒγ‚γ‚ŠγΎγ›γ‚“ -rcalc-error-no-mineable-resources=いく぀かγζŽ˜ε‰Šζ©Ÿγ«ζŽ‘ζŽ˜ε―θƒ½γͺθ³‡ζΊγŒγ‚γ‚ŠγΎγ›γ‚“ -rcalc-error-no-power-description=ビーコンは、そγγƒ’γ‚Έγƒ₯ールを範囲内γθ£½ι€ ζ‰€γζ―”ηŽ‡γ«ε½±ιŸΏγ‚’δΈŽγˆγ‚‹γŸγ‚γ«γ€ι›»εŠ›γŒεΏ…θ¦γ§γ™γ€‚ -rcalc-error-no-power=いく぀かγθ£½ι€ ζ‰€γ«γ―ι›»εŠ›γŒγ‚γ‚ŠγΎγ›γ‚“ [img=info] -rcalc-error-no-recipe=いく぀かγθ£½ι€ ζ‰€γ«γ―γƒ¬γ‚·γƒ”γŒθ¨­εšγ•γ‚Œγ¦γ„γΎγ›γ‚“ -rcalc-ingredients=材料 -rcalc-intermediates=δΈ­ι–“η”Ÿη”£η‰© -rcalc-machines=製造所 -rcalc-manual-multiplier-description=[font=default-bold][color=255, 230, 192]δΉ—ζ•°γζ‰‹ε…₯εŠ›[/color][/font]\nすべてγζ―”ηŽ‡γ«γ“γζ•°ε€€γŒδΉ—η—γ•γ‚ŒγΎγ™γ€‚ -rcalc-net-rate=η΄”ζ―”ηŽ‡ -rcalc-next-set=欑γγ‚»γƒƒγƒˆ (__1__/__2__) -rcalc-no-rates-to-display=θ‘¨η€Ίγ™γ‚‹ζ―”ηŽ‡γŒγ‚γ‚ŠγΎγ›γ‚“ -rcalc-open-in-recipe-book-instruction=__CONTROL__rb-open-selected__: γƒ¬γ‚·γƒ”ζœ¬γ‚’ι–‹γ -rcalc-previous-set=前γγ‚»γƒƒγƒˆ (__1__/__2__) -rcalc-producers=θ£½ι€ θ€… -rcalc-production=θ£½ι€  -rcalc-products=製品 -rcalc-rate=ζ―”ηŽ‡ -rcalc-timescale-suffix-inserters= むンァータ -rcalc-timescale-suffix-per-hour=/ζ™‚ -rcalc-timescale-suffix-per-minute=/εˆ† -rcalc-timescale-suffix-per-second=/η§’ -rcalc-timescale-suffix-transport-belts= γƒ™γƒ«γƒˆ -rcalc-timescale=タむムスケール - -[item-name] -rcalc-heat-dummy=熱 -rcalc-pollution-dummy=ζ±šζŸ“ -rcalc-power-dummy=ι›»εŠ› -rcalc-selection-tool=Rate CalculatorγιΈζŠž - -[mod-description] -RateCalculator=ιΈζŠžγ—γŸθ£½ι€ ζ‰€γζœ€ε€§η”Ÿη”£ζ―”ηŽ‡γ¨ζΆˆθ²»ζ―”ηŽ‡γ‚’θ¨ˆη—する。 - -[mod-name] - -[mod-setting-description] -rcalc-default-gui-location=γ‚Ώγ‚€γƒˆγƒ«γƒγƒΌγ‚’δΈ­γ‚―γƒͺックすることで、い぀でもGUIγ‚’γƒ‡γƒ•γ‚©γƒ«γƒˆγδ½η½γ«ζˆ»γ™γ“γ¨γŒγ§γγΎγ™γ€‚ -rcalc-dismiss-tool-on-selection=エγƒͺγ‚’ιΈζŠžεΎŒγ€θ‡ͺε‹•ηš„γ«Rate Calculator γƒ„γƒΌγƒ«γ―γƒžγ‚¦γ‚Ήγ‚«γƒΌγ‚½γƒ«γ‹γ‚‰θ§£ι™€γ•γ‚ŒγΎγ™γ€‚ -rcalc-show-calculation-errors=計η—εŸθ‘ŒδΈ­γ«ε•ι‘ŒγŒζ€œε‡Ίγ•γ‚ŒγŸε ΄εˆγ―、GUIγ«θ‘¨η€Ίγ•γ‚ŒγΎγ™γ€‚ -rcalc-show-power-consumption=GUIγ§ζΆˆθ²»ι›»εŠ›ζ―”ηŽ‡γ‚’θ‘¨η€Ίγ—γΎγ™γ€‚γ‚γΎγ‚Šε½Ήγ«η«‹γŸγͺいγγ§γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγ§γ―η„‘εŠΉγ«γͺっています。 - -[mod-setting-name] -rcalc-default-gui-location=γƒ‡γƒ•γ‚©γƒ«γƒˆγGUIγε ΄ζ‰€ -rcalc-default-timescale=γƒ‡γƒ•γ‚©γƒ«γƒˆγγ‚Ώγ‚€γƒ γ‚Ήγ‚±γƒΌγƒ«: -rcalc-dismiss-tool-on-selection=ιΈζŠžγ—γŸεΎŒγ«γƒ„γƒΌγƒ«γ‚’ι–‰γ˜γ‚‹ -rcalc-show-calculation-errors=計η—エラーを葨瀺する -rcalc-show-completion-checkboxes=εŒδΊ†γγƒγ‚§γƒƒγ‚―γƒœγƒƒγ‚―γ‚Ήγ‚’θ‘¨η€Ίγ™γ‚‹ -rcalc-show-intermediate-breakdowns=δΈ­ι–“ε‡ΊεŠ›/ε…₯εŠ›γƒ¬γƒΌγƒˆεˆ—γ‚’θ‘¨η€Ί -rcalc-show-pollution=ζ±šζŸ“ηŽ‡γ‚’θ‘¨η€Ί -rcalc-show-power-consumption=ζΆˆθ²»ι›»εŠ›γ‚’θ‘¨η€Ίγ™γ‚‹ - -[shortcut-name] - -[string-mod-setting] -rcalc-default-gui-location-center=δΈ­ε€ -rcalc-default-gui-location-top-left=左上 -rcalc-default-timescale-inserters=むンァータ -rcalc-default-timescale-per-hour=ζ―Žζ™‚ -rcalc-default-timescale-per-minute=ζ―Žεˆ† -rcalc-default-timescale-per-second=ζ―Žη§’ -rcalc-default-timescale-power=ι›»εŠ› -rcalc-default-timescale-transport-belts=ζ¬ι€γƒ™γƒ«γƒˆ - diff --git a/RateCalculator_3.2.3/locale/zh-TW/RateCalculator.cfg b/RateCalculator_3.2.3/locale/zh-TW/RateCalculator.cfg deleted file mode 100644 index 4f0cd7e5..00000000 --- a/RateCalculator_3.2.3/locale/zh-TW/RateCalculator.cfg +++ /dev/null @@ -1,18 +0,0 @@ -[controls] - -[gui] - -[item-name] - -[mod-description] - -[mod-name] - -[mod-setting-description] - -[mod-setting-name] - -[shortcut-name] - -[string-mod-setting] - diff --git a/ReStack/changelog.txt b/ReStack/changelog.txt new file mode 100644 index 00000000..63ff38f0 --- /dev/null +++ b/ReStack/changelog.txt @@ -0,0 +1,292 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.7.1 +Date: 2021-03-21 + Bugfixes: + - added reverse check between entity.minable.results and item.placed_entity #19 +--------------------------------------------------------------------------------------------------- +Version: 0.7.0 +Date: 2020-11-27 + Features: + - updated to Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.6.5 +Date: 2020-09-13 + Changes: + - pushed FLib to 0.3.3 + - flagged optional dependencies as hidden +--------------------------------------------------------------------------------------------------- +Version: 0.6.4 +Date: 2020-08-20 + Features: + - updated to Factorio 1.0 + Bugfixes: + - don't change stack size when item flag "not-stackable" is true #16 +--------------------------------------------------------------------------------------------------- +Version: 0.6.3 +Date: 2020-06-10 + Bugfixes: + - pushed FLib dependency for better energy string error handling #15 +--------------------------------------------------------------------------------------------------- +Version: 0.6.2 +Date: 2020-05-26 + Changes: + - replaced OpteraLib with FLib +--------------------------------------------------------------------------------------------------- +Version: 0.6.1 +Date: 2020-03-19 + Features: + - dynamically change rocket silo output inventory size according to science pack stack size + Changes: + - removed option to skip rocket launch products +--------------------------------------------------------------------------------------------------- +Version: 0.6.0 +Date: 2020-01-21 + Features: + - updated to Factorio 0.18 +--------------------------------------------------------------------------------------------------- +Version: 0.5.9 +Date: 2019-12-16 + Bugfixes: + - setting barrel capacity to 500 creates fill/empty recipes using one barrel #14 +--------------------------------------------------------------------------------------------------- +Version: 0.5.8 +Date: 2019-09-08 + Features: + - generate barrel.fuel_value according to fluid.fuel_value + Changes: + - requires Optera's Library for fuel value calculations +--------------------------------------------------------------------------------------------------- +Version: 0.5.7 +Date: 2019-08-27 + Features: + - added boiler types + - added generator types (steam engine, turbine) +--------------------------------------------------------------------------------------------------- +Version: 0.5.6 +Date: 2019-08-19 + Features: + - added mining drills +--------------------------------------------------------------------------------------------------- +Version: 0.5.5 +Date: 2019-07-31 + Bugfixes: + - additional check against invalid launch products #10 + - support multiple launch products +--------------------------------------------------------------------------------------------------- +Version: 0.5.4 +Date: 2019-04-02 + Features: + - added turrets +--------------------------------------------------------------------------------------------------- +Version: 0.5.3 +Date: 2019-03-25 + Features: + - added walls and gates +--------------------------------------------------------------------------------------------------- +Version: 0.5.2 +Date: 2019-03-03 + Bugfixes: + - skip over barrel recipes lacking ingredients and results, https://mods.factorio.com/mod/ReStack/discussion/5c7bd343961aa5000cbdc1ae +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 2019-02-27 + Bugfixes: + - accounted for raw-wood having been renamed to wood +--------------------------------------------------------------------------------------------------- +Version: 0.5.0 +Date: 2019-02-27 + Features: + - updated to Factorio 0.17 + - setting an option to 0 disables resetting stack size + - settings previously defaulting to base stack size now default to 0 +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 +Date: 21.12.2018 + Features: + - barrel settings work on gas bottles and canisters from BobPlates + - barrel settings work on DirtyBarrels +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 +Date: 20.8.2018 + Features: + - added nuclear fuel + Bugfixes: + - stack size wasn't applied to Used up uranium fuel cell + - Description for Reactor fuels + Changes: + - internal name for reactor fuel mapped to nuclear fuel + - new internal name for reactor fuel +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 19.8.2018 + Features: + - added chests +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 11.7.2018 + Bugfixes: + - science packs use improved search logic +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 8.7.2018 + Features: + - added rail signals + - added train stops + - added locomotives and wagons + - added cars (includes tanks, planes, ...) + Bugfixes: + - rails stack default stack size is 200 as stated in description + Changes: + - push to 0.16.51 stable + - refactored search logic #3 +--------------------------------------------------------------------------------------------------- +Version: 0.3.14 +Date: 20.5.2018 + Features: + - added copper cable to wires + - added modules +--------------------------------------------------------------------------------------------------- +Version: 0.3.13 +Date: 20.5.2018 + Features: + - added bots + Changes: + - push to 0.16.36 stable +--------------------------------------------------------------------------------------------------- +Version: 0.3.12 +Date: 25.1.2018 + Bugfixes: + - fixed null reference for recipe.ingredients #2 +--------------------------------------------------------------------------------------------------- +Version: 0.3.11 +Date: 25.1.2018 + Bugfixes: + - fixed null reference for recipe.ingredients #1 +--------------------------------------------------------------------------------------------------- +Version: 0.3.10 +Date: 24.1.2018 + Features: + - added solid fuel + Changes: + - moved all action into data-final-fixes +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 +Date: 5.1.2018 + Features: + - added electric poles + - added arithmetic, decider and constant combinator + - added red & green wire +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 +Date: 31.12.2017 + Features: + - find rocket parts by recipe + - find nuclear fuel and burn result by fuel category +--------------------------------------------------------------------------------------------------- +Version: 0.3.7 +Date: 30.12.2017 + Features: + - barrels updated to changes in 0.16.8 + - increased default barreling recipes to more ups friendly 10 barrels/2s + Removed: + - fluid wagon tweaks +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 +Date: 26.12.2017 + Features: + - barrel capacities < 250l result in barreling recipes processing multiple barrels at once + - in game changelog +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 +Date: 23.12.2017 + Features: + - added science packs + - added option to skip rocket launch products + Bugfixes: + - setting categories should now also work on item types other than "item" +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: ??? + Features: + - added rails + Bugfixes: + - fixed stone-bricks where overwritten by smelting stack size +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 20.12.2017 + Features: + - added rails, combinators and wires +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 16.12.2017 + Features: + - added magazines, shotgun shells, flamethrower ammo, cannon shells and artillery shells + Changes: + - split into modules + - moved all action from data-final-fixes to data-update + - removed fix for recipes with result amount > stack size as it's part of 0.16.x +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 15.12.2017 + Features: + - added barrel stack size and capacity + - added toggle for lighter fluid wagons with less capacity + Changes: + - moved u-235 and u-238 to their own uranium category + - removed partial localization of item names from setting description + Bugfixes: + - fixed plate stack size being applied to nuclear fuel +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: 13.12.2017 + Features: + - updated to Factorio 0.16 +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 +Date: ??? + Features: + - supported items: inserter +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 +Date: ??? + Features: + - supported items: rocket fuel, rocket control unit, low density structure, belt, underground belt, splitter, loader, pipe, pipe to ground +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: ??? + Features: + - supported item: wood + - added option to force tile stack size for ore/plate/wood (requires mods adding tiles for those items e.g. Dectorio) + Bugfixes: + - stone brick will always use tile stack size rather than plate stack size + - fixed spelling +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: ??? + Changes: + - apply plate stack size to all smelting and centrifuging results + Bugfixes: + - recipes with min-amount and max-amount no longer crash recipe fix +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: ??? + Changes: + - apply recipe fix to all recipes +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: ??? + Features: + - supports items added by mods + - supported items: tiles +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: ??? + Features: + - grouped similar items under one setting + - supported items: assembling machines, chemical plant, centrifuge, beacon, reactor, roboport, ores, plates, uranium +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 - Initial release +Date: ??? + Features: + - supported items: uranium-fuel-cell, used-up-uranium-fuel-cell + - recipe fix preventing stuck assembler when stack size < result.amount \ No newline at end of file diff --git a/ReStack_0.7.2/data-final-fixes.lua b/ReStack/data-final-fixes.lua similarity index 100% rename from ReStack_0.7.2/data-final-fixes.lua rename to ReStack/data-final-fixes.lua diff --git a/ReStack/info.json b/ReStack/info.json new file mode 100644 index 00000000..ee4ad097 --- /dev/null +++ b/ReStack/info.json @@ -0,0 +1,11 @@ +{ + "name": "ReStack", + "version": "0.7.2", + "title": "ReStack", + "author": "Optera", + "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729", + "homepage": "", + "description": "Adds settings to set stack sizes for ores, plates, barrels, fuel cells, ammo and crafting machines for base and mod added variants.", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.27", "flib >= 0.7.0", "(?)PickerExtended >= 3.0.2", "(?)Dectorio >= 0.8.0", "(?)KS_Power"] +} \ No newline at end of file diff --git a/ReStack_0.7.2/locale/en/settings.cfg b/ReStack/locale/en/settings.cfg similarity index 100% rename from ReStack_0.7.2/locale/en/settings.cfg rename to ReStack/locale/en/settings.cfg diff --git a/ReStack_0.7.2/modules/ammo.lua b/ReStack/modules/ammo.lua similarity index 100% rename from ReStack_0.7.2/modules/ammo.lua rename to ReStack/modules/ammo.lua diff --git a/ReStack_0.7.2/modules/barrel.lua b/ReStack/modules/barrel.lua similarity index 100% rename from ReStack_0.7.2/modules/barrel.lua rename to ReStack/modules/barrel.lua diff --git a/ReStack_0.7.2/modules/intermediate.lua b/ReStack/modules/intermediate.lua similarity index 100% rename from ReStack_0.7.2/modules/intermediate.lua rename to ReStack/modules/intermediate.lua diff --git a/ReStack/modules/lib.lua b/ReStack/modules/lib.lua new file mode 100644 index 00000000..a17cfde8 --- /dev/null +++ b/ReStack/modules/lib.lua @@ -0,0 +1,75 @@ + --[[ Copyright (c) 2018 Optera + * Part of Re-Stack + * + * See LICENSE.md in the project directory for license information. +--]] + +function add_from_item_array(items, stack_size, category, placed_entity) + for _, item in pairs(items) do + if item.name and (item.type == nil or item.type == "item") then -- fully defined item table + if placed_entity == nil or (placed_entity and placed_entity == item.place_result) then + ReStack_Items[item.name] = {stack_size = stack_size, type = category} + end + elseif item[1] and placed_entity == nil then -- lazy definition {name, count} + ReStack_Items[item[1]] = {stack_size = stack_size, type = category} + end + end +end + +-- sets stacks for items associated with an entity or resource +function SelectItemByEntity(ent_type, stack_size, category, reverse_check) + category = category or ent_type + if reverse_check == nil then + reverse_check = true + end + for name, entity in pairs(data.raw[ent_type]) do + if entity.minable then + if entity.minable.result then + ReStack_Items[entity.minable.result] = {stack_size = stack_size, type = category} + elseif entity.minable.results then + if reverse_check then + add_from_item_array(entity.minable.results, stack_size, category, name) + else + add_from_item_array(entity.minable.results, stack_size, category) + end + end + end + end +end + +-- set stacks for recipe results (used only by smelting) +function SelectItemsByRecipeResult(recipe, stack_size, category) + local item + if recipe.result then + ReStack_Items[recipe.result] = {stack_size = stack_size, type = category} + end + if recipe.normal and recipe.normal.result then + ReStack_Items[recipe.normal.result] = {stack_size = stack_size, type = category} + end + if recipe.expensive and recipe.expensive.result then + ReStack_Items[recipe.expensive.result] = {stack_size = stack_size, type = category} + end + + if recipe.results then + add_from_item_array(recipe.results, stack_size, category) + end + if recipe.normal and recipe.normal.results then + add_from_item_array(recipe.normal.results, stack_size, category) + end + if recipe.expensive and recipe.expensive.results then + add_from_item_array(recipe.expensive.results, stack_size, category) + end +end + +-- set stack for all recipe input items (used only by rocket parts) +function SelectItemsByRecipeInput(recipe, stack_size, category) + if recipe.ingredients then + add_from_item_array(recipe.ingredients, stack_size, category) + end + if recipe.normal and recipe.normal.ingredients then + add_from_item_array(recipe.normal.ingredients, stack_size, category) + end + if recipe.expensive and recipe.expensive.ingredients then + add_from_item_array(recipe.expensive.ingredients, stack_size, category) + end +end diff --git a/ReStack_0.7.2/modules/logistic.lua b/ReStack/modules/logistic.lua similarity index 100% rename from ReStack_0.7.2/modules/logistic.lua rename to ReStack/modules/logistic.lua diff --git a/ReStack_0.7.2/modules/military.lua b/ReStack/modules/military.lua similarity index 100% rename from ReStack_0.7.2/modules/military.lua rename to ReStack/modules/military.lua diff --git a/ReStack_0.7.2/modules/production.lua b/ReStack/modules/production.lua similarity index 100% rename from ReStack_0.7.2/modules/production.lua rename to ReStack/modules/production.lua diff --git a/ReStack_0.7.2/settings.lua b/ReStack/settings.lua similarity index 100% rename from ReStack_0.7.2/settings.lua rename to ReStack/settings.lua diff --git a/ReStack_0.7.2/thumbnail.png b/ReStack/thumbnail.png similarity index 100% rename from ReStack_0.7.2/thumbnail.png rename to ReStack/thumbnail.png diff --git a/ReStack_0.7.2/changelog.txt b/ReStack_0.7.2/changelog.txt deleted file mode 100644 index 6cae964e..00000000 --- a/ReStack_0.7.2/changelog.txt +++ /dev/null @@ -1,297 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.7.2 -Date: 2023-07-21 - Bugfixes: - - some ores where filtered by reverse checking > skipped check for type resource ---------------------------------------------------------------------------------------------------- -Version: 0.7.1 -Date: 2021-03-21 - Bugfixes: - - added reverse check between entity.minable.results and item.placed_entity #19 ---------------------------------------------------------------------------------------------------- -Version: 0.7.0 -Date: 2020-11-27 - Features: - - updated to Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 0.6.5 -Date: 2020-09-13 - Changes: - - pushed FLib to 0.3.3 - - flagged optional dependencies as hidden ---------------------------------------------------------------------------------------------------- -Version: 0.6.4 -Date: 2020-08-20 - Features: - - updated to Factorio 1.0 - Bugfixes: - - don't change stack size when item flag "not-stackable" is true #16 ---------------------------------------------------------------------------------------------------- -Version: 0.6.3 -Date: 2020-06-10 - Bugfixes: - - pushed FLib dependency for better energy string error handling #15 ---------------------------------------------------------------------------------------------------- -Version: 0.6.2 -Date: 2020-05-26 - Changes: - - replaced OpteraLib with FLib ---------------------------------------------------------------------------------------------------- -Version: 0.6.1 -Date: 2020-03-19 - Features: - - dynamically change rocket silo output inventory size according to science pack stack size - Changes: - - removed option to skip rocket launch products ---------------------------------------------------------------------------------------------------- -Version: 0.6.0 -Date: 2020-01-21 - Features: - - updated to Factorio 0.18 ---------------------------------------------------------------------------------------------------- -Version: 0.5.9 -Date: 2019-12-16 - Bugfixes: - - setting barrel capacity to 500 creates fill/empty recipes using one barrel #14 ---------------------------------------------------------------------------------------------------- -Version: 0.5.8 -Date: 2019-09-08 - Features: - - generate barrel.fuel_value according to fluid.fuel_value - Changes: - - requires Optera's Library for fuel value calculations ---------------------------------------------------------------------------------------------------- -Version: 0.5.7 -Date: 2019-08-27 - Features: - - added boiler types - - added generator types (steam engine, turbine) ---------------------------------------------------------------------------------------------------- -Version: 0.5.6 -Date: 2019-08-19 - Features: - - added mining drills ---------------------------------------------------------------------------------------------------- -Version: 0.5.5 -Date: 2019-07-31 - Bugfixes: - - additional check against invalid launch products #10 - - support multiple launch products ---------------------------------------------------------------------------------------------------- -Version: 0.5.4 -Date: 2019-04-02 - Features: - - added turrets ---------------------------------------------------------------------------------------------------- -Version: 0.5.3 -Date: 2019-03-25 - Features: - - added walls and gates ---------------------------------------------------------------------------------------------------- -Version: 0.5.2 -Date: 2019-03-03 - Bugfixes: - - skip over barrel recipes lacking ingredients and results, https://mods.factorio.com/mod/ReStack/discussion/5c7bd343961aa5000cbdc1ae ---------------------------------------------------------------------------------------------------- -Version: 0.5.1 -Date: 2019-02-27 - Bugfixes: - - accounted for raw-wood having been renamed to wood ---------------------------------------------------------------------------------------------------- -Version: 0.5.0 -Date: 2019-02-27 - Features: - - updated to Factorio 0.17 - - setting an option to 0 disables resetting stack size - - settings previously defaulting to base stack size now default to 0 ---------------------------------------------------------------------------------------------------- -Version: 0.4.4 -Date: 21.12.2018 - Features: - - barrel settings work on gas bottles and canisters from BobPlates - - barrel settings work on DirtyBarrels ---------------------------------------------------------------------------------------------------- -Version: 0.4.3 -Date: 20.8.2018 - Features: - - added nuclear fuel - Bugfixes: - - stack size wasn't applied to Used up uranium fuel cell - - Description for Reactor fuels - Changes: - - internal name for reactor fuel mapped to nuclear fuel - - new internal name for reactor fuel ---------------------------------------------------------------------------------------------------- -Version: 0.4.2 -Date: 19.8.2018 - Features: - - added chests ---------------------------------------------------------------------------------------------------- -Version: 0.4.1 -Date: 11.7.2018 - Bugfixes: - - science packs use improved search logic ---------------------------------------------------------------------------------------------------- -Version: 0.4.0 -Date: 8.7.2018 - Features: - - added rail signals - - added train stops - - added locomotives and wagons - - added cars (includes tanks, planes, ...) - Bugfixes: - - rails stack default stack size is 200 as stated in description - Changes: - - push to 0.16.51 stable - - refactored search logic #3 ---------------------------------------------------------------------------------------------------- -Version: 0.3.14 -Date: 20.5.2018 - Features: - - added copper cable to wires - - added modules ---------------------------------------------------------------------------------------------------- -Version: 0.3.13 -Date: 20.5.2018 - Features: - - added bots - Changes: - - push to 0.16.36 stable ---------------------------------------------------------------------------------------------------- -Version: 0.3.12 -Date: 25.1.2018 - Bugfixes: - - fixed null reference for recipe.ingredients #2 ---------------------------------------------------------------------------------------------------- -Version: 0.3.11 -Date: 25.1.2018 - Bugfixes: - - fixed null reference for recipe.ingredients #1 ---------------------------------------------------------------------------------------------------- -Version: 0.3.10 -Date: 24.1.2018 - Features: - - added solid fuel - Changes: - - moved all action into data-final-fixes ---------------------------------------------------------------------------------------------------- -Version: 0.3.9 -Date: 5.1.2018 - Features: - - added electric poles - - added arithmetic, decider and constant combinator - - added red & green wire ---------------------------------------------------------------------------------------------------- -Version: 0.3.8 -Date: 31.12.2017 - Features: - - find rocket parts by recipe - - find nuclear fuel and burn result by fuel category ---------------------------------------------------------------------------------------------------- -Version: 0.3.7 -Date: 30.12.2017 - Features: - - barrels updated to changes in 0.16.8 - - increased default barreling recipes to more ups friendly 10 barrels/2s - Removed: - - fluid wagon tweaks ---------------------------------------------------------------------------------------------------- -Version: 0.3.6 -Date: 26.12.2017 - Features: - - barrel capacities < 250l result in barreling recipes processing multiple barrels at once - - in game changelog ---------------------------------------------------------------------------------------------------- -Version: 0.3.5 -Date: 23.12.2017 - Features: - - added science packs - - added option to skip rocket launch products - Bugfixes: - - setting categories should now also work on item types other than "item" ---------------------------------------------------------------------------------------------------- -Version: 0.3.4 -Date: ??? - Features: - - added rails - Bugfixes: - - fixed stone-bricks where overwritten by smelting stack size ---------------------------------------------------------------------------------------------------- -Version: 0.3.3 -Date: 20.12.2017 - Features: - - added rails, combinators and wires ---------------------------------------------------------------------------------------------------- -Version: 0.3.2 -Date: 16.12.2017 - Features: - - added magazines, shotgun shells, flamethrower ammo, cannon shells and artillery shells - Changes: - - split into modules - - moved all action from data-final-fixes to data-update - - removed fix for recipes with result amount > stack size as it's part of 0.16.x ---------------------------------------------------------------------------------------------------- -Version: 0.3.1 -Date: 15.12.2017 - Features: - - added barrel stack size and capacity - - added toggle for lighter fluid wagons with less capacity - Changes: - - moved u-235 and u-238 to their own uranium category - - removed partial localization of item names from setting description - Bugfixes: - - fixed plate stack size being applied to nuclear fuel ---------------------------------------------------------------------------------------------------- -Version: 0.3.0 -Date: 13.12.2017 - Features: - - updated to Factorio 0.16 ---------------------------------------------------------------------------------------------------- -Version: 0.2.5 -Date: ??? - Features: - - supported items: inserter ---------------------------------------------------------------------------------------------------- -Version: 0.2.4 -Date: ??? - Features: - - supported items: rocket fuel, rocket control unit, low density structure, belt, underground belt, splitter, loader, pipe, pipe to ground ---------------------------------------------------------------------------------------------------- -Version: 0.2.3 -Date: ??? - Features: - - supported item: wood - - added option to force tile stack size for ore/plate/wood (requires mods adding tiles for those items e.g. Dectorio) - Bugfixes: - - stone brick will always use tile stack size rather than plate stack size - - fixed spelling ---------------------------------------------------------------------------------------------------- -Version: 0.2.2 -Date: ??? - Changes: - - apply plate stack size to all smelting and centrifuging results - Bugfixes: - - recipes with min-amount and max-amount no longer crash recipe fix ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 -Date: ??? - Changes: - - apply recipe fix to all recipes ---------------------------------------------------------------------------------------------------- -Version: 0.2.0 -Date: ??? - Features: - - supports items added by mods - - supported items: tiles ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: ??? - Features: - - grouped similar items under one setting - - supported items: assembling machines, chemical plant, centrifuge, beacon, reactor, roboport, ores, plates, uranium ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 - Initial release -Date: ??? - Features: - - supported items: uranium-fuel-cell, used-up-uranium-fuel-cell - - recipe fix preventing stuck assembler when stack size < result.amount \ No newline at end of file diff --git a/ReStack_0.7.2/info.json b/ReStack_0.7.2/info.json deleted file mode 100644 index 62606461..00000000 --- a/ReStack_0.7.2/info.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "ReStack", - "version": "0.7.2", - "title": "ReStack", - "author": "Optera", - "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=21729", - "homepage": "", - "description": "Adds settings to set stack sizes for ores, plates, barrels, fuel cells, ammo and crafting machines for base and mod added variants.", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.27", "flib >= 0.7.0", "(?)PickerExtended >= 3.0.2", "(?)Dectorio >= 0.8.0"] -} \ No newline at end of file diff --git a/ReStack_0.7.2/modules/lib.lua b/ReStack_0.7.2/modules/lib.lua deleted file mode 100644 index 3769e8db..00000000 --- a/ReStack_0.7.2/modules/lib.lua +++ /dev/null @@ -1,75 +0,0 @@ - --[[ Copyright (c) 2018 Optera - * Part of Re-Stack - * - * See LICENSE.md in the project directory for license information. ---]] - -function add_from_item_array(items, stack_size, category, placed_entity) - for _, item in pairs(items) do - if item.name and (item.type == nil or item.type == "item") then -- fully defined item table - if placed_entity == nil or (placed_entity and placed_entity == item.place_result) then - ReStack_Items[item.name] = {stack_size = stack_size, type = category} - end - elseif item[1] and placed_entity == nil then -- lazy definition {name, count} - ReStack_Items[item[1]] = {stack_size = stack_size, type = category} - end - end -end - --- sets stacks for items associated with an entity or resource -function SelectItemByEntity(ent_type, stack_size, category, reverse_check) - category = category or ent_type - if reverse_check == nil then - reverse_check = true - end - for name, entity in pairs(data.raw[ent_type]) do - if entity.minable then - if entity.minable.result then - ReStack_Items[entity.minable.result] = {stack_size = stack_size, type = category} - elseif entity.minable.results then - if reverse_check then - add_from_item_array(entity.minable.results, stack_size, category, name) - else - add_from_item_array(entity.minable.results, stack_size, category) - end - end - end - end -end - --- set stacks for recipe results (used only by smelting) -function SelectItemsByRecipeResult(recipe, stack_size, category) - local item - if recipe.result then - ReStack_Items[recipe.result] = {stack_size = stack_size, type = category} - end - if recipe.normal and recipe.normal.result then - ReStack_Items[recipe.normal.result] = {stack_size = stack_size, type = category} - end - if recipe.expensive and recipe.expensive.result then - ReStack_Items[recipe.expensive.result] = {stack_size = stack_size, type = category} - end - - if recipe.results then - add_from_item_array(recipe.results, stack_size, category) - end - if recipe.normal and recipe.normal.results then - add_from_item_array(recipe.normal.results, stack_size, category) - end - if recipe.expensive and recipe.expensive.results then - add_from_item_array(recipe.expensive.results, stack_size, category) - end -end - --- set stack for all recipe input items (used only by rocket parts) -function SelectItemsByRecipeInput(recipe, stack_size, category) - if recipe.ingredients then - add_from_item_array(recipe.ingredients, stack_size, category) - end - if recipe.normal and recipe.normal.ingredients then - add_from_item_array(recipe.normal.ingredients, stack_size, category) - end - if recipe.expensive and recipe.expensive.ingredients then - add_from_item_array(recipe.expensive.ingredients, stack_size, category) - end -end diff --git a/RealisticDecorationCleanup_1.1.2/changelog.txt b/RealisticDecorationCleanup/changelog.txt similarity index 100% rename from RealisticDecorationCleanup_1.1.2/changelog.txt rename to RealisticDecorationCleanup/changelog.txt diff --git a/RealisticDecorationCleanup_1.1.2/control.lua b/RealisticDecorationCleanup/control.lua similarity index 100% rename from RealisticDecorationCleanup_1.1.2/control.lua rename to RealisticDecorationCleanup/control.lua diff --git a/RealisticDecorationCleanup_1.1.2/data.lua b/RealisticDecorationCleanup/data.lua similarity index 100% rename from RealisticDecorationCleanup_1.1.2/data.lua rename to RealisticDecorationCleanup/data.lua diff --git a/RealisticDecorationCleanup/info.json b/RealisticDecorationCleanup/info.json new file mode 100644 index 00000000..5dfa89df --- /dev/null +++ b/RealisticDecorationCleanup/info.json @@ -0,0 +1,10 @@ +{ + "name": "RealisticDecorationCleanup", + "version": "1.1.3", + "title": "Realistic Decoration Cleanup", + "author": "someone1337", + "homepage": "https://git.somenet.org/factorio/RealisticDecorationCleanup.git", + "description": "Remove decorations prior to placing entities or tiles. Normally you would not build a house/road and leave the bushes below it.", + "dependencies": ["base>=1.1.0"], + "factorio_version": "1.1" +} diff --git a/RealisticDecorationCleanup_1.1.2/thumbnail.png b/RealisticDecorationCleanup/thumbnail.png similarity index 100% rename from RealisticDecorationCleanup_1.1.2/thumbnail.png rename to RealisticDecorationCleanup/thumbnail.png diff --git a/RealisticDecorationCleanup_1.1.2/info.json b/RealisticDecorationCleanup_1.1.2/info.json deleted file mode 100644 index 17196565..00000000 --- a/RealisticDecorationCleanup_1.1.2/info.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "RealisticDecorationCleanup", - "version": "1.1.2", - "title": "Realistic Decoration Cleanup", - "author": "someone1337", - "homepage": "https://git.somenet.org/factorio/RealisticDecorationCleanup.git", - "description": "Remove decorations prior to placing entities or tiles. Normally you would not build a house/road and leave the bushes below it.", - "dependencies": ["base>=1.1.0"], - "factorio_version": "1.1" -} diff --git a/RecipeBook_3.5.6/README.md b/RecipeBook/README.md similarity index 100% rename from RecipeBook_3.5.6/README.md rename to RecipeBook/README.md diff --git a/RecipeBook/changelog.txt b/RecipeBook/changelog.txt new file mode 100644 index 00000000..9cbc32a3 --- /dev/null +++ b/RecipeBook/changelog.txt @@ -0,0 +1,702 @@ +--------------------------------------------------------------------------------------------------- +Version: 3.5.7 +Date: 2023-11-24 + Changes: + - Show entities as available from the start if they are placed by items whose recipes are available at start. (#145) + Bugfixes: + - Fixed crashes when table content elements somehow get invalidated. (#136) + - Fixed labs not being shown as a placed result. (#145) + - Fixed potential issues when recursively unlocking rocket launch products. (#144) +--------------------------------------------------------------------------------------------------- +Version: 3.5.6 +Date: 2023-08-21 + Bugfixes: + - [Reverse factory] Fixed that recycling recipes would cause many items to incorrectly show as researched (#133) +--------------------------------------------------------------------------------------------------- +Version: 3.5.5 +Date: 2023-07-01 + Bugfixes: + - Fixed a crash on load when a force is invalidated (#131) +--------------------------------------------------------------------------------------------------- +Version: 3.5.4 +Date: 2023-06-11 + Bugfixes: + - Fixed a crash when calling `/rb-print-object` with no parameters (#128) +--------------------------------------------------------------------------------------------------- +Version: 3.5.3 +Date: 2023-04-29 + Bugfixes: + - Fixed a crash when migrating from before version 3.0 + - Fixed that characters were not showing as being able to craft recipes +--------------------------------------------------------------------------------------------------- +Version: 3.5.2 +Date: 2023-01-16 + Optimizations: + - Massively reduced save loading time with large numbers of modules or fluids (credit to Rseding) +--------------------------------------------------------------------------------------------------- +Version: 3.5.1 +Date: 2022-12-06 + Changes: + - Updated to Factorio 1.1.74 and flib 0.12.0 + - Dictionary translations are performed 10x faster in singleplayer +--------------------------------------------------------------------------------------------------- +Version: 3.5.0 +Date: 2022-10-30 + Features: + - Added new page contents: + - Number of module slots will be shown on all entities that support modules (https://todo.sr.ht/~raiguard/factorio-mods/57) + - [Recipe] Catalyst amounts are shown in ingredient and product tooltips (https://todo.sr.ht/~raiguard/factorio-mods/59) + Bugfixes: + - [Burning] Fixed can burn list on entities that have a fluid filter on their energy source + - [Recipe] Fixed that recipes were counting fluids when testing crafter ingredient limits + - [Resource] Fixed that fluid resource products would not show temperature (https://todo.sr.ht/~raiguard/factorio-mods/60) +--------------------------------------------------------------------------------------------------- +Version: 3.4.5 +Date: 2022-06-12 + Bugfixes: + - Fixed a crash when a mining tool is used in a recipe (https://todo.sr.ht/~raiguard/factorio-mods/29) +--------------------------------------------------------------------------------------------------- +Version: 3.4.4 +Date: 2022-06-12 + Bugfixes: + - Fixed a crash when a character has no crafting categories + - Fixed a crash when the GUI tried to display the dummy-steel-axe item (https://todo.sr.ht/~raiguard/factorio-mods/28) +--------------------------------------------------------------------------------------------------- +Version: 3.4.3 +Date: 2022-05-22 + Bugfixes: + - Fixed a crash when a technology has no research ingredients (#117) +--------------------------------------------------------------------------------------------------- +Version: 3.4.2 +Date: 2022-05-22 + Bugfixes: + - Fixed a crash when an entity is mineable, but has no mineable products (#118) +--------------------------------------------------------------------------------------------------- +Version: 3.4.1 +Date: 2022-05-21 + Changes: + - Updated Korean locale (by x2605) (#115) + - Updated Russian locale (by astorin) (#116) + Bugfixes: + - Fixed flib dependency (#114) +--------------------------------------------------------------------------------------------------- +Version: 3.4.0 +Date: 2022-05-21 + Features: + - Added new categories: + - Entity type + - Item type + - Science pack: Uncheck a science pack to hide all objects that it unlocks (#89) + - Added new interactions: + - [Entity] Shift + click to get a blueprint (not just on the recipe screen) (#98) + - Added new page contents: + - [Entity] Entity type, expected resources + - [Item] Affects recipes (for modules), Gathered from, item type + - [Recipe] Pollution multiplier (#113) + - Added new pages: + - Entity type: All entities of the given type + - Item type: All items of the given type + Changes: + - Category lists will be hidden when that category is disabled +--------------------------------------------------------------------------------------------------- +Version: 3.3.4 +Date: 2022-04-20 + Bugfixes: + - Fixed a crash when upgrading from 3.1 or earlier +--------------------------------------------------------------------------------------------------- +Version: 3.3.3 +Date: 2022-04-14 + Bugfixes: + - Fixed a crash when refreshing contents with an invalid info or quick ref GUI (#110) + - Fixed that certain entities had a "get blueprint" action when they weren't blueprintable (#111) +--------------------------------------------------------------------------------------------------- +Version: 3.3.2 +Date: 2022-03-20 + Bugfixes: + - Fixed a crash when a favorites entry was removed from the game (#107) + - Fixed that using Control + F to focus search did not work +--------------------------------------------------------------------------------------------------- +Version: 3.3.1 +Date: 2022-03-12 + Changes: + - Updated Korean locale (by x2605) (#101) + - Updated Russian locale (by Astorin) (#103) + Bugfixes: + - Fixed a crash when the first item group has no visible members in visual search (#102) + - Fixed a crash when using navigation hotkeys before opening an info GUI (#105) +--------------------------------------------------------------------------------------------------- +Version: 3.3.0 +Date: 2022-03-01 + Features: + - Added new properties: + - [NEW] Beacon: size, effect area, distribution effectivity, module slots, accepted modules, unlocked by, placed by + - Equipment: buffer capacity, placed in + - Fluid: fuel pollution + - [NEW] Generator: fluid consumption, minimum / maximum temperatures, max power production, base pollution, can burn, unlocked by, and placeable by + - Added Korean locale (by x2605) (#97) + - Added visual mode to the search GUI, providing a more vanilla-like search interface + - This interface can only show items and fluids + Changes: + - Any blueprintable entity may be shift+clicked to get a blueprint of it, regardless of whether or not it has a recipe (#91) + - Category and group table items are hidden by default + - Consolidated all machines into a single "entity" type + - Fluid temperature variants are now sorted and placed adjacent to their base fluid in search results + - Refactored all GUI code to improve modularity and significantly cleaned up the codebase + - Technology unlocks equipment, unlocks fluids, unlocks items, and unlocks machines are hidden by default + - Using the inspect hotkey while holding a selection tool will do nothing (#95) + Bugfixes: + - Fixed a crash when a mod prototype was removed without the mod versions changing + - Fixed "can mine" table header being unlocalised + - Fixed recipe output percentages not being rounded +--------------------------------------------------------------------------------------------------- +Version: 3.2.3 +Date: 2022-01-08 + Bugfixes: + - Fixed a rare crash during migrations (#90) + - Fixed a crash when a mod creates a force before the recipe book can be built (#94) +--------------------------------------------------------------------------------------------------- +Version: 3.2.2 +Date: 2021-12-06 + Changes: + - "--- categories" lists are hidden by default + - Improved some of the list header names + Bugfixes: + - Fixed that quick ref windows would not open when the info GUI is docked (#87) +--------------------------------------------------------------------------------------------------- +Version: 3.2.1 +Date: 2021-11-09 + Changes: + - Updated Russian locale (by Astorin) + Bugfixes: + - Added missing migration for GUI data from 3.2.0 +--------------------------------------------------------------------------------------------------- +Version: 3.2.0 +Date: 2021-11-07 + Features: + - Added new pages: + - Equipment category: All equipment and items belonging to each category + - Equipment: Size, take result, equipment properties, compatible fuels, fuel categories, equipment categories, and unlocked by for each equipment + - Added compatible equipment and equipment categories to the item page + - Added fuel categories to burner machine page + - Shift + click on a recipe with one product to view the product's page + - Using the inspect hotkey will attempt to open the info page relative to the currently open GUI + - Only works on vanilla GUIs (custom mod GUIs do not support relative anchoring) + - This can be disabled in the mod settings + Changes: + - Changed default inspect hotkey to alt+click + - Changed default search hotkey to Control + B + - Renamed 'burner machine' to 'machine' + Bugfixes: + - Fixed a crash if a prototype (somehow) doesn't have a stored translation (#80) + - Fixed a crash when another mod adds a force before RB has a chance to load + - Fixed a crash when using the search hotkey in the equipment grid GUI (#82) + - Fixed some edge-cases with the focus search hotkey logic + - Fixed that mining drills were not being processed for technology unlocks +--------------------------------------------------------------------------------------------------- +Version: 3.1.5 +Date: 2021-09-19 + Changes: + - Added Brazillian Portuguese translation (by BM123499) + - Quick reference windows now open next to their parent window + Bugfixes: + - Fixed that dragging a quick reference window would reset its position for a frame + - Fixed that settings wouldn't be preserved if they were falsey +--------------------------------------------------------------------------------------------------- +Version: 3.1.4 +Date: 2021-09-02 + Bugfixes: + - Fixed a crash when using the navigation hotkeys with a non-custom GUI open + - Fixed a crash when using the search hotkey in some windows +--------------------------------------------------------------------------------------------------- +Version: 3.1.3 +Date: 2021-08-18 + Bugfixes: + - Fixed a crash when an item has a place result that isn't in the Recipe Book + - Fixed navigation hotkeys not working if search was open + - Fixed the toggle quick ref button wouldn't be updated if it was in the stickied info GUI +--------------------------------------------------------------------------------------------------- +Version: 3.1.2 +Date: 2021-08-17 + Bugfixes: + - Fixed a crash when a mod unlocks a research during config changed before Recipe Book does its own configuration changes + - Fixed a crash when clicking the Factory Planner dimmer frame while an info GUI is stuck to search + - Fixed that the search GUI would not be brought to the front when clicking the FP dimmer frame +--------------------------------------------------------------------------------------------------- +Version: 3.1.1 +Date: 2021-08-16 + Bugfixes: + - Fixed a crash when joining a multiplayer game without changing your language +--------------------------------------------------------------------------------------------------- +Version: 3.1.0 +Date: 2021-08-16 + Features: + - Added "compatible modules" to the crafter page (hidden by default, must be enabled in the page settings) + - Added "burner machine" page + - Burner machines are machines that consume fuel and aren't a crafter, lab, mining drill, or offshore pump + - Some of these machines might get their own pages someday if enough relevant information is available for display + - Added "burnt result" and "burnt result of" to the item page + Gui: + - When clicking a search result in the search GUI with the left mouse button, the info GUI will be "stickied" to the search GUI + - A "detach" button will appear in the titlebar of the sticky window, allowing you to detach it + - Middle-clicking something will open it in a standalone info GUI + - This brings back a 2.0-esque experience for those who preferred it + - This can be disabled in the mod settings + - Added the ability to collapse components of an info page + - Some components (categories, compatible modules) default to collapsed to save space + - Default state can be overridden in the settings + - Added search GUI location setting, choose between top-left and center + - Added page content settings + - Each "section" of a page can be enabled or disabled, and have the following settings based on type: + - All: + - Default state (normal, collapsed, hidden) + - Table (with absolute rows): + - Row visibility + - List box: + - Max rows + Changes: + - Machines that have exactly one item to place them will inherit the item's hidden & enabled statuses + - Machines that have no items to place them will be marked as disabled + - Renamed "rocket launch payloads" to "rocket launch product of" + - Search GUI now opens below the mod_gui button frame, instead of all the way in the corner + - Search GUI now takes "opened" focus again + - The pin button has returned as well, allowing you to keep it open while viewing other GUIs + Bugfixes: + - Fixed that class filters in search used the internal names instead of the localised names + - Fixed that fluidboxes were not being considered for compatible recipes on crafters + - Fixed that the "shift + click to get a blueprint" interaction help wouldn't be shown in certain conditions +--------------------------------------------------------------------------------------------------- +Version: 3.0.3 +Date: 2021-08-14 + Changes: + - Updated Russian locale by Astorin + - The search GUI now supports locale-specific widths + Bugfixes: + - Fixed a crash when an item has a resource as its place result + - Fixed a crash when a resource has no products when mined +--------------------------------------------------------------------------------------------------- +Version: 3.0.2 +Date: 2021-08-10 + Changes: + - Removed `/RecipeBook` command, replaced with `/rb-refresh-all` + - Updated to flib 0.8.2 + Bugfixes: + - Fixed a crash when a mod added or removed pretty much anything to/from an existing save + - Fixed that a new search GUI would be created every time the player joined a multiplayer game +--------------------------------------------------------------------------------------------------- +Version: 3.0.1 +Date: 2021-08-09 + Changes: + - Updated to flib 0.8.1 +--------------------------------------------------------------------------------------------------- +Version: 3.0.0 +Date: 2021-08-09 + Features: + - Added new pages: + - Fuel category: fluids and items belonging to each category + - Group: fluids, items, and recipes belonging to each group + - Lab: research speed, compatible science packs, compatible fuels, fuel categories, unlocked by, placeable by, size + - Mining drill: mining speed, mining area, compatible resources, resource categories, compatible fuels, fuel categories, unlocked by, placeable by, size + - Offshore pump: pumping speed, output fluid, unlocked by, placeable by, size + - Recipe category: fluids, items, and recipes belonging to each recipe category + - Resource: resource category, required fluid, mining time, products, compatible mining drills + - Resource category: resources and mining drills belonging to that category + - Added numerous properties that were previously confined to tooltips, and new properties: + - Crafter: Crafting speed, ingredient limit, size, compatible fuels, fuel categories + - Fluid: Fuel value, default temperature, group + - Item: Stack size, fuel value, fuel pollution, vehicle acceleration, vehicle top speed, group, place result (if the place result has RB data), module effects + - Recipe: Recipe category, group, compatible modules + - Added settings to toggle fuel category, group, and resource category member visibility + - Added text search to information pages + - Alt-clicking an ingredient or product in a quick ref window will mark it green + - Middle-clicking an object will open that object in a new window + - Search and information have been separated into separate GUIs + - You can open as many information windows as you want simultaneously + Changes: + - "Empty X barrel" recipes will no longer unlock the fluid that they empty + - Recipe time-to-craft is now displayed in a generic info table, rather than as a fake ingredient + - Renamed "placeable by" to "placed by" + - Split the universal "search" hotkey into separate search and open selected object hotkeys + - Unresearched objects are shown by default + Optimizations: + - Reduced network traffic taken up by translation requests by a ridiculous amount + - Reduced the mod's script data footprint by more than 10x + - Significantly reduced the amount of time translating takes + Bugfixes: + - Fixed that recipe "made in" didn't account for ingredient count limits on assemblers + - Fixed that rocket launch products were always marked as their own payload + - Fixed that rocket launch products weren't being shown in many places due to invalid recipe categories +--------------------------------------------------------------------------------------------------- +Version: 2.7.1 +Date: 2021-05-03 + Bugfixes: + - Fixed a crash when a new force was created +--------------------------------------------------------------------------------------------------- +Version: 2.7.0 +Date: 2021-05-03 + Features: + - Added an option to show disabled recipes and technologies + - Added indicators for when a recipe or technology is disabled + - Added researched state for labs and offshore pumps + Changes: + - Disabled recipes and technologies are hidden by default + - When a fluid has multiple temperatures, the default temperature will be displayed for fluid products that usually have no temperature + Bugfixes: + - Fixed a crash when using the hotkey on a science lab + - Fixed fluids not being enabled at start even if their offshore pump was + - Fixed fluid temperature variants not copying recipe categories from their parents + - Fixed fluid variant ingredient in lists being completely wrong in most cases + - Fixed several inconsistencies with fluid temperature variation researched status +--------------------------------------------------------------------------------------------------- +Version: 2.6.0 +Date: 2021-04-05 + Features: + - Added generic object opening support + - Hovering over any crafter, fluid, item, recipe, or technology anywhere in the game and using the Recipe Book hotkey will open that object's page + - Added fuel pollution, vehicle acceleration, and vehicle top speed multipliers to item tooltips + - Added tooltips to close buttons + Bugfixes: + - Fixed a crash if another mod updated a new technology in on_configuration_changed before Recipe Book refreshed its data + - Fixed a crash when a required fluid for mining was unresearched and "show unresearched objects" was off + - Fixed a crash when using "%" in search in some situations + - Fixed that changes to object availability would not apply when opening the GUI while preserve session is enabled (credit to kubiix) +--------------------------------------------------------------------------------------------------- +Version: 2.5.2 +Date: 2021-02-17 + Bugfixes: + - Fixed a crash when an infinite technology only has one level (#44) + - Fixed a crash when researching a previously-disabled technology (#44) +--------------------------------------------------------------------------------------------------- +Version: 2.5.1 +Date: 2021-02-17 + Bugfixes: + - Fixed a crash when a character entity had an item to place it (#43) +--------------------------------------------------------------------------------------------------- +Version: 2.5.0 +Date: 2021-02-17 + Features: + - Added controls for navigating the session history, bound by default to the back and forward buttons on the mouse + - Added default recipe category excludes for Creative Mod and the PySuite + - Added fluid temperature support (thanks kubiix!) + - When searching, temperatures and temperature ranges for each fluid will be shown as well + - Each temperature and temperature range has a separate fluid page listing the properties specific to that temperature or range + - Each fluid still has a non-temperature page that shows all properties for that fluid + - Added highlight on the last selected item (configurable) + - Added "made in" to the recipe quick reference panel + - Added required fluid to resource tooltip + - Added "placeable by" and "unlocked by" to the crafter page + - Added help message when viewing a blank page + - Added technology page and search category (credit to kubiix) + Changes: + - Adjusted glyph sizing to fix alignment + - Adjusted titlebar styling to match the base game + - Moderatly increased the size of the main GUI + - Improved interaction help formatting + - Put the settings gear icon on a diet + - Recipes and materials that are available at the beginning of the game are now treated as such + - Separated fluid and item search categories + - Significantly refactored the data processor to improve code quality, simplify some things, and support fluid temperatures + - Removed "burnable in" and "compatible fuels" sections, as they were inconsistent and only worked with crafters + Bugfixes: + - Fixed a crash with certain modded burner entities + - Fixed a crash when upgrading from a pre-2.0 version of the mod + - Fixed a long-standing bug that materials would be marked as available when usable as an ingredient, even if it was not obtainable + - Fixed crafter labels showing interaction helps + - Fixed that even if a page was already open, it would be added again to the session history and re-opened + - Fixed that hand-minable resource items would be marked as unavailable if no available recipes produced it + - Fixed the session history active line not lining up with the other lines + - Fixed that the GUIs would not update when a research was finished (credit to kubiix) +--------------------------------------------------------------------------------------------------- +Version: 2.4.1 +Date: 2021-01-02 + Features: + - Added compatibility with Factory Planner's dimmer frame - RB will now stay in front of it if both GUIs are open at once + Bugfixes: + - Fixed RB GUI not coming to the front when opened + - Fixed that closing RB while pinned would also close whatever GUI happened to be marked as `opened` at the time +--------------------------------------------------------------------------------------------------- +Version: 2.4.0 +Date: 2021-01-02 + Features: + - Added crafter page, listing the recipes compatible with that crafter and the fuels it is compatible with + - Added search by crafter + - Added `burnable in` to material page, listing the crafters where it can be used as fuel + - Added descriptions to object tooltips + - Added fuel values to material tooltips + - Added session history listing to the navigation button tooltips + - Pressing enter while in the search textfield will switch search categories + - When opening the GUI, the home page will be shown instead of the last viewed page (optional) + Changes: + - Updated the mod to the new flib `gui-beta` module + - Removed per-player settings from the mod settings menu - use the mod's built-in settings GUI instead + Bugfixes: + - Fixed a crash when an object was added to the favorites list, then removed from the game on configuration changed + - Fixed that quick reference windows would not update their contents when settings were changed +--------------------------------------------------------------------------------------------------- +Version: 2.3.3 +Date: 2020-12-06 + Changes: + - Clicking a crafter to give a blueprint of it will use the blueprint clipboard intead of a one-off item +--------------------------------------------------------------------------------------------------- +Version: 2.3.2 +Date: 2020-11-23 + Changes: + - Updated to Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 2.3.1 +Date: 2020-11-15 + Changes: + - Updated deprecated require path for flib data-util module + - Updated German translation (by Moonsilence) +--------------------------------------------------------------------------------------------------- +Version: 2.3.0 +Date: 2020-09-02 + Features: + - Added setting to disable the "alternate name" in object tooltips + - Added `usable in` list to the material page, listing the labs that that science pack is usable in + - Added crafting speed and crafting categories to crafter tooltips + - Added category, crafting time, ingredients, and products to recipe tooltips + Changes: + - Characters are now properly detected and included as crafters, instead of being hard-coded +--------------------------------------------------------------------------------------------------- +Version: 2.2.0 +Date: 2020-08-30 + Features: + - Added stack size to item tooltips + - Added `pumped by` to material page, which lists offshore pumps that produce that fluid + - Added `rocket launch payloads` and `rocket launch products` to material page + - Added rocket silos as crafters + - Rocket silo crafters will display their required amount of rocket parts in their label and tooltip + - Added fixed recipe to crafter tooltip if it has one + - Shift + clicking a crafter with a fixed recipe will open that recipe's page + - Added `purge-memoizer-cache` argument to the `/RecipeBook` command + Changes: + - Known "meta-recipes" (such as transport drones recipes used for requests) will no longer affect object availability + - If there is a mod whose meta-recipes are not excluded, please let me know so I can exclude it +--------------------------------------------------------------------------------------------------- +Version: 2.1.1 +Date: 2020-08-15 + Changes: + - Updated to Factorio 1.0 + Bugfixes: + - Fixed a crash due to improper checking of force availability data for crafters +--------------------------------------------------------------------------------------------------- +Version: 2.1.0 +Date: 2020-08-10 + Features: + - Added base crafting speed to recipe pages + - Added character to "made in" list for recipes that are hand-craftable + - Added brief interaction helps to all object tooltips + Changes: + - All recipe ingredients and products will always be shown despite object visibility settings + - Renamed "machine" back to "crafter" as the reason for the name change is moot at this point + Bugfixes: + - Fixed a crash when a mod would be removed while translations were running, but before those translations translated all of that mod's strings + - Fixed a crash when opening a quick reference panel for a hidden recipe, when show hidden objects is turned off + - Fixed a desync related to a player's connected status in multiplayer during a mod change +--------------------------------------------------------------------------------------------------- +Version: 2.0.4 +Date: 2020-07-27 + Features: + - Enabling "use internal names" will change search to use internal names as well + Changes: + - Renamed "show internal names" to "use internal names" and moved to search settings + Bugfixes: + - Fixed a desync related to player.connnected being unreliable during on_configuration_changed in multiplayer + - Fixed a potential crash if a GUI handler was removed between versions +--------------------------------------------------------------------------------------------------- +Version: 2.0.3 +Date: 2020-07-25 + Bugfixes: + - Fixed that the search history would not be purged on configuration change, leading to crashes with non-existent items + - Reverted the session history "fix" from v2.0.2 that was actually being caused by the above issue, and didn't actually fix anything + - Fixed a crash with the listbox item clicked regex when an item name has brackets in it + - Fixed a crash when attempting to get a machine blueprint for a crafter that had the "non-blueprintable" flag set + - Fixed that temporary machine blueprints of machines with a side that was an even number of tiles would be placed one tile off from where the preview was +--------------------------------------------------------------------------------------------------- +Version: 2.0.2 +Date: 2020-07-25 + Features: + - Clicking a machine on the recipe screen will give you a blueprint of that machine with the recipe set + - Right-clicking the search textfield will clear it + Bugfixes: + - Fixed that the session history would sometimes get a duplicated home entry, causing a crash when trying to format the back button +--------------------------------------------------------------------------------------------------- +Version: 2.0.1 +Date: 2020-07-20 + Changes: + - Improved performance of "add to favorites" button + - Remote interface: + - Consolidated check_obj_valid into open_page, having it separate wasn't really necessary +--------------------------------------------------------------------------------------------------- +Version: 2.0.0 +Date: 2020-07-19 + Features: + - Added the ability to "pin" the GUI to the screen, so it can exist alongside other windows + - Added the ability to "favorite" an object for easy access later + - Added browse-able search history, keeping track of the last 20 searches + - Added setting to display internal prototype names instead of translations + - Added object type glyphs + - Added settings for toggling specific recipe categories + - Added an in-game settings screen for on-the-fly changes + - Added German translation by LuziferSenpai + Changes: + - Completely rewrote the mod from scratch to improve code quality, efficiency, and structure + - Search and information are now combined into one window + - Information listboxes are significantly wider and are arranged in a single column + - Absolutely all recipes are now included in the Recipe Book data + - The GUI will remain open when clicking on a technology + - Remote Interface: + - Added check_obj_valid function + - Renamed open_gui to open_page and changed argument formatting (see docs) + - Removed tie-ins to the back button and associated events (reopen_source_event) + Bugfixes: + - Fixed several crashes related to GUI buttons and multiplayer latency + +--------------------------------------------------------------------------------------------------- +Version: 1.3.6 +Date: 2020-06-24 + Bugfixes: + - Fixed a crash related to GUI style changes in Factorio 0.18.33 + - Fixed typos in changelog +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 2020-06-19 + Features: + - Added /RecipeBook command for diagnosing / fixing issues, use /help RecipeBook to see possible options +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2020-06-11 + Bugfixes: + - Fixed a crash when re-joining a multiplayer game for the second time after a mod configuration change + - Fixed that loading certain scenarios would cause translations to be duplicated +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 2020-05-31 + Changes: + - Deep Storage Unit (DSU) recipes are now hidden from the Recipe Book + - The log is no longer spammed with recipe book data unless the debug adapter is hooked + Bugfixes: + - Fixed a crash when two players were searching at the same time +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 2020-05-26 + Bugfixes: + - Fixed that object availability would not be updated when migrating +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 2020-05-26 + Bugfixes: + - Fixed a crash when joining a multiplayer game for not the first time +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2020-05-26 + Features: + - Added keyboard shortcuts for changing categories in the search GUI + - The shortcut button properly toggles the search GUI open/closed, instead of just opening it + - Hidden objects are now indicated with an [H] moniker + - Unavailable (unresearched) objects are colored red + - Added an option to hide unavailable objects + Changes: + - Refactored mod structure to improve performance and simplicity + - Switched from RaiLuaLib to FLib + - Search is now spread out over multiple ticks to save performance and allow the addition of more complex features + - Changing search categories will no longer reset the textfield to blank + - Removed crafters as a searchable category and info screen, the utility offered by them was minimal + - Transport drones recipes are now excluded from the Recipe Book + - Recipes that have no ingredients are excluded from the Recipe Book + - Updated GUI styles for Factorio 0.18.27 +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 2020-04-12 + Changes: + - Converted all strings to double quotes + - Removed search button from next to close button (it will come back as an ACTUAL search button later) + - Translations are no longer performed on every join. If you change languages, simply use the /retranslate-all-dictionaries command to retranslate your dictionaries + Bugfixes: + - Fixed crash when using RaiLuaLib 0.2.4 +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 2020-04-09 + Changes: + - Updated to RaiLuaLib 0.2.3 +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2020-04-03 + Features: + - Added fuzzy search option + Changes: + - Marked Death Markers as incompatible, because it somehow causes this mod to desync in multiplayer + Bugfixes: + - Added an error catch for a common error that I cannot reproduce. It gives instructions on how to report the error, and prints several helpful things to a file. +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2020-04-01 + Features: + - You can now open multiple recipe quick reference windows simultaneously + - Using the search hotkey while holding an item will open that item's material page, if one exists + - Fluid searching with the hotkey now supports infinity pipes + Changes: + - Recipe quick reference windows are now draggable + - Remote Interface: + - open_info_gui -> open_gui + - object_name -> object + - 'object' is now specified as a table when opening a material GUI, the first entry being the material type, and the second the name + - Recipe Quick Reference windows may be opened using the 'recipe-quick-reference` gui_type + - source_data is not supported when opening this GUI type + Bugfixes: + - Fixed that items and fluids with identical names would conflict + +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2020-03-20 + Changes: + - Materials that aren't used in any recipes are excluded from the Recipe Book + - Significantly optimized GUI construction and update logic (it is now over 4x faster!) + - Removed mod GUI button, it is replaced by a shortcut + - Replaced the chef hat book icon with a proper "search recipe book" icon + - Refactored search loop to make adding more features easier + - Removed lualib and made it a separate mod, RaiLuaLib, that this mod now depends on + Bugfixes: + - Fixed crash when a clicking an object with rich text in the name (Krastorio 2) + - Fixed GUI alignment issues caused by style changes in 0.18.13 + - Fixed potential issues with conditionally registered handlers losing their correlations with custom mod events when configuration changes +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2020-03-08 + Features: + - Added a function to the remote interface to return the current API version +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2020-02-15 + Bugfixes: + - Fixed a crash when opening a material from the recipe page (bad pattern matching) +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2020-02-12 + Bugfixes: + - Fixed incompatibilities with Quick Item Search +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2020-02-12 + Changes: + - Recipe amounts and crafting times are now shown in a slightly bold font + Bugfixes: + - Fixed a crash when reading a product with a variable amount of materials +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020-02-11 + Features: + - Added support for the /retranslate-all-dictionaries command, which will retranslate all of your dictionaries + - Added support for variable probability results in recipes + - Using the hotkey while hovering over a pipe, pump, storage tank, or fluid wagon will open its fluid's material page + Bugfixes: + - Fixed a crash when confirming the search textfield when the results listbox was empty + - Fixed a crash when a recipe's product didn't have an amount specified + - Fixed a crash when there was more than one player on the map in some cases + - Fixed the translation module doing extraneous translating + - Fixed the translation module would never stop translating if the previous translation finished before you restarted it +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2020-02-09 + Features: + - Initial release diff --git a/RecipeBook_3.5.6/constants.lua b/RecipeBook/constants.lua similarity index 100% rename from RecipeBook_3.5.6/constants.lua rename to RecipeBook/constants.lua diff --git a/RecipeBook_3.5.6/control.lua b/RecipeBook/control.lua similarity index 100% rename from RecipeBook_3.5.6/control.lua rename to RecipeBook/control.lua diff --git a/RecipeBook_3.5.6/data.lua b/RecipeBook/data.lua similarity index 100% rename from RecipeBook_3.5.6/data.lua rename to RecipeBook/data.lua diff --git a/RecipeBook_3.5.6/fonts/RecipeBook.ttf b/RecipeBook/fonts/RecipeBook.ttf similarity index 100% rename from RecipeBook_3.5.6/fonts/RecipeBook.ttf rename to RecipeBook/fonts/RecipeBook.ttf diff --git a/RecipeBook/graphics/dark-line.png b/RecipeBook/graphics/dark-line.png new file mode 100644 index 00000000..51ec4b77 Binary files /dev/null and b/RecipeBook/graphics/dark-line.png differ diff --git a/RecipeBook/graphics/favorite-slot-button-icon.png b/RecipeBook/graphics/favorite-slot-button-icon.png new file mode 100644 index 00000000..1571f0b8 Binary files /dev/null and b/RecipeBook/graphics/favorite-slot-button-icon.png differ diff --git a/RecipeBook/graphics/frame-action-icons.png b/RecipeBook/graphics/frame-action-icons.png new file mode 100644 index 00000000..d3f86cd1 Binary files /dev/null and b/RecipeBook/graphics/frame-action-icons.png differ diff --git a/RecipeBook/graphics/shortcut.png b/RecipeBook/graphics/shortcut.png new file mode 100644 index 00000000..44ca316e Binary files /dev/null and b/RecipeBook/graphics/shortcut.png differ diff --git a/RecipeBook/graphics/small-tool-icons.png b/RecipeBook/graphics/small-tool-icons.png new file mode 100644 index 00000000..45857c2c Binary files /dev/null and b/RecipeBook/graphics/small-tool-icons.png differ diff --git a/RecipeBook/graphics/tool-icons.png b/RecipeBook/graphics/tool-icons.png new file mode 100644 index 00000000..b0c66d46 Binary files /dev/null and b/RecipeBook/graphics/tool-icons.png differ diff --git a/RecipeBook/info.json b/RecipeBook/info.json new file mode 100644 index 00000000..99066349 --- /dev/null +++ b/RecipeBook/info.json @@ -0,0 +1,15 @@ +{ + "name": "RecipeBook", + "version": "3.5.7", + "title": "Recipe Book", + "author": "raiguard", + "description": "Search for information about entities, fluids, items, recipes, and technologies in a clean, easy-to-use interface. Similar to FNEI and What is it Really Used For.", + "contact": "https://github.com/raiguard/RecipeBook", + "homepage": "https://github.com/raiguard/RecipeBook", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.80", "flib >= 0.12.9"], + "package": { + "git_publish_branch": "master", + "ignore": ["imgui.ini", "resources", "screenshots"] + } +} diff --git a/RecipeBook_3.5.6/locale/en/RecipeBook.cfg b/RecipeBook/locale/en/RecipeBook.cfg similarity index 100% rename from RecipeBook_3.5.6/locale/en/RecipeBook.cfg rename to RecipeBook/locale/en/RecipeBook.cfg diff --git a/RecipeBook_3.5.6/locale/en/info.json b/RecipeBook/locale/en/info.json similarity index 100% rename from RecipeBook_3.5.6/locale/en/info.json rename to RecipeBook/locale/en/info.json diff --git a/RecipeBook/locale/ru/RecipeBook.cfg b/RecipeBook/locale/ru/RecipeBook.cfg new file mode 100644 index 00000000..18316d49 --- /dev/null +++ b/RecipeBook/locale/ru/RecipeBook.cfg @@ -0,0 +1,384 @@ +[command-help] +rb-refresh-all=- Π—Π°Π½ΠΎΠ²ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Книги Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС интСрфСйсы ΠΈ пСрСвСсти словари. + +[controls] +rb-jump-to-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ +rb-navigate-backward=Назад +rb-navigate-forward=Π’ΠΏΠ΅Ρ€Ρ‘Π΄ +rb-open-selected=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +rb-return-to-home=Π”ΠΎΠΌΠΎΠΉ +rb-search=Поиск Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² + +[entity-type] +accumulator=Аккумулятор +ammo-turret=Π’ΡƒΡ€Π΅Π»ΡŒ с боСприпасами +arithmetic-combinator=АрифмСтичСский ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ +arrow=Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° +artillery-flare=АртиллСрийская Π²ΡΠΏΡ‹ΡˆΠΊΠ° +artillery-projectile=АртиллСрийский снаряд +artillery-turret=АртиллСрийская установка +artillery-wagon=АртиллСрийский Π²Π°Π³ΠΎΠ½ +assembling-machine=Π‘Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ +beacon=Маяк +beam=Π›ΡƒΡ‡ +boiler=Π‘ΠΎΠΉΠ»Π΅Ρ€ +burner-generator=Π’Π²Π΅Ρ€Π΄ΠΎΡ‚ΠΎΠΏΠ»ΠΈΠ²Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ +cargo-wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ +character=ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ +character-corpse=Π’Ρ€ΡƒΠΏ пСрсонаТа +cliff=Π‘ΠΊΠ°Π»Π° +combat-robot=Π‘ΠΎΠ΅Π²ΠΎΠΉ Π΄Ρ€ΠΎΠ½ +constant-combinator=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ +construction-robot=Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€ΠΎΠ½ +container=ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ +corpse=Π’Ρ€ΡƒΠΏ +curved-rail=Π˜Π·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ +decider-combinator=Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ +deconstructible-tile-proxy=ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠ»Π° +electric-energy-interface=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ элСктроэнСргии +electric-pole=ΠžΠΏΠΎΡ€Π° Π›Π­ΠŸ +electric-turret=ЭлСктричСская Ρ‚ΡƒΡ€Π΅Π»ΡŒ +entity-ghost=ΠŸΡ€ΠΈΠ·Ρ€Π°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° +explosion=Π’Π·Ρ€Ρ‹Π² +fire=Огонь +fish=Π Ρ‹Π±Π° +flame-thrower-explosion=ΠžΠ³Π½Π΅ΠΌΡ‘Ρ‚Π½Ρ‹ΠΉ Π²Π·Ρ€Ρ‹Π² +fluid-turret=Жидкостная Ρ‚ΡƒΡ€Π΅Π»ΡŒ +fluid-wagon=Π’Π°Π³ΠΎΠ½-цистСрна +flying-text=Π›Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ тСкст +furnace=ΠŸΠ΅Ρ‡ΡŒ +gate=Π’ΠΎΡ€ΠΎΡ‚Π° +generator=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +heat-interface=Π’Π΅ΠΏΠ»ΠΎΠ²ΠΎΠΉ интСрфСйс +heat-pipe=ВСпловая Ρ‚Ρ€ΡƒΠ±ΠΊΠ° +highlight-box=ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ выдСлСния +infinity-container=БСсконСчный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ +infinity-pipe=БСсконСчная Ρ‚Ρ€ΡƒΠ±Π° +inserter=ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ‚ΠΎΡ€ +item-entity=Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +item-request-proxy=ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ запроса ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² +lab=Лаборатория +lamp=Π›Π°ΠΌΠΏΠ° +land-mine=Мина +linked-belt=Бвязанный ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ +linked-container=Бвязанный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ +loader=ΠŸΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +loader-1x1=ΠŸΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ (1Ρ…1) +locomotive=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² +logistic-container=ЛогистичСский ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ +logistic-robot=Вранспортный Π΄Ρ€ΠΎΠ½ +market=Π Ρ‹Π½ΠΎΠΊ +mining-drill=Π‘ΡƒΡ€ +offshore-pump=ΠŸΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½Ρ‹ΠΉ насос +particle-source=Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ частиц +pipe=Π’Ρ€ΡƒΠ±Π° +pipe-to-ground=ПодзСмная Ρ‚Ρ€ΡƒΠ±Π° +player-port=ΠŸΠΎΡ€Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° +power-switch=Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ +programmable-speaker=ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊ +projectile=Бнаряд +pump=Помпа +radar=Π Π°Π΄Π°Ρ€ +rail-chain-signal=ΠŸΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ свСтофор +rail-remnants=Обломки Ρ€Π΅Π»ΡŒΡΠΎΠ² +rail-signal=Π‘Π²Π΅Ρ‚ΠΎΡ„ΠΎΡ€ +reactor=Π Π΅Π°ΠΊΡ‚ΠΎΡ€ +resource=РСсурс +roboport=Дронстанция +rocket-silo=РакСтная ΡˆΠ°Ρ…Ρ‚Π° +rocket-silo-rocket=Π Π°ΠΊΠ΅Ρ‚Π° Π² Ρ€Π°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΡˆΠ°Ρ…Ρ‚Π΅ +rocket-silo-rocket-shadow=ВСнь Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Π² Ρ€Π°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΡˆΠ°Ρ…Ρ‚Π΅ +simple-entity=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ +simple-entity-with-force=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, принадлСТащая ΠΊΠΎΠΌΠ°Π½Π΄Π΅ (силС) +simple-entity-with-owner=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° +smoke-with-trigger=Π”Ρ‹ΠΌ с Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ +solar-panel=БолнСчная панСль +speech-bubble=ΠŸΡƒΠ·Ρ‹Ρ€ΡŒ с тСкстом +spider-leg=Нога ΠΏΠ°ΡƒΠΊΠ° +spider-vehicle=Вранспорт ΠΏΠ°ΡƒΠΊΠ° +splitter=Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ +sticker=НаклСйка +storage-tank=Π Π΅Π·Π΅Ρ€Π²ΡƒΠ°Ρ€ +straight-rail=ΠŸΡ€ΡΠΌΡ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ +stream=ΠŸΠΎΡ‚ΠΎΠΊ +tile-ghost=ΠŸΡ€ΠΈΠ·Ρ€Π°ΠΊ Ρ‚Π°ΠΉΠ»Π° +train-stop=ЖСлСзнодороТная станция +transport-belt=ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ +tree=Π”Π΅Ρ€Π΅Π²ΠΎ +turret=Π’ΡƒΡ€Π΅Π»ΡŒ +underground-belt=ΠŸΠΎΠ΄Π·Π΅ΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ +unit=ΠΠ½ΠΈΡ‚ +unit-spawner=ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡŽΠ½ΠΈΡ‚ΠΎΠ² +wall=Π‘Ρ‚Π΅Π½Π° + +[fuel-category-name] +burnable-fluid=БТигаСмая ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ + +[gui] +rb-accepted-equipment=ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰Π΅Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ +rb-accepted-modules=ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ +rb-add-to-favorites=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅ +rb-affects-recipes=ВлияСт Π½Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +rb-alt-click=Alt + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ +rb-attach-search-results-description=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска откроСтся информационная страница, прикрСплённая ΠΊ ΠΎΠΊΠ½Ρƒ поиска. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‰Ρ‘Π»ΠΊΠ½ΡƒΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска, Π²Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ страницС.\nΠ’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² любоС врСмя. +rb-attach-search-results=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска Π² ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ интСрфСйса +rb-base-pollution=Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ загрязнСниС +rb-base-pollution-desc=ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ загрязнСния ΠΌΠΎΠΆΠ΅Ρ‚ сильно Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ сТигаСмой Тидкости. +rb-beacon=Маяк +rb-buffer-capacity=ΠΠΌΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€Π° +rb-burned-in=БТигаСтся Π² +rb-burnt-result=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сТигания +rb-burnt-result-of=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сТигания +rb-can-burn=МоТно ΡΠΆΠΈΠ³Π°Ρ‚ΡŒ +rb-can-craft=МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ +rb-can-mine=МоТно Π΄ΠΎΠ±Ρ‹Π²Π°Ρ‚ΡŒ +rb-captions=Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ +rb-catalyst-abbrev=(К) +rb-catalyst-amount=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° +rb-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ +rb-categories-description=Π‘Π½ΠΈΠΌΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с поисковых ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… страниц.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ этих настроСк (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹). +rb-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ +rb-change-search-type=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ поиска +rb-charging-energy=ЭнСргия зарядки +rb-click=Π©Π΅Π»Ρ‡ΠΎΠΊ +rb-close-quick-ref-window=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ +rb-close-search-gui-after-selection=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс поиска послС Π²Ρ‹Π±ΠΎΡ€Π° +rb-collapse=Π‘Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ +rb-collapsed=Π‘Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎ +rb-construction-radius=Радиус ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π° +rb-content=Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ +rb-control-click=Control + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ +rb-crafter=Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ +rb-crafting-time=ВрСмя создания +rb-crafting-time-desc=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π² сборщикС со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ изготовлСния 1. +rb-default-gui-type=Π’ΠΈΠΏ интСрфСйса ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +rb-default-gui-type-description=[font=default-semibold]ВСкстовый:[/font] Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ интСрфСйс Книги Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², настроСнный Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ поиск ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎΡ‚ интСрфСйс поиска ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ всС Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².\n[font=default-semibold]Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ:[/font] Π‘ΠΎΠ»Π΅Π΅ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ" интСрфСйс поиска, основанный Π½Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈ Π·Π½Π°Ρ‡ΠΊΠ°Ρ…. Π­Ρ‚ΠΎΡ‚ интСрфСйс поиска ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΈ Тидкости.\nΠ­Ρ‚ΠΎ всСго лишь Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π² самом графичСском интСрфСйсС поиска. +rb-default-gui-type-textual=ВСкстовый +rb-default-gui-type-visual=Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ +rb-default-state=БостояниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +rb-default-temperature=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +rb-delete-favorites=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅ +rb-delete-history=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ +rb-detach-instruction=ΠžΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ +rb-disabled-abbrev=(О) +rb-distribution-effectivity=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ распрСдСлСния +rb-effect-area=ΠžΠ±Π»Π°ΡΡ‚ΡŒ эффСкта +rb-energy-consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ +rb-energy-per-shield-point=Π­Π½Π΅Ρ€Π³ΠΈΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ‰ΠΈΡ‚Π° +rb-energy-production=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ энСргии +rb-entities=Бущности +rb-entity=Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ +rb-entity-type=Π’ΠΈΠΏ сущности +rb-equipment-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ оборудования +rb-equipment-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ оборудования +rb-equipment=ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ +rb-equipment-properties=ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ оборудования +rb-expand=Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ +rb-expected-resources=ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ рСсурсы +rb-favorites=Π˜Π·Π±Ρ€Π°Π½Π½ΠΎΠ΅ +rb-fixed-recipe=Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +rb-fluid-consumption=ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Тидкости +rb-fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +rb-fluids=Жидкости +rb-format-amount=__1__ Γ— +rb-format-area=__1__Γ—__2__ +rb-format-seconds-parenthesis=(__1__ с) +rb-fuel-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° +rb-fuel-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° +rb-fuzzy-search-description=Π‘ΠΎΠ»Π΅Π΅ мягкоС сопоставлСниС с шаблоном для поиска.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] ПослС измСнСния этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ вступило Π² силу. +rb-fuzzy-search=НСчёткий поиск +rb-gathered-from=ДобываСтся ΠΈΠ· +rb-general=ОсновноС +rb-generator=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +rb-get-blueprint=ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ +rb-go-backward=Назад +rb-go-forward=Π’ΠΏΠ΅Ρ€Ρ‘Π΄ +rb-go-to-the-back=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π°Π·Π°Π΄ +rb-go-to-the-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ +rb-group=Π“Ρ€ΡƒΠΏΠΏΠ° +rb-hidden-abbrev=(Π‘) +rb-hidden=Π‘ΠΊΡ€Ρ‹Ρ‚ΠΎ +rb-history=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ +rb-ingredient-in=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ Π² +rb-ingredient-limit=ΠŸΡ€Π΅Π΄Π΅Π» ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π° +rb-ingredients=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ +rb-inputs=Π’Ρ…ΠΎΠ΄Ρ‹ +rb-interface=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ +rb-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +rb-items=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ +rb-item-type=Π’ΠΈΠΏ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +rb-jump-to-back=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† +rb-jump-to-the-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ +rb-lab=Лаборатория +rb-list-box-label=__1__ (__2__) +rb-logistic-radius=Радиус логистики +rb-made-in=Боздаётся Π² +rb-max-energy-production=Макс. производство элСктроэнСргии +rb-maximum-temperature=Макс. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +rb-max-rows=Макс. строк +rb-middle-click=БКМ +rb-mined-by=ДобываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ +rb-mined-from=ДобываСтся ΠΈΠ· +rb-minimum-temperature=Мин. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +rb-mining-area=ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ +rb-mining-drill=Π‘ΡƒΡ€ +rb-mining-drills=Π‘ΡƒΡ€Ρ‹ +rb-mining-speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ +rb-mining-time=ВрСмя Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ +rb-module-effects=Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +rb-module-slots=Π―Ρ‡Π΅ΠΉΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +rb-modules=ΠœΠΎΠ΄ΡƒΠ»ΠΈ +rb-no-content-warning=[img=warning-white] НСчСго ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… настройках. +rb-no-results=[img=warning-white] НСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². +rb-normal=ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ +rb-offshore-pump=ΠŸΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½Ρ‹ΠΉ насос +rb-open-info-relative-to-gui-description=Если этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, использованиС горячСй клавиши "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°" Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ страницу этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ графичСского интСрфСйса. Если графичСский интСрфСйс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ графичСский интСрфСйс Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ привязку, ΠΎΠ½ откроСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² сСрСдинС экрана. +rb-open-info-relative-to-gui=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ страницу ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского интСрфСйса +rb-open-in-technology-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ +rb-open-list-in-new-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ этот список Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅. +rb-open-quick-ref-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ +rb-pages=Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ +rb-per-second-suffix=/ с +rb-pin-instruction=Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ +rb-place-as-equipment-result=Π Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ +rb-placed-by=Π§Π΅ΠΌ размСщаСтся +rb-placed-in=РазмСщаСтся Π² +rb-place-result=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ размСщСния +rb-pollution-multiplier=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ загрязнСния +rb-prerequisite-of=ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для +rb-prerequisites=ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ +rb-product-of=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ +rb-products=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ +rb-pumped-by=Π§Π΅ΠΌ пСрСкачиваСтся +rb-recipe-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +rb-recipe-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +rb-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +rb-recipes=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +rb-remove-from-favorites=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ +rb-required-fluid=ВрСбуСмая ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +rb-required-units=Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ +rb-researched-in=Π˜ΡΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ΡΡ Π² +rb-research-ingredients-per-unit=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +rb-researching-speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исслСдования +rb-research-speed-desc=Базовая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исслСдования Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΉ. НС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ бонусы ускорСния. +rb-resource-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ рСсурса +rb-resource-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ рСсурса +rb-resource=РСсурс +rb-resources=РСсурсы +rb-right-click=ПКМ +rb-robot-limit=Π›ΠΈΠΌΠΈΡ‚ Π΄Ρ€ΠΎΠ½ΠΎΠ² +rb-rocket-launch-product-of=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ с +rb-rocket-launch-products=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ +rb-rocket-parts-required=ВрСбуСтся частСй Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ +rb-science-pack=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ +rb-search-filter=Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ поиска +rb-search-gui-location-center=Π¦Π΅Π½Ρ‚Ρ€ +rb-search-gui-location-description=ВсС ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ - это просто располоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ мСстополоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² срСднСй ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ строкС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. +rb-search-gui-location=РасполоТСниС ΠΎΠΊΠ½Π° поиска +rb-search-gui-location-top-left=НавСрху слСва +rb-search-instruction=Поиск (__CONTROL__focus-search__) +rb-search=Поиск +rb-search-title=Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +rb-search-type-both=Оба +rb-search-type-description=[font=default-semibold]Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅:[/font] ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ использовано для поиска.\n[font=default-semibold]Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅: [/font] Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ использовано для поиска.\n[font=default-semibold]Оба:[/font] НазваниС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для поиска. +rb-search-type-internal=Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ +rb-search-type-localised=Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ +rb-search-type=Π’ΠΈΠΏ поиска +rb-session-history=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ сСссии +rb-settings-instruction=Настройки +rb-settings=Настройки Recipe Book +rb-shield-points=Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Ρ‰ΠΈΡ‚Π° +rb-shift-click=Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ +rb-show-alternate-name-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ "Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅" Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ названия", это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. +rb-show-alternate-name=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ +rb-show-descriptions=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ описания +rb-show-detailed-tooltips-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС, Π²Ρ€ΠΎΠ΄Π΅ ΠΌΠΈΠ½ΠΈ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ страницы. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. +rb-show-detailed-tooltips=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ подсказки +rb-show-disabled-description="ΠžΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Π² ΠΈΠ³Ρ€Π΅ Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…. +rb-show-disabled=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ +rb-show-fluid-temperatures-absolute-only=Волько Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ +rb-show-fluid-temperatures-all=ВсС +rb-show-fluid-temperatures-description=[font=default-semibold]Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ:[/font] Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Тидкости Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² поискС.\n[font=default-semibold]Волько Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅:[/font] Волько Β«Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅Β» (Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹) Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² поискС.\n[font=default-semibold]ВсС:[/font] ВсС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² поискС. +rb-show-fluid-temperatures-off=Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ +rb-show-fluid-temperatures=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Тидкости +rb-show-glyphs=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΊΠΎΠ½ΠΊΠΈ +rb-show-hidden-description="Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… списках Π²Ρ‹Π±ΠΎΡ€Π°, Π½ΠΎ с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] НСкоторыС скрытыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ этой настройки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ продукция Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°). +rb-show-hidden=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ +rb-show-interaction-helps=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ подсказки +rb-show-internal-names-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вмСсто Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ названия.\nЕсли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅", ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС. +rb-show-internal-names=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ +rb-show-made-in-in-quick-ref=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ "создаётся Π²" Π² ΠΎΠΊΠ½Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ +rb-show-unresearched=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСисслСдованныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ +rb-size=Π Π°Π·ΠΌΠ΅Ρ€ +rb-stack-size=Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ‡ΠΊΠΈ +rb-take-result=Π’Π·ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ +rb-tech-level-desc=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ этой бСсконСчной Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. +rb-tech-level=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ +rb-technology=ВСхнология +rb-temperatures=Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ +rb-time-per-unit-desc=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π½Π° исслСдованиС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ исслСдования 1. +rb-time-per-unit=Π’Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ +rb-toggle-completed=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ΅ +rb-tooltips=Подсказки +rb-unlocked-by=РазблокируСтся этим +rb-unlocks-entities=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ сущности +rb-unlocks-equipment=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ +rb-unlocks-fluids=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Тидкости +rb-unlocks-items=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ +rb-unlocks-recipes=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +rb-unresearched=НСисслСдовано +rb-view-base-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +rb-view-details-in-new-window=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ подробности Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ +rb-view-details=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ подробности +rb-view-fixed-recipe=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исправлСнный Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +rb-view-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +rb-view-ingredient-in=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ Π² +rb-view-product-details=ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ свСдСний ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ +rb-view-product-of=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ· +rb-view-required-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ + +[item-name] +rb-crafter-blueprint=Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ сборщика + +[item-type] +ammo=БоСприпасы +armor=Броня +blueprint=Π§Π΅Ρ€Ρ‚Ρ‘ΠΆ +blueprint-book=Книга Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ΅ΠΉ +capsule=ΠšΠ°ΠΏΡΡƒΠ»Π° +copy-paste-tool=БрСдство копирования/вставки +deconstruction-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ +gun=ΠžΡ€ΡƒΠΆΠΈΠ΅ +item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +item-with-entity-data=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сущности +item-with-inventory=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Ρ‘ΠΌ +item-with-label=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с ярлыком +item-with-tags=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с тэгами +mining-tool=Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ миграция) +module=ΠœΠΎΠ΄ΡƒΠ»ΡŒ +rail-planner=ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Ρ€Π΅Π»ΡŒΡΠΎΠ² +repair-tool=БрСдство Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° +selection-tool=БрСдство Π²Ρ‹Π±ΠΎΡ€Π° +spidertron-remote=ΠŸΡƒΠ»ΡŒΡ‚ управлСния ΠΏΠ°ΡƒΠΊΠΎΡ‚Ρ€ΠΎΠ½ΠΎΠΌ +tool=БрСдство +upgrade-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ + +[message] +rb-cannot-create-blueprint=НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ. +rb-cannot-open-gui=НСвозмоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠšΠ½ΠΈΠ³Ρƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅. Если Ρ‚Π°ΠΊ продолТаСтся Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ [color=128, 206, 240]/rb-refresh-all[/color]. +rb-can-open-gui=Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступна! +rb-invalid-command=НСвСрная ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ [color=128, 206, 240]/help RecipeBook[/color] для просмотра доступных ΠΊΠΎΠΌΠ°Π½Π΄. +rb-memoizer-cache-cleared=Кэш memoizer ΠΎΡ‡ΠΈΡ‰Π΅Π½. +rb-object-has-no-page=Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅Ρ‚ страницы Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² + +[mod-description] +RecipeBook=Π˜Ρ‰ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сущностях, Тидкостях, ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°Ρ…, Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… ΠΈ тСхнологиях Π² понятном ΠΈ Π»Ρ‘Π³ΠΊΠΎΠΌ Π² использовании интСрфСйсС. ΠŸΠΎΡ…ΠΎΠΆ Π½Π° FNEI ΠΈ What is it Really Used For. + +[mod-name] +RecipeBook=Recipe Book (Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²) + +[shortcut-name] +rb-search=Поиск Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² + + diff --git a/RecipeBook_3.5.6/locale/ru/info.json b/RecipeBook/locale/ru/info.json similarity index 100% rename from RecipeBook_3.5.6/locale/ru/info.json rename to RecipeBook/locale/ru/info.json diff --git a/RecipeBook/locale/uk/RecipeBook.cfg b/RecipeBook/locale/uk/RecipeBook.cfg new file mode 100644 index 00000000..08d86b96 --- /dev/null +++ b/RecipeBook/locale/uk/RecipeBook.cfg @@ -0,0 +1,51 @@ +[command-help] + +[controls] + +[entity-type] +artillery-turret=ΠΡ€Ρ‚ΠΈΠ»Π΅Ρ€Ρ–ΠΉΡΡŒΠΊΠ° Π²Π΅ΠΆΠ° +artillery-wagon=ΠΡ€Ρ‚ΠΈΠ»Π΅Ρ€Ρ–ΠΉΡΡŒΠΊΠΈΠΉ Π²Π°Π³ΠΎΠ½ +container=ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ +loader=НавантаТувач +pipe=Π’Ρ€ΡƒΠ±Π° +radar=Π Π°Π΄Π°Ρ€ +rocket-silo=Π Π°ΠΊΠ΅Ρ‚Π½Π° ΡˆΠ°Ρ…Ρ‚Π° +unit=ΠžΠ΄ΠΈΠ½ΠΈΡ†Ρ + +[fuel-category-name] + +[gui] +rb-entity=Π‘ΡƒΡ‚Π½Ρ–ΡΡ‚ΡŒ +rb-fluid=Π Ρ–Π΄ΠΈΠ½Π° +rb-group=Π“Ρ€ΡƒΠΏΠ° +rb-hidden=ΠŸΡ€ΠΈΡ…ΠΎΠ²Π°Π½ΠΈΠΉ +rb-history=Історія +rb-item=Π’ΠΎΠ²Π°Ρ€ +rb-items=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ +rb-list-box-label=__1__ (__2__) +rb-modules=ΠœΠΎΠ΄ΡƒΠ»Ρ– +rb-pin-instruction=Π’Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈΠΌ +rb-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +rb-resources=РСсурси +rb-search-type-both=Обидва +rb-search-type-internal=Π’Π½ΡƒΡ‚Ρ€Ρ–ΡˆΠ½Ρ–ΠΉ +rb-settings-instruction=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ +rb-show-fluid-temperatures-all=Всі +rb-show-fluid-temperatures-off=Π’ΠΈΠΌ +rb-tech-level=Π Ρ–Π²Π΅Π½ΡŒ + +[item-name] + +[item-type] +item=Π’ΠΎΠ²Π°Ρ€ +module=ΠœΠΎΠ΄ΡƒΠ»ΡŒ + +[message] + +[mod-description] + +[mod-name] + +[shortcut-name] + + diff --git a/RecipeBook_3.5.6/prototypes/custom-input.lua b/RecipeBook/prototypes/custom-input.lua similarity index 100% rename from RecipeBook_3.5.6/prototypes/custom-input.lua rename to RecipeBook/prototypes/custom-input.lua diff --git a/RecipeBook_3.5.6/prototypes/font.lua b/RecipeBook/prototypes/font.lua similarity index 100% rename from RecipeBook_3.5.6/prototypes/font.lua rename to RecipeBook/prototypes/font.lua diff --git a/RecipeBook_3.5.6/prototypes/shortcut.lua b/RecipeBook/prototypes/shortcut.lua similarity index 100% rename from RecipeBook_3.5.6/prototypes/shortcut.lua rename to RecipeBook/prototypes/shortcut.lua diff --git a/RecipeBook_3.5.6/prototypes/sprite.lua b/RecipeBook/prototypes/sprite.lua similarity index 100% rename from RecipeBook_3.5.6/prototypes/sprite.lua rename to RecipeBook/prototypes/sprite.lua diff --git a/RecipeBook_3.5.6/prototypes/style.lua b/RecipeBook/prototypes/style.lua similarity index 100% rename from RecipeBook_3.5.6/prototypes/style.lua rename to RecipeBook/prototypes/style.lua diff --git a/RecipeBook_3.5.6/resources/chef-hat-original.png b/RecipeBook/resources/chef-hat-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/chef-hat-original.png rename to RecipeBook/resources/chef-hat-original.png diff --git a/RecipeBook_3.5.6/resources/equipment-original.png b/RecipeBook/resources/equipment-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/equipment-original.png rename to RecipeBook/resources/equipment-original.png diff --git a/RecipeBook_3.5.6/resources/equipment-original.svg b/RecipeBook/resources/equipment-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/equipment-original.svg rename to RecipeBook/resources/equipment-original.svg diff --git a/RecipeBook_3.5.6/resources/fluid-original.png b/RecipeBook/resources/fluid-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/fluid-original.png rename to RecipeBook/resources/fluid-original.png diff --git a/RecipeBook_3.5.6/resources/fluid-original.svg b/RecipeBook/resources/fluid-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/fluid-original.svg rename to RecipeBook/resources/fluid-original.svg diff --git a/RecipeBook_3.5.6/resources/item-original.png b/RecipeBook/resources/item-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/item-original.png rename to RecipeBook/resources/item-original.png diff --git a/RecipeBook_3.5.6/resources/item-original.svg b/RecipeBook/resources/item-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/item-original.svg rename to RecipeBook/resources/item-original.svg diff --git a/RecipeBook_3.5.6/resources/machine-original.png b/RecipeBook/resources/machine-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/machine-original.png rename to RecipeBook/resources/machine-original.png diff --git a/RecipeBook_3.5.6/resources/machine-original.svg b/RecipeBook/resources/machine-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/machine-original.svg rename to RecipeBook/resources/machine-original.svg diff --git a/RecipeBook_3.5.6/resources/recipe-original.png b/RecipeBook/resources/recipe-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/recipe-original.png rename to RecipeBook/resources/recipe-original.png diff --git a/RecipeBook_3.5.6/resources/recipe-original.svg b/RecipeBook/resources/recipe-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/recipe-original.svg rename to RecipeBook/resources/recipe-original.svg diff --git a/RecipeBook_3.5.6/resources/resource-original.png b/RecipeBook/resources/resource-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/resource-original.png rename to RecipeBook/resources/resource-original.png diff --git a/RecipeBook_3.5.6/resources/resource-original.svg b/RecipeBook/resources/resource-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/resource-original.svg rename to RecipeBook/resources/resource-original.svg diff --git a/RecipeBook_3.5.6/resources/technology-original.png b/RecipeBook/resources/technology-original.png similarity index 100% rename from RecipeBook_3.5.6/resources/technology-original.png rename to RecipeBook/resources/technology-original.png diff --git a/RecipeBook_3.5.6/resources/technology-original.svg b/RecipeBook/resources/technology-original.svg similarity index 100% rename from RecipeBook_3.5.6/resources/technology-original.svg rename to RecipeBook/resources/technology-original.svg diff --git a/RecipeBook_3.5.6/screenshots/crafter.png b/RecipeBook/screenshots/crafter.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/crafter.png rename to RecipeBook/screenshots/crafter.png diff --git a/RecipeBook_3.5.6/screenshots/fluid.png b/RecipeBook/screenshots/fluid.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/fluid.png rename to RecipeBook/screenshots/fluid.png diff --git a/RecipeBook_3.5.6/screenshots/item.png b/RecipeBook/screenshots/item.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/item.png rename to RecipeBook/screenshots/item.png diff --git a/RecipeBook_3.5.6/screenshots/mining-drill.png b/RecipeBook/screenshots/mining-drill.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/mining-drill.png rename to RecipeBook/screenshots/mining-drill.png diff --git a/RecipeBook_3.5.6/screenshots/multi-window.png b/RecipeBook/screenshots/multi-window.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/multi-window.png rename to RecipeBook/screenshots/multi-window.png diff --git a/RecipeBook_3.5.6/screenshots/quick-ref.png b/RecipeBook/screenshots/quick-ref.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/quick-ref.png rename to RecipeBook/screenshots/quick-ref.png diff --git a/RecipeBook_3.5.6/screenshots/recipe.png b/RecipeBook/screenshots/recipe.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/recipe.png rename to RecipeBook/screenshots/recipe.png diff --git a/RecipeBook_3.5.6/screenshots/search-filter.png b/RecipeBook/screenshots/search-filter.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/search-filter.png rename to RecipeBook/screenshots/search-filter.png diff --git a/RecipeBook_3.5.6/screenshots/search.png b/RecipeBook/screenshots/search.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/search.png rename to RecipeBook/screenshots/search.png diff --git a/RecipeBook_3.5.6/screenshots/settings.png b/RecipeBook/screenshots/settings.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/settings.png rename to RecipeBook/screenshots/settings.png diff --git a/RecipeBook_3.5.6/screenshots/shortcut.png b/RecipeBook/screenshots/shortcut.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/shortcut.png rename to RecipeBook/screenshots/shortcut.png diff --git a/RecipeBook_3.5.6/screenshots/technology.png b/RecipeBook/screenshots/technology.png similarity index 100% rename from RecipeBook_3.5.6/screenshots/technology.png rename to RecipeBook/screenshots/technology.png diff --git a/RecipeBook_3.5.6/scripts/database.lua b/RecipeBook/scripts/database.lua similarity index 94% rename from RecipeBook_3.5.6/scripts/database.lua rename to RecipeBook/scripts/database.lua index bb4f4e6d..de152ba6 100644 --- a/RecipeBook_3.5.6/scripts/database.lua +++ b/RecipeBook/scripts/database.lua @@ -62,10 +62,11 @@ function database.build() mining_drill(database) fluid(database, metadata) - item(database, metadata) lab(database) - offshore_pump(database) + offshore_pump(database) -- requires fluids + + item(database, metadata) -- requires all entities recipe(database, metadata) resource(database) @@ -75,6 +76,7 @@ function database.build() fluid.process_temperatures(database, metadata) mining_drill.add_resources(database) fuel_category.check_fake_category(database) + lab.process_researched_in(database) burning(database) entity_state(database) @@ -83,12 +85,12 @@ function database.build() end local function update_launch_products(launch_products, force_index, to_value) - for _, launch_product in ipairs(launch_products) do + for _, launch_product in pairs(launch_products) do local product_data = database.item[launch_product.name] if product_data.researched_forces then product_data.researched_forces[force_index] = to_value end - update_launch_products(database, product_data.rocket_launch_products, force_index) + update_launch_products(product_data.rocket_launch_products, force_index, to_value) end end diff --git a/RecipeBook_3.5.6/scripts/database/beacon.lua b/RecipeBook/scripts/database/beacon.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/beacon.lua rename to RecipeBook/scripts/database/beacon.lua diff --git a/RecipeBook_3.5.6/scripts/database/burning.lua b/RecipeBook/scripts/database/burning.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/burning.lua rename to RecipeBook/scripts/database/burning.lua diff --git a/RecipeBook_3.5.6/scripts/database/crafter.lua b/RecipeBook/scripts/database/crafter.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/crafter.lua rename to RecipeBook/scripts/database/crafter.lua diff --git a/RecipeBook_3.5.6/scripts/database/entity-state.lua b/RecipeBook/scripts/database/entity-state.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/entity-state.lua rename to RecipeBook/scripts/database/entity-state.lua diff --git a/RecipeBook_3.5.6/scripts/database/entity-type.lua b/RecipeBook/scripts/database/entity-type.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/entity-type.lua rename to RecipeBook/scripts/database/entity-type.lua diff --git a/RecipeBook_3.5.6/scripts/database/entity.lua b/RecipeBook/scripts/database/entity.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/entity.lua rename to RecipeBook/scripts/database/entity.lua diff --git a/RecipeBook_3.5.6/scripts/database/equipment-category.lua b/RecipeBook/scripts/database/equipment-category.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/equipment-category.lua rename to RecipeBook/scripts/database/equipment-category.lua diff --git a/RecipeBook_3.5.6/scripts/database/equipment.lua b/RecipeBook/scripts/database/equipment.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/equipment.lua rename to RecipeBook/scripts/database/equipment.lua diff --git a/RecipeBook_3.5.6/scripts/database/fluid.lua b/RecipeBook/scripts/database/fluid.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/fluid.lua rename to RecipeBook/scripts/database/fluid.lua diff --git a/RecipeBook_3.5.6/scripts/database/fuel-category.lua b/RecipeBook/scripts/database/fuel-category.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/fuel-category.lua rename to RecipeBook/scripts/database/fuel-category.lua diff --git a/RecipeBook_3.5.6/scripts/database/generator.lua b/RecipeBook/scripts/database/generator.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/generator.lua rename to RecipeBook/scripts/database/generator.lua diff --git a/RecipeBook_3.5.6/scripts/database/group.lua b/RecipeBook/scripts/database/group.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/group.lua rename to RecipeBook/scripts/database/group.lua diff --git a/RecipeBook_3.5.6/scripts/database/item-type.lua b/RecipeBook/scripts/database/item-type.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/item-type.lua rename to RecipeBook/scripts/database/item-type.lua diff --git a/RecipeBook_3.5.6/scripts/database/item.lua b/RecipeBook/scripts/database/item.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/item.lua rename to RecipeBook/scripts/database/item.lua diff --git a/RecipeBook/scripts/database/lab.lua b/RecipeBook/scripts/database/lab.lua new file mode 100644 index 00000000..cc7073e2 --- /dev/null +++ b/RecipeBook/scripts/database/lab.lua @@ -0,0 +1,57 @@ +local table = require("__flib__.table") + +local util = require("scripts.util") + +local lab_proc = {} + +function lab_proc.build(database) + for name, prototype in pairs(global.prototypes.lab) do + local fuel_categories, fuel_filter = util.process_energy_source(prototype) + database.entity[name] = { + blueprintable = util.is_blueprintable(prototype), + can_burn = {}, + class = "entity", + entity_type = { class = "entity_type", name = prototype.type }, + fuel_categories = fuel_categories, + fuel_filter = fuel_filter, + hidden = prototype.has_flag("hidden"), + inputs = table.map(prototype.lab_inputs, function(v) + return { class = "item", name = v } + end), + module_slots = prototype.module_inventory_size + and prototype.module_inventory_size > 0 + and prototype.module_inventory_size + or nil, + placed_by = util.process_placed_by(prototype), + prototype_name = name, + researching_speed = prototype.researching_speed, + science_packs = {}, + size = util.get_size(prototype), + unlocked_by = {}, + } + util.add_to_dictionary("entity", name, prototype.localised_name) + util.add_to_dictionary("entity_description", name, prototype.localised_description) + end +end + +-- Store labs in science pack items' researched_in +function lab_proc.process_researched_in(database) + for name, prototype in pairs(global.prototypes.lab) do + -- Add to items + for _, item_name in ipairs(prototype.lab_inputs) do + local item_data = database.item[item_name] + if item_data then + item_data.researched_in[#item_data.researched_in + 1] = { class = "entity", name = name } + end + end + end +end + +-- When calling the module directly, call lab_proc.build +setmetatable(lab_proc, { + __call = function(_, ...) + return lab_proc.build(...) + end, +}) + +return lab_proc diff --git a/RecipeBook_3.5.6/scripts/database/mining-drill.lua b/RecipeBook/scripts/database/mining-drill.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/mining-drill.lua rename to RecipeBook/scripts/database/mining-drill.lua diff --git a/RecipeBook_3.5.6/scripts/database/offshore-pump.lua b/RecipeBook/scripts/database/offshore-pump.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/offshore-pump.lua rename to RecipeBook/scripts/database/offshore-pump.lua diff --git a/RecipeBook_3.5.6/scripts/database/recipe-category.lua b/RecipeBook/scripts/database/recipe-category.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/recipe-category.lua rename to RecipeBook/scripts/database/recipe-category.lua diff --git a/RecipeBook/scripts/database/recipe.lua b/RecipeBook/scripts/database/recipe.lua new file mode 100644 index 00000000..c7e56280 --- /dev/null +++ b/RecipeBook/scripts/database/recipe.lua @@ -0,0 +1,138 @@ +local math = require("__flib__.math") + +local constants = require("constants") + +local util = require("scripts.util") + +local fluid_proc = require("scripts.database.fluid") + +return function(database, metadata) + for name, prototype in pairs(global.prototypes.recipe) do + local category = prototype.category + local group = prototype.group + + local enabled_at_start = prototype.enabled + + -- Add to recipe category + local category_data = database.recipe_category[category] + category_data.recipes[#category_data.recipes + 1] = { class = "recipe", name = name } + + -- Add to group + local group_data = database.group[group.name] + group_data.recipes[#group_data.recipes + 1] = { class = "recipe", name = name } + + local data = { + accepted_modules = {}, + class = "recipe", + enabled_at_start = enabled_at_start, + energy = prototype.energy, + group = { class = "group", name = group.name }, + hidden = prototype.hidden, + made_in = {}, + pollution_multiplier = prototype.emissions_multiplier ~= 1 and prototype.emissions_multiplier or nil, + prototype_name = name, + recipe_category = { class = "recipe_category", name = category }, + science_packs = {}, + subgroup = { class = "group", name = prototype.subgroup.name }, + unlocked_by = {}, + used_as_fixed_recipe = metadata.fixed_recipes[name], + } + + -- Ingredients / products + local fluids = { ingredients = 0, products = 0 } + for lookup_type, io_type in pairs({ ingredient_in = "ingredients", product_of = "products" }) do + local output = {} + for i, material in ipairs(prototype[io_type]) do + local amount_ident = util.build_amount_ident(material) + local material_io_data = { + class = material.type, + name = material.name, + amount_ident = amount_ident, + } + local material_data = database[material.type][material.name] + local lookup_table = material_data[lookup_type] + lookup_table[#lookup_table + 1] = { class = "recipe", name = name } + output[i] = material_io_data + material_data.recipe_categories[#material_data.recipe_categories + 1] = { + class = "recipe_category", + name = category, + } + + -- Don't set enabled at start if this is an ignored recipe + local disabled = constants.disabled_categories.recipe_category[category] + if io_type == "products" and (not disabled or disabled ~= 0) then + local subtable = category_data[material.type .. "s"] + subtable[#subtable + 1] = { class = material.type, name = material.name } + + -- If this recipe is enabled at start and is not disabled, + -- set enabled at start for its products and their placement results. + if enabled_at_start then + material_data.enabled_at_start = true + for _, property in pairs({ "place_result", "place_as_equipment_result" }) do + local placed_ident = material_data[property] + if placed_ident then + local placed_data = database[placed_ident.class][placed_ident.name] + if placed_data then + placed_data.enabled_at_start = true + end + end + end + end + end + + if material.type == "fluid" then + -- Fluid temperatures + local temperature_ident = util.build_temperature_ident(material) + if temperature_ident then + material_io_data.temperature_ident = temperature_ident + fluid_proc.add_temperature(database.fluid[material.name], temperature_ident) + end + -- Add to aggregate + fluids[io_type] = fluids[io_type] + 1 + end + end + + data[io_type] = output + end + + -- Made in + local num_item_ingredients = 0 + for _, ingredient in pairs(prototype.ingredients) do + if ingredient.type == "item" then + num_item_ingredients = num_item_ingredients + 1 + end + end + for _, crafters in pairs({ global.prototypes.character, global.prototypes.crafter }) do + for crafter_name in pairs(crafters) do + local crafter_data = database.entity[crafter_name] + local fluidbox_counts = metadata.crafter_fluidbox_counts[crafter_name] or { inputs = 0, outputs = 0 } + if + (crafter_data.ingredient_limit or 255) >= num_item_ingredients + and crafter_data.recipe_categories_lookup[category] + and fluidbox_counts.inputs >= fluids.ingredients + and fluidbox_counts.outputs >= fluids.products + then + local crafting_time = math.round(prototype.energy / crafter_data.crafting_speed, 0.01) + data.made_in[#data.made_in + 1] = { + class = "entity", + name = crafter_name, + amount_ident = util.build_amount_ident({ amount = crafting_time, format = "format_seconds_parenthesis" }), + } + crafter_data.can_craft[#crafter_data.can_craft + 1] = { class = "recipe", name = name } + end + end + end + + -- Compatible modules + for module_name, module_limitations in pairs(metadata.modules) do + if not next(module_limitations) or module_limitations[name] then + data.accepted_modules[#data.accepted_modules + 1] = { class = "item", name = module_name } + table.insert(database.item[module_name].affects_recipes, { class = "recipe", name = name }) + end + end + + database.recipe[name] = data + util.add_to_dictionary("recipe", name, prototype.localised_name) + util.add_to_dictionary("recipe_description", name, prototype.localised_description) + end +end diff --git a/RecipeBook_3.5.6/scripts/database/resource-category.lua b/RecipeBook/scripts/database/resource-category.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/resource-category.lua rename to RecipeBook/scripts/database/resource-category.lua diff --git a/RecipeBook_3.5.6/scripts/database/resource.lua b/RecipeBook/scripts/database/resource.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/resource.lua rename to RecipeBook/scripts/database/resource.lua diff --git a/RecipeBook_3.5.6/scripts/database/science-pack.lua b/RecipeBook/scripts/database/science-pack.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/science-pack.lua rename to RecipeBook/scripts/database/science-pack.lua diff --git a/RecipeBook_3.5.6/scripts/database/technology.lua b/RecipeBook/scripts/database/technology.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/database/technology.lua rename to RecipeBook/scripts/database/technology.lua diff --git a/RecipeBook_3.5.6/scripts/formatter.lua b/RecipeBook/scripts/formatter.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/formatter.lua rename to RecipeBook/scripts/formatter.lua diff --git a/RecipeBook_3.5.6/scripts/global-data.lua b/RecipeBook/scripts/global-data.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/global-data.lua rename to RecipeBook/scripts/global-data.lua diff --git a/RecipeBook_3.5.6/scripts/gui/info/actions.lua b/RecipeBook/scripts/gui/info/actions.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/info/actions.lua rename to RecipeBook/scripts/gui/info/actions.lua diff --git a/RecipeBook_3.5.6/scripts/gui/info/index.lua b/RecipeBook/scripts/gui/info/index.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/info/index.lua rename to RecipeBook/scripts/gui/info/index.lua diff --git a/RecipeBook_3.5.6/scripts/gui/info/list-box.lua b/RecipeBook/scripts/gui/info/list-box.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/info/list-box.lua rename to RecipeBook/scripts/gui/info/list-box.lua diff --git a/RecipeBook/scripts/gui/info/table.lua b/RecipeBook/scripts/gui/info/table.lua new file mode 100644 index 00000000..40df937a --- /dev/null +++ b/RecipeBook/scripts/gui/info/table.lua @@ -0,0 +1,247 @@ +local gui = require("__flib__.gui") +local table = require("__flib__.table") + +local database = require("scripts.database") +local formatter = require("scripts.formatter") + +local table_comp = {} + +function table_comp.build(parent, index, component, variables) + local has_label = (component.label or component.source) and true or false + return gui.build(parent, { + { + type = "flow", + style_mods = not has_label and { top_margin = 4 } or nil, + direction = "vertical", + index = index, + ref = { "root" }, + action = { + on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, + }, + { + type = "flow", + style_mods = { vertical_align = "center" }, + action = { + on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, + }, + visible = has_label, + { type = "label", style = "rb_list_box_label", ref = { "label" } }, + { type = "empty-widget", style = "flib_horizontal_pusher" }, + { + type = "sprite-button", + style = "mini_button_aligned_to_text_vertically_when_centered", + ref = { "expand_collapse_button" }, + -- NOTE: Sprite, tooltip, and action are set in the update function + }, + }, + { + type = "frame", + style = "deep_frame_in_shallow_frame", + action = { + on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, + }, + ref = { "deep_frame" }, + { + type = "table", + style = "rb_info_table", + column_count = 2, + ref = { "table" }, + -- Dummy elements so the first row doesn't get used + { type = "empty-widget" }, + { type = "empty-widget" }, + }, + }, + }, + }) +end + +function table_comp.default_state(settings) + return { collapsed = settings.default_state == "collapsed" } +end + +function table_comp.update(component, refs, object_data, player_data, settings, variables) + local tbl = refs.table + local children = tbl.children + + local gui_translations = player_data.translations.gui + + local search_query = variables.search_query + + local i = 2 + local is_shown = settings.default_state ~= "hidden" + local row_settings = settings.rows + local source_tbl = is_shown and (component.source and object_data[component.source] or component.rows) or {} + for _, row in ipairs(source_tbl) do + local row_name = row.label or row.source + local value = row.value or object_data[row.source] + if value and (not row_settings or row_settings[row_name]) then + local caption = gui_translations[row_name] or row_name + if string.find(string.lower(caption), search_query) then + -- Label + i = i + 1 + local label_label = children[i] + if not label_label or not label_label.valid then + label_label = tbl.add({ + type = "label", + style = "rb_table_label", + index = i, + }) + end + local tooltip = row.label_tooltip + if tooltip then + caption = caption .. " [img=info]" + tooltip = gui_translations[row.label_tooltip] + else + tooltip = "" + end + label_label.caption = caption + label_label.tooltip = tooltip + + -- Value + if row.type == "plain" then + local fmt = row.formatter + if fmt then + value = formatter[fmt](value, gui_translations) + end + i = i + 1 + local value_label = children[i] + if not value_label or not value_label.valid or value_label.type ~= "label" then + if value_label and value_label.valid then + value_label.destroy() + end + value_label = tbl.add({ type = "label", index = i }) + end + value_label.caption = value + elseif row.type == "goto" then + i = i + 1 + local button = children[i] + if not button or not button.valid or button.type ~= "button" then + if button and button.valid then + button.destroy() + end + button = tbl.add({ + type = "button", + style = "rb_table_button", + mouse_button_filter = { "left", "middle" }, + index = i, + }) + end + local source_data = database[value.class][value.name] + local options = table.shallow_copy(row.options or {}) + options.label_only = true + options.amount_ident = value.amount_ident + options.blueprint_result = value.class == "entity" and source_data.blueprintable and { name = value.name } + or nil + local info = formatter(source_data, player_data, options) + if info then + button.caption = info.caption + button.tooltip = info.tooltip + gui.set_action(button, "on_click", { gui = "info", id = variables.gui_id, action = "navigate_to" }) + gui.update_tags( + button, + { context = { class = value.class, name = value.name }, blueprint_result = options.blueprint_result } + ) + else + -- Don't actually show this row + -- This is an ugly way to do it, but whatever + button.destroy() + label_label.destroy() + i = i - 2 + end + elseif row.type == "tech_level_selector" then + i = i + 1 + local flow = children[i] + if not flow or not flow.valid or flow.type ~= "flow" then + if flow and flow.valid then + flow.destroy() + end + flow = gui.build(tbl, { + { + type = "flow", + style_mods = { vertical_align = "center" }, + index = i, + ref = { "flow" }, + { + type = "sprite-button", + style = "mini_button_aligned_to_text_vertically_when_centered", + sprite = "rb_minus_black", + mouse_button_filter = { "left" }, + actions = { + on_click = { gui = "info", id = variables.gui_id, action = "change_tech_level", delta = -1 }, + }, + }, + { type = "label", name = "tech_level_label" }, + { + type = "sprite-button", + style = "mini_button_aligned_to_text_vertically_when_centered", + sprite = "rb_plus_black", + mouse_button_filter = { "left" }, + actions = { + on_click = { gui = "info", id = variables.gui_id, action = "change_tech_level", delta = 1 }, + }, + }, + }, + }).flow + end + flow.tech_level_label.caption = formatter.number(variables.selected_tech_level) + elseif row.type == "tech_level_research_unit_count" then + i = i + 1 + local value_label = children[i] + if not value_label or value_label.type ~= "label" then + if value_label then + value_label.destroy() + end + value_label = tbl.add({ type = "label", index = i }) + end + local tech_level = variables.selected_tech_level + value_label.caption = + formatter[row.formatter](game.evaluate_expression(value, { L = tech_level, l = tech_level })) + end + end + end + end + for j = i + 1, #children do + children[j].destroy() + end + + if i > 3 then + refs.root.visible = true + + local label_source = component.source or component.label + if label_source then + if component.hide_count then + refs.label.caption = gui_translations[label_source] or label_source + else + refs.label.caption = formatter.expand_string( + gui_translations.list_box_label, + gui_translations[label_source] or label_source, + i / 2 - 1 + ) + end + end + + -- Update expand/collapse button and height + gui.set_action(refs.expand_collapse_button, "on_click", { + gui = "info", + id = variables.gui_id, + action = "toggle_collapsed", + context = variables.context, + component_index = variables.component_index, + }) + if variables.component_state.collapsed then + refs.deep_frame.style.maximal_height = 1 + refs.expand_collapse_button.sprite = "rb_collapsed" + refs.expand_collapse_button.tooltip = { "gui.rb-expand" } + else + refs.deep_frame.style.maximal_height = 0 + refs.expand_collapse_button.sprite = "rb_expanded" + refs.expand_collapse_button.tooltip = { "gui.rb-collapse" } + end + else + refs.root.visible = false + end + + return i > 3 +end + +return table_comp diff --git a/RecipeBook_3.5.6/scripts/gui/quick-ref/actions.lua b/RecipeBook/scripts/gui/quick-ref/actions.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/quick-ref/actions.lua rename to RecipeBook/scripts/gui/quick-ref/actions.lua diff --git a/RecipeBook_3.5.6/scripts/gui/quick-ref/index.lua b/RecipeBook/scripts/gui/quick-ref/index.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/quick-ref/index.lua rename to RecipeBook/scripts/gui/quick-ref/index.lua diff --git a/RecipeBook_3.5.6/scripts/gui/search/actions.lua b/RecipeBook/scripts/gui/search/actions.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/search/actions.lua rename to RecipeBook/scripts/gui/search/actions.lua diff --git a/RecipeBook_3.5.6/scripts/gui/search/index.lua b/RecipeBook/scripts/gui/search/index.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/search/index.lua rename to RecipeBook/scripts/gui/search/index.lua diff --git a/RecipeBook_3.5.6/scripts/gui/settings/actions.lua b/RecipeBook/scripts/gui/settings/actions.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/settings/actions.lua rename to RecipeBook/scripts/gui/settings/actions.lua diff --git a/RecipeBook_3.5.6/scripts/gui/settings/index.lua b/RecipeBook/scripts/gui/settings/index.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/settings/index.lua rename to RecipeBook/scripts/gui/settings/index.lua diff --git a/RecipeBook_3.5.6/scripts/gui/util.lua b/RecipeBook/scripts/gui/util.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/gui/util.lua rename to RecipeBook/scripts/gui/util.lua diff --git a/RecipeBook_3.5.6/scripts/migrations.lua b/RecipeBook/scripts/migrations.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/migrations.lua rename to RecipeBook/scripts/migrations.lua diff --git a/RecipeBook_3.5.6/scripts/player-data.lua b/RecipeBook/scripts/player-data.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/player-data.lua rename to RecipeBook/scripts/player-data.lua diff --git a/RecipeBook_3.5.6/scripts/remote-interface.lua b/RecipeBook/scripts/remote-interface.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/remote-interface.lua rename to RecipeBook/scripts/remote-interface.lua diff --git a/RecipeBook_3.5.6/scripts/util.lua b/RecipeBook/scripts/util.lua similarity index 100% rename from RecipeBook_3.5.6/scripts/util.lua rename to RecipeBook/scripts/util.lua diff --git a/RecipeBook/thumbnail.png b/RecipeBook/thumbnail.png new file mode 100644 index 00000000..fc4678c9 Binary files /dev/null and b/RecipeBook/thumbnail.png differ diff --git a/RecipeBook_3.5.6/types.lua b/RecipeBook/types.lua similarity index 100% rename from RecipeBook_3.5.6/types.lua rename to RecipeBook/types.lua diff --git a/RecipeBook_3.5.6/changelog.txt b/RecipeBook_3.5.6/changelog.txt deleted file mode 100644 index a7747239..00000000 --- a/RecipeBook_3.5.6/changelog.txt +++ /dev/null @@ -1,693 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 3.5.6 -Date: 2023-08-21 - Bugfixes: - - [Reverse factory] Fixed that recycling recipes would cause many items to incorrectly show as researched (#133) ---------------------------------------------------------------------------------------------------- -Version: 3.5.5 -Date: 2023-07-01 - Bugfixes: - - Fixed a crash on load when a force is invalidated (#131) ---------------------------------------------------------------------------------------------------- -Version: 3.5.4 -Date: 2023-06-11 - Bugfixes: - - Fixed a crash when calling `/rb-print-object` with no parameters (#128) ---------------------------------------------------------------------------------------------------- -Version: 3.5.3 -Date: 2023-04-29 - Bugfixes: - - Fixed a crash when migrating from before version 3.0 - - Fixed that characters were not showing as being able to craft recipes ---------------------------------------------------------------------------------------------------- -Version: 3.5.2 -Date: 2023-01-16 - Optimizations: - - Massively reduced save loading time with large numbers of modules or fluids (credit to Rseding) ---------------------------------------------------------------------------------------------------- -Version: 3.5.1 -Date: 2022-12-06 - Changes: - - Updated to Factorio 1.1.74 and flib 0.12.0 - - Dictionary translations are performed 10x faster in singleplayer ---------------------------------------------------------------------------------------------------- -Version: 3.5.0 -Date: 2022-10-30 - Features: - - Added new page contents: - - Number of module slots will be shown on all entities that support modules (https://todo.sr.ht/~raiguard/factorio-mods/57) - - [Recipe] Catalyst amounts are shown in ingredient and product tooltips (https://todo.sr.ht/~raiguard/factorio-mods/59) - Bugfixes: - - [Burning] Fixed can burn list on entities that have a fluid filter on their energy source - - [Recipe] Fixed that recipes were counting fluids when testing crafter ingredient limits - - [Resource] Fixed that fluid resource products would not show temperature (https://todo.sr.ht/~raiguard/factorio-mods/60) ---------------------------------------------------------------------------------------------------- -Version: 3.4.5 -Date: 2022-06-12 - Bugfixes: - - Fixed a crash when a mining tool is used in a recipe (https://todo.sr.ht/~raiguard/factorio-mods/29) ---------------------------------------------------------------------------------------------------- -Version: 3.4.4 -Date: 2022-06-12 - Bugfixes: - - Fixed a crash when a character has no crafting categories - - Fixed a crash when the GUI tried to display the dummy-steel-axe item (https://todo.sr.ht/~raiguard/factorio-mods/28) ---------------------------------------------------------------------------------------------------- -Version: 3.4.3 -Date: 2022-05-22 - Bugfixes: - - Fixed a crash when a technology has no research ingredients (#117) ---------------------------------------------------------------------------------------------------- -Version: 3.4.2 -Date: 2022-05-22 - Bugfixes: - - Fixed a crash when an entity is mineable, but has no mineable products (#118) ---------------------------------------------------------------------------------------------------- -Version: 3.4.1 -Date: 2022-05-21 - Changes: - - Updated Korean locale (by x2605) (#115) - - Updated Russian locale (by astorin) (#116) - Bugfixes: - - Fixed flib dependency (#114) ---------------------------------------------------------------------------------------------------- -Version: 3.4.0 -Date: 2022-05-21 - Features: - - Added new categories: - - Entity type - - Item type - - Science pack: Uncheck a science pack to hide all objects that it unlocks (#89) - - Added new interactions: - - [Entity] Shift + click to get a blueprint (not just on the recipe screen) (#98) - - Added new page contents: - - [Entity] Entity type, expected resources - - [Item] Affects recipes (for modules), Gathered from, item type - - [Recipe] Pollution multiplier (#113) - - Added new pages: - - Entity type: All entities of the given type - - Item type: All items of the given type - Changes: - - Category lists will be hidden when that category is disabled ---------------------------------------------------------------------------------------------------- -Version: 3.3.4 -Date: 2022-04-20 - Bugfixes: - - Fixed a crash when upgrading from 3.1 or earlier ---------------------------------------------------------------------------------------------------- -Version: 3.3.3 -Date: 2022-04-14 - Bugfixes: - - Fixed a crash when refreshing contents with an invalid info or quick ref GUI (#110) - - Fixed that certain entities had a "get blueprint" action when they weren't blueprintable (#111) ---------------------------------------------------------------------------------------------------- -Version: 3.3.2 -Date: 2022-03-20 - Bugfixes: - - Fixed a crash when a favorites entry was removed from the game (#107) - - Fixed that using Control + F to focus search did not work ---------------------------------------------------------------------------------------------------- -Version: 3.3.1 -Date: 2022-03-12 - Changes: - - Updated Korean locale (by x2605) (#101) - - Updated Russian locale (by Astorin) (#103) - Bugfixes: - - Fixed a crash when the first item group has no visible members in visual search (#102) - - Fixed a crash when using navigation hotkeys before opening an info GUI (#105) ---------------------------------------------------------------------------------------------------- -Version: 3.3.0 -Date: 2022-03-01 - Features: - - Added new properties: - - [NEW] Beacon: size, effect area, distribution effectivity, module slots, accepted modules, unlocked by, placed by - - Equipment: buffer capacity, placed in - - Fluid: fuel pollution - - [NEW] Generator: fluid consumption, minimum / maximum temperatures, max power production, base pollution, can burn, unlocked by, and placeable by - - Added Korean locale (by x2605) (#97) - - Added visual mode to the search GUI, providing a more vanilla-like search interface - - This interface can only show items and fluids - Changes: - - Any blueprintable entity may be shift+clicked to get a blueprint of it, regardless of whether or not it has a recipe (#91) - - Category and group table items are hidden by default - - Consolidated all machines into a single "entity" type - - Fluid temperature variants are now sorted and placed adjacent to their base fluid in search results - - Refactored all GUI code to improve modularity and significantly cleaned up the codebase - - Technology unlocks equipment, unlocks fluids, unlocks items, and unlocks machines are hidden by default - - Using the inspect hotkey while holding a selection tool will do nothing (#95) - Bugfixes: - - Fixed a crash when a mod prototype was removed without the mod versions changing - - Fixed "can mine" table header being unlocalised - - Fixed recipe output percentages not being rounded ---------------------------------------------------------------------------------------------------- -Version: 3.2.3 -Date: 2022-01-08 - Bugfixes: - - Fixed a rare crash during migrations (#90) - - Fixed a crash when a mod creates a force before the recipe book can be built (#94) ---------------------------------------------------------------------------------------------------- -Version: 3.2.2 -Date: 2021-12-06 - Changes: - - "--- categories" lists are hidden by default - - Improved some of the list header names - Bugfixes: - - Fixed that quick ref windows would not open when the info GUI is docked (#87) ---------------------------------------------------------------------------------------------------- -Version: 3.2.1 -Date: 2021-11-09 - Changes: - - Updated Russian locale (by Astorin) - Bugfixes: - - Added missing migration for GUI data from 3.2.0 ---------------------------------------------------------------------------------------------------- -Version: 3.2.0 -Date: 2021-11-07 - Features: - - Added new pages: - - Equipment category: All equipment and items belonging to each category - - Equipment: Size, take result, equipment properties, compatible fuels, fuel categories, equipment categories, and unlocked by for each equipment - - Added compatible equipment and equipment categories to the item page - - Added fuel categories to burner machine page - - Shift + click on a recipe with one product to view the product's page - - Using the inspect hotkey will attempt to open the info page relative to the currently open GUI - - Only works on vanilla GUIs (custom mod GUIs do not support relative anchoring) - - This can be disabled in the mod settings - Changes: - - Changed default inspect hotkey to alt+click - - Changed default search hotkey to Control + B - - Renamed 'burner machine' to 'machine' - Bugfixes: - - Fixed a crash if a prototype (somehow) doesn't have a stored translation (#80) - - Fixed a crash when another mod adds a force before RB has a chance to load - - Fixed a crash when using the search hotkey in the equipment grid GUI (#82) - - Fixed some edge-cases with the focus search hotkey logic - - Fixed that mining drills were not being processed for technology unlocks ---------------------------------------------------------------------------------------------------- -Version: 3.1.5 -Date: 2021-09-19 - Changes: - - Added Brazillian Portuguese translation (by BM123499) - - Quick reference windows now open next to their parent window - Bugfixes: - - Fixed that dragging a quick reference window would reset its position for a frame - - Fixed that settings wouldn't be preserved if they were falsey ---------------------------------------------------------------------------------------------------- -Version: 3.1.4 -Date: 2021-09-02 - Bugfixes: - - Fixed a crash when using the navigation hotkeys with a non-custom GUI open - - Fixed a crash when using the search hotkey in some windows ---------------------------------------------------------------------------------------------------- -Version: 3.1.3 -Date: 2021-08-18 - Bugfixes: - - Fixed a crash when an item has a place result that isn't in the Recipe Book - - Fixed navigation hotkeys not working if search was open - - Fixed the toggle quick ref button wouldn't be updated if it was in the stickied info GUI ---------------------------------------------------------------------------------------------------- -Version: 3.1.2 -Date: 2021-08-17 - Bugfixes: - - Fixed a crash when a mod unlocks a research during config changed before Recipe Book does its own configuration changes - - Fixed a crash when clicking the Factory Planner dimmer frame while an info GUI is stuck to search - - Fixed that the search GUI would not be brought to the front when clicking the FP dimmer frame ---------------------------------------------------------------------------------------------------- -Version: 3.1.1 -Date: 2021-08-16 - Bugfixes: - - Fixed a crash when joining a multiplayer game without changing your language ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 -Date: 2021-08-16 - Features: - - Added "compatible modules" to the crafter page (hidden by default, must be enabled in the page settings) - - Added "burner machine" page - - Burner machines are machines that consume fuel and aren't a crafter, lab, mining drill, or offshore pump - - Some of these machines might get their own pages someday if enough relevant information is available for display - - Added "burnt result" and "burnt result of" to the item page - Gui: - - When clicking a search result in the search GUI with the left mouse button, the info GUI will be "stickied" to the search GUI - - A "detach" button will appear in the titlebar of the sticky window, allowing you to detach it - - Middle-clicking something will open it in a standalone info GUI - - This brings back a 2.0-esque experience for those who preferred it - - This can be disabled in the mod settings - - Added the ability to collapse components of an info page - - Some components (categories, compatible modules) default to collapsed to save space - - Default state can be overridden in the settings - - Added search GUI location setting, choose between top-left and center - - Added page content settings - - Each "section" of a page can be enabled or disabled, and have the following settings based on type: - - All: - - Default state (normal, collapsed, hidden) - - Table (with absolute rows): - - Row visibility - - List box: - - Max rows - Changes: - - Machines that have exactly one item to place them will inherit the item's hidden & enabled statuses - - Machines that have no items to place them will be marked as disabled - - Renamed "rocket launch payloads" to "rocket launch product of" - - Search GUI now opens below the mod_gui button frame, instead of all the way in the corner - - Search GUI now takes "opened" focus again - - The pin button has returned as well, allowing you to keep it open while viewing other GUIs - Bugfixes: - - Fixed that class filters in search used the internal names instead of the localised names - - Fixed that fluidboxes were not being considered for compatible recipes on crafters - - Fixed that the "shift + click to get a blueprint" interaction help wouldn't be shown in certain conditions ---------------------------------------------------------------------------------------------------- -Version: 3.0.3 -Date: 2021-08-14 - Changes: - - Updated Russian locale by Astorin - - The search GUI now supports locale-specific widths - Bugfixes: - - Fixed a crash when an item has a resource as its place result - - Fixed a crash when a resource has no products when mined ---------------------------------------------------------------------------------------------------- -Version: 3.0.2 -Date: 2021-08-10 - Changes: - - Removed `/RecipeBook` command, replaced with `/rb-refresh-all` - - Updated to flib 0.8.2 - Bugfixes: - - Fixed a crash when a mod added or removed pretty much anything to/from an existing save - - Fixed that a new search GUI would be created every time the player joined a multiplayer game ---------------------------------------------------------------------------------------------------- -Version: 3.0.1 -Date: 2021-08-09 - Changes: - - Updated to flib 0.8.1 ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 -Date: 2021-08-09 - Features: - - Added new pages: - - Fuel category: fluids and items belonging to each category - - Group: fluids, items, and recipes belonging to each group - - Lab: research speed, compatible science packs, compatible fuels, fuel categories, unlocked by, placeable by, size - - Mining drill: mining speed, mining area, compatible resources, resource categories, compatible fuels, fuel categories, unlocked by, placeable by, size - - Offshore pump: pumping speed, output fluid, unlocked by, placeable by, size - - Recipe category: fluids, items, and recipes belonging to each recipe category - - Resource: resource category, required fluid, mining time, products, compatible mining drills - - Resource category: resources and mining drills belonging to that category - - Added numerous properties that were previously confined to tooltips, and new properties: - - Crafter: Crafting speed, ingredient limit, size, compatible fuels, fuel categories - - Fluid: Fuel value, default temperature, group - - Item: Stack size, fuel value, fuel pollution, vehicle acceleration, vehicle top speed, group, place result (if the place result has RB data), module effects - - Recipe: Recipe category, group, compatible modules - - Added settings to toggle fuel category, group, and resource category member visibility - - Added text search to information pages - - Alt-clicking an ingredient or product in a quick ref window will mark it green - - Middle-clicking an object will open that object in a new window - - Search and information have been separated into separate GUIs - - You can open as many information windows as you want simultaneously - Changes: - - "Empty X barrel" recipes will no longer unlock the fluid that they empty - - Recipe time-to-craft is now displayed in a generic info table, rather than as a fake ingredient - - Renamed "placeable by" to "placed by" - - Split the universal "search" hotkey into separate search and open selected object hotkeys - - Unresearched objects are shown by default - Optimizations: - - Reduced network traffic taken up by translation requests by a ridiculous amount - - Reduced the mod's script data footprint by more than 10x - - Significantly reduced the amount of time translating takes - Bugfixes: - - Fixed that recipe "made in" didn't account for ingredient count limits on assemblers - - Fixed that rocket launch products were always marked as their own payload - - Fixed that rocket launch products weren't being shown in many places due to invalid recipe categories ---------------------------------------------------------------------------------------------------- -Version: 2.7.1 -Date: 2021-05-03 - Bugfixes: - - Fixed a crash when a new force was created ---------------------------------------------------------------------------------------------------- -Version: 2.7.0 -Date: 2021-05-03 - Features: - - Added an option to show disabled recipes and technologies - - Added indicators for when a recipe or technology is disabled - - Added researched state for labs and offshore pumps - Changes: - - Disabled recipes and technologies are hidden by default - - When a fluid has multiple temperatures, the default temperature will be displayed for fluid products that usually have no temperature - Bugfixes: - - Fixed a crash when using the hotkey on a science lab - - Fixed fluids not being enabled at start even if their offshore pump was - - Fixed fluid temperature variants not copying recipe categories from their parents - - Fixed fluid variant ingredient in lists being completely wrong in most cases - - Fixed several inconsistencies with fluid temperature variation researched status ---------------------------------------------------------------------------------------------------- -Version: 2.6.0 -Date: 2021-04-05 - Features: - - Added generic object opening support - - Hovering over any crafter, fluid, item, recipe, or technology anywhere in the game and using the Recipe Book hotkey will open that object's page - - Added fuel pollution, vehicle acceleration, and vehicle top speed multipliers to item tooltips - - Added tooltips to close buttons - Bugfixes: - - Fixed a crash if another mod updated a new technology in on_configuration_changed before Recipe Book refreshed its data - - Fixed a crash when a required fluid for mining was unresearched and "show unresearched objects" was off - - Fixed a crash when using "%" in search in some situations - - Fixed that changes to object availability would not apply when opening the GUI while preserve session is enabled (credit to kubiix) ---------------------------------------------------------------------------------------------------- -Version: 2.5.2 -Date: 2021-02-17 - Bugfixes: - - Fixed a crash when an infinite technology only has one level (#44) - - Fixed a crash when researching a previously-disabled technology (#44) ---------------------------------------------------------------------------------------------------- -Version: 2.5.1 -Date: 2021-02-17 - Bugfixes: - - Fixed a crash when a character entity had an item to place it (#43) ---------------------------------------------------------------------------------------------------- -Version: 2.5.0 -Date: 2021-02-17 - Features: - - Added controls for navigating the session history, bound by default to the back and forward buttons on the mouse - - Added default recipe category excludes for Creative Mod and the PySuite - - Added fluid temperature support (thanks kubiix!) - - When searching, temperatures and temperature ranges for each fluid will be shown as well - - Each temperature and temperature range has a separate fluid page listing the properties specific to that temperature or range - - Each fluid still has a non-temperature page that shows all properties for that fluid - - Added highlight on the last selected item (configurable) - - Added "made in" to the recipe quick reference panel - - Added required fluid to resource tooltip - - Added "placeable by" and "unlocked by" to the crafter page - - Added help message when viewing a blank page - - Added technology page and search category (credit to kubiix) - Changes: - - Adjusted glyph sizing to fix alignment - - Adjusted titlebar styling to match the base game - - Moderatly increased the size of the main GUI - - Improved interaction help formatting - - Put the settings gear icon on a diet - - Recipes and materials that are available at the beginning of the game are now treated as such - - Separated fluid and item search categories - - Significantly refactored the data processor to improve code quality, simplify some things, and support fluid temperatures - - Removed "burnable in" and "compatible fuels" sections, as they were inconsistent and only worked with crafters - Bugfixes: - - Fixed a crash with certain modded burner entities - - Fixed a crash when upgrading from a pre-2.0 version of the mod - - Fixed a long-standing bug that materials would be marked as available when usable as an ingredient, even if it was not obtainable - - Fixed crafter labels showing interaction helps - - Fixed that even if a page was already open, it would be added again to the session history and re-opened - - Fixed that hand-minable resource items would be marked as unavailable if no available recipes produced it - - Fixed the session history active line not lining up with the other lines - - Fixed that the GUIs would not update when a research was finished (credit to kubiix) ---------------------------------------------------------------------------------------------------- -Version: 2.4.1 -Date: 2021-01-02 - Features: - - Added compatibility with Factory Planner's dimmer frame - RB will now stay in front of it if both GUIs are open at once - Bugfixes: - - Fixed RB GUI not coming to the front when opened - - Fixed that closing RB while pinned would also close whatever GUI happened to be marked as `opened` at the time ---------------------------------------------------------------------------------------------------- -Version: 2.4.0 -Date: 2021-01-02 - Features: - - Added crafter page, listing the recipes compatible with that crafter and the fuels it is compatible with - - Added search by crafter - - Added `burnable in` to material page, listing the crafters where it can be used as fuel - - Added descriptions to object tooltips - - Added fuel values to material tooltips - - Added session history listing to the navigation button tooltips - - Pressing enter while in the search textfield will switch search categories - - When opening the GUI, the home page will be shown instead of the last viewed page (optional) - Changes: - - Updated the mod to the new flib `gui-beta` module - - Removed per-player settings from the mod settings menu - use the mod's built-in settings GUI instead - Bugfixes: - - Fixed a crash when an object was added to the favorites list, then removed from the game on configuration changed - - Fixed that quick reference windows would not update their contents when settings were changed ---------------------------------------------------------------------------------------------------- -Version: 2.3.3 -Date: 2020-12-06 - Changes: - - Clicking a crafter to give a blueprint of it will use the blueprint clipboard intead of a one-off item ---------------------------------------------------------------------------------------------------- -Version: 2.3.2 -Date: 2020-11-23 - Changes: - - Updated to Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 2.3.1 -Date: 2020-11-15 - Changes: - - Updated deprecated require path for flib data-util module - - Updated German translation (by Moonsilence) ---------------------------------------------------------------------------------------------------- -Version: 2.3.0 -Date: 2020-09-02 - Features: - - Added setting to disable the "alternate name" in object tooltips - - Added `usable in` list to the material page, listing the labs that that science pack is usable in - - Added crafting speed and crafting categories to crafter tooltips - - Added category, crafting time, ingredients, and products to recipe tooltips - Changes: - - Characters are now properly detected and included as crafters, instead of being hard-coded ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 2020-08-30 - Features: - - Added stack size to item tooltips - - Added `pumped by` to material page, which lists offshore pumps that produce that fluid - - Added `rocket launch payloads` and `rocket launch products` to material page - - Added rocket silos as crafters - - Rocket silo crafters will display their required amount of rocket parts in their label and tooltip - - Added fixed recipe to crafter tooltip if it has one - - Shift + clicking a crafter with a fixed recipe will open that recipe's page - - Added `purge-memoizer-cache` argument to the `/RecipeBook` command - Changes: - - Known "meta-recipes" (such as transport drones recipes used for requests) will no longer affect object availability - - If there is a mod whose meta-recipes are not excluded, please let me know so I can exclude it ---------------------------------------------------------------------------------------------------- -Version: 2.1.1 -Date: 2020-08-15 - Changes: - - Updated to Factorio 1.0 - Bugfixes: - - Fixed a crash due to improper checking of force availability data for crafters ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 2020-08-10 - Features: - - Added base crafting speed to recipe pages - - Added character to "made in" list for recipes that are hand-craftable - - Added brief interaction helps to all object tooltips - Changes: - - All recipe ingredients and products will always be shown despite object visibility settings - - Renamed "machine" back to "crafter" as the reason for the name change is moot at this point - Bugfixes: - - Fixed a crash when a mod would be removed while translations were running, but before those translations translated all of that mod's strings - - Fixed a crash when opening a quick reference panel for a hidden recipe, when show hidden objects is turned off - - Fixed a desync related to a player's connected status in multiplayer during a mod change ---------------------------------------------------------------------------------------------------- -Version: 2.0.4 -Date: 2020-07-27 - Features: - - Enabling "use internal names" will change search to use internal names as well - Changes: - - Renamed "show internal names" to "use internal names" and moved to search settings - Bugfixes: - - Fixed a desync related to player.connnected being unreliable during on_configuration_changed in multiplayer - - Fixed a potential crash if a GUI handler was removed between versions ---------------------------------------------------------------------------------------------------- -Version: 2.0.3 -Date: 2020-07-25 - Bugfixes: - - Fixed that the search history would not be purged on configuration change, leading to crashes with non-existent items - - Reverted the session history "fix" from v2.0.2 that was actually being caused by the above issue, and didn't actually fix anything - - Fixed a crash with the listbox item clicked regex when an item name has brackets in it - - Fixed a crash when attempting to get a machine blueprint for a crafter that had the "non-blueprintable" flag set - - Fixed that temporary machine blueprints of machines with a side that was an even number of tiles would be placed one tile off from where the preview was ---------------------------------------------------------------------------------------------------- -Version: 2.0.2 -Date: 2020-07-25 - Features: - - Clicking a machine on the recipe screen will give you a blueprint of that machine with the recipe set - - Right-clicking the search textfield will clear it - Bugfixes: - - Fixed that the session history would sometimes get a duplicated home entry, causing a crash when trying to format the back button ---------------------------------------------------------------------------------------------------- -Version: 2.0.1 -Date: 2020-07-20 - Changes: - - Improved performance of "add to favorites" button - - Remote interface: - - Consolidated check_obj_valid into open_page, having it separate wasn't really necessary ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 2020-07-19 - Features: - - Added the ability to "pin" the GUI to the screen, so it can exist alongside other windows - - Added the ability to "favorite" an object for easy access later - - Added browse-able search history, keeping track of the last 20 searches - - Added setting to display internal prototype names instead of translations - - Added object type glyphs - - Added settings for toggling specific recipe categories - - Added an in-game settings screen for on-the-fly changes - - Added German translation by LuziferSenpai - Changes: - - Completely rewrote the mod from scratch to improve code quality, efficiency, and structure - - Search and information are now combined into one window - - Information listboxes are significantly wider and are arranged in a single column - - Absolutely all recipes are now included in the Recipe Book data - - The GUI will remain open when clicking on a technology - - Remote Interface: - - Added check_obj_valid function - - Renamed open_gui to open_page and changed argument formatting (see docs) - - Removed tie-ins to the back button and associated events (reopen_source_event) - Bugfixes: - - Fixed several crashes related to GUI buttons and multiplayer latency - ---------------------------------------------------------------------------------------------------- -Version: 1.3.6 -Date: 2020-06-24 - Bugfixes: - - Fixed a crash related to GUI style changes in Factorio 0.18.33 - - Fixed typos in changelog ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 -Date: 2020-06-19 - Features: - - Added /RecipeBook command for diagnosing / fixing issues, use /help RecipeBook to see possible options ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 -Date: 2020-06-11 - Bugfixes: - - Fixed a crash when re-joining a multiplayer game for the second time after a mod configuration change - - Fixed that loading certain scenarios would cause translations to be duplicated ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 -Date: 2020-05-31 - Changes: - - Deep Storage Unit (DSU) recipes are now hidden from the Recipe Book - - The log is no longer spammed with recipe book data unless the debug adapter is hooked - Bugfixes: - - Fixed a crash when two players were searching at the same time ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 2020-05-26 - Bugfixes: - - Fixed that object availability would not be updated when migrating ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 2020-05-26 - Bugfixes: - - Fixed a crash when joining a multiplayer game for not the first time ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2020-05-26 - Features: - - Added keyboard shortcuts for changing categories in the search GUI - - The shortcut button properly toggles the search GUI open/closed, instead of just opening it - - Hidden objects are now indicated with an [H] moniker - - Unavailable (unresearched) objects are colored red - - Added an option to hide unavailable objects - Changes: - - Refactored mod structure to improve performance and simplicity - - Switched from RaiLuaLib to FLib - - Search is now spread out over multiple ticks to save performance and allow the addition of more complex features - - Changing search categories will no longer reset the textfield to blank - - Removed crafters as a searchable category and info screen, the utility offered by them was minimal - - Transport drones recipes are now excluded from the Recipe Book - - Recipes that have no ingredients are excluded from the Recipe Book - - Updated GUI styles for Factorio 0.18.27 ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 2020-04-12 - Changes: - - Converted all strings to double quotes - - Removed search button from next to close button (it will come back as an ACTUAL search button later) - - Translations are no longer performed on every join. If you change languages, simply use the /retranslate-all-dictionaries command to retranslate your dictionaries - Bugfixes: - - Fixed crash when using RaiLuaLib 0.2.4 ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2020-04-09 - Changes: - - Updated to RaiLuaLib 0.2.3 ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2020-04-03 - Features: - - Added fuzzy search option - Changes: - - Marked Death Markers as incompatible, because it somehow causes this mod to desync in multiplayer - Bugfixes: - - Added an error catch for a common error that I cannot reproduce. It gives instructions on how to report the error, and prints several helpful things to a file. ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2020-04-01 - Features: - - You can now open multiple recipe quick reference windows simultaneously - - Using the search hotkey while holding an item will open that item's material page, if one exists - - Fluid searching with the hotkey now supports infinity pipes - Changes: - - Recipe quick reference windows are now draggable - - Remote Interface: - - open_info_gui -> open_gui - - object_name -> object - - 'object' is now specified as a table when opening a material GUI, the first entry being the material type, and the second the name - - Recipe Quick Reference windows may be opened using the 'recipe-quick-reference` gui_type - - source_data is not supported when opening this GUI type - Bugfixes: - - Fixed that items and fluids with identical names would conflict - ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 2020-03-20 - Changes: - - Materials that aren't used in any recipes are excluded from the Recipe Book - - Significantly optimized GUI construction and update logic (it is now over 4x faster!) - - Removed mod GUI button, it is replaced by a shortcut - - Replaced the chef hat book icon with a proper "search recipe book" icon - - Refactored search loop to make adding more features easier - - Removed lualib and made it a separate mod, RaiLuaLib, that this mod now depends on - Bugfixes: - - Fixed crash when a clicking an object with rich text in the name (Krastorio 2) - - Fixed GUI alignment issues caused by style changes in 0.18.13 - - Fixed potential issues with conditionally registered handlers losing their correlations with custom mod events when configuration changes ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 2020-03-08 - Features: - - Added a function to the remote interface to return the current API version ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2020-02-15 - Bugfixes: - - Fixed a crash when opening a material from the recipe page (bad pattern matching) ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2020-02-12 - Bugfixes: - - Fixed incompatibilities with Quick Item Search ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2020-02-12 - Changes: - - Recipe amounts and crafting times are now shown in a slightly bold font - Bugfixes: - - Fixed a crash when reading a product with a variable amount of materials ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2020-02-11 - Features: - - Added support for the /retranslate-all-dictionaries command, which will retranslate all of your dictionaries - - Added support for variable probability results in recipes - - Using the hotkey while hovering over a pipe, pump, storage tank, or fluid wagon will open its fluid's material page - Bugfixes: - - Fixed a crash when confirming the search textfield when the results listbox was empty - - Fixed a crash when a recipe's product didn't have an amount specified - - Fixed a crash when there was more than one player on the map in some cases - - Fixed the translation module doing extraneous translating - - Fixed the translation module would never stop translating if the previous translation finished before you restarted it ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2020-02-09 - Features: - - Initial release diff --git a/RecipeBook_3.5.6/graphics/dark-line.png b/RecipeBook_3.5.6/graphics/dark-line.png deleted file mode 100644 index 87ed0fd7..00000000 Binary files a/RecipeBook_3.5.6/graphics/dark-line.png and /dev/null differ diff --git a/RecipeBook_3.5.6/graphics/favorite-slot-button-icon.png b/RecipeBook_3.5.6/graphics/favorite-slot-button-icon.png deleted file mode 100644 index 9e934073..00000000 Binary files a/RecipeBook_3.5.6/graphics/favorite-slot-button-icon.png and /dev/null differ diff --git a/RecipeBook_3.5.6/graphics/frame-action-icons.png b/RecipeBook_3.5.6/graphics/frame-action-icons.png deleted file mode 100644 index 8590c926..00000000 Binary files a/RecipeBook_3.5.6/graphics/frame-action-icons.png and /dev/null differ diff --git a/RecipeBook_3.5.6/graphics/shortcut.png b/RecipeBook_3.5.6/graphics/shortcut.png deleted file mode 100644 index 118b9bba..00000000 Binary files a/RecipeBook_3.5.6/graphics/shortcut.png and /dev/null differ diff --git a/RecipeBook_3.5.6/graphics/small-tool-icons.png b/RecipeBook_3.5.6/graphics/small-tool-icons.png deleted file mode 100644 index 003b0e2a..00000000 Binary files a/RecipeBook_3.5.6/graphics/small-tool-icons.png and /dev/null differ diff --git a/RecipeBook_3.5.6/graphics/tool-icons.png b/RecipeBook_3.5.6/graphics/tool-icons.png deleted file mode 100644 index 0f1fc4d8..00000000 Binary files a/RecipeBook_3.5.6/graphics/tool-icons.png and /dev/null differ diff --git a/RecipeBook_3.5.6/info.json b/RecipeBook_3.5.6/info.json deleted file mode 100644 index a0f7be40..00000000 --- a/RecipeBook_3.5.6/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "RecipeBook", - "version": "3.5.6", - "title": "Recipe Book", - "author": "raiguard", - "description": "Search for information about entities, fluids, items, recipes, and technologies in a clean, easy-to-use interface. Similar to FNEI and What is it Really Used For.", - "contact": "https://github.com/raiguard/RecipeBook", - "homepage": "https://github.com/raiguard/RecipeBook", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.80", "flib >= 0.12.9"], - "package": { - "git_publish_branch": "legacy", - "ignore": ["imgui.ini", "resources", "screenshots", "stylua.toml"] - } -} diff --git a/RecipeBook_3.5.6/locale/de/RecipeBook.cfg b/RecipeBook_3.5.6/locale/de/RecipeBook.cfg deleted file mode 100644 index 42f99b34..00000000 --- a/RecipeBook_3.5.6/locale/de/RecipeBook.cfg +++ /dev/null @@ -1,112 +0,0 @@ -[mod-name] -RecipeBook=Bauplanbuch - -[mod-description] -RecipeBook=Suche Informationen ΓΌber Materialien und BauplΓ€ne in einer sauberen, einfach zu bedienenden OberflΓ€che. Γ„hnlich wie bei "FNEI" und "What is it Really Used For". - -[controls] -rb-toggle-gui=Bauplanbuch umschalten - -[mod-setting-name] -rb-open-item-hotkey=Γ–ffne gehaltenen Gegenstand, beim DrΓΌcken des BauplanbuchtastenkΓΌrzels [img=info] -rb-open-fluid-hotkey=Γ–ffne ausgewΓ€hlte FlΓΌssigkeit, beim DrΓΌcken des BauplanbuchtastenkΓΌrzels [img=info] -rb-show-hidden-objects=Zeige versteckte Objekte [img=info] -rb-show-unresearched-objects=Zeige unerforschte Objekte [img=info] -rb-show-glyphs=Zeige Objekttypglyphen -rb-show-alternate-name=Zeige alternativen Namen [img=info] -rb-show-detailed-recipe-tooltips=Zeige detaillierte Bauplantooltips [img=info] -rb-use-fuzzy-search=Nutze ungenaue Suche [img=info] -rb-use-internal-names=Zeige interne Namen [img=info] - -[mod-setting-description] -rb-open-item-hotkey=Wenn aktiviert, ΓΆffnet bei BetΓ€tigung des BauplanbuchtastenkΓΌrzels die Materialienseite des gehaltenen Gegenstandes, sofern existent.\nKann auch durch Klicken der BauplanbuchschaltflΓ€che bei gehaltenem Gegenstand erreicht werden. -rb-open-fluid-hotkey=Wenn aktiviert, ΓΆffnet bei BetΓ€tigung des BauplanbuchtastenkΓΌrzels wΓ€hrend der Cursor ΓΌber einem Rohr, Pumpe oder Lagertank gehalten wird die Materialienseite der FlΓΌssigkeit, sofern existent. -rb-show-unresearched-objects=Trifft nicht auf Bauplanzutaten und -produkte zu. -rb-show-hidden-objects=Trifft nicht auf Bauplanzutaten und -produkte zu. -rb-show-alternate-name=Der alternative (interne) Name des Objekts wird in dessen Tooltip angezeigt. Wenn "Zeige interne Namen" aktiviert ist, wird dies den regulΓ€ren (lokalisierten) Namen anzeigen. -rb-show-detailed-recipe-tooltips=Wenn aktiviert, werden im Bauplantooltip die Herstelldauer, Zutaten und Produkte des Bauplans angezeigt. Deaktiviere dies, wenn die Suche Performanceprobleme verursacht. -rb-use-fuzzy-search=Nachsichtigerer Textvergleich bei der Suche. -rb-use-internal-names=Verwende interne Prototypennamen fΓΌr Objekte und Suche. Die Übersetzung eines Objektes wird weiterhin in dessen Tooltip angezeigt, wenn "Zeige alternativen Namen" aktiviert ist. - -[shortcut-name] -rb-toggle-gui=Bauplanbuch - -[item-name] -rb-crafter-blueprint=TemporΓ€re Herstellerblaupause - -[item-description] -rb-crafter-blueprint=Eine temporΓ€re, vom Bauplanbuch bereitgestellte Blaupause um schnell einen Hersteller platzieren zu kΓΆnnen mit einem bestimmten Rezept. Kann nicht im Inventar aufbewahrt oder in der Blaupausenbibliothek gespeichert werden. - -[rb-gui] -add-to-favorites=Zu Favoriten hinzufΓΌgen -back-to=ZurΓΌck zu __1__\nRechtsklick um auf Startseite zu gelangen -blueprint-not-available=Eine Blaupause ist fΓΌr diesen Hersteller nicht verfΓΌgbar. -category=Kategorie: -click-to-get-blueprint=Klicken um Blaupause zu erhalten. -click-to-view-technology=Klicken um im Technologiebaum anzusehen. -click-to-view=Klicken um Details anzusehen. -close-quick-reference=Schnellreferenztafel schließen -crafter=Hersteller -crafting-categories=Herstellerkategorie: -crafting-speed=Herstelltempo: -crafting-time=Herstelldauer: -favorites=Favoriten -fixed-recipe=Fixierter Bauplan: -fluid=FlΓΌssigkeit -forward-to=Weiter zu __1__ -general=Allgemeines -hidden-abbrev=(V) -hidden=Versteckt -history=Verlauf -home=Startseite -ingredient-in=Zutat in (__1__) -ingredients-tooltip=Zutaten: -ingredients=Zutaten (__1__) -interface=OberflΓ€che -item=Gegenstand -keep-open=Offen behalten -lab=Labor -made-in=Hergestellt in (__1__) -material-lowercase=Material -material=Material -mined-from=Abgebaut von (__1__) -offshore-pump=GewΓ€sserpumpe -open-quick-reference=Γ–ffne eine Schnellreferenztafel -per-second= / s -product-of=Produkt von (__1__) -products-tooltip=Produkte: -products=Produkte (__1__) -pumped-by=Gepumpt von (__1__) -pumping-speed=Pumprate: -recipe-categories-tooltip=Deaktiviere eine Bauplankategorie, um sie sowohl auf der Such- als auch auf der Informationsseite auszublenden. -recipe-categories=Bauplankategorien [img=info] -recipe-lowercase=Bauplan -recipe=Bauplan -remove-from-favorites=Aus Favoriten entfernen -researching-speed=Forschungstempo: -resource=Ressource -results-limited=Ergebnisse begrenzt auf __1__ GegenstΓ€nde -rocket-launch-payloads=Raketenstartfrachten (__1__) -rocket-launch-products=Raketenstartprodukte (__1__) -rocket-parts-required=Raketenbauteile erforderlich: -search-by=Suche nach: -search=Suche -seconds-tooltip=Die Herstelldauer die ein Bauplan in einem Hersteller ohne Module und einem Herstelltempo von genau 1.0 benΓΆtigt. -seconds=__1__ Sekunden -seconds-standalone=Sekunden -settings=Einstellungen -shift-click-to-view-fixed-recipe=Umschalt + Klick um fixierten Bauplan anzusehen. -stack-size=Stapelgrâße: -technology=Technologie -unlocked-by=Freigeschaltet von (__1__) -unresearched=Unerforscht -usable-in=Verwendbar in (__1__) -view-details=Zeige Details - -[rb-message] -can-open-gui=Bauplanbuch ist jetzt verfΓΌgbar! -cannot-open-gui=Kann Bauplanbuch aktuell nicht ΓΆffnen, bitte warten. Wenn dies lΓ€nger als ein paar Minuten andauert, fΓΌhren Sie den Befehl [color=128, 206, 240]/RecipeBook refresh-player-data[/color] aus. -command-help= \nrefresh-player-data - Schließen und alle OberflΓ€chen neu erzeugen, das WΓΆrterbuch erneut ΓΌbersetzen und die Einstellungen aktualisieren. -invalid-command=UngΓΌltiger Befehl, gib [color=128, 206, 240]/help RecipeBook[/color] ein, um die verfΓΌgbaren Befehle zu anzuzeigen. -memoizer-cache-purged=Memoizer-Cache geleert. -refreshing-player-data=Aktualisiere Spielerdaten, bitte warten... \ No newline at end of file diff --git a/RecipeBook_3.5.6/locale/de/info.json b/RecipeBook_3.5.6/locale/de/info.json deleted file mode 100644 index 850b2bb1..00000000 --- a/RecipeBook_3.5.6/locale/de/info.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "language-name": "German", - "font": { - "RecipeBook": ["__RecipeBook__/fonts/RecipeBook.ttf"] - } -} diff --git a/RecipeBook_3.5.6/locale/ko/RecipeBook.cfg b/RecipeBook_3.5.6/locale/ko/RecipeBook.cfg deleted file mode 100644 index 685b7b2c..00000000 --- a/RecipeBook_3.5.6/locale/ko/RecipeBook.cfg +++ /dev/null @@ -1,379 +0,0 @@ -[command-help] -rb-refresh-all=λ ˆμ‹œν”Ό 뢁 데이터λ₯Ό μž¬μ²˜λ¦¬ν•˜κ³  λͺ¨λ“  GUIλ₯Ό μž¬μƒμ„±ν•˜κ³  λͺ¨λ“  사전을 μž¬λ²ˆμ—­ν•©λ‹ˆλ‹€. - -[controls] -rb-jump-to-front=μ•žμœΌλ‘œ 점프 -rb-navigate-backward=λ’€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. -rb-navigate-forward=μ•žμœΌλ‘œ 이동 -rb-open-selected=λ ˆμ‹œν”Ό λΆμ—μ„œ μ„ νƒν•œ 개체λ₯Ό μ—½λ‹ˆλ‹€. -rb-return-to-home=μ§‘μœΌλ‘œ λŒμ•„κ°€κΈ° -rb-search=λ ˆμ‹œν”Ό 뢁 검색 - -[entity-type] -accumulator=μΆ•μ „μ§€ -ammo-turret=탄약 포탑 -arithmetic-combinator=μ‚°μˆ  μ—°μ‚° μ‘°ν•©κΈ° -arrow=ν™”μ‚΄ν‘œ -artillery-flare=λŒ€ν¬ 쑰쀀점 -artillery-projectile=λŒ€ν¬ λ°œμ‚¬μ²΄ -artillery-turret=λŒ€ν¬ 포탑 -artillery-wagon=λŒ€ν¬ ν™”λ¬Όμ°¨ -assembling-machine=쑰립 기계 -beacon=μ‹ ν˜ΈκΈ° -beam=λΉ” -boiler=보일러 -burner-generator=ν™”λ ₯ λ°œμ „κΈ° -car=μžλ™μ°¨ -cargo-wagon=ν™”λ¬Όμ°¨ -character=캐릭터 -character-corpse=캐릭터 μ‹œμ²΄ -cliff=절벽 -combat-robot=μ „νˆ¬ λ‘œλ΄‡ -constant-combinator=μΌμ •μ‹ ν˜Έ μ‘°ν•©κΈ° -construction-robot=건섀 λ‘œλ΄‡ -container=μƒμž -corpse=μ‹œμ²΄ -curved-rail=곑선 철도 -decider-combinator=μˆ˜λŸ‰ 비ꡐ μ‘°ν•©κΈ° -deconstructible-tile-proxy=ν•΄μ œκ°€λŠ₯ν•œ 타일 ν”„λ‘μ‹œ -electric-energy-interface=μ „κΈ° μ—λ„ˆμ§€ μΈν„°νŽ˜μ΄μŠ€ -electric-pole=μ „λ΄‡λŒ€ -electric-turret=μ „κΈ° 포탑 -entity-ghost=개체 고슀트 -explosion=폭발 -fire=뢈 -fish=생선 -flame-thrower-explosion=ν™”μ—Ό 방사기 폭발 -fluid-turret=유체 포탑 -fluid-wagon=유체 ν™”λ¬Όμ°¨ -flying-text=λ– μžˆλŠ” ν…μŠ€νŠΈ -furnace=μš©κ΄‘λ‘œ -gate=μΆœμž…κ΅¬ -generator=λ°œμ „κΈ° -heat-interface=μ—΄ μΈν„°νŽ˜μ΄μŠ€ -heat-pipe=μ—΄ νŒŒμ΄ν”„ -highlight-box=ν•˜μ΄λΌμ΄νŠΈ λ°•μŠ€ -infinity-container=λ¬΄ν•œ μƒμž -infinity-pipe=λ¬΄ν•œ νŒŒμ΄ν”„ -inserter=νˆ¬μž…κΈ° -item-entity=μ•„μ΄ν…œ 개체 -item-request-proxy=μ•„μ΄ν…œ μš”μ²­ ν”„λ‘μ‹œ -lab=μ—°κ΅¬μ†Œ -lamp=μ‘°λͺ… -land-mine=μ§€λ’° -linked-belt=μ—°κ²°λœ 벨트 -linked-container=μ—°κ²°λœ μƒμž -loader=적재기 -loader-1x1=적재기 (1x1) -locomotive=κΈ°κ΄€μ°¨ -logistic-container=λ¬Όλ₯˜ μƒμž -logistic-robot=λ¬Όλ₯˜ λ‘œλ΄‡ -market=μ‹œμž₯ -mining-drill=채광 λ“œλ¦΄ -offshore-pump=ν•΄μ•ˆ νŽŒν”„ -particle-source=μž…μž μ†ŒμŠ€ -pipe=νŒŒμ΄ν”„ -pipe-to-ground=μ§€ν•˜ νŒŒμ΄ν”„ -player-port=ν”Œλ ˆμ΄μ–΄ μ‹œμž‘ 지점 -power-switch=전원 μŠ€μœ„μΉ˜ -programmable-speaker=ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯ν•œ μŠ€ν”Όμ»€ -projectile=λ°œμ‚¬μ²΄ -pump=νŽŒν”„ -radar=λ ˆμ΄λ” -rail-chain-signal=철도 연속 μ‹ ν˜Έ -rail-remnants=철도 자투리 -rail-signal=철도 μ‹ ν˜Έ -reactor=μ›μžλ‘œ -resource=μžμ› -roboport=둜보포트 -rocket-silo=λ‘œμΌ“ 격납고 -rocket-silo-rocket=λ‘œμΌ“ κ²©λ‚©κ³ μ˜ λ‘œμΌ“ -rocket-silo-rocket-shadow=λ‘œμΌ“ κ²©λ‚©κ³ μ˜ λ‘œμΌ“ 그림자 -simple-entity=λ‹¨μˆœν•œ 개체 -simple-entity-with-force=μ„Έλ ₯이 μžˆλŠ” λ‹¨μˆœν•œ 개체 -simple-entity-with-owner=μ†Œμœ μžκ°€ μžˆλŠ” λ‹¨μˆœν•œ 개체 -smoke-with-trigger=νŠΈλ¦¬κ±°κ°€ μžˆλŠ” μ—°κΈ° -solar-panel=νƒœμ–‘ μ „μ§€νŒ -speech-bubble=말풍선 -spider-leg=κ±°λ―Έ 닀리 -spider-vehicle=κ±°λ―Έ μ°¨λŸ‰ -splitter=λΆ„λ°°κΈ° -sticker=μŠ€ν‹°μ»€ -storage-tank=μ €μž₯ 탱크 -straight-rail=직선 철도 -stream=앑체 쀄기 -tile-ghost=타일 고슀트 -train-stop=κΈ°μ°¨ μ •λ₯˜μž₯ -transport-belt=μš΄μ†‘ 벨트 -tree=λ‚˜λ¬΄ -turret=포탑 -underground-belt=μ§€ν•˜ 벨트 -unit=μœ λ‹› -unit-spawner=μœ λ‹› μ‚°λž€μž₯ -wall=λ²½ - -[fuel-category-name] -burnable-fluid=νƒœμšΈ 수 μžˆλŠ” 유체 - -[gui] -rb-accepted-equipment=μž₯μ°© κ°€λŠ₯ν•œ μž₯λΉ„ -rb-accepted-modules=μž₯μ°© κ°€λŠ₯ν•œ λͺ¨λ“ˆ -rb-add-to-favorites=즐겨찾기에 μΆ”κ°€ -rb-affects-recipes=영ν–₯을 μ£ΌλŠ” μ œμž‘λ²• -rb-alt-click=Alt + 클릭 -rb-attach-search-results-description=ν™œμ„±ν™”λœ 경우 검색 κ²°κ³Όλ₯Ό ν΄λ¦­ν•˜λ©΄ 검색 GUI에 μ²¨λΆ€λœ 정보 νŽ˜μ΄μ§€κ°€ μ—΄λ¦½λ‹ˆλ‹€. λ˜ν•œ λ‹€λ₯Έ 검색 κ²°κ³Όλ₯Ό ν΄λ¦­ν•˜λ©΄ λ™μΌν•œ νŽ˜μ΄μ§€μ— μ—΄λ¦½λ‹ˆλ‹€.\nμ–Έμ œλ“ μ§€ 마우슀 κ°€μš΄λ° λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ λΆ„λ¦¬λœ 정보 창을 μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€. -rb-attach-search-results=μ²¨λΆ€λœ 정보 GUIμ—μ„œ 검색 κ²°κ³Ό μ—΄κΈ° -rb-base-pollution=κΈ°λ³Έ 곡해 -rb-base-pollution-desc=μ‹€μ œ κ³΅ν•΄λŠ” νƒœμ›Œμ§€λŠ” μœ μ²΄λŸ‰μ— 따라 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. -rb-beacon=μ‹ ν˜ΈκΈ° -rb-buffer-capacity=버퍼 μš©λŸ‰ -rb-burned-in=λ‹€μŒμ—μ„œ νƒœμ›Œμ§€λŠ” -rb-burnt-result=νƒœμ›Œμ§„ κ²°κ³Ό -rb-burnt-result-of=λ‹€μŒμœΌλ‘œλΆ€ν„° νƒœμ›Œμ§„ κ²°κ³Ό -rb-can-burn=νƒœμšΈ 수 있음 -rb-can-craft=μ œμž‘ κ°€λŠ₯ -rb-can-mine=채꡴할 수 있음 -rb-captions=μΊ‘μ…˜ -rb-categories=λ²”μ£Ό -rb-categories-description=검색 및 정보 νŽ˜μ΄μ§€μ—μ„œ 개체λ₯Ό 숨기렀면 λ²”μ£Όμ˜ 선택을 μ·¨μ†Œν•©λ‹ˆλ‹€.\n[font=default-semibold]μ°Έκ³ :[/font] 일뢀 κ°œμ²΄λŠ” μ΄λŸ¬ν•œ μ„€μ •(즉, μ œμž‘λ²• 재료 및 μƒμ‚°ν’ˆ)에 관계없이 ν‘œμ‹œλ©λ‹ˆλ‹€. -rb-category=λ²”μ£Ό -rb-change-search-type=검색 μœ ν˜• λ³€κ²½ -rb-charging-energy=μΆ©μ „μœ¨ -rb-click=클릭 -rb-close-quick-ref-window=λΉ λ₯Έ μ°Έμ‘° μ°½ λ‹«κΈ° -rb-close-search-gui-after-selection=선택 ν›„ 검색 GUI λ‹«κΈ° -rb-collapse=μ ‘νž˜ -rb-collapsed=μ ‘νž˜ -rb-construction-radius=건섀 반경 -rb-content=λ‚΄μš© -rb-control-click=Ctrl + 클릭 -rb-crafter=μ œμž‘κΈ° -rb-crafting-time=μ œμž‘ μ‹œκ°„ -rb-crafting-time-desc=이 μ œμž‘λ²•μ„ μ œμž‘ 속도 1의 μ œμž‘κΈ°μ—μ„œ λ§Œλ“œλŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„. -rb-default-gui-type=κΈ°λ³Έ GUI μœ ν˜• -rb-default-gui-type-description=[font=default-semibold]λ¬Έμžμ—΄:[/font] λ‹¨μΆœν•¨μ„ μ‚΄λ Έκ³  μ΄λ¦„μœΌλ‘œ 검색할 수 μžˆλŠ” 기본적인 λ ˆμ‹œν”Ό 뢁의 검색 μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. 이 검색 μΈν„°νŽ˜μ΄μŠ€λŠ” λͺ¨λ“  개체 μœ ν˜•μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.\n[font=default-semibold]μ‹œκ°μ :[/font] μ‹œκ°μ μΈ 선택과 μ•„μ΄μ½˜μ„ μš°μ„ μ‹œν•œ 쒀더 "일반적인" 검색 μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. 이 검색 μΈν„°νŽ˜μ΄μŠ€λŠ” μ•„μ΄ν…œκ³Ό 유체만 λ³΄μ—¬μ€λ‹ˆλ‹€.\n이것은 기본일 뿐이며, 검색 GUI μžμ²΄λŠ” λ‘˜ 사이λ₯Ό μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -rb-default-gui-type-textual=λ¬Έμžμ—΄ -rb-default-gui-type-visual=μ‹œκ°μ  -rb-default-state=κΈ°λ³Έ μƒνƒœ -rb-default-temperature=κΈ°λ³Έ μ˜¨λ„ -rb-delete-favorites=즐겨찾기 μ‚­μ œ -rb-delete-history=기둝 μ‚­μ œ -rb-detach-instruction=정보 μ°½ 뢄리 -rb-disabled-abbrev=(D) -rb-distribution-effectivity=λΆ„λ°° 효율 -rb-effect-area=λΆ„λ°° μ˜μ—­ -rb-energy-consumption=μ—λ„ˆμ§€ μ†ŒλΉ„ -rb-energy-per-shield-point=μ‹€λ“œ ν¬μΈνŠΈλ‹Ή μ—λ„ˆμ§€ -rb-energy-production=μ—λ„ˆμ§€ 생산 -rb-entities=개체 -rb-entity=개체 -rb-entity-type=개체 μœ ν˜• -rb-equipment-categories=μž₯λΉ„ λ²”μ£Ό -rb-equipment-category=μž₯λΉ„ λ²”μ£Ό -rb-equipment=μž₯λΉ„ -rb-equipment-properties=μž₯λΉ„ 정보 -rb-expand=ν™•μž₯ -rb-expected-resources=μ˜ˆμƒλ˜λŠ” μžμ› -rb-favorites=즐겨찾기 -rb-fixed-recipe=κ³ μ •λœ μ œμž‘λ²• -rb-fluid-consumption=유체 μ†ŒλΉ„λŸ‰ -rb-fluid=유체 -rb-fluids=유체 -rb-format-amount=__1__ Γ— -rb-format-area=__1__Γ—__2__ -rb-format-seconds-parenthesis=(__1__ s) -rb-fuel-categories=μ—°λ£Œ λ²”μ£Ό -rb-fuel-category=μ—°λ£Œ λ²”μ£Ό -rb-fuzzy-search-description=검색에 λŒ€ν•΄ 보닀 κ΄€λŒ€ν•œ νŒ¨ν„΄ 일치.\n[font=default-semibold]μ°Έκ³ :[/font] 이 섀정을 λ³€κ²½ν•œ ν›„ λ³€κ²½ λ‚΄μš©μ„ μ μš©ν•˜λ €λ©΄ λ‹€μ‹œ 검색해야 ν•©λ‹ˆλ‹€. -rb-fuzzy-search=κ΄€λŒ€ν•œ 검색 -rb-gathered-from=λ‹€μŒμœΌλ‘œλΆ€ν„° 채취됨 -rb-general=일반 -rb-generator=λ°œμ „κΈ° -rb-get-blueprint=도면 κ°€μ Έμ˜€κΈ° -rb-go-backward=λ’€λ‘œ 이동 -rb-go-forward=μ•žμœΌλ‘œ 이동 -rb-go-to-the-back=맨 λ’€λ‘œ 이동 -rb-go-to-the-front=맨 μ•žμœΌλ‘œ 이동 -rb-group=κ·Έλ£Ή -rb-hidden-abbrev=(H) -rb-hidden=μˆ¨κΉ€ -rb-history=기둝 -rb-ingredient-in=λ‹€μŒμ˜ 재료 -rb-ingredient-limit=재료 μ œν•œ -rb-ingredients=재료 -rb-inputs=μž…λ ₯ -rb-interface=μΈν„°νŽ˜μ΄μŠ€ -rb-item=μ•„μ΄ν…œ -rb-items=μ•„μ΄ν…œ -rb-item-type=μ•„μ΄ν…œ μœ ν˜• -rb-jump-to-back=λ’€λ‘œ 점프 -rb-jump-to-the-front=μ•žμœΌλ‘œ 점프 -rb-lab=μ—°κ΅¬μ†Œ -rb-list-box-label=__1__ (__2__) -rb-logistic-radius=λ¬Όλ₯˜ 반경 -rb-made-in=λ‹€μŒμ—μ„œ μ œμž‘λ¨ -rb-max-energy-production=μ΅œλŒ€ μ—λ„ˆμ§€ μƒμ‚°λŸ‰ -rb-maximum-temperature=μ΅œλŒ€ μ˜¨λ„ -rb-max-rows=μ΅œλŒ€ ν–‰ -rb-middle-click=쀑간 클릭 -rb-mined-by=λ‹€μŒμ— μ˜ν•΄ 채꡴됨 -rb-mined-from=λ‹€μŒμœΌλ‘œλΆ€ν„° 채꡴됨 -rb-minimum-temperature=μ΅œμ†Œ μ˜¨λ„ -rb-mining-area=채꡴ μ˜μ—­ -rb-mining-drill=채꡴ λ“œλ¦΄ -rb-mining-drills=채꡴ λ“œλ¦΄ -rb-mining-speed=채꡴ 속도 -rb-mining-time=채꡴ μ‹œκ°„ -rb-module-effects=λͺ¨λ“ˆ 효과 -rb-module-slots=λͺ¨λ“ˆ 슬둯 -rb-modules=λͺ¨λ“ˆ -rb-no-content-warning=[img=warning-white] ν˜„μž¬ 섀정에 따라 ν‘œμ‹œν•  사항 μ—†μŒ. -rb-no-results=[img=warning-white] κ²°κ³Ό μ—†μŒ. -rb-normal=일반 -rb-offshore-pump=ν•΄μ•ˆ νŽŒν”„ -rb-open-info-relative-to-gui-description=ν™œμ„±ν™”λœ 경우 κ°œμ²΄μ— λŒ€ν•΄ 검사 ν•«ν‚€λ₯Ό μ‚¬μš©ν•˜λ©΄ ν˜„μž¬ μ—΄λ € μžˆλŠ” GUIλ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄λ‹Ή 개체의 정보 νŽ˜μ΄μ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. μ—΄λ € μžˆλŠ” GUIκ°€ μ—†κ±°λ‚˜ μ—΄λ € μžˆλŠ” GUIκ°€ μƒλŒ€μ μΈ κ³ μ • κΈ°λŠ₯을 μ§€μ›ν•˜μ§€ μ•Šμ„ 경우 ν™”λ©΄ 쀑간에 독립 μ‹€ν–‰ν˜• 창으둜 μ—΄λ¦½λ‹ˆλ‹€. -rb-open-info-relative-to-gui=ν˜„μž¬ GUIλ₯Ό κΈ°μ€€μœΌλ‘œ 정보 νŽ˜μ΄μ§€ μ—΄κΈ° -rb-open-in-technology-window=기술 μ°½μ—μ„œ μ—΄κΈ° -rb-open-list-in-new-window=이 λͺ©λ‘μ„ μƒˆ μ°½μ—μ„œ μ—½λ‹ˆλ‹€. -rb-open-quick-ref-window=λΉ λ₯Έ μ°Έμ‘° μ°½ μ—΄κΈ° -rb-pages=νŽ˜μ΄μ§€ -rb-per-second-suffix=/ s -rb-pin-instruction=μ—΄λ¦° μƒνƒœλ‘œ μœ μ§€ -rb-place-as-equipment-result=μž₯λΉ„λ‘œμ¨ 배치된 κ²°κ³Ό -rb-placed-by=λ‹€μŒμœΌλ‘œλΆ€ν„° 배치됨 -rb-placed-in=λ‹€μŒμ— 놓여짐 -rb-place-result=배치된 κ²°κ³Ό -rb-pollution-multiplier=곡해 배수 -rb-prerequisite-of=λ‹€μŒμ˜ 사전 μš”κ΅¬ 사항 -rb-prerequisites=사전 μš”κ΅¬ 사항 -rb-product-of=λ‹€μŒμ˜ μƒμ‚°ν’ˆ -rb-products=μƒμ‚°ν’ˆ -rb-pumped-by=λ‹€μŒμ—μ„œ νŽŒν•‘λ¨ -rb-recipe-categories=μ œμž‘λ²• λ²”μ£Ό -rb-recipe-category=μ œμž‘λ²• λ²”μ£Ό -rb-recipe=μ œμž‘λ²• -rb-recipes=μ œμž‘λ²• -rb-remove-from-favorites=μ¦κ²¨μ°ΎκΈ°μ—μ„œ 제거 -rb-required-fluid=ν•„μš”ν•œ 유체 -rb-required-units=ν•„μš”ν•œ λ‹¨μœ„ -rb-researched-in=λ‹€μŒμ—μ„œ 연ꡬ됨 -rb-research-ingredients-per-unit=λ‹¨μœ„λ‹Ή μ—°κ΅¬μž¬λ£Œ -rb-researching-speed=연ꡬ 속도 -rb-research-speed-desc=μ—°κ΅¬μ†Œμ˜ κΈ°λ³Έ 연ꡬ 속도. μ„Έλ ₯ λ³΄λ„ˆμŠ€λŠ” ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -rb-resource-categories=μžμ› λ²”μ£Ό -rb-resource-category=μžμ› λ²”μ£Ό -rb-resource=μžμ› -rb-resources=μžμ› -rb-right-click=였λ₯Έμͺ½ 클릭 -rb-robot-limit=λ‘œλ΄‡ μ œν•œ -rb-rocket-launch-product-of=λ‹€μŒμ˜ λ‘œμΌ“ λ°œμ‚¬ μƒμ‚°ν’ˆ -rb-rocket-launch-products=λ‘œμΌ“ λ°œμ‚¬ μƒμ‚°ν’ˆ -rb-rocket-parts-required=ν•„μš”ν•œ λ‘œμΌ“ λΆ€ν’ˆ -rb-science-pack=κ³Όν•™νŒ© -rb-search-filter=검색 ν•„ν„° -rb-search-gui-location-center=쀑심 -rb-search-gui-location-description=λ ˆμ‹œν”Ό 뢁의 λͺ¨λ“  GUIλŠ” λ“œλž˜κ·Έν•  수 있으며 κΈ°λ³Έ μœ„μΉ˜μΌ λΏμž…λ‹ˆλ‹€. 제λͺ© ν‘œμ‹œμ€„μ„ κ°€μš΄λ° ν΄λ¦­ν•˜μ—¬ μœ„μΉ˜λ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ μž¬μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -rb-search-gui-location=GUI μœ„μΉ˜ μ°ΎκΈ° -rb-search-gui-location-top-left=μ™Όμͺ½ 상단 -rb-search-instruction=검색(__CONTROL__focus-search__) -rb-search=검색 -rb-search-title=λ ˆμ‹œν”Ό 뢁 -rb-search-type-both=λ‘˜ λ‹€ -rb-search-type-description=[font=default-semibold] λ‘œμ»¬ν™”λ¨:[/font] 개체의 λ³€ν™˜λœ 이름이 검색을 μœ„ν•΄ μΌμΉ˜ν•©λ‹ˆλ‹€.\n[font=default-semibold]λ‚΄λΆ€:[/font] 개체의 λ‚΄λΆ€ ν”„λ‘œν† νƒ€μž… 이름이 검색을 μœ„ν•΄ μΌμΉ˜ν•©λ‹ˆλ‹€.\n[font=default-semibold]λͺ¨λ‘:[/font] 개체의 ν”„λ‘œν† νƒ€μž… 이름과 λ³€ν™˜λœ 이름이 λͺ¨λ‘ 검색 λŒ€μƒμœΌλ‘œ μΌμΉ˜ν•©λ‹ˆλ‹€. -rb-search-type-internal=λ‚΄λΆ€ -rb-search-type-localised=ν˜„μ§€ν™” -rb-search-type=검색 μœ ν˜• -rb-session-history=μ„Έμ…˜ 기둝 -rb-settings-instruction=μ„€μ • -rb-settings=λ ˆμ‹œν”Ό 뢁 μ„€μ • -rb-shield-points=μ‹€λ“œ 포인트 -rb-shift-click=Shift + 클릭 -rb-show-alternate-name-description=도ꡬ μ„€λͺ…에 개체의 "좔적" 이름을 ν‘œμ‹œν•©λ‹ˆλ‹€. 기본적으둜 개체의 ν”„λ‘œν† νƒ€μž… 이름이 λ©λ‹ˆλ‹€. 'λ‚΄λΆ€ 이름 ν‘œμ‹œ'κ°€ μ‚¬μš© κ°€λŠ₯으둜 μ„€μ •λœ 경우 개체의 λ³€ν™˜λœ 이름이 λ©λ‹ˆλ‹€. -rb-show-alternate-name=λŒ€μ²΄ 이름 ν‘œμ‹œ -rb-show-descriptions=μ„€λͺ… ν‘œμ‹œ -rb-show-detailed-tooltips-description=μž‘μ€ 정보 νŽ˜μ΄μ§€μ²˜λŸΌ 도ꡬ μ„€λͺ…에 κ°œμ²΄μ— λŒ€ν•œ λ‹€μ–‘ν•œ 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 전체 μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚€λ €λ©΄ 이 μ˜΅μ…˜μ„ λΉ„ν™œμ„±ν™”ν•˜μ‹­μ‹œμ˜€. -rb-show-detailed-tooltips=μ„ΈλΆ€ 툴팁 ν‘œμ‹œ -rb-show-disabled-description="μ‚¬μš© μ•ˆ 함" κ°œμ²΄λŠ” μ‘΄μž¬ν•˜μ§€λ§Œ μ–΄λ–€ μƒν™©μ—μ„œλ„ κ²Œμž„ λ‚΄μ—μ„œ 선택할 수 μ—†λŠ” κ°œμ²΄μž…λ‹ˆλ‹€. -rb-show-disabled=λΉ„ν™œμ„±ν™”λœ 개체 ν‘œμ‹œ -rb-show-fluid-temperatures-absolute-only=μ ˆλŒ€λ§Œ ν•΄λ‹Ή -rb-show-fluid-temperatures-all=λͺ¨λ‘ -rb-show-fluid-temperatures-description=[font=default-semibold]Off:[/font] 유체 μ˜¨λ„ μ’…λ₯˜κ°€ 검색에 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.\n[font=default-semibold]λΉ„λ²”μœ„λ§Œ:[/font] "λΉ„λ²”μœ„"(λΉ„λ²”μœ„) μ˜¨λ„ λ³€μ’…λ§Œ 검색에 ν‘œμ‹œλ©λ‹ˆλ‹€.\n[font=default-semibold]All:[/font] λͺ¨λ“  μ˜¨λ„ μ’…λ₯˜κ°€ 검색에 ν‘œμ‹œλ©λ‹ˆλ‹€. -rb-show-fluid-temperatures-off=ν•΄μ œ -rb-show-fluid-temperatures=유체 μ˜¨λ„ ν‘œμ‹œ -rb-show-glyphs=글리프 ν‘œμ‹œ -rb-show-hidden-description="μˆ¨κ²¨μ§„" κ°œμ²΄λŠ” 일반 선택 λͺ©λ‘μ— ν‘œμ‹œλ˜μ§€ μ•Šμ§€λ§Œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μƒν˜Έ μž‘μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.\n[font=default-semibold]μ°Έκ³ :[/font] 일뢀 μˆ¨κ²¨μ§„ κ°œμ²΄λŠ” 이 μ„€μ •(즉, μ œμž‘λ²• 재료 및 μƒμ‚°ν’ˆ)에 관계 없이 ν‘œμ‹œλ©λ‹ˆλ‹€. -rb-show-hidden=μˆ¨κ²¨μ§„ 개체 ν‘œμ‹œ -rb-show-interaction-helps=μƒν˜Έ μž‘μš© 도움말 ν‘œμ‹œ -rb-show-internal-names-description=개체의 λ‚΄λΆ€ ν”„λ‘œν† νƒ€μž… 이름을 λ³€ν™˜λœ 이름 λŒ€μ‹  ν‘œμ‹œν•©λ‹ˆλ‹€.\n'λŒ€μ²΄ 이름 ν‘œμ‹œ'κ°€ ν™œμ„±ν™”λœ 경우 개체의 λ³€ν™˜λœ 이름이 도ꡬ μ„€λͺ…에 ν‘œμ‹œλ©λ‹ˆλ‹€. -rb-show-internal-names=λ‚΄λΆ€ 이름 ν‘œμ‹œ -rb-show-made-in-in-quick-ref=λΉ λ₯Έ μ°Έμ‘° GUI에 "λ‹€μŒμ—μ„œ μ œμž‘λ¨" ν‘œμ‹œ -rb-show-unresearched=κ²€μƒ‰λ˜μ§€ μ•Šμ€ 개체 ν‘œμ‹œ -rb-size=크기 -rb-stack-size=묢음 크기 -rb-take-result=λ‹€μŒμ˜ μž₯μ°© κ²°κ³Ό -rb-tech-level-desc=이 λ¬΄ν•œ μ—°κ΅¬μ˜ 단계에 λŒ€ν•œ 데이터. -rb-tech-level=단계 -rb-technology=기술 -rb-temperatures=μ˜¨λ„ μ’…λ₯˜ -rb-time-per-unit-desc=연ꡬ 속도 1둜 μ‹€ν—˜μ‹€μ—μ„œ 1개의 λ‹¨μœ„λ₯Ό μ—°κ΅¬ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„: -rb-time-per-unit=λ‹¨μœ„λ‹Ή μ‹œκ°„ -rb-toggle-completed=ν† κΈ€ μ™„λ£Œ -rb-tooltips=툴팁 -rb-unlocked-by=λ‹€μŒμ—μ„œ 잠금 ν•΄μ œλ¨ -rb-unlocks-entities=개체 잠금 ν•΄μ œ -rb-unlocks-equipment=μž₯λΉ„ 잠금 ν•΄μ œ -rb-unlocks-fluids=유체 잠금 ν•΄μ œ -rb-unlocks-items=μ•„μ΄ν…œ 잠금 ν•΄μ œ -rb-unlocks-recipes=μ œμž‘λ²• 잠금 ν•΄μ œ -rb-unresearched=μ—°κ΅¬λ˜μ§€ μ•ŠμŒ -rb-view-base-fluid=κΈ°λ³Έ 유체 보기 -rb-view-details-in-new-window=μƒˆ μ°½μ—μ„œ μ„ΈλΆ€ 정보 보기 -rb-view-details=μ„ΈλΆ€ 정보 보기 -rb-view-fixed-recipe=κ³ μ •λœ μ œμž‘λ²• 보기 -rb-view-fluid=유체 보기 -rb-view-ingredient-in=재료 보기 -rb-view-product-details=μƒμ‚°ν’ˆ μ„ΈλΆ€ 정보 보기 -rb-view-product-of=μƒμ‚°ν’ˆ 보기 -rb-view-required-fluid=ν•„μš”ν•œ 유체 보기 - -[item-name] -rb-crafter-blueprint=μž„μ‹œ μ œμž‘κΈ° 도면 - -[item-type] -ammo=탄약 -armor=μ•„λ¨Έ -blueprint=섀계도면 -blueprint-book=섀계도면 μ±…μž -capsule=캑슐 -copy-paste-tool=볡사 λΆ™μ—¬λ„£κΈ° 도ꡬ -deconstruction-item=해체 μ•„μ΄ν…œ -gun=총 -item=μ•„μ΄ν…œ -item-with-entity-data=개체 데이터가 μžˆλŠ” μ•„μ΄ν…œ -item-with-inventory=인벀토리가 μžˆλŠ” μ•„μ΄ν…œ -item-with-label=λ ˆμ΄λΈ”μ΄ μžˆλŠ” μ•„μ΄ν…œ -item-with-tags=νƒœκ·Έκ°€ μžˆλŠ” μ•„μ΄ν…œ -module=λͺ¨λ“ˆ -rail-planner=철도 κ³„νšκΈ° -repair-tool=수리 도ꡬ -selection-tool=선택 도ꡬ -spidertron-remote=μŠ€νŒŒμ΄λ”νŠΈλ‘  리λͺ¨μ»¨ -tool=도ꡬ -upgrade-item=μ—…κ·Έλ ˆμ΄λ“œ μ•„μ΄ν…œ - -[message] -rb-cannot-create-blueprint=도면을 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. -rb-cannot-open-gui=λ ˆμ‹œν”Ό 뢁을 아직 μ—΄ 수 μ—†μŠ΅λ‹ˆλ‹€. μž μ‹œ κΈ°λ‹€λ € μ£Όμ‹­μ‹œμ˜€. 이 μƒνƒœκ°€ λͺ‡ λΆ„ 이상 μ§€μ†λ˜λ©΄ [color=128, 206, 240]/disp-disp-all[/color] λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€. -rb-can-open-gui=λ ˆμ‹œν”Ό 뢁을 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€! -rb-invalid-command=잘λͺ»λœ λͺ…λ Ήμž…λ‹ˆλ‹€. [color=128, 206, 240]/help RecipeBook[/color]을 μž…λ ₯ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯ν•œ λͺ…령을 ν™•μΈν•©λ‹ˆλ‹€. -rb-memoizer-cache-cleared=λ©”λͺ¨λΌμ΄μ € μΊμ‹œκ°€ μ§€μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€. -rb-object-has-no-page=ν•΄λ‹Ή κ°œμ²΄λŠ” λ ˆμ‹œν”Ό 뢁에 νŽ˜μ΄μ§€κ°€ μ—†μŠ΅λ‹ˆλ‹€. - -[mod-description] -RecipeBook=κΉ¨λ—ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 개체, 유체, ν’ˆλͺ©, μ œμž‘λ²• 및 κΈ°μˆ μ— λŒ€ν•œ 정보λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. FNEI 및 What is it Really Used For와 μœ μ‚¬ν•©λ‹ˆλ‹€. - -[mod-name] -RecipeBook=λ ˆμ‹œν”Ό 뢁 - -[shortcut-name] -rb-search=λ ˆμ‹œν”Ό 뢁 검색 diff --git a/RecipeBook_3.5.6/locale/ko/info.json b/RecipeBook_3.5.6/locale/ko/info.json deleted file mode 100644 index 8c9ecd17..00000000 --- a/RecipeBook_3.5.6/locale/ko/info.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "language-name": "Korean", - "font": { - "RecipeBook": ["__RecipeBook__/fonts/RecipeBook.ttf"] - } -} diff --git a/RecipeBook_3.5.6/locale/pt-BR/RecipeBook.cfg b/RecipeBook_3.5.6/locale/pt-BR/RecipeBook.cfg deleted file mode 100644 index e6c82cc5..00000000 --- a/RecipeBook_3.5.6/locale/pt-BR/RecipeBook.cfg +++ /dev/null @@ -1,205 +0,0 @@ -[mod-name] -RecipeBook=Recipe Book - -[mod-description] -RecipeBook=Pesquise informaΓ§Γ΅es sobre fabricantes, fluidos, itens, receitas e tecnologias em uma interface limpa e fΓ‘cil de usar. Semelhante ao FNEI e What is it Really Used For. - -[controls] -rb-jump-to-front=Pular para frente -rb-navigate-backward=Navegar para trΓ‘s -rb-navigate-forward=Navegar para a frente -rb-open-selected=Abra o objeto selecionado no Livro de Receitas -rb-return-to-home=Retornar ao inΓ­cio -rb-search=Pesquisar no livro de receitas - -[shortcut-name] -rb-search=Pesquisar no livro de receitas - -[item-name] -rb-crafter-blueprint=Diagrama temporΓ‘rio do fabricante - -[command-help] -rb-refresh-all=- Reprocessa os dados do Livro de Receitas, recria todas as interfaces e retraduz todos os dicionΓ‘rios. - -[fuel-category-name] -burnable-fluid=CombustΓ­vel queimΓ‘vel - -[message] -rb-cannot-create-blueprint=NΓ£o Γ© possΓ­vel criar um diagrama. -rb-cannot-open-gui=Ainda nΓ£o Γ© possΓ­vel abrir o livro de receitas, por favor, aguarde. Se isso persistir por mais de alguns minutos, execute o comando [color=128, 206, 240]/rb-refresh-all[/color]. -rb-can-open-gui=O livro de receitas jΓ‘ estΓ‘ disponΓ­vel! -rb-invalid-command=Comando invΓ‘lido, digite [color=128, 206,240]/help RecipeBook[/color] para ver os comandos disponΓ­veis. -rb-memoizer-cache-cleared=Cache memorizador limpo. -rb-object-has-no-page=O objeto nΓ£o tem pΓ‘gina no livro de receitas - -[gui] -rb-add-to-favorites=Adicionar aos favoritos -rb-alt-click=Alt + clique -rb-attach-search-results=Abra os resultados da pesquisa em uma interface de informaΓ§Γ΅es anexada -rb-attach-search-results-description=Se habilitado, clicar em um resultado de pesquisa abrirΓ‘ uma pΓ‘gina de informaΓ§Γ΅es anexada Γ  interface de pesquisa. AlΓ©m disso, clicar em outro resultado da pesquisa irΓ‘ abri-lo na mesma pΓ‘gina.\nVocΓͺ pode usar o botΓ£o do meio do mouse para abrir uma janela de informaΓ§Γ΅es separada a qualquer momento. -rb-burned-in=Queimado em -rb-burnt-result-of=Resultado da queima de -rb-burnt-result=Resultado da queima -rb-captions=Legendas -rb-categories=Categorias -rb-categories-description=Desmarque uma categoria para ocultar seus objetos das pΓ‘ginas de pesquisa e informaΓ§Γ΅es.\n[font=default-semibold]NOTA:[/font] Alguns objetos serΓ£o mostrados independentemente dessas configuraΓ§Γ΅es (ou seja, ingredientes e produtos da receita). -rb-category=Categoria -rb-click=Clique -rb-close-quick-ref-window=Fechar janela de referΓͺncia rΓ‘pida -rb-close-search-gui-after-selection=Feche a interface de pesquisa apΓ³s a seleΓ§Γ£o -rb-collapse=Contrair -rb-collapsed=ContraΓ­do -rb-compatible-fuels=CombustΓ­veis compatΓ­veis -rb-compatible-mining-drills=Mineradoras compatΓ­veis -rb-compatible-modules=MΓ³dulos compatΓ­veis -rb-compatible-recipes=Receitas compatΓ­veis -rb-compatible-resources=Recursos compatΓ­veis -rb-content=ConteΓΊdo -rb-control-click=Control + clique -rb-crafter=Fabricante -rb-crafting-time-desc=Quanto tempo leva para fazer esta receita por um fabricante com uma velocidade de fabricaΓ§Γ£o de 1. -rb-crafting-time=Tempo de produΓ§Γ£o -rb-default-state=Estado padrΓ£o -rb-default-temperature=Temperatura padrΓ£o -rb-delete-favorites=Apagar favoritos -rb-delete-history=Apagar histΓ³rico -rb-detach-instruction=Desanexar janela de informaΓ§Γ£o -rb-disabled-abbrev=(D) -rb-expand=Expandir -rb-favorites=Favoritos -rb-fixed-recipe=Receita fixa -rb-fluid=Fluido -rb-fluids=Fluidos -rb-format-amount=__1__ Γ— -rb-format-area=__1__Γ—__2__ -rb-format-seconds-parenthesis=(__1__ s) -rb-fuel-categories=Categorias de combustΓ­vel -rb-fuel-category=Categoria de combustΓ­vel -rb-fuzzy-search-description=CorrespondΓͺncia de padrΓ΅es mais tolerantes para pesquisas.\n[font=default-semibold]NOTA:[/font] Depois de alterar esta configuraΓ§Γ£o, vocΓͺ precisarΓ‘ pesquisar novamente para que a alteraΓ§Γ£o tenha efeito. -rb-fuzzy-search=Pesquisa difusa -rb-general=Geral -rb-get-blueprint=Obter diagrama -rb-go-backward=Ir para trΓ‘s -rb-go-forward=Ir em frente -rb-go-to-the-back=Ir para trΓ‘s -rb-go-to-the-front=Ir para a frente -rb-group=Grupo -rb-hidden-abbrev=(H) -rb-hidden=Oculto -rb-history=HistΓ³rico -rb-ingredient-in=Ingrediente em -rb-ingredient-limit=Limite de ingrediente -rb-ingredients=Ingredientes -rb-inputs=Entradas -rb-interface=Interface -rb-item=Item -rb-items=Itens -rb-jump-to-back=Pular para trΓ‘s -rb-jump-to-the-front=Pule para a frente -rb-lab=LaboratΓ³rio -rb-list-box-label=__1__ (__2__) -rb-machine=Maquina a combustΓ£o -rb-made-in=Feito em -rb-max-rows=MΓ‘ximo de linhas -rb-middle-click=Clique do meio -rb-mined-from=Minerado de -rb-mining-area=Área de mineraΓ§Γ£o -rb-mining-drill=Minerador -rb-mining-drills=Mineradores -rb-mining-speed=Velocidade de mineraΓ§Γ£o -rb-mining-time=Tempo de mineraΓ§Γ£o -rb-module-effects=Efeitos de mΓ³dulo -rb-modules=MΓ³dulos -rb-no-content-warning=[img=warning-white] Nada para mostrar com base nas configuraΓ§Γ΅es atuais. -rb-no-results=[img=warning-white] Sem resultados. -rb-normal=Normal -rb-offshore-pump=Bomba d'Γ‘gua -rb-open-in-technology-window=Abrir na janela de tecnologia -rb-open-list-in-new-window=Abra esta lista em uma nova janela. -rb-open-quick-ref-window=Abra a janela de referΓͺncia rΓ‘pida -rb-pages=PΓ‘ginas -rb-per-second-suffix=/ s -rb-pin-instruction=Mantenha aberto -rb-placed-by=Colocado por -rb-place-result=Lugar do resultado -rb-prerequisite-of=PrΓ©-requisito de -rb-prerequisites=PrΓ©-requisitos -rb-product-of=Produto de -rb-products=Produtos -rb-pumped-by=Bombeado por -rb-recipe-categories=Categorias da receita -rb-recipe-category=Categoria da receita -rb-recipe=Receita -rb-recipes=Receitas -rb-remove-from-favorites=Remover dos favoritos -rb-required-fluid=Fluido necessΓ‘rio -rb-required-units=Unidades necessΓ‘rias -rb-researched-in=Pesquisado em -rb-research-ingredients-per-unit=Ingredientes de pesquisa por unidade -rb-researching-speed=Velocidade de pesquisa -rb-research-speed-desc=Velocidade de pesquisa bΓ‘sica do laboratΓ³rio. NΓ£o inclui bΓ΄nus de forΓ§a. -rb-resource-categories=Categorias do recurso -rb-resource-category=Categoria do recurso -rb-resource=Recurso -rb-resources=Recursos -rb-rocket-launch-product-of=Produto do lanΓ§amento de foguete de -rb-rocket-launch-products=Produtos do lanΓ§amento de foguete -rb-rocket-parts-required=PeΓ§as de foguete necessΓ‘rias -rb-search-gui-location-center=Centro -rb-search-gui-location-description=Todas as interfaces do Livro de Receitas podem ser arrastadas - este Γ© apenas o local padrΓ£o. VocΓͺ pode redefinir o local para o padrΓ£o clicando com o botΓ£o do meio na barra de tΓ­tulo. -rb-search-gui-location=LocalizaΓ§Γ£o da interface de pesquisa -rb-search-gui-location-top-left=Superior esquerdo -rb-search-instruction=Pesquisa (__CONTROL__focus-search__) -rb-search=Procurar -rb-search-title=Livro de receitas -rb-search-type-both=Ambos -rb-search-type-description=[font=default-semibold]Localizado:[/font] O nome traduzido de um objeto serΓ‘ correspondido para pesquisa.\n[font = default-semibold]Interno:[/font] O nome do protΓ³tipo interno de um objeto serΓ‘ correspondido para pesquisa.\n[font=default-semibold]Ambos:[/font] O nome do protΓ³tipo de um objeto e o nome traduzido serΓ£o correspondidos para pesquisa. -rb-search-type-internal=Interno -rb-search-type-localised=Localizado -rb-search-type=Tipo de busca -rb-session-history=HistΓ³rico da sessΓ£o -rb-settings=ConfiguraΓ§Γ΅es do livro de receitas -rb-settings-instruction=ConfiguraΓ§Γ΅es -rb-shift-click=Shift + clique -rb-show-alternate-name-description=Mostre o nome "alternativo" do objeto em sua dica de ferramenta. Por padrΓ£o, este serΓ‘ o nome do protΓ³tipo do objeto. Se `mostrar nomes internos` estiver habilitado, este serΓ‘ o nome traduzido do objeto. -rb-show-alternate-name=Mostrar nome alternativo -rb-show-descriptions=Mostrar descriΓ§Γ΅es -rb-show-detailed-tooltips-description=Mostra vΓ‘rias informaΓ§Γ΅es sobre um objeto em sua dica de ferramenta, como uma pΓ‘gina mini de informaΓ§Γ΅es. Desative isso para melhorar significativamente o desempenho geral. -rb-show-detailed-tooltips=Mostrar dicas detalhadas -rb-show-disabled-description=Objetos "desativados" sΓ£o objetos que existem, mas nΓ£o sΓ£o selecionΓ‘veis no jogo em nenhuma circunstΓ’ncia. -rb-show-disabled=Mostrar objetos desativados -rb-show-fluid-temperatures-absolute-only=Absoluto apenas -rb-show-fluid-temperatures-all=Tudo -rb-show-fluid-temperatures-description=[font=default-semibold]Desligado:[/font] Variantes de temperatura do fluido nΓ£o serΓ£o mostradas na pesquisa.\n[font=default-semibold] Apenas absoluto:[/font] Apenas as variantes de temperatura \"absolutas\" (fora do intervalo) serΓ£o mostradas na pesquisa.\n[font=default-semibold]Todas:[/font] Todas as variaΓ§Γ΅es de temperatura serΓ£o mostradas na pesquisa. -rb-show-fluid-temperatures=Mostrar temperaturas de fluidos -rb-show-fluid-temperatures-off=Desligado -rb-show-glyphs=Mostrar glifos -rb-show-hidden-description=Objetos \"ocultos\" sΓ£o objetos que nΓ£o aparecerΓ£o nas listas de seleΓ§Γ£o regulares, mas ainda podem interagir de outras maneiras.\n[font=default-semibold]NOTA:[/font] Alguns objetos ocultos serΓ£o mostrados independentemente desta configuraΓ§Γ£o (ou seja, ingredientes e produtos da receita). -rb-show-hidden=Mostrar objetos ocultos -rb-show-interaction-helps=Mostrar ajuda de interaΓ§Γ£o -rb-show-internal-names-description=Mostra o nome do protΓ³tipo interno de um objeto em vez de seu nome traduzido.\nSe `Mostrar nome alternativo` estiver habilitado, o nome traduzido do objeto serΓ‘ mostrado em sua dica de ferramenta. -rb-show-internal-names=Mostrar nomes internos -rb-show-made-in-in-quick-ref=Mostrar "feito em" na GUI de referΓͺncia rΓ‘pida -rb-show-unresearched=Mostrar objetos nΓ£o pesquisados -rb-size=Tamanho -rb-stack-size=Tamanho da pilha -rb-tech-level-desc=O nΓ­vel dessa tecnologia infinita para mostrar os dados. -rb-tech-level=NΓ­vel -rb-technology=Tecnologia -rb-temperatures=Variantes de temperatura -rb-time-per-unit-desc=Quanto tempo leva para pesquisar uma unidade em um laboratΓ³rio com uma velocidade de pesquisa de 1. -rb-time-per-unit=Tempo por unidade -rb-toggle-completed=AlternΓ’ncia concluΓ­da -rb-tooltips=Dicas de ferramentas -rb-unlocked-by=Desbloqueado por -rb-unlocks-fluids=Desbloqueia fluidos -rb-unlocks-items=Desbloqueia itens -rb-unlocks-machines=Desbloqueia mΓ‘quinas -rb-unlocks-recipes=Desbloqueia receitas -rb-unresearched=NΓ£o pesquisado -rb-view-base-fluid=Ver fluido de base -rb-view-details-in-new-window=Ver detalhes em uma nova janela -rb-view-details=Ver detalhes -rb-view-fixed-recipe=Ver receita fixa -rb-view-fluid=Ver fluido -rb-view-required-fluid=Veja fluido necessΓ‘rio diff --git a/RecipeBook_3.5.6/locale/pt-BR/info.json b/RecipeBook_3.5.6/locale/pt-BR/info.json deleted file mode 100644 index d2520440..00000000 --- a/RecipeBook_3.5.6/locale/pt-BR/info.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "language-name": "Portuguese-Brazil", - "font": { - "RecipeBook": ["__RecipeBook__/fonts/RecipeBook.ttf"] - } -} diff --git a/RecipeBook_3.5.6/locale/ru/RecipeBook.cfg b/RecipeBook_3.5.6/locale/ru/RecipeBook.cfg deleted file mode 100644 index fa8d5c6f..00000000 --- a/RecipeBook_3.5.6/locale/ru/RecipeBook.cfg +++ /dev/null @@ -1,379 +0,0 @@ -[command-help] -rb-refresh-all= - Π—Π°Π½ΠΎΠ²ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Книги Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ всС интСрфСйсы ΠΈ пСрСвСсти словари. - -[controls] -rb-jump-to-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ -rb-navigate-backward=Назад -rb-navigate-forward=Π’ΠΏΠ΅Ρ€Ρ‘Π΄ -rb-open-selected=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -rb-return-to-home=Π”ΠΎΠΌΠΎΠΉ -rb-search=Поиск Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² - -[entity-type] -accumulator=Аккумулятор -ammo-turret=Π’ΡƒΡ€Π΅Π»ΡŒ с боСприпасами -arithmetic-combinator=АрифмСтичСский ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ -arrow=Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° -artillery-flare=АртиллСрийская Π²ΡΠΏΡ‹ΡˆΠΊΠ° -artillery-projectile=АртиллСрийский снаряд -artillery-turret=АртиллСрийская установка -artillery-wagon=АртиллСрийский Π²Π°Π³ΠΎΠ½ -assembling-machine=Π‘Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ -beacon=Маяк -beam=Π›ΡƒΡ‡ -boiler=Π‘ΠΎΠΉΠ»Π΅Ρ€ -burner-generator=Π’Π²Π΅Ρ€Π΄ΠΎΡ‚ΠΎΠΏΠ»ΠΈΠ²Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ -car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ -cargo-wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ -character=ΠŸΠ΅Ρ€ΡΠΎΠ½Π°ΠΆ -character-corpse=Π’Ρ€ΡƒΠΏ пСрсонаТа -cliff=Π‘ΠΊΠ°Π»Π° -combat-robot=Π‘ΠΎΠ΅Π²ΠΎΠΉ Π΄Ρ€ΠΎΠ½ -constant-combinator=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ -construction-robot=Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄Ρ€ΠΎΠ½ -container=ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ -corpse=Π’Ρ€ΡƒΠΏ -curved-rail=Π˜Π·ΠΎΠ³Π½ΡƒΡ‚Ρ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ -decider-combinator=Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ -deconstructible-tile-proxy=ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠ»Π° -electric-energy-interface=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ элСктроэнСргии -electric-pole=ΠžΠΏΠΎΡ€Π° Π›Π­ΠŸ -electric-turret=ЭлСктричСская Ρ‚ΡƒΡ€Π΅Π»ΡŒ -entity-ghost=ΠŸΡ€ΠΈΠ·Ρ€Π°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° -explosion=Π’Π·Ρ€Ρ‹Π² -fire=Огонь -fish=Π Ρ‹Π±Π° -flame-thrower-explosion=ΠžΠ³Π½Π΅ΠΌΡ‘Ρ‚Π½Ρ‹ΠΉ Π²Π·Ρ€Ρ‹Π² -fluid-turret=Жидкостная Ρ‚ΡƒΡ€Π΅Π»ΡŒ -fluid-wagon=Π’Π°Π³ΠΎΠ½-цистСрна -flying-text=Π›Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ тСкст -furnace=ΠŸΠ΅Ρ‡ΡŒ -gate=Π’ΠΎΡ€ΠΎΡ‚Π° -generator=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ -heat-interface=Π’Π΅ΠΏΠ»ΠΎΠ²ΠΎΠΉ интСрфСйс -heat-pipe=ВСпловая Ρ‚Ρ€ΡƒΠ±ΠΊΠ° -highlight-box=ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ выдСлСния -infinity-container=БСсконСчный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ -infinity-pipe=БСсконСчная Ρ‚Ρ€ΡƒΠ±Π° -inserter=ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ‚ΠΎΡ€ -item-entity=Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° -item-request-proxy=ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ запроса ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² -lab=Лаборатория -lamp=Π›Π°ΠΌΠΏΠ° -land-mine=Мина -linked-belt=Бвязанный ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ -linked-container=Бвязанный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ -loader=ΠŸΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ -loader-1x1=ΠŸΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ (1Ρ…1) -locomotive=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² -logistic-container=ЛогистичСский ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ -logistic-robot=Вранспортный Π΄Ρ€ΠΎΠ½ -market=Π Ρ‹Π½ΠΎΠΊ -mining-drill=Π‘ΡƒΡ€ -offshore-pump=ΠŸΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½Ρ‹ΠΉ насос -particle-source=Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ частиц -pipe=Π’Ρ€ΡƒΠ±Π° -pipe-to-ground=ПодзСмная Ρ‚Ρ€ΡƒΠ±Π° -player-port=ΠŸΠΎΡ€Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° -power-switch=Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ -programmable-speaker=ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊ -projectile=Бнаряд -pump=Помпа -radar=Π Π°Π΄Π°Ρ€ -rail-chain-signal=ΠŸΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠΉ свСтофор -rail-remnants=Обломки Ρ€Π΅Π»ΡŒΡΠΎΠ² -rail-signal=Π‘Π²Π΅Ρ‚ΠΎΡ„ΠΎΡ€ -reactor=Π Π΅Π°ΠΊΡ‚ΠΎΡ€ -resource=РСсурс -roboport=Дронстанция -rocket-silo=РакСтная ΡˆΠ°Ρ…Ρ‚Π° -rocket-silo-rocket=Π Π°ΠΊΠ΅Ρ‚Π° Π² Ρ€Π°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΡˆΠ°Ρ…Ρ‚Π΅ -rocket-silo-rocket-shadow=ВСнь Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Π² Ρ€Π°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΡˆΠ°Ρ…Ρ‚Π΅ -simple-entity=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ -simple-entity-with-force=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, принадлСТащая ΠΊΠΎΠΌΠ°Π½Π΄Π΅ (силС) -simple-entity-with-owner=ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° -smoke-with-trigger=Π”Ρ‹ΠΌ с Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ -solar-panel=БолнСчная панСль -speech-bubble=ΠŸΡƒΠ·Ρ‹Ρ€ΡŒ с тСкстом -spider-leg=Нога ΠΏΠ°ΡƒΠΊΠ° -spider-vehicle=Вранспорт ΠΏΠ°ΡƒΠΊΠ° -splitter=Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ -sticker=НаклСйка -storage-tank=Π Π΅Π·Π΅Ρ€Π²ΡƒΠ°Ρ€ -straight-rail=ΠŸΡ€ΡΠΌΡ‹Π΅ Ρ€Π΅Π»ΡŒΡΡ‹ -stream=ΠŸΠΎΡ‚ΠΎΠΊ -tile-ghost=ΠŸΡ€ΠΈΠ·Ρ€Π°ΠΊ Ρ‚Π°ΠΉΠ»Π° -train-stop=ЖСлСзнодороТная станция -transport-belt=ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ -tree=Π”Π΅Ρ€Π΅Π²ΠΎ -turret=Π’ΡƒΡ€Π΅Π»ΡŒ -underground-belt=ΠŸΠΎΠ΄Π·Π΅ΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ -unit=ΠΠ½ΠΈΡ‚ -unit-spawner=ΠŸΠΎΡ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡŽΠ½ΠΈΡ‚ΠΎΠ² -wall=Π‘Ρ‚Π΅Π½Π° - -[fuel-category-name] -burnable-fluid=БТигаСмая ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ - -[gui] -rb-accepted-equipment=ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰Π΅Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ -rb-accepted-modules=ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ -rb-add-to-favorites=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅ -rb-affects-recipes=ВлияСт Π½Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -rb-alt-click=Alt + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ -rb-attach-search-results-description=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска откроСтся информационная страница, прикрСплённая ΠΊ ΠΎΠΊΠ½Ρƒ поиска. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‰Ρ‘Π»ΠΊΠ½ΡƒΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска, Π²Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ страницС.\nΠ’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² любоС врСмя. -rb-attach-search-results=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска Π² ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ интСрфСйса -rb-base-pollution=Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ загрязнСниС -rb-base-pollution-desc=ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ загрязнСния ΠΌΠΎΠΆΠ΅Ρ‚ сильно Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ сТигаСмой Тидкости. -rb-beacon=Маяк -rb-buffer-capacity=ΠΠΌΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€Π° -rb-burned-in=БТигаСтся Π² -rb-burnt-result=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сТигания -rb-burnt-result-of=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сТигания -rb-can-burn=МоТно ΡΠΆΠΈΠ³Π°Ρ‚ΡŒ -rb-can-craft=МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ -rb-can-mine=МоТно Π΄ΠΎΠ±Ρ‹Π²Π°Ρ‚ΡŒ -rb-captions=Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ -rb-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ -rb-categories-description=Π‘Π½ΠΈΠΌΠΈΡ‚Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с поисковых ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… страниц.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] НСкоторыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ этих настроСк (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹). -rb-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ -rb-change-search-type=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ поиска -rb-charging-energy=ЭнСргия зарядки -rb-click=Π©Π΅Π»Ρ‡ΠΎΠΊ -rb-close-quick-ref-window=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ -rb-close-search-gui-after-selection=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс поиска послС Π²Ρ‹Π±ΠΎΡ€Π° -rb-collapse=Π‘Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ -rb-collapsed=Π‘Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎ -rb-construction-radius=Радиус ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π° -rb-content=Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ -rb-control-click=Control + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ -rb-crafter=Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ -rb-crafting-time=ВрСмя создания -rb-crafting-time-desc=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π² сборщикС со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ изготовлСния 1. -rb-default-gui-type=Π’ΠΈΠΏ интСрфСйса ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -rb-default-gui-type-description=[font=default-semibold]ВСкстовый:[/font] Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ интСрфСйс Книги Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², настроСнный Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ поиск ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎΡ‚ интСрфСйс поиска ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ всС Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².\n[font=default-semibold]Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ:[/font] Π‘ΠΎΠ»Π΅Π΅ "ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ" интСрфСйс поиска, основанный Π½Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈ Π·Π½Π°Ρ‡ΠΊΠ°Ρ…. Π­Ρ‚ΠΎΡ‚ интСрфСйс поиска ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΈ Тидкости.\nΠ­Ρ‚ΠΎ всСго лишь Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π² самом графичСском интСрфСйсС поиска. -rb-default-gui-type-textual=ВСкстовый -rb-default-gui-type-visual=Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ -rb-default-state=БостояниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -rb-default-temperature=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -rb-delete-favorites=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ΅ -rb-delete-history=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ -rb-detach-instruction=ΠžΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ -rb-disabled-abbrev=(О) -rb-distribution-effectivity=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ распрСдСлСния -rb-effect-area=ΠžΠ±Π»Π°ΡΡ‚ΡŒ эффСкта -rb-energy-consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ -rb-energy-per-shield-point=Π­Π½Π΅Ρ€Π³ΠΈΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Ρ‰ΠΈΡ‚Π° -rb-energy-production=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ энСргии -rb-entities=Бущности -rb-entity=Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ -rb-entity-type=Π’ΠΈΠΏ сущности -rb-equipment-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ оборудования -rb-equipment-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ оборудования -rb-equipment=ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ -rb-equipment-properties=ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ оборудования -rb-expand=Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ -rb-expected-resources=ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ рСсурсы -rb-favorites=Π˜Π·Π±Ρ€Π°Π½Π½ΠΎΠ΅ -rb-fixed-recipe=Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -rb-fluid-consumption=ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Тидкости -rb-fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -rb-fluids=Жидкости -rb-format-amount=__1__ Γ— -rb-format-area=__1__Γ—__2__ -rb-format-seconds-parenthesis=(__1__ с) -rb-fuel-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° -rb-fuel-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° -rb-fuzzy-search-description=Π‘ΠΎΠ»Π΅Π΅ мягкоС сопоставлСниС с шаблоном для поиска.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] ПослС измСнСния этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ вступило Π² силу. -rb-fuzzy-search=НСчёткий поиск -rb-gathered-from=ДобываСтся ΠΈΠ· -rb-general=ОсновноС -rb-generator=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ -rb-get-blueprint=ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ -rb-go-backward=Назад -rb-go-forward=Π’ΠΏΠ΅Ρ€Ρ‘Π΄ -rb-go-to-the-back=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π°Π·Π°Π΄ -rb-go-to-the-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ -rb-group=Π“Ρ€ΡƒΠΏΠΏΠ° -rb-hidden-abbrev=(Π‘) -rb-hidden=Π‘ΠΊΡ€Ρ‹Ρ‚ΠΎ -rb-history=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ -rb-ingredient-in=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ Π² -rb-ingredient-limit=ΠŸΡ€Π΅Π΄Π΅Π» ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π° -rb-ingredients=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ -rb-inputs=Π’Ρ…ΠΎΠ΄Ρ‹ -rb-interface=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ -rb-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -rb-items=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ -rb-item-type=Π’ΠΈΠΏ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° -rb-jump-to-back=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† -rb-jump-to-the-front=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ -rb-lab=Лаборатория -rb-list-box-label=__1__ (__2__) -rb-logistic-radius=Радиус логистики -rb-made-in=Боздаётся Π² -rb-max-energy-production=Макс. производство элСктроэнСргии -rb-maximum-temperature=Макс. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° -rb-max-rows=Макс. строк -rb-middle-click=БКМ -rb-mined-by=ДобываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ -rb-mined-from=ДобываСтся ΠΈΠ· -rb-minimum-temperature=Мин. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° -rb-mining-area=ΠžΠ±Π»Π°ΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ -rb-mining-drill=Π‘ΡƒΡ€ -rb-mining-drills=Π‘ΡƒΡ€Ρ‹ -rb-mining-speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ -rb-mining-time=ВрСмя Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ -rb-module-effects=Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -rb-module-slots=Π―Ρ‡Π΅ΠΉΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -rb-modules=ΠœΠΎΠ΄ΡƒΠ»ΠΈ -rb-no-content-warning=[img=warning-white] НСчСго ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… настройках. -rb-no-results=[img=warning-white] НСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². -rb-normal=ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ -rb-offshore-pump=ΠŸΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½Ρ‹ΠΉ насос -rb-open-info-relative-to-gui-description=Если этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, использованиС горячСй клавиши "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°" Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ страницу этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ графичСского интСрфСйса. Если графичСский интСрфСйс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ графичСский интСрфСйс Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ привязку, ΠΎΠ½ откроСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² сСрСдинС экрана. -rb-open-info-relative-to-gui=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ страницу ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ графичСского интСрфСйса -rb-open-in-technology-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ -rb-open-list-in-new-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ этот список Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅. -rb-open-quick-ref-window=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ -rb-pages=Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ -rb-per-second-suffix=/ с -rb-pin-instruction=Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ -rb-place-as-equipment-result=Π Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ -rb-placed-by=Π§Π΅ΠΌ размСщаСтся -rb-placed-in=РазмСщаСтся Π² -rb-place-result=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ размСщСния -rb-pollution-multiplier=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ загрязнСния -rb-prerequisite-of=ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для -rb-prerequisites=ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ -rb-product-of=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ -rb-products=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ -rb-pumped-by=Π§Π΅ΠΌ пСрСкачиваСтся -rb-recipe-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -rb-recipe-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -rb-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ -rb-recipes=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -rb-remove-from-favorites=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ -rb-required-fluid=ВрСбуСмая ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -rb-required-units=Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ -rb-researched-in=Π˜ΡΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ΡΡ Π² -rb-research-ingredients-per-unit=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -rb-researching-speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исслСдования -rb-research-speed-desc=Базовая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исслСдования Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΉ. НС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ бонусы ускорСния. -rb-resource-categories=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ рСсурса -rb-resource-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ рСсурса -rb-resource=РСсурс -rb-resources=РСсурсы -rb-right-click=ПКМ -rb-robot-limit=Π›ΠΈΠΌΠΈΡ‚ Π΄Ρ€ΠΎΠ½ΠΎΠ² -rb-rocket-launch-product-of=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ с -rb-rocket-launch-products=Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ -rb-rocket-parts-required=ВрСбуСтся частСй Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ -rb-science-pack=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ -rb-search-filter=Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ поиска -rb-search-gui-location-center=Π¦Π΅Π½Ρ‚Ρ€ -rb-search-gui-location-description=ВсС ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ - это просто располоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ мСстополоТСниС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² срСднСй ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ строкС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. -rb-search-gui-location=РасполоТСниС ΠΎΠΊΠ½Π° поиска -rb-search-gui-location-top-left=НавСрху слСва -rb-search-instruction=Поиск (__CONTROL__focus-search__) -rb-search=Поиск -rb-search-title=Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -rb-search-type-both=Оба -rb-search-type-description=[font=default-semibold]Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅:[/font] ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ использовано для поиска.\n[font=default-semibold]Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅: [/font] Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ использовано для поиска.\n[font=default-semibold]Оба:[/font] НазваниС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для поиска. -rb-search-type-internal=Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ -rb-search-type-localised=Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ -rb-search-type=Π’ΠΈΠΏ поиска -rb-session-history=Π˜ΡΡ‚ΠΎΡ€ΠΈΡ сСссии -rb-settings-instruction=Настройки -rb-settings=Настройки Recipe Book -rb-shield-points=Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Ρ‰ΠΈΡ‚Π° -rb-shift-click=Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ -rb-show-alternate-name-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ "Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅" Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ названия", это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. -rb-show-alternate-name=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ -rb-show-descriptions=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ описания -rb-show-detailed-tooltips-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС, Π²Ρ€ΠΎΠ΄Π΅ ΠΌΠΈΠ½ΠΈ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ страницы. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ это, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. -rb-show-detailed-tooltips=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ подсказки -rb-show-disabled-description="ΠžΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Π² ΠΈΠ³Ρ€Π΅ Π½ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ…. -rb-show-disabled=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ -rb-show-fluid-temperatures-absolute-only=Волько Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ -rb-show-fluid-temperatures-all=ВсС -rb-show-fluid-temperatures-description=[font=default-semibold]Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ:[/font] Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Тидкости Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² поискС.\n[font=default-semibold]Волько Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅:[/font] Волько Β«Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅Β» (Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹) Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² поискС.\n[font=default-semibold]ВсС:[/font] ВсС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² поискС. -rb-show-fluid-temperatures-off=Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ -rb-show-fluid-temperatures=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Тидкости -rb-show-glyphs=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΊΠΎΠ½ΠΊΠΈ -rb-show-hidden-description="Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… списках Π²Ρ‹Π±ΠΎΡ€Π°, Π½ΠΎ с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами.\n[font=default-semibold]ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•:[/font] НСкоторыС скрытыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ нСзависимо ΠΎΡ‚ этой настройки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ продукция Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°). -rb-show-hidden=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ -rb-show-interaction-helps=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ подсказки -rb-show-internal-names-description=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вмСсто Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ названия.\nЕсли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅", ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказкС. -rb-show-internal-names=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ -rb-show-made-in-in-quick-ref=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ "создаётся Π²" Π² ΠΎΠΊΠ½Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ -rb-show-unresearched=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСисслСдованныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ -rb-size=Π Π°Π·ΠΌΠ΅Ρ€ -rb-stack-size=Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ‡ΠΊΠΈ -rb-take-result=Π’Π·ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ -rb-tech-level-desc=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ этой бСсконСчной Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. -rb-tech-level=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ -rb-technology=ВСхнология -rb-temperatures=Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ -rb-time-per-unit-desc=Бколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π½Π° исслСдованиС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ исслСдования 1. -rb-time-per-unit=Π’Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ -rb-toggle-completed=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠ΅ -rb-tooltips=Подсказки -rb-unlocked-by=РазблокируСтся этим -rb-unlocks-entities=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ сущности -rb-unlocks-equipment=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ -rb-unlocks-fluids=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Тидкости -rb-unlocks-items=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ -rb-unlocks-recipes=Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -rb-unresearched=НСисслСдовано -rb-view-base-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -rb-view-details-in-new-window=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ подробности Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ -rb-view-details=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ подробности -rb-view-fixed-recipe=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исправлСнный Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -rb-view-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -rb-view-ingredient-in=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ Π² -rb-view-product-details=ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ свСдСний ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ -rb-view-product-of=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ· -rb-view-required-fluid=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ - -[item-name] -rb-crafter-blueprint=Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ сборщика - -[item-type] -ammo=БоСприпасы -armor=Броня -blueprint=Π§Π΅Ρ€Ρ‚Ρ‘ΠΆ -blueprint-book=Книга Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ΅ΠΉ -capsule=ΠšΠ°ΠΏΡΡƒΠ»Π° -copy-paste-tool=БрСдство копирования/вставки -deconstruction-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ -gun=ΠžΡ€ΡƒΠΆΠΈΠ΅ -item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -item-with-entity-data=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сущности -item-with-inventory=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Ρ‘ΠΌ -item-with-label=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с ярлыком -item-with-tags=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ с тэгами -module=ΠœΠΎΠ΄ΡƒΠ»ΡŒ -rail-planner=ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Ρ€Π΅Π»ΡŒΡΠΎΠ² -repair-tool=БрСдство Ρ€Π΅ΠΌΠΎΠ½Ρ‚Π° -selection-tool=БрСдство Π²Ρ‹Π±ΠΎΡ€Π° -spidertron-remote=ΠŸΡƒΠ»ΡŒΡ‚ управлСния ΠΏΠ°ΡƒΠΊΠΎΡ‚Ρ€ΠΎΠ½ΠΎΠΌ -tool=БрСдство -upgrade-item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ - -[message] -rb-cannot-create-blueprint=НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ. -rb-cannot-open-gui=НСвозмоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠšΠ½ΠΈΠ³Ρƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅. Если Ρ‚Π°ΠΊ продолТаСтся Π±ΠΎΠ»Π΅Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ½ΡƒΡ‚, запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ [color=128, 206, 240]/rb-refresh-all[/color]. -rb-can-open-gui=Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступна! -rb-invalid-command=НСвСрная ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ [color=128, 206, 240]/help RecipeBook[/color] для просмотра доступных ΠΊΠΎΠΌΠ°Π½Π΄. -rb-memoizer-cache-cleared=Кэш memoizer ΠΎΡ‡ΠΈΡ‰Π΅Π½. -rb-object-has-no-page=Π£ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅Ρ‚ страницы Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² - -[mod-name] -RecipeBook=Recipe Book (Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²) - -[mod-description] -RecipeBook=Π˜Ρ‰ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ сущностях, Тидкостях, ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°Ρ…, Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… ΠΈ тСхнологиях Π² понятном ΠΈ Π»Ρ‘Π³ΠΊΠΎΠΌ Π² использовании интСрфСйсС. ΠŸΠΎΡ…ΠΎΠΆ Π½Π° FNEI ΠΈ What is it Really Used For. - -[shortcut-name] -rb-search=Поиск Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² diff --git a/RecipeBook_3.5.6/scripts/database/lab.lua b/RecipeBook_3.5.6/scripts/database/lab.lua deleted file mode 100644 index b6e58fb7..00000000 --- a/RecipeBook_3.5.6/scripts/database/lab.lua +++ /dev/null @@ -1,41 +0,0 @@ -local table = require("__flib__.table") - -local util = require("scripts.util") - -return function(database) - for name, prototype in pairs(global.prototypes.lab) do - -- Add to items - for _, item_name in ipairs(prototype.lab_inputs) do - local item_data = database.item[item_name] - if item_data then - item_data.researched_in[#item_data.researched_in + 1] = { class = "entity", name = name } - end - end - - local fuel_categories, fuel_filter = util.process_energy_source(prototype) - database.entity[name] = { - blueprintable = util.is_blueprintable(prototype), - can_burn = {}, - class = "entity", - entity_type = { class = "entity_type", name = prototype.type }, - fuel_categories = fuel_categories, - fuel_filter = fuel_filter, - hidden = prototype.has_flag("hidden"), - inputs = table.map(prototype.lab_inputs, function(v) - return { class = "item", name = v } - end), - module_slots = prototype.module_inventory_size - and prototype.module_inventory_size > 0 - and prototype.module_inventory_size - or nil, - placed_by = util.process_placed_by(prototype), - prototype_name = name, - researching_speed = prototype.researching_speed, - science_packs = {}, - size = util.get_size(prototype), - unlocked_by = {}, - } - util.add_to_dictionary("entity", name, prototype.localised_name) - util.add_to_dictionary("entity_description", name, prototype.localised_description) - end -end diff --git a/RecipeBook_3.5.6/scripts/database/recipe.lua b/RecipeBook_3.5.6/scripts/database/recipe.lua deleted file mode 100644 index 5dec2c48..00000000 --- a/RecipeBook_3.5.6/scripts/database/recipe.lua +++ /dev/null @@ -1,126 +0,0 @@ -local math = require("__flib__.math") - -local constants = require("constants") - -local util = require("scripts.util") - -local fluid_proc = require("scripts.database.fluid") - -return function(database, metadata) - for name, prototype in pairs(global.prototypes.recipe) do - local category = prototype.category - local group = prototype.group - - local enabled_at_start = prototype.enabled - - -- Add to recipe category - local category_data = database.recipe_category[category] - category_data.recipes[#category_data.recipes + 1] = { class = "recipe", name = name } - - -- Add to group - local group_data = database.group[group.name] - group_data.recipes[#group_data.recipes + 1] = { class = "recipe", name = name } - - local data = { - accepted_modules = {}, - class = "recipe", - enabled_at_start = enabled_at_start, - energy = prototype.energy, - group = { class = "group", name = group.name }, - hidden = prototype.hidden, - made_in = {}, - pollution_multiplier = prototype.emissions_multiplier ~= 1 and prototype.emissions_multiplier or nil, - prototype_name = name, - recipe_category = { class = "recipe_category", name = category }, - science_packs = {}, - subgroup = { class = "group", name = prototype.subgroup.name }, - unlocked_by = {}, - used_as_fixed_recipe = metadata.fixed_recipes[name], - } - - -- Ingredients / products - local fluids = { ingredients = 0, products = 0 } - for lookup_type, io_type in pairs({ ingredient_in = "ingredients", product_of = "products" }) do - local output = {} - for i, material in ipairs(prototype[io_type]) do - local amount_ident = util.build_amount_ident(material) - local material_io_data = { - class = material.type, - name = material.name, - amount_ident = amount_ident, - } - local material_data = database[material.type][material.name] - local lookup_table = material_data[lookup_type] - lookup_table[#lookup_table + 1] = { class = "recipe", name = name } - output[i] = material_io_data - material_data.recipe_categories[#material_data.recipe_categories + 1] = { - class = "recipe_category", - name = category, - } - - -- Don't set enabled at start if this is an ignored recipe - local disabled = constants.disabled_categories.recipe_category[category] - if io_type == "products" and (not disabled or disabled ~= 0) then - local subtable = category_data[material.type .. "s"] - subtable[#subtable + 1] = { class = material.type, name = material.name } - if enabled_at_start then - material_data.enabled_at_start = true - end - end - - if material.type == "fluid" then - -- Fluid temperatures - local temperature_ident = util.build_temperature_ident(material) - if temperature_ident then - material_io_data.temperature_ident = temperature_ident - fluid_proc.add_temperature(database.fluid[material.name], temperature_ident) - end - -- Add to aggregate - fluids[io_type] = fluids[io_type] + 1 - end - end - - data[io_type] = output - end - - -- Made in - local num_item_ingredients = 0 - for _, ingredient in pairs(prototype.ingredients) do - if ingredient.type == "item" then - num_item_ingredients = num_item_ingredients + 1 - end - end - for _, crafters in pairs({ global.prototypes.character, global.prototypes.crafter }) do - for crafter_name in pairs(crafters) do - local crafter_data = database.entity[crafter_name] - local fluidbox_counts = metadata.crafter_fluidbox_counts[crafter_name] or { inputs = 0, outputs = 0 } - if - (crafter_data.ingredient_limit or 255) >= num_item_ingredients - and crafter_data.recipe_categories_lookup[category] - and fluidbox_counts.inputs >= fluids.ingredients - and fluidbox_counts.outputs >= fluids.products - then - local crafting_time = math.round(prototype.energy / crafter_data.crafting_speed, 0.01) - data.made_in[#data.made_in + 1] = { - class = "entity", - name = crafter_name, - amount_ident = util.build_amount_ident({ amount = crafting_time, format = "format_seconds_parenthesis" }), - } - crafter_data.can_craft[#crafter_data.can_craft + 1] = { class = "recipe", name = name } - end - end - end - - -- Compatible modules - for module_name, module_limitations in pairs(metadata.modules) do - if not next(module_limitations) or module_limitations[name] then - data.accepted_modules[#data.accepted_modules + 1] = { class = "item", name = module_name } - table.insert(database.item[module_name].affects_recipes, { class = "recipe", name = name }) - end - end - - database.recipe[name] = data - util.add_to_dictionary("recipe", name, prototype.localised_name) - util.add_to_dictionary("recipe_description", name, prototype.localised_description) - end -end diff --git a/RecipeBook_3.5.6/scripts/gui/info/table.lua b/RecipeBook_3.5.6/scripts/gui/info/table.lua deleted file mode 100644 index ff5210a8..00000000 --- a/RecipeBook_3.5.6/scripts/gui/info/table.lua +++ /dev/null @@ -1,248 +0,0 @@ -local gui = require("__flib__.gui") -local table = require("__flib__.table") - -local database = require("scripts.database") -local formatter = require("scripts.formatter") - -local table_comp = {} - -function table_comp.build(parent, index, component, variables) - local has_label = (component.label or component.source) and true or false - return gui.build(parent, { - { - type = "flow", - style_mods = not has_label and { top_margin = 4 } or nil, - direction = "vertical", - index = index, - ref = { "root" }, - action = { - on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, - }, - { - type = "flow", - style_mods = { vertical_align = "center" }, - action = { - on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, - }, - visible = has_label, - { type = "label", style = "rb_list_box_label", ref = { "label" } }, - { type = "empty-widget", style = "flib_horizontal_pusher" }, - { - type = "sprite-button", - style = "mini_button_aligned_to_text_vertically_when_centered", - ref = { "expand_collapse_button" }, - -- NOTE: Sprite, tooltip, and action are set in the update function - }, - }, - { - type = "frame", - style = "deep_frame_in_shallow_frame", - action = { - on_click = { gui = "info", id = variables.gui_id, action = "set_as_active" }, - }, - ref = { "deep_frame" }, - { - type = "table", - style = "rb_info_table", - column_count = 2, - ref = { "table" }, - -- Dummy elements so the first row doesn't get used - { type = "empty-widget" }, - { type = "empty-widget" }, - }, - }, - }, - }) -end - -function table_comp.default_state(settings) - return { collapsed = settings.default_state == "collapsed" } -end - -function table_comp.update(component, refs, object_data, player_data, settings, variables) - local tbl = refs.table - local children = tbl.children - - local gui_translations = player_data.translations.gui - - local search_query = variables.search_query - - local i = 2 - local is_shown = settings.default_state ~= "hidden" - local row_settings = settings.rows - local source_tbl = is_shown and (component.source and object_data[component.source] or component.rows) or {} - for _, row in ipairs(source_tbl) do - local row_name = row.label or row.source - local value = row.value or object_data[row.source] - if value and (not row_settings or row_settings[row_name]) then - local caption = gui_translations[row_name] or row_name - if string.find(string.lower(caption), search_query) then - -- Label - i = i + 1 - local label_label = children[i] - if not label_label or not label_label.valid then - label_label = tbl.add({ - type = "label", - style = "rb_table_label", - index = i, - }) - end - local tooltip = row.label_tooltip - if tooltip then - caption = caption .. " [img=info]" - tooltip = gui_translations[row.label_tooltip] - else - tooltip = "" - end - label_label.caption = caption - label_label.tooltip = tooltip - - -- Value - if row.type == "plain" then - local fmt = row.formatter - if fmt then - value = formatter[fmt](value, gui_translations) - end - i = i + 1 - local value_label = children[i] - if not value_label or not value_label.valid or value_label.type ~= "label" then - if value_label then - value_label.destroy() - end - value_label = tbl.add({ type = "label", index = i }) - end - value_label.caption = value - elseif row.type == "goto" then - i = i + 1 - local button = children[i] - if not button or button.type ~= "button" then - if button then - button.destroy() - end - button = tbl.add({ - type = "button", - style = "rb_table_button", - mouse_button_filter = { "left", "middle" }, - index = i, - }) - end - local source_data = database[value.class][value.name] - local options = table.shallow_copy(row.options or {}) - options.label_only = true - options.amount_ident = value.amount_ident - options.blueprint_result = value.class == "entity" and source_data.blueprintable and { name = value.name } - or nil - local info = formatter(source_data, player_data, options) - if info then - button.caption = info.caption - button.tooltip = info.tooltip - gui.set_action(button, "on_click", { gui = "info", id = variables.gui_id, action = "navigate_to" }) - gui.update_tags( - button, - { context = { class = value.class, name = value.name }, blueprint_result = options.blueprint_result } - ) - else - -- Don't actually show this row - -- This is an ugly way to do it, but whatever - button.destroy() - label_label.destroy() - i = i - 2 - end - elseif row.type == "tech_level_selector" then - i = i + 1 - local flow = children[i] - if not flow or flow.type ~= "flow" then - if flow then - flow.destroy() - end - flow = gui.build(tbl, { - { - type = "flow", - style_mods = { vertical_align = "center" }, - index = i, - ref = { "flow" }, - { - type = "sprite-button", - style = "mini_button_aligned_to_text_vertically_when_centered", - sprite = "rb_minus_black", - mouse_button_filter = { "left" }, - actions = { - on_click = { gui = "info", id = variables.gui_id, action = "change_tech_level", delta = -1 }, - }, - }, - { type = "label", name = "tech_level_label" }, - { - type = "sprite-button", - style = "mini_button_aligned_to_text_vertically_when_centered", - sprite = "rb_plus_black", - mouse_button_filter = { "left" }, - actions = { - on_click = { gui = "info", id = variables.gui_id, action = "change_tech_level", delta = 1 }, - }, - }, - }, - }).flow - end - flow.tech_level_label.caption = formatter.number(variables.selected_tech_level) - elseif row.type == "tech_level_research_unit_count" then - i = i + 1 - local value_label = children[i] - if not value_label or value_label.type ~= "label" then - if value_label then - value_label.destroy() - end - value_label = tbl.add({ type = "label", index = i }) - end - local tech_level = variables.selected_tech_level - value_label.caption = formatter[row.formatter]( - game.evaluate_expression(value, { L = tech_level, l = tech_level }) - ) - end - end - end - end - for j = i + 1, #children do - children[j].destroy() - end - - if i > 3 then - refs.root.visible = true - - local label_source = component.source or component.label - if label_source then - if component.hide_count then - refs.label.caption = gui_translations[label_source] or label_source - else - refs.label.caption = formatter.expand_string( - gui_translations.list_box_label, - gui_translations[label_source] or label_source, - i / 2 - 1 - ) - end - end - - -- Update expand/collapse button and height - gui.set_action(refs.expand_collapse_button, "on_click", { - gui = "info", - id = variables.gui_id, - action = "toggle_collapsed", - context = variables.context, - component_index = variables.component_index, - }) - if variables.component_state.collapsed then - refs.deep_frame.style.maximal_height = 1 - refs.expand_collapse_button.sprite = "rb_collapsed" - refs.expand_collapse_button.tooltip = { "gui.rb-expand" } - else - refs.deep_frame.style.maximal_height = 0 - refs.expand_collapse_button.sprite = "rb_expanded" - refs.expand_collapse_button.tooltip = { "gui.rb-collapse" } - end - else - refs.root.visible = false - end - - return i > 3 -end - -return table_comp diff --git a/RecipeBook_3.5.6/thumbnail.png b/RecipeBook_3.5.6/thumbnail.png deleted file mode 100644 index 77b8b13b..00000000 Binary files a/RecipeBook_3.5.6/thumbnail.png and /dev/null differ diff --git a/RemoteConfiguration/LICENSE.txt b/RemoteConfiguration/LICENSE.txt new file mode 100644 index 00000000..de140118 --- /dev/null +++ b/RemoteConfiguration/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Tom Burrows + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/RemoteConfiguration/README.md b/RemoteConfiguration/README.md new file mode 100644 index 00000000..91c08268 --- /dev/null +++ b/RemoteConfiguration/README.md @@ -0,0 +1,20 @@ +Remote Configuration allows you to click on any machine in map view and open its GUI. While the GUI is open, you can change configurations (e.g. combinator signals, chest limits, spidertron logistic requests) but you can't transfer any items. Since you need to be able to select the machines, radar coverage is required. + +Also allows red/green wire and copper cable placement and entity settings copy-paste in map view. + +Press _R_ over a machine to create a rotation request for it (or _Shift + R_ for reverse rotation). Assembling machines are rotated instantly because that's what vanilla does when you paste a blueprint with a rotated machine on top of an existing one. For other entity types, a construction bot must come and rotate them. + +_Right-click_ on a machine to mark it for deconstruction. _Shift + Right-click_ to cancel deconstruction. + +Attempting to build in map view replaces the item in cursor with a ghost so that you don't have to hold _Shift_. When building after exiting map view, the ghost cursor is replaced with a real item again. This can be disabled in mod settings. (This feature doesn't work if "Automatic ghost cursor" from [Cursor Enhancements](https://mods.factorio.com/mod/CursorEnhancements) is enabled). + + +All interactions can be disabled by removing their keybind in **Settings > Controls**. There is a setting in mod settings to additionally enable these interactions when not in map mode, but when trying to do something out of range. + + +## Compatibility + +- Compatible with any mod, including [Far Reach](https://mods.factorio.com/mod/far-reach) +- Works with [Space Exploration](https://mods.factorio.com/mod/space-exploration), although functionality is mostly superseded by SE's Navigation Satellite, which also works cross-surface +- Recommended with [Wire Shortcut X](https://mods.factorio.com/mod/WireShortcutX) or [Wire Shortcuts](https://mods.factorio.com/mod/WireShortcuts) for long distance wire connections +- Utilises vanilla's permissions system, so may break if you aren't using the **Default** permissions group. Let me know if you'd like me to improve the interactions in this area diff --git a/RemoteConfiguration/changelog.txt b/RemoteConfiguration/changelog.txt new file mode 100644 index 00000000..af70f5f0 --- /dev/null +++ b/RemoteConfiguration/changelog.txt @@ -0,0 +1,90 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 10 January 2024 + Bugfixes: + - Fixed issue with Exotic Industries permission system +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 8 November 2023 + Features: + - Locomotive fuel inventories and spidertron inventories can now be opened remotely from the zoomed-out map +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 15 June 2023 + Features: + - Added default keybindings for controller users + Bugfixes: + - Fixed crashes and unintended behaviour when interacting with machines from other forces +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 21 March 2023 + Bugfixes: + - Fixed that entity GUIs would open when an item from the blueprint library is used +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 12 March 2023 + Features: + - Added a remote interface so that other mods can use RC to open an entity's GUI remotely + - Compatibility with Spidertron Enhancements v1.8.15 +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 11 March 2023 + Changes: + - All features now only work in map mode unless explicitly enabled in mod settings + - Keybinds for all features can now be changed or removed in Settings > Controls + - "Build ghosts in map without holding Shift" can now be disabled in mod settings + - Added explanation to "Tips and Tricks" and Informatron +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 27 January 2023 + Features: + - Shift + Right-click on any machine to cancel its deconstruction + Bugfixes: + - Fixed selection tools and spidertron remotes not being usable in map view +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 27 January 2023 + Features: + - Attempting to build in map view replaces the item in cursor with a ghost so that you don't have to hold 'Shift' + - When building after exiting map view, the ghost cursor is replaced with a real item again + - If using Cursor Enhancements, disable "Automatic ghost cursor" in mod settings + - Press 'R' (or 'Shift + R' for reverse) at any distance to create a rotation request for the selected machine + - Due to game engine limatations, this does not work on every entity type + - Since assembling machines specifically can be freely rotated by placing blueprints over them, they now get instantly rotated instead + - Right-click on a machine at any distance to mark it for deconstruction + Bugfixes: + - Fixed GUIs opening remotely even though a ghost cursor is in hand +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 +Date: 5 January 2023 + Bugfixes: + - Complete fix for not being able to fast transfer wires/cables or place them in inventories +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 5 January 2023 + Bugfixes: + - Fixed not being able to fast transfer wires/cables or place them in inventories +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 1 January 2023 + Features: + - Wire placement is now allowed at any distance (Wire Shortcuts mod currently doesn't allow wire creation in map view - use Wire Shortcut Lite instead) + Bugfixes: + - Fixed item transfer being disabled in god mode or editor mode + - When changing an assembling machine's recipe remotely, items are now spilled around the machine instead of added to the player's inventory +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 28 December 2022 + Features: + - Entity copy paste is now allowed at any distance + - Items with inventory can now be opened when viewing inventories remotely +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 25 December 2022 + Bugfixes: + - GUIs are no longer opened when an item (e.g. blueprint) is in the player's cursor +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 24 December 2022 + Features: + - Initial release \ No newline at end of file diff --git a/RemoteConfiguration/control.lua b/RemoteConfiguration/control.lua new file mode 100644 index 00000000..19b45a5b --- /dev/null +++ b/RemoteConfiguration/control.lua @@ -0,0 +1,416 @@ +local RecipeChange = require "__RemoteConfiguration__/recipe-change" +local blacklist_groups = { + -- exotic industries related + -- maybe add interface to extend this? + ["gate-user"] = true, + ["drone-user"] = true +} + +-- These entity types can be opened remotely anyway +local entity_type_blacklist = { + ["train-stop"] = true, + ["electric-pole"] = true, +} + +local function increase_range(player) + if player.character and player.character_reach_distance_bonus < 200000 then + player.character_reach_distance_bonus = player.character_reach_distance_bonus + 200000 + end +end + +local ranges_reset_this_tick = {} +local function reset_range(player) + if not player.character then return end + while player.character_reach_distance_bonus >= 200000 do + player.character_reach_distance_bonus = player.character_reach_distance_bonus - 200000 + ranges_reset_this_tick[player.index] = game.tick + end +end +local function reset_player(player) + -- dont reset the group if its currently a blacklist group + -- game.print("trying to reset player") + if blacklist_groups[player.permission_group.name] then return end + player.permission_group = game.permissions.get_group("Default") + -- game.print("resetting player") + reset_range(player) +end + +local function can_reach_entity(player, entity, ignore_map_only) + -- Check if player can reach entity disregarding whatever reach bonus we have given the player + if not player.character then return true end + if not ignore_map_only and not player.mod_settings["rc-interact-in-game"].value and player.render_mode == defines.render_mode.game and not (script.active_mods["SpidertronEnhancements"] and entity.type == "spider-vehicle") then return true end + local reach_distance_bonus = player.character_reach_distance_bonus + reset_range(player) + local can_reach = player.can_reach_entity(entity) + player.character_reach_distance_bonus = reach_distance_bonus + return can_reach +end + +local function is_out_of_range_gui_open(player) + local opened = player.opened + if opened and player.opened_gui_type == defines.gui_type.entity and not can_reach_entity(player, opened) then + return true + end + return false +end + +local wires = {["red-wire"] = true, ["green-wire"] = true, ["copper-cable"] = true} +local function is_holding_wire(player) + local cursor_stack = player.cursor_stack + if cursor_stack and cursor_stack.valid_for_read then + return wires[cursor_stack.name] + end +end + +local function open_entity(player, entity, ignore_map_only) + if entity_type_blacklist[entity.type] then return end + reset_player(player) -- Ensures that can_reach_entity is accurate, not needed any more? + local out_of_reach = not can_reach_entity(player, entity, ignore_map_only) + local map_mode = player.render_mode == defines.render_mode.chart_zoomed_in or player.render_mode == defines.render_mode.chart + if out_of_reach or map_mode then + if player.force.is_enemy(entity.force) then + if map_mode then + player.create_local_flying_text{text = {"cant-open-enemy-structures"}, create_at_cursor = true} + end + return + end + + player.opened = nil -- Triggers on_gui_closed before we open the GUI we care about + if out_of_reach then + increase_range(player) + player.permission_group = game.permissions.get_group("Remote Configuration GUI opened") + end + player.opened = entity + if player.opened_gui_type == defines.gui_type.entity then + RecipeChange.on_remote_gui_opened(player) + if not map_mode then + player.create_local_flying_text{ + text = {"remote-configuration.opened-gui-remotely"}, + create_at_cursor = true, + } + player.play_sound{ path = "rc-warning-sound" } + end + else + -- Opening GUI failed + reset_player(player) + end + end +end + +script.on_event("rc-open-gui", + function(event) + local player = game.get_player(event.player_index) + if not player.is_cursor_empty() then return end + local selected = player.selected + + if not selected then + -- Try from the map for trains (and other vehicles) + if player.render_mode == defines.render_mode.chart or player.render_mode == defines.render_mode.chart_zoomed_in then + -- Don't need to check chart_zoomed_in because spidertrons have radars, so would be selectable + local position = event.cursor_position + local vehicles = player.surface.find_entities_filtered{type = {"locomotive", "spider-vehicle"}, position = position, radius = 4.5, limit = 1} + if #vehicles > 0 then + selected = vehicles[1] + end + end + end + if selected then + open_entity(player, selected) + end + end +) + +remote.add_interface("RemoteConfiguration", + { + open_entity = function(player, entity) open_entity(player, entity, true) end, + reset_this_tick = function(player) if game.tick == ranges_reset_this_tick[player.index] then return true end end, + } +) + +script.on_event(defines.events.on_gui_closed, + function(event) + local player = game.get_player(event.player_index) + RecipeChange.on_gui_closed(player) + if is_holding_wire(player) then return end + reset_player(player) + end +) + +-- Allows wires to be fast-transfered or placed in chests when close, but not when far away +local function recalculate_wire_permissions(event) + local player = game.get_player(event.player_index) + if not is_holding_wire(player) then return end + + local opened = player.opened + if player.selected and can_reach_entity(player, player.selected) then + reset_player(player) + elseif player.opened_self or (opened and player.opened_gui_type == defines.gui_type.entity and can_reach_entity(player, opened)) then + reset_player(player) + else + increase_range(player) + player.permission_group = game.permissions.get_group("Remote Configuration GUI opened") + end +end +script.on_event(defines.events.on_player_changed_position, recalculate_wire_permissions) +script.on_event(defines.events.on_selected_entity_changed, recalculate_wire_permissions) +script.on_event(defines.events.on_gui_opened, recalculate_wire_permissions) + +script.on_event(defines.events.on_player_cursor_stack_changed, + function(event) + local player = game.get_player(event.player_index) + if is_holding_wire(player) then + recalculate_wire_permissions(event) + else + if not is_out_of_range_gui_open(player) then + reset_player(player) + end + end + end +) + +script.on_event("rc-paste-entity-settings", + function(event) + local player = game.get_player(event.player_index) + if not player.is_cursor_empty() then return end + + local selected = player.selected + if not selected then return end + + local in_reach = can_reach_entity(player, selected) + if in_reach then return end -- Let vanilla handle this + + local entity_copy_source = player.entity_copy_source + if not entity_copy_source then return end + if player.force.is_enemy(selected.force) then + player.create_local_flying_text{text = {"cant-paste-enemy-structure-settings"}, create_at_cursor = true} + return + end + + removed_items = selected.copy_settings(entity_copy_source, player) + local surface = selected.surface + local position = selected.position + local force = player.force + for name, count in pairs(removed_items) do + surface.spill_item_stack( + position, + {name = name, count = count}, + true, -- enabled_looted + force, -- force for deconstruction + false -- allow_on_belts + ) + end + end +) + +function is_cheating(player) + if + player.cheat_mode + and not (player.controller_type == defines.controllers.god and script.active_mods["space-exploration"]) + then + return true + end + return player.controller_type == defines.controllers.editor +end + +function set_cursor(player, item) + local inventory = player.get_main_inventory() + if not inventory then + return false + end + local cursor_stack = player.cursor_stack + if not cursor_stack or not player.clear_cursor() then + return false + end + local inventory_stack, stack_index = inventory.find_item_stack(item) + if not inventory_stack or not stack_index then + local stack_size = game.item_prototypes[item].stack_size + if is_cheating(player) and inventory.can_insert({ name = item, count = stack_size }) then + inventory.insert({ name = item, count = stack_size }) + inventory_stack, stack_index = inventory.find_item_stack(item) + else + player.cursor_ghost = item + return true + end + end + --- @cast inventory_stack LuaItemStack + --- @cast stack_index uint + if not cursor_stack.transfer_stack(inventory_stack) then + return false + end + local inventory_def + if player.controller_type == defines.controllers.character then + inventory_def = defines.inventory.character_main + elseif player.controller_type == defines.controllers.editor then + inventory_def = defines.inventory.editor_main + elseif player.controller_type == defines.controllers.god then + inventory_def = defines.inventory.god_main + end + player.hand_location = { inventory = inventory_def, slot = stack_index } + return true +end + +local function remote_build(event) + local player = game.get_player(event.player_index) + if not player.mod_settings["rc-ghost-build-in-map"].value then return end + if player.render_mode == defines.render_mode.game then + -- Try and put the real item back in the cursor + local cursor_ghost = player.cursor_ghost + if not cursor_ghost then return end + + local main_inventory = player.get_main_inventory() + if not main_inventory then + return + end + + local count = main_inventory.get_item_count(cursor_ghost.name) + if count == 0 then + return + end + set_cursor(player, cursor_ghost.name) + else + local cursor_stack = player.cursor_stack + if not (cursor_stack and cursor_stack.valid_for_read) then return end + if not cursor_stack.prototype.place_result then return end + local cursor_stack_name = cursor_stack.name + if player.clear_cursor() then + player.cursor_ghost = cursor_stack_name + end + end +end +script.on_event("rc-build", remote_build) + +local direction_modifiers = { + ["straight-rail"] = 0, -- 0 means ignore + ["curved-rail"] = 0, + ["rail-signal"] = 0, + ["rail-chain-signal"] = 0, + ["generator"] = 0, + ["burner-generator"] = 0, + ["assembling-machine"] = -1, -- -1 means rotate immediately + ["splitter"] = 4, + ["underground-belt"] = 4, + ["pipe-to-ground"] = 4, + ["pump"] = 4, +} +local function remote_rotate(event, direction) + local player = game.get_player(event.player_index) + if not player.is_cursor_empty() then return end + + local selected = player.selected + if not selected then return end + + if can_reach_entity(player, selected) then return end -- Let vanilla handle this + if not selected.supports_direction then return end + if player.force.is_enemy(selected.force) then + return + end + + local current_direction = selected.get_upgrade_direction() + + if not current_direction then current_direction = selected.direction end + + local direction_modifier = direction_modifiers[selected.type] or 2 + if direction_modifier == 0 then return end + if direction_modifier == -1 then + local next_direction = (current_direction + 2 * direction) % 8 + selected.direction = next_direction + else + local next_direction = (current_direction + direction * direction_modifier) % 8 + if next_direction == selected.direction and selected.get_upgrade_target() and selected.get_upgrade_target().name == selected.name then + selected.cancel_upgrade(player.force, player) + else + selected.order_upgrade{force = player.force, target = selected, player = player, direction = next_direction} + end + end +end +script.on_event("rc-rotate", function(event) remote_rotate(event, 1) end) +script.on_event("rc-reverse-rotate", function(event) remote_rotate(event, -1) end) + +local function remote_deconstruct(event) + local player = game.get_player(event.player_index) + + local selected = player.selected + if not selected then return end + + if player.render_mode == defines.render_mode.game and can_reach_entity(player, selected) then return end -- Let vanilla handle this + if player.force ~= selected.force then + player.create_local_flying_text{text = {"remote-configuration.cant-decon-unowned-structure"}, create_at_cursor = true} + return + end + selected.order_deconstruction(player.force, player) +end +script.on_event("rc-deconstruct", remote_deconstruct) + +local function remote_cancel_deconstruct(event) + local player = game.get_player(event.player_index) + + local selected = player.selected + if not selected then return end + if player.force ~= selected.force then + player.create_local_flying_text{text = {"remote-configuration.cant-cancel-decon-unowned-structure"}, create_at_cursor = true} + return + end + + selected.cancel_deconstruction(player.force, player) +end +script.on_event("rc-cancel-deconstruct", remote_cancel_deconstruct) + +local function create_permission_group(config_changed_data) + local permissions = game.permissions + + if config_changed_data then + -- in on_configuration_changed + if config_changed_data.mod_changes and config_changed_data.mod_changes["RemoteConfiguration"] then + for _, player in pairs(game.players) do + reset_player(player) + player.opened = nil + end + end + if permissions.get_group("Remote Configuration GUI opened") then + permissions.get_group("Remote Configuration GUI opened").destroy() + end + end + if permissions.get_group("Remote Configuration GUI opened") then + return + end + local group = permissions.create_group("Remote Configuration GUI opened") + if not group then + log("Group not created!!!") + game.print("[Remote Configuration] Group not created, please report!") + return + end + group.set_allows_action(defines.input_action.begin_mining, false) + group.set_allows_action(defines.input_action.begin_mining_terrain, false) + group.set_allows_action(defines.input_action.build, false) + group.set_allows_action(defines.input_action.build_rail, false) + group.set_allows_action(defines.input_action.build_terrain, false) + group.set_allows_action(defines.input_action.cursor_split, false) + group.set_allows_action(defines.input_action.cursor_transfer, false) + group.set_allows_action(defines.input_action.fast_entity_split, false) + group.set_allows_action(defines.input_action.fast_entity_transfer, false) + group.set_allows_action(defines.input_action.inventory_split, false) + group.set_allows_action(defines.input_action.inventory_transfer, false) + group.set_allows_action(defines.input_action.place_equipment, false) + group.set_allows_action(defines.input_action.stack_split, false) + group.set_allows_action(defines.input_action.stack_transfer, false) + group.set_allows_action(defines.input_action.take_equipment, false) + group.set_allows_action(defines.input_action.paste_entity_settings, false) +end + +script.on_init(create_permission_group) +script.on_configuration_changed(create_permission_group) + +remote.add_interface("remote-configuration-informatron", { + informatron_menu = function(data) + return {} + end, + informatron_page_content = function(data) + -- data.page_name, data.player_index, data.element + if data.page_name == "remote-configuration-informatron" then + data.element.add{ + type = "label", + caption = {"tips-and-tricks-item-description.rc-introduction"}, + } + end + end +}) diff --git a/RemoteConfiguration/data.lua b/RemoteConfiguration/data.lua new file mode 100644 index 00000000..e1c0226f --- /dev/null +++ b/RemoteConfiguration/data.lua @@ -0,0 +1,76 @@ +data:extend{ + { + type = "custom-input", + name = "rc-open-gui", + localised_name = {"controls.open-gui"}, + key_sequence = "mouse-button-1", + controller_key_sequence = "controller-a", + order = "a", + }, + { + type = "custom-input", + name = "rc-paste-entity-settings", + key_sequence = "", + linked_game_control = "paste-entity-settings", + }, + { + type = "custom-input", + name = "rc-build", + key_sequence = "", + linked_game_control = "build", + }, + { + type = "custom-input", + name = "rc-rotate", + localised_name = {"controls.rotate"}, + key_sequence = "R", + controller_key_sequence = "controller-dpright", + order = "b-a", + }, + { + type = "custom-input", + name = "rc-reverse-rotate", + localised_name = {"controls.reverse-rotate"}, + key_sequence = "SHIFT + R", + controller_key_sequence = "controller-dpleft", + order = "b-b", + }, + { + type = "custom-input", + name = "rc-deconstruct", + localised_name = {"gui-permissions-names.Deconstruct"}, + key_sequence = "mouse-button-2", + controller_key_sequence = "controller-x", + order = "c-a", + }, + { + type = "custom-input", + name = "rc-cancel-deconstruct", + localised_name = {"gui-permissions-names.CancelDeconstruct"}, + key_sequence = "SHIFT + mouse-button-2", + controller_key_sequence = "controller-lefttrigger + controller-x", + order = "c-b", + }, + { + type = "sound", + name = "rc-warning-sound", + filename = "__RemoteConfiguration__/sounds/rc-alert.wav", + category = "game-effect", + volume = 0.3, + }, + { + type = "tips-and-tricks-item-category", + name = "remote-configuration", + order = "l-[rc]", + }, + { + type = "tips-and-tricks-item", + name = "rc-introduction", + category = "remote-configuration", + order = "a", + is_title = true, + trigger = { + type = "build-entity", + }, + }, +} diff --git a/RemoteConfiguration/info.json b/RemoteConfiguration/info.json new file mode 100644 index 00000000..9f82feb0 --- /dev/null +++ b/RemoteConfiguration/info.json @@ -0,0 +1,17 @@ +{ + "name": "RemoteConfiguration", + "version": "1.2.5", + "title": "Remote Configuration", + "author": "Xorimuth", + "homepage": "https://discord.gg/pkJc4v9nfT", + "description": "Allows the player to configure any machine from the map, without allowing item transfer so it maintains the vanilla feel.\nAllows wire placement and entity copy/paste at any distance.\nPress R to issue a rotation request, right-click to mark for deconstruction.\n\nLess cheaty alternative to Far Reach. Similar to Space Exploration's Navigation Satellite, but works entirely within map view.", + "factorio_version": "1.1", + "dependencies": [ + "base", + "? WireShortcutX", + "(?) informatron" + ], + "package": { + "ignore": ["resources/*", "scenarios/*"] + } +} \ No newline at end of file diff --git a/RemoteConfiguration/locale/en/RemoteConfiguration.cfg b/RemoteConfiguration/locale/en/RemoteConfiguration.cfg new file mode 100644 index 00000000..2eed4eab --- /dev/null +++ b/RemoteConfiguration/locale/en/RemoteConfiguration.cfg @@ -0,0 +1,22 @@ +[remote-configuration] +opened-gui-remotely=Opened GUI remotely +cant-decon-unowned-structure=Can't deconstruct unowned structures. +cant-cancel-decon-unowned-structure=Can't cancel deconstruction of unowned structures. + +[mod-setting-name] +rc-interact-in-game=Remote interactions when not in map +rc-ghost-build-in-map=Build ghosts in map without holding __CONTROL_STYLE_BEGIN__Shift__CONTROL_STYLE_END__ + +[mod-setting-description] +rc-interact-in-game=Allows remote interactions at all times, when the selected machine is not in range.\nSee [font=default-semibold]Tips and tricks[/font] for more information. +rc-ghost-build-in-map-cursor-enhancements=Doesn't work if [font=default-semibold]__1__[/font] (from __2__) is enabled. + +[tips-and-tricks-item-name] +rc-introduction=Remote Configuration + +[tips-and-tricks-item-description] +rc-introduction=Adds many new interactions in map view.\n\n__ALT_CONTROL__1__rc-open-gui__ on machines to open their interfaces, but item transfer is prevented.\nWire placement and entity settings copy/paste now work in map view.\n__ALT_CONTROL__1__rc-rotate__ over a machine to create a rotation request for it (or __CONTROL__rc-reverse-rotate__ for reverse rotation). Assembling machines are rotated instantly.\n__ALT_CONTROL__1__rc-deconstruct__ on a machine to mark it for deconstruction. __ALT_CONTROL__1__rc-cancel-deconstruct__ to cancel deconstruction.\n\nBuild ghosts in map view without having to hold shift (optional, can be disabled in mod settings).\n\nVisit [font=default-bold]Settings > Controls[/font] to change keybinds or disable individual interactions.\nVisit [font=default-bold]Settings > Mod settings > Per player[/font] to enable these interactions when not in map mode. + +[remote-configuration-informatron] +menu_remote-configuration-informatron=Remote Configuration +title_remote-configuration-informatron=Remote Configuration diff --git a/RemoteConfiguration/locale/ru/RemoteConfiguration.cfg b/RemoteConfiguration/locale/ru/RemoteConfiguration.cfg new file mode 100644 index 00000000..7720b807 --- /dev/null +++ b/RemoteConfiguration/locale/ru/RemoteConfiguration.cfg @@ -0,0 +1,24 @@ +[remote-configuration] +opened-gui-remotely=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ графичСский интСрфСйс ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ +cant-decon-unowned-structure=НСвозмоТно снСсти Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ строСния. +cant-cancel-decon-unowned-structure=НСвозмоТно ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ снос Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… строСний. + +[mod-setting-name] +rc-interact-in-game=Π£Π΄Π°Π»Π΅Π½Π½ΠΎΠ΅ взаимодСйствиС, ΠΊΠΎΠ³Π΄Π° вас Π½Π΅Ρ‚ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ +rc-ghost-build-in-map=Π Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΏΠ»Π°Π½ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅, Π½Π΅ удСрТивая __CONTROL_STYLE_BEGIN__Shift__CONTROL_STYLE_END__ + +[mod-setting-description] +rc-interact-in-game=Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ взаимодСйствиС Π² любоС врСмя, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ сборочный Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ находится Π²Π½Π΅ Π·ΠΎΠ½Ρ‹ дСйствия.\nДля получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. [font=default-semibold]Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ ΠΈ подсказки[/font]. +rc-ghost-build-in-map-cursor-enhancements=НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ [font=default-semibold]__1__[/font] (ΠΈΠ· ΠΌΠΎΠ΄Π° __2__). + +[tips-and-tricks-item-name] +rc-introduction=УдалСнная настройка + +[tips-and-tricks-item-description] +rc-introduction=ДобавляСт мноТСство Π½ΠΎΠ²Ρ‹Ρ… взаимодСйствий Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра ΠΊΠ°Ρ€Ρ‚Ρ‹.\n\n__ALT_CONTROL__1__rc-open-gui__ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΡ… интСрфСйсы, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π² Π½ΠΈΡ… Π½Π΅ допускаСтся.\nΠ Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΎΠ² ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/вставка настроСк ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра ΠΊΠ°Ρ€Ρ‚Ρ‹.\n__ALT_CONTROL__1__rc-rotate__ Π½Π°Π΄ машиной, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ для Π½Π΅Π΅ запрос Π½Π° Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ __CONTROL__rc-reverse-rotate__ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ вращСния). Π‘Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.\n__ALT_CONTROL__1__rc-deconstruct__ Π½Π° машинС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ для сноса. __ALT_CONTROL__1__rc-cancel-deconstruct__ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ сноса.\n\nΠ Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π½ΠΎΠ² Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра ΠΊΠ°Ρ€Ρ‚Ρ‹ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наТатия Shift (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² настройках ΠΌΠΎΠ΄Π°).\n\nΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² [font=default-bold]Настройки > Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅[/font], Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ привязку клавиш ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ взаимодСйствия.\nΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² [font=default-bold]Настройки > Настройки ΠΌΠΎΠ΄ΠΎΠ² > Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°[/font], Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ эти взаимодСйствия, ΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹. + +[remote-configuration-informatron] +menu_remote-configuration-informatron=УдалСнная настройка +title_remote-configuration-informatron=УдалСнная настройка + + diff --git a/RemoteConfiguration/locale/uk/RemoteConfiguration.cfg b/RemoteConfiguration/locale/uk/RemoteConfiguration.cfg new file mode 100644 index 00000000..f09e16ff --- /dev/null +++ b/RemoteConfiguration/locale/uk/RemoteConfiguration.cfg @@ -0,0 +1,24 @@ +[remote-configuration] +opened-gui-remotely=Π’Ρ–Π΄Π΄Π°Π»Π΅Π½Π΅ відкриття GUI +cant-decon-unowned-structure=НС ΠΌΠΎΠΆΠ½Π° Π΄Π΅ΠΌΠΎΠ½Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ Π½Ρ–Ρ‡ΠΈΠΉΠ½Ρ– споруди. +cant-cancel-decon-unowned-structure=НС ΠΌΠΎΠΆΠ½Π° скасувати Π΄Π΅ΠΌΠΎΠ½Ρ‚Π°ΠΆ Π½Ρ–Ρ‡ΠΈΠΉΠ½ΠΈΡ… споруд. + +[mod-setting-name] +rc-interact-in-game=Π’Ρ–Π΄Π΄Π°Π»Π΅Π½Π° взаємодія Π·Π° ΠΌΠ΅ΠΆΠ°ΠΌΠΈ ΠΌΠ°ΠΏΠΈ +rc-ghost-build-in-map=Π‘Ρ‚Π²ΠΎΡ€ΡŽΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ΄Ρ–Π² Π½Π° ΠΊΠ°Ρ€Ρ‚Ρ– Π±Π΅Π· утримання__CONTROL_STYLE_BEGIN__Shift__CONTROL_STYLE_END__ + +[mod-setting-description] +rc-interact-in-game=Дозволяє Π²Ρ–Π΄Π΄Π°Π»Π΅Π½ΠΎ взаємодіяти Π² Π±ΡƒΠ΄ΡŒ-який час, ΠΊΠΎΠ»ΠΈ Π²ΠΈΠ±Ρ€Π°Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏ'ΡŽΡ‚Π΅Ρ€ Π·Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ·Π° зоною досяТності.\nДля отримання Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΎΡ— Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ— Π΄ΠΈΠ². [font=default-semibold]ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚Π° ΠΏΡ–Π΄ΠΊΠ°Π·ΠΊΠΈ[/font]. +rc-ghost-build-in-map-cursor-enhancements=НС ΠΏΡ€Π°Ρ†ΡŽΡ”, якщо ΡƒΠ²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎ [font=default-semibold]__1__[/font] (Π· __2__). + +[tips-and-tricks-item-name] +rc-introduction=Π’Ρ–Π΄Π΄Π°Π»Π΅Π½Π° конфігурація + +[tips-and-tricks-item-description] +rc-introduction=Π”ΠΎΠ΄Π°Π½ΠΎ Π±Π°Π³Π°Ρ‚ΠΎ Π½ΠΎΠ²ΠΈΡ… Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–ΠΉ Ρƒ Π²Ρ–ΠΊΠ½Ρ– ΠΌΠ°ΠΏΠΈ.\n\n__ALT_CONTROL__1__rc-open-gui__ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Ρ‰ΠΎΠ± Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Ρ—Ρ… інтСрфСйси, Π°Π»Π΅ пСрСнСсСння ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Π·Π°Π±ΠΎΡ€ΠΎΠ½Π΅Π½ΠΎ.\nРозміщСння Π΄Ρ€ΠΎΡ‚Ρ–Π² Ρ– ΠΊΠΎΠΏΡ–ΡŽΠ²Π°Π½Π½Ρ/вставка Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρ‚Π΅ΠΏΠ΅Ρ€ ΠΏΡ€Π°Ρ†ΡŽΡŽΡ‚ΡŒ Ρƒ Π²Ρ–ΠΊΠ½Ρ– ΠΌΠ°ΠΏΠΈ.\n__ALT_CONTROL__1__rc-rotate__ Π½Π°Π΄ машиною, Ρ‰ΠΎΠ± створити для Π½Π΅Ρ— Π·Π°ΠΏΠΈΡ‚ Π½Π° обСртання (Π°Π±ΠΎ __CONTROL__rc-reverse-rotate__ для Π·Π²ΠΎΡ€ΠΎΡ‚Π½ΠΎΠ³ΠΎ обСртання). Π‘ΠΊΠ»Π°Π΄Π°Π»ΡŒΠ½Ρ– машини ΠΎΠ±Π΅Ρ€Ρ‚Π°ΡŽΡ‚ΡŒΡΡ ΠΌΠΈΡ‚Ρ‚Ρ”Π²ΠΎ.\n__ALT_CONTROL__1__rc-deconstruct__ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Ρ–, Ρ‰ΠΎΠ± ΠΏΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ—Ρ— для дСконструкції. __ALT_CONTROL__1__rc-cancel-deconstruct__, Ρ‰ΠΎΠ± скасувати Π΄Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†Ρ–ΡŽ.\n\nΠ‘ΡƒΠ΄ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ΄Ρ–Π² Ρƒ Π²Ρ–ΠΊΠ½Ρ– ΠΌΠ°ΠΏΠΈ, Π½Π΅ ΡƒΡ‚Ρ€ΠΈΠΌΡƒΡŽΡ‡ΠΈ ΠΊΠ»Π°Π²Ρ–ΡˆΡƒ Shift (Π½Π΅ΠΎΠ±ΠΎΠ²'язково, ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΌΠΊΠ½ΡƒΡ‚ΠΈ Ρƒ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½ΡΡ… ΠΌΠΎΠ΄Π°).\n\nΠ’Ρ–Π΄Π²Ρ–Π΄Π°ΠΉΡ‚Π΅ [font=default-bold]ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ > Π•Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ кСрування[/font], Ρ‰ΠΎΠ± Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ сполучСння ΠΊΠ»Π°Π²Ρ–Ρˆ Π°Π±ΠΎ Π²ΠΈΠΌΠΊΠ½ΡƒΡ‚ΠΈ ΠΎΠΊΡ€Π΅ΠΌΡ– Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–Ρ—.\n\nΠ’Ρ–Π΄Π²Ρ–Π΄Π°ΠΉΡ‚Π΅ [font=default-bold]ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ > ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ ΠΌΠΎΠ΄Π° > На гравця[/font], Ρ‰ΠΎΠ± ΡƒΠ²Ρ–ΠΌΠΊΠ½ΡƒΡ‚ΠΈ Ρ†Ρ– Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–Ρ—, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Π½Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΡ– ΠΌΠ°ΠΏΠΈ. + +[remote-configuration-informatron] +menu_remote-configuration-informatron=Π’Ρ–Π΄Π΄Π°Π»Π΅Π½Π° конфігурація +title_remote-configuration-informatron=Π’Ρ–Π΄Π΄Π°Π»Π΅Π½Π° конфігурація + + diff --git a/RemoteConfiguration/locale/zh-CN/RemoteConfiguration.cfg b/RemoteConfiguration/locale/zh-CN/RemoteConfiguration.cfg new file mode 100644 index 00000000..0c887fd0 --- /dev/null +++ b/RemoteConfiguration/locale/zh-CN/RemoteConfiguration.cfg @@ -0,0 +1,24 @@ +[remote-configuration] +opened-gui-remotely=θΏœη¨‹εΌ€ε―ηͺ—口 +cant-decon-unowned-structure=δΈθƒ½θ§£ζž„ιžθ‡ͺε·±ζ‰€ζœ‰ηš„ζž„ι€ γ€‚ +cant-cancel-decon-unowned-structure=δΈθƒ½ε–ζΆˆθ§£ζž„ιžθ‡ͺε·±ζ‰€ζœ‰ηš„ζž„ι€ γ€‚ + +[mod-setting-name] +rc-interact-in-game=ιžεœ°ε›Ύζ¨‘εΌζ—ΆθΏœη¨‹δΊ€δΊ’ +rc-ghost-build-in-map=εœ°ε›Ύζ¨‘εΌζ—Άζž„ε»ΊεΉ½η΅θ€ŒιžζŒζœ‰__CONTROL_STYLE_BEGIN__Shift__CONTROL_STYLE_END__ + +[mod-setting-description] +rc-interact-in-game=ε½“ζ‰€ι€‰ζœΊε™¨δΈεœ¨θŒƒε›΄ε†…ζ—ΆοΌŒε…θΈιšζ—ΆθΏœη¨‹δΊ€δΊ’。\nζ›΄ε€šθ―¦ζƒ…οΌŒθ―·ε‚ι˜…[font=default-semibold]ζη€Ίε’ŒζŠ€ε·§[/font]。 +rc-ghost-build-in-map-cursor-enhancements=θ‹₯启用了[font=default-semibold]__1__[/font](ζ₯θ‡ͺγ€Œ__2__γ€οΌ‰εˆ™δΈη”Ÿζ•ˆγ€‚ + +[tips-and-tricks-item-name] +rc-introduction=θΏœη¨‹δΊ€δΊ’ + +[tips-and-tricks-item-description] +rc-introduction=εœ¨εœ°ε›Ύθ§†ε›ΎδΈ­ζ·»εŠ θΈε€šζ–°δΊ€δΊ’。\n\n__ALT_CONTROL__1__rc-open-gui__εœ¨ζœΊε™¨δΈŠζ‰“εΌ€ε…Άη•Œι’οΌŒδ½†δΈε…θΈη‰©ε“θ½¬η§»γ€‚\nη”΅ηΊΏζ”Ύη½ε’Œεžδ½“θΎη½ε€εˆΆη²˜θ΄΄ηŽ°εœ¨ε―εœ¨εœ°ε›Ύθ§†ε›ΎδΈ­δ½Ώη”¨γ€‚\n__ALT_CONTROL__1__rc-rotate__εœ¨ζœΊε™¨δΈŠζ—‹θ½¬οΌˆζˆ–θ€…__CONTROL__rc-reverse-rotate__εε‘ζ—‹θ½¬οΌ‰οΌŒ η»„θ£…ζœΊε°†ηž¬ι—΄ζ—‹θ½¬γ€‚\n__ALT_CONTROL__1__rc-deconstruct__εœ¨ζœΊε™¨δΈŠζ ‡θ°θΏ›θ‘Œθ§£ζž„。 __ALT_CONTROL__1__rc-cancel-deconstruct__ε–ζΆˆθ§£ζž„γ€‚\n\nεœ¨εœ°ε›Ύθ§†ε›ΎδΈ­ζ”Ύη½εΉ½η΅οΌŒθ€Œζ— ιœ€ζŒ‰δ½shiftοΌˆε―ι€‰οΌŒε―εœ¨ζ¨‘η»„θΎη½δΈ­η¦η”¨οΌ‰γ€‚\n\nζŸ₯ηœ‹[font=default-bold]θΎη½>ζŒ‰ι”[/font]δ»₯更改快捷ι”ζˆ–η¦η”¨ζŸδΈͺ亀互。\n在ζœͺε€„δΊŽεœ°ε›Ύζ¨‘εΌζ—ΆζŸ₯ηœ‹[font=default-bold]θΎη½>樑组θΎη½>δΈͺζ€§θΎη½[/font]启用这些亀互。 + +[remote-configuration-informatron] +menu_remote-configuration-informatron=θΏœη¨‹δΊ€δΊ’ +title_remote-configuration-informatron=θΏœη¨‹δΊ€δΊ’ + + diff --git a/RemoteConfiguration/recipe-change.lua b/RemoteConfiguration/recipe-change.lua new file mode 100644 index 00000000..f496111a --- /dev/null +++ b/RemoteConfiguration/recipe-change.lua @@ -0,0 +1,174 @@ +local RecipeChange = {} + +local function add_contents(contents1, contents2) + for name, count in pairs(contents2) do + if contents1[name] then + contents1[name] = contents1[name] + count + else + contents1[name] = count + end + end +end + +local function get_inventory_contents(entity, inventory_defines) + local inventory = entity.get_inventory(inventory_defines) + if inventory then + return inventory.get_contents() + else + return {} + end +end + +local function get_machine_contents(entity) + local contents = {} + add_contents(contents, get_inventory_contents(entity, defines.inventory.assembling_machine_input)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.assembling_machine_output)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.assembling_machine_modules)) + + -- Also add internal items currently being used to craft + if entity.crafting_progress > 0 then + local recipe = entity.get_recipe() + if recipe then + for _, ingredient in pairs(recipe.ingredients) do + if ingredient.type == "item" then + add_contents(contents, {[ingredient.name] = ingredient.amount}) + end + end + end + end + return contents +end + +local function get_player_contents(entity) + local contents = {} + add_contents(contents, get_inventory_contents(entity, defines.inventory.character_main)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.character_guns)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.character_ammo)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.character_armor)) + add_contents(contents, get_inventory_contents(entity, defines.inventory.character_trash)) + return contents +end + +local function diff_contents(old_contents, new_contents) + local diff = {} + for name, count in pairs(old_contents) do + if new_contents[name] then + if new_contents[name] ~= count and (new_contents[name] - count ~= 0) then + diff[name] = new_contents[name] - count + end + else + diff[name] = -count + end + end + for name, count in pairs(new_contents) do + if not old_contents[name] then + diff[name] = count + end + end + return diff +end + +local function ensure_positive(diff) + for name, count in pairs(diff) do + if count <= 0 then + diff[name] = nil + end + end + return diff +end + +function RecipeChange.on_remote_gui_opened(player) + local entity = player.opened + if entity.type == "assembling-machine" then + local recipe = entity.get_recipe() or {name = "rc-no-recipe"} + if recipe then + global[player.index] = { + player = player, + recipe = recipe.name, + entity = entity, + player_contents = get_player_contents(player), + entity_contents = get_machine_contents(entity), + } + end + end +end + +function RecipeChange.on_gui_closed(player) + global[player.index] = nil +end + +local function on_recipe_changed(player_data) + local entity = player_data.entity + local entity_diff = ensure_positive(diff_contents(get_machine_contents(entity), player_data.entity_contents)) + if table_size(entity_diff) == 0 then return end + + -- Entity contents changed + local player_diff = diff_contents(player_data.player_contents, get_player_contents(player_data.player)) + + -- Positive count in entity_diff means items were lost + -- Positive count in player_diff means items were gained + -- We need to find the subset of items lost in entity_diff that were gained in player_diff + + local surface = entity.surface + local position = entity.position + local player = player_data.player + local force = player.force + for name, count in pairs(entity_diff) do + if player_diff[name] then + local to_spill = math.min(count, player_diff[name]) + --game.print(game.tick .. " Trying to spill " .. to_spill .. " " .. name) + local removed = player.remove_item({name = name, count = to_spill}) -- Handles main, ammo, cursor + to_spill = to_spill - removed + if to_spill > 0 then + -- Handle guns, armor, trash + removed = player.get_inventory(defines.inventory.character_trash).remove({name = name, count = to_spill}) + to_spill = to_spill - removed + if to_spill > 0 then + removed = player.get_inventory(defines.inventory.character_armor).remove({name = name, count = to_spill}) + to_spill = to_spill - removed + if to_spill > 0 then + removed = player.get_inventory(defines.inventory.character_guns).remove({name = name, count = to_spill}) + to_spill = to_spill - removed + end + end + end + if removed > 0 then + --game.print(game.tick .. " Spilling " .. removed .. " " .. name) + surface.spill_item_stack( + position, + {name = name, count = removed}, + true, -- enabled_looted + force, -- force for deconstruction + false -- allow_on_belts + ) + end + end + end +end + +local function process_player(player_data) + local entity = player_data.entity + if not entity.valid then return end + local recipe = entity.get_recipe() or {name = "rc-no-recipe"} + if recipe.name ~= player_data.recipe then + on_recipe_changed(player_data) + player_data.recipe = recipe.name + --game.print(game.tick .. " Recipe changed to " .. recipe.name) + end + -- Update stored info + player_data.player_contents = get_player_contents(player_data.player) + player_data.entity_contents = get_machine_contents(player_data.entity) +end + +script.on_event(defines.events.on_tick, + function(event) + global.my_data = true + for _, player_data in pairs(global) do + if type(player_data) == "table" and player_data.player then + process_player(player_data) + end + end + end +) + +return RecipeChange \ No newline at end of file diff --git a/RemoteConfiguration/settings.lua b/RemoteConfiguration/settings.lua new file mode 100644 index 00000000..45496eea --- /dev/null +++ b/RemoteConfiguration/settings.lua @@ -0,0 +1,20 @@ +data:extend{ + { + type = "bool-setting", + name = "rc-interact-in-game", + setting_type = "runtime-per-user", + default_value = false, + order = "a", + }, + { + type = "bool-setting", + name = "rc-ghost-build-in-map", + setting_type = "runtime-per-user", + default_value = true, + order = "b", + }, +} + +if mods["CursorEnhancements"] then + data.raw["bool-setting"]["rc-ghost-build-in-map"].localised_description = {"mod-setting-description.rc-ghost-build-in-map-cursor-enhancements", {"mod-setting-name.cen-auto-ghost-cursor"}, {"mod-name.CursorEnhancements"}} +end \ No newline at end of file diff --git a/RemoteConfiguration/sounds/rc-alert.wav b/RemoteConfiguration/sounds/rc-alert.wav new file mode 100644 index 00000000..c1d9e39a Binary files /dev/null and b/RemoteConfiguration/sounds/rc-alert.wav differ diff --git a/RemoteConfiguration/thumbnail.png b/RemoteConfiguration/thumbnail.png new file mode 100644 index 00000000..63b0faa7 Binary files /dev/null and b/RemoteConfiguration/thumbnail.png differ diff --git a/Renamer_2.1.7/changelog.txt b/Renamer/changelog.txt similarity index 100% rename from Renamer_2.1.7/changelog.txt rename to Renamer/changelog.txt diff --git a/Renamer_2.1.7/control.lua b/Renamer/control.lua similarity index 100% rename from Renamer_2.1.7/control.lua rename to Renamer/control.lua diff --git a/Renamer_2.1.7/data.lua b/Renamer/data.lua similarity index 100% rename from Renamer_2.1.7/data.lua rename to Renamer/data.lua diff --git a/Renamer_2.1.7/graphics/black-check.png b/Renamer/graphics/black-check.png similarity index 100% rename from Renamer_2.1.7/graphics/black-check.png rename to Renamer/graphics/black-check.png diff --git a/Renamer_2.1.7/graphics/black-cross.png b/Renamer/graphics/black-cross.png similarity index 100% rename from Renamer_2.1.7/graphics/black-cross.png rename to Renamer/graphics/black-cross.png diff --git a/Renamer_2.1.7/info.json b/Renamer/info.json similarity index 100% rename from Renamer_2.1.7/info.json rename to Renamer/info.json diff --git a/Renamer_2.1.7/locale/en/locale.cfg b/Renamer/locale/en/locale.cfg similarity index 100% rename from Renamer_2.1.7/locale/en/locale.cfg rename to Renamer/locale/en/locale.cfg diff --git a/Renamer_2.1.7/thumbnail.png b/Renamer/thumbnail.png similarity index 100% rename from Renamer_2.1.7/thumbnail.png rename to Renamer/thumbnail.png diff --git a/Robot256Lib/LICENSE b/Robot256Lib/LICENSE new file mode 100644 index 00000000..85e0142a --- /dev/null +++ b/Robot256Lib/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Tom + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Robot256Lib/changelog.txt b/Robot256Lib/changelog.txt new file mode 100644 index 00000000..f311e8ff --- /dev/null +++ b/Robot256Lib/changelog.txt @@ -0,0 +1,109 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2024-01-06 + Changes: + - Prevent unnecessary on_entity_color_changed events when replacing trains with no color set. +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2022-01-23 + Bugfixes: + - Fix item duplication when pipetting Vehicle Wagons in Space Exploration remote view mode. +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2022-01-23 + Bugfixes: + - Fix pipette mapping behavior when "Pick ghost item if no items are available" option is enabled. +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2020-12-05 + Bugfixes: + - Carriage replacement restores artillery wagon "damage dealt" statistic. +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2020-12-03 + Bugfixes: + - Carriage replacement restores any open player GUIs with the new entity, since deleting the old one closes the GUI. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020-11-23 + Changes: + - Updated empty book/upgrade/deconstruction item strings in save_restore/spillStack function. (This probably would not have worked in 1.0 either.) +--------------------------------------------------------------------------------------------------- +Version: 0.18.8 +Date: 2020-09-15 + Bugfixes: + - Prevent saving item-request-proxy with empty contents, to fix crash when restoring item-request-proxy with empty contents. +--------------------------------------------------------------------------------------------------- +Version: 0.18.7 +Date: 2020-07-09 + Bugfixes: + - Fixed errors when saving and restoring cargo inventory filters and bars. +--------------------------------------------------------------------------------------------------- +Version: 0.18.6 +Date: 2020-05-29 + Bugfixes: + - Update for Factorio 0.18.27. + - Removed any attempt to generate on_player_placed_equipment event. +--------------------------------------------------------------------------------------------------- +Version: 0.18.5 +Date: 2020-05-28 + Bugfixes: + - Empty or invalid inventories return nil instead of empty arrays. + - Preserve flags on carriage replacement: minable, destructible, operable, rotatable, enable_logistics_while_moving. +--------------------------------------------------------------------------------------------------- +Version: 0.18.4 +Date: 2020-05-26 + Bugfixes: + - Should be the last accidental global reference. +--------------------------------------------------------------------------------------------------- +Version: 0.18.3 +Date: 2020-05-23 + Bugfixes: + - Fixed even more accidental global references. +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 2020-05-23 + Bugfixes: + - Fixed some accidental global references and dangling variables. +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: 2020-01-23 + Changes: + - Update for Factorio 0.18. +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2020-01-23 + Features: + - Added parameter to replaceCarriage to flip the orientation of the wagon during replacement. + - Added support to replaceCarriage for copying cargo wagon filters and inventory. + - Added support for saving and restoring arbitrary LuaInventory objects. + - Added support for saving and restoring Blueprints, Blueprint Books, Deconstruction Planners, and Upgrade Planners stored in inventories. + - Added support for saving items with equipment grids, like Modular Armor. Contents of grid is saved alongside the armor (script can't add grid to LuaItemStack that doesn't already have one). + - Added basic functions to make event filter lists for a given set of entity names (work in progress). + Scripting: + - mergeStackLists(stack1,stack2): Consolidates items in stack2 into stack1, returns stack1. + - itemsToStacks(items): Converts item list stored in name:count dictionary format into StackList. + - saveInventoryStacks(source): Replaces saveInventory. Returns StackList. + - insertStack(target, stack, stack_limit): Attempts to insert _stack_ into LuaInventory _target_. Returns SimpleItemStack with any items that could not be inserted. + - spillStack(stack, surface, position): Spills the items in _stack_ onto _surface_ at _position_. + - spillStacks(stacks, surface, position): Spills the given list of stacks. + - insertInventoryStacks(target, stacks): Attempts to insert _stacks_ into LuaInventory _target_. Returns StackList with any items that could not be inserted. + - removeStackFromSavedGrid(savedGrid, stack): Attempts to subtrack _stack_ from a grid contents structure created by saveGrid. + - saveGridStacks(savedGrid): Converts a saved grid structure into StackList so that it can be disassembled and added to inventories. + - saveFilters(source): Saves all the slot item filters and sizing bar in LuaInventory _source_. + - restoreFilters(target, filters): Sets filters and sizing bar in LuaInventory _target_ according to saved _filters_ structure. + - generateNameFilter(): Returns a list of filter entries for every string in the argument(s) in the form {filter="name", name=, mode="or"}. + - generateGhostFilter(): Returns a list of filter entries for every string in the argument(s) in the form {filter="ghost_name", name=, mode="or"}. + Changes: + - Changed all inventory manipulation to use arrays of SimpleItemStack structures ("StackList" structure). + - Added input null checking on all functions. If target is null, "insert" functions return the entire argument as remainders. + - saveBurner, restoreBurner: Uses saveInventoryStacks and insertInventoryStacks to handle fuel inventories. + - restoreGrid, restoreBurner: Returns list of any fuel and equipment that could not be inserted. +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2019-12-29 + Scripting: + - function replaceCarriage: sneakily swaps any rolling stock entity with another entity of the same type. + - function saveGrid, restoreGrid, saveBurner, restoreBurner: used transfer equipment grids between entities. + - function saveItemRequestProxy: checks for the Item Request Proxy associated with the given entity (fuel, ammo, or module insertion request) and saves it in a format that can be easily recreated on the new entity. + - function mapBlueprint, mapPipette: checks player cursor, cut/copy blueprint, or blueprint item and swaps entity names per the given map. Useful to prevent non-craftable items from being created or requested. diff --git a/Robot256Lib/info.json b/Robot256Lib/info.json new file mode 100644 index 00000000..ecc80a5a --- /dev/null +++ b/Robot256Lib/info.json @@ -0,0 +1,11 @@ +{ + "name": "Robot256Lib", + "version": "1.1.5", + "title": "Robot256's Library", + "author": "robot256", + "contact": "", + "homepage": "https://github.com/robot256/Robot256Lib", + "description": "Utilities used in many of my mods bundled into one package.", + "factorio_version": "1.1", + "dependencies": ["base >= 1.1.0"] +} diff --git a/Robot256Lib_1.1.4/script/blueprint_replacement.lua b/Robot256Lib/script/blueprint_replacement.lua similarity index 100% rename from Robot256Lib_1.1.4/script/blueprint_replacement.lua rename to Robot256Lib/script/blueprint_replacement.lua diff --git a/Robot256Lib_1.1.4/script/carriage_replacement.lua b/Robot256Lib/script/carriage_replacement.lua similarity index 99% rename from Robot256Lib_1.1.4/script/carriage_replacement.lua rename to Robot256Lib/script/carriage_replacement.lua index d13e6030..9752a812 100644 --- a/Robot256Lib_1.1.4/script/carriage_replacement.lua +++ b/Robot256Lib/script/carriage_replacement.lua @@ -154,7 +154,7 @@ local function replaceCarriage(carriage, newName, raiseBuilt, raiseDestroy, flip -- Restore parameters newCarriage.health = health - newCarriage.color = color + if color then newCarriage.color = color end if backer_name then newCarriage.backer_name = backer_name end if last_user then newCarriage.last_user = last_user end if kills then newCarriage.kills = kills end diff --git a/Robot256Lib_1.1.4/script/event_filters.lua b/Robot256Lib/script/event_filters.lua similarity index 100% rename from Robot256Lib_1.1.4/script/event_filters.lua rename to Robot256Lib/script/event_filters.lua diff --git a/Robot256Lib_1.1.4/script/save_restore.lua b/Robot256Lib/script/save_restore.lua similarity index 100% rename from Robot256Lib_1.1.4/script/save_restore.lua rename to Robot256Lib/script/save_restore.lua diff --git a/Robot256Lib_1.1.4/changelog.txt b/Robot256Lib_1.1.4/changelog.txt deleted file mode 100644 index adc0f598..00000000 --- a/Robot256Lib_1.1.4/changelog.txt +++ /dev/null @@ -1,104 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 2022-01-23 - Bugfixes: - - Fix item duplication when pipetting Vehicle Wagons in Space Exploration remote view mode. ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2022-01-23 - Bugfixes: - - Fix pipette mapping behavior when "Pick ghost item if no items are available" option is enabled. ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2020-12-05 - Bugfixes: - - Carriage replacement restores artillery wagon "damage dealt" statistic. ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2020-12-03 - Bugfixes: - - Carriage replacement restores any open player GUIs with the new entity, since deleting the old one closes the GUI. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2020-11-23 - Changes: - - Updated empty book/upgrade/deconstruction item strings in save_restore/spillStack function. (This probably would not have worked in 1.0 either.) ---------------------------------------------------------------------------------------------------- -Version: 0.18.8 -Date: 2020-09-15 - Bugfixes: - - Prevent saving item-request-proxy with empty contents, to fix crash when restoring item-request-proxy with empty contents. ---------------------------------------------------------------------------------------------------- -Version: 0.18.7 -Date: 2020-07-09 - Bugfixes: - - Fixed errors when saving and restoring cargo inventory filters and bars. ---------------------------------------------------------------------------------------------------- -Version: 0.18.6 -Date: 2020-05-29 - Bugfixes: - - Update for Factorio 0.18.27. - - Removed any attempt to generate on_player_placed_equipment event. ---------------------------------------------------------------------------------------------------- -Version: 0.18.5 -Date: 2020-05-28 - Bugfixes: - - Empty or invalid inventories return nil instead of empty arrays. - - Preserve flags on carriage replacement: minable, destructible, operable, rotatable, enable_logistics_while_moving. ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 2020-05-26 - Bugfixes: - - Should be the last accidental global reference. ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 2020-05-23 - Bugfixes: - - Fixed even more accidental global references. ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 -Date: 2020-05-23 - Bugfixes: - - Fixed some accidental global references and dangling variables. ---------------------------------------------------------------------------------------------------- -Version: 0.2.0 -Date: 2020-01-23 - Changes: - - Update for Factorio 0.18. ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: 2020-01-23 - Features: - - Added parameter to replaceCarriage to flip the orientation of the wagon during replacement. - - Added support to replaceCarriage for copying cargo wagon filters and inventory. - - Added support for saving and restoring arbitrary LuaInventory objects. - - Added support for saving and restoring Blueprints, Blueprint Books, Deconstruction Planners, and Upgrade Planners stored in inventories. - - Added support for saving items with equipment grids, like Modular Armor. Contents of grid is saved alongside the armor (script can't add grid to LuaItemStack that doesn't already have one). - - Added basic functions to make event filter lists for a given set of entity names (work in progress). - Scripting: - - mergeStackLists(stack1,stack2): Consolidates items in stack2 into stack1, returns stack1. - - itemsToStacks(items): Converts item list stored in name:count dictionary format into StackList. - - saveInventoryStacks(source): Replaces saveInventory. Returns StackList. - - insertStack(target, stack, stack_limit): Attempts to insert _stack_ into LuaInventory _target_. Returns SimpleItemStack with any items that could not be inserted. - - spillStack(stack, surface, position): Spills the items in _stack_ onto _surface_ at _position_. - - spillStacks(stacks, surface, position): Spills the given list of stacks. - - insertInventoryStacks(target, stacks): Attempts to insert _stacks_ into LuaInventory _target_. Returns StackList with any items that could not be inserted. - - removeStackFromSavedGrid(savedGrid, stack): Attempts to subtrack _stack_ from a grid contents structure created by saveGrid. - - saveGridStacks(savedGrid): Converts a saved grid structure into StackList so that it can be disassembled and added to inventories. - - saveFilters(source): Saves all the slot item filters and sizing bar in LuaInventory _source_. - - restoreFilters(target, filters): Sets filters and sizing bar in LuaInventory _target_ according to saved _filters_ structure. - - generateNameFilter(): Returns a list of filter entries for every string in the argument(s) in the form {filter="name", name=, mode="or"}. - - generateGhostFilter(): Returns a list of filter entries for every string in the argument(s) in the form {filter="ghost_name", name=, mode="or"}. - Changes: - - Changed all inventory manipulation to use arrays of SimpleItemStack structures ("StackList" structure). - - Added input null checking on all functions. If target is null, "insert" functions return the entire argument as remainders. - - saveBurner, restoreBurner: Uses saveInventoryStacks and insertInventoryStacks to handle fuel inventories. - - restoreGrid, restoreBurner: Returns list of any fuel and equipment that could not be inserted. ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 -Date: 2019-12-29 - Scripting: - - function replaceCarriage: sneakily swaps any rolling stock entity with another entity of the same type. - - function saveGrid, restoreGrid, saveBurner, restoreBurner: used transfer equipment grids between entities. - - function saveItemRequestProxy: checks for the Item Request Proxy associated with the given entity (fuel, ammo, or module insertion request) and saves it in a format that can be easily recreated on the new entity. - - function mapBlueprint, mapPipette: checks player cursor, cut/copy blueprint, or blueprint item and swaps entity names per the given map. Useful to prevent non-craftable items from being created or requested. diff --git a/Robot256Lib_1.1.4/info.json b/Robot256Lib_1.1.4/info.json deleted file mode 100644 index c0d02ed0..00000000 --- a/Robot256Lib_1.1.4/info.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "Robot256Lib", - "version": "1.1.4", - "title": "Robot256's Library", - "author": "robot256", - "contact": "", - "homepage": "https://github.com/robot256/Robot256Lib", - "description": "Utilities used in many of my mods bundled into one package.", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.0"] -} diff --git a/Rocket-Silo-Construction_1.3.1/changelog.txt b/Rocket-Silo-Construction/changelog.txt similarity index 100% rename from Rocket-Silo-Construction_1.3.1/changelog.txt rename to Rocket-Silo-Construction/changelog.txt diff --git a/Rocket-Silo-Construction_1.3.1/control.lua b/Rocket-Silo-Construction/control.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/control.lua rename to Rocket-Silo-Construction/control.lua diff --git a/Rocket-Silo-Construction_1.3.1/data-final-fixes.lua b/Rocket-Silo-Construction/data-final-fixes.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/data-final-fixes.lua rename to Rocket-Silo-Construction/data-final-fixes.lua diff --git a/Rocket-Silo-Construction_1.3.1/data.lua b/Rocket-Silo-Construction/data.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/data.lua rename to Rocket-Silo-Construction/data.lua diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage1.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage1.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage1.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage1.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2-serlp.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage2-serlp.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2-serlp.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage2-serlp.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage2.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage2.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2_remnant.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage2_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage2_remnant.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage2_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage3.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage3.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage3.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage3.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage3_remnant.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage3_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage3_remnant.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage3_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage4.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage4.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage4.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage4.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage4_remnant.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage4_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage4_remnant.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage4_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage5.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage5.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage5.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage5.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage5_shadow.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage5_shadow.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage5_shadow.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage5_shadow.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage6.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage6.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage6.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage6.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage6_shadow.png b/Rocket-Silo-Construction/graphics/entity/hr-rs-stage6_shadow.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/hr-rs-stage6_shadow.png rename to Rocket-Silo-Construction/graphics/entity/hr-rs-stage6_shadow.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage1.png b/Rocket-Silo-Construction/graphics/entity/rs-stage1.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage1.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage1.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2-serlp.png b/Rocket-Silo-Construction/graphics/entity/rs-stage2-serlp.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2-serlp.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage2-serlp.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2.png b/Rocket-Silo-Construction/graphics/entity/rs-stage2.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage2.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2_remnant.png b/Rocket-Silo-Construction/graphics/entity/rs-stage2_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage2_remnant.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage2_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage3.png b/Rocket-Silo-Construction/graphics/entity/rs-stage3.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage3.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage3.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage3_remnant.png b/Rocket-Silo-Construction/graphics/entity/rs-stage3_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage3_remnant.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage3_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage4.png b/Rocket-Silo-Construction/graphics/entity/rs-stage4.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage4.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage4.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage4_remnant.png b/Rocket-Silo-Construction/graphics/entity/rs-stage4_remnant.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage4_remnant.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage4_remnant.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage5.png b/Rocket-Silo-Construction/graphics/entity/rs-stage5.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage5.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage5.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage5_shadow.png b/Rocket-Silo-Construction/graphics/entity/rs-stage5_shadow.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage5_shadow.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage5_shadow.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage6.png b/Rocket-Silo-Construction/graphics/entity/rs-stage6.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage6.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage6.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage6_shadow.png b/Rocket-Silo-Construction/graphics/entity/rs-stage6_shadow.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/entity/rs-stage6_shadow.png rename to Rocket-Silo-Construction/graphics/entity/rs-stage6_shadow.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/rocket_silo_construction.png b/Rocket-Silo-Construction/graphics/icon/rocket_silo_construction.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/rocket_silo_construction.png rename to Rocket-Silo-Construction/graphics/icon/rocket_silo_construction.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/se-rocket-launch-pad.png b/Rocket-Silo-Construction/graphics/icon/se-rocket-launch-pad.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/se-rocket-launch-pad.png rename to Rocket-Silo-Construction/graphics/icon/se-rocket-launch-pad.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/se-space-probe-rocket-silo.png b/Rocket-Silo-Construction/graphics/icon/se-space-probe-rocket-silo.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/se-space-probe-rocket-silo.png rename to Rocket-Silo-Construction/graphics/icon/se-space-probe-rocket-silo.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage1.png b/Rocket-Silo-Construction/graphics/icon/stage1.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage1.png rename to Rocket-Silo-Construction/graphics/icon/stage1.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage2.png b/Rocket-Silo-Construction/graphics/icon/stage2.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage2.png rename to Rocket-Silo-Construction/graphics/icon/stage2.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage3.png b/Rocket-Silo-Construction/graphics/icon/stage3.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage3.png rename to Rocket-Silo-Construction/graphics/icon/stage3.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage4.png b/Rocket-Silo-Construction/graphics/icon/stage4.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage4.png rename to Rocket-Silo-Construction/graphics/icon/stage4.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage5.png b/Rocket-Silo-Construction/graphics/icon/stage5.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage5.png rename to Rocket-Silo-Construction/graphics/icon/stage5.png diff --git a/Rocket-Silo-Construction_1.3.1/graphics/icon/stage6.png b/Rocket-Silo-Construction/graphics/icon/stage6.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/graphics/icon/stage6.png rename to Rocket-Silo-Construction/graphics/icon/stage6.png diff --git a/Rocket-Silo-Construction/info.json b/Rocket-Silo-Construction/info.json new file mode 100644 index 00000000..1a736046 --- /dev/null +++ b/Rocket-Silo-Construction/info.json @@ -0,0 +1,11 @@ +{ + "name":"Rocket-Silo-Construction", + "author":"MFerrari", + "version":"1.3.6", + "title":"Rocket-Silo Construction", + "description":"Building a Rocket Silo is now a 6 stages process. Each silo needs to be excavated, filled and built, while requiring a lot of power, materials and generating pollution.\n\nSpace Exploration/Bob&Angels compatible.", + "homepage":"Discord: MFerrari#6561 and Cobaia#6897", + "contact": "Discord: MFerrari#6561 and Cobaia#6897", + "factorio_version":"1.1", + "dependencies": ["base >= 1.1.0","? space-exploration >= 0.6.0", "(?) bobplates", "(?) bobelectronics", "(?) angelssmelting", "(?) angelsrefining", "(?) bobores", "(?) SpaceXGAR"] +} diff --git a/Rocket-Silo-Construction_1.3.1/locale/en/en.cfg b/Rocket-Silo-Construction/locale/en/en.cfg similarity index 100% rename from Rocket-Silo-Construction_1.3.1/locale/en/en.cfg rename to Rocket-Silo-Construction/locale/en/en.cfg diff --git a/Rocket-Silo-Construction_1.3.1/particles.lua b/Rocket-Silo-Construction/particles.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/particles.lua rename to Rocket-Silo-Construction/particles.lua diff --git a/Rocket-Silo-Construction_1.3.1/prototypes/entities.lua b/Rocket-Silo-Construction/prototypes/entities.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/prototypes/entities.lua rename to Rocket-Silo-Construction/prototypes/entities.lua diff --git a/Rocket-Silo-Construction_1.3.1/prototypes/item.lua b/Rocket-Silo-Construction/prototypes/item.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/prototypes/item.lua rename to Rocket-Silo-Construction/prototypes/item.lua diff --git a/Rocket-Silo-Construction_1.3.1/prototypes/recipe-categories.lua b/Rocket-Silo-Construction/prototypes/recipe-categories.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/prototypes/recipe-categories.lua rename to Rocket-Silo-Construction/prototypes/recipe-categories.lua diff --git a/Rocket-Silo-Construction_1.3.1/prototypes/recipe.lua b/Rocket-Silo-Construction/prototypes/recipe.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/prototypes/recipe.lua rename to Rocket-Silo-Construction/prototypes/recipe.lua diff --git a/Rocket-Silo-Construction_1.3.1/settings.lua b/Rocket-Silo-Construction/settings.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/settings.lua rename to Rocket-Silo-Construction/settings.lua diff --git a/Rocket-Silo-Construction_1.3.1/thumbnail.png b/Rocket-Silo-Construction/thumbnail.png similarity index 100% rename from Rocket-Silo-Construction_1.3.1/thumbnail.png rename to Rocket-Silo-Construction/thumbnail.png diff --git a/Rocket-Silo-Construction_1.3.1/utils.lua b/Rocket-Silo-Construction/utils.lua similarity index 100% rename from Rocket-Silo-Construction_1.3.1/utils.lua rename to Rocket-Silo-Construction/utils.lua diff --git a/Rocket-Silo-Construction_1.3.1/info.json b/Rocket-Silo-Construction_1.3.1/info.json deleted file mode 100644 index c3b38bff..00000000 --- a/Rocket-Silo-Construction_1.3.1/info.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name":"Rocket-Silo-Construction", - "author":"MFerrari", - "version":"1.3.1", - "title":"Rocket-Silo Construction", - "description":"Building a Rocket Silo is now a 6 stages process. Each silo needs to be excavated, filled and built, while requiring a lot of power, materials and generating pollution.\n\nSpace Exploration/Bob&Angels compatible.", - "homepage":"Discord: MFerrari#6561 and Cobaia#6897", - "contact": "Discord: MFerrari#6561 and Cobaia#6897", - "factorio_version":"1.1", - "dependencies": ["base >= 1.1.0","? space-exploration >= 0.6.0", "(?) bobplates", "(?) bobelectronics", "(?) angelssmelting", "(?) angelsrefining", "(?) bobores", "(?) SpaceXGAR"] -} diff --git a/RocketExplosions_1.1.5/MIT_license.txt b/RocketExplosions/MIT_license.txt similarity index 100% rename from RocketExplosions_1.1.5/MIT_license.txt rename to RocketExplosions/MIT_license.txt diff --git a/RocketExplosions_1.1.5/changelog.txt b/RocketExplosions/changelog.txt similarity index 100% rename from RocketExplosions_1.1.5/changelog.txt rename to RocketExplosions/changelog.txt diff --git a/RocketExplosions_1.1.5/control.lua b/RocketExplosions/control.lua similarity index 100% rename from RocketExplosions_1.1.5/control.lua rename to RocketExplosions/control.lua diff --git a/RocketExplosions_1.1.5/data.lua b/RocketExplosions/data.lua similarity index 100% rename from RocketExplosions_1.1.5/data.lua rename to RocketExplosions/data.lua diff --git a/RocketExplosions_1.1.5/icons/rocket-failure-revision.png b/RocketExplosions/icons/rocket-failure-revision.png similarity index 100% rename from RocketExplosions_1.1.5/icons/rocket-failure-revision.png rename to RocketExplosions/icons/rocket-failure-revision.png diff --git a/RocketExplosions_1.1.5/icons/rocket-failure-revision2.png b/RocketExplosions/icons/rocket-failure-revision2.png similarity index 100% rename from RocketExplosions_1.1.5/icons/rocket-failure-revision2.png rename to RocketExplosions/icons/rocket-failure-revision2.png diff --git a/RocketExplosions_1.1.5/info.json b/RocketExplosions/info.json similarity index 100% rename from RocketExplosions_1.1.5/info.json rename to RocketExplosions/info.json diff --git a/RocketExplosions_1.1.5/locale/en/en.cfg b/RocketExplosions/locale/en/en.cfg similarity index 100% rename from RocketExplosions_1.1.5/locale/en/en.cfg rename to RocketExplosions/locale/en/en.cfg diff --git a/RocketExplosions_1.1.5/locale/ru/ru.cfg b/RocketExplosions/locale/ru/ru.cfg similarity index 100% rename from RocketExplosions_1.1.5/locale/ru/ru.cfg rename to RocketExplosions/locale/ru/ru.cfg diff --git a/RocketExplosions_1.1.5/prototypes/technologies.lua b/RocketExplosions/prototypes/technologies.lua similarity index 100% rename from RocketExplosions_1.1.5/prototypes/technologies.lua rename to RocketExplosions/prototypes/technologies.lua diff --git a/RocketExplosions_1.1.5/settings.lua b/RocketExplosions/settings.lua similarity index 100% rename from RocketExplosions_1.1.5/settings.lua rename to RocketExplosions/settings.lua diff --git a/RocketExplosions_1.1.5/sounds/rocket-win.ogg b/RocketExplosions/sounds/rocket-win.ogg similarity index 100% rename from RocketExplosions_1.1.5/sounds/rocket-win.ogg rename to RocketExplosions/sounds/rocket-win.ogg diff --git a/RocketExplosions_1.1.5/thumbnail.png b/RocketExplosions/thumbnail.png similarity index 100% rename from RocketExplosions_1.1.5/thumbnail.png rename to RocketExplosions/thumbnail.png diff --git a/RussianStations_9.1.2/changelog.txt b/RussianStations/changelog.txt similarity index 100% rename from RussianStations_9.1.2/changelog.txt rename to RussianStations/changelog.txt diff --git a/RussianStations_9.1.2/control.lua b/RussianStations/control.lua similarity index 100% rename from RussianStations_9.1.2/control.lua rename to RussianStations/control.lua diff --git a/RussianStations_9.1.2/info.json b/RussianStations/info.json similarity index 100% rename from RussianStations_9.1.2/info.json rename to RussianStations/info.json diff --git a/RussianStations_9.1.2/locale/en/locale.cfg b/RussianStations/locale/en/locale.cfg similarity index 100% rename from RussianStations_9.1.2/locale/en/locale.cfg rename to RussianStations/locale/en/locale.cfg diff --git a/RussianStations_9.1.2/settings.lua b/RussianStations/settings.lua similarity index 100% rename from RussianStations_9.1.2/settings.lua rename to RussianStations/settings.lua diff --git a/RussianStations_9.1.2/stations.lua b/RussianStations/stations.lua similarity index 100% rename from RussianStations_9.1.2/stations.lua rename to RussianStations/stations.lua diff --git a/RussianStations_9.1.2/thumbnail.png b/RussianStations/thumbnail.png similarity index 100% rename from RussianStations_9.1.2/thumbnail.png rename to RussianStations/thumbnail.png diff --git a/Sandros-fixes_0.6.2/changelog.txt b/Sandros-fixes_0.6.2/changelog.txt deleted file mode 100644 index 0aa22d7a..00000000 --- a/Sandros-fixes_0.6.2/changelog.txt +++ /dev/null @@ -1,198 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.6.2 - Bugfixes: - - Fixed a crash without "Bobs Equipment" ---------------------------------------------------------------------------------------------------- -Version: 0.6.1 - Changes: - - Moved some vehicle and normal equipment ("Portable_power", "Nanobots") from weaponry tab into the right Angel tab ---------------------------------------------------------------------------------------------------- -Version: 0.6.0 - Changes: - - Completely redone mod for 1.1 to with primary focus on Angels Industries Overhaul ---------------------------------------------------------------------------------------------------- -Version: 0.5.5 - Changes: - - Moved some Items from Bobs Chemicals and Intermediates to other tabs when "Shiny Icons" is not installed - Bugfixes: - - Fixed a crash without "Angels Exploring" installed ---------------------------------------------------------------------------------------------------- -Version: 0.5.4 - Bugfixes: - - Fixed a crash without "SchallTransportGroup" installed ---------------------------------------------------------------------------------------------------- -Version: 0.5.3 - Notes: - - Angels mods in 0.18 do a pretty good job moving items to a right location and thematic correct. - - Until ShinyIcons gets updated with those changes I recommend to not combine it with the newest Angels versions and only use it with Bobs mods alone. - - This recommendation could change in the future. - - If you find any items that are placed weird or incorrectly feel free to message me with suggestions where to move it and I'll move it to a better place. - Changes: - - Moved "Angels Exploration" Items back to where they belong - - Moved "Petrochem Plus/PCPRedux" plastic wall to the correct position - - Moved "MadClown's Vanilla Nuclear" artillery shells to more fitting positions - - Moved "Bobs Warfare" artillery shells - - Moved some of Schalls shells, ammo, etc. also to "ShinyIcons" subgroups - - Moved "Modular Turrets" ammo - - Moved "Schall Tank Platoon" and "Schall Alien Tech" walls to shinywalls - - Moved a whole bunch of Angels and Bobs stuff around cause all people love moving stuff of other people to their crafting group. - Bugfixes: - - Lowered the version number of "BotRecaller" ---------------------------------------------------------------------------------------------------- -Version: 0.5.2 - Changes: - - Remove temp LUT files ---------------------------------------------------------------------------------------------------- -Version: 0.5.1 - Bugfixes: - - Fix crash with "ExtendedAngels" 0.3.7 ---------------------------------------------------------------------------------------------------- -Version: 0.5.0 - Changes: - - Port to Factorio 0.18 - Bugfixes: - - Crash with new Bio Processing ---------------------------------------------------------------------------------------------------- -Version: 0.4.9 - Bugfixes: - - Fixed a crash with "ExtendedAngels" installed but not "Angels Addons - Warehouses" ---------------------------------------------------------------------------------------------------- -Version: 0.4.8 - Bugfixes: - - Moved Angels CAB equipment ---------------------------------------------------------------------------------------------------- -Version: 0.4.7 - Bugfixes: - - Moved Deuterium ---------------------------------------------------------------------------------------------------- -Version: 0.4.6 - Bugfixes: - - Fixed changelog formatting ---------------------------------------------------------------------------------------------------- -Version: 0.4.5 - Bugfixes: - - Fixed a crash with "Avatars" and not "Angels Petrochem" installed ---------------------------------------------------------------------------------------------------- -Version: 0.4.4 - Bugfixes: - - Moved "BotRecaller" chest ---------------------------------------------------------------------------------------------------- -Version: 0.4.3 - Bugfixes: - - Fixed thumbnail.png ---------------------------------------------------------------------------------------------------- -Version: 0.4.2 - Bugfixes: - - Added thumbnail.png ---------------------------------------------------------------------------------------------------- -Version: 0.4.1 - Bugfixes: - - Moved "ExtendedAngels" Buffer Warehouses ---------------------------------------------------------------------------------------------------- -Version: 0.4.0 - Bugfixes: - - Update to 0.17 - - Made incompatible with "MoreBobs!" ---------------------------------------------------------------------------------------------------- -Version: 0.3.6 - Bugfixes: - - Fixed a crash with newer versions of "MoreBobs!" aka "MoreBobs!:Core". Great transition Xagros. Next time create a new mod. ---------------------------------------------------------------------------------------------------- -Version: 0.3.5 - Bugfixes: - - Fixed a crash without the "Sticky expensive" recipe from "Endgame Combat" ---------------------------------------------------------------------------------------------------- -Version: 0.3.4 - Bugfixes: - - Fixed a crash without "Extra Bobs!" ---------------------------------------------------------------------------------------------------- -Version: 0.3.3 - Bugfixes: - - Fixed a crash with "Avatars" and without "Angel's Refining" installed ---------------------------------------------------------------------------------------------------- -Version: 0.3.2 - Bugfixes: - - Fixed a crash with "Bob's Metals, Chemicals and Intermediates" and without "Shiny Icons" installed ---------------------------------------------------------------------------------------------------- -Version: 0.3.1 - Changes: - - Code improvements - Bugfixes: - - Fixed a crash without "Endgame Combat" installed ---------------------------------------------------------------------------------------------------- -Version: 0.3.0 - Changes: - - Moved all items in addition to Recipies - - Moved "Modular Turrets" hardened inserter in row when ShinyIcons is installed - - Moved "MadClown01's Processing" Centrifuge next to Centrifuge when ShinyIcons is installed - - Moved "Quarry" machines right under ShinyIcon Miner when ShinyIcons is installed - - Moved "Tatjer Space Station" and "Avatars" at the bottom of production - - Combined "Bob's Logistic" valve with "Angel's Petro Chemical Processing" valves ---------------------------------------------------------------------------------------------------- -Version: 0.2.5 - Changes: - - Moved everything out of "Angels enhancement" tab ---------------------------------------------------------------------------------------------------- -Version: 0.2.4 - Bugfixes: - - Fixed "Buffer warehouse" categories that I broke with the last version. upsi ---------------------------------------------------------------------------------------------------- -Version: 0.2.3 - Bugfixes: - - Fixed a crash without "Angel's Industries" installed ---------------------------------------------------------------------------------------------------- -Version: 0.2.2 - Bugfixes: - - Fixed a crash without "Bob's Warfare" installed ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 - Bugfixes: - - Hotfix: Don't try to change "MoreBobs!" Walls if "MoreBobs!" is not installed ---------------------------------------------------------------------------------------------------- -Version: 0.2.0 - Changes: - - Finally fully fixed "Buffer warehouse" recipie and item groups. - - Thanks Dewin for the help with https://mods.factorio.com/mod/ModDeveloperTools - - To celebrate that we bumped the version number to 0.2.0 ---------------------------------------------------------------------------------------------------- -Version: 0.1.9 - Changes: - - Added "Station Data", "Telescope Data" and "Alien Tissue" to Lab MK2 ---------------------------------------------------------------------------------------------------- -Version: 0.1.8 - Changes: - - Fixed "Endgame Combat" Sticky Recipies landing under Fluids ---------------------------------------------------------------------------------------------------- -Version: 0.1.7 - Changes: - - Fixed Boric Acid locale ---------------------------------------------------------------------------------------------------- -Version: 0.1.6 - Changes: - - Fixed "MadClown01's AngelBob Locale Fixes" ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 - Changes: - - Added radioactive-waste-water-purification to locale fixes ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 - Changes: - - Added optional dependencies for "Angel's Smelting" Train and "More Bobs!" - - Moved the Storage Tank MK1 back to the first position when "More Science! - BobAngel" is installed - - Moved "RampantArsenal" Vehicles under Vehicles when "More Bobs!" is installed ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 - Changes: - - Moved "Angel's Smelting Train" Items into Vehicles ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 - Changes: - - Moved "ExtendedAngels" Warehouse Items into Angel's Logistic tab ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 - Changes: - - Added support for "Taterjr Space Station" ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 - Changes: - - Initial release diff --git a/Sandros-fixes_0.6.2/data-final-fixes.lua b/Sandros-fixes_0.6.2/data-final-fixes.lua deleted file mode 100644 index 12403358..00000000 --- a/Sandros-fixes_0.6.2/data-final-fixes.lua +++ /dev/null @@ -1,75 +0,0 @@ -local armor = data.raw.armor -local ammo = data.raw.ammo -local item = data.raw.item -local item_with_enitity_data = data.raw["item-with-entity-data"] -local fluid = data.raw.fluid -local lab = data.raw.lab -local recipe = data.raw.recipe -local subgroup = data.raw["item-subgroup"] - -local function sort_item_recipe(item_sort, subgroup) - if item[item_sort] then - item[item_sort].subgroup = subgroup - else - log("Item " .. item_sort .. " does not exist.") - end - if recipe[item_sort] then - recipe[item_sort].subgroup = subgroup - else - log("Recipe " .. item_sort .. " does not exist.") - end -end - -local function sort_item_recipe_order(item_sort, subgroup, order) - local any - - if item[item_sort] then - any = item - elseif ammo[item_sort] then - any = ammo - elseif armor[item_sort] then - any = armor - elseif item_with_enitity_data[item_sort] then - any = item_with_enitity_data - else - log("Item " .. item_sort .. " does not exist.") - end - - if recipe[item_sort] then - recipe[item_sort].subgroup = subgroup - recipe[item_sort].order = order - else - log("Recipe " .. item_sort .. " does not exist.") - end -end - -local function sort_recipe_order(recipe_sort, subgroup) - if item[recipe_sort] then - item[recipe_sort].subgroup = subgroup - else - log("Item " .. recipe_sort .. " does not exist.") - end - if recipe[recipe_sort] then - recipe[recipe_sort].subgroup = subgroup - else - log("Recipe " .. recipe_sort .. " does not exist.") - end -end - -if mods["angelsexploration"] and mods["PCPRedux"] then - sort_item_recipe_order("plaswall", "angels-exploration-walls", "b[plastic]-a[wall]") -end - -if mods["angelspetrochem"] and mods["PCPRedux"] then - sort_recipe_order("gas-carbon-dioxide", "petrochem-basics", "d[carbon-separation-3]") --drd carbon-dioxide -end - ---DrD -if mods["angelsrefining"] then - sort_item_recipe_order("angelsore7-crystallization-3", "intermediate-product", "aa1") - sort_item_recipe_order("angelsore7-crystallization-1", "intermediate-product", "aa2") - sort_item_recipe_order("angelsore7-crystallization-4", "intermediate-product", "aa3") - sort_item_recipe_order("angelsore7-crystallization-5", "intermediate-product", "aa4") - sort_item_recipe_order("angelsore7-crystallization-2", "intermediate-product", "aa5") - sort_item_recipe_order("angelsore7-crystallization-6", "intermediate-product", "aa6") -end \ No newline at end of file diff --git a/Sandros-fixes_0.6.2/data-final-fixes1.lua b/Sandros-fixes_0.6.2/data-final-fixes1.lua deleted file mode 100644 index 607b9262..00000000 --- a/Sandros-fixes_0.6.2/data-final-fixes1.lua +++ /dev/null @@ -1,95 +0,0 @@ -local armor = data.raw.armor -local ammo = data.raw.ammo -local item = data.raw.item -local item_with_enitity_data = data.raw["item-with-entity-data"] -local fluid = data.raw.fluid -local lab = data.raw.lab -local recipe = data.raw.recipe -local subgroup = data.raw["item-subgroup"] - -local function sort_recipe(recipe_sort, subgroup) - if recipe[recipe_sort] then - recipe[recipe_sort].subgroup = subgroup - else - log("Recipe " .. recipe_sort .. " does not exist.") - end -end - -local function sort_item_recipe(item_sort, subgroup) - if item[item_sort] then - item[item_sort].subgroup = subgroup - else - log("Item " .. item_sort .. " does not exist.") - end - if recipe[item_sort] then - recipe[item_sort].subgroup = subgroup - else - log("Recipe " .. item_sort .. " does not exist.") - end -end - -local function sort_item_recipe_order(item_sort, subgroup, order) - local any - - if item[item_sort] then - any = item - elseif ammo[item_sort] then - any = ammo - elseif armor[item_sort] then - any = armor - elseif item_with_enitity_data[item_sort] then - any = item_with_enitity_data - else - log("Item " .. item_sort .. " does not exist.") - end - - if any[item_sort] then - any[item_sort].subgroup = subgroup - any[item_sort].order = order - end - - if recipe[item_sort] then - recipe[item_sort].subgroup = subgroup - recipe[item_sort].order = order - else - log("Recipe " .. item_sort .. " does not exist.") - end -end - -if mods["PCPRedux"] then - if mods["angelsexploration"] then - sort_item_recipe_order("plaswall", "angels-exploration-walls", "b[plastic]-a[wall]") - end - - if mods["angelspetrochem"] then - sort_recipe("carbon-dioxide", "petrochem-basics", "d[carbon-separation-3]") - end -end - -if mods["angelsindustries"] then - if mods["bobvehicleequipment"] then - sort_item_recipe_order("vehicle-belt-immunity-equipment", "angels-vehicle-equipment", "a[vehicle-belt-immunity-equipment]") - end - - if mods["bobequipment"] and mods["Nanobots"] then - sort_item_recipe_order("equipment-bot-chip-items", "angels-personal-equipment-power-d", "aa") - sort_item_recipe_order("equipment-bot-chip-launcher", "angels-personal-equipment-power-d", "ab") - sort_item_recipe_order("equipment-bot-chip-trees", "angels-personal-equipment-power-d", "ac") - sort_item_recipe_order("equipment-bot-chip-feeder", "angels-personal-equipment-power-d", "ad") - sort_item_recipe_order("equipment-bot-chip-nanointerface", "angels-personal-equipment-power-d", "ae") - end - - if mods["Portable_power"] then - sort_item_recipe_order("portable-generator-equipment", "angels-personal-equipment-power-a", "z") - end -end - ---DrD -if mods["angelsrefining"] then - sort_item_recipe_order("angelsore7-crystallization-3", "intermediate-product", "aa1") - sort_item_recipe_order("angelsore7-crystallization-1", "intermediate-product", "aa2") - sort_item_recipe_order("angelsore7-crystallization-4", "intermediate-product", "aa3") - sort_item_recipe_order("angelsore7-crystallization-5", "intermediate-product", "aa4") - sort_item_recipe_order("angelsore7-crystallization-2", "intermediate-product", "aa5") - sort_item_recipe_order("angelsore7-crystallization-6", "intermediate-product", "aa6") -end diff --git a/Sandros-fixes_0.6.2/info.json b/Sandros-fixes_0.6.2/info.json deleted file mode 100644 index 5cb7586e..00000000 --- a/Sandros-fixes_0.6.2/info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Sandros-fixes", - "version": "0.6.2", - "factorio_version": "1.1", - "title": "Sandro's Fixes", - "author": "SuperSandro2000", - "homepage": "https://forums.factorio.com/viewtopic.php?f=190&t=64247", - "dependencies": [ - "? angelsexploration >= 0.3.9", - "? angelsindustries >= 0.4.10", - "? angelspetrochem >= 0.9.17", - "? bobequipment >= 1.1.2", - "? bobvehicleequipment >= 1.1.2", - "? Nanobots >= 3.2.14", - "? PCPRedux >= 1.0.3", - "? Portable_power >= 1.1.0" - ], - "description": "Sorts and organizes the crafting menu. Currently supports AngelsBobs with Industries Overhaul and Petrochemical Redux." -} diff --git a/Sandros-fixes_0.6.2/thumbnail.png b/Sandros-fixes_0.6.2/thumbnail.png deleted file mode 100644 index 042733b5..00000000 Binary files a/Sandros-fixes_0.6.2/thumbnail.png and /dev/null differ diff --git a/Satisfactory_OST_0.0.2.zip b/Satisfactory_OST_0.0.2.zip deleted file mode 100644 index ac538413..00000000 Binary files a/Satisfactory_OST_0.0.2.zip and /dev/null differ diff --git a/SchallPickupTower_1.1.0/changelog.txt b/SchallPickupTower/changelog.txt similarity index 100% rename from SchallPickupTower_1.1.0/changelog.txt rename to SchallPickupTower/changelog.txt diff --git a/SchallPickupTower_1.1.0/config/config-1.lua b/SchallPickupTower/config/config-1.lua similarity index 100% rename from SchallPickupTower_1.1.0/config/config-1.lua rename to SchallPickupTower/config/config-1.lua diff --git a/SchallPickupTower_1.1.0/config/config-2.lua b/SchallPickupTower/config/config-2.lua similarity index 100% rename from SchallPickupTower_1.1.0/config/config-2.lua rename to SchallPickupTower/config/config-2.lua diff --git a/SchallPickupTower_1.1.0/control.lua b/SchallPickupTower/control.lua similarity index 100% rename from SchallPickupTower_1.1.0/control.lua rename to SchallPickupTower/control.lua diff --git a/SchallPickupTower_1.1.0/data.lua b/SchallPickupTower/data.lua similarity index 100% rename from SchallPickupTower_1.1.0/data.lua rename to SchallPickupTower/data.lua diff --git a/SchallPickupTower_1.1.0/graphics/entity/pickup-tower-base.png b/SchallPickupTower/graphics/entity/pickup-tower-base.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/entity/pickup-tower-base.png rename to SchallPickupTower/graphics/entity/pickup-tower-base.png diff --git a/SchallPickupTower_1.1.0/graphics/entity/pickup-tower-radius.png b/SchallPickupTower/graphics/entity/pickup-tower-radius.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/entity/pickup-tower-radius.png rename to SchallPickupTower/graphics/entity/pickup-tower-radius.png diff --git a/SchallPickupTower_1.1.0/graphics/entity/pickup-tower-sheet.png b/SchallPickupTower/graphics/entity/pickup-tower-sheet.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/entity/pickup-tower-sheet.png rename to SchallPickupTower/graphics/entity/pickup-tower-sheet.png diff --git a/SchallPickupTower_1.1.0/graphics/icons/mk1.png b/SchallPickupTower/graphics/icons/mk1.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/icons/mk1.png rename to SchallPickupTower/graphics/icons/mk1.png diff --git a/SchallPickupTower_1.1.0/graphics/icons/mk2.png b/SchallPickupTower/graphics/icons/mk2.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/icons/mk2.png rename to SchallPickupTower/graphics/icons/mk2.png diff --git a/SchallPickupTower_1.1.0/graphics/icons/mk3.png b/SchallPickupTower/graphics/icons/mk3.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/icons/mk3.png rename to SchallPickupTower/graphics/icons/mk3.png diff --git a/SchallPickupTower_1.1.0/graphics/icons/mk4.png b/SchallPickupTower/graphics/icons/mk4.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/icons/mk4.png rename to SchallPickupTower/graphics/icons/mk4.png diff --git a/SchallPickupTower_1.1.0/graphics/icons/pickup-tower.png b/SchallPickupTower/graphics/icons/pickup-tower.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/icons/pickup-tower.png rename to SchallPickupTower/graphics/icons/pickup-tower.png diff --git a/SchallPickupTower_1.1.0/graphics/technology/pickup-tower.png b/SchallPickupTower/graphics/technology/pickup-tower.png similarity index 100% rename from SchallPickupTower_1.1.0/graphics/technology/pickup-tower.png rename to SchallPickupTower/graphics/technology/pickup-tower.png diff --git a/SchallPickupTower_1.1.0/info.json b/SchallPickupTower/info.json similarity index 100% rename from SchallPickupTower_1.1.0/info.json rename to SchallPickupTower/info.json diff --git a/SchallPickupTower_1.1.0/lib/PTlib.lua b/SchallPickupTower/lib/PTlib.lua similarity index 100% rename from SchallPickupTower_1.1.0/lib/PTlib.lua rename to SchallPickupTower/lib/PTlib.lua diff --git a/SchallPickupTower_1.1.0/lib/PTpt.lua b/SchallPickupTower/lib/PTpt.lua similarity index 100% rename from SchallPickupTower_1.1.0/lib/PTpt.lua rename to SchallPickupTower/lib/PTpt.lua diff --git a/SchallPickupTower_1.1.0/lib/PTrender.lua b/SchallPickupTower/lib/PTrender.lua similarity index 100% rename from SchallPickupTower_1.1.0/lib/PTrender.lua rename to SchallPickupTower/lib/PTrender.lua diff --git a/SchallPickupTower_1.1.0/locale/en/SchallPickupTower.cfg b/SchallPickupTower/locale/en/SchallPickupTower.cfg similarity index 100% rename from SchallPickupTower_1.1.0/locale/en/SchallPickupTower.cfg rename to SchallPickupTower/locale/en/SchallPickupTower.cfg diff --git a/SchallPickupTower_1.1.0/prototypes/pickup-tower.lua b/SchallPickupTower/prototypes/pickup-tower.lua similarity index 100% rename from SchallPickupTower_1.1.0/prototypes/pickup-tower.lua rename to SchallPickupTower/prototypes/pickup-tower.lua diff --git a/SchallPickupTower_1.1.0/settings.lua b/SchallPickupTower/settings.lua similarity index 100% rename from SchallPickupTower_1.1.0/settings.lua rename to SchallPickupTower/settings.lua diff --git a/SchallPickupTower_1.1.0/thumbnail.png b/SchallPickupTower/thumbnail.png similarity index 100% rename from SchallPickupTower_1.1.0/thumbnail.png rename to SchallPickupTower/thumbnail.png diff --git a/SchallTankPlatoon/changelog.txt b/SchallTankPlatoon/changelog.txt new file mode 100644 index 00000000..d38d33d9 --- /dev/null +++ b/SchallTankPlatoon/changelog.txt @@ -0,0 +1,477 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2020.12.13 + Bugfixes: + - Fixed values from grid sizes were not set as integers. +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 2020.12.13 + Bugfixes: + - Fixed values from grid sizes were not set as integers. +--------------------------------------------------------------------------------------------------- +Version: 0.18.11 +Date: 2020.12.13 + Bugfixes: + - Fixed values from grid sizes were not set as integers. +--------------------------------------------------------------------------------------------------- +Version: 0.17.23 +Date: 2020.12.13 + Bugfixes: + - Fixed values from grid sizes were not set as integers. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020.12.07 + Features: + - Updated to 1.1. + - Options on minimap representation. + Changes: + - Adjusted prototypes to base game 1.1.0 standard. + - Renamed techs to base game 1.1.0 standard. + - Rewritten library code, to handle the more complicated 1.1.0 prototype definitions. + Graphics: + - Upgraded technology mipmap icons to size 256. + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 2020.11.20 + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 0.18.10 +Date: 2020.11.20 + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 0.17.22 +Date: 2020.11.20 + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 2020.09.30 + Features: + - Options on enable bullet projectile. (Default: Off.) + Bugfixes: + - Additional checks on reading and changing vanilla properties, in case another mod mess with them. + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 0.18.9 +Date: 2020.09.30 + Features: + - Options on enable bullet projectile. (Default: Off.) + Bugfixes: + - Additional checks on reading and changing vanilla properties, in case another mod mess with them. + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 0.17.21 +Date: 2020.09.30 + Features: + - Options on enable bullet projectile. (Default: Off.) + Bugfixes: + - Additional checks on reading and changing vanilla properties, in case another mod mess with them. + Optimisations: + - Minor code refactoring. +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2020.08.27 + Features: + - Extra options on adjusting energy settings of personal laser defense. + - Applied options on hide vehicle resistances on Spidertron. + Bugfixes: + - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. + Optimisations: + - Code refactoring. + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.18.8 +Date: 2020.08.27 + Features: + - Extra options on adjusting energy settings of personal laser defense. + Bugfixes: + - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. + Optimisations: + - Code refactoring. + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.17.20 +Date: 2020.08.27 + Features: + - Extra options on adjusting energy settings of personal laser defense. + Bugfixes: + - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. + Optimisations: + - Code refactoring. + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2020.08.20 + Features: + - Updated to 1.0. + - Allows vehicle equipment (from this mod and Schall mod series) to be used on Spidertron, considered the same class restrictions as Medium tanks. + Changes: + - Adjusted prototypes to base game 1.0.0 standard. +--------------------------------------------------------------------------------------------------- +Version: 0.18.7 +Date: 2020.08.20 + Features: + - Introduced vehicle clone placement, to insert (will not replace) the same set of fuel, ammo and grid equipment like the source vehicle. Items are taken from player inventory, as if manual item transfers taking place. + - Vehicle clone placement on building the identical type of vehicle, as the vehicle the player is driving on. + - Vehicle clone placement on pasting entity settings over vehicle (by hotkey), as the source vehicle copied from. + - Options on vehicle clone placement on built. (Default: on.) + - Options on vehicle clone placement on pasted. (Default: on.) + Optimisations: + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.17.19 +Date: 2020.08.20 + Features: + - Introduced vehicle clone placement, to insert (will not replace) the same set of fuel, ammo and grid equipment like the source vehicle. Items are taken from player inventory, as if manual item transfers taking place. + - Vehicle clone placement on building the identical type of vehicle, as the vehicle the player is driving on. + - Vehicle clone placement on pasting entity settings over vehicle (by hotkey), as the source vehicle copied from. + - Options on vehicle clone placement on built. (Default: on.) + - Options on vehicle clone placement on pasted. (Default: on.) + Optimisations: + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.18.6 +Date: 2020.08.08 + Balancing: + - Increased sniper rifle range to 48. (was 40) + - Sniper rifle uses target priority on units with higher health. + - High-caliber tank cannons use target priority on units with higher health. + Optimisations: + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.17.18 +Date: 2020.08.08 + Balancing: + - Increased sniper rifle range to 48. (was 40) + - Sniper rifle uses target priority on units with higher health. + - High-caliber tank cannons use target priority on units with higher health. + Optimisations: + - Improved library code. +--------------------------------------------------------------------------------------------------- +Version: 0.18.5 +Date: 2020.05.31 + Bugfixes: + - Fixed issue about equipment removal, when vehicles are used in crafting. + Graphics: + - Updated mipmap icons to base game 0.18.27 standard. +--------------------------------------------------------------------------------------------------- +Version: 0.17.17 +Date: 2020.05.31 + Bugfixes: + - Fixed issue about equipment removal, when vehicles are used in crafting. +--------------------------------------------------------------------------------------------------- +Version: 0.18.4 +Date: 2020.04.30 + Bugfixes: + - Fixed equipment not saved, when vehicles are mined. +--------------------------------------------------------------------------------------------------- +Version: 0.17.16 +Date: 2020.04.30 + Bugfixes: + - Fixed equipment not saved, when vehicles are mined. +--------------------------------------------------------------------------------------------------- +Version: 0.18.3 +Date: 2020.04.11 + Features: + - Sniper rifle now can use both vanilla bullets and sniper bullets. (was sniper bullets only after 0.17.13; was vanilla bullets before 0.17.12.) + - Options on hide vehicle resistances. (Default: on.) + Balancing: + - Readjusted tank and half-track resistances. + - Increased amount of fire flames and damage of incendiary and napalm ammo. + - Sniper rifle now has warmup time. (was having a long cooldown only.) + - Reduced sniper rifle to +300% damage bonus. (was +700%) + - Increased sniper bullets damage to double over vanilla bullets. (was the same.) + Changes: + - Adjusted prototypes to base game 0.18.18 standard. + - Changed the order of rocket artillery. + Optimisations: + - Code refactoring. + Locale: + - Moved some entries from "Schall Alien Tech". +--------------------------------------------------------------------------------------------------- +Version: 0.17.15 +Date: 2020.04.11 + Features: + - Options on hide vehicle resistances. (Default: on.) + Balancing: + - Readjusted tank and half-track resistances. + - Increased amount of fire flames and damage of incendiary and napalm ammo. + - Sniper rifle now has warmup time. (was having a long cooldown only.) + - Reduced sniper rifle to +300% damage bonus. (was +700%) + - Increased sniper bullets damage to double over vanilla bullets. (was the same.) + Changes: + - Changed the order of rocket artillery. + Optimisations: + - Code refactoring. + Locale: + - Moved some entries from "Schall Alien Tech". +--------------------------------------------------------------------------------------------------- +Version: 0.18.2 +Date: 2020.02.20 + Features: + - Support extension mod "Schall Missile Command", which introduced strategic missiles and countermeasures. + - Introduced parts subgroups. + - Introduced own poison capsule and poison cloud, cloned from base game 0.18.6. (Base game 0.18.7 new visual has hurt FPS/UPS too much.) + Graphics: + - Own poison cloud uses render layer "lower-object-above-shadow", in order not to obscure entities like the 0.18.7 visuals. +--------------------------------------------------------------------------------------------------- +Version: 0.17.14 +Date: 2020.02.20 + Features: + - Support extension mod "Schall Missile Command", which introduced strategic missiles and countermeasures. + - Introduced parts subgroups. + Bugfixes: + - Now check and restore fast replaceable group of vanilla stone wall and gate, in case another mod mess with them. +--------------------------------------------------------------------------------------------------- +Version: 0.18.1 +Date: 2020.02.18 + Changes: + - Adjusted poison capsule and poison cloud to base game 0.18.7 standard. + Bugfixes: + - Now check and restore fast replaceable group of vanilla stone wall and gate, in case another mod mess with them. +--------------------------------------------------------------------------------------------------- +Version: 0.18.0 +Date: 2020.02.04 + Features: + - Updated to 0.18. + Changes: + - Adjusted sounds to base game 0.18.2 standard. + Balancing: + - Reduced the number of fuel slots in Vehicle fuel cell 2Γ—2 to 1. (was 2) + - Reduced the number of fuel slots in Vehicle fuel cell 3Γ—3 to 2. (was 3) + - Reduced the number of fuel slots in Vehicle fuel cell 4Γ—4 to 3. (was 4) + Graphics: + - Updated explosions for autocannon shells and napalm. + - Added colour LUTs for Nightvision equipment. + - Upgraded mipmap icons to size 64 or 128. + - Replaced graphics for Battery equipment, if option "Enable Vehicle battery" is checked. +--------------------------------------------------------------------------------------------------- +Version: 0.17.13 +Date: 2020.01.29 + Features: + - Introduced 3 new ammo types, as magazines for sniper rifle. + Changes: + - Sniper rifle uses new dedicated magazines now. (was sharing magazines with submachine guns.) + Locale: + - All locale are moved to separate mod "Schall Language Pack". +--------------------------------------------------------------------------------------------------- +Version: 0.17.12 +Date: 2019.11.21 + Changes: + - Added acid resistance of concrete wall and concrete gate. (As par 0/70% in base game 0.17.46; was none previously) + - Increased repair speed modifier of concrete wall to 3. (was 2) +--------------------------------------------------------------------------------------------------- +Version: 0.17.11 +Date: 2019.11.07 + Changes: + - Changed the need of fusion reactor equipment to processing units in all recipes of heavy (or above) MK1 tanks. +--------------------------------------------------------------------------------------------------- +Version: 0.17.10 +Date: 2019.09.07 + Changes: + - Adjusted graphics to base game 0.17.67 standard. +--------------------------------------------------------------------------------------------------- +Version: 0.17.9 +Date: 2019.07.25 + Locale: + - Brazilian Portuguese, Spanish are available. (Credit to NickFury23.) +--------------------------------------------------------------------------------------------------- +Version: 0.17.8 +Date: 2019.07.04 + Locale: + - Introduced localized string mod settings. + - Removed redundant strings. + Balancing: + - Options on adjusting energy settings of personal laser defense. (50 kJ per shot in base game 0.17; was 200 kJ per shot in base game 0.16.51) +--------------------------------------------------------------------------------------------------- +Version: 0.17.7 +Date: 2019.06.13 + Features: + - Options on using chemical recipes for chemical weapons, including poison capsule, poison bomb. + Balancing: + - Changed acid resistance of medium tank. (As par 0/70% in base game 0.17.46; was 0/50% in base game 0.17) Other tanks change accordingly. +--------------------------------------------------------------------------------------------------- +Version: 0.17.6 +Date: 2019.05.16 + Features: + - Support group mod "Transport Group", where all vehicles and vehicle-only equipment are moved into "Transport" group tab. + - Options on using tiered military subgroups. (Default: off.) + - Options on cannon force condition. (Default: "all". Deals penetration damage but cannot fire over friendlies.) + - Options on autocannon force condition. (Default: "not-friend". Can fire over friendlies.) + Changes: + - Removed options on collision box, since force condition checks are superior. +--------------------------------------------------------------------------------------------------- +Version: 0.17.5 +Date: 2019.05.06 + Features: + - Introduced 1 new ammo type: poison bomb. + - Options on rearrange ammo colour, including basic rocket, poison capsule, poison cloud. (Default: on.) + Changes: + - Renamed technology names to base game 0.17.35 standard. + - Changed migration script. +--------------------------------------------------------------------------------------------------- +Version: 0.17.4 +Date: 2019.04.04 + Bugfixes: + - Fixed issue caused by older migration script in 0.17.3. +--------------------------------------------------------------------------------------------------- +Version: 0.17.3 +Date: 2019.04.04 + Changes: + - Renamed techs, items, entities to comply with 0.17.23 new requirement of contiguous levels. +--------------------------------------------------------------------------------------------------- +Version: 0.17.2 +Date: 2019.03.14 + Features: + - Support extension mod "Schall Artillery", on more artillery shell types. + Changes: + - Renamed various equipment to 0.17 new names. +--------------------------------------------------------------------------------------------------- +Version: 0.17.1 +Date: 2019.03.07 + Features: + - Support extension mod "Schall Gun Pod", on more equipment usable on trains in "Schall Armoured Train". + Changes: + - Changed recipes of portable fusion generators using low density structures. (As par Portable fusion generator.) +--------------------------------------------------------------------------------------------------- +Version: 0.17.0 +Date: 2019.03.01 + Features: + - Updated to 0.17. + Balancing: + - Increased multiple rocket launcher range to 36. (was 25) + - Increased tactical missile launcher range to 48. (was 40) + - Increased sniper rifle range to 40. (was 36) + - Increased tank machine gun damage bonus to +50%. (was none in base game 0.17; was +100% in base game 0.16) + - Increased tank cannon (all variations) and tank autocannon damage bonus to +50%. (was none) + - Increased health on most tanks. + Changes: + - Removed options on personal laser defense ammo category. + - Changed recipes of tank MK2 upgrades using modules level 2. (As par Power armor MK2.) + - Changed energy consumption and efficiency on tanks. + - Changed acid resistance of medium tank. (As par 0/50% in base game 0.17; was 15/50% in base game 0.16) Other tanks change accordingly. +--------------------------------------------------------------------------------------------------- +Version: 0.16.7 +Date: 2019.02.21 + Features: + - Introduced 2 new repair packs. + - Options on repair pack techs. (Default: on.) + - Added flying text on equipment removal information. + Changes: + - Added upgradable flags to various tech. + - Renamed internal name with prefix as precaution to avoid potential conflicts. +--------------------------------------------------------------------------------------------------- +Version: 0.16.6 +Date: 2019.01.18 + Features: + - Support extension mod "Schall Alien Tech", which introduced alternate weaponry, MK3 armor and MK3 tanks. + - Introduced 2 new night vision equipment. + - Introduced MK1 and MK2 upgrades for rocket artillery. + - Introduced concrete wall and concrete gate. + - Options on night vision equipment techs. (Default: on.) + - Options on concrete walls tech. (Default: on.) + Balancing: + - Buffed sniper rifle to +700% damage bonus. (was +300%) + - Gave electric resistances to stone wall and stone gate. + Changes: + - Readjusted colour of flame tank and rocket artillery. + - Renamed tanks tech to make the code much cleaner. + - Renamed mod settings name to be more accurate. + Bugfixes: + - Fixed recipes of new portable fusion reactors not unlocked, when loading save game with Fusion Reactor tech already researched. + - Fixed recipe of super-heavy tank in expensive mode, now requiring military science pack too. +--------------------------------------------------------------------------------------------------- +Version: 0.16.5 +Date: 2018.12.20 + Features: + - Introduced 1 new weapon: sniper rifle. + - Introduced notification message displaying number of equipment taken out from grid, when a vehicle is used as an ingredient during handcraft. (was returning equipment but without notification.) + Locale: + - Simplified Chinese is available. + - Russian is available. (Credit to John_TheCF.) +--------------------------------------------------------------------------------------------------- +Version: 0.16.4 +Date: 2018.11.22 + Features: + - Support auxiliary mod "Schall Gun Pod", which introduced various ammo-consuming vehicle-only defense equipment. + - Introduced 3 new incendiary ammo: incendiary autocannon shell (20 mm), incendiary rocket, napalm bomb. + Balancing: + - All MK1 tanks have +5 / 20% laser and electric resistance. (was none) + - All MK2 tanks have +10 / 40% laser and electric resistance. (was none) + - Reduced light tanks grid sizes by 1Γ—1, down to 4Γ—3, 6Γ—6, 9Γ—9 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) + - Increased heavy tanks grid sizes by 1Γ—0, up to 6Γ—4, 8Γ—7, 11Γ—10 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) + - Increased super-heavy tanks grid sizes by 1Γ—1, up to 6Γ—5, 8Γ—8, 11Γ—11 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) +--------------------------------------------------------------------------------------------------- +Version: 0.16.3 +Date: 2018.11.12 + Balancing: + - To make heavy and super-heavy tanks more "heavy" feel in driving and targeting. + - Reduced heavy tanks turret rotation to 0.1. (was 0.3) + - Reduced heavy tanks chassis rotation to 0.002. (was 0.003) + - Reduced super-heavy tanks turret rotation to 0.025. (was 0.25) + - Reduced super-heavy tanks chassis rotation to 0.001. (was 0.0025) + Bugfixes: + - Resolved compatibility with mods "AAI Vehicles: Flame Tank" and "AAI Vehicles: Flame Tumbler", which replaced the flamethrower ammo with their own. +--------------------------------------------------------------------------------------------------- +Version: 0.16.2 +Date: 2018.11.10 + Features: + - Introduced new technologies on tanks and vehicles. Except for vanilla technology "Tanks" enable recipes of light tank and medium tank for "free", all other tanks and rocket artillery requires their dedicated new technology to unlock recipes. + - Introduced 2 new weapon: tank cannon (88 mm) and tank cannnon (128 mm). They replaced the main guns of heavy tanks and super-heavy tanks. + - Introduced 8 new cannon shells for the new high caliber tank cannons. + - Added extra cannon shell slot to super-heavy tanks, allow fast switch of shell type. + Balancing: + - Heavy and super-heavy tanks now even stronger in firepower and armour, but even slower and costs more. + - Introduced minimum range of all base cannon shells and autocannon shells to 5 (was none). + - Increased health of heavy tanks and super-heavy tanks, to base 3000 and 4000 respectively (was 2500, 3000). + - Increased vehicle energy shield equipment to recharge faster by 50%. + - Adjusted resistance of tanks MK1 and MK2 upgrade to scale better with late-game damage upgrades. + - Increased cost of super-heavy tanks, needing military science pack as ingredient. + Bugfixes: + - Adjusted options "collision box" now affecting explosive shells only, piercing properties of regular shells remains (was affecting all shells). + - Fixed range of all autocannon shells to have the correct value of 20. (was 25) + - Adjusted maximum range of tank cannon and all base cannon shells to 27. (was 25 on tank cannon, 30 on cannon shells) +--------------------------------------------------------------------------------------------------- +Version: 0.16.1 +Date: 2018.11.02 + Features: + - Options on tank flamethrower incendiary behaviour. (Can choose the same behvaiour as handheld and turret versions.) + Balancing: + - Rebalanced tanks engine energy consumption, affecting speed. + - Reduced super-heavy tanks burner effectivity to 0.5. (was 0.55) +--------------------------------------------------------------------------------------------------- +Version: 0.16.0 +Date: 2018.10.31 + Features: + - Introduced different classes of tanks, which fits and balances with the vanilla tank. + - Introduced 5 new tanks: light tank, medium tank, heavy tank, super-heavy tank, flame tank. + - Introduced 1 new auxiliary vehicle: rocket artillery. + - Introduced 5 upper tier tanks MK1. + - Introduced 5 upper tier tanks MK2. + - Introduced 2 smaller variants of fusion reactor equipment. + - Introduced 2 vehicle-only energy shield equipment. + - Introduced 2 vehicle-only battery equipment. + - Introduced 3 vehicle-only fuel cell. + - Introduced 1 vehicle-only nuclear reactor. + - Introduced special script to put equipment inside grid of ingredient tank back to inventory, or spilled over the ground, when handcrafted. (WARNING: Equipment still lost if crafted in assemblers.) + - Introudced 2 new ammo type: autocannon shells for light tanks. + - Introudced 1 new ammo type: explosive rocket pack for rocket artillery. + - Options on tanks MK1 & MK2 recipes. (Default: on.) + - Options on multiple rocket launcher recipes. (Default: on.) + - Options on vehicle grid on tanks series. (Default: 5Γ—4) + - Options on vehicle grid on tanks MK1 series. (Default: 7Γ—7) + - Options on vehicle grid on tanks MK2 series. (Default: 10Γ—10) + - Options on cannon collision box. (Default: on. Deals penetration damage but cannot fire over friendlies.) + - Options on autocannon collision box. (Default: off. Can fire over friendlies.) + - Options on discharge defense auto trigger. (Default: on. Enemies close enough will auto trigger.) + - Options on personal laser defense ammo category. (Can choose damage type to benefit from laser turret upgrades.) + Locale: + - English, German, traditional Chinese are available. + License: + - Using Bob's Copyright License. Document included. diff --git a/SchallTankPlatoon_1.1.2/config/config-1.lua b/SchallTankPlatoon/config/config-1.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/config/config-1.lua rename to SchallTankPlatoon/config/config-1.lua diff --git a/SchallTankPlatoon_1.1.2/control.lua b/SchallTankPlatoon/control.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/control.lua rename to SchallTankPlatoon/control.lua diff --git a/SchallTankPlatoon_1.1.2/data-final-fixes.lua b/SchallTankPlatoon/data-final-fixes.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/data-final-fixes.lua rename to SchallTankPlatoon/data-final-fixes.lua diff --git a/SchallTankPlatoon_1.1.2/data-updates.lua b/SchallTankPlatoon/data-updates.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/data-updates.lua rename to SchallTankPlatoon/data-updates.lua diff --git a/SchallTankPlatoon_1.1.2/data.lua b/SchallTankPlatoon/data.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/data.lua rename to SchallTankPlatoon/data.lua diff --git a/SchallTankPlatoon_1.1.2/graphics/color_luts/nightvision-mk1.png b/SchallTankPlatoon/graphics/color_luts/nightvision-mk1.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/color_luts/nightvision-mk1.png rename to SchallTankPlatoon/graphics/color_luts/nightvision-mk1.png diff --git a/SchallTankPlatoon_1.1.2/graphics/color_luts/nightvision-mk2.png b/SchallTankPlatoon/graphics/color_luts/nightvision-mk2.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/color_luts/nightvision-mk2.png rename to SchallTankPlatoon/graphics/color_luts/nightvision-mk2.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-corner-left.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-corner-left.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-corner-left.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-corner-left.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-corner-right.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-corner-right.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-corner-right.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-corner-right.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-ending-left.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-ending-left.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-ending-left.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-ending-left.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-ending-right.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-ending-right.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-ending-right.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-ending-right.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-filling.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-filling.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-filling.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-filling.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-gate.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-gate.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-gate.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-gate.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-horizontal.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-horizontal.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-horizontal.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-horizontal.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-patch.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-patch.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-patch.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-patch.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-single.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-single.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-single.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-single.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-t.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-t.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-t.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-t.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-vertical.png b/SchallTankPlatoon/graphics/entity/concrete-wall/wall-vertical.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/concrete-wall/wall-vertical.png rename to SchallTankPlatoon/graphics/entity/concrete-wall/wall-vertical.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/minimap/generic-map.png b/SchallTankPlatoon/graphics/entity/minimap/generic-map.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/minimap/generic-map.png rename to SchallTankPlatoon/graphics/entity/minimap/generic-map.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/minimap/tank-map.png b/SchallTankPlatoon/graphics/entity/minimap/tank-map.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/minimap/tank-map.png rename to SchallTankPlatoon/graphics/entity/minimap/tank-map.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/poison-capsule/hr-poison-capsule.png b/SchallTankPlatoon/graphics/entity/poison-capsule/hr-poison-capsule.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/poison-capsule/hr-poison-capsule.png rename to SchallTankPlatoon/graphics/entity/poison-capsule/hr-poison-capsule.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/poison-capsule/poison-capsule.png b/SchallTankPlatoon/graphics/entity/poison-capsule/poison-capsule.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/poison-capsule/poison-capsule.png rename to SchallTankPlatoon/graphics/entity/poison-capsule/poison-capsule.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/projectiles/poison-capsule-shadow.png b/SchallTankPlatoon/graphics/entity/projectiles/poison-capsule-shadow.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/projectiles/poison-capsule-shadow.png rename to SchallTankPlatoon/graphics/entity/projectiles/poison-capsule-shadow.png diff --git a/SchallTankPlatoon_1.1.2/graphics/entity/projectiles/poison-capsule.png b/SchallTankPlatoon/graphics/entity/projectiles/poison-capsule.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/entity/projectiles/poison-capsule.png rename to SchallTankPlatoon/graphics/entity/projectiles/poison-capsule.png diff --git a/SchallTankPlatoon_1.1.2/graphics/equipment/battery-equipment.png b/SchallTankPlatoon/graphics/equipment/battery-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/equipment/battery-equipment.png rename to SchallTankPlatoon/graphics/equipment/battery-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/equipment/battery-mk2-equipment.png b/SchallTankPlatoon/graphics/equipment/battery-mk2-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/equipment/battery-mk2-equipment.png rename to SchallTankPlatoon/graphics/equipment/battery-mk2-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/equipment/vehicle-battery-equipment.png b/SchallTankPlatoon/graphics/equipment/vehicle-battery-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/equipment/vehicle-battery-equipment.png rename to SchallTankPlatoon/graphics/equipment/vehicle-battery-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/equipment/vehicle-battery-mk2-equipment.png b/SchallTankPlatoon/graphics/equipment/vehicle-battery-mk2-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/equipment/vehicle-battery-mk2-equipment.png rename to SchallTankPlatoon/graphics/equipment/vehicle-battery-mk2-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/H1.png b/SchallTankPlatoon/graphics/icons/H1.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/H1.png rename to SchallTankPlatoon/graphics/icons/H1.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/H2.png b/SchallTankPlatoon/graphics/icons/H2.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/H2.png rename to SchallTankPlatoon/graphics/icons/H2.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/basic-rocket.png b/SchallTankPlatoon/graphics/icons/basic-rocket.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/basic-rocket.png rename to SchallTankPlatoon/graphics/icons/basic-rocket.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/battery-equipment.png b/SchallTankPlatoon/graphics/icons/battery-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/battery-equipment.png rename to SchallTankPlatoon/graphics/icons/battery-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/battery-mk2-equipment.png b/SchallTankPlatoon/graphics/icons/battery-mk2-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/battery-mk2-equipment.png rename to SchallTankPlatoon/graphics/icons/battery-mk2-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/concrete-gate.png b/SchallTankPlatoon/graphics/icons/concrete-gate.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/concrete-gate.png rename to SchallTankPlatoon/graphics/icons/concrete-gate.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/concrete-wall.png b/SchallTankPlatoon/graphics/icons/concrete-wall.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/concrete-wall.png rename to SchallTankPlatoon/graphics/icons/concrete-wall.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/explosive-autocannon-shell.png b/SchallTankPlatoon/graphics/icons/explosive-autocannon-shell.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/explosive-autocannon-shell.png rename to SchallTankPlatoon/graphics/icons/explosive-autocannon-shell.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/explosive-rocket-pack.png b/SchallTankPlatoon/graphics/icons/explosive-rocket-pack.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/explosive-rocket-pack.png rename to SchallTankPlatoon/graphics/icons/explosive-rocket-pack.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/explosive-uranium-autocannon-shell.png b/SchallTankPlatoon/graphics/icons/explosive-uranium-autocannon-shell.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/explosive-uranium-autocannon-shell.png rename to SchallTankPlatoon/graphics/icons/explosive-uranium-autocannon-shell.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/incendiary-autocannon-shell.png b/SchallTankPlatoon/graphics/icons/incendiary-autocannon-shell.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/incendiary-autocannon-shell.png rename to SchallTankPlatoon/graphics/icons/incendiary-autocannon-shell.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/mk1.png b/SchallTankPlatoon/graphics/icons/mk1.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/mk1.png rename to SchallTankPlatoon/graphics/icons/mk1.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/mk2.png b/SchallTankPlatoon/graphics/icons/mk2.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/mk2.png rename to SchallTankPlatoon/graphics/icons/mk2.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/poison-capsule.png b/SchallTankPlatoon/graphics/icons/poison-capsule.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/poison-capsule.png rename to SchallTankPlatoon/graphics/icons/poison-capsule.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/rocket-to-tint-H.png b/SchallTankPlatoon/graphics/icons/rocket-to-tint-H.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/rocket-to-tint-H.png rename to SchallTankPlatoon/graphics/icons/rocket-to-tint-H.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/rocket-to-tint-M.png b/SchallTankPlatoon/graphics/icons/rocket-to-tint-M.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/rocket-to-tint-M.png rename to SchallTankPlatoon/graphics/icons/rocket-to-tint-M.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/sniper-bullet.png b/SchallTankPlatoon/graphics/icons/sniper-bullet.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/sniper-bullet.png rename to SchallTankPlatoon/graphics/icons/sniper-bullet.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/sniper-rifle.png b/SchallTankPlatoon/graphics/icons/sniper-rifle.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/sniper-rifle.png rename to SchallTankPlatoon/graphics/icons/sniper-rifle.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/tank-equipment.png b/SchallTankPlatoon/graphics/icons/tank-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/tank-equipment.png rename to SchallTankPlatoon/graphics/icons/tank-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/tank-to-tint.png b/SchallTankPlatoon/graphics/icons/tank-to-tint.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/tank-to-tint.png rename to SchallTankPlatoon/graphics/icons/tank-to-tint.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/train-equipment.png b/SchallTankPlatoon/graphics/icons/train-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/train-equipment.png rename to SchallTankPlatoon/graphics/icons/train-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/vehicle-battery-equipment.png b/SchallTankPlatoon/graphics/icons/vehicle-battery-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/vehicle-battery-equipment.png rename to SchallTankPlatoon/graphics/icons/vehicle-battery-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/vehicle-battery-mk2-equipment.png b/SchallTankPlatoon/graphics/icons/vehicle-battery-mk2-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/vehicle-battery-mk2-equipment.png rename to SchallTankPlatoon/graphics/icons/vehicle-battery-mk2-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/icons/vehicle-fuel-cell.png b/SchallTankPlatoon/graphics/icons/vehicle-fuel-cell.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/icons/vehicle-fuel-cell.png rename to SchallTankPlatoon/graphics/icons/vehicle-fuel-cell.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/H1.png b/SchallTankPlatoon/graphics/technology/H1.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/H1.png rename to SchallTankPlatoon/graphics/technology/H1.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/H2.png b/SchallTankPlatoon/graphics/technology/H2.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/H2.png rename to SchallTankPlatoon/graphics/technology/H2.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/concrete-wall.png b/SchallTankPlatoon/graphics/technology/concrete-wall.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/concrete-wall.png rename to SchallTankPlatoon/graphics/technology/concrete-wall.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/ht-RA.png b/SchallTankPlatoon/graphics/technology/ht-RA.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/ht-RA.png rename to SchallTankPlatoon/graphics/technology/ht-RA.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/repair-pack.png b/SchallTankPlatoon/graphics/technology/repair-pack.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/repair-pack.png rename to SchallTankPlatoon/graphics/technology/repair-pack.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/sniper-rifle.png b/SchallTankPlatoon/graphics/technology/sniper-rifle.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/sniper-rifle.png rename to SchallTankPlatoon/graphics/technology/sniper-rifle.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-F.png b/SchallTankPlatoon/graphics/technology/tank-F.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-F.png rename to SchallTankPlatoon/graphics/technology/tank-F.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-H.png b/SchallTankPlatoon/graphics/technology/tank-H.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-H.png rename to SchallTankPlatoon/graphics/technology/tank-H.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-L.png b/SchallTankPlatoon/graphics/technology/tank-L.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-L.png rename to SchallTankPlatoon/graphics/technology/tank-L.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-M.png b/SchallTankPlatoon/graphics/technology/tank-M.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-M.png rename to SchallTankPlatoon/graphics/technology/tank-M.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-SH.png b/SchallTankPlatoon/graphics/technology/tank-SH.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-SH.png rename to SchallTankPlatoon/graphics/technology/tank-SH.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/tank-equipment.png b/SchallTankPlatoon/graphics/technology/tank-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/tank-equipment.png rename to SchallTankPlatoon/graphics/technology/tank-equipment.png diff --git a/SchallTankPlatoon_1.1.2/graphics/technology/train-equipment.png b/SchallTankPlatoon/graphics/technology/train-equipment.png similarity index 100% rename from SchallTankPlatoon_1.1.2/graphics/technology/train-equipment.png rename to SchallTankPlatoon/graphics/technology/train-equipment.png diff --git a/SchallTankPlatoon_1.1.2/info.json b/SchallTankPlatoon/info.json similarity index 100% rename from SchallTankPlatoon_1.1.2/info.json rename to SchallTankPlatoon/info.json diff --git a/SchallTankPlatoon_1.1.2/lib/TPcp.lua b/SchallTankPlatoon/lib/TPcp.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/lib/TPcp.lua rename to SchallTankPlatoon/lib/TPcp.lua diff --git a/SchallTankPlatoon_1.1.2/lib/TPlib.lua b/SchallTankPlatoon/lib/TPlib.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/lib/TPlib.lua rename to SchallTankPlatoon/lib/TPlib.lua diff --git a/SchallTankPlatoon_1.1.2/lib/TPpt.lua b/SchallTankPlatoon/lib/TPpt.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/lib/TPpt.lua rename to SchallTankPlatoon/lib/TPpt.lua diff --git a/SchallTankPlatoon_1.1.2/lib/base-pt.lua b/SchallTankPlatoon/lib/base-pt.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/lib/base-pt.lua rename to SchallTankPlatoon/lib/base-pt.lua diff --git a/SchallTankPlatoon_1.1.2/license.txt b/SchallTankPlatoon/license.txt similarity index 100% rename from SchallTankPlatoon_1.1.2/license.txt rename to SchallTankPlatoon/license.txt diff --git a/SchallTankPlatoon_1.1.2/locale/en/SchallTankPlatoon.cfg b/SchallTankPlatoon/locale/en/SchallTankPlatoon.cfg similarity index 100% rename from SchallTankPlatoon_1.1.2/locale/en/SchallTankPlatoon.cfg rename to SchallTankPlatoon/locale/en/SchallTankPlatoon.cfg diff --git a/SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.16.6.json b/SchallTankPlatoon/migrations/SchallTankPlatoon_0.16.6.json similarity index 100% rename from SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.16.6.json rename to SchallTankPlatoon/migrations/SchallTankPlatoon_0.16.6.json diff --git a/SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.16.7.json b/SchallTankPlatoon/migrations/SchallTankPlatoon_0.16.7.json similarity index 100% rename from SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.16.7.json rename to SchallTankPlatoon/migrations/SchallTankPlatoon_0.16.7.json diff --git a/SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.17.13.lua b/SchallTankPlatoon/migrations/SchallTankPlatoon_0.17.13.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.17.13.lua rename to SchallTankPlatoon/migrations/SchallTankPlatoon_0.17.13.lua diff --git a/SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.17.3.json b/SchallTankPlatoon/migrations/SchallTankPlatoon_0.17.3.json similarity index 100% rename from SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_0.17.3.json rename to SchallTankPlatoon/migrations/SchallTankPlatoon_0.17.3.json diff --git a/SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_1.1.0.json b/SchallTankPlatoon/migrations/SchallTankPlatoon_1.1.0.json similarity index 100% rename from SchallTankPlatoon_1.1.2/migrations/SchallTankPlatoon_1.1.0.json rename to SchallTankPlatoon/migrations/SchallTankPlatoon_1.1.0.json diff --git a/SchallTankPlatoon_1.1.2/prototypes/ammo-category.lua b/SchallTankPlatoon/prototypes/ammo-category.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/ammo-category.lua rename to SchallTankPlatoon/prototypes/ammo-category.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/ammo.lua b/SchallTankPlatoon/prototypes/ammo.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/ammo.lua rename to SchallTankPlatoon/prototypes/ammo.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/bullets.lua b/SchallTankPlatoon/prototypes/bullets.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/bullets.lua rename to SchallTankPlatoon/prototypes/bullets.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/entities-walls.lua b/SchallTankPlatoon/prototypes/entities-walls.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/entities-walls.lua rename to SchallTankPlatoon/prototypes/entities-walls.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/entities.lua b/SchallTankPlatoon/prototypes/entities.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/entities.lua rename to SchallTankPlatoon/prototypes/entities.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/equipment-category.lua b/SchallTankPlatoon/prototypes/equipment-category.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/equipment-category.lua rename to SchallTankPlatoon/prototypes/equipment-category.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/equipment.lua b/SchallTankPlatoon/prototypes/equipment.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/equipment.lua rename to SchallTankPlatoon/prototypes/equipment.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/explosion-animations.lua b/SchallTankPlatoon/prototypes/explosion-animations.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/explosion-animations.lua rename to SchallTankPlatoon/prototypes/explosion-animations.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/explosions.lua b/SchallTankPlatoon/prototypes/explosions.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/explosions.lua rename to SchallTankPlatoon/prototypes/explosions.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/gun.lua b/SchallTankPlatoon/prototypes/gun.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/gun.lua rename to SchallTankPlatoon/prototypes/gun.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/item-groups.lua b/SchallTankPlatoon/prototypes/item-groups.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/item-groups.lua rename to SchallTankPlatoon/prototypes/item-groups.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/item.lua b/SchallTankPlatoon/prototypes/item.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/item.lua rename to SchallTankPlatoon/prototypes/item.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/projectiles.lua b/SchallTankPlatoon/prototypes/projectiles.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/projectiles.lua rename to SchallTankPlatoon/prototypes/projectiles.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/recipe.lua b/SchallTankPlatoon/prototypes/recipe.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/recipe.lua rename to SchallTankPlatoon/prototypes/recipe.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/tanks.lua b/SchallTankPlatoon/prototypes/tanks.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/tanks.lua rename to SchallTankPlatoon/prototypes/tanks.lua diff --git a/SchallTankPlatoon_1.1.2/prototypes/technology.lua b/SchallTankPlatoon/prototypes/technology.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/prototypes/technology.lua rename to SchallTankPlatoon/prototypes/technology.lua diff --git a/SchallTankPlatoon_1.1.2/settings.lua b/SchallTankPlatoon/settings.lua similarity index 100% rename from SchallTankPlatoon_1.1.2/settings.lua rename to SchallTankPlatoon/settings.lua diff --git a/SchallTankPlatoon_1.1.2/sound/sniper-rifle-gunshot.ogg b/SchallTankPlatoon/sound/sniper-rifle-gunshot.ogg similarity index 100% rename from SchallTankPlatoon_1.1.2/sound/sniper-rifle-gunshot.ogg rename to SchallTankPlatoon/sound/sniper-rifle-gunshot.ogg diff --git a/SchallTankPlatoon_1.1.2/thumbnail.png b/SchallTankPlatoon/thumbnail.png similarity index 100% rename from SchallTankPlatoon_1.1.2/thumbnail.png rename to SchallTankPlatoon/thumbnail.png diff --git a/SchallTankPlatoon_1.1.2/changelog.txt b/SchallTankPlatoon_1.1.2/changelog.txt deleted file mode 100644 index 29b98ecd..00000000 --- a/SchallTankPlatoon_1.1.2/changelog.txt +++ /dev/null @@ -1,482 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2023.10.11 - Changes: - - Additional checks to handle the more complicated 1.1.83 prototype definitions. ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2020.12.13 - Bugfixes: - - Fixed values from grid sizes were not set as integers. ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 2020.12.13 - Bugfixes: - - Fixed values from grid sizes were not set as integers. ---------------------------------------------------------------------------------------------------- -Version: 0.18.11 -Date: 2020.12.13 - Bugfixes: - - Fixed values from grid sizes were not set as integers. ---------------------------------------------------------------------------------------------------- -Version: 0.17.23 -Date: 2020.12.13 - Bugfixes: - - Fixed values from grid sizes were not set as integers. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2020.12.07 - Features: - - Updated to 1.1. - - Options on minimap representation. - Changes: - - Adjusted prototypes to base game 1.1.0 standard. - - Renamed techs to base game 1.1.0 standard. - - Rewritten library code, to handle the more complicated 1.1.0 prototype definitions. - Graphics: - - Upgraded technology mipmap icons to size 256. - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2020.11.20 - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 0.18.10 -Date: 2020.11.20 - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 0.17.22 -Date: 2020.11.20 - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2020.09.30 - Features: - - Options on enable bullet projectile. (Default: Off.) - Bugfixes: - - Additional checks on reading and changing vanilla properties, in case another mod mess with them. - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 0.18.9 -Date: 2020.09.30 - Features: - - Options on enable bullet projectile. (Default: Off.) - Bugfixes: - - Additional checks on reading and changing vanilla properties, in case another mod mess with them. - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 0.17.21 -Date: 2020.09.30 - Features: - - Options on enable bullet projectile. (Default: Off.) - Bugfixes: - - Additional checks on reading and changing vanilla properties, in case another mod mess with them. - Optimisations: - - Minor code refactoring. ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2020.08.27 - Features: - - Extra options on adjusting energy settings of personal laser defense. - - Applied options on hide vehicle resistances on Spidertron. - Bugfixes: - - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. - Optimisations: - - Code refactoring. - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.18.8 -Date: 2020.08.27 - Features: - - Extra options on adjusting energy settings of personal laser defense. - Bugfixes: - - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. - Optimisations: - - Code refactoring. - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.17.20 -Date: 2020.08.27 - Features: - - Extra options on adjusting energy settings of personal laser defense. - Bugfixes: - - Fixed issue about personal laser defense equipment firing, when shot energy is set higher than buffer capacity. - Optimisations: - - Code refactoring. - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2020.08.20 - Features: - - Updated to 1.0. - - Allows vehicle equipment (from this mod and Schall mod series) to be used on Spidertron, considered the same class restrictions as Medium tanks. - Changes: - - Adjusted prototypes to base game 1.0.0 standard. ---------------------------------------------------------------------------------------------------- -Version: 0.18.7 -Date: 2020.08.20 - Features: - - Introduced vehicle clone placement, to insert (will not replace) the same set of fuel, ammo and grid equipment like the source vehicle. Items are taken from player inventory, as if manual item transfers taking place. - - Vehicle clone placement on building the identical type of vehicle, as the vehicle the player is driving on. - - Vehicle clone placement on pasting entity settings over vehicle (by hotkey), as the source vehicle copied from. - - Options on vehicle clone placement on built. (Default: on.) - - Options on vehicle clone placement on pasted. (Default: on.) - Optimisations: - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.17.19 -Date: 2020.08.20 - Features: - - Introduced vehicle clone placement, to insert (will not replace) the same set of fuel, ammo and grid equipment like the source vehicle. Items are taken from player inventory, as if manual item transfers taking place. - - Vehicle clone placement on building the identical type of vehicle, as the vehicle the player is driving on. - - Vehicle clone placement on pasting entity settings over vehicle (by hotkey), as the source vehicle copied from. - - Options on vehicle clone placement on built. (Default: on.) - - Options on vehicle clone placement on pasted. (Default: on.) - Optimisations: - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.18.6 -Date: 2020.08.08 - Balancing: - - Increased sniper rifle range to 48. (was 40) - - Sniper rifle uses target priority on units with higher health. - - High-caliber tank cannons use target priority on units with higher health. - Optimisations: - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.17.18 -Date: 2020.08.08 - Balancing: - - Increased sniper rifle range to 48. (was 40) - - Sniper rifle uses target priority on units with higher health. - - High-caliber tank cannons use target priority on units with higher health. - Optimisations: - - Improved library code. ---------------------------------------------------------------------------------------------------- -Version: 0.18.5 -Date: 2020.05.31 - Bugfixes: - - Fixed issue about equipment removal, when vehicles are used in crafting. - Graphics: - - Updated mipmap icons to base game 0.18.27 standard. ---------------------------------------------------------------------------------------------------- -Version: 0.17.17 -Date: 2020.05.31 - Bugfixes: - - Fixed issue about equipment removal, when vehicles are used in crafting. ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 2020.04.30 - Bugfixes: - - Fixed equipment not saved, when vehicles are mined. ---------------------------------------------------------------------------------------------------- -Version: 0.17.16 -Date: 2020.04.30 - Bugfixes: - - Fixed equipment not saved, when vehicles are mined. ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 2020.04.11 - Features: - - Sniper rifle now can use both vanilla bullets and sniper bullets. (was sniper bullets only after 0.17.13; was vanilla bullets before 0.17.12.) - - Options on hide vehicle resistances. (Default: on.) - Balancing: - - Readjusted tank and half-track resistances. - - Increased amount of fire flames and damage of incendiary and napalm ammo. - - Sniper rifle now has warmup time. (was having a long cooldown only.) - - Reduced sniper rifle to +300% damage bonus. (was +700%) - - Increased sniper bullets damage to double over vanilla bullets. (was the same.) - Changes: - - Adjusted prototypes to base game 0.18.18 standard. - - Changed the order of rocket artillery. - Optimisations: - - Code refactoring. - Locale: - - Moved some entries from "Schall Alien Tech". ---------------------------------------------------------------------------------------------------- -Version: 0.17.15 -Date: 2020.04.11 - Features: - - Options on hide vehicle resistances. (Default: on.) - Balancing: - - Readjusted tank and half-track resistances. - - Increased amount of fire flames and damage of incendiary and napalm ammo. - - Sniper rifle now has warmup time. (was having a long cooldown only.) - - Reduced sniper rifle to +300% damage bonus. (was +700%) - - Increased sniper bullets damage to double over vanilla bullets. (was the same.) - Changes: - - Changed the order of rocket artillery. - Optimisations: - - Code refactoring. - Locale: - - Moved some entries from "Schall Alien Tech". ---------------------------------------------------------------------------------------------------- -Version: 0.18.2 -Date: 2020.02.20 - Features: - - Support extension mod "Schall Missile Command", which introduced strategic missiles and countermeasures. - - Introduced parts subgroups. - - Introduced own poison capsule and poison cloud, cloned from base game 0.18.6. (Base game 0.18.7 new visual has hurt FPS/UPS too much.) - Graphics: - - Own poison cloud uses render layer "lower-object-above-shadow", in order not to obscure entities like the 0.18.7 visuals. ---------------------------------------------------------------------------------------------------- -Version: 0.17.14 -Date: 2020.02.20 - Features: - - Support extension mod "Schall Missile Command", which introduced strategic missiles and countermeasures. - - Introduced parts subgroups. - Bugfixes: - - Now check and restore fast replaceable group of vanilla stone wall and gate, in case another mod mess with them. ---------------------------------------------------------------------------------------------------- -Version: 0.18.1 -Date: 2020.02.18 - Changes: - - Adjusted poison capsule and poison cloud to base game 0.18.7 standard. - Bugfixes: - - Now check and restore fast replaceable group of vanilla stone wall and gate, in case another mod mess with them. ---------------------------------------------------------------------------------------------------- -Version: 0.18.0 -Date: 2020.02.04 - Features: - - Updated to 0.18. - Changes: - - Adjusted sounds to base game 0.18.2 standard. - Balancing: - - Reduced the number of fuel slots in Vehicle fuel cell 2Γ—2 to 1. (was 2) - - Reduced the number of fuel slots in Vehicle fuel cell 3Γ—3 to 2. (was 3) - - Reduced the number of fuel slots in Vehicle fuel cell 4Γ—4 to 3. (was 4) - Graphics: - - Updated explosions for autocannon shells and napalm. - - Added colour LUTs for Nightvision equipment. - - Upgraded mipmap icons to size 64 or 128. - - Replaced graphics for Battery equipment, if option "Enable Vehicle battery" is checked. ---------------------------------------------------------------------------------------------------- -Version: 0.17.13 -Date: 2020.01.29 - Features: - - Introduced 3 new ammo types, as magazines for sniper rifle. - Changes: - - Sniper rifle uses new dedicated magazines now. (was sharing magazines with submachine guns.) - Locale: - - All locale are moved to separate mod "Schall Language Pack". ---------------------------------------------------------------------------------------------------- -Version: 0.17.12 -Date: 2019.11.21 - Changes: - - Added acid resistance of concrete wall and concrete gate. (As par 0/70% in base game 0.17.46; was none previously) - - Increased repair speed modifier of concrete wall to 3. (was 2) ---------------------------------------------------------------------------------------------------- -Version: 0.17.11 -Date: 2019.11.07 - Changes: - - Changed the need of fusion reactor equipment to processing units in all recipes of heavy (or above) MK1 tanks. ---------------------------------------------------------------------------------------------------- -Version: 0.17.10 -Date: 2019.09.07 - Changes: - - Adjusted graphics to base game 0.17.67 standard. ---------------------------------------------------------------------------------------------------- -Version: 0.17.9 -Date: 2019.07.25 - Locale: - - Brazilian Portuguese, Spanish are available. (Credit to NickFury23.) ---------------------------------------------------------------------------------------------------- -Version: 0.17.8 -Date: 2019.07.04 - Locale: - - Introduced localized string mod settings. - - Removed redundant strings. - Balancing: - - Options on adjusting energy settings of personal laser defense. (50 kJ per shot in base game 0.17; was 200 kJ per shot in base game 0.16.51) ---------------------------------------------------------------------------------------------------- -Version: 0.17.7 -Date: 2019.06.13 - Features: - - Options on using chemical recipes for chemical weapons, including poison capsule, poison bomb. - Balancing: - - Changed acid resistance of medium tank. (As par 0/70% in base game 0.17.46; was 0/50% in base game 0.17) Other tanks change accordingly. ---------------------------------------------------------------------------------------------------- -Version: 0.17.6 -Date: 2019.05.16 - Features: - - Support group mod "Transport Group", where all vehicles and vehicle-only equipment are moved into "Transport" group tab. - - Options on using tiered military subgroups. (Default: off.) - - Options on cannon force condition. (Default: "all". Deals penetration damage but cannot fire over friendlies.) - - Options on autocannon force condition. (Default: "not-friend". Can fire over friendlies.) - Changes: - - Removed options on collision box, since force condition checks are superior. ---------------------------------------------------------------------------------------------------- -Version: 0.17.5 -Date: 2019.05.06 - Features: - - Introduced 1 new ammo type: poison bomb. - - Options on rearrange ammo colour, including basic rocket, poison capsule, poison cloud. (Default: on.) - Changes: - - Renamed technology names to base game 0.17.35 standard. - - Changed migration script. ---------------------------------------------------------------------------------------------------- -Version: 0.17.4 -Date: 2019.04.04 - Bugfixes: - - Fixed issue caused by older migration script in 0.17.3. ---------------------------------------------------------------------------------------------------- -Version: 0.17.3 -Date: 2019.04.04 - Changes: - - Renamed techs, items, entities to comply with 0.17.23 new requirement of contiguous levels. ---------------------------------------------------------------------------------------------------- -Version: 0.17.2 -Date: 2019.03.14 - Features: - - Support extension mod "Schall Artillery", on more artillery shell types. - Changes: - - Renamed various equipment to 0.17 new names. ---------------------------------------------------------------------------------------------------- -Version: 0.17.1 -Date: 2019.03.07 - Features: - - Support extension mod "Schall Gun Pod", on more equipment usable on trains in "Schall Armoured Train". - Changes: - - Changed recipes of portable fusion generators using low density structures. (As par Portable fusion generator.) ---------------------------------------------------------------------------------------------------- -Version: 0.17.0 -Date: 2019.03.01 - Features: - - Updated to 0.17. - Balancing: - - Increased multiple rocket launcher range to 36. (was 25) - - Increased tactical missile launcher range to 48. (was 40) - - Increased sniper rifle range to 40. (was 36) - - Increased tank machine gun damage bonus to +50%. (was none in base game 0.17; was +100% in base game 0.16) - - Increased tank cannon (all variations) and tank autocannon damage bonus to +50%. (was none) - - Increased health on most tanks. - Changes: - - Removed options on personal laser defense ammo category. - - Changed recipes of tank MK2 upgrades using modules level 2. (As par Power armor MK2.) - - Changed energy consumption and efficiency on tanks. - - Changed acid resistance of medium tank. (As par 0/50% in base game 0.17; was 15/50% in base game 0.16) Other tanks change accordingly. ---------------------------------------------------------------------------------------------------- -Version: 0.16.7 -Date: 2019.02.21 - Features: - - Introduced 2 new repair packs. - - Options on repair pack techs. (Default: on.) - - Added flying text on equipment removal information. - Changes: - - Added upgradable flags to various tech. - - Renamed internal name with prefix as precaution to avoid potential conflicts. ---------------------------------------------------------------------------------------------------- -Version: 0.16.6 -Date: 2019.01.18 - Features: - - Support extension mod "Schall Alien Tech", which introduced alternate weaponry, MK3 armor and MK3 tanks. - - Introduced 2 new night vision equipment. - - Introduced MK1 and MK2 upgrades for rocket artillery. - - Introduced concrete wall and concrete gate. - - Options on night vision equipment techs. (Default: on.) - - Options on concrete walls tech. (Default: on.) - Balancing: - - Buffed sniper rifle to +700% damage bonus. (was +300%) - - Gave electric resistances to stone wall and stone gate. - Changes: - - Readjusted colour of flame tank and rocket artillery. - - Renamed tanks tech to make the code much cleaner. - - Renamed mod settings name to be more accurate. - Bugfixes: - - Fixed recipes of new portable fusion reactors not unlocked, when loading save game with Fusion Reactor tech already researched. - - Fixed recipe of super-heavy tank in expensive mode, now requiring military science pack too. ---------------------------------------------------------------------------------------------------- -Version: 0.16.5 -Date: 2018.12.20 - Features: - - Introduced 1 new weapon: sniper rifle. - - Introduced notification message displaying number of equipment taken out from grid, when a vehicle is used as an ingredient during handcraft. (was returning equipment but without notification.) - Locale: - - Simplified Chinese is available. - - Russian is available. (Credit to John_TheCF.) ---------------------------------------------------------------------------------------------------- -Version: 0.16.4 -Date: 2018.11.22 - Features: - - Support auxiliary mod "Schall Gun Pod", which introduced various ammo-consuming vehicle-only defense equipment. - - Introduced 3 new incendiary ammo: incendiary autocannon shell (20 mm), incendiary rocket, napalm bomb. - Balancing: - - All MK1 tanks have +5 / 20% laser and electric resistance. (was none) - - All MK2 tanks have +10 / 40% laser and electric resistance. (was none) - - Reduced light tanks grid sizes by 1Γ—1, down to 4Γ—3, 6Γ—6, 9Γ—9 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) - - Increased heavy tanks grid sizes by 1Γ—0, up to 6Γ—4, 8Γ—7, 11Γ—10 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) - - Increased super-heavy tanks grid sizes by 1Γ—1, up to 6Γ—5, 8Γ—8, 11Γ—11 respectively. (were 5Γ—4, 7Γ—7, 10Γ—10) ---------------------------------------------------------------------------------------------------- -Version: 0.16.3 -Date: 2018.11.12 - Balancing: - - To make heavy and super-heavy tanks more "heavy" feel in driving and targeting. - - Reduced heavy tanks turret rotation to 0.1. (was 0.3) - - Reduced heavy tanks chassis rotation to 0.002. (was 0.003) - - Reduced super-heavy tanks turret rotation to 0.025. (was 0.25) - - Reduced super-heavy tanks chassis rotation to 0.001. (was 0.0025) - Bugfixes: - - Resolved compatibility with mods "AAI Vehicles: Flame Tank" and "AAI Vehicles: Flame Tumbler", which replaced the flamethrower ammo with their own. ---------------------------------------------------------------------------------------------------- -Version: 0.16.2 -Date: 2018.11.10 - Features: - - Introduced new technologies on tanks and vehicles. Except for vanilla technology "Tanks" enable recipes of light tank and medium tank for "free", all other tanks and rocket artillery requires their dedicated new technology to unlock recipes. - - Introduced 2 new weapon: tank cannon (88 mm) and tank cannnon (128 mm). They replaced the main guns of heavy tanks and super-heavy tanks. - - Introduced 8 new cannon shells for the new high caliber tank cannons. - - Added extra cannon shell slot to super-heavy tanks, allow fast switch of shell type. - Balancing: - - Heavy and super-heavy tanks now even stronger in firepower and armour, but even slower and costs more. - - Introduced minimum range of all base cannon shells and autocannon shells to 5 (was none). - - Increased health of heavy tanks and super-heavy tanks, to base 3000 and 4000 respectively (was 2500, 3000). - - Increased vehicle energy shield equipment to recharge faster by 50%. - - Adjusted resistance of tanks MK1 and MK2 upgrade to scale better with late-game damage upgrades. - - Increased cost of super-heavy tanks, needing military science pack as ingredient. - Bugfixes: - - Adjusted options "collision box" now affecting explosive shells only, piercing properties of regular shells remains (was affecting all shells). - - Fixed range of all autocannon shells to have the correct value of 20. (was 25) - - Adjusted maximum range of tank cannon and all base cannon shells to 27. (was 25 on tank cannon, 30 on cannon shells) ---------------------------------------------------------------------------------------------------- -Version: 0.16.1 -Date: 2018.11.02 - Features: - - Options on tank flamethrower incendiary behaviour. (Can choose the same behvaiour as handheld and turret versions.) - Balancing: - - Rebalanced tanks engine energy consumption, affecting speed. - - Reduced super-heavy tanks burner effectivity to 0.5. (was 0.55) ---------------------------------------------------------------------------------------------------- -Version: 0.16.0 -Date: 2018.10.31 - Features: - - Introduced different classes of tanks, which fits and balances with the vanilla tank. - - Introduced 5 new tanks: light tank, medium tank, heavy tank, super-heavy tank, flame tank. - - Introduced 1 new auxiliary vehicle: rocket artillery. - - Introduced 5 upper tier tanks MK1. - - Introduced 5 upper tier tanks MK2. - - Introduced 2 smaller variants of fusion reactor equipment. - - Introduced 2 vehicle-only energy shield equipment. - - Introduced 2 vehicle-only battery equipment. - - Introduced 3 vehicle-only fuel cell. - - Introduced 1 vehicle-only nuclear reactor. - - Introduced special script to put equipment inside grid of ingredient tank back to inventory, or spilled over the ground, when handcrafted. (WARNING: Equipment still lost if crafted in assemblers.) - - Introudced 2 new ammo type: autocannon shells for light tanks. - - Introudced 1 new ammo type: explosive rocket pack for rocket artillery. - - Options on tanks MK1 & MK2 recipes. (Default: on.) - - Options on multiple rocket launcher recipes. (Default: on.) - - Options on vehicle grid on tanks series. (Default: 5Γ—4) - - Options on vehicle grid on tanks MK1 series. (Default: 7Γ—7) - - Options on vehicle grid on tanks MK2 series. (Default: 10Γ—10) - - Options on cannon collision box. (Default: on. Deals penetration damage but cannot fire over friendlies.) - - Options on autocannon collision box. (Default: off. Can fire over friendlies.) - - Options on discharge defense auto trigger. (Default: on. Enemies close enough will auto trigger.) - - Options on personal laser defense ammo category. (Can choose damage type to benefit from laser turret upgrades.) - Locale: - - English, German, traditional Chinese are available. - License: - - Using Bob's Copyright License. Document included. diff --git a/Shield-FX_0.18.4/changelog.txt b/Shield-FX/changelog.txt similarity index 100% rename from Shield-FX_0.18.4/changelog.txt rename to Shield-FX/changelog.txt diff --git a/Shield-FX_0.18.4/control.lua b/Shield-FX/control.lua similarity index 100% rename from Shield-FX_0.18.4/control.lua rename to Shield-FX/control.lua diff --git a/Shield-FX_0.18.4/data-updates.lua b/Shield-FX/data-updates.lua similarity index 100% rename from Shield-FX_0.18.4/data-updates.lua rename to Shield-FX/data-updates.lua diff --git a/Shield-FX_0.18.4/graphics/base-research.png b/Shield-FX/graphics/base-research.png similarity index 100% rename from Shield-FX_0.18.4/graphics/base-research.png rename to Shield-FX/graphics/base-research.png diff --git a/Shield-FX_0.18.4/graphics/blank.png b/Shield-FX/graphics/blank.png similarity index 100% rename from Shield-FX_0.18.4/graphics/blank.png rename to Shield-FX/graphics/blank.png diff --git a/Shield-FX_0.18.4/graphics/blueprint.png b/Shield-FX/graphics/blueprint.png similarity index 100% rename from Shield-FX_0.18.4/graphics/blueprint.png rename to Shield-FX/graphics/blueprint.png diff --git a/Shield-FX_0.18.4/graphics/entity_icon.png b/Shield-FX/graphics/entity_icon.png similarity index 100% rename from Shield-FX_0.18.4/graphics/entity_icon.png rename to Shield-FX/graphics/entity_icon.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-0.png b/Shield-FX/graphics/liquid-square-0.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-0.png rename to Shield-FX/graphics/liquid-square-0.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-1.png b/Shield-FX/graphics/liquid-square-1.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-1.png rename to Shield-FX/graphics/liquid-square-1.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-10.png b/Shield-FX/graphics/liquid-square-10.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-10.png rename to Shield-FX/graphics/liquid-square-10.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-11.png b/Shield-FX/graphics/liquid-square-11.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-11.png rename to Shield-FX/graphics/liquid-square-11.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-12.png b/Shield-FX/graphics/liquid-square-12.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-12.png rename to Shield-FX/graphics/liquid-square-12.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-2.png b/Shield-FX/graphics/liquid-square-2.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-2.png rename to Shield-FX/graphics/liquid-square-2.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-3.png b/Shield-FX/graphics/liquid-square-3.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-3.png rename to Shield-FX/graphics/liquid-square-3.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-4.png b/Shield-FX/graphics/liquid-square-4.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-4.png rename to Shield-FX/graphics/liquid-square-4.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-5.png b/Shield-FX/graphics/liquid-square-5.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-5.png rename to Shield-FX/graphics/liquid-square-5.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-6.png b/Shield-FX/graphics/liquid-square-6.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-6.png rename to Shield-FX/graphics/liquid-square-6.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-7.png b/Shield-FX/graphics/liquid-square-7.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-7.png rename to Shield-FX/graphics/liquid-square-7.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-8.png b/Shield-FX/graphics/liquid-square-8.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-8.png rename to Shield-FX/graphics/liquid-square-8.png diff --git a/Shield-FX_0.18.4/graphics/liquid-square-9.png b/Shield-FX/graphics/liquid-square-9.png similarity index 100% rename from Shield-FX_0.18.4/graphics/liquid-square-9.png rename to Shield-FX/graphics/liquid-square-9.png diff --git a/Shield-FX_0.18.4/graphics/shield-effect-alternate.png b/Shield-FX/graphics/shield-effect-alternate.png similarity index 100% rename from Shield-FX_0.18.4/graphics/shield-effect-alternate.png rename to Shield-FX/graphics/shield-effect-alternate.png diff --git a/Shield-FX_0.18.4/graphics/shield-effect-alternate2.png b/Shield-FX/graphics/shield-effect-alternate2.png similarity index 100% rename from Shield-FX_0.18.4/graphics/shield-effect-alternate2.png rename to Shield-FX/graphics/shield-effect-alternate2.png diff --git a/Shield-FX_0.18.4/graphics/shield-effect.png b/Shield-FX/graphics/shield-effect.png similarity index 100% rename from Shield-FX_0.18.4/graphics/shield-effect.png rename to Shield-FX/graphics/shield-effect.png diff --git a/Shield-FX_0.18.4/graphics/size-research.png b/Shield-FX/graphics/size-research.png similarity index 100% rename from Shield-FX_0.18.4/graphics/size-research.png rename to Shield-FX/graphics/size-research.png diff --git a/Shield-FX_0.18.4/graphics/speed-research.png b/Shield-FX/graphics/speed-research.png similarity index 100% rename from Shield-FX_0.18.4/graphics/speed-research.png rename to Shield-FX/graphics/speed-research.png diff --git a/Shield-FX_0.18.4/graphics/square-0.png b/Shield-FX/graphics/square-0.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-0.png rename to Shield-FX/graphics/square-0.png diff --git a/Shield-FX_0.18.4/graphics/square-1.png b/Shield-FX/graphics/square-1.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-1.png rename to Shield-FX/graphics/square-1.png diff --git a/Shield-FX_0.18.4/graphics/square-2.png b/Shield-FX/graphics/square-2.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-2.png rename to Shield-FX/graphics/square-2.png diff --git a/Shield-FX_0.18.4/graphics/square-3.png b/Shield-FX/graphics/square-3.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-3.png rename to Shield-FX/graphics/square-3.png diff --git a/Shield-FX_0.18.4/graphics/square-4.png b/Shield-FX/graphics/square-4.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-4.png rename to Shield-FX/graphics/square-4.png diff --git a/Shield-FX_0.18.4/graphics/square-5.png b/Shield-FX/graphics/square-5.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-5.png rename to Shield-FX/graphics/square-5.png diff --git a/Shield-FX_0.18.4/graphics/square-6.png b/Shield-FX/graphics/square-6.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-6.png rename to Shield-FX/graphics/square-6.png diff --git a/Shield-FX_0.18.4/graphics/square-7.png b/Shield-FX/graphics/square-7.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-7.png rename to Shield-FX/graphics/square-7.png diff --git a/Shield-FX_0.18.4/graphics/square-8.png b/Shield-FX/graphics/square-8.png similarity index 100% rename from Shield-FX_0.18.4/graphics/square-8.png rename to Shield-FX/graphics/square-8.png diff --git a/Shield-FX_0.18.4/graphics/turret-shield-combinator-icon.png b/Shield-FX/graphics/turret-shield-combinator-icon.png similarity index 100% rename from Shield-FX_0.18.4/graphics/turret-shield-combinator-icon.png rename to Shield-FX/graphics/turret-shield-combinator-icon.png diff --git a/Shield-FX_0.18.4/graphics/turret-shield-combinator.png b/Shield-FX/graphics/turret-shield-combinator.png similarity index 100% rename from Shield-FX_0.18.4/graphics/turret-shield-combinator.png rename to Shield-FX/graphics/turret-shield-combinator.png diff --git a/Shield-FX_0.18.4/info.json b/Shield-FX/info.json similarity index 100% rename from Shield-FX_0.18.4/info.json rename to Shield-FX/info.json diff --git a/Shield-FX_0.18.4/locale/en/Locale_en.cfg b/Shield-FX/locale/en/Locale_en.cfg similarity index 100% rename from Shield-FX_0.18.4/locale/en/Locale_en.cfg rename to Shield-FX/locale/en/Locale_en.cfg diff --git a/Shield-FX_0.18.4/settings.lua b/Shield-FX/settings.lua similarity index 100% rename from Shield-FX_0.18.4/settings.lua rename to Shield-FX/settings.lua diff --git a/Shield-FX_0.18.4/thumbnail.png b/Shield-FX/thumbnail.png similarity index 100% rename from Shield-FX_0.18.4/thumbnail.png rename to Shield-FX/thumbnail.png diff --git a/ShinyBob_Techs_9.16.0/data-updates.lua b/ShinyBob_Techs/data-updates.lua similarity index 100% rename from ShinyBob_Techs_9.16.0/data-updates.lua rename to ShinyBob_Techs/data-updates.lua diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-chemistry.png b/ShinyBob_Techs/graphics/technologies/advanced-chemistry.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-chemistry.png rename to ShinyBob_Techs/graphics/technologies/advanced-chemistry.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-2-old.png b/ShinyBob_Techs/graphics/technologies/advanced-electronics-2-old.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-2-old.png rename to ShinyBob_Techs/graphics/technologies/advanced-electronics-2-old.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-2.png b/ShinyBob_Techs/graphics/technologies/advanced-electronics-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-2.png rename to ShinyBob_Techs/graphics/technologies/advanced-electronics-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-3.png b/ShinyBob_Techs/graphics/technologies/advanced-electronics-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-3.png rename to ShinyBob_Techs/graphics/technologies/advanced-electronics-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-old.png b/ShinyBob_Techs/graphics/technologies/advanced-electronics-old.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics-old.png rename to ShinyBob_Techs/graphics/technologies/advanced-electronics-old.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics.png b/ShinyBob_Techs/graphics/technologies/advanced-electronics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-electronics.png rename to ShinyBob_Techs/graphics/technologies/advanced-electronics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-2.png b/ShinyBob_Techs/graphics/technologies/advanced-material-processing-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-2.png rename to ShinyBob_Techs/graphics/technologies/advanced-material-processing-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-2p.png b/ShinyBob_Techs/graphics/technologies/advanced-material-processing-2p.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-2p.png rename to ShinyBob_Techs/graphics/technologies/advanced-material-processing-2p.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-3.png b/ShinyBob_Techs/graphics/technologies/advanced-material-processing-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-3.png rename to ShinyBob_Techs/graphics/technologies/advanced-material-processing-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-4.png b/ShinyBob_Techs/graphics/technologies/advanced-material-processing-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing-4.png rename to ShinyBob_Techs/graphics/technologies/advanced-material-processing-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing.png b/ShinyBob_Techs/graphics/technologies/advanced-material-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-material-processing.png rename to ShinyBob_Techs/graphics/technologies/advanced-material-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-oil-processing.png b/ShinyBob_Techs/graphics/technologies/advanced-oil-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-oil-processing.png rename to ShinyBob_Techs/graphics/technologies/advanced-oil-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-research.png b/ShinyBob_Techs/graphics/technologies/advanced-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-research.png rename to ShinyBob_Techs/graphics/technologies/advanced-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-steam-power-1.png b/ShinyBob_Techs/graphics/technologies/advanced-steam-power-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-steam-power-1.png rename to ShinyBob_Techs/graphics/technologies/advanced-steam-power-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/advanced-steam-power-2.png b/ShinyBob_Techs/graphics/technologies/advanced-steam-power-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/advanced-steam-power-2.png rename to ShinyBob_Techs/graphics/technologies/advanced-steam-power-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-1.png b/ShinyBob_Techs/graphics/technologies/air-compressor-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-1.png rename to ShinyBob_Techs/graphics/technologies/air-compressor-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-2.png b/ShinyBob_Techs/graphics/technologies/air-compressor-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-2.png rename to ShinyBob_Techs/graphics/technologies/air-compressor-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-3.png b/ShinyBob_Techs/graphics/technologies/air-compressor-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-3.png rename to ShinyBob_Techs/graphics/technologies/air-compressor-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-4.png b/ShinyBob_Techs/graphics/technologies/air-compressor-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor-4.png rename to ShinyBob_Techs/graphics/technologies/air-compressor-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor.png b/ShinyBob_Techs/graphics/technologies/air-compressor.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/air-compressor.png rename to ShinyBob_Techs/graphics/technologies/air-compressor.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-blue-research.png b/ShinyBob_Techs/graphics/technologies/alien-blue-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-blue-research.png rename to ShinyBob_Techs/graphics/technologies/alien-blue-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-green-research.png b/ShinyBob_Techs/graphics/technologies/alien-green-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-green-research.png rename to ShinyBob_Techs/graphics/technologies/alien-green-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-orange-research.png b/ShinyBob_Techs/graphics/technologies/alien-orange-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-orange-research.png rename to ShinyBob_Techs/graphics/technologies/alien-orange-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-purple-research.png b/ShinyBob_Techs/graphics/technologies/alien-purple-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-purple-research.png rename to ShinyBob_Techs/graphics/technologies/alien-purple-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-red-research.png b/ShinyBob_Techs/graphics/technologies/alien-red-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-red-research.png rename to ShinyBob_Techs/graphics/technologies/alien-red-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-research.png b/ShinyBob_Techs/graphics/technologies/alien-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-research.png rename to ShinyBob_Techs/graphics/technologies/alien-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-technology.png b/ShinyBob_Techs/graphics/technologies/alien-technology.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-technology.png rename to ShinyBob_Techs/graphics/technologies/alien-technology.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alien-yellow-research.png b/ShinyBob_Techs/graphics/technologies/alien-yellow-research.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alien-yellow-research.png rename to ShinyBob_Techs/graphics/technologies/alien-yellow-research.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alloy-processing-1.png b/ShinyBob_Techs/graphics/technologies/alloy-processing-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alloy-processing-1.png rename to ShinyBob_Techs/graphics/technologies/alloy-processing-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/alloy-processing-2.png b/ShinyBob_Techs/graphics/technologies/alloy-processing-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/alloy-processing-2.png rename to ShinyBob_Techs/graphics/technologies/alloy-processing-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/aluminium-processing.png b/ShinyBob_Techs/graphics/technologies/aluminium-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/aluminium-processing.png rename to ShinyBob_Techs/graphics/technologies/aluminium-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/armor-making-3.png b/ShinyBob_Techs/graphics/technologies/armor-making-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/armor-making-3.png rename to ShinyBob_Techs/graphics/technologies/armor-making-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/armor-making-4.png b/ShinyBob_Techs/graphics/technologies/armor-making-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/armor-making-4.png rename to ShinyBob_Techs/graphics/technologies/armor-making-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/armor-making.png b/ShinyBob_Techs/graphics/technologies/armor-making.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/armor-making.png rename to ShinyBob_Techs/graphics/technologies/armor-making.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-damage.png b/ShinyBob_Techs/graphics/technologies/artillery-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-damage.png rename to ShinyBob_Techs/graphics/technologies/artillery-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-range.png b/ShinyBob_Techs/graphics/technologies/artillery-range.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-range.png rename to ShinyBob_Techs/graphics/technologies/artillery-range.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-speed.png b/ShinyBob_Techs/graphics/technologies/artillery-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-speed.png rename to ShinyBob_Techs/graphics/technologies/artillery-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-1.png b/ShinyBob_Techs/graphics/technologies/artillery-turret-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-1.png rename to ShinyBob_Techs/graphics/technologies/artillery-turret-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-2.png b/ShinyBob_Techs/graphics/technologies/artillery-turret-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-2.png rename to ShinyBob_Techs/graphics/technologies/artillery-turret-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-3.png b/ShinyBob_Techs/graphics/technologies/artillery-turret-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-turret-3.png rename to ShinyBob_Techs/graphics/technologies/artillery-turret-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-wagon-2.png b/ShinyBob_Techs/graphics/technologies/artillery-wagon-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-wagon-2.png rename to ShinyBob_Techs/graphics/technologies/artillery-wagon-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/artillery-wagon-3.png b/ShinyBob_Techs/graphics/technologies/artillery-wagon-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/artillery-wagon-3.png rename to ShinyBob_Techs/graphics/technologies/artillery-wagon-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/atomic-bomb.png b/ShinyBob_Techs/graphics/technologies/atomic-bomb.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/atomic-bomb.png rename to ShinyBob_Techs/graphics/technologies/atomic-bomb.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automated-construction.png b/ShinyBob_Techs/graphics/technologies/automated-construction.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automated-construction.png rename to ShinyBob_Techs/graphics/technologies/automated-construction.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automated-rail-transportation.png b/ShinyBob_Techs/graphics/technologies/automated-rail-transportation.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automated-rail-transportation.png rename to ShinyBob_Techs/graphics/technologies/automated-rail-transportation.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation-2.png b/ShinyBob_Techs/graphics/technologies/automation-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation-2.png rename to ShinyBob_Techs/graphics/technologies/automation-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation-3.png b/ShinyBob_Techs/graphics/technologies/automation-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation-3.png rename to ShinyBob_Techs/graphics/technologies/automation-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation-4.png b/ShinyBob_Techs/graphics/technologies/automation-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation-4.png rename to ShinyBob_Techs/graphics/technologies/automation-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation-5.png b/ShinyBob_Techs/graphics/technologies/automation-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation-5.png rename to ShinyBob_Techs/graphics/technologies/automation-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation-6.png b/ShinyBob_Techs/graphics/technologies/automation-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation-6.png rename to ShinyBob_Techs/graphics/technologies/automation-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automation.png b/ShinyBob_Techs/graphics/technologies/automation.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automation.png rename to ShinyBob_Techs/graphics/technologies/automation.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/automobilism.png b/ShinyBob_Techs/graphics/technologies/automobilism.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/automobilism.png rename to ShinyBob_Techs/graphics/technologies/automobilism.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/barrels.png b/ShinyBob_Techs/graphics/technologies/barrels.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/barrels.png rename to ShinyBob_Techs/graphics/technologies/barrels.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-1.png b/ShinyBob_Techs/graphics/technologies/battery-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-1.png rename to ShinyBob_Techs/graphics/technologies/battery-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-2.png b/ShinyBob_Techs/graphics/technologies/battery-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-2.png rename to ShinyBob_Techs/graphics/technologies/battery-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-3.png b/ShinyBob_Techs/graphics/technologies/battery-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-3.png rename to ShinyBob_Techs/graphics/technologies/battery-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-31.png b/ShinyBob_Techs/graphics/technologies/battery-31.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-31.png rename to ShinyBob_Techs/graphics/technologies/battery-31.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-1.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-2.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-3.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-4.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-5.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-6.png b/ShinyBob_Techs/graphics/technologies/battery-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/battery-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/battery.png b/ShinyBob_Techs/graphics/technologies/battery.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/battery.png rename to ShinyBob_Techs/graphics/technologies/battery.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/better-repair-pack.png b/ShinyBob_Techs/graphics/technologies/better-repair-pack.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/better-repair-pack.png rename to ShinyBob_Techs/graphics/technologies/better-repair-pack.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-acid-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-acid-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-acid-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-acid-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-acid-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-acid-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-acid-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-acid-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-ap-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-ap-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-ap-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-ap-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-electric-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-electric-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-bullet-magazine2.png b/ShinyBob_Techs/graphics/technologies/bob-electric-bullet-magazine2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-bullet-magazine2.png rename to ShinyBob_Techs/graphics/technologies/bob-electric-bullet-magazine2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-electric-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-electric-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-electric-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-explosive-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-explosive-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-explosive-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-explosive-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-flame-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-flame-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-flame-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-flame-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-flame-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-flame-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-flame-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-flame-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-he-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-he-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-he-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-he-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-impact-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-impact-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-impact-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-impact-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-piercing-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-piercing-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-piercing-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-piercing-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-poison-bullet-magazine.png b/ShinyBob_Techs/graphics/technologies/bob-poison-bullet-magazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-poison-bullet-magazine.png rename to ShinyBob_Techs/graphics/technologies/bob-poison-bullet-magazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-poison-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-poison-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-poison-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-poison-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-1.png b/ShinyBob_Techs/graphics/technologies/bob-pumpjacks-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-1.png rename to ShinyBob_Techs/graphics/technologies/bob-pumpjacks-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-2.png b/ShinyBob_Techs/graphics/technologies/bob-pumpjacks-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-2.png rename to ShinyBob_Techs/graphics/technologies/bob-pumpjacks-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-3.png b/ShinyBob_Techs/graphics/technologies/bob-pumpjacks-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-3.png rename to ShinyBob_Techs/graphics/technologies/bob-pumpjacks-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-4.png b/ShinyBob_Techs/graphics/technologies/bob-pumpjacks-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-pumpjacks-4.png rename to ShinyBob_Techs/graphics/technologies/bob-pumpjacks-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-1.png b/ShinyBob_Techs/graphics/technologies/bob-robots-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-1.png rename to ShinyBob_Techs/graphics/technologies/bob-robots-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-2.png b/ShinyBob_Techs/graphics/technologies/bob-robots-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-2.png rename to ShinyBob_Techs/graphics/technologies/bob-robots-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-3.png b/ShinyBob_Techs/graphics/technologies/bob-robots-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-3.png rename to ShinyBob_Techs/graphics/technologies/bob-robots-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-4.png b/ShinyBob_Techs/graphics/technologies/bob-robots-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-4.png rename to ShinyBob_Techs/graphics/technologies/bob-robots-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-5.png b/ShinyBob_Techs/graphics/technologies/bob-robots-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots-5.png rename to ShinyBob_Techs/graphics/technologies/bob-robots-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots.png b/ShinyBob_Techs/graphics/technologies/bob-robots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-robots.png rename to ShinyBob_Techs/graphics/technologies/bob-robots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-rocket.png b/ShinyBob_Techs/graphics/technologies/bob-rocket.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-rocket.png rename to ShinyBob_Techs/graphics/technologies/bob-rocket.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-acid-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-acid-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-acid-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-acid-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-ap-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-ap-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-ap-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-ap-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-electric-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-electric-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-electric-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-electric-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-explosive-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-explosive-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-explosive-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-explosive-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-flame-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-flame-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-flame-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-flame-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-impact-shell - copia.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-impact-shell - copia.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-impact-shell - copia.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-impact-shell - copia.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-poison-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-poison-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-poison-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-poison-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-shell.png b/ShinyBob_Techs/graphics/technologies/bob-shotgun-shell.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bob-shotgun-shell.png rename to ShinyBob_Techs/graphics/technologies/bob-shotgun-shell.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/boiler-2.png b/ShinyBob_Techs/graphics/technologies/boiler-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/boiler-2.png rename to ShinyBob_Techs/graphics/technologies/boiler-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/boiler-3.png b/ShinyBob_Techs/graphics/technologies/boiler-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/boiler-3.png rename to ShinyBob_Techs/graphics/technologies/boiler-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/boiler-4.png b/ShinyBob_Techs/graphics/technologies/boiler-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/boiler-4.png rename to ShinyBob_Techs/graphics/technologies/boiler-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/boiler-5.png b/ShinyBob_Techs/graphics/technologies/boiler-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/boiler-5.png rename to ShinyBob_Techs/graphics/technologies/boiler-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/braking-force.png b/ShinyBob_Techs/graphics/technologies/braking-force.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/braking-force.png rename to ShinyBob_Techs/graphics/technologies/braking-force.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bullet-damage.png b/ShinyBob_Techs/graphics/technologies/bullet-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bullet-damage.png rename to ShinyBob_Techs/graphics/technologies/bullet-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/bullet-speed.png b/ShinyBob_Techs/graphics/technologies/bullet-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/bullet-speed.png rename to ShinyBob_Techs/graphics/technologies/bullet-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/cannon-damage.png b/ShinyBob_Techs/graphics/technologies/cannon-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/cannon-damage.png rename to ShinyBob_Techs/graphics/technologies/cannon-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/cannon-speed.png b/ShinyBob_Techs/graphics/technologies/cannon-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/cannon-speed.png rename to ShinyBob_Techs/graphics/technologies/cannon-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/ceramics.png b/ShinyBob_Techs/graphics/technologies/ceramics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/ceramics.png rename to ShinyBob_Techs/graphics/technologies/ceramics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/character-auto-logistic-trash-slots.png b/ShinyBob_Techs/graphics/technologies/character-auto-logistic-trash-slots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/character-auto-logistic-trash-slots.png rename to ShinyBob_Techs/graphics/technologies/character-auto-logistic-trash-slots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/character-inventory-slots.png b/ShinyBob_Techs/graphics/technologies/character-inventory-slots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/character-inventory-slots.png rename to ShinyBob_Techs/graphics/technologies/character-inventory-slots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/character-logistic-slots.png b/ShinyBob_Techs/graphics/technologies/character-logistic-slots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/character-logistic-slots.png rename to ShinyBob_Techs/graphics/technologies/character-logistic-slots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/character-logistic-trash-slots.png b/ShinyBob_Techs/graphics/technologies/character-logistic-trash-slots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/character-logistic-trash-slots.png rename to ShinyBob_Techs/graphics/technologies/character-logistic-trash-slots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-1.png b/ShinyBob_Techs/graphics/technologies/chemical-plant-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-1.png rename to ShinyBob_Techs/graphics/technologies/chemical-plant-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-2.png b/ShinyBob_Techs/graphics/technologies/chemical-plant-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-2.png rename to ShinyBob_Techs/graphics/technologies/chemical-plant-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-3.png b/ShinyBob_Techs/graphics/technologies/chemical-plant-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-3.png rename to ShinyBob_Techs/graphics/technologies/chemical-plant-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-4.png b/ShinyBob_Techs/graphics/technologies/chemical-plant-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-plant-4.png rename to ShinyBob_Techs/graphics/technologies/chemical-plant-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-1.png b/ShinyBob_Techs/graphics/technologies/chemical-processing-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-1.png rename to ShinyBob_Techs/graphics/technologies/chemical-processing-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-2.png b/ShinyBob_Techs/graphics/technologies/chemical-processing-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-2.png rename to ShinyBob_Techs/graphics/technologies/chemical-processing-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-3.png b/ShinyBob_Techs/graphics/technologies/chemical-processing-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing-3.png rename to ShinyBob_Techs/graphics/technologies/chemical-processing-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing.png b/ShinyBob_Techs/graphics/technologies/chemical-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemical-processing.png rename to ShinyBob_Techs/graphics/technologies/chemical-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-1.png b/ShinyBob_Techs/graphics/technologies/chemistry-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-1.png rename to ShinyBob_Techs/graphics/technologies/chemistry-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-2.png b/ShinyBob_Techs/graphics/technologies/chemistry-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-2.png rename to ShinyBob_Techs/graphics/technologies/chemistry-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-3.png b/ShinyBob_Techs/graphics/technologies/chemistry-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemistry-3.png rename to ShinyBob_Techs/graphics/technologies/chemistry-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/chemistry.png b/ShinyBob_Techs/graphics/technologies/chemistry.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/chemistry.png rename to ShinyBob_Techs/graphics/technologies/chemistry.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/circuit-network.png b/ShinyBob_Techs/graphics/technologies/circuit-network.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/circuit-network.png rename to ShinyBob_Techs/graphics/technologies/circuit-network.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/cliff-explosives.png b/ShinyBob_Techs/graphics/technologies/cliff-explosives.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/cliff-explosives.png rename to ShinyBob_Techs/graphics/technologies/cliff-explosives.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/coal-liquefaction.png b/ShinyBob_Techs/graphics/technologies/coal-liquefaction.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/coal-liquefaction.png rename to ShinyBob_Techs/graphics/technologies/coal-liquefaction.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/cobalt-processing.png b/ShinyBob_Techs/graphics/technologies/cobalt-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/cobalt-processing.png rename to ShinyBob_Techs/graphics/technologies/cobalt-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robot-damage.png b/ShinyBob_Techs/graphics/technologies/combat-robot-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robot-damage.png rename to ShinyBob_Techs/graphics/technologies/combat-robot-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-1.png b/ShinyBob_Techs/graphics/technologies/combat-robotics-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-1.png rename to ShinyBob_Techs/graphics/technologies/combat-robotics-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-2.png b/ShinyBob_Techs/graphics/technologies/combat-robotics-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-2.png rename to ShinyBob_Techs/graphics/technologies/combat-robotics-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-3.png b/ShinyBob_Techs/graphics/technologies/combat-robotics-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-3.png rename to ShinyBob_Techs/graphics/technologies/combat-robotics-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-4.png b/ShinyBob_Techs/graphics/technologies/combat-robotics-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics-4.png rename to ShinyBob_Techs/graphics/technologies/combat-robotics-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics.png b/ShinyBob_Techs/graphics/technologies/combat-robotics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/combat-robotics.png rename to ShinyBob_Techs/graphics/technologies/combat-robotics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/construction-robotics.png b/ShinyBob_Techs/graphics/technologies/construction-robotics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/construction-robotics.png rename to ShinyBob_Techs/graphics/technologies/construction-robotics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/cordite-processing.png b/ShinyBob_Techs/graphics/technologies/cordite-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/cordite-processing.png rename to ShinyBob_Techs/graphics/technologies/cordite-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/discharge-defense-equipment.png b/ShinyBob_Techs/graphics/technologies/discharge-defense-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/discharge-defense-equipment.png rename to ShinyBob_Techs/graphics/technologies/discharge-defense-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/drone-tanks.png b/ShinyBob_Techs/graphics/technologies/drone-tanks.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/drone-tanks.png rename to ShinyBob_Techs/graphics/technologies/drone-tanks.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-1.png b/ShinyBob_Techs/graphics/technologies/effect-transmission-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-1.png rename to ShinyBob_Techs/graphics/technologies/effect-transmission-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-2.png b/ShinyBob_Techs/graphics/technologies/effect-transmission-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-2.png rename to ShinyBob_Techs/graphics/technologies/effect-transmission-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-3.png b/ShinyBob_Techs/graphics/technologies/effect-transmission-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission-3.png rename to ShinyBob_Techs/graphics/technologies/effect-transmission-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission.png b/ShinyBob_Techs/graphics/technologies/effect-transmission.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/effect-transmission.png rename to ShinyBob_Techs/graphics/technologies/effect-transmission.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/effectivity-module.png b/ShinyBob_Techs/graphics/technologies/effectivity-module.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/effectivity-module.png rename to ShinyBob_Techs/graphics/technologies/effectivity-module.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-0.png b/ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-0.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-0.png rename to ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-0.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-1.png b/ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-1.png rename to ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-2.png b/ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-2.png rename to ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-3.png b/ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-accumulators-3.png rename to ShinyBob_Techs/graphics/technologies/electric-energy-accumulators-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-distribution.png b/ShinyBob_Techs/graphics/technologies/electric-energy-distribution.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-energy-distribution.png rename to ShinyBob_Techs/graphics/technologies/electric-energy-distribution.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-engine.png b/ShinyBob_Techs/graphics/technologies/electric-engine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-engine.png rename to ShinyBob_Techs/graphics/technologies/electric-engine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-1.png b/ShinyBob_Techs/graphics/technologies/electric-pole-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-1.png rename to ShinyBob_Techs/graphics/technologies/electric-pole-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-2.png b/ShinyBob_Techs/graphics/technologies/electric-pole-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-2.png rename to ShinyBob_Techs/graphics/technologies/electric-pole-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-3.png b/ShinyBob_Techs/graphics/technologies/electric-pole-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-3.png rename to ShinyBob_Techs/graphics/technologies/electric-pole-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-4.png b/ShinyBob_Techs/graphics/technologies/electric-pole-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-pole-4.png rename to ShinyBob_Techs/graphics/technologies/electric-pole-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-1.png b/ShinyBob_Techs/graphics/technologies/electric-substation-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-1.png rename to ShinyBob_Techs/graphics/technologies/electric-substation-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-2.png b/ShinyBob_Techs/graphics/technologies/electric-substation-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-2.png rename to ShinyBob_Techs/graphics/technologies/electric-substation-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-3.png b/ShinyBob_Techs/graphics/technologies/electric-substation-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-3.png rename to ShinyBob_Techs/graphics/technologies/electric-substation-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-4.png b/ShinyBob_Techs/graphics/technologies/electric-substation-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation-4.png rename to ShinyBob_Techs/graphics/technologies/electric-substation-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation.png b/ShinyBob_Techs/graphics/technologies/electric-substation.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electric-substation.png rename to ShinyBob_Techs/graphics/technologies/electric-substation.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-1.png b/ShinyBob_Techs/graphics/technologies/electrolyser-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-1.png rename to ShinyBob_Techs/graphics/technologies/electrolyser-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-2.png b/ShinyBob_Techs/graphics/technologies/electrolyser-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-2.png rename to ShinyBob_Techs/graphics/technologies/electrolyser-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-3.png b/ShinyBob_Techs/graphics/technologies/electrolyser-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-3.png rename to ShinyBob_Techs/graphics/technologies/electrolyser-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-4.png b/ShinyBob_Techs/graphics/technologies/electrolyser-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser-4.png rename to ShinyBob_Techs/graphics/technologies/electrolyser-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser.png b/ShinyBob_Techs/graphics/technologies/electrolyser.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolyser.png rename to ShinyBob_Techs/graphics/technologies/electrolyser.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis-1.png b/ShinyBob_Techs/graphics/technologies/electrolysis-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis-1.png rename to ShinyBob_Techs/graphics/technologies/electrolysis-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis-2.png b/ShinyBob_Techs/graphics/technologies/electrolysis-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis-2.png rename to ShinyBob_Techs/graphics/technologies/electrolysis-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis.png b/ShinyBob_Techs/graphics/technologies/electrolysis.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrolysis.png rename to ShinyBob_Techs/graphics/technologies/electrolysis.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-1.png b/ShinyBob_Techs/graphics/technologies/electronics-machine-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-1.png rename to ShinyBob_Techs/graphics/technologies/electronics-machine-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-2.png b/ShinyBob_Techs/graphics/technologies/electronics-machine-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-2.png rename to ShinyBob_Techs/graphics/technologies/electronics-machine-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-3.png b/ShinyBob_Techs/graphics/technologies/electronics-machine-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-3.png rename to ShinyBob_Techs/graphics/technologies/electronics-machine-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-chip.png b/ShinyBob_Techs/graphics/technologies/electronics-machine-chip.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electronics-machine-chip.png rename to ShinyBob_Techs/graphics/technologies/electronics-machine-chip.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electronics.png b/ShinyBob_Techs/graphics/technologies/electronics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electronics.png rename to ShinyBob_Techs/graphics/technologies/electronics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/electrum-processing.png b/ShinyBob_Techs/graphics/technologies/electrum-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/electrum-processing.png rename to ShinyBob_Techs/graphics/technologies/electrum-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-1.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-2.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-3.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-4.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-5.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-6.png b/ShinyBob_Techs/graphics/technologies/energy-shield-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/energy-shield-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/energy-shield-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/engine.png b/ShinyBob_Techs/graphics/technologies/engine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/engine.png rename to ShinyBob_Techs/graphics/technologies/engine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-1.png b/ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-2.png b/ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-3.png b/ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/exoskeleton-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment.png b/ShinyBob_Techs/graphics/technologies/exoskeleton-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/exoskeleton-equipment.png rename to ShinyBob_Techs/graphics/technologies/exoskeleton-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/explosive-rocketry.png b/ShinyBob_Techs/graphics/technologies/explosive-rocketry.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/explosive-rocketry.png rename to ShinyBob_Techs/graphics/technologies/explosive-rocketry.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/explosives.png b/ShinyBob_Techs/graphics/technologies/explosives.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/explosives.png rename to ShinyBob_Techs/graphics/technologies/explosives.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/express-inserters.png b/ShinyBob_Techs/graphics/technologies/express-inserters.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/express-inserters.png rename to ShinyBob_Techs/graphics/technologies/express-inserters.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/express-miniloader.png b/ShinyBob_Techs/graphics/technologies/express-miniloader.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/express-miniloader.png rename to ShinyBob_Techs/graphics/technologies/express-miniloader.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fast-miniloader.png b/ShinyBob_Techs/graphics/technologies/fast-miniloader.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fast-miniloader.png rename to ShinyBob_Techs/graphics/technologies/fast-miniloader.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fertiliser.png b/ShinyBob_Techs/graphics/technologies/fertiliser.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fertiliser.png rename to ShinyBob_Techs/graphics/technologies/fertiliser.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/flamethrower-turret-damage.png b/ShinyBob_Techs/graphics/technologies/flamethrower-turret-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/flamethrower-turret-damage.png rename to ShinyBob_Techs/graphics/technologies/flamethrower-turret-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/flamethrower.png b/ShinyBob_Techs/graphics/technologies/flamethrower.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/flamethrower.png rename to ShinyBob_Techs/graphics/technologies/flamethrower.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/flammables.png b/ShinyBob_Techs/graphics/technologies/flammables.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/flammables.png rename to ShinyBob_Techs/graphics/technologies/flammables.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-1.png b/ShinyBob_Techs/graphics/technologies/fluid-handling-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-1.png rename to ShinyBob_Techs/graphics/technologies/fluid-handling-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-2.png b/ShinyBob_Techs/graphics/technologies/fluid-handling-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-2.png rename to ShinyBob_Techs/graphics/technologies/fluid-handling-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-3.png b/ShinyBob_Techs/graphics/technologies/fluid-handling-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-3.png rename to ShinyBob_Techs/graphics/technologies/fluid-handling-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-4.png b/ShinyBob_Techs/graphics/technologies/fluid-handling-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-handling-4.png rename to ShinyBob_Techs/graphics/technologies/fluid-handling-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-1.png b/ShinyBob_Techs/graphics/technologies/fluid-wagon-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-1.png rename to ShinyBob_Techs/graphics/technologies/fluid-wagon-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-2.png b/ShinyBob_Techs/graphics/technologies/fluid-wagon-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-2.png rename to ShinyBob_Techs/graphics/technologies/fluid-wagon-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-3.png b/ShinyBob_Techs/graphics/technologies/fluid-wagon-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-3.png rename to ShinyBob_Techs/graphics/technologies/fluid-wagon-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-armoured-1.png b/ShinyBob_Techs/graphics/technologies/fluid-wagon-armoured-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-armoured-1.png rename to ShinyBob_Techs/graphics/technologies/fluid-wagon-armoured-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-armoured-2.png b/ShinyBob_Techs/graphics/technologies/fluid-wagon-armoured-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fluid-wagon-armoured-2.png rename to ShinyBob_Techs/graphics/technologies/fluid-wagon-armoured-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/flying.png b/ShinyBob_Techs/graphics/technologies/flying.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/flying.png rename to ShinyBob_Techs/graphics/technologies/flying.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/follower-robots.png b/ShinyBob_Techs/graphics/technologies/follower-robots.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/follower-robots.png rename to ShinyBob_Techs/graphics/technologies/follower-robots.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-1.png b/ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-2.png b/ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-3.png b/ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-4.png b/ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment.png b/ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/fusion-reactor-equipment.png rename to ShinyBob_Techs/graphics/technologies/fusion-reactor-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gas-canister.png b/ShinyBob_Techs/graphics/technologies/gas-canister.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gas-canister.png rename to ShinyBob_Techs/graphics/technologies/gas-canister.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gates.png b/ShinyBob_Techs/graphics/technologies/gates.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gates.png rename to ShinyBob_Techs/graphics/technologies/gates.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gem-processing-1.png b/ShinyBob_Techs/graphics/technologies/gem-processing-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gem-processing-1.png rename to ShinyBob_Techs/graphics/technologies/gem-processing-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gem-processing-2.png b/ShinyBob_Techs/graphics/technologies/gem-processing-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gem-processing-2.png rename to ShinyBob_Techs/graphics/technologies/gem-processing-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gem.png b/ShinyBob_Techs/graphics/technologies/gem.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gem.png rename to ShinyBob_Techs/graphics/technologies/gem.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gems.png b/ShinyBob_Techs/graphics/technologies/gems.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gems.png rename to ShinyBob_Techs/graphics/technologies/gems.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gold-processing.png b/ShinyBob_Techs/graphics/technologies/gold-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gold-processing.png rename to ShinyBob_Techs/graphics/technologies/gold-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/green-miniloader.png b/ShinyBob_Techs/graphics/technologies/green-miniloader.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/green-miniloader.png rename to ShinyBob_Techs/graphics/technologies/green-miniloader.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/greenhouse.png b/ShinyBob_Techs/graphics/technologies/greenhouse.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/greenhouse.png rename to ShinyBob_Techs/graphics/technologies/greenhouse.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/grenade-damage.png b/ShinyBob_Techs/graphics/technologies/grenade-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/grenade-damage.png rename to ShinyBob_Techs/graphics/technologies/grenade-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/grinding.png b/ShinyBob_Techs/graphics/technologies/grinding.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/grinding.png rename to ShinyBob_Techs/graphics/technologies/grinding.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turret-damage.png b/ShinyBob_Techs/graphics/technologies/gun-turret-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turret-damage.png rename to ShinyBob_Techs/graphics/technologies/gun-turret-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-1.png b/ShinyBob_Techs/graphics/technologies/gun-turrets-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-1.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-2.png b/ShinyBob_Techs/graphics/technologies/gun-turrets-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-2.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-3.png b/ShinyBob_Techs/graphics/technologies/gun-turrets-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-3.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-4.png b/ShinyBob_Techs/graphics/technologies/gun-turrets-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-4.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-5.png b/ShinyBob_Techs/graphics/technologies/gun-turrets-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets-5.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets.png b/ShinyBob_Techs/graphics/technologies/gun-turrets.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/gun-turrets.png rename to ShinyBob_Techs/graphics/technologies/gun-turrets.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/heat-shield.png b/ShinyBob_Techs/graphics/technologies/heat-shield.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/heat-shield.png rename to ShinyBob_Techs/graphics/technologies/heat-shield.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/hydrazine.png b/ShinyBob_Techs/graphics/technologies/hydrazine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/hydrazine.png rename to ShinyBob_Techs/graphics/technologies/hydrazine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/inserter-capacity-bonus.png b/ShinyBob_Techs/graphics/technologies/inserter-capacity-bonus.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/inserter-capacity-bonus.png rename to ShinyBob_Techs/graphics/technologies/inserter-capacity-bonus.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/inserters-express.png b/ShinyBob_Techs/graphics/technologies/inserters-express.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/inserters-express.png rename to ShinyBob_Techs/graphics/technologies/inserters-express.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/invar-processing.png b/ShinyBob_Techs/graphics/technologies/invar-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/invar-processing.png rename to ShinyBob_Techs/graphics/technologies/invar-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/kovarex-enrichment-process.png b/ShinyBob_Techs/graphics/technologies/kovarex-enrichment-process.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/kovarex-enrichment-process.png rename to ShinyBob_Techs/graphics/technologies/kovarex-enrichment-process.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-distractor.png b/ShinyBob_Techs/graphics/technologies/land-mine-distractor.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-distractor.png rename to ShinyBob_Techs/graphics/technologies/land-mine-distractor.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-poison.png b/ShinyBob_Techs/graphics/technologies/land-mine-poison.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-poison.png rename to ShinyBob_Techs/graphics/technologies/land-mine-poison.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-slowdown.png b/ShinyBob_Techs/graphics/technologies/land-mine-slowdown.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/land-mine-slowdown.png rename to ShinyBob_Techs/graphics/technologies/land-mine-slowdown.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/land-mine.png b/ShinyBob_Techs/graphics/technologies/land-mine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/land-mine.png rename to ShinyBob_Techs/graphics/technologies/land-mine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/landfill.png b/ShinyBob_Techs/graphics/technologies/landfill.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/landfill.png rename to ShinyBob_Techs/graphics/technologies/landfill.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/large-mining-drill.png b/ShinyBob_Techs/graphics/technologies/large-mining-drill.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/large-mining-drill.png rename to ShinyBob_Techs/graphics/technologies/large-mining-drill.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-1.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-1.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-2.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-2.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-3.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-3.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-4.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-4.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-5.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-5.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-6.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo-6.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-ammo.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-ammo.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-ammo.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-damage.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-damage.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-speed.png b/ShinyBob_Techs/graphics/technologies/laser-rifle-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle-speed.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle.png b/ShinyBob_Techs/graphics/technologies/laser-rifle.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-rifle.png rename to ShinyBob_Techs/graphics/technologies/laser-rifle.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turret-damage.png b/ShinyBob_Techs/graphics/technologies/laser-turret-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turret-damage.png rename to ShinyBob_Techs/graphics/technologies/laser-turret-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turret-speed.png b/ShinyBob_Techs/graphics/technologies/laser-turret-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turret-speed.png rename to ShinyBob_Techs/graphics/technologies/laser-turret-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-1.png b/ShinyBob_Techs/graphics/technologies/laser-turrets-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-1.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-2.png b/ShinyBob_Techs/graphics/technologies/laser-turrets-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-2.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-3.png b/ShinyBob_Techs/graphics/technologies/laser-turrets-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-3.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-4.png b/ShinyBob_Techs/graphics/technologies/laser-turrets-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-4.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-5.png b/ShinyBob_Techs/graphics/technologies/laser-turrets-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets-5.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets.png b/ShinyBob_Techs/graphics/technologies/laser-turrets.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser-turrets.png rename to ShinyBob_Techs/graphics/technologies/laser-turrets.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/laser.png b/ShinyBob_Techs/graphics/technologies/laser.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/laser.png rename to ShinyBob_Techs/graphics/technologies/laser.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/lead-processing.png b/ShinyBob_Techs/graphics/technologies/lead-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/lead-processing.png rename to ShinyBob_Techs/graphics/technologies/lead-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/lithium-processing.png b/ShinyBob_Techs/graphics/technologies/lithium-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/lithium-processing.png rename to ShinyBob_Techs/graphics/technologies/lithium-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/loader-1.png b/ShinyBob_Techs/graphics/technologies/loader-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/loader-1.png rename to ShinyBob_Techs/graphics/technologies/loader-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/loader-2.png b/ShinyBob_Techs/graphics/technologies/loader-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/loader-2.png rename to ShinyBob_Techs/graphics/technologies/loader-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/loader-3.png b/ShinyBob_Techs/graphics/technologies/loader-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/loader-3.png rename to ShinyBob_Techs/graphics/technologies/loader-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/loader-4.png b/ShinyBob_Techs/graphics/technologies/loader-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/loader-4.png rename to ShinyBob_Techs/graphics/technologies/loader-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/loader-5.png b/ShinyBob_Techs/graphics/technologies/loader-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/loader-5.png rename to ShinyBob_Techs/graphics/technologies/loader-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistic-chest-titanium.png b/ShinyBob_Techs/graphics/technologies/logistic-chest-titanium.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistic-chest-titanium.png rename to ShinyBob_Techs/graphics/technologies/logistic-chest-titanium.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistic-chest-tungsten.png b/ShinyBob_Techs/graphics/technologies/logistic-chest-tungsten.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistic-chest-tungsten.png rename to ShinyBob_Techs/graphics/technologies/logistic-chest-tungsten.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistic-robotics.png b/ShinyBob_Techs/graphics/technologies/logistic-robotics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistic-robotics.png rename to ShinyBob_Techs/graphics/technologies/logistic-robotics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistic-system.png b/ShinyBob_Techs/graphics/technologies/logistic-system.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistic-system.png rename to ShinyBob_Techs/graphics/technologies/logistic-system.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics-1.png b/ShinyBob_Techs/graphics/technologies/logistics-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics-1.png rename to ShinyBob_Techs/graphics/technologies/logistics-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics-2.png b/ShinyBob_Techs/graphics/technologies/logistics-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics-2.png rename to ShinyBob_Techs/graphics/technologies/logistics-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics-3.png b/ShinyBob_Techs/graphics/technologies/logistics-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics-3.png rename to ShinyBob_Techs/graphics/technologies/logistics-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics-4.png b/ShinyBob_Techs/graphics/technologies/logistics-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics-4.png rename to ShinyBob_Techs/graphics/technologies/logistics-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics-5.png b/ShinyBob_Techs/graphics/technologies/logistics-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics-5.png rename to ShinyBob_Techs/graphics/technologies/logistics-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/logistics.png b/ShinyBob_Techs/graphics/technologies/logistics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/logistics.png rename to ShinyBob_Techs/graphics/technologies/logistics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-1-1.png b/ShinyBob_Techs/graphics/technologies/long-inserters-1-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-1-1.png rename to ShinyBob_Techs/graphics/technologies/long-inserters-1-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-1.png b/ShinyBob_Techs/graphics/technologies/long-inserters-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-1.png rename to ShinyBob_Techs/graphics/technologies/long-inserters-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-2-1.png b/ShinyBob_Techs/graphics/technologies/long-inserters-2-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-2-1.png rename to ShinyBob_Techs/graphics/technologies/long-inserters-2-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-2.png b/ShinyBob_Techs/graphics/technologies/long-inserters-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters-2.png rename to ShinyBob_Techs/graphics/technologies/long-inserters-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters.png b/ShinyBob_Techs/graphics/technologies/long-inserters.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/long-inserters.png rename to ShinyBob_Techs/graphics/technologies/long-inserters.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/low-density-structure-1.png b/ShinyBob_Techs/graphics/technologies/low-density-structure-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/low-density-structure-1.png rename to ShinyBob_Techs/graphics/technologies/low-density-structure-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/low-density-structure.png b/ShinyBob_Techs/graphics/technologies/low-density-structure.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/low-density-structure.png rename to ShinyBob_Techs/graphics/technologies/low-density-structure.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/magenta-inserters.png b/ShinyBob_Techs/graphics/technologies/magenta-inserters.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/magenta-inserters.png rename to ShinyBob_Techs/graphics/technologies/magenta-inserters.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military-1.png b/ShinyBob_Techs/graphics/technologies/military-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military-1.png rename to ShinyBob_Techs/graphics/technologies/military-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military-2-old.png b/ShinyBob_Techs/graphics/technologies/military-2-old.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military-2-old.png rename to ShinyBob_Techs/graphics/technologies/military-2-old.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military-2.png b/ShinyBob_Techs/graphics/technologies/military-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military-2.png rename to ShinyBob_Techs/graphics/technologies/military-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military-3.png b/ShinyBob_Techs/graphics/technologies/military-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military-3.png rename to ShinyBob_Techs/graphics/technologies/military-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military-4.png b/ShinyBob_Techs/graphics/technologies/military-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military-4.png rename to ShinyBob_Techs/graphics/technologies/military-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/military.png b/ShinyBob_Techs/graphics/technologies/military.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/military.png rename to ShinyBob_Techs/graphics/technologies/military.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/miniloader.png b/ShinyBob_Techs/graphics/technologies/miniloader.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/miniloader.png rename to ShinyBob_Techs/graphics/technologies/miniloader.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-0.png b/ShinyBob_Techs/graphics/technologies/mining-drill-0.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-0.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-0.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-1.png b/ShinyBob_Techs/graphics/technologies/mining-drill-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-1.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-2.png b/ShinyBob_Techs/graphics/technologies/mining-drill-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-2.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-3.png b/ShinyBob_Techs/graphics/technologies/mining-drill-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-3.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-4.png b/ShinyBob_Techs/graphics/technologies/mining-drill-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-4.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-1.png b/ShinyBob_Techs/graphics/technologies/mining-drill-area-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-1.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-area-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-2.png b/ShinyBob_Techs/graphics/technologies/mining-drill-area-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-2.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-area-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-3.png b/ShinyBob_Techs/graphics/technologies/mining-drill-area-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-3.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-area-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-4.png b/ShinyBob_Techs/graphics/technologies/mining-drill-area-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-drill-area-4.png rename to ShinyBob_Techs/graphics/technologies/mining-drill-area-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mining-productivity.png b/ShinyBob_Techs/graphics/technologies/mining-productivity.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mining-productivity.png rename to ShinyBob_Techs/graphics/technologies/mining-productivity.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/mixing-steel-furnace.png b/ShinyBob_Techs/graphics/technologies/mixing-steel-furnace.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/mixing-steel-furnace.png rename to ShinyBob_Techs/graphics/technologies/mixing-steel-furnace.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/module.png b/ShinyBob_Techs/graphics/technologies/module.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/module.png rename to ShinyBob_Techs/graphics/technologies/module.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/modules-1.png b/ShinyBob_Techs/graphics/technologies/modules-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/modules-1.png rename to ShinyBob_Techs/graphics/technologies/modules-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/modules-2.png b/ShinyBob_Techs/graphics/technologies/modules-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/modules-2.png rename to ShinyBob_Techs/graphics/technologies/modules-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/more-inserters-1.png b/ShinyBob_Techs/graphics/technologies/more-inserters-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/more-inserters-1.png rename to ShinyBob_Techs/graphics/technologies/more-inserters-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/more-inserters-2.png b/ShinyBob_Techs/graphics/technologies/more-inserters-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/more-inserters-2.png rename to ShinyBob_Techs/graphics/technologies/more-inserters-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace (2).png b/ShinyBob_Techs/graphics/technologies/multi-purpose-furnace (2).png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace (2).png rename to ShinyBob_Techs/graphics/technologies/multi-purpose-furnace (2).png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace-1.png b/ShinyBob_Techs/graphics/technologies/multi-purpose-furnace-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace-1.png rename to ShinyBob_Techs/graphics/technologies/multi-purpose-furnace-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace-2.png b/ShinyBob_Techs/graphics/technologies/multi-purpose-furnace-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace-2.png rename to ShinyBob_Techs/graphics/technologies/multi-purpose-furnace-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace.png b/ShinyBob_Techs/graphics/technologies/multi-purpose-furnace.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/multi-purpose-furnace.png rename to ShinyBob_Techs/graphics/technologies/multi-purpose-furnace.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nano-range.png b/ShinyBob_Techs/graphics/technologies/nano-range.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nano-range.png rename to ShinyBob_Techs/graphics/technologies/nano-range.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nano-speed.png b/ShinyBob_Techs/graphics/technologies/nano-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nano-speed.png rename to ShinyBob_Techs/graphics/technologies/nano-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/near-inserters-1.png b/ShinyBob_Techs/graphics/technologies/near-inserters-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/near-inserters-1.png rename to ShinyBob_Techs/graphics/technologies/near-inserters-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/near-inserters.png b/ShinyBob_Techs/graphics/technologies/near-inserters.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/near-inserters.png rename to ShinyBob_Techs/graphics/technologies/near-inserters.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nickel-processing.png b/ShinyBob_Techs/graphics/technologies/nickel-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nickel-processing.png rename to ShinyBob_Techs/graphics/technologies/nickel-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-1.png b/ShinyBob_Techs/graphics/technologies/night-vision-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/night-vision-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-2.png b/ShinyBob_Techs/graphics/technologies/night-vision-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/night-vision-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-3.png b/ShinyBob_Techs/graphics/technologies/night-vision-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/night-vision-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment.png b/ShinyBob_Techs/graphics/technologies/night-vision-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/night-vision-equipment.png rename to ShinyBob_Techs/graphics/technologies/night-vision-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nitinol-processing.png b/ShinyBob_Techs/graphics/technologies/nitinol-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nitinol-processing.png rename to ShinyBob_Techs/graphics/technologies/nitinol-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nitrogen-processing.png b/ShinyBob_Techs/graphics/technologies/nitrogen-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nitrogen-processing.png rename to ShinyBob_Techs/graphics/technologies/nitrogen-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nitroglycerin-processing.png b/ShinyBob_Techs/graphics/technologies/nitroglycerin-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nitroglycerin-processing.png rename to ShinyBob_Techs/graphics/technologies/nitroglycerin-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nuclear-fuel-reprocessing.png b/ShinyBob_Techs/graphics/technologies/nuclear-fuel-reprocessing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nuclear-fuel-reprocessing.png rename to ShinyBob_Techs/graphics/technologies/nuclear-fuel-reprocessing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/nuclear-power.png b/ShinyBob_Techs/graphics/technologies/nuclear-power.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/nuclear-power.png rename to ShinyBob_Techs/graphics/technologies/nuclear-power.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-gathering.png b/ShinyBob_Techs/graphics/technologies/oil-gathering.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-gathering.png rename to ShinyBob_Techs/graphics/technologies/oil-gathering.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-1.png b/ShinyBob_Techs/graphics/technologies/oil-processing-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-1.png rename to ShinyBob_Techs/graphics/technologies/oil-processing-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-2.png b/ShinyBob_Techs/graphics/technologies/oil-processing-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-2.png rename to ShinyBob_Techs/graphics/technologies/oil-processing-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-3.png b/ShinyBob_Techs/graphics/technologies/oil-processing-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-3.png rename to ShinyBob_Techs/graphics/technologies/oil-processing-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-4.png b/ShinyBob_Techs/graphics/technologies/oil-processing-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-4.png rename to ShinyBob_Techs/graphics/technologies/oil-processing-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-old.png b/ShinyBob_Techs/graphics/technologies/oil-processing-old.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil-processing-old.png rename to ShinyBob_Techs/graphics/technologies/oil-processing-old.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/oil.png b/ShinyBob_Techs/graphics/technologies/oil.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/oil.png rename to ShinyBob_Techs/graphics/technologies/oil.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/optics.png b/ShinyBob_Techs/graphics/technologies/optics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/optics.png rename to ShinyBob_Techs/graphics/technologies/optics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-1.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-2.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-3.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-4.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-5.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-6.png b/ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-laser-defense-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/personal-laser-defense-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-roboport-equipment-1.png b/ShinyBob_Techs/graphics/technologies/personal-roboport-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-roboport-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/personal-roboport-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/personal-roboport-equipment-2.png b/ShinyBob_Techs/graphics/technologies/personal-roboport-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/personal-roboport-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/personal-roboport-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/plastics.png b/ShinyBob_Techs/graphics/technologies/plastics.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/plastics.png rename to ShinyBob_Techs/graphics/technologies/plastics.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/polishing.png b/ShinyBob_Techs/graphics/technologies/polishing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/polishing.png rename to ShinyBob_Techs/graphics/technologies/polishing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk2.png b/ShinyBob_Techs/graphics/technologies/power-armor-mk2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk2.png rename to ShinyBob_Techs/graphics/technologies/power-armor-mk2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk3.png b/ShinyBob_Techs/graphics/technologies/power-armor-mk3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk3.png rename to ShinyBob_Techs/graphics/technologies/power-armor-mk3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk4.png b/ShinyBob_Techs/graphics/technologies/power-armor-mk4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk4.png rename to ShinyBob_Techs/graphics/technologies/power-armor-mk4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk5.png b/ShinyBob_Techs/graphics/technologies/power-armor-mk5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/power-armor-mk5.png rename to ShinyBob_Techs/graphics/technologies/power-armor-mk5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/power-armor.png b/ShinyBob_Techs/graphics/technologies/power-armor.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/power-armor.png rename to ShinyBob_Techs/graphics/technologies/power-armor.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/productivity-module.png b/ShinyBob_Techs/graphics/technologies/productivity-module.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/productivity-module.png rename to ShinyBob_Techs/graphics/technologies/productivity-module.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/purple-miniloader.png b/ShinyBob_Techs/graphics/technologies/purple-miniloader.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/purple-miniloader.png rename to ShinyBob_Techs/graphics/technologies/purple-miniloader.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/radars-1.png b/ShinyBob_Techs/graphics/technologies/radars-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/radars-1.png rename to ShinyBob_Techs/graphics/technologies/radars-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/radars-2.png b/ShinyBob_Techs/graphics/technologies/radars-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/radars-2.png rename to ShinyBob_Techs/graphics/technologies/radars-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/radars-3.png b/ShinyBob_Techs/graphics/technologies/radars-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/radars-3.png rename to ShinyBob_Techs/graphics/technologies/radars-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/radars-4.png b/ShinyBob_Techs/graphics/technologies/radars-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/radars-4.png rename to ShinyBob_Techs/graphics/technologies/radars-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/radars-5.png b/ShinyBob_Techs/graphics/technologies/radars-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/radars-5.png rename to ShinyBob_Techs/graphics/technologies/radars-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rail-signals.png b/ShinyBob_Techs/graphics/technologies/rail-signals.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rail-signals.png rename to ShinyBob_Techs/graphics/technologies/rail-signals.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/railway-1.png b/ShinyBob_Techs/graphics/technologies/railway-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/railway-1.png rename to ShinyBob_Techs/graphics/technologies/railway-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/railway-2.png b/ShinyBob_Techs/graphics/technologies/railway-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/railway-2.png rename to ShinyBob_Techs/graphics/technologies/railway-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/railway-3.png b/ShinyBob_Techs/graphics/technologies/railway-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/railway-3.png rename to ShinyBob_Techs/graphics/technologies/railway-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/railway-armoured-1.png b/ShinyBob_Techs/graphics/technologies/railway-armoured-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/railway-armoured-1.png rename to ShinyBob_Techs/graphics/technologies/railway-armoured-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/railway-armoured-2.png b/ShinyBob_Techs/graphics/technologies/railway-armoured-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/railway-armoured-2.png rename to ShinyBob_Techs/graphics/technologies/railway-armoured-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/reinforced-wall.png b/ShinyBob_Techs/graphics/technologies/reinforced-wall.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/reinforced-wall.png rename to ShinyBob_Techs/graphics/technologies/reinforced-wall.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/research-speed.png b/ShinyBob_Techs/graphics/technologies/research-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/research-speed.png rename to ShinyBob_Techs/graphics/technologies/research-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/roboport-1.png b/ShinyBob_Techs/graphics/technologies/roboport-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/roboport-1.png rename to ShinyBob_Techs/graphics/technologies/roboport-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/roboport-2.png b/ShinyBob_Techs/graphics/technologies/roboport-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/roboport-2.png rename to ShinyBob_Techs/graphics/technologies/roboport-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/roboport-3.png b/ShinyBob_Techs/graphics/technologies/roboport-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/roboport-3.png rename to ShinyBob_Techs/graphics/technologies/roboport-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/roboport-4.png b/ShinyBob_Techs/graphics/technologies/roboport-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/roboport-4.png rename to ShinyBob_Techs/graphics/technologies/roboport-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/robotics-1.png b/ShinyBob_Techs/graphics/technologies/robotics-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/robotics-1.png rename to ShinyBob_Techs/graphics/technologies/robotics-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/robotics-2.png b/ShinyBob_Techs/graphics/technologies/robotics-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/robotics-2.png rename to ShinyBob_Techs/graphics/technologies/robotics-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/robotics-3.png b/ShinyBob_Techs/graphics/technologies/robotics-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/robotics-3.png rename to ShinyBob_Techs/graphics/technologies/robotics-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/robotics-4.png b/ShinyBob_Techs/graphics/technologies/robotics-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/robotics-4.png rename to ShinyBob_Techs/graphics/technologies/robotics-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/robotics-5.png b/ShinyBob_Techs/graphics/technologies/robotics-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/robotics-5.png rename to ShinyBob_Techs/graphics/technologies/robotics-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocket-damage.png b/ShinyBob_Techs/graphics/technologies/rocket-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocket-damage.png rename to ShinyBob_Techs/graphics/technologies/rocket-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocket-engine.png b/ShinyBob_Techs/graphics/technologies/rocket-engine.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocket-engine.png rename to ShinyBob_Techs/graphics/technologies/rocket-engine.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocket-fuel.png b/ShinyBob_Techs/graphics/technologies/rocket-fuel.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocket-fuel.png rename to ShinyBob_Techs/graphics/technologies/rocket-fuel.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocket-silo.png b/ShinyBob_Techs/graphics/technologies/rocket-silo.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocket-silo.png rename to ShinyBob_Techs/graphics/technologies/rocket-silo.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocket-speed.png b/ShinyBob_Techs/graphics/technologies/rocket-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocket-speed.png rename to ShinyBob_Techs/graphics/technologies/rocket-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/rocketry.png b/ShinyBob_Techs/graphics/technologies/rocketry.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/rocketry.png rename to ShinyBob_Techs/graphics/technologies/rocketry.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/shotgun-shell-damage.png b/ShinyBob_Techs/graphics/technologies/shotgun-shell-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/shotgun-shell-damage.png rename to ShinyBob_Techs/graphics/technologies/shotgun-shell-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/shotgun-shell-speed.png b/ShinyBob_Techs/graphics/technologies/shotgun-shell-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/shotgun-shell-speed.png rename to ShinyBob_Techs/graphics/technologies/shotgun-shell-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/silicon-processing.png b/ShinyBob_Techs/graphics/technologies/silicon-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/silicon-processing.png rename to ShinyBob_Techs/graphics/technologies/silicon-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-1.png b/ShinyBob_Techs/graphics/technologies/sniper-turrets-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-1.png rename to ShinyBob_Techs/graphics/technologies/sniper-turrets-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-2.png b/ShinyBob_Techs/graphics/technologies/sniper-turrets-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-2.png rename to ShinyBob_Techs/graphics/technologies/sniper-turrets-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-3.png b/ShinyBob_Techs/graphics/technologies/sniper-turrets-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-3.png rename to ShinyBob_Techs/graphics/technologies/sniper-turrets-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-damage.png b/ShinyBob_Techs/graphics/technologies/sniper-turrets-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets-damage.png rename to ShinyBob_Techs/graphics/technologies/sniper-turrets-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets.png b/ShinyBob_Techs/graphics/technologies/sniper-turrets.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sniper-turrets.png rename to ShinyBob_Techs/graphics/technologies/sniper-turrets.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-1.png b/ShinyBob_Techs/graphics/technologies/solar-energy-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-1.png rename to ShinyBob_Techs/graphics/technologies/solar-energy-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-2.png b/ShinyBob_Techs/graphics/technologies/solar-energy-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-2.png rename to ShinyBob_Techs/graphics/technologies/solar-energy-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-3.png b/ShinyBob_Techs/graphics/technologies/solar-energy-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-3.png rename to ShinyBob_Techs/graphics/technologies/solar-energy-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-4.png b/ShinyBob_Techs/graphics/technologies/solar-energy-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy-4.png rename to ShinyBob_Techs/graphics/technologies/solar-energy-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy.png b/ShinyBob_Techs/graphics/technologies/solar-energy.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-energy.png rename to ShinyBob_Techs/graphics/technologies/solar-energy.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-1.png b/ShinyBob_Techs/graphics/technologies/solar-panel-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/solar-panel-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-2.png b/ShinyBob_Techs/graphics/technologies/solar-panel-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/solar-panel-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-3.png b/ShinyBob_Techs/graphics/technologies/solar-panel-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/solar-panel-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-4.png b/ShinyBob_Techs/graphics/technologies/solar-panel-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solar-panel-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/solar-panel-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/solid-fuel.png b/ShinyBob_Techs/graphics/technologies/solid-fuel.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/solid-fuel.png rename to ShinyBob_Techs/graphics/technologies/solid-fuel.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/speed-module.png b/ShinyBob_Techs/graphics/technologies/speed-module.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/speed-module.png rename to ShinyBob_Techs/graphics/technologies/speed-module.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserter-capacity-bonus.png b/ShinyBob_Techs/graphics/technologies/stack-inserter-capacity-bonus.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserter-capacity-bonus.png rename to ShinyBob_Techs/graphics/technologies/stack-inserter-capacity-bonus.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserters-2.png b/ShinyBob_Techs/graphics/technologies/stack-inserters-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserters-2.png rename to ShinyBob_Techs/graphics/technologies/stack-inserters-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserters.png b/ShinyBob_Techs/graphics/technologies/stack-inserters.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/stack-inserters.png rename to ShinyBob_Techs/graphics/technologies/stack-inserters.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-1.png b/ShinyBob_Techs/graphics/technologies/steam-engine-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-1.png rename to ShinyBob_Techs/graphics/technologies/steam-engine-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-2.png b/ShinyBob_Techs/graphics/technologies/steam-engine-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-2.png rename to ShinyBob_Techs/graphics/technologies/steam-engine-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-3.png b/ShinyBob_Techs/graphics/technologies/steam-engine-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/steam-engine-3.png rename to ShinyBob_Techs/graphics/technologies/steam-engine-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/steel-processing.png b/ShinyBob_Techs/graphics/technologies/steel-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/steel-processing.png rename to ShinyBob_Techs/graphics/technologies/steel-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/stone-walls.png b/ShinyBob_Techs/graphics/technologies/stone-walls.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/stone-walls.png rename to ShinyBob_Techs/graphics/technologies/stone-walls.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/sulfur-processing.png b/ShinyBob_Techs/graphics/technologies/sulfur-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/sulfur-processing.png rename to ShinyBob_Techs/graphics/technologies/sulfur-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tank-artillery-damage.png b/ShinyBob_Techs/graphics/technologies/tank-artillery-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tank-artillery-damage.png rename to ShinyBob_Techs/graphics/technologies/tank-artillery-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tank-artillery-speed.png b/ShinyBob_Techs/graphics/technologies/tank-artillery-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tank-artillery-speed.png rename to ShinyBob_Techs/graphics/technologies/tank-artillery-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon-damage.png b/ShinyBob_Techs/graphics/technologies/tank-cannon-damage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon-damage.png rename to ShinyBob_Techs/graphics/technologies/tank-cannon-damage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon-speed.png b/ShinyBob_Techs/graphics/technologies/tank-cannon-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon-speed.png rename to ShinyBob_Techs/graphics/technologies/tank-cannon-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon.png b/ShinyBob_Techs/graphics/technologies/tank-cannon.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tank-cannon.png rename to ShinyBob_Techs/graphics/technologies/tank-cannon.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tanks-1.png b/ShinyBob_Techs/graphics/technologies/tanks-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tanks-1.png rename to ShinyBob_Techs/graphics/technologies/tanks-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tanks-2.png b/ShinyBob_Techs/graphics/technologies/tanks-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tanks-2.png rename to ShinyBob_Techs/graphics/technologies/tanks-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tanks-3.png b/ShinyBob_Techs/graphics/technologies/tanks-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tanks-3.png rename to ShinyBob_Techs/graphics/technologies/tanks-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tanks.png b/ShinyBob_Techs/graphics/technologies/tanks.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tanks.png rename to ShinyBob_Techs/graphics/technologies/tanks.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/titanium-processing.png b/ShinyBob_Techs/graphics/technologies/titanium-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/titanium-processing.png rename to ShinyBob_Techs/graphics/technologies/titanium-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-1.png b/ShinyBob_Techs/graphics/technologies/toolbelt-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-1.png rename to ShinyBob_Techs/graphics/technologies/toolbelt-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-2.png b/ShinyBob_Techs/graphics/technologies/toolbelt-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-2.png rename to ShinyBob_Techs/graphics/technologies/toolbelt-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-3.png b/ShinyBob_Techs/graphics/technologies/toolbelt-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/toolbelt-3.png rename to ShinyBob_Techs/graphics/technologies/toolbelt-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tungsten-alloy-processing.png b/ShinyBob_Techs/graphics/technologies/tungsten-alloy-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tungsten-alloy-processing.png rename to ShinyBob_Techs/graphics/technologies/tungsten-alloy-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/tungsten-processing.png b/ShinyBob_Techs/graphics/technologies/tungsten-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/tungsten-processing.png rename to ShinyBob_Techs/graphics/technologies/tungsten-processing.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/turrets.png b/ShinyBob_Techs/graphics/technologies/turrets.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/turrets.png rename to ShinyBob_Techs/graphics/technologies/turrets.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/uranium-ammo.png b/ShinyBob_Techs/graphics/technologies/uranium-ammo.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/uranium-ammo.png rename to ShinyBob_Techs/graphics/technologies/uranium-ammo.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery.png b/ShinyBob_Techs/graphics/technologies/vehicle-battery.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-battery.png rename to ShinyBob_Techs/graphics/technologies/vehicle-battery.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-big-turret-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-big-turret-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-energy-shield-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-energy-shield-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-engine-equipment.png b/ShinyBob_Techs/graphics/technologies/vehicle-engine-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-engine-equipment.png rename to ShinyBob_Techs/graphics/technologies/vehicle-engine-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-cell-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-cell-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-fusion-reactor-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-fusion-reactor-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-laser-defense-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-laser-defense-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-motor-equipment.png b/ShinyBob_Techs/graphics/technologies/vehicle-motor-equipment.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-motor-equipment.png rename to ShinyBob_Techs/graphics/technologies/vehicle-motor-equipment.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-roboport-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-roboport-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-roboport-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-roboport-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-roboport-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-roboport-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-roboport-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-roboport-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-1.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-1.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-2.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-2.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-3.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-3.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-4.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-4.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-5.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-5.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-6.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-6.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel-equipment-6.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel-equipment-6.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel.png b/ShinyBob_Techs/graphics/technologies/vehicle-solar-panel.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/vehicle-solar-panel.png rename to ShinyBob_Techs/graphics/technologies/vehicle-solar-panel.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/void.png b/ShinyBob_Techs/graphics/technologies/void.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/void.png rename to ShinyBob_Techs/graphics/technologies/void.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-1.png b/ShinyBob_Techs/graphics/technologies/water-bore-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-1.png rename to ShinyBob_Techs/graphics/technologies/water-bore-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-2.png b/ShinyBob_Techs/graphics/technologies/water-bore-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-2.png rename to ShinyBob_Techs/graphics/technologies/water-bore-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-3.png b/ShinyBob_Techs/graphics/technologies/water-bore-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-3.png rename to ShinyBob_Techs/graphics/technologies/water-bore-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-4.png b/ShinyBob_Techs/graphics/technologies/water-bore-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-bore-4.png rename to ShinyBob_Techs/graphics/technologies/water-bore-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-bore.png b/ShinyBob_Techs/graphics/technologies/water-bore.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-bore.png rename to ShinyBob_Techs/graphics/technologies/water-bore.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-gathering.png b/ShinyBob_Techs/graphics/technologies/water-gathering.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-gathering.png rename to ShinyBob_Techs/graphics/technologies/water-gathering.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-.png b/ShinyBob_Techs/graphics/technologies/water-miner-.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-.png rename to ShinyBob_Techs/graphics/technologies/water-miner-.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-1.png b/ShinyBob_Techs/graphics/technologies/water-miner-1.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-1.png rename to ShinyBob_Techs/graphics/technologies/water-miner-1.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-2.png b/ShinyBob_Techs/graphics/technologies/water-miner-2.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-2.png rename to ShinyBob_Techs/graphics/technologies/water-miner-2.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-3.png b/ShinyBob_Techs/graphics/technologies/water-miner-3.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-3.png rename to ShinyBob_Techs/graphics/technologies/water-miner-3.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-4.png b/ShinyBob_Techs/graphics/technologies/water-miner-4.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-4.png rename to ShinyBob_Techs/graphics/technologies/water-miner-4.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-5.png b/ShinyBob_Techs/graphics/technologies/water-miner-5.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/water-miner-5.png rename to ShinyBob_Techs/graphics/technologies/water-miner-5.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/worker-robots-speed.png b/ShinyBob_Techs/graphics/technologies/worker-robots-speed.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/worker-robots-speed.png rename to ShinyBob_Techs/graphics/technologies/worker-robots-speed.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/worker-robots-storage.png b/ShinyBob_Techs/graphics/technologies/worker-robots-storage.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/worker-robots-storage.png rename to ShinyBob_Techs/graphics/technologies/worker-robots-storage.png diff --git a/ShinyBob_Techs_9.16.0/graphics/technologies/zinc-processing.png b/ShinyBob_Techs/graphics/technologies/zinc-processing.png similarity index 100% rename from ShinyBob_Techs_9.16.0/graphics/technologies/zinc-processing.png rename to ShinyBob_Techs/graphics/technologies/zinc-processing.png diff --git a/ShinyBob_Techs_9.16.0/info.json b/ShinyBob_Techs/info.json similarity index 100% rename from ShinyBob_Techs_9.16.0/info.json rename to ShinyBob_Techs/info.json diff --git a/ShinyBob_Techs_9.16.0/prototypes/all_icons.lua b/ShinyBob_Techs/prototypes/all_icons.lua similarity index 100% rename from ShinyBob_Techs_9.16.0/prototypes/all_icons.lua rename to ShinyBob_Techs/prototypes/all_icons.lua diff --git a/ShinyBob_Techs_9.16.0/prototypes/functions/shinyfunc.lua b/ShinyBob_Techs/prototypes/functions/shinyfunc.lua similarity index 100% rename from ShinyBob_Techs_9.16.0/prototypes/functions/shinyfunc.lua rename to ShinyBob_Techs/prototypes/functions/shinyfunc.lua diff --git a/ShinyBob_Techs_9.16.0/thumbnail.png b/ShinyBob_Techs/thumbnail.png similarity index 100% rename from ShinyBob_Techs_9.16.0/thumbnail.png rename to ShinyBob_Techs/thumbnail.png diff --git a/Shortcuts-ick_1.1.28/LICENSE.txt b/Shortcuts-ick/LICENSE.txt similarity index 100% rename from Shortcuts-ick_1.1.28/LICENSE.txt rename to Shortcuts-ick/LICENSE.txt diff --git a/Shortcuts-ick_1.1.28/README.md b/Shortcuts-ick/README.md similarity index 100% rename from Shortcuts-ick_1.1.28/README.md rename to Shortcuts-ick/README.md diff --git a/Shortcuts-ick_1.1.28/changelog.txt b/Shortcuts-ick/changelog.txt similarity index 100% rename from Shortcuts-ick_1.1.28/changelog.txt rename to Shortcuts-ick/changelog.txt diff --git a/Shortcuts-ick_1.1.28/control.lua b/Shortcuts-ick/control.lua similarity index 100% rename from Shortcuts-ick_1.1.28/control.lua rename to Shortcuts-ick/control.lua diff --git a/Shortcuts-ick_1.1.28/data-final-fixes.lua b/Shortcuts-ick/data-final-fixes.lua similarity index 100% rename from Shortcuts-ick_1.1.28/data-final-fixes.lua rename to Shortcuts-ick/data-final-fixes.lua diff --git a/Shortcuts-ick_1.1.28/data-updates.lua b/Shortcuts-ick/data-updates.lua similarity index 100% rename from Shortcuts-ick_1.1.28/data-updates.lua rename to Shortcuts-ick/data-updates.lua diff --git a/Shortcuts-ick_1.1.28/data.lua b/Shortcuts-ick/data.lua similarity index 100% rename from Shortcuts-ick_1.1.28/data.lua rename to Shortcuts-ick/data.lua diff --git a/Shortcuts-ick/graphics/active-defense-equipment-x24-white.png b/Shortcuts-ick/graphics/active-defense-equipment-x24-white.png new file mode 100644 index 00000000..fa3f04f0 Binary files /dev/null and b/Shortcuts-ick/graphics/active-defense-equipment-x24-white.png differ diff --git a/Shortcuts-ick/graphics/active-defense-equipment-x24.png b/Shortcuts-ick/graphics/active-defense-equipment-x24.png new file mode 100644 index 00000000..b9350b37 Binary files /dev/null and b/Shortcuts-ick/graphics/active-defense-equipment-x24.png differ diff --git a/Shortcuts-ick/graphics/active-defense-equipment-x32-white.png b/Shortcuts-ick/graphics/active-defense-equipment-x32-white.png new file mode 100644 index 00000000..7698d654 Binary files /dev/null and b/Shortcuts-ick/graphics/active-defense-equipment-x32-white.png differ diff --git a/Shortcuts-ick/graphics/active-defense-equipment-x32.png b/Shortcuts-ick/graphics/active-defense-equipment-x32.png new file mode 100644 index 00000000..2b20cc83 Binary files /dev/null and b/Shortcuts-ick/graphics/active-defense-equipment-x32.png differ diff --git a/Shortcuts-ick/graphics/artillery-cluster-remote-x32-white.png b/Shortcuts-ick/graphics/artillery-cluster-remote-x32-white.png new file mode 100644 index 00000000..e2f2fc41 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-cluster-remote-x32-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-discovery-remote-x32-white.png b/Shortcuts-ick/graphics/artillery-discovery-remote-x32-white.png new file mode 100644 index 00000000..dcf28e92 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-discovery-remote-x32-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool-red.png b/Shortcuts-ick/graphics/artillery-jammer-tool-red.png new file mode 100644 index 00000000..073d44d3 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool-red.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool-x24-white.png b/Shortcuts-ick/graphics/artillery-jammer-tool-x24-white.png new file mode 100644 index 00000000..0d8e9bc1 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool-x24-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool-x24.png b/Shortcuts-ick/graphics/artillery-jammer-tool-x24.png new file mode 100644 index 00000000..b531381d Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool-x24.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool-x32-white.png b/Shortcuts-ick/graphics/artillery-jammer-tool-x32-white.png new file mode 100644 index 00000000..ea9836a1 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool-x32-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool-x32.png b/Shortcuts-ick/graphics/artillery-jammer-tool-x32.png new file mode 100644 index 00000000..13b2988a Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool-x32.png differ diff --git a/Shortcuts-ick/graphics/artillery-jammer-tool.png b/Shortcuts-ick/graphics/artillery-jammer-tool.png new file mode 100644 index 00000000..940b5238 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-jammer-tool.png differ diff --git a/Shortcuts-ick/graphics/artillery-targeting-remote-x24-white.png b/Shortcuts-ick/graphics/artillery-targeting-remote-x24-white.png new file mode 100644 index 00000000..778e4ea0 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-targeting-remote-x24-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-targeting-remote-x24.png b/Shortcuts-ick/graphics/artillery-targeting-remote-x24.png new file mode 100644 index 00000000..6a9b7e17 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-targeting-remote-x24.png differ diff --git a/Shortcuts-ick/graphics/artillery-targeting-remote-x32-white.png b/Shortcuts-ick/graphics/artillery-targeting-remote-x32-white.png new file mode 100644 index 00000000..1c1ced97 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-targeting-remote-x32-white.png differ diff --git a/Shortcuts-ick/graphics/artillery-targeting-remote-x32.png b/Shortcuts-ick/graphics/artillery-targeting-remote-x32.png new file mode 100644 index 00000000..2dc36e35 Binary files /dev/null and b/Shortcuts-ick/graphics/artillery-targeting-remote-x32.png differ diff --git a/Shortcuts-ick/graphics/belt-immunity-toggle-x24-white.png b/Shortcuts-ick/graphics/belt-immunity-toggle-x24-white.png new file mode 100644 index 00000000..428c2eee Binary files /dev/null and b/Shortcuts-ick/graphics/belt-immunity-toggle-x24-white.png differ diff --git a/Shortcuts-ick/graphics/belt-immunity-toggle-x24.png b/Shortcuts-ick/graphics/belt-immunity-toggle-x24.png new file mode 100644 index 00000000..f9543e83 Binary files /dev/null and b/Shortcuts-ick/graphics/belt-immunity-toggle-x24.png differ diff --git a/Shortcuts-ick/graphics/belt-immunity-toggle-x32-white.png b/Shortcuts-ick/graphics/belt-immunity-toggle-x32-white.png new file mode 100644 index 00000000..cb267ec3 Binary files /dev/null and b/Shortcuts-ick/graphics/belt-immunity-toggle-x32-white.png differ diff --git a/Shortcuts-ick/graphics/belt-immunity-toggle-x32.png b/Shortcuts-ick/graphics/belt-immunity-toggle-x32.png new file mode 100644 index 00000000..ee477c3c Binary files /dev/null and b/Shortcuts-ick/graphics/belt-immunity-toggle-x32.png differ diff --git a/Shortcuts-ick/graphics/big-zoom-x24-white.png b/Shortcuts-ick/graphics/big-zoom-x24-white.png new file mode 100644 index 00000000..1825e756 Binary files /dev/null and b/Shortcuts-ick/graphics/big-zoom-x24-white.png differ diff --git a/Shortcuts-ick/graphics/big-zoom-x24.png b/Shortcuts-ick/graphics/big-zoom-x24.png new file mode 100644 index 00000000..e55836ea Binary files /dev/null and b/Shortcuts-ick/graphics/big-zoom-x24.png differ diff --git a/Shortcuts-ick/graphics/big-zoom-x32-white.png b/Shortcuts-ick/graphics/big-zoom-x32-white.png new file mode 100644 index 00000000..76deefca Binary files /dev/null and b/Shortcuts-ick/graphics/big-zoom-x32-white.png differ diff --git a/Shortcuts-ick/graphics/big-zoom-x32.png b/Shortcuts-ick/graphics/big-zoom-x32.png new file mode 100644 index 00000000..4a9265b7 Binary files /dev/null and b/Shortcuts-ick/graphics/big-zoom-x32.png differ diff --git a/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-new.png b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-new.png new file mode 100644 index 00000000..b075909a Binary files /dev/null and b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-new.png differ diff --git a/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white-new.png b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white-new.png new file mode 100644 index 00000000..24b7aff7 Binary files /dev/null and b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white-new.png differ diff --git a/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white.png b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white.png new file mode 100644 index 00000000..fc7987a6 Binary files /dev/null and b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32-white.png differ diff --git a/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32.png b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32.png new file mode 100644 index 00000000..59c64695 Binary files /dev/null and b/Shortcuts-ick/graphics/cliff-fish-item-on-ground-x32.png differ diff --git a/Shortcuts-ick/graphics/discharge-defense-remote-x24-white.png b/Shortcuts-ick/graphics/discharge-defense-remote-x24-white.png new file mode 100644 index 00000000..a174fd71 Binary files /dev/null and b/Shortcuts-ick/graphics/discharge-defense-remote-x24-white.png differ diff --git a/Shortcuts-ick/graphics/discharge-defense-remote-x24.png b/Shortcuts-ick/graphics/discharge-defense-remote-x24.png new file mode 100644 index 00000000..c36bdce4 Binary files /dev/null and b/Shortcuts-ick/graphics/discharge-defense-remote-x24.png differ diff --git a/Shortcuts-ick/graphics/discharge-defense-remote-x32-white.png b/Shortcuts-ick/graphics/discharge-defense-remote-x32-white.png new file mode 100644 index 00000000..fe0f3c1e Binary files /dev/null and b/Shortcuts-ick/graphics/discharge-defense-remote-x32-white.png differ diff --git a/Shortcuts-ick/graphics/discharge-defense-remote-x32.png b/Shortcuts-ick/graphics/discharge-defense-remote-x32.png new file mode 100644 index 00000000..7b319f35 Binary files /dev/null and b/Shortcuts-ick/graphics/discharge-defense-remote-x32.png differ diff --git a/Shortcuts-ick/graphics/driver-is-gunner-x32-2-white.png b/Shortcuts-ick/graphics/driver-is-gunner-x32-2-white.png new file mode 100644 index 00000000..07cedd04 Binary files /dev/null and b/Shortcuts-ick/graphics/driver-is-gunner-x32-2-white.png differ diff --git a/Shortcuts-ick/graphics/flashlight-toggle-x24-white.png b/Shortcuts-ick/graphics/flashlight-toggle-x24-white.png new file mode 100644 index 00000000..c77725d8 Binary files /dev/null and b/Shortcuts-ick/graphics/flashlight-toggle-x24-white.png differ diff --git a/Shortcuts-ick/graphics/flashlight-toggle-x24.png b/Shortcuts-ick/graphics/flashlight-toggle-x24.png new file mode 100644 index 00000000..5d759719 Binary files /dev/null and b/Shortcuts-ick/graphics/flashlight-toggle-x24.png differ diff --git a/Shortcuts-ick/graphics/flashlight-toggle-x32-white.png b/Shortcuts-ick/graphics/flashlight-toggle-x32-white.png new file mode 100644 index 00000000..b3439c12 Binary files /dev/null and b/Shortcuts-ick/graphics/flashlight-toggle-x32-white.png differ diff --git a/Shortcuts-ick/graphics/flashlight-toggle-x32.png b/Shortcuts-ick/graphics/flashlight-toggle-x32.png new file mode 100644 index 00000000..6c15f89a Binary files /dev/null and b/Shortcuts-ick/graphics/flashlight-toggle-x32.png differ diff --git a/Shortcuts-ick/graphics/grid-x24-white.png b/Shortcuts-ick/graphics/grid-x24-white.png new file mode 100644 index 00000000..53eb99c1 Binary files /dev/null and b/Shortcuts-ick/graphics/grid-x24-white.png differ diff --git a/Shortcuts-ick/graphics/grid-x24.png b/Shortcuts-ick/graphics/grid-x24.png new file mode 100644 index 00000000..f7624d3d Binary files /dev/null and b/Shortcuts-ick/graphics/grid-x24.png differ diff --git a/Shortcuts-ick/graphics/grid-x32-white.png b/Shortcuts-ick/graphics/grid-x32-white.png new file mode 100644 index 00000000..ec90349d Binary files /dev/null and b/Shortcuts-ick/graphics/grid-x32-white.png differ diff --git a/Shortcuts-ick/graphics/grid-x32.png b/Shortcuts-ick/graphics/grid-x32.png new file mode 100644 index 00000000..fbfb43f6 Binary files /dev/null and b/Shortcuts-ick/graphics/grid-x32.png differ diff --git a/Shortcuts-ick/graphics/ion-cannon-targeter-x24-white.png b/Shortcuts-ick/graphics/ion-cannon-targeter-x24-white.png new file mode 100644 index 00000000..5ce77392 Binary files /dev/null and b/Shortcuts-ick/graphics/ion-cannon-targeter-x24-white.png differ diff --git a/Shortcuts-ick/graphics/ion-cannon-targeter-x24.png b/Shortcuts-ick/graphics/ion-cannon-targeter-x24.png new file mode 100644 index 00000000..9bd7c03f Binary files /dev/null and b/Shortcuts-ick/graphics/ion-cannon-targeter-x24.png differ diff --git a/Shortcuts-ick/graphics/ion-cannon-targeter-x32-white.png b/Shortcuts-ick/graphics/ion-cannon-targeter-x32-white.png new file mode 100644 index 00000000..e20f63c5 Binary files /dev/null and b/Shortcuts-ick/graphics/ion-cannon-targeter-x32-white.png differ diff --git a/Shortcuts-ick/graphics/ion-cannon-targeter-x32.png b/Shortcuts-ick/graphics/ion-cannon-targeter-x32.png new file mode 100644 index 00000000..c39b28cb Binary files /dev/null and b/Shortcuts-ick/graphics/ion-cannon-targeter-x32.png differ diff --git a/Shortcuts-ick/graphics/jetpack-x24-white.png b/Shortcuts-ick/graphics/jetpack-x24-white.png new file mode 100644 index 00000000..0bc54c95 Binary files /dev/null and b/Shortcuts-ick/graphics/jetpack-x24-white.png differ diff --git a/Shortcuts-ick/graphics/jetpack-x24.png b/Shortcuts-ick/graphics/jetpack-x24.png new file mode 100644 index 00000000..1f23f92f Binary files /dev/null and b/Shortcuts-ick/graphics/jetpack-x24.png differ diff --git a/Shortcuts-ick/graphics/jetpack-x32-white.png b/Shortcuts-ick/graphics/jetpack-x32-white.png new file mode 100644 index 00000000..74e81a3f Binary files /dev/null and b/Shortcuts-ick/graphics/jetpack-x32-white.png differ diff --git a/Shortcuts-ick/graphics/jetpack-x32.png b/Shortcuts-ick/graphics/jetpack-x32.png new file mode 100644 index 00000000..8d385139 Binary files /dev/null and b/Shortcuts-ick/graphics/jetpack-x32.png differ diff --git a/Shortcuts-ick/graphics/landmine-thrower-remote-x24-white.png b/Shortcuts-ick/graphics/landmine-thrower-remote-x24-white.png new file mode 100644 index 00000000..d5a4cf35 Binary files /dev/null and b/Shortcuts-ick/graphics/landmine-thrower-remote-x24-white.png differ diff --git a/Shortcuts-ick/graphics/max-rate-calculator-x24-white.png b/Shortcuts-ick/graphics/max-rate-calculator-x24-white.png new file mode 100644 index 00000000..53df52cf Binary files /dev/null and b/Shortcuts-ick/graphics/max-rate-calculator-x24-white.png differ diff --git a/Shortcuts-ick/graphics/max-rate-calculator-x24.png b/Shortcuts-ick/graphics/max-rate-calculator-x24.png new file mode 100644 index 00000000..c9560661 Binary files /dev/null and b/Shortcuts-ick/graphics/max-rate-calculator-x24.png differ diff --git a/Shortcuts-ick/graphics/max-rate-calculator-x32-white.png b/Shortcuts-ick/graphics/max-rate-calculator-x32-white.png new file mode 100644 index 00000000..a80230a0 Binary files /dev/null and b/Shortcuts-ick/graphics/max-rate-calculator-x32-white.png differ diff --git a/Shortcuts-ick/graphics/max-rate-calculator-x32.png b/Shortcuts-ick/graphics/max-rate-calculator-x32.png new file mode 100644 index 00000000..7d3a3492 Binary files /dev/null and b/Shortcuts-ick/graphics/max-rate-calculator-x32.png differ diff --git a/Shortcuts-ick/graphics/mirv-targeting-remote-x24-white.png b/Shortcuts-ick/graphics/mirv-targeting-remote-x24-white.png new file mode 100644 index 00000000..d184beb9 Binary files /dev/null and b/Shortcuts-ick/graphics/mirv-targeting-remote-x24-white.png differ diff --git a/Shortcuts-ick/graphics/mirv-targeting-remote-x24.png b/Shortcuts-ick/graphics/mirv-targeting-remote-x24.png new file mode 100644 index 00000000..4670d870 Binary files /dev/null and b/Shortcuts-ick/graphics/mirv-targeting-remote-x24.png differ diff --git a/Shortcuts-ick/graphics/mirv-targeting-remote-x32-white.png b/Shortcuts-ick/graphics/mirv-targeting-remote-x32-white.png new file mode 100644 index 00000000..c121fd6f Binary files /dev/null and b/Shortcuts-ick/graphics/mirv-targeting-remote-x32-white.png differ diff --git a/Shortcuts-ick/graphics/mirv-targeting-remote-x32.png b/Shortcuts-ick/graphics/mirv-targeting-remote-x32.png new file mode 100644 index 00000000..d99d6967 Binary files /dev/null and b/Shortcuts-ick/graphics/mirv-targeting-remote-x32.png differ diff --git a/Shortcuts-ick/graphics/module-inserter-x24-white.png b/Shortcuts-ick/graphics/module-inserter-x24-white.png new file mode 100644 index 00000000..b6a2543d Binary files /dev/null and b/Shortcuts-ick/graphics/module-inserter-x24-white.png differ diff --git a/Shortcuts-ick/graphics/module-inserter-x24.png b/Shortcuts-ick/graphics/module-inserter-x24.png new file mode 100644 index 00000000..35b1f8ad Binary files /dev/null and b/Shortcuts-ick/graphics/module-inserter-x24.png differ diff --git a/Shortcuts-ick/graphics/module-inserter-x32-white.png b/Shortcuts-ick/graphics/module-inserter-x32-white.png new file mode 100644 index 00000000..d12eca1c Binary files /dev/null and b/Shortcuts-ick/graphics/module-inserter-x32-white.png differ diff --git a/Shortcuts-ick/graphics/module-inserter-x32.png b/Shortcuts-ick/graphics/module-inserter-x32.png new file mode 100644 index 00000000..c05befb2 Binary files /dev/null and b/Shortcuts-ick/graphics/module-inserter-x32.png differ diff --git a/Shortcuts-ick/graphics/night-vision-toggle-x24-white.png b/Shortcuts-ick/graphics/night-vision-toggle-x24-white.png new file mode 100644 index 00000000..64b2d96b Binary files /dev/null and b/Shortcuts-ick/graphics/night-vision-toggle-x24-white.png differ diff --git a/Shortcuts-ick/graphics/night-vision-toggle-x24.png b/Shortcuts-ick/graphics/night-vision-toggle-x24.png new file mode 100644 index 00000000..6ca23b24 Binary files /dev/null and b/Shortcuts-ick/graphics/night-vision-toggle-x24.png differ diff --git a/Shortcuts-ick/graphics/night-vision-toggle-x32-white.png b/Shortcuts-ick/graphics/night-vision-toggle-x32-white.png new file mode 100644 index 00000000..ce8e19cf Binary files /dev/null and b/Shortcuts-ick/graphics/night-vision-toggle-x32-white.png differ diff --git a/Shortcuts-ick/graphics/night-vision-toggle-x32.png b/Shortcuts-ick/graphics/night-vision-toggle-x32.png new file mode 100644 index 00000000..c9532864 Binary files /dev/null and b/Shortcuts-ick/graphics/night-vision-toggle-x32.png differ diff --git a/Shortcuts-ick/graphics/outpost-builder-x24-white.png b/Shortcuts-ick/graphics/outpost-builder-x24-white.png new file mode 100644 index 00000000..81acc299 Binary files /dev/null and b/Shortcuts-ick/graphics/outpost-builder-x24-white.png differ diff --git a/Shortcuts-ick/graphics/outpost-builder-x24.png b/Shortcuts-ick/graphics/outpost-builder-x24.png new file mode 100644 index 00000000..09588a97 Binary files /dev/null and b/Shortcuts-ick/graphics/outpost-builder-x24.png differ diff --git a/Shortcuts-ick/graphics/outpost-builder-x32-white.png b/Shortcuts-ick/graphics/outpost-builder-x32-white.png new file mode 100644 index 00000000..3b2d517f Binary files /dev/null and b/Shortcuts-ick/graphics/outpost-builder-x32-white.png differ diff --git a/Shortcuts-ick/graphics/outpost-builder-x32.png b/Shortcuts-ick/graphics/outpost-builder-x32.png new file mode 100644 index 00000000..99775511 Binary files /dev/null and b/Shortcuts-ick/graphics/outpost-builder-x32.png differ diff --git a/Shortcuts-ick/graphics/path-remote-control-x24-white.png b/Shortcuts-ick/graphics/path-remote-control-x24-white.png new file mode 100644 index 00000000..6e4a4046 Binary files /dev/null and b/Shortcuts-ick/graphics/path-remote-control-x24-white.png differ diff --git a/Shortcuts-ick/graphics/path-remote-control-x24.png b/Shortcuts-ick/graphics/path-remote-control-x24.png new file mode 100644 index 00000000..d3e84558 Binary files /dev/null and b/Shortcuts-ick/graphics/path-remote-control-x24.png differ diff --git a/Shortcuts-ick/graphics/path-remote-control-x32-white.png b/Shortcuts-ick/graphics/path-remote-control-x32-white.png new file mode 100644 index 00000000..86ea37d0 Binary files /dev/null and b/Shortcuts-ick/graphics/path-remote-control-x32-white.png differ diff --git a/Shortcuts-ick/graphics/path-remote-control-x32.png b/Shortcuts-ick/graphics/path-remote-control-x32.png new file mode 100644 index 00000000..8c00200c Binary files /dev/null and b/Shortcuts-ick/graphics/path-remote-control-x32.png differ diff --git a/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2-white.png b/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2-white.png new file mode 100644 index 00000000..45217dd8 Binary files /dev/null and b/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2-white.png differ diff --git a/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2.png b/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2.png new file mode 100644 index 00000000..e2de9eff Binary files /dev/null and b/Shortcuts-ick/graphics/rail-block-visualization-toggle-x32-2.png differ diff --git a/Shortcuts-ick/graphics/signal-flare-x24-white.png b/Shortcuts-ick/graphics/signal-flare-x24-white.png new file mode 100644 index 00000000..494291f4 Binary files /dev/null and b/Shortcuts-ick/graphics/signal-flare-x24-white.png differ diff --git a/Shortcuts-ick/graphics/signal-flare-x24.png b/Shortcuts-ick/graphics/signal-flare-x24.png new file mode 100644 index 00000000..cacb6225 Binary files /dev/null and b/Shortcuts-ick/graphics/signal-flare-x24.png differ diff --git a/Shortcuts-ick/graphics/signal-flare-x32-white.png b/Shortcuts-ick/graphics/signal-flare-x32-white.png new file mode 100644 index 00000000..69c9aa3e Binary files /dev/null and b/Shortcuts-ick/graphics/signal-flare-x32-white.png differ diff --git a/Shortcuts-ick/graphics/signal-flare-x32.png b/Shortcuts-ick/graphics/signal-flare-x32.png new file mode 100644 index 00000000..84124ea2 Binary files /dev/null and b/Shortcuts-ick/graphics/signal-flare-x32.png differ diff --git a/Shortcuts-ick/graphics/spidertron-remote-x40-2-white.png b/Shortcuts-ick/graphics/spidertron-remote-x40-2-white.png new file mode 100644 index 00000000..1c30f0ac Binary files /dev/null and b/Shortcuts-ick/graphics/spidertron-remote-x40-2-white.png differ diff --git a/Shortcuts-ick/graphics/spidertron-targeting-with-gunner-x32-2-white.png b/Shortcuts-ick/graphics/spidertron-targeting-with-gunner-x32-2-white.png new file mode 100644 index 00000000..d3aff6b2 Binary files /dev/null and b/Shortcuts-ick/graphics/spidertron-targeting-with-gunner-x32-2-white.png differ diff --git a/Shortcuts-ick/graphics/train-mode-toggle-x32-2-white.png b/Shortcuts-ick/graphics/train-mode-toggle-x32-2-white.png new file mode 100644 index 00000000..fc98b8f0 Binary files /dev/null and b/Shortcuts-ick/graphics/train-mode-toggle-x32-2-white.png differ diff --git a/Shortcuts-ick/graphics/train-mode-toggle-x32-2.png b/Shortcuts-ick/graphics/train-mode-toggle-x32-2.png new file mode 100644 index 00000000..b15d9fd4 Binary files /dev/null and b/Shortcuts-ick/graphics/train-mode-toggle-x32-2.png differ diff --git a/Shortcuts-ick/graphics/tree-killer-x24-white.png b/Shortcuts-ick/graphics/tree-killer-x24-white.png new file mode 100644 index 00000000..b116f0e9 Binary files /dev/null and b/Shortcuts-ick/graphics/tree-killer-x24-white.png differ diff --git a/Shortcuts-ick/graphics/tree-killer-x24.png b/Shortcuts-ick/graphics/tree-killer-x24.png new file mode 100644 index 00000000..0eb4b325 Binary files /dev/null and b/Shortcuts-ick/graphics/tree-killer-x24.png differ diff --git a/Shortcuts-ick/graphics/tree-killer-x32-white.png b/Shortcuts-ick/graphics/tree-killer-x32-white.png new file mode 100644 index 00000000..beac570b Binary files /dev/null and b/Shortcuts-ick/graphics/tree-killer-x32-white.png differ diff --git a/Shortcuts-ick/graphics/tree-killer-x32.png b/Shortcuts-ick/graphics/tree-killer-x32.png new file mode 100644 index 00000000..210f2410 Binary files /dev/null and b/Shortcuts-ick/graphics/tree-killer-x32.png differ diff --git a/Shortcuts-ick/graphics/unit-remote-control-x24-white.png b/Shortcuts-ick/graphics/unit-remote-control-x24-white.png new file mode 100644 index 00000000..e3e03f0d Binary files /dev/null and b/Shortcuts-ick/graphics/unit-remote-control-x24-white.png differ diff --git a/Shortcuts-ick/graphics/unit-remote-control-x24.png b/Shortcuts-ick/graphics/unit-remote-control-x24.png new file mode 100644 index 00000000..a7550170 Binary files /dev/null and b/Shortcuts-ick/graphics/unit-remote-control-x24.png differ diff --git a/Shortcuts-ick/graphics/unit-remote-control-x32-white.png b/Shortcuts-ick/graphics/unit-remote-control-x32-white.png new file mode 100644 index 00000000..47aeb551 Binary files /dev/null and b/Shortcuts-ick/graphics/unit-remote-control-x32-white.png differ diff --git a/Shortcuts-ick/graphics/unit-remote-control-x32.png b/Shortcuts-ick/graphics/unit-remote-control-x32.png new file mode 100644 index 00000000..29072043 Binary files /dev/null and b/Shortcuts-ick/graphics/unit-remote-control-x32.png differ diff --git a/Shortcuts-ick_1.1.28/info.json b/Shortcuts-ick/info.json similarity index 100% rename from Shortcuts-ick_1.1.28/info.json rename to Shortcuts-ick/info.json diff --git a/Shortcuts-ick_1.1.28/locale/cs/main.cfg b/Shortcuts-ick/locale/cs/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/cs/main.cfg rename to Shortcuts-ick/locale/cs/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/de/main.cfg b/Shortcuts-ick/locale/de/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/de/main.cfg rename to Shortcuts-ick/locale/de/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/en/main.cfg b/Shortcuts-ick/locale/en/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/en/main.cfg rename to Shortcuts-ick/locale/en/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/fr/main.cfg b/Shortcuts-ick/locale/fr/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/fr/main.cfg rename to Shortcuts-ick/locale/fr/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/it/main.cfg b/Shortcuts-ick/locale/it/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/it/main.cfg rename to Shortcuts-ick/locale/it/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/ko/main.cfg b/Shortcuts-ick/locale/ko/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/ko/main.cfg rename to Shortcuts-ick/locale/ko/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/pt-BR/main.cfg b/Shortcuts-ick/locale/pt-BR/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/pt-BR/main.cfg rename to Shortcuts-ick/locale/pt-BR/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/ru/main.cfg b/Shortcuts-ick/locale/ru/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/ru/main.cfg rename to Shortcuts-ick/locale/ru/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/sv-SE/main.cfg b/Shortcuts-ick/locale/sv-SE/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/sv-SE/main.cfg rename to Shortcuts-ick/locale/sv-SE/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/uk/main.cfg b/Shortcuts-ick/locale/uk/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/uk/main.cfg rename to Shortcuts-ick/locale/uk/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/vi/main.cfg b/Shortcuts-ick/locale/vi/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/vi/main.cfg rename to Shortcuts-ick/locale/vi/main.cfg diff --git a/Shortcuts-ick_1.1.28/locale/zh-TW/main.cfg b/Shortcuts-ick/locale/zh-TW/main.cfg similarity index 100% rename from Shortcuts-ick_1.1.28/locale/zh-TW/main.cfg rename to Shortcuts-ick/locale/zh-TW/main.cfg diff --git a/Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.0.10.json b/Shortcuts-ick/migrations/Shortcuts-ick_1.0.10.json similarity index 100% rename from Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.0.10.json rename to Shortcuts-ick/migrations/Shortcuts-ick_1.0.10.json diff --git a/Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.1.16.json b/Shortcuts-ick/migrations/Shortcuts-ick_1.1.16.json similarity index 100% rename from Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.1.16.json rename to Shortcuts-ick/migrations/Shortcuts-ick_1.1.16.json diff --git a/Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.1.28.json b/Shortcuts-ick/migrations/Shortcuts-ick_1.1.28.json similarity index 100% rename from Shortcuts-ick_1.1.28/migrations/Shortcuts-ick_1.1.28.json rename to Shortcuts-ick/migrations/Shortcuts-ick_1.1.28.json diff --git a/Shortcuts-ick_1.1.28/prototypes/final-fixes-disabled-artillery.lua b/Shortcuts-ick/prototypes/final-fixes-disabled-artillery.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/final-fixes-disabled-artillery.lua rename to Shortcuts-ick/prototypes/final-fixes-disabled-artillery.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/final-fixes-shortcuts-autogeneration.lua b/Shortcuts-ick/prototypes/final-fixes-shortcuts-autogeneration.lua similarity index 96% rename from Shortcuts-ick_1.1.28/prototypes/final-fixes-shortcuts-autogeneration.lua rename to Shortcuts-ick/prototypes/final-fixes-shortcuts-autogeneration.lua index 29b479bb..5d6db9f5 100644 --- a/Shortcuts-ick_1.1.28/prototypes/final-fixes-shortcuts-autogeneration.lua +++ b/Shortcuts-ick/prototypes/final-fixes-shortcuts-autogeneration.lua @@ -42,7 +42,7 @@ end local autogen_color = settings.startup["autogen-color"].value if autogen_color == "default" or autogen_color == "red" or autogen_color == "green" or autogen_color == "blue" then - -- create a post on the discussion page if you want your shortcut to be added to this ignore_list. + -- create a post on the discussion page if you want your shortcut to be added to this ignore_list. local shortcut_ignore_list = { "artillery-bombardment-remote", "smart-artillery-bombardment-remote", @@ -91,12 +91,12 @@ if autogen_color == "default" or autogen_color == "red" or autogen_color == "gre else -- Ignore tools from the ignore_list for _, ignore_list in pairs(shortcut_ignore_list) do - if name == ignore_list then - continue = false - break + if name == ignore_list then + continue = false + break + end end end - end if continue == true then local create = true diff --git a/Shortcuts-ick_1.1.28/prototypes/shortcuts-artillery.lua b/Shortcuts-ick/prototypes/shortcuts-artillery.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/shortcuts-artillery.lua rename to Shortcuts-ick/prototypes/shortcuts-artillery.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/shortcuts-basic.lua b/Shortcuts-ick/prototypes/shortcuts-basic.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/shortcuts-basic.lua rename to Shortcuts-ick/prototypes/shortcuts-basic.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/shortcuts-blueprint.lua b/Shortcuts-ick/prototypes/shortcuts-blueprint.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/shortcuts-blueprint.lua rename to Shortcuts-ick/prototypes/shortcuts-blueprint.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/shortcuts-equipment.lua b/Shortcuts-ick/prototypes/shortcuts-equipment.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/shortcuts-equipment.lua rename to Shortcuts-ick/prototypes/shortcuts-equipment.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/shortcuts-vehicle.lua b/Shortcuts-ick/prototypes/shortcuts-vehicle.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/shortcuts-vehicle.lua rename to Shortcuts-ick/prototypes/shortcuts-vehicle.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/updates-custom-inputs.lua b/Shortcuts-ick/prototypes/updates-custom-inputs.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/updates-custom-inputs.lua rename to Shortcuts-ick/prototypes/updates-custom-inputs.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/updates-disabled-equipment.lua b/Shortcuts-ick/prototypes/updates-disabled-equipment.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/updates-disabled-equipment.lua rename to Shortcuts-ick/prototypes/updates-disabled-equipment.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/updates-remote-hiding.lua b/Shortcuts-ick/prototypes/updates-remote-hiding.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/updates-remote-hiding.lua rename to Shortcuts-ick/prototypes/updates-remote-hiding.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/updates-research-requirements.lua b/Shortcuts-ick/prototypes/updates-research-requirements.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/updates-research-requirements.lua rename to Shortcuts-ick/prototypes/updates-research-requirements.lua diff --git a/Shortcuts-ick_1.1.28/prototypes/updates-shortcuts-artillery.lua b/Shortcuts-ick/prototypes/updates-shortcuts-artillery.lua similarity index 100% rename from Shortcuts-ick_1.1.28/prototypes/updates-shortcuts-artillery.lua rename to Shortcuts-ick/prototypes/updates-shortcuts-artillery.lua diff --git a/Shortcuts-ick_1.1.28/scripts/on-player-created.lua b/Shortcuts-ick/scripts/on-player-created.lua similarity index 100% rename from Shortcuts-ick_1.1.28/scripts/on-player-created.lua rename to Shortcuts-ick/scripts/on-player-created.lua diff --git a/Shortcuts-ick_1.1.28/scripts/on-research-finished.lua b/Shortcuts-ick/scripts/on-research-finished.lua similarity index 100% rename from Shortcuts-ick_1.1.28/scripts/on-research-finished.lua rename to Shortcuts-ick/scripts/on-research-finished.lua diff --git a/Shortcuts-ick_1.1.28/settings.lua b/Shortcuts-ick/settings.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings.lua rename to Shortcuts-ick/settings.lua diff --git a/Shortcuts-ick_1.1.28/settings/runtime-global.lua b/Shortcuts-ick/settings/runtime-global.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/runtime-global.lua rename to Shortcuts-ick/settings/runtime-global.lua diff --git a/Shortcuts-ick_1.1.28/settings/runtime-per-user.lua b/Shortcuts-ick/settings/runtime-per-user.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/runtime-per-user.lua rename to Shortcuts-ick/settings/runtime-per-user.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-artillery.lua b/Shortcuts-ick/settings/startup-artillery.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-artillery.lua rename to Shortcuts-ick/settings/startup-artillery.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-basic.lua b/Shortcuts-ick/settings/startup-basic.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-basic.lua rename to Shortcuts-ick/settings/startup-basic.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-blueprint.lua b/Shortcuts-ick/settings/startup-blueprint.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-blueprint.lua rename to Shortcuts-ick/settings/startup-blueprint.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-equipment.lua b/Shortcuts-ick/settings/startup-equipment.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-equipment.lua rename to Shortcuts-ick/settings/startup-equipment.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-other.lua b/Shortcuts-ick/settings/startup-other.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-other.lua rename to Shortcuts-ick/settings/startup-other.lua diff --git a/Shortcuts-ick_1.1.28/settings/startup-vehicle.lua b/Shortcuts-ick/settings/startup-vehicle.lua similarity index 100% rename from Shortcuts-ick_1.1.28/settings/startup-vehicle.lua rename to Shortcuts-ick/settings/startup-vehicle.lua diff --git a/Shortcuts-ick/thumbnail.png b/Shortcuts-ick/thumbnail.png new file mode 100644 index 00000000..2b47d33e Binary files /dev/null and b/Shortcuts-ick/thumbnail.png differ diff --git a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24-white.png b/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24-white.png deleted file mode 100644 index 2a8e8d22..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24.png b/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24.png deleted file mode 100644 index 1fb84781..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32-white.png b/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32-white.png deleted file mode 100644 index 39ef6be8..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32.png b/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32.png deleted file mode 100644 index 212575d0..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/active-defense-equipment-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-cluster-remote-x32-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-cluster-remote-x32-white.png deleted file mode 100644 index c6efd553..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-cluster-remote-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-discovery-remote-x32-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-discovery-remote-x32-white.png deleted file mode 100644 index 7666d6a5..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-discovery-remote-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-red.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-red.png deleted file mode 100644 index c58f0471..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-red.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24-white.png deleted file mode 100644 index 2b5cbf7e..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24.png deleted file mode 100644 index 4ea1b1a9..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32-white.png deleted file mode 100644 index 880517d8..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32.png deleted file mode 100644 index d030d43d..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool.png b/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool.png deleted file mode 100644 index c7c87619..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-jammer-tool.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24-white.png deleted file mode 100644 index acd825b2..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24.png b/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24.png deleted file mode 100644 index 10490871..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32-white.png b/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32-white.png deleted file mode 100644 index aa0faac1..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32.png b/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32.png deleted file mode 100644 index e39d31ee..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/artillery-targeting-remote-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24-white.png b/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24-white.png deleted file mode 100644 index 2749fe0a..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24.png b/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24.png deleted file mode 100644 index 6ef1c9c6..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32-white.png b/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32-white.png deleted file mode 100644 index 5b0a35c8..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32.png b/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32.png deleted file mode 100644 index 82cabdcc..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/belt-immunity-toggle-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/big-zoom-x24-white.png b/Shortcuts-ick_1.1.28/graphics/big-zoom-x24-white.png deleted file mode 100644 index 9d2ee57b..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/big-zoom-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/big-zoom-x24.png b/Shortcuts-ick_1.1.28/graphics/big-zoom-x24.png deleted file mode 100644 index b974e367..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/big-zoom-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/big-zoom-x32-white.png b/Shortcuts-ick_1.1.28/graphics/big-zoom-x32-white.png deleted file mode 100644 index c53f6e50..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/big-zoom-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/big-zoom-x32.png b/Shortcuts-ick_1.1.28/graphics/big-zoom-x32.png deleted file mode 100644 index f6d6664b..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/big-zoom-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-new.png b/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-new.png deleted file mode 100644 index f1cf11d4..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-new.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white-new.png b/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white-new.png deleted file mode 100644 index add16625..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white-new.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white.png b/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white.png deleted file mode 100644 index b0c60a51..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32.png b/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32.png deleted file mode 100644 index 7e672c74..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/cliff-fish-item-on-ground-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24-white.png b/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24-white.png deleted file mode 100644 index 58745fa6..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24.png b/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24.png deleted file mode 100644 index c7b874b3..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32-white.png b/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32-white.png deleted file mode 100644 index b39e85f7..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32.png b/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32.png deleted file mode 100644 index 148ed120..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/discharge-defense-remote-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/driver-is-gunner-x32-2-white.png b/Shortcuts-ick_1.1.28/graphics/driver-is-gunner-x32-2-white.png deleted file mode 100644 index e32264ef..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/driver-is-gunner-x32-2-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24-white.png b/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24-white.png deleted file mode 100644 index 65957697..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24.png b/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24.png deleted file mode 100644 index 491fa5ad..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32-white.png b/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32-white.png deleted file mode 100644 index b803927c..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32.png b/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32.png deleted file mode 100644 index 212f8886..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/flashlight-toggle-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/grid-x24-white.png b/Shortcuts-ick_1.1.28/graphics/grid-x24-white.png deleted file mode 100644 index 4b880b16..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/grid-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/grid-x24.png b/Shortcuts-ick_1.1.28/graphics/grid-x24.png deleted file mode 100644 index 677fa06f..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/grid-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/grid-x32-white.png b/Shortcuts-ick_1.1.28/graphics/grid-x32-white.png deleted file mode 100644 index 75477dec..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/grid-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/grid-x32.png b/Shortcuts-ick_1.1.28/graphics/grid-x32.png deleted file mode 100644 index 019ae0ce..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/grid-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24-white.png b/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24-white.png deleted file mode 100644 index 8bac72b4..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24.png b/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24.png deleted file mode 100644 index fce8b218..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32-white.png b/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32-white.png deleted file mode 100644 index 5315a116..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32.png b/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32.png deleted file mode 100644 index 31ea02ec..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/ion-cannon-targeter-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/jetpack-x24-white.png b/Shortcuts-ick_1.1.28/graphics/jetpack-x24-white.png deleted file mode 100644 index f9ff7100..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/jetpack-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/jetpack-x24.png b/Shortcuts-ick_1.1.28/graphics/jetpack-x24.png deleted file mode 100644 index f12a8f8e..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/jetpack-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/jetpack-x32-white.png b/Shortcuts-ick_1.1.28/graphics/jetpack-x32-white.png deleted file mode 100644 index 7df68d4b..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/jetpack-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/jetpack-x32.png b/Shortcuts-ick_1.1.28/graphics/jetpack-x32.png deleted file mode 100644 index 43f23e57..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/jetpack-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/landmine-thrower-remote-x24-white.png b/Shortcuts-ick_1.1.28/graphics/landmine-thrower-remote-x24-white.png deleted file mode 100644 index 5e6642d0..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/landmine-thrower-remote-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24-white.png b/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24-white.png deleted file mode 100644 index a2e16095..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24.png b/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24.png deleted file mode 100644 index ffcb8537..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32-white.png b/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32-white.png deleted file mode 100644 index 0ebb417d..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32.png b/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32.png deleted file mode 100644 index 55aa530e..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/max-rate-calculator-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24-white.png b/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24-white.png deleted file mode 100644 index 9effcdff..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24.png b/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24.png deleted file mode 100644 index 3bebec37..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32-white.png b/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32-white.png deleted file mode 100644 index 61ad95e8..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32.png b/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32.png deleted file mode 100644 index 6536cce3..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/mirv-targeting-remote-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/module-inserter-x24-white.png b/Shortcuts-ick_1.1.28/graphics/module-inserter-x24-white.png deleted file mode 100644 index 4fa2015f..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/module-inserter-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/module-inserter-x24.png b/Shortcuts-ick_1.1.28/graphics/module-inserter-x24.png deleted file mode 100644 index 670e68de..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/module-inserter-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/module-inserter-x32-white.png b/Shortcuts-ick_1.1.28/graphics/module-inserter-x32-white.png deleted file mode 100644 index 8ccdb97f..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/module-inserter-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/module-inserter-x32.png b/Shortcuts-ick_1.1.28/graphics/module-inserter-x32.png deleted file mode 100644 index 6b02562b..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/module-inserter-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24-white.png b/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24-white.png deleted file mode 100644 index ca9d3923..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24.png b/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24.png deleted file mode 100644 index 28e9b25e..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32-white.png b/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32-white.png deleted file mode 100644 index 9af70f72..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32.png b/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32.png deleted file mode 100644 index c0a90dd0..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/night-vision-toggle-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24-white.png b/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24-white.png deleted file mode 100644 index 44984d4b..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24.png b/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24.png deleted file mode 100644 index 9a53abe2..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32-white.png b/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32-white.png deleted file mode 100644 index c904888a..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32.png b/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32.png deleted file mode 100644 index fc4ea979..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/outpost-builder-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24-white.png b/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24-white.png deleted file mode 100644 index 0f16a173..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24.png b/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24.png deleted file mode 100644 index 0d6d4d29..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32-white.png b/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32-white.png deleted file mode 100644 index 279bac95..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32.png b/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32.png deleted file mode 100644 index 6ca3733c..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/path-remote-control-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2-white.png b/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2-white.png deleted file mode 100644 index 2756ab47..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2.png b/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2.png deleted file mode 100644 index 3e17d87d..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/rail-block-visualization-toggle-x32-2.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/signal-flare-x24-white.png b/Shortcuts-ick_1.1.28/graphics/signal-flare-x24-white.png deleted file mode 100644 index d62d75a2..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/signal-flare-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/signal-flare-x24.png b/Shortcuts-ick_1.1.28/graphics/signal-flare-x24.png deleted file mode 100644 index 84f73f53..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/signal-flare-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/signal-flare-x32-white.png b/Shortcuts-ick_1.1.28/graphics/signal-flare-x32-white.png deleted file mode 100644 index 9e8870fe..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/signal-flare-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/signal-flare-x32.png b/Shortcuts-ick_1.1.28/graphics/signal-flare-x32.png deleted file mode 100644 index 9d5ad623..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/signal-flare-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/spidertron-remote-x40-2-white.png b/Shortcuts-ick_1.1.28/graphics/spidertron-remote-x40-2-white.png deleted file mode 100644 index 1e118c9f..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/spidertron-remote-x40-2-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/spidertron-targeting-with-gunner-x32-2-white.png b/Shortcuts-ick_1.1.28/graphics/spidertron-targeting-with-gunner-x32-2-white.png deleted file mode 100644 index cdfc837c..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/spidertron-targeting-with-gunner-x32-2-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2-white.png b/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2-white.png deleted file mode 100644 index fc864764..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2.png b/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2.png deleted file mode 100644 index dbb13a17..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/train-mode-toggle-x32-2.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/tree-killer-x24-white.png b/Shortcuts-ick_1.1.28/graphics/tree-killer-x24-white.png deleted file mode 100644 index 66e278f7..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/tree-killer-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/tree-killer-x24.png b/Shortcuts-ick_1.1.28/graphics/tree-killer-x24.png deleted file mode 100644 index b32660b0..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/tree-killer-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/tree-killer-x32-white.png b/Shortcuts-ick_1.1.28/graphics/tree-killer-x32-white.png deleted file mode 100644 index 7d4d734c..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/tree-killer-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/tree-killer-x32.png b/Shortcuts-ick_1.1.28/graphics/tree-killer-x32.png deleted file mode 100644 index fc6a1fb7..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/tree-killer-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24-white.png b/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24-white.png deleted file mode 100644 index 5c95da36..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24.png b/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24.png deleted file mode 100644 index 1e8617b6..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x24.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32-white.png b/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32-white.png deleted file mode 100644 index 9c483ed7..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32-white.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32.png b/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32.png deleted file mode 100644 index 2fa70e52..00000000 Binary files a/Shortcuts-ick_1.1.28/graphics/unit-remote-control-x32.png and /dev/null differ diff --git a/Shortcuts-ick_1.1.28/thumbnail.png b/Shortcuts-ick_1.1.28/thumbnail.png deleted file mode 100644 index 325c4c29..00000000 Binary files a/Shortcuts-ick_1.1.28/thumbnail.png and /dev/null differ diff --git a/SingleColorTerrain_9.0.5/data.lua b/SingleColorTerrain/data.lua similarity index 100% rename from SingleColorTerrain_9.0.5/data.lua rename to SingleColorTerrain/data.lua diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete-inner-corner.png b/SingleColorTerrain/graphics/concrete/concrete-inner-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete-inner-corner.png rename to SingleColorTerrain/graphics/concrete/concrete-inner-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete-o.png b/SingleColorTerrain/graphics/concrete/concrete-o.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete-o.png rename to SingleColorTerrain/graphics/concrete/concrete-o.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete-outer-corner.png b/SingleColorTerrain/graphics/concrete/concrete-outer-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete-outer-corner.png rename to SingleColorTerrain/graphics/concrete/concrete-outer-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete-side.png b/SingleColorTerrain/graphics/concrete/concrete-side.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete-side.png rename to SingleColorTerrain/graphics/concrete/concrete-side.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete-u.png b/SingleColorTerrain/graphics/concrete/concrete-u.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete-u.png rename to SingleColorTerrain/graphics/concrete/concrete-u.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/concrete.png b/SingleColorTerrain/graphics/concrete/concrete.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/concrete.png rename to SingleColorTerrain/graphics/concrete/concrete.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-inner-corner.png b/SingleColorTerrain/graphics/concrete/hr-concrete-inner-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-inner-corner.png rename to SingleColorTerrain/graphics/concrete/hr-concrete-inner-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-o.png b/SingleColorTerrain/graphics/concrete/hr-concrete-o.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-o.png rename to SingleColorTerrain/graphics/concrete/hr-concrete-o.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-outer-corner.png b/SingleColorTerrain/graphics/concrete/hr-concrete-outer-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-outer-corner.png rename to SingleColorTerrain/graphics/concrete/hr-concrete-outer-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-side.png b/SingleColorTerrain/graphics/concrete/hr-concrete-side.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-side.png rename to SingleColorTerrain/graphics/concrete/hr-concrete-side.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-u.png b/SingleColorTerrain/graphics/concrete/hr-concrete-u.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete-u.png rename to SingleColorTerrain/graphics/concrete/hr-concrete-u.png diff --git a/SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete.png b/SingleColorTerrain/graphics/concrete/hr-concrete.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/concrete/hr-concrete.png rename to SingleColorTerrain/graphics/concrete/hr-concrete.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-1.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-1.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-1.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-1.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-2.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-2.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-2.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-2.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-4.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-4.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-4.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-4.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-inner-corner.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-inner-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-inner-corner.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-inner-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-o.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-o.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-o.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-o.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-outer-corner.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-outer-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-outer-corner.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-outer-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-side.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-side.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-side.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-side.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-u.png b/SingleColorTerrain/graphics/stone-path/hr-stone-path-u.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/hr-stone-path-u.png rename to SingleColorTerrain/graphics/stone-path/hr-stone-path-u.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-1.png b/SingleColorTerrain/graphics/stone-path/stone-path-1.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-1.png rename to SingleColorTerrain/graphics/stone-path/stone-path-1.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-2.png b/SingleColorTerrain/graphics/stone-path/stone-path-2.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-2.png rename to SingleColorTerrain/graphics/stone-path/stone-path-2.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-4.png b/SingleColorTerrain/graphics/stone-path/stone-path-4.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-4.png rename to SingleColorTerrain/graphics/stone-path/stone-path-4.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-inner-corner.png b/SingleColorTerrain/graphics/stone-path/stone-path-inner-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-inner-corner.png rename to SingleColorTerrain/graphics/stone-path/stone-path-inner-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-o.png b/SingleColorTerrain/graphics/stone-path/stone-path-o.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-o.png rename to SingleColorTerrain/graphics/stone-path/stone-path-o.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-outer-corner.png b/SingleColorTerrain/graphics/stone-path/stone-path-outer-corner.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-outer-corner.png rename to SingleColorTerrain/graphics/stone-path/stone-path-outer-corner.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-side.png b/SingleColorTerrain/graphics/stone-path/stone-path-side.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-side.png rename to SingleColorTerrain/graphics/stone-path/stone-path-side.png diff --git a/SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-u.png b/SingleColorTerrain/graphics/stone-path/stone-path-u.png similarity index 100% rename from SingleColorTerrain_9.0.5/graphics/stone-path/stone-path-u.png rename to SingleColorTerrain/graphics/stone-path/stone-path-u.png diff --git a/SingleColorTerrain_9.0.5/info.json b/SingleColorTerrain/info.json similarity index 100% rename from SingleColorTerrain_9.0.5/info.json rename to SingleColorTerrain/info.json diff --git a/SingleColorTerrain_9.0.5/prototypes/decoratives.lua b/SingleColorTerrain/prototypes/decoratives.lua similarity index 100% rename from SingleColorTerrain_9.0.5/prototypes/decoratives.lua rename to SingleColorTerrain/prototypes/decoratives.lua diff --git a/SingleColorTerrain_9.0.5/prototypes/entity.lua b/SingleColorTerrain/prototypes/entity.lua similarity index 100% rename from SingleColorTerrain_9.0.5/prototypes/entity.lua rename to SingleColorTerrain/prototypes/entity.lua diff --git a/SingleColorTerrain_9.0.5/settings.lua b/SingleColorTerrain/settings.lua similarity index 100% rename from SingleColorTerrain_9.0.5/settings.lua rename to SingleColorTerrain/settings.lua diff --git a/SingleColorTerrain_9.0.5/thumbnail.png b/SingleColorTerrain/thumbnail.png similarity index 100% rename from SingleColorTerrain_9.0.5/thumbnail.png rename to SingleColorTerrain/thumbnail.png diff --git a/SmogSolarPanels_1.2.5/changelog.txt b/SmogSolarPanels/changelog.txt similarity index 100% rename from SmogSolarPanels_1.2.5/changelog.txt rename to SmogSolarPanels/changelog.txt diff --git a/SmogSolarPanels_1.2.5/control.lua b/SmogSolarPanels/control.lua similarity index 100% rename from SmogSolarPanels_1.2.5/control.lua rename to SmogSolarPanels/control.lua diff --git a/SmogSolarPanels_1.2.5/data-final-fixes.lua b/SmogSolarPanels/data-final-fixes.lua similarity index 100% rename from SmogSolarPanels_1.2.5/data-final-fixes.lua rename to SmogSolarPanels/data-final-fixes.lua diff --git a/SmogSolarPanels/info.json b/SmogSolarPanels/info.json new file mode 100644 index 00000000..63a0c02d --- /dev/null +++ b/SmogSolarPanels/info.json @@ -0,0 +1,9 @@ +{ + "name": "SmogSolarPanels", + "version": "1.3.0", + "title": "Smog: Solar Panels", + "author": "darkfrei", + "description": "Solar panels working by pollution smog not so effective", + "dependencies": ["base"], + "factorio_version": "1.1" +} \ No newline at end of file diff --git a/SmogSolarPanels_1.2.5/locale/en/ssp.cfg b/SmogSolarPanels/locale/en/ssp.cfg similarity index 100% rename from SmogSolarPanels_1.2.5/locale/en/ssp.cfg rename to SmogSolarPanels/locale/en/ssp.cfg diff --git a/SmogSolarPanels_1.2.5/settings.lua b/SmogSolarPanels/settings.lua similarity index 100% rename from SmogSolarPanels_1.2.5/settings.lua rename to SmogSolarPanels/settings.lua diff --git a/SmogSolarPanels_1.2.5/thumbnail.png b/SmogSolarPanels/thumbnail.png similarity index 100% rename from SmogSolarPanels_1.2.5/thumbnail.png rename to SmogSolarPanels/thumbnail.png diff --git a/SmogSolarPanels_1.2.5/info.json b/SmogSolarPanels_1.2.5/info.json deleted file mode 100644 index 15485de3..00000000 --- a/SmogSolarPanels_1.2.5/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SmogSolarPanels", - "version": "1.2.5", - "title": "Smog: Solar Panels", - "author": "darkfrei", - "description": "Solar panels working by pollution smog not so effective", - "dependencies": ["base"], - "factorio_version": "1.1" -} \ No newline at end of file diff --git a/SpaceMod_1.1.1/changelog.txt b/SpaceMod/changelog.txt similarity index 100% rename from SpaceMod_1.1.1/changelog.txt rename to SpaceMod/changelog.txt diff --git a/SpaceMod_1.1.1/control.lua b/SpaceMod/control.lua similarity index 100% rename from SpaceMod_1.1.1/control.lua rename to SpaceMod/control.lua diff --git a/SpaceMod_1.1.1/data-final-fixes.lua b/SpaceMod/data-final-fixes.lua similarity index 100% rename from SpaceMod_1.1.1/data-final-fixes.lua rename to SpaceMod/data-final-fixes.lua diff --git a/SpaceMod_1.1.1/data.lua b/SpaceMod/data.lua similarity index 100% rename from SpaceMod_1.1.1/data.lua rename to SpaceMod/data.lua diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/arithmetic-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/arithmetic-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/constant-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/constant-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/decider-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/decider-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/hr-arithmetic-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-constant-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/hr-constant-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-E.png b/SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-E.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-E.png rename to SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-E.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-N.png b/SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-N.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-N.png rename to SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-N.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-S.png b/SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-S.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-S.png rename to SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-S.png diff --git a/SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-W.png b/SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-W.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/activity-leds/hr-decider-combinator-LED-W.png rename to SpaceMod/graphics/entity/activity-leds/hr-decider-combinator-LED-W.png diff --git a/SpaceMod_1.1.1/graphics/entity/constant-combinator-shadow.png b/SpaceMod/graphics/entity/constant-combinator-shadow.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/constant-combinator-shadow.png rename to SpaceMod/graphics/entity/constant-combinator-shadow.png diff --git a/SpaceMod_1.1.1/graphics/entity/constant-combinator.png b/SpaceMod/graphics/entity/constant-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/constant-combinator.png rename to SpaceMod/graphics/entity/constant-combinator.png diff --git a/SpaceMod_1.1.1/graphics/entity/hr-constant-combinator-shadow.png b/SpaceMod/graphics/entity/hr-constant-combinator-shadow.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/hr-constant-combinator-shadow.png rename to SpaceMod/graphics/entity/hr-constant-combinator-shadow.png diff --git a/SpaceMod_1.1.1/graphics/entity/hr-constant-combinator.png b/SpaceMod/graphics/entity/hr-constant-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/hr-constant-combinator.png rename to SpaceMod/graphics/entity/hr-constant-combinator.png diff --git a/SpaceMod_1.1.1/graphics/entity/hr-spacex-combinator.png b/SpaceMod/graphics/entity/hr-spacex-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/hr-spacex-combinator.png rename to SpaceMod/graphics/entity/hr-spacex-combinator.png diff --git a/SpaceMod_1.1.1/graphics/entity/spacex-combinator.png b/SpaceMod/graphics/entity/spacex-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/entity/spacex-combinator.png rename to SpaceMod/graphics/entity/spacex-combinator.png diff --git a/SpaceMod_1.1.1/graphics/icons/assembly-robot.png b/SpaceMod/graphics/icons/assembly-robot.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/assembly-robot.png rename to SpaceMod/graphics/icons/assembly-robot.png diff --git a/SpaceMod_1.1.1/graphics/icons/astrometrics.png b/SpaceMod/graphics/icons/astrometrics.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/astrometrics.png rename to SpaceMod/graphics/icons/astrometrics.png diff --git a/SpaceMod_1.1.1/graphics/icons/command.png b/SpaceMod/graphics/icons/command.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/command.png rename to SpaceMod/graphics/icons/command.png diff --git a/SpaceMod_1.1.1/graphics/icons/constant-combinator.png b/SpaceMod/graphics/icons/constant-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/constant-combinator.png rename to SpaceMod/graphics/icons/constant-combinator.png diff --git a/SpaceMod_1.1.1/graphics/icons/drydock-assembly.png b/SpaceMod/graphics/icons/drydock-assembly.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/drydock-assembly.png rename to SpaceMod/graphics/icons/drydock-assembly.png diff --git a/SpaceMod_1.1.1/graphics/icons/drydock-structural.png b/SpaceMod/graphics/icons/drydock-structural.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/drydock-structural.png rename to SpaceMod/graphics/icons/drydock-structural.png diff --git a/SpaceMod_1.1.1/graphics/icons/ftl-drive-128.png b/SpaceMod/graphics/icons/ftl-drive-128.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/ftl-drive-128.png rename to SpaceMod/graphics/icons/ftl-drive-128.png diff --git a/SpaceMod_1.1.1/graphics/icons/ftl-drive.png b/SpaceMod/graphics/icons/ftl-drive.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/ftl-drive.png rename to SpaceMod/graphics/icons/ftl-drive.png diff --git a/SpaceMod_1.1.1/graphics/icons/fuel-cell.png b/SpaceMod/graphics/icons/fuel-cell.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/fuel-cell.png rename to SpaceMod/graphics/icons/fuel-cell.png diff --git a/SpaceMod_1.1.1/graphics/icons/fusion-reactor.png b/SpaceMod/graphics/icons/fusion-reactor.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/fusion-reactor.png rename to SpaceMod/graphics/icons/fusion-reactor.png diff --git a/SpaceMod_1.1.1/graphics/icons/habitation.png b/SpaceMod/graphics/icons/habitation.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/habitation.png rename to SpaceMod/graphics/icons/habitation.png diff --git a/SpaceMod_1.1.1/graphics/icons/hull-component-128.png b/SpaceMod/graphics/icons/hull-component-128.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/hull-component-128.png rename to SpaceMod/graphics/icons/hull-component-128.png diff --git a/SpaceMod_1.1.1/graphics/icons/hull-component.png b/SpaceMod/graphics/icons/hull-component.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/hull-component.png rename to SpaceMod/graphics/icons/hull-component.png diff --git a/SpaceMod_1.1.1/graphics/icons/life-support.png b/SpaceMod/graphics/icons/life-support.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/life-support.png rename to SpaceMod/graphics/icons/life-support.png diff --git a/SpaceMod_1.1.1/graphics/icons/protection-field-128.png b/SpaceMod/graphics/icons/protection-field-128.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/protection-field-128.png rename to SpaceMod/graphics/icons/protection-field-128.png diff --git a/SpaceMod_1.1.1/graphics/icons/protection-field.png b/SpaceMod/graphics/icons/protection-field.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/protection-field.png rename to SpaceMod/graphics/icons/protection-field.png diff --git a/SpaceMod_1.1.1/graphics/icons/space-thruster.png b/SpaceMod/graphics/icons/space-thruster.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/space-thruster.png rename to SpaceMod/graphics/icons/space-thruster.png diff --git a/SpaceMod_1.1.1/graphics/icons/spacex-combinator.png b/SpaceMod/graphics/icons/spacex-combinator.png similarity index 100% rename from SpaceMod_1.1.1/graphics/icons/spacex-combinator.png rename to SpaceMod/graphics/icons/spacex-combinator.png diff --git a/SpaceMod_1.1.1/graphics/technology/astrometrics.png b/SpaceMod/graphics/technology/astrometrics.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/astrometrics.png rename to SpaceMod/graphics/technology/astrometrics.png diff --git a/SpaceMod_1.1.1/graphics/technology/command.png b/SpaceMod/graphics/technology/command.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/command.png rename to SpaceMod/graphics/technology/command.png diff --git a/SpaceMod_1.1.1/graphics/technology/ftl-engine.png b/SpaceMod/graphics/technology/ftl-engine.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/ftl-engine.png rename to SpaceMod/graphics/technology/ftl-engine.png diff --git a/SpaceMod_1.1.1/graphics/technology/ftl.png b/SpaceMod/graphics/technology/ftl.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/ftl.png rename to SpaceMod/graphics/technology/ftl.png diff --git a/SpaceMod_1.1.1/graphics/technology/fuel-cells.png b/SpaceMod/graphics/technology/fuel-cells.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/fuel-cells.png rename to SpaceMod/graphics/technology/fuel-cells.png diff --git a/SpaceMod_1.1.1/graphics/technology/fusion-reactor.png b/SpaceMod/graphics/technology/fusion-reactor.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/fusion-reactor.png rename to SpaceMod/graphics/technology/fusion-reactor.png diff --git a/SpaceMod_1.1.1/graphics/technology/habitation.png b/SpaceMod/graphics/technology/habitation.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/habitation.png rename to SpaceMod/graphics/technology/habitation.png diff --git a/SpaceMod_1.1.1/graphics/technology/life-support.png b/SpaceMod/graphics/technology/life-support.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/life-support.png rename to SpaceMod/graphics/technology/life-support.png diff --git a/SpaceMod_1.1.1/graphics/technology/protection-fields.png b/SpaceMod/graphics/technology/protection-fields.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/protection-fields.png rename to SpaceMod/graphics/technology/protection-fields.png diff --git a/SpaceMod_1.1.1/graphics/technology/space-assembly.png b/SpaceMod/graphics/technology/space-assembly.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/space-assembly.png rename to SpaceMod/graphics/technology/space-assembly.png diff --git a/SpaceMod_1.1.1/graphics/technology/space-casings.png b/SpaceMod/graphics/technology/space-casings.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/space-casings.png rename to SpaceMod/graphics/technology/space-casings.png diff --git a/SpaceMod_1.1.1/graphics/technology/space-construction.png b/SpaceMod/graphics/technology/space-construction.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/space-construction.png rename to SpaceMod/graphics/technology/space-construction.png diff --git a/SpaceMod_1.1.1/graphics/technology/space-thrusters.png b/SpaceMod/graphics/technology/space-thrusters.png similarity index 100% rename from SpaceMod_1.1.1/graphics/technology/space-thrusters.png rename to SpaceMod/graphics/technology/space-thrusters.png diff --git a/SpaceMod/info.json b/SpaceMod/info.json new file mode 100644 index 00000000..265e593a --- /dev/null +++ b/SpaceMod/info.json @@ -0,0 +1,9 @@ +{ + "name": "SpaceMod", + "version": "1.1.2", + "title": "Space Extension Mod", + "author": "LordKTor", + "description": "Greatly extend the end game requiring multiple launches and massively increased science. Requires 40+ launches, and of a variety of new components. The goal is to build a vessel capable of getting you off the planet and home safely. Updated graphics courtesy of Steinerrr ", + "factorio_version": "1.1", + "dependencies": ["base", "? boblibrary", "? bobplates", "? bobmodules", "? bobelectronics", "? boblogistics", "? bobtech", "? bobequipment"] +} diff --git a/SpaceMod_1.1.1/locale/en/locale.cfg b/SpaceMod/locale/en/locale.cfg similarity index 100% rename from SpaceMod_1.1.1/locale/en/locale.cfg rename to SpaceMod/locale/en/locale.cfg diff --git a/SpaceMod_1.1.1/locale/ru/locale.cfg b/SpaceMod/locale/ru/locale.cfg similarity index 100% rename from SpaceMod_1.1.1/locale/ru/locale.cfg rename to SpaceMod/locale/ru/locale.cfg diff --git a/SpaceMod_1.1.1/prototypes/entities.lua b/SpaceMod/prototypes/entities.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/entities.lua rename to SpaceMod/prototypes/entities.lua diff --git a/SpaceMod_1.1.1/prototypes/item.lua b/SpaceMod/prototypes/item.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/item.lua rename to SpaceMod/prototypes/item.lua diff --git a/SpaceMod_1.1.1/prototypes/recipe-bobs.lua b/SpaceMod/prototypes/recipe-bobs.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/recipe-bobs.lua rename to SpaceMod/prototypes/recipe-bobs.lua diff --git a/SpaceMod_1.1.1/prototypes/recipe.lua b/SpaceMod/prototypes/recipe.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/recipe.lua rename to SpaceMod/prototypes/recipe.lua diff --git a/SpaceMod_1.1.1/prototypes/style.lua b/SpaceMod/prototypes/style.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/style.lua rename to SpaceMod/prototypes/style.lua diff --git a/SpaceMod_1.1.1/prototypes/technology-bobs.lua b/SpaceMod/prototypes/technology-bobs.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/technology-bobs.lua rename to SpaceMod/prototypes/technology-bobs.lua diff --git a/SpaceMod_1.1.1/prototypes/technology.lua b/SpaceMod/prototypes/technology.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/technology.lua rename to SpaceMod/prototypes/technology.lua diff --git a/SpaceMod_1.1.1/prototypes/technology_old.lua b/SpaceMod/prototypes/technology_old.lua similarity index 100% rename from SpaceMod_1.1.1/prototypes/technology_old.lua rename to SpaceMod/prototypes/technology_old.lua diff --git a/SpaceMod_1.1.1/settings.lua b/SpaceMod/settings.lua similarity index 100% rename from SpaceMod_1.1.1/settings.lua rename to SpaceMod/settings.lua diff --git a/SpaceMod_1.1.1/stdlib/area/area.lua b/SpaceMod/stdlib/area/area.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/area/area.lua rename to SpaceMod/stdlib/area/area.lua diff --git a/SpaceMod_1.1.1/stdlib/area/chunk.lua b/SpaceMod/stdlib/area/chunk.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/area/chunk.lua rename to SpaceMod/stdlib/area/chunk.lua diff --git a/SpaceMod_1.1.1/stdlib/area/position.lua b/SpaceMod/stdlib/area/position.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/area/position.lua rename to SpaceMod/stdlib/area/position.lua diff --git a/SpaceMod_1.1.1/stdlib/area/tile.lua b/SpaceMod/stdlib/area/tile.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/area/tile.lua rename to SpaceMod/stdlib/area/tile.lua diff --git a/SpaceMod_1.1.1/stdlib/config/config.lua b/SpaceMod/stdlib/config/config.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/config/config.lua rename to SpaceMod/stdlib/config/config.lua diff --git a/SpaceMod_1.1.1/stdlib/core.lua b/SpaceMod/stdlib/core.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/core.lua rename to SpaceMod/stdlib/core.lua diff --git a/SpaceMod_1.1.1/stdlib/data/data.lua b/SpaceMod/stdlib/data/data.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/data/data.lua rename to SpaceMod/stdlib/data/data.lua diff --git a/SpaceMod_1.1.1/stdlib/data/recipe.lua b/SpaceMod/stdlib/data/recipe.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/data/recipe.lua rename to SpaceMod/stdlib/data/recipe.lua diff --git a/SpaceMod_1.1.1/stdlib/entity/entity.lua b/SpaceMod/stdlib/entity/entity.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/entity/entity.lua rename to SpaceMod/stdlib/entity/entity.lua diff --git a/SpaceMod_1.1.1/stdlib/entity/inventory.lua b/SpaceMod/stdlib/entity/inventory.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/entity/inventory.lua rename to SpaceMod/stdlib/entity/inventory.lua diff --git a/SpaceMod_1.1.1/stdlib/event/event.lua b/SpaceMod/stdlib/event/event.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/event/event.lua rename to SpaceMod/stdlib/event/event.lua diff --git a/SpaceMod_1.1.1/stdlib/event/time.lua b/SpaceMod/stdlib/event/time.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/event/time.lua rename to SpaceMod/stdlib/event/time.lua diff --git a/SpaceMod_1.1.1/stdlib/game.lua b/SpaceMod/stdlib/game.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/game.lua rename to SpaceMod/stdlib/game.lua diff --git a/SpaceMod_1.1.1/stdlib/gui/gui.lua b/SpaceMod/stdlib/gui/gui.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/gui/gui.lua rename to SpaceMod/stdlib/gui/gui.lua diff --git a/SpaceMod_1.1.1/stdlib/log/logger.lua b/SpaceMod/stdlib/log/logger.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/log/logger.lua rename to SpaceMod/stdlib/log/logger.lua diff --git a/SpaceMod_1.1.1/stdlib/string.lua b/SpaceMod/stdlib/string.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/string.lua rename to SpaceMod/stdlib/string.lua diff --git a/SpaceMod_1.1.1/stdlib/surface.lua b/SpaceMod/stdlib/surface.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/surface.lua rename to SpaceMod/stdlib/surface.lua diff --git a/SpaceMod_1.1.1/stdlib/table.lua b/SpaceMod/stdlib/table.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/table.lua rename to SpaceMod/stdlib/table.lua diff --git a/SpaceMod_1.1.1/stdlib/time.lua b/SpaceMod/stdlib/time.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/time.lua rename to SpaceMod/stdlib/time.lua diff --git a/SpaceMod_1.1.1/stdlib/trains/trains.lua b/SpaceMod/stdlib/trains/trains.lua similarity index 100% rename from SpaceMod_1.1.1/stdlib/trains/trains.lua rename to SpaceMod/stdlib/trains/trains.lua diff --git a/SpaceMod_1.1.1/thumbnail.png b/SpaceMod/thumbnail.png similarity index 100% rename from SpaceMod_1.1.1/thumbnail.png rename to SpaceMod/thumbnail.png diff --git a/SpaceMod_1.1.1/info.json b/SpaceMod_1.1.1/info.json deleted file mode 100644 index dd699d73..00000000 --- a/SpaceMod_1.1.1/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "SpaceMod", - "version": "1.1.1", - "title": "Space Extension Mod", - "author": "LordKTor", - "description": "Greatly extend the end game requiring multiple launches and massively increased science. Requires 40+ launches, and of a variety of new components. The goal is to build a vessel capable of getting you off the planet and home safely. Updated graphics courtesy of Steinerrr ", - "factorio_version": "1.1", - "dependencies": ["base", "? boblibrary", "? bobplates", "? bobmodules", "? bobelectronics", "? boblogistics", "? bobtech", "? bobequipment"] -} diff --git a/SpaceXGAR_0.17.0/changelog.txt b/SpaceXGAR/changelog.txt similarity index 100% rename from SpaceXGAR_0.17.0/changelog.txt rename to SpaceXGAR/changelog.txt diff --git a/SpaceXGAR_0.17.0/data-final-fixes.lua b/SpaceXGAR/data-final-fixes.lua similarity index 100% rename from SpaceXGAR_0.17.0/data-final-fixes.lua rename to SpaceXGAR/data-final-fixes.lua diff --git a/SpaceXGAR_0.17.0/data.lua b/SpaceXGAR/data.lua similarity index 100% rename from SpaceXGAR_0.17.0/data.lua rename to SpaceXGAR/data.lua diff --git a/SpaceXGAR_0.17.0/graphics/rocket-tab.png b/SpaceXGAR/graphics/rocket-tab.png similarity index 100% rename from SpaceXGAR_0.17.0/graphics/rocket-tab.png rename to SpaceXGAR/graphics/rocket-tab.png diff --git a/SpaceXGAR_0.17.0/info.json b/SpaceXGAR/info.json similarity index 100% rename from SpaceXGAR_0.17.0/info.json rename to SpaceXGAR/info.json diff --git a/SpaceXGAR_0.17.0/locale/en/base.cfg b/SpaceXGAR/locale/en/base.cfg similarity index 100% rename from SpaceXGAR_0.17.0/locale/en/base.cfg rename to SpaceXGAR/locale/en/base.cfg diff --git a/SpaceXGAR_0.17.0/locale/ru/base.cfg b/SpaceXGAR/locale/ru/base.cfg similarity index 100% rename from SpaceXGAR_0.17.0/locale/ru/base.cfg rename to SpaceXGAR/locale/ru/base.cfg diff --git a/SpaceXGAR_0.17.0/thumbnail.png b/SpaceXGAR/thumbnail.png similarity index 100% rename from SpaceXGAR_0.17.0/thumbnail.png rename to SpaceXGAR/thumbnail.png diff --git a/SpeedLimitSignsForTrains/control.lua b/SpeedLimitSignsForTrains/control.lua new file mode 100644 index 00000000..50dacab1 --- /dev/null +++ b/SpeedLimitSignsForTrains/control.lua @@ -0,0 +1,348 @@ +require "util" +require "utils.set" +require "utils.train" + +function onInit() + global.trains_lookup = {} + global.last_built_sign = {} +end + +function onConfigurationChanged(data) + -- remove old unused variables + global.trains = nil + global.slowers = nil + global.unslowers = nil + + -- enable recipes if tech is already researched + for k, v in pairs(game.forces) do + if v.technologies["rail-signals"].researched then + v.recipes["electronic-train-limit"].enabled = true + v.recipes["electronic-train-unlimit"].enabled = true + end + end + + -- reset our globals for safety + local our_mod = data.mod_changes["SpeedLimitSignsForTrains"] + + if our_mod and our_mod.old_version ~= our_mod.new_version then + global.trains_lookup = {} + global.last_built_sign = {} + end +end + +script.on_init(onInit) +script.on_configuration_changed(onConfigurationChanged) + +function getBoundingBox(position, radius) + return {{position.x - radius, position.y - radius}, {position.x + radius, position.y + radius}} +end + +function isTrainArriving(train) + return train.state == defines.train_state.arrive_station or train.state == defines.train_state.arrive_signal +end + +function shouldBrakeTrain(train, allowed_speed) + -- for train braking before station or signal we're adding additional ~10 km/h to the target speed + -- this way it will not roll slowly for a half of minute before reaching the station/signal + return not train.manual_mode and ((not isTrainArriving(train) and math.abs(train.speed) >= allowed_speed) or (isTrainArriving(train) and math.abs(train.speed) >= allowed_speed + 0.05)) +end + +function calcDeceleration(train) + local abs_speed = math.abs(train.speed) + local factor = 1 + + if isTrainArriving(train) then + factor = 0.75 + end + + factor = factor * 10.0 -- line added to decellerate much quicker + + if abs_speed > 0.6 then + factor = 0.005*factor + elseif abs_speed > 0.3 then + factor = 0.0075*factor + else + factor = 0.01*factor + end + + return math.min(1, factor) -- line added to avoid factors > 1 which would turn around the train +end + +function calcTickSpeed(speed) + -- convert from speed in kph to speed in meters per tick + -- frame = 60 ticks/s + -- 60 m/s = 1 m/frame = 216 km/h + -- additional 0.4 is some experimental correction + return speed / 216.4 +end + +function processSignsForTrain(twrap) + -- first locomotive of the train moving in proper direction + local loco = nil + + if twrap.train.speed > 0 and twrap.front_loco then + loco = twrap.front_loco + elseif twrap.train.speed < 0 and twrap.back_loco then + loco = twrap.back_loco + else + -- invalid setup, no locomotive in the movement direction of train + return + end + + lst = loco.surface.find_entities_filtered{area = getBoundingBox(loco.position, 2), type = "constant-combinator"} + for i, ent in pairs(lst) do + if ent.name == "placed-train-limit" and isOnLeft(ent.position, loco.position, getCardinal(loco.orientation)) then + local limit_value = getLimitIndication(ent) + + if limit_value and limit_value >= 5 and limit_value <= 500 then + twrap.limit = calcTickSpeed(limit_value) + end + + return + elseif ent.name == "placed-train-unlimit" and isOnLeft(ent.position, loco.position, getCardinal(loco.orientation)) then + local circuit_signal = readCircuitSignal(ent, {type = "item", name = "train-unlimit"}) + + if circuit_signal == nil or circuit_signal > 0 then + twrap.limit = false + end + + return + end + end + + local area = getBoundingBox(loco.position, twrap.train.speed * 10 + 1) + + if loco.surface.count_entities_filtered{area = area, type = "constant-combinator", count = 1} == 0 then + twrap.deactivation = 6 + end +end + +script.on_event(defines.events.on_tick, function(event) + for i=#global.trains_lookup,1,-1 do + local twrap = global.trains_lookup[i] + + if not twrap.train.valid then + table.remove(global.trains_lookup, i) + else + -- process signs and deactivation for this train + if twrap.deactivation == 0 and twrap.train.speed ~= 0 then + processSignsForTrain(twrap) + elseif twrap.deactivation > 0 then + twrap.deactivation = twrap.deactivation - 1 + elseif twrap.deactivation < 0 then + twrap.deactivation = 0 + end + + -- decelerate the train if needed + if twrap.limit and twrap.train.speed ~= 0 and shouldBrakeTrain(twrap.train, twrap.limit) then + local decel = calcDeceleration(twrap.train) + + if twrap.train.speed > 0 then + if (twrap.train.speed - decel) > 0 then + twrap.train.speed = math.max(twrap.train.speed - decel, twrap.limit) + else + twrap.train.speed = twrap.limit + end + else + if (twrap.train.speed + decel) < 0 then + twrap.train.speed = math.min(twrap.train.speed + decel, -twrap.limit) + else + twrap.train.speed = -twrap.limit + end + end + end + end + end +end) + +function onTrainState(event) + for k, v in pairs(global.trains_lookup) do + if not v.train.valid then + table.remove(global.trains_lookup, i) + elseif v.train == event.train then + if v.train.manual_mode then + v.limit = false + end + + return + end + end + + local front_loco = nil + local back_loco = nil + + if #event.train.locomotives.front_movers > 0 then + front_loco = event.train.locomotives.front_movers[1] + end + + if #event.train.locomotives.back_movers > 0 then + back_loco = event.train.locomotives.back_movers[#event.train.locomotives.back_movers] + end + + table.insert(global.trains_lookup, { + train=event.train, deactivation=0, limit=false, front_loco=front_loco, back_loco=back_loco + }) +end + +function readCircuitSignal(entity, signal_type) + local sign_value = 0 + + local red_network = entity.get_circuit_network(defines.wire_type.red) + local green_network = entity.get_circuit_network(defines.wire_type.green) + + if not red_network and not green_network then + return nil + end + + if red_network then + sign_value = sign_value + red_network.get_signal(signal_type) + end + + if green_network then + sign_value = sign_value + green_network.get_signal(signal_type) + end + + return sign_value +end + +function getLimitIndication(entity, red_network, green_network) + local sign_value = entity.get_or_create_control_behavior().get_signal(1).count + + if sign_value ~= nil and sign_value ~= 0 then + return sign_value + else + return readCircuitSignal(entity, {type = "item", name = "train-limit"}) + end +end + +function setLimitIndication(entity, value) + if not entity or not entity.valid then + return false + end + + entity.get_or_create_control_behavior().set_signal(1, + {count = value, signal = {type = "item", name = "train-limit"}}) + + return true +end + +function onBuiltEntity(event) + local player = nil + + if event.player_index then + player = game.players[event.player_index] + end + + if event.created_entity.name == "placed-train-limit" then + event.created_entity.operable = false + + if player then + setLimitIndication(event.created_entity, 20) + + local frame = player.gui.center["tsl-value"] + + if not frame then + global.last_built_sign[event.player_index] = event.created_entity + + frame = player.gui.center.add{type="frame", name="tsl-value", caption={"gui-limit-title"}, direction="horizontal"} + frame.add{type="button", name="tsl-value-20", caption={"gui-20"}} + frame.add{type="button", name="tsl-value-30", caption={"gui-30"}} + frame.add{type="button", name="tsl-value-40", caption={"gui-40"}} + frame.add{type="button", name="tsl-value-50", caption={"gui-50"}} + frame.add{type="button", name="tsl-value-80", caption={"gui-80"}} + frame.add{type="button", name="tsl-value-100", caption={"gui-100"}} + frame.add{type="button", name="tsl-value-other", caption={"gui-other"}} + frame.add{type="button", name="tsl-value-circuit", caption={"gui-circuit"}} + end + end + elseif event.created_entity.name == "placed-train-unlimit" then + event.created_entity.operable = false + end +end + +function onGuiClick(event) + local player = game.players[event.player_index] + local frame = player.gui.center["tsl-value"] + local manual_frame = player.gui.center["tsl-manual-value"] + + if manual_frame and event.element.parent == manual_frame then + if event.element.name == "tsl-manual-ok" then + local limit_value = tonumber(manual_frame["tsl-manual-input"].text) + + if not limit_value or limit_value < 5 or limit_value > 500 or limit_value % 1 ~= 0 then + manual_frame["tsl-manual-input"].text = "" + player.print({"gui-invalid-limit"}) + return + end + + if not setLimitIndication(global.last_built_sign[event.player_index], limit_value) then + player.print({"gui-set-failed"}) + end + + global.last_built_sign[event.player_index] = nil + + manual_frame.destroy() + end + elseif frame and event.element.parent == frame then + local limit_value = nil + + if event.element.name == "tsl-value-other" then + frame.destroy() + + manual_frame = player.gui.center.add{type="frame", name="tsl-manual-value", caption={"gui-limit-manual"}, direction="vertical"} + manual_frame.add{type="label", caption={"gui-limit-value"}} + manual_frame.add{type="textfield", name="tsl-manual-input"} + manual_frame.add{type="button", name="tsl-manual-ok", caption={"gui-ok"}} + return + elseif event.element.name == "tsl-value-20" then + limit_value = 20 + elseif event.element.name == "tsl-value-30" then + limit_value = 30 + elseif event.element.name == "tsl-value-40" then + limit_value = 40 + elseif event.element.name == "tsl-value-50" then + limit_value = 50 + elseif event.element.name == "tsl-value-80" then + limit_value = 80 + elseif event.element.name == "tsl-value-100" then + limit_value = 100 + elseif event.element.name == "tsl-value-circuit" then + limit_value = 0 + else + return + end + + if not setLimitIndication(global.last_built_sign[event.player_index], limit_value) then + player.print({"gui-set-failed"}) + end + + global.last_built_sign[event.player_index] = nil + + frame.destroy() + end +end + +function onPlayerJoinedGame(event) + local player = game.players[event.player_index] + local frame = player.gui.center["tsl-value"] + local manual_frame = player.gui.center["tsl-manual-value"] + + if frame then + frame.destroy() + end + + if manual_frame then + manual_frame.destroy() + end +end + +function onPlayerLeft(event) + global.last_built_sign[event.player_index] = nil +end + +script.on_event(defines.events.on_train_changed_state, onTrainState) +script.on_event(defines.events.on_built_entity, onBuiltEntity) +script.on_event(defines.events.on_robot_built_entity, onBuiltEntity) +script.on_event(defines.events.on_gui_click, onGuiClick) +script.on_event(defines.events.on_player_joined_game, onPlayerJoinedGame) +script.on_event(defines.events.on_player_left_game, onPlayerLeft) diff --git a/SpeedLimitSignsForTrains/data.lua b/SpeedLimitSignsForTrains/data.lua new file mode 100644 index 00000000..fbf04260 --- /dev/null +++ b/SpeedLimitSignsForTrains/data.lua @@ -0,0 +1,5 @@ +require("prototypes.items") +require("prototypes.recipes") + +table.insert(data.raw["technology"]["rail-signals"].effects, {type="unlock-recipe", recipe="electronic-train-limit"}) +table.insert(data.raw["technology"]["rail-signals"].effects, {type="unlock-recipe", recipe="electronic-train-unlimit"}) diff --git a/SpeedLimitSignsForTrains/graphics/Thumbs.db b/SpeedLimitSignsForTrains/graphics/Thumbs.db new file mode 100644 index 00000000..23c1aa8f Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/Thumbs.db differ diff --git a/SpeedLimitSignsForTrains/graphics/activity-leds/Thumbs.db b/SpeedLimitSignsForTrains/graphics/activity-leds/Thumbs.db new file mode 100644 index 00000000..4cddab3e Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/activity-leds/Thumbs.db differ diff --git a/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-east.png b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-east.png new file mode 100644 index 00000000..47c3b0a1 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-east.png differ diff --git a/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-north.png b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-north.png new file mode 100644 index 00000000..31adf7e2 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-north.png differ diff --git a/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-south.png b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-south.png new file mode 100644 index 00000000..da7e713c Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-south.png differ diff --git a/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-west.png b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-west.png new file mode 100644 index 00000000..f934be39 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/activity-leds/combinator-led-constant-west.png differ diff --git a/SpeedLimitSignsForTrains/graphics/train-limit-itm.png b/SpeedLimitSignsForTrains/graphics/train-limit-itm.png new file mode 100644 index 00000000..2b9d92ab Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/train-limit-itm.png differ diff --git a/SpeedLimitSignsForTrains/graphics/train-limit.png b/SpeedLimitSignsForTrains/graphics/train-limit.png new file mode 100644 index 00000000..ca4c0fa9 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/train-limit.png differ diff --git a/SpeedLimitSignsForTrains/graphics/train-unlimit-itm.png b/SpeedLimitSignsForTrains/graphics/train-unlimit-itm.png new file mode 100644 index 00000000..e5a34e55 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/train-unlimit-itm.png differ diff --git a/SpeedLimitSignsForTrains/graphics/train-unlimit.png b/SpeedLimitSignsForTrains/graphics/train-unlimit.png new file mode 100644 index 00000000..315e5dd0 Binary files /dev/null and b/SpeedLimitSignsForTrains/graphics/train-unlimit.png differ diff --git a/SpeedLimitSignsForTrains/info.json b/SpeedLimitSignsForTrains/info.json new file mode 100644 index 00000000..71037fa0 --- /dev/null +++ b/SpeedLimitSignsForTrains/info.json @@ -0,0 +1,9 @@ +{ + "name": "SpeedLimitSignsForTrains", + "version": "1.0.4", + "factorio_version" : "1.1", + "title": "β˜† Schmitt | Speed Limit Signs for Trains β˜†", + "author": "DE_Schmitt", + "description": "Place speed limit signs beside tracks to immediately lower the train speed to the required speed limit.", + "dependencies": ["base >= 1.1.0"] +} \ No newline at end of file diff --git a/SpeedLimitSignsForTrains/locale/en/limit.cfg b/SpeedLimitSignsForTrains/locale/en/limit.cfg new file mode 100644 index 00000000..5faeb336 --- /dev/null +++ b/SpeedLimitSignsForTrains/locale/en/limit.cfg @@ -0,0 +1,30 @@ +gui-limit-title=Limit configuration +gui-limit-manual=Manual limit configuration +gui-limit-value=Maximal allowed speed (in km/h) +gui-invalid-limit=Invalid value of speed limit! Please enter a natural number between 5 and 500. +gui-set-failed=Failed to set the speed, the sign was deconstructed in meanwhile. +gui-20=20 +gui-30=30 +gui-40=40 +gui-50=50 +gui-80=80 +gui-100=100 +gui-other=Other +gui-circuit=Circuit network +gui-ok=OK + +[item-name] +train-limit=Speed limit sign +train-unlimit=Limit cancellation sign + +[item-description] +train-limit=Place on the right side of tracks to set maximal speed. The sign is equipped with a transmitter which automatically sends commands to autonomous trains. +train-unlimit=Place on the right side of tracks to clear out the speed limit. The sign is equipped with a transmitter which automatically sends commands to autonomous trains. + +[entity-name] +placed-train-limit=Speed limit sign +placed-train-unlimit=Limit cancellation sign + +[recipe-name] +electronic-train-limit=Speed limit sign +electronic-train-unlimit=Limit cancellation sign diff --git a/SpeedLimitSignsForTrains/locale/pl/limit.cfg b/SpeedLimitSignsForTrains/locale/pl/limit.cfg new file mode 100644 index 00000000..9c23062a --- /dev/null +++ b/SpeedLimitSignsForTrains/locale/pl/limit.cfg @@ -0,0 +1,30 @@ +gui-limit-title=Ustawienia ograniczenia +gui-limit-manual=RΔ™czne ustawienie ograniczenia +gui-limit-value=Maksymalna dozwolona prΔ™dkoΕ›Δ‡ (w km/h) +gui-invalid-limit=Niepoprawne ograniczenie prΔ™dkoΕ›ci! ProszΔ™ wpisaΔ‡ liczbΔ™ naturalnΔ… pomiΔ™dzy 5 i 500. +gui-set-failed=Nie udaΕ‚o siΔ™ ustawiΔ‡ ograniczenia, znak zostaΕ‚ w miΔ™dzyczasie zdemontowany. +gui-20=20 +gui-30=30 +gui-40=40 +gui-50=50 +gui-80=80 +gui-100=100 +gui-other=Inne +gui-circuit=SieΔ‡ sterownicza +gui-ok=OK + +[item-name] +train-limit=Znacznik ograniczenia prΔ™dkoΕ›ci +train-unlimit=Znacznik koΕ„ca ograniczenia prΔ™dkoΕ›ci + +[item-description] +train-limit=Postaw po prawej stronie torΓ³w aby ustaliΔ‡ ograniczenie prΔ™dkoΕ›ci. Znak posiada nadajnik wysyΕ‚ajΔ…cy informacje o ograniczeniach do autonomicznych pociΔ…gΓ³w. +train-unlimit=Postaw po prawej stronie torΓ³w aby odwoΕ‚aΔ‡ ograniczenie prΔ™dkoΕ›ci. Znak posiada nadajnik wysyΕ‚ajΔ…cy informacje o ograniczeniach do autonomicznych pociΔ…gΓ³w. + +[entity-name] +placed-train-limit=Znacznik ograniczenia prΔ™dkoΕ›ci +placed-train-unlimit=Znacznik koΕ„ca ograniczenia prΔ™dkoΕ›ci + +[recipe-name] +electronic-train-limit=Znacznik ograniczenia prΔ™dkoΕ›ci +electronic-train-unlimit=Znacznik koΕ„ca ograniczenia prΔ™dkoΕ›ci diff --git a/SpeedLimitSignsForTrains/migrations/TrainSpeedLimit_1.0.5.json b/SpeedLimitSignsForTrains/migrations/TrainSpeedLimit_1.0.5.json new file mode 100644 index 00000000..399bccde --- /dev/null +++ b/SpeedLimitSignsForTrains/migrations/TrainSpeedLimit_1.0.5.json @@ -0,0 +1,6 @@ +{ + "item": + [ + ["train-limit-20", "train-limit"] + ] +} \ No newline at end of file diff --git a/SpeedLimitSignsForTrains/prototypes/items.lua b/SpeedLimitSignsForTrains/prototypes/items.lua new file mode 100644 index 00000000..dc526e82 --- /dev/null +++ b/SpeedLimitSignsForTrains/prototypes/items.lua @@ -0,0 +1,348 @@ +data:extend( + { + { + type = "item", + name = "train-limit", + icon = "__SpeedLimitSignsForTrains__/graphics/train-limit-itm.png", + icon_size = 32, + subgroup = "transport", + place_result = "placed-train-limit", + stack_size = 50 + }, + { + type = "constant-combinator", + name = "placed-train-limit", + icon = "__SpeedLimitSignsForTrains__/graphics/train-limit.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + fast_replaceable_group = "railway-sign", + minable = {hardness = 0.2, mining_time = 0.5, result = "train-limit"}, + max_health = 80, + corpse = "small-remnants", + + item_slot_count = 1, + collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + building_collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + render_layer = "object", + + resistances = + { + { + type = "fire", + percent = 100 + } + }, + sprites = + { + north = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-limit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + east = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-limit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + south = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-limit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + west = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-limit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + } + }, + activity_led_sprites = + { + north = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-north.png", + width = 11, + height = 10, + frame_count = 1, + shift = {0.296875, -0.40625}, + }, + east = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-east.png", + width = 14, + height = 12, + frame_count = 1, + shift = {0.25, -0.03125}, + }, + south = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-south.png", + width = 11, + height = 11, + frame_count = 1, + shift = {-0.296875, -0.078125}, + }, + west = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-west.png", + width = 12, + height = 12, + frame_count = 1, + shift = {-0.21875, -0.46875}, + } + }, + + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + + activity_led_light_offsets = + { + {0.296875, -0.40625}, + {0.25, -0.03125}, + {-0.296875, -0.078125}, + {-0.21875, -0.46875} + }, + + circuit_wire_connection_points = + { + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + } + }, + + circuit_wire_max_distance = 5 + }, + { + type = "item", + name = "train-unlimit", + icon = "__SpeedLimitSignsForTrains__/graphics/train-unlimit-itm.png", + icon_size = 32, + subgroup = "transport", + place_result = "placed-train-unlimit", + stack_size = 50 + }, + { + type = "constant-combinator", + name = "placed-train-unlimit", + icon = "__SpeedLimitSignsForTrains__/graphics/train-unlimit.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + fast_replaceable_group = "railway-sign", + minable = {hardness = 0.2, mining_time = 0.5, result = "train-unlimit"}, + max_health = 80, + corpse = "small-remnants", + + item_slot_count = 1, + collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + building_collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + render_layer = "object", + + resistances = + { + { + type = "fire", + percent = 100 + } + }, + sprites = + { + north = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-unlimit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + east = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-unlimit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + south = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-unlimit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + }, + west = + { + filename = "__SpeedLimitSignsForTrains__/graphics/train-unlimit.png", + priority = "high", + width = 32, + height = 64, + shift = {0, -0.8} + } + }, + activity_led_sprites = + { + north = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-north.png", + width = 11, + height = 10, + frame_count = 1, + shift = {0.296875, -0.40625}, + }, + east = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-east.png", + width = 14, + height = 12, + frame_count = 1, + shift = {0.25, -0.03125}, + }, + south = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-south.png", + width = 11, + height = 11, + frame_count = 1, + shift = {-0.296875, -0.078125}, + }, + west = + { + filename = "__SpeedLimitSignsForTrains__/graphics/activity-leds/combinator-led-constant-west.png", + width = 12, + height = 12, + frame_count = 1, + shift = {-0.21875, -0.46875}, + } + }, + + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + + activity_led_light_offsets = + { + {0.296875, -0.40625}, + {0.25, -0.03125}, + {-0.296875, -0.078125}, + {-0.21875, -0.46875} + }, + + circuit_wire_connection_points = + { + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + }, + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.05, -0.60}, + green = {0.05, -0.60}, + } + } + }, + + circuit_wire_max_distance = 5 + }, + } +) \ No newline at end of file diff --git a/SpeedLimitSignsForTrains/prototypes/recipes.lua b/SpeedLimitSignsForTrains/prototypes/recipes.lua new file mode 100644 index 00000000..e14dbc3d --- /dev/null +++ b/SpeedLimitSignsForTrains/prototypes/recipes.lua @@ -0,0 +1,30 @@ +data:extend({ + { + type = "recipe", + name = "electronic-train-limit", + energy_required = 0.5, + enabled = false, + category = "crafting", + ingredients = + { + {"electronic-circuit", 2}, + {"iron-plate", 3}, + {"iron-stick", 1} + }, + result= "train-limit" + }, + { + type = "recipe", + name = "electronic-train-unlimit", + energy_required = 0.5, + enabled = false, + category = "crafting", + ingredients = + { + {"electronic-circuit", 2}, + {"iron-plate", 3}, + {"iron-stick", 1} + }, + result= "train-unlimit" + } +}) diff --git a/SpeedLimitSignsForTrains/thumbnail.png b/SpeedLimitSignsForTrains/thumbnail.png new file mode 100644 index 00000000..c692c05c Binary files /dev/null and b/SpeedLimitSignsForTrains/thumbnail.png differ diff --git a/SpeedLimitSignsForTrains/utils/set.lua b/SpeedLimitSignsForTrains/utils/set.lua new file mode 100644 index 00000000..591fe46e --- /dev/null +++ b/SpeedLimitSignsForTrains/utils/set.lua @@ -0,0 +1,30 @@ +Set = {} +function Set:new(o) + o = o or {} -- create object if user does not provide one + setmetatable(o, self) + self.__index = self + o.list = o.list or {} + return o +end +function Set:contains(elem) + for k,v in pairs(self.list) do + if v == elem then + return true + end + end + + return false +end +function Set:add(elem) + if not self:contains(elem) then + self.list[#self.list+1] = elem + end +end +function Set:remove(elem) + for i,v in pairs(self.list) do + if v == elem then + table.remove(self.list, i) + break + end + end +end \ No newline at end of file diff --git a/SpeedLimitSignsForTrains/utils/train.lua b/SpeedLimitSignsForTrains/utils/train.lua new file mode 100644 index 00000000..8be31182 --- /dev/null +++ b/SpeedLimitSignsForTrains/utils/train.lua @@ -0,0 +1,82 @@ +direction = { + north = 0, + northeast = 1, + east = 2, + southeast = 3, + south = 4, + southwest = 5, + west = 6, + northwest = 7 +} + +opposite = {} +opposite[direction.north] = direction.south +opposite[direction.northeast] = direction.southwest +opposite[direction.east] = direction.west +opposite[direction.southeast] = direction.northwest +opposite[direction.south] = direction.north +opposite[direction.southwest] = direction.northeast +opposite[direction.west] = direction.east +opposite[direction.northwest] = direction.southeast + +function getCardinal(orient) + return math.floor(orient * 200.0 / 25.0 + 0.5) % 8 +end + +function isOnLeft(origin, target, dir) + if dir == direction.north then + return target.x < origin.x + end + if dir == direction.west then + return target.y > origin.y + end + if dir == direction.east then + return target.y < origin.y + end + if dir == direction.south then + return target.x > origin.x + end + local diffx = target.x - origin.x + local diffy = target.y - origin.y + + local x = diffx - diffy + local y = diffx + diffy + + --printToAll(dir .. ' -> ' .. x .. ', ' .. y) + if dir == direction.northeast then + return y < 0 + end + + if dir == direction.southeast then + return x > 0 + end + + if dir == direction.southwest then + return y > 0 + end + + if dir == direction.northwest then + return x < 0 + end + + return false +end + +function isFrontLocomotive(ent) + local train = ent.train + local movers = {} + + if train.speed > 0 then + movers = train.locomotives.front_movers + elseif train.speed < 0 then + movers = train.locomotives.back_movers + end + + for k,v in pairs(movers) do + if v == ent then + return true + end + end + return false + +end \ No newline at end of file diff --git a/Squeak Through_1.8.2/Readme.txt b/Squeak Through/Readme.txt similarity index 100% rename from Squeak Through_1.8.2/Readme.txt rename to Squeak Through/Readme.txt diff --git a/Squeak Through_1.8.2/changelog.txt b/Squeak Through/changelog.txt similarity index 100% rename from Squeak Through_1.8.2/changelog.txt rename to Squeak Through/changelog.txt diff --git a/Squeak Through_1.8.2/config.lua b/Squeak Through/config.lua similarity index 100% rename from Squeak Through_1.8.2/config.lua rename to Squeak Through/config.lua diff --git a/Squeak Through_1.8.2/data-updates.lua b/Squeak Through/data-updates.lua similarity index 100% rename from Squeak Through_1.8.2/data-updates.lua rename to Squeak Through/data-updates.lua diff --git a/Squeak Through_1.8.2/info.json b/Squeak Through/info.json similarity index 100% rename from Squeak Through_1.8.2/info.json rename to Squeak Through/info.json diff --git a/Squeak Through_1.8.2/locale/en/locale.cfg b/Squeak Through/locale/en/locale.cfg similarity index 100% rename from Squeak Through_1.8.2/locale/en/locale.cfg rename to Squeak Through/locale/en/locale.cfg diff --git a/Squeak Through_1.8.2/settings.lua b/Squeak Through/settings.lua similarity index 100% rename from Squeak Through_1.8.2/settings.lua rename to Squeak Through/settings.lua diff --git a/Squeak Through_1.8.2/thumbnail.png b/Squeak Through/thumbnail.png similarity index 100% rename from Squeak Through_1.8.2/thumbnail.png rename to Squeak Through/thumbnail.png diff --git a/StatsGui-HandcraftTimer_0.1.2/LICENSE.txt b/StatsGui-HandcraftTimer_0.1.2/LICENSE.txt deleted file mode 100644 index d0a1fa14..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/LICENSE.txt +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/StatsGui-HandcraftTimer_0.1.2/changelog.txt b/StatsGui-HandcraftTimer_0.1.2/changelog.txt deleted file mode 100644 index d1890271..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/changelog.txt +++ /dev/null @@ -1,15 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 -Date: 2023-05-24 - Bugfixes: - - The fix for the aforementioned crash worked with trainsaver, but still crashed with e.g. IR3’s intro. Fixed properly now (I hope). ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: 2023-05-24 - Bugfixes: - - Fix a crash when entering a cutscene (e.g. trainsaver). ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 -Date: 2023-05-23 - Features: - - Initial release. diff --git a/StatsGui-HandcraftTimer_0.1.2/control.lua b/StatsGui-HandcraftTimer_0.1.2/control.lua deleted file mode 100644 index 223a9431..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/control.lua +++ /dev/null @@ -1,35 +0,0 @@ --- SPDX-License-Identifier: MPL-2.0 - -local flib_format = require("__flib__/format") - -local function sensor(player) - local force = player.force - if not player.mod_settings[script.mod_name .. ":show-sensor"].value - or player.character == nil -- trainsaver and IR3’s intro (likely any other cutscenes too) crash otherwise - or player.cheat_mode - or player.crafting_queue_size == 0 then - return - end - local energy = 0 - for _, item in ipairs(player.crafting_queue) do - local recipe = force.recipes[item.recipe] - energy = energy + recipe.energy * item.count - if item.index == 1 then - energy = energy - recipe.energy * player.crafting_queue_progress - end - end - local ticks = energy * 60 / (1 + force.manual_crafting_speed_modifier) - if player.character ~= nil then - ticks = ticks / (1 + player.character.character_crafting_speed_modifier) - end - return { script.mod_name .. ".sensor", flib_format.time(ticks) } -end -remote.add_interface(script.mod_name, { sensor = sensor }) - -local function register_sensor() - if remote.call("StatsGui", "version") == 1 then - remote.call("StatsGui", "add_sensor", script.mod_name, "sensor") - end -end -script.on_init(register_sensor) -script.on_load(register_sensor) diff --git a/StatsGui-HandcraftTimer_0.1.2/info.json b/StatsGui-HandcraftTimer_0.1.2/info.json deleted file mode 100644 index 4e03878e..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ "name": "StatsGui-HandcraftTimer" -, "version": "0.1.2" -, "title": "Stats GUI β€” Handcraft Timer" -, "author": "OrichalcumCosmonaut" -, "contact": "ActivityPub: @orichalcumcosmonaut@types.pl" -, "description": "Adds a handcraft timer to Stats GUI." -, "factorio_version": "1.1" -, "dependencies": ["base", "StatsGui", "flib >= 0.12.7"] -} diff --git a/StatsGui-HandcraftTimer_0.1.2/locale/en/en.cfg b/StatsGui-HandcraftTimer_0.1.2/locale/en/en.cfg deleted file mode 100644 index c8a425e5..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/locale/en/en.cfg +++ /dev/null @@ -1,13 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 - -[mod-name] -StatsGui-HandcraftTimer=Stats GUI β€” Handcraft Timer - -[mod-description] -StatsGui-HandcraftTimer=Adds a handcraft timer to Stats GUI. - -[mod-setting-name] -StatsGui-HandcraftTimer:show-sensor=Show handcraft timer - -[StatsGui-HandcraftTimer] -sensor=Handcrafting finished = __1__ diff --git a/StatsGui-HandcraftTimer_0.1.2/settings.lua b/StatsGui-HandcraftTimer_0.1.2/settings.lua deleted file mode 100644 index e6c5786a..00000000 --- a/StatsGui-HandcraftTimer_0.1.2/settings.lua +++ /dev/null @@ -1,8 +0,0 @@ --- SPDX-License-Identifier: MPL-2.0 - -data:extend{{ - type = "bool-setting", - name = "StatsGui-HandcraftTimer:show-sensor", - setting_type = "runtime-per-user", - default_value = true, -}} diff --git a/StatsGui-MovementSpeed_1.0.2/LICENSE.txt b/StatsGui-MovementSpeed_1.0.2/LICENSE.txt deleted file mode 100644 index d0a1fa14..00000000 --- a/StatsGui-MovementSpeed_1.0.2/LICENSE.txt +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/StatsGui-MovementSpeed_1.0.2/changelog.txt b/StatsGui-MovementSpeed_1.0.2/changelog.txt deleted file mode 100644 index f8a665a5..00000000 --- a/StatsGui-MovementSpeed_1.0.2/changelog.txt +++ /dev/null @@ -1,15 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2023-10-02 - Bugfixes: - - Update changelog. ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2023-10-02 - Bugfixes: - - Update locale. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 06. 05. 2022 - Features: - - Initial release. \ No newline at end of file diff --git a/StatsGui-MovementSpeed_1.0.2/control.lua b/StatsGui-MovementSpeed_1.0.2/control.lua deleted file mode 100644 index 94c57928..00000000 --- a/StatsGui-MovementSpeed_1.0.2/control.lua +++ /dev/null @@ -1,233 +0,0 @@ -local prev_position = nil -local prev_tick = nil - -local function round256(float) - return math.floor(float * 256 + 0.5) / 256 -end - -local function floor256(float) - return math.floor(float * 256) / 256 -end - -local function getVehicleMaxSpeed(vehicle) - local vehiclePrototype = vehicle.prototype - local max_speed - --[[ - vehicle.type vehicle.name - car car - car tank - locomotive locomotive - spider-vehicle spidertron - - car hover-car - car hover-car-mk2 - car raven-1 - car heli-entity-_- - car cargo-plane - car better-cargo-plane - car even-better-cargo-plane - car flying-fortress - car gunship - car jet - - ]] - - if vehicle.type == "car" then - - local vehicle_weight = vehiclePrototype.weight - local friction_force = vehiclePrototype.friction_force - local terrain_friction_modifier = vehiclePrototype.terrain_friction_modifier - local average_tile_friction_modifier = 1.6 -- Average of tile Friction is a calc of all tiles the bounding box of the vehicle resides over - local car_friction_modifier = 1 - local sticker_friction_modifier = 1 - local combined_friction = 1 - friction_force * - (1 + terrain_friction_modifier * (average_tile_friction_modifier - 1)) * - car_friction_modifier * sticker_friction_modifier - - local combined_friction_square = combined_friction * combined_friction - - local vehicle_consumption = vehiclePrototype.consumption - local vehicle_consumption_modifier = 1 - local vehicle_effectivity = vehiclePrototype.effectivity - local fuel_acceleration_multiplier = 1 - local fuel_top_speed_multiplier = 1 - local speed_bonus = 1 - local sticker_bonus = 1 - - local energy_per_tick = vehicle_consumption * vehicle_consumption_modifier * vehicle_effectivity * - fuel_acceleration_multiplier * fuel_top_speed_multiplier * speed_bonus * - sticker_bonus - - local max_energy = energy_per_tick * combined_friction_square / (1 - combined_friction_square) - - max_speed = (max_energy * 2 / vehicle_weight) ^ 0.5 * 3.6 - elseif vehicle.type == "locomotive" then - max_speed = round256(vehicle.train.max_forward_speed) * 60 * 3.6 - elseif vehicle.type == "spider-vehicle" then - if (vehicle.name == "spidertron") then - max_speed_default = 41 - - grid_movement_bonus = 0.0 - for i, e in ipairs(vehicle.grid.equipment) do - grid_movement_bonus = grid_movement_bonus + e.movement_bonus - end - - max_speed = max_speed_default * (1 + grid_movement_bonus) - - -- vehicle.grid.inhibit_movement_bonus -- no not work - - else - max_speed = 0 - end - else - max_speed = 0 - end - return max_speed - -end - -local function shortE(e) - suffix = "TJ" - if (e > 1e12) then - suffix = "TJ" - e = e / 1e12; - elseif (e > 1e9) then - suffix = "GJ" - e = e / 1e9; - elseif (e > 1e6) then - suffix = "MJ" - e = e / 1e6; - elseif (e > 1e3) then - suffix = "kJ" - e = e / 1e3; - else - suffix = "J" - end - - if (e > 100) then - return string.format("%.0f%s", e, suffix) - elseif (e > 10) then - return string.format("%.1f%s", e, suffix) - else - return string.format("%.2f%s", e, suffix) - end - -end - -local function sensor(player) - if not player.mod_settings["statsgui-ms-show-sensor"].value or player.character == nil then - return - end - - if prev_position and prev_tick then - - time = game.tick - prev_tick - local dx = player.position.x - prev_position.x - local dy = player.position.y - prev_position.y - distance = (dx ^ 2 + dy ^ 2) ^ 0.5 - end - - prev_position = player.position - prev_tick = game.tick - - local gui_title = "" - local gui_value = "" - local current_speed = "000" - - if (distance ~= nil and time ~= nil) then - current_speed = string.format("%03.0f", distance / time * 60 * 3.6) - end - - -- player.character_running_speed_modifier -- cheat - -- player.vehicle.speed -- vehicle speed in stock gui - -- player.surface.get_tile(player.position.x, player.position.y).name, player.surface - -- player.surface.get_tile(player.position.x, player.position.y).prototype.walking_speed_modifier, player.surface - -- player.surface.get_tile(player.position.x, player.position.y).prototype.vehicle_friction_modifier) - - if (player.driving and player.vehicle) then - gui_title = {"statsgui-ms.title-vehicle"} - - if (player.mod_settings["statsgui-ms-max-speed-vehicle"].value) then - max_speed = getVehicleMaxSpeed(player.vehicle) - - if (max_speed ~= 0) then - local max = string.format("%03.0f km/h", max_speed) - gui_value = string.format("%s/%s", current_speed, max) - else - gui_value = string.format("%s km/h", current_speed) - end - else - gui_value = string.format("%s km/h", current_speed) - end - - else - if player.mod_settings["statsgui-ms-jet-fuel"] and script.active_mods["jetpack"] and - remote.call("jetpack", "is_jetpacking", player) then - local energy_in_inventory = 0; - - gui_title = {"statsgui-ms.title-jet"} - local current_fuel = remote.call("jetpack", "get_current_fuel_for_character", player) -- name -- energy -- thrust - -- local current_fuels_array = remote.call("jetpack", "get_current_fuels") - if (current_fuel) then - local fuels = remote.call("jetpack", "get_fuels") - local main_inventory = player.get_inventory(defines.inventory.character_main) - - for i, fuel in pairs(fuels) do - if game.item_prototypes[fuel.fuel_name] then - stack = main_inventory.find_item_stack(fuel.fuel_name) - if (stack) then - count = main_inventory.get_item_count(fuel.fuel_name) - energy_in_inventory = energy_in_inventory + count * stack.prototype.fuel_value - end - end - end - energy_in_inventory = energy_in_inventory + current_fuel.energy - gui_value = string.format("%s km/h, %s", current_speed, shortE(energy_in_inventory)) - end - else - gui_title = {"statsgui-ms.title-player"} - if (player.mod_settings["statsgui-ms-max-speed-player"].value) then - max_speed = floor256(player.character_running_speed) * 60 * 3.6 - relative_max_speed = player.character_running_speed / 0.15 * 100 - 100; - - if (max_speed ~= 0) then - local max = string.format("%03.0f km/h (+%.0f%%)", max_speed, relative_max_speed) - gui_value = string.format("%s/%s", current_speed, max) - else - gui_value = string.format("%s km/h", current_speed) - end - else - gui_value = string.format("%s km/h", current_speed) - end - end - end - - return {"", gui_title, gui_value} - -end - -local function register_sensor() - -- always call the `version` function first to avoid crashes if the interface changes in the future - if script.active_mods["StatsGui"] and remote.call("StatsGui", "version") == 1 then - remote.call("StatsGui", "add_sensor", "StatsGui-MovementSpeed", "speed_sensor") - end -end - -script.on_init(function() - register_sensor() -end) - -script.on_load(function() - register_sensor() -end) - -remote.add_interface("StatsGui-MovementSpeed", { - speed_sensor = sensor -}) - ---[[ -script.on_event(defines.events.on_player_driving_changed_state, function(event) - local player = game.players[event.player_index] - -end) -]] diff --git a/StatsGui-MovementSpeed_1.0.2/info.json b/StatsGui-MovementSpeed_1.0.2/info.json deleted file mode 100644 index 4a298b68..00000000 --- a/StatsGui-MovementSpeed_1.0.2/info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "StatsGui-MovementSpeed", - "version": "1.0.2", - "title": "Stats GUI β€” Movement Speed", - "author": "flart", - "description": "Adds a movement speed to Stats GUI.\n\nUses coordinates, therefore supports any movement of a player: power suit, vehicles, tiles bonus, on belts, mods, etc.\nOptionally shows max speed, and amount of energy in the inventory for Jetpack mod.", - "factorio_version": "1.1", - "dependencies": [ - "base", - "StatsGui", - "? jetpack" - ] -} \ No newline at end of file diff --git a/StatsGui-MovementSpeed_1.0.2/locale/en/en.cfg b/StatsGui-MovementSpeed_1.0.2/locale/en/en.cfg deleted file mode 100644 index c8d223a5..00000000 --- a/StatsGui-MovementSpeed_1.0.2/locale/en/en.cfg +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: MPL-2.0 - -[mod-name] -StatsGui-MovementSpeed=Stats GUI β€” Movement Speed - -[mod-description] -StatsGui-MovementSpeed=Adds a movement speed to Stats GUI.\n\nUses coordinates, therefore supports any movement of a player: power suit, vehicles, tiles bonus, on belts, mods, etc.\nOptionally shows max speed, and amount of energy in the inventory for Jetpack mod. - -[mod-setting-name] -statsgui-ms-show-sensor=Show Speed -statsgui-ms-jet-fuel= Add amount of Jetpack fuel in inventory on flying (Jetpack mod compatibility) -statsgui-ms-max-speed-vehicle= Add max vehicle speed -statsgui-ms-max-speed-player= Add max player speed - -[mod-setting-description] -statsgui-ms-max-speed-vehicle= not really correct values - - -[statsgui-ms] -title-player= Player speed =Β  -title-jet= Jet speed =Β  -title-vehicle= Vehicle speed =Β  \ No newline at end of file diff --git a/StatsGui-MovementSpeed_1.0.2/settings.lua b/StatsGui-MovementSpeed_1.0.2/settings.lua deleted file mode 100644 index 45ccd911..00000000 --- a/StatsGui-MovementSpeed_1.0.2/settings.lua +++ /dev/null @@ -1,26 +0,0 @@ --- SPDX-License-Identifier: MPL-2.0 -data:extend{{ - type = "bool-setting", - name = "statsgui-ms-show-sensor", - setting_type = "runtime-per-user", - default_value = true, - order = "aa" -}, { - type = "bool-setting", - name = "statsgui-ms-max-speed-player", - setting_type = "runtime-per-user", - default_value = true, - order = "ba" -}, { - type = "bool-setting", - name = "statsgui-ms-max-speed-vehicle", - setting_type = "runtime-per-user", - default_value = false, - order = "ca" -}, { - type = "bool-setting", - name = "statsgui-ms-jet-fuel", - setting_type = "runtime-per-user", - default_value = true, - order = "da" -}} diff --git a/StatsGui-MovementSpeed_1.0.2/thumbnail.png b/StatsGui-MovementSpeed_1.0.2/thumbnail.png deleted file mode 100644 index 43f79b2b..00000000 Binary files a/StatsGui-MovementSpeed_1.0.2/thumbnail.png and /dev/null differ diff --git a/StatsGui_1.4.1/changelog.txt b/StatsGui_1.4.1/changelog.txt deleted file mode 100644 index c6baeb63..00000000 --- a/StatsGui_1.4.1/changelog.txt +++ /dev/null @@ -1,35 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.4.1 -Date: 2022-02-03 - Bugfixes: - - Fixed a crash when the Stats GUI window is destroyed by another mod ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 2022-01-26 - Features: - - Added setting to adjust GUI position for the clock ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2021-08-15 - Features: - - Added position sensor (disabled by default) - - Research finished sensor will show an infinity symbol if no progress is being made ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2021-03-11 - Features: - - Added a setting to fill the space where the FPS/UPS indicator should be, for those who play without it ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2021-02-24 - Features: - - Added nearby pollution sensor (disabled by default) - - Added remote interface to allow other mods to add custom sensors and preprocessors - Bugfixes: - - Fixed that the mod was updating GUIs for players who were not currently online - - Fixed the research time to finish sensor would be completely borked in multiplayer ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2021-02-17 - Features: - - Initial release diff --git a/StatsGui_1.4.1/constants.lua b/StatsGui_1.4.1/constants.lua deleted file mode 100644 index 66f365ea..00000000 --- a/StatsGui_1.4.1/constants.lua +++ /dev/null @@ -1,16 +0,0 @@ -local constants = {} - -constants.builtin_sensors = { - { name = "research", enabled = true, order = "ba" }, - { name = "position", enabled = false, order = "bb" }, - { name = "evolution", enabled = true, order = "bc" }, - { name = "pollution", enabled = false, order = "bd" }, - { name = "playtime", enabled = true, order = "be" }, - { name = "daytime", enabled = true, order = "bf" }, -} - -constants.interface_version = 1 - -constants.research_progress_samples_count = 3 - -return constants diff --git a/StatsGui_1.4.1/control.lua b/StatsGui_1.4.1/control.lua deleted file mode 100644 index e2e6defb..00000000 --- a/StatsGui_1.4.1/control.lua +++ /dev/null @@ -1,110 +0,0 @@ -local event = require("__flib__.event") -local migration = require("__flib__.migration") - -local constants = require("constants") - -local migrations = require("scripts.migrations") -local player_data = require("scripts.player-data") -local preprocessors = require("scripts.preprocessors") -local sensors = require("scripts.sensors") -local stats_gui = require("scripts.stats-gui") - --- ----------------------------------------------------------------------------- --- EVENT HANDLERS - --- BOOTSTRAP - -event.on_init(function() - global.players = {} - global.research_progress_samples = {} - global.research_progress_strings = {} - for i, player in pairs(game.players) do - player_data.init(i) - player_data.refresh(player, global.players[i]) - end -end) - -event.on_configuration_changed(function(e) - if migration.on_config_changed(e, migrations) then - global.research_progress_samples = {} - for i, player in pairs(game.players) do - player_data.refresh(player, global.players[i]) - end - end -end) - --- PLAYER - -event.on_player_created(function(e) - local player = game.get_player(e.player_index) - player_data.init(e.player_index) - player_data.refresh(player, global.players[e.player_index]) -end) - -event.on_player_removed(function(e) - global.players[e.player_index] = nil -end) - -event.register({ - defines.events.on_player_display_resolution_changed, - defines.events.on_player_display_scale_changed, -}, function(e) - local player = game.get_player(e.player_index) - local player_table = global.players[e.player_index] - stats_gui.set_width(player, player_table) -end) - --- SETTINGS - -event.on_runtime_mod_setting_changed(function(e) - if string.sub(e.setting, 1, 8) == "statsgui" then - local player = game.get_player(e.player_index) - local player_table = global.players[e.player_index] - if - e.setting == "statsgui-single-line" - or e.setting == "statsgui-adjust-for-fps-ups" - or e.setting == "statsgui-adjust-for-clock" - then - -- recreate the GUI to change the frame direction and/or padding - player_data.refresh(player, player_table) - else - player_data.update_settings(player, player_table) - end - end -end) - --- TICK - --- update stats once per second -event.on_nth_tick(60, function() - -- run preprocessors - for _, preprocessor in pairs(preprocessors) do - preprocessor() - end - -- update GUIs - for _, player in pairs(game.connected_players) do - local player_table = global.players[player.index] - stats_gui.update(player, player_table) - end -end) - --- ----------------------------------------------------------------------------- --- REMOTE INTERFACE - -remote.add_interface("StatsGui", { - add_preprocessor = function(interface, func) - -- create a dummy function that calls the specified remote interface and returns what it returns - preprocessors[#preprocessors + 1] = function() - return remote.call(interface, func) - end - end, - add_sensor = function(interface, func) - -- create a dummy function that calls the specified remote interface and returns what it returns - sensors[#sensors + 1] = function(player) - return remote.call(interface, func, player) - end - end, - version = function() - return constants.interface_version - end, -}) diff --git a/StatsGui_1.4.1/data.lua b/StatsGui_1.4.1/data.lua deleted file mode 100644 index 7794bf5a..00000000 --- a/StatsGui_1.4.1/data.lua +++ /dev/null @@ -1,91 +0,0 @@ -local styles = data.raw["gui-style"].default - -styles.statsgui_label = { - type = "label_style", - font = "default-game", - font_color = default_font_color, -} - -styles.statsgui_frame = { - type = "frame_style", - parent = "invisible_frame", - horizontal_flow_style = { - type = "horizontal_flow_style", - horizontal_spacing = 20, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 10, - right_padding = 287 + 180, - }, - vertical_flow_style = { - type = "vertical_flow_style", - vertical_spacing = 0, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 38, - right_padding = 287, - }, -} - -styles.statsgui_frame_no_ups = { - type = "frame_style", - parent = "invisible_frame", - horizontal_flow_style = { - type = "horizontal_flow_style", - horizontal_spacing = 20, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 10, - right_padding = 287, - }, - vertical_flow_style = { - type = "vertical_flow_style", - vertical_spacing = 0, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 10, - right_padding = 287, - }, -} - -styles.statsgui_frame_clock = { - type = "frame_style", - parent = "invisible_frame", - horizontal_flow_style = { - type = "horizontal_flow_style", - horizontal_spacing = 20, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 10, - right_padding = 287 + 180, - }, - vertical_flow_style = { - type = "vertical_flow_style", - vertical_spacing = 0, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 50, - right_padding = 287, - }, -} - -styles.statsgui_frame_clock_no_ups = { - type = "frame_style", - parent = "invisible_frame", - horizontal_flow_style = { - type = "horizontal_flow_style", - horizontal_spacing = 20, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 10, - right_padding = 287, - }, - vertical_flow_style = { - type = "vertical_flow_style", - vertical_spacing = 0, - horizontal_align = "right", - horizontally_stretchable = "on", - top_padding = 50, - right_padding = 287, - }, -} diff --git a/StatsGui_1.4.1/info.json b/StatsGui_1.4.1/info.json deleted file mode 100644 index 53b0885d..00000000 --- a/StatsGui_1.4.1/info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "StatsGui", - "version": "1.4.1", - "title": "Stats GUI", - "author": "raiguard", - "contact": "Discord: raiguard#7402", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.24", "flib >= 0.7.0"], - "description": "Displays various statistics, such as biter evolution, playtime, and more. Blends in with the game's FPS/UPS indicator. Similar to EvoGUI.", - "package": { - "git_publish_branch": "main" - } -} diff --git a/StatsGui_1.4.1/locale/en/StatsGui.cfg b/StatsGui_1.4.1/locale/en/StatsGui.cfg deleted file mode 100644 index 98a2b308..00000000 --- a/StatsGui_1.4.1/locale/en/StatsGui.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[mod-setting-name] -statsgui-adjust-for-clock=Adjust for clock -statsgui-adjust-for-fps-ups=Adjust for FPS/UPS indicator -statsgui-show-sensor-daytime=Show daytime -statsgui-show-sensor-evolution=Show evolution -statsgui-show-sensor-playtime=Show playtime -statsgui-show-sensor-pollution=Show nearby pollution -statsgui-show-sensor-position=Show position -statsgui-show-sensor-research=Show estimated remaining research time [img=info] -statsgui-single-line=Single line [img=info] - -[mod-setting-description] -statsgui-show-sensor-research=This is an ESTIMATE ONLY. The number will jump around if science consumption is erratic. -statsgui-single-line=Disable to show the stats in a column under the FPS/UPS indicator. - -[statsgui] -day=day -evolution=Evolution -playtime=Playtime -pollution=Pollution -position=Position -research-finished=Research finished -time=Time diff --git a/StatsGui_1.4.1/scripts/migrations.lua b/StatsGui_1.4.1/scripts/migrations.lua deleted file mode 100644 index b05b275f..00000000 --- a/StatsGui_1.4.1/scripts/migrations.lua +++ /dev/null @@ -1,5 +0,0 @@ -return { - ["1.1.0"] = function() - global.research_progress_strings = {} - end, -} diff --git a/StatsGui_1.4.1/scripts/player-data.lua b/StatsGui_1.4.1/scripts/player-data.lua deleted file mode 100644 index 751fa4ee..00000000 --- a/StatsGui_1.4.1/scripts/player-data.lua +++ /dev/null @@ -1,37 +0,0 @@ -local player_data = {} - -local constants = require("constants") - -local stats_gui = require("scripts.stats-gui") - -function player_data.init(player_index) - global.players[player_index] = { - settings = {}, - } -end - -function player_data.update_settings(player, player_table) - local mod_settings = player.mod_settings - local settings = { - adjust_for_clock = mod_settings["statsgui-adjust-for-clock"].value, - adjust_for_ups = mod_settings["statsgui-adjust-for-fps-ups"].value, - single_line = mod_settings["statsgui-single-line"].value, - } - - for _, sensor_data in pairs(constants.builtin_sensors) do - local sensor_name = sensor_data.name - settings["show_" .. sensor_name] = mod_settings["statsgui-show-sensor-" .. sensor_name].value - end - - player_table.settings = settings -end - -function player_data.refresh(player, player_table) - stats_gui.destroy(player_table) - - player_data.update_settings(player, player_table) - - stats_gui.build(player, player_table) -end - -return player_data diff --git a/StatsGui_1.4.1/scripts/preprocessors.lua b/StatsGui_1.4.1/scripts/preprocessors.lua deleted file mode 100644 index 8307e900..00000000 --- a/StatsGui_1.4.1/scripts/preprocessors.lua +++ /dev/null @@ -1,5 +0,0 @@ -local preprocessors = { - require("scripts.research-progress"), -} - -return preprocessors diff --git a/StatsGui_1.4.1/scripts/research-progress.lua b/StatsGui_1.4.1/scripts/research-progress.lua deleted file mode 100644 index 20c79b91..00000000 --- a/StatsGui_1.4.1/scripts/research-progress.lua +++ /dev/null @@ -1,56 +0,0 @@ -local misc = require("__flib__.misc") - -local constants = require("constants") - --- Code based on "improved research queue" by sonaxaton --- https://github.com/dbeckwith/factorio-research-queue/blob/af6404ab696502a86eec40a4baf7fe00d0c714c7/control.lua#L316 -return function() - local strings = {} - - for _, force in pairs(game.forces) do - local tech = force.current_research - if tech then - -- Retrieve or create progress samples table - local progress_samples = global.research_progress_samples[force.index] - if not progress_samples then - progress_samples = {} - global.research_progress_samples[force.index] = progress_samples - end - progress_samples[#progress_samples + 1] = { tech = tech.name, progress = force.research_progress } - if #progress_samples > constants.research_progress_samples_count then - table.remove(progress_samples, 1) - end - - local estimated_ticks = 0 - local num_samples = 0 - if #progress_samples > 1 then - for i = 2, #progress_samples do - local previous_sample = progress_samples[i - 1] - local current_sample = progress_samples[i] - if previous_sample.tech == current_sample.tech then - -- How much the progress increased per tick - local speed = (current_sample.progress - previous_sample.progress) / 60 - -- Don't add if the speed is negative for whatever reason - if speed > 0 then - -- How many ticks left until the research is finished - estimated_ticks = estimated_ticks + ((1 - current_sample.progress) / speed) - num_samples = num_samples + 1 - end - end - end - -- Rolling average - if num_samples > 0 then - estimated_ticks = estimated_ticks / num_samples - end - end - - if num_samples > 0 then - strings[force.index] = misc.ticks_to_timestring(estimated_ticks) - else - strings[force.index] = "∞" - end - end - end - - global.research_progress_strings = strings -end diff --git a/StatsGui_1.4.1/scripts/sensor/daytime.lua b/StatsGui_1.4.1/scripts/sensor/daytime.lua deleted file mode 100644 index 22126f83..00000000 --- a/StatsGui_1.4.1/scripts/sensor/daytime.lua +++ /dev/null @@ -1,21 +0,0 @@ -return function(player) - if not global.players[player.index].settings.show_daytime then - return - end - - local days = math.floor(1 + ((game.tick + 12500) / 25000)) - - local daytime = player.surface.daytime + 0.5 - local daytime_minutes = math.floor(daytime * 24 * 60) - local daytime_hours = math.floor(daytime_minutes / 60) % 24 - daytime_minutes = daytime_minutes - (daytime_minutes % 15) - - return { - "", - { "statsgui.time" }, - " = " .. string.format("%d:%02d", daytime_hours, daytime_minutes % 60), - ", ", - { "statsgui.day" }, - " " .. days, - } -end diff --git a/StatsGui_1.4.1/scripts/sensor/evolution.lua b/StatsGui_1.4.1/scripts/sensor/evolution.lua deleted file mode 100644 index 16458051..00000000 --- a/StatsGui_1.4.1/scripts/sensor/evolution.lua +++ /dev/null @@ -1,13 +0,0 @@ -return function(player) - if not global.players[player.index].settings.show_evolution then - return - end - - local evolution = game.forces.enemy.evolution_factor * 100 - return { - "", - { "statsgui.evolution" }, - string.format(" = %.2f", evolution), - "%", - } -end diff --git a/StatsGui_1.4.1/scripts/sensor/playtime.lua b/StatsGui_1.4.1/scripts/sensor/playtime.lua deleted file mode 100644 index a9b38333..00000000 --- a/StatsGui_1.4.1/scripts/sensor/playtime.lua +++ /dev/null @@ -1,9 +0,0 @@ -local misc = require("__flib__.misc") - -return function(player) - if not global.players[player.index].settings.show_playtime then - return - end - - return { "", { "statsgui.playtime" }, " = ", misc.ticks_to_timestring(game.ticks_played) } -end diff --git a/StatsGui_1.4.1/scripts/sensor/pollution.lua b/StatsGui_1.4.1/scripts/sensor/pollution.lua deleted file mode 100644 index 75a5945a..00000000 --- a/StatsGui_1.4.1/scripts/sensor/pollution.lua +++ /dev/null @@ -1,12 +0,0 @@ -return function(player) - if not global.players[player.index].settings.show_pollution then - return - end - - return { - "", - { "statsgui.pollution" }, - string.format(" = %.2f", player.surface.get_pollution(player.position)), - " PU", - } -end diff --git a/StatsGui_1.4.1/scripts/sensor/position.lua b/StatsGui_1.4.1/scripts/sensor/position.lua deleted file mode 100644 index 15c3b901..00000000 --- a/StatsGui_1.4.1/scripts/sensor/position.lua +++ /dev/null @@ -1,11 +0,0 @@ -local math = require("__flib__.math") - -return function(player) - if not global.players[player.index].settings.show_position then - return - end - - local position = player.position - - return { "", { "statsgui.position" }, " = ", math.round(position.x), ", ", math.round(position.y) } -end diff --git a/StatsGui_1.4.1/scripts/sensor/research.lua b/StatsGui_1.4.1/scripts/sensor/research.lua deleted file mode 100644 index 423df63b..00000000 --- a/StatsGui_1.4.1/scripts/sensor/research.lua +++ /dev/null @@ -1,10 +0,0 @@ -return function(player) - if not global.players[player.index].settings.show_research then - return - end - - local string = global.research_progress_strings[player.force.index] - if string then - return { "", { "statsgui.research-finished" }, " = ", string } - end -end diff --git a/StatsGui_1.4.1/scripts/sensors.lua b/StatsGui_1.4.1/scripts/sensors.lua deleted file mode 100644 index a56c129a..00000000 --- a/StatsGui_1.4.1/scripts/sensors.lua +++ /dev/null @@ -1,9 +0,0 @@ -local constants = require("constants") - -local sensors = {} - -for _, sensor_data in pairs(constants.builtin_sensors) do - sensors[#sensors + 1] = require("scripts.sensor." .. sensor_data.name) -end - -return sensors diff --git a/StatsGui_1.4.1/scripts/stats-gui.lua b/StatsGui_1.4.1/scripts/stats-gui.lua deleted file mode 100644 index 8c0a7a37..00000000 --- a/StatsGui_1.4.1/scripts/stats-gui.lua +++ /dev/null @@ -1,76 +0,0 @@ -local sensors = require("scripts.sensors") - -local stats_gui = {} - -function stats_gui.build(player, player_table) - local single_line = player_table.settings.single_line - local style = "statsgui_frame" - if player_table.settings.adjust_for_clock then - style = style .. "_clock" - end - if not player_table.settings.adjust_for_ups then - style = style .. "_no_ups" - end - - local window = player.gui.screen.add({ - type = "frame", - style = style, - direction = single_line and "horizontal" or "vertical", - ignored_by_interaction = true, - }) - - player_table.stats_window = window - - stats_gui.set_width(player, player_table) - stats_gui.update(player, player_table) -end - -function stats_gui.destroy(player_table) - local stats_window = player_table.stats_window - if stats_window and stats_window.valid then - stats_window.destroy() - player_table.stats_window = nil - end -end - -function stats_gui.update(player, player_table) - local window = player_table.stats_window - if not window or not window.valid then - stats_gui.build(player, player_table) - window = player_table.stats_window - end - local children = window.children - - local i = 0 - for _, sensor in pairs(sensors) do - local caption = sensor(player) - if caption then - i = i + 1 - local label = children[i] - if label then - label.caption = caption - else - window.add({ - type = "label", - style = "statsgui_label", - caption = caption, - }) - end - end - end - -- remove extra children - for j = i + 1, #children do - children[j].destroy() - end -end - -function stats_gui.set_width(player, player_table) - local window = player_table.stats_window - if not window or not window.valid then - stats_gui.build(player, player_table) - window = player_table.stats_window - end - window.style.width = (player.display_resolution.width / player.display_scale) -end - -return stats_gui diff --git a/StatsGui_1.4.1/settings.lua b/StatsGui_1.4.1/settings.lua deleted file mode 100644 index aa8871d1..00000000 --- a/StatsGui_1.4.1/settings.lua +++ /dev/null @@ -1,37 +0,0 @@ -local constants = require("constants") - -data:extend({ - { - type = "bool-setting", - name = "statsgui-single-line", - setting_type = "runtime-per-user", - default_value = true, - order = "aa", - }, - { - type = "bool-setting", - name = "statsgui-adjust-for-fps-ups", - setting_type = "runtime-per-user", - default_value = true, - order = "ab", - }, - { - type = "bool-setting", - name = "statsgui-adjust-for-clock", - setting_type = "runtime-per-user", - default_value = false, - order = "ac", - }, -}) - -for _, sensor_data in pairs(constants.builtin_sensors) do - data:extend({ - { - type = "bool-setting", - name = "statsgui-show-sensor-" .. sensor_data.name, - setting_type = "runtime-per-user", - default_value = sensor_data.enabled, - order = sensor_data.order, - }, - }) -end diff --git a/StatsGui_1.4.1/thumbnail.png b/StatsGui_1.4.1/thumbnail.png deleted file mode 100644 index fd8b3234..00000000 Binary files a/StatsGui_1.4.1/thumbnail.png and /dev/null differ diff --git a/Subterranean_0.5.3/README.md b/Subterranean/README.md similarity index 100% rename from Subterranean_0.5.3/README.md rename to Subterranean/README.md diff --git a/Subterranean_0.5.3/control.lua b/Subterranean/control.lua similarity index 100% rename from Subterranean_0.5.3/control.lua rename to Subterranean/control.lua diff --git a/Subterranean_0.5.3/data-updates.lua b/Subterranean/data-updates.lua similarity index 100% rename from Subterranean_0.5.3/data-updates.lua rename to Subterranean/data-updates.lua diff --git a/Subterranean_0.5.3/data.lua b/Subterranean/data.lua similarity index 100% rename from Subterranean_0.5.3/data.lua rename to Subterranean/data.lua diff --git a/Subterranean_0.5.3/graphics/icons/express-underground-belt.png b/Subterranean/graphics/icons/express-underground-belt.png similarity index 100% rename from Subterranean_0.5.3/graphics/icons/express-underground-belt.png rename to Subterranean/graphics/icons/express-underground-belt.png diff --git a/Subterranean_0.5.3/graphics/icons/fast-underground-belt.png b/Subterranean/graphics/icons/fast-underground-belt.png similarity index 100% rename from Subterranean_0.5.3/graphics/icons/fast-underground-belt.png rename to Subterranean/graphics/icons/fast-underground-belt.png diff --git a/Subterranean_0.5.3/graphics/icons/pipe-to-ground.png b/Subterranean/graphics/icons/pipe-to-ground.png similarity index 100% rename from Subterranean_0.5.3/graphics/icons/pipe-to-ground.png rename to Subterranean/graphics/icons/pipe-to-ground.png diff --git a/Subterranean_0.5.3/graphics/icons/underground-belt.png b/Subterranean/graphics/icons/underground-belt.png similarity index 100% rename from Subterranean_0.5.3/graphics/icons/underground-belt.png rename to Subterranean/graphics/icons/underground-belt.png diff --git a/Subterranean_0.5.3/graphics/technology/liquid-logistics.png b/Subterranean/graphics/technology/liquid-logistics.png similarity index 100% rename from Subterranean_0.5.3/graphics/technology/liquid-logistics.png rename to Subterranean/graphics/technology/liquid-logistics.png diff --git a/Subterranean_0.5.3/graphics/technology/logistics.png b/Subterranean/graphics/technology/logistics.png similarity index 100% rename from Subterranean_0.5.3/graphics/technology/logistics.png rename to Subterranean/graphics/technology/logistics.png diff --git a/Subterranean_0.5.3/info.json b/Subterranean/info.json similarity index 100% rename from Subterranean_0.5.3/info.json rename to Subterranean/info.json diff --git a/Subterranean_0.5.3/locale/en/locale.cfg b/Subterranean/locale/en/locale.cfg similarity index 100% rename from Subterranean_0.5.3/locale/en/locale.cfg rename to Subterranean/locale/en/locale.cfg diff --git a/Subterranean_0.5.3/locale/ru/locale.cfg b/Subterranean/locale/ru/locale.cfg similarity index 100% rename from Subterranean_0.5.3/locale/ru/locale.cfg rename to Subterranean/locale/ru/locale.cfg diff --git a/Subterranean_0.5.3/prototypes/entity.lua b/Subterranean/prototypes/entity.lua similarity index 100% rename from Subterranean_0.5.3/prototypes/entity.lua rename to Subterranean/prototypes/entity.lua diff --git a/Subterranean_0.5.3/prototypes/item.lua b/Subterranean/prototypes/item.lua similarity index 100% rename from Subterranean_0.5.3/prototypes/item.lua rename to Subterranean/prototypes/item.lua diff --git a/Subterranean_0.5.3/prototypes/recipe.lua b/Subterranean/prototypes/recipe.lua similarity index 100% rename from Subterranean_0.5.3/prototypes/recipe.lua rename to Subterranean/prototypes/recipe.lua diff --git a/Subterranean_0.5.3/prototypes/technology.lua b/Subterranean/prototypes/technology.lua similarity index 100% rename from Subterranean_0.5.3/prototypes/technology.lua rename to Subterranean/prototypes/technology.lua diff --git a/Subterranean_0.5.3/settings.lua b/Subterranean/settings.lua similarity index 100% rename from Subterranean_0.5.3/settings.lua rename to Subterranean/settings.lua diff --git a/Subterranean_0.5.3/thumbnail.png b/Subterranean/thumbnail.png similarity index 100% rename from Subterranean_0.5.3/thumbnail.png rename to Subterranean/thumbnail.png diff --git a/Texugo_windgenerator_9.17.0/changelog.txt b/Texugo_windgenerator/changelog.txt similarity index 100% rename from Texugo_windgenerator_9.17.0/changelog.txt rename to Texugo_windgenerator/changelog.txt diff --git a/Texugo_windgenerator_9.17.0/control.lua b/Texugo_windgenerator/control.lua similarity index 100% rename from Texugo_windgenerator_9.17.0/control.lua rename to Texugo_windgenerator/control.lua diff --git a/Texugo_windgenerator_9.17.0/data-updates.lua b/Texugo_windgenerator/data-updates.lua similarity index 100% rename from Texugo_windgenerator_9.17.0/data-updates.lua rename to Texugo_windgenerator/data-updates.lua diff --git a/Texugo_windgenerator_9.17.0/data.lua b/Texugo_windgenerator/data.lua similarity index 100% rename from Texugo_windgenerator_9.17.0/data.lua rename to Texugo_windgenerator/data.lua diff --git a/Texugo_windgenerator_9.17.0/graphics/nothing.png b/Texugo_windgenerator/graphics/nothing.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/nothing.png rename to Texugo_windgenerator/graphics/nothing.png diff --git a/Texugo_windgenerator_9.17.0/graphics/wind1.png b/Texugo_windgenerator/graphics/wind1.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/wind1.png rename to Texugo_windgenerator/graphics/wind1.png diff --git a/Texugo_windgenerator_9.17.0/graphics/wind2.png b/Texugo_windgenerator/graphics/wind2.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/wind2.png rename to Texugo_windgenerator/graphics/wind2.png diff --git a/Texugo_windgenerator_9.17.0/graphics/wind3.png b/Texugo_windgenerator/graphics/wind3.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/wind3.png rename to Texugo_windgenerator/graphics/wind3.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh1.png b/Texugo_windgenerator/graphics/windh1.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh1.png rename to Texugo_windgenerator/graphics/windh1.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh2.png b/Texugo_windgenerator/graphics/windh2.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh2.png rename to Texugo_windgenerator/graphics/windh2.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh3.png b/Texugo_windgenerator/graphics/windh3.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh3.png rename to Texugo_windgenerator/graphics/windh3.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh4.png b/Texugo_windgenerator/graphics/windh4.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh4.png rename to Texugo_windgenerator/graphics/windh4.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh5.png b/Texugo_windgenerator/graphics/windh5.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh5.png rename to Texugo_windgenerator/graphics/windh5.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh6.png b/Texugo_windgenerator/graphics/windh6.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh6.png rename to Texugo_windgenerator/graphics/windh6.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh7.png b/Texugo_windgenerator/graphics/windh7.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh7.png rename to Texugo_windgenerator/graphics/windh7.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh8.png b/Texugo_windgenerator/graphics/windh8.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh8.png rename to Texugo_windgenerator/graphics/windh8.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh_icon.png b/Texugo_windgenerator/graphics/windh_icon.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh_icon.png rename to Texugo_windgenerator/graphics/windh_icon.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windh_tec.png b/Texugo_windgenerator/graphics/windh_tec.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windh_tec.png rename to Texugo_windgenerator/graphics/windh_tec.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds1.png b/Texugo_windgenerator/graphics/winds1.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds1.png rename to Texugo_windgenerator/graphics/winds1.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds2.png b/Texugo_windgenerator/graphics/winds2.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds2.png rename to Texugo_windgenerator/graphics/winds2.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds3.png b/Texugo_windgenerator/graphics/winds3.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds3.png rename to Texugo_windgenerator/graphics/winds3.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds4.png b/Texugo_windgenerator/graphics/winds4.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds4.png rename to Texugo_windgenerator/graphics/winds4.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds_icon.png b/Texugo_windgenerator/graphics/winds_icon.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds_icon.png rename to Texugo_windgenerator/graphics/winds_icon.png diff --git a/Texugo_windgenerator_9.17.0/graphics/winds_tec.png b/Texugo_windgenerator/graphics/winds_tec.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/winds_tec.png rename to Texugo_windgenerator/graphics/winds_tec.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windw_icon.png b/Texugo_windgenerator/graphics/windw_icon.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windw_icon.png rename to Texugo_windgenerator/graphics/windw_icon.png diff --git a/Texugo_windgenerator_9.17.0/graphics/windw_tec.png b/Texugo_windgenerator/graphics/windw_tec.png similarity index 100% rename from Texugo_windgenerator_9.17.0/graphics/windw_tec.png rename to Texugo_windgenerator/graphics/windw_tec.png diff --git a/Texugo_windgenerator_9.17.0/info.json b/Texugo_windgenerator/info.json similarity index 100% rename from Texugo_windgenerator_9.17.0/info.json rename to Texugo_windgenerator/info.json diff --git a/Texugo_windgenerator_9.17.0/locale/en/locale.cfg b/Texugo_windgenerator/locale/en/locale.cfg similarity index 100% rename from Texugo_windgenerator_9.17.0/locale/en/locale.cfg rename to Texugo_windgenerator/locale/en/locale.cfg diff --git a/Texugo_windgenerator_9.17.0/locale/ru/locale.cfg b/Texugo_windgenerator/locale/ru/locale.cfg similarity index 100% rename from Texugo_windgenerator_9.17.0/locale/ru/locale.cfg rename to Texugo_windgenerator/locale/ru/locale.cfg diff --git a/Texugo_windgenerator_9.17.0/settings.lua b/Texugo_windgenerator/settings.lua similarity index 100% rename from Texugo_windgenerator_9.17.0/settings.lua rename to Texugo_windgenerator/settings.lua diff --git a/Texugo_windgenerator_9.17.0/thumbnail.png b/Texugo_windgenerator/thumbnail.png similarity index 100% rename from Texugo_windgenerator_9.17.0/thumbnail.png rename to Texugo_windgenerator/thumbnail.png diff --git a/Texugo_windgenerator_9.17.0/wind/wind.lua b/Texugo_windgenerator/wind/wind.lua similarity index 100% rename from Texugo_windgenerator_9.17.0/wind/wind.lua rename to Texugo_windgenerator/wind/wind.lua diff --git a/TimeTools/LICENSE.txt b/TimeTools/LICENSE.txt new file mode 100644 index 00000000..e9d49386 --- /dev/null +++ b/TimeTools/LICENSE.txt @@ -0,0 +1,18 @@ +License BinbinHfr v2.0 +-------------------------------------------------------------------------------------------------- +Mod created by BinbinHfr (you can contact me on the Factorio forum) +-------------------------------------------------------------------------------------------------- +License : +- you are free to use this mod with Factorio. +- you are free to distribute this mod as long as this license and the mod package are kept intact. +- you are free to talk about this mod in any form (articles, forums, podcasts, videos, etc.). + +- you cannot modify this mod without my explicit permission (except for strict personal use). +- if you modify this mod, you cannot distribute the modified version nor release it to the public. + +- in case this mod seems abandonned and not maintained anymore, and if I do not respond on the + Factorio forum mod's thread, you can then choose to maintain this mod, modify it and distribute + it under a separate release, giving clear credits to the original author. + +- this mod is provided "as is" and without any warranty. +-------------------------------------------------------------------------------------------------- diff --git a/TimeTools/changelog.txt b/TimeTools/changelog.txt new file mode 100644 index 00000000..7d3e8808 --- /dev/null +++ b/TimeTools/changelog.txt @@ -0,0 +1,177 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 + Changes: + - Initial release with a simple Time Bar. +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 + Changes: + - Introduces Clock Combinator and time freeze, new buttons. Adds multiplayer compatibility. +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 + Changes: + - Adds locale for german (thanks to Apcnc) and french (my own language). +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 + Changes: + - Change remote interface to set current day and current clock separately. +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 + Changes: + - Improves multiplayer compatibility. Add a reset to the interface. +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 + Changes: + - Improves multiplayer compatibility when config changes. +--------------------------------------------------------------------------------------------------- +Version: 1.0.6 + Changes: + - Memorize last speed for quick speed switching. Release stress on Combinator Clock refresh. +--------------------------------------------------------------------------------------------------- +Version: 1.0.7 + Changes: + - No more limitation for the clock combinator to be in a logistic network. Can be placed and works everywhere. +--------------------------------------------------------------------------------------------------- +Version: 1.0.9 + Changes: + - Update always_day if changed by another mod. Add interface frozen. +--------------------------------------------------------------------------------------------------- +Version: 1.0.11 + Changes: + - Improved gui refresh. Reduced size in the top bar. +--------------------------------------------------------------------------------------------------- +Version: 1.0.12 + Changes: + - 0.13 compatible (combinator does not work for the moment). rework of initialisation routines. Custom license. New way to approximate day in alwaysday mode. +--------------------------------------------------------------------------------------------------- +Version: 1.0.13 + Changes: + - (coming next...) clock combinator fix. +--------------------------------------------------------------------------------------------------- +Version: 1.0.14 + Changes: + - minor fixes +--------------------------------------------------------------------------------------------------- +Version: 1.0.15 + Changes: + - normalize code to new binbinhfr basic structure, and fix a campaign incompatibility. +--------------------------------------------------------------------------------------------------- +Version: 1.0.16 + Changes: + - add some migrations (destroy and rebuild bar before 1.0.16), and event player_join +--------------------------------------------------------------------------------------------------- +Version: 1.0.17 + Changes: + - simplify gui, integrate sprite buttons +--------------------------------------------------------------------------------------------------- +Version: 1.0.18 + Changes: + - better init of global.day when load existing map +--------------------------------------------------------------------------------------------------- +Version: 1.0.19 + Changes: + - correct pb of bad alwaysday icon init on brand new map. +--------------------------------------------------------------------------------------------------- +Version: 1.0.20 + Changes: + - interface allows enable/disable display of clock. + - /c remote.call( "timetools", "on" ) + - /c remote.call( "timetools", "off" ) +--------------------------------------------------------------------------------------------------- +Version: 1.0.21 + Changes: + - corrects a migration version compare mistake +--------------------------------------------------------------------------------------------------- +Version: 1.0.22 + Changes: + - problem with day icon not correctly initialised in MP, and also time color. +--------------------------------------------------------------------------------------------------- +Version: 1.0.23 + Changes: + - change right arrow position to avoid missclick when goinf from x8 to x16 and reverse +--------------------------------------------------------------------------------------------------- +Version: 1.0.24 + Changes: + - when always_day, display an approximation of hour/minute, using game.tick +--------------------------------------------------------------------------------------------------- +Version: 1.0.25 + Changes: + - better init forces when installing on existing game. +--------------------------------------------------------------------------------------------------- +Version: 1.0.26 + Changes: + - factorio 0.14 compatible +--------------------------------------------------------------------------------------------------- +Version: 1.0.27 + Changes: + - adds an "always_day_enabled" option. +--------------------------------------------------------------------------------------------------- +Version: 1.0.28 + Changes: + - factorio 0.15 compatible +--------------------------------------------------------------------------------------------------- +Version: 1.0.29 + Changes: + - correction : surface.freeze_daytime is now a boolean... +--------------------------------------------------------------------------------------------------- +Version: 1.0.32 + Changes: + - factorio 0.17 compatible +--------------------------------------------------------------------------------------------------- +Version: 1.0.33 + Changes: + - fixed naming +--------------------------------------------------------------------------------------------------- +Version: 1.0.34 + Changes: + - continuation of original TimeTools +--------------------------------------------------------------------------------------------------- +Version: 1.0.35 + Changes: + - moved config to be settings per map instead +--------------------------------------------------------------------------------------------------- +Version: 1.0.36 + Changes: + - Fixed Gui to be more in-line to previous factorio versions +--------------------------------------------------------------------------------------------------- +Version: 1.18.37 + Changes: + - Only admins may change time +--------------------------------------------------------------------------------------------------- +Version: 1.18.38 +Date: 19. 07. 2020 + Translation: + - Russian translation done by TheLastEagle + Changes: + - Added changelog.txt +--------------------------------------------------------------------------------------------------- +Version: 1.18.39 +Date: 19. 07. 2020 + Bugfixes: + - Minor issue with new format_time() function +--------------------------------------------------------------------------------------------------- +Version: 2.0.40 +Date: 23. 08. 2020 + Changes: + - Unified the branches + Bugfixes: + - Fixed bug where admin check was launched for buttons it shouldn't +--------------------------------------------------------------------------------------------------- +Version: 2.0.41 +Date: 23. 08. 2020 + Bugfixes: + - Fixed migration fault and added defensive code to force rebuild +--------------------------------------------------------------------------------------------------- +Version: 2.1.42 +Date: 25. 11. 2020 + Changes: + - Updated to 1.1.0 version of factorio +--------------------------------------------------------------------------------------------------- +Version: 2.1.43 +Date: 29. 11. 2020 + Changes: + - New interface to set time compression eg. /c remote.call( "timetools", "setspeed", 2 ) +--------------------------------------------------------------------------------------------------- +Version: 2.1.44 +Date: 16. 04. 2022 + Changes: + - New Chinese translation by mlzxgzy \ No newline at end of file diff --git a/TimeTools/control.lua b/TimeTools/control.lua new file mode 100644 index 00000000..5c41f924 --- /dev/null +++ b/TimeTools/control.lua @@ -0,0 +1,495 @@ +--debug_status = 1 +debug_mod_name = "TimeTools" +debug_file = debug_mod_name .. "-debug.txt" +require("utils") +--require("config") + +local ticks_per_day = 25000 + +-------------------------------------------------------------------------------------- +local function init_day() + global.day = 1 + math.floor((game.tick+(ticks_per_day/2)) / ticks_per_day) +end + +-------------------------------------------------------------------------------------- +local function get_time() + -- daytime : 0.0 to 1.0, noon to noon (midnight at 0.5), max light to min light to max light... + -- game starts at daytime = 0, so noon of day 1. + + local daytime + local always_day = global.surface.always_day or 0 + + if global.always_day ~= always_day then + global.refresh_always_day = true + end + + if always_day then + daytime = game.tick / ticks_per_day + daytime = daytime - math.floor(daytime) + else + if global.always_day == true then + daytime = ((global.h + 12) + (global.m / 60)) / 24 + global.surface.daytime = daytime - math.floor(daytime) + end + daytime = global.surface.daytime + end + + daytime = (daytime*24+12) % 24 + global.h = math.floor(daytime) + global.m = math.floor((daytime-global.h)*60) + -- day calculation independant of hour + global.day = math.floor((game.tick+(ticks_per_day/2)) / ticks_per_day) + 1 + + global.always_day = always_day + global.h_prev = global.h +end + +-------------------------------------------------------------------------------------- +local function init_globals() + -- initialize or update general globals of the mod + debug_print( "init_globals" ) + + global.ticks = global.ticks or 0 + global.cycles = global.cycles or 0 + global.surface = game.surfaces.nauvis + + if global.offset == nil then global.offset = 0 end + if global.h == nil then global.h = 12 end + if global.m == nil then global.m = 0 end + global.h_prev = global.h_prev or 23 + global.always_day = global.always_day or -1 -- -1 to force update of the icon at first install + global.refresh_always_day = true + + if not settings.global["timetools-always-day"].value then global.surface.always_day = false end + + if global.day == nil then + init_day() + get_time() + end + + if global.frozen == nil then global.frozen = false end + if global.display == nil then global.display = true end + global.clocks = global.clocks or {} + + global.speed_mem = global.speed_mem or settings.global["timetools-maximum-speed"].value +end + +-------------------------------------------------------------------------------------- +local function init_player(player) + if global.ticks == nil then return end + + -- initialize or update per player globals of the mod, and reset the gui + debug_print( "init_player ", player.name, " connected=", player.connected ) + + if player.connected then + build_gui(player) + end +end + +-------------------------------------------------------------------------------------- +local function init_players() + for _, player in pairs(game.players) do + init_player(player) + end +end + +-------------------------------------------------------------------------------------- +local function init_forces() + for _,force in pairs(game.forces) do + force.recipes["clock-combinator"].enabled = force.technologies["circuit-network"].researched + end +end + +-------------------------------------------------------------------------------------- +local function on_init() + -- called once, the first time the mod is loaded on a game (new or existing game) + debug_print( "on_init" ) + init_globals() + init_forces() + init_players() +end + +script.on_init(on_init) + +-------------------------------------------------------------------------------------- +local function on_configuration_changed(data) + -- detect any mod or game version change + if data.mod_changes ~= nil then + local changes = data.mod_changes[debug_mod_name] + if changes ~= nil then + debug_print( "update mod: ", debug_mod_name, " ", tostring(changes.old_version), " to ", tostring(changes.new_version) ) + + init_globals() + + global.always_day = -1 -- to force update of icon + + init_forces() + + -- migrations + for _, player in pairs(game.players) do + if player.gui.top.timebar_frame then player.gui.top.timebar_frame.destroy() end -- destroy old bar + end + if changes.old_version ~= nil and older_version(changes.old_version, "1.0.18") then + init_day() + end + if changes.old_version ~= nil and older_version(changes.old_version, "1.0.34") then + for _, player in pairs(game.players) do + if player.gui.top.timetools_flow then player.gui.top.timetools_flow.destroy() end -- rebuild bar + end + end + if changes.old_version ~= nil and older_version(changes.old_version, "2.0.41") then + for _, player in pairs(game.players) do + if player.gui.top.timetools_flow then player.gui.top.timetools_flow.destroy() end -- rebuild bar + end + end + init_players() + + update_guis() + end + end +end + +script.on_configuration_changed(on_configuration_changed) + +-------------------------------------------------------------------------------------- +local function on_player_created(event) + -- called at player creation + local player = game.players[event.player_index] + debug_print( "player created ", player.name ) + + init_player(player) +end + +script.on_event(defines.events.on_player_created, on_player_created ) + +-------------------------------------------------------------------------------------- +local function on_player_joined_game(event) + -- called in SP(once) and MP(every connect), eventually after on_player_created + local player = game.players[event.player_index] + debug_print( "player joined ", player.name ) + + init_player(player) +end + +script.on_event(defines.events.on_player_joined_game, on_player_joined_game ) + +-------------------------------------------------------------------------------------- +local function on_creation( event ) + local ent = event.created_entity + + if ent.name == "clock-combinator" then + debug_print( "clock-combinator created" ) + + table.insert( global.clocks, + { + entity = ent, + } + ) + + debug_print( "clocks=" .. #global.clocks ) + end +end + +script.on_event(defines.events.on_built_entity, on_creation ) +script.on_event(defines.events.on_robot_built_entity, on_creation ) + +-------------------------------------------------------------------------------------- +local function on_destruction( event ) + local ent = event.entity + + if ent.name == "clock-combinator" then + debug_print( "clock-combinator destroyed" ) + + for i, clock in ipairs(global.clocks) do + if clock.entity == ent then + table.remove( global.clocks, i ) + break + end + end + + debug_print( "clocks=" .. #global.clocks ) + end +end + +script.on_event(defines.events.on_entity_died, on_destruction ) +script.on_event(defines.events.on_robot_pre_mined, on_destruction ) +script.on_event(defines.events.on_pre_player_mined_item, on_destruction ) + +-------------------------------------------------------------------------------------- +local function format_time() + local sTime = "" + sTime = string.format("%u-%02u:%02u", global.day, global.h, global.m ) + return sTime +end + +local function on_tick(event) + if global.speed_mem > settings.global["timetools-maximum-speed"].value then + -- User changed the speed mid acceleration or on the fly + global.speed_mem = settings.global["timetools-maximum-speed"].value + if game.speed > global.speed_mem then + game.speed = global.speed_mem + update_guis() + end + end + if (game.tick % settings.global["timetools-clock-update-interval"].value) == 0 then + get_time() + + -- update time display on button + + if global.display then + local s_time = format_time() + local flow + + for _, player in pairs(game.players) do + if player.connected and player.gui.top.timetools_flow then + flow = player.gui.top.timetools_flow + if flow.timetools_but_time == nil or (debug_status and flow.timetools_but_tick == nil) then + flow.destroy() + init_player(player) + update_guis() + flow = player.gui.top.timetools_flow -- re-assign + end + flow.timetools_but_time.caption = s_time + + if global.refresh_always_day then + if global.surface.always_day then + flow.timetools_but_always.sprite = "sprite_timetools_alwday" + else + flow.timetools_but_always.sprite = "sprite_timetools_night" + end + end + if debug_status then + flow.timetools_but_tick.caption = game.tick + end + end + end + + global.refresh_always_day = false + end + end + if (game.tick % settings.global["timetools-combinator-interval"].value) == 0 then + for i, clock in pairs(global.clocks) do + if clock.entity.valid then + params = { + {index=1,signal={type="virtual",name="signal-clock-gametick"},count=math.floor(game.tick)}, + {index=2,signal={type="virtual",name="signal-clock-day"},count=global.day}, + {index=3,signal={type="virtual",name="signal-clock-hour"},count=global.h}, + {index=4,signal={type="virtual",name="signal-clock-minute"},count=global.m}, + {index=5,signal={type="virtual",name="signal-clock-alwaysday"},count=iif(global.surface.always_day,1,0)}, + {index=6,signal={type="virtual",name="signal-clock-darkness"},count=math.floor(global.surface.darkness*100)}, + {index=7,signal={type="virtual",name="signal-clock-lightness"},count=math.floor((1-global.surface.darkness)*100)}, + } + clock.entity.get_control_behavior().parameters = params + else + table.remove(global.clocks,i) + end + end + end +end + +script.on_event(defines.events.on_tick, on_tick) + +-------------------------------------------------------------------------------------- +local function on_gui_click(event) + local player = game.players[event.player_index] + if string.match(event.element.name, "timetools_") == nil then + -- not for us + return + end + if player.admin then + if event.element.name == "timetools_but_time" then + if not global.surface.always_day then + global.frozen = not global.frozen + global.surface.freeze_daytime = global.frozen + update_guis() + end + + elseif event.element.name == "timetools_but_always" then + if settings.global["timetools-always-day"].value then + global.surface.always_day = not global.surface.always_day + + if global.surface.always_day then + global.frozen = false + end + end + update_guis() + + elseif event.element.name == "timetools_but_slower" then + if game.speed >= 0.2 then game.speed = game.speed / 2 end -- minimum 0.1 + if game.speed ~= 1 then global.speed_mem = game.speed end + update_guis() + + elseif event.element.name == "timetools_but_faster" then + if game.speed < settings.global["timetools-maximum-speed"].value then game.speed = game.speed * 2 end + if game.speed ~= 1 then global.speed_mem = game.speed end + update_guis() + + elseif event.element.name == "timetools_but_speed" then + if game.speed == 1 then game.speed = global.speed_mem else game.speed = 1 end + update_guis() + end + else + player.print({"mod-messages.timetools-message-admins-only"}) + end +end + +script.on_event(defines.events.on_gui_click, on_gui_click ) + +-------------------------------------------------------------------------------------- +function build_gui( player ) + local gui1 = player.gui.top.timetools_flow + + if gui1 == nil and global.display then + debug_print("create frame player" .. player.name) + gui1 = player.gui.top.add({type = "flow", name = "timetools_flow", direction = "horizontal", style = "timetools_flow_style"}) + local gui2 = gui1.add({type = "button", name = "timetools_but_time", caption = "0-00:00", font_color = colors.white, style = "timetools_botton_time_style"}) + if global.frozen then + gui2.style.font_color = colors.lightred + else + gui2.style.font_color = colors.green + end + gui2 = gui1.add({type = "sprite-button", name = "timetools_but_always", style = "timetools_sprite_style"}) + if global.surface.always_day then + gui2.sprite = "sprite_timetools_alwday" + else + gui2.sprite = "sprite_timetools_night" + end + gui1.add({type = "button", name = "timetools_but_slower", caption = "<" , font_color = colors.white, style = "timetools_button_style"}) + gui1.add({type = "button", name = "timetools_but_faster", caption = ">" , font_color = colors.white, style = "timetools_button_style"}) + gui1.add({type = "button", name = "timetools_but_speed", caption = "x1" , font_color = colors.white, style = "timetools_button_style"}) + if debug_status then + gui1.add({type = "button", name = "timetools_but_tick", caption = "0" , font_color = colors.white, style = "timetools_button_style"}) + end + end + return( gui1 ) +end + +-------------------------------------------------------------------------------------- +function update_guis() + if global.display then + for _, player in pairs(game.players) do + if player.connected then + local flow = build_gui(player) + local s + + if game.speed == 1 then + flow.timetools_but_speed.caption = "x1" + flow.timetools_but_speed.style.font_color = colors.white + elseif game.speed < 1 then + s = string.format("/%1.0f", 1/game.speed ) + flow.timetools_but_speed.caption = s + flow.timetools_but_speed.style.font_color = colors.green + elseif game.speed > 1 then + s = string.format("x%1.0f", game.speed ) + flow.timetools_but_speed.caption = s + flow.timetools_but_speed.style.font_color = colors.lightred + end + + if global.surface.always_day then + flow.timetools_but_always.sprite = "sprite_timetools_alwday" + else + flow.timetools_but_always.sprite = "sprite_timetools_night" + end + + if global.frozen then + flow.timetools_but_time.style.font_color = colors.lightred + else + flow.timetools_but_time.style.font_color = colors.green + end + end + end + end +end + +-------------------------------------------------------------------------------------- + +local interface = {} + +function interface.reset() + debug_print( "reset" ) + + init_day() + + for _,force in pairs(game.forces) do + force.reset_recipes() + force.reset_technologies() + end + + for _, player in pairs(game.players) do + if player.gui.top.timetools_flow then + player.gui.top.timetools_flow.destroy() + end + end + + update_guis() +end + +function interface.setclock( hhmm ) + debug_print( "setclock" ) + + if hhmm == nil then hhmm = 0 end + if hhmm < 0 then hhmm = 0 end + if hhmm >= 24 then hhmm = 23.59 end + + local mm = (hhmm - math.floor(hhmm)) * 100 + local hh = math.floor(hhmm) + + if mm >= 60 then mm = 59 end + + global.surface.always_day = false + global.surface.daytime = math.min((((hh+12)%24) * 60 + mm) / 24 / 60,1) + global.frozen = false + global.h = hh + global.m = mm + + update_guis() +end + +function interface.setspeed(speed) + debug_print( "set time" ) + if speed == nil then speed = 1 end + speed = math.floor(speed) -- ensure integer + if speed < 1 then speed = 1 end + if speed > settings.global["timetools-maximum-speed"].value then + speed = settings.global["timetools-maximum-speed"].value + end + global.speed = speed + update_guis() +end + +function interface.setfrozen( frozen ) + debug_print( "frozen" ) + + global.frozen = frozen + + update_guis() +end + +function interface.off( ) + debug_print( "off" ) + + global.display = false + + for _, player in pairs(game.players) do + if player.connected and player.gui.top.timetools_flow then player.gui.top.timetools_flow.destroy() end + end +end + +function interface.on( ) + debug_print( "on" ) + + global.display = true + + update_guis() +end + + +remote.add_interface( "timetools", interface ) + +-- /c remote.call( "timetools", "setclock", 20.15 ) +-- /c remote.call( "timetools", "reset" ) +-- /c remote.call( "timetools", "on" ) +-- /c remote.call( "timetools", "off" ) +-- /c remote.call( "timetools", "setfrozen", true ) +-- /c remote.call( "timetools", "setspeed", 2 ) + diff --git a/TimeTools/data.lua b/TimeTools/data.lua new file mode 100644 index 00000000..a02c3f73 --- /dev/null +++ b/TimeTools/data.lua @@ -0,0 +1,7 @@ +require("utils") +require("prototypes.styles") +require("prototypes.signals") +require("prototypes.entities") +require("prototypes.items") +require("prototypes.recipies") + diff --git a/TimeTools/graphics/but-alwday.png b/TimeTools/graphics/but-alwday.png new file mode 100644 index 00000000..f19ea755 Binary files /dev/null and b/TimeTools/graphics/but-alwday.png differ diff --git a/TimeTools/graphics/but-night.png b/TimeTools/graphics/but-night.png new file mode 100644 index 00000000..c22e3499 Binary files /dev/null and b/TimeTools/graphics/but-night.png differ diff --git a/TimeTools/graphics/clock-combinator-icon.png b/TimeTools/graphics/clock-combinator-icon.png new file mode 100644 index 00000000..3d9444d2 Binary files /dev/null and b/TimeTools/graphics/clock-combinator-icon.png differ diff --git a/TimeTools/graphics/clock-combinator.png b/TimeTools/graphics/clock-combinator.png new file mode 100644 index 00000000..9d1d5a94 Binary files /dev/null and b/TimeTools/graphics/clock-combinator.png differ diff --git a/TimeTools/graphics/gui.png b/TimeTools/graphics/gui.png new file mode 100644 index 00000000..1503219d Binary files /dev/null and b/TimeTools/graphics/gui.png differ diff --git a/TimeTools/graphics/signal-clock-alwaysday.png b/TimeTools/graphics/signal-clock-alwaysday.png new file mode 100644 index 00000000..7a5305b5 Binary files /dev/null and b/TimeTools/graphics/signal-clock-alwaysday.png differ diff --git a/TimeTools/graphics/signal-clock-darkness.png b/TimeTools/graphics/signal-clock-darkness.png new file mode 100644 index 00000000..3c92eb77 Binary files /dev/null and b/TimeTools/graphics/signal-clock-darkness.png differ diff --git a/TimeTools/graphics/signal-clock-day.png b/TimeTools/graphics/signal-clock-day.png new file mode 100644 index 00000000..b86be09b Binary files /dev/null and b/TimeTools/graphics/signal-clock-day.png differ diff --git a/TimeTools/graphics/signal-clock-gametick.png b/TimeTools/graphics/signal-clock-gametick.png new file mode 100644 index 00000000..b633f7ed Binary files /dev/null and b/TimeTools/graphics/signal-clock-gametick.png differ diff --git a/TimeTools/graphics/signal-clock-hour.png b/TimeTools/graphics/signal-clock-hour.png new file mode 100644 index 00000000..cea253df Binary files /dev/null and b/TimeTools/graphics/signal-clock-hour.png differ diff --git a/TimeTools/graphics/signal-clock-lightness.png b/TimeTools/graphics/signal-clock-lightness.png new file mode 100644 index 00000000..7cff2380 Binary files /dev/null and b/TimeTools/graphics/signal-clock-lightness.png differ diff --git a/TimeTools/graphics/signal-clock-minute.png b/TimeTools/graphics/signal-clock-minute.png new file mode 100644 index 00000000..540ef3fc Binary files /dev/null and b/TimeTools/graphics/signal-clock-minute.png differ diff --git a/TimeTools/graphics/signal-gametick.png b/TimeTools/graphics/signal-gametick.png new file mode 100644 index 00000000..b633f7ed Binary files /dev/null and b/TimeTools/graphics/signal-gametick.png differ diff --git a/TimeTools/info.json b/TimeTools/info.json new file mode 100644 index 00000000..59f57497 --- /dev/null +++ b/TimeTools/info.json @@ -0,0 +1,10 @@ +{ + "name": "TimeTools", + "version": "2.1.44", + "title": "Time Tools (+game speed +clock combinators)", + "author": "BinbinHfr, Savisitor15", + "description": "Time tools : clock, daylight, game speed tweaks and clock combinators!", + "homepage": "https://forums.factorio.com/viewtopic.php?f=92&t=22822", + "contact": "https://forums.factorio.com/memberlist.php?mode=viewprofile&u=63692", + "factorio_version":"1.1" +} diff --git a/TimeTools/locale/de/de.cfg b/TimeTools/locale/de/de.cfg new file mode 100644 index 00000000..776d6d67 --- /dev/null +++ b/TimeTools/locale/de/de.cfg @@ -0,0 +1,17 @@ +[item-name] +clock-combinator=Uhrenkombinator + +[recipe-name] +clock-combinator=Uhrenkombinator + +[entity-name] +clock-combinator=Uhrenkombinator + +[virtual-signal-name] +signal-clock-gametick=Uhr/Spieltick +signal-clock-day=Uhr/Tag +signal-clock-hour=Uhr/Stunde +signal-clock-minute=Uhr/Minute +signal-clock-darkness=Uhr/Dunkelheit +signal-clock-lightness=Uhr/Helligkeit +signal-clock-alwaysday=Uhr/immer Tag \ No newline at end of file diff --git a/TimeTools/locale/en/en.cfg b/TimeTools/locale/en/en.cfg new file mode 100644 index 00000000..25ea9d44 --- /dev/null +++ b/TimeTools/locale/en/en.cfg @@ -0,0 +1,32 @@ +[item-name] +clock-combinator=Clock combinator + +[recipe-name] +clock-combinator=Clock combinator + +[entity-name] +clock-combinator=Clock combinator + +[virtual-signal-name] +signal-clock-gametick=Clock/game tick +signal-clock-day=Clock/day +signal-clock-hour=Clock/hour +signal-clock-minute=Clock/minute +signal-clock-darkness=Clock/darkness +signal-clock-lightness=Clock/lightness +signal-clock-alwaysday=Clock/always day + +[mod-setting-name] +timetools-always-day=Allow Always Day +timetools-maximum-speed=Max Time Acceleration +timetools-clock-update-interval=Ticks per clock update +timetools-combinator-interval=Ticks per clock combinator update + +[mod-setting-description] +timetools-always-day=Allow the user to set always day +timetools-maximum-speed=Maximum multiplier for time compression(set lower for older machines!) +timetools-clock-update-interval=Set higher if slowdowns occur +timetools-combinator-interval=Set higher if slowdowns occur + +[mod-messages] +timetools-message-admins-only=Only admins may change time. \ No newline at end of file diff --git a/TimeTools/locale/fr/fr.cfg b/TimeTools/locale/fr/fr.cfg new file mode 100644 index 00000000..5b2e234a --- /dev/null +++ b/TimeTools/locale/fr/fr.cfg @@ -0,0 +1,17 @@ +[item-name] +clock-combinator=Combinatoire temporel + +[recipe-name] +clock-combinator=Combinatoire temporel + +[entity-name] +clock-combinator=Combinatoire temporel + +[virtual-signal-name] +signal-clock-gametick=Horloge/tick du jeu +signal-clock-day=Horloge/jour +signal-clock-hour=Horloge/heure +signal-clock-minute=Horloge/minute +signal-clock-darkness=Horloge/obscuritΓ© +signal-clock-lightness=Horloge/luminositΓ© +signal-clock-alwaysday=Horloge/jour continuel diff --git a/TimeTools/locale/ru/ru.cfg b/TimeTools/locale/ru/ru.cfg new file mode 100644 index 00000000..915e279c --- /dev/null +++ b/TimeTools/locale/ru/ru.cfg @@ -0,0 +1,35 @@ +[mod-name] +TimeTools=Time Tools (ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ) + +[item-name] +clock-combinator=Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ + +[recipe-name] +clock-combinator=Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ + +[entity-name] +clock-combinator=Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ + +[virtual-signal-name] +signal-clock-gametick=Часы/ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Ρ‚ΠΈΠΊ +signal-clock-day=ВрСмя/дСнь +signal-clock-hour=ВрСмя/час +signal-clock-minute=ВрСмя/ΠΌΠΈΠ½ΡƒΡ‚Π° +signal-clock-darkness=ВрСмя/Ρ‚Π΅ΠΌΠ½ΠΎ +signal-clock-lightness=ВрСмя/свСтло +signal-clock-alwaysday=ВрСмя/всСгда дСнь + +[mod-setting-name] +timetools-always-day=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всСгда дСнь +timetools-maximum-speed=МаксимальноС ускорСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ +timetools-clock-update-interval=Число Ρ‚ΠΈΠΊΠΎΠ² Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ часов +timetools-combinator-interval=Число Ρ‚ΠΈΠΊΠΎΠ² Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ часов ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° + +[mod-setting-description] +timetools-always-day=Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ всСгда дСнь. +timetools-maximum-speed=ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ для ускорСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (установитС Π½ΠΈΠΆΠ΅ для слабых машин!) +timetools-clock-update-interval=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅, Ссли происходят замСдлСния. +timetools-combinator-interval=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅, Ссли происходят замСдлСния. + +[mod-messages] +timetools-message-admins-only=Волько администраторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ врСмя. diff --git a/TimeTools/locale/zh-CN/zh-CN.cfg b/TimeTools/locale/zh-CN/zh-CN.cfg new file mode 100644 index 00000000..0c91c6bb --- /dev/null +++ b/TimeTools/locale/zh-CN/zh-CN.cfg @@ -0,0 +1,38 @@ +[item-name] +clock-combinator=既间运η—器 + +[recipe-name] +clock-combinator=既间运η—器 + +[entity-name] +clock-combinator=既间运η—器 + +[virtual-signal-name] +signal-clock-gametick=ζ—Άι’Ÿ/游戏刻 +signal-clock-day=ζ—Άι’Ÿ/游戏ζ—₯ +signal-clock-hour=ζ—Άι’Ÿ/ζΈΈζˆζ—Ά +signal-clock-minute=ζ—Άι’Ÿ/ζΈΈζˆεˆ† +signal-clock-darkness=ζ—Άι’Ÿ/ε½“ε‰ζš—εΊ¦ +signal-clock-lightness=ζ—Άι’Ÿ/当前δΊεΊ¦ +signal-clock-alwaysday=ζ—Άι’Ÿ/ζ˜―ε¦εΌ€ε―ζ°Έζ—₯ + +[mod-setting-name] +timetools-always-day=允θΈζ°Έζ—₯ +timetools-maximum-speed=ζœ€ε€§ζ—Άι—΄εŠ ι€ŸεΊ¦ +timetools-clock-update-interval=UIζ—Άι’Ÿζ›΄ζ–°ζ•ˆηŽ‡ +timetools-combinator-interval=既间运η—ε™¨ζ›΄ζ–°ζ•ˆηŽ‡ + +[mod-setting-description] +timetools-always-day=ζ˜―ε¦ε…θΈζ™ι€šη”¨ζˆ·θΎη½ζ°Έζ—₯ +timetools-maximum-speed=ζœ€ε€§ηš„ζ—Άι—΄εŠ ι€Ÿε€ζ•°οΌˆε¦‚ζžœζœΊε™¨θ€ζ—§θ―·ε°½ι‡ι™δ½ŽοΌ‰ +timetools-clock-update-interval=ε¦‚ζžœζΈΈζˆε‡ΊηŽ°ε‘ι‘ΏοΌŒεˆ™θ―·ε°†ζ•°ε€ΌθΎη½ηš„ζ›΄ι«˜ +timetools-combinator-interval=ε¦‚ζžœζΈΈζˆε‡ΊηŽ°ε‘ι‘ΏοΌŒεˆ™θ―·ε°†ζ•°ε€ΌθΎη½ηš„ζ›΄ι«˜ + +[mod-messages] +timetools-message-admins-only=εͺζœ‰η‘η†ε‘˜ε―δ»₯更改既间。 + +[mod-name] +TimeTools=ζ—Άι—΄ε·₯ε…· + +[mod-description] +TimeTools=可δ»₯ζ›΄ζ”ΉζΈΈζˆι€ŸεΊ¦γ€εˆ‡ζ’ζ°Έζ—₯ζ°Έε€œη­‰δΈŽζ—Άι—΄ζœ‰ε…³ηš„ε‚ζ•°οΌŒθΏ˜ε―δ»₯εœ¨η½‘η»œδΈ­δ½Ώη”¨ζ—Άι—΄δΏ‘ε·ζ₯ζ›΄ε₯½ηš„θ§„εˆ’δ½ ηš„η‰©ζ΅η³»η»Ÿ \ No newline at end of file diff --git a/TimeTools/prototypes/entities.lua b/TimeTools/prototypes/entities.lua new file mode 100644 index 00000000..2009ab1f --- /dev/null +++ b/TimeTools/prototypes/entities.lua @@ -0,0 +1,197 @@ +data:extend( +{ + ---------------------------------------------------------------------------------- + { + type = "constant-combinator", + name = "clock-combinator", + icon = "__TimeTools__/graphics/clock-combinator-icon.png", + icon_size = 32, + flags = {"placeable-neutral", "player-creation"}, + minable = {hardness = 0.2, mining_time = 0.5, result = "clock-combinator"}, + max_health = 50, + corpse = "small-remnants", + + collision_box = {{-0.35, -0.35}, {0.35, 0.35}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + + item_slot_count = 15, + + sprites = + { + north = + { + filename = "__TimeTools__/graphics/clock-combinator.png", + x = 61, + width = 61, + height = 50, + shift = {0.078125, 0.15625}, + }, + east = + { + filename = "__TimeTools__/graphics/clock-combinator.png", + x = 61, + width = 61, + height = 50, + shift = {0.078125, 0.15625}, + }, + south = + { + filename = "__TimeTools__/graphics/clock-combinator.png", + x = 61, + width = 61, + height = 50, + shift = {0.078125, 0.15625}, + }, + west = + { + filename = "__TimeTools__/graphics/clock-combinator.png", + x = 61, + width = 61, + height = 50, + shift = {0.078125, 0.15625}, + }, + }, + + activity_led_sprites = + { + north = + { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-N.png", + width = 8, + height = 6, + frame_count = 1, + shift = util.by_pixel(9, -12), + hr_version = + { + scale = 0.5, + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-N.png", + width = 14, + height = 12, + frame_count = 1, + shift = util.by_pixel(9, -11.5) + } + }, + east = + { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-E.png", + width = 8, + height = 8, + frame_count = 1, + shift = util.by_pixel(8, 0), + hr_version = + { + scale = 0.5, + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-E.png", + width = 14, + height = 14, + frame_count = 1, + shift = util.by_pixel(7.5, -0.5) + } + }, + south = + { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-S.png", + width = 8, + height = 8, + frame_count = 1, + shift = util.by_pixel(-9, 2), + hr_version = + { + scale = 0.5, + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-S.png", + width = 14, + height = 16, + frame_count = 1, + shift = util.by_pixel(-9, 2.5) + } + }, + west = + { + filename = "__base__/graphics/entity/combinator/activity-leds/constant-combinator-LED-W.png", + width = 8, + height = 8, + frame_count = 1, + shift = util.by_pixel(-7, -15), + hr_version = + { + scale = 0.5, + filename = "__base__/graphics/entity/combinator/activity-leds/hr-constant-combinator-LED-W.png", + width = 14, + height = 16, + frame_count = 1, + shift = util.by_pixel(-7, -15) + } + } + }, + + activity_led_light = + { + intensity = 0.8, + size = 1, + }, + + activity_led_light_offsets = + { + {0.296875, -0.40625}, + {0.25, -0.03125}, + {-0.296875, -0.078125}, + {-0.21875, -0.46875} + }, + + circuit_wire_connection_points = + { + { + shadow = + { + red = {0.15625, -0.28125}, + green = {0.65625, -0.25} + }, + wire = + { + red = {-0.28125, -0.5625}, + green = {0.21875, -0.5625}, + } + }, + { + shadow = + { + red = {0.75, -0.15625}, + green = {0.75, 0.25}, + }, + wire = + { + red = {0.46875, -0.5}, + green = {0.46875, -0.09375}, + } + }, + { + shadow = + { + red = {0.75, 0.5625}, + green = {0.21875, 0.5625} + }, + wire = + { + red = {0.28125, 0.15625}, + green = {-0.21875, 0.15625} + } + }, + { + shadow = + { + red = {-0.03125, 0.28125}, + green = {-0.03125, -0.125}, + }, + wire = + { + red = {-0.46875, 0}, + green = {-0.46875, -0.40625}, + } + } + }, + circuit_wire_max_distance = 7.5 + }, + +} +) + diff --git a/TimeTools/prototypes/items.lua b/TimeTools/prototypes/items.lua new file mode 100644 index 00000000..ccdb2ce5 --- /dev/null +++ b/TimeTools/prototypes/items.lua @@ -0,0 +1,18 @@ +data:extend( +{ + ---------------------------------------------------------------------------------- + { + type = "item", + name = "clock-combinator", + icon = "__TimeTools__/graphics/clock-combinator-icon.png", + icon_size = 32, + flags = { }, + subgroup = "circuit-network", + place_result="clock-combinator", + order = "b[combinators]-d[clock-combinator]", + stack_size= 50, + }, + +} +) + diff --git a/TimeTools/prototypes/recipies.lua b/TimeTools/prototypes/recipies.lua new file mode 100644 index 00000000..4174fce9 --- /dev/null +++ b/TimeTools/prototypes/recipies.lua @@ -0,0 +1,20 @@ +data:extend( +{ + --------------------------------------------------------------------------------- + { + type = "recipe", + name = "clock-combinator", + enabled = "false", + ingredients = + { + {"copper-cable", 5}, + {"electronic-circuit", 2}, + }, + result = "clock-combinator" + }, + +} +) + +table.insert( data.raw["technology"]["circuit-network"].effects, { type = "unlock-recipe", recipe = "clock-combinator" } ) + diff --git a/TimeTools/prototypes/signals.lua b/TimeTools/prototypes/signals.lua new file mode 100644 index 00000000..7d11f0cc --- /dev/null +++ b/TimeTools/prototypes/signals.lua @@ -0,0 +1,71 @@ +data:extend( +{ + { + type = "item-subgroup", + name = "virtual-signal-clock", + group = "signals", + order = "y[virtual-signal-clock]" + }, + + { + type = "virtual-signal", + name = "signal-clock-gametick", + icon = "__TimeTools__/graphics/signal-clock-gametick.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-a" + }, + { + type = "virtual-signal", + name = "signal-clock-day", + icon = "__TimeTools__/graphics/signal-clock-day.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-d" + }, + { + type = "virtual-signal", + name = "signal-clock-hour", + icon = "__TimeTools__/graphics/signal-clock-hour.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-d" + }, + { + type = "virtual-signal", + name = "signal-clock-minute", + icon = "__TimeTools__/graphics/signal-clock-minute.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-d" + }, + { + type = "virtual-signal", + name = "signal-clock-alwaysday", + icon = "__TimeTools__/graphics/signal-clock-alwaysday.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-f" + }, + { + type = "virtual-signal", + name = "signal-clock-lightness", + icon = "__TimeTools__/graphics/signal-clock-lightness.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-f" + }, + { + type = "virtual-signal", + name = "signal-clock-darkness", + icon = "__TimeTools__/graphics/signal-clock-darkness.png", + icon_size = 32, + subgroup = "virtual-signal-clock", + order = "y[clock]-f" + }, + + + + + +}) diff --git a/TimeTools/prototypes/styles.lua b/TimeTools/prototypes/styles.lua new file mode 100644 index 00000000..29e40148 --- /dev/null +++ b/TimeTools/prototypes/styles.lua @@ -0,0 +1,109 @@ +data:extend( + { + { + type = "font", + name = "timetools_font", + from = "default", + border = false, + size = 15 + }, + { + type = "font", + name = "timetools_font_bold", + from = "default-bold", + border = false, + size = 15 + }, + + { + type = "sprite", + name = "sprite_timetools_alwday", + filename = "__TimeTools__/graphics/but-alwday.png", + width = 22, + height = 30, + }, + { + type = "sprite", + name = "sprite_timetools_night", + filename = "__TimeTools__/graphics/but-night.png", + width = 22, + height = 30, + }, + } +) + +local default_gui = data.raw["gui-style"].default + +default_gui.timetools_sprite_style = +{ + type="button_style", + parent="button", + top_padding = 1, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + width = 36, + height = 36, + scalable = false, +} + +default_gui.timetools_flow_style = +{ + type="horizontal_flow_style", + parent="horizontal_flow", + top_padding = 5, + bottom_padding = 5, + left_padding = 5, + right_padding = 5, + + horizontal_spacing = 0, + vertical_spacing = 0, + max_on_row = 0, + resize_row_to_width = true, + + graphical_set = { type = "none" }, +} +default_gui.timetools_botton_time_style= +{ + type="button_style", + parent="button", + font="timetools_font_bold", + align = "center", + top_padding = 1, + bottom_padding = 0, + left_padding = 0, + right_padding = 0, + height = 36, + minimal_width = 72, + scalable = false, + left_click_sound = + { + { + filename = "__core__/sound/gui-click.ogg", + volume = 1 + } + }, +} + +default_gui.timetools_button_style = +{ + type="button_style", + parent="button", + font="timetools_font_bold", + align = "center", + top_padding = 1, + bottom_padding = 0, + left_padding = 0, + right_padding = 0, + height = 36, + minimal_width = 36, + scalable = false, + left_click_sound = + { + { + filename = "__core__/sound/gui-click.ogg", + volume = 1 + } + }, +} + diff --git a/TimeTools/settings.lua b/TimeTools/settings.lua new file mode 100644 index 00000000..88ab163a --- /dev/null +++ b/TimeTools/settings.lua @@ -0,0 +1,31 @@ +data:extend( +{ + { + type="bool-setting", + name = "timetools-always-day", + setting_type = "runtime-global", + default_value = true + }, + { + type = "int-setting", + name = "timetools-maximum-speed", + setting_type = "runtime-global", + default_value = 64, + allowed_values = {2,4,8,16,32,64,128} + }, + { + type = "int-setting", + name = "timetools-clock-update-interval", + setting_type = "runtime-global", + default_value = 25, + allowed_values = {5,10,15,25,50,100} + }, + { + type = "int-setting", + name = "timetools-combinator-interval", + setting_type = "runtime-global", + default_value = 10, + allowed_values = {5,10,15,25,50,100} + } +} +) diff --git a/TimeTools/text/HISTO.txt b/TimeTools/text/HISTO.txt new file mode 100644 index 00000000..18d513b8 --- /dev/null +++ b/TimeTools/text/HISTO.txt @@ -0,0 +1,39 @@ +##NOTES: +Adds a tiny time toolbar at the top of the UI, that displays an ingame clock, allows to switch from night-and-day mode to continuous daylight and to tweak game speed. Also adds a Clock Combinator item to have access to time/daylight/luminosity variables through the logistic network. + +##VERSIONS: +1.0.36 - Fixed Gui to be more in-line to previous factorio versions +1.0.35 - moved config to be settings per map instead +1.0.34 - continuation of original TimeTools +1.0.33 - fixed naming +1.0.32 - factorio 0.17 compatible +1.0.29 - correction : surface.freeze_daytime is now a boolean... +1.0.28 - factorio 0.15 compatible +1.0.27 - adds an "always_day_enabled" option. +1.0.26 - factorio 0.14 compatible +1.0.25 - better init forces when installing on existing game. +1.0.24 - when always_day, display an approximation of hour/minute, using game.tick +1.0.23 - change right arrow position to avoid missclick when goinf from x8 to x16 and reverse +1.0.22 - problem with day icon not correctly initialised in MP, and also time color. +1.0.21 - corrects a migration version compare mistake +1.0.20 - interface allows enable/disable display of clock. + /c remote.call( "timetools", "on" ) + /c remote.call( "timetools", "off" ) +1.0.19 - correct pb of bad alwaysday icon init on brand new map. +1.0.18 - better init of global.day when load existing map +1.0.17 - simplify gui, integrate sprite buttons +1.0.16 - add some migrations (destroy and rebuild bar before 1.0.16), and event player_join +1.0.15 - normalize code to new binbinhfr basic structure, and fix a campaign incompatibility. +1.0.14 - minor fixes +1.0.13 - (coming next...) clock combinator fix. +1.0.12 - 0.13 compatible (combinator does not work for the moment). rework of initialisation routines. Custom license. New way to approximate day in alwaysday mode. +1.0.11 - Improved gui refresh. Reduced size in the top bar. +1.0.9 - Update always_day if changed by another mod. Add interface frozen. +1.0.7 - No more limitation for the clock combinator to be in a logistic network. Can be placed and works everywhere. +1.0.6 - Memorize last speed for quick speed switching. Release stress on Combinator Clock refresh. +1.0.5 - Improves multiplayer compatibility when config changes. +1.0.4 - Improves multiplayer compatibility. Add a reset to the interface. +1.0.3 - Change remote interface to set current day and current clock separately. +1.0.2 - Adds locale for german (thanks to Apcnc) and french (my own language). +1.0.1 - Introduces Clock Combinator and time freeze, new buttons. Adds multiplayer compatibility. +1.0.0 - Initial release with a simple Time Bar. \ No newline at end of file diff --git a/TimeTools/text/WEB.txt b/TimeTools/text/WEB.txt new file mode 100644 index 00000000..3bb5b02c --- /dev/null +++ b/TimeTools/text/WEB.txt @@ -0,0 +1,53 @@ +[b][size=150]Infos[/size][/b] +[list] +[*]Type: Mod +[*]Name: TimeTools +[*]Description: Adds a tiny time toolbar at the top of the UI, that displays an ingame clock, allows to switch from night-and-day mode to continuous daylight and to tweak game speed. Also adds a Clock Combinator item to have access to time/daylight/luminosity variables through the logistic network. +[*]Tested-With-Factorio-Version: 0.13.0 +[*]Multiplayer compatible: tested on a headless server... +[*]Locale: english, french, german +[*]Tags: Time, Daylight, Game speed, Clock combinator +[*]License: You are free to use and distribute this mod and also to modify it for personal use, but not to release a modified version without permission (unless visibly not maintained anymore). +[*]Portal download : https://mods.factorio.com/mods/binbinhfr/TimeTools[/list] +[attachment=2]timetools-screencopy7.jpg[/attachment] +[spoiler=Description][b][size=150]Description[/size][/b] +The time button on the left displays the current ingame day and time (dd-hh:mm). Note that it is different from your playing time in real seconds (as a mod like [url=https://forums.factorio.com/viewtopic.php?f=92&t=13837]EVO-GUI[/url] can display it). It is the time corresponding to the ingame days and night cycle. + +If you click on the time button, it pauses the time (but not the game) and the time becomes red. Click again to resume ; the time becomes green again +[attachment=7]timetools-screencopy1.jpg[/attachment] +If you click on the second button, it switches between classical night/day mode and continuous daylight (where time is frozen at 12:00). +[attachment=4]timetools-screencopy4.jpg[/attachment] +With the three last buttons, you can tweak the game speed : +- click on "<" or ">" to decrease or increase game speed from /8 to x64. +- click on the game speed button to directly revert to x1 normal speed, or to switch instant to last memorized speed if you are already in normal speed. +[attachment=6]timetools-screencopy2.jpg[/attachment] +[attachment=5]timetools-screencopy3.jpg[/attachment] +If you did researched the Circuit Network technology, you now have access to a Clock Combinator item that provides an access to several variables/signals : +[list] +[*]current game tick (from the beginning of the game) +[*]current day +[*]current hour +[*]current minute +[*]always day status (0: night&day, 1: always daylight) +[*]current darkness (from 0 to 100%) +[*]current lightness (from 0 to 100%), inverse of darkness.[/list] +[attachment=3]timetools-screencopy5.jpg[/attachment] +If you want to change the clock settings, you can use the remote interface from the console : +/c remote.call( "timetools", "setclock", hour.minute ) ex: /c remote.call( "timetools", "setclock", 9.27 ) to set at 09:27am + +you can also enable/disable the time display (if you want to keep only the combinator part), using +/c remote.call( "timetools", "off" ) +and +/c remote.call( "timetools", "on" ) + +You can also edit the config.lua file if you want to lower the maximum speed, or change the clock refresh rate.[/spoiler] + +[b][size=150]Download[/size][/b] +For Factorio 0.17.X : +[color=#00BF80]Please now use the portal for downloads (see link above or use ingame mod install/update), as I won't update both downloads links here anymore.[/color] + +You can probably find some of these features in other separate mods, but I gather them into one simple mod with a tiny gui bar. + +Thanks for GopherAtl and his [url=https://forums.factorio.com/viewtopic.php?f=93&t=14671]Nixie Tubes[/url] mod that I use to display numbers in my last screenshot. + +The classic display of the first screenshot is from my [url=https://forums.factorio.com/viewtopic.php?f=93&t=24720]SmartDisplay[/url] mod. \ No newline at end of file diff --git a/TimeTools/thumbnail.png b/TimeTools/thumbnail.png new file mode 100644 index 00000000..3e06a59a Binary files /dev/null and b/TimeTools/thumbnail.png differ diff --git a/TimeTools/utils.lua b/TimeTools/utils.lua new file mode 100644 index 00000000..0ef7fc0a --- /dev/null +++ b/TimeTools/utils.lua @@ -0,0 +1,338 @@ +-- utils.lua by binbinhfr, v1.0.16 + +-- define debug_status to 1 or nil in the control.lua, before statement require("utils") +-- define also debug_file and debug_mod_name + +colors = { + white = {r = 1, g = 1, b = 1}, + black = {r = 0, g = 0, b = 0}, + darkgrey = {r = 0.25, g = 0.25, b = 0.25}, + grey = {r = 0.5, g = 0.5, b = 0.5}, + lightgrey = {r = 0.75, g = 0.75, b = 0.75}, + + red = {r = 1, g = 0, b = 0}, + darkred = {r = 0.5, g = 0, b = 0}, + lightred = {r = 1, g = 0.5, b = 0.5}, + green = {r = 0, g = 1, b = 0}, + darkgreen = {r = 0, g = 0.5, b = 0}, + lightgreen = {r = 0.5, g = 1, b = 0.5}, + blue = {r = 0, g = 0, b = 1}, + darkblue = {r = 0, g = 0, b = 0.5}, + lightblue = {r = 0.5, g = 0.5, b = 1}, + + orange = {r = 1, g = 0.55, b = 0.1}, + yellow = {r = 1, g = 1, b = 0}, + pink = {r = 1, g = 0, b = 1}, + purple = {r = 0.6, g = 0.1, b = 0.6}, + brown = {r = 0.6, g = 0.4, b = 0.1}, +} + +anticolors = { + white = colors.black, + black = colors.white, + darkgrey = colors.white, + grey = colors.black, + lightgrey = colors.black, + + red = colors.white, + darkred = colors.white, + lightred = colors.black, + green = colors.black, + darkgreen = colors.white, + lightgreen = colors.black, + blue = colors.white, + darkblue = colors.white, + lightblue = colors.black, + + orange = colors.black, + yellow = colors.black, + pink = colors.white, + purple = colors.white, + brown = colors.white, +} + +lightcolors = { + white = colors.lightgrey, + grey = colors.darkgrey, + lightgrey = colors.grey, + + red = colors.lightred, + green = colors.lightgreen, + blue = colors.lightblue, + yellow = colors.orange, + pink = colors.purple, +} + +local author_name1 = "BinbinHfr" +local author_name2 = "binbin" +local author_name3 = "savisitor15" + +-------------------------------------------------------------------------------------- +function read_version(v) + local v1, v2, v3 = string.match(v, "(%d+).(%d+).(%d+)") + debug_print( "version cut = ", v1,v2,v3) +end + +-------------------------------------------------------------------------------------- +function compare_versions(v1,v2) + local v1a, v1b, v1c = string.match(v1, "(%d+).(%d+).(%d+)") + local v2a, v2b, v2c = string.match(v2, "(%d+).(%d+).(%d+)") + + v1a = tonumber(v1a) + v1b = tonumber(v1b) + v1c = tonumber(v1c) + v2a = tonumber(v2a) + v2b = tonumber(v2b) + v2c = tonumber(v2c) + + if v1a > v2a then + return 1 + elseif v1a < v2a then + return -1 + elseif v1b > v2b then + return 1 + elseif v1b < v2b then + return -1 + elseif v1c > v2c then + return 1 + elseif v1c < v2c then + return -1 + else + return 0 + end +end + +-------------------------------------------------------------------------------------- +function older_version(v1,v2) + local v1a, v1b, v1c = string.match(v1, "(%d+).(%d+).(%d+)") + local v2a, v2b, v2c = string.match(v2, "(%d+).(%d+).(%d+)") + local ret + + v1a = tonumber(v1a) + v1b = tonumber(v1b) + v1c = tonumber(v1c) + v2a = tonumber(v2a) + v2b = tonumber(v2b) + v2c = tonumber(v2c) + + if v1a > v2a then + ret = false + elseif v1a < v2a then + ret = true + elseif v1b > v2b then + ret = false + elseif v1b < v2b then + ret = true + elseif v1c < v2c then + ret = true + else + ret = false + end + + debug_print( "older_version ", v1, "<", v2, "=", ret ) + + return(ret) +end + +-------------------------------------------------------------------------------------- +function debug_active(...) + -- can be called everywhere, except in on_load where game is not existing + local s = "" + + for i, v in ipairs({...}) do + s = s .. tostring(v) + end + + if s == "RAZ" or debug_do_raz == true then + game.remove_path(debug_file) + debug_do_raz = false + elseif s == "CLEAR" then + for _, player in pairs(game.players) do + if player.connected then player.clear_console() end + end + end + + s = debug_mod_name .. "(" .. game.tick .. "): " .. s + game.write_file( debug_file, s .. "\n", true ) + + for _, player in pairs(game.players) do + if player.connected then player.print(s) end + end +end + +if debug_status == 1 then debug_print = debug_active else debug_print = function() end end + +-------------------------------------------------------------------------------------- +function message_all(s) + for _, player in pairs(game.players) do + if player.connected then + player.print(s) + end + end +end + +-------------------------------------------------------------------------------------- +function message_force(force, s) + for _, player in pairs(force.players) do + if player.connected then + player.print(s) + end + end +end + +-------------------------------------------------------------------------------------- +function square_area( origin, radius ) + return { + {x=origin.x - radius, y=origin.y - radius}, + {x=origin.x + radius, y=origin.y + radius} + } +end + +-------------------------------------------------------------------------------------- +function distance( pos1, pos2 ) + local dx = pos2.x - pos1.x + local dy = pos2.y - pos1.y + return( math.sqrt(dx*dx+dy*dy) ) +end + +-------------------------------------------------------------------------------------- +function distance_square( pos1, pos2 ) + return( math.max(math.abs(pos2.x - pos1.x),math.abs(pos2.y - pos1.y)) ) +end + +-------------------------------------------------------------------------------------- +function pos_offset( pos, offset ) + return { x=pos.x + offset.x, y=pos.y + offset.y } +end + +-------------------------------------------------------------------------------------- +function surface_area(surf) + local x1, y1, x2, y2 = 0,0,0,0 + + for chunk in surf.get_chunks() do + if chunk.x < x1 then + x1 = chunk.x + elseif chunk.x > x2 then + x2 = chunk.x + end + if chunk.y < y1 then + y1 = chunk.y + elseif chunk.y > y2 then + y2 = chunk.y + end + end + + return( {{x1*32-8,y1*32-8},{x2*32+40,y2*32+40}} ) +end + +-------------------------------------------------------------------------------------- +function iif( cond, val1, val2 ) + if cond then + return val1 + else + return val2 + end +end + +-------------------------------------------------------------------------------------- +function add_list(list, obj) + -- to avoid duplicates... + for i, obj2 in pairs(list) do + if obj2 == obj then + return(false) + end + end + table.insert(list,obj) + return(true) +end + +-------------------------------------------------------------------------------------- +function del_list(list, obj) + for i, obj2 in pairs(list) do + if obj2 == obj then + table.remove( list, i ) + return(true) + end + end + return(false) +end + +-------------------------------------------------------------------------------------- +function in_list(list, obj) + for k, obj2 in pairs(list) do + if obj2 == obj then + return(k) + end + end + return(nil) +end + +-------------------------------------------------------------------------------------- +function size_list(list) + local n = 0 + for i in pairs(list) do + n = n + 1 + end + return(n) +end + +-------------------------------------------------------------------------------------- +function concat_lists(list1, list2) + -- add list2 into list1 , do not avoid duplicates... + for i, obj in pairs(list2) do + table.insert(list1,obj) + end +end + +------------------------------------------------------------------------------------ +function is_dev(player) + return( player.name == author_name1 or player.name == author_name2 or string.upper(player.name) == string.upper(author_name3)) +end + +-------------------------------------------------------------------------------------- +function dupli_proto( type, name1, name2 ) + if data.raw[type][name1] then + local proto = table.deepcopy(data.raw[type][name1]) + proto.name = name2 + if proto.minable and proto.minable.result then proto.minable.result = name2 end + if proto.place_result then proto.place_result = name2 end + if proto.take_result then proto.take_result = name2 end + if proto.result then proto.result = name2 end + return(proto) + else + error("prototype unknown " .. name1 ) + return(nil) + end +end + +-------------------------------------------------------------------------------------- +function debug_guis( guip, indent ) + if guip == nil then return end + debug_print( indent .. string.rep("....",indent) .. " " .. guip.name ) + indent = indent+1 + for k, gui in pairs(guip.children_names) do + debug_guis( guip[gui], indent ) + end +end + +-------------------------------------------------------------------------------------- +function extract_monolith(filename, x, y, w, h) + return { + type = "monolith", + + top_monolith_border = 0, + right_monolith_border = 0, + bottom_monolith_border = 0, + left_monolith_border = 0, + + monolith_image = { + filename = filename, + priority = "extra-high-no-scale", + width = w, + height = h, + x = x, + y = y, + }, + } +end + diff --git a/TimeTools_2.1.44.zip b/TimeTools_2.1.44.zip deleted file mode 100644 index f7bcde93..00000000 Binary files a/TimeTools_2.1.44.zip and /dev/null differ diff --git a/TimedSpawnControl_1.1.0/control.lua b/TimedSpawnControl/control.lua similarity index 100% rename from TimedSpawnControl_1.1.0/control.lua rename to TimedSpawnControl/control.lua diff --git a/TimedSpawnControl_1.1.0/data.lua b/TimedSpawnControl/data.lua similarity index 100% rename from TimedSpawnControl_1.1.0/data.lua rename to TimedSpawnControl/data.lua diff --git a/TimedSpawnControl_1.1.0/info.json b/TimedSpawnControl/info.json similarity index 100% rename from TimedSpawnControl_1.1.0/info.json rename to TimedSpawnControl/info.json diff --git a/TimedSpawnControl_1.1.0/locale/en/locale.cfg b/TimedSpawnControl/locale/en/locale.cfg similarity index 100% rename from TimedSpawnControl_1.1.0/locale/en/locale.cfg rename to TimedSpawnControl/locale/en/locale.cfg diff --git a/TimedSpawnControl_1.1.0/settings.lua b/TimedSpawnControl/settings.lua similarity index 100% rename from TimedSpawnControl_1.1.0/settings.lua rename to TimedSpawnControl/settings.lua diff --git a/TimedSpawnControl_1.1.0/thumbnail.png b/TimedSpawnControl/thumbnail.png similarity index 100% rename from TimedSpawnControl_1.1.0/thumbnail.png rename to TimedSpawnControl/thumbnail.png diff --git a/Todo-List_19.3.0/changelog.txt b/Todo-List/changelog.txt similarity index 100% rename from Todo-List_19.3.0/changelog.txt rename to Todo-List/changelog.txt diff --git a/Todo-List_19.3.0/control.lua b/Todo-List/control.lua similarity index 100% rename from Todo-List_19.3.0/control.lua rename to Todo-List/control.lua diff --git a/Todo-List_19.3.0/data.lua b/Todo-List/data.lua similarity index 100% rename from Todo-List_19.3.0/data.lua rename to Todo-List/data.lua diff --git a/Todo-List_19.3.0/graphics/add-task-disabled.png b/Todo-List/graphics/add-task-disabled.png similarity index 100% rename from Todo-List_19.3.0/graphics/add-task-disabled.png rename to Todo-List/graphics/add-task-disabled.png diff --git a/Todo-List_19.3.0/graphics/add-task.png b/Todo-List/graphics/add-task.png similarity index 100% rename from Todo-List_19.3.0/graphics/add-task.png rename to Todo-List/graphics/add-task.png diff --git a/Todo-List_19.3.0/graphics/toggle-ui-disabled.png b/Todo-List/graphics/toggle-ui-disabled.png similarity index 100% rename from Todo-List_19.3.0/graphics/toggle-ui-disabled.png rename to Todo-List/graphics/toggle-ui-disabled.png diff --git a/Todo-List_19.3.0/graphics/toggle-ui.png b/Todo-List/graphics/toggle-ui.png similarity index 100% rename from Todo-List_19.3.0/graphics/toggle-ui.png rename to Todo-List/graphics/toggle-ui.png diff --git a/Todo-List_19.3.0/info.json b/Todo-List/info.json similarity index 100% rename from Todo-List_19.3.0/info.json rename to Todo-List/info.json diff --git a/Todo-List_19.3.0/lib/base64.lua b/Todo-List/lib/base64.lua similarity index 100% rename from Todo-List_19.3.0/lib/base64.lua rename to Todo-List/lib/base64.lua diff --git a/Todo-List_19.3.0/locale/en/default.cfg b/Todo-List/locale/en/default.cfg similarity index 98% rename from Todo-List_19.3.0/locale/en/default.cfg rename to Todo-List/locale/en/default.cfg index 61e5b0f3..55fbd6e1 100644 --- a/Todo-List_19.3.0/locale/en/default.cfg +++ b/Todo-List/locale/en/default.cfg @@ -76,4 +76,4 @@ todolist-translation-mode=Text style for the todo list. Questlog changes the wor todolist-click-edit-task-right-button=Right button todolist-click-edit-task-middle-button=Middle button todolist-translation-mode-default=Todo list -todolist-translation-mode-quest=Questlog \ No newline at end of file +todolist-translation-mode-quest=Questlog diff --git a/Todo-List_19.3.0/locale/en/quest.cfg b/Todo-List/locale/en/quest.cfg similarity index 100% rename from Todo-List_19.3.0/locale/en/quest.cfg rename to Todo-List/locale/en/quest.cfg diff --git a/Todo-List_19.3.0/locale/ru/default.cfg b/Todo-List/locale/ru/default.cfg similarity index 100% rename from Todo-List_19.3.0/locale/ru/default.cfg rename to Todo-List/locale/ru/default.cfg diff --git a/Todo-List_19.3.0/locale/ru/quest.cfg b/Todo-List/locale/ru/quest.cfg similarity index 100% rename from Todo-List_19.3.0/locale/ru/quest.cfg rename to Todo-List/locale/ru/quest.cfg diff --git a/Todo-List_19.3.0/settings.lua b/Todo-List/settings.lua similarity index 100% rename from Todo-List_19.3.0/settings.lua rename to Todo-List/settings.lua diff --git a/Todo-List_19.3.0/thumbnail.png b/Todo-List/thumbnail.png similarity index 100% rename from Todo-List_19.3.0/thumbnail.png rename to Todo-List/thumbnail.png diff --git a/Todo-List_19.3.0/todo/features/add_task.lua b/Todo-List/todo/features/add_task.lua similarity index 99% rename from Todo-List_19.3.0/todo/features/add_task.lua rename to Todo-List/todo/features/add_task.lua index 47c72956..29c4cca7 100644 --- a/Todo-List_19.3.0/todo/features/add_task.lua +++ b/Todo-List/todo/features/add_task.lua @@ -83,4 +83,4 @@ function todo.on_add_cancel_click(player) if (dialog) then dialog.destroy() end -end \ No newline at end of file +end diff --git a/Todo-List_19.3.0/todo/features/clean.lua b/Todo-List/todo/features/clean.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/clean.lua rename to Todo-List/todo/features/clean.lua diff --git a/Todo-List_19.3.0/todo/features/delete_task.lua b/Todo-List/todo/features/delete_task.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/delete_task.lua rename to Todo-List/todo/features/delete_task.lua diff --git a/Todo-List_19.3.0/todo/features/details_view.lua b/Todo-List/todo/features/details_view.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/details_view.lua rename to Todo-List/todo/features/details_view.lua diff --git a/Todo-List_19.3.0/todo/features/edit_task.lua b/Todo-List/todo/features/edit_task.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/edit_task.lua rename to Todo-List/todo/features/edit_task.lua diff --git a/Todo-List_19.3.0/todo/features/export_task.lua b/Todo-List/todo/features/export_task.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/export_task.lua rename to Todo-List/todo/features/export_task.lua diff --git a/Todo-List_19.3.0/todo/features/import_task.lua b/Todo-List/todo/features/import_task.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/import_task.lua rename to Todo-List/todo/features/import_task.lua diff --git a/Todo-List_19.3.0/todo/features/main_ui.lua b/Todo-List/todo/features/main_ui.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/main_ui.lua rename to Todo-List/todo/features/main_ui.lua diff --git a/Todo-List_19.3.0/todo/features/mark_complete.lua b/Todo-List/todo/features/mark_complete.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/mark_complete.lua rename to Todo-List/todo/features/mark_complete.lua diff --git a/Todo-List_19.3.0/todo/features/mark_open.lua b/Todo-List/todo/features/mark_open.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/mark_open.lua rename to Todo-List/todo/features/mark_open.lua diff --git a/Todo-List_19.3.0/todo/features/sort_tasks.lua b/Todo-List/todo/features/sort_tasks.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/sort_tasks.lua rename to Todo-List/todo/features/sort_tasks.lua diff --git a/Todo-List_19.3.0/todo/features/subtasks.lua b/Todo-List/todo/features/subtasks.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/subtasks.lua rename to Todo-List/todo/features/subtasks.lua diff --git a/Todo-List_19.3.0/todo/features/take_task.lua b/Todo-List/todo/features/take_task.lua similarity index 100% rename from Todo-List_19.3.0/todo/features/take_task.lua rename to Todo-List/todo/features/take_task.lua diff --git a/Todo-List_19.3.0/todo/helper.lua b/Todo-List/todo/helper.lua similarity index 100% rename from Todo-List_19.3.0/todo/helper.lua rename to Todo-List/todo/helper.lua diff --git a/Todo-List_19.3.0/todo/logging.lua b/Todo-List/todo/logging.lua similarity index 100% rename from Todo-List_19.3.0/todo/logging.lua rename to Todo-List/todo/logging.lua diff --git a/Todo-List_19.3.0/todo/style.lua b/Todo-List/todo/style.lua similarity index 100% rename from Todo-List_19.3.0/todo/style.lua rename to Todo-List/todo/style.lua diff --git a/Todo-List_19.3.0/todo/todo.lua b/Todo-List/todo/todo.lua similarity index 100% rename from Todo-List_19.3.0/todo/todo.lua rename to Todo-List/todo/todo.lua diff --git a/Todo-List_19.3.0/todo/ui/add_dialog.lua b/Todo-List/todo/ui/add_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/add_dialog.lua rename to Todo-List/todo/ui/add_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/clean_confirm_dialog.lua b/Todo-List/todo/ui/clean_confirm_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/clean_confirm_dialog.lua rename to Todo-List/todo/ui/clean_confirm_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/clean_dialog.lua b/Todo-List/todo/ui/clean_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/clean_dialog.lua rename to Todo-List/todo/ui/clean_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/edit_dialog.lua b/Todo-List/todo/ui/edit_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/edit_dialog.lua rename to Todo-List/todo/ui/edit_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/edit_subtask_dialog.lua b/Todo-List/todo/ui/edit_subtask_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/edit_subtask_dialog.lua rename to Todo-List/todo/ui/edit_subtask_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/export_dialog.lua b/Todo-List/todo/ui/export_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/export_dialog.lua rename to Todo-List/todo/ui/export_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/helper.lua b/Todo-List/todo/ui/helper.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/helper.lua rename to Todo-List/todo/ui/helper.lua diff --git a/Todo-List_19.3.0/todo/ui/import_dialog.lua b/Todo-List/todo/ui/import_dialog.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/import_dialog.lua rename to Todo-List/todo/ui/import_dialog.lua diff --git a/Todo-List_19.3.0/todo/ui/main_frame.lua b/Todo-List/todo/ui/main_frame.lua similarity index 100% rename from Todo-List_19.3.0/todo/ui/main_frame.lua rename to Todo-List/todo/ui/main_frame.lua diff --git a/TrainModeSwitcher_1.0.5/LICENSE b/TrainModeSwitcher/LICENSE similarity index 100% rename from TrainModeSwitcher_1.0.5/LICENSE rename to TrainModeSwitcher/LICENSE diff --git a/TrainModeSwitcher_1.0.5/changelog.txt b/TrainModeSwitcher/changelog.txt similarity index 100% rename from TrainModeSwitcher_1.0.5/changelog.txt rename to TrainModeSwitcher/changelog.txt diff --git a/TrainModeSwitcher_1.0.5/control.lua b/TrainModeSwitcher/control.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/control.lua rename to TrainModeSwitcher/control.lua diff --git a/TrainModeSwitcher_1.0.5/data.lua b/TrainModeSwitcher/data.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/data.lua rename to TrainModeSwitcher/data.lua diff --git a/TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_24.png b/TrainModeSwitcher/graphics/icons/tms_switcher_24.png similarity index 100% rename from TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_24.png rename to TrainModeSwitcher/graphics/icons/tms_switcher_24.png diff --git a/TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_32.png b/TrainModeSwitcher/graphics/icons/tms_switcher_32.png similarity index 100% rename from TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_32.png rename to TrainModeSwitcher/graphics/icons/tms_switcher_32.png diff --git a/TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_64.png b/TrainModeSwitcher/graphics/icons/tms_switcher_64.png similarity index 100% rename from TrainModeSwitcher_1.0.5/graphics/icons/tms_switcher_64.png rename to TrainModeSwitcher/graphics/icons/tms_switcher_64.png diff --git a/TrainModeSwitcher_1.0.5/info.json b/TrainModeSwitcher/info.json similarity index 100% rename from TrainModeSwitcher_1.0.5/info.json rename to TrainModeSwitcher/info.json diff --git a/TrainModeSwitcher_1.0.5/locale/en/base.cfg b/TrainModeSwitcher/locale/en/base.cfg similarity index 100% rename from TrainModeSwitcher_1.0.5/locale/en/base.cfg rename to TrainModeSwitcher/locale/en/base.cfg diff --git a/TrainModeSwitcher_1.0.5/prototypes/inputs.lua b/TrainModeSwitcher/prototypes/inputs.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/prototypes/inputs.lua rename to TrainModeSwitcher/prototypes/inputs.lua diff --git a/TrainModeSwitcher_1.0.5/prototypes/selectiontools.lua b/TrainModeSwitcher/prototypes/selectiontools.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/prototypes/selectiontools.lua rename to TrainModeSwitcher/prototypes/selectiontools.lua diff --git a/TrainModeSwitcher_1.0.5/prototypes/shortcuts.lua b/TrainModeSwitcher/prototypes/shortcuts.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/prototypes/shortcuts.lua rename to TrainModeSwitcher/prototypes/shortcuts.lua diff --git a/TrainModeSwitcher_1.0.5/settings.lua b/TrainModeSwitcher/settings.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/settings.lua rename to TrainModeSwitcher/settings.lua diff --git a/TrainModeSwitcher_1.0.5/thumbnail.png b/TrainModeSwitcher/thumbnail.png similarity index 100% rename from TrainModeSwitcher_1.0.5/thumbnail.png rename to TrainModeSwitcher/thumbnail.png diff --git a/TrainModeSwitcher_1.0.5/tms.lua b/TrainModeSwitcher/tms.lua similarity index 100% rename from TrainModeSwitcher_1.0.5/tms.lua rename to TrainModeSwitcher/tms.lua diff --git a/Train_Control_Signals_1.0.6/changelog.txt b/Train_Control_Signals/changelog.txt similarity index 100% rename from Train_Control_Signals_1.0.6/changelog.txt rename to Train_Control_Signals/changelog.txt diff --git a/Train_Control_Signals_1.0.6/control.lua b/Train_Control_Signals/control.lua similarity index 100% rename from Train_Control_Signals_1.0.6/control.lua rename to Train_Control_Signals/control.lua diff --git a/Train_Control_Signals_1.0.6/data.lua b/Train_Control_Signals/data.lua similarity index 100% rename from Train_Control_Signals_1.0.6/data.lua rename to Train_Control_Signals/data.lua diff --git a/Train_Control_Signals_1.0.6/depot-icon-disabled.png b/Train_Control_Signals/depot-icon-disabled.png similarity index 100% rename from Train_Control_Signals_1.0.6/depot-icon-disabled.png rename to Train_Control_Signals/depot-icon-disabled.png diff --git a/Train_Control_Signals_1.0.6/depot-icon.png b/Train_Control_Signals/depot-icon.png similarity index 100% rename from Train_Control_Signals_1.0.6/depot-icon.png rename to Train_Control_Signals/depot-icon.png diff --git a/Train_Control_Signals_1.0.6/info.json b/Train_Control_Signals/info.json similarity index 100% rename from Train_Control_Signals_1.0.6/info.json rename to Train_Control_Signals/info.json diff --git a/Train_Control_Signals_1.0.6/locale/en/train-control-signals.cfg b/Train_Control_Signals/locale/en/train-control-signals.cfg similarity index 100% rename from Train_Control_Signals_1.0.6/locale/en/train-control-signals.cfg rename to Train_Control_Signals/locale/en/train-control-signals.cfg diff --git a/Train_Control_Signals_1.0.6/refuel-icon-disabled.png b/Train_Control_Signals/refuel-icon-disabled.png similarity index 100% rename from Train_Control_Signals_1.0.6/refuel-icon-disabled.png rename to Train_Control_Signals/refuel-icon-disabled.png diff --git a/Train_Control_Signals_1.0.6/refuel-icon.png b/Train_Control_Signals/refuel-icon.png similarity index 100% rename from Train_Control_Signals_1.0.6/refuel-icon.png rename to Train_Control_Signals/refuel-icon.png diff --git a/Train_Control_Signals_1.0.6/script/train_control_signals.lua b/Train_Control_Signals/script/train_control_signals.lua similarity index 100% rename from Train_Control_Signals_1.0.6/script/train_control_signals.lua rename to Train_Control_Signals/script/train_control_signals.lua diff --git a/Train_Control_Signals_1.0.6/skip-icon.png b/Train_Control_Signals/skip-icon.png similarity index 100% rename from Train_Control_Signals_1.0.6/skip-icon.png rename to Train_Control_Signals/skip-icon.png diff --git a/Train_Control_Signals_1.0.6/thumbnail.png b/Train_Control_Signals/thumbnail.png similarity index 100% rename from Train_Control_Signals_1.0.6/thumbnail.png rename to Train_Control_Signals/thumbnail.png diff --git a/True-Nukes/MushroomCloudInBuilt/Attribution b/True-Nukes/MushroomCloudInBuilt/Attribution new file mode 100644 index 00000000..34188500 --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/Attribution @@ -0,0 +1,15 @@ +This folder contains only content from the glorious MushroomCloud mod, and I honestly couldn't do this myself (although I have made minor edits to make it more usable for this exact case). It is licensed under the MIT license, as found +https://opensource.org/licenses/MIT +and the original can be found at +https://mods.factorio.com/mod/MushroomCloud +The content of this is was in turn aggregated from: + +The animation for the explosion is from +https://mods.factorio.com/mods/Fatmice/UraniumPower +and the high-res is a simple edit made by myself, using my limited abilities to handle editing software. +nuclear-detonation-close-proximity.ogg from https://freesound.org/people/GowlerMusic/sounds/265459/ +nuclear-detonation-in-vincinity-1.ogg from https://freesound.org/people/Robinhood76/sounds/270882/ +nuclear-explosion-distant-boom-1.ogg from https://freesound.org/people/Innominatus/sounds/231377 +nuclear-detonation-in-vincinity-2.ogg from https://www.audioblocks.com/stock-audio/distant-nuke-explosion.html + +These are gathered from the Factorio mods page on MushroomCloud, and all the flash effects are from MushroomCloud itself. I do not claim any intelectual property rights over anything in this folder (including the changes I have made). diff --git a/True-Nukes/MushroomCloudInBuilt/control.lua b/True-Nukes/MushroomCloudInBuilt/control.lua new file mode 100644 index 00000000..9a41b676 --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/control.lua @@ -0,0 +1,190 @@ +script.on_init(function() onInit() end) + +function onInit() + global.TN_shockwave_approaching = global.TN_shockwave_approaching or false + global.TN_shockwave_impact_tick = global.TN_shockwave_impact_tick or {} + global.TN_lightEffects = global.TN_lightEffects or {} + -- WIP +end + +function dist_a_b(PositionA, PositionB) + return math.sqrt((PositionB.x - PositionA.x)^2+(PositionB.y-PositionA.y)^2) +end + +function shockwaveTravelTimeInTicks(distance) + return (distance*60)/330 + -- WIP +end + +function createBlastSoundsAndFlash(position, surface, radius_1, radius_2, radius_3, radius_4, radius_radiation, light_scale) + local evtSurfaceID + if surface then + evtSurfaceID = surface.index + end + local dist = 0 + local renderFlashForPlayers = {} + for i, player in pairs(game.connected_players) do + if player.mod_settings["TN-mushroom-cloud-style-nuclear-flash"].value == true then + renderFlashForPlayers[#renderFlashForPlayers + 1] = player + end + end + local flashBase + local flash + if #renderFlashForPlayers > 0 then + flashBase = rendering.draw_light{sprite = "utility/light_medium", scale = 5*light_scale, intensity = 1, minimum_darkness = 0, + target = position, surface = surface, time_to_live = 300, players = renderFlashForPlayers} + flash = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 5*light_scale, y_scale = 5*light_scale, render_layer = "light-effect", + minimum_darkness = 0, tint = {0.95, 0.95, 1, 1}, target = position, surface = surface, time_to_live = 300, players = renderFlashForPlayers} + end + local lightGlow = rendering.draw_light{sprite = "utility/light_medium", scale = 50*light_scale, intensity = 0.4, minimum_darkness = 0, + target = position, surface = surface, color = {1, 0.5, 0.2, 0.1}, time_to_live = 500} + local lightBase = rendering.draw_light{sprite = "utility/light_medium", scale = 20*light_scale, intensity = 1, minimum_darkness = 0, + target = position, surface = surface, time_to_live = 500} + local lightSurface = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 20*light_scale, y_scale = 17*light_scale, render_layer = "lower-object-above-shadow", + minimum_darkness = 0, tint = {0.75, 0.65, 0.6, 0.2}, target = position, surface = surface, time_to_live = 500} + local lightObjects = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 25*light_scale, y_scale = 21.5*light_scale, render_layer = "entity-info-icon-above", + minimum_darkness = 0, tint = {1, 0.9, 0.5, 0.4}, target = position, surface = surface, time_to_live = 500} + local lightCenterGlow = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 10*light_scale, y_scale = 8*light_scale, render_layer = "light-effect", + minimum_darkness = 0, tint = {1, 0.5, 0.2, 0.4}, target = position, surface = surface, time_to_live = 500} + local effects = {} + effects.maxDur = 500 + effects.ttl = 500 + effects.tickstart = game.tick + effects.tickend = game.tick + effects.ttl + effects.ids = {glow = lightGlow, light = lightBase, surface = lightSurface, objects = lightObjects, center = lightCenterGlow} + if flashBase ~= nil then + + effects.flashDuration = 5 + effects.flashMaxScale = 100*light_scale + effects.flashTransition = 300 + effects.flashTransitionScale = 20 + effects.flashTransitionStartFadeOut = 150 + local flashTransitionColorStart = {0.95, 0.95, 1, 1} + local flashTransitionColorEnd = {1, 0.5, 0.2, 0.4} + local flashTransitionTicks = effects.flashDuration - effects.flashTransitionStartFadeOut + local flashTransitionColorStep = { + (flashTransitionColorStart[1] - flashTransitionColorEnd[1]) / flashTransitionTicks, + (flashTransitionColorStart[2] - flashTransitionColorEnd[2]) / flashTransitionTicks, + (flashTransitionColorStart[3] - flashTransitionColorEnd[3]) / flashTransitionTicks, + (flashTransitionColorStart[4] - flashTransitionColorEnd[4]) / flashTransitionTicks} + effects.flashTransitionColorStep = flashTransitionColorStep + effects.flashTransitionColorEnd = flashTransitionColorEnd + effects.ids.flashBase = flashBase + effects.ids.flash = flash + end + effects.light_scale = light_scale; + if global.TN_lightEffects == nil then + global.TN_lightEffects = {} + end + + global.TN_lightEffects[#global.TN_lightEffects+1] = effects + + for i, player in pairs(game.connected_players) do + if player.surface.index == evtSurfaceID then + dist = dist_a_b(player.position, position) + if dist < radius_1 then + player.play_sound{path = "nuclear-detonation-close-proximity"} + --player.surface.create_entity({name = "nuclears-detonation-close-proximity", position = player.position}) + elseif dist < radius_2 then + player.play_sound{path = "nuclear-detonation-in-vincinity"} + --player.surface.create_entity({name = "nuclear-detonation-in-vincinity", position = player.position}) + elseif dist < radius_3 then + player.play_sound{path = "nuclear-detonation-distant-boom"} + --player.surface.create_entity({name = "nuclear-detonation-distant-boom", position = player.position}) + elseif dist < radius_4 then + player.play_sound{path = "nuclear-detonation-far-away"} + --player.surface.create_entity({name = "nuclear-detonation-far-away", position = player.position}) + end + if dist < radius_radiation then + player.play_sound{path = "nuclear-detonation-radiation-ticking"} + end + end + end +end + +function everyTick(event) + if global.TN_lightEffects == nil then + global.TN_lightEffects = {} + end + if global.TN_lightEffects ~= nil then + for i, effects in pairs(global.TN_lightEffects) do + effects.ttl = effects.ttl - 1 + if effects.ttl <= 0 then + global.TN_lightEffects[i] = nil + else + local maxDur = effects.maxDur + if effects.ids.flash ~= nil then + local fs = 0 + local ftProgress = 0 + + local flashBase = effects.ids.flashBase + local flash = effects.ids.flash + + if (maxDur - effects.ttl) < effects.flashDuration then + fs = ((maxDur - effects.ttl) / effects.flashDuration) * effects.flashMaxScale + + rendering.set_scale(flashBase, fs) + rendering.set_x_scale(flash, fs) + rendering.set_y_scale(flash, fs) + + elseif (maxDur - effects.ttl) < effects.flashTransition then + fs = effects.flashMaxScale - ((effects.flashMaxScale - effects.flashTransitionScale) / (effects.flashTransition - effects.flashDuration)) * (maxDur - effects.ttl - effects.flashDuration) + ftProgress = (effects.flashMaxScale - fs) / effects.flashTransitionScale + + rendering.set_x_scale(flash, fs) + rendering.set_y_scale(flash, fs) + rendering.set_intensity(flashBase, 1 - ftProgress) + + if (maxDur - effects.ttl) < effects.flashTransitionStartFadeOut then + local fctProgress = (maxDur - effects.ttl - effects.flashDuration) / (effects.flashTransitionStartFadeOut - effects.flashDuration) + + local currentColor = rendering.get_color(flash) + + rendering.set_color(flash, {currentColor.r + effects.flashTransitionColorStep[1], currentColor.g + effects.flashTransitionColorStep[2], currentColor.b + effects.flashTransitionColorStep[3], currentColor.a + effects.flashTransitionColorStep[4]}) + else + local ffaProgress = 1 - ((maxDur - effects.ttl - effects.flashTransitionStartFadeOut) / (effects.flashTransition - effects.flashTransitionStartFadeOut)) + + rendering.set_color(flash, {effects.flashTransitionColorEnd[1] * ffaProgress, effects.flashTransitionColorEnd[2] * ffaProgress, effects.flashTransitionColorEnd[3] * ffaProgress, effects.flashTransitionColorEnd[4] * ffaProgress}) + end + end + end + + local p0 = math.min(math.max(0, (effects.ttl - 100)) / 400, 1) + local p02 = math.min(math.max(0, (effects.ttl - 200)) / 300, 1) + local p03 = math.min(math.max(0, (effects.ttl - 200)) / 300, 1) + local p1 = math.min(effects.ttl / 400, 1) + local p2 = math.min(effects.ttl / 300, 1) + local p3 = math.min(effects.ttl / 240, 1) + local p4 = math.min(effects.ttl / 180, 1) + local a1 = math.max((maxDur - effects.ttl) / 250, 1) + local a2 = math.min((maxDur - effects.ttl) / 120, 1) + local a3 = math.min((maxDur / effects.ttl) * 5, 2) + + + local glow = effects.ids.glow + local light = effects.ids.light + local surface = effects.ids.surface + local objects = effects.ids.objects + local center = effects.ids.center + + rendering.set_intensity(glow, p2 * 0.4) + rendering.set_intensity(light, a1 * p3 * 1) + rendering.set_scale(light, a3 * p3 * 20 * effects.light_scale) + rendering.set_color(light, {1, math.min(a3/2 * p4, 1), math.min(a3/2 * p4, 1), 1}) + + rendering.set_color(surface, {p02 * 0.75, p02 * 0.65, p02 * 0.6, p02 * 0.2}) + rendering.set_x_scale(surface, p1 * 20 * effects.light_scale) + rendering.set_y_scale(surface, p1 * 17 * effects.light_scale) + + rendering.set_color(objects, {p02 * 1, p02 * 0.9, p02 * 0.5, p02 * 0.4}) + rendering.set_x_scale(objects, p2 * 25 * effects.light_scale) + rendering.set_y_scale(objects, p2 * 21.5 * effects.light_scale) + + rendering.set_color(center, {p03 * a2 * 1, p03 * a2 * 0.3, p03 * a2 * 0.1, p03 * a2 * 0.4}) + rendering.set_x_scale(center, p1 * 10 * effects.light_scale) + rendering.set_y_scale(center, p1 * 8 * effects.light_scale) + end + end + end +end +return {createBlastSoundsAndFlash, everyTick} diff --git a/True-Nukes/MushroomCloudInBuilt/explosion_sizes.lua b/True-Nukes/MushroomCloudInBuilt/explosion_sizes.lua new file mode 100644 index 00000000..2d068bb5 --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/explosion_sizes.lua @@ -0,0 +1,76 @@ + +local small_explosion_LUQ = table.deepcopy(data.raw.explosion["uranium-explosion-LUQ"]) +small_explosion_LUQ.name = "small-uranium-explosion-LUQ" +small_explosion_LUQ.animations[1].scale = small_explosion_LUQ.animations[1].scale/2 +small_explosion_LUQ.animations[1].shift = {-8,-8} +local small_explosion_RUQ = table.deepcopy(data.raw.explosion["uranium-explosion-RUQ"]) +small_explosion_RUQ.name = "small-uranium-explosion-RUQ" +small_explosion_RUQ.animations[1].scale = small_explosion_RUQ.animations[1].scale/2 +small_explosion_RUQ.animations[1].shift = {8,-8} +local small_explosion_LLQ = table.deepcopy(data.raw.explosion["uranium-explosion-LLQ"]) +small_explosion_LLQ.name = "small-uranium-explosion-LLQ" +small_explosion_LLQ.animations[1].scale = small_explosion_LLQ.animations[1].scale/2 +small_explosion_LLQ.animations[1].shift = {-8,8} +local small_explosion_RLQ = table.deepcopy(data.raw.explosion["uranium-explosion-RLQ"]) +small_explosion_RLQ.name = "small-uranium-explosion-RLQ" +small_explosion_RLQ.animations[1].scale = small_explosion_RLQ.animations[1].scale/2 +small_explosion_RLQ.animations[1].shift = {8,8} +data:extend({small_explosion_LUQ,small_explosion_RUQ,small_explosion_LLQ,small_explosion_RLQ}) + +--allow definition of high-res versions. +if (data.raw.explosion["big-uranium-explosion-LUQ"] ==nil) then + local big_explosion_LUQ = table.deepcopy(data.raw.explosion["uranium-explosion-LUQ"]) + big_explosion_LUQ.name = "big-uranium-explosion-LUQ" + big_explosion_LUQ.animations[1].scale = big_explosion_LUQ.animations[1].scale*2 + big_explosion_LUQ.animations[1].shift = {-32,-32} + local big_explosion_RUQ = table.deepcopy(data.raw.explosion["uranium-explosion-RUQ"]) + big_explosion_RUQ.name = "big-uranium-explosion-RUQ" + big_explosion_RUQ.animations[1].scale = big_explosion_RUQ.animations[1].scale*2 + big_explosion_RUQ.animations[1].shift = {32,-32} + local big_explosion_LLQ = table.deepcopy(data.raw.explosion["uranium-explosion-LLQ"]) + big_explosion_LLQ.name = "big-uranium-explosion-LLQ" + big_explosion_LLQ.animations[1].scale = big_explosion_LLQ.animations[1].scale*2 + big_explosion_LLQ.animations[1].shift = {-32,32} + local big_explosion_RLQ = table.deepcopy(data.raw.explosion["uranium-explosion-RLQ"]) + big_explosion_RLQ.name = "big-uranium-explosion-RLQ" + big_explosion_RLQ.animations[1].scale = big_explosion_RLQ.animations[1].scale*2 + big_explosion_RLQ.animations[1].shift = {32,32} + data:extend({big_explosion_LUQ,big_explosion_RUQ,big_explosion_LLQ,big_explosion_RLQ}) +end + +local huge_explosion_LUQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-LUQ"]) +huge_explosion_LUQ.name = "huge-uranium-explosion-LUQ" +huge_explosion_LUQ.animations[1].scale = huge_explosion_LUQ.animations[1].scale*2 +huge_explosion_LUQ.animations[1].shift = {-64,-64} +local huge_explosion_RUQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-RUQ"]) +huge_explosion_RUQ.name = "huge-uranium-explosion-RUQ" +huge_explosion_RUQ.animations[1].scale = huge_explosion_RUQ.animations[1].scale*2 +huge_explosion_RUQ.animations[1].shift = {64,-64} +local huge_explosion_LLQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-LLQ"]) +huge_explosion_LLQ.name = "huge-uranium-explosion-LLQ" +huge_explosion_LLQ.animations[1].scale = huge_explosion_LLQ.animations[1].scale*2 +huge_explosion_LLQ.animations[1].shift = {-64,64} +local huge_explosion_RLQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-RLQ"]) +huge_explosion_RLQ.name = "huge-uranium-explosion-RLQ" +huge_explosion_RLQ.animations[1].scale = huge_explosion_RLQ.animations[1].scale*2 +huge_explosion_RLQ.animations[1].shift = {64,64} +data:extend({huge_explosion_LUQ,huge_explosion_RUQ,huge_explosion_LLQ,huge_explosion_RLQ}) + + +local really_huge_explosion_LUQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-LUQ"]) +really_huge_explosion_LUQ.name = "really-huge-uranium-explosion-LUQ" +really_huge_explosion_LUQ.animations[1].scale = really_huge_explosion_LUQ.animations[1].scale*4 +really_huge_explosion_LUQ.animations[1].shift = {-128,-128} +local really_huge_explosion_RUQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-RUQ"]) +really_huge_explosion_RUQ.name = "really-huge-uranium-explosion-RUQ" +really_huge_explosion_RUQ.animations[1].scale = really_huge_explosion_RUQ.animations[1].scale*4 +really_huge_explosion_RUQ.animations[1].shift = {128,-128} +local really_huge_explosion_LLQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-LLQ"]) +really_huge_explosion_LLQ.name = "really-huge-uranium-explosion-LLQ" +really_huge_explosion_LLQ.animations[1].scale = really_huge_explosion_LLQ.animations[1].scale*4 +really_huge_explosion_LLQ.animations[1].shift = {-128,128} +local really_huge_explosion_RLQ = table.deepcopy(data.raw.explosion["big-uranium-explosion-RLQ"]) +really_huge_explosion_RLQ.name = "really-huge-uranium-explosion-RLQ" +really_huge_explosion_RLQ.animations[1].scale = really_huge_explosion_RLQ.animations[1].scale*4 +really_huge_explosion_RLQ.animations[1].shift = {128,128} +data:extend({really_huge_explosion_LUQ, really_huge_explosion_RUQ, really_huge_explosion_LLQ, really_huge_explosion_RLQ}) diff --git a/True-Nukes/MushroomCloudInBuilt/explosions.lua b/True-Nukes/MushroomCloudInBuilt/explosions.lua new file mode 100644 index 00000000..d0b6543c --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/explosions.lua @@ -0,0 +1,57 @@ +data:extend({ + { + type = "sound", + name = "nuclear-detonation-close-proximity", + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_close_proximity.ogg", + volume = 2.0 + }, + { + type = "sound", + name = "nuclear-detonation-in-vincinity", + variations = { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg", + volume = 1.50 + }, + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_2.ogg", + volume = 1.75 + } + } + }, + { + type = "sound", + name = "nuclear-detonation-distant-boom", + variations = { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_1.ogg", + volume = 1.75 + }, + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_2.ogg", + volume = 1.6 + }, + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_3.ogg", + volume = 1.75 + } + } + }, + { + type = "sound", + name = "nuclear-detonation-far-away", + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_far_away.ogg", + volume = 2.0 + } +}) + +local nuclear_crater = util.table.deepcopy(data.raw["corpse"]["big-scorchmark"]) +nuclear_crater.name = "nuclear-scorchmark" +nuclear_crater.order = "d[remnants]-b[scorchmark]-b[nuclear]" +--nuclear_crater.animation.scale = 8 +nuclear_crater.ground_patch.sheet.scale = 4 +nuclear_crater.ground_patch.sheet.hr_version.scale = 4 +nuclear_crater.ground_patch_higher.sheet.scale = 4 +nuclear_crater.ground_patch_higher.sheet.hr_version.scale = 4 + +data:extend({nuclear_crater}) diff --git a/immersive-sounds_0.1.1/graphics/dummy.png b/True-Nukes/MushroomCloudInBuilt/graphics/dummy.png similarity index 100% rename from immersive-sounds_0.1.1/graphics/dummy.png rename to True-Nukes/MushroomCloudInBuilt/graphics/dummy.png diff --git a/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LLQ.png b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LLQ.png new file mode 100644 index 00000000..f2c6e981 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LLQ.png differ diff --git a/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LUQ.png b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LUQ.png new file mode 100644 index 00000000..c30b37d2 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/LUQ.png differ diff --git a/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RLQ.png b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RLQ.png new file mode 100644 index 00000000..448d7966 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RLQ.png differ diff --git a/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RUQ.png b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RUQ.png new file mode 100644 index 00000000..4da732e3 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/graphics/explosion/RUQ.png differ diff --git a/True-Nukes/MushroomCloudInBuilt/ground_zero.lua b/True-Nukes/MushroomCloudInBuilt/ground_zero.lua new file mode 100644 index 00000000..0e156335 --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/ground_zero.lua @@ -0,0 +1,156 @@ +local anim_speed = 0.2 + +data:extend({ + { + type = "explosion", + name = "uranium-explosion-LUQ", + flags = {"not-on-map"}, + animations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/graphics/explosion/LUQ.png", + priority = "extra-high", + width = 256, + height = 256, + frame_count = 64, + line_length = 8, + scale = 4, + shift = {-16, -16}, + animation_speed = anim_speed + }, + }, + light = {intensity = 10, size = 120}, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = + { + aggregation = + { + max_count = 1, + remove = false + }, + variations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg", -- only audible up to 40 tiles + volume = 0.5 + }, + } + }, + }, + { + type = "explosion", + name = "uranium-explosion-RUQ", + flags = {"not-on-map"}, + animations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/graphics/explosion/RUQ.png", + priority = "extra-high", + width = 256, + height = 256, + frame_count = 64, + line_length = 8, + scale = 4, + shift = {16, -16}, + animation_speed = anim_speed + }, + }, + light = {intensity = 10, size = 120}, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = + { + aggregation = + { + max_count = 1, + remove = false + }, + variations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg", + volume = 0.5 + }, + } + }, + }, + { + type = "explosion", + name = "uranium-explosion-LLQ", + flags = {"not-on-map"}, + animations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/graphics/explosion/LLQ.png", + priority = "extra-high", + width = 256, + height = 256, + frame_count = 64, + line_length = 8, + scale = 4, + shift = {-16, 16}, + animation_speed = anim_speed + }, + }, + light = {intensity = 10, size = 120}, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = + { + aggregation = + { + max_count = 1, + remove = false + }, + variations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg", + volume = 0.5, + }, + } + }, + }, + { + type = "explosion", + name = "uranium-explosion-RLQ", + flags = {"not-on-map"}, + animations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/graphics/explosion/RLQ.png", + priority = "extra-high", + width = 256, + height = 256, + frame_count = 64, + line_length = 8, + scale = 4, + shift = {16, 16}, + animation_speed = anim_speed + }, + }, + light = {intensity = 10, size = 120}, + smoke = "smoke-fast", + smoke_count = 2, + smoke_slow_down_factor = 1, + sound = + { + aggregation = + { + max_count = 1, + remove = false + }, + variations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg", + volume = 0.5 + }, + } + }, + } +}) diff --git a/True-Nukes/MushroomCloudInBuilt/radiation_noise.lua b/True-Nukes/MushroomCloudInBuilt/radiation_noise.lua new file mode 100644 index 00000000..7bac639b --- /dev/null +++ b/True-Nukes/MushroomCloudInBuilt/radiation_noise.lua @@ -0,0 +1,62 @@ +local radiationSoundEffects = { + type = "play-sound", + sound = + { + aggregation = + { + max_count = 1, + count_already_playing = true, + progress_threshold = 1.0, + remove = true + }, + variations = + { + { + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/radiation_ticking.ogg", + volume = 3 + } + } + } +} + +data:extend({ +{ + type = "smoke-with-trigger", + name = "radiation-cloud", + flags = {"not-on-map"}, + show_when_smoke_off = true, + animation = + { + filename = "__True-Nukes__/MushroomCloudInBuilt/graphics/dummy.png", + priority = "low", + width = 32, + height = 32, + frame_count = 1, + line_length = 1, + animation_speed = 1 + }, + slow_down_factor = 0, + affected_by_wind = false, + cyclic = true, + duration = 60 * 120, + fade_away_duration = 20 * 60, + spread_duration = 10, + color = { r = 0.9, g = 0.9, b = 0.9, a = 0.1 }, + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = {radiationSoundEffects} + } + }, + action_cooldown = 37 +}, +{ + type = "sound", + name = "nuclear-detonation-radiation-ticking", + filename = "__True-Nukes__/MushroomCloudInBuilt/sound/radiation_ticking.ogg", + volume = 3 +} +}) diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_close_proximity.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_close_proximity.ogg new file mode 100644 index 00000000..b84792b1 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_close_proximity.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_far_away.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_far_away.ogg new file mode 100644 index 00000000..c5ee0d18 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_far_away.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg new file mode 100644 index 00000000..5efd06d3 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_1.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_2.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_2.ogg new file mode 100644 index 00000000..1ff01024 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_detonation_in_vincinity_2.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_1.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_1.ogg new file mode 100644 index 00000000..e7a981d2 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_1.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_2.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_2.ogg new file mode 100644 index 00000000..51c19635 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_2.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_3.ogg b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_3.ogg new file mode 100644 index 00000000..dc9abfb7 Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/nuclear_explosion_distant_boom_3.ogg differ diff --git a/True-Nukes/MushroomCloudInBuilt/sound/radiation_ticking.ogg b/True-Nukes/MushroomCloudInBuilt/sound/radiation_ticking.ogg new file mode 100644 index 00000000..dcab719b Binary files /dev/null and b/True-Nukes/MushroomCloudInBuilt/sound/radiation_ticking.ogg differ diff --git a/True-Nukes/changelog.txt b/True-Nukes/changelog.txt new file mode 100644 index 00000000..98996d3b --- /dev/null +++ b/True-Nukes/changelog.txt @@ -0,0 +1,362 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.3.17 +Date: 2022-12-21 + Bugfixes: + - Fixed issue with changing small detonation material +--------------------------------------------------------------------------------------------------- +Version: 0.3.16 +Date: 2022-11-06 + Bugfixes: + - Fixed SE disabling acheivements from satelite view (badly) +--------------------------------------------------------------------------------------------------- +Version: 0.3.15 +Date: 2022-11-01 + Localisation: + - Added German translations +--------------------------------------------------------------------------------------------------- +Version: 0.3.14 +Date: 2022-10-23 + Bugfixes: + - Fixed some issues between SE and other mods +--------------------------------------------------------------------------------------------------- +Version: 0.3.13 +Date: 2022-10-14 + Bugfixes: + - Fixed some K2 techs being waaay to hard +--------------------------------------------------------------------------------------------------- +Version: 0.3.12 +Date: 2022-10-07 + Bugfixes: + - Fixed Kovarex being a hidden tech tree requirement (again) +--------------------------------------------------------------------------------------------------- +Version: 0.3.11 +Date: 2022-10-06 + Bugfixes: + - Fixed Kovarex being a hidden tech tree requirement +--------------------------------------------------------------------------------------------------- +Version: 0.3.10 +Date: 2022-10-03 + Bugfixes: + - Added option to disable crater +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 +Date: 2022-09-30 + Bugfixes: + - Fixed another crash +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 +Date: 2022-09-29 + Bugfixes: + - Fixed another crash when certain weapons disabled +--------------------------------------------------------------------------------------------------- +Version: 0.3.7 +Date: 2022-09-29 + Bugfixes: + - Fixed crash when certain weapons disabled +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 +Date: 2022-09-27 + Bugfixes: + - Fixed crash on SE bio weapons +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 +Date: 2022-09-26 + Features: + - Achievements!!! + - Mod now tells you what tests need to be done when research is selected + Bugfixes: + - Lots of cases where void tiles are turned to craters + - Range related issues fixed + - Wrong pickup for fusion test building + - Optimisations if SE isn't there + - Added missing odds and ends from migrations +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: 2022-09-17 + Features: + - Set up researches for SE to be more reasonable/attainable. + Bugfixes: + - Fixed possible issues when nuclear tests are disabled +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 2022-09-16 + Bugfixes: + - Removed fast kills for complex entities +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 2022-09-15 + Bugfixes: + - Fixed issue with SE tiles being detected where there aren't any + - Allowed productivity modules to be used on advanced enrichment +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 2022-09-12 + Bugfixes: + - Fixed issue with migrations causing crash +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: 2022-09-11 + Features: + - Moved to Warhead based system + - Added more support for nuclear fuel cycle mods + - Added lots more nukes and variations of current nukes + - Added K2, SE support +--------------------------------------------------------------------------------------------------- +Version: 0.2.13 +Date: 2022-07-31 + Features: + - Changed craft times for weapons to try and make more sense +--------------------------------------------------------------------------------------------------- +Version: 0.2.12 +Date: 2022-07-05 + Bugfixes: + - Fixed compatibility issue with Kombat_Drones +--------------------------------------------------------------------------------------------------- +Version: 0.2.11 +Date: 2022-07-03 + Bugfixes: + - Fixed issue with crater tiles generating naturally +--------------------------------------------------------------------------------------------------- +Version: 0.2.10 +Date: 2022-06-02 + Bugfixes: + - Actually fixed Angels compatibility +--------------------------------------------------------------------------------------------------- +Version: 0.2.9 +Date: 2022-06-02 + Bugfixes: + - Fixed Angels compatibility +--------------------------------------------------------------------------------------------------- +Version: 0.2.8 +Date: 2022-04-21 + Features: + - Added material type selection and custom setting to allow manual override to material settings - this might not work to allow extra compatibility, but might help. Please feel free to ask for a material change to be implemented in the mod. + Bugfixes: + - Added compatibility with Nuclear Fuels and Clowns-AngelBob-Nuclear. +--------------------------------------------------------------------------------------------------- +Version: 0.2.7 +Date: 2022-01-25 + Bugfixes: + - Added raise_destroy to all destroy calls apart from those on trees and base-game enemies. If anyone is tracking either, please start a thing in the discussion page of the mod portal. +--------------------------------------------------------------------------------------------------- +Version: 0.2.6 +Date: 2022-01-16 + Bugfixes: + - Fixed crash when surface disappears +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 +Date: 2021-12-29 + Features: + - Added basic compatibility with APM nuclear +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 +Date: 2021-12-28 + Bugfixes: + - Fixed Crash on detonating 1Mt from building +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: 2021-12-14 + Features: + - Limited max polution from nukes to 500000, as more is just excess lag. + Bugfixes: + - Fixed performance leak - I wasn't clearing a table properly +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 2021-12-05 + Features: + - Added command to finalise all flowing water by filling all craters with water: /c remote.call("True-Nukes Scripts", "clearAllCraters", game.player.surface) + Bugfixes: + - Made code to not use new tiles actually work. +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 2021-09-26 + Optimisations: + - Reduced redundant API calls in water flow code - about 2x faster now + Bugfixes: + - Fixed edge-of-crater problem for larger nukes in water +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: 2021-09-24 + Optimisations: + - Added chunk-based damage loading, so the bigger nukes (>=100kt) don't load any map, instead apply damage to map as it is generated. This reduces memory usage to near-zero, and is only slow for big factories. Inspired by the changes made by RealisticFusionWeaponry. + Features: + - Even bigger nukes: 5Mt, 10Mt, 50Mt, 100Mt and 1Gt (and to be honest, the potential for unlimited yield - these are only the ones I have implemented). + - Added remote call interface for useful functions + - Instead of removing decoratives in the fireball, it now replaces them with more dead looking ones +--------------------------------------------------------------------------------------------------- +Version: 0.1.17 +Date: 2021-08-18 + Bugfixes: + - Fixed migration scripts (I hope again) + - Fixed missing locale entries +--------------------------------------------------------------------------------------------------- +Version: 0.1.16 +Date: 2021-08-15 + Bugfixes: + - Fixed migration scripts (I hope) +--------------------------------------------------------------------------------------------------- +Version: 0.1.15 +Date: 2021-08-12 + Features: + - Added some hopefully performance saving changes, including spreading some calculations across a few ticks after the initial blast + Bugfixes: + - Added migration scripts for new weapons +--------------------------------------------------------------------------------------------------- +Version: 0.1.14 +Date: 2021-07-28 + Features: + - Some excellent new sprites for the artillery shells by wretlaw120 (https://mods.factorio.com/user/wretlaw120) who actually contributed all these changes! Thanks! + - A small rearangement moving 4t and 8t rockets behind Very dangerous high-yield atomic weapons + Bugfixes: + - Fixed an internal spelling error (well spotted) +--------------------------------------------------------------------------------------------------- +Version: 0.1.13 +Date: 2021-07-22 + Features: + - Increased range on small rocket-nukes + - Changed icons for 20t, 500t and 1kt artillery nukes + - The mod now changes the rocket to grey if there any small atomic-rockets (2t, 4t, 8t) enabled - to avoid confusion + Bugfixes: + - Fixed wrong ranges on cannon shells + - Fixed ordering issues on 20t atomic artillery shell + Optimisations: + - Fixed massive inefficiencies for crater system - not as likely to crash for really big nukes (1Mt, 100kt) +--------------------------------------------------------------------------------------------------- +Version: 0.1.12 +Date: 2021-07-20 + Features: + - Added glow effects to all nukes and nuke-related items (e.g. Californium, Tritium) + - Changes to graphics for small atomic artillery shell + - Added new smaller atomic artillery shell (20t) + - Added new smaller atomic rockets (2t, 4t, 8t) - sorry that the 2t looks like the basic rocket, I couldn't think of anything else + - Added option for a more aggressively optimised detonation system, but this might not actually save all that much, so is off by default (in Settings->Mod settings->Map Settings->Use more optimised detonation system (BETA)) + Bugfixes: + - Fixed wrong pictures for items on ground + - Increased range of cannon shells to full intended range + - Decreased stack size of High yield atomic cannon shells to intended levels +--------------------------------------------------------------------------------------------------- +Version: 0.1.11 +Date: 2021-07-17 + Bugfixes: + - Made weapon disablement options more compatible with other mods (again) +--------------------------------------------------------------------------------------------------- +Version: 0.1.10 +Date: 2021-07-16 + Bugfixes: + - Made weapon disablement options more compatible with other mods +--------------------------------------------------------------------------------------------------- +Version: 0.1.9 +Date: 2021-07-14 + Features: + - Added settings to disable catagories of weapons (I haven't been able to test every combination, so bugs may be lurking here - please report them if you find them) + - Added pollution output to Nukes + - Updated technology icons + - Added nuke related menu simulations (there is an option to disable these, as they may be slow/annoying) + Bugfixes: + - Fixed Crater Mound transitions + - Fixed unfinished localisations for some settings + - Fixed Changelog (again) +--------------------------------------------------------------------------------------------------- +Version: 0.1.8 +Date: 2021-04-25 + Features: + - Added setting to preserve resources in craters - this might not be too pretty depending on how the tile transitions happen. +--------------------------------------------------------------------------------------------------- +Version: 0.1.7 +Date: 2021-04-06 + Features: + - Added new crater system (and option to go back to old system, which may be signifacntly higher performance, old system enhanced by mandelbrodt on github - thanks) + - Added crater filling with more dynamic water, so that it flows in from lakes etc. + - Also made the nukes vapourise any water inside their fireball + - Added new tiles to allow new crater system - this may break other mods, so there is an option to remove these, but this will make maps with them in not load properly + Bugfixes: + - Removed use-tritium setting, as this was never implemented (and, presumably, never used, as I never got a bug report!!!) +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 +Date: 2021-02-24 + Features: + - Added Megaton nukes + - Added nuclear weapon building + - Added tritium production chain + Optimisations: + - Made the game pre-load the map where the nuke will hit, so as to reduce the time the game is frozen for + - Made the game time-slice the blast wave, so that it can slow down to maintain frame-rate + - Increased the jump radius of the blast wave, to compensate for the slower proccessing rate +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: 2020-12-31 + Bugfixes: + - Fixed crash for entities with resistances, but without fire resistance (properly this time) + - Removed other explosion effect from thermobaric rocket +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 2020-12-30 + Bugfixes: + - Fixed crash for entities with resistances, but without fire resistance + - Fixed Changelog +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 2020-12-29 + Bugfixes: + - Fixed crash for entities without position +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 2020-12-28 + Features: + - Removed collision boxes for the cannon shells, meaning they never detonate early + - Made atomic ammo clamp firing distance, so it can be easily fired at full range +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 2020-11-29 + Features: + - Enabled 100kt nukes + - Added significant performance optimisations when destroying large numbers of trees + - Added Bob's compatable recipies (electronics and plates/intermediates) + - Incorperated MushroomCloud graphics and sounds into the mod, so that they work by default + - Moved to factorio 1.1 + - Added different flash effects for the different nukes, and added them to all nukes + - Added different sound ranges for different nukes, adding sounds to those that didn't have it before + - Added better graphics to thermobaric weapons. + - Disabled 'lots of small fires' for both 15kt and 100kt nukes + - Added ordering to mod settings. +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 2020-11-24 + Features: + - Added extra nukes for compatability with Schall's Tank Platoon + - Added californium, and smaller nuclear weapons + - Added fire shield + - Added high yield rockets + - Added upgraded versions of atomic tank shells and ammunition + - Increased range of most nuclear weapons, and decreased fire-rate in some cases + - Added more performance settings + - Fixed migration script +--------------------------------------------------------------------------------------------------- +Version: 0.0.7 +Date: 2020-11-08 + Features: + - Fixed issue regarding incompatibility with Make Artillery Great Again +--------------------------------------------------------------------------------------------------- +Version: 0.0.6 +Date: 2020-08-24 + Features: + - Fixed version error in Changelog (oops...) + - Changed crater to use nuclear ground + - Added thermobaric weaponry + - Made fires around nuclear detonations last longer + - Added short lived fires after nuclear detonations + - Fixed spelling error in Atomic Bomb description + - Changed graphics for technologies + - Added descriptions to settings, and more settings +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 2020-08-16 + Features: + - Updated to use Factorio 1.0.0 + - Updated graphics to use nuke-explosion if MushroomCloud not present, and to use it anyway for the tank shell. + - Made Spidertron 'immune' to thermal element of nuclear blast (by not applying it) +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 + Features: + - Fixed crash on spidertron being destroyed by nuclear weapon. + diff --git a/True-Nukes/compatibility/APM-final-fixes.lua b/True-Nukes/compatibility/APM-final-fixes.lua new file mode 100644 index 00000000..6adcf42b --- /dev/null +++ b/True-Nukes/compatibility/APM-final-fixes.lua @@ -0,0 +1,14 @@ +local no_prod = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"utility-science-pack", 1}, + {"apm_nuclear_science_pack", 1} +} + +if(settings.startup["enable-medium-atomics"].value and settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["atomic-bomb"].unit.ingredients = {{"test-pack-atomic-20t-1", 1}} +else + data.raw.technology["atomic-bomb"].unit.ingredients = no_prod +end \ No newline at end of file diff --git a/True-Nukes/compatibility/K2-final-fixes.lua b/True-Nukes/compatibility/K2-final-fixes.lua new file mode 100644 index 00000000..17009635 --- /dev/null +++ b/True-Nukes/compatibility/K2-final-fixes.lua @@ -0,0 +1,6 @@ +if(settings.startup["enable-medium-atomics"].value and settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["atomic-bomb"].unit.ingredients = {{"test-pack-atomic-20t-1", 1}} + data.raw.technology["atomic-bomb"].unit.count = 1 + data.raw.technology["atomic-bomb"].unit.time = 1 +end + diff --git a/True-Nukes/compatibility/SE-final-fixes.lua b/True-Nukes/compatibility/SE-final-fixes.lua new file mode 100644 index 00000000..99cdbd14 --- /dev/null +++ b/True-Nukes/compatibility/SE-final-fixes.lua @@ -0,0 +1,175 @@ + +local basic = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1} +} +local space = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, +} +local no_prod = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, + {"utility-science-pack", 1}, +} +local no_util = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, + {"production-science-pack", 1}, +} +local expensive = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, +} +local energy = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, + {"utility-science-pack", 1}, + {"se-energy-science-pack-1", 1}, +} + +data.raw.technology["basic-atomic-weapons"].unit.ingredients = basic + +if(settings.startup["enable-medium-atomics"].value and settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["atomic-bomb"].unit.ingredients = {{"test-pack-atomic-20t-1", 1}} + data.raw.technology["atomic-bomb"].unit.count = 1 + data.raw.technology["atomic-bomb"].unit.time = 1 +else + data.raw.technology["atomic-bomb"].unit.ingredients = basic +end + + +if(settings.startup["enable-large-atomics"].value) then + data.raw.technology["expanded-atomics"].unit.ingredients = space + if(data.raw.technology["kovarex-enrichment-process"] and data.raw.technology["kovarex-enrichment-process"].enabled) then + data.raw.technology["expanded-atomics"].prerequisites = {"atomic-bomb", "nuclear-fuel-reprocessing", "space-science-pack"} + end +end + +if(settings.startup["enable-large-atomics"].value) then + data.raw.technology["full-fission-atomics"].unit = { + count = 250, + ingredients = space, + time = 45 + } + if(settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["full-fission-atomics"].unit = + { + count = 1, + ingredients = {{"test-pack-atomic-500t-1", 1}}, + time = 1 + } + end +end +if(settings.startup["enable-medium-atomics"].value or settings.startup["enable-large-atomics"].value or settings.startup["enable-compact-15kt"].value) then + data.raw.technology["artillery-atomics"].unit.ingredients = no_util + if(data.raw.technology["kovarex-enrichment-process"] and data.raw.technology["kovarex-enrichment-process"].enabled) then + table.insert(data.raw.technology["artillery-atomics"].prerequisites, "kovarex-enrichment-process") + end +end +if(settings.startup["enable-small-atomics"].value or settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-large-atomics"].value) then + data.raw.technology["californium-processing"].unit.ingredients = { + {"automation-science-pack", 2}, + {"logistic-science-pack", 2}, + {"chemical-science-pack", 1}, + {"se-rocket-science-pack", 1}, + {"space-science-pack", 1}, + {"production-science-pack", 1}, + } +end +if(settings.startup["enable-small-atomics"].value or settings.startup["enable-compact-medium-atomics"].value ) then + data.raw.technology["californium-weapons"].unit.ingredients = no_prod + +end +if(settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value) then + data.raw.technology["compact-californium-weapons"].unit.ingredients = expensive +end +if(settings.startup["enable-compact-15kt"].value or settings.startup["enable-compact-large-atomics"].value) then + data.raw.technology["compact-full-fission-weapons"].unit.ingredients = {} + if(settings.startup["enable-nuclear-tests"].value) then + if(settings.startup["enable-15kt"].value) then + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-15kt-1", 1}) + else + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-1kt-1", 1}) + end + if(settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value) then + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-20t-3", 1}) + end + end + if not next(data.raw.technology["compact-full-fission-weapons"].unit.ingredients[1]) then + data.raw.technology["compact-full-fission-weapons"].unit = { + count = 200, + ingredients = energy, + time = 60 + } + end +end + +if(settings.startup["enable-fusion"].value) then + data.raw.technology["fusion-weapons"].unit = { + count = 500, + ingredients = energy, + time = 60 + } +end +if(settings.startup["enable-compact-fusion"].value) then + data.raw.technology["compact-fusion-weapons"].unit = { + count = 500, + ingredients = energy, + time = 60 + } + if(settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["compact-fusion-weapons"].unit = + { + count = 1, + ingredients = {{"test-pack-atomic-2-stage-100kt-1", 1}}, + time = 1 + } + end +end + +if(settings.startup["enable-compact-small-atomics"].value or settings.startup["enable-compact-medium-atomics"].value or + settings.startup["enable-compact-large-atomics"].value or settings.startup["enable-compact-15kt"].value) then + data.raw.technology["dense-neutron-flux"].unit = { + count = 500, + ingredients = energy, + time = 60 + } +end + + + + + + + + + + + + diff --git a/True-Nukes/control.lua b/True-Nukes/control.lua new file mode 100644 index 00000000..460ccc21 --- /dev/null +++ b/True-Nukes/control.lua @@ -0,0 +1,487 @@ +--local Profiler = require('__profiler__/profiler.lua') +local mushroomFunctions = require("MushroomCloudInBuilt.control") + +local water = require("scripts.water-system") +local blast_system = require("scripts.blast-system") +local thermal_system = require("scripts.thermal-system") +local crater_system = require("scripts.crater-system") +local crater_system_se = require("scripts.crater-system-se") +local fireball_system = require("scripts.fireball-system") +local building_system = require("scripts.building-system") +local achievement_system = require("scripts.achievement-system") + +local createBlastSoundsAndFlash = mushroomFunctions[1] +script.on_init(function() + global.nuclearTests = {} -- a map of force-index to maps from atomic-test-pack to count... + global.thermalBlasts = {} -- a simple array, with elements: {surface_index, position, force, thermal_max_r, initialDamage, fireball_r, x, y}, each as a key of the map + global.blastWaves = {} -- a simple array, with elements: + --{r = currrent explosion radius, pos = centre position, pow = initial blast multiplier (usually initial r*r) + -- , max = maximum radius, s = surface index, fire = leave fires (true for thermobarics, false for nukes), damage_init = starting damage, speed = how far to jump every round, fire_rad = the radius to which the fire wave is solid + -- , blast_min_damage = amount of extra damage to add all the time, itt = the number of itterations done, doItts = whether to time slice the blast, ittframe = keeps track of frame count for time slicing + -- , force = force of the cause of the explosion - allows allocating kills correctly, cause = allows allocating kills to the originator}) + + global.nukeBuildings = {} -- array of the LuaEntities for any nukeBuildings + global.optimisedNukes = {} -- has keys: + --position, surface_index, crater_internal_r, crater_external_r, fireball_r, fire_outer_r, blast_max_r, tree_fire_max_r, thermal_max_r, check_craters + --used for doing chunk-by-chunk loading of detonation results + + global.cratersFast = {} -- map: cratersFast[surface index][xposition][yposition] = the highest water height in that area (x, y in units of 10) + global.cratersFastData = {} -- map: cratersFastData[surface index] = + -- {synch = 1-4 making deep water travel slower, xCount = number of x chunks on this surface, xCountSoFar = number of x chunks done so far this round, xDone = all x values done so far this round} + global.cratersFastItterationCount = 0 -- the counter of ticks for circling x chunks - counts up to 53 + + + global.cratersSlow = {} -- array of {t = time waiting - 20s units, x = xin units of 32, y = y in units of 32, surface = the surface index} +end) + + +local corpseMap = {} +corpseMap["biter-spawner"] = "biter-spawner-corpse" +corpseMap["spitter-spawner"] = "spitter-spawner-corpse" + +corpseMap["small-biter"] = "small-biter-corpse" +corpseMap["medium-biter"] = "medium-biter-corpse" +corpseMap["big-biter"] = "big-biter-corpse" +corpseMap["behemoth-biter"] = "behemoth-biter-corpse" + +corpseMap["small-spitter"] = "small-spitter-corpse" +corpseMap["medium-spitter"] = "medium-spitter-corpse" +corpseMap["big-spitter"] = "big-spitter-corpse" +corpseMap["behemoth-spitter"] = "behemoth-spitter-corpse" + +corpseMap["small-worm-turret"] = "small-worm-corpse" +corpseMap["medium-worm-turret"] = "medium-worm-corpse" +corpseMap["big-worm-turret"] = "big-worm-corpse" +corpseMap["behemoth-worm-turret"] = "behemoth-worm-corpse" + +--not sure this saves THAT much, particularly considering the complexity...Disabled temporarily... +--corpseMap["solar-panel"] = "solar-panel-remnants" +--corpseMap["accumulator"] = "accumulator-remnants" +--corpseMap["transport-belt"] = "transport-belt-remnants" +--corpseMap["fast-transport-belt"] = "fast-transport-belt-remnants" +--corpseMap["express-transport-belt"] = "express-transport-belt-remnants" +--corpseMap["stone-wall"] = "wall-remnants" + + + +local function tickHandler(event) + mushroomFunctions[2](event) + if(global.blastWaves ==nil) then + global.blastWaves = {} + end + if(global.nukeBuildings ==nil) then + global.nukeBuildings = {} + end + if(global.thermalBlasts ==nil) then + global.thermalBlasts = {} + end + if(next(global.blastWaves) ~= nil) then + for i,blast in pairs(global.blastWaves) do + blast_system.move_blast(i,blast,0, corpseMap) + end + -- else + -- Profiler.Stop(false, "") + end + if (#global.thermalBlasts>0) then + thermal_system.atomic_thermal_blast_move_along(corpseMap) + end + water.fastFill(event) + + building_system.checkBuildings() +end +script.on_event(defines.events.on_tick, tickHandler); + + + + + + + +local function find_event_position(event) + if(event.target_position)then + return event.target_position; + elseif(event.target_entity and event.target_entity.position) then + return event.target_entity.position; + elseif(event.source_position)then + return event.source_position; + elseif(event.source_entity and event.source_entity.position) then + return event.source_entity.position + else + return nil; + end +end + +--chunkLoaderStruct: surface_index, blastIndex, blastId, force, source, position, crater_internal_r, crater_external_r, fireball_r, blast_max_r, init_blast, blast_min_damage, thermal_max_r, init_thermal +local function optimisedChunkLoadHandler(chunkPosAndArea, chunkLoaderStruct, killPlanes) + local x = chunkPosAndArea.x*32 + local y = chunkPosAndArea.y*32 + local originPos = chunkLoaderStruct.position + local surface_index = chunkLoaderStruct.surface_index + local r1 = math.sqrt((x-originPos.x)*(x-originPos.x) + (y-originPos.y)*(y-originPos.y)) + local r2 = math.sqrt((x+32-originPos.x)*(x+32-originPos.x) + (y-originPos.y)*(y-originPos.y)) + local r3 = math.sqrt((x-originPos.x)*(x-originPos.x) + (y+32-originPos.y)*(y+32-originPos.y)) + local r4 = math.sqrt((x+32-originPos.x)*(x+32-originPos.x) + (y+32-originPos.y)*(y+32-originPos.y)) + local minR = math.min(r1, r2, r3, r4) + local maxR = math.max(r1, r2, r3, r4) + local blastIndex = chunkLoaderStruct.blastIndex + local blastId = chunkLoaderStruct.blastId + if ((minR1.5 or ang2>1.5 or ang3>1.5 or ang4>1.5))then + if(ang1<0) then + ang1 = ang1+6.283185307 + end + if(ang2<0) then + ang2 = ang2+6.283185307 + end + if(ang3<0) then + ang3 = ang3+6.283185307 + end + if(ang4<0) then + ang4 = ang4+6.283185307 + end + end + local crater_system_to_use = crater_system + if((game.active_mods["space-exploration"]) and (game.surfaces[surface_index].count_tiles_filtered{position = originPos, radius=2, name = crater_system_se.interesting_tiles, limit=1} ~= 0)) then + crater_system_to_use = crater_system_se + end + if(settings.global["actually-generate-crater"].value) then + -- crater + if((minRchunkLoaderStruct.crater_external_r-4) ) then + crater_system_to_use.chunk_loaded_outer(surface_index, chunkPosAndArea, chunkLoaderStruct, originPos, x, y, ang1, ang2, ang3, ang4, minR, maxR) + end + + if(minR=1000 and game.surfaces[surface_index].count_entities_filtered{force = force, type = {"furnace", "assembling-machine"}}<20) then + achievement_system.nukedEverything(force) + end +end + + +local function atomic_weapon_hit(surface_index, source, position, crater_internal_r, crater_external_r, fireball_r, fire_outer_r, blast_max_r, small_fire_max_r, thermal_max_r, load_r, visable_r, polution, flame_proportion, create_small_fires, check_craters) + -- find forces, positions, etc. + -- Profiler.Start() + local force + if(settings.global["nukes-cause-pollution"].value) then + game.surfaces[surface_index].pollute(position, polution) + end + if(not (source==nil)) then + force = source.force + else + force = "neutral" + end + local cause = source; + + local buildingCount = 0 + if(force)then + buildingCount = game.surfaces[surface_index].count_entities_filtered{force = force, type = {"furnace", "assembling-machine"}, limit = 200} + end + + -- force the map to generate (should be reasonably quick as it is pre-loaded) + game.surfaces[surface_index].request_to_generate_chunks(position, load_r/32) + game.surfaces[surface_index].force_generate_chunk_requests() + + + for _,f in pairs(game.forces) do + f.chart(game.surfaces[surface_index], {{position.x-visable_r,position.y-visable_r},{position.x+visable_r,position.y+visable_r}}) + end + + fireball_system.full_fireball(surface_index, position, fireball_r, crater_external_r, force, cause, corpseMap) + + local crater_system_to_use = crater_system + if((game.active_mods["space-exploration"]) and (game.surfaces[surface_index].count_tiles_filtered{position = originPos, radius=2, name = crater_system_se.interesting_tiles, limit=1} ~= 0)) then + crater_system_to_use = crater_system_se + end + if(settings.global["actually-generate-crater"].value) then + if(crater_external_r>150) then --use efficient crater generator (ignores height for lakes) + crater_system_to_use.nukeTileChangesHeightAwareHuge(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + else + crater_system_to_use.nukeTileChangesHeightAware(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + end + end + -- light fires as nessesary + if(flame_proportion>0 and crater_system_to_use.use_fires) then + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fire_outer_r}) do + local rand = math.random(0, fire_outer_r) + if(math.random(0, 1)+flame_proportion/8>1 and rand*rand>(v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y)) then + if((not(water.waterInCraterGoingOutDepths[v.name] == nil)) and water.waterInCraterGoingOutDepths[v.name] > -10) then + game.surfaces[surface_index].create_entity{name="thermobaric-wave-fire",position=v.position} + else + game.surfaces[surface_index].create_entity{name="nuclear-fire",position=v.position} + end + end + end + end + if (settings.global["nuke-random-fires"].value and create_small_fires and crater_system_to_use.use_fires) then + for i=(fire_outer_r*fire_outer_r/10),(small_fire_max_r*small_fire_max_r/10) do + local dist = math.random(fire_outer_r, math.random(fire_outer_r, small_fire_max_r)) + local angle = math.random()*3.1416*2 + game.surfaces[surface_index].create_entity{name="thermobaric-wave-fire",position={position.x+dist*math.cos(angle), position.y+dist*math.sin(angle)}} + end + end + thermal_system.atomic_thermal_blast(surface_index, position, force, cause, thermal_max_r, 5000, fireball_r, corpseMap) + table.insert(global.blastWaves, {r = fireball_r, pos = position, pow = fireball_r*fireball_r, max = blast_max_r, s = surface_index, fire = false, damage_init = 5000.0, speed = 8, fire_rad = 0, blast_min_damage = 0, itt = 1, doItts = true, ittframe = 1, force = force, cause = cause}) + + if(force and buildingCount>=200 and game.surfaces[surface_index].count_entities_filtered{force = force, type = {"furnace", "assembling-machine"}}<20) then + achievement_system.nukedEverything(force) + end + +end + + +local function thermobaric_weapon_hit(surface_index, source, position, explosion_r, blast_max_r, fire_r, load_r, visable_r) + local force + local cause = source; + if(not (source==nil)) then + force = source.force + else + force = "enemy" + end + game.surfaces[surface_index].request_to_generate_chunks(position, load_r/32) + game.surfaces[surface_index].force_generate_chunk_requests() + + for _,f in pairs(game.forces) do + f.chart(game.surfaces[surface_index], {{position.x-visable_r,position.y-visable_r},{position.x+visable_r,position.y+visable_r}}) + end + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=explosion_r}) do + game.surfaces[surface_index].create_entity{name="fire-flame",position=v.position} + end + table.insert(global.blastWaves, {r = explosion_r, pos = position, pow = explosion_r*explosion_r, max = blast_max_r, s = surface_index, fire = true, damage_init = 600.0, speed = 1, fire_rad = fire_r, blast_min_damage = 30, itt = 1, doItts = false, ittframe = 1, force = force, cause = cause}) +end + + + +local function nukeFiredScan(event) + local entity; + if(event.entity) then + entity = event.entity + elseif(event.source_entity) then + entity = event.source_entity + end + if (entity) then + local position = event.target_entity.position + if(string.match(entity.prototype.name, ".*-atomic-2-stage-100kt")) then + if (not settings.global["optimise-100kt"].value) then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 1500/32) + else + game.surfaces[event.surface_index].request_to_generate_chunks(position, 200/32) + end + elseif(string.match(entity.prototype.name, ".*-atomic-15kt") or string.match(entity.prototype.name, ".*-atomic-2-stage-15kt")) then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 1000/32) + elseif(string.match(entity.prototype.name, ".*-atomic-1kt")) then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 800/32) + else + game.surfaces[event.surface_index].request_to_generate_chunks(position, 400/32) + end + end +end + +-- calculate polution as 1*tonnage + 1000*uranium input + 100*californium input + 10000*tritium input +-- polution is capped at 500000 +--local function atomic_weapon_hit(surface_index, source_entity, position, crater_internal_r, crater_external_r, fireball_r, fire_outer_r, blast_max_r, tree_fire_max_r, thermal_max_r, load_r, visable_r, polution, flame_proportion, create_small_fires, check_craters) +script.on_event(defines.events.on_script_trigger_effect, function(event) + local mult = 25 + local thermal_mult = 30 + local position = find_event_position(event); + + local source = event.source_entity + + if(event.effect_id=="Thermobaric Weapon hit small-") then + thermobaric_weapon_hit(event.surface_index, source, position, 1, 15, 10, 10, 10); + elseif(event.effect_id=="Thermobaric Weapon hit small") then + thermobaric_weapon_hit(event.surface_index, source, position, 3, 30, 20, 30, 15); + elseif(event.effect_id=="Thermobaric Weapon hit small+") then + thermobaric_weapon_hit(event.surface_index, source, position, 4, 45, 30, 45, 25); + elseif(event.effect_id=="Thermobaric Weapon hit medium-") then + thermobaric_weapon_hit(event.surface_index, source, position, 5, 60, 40, 60, 35); + elseif(event.effect_id=="Thermobaric Weapon hit medium") then + thermobaric_weapon_hit(event.surface_index, source, position, 6, 80, 50, 80, 50); + elseif(event.effect_id=="Thermobaric Weapon hit large") then + thermobaric_weapon_hit(event.surface_index, source, position, 9, 120, 100, 120, 100); + elseif(event.effect_id=="Atomic Weapon hit 0.1t") then + atomic_weapon_hit(event.surface_index, source, position, 0, 1, 1, 3, mult*1, 15, thermal_mult*1, 15, 15, 300.1, 8, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 60, 100, 200, 700, 10, 0.06); + elseif(event.effect_id=="Atomic Weapon hit 0.5t") then + atomic_weapon_hit(event.surface_index, source, position, 0, 3, 3, 5, mult*3, 25, thermal_mult*3, 30, 20, 700.5, 4, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 80, 150, 300, 1000, 20, 0.12); + elseif(event.effect_id=="Atomic Weapon hit 2t") then + atomic_weapon_hit(event.surface_index, source, position, 0, 5, 5, 15, mult*5, 50, thermal_mult*5, 100, 50, 1302, 3, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 100, 250, 500, 2000, 40, 0.25); + elseif(event.effect_id=="Atomic Weapon hit 4t") then + atomic_weapon_hit(event.surface_index, source, position, 1, 6, 7, 20, mult*7, 120, thermal_mult*7, 180, 80, 4004, 2, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 120, 300, 900, 4000, 70, 0.4); + elseif(event.effect_id=="Atomic Weapon hit 8t") then + atomic_weapon_hit(event.surface_index, source, position, 3, 8, 14, 25, mult*14, 200, thermal_mult*14, 180, 100, 9008, 1, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 150, 400, 1250, 10000, 100, 0.6); + elseif(event.effect_id=="Atomic Weapon hit 20t") then + atomic_weapon_hit(event.surface_index, source, position, 5, 10, 20, 30, mult*20, 320, thermal_mult*20, 180, 150, 30020, 0.5, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 250, 600, 1800, 15000, 160, 1); + elseif(event.effect_id=="Atomic Weapon hit 500t") then + atomic_weapon_hit(event.surface_index, source, position, 10, 20, 40, 35, mult*40, 400, thermal_mult*40, 400, 300, 75500, 0.25*settings.global["large-nuke-fire-scaledown"].value, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 400, 800, 2500, 25000, 300, 2); + elseif(event.effect_id=="Atomic Weapon hit 1kt") then + atomic_weapon_hit(event.surface_index, source, position, 20, 40, 80, 75, mult*80/settings.global["large-nuke-range-scaledown"].value, 800, thermal_mult*80/settings.global["large-nuke-range-scaledown"].value, 800, 300, 101000, 0.25*settings.global["large-nuke-fire-scaledown"].value, true, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 600, 1200, 8000, 60000, 600, 4); + elseif(event.effect_id=="Atomic Weapon hit 15kt") then + atomic_weapon_hit(event.surface_index, source, position, 50, 100, 200, 150, mult*200/settings.global["huge-nuke-range-scaledown"].value, 1000, thermal_mult*200/settings.global["huge-nuke-range-scaledown"].value, 1000, 500, 315000, 0.125*settings.global["huge-nuke-fire-scaledown"].value, false, true); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 1500, 3000, 20000, 100000, 1500, 8); + elseif(event.effect_id=="Atomic Weapon hit 100kt") then + local blastD = mult*500/settings.global["really-huge-nuke-range-scaledown"].value; + if not settings.global["optimise-100kt"].value then + atomic_weapon_hit(event.surface_index, source, position, 90, 180, 500, 400, blastD, 2500, thermal_mult*500/settings.global["really-huge-nuke-range-scaledown"].value, 1500, 1000, 450000, 0, false, false); + else + atomic_weapon_hit_optimised(event.surface_index, source, position, 90, 180, 500, 400, blastD, 2500, thermal_mult*500/settings.global["really-huge-nuke-range-scaledown"].value, 1500, 1000, 450000, 0, false, false); + end + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 2700, 5400, 36000, 200000, 2700, 16); + elseif(event.effect_id=="Atomic Weapon hit 1Mt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 190, 390, 1200, 1000, mult*1200/settings.global["really-huge-nuke-range-scaledown"].value, 5000, thermal_mult*1200/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 6000, 10000, 60000, 400000, 5000, 32); + elseif(event.effect_id=="Atomic Weapon hit 5Mt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 330, 660, 2400, 2000, mult*2400/settings.global["really-huge-nuke-range-scaledown"].value, 10000, thermal_mult*2400/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 12000, 20000, 120000, 800000, 10000, 64); + elseif(event.effect_id=="Atomic Weapon hit 10Mt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 420, 830, 3150, 4000, mult*3150/settings.global["really-huge-nuke-range-scaledown"].value, 15000, thermal_mult*3150/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 18000, 30000, 180000, 1200000, 15000, 96); + elseif(event.effect_id=="Atomic Weapon hit 50Mt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 710, 1420, 6000, 8000, mult*6000/settings.global["really-huge-nuke-range-scaledown"].value, 30000, thermal_mult*6000/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 36000, 60000, 360000, 2400000, 30000, 192); + elseif(event.effect_id=="Atomic Weapon hit 100Mt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 900, 1800, 8000, 12000, mult*8000/settings.global["really-huge-nuke-range-scaledown"].value, 40000, thermal_mult*8000/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 48000, 80000, 480000, 3200000, 40000, 256); + elseif(event.effect_id=="Atomic Weapon hit 1Gt") then + atomic_weapon_hit_optimised(event.surface_index, source, position, 1800, 3600, 16000, 24000, mult*16000/settings.global["really-huge-nuke-range-scaledown"].value, 80000, thermal_mult*16000/settings.global["really-huge-nuke-range-scaledown"].value, 3200, 2000, 500000, 0, false, false); + createBlastSoundsAndFlash(position, game.surfaces[event.surface_index], 96000, 160000, 960000, 6400000, 80000, 512); + elseif(event.effect_id=="Nuke firing") then + nukeFiredScan(event); + elseif(event.effect_id=="Mega-nuke built") then + table.insert(global.nukeBuildings, source) + end + +end) + + + +script.on_nth_tick(1207, water.slowFill) + +script.on_event(defines.events.on_chunk_generated, function(event) + if(global.optimisedNukes == nil) then + global.optimisedNukes = {} + end + if(#global.optimisedNukes>0) then + for _,chunkData in pairs(global.optimisedNukes) do + if(chunkData.surface_index == event.surface.index) then + optimisedChunkLoadHandler({x=event.position.x, y=event.position.y, area=event.area}, chunkData, false); + end + end + end +end) + + +local function clearAllCraters(surface) + local l = {}; + for _,t in pairs(surface.find_tiles_filtered({name={"nuclear-deep", "nuclear-deep-shallow-fill", "nuclear-deep-fill"}})) do + table.insert(l, {position=t.position, name = "deepwater"}); + end + for _,t in pairs(surface.find_tiles_filtered({name={"nuclear-crater", "nuclear-crater-fill"}})) do + table.insert(l, {position=t.position, name = "water"}); + end + for _,t in pairs(surface.find_tiles_filtered({name={"nuclear-shallow"}})) do + table.insert(l, {position=t.position, name = "water-shallow"}); + end + surface.set_tiles(l); +end + +local function getGlobal() + return global; +end +remote.add_interface("True-Nukes Scripts", { + thermobaricWeaponHit = thermobaric_weapon_hit, + atomicWeaponHit = atomic_weapon_hit, + createBlastSoundsAndFlash = createBlastSoundsAndFlash, + clearAllCraters = clearAllCraters +}); diff --git a/True-Nukes/data-final-fixes.lua b/True-Nukes/data-final-fixes.lua new file mode 100644 index 00000000..907b7f6c --- /dev/null +++ b/True-Nukes/data-final-fixes.lua @@ -0,0 +1,19 @@ + +table.insert(water_tile_type_names, "nuclear-shallow") +table.insert(water_tile_type_names, "nuclear-crater") +table.insert(water_tile_type_names, "nuclear-deep") +table.insert(water_tile_type_names, "nuclear-crater-shallow-fill") +table.insert(water_tile_type_names, "nuclear-deep-shallow-fill") +table.insert(water_tile_type_names, "nuclear-deep-fill") + +if mods["Krastorio2"] then + require("compatibility.K2-final-fixes") +end + +if mods["space-exploration"] then + require("compatibility.SE-final-fixes") +end + +if mods["apm_nuclear_ldinc"] then + require("compatibility.APM-final-fixes") +end diff --git a/True-Nukes/data-updates.lua b/True-Nukes/data-updates.lua new file mode 100644 index 00000000..cac193b5 --- /dev/null +++ b/True-Nukes/data-updates.lua @@ -0,0 +1 @@ +require("prototypes.nukes.data-nukes-buildings") diff --git a/True-Nukes/data.lua b/True-Nukes/data.lua new file mode 100644 index 00000000..5ae5b9ac --- /dev/null +++ b/True-Nukes/data.lua @@ -0,0 +1,152 @@ +require("prototypes.nukes.data-nukes") + + + +if(settings.startup["enable-small-thermobarics"].value or settings.startup["enable-medium-thermobarics"].value or settings.startup["enable-large-thermobarics"].value) then + require("prototypes.thermobarics.data-thermobaric") +end + + + +require("MushroomCloudInBuilt.explosions") +require("MushroomCloudInBuilt.radiation_noise") +require("MushroomCloudInBuilt.ground_zero") +require("MushroomCloudInBuilt.explosion_sizes") + + +local fireutil = require("__base__.prototypes.fire-util") + +data:extend({ + fireutil.add_basic_fire_graphics_and_effects_definitions + { + type = "fire", + name = "thermobaric-wave-fire", + flags = {"placeable-off-grid", "not-on-map"}, + damage_per_tick = {amount = 13 / 60, type = "fire"}, + maximum_damage_multiplier = 6, + damage_multiplier_increase_per_added_fuel = 1, + damage_multiplier_decrease_per_tick = 0.005, + + spawn_entity = "fire-flame-on-tree", + + spread_delay = 300, + spread_delay_deviation = 180, + maximum_spread_count = 100, + + emissions_per_second = 0.005, + + initial_lifetime = 5, + lifetime_increase_by = 150, + lifetime_increase_cooldown = 4, + maximum_lifetime = 1800, + delay_between_initial_flames = 10, + --initial_flame_count = 1, + + }}) + + + + +if(settings.startup["enable-fire-shield"].value) then + data:extend({ + { + type = "energy-shield-equipment", + name = "fire-shield-equipment", + sprite = + { + filename = "__True-Nukes__/graphics/fire-shield-equipment.png", + width = 64, + height = 64, + priority = "medium" + }, + shape = + { + width = 2, + height = 2, + type = "full" + }, + max_shield_value = 1, + energy_source = + { + type = "electric", + buffer_capacity = "2000kJ", + input_flow_limit = "250kW", + usage_priority = "primary-input" + }, + energy_per_shield = "20kJ", + categories = {"armor"} + }, + { + type = "item", + name = "fire-shield-equipment", + icon = "__True-Nukes__/graphics/fire-shield-equipment-icon.png", + icon_size = 64, icon_mipmaps = 4, + placed_as_equipment_result = "fire-shield-equipment", + subgroup = "military-equipment", + order = "a[shield]-aA[fire-shield-equipment]", + default_request_amount = 5, + stack_size = 10 + }, + { + type = "recipe", + name = "fire-shield-equipment", + enabled = false, + energy_required = 30, + ingredients = + { + {"low-density-structure", 10}, + {"empty-barrel", 10} + }, + result = "fire-shield-equipment" + } + }) +end + + + + + + +function add_mushroom_cloud_effect(effect, prefix) + table.insert(effect, 2, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-LUQ", + }) + table.insert(effect, 3, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-RUQ" + }) + table.insert(effect, 4, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-LLQ" + }) + table.insert(effect, 5, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-RLQ" + }) + table.insert(effect, 6, { + type = "create-entity", + entity_name = "nuclear-scorchmark", + check_buildability = true + }) +end + + + +--if(settings.startup["enable-menu-backgrounds"].value)then +-- if(settings.startup["enable-compact-medium-atomics"].value) then +-- require("menu-simulations.nuke-1x20t") +-- end +-- +-- if(settings.startup["enable-compact-medium-atomics"].value) then +-- require("menu-simulations.nuke-2x2t") +-- end +-- +-- if(settings.startup["enable-large-atomics"].value) then +-- require("menu-simulations.nuke-1x1kt") +-- end +--end + + + + diff --git a/True-Nukes/graphics/100kiloton-detonation.png b/True-Nukes/graphics/100kiloton-detonation.png new file mode 100644 index 00000000..f1319740 Binary files /dev/null and b/True-Nukes/graphics/100kiloton-detonation.png differ diff --git a/True-Nukes/graphics/100megaton-detonation.png b/True-Nukes/graphics/100megaton-detonation.png new file mode 100644 index 00000000..a76426d4 Binary files /dev/null and b/True-Nukes/graphics/100megaton-detonation.png differ diff --git a/True-Nukes/graphics/10megaton-detonation.png b/True-Nukes/graphics/10megaton-detonation.png new file mode 100644 index 00000000..f8d69614 Binary files /dev/null and b/True-Nukes/graphics/10megaton-detonation.png differ diff --git a/True-Nukes/graphics/15kiloton-detonation.png b/True-Nukes/graphics/15kiloton-detonation.png new file mode 100644 index 00000000..0ad80c16 Binary files /dev/null and b/True-Nukes/graphics/15kiloton-detonation.png differ diff --git a/True-Nukes/graphics/1gigaton-detonation.png b/True-Nukes/graphics/1gigaton-detonation.png new file mode 100644 index 00000000..9f638103 Binary files /dev/null and b/True-Nukes/graphics/1gigaton-detonation.png differ diff --git a/True-Nukes/graphics/50megaton-detonation.png b/True-Nukes/graphics/50megaton-detonation.png new file mode 100644 index 00000000..1d93e03b Binary files /dev/null and b/True-Nukes/graphics/50megaton-detonation.png differ diff --git a/True-Nukes/graphics/5megaton-detonation.png b/True-Nukes/graphics/5megaton-detonation.png new file mode 100644 index 00000000..3dc6d18e Binary files /dev/null and b/True-Nukes/graphics/5megaton-detonation.png differ diff --git a/True-Nukes/graphics/FOGBANK.png b/True-Nukes/graphics/FOGBANK.png new file mode 100644 index 00000000..75ad19ab Binary files /dev/null and b/True-Nukes/graphics/FOGBANK.png differ diff --git a/True-Nukes/graphics/achievements/15kt-15hrs.png b/True-Nukes/graphics/achievements/15kt-15hrs.png new file mode 100644 index 00000000..f5ba0132 Binary files /dev/null and b/True-Nukes/graphics/achievements/15kt-15hrs.png differ diff --git a/True-Nukes/graphics/achievements/1Gt-spacecraft.png b/True-Nukes/graphics/achievements/1Gt-spacecraft.png new file mode 100644 index 00000000..a4e82551 Binary files /dev/null and b/True-Nukes/graphics/achievements/1Gt-spacecraft.png differ diff --git a/True-Nukes/graphics/achievements/5Mt-orbital.png b/True-Nukes/graphics/achievements/5Mt-orbital.png new file mode 100644 index 00000000..a4e82551 Binary files /dev/null and b/True-Nukes/graphics/achievements/5Mt-orbital.png differ diff --git a/True-Nukes/graphics/achievements/destroy-everything.png b/True-Nukes/graphics/achievements/destroy-everything.png new file mode 100644 index 00000000..caaa391d Binary files /dev/null and b/True-Nukes/graphics/achievements/destroy-everything.png differ diff --git a/True-Nukes/graphics/achievements/detonate-1Gt.png b/True-Nukes/graphics/achievements/detonate-1Gt.png new file mode 100644 index 00000000..68395db6 Binary files /dev/null and b/True-Nukes/graphics/achievements/detonate-1Gt.png differ diff --git a/True-Nukes/graphics/achievements/lose-nuke.png b/True-Nukes/graphics/achievements/lose-nuke.png new file mode 100644 index 00000000..50690861 Binary files /dev/null and b/True-Nukes/graphics/achievements/lose-nuke.png differ diff --git a/True-Nukes/graphics/achievements/multi-force-500t.png b/True-Nukes/graphics/achievements/multi-force-500t.png new file mode 100644 index 00000000..ecaf9e85 Binary files /dev/null and b/True-Nukes/graphics/achievements/multi-force-500t.png differ diff --git a/True-Nukes/graphics/achievements/nuke-self.png b/True-Nukes/graphics/achievements/nuke-self.png new file mode 100644 index 00000000..2c9b7952 Binary files /dev/null and b/True-Nukes/graphics/achievements/nuke-self.png differ diff --git a/True-Nukes/graphics/achievements/shoot-fusion.png b/True-Nukes/graphics/achievements/shoot-fusion.png new file mode 100644 index 00000000..9e569bf4 Binary files /dev/null and b/True-Nukes/graphics/achievements/shoot-fusion.png differ diff --git a/True-Nukes/graphics/achievements/stop-1Gt.png b/True-Nukes/graphics/achievements/stop-1Gt.png new file mode 100644 index 00000000..f58e7692 Binary files /dev/null and b/True-Nukes/graphics/achievements/stop-1Gt.png differ diff --git a/True-Nukes/graphics/achievements/test-15kt.png b/True-Nukes/graphics/achievements/test-15kt.png new file mode 100644 index 00000000..44846290 Binary files /dev/null and b/True-Nukes/graphics/achievements/test-15kt.png differ diff --git a/True-Nukes/graphics/achievements/test-20t.png b/True-Nukes/graphics/achievements/test-20t.png new file mode 100644 index 00000000..29c6269a Binary files /dev/null and b/True-Nukes/graphics/achievements/test-20t.png differ diff --git a/True-Nukes/graphics/artillery/atomic-artillery-californium-map-visualization.png b/True-Nukes/graphics/artillery/atomic-artillery-californium-map-visualization.png new file mode 100644 index 00000000..7e71f99a Binary files /dev/null and b/True-Nukes/graphics/artillery/atomic-artillery-californium-map-visualization.png differ diff --git a/True-Nukes/graphics/artillery/atomic-artillery-fusion-map-visualization.png b/True-Nukes/graphics/artillery/atomic-artillery-fusion-map-visualization.png new file mode 100644 index 00000000..b94a199f Binary files /dev/null and b/True-Nukes/graphics/artillery/atomic-artillery-fusion-map-visualization.png differ diff --git a/True-Nukes/graphics/artillery/atomic-artillery-map-visualization.png b/True-Nukes/graphics/artillery/atomic-artillery-map-visualization.png new file mode 100644 index 00000000..c03b2ded Binary files /dev/null and b/True-Nukes/graphics/artillery/atomic-artillery-map-visualization.png differ diff --git a/True-Nukes/graphics/artillery/thermobaric-artillery-map-visualization.png b/True-Nukes/graphics/artillery/thermobaric-artillery-map-visualization.png new file mode 100644 index 00000000..ab512a67 Binary files /dev/null and b/True-Nukes/graphics/artillery/thermobaric-artillery-map-visualization.png differ diff --git a/True-Nukes/graphics/atomic-artillery-tech.png b/True-Nukes/graphics/atomic-artillery-tech.png new file mode 100644 index 00000000..a3c686cf Binary files /dev/null and b/True-Nukes/graphics/atomic-artillery-tech.png differ diff --git a/True-Nukes/graphics/californium-processing-tech.png b/True-Nukes/graphics/californium-processing-tech.png new file mode 100644 index 00000000..0a5fe35d Binary files /dev/null and b/True-Nukes/graphics/californium-processing-tech.png differ diff --git a/True-Nukes/graphics/californium-processing.png b/True-Nukes/graphics/californium-processing.png new file mode 100644 index 00000000..a1584bae Binary files /dev/null and b/True-Nukes/graphics/californium-processing.png differ diff --git a/True-Nukes/graphics/californium.png b/True-Nukes/graphics/californium.png new file mode 100644 index 00000000..88789e2a Binary files /dev/null and b/True-Nukes/graphics/californium.png differ diff --git a/True-Nukes/graphics/fire-shield-equipment-icon.png b/True-Nukes/graphics/fire-shield-equipment-icon.png new file mode 100644 index 00000000..cf580fd9 Binary files /dev/null and b/True-Nukes/graphics/fire-shield-equipment-icon.png differ diff --git a/True-Nukes/graphics/fire-shield-equipment.png b/True-Nukes/graphics/fire-shield-equipment.png new file mode 100644 index 00000000..1e1226d4 Binary files /dev/null and b/True-Nukes/graphics/fire-shield-equipment.png differ diff --git a/True-Nukes/graphics/fusion-bomb.png b/True-Nukes/graphics/fusion-bomb.png new file mode 100644 index 00000000..a4e82551 Binary files /dev/null and b/True-Nukes/graphics/fusion-bomb.png differ diff --git a/True-Nukes/graphics/fusion-test-building.png b/True-Nukes/graphics/fusion-test-building.png new file mode 100644 index 00000000..2b528409 Binary files /dev/null and b/True-Nukes/graphics/fusion-test-building.png differ diff --git a/True-Nukes/graphics/many-atomic-tech.png b/True-Nukes/graphics/many-atomic-tech.png new file mode 100644 index 00000000..4215a591 Binary files /dev/null and b/True-Nukes/graphics/many-atomic-tech.png differ diff --git a/True-Nukes/graphics/many-small-atomic-tech.png b/True-Nukes/graphics/many-small-atomic-tech.png new file mode 100644 index 00000000..77900ae5 Binary files /dev/null and b/True-Nukes/graphics/many-small-atomic-tech.png differ diff --git a/True-Nukes/graphics/megaton-detonation.png b/True-Nukes/graphics/megaton-detonation.png new file mode 100644 index 00000000..439b6d61 Binary files /dev/null and b/True-Nukes/graphics/megaton-detonation.png differ diff --git a/True-Nukes/graphics/megaton-detonationa.png b/True-Nukes/graphics/megaton-detonationa.png new file mode 100644 index 00000000..a37ca9ab Binary files /dev/null and b/True-Nukes/graphics/megaton-detonationa.png differ diff --git a/True-Nukes/graphics/megaton-nuke/megaton-nuke-base.png b/True-Nukes/graphics/megaton-nuke/megaton-nuke-base.png new file mode 100644 index 00000000..67641bbc Binary files /dev/null and b/True-Nukes/graphics/megaton-nuke/megaton-nuke-base.png differ diff --git a/True-Nukes/graphics/megaton-nuke/megaton-nuke-shadow.png b/True-Nukes/graphics/megaton-nuke/megaton-nuke-shadow.png new file mode 100644 index 00000000..bc608a00 Binary files /dev/null and b/True-Nukes/graphics/megaton-nuke/megaton-nuke-shadow.png differ diff --git a/True-Nukes/graphics/neutron-reflector.png b/True-Nukes/graphics/neutron-reflector.png new file mode 100644 index 00000000..98256aa4 Binary files /dev/null and b/True-Nukes/graphics/neutron-reflector.png differ diff --git a/True-Nukes/graphics/nuclear-test-building.png b/True-Nukes/graphics/nuclear-test-building.png new file mode 100644 index 00000000..6ad0d159 Binary files /dev/null and b/True-Nukes/graphics/nuclear-test-building.png differ diff --git a/True-Nukes/graphics/nuke-explosion-1.png b/True-Nukes/graphics/nuke-explosion-1.png new file mode 100644 index 00000000..81c5424b Binary files /dev/null and b/True-Nukes/graphics/nuke-explosion-1.png differ diff --git a/True-Nukes/graphics/nuke-tech-basic.png b/True-Nukes/graphics/nuke-tech-basic.png new file mode 100644 index 00000000..35d495f8 Binary files /dev/null and b/True-Nukes/graphics/nuke-tech-basic.png differ diff --git a/True-Nukes/graphics/nuke-tech.png b/True-Nukes/graphics/nuke-tech.png new file mode 100644 index 00000000..66da74d7 Binary files /dev/null and b/True-Nukes/graphics/nuke-tech.png differ diff --git a/True-Nukes/graphics/plus-red.png b/True-Nukes/graphics/plus-red.png new file mode 100644 index 00000000..d0ac25f9 Binary files /dev/null and b/True-Nukes/graphics/plus-red.png differ diff --git a/True-Nukes/graphics/rocket.png b/True-Nukes/graphics/rocket.png new file mode 100644 index 00000000..55ce5468 Binary files /dev/null and b/True-Nukes/graphics/rocket.png differ diff --git a/True-Nukes/graphics/rounds/atomic-rounds-magazine-light.png b/True-Nukes/graphics/rounds/atomic-rounds-magazine-light.png new file mode 100644 index 00000000..d93354f9 Binary files /dev/null and b/True-Nukes/graphics/rounds/atomic-rounds-magazine-light.png differ diff --git a/True-Nukes/graphics/rounds/gg-atomic-rounds-magazine.png b/True-Nukes/graphics/rounds/gg-atomic-rounds-magazine.png new file mode 100644 index 00000000..04c00fc7 Binary files /dev/null and b/True-Nukes/graphics/rounds/gg-atomic-rounds-magazine.png differ diff --git a/True-Nukes/graphics/rounds/yg-atomic-rounds-magazine.png b/True-Nukes/graphics/rounds/yg-atomic-rounds-magazine.png new file mode 100644 index 00000000..8932bcd7 Binary files /dev/null and b/True-Nukes/graphics/rounds/yg-atomic-rounds-magazine.png differ diff --git a/True-Nukes/graphics/rounds/yy-atomic-rounds-magazine.png b/True-Nukes/graphics/rounds/yy-atomic-rounds-magazine.png new file mode 100644 index 00000000..6bbabac4 Binary files /dev/null and b/True-Nukes/graphics/rounds/yy-atomic-rounds-magazine.png differ diff --git a/True-Nukes/graphics/small-atomic-tech.png b/True-Nukes/graphics/small-atomic-tech.png new file mode 100644 index 00000000..81c5424b Binary files /dev/null and b/True-Nukes/graphics/small-atomic-tech.png differ diff --git a/True-Nukes/graphics/text/text_0_1t.png b/True-Nukes/graphics/text/text_0_1t.png new file mode 100644 index 00000000..6ea93892 Binary files /dev/null and b/True-Nukes/graphics/text/text_0_1t.png differ diff --git a/True-Nukes/graphics/text/text_0_1tx20.png b/True-Nukes/graphics/text/text_0_1tx20.png new file mode 100644 index 00000000..49cd7650 Binary files /dev/null and b/True-Nukes/graphics/text/text_0_1tx20.png differ diff --git a/True-Nukes/graphics/text/text_0_5t.png b/True-Nukes/graphics/text/text_0_5t.png new file mode 100644 index 00000000..0eea2be1 Binary files /dev/null and b/True-Nukes/graphics/text/text_0_5t.png differ diff --git a/True-Nukes/graphics/text/text_0_5tx20.png b/True-Nukes/graphics/text/text_0_5tx20.png new file mode 100644 index 00000000..dd0a0f73 Binary files /dev/null and b/True-Nukes/graphics/text/text_0_5tx20.png differ diff --git a/True-Nukes/graphics/text/text_100Mt.png b/True-Nukes/graphics/text/text_100Mt.png new file mode 100644 index 00000000..898fad5d Binary files /dev/null and b/True-Nukes/graphics/text/text_100Mt.png differ diff --git a/True-Nukes/graphics/text/text_100kt.png b/True-Nukes/graphics/text/text_100kt.png new file mode 100644 index 00000000..ddd1a6e7 Binary files /dev/null and b/True-Nukes/graphics/text/text_100kt.png differ diff --git a/True-Nukes/graphics/text/text_10Mt.png b/True-Nukes/graphics/text/text_10Mt.png new file mode 100644 index 00000000..c96c917a Binary files /dev/null and b/True-Nukes/graphics/text/text_10Mt.png differ diff --git a/True-Nukes/graphics/text/text_15kt+.png b/True-Nukes/graphics/text/text_15kt+.png new file mode 100644 index 00000000..d8cce562 Binary files /dev/null and b/True-Nukes/graphics/text/text_15kt+.png differ diff --git a/True-Nukes/graphics/text/text_15kt.png b/True-Nukes/graphics/text/text_15kt.png new file mode 100644 index 00000000..7385bf6e Binary files /dev/null and b/True-Nukes/graphics/text/text_15kt.png differ diff --git a/True-Nukes/graphics/text/text_1Gt.png b/True-Nukes/graphics/text/text_1Gt.png new file mode 100644 index 00000000..fa8fe0fd Binary files /dev/null and b/True-Nukes/graphics/text/text_1Gt.png differ diff --git a/True-Nukes/graphics/text/text_1Mt.png b/True-Nukes/graphics/text/text_1Mt.png new file mode 100644 index 00000000..8a50e635 Binary files /dev/null and b/True-Nukes/graphics/text/text_1Mt.png differ diff --git a/True-Nukes/graphics/text/text_1kt.png b/True-Nukes/graphics/text/text_1kt.png new file mode 100644 index 00000000..b36d1741 Binary files /dev/null and b/True-Nukes/graphics/text/text_1kt.png differ diff --git a/True-Nukes/graphics/text/text_20t.png b/True-Nukes/graphics/text/text_20t.png new file mode 100644 index 00000000..0e769193 Binary files /dev/null and b/True-Nukes/graphics/text/text_20t.png differ diff --git a/True-Nukes/graphics/text/text_2t.png b/True-Nukes/graphics/text/text_2t.png new file mode 100644 index 00000000..0c133beb Binary files /dev/null and b/True-Nukes/graphics/text/text_2t.png differ diff --git a/True-Nukes/graphics/text/text_4t.png b/True-Nukes/graphics/text/text_4t.png new file mode 100644 index 00000000..7489733f Binary files /dev/null and b/True-Nukes/graphics/text/text_4t.png differ diff --git a/True-Nukes/graphics/text/text_500t.png b/True-Nukes/graphics/text/text_500t.png new file mode 100644 index 00000000..31da4407 Binary files /dev/null and b/True-Nukes/graphics/text/text_500t.png differ diff --git a/True-Nukes/graphics/text/text_50Mt.png b/True-Nukes/graphics/text/text_50Mt.png new file mode 100644 index 00000000..5d02df4f Binary files /dev/null and b/True-Nukes/graphics/text/text_50Mt.png differ diff --git a/True-Nukes/graphics/text/text_5Mt.png b/True-Nukes/graphics/text/text_5Mt.png new file mode 100644 index 00000000..ffee7b4c Binary files /dev/null and b/True-Nukes/graphics/text/text_5Mt.png differ diff --git a/True-Nukes/graphics/text/text_8t.png b/True-Nukes/graphics/text/text_8t.png new file mode 100644 index 00000000..ebce20bc Binary files /dev/null and b/True-Nukes/graphics/text/text_8t.png differ diff --git a/True-Nukes/graphics/thermobaric-tech.png b/True-Nukes/graphics/thermobaric-tech.png new file mode 100644 index 00000000..b30220dd Binary files /dev/null and b/True-Nukes/graphics/thermobaric-tech.png differ diff --git a/reskins-library_2.1.4/graphics/icons/lights/fuel-cell-light.png b/True-Nukes/graphics/tritium-breeder-fuel-cell-light.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/lights/fuel-cell-light.png rename to True-Nukes/graphics/tritium-breeder-fuel-cell-light.png diff --git a/True-Nukes/graphics/tritium-breeder-fuel-cell.png b/True-Nukes/graphics/tritium-breeder-fuel-cell.png new file mode 100644 index 00000000..90a273bc Binary files /dev/null and b/True-Nukes/graphics/tritium-breeder-fuel-cell.png differ diff --git a/True-Nukes/graphics/tritium-canister-light.png b/True-Nukes/graphics/tritium-canister-light.png new file mode 100644 index 00000000..0b34a0e0 Binary files /dev/null and b/True-Nukes/graphics/tritium-canister-light.png differ diff --git a/True-Nukes/graphics/tritium-canister.png b/True-Nukes/graphics/tritium-canister.png new file mode 100644 index 00000000..9424bbd6 Binary files /dev/null and b/True-Nukes/graphics/tritium-canister.png differ diff --git a/True-Nukes/graphics/tritium-extraction.png b/True-Nukes/graphics/tritium-extraction.png new file mode 100644 index 00000000..c91cec6f Binary files /dev/null and b/True-Nukes/graphics/tritium-extraction.png differ diff --git a/True-Nukes/graphics/tritium-processing.png b/True-Nukes/graphics/tritium-processing.png new file mode 100644 index 00000000..d0964d09 Binary files /dev/null and b/True-Nukes/graphics/tritium-processing.png differ diff --git a/True-Nukes/graphics/used-up-tritium-breeder-fuel-cell.png b/True-Nukes/graphics/used-up-tritium-breeder-fuel-cell.png new file mode 100644 index 00000000..04e228b6 Binary files /dev/null and b/True-Nukes/graphics/used-up-tritium-breeder-fuel-cell.png differ diff --git a/True-Nukes/info.json b/True-Nukes/info.json new file mode 100644 index 00000000..51f9b6ca --- /dev/null +++ b/True-Nukes/info.json @@ -0,0 +1,26 @@ +{ + "name": "True-Nukes", + "version": "0.3.33", + "title": "True Nukes", + "author": "BicycleEater", + "description": "Adds realistic nuclear blasts, and more nuclear options.", + "homepage": "https://github.com/More-Wrong/Factorio-True-Nukes", + "factorio_version": "1.1", + "dependencies": [ + "Warheads", + "? SchallTankPlatoon", + "? Aircraft", + "? bobelectronics", + "? bobwarfare", + "? bobplates", + "? True-Nukes-Graphics", + "? apm_nuclear_ldinc", + "? PlutoniumEnergy", + "? Nuclear Fuel", + "? Clowns-Nuclear", + "? Clowns-AngelBob-Nuclear", + "? space-exploration", + "? Krastorio2" + ] +} + diff --git a/True-Nukes/locale/en/locale.cfg b/True-Nukes/locale/en/locale.cfg new file mode 100644 index 00000000..08e02e32 --- /dev/null +++ b/True-Nukes/locale/en/locale.cfg @@ -0,0 +1,488 @@ +[warhead-name] +-atomic-0_1t=0.1t atomic warhead +-atomic-0_5t=0.5t atomic warhead +-atomic-2t=2t atomic warhead +-atomic-4t=4t atomic warhead +-atomic-8t=8t atomic warhead +-atomic-20t=20t atomic warhead +-atomic-500t=500t atomic warhead +-atomic-1kt=1kt atomic warhead +-atomic-15kt=15kt atomic warhead + +-atomic-2-stage-15kt=15kt atomic warhead (multi stage) +-atomic-2-stage-100kt=100kt atomic warhead +-atomic-2-stage-1Mt=1Mt atomic warhead +-atomic-2-stage-5Mt=5Mt atomic warhead +-atomic-2-stage-10Mt=10Mt atomic warhead +-atomic-2-stage-50Mt=50Mt atomic warhead +-atomic-2-stage-100Mt=100Mt atomic warhead +-atomic-2-stage-1Gt=1Gt atomic warhead + +-thermobaric-1=Small thermobaric warhead +-thermobaric-2=Medium thermobaric warhead +-thermobaric-3=Large thermobaric warhead + +[warhead-description] + +-atomic-0_1t=A warhead with a 0.1t yield.\nAt the limit of how small a nuclear weapon can be made, but nonetheless devastating against single targets, killing virtually anything it hits and causing substantial damage within 5m. +-atomic-0_5t=A warhead with a 0.5t yield.\nVery limited broader damage, but nonetheless devastating against single targets, killing virtually anything it hits and causing substantial damage within 20m. +-atomic-2t=A warhead with a 2t yield.\nLimited broader damage, but devastating against grouped targets, killing virtually anything in a small area and causing substantial damage within 40m. + +-atomic-4t=A warhead with a 4t yield.\nLimited broader damage, but devastating against grouped targets and smaller bases, killing virtually anything in a moderate area and causing substantial damage within 60m. +-atomic-8t=A warhead with a 8t yield.\nLimited broader damage, but devastating against individual bases, killing virtually anything in a moderate area, and causing substantial damage within 100m. The distance to avoid any damage is ~400m. + +-atomic-20t=A warhead with a 20t yield.\nCapable of flattening medium bases, and crippling larger ones, causing substantial damage within 150m. The distance to avoid any damage is ~600m. + +-atomic-500t=A warhead with a 500t yield.\nCapable of destroying multiple nearby bases, and crippling bases in a huge area, causing substantial damage within 300m. The distance to avoid any damage is ~1.2km. + +-atomic-1kt=A warhead with a 1kt yield.\nCapable of destroying multiple nearby bases, and crippling bases in a huge area, causing substantial damage within 600m. The distance to avoid any damage is ~2.5km. + +-atomic-15kt=A warhead with a 15kt yield.\nPowerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within 1.5km. The distance to avoid any damage is nominally ~6km. + +-atomic-2-stage-15kt=A warhead with a 15kt yield.\nNote that using the weapon in this state is very wasteful.\n Powerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within 1.5km. The distance to avoid any damage is nominally ~6km. + +-atomic-2-stage-100kt=A warhead with a 100kt yield - the largest practical weapon.\nPowerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within ~4km. The distance to avoid any damage is nominally ~15km. + +-atomic-2-stage-1Mt=A warhead with a 1Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~10km. The distance to avoid any damage is nominally ~36km. + +-atomic-2-stage-5Mt=A warhead with a 5Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~20km. The distance to avoid any damage is nominally ~72km. + +-atomic-2-stage-10Mt=A warhead with a 10Mt yield.\nPowerful enough that its crater is the size of a smallish factory, and causing substantial damage within ~28km. The distance to avoid any damage is nominally ~100km. + +-atomic-2-stage-50Mt=A warhead with a 50Mt yield.\nPowerful enough that its crater is the size of an average factory, and causing substantial damage within ~50km. The distance to avoid any damage is nominally ~180km. + +-atomic-2-stage-100Mt=A warhead with a 100Mt yield.\nPowerful enough that its crater is the size of a large factory, and causing substantial damage within ~65km. The distance to avoid any damage is nominally ~240km. + +-atomic-2-stage-1Gt=A warhead with a 1Gt yield.\nPowerful enough that its crater is of a similar scale to a megabase, and causing substantial damage within ~130km. The distance to avoid any damage is nominally ~500km.\nThis is effectively just an unusual way of deleting a save. + +-thermobaric-1=A thermobaric warhead causing moderate damage within 30m +-thermobaric-2=A thermobaric warhead causing moderate damage within 80m +-thermobaric-3=A thermobaric warhead causing moderate damage within 120m + + + +[item-name] +test-pack-atomic-20t-1=Basic 20t nuclear test +test-pack-atomic-500t-1=500t nuclear test +test-pack-atomic-20t-3=Very compact 20t nuclear test +test-pack-atomic-15kt-1=15kt nuclear test +test-pack-atomic-2-stage-100kt-1=100kt nuclear test + + + +TN-warhead-0-1--1=0.1t atomic warhead +TN-warhead-0-1--2=0.1t atomic warhead (compact) +TN-warhead-0-1--3=0.1t atomic warhead (very compact) + +TN-warhead-0-5--1=0.5t atomic warhead +TN-warhead-0-5--2=0.5t atomic warhead (compact) +TN-warhead-0-5--3=0.5t atomic warhead (very compact) + +TN-warhead-2--1=2t atomic warhead +TN-warhead-2--2=2t atomic warhead (compact) +TN-warhead-2--3=2t atomic warhead (very compact) + +TN-warhead-4--1=4t atomic warhead +TN-warhead-4--2=4t atomic warhead (compact) +TN-warhead-4--3=4t atomic warhead (very compact) + +TN-warhead-8--1=8t atomic warhead +TN-warhead-8--2=8t atomic warhead (compact) +TN-warhead-8--3=8t atomic warhead (very compact) + +TN-warhead-20--1=20t atomic warhead +TN-warhead-20--2=20t atomic warhead (compact) +TN-warhead-20--3=20t atomic warhead (very compact) + +TN-warhead-500--1=500t atomic warhead +TN-warhead-500--2=500t atomic warhead (compact) +TN-warhead-500--3=500t atomic warhead (very compact) + +TN-warhead-1k--1=1kt atomic warhead +TN-warhead-1k--2=1kt atomic warhead (compact) +TN-warhead-1k--3=1kt atomic warhead (very compact) + +TN-warhead-15k--1=15kt atomic warhead +TN-warhead-15k--2=15kt atomic warhead (compact) +TN-warhead-15k--3=15kt atomic warhead (very compact) + + +TN-warhead-big--1=3-stage atomic warhead +TN-warhead-big--2=3-stage atomic warhead (compact) +TN-warhead-big--3=3-stage atomic warhead (very compact) + +TN-thermobaric-1=Small thermobaric warhead +TN-thermobaric-2=Medium thermobaric warhead +TN-thermobaric-3=Large thermobaric warhead + + +nuclear-crater-mound=Crater mound + +californium=Californium-251 + + +tritium-breeder-fuel-cell=Tritium breeder fuel cell +advanced-tritium-breeder-fuel-cell=Advanced tritium breeder fuel cell +used-up-tritium-breeder-fuel-cell=Used-up tritium breeder fuel cell +used-up-advanced-tritium-breeder-fuel-cell=Used-up advanced tritium breeder fuel cell +FOGBANK=FOGBANK +neutron-reflector=Neutron reflector +tritium-canister=Tritium canister + +detonation-atomic-2-stage-15kt-1=15 Kiloton Detonation +detonation-atomic-2-stage-15kt-2=15 Kiloton Detonation +detonation-atomic-2-stage-15kt-3=15 Kiloton Detonation +detonation-atomic-2-stage-100kt-1=100 Kiloton Detonation +detonation-atomic-2-stage-100kt-2=100 Kiloton Detonation +detonation-atomic-2-stage-100kt-3=100 Kiloton Detonation + +detonation-atomic-2-stage-1Mt-1=1 Megaton Detonation +detonation-atomic-2-stage-1Mt-2=1 Megaton Detonation +detonation-atomic-2-stage-1Mt-3=1 Megaton Detonation +detonation-atomic-2-stage-5Mt-1=5 Megaton Detonation +detonation-atomic-2-stage-5Mt-2=5 Megaton Detonation +detonation-atomic-2-stage-5Mt-3=5 Megaton Detonation + +detonation-atomic-2-stage-10Mt-1=10 Megaton Detonation +detonation-atomic-2-stage-10Mt-2=10 Megaton Detonation +detonation-atomic-2-stage-10Mt-3=10 Megaton Detonation +detonation-atomic-2-stage-50Mt-1=50 Megaton Detonation +detonation-atomic-2-stage-50Mt-2=50 Megaton Detonation +detonation-atomic-2-stage-50Mt-3=50 Megaton Detonation + +detonation-atomic-2-stage-100Mt-1=100 Megaton Detonation +detonation-atomic-2-stage-100Mt-2=100 Megaton Detonation +detonation-atomic-2-stage-100Mt-3=100 Megaton Detonation + +detonation-atomic-2-stage-1Gt-1=1 Gigaton Detonation + + +nuclear-test-site=Nuclear test site +fusion-test-site=Fusion test site + +[entity-description] +nuclear-test-site=This facility has the capability to study the detonation of a nuclear weapon in detail +fusion-test-site=This facility has the capability to study the detonation of a fusion weapon in detail + +[equipment-name] +fire-shield-equipment=Fire shield equipment + +[entity-name] +dangerous-radiation-cloud=Radiation cloud +lingering-radiation-cloud=Lingering radiation cloud +nuclear-test-site=Nuclear test site +fusion-test-site=Fusion test site + +[recipe-name] +tritium-extraction=Tritium extraction +advanced-tritium-extraction=Advanced tritium extraction +advanced-kovarex-enrichment-process=Advanced kovarex enrichment process +californium-processing=Californium processing +advanced-californium-processing=Advanced californium processing + +[item-description] + +test-pack-atomic-20t-1=To complete this research, place a standard 20t core in a nuclear test building and run away.\nWhen the weapon goes off, the research will be complete.\nIf you happen to have the wrong research selected, don't worry, it will unlock when you change to this research. +test-pack-atomic-500t-1=To complete this research, place a standard 500t core in a nuclear test building and run a very long way away.\nWhen the weapon goes off, the research will be complete.\nIf you happen to have the wrong research selected, don't worry, it will unlock when you change to this research. +test-pack-atomic-20t-3=To complete this research, place a very compact 20t core in a nuclear test building and run away. When the weapon goes off, the research will be (halfway) complete.\nIf you happen to have the wrong research selected, don't worry, it will unlock when you change to this research. +test-pack-atomic-15kt-1=To complete this research, place a standard 15kt core in a nuclear test building and a very very long way away - just keep driving. When the weapon goes off, the research will be (halfway) complete.\nIf you happen to have the wrong research selected, don't worry, it will unlock when you change to this research. +test-pack-atomic-2-stage-100kt-1=To complete this research, set a fusion test building up with the 100kt detonation (using the standard core), put in the core and the tritium, and [font=default-bold]RUN[/font]. You can escape by car, but you do need to get on with it.\nWhen the weapon goes off, the research will be complete.\nIf you happen to have the wrong research selected, don't worry, it will unlock when you change to this research. + + + +detonation-atomic-2-stage-15kt-1=A detonation with a 15kt yield.\nNote that using the weapon in this state is very wasteful.\n Powerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within 1.5km. The distance to avoid any damage is nominally ~6km. +detonation-atomic-2-stage-15kt-2=A detonation with a 15kt yield.\nNote that using the weapon in this state is very wasteful.\n Powerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within 1.5km. The distance to avoid any damage is nominally ~6km. +detonation-atomic-2-stage-15kt-3=A detonation with a 15kt yield.\nNote that using the weapon in this state is very wasteful.\n Powerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within 1.5km. The distance to avoid any damage is nominally ~6km. + +detonation-atomic-2-stage-100kt-1=A detonation with a 100kt yield - the largest practical weapon.\nPowerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within ~4km. The distance to avoid any damage is nominally ~15km. +detonation-atomic-2-stage-100kt-2=A detonation with a 100kt yield - the largest practical weapon.\nPowerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within ~4km. The distance to avoid any damage is nominally ~15km. +detonation-atomic-2-stage-100kt-3=A detonation with a 100kt yield - the largest practical weapon.\nPowerful enough that aiming it at any collection of bases is irrelevant, as it clears such a vast area, causing substantial damage within ~4km. The distance to avoid any damage is nominally ~15km. + +detonation-atomic-2-stage-1Mt-1=A detonation with a 1Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~10km. The distance to avoid any damage is nominally ~36km. +detonation-atomic-2-stage-1Mt-2=A detonation with a 1Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~10km. The distance to avoid any damage is nominally ~36km. +detonation-atomic-2-stage-1Mt-3=A detonation with a 1Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~10km. The distance to avoid any damage is nominally ~36km. + +detonation-atomic-2-stage-5Mt-1=A detonation with a 5Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~20km. The distance to avoid any damage is nominally ~72km. +detonation-atomic-2-stage-5Mt-2=A detonation with a 5Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~20km. The distance to avoid any damage is nominally ~72km. +detonation-atomic-2-stage-5Mt-3=A detonation with a 5Mt yield.\nPowerful enough that it will obliterate an area the size of most factories entirely, down to the grass, and causing substantial damage within ~20km. The distance to avoid any damage is nominally ~72km. + +detonation-atomic-2-stage-10Mt-1=A detonation with a 10Mt yield.\nPowerful enough that its crater is the size of a smallish factory, and causing substantial damage within ~28km. The distance to avoid any damage is nominally ~100km. +detonation-atomic-2-stage-10Mt-2=A detonation with a 10Mt yield.\nPowerful enough that its crater is the size of a smallish factory, and causing substantial damage within ~28km. The distance to avoid any damage is nominally ~100km. +detonation-atomic-2-stage-10Mt-3=A detonation with a 10Mt yield.\nPowerful enough that its crater is the size of a smallish factory, and causing substantial damage within ~28km. The distance to avoid any damage is nominally ~100km. + +detonation-atomic-2-stage-50Mt-1=A detonation with a 50Mt yield.\nPowerful enough that its crater is the size of an average factory, and causing substantial damage within ~50km. The distance to avoid any damage is nominally ~180km. +detonation-atomic-2-stage-50Mt-2=A detonation with a 50Mt yield.\nPowerful enough that its crater is the size of an average factory, and causing substantial damage within ~50km. The distance to avoid any damage is nominally ~180km. +detonation-atomic-2-stage-50Mt-3=A detonation with a 50Mt yield.\nPowerful enough that its crater is the size of an average factory, and causing substantial damage within ~50km. The distance to avoid any damage is nominally ~180km. + +detonation-atomic-2-stage-100Mt-1=A detonation with a 100Mt yield.\nPowerful enough that its crater is the size of a large factory, and causing substantial damage within ~65km. The distance to avoid any damage is nominally ~240km. +detonation-atomic-2-stage-100Mt-2=A detonation with a 100Mt yield.\nPowerful enough that its crater is the size of a large factory, and causing substantial damage within ~65km. The distance to avoid any damage is nominally ~240km. +detonation-atomic-2-stage-100Mt-3=A detonation with a 100Mt yield.\nPowerful enough that its crater is the size of a large factory, and causing substantial damage within ~65km. The distance to avoid any damage is nominally ~240km. + +detonation-atomic-2-stage-1Gt-1=A detonation with a 1Gt yield.\nPowerful enough that its crater is of a similar scale to a megabase, and causing substantial damage within ~130km. The distance to avoid any damage is nominally ~500km.\nThis is effectively just an unusual way of deleting a save. + + + +nuclear-crater-mound=The pile of dirt moved out by a nuclear weapon forming the crater rim. Not craftable, mines to give stone. + +FOGBANK=A strange material made out of [font=default-bold]CLASSIFIED[/font] using [font=default-bold]CLASSIFIED[/font], used for [font=default-bold]CLASSIFIED[/font] inside of [font=default-bold]CLASSIFIED[/font]. Needed for some compact fusion weapons, probably. + +tritium-canister=A canister of purified stabilised tritium. +tritium-breeder-fuel-cell=A nuclear fuel cell specially set up to allow the production of tritium. +advanced-tritium-breeder-fuel-cell=A nuclear fuel cell using neutron reflectors to rapidly produce large amounts of tritium. + +nuclear-test-site=This facility has the capability to study the detonation of a nuclear weapon in detail +fusion-test-site=This facility has the capability to study the detonation of a fusion weapon in detail + +californium=This element is highly radioactive. It has a critical mass of only 5kg, and this can be lowered further using neutron reflectors. These properties make it a great way of producing small nuclear weapons, while still achieving a detonation. + +fire-shield-equipment=This device provides minimal shielding, but can prevent the thing it is attached to from being set on fire by nuclear weapons or thermobaric devices, although it uses a lot of power to do so. (This does not prevent any other form of fire damage, or being set on fire by other means) + +[technology-name] +californium-processing=Californium processing +tritium-processing=Tritium processing +dense-neutron-flux=Dense neutron flux + +thermobaric-weaponry=Thermobaric weaponry + +basic-atomic-weapons=Basic atomic weapons +expanded-atomics=Large atomic weapons +artillery-atomics=Atomic artillery shells +full-fission-atomics=Full fission weapons +californium-weapons=Californium weapons +compact-californium-weapons=Compact californium weapons +compact-full-fission-weapons=Compact fission weapons + +fusion-weapons=Fusion weapons +compact-fusion-weapons=Compact fusion weapons + + +[technology-description] +californium-processing=The low critical mass of Californium allows incredibly small nuclear weapons, allowing them to be used in many more situations. +tritium-processing=A radioactive isotope of hydrogen, only obtainable through the high radiation enviroment inside a nuclear reactor. Useful for backlights on watches, illumating crosshairs on scopes, and making fusion weapons. + +basic-atomic-weapons=A first attempt at forcing fissile material above its critical mass - the core is unwieldy and barely detonates, but the results are nonetheless impressive. +atomic-bomb=Refining the process allows a range of yields from more compact cores, allowing the creation of usable weapons. + +expanded-atomics=Using more fissile material and careful timing, a far more devastating detonation can be created. +full-fission-atomics=Research and experience allows far more complete detonation of the material, allowing the creation of much larger warheads. +artillery-atomics=Making a warhead survive the stresses of firing from an artillery cannon is especially challenging, but allows more convenient deployment of the weapons. + +californium-weapons=The use of californium allows a wide range of special small nuclear warheads, allowing a wide range of dangerous weapons. +compact-californium-weapons=The use of neutron reflectors reduces the critical mass of the fissile material, allowing even more ill-advised weapon choices. + +compact-full-fission-weapons=Using neutron reflectors and californium in larger weapons allows the creation of larger weapons, and worse ways of deploying existing ones. + +fusion-weapons=Using the massive energies from a nuclear detonation, tritium can be made to fuse, with apocalyptic results. For those times when just killing everything on [font=default-bold]half[/font] the map isn't enough.\nBring a fast escape train. +compact-fusion-weapons=Making the fusion cores smaller reduces their potential, but allows them to be used in more diverse circumstances - many of which are suicidal. + +dense-neutron-flux=Using neutron reflectors allow the creation of exotic elements given far shorter exposures. + +thermobaric-weaponry=These weapons use a high level of fuel relative to their oxidizer, resulting in a large blast wave, as the fuel reacts with the air. They don't do much damage, but do it over a wide area. They are not much good against single strong targets, but are great at killing swarms of weaker enemies. They also light lots of fires, so create lots of pollution. + +[tile-name] +nuclear-deep=Deep crater +nuclear-crater=Crater +nuclear-shallow=Shallow crater +nuclear-crater-shallow-fill=Crater with shallow water +nuclear-deep-shallow-fill=Deep crater with shallow water +nuclear-deep-fill=Deep crater, partially filled +nuclear-high=Crater mound + +[tile-description] +nuclear-deep=A deep crater, can fill up with deep water +nuclear-crater=A crater, can fill up with water +nuclear-shallow=A shallow crater, can fill with shallow water +nuclear-crater-shallow-fill=A crater partially filled with water +nuclear-deep-shallow-fill=A deep crater with a shallow layer of water +nuclear-deep-fill=A deep crater partially filled with water +nuclear-high=An impassable mound of dirt, forming the rim of a crater, can be mined manually or with drones + + +[mod-setting-name] +nuke-random-fires=Enable nuclear weapons causing large numbers of short lived fires +nuke-crater-noise=Enable nuclear crater noise +destroy-resources-in-crater=Destroy resources in crater +nukes-cause-pollution=Nukes cause pollution + +large-nuke-fire-scaledown=500t,1kt nuclear weapon fire reduction +huge-nuke-fire-scaledown=15kt scale weapon fire reduction +really-huge-nuke-fire-scaledown=100kt weapon fire reduction + +large-nuke-blast-scaledown=500t,1kt weapon peripheral effect range reduction +huge-nuke-blast-scaledown=15kt scale weapon peripheral effect range reduction +really-huge-nuke-range-scaledown=100kt+ weapon peripheral effect range reduction + +optimise-100kt=Use optimised detonation system for 100kt. + +TN-mushroom-cloud-style-nuclear-flash=Enable nuclear flash (Please note warning) + +small-boom-material=Material for small weapons +small-boom-material-name=Literal name for custom material for small weapons + +boom-material=Material for medium-large weapons +boom-material-name=Literal name for custom material for medium-large weapons + +dead-material=Inert material +dead-material-name=Literal name for custom inert material + +light-material=Light/compact material +light-material-name=Literal name for custom material for light/compact nuclear weapons + +computer-material=Circuit material +computer-material-name=Literal name for custom material for circuits + + + +enable-menu-backgrounds=Add nuke related simulations to menu + +enable-small-thermobarics=Enable small thermobaric warheads +enable-medium-thermobarics=Enable medium thermobaric warheads +enable-large-thermobarics=Enable large thermobaric warheads + +enable-small-atomics=Enable 0.1/0.5t warheads +enable-compact-small-atomics=Enable compact 0.1/0.5t warheads + +enable-medium-atomics=Enable 2/4/8/20t warheads +enable-compact-medium-atomics=Enable compact 2/4/8/20t warheads + +enable-large-atomics=Enable 500t/1kt warheads +enable-compact-large-atomics=Enable compact 500t/1kt warheads + +enable-15kt=Enable 15kt warhead +enable-compact-15kt=Enable compact 15kt warhead + +enable-fusion=Enable 100kt warheads +enable-compact-fusion=Enable compact 100kt warheads + +enable-big-fusion-weapons=Enable fusion warheads to detonate at 1Mt+ + +enable-fusion-building=Enable fusion test building + +enable-nuclear-tests=Enable nuclear tests + +keep-atomic-bomb-without-changes=Retain unlock for vanilla atomic bomb even when unchanged by True-Nukes + + +enable-fire-shield=Enable fire shield + +actually-generate-crater=Generate Crater + + +[mod-setting-description] + +nuke-random-fires=With this setting enabled, nuclear weapons create lots of small, short lived fires, which can cause lag issues, but create a nice scorched effect. +nuke-crater-noise=With this setting enabled some noise is produced at the edge of the larger craters to make them seem more natural. +destroy-resources-in-crater=This setting can be used to make sure that resources aren't destroyed by nuclear weapons at all. No guarentees are made about this looking natural with tile transitions +nukes-cause-pollution=Nukes cause pollution + +large-nuke-fire-scaledown=Since the large nukes are so huge, this setting reduces the number of fires created in the crater. This can significantly improve performance, however the bare crater does not look as devastated. (A value of 2 here results in a halving of the number of fires) +huge-nuke-fire-scaledown=Since the larger nukes are so huge, this setting reduces the number of fires created in the crater. This can significantly improve performance, and few living creatures survive close enough to see the crater anyway, however the bare crater does not look as devastated. (A value of 2 here results in a halving of the number of fires) +really-huge-nuke-fire-scaledown=Since the 100kt nuke is so huge, this setting reduces the number of fires created in the crater. This can significantly improve performance, and few living creatures survive close enough to see the crater anyway, however the bare crater does not look as devastated. (A value of 2 here results in a halving of the number of fires) This is very important for the 100kt, and can prevent the game crashing from running out of memory. + +large-nuke-range-scaledown=Since the large nukes are so huge, this setting reduces simulated range of the blast and thermal damage. This can significantly improve performance, as the further out the wave goes, the more entities are hit. This does not increase the amount of world loaded, so a hard cutoff will still be present in unexplored areas. The default will usually stop at about the point where the blast is not longer destroying many buildings, only damaging them. (A value of 2 here results in a halving of the blast radius) +huge-nuke-range-scaledown=Since the 15kt nukes are so huge, this setting reduces simulated range of the blast and thermal damage. This can significantly improve performance, as the further out the wave goes, the more entities are hit. This does not increase the amount of world loaded, so a hard cutoff will still be present in unexplored areas. The default will usually stop at about the point where the blast is not longer destroying many buildings, only damaging them. (A value of 2 here results in a halving of the blast radius) +really-huge-nuke-range-scaledown=Since the 100kt nukes are so huge, this setting reduces simulated range of the blast and thermal damage. This can significantly improve performance, as the further out the wave goes, the more entities are hit. This does not increase the amount of world loaded, so a hard cutoff will still be present in unexplored areas. The default will usually stop at about the point where the blast is not longer destroying many buildings, only damaging them. (A value of 2 here results in a halving of the blast radius) + + + + + +enable-compact-small-atomics=Does nothing if "Enable 0.1/0.5t warheads" disabled + +enable-compact-medium-atomics=Does nothing if "Enable 2/4/8/20t warheads" disabled + +enable-large-atomics=Enable 500t/1kt warheads +enable-compact-large-atomics=Does nothing if "Enable 500t/1kt warheads" disabled + +enable-15kt=Enable 15kt warhead +enable-compact-15kt=Does nothing if "Enable 15kt warheads" disabled + +enable-fusion=Enable 100kt warheads +enable-compact-fusion=Does nothing if "Enable 100kt warheads" disabled + +enable-big-fusion-weapons=Does nothing if "Enable 100kt warheads" disabled + +enable-fusion-building=If this is disabled and "Enable nuclear tests" enabled, the later fusion weapons may be inaccessible. + +enable-nuclear-tests=Enable nuclear tests + +keep-atomic-bomb-without-changes=For compatability, so you can unlock the vannila nuke without any changes having been made to it. + + + + + + + +small-boom-material=What material should be used for low yield weapons?\nSame as medium-large - same material will be used as is used for larger weapons - usually Uranium-235\nTrue Nukes Default - uses Californium-251\nMod dependant - uses whatever other installed mods would put in this place, and defaults to the True Nukes varient\nCustom - uses whatever is in the box below. +small-boom-material-name=The literal in-game name for the material to be used - no guarantee of balance. + +boom-material=What material should be used for medium-large weapons?\nTrue Nukes Default - uses Uranium-235\nMod dependant - uses whatever other installed mods would put in this place, and defaults to Uranium-235\nCustom - uses whatever is in the box below. +boom-material-name=The literal in-game name for the material to be used - no guarantee of balance. + +dead-material=What material should be used as the inert material?\nTrue Nukes Default - uses Uranium-238\nMod dependant - uses whatever other installed mods would put in this place, and defaults to Uranium-238\nCustom - uses whatever is in the box below. +dead-material-name=The literal in-game name for the material to be used - no guarantee of balance. + +computer-material=What material should be used as the circuit material?\nTrue Nukes Default - uses Processing units\nMod dependant - uses whatever other installed mods would put in this place, and defaults to Processing units\nCustom - uses whatever is in the box below. +computer-material-name=The literal in-game name for the material to be used - no guarantee of balance. + +light-material=What material should be used as the light material?\nTrue Nukes Default - uses Low density structure\nMod dependant - uses whatever other installed mods would put in this place, and defaults to Low density structure\nCustom - uses whatever is in the box below. +light-material-name=The literal in-game name for the material to be used - no guarantee of balance. + +TN-mushroom-cloud-style-nuclear-flash=If enabled, nuclear explosions will cause a bright flash in their vincinity.\n\nEPILEPSY WARNING:\nSome persons may experience epileptic seizures if they are exposed to certain light frequencies, flickering lights or geometric forms/patterns. In this case I strongly recommend to disable this option! + + + + +optimise-100kt=Always used for nukes >=1Mt. This causes damage to only be applied when a chunk loads. This may break many other mods, but is a lot quicker, uses less memory, and allows bigger nukes. It still has to proccess any already-generated chunks, so detonating bigger nukes in factories is still slow. + +enable-fire-shield=This enables the fire shield equiptment. The equiptment is unrealistic and is only there to facilitate the use of modded vehicles which may otherwise burn to death a little too easily. + +actually-generate-crater=Disabling this removes the crater entirely - this is only here to remove issues around destroying resources, although it presents a very substantial performance improvement. + +[string-mod-setting] +small-boom-material-same-as-boom=Same as medium-large +small-boom-material-true-nukes-default=True Nukes Default +small-boom-material-mod-dependant=Mod dependant +small-boom-material-custom=Custom + +boom-material-true-nukes-default=True Nukes Default +boom-material-mod-dependant=Mod dependant +boom-material-custom=Custom + +dead-material-true-nukes-default=True Nukes Default +dead-material-mod-dependant=Mod dependant +dead-material-custom=Custom + + + + +[achievement-name] +test-20t=I guess it worked +test-15kt=Trinity: I am become death +detonate-1Gt=How I learned to stop worrying and love the bomb +stop-1Gt=0:00:01 +shoot-fusion=Would you mind not shooting at the thermonuclear weapons? +lose-nuke=Broken arrow +15kt-15hrs=Arms race +nuke-self=That was one spicy meatball! +destroy-everything=Back to the stone age +multi-force-500t=Mutually assured destruction + + +[achievement-description] +test-20t=Complete a 20t nuclear test. +test-15kt=Complete a 15kt nuclear test. +detonate-1Gt=Detonate a 1Gt fusion weapon. +stop-1Gt=Destroy or otherwise prevent the detonation of a 1Gt fusion weapon after it has begun its countdown. +shoot-fusion=Shoot a thermonuclear weapon. +lose-nuke=Die with a nuclear core or weapon on your person. +15kt-15hrs=Perform a 15kt nuclear test within 15 hours. +nuke-self=Incinerate yourself in the fireball of your own nuclear weapon. +destroy-everything=Destroy your entire factory in an instant using a nuclear weapon.\n(Strictly: using only the fireball and thermal damage of a nuke, reduce your factory from over 1000 machines to less than 20 - machines including assembling machines, furnaces, chemical plants etc. but NOT mining drills.) +multi-force-500t=Have more than one major nuclear power in a multiplayer game.\n(Strictly: have more than one force perform a 500t nuclear test). + + +[script-text] +required-tests=Need __1__ __2__ + diff --git a/True-Nukes/menu-simulations/control-script.lua b/True-Nukes/menu-simulations/control-script.lua new file mode 100644 index 00000000..50dfeffd --- /dev/null +++ b/True-Nukes/menu-simulations/control-script.lua @@ -0,0 +1,1581 @@ + +-- All attribution for the part of this copied from MushroomCloud remains with MushroomCloud, as stated in the attribution file in the MushroomCloud directory + +return [[script.on_init(function() onInit() end) + +function onInit() + global.TN_shockwave_approaching = global.TN_shockwave_approaching or false + global.TN_shockwave_impact_tick = global.TN_shockwave_impact_tick or {} + global.TN_lightEffects = global.TN_lightEffects or {} + -- WIP +end + +function dist_a_b(PositionA, PositionB) + return math.sqrt((PositionB.x - PositionA.x)^2+(PositionB.y-PositionA.y)^2) +end + +function shockwaveTravelTimeInTicks(distance) + return (distance*60)/330 + -- WIP +end + +function createBlastSoundsAndFlash(position, surface, radius_1, radius_2, radius_3, radius_4, radius_radiation, light_scale) + local evtSurfaceID + if surface then + evtSurfaceID = surface.index + end + local dist = 0 + local renderFlashForPlayers = {} + for i, player in pairs(game.connected_players) do + if player.mod_settings["TN-mushroom-cloud-style-nuclear-flash"].value == true then + renderFlashForPlayers[#renderFlashForPlayers + 1] = player + end + end + local flashBase + local flash + if #renderFlashForPlayers > 0 then + flashBase = rendering.draw_light{sprite = "utility/light_medium", scale = 5*light_scale, intensity = 1, minimum_darkness = 0, + target = position, surface = surface, time_to_live = 300, players = renderFlashForPlayers} + flash = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 5*light_scale, y_scale = 5*light_scale, render_layer = "light-effect", + minimum_darkness = 0, tint = {0.95, 0.95, 1, 1}, target = position, surface = surface, time_to_live = 300, players = renderFlashForPlayers} + end + local lightGlow = rendering.draw_light{sprite = "utility/light_medium", scale = 50*light_scale, intensity = 0.4, minimum_darkness = 0, + target = position, surface = surface, color = {1, 0.5, 0.2, 0.1}, time_to_live = 500} + local lightBase = rendering.draw_light{sprite = "utility/light_medium", scale = 20*light_scale, intensity = 1, minimum_darkness = 0, + target = position, surface = surface, time_to_live = 500} + local lightSurface = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 20*light_scale, y_scale = 17*light_scale, render_layer = "lower-object-above-shadow", + minimum_darkness = 0, tint = {0.75, 0.65, 0.6, 0.2}, target = position, surface = surface, time_to_live = 500} + local lightObjects = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 25*light_scale, y_scale = 21.5*light_scale, render_layer = "entity-info-icon-above", + minimum_darkness = 0, tint = {1, 0.9, 0.5, 0.4}, target = position, surface = surface, time_to_live = 500} + local lightCenterGlow = rendering.draw_sprite{sprite = "utility/light_medium", x_scale = 10*light_scale, y_scale = 8*light_scale, render_layer = "light-effect", + minimum_darkness = 0, tint = {1, 0.5, 0.2, 0.4}, target = position, surface = surface, time_to_live = 500} + local effects = {} + effects.maxDur = 500 + effects.ttl = 500 + effects.tickstart = game.tick + effects.tickend = game.tick + effects.ttl + effects.ids = {glow = lightGlow, light = lightBase, surface = lightSurface, objects = lightObjects, center = lightCenterGlow} + if flashBase ~= nil then + + effects.flashDuration = 5 + effects.flashMaxScale = 100*light_scale + effects.flashTransition = 300 + effects.flashTransitionScale = 20 + effects.flashTransitionStartFadeOut = 150 + local flashTransitionColorStart = {0.95, 0.95, 1, 1} + local flashTransitionColorEnd = {1, 0.5, 0.2, 0.4} + local flashTransitionTicks = effects.flashDuration - effects.flashTransitionStartFadeOut + local flashTransitionColorStep = { + (flashTransitionColorStart[1] - flashTransitionColorEnd[1]) / flashTransitionTicks, + (flashTransitionColorStart[2] - flashTransitionColorEnd[2]) / flashTransitionTicks, + (flashTransitionColorStart[3] - flashTransitionColorEnd[3]) / flashTransitionTicks, + (flashTransitionColorStart[4] - flashTransitionColorEnd[4]) / flashTransitionTicks} + effects.flashTransitionColorStep = flashTransitionColorStep + effects.flashTransitionColorEnd = flashTransitionColorEnd + effects.ids.flashBase = flashBase + effects.ids.flash = flash + end + effects.light_scale = light_scale; + if global.TN_lightEffects == nil then + global.TN_lightEffects = {} + end + + global.TN_lightEffects[#global.TN_lightEffects+1] = effects + + for i, player in pairs(game.connected_players) do + if player.surface.index == evtSurfaceID then + dist = dist_a_b(player.position, position) + if dist < radius_1 then + player.play_sound{path = "nuclear-detonation-close-proximity"} + --player.surface.create_entity({name = "nuclears-detonation-close-proximity", position = player.position}) + elseif dist < radius_2 then + player.play_sound{path = "nuclear-detonation-in-vincinity"} + --player.surface.create_entity({name = "nuclear-detonation-in-vincinity", position = player.position}) + elseif dist < radius_3 then + player.play_sound{path = "nuclear-detonation-distant-boom"} + --player.surface.create_entity({name = "nuclear-detonation-distant-boom", position = player.position}) + elseif dist < radius_4 then + player.play_sound{path = "nuclear-detonation-far-away"} + --player.surface.create_entity({name = "nuclear-detonation-far-away", position = player.position}) + end + if dist < radius_radiation then + player.play_sound{path = "nuclear-detonation-radiation-ticking"} + end + end + end +end + +function everyTick(event) + if global.TN_lightEffects == nil then + global.TN_lightEffects = {} + end + if global.TN_lightEffects ~= nil then + for i, effects in pairs(global.TN_lightEffects) do + effects.ttl = effects.ttl - 1 + if effects.ttl <= 0 then + global.TN_lightEffects[i] = nil + else + local maxDur = effects.maxDur + if effects.ids.flash ~= nil then + local fs = 0 + local ftProgress = 0 + + local flashBase = effects.ids.flashBase + local flash = effects.ids.flash + + if (maxDur - effects.ttl) < effects.flashDuration then + fs = ((maxDur - effects.ttl) / effects.flashDuration) * effects.flashMaxScale + + rendering.set_scale(flashBase, fs) + rendering.set_x_scale(flash, fs) + rendering.set_y_scale(flash, fs) + + elseif (maxDur - effects.ttl) < effects.flashTransition then + fs = effects.flashMaxScale - ((effects.flashMaxScale - effects.flashTransitionScale) / (effects.flashTransition - effects.flashDuration)) * (maxDur - effects.ttl - effects.flashDuration) + ftProgress = (effects.flashMaxScale - fs) / effects.flashTransitionScale + + rendering.set_x_scale(flash, fs) + rendering.set_y_scale(flash, fs) + rendering.set_intensity(flashBase, 1 - ftProgress) + + if (maxDur - effects.ttl) < effects.flashTransitionStartFadeOut then + local fctProgress = (maxDur - effects.ttl - effects.flashDuration) / (effects.flashTransitionStartFadeOut - effects.flashDuration) + + local currentColor = rendering.get_color(flash) + + rendering.set_color(flash, {currentColor.r + effects.flashTransitionColorStep[1], currentColor.g + effects.flashTransitionColorStep[2], currentColor.b + effects.flashTransitionColorStep[3], currentColor.a + effects.flashTransitionColorStep[4]}) + else + local ffaProgress = 1 - ((maxDur - effects.ttl - effects.flashTransitionStartFadeOut) / (effects.flashTransition - effects.flashTransitionStartFadeOut)) + + rendering.set_color(flash, {effects.flashTransitionColorEnd[1] * ffaProgress, effects.flashTransitionColorEnd[2] * ffaProgress, effects.flashTransitionColorEnd[3] * ffaProgress, effects.flashTransitionColorEnd[4] * ffaProgress}) + end + end + end + + local p0 = math.min(math.max(0, (effects.ttl - 100)) / 400, 1) + local p02 = math.min(math.max(0, (effects.ttl - 200)) / 300, 1) + local p03 = math.min(math.max(0, (effects.ttl - 200)) / 300, 1) + local p1 = math.min(effects.ttl / 400, 1) + local p2 = math.min(effects.ttl / 300, 1) + local p3 = math.min(effects.ttl / 240, 1) + local p4 = math.min(effects.ttl / 180, 1) + local a1 = math.max((maxDur - effects.ttl) / 250, 1) + local a2 = math.min((maxDur - effects.ttl) / 120, 1) + local a3 = math.min((maxDur / effects.ttl) * 5, 2) + + + local glow = effects.ids.glow + local light = effects.ids.light + local surface = effects.ids.surface + local objects = effects.ids.objects + local center = effects.ids.center + + rendering.set_intensity(glow, p2 * 0.4) + rendering.set_intensity(light, a1 * p3 * 1) + rendering.set_scale(light, a3 * p3 * 20 * effects.light_scale) + rendering.set_color(light, {1, math.min(a3/2 * p4, 1), math.min(a3/2 * p4, 1), 1}) + + rendering.set_color(surface, {p02 * 0.75, p02 * 0.65, p02 * 0.6, p02 * 0.2}) + rendering.set_x_scale(surface, p1 * 20 * effects.light_scale) + rendering.set_y_scale(surface, p1 * 17 * effects.light_scale) + + rendering.set_color(objects, {p02 * 1, p02 * 0.9, p02 * 0.5, p02 * 0.4}) + rendering.set_x_scale(objects, p2 * 25 * effects.light_scale) + rendering.set_y_scale(objects, p2 * 21.5 * effects.light_scale) + + rendering.set_color(center, {p03 * a2 * 1, p03 * a2 * 0.3, p03 * a2 * 0.1, p03 * a2 * 0.4}) + rendering.set_x_scale(center, p1 * 10 * effects.light_scale) + rendering.set_y_scale(center, p1 * 8 * effects.light_scale) + end + end + end +end + + -- This is the end of stuff coppied from MushroomCloud + + +script.on_init(function() + global.waitingNukeCratersBasic = {} -- a simple array of the craters, {t = the number minutes it has been waiting for, pos = centre of crater, d = diameter too fill, s = surface index} + global.blastWaves = {} -- a simple array, with elements: + --{r = currrent explosion radius, pos = centre position, pow = initial blast multiplier (usually initial r*r) + -- , max = maximum radius, s = surface index, fire = leave fires (true for thermobarics, false for nukes), damage_init = starting damage, speed = how far to jump every round, fire_rad = the radius to which the fire wave is solid + -- , blast_min_damage = amount of extra damage to add all the time, itt = the number of itterations done, doItts = whether to time slice the blast, ittframe = keeps track of frame count for time slicing + -- , force = force of the cause of the explosion - allows allocating kills correctly, cause = allows allocating kills to the originator}) + + global.nukeBuildings = {} -- array of the LuaEntities for any nukeBuildings + + global.cratersFast = {} -- map: cratersFast[surface index][xposition][yposition] = the highest water height in that area (x, y in units of 10) + global.cratersFastData = {} -- map: cratersFastData[surface index] = + -- {synch = 1-4 making deep water travel slower, xCount = number of x chunks on this surface, xCountSoFar = number of x chunks done so far this round, xDone = all x values done so far this round} + global.cratersFastItterationCount = 0 -- the counter of ticks for circling x chunks - counts up to 53 + + + global.cratersSlow = {} -- array of {t = time waiting - 20s units, x = xin units of 32, y = y in units of 32, surface = the surface index} +end) + +-- These allow lookups to find tiles of interest in an area. +local waterAndCraterTypes = {"nuclear-deep", "nuclear-crater", "nuclear-shallow", "nuclear-crater-shallow-fill", "nuclear-deep-shallow-fill", "nuclear-deep-fill", "deepwater", "water", "water-shallow", "water-mud"} + +local waterTypes = {"water-shallow", "water-mud", "nuclear-crater-shallow-fill", "water", "nuclear-deep-shallow-fill", "nuclear-deep-fill", "deepwater"} + +local craterTypes0 = {"nuclear-deep", "nuclear-crater", "nuclear-shallow", "nuclear-crater-shallow-fill", "nuclear-deep-shallow-fill", "nuclear-deep-fill"} +local craterTypes1 = {"nuclear-deep", "nuclear-crater", "nuclear-deep-shallow-fill"} +local craterTypes2 = {"nuclear-deep"} + + +-- These allow water to be emptied, by getting the depth of the ground beneath the water. +local waterDepths = {} +waterDepths["nuclear-shallow"] = -1 +waterDepths["water-shallow"] = -1 +waterDepths["water-mud"] = -1 +waterDepths["nuclear-crater"] = -2 +waterDepths["nuclear-crater-shallow-fill"] = -2 +waterDepths["water"] = -2 +waterDepths["nuclear-deep"] = -3 +waterDepths["nuclear-deep-shallow-fill"] = -3 +waterDepths["nuclear-deep-fill"] = -3 +waterDepths["deepwater"] = -3 +waterDepths["nuclear-high"] = 1 +--everything else is treated as 0 + + +-- these are the heights of water given a tile, as far as nearby tiles are concerned +local waterInCraterGoingOutDepths = {} +waterInCraterGoingOutDepths["nuclear-shallow"] = -10 +waterInCraterGoingOutDepths["water-shallow"] = 0 +waterInCraterGoingOutDepths["water-mud"] = 0 +waterInCraterGoingOutDepths["nuclear-crater"] = -10 +waterInCraterGoingOutDepths["nuclear-crater-shallow-fill"] = -1 +waterInCraterGoingOutDepths["water"] = 0 +waterInCraterGoingOutDepths["nuclear-deep"] = -10 +waterInCraterGoingOutDepths["nuclear-deep-shallow-fill"] = -2 +waterInCraterGoingOutDepths["nuclear-deep-fill"] = -1 +waterInCraterGoingOutDepths["deepwater"] = 0 + +-- these are the waters for different heights, so that we can find the water height in any given area +local waterInCraterGoingOutDepth0Only = {"deepwater", "water", "water-shallow", "water-mud"} +local waterInCraterGoingOutDepth1Only = {"nuclear-crater-shallow-fill", "nuclear-deep-fill"} +local waterInCraterGoingOutDepth2Only = {"nuclear-deep-fill"} + +-- these are the height of water given a tile, for whether that tile will be filled with water +local waterInCraterGoingInDepths = {} +waterInCraterGoingInDepths["nuclear-shallow"] = -1 +waterInCraterGoingInDepths["water-shallow"] = 0 +waterInCraterGoingInDepths["water-mud"] = 0 +waterInCraterGoingInDepths["nuclear-crater"] = -2 +waterInCraterGoingInDepths["nuclear-crater-shallow-fill"] = -1 +waterInCraterGoingInDepths["water"] = 0 +waterInCraterGoingInDepths["nuclear-deep"] = -3 +waterInCraterGoingInDepths["nuclear-deep-shallow-fill"] = -2 +waterInCraterGoingInDepths["nuclear-deep-fill"] = -1 +waterInCraterGoingInDepths["deepwater"] = 0 + +-- these allow empty crater to be created from a height +local depthsForCrater = {} +depthsForCrater[-3] = "nuclear-deep" +depthsForCrater[-2] = "nuclear-crater" +depthsForCrater[-1] = "nuclear-shallow" +depthsForCrater[0] = "nuclear-ground" +depthsForCrater[1] = "nuclear-high" + +-- These allow water to fill craters intelligently +local depthsForCraterWater = {} +depthsForCraterWater[-3] = {} +depthsForCraterWater[-3][-3] = "nuclear-deep" +depthsForCraterWater[-3][-2] = "nuclear-deep-shallow-fill" +depthsForCraterWater[-3][-1] = "nuclear-deep-fill" +depthsForCraterWater[-3][0] = "deepwater" +depthsForCraterWater[-2] = {} +depthsForCraterWater[-2][-2] = "nuclear-crater" +depthsForCraterWater[-2][-1] = "nuclear-crater-shallow-fill" +depthsForCraterWater[-2][0] = "water" +depthsForCraterWater[-1] = {} +depthsForCraterWater[-1][-1] = "nuclear-shallow" +depthsForCraterWater[-1][0] = "water-mud" + +local function doFastCraterFilling(event) + -- fast crater filling + if(global.cratersFast==nil) then + global.cratersFast = {} + end + if(global.cratersFastItterationCount == nil) then + global.cratersFastItterationCount = 0 + end + if(global.cratersFastData == nil) then + global.cratersFastData = {} + end + global.cratersFastItterationCount = global.cratersFastItterationCount + 1 + if(global.cratersFastItterationCount > 53) then + global.cratersFastItterationCount = 1 + end + for surface,chunks in pairs(global.cratersFast) do + global.cratersFastData[surface].synch = global.cratersFastData[surface].synch+1 + if(global.cratersFastData[surface].synch == 5) then + global.cratersFastData[surface].synch = 1 + end + if(global.cratersFastItterationCount == 1) then + global.cratersFastData[surface].xCountSoFar = 0 + global.cratersFastData[surface].xDone = {} + end + for x,xchunks in pairs(chunks) do + if(global.cratersFastData[surface].xDone[x]==nil) then --ignore all the ones we have already done + if(global.cratersFastData[surface].xCountSoFar > global.cratersFastData[surface].xCount*global.cratersFastItterationCount/53) then + break; + end + global.cratersFastData[surface].xDone[x] = 1 + global.cratersFastData[surface].xCountSoFar = global.cratersFastData[surface].xCountSoFar + 1 + for y,foundChunkH in pairs(xchunks) do + local tileChanges = {} + local ghostChanges = {} + + local targetTiles + local chunkH = foundChunkH + if(chunkH >= 0 and global.cratersFastData[surface].synch==1) then + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*10, y*10}, {x*10+10, y*10+10}}, name=craterTypes0} + elseif(chunkH >= -1 and (global.cratersFastData[surface].synch == 3 or global.cratersFastData[surface].synch == 1)) then + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*10, y*10}, {x*10+10, y*10+10}}, name=craterTypes1} + else + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*10, y*10}, {x*10+10, y*10+10}}, name=craterTypes2} + end + local hasHeightDiff = false; + for _,t in pairs(targetTiles) do + local heightDiff = 0; + local currentH = waterInCraterGoingInDepths[t.name]; + chunkH = math.max(chunkH, currentH) + local h1 = waterInCraterGoingOutDepths[game.surfaces[surface].get_tile(t.position.x, t.position.y+1).name]; + local h2 = waterInCraterGoingOutDepths[game.surfaces[surface].get_tile(t.position.x, t.position.y-1).name]; + local h3 = waterInCraterGoingOutDepths[game.surfaces[surface].get_tile(t.position.x+1, t.position.y).name]; + local h4 = waterInCraterGoingOutDepths[game.surfaces[surface].get_tile(t.position.x-1, t.position.y).name]; + if((not (h1 == nil)) and h1>currentH)then + heightDiff = heightDiff+h1-currentH; + chunkH = math.max(chunkH, h1) + end + if((not (h2 == nil)) and h2>currentH)then + heightDiff = heightDiff+h2-currentH; + chunkH = math.max(chunkH, h2) + end + if((not (h3 == nil)) and h3>currentH)then + heightDiff = heightDiff+h3-currentH; + chunkH = math.max(chunkH, h3) + end + if((not (h4 == nil)) and h4>currentH)then + heightDiff = heightDiff+h4-currentH; + chunkH = math.max(chunkH, h4) + end + if(heightDiff>0) then + hasHeightDiff = true; + end + if(heightDiff>0 and (heightDiff>=3 or math.random()*3 regNum and blast.ittframe >=8) then + blast.r = blast.r + blast.speed + blast.ittframe = 1 + blast.itt = 1 + elseif (blast.itt > regNum) then + return + end + + local surface = game.surfaces[blast["s"] ] + local center = blast["pos"] + local sideOffset = blast.speed*1.5 + local extraSpace = blast.speed + + local eHits = pastEHits + + local area = {{}, {}} + + -- Some hard-coded regions for small blasts + local regions = {{{center.x-blast.r/2-sideOffset, center.y+(blast.r-extraSpace)*0.86603-0.5}, {center.x+blast.r/2+sideOffset, center.y+blast.r+1}}, + {{center.x-blast.r/2-sideOffset, center.y-blast.r}, {center.x+blast.r/2+sideOffset, center.y-(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x+(blast.r-extraSpace)*0.86603-0.5, center.y-blast.r/2-sideOffset}, {center.x+blast.r+1, center.y+blast.r/2+sideOffset}}, + {{center.x-blast.r, center.y-blast.r/2-sideOffset}, {center.x-(blast.r-extraSpace)*0.86603+0.5, center.y+blast.r/2+sideOffset}}, + + {{center.x-(blast.r-extraSpace)*0.86603-0.5, center.y+blast.r/2-extraSpace/2-0.5}, {center.x-blast.r/2+extraSpace/2+0.5, center.y+(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x+blast.r/2-extraSpace/2-0.5, center.y+blast.r/2-extraSpace/2-0.5}, {center.x+(blast.r-extraSpace)*0.86603+0.5, center.y+(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x-(blast.r-extraSpace)*0.86603-0.5, center.y-(blast.r-extraSpace)*0.86603-0.5}, {center.x-blast.r/2+extraSpace/2+0.5, center.y-blast.r/2+extraSpace/2+0.5}}, + {{center.x+blast.r/2-extraSpace/2-0.5, center.y-(blast.r-extraSpace)*0.86603-0.5}, {center.x+(blast.r-extraSpace)*0.86603+0.5, center.y-blast.r/2+extraSpace/2+0.5}}} + + if(blast.r<=500 or not blast.doItts) then + area = regions[blast.itt] + else + -- otherwise compute the regions for large area blast-waves + local reg = blast.itt % (regNum/4) + local currentQuadrant = (math.floor(blast.itt/(regNum/4)))%4 + local angleUnit = 2*3.14159/regNum + local angleRelative = math.min(angleUnit*(reg+1), angleUnit*(regNum/4-reg-1)) + local angleStart = angleUnit*((regNum/4)*currentQuadrant+reg) + local overstep = math.sqrt( (blast.r*math.sin(angleRelative))^2+2*blast.r*blast.speed+blast.speed*blast.speed)-blast.r*math.sin(angleRelative)+2; + + + + if(currentQuadrant==0) then + if(reg (blast.r - blast.speed)*(blast.r - blast.speed) and distSq <= blast["r"]*blast["r"]) then + local dist = math.sqrt(xdif*xdif + ydif*ydif) + local damage = blast.pow/distSq*blast.damage_init+blast.blast_min_damage + local t = entity.type + if(t=="curved-rail") then + damage = damage/10 + elseif (t=="straight-rail") then + damage = damage/10 + elseif (t=="transport-belt") then + damage = damage/10 + elseif (t=="land-mine") then + damage = damage/10 + elseif(t=="car" or t=="spider-vehicle") then + if (next(entity.prototype.collision_mask)==nil)then + damage = damage/5 + end + end + if(t=="tree") then + if(blast.fire) then + surface.create_entity{name="fire-flame-on-tree",position=entity.position, initial_ground_flame_count=255} + end + damage = math.random(damage/10, damage) + else + damage = math.random(damage/2, damage*2) + end + if(t=="tree") then + -- If a tree is destroyed, don't bother boing particle effects, just destroy it - huge performance savings + if((((not entity.prototype.resistances) or not entity.prototype.resistances.fire) and entity.health=500000) then + fireShield = e; + break; + end + end + end + if fireShield then + fireShield.energy = fireShield.energy-500000 + else + surface.create_entity{name="fire-sticker", position=entity.position, target=entity} + end + if(cause and cause.valid) then + entity.damage(20, blast.force, "fire", blast.cause) + if(entity.valid)then + entity.damage(40, blast.force, "physical", blast.cause) + end + if(entity.valid and entity.type == "car" and (entity.prototype.max_health >= 1000 or fireShield)) then + entity.damage(80, blast.force, "fire", blast.cause) + end + else + entity.damage(20, blast.force, "fire") + if(entity.valid)then + entity.damage(40, blast.force, "physical") + end + if(entity.valid and entity.type == "car" and (entity.prototype.max_health >= 1000 or fireShield)) then + entity.damage(80, blast.force, "fire") + end + end + elseif blast.fire and entity.valid and (not (entity.type == "tree")) then + if(cause and cause.valid) then + entity.damage(100, blast.force, "fire", blast.cause) + else + entity.damage(100, blast.force, "fire") + end + end + end + end + end + + -- For thermobarics, start all the required fires + if(blast.fire) then + local area = regions[blast.itt] + local tiles = surface.find_tiles_filtered{area=area} + for _,tile in pairs(tiles) do + local xdif = tile.position.x-center.x + local ydif = tile.position.y-center.y + local distSq = xdif*xdif + ydif*ydif + if(distSq > (blast["r"] - blast.speed)*(blast["r"] - blast.speed) and distSq <= blast["r"]*blast["r"]) then + if (blast.fire_rad >= blast.r) then + local chance = math.random(0, blast.fire_rad) + if(chance*chance>distSq) then + surface.create_entity{name="fire-flame",position=tile.position} + else + surface.create_entity{name="thermobaric-wave-fire",position=tile.position} + end + else + local chanceWave = math.random(blast.fire_rad, blast.max) + if(chanceWave*chanceWave>distSq) then + surface.create_entity{name="thermobaric-wave-fire",position=tile.position} + end + end + end + end + end + -- We want to do more regions this frame if the ones we have covered contain very few entities (such as it they are unloaded) + if (blast.ittframe>=8) then + if(blast.itt == regNum) then + blast.r = blast.r + blast.speed + blast.itt = 1 + else + blast.itt = blast.itt+1 + if(not blast.doItts or eHits<4000) then + moveBlast(i, blast,eHits) + end + end + end + if(blast.r>blast.max) then + table.remove(global.blastWaves, i) + end +end + +local function nukeBuildingDetonate(building) + -- A nuke building just launches an artillery shell at itself, much easier than an entire seperate detonation system + if(building.get_recipe().name == "megaton-detonation") then + building.surface.create_entity{name="TN-really-huge-atomic-artillery-projectile", position={building.position.x-1, building.position.y}, target=building, speed=100, max_range=1, force=building.force} + elseif(building.get_recipe().name == "100kiloton-detonation") then + building.surface.create_entity{name="TN-very-big-atomic-artillery-projectile", position={building.position.x-1, building.position.y}, target=building, speed=100, max_range=1, force=building.force} + elseif(building.get_recipe().name == "15kiloton-detonation") then + building.surface.create_entity{name="TN-big-atomic-artillery-projectile", position={building.position.x-1, building.position.y}, target=building, speed=100, max_range=1, force=building.force} + end + building.get_output_inventory().clear(); + building.destroy(); +end + +local function tickHandler(event) + everyTick(event) + if(global.blastWaves ==nil) then + global.blastWaves = {} + end + if(global.nukeBuildings ==nil) then + global.nukeBuildings = {} + end + if(#global.blastWaves>0) then + for i,blast in ipairs(global.blastWaves) do + moveBlast(i,blast,0) + end + end + doFastCraterFilling(event) + if(#global.nukeBuildings>0) then + for i,building in ipairs(global.nukeBuildings) do + if(building.valid) then + if(not building.get_output_inventory().is_empty()) then + nukeBuildingDetonate(building) + elseif (building.crafting_progress > 0 and building.crafting_progress < 0.01) then + -- Force map loading when a nuke is set up + if(building.get_recipe().name == "megaton-detonation") then + building.surface.request_to_generate_chunks(building.position, 3200/32) + elseif(building.get_recipe().name == "100kiloton-detonation") then + building.surface.request_to_generate_chunks(building.position, 2000/32) + elseif(building.get_recipe().name == "15kiloton-detonation") then + building.surface.request_to_generate_chunks(building.position, 1500/32) + end + end + else + table.remove(global.nukeBuildings, i) + end + end + end +end +script.on_event(defines.events.on_tick, tickHandler); + +local function setupCratersToFill(position, outerRadius, innerRadius) + + + + + +end + +local function circularNoise(tableTarget, position, radius, depthMult, sliceCount) + if (settings.global["nuke-crater-noise"].value) then + for num=0,sliceCount do + local slice_w = (math.floor(radius*depthMult/50)+1) + for ang=0,math.ceil(3.1416*2*radius*slice_w*4/(num*num+1)) do + local dist = math.floor(num*slice_w+slice_w*math.random()) + local offset = math.random() + + noise_pos = {x = math.floor(position.x+(dist+radius-1)*math.sin(ang+offset)+0.5), y = math.floor(position.y+(dist+radius-1)*math.cos(ang+offset)+0.5)} + if((position.x-noise_pos.x)*(position.x-noise_pos.x)+(position.y-noise_pos.y)*(position.y-noise_pos.y)<=radius*radius) then + --Do nothing - used to remove rounding errors and prevent hitting the same tile twice + else + if(tableTarget[noise_pos.x]==nil) then + tableTarget[noise_pos.x] = {} + end + tableTarget[noise_pos.x][noise_pos.y] = 1; + end + end + end + end +end + +local function tileNoise(surface, tableTarget, position, radius, depthMult, tileMap, sliceCount) + if (settings.global["nuke-crater-noise"].value) then + for num=0,sliceCount do + local slice_w = (math.floor(radius*depthMult/50)+1) + for ang=0,math.ceil(3.1416*2*radius*slice_w*4/(num*num+1)) do + local dist = math.floor(math.random(num*slice_w, slice_w+num*slice_w)) + local offset = math.random() + + noise_pos = {x = math.floor(position.x+(dist+radius-1)*math.sin(ang+offset)+0.5), y = math.floor(position.y+(dist+radius-1)*math.cos(ang+offset)+0.5)} + cur_tile = surface.get_tile(noise_pos) + if((position.x-noise_pos.x)*(position.x-noise_pos.x)+(position.y-noise_pos.y)*(position.y-noise_pos.y)<=radius+0.5) then + --Do nothing - used to remove rounding errors and prevent hitting the same tile twice + elseif (tileMap[cur_tile.name] == nil) then + if(not(tileMap["default"] ==nil)) then + table.insert(tableTarget, {name = tileMap["default"], position = noise_pos}) + end + else + table.insert(tableTarget, {name = tileMap[cur_tile.name], position = noise_pos}) + end + end + end + end +end + +local function nukeTileChangesHeightAwareHuge(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + local buildingForces = {} + local tileGhosts = {} + local hasBuildings = false + + local tileTable = {} + + -- find interested forces + for _,ghost in pairs(game.surfaces[surface_index].find_entities_filtered{position = position, radius = crater_external_r*1.1+4, name = "entity-ghost"}) do + buildingForces[ghost.force] = 1 + hasBuildings = true + end + --fireball boils water... + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5, name=waterTypes}) do + local cur_tile = game.surfaces[surface_index].get_tile(v.position) + if(waterDepths[cur_tile.name]) then + table.insert(tileTable, {name = depthsForCrater[waterDepths[cur_tile.name] ], position = v.position}) + for _,tileGhost in pairs(game.surfaces[surface_index].find_entities_filtered{position = {v.position.x+0.5, v.position.y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = tileGhost.ghost_name, force = tileGhost.force, pos = tileGhost.position}) + end + end + end + local groundNoise = {} + circularNoise(groundNoise, position, fireball_r, 1, 3) + for x,xtiles in pairs(groundNoise) do + for y,_ in pairs(xtiles) do + if not(waterDepths[game.surfaces[surface_index].get_tile(x, y).name] == nil) then + table.insert(tileTable, {name = depthsForCrater[waterDepths[game.surfaces[surface_index].get_tile(x, y).name] ], position = {x = x, y = y}}) + for _,tileGhost in pairs(game.surfaces[surface_index].find_entities_filtered{position = {x = x+0.5, y = y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = tileGhost.ghost_name, force = tileGhost.force, pos = tileGhost.position}) + end + end + end + end + -- make the crater + for x = math.floor(-crater_external_r+0.5), math.floor(crater_external_r+0.5) do + for y = math.floor(-crater_external_r+0.5), math.floor(crater_external_r+0.5) do + local tilepos = {position.x + x, position.y + y} + local distSq = x*x+y*y + if(distSq50)then + noiseLevel = 1; + end + noiseTables[1] = {} + noiseTables[2] = {} + noiseTables[3] = {} + noiseTables[4] = {} + noiseTables[5] = {} + noiseTables[6] = {} + noiseTables[7] = {} + circularNoise(noiseTables[7], position, crater_internal_r/3, noiseLevel, 3) + circularNoise(noiseTables[6], position, crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[5], position, crater_internal_r, noiseLevel, 3) + circularNoise(noiseTables[4], position, crater_internal_r, noiseLevel*2, 3) + circularNoise(noiseTables[3], position, crater_external_r*1/3+crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[2], position, crater_external_r*2/3+crater_internal_r*1/3, noiseLevel, 3) + circularNoise(noiseTables[1], position, crater_external_r-1, noiseLevel, 3) + end + -- find interested forces + for _,ghost in pairs(game.surfaces[surface_index].find_entities_filtered{position = position, radius = crater_external_r*1.1+4, name = "entity-ghost"}) do + buildingForces[ghost.force] = 1 + hasBuildings = true + end + -- do the noise around the craters + if (crater_external_r>8) then + local externalNoise = {default = "nuclear-ground"} + for tile,h in pairs(waterDepths) do + externalNoise[tile] = depthsForCrater[h]; + end + tileNoise(game.surfaces[surface_index], tileTable, position, crater_external_r, 1, externalNoise, 3); + end + if(crater_internal_r==0) then + for _,tileGhost in pairs(game.surfaces[surface_index].find_entities_filtered{position = position, radius = crater_external_r+1, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = tileGhost.ghost_name, force = tileGhost.force, pos = tileGhost.position}) + end + end + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5}) do + local distSq = (v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y) + local cur_tile = game.surfaces[surface_index].get_tile(v.position) + if(distSq>crater_external_r*crater_external_r and (noiseTables[1][v.position.x]==nil or noiseTables[1][v.position.x][v.position.y]==nil)) then + if(waterDepths[cur_tile.name]) then + table.insert(tileTable, {name = depthsForCrater[waterDepths[cur_tile.name] ], position = v.position}) + for _,tileGhost in pairs(game.surfaces[surface_index].find_entities_filtered{position = {v.position.x+0.5, v.position.y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = tileGhost.ghost_name, force = tileGhost.force, pos = tileGhost.position}) + end + end + else + local curr_height = waterDepths[cur_tile.name] + if(curr_height==nil) then + curr_height = 0; + end + if (crater_internal_r<5) then + if(distSq<=crater_internal_r*crater_internal_r) then + curr_height = math.min(curr_height, -1) + end + elseif (crater_internal_r<10) then + if(distSq<=crater_internal_r*crater_internal_r) then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[2][cur_tile.position.x]==nil or noiseTables[2][cur_tile.position.x][cur_tile.position.y]==nil)then + -- any tile not hit by the noise does this, otherwise we leave it + curr_height = curr_height+1; + end + elseif (crater_internal_r<20) then + if(distSq<=crater_internal_r*crater_internal_r/4) then + curr_height = math.min(curr_height, -2) + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[4][cur_tile.position.x]==nil or noiseTables[4][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = math.min(curr_height, -1) + else + curr_height = math.min(curr_height, -2) + end + elseif not (noiseTables[3][cur_tile.position.x]==nil or noiseTables[3][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[2][cur_tile.position.x]==nil or noiseTables[2][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = curr_height+1; + end + else + if(distSq<=crater_internal_r*crater_internal_r/9) then + curr_height = math.min(curr_height, -3) + elseif(distSq<=crater_internal_r*crater_internal_r*4/9) then + if (noiseTables[7][cur_tile.position.x]==nil or noiseTables[7][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = math.min(curr_height, -2) + else + curr_height = math.min(curr_height, -3) + end + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[6][cur_tile.position.x]==nil or noiseTables[6][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = math.min(curr_height, -1) + else + curr_height = math.min(curr_height, -2) + end + elseif(distSq<=(crater_external_r*1/3+crater_internal_r*2/3)*(crater_external_r*1/3+crater_internal_r*2/3)) then + if not (noiseTables[5][cur_tile.position.x]==nil or noiseTables[5][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[4][cur_tile.position.x]==nil or noiseTables[4][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = curr_height+1; + end + elseif(distSq<=(crater_external_r*2/3+crater_internal_r*1/3)*(crater_external_r*2/3+crater_internal_r*1/3)) then + if (noiseTables[3][cur_tile.position.x]==nil or noiseTables[3][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = curr_height+2; + else + curr_height = curr_height+1; + end + else + if (noiseTables[2][cur_tile.position.x]==nil or noiseTables[2][cur_tile.position.x][cur_tile.position.y]==nil)then + curr_height = curr_height+1; + else + curr_height = curr_height+2; + end + end + end + if(curr_height > 1) then + table.insert(tileTable, {name = "nuclear-high", position = v.position}) + else + table.insert(tileTable, {name = depthsForCrater[curr_height], position = v.position}) + end + end + end + + if (fireball_r>8) then + local groundNoise = {} + circularNoise(groundNoise, position, fireball_r, 1, 3) + for x,xtiles in pairs(groundNoise) do + for y,_ in pairs(xtiles) do + if not(waterDepths[game.surfaces[surface_index].get_tile(x, y).name] == nil) then + table.insert(tileTable, {name = depthsForCrater[waterDepths[game.surfaces[surface_index].get_tile(x, y).name] ], position = {x = x, y = y}}) + for _,tileGhost in pairs(game.surfaces[surface_index].find_entities_filtered{position = {x = x+0.5, y = y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = tileGhost.ghost_name, force = tileGhost.force, pos = tileGhost.position}) + end + end + end + end + end + + game.surfaces[surface_index].set_tiles(tileTable) + --make the high ground removable + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5, name="nuclear-high"}) do + game.surfaces[surface_index].set_hidden_tile(v.position, "nuclear-ground") + end + -- re-add tile ghosts, and create them for the interested forces (and deconstruct high nuclear ground for those forces) + for _,t in pairs(tileGhosts) do + game.surfaces[surface_index].create_entity{name="tile-ghost", position=t.pos, inner_name=t.ghost_name, force=t.force} + end + if(hasBuildings) then + for _,tile in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=crater_external_r*1.1+4, name=waterAndCraterTypes}) do + for f,_ in pairs(buildingForces) do + if (game.surfaces[surface_index].count_entities_filtered{position={tile.position.x+0.5, tile.position.y+0.5}, force = f, name="tile-ghost"} == 0) then + game.surfaces[surface_index].create_entity{name="tile-ghost", position={tile.position.x+0.5, tile.position.y+0.5}, inner_name="landfill", force=f} + end + end + end + for _,tile in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=crater_external_r*1.1+4, name="nuclear-high"}) do + for f,_ in pairs(buildingForces) do + tile.order_deconstruction(f); + end + end + end + + -- setup craters to fill with water + for xChunkPos = math.floor((position.x-fireball_r*1.1)/10-1),math.floor((position.x+fireball_r*1.1)/10+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/10-1),math.floor((position.y+fireball_r*1.1)/10+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*10, yChunkPos*10}, {xChunkPos*10+10, yChunkPos*10+10}}, name = waterTypes, limit = 1} == 0)) and + (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*10, yChunkPos*10}, {xChunkPos*10+10, yChunkPos*10+10}}, name = craterTypes0, limit = 1} == 0)) then + local height = -2; + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*10, yChunkPos*10}, {xChunkPos*10+10, yChunkPos*10+10}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + height = 0; + elseif (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*10, yChunkPos*10}, {xChunkPos*10+10, yChunkPos*10+10}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + height = -1; + end + -- have both water and crater + if(global.cratersFast[surface_index]==nil)then + global.cratersFast[surface_index] = {} + global.cratersFastData[surface_index] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + if(global.cratersFast[surface_index][xChunkPos]==nil)then + global.cratersFast[surface_index][xChunkPos] = {} + global.cratersFastData[surface_index].xCount = global.cratersFastData[surface_index].xCount + 1 + end + global.cratersFast[surface_index][xChunkPos][yChunkPos] = height + end + end + end + if(not global.cratersSlow) then + global.cratersSlow = {} + end + -- slow filling - no checks required, all the chunks get this anyway + for xChunkPos = math.floor((position.x-fireball_r*1.1)/32-1),math.floor((position.x+fireball_r*1.1)/32+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/32-1),math.floor((position.y+fireball_r*1.1)/32+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*32, yChunkPos*32}, {xChunkPos*32+32, yChunkPos*32+32}}, name = craterTypes0, limit = 1} == 0)) then + table.insert(global.cratersSlow, {t = 0, x = xChunkPos, y = yChunkPos, surface = surface_index}); + end + end + end +end + +local function nukeTileChanges(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + local tileTable = {} + + local is_waterfilled = crater_external_r<=8 + if (check_craters) then + local edge_water_count = 0 + local edge_water_threshold = 0.1 -- Threshold of proportion of crater edge touching water for crater to fill with water + + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=crater_external_r}) do + local cur_tile = game.surfaces[surface_index].get_tile(v.position) + if math.sqrt((cur_tile.position.x - position.x) ^ 2 + (cur_tile.position.y - position.y) ^ 2) > crater_external_r - 1 then + if cur_tile.name == "water" or cur_tile.name == "deepwater" then + edge_water_count = edge_water_count + 1 + end + end + end + + if edge_water_count / (2 * math.pi * crater_external_r) > edge_water_threshold then + is_waterfilled = true + end + + -- mandelbrodt - Moved from above to check if crater is next to water before appending to waitingNukeCratersBasic + if crater_internal_r>0 and settings.global["crater-water-filling"].value and not is_waterfilled then + table.insert(global.waitingNukeCratersBasic, {t = 0, pos = position, d = crater_internal_r, s = surface_index}) + end + end + if ((not check_craters) or not is_waterfilled) then + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=crater_external_r}) do + table.insert(tileTable, {name = "nuclear-ground", position = v.position}) + end + else + -- mandelbrodt - If crater touches (non-shallow/mud) water, fill crater with "water" tiles + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=crater_external_r}) do + local cur_tile = game.surfaces[surface_index].get_tile(v.position) + if not (cur_tile.name == "water" or cur_tile.name == "deepwater") then + if((v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y) <= crater_internal_r*crater_internal_r) then + table.insert(tileTable, {name = "water", position = v.position}) + else + table.insert(tileTable, {name = "nuclear-ground", position = v.position}) + end + end + end + end + + -- do the noise around the craters + if (crater_external_r>8) then + tileNoise(game.surfaces[surface_index], tileTable, position, crater_external_r, 1, {default="nuclear-ground", water="water", deepwater="deepwater"}, 3); + end + + game.surfaces[surface_index].set_tiles(tileTable) +end + + + + +local function atomic_weapon_hit(event, crater_internal_r, crater_external_r, fireball_r, fire_outer_r, blast_max_r, tree_fire_max_r, thermal_max_r, load_r, visable_r, polution, flame_proportion, create_small_fires, check_craters) + -- find forces, positions, etc. + local force + local position = event.target_position + if(not position) then + position = event.source_position + end + if(settings.global["nukes-cause-pollution"].value) then + game.surfaces[event.surface_index].pollute(position, polution) + end + if(not (event.source_entity==nil)) then + force = event.source_entity.force + else + force = "enemy" + end + local cause = event.source_entity; + if(global.waitingNukeCratersBasic ==nil) then + global.waitingNukeCratersBasic = {} + end + + -- force the map to generate (should be reasonably quick as it is pre-loaded) + game.surfaces[event.surface_index].request_to_generate_chunks(position, load_r/32) + game.surfaces[event.surface_index].force_generate_chunk_requests() + + for _,f in pairs(game.forces) do + f.chart(game.surfaces[event.surface_index], {{position.x-visable_r,position.y-visable_r},{position.x+visable_r,position.y+visable_r}}) + end + -- kill things in the fireball + for _,v in pairs(game.surfaces[event.surface_index].find_entities_filtered{position=position, radius=fireball_r}) do + if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then + if v.type=="tree" then + v.destroy() + elseif cause and cause.valid then + if not v.die(force, cause) then + v.destroy() + end + elseif not v.die(nil) then + v.destroy() + end + end + end + if(settings.global["destroy-resources-in-crater"].value) then + -- destroy resources in crater (a bit more to account for the noise on crater edge) + for _,v in pairs(game.surfaces[event.surface_index].find_entities_filtered{position=position, radius=crater_external_r*1.1+4, type="resource"}) do + if(v.valid) then + v.destroy() + end + end + end + -- destroy decoratives in the fireball + for _,v in pairs(game.surfaces[event.surface_index].find_decoratives_filtered{area = {{position.x-fireball_r, position.y-fireball_r}, {position.x+fireball_r, position.y+fireball_r}}}) do + if((v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y)<=fireball_r*fireball_r) then + game.surfaces[event.surface_index].destroy_decoratives{position = v.position}; + end + end + -- make sure everything is dead in the fireball + for _,v in pairs(game.surfaces[event.surface_index].find_entities_filtered{position=position, radius=fireball_r}) do + if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then + if(cause and cause.valid) then + v.die(force, cause); + else + v.die(nil); + end + if(v.valid) then + v.destroy(); + end + end + end + if(settings.global["use-height-for-craters"].value and settings.startup["enable-new-craters"].value) then + if(crater_external_r>200) then --use efficient crater generator (ignores height for lakes) + nukeTileChangesHeightAwareHuge(position, check_craters, event.surface_index, crater_internal_r, crater_external_r, fireball_r) + else + nukeTileChangesHeightAware(position, check_craters, event.surface_index, crater_internal_r, crater_external_r, fireball_r) + end + else + nukeTileChanges(position, check_craters, event.surface_index, crater_internal_r, crater_external_r, fireball_r) + end + -- light fires as nessesary + if(flame_proportion>0) then + for _,v in pairs(game.surfaces[event.surface_index].find_tiles_filtered{position=position, radius=fire_outer_r}) do + local rand = math.random(0, fire_outer_r) + if(math.random(0, flame_proportion)<1 and rand*rand>(v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y)) then + if((not(waterInCraterGoingOutDepths[v.name] == nil)) and waterInCraterGoingOutDepths[v.name] > -10) then + game.surfaces[event.surface_index].create_entity{name="thermobaric-wave-fire",position=v.position} + else + game.surfaces[event.surface_index].create_entity{name="nuclear-fire",position=v.position} + end + end + end + end + if (settings.global["nuke-random-fires"].value and create_small_fires) then + for i=0,(tree_fire_max_r*tree_fire_max_r/10) do + local dist = math.random(0, math.random(0, tree_fire_max_r)) + local angle = math.random()*3.1416*2 + game.surfaces[event.surface_index].create_entity{name="thermobaric-wave-fire",position={position.x+dist*math.cos(angle), position.y+dist*math.sin(angle)}} + end + end + -- do thermal heat-wave damage + for _,v in pairs(game.surfaces[event.surface_index].find_entities_filtered{position=position, radius=thermal_max_r}) do + if(v.valid and not (v.prototype.max_health == 0)) then + local distSq = (v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y) + if(distSq>fireball_r) then + local damage = thermal_max_r*thermal_max_r/distSq*10 + if(v.type=="tree") then + -- efficient tree handling + if(math.random(0, 100)<1) then + game.surfaces[event.surface_index].create_entity{name="fire-flame-on-tree",position=v.position, initial_ground_flame_count=1+math.min(254,thermal_max_r*thermal_max_r/distSq)} + end + local damage = math.random(damage/10, damage) + if((((not v.prototype.resistances) or not v.prototype.resistances.fire) and v.health=1000000) then + fireShield = e; + break; + end + end + end + if fireShield then + fireShield.energy = fireShield.energy-1000000 + else + game.surfaces[event.surface_index].create_entity{name="fire-sticker", position=v.position, target=v} + end + end + end + end + end + end + table.insert(global.blastWaves, {r = fireball_r, pos = position, pow = fireball_r*fireball_r, max = blast_max_r, s = event.surface_index, fire = false, damage_init = 5000.0, speed = 8, fire_rad = 0, blast_min_damage = 0, itt = 1, doItts = true, ittframe = 1, force = force, cause = cause}) +end + +local function thermobaric_weapon_hit(event, explosion_r, blast_max_r, fire_r, load_r, visable_r) + local force + local cause = event.source_entity; + local position = event.target_position + if(not (event.source_entity==nil)) then + force = event.source_entity.force + else + force = "enemy" + end + game.surfaces[event.surface_index].request_to_generate_chunks(position, load_r/32) + game.surfaces[event.surface_index].force_generate_chunk_requests() + + for _,f in pairs(game.forces) do + f.chart(game.surfaces[event.surface_index], {{position.x-visable_r,position.y-visable_r},{position.x+visable_r,position.y+visable_r}}) + end + for _,v in pairs(game.surfaces[event.surface_index].find_tiles_filtered{position=position, radius=explosion_r}) do + game.surfaces[event.surface_index].create_entity{name="fire-flame",position=v.position} + end + table.insert(global.blastWaves, {r = explosion_r, pos = position, pow = explosion_r*explosion_r, max = blast_max_r, s = event.surface_index, fire = true, damage_init = 600.0, speed = 1, fire_rad = fire_r, blast_min_damage = 30, itt = 1, doItts = false, ittframe = 1, force = force, cause = cause}) +end + + + +local function nukeFiredScan(event) + local entity; + if(event.entity) then + entity = event.entity + elseif(event.source_entity) then + entity = event.source_entity + end + if (entity) then + local position = event.target_entity.position + if(entity.prototype.name == "TN-very-big-atomic-artillery-projectile") then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 2000/32) + elseif(entity.prototype.name == "TN-big-atomic-artillery-projectile") then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 1500/32) + elseif(entity.prototype.name == "TN-atomic-artillery-projectile" or entity.prototype.name == "big-atomic-bomb-projectile") then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 800/32) + elseif(entity.prototype.name == "TN-small-atomic-artillery-projectile" or entity.prototype.name == "very-big-atomic-bomb-projectile") then + game.surfaces[event.surface_index].request_to_generate_chunks(position, 400/32) + end + end +end + + -- calculate polution as 1*tonnage + 1000*uranium input + 100*californium input + 10000*tritium input +--local function atomic_weapon_hit(event, crater_internal_r, crater_external_r, fireball_r, fire_outer_r, blast_max_r, tree_fire_max_r, thermal_max_r, load_r, visable_r, polution, flame_proportion, create_small_fires, check_craters) +script.on_event(defines.events.on_script_trigger_effect, function(event) + if(event.effect_id=="Thermobaric Weapon hit small-") then + thermobaric_weapon_hit(event, 1, 15, 10, 10, 10); + elseif(event.effect_id=="Thermobaric Weapon hit small") then + thermobaric_weapon_hit(event, 3, 30, 20, 30, 15); + elseif(event.effect_id=="Thermobaric Weapon hit small+") then + thermobaric_weapon_hit(event, 4, 45, 30, 45, 25); + elseif(event.effect_id=="Thermobaric Weapon hit medium-") then + thermobaric_weapon_hit(event, 5, 60, 40, 60, 35); + elseif(event.effect_id=="Thermobaric Weapon hit medium") then + thermobaric_weapon_hit(event, 6, 80, 50, 80, 50); + elseif(event.effect_id=="Thermobaric Weapon hit large") then + thermobaric_weapon_hit(event, 9, 120, 100, 120, 100); + elseif(event.effect_id=="Atomic Weapon hit 0.1t") then + atomic_weapon_hit(event, 0, 1, 1, 3, 30, 15, 30, 15, 15, 300.1, 1, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 60, 100, 200, 700, 10, 0.06); + elseif(event.effect_id=="Atomic Weapon hit 0.5t") then + atomic_weapon_hit(event, 0, 3, 3, 5, 50, 25, 30, 30, 20, 700.5, 1, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 80, 150, 300, 1000, 20, 0.12); + elseif(event.effect_id=="Atomic Weapon hit 2t") then + atomic_weapon_hit(event, 0, 5, 5, 15, 80, 50, 100, 100, 50, 1302, 2, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 100, 250, 500, 2000, 40, 0.25); + elseif(event.effect_id=="Atomic Weapon hit 4t") then + atomic_weapon_hit(event, 1, 6, 7, 20, 130, 120, 150, 180, 80, 4004, 1, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 120, 300, 900, 4000, 70, 0.4); + elseif(event.effect_id=="Atomic Weapon hit 8t") then + atomic_weapon_hit(event, 3, 8, 14, 25, 200, 200, 200, 180, 100, 9008, 1, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 150, 400, 1250, 10000, 100, 0.6); + elseif(event.effect_id=="Atomic Weapon hit 20t") then + atomic_weapon_hit(event, 5, 10, 20, 30, 320, 320, 320, 180, 150, 30020, 1, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 250, 600, 1800, 15000, 160, 1); + elseif(event.effect_id=="Atomic Weapon hit 500t") then + atomic_weapon_hit(event, 10, 20, 40, 35, 400, 400, 600, 400, 300, 75500, 1*settings.global["large-nuke-fire-scaledown"].value, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 400, 800, 2500, 25000, 300, 2); + elseif(event.effect_id=="Atomic Weapon hit 1kt") then + atomic_weapon_hit(event, 20, 40, 80, 75, 800, 800, 1200, 800, 300, 101000, 2*settings.global["large-nuke-fire-scaledown"].value, true, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 600, 1200, 8000, 60000, 600, 4); + elseif(event.effect_id=="Atomic Weapon hit 15kt") then + atomic_weapon_hit(event, 50, 100, 200, 150, 2000/settings.global["large-nuke-blast-range-scaledown"].value, 1000, 4000, 1000, 500, 315000, settings.global["huge-nuke-fire-scaledown"].value, false, true); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 1500, 3000, 20000, 100000, 1500, 8); + elseif(event.effect_id=="Atomic Weapon hit 100kt") then + atomic_weapon_hit(event, 90, 180, 500, 400, 5500/settings.global["really-huge-nuke-blast-range-scaledown"].value, 2500, 9000, 1500, 1000, 450000, 2*settings.global["really-huge-nuke-fire-scaledown"].value, false, false); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 2700, 5400, 36000, 200000, 2700, 16); + elseif(event.effect_id=="Atomic Weapon hit 1Mt") then + atomic_weapon_hit(event, 190, 390, 1200, 1000, 12000/settings.global["mega-nuke-blast-range-scaledown"].value, 5000, 10000, 3200, 2500, 1800000, 0, false, false); + createBlastSoundsAndFlash(event.target_position, game.surfaces[event.surface_index], 6000, 10000, 60000, 400000, 5000, 32); + elseif(event.effect_id=="Nuke firing") then + nukeFiredScan(event); + elseif(event.effect_id=="Mega-nuke built") then + table.insert(global.nukeBuildings, event.source_entity) + end + +end) + + + +script.on_nth_tick(1207, function(event) + -- slow crater filling + if(global.cratersSlow == nil) then + global.cratersSlow = {} + end + for index,chunk in pairs(global.cratersSlow) do + chunk.t = chunk.t+1; + if(chunk.t>30) then + local target = nil + if (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes2, limit = 1} == 0)) then + local prob = 128; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/8 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/4 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if(math.random(1, math.max(prob,2)) == 1) then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes2} + target = targets[math.random(1, #targets)] + end + elseif (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes1, limit = 1} == 0)) then + local prob = 512; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/32 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/16 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if(math.random(1, math.max(prob,2)) == 1) then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes1} + target = targets[math.random(1, #targets)] + end + elseif (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes0, limit = 1} == 0)) then + local prob = 2048; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/32 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/4 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if math.random(1, math.max(prob,2)) == 1 then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes0} + target = targets[math.random(1, #targets)] + end + else + global.cratersSlow[index] = nil + end + if not (target==nil) then + local h = waterInCraterGoingInDepths[target.name]+1 + local pos = target.position; + + -- ensure we preserve ghosts, e.g. landfill + local tileGhosts = {} + for _,t in pairs(game.surfaces[chunk.surface].find_entities_filtered{position = {pos.x+0.5, pos.y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = t.ghost_name, force = t.force}) + end + game.surfaces[chunk.surface].set_tiles({{name = depthsForCraterWater[waterDepths[target.name] ][h], position = pos}}); + for _,t in pairs(tileGhosts) do + game.surfaces[chunk.surface].create_entity{name="tile-ghost",position={pos.x+0.5, pos.y+0.5},inner_name=t.ghost_name,force=t.force} + end + + if(global.cratersFast[chunk.surface]==nil)then + global.cratersFast[chunk.surface] = {} + global.cratersFastData[chunk.surface] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + local xChunkPos = math.floor(pos.x/10) + if(global.cratersFast[chunk.surface][xChunkPos]==nil)then + global.cratersFast[chunk.surface][xChunkPos] = {} + global.cratersFastData[chunk.surface].xCount = global.cratersFastData[chunk.surface].xCount + 1 + end + if(global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/10)] == nil) then + global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/10)] = h + else + global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/10)] = math.max(global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/10)], h) + end + end + end + end + +end) + +script.on_nth_tick(3601, function(event) + -- handling crater filling for non-height aware craters + if(global.waitingNukeCratersBasic ==nil) then + global.waitingNukeCratersBasic = {} + end + if(#global.waitingNukeCratersBasic>0) then + for _,v in pairs(global.waitingNukeCratersBasic) do + if(v["t"]>5+v["d"]) then + local force = nil + for _,w in pairs(game.surfaces[v["s"] ].find_entities_filtered{position=v["pos"], radius=v["t"]-4}) do + if(string.match(w.type, "ghost") or w.prototype.is_building) then + force = w.force + break + end + end + if(not (force==nil)) then + for j,w in ipairs(game.surfaces[v["s"] ].find_tiles_filtered{position=v["pos"], radius=v["t"]-3}) do + game.surfaces[v["s"] ].create_entity{name="tile-ghost",position=w.position,inner_name="landfill",force=force} + end + end + table.remove(global.waitingNukeCratersBasic, i) + else + v["t"] = v["t"]+1 + if(v["t"]>5) then + for _,w in pairs(game.surfaces[v["s"] ].find_entities_filtered{position=v["pos"], radius=v["t"]-3}) do + if(w.prototype.is_building) then + w.die(nil) + end + end + local tileTable = {} + for _,w in pairs(game.surfaces[v["s"] ].find_tiles_filtered{position=v["pos"], radius=v["t"]-4}) do + if((w.position["x"]-v["pos"]["x"])*(w.position["x"]-v["pos"]["x"])+(w.position["y"]-v["pos"]["y"])*(w.position["y"]-v["pos"]["y"])>=(math.max(v["t"]-10, 0))*(v["t"]-10)) then + table.insert(tileTable, {name = "water-shallow", position = w.position}) + end + end + game.surfaces[v["s"] ].set_tiles(tileTable, true, false) + end + end + end + end +end) + ]] + + + + + + + + + + + + + + + diff --git a/True-Nukes/menu-simulations/menu-simulation-artillery-nuke.zip b/True-Nukes/menu-simulations/menu-simulation-artillery-nuke.zip new file mode 100644 index 00000000..806ec6ac Binary files /dev/null and b/True-Nukes/menu-simulations/menu-simulation-artillery-nuke.zip differ diff --git a/True-Nukes/menu-simulations/nuke-1x1kt.lua b/True-Nukes/menu-simulations/nuke-1x1kt.lua new file mode 100644 index 00000000..58f67b66 --- /dev/null +++ b/True-Nukes/menu-simulations/nuke-1x1kt.lua @@ -0,0 +1,30 @@ +local controlScript = require("control-script") +data.raw["utility-constants"]["default"].main_menu_simulations.nuke_1x1kt = + { + checkboard = false, + save = "__True-Nukes__/menu-simulations/menu-simulation-artillery-nuke.zip", + length = 60 * 20, + init = + + [[ + local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] + game.camera_position = {logo.position.x, logo.position.y+9.75} + game.camera_zoom = 1 + game.tick_paused = false + ]] .. controlScript + } + + + + + + + + + + + + + + + diff --git a/True-Nukes/menu-simulations/nuke-1x20t.lua b/True-Nukes/menu-simulations/nuke-1x20t.lua new file mode 100644 index 00000000..5fd21f8d --- /dev/null +++ b/True-Nukes/menu-simulations/nuke-1x20t.lua @@ -0,0 +1,37 @@ +local controlScript = require("control-script") +data.raw["utility-constants"]["default"].main_menu_simulations.nuke_1x20t = + { + checkboard = false, + save = "__base__/menu-simulations/menu-simulation-biter-base.zip", + length = 60 * 12, + init = + [[ + local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] + logo.destructible = true + logo.health = 1 + game.camera_position = {logo.position.x, logo.position.y+9.75} + center = {logo.position.x, logo.position.y+9.75} + game.camera_zoom = 1 + game.tick_paused = false + game.surfaces.nauvis.daytime = 0 + game.forces.enemy.evolution_factor = 1 + + game.surfaces[1].create_entity{name = "atomic-rocket", position = {center[1]+100, center[2]-100}, force = "player", target = {center[1]+10, center[2]-10}, speed = 1} + + ]] .. controlScript + } + + + + + + + + + + + + + + + diff --git a/True-Nukes/menu-simulations/nuke-2x2t.lua b/True-Nukes/menu-simulations/nuke-2x2t.lua new file mode 100644 index 00000000..3ed0695c --- /dev/null +++ b/True-Nukes/menu-simulations/nuke-2x2t.lua @@ -0,0 +1,39 @@ +local controlScript = require("control-script") +data.raw["utility-constants"]["default"].main_menu_simulations.nuke_many_2t = + { + checkboard = false, + save = "__base__/menu-simulations/menu-simulation-biter-base.zip", + length = 60 * 12, + init = + [[ + local logo = game.surfaces.nauvis.find_entities_filtered{name = "factorio-logo-11tiles", limit = 1}[1] + logo.destructible = true + logo.health = 1 + game.camera_position = {logo.position.x, logo.position.y+9.75} + center = {logo.position.x, logo.position.y+9.75} + game.camera_zoom = 1 + game.tick_paused = false + game.surfaces.nauvis.daytime = 0 + game.forces.enemy.evolution_factor = 1 + + game.surfaces[1].create_entity{name = "atomic-cannon-projectile", position = {center[1]-80, center[2]-80}, force = "player", target = {center[1]-10, center[2]-15}, speed = 1} + + game.surfaces[1].create_entity{name = "atomic-cannon-projectile", position = {center[1], center[2]-200}, force = "player", target = {center[1]+10, center[2]-6}, speed = 1} + + ]] .. controlScript + } + + + + + + + + + + + + + + + diff --git a/True-Nukes/migrations/0_3_0_basic.json b/True-Nukes/migrations/0_3_0_basic.json new file mode 100644 index 00000000..495b2a23 --- /dev/null +++ b/True-Nukes/migrations/0_3_0_basic.json @@ -0,0 +1,56 @@ +{ + "entity": + [ + ["megaton-nuke", "fusion-test-site"] + ], + "technology": + [ + ["scary-atomic-weapons", "compact-full-fission-weapons"], + ["atomic-artillery-shells", "artillery-atomics"] + ], + "item": + [ + ["atomic-rounds-magazine", "rounds-magazine-atomic-0_1t"], + ["big-atomic-rounds-magazine", "rounds-magazine-atomic-0_5t"], + + ["atomic-cannon-shell", "cannon-shell-atomic-2t"], + ["big-atomic-cannon-shell", "cannon-shell-atomic-4t"], + + ["really-very-atomic-bomb", "big-rocket-atomic-2t"], + ["very-small-atomic-bomb", "big-rocket-atomic-4t"], + ["small-atomic-bomb", "big-rocket-atomic-8t"], + ["big-atomic-bomb", "big-rocket-atomic-500t"], + ["very-big-atomic-bomb", "big-rocket-atomic-1kt"], + + ["TN-very-small-atomic-artillery-shell", "artillery-shell-atomic-20t"], + ["TN-small-atomic-artillery-shell", "artillery-shell-atomic-500t"], + ["TN-atomic-artillery-shell", "artillery-shell-atomic-1kt"], + ["TN-big-atomic-artillery-shell", "artillery-shell-atomic-15kt"], + ["TN-very-big-atomic-artillery-shell", "artillery-shell-atomic-2-stage-100kt"], + + + ["15kiloton-detonation", "detonation-atomic-2-stage-15kt-1"], + ["100kiloton-detonation", "detonation-atomic-2-stage-100kt-1"], + ["15kiloton-detonation", "detonation-atomic-2-stage-15kt-1"], + ["megaton-detonation", "detonation-atomic-2-stage-1Mt-1"], + ["5megaton-detonation", "detonation-atomic-2-stage-5Mt-1"], + ["10megaton-detonation", "detonation-atomic-2-stage-10Mt-1"], + ["50megaton-detonation", "detonation-atomic-2-stage-50Mt-1"], + ["100megaton-detonation", "detonation-atomic-2-stage-100Mt-1"], + ["1gigaton-detonation", "detonation-atomic-2-stage-1Gt-1"], + + + ["atomic-autocannon-shell", "autocannon-shell-atomic-0_5t"], + ["atomic-cannon-H1-shell", "cannon-shell-88-atomic-4t"], + ["atomic-cannon-H2-shell", "cannon-shell-128-atomic-8t"], + ["big-atomic-autocannon-shell", "autocannon-shell-atomic-2t"], + ["big-atomic-cannon-H1-shell", "cannon-shell-88-atomic-8t"], + ["big-atomic-cannon-H2-shell", "cannon-shell-128-atomic-20t"], + + ["thermobaric-cannon-shell", "cannon-shell-thermobaric-1"], + ["thermobaric-cannon-H1-shell", "cannon-shell-88-thermobaric-2"], + ["thermobaric-cannon-H2-shell", "cannon-shell-128-thermobaric-2"], + ["thermobaric-rocket", "big-rocket-thermobaric-2"], + ["thermobaric-artillery", "artillery-shell-thermobaric-3"] + ] +} diff --git a/True-Nukes/migrations/0_3_0_extra.lua b/True-Nukes/migrations/0_3_0_extra.lua new file mode 100644 index 00000000..622aa716 --- /dev/null +++ b/True-Nukes/migrations/0_3_0_extra.lua @@ -0,0 +1,51 @@ +for _,force in pairs(game.forces) do + if(force.technologies["fusion-weapons"]) then + force.technologies["fusion-weapons"].researched = (force.technologies["compact-fusion-weapons"] and force.technologies["compact-fusion-weapons"].researched) + or force.technologies["fusion-weapons"].researched + end + + + if(force.technologies["compact-full-fission-weapons"]) then + force.technologies["compact-full-fission-weapons"].researched = (force.technologies["fusion-weapons"] and force.technologies["fusion-weapons"].researched) + or force.technologies["compact-full-fission-weapons"].researched + end + + + if(force.technologies["full-fission-atomics"]) then + force.technologies["full-fission-atomics"].researched = (force.technologies["compact-full-fission-weapons"] and force.technologies["compact-full-fission-weapons"].researched) + or force.technologies["full-fission-atomics"].researched + end + + + if(force.technologies["compact-californium-weapons"]) then + force.technologies["compact-californium-weapons"].researched = (force.technologies["compact-full-fission-weapons"] and force.technologies["compact-full-fission-weapons"].researched) + or force.technologies["compact-californium-weapons"].researched + end + + if(force.technologies["artillery-atomics"]) then + force.technologies["artillery-atomics"].researched = (force.technologies["compact-full-fission-weapons"] and force.technologies["compact-full-fission-weapons"].researched) + or force.technologies["artillery-atomics"].researched + end + + + if(force.technologies["californium-weapons"]) then + force.technologies["californium-weapons"].researched = (force.technologies["compact-californium-weapons"] and force.technologies["compact-californium-weapons"].researched) + or (force.technologies["californium-processing"] and force.technologies["californium-processing"].researched) + or force.technologies["californium-weapons"].researched + end + + if(force.technologies["expanded-atomics"]) then + force.technologies["expanded-atomics"].researched = (force.technologies["artillery-atomics"] and force.technologies["artillery-atomics"].researched) + or (force.technologies["californium-weapons"] and force.technologies["californium-weapons"].researched) + or (force.technologies["full-fission-atomics"] and force.technologies["full-fission-atomics"].researched) + or force.technologies["expanded-atomics"].researched + end + + force.technologies["atomic-bomb"].researched = (force.technologies["expanded-atomics"] and force.technologies["expanded-atomics"].researched) + or force.technologies["atomic-bomb"].researched + + if(force.technologies["basic-atomic-weapons"]) then + force.technologies["basic-atomic-weapons"].researched = force.technologies["atomic-bomb"].researched + or force.technologies["basic-atomic-weapons"].researched + end +end diff --git a/True-Nukes/migrations/0_3_0_more.lua b/True-Nukes/migrations/0_3_0_more.lua new file mode 100644 index 00000000..6f168eec --- /dev/null +++ b/True-Nukes/migrations/0_3_0_more.lua @@ -0,0 +1,3 @@ +for index, force in pairs(game.forces) do + force.reset_technology_effects(); +end \ No newline at end of file diff --git a/True-Nukes/prototypes/nukes/compatibility/K2.lua b/True-Nukes/prototypes/nukes/compatibility/K2.lua new file mode 100644 index 00000000..e3ccd650 --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/K2.lua @@ -0,0 +1,16 @@ +if(data.raw.recipe["FOGBANK"])then +data.raw.recipe["FOGBANK"].ingredients = { + {type="item", name="low-density-structure", amount=10}, + {type="item", name="imersite-powder", amount=5}, + {type="item", name="rare-metals", amount=10}, + {type="item", name="energy-control-unit", amount=1}, +} +end +if(data.raw.recipe["neutron-reflector"])then +data.raw.recipe["neutron-reflector"].ingredients = { + {type="item", name="low-density-structure", amount=1}, + {type="item", name="rare-metals", amount=10}, + {type="item", name="lithium", amount=5}, + {type="fluid", name="nitric-acid", amount=20}, +} +end diff --git a/True-Nukes/prototypes/nukes/compatibility/SE.lua b/True-Nukes/prototypes/nukes/compatibility/SE.lua new file mode 100644 index 00000000..fa9b2584 --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/SE.lua @@ -0,0 +1,17 @@ + +if(data.raw.recipe["FOGBANK"])then +data.raw.recipe["FOGBANK"].ingredients = { + {type="item", name="se-aeroframe-scaffold", amount=2}, + {type="item", name="se-naquium-powder", amount=10}, + {type="fluid", name="sulfuric-acid", amount=20}, +} +end +if(data.raw.recipe["neutron-reflector"])then +data.raw.recipe["neutron-reflector"].ingredients = { + {type="item", name="low-density-structure", amount=1}, + {type="item", name="se-beryllium-plate", amount=5}, + {type="item", name="plastic-bar", amount=10}, + {type="item", name="iron-plate", amount=5}, +} +end +se_delivery_cannon_recipes["atomic-bomb"] = nil diff --git a/True-Nukes/prototypes/nukes/compatibility/STP.lua b/True-Nukes/prototypes/nukes/compatibility/STP.lua new file mode 100644 index 00000000..2349b96a --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/STP.lua @@ -0,0 +1,20 @@ +local create_utils = require("__Warheads__.prototypes.sprite-assembly-util") + +local setupWarheadsForWeapon = create_utils.setupWarheadsForWeapon +local tints = create_utils.tints + + + +local setupForAutocannon = { + sprite_types = require("__Warheads__.prototypes.compatibility.SchallTankPlatoon-sprites"), + type = "autocannon", + weapon = "autocannon-shell", + warheads = {} +} +setupForAutocannon.warheads["-atomic-0_1t"] = {style = 3, tints = {tints.californium, tints.californium, tints.californium}} +setupForAutocannon.warheads["-atomic-0_5t"] = {style = 2, tints = {tints.californium, tints.californium, tints.californium}} +setupForAutocannon.warheads["-atomic-2t"] = {style = 4, tints = {tints.californium, tints.californium, tints.californium, tints.californium, tints.californium, tints.californium}} +setupForAutocannon.warheads["-atomic-4t"] = {style = 4, tints = {tints.californium, tints.californium, tints.californium, tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}} +setupForAutocannon.warheads["-atomic-8t"] = {style = 4, tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive, tints.californium, tints.californium, tints.californium}} +setupForAutocannon.warheads["-atomic-20t"] = {style = 4, tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive, tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}} +setupWarheadsForWeapon(setupForAutocannon) \ No newline at end of file diff --git a/True-Nukes/prototypes/nukes/compatibility/add-basic-uranium-nukes.lua b/True-Nukes/prototypes/nukes/compatibility/add-basic-uranium-nukes.lua new file mode 100644 index 00000000..df834804 --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/add-basic-uranium-nukes.lua @@ -0,0 +1,101 @@ +local nuke_materials = require("__True-Nukes__.prototypes.nukes.data-nukes-material") + +local dead = nuke_materials.deadMaterial +local boom = nuke_materials.UBoomMaterial +local small = nuke_materials.smallBoomMaterial +local light = nuke_materials.lightMaterial +local reflector = nuke_materials.reflector +local computer = nuke_materials.computer +local fusionMaterial = nuke_materials.fusionMaterial + +log("hello") +if(warheads["TN-warhead-20--1"]) then + data:extend{ + { + type = "recipe", + name = "TN-warhead-20--1-uranium", + order = "x-n-a-m-00020-1z", + energy_required = 90, + enabled = false, + subgroup = "large-warheads", + ingredients = { + {"steel-plate", 10}, + {computer, 8}, + {"explosives", 30}, + {dead, 15}, + {boom, 30} + }, + result = "TN-warhead-20--1" + } + } +if(data.raw.technology["basic-atomic-weapons"]) then + + table.insert(data.raw.technology["basic-atomic-weapons"].effects, 1, {type = "unlock-recipe", recipe = "TN-warhead-20--1-uranium"}) +end +end +if(warheads["TN-warhead-20--2"]) then + data:extend{ + { + type = "recipe", + name = "TN-warhead-20--2-uranium", + order = "x-n-a-m-00020-2z", + energy_required = 180, + enabled = false, + subgroup = "medium-warheads", + ingredients = { + {light, 20}, + {computer, 20}, + {"explosives", 15}, + {dead, 5}, + {boom, 50} + }, + result = "TN-warhead-20--2" + } + } +table.insert(data.raw.technology["atomic-bomb"].effects, 1, {type = "unlock-recipe", recipe = "TN-warhead-20--2-uranium"}) +end + + + +if(warheads["TN-warhead-8--1"]) then + data:extend{ + { + type = "recipe", + name = "TN-warhead-8--1-uranium", + order = "x-n-a-m-00008-1z", + energy_required = 60, + enabled = false, + subgroup = "medium-warheads", + ingredients = { + {"steel-plate", 6}, + {computer, 5}, + {"explosives", 20}, + {dead, 10}, + {boom, 15} + }, + result = "TN-warhead-8--1" + } + } +table.insert(data.raw.technology["atomic-bomb"].effects, 1, {type = "unlock-recipe", recipe = "TN-warhead-8--1-uranium"}) +end +if(warheads["TN-warhead-4--1"]) then + data:extend{ + { + type = "recipe", + name = "TN-warhead-4--1-uranium", + order = "x-n-a-m-00004-1z", + energy_required = 45, + enabled = false, + subgroup = "medium-warheads", + ingredients = { + {"steel-plate", 5}, + {computer, 5}, + {"explosives", 10}, + {dead, 5}, + {boom, 8} + }, + result = "TN-warhead-4--1" + } + } +table.insert(data.raw.technology["atomic-bomb"].effects, 1, {type = "unlock-recipe", recipe = "TN-warhead-4--1-uranium"}) +end diff --git a/True-Nukes/prototypes/nukes/compatibility/apm-nuclear.lua b/True-Nukes/prototypes/nukes/compatibility/apm-nuclear.lua new file mode 100644 index 00000000..39bcbc9a --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/apm-nuclear.lua @@ -0,0 +1,24 @@ +require("add-basic-uranium-nukes") + +if (data.raw.technology["tritium-processing"]) then + data.raw.technology["tritium-processing"].prerequisites[1] = "apm_nuclear_breeder" +end +data.raw.technology["thermonuclear-bomb"] = nil + +if (data.raw.technology["expanded-atomics"]) then + data.raw.technology["expanded-atomics"].prerequisites[2] = "nuclear-fuel-reprocessing" +end +if (data.raw.technology["californium-processing"]) then + data.raw.technology["californium-processing"].prerequisites[1] = "apm_nuclear_breeder" +end + +if (data.raw.technology["dense-neutron-flux"]) then + data.raw.technology["dense-neutron-flux"].effects[1] = nil +end + +if (data.raw.technology["tritium-breeder-fuel-cell"]) then + data.raw.item["tritium-breeder-fuel-cell"].fuel_category = "apm_nuclear_breeder" +end +if (data.raw.technology["advanced-tritium-breeder-fuel-cell"]) then + data.raw.item["advanced-tritium-breeder-fuel-cell"].fuel_category = "apm_nuclear_breeder" +end diff --git a/True-Nukes/prototypes/nukes/compatibility/clowns-nuclear.lua b/True-Nukes/prototypes/nukes/compatibility/clowns-nuclear.lua new file mode 100644 index 00000000..a4da350e --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/clowns-nuclear.lua @@ -0,0 +1,24 @@ +require("add-basic-uranium-nukes") + + +if (data.raw.technology["tritium-processing"]) then + if(mods["Clowns-AngelBob-Nuclear"]) then + data.raw.technology["tritium-processing"].prerequisites[1] = "nuclear-fuel-reprocessing-2" + end +end +data.raw.technology["thermonuclear-bomb"] = nil + +if (data.raw.technology["expanded-atomics"]) then + if(mods["Clowns-AngelBob-Nuclear"]) then + data.raw.technology["expanded-atomics"].prerequisites[2] = "nuclear-fuel-reprocessing-2" + end +end +if (data.raw.technology["californium-processing"]) then + if(mods["Clowns-AngelBob-Nuclear"]) then + data.raw.technology["californium-processing"].prerequisites[1] = "nuclear-fuel-reprocessing" + end +end + +if (data.raw.technology["dense-neutron-flux"]) then + data.raw.technology["dense-neutron-flux"].effects[1] = nil +end diff --git a/True-Nukes/prototypes/nukes/compatibility/nuclear-fuel.lua b/True-Nukes/prototypes/nukes/compatibility/nuclear-fuel.lua new file mode 100644 index 00000000..e0f323f7 --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/nuclear-fuel.lua @@ -0,0 +1,16 @@ +require("add-basic-uranium-nukes") + +if (data.raw.technology["expanded-atomics"]) then + data.raw.technology["expanded-atomics"].prerequisites[2] = "plutonium-breeding" +end +if (data.raw.technology["californium-processing"]) then + data.raw.technology["californium-processing"].prerequisites[1] = "plutonium-breeding" +end + +if (data.raw.technology["dense-neutron-flux"]) then + data.raw.technology["dense-neutron-flux"].effects[1] = nil +end + + + + diff --git a/True-Nukes/prototypes/nukes/compatibility/plutonium-energy.lua b/True-Nukes/prototypes/nukes/compatibility/plutonium-energy.lua new file mode 100644 index 00000000..364e09a6 --- /dev/null +++ b/True-Nukes/prototypes/nukes/compatibility/plutonium-energy.lua @@ -0,0 +1,20 @@ +require("add-basic-uranium-nukes") + +if (data.raw.technology["tritium-processing"]) then + data.raw.technology["tritium-processing"].prerequisites[1] = "nuclear-breeding" +end +data.raw.technology["plutonium-atomic-bomb"] = nil + +if (data.raw.technology["expanded-atomics"]) then + table.insert(data.raw.technology["expanded-atomics"].prerequisites, "plutonium-enrichment-process") +end +if (data.raw.technology["californium-processing"]) then + table.insert(data.raw.technology["californium-processing"].prerequisites, "plutonium-enrichment-process") +end + +if (data.raw.technology["tritium-breeder-fuel-cell"]) then + data.raw.item["tritium-breeder-fuel-cell"].fuel_category = "nuclear-breeder" +end +if (data.raw.technology["advanced-tritium-breeder-fuel-cell"]) then + data.raw.item["advanced-tritium-breeder-fuel-cell"].fuel_category = "nuclear-breeder" +end diff --git a/True-Nukes/prototypes/nukes/data-nuke-explosions.lua b/True-Nukes/prototypes/nukes/data-nuke-explosions.lua new file mode 100644 index 00000000..a9ac37c7 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nuke-explosions.lua @@ -0,0 +1,949 @@ +function add_mushroom_cloud_effect(effect, prefix) + table.insert(effect, 2, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-LUQ", + }) + table.insert(effect, 3, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-RUQ" + }) + table.insert(effect, 4, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-LLQ" + }) + table.insert(effect, 5, { + type = "create-entity", + entity_name = prefix .. "uranium-explosion-RLQ" + }) + table.insert(effect, 6, { + type = "create-entity", + entity_name = "nuclear-scorchmark", + check_buildability = true + }) + table.insert(effect, 7, { + type = "create-entity", + entity_name = "radiation-cloud" + }) + +end + +local N0_1t_detonation = { + { + type = "create-trivial-smoke", + smoke_name = "artillery-smoke", + initial_height = 0, + speed_from_center = 0.05, + speed_from_center_deviation = 0.005, + offset_deviation = {{-4, -4}, {4, 4}}, + max_radius = 3.5, + repeat_count = 4 * 4 * 15 + }, + { + type = "script", + effect_id = "Atomic Weapon hit 0.1t" + }, + { + type = "create-entity", + entity_name = "medium-scorchmark-tintable", + check_buildability = true + }, + { + type = "create-entity", + entity_name = "massive-explosion" + }, + { + type = "destroy-cliffs", + radius = 1 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 1 + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 10, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1, + radius = 1, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} + +local N0_5t_detonation = { + { + type = "script", + effect_id = "Atomic Weapon hit 0.5t" + }, + { + type = "create-entity", + entity_name = "medium-scorchmark-tintable", + check_buildability = true + }, + { + type = "create-entity", + entity_name = "massive-explosion" + }, + { + type = "destroy-cliffs", + radius = 3 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 3 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 50, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 50, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 2, type = "impact"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 20, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1, + radius = 2, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} + +local N2t_detonation = { + { + type = "script", + effect_id = "Atomic Weapon hit 2t" + }, + { + repeat_count = 100, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 3 + }, + { + type = "create-entity", + entity_name = "big-scorchmark-tintable", + check_buildability = true + }, + { + type = "create-entity", + entity_name = "nuke-explosion" + }, + { + type = "destroy-cliffs", + radius = 5 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 10 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 150, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 150, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 2, type = "impact"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 50, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1, + radius = 10, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "lingering-fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 5, + radius = 20, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} + + +local N4t_detonation = { + { + type = "script", + effect_id = "Atomic Weapon hit 4t" + }, + { + repeat_count = 100, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 3 + }, + { + type = "create-entity", + entity_name = "big-scorchmark-tintable", + check_buildability = true + }, + { + type = "create-entity", + entity_name = "nuke-explosion" + }, + { + type = "destroy-cliffs", + radius = 8 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 10 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 200, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 200, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 2, type = "impact"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 70, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 3, + radius = 10, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "lingering-fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 10, + radius = 30, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} + +local N8t_detonation = { + { + type = "script", + effect_id = "Atomic Weapon hit 8t" + }, + { + repeat_count = 100, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 3 + }, + { + type = "create-entity", + entity_name = "big-scorchmark-tintable", + check_buildability = true + }, + { + type = "destroy-cliffs", + radius = 10 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 10 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 250, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 250, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 2, type = "impact"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 100, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 5, + radius = 15, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "lingering-fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 15, + radius = 40, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} +local N20t_detonation = + { + { + type = "script", + effect_id = "Atomic Weapon hit 20t" + }, + { + repeat_count = 1000, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 3 + }, + { + type = "create-entity", + entity_name = "nuclear-scorchmark", + check_buildability = true + }, + { + type = "destroy-cliffs", + radius = 10 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, -- soft decoratives are decoratives with grows_through_rail_path = true + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, -- if true, destroys only decoratives that have trigger_effect set + radius = 20 -- large radius for demostrative purposes + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 340, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = true, + trigger_from_target = true, + radius = 140, + action_delivery = + { + type = "instant", + target_effects = { + { + type = "create-fire", + entity_name = "thermobaric-wave-fire", + initial_ground_flame_count = 1 + } + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 50, + radius = 30, + action_delivery = + { + type = "projectile", + projectile = "lingering-fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 30, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 50, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 100, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + } + } +local N1kt_detonation = { + { + type = "script", + effect_id = "Atomic Weapon hit 1kt" + }, + { + repeat_count = 10000, + type = "create-trivial-smoke", + smoke_name = "nuclear-smoke", + offset_deviation = {{-1, -1}, {1, 1}}, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + speed_from_center = 3 + }, + { + type = "create-entity", + entity_name = "nuclear-scorchmark", + check_buildability = true + }, + { + type = "destroy-cliffs", + radius = 80 + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 80 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 300, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 2, type = "impact"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 50, + radius = 50, + action_delivery = + { + type = "projectile", + projectile = "lingering-fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 50, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 100, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 100, + radius = 200, + action_delivery = + { + type = "projectile", + projectile = "fallout", + starting_speed = 0.0001 + } + } + } +} +local N500t_detonation = table.deepcopy(N1kt_detonation) +N500t_detonation[1].effect_id = "Atomic Weapon hit 500t" +N500t_detonation[4].radius = 60 +N500t_detonation[5].radius = 60 +N500t_detonation[6].action.radius = 150 +N500t_detonation[7].action.radius = 25 +N500t_detonation[7].action.repeat_count = 15 +N500t_detonation[8].action.radius = 50 +N500t_detonation[8].action.repeat_count = 15 +N500t_detonation[9].action.radius = 50 +N500t_detonation[9].action.repeat_count = 25 +N500t_detonation[10].action.radius = 50 +N500t_detonation[10].action.repeat_count = 40 + +local N15kt_detonation = table.deepcopy(N1kt_detonation) +N15kt_detonation[1].effect_id = "Atomic Weapon hit 15kt" +N15kt_detonation[4].radius = 200 +N15kt_detonation[5].radius = 100 +N15kt_detonation[6].action.radius = 500 +N15kt_detonation[7].action.radius = 100 +N15kt_detonation[8].action.radius = 200 +N15kt_detonation[8].action.repeat_count = 200 +N15kt_detonation[9].action.radius = 150 +N15kt_detonation[9].action.repeat_count = 300 +N15kt_detonation[10].action.radius = 250 +N15kt_detonation[10].action.repeat_count = 100 + +local N100kt_detonation = table.deepcopy(N1kt_detonation) +N100kt_detonation[1].effect_id = "Atomic Weapon hit 100kt" +N100kt_detonation[4].radius = 500 +N100kt_detonation[5].radius = 100 +N100kt_detonation[6].action.radius = 200 +N100kt_detonation[7].action.radius = 100 +N100kt_detonation[7].action.repeat_count = 100 +N100kt_detonation[8].action.radius = 100 +N100kt_detonation[8].action.repeat_count = 500 +N100kt_detonation[9].action.radius = 150 +N100kt_detonation[9].action.repeat_count = 300 +N100kt_detonation[10].action.radius = 250 +N100kt_detonation[10].action.repeat_count = 100 + +local N1Mt_detonation = table.deepcopy(N100kt_detonation) +N1Mt_detonation[1].effect_id = "Atomic Weapon hit 1Mt" + +local N5Mt_detonation = table.deepcopy(N1Mt_detonation) +N5Mt_detonation[1].effect_id = "Atomic Weapon hit 5Mt" +local N10Mt_detonation = table.deepcopy(N1Mt_detonation) +N10Mt_detonation[1].effect_id = "Atomic Weapon hit 10Mt" +local N50Mt_detonation = table.deepcopy(N1Mt_detonation) +N50Mt_detonation[1].effect_id = "Atomic Weapon hit 50Mt" +local N100Mt_detonation = table.deepcopy(N1Mt_detonation) +N100Mt_detonation[1].effect_id = "Atomic Weapon hit 100Mt" + +local N1Gt_detonation = table.deepcopy(N1Mt_detonation) +N1Gt_detonation[1].effect_id = "Atomic Weapon hit 1Gt" + +add_mushroom_cloud_effect(N8t_detonation, "small-") +add_mushroom_cloud_effect(N20t_detonation, "small-") +add_mushroom_cloud_effect(N500t_detonation, "") +add_mushroom_cloud_effect(N15kt_detonation, "huge-") +add_mushroom_cloud_effect(N100kt_detonation, "really-huge-") +add_mushroom_cloud_effect(N1Mt_detonation, "really-huge-") + +return { + N0_1t_detonation = N0_1t_detonation, + N0_5t_detonation = N0_5t_detonation, + N2t_detonation = N2t_detonation, + N4t_detonation = N4t_detonation, + N8t_detonation = N8t_detonation, + N20t_detonation = N20t_detonation, + N500t_detonation = N500t_detonation, + N1kt_detonation = N1kt_detonation, + N15kt_detonation = N15kt_detonation, + N100kt_detonation = N100kt_detonation, + N1Mt_detonation = N1Mt_detonation, + N5Mt_detonation = N5Mt_detonation, + N10Mt_detonation = N10Mt_detonation, + N50Mt_detonation = N50Mt_detonation, + N100Mt_detonation = N100Mt_detonation, + N1Gt_detonation = N1Gt_detonation +} + diff --git a/True-Nukes/prototypes/nukes/data-nuke-terrain.lua b/True-Nukes/prototypes/nukes/data-nuke-terrain.lua new file mode 100644 index 00000000..eccd8252 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nuke-terrain.lua @@ -0,0 +1,311 @@ +data.raw["tile"]["sand-1"].layer = 11 +data.raw["tile"]["sand-2"].layer = 12 +data.raw["tile"]["sand-3"].layer = 13 + + +local function make_tile_transition_from_template_variation(src_x, src_y, cnt_, line_len_, is_tall, normal_res_transition, high_res_transition) + return + { + picture = normal_res_transition, + count = cnt_, + line_length = line_len_, + x = src_x, + y = src_y, + tall = is_tall, + hr_version = + { + picture = high_res_transition, + count = cnt_, + line_length = line_len_, + x = 2 * src_x, + y = 2 * (src_y or 0), + tall = is_tall, + scale = 0.5 + } + } +end +local function water_transition_template_with_effect(to_tiles, normal_res_transition, high_res_transition, options) + return make_generic_transition_template(to_tiles, water_transition_group_id, nil, normal_res_transition, high_res_transition, options, true, false, true) +end + +function make_generic_transition_template(to_tiles, group1, group2, normal_res_transition, high_res_transition, options, base_layer, background, mask) + local t = options.base or {} + t.to_tiles = to_tiles + t.transition_group = group1 + t.transition_group1 = group2 and group1 or nil + t.transition_group2 = group2 + local default_count = options.count or 16 + for k,y in pairs({inner_corner = 0, outer_corner = 288, side = 576, u_transition = 864, o_transition = 1152}) do + local count = options[k .. "_count"] or default_count + if count > 0 and type(y) == "number" then + local line_length = options[k .. "_line_length"] or count + local is_tall = true + if (options[k .. "_tall"] == false) then + is_tall = false + end + if base_layer == true then + t[k] = make_tile_transition_from_template_variation(0, y, count, line_length, is_tall, normal_res_transition, high_res_transition) + end + if background == true then + t[k .. "_background"] = make_tile_transition_from_template_variation(544, y, count, line_length, is_tall, normal_res_transition, high_res_transition) + end + if mask == true then + t[k .. "_mask"] = make_tile_transition_from_template_variation(1088, y, count, line_length, nil, normal_res_transition, high_res_transition) + end + + if options.effect_map ~= nil then + local effect_default_count = options.effect_map.count or 16 + local effect_count = options.effect_map[k .. "_count"] or effect_default_count + if effect_count > 0 then + local effect_line_length = options.effect_map[k .. "_line_length"] or effect_count + local effect_is_tall = true + if (options.effect_map[k .. "_tall"] == false) then + effect_is_tall = false + end + t[k .. "_effect_map"] = make_tile_transition_from_template_variation(0, y, effect_count, effect_line_length, effect_is_tall, options.effect_map.filename_norm, options.effect_map.filename_high) + end + end + end + end + return t +end +local nuclear_shallow_transitions = + { + water_transition_template_with_effect + ( + {"nuclear-deep", "nuclear-crater", "nuclear-deep-fill", "nuclear-deep-shallow-fill", "nuclear-crater-shallow-fill"}, + "__base__/graphics/terrain/water-transitions/nuclear-ground.png", + "__base__/graphics/terrain/water-transitions/hr-nuclear-ground.png", + { + effect_map = { + filename_norm = "__base__/graphics/terrain/effect-maps/water-dirt-mask.png", + filename_high = "__base__/graphics/terrain/effect-maps/hr-water-dirt-mask.png", + count = 8, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 1 + }, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 4, + side_count = 8, + outer_corner_count = 8, + inner_corner_count = 8 + } + ), + ground_to_out_of_map_transition + } +local nuclear_crater_transitions = + { + water_transition_template_with_effect + ( + {"nuclear-deep", "nuclear-deep-shallow-fill"}, + "__base__/graphics/terrain/water-transitions/nuclear-ground.png", + "__base__/graphics/terrain/water-transitions/hr-nuclear-ground.png", + { + effect_map = { + filename_norm = "__base__/graphics/terrain/effect-maps/water-dirt-mask.png", + filename_high = "__base__/graphics/terrain/effect-maps/hr-water-dirt-mask.png", + count = 8, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 1 + }, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 4, + side_count = 8, + outer_corner_count = 8, + inner_corner_count = 8 + } + ), + ground_to_out_of_map_transition + } +local tileNames = {"nuclear-deep", "nuclear-crater", "nuclear-deep-fill", "nuclear-deep-shallow-fill", "nuclear-crater-shallow-fill", "nuclear-shallow"} +for _,tile in pairs(data.raw["tile"]) do + table.insert(tileNames, tile.name) +end +local nuclear_high_transitions = + { + water_transition_template_with_effect + ( + tileNames, + "__base__/graphics/terrain/water-transitions/nuclear-ground.png", + "__base__/graphics/terrain/water-transitions/hr-nuclear-ground.png", + { + effect_map = { + filename_norm = "__base__/graphics/terrain/effect-maps/water-dirt-mask.png", + filename_high = "__base__/graphics/terrain/effect-maps/hr-water-dirt-mask.png", + count = 8, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 1 + }, + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 4, + side_count = 8, + outer_corner_count = 8, + inner_corner_count = 8 + } + ), + ground_to_out_of_map_transition + } + + +local nuclear_shallow = table.deepcopy(data.raw["tile"]["nuclear-ground"]) +nuclear_shallow.name = "nuclear-shallow" +nuclear_shallow.collision_mask = + { + -- Player collides only with player-layer and train-layer, + -- this can have any tile collision masks it doesn't matter for being walkable by player but not buildable. + -- Having water-tile prevents placing paths, ground-tile prevents placing landfill. + -- Not sure what other side effects could different combinations of tile masks cause. + "water-tile", + --"ground-tile", + "resource-layer", + "item-layer", + "object-layer", + "doodad-layer" + } +nuclear_shallow.transition_merges_with_tile = "water" +nuclear_shallow.walking_speed_modifier = 0.7 +nuclear_shallow.layer = 10 +nuclear_shallow.map_color={r=46, g=38, b=33} +nuclear_shallow.transitions = nuclear_shallow_transitions; + +data:extend{nuclear_shallow} + +local nuclear_crater = table.deepcopy(data.raw["tile"]["nuclear-ground"]) +nuclear_crater.name = "nuclear-crater" +nuclear_crater.collision_mask = + { + "water-tile", + "resource-layer", + "item-layer", + "player-layer", + "doodad-layer" + } +nuclear_crater.transition_merges_with_tile = "water" +nuclear_crater.layer = 9 +nuclear_crater.map_color={r=43, g=35, b=31} +nuclear_crater.transitions = nuclear_crater_transitions; + +data:extend{nuclear_crater} + +local nuclear_shallow_water_in_crater = table.deepcopy(data.raw["tile"]["water-mud"]) +nuclear_shallow_water_in_crater.name = "nuclear-crater-shallow-fill" +nuclear_shallow_water_in_crater.walking_speed_modifier = 1 +nuclear_shallow_water_in_crater.autoplace = nil +nuclear_shallow_water_in_crater.collision_mask = + { + "water-tile", + "resource-layer", + "item-layer", + "player-layer", + "doodad-layer" + } + +data:extend{nuclear_shallow_water_in_crater} + + + +local nuclear_deep = table.deepcopy(data.raw["tile"]["nuclear-ground"]) +nuclear_deep.name = "nuclear-deep" +nuclear_deep.collision_mask = + { + "water-tile", + "resource-layer", + "item-layer", + "player-layer", + "doodad-layer" + } +nuclear_deep.transition_merges_with_tile = "water" +nuclear_deep.layer = 8 +nuclear_deep.map_color={r=39, g=31, b=28} +nuclear_deep.transitions = nil; + +data:extend{nuclear_deep} + + +local nuclear_shallow_water_in_deep = table.deepcopy(data.raw["tile"]["water-mud"]) +nuclear_shallow_water_in_deep.name = "nuclear-deep-shallow-fill" +nuclear_shallow_water_in_deep.autoplace = nil +nuclear_shallow_water_in_deep.walking_speed_modifier = 1 +nuclear_shallow_water_in_deep.collision_mask = + { + "water-tile", + "resource-layer", + "item-layer", + "player-layer", + "doodad-layer" + } +data:extend{nuclear_shallow_water_in_deep} + +local nuclear_water_in_deep = table.deepcopy(data.raw["tile"]["water"]) +nuclear_water_in_deep.name = "nuclear-deep-fill" +nuclear_water_in_deep.autoplace = nil +nuclear_water_in_deep.collision_mask = + { + "water-tile", + "resource-layer", + "item-layer", + "player-layer", + "doodad-layer" + } +data:extend{nuclear_water_in_deep} + +local nuclear_high = table.deepcopy(data.raw["tile"]["nuclear-ground"]) +nuclear_high.name = "nuclear-high" +nuclear_high.minable = {mining_time = 0.1, result = "stone"} +nuclear_high.can_be_part_of_blueprint = true +nuclear_high.collision_mask = + { + -- Player collides only with player-layer and train-layer, + -- this can have any tile collision masks it doesn't matter for being walkable by player but not buildable. + -- Having water-tile prevents placing paths, ground-tile prevents placing landfill. + -- Not sure what other side effects could different combinations of tile masks cause. + "ground-tile", + "item-layer", + "player-layer", + "object-layer", + "doodad-layer" + } +nuclear_high.transition_merges_with_tile = "water" +nuclear_high.layer = 128 +nuclear_high.map_color={r=53, g=43, b=39} +nuclear_high.transitions = nuclear_high_transitions; + +data:extend{nuclear_high} + + +data:extend{{ + type = "item", + name = "nuclear-crater-mound", + icon = "__base__/graphics/icons/stone.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "terrain", + order = "c[nuclear-crater-mound]", + stack_size = 100, + place_as_tile = + { + result = "nuclear-high", + condition_size = 6, + condition = + { + "water-tile", + "ground-tile", + "item-layer", + "player-layer", + "object-layer", + "doodad-layer" + } + } +}} +data.raw["tile"]["nuclear-deep"].allowed_neighbors = {}; +data.raw["tile"]["nuclear-deep-shallow-fill"].allowed_neighbors = {}; +data.raw["tile"]["nuclear-deep-fill"].allowed_neighbors = {}; +data.raw["tile"]["nuclear-crater"].allowed_neighbors = {}; +data.raw["tile"]["nuclear-crater-shallow-fill"].allowed_neighbors = {}; +data.raw["tile"]["nuclear-shallow"].allowed_neighbors = {}; + diff --git a/True-Nukes/prototypes/nukes/data-nukes-achievements.lua b/True-Nukes/prototypes/nukes/data-nukes-achievements.lua new file mode 100644 index 00000000..2e408f3a --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-achievements.lua @@ -0,0 +1,86 @@ +data:extend{ + { + type = "achievement", + name = "test-20t", + order = "g-TN-a", + icon = "__True-Nukes__/graphics/achievements/test-20t.png", + icon_size = 128 + }, + { + type = "achievement", + name = "test-15kt", + order = "g-TN-d", + icon = "__True-Nukes__/graphics/achievements/test-15kt.png", + icon_size = 128 + }, + { + type = "achievement", + name = "detonate-1Gt", + order = "g-TN-h", + icon = "__True-Nukes__/graphics/achievements/detonate-1Gt.png", + icon_size = 128 + }, + { + type = "achievement", + name = "stop-1Gt", + order = "g-TN-i", + icon = "__True-Nukes__/graphics/achievements/stop-1Gt.png", + icon_size = 128 + }, + { + type = "achievement", + name = "shoot-fusion", + order = "g-TN-f", + icon = "__True-Nukes__/graphics/achievements/shoot-fusion.png", + icon_size = 128 + }, + { + type = "achievement", + name = "lose-nuke", + order = "g-TN-c", + icon = "__True-Nukes__/graphics/achievements/lose-nuke.png", + icon_size = 128 + }, + { + type = "achievement", + name = "15kt-15hrs", + order = "g-TN-e", + icon = "__True-Nukes__/graphics/achievements/15kt-15hrs.png", + icon_size = 128 + }, + { + type = "achievement", + name = "nuke-self", + order = "g-TN-b", + icon = "__True-Nukes__/graphics/achievements/nuke-self.png", + icon_size = 128 + }, + { + type = "achievement", + name = "destroy-everything", + order = "g-TN-g", + icon = "__True-Nukes__/graphics/achievements/destroy-everything.png", + icon_size = 128 + }, + { + type = "achievement", + name = "multi-force-500t", + order = "g-TN-z", + icon = "__True-Nukes__/graphics/achievements/multi-force-500t.png", + icon_size = 128 + }, +-- { +-- type = "achievement", +-- name = "1Gt-spacecraft", +-- order = "g-TN-a", +-- icon = "__True-Nukes__/graphics/achievements/1Gt-spacecraft.png", +-- icon_size = 256 +-- }, +-- { +-- type = "achievement", +-- name = "5Mt-orbital", +-- order = "g-TN-a", +-- icon = "__True-Nukes__/graphics/achievements/5Mt-orbital.png", +-- icon_size = 256 +-- } +} diff --git a/True-Nukes/prototypes/nukes/data-nukes-building-warheads.lua b/True-Nukes/prototypes/nukes/data-nukes-building-warheads.lua new file mode 100644 index 00000000..2441c321 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-building-warheads.lua @@ -0,0 +1,303 @@ +local warheads_to_add = { + { + warhead = "TN-warhead-0-1--1", + name = "-atomic-0_1t", + label = "-1", + energy = 10 + }, + { + warhead = "TN-warhead-0-1--2", + name = "-atomic-0_1t", + label = "-2", + energy = 10 + }, + { + warhead = "TN-warhead-0-1--3", + name = "-atomic-0_1t", + label = "-3", + energy = 10 + }, + { + warhead = "TN-warhead-0-5--1", + name = "-atomic-0_5t", + label = "-1", + energy = 10 + }, + { + warhead = "TN-warhead-0-5--2", + name = "-atomic-0_5t", + label = "-2", + energy = 10 + }, + { + warhead = "TN-warhead-0-5--3", + name = "-atomic-0_5t", + label = "-3", + energy = 10 + }, + + { + warhead = "TN-warhead-2--1", + name = "-atomic-2t", + label = "-1", + energy = 10 + }, + { + warhead = "TN-warhead-2--2", + name = "-atomic-2t", + label = "-2", + energy = 10 + }, + { + warhead = "TN-warhead-2--3", + name = "-atomic-2t", + label = "-3", + energy = 10 + }, + + { + warhead = "TN-warhead-4--1", + name = "-atomic-4t", + label = "-1", + energy = 10 + }, + { + warhead = "TN-warhead-4--2", + name = "-atomic-4t", + label = "-2", + energy = 10 + }, + { + warhead = "TN-warhead-4--3", + name = "-atomic-4t", + label = "-3", + energy = 10 + }, + { + warhead = "TN-warhead-8--1", + name = "-atomic-8t", + label = "-1", + energy = 10 + }, + { + warhead = "TN-warhead-8--2", + name = "-atomic-8t", + label = "-2", + energy = 10 + }, + { + warhead = "TN-warhead-8--3", + name = "-atomic-8t", + label = "-3", + energy = 10 + }, + + { + warhead = "TN-warhead-20--1", + name = "-atomic-20t", + label = "-1", + energy = 20 + }, + { + warhead = "TN-warhead-20--2", + name = "-atomic-20t", + label = "-2", + energy = 20 + }, + { + warhead = "TN-warhead-20--3", + name = "-atomic-20t", + label = "-3", + energy = 20 + }, + + { + warhead = "TN-warhead-500--1", + name = "-atomic-500t", + label = "-1", + energy = 30 + }, + { + warhead = "TN-warhead-500--2", + name = "-atomic-500t", + label = "-2", + energy = 30 + }, + { + warhead = "TN-warhead-500--3", + name = "-atomic-500t", + label = "-3", + energy = 30 + }, + + { + warhead = "TN-warhead-1k--1", + name = "-atomic-1kt", + label = "-1", + energy = 30 + }, + { + warhead = "TN-warhead-1k--2", + name = "-atomic-1kt", + label = "-2", + energy = 30 + }, + { + warhead = "TN-warhead-1k--3", + name = "-atomic-1kt", + label = "-3", + energy = 30 + }, + + { + warhead = "TN-warhead-15k--1", + name = "-atomic-15kt", + label = "-1", + energy = 60 + }, + { + warhead = "TN-warhead-15k--2", + name = "-atomic-15kt", + label = "-2", + energy = 60 + }, + { + warhead = "TN-warhead-15k--3", + name = "-atomic-15kt", + label = "-3", + energy = 60 + }, + + + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-15kt", + explosion = 1, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/15kiloton-detonation.png", + energy = 60 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-100kt", + explosion = 2, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/100kiloton-detonation.png", + energy = 90 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-1Mt", + explosion = 3, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/megaton-detonation.png", + energy = 120 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-5Mt", + explosion = 4, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/5megaton-detonation.png", + energy = 120 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-10Mt", + explosion = 5, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/10megaton-detonation.png", + energy = 180 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-50Mt", + explosion = 6, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/50megaton-detonation.png", + energy = 300 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-100Mt", + explosion = 7, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/100megaton-detonation.png", + energy = 480 + }, + { + warhead = "TN-warhead-big--1", + name = "-atomic-2-stage-1Gt", + explosion = 8, + label = "-1", + fusion = true, + icon = "__True-Nukes__/graphics/1gigaton-detonation.png", + energy = 600 + }, + + + { + warhead = "TN-warhead-big--2", + name = "-atomic-2-stage-15kt", + explosion = 1, + label = "-2", + fusion = true, + icon = "__True-Nukes__/graphics/15kiloton-detonation.png", + energy = 60 + }, + { + warhead = "TN-warhead-big--2", + name = "-atomic-2-stage-100kt", + explosion = 2, + label = "-2", + fusion = true, + icon = "__True-Nukes__/graphics/100kiloton-detonation.png", + energy = 90 + }, + { + warhead = "TN-warhead-big--2", + name = "-atomic-2-stage-1Mt", + explosion = 3, + label = "-2", + fusion = true, + icon = "__True-Nukes__/graphics/megaton-detonation.png", + energy = 120 + }, + { + warhead = "TN-warhead-big--2", + name = "-atomic-2-stage-5Mt", + explosion = 4, + label = "-2", + fusion = true, + icon = "__True-Nukes__/graphics/5megaton-detonation.png", + energy = 120 + }, + + + { + warhead = "TN-warhead-big--3", + name = "-atomic-2-stage-15kt", + explosion = 1, + label = "-3", + fusion = true, + icon = "__True-Nukes__/graphics/15kiloton-detonation.png", + energy = 60 + }, + { + warhead = "TN-warhead-big--3", + name = "-atomic-2-stage-100kt", + explosion = 2, + label = "-3", + fusion = true, + icon = "__True-Nukes__/graphics/100kiloton-detonation.png", + energy = 90 + }, +} +return warheads_to_add diff --git a/True-Nukes/prototypes/nukes/data-nukes-buildings.lua b/True-Nukes/prototypes/nukes/data-nukes-buildings.lua new file mode 100644 index 00000000..c3d0fae8 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-buildings.lua @@ -0,0 +1,440 @@ +local hit_effects = require ("__base__.prototypes.entity.hit-effects") +local sounds = require("__base__.prototypes.entity.sounds") + +require("__Warheads__.prototypes.warheads") + +table.insert(data.raw.technology["basic-atomic-weapons"].effects, + { + type = "unlock-recipe", + recipe = "nuclear-test-site" + }) +table.insert(data.raw.technology["fusion-weapons"].effects, + { + type = "unlock-recipe", + recipe = "fusion-test-site" + }) +local warheads_to_add = require("data-nukes-building-warheads") + + +for _,w in pairs(warheads_to_add) do + if data.raw.item[w.warhead] then + local warhead = warheads[w.warhead] + local explosion + if(w.explosion) then + explosion = warhead.explosions[w.explosion] + else + explosion = {appendOrder = "", appendName = ""} + end + local recipe = { + type = "recipe", + name = "detonation" .. warhead.appendName .. explosion.appendName .. w.label, + category = "nuclear-detonation", + enabled = true, + hide_from_player_crafting = true, + hide_from_stats = true, + energy_required = w.energy, + ingredients = + { + {w.warhead, 1} + }, + result = "detonation" .. warhead.appendName .. explosion.appendName .. w.label, + } + if(w.fusion) then + recipe.category = "fusion-detonation" + end + if warhead.additional_ingedients then + for _,i in pairs(warhead.additional_ingedients) do + table.insert(recipe.ingredients, i) + end + end + if explosion.additional_ingedients then + for _,i in pairs(explosion.additional_ingedients) do + table.insert(recipe.ingredients, i) + end + end + local item = { + type = "item", + name = "detonation" .. warhead.appendName .. explosion.appendName .. w.label, + icon = w.icon or "__True-Nukes__/graphics/15kiloton-detonation.png", + icon_size = 64, icon_mipmaps = 1, + subgroup = "TN-atomic-detonation", + order = "a[nuke]" ..warhead.appendOrder .. explosion.appendOrder .. w.label, + stack_size = 1 + } + + data:extend{recipe, item} + end +end + + + + + + + + +data:extend{ + { + type = "recipe-category", + name = "nuclear-detonation" + }, + { + type = "recipe-category", + name = "fusion-detonation" + }, + { + name = "TN-atomic-detonation", + type = "item-subgroup", + group = "combat", + order = "z1[TN-atomic-detonation]" + } +} + + + +data:extend{ + { + type = "recipe", + name = "nuclear-test-site", + enabled = false, + energy_required = 120, + ingredients = + { + {"steel-plate", 200}, + {"concrete", 200}, + {"advanced-circuit", 25}, + {"accumulator", 5} + }, + result = "nuclear-test-site" + }, + { + type = "recipe", + name = "fusion-test-site", + enabled = false, + energy_required = 120, + ingredients = + { + {"steel-plate", 2000}, + {"refined-concrete", 2000}, + {"processing-unit", 25}, + {"accumulator", 50} + }, + result = "fusion-test-site" + }, + { + type = "item", + name = "nuclear-test-site", + icon = "__True-Nukes__/graphics/nuclear-test-building.png", + icon_size = 64, icon_mipmaps = 1, + subgroup = "defensive-structure", + order = "e[nuke]-a[nuclear-test-site]", + place_result = "nuclear-test-site", + stack_size = 1 + }, + { + type = "item", + name = "fusion-test-site", + icon = "__True-Nukes__/graphics/fusion-test-building.png", + icon_size = 64, icon_mipmaps = 1, + subgroup = "defensive-structure", + order = "e[nuke]-b[fusion-test-site]", + place_result = "fusion-test-site", + stack_size = 1 + }, + { + type = "furnace", + name = "nuclear-test-site", + is_military_target = true, + icon = "__True-Nukes__/graphics/nuclear-test-building.png", + icon_size = 64, icon_mipmaps = 1, + source_inventory_size = 1, + result_inventory_size = 1, + flags = {"placeable-neutral", "placeable-player", "player-creation"}, + minable = {mining_time = 10, result = "nuclear-test-site"}, + max_health = 5000, + corpse = "assembling-machine-1-remnants", + dying_explosion = "massive-explosion", + resistances = + { + { + type = "fire", + percent = 70 + } + }, + collision_box = {{-1.40, -1.40}, {1.40, 1.40}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + damaged_trigger_effect = hit_effects.entity(), + alert_icon_shift = util.by_pixel(-3, -12), + map_color = {r = 0, g = 1, b = 0, a = 1}, + created_effect = { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = { + type = "script", + effect_id = "Mega-nuke built" + } + } + }, + dying_trigger_effect = + { + type = "nested-result", + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = { + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1, + radius = 1, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "lingering-fallout", + starting_speed = 0.0001, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 5, + radius = 5, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } + } + } + } + }, + animation = + { + layers = + { + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-base.png", + width = 212, + height = 192, + shift = util.by_pixel(0, -5), + scale = 0.5, + hr_version = + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-base.png", + width = 212, + height = 192, + shift = util.by_pixel(0, -5), + scale = 0.5 + } + }, + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-shadow.png", + priority = "high", + width = 287, + height = 159, + repeat_count = repeat_count, + shift = util.by_pixel(20, 6), + draw_as_shadow = true, + scale = 0.5, + hr_version = + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-shadow.png", + priority = "high", + width = 287, + height = 159, + repeat_count = repeat_count, + shift = util.by_pixel(20, 6), + draw_as_shadow = true, + scale = 0.5 + } + } + } + }, + crafting_categories = {"nuclear-detonation"}, + crafting_speed = 1, + energy_source = {type = "void"}, + energy_usage = "1kW", + open_sound = sounds.machine_open, + close_sound = sounds.machine_close, + vehicle_impact_sound = sounds.generic_impact, + working_sound = + { + sound = + { + filename = "__base__/sound/silo-alarm.ogg", + volume = 1.0 + }, + use_doppler_shift = false, + audible_distance_modifier = 1, + fade_in_ticks = 4, + fade_out_ticks = 20 + } + }, + { + type = "assembling-machine", + name = "fusion-test-site", + is_military_target = true, + icon = "__True-Nukes__/graphics/fusion-test-building.png", + icon_size = 64, icon_mipmaps = 1, + source_inventory_size = 1, + result_inventory_size = 1, + flags = {"placeable-neutral", "placeable-player", "player-creation"}, + minable = {mining_time = 10, result = "fusion-test-site"}, + max_health = 5000, + corpse = "assembling-machine-1-remnants", + dying_explosion = "massive-explosion", + resistances = + { + { + type = "fire", + percent = 70 + } + }, + collision_box = {{-1.40, -1.40}, {1.40, 1.40}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + damaged_trigger_effect = hit_effects.entity(), + alert_icon_shift = util.by_pixel(-3, -12), + map_color = {r = 0, g = 1, b = 0, a = 1}, + created_effect = { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = { + type = "script", + effect_id = "Mega-nuke built" + } + } + }, + dying_trigger_effect = + { + type = "nested-result", + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = { + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1, + radius = 1, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "lingering-fallout", + starting_speed = 0.0001, + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 5, + radius = 5, + action_delivery = + { + type = "projectile", + show_in_tooltip = false, + projectile = "fallout", + starting_speed = 0.0001 + } + } + } + } + } + } + }, + animation = + { + layers = + { + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-base.png", + width = 212, + height = 192, + shift = util.by_pixel(0, -5), + scale = 0.5, + hr_version = + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-base.png", + width = 212, + height = 192, + shift = util.by_pixel(0, -5), + scale = 0.5 + } + }, + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-shadow.png", + priority = "high", + width = 287, + height = 159, + repeat_count = repeat_count, + shift = util.by_pixel(20, 6), + draw_as_shadow = true, + scale = 0.5, + hr_version = + { + filename = "__True-Nukes__/graphics/megaton-nuke/megaton-nuke-shadow.png", + priority = "high", + width = 287, + height = 159, + repeat_count = repeat_count, + shift = util.by_pixel(20, 6), + draw_as_shadow = true, + scale = 0.5 + } + } + } + }, + crafting_categories = {"fusion-detonation"}, + crafting_speed = 1, + energy_source = {type = "void"}, + energy_usage = "1kW", + open_sound = sounds.machine_open, + close_sound = sounds.machine_close, + vehicle_impact_sound = sounds.generic_impact, + working_sound = + { + sound = + { + filename = "__base__/sound/silo-alarm.ogg", + volume = 1.0 + }, + use_doppler_shift = false, + audible_distance_modifier = 1, + fade_in_ticks = 4, + fade_out_ticks = 20 + } + } +} diff --git a/True-Nukes/prototypes/nukes/data-nukes-intermediate.lua b/True-Nukes/prototypes/nukes/data-nukes-intermediate.lua new file mode 100644 index 00000000..cd94cd61 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-intermediate.lua @@ -0,0 +1,385 @@ +local nuke_materials = require("data-nukes-material") + +if(nuke_materials.smallBoomMaterial == "californium") then + data:extend({ + { + type = "item", + name = "californium", + icon = "__True-Nukes__/graphics/californium.png", + icon_size = 64, icon_mipmaps = 4, + pictures = + { + layers = + { + { + size = 64, + filename = "__True-Nukes__/graphics/californium.png", + scale = 0.25, + mipmap_count = 4 + }, + { + draw_as_light = true, + blend_mode = "additive", + size = 64, + filename = "__base__/graphics/icons/uranium-235.png", + scale = 0.25, + tint = {r = 0.8, g = 0.8, b = 0.1, a = 0.8}, + mipmap_count = 4 + } + } + }, + subgroup = "intermediate-product", + order = "r[z-californium]", + stack_size = 100 + }, + { + type = "recipe", + name = "californium-processing", + energy_required = 120, + enabled = false, + category = "centrifuging", + ingredients = {{nuke_materials.boomMaterial, 10}, {nuke_materials.deadMaterial, 1}}, + icon = "__True-Nukes__/graphics/californium-processing.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "intermediate-product", + order = "r[uranium-processing]-da[californium-processing]", + main_product = "", + results = {{nuke_materials.boomMaterial, 9}, {"californium", 1}}, + allow_decomposition = false + }, + { + type = "recipe", + name = "advanced-californium-processing", + energy_required = 20, + enabled = false, + category = "centrifuging", + ingredients = {{nuke_materials.boomMaterial, 5}, {nuke_materials.reflector, 2}}, + icons = { + {icon = "__True-Nukes__/graphics/californium-processing.png", icon_size = 64, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.333, shift = {10, -10}} + }, + subgroup = "intermediate-product", + order = "r[uranium-processing]-dk[californium-processing]", + main_product = "", + results = {{nuke_materials.boomMaterial, 4}, {nuke_materials.deadMaterial, 1}, {nuke_materials.reflector, 1}, {name = nuke_materials.reflector, amount = 1, probability = 0.6}, {"californium", 1}}, + allow_decomposition = false + }, + }); +end + +data:extend{ + { + type = "recipe", + name = "advanced-kovarex-enrichment-process", + energy_required = 10, + enabled = false, + category = "centrifuging", + ingredients = {{"uranium-235", 20}, {"uranium-238", 5}, {nuke_materials.reflector, 2}}, + icons = { + {icon = "__base__/graphics/icons/kovarex-enrichment-process.png", icon_size = 64, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.333, shift = {10, -10}} + }, + subgroup = "intermediate-product", + order = "r[uranium-processing]-cc[kovarex-enrichment-process]", + main_product = "", + results = {{"uranium-235", 21}, {"uranium-238", 2}, {nuke_materials.reflector, 1}, {name = nuke_materials.reflector, amount = 1, probability = 0.6}}, + allow_decomposition = false + }, + { + type = "item", + name = "FOGBANK", + icon = "__True-Nukes__/graphics/FOGBANK.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "intermediate-product", + order = "r[fogbank]", + stack_size = 50 + }, + { + type = "recipe", + name = "FOGBANK", + category = "chemistry", + energy_required = 20, + enabled = false, + ingredients = + { + {type="fluid", name="petroleum-gas", amount=20}, + {type="fluid", name="sulfuric-acid", amount=20}, + {type="item", name="low-density-structure", amount=10}, + {type="item", name="plastic-bar", amount=10} + }, + results= + { + {type="item", name="FOGBANK", amount=1} + }, + crafting_machine_tint = + { + primary = {r = 0.965, g = 0.482, b = 0.338, a = 1.000}, -- #f67a56ff + secondary = {r = 0.831, g = 0.560, b = 0.222, a = 1.000}, -- #d38e38ff + tertiary = {r = 0.728, g = 0.818, b = 0.443, a = 1.000}, -- #b9d070ff + quaternary = {r = 0.939, g = 0.763, b = 0.191, a = 1.000}, -- #efc230ff + } + } +}; + +data:extend{ + { + type = "item", + name = "neutron-reflector", + icon = "__True-Nukes__/graphics/neutron-reflector.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "intermediate-product", + order = "r[neutron-reflector]", + stack_size = 50 + }, + { + type = "recipe", + name = "neutron-reflector", + category = "chemistry", + energy_required = 10, + enabled = false, + ingredients = + { + {type="item", name="low-density-structure", amount=1}, + {type="fluid", name="petroleum-gas", amount=10}, + {type="item", name="plastic-bar", amount=10}, + {type="item", name="iron-plate", amount=5}, + {type="item", name="sulfur", amount=10} + }, + results= + { + {type="item", name="neutron-reflector", amount=1} + }, + crafting_machine_tint = + { + primary = {r = 0.965, g = 0.482, b = 0.338, a = 1.000}, -- #f67a56ff + secondary = {r = 0.831, g = 0.560, b = 0.222, a = 1.000}, -- #d38e38ff + tertiary = {r = 0.728, g = 0.818, b = 0.443, a = 1.000}, -- #b9d070ff + quaternary = {r = 0.939, g = 0.763, b = 0.191, a = 1.000}, -- #efc230ff + } + } +}; + +if(nuke_materials.fusionMaterial == "tritium-canister") then + data:extend({ + { + type = "item", + name = "tritium-breeder-fuel-cell", + icon = "__True-Nukes__/graphics/tritium-breeder-fuel-cell.png", + icon_size = 64, icon_mipmaps = 4, + pictures = + { + layers = + { + { + size = 64, + filename = "__True-Nukes__/graphics/tritium-breeder-fuel-cell.png", + scale = 0.25, + mipmap_count = 4 + }, + { + draw_as_light = true, + flags = {"light"}, + size = 64, + filename = "__True-Nukes__/graphics/tritium-breeder-fuel-cell-light.png", + scale = 0.25, + mipmap_count = 4 + } + } + }, + subgroup = "intermediate-product", + order = "r[uranium-processing]-ce[tritium-breeder-fuel-cell]", + fuel_category = "nuclear", + burnt_result = "used-up-tritium-breeder-fuel-cell", + fuel_value = "4GJ", + stack_size = 50 + }, + { + type = "item", + name = "advanced-tritium-breeder-fuel-cell", + icons = { + {icon = "__True-Nukes__/graphics/tritium-breeder-fuel-cell.png", icon_size = 64, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.333, shift = {10, -10}} + }, + pictures = + { + layers = + { + { + size = 64, + filename = "__True-Nukes__/graphics/tritium-breeder-fuel-cell.png", + scale = 0.25, + mipmap_count = 4 + }, + { + filename = "__True-Nukes__/graphics/plus-red.png", + size = 32, + scale = 0.166, + shift = {0.1875, -0.1875} + }, + { + draw_as_light = true, + flags = {"light"}, + size = 64, + filename = "__True-Nukes__/graphics/tritium-breeder-fuel-cell-light.png", + scale = 0.25, + mipmap_count = 4 + } + } + }, + subgroup = "intermediate-product", + order = "r[uranium-processing]-cg[adv-tritium-breeder-fuel-cell]", + fuel_category = "nuclear", + burnt_result = "used-up-advanced-tritium-breeder-fuel-cell", + fuel_value = "2GJ", + stack_size = 50 + }, + { + type = "item", + name = "used-up-tritium-breeder-fuel-cell", + icon = "__True-Nukes__/graphics/used-up-tritium-breeder-fuel-cell.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "intermediate-product", + order = "s[used-up-tritium-breeder-fuel-cell]", + stack_size = 50 + }, + { + type = "item", + name = "used-up-advanced-tritium-breeder-fuel-cell", + icons = { + {icon = "__True-Nukes__/graphics/used-up-tritium-breeder-fuel-cell.png", icon_size = 64, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.333, shift = {10, -10}} + }, + subgroup = "intermediate-product", + order = "t[used-up-tritium-breeder-fuel-cell]", + stack_size = 50 + }, + + { + type = "recipe", + name = "tritium-extraction", + energy_required = 60, + enabled = false, + category = "centrifuging", + ingredients = {{"used-up-tritium-breeder-fuel-cell", 5}, {"plastic-bar", 5}}, + icon = "__True-Nukes__/graphics/tritium-extraction.png", + icon_size = 64, icon_mipmaps = 1, + subgroup = "intermediate-product", + order = "r[uranium-processing]-cj[tritium-extraction]", + main_product = "", + results = {{"tritium-canister", 1}, {"uranium-238", 3}}, + allow_decomposition = false + }, + + { + type = "recipe", + name = "advanced-tritium-extraction", + energy_required = 30, + enabled = false, + category = "centrifuging", + ingredients = {{"used-up-advanced-tritium-breeder-fuel-cell", 2}, {"plastic-bar", 5}}, + icons = { + {icon = "__True-Nukes__/graphics/tritium-extraction.png", icon_size = 64, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.333, shift = {10, -10}} + }, + subgroup = "intermediate-product", + order = "r[uranium-processing]-cm[tritium-extraction]", + main_product = "", + results = {{"tritium-canister", 1}, {"uranium-238", 2}, {name = nuke_materials.reflector, amount = 1, probability = 0.8}}, + allow_decomposition = false + }, + { + type = "recipe", + name = "advanced-tritium-breeder-fuel-cell", + energy_required = 15, + enabled = false, + category = "crafting-with-fluid", + ingredients = + { + {nuke_materials.reflector, 5}, + {"iron-plate", 10}, + {"uranium-235", 2}, + {"uranium-238", 15}, + {type="fluid", name="water", amount=100} + }, + result = "advanced-tritium-breeder-fuel-cell", + result_count = 10 + }, + { + type = "recipe", + name = "tritium-breeder-fuel-cell", + energy_required = 10, + enabled = false, + category = "crafting-with-fluid", + ingredients = + { + {"iron-plate", 10}, + {"uranium-235", 1}, + {"uranium-238", 19}, + {type="fluid", name="water", amount=100} + }, + result = "tritium-breeder-fuel-cell", + result_count = 10 + }, + { + type = "item", + name = "tritium-canister", + icon = "__True-Nukes__/graphics/tritium-canister.png", + icon_size = 64, icon_mipmaps = 1, + pictures = + { + layers = + { + { + size = 64, + filename = "__True-Nukes__/graphics/tritium-canister.png", + scale = 0.25, + mipmap_count = 1 + }, + { + draw_as_light = true, + flags = {"light"}, + size = 64, + filename = "__True-Nukes__/graphics/tritium-canister-light.png", + scale = 0.25, + mipmap_count = 1 + } + } + }, + subgroup = "intermediate-product", + order = "q[tritium-canister]", + stack_size = 50 + } + }) +end +for i = 0,100 do + if(data.raw.module["productivity-module-" .. i] and data.raw.module["productivity-module-" .. i].limitation) then + if(nuke_materials.smallBoomMaterial == "californium") then + table.insert(data.raw.module["productivity-module-" .. i].limitation, "californium-processing") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "advanced-californium-processing") + end + if(nuke_materials.fusionMaterial == "tritium-canister") then + table.insert(data.raw.module["productivity-module-" .. i].limitation, "tritium-breeder-fuel-cell") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "advanced-tritium-breeder-fuel-cell") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "tritium-extraction") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "advanced-tritium-extraction") + end + table.insert(data.raw.module["productivity-module-" .. i].limitation, "advanced-kovarex-enrichment-process") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "FOGBANK") + table.insert(data.raw.module["productivity-module-" .. i].limitation, "neutron-reflector") + end +end +if(data.raw.module["productivity-module"] and data.raw.module["productivity-module"].limitation) then + if(nuke_materials.smallBoomMaterial == "californium") then + table.insert(data.raw.module["productivity-module"].limitation, "californium-processing") + table.insert(data.raw.module["productivity-module"].limitation, "advanced-californium-processing") + end + if(nuke_materials.fusionMaterial == "tritium-canister") then + table.insert(data.raw.module["productivity-module"].limitation, "tritium-breeder-fuel-cell") + table.insert(data.raw.module["productivity-module"].limitation, "advanced-tritium-breeder-fuel-cell") + table.insert(data.raw.module["productivity-module"].limitation, "tritium-extraction") + table.insert(data.raw.module["productivity-module"].limitation, "advanced-tritium-extraction") + end + table.insert(data.raw.module["productivity-module"].limitation, "advanced-kovarex-enrichment-process") + table.insert(data.raw.module["productivity-module"].limitation, "FOGBANK") + table.insert(data.raw.module["productivity-module"].limitation, "neutron-reflector") +end diff --git a/True-Nukes/prototypes/nukes/data-nukes-material.lua b/True-Nukes/prototypes/nukes/data-nukes-material.lua new file mode 100644 index 00000000..fc0944ab --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-material.lua @@ -0,0 +1,72 @@ +local boomMaterial = "uranium-235"; +local UBoomMaterial = "uranium-235"; + + +local deadMaterial = "uranium-238"; + +local smallBoomMaterial = "californium"; + +local lightMaterial = "low-density-structure"; + +local computer = "processing-unit"; + +local fusionMaterial = "tritium-canister"; + +local reflector = "neutron-reflector"; + + +if settings.startup["dead-material"].value == "mod-dependant" then + +elseif settings.startup["dead-material"].value == "custom" then + boomMaterial = settings.startup["dead-material-name"].value +end + +if settings.startup["boom-material"].value == "mod-dependant" then + if mods["apm_nuclear_ldinc"] then + boomMaterial = "apm_oxide_pellet_pu239"; + end + if mods["Clowns-Nuclear"] then + boomMaterial = "plutonium-239"; + end + if mods["Nuclear Fuel"] then + boomMaterial = "plutonium"; + end + if mods["PlutoniumEnergy"] then + boomMaterial = "plutonium-239"; + end +elseif settings.startup["boom-material"].value == "custom" then + boomMaterial = settings.startup["boom-material-name"].value +end + +if(settings.startup["small-boom-material"].value == "same-as-boom") then + smallBoomMaterial = boomMaterial +elseif settings.startup["small-boom-material"].value == "mod-dependant" then + +elseif settings.startup["small-boom-material"].value == "custom" then + smallBoomMaterial = settings.startup["small-boom-material-name"].value +end + +if settings.startup["computer-material"].value == "mod-dependant" then + if mods["bobelectronics"] then + computer = "superior-circuit-board" + end +elseif settings.startup["computer-material"].value == "custom" then + computer = settings.startup["computer-material-name"].value +end + +if settings.startup["light-material"].value == "mod-dependant" then + +elseif settings.startup["light-material"].value == "custom" then + computer = settings.startup["light-material-name"].value +end + +return { + UBoomMaterial = UBoomMaterial, + boomMaterial = boomMaterial, + deadMaterial = deadMaterial, + smallBoomMaterial = smallBoomMaterial, + fusionMaterial = fusionMaterial, + lightMaterial = lightMaterial, + computer = computer, + reflector = reflector +}; diff --git a/True-Nukes/prototypes/nukes/data-nukes-technology.lua b/True-Nukes/prototypes/nukes/data-nukes-technology.lua new file mode 100644 index 00000000..36cf7ae1 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-technology.lua @@ -0,0 +1,597 @@ +local appearance = require("__Warheads__.prototypes.appearance-util") +local nuke_materials = require("data-nukes-material") + +specialTechForWarheadWeapon["artillery-shell-atomic-4t"] = "artillery-atomics" +specialTechForWarheadWeapon["artillery-shell-atomic-8t"] = "artillery-atomics" +specialTechForWarheadWeapon["artillery-shell-atomic-20t"] = "artillery-atomics" +specialTechForWarheadWeapon["artillery-shell-atomic-500t"] = "artillery-atomics" +specialTechForWarheadWeapon["artillery-shell-atomic-1kt"] = "artillery-atomics" + +specialTechForWarheadWeapon["land-mine-atomic-20t"] = "atomic-bomb" + +if(settings.startup["enable-nuclear-tests"].value) then + + if(warheads["TN-warhead-20--1"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-20t-1", + icons = appearance(warheads["TN-warhead-20--1"]).icons, + subgroup = "science-pack", + order = "za[atomic-20t-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-20--1"] = true + end + + if(warheads["TN-warhead-500--1"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-500t-1", + icons = appearance(warheads["TN-warhead-500--1"]).icons, + subgroup = "science-pack", + order = "zb[atomic-500t-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-500--1"] = true + end + + if(warheads["TN-warhead-20--3"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-20t-3", + icons = appearance(warheads["TN-warhead-20--3"]).icons, + subgroup = "science-pack", + order = "zc[atomic-20t-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-20--3"] = true + end + + if(warheads["TN-warhead-1k--1"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-1kt-1", + icons = appearance(warheads["TN-warhead-1k--1"]).icons, + subgroup = "science-pack", + order = "ze[atomic-1kt-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-1k--1"] = true + end + + if(warheads["TN-warhead-15k--1"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-15kt-1", + icons = appearance(warheads["TN-warhead-15k--1"]).icons, + subgroup = "science-pack", + order = "zd[atomic-15kt-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-15k--1"] = true + end + + if(warheads["TN-warhead-big--1"]) then + data:extend{ + { + type = "tool", + name = "test-pack-atomic-2-stage-100kt-1", + icons = appearance(warheads["TN-warhead-big--1"].explosions[2]).icons, + subgroup = "science-pack", + order = "ze[atomic-100kt-science-pack]", + stack_size = 200, + durability = 1, + durability_description_key = "description.science-pack-remaining-amount-key", + durability_description_value = "description.science-pack-remaining-amount-value" + } + } + generateWarheadAnyway["TN-warhead-big--1"] = true + end +end + +local standard = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, +} +local no_prod = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"utility-science-pack", 1}, +} +local no_util = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"production-science-pack", 1}, +} +local space = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"military-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + {"space-science-pack", 1}, +} + +if mods["apm_nuclear_ldinc"] then + table.insert(standard, {"apm_nuclear_science_pack", 1}); + table.insert(no_prod, {"apm_nuclear_science_pack", 1}); + table.insert(no_util, {"apm_nuclear_science_pack", 1}); + table.insert(space, {"apm_nuclear_science_pack", 1}); +end + +if (not settings.startup["keep-atomic-bomb-without-changes"]) and + (not settings.startup["enable-compact-medium-atomics"].value) and + (not settings.startup["enable-medium-atomics"].value) then + data.raw.technology["atomic-bomb"].effects[1] = nil +end +data.raw.technology["atomic-bomb"].prerequisites = {"basic-atomic-weapons", "rocket-control-unit", "rocket-fuel", "rocketry"} + + +data.raw.technology["atomic-bomb"].unit.count = 1 +if(settings.startup["enable-medium-atomics"].value and settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["atomic-bomb"].unit.ingredients = {{"test-pack-atomic-20t-1", 1}} +else + data.raw.technology["atomic-bomb"].unit.ingredients = no_prod +end +data.raw.technology["atomic-bomb"].order = "e-a-c" +data.raw.technology["atomic-bomb"].icon = "__True-Nukes__/graphics/nuke-tech.png" + +data:extend{ + { + type = "technology", + name = "basic-atomic-weapons", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/nuke-tech-basic.png", + effects = + { + + }, + prerequisites = {"military-4", "uranium-processing"}, + unit = + { + count = 1000, + ingredients = no_prod, + time = 45 + }, + order = "e-a-c" + }, +} + +if(settings.startup["enable-fire-shield"].value) then + table.insert(data.raw.technology["basic-atomic-weapons"].effects, { + type = "unlock-recipe", + recipe = "fire-shield-equipment" + }) +end + + +if(settings.startup["enable-large-atomics"].value) then + data:extend{ + { + type = "technology", + name = "expanded-atomics", + icon_size = 256, icon_mipmaps = 4, + icon = "__base__/graphics/technology/atomic-bomb.png", + effects = {}, + prerequisites = {"atomic-bomb", "kovarex-enrichment-process", "production-science-pack"}, + unit = + { + count = 2000, + ingredients = standard, + time = 45 + }, + order = "e-a-d" + }, + } +end +if(settings.startup["enable-large-atomics"].value) then + data:extend{ + { + type = "technology", + name = "full-fission-atomics", + icon_size = 256, icon_mipmaps = 4, + icon = "__base__/graphics/technology/atomic-bomb.png", + effects = {}, + prerequisites = {"expanded-atomics"}, + unit = + { + count = 250, + ingredients = no_util, + time = 45 + }, + order = "e-a-f" + }, + } + if(settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["full-fission-atomics"].unit = + { + count = 1, + ingredients = {{"test-pack-atomic-500t-1", 1}}, + time = 1 + } + end +end +if(settings.startup["enable-medium-atomics"].value or settings.startup["enable-large-atomics"].value or settings.startup["enable-compact-15kt"].value) then + data:extend{ + { + type = "technology", + name = "artillery-atomics", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/atomic-artillery-tech.png", + effects = {}, + prerequisites = {"expanded-atomics", "artillery"}, + unit = + { + count = 1000, + ingredients = no_util, + time = 60 + }, + order = "e-a-e" + }, + } +end + + +if(nuke_materials.smallBoomMaterial == "californium") then + if(settings.startup["enable-small-atomics"].value or settings.startup["enable-compact-medium-atomics"].value ) then + data:extend{ + { + type = "technology", + name = "californium-processing", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/californium-processing-tech.png", + effects = + { + { + type = "unlock-recipe", + recipe = "californium-processing" + }, + }, + prerequisites = {"kovarex-enrichment-process"}, + unit = + { + count = 500, + ingredients = { + {"automation-science-pack", 2}, + {"logistic-science-pack", 2}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 30 + }, + order = "e-p-b-d" + }, + { + type = "technology", + name = "californium-weapons", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/small-atomic-tech.png", + effects = {}, + prerequisites = {"expanded-atomics", "californium-processing"}, + unit = + { + count = 500, + ingredients = no_prod, + time = 45 + }, + order = "e-a-g" + }, + } + elseif settings.startup["enable-compact-large-atomics"].value then + data:extend{ + { + type = "technology", + name = "californium-processing", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/californium-processing-tech.png", + effects = + { + { + type = "unlock-recipe", + recipe = "californium-processing" + }, + }, + prerequisites = {"kovarex-enrichment-process"}, + unit = + { + count = 500, + ingredients = { + {"automation-science-pack", 2}, + {"logistic-science-pack", 2}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 30 + }, + order = "e-p-b-d" + }, + } + end +else + data:extend{ + { + type = "technology", + name = "californium-weapons", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/small-atomic-tech.png", + effects = {}, + prerequisites = {"expanded-atomics"}, + unit = + { + count = 500, + ingredients = no_prod, + time = 45 + }, + order = "e-a-g" + }, + } +end + +if(settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value) then + data:extend{ + { + type = "technology", + name = "compact-californium-weapons", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/many-small-atomic-tech.png", + effects = + { + { + type = "unlock-recipe", + recipe = "neutron-reflector" + }, + }, + prerequisites = {"californium-weapons"}, + unit = + { + count = 1000, + ingredients = standard, + time = 45 + }, + order = "e-a-h" + }, + } + +end + +if(settings.startup["enable-compact-15kt"].value or settings.startup["enable-compact-large-atomics"].value) then + data:extend{ + { + type = "technology", + name = "compact-full-fission-weapons", + icon_size = 256, icon_mipmaps = 4, + icon = "__True-Nukes__/graphics/many-atomic-tech.png", + effects = {}, + prerequisites = {"full-fission-atomics", "artillery-atomics"}, + unit = + { + count = 1, + ingredients = {}, + time = 1 + }, + order = "e-a-i" + }, + } + local canDoTest = true + if(settings.startup["enable-nuclear-tests"].value) then + if(settings.startup["enable-15kt"].value) then + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-15kt-1", 1}) + elseif(settings.startup["enable-large-atomics"].value)then + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-1kt-1", 1}) + else + canDoTest = false + end + end + if(settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value) then + table.insert(data.raw.technology["compact-full-fission-weapons"].prerequisites, "compact-californium-weapons") + + if(settings.startup["enable-nuclear-tests"].value and canDoTest) then + table.insert(data.raw.technology["compact-full-fission-weapons"].unit.ingredients, {"test-pack-atomic-20t-3", 1}) + end + elseif(settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value or settings.startup["enable-compact-large-atomics"].value) then + if(nuke_materials.smallBoomMaterial == "californium") then + table.insert(data.raw.technology["compact-full-fission-weapons"].prerequisites, "californium-processing") + end + table.insert(data.raw.technology["compact-full-fission-weapons"].effects, + { + type = "unlock-recipe", + recipe = "neutron-reflector" + }) + else + table.insert(data.raw.technology["compact-full-fission-weapons"].effects, + { + type = "unlock-recipe", + recipe = "neutron-reflector" + }) + end + + if not next(data.raw.technology["compact-full-fission-weapons"].unit.ingredients[1]) then + data.raw.technology["compact-full-fission-weapons"].unit = { + count = 500, + ingredients = space, + time = 60 + } + end +end +if(settings.startup["enable-fusion"].value or settings.startup["enable-fusion-building"].value) then + data:extend{ + { + type = "technology", + name = "tritium-processing", + icon_size = 256, icon_mipmaps = 1, + icon = "__True-Nukes__/graphics/tritium-processing.png", + effects = + { + { + type = "unlock-recipe", + recipe = "tritium-breeder-fuel-cell" + }, + { + type = "unlock-recipe", + recipe = "tritium-extraction" + } + }, + prerequisites = {"nuclear-fuel-reprocessing"}, + unit = + { + count = 2000, + ingredients = + { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1} + }, + time = 45 + }, + order = "e-a-l" + }, + { + type = "technology", + name = "fusion-weapons", + icon_size = 256, icon_mipmaps = 1, + icon = "__True-Nukes__/graphics/fusion-bomb.png", + effects = { + { + type = "unlock-recipe", + recipe = "FOGBANK" + } + }, + prerequisites = {"tritium-processing"}, + unit = + { + count = 2000, + ingredients = space, + time = 45 + }, + order = "e-a-j" + } + } + if(settings.startup["enable-compact-15kt"].value or settings.startup["enable-compact-large-atomics"].value) then + table.insert(data.raw.technology["fusion-weapons"].prerequisites, "compact-full-fission-weapons") + else + if (settings.startup["enable-compact-medium-atomics"].value or settings.startup["enable-compact-small-atomics"].value) then + table.insert(data.raw.technology["fusion-weapons"].prerequisites, "compact-californium-weapons") + end + if (settings.startup["enable-large-atomics"].value) then + table.insert(data.raw.technology["fusion-weapons"].prerequisites, "full-fission-atomics") + end + end +end +if(settings.startup["enable-compact-fusion"].value) then + data:extend{ + { + type = "technology", + name = "compact-fusion-weapons", + icon_size = 256, icon_mipmaps = 1, + icon = "__True-Nukes__/graphics/fusion-bomb.png", + effects = {}, + prerequisites = {"fusion-weapons"}, + unit = + { + count = 1000, + ingredients = space, + time = 90 + }, + order = "e-a-k" + } + } + + if(settings.startup["enable-nuclear-tests"].value) then + data.raw.technology["compact-fusion-weapons"].unit = + { + count = 1, + ingredients = {{"test-pack-atomic-2-stage-100kt-1", 1}}, + time = 1 + } + end +end + +if(settings.startup["enable-compact-small-atomics"].value or settings.startup["enable-compact-medium-atomics"].value or + settings.startup["enable-compact-large-atomics"].value or settings.startup["enable-compact-15kt"].value) then + + data:extend{ + { + type = "technology", + name = "dense-neutron-flux", + icons = { + {icon = "__Warheads__/graphics/blank-64.png", icon_size = 64, scale = 1, shift = {0, -0}}, + {icon = "__True-Nukes__/graphics/californium-processing-tech.png", icon_size = 256, scale = 0.125, shift = {12, -12}, icon_mipmaps = 4}, + {icon = "__base__/graphics/technology/kovarex-enrichment-process.png", icon_size = 256, scale = 0.125, shift = {-12, -12}, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/tritium-processing.png", icon_size = 256, scale = 0.125, shift = {0, 16}, icon_mipmaps = 4}, + {icon = "__True-Nukes__/graphics/plus-red.png", icon_size = 32, scale = 0.5, shift = {24, -24}}, + }, + effects = + { + { + type = "unlock-recipe", + recipe = "advanced-kovarex-enrichment-process" + }, + }, + prerequisites = {}, + unit = + { + count = 1000, + ingredients = standard, + time = 45 + }, + order = "e-a-h" + }, + } + if data.raw.recipe["advanced-californium-processing"] then + table.insert(data.raw.technology["dense-neutron-flux"].effects, { + type = "unlock-recipe", + recipe = "advanced-californium-processing" + }) + end + if data.raw.technology["compact-californium-weapons"] then + table.insert(data.raw.technology["dense-neutron-flux"].prerequisites, "compact-californium-weapons") + elseif data.raw.technology["compact-full-fission-weapons"] then + table.insert(data.raw.technology["dense-neutron-flux"].prerequisites, "compact-full-fission-weapons") + end + if data.raw.technology["tritium-processing"] then + table.insert(data.raw.technology["dense-neutron-flux"].prerequisites, "tritium-processing") + table.insert(data.raw.technology["dense-neutron-flux"].effects, { + type = "unlock-recipe", + recipe = "advanced-tritium-breeder-fuel-cell" + }) + table.insert(data.raw.technology["dense-neutron-flux"].effects, { + type = "unlock-recipe", + recipe = "advanced-tritium-extraction" + }) + end +end diff --git a/True-Nukes/prototypes/nukes/data-nukes-warheads-create.lua b/True-Nukes/prototypes/nukes/data-nukes-warheads-create.lua new file mode 100644 index 00000000..5139ed7d --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-warheads-create.lua @@ -0,0 +1,894 @@ +local nuke_materials = require("data-nukes-material") +local nuke_explosions = require("data-nuke-explosions") + +local dead = nuke_materials.deadMaterial +local boom = nuke_materials.boomMaterial +local small = nuke_materials.smallBoomMaterial +local light = nuke_materials.lightMaterial +local reflector = nuke_materials.reflector +local computer = nuke_materials.computer +local fusionMaterial = nuke_materials.fusionMaterial + +local create_utils = require("__Warheads__.prototypes.sprite-assembly-util") + + +local createAppearance = create_utils.createAppearance +local tints = create_utils.tints + + + +if(settings.startup["enable-small-atomics"].value) then + warheads["TN-warhead-0-1--1"] = { + appendName = "-atomic-0_1t", + appendOrder = "x-n-a-m-000001-1", + target_type = "position", + size = "tiny", + preciseSize = 8, + final_effect = nuke_explosions.N0_1t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "0_1t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 2, + stack_size = 100, + energy_required = 100, + collisions = false, + recipe_result_count = 10, + tech = "californium-weapons", + ingredients = { + {"steel-plate", 5}, + {light, 5}, + {computer, 2}, + {"explosives", 2}, + {dead, 4}, + {small, 10}, + }, + } + warheads["TN-warhead-0-5--1"] = { + appendName = "-atomic-0_5t", + appendOrder = "x-n-a-m-000005-1", + target_type = "position", + size = "small", + preciseSize = 12, + final_effect = nuke_explosions.N0_5t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "0_5t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 100, + energy_required = 90, + + collisions = false, + tech = "californium-weapons", + recipe_result_count = 6, + ingredients = { + {"steel-plate", 1}, + {light, 12}, + {computer, 3}, + {"explosives", 3}, + {dead, 4}, + {small, 12} + } + } + if(settings.startup["enable-compact-small-atomics"].value) then + warheads["TN-warhead-0-1--2"] = { + appendName = "-atomic-0_1t", + appendOrder = "x-n-a-m-000001-2", + target_type = "position", + size = "tiny", + preciseSize = 4, + final_effect = nuke_explosions.N0_1t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "0_1t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 200, + energy_required = 100, + collisions = false, + tech = "compact-californium-weapons", + recipe_result_count = 5, + ingredients = { + {light, 10}, + {computer, 2}, + {reflector, 1}, + {"explosives", 2}, + {dead, 1}, + {small, 8}, + } + } + warheads["TN-warhead-0-1--3"] = { + appendName = "-atomic-0_1t", + appendOrder = "x-n-a-m-000001-3", + target_type = "position", + size = "tiny", + preciseSize = 2, + final_effect = nuke_explosions.N0_1t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "0_1t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 200, + energy_required = 80, + collisions = false, + tech = "compact-californium-weapons", + recipe_result_count = 2, + ingredients = { + {light, 3}, + {computer, 2}, + {reflector, 2}, + {"explosives", 1}, + {small, 4}, + } + } + warheads["TN-warhead-0-5--2"] = { + appendName = "-atomic-0_5t", + appendOrder = "x-n-a-m-000005-2", + target_type = "position", + size = "tiny", + preciseSize = 8, + final_effect = nuke_explosions.N0_5t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "0_5t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 100, + energy_required = 90, + collisions = false, + tech = "compact-californium-weapons", + recipe_result_count = 3, + ingredients = { + {light, 9}, + {computer, 3}, + {reflector, 1}, + {"explosives", 2}, + {dead, 1}, + {small, 9} + } + } + warheads["TN-warhead-0-5--3"] = { + appendName = "-atomic-0_5t", + appendOrder = "x-n-a-m-000005-3", + target_type = "position", + size = "tiny", + preciseSize = 4, + final_effect = nuke_explosions.N0_5t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "0_5t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 100, + energy_required = 60, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {light, 2}, + {computer, 1}, + {reflector, 1}, + {"explosives", 1}, + {small, 5} + } + } + end +end +if (not settings.startup["keep-atomic-bomb-without-changes"]) then + data.raw.item["atomic-bomb"] = nil + data.raw.recipe["atomic-bomb"] = nil +end +if(settings.startup["enable-medium-atomics"].value) then + warheads["TN-warhead-2--1"] = { + appendName = "-atomic-2t", + appendOrder = "x-n-a-m-00002-1", + target_type = "position", + size = "small", + preciseSize = 16, + final_effect = nuke_explosions.N2t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "2t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 20, + energy_required = 20, + collisions = false, + tech = "californium-weapons", + ingredients = { + {"steel-plate", 5}, + {computer, 5}, + {"explosives", 5}, + {dead, 3}, + {boom, 3}, + {small, 4} + } + } + warheads["TN-warhead-4--1"] = { + appendName = "-atomic-4t", + appendOrder = "x-n-a-m-00004-1", + target_type = "position", + size = "medium", + preciseSize = 22, + final_effect = nuke_explosions.N4t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "4t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 30, + collisions = false, + tech = "atomic-bomb", + ingredients = { + {"steel-plate", 5}, + {computer, 5}, + {"explosives", 10}, + {dead, 5}, + {boom, 8} + } + } + warheads["TN-warhead-8--1"] = { + appendName = "-atomic-8t", + appendOrder = "x-n-a-m-00008-1", + target_type = "position", + size = "medium", + preciseSize = 28, + + final_effect = nuke_explosions.N8t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.uraniumLive, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "8t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 40, + collisions = false, + tech = "atomic-bomb", + ingredients = { + {"steel-plate", 6}, + {computer, 5}, + {"explosives", 20}, + {dead, 10}, + {boom, 15} + } + } + warheads["TN-warhead-2--2"] = { + appendName = "-atomic-2t", + appendOrder = "x-n-a-m-00002-2", + target_type = "position", + size = "small", + preciseSize = 12, + final_effect = nuke_explosions.N2t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "2t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 20, + energy_required = 60, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {"steel-plate", 1}, + {light, 4}, + {computer, 10}, + {reflector, 1}, + {"explosives", 4}, + {dead, 2}, + {boom, 1}, + {small, 8} + } + } + warheads["TN-warhead-20--1"] = { + appendName = "-atomic-20t", + appendOrder = "x-n-a-m-00020-1", + target_type = "position", + size = "large", + preciseSize = 32, + + final_effect = nuke_explosions.N20t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.uraniumLive, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "20t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 5, + energy_required = 60, + collisions = false, + tech = "basic-atomic-weapons", + ingredients = { + {"steel-plate", 10}, + {computer, 8}, + {"explosives", 30}, + {dead, 15}, + {boom, 30} + } + } + warheads["TN-warhead-20--2"] = { + appendName = "-atomic-20t", + appendOrder = "x-n-a-m-00020-2", + target_type = "position", + + size = "medium", + preciseSize = 26, + final_effect = nuke_explosions.N20t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.uraniumLive, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "20t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 5, + energy_required = 120, + collisions = false, + tech = "atomic-bomb", + ingredients = { + {light, 20}, + {computer, 20}, + {"explosives", 15}, + {dead, 5}, + {boom, 50} + } + } + warheadWeaponNameMap["big-rocket-atomic-20t"] = "atomic-bomb" + + if(settings.startup["enable-compact-medium-atomics"].value) then + + warheads["TN-warhead-2--3"] = { + appendName = "-atomic-2t", + appendOrder = "x-n-a-m-00002-3", + target_type = "position", + size = "tiny", + preciseSize = 8, + final_effect = nuke_explosions.N2t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "2t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 20, + energy_required = 120, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {light, 10}, + {computer, 15}, + {reflector, 4}, + {"explosives", 2}, + {small, 15} + } + } + warheads["TN-warhead-4--2"] = { + appendName = "-atomic-4t", + appendOrder = "x-n-a-m-00004-2", + target_type = "position", + size = "small", + preciseSize = 16, + final_effect = nuke_explosions.N4t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "4t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 90, + collisions = false, + tech = "californium-weapons", + ingredients = { + {light, 10}, + {computer, 12}, + {"explosives", 5}, + {boom, 2}, + {small, 10} + } + } + warheads["TN-warhead-4--3"] = { + appendName = "-atomic-4t", + appendOrder = "x-n-a-m-00004-3", + target_type = "position", + size = "small", + preciseSize = 12, + final_effect = nuke_explosions.N4t_detonation, + + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "4t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 180, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {light, 15}, + {computer, 20}, + {reflector, 8}, + {"explosives", 5}, + {small, 20} + } + } + warheads["TN-warhead-8--2"] = { + appendName = "-atomic-8t", + appendOrder = "x-n-a-m-00008-2", + target_type = "position", + size = "small", + preciseSize = 20, + + final_effect = nuke_explosions.N8t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "8t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 120, + collisions = false, + tech = "californium-weapons", + ingredients = { + {light, 15}, + {computer, 16}, + {"explosives", 8}, + {boom, 2}, + {small, 20} + } + } + warheads["TN-warhead-8--3"] = { + appendName = "-atomic-8t", + appendOrder = "x-n-a-m-00008-3", + target_type = "position", + size = "small", + preciseSize = 15, + + final_effect = nuke_explosions.N8t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "8t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 10, + energy_required = 240, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {light, 20}, + {computer, 24}, + {reflector, 12}, + {"explosives", 10}, + {small, 35} + } + } + + warheads["TN-warhead-20--3"] = { + appendName = "-atomic-20t", + appendOrder = "x-n-a-m-00020-3", + target_type = "position", + + size = "small", + preciseSize = 20, + final_effect = nuke_explosions.N20t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.californium, tints.californium}, text_location = "__True-Nukes__/graphics/text/", text = "20t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-californium-map-visualization.png", + cooldown_modifier = 5, + stack_size = 5, + energy_required = 300, + collisions = false, + tech = "compact-californium-weapons", + ingredients = { + {light, 50}, + {computer, 40}, + {reflector, 12}, + {"explosives", 5}, + {boom, 5}, + {small, 45} + } + } + end +end +if(settings.startup["enable-large-atomics"].value) then + warheads["TN-warhead-500--1"] = { + appendName = "-atomic-500t", + appendOrder = "x-n-a-m-005-1", + target_type = "position", + + size = "large", + preciseSize = 38, + final_effect = nuke_explosions.N500t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "500t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 90, + collisions = false, + tech = "expanded-atomics", + ingredients = { + {"steel-plate", 20}, + {computer, 10}, + {"explosives", 40}, + {dead, 25}, + {boom, 75} + } + } + warheads["TN-warhead-1k--1"] = { + appendName = "-atomic-1kt", + appendOrder = "x-n-a-m-01-1", + target_type = "position", + + size = "large", + preciseSize = 40, + final_effect = nuke_explosions.N1kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "1kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 120, + collisions = false, + tech = "full-fission-atomics", + ingredients = { + {"steel-plate", 25}, + {computer, 20}, + {"explosives", 100}, + {dead, 25}, + {boom, 100} + } + } + if(settings.startup["enable-compact-large-atomics"].value) then + + warheads["TN-warhead-500--2"] = { + appendName = "-atomic-500t", + appendOrder = "x-n-a-m-005-2", + target_type = "position", + + size = "large", + preciseSize = 32, + final_effect = nuke_explosions.N500t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.nothing}, text_location = "__True-Nukes__/graphics/text/", text = "500t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 210, + collisions = false, + tech = "full-fission-atomics", + ingredients = { + {"steel-plate", 5}, + {light, 15}, + {computer, 20}, + {"explosives", 25}, + {dead, 15}, + {boom, 100}, + } + } + warheads["TN-warhead-500--3"] = { + appendName = "-atomic-500t", + appendOrder = "x-n-a-m-005-3", + target_type = "position", + + size = "medium", + preciseSize = 26, + final_effect = nuke_explosions.N500t_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.uraniumLive, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "500t"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 360, + collisions = false, + tech = "compact-full-fission-weapons", + ingredients = { + {light, 45}, + {computer, 50}, + {reflector, 15}, + {"explosives", 10}, + {boom, 50}, + {small, 60} + } + } + warheads["TN-warhead-1k--2"] = { + appendName = "-atomic-1kt", + appendOrder = "x-n-a-m-01-2", + target_type = "position", + + size = "large", + preciseSize = 35, + final_effect = nuke_explosions.N1kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumDead}, text_location = "__True-Nukes__/graphics/text/", text = "1kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 300, + collisions = false, + tech = "compact-full-fission-weapons", + ingredients = { + {"steel-plate", 8}, + {light, 20}, + {computer, 45}, + {"explosives", 50}, + {dead, 5}, + {boom, 120}, + } + } + warheads["TN-warhead-1k--3"] = { + appendName = "-atomic-1kt", + appendOrder = "x-n-a-m-01-3", + target_type = "position", + + size = "medium", + preciseSize = 30, + final_effect = nuke_explosions.N1kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.californium, tints.uraniumLive, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "1kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 600, + collisions = false, + tech = "compact-full-fission-weapons", + ingredients = { + {light, 60}, + {computer, 100}, + {"red-wire", 20}, + {reflector, 20}, + {"explosives", 20}, + {boom, 80}, + {small, 80} + } + } + end +end +if(settings.startup["enable-15kt"].value) then + warheads["TN-warhead-15k--1"] = { + appendName = "-atomic-15kt", + appendOrder = "x-n-a-m-15-1", + target_type = "position", + + size = "huge", + preciseSize = 44, + final_effect = nuke_explosions.N15kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 180, + collisions = false, + tech = "full-fission-atomics", + ingredients = { + {"steel-plate", 30}, + {computer, 40}, + {"red-wire", 5}, + {"green-wire", 5}, + {"explosives", 175}, + {dead, 150}, + {boom, 250} + } + } + if(settings.startup["enable-compact-15kt"].value) then + + warheads["TN-warhead-15k--2"] = { + appendName = "-atomic-15kt", + appendOrder = "x-n-a-m-15-2", + target_type = "position", + + size = "large", + preciseSize = 38, + final_effect = nuke_explosions.N15kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 480, + collisions = false, + tech = "compact-full-fission-weapons", + ingredients = { + {"steel-plate", 10}, + {light, 30}, + {computer, 160}, + {"red-wire", 10}, + {"green-wire", 10}, + {reflector, 10}, + {"explosives", 130}, + {dead, 25}, + {boom, 325} + } + } + warheads["TN-warhead-15k--3"] = { + appendName = "-atomic-15kt", + appendOrder = "x-n-a-m-15-3", + target_type = "position", + + size = "large", + preciseSize = 33, + final_effect = nuke_explosions.N15kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 720, + collisions = false, + tech = "compact-full-fission-weapons", + ingredients = { + {light, 75}, + {computer, 200}, + {"red-wire", 20}, + {"green-wire", 20}, + {reflector, 50}, + {"explosives", 100}, + {boom, 300}, + {small, 50} + } + } + end +end +if(settings.startup["enable-fusion"].value) then + warheads["TN-warhead-big--1"] = { + appendName = "-atomic-2-stage", + appendOrder = "x-n-a-t", + target_type = "position", + size = "huge", + preciseSize = 56, + final_effect = nuke_explosions.N15kt_detonation, + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "15kt+"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-fusion-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 180, + collisions = false, + tech = "fusion-weapons", + ingredients = { + {"steel-plate", 100}, + {"copper-plate", 100}, + {computer, 100}, + {"red-wire", 20}, + {"green-wire", 20}, + {"FOGBANK", 10}, + {"heat-pipe", 10}, + {reflector, 20}, + {"explosives", 200}, + {dead, 400}, + {boom, 250} + }, + progressiveRecipe = "from-first", + explosions = { + { + additional_ingedients = {}, + appendName = "-15kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + appendOrder = "-0-015", + final_effect = nuke_explosions.N15kt_detonation + }, + { + additional_ingedients = {{fusionMaterial, 2}}, + appendName = "-100kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "100kt"}), + appendOrder = "-0-100", + final_effect = nuke_explosions.N100kt_detonation + } + } + } + if(settings.startup["enable-big-fusion-weapons"].value) then + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 20}}, + appendName = "-1Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "1Mt"}), + appendOrder = "-1-001", + final_effect = nuke_explosions.N1Mt_detonation + }) + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 100}}, + appendName = "-5Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "5Mt"}), + appendOrder = "-1-005", + final_effect = nuke_explosions.N5Mt_detonation + }) + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 200}}, + appendName = "-10Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "10Mt"}), + appendOrder = "-1-010", + final_effect = nuke_explosions.N10Mt_detonation + }) + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 1000}}, + appendName = "-50Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "50Mt"}), + appendOrder = "-1-050", + final_effect = nuke_explosions.N50Mt_detonation + }) + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 2000}}, + appendName = "-100Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "100Mt"}), + appendOrder = "-1-100", + final_effect = nuke_explosions.N100Mt_detonation + }) + table.insert(warheads["TN-warhead-big--1"].explosions, { + additional_ingedients = {{fusionMaterial, 20000}}, + appendName = "-1Gt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.tritium, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "1Gt"}), + appendOrder = "-2-001", + final_effect = nuke_explosions.N1Gt_detonation + }) + end + if(settings.startup["enable-compact-fusion"].value) then + + warheads["TN-warhead-big--2"] = { + appendName = "-atomic-2-stage", + appendOrder = "x-n-a-t", + target_type = "position", + size = "huge", + preciseSize = 48, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "15kt+"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-fusion-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 300, + collisions = false, + tech = "compact-fusion-weapons", + ingredients = { + {"steel-plate", 50}, + {"copper-plate", 50}, + {light, 80}, + {computer, 200}, + {"red-wire", 40}, + {"green-wire", 40}, + {"FOGBANK", 40}, + {"heat-pipe", 40}, + {reflector, 40}, + {"explosives", 130}, + {dead, 200}, + {boom, 325} + }, + progressiveRecipe = "from-first", + explosions = { + { + additional_ingedients = {}, + appendName = "-15kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + appendOrder = "-0-015", + final_effect = nuke_explosions.N15kt_detonation + }, + { + additional_ingedients = {{fusionMaterial, 4}}, + appendName = "-100kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "100kt"}), + appendOrder = "-0-100", + final_effect = nuke_explosions.N100kt_detonation + } + } + } + if(settings.startup["enable-big-fusion-weapons"].value) then + table.insert(warheads["TN-warhead-big--2"].explosions, { + additional_ingedients = {{fusionMaterial, 40}}, + appendName = "-1Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "1Mt"}), + appendOrder = "-1-001", + final_effect = nuke_explosions.N1Mt_detonation + }) + table.insert(warheads["TN-warhead-big--2"].explosions, { + additional_ingedients = {{fusionMaterial, 200}}, + appendName = "-5Mt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.tritium}, text_location = "__True-Nukes__/graphics/text/", text = "5Mt"}), + appendOrder = "-1-005", + final_effect = nuke_explosions.N5Mt_detonation + }) + end + warheads["TN-warhead-big--3"] = { + appendName = "-atomic-2-stage", + appendOrder = "x-n-a-t", + target_type = "position", + size = "large", + preciseSize = 40, + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "15kt+"}), + chart_picture = "__True-Nukes__/graphics/artillery/atomic-artillery-fusion-map-visualization.png", + cooldown_modifier = 5, + stack_size = 1, + energy_required = 720, + collisions = false, + tech = "compact-fusion-weapons", + ingredients = { + {"copper-plate", 20}, + {light, 150}, + {computer, 300}, + {"red-wire", 100}, + {"green-wire", 100}, + {"FOGBANK", 60}, + {"heat-pipe", 60}, + {reflector, 80}, + {"explosives", 75}, + {dead, 50}, + {boom, 400} + }, + progressiveRecipe = "from-first", + explosions = { + { + additional_ingedients = {}, + appendName = "-15kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "15kt"}), + appendOrder = "-0-015", + final_effect = nuke_explosions.N15kt_detonation + }, + { + additional_ingedients = {{fusionMaterial, 8}}, + appendName = "-100kt", + appearance = createAppearance({type = "nuclear_core", tints = {tints.uraniumLive, tints.tritium, tints.uraniumLive}, text_location = "__True-Nukes__/graphics/text/", text = "100kt"}), + appendOrder = "-0-100", + final_effect = nuke_explosions.N100kt_detonation + } + } + } + end +end diff --git a/True-Nukes/prototypes/nukes/data-nukes-warheads-weapon-appearance.lua b/True-Nukes/prototypes/nukes/data-nukes-warheads-weapon-appearance.lua new file mode 100644 index 00000000..3ccf9f7f --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes-warheads-weapon-appearance.lua @@ -0,0 +1,131 @@ +local create_utils = require("__Warheads__.prototypes.sprite-assembly-util") + + +local setupWarheadsForWeapon = create_utils.setupWarheadsForWeapon +local tints = create_utils.tints + +if weaponTypes["rounds-magazine"] then + weaponTypes["rounds-magazine"].icons["-atomic-0_1t"] = { "__True-Nukes__/graphics/rounds/yy-atomic-rounds-magazine.png"} + weaponTypes["rounds-magazine"].icons["-atomic-0_5t"] = { "__True-Nukes__/graphics/rounds/yg-atomic-rounds-magazine.png"} + weaponTypes["rounds-magazine"].icons["-atomic-2t"] = { "__True-Nukes__/graphics/rounds/gg-atomic-rounds-magazine.png"} +end +if weaponTypes["Schall-sniper-magazine"] then + weaponTypes["Schall-sniper-magazine"].icons["-atomic-0_1t"] = { "__True-Nukes__/graphics/rounds/yy-atomic-rounds-magazine.png"} + weaponTypes["Schall-sniper-magazine"].icons["-atomic-0_5t"] = { "__True-Nukes__/graphics/rounds/yy-atomic-rounds-magazine.png"} + weaponTypes["Schall-sniper-magazine"].icons["-atomic-2t"] = { "__True-Nukes__/graphics/rounds/yg-atomic-rounds-magazine.png"} + weaponTypes["Schall-sniper-magazine"].icons["-atomic-4t"] = { "__True-Nukes__/graphics/rounds/gg-atomic-rounds-magazine.png"} +end + +local setupForShotgun = { + type = "shotgun", + weapon = "shotgun-shell", + warheads = {} +} +setupForShotgun.warheads["-atomic-0_1t"] = {style = 1, tints = {tints.californium}} +setupForShotgun.warheads["-atomic-0_5t"] = {style = 2, tints = {tints.californium, tints.nothing}} +setupForShotgun.warheads["-atomic-2t"] = {style = 2, tints = {tints.californium, tints.californium}} +setupForShotgun.warheads["-atomic-4t"] = {style = 2, tints = {tints.californium, tints.uraniumLive}} +setupForShotgun.warheads["-atomic-8t"] = {style = 2, tints = {tints.uraniumLive, tints.californium}} +setupForShotgun.warheads["-atomic-20t"] = {style = 2, tints = {tints.uraniumLive, tints.uraniumLive}} + +setupWarheadsForWeapon(setupForShotgun) + +local setupForShotgunBuck = { + type = "shotgun", + weapon = "shotgun-shell-buckshot", + warheads = {} +} +setupForShotgunBuck.warheads["-atomic-0_1t"] = {style = 3, tints = {tints.nothing, tints.californium}} +setupForShotgunBuck.warheads["-atomic-0_5t"] = {style = 3, tints = {tints.californium, tints.californium}} +setupForShotgunBuck.warheads["-atomic-2t"] = {style = 3, tints = {tints.californium, tints.uraniumLive}} + +setupWarheadsForWeapon(setupForShotgunBuck) + + +local setupForCannon = { + type = "cannon", + weapon = "cannon-shell", + warheads = {} +} +setupForCannon.warheads["-atomic-0_1t"] = {style = 3, tints = {tints.californium}} +setupForCannon.warheads["-atomic-0_5t"] = {style = 3, tints = {tints.californium}} +setupForCannon.warheads["-atomic-2t"] = {style = 2, tints = {tints.californium}} +setupForCannon.warheads["-atomic-4t"] = {style = 4, tints = {tints.californium, tints.californium}} +setupForCannon.warheads["-atomic-8t"] = {style = 4, tints = {tints.californium, tints.uraniumLive}} +setupForCannon.warheads["-atomic-20t"] = {style = 4, tints = {tints.uraniumLive, tints.californium}} + +setupForCannon.warheads["-atomic-500t"] = {style = 4, tints = {tints.uraniumLive, tints.uraniumLive}} +setupWarheadsForWeapon(setupForCannon) + +if mods["SchallTankPlatoon"] then + setupForCannon.weapon = "cannon-H1-shell" + setupWarheadsForWeapon(setupForCannon) + setupForCannon.weapon = "cannon-H2-shell" + setupWarheadsForWeapon(setupForCannon) +end + + +local setupForRocket = { + type = "rocket", + weapon = "small-rocket", + warheads = {} +} +setupForRocket.warheads["-atomic-0_1t"] = {style = 2, tints = {tints.californium}} +setupForRocket.warheads["-atomic-0_5t"] = {style = 3, tints = {tints.lightNothing, tints.californium}} +setupForRocket.warheads["-atomic-2t"] = {style = 3, tints = {tints.californium, tints.californium}} + +setupForRocket.warheads["-atomic-4t"] = {style = 4, tints = {tints.lightNothing, tints.californium, tints.californium}} +setupForRocket.warheads["-atomic-8t"] = {style = 4, tints = {tints.californium, tints.californium, tints.californium}} +setupForRocket.warheads["-atomic-20t"] = {style = 5, tints = {tints.californium, tints.californium, tints.californium, tints.californium}} +setupWarheadsForWeapon(setupForRocket) + +local setupForBigRocket = { + type = "rocket_big", + weapon = "big-rocket", + warheads = {} +} +setupForBigRocket.warheads["-atomic-0_1t"] = {style = 2, tints = {tints.californium}} +setupForBigRocket.warheads["-atomic-0_5t"] = {style = 3, tints = {tints.nothing, tints.californium}} +setupForBigRocket.warheads["-atomic-2t"] = {style = 3, tints = {tints.californium, tints.californium}} + +setupForBigRocket.warheads["-atomic-4t"] = {style = 2, tints = {tints.uraniumLive}} +setupForBigRocket.warheads["-atomic-8t"] = {style = 3, tints = {tints.nothing, tints.uraniumLive}} +setupForBigRocket.warheads["-atomic-20t"] = {style = 3, tints = {tints.uraniumLive, tints.uraniumLive}} + +setupForBigRocket.warheads["-atomic-500t"] = {style = 4, tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}} +setupForBigRocket.warheads["-atomic-1kt"] = {style = 5, tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}} +setupWarheadsForWeapon(setupForBigRocket) + + +local setupForArtillery = { + type = "artillery", + weapon = "artillery-shell", + warheads = {} +} + +setupForArtillery.warheads["-atomic-4t"] = {style = 2, tints = {tints.californium}} +setupForArtillery.warheads["-atomic-8t"] = {style = 3, tints = {tints.californium, tints.californium}} +setupForArtillery.warheads["-atomic-20t"] = {style = 2, tints = {tints.uraniumLive}} + +setupForArtillery.warheads["-atomic-500t"] = {style = 3, tints = {tints.uraniumLive, tints.uraniumLive}} +setupForArtillery.warheads["-atomic-1kt"] = {style = 4, tints = {tints.uraniumLive, tints.uraniumLive, tints.uraniumLive}} + +setupForArtillery.warheads["-atomic-15kt"] = {style = 5, tints = {tints.uraniumLive, tints.uraniumLive}} + +setupForArtillery.warheads["-atomic-2-stage-15kt"] = {style = 5, tints = {tints.uraniumLive, tints.nothing}} + +setupForArtillery.warheads["-atomic-2-stage-100kt"] = {style = 5, tints = {tints.uraniumLive, tints.tritium}} +setupWarheadsForWeapon(setupForArtillery) + + + + + + + + + + + + + diff --git a/True-Nukes/prototypes/nukes/data-nukes.lua b/True-Nukes/prototypes/nukes/data-nukes.lua new file mode 100644 index 00000000..ee414843 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-nukes.lua @@ -0,0 +1,33 @@ +require("data-nuke-terrain") +require("data-radiation") +require("data-nukes-intermediate") +require("data-nukes-warheads-create") +require("data-nukes-warheads-weapon-appearance") +require("data-nukes-technology") +require("data-nukes-achievements") + +if mods["space-exploration"] then + require("compatibility.SE") +end +if mods["Krastorio2"] then + require("compatibility.K2") +end +if mods["SchallTankPlatoon"] then + require("compatibility.STP") +end + +if mods["Nuclear Fuel"] then + require("compatibility.nuclear-fuel") +end +if mods["PlutoniumEnergy"] then + require("compatibility.plutonium-energy") +end +if mods["Clowns-Nuclear"] then + require("compatibility.clowns-nuclear") +end +if mods["apm_nuclear_ldinc"] then + require("compatibility.apm-nuclear") +end +if mods["bobwarfare"] then + data.raw.technology["bob-atomic-artillery-shell"] = nil +end \ No newline at end of file diff --git a/True-Nukes/prototypes/nukes/data-radiation.lua b/True-Nukes/prototypes/nukes/data-radiation.lua new file mode 100644 index 00000000..06068230 --- /dev/null +++ b/True-Nukes/prototypes/nukes/data-radiation.lua @@ -0,0 +1,123 @@ +local fireutil = require("__base__.prototypes.fire-util") +data:extend({ + fireutil.add_basic_fire_graphics_and_effects_definitions + { + type = "fire", + name = "nuclear-fire", + flags = {"placeable-off-grid", "not-on-map"}, + damage_per_tick = {amount = 130 / 60, type = "fire"}, + maximum_damage_multiplier = 6, + damage_multiplier_increase_per_added_fuel = 1, + damage_multiplier_decrease_per_tick = 0.0005, + + spawn_entity = "fire-flame-on-tree", + + spread_delay = 300, + spread_delay_deviation = 180, + maximum_spread_count = 100, + + emissions_per_second = 0.005, + + initial_lifetime = 600, + lifetime_increase_by = 150, + lifetime_increase_cooldown = 4, + maximum_lifetime = 3600, + delay_between_initial_flames = 10, + --initial_flame_count = 1, + + }}) + +local radiation_cloud_vis_dum = table.deepcopy(data.raw["smoke-with-trigger"]["poison-cloud-visual-dummy"]) +radiation_cloud_vis_dum.name="radiation-cloud-visual-dummy" +radiation_cloud_vis_dum.color = {r = 0.220, g = 0.220, b = 0.220, a = 0.800} +radiation_cloud_vis_dum.duration=60*60 + +local radiation_cloud = table.deepcopy(data.raw["smoke-with-trigger"]["poison-cloud"]) +radiation_cloud.name="dangerous-radiation-cloud" +radiation_cloud.action.action_delivery.target_effects.action.action_delivery.target_effects.damage.amount=20 +radiation_cloud.color = {r = 0.220, g = 0.220, b = 0.220, a = 0.800} +radiation_cloud.created_effect[1].action_delivery.target_effects[1].entity_name = "radiation-cloud-visual-dummy" +radiation_cloud.created_effect[2].action_delivery.target_effects[1].entity_name = "radiation-cloud-visual-dummy" +radiation_cloud.duration=60*60 + +local fallout = + { + type = "projectile", + name = "fallout", + flags = {"not-on-map"}, + acceleration = 0.005, + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects ={ + { + type = "create-entity", + entity_name = "dangerous-radiation-cloud" + }, + { + type = "create-entity", + entity_name = "radiation-cloud" + } + } + } + }, + animation = + { + filename = "__core__/graphics/empty.png", + frame_count = 1, + width = 1, + height = 1, + priority = "high" + } + } + + + +local lingering_radiation_cloud_vis_dum = table.deepcopy(data.raw["smoke-with-trigger"]["poison-cloud-visual-dummy"]) +lingering_radiation_cloud_vis_dum.name="lingering-radiation-cloud-visual-dummy" +lingering_radiation_cloud_vis_dum.color = {r = 0.220, g = 0.220, b = 0.220, a = 0.800} +lingering_radiation_cloud_vis_dum.duration=60*300 +lingering_radiation_cloud_vis_dum.fade_away_duration = 60 * 60 + + +local lingering_radiation_cloud = table.deepcopy(data.raw["smoke-with-trigger"]["poison-cloud"]) +lingering_radiation_cloud.name="lingering-radiation-cloud" +lingering_radiation_cloud.color = {r = 0.220, g = 0.220, b = 0.220, a = 0.800} +lingering_radiation_cloud.duration=60*300 +lingering_radiation_cloud.fade_away_duration = 40 * 60 +lingering_radiation_cloud.created_effect[1].action_delivery.target_effects[1].entity_name = "lingering-radiation-cloud-visual-dummy" +lingering_radiation_cloud.created_effect[2].action_delivery.target_effects[1].entity_name = "lingering-radiation-cloud-visual-dummy" + +local lingering_fallout = + { + type = "projectile", + name = "lingering-fallout", + flags = {"not-on-map"}, + acceleration = 0.005, + action = + { + type = "direct", + action_delivery = + { + type = "instant", + target_effects = + { + type = "create-entity", + entity_name = "lingering-radiation-cloud" + } + } + }, + animation = + { + filename = "__core__/graphics/empty.png", + frame_count = 1, + width = 1, + height = 1, + priority = "high" + } + } + +data:extend{radiation_cloud_vis_dum, radiation_cloud, fallout, lingering_radiation_cloud_vis_dum, lingering_radiation_cloud, lingering_fallout} diff --git a/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads-weapon-appearance.lua b/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads-weapon-appearance.lua new file mode 100644 index 00000000..33754f68 --- /dev/null +++ b/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads-weapon-appearance.lua @@ -0,0 +1,24 @@ +local create_utils = require("__Warheads__.prototypes.sprite-assembly-util") + + +local createAppearance = create_utils.createAppearance +local tints = create_utils.tints + + +weaponTypes["cannon-shell"].icons["-thermobaric-1"] = createAppearance({type = "cannon", style = 3, tints = {tints.explosive}}).icons +weaponTypes["cannon-shell"].icons["-thermobaric-2"] = createAppearance({type = "cannon", style = 4, tints = {tints.explosive, tints.explosive}}).icons +weaponTypes["small-rocket"].icons["-thermobaric-1"] = createAppearance({type = "rocket", style = 3, tints = {tints.explosive, tints.explosive}}).icons + + +weaponTypes["big-rocket"].icons["-thermobaric-1"] = createAppearance({type = "rocket_big", style = 3, tints = {tints.explosive, tints.explosive}}).icons +weaponTypes["big-rocket"].icons["-thermobaric-2"] = createAppearance({type = "rocket_big", style = 4, tints = {tints.explosive, tints.explosive, tints.explosive}}).icons + +weaponTypes["artillery-shell"].icons["-thermobaric-1"] = createAppearance({type = "artillery", style = 2, tints = {tints.explosive}}).icons +weaponTypes["artillery-shell"].icons["-thermobaric-2"] = createAppearance({type = "artillery", style = 3, tints = {tints.explosive, tints.explosive}}).icons +weaponTypes["artillery-shell"].icons["-thermobaric-3"] = createAppearance({type = "artillery", style = 4, tints = {tints.explosive, tints.explosive, tints.explosive}}).icons + + +if mods["SchallTankPlatoon"] then + local STP_sprites = require("__Warheads__.prototypes.compatibility.SchallTankPlatoon-sprites") + weaponTypes["autocannon-shell"].icons["-thermobaric-1"] = createAppearance({sprite_types = STP_sprites, type = "autocannon", style = 3, tints = {tints.explosive, tints.explosive, tints.explosive}}).icons +end diff --git a/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads.lua b/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads.lua new file mode 100644 index 00000000..258c6246 --- /dev/null +++ b/True-Nukes/prototypes/thermobarics/data-thermobaric-warheads.lua @@ -0,0 +1,285 @@ +require("__Warheads__.prototypes.warheads") + +local create_utils = require("__Warheads__.prototypes.sprite-assembly-util") + + +local createAppearance = create_utils.createAppearance +local tints = create_utils.tints + +local circuit_type; +if not mods["bobelectronics"] then + circuit_type = "advanced-circuit" +else + circuit_type = "circuit-board" +end +local fuel_type; +if not mods["bobplates"] then + fuel_type = "rocket-fuel" +else + fuel_type = "enriched-fuel" +end +local function createAppearanceSimple(setup) + return { + icons = { + { + icon_size = 64, + icon = setup.location .. setup.icon_name .. ".png", + } + } + } +end + +if(settings.startup["enable-small-thermobarics"].value) then + warheads["TN-thermobaric-1"] = { + name = "TN-thermobaric-1", + appendName = "-thermobaric-1", + appendOrder = "d-t-1", + target_type = "position", + + size = "small", + preciseSize = 16, + appearance = createAppearance({type = "can_1", style = 4, tints = {tints.explosive, tints.explosive}}), + chart_picture = "__True-Nukes__/graphics/artillery/thermobaric-artillery-map-visualization.png", + range_modifier = 1.5, + stack_size = 100, + energy_required = 20, + clamp_position = true, + tech = "thermobaric-weaponry", + ingredients = { + {"explosives", 10}, + {circuit_type, 5}, + {fuel_type, 15}, + {"flamethrower-ammo", 5}, + {"empty-barrel", 2} + }, + final_effect = { + { + type = "script", + effect_id = "Thermobaric Weapon hit small" + }, + { + type = "create-entity", + entity_name = "nuke-explosion" + }, + { + type = "create-entity", + entity_name = "medium-scorchmark-tintable", + check_buildability = true + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 3 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 30, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 3, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = {amount = 600, type = "explosion"} + } + } + } + } + } + } + } +end + +if(settings.startup["enable-medium-thermobarics"].value) then + warheads["TN-thermobaric-2"] = { + name = "TN-thermobaric-2", + appendName = "-thermobaric-2", + appendOrder = "d-t-2", + target_type = "position", + + size = "medium", + preciseSize = 24, + appearance = createAppearance({type = "can_2", style = 2, tints = {tints.explosive}}), + chart_picture = "__True-Nukes__/graphics/artillery/thermobaric-artillery-map-visualization.png", + range_modifier = 1.5, + stack_size = 20, + energy_required = 30, + clamp_position = true, + tech = "thermobaric-weaponry", + ingredients = { + {"explosives", 20}, + {circuit_type, 10}, + {fuel_type, 25}, + {"flamethrower-ammo", 12}, + {"empty-barrel", 5} + }, + final_effect = { + { + type = "script", + effect_id = "Thermobaric Weapon hit medium" + }, + { + type = "create-entity", + entity_name = "medium-scorchmark-tintable", + check_buildability = true + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 6 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 80, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 6, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = {amount = 600, type = "explosion"} + } + } + } + } + } + } + } + +end + +if(settings.startup["enable-large-thermobarics"].value) then + + warheads["TN-thermobaric-3"] = { + name = "TN-thermobaric-3", + appendName = "-thermobaric-3", + appendOrder = "d-t-3", + target_type = "position", + + size = "large", + preciseSize = 32, + appearance = createAppearance({type = "can_3", tints = {tints.explosive}}), + chart_picture = "__True-Nukes__/graphics/artillery/thermobaric-artillery-map-visualization.png", + stack_size = 10, + energy_required = 40, + clamp_position = true, + tech = "thermobaric-weaponry", + ingredients = { + {"explosives", 30}, + {circuit_type, 15}, + {fuel_type, 40}, + {"flamethrower-ammo", 20}, + {"empty-barrel", 10} + }, + final_effect = { + { + type = "script", + effect_id = "Thermobaric Weapon hit large" + }, + { + type = "create-entity", + entity_name = "medium-scorchmark-tintable", + check_buildability = true + }, + { + type = "destroy-decoratives", + from_render_layer = "decals", + to_render_layer = "object", + include_soft_decoratives = true, + include_decals = true, + invoke_decorative_trigger = false, + decoratives_with_trigger_only = false, + radius = 9 + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 120, + action_delivery = + { + type = "instant", + target_effects = + { + type = "damage", + damage = {amount = 0.1, type = "fire"} + } + } + } + }, + { + type = "nested-result", + action = + { + type = "area", + radius = 9, + action_delivery = + { + type = "instant", + target_effects = + { + { + type = "damage", + damage = {amount = 600, type = "explosion"} + } + } + } + } + } + } + } +end + diff --git a/True-Nukes/prototypes/thermobarics/data-thermobaric.lua b/True-Nukes/prototypes/thermobarics/data-thermobaric.lua new file mode 100644 index 00000000..ed86ae4b --- /dev/null +++ b/True-Nukes/prototypes/thermobarics/data-thermobaric.lua @@ -0,0 +1,18 @@ +require("data-thermobaric-warheads") +require("data-thermobaric-warheads-weapon-appearance") + +local thermobaric_tech = table.deepcopy(data.raw["technology"]["military-3"]) +thermobaric_tech.name = "thermobaric-weaponry" +thermobaric_tech.effects = {} + + +if not mods["bobplates"] then + thermobaric_tech.prerequisites = {"rocket-fuel", "flamethrower", "military-3"} +else + thermobaric_tech.prerequisites = {"advanced-oil-processing", "flamethrower", "military-3"} +end +thermobaric_tech.prerequisites = {"rocket-fuel", "flamethrower", "military-3"} +thermobaric_tech.icon = "__True-Nukes__/graphics/thermobaric-tech.png" +thermobaric_tech.icon_mipmaps = 1 +thermobaric_tech.unit.count=250 +data:extend{thermobaric_tech} diff --git a/True-Nukes/scripts/achievement-system.lua b/True-Nukes/scripts/achievement-system.lua new file mode 100644 index 00000000..f1c03067 --- /dev/null +++ b/True-Nukes/scripts/achievement-system.lua @@ -0,0 +1,126 @@ +global.allowAchievements = true + + + + + + + +local function checkAllowAchievements() + if(game.active_mods["space-exploration"]) then + global.allowAchievements = true + end + if(global.allowAchievements)then + for _,player in pairs(game.players) do + if(player.cheat_mode and not game.active_mods["space-exploration"]) then + global.allowAchievements = false; + game.print("Warning, cheat mode detected - achievements disabled for True-Nukes") + end + end + end +end +script.on_event(defines.events.on_console_command, checkAllowAchievements) + + +local function buildingDamaged(e) + checkAllowAchievements(); + if(e.force and global.allowAchievements) then + for _,player in pairs(e.force.players) do + player.unlock_achievement("shoot-fusion") + end + end +end + +script.on_event(defines.events.on_entity_damaged, buildingDamaged, {{filter="name",name="fusion-test-site"}, {filter="damage-type", mode = "and", type = "physical"}}) + +local function buildingDied(e) + checkAllowAchievements(); + if(e.cause and e.cause.type == "character" and e.cause.player and + global.allowAchievements and e.entity.crafting_progress>0 and e.entity.get_recipe().name == "detonation-atomic-2-stage-1Gt-1") then + e.cause.player.unlock_achievement("stop-1Gt") + end +end + +script.on_event(defines.events.on_entity_died, buildingDied, {{filter="name",name="fusion-test-site"}}) + +local function buildingMined(e) + checkAllowAchievements(); + if(global.allowAchievements and e.entity.crafting_progress>0 and e.entity.get_recipe().name == "detonation-atomic-2-stage-1Gt-1") then + game.players[e.player_index].unlock_achievement("stop-1Gt") + end +end + +script.on_event(defines.events.on_pre_player_mined_item, buildingMined, {{filter="name",name="fusion-test-site"}}) + +local function building_detonated(building, warhead) + checkAllowAchievements(); + if(building.force and global.allowAchievements) then + local name = warhead.name + local achievements = {} + if(name == "-atomic-15kt") then + table.insert(achievements, "test-15kt") + if(game.tick<=60*60*60*15) then + table.insert(achievements, "15kt-15hrs") + end + elseif (name == "-atomic-20t")then + table.insert(achievements, "test-20t") + elseif (name == "-atomic-2-stage-1Gt")then + table.insert(achievements, "detonate-1Gt") + elseif (name=="-atomic-500t") then + for _,f in pairs(game.forces) do + if(f ~= building.force) then + if (global.nuclearTests[f.index] and global.nuclearTests[f.index]["test-pack-atomic-500t-1"]) then + table.insert(achievements, "multi-force-500t") + for _,p in pairs(f.players) do + p.unlock_achievement("multi-force-500t") + end + end + end + end + end + for _, achievement in pairs(achievements) do + for _,player in pairs(building.force.players) do + player.unlock_achievement(achievement) + end + end + end +end + +local function nukedSelf(player) + checkAllowAchievements(); + if(global.allowAchievements) then + player.unlock_achievement("nuke-self") + end +end + +local function nukedEverything(force) + checkAllowAchievements(); + if(global.allowAchievements) then + for _,p in pairs(force.players) do + p.unlock_achievement("destroy-everything") + end + end +end + + +local function checkInvForNukes(event) + local player = game.players[event.player_index] + if(player.get_main_inventory()) then + for name,count in pairs(player.get_main_inventory().get_contents()) do + if(string.match(name, "TN-warhead.*") or string.match(name, ".*-atomic-.*")) then + player.unlock_achievement("lose-nuke") + return; + end + end + end +end +script.on_event(defines.events.on_pre_player_died, checkInvForNukes) + + + +return { + building_detonated = building_detonated, + checkAllowAchievements = checkAllowAchievements, + nukedSelf = nukedSelf, + nukedEverything = nukedEverything +} diff --git a/True-Nukes/scripts/blast-system.lua b/True-Nukes/scripts/blast-system.lua new file mode 100644 index 00000000..b16c8ffb --- /dev/null +++ b/True-Nukes/scripts/blast-system.lua @@ -0,0 +1,331 @@ +local function fire_damage_entity(surface, entity, force, cause, killPlanes) + if (entity.valid and entity.position and (killPlanes or entity.type ~= "car")) then + if(not (entity.prototype.max_health == 0)) then + -- For thermobarics, with the blast wave carrying the fire + local type = entity.type + if (type == "unit" or type == "car" or type == "spider-vehicle") then + local fireShield = nil + if entity.grid then + for _,e in pairs(entity.grid.equipment) do + if(e.name=="fire-shield-equipment" and e.energy>=500000) then + fireShield = e; + break; + end + end + end + if fireShield then + fireShield.energy = fireShield.energy-500000 + else + surface.create_entity{name="fire-sticker", position=entity.position, target=entity} + end + if(cause and cause.valid) then + entity.damage(20, force, "fire", cause) + if(entity.valid)then + entity.damage(40, force, "physical", cause) + end + if(entity.valid and entity.type == "car" and (entity.prototype.max_health >= 1000 or fireShield)) then + entity.damage(80, force, "fire", cause) + end + else + entity.damage(20, force, "fire") + if(entity.valid)then + entity.damage(40, force, "physical") + end + if(entity.valid and entity.type == "car" and (entity.prototype.max_health >= 1000 or fireShield)) then + entity.damage(80, force, "fire") + end + end + elseif (type ~= "tree") then + if(cause and cause.valid) then + entity.damage(100, force, "fire", cause) + else + entity.damage(100, force, "fire") + end + end + end + end +end + + +local function damage_entity(surface, distSq, ePos, power, fire, damage_init, blast_min_damage, entity, force, cause, corpseMap) + -- do blast damage - reduced for rails, belts, land mines and flying vehicles, as this makes some sense, and trees in order to leave some alive + local eProto = entity.prototype + local damage = power/distSq*damage_init+blast_min_damage + local t = entity.type + + if(t=="tree") then + if(fire) then + surface.create_entity{name="fire-flame-on-tree", target = entity, position=ePos} + end + damage = math.random(damage/8, damage)/2 + + if(eProto.resistances and eProto.resistances.explosion) then + damage = (damage-entity.prototype.resistances.explosion.decrease)*(1-eProto.resistances.explosion.percent) + end + -- If a tree is destroyed, don't bother doing particle effects, just destroy it - huge performance savings + if(entity.health1 then + local damage_level = (1-entity.health/eProto.max_health)*entity.tree_stage_index_max + entity.tree_stage_index = math.ceil(damage_level) + end + end + return + else + if(t=="curved-rail") then + damage = damage/10 + elseif (t=="straight-rail") then + damage = damage/10 + elseif (t=="transport-belt") then + damage = damage/10 + elseif (t=="land-mine") then + damage = damage/10 + elseif(t=="car" or t=="spider-vehicle") then + if (next(entity.prototype.collision_mask)==nil)then + damage = damage/2 + end + end + damage = math.random(damage/2, damage*2) + local calcDamage = damage; + if(eProto.resistances and eProto.resistances.explosion) then + calcDamage = (calcDamage-eProto.resistances.explosion.decrease)*(1-eProto.resistances.explosion.percent) + end + if((not entity.grid) and entity.health>calcDamage) then + entity.health = entity.health-calcDamage + else + if((not entity.grid) and corpseMap[entity.name]) then + local corpseName = corpseMap[entity.name] + --local ghost + --if(eProto.create_ghost_on_death or eProto.create_ghost_on_death == nil) then + -- ghost = {inner_name = entity.name, name = "entity-ghost", direction = entity.direction, expires = true, force = entity.force, position = entity.position} + -- if(t == "assembling-machine" and entity.get_recipe()) then + -- ghost.recipe = entity.get_recipe().name + -- end + --end + entity.destroy{raise_destroy = true} + surface.create_entity{name=corpseName, position=ePos} + --if(eProto.create_ghost_on_death or eProto.create_ghost_on_death == nil) then + -- surface.create_entity(ghost) + --end + else + if(cause and cause.valid) then + entity.damage(damage, force, "explosion", cause) + else + entity.damage(damage, force, "explosion") + end + end + end + end +end + + + + + + +local function move_blast(i,blast,pastEHits, corpseMap) + + -- Compute the number of regions we move the blast in + local regNum = 8 + if(blast.r<=500 or not blast.doItts) then + regNum = 8 + elseif(blast.r<=1000) then + regNum = 24 + elseif(blast.r<=2000) then + regNum = 48 + elseif(blast.r<=4000) then + regNum = 96 + else + regNum = 192 + end + -- Do we need to wait a while (we might need to if the simulated blast is going faster than expected) + blast.ittframe = blast.ittframe+1 + if(blast.itt > regNum and blast.ittframe >=8) then + blast.r = blast.r + blast.speed + blast.ittframe = 1 + blast.itt = 1 + elseif (blast.itt > regNum) then + return + end + + local surface = game.surfaces[blast["s"]] + local center = blast["pos"] + local sideOffset = blast.speed*1.5 + local extraSpace = blast.speed + + local eHits = pastEHits + + local area = {{}, {}} + + -- Some hard-coded regions for small blasts + local regions = { + {{center.x-blast.r/2-sideOffset, center.y+(blast.r-extraSpace)*0.86603-0.5}, {center.x+blast.r/2+sideOffset, center.y+blast.r+1}}, + {{center.x-blast.r/2-sideOffset, center.y-blast.r}, {center.x+blast.r/2+sideOffset, center.y-(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x+(blast.r-extraSpace)*0.86603-0.5, center.y-blast.r/2-sideOffset}, {center.x+blast.r+1, center.y+blast.r/2+sideOffset}}, + {{center.x-blast.r, center.y-blast.r/2-sideOffset}, {center.x-(blast.r-extraSpace)*0.86603+0.5, center.y+blast.r/2+sideOffset}}, + + {{center.x-(blast.r-extraSpace)*0.86603-0.5, center.y+blast.r/2-extraSpace/2-0.5}, {center.x-blast.r/2+extraSpace/2+0.5, center.y+(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x+blast.r/2-extraSpace/2-0.5, center.y+blast.r/2-extraSpace/2-0.5}, {center.x+(blast.r-extraSpace)*0.86603+0.5, center.y+(blast.r-extraSpace)*0.86603+0.5}}, + {{center.x-(blast.r-extraSpace)*0.86603-0.5, center.y-(blast.r-extraSpace)*0.86603-0.5}, {center.x-blast.r/2+extraSpace/2+0.5, center.y-blast.r/2+extraSpace/2+0.5}}, + {{center.x+blast.r/2-extraSpace/2-0.5, center.y-(blast.r-extraSpace)*0.86603-0.5}, {center.x+(blast.r-extraSpace)*0.86603+0.5, center.y-blast.r/2+extraSpace/2+0.5}} + } + + if(blast.r<=500 or not blast.doItts) then + area = regions[blast.itt] + else + -- otherwise compute the regions for large area blast-waves + local reg = blast.itt % (regNum/4) + local currentQuadrant = (math.floor(blast.itt/(regNum/4)))%4 + local angleUnit = 2*3.14159/regNum + local angleRelative = math.min(angleUnit*(reg+1), angleUnit*(regNum/4-reg-1)) + local angleStart = angleUnit*((regNum/4)*currentQuadrant+reg) + local overstep = math.sqrt( (blast.r*math.sin(angleRelative))^2+2*blast.r*blast.speed+blast.speed*blast.speed)-blast.r*math.sin(angleRelative)+2; + + + + if(currentQuadrant==0) then + if(regblastInnerSq and entity.valid and entity.prototype.max_health ~= 0 + and ePos.x>=area[1][1] and ePos.x=area[1][2] and ePos.y (blast.r - blast.speed)*(blast.r - blast.speed) and distSq <= blast.r*blast.r) then + if (blast.r <= blast.fire_rad) then + local chance = math.random(0, blast.fire_rad) + if(chance*chance>distSq) then + surface.create_entity{name="fire-flame",position=tile.position} + else + surface.create_entity{name="thermobaric-wave-fire",position=tile.position} + end + else + local chanceWave = math.random(blast.fire_rad, blast.max) + if(chanceWave*chanceWave>distSq) then + surface.create_entity{name="thermobaric-wave-fire",position=tile.position} + end + end + end + end + end + local hasEnded = false + -- We want to do more regions this frame if the ones we have covered contain very few entities (such as if they are unloaded) + if(blast.itt == regNum and blast.ittframe>=8) then + blast.r = blast.r + blast.speed + blast.itt = 1 + blast.ittframe = 1 + elseif blast.itt ~= regNum then + blast.itt = blast.itt+1 + if((not blast.doItts) or eHits<4000) then + hasEnded = move_blast(i, blast,eHits, corpseMap) + end + end + if(blast.r>blast.max and not hasEnded) then + global.blastWaves[i] = nil + return true + end + return hasEnded +end + + + +local function chunk_loaded(chunkLoaderStruct, surface_index, originPos, chunkPosAndArea, x, y, killPlanes, blastSq, force, cause, corpseMap) + local fireballSq = chunkLoaderStruct.fireball_r*chunkLoaderStruct.fireball_r; + local cx = originPos.x + local cy = originPos.y + local init_blast = chunkLoaderStruct.init_blast + local blast_min_damage = chunkLoaderStruct.blast_min_damage + for _,entity in pairs(game.surfaces[surface_index].find_entities(chunkPosAndArea.area)) do + if (entity.valid and entity.position) then + local ePos = entity.position + local xdif = ePos.x-cx + local ydif = ePos.y-cy + local distSq = xdif*xdif + ydif*ydif + if(distSq <= blastSq and entity.prototype.max_health ~= 0 + and ePos.x>=x and ePos.x=y and ePos.y0) then + for i,building in ipairs(global.nukeBuildings) do + if(building.valid) then + if(not building.get_output_inventory().is_empty()) then + nukeBuildingDetonate(building) + elseif (building.crafting_progress > 0 and building.crafting_progress < 0.01) then + -- Force map loading when a nuke is set up + if(string.match(building.get_recipe().name, ".*-atomic-2-stage-100kt")) then + if (not settings.global["optimise-100kt"].value) then + building.surface.request_to_generate_chunks(building.position, 1500/32) + else + building.surface.request_to_generate_chunks(building.position, 200/32) + end + elseif(string.match(building.get_recipe().name, ".*-atomic-15kt") or string.match(building.get_recipe().name, ".*-atomic-2-stage-15kt")) then + building.surface.request_to_generate_chunks(building.position, 1000/32) + elseif(string.match(building.get_recipe().name, ".*-atomic-1kt")) then + building.surface.request_to_generate_chunks(building.position, 800/32) + elseif(string.match(building.get_recipe().name, ".*-atomic-500t")) then + building.surface.request_to_generate_chunks(building.position, 400/32) + else + building.surface.request_to_generate_chunks(building.position, 100/32) + end + end + else + table.remove(global.nukeBuildings, i) + end + end + end +end + +return {checkBuildings = checkBuildings} diff --git a/True-Nukes/scripts/crater-system-se.lua b/True-Nukes/scripts/crater-system-se.lua new file mode 100644 index 00000000..16ee0237 --- /dev/null +++ b/True-Nukes/scripts/crater-system-se.lua @@ -0,0 +1,195 @@ +local water = require("water-system") + +local spaceTiles = {"se-regolith", "se-space-platform-plating", "se-space-platform-scaffold", "se-spaceship-floor"} +local allSpaceTiles = {"se-regolith", "se-space-platform-plating", "se-space-platform-scaffold", "se-spaceship-floor", "se-space"} + +local function tileDown1Map(tile) + if(tile.name == "se-regolith" or tile.name == "se-space-platform-scaffold")then + return "se-space" + elseif(tile.name == "se-space-platform-plating")then + if(tile.hidden_tile == "se-space") then + return "se-space-platform-plating" + else + return tile.hidden_tile or "se-space-platform-plating" + end + return "se-space-platform-scaffold" + elseif(tile.name == "se-spaceship-floor")then + return tile.hidden_tile or "se-space" + else + return "se-space" + end +end + +local function mapTile(tile, diff) + if(diff <= 1) then + return tileDown1Map(tile) + else + return "se-space" + end +end +local bigMapDown1 = {default = "se-space"} +bigMapDown1["se-space-platform-plating"] = "se-space-platform-scaffold" + + +local util = require("crater-util") + +local circularNoise = util.circularNoise +local tileNoise = util.tileNoise +local tileNoiseLimited = util.tileNoiseLimited + + +local function nukeTileChangesHeightAware(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + local hiddenTable = {} + local tileTable = {} + local noiseTables = {} + if (crater_internal_r<5) then + noiseTables[1] = {} + --no extra noise needed + elseif (crater_internal_r<10) then + noiseTables[1] = {} + noiseTables[2] = {} + circularNoise(noiseTables[2], position, crater_internal_r, 1/2, 3) + circularNoise(noiseTables[1], position, crater_external_r, 1/2, 3) + elseif (crater_internal_r<20) then + noiseTables[1] = {} + noiseTables[2] = {} + noiseTables[3] = {} + noiseTables[4] = {} + circularNoise(noiseTables[4], position, crater_internal_r/2, 1/2, 3) + circularNoise(noiseTables[3], position, crater_internal_r, 1/2, 3) + circularNoise(noiseTables[2], position, crater_internal_r, 1, 3) + circularNoise(noiseTables[1], position, crater_external_r, 1/2, 3) + else + local noiseLevel = 1/2; + if(crater_internal_r>50)then + noiseLevel = 1; + end + noiseTables[1] = {} + noiseTables[2] = {} + noiseTables[3] = {} + noiseTables[4] = {} + noiseTables[5] = {} + noiseTables[6] = {} + noiseTables[7] = {} + circularNoise(noiseTables[7], position, crater_internal_r/3, noiseLevel, 3) + circularNoise(noiseTables[6], position, crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[5], position, crater_internal_r, noiseLevel, 3) + circularNoise(noiseTables[4], position, crater_internal_r, noiseLevel*2, 3) + circularNoise(noiseTables[3], position, crater_external_r*1/3+crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[2], position, crater_external_r*2/3+crater_internal_r*1/3, noiseLevel, 3) + circularNoise(noiseTables[1], position, crater_external_r-1, noiseLevel, 3) + end + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5}) do + local distSq = (v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y) + local diffToDrop = 0 + if (crater_internal_r<10) then + if(distSq<=crater_internal_r*crater_internal_r) then + diffToDrop = 1 + end + elseif (crater_internal_r<20) then + if(distSq<=crater_internal_r*crater_internal_r/4) then + diffToDrop = 2 + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[4][v.position.x]==nil or noiseTables[4][v.position.x][v.position.y]==nil)then + diffToDrop = 1 + else + diffToDrop = 2 + end + elseif not (noiseTables[3][v.position.x]==nil or noiseTables[3][v.position.x][v.position.y]==nil)then + diffToDrop = 1 + end + else + if(distSq<=crater_internal_r*crater_internal_r/9) then + diffToDrop = 2 + elseif(distSq<=crater_internal_r*crater_internal_r*4/9) then + if (noiseTables[7][v.position.x]==nil or noiseTables[7][v.position.x][v.position.y]==nil)then + diffToDrop = 2 + else + diffToDrop = 2 + end + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[6][v.position.x]==nil or noiseTables[6][v.position.x][v.position.y]==nil)then + diffToDrop = 1 + else + diffToDrop = 2 + end + elseif(distSq<=(crater_external_r*1/3+crater_internal_r*2/3)*(crater_external_r*1/3+crater_internal_r*2/3)) then + if not (noiseTables[5][v.position.x]==nil or noiseTables[5][v.position.x][v.position.y]==nil)then + diffToDrop = 1 + end + end + end + + if(diffToDrop ~= 0) then + if(v.hidden_tile) then + hiddenTable[v.position] = v.hidden_tile + end + table.insert(tileTable, {name = mapTile(v, diffToDrop), position = v.position}) + end + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + end + + game.surfaces[surface_index].set_tiles(tileTable) + for pos,h in pairs(hiddenTable) do + game.surfaces[surface_index].set_hidden_tile(pos, h) + end +end + + +local function chunk_loaded(surface_index, chunkPosAndArea, chunkLoaderStruct, originPos, x, y, ang1, ang2, ang3, ang4, minR, maxR) + local hiddenTable = {} + + local startAngle = math.min(ang1, ang2, ang3, ang4) + local endAngle = math.max(ang1, ang2, ang3, ang4) + local crater_internal_r = chunkLoaderStruct.crater_internal_r + local crater_external_r = chunkLoaderStruct.crater_external_r + local tileTable = {}; + for xoffset = 0, 32 do + for yoffset = 0, 32 do + local tilepos = {x + xoffset, y + yoffset} + local xdiff = x+xoffset-originPos.x + local ydiff = y+yoffset-originPos.y + local distSq = xdiff*xdiff+ydiff*ydiff + if(distSq crater_internal_r/2-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r/2, 1, {default = "se-space"}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + if(minR crater_internal_r-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r, 1, bigMapDown1, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + game.surfaces[surface_index].set_tiles(tileTable) + + for pos,h in pairs(hiddenTable) do + game.surfaces[surface_index].set_hidden_tile(pos, h) + end + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{area=chunkPosAndArea.area, name="se-space-platform-scaffold"}) do + if(not v.hidden_tile) then + game.surfaces[surface_index].set_hidden_tile(v.position, "se-space") + end + end +end + +return { + nukeTileChangesHeightAware = nukeTileChangesHeightAware, + nukeTileChangesHeightAwareHuge = nukeTileChangesHeightAware, + chunk_loaded = chunk_loaded, + chunk_loaded_outer = function() end, + interesting_tiles = allSpaceTiles, + use_fires = false +} diff --git a/True-Nukes/scripts/crater-system.lua b/True-Nukes/scripts/crater-system.lua new file mode 100644 index 00000000..d736de74 --- /dev/null +++ b/True-Nukes/scripts/crater-system.lua @@ -0,0 +1,416 @@ +local water = require("water-system") +local util = require("crater-util") + +local circularNoise = util.circularNoise +local tileNoise = util.tileNoise +local tileNoiseLimited = util.tileNoiseLimited + +local function nukeTileChangesHeightAwareHuge(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + local tileTable = {} + + --fireball boils water... + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5, name=water.waterTypes}) do + if(water.waterDepths[v.name]) then + table.insert(tileTable, {name = water.depthsForCrater[water.waterDepths[v.name]], position = v.position}) + end + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + end + local groundNoise = {} + circularNoise(groundNoise, position, fireball_r, 1, 3) + for x,xtiles in pairs(groundNoise) do + for y,_ in pairs(xtiles) do + local tile = game.surfaces[surface_index].get_tile(x, y) + if not(water.waterDepths[tile.name] == nil) then + table.insert(tileTable, {name = water.depthsForCrater[water.waterDepths[tile.name]], position = {x = x, y = y}}) + end + end + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + end + -- make the crater + for x = math.floor(-crater_external_r+0.5), math.floor(crater_external_r+0.5) do + for y = math.floor(-crater_external_r+0.5), math.floor(crater_external_r+0.5) do + local tilepos = {position.x + x, position.y + y} + local distSq = x*x+y*y + if(distSq=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + end + end + -- add noise + tileNoise(game.surfaces[surface_index], tileTable, position, crater_internal_r/3, 1, {default = water.depthsForCrater[-3]}, 3); + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + tileNoise(game.surfaces[surface_index], tileTable, position, crater_internal_r*2/3, 1, {default = water.depthsForCrater[-2]}, 3); + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + tileNoise(game.surfaces[surface_index], tileTable, position, crater_internal_r, 2, {default = water.depthsForCrater[0]}, 3); + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + tileNoise(game.surfaces[surface_index], tileTable, position, crater_internal_r, 1, {default = water.depthsForCrater[-1]}, 3); + game.surfaces[surface_index].set_tiles(tileTable) + -- ensure noise for crater goes on top of lakes + local tileTable2 = {} + --noise around the crater + local externalNoise = {default = "nuclear-ground"} + tileNoise(game.surfaces[surface_index], tileTable2, position, crater_external_r, 1, externalNoise, 3); + + --high noise around crater + local externalNoise2 = {default = "nuclear-high"} + tileNoise(game.surfaces[surface_index], tileTable2, position, crater_external_r-2, 1, externalNoise2, 3); + game.surfaces[surface_index].set_tiles(tileTable2) + + --make the high ground removable + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5, name="nuclear-high"}) do + game.surfaces[surface_index].set_hidden_tile(v.position, "nuclear-ground") + end + + -- setup craters to fill with water + for xChunkPos = math.floor((position.x-fireball_r*1.1)/8-1),math.floor((position.x+fireball_r*1.1)/8+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/8-1),math.floor((position.y+fireball_r*1.1)/8+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.waterTypes, limit = 1} == 0)) and + (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.craterTypes0, limit = 1} == 0)) then + local height = -2; + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + height = 0; + end + -- have both water and crater + if(global.cratersFast[surface_index]==nil)then + global.cratersFast[surface_index] = {} + global.cratersFastData[surface_index] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + if(global.cratersFast[surface_index][xChunkPos]==nil)then + global.cratersFast[surface_index][xChunkPos] = {} + global.cratersFastData[surface_index].xCount = global.cratersFastData[surface_index].xCount + 1 + end + global.cratersFast[surface_index][xChunkPos][yChunkPos] = height + end + end + end + -- slow filling - no checks required, all the chunks get this anyway + for xChunkPos = math.floor((position.x-fireball_r*1.1)/32-1),math.floor((position.x+fireball_r*1.1)/32+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/32-1),math.floor((position.y+fireball_r*1.1)/32+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*32, yChunkPos*32}, {xChunkPos*32+32, yChunkPos*32+32}}, name = water.craterTypes0, limit = 1} == 0)) then + table.insert(global.cratersSlow, {t = 0, x = xChunkPos, y = yChunkPos, surface = surface_index}); + end + end + end +end + + +local function nukeTileChangesHeightAware(position, check_craters, surface_index, crater_internal_r, crater_external_r, fireball_r) + local tileTable = {} + local noiseTables = {} + if (crater_internal_r<5) then + noiseTables[1] = {} + --no extra noise needed + elseif (crater_internal_r<10) then + noiseTables[1] = {} + noiseTables[2] = {} + circularNoise(noiseTables[2], position, crater_internal_r, 1/2, 3) + circularNoise(noiseTables[1], position, crater_external_r, 1/2, 3) + elseif (crater_internal_r<20) then + noiseTables[1] = {} + noiseTables[2] = {} + noiseTables[3] = {} + noiseTables[4] = {} + circularNoise(noiseTables[4], position, crater_internal_r/2, 1/2, 3) + circularNoise(noiseTables[3], position, crater_internal_r, 1/2, 3) + circularNoise(noiseTables[2], position, crater_internal_r, 1, 3) + circularNoise(noiseTables[1], position, crater_external_r, 1/2, 3) + else + local noiseLevel = 1/2; + if(crater_internal_r>50)then + noiseLevel = 1; + end + noiseTables[1] = {} + noiseTables[2] = {} + noiseTables[3] = {} + noiseTables[4] = {} + noiseTables[5] = {} + noiseTables[6] = {} + noiseTables[7] = {} + circularNoise(noiseTables[7], position, crater_internal_r/3, noiseLevel, 3) + circularNoise(noiseTables[6], position, crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[5], position, crater_internal_r, noiseLevel, 3) + circularNoise(noiseTables[4], position, crater_internal_r, noiseLevel*2, 3) + circularNoise(noiseTables[3], position, crater_external_r*1/3+crater_internal_r*2/3, noiseLevel, 3) + circularNoise(noiseTables[2], position, crater_external_r*2/3+crater_internal_r*1/3, noiseLevel, 3) + circularNoise(noiseTables[1], position, crater_external_r-1, noiseLevel, 3) + end + -- do the noise around the craters + if (crater_external_r>8) then + local externalNoise = {default = "nuclear-ground"} + for tile,h in pairs( water.waterDepths) do + externalNoise[tile] = water.depthsForCrater[h]; + end + tileNoise(game.surfaces[surface_index], tileTable, position, crater_external_r, 1, externalNoise, 3); + end + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5}) do + local distSq = (v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y) + if(v.name == "out-of-map")then + elseif(distSq>crater_external_r*crater_external_r and (noiseTables[1][v.position.x]==nil or noiseTables[1][v.position.x][v.position.y]==nil)) then + if(water.waterDepths[v.name]) then + table.insert(tileTable, {name = water.depthsForCrater[water.waterDepths[v.name]], position = v.position}) + end + else + local curr_height = water.waterDepths[v.name] + if(curr_height==nil) then + curr_height = 0; + end + if (crater_internal_r<5) then + if(distSq<=crater_internal_r*crater_internal_r) then + curr_height = math.min(curr_height, -1) + end + elseif (crater_internal_r<10) then + if(distSq<=crater_internal_r*crater_internal_r) then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[2][v.position.x]==nil or noiseTables[2][v.position.x][v.position.y]==nil)then + -- any tile not hit by the noise does this, otherwise we leave it + curr_height = curr_height+1; + end + elseif (crater_internal_r<20) then + if(distSq<=crater_internal_r*crater_internal_r/4) then + curr_height = math.min(curr_height, -2) + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[4][v.position.x]==nil or noiseTables[4][v.position.x][v.position.y]==nil)then + curr_height = math.min(curr_height, -1) + else + curr_height = math.min(curr_height, -2) + end + elseif not (noiseTables[3][v.position.x]==nil or noiseTables[3][v.position.x][v.position.y]==nil)then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[2][v.position.x]==nil or noiseTables[2][v.position.x][v.position.y]==nil)then + curr_height = curr_height+1; + end + else + if(distSq<=crater_internal_r*crater_internal_r/9) then + curr_height = math.min(curr_height, -3) + elseif(distSq<=crater_internal_r*crater_internal_r*4/9) then + if (noiseTables[7][v.position.x]==nil or noiseTables[7][v.position.x][v.position.y]==nil)then + curr_height = math.min(curr_height, -2) + else + curr_height = math.min(curr_height, -3) + end + elseif(distSq<=crater_internal_r*crater_internal_r) then + if (noiseTables[6][v.position.x]==nil or noiseTables[6][v.position.x][v.position.y]==nil)then + curr_height = math.min(curr_height, -1) + else + curr_height = math.min(curr_height, -2) + end + elseif(distSq<=(crater_external_r*1/3+crater_internal_r*2/3)*(crater_external_r*1/3+crater_internal_r*2/3)) then + if not (noiseTables[5][v.position.x]==nil or noiseTables[5][v.position.x][v.position.y]==nil)then + curr_height = math.min(curr_height, -1) + elseif (noiseTables[4][v.position.x]==nil or noiseTables[4][v.position.x][v.position.y]==nil)then + curr_height = curr_height+1; + end + elseif(distSq<=(crater_external_r*2/3+crater_internal_r*1/3)*(crater_external_r*2/3+crater_internal_r*1/3)) then + if (noiseTables[3][v.position.x]==nil or noiseTables[3][v.position.x][v.position.y]==nil)then + curr_height = curr_height+2; + else + curr_height = curr_height+1; + end + else + if (noiseTables[2][v.position.x]==nil or noiseTables[2][v.position.x][v.position.y]==nil)then + curr_height = curr_height+1; + else + curr_height = curr_height+2; + end + end + end + if(curr_height > 1) then + table.insert(tileTable, {name = "nuclear-high", position = v.position}) + else + table.insert(tileTable, {name = water.depthsForCrater[curr_height], position = v.position}) + end + if(#tileTable >=1000) then + game.surfaces[surface_index].set_tiles(tileTable) + tileTable = {}; + end + end + end + + if (fireball_r>8) then + local groundNoise = {} + circularNoise(groundNoise, position, fireball_r, 1, 3) + for x,xtiles in pairs(groundNoise) do + for y,_ in pairs(xtiles) do + local tile = game.surfaces[surface_index].get_tile(x, y) + if(tile ~= "out-of-map")then + local tileDepth = water.waterDepths[tile.name]; + if not(tileDepth == nil) then + table.insert(tileTable, {name = water.depthsForCrater[tileDepth], position = {x = x, y = y}}) + end + end + end + end + end + + game.surfaces[surface_index].set_tiles(tileTable) + --make the high ground removable + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{position=position, radius=fireball_r+0.5, name="nuclear-high"}) do + game.surfaces[surface_index].set_hidden_tile(v.position, "nuclear-ground") + end + + -- setup craters to fill with water + for xChunkPos = math.floor((position.x-fireball_r*1.1)/8-1),math.floor((position.x+fireball_r*1.1)/8+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/8-1),math.floor((position.y+fireball_r*1.1)/8+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.waterTypes, limit = 1} == 0)) and + (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.craterTypes0, limit = 1} == 0)) then + local height = -2; + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*8, yChunkPos*8}, {xChunkPos*8+8, yChunkPos*8+8}}, name = water.waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + height = 0; + + end + -- have both water and crater + if(global.cratersFast[surface_index]==nil)then + global.cratersFast[surface_index] = {} + global.cratersFastData[surface_index] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + if(global.cratersFast[surface_index][xChunkPos]==nil)then + global.cratersFast[surface_index][xChunkPos] = {} + global.cratersFastData[surface_index].xCount = global.cratersFastData[surface_index].xCount + 1 + end + global.cratersFast[surface_index][xChunkPos][yChunkPos] = height + end + end + end + if(not global.cratersSlow)then + global.cratersSlow = {} + end + -- slow filling - no checks required, all the chunks get this anyway + for xChunkPos = math.floor((position.x-fireball_r*1.1)/32-1),math.floor((position.x+fireball_r*1.1)/32+1) do + for yChunkPos = math.floor((position.y-fireball_r*1.1)/32-1),math.floor((position.y+fireball_r*1.1)/32+1) do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{xChunkPos*32, yChunkPos*32}, {xChunkPos*32+32, yChunkPos*32+32}}, name = water.craterTypes0, limit = 1} == 0)) then + table.insert(global.cratersSlow, {t = 0, x = xChunkPos, y = yChunkPos, surface = surface_index}); + end + end + end +end + + +local function chunk_loaded(surface_index, chunkPosAndArea, chunkLoaderStruct, originPos, x, y, ang1, ang2, ang3, ang4, minR, maxR) + if(settings.global["destroy-resources-in-crater"].value) then + -- destroy resources in crater (a bit more to account for the noise on crater edge) + local craterEdgeSq = (chunkLoaderStruct.crater_external_r*1.1+4)*(chunkLoaderStruct.crater_external_r*1.1+4) + for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{area = chunkPosAndArea.area, type="resource"}) do + if(v.valid and (v.position.x-originPos.x)*(v.position.x-originPos.x) + (v.position.y-originPos.y)*(v.position.y-originPos.y)<=craterEdgeSq) then + v.destroy() + end + end + end + local startAngle = math.min(ang1, ang2, ang3, ang4) + local endAngle = math.max(ang1, ang2, ang3, ang4) + local crater_internal_r = chunkLoaderStruct.crater_internal_r + local crater_external_r = chunkLoaderStruct.crater_external_r + local tileTable = {}; + for xoffset = 0, 32 do + for yoffset = 0, 32 do + local tilepos = {x + xoffset, y + yoffset} + local xdiff = x+xoffset-originPos.x + local ydiff = y+yoffset-originPos.y + local distSq = xdiff*xdiff+ydiff*ydiff + if(distSq crater_internal_r/3-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r/3, 1, {default = water.depthsForCrater[-3]}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + if(minR crater_internal_r*2/3-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r*2/3, 1, {default = water.depthsForCrater[-2]}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + if(minR crater_internal_r-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r, 2, {default = water.depthsForCrater[0]}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_internal_r, 1, {default = water.depthsForCrater[-1]}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + game.surfaces[surface_index].set_tiles(tileTable) + tileTable={}; + -- ensure noise for crater goes on top of lakes + + --noise around the crater + if(minR crater_external_r-10) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_external_r, 1, {default = "nuclear-ground"}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + --high noise around crater + if(minR crater_external_r-14) then + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, crater_external_r-4, 1, {default = "nuclear-high"}, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + end + + game.surfaces[surface_index].set_tiles(tileTable) + for _,v in pairs(game.surfaces[surface_index].find_tiles_filtered{area=chunkPosAndArea.area, name="nuclear-high"}) do + game.surfaces[surface_index].set_hidden_tile(v.position, "nuclear-ground") + end +end + +local function chunk_loaded_outer(surface_index, chunkPosAndArea, chunkLoaderStruct, originPos, x, y, ang1, ang2, ang3, ang4, minR, maxR) + local tiles = game.surfaces[surface_index].find_tiles_filtered{area=chunkPosAndArea.area, name=water.waterTypes}; + if(#tiles ~=0) then + local startAngle = math.min(ang1, ang2, ang3, ang4) + local endAngle = math.max(ang1, ang2, ang3, ang4) + local tileTable = {}; + + local fireballSq = chunkLoaderStruct.fireball_r*chunkLoaderStruct.fireball_r; + for _,v in pairs(tiles) do + if((v.position.x-originPos.x)*(v.position.x-originPos.x)+(v.position.y-originPos.y)*(v.position.y-originPos.y)<=fireballSq) then + local depth = water.waterDepths[v.name] + if(depth) then + -- if (depth == -2 and (v.position.x == x or v.position.x == x+31))then + --depth = -3; + -- elseif (depth == -2 and (v.position.y == y or v.position.y == y+31))then + --depth = -3 + -- end + table.insert(tileTable, {name = water.depthsForCrater[depth], position = v.position}) + end + end + end + game.surfaces[surface_index].set_tiles(tileTable) + if(maxR>chunkLoaderStruct.fireball_r-4) then + tileTable = {}; + local waterMapping = {} + for t,h in pairs(water.waterDepths) do + waterMapping[t] = water.depthsForCrater[h] + end + tileNoiseLimited(game.surfaces[surface_index], tileTable, originPos, chunkLoaderStruct.fireball_r, 1, waterMapping, 3, startAngle, endAngle, minR, maxR, chunkPosAndArea.area); + game.surfaces[surface_index].set_tiles(tileTable) + end + end +end +return { + nukeTileChangesHeightAware = nukeTileChangesHeightAware, + nukeTileChangesHeightAwareHuge = nukeTileChangesHeightAwareHuge, + chunk_loaded = chunk_loaded, + chunk_loaded_outer = chunk_loaded_outer, + use_fires = true +} diff --git a/True-Nukes/scripts/crater-util.lua b/True-Nukes/scripts/crater-util.lua new file mode 100644 index 00000000..de975dfc --- /dev/null +++ b/True-Nukes/scripts/crater-util.lua @@ -0,0 +1,106 @@ + +local function circularNoise(tableTarget, position, radius, depthMult, sliceCount) + if (settings.global["nuke-crater-noise"].value) then + for num=0,sliceCount do + local slice_w = (math.floor(radius*depthMult/50)+1) + for ang=0,math.ceil(3.1416*2*radius*slice_w*4/(num*num+1)) do + local dist = math.floor(num*slice_w+slice_w*math.random()) + local offset = math.random() + + local noise_pos = {x = math.floor(position.x+(dist+radius-1)*math.sin(ang+offset)+0.5), y = math.floor(position.y+(dist+radius-1)*math.cos(ang+offset)+0.5)} + if((position.x-noise_pos.x)*(position.x-noise_pos.x)+(position.y-noise_pos.y)*(position.y-noise_pos.y)<=radius*radius) then + --Do nothing - used to remove rounding errors and prevent hitting the same tile twice + else + if(tableTarget[noise_pos.x]==nil) then + tableTarget[noise_pos.x] = {} + end + tableTarget[noise_pos.x][noise_pos.y] = 1; + end + end + end + end +end + +local function tileNoise(surface, tableTarget, position, radius, depthMult, tileMap, sliceCount) + if (settings.global["nuke-crater-noise"].value) then + local defaultOnly = true + for k,v in pairs (tileMap) do + if(k~="default") then + defaultOnly=false; + break; + end + end + for num=0,sliceCount do + local slice_w = (math.floor(radius*depthMult/50)+1) + for ang=0,math.ceil(3.1416*2*radius*slice_w*4/(num*num+1)) do + local dist = math.floor(math.random(num*slice_w, slice_w+num*slice_w)) + local offset = math.random() + + local noise_pos = {x = math.floor(position.x+(dist+radius-1)*math.sin(ang+offset)+0.5), y = math.floor(position.y+(dist+radius-1)*math.cos(ang+offset)+0.5)} + local cur_tile = defaultOnly or surface.get_tile(noise_pos) + if((not defaultOnly and cur_tile.name == "out-of-map") or (position.x-noise_pos.x)*(position.x-noise_pos.x)+(position.y-noise_pos.y)*(position.y-noise_pos.y)<=radius+0.5) then + --Do nothing - used to remove rounding errors and prevent hitting the same tile twice + elseif (defaultOnly or tileMap[cur_tile.name] == nil) then + if(not(tileMap["default"] ==nil)) then + table.insert(tableTarget, {name = tileMap["default"], position = noise_pos}) + end + else + table.insert(tableTarget, {name = tileMap[cur_tile.name], position = noise_pos}) + end + end + end + end +end + + +local function tileNoiseLimited(surface, tableTarget, position, radius, depthMult, tileMap, sliceCount, lesserAngle, greaterAngle, minR, maxR, boundaryBox) + if (settings.global["nuke-crater-noise"].value) then + local defaultOnly = true + for k,v in pairs (tileMap) do + if(k~="default") then + defaultOnly=false; + break; + end + end + local startAngle = lesserAngle + local endAngle = greaterAngle + local angleDiff = (endAngle-startAngle) + if(angleDiff>5) then + angleDiff = 6.283185307-angleDiff + local tmp = startAngle; + startAngle = endAngle; + endAngle = tmp+6.283185307; + end + local slice_w = (math.floor(radius*depthMult/50)+1) + for num=0,sliceCount do + if(minR<=slice_w+num*slice_w+radius and maxR>=num*slice_w+radius-1) then + for ang=0,math.ceil(angleDiff*radius*slice_w*4/(num*num+1)) do + local dist = math.floor(math.random(num*slice_w, slice_w+num*slice_w)) + local offset = math.random()+sliceCount + local angle = (ang+offset)%angleDiff+startAngle + local noise_pos = {x = math.floor(position.x+(dist+radius-1)*math.cos(angle)+0.5), y = math.floor(position.y+(dist+radius-1)*math.sin(angle)+0.5)} + if(boundaryBox.left_top.x<=noise_pos.x and boundaryBox.right_bottom.x>=noise_pos.x + and boundaryBox.left_top.y<=noise_pos.y and boundaryBox.right_bottom.y>=noise_pos.y) then + local cur_tile = defaultOnly or surface.get_tile(noise_pos) + if(defaultOnly or (cur_tile.valid and cur_tile.name~="out-of-map")) then + if((position.x-noise_pos.x)*(position.x-noise_pos.x)+(position.y-noise_pos.y)*(position.y-noise_pos.y)<=radius+0.5) then + --Do nothing - used to remove rounding errors and prevent hitting the same tile twice + elseif (defaultOnly or tileMap[cur_tile.name] == nil) then + if(not(tileMap["default"] == nil)) then + table.insert(tableTarget, {name = tileMap["default"], position = noise_pos}) + end + else + table.insert(tableTarget, {name = tileMap[cur_tile.name], position = noise_pos}) + end + end + end + end + end + end + end +end +return { + circularNoise = circularNoise, + tileNoise = tileNoise, + tileNoiseLimited = tileNoiseLimited +} diff --git a/True-Nukes/scripts/fireball-system.lua b/True-Nukes/scripts/fireball-system.lua new file mode 100644 index 00000000..4d975a2e --- /dev/null +++ b/True-Nukes/scripts/fireball-system.lua @@ -0,0 +1,230 @@ +local achievement_system = require("achievement-system") + +local decorativeMap = {} +decorativeMap["brown-asterisk"] = {"rock-tiny", 1/4} +decorativeMap["green-asterisk"] = {"brown-asterisk", 1/4} +decorativeMap["green-asterisk-mini"] = {"brown-asterisk", 1/10} +decorativeMap["brown-asterisk-mini"] = {"brown-asterisk", 1/20} +decorativeMap["red-asterisk"] = {"brown-asterisk", 1/4} + +decorativeMap["green-pita"] = {"rock-tiny", 1/10} +decorativeMap["red-pita"] = {"rock-small", 1/10} +decorativeMap["green-croton"] = {"sand-rock-small", 1/10} +decorativeMap["red-croton"] = {"red-desert-decal", 1/10} +decorativeMap["green-pita-mini"] = {"enemy-decal-transparent", 1/20} + +decorativeMap["brown-fluff"] = {"rock-tiny", 1/10} +decorativeMap["brown-fluff-dry"] = {"brown-asterisk", 1/10} +decorativeMap["garballo"] = {"brown-fluff", 1/10} +decorativeMap["garballo-mini-dry"] = {"brown-fluff-dry", 1/10} + +decorativeMap["green-bush-mini"] = {"brown-fluff", 1/10} +decorativeMap["green-hairy-grass"] = {"brown-hairy-grass", 1/10} +decorativeMap["muddy-stump"] = nil + +decorativeMap["green-carpet-grass"] = {"sand-decal", 1/2} + +decorativeMap["green-desert-bush"] = {"red-desert-bush", 1/2} +decorativeMap["white-desert-bush"] = {"white-desert-bush", 1/4} + +decorativeMap["red-desert-bush"] = {"red-desert-bush", 1/2} +decorativeMap["green-small-grass"] = {"brown-asterisk", 1/10} +decorativeMap["brown-carpet-grass"] = {"brown-carpet-grass", 1/2} +decorativeMap["brown-hairy-grass"] = {"brown-hairy-grass", 1/2} + +decorativeMap["rock-medium"] = {} +decorativeMap["rock-small"] = {} +decorativeMap["rock-tiny"] = {} +decorativeMap["sand-rock-medium"] = {} +decorativeMap["sand-rock-small"] = {} + +decorativeMap["red-desert-decal"] = {} +decorativeMap["dark-mud-decal"] = {} +decorativeMap["puberty-decal"] = {} +decorativeMap["light-mud-decal"] = {} +decorativeMap["sand-decal"] = {} + +decorativeMap["sand-dune-decal"] = {} +decorativeMap["big-ship-wreck-grass"] = nil +decorativeMap["small-ship-wreck-grass"] = nil + +decorativeMap["enemy-decal"] = {} +decorativeMap["enemy-decal-transparent"] = {} + +decorativeMap["nuclear-ground-patch"] = {} +decorativeMap["shroom-decal"] = nil +decorativeMap["worms-decal"] = nil +decorativeMap["lichen-decal"] = nil + + +local function full_fireball(surface_index, position, fireball_r, crater_external_r, force, cause, corpseMap) + -- kill things in the fireball + for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=fireball_r}) do + if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then + if v.type=="tree" then + v.destroy() + elseif v.type == "character" then + if(v.force == force and v.player) then + achievement_system.nukedSelf(v.player); + end + if(cause and cause.valid) then + v.die(force, cause) + else + v.die(force) + end + elseif(corpseMap[v.name]) then + v.destroy{raise_destroy = true} + elseif cause and cause.valid then + if not v.die(force, cause) then + v.destroy{raise_destroy = true} + end + elseif not v.die(force) then + v.destroy{raise_destroy = true} + end + end + end + if(settings.global["destroy-resources-in-crater"].value) then + -- destroy resources in crater (a bit more to account for the noise on crater edge) + for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=crater_external_r*1.1+4, type="resource"}) do + if(v.valid) then + v.destroy() + end + end + end + -- destroy decoratives in the fireball + for _,v in pairs(game.surfaces[surface_index].find_decoratives_filtered{area = {{position.x-fireball_r, position.y-fireball_r}, {position.x+fireball_r, position.y+fireball_r}}}) do + if((v.position.x-position.x)*(v.position.x-position.x)+(v.position.y-position.y)*(v.position.y-position.y)<=fireball_r*fireball_r) then + local tmpPos = v.position; + local result = decorativeMap[v.decorative.name] + if(result == nil) then + game.surfaces[surface_index].destroy_decoratives{position = v.position}; + elseif(result[1] == v.decorative.name) then + local rnd = math.random(); + if(rnd<=result[2]) then + game.surfaces[surface_index].destroy_decoratives{position = v.position}; + end + elseif(result[1] ~=nil) then + local rnd = math.random(); + game.surfaces[surface_index].destroy_decoratives{position = v.position}; + if(rnd<=result[2]) then + game.surfaces[surface_index].create_decoratives{decoratives={{name=result[1], position=tmpPos, amount=1}}} + end + end + end + end + -- make sure everything is dead in the fireball + for _,v in pairs(game.surfaces[surface_index].find_entities_filtered{position=position, radius=fireball_r}) do + if(v.valid and (not (string.match(v.type, "ghost"))) and (not (v.type == "resource"))) then + if v.type == "character" then + if(v.force == force and v.player) then + achievement_system.nukedSelf(v.player); + end + if(cause and cause.valid) then + v.die(force, cause) + else + v.die(force) + end + elseif(cause and cause.valid) then + if not v.die(force, cause) then + v.destroy{raise_destroy = true}; + end + else + if not v.die(force) then + v.destroy{raise_destroy = true}; + end + end + end + end +end + +local function partial_fireball(surface_index, chunkLoaderStruct, chunkPosAndArea, originPos, x, y, killPlanes, force, cause, corpseMap) + + local entities = game.surfaces[surface_index].find_entities_filtered{area = chunkPosAndArea.area} + local fireballSq = chunkLoaderStruct.fireball_r*chunkLoaderStruct.fireball_r; + for _,e in pairs(entities) do + if(e.valid and (not (string.match(e.type, "ghost"))) and ((e.type ~= "resource") and (killPlanes or (e.type ~= "car"))) + and --e.position.x>=x and e.position.x=y and e.position.y=x and e.position.x=y and e.position.y=1000000) then + fireShield = e; + break; + end + end + if fireShield then + fireShield.energy = fireShield.energy-1000000 + else + surface.create_entity{name="fire-sticker", position=ePos, target=v} + end + end + else + if(((not eProto.resistances) or not eProto.resistances.fire) and v.health>damage) then + v.health = v.health-damage + elseif(eProto.resistances and eProto.resistances.fire and v.health>(damage-eProto.resistances.fire.decrease)*(1-eProto.resistances.fire.percent)) then + v.health = v.health-(damage-eProto.resistances.fire.decrease)*(1-eProto.resistances.fire.percent) + else + if(corpseMap[v.name]) then + local corpseName = corpseMap[v.name] + --local ghost + --if(eProto.create_ghost_on_death or eProto.create_ghost_on_death == nil) then + -- ghost = {inner_name = v.name, name = "entity-ghost", direction = v.direction, expires = true, force = v.force, position = v.position} + -- if(v.type == "assembling-machine" and v.get_recipe()) then + -- ghost.recipe = v.get_recipe().name + -- end + --end + v.destroy{raise_destroy = true} + surface.create_entity{name=corpseName, position=ePos} + --if(eProto.create_ghost_on_death or eProto.create_ghost_on_death == nil) then + -- surface.create_entity(ghost) + --end + else + if(cause and cause.valid) then + v.damage(damage, force, "fire", cause) + else + v.damage(damage, force, "fire") + end + end + end + end + end +end + + + + + +local function atomic_thermal_blast_internal(surface_index, position, force, cause, thermal_max_r, initialDamage, fireball_r, initial_x, initial_y, corpseMap) + -- do thermal heat-wave damage + local thermSq = thermal_max_r*thermal_max_r; + local fireballSq = fireball_r*fireball_r; + local surface = game.surfaces[surface_index] + local areas = {} + local y = -1; + local x = -1; + if(thermal_max_r<500) then + areas = {{{position.x-thermal_max_r, position.y-thermal_max_r}, {position.x+thermal_max_r, position.y+thermal_max_r}}} + else + local i = 0; + y = initial_y; + x = initial_x; + local distSq1 + local distSq2 + local distSq3 + local distSq4 + while(y+100<=position.y+thermal_max_r) do + initial_x = position.x-thermal_max_r; + while(x+100<=position.x +thermal_max_r) do + distSq1 = (x-position.x)*(x-position.x) +(y-position.y)*(y-position.y) + distSq2 = (x+100-position.x)*(x+100-position.x)+(y-position.y)*(y-position.y) + distSq3 = (x-position.x)*(x-position.x) +(y+100-position.y)*(y+100-position.y) + distSq4 = (x+100-position.x)*(x+100-position.x)+(y+100-position.y)*(y+100-position.y) + if(distSq1=100) then + break; + end + end + if(i<100 and y ~= position.y +thermal_max_r) then + while(x+100<=position.x +thermal_max_r) do + if(distSq1fireballSq and v.prototype.max_health ~= 0 + and ePos.x>=a[1][1] and ePos.x=a[1][2] and ePos.yfireballSq and v.prototype.max_health ~= 0 + and ePos.x>=x and ePos.x=y and ePos.y 53) then + global.cratersFastItterationCount = 1 + end + for surface,chunks in pairs(global.cratersFast) do + if(not game.surfaces[surface]) then + global.cratersFast[surface] = nil; + else + global.cratersFastData[surface].synch = global.cratersFastData[surface].synch+1 + if(global.cratersFastData[surface].synch == 5) then + global.cratersFastData[surface].synch = 1 + end + if(global.cratersFastItterationCount == 1) then + global.cratersFastData[surface].xCountSoFar = 0 + global.cratersFastData[surface].xDone = {} + end + for x,xchunks in pairs(chunks) do + if(global.cratersFastData[surface].xDone[x]==nil) then --ignore all the ones we have already done + if(global.cratersFastData[surface].xCountSoFar > global.cratersFastData[surface].xCount*global.cratersFastItterationCount/53) then + break; + end + global.cratersFastData[surface].xDone[x] = 1 + global.cratersFastData[surface].xCountSoFar = global.cratersFastData[surface].xCountSoFar + 1 + local count = 0; + for y,foundChunkH in pairs(xchunks) do + local tileChanges = {} + local ghostChanges = {} + + local targetTiles + local chunkH = foundChunkH + + if(chunkH >= 0 and global.cratersFastData[surface].synch==1) then + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*8, y*8}, {x*8+8, y*8+8}}, name=craterTypes0} + elseif(chunkH >= -1 and (global.cratersFastData[surface].synch == 3 or global.cratersFastData[surface].synch == 1)) then + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*8, y*8}, {x*8+8, y*8+8}}, name=craterTypes1} + else + targetTiles = game.surfaces[surface].find_tiles_filtered{area={{x*8, y*8}, {x*8+8, y*8+8}}, name=craterTypes2} + end + if(#targetTiles>0) then + count = count+1; + local relevantTiles = game.surfaces[surface].find_tiles_filtered{area={{x*8-1, y*8-1}, {x*8+9, y*8+9}}, name=waterTypes} + + local tileH = {} + local existsChunks = {}; + if(existsChunks[math.floor(x/4)] == nil) then + existsChunks[math.floor(x/4)] = {} + end + existsChunks[math.floor(x/4)][math.floor(y/4)] = game.surfaces[surface].is_chunk_generated({math.floor(x/4), math.floor(y/4)}); + existsChunks[math.floor(x/4)][math.floor((y+1)/4)] = game.surfaces[surface].is_chunk_generated({math.floor(x/4), math.floor((y+1)/4)}); + existsChunks[math.floor(x/4)][math.floor((y-1)/4)] = game.surfaces[surface].is_chunk_generated({math.floor(x/4), math.floor((y-1)/4)}); + + if(existsChunks[math.floor((x-1)/4)] == nil) then + existsChunks[math.floor((x-1)/4)] = {} + end + existsChunks[math.floor((x-1)/4)][math.floor(y/4)] = game.surfaces[surface].is_chunk_generated({math.floor((x-1)/4), math.floor(y/4)}); + + if(existsChunks[math.floor((x+1)/4)] == nil) then + existsChunks[math.floor((x+1)/4)] = {} + end + existsChunks[math.floor((x+1)/4)][math.floor(y/4)] = game.surfaces[surface].is_chunk_generated({math.floor((x+1)/4), math.floor(y/4)}); + + + + for _,t in pairs(relevantTiles) do + if(tileH[t.position.x] == nil) then + tileH[t.position.x] = {} + end + if(existsChunks[math.floor(t.position.x/32)][math.floor(t.position.y/32)]) then + tileH[t.position.x][t.position.y] = waterInCraterGoingOutDepths[t.name]; + end + end + local hasHeightDiff = false; + for _,t in pairs(targetTiles) do + local heightDiff = 0; + local currentH = waterInCraterGoingInDepths[t.name]; + chunkH = math.max(chunkH, currentH) + local h1 + local h2 + if(tileH[t.position.x] ~=nil) then + h1 = tileH[t.position.x][t.position.y+1]; + h2 = tileH[t.position.x][t.position.y-1]; + end + + local h3 + if(tileH[t.position.x+1] ~=nil) then + h3 = tileH[t.position.x+1][t.position.y]; + end + local h4 + if(tileH[t.position.x-1] ~=nil) then + h4 = tileH[t.position.x-1][t.position.y]; + end + + if((not (h1 == nil)) and h1>currentH)then + heightDiff = heightDiff+h1-currentH; + chunkH = math.max(chunkH, h1) + end + if((not (h2 == nil)) and h2>currentH)then + heightDiff = heightDiff+h2-currentH; + chunkH = math.max(chunkH, h2) + end + if((not (h3 == nil)) and h3>currentH)then + heightDiff = heightDiff+h3-currentH; + chunkH = math.max(chunkH, h3) + end + if((not (h4 == nil)) and h4>currentH)then + heightDiff = heightDiff+h4-currentH; + chunkH = math.max(chunkH, h4) + end + if(heightDiff>0) then + hasHeightDiff = true; + end + if(heightDiff>0 and (heightDiff>=3 or math.random()*330) then + local target = nil + if not game.surfaces[chunk.surface] then + global.cratersSlow[index] = nil + elseif (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes2, limit = 1} == 0)) then + local prob = 128; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/8 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/4 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if(math.random(1, math.max(prob,2)) == 1) then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes2} + target = targets[math.random(1, #targets)] + end + elseif (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes1, limit = 1} == 0)) then + local prob = 512; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/32 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/16 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if(math.random(1, math.max(prob,2)) == 1) then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes1} + target = targets[math.random(1, #targets)] + end + elseif (not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes0, limit = 1} == 0)) then + local prob = 2048; + if(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/32 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth1Only, limit = 1} == 0)) then + prob = prob/4 + elseif(not (game.surfaces[chunk.surface].count_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + prob = prob/2 + end + prob = prob - math.floor((chunk.t-30)/3) + if math.random(1, math.max(prob,2)) == 1 then + local targets = game.surfaces[chunk.surface].find_tiles_filtered{area={{chunk.x*32, chunk.y*32}, {chunk.x*32+32, chunk.y*32+32}}, name = craterTypes0} + target = targets[math.random(1, #targets)] + end + else + global.cratersSlow[index] = nil + end + if not (target==nil) then + local h = waterInCraterGoingInDepths[target.name]+1 + local pos = target.position; + + -- ensure we preserve ghosts, e.g. landfill + local tileGhosts = {} + for _,t in pairs(game.surfaces[chunk.surface].find_entities_filtered{position = {pos.x+0.5, pos.y+0.5}, name = "tile-ghost"}) do + table.insert(tileGhosts, {ghost_name = t.ghost_name, force = t.force}) + end + game.surfaces[chunk.surface].set_tiles({{name = depthsForCraterWater[waterDepths[target.name]][h], position = pos}}); + for _,t in pairs(tileGhosts) do + game.surfaces[chunk.surface].create_entity{name="tile-ghost",position={pos.x+0.5, pos.y+0.5},inner_name=t.ghost_name,force=t.force} + end + + if(global.cratersFast[chunk.surface]==nil)then + global.cratersFast[chunk.surface] = {} + global.cratersFastData[chunk.surface] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + local xChunkPos = math.floor(pos.x/8) + if(global.cratersFast[chunk.surface][xChunkPos]==nil)then + global.cratersFast[chunk.surface][xChunkPos] = {} + global.cratersFastData[chunk.surface].xCount = global.cratersFastData[chunk.surface].xCount + 1 + end + if(global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/8)] == nil) then + global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/8)] = h + else + global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/8)] = math.max(global.cratersFast[chunk.surface][xChunkPos][math.floor((pos.y)/8)], h) + end + end + end + end +end + +local function check_fill(surface_index, chunkPosAndArea, x, y) + if (not (game.surfaces[surface_index].count_tiles_filtered{ + area={{x=chunkPosAndArea.area.left_top.x+1, y=chunkPosAndArea.area.left_top.y+1},{x=chunkPosAndArea.area.right_bottom.x-1, y=chunkPosAndArea.area.right_bottom.y-1}}, name = craterTypes0, limit = 1 + } == 0)) then + table.insert(global.cratersSlow, {t = 0, x = chunkPosAndArea.x, y = chunkPosAndArea.y, surface = surface_index}); + for xChunkPos = 0,4 do + for yChunkPos = 0,4 do + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{x+xChunkPos*8, y+yChunkPos*8}, {x+xChunkPos*8+8, y+yChunkPos*8+8}}, name = waterTypes, limit = 1} == 0)) and + (not (game.surfaces[surface_index].count_tiles_filtered{area={{x+xChunkPos*8, y+yChunkPos*8}, {x+xChunkPos*8+8, y+yChunkPos*8+8}}, name = craterTypes0, limit = 1} == 0)) then + local height = -2; + if (not (game.surfaces[surface_index].count_tiles_filtered{area={{x+xChunkPos*8, y+yChunkPos*8}, {x+xChunkPos*8+8, y+yChunkPos*8+8}}, name = waterInCraterGoingOutDepth0Only, limit = 1} == 0)) then + height = 0; + end + -- have both water and crater + if(global.cratersFast[surface_index]==nil)then + global.cratersFast[surface_index] = {} + global.cratersFastData[surface_index] = {synch = 0, xCount = 0, xCountSoFar = 0, xDone = {}} + end + if(global.cratersFast[surface_index][chunkPosAndArea.x*4+xChunkPos]==nil)then + global.cratersFast[surface_index][chunkPosAndArea.x*4+xChunkPos] = {} + global.cratersFastData[surface_index].xCount = global.cratersFastData[surface_index].xCount + 1 + end + global.cratersFast[surface_index][chunkPosAndArea.x*4+xChunkPos][chunkPosAndArea.y*4+yChunkPos] = height + end + end + end + end +end +return { + waterAndCraterTypes = waterAndCraterTypes, + waterTypes = waterTypes, + craterTypes0 = craterTypes0, + craterTypes1 = craterTypes1, + craterTypes2 = craterTypes2, + waterDepths = waterDepths, + waterInCraterGoingOutDepths = waterInCraterGoingOutDepths, + waterInCraterGoingOutDepth0Only = waterInCraterGoingOutDepth0Only, + waterInCraterGoingOutDepth1Only = waterInCraterGoingOutDepth1Only, + waterInCraterGoingOutDepth2Only = waterInCraterGoingOutDepth2Only, + waterInCraterGoingInDepths = waterInCraterGoingInDepths, + depthsForCrater = depthsForCrater, + depthsForCraterWater = depthsForCraterWater, + fastFill = fastFill, + slowFill = slowFill, + check_fill = check_fill +} diff --git a/True-Nukes/settings.lua b/True-Nukes/settings.lua new file mode 100644 index 00000000..aa961d14 --- /dev/null +++ b/True-Nukes/settings.lua @@ -0,0 +1,325 @@ +data:extend({ + { + type = "bool-setting", + name = "nuke-random-fires", + setting_type = "runtime-global", + default_value = true, + order = "a1" + }, + { + type = "bool-setting", + name = "nuke-crater-noise", + setting_type = "runtime-global", + default_value = true, + order = "a2" + }, + { + type = "bool-setting", + name = "destroy-resources-in-crater", + setting_type = "runtime-global", + default_value = true, + order = "a4" + }, + { + type = "bool-setting", + name = "nukes-cause-pollution", + setting_type = "runtime-global", + default_value = true, + order = "a5" + }, + { + type = "double-setting", + name = "large-nuke-fire-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 5, + default_value = 1, + order = "b0" + }, + { + type = "double-setting", + name = "huge-nuke-fire-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 10, + default_value = 2, + order = "b1" + }, + { + type = "double-setting", + name = "really-huge-nuke-fire-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 20, + default_value = 5, + order = "b2" + }, + { + type = "double-setting", + name = "large-nuke-range-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 4, + default_value = 1.5, + order = "c0" + }, + { + type = "double-setting", + name = "huge-nuke-range-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 4, + default_value = 1.5, + order = "c1" + }, + { + type = "double-setting", + name = "really-huge-nuke-range-scaledown", + setting_type = "runtime-global", + minimum_value = 1, + maximum_value = 4, + default_value = 1.5, + order = "c2" + }, + { + type = "bool-setting", + name = "optimise-100kt", + setting_type = "runtime-global", + default_value = true, + order = "c4" + }, + { + type = "bool-setting", + name = "actually-generate-crater", + setting_type = "runtime-global", + default_value = true, + order = "c5" + }, + + + { + type = "string-setting", + name = "small-boom-material", + setting_type = "startup", + default_value = "mod-dependant", + allowed_values = {"same-as-boom","true-nukes-default", "mod-dependant", "custom"}, + order = "b0" + }, + { + type = "string-setting", + name = "small-boom-material-name", + setting_type = "startup", + default_value = "californium", + order = "b1" + }, + { + type = "string-setting", + name = "boom-material", + setting_type = "startup", + default_value = "mod-dependant", + allowed_values = { "true-nukes-default", "mod-dependant", "custom"}, + order = "b2" + }, + { + type = "string-setting", + name = "boom-material-name", + setting_type = "startup", + default_value = "uranium-235", + order = "b3" + }, + { + type = "string-setting", + name = "dead-material", + setting_type = "startup", + default_value = "mod-dependant", + allowed_values = { "default", "mod-dependant", "custom"}, + order = "b4" + }, + { + type = "string-setting", + name = "dead-material-name", + setting_type = "startup", + default_value = "uranium-238", + order = "b5" + }, + { + type = "string-setting", + name = "computer-material", + setting_type = "startup", + default_value = "mod-dependant", + allowed_values = {"true-nukes-default", "mod-dependant", "custom"}, + order = "b6" + }, + { + type = "string-setting", + name = "computer-material-name", + setting_type = "startup", + default_value = "processing-unit", + order = "b7" + }, + { + type = "string-setting", + name = "light-material", + setting_type = "startup", + default_value = "mod-dependant", + allowed_values = {"true-nukes-default", "mod-dependant", "custom"}, + order = "b8" + }, + { + type = "string-setting", + name = "light-material-name", + setting_type = "startup", + default_value = "low-density-structure", + order = "b9" + }, + + { + type = "bool-setting", + name = "enable-menu-backgrounds", + setting_type = "startup", + default_value = true, + order = "e0" + }, + + { + type = "bool-setting", + name = "enable-small-thermobarics", + setting_type = "startup", + default_value = true, + order = "f0" + }, + { + type = "bool-setting", + name = "enable-medium-thermobarics", + setting_type = "startup", + default_value = true, + order = "f1" + }, + { + type = "bool-setting", + name = "enable-large-thermobarics", + setting_type = "startup", + default_value = true, + order = "f2" + }, + + { + type = "bool-setting", + name = "enable-small-atomics", + setting_type = "startup", + default_value = true, + order = "f3" + }, + { + type = "bool-setting", + name = "enable-compact-small-atomics", + setting_type = "startup", + default_value = true, + order = "f4" + }, + + { + type = "bool-setting", + name = "enable-medium-atomics", + setting_type = "startup", + default_value = true, + order = "f5" + }, + { + type = "bool-setting", + name = "enable-compact-medium-atomics", + setting_type = "startup", + default_value = true, + order = "f6" + }, + + { + type = "bool-setting", + name = "enable-large-atomics", + setting_type = "startup", + default_value = true, + order = "f7" + }, + + { + type = "bool-setting", + name = "enable-compact-large-atomics", + setting_type = "startup", + default_value = true, + order = "f8" + }, + { + type = "bool-setting", + name = "enable-15kt", + setting_type = "startup", + default_value = true, + order = "f9" + }, + { + type = "bool-setting", + name = "enable-compact-15kt", + setting_type = "startup", + default_value = true, + order = "fa" + }, + { + type = "bool-setting", + name = "enable-fusion", + setting_type = "startup", + default_value = true, + order = "fc" + }, + + { + type = "bool-setting", + name = "enable-compact-fusion", + setting_type = "startup", + default_value = true, + order = "fd" + }, + { + type = "bool-setting", + name = "enable-big-fusion-weapons", + setting_type = "startup", + default_value = true, + order = "fh" + }, + { + type = "bool-setting", + name = "enable-nuclear-tests", + setting_type = "startup", + default_value = true, + order = "fg" + }, + { + type = "bool-setting", + name = "enable-fusion-building", + setting_type = "startup", + default_value = true, + order = "fk" + }, + + { + type = "bool-setting", + name = "enable-fire-shield", + setting_type = "startup", + default_value = true, + order = "fm" + }, + + { + type = "bool-setting", + name = "keep-atomic-bomb-without-changes", + setting_type = "startup", + default_value = false, + order = "fo" + }, + + { + type = "bool-setting", + name = "TN-mushroom-cloud-style-nuclear-flash", + setting_type = "runtime-per-user", + default_value = true, + order = "a0", + } +}) diff --git a/True-Nukes/thumbnail.png b/True-Nukes/thumbnail.png new file mode 100644 index 00000000..fa7d33d1 Binary files /dev/null and b/True-Nukes/thumbnail.png differ diff --git a/True-Nukes_0.3.33.zip b/True-Nukes_0.3.33.zip deleted file mode 100644 index 82b0b154..00000000 Binary files a/True-Nukes_0.3.33.zip and /dev/null differ diff --git a/UnPollock_1.1.0/changelog.txt b/UnPollock/changelog.txt similarity index 100% rename from UnPollock_1.1.0/changelog.txt rename to UnPollock/changelog.txt diff --git a/UnPollock_1.1.0/data-updates.lua b/UnPollock/data-updates.lua similarity index 100% rename from UnPollock_1.1.0/data-updates.lua rename to UnPollock/data-updates.lua diff --git a/UnPollock_1.1.0/info.json b/UnPollock/info.json similarity index 100% rename from UnPollock_1.1.0/info.json rename to UnPollock/info.json diff --git a/UnPollock_1.1.0/locale/en/settings.cfg b/UnPollock/locale/en/settings.cfg similarity index 100% rename from UnPollock_1.1.0/locale/en/settings.cfg rename to UnPollock/locale/en/settings.cfg diff --git a/UnPollock_1.1.0/settings.lua b/UnPollock/settings.lua similarity index 100% rename from UnPollock_1.1.0/settings.lua rename to UnPollock/settings.lua diff --git a/UnPollock_1.1.0/thumbnail.png b/UnPollock/thumbnail.png similarity index 100% rename from UnPollock_1.1.0/thumbnail.png rename to UnPollock/thumbnail.png diff --git a/UnminableBots_1.0.0/License.md b/UnminableBots/License.md similarity index 100% rename from UnminableBots_1.0.0/License.md rename to UnminableBots/License.md diff --git a/UnminableBots_1.0.0/changelog.txt b/UnminableBots/changelog.txt similarity index 100% rename from UnminableBots_1.0.0/changelog.txt rename to UnminableBots/changelog.txt diff --git a/UnminableBots_1.0.0/data-final-fixes.lua b/UnminableBots/data-final-fixes.lua similarity index 100% rename from UnminableBots_1.0.0/data-final-fixes.lua rename to UnminableBots/data-final-fixes.lua diff --git a/UnminableBots_1.0.0/info.json b/UnminableBots/info.json similarity index 100% rename from UnminableBots_1.0.0/info.json rename to UnminableBots/info.json diff --git a/UnminableBots_1.0.0/locale/en/settings.cfg b/UnminableBots/locale/en/settings.cfg similarity index 100% rename from UnminableBots_1.0.0/locale/en/settings.cfg rename to UnminableBots/locale/en/settings.cfg diff --git a/UnminableBots_1.0.0/settings.lua b/UnminableBots/settings.lua similarity index 100% rename from UnminableBots_1.0.0/settings.lua rename to UnminableBots/settings.lua diff --git a/UnminableBots_1.0.0/thumbnail.png b/UnminableBots/thumbnail.png similarity index 100% rename from UnminableBots_1.0.0/thumbnail.png rename to UnminableBots/thumbnail.png diff --git a/VehicleSnap/changelog.txt b/VehicleSnap/changelog.txt new file mode 100644 index 00000000..4f61b34b --- /dev/null +++ b/VehicleSnap/changelog.txt @@ -0,0 +1,133 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.18.4 +Date: 25. 11. 2020 + Update: + - Factorio 1.1 update. +--------------------------------------------------------------------------------------------------- +Version: 1.18.3 +Date: 24. 5. 2020 + Changes: + - Input consuming set to "none". + Added: + - New translations: ca, fr, uk and fi. +--------------------------------------------------------------------------------------------------- +Version: 1.18.2 +Date: 30. 4. 2020 + Bugfixes: + - Fixed startup error after 0.18.22, thanks Soggs. +--------------------------------------------------------------------------------------------------- +Version: 1.18.1 +Date: 28. 3. 2020 + Added: + - Polish translation by VrozaX. +--------------------------------------------------------------------------------------------------- +Version: 1.18.0 +Date: 21. 1. 2020 + Changes: + - Factorio 0.18 update. +--------------------------------------------------------------------------------------------------- +Version: 1.17.3 +Date: 30. 4. 2019 + Changed: + - Quickbar tooltip includes key shortcut. +--------------------------------------------------------------------------------------------------- +Version: 1.17.2 +Date: 30. 4. 2019 + Added: + - Toggleable icon to quickbar. +--------------------------------------------------------------------------------------------------- +Version: 1.17.1 +Date: 15. 3. 2019 + Bugfixes: + - Added vehicle null check for potential crash fix. + Changes: + - Moved changelog to this mod-portal compatible textfile. +--------------------------------------------------------------------------------------------------- +Version: 1.17.0 +Date: 26. 2. 2019 + Update: + - Factorio 0.17 update. +--------------------------------------------------------------------------------------------------- +Version: 1.16.4 +Date: 2. 12. 2018 + Bugfixes: + - Crash fix when player is killed via script and inside vehicle. +--------------------------------------------------------------------------------------------------- +Version: 1.16.3 +Date: 30. 11. 2018 + Bugfixes: + - Crash fix when other mod or script teleports player. + - Better check that player snap setting is being used. +--------------------------------------------------------------------------------------------------- +Version: 1.16.2 +Date: 18. 11. 2018 + Bugfixes: + - Multiplayer desync fixed? I cannot throughly test but it worked on dedicated server. +--------------------------------------------------------------------------------------------------- +Version: 1.16.1 +Date: 17. 11. 2018 + Major update: + - Per player snapping configuration in mod options at realtime. + - Visual notification when keybind is used to toggle it. + - Performance optimizations and heavy changes in code... + - Mod will completely detach onIdle when it can, leaving it to 0% cpu when nobody is in a vehicle. + - Now supports backwards driving too. + - New demo video at mod-portal. +--------------------------------------------------------------------------------------------------- +Version: 1.16.0 +Date: 14. 12. 2017 + Update: + - Updated info.json for 0.16. +--------------------------------------------------------------------------------------------------- +Version: 1.15.1 +Date: 2. 5. 2017 + Update: + - Some code optimizations and added new keybinding to turn snapping on/off, thanks to Nexela. +--------------------------------------------------------------------------------------------------- +Version: 1.15.0 +Date: 27. 4. 2017 + Update: + - Updated for Factorio 0.15 +--------------------------------------------------------------------------------------------------- +Version: 1.14.21 +Date: 16. 12. 2016 + Bugfixes: + - Fixed multiplayer compatibility even more with global table. +--------------------------------------------------------------------------------------------------- +Version: 1.14.1 +Date: 23. 11. 2016 + Changes: + - Idle performance greatly improved. + - Better multiplayer support with player-specific variables. +--------------------------------------------------------------------------------------------------- +Version: 1.14.0 +Date: 7. 9. 2016 + Update: + - Factorio 0.14 update. + - Changed version numbering. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 10. 7. 2016 + Update: + - Updated for Factorio 0.13 +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 28. 5. 2016 + Bugfixes: + - Fixed crash with trains. +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 24. 5. 2016 + Bugfixes: + - Hopefully fixed the bug of car sometimes getting stuck when collides. + - Now will only snap at higher speeds forward. +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 19. 5. 2016 + Changes: + - Multiplayer support. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 19. 5. 2016 + Update: + - The first release. diff --git a/VehicleSnap/control.lua b/VehicleSnap/control.lua new file mode 100644 index 00000000..59bbf13e --- /dev/null +++ b/VehicleSnap/control.lua @@ -0,0 +1,178 @@ +-- snap amount is the amount of different angles car can drive on, +-- (360 / vehiclesnap_amount) is the difference between 2 axis +-- car will slowly turn towards such angle axis +-- Default 16, recommended other tries 4, 8 or 32. + +-- You can change snapping amount and keybinds ingame in menus. + +local function OnOffText(value) + if value then return {"description.VehicleSnap_enable"} + else return {"description.VehicleSnap_disable"} end +end + +local function PlayerToggle(event) + local player = game.players[event.player_index] + global.players[event.player_index].snap = not global.players[event.player_index].snap + CheckDrivingState(player) + -- Create floating text at car position (auto-disappears after a couple of seconds) + player.surface.create_entity{ name = "flying-text", position = player.position, + text = OnOffText(global.players[event.player_index].snap) } + player.set_shortcut_toggled("VehicleSnap-shortcut", global.players[event.player_index].snap) +end + +script.on_event("VehicleSnap-toggle", PlayerToggle) + +-- This is ran everytime the game is changed (adding mods upgrading etc) and installed. +local function run_install() + global.players = global.players or {} + for i, player in (pairs(game.players)) do + --game.players[i].print("VehicleSnap installed") -- Debug + global.players[i] = global.players[i] or { + snap = true, + player_ticks = 0, + last_orientation = 0, + -- driving is only true if snapping is true and player is in a valid vehicle + driving = false, + moves = 0, + eff_moves = 0, -- Effective tile moves from last time period + snap_amount = 16 + } + local snap = settings.get_player_settings(player)["VehicleSnap_amount"].value + if snap ~= nil then + global.players[i].snap_amount = snap + end + + CheckDrivingState(player) + player.set_shortcut_toggled("VehicleSnap-shortcut", global.players[i].snap) + end + ToggleEvents(true) +end + +-- Any time a new player is created run this. +script.on_event(defines.events.on_player_created, function(event) + global.players[event.player_index] = { + snap = true, + player_ticks = 0, + last_orientation = 0, + driving = false, + moves = 0, + eff_moves = 0, + snap_amount = 16 + } + local snap = settings.get_player_settings(game.players[event.player_index])["VehicleSnap_amount"].value + if snap ~= nil then + global.players[event.player_index].snap_amount = snap + end +end) + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + if event.setting == "VehicleSnap_amount" then + local snap = settings.get_player_settings(game.players[event.player_index])["VehicleSnap_amount"].value + if snap ~= nil then + global.players[event.player_index].snap_amount = snap + end + end +end) + +function CheckDrivingState(player) + local pdata = global.players[player.index] + local driving = false + if player.vehicle and pdata.snap then -- and player.connected + driving = (player.vehicle.type == "car") + pdata.moves = 0 + pdata.eff_moves = 0 + pdata.snap_amount = pdata.snap_amount or 16 + end + pdata.driving = driving + ToggleEvents(true) +end + +script.on_event(defines.events.on_player_driving_changed_state, function(event) + CheckDrivingState(game.players[event.player_index]) +end) + +script.on_event(defines.events.on_player_died, function(event) + CheckDrivingState(game.players[event.player_index]) +end) + +local function onPlayerChangedPosition(event) + local pdata = global.players[event.player_index] + if pdata and pdata.driving then + pdata.moves = pdata.moves + 1 + + -- Debug player speed values + --local player = game.players[event.player_index] + --if player.vehicle then + -- player.surface.create_entity{ name = "flying-text", position = player.position, text = player.vehicle.speed } + --end + end +end + +local function onTick() + if game.tick % 2 == 0 then + local drivers = false + moveReset = (game.tick % 40 == 0) + for _, player in pairs(game.connected_players) do + local pdata = global.players[player.index] + if pdata.driving and pdata.snap then + if not player.vehicle then + -- Unexpected error happened, CAR NOT FOUND! + pdata.driving = false + else + drivers = true + if (pdata.eff_moves > 1) and (math.abs(player.vehicle.speed) > 0.03) then + local o = player.vehicle.orientation -- float value, the direction vehicle is facing + -- Has player turned vehicle? Don't push against, + -- so delay snapping a little with player_ticks + if math.abs(o - pdata.last_orientation) < 0.001 then + if pdata.player_ticks > 1 then + local snap_o = math.floor(o * pdata.snap_amount + 0.5) / pdata.snap_amount + -- Interpolate with 80% current and 20% target orientation + o = (o * 4.0 + snap_o) * 0.2 + player.vehicle.orientation = o + else + pdata.player_ticks = pdata.player_ticks + 1 + end + else + pdata.player_ticks = 0 + end + pdata.last_orientation = o + end + if moveReset then -- Counting tile changes, reset every 40 ticks + pdata.eff_moves = pdata.moves + pdata.moves = 0 + end + end + end + end + if not drivers then + ToggleEvents(false) + end + end +end + +function ToggleEvents(enable) + global.RegisterEvents = enable + if enable then + script.on_event(defines.events.on_tick, onTick) + script.on_event(defines.events.on_player_changed_position, onPlayerChangedPosition) + else + script.on_event(defines.events.on_tick, nil) + script.on_event(defines.events.on_player_changed_position, nil) + end +end + +script.on_init(run_install) +script.on_configuration_changed(run_install) + +script.on_load(function() + if global.RegisterEvents then + ToggleEvents(true) + end +end) + +script.on_event(defines.events.on_lua_shortcut, function(event) + if event.prototype_name == "VehicleSnap-shortcut" then + PlayerToggle(event) + end +end) \ No newline at end of file diff --git a/VehicleSnap_1.18.5/data.lua b/VehicleSnap/data.lua similarity index 100% rename from VehicleSnap_1.18.5/data.lua rename to VehicleSnap/data.lua diff --git a/VehicleSnap_1.18.5/graphics/icons/vehsnap-x32.png b/VehicleSnap/graphics/icons/vehsnap-x32.png similarity index 100% rename from VehicleSnap_1.18.5/graphics/icons/vehsnap-x32.png rename to VehicleSnap/graphics/icons/vehsnap-x32.png diff --git a/VehicleSnap/info.json b/VehicleSnap/info.json new file mode 100644 index 00000000..2d76ef60 --- /dev/null +++ b/VehicleSnap/info.json @@ -0,0 +1,9 @@ +{ + "name": "VehicleSnap", + "version": "1.18.5", + "title": "VehicleSnap", + "author": "Zaflis", + "homepage": "https://forums.factorio.com/viewtopic.php?f=92&t=25501", + "description": "Smoothly snaps movement angle when driving vehicles.", + "factorio_version": "1.1" +} diff --git a/VehicleSnap_1.18.5/locale/en/locale.cfg b/VehicleSnap/locale/en/locale.cfg similarity index 100% rename from VehicleSnap_1.18.5/locale/en/locale.cfg rename to VehicleSnap/locale/en/locale.cfg diff --git a/VehicleSnap_1.18.5/prototypes/shortcuts.lua b/VehicleSnap/prototypes/shortcuts.lua similarity index 100% rename from VehicleSnap_1.18.5/prototypes/shortcuts.lua rename to VehicleSnap/prototypes/shortcuts.lua diff --git a/VehicleSnap_1.18.5/settings.lua b/VehicleSnap/settings.lua similarity index 100% rename from VehicleSnap_1.18.5/settings.lua rename to VehicleSnap/settings.lua diff --git a/VehicleSnap_1.18.5/thumbnail.png b/VehicleSnap/thumbnail.png similarity index 100% rename from VehicleSnap_1.18.5/thumbnail.png rename to VehicleSnap/thumbnail.png diff --git a/VehicleSnap_1.18.5/changelog.txt b/VehicleSnap_1.18.5/changelog.txt deleted file mode 100644 index af342a8f..00000000 --- a/VehicleSnap_1.18.5/changelog.txt +++ /dev/null @@ -1,140 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.18.5 -Date: 2.3.2023 - Compatibility: - - Using Space Exploration universe explorer while driving a vehicle. The change is not SE-specific but if player goes into a non-character based controller mode while driving, the driving state is not disabled upon detecting a loss of vehicle. However no snapping happens if there is no vehicle. - Dependencies: - - Added Cardinal mod incompatible; it is a mod that does what VehicleSnap does in different way, there is no reason to load both and bad things could happen if you do. ---------------------------------------------------------------------------------------------------- -Version: 1.18.4 -Date: 25. 11. 2020 - Update: - - Factorio 1.1 update. ---------------------------------------------------------------------------------------------------- -Version: 1.18.3 -Date: 24. 5. 2020 - Changes: - - Input consuming set to "none". - Added: - - New translations: ca, fr, uk and fi. ---------------------------------------------------------------------------------------------------- -Version: 1.18.2 -Date: 30. 4. 2020 - Bugfixes: - - Fixed startup error after 0.18.22, thanks Soggs. ---------------------------------------------------------------------------------------------------- -Version: 1.18.1 -Date: 28. 3. 2020 - Added: - - Polish translation by VrozaX. ---------------------------------------------------------------------------------------------------- -Version: 1.18.0 -Date: 21. 1. 2020 - Changes: - - Factorio 0.18 update. ---------------------------------------------------------------------------------------------------- -Version: 1.17.3 -Date: 30. 4. 2019 - Changed: - - Quickbar tooltip includes key shortcut. ---------------------------------------------------------------------------------------------------- -Version: 1.17.2 -Date: 30. 4. 2019 - Added: - - Toggleable icon to quickbar. ---------------------------------------------------------------------------------------------------- -Version: 1.17.1 -Date: 15. 3. 2019 - Bugfixes: - - Added vehicle null check for potential crash fix. - Changes: - - Moved changelog to this mod-portal compatible textfile. ---------------------------------------------------------------------------------------------------- -Version: 1.17.0 -Date: 26. 2. 2019 - Update: - - Factorio 0.17 update. ---------------------------------------------------------------------------------------------------- -Version: 1.16.4 -Date: 2. 12. 2018 - Bugfixes: - - Crash fix when player is killed via script and inside vehicle. ---------------------------------------------------------------------------------------------------- -Version: 1.16.3 -Date: 30. 11. 2018 - Bugfixes: - - Crash fix when other mod or script teleports player. - - Better check that player snap setting is being used. ---------------------------------------------------------------------------------------------------- -Version: 1.16.2 -Date: 18. 11. 2018 - Bugfixes: - - Multiplayer desync fixed? I cannot throughly test but it worked on dedicated server. ---------------------------------------------------------------------------------------------------- -Version: 1.16.1 -Date: 17. 11. 2018 - Major update: - - Per player snapping configuration in mod options at realtime. - - Visual notification when keybind is used to toggle it. - - Performance optimizations and heavy changes in code... - - Mod will completely detach onIdle when it can, leaving it to 0% cpu when nobody is in a vehicle. - - Now supports backwards driving too. - - New demo video at mod-portal. ---------------------------------------------------------------------------------------------------- -Version: 1.16.0 -Date: 14. 12. 2017 - Update: - - Updated info.json for 0.16. ---------------------------------------------------------------------------------------------------- -Version: 1.15.1 -Date: 2. 5. 2017 - Update: - - Some code optimizations and added new keybinding to turn snapping on/off, thanks to Nexela. ---------------------------------------------------------------------------------------------------- -Version: 1.15.0 -Date: 27. 4. 2017 - Update: - - Updated for Factorio 0.15 ---------------------------------------------------------------------------------------------------- -Version: 1.14.21 -Date: 16. 12. 2016 - Bugfixes: - - Fixed multiplayer compatibility even more with global table. ---------------------------------------------------------------------------------------------------- -Version: 1.14.1 -Date: 23. 11. 2016 - Changes: - - Idle performance greatly improved. - - Better multiplayer support with player-specific variables. ---------------------------------------------------------------------------------------------------- -Version: 1.14.0 -Date: 7. 9. 2016 - Update: - - Factorio 0.14 update. - - Changed version numbering. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 10. 7. 2016 - Update: - - Updated for Factorio 0.13 ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 28. 5. 2016 - Bugfixes: - - Fixed crash with trains. ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 24. 5. 2016 - Bugfixes: - - Hopefully fixed the bug of car sometimes getting stuck when collides. - - Now will only snap at higher speeds forward. ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 19. 5. 2016 - Changes: - - Multiplayer support. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 19. 5. 2016 - Update: - - The first release. diff --git a/VehicleSnap_1.18.5/control.lua b/VehicleSnap_1.18.5/control.lua deleted file mode 100644 index 14b74124..00000000 --- a/VehicleSnap_1.18.5/control.lua +++ /dev/null @@ -1,182 +0,0 @@ --- Snap amount is the amount of different angles car aims to drive, --- (360 / vehiclesnap_amount) is the difference between each direction. --- Car will slowly turn towards such angle. --- Default amount is 16, recommended to try with other multiples of 4. --- You can change snapping amount and keybinds in ingame-menus. - -local function OnOffText(value) - if value then return {"description.VehicleSnap_enable"} - else return {"description.VehicleSnap_disable"} end -end - -local function PlayerToggle(event) - local player = game.players[event.player_index] - global.players[event.player_index].snap = not global.players[event.player_index].snap - CheckDrivingState(player) - -- Create floating text at car position (auto-disappears after a couple of seconds) - player.surface.create_entity{ name = "flying-text", position = player.position, - text = OnOffText(global.players[event.player_index].snap) } - player.set_shortcut_toggled("VehicleSnap-shortcut", global.players[event.player_index].snap) -end - -script.on_event("VehicleSnap-toggle", PlayerToggle) - --- This is ran everytime the game is changed (adding mods upgrading etc) and installed. -local function run_install() - global.players = global.players or {} - for i, player in (pairs(game.players)) do - --game.players[i].print("VehicleSnap installed") -- Debug - global.players[i] = global.players[i] or { - snap = true, - player_ticks = 0, - last_orientation = 0, - -- driving is only true if snapping is true and player is in a valid vehicle - driving = false, - moves = 0, - eff_moves = 0, -- Effective tile moves from last time period - snap_amount = 16 - } - local snap = settings.get_player_settings(player)["VehicleSnap_amount"].value - if snap ~= nil then - global.players[i].snap_amount = snap - end - - CheckDrivingState(player) - player.set_shortcut_toggled("VehicleSnap-shortcut", global.players[i].snap) - end - ToggleEvents(true) -end - --- Any time a new player is created run this. -script.on_event(defines.events.on_player_created, function(event) - global.players[event.player_index] = { - snap = true, - player_ticks = 0, - last_orientation = 0, - driving = false, - moves = 0, - eff_moves = 0, - snap_amount = 16 - } - local snap = settings.get_player_settings(game.players[event.player_index])["VehicleSnap_amount"].value - if snap ~= nil then - global.players[event.player_index].snap_amount = snap - end -end) - -script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - if event.setting == "VehicleSnap_amount" then - local snap = settings.get_player_settings(game.players[event.player_index])["VehicleSnap_amount"].value - if snap ~= nil then - global.players[event.player_index].snap_amount = snap - end - end -end) - -function CheckDrivingState(player) - local pdata = global.players[player.index] - local driving = false - if player.vehicle and pdata.snap then -- and player.connected - driving = (player.vehicle.type == "car") - pdata.moves = 0 - pdata.eff_moves = 0 - pdata.snap_amount = pdata.snap_amount or 16 - end - pdata.driving = driving - ToggleEvents(true) -end - -script.on_event(defines.events.on_player_driving_changed_state, function(event) - CheckDrivingState(game.players[event.player_index]) -end) - -script.on_event(defines.events.on_player_died, function(event) - CheckDrivingState(game.players[event.player_index]) -end) - -local function onPlayerChangedPosition(event) - local pdata = global.players[event.player_index] - if pdata and pdata.driving then - pdata.moves = pdata.moves + 1 - - -- Debug player speed values - --local player = game.players[event.player_index] - --if player.vehicle then - -- player.surface.create_entity{ name = "flying-text", position = player.position, text = player.vehicle.speed } - --end - end -end - -local function onTick() - if game.tick % 2 == 0 then - local drivers = false - moveReset = (game.tick % 40 == 0) - for _, player in pairs(game.connected_players) do - local pdata = global.players[player.index] - if pdata.driving and pdata.snap then - if not player.vehicle then - if player.controller_type == defines.controllers.character then - -- Use of Space Exploration navigation satellite changes controller to godmode, - -- after which it returns to car. - pdata.driving = false - else - drivers = true - end - else - drivers = true - if (pdata.eff_moves > 1) and (math.abs(player.vehicle.speed) > 0.03) then - local o = player.vehicle.orientation -- float value, the direction vehicle is facing - -- Has player turned vehicle? Don't push against, - -- so delay snapping a little with player_ticks - if math.abs(o - pdata.last_orientation) < 0.001 then - if pdata.player_ticks > 1 then - local snap_o = math.floor(o * pdata.snap_amount + 0.5) / pdata.snap_amount - -- Interpolate with 80% current and 20% target orientation - o = (o * 4.0 + snap_o) * 0.2 - player.vehicle.orientation = o - else - pdata.player_ticks = pdata.player_ticks + 1 - end - else - pdata.player_ticks = 0 - end - pdata.last_orientation = o - end - if moveReset then -- Counting tile changes, reset every 40 ticks - pdata.eff_moves = pdata.moves - pdata.moves = 0 - end - end - end - end - if not drivers then - ToggleEvents(false) - end - end -end - -function ToggleEvents(enable) - global.RegisterEvents = enable - if enable then - script.on_event(defines.events.on_tick, onTick) - script.on_event(defines.events.on_player_changed_position, onPlayerChangedPosition) - else - script.on_event(defines.events.on_tick, nil) - script.on_event(defines.events.on_player_changed_position, nil) - end -end - -script.on_init(run_install) -script.on_configuration_changed(run_install) - -script.on_load(function() - if global.RegisterEvents then - ToggleEvents(true) - end -end) - -script.on_event(defines.events.on_lua_shortcut, function(event) - if event.prototype_name == "VehicleSnap-shortcut" then - PlayerToggle(event) - end -end) \ No newline at end of file diff --git a/VehicleSnap_1.18.5/info.json b/VehicleSnap_1.18.5/info.json deleted file mode 100644 index 4eab438f..00000000 --- a/VehicleSnap_1.18.5/info.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "VehicleSnap", - "version": "1.18.5", - "title": "VehicleSnap", - "author": "Zaflis", - "homepage": "https://forums.factorio.com/viewtopic.php?f=92&t=25501", - "description": "Smoothly snaps movement angle when driving vehicles.", - "dependencies": [ "! cardinal" ], - "factorio_version": "1.1" -} diff --git a/Warehousing_0.5.7/CONTRIBUTING.md b/Warehousing/CONTRIBUTING.md similarity index 100% rename from Warehousing_0.5.7/CONTRIBUTING.md rename to Warehousing/CONTRIBUTING.md diff --git a/Warehousing_0.5.7/Readme.md b/Warehousing/Readme.md similarity index 100% rename from Warehousing_0.5.7/Readme.md rename to Warehousing/Readme.md diff --git a/Warehousing_0.5.7/changelog.txt b/Warehousing/changelog.txt similarity index 100% rename from Warehousing_0.5.7/changelog.txt rename to Warehousing/changelog.txt diff --git a/Warehousing_0.5.7/control.lua b/Warehousing/control.lua similarity index 100% rename from Warehousing_0.5.7/control.lua rename to Warehousing/control.lua diff --git a/Warehousing_0.5.7/data-final-fixes.lua b/Warehousing/data-final-fixes.lua similarity index 100% rename from Warehousing_0.5.7/data-final-fixes.lua rename to Warehousing/data-final-fixes.lua diff --git a/Warehousing_0.5.7/data.lua b/Warehousing/data.lua similarity index 100% rename from Warehousing_0.5.7/data.lua rename to Warehousing/data.lua diff --git a/Warehousing_0.5.7/graphics/entity/connector-shadow.png b/Warehousing/graphics/entity/connector-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/connector-shadow.png rename to Warehousing/graphics/entity/connector-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/connector.png b/Warehousing/graphics/entity/connector.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/connector.png rename to Warehousing/graphics/entity/connector.png diff --git a/Warehousing_0.5.7/graphics/entity/hr-connector-shadow.png b/Warehousing/graphics/entity/hr-connector-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/hr-connector-shadow.png rename to Warehousing/graphics/entity/hr-connector-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/hr-connector.png b/Warehousing/graphics/entity/hr-connector.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/hr-connector.png rename to Warehousing/graphics/entity/hr-connector.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-active-provider.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-active-provider.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-basic-shadow.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-basic-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-basic-shadow.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-basic-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-basic.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-basic.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-buffer.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-buffer.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-chest-anim.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-chest-anim.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-chest-anim.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-chest-anim.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-linked.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-linked.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-passive-provider.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-passive-provider.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-requester.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-requester.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-shadow.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-shadow.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-storage.png b/Warehousing/graphics/entity/storehouse/hr-storehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/hr-storehouse-storage.png rename to Warehousing/graphics/entity/storehouse/hr-storehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-active-provider.png b/Warehousing/graphics/entity/storehouse/storehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-active-provider.png rename to Warehousing/graphics/entity/storehouse/storehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-basic-shadow.png b/Warehousing/graphics/entity/storehouse/storehouse-basic-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-basic-shadow.png rename to Warehousing/graphics/entity/storehouse/storehouse-basic-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-basic.png b/Warehousing/graphics/entity/storehouse/storehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-basic.png rename to Warehousing/graphics/entity/storehouse/storehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-buffer.png b/Warehousing/graphics/entity/storehouse/storehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-buffer.png rename to Warehousing/graphics/entity/storehouse/storehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-chest-anim.png b/Warehousing/graphics/entity/storehouse/storehouse-chest-anim.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-chest-anim.png rename to Warehousing/graphics/entity/storehouse/storehouse-chest-anim.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-linked.png b/Warehousing/graphics/entity/storehouse/storehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-linked.png rename to Warehousing/graphics/entity/storehouse/storehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-passive-provider.png b/Warehousing/graphics/entity/storehouse/storehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-passive-provider.png rename to Warehousing/graphics/entity/storehouse/storehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-requester.png b/Warehousing/graphics/entity/storehouse/storehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-requester.png rename to Warehousing/graphics/entity/storehouse/storehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-shadow.png b/Warehousing/graphics/entity/storehouse/storehouse-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-shadow.png rename to Warehousing/graphics/entity/storehouse/storehouse-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/storehouse/storehouse-storage.png b/Warehousing/graphics/entity/storehouse/storehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/storehouse/storehouse-storage.png rename to Warehousing/graphics/entity/storehouse/storehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-active-provider.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-active-provider.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-basic-shadow.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-basic-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-basic-shadow.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-basic-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-basic.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-basic.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-buffer.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-buffer.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-chest-anim.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-chest-anim.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-chest-anim.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-chest-anim.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-linked.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-linked.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-passive-provider.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-passive-provider.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-requester.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-requester.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-shadow.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-shadow.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-storage.png b/Warehousing/graphics/entity/warehouse/hr-warehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/hr-warehouse-storage.png rename to Warehousing/graphics/entity/warehouse/hr-warehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-active-provider.png b/Warehousing/graphics/entity/warehouse/warehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-active-provider.png rename to Warehousing/graphics/entity/warehouse/warehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-basic-shadow.png b/Warehousing/graphics/entity/warehouse/warehouse-basic-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-basic-shadow.png rename to Warehousing/graphics/entity/warehouse/warehouse-basic-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-basic.png b/Warehousing/graphics/entity/warehouse/warehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-basic.png rename to Warehousing/graphics/entity/warehouse/warehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-buffer.png b/Warehousing/graphics/entity/warehouse/warehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-buffer.png rename to Warehousing/graphics/entity/warehouse/warehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-chest-anim.png b/Warehousing/graphics/entity/warehouse/warehouse-chest-anim.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-chest-anim.png rename to Warehousing/graphics/entity/warehouse/warehouse-chest-anim.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-linked.png b/Warehousing/graphics/entity/warehouse/warehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-linked.png rename to Warehousing/graphics/entity/warehouse/warehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-passive-provider.png b/Warehousing/graphics/entity/warehouse/warehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-passive-provider.png rename to Warehousing/graphics/entity/warehouse/warehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-requester.png b/Warehousing/graphics/entity/warehouse/warehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-requester.png rename to Warehousing/graphics/entity/warehouse/warehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-shadow.png b/Warehousing/graphics/entity/warehouse/warehouse-shadow.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-shadow.png rename to Warehousing/graphics/entity/warehouse/warehouse-shadow.png diff --git a/Warehousing_0.5.7/graphics/entity/warehouse/warehouse-storage.png b/Warehousing/graphics/entity/warehouse/warehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/entity/warehouse/warehouse-storage.png rename to Warehousing/graphics/entity/warehouse/warehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-active-provider.png b/Warehousing/graphics/icons/storehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-active-provider.png rename to Warehousing/graphics/icons/storehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-basic.png b/Warehousing/graphics/icons/storehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-basic.png rename to Warehousing/graphics/icons/storehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-buffer.png b/Warehousing/graphics/icons/storehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-buffer.png rename to Warehousing/graphics/icons/storehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-linked.png b/Warehousing/graphics/icons/storehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-linked.png rename to Warehousing/graphics/icons/storehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-passive-provider.png b/Warehousing/graphics/icons/storehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-passive-provider.png rename to Warehousing/graphics/icons/storehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-requester.png b/Warehousing/graphics/icons/storehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-requester.png rename to Warehousing/graphics/icons/storehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/icons/storehouse-storage.png b/Warehousing/graphics/icons/storehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/storehouse-storage.png rename to Warehousing/graphics/icons/storehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-active-provider.png b/Warehousing/graphics/icons/warehouse-active-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-active-provider.png rename to Warehousing/graphics/icons/warehouse-active-provider.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-basic.png b/Warehousing/graphics/icons/warehouse-basic.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-basic.png rename to Warehousing/graphics/icons/warehouse-basic.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-buffer.png b/Warehousing/graphics/icons/warehouse-buffer.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-buffer.png rename to Warehousing/graphics/icons/warehouse-buffer.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-linked.png b/Warehousing/graphics/icons/warehouse-linked.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-linked.png rename to Warehousing/graphics/icons/warehouse-linked.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-passive-provider.png b/Warehousing/graphics/icons/warehouse-passive-provider.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-passive-provider.png rename to Warehousing/graphics/icons/warehouse-passive-provider.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-requester.png b/Warehousing/graphics/icons/warehouse-requester.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-requester.png rename to Warehousing/graphics/icons/warehouse-requester.png diff --git a/Warehousing_0.5.7/graphics/icons/warehouse-storage.png b/Warehousing/graphics/icons/warehouse-storage.png similarity index 100% rename from Warehousing_0.5.7/graphics/icons/warehouse-storage.png rename to Warehousing/graphics/icons/warehouse-storage.png diff --git a/Warehousing_0.5.7/graphics/research/warehouse-logistics-research-1.png b/Warehousing/graphics/research/warehouse-logistics-research-1.png similarity index 100% rename from Warehousing_0.5.7/graphics/research/warehouse-logistics-research-1.png rename to Warehousing/graphics/research/warehouse-logistics-research-1.png diff --git a/Warehousing_0.5.7/graphics/research/warehouse-logistics-research-2.png b/Warehousing/graphics/research/warehouse-logistics-research-2.png similarity index 100% rename from Warehousing_0.5.7/graphics/research/warehouse-logistics-research-2.png rename to Warehousing/graphics/research/warehouse-logistics-research-2.png diff --git a/Warehousing_0.5.7/graphics/research/warehouse-research.png b/Warehousing/graphics/research/warehouse-research.png similarity index 100% rename from Warehousing_0.5.7/graphics/research/warehouse-research.png rename to Warehousing/graphics/research/warehouse-research.png diff --git a/Warehousing_0.5.7/info.json b/Warehousing/info.json similarity index 100% rename from Warehousing_0.5.7/info.json rename to Warehousing/info.json diff --git a/Warehousing_0.5.7/locale/en/locale.cfg b/Warehousing/locale/en/locale.cfg similarity index 100% rename from Warehousing_0.5.7/locale/en/locale.cfg rename to Warehousing/locale/en/locale.cfg diff --git a/Warehousing_0.5.7/locale/ru/locale.cfg b/Warehousing/locale/ru/locale.cfg similarity index 100% rename from Warehousing_0.5.7/locale/ru/locale.cfg rename to Warehousing/locale/ru/locale.cfg diff --git a/Warehousing_0.5.7/migrations/Warehousing_0.0.1.lua b/Warehousing/migrations/Warehousing_0.0.1.lua similarity index 100% rename from Warehousing_0.5.7/migrations/Warehousing_0.0.1.lua rename to Warehousing/migrations/Warehousing_0.0.1.lua diff --git a/Warehousing_0.5.7/migrations/Warehousing_0.0.10.json b/Warehousing/migrations/Warehousing_0.0.10.json similarity index 100% rename from Warehousing_0.5.7/migrations/Warehousing_0.0.10.json rename to Warehousing/migrations/Warehousing_0.0.10.json diff --git a/Warehousing_0.5.7/migrations/Warehousing_0.0.8.lua b/Warehousing/migrations/Warehousing_0.0.8.lua similarity index 100% rename from Warehousing_0.5.7/migrations/Warehousing_0.0.8.lua rename to Warehousing/migrations/Warehousing_0.0.8.lua diff --git a/Warehousing_0.5.7/migrations/Warehousing_0.2.0.json b/Warehousing/migrations/Warehousing_0.2.0.json similarity index 100% rename from Warehousing_0.5.7/migrations/Warehousing_0.2.0.json rename to Warehousing/migrations/Warehousing_0.2.0.json diff --git a/Warehousing_0.5.7/migrations/Warehousing_0.2.0.lua b/Warehousing/migrations/Warehousing_0.2.0.lua similarity index 100% rename from Warehousing_0.5.7/migrations/Warehousing_0.2.0.lua rename to Warehousing/migrations/Warehousing_0.2.0.lua diff --git a/Warehousing_0.5.7/prototypes/entity.lua b/Warehousing/prototypes/entity.lua similarity index 100% rename from Warehousing_0.5.7/prototypes/entity.lua rename to Warehousing/prototypes/entity.lua diff --git a/Warehousing_0.5.7/prototypes/item.lua b/Warehousing/prototypes/item.lua similarity index 100% rename from Warehousing_0.5.7/prototypes/item.lua rename to Warehousing/prototypes/item.lua diff --git a/Warehousing_0.5.7/prototypes/recipe.lua b/Warehousing/prototypes/recipe.lua similarity index 100% rename from Warehousing_0.5.7/prototypes/recipe.lua rename to Warehousing/prototypes/recipe.lua diff --git a/Warehousing_0.5.7/prototypes/technology.lua b/Warehousing/prototypes/technology.lua similarity index 100% rename from Warehousing_0.5.7/prototypes/technology.lua rename to Warehousing/prototypes/technology.lua diff --git a/Warehousing_0.5.7/settings.lua b/Warehousing/settings.lua similarity index 100% rename from Warehousing_0.5.7/settings.lua rename to Warehousing/settings.lua diff --git a/Warehousing_0.5.7/thumbnail.png b/Warehousing/thumbnail.png similarity index 100% rename from Warehousing_0.5.7/thumbnail.png rename to Warehousing/thumbnail.png diff --git a/Warheads/changelog.txt b/Warheads/changelog.txt new file mode 100644 index 00000000..70f1e164 --- /dev/null +++ b/Warheads/changelog.txt @@ -0,0 +1,94 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.0.19 +Date: 2023-11-28 + Features: + - Added settings to disable weapon types +--------------------------------------------------------------------------------------------------- +Version: 0.0.18 +Date: 2023-11-06 + Features: + - Added artillery targetting remotes for SE weapons delivery cannons with warheads +--------------------------------------------------------------------------------------------------- +Version: 0.0.17 +Date: 2023-10-10 + Bugfixes: + - Fixed strange bug with Make Artillery Great Again and SE breaking thermobaric weapon delivery cannons +--------------------------------------------------------------------------------------------------- +Version: 0.0.16 +Date: 2023-08-23 + Bugfixes: + - Fixed circular dependancy - may be unstable. +--------------------------------------------------------------------------------------------------- +Version: 0.0.15 +Date: 2023-04-04 + Bugfixes: + - Fixed crash when Rampant arsenal and tracer-ammo are installed +--------------------------------------------------------------------------------------------------- +Version: 0.0.14 +Date: 2023-03-31 + Bugfixes: + - Fixed dots appearing on map behind artillery + Features: + - Added compatibility for Atomic_Overhaul + - Added compatibility for light artillery Balanced +--------------------------------------------------------------------------------------------------- +Version: 0.0.13 +Date: 2023-03-26 + Bugfixes: + - Added projectile.force_condition to warhead system +--------------------------------------------------------------------------------------------------- +Version: 0.0.12 +Date: 2023-01-14 + Features: + - Added weapontype for light artillery +--------------------------------------------------------------------------------------------------- +Version: 0.0.11 +Date: 2022-12-21 + Bugfixes: + - Added code to fix repeated recipe ingredients +--------------------------------------------------------------------------------------------------- +Version: 0.0.10 +Date: 2022-11-01 + Localisation: + - Added German translations +--------------------------------------------------------------------------------------------------- +Version: 0.0.9 +Date: 2022-09-29 + Bugfixes: + - Fixed crashes when technology tree is complex +--------------------------------------------------------------------------------------------------- +Version: 0.0.8 +Date: 2022-09-26 + Bugfixes: + - Fixed issues with ranges on weapons, and tank shells not firing where you want +--------------------------------------------------------------------------------------------------- +Version: 0.0.7 + Bugfixes: + - Fixed stream type weapons (such as mortars) +--------------------------------------------------------------------------------------------------- +Version: 0.0.6 + Bugfixes: + - Fixed incompatibility with K2 when realistic combat on. +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 + Bugfixes: + - Fixed incompatibility with K2 when realistic combat off. +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 + Bugfixes: + - Fixed unknown incompatibility crash. + Features: + - Support for Ironclad and Rampant mortars. +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 + Bugfixes: + - Fixed missing localisation for landmines (and projectiles). +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 + Bugfixes: + - Fixed incompatibility with K2 and IR2 enabled. +--------------------------------------------------------------------------------------------------- +Version: 0.0.1 + Features: + - Initial version + diff --git a/Warheads_0.0.17/data-updates.lua b/Warheads/data-updates.lua similarity index 100% rename from Warheads_0.0.17/data-updates.lua rename to Warheads/data-updates.lua diff --git a/Warheads_0.0.17/data.lua b/Warheads/data.lua similarity index 100% rename from Warheads_0.0.17/data.lua rename to Warheads/data.lua diff --git a/Warheads_0.0.17/docs/appearance.md b/Warheads/docs/appearance.md similarity index 100% rename from Warheads_0.0.17/docs/appearance.md rename to Warheads/docs/appearance.md diff --git a/Warheads_0.0.17/docs/general.md b/Warheads/docs/general.md similarity index 100% rename from Warheads_0.0.17/docs/general.md rename to Warheads/docs/general.md diff --git a/Warheads_0.0.17/docs/warhead.md b/Warheads/docs/warhead.md similarity index 100% rename from Warheads_0.0.17/docs/warhead.md rename to Warheads/docs/warhead.md diff --git a/Warheads_0.0.17/docs/weapontype.md b/Warheads/docs/weapontype.md similarity index 100% rename from Warheads_0.0.17/docs/weapontype.md rename to Warheads/docs/weapontype.md diff --git a/Warheads/graphics/artillery/artillery-map.png b/Warheads/graphics/artillery/artillery-map.png new file mode 100644 index 00000000..79ba407b Binary files /dev/null and b/Warheads/graphics/artillery/artillery-map.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-base.png b/Warheads/graphics/artillery/artillery-shell-base.png new file mode 100644 index 00000000..a5a1d51e Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-base.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-1-base-left.png b/Warheads/graphics/artillery/artillery-shell-ring-1-base-left.png new file mode 100644 index 00000000..d57e24a1 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-1-base-left.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png b/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png new file mode 100644 index 00000000..f0acf97f Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png.kra b/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png.kra new file mode 100644 index 00000000..4964c9e4 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-1-base-right.png.kra differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-1.png b/Warheads/graphics/artillery/artillery-shell-ring-1.png new file mode 100644 index 00000000..ffa4ff23 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-1.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-2-base-left.png b/Warheads/graphics/artillery/artillery-shell-ring-2-base-left.png new file mode 100644 index 00000000..02d47468 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-2-base-left.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png b/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png new file mode 100644 index 00000000..87e48ab9 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png.kra b/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png.kra new file mode 100644 index 00000000..1add10ad Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-2-base-right.png.kra differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-2.png b/Warheads/graphics/artillery/artillery-shell-ring-2.png new file mode 100644 index 00000000..59bef42c Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-2.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-fat-base-left.png b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-left.png new file mode 100644 index 00000000..a4d37050 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-left.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png new file mode 100644 index 00000000..f548ec79 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png.kra b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png.kra new file mode 100644 index 00000000..ac38e467 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-fat-base-right.png.kra differ diff --git a/Warheads/graphics/artillery/artillery-shell-ring-fat.png b/Warheads/graphics/artillery/artillery-shell-ring-fat.png new file mode 100644 index 00000000..f49d5873 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-ring-fat.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-tip.png b/Warheads/graphics/artillery/artillery-shell-tip.png new file mode 100644 index 00000000..2d1a4144 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-tip.png differ diff --git a/Warheads/graphics/artillery/artillery-shell-tip.png.kra b/Warheads/graphics/artillery/artillery-shell-tip.png.kra new file mode 100644 index 00000000..43ddf5d5 Binary files /dev/null and b/Warheads/graphics/artillery/artillery-shell-tip.png.kra differ diff --git a/Warheads/graphics/blank-64.png b/Warheads/graphics/blank-64.png new file mode 100644 index 00000000..99591944 Binary files /dev/null and b/Warheads/graphics/blank-64.png differ diff --git a/Warheads/graphics/cannon/cannon-shell-base-top.png b/Warheads/graphics/cannon/cannon-shell-base-top.png new file mode 100644 index 00000000..2a84e641 Binary files /dev/null and b/Warheads/graphics/cannon/cannon-shell-base-top.png differ diff --git a/Warheads/graphics/cannon/cannon-shell-base.png b/Warheads/graphics/cannon/cannon-shell-base.png new file mode 100644 index 00000000..b85e5232 Binary files /dev/null and b/Warheads/graphics/cannon/cannon-shell-base.png differ diff --git a/Warheads/graphics/cannon/cannon-shell-edge.png b/Warheads/graphics/cannon/cannon-shell-edge.png new file mode 100644 index 00000000..0f7c4ea7 Binary files /dev/null and b/Warheads/graphics/cannon/cannon-shell-edge.png differ diff --git a/Warheads/graphics/cannon/cannon-shell-tip.png b/Warheads/graphics/cannon/cannon-shell-tip.png new file mode 100644 index 00000000..1e006a38 Binary files /dev/null and b/Warheads/graphics/cannon/cannon-shell-tip.png differ diff --git a/Warheads/graphics/rockets/rocket-engine.png b/Warheads/graphics/rockets/rocket-engine.png new file mode 100644 index 00000000..4764d4d3 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-engine.png differ diff --git a/Warheads/graphics/rockets/rocket-fins.png b/Warheads/graphics/rockets/rocket-fins.png new file mode 100644 index 00000000..600d70cf Binary files /dev/null and b/Warheads/graphics/rockets/rocket-fins.png differ diff --git a/Warheads/graphics/rockets/rocket-ring-1-light.png b/Warheads/graphics/rockets/rocket-ring-1-light.png new file mode 100644 index 00000000..cd36ce27 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-ring-1-light.png differ diff --git a/Warheads/graphics/rockets/rocket-ring-1.png b/Warheads/graphics/rockets/rocket-ring-1.png new file mode 100644 index 00000000..519aee80 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-ring-1.png differ diff --git a/Warheads/graphics/rockets/rocket-ring-2-light.png b/Warheads/graphics/rockets/rocket-ring-2-light.png new file mode 100644 index 00000000..d28b943c Binary files /dev/null and b/Warheads/graphics/rockets/rocket-ring-2-light.png differ diff --git a/Warheads/graphics/rockets/rocket-ring-2.png b/Warheads/graphics/rockets/rocket-ring-2.png new file mode 100644 index 00000000..500df357 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-ring-2.png differ diff --git a/Warheads/graphics/rockets/rocket-ring-3.png b/Warheads/graphics/rockets/rocket-ring-3.png new file mode 100644 index 00000000..252cc693 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-ring-3.png differ diff --git a/Warheads/graphics/rockets/rocket-tip-light.png b/Warheads/graphics/rockets/rocket-tip-light.png new file mode 100644 index 00000000..dad0c319 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-tip-light.png differ diff --git a/Warheads/graphics/rockets/rocket-tip.png b/Warheads/graphics/rockets/rocket-tip.png new file mode 100644 index 00000000..7a2c8064 Binary files /dev/null and b/Warheads/graphics/rockets/rocket-tip.png differ diff --git a/Warheads/graphics/rockets/rocket.png b/Warheads/graphics/rockets/rocket.png new file mode 100644 index 00000000..90dfa58c Binary files /dev/null and b/Warheads/graphics/rockets/rocket.png differ diff --git a/Warheads/graphics/rounds/generic-rounds/rounds-blank.png b/Warheads/graphics/rounds/generic-rounds/rounds-blank.png new file mode 100644 index 00000000..d0c34e33 Binary files /dev/null and b/Warheads/graphics/rounds/generic-rounds/rounds-blank.png differ diff --git a/Warheads/graphics/rounds/generic-rounds/rounds-end.png b/Warheads/graphics/rounds/generic-rounds/rounds-end.png new file mode 100644 index 00000000..5cadc14f Binary files /dev/null and b/Warheads/graphics/rounds/generic-rounds/rounds-end.png differ diff --git a/Warheads/graphics/rounds/generic-rounds/rounds-middle.png b/Warheads/graphics/rounds/generic-rounds/rounds-middle.png new file mode 100644 index 00000000..c4eb11aa Binary files /dev/null and b/Warheads/graphics/rounds/generic-rounds/rounds-middle.png differ diff --git a/Warheads/graphics/shotgun/frag-top.png b/Warheads/graphics/shotgun/frag-top.png new file mode 100644 index 00000000..696d7778 Binary files /dev/null and b/Warheads/graphics/shotgun/frag-top.png differ diff --git a/Warheads/graphics/shotgun/piercing-shotgun-shell.png b/Warheads/graphics/shotgun/piercing-shotgun-shell.png new file mode 100644 index 00000000..7228c465 Binary files /dev/null and b/Warheads/graphics/shotgun/piercing-shotgun-shell.png differ diff --git a/Warheads/graphics/shotgun/piercing-top.png b/Warheads/graphics/shotgun/piercing-top.png new file mode 100644 index 00000000..84ca9ccd Binary files /dev/null and b/Warheads/graphics/shotgun/piercing-top.png differ diff --git a/Warheads/graphics/shotgun/shotgun-base.png b/Warheads/graphics/shotgun/shotgun-base.png new file mode 100644 index 00000000..e0491866 Binary files /dev/null and b/Warheads/graphics/shotgun/shotgun-base.png differ diff --git a/Warheads/graphics/shotgun/shotgun-shell-mask.png b/Warheads/graphics/shotgun/shotgun-shell-mask.png new file mode 100644 index 00000000..c6fb6020 Binary files /dev/null and b/Warheads/graphics/shotgun/shotgun-shell-mask.png differ diff --git a/Warheads/graphics/shotgun/shotgun-shell.png b/Warheads/graphics/shotgun/shotgun-shell.png new file mode 100644 index 00000000..a1391050 Binary files /dev/null and b/Warheads/graphics/shotgun/shotgun-shell.png differ diff --git a/Warheads/graphics/shotgun/shotgun-under.png b/Warheads/graphics/shotgun/shotgun-under.png new file mode 100644 index 00000000..e0086317 Binary files /dev/null and b/Warheads/graphics/shotgun/shotgun-under.png differ diff --git a/Warheads/graphics/warheads/can-1-body-1.png b/Warheads/graphics/warheads/can-1-body-1.png new file mode 100644 index 00000000..e7422fc7 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-1.png differ diff --git a/Warheads/graphics/warheads/can-1-body-2-final.png b/Warheads/graphics/warheads/can-1-body-2-final.png new file mode 100644 index 00000000..9edec005 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-2-final.png differ diff --git a/Warheads/graphics/warheads/can-1-body-2.png b/Warheads/graphics/warheads/can-1-body-2.png new file mode 100644 index 00000000..f54c9b18 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-2.png differ diff --git a/Warheads/graphics/warheads/can-1-body-3-final.png b/Warheads/graphics/warheads/can-1-body-3-final.png new file mode 100644 index 00000000..f37c960b Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-3-final.png differ diff --git a/Warheads/graphics/warheads/can-1-body-3.png b/Warheads/graphics/warheads/can-1-body-3.png new file mode 100644 index 00000000..5bf5d68a Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-3.png differ diff --git a/Warheads/graphics/warheads/can-1-body-4-final.png b/Warheads/graphics/warheads/can-1-body-4-final.png new file mode 100644 index 00000000..99658bfb Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-4-final.png differ diff --git a/Warheads/graphics/warheads/can-1-body-4.png b/Warheads/graphics/warheads/can-1-body-4.png new file mode 100644 index 00000000..756bfe5e Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-4.png differ diff --git a/Warheads/graphics/warheads/can-1-body-5.png b/Warheads/graphics/warheads/can-1-body-5.png new file mode 100644 index 00000000..3d5e9c60 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-5.png differ diff --git a/Warheads/graphics/warheads/can-1-body-6.png b/Warheads/graphics/warheads/can-1-body-6.png new file mode 100644 index 00000000..ce2e5c61 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-body-6.png differ diff --git a/Warheads/graphics/warheads/can-1-ring-1.png b/Warheads/graphics/warheads/can-1-ring-1.png new file mode 100644 index 00000000..656dc7c0 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-ring-1.png differ diff --git a/Warheads/graphics/warheads/can-1-ring-2.png b/Warheads/graphics/warheads/can-1-ring-2.png new file mode 100644 index 00000000..5f0fa788 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-ring-2.png differ diff --git a/Warheads/graphics/warheads/can-1-top.png b/Warheads/graphics/warheads/can-1-top.png new file mode 100644 index 00000000..88582ac3 Binary files /dev/null and b/Warheads/graphics/warheads/can-1-top.png differ diff --git a/Warheads/graphics/warheads/can-2-body-1.png b/Warheads/graphics/warheads/can-2-body-1.png new file mode 100644 index 00000000..e9581c4d Binary files /dev/null and b/Warheads/graphics/warheads/can-2-body-1.png differ diff --git a/Warheads/graphics/warheads/can-2-body-final.png b/Warheads/graphics/warheads/can-2-body-final.png new file mode 100644 index 00000000..1d796cb6 Binary files /dev/null and b/Warheads/graphics/warheads/can-2-body-final.png differ diff --git a/Warheads/graphics/warheads/can-2-ring-1.png b/Warheads/graphics/warheads/can-2-ring-1.png new file mode 100644 index 00000000..ab82003a Binary files /dev/null and b/Warheads/graphics/warheads/can-2-ring-1.png differ diff --git a/Warheads/graphics/warheads/can-3-body.png b/Warheads/graphics/warheads/can-3-body.png new file mode 100644 index 00000000..76558241 Binary files /dev/null and b/Warheads/graphics/warheads/can-3-body.png differ diff --git a/Warheads/graphics/warheads/can-3-final.png b/Warheads/graphics/warheads/can-3-final.png new file mode 100644 index 00000000..736a814e Binary files /dev/null and b/Warheads/graphics/warheads/can-3-final.png differ diff --git a/Warheads/graphics/warheads/can-3-ring.png b/Warheads/graphics/warheads/can-3-ring.png new file mode 100644 index 00000000..2d36a583 Binary files /dev/null and b/Warheads/graphics/warheads/can-3-ring.png differ diff --git a/Warheads/graphics/warheads/sphere-1-base.png b/Warheads/graphics/warheads/sphere-1-base.png new file mode 100644 index 00000000..a5e8fbdd Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-base.png differ diff --git a/Warheads/graphics/warheads/sphere-1-ring-part-1-light.png b/Warheads/graphics/warheads/sphere-1-ring-part-1-light.png new file mode 100644 index 00000000..98294fdc Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-ring-part-1-light.png differ diff --git a/Warheads/graphics/warheads/sphere-1-ring-part-1.png b/Warheads/graphics/warheads/sphere-1-ring-part-1.png new file mode 100644 index 00000000..553e2a0a Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-ring-part-1.png differ diff --git a/Warheads/graphics/warheads/sphere-1-ring-part-2-light.png b/Warheads/graphics/warheads/sphere-1-ring-part-2-light.png new file mode 100644 index 00000000..a914d838 Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-ring-part-2-light.png differ diff --git a/Warheads/graphics/warheads/sphere-1-ring-part-2.png b/Warheads/graphics/warheads/sphere-1-ring-part-2.png new file mode 100644 index 00000000..709b05de Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-ring-part-2.png differ diff --git a/Warheads/graphics/warheads/sphere-1-top-light.png b/Warheads/graphics/warheads/sphere-1-top-light.png new file mode 100644 index 00000000..5d0946c0 Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-top-light.png differ diff --git a/Warheads/graphics/warheads/sphere-1-top.png b/Warheads/graphics/warheads/sphere-1-top.png new file mode 100644 index 00000000..4eb72a52 Binary files /dev/null and b/Warheads/graphics/warheads/sphere-1-top.png differ diff --git a/Warheads/graphics/warheads/warhead-ideas/core-big-light.png b/Warheads/graphics/warheads/warhead-ideas/core-big-light.png new file mode 100644 index 00000000..9c3789a0 Binary files /dev/null and b/Warheads/graphics/warheads/warhead-ideas/core-big-light.png differ diff --git a/Warheads/graphics/warheads/warhead-ideas/core-big.png b/Warheads/graphics/warheads/warhead-ideas/core-big.png new file mode 100644 index 00000000..2dceb5bd Binary files /dev/null and b/Warheads/graphics/warheads/warhead-ideas/core-big.png differ diff --git a/Warheads/info.json b/Warheads/info.json new file mode 100644 index 00000000..258b6ede --- /dev/null +++ b/Warheads/info.json @@ -0,0 +1,20 @@ +{ + "name": "Warheads", + "version": "0.0.19", + "title": "Warheads", + "author": "BicycleEater", + "description": "Acts as a super-cross mod for weapons, allowing mods adding warheads to avoid working to support every different mod.", + "homepage": "https://github.com/More-Wrong/Factorio-True-Nukes", + "factorio_version": "1.1", + "dependencies": [ + "? SchallTankPlatoon", + "? bobwarfare", + "? space-exploration", + "? Krastorio2", + "? RampantArsenal", + "? aai-vehicles-ironclad", + "? lightArtillery", + "? lightArtillery-Balanced" + ] +} + diff --git a/Warheads/locale/de/locale.cfg b/Warheads/locale/de/locale.cfg new file mode 100644 index 00000000..4162a1e7 --- /dev/null +++ b/Warheads/locale/de/locale.cfg @@ -0,0 +1,91 @@ +[warhead-name] + +-incendiary-STP-small=Kleiner Brandsprengkopf +-incendiary-STP-mid=Brandsprengkopf +-napalm-STP-mid=Napalm-Sprengkopf + +[warhead-description] + +-incendiary-STP-small=Ein Sprengkopf, der ein kleines Feuer entfachen kann +-incendiary-STP-mid=Ein Sprengkopf, der Feuer in einem kleinen Bereich entfachen kann +-napalm-STP-mid=Ein Sprengkopf, der lang anhaltende Feuer in einem weiten Bereich entfachen kann + +[weapontype-name] +shotgun-shell-birdshot=Vogelschrotpatrone, 20x__1__ +shotgun-shell-buckshot=Schrotpatrone, 6x__1__ +shotgun-shell-slug=GeschosshΓΌlse, __1__ + +rounds-magazine=Magazin, __1__ + +cannon-shell=Kanonengranate, __1__ +small-rocket=Kleine Rakete, __1__ +big-rocket=Große Rakete, __1__ + +artillery-shell=Artillerie-Granate, __1__ + +land-mine=Landmine, __1__ +capsule=Wurfkapsel __1__ + +warhead-util-projectile=Dienstprogramm der Mod __1__ + +autocannon-shell=Autokanonen-Granate (20mm), __1__ + +cannon-shell-75=Kanonengeschoß (75mm), __1__ +cannon-shell-88=Kanonengeschoß (88mm), __1__ +cannon-shell-128=Kanonengeschoß (128mm), __1__ + +Schall-sniper-magazine=Magazine (ScharfschΓΌtzengewehr), __1__ + +weapon-delivery-capsule=Waffentransportkapsel: __1__ + +aai-ironclad-mortar=MΓΆrser: __1__ +rampant-mortar=Munition fΓΌr Raketenwerfer: __1__ + +pistol-magazine=Pistolenmagazin, __1__ +rifle-magazine=Gewehrmagazin, __1__ +anti-material-rifle-magazine=Antimaterial-Gewehrmagazin, __1__ + +railgun-shell=Railgun-GehΓ€use, __1__ +turret-rocket=Raketenturm, __1__ + +[weapontype-description] +shotgun-shell-birdshot=Ein Geschoss mit hoher Streuung, das 20 kleine SchΓΌsse enthΓ€lt, von denen jeder folgende Wirkung hat:\n__1__ +shotgun-shell-buckshot=Ein Geschoss mit 6 Geschossen, die jeweils Folgendes auslΓΆsen:\n__1__ +shotgun-shell-slug=Ein Geschoss, welches folgende Wirkung hat:\n__1__ + +rounds-magazine=10 Schuss, fΓΌr den Einsatz mit hoher Feuerrate, Einsatz:\n__1__ +cannon-shell=Eine einzelne, hochwirksame Granate, die sich entfaltet:\n__1__ +small-rocket=Eine leichte Zielsuchrakete mit kurzer Reichweite, aber schneller Feuerrate, die jeweils auslΓΆst:\n__1__ +big-rocket=Eine grâßere Zielsuchrakete mit viel grâßerer Reichweite, die Folgendes auslΓΆst:\n__1__ + +artillery-shell=Munition fΓΌr Artillerie mit großer Reichweite, die eingesetzt wird:\n__1__ + +land-mine=Eine im Boden versteckte Falle, die auslΓΆsen kann:\n__1__ +capsule=Wurfbare Kapsel fΓΌr:\n__1__ + +aai-ironclad-mortar=Eine bogenfΓΆrmige Waffe mit großer Reichweite, die sich entfaltet:\n__1__ +rampant-mortar=Eine bogenfΓΆrmige Waffe, die sich entfaltet:\n__1__ + +warhead-util-projectile=Von der Mod bereitgestelltes Dienstprogramm, das Folgendes bereitstellt:\n__1__ + +autocannon-shell=10 20-mm-Granaten, Entfaltung:\n__1__ + +cannon-shell-75=Eine einzelne 75-mm-Granate, die sich entfaltet:\n__1__ +cannon-shell-88=Eine einzelne 88-mm-Granate, die sich entfaltet:\n__1__ +cannon-shell-128=Eine einzelne 128-mm-Granate, die sich entfaltet:\n__1__ + +Schall-sniper-magazine=10 Schuss fΓΌr das ScharfschΓΌtzengewehr, Einsatz:\n__1__ + +weapon-delivery-capsule=Eine interplanitΓ€re Waffe, die __1__ + +pistol-magazine=10 Schuss fΓΌr die Pistole, Einsatz:\n__1__ +rifle-magazine=10 Schuss fΓΌr das Gewehr, Einsatz:\n__1__ +anti-material-rifle-magazine=10 Schuss fΓΌr das Anti-Material-Gewehr, Einsatz:\n__1__ + +railgun-shell=Eine Railgun-Granate, die sich entfaltet:\n__1__ +turret-rocket=Eine Turmrakete, die sich entfaltet:\n__1__ + +[item-name] +STP-incendiary-small=Kleiner Brandsprengkopf +STP-incendiary-mid=Brandsprengkopf +STP-napalm-mid=Napalm-Sprengkopf diff --git a/Warheads/locale/en/locale.cfg b/Warheads/locale/en/locale.cfg new file mode 100644 index 00000000..1569fc6a --- /dev/null +++ b/Warheads/locale/en/locale.cfg @@ -0,0 +1,134 @@ +[warhead-name] + +-incendiary-STP-small=Small incendiary warhead +-incendiary-STP-mid=Incendiary warhead +-napalm-STP-mid=Napalm warhead + +[warhead-description] + +-incendiary-STP-small=A warhead capable of lighting a small fire +-incendiary-STP-mid=A warhead capable of lighting fires in a small area +-napalm-STP-mid=A warhead capable of lighting long lasting fires in a wide area + +[weapontype-name] +shotgun-shell-birdshot=Birdshot shell, 20x__1__ +shotgun-shell-buckshot=Buckshot shell, 6x__1__ +shotgun-shell-slug=Slug shell, __1__ + +rounds-magazine=Magazine, __1__ + +cannon-shell=Cannon shell, __1__ +small-rocket=Small rocket, __1__ +big-rocket=Large rocket, __1__ + +artillery-shell=Artillery shell, __1__ +derpy-artillery-ammo=Light Artillery ammo, __1__ + +land-mine=Land mine, __1__ +capsule=Throwable __1__ + +warhead-util-projectile=Utility provided by the mod, __1__ + +autocannon-shell=Autocannon shell (20mm), __1__ + +cannon-shell-75=Cannon shell (75mm), __1__ +cannon-shell-88=Cannon shell (88mm), __1__ +cannon-shell-128=Cannon shell (128mm), __1__ + +Schall-sniper-magazine=Magazine (sniper rifle), __1__ + +weapon-delivery-capsule=Weapon delivery capsule: __1__ + +aai-ironclad-mortar=Mortar: __1__ +rampant-mortar=Launcher ammo: __1__ + +pistol-magazine=Pistol magazine, __1__ +rifle-magazine=Rifle magazine, __1__ +anti-material-rifle-magazine=Anti-material rifle magazine, __1__ + +railgun-shell=Railgun shell, __1__ +turret-rocket=Turret rocket, __1__ + +[weapontype-description] +shotgun-shell-birdshot=A shell with high spread containing 20 small shots, each deploying:\n__1__ +shotgun-shell-buckshot=A shell containing 6 projectiles, each deploying:\n__1__ +shotgun-shell-slug=A shell deploying:\n__1__ + +rounds-magazine=10 rounds, for high fire-rate usage, deploying:\n__1__ +cannon-shell=A single high impact shell, deploying:\n__1__ +small-rocket=A light homing rocket, with short range but fast fire rate, each deploying:\n__1__ +big-rocket=A larger homing rocket, with much longer range, deploying:\n__1__ + +artillery-shell=Ammunition for artillery, deploying:\n__1__ + +derpy-artillery-ammo=Ammunition for light artillery, deploying:\n__1__ + +land-mine=A trap hidden in the ground, capable of deploying:\n__1__ +capsule=A handy throwable deployer for:\n__1__ + +aai-ironclad-mortar=A long-range arcing weapon, deploying:\n__1__ +rampant-mortar=An arcing weapon, deploying:\n__1__ + +warhead-util-projectile=Utility provided by the mod, deploying:\n__1__ + +autocannon-shell=10 20mm shells, deploying:\n__1__ + +cannon-shell-75=A single 75mm shell, deploying:\n__1__ +cannon-shell-88=A single 88mm shell, deploying:\n__1__ +cannon-shell-128=A single 128mm shell, deploying:\n__1__ + +Schall-sniper-magazine=10 rounds for the sniper rifle, deploying:\n__1__ + +weapon-delivery-capsule=An interplanitary weapon deploying __1__ + +pistol-magazine=10 rounds for the pistol, deploying:\n__1__ +rifle-magazine=10 rounds for the rifle, deploying:\n__1__ +anti-material-rifle-magazine=10 rounds for the anti-material rifle, deploying:\n__1__ + +railgun-shell=A railgun shell, deploying:\n__1__ +turret-rocket=A turret rocket, deploying:\n__1__ + +[item-name] +STP-incendiary-small=Small incendiary warhead +STP-incendiary-mid=Incendiary warhead +STP-napalm-mid=Napalm warhead + +[mod-setting-name] +enable-magazine=Enable warheads for magazines +enable-shotgun-bird=Enable warheads for bird shot shotguns +enable-shotgun-buck=Enable warheads for buck shot shotguns +enable-shotgun-slug=Enable warheads for slug shotgun rounds +enable-cannon-shell=Enable warheads for cannon shells +enable-small-rocket=Enable warheads for small rockets +enable-big-rocket=Enable warheads for large rockets +enable-artillery-shell=Enable warheads for artillery shells +enable-land-mine=Enable warheads for land mines +enable-capsule=Enable warheads for capsules (throwables) + +enable-sniper-magazine=Enable warheads for sniper magazines +enable-autocannon=Enable warheads for the autocannon +enable-cannon-shell-88=Enable warheads for 88mm cannon shells +enable-cannon-shell-128=Enable warheads for 128mm cannon shells + +enable-delivery-cannon-weapon=Enable warheads for weapon delivery cannons + +enable-derpy-artillery=Enable warheads for light artillery guns + +enable-pistol-magazine=Enable warheads for pistol magazines +enable-rifle-magazine=Enable warheads for rifle magazines +enable-anti-material-rifle-magazine=Enable warheads for anti-material rifle magazines +enable-railgun-shell=Enable warheads for railgun shells +enable-turret-rocket=Enable warheads for turret rockets + +enable-ironclad-mortar=Enable warheads for the ironclad's mortar + +enable-rampant-mortar=Enable warheads for the mortar + + + + + + + + + diff --git a/Warheads_0.0.17/prototypes/appearance-util.lua b/Warheads/prototypes/appearance-util.lua similarity index 100% rename from Warheads_0.0.17/prototypes/appearance-util.lua rename to Warheads/prototypes/appearance-util.lua diff --git a/Warheads_0.0.17/prototypes/basegame-weapontype-add.lua b/Warheads/prototypes/basegame-weapontype-add.lua similarity index 93% rename from Warheads_0.0.17/prototypes/basegame-weapontype-add.lua rename to Warheads/prototypes/basegame-weapontype-add.lua index 44ac487a..d37f17d7 100644 --- a/Warheads_0.0.17/prototypes/basegame-weapontype-add.lua +++ b/Warheads/prototypes/basegame-weapontype-add.lua @@ -1,5 +1,6 @@ weaponTypes["shotgun-shell-birdshot"]= { type = "projectile", + ignore = not settings.startup["enable-shotgun-bird"].value, size = 1, baseName = "shotgun-shell-birdshot", baseOrder = "b[shotgun]-f", @@ -34,6 +35,7 @@ weaponTypes["shotgun-shell-birdshot"].item.ammo_type.action[shotgunActionIndex]. weaponTypes["shotgun-shell-buckshot"]= { type = "projectile", size = 4, + ignore = not settings.startup["enable-shotgun-buck"].value, baseName = "shotgun-shell-buckshot", baseOrder = "b[shotgun]-e", base_item = "piercing-shotgun-shell", @@ -54,6 +56,7 @@ weaponTypes["shotgun-shell-buckshot"].item.ammo_type.action[shotgunActionIndex]. weaponTypes["shotgun-shell-slug"]= { type = "projectile", size = 14, + ignore = not settings.startup["enable-shotgun-slug"].value, baseName = "shotgun-shell-slug", baseOrder = "b[shotgun]-d", base_item = "piercing-shotgun-shell", @@ -100,6 +103,7 @@ weaponTypes["shotgun-shell"]= { -- DO NOT USE, ONLY HERE AS FALLBACK... weaponTypes["rounds-magazine"]= { type = "bullet", size = "tiny", + ignore = not settings.startup["enable-magazine"].value, baseName = "rounds-magazine", baseOrder = "a[basic-clips]-d", base_item = "piercing-rounds-magazine", @@ -126,6 +130,7 @@ end weaponTypes["cannon-shell"]= { type = "projectile", size = "small", + ignore = not settings.startup["enable-cannon-shell"].value, baseName = "cannon-shell", baseOrder = "d[explosive-cannon-shell]-cz", base_item = "cannon-shell", @@ -158,6 +163,7 @@ weaponTypes["rocket"]= {-- DO NOT USE, ONLY HERE AS FALLBACK... weaponTypes["small-rocket"]= { type = "projectile", size = "small", + ignore = not settings.startup["enable-small-rocket"].value, baseName = "small-rocket", baseOrder = "d[rocket-launcher]-c", base_item = "rocket", @@ -173,6 +179,7 @@ weaponTypes["small-rocket"]= { weaponTypes["big-rocket"]= { type = "projectile", size = "medium", + ignore = not settings.startup["enable-big-rocket"].value, min_size = "tiny", baseName = "big-rocket", baseOrder = "d[rocket-launcher]-d", @@ -193,6 +200,7 @@ weaponTypes["artillery-shell"]= { type = "artillery", max_size = "large", min_size = "small", + ignore = not settings.startup["enable-artillery-shell"].value, baseName = "artillery-shell", base_item = "artillery-shell", icon = "__base__/graphics/icons/artillery-shell.png", @@ -208,6 +216,7 @@ weaponTypes["land-mine"]= { type = "land-mine", max_size = "huge", min_size = "tiny", + ignore = not settings.startup["enable-land-mine"].value, baseName = "land-mine", base_item = "land-mine", icon = "__base__/graphics/icons/land-mine.png", @@ -220,6 +229,7 @@ weaponTypes["land-mine"]= { weaponTypes["capsule"]= { type = "capsule", max_size = "medium", + ignore = not settings.startup["enable-capsule"].value, baseName = "capsule", base_item = "grenade", icon = "__base__/graphics/icons/grenade.png", diff --git a/Warheads_0.0.17/prototypes/compatibility/IR2-tmp-patch.lua b/Warheads/prototypes/compatibility/IR2-tmp-patch.lua similarity index 100% rename from Warheads_0.0.17/prototypes/compatibility/IR2-tmp-patch.lua rename to Warheads/prototypes/compatibility/IR2-tmp-patch.lua diff --git a/Warheads_0.0.17/prototypes/compatibility/K2-weapontypes.lua b/Warheads/prototypes/compatibility/K2-weapontypes.lua similarity index 89% rename from Warheads_0.0.17/prototypes/compatibility/K2-weapontypes.lua rename to Warheads/prototypes/compatibility/K2-weapontypes.lua index d22fdf9a..1e71618d 100644 --- a/Warheads_0.0.17/prototypes/compatibility/K2-weapontypes.lua +++ b/Warheads/prototypes/compatibility/K2-weapontypes.lua @@ -3,6 +3,7 @@ if data.raw.ammo["armor-piercing-rifle-magazine"] then weaponTypes["pistol-magazine"]= { type = "projectile", size = 4, + ignore = not settings.startup["enable-pistol-magazine"].value, baseName = "pistol-magazine", baseOrder = "a[basic-clips]-a02z", base_item = "piercing-rounds-magazine", @@ -18,6 +19,7 @@ if data.raw.ammo["armor-piercing-rifle-magazine"] then weaponTypes["rifle-magazine"]= { type = "projectile", size = 8, + ignore = not settings.startup["enable-rifle-magazine"].value, baseName = "rifle-magazine", baseOrder = "a[basic-clips]-a06z", base_item = "armor-piercing-rifle-magazine", @@ -33,6 +35,7 @@ if data.raw.ammo["armor-piercing-rifle-magazine"] then weaponTypes["anti-material-rifle-magazine"]= { type = "projectile", size = 13, + ignore = not settings.startup["enable-anti-material-rifle-magazine"].value, baseName = "anti-material-rifle-magazine", baseOrder = "a[basic-clips]-a10z", base_item = "armor-piercing-anti-material-rifle-magazine", @@ -54,6 +57,7 @@ weaponTypes["big-rocket"].extra_ingredients = nil weaponTypes["railgun-shell"]= { type = "projectile", size = 25, + ignore = not settings.startup["enable-railgun-shell"].value, baseName = "railgun-shell", baseOrder = "b02z", base_item = "basic-railgun-shell", @@ -70,6 +74,7 @@ weaponTypes["railgun-shell"]= { weaponTypes["turret-rocket"]= { type = "projectile", size = 25, + ignore = not settings.startup["enable-turret-rocket"].value, baseName = "turret-rocket", baseOrder = "b06[explosion-rocket-for-turret]", base_item = "explosive-turret-rocket", diff --git a/Warheads_0.0.17/prototypes/compatibility/LightArtillery-weapontypes.lua b/Warheads/prototypes/compatibility/LightArtillery-weapontypes.lua similarity index 91% rename from Warheads_0.0.17/prototypes/compatibility/LightArtillery-weapontypes.lua rename to Warheads/prototypes/compatibility/LightArtillery-weapontypes.lua index 68b41dd3..aa241acd 100644 --- a/Warheads_0.0.17/prototypes/compatibility/LightArtillery-weapontypes.lua +++ b/Warheads/prototypes/compatibility/LightArtillery-weapontypes.lua @@ -8,6 +8,7 @@ weaponTypes["derpy-artillery-ammo"]= { type = "artillery", max_size = "small", min_size = "tiny", + ignore = not settings.startup["enable-derpy-artillery"].value, baseName = "derpy-artillery-ammo", base_item = "derpy-artillery-ammo", icon = icon, diff --git a/Warheads/prototypes/compatibility/SE-weapontypes.lua b/Warheads/prototypes/compatibility/SE-weapontypes.lua new file mode 100644 index 00000000..98f6fd75 --- /dev/null +++ b/Warheads/prototypes/compatibility/SE-weapontypes.lua @@ -0,0 +1,152 @@ +weaponTypes["se-delivery-cannon-weapon"]= { + type = "none", + max_size = "huge", + min_size = "tiny", + ignore = not settings.startup["enable-delivery-cannon-weapon"].value, + baseName = "se-delivery-cannon-weapon-pack-", + baseOrder = "d[cannon-shell]-d[atomic]-1", + base_item = "se-delivery-cannon-weapon-capsule", + + override = function (weapontype, warheadWeapon) + local ingredients = {{name = "se-delivery-cannon-weapon-capsule", amount = 1}} + + if(warheadWeapon.recipe.build_up_ingredient) then + log("Complicated: built up explosion flattened for SE-delivery cannon...") + for _, ing in pairs(data.raw.recipe["se-delivery-cannon-weapon-pack-" .. "warhead-util-projectile" .. warheadWeapon.recipe.build_up_ingredient.name].ingredients) do + if ing.name ~= "se-delivery-cannon-weapon-capsule" and ing[1] ~= "se-delivery-cannon-weapon-capsule" then + table.insert(ingredients, {name = ing.name or ing[1], amount = (ing.amount or ing[2])*warheadWeapon.recipe.build_up_ingredient.amount}) + end + end + else + table.insert(ingredients, {name = warheadWeapon.recipe.warhead_name, amount = 1}) + end + for _,i in pairs(warheadWeapon.recipe.additional_ingedients) do + table.insert(ingredients, i) + end + local results = {} + results = {{type="item", name="se-delivery-cannon-weapon-package-".."warhead-util-projectile"..warheadWeapon.appendName, amount = 1}} + for _,r in pairs(warheadWeapon.recipe.additional_results) do + table.insert(results, r) + end + local artillery_icons = table.deepcopy(warheadWeapon.appearance.icons); + table.insert(artillery_icons, 1, { + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-artillery-targeter.png", + icon_size = 64 + }) + data:extend{ + { + -- capsule w/ capsule_action="equipment-remote" gives us the activate hotkey tooltip w/o it actually having to do anything outside of our script + type = "capsule", + name = "se-delivery-cannon-artillery-targeter-".."warhead-util-projectile"..warheadWeapon.appendName, + icons = artillery_icons, + capsule_action = + { + type = "equipment-remote", + equipment = "dummy-defense-equipment" + }, + -- order and subgroup match the vanilla artillery targeting remote such that all the artillery targeting remotes stay organized together + order = "b[turret]-d[artillery-turret]-b[remote]-wh"..warheadWeapon.appendOrder, + subgroup = "defensive-structure", + stack_size = 1, + localised_name = {"item-name.se-delivery-cannon-artillery-targeter", {"warhead-name." .. warheadWeapon.appendName}}, + localised_description = {"item-description.se-delivery-cannon-artillery-targeter", {"warhead-description." .. warheadWeapon.appendName}}, + flags = {} + }, + { + -- this dummy artillery flare will not take any shots from the artillery because its shots_per_flare is 0 + -- its life_time has been set to 0 and has the early_death_ticks replaced with the lifetime since because of + -- the 0 shots_per_flare the flare is immediately considered in need of being dead upon spawning + -- if the dummy artillery flare needs to be removed before its early_death_ticks worth of lifetime expires, it + -- must be manually destroyed by script + type = "artillery-flare", + name = "se-dummy-artillery-flare-".."warhead-util-projectile"..warheadWeapon.appendName, + icon = "__base__/graphics/icons/artillery-targeting-remote.png", + icon_size = 64, icon_mipmaps = 4, + flags = {"placeable-off-grid", "not-on-map"}, + map_color = warheadWeapon.chart_tint or {r=1, g=0.5, b=0}, + life_time = 0 * 60, + initial_height = 0, + initial_vertical_speed = 0, + initial_frame_speed = 1, + shots_per_flare = 0, + -- + 60 seconds to the value in the settings so the flare always lasts long enough to either be fired upon or be expired by script + early_death_ticks = 60 * (settings.startup["se-delivery-cannon-artillery-timeout"].value + 60), + pictures = + { + { + filename = "__core__/graphics/shoot-cursor-red.png", + priority = "low", + width = 258, + height = 183, + frame_count = 1, + scale = 1, + flags = {"icon"} + } + } + }, + { + type = "recipe", + name = "se-delivery-cannon-artillery-targeter-"..warheadWeapon.appendName, + result = "se-delivery-cannon-artillery-targeter-".."warhead-util-projectile"..warheadWeapon.appendName, + enabled = false, + energy_required = 0.5, + ingredients = { + { "processing-unit", 1 }, + { "radar", 1 }, + }, + requester_paste_multiplier = 1, + always_show_made_in = false, + } + } + local tech = warheadWeapon.tech + if weaponNoTech[weapontype.name] then + tech = nil + end + if specialTechForWarheadWeapon[weapontype.name .. warheadWeapon.appendName] ~= nil then + tech = specialTechForWarheadWeapon[weapontype.name .. warheadWeapon.appendName] + end + if tech and data.raw.technology[tech] then + if not data.raw.technology[tech].effects then + data.raw.technology[tech].effects = {} + end + table.insert(data.raw.technology[tech].effects, + { + type = "unlock-recipe", + recipe = "se-delivery-cannon-artillery-targeter-"..warheadWeapon.appendName + }) + end + + return { + valid = true, + item = { + type = "item", + name = "se-delivery-cannon-weapon-package-" .. "warhead-util-projectile"..warheadWeapon.appendName, + icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon-capsule.png", + icon_size = 64, + order = "" .. warheadWeapon.appendOrder, + flags = {"hidden"}, + subgroup = "delivery-cannon-capsules", + stack_size = 1, + localised_name = {"weapontype-name.weapon-delivery-capsule", {"warhead-name." .. warheadWeapon.appendName}}, + localised_description= {"weapontype-description.weapon-delivery-capsule", {"warhead-description." .. warheadWeapon.appendName}} + }, + recipe = { + type = "recipe", + name = "se-delivery-cannon-weapon-pack-" .. "warhead-util-projectile" .. warheadWeapon.appendName, + icons = warheadWeapon.appearance.icons, + results = results, + enabled = false, + energy_required = 10, + ingredients = ingredients, + requester_paste_multiplier = 1, + always_show_made_in = false, + category = "delivery-cannon-weapon", + hide_from_player_crafting = true, + localised_name = {"weapontype-name.weapon-delivery-capsule", {"warhead-name." .. warheadWeapon.appendName}}, + localised_description= {"weapontype-description.weapon-delivery-capsule", {"warhead-description." .. warheadWeapon.appendName}}, + allow_decomposition = false + } + } + end +} + diff --git a/Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-sprites.lua b/Warheads/prototypes/compatibility/SchallTankPlatoon-sprites.lua similarity index 100% rename from Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-sprites.lua rename to Warheads/prototypes/compatibility/SchallTankPlatoon-sprites.lua diff --git a/Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-warheads.lua b/Warheads/prototypes/compatibility/SchallTankPlatoon-warheads.lua similarity index 100% rename from Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-warheads.lua rename to Warheads/prototypes/compatibility/SchallTankPlatoon-warheads.lua diff --git a/Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua b/Warheads/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua similarity index 91% rename from Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua rename to Warheads/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua index 86d5f91d..ee0b70fe 100644 --- a/Warheads_0.0.17/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua +++ b/Warheads/prototypes/compatibility/SchallTankPlatoon-weapontypes.lua @@ -1,6 +1,7 @@ weaponTypes["Schall-sniper-magazine"]= { type = "bullet", size = 13, + ignore = not settings.startup["enable-sniper-magazine"].value, baseName = "Schall-sniper-magazine", baseOrder = "a[basic-clips]-s[sniper-rifle]-d", base_item = "Schall-sniper-piercing-rounds-magazine", @@ -19,6 +20,7 @@ weaponTypes["Schall-sniper-magazine"]= { weaponTypes["autocannon-shell"]= { type = "projectile", size = 17, + ignore = not settings.startup["enable-autocannon"].value, baseName = "autocannon-shell", baseOrder = "d[f-z-autocannon-shell]-a", base_item = "explosive-autocannon-shell", @@ -41,6 +43,7 @@ weaponTypes["autocannon-shell"]= { weaponTypes["cannon-shell-88"]= { type = "projectile", size = 24, + ignore = not settings.startup["enable-cannon-shell-88"].value, baseName = "cannon-shell-88", baseOrder = "d[cannon-shell]-d", base_item = "cannon-H1-shell", @@ -60,6 +63,7 @@ weaponTypes["cannon-shell-88"]= { weaponTypes["cannon-shell-128"]= { type = "projectile", size = 27, + ignore = not settings.startup["enable-cannon-shell-128"].value, baseName = "cannon-shell-128", baseOrder = "d[cannon-shell]-d", base_item = "cannon-H2-shell", diff --git a/Warheads_0.0.17/prototypes/compatibility/aai-ironclad.lua b/Warheads/prototypes/compatibility/aai-ironclad.lua similarity index 87% rename from Warheads_0.0.17/prototypes/compatibility/aai-ironclad.lua rename to Warheads/prototypes/compatibility/aai-ironclad.lua index 18e98d18..686a3721 100644 --- a/Warheads_0.0.17/prototypes/compatibility/aai-ironclad.lua +++ b/Warheads/prototypes/compatibility/aai-ironclad.lua @@ -2,6 +2,7 @@ weaponTypes["aai-ironclad-mortar"]= { type = "stream", max_size = "medium", min_size = "tiny", + ignore = not settings.startup["enable-ironclad-mortar"].value, baseName = "aai-ironclad-mortar", baseOrder = "d[cannon-shell]-cz", base_item = "mortar-bomb", @@ -12,4 +13,4 @@ weaponTypes["aai-ironclad-mortar"]= { image_warhead_shift = {-8, -8}, item = table.deepcopy(data.raw.ammo["mortar-bomb"]), stream = table.deepcopy(data.raw.stream["mortar-bomb-projectile-stream"]), -} \ No newline at end of file +} diff --git a/Warheads_0.0.17/prototypes/compatibility/bobs-weapontypes.lua b/Warheads/prototypes/compatibility/bobs-weapontypes.lua similarity index 100% rename from Warheads_0.0.17/prototypes/compatibility/bobs-weapontypes.lua rename to Warheads/prototypes/compatibility/bobs-weapontypes.lua diff --git a/Warheads_0.0.17/prototypes/compatibility/rampant-arsenal.lua b/Warheads/prototypes/compatibility/rampant-arsenal.lua similarity index 88% rename from Warheads_0.0.17/prototypes/compatibility/rampant-arsenal.lua rename to Warheads/prototypes/compatibility/rampant-arsenal.lua index 8dd5db43..b5e24593 100644 --- a/Warheads_0.0.17/prototypes/compatibility/rampant-arsenal.lua +++ b/Warheads/prototypes/compatibility/rampant-arsenal.lua @@ -2,6 +2,7 @@ weaponTypes["rampant-mortar"]= { type = "stream", max_size = "medium", min_size = "tiny", + ignore = not settings.startup["enable-rampant-mortar"].value, baseName = "rampant-mortar", baseOrder = "e[mortar]-c", base_item = "grenade-capsule-ammo-rampant-arsenal", @@ -12,4 +13,4 @@ weaponTypes["rampant-mortar"]= { image_warhead_shift = {0, -8}, item = table.deepcopy(data.raw.ammo["grenade-capsule-ammo-rampant-arsenal"]), stream = table.deepcopy(data.raw.stream["grenade-capsule-stream-rampant-arsenal"]), -} \ No newline at end of file +} diff --git a/Warheads_0.0.17/prototypes/generate-all.lua b/Warheads/prototypes/generate-all.lua similarity index 91% rename from Warheads_0.0.17/prototypes/generate-all.lua rename to Warheads/prototypes/generate-all.lua index dc600e73..a0b4f22b 100644 --- a/Warheads_0.0.17/prototypes/generate-all.lua +++ b/Warheads/prototypes/generate-all.lua @@ -5,9 +5,10 @@ local weapontype_sanitise = require("__Warheads__.prototypes.weapontype-sanitise local combine = require("__Warheads__.prototypes.warhead-weapontype-combination") - +removedRecipes = {} for _,name in pairs(warheadWeaponNameMap) do if(data.raw.recipe[name]) then + removedRecipes[name] = data.raw.recipe[name] data.raw.recipe[name] = nil end end @@ -34,7 +35,7 @@ for name,warhead_dirty in pairs(warheads) do end data:extend(results) - local tech = warhead_dirty.tech + local tech = warheadWeapon.tech if weaponNoTech[weapontype.name] then tech = nil end @@ -68,3 +69,10 @@ for name,warhead_dirty in pairs(warheads) do end end end + +for name,recipe in pairs(removedRecipes) do + if(not data.raw.recipe[name]) then + data.raw.recipe[name] = recipe + end +end + diff --git a/Warheads_0.0.17/prototypes/sprite-assembly-util.lua b/Warheads/prototypes/sprite-assembly-util.lua similarity index 100% rename from Warheads_0.0.17/prototypes/sprite-assembly-util.lua rename to Warheads/prototypes/sprite-assembly-util.lua diff --git a/Warheads_0.0.17/prototypes/warhead-sanitise.lua b/Warheads/prototypes/warhead-sanitise.lua similarity index 99% rename from Warheads_0.0.17/prototypes/warhead-sanitise.lua rename to Warheads/prototypes/warhead-sanitise.lua index 8a7056a5..64ecfe54 100644 --- a/Warheads_0.0.17/prototypes/warhead-sanitise.lua +++ b/Warheads/prototypes/warhead-sanitise.lua @@ -240,6 +240,7 @@ local function sanitseWarhead(key, warhead) weapon.land_mine.created_action = explosion.created_action or {type = "direct", action_delivery = {type = "instant", target_effects = explosion.created_effect}} weapon.land_mine.ammo_category = warhead.ammo_category weapon.land_mine.dying_explosion = explosion.dying_explosion or warhead.dying_explosion + weapon.tech = warhead.tech table.insert(result.weapons, weapon) end return result diff --git a/Warheads_0.0.17/prototypes/warhead-weapontype-combination.lua b/Warheads/prototypes/warhead-weapontype-combination.lua similarity index 100% rename from Warheads_0.0.17/prototypes/warhead-weapontype-combination.lua rename to Warheads/prototypes/warhead-weapontype-combination.lua diff --git a/Warheads_0.0.17/prototypes/warheads.lua b/Warheads/prototypes/warheads.lua similarity index 100% rename from Warheads_0.0.17/prototypes/warheads.lua rename to Warheads/prototypes/warheads.lua diff --git a/Warheads_0.0.17/prototypes/weapontype-sanitise.lua b/Warheads/prototypes/weapontype-sanitise.lua similarity index 100% rename from Warheads_0.0.17/prototypes/weapontype-sanitise.lua rename to Warheads/prototypes/weapontype-sanitise.lua diff --git a/Warheads/settings.lua b/Warheads/settings.lua new file mode 100644 index 00000000..98db5c01 --- /dev/null +++ b/Warheads/settings.lua @@ -0,0 +1,197 @@ +data:extend({ + { + type = "bool-setting", + name = "enable-magazine", + setting_type = "startup", + default_value = true, + order = "g00" + }, + { + type = "bool-setting", + name = "enable-shotgun-bird", + setting_type = "startup", + default_value = true, + order = "g01" + }, + { + type = "bool-setting", + name = "enable-shotgun-buck", + setting_type = "startup", + default_value = true, + order = "g02" + }, + { + type = "bool-setting", + name = "enable-shotgun-slug", + setting_type = "startup", + default_value = true, + order = "g03" + }, + { + type = "bool-setting", + name = "enable-cannon-shell", + setting_type = "startup", + default_value = true, + order = "g04" + }, + { + type = "bool-setting", + name = "enable-small-rocket", + setting_type = "startup", + default_value = true, + order = "g05" + }, + { + type = "bool-setting", + name = "enable-big-rocket", + setting_type = "startup", + default_value = true, + order = "g06" + }, + { + type = "bool-setting", + name = "enable-artillery-shell", + setting_type = "startup", + default_value = true, + order = "g07" + }, + { + type = "bool-setting", + name = "enable-land-mine", + setting_type = "startup", + default_value = true, + order = "g08" + }, + { + type = "bool-setting", + name = "enable-capsule", + setting_type = "startup", + default_value = true, + order = "g09" + } +}) + + +if mods["SchallTankPlatoon"] then + data:extend({ + { + type = "bool-setting", + name = "enable-sniper-magazine", + setting_type = "startup", + default_value = true, + order = "g-STP-00" + }, + { + type = "bool-setting", + name = "enable-autocannon", + setting_type = "startup", + default_value = true, + order = "g-STP-01" + }, + { + type = "bool-setting", + name = "enable-cannon-shell-88", + setting_type = "startup", + default_value = true, + order = "g-STP-02" + }, + { + type = "bool-setting", + name = "enable-cannon-shell-128", + setting_type = "startup", + default_value = true, + order = "g-STP-03" + } + }) +end +if mods["space-exploration"] then + data:extend({ + { + type = "bool-setting", + name = "enable-delivery-cannon-weapon", + setting_type = "startup", + default_value = true, + order = "g-SE-00" + } + }) +end +if mods["lightArtillery"] or mods["lightArtillery-Balanced"]then + data:extend({ + { + type = "bool-setting", + name = "enable-derpy-artillery", + setting_type = "startup", + default_value = true, + order = "g-LA-00" + } + }) +end + + + +if mods["Krastorio2"] then + data:extend({ + { + type = "bool-setting", + name = "enable-pistol-magazine", + setting_type = "startup", + default_value = true, + order = "g-K2-00" + }, + { + type = "bool-setting", + name = "enable-rifle-magazine", + setting_type = "startup", + default_value = true, + order = "g-K2-01" + }, + { + type = "bool-setting", + name = "enable-anti-material-rifle-magazine", + setting_type = "startup", + default_value = true, + order = "g-K2-02" + }, + { + type = "bool-setting", + name = "enable-railgun-shell", + setting_type = "startup", + default_value = true, + order = "g-K2-03" + }, + { + type = "bool-setting", + name = "enable-turret-rocket", + setting_type = "startup", + default_value = true, + order = "g-K2-04" + } + }) +end + +if mods["aai-vehicles-ironclad"] then + data:extend({ + { + type = "bool-setting", + name = "enable-ironclad-mortar", + setting_type = "startup", + default_value = true, + order = "g-ironclad-00" + } + }) +end +if mods["RampantArsenal"] then + data:extend({ + { + type = "bool-setting", + name = "enable-rampant-mortar", + setting_type = "startup", + default_value = true, + order = "g-ramp-00" + } + }) +end + + + + diff --git a/Warheads/thumbnail.png b/Warheads/thumbnail.png new file mode 100644 index 00000000..fbc57be7 Binary files /dev/null and b/Warheads/thumbnail.png differ diff --git a/Warheads_0.0.17/changelog.txt b/Warheads_0.0.17/changelog.txt deleted file mode 100644 index 0126b415..00000000 --- a/Warheads_0.0.17/changelog.txt +++ /dev/null @@ -1,84 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.0.17 -Date: 2023-10-10 - Bugfixes: - - Fixed strange bug with Make Artillery Great Again and SE breaking thermobaric weapon delivery cannons ---------------------------------------------------------------------------------------------------- -Version: 0.0.16 -Date: 2023-08-23 - Bugfixes: - - Fixed circular dependancy - may be unstable. ---------------------------------------------------------------------------------------------------- -Version: 0.0.15 -Date: 2023-04-04 - Bugfixes: - - Fixed crash when Rampant arsenal and tracer-ammo are installed ---------------------------------------------------------------------------------------------------- -Version: 0.0.14 -Date: 2023-03-31 - Bugfixes: - - Fixed dots appearing on map behind artillery - Features: - - Added compatibility for Atomic_Overhaul - - Added compatibility for light artillery Balanced ---------------------------------------------------------------------------------------------------- -Version: 0.0.13 -Date: 2023-03-26 - Bugfixes: - - Added projectile.force_condition to warhead system ---------------------------------------------------------------------------------------------------- -Version: 0.0.12 -Date: 2023-01-14 - Features: - - Added weapontype for light artillery ---------------------------------------------------------------------------------------------------- -Version: 0.0.11 -Date: 2022-12-21 - Bugfixes: - - Added code to fix repeated recipe ingredients ---------------------------------------------------------------------------------------------------- -Version: 0.0.10 -Date: 2022-11-01 - Localisation: - - Added German translations ---------------------------------------------------------------------------------------------------- -Version: 0.0.9 -Date: 2022-09-29 - Bugfixes: - - Fixed crashes when technology tree is complex ---------------------------------------------------------------------------------------------------- -Version: 0.0.8 -Date: 2022-09-26 - Bugfixes: - - Fixed issues with ranges on weapons, and tank shells not firing where you want ---------------------------------------------------------------------------------------------------- -Version: 0.0.7 - Bugfixes: - - Fixed stream type weapons (such as mortars) ---------------------------------------------------------------------------------------------------- -Version: 0.0.6 - Bugfixes: - - Fixed incompatibility with K2 when realistic combat on. ---------------------------------------------------------------------------------------------------- -Version: 0.0.5 - Bugfixes: - - Fixed incompatibility with K2 when realistic combat off. ---------------------------------------------------------------------------------------------------- -Version: 0.0.4 - Bugfixes: - - Fixed unknown incompatibility crash. - Features: - - Support for Ironclad and Rampant mortars. ---------------------------------------------------------------------------------------------------- -Version: 0.0.3 - Bugfixes: - - Fixed missing localisation for landmines (and projectiles). ---------------------------------------------------------------------------------------------------- -Version: 0.0.2 - Bugfixes: - - Fixed incompatibility with K2 and IR2 enabled. ---------------------------------------------------------------------------------------------------- -Version: 0.0.1 - Features: - - Initial version - diff --git a/Warheads_0.0.17/graphics/artillery/artillery-map.png b/Warheads_0.0.17/graphics/artillery/artillery-map.png deleted file mode 100644 index d5125a24..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-map.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-base.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-base.png deleted file mode 100644 index 27aabf34..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-base.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-left.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-left.png deleted file mode 100644 index 9a4a072f..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-left.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-right.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-right.png deleted file mode 100644 index 74578aba..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1-base-right.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1.png deleted file mode 100644 index 49483690..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-left.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-left.png deleted file mode 100644 index f4b00042..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-left.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-right.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-right.png deleted file mode 100644 index f94e175f..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2-base-right.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2.png deleted file mode 100644 index 2a56d626..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-2.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-left.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-left.png deleted file mode 100644 index 40ab9631..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-left.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-right.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-right.png deleted file mode 100644 index ca25b2f6..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat-base-right.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat.png deleted file mode 100644 index 8695b88a..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-ring-fat.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/artillery/artillery-shell-tip.png b/Warheads_0.0.17/graphics/artillery/artillery-shell-tip.png deleted file mode 100644 index 76d26ef0..00000000 Binary files a/Warheads_0.0.17/graphics/artillery/artillery-shell-tip.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/cannon/cannon-shell-base-top.png b/Warheads_0.0.17/graphics/cannon/cannon-shell-base-top.png deleted file mode 100644 index da906b2f..00000000 Binary files a/Warheads_0.0.17/graphics/cannon/cannon-shell-base-top.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/cannon/cannon-shell-base.png b/Warheads_0.0.17/graphics/cannon/cannon-shell-base.png deleted file mode 100644 index 8997c477..00000000 Binary files a/Warheads_0.0.17/graphics/cannon/cannon-shell-base.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/cannon/cannon-shell-edge.png b/Warheads_0.0.17/graphics/cannon/cannon-shell-edge.png deleted file mode 100644 index 6eb044fc..00000000 Binary files a/Warheads_0.0.17/graphics/cannon/cannon-shell-edge.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/cannon/cannon-shell-tip.png b/Warheads_0.0.17/graphics/cannon/cannon-shell-tip.png deleted file mode 100644 index fd1a238e..00000000 Binary files a/Warheads_0.0.17/graphics/cannon/cannon-shell-tip.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-engine.png b/Warheads_0.0.17/graphics/rockets/rocket-engine.png deleted file mode 100644 index b489d263..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-engine.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-fins.png b/Warheads_0.0.17/graphics/rockets/rocket-fins.png deleted file mode 100644 index 02e05335..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-fins.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-ring-1-light.png b/Warheads_0.0.17/graphics/rockets/rocket-ring-1-light.png deleted file mode 100644 index bd9ddc2d..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-ring-1-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-ring-1.png b/Warheads_0.0.17/graphics/rockets/rocket-ring-1.png deleted file mode 100644 index 6c7dec1f..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-ring-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-ring-2-light.png b/Warheads_0.0.17/graphics/rockets/rocket-ring-2-light.png deleted file mode 100644 index 79f239cf..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-ring-2-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-ring-2.png b/Warheads_0.0.17/graphics/rockets/rocket-ring-2.png deleted file mode 100644 index 01f9bb3c..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-ring-2.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-ring-3.png b/Warheads_0.0.17/graphics/rockets/rocket-ring-3.png deleted file mode 100644 index 77577170..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-ring-3.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-tip-light.png b/Warheads_0.0.17/graphics/rockets/rocket-tip-light.png deleted file mode 100644 index 522591bf..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-tip-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket-tip.png b/Warheads_0.0.17/graphics/rockets/rocket-tip.png deleted file mode 100644 index efdd541d..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket-tip.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rockets/rocket.png b/Warheads_0.0.17/graphics/rockets/rocket.png deleted file mode 100644 index ddad2209..00000000 Binary files a/Warheads_0.0.17/graphics/rockets/rocket.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-blank.png b/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-blank.png deleted file mode 100644 index 5488924e..00000000 Binary files a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-blank.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-end.png b/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-end.png deleted file mode 100644 index 65cc82c1..00000000 Binary files a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-end.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-middle.png b/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-middle.png deleted file mode 100644 index afb9b0b9..00000000 Binary files a/Warheads_0.0.17/graphics/rounds/generic-rounds/rounds-middle.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/frag-top.png b/Warheads_0.0.17/graphics/shotgun/frag-top.png deleted file mode 100644 index 4c1f82d3..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/frag-top.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/piercing-shotgun-shell.png b/Warheads_0.0.17/graphics/shotgun/piercing-shotgun-shell.png deleted file mode 100644 index 70eb6059..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/piercing-shotgun-shell.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/piercing-top.png b/Warheads_0.0.17/graphics/shotgun/piercing-top.png deleted file mode 100644 index dc26dc24..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/piercing-top.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/shotgun-base.png b/Warheads_0.0.17/graphics/shotgun/shotgun-base.png deleted file mode 100644 index 0f03dca0..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/shotgun-base.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/shotgun-shell-mask.png b/Warheads_0.0.17/graphics/shotgun/shotgun-shell-mask.png deleted file mode 100644 index 490122ed..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/shotgun-shell-mask.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/shotgun-shell.png b/Warheads_0.0.17/graphics/shotgun/shotgun-shell.png deleted file mode 100644 index 4d4063e5..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/shotgun-shell.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/shotgun/shotgun-under.png b/Warheads_0.0.17/graphics/shotgun/shotgun-under.png deleted file mode 100644 index a9b26b86..00000000 Binary files a/Warheads_0.0.17/graphics/shotgun/shotgun-under.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-1.png b/Warheads_0.0.17/graphics/warheads/can-1-body-1.png deleted file mode 100644 index f1b2b56b..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-2-final.png b/Warheads_0.0.17/graphics/warheads/can-1-body-2-final.png deleted file mode 100644 index bb0e32a8..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-2-final.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-2.png b/Warheads_0.0.17/graphics/warheads/can-1-body-2.png deleted file mode 100644 index b2cb0cd0..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-2.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-3-final.png b/Warheads_0.0.17/graphics/warheads/can-1-body-3-final.png deleted file mode 100644 index ed20aca0..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-3-final.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-3.png b/Warheads_0.0.17/graphics/warheads/can-1-body-3.png deleted file mode 100644 index e978b5b6..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-3.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-4-final.png b/Warheads_0.0.17/graphics/warheads/can-1-body-4-final.png deleted file mode 100644 index f6f4ba1b..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-4-final.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-4.png b/Warheads_0.0.17/graphics/warheads/can-1-body-4.png deleted file mode 100644 index 79307e67..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-4.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-5.png b/Warheads_0.0.17/graphics/warheads/can-1-body-5.png deleted file mode 100644 index 459b704f..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-5.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-body-6.png b/Warheads_0.0.17/graphics/warheads/can-1-body-6.png deleted file mode 100644 index 3518fad6..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-body-6.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-ring-1.png b/Warheads_0.0.17/graphics/warheads/can-1-ring-1.png deleted file mode 100644 index 0605c476..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-ring-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-ring-2.png b/Warheads_0.0.17/graphics/warheads/can-1-ring-2.png deleted file mode 100644 index ccf855b4..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-ring-2.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-1-top.png b/Warheads_0.0.17/graphics/warheads/can-1-top.png deleted file mode 100644 index 2eeb5f39..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-1-top.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-2-body-1.png b/Warheads_0.0.17/graphics/warheads/can-2-body-1.png deleted file mode 100644 index a06ed112..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-2-body-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-2-body-final.png b/Warheads_0.0.17/graphics/warheads/can-2-body-final.png deleted file mode 100644 index b7a17874..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-2-body-final.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-2-ring-1.png b/Warheads_0.0.17/graphics/warheads/can-2-ring-1.png deleted file mode 100644 index d6dfd532..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-2-ring-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-3-body.png b/Warheads_0.0.17/graphics/warheads/can-3-body.png deleted file mode 100644 index 6f9c9bd6..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-3-body.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-3-final.png b/Warheads_0.0.17/graphics/warheads/can-3-final.png deleted file mode 100644 index a1c3f7a8..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-3-final.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/can-3-ring.png b/Warheads_0.0.17/graphics/warheads/can-3-ring.png deleted file mode 100644 index b38b0ea8..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/can-3-ring.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-base.png b/Warheads_0.0.17/graphics/warheads/sphere-1-base.png deleted file mode 100644 index d3286165..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-base.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1-light.png b/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1-light.png deleted file mode 100644 index 33627de5..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1.png b/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1.png deleted file mode 100644 index 660c1170..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-1.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2-light.png b/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2-light.png deleted file mode 100644 index 6cce0a69..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2.png b/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2.png deleted file mode 100644 index 7eea38ff..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-ring-part-2.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-top-light.png b/Warheads_0.0.17/graphics/warheads/sphere-1-top-light.png deleted file mode 100644 index 669a718a..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-top-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/sphere-1-top.png b/Warheads_0.0.17/graphics/warheads/sphere-1-top.png deleted file mode 100644 index 8e60cae7..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/sphere-1-top.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big-light.png b/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big-light.png deleted file mode 100644 index fa29431d..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big-light.png and /dev/null differ diff --git a/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big.png b/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big.png deleted file mode 100644 index cb328f48..00000000 Binary files a/Warheads_0.0.17/graphics/warheads/warhead-ideas/core-big.png and /dev/null differ diff --git a/Warheads_0.0.17/info.json b/Warheads_0.0.17/info.json deleted file mode 100644 index 22c2bd72..00000000 --- a/Warheads_0.0.17/info.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Warheads", - "version": "0.0.17", - "title": "Warheads", - "author": "BicycleEater", - "description": "Acts as a super-cross mod for weapons, allowing mods adding warheads to avoid working to support every different mod.", - "homepage": "https://github.com/More-Wrong/Factorio-True-Nukes", - "factorio_version": "1.1", - "dependencies": [ - "? SchallTankPlatoon", - "? bobwarfare", - "? space-exploration", - "? Krastorio2", - "? RampantArsenal", - "? aai-vehicles-ironclad", - "? lightArtillery", - "? lightArtillery-Balanced" - ] -} - diff --git a/Warheads_0.0.17/locale/en/locale.cfg b/Warheads_0.0.17/locale/en/locale.cfg deleted file mode 100644 index 42e1e8cd..00000000 --- a/Warheads_0.0.17/locale/en/locale.cfg +++ /dev/null @@ -1,94 +0,0 @@ -[warhead-name] - --incendiary-STP-small=Small incendiary warhead --incendiary-STP-mid=Incendiary warhead --napalm-STP-mid=Napalm warhead - -[warhead-description] - --incendiary-STP-small=A warhead capable of lighting a small fire --incendiary-STP-mid=A warhead capable of lighting fires in a small area --napalm-STP-mid=A warhead capable of lighting long lasting fires in a wide area - -[weapontype-name] -shotgun-shell-birdshot=Birdshot shell, 20x__1__ -shotgun-shell-buckshot=Buckshot shell, 6x__1__ -shotgun-shell-slug=Slug shell, __1__ - -rounds-magazine=Magazine, __1__ - -cannon-shell=Cannon shell, __1__ -small-rocket=Small rocket, __1__ -big-rocket=Large rocket, __1__ - -artillery-shell=Artillery shell, __1__ -derpy-artillery-ammo=Light Artillery ammo, __1__ - -land-mine=Land mine, __1__ -capsule=Throwable __1__ - -warhead-util-projectile=Utility provided by the mod, __1__ - -autocannon-shell=Autocannon shell (20mm), __1__ - -cannon-shell-75=Cannon shell (75mm), __1__ -cannon-shell-88=Cannon shell (88mm), __1__ -cannon-shell-128=Cannon shell (128mm), __1__ - -Schall-sniper-magazine=Magazine (sniper rifle), __1__ - -weapon-delivery-capsule=Weapon delivery capsule: __1__ - -aai-ironclad-mortar=Mortar: __1__ -rampant-mortar=Launcher ammo: __1__ - -pistol-magazine=Pistol magazine, __1__ -rifle-magazine=Rifle magazine, __1__ -anti-material-rifle-magazine=Anti-material rifle magazine, __1__ - -railgun-shell=Railgun shell, __1__ -turret-rocket=Turret rocket, __1__ - -[weapontype-description] -shotgun-shell-birdshot=A shell with high spread containing 20 small shots, each deploying:\n__1__ -shotgun-shell-buckshot=A shell containing 6 projectiles, each deploying:\n__1__ -shotgun-shell-slug=A shell deploying:\n__1__ - -rounds-magazine=10 rounds, for high fire-rate usage, deploying:\n__1__ -cannon-shell=A single high impact shell, deploying:\n__1__ -small-rocket=A light homing rocket, with short range but fast fire rate, each deploying:\n__1__ -big-rocket=A larger homing rocket, with much longer range, deploying:\n__1__ - -artillery-shell=Ammunition for artillery, deploying:\n__1__ - -derpy-artillery-ammo=Ammunition for light artillery, deploying:\n__1__ - -land-mine=A trap hidden in the ground, capable of deploying:\n__1__ -capsule=A handy throwable deployer for:\n__1__ - -aai-ironclad-mortar=A long-range arcing weapon, deploying:\n__1__ -rampant-mortar=An arcing weapon, deploying:\n__1__ - -warhead-util-projectile=Utility provided by the mod, deploying:\n__1__ - -autocannon-shell=10 20mm shells, deploying:\n__1__ - -cannon-shell-75=A single 75mm shell, deploying:\n__1__ -cannon-shell-88=A single 88mm shell, deploying:\n__1__ -cannon-shell-128=A single 128mm shell, deploying:\n__1__ - -Schall-sniper-magazine=10 rounds for the sniper rifle, deploying:\n__1__ - -weapon-delivery-capsule=An interplanitary weapon deploying __1__ - -pistol-magazine=10 rounds for the pistol, deploying:\n__1__ -rifle-magazine=10 rounds for the rifle, deploying:\n__1__ -anti-material-rifle-magazine=10 rounds for the anti-material rifle, deploying:\n__1__ - -railgun-shell=A railgun shell, deploying:\n__1__ -turret-rocket=A turret rocket, deploying:\n__1__ - -[item-name] -STP-incendiary-small=Small incendiary warhead -STP-incendiary-mid=Incendiary warhead -STP-napalm-mid=Napalm warhead diff --git a/Warheads_0.0.17/prototypes/compatibility/SE-weapontypes.lua b/Warheads_0.0.17/prototypes/compatibility/SE-weapontypes.lua deleted file mode 100644 index 38383498..00000000 --- a/Warheads_0.0.17/prototypes/compatibility/SE-weapontypes.lua +++ /dev/null @@ -1,65 +0,0 @@ -weaponTypes["se-delivery-cannon-weapon"]= { - type = "none", - max_size = "huge", - min_size = "tiny", - baseName = "se-delivery-cannon-weapon-pack-", - baseOrder = "d[cannon-shell]-d[atomic]-1", - base_item = "se-delivery-cannon-weapon-capsule", - - override = function (weapontype, warheadWeapon) - local ingredients = {{name = "se-delivery-cannon-weapon-capsule", amount = 1}} - - if(warheadWeapon.recipe.build_up_ingredient) then - log("Complicated: built up explosion flattened for SE-delivery cannon...") - for _, ing in pairs(data.raw.recipe["se-delivery-cannon-weapon-pack-" .. "warhead-util-projectile" .. warheadWeapon.recipe.build_up_ingredient.name].ingredients) do - if ing.name ~= "se-delivery-cannon-weapon-capsule" and ing[1] ~= "se-delivery-cannon-weapon-capsule" then - table.insert(ingredients, {name = ing.name or ing[1], amount = (ing.amount or ing[2])*warheadWeapon.recipe.build_up_ingredient.amount}) - end - end - else - table.insert(ingredients, {name = warheadWeapon.recipe.warhead_name, amount = 1}) - end - for _,i in pairs(warheadWeapon.recipe.additional_ingedients) do - table.insert(ingredients, i) - end - local results = {} - results = {{type="item", name="se-delivery-cannon-weapon-package-"..warheadWeapon.appendName, amount = 1}} - for _,r in pairs(warheadWeapon.recipe.additional_results) do - table.insert(results, r) - end - - - return { - valid = true, - item = { - type = "item", - name = "se-delivery-cannon-weapon-package-" .. warheadWeapon.appendName, - icon = "__space-exploration-graphics__/graphics/icons/delivery-cannon-weapon-capsule.png", - icon_size = 64, - order = "" .. warheadWeapon.appendOrder, - flags = {"hidden"}, - subgroup = "delivery-cannon-capsules", - stack_size = 1, - localised_name = {"weapontype-name.weapon-delivery-capsule", {"warhead-name." .. warheadWeapon.appendName}}, - localised_description= {"weapontype-description.weapon-delivery-capsule", {"warhead-description." .. warheadWeapon.appendName}} - }, - recipe = { - type = "recipe", - name = "se-delivery-cannon-weapon-pack-" .. "warhead-util-projectile" .. warheadWeapon.appendName, - icons = warheadWeapon.appearance.icons, - results = results, - enabled = false, - energy_required = 10, - ingredients = ingredients, - requester_paste_multiplier = 1, - always_show_made_in = false, - category = "delivery-cannon-weapon", - hide_from_player_crafting = true, - localised_name = {"weapontype-name.weapon-delivery-capsule", {"warhead-name." .. warheadWeapon.appendName}}, - localised_description= {"weapontype-description.weapon-delivery-capsule", {"warhead-description." .. warheadWeapon.appendName}}, - allow_decomposition = false - } - } - end -} - \ No newline at end of file diff --git a/Warheads_0.0.17/thumbnail.png b/Warheads_0.0.17/thumbnail.png deleted file mode 100644 index 5bf4a463..00000000 Binary files a/Warheads_0.0.17/thumbnail.png and /dev/null differ diff --git a/WideChests/LICENSE b/WideChests/LICENSE new file mode 100644 index 00000000..1e0cb048 --- /dev/null +++ b/WideChests/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Atria1234 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/WideChests/Readme.md b/WideChests/Readme.md new file mode 100644 index 00000000..b81fc657 --- /dev/null +++ b/WideChests/Readme.md @@ -0,0 +1,212 @@ +# Merging chests Factorio mod + +Since 5.0.0 the mod has support for other contributors to create merged variants of chests they created. This readme is trying to explain this process. + +## Adding support for another chest + +Create a mod which is dependant on "WideChests >= 5.0.0" and mod with the chest which should be mergable. + +### Settings stage + +#### MergingChests.create_mergeable_chest_setting + +Call `MergingChests.create_mergeable_chest_setting` to register new chest to create mod settings to make the chest mergable. + +This function has two arguments: +- `chest_name` (type `string`) - `name` of the chest entity prototype +- `options` (type `object`) - Object for modifying default behaviour. Has following properties + - `disable_chest` (type `boolean`) - Removes possibility to merge 1xN and Nx1 chests. Defaults to `false`. + - `disable_warehouse` (type `boolean`) - Removes possibility to merge chests into warehouses. Defaults to `false`. + - `disable_chest` (type `boolean`) - Removes possibility to merge chests into trashdumps. Defaults to `false`. + - `default_value` (type `string`) - Default value for the created mod setting. Defaults to maximum not disabled option. Possible values: + - `none` + - `chest` + - `warehouse` + - `chest-warehouse` + - `trashdump` + - `chest-trashdump` + - `warehouse-trashdump` + - `chest-warehouse-trashdump` + - `order` (type `string`) - Used to allow sorting the created mod settings. Final mod setting's `order` will be either `01-{order}-01` or `99-{order}-01` (if there are some custom settings enabled, see below). Defaults to `chest_name` parameter. + - `size_settings` (type `boolean`) - Creates additional mod settings for setting maximum width, height, area and whitelist specifically for this mergable chest. Defaults to `false`. + - `inventory_settings` (type `boolean`) - Creates additional mod settings for setting inventory size multiplier and inventory size limit specifically for this mergable chest. Defaults to `false`. + - `threshold_setting` (type `boolean`) - Creates additional mod setting for warehouse threshold specifically for this mergable chest. Defaults to `false`. + - `circuit_connection_setting` (type `boolean`) - Creates additional mod setting for circuit connector position specifically for this mergable chest. Defaults to `false`. + +Following translations should be provided: + - [chest-name] WideChests_wide-`chest-name` + - If `options.disable_chest` was not set + - [chest-name] WideChests_high-`chest-name` + - If `options.disable_chest` was not set + - [chest-name] WideChests_`chest-name`-warehouse + - If `options.disable_warehouse` was not set + - [chest-name] WideChests_`chest-name`-trashdump + - If `options.disable_trashdump` was not set + - [mod-setting-name] WideChests_mergeable-chest-`chest-name` + - [mod-setting-name] WideChests_max-chest-width-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_max-chest-height-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_max-chest-area-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_max-chest-area-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_whitelist-chest-sizes-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_mirror-whitelists-`chest-name` + - If `options.size_settings` was set + - [mod-setting-name] WideChests_inventory-size-multiplier-`chest-name` + - If `options.inventory_settings` was set + - [mod-setting-name] WideChests_inventory-size-limit-`chest-name` + - If `options.inventory_settings` was set + - [mod-setting-name] WideChests_warehouse-threshold-`chest-name` + - If `options.threshold_setting` was set + - [mod-setting-name] WideChests_circuit-connector-position-`chest-name` + - If `options.circuit_connection_setting` was set + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-none + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-chest + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-warehouse + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-trashdump + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-chest-warehouse + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-chest-trashdump + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-warehouse-trashdump + - [string-mod-setting] WideChests_mergeable-chest-`chest-name`-chest-warehouse-trashdump + - [string-mod-setting] + + And these if `options.circuit_connection_setting` was set: + WideChests_circuit-connector-position-center-center-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-right-top-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-right-middle-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-right-bottom-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-left-top-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-left-middle-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-left-bottom-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-bottom-right-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-bottom-middle-`chest_name` + - [string-mod-setting] WideChests_circuit-connector-position-bottom-left-`chest_name` + +#### MergingChests.delete_chest_name_settings + +Call `MergingChests.delete_chest_name_settings` if your mod removes some vanilla chest. + +For example: +```lua +MergingChests.delete_chest_name_settings('wooden-chest') +MergingChests.delete_chest_name_settings('iron-chest') +MergingChests.delete_chest_name_settings('steel-chest') +``` + +### Data stage + +Call `MergingChests.create_mergeable_chest` to create merged chest prototypes. + +This function has two arguments: +- `entity_data` (type `object`) - Has following properties: + - `chest_name` (type `string`) - `name` of the chest entity prototype. Have to be same as one called during setting stage + - `override_prototype_properties` (type `object`) - Object which will be appended to all merged chest prototypes of this mergable chest. Used to override default properties. Defaults to empty object. +- `segments_data` (type `object`) - Object describing individual segments of the merged chest sprites. See below for more details. + +#### Segments data + +Segments data object has following properties: + +- `wide_segments` +- `high_segments` +- `warehouse_segments` +- `trashdump_segments` + +All of them have following properties: + +- `entity` - required +- `shadow` - optional + +Merged chest sprite is created from individual segments drawn next to each other. This is basic 9-sliced sprite. There are these segments: + +- `top_left` - One put into top left corner +- `top` - Many put along top edge +- `top_right` - One put into top right corner +- `left` - Many put along left edge +- `middle` - Many put to fill in the middle of the chest +- `right`- etc. +- `bottom_left` +- `bottom` +- `bottom_right` + +There are also these special segments + +- `top_center` - One put in the middle of the top edge +- `left_center` - One put in the middle of the left edge +- `center` - One put in the middle of the chest +- `right_center` - etc. +- `bottom_center` + +Each segment has following properties: +- `filename` - Required +- `width` - Required +- `height` - Required +- `x` +- `y` +- `frame_count` +- `scale` +- `shift` +- `tint` + +To reduce redudancy it is also possible to move required properties from individual segments to the segments collection. The data in individual segments takes precedence. + +The properties are the same except `width` and `height`. They are replaced with `widths` (object of `left`, `middle` and `right` properties) and `heights` (object of `top`, `middle` and `bottom`). + +Each sprite segment can also be a list of segments instead. Random segment from the list will be taken every time a segment is placed into final sprite. + +```lua +local segments = { + wide_segments = { + entity = { + top_left = { + y = 12 + }, + top = { + x = 45 + y = 12, + filename = 'override filename' + }, + middle = { + { + x = 85, + y = 96 + }, + { + x = 185, + y = 196 + } + }, + -- other segments + + filename = 'filename used for all segments except "top"', + widths = { + left = 45, + middle = 64, + right = 85 + }, + heights = { + top = 81, + middle = 64, + bottom = 34 + } + } + } +} +``` + +For more info I'd suggest taking a look at types at the start of `/scripts/sprite_generation.lua` + +#### Prepared segment data + +There is `MergingChests.steel_chest_segments` which has default segment data for steel chest. Use these if you don't want to bother with custom segment data. + +There are also variants for logistic chests in WideChestsLogistic mod: + +- `MergingChestsLogistic.passive_provider_chest_segments` +- `MergingChestsLogistic.active_provider_chest_segments` +- `MergingChestsLogistic.storage_chest_segments` +- `MergingChestsLogistic.buffer_chest_segments` +- `MergingChestsLogistic.requester_chest_segments` diff --git a/WideChests/changelog.txt b/WideChests/changelog.txt new file mode 100644 index 00000000..40cff230 --- /dev/null +++ b/WideChests/changelog.txt @@ -0,0 +1,388 @@ +ο»Ώ--------------------------------------------------------------------------------------------------- +Version: 5.0.3 +Date: 17.2.2024 + Bugfixes: + - Fixed next_upgrade not working when the merge mod is not enabled. + Translation: + - Added Ukraine translations. Thanks to MetenBouldry + +--------------------------------------------------------------------------------------------------- +Version: 5.0.2 +Date: 3.2.2024 + Translation: + - Filled in missing german translations. Thanks to jonaelsasser + +--------------------------------------------------------------------------------------------------- +Version: 5.0.1 +Date: 18.1.2024 + Features: + - Added mod setting to mirror whitelist. When enabled you won't have to specify both "1xN" and "Nx1" in whitelist since either of them would be interpreted as both of them. + Bugfixes: + - Fixed whitelisting not working as expected. + - Fixed bar not being copied during merging and splitting. + +--------------------------------------------------------------------------------------------------- +Version: 5.0.0 +Date: 14.1.2024 + Features: + - Added mod setting to pick where circuit connector will be placed on the merged chests. + - Mod now checks if merging/splitting of chest would cause items to be deleted and mod setting can prevent merging/splitting in such cases. + - Lowered default values of width/height/area mod settings to speed up loading when using default settings. + - Replaced old single "Mergable chest" mod setting with mod settings for every individual mergeable chest. + - Merged chests can now be upgraded with upgrade planner. + Modding: + - Rewritten mod to allow other mods to create mergeable variants of their chests. + - Added events which are raised when chests are merged or split. + Bugfixes: + - Lua events are emitted when chests are created/destroyed during merging/splitting. + Info: + - Migration on existing saves WILL DELETE all chests wider/higher than 42. Don't upgrade if you have such chests in your save (there are no new groundbreaking features anyway). If you have chests smaller than that it should be ok to update, you will just have to update the mod settings after the update. + +--------------------------------------------------------------------------------------------------- +Version: 4.2.0 +Date: 13.8.2023 + Features: + - Added support for chests from Very Small Chests mod. + Graphics: + - Updated graphics of warehouses. + +--------------------------------------------------------------------------------------------------- +Version: 4.1.0 +Date: 30.1.2023 + Features: + - Added support for chests from Paper Chest mod. + +--------------------------------------------------------------------------------------------------- +Version: 4.0.3 +Date: 5.1.2023 + Translation: + - Updated English and German (provided by ST-DDT) translations. + +--------------------------------------------------------------------------------------------------- +Version: 4.0.2 +Date: 23.4.2022 + Bugfixes: + - Renamed Nullius chests to fit new version of Nullius. + +--------------------------------------------------------------------------------------------------- +Version: 4.0.1 +Date: 5.3.2022 + Bugfixes: + - Fixed changelog. + +--------------------------------------------------------------------------------------------------- +Version: 4.0.0 +Date: 4.3.2022 + Bugfixes: + - Fixed support for Nullius chests. + - Fixed type of chest placed when splitting Bob/Dyworld chests. This unfortunately means that all previously merged Bob/Dyworld chests are going to disappear. For Bob chests it is possible to first split the chests before installing this update, but there's no such fix for Dyworld chests. + +--------------------------------------------------------------------------------------------------- +Version: 3.6.0 +Date: 3.3.2022 + Features: + - Added support for Nullius chests. + +--------------------------------------------------------------------------------------------------- +Version: 3.5.0 +Date: 26.10.2021 + Features: + - Added support for DyWorld chests. + +--------------------------------------------------------------------------------------------------- +Version: 3.4.0 +Date: 19.6.2021 + Features: + - Implemented blueprint rotation that supports rotating merged chests within them. Key binding is unbound by default. + - Added support for copying item requests when requester chest is split (mod configuration in WideChestsLogistic). + +--------------------------------------------------------------------------------------------------- +Version: 3.3.0 +Date: 30.12.2020 + Features: + - Added possibility to merge logistic chests (only single line wide/high). This feature is enabled when you have "WideChestsLogistic" mod enabled. Beware of long loading time and higher memory usage. + Info: + - Added optional dependency on WideChestsLogistic. + Bugfixes: + - Fixed missing limit of red bar during merge of large chests. + +--------------------------------------------------------------------------------------------------- +Version: 3.2.1 +Date: 26.11.2020 + Info: + - Updated for Factorio 1.1. + +--------------------------------------------------------------------------------------------------- +Version: 3.2.0 +Date: 10.12.2020 + Translation: + - Added Russian localizations. + +--------------------------------------------------------------------------------------------------- +Version: 3.1.0 +Date: 15.8.2020 + Info: + - Updated for Factorio 1.0. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.7 +Date: 9.5.2020 + Bugfixes: + - Fixed incorrect check of whitelisted chests during merging. + - Moved updating chest stack size to data-final-fixes stage. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.6 +Date: 20.4.2020 + Bugfixes: + - Removed "Modify check stack size" mod setting seince now it has to be always on. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.5 +Date: 23.3.2020 + Features: + - Merging tool is now only available as shortcut. + Bugfixes: + - Fixed bug in new merged chest health calculation. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.4 +Date: 21.3.2020 + Bugfixes: + - Merged chest's health now scales with the size of the chest (up to 10 times the health of base chest). + +--------------------------------------------------------------------------------------------------- +Version: 3.0.3 +Date: 10.3.2020 + Bugfixes: + - Fixed merging algorithm bug. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.2 +Date: 28.1.2020 + Bugfixes: + - Added migration json which works with default mod settings. People who increased the limits and used those chests will either have to create their own migration json or bite the bullet and replace those chests in their save. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.1 +Date: 27.1.2020 + Bugfixes: + - Fixed modifying maximum chest stack size not working. + +--------------------------------------------------------------------------------------------------- +Version: 3.0.0 +Date: 23.1.2020 + Features: + - Added possibility to merge all basic chest types at once (only with each other). This feature is enabled when you have "WideChestsAllTypes" mod enabled. Beware of long loading time and higher memory usage. + - Bob's Brass and Titanium chests are now supported if you have both bobplates and boblogistics enabled. + - Enforced hard limits on maximum chest area (1600), width (42) and height (42). Increasing over this limit won't do anything unless you have "WideChestsUnlimited" mod enabled in which case there are no limits again. Beware of long loading time and higher memory usage. + Bugfixes: + - Fixed edge case creating chests out of thin air when merging specific arrangement of chests. + Info: + - Added optional dependency on boblogistics. + - Added optional dependency on bobplates. + - Added optional dependency on WideChestsAllTypes. + - Added optional dependency on WideChestsUnlimited. + +--------------------------------------------------------------------------------------------------- +Version: 2.2.2 +Date: 26.5.2019 + Bugfixes: + - Removed Fast replace group to merged chests. + +--------------------------------------------------------------------------------------------------- +Version: 2.2.1 +Date: 8.5.2019 + Bugfixes: + - Added maximum chest inventory size limit to game's limit of inventory size (65535). + - Multiplication sign "Γ—" can be used in whitelist setting instead of letter "x". + Translation: + - Added additional German localizations. + +--------------------------------------------------------------------------------------------------- +Version: 2.2.0 +Date: 19.4.2019 + Features: + - Added whitelist setting to limit creatable chests. + Info: + - Merged chests can no longer be upgraded using upgrade planner. + +--------------------------------------------------------------------------------------------------- +Version: 2.1.2 +Date: 21.3.2019 + Translation: + - Added German localizations. + +--------------------------------------------------------------------------------------------------- +Version: 2.1.1 +Date: 2.3.2019 + Bugfixes: + - Fixed Wide chest shadow bug. + Info: + - Added mod thumbnail. + +--------------------------------------------------------------------------------------------------- +Version: 2.1.0 +Date: 2.3.2019 + Features: + - Merging tool converted to shortcut and it is no longer available as a item. + - Updated Merged steel chest sprite. + Bugfixes: + - Fixed High chest shadow bug. + Info: + - Updated for Factorio 0.17. + - Added mod setting to revert back to old Merging tool (giving you the item back, found in blueprint library). + +--------------------------------------------------------------------------------------------------- +Version: 2.0.3 +Date: 29.9.2018 + Bugfixes: + - Fixed default width/height of chests to be 42 instead of 40. + - Fixed bug in merging algorithm. + +--------------------------------------------------------------------------------------------------- +Version: 2.0.2 +Date: 28.9.2018 + Bugfixes: + - Removed migration script to Version: 1.0.0 that caused error when loading on existing save. + +--------------------------------------------------------------------------------------------------- +Version: 2.0.1 +Date: 28.9.2018 + Bugfixes: + - Resized warehouse sprite to fit into low res sprite resolution restrictions. + +--------------------------------------------------------------------------------------------------- +Version: 2.0.0 +Date: 28.9.2018 + Major Features: + - Implemented merging of area chests. Maximum chest width, length and area is configurable in mod settings. + Features: + - Threshold when trashdump will be used (instead of warehouse) is configurable in mod settings. + - Only singular chests can be merged (alternative select merged chests to split them before merging them). + - Merge merge tool is now available in blueprint library for free. + - Added setting to modify mergable chest item stack size so that bots can build all possible chests. + - Implemented mod setting to select mergable chest type (wooden, iron or steel chest). + Info: + - Changelog filled. + +--------------------------------------------------------------------------------------------------- +Version: 1.9.3 +Date: 18.12.2017 + Major Features: + - Max chest size is no longer limited to 42. Configurable in mod settings. Default is still 42. + +--------------------------------------------------------------------------------------------------- +Version: 1.9.2 +Date: 13.12.2017 + Info: + - Updated for Factorio 0.16. + +--------------------------------------------------------------------------------------------------- +Version: 1.9.1 +Date: 19.11.2017 + Bugfixes: + - Fixed crash when merging full chests. + +--------------------------------------------------------------------------------------------------- +Version: 1.9.0 +Date: 16.11.2017 + Major Features: + - When placing blueprints the ghost is not divided into individual chests and bots delived entire chest in one go (and circuit connections are not destroyed). Maximum size a bots can build is steel chest stack size. + - Implemented advanced merging algorithm. Chests in selected area are merged by decresing sizes (horizontal chests are prefered) and single selection can merge chests in both directions. + Features: + - Circuit connections are merged (some cables may not reach after merging and will be missing, see example). + - Red inventory bar is also merged. + +--------------------------------------------------------------------------------------------------- +Version: 1.8.3 +Date: 8.10.2017 + Bugfixes: + - Fixed bug when merging vertical chests horizontaly and horizontal chests verticaly. + +--------------------------------------------------------------------------------------------------- +Version: 1.8.2 +Date: 27.5.2017 + Bugfixes: + - New Merge tool selector icon (to differentiate it from blueprints with chests in them). + +--------------------------------------------------------------------------------------------------- +Version: 1.8.1 +Date: 20.5.2017 + Translation: + - Added English, Czech and Russian localizations (if you want to add other look into locale\en\locale.cfg, translate and send it to me, I will add it). + +--------------------------------------------------------------------------------------------------- +Version: 1.8.0 +Date: 19.5.2017 + Major Features: + - Placing merged chests by blueprint will split it into steel chests that will be automaticly merged when they are all placed. + Features: + - Merging of already merged chests with other chests is now possible. + +--------------------------------------------------------------------------------------------------- +Version: 1.7.0 +Date: 17.5.2017 + Major Features: + - Alt selecting wide/high chests will split them into steel chests. Beware when changing inventory size in settings: some items can be destroyed. + - Player can select any non rectangular area of steel chests to merge them. Chests will be merged in direction of longer side (width or height). + +--------------------------------------------------------------------------------------------------- +Version: 1.6.1 +Date: 30.4.2017 + Bugfixes: + - Wide/High chest items are hidden from logistic requester and filter menu. + +--------------------------------------------------------------------------------------------------- +Version: 1.6.0 +Date: 30.4.2017 + Features: + - Added option to modify and limit chest size. + Bugfixes: + - Fixed on-player-selected-area event ignoring selection item. + +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 27.4.2017 + Info: + - Updated for Factorio 0.15. + +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 21.9.2016 + Bugfixes: + - Fixed crash when selecting area with zero size. + - Fixed config for chest recipes changing after initial migration. + +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 20.9.2016 + Features: + - Added config for what chest sizes should have recipes (for blueprints). + +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 20.9.2016 + Major Features: + - Contents of chests are now merged. + +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 18.9.2016 + Major Features: + - Added chests sizes up to 42 (cannot imagine anyone would need more...also more is impossible without reducing texture quality). + Bugfixes: + - Fixed error with naming mod. + +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 18.9.2016 + Major Features: + - Implemented chest merging. + - Added chest sizes up to 6. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 27.7.2016 + Major Features: + - First Version: with 3 and 6 wide chests. diff --git a/WideChests/control.lua b/WideChests/control.lua new file mode 100644 index 00000000..392d064d --- /dev/null +++ b/WideChests/control.lua @@ -0,0 +1,7 @@ +require('init') +require('control_init') + +require('scripts.event_handlers.merge_chest') +require('scripts.event_handlers.rotate_blueprint') +require('scripts.event_handlers.shortcut') +require('scripts.event_handlers.split_chest') diff --git a/WideChests/control_init.lua b/WideChests/control_init.lua new file mode 100644 index 00000000..5160e64a --- /dev/null +++ b/WideChests/control_init.lua @@ -0,0 +1,173 @@ +local fmath = require("__flib__.math") + +--- @alias chest_merged_event { player_index: number, surface: LuaSurface, split_chests: LuaEntity[], merged_chest: LuaEntity } + +--- @param entity LuaEntity +--- @return integer +local function non_blank_inventory_slots_count(entity) + local count = 0 + local inventory = entity.get_inventory(defines.inventory.chest) + if inventory then + for i = 1, #inventory do + if inventory[i].valid_for_read then + count = count + 1 + end + end + end + + return count +end + +--- @param from_entities LuaEntity[] +--- @param to_entity_name string +--- @param to_entity_count integer +--- @return boolean +function MergingChests.can_move_inventories(from_entities, to_entity_name, to_entity_count) + local from_item_count = 0 + for _, from_entity in ipairs(from_entities) do + from_item_count = from_item_count + non_blank_inventory_slots_count(from_entity) + end + + local to_inventory_size = game.entity_prototypes[to_entity_name].get_inventory_size(defines.inventory.chest) or 0 + + local is_merged_chest, _, _ = MergingChests.get_merged_chest_info(to_entity_name) + + return from_item_count <= (is_merged_chest and MergingChests.get_inventory_size(to_inventory_size, to_entity_count, to_entity_name) or to_inventory_size * to_entity_count) +end + +--- @param from_entities LuaEntity[] +--- @param to_entities LuaEntity[] +function MergingChests.move_inventories(from_entities, to_entities) + local to_entity_index = 1 + local to_inventory_index = 1 + + for _, from_entity in ipairs(from_entities) do + local from_inventory = from_entity.get_inventory(defines.inventory.chest) + if from_inventory then + for i = 1, #from_inventory do + local item = from_inventory[i] + if item.valid_for_read then + local to_inventory = to_entities[to_entity_index].get_inventory(defines.inventory.chest) + if to_inventory then + to_inventory[to_inventory_index].set_stack(item) + to_inventory_index = to_inventory_index + 1 + + if to_inventory_index > #to_inventory then + to_entity_index = to_entity_index + 1 + to_inventory_index = 1 + end + end + end + end + end + end +end + +--- @param from_entities LuaEntity[] +--- @param to_entities LuaEntity[] +function MergingChests.move_inventory_bar(from_entities, to_entities) + local bar_count = 0 + for _, entity in ipairs(from_entities) do + local inventory = entity.get_inventory(defines.inventory.chest) + if inventory and inventory.supports_bar() then + bar_count = bar_count + inventory.get_bar() - 1 + end + end + + local to_entities_count = table_size(to_entities) + for _, entity in ipairs(to_entities) do + local inventory = entity.get_inventory(defines.inventory.chest) + if inventory and inventory.supports_bar() then + local bar = fmath.round(bar_count / to_entities_count) + inventory.set_bar(bar + 1) + bar_count = bar_count - bar + to_entities_count = to_entities_count - 1 + end + end +end + +--- @param from_entities LuaEntity[] +--- @param to_entities LuaEntity[] +function MergingChests.reconnect_circuits(from_entities, to_entities) + local from_entities_set = { } + for _, from_entity in ipairs(from_entities) do + from_entities_set[from_entity] = from_entity + end + + local connections = { } + local red = false + local green = false + for _, from_entity in ipairs(from_entities) do + for _, connection in ipairs(from_entity.circuit_connection_definitions) do + if not from_entities_set[connection.target_entity] then + table.insert(connections, connection) + + red = red or connection.wire == defines.wire_type.red + green = green or connection.wire == defines.wire_type.green + end + end + end + + if #connections > 0 then + -- connect all "to_entities" entities together + local grid = MergingChests.entities_to_grid(to_entities) + for x = grid.min_x, grid.max_x do + for y = grid.min_y, grid.max_y do + if red then + if x + 1 <= grid.max_x then + grid[x][y].connect_neighbour{wire = defines.wire_type.red, target_entity = grid[x + 1][y]} + end + if y + 1 <= grid.max_y then + grid[x][y].connect_neighbour{wire = defines.wire_type.red, target_entity = grid[x][y + 1]} + end + end + + if green then + if x + 1 <= grid.max_x then + grid[x][y].connect_neighbour{wire = defines.wire_type.green, target_entity = grid[x + 1][y]} + end + if y + 1 <= grid.max_y then + grid[x][y].connect_neighbour{wire = defines.wire_type.green, target_entity = grid[x][y + 1]} + end + end + end + end + + + -- connect to all outside entities + for _, connection in ipairs(connections) do + local closest_entity = nil + local min = nil + + for _, to_entity in ipairs(to_entities) do + local diffX = to_entity.position.x - connection.target_entity.position.x + local diffY = to_entity.position.y - connection.target_entity.position.y + + if not min or (diffX * diffX + diffY * diffY < min) then + min = diffX * diffX + diffY * diffY + closest_entity = to_entity + end + end + + if closest_entity then + closest_entity.connect_neighbour(connection) + end + end + end +end + +MergingChests.on_chest_merged_event_name = script.generate_event_name() +MergingChests.on_chest_split_event_name = script.generate_event_name() + +local function get_chest_merged_event_name() + return MergingChests.on_chest_merged_event_name +end + +local function get_chest_split_event_name() + return MergingChests.on_chest_split_event_name +end + +remote.add_interface('MergingChests', { + get_chest_merged_event_name = get_chest_merged_event_name, + get_chest_split_event_name = get_chest_split_event_name +}) diff --git a/WideChests/data.lua b/WideChests/data.lua new file mode 100644 index 00000000..6f3923ec --- /dev/null +++ b/WideChests/data.lua @@ -0,0 +1,260 @@ +require('init') +require('data_init') + +require('prototypes.custom_input') +require('prototypes.groups') +require('prototypes.item') +require('prototypes.shortcuts') + +--- @type segments_data +MergingChests.steel_chest_segments = { + wide_segments = { + entity = { + filename = '__WideChests__/graphics/entity/steel-chest/wide-chest/wide-chest.png', + top_left = { x = 0, y = 0 }, + top = { x = 32, y = 0 }, + top_right = { x = 64, y = 0 }, + + widths = { left = 64, middle = 64, right = 64 }, + heights = { + top = 80, + middle = 0, + bottom = 0 + }, + shift = { x = -0.25, y = -4.5 }, + scale = 0.5 + }, + shadow = { + filename = '__WideChests__/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png', + top_right = { x = 60, y = 0, shift = { x = 30 } }, + + widths = { left = 0, middle = 0, right = 50 }, + heights = { + top = 46, + middle = 0, + bottom = 0 + }, + shift = { x = 0.75, y = 12.5 }, + scale = 0.5, + shadow = true + } + }, + high_segments = { + entity = { + filename = '__WideChests__/graphics/entity/steel-chest/high-chest/high-chest.png', + top_left = { x = 0, y = 0, shift = { y = 5 } }, + left = { x = 0, y = 22 }, + bottom_left = { x = 0, y = 54 }, + + widths = { left = 64, middle = 0, right = 0 }, + heights = { + top = 54, + middle = 64, + bottom = 90 + }, + shift = { x = -0.25, y = -9.5 }, + scale = 0.5 + }, + shadow = { + filename = '__WideChests__/graphics/entity/steel-chest/high-chest/high-chest-shadow.png', + top_right = { x = 0, y = 0, shift = { y = 6.5 } }, + right = { x = 0, y = 18 }, + bottom_right = { x = 0, y = 45 }, + + widths = { left = 0, middle = 0, right = 110 }, + heights = { + top = 55, + middle = 64, + bottom = 55 + }, + shift = { x = 0.75, y = 6 }, + scale = 0.5, + shadow = true + } + }, + warehouse_segments = { + entity = { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse.png', + + top_left = { x = 0, y = 0, shift = { y = 7 } }, + top = { x = 66, y = 0, shift = { y = 7 } }, + top_right = { x = 130, y = 0, shift = { y = 7 } }, + + left = { + { x = 0, y = 75 }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png', + y = 57 + } + }, + middle = { + { x = 66, y = 75 }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png', + y = 57 + } + }, + right = { + { x = 130, y = 75 }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png', + y = 57 + }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png', + y = 57 + } + }, + + bottom_left = { x = 0, y = 139 }, + bottom = { + { x = 66, y = 139 }, + { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png' + } + }, + bottom_right = { x = 130, y = 139 }, + + widths = { left = 66, middle = 64, right = 66 }, + heights = { + top = 50, + middle = 64, + bottom = 110 + }, + shift = { x = 0, y = -23 }, + scale = 0.5 + }, + shadow = { + filename = '__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-shadow.png', + + top_right = { x = 0, y = 0, shift = { x = 32, y = 7 } }, + + right = { x = 0, y = 49, shift = { x = 32 } }, + + bottom_right = { x = 0, y = 113, shift = { x = 32 } }, + + widths = { right = 120 }, + heights = { + top = 50, + middle = 64, + bottom = 50 + }, + shift = { x = -1, y = 6 }, + scale = 0.5, + shadow = true + } + }, + trashdump_segments = { + entity = { + filename = '__WideChests__/graphics/entity/steel-chest/trashdump/trashdump-entity.png', + + top_left = { x = 0, y = 0 }, + top = { x = 36, y = 0 }, + top_right = { x = 72, y = 0 }, + + left = { x = 0, y = 41 }, + right = { x = 72, y = 41 }, + + bottom_left = { x = 0, y = 85, shift = { x = 1 } }, + bottom = { x = 36, y = 85 }, + bottom_right = { x = 72, y = 85 }, + + widths = { left = 32, middle = 32, right = 32 }, + heights = { + top = 37, + middle = 40, + bottom = 35 + }, + shift = { x = 0, y = -8 } + }, + shadow = { + filename = '__WideChests__/graphics/entity/steel-chest/trashdump/trashdump-shadow.png', + + top_left = { x = 0, y = 0 }, + top = { x = 63, y = 0, shift = { x = -16 } }, + top_right = { x = 136, y = 0, shift = { x = -17 } }, + + left = { x = 0, y = 60 }, + right = { x = 0, y = 60 }, + + bottom_left = { x = 0, y = 116 }, + bottom = { x = 63, y = 0, shift = { x = -16 } }, + bottom_right = { x = 136, y = 116, shift = { x = -16 } }, + + widths = { left = 42, middle = 58, right = 44 }, + heights = { + top = 50, + middle = 47, + bottom = 16 + }, + shift = { x = 18, y = 27 }, + shadow = true + } + } +} + +MergingChests.create_mergeable_chest( + { + chest_name = 'wooden-chest' + }, + MergingChests.steel_chest_segments +) +MergingChests.create_mergeable_chest( + { + chest_name = 'iron-chest' + }, + MergingChests.steel_chest_segments +) +MergingChests.create_mergeable_chest( + { + chest_name = 'steel-chest' + }, + MergingChests.steel_chest_segments +) + +MergingChests.set_next_upgrade_of('container', 'wooden-chest', 'iron-chest') +MergingChests.set_next_upgrade_of('container', 'iron-chest', 'steel-chest') diff --git a/WideChests/data_init.lua b/WideChests/data_init.lua new file mode 100644 index 00000000..6a1b2984 --- /dev/null +++ b/WideChests/data_init.lua @@ -0,0 +1,304 @@ +local create_sprite = require('scripts.sprite_generation') + +--- @param chest_name string +--- @param width number +--- @param height number +local function get_circuit_connector(chest_name, width, height) + local mod_settings = MergingChests.get_mod_settings(chest_name) + local variation, x, y + local _, _, side, position = string.find(mod_settings.circuit_connector_position, '([^-]+)[-]([^-]+)') + + if side == 'right' then + variation = 24 + x = -width / 2 + elseif side == 'left' then + variation = 28 + x = width / 2 + elseif side == 'bottom' then + variation = 26 + y = height / 2 - 0.5 + elseif side == 'center' then + if width >= height then + variation = 26 + x = 0 + y = height / 2 - 0.5 + else + variation = 24 + x = -width / 2 + y = 0 + end + end + + if position == 'top' then + y = -height / 2 + 0.5 + elseif position == 'middle' then + if x == nil then + x = 0 + else + y = 0 + end + elseif position == 'bottom' then + y = height / 2 - 0.75 + elseif position == 'right' then + x = -width / 2 + 0.5 + elseif position == 'left' then + x = width / 2 - 0.5 + end + + return circuit_connector_definitions.create( + universal_connector_template, + { + { + variation = variation, + main_offset = { x, y }, + shadow_offset = { x + 0.1, y + 0.1 }, + show_shadow = false + } + } + ) +end + +--- @alias entity_data +--- | { chest_name: string, override_prototype_properties?: table } + +--- @param entity_data entity_data +--- @param loc_name table +--- @param subgroup string +--- @param width number +--- @param height number +--- @param segment_data entity_sprite +local function create_entity(entity_data, loc_name, subgroup, width, height, segment_data) + local base_chest = data.raw['logistic-container'][entity_data.chest_name] or data.raw.container[entity_data.chest_name] + + if base_chest == nil then + error('Chest with name '..entity_data.chest_name..' not found') + end + + local sprite = create_sprite(width, height, segment_data) + local connector = get_circuit_connector(entity_data.chest_name, width, height) + + local type_specific_properties + if base_chest.logistic_mode then + type_specific_properties = { + type = 'logistic-container', + logistic_mode = base_chest.logistic_mode, + animation_sound = base_chest.animation_sound, + opened_duration = 7, + animation = { + layers = sprite + } + } + + if base_chest.logistic_mode == 'storage' then + type_specific_properties.max_logistic_slots = 1 + end + else + type_specific_properties = { + type = 'container', + picture = { + layers = sprite + } + } + end + + local merged_chest_name = MergingChests.get_merged_chest_name(entity_data.chest_name, width, height) + + table.insert(data.raw['selection-tool'][MergingChests.merge_selection_tool_name].alt_entity_filters, merged_chest_name) + + return util.merge({ + type_specific_properties, + { + name = merged_chest_name, + localised_name = loc_name, + icon = base_chest.icon, + icons = base_chest.icons, + icon_size = base_chest.icon_size, + fast_replaceable_group = 'merged-container', + open_sound = base_chest.open_sound, + close_sound = base_chest.close_sound, + max_health = base_chest.max_health * math.min(width * height, 10), + inventory_size = MergingChests.get_inventory_size(base_chest.inventory_size, width * height, entity_data.chest_name), + flags = { 'placeable-player', 'player-creation' }, + minable = { mining_time = 2, result = entity_data.chest_name, count = width * height }, + placeable_by = { item = entity_data.chest_name, count = width * height }, + corpse = 'medium-remnants', + dying_explosion = 'medium-explosion', + vehicle_impact_sound = { filename = '__base__/sound/car-metal-impact.ogg', volume = 0.65 }, + collision_box = { { -width / 2 + 0.15, -height / 2 + 0.15 }, { width / 2 - 0.15, height / 2 - 0.15 } }, + selection_box = { { -width / 2, -height / 2 }, { width / 2, height / 2 } }, + subgroup = subgroup, + circuit_wire_connection_point = connector.points, + circuit_connector_sprites = connector.sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance + math.min(width, height) - 1, + }, + entity_data.override_prototype_properties or {} + }) +end + +--- @param entity_data entity_data +--- @param segment_data entity_sprite +--- @param width number +local function create_wide_chest_entity(entity_data, segment_data, width) + return create_entity( + entity_data, + { 'chest-name.'..MergingChests.prefix_with_modname('wide-'..entity_data.chest_name), width }, + MergingChests.item_group_names.wide_chests, + width, + 1, + segment_data + ) +end + +--- @param entity_data entity_data +--- @param segment_data entity_sprite +--- @param height number +local function create_high_chest_entity(entity_data, segment_data, height) + return create_entity( + entity_data, + { 'chest-name.'..MergingChests.prefix_with_modname('high-'..entity_data.chest_name), height }, + MergingChests.item_group_names.high_chests, + 1, + height, + segment_data + ) +end + +--- @param entity_data entity_data +--- @param segment_data entity_sprite +--- @param width number +--- @param height number +local function create_warehouse_entity(entity_data, segment_data, width, height) + return create_entity( + entity_data, + { 'chest-name.'..MergingChests.prefix_with_modname(entity_data.chest_name..'-warehouse'), width, height }, + MergingChests.item_group_names.warehouses, + width, + height, + segment_data + ) +end + +--- @param entity_data entity_data +--- @param segment_data entity_sprite +--- @param width number +--- @param height number +local function create_trashdump_entity(entity_data, segment_data, width, height) + return create_entity( + entity_data, + { 'chest-name.'..MergingChests.prefix_with_modname(entity_data.chest_name..'-trashdump'), width, height }, + MergingChests.item_group_names.trashdumps, + width, + height, + segment_data + ) +end + +--- @type { [setting_allowed_value]: boolean[] } +local setting_value_to_enabled_flags = { + ['none'] = { false, false, false }, + ['chest'] = { true, false, false }, + ['warehouse'] = { false, true, false }, + ['trashdump'] = { false, false, true }, + ['chest-warehouse'] = { true, true, false }, + ['chest-trashdump'] = { true, false, true }, + ['warehouse-trashdump'] = { false, true, true }, + ['chest-warehouse-trashdump'] = { true, true, true } +} + +--- Creates merged chest prototypes +--- +--- Reads settings made during settings stage with same `chest_name`. +--- @param entity_data entity_data +--- @param segments_data segments_data +function MergingChests.create_mergeable_chest(entity_data, segments_data) + local setting = settings.startup[MergingChests.chest_specific_setting_name(MergingChests.setting_names.mergeable_chest, entity_data.chest_name)] + local enable_chest, enable_warehouse, enable_trashdump = table.unpack( + setting_value_to_enabled_flags[setting and setting.value or 'none'] + ) + + if setting and MergingChests.is_mod_active(MergingChests.all_types_mod_name) then + enable_chest = true + enable_warehouse = true + enable_trashdump = true + end + + local mod_settings = MergingChests.get_mod_settings(entity_data.chest_name) + local max_area = 0 + + if enable_chest and segments_data.high_segments then + for height = 2, math.min(mod_settings.max_height, mod_settings.max_area) do + if MergingChests.is_size_allowed(1, height, entity_data.chest_name) then + data:extend({ create_high_chest_entity(entity_data, segments_data.high_segments, height) }) + max_area = math.max(max_area, height) + end + end + end + + for width = 2, math.min(mod_settings.max_width, mod_settings.max_area) do + if enable_chest and segments_data.wide_segments then + if MergingChests.is_size_allowed(width, 1, entity_data.chest_name) then + data:extend({ create_wide_chest_entity(entity_data, segments_data.wide_segments, width) }) + max_area = math.max(max_area, width) + end + end + + for height = 2, math.min(mod_settings.max_height, mod_settings.max_area) do + if MergingChests.is_size_allowed(width, height, entity_data.chest_name) then + if enable_trashdump and width > mod_settings.warehouse_threshold and height > mod_settings.warehouse_threshold and segments_data.trashdump_segments then + data:extend({ create_trashdump_entity(entity_data, segments_data.trashdump_segments, width, height) }) + max_area = math.max(max_area, width * height) + elseif enable_warehouse and segments_data.warehouse_segments then + data:extend({ create_warehouse_entity(entity_data, segments_data.warehouse_segments, width, height) }) + max_area = math.max(max_area, width * height) + end + end + end + end + + if enable_chest or enable_warehouse or enable_trashdump then + table.insert(data.raw['selection-tool'][MergingChests.merge_selection_tool_name].entity_filters, entity_data.chest_name) + data.raw.item[entity_data.chest_name].stack_size = math.max(data.raw.item[entity_data.chest_name].stack_size, max_area) + end +end + +--- Sets next_upgrade of chests of type `type` merged from `chest_name` +--- @param type `logistic-container` | `container` +--- @param chest_name string +--- @param next_upgrade string +function MergingChests.set_next_upgrade_of(type, chest_name, next_upgrade) + for _, prototype in pairs(data.raw[type]) do + local name, width, height = MergingChests.get_merged_chest_info(prototype.name) + if name == chest_name and width and height then + local merged_upgrade_name = MergingChests.get_merged_chest_name(next_upgrade, width, height) + if data.raw[type][merged_upgrade_name] then + prototype.next_upgrade = merged_upgrade_name + end + end + end +end + +--- Disables next_upgrade of chests of type `type` merged from `chest_name` +--- @param type `logistic-container` | `container` +--- @param chest_name string +function MergingChests.disable_next_upgrade_of(type, chest_name) + for _, prototype in pairs(data.raw[type]) do + local name, _ = MergingChests.get_merged_chest_info(prototype.name) + if name == chest_name then + prototype.next_upgrade = nil + end + end +end + +--- Disables next_upgrade of chests which of type `type` which are upgraded to `chest_name` +--- @param type `logistic-container` | `container` +--- @param chest_name string +function MergingChests.disable_next_upgrade_to(type, chest_name) + for _, prototype in pairs(data.raw[type]) do + if prototype.next_upgrade then + local name, _ = MergingChests.get_merged_chest_info(prototype.next_upgrade) + if name == chest_name then + prototype.next_upgrade = nil + end + end + end +end diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/high-chest/high-chest-shadow.png b/WideChests/graphics/entity/steel-chest/high-chest/high-chest-shadow.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/high-chest/high-chest-shadow.png rename to WideChests/graphics/entity/steel-chest/high-chest/high-chest-shadow.png diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/high-chest/high-chest.png b/WideChests/graphics/entity/steel-chest/high-chest/high-chest.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/steel-chest/high-chest/high-chest.png rename to WideChests/graphics/entity/steel-chest/high-chest/high-chest.png diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/trashdump/trashdump-entity.png b/WideChests/graphics/entity/steel-chest/trashdump/trashdump-entity.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/steel-chest/trashdump/trashdump-entity.png rename to WideChests/graphics/entity/steel-chest/trashdump/trashdump-entity.png diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/trashdump/trashdump-shadow.png b/WideChests/graphics/entity/steel-chest/trashdump/trashdump-shadow.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/steel-chest/trashdump/trashdump-shadow.png rename to WideChests/graphics/entity/steel-chest/trashdump/trashdump-shadow.png diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png new file mode 100644 index 00000000..0d6d08b8 Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png new file mode 100644 index 00000000..66840ca0 Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png new file mode 100644 index 00000000..36bf5e2d Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png new file mode 100644 index 00000000..1ea55faf Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png new file mode 100644 index 00000000..8304ef5a Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png new file mode 100644 index 00000000..653fec88 Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse-shadow.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-shadow.png new file mode 100644 index 00000000..bb3775ae Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse-shadow.png differ diff --git a/WideChests/graphics/entity/steel-chest/warehouse/warehouse.png b/WideChests/graphics/entity/steel-chest/warehouse/warehouse.png new file mode 100644 index 00000000..35ffdaf8 Binary files /dev/null and b/WideChests/graphics/entity/steel-chest/warehouse/warehouse.png differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/wide-chest/wide-chest-shadow.png b/WideChests/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/wide-chest/wide-chest-shadow.png rename to WideChests/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/wide-chest/wide-chest.png b/WideChests/graphics/entity/steel-chest/wide-chest/wide-chest.png similarity index 100% rename from WideChests_4.2.0/graphics/entity/steel-chest/wide-chest/wide-chest.png rename to WideChests/graphics/entity/steel-chest/wide-chest/wide-chest.png diff --git a/WideChests/graphics/icons/merge-chest-selector.png b/WideChests/graphics/icons/merge-chest-selector.png new file mode 100644 index 00000000..d86b9982 Binary files /dev/null and b/WideChests/graphics/icons/merge-chest-selector.png differ diff --git a/WideChests/graphics/icons/merge-shortcut.png b/WideChests/graphics/icons/merge-shortcut.png new file mode 100644 index 00000000..5eba968d Binary files /dev/null and b/WideChests/graphics/icons/merge-shortcut.png differ diff --git a/WideChests/info.json b/WideChests/info.json new file mode 100644 index 00000000..2bf8d198 --- /dev/null +++ b/WideChests/info.json @@ -0,0 +1,15 @@ +{ + "name": "WideChests", + "version": "5.0.3", + "factorio_version": "1.1", + "title": "Merging Chests", + "author": "Atria", + "contact": "tomas.chmelik2@gmail.com", + "homepage": "https://github.com/Atria1234/WideChests", + "description": "Enables merging of multiple chests into one entity. Supports merging of arbitrary number of chests (configurable in mod settings).", + "dependencies": [ + "flib >= 0.12.9", + "? WideChestsAllTypes", + "? WideChestsUnlimited" + ] +} diff --git a/WideChests/init.lua b/WideChests/init.lua new file mode 100644 index 00000000..d35a4886 --- /dev/null +++ b/WideChests/init.lua @@ -0,0 +1,307 @@ +require "util" + +--- @class MergingChests +MergingChests = MergingChests or { } + +MergingChests.mod_name = 'WideChests' +MergingChests.all_types_mod_name = 'WideChestsAllTypes' +MergingChests.unlimited_mod_name = 'WideChestsUnlimited' + +function MergingChests.is_mod_active(mod) + return (mods or script.active_mods)[mod] +end + +--- @param value string +function MergingChests.prefix_with_modname(value) + return MergingChests.mod_name..'_'..value +end + +--- @param setting_name string +--- @param chest_name string +--- @return string +function MergingChests.chest_specific_setting_name(setting_name, chest_name) + return setting_name..'-'..chest_name +end + +MergingChests.custom_input_names = { + rotate_blueprint_clockwise = MergingChests.prefix_with_modname('rotate-blueprint-clockwise'), + rotate_blueprint_counterclockwise = MergingChests.prefix_with_modname('rotate-blueprint-couterclockwise') +} + +MergingChests.item_group_names = { + merged_chests = MergingChests.prefix_with_modname('merged-chests'), + wide_chests = MergingChests.prefix_with_modname('wide-chests'), + high_chests = MergingChests.prefix_with_modname('high-chests'), + warehouses = MergingChests.prefix_with_modname('warehouses'), + trashdumps = MergingChests.prefix_with_modname('trashdumps'), +} + +MergingChests.merge_selection_tool_name = MergingChests.prefix_with_modname('merge-chest-selector') + +MergingChests.merge_shortcut_name = MergingChests.prefix_with_modname('merge-chest-selector') + +MergingChests.setting_names = { + mergeable_chest = MergingChests.prefix_with_modname('mergeable-chest'), + max_width = MergingChests.prefix_with_modname('max-chest-width'), + max_height = MergingChests.prefix_with_modname('max-chest-height'), + max_area = MergingChests.prefix_with_modname('max-chest-area'), + whitelist = MergingChests.prefix_with_modname('whitelist-chest-sizes'), + mirror_whitelist = MergingChests.prefix_with_modname('mirror-whitelists'), + inventory_size_multiplier = MergingChests.prefix_with_modname('inventory-size-multiplier'), + inventory_size_limit = MergingChests.prefix_with_modname('inventory-size-limit'), + sprite_decal_chance = MergingChests.prefix_with_modname('sprite-decal-chance'), + warehouse_threshold = MergingChests.prefix_with_modname('warehouse-threshold'), + circuit_connector_position = MergingChests.prefix_with_modname('circuit-connector-position'), + allow_delete_items = MergingChests.prefix_with_modname('allow-delete-items') +} + +local WHITELIST_SIZE_ANY = 'any' + +--- @alias size_whitelist -- two dimentional array[width][height] = enabled? +--- | { [number | `WHITELIST_SIZE_ANY`]: { [number | `WHITELIST_SIZE_ANY`]: boolean } } + +--- @alias circuit_connector_position +--- | 'right-top' +--- | 'right-middle' +--- | 'right-bottom' +--- | 'center-center' +--- | 'left-top' +--- | 'left-middle' +--- | 'left-bottom' +--- | 'bottom-right' +--- | 'bottom-middle' +--- | 'bottom-left' + +--- @alias mod_settings +--- | { chest_name: string | nil } +--- | { max_width: number, max_height: number, max_area: number, size_whitelist: size_whitelist } +--- | { inventory_size_multiplier: number, inventory_size_limit: number } +--- | { warehouse_threshold: number, sprite_variation_chance: number } +--- | { circuit_connector_position: circuit_connector_position } + +--- @param value string +--- @param mirror boolean +--- @return size_whitelist +local function parse_whitelist_setting(value, mirror) + local size_whitelist = { } + local has_item = false + for width, height in string.gmatch(value, '([%dN]+)[Γ—xX$*]([%dN]+)') do + if (tonumber(width) or width == 'N') and (tonumber(height) or height == 'N') then + width = tonumber(width) or WHITELIST_SIZE_ANY + height = tonumber(height) or WHITELIST_SIZE_ANY + if not size_whitelist[width] then + size_whitelist[width] = { } + has_item = true + end + if mirror and not size_whitelist[height] then + size_whitelist[height] = { } + has_item = true + end + + if not size_whitelist[width][WHITELIST_SIZE_ANY] then + size_whitelist[width][height] = true + end + if mirror and not size_whitelist[height][WHITELIST_SIZE_ANY] then + size_whitelist[height][width] = true + end + end + end + + if not has_item then + size_whitelist = { [WHITELIST_SIZE_ANY] = { [WHITELIST_SIZE_ANY] = true } } + end + + return size_whitelist +end + +--- @param chest_name string | nil +--- @return mod_settings +local function parse_settings(chest_name) + local function get_startup_setting_value(setting_name) + local setting = chest_name and settings.startup[MergingChests.chest_specific_setting_name(setting_name, chest_name)] or settings.startup[setting_name] + return setting and setting.value + end + + --- @type mod_settings + local mod_settings = { + chest_name = chest_name, + mergeable_chest = MergingChests.is_mod_active(MergingChests.all_types_mod_name) and 'all' or get_startup_setting_value(MergingChests.setting_names.mergeable_chest), + max_width = get_startup_setting_value(MergingChests.setting_names.max_width), + max_height = get_startup_setting_value(MergingChests.setting_names.max_height), + max_area = get_startup_setting_value(MergingChests.setting_names.max_area), + inventory_size_multiplier = get_startup_setting_value(MergingChests.setting_names.inventory_size_multiplier), + inventory_size_limit = get_startup_setting_value(MergingChests.setting_names.inventory_size_limit), + size_whitelist = parse_whitelist_setting(get_startup_setting_value(MergingChests.setting_names.whitelist), get_startup_setting_value(MergingChests.setting_names.mirror_whitelist)), + sprite_variation_chance = get_startup_setting_value(MergingChests.setting_names.sprite_decal_chance), + warehouse_threshold = get_startup_setting_value(MergingChests.setting_names.warehouse_threshold), + circuit_connector_position = get_startup_setting_value(MergingChests.setting_names.circuit_connector_position), + } + + if not MergingChests.is_mod_active(MergingChests.unlimited_mod_name) then + mod_settings.max_width = math.min(mod_settings.max_width, 42) + mod_settings.max_height = math.min(mod_settings.max_height, 42) + mod_settings.max_area = math.min(mod_settings.max_area, 1600) + end + return mod_settings +end + +--- @type { [string]: mod_settings | nil } +local cached_mod_settings = { + default = nil +} + +--- @param chest_name string | nil +--- @return mod_settings +function MergingChests.get_mod_settings(chest_name) + local chest_name_or_default = chest_name or 'default' + if cached_mod_settings[chest_name_or_default] == nil then + cached_mod_settings[chest_name_or_default] = parse_settings(chest_name) + if chest_name then + log('Merging chests mod settings for "'..chest_name..'": '..serpent.line(cached_mod_settings[chest_name_or_default])) + else + log('Default merging chests mod settings: '..serpent.line(cached_mod_settings[chest_name_or_default])) + end + end + return cached_mod_settings[chest_name_or_default] +end + +--- Checks if width and height is allowed both by size limits and whitelist mod settings +--- @param width integer +--- @param height integer +--- @param chest_name string | nil +function MergingChests.is_size_allowed(width, height, chest_name) + local mod_settings = MergingChests.get_mod_settings(chest_name) + + local size_whitelist = mod_settings.size_whitelist + return ( + width <= mod_settings.max_width and + height <= mod_settings.max_height and + width * height <= mod_settings.max_area and + ( + size_whitelist[width] and (size_whitelist[width][height] or size_whitelist[width][WHITELIST_SIZE_ANY]) or + size_whitelist[WHITELIST_SIZE_ANY] and (size_whitelist[WHITELIST_SIZE_ANY][height] or size_whitelist[WHITELIST_SIZE_ANY][WHITELIST_SIZE_ANY]) + ) + ) +end + +--- @param merged_chest_name string Possible merged chest name +--- @return string | nil chest_name Split chest name +--- @return integer | nil width Chest width +--- @return integer | nil height Chest height +function MergingChests.get_merged_chest_info(merged_chest_name) + local chest_name, width, height + _, _, chest_name, width = string.find(merged_chest_name, '^'..MergingChests.mod_name..'_wide[-](.*)[-]([1-9][0-9]*)$') + if chest_name and width then + return chest_name, tonumber(width), 1 + end + + _, _, chest_name, height = string.find(merged_chest_name, '^'..MergingChests.mod_name..'_high[-](.*)[-]([1-9][0-9]*)$') + if chest_name and height then + return chest_name, 1, tonumber(height) + end + + _, _, chest_name, width, height = string.find(merged_chest_name, '^'..MergingChests.mod_name..'_(.*)[-]warehouse[-]([1-9][0-9]*)x([1-9][0-9]*)$') + if chest_name and width and height then + return chest_name, tonumber(width), tonumber(height) + end + + _, _, chest_name, width, height = string.find(merged_chest_name, '^'..MergingChests.mod_name..'_(.*)[-]trashdump[-]([1-9][0-9]*)x([1-9][0-9]*)$') + if chest_name and width and height then + return chest_name, tonumber(width), tonumber(height) + end + + return nil, nil, nil +end + +--- @param chest_name string +--- @param width integer +--- @param height integer +--- @return string +function MergingChests.get_merged_chest_name(chest_name, width, height) + if width > 1 and height > 1 then + local mod_settings = MergingChests.get_mod_settings(chest_name) + if width > mod_settings.warehouse_threshold and height > mod_settings.warehouse_threshold then + return MergingChests.get_trashdump_name(chest_name, width, height) + else + return MergingChests.get_warehouse_name(chest_name, width, height) + end + elseif width > 1 then + return MergingChests.get_wide_chest_name(chest_name, width) + else + return MergingChests.get_high_chest_name(chest_name, height) + end +end + +--- @param chest_name string +--- @param width integer +--- @return string +function MergingChests.get_wide_chest_name(chest_name, width) + return MergingChests.prefix_with_modname('wide-'..chest_name..'-'..width) +end + +--- @param chest_name string +--- @param height integer +--- @return string +function MergingChests.get_high_chest_name(chest_name, height) + return MergingChests.prefix_with_modname('high-'..chest_name..'-'..height) +end + +--- @param chest_name string +--- @param width integer +--- @param height integer +--- @return string +function MergingChests.get_warehouse_name(chest_name, width, height) + return MergingChests.prefix_with_modname(chest_name..'-warehouse-'..width..'x'..height) +end + +--- @param chest_name string +--- @param width integer +--- @param height integer +--- @return string +function MergingChests.get_trashdump_name(chest_name, width, height) + return MergingChests.prefix_with_modname(chest_name..'-trashdump-'..width..'x'..height) +end + +--- Returns final inventory size of the chest, modified by mod settings +--- @param default_inventory_size integer +--- @param tiles integer +--- @param chest_name string | nil +--- @return integer +function MergingChests.get_inventory_size(default_inventory_size, tiles, chest_name) + local mod_settings = MergingChests.get_mod_settings(chest_name) + return util.clamp( + math.floor(default_inventory_size * tiles * mod_settings.inventory_size_multiplier), + 1, + mod_settings.inventory_size_limit + ) +end + +--- @alias Grid +--- | LuaEntity[][] +--- | { min_x: integer, min_y: integer, max_x: integer, max_y: integer } + +--- @param entities LuaEntity +--- @return Grid +function MergingChests.entities_to_grid(entities) + --- @type Grid + local grid = { + min_x = math.huge, + min_y = math.huge, + max_x = -math.huge, + max_y = -math.huge, + } + for _, entity in ipairs(entities) do + local x = math.floor(entity.position.x) + local y = math.floor(entity.position.y) + + grid[x] = grid[x] or { } + grid[x][y] = entity + + grid.min_x = math.min(grid.min_x, x) + grid.min_y = math.min(grid.min_y, y) + grid.max_x = math.max(grid.max_x, x) + grid.max_y = math.max(grid.max_y, y) + end + + return grid +end diff --git a/WideChests/locale/cs/locale.cfg b/WideChests/locale/cs/locale.cfg new file mode 100644 index 00000000..6a33e139 --- /dev/null +++ b/WideChests/locale/cs/locale.cfg @@ -0,0 +1,104 @@ +[item-group-name] +WideChests_merged-chests=SpojenΓ© bedny + +[chest-name] +WideChests_wide-wooden-chest=DΕ™evΔ›nΓ‘ chest __1__ Ε‘irokΓ‘ +WideChests_high-wooden-chest=DΕ™evΔ›nΓ‘ truhla __1__ high +WideChests_wooden-warehouse=DΕ™evΔ›nΓ½ sklad __1__ x __2__ +WideChests_wooden-trashdump=DΕ™evΔ›nΓ‘ sklΓ‘dka __1__ x __2__ + +WideChests_wide-iron-chest=Ε½eleznΓ‘ truhla __1__ Ε‘irokΓ‘ +WideChests_high-iron-chest=Ε½eleznΓ‘ truhla __1__ vysokΓ‘ +WideChests_iron-warehouse=Ε½eleznΓ½ sklad __1__ x __2__ +WideChests_iron-trashdump=Ε½eleznΓ‘ sklΓ‘dka __1__ x __2__ + +WideChests_wide-steel-chest=OcelovΓ‘ truhla __1__ Ε‘irokΓ‘ +WideChests_high-steel-chest=OcelovΓ‘ truhla __1__ vysokΓ‘ +WideChests_steel-warehouse=OcelovΓ½ sklad __1__ x __2__ +WideChests_steel-trashdump=OcelovΓ‘ sklΓ‘dka __1__ x __2__ + +[item-name] +WideChests_merge-chest-selector=NΓ‘stroj pro spojovΓ‘nΓ­ beden + +[shortcut-name] +WideChests_merge-chest-selector=SpojovΓ‘nΓ­ beden + +[controls] +WideChests_rotate-blueprint-clockwise=Otočit plΓ‘n +WideChests_rotate-blueprint-couterclockwise=ReverznΓ­ otÑčenΓ­ plΓ‘nu + +[controls-description] +WideChests_rotate-blueprint-clockwise=Funguje se spojenΓ½mi bednami. +WideChests_rotate-blueprint-couterclockwise=Funguje se spojenΓ½mi bednami. + +[mod-setting-name] +WideChests_mergeable-chest-wooden=Spojitelnost dΕ™evΔ›nΓ© bedny +WideChests_mergeable-chest-iron=Spojitelnost ΕΎeleznΓ© bedny +WideChests_mergeable-chest-steel=Spojitelnost ocelovΓ© bedny +WideChests_max-chest-width=MaximΓ‘lnΓ­ Ε‘Γ­Ε™ka bedny +WideChests_max-chest-height=MaximΓ‘lnΓ­ vΓ½Ε‘ka bedny +WideChests_max-chest-area=MaximΓ‘lnΓ­ plocha bedny +WideChests_inventory-size-multiplier=Nasobič velikosti inventΓ‘Ε™e truhel +WideChests_inventory-size-limit=Limit velikosti inventΓ‘Ε™e truhel +WideChests_sprite-decal-chance=Ε ance na variaci vzhledu bedny +WideChests_warehouse-threshold=Hranice velikosti skladu +WideChests_whitelist-chest-sizes=Seznam povolenΓ½ch velikostΓ­ beden +WideChests_mirror-whitelists=Zrdcadlit seznam povolenΓ½ch velikostΓ­ beden +WideChests_circuit-connector-position=Pozice pΕ™ipojenΓ­ k sΓ­Ε₯i +WideChests_allow-delete-items=Dovolit mazat pΕ™edmΔ›ty + +[mod-setting-description] +WideChests_max-chest-width=MaximΓ‘lnΓ­ Ε‘Γ­Ε™ka spojenΓ© bedny. Nainstalujte mod WideChestsUnlimited, pokud chcete limit vyΕ‘Ε‘Γ­ neΕΎ 42. +WideChests_max-chest-height=MaximΓ‘lnΓ­ vΓ½Ε‘ka spojenΓ© bedny. Nainstalujte mod WideChestsUnlimited, pokud chcete limit vyΕ‘Ε‘Γ­ neΕΎ 42. +WideChests_max-chest-area=MaximΓ‘lnΓ­ plocha spojenΓ© bedny. Nainstalujte mod WideChestsUnlimited, pokud chcete limit vyΕ‘Ε‘Γ­ neΕΎ 1600. +WideChests_inventory-size-multiplier=UpravovΓ‘nΓ­ tΓ©to hodnoty mΕ―ΕΎe zpΕ―sobit ztrΓ‘tu pΕ™edmΔ›tΕ― bΔ›hem spojovΓ‘nΓ­ nebo rozdΔ›lovΓ‘nΓ­ truhel! +WideChests_inventory-size-limit=UpravovΓ‘nΓ­ tΓ©to hodnoty mΕ―ΕΎe zpΕ―sobit ztrΓ‘tu pΕ™edmΔ›tΕ― bΔ›hem spojovΓ‘nΓ­ nebo rozdΔ›lovΓ‘nΓ­ truhel! +WideChests_sprite-decal-chance=Hodnota kolik procent obrΓ‘zek bedny bude obsahovat variace. +WideChests_warehouse-threshold=PΕ™i spojenΓ­ oblasti s Ε‘Γ­Ε™kou a vΓ½Ε‘kou vΔ›tΕ‘Γ­ neΕΎ X se pouΕΎije sklΓ‘dka. +WideChests_whitelist-chest-sizes=Seznam hodnot AxB (oddΔ›lenΓ½ch mezerou) kde A a B jsou libovolnΓ‘ čísla nebo velkΓ© pΓ­smeno N (označuje zΓ‘stupnΓ½ znak). +WideChests_mirror-whitelists=Pokud zapnuto tak uz nenΓ­ potΕ™eba specifikovat "AxB" i "BxA". Jeden z nich stačí, aby druhΓ½ byl automaticky zapnutΓ½. +WideChests_circuit-connector-position=Kde na spojenΓ© bednΔ› bude pΕ™ipojenΓ­ k sΓ­Ε₯i +WideChests_allow-delete-items=DovolΓ­ mazΓ‘nΓ­ pΕ™edmΔ›tΕ― pΕ™i spojovΓ‘nΓ­ a rozdΔ›lovΓ‘nΓ­ beden. + +[string-mod-setting] +WideChests_mergeable-chest-wooden-none=Vypnout +WideChests_mergeable-chest-wooden-chest=Jenom bedny +WideChests_mergeable-chest-wooden-warehouse=Jenom sklady +WideChests_mergeable-chest-wooden-trashdump=Jenom sklΓ‘dky +WideChests_mergeable-chest-wooden-chest-warehouse=Bedny a sklady +WideChests_mergeable-chest-wooden-chest-trashdump=Bedny a sklΓ‘dky +WideChests_mergeable-chest-wooden-warehouse-trashdump=Sklady a sklΓ‘dky +WideChests_mergeable-chest-wooden-chest-warehouse-trashdump=VΕ‘e + +WideChests_mergeable-chest-iron-none=Vypnout +WideChests_mergeable-chest-iron-chest=Jenom bedny +WideChests_mergeable-chest-iron-warehouse=Jenom sklady +WideChests_mergeable-chest-iron-trashdump=Jenom sklΓ‘dky +WideChests_mergeable-chest-iron-chest-warehouse=Bedny a sklady +WideChests_mergeable-chest-iron-chest-trashdump=Bedny a sklΓ‘dky +WideChests_mergeable-chest-iron-warehouse-trashdump=Sklady a sklΓ‘dky +WideChests_mergeable-chest-iron-chest-warehouse-trashdump=VΕ‘e + +WideChests_mergeable-chest-steel-none=Vypnout +WideChests_mergeable-chest-steel-chest=Jenom bedny +WideChests_mergeable-chest-steel-warehouse=Jenom sklady +WideChests_mergeable-chest-steel-trashdump=Jenom sklΓ‘dky +WideChests_mergeable-chest-steel-chest-warehouse=Bedny a sklady +WideChests_mergeable-chest-steel-chest-trashdump=Bedny a sklΓ‘dky +WideChests_mergeable-chest-steel-warehouse-trashdump=Sklady a sklΓ‘dky +WideChests_mergeable-chest-steel-chest-warehouse-trashdump=VΕ‘e + +WideChests_circuit-connector-position-center-center=NejblΓ­ΕΎ stΕ™edu bedny +WideChests_circuit-connector-position-right-top=Vpravo nahoΕ™e +WideChests_circuit-connector-position-right-middle=Vpravo veprostΕ™ed +WideChests_circuit-connector-position-right-bottom=Vpravo dole +WideChests_circuit-connector-position-left-top=Vlevo nahoΕ™e +WideChests_circuit-connector-position-left-middle=Vlevo veporostΕ™ed +WideChests_circuit-connector-position-left-bottom=Vlevo dole +WideChests_circuit-connector-position-bottom-right=Dole vpravo +WideChests_circuit-connector-position-bottom-middle=Dole veprostΕ™ed +WideChests_circuit-connector-position-bottom-left=Dole vlevo + +[flying-text] +WideChests_items-would-be-deleted-merge=SpojenΓ­ by smazalo nΔ›kterΓ© pΕ™edmety +WideChests_items-would-be-deleted-split=RozdΔ›lenΓ­ by smazalo nΔ›kterΓ© pΕ™edmety diff --git a/WideChests/locale/de/locale.cfg b/WideChests/locale/de/locale.cfg new file mode 100644 index 00000000..37dff961 --- /dev/null +++ b/WideChests/locale/de/locale.cfg @@ -0,0 +1,104 @@ +[item-group-name] +WideChests_merged-chests=Verbundene Kisten + +[chest-name] +WideChests_wide-wooden-chest=Holzkiste __1__ breit +WideChests_high-wooden-chest=Holzkiste __1__ hoch +WideChests_wooden-warehouse=Holzverkleidete Lagerhalle __1__ x __2__ +WideChests_wooden-trashdump=HolzumzΓ€unte MΓΌlldeponie __1__ x __2__ + +WideChests_wide-iron-chest=Eisenkiste __1__ breit +WideChests_high-iron-chest=Eisenkiste __1__ hoch +WideChests_iron-warehouse=Eisenverkleidete Lagerhalle __1__ x __2__ +WideChests_iron-trashdump=EisenumzΓ€unte MΓΌlldeponie __1__ x __2__ + +WideChests_wide-steel-chest=Stahlkiste __1__ breit +WideChests_high-steel-chest=Stahlkiste __1__ hoch +WideChests_steel-warehouse=Stahlverkleidete Lagerhalle __1__ x __2__ +WideChests_steel-trashdump=StahlumzΓ€unte MΓΌlldeponie __1__ x __2__ + +[item-name] +WideChests_merge-chest-selector=Kistenverbinder + +[shortcut-name] +WideChests_merge-chest-selector=Kistenverbinder + +[controls] +WideChests_rotate-blueprint-clockwise=Rotiere die Blaupause im Uhrzeigersinn +WideChests_rotate-blueprint-couterclockwise=Rotiere die Blaupause gegen den Uhrzeigersinn + +[controls-description] +WideChests_rotate-blueprint-clockwise=Funktioniert auch fΓΌr Blaupausen mit verbundenen Kisten. +WideChests_rotate-blueprint-couterclockwise=Funktioniert auch fΓΌr Blaupausen mit verbundenen Kisten. + +[mod-setting-name] +WideChests_mergeable-chest-wooden=Holzkisten Modus +WideChests_mergeable-chest-iron=Eisenkisten Modus +WideChests_mergeable-chest-steel=Stahlkisten Modus +WideChests_max-chest-width=Maximale Kistenbreite +WideChests_max-chest-height=Maximale KistenhΓΆhe +WideChests_max-chest-area=Maximale KistenflΓ€che +WideChests_inventory-size-multiplier=Inventar-Grâßen-Multiplikator +WideChests_inventory-size-limit=Inventar-Grâßen-Limit +WideChests_sprite-decal-chance=Wahrscheinlichkeit fΓΌr Verzierung +WideChests_warehouse-threshold=Lagerhaus-Grâßen-Limit +WideChests_whitelist-chest-sizes=Whitelist fΓΌr verbundene Kisten +WideChests_mirror-whitelists=Whitelist Einstellung Spiegeln +WideChests_circuit-connector-position=Netzwerk Verbindungs Position +WideChests_allow-delete-items=GegenstΓ€nd lΓΆschung Erlauben + +[mod-setting-description] +WideChests_max-chest-width=Maximale Breite von verbunden Kisten. Installiere den WideChestsUnlimited Mod, wenn du die BeschrΓ€nkung auf ΓΌber 42 anheben mΓΆchtest. +WideChests_max-chest-height=Maximale HΓΆhe von verbunden Kisten. Installiere den WideChestsUnlimited Mod, wenn du die BeschrΓ€nkung auf ΓΌber 42 anheben mΓΆchtest. +WideChests_max-chest-area=Maximale FlΓ€che von verbunden Kisten. Installiere den WideChestsUnlimited Mod, wenn du die BeschrΓ€nkung auf ΓΌber 1600 anheben mΓΆchtest. +WideChests_inventory-size-multiplier=Wenn diese Einstellung geΓ€ndert wird, kann es beim Verbinden/Trennen zum Verlust von GegenstΓ€nden kommen. +WideChests_inventory-size-limit=Wenn diese Einstellung geΓ€ndert wird, kann es beim Verbinden/Trennen zum Verlust von GegenstΓ€nden kommen. +WideChests_sprite-decal-chance=Wahrscheinlichkeit in Prozent, dass eine Verzierung hinzugefΓΌgt wird. +WideChests_warehouse-threshold=MΓΌlldeponie wird verwendet, wenn die FlΓ€che der verbundenen Kisten grâßer als X ist. +WideChests_whitelist-chest-sizes=Eine Liste von AxB Werten (getrennt durch Leerzeichen), wo A bzw. B eine belibiege Zahl oder der Großbuchstabe-N (gleichbedeutend einem Platzhalter) sein kann. +WideChests_mirror-whitelists=Wenn aktiv muss nicht "AxB" und "BxA" angegeben werden. Beide Typen werden akzeptiert. +WideChests_circuit-connector-position=Gibt an wo Netzwerk Verbinder auf Verbundenen Kisten platziert wird. +WideChests_allow-delete-items=Erlaubt lΓΆschen von GegenstΓ€nden bei verbinden oder teilen von Verbundenen Kisten. + +[string-mod-setting] +WideChests_mergeable-chest-wooden-none=Keine +WideChests_mergeable-chest-wooden-chest=Nur Kisten +WideChests_mergeable-chest-wooden-warehouse=Nur Lagerhaus +WideChests_mergeable-chest-wooden-trashdump=Nur MΓΌlldeponie +WideChests_mergeable-chest-wooden-chest-warehouse=Kisten und Lagerhaus +WideChests_mergeable-chest-wooden-chest-trashdump=Kisten und MΓΌlldeponie +WideChests_mergeable-chest-wooden-warehouse-trashdump=Lagerhaus und MΓΌlldeponie +WideChests_mergeable-chest-wooden-chest-warehouse-trashdump=Alle + +WideChests_mergeable-chest-iron-none=Keine +WideChests_mergeable-chest-iron-chest=Nur Kisten +WideChests_mergeable-chest-iron-warehouse=Nur Lagerhaus +WideChests_mergeable-chest-iron-trashdump=Nur MΓΌlldeponie +WideChests_mergeable-chest-iron-chest-warehouse=Kisten und Lagerhaus +WideChests_mergeable-chest-iron-chest-trashdump=Kisten und MΓΌlldeponie +WideChests_mergeable-chest-iron-warehouse-trashdump=Lagerhaus und MΓΌlldeponie +WideChests_mergeable-chest-iron-chest-warehouse-trashdump=Alle + +WideChests_mergeable-chest-steel-none=Keine +WideChests_mergeable-chest-steel-chest=Nur Kisten +WideChests_mergeable-chest-steel-warehouse=Nur Lagerhaus +WideChests_mergeable-chest-steel-trashdump=Nur MΓΌlldeponie +WideChests_mergeable-chest-steel-chest-warehouse=Kisten und Lagerhaus +WideChests_mergeable-chest-steel-chest-trashdump=Kisten und MΓΌlldeponie +WideChests_mergeable-chest-steel-warehouse-trashdump=Lagerhaus und MΓΌlldeponie +WideChests_mergeable-chest-steel-chest-warehouse-trashdump=Alle + +WideChests_circuit-connector-position-center-center=Mittig +WideChests_circuit-connector-position-right-top=Rechts Oben +WideChests_circuit-connector-position-right-middle=Rechts Mitte +WideChests_circuit-connector-position-right-bottom=Rechts Unten +WideChests_circuit-connector-position-left-top=Links Oben +WideChests_circuit-connector-position-left-middle=Links Mitte +WideChests_circuit-connector-position-left-bottom=Links Unten +WideChests_circuit-connector-position-bottom-right=Unten Rechts +WideChests_circuit-connector-position-bottom-middle=Unten Mitte +WideChests_circuit-connector-position-bottom-left=Unten Links + +[flying-text] +WideChests_items-would-be-deleted-merge=Kisten verbinden wΓΌrde GegenstΓ€nde lΓΆschen +WideChests_items-would-be-deleted-split=Kisten teilenm wΓΌrde GegenstΓ€nde lΓΆschen diff --git a/WideChests/locale/en/locale.cfg b/WideChests/locale/en/locale.cfg new file mode 100644 index 00000000..b81684a0 --- /dev/null +++ b/WideChests/locale/en/locale.cfg @@ -0,0 +1,104 @@ +[item-group-name] +WideChests_merged-chests=Merged chests + +[chest-name] +WideChests_wide-wooden-chest=Wooden chest __1__ wide +WideChests_high-wooden-chest=Wooden chest __1__ high +WideChests_wooden-chest-warehouse=Wooden warehouse __1__ x __2__ +WideChests_wooden-chest-trashdump=Wooden trashdump __1__ x __2__ + +WideChests_wide-iron-chest=Iron chest __1__ wide +WideChests_high-iron-chest=Iron chest __1__ high +WideChests_iron-chest-warehouse=Iron warehouse __1__ x __2__ +WideChests_iron-chest-trashdump=Iron trashdump __1__ x __2__ + +WideChests_wide-steel-chest=Steel chest __1__ wide +WideChests_high-steel-chest=Steel chest __1__ high +WideChests_steel-chest-warehouse=Steel warehouse __1__ x __2__ +WideChests_steel-chest-trashdump=Steel trashdump __1__ x __2__ + +[item-name] +WideChests_merge-chest-selector=Chest Merge Tool + +[shortcut-name] +WideChests_merge-chest-selector=Merging Chests + +[controls] +WideChests_rotate-blueprint-clockwise=Rotate blueprint clockwise +WideChests_rotate-blueprint-couterclockwise=Rotate blueprint couterclockwise + +[controls-description] +WideChests_rotate-blueprint-clockwise=Works on blueprints with merged chests. +WideChests_rotate-blueprint-couterclockwise=Works on blueprints with merged chests. + +[mod-setting-name] +WideChests_mergeable-chest-wooden-chest=Wooden chest merge mode +WideChests_mergeable-chest-iron-chest=Iron chest merge mode +WideChests_mergeable-chest-steel-chest=Steel chest merge mode +WideChests_max-chest-width=Maximum chest width +WideChests_max-chest-height=Maximum chest height +WideChests_max-chest-area=Maximum chest area +WideChests_inventory-size-multiplier=Inventory size multiplier +WideChests_inventory-size-limit=Inventory size limit +WideChests_sprite-decal-chance=Change for sprite decal +WideChests_warehouse-threshold=Warehouse size threshold +WideChests_whitelist-chest-sizes=Whitelist of merged chests +WideChests_mirror-whitelists=Mirror whitelist setting +WideChests_circuit-connector-position=Circuit connection position +WideChests_allow-delete-items=Allow void items + +[mod-setting-description] +WideChests_max-chest-width=Maximum width of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 42. +WideChests_max-chest-height=Maximum height of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 42. +WideChests_max-chest-area=Maximum area of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 1600. +WideChests_inventory-size-multiplier=Merged chest's inventory size is sum of inventory sizes of individual merged chests. This number is than multiplied by this setting. +WideChests_inventory-size-limit=Maximum inventory size a merged chest can have. Normally merged chest's inventory size is sum of inventory sizes of individual merged chests (and then multiplied by above multiplier). +WideChests_sprite-decal-chance=Percent chance of decals (graphical variety) to appear on merged chests. So far only warehouses (merged chests with both sides larger between 1 and "Warehouse size threshold") have decals. +WideChests_warehouse-threshold=Trashdump will be used when merging area larger than X on both sides. +WideChests_whitelist-chest-sizes=Specified which chests are enabled. It's a list of values like 'AxB' separated by space, 'A' and 'B' can either be a integer (greater than 0) or 'N' that represent a wildcard (meaning it will match everything). For example, "1x6 2x4 13xN" will only allow 1x6, 2x4, 13x1, 13x2, 13x3, 13x4, etc... chests to be mergeable. Default 'NxN' allow anything (so up to 42x42 by default). +WideChests_mirror-whitelists=When enabled you don't have to specify both "AxB" and "BxA". Either one of them will work as both of them. +WideChests_circuit-connector-position=Specifies where the circuit connector will be placed on the merged chests. +WideChests_allow-delete-items=Allows deleting items during merging or splitting of chests. + +[string-mod-setting] +WideChests_mergeable-chest-wooden-chest-none=None +WideChests_mergeable-chest-wooden-chest-chest=Only chest +WideChests_mergeable-chest-wooden-chest-warehouse=Only warehouse +WideChests_mergeable-chest-wooden-chest-trashdump=Only trashdump +WideChests_mergeable-chest-wooden-chest-chest-warehouse=Chest and warehouse +WideChests_mergeable-chest-wooden-chest-chest-trashdump=Chest and trashdump +WideChests_mergeable-chest-wooden-chest-warehouse-trashdump=Warehouse and trashdump +WideChests_mergeable-chest-wooden-chest-chest-warehouse-trashdump=All + +WideChests_mergeable-chest-iron-chest-none=None +WideChests_mergeable-chest-iron-chest-chest=Only chest +WideChests_mergeable-chest-iron-chest-warehouse=Only warehouse +WideChests_mergeable-chest-iron-chest-trashdump=Only trashdump +WideChests_mergeable-chest-iron-chest-chest-warehouse=Chest and warehouse +WideChests_mergeable-chest-iron-chest-chest-trashdump=Chest and trashdump +WideChests_mergeable-chest-iron-chest-warehouse-trashdump=Warehouse and trashdump +WideChests_mergeable-chest-iron-chest-chest-warehouse-trashdump=All + +WideChests_mergeable-chest-steel-chest-none=None +WideChests_mergeable-chest-steel-chest-chest=Only chest +WideChests_mergeable-chest-steel-chest-warehouse=Only warehouse +WideChests_mergeable-chest-steel-chest-trashdump=Only trashdump +WideChests_mergeable-chest-steel-chest-chest-warehouse=Chest and warehouse +WideChests_mergeable-chest-steel-chest-chest-trashdump=Chest and trashdump +WideChests_mergeable-chest-steel-chest-warehouse-trashdump=Warehouse and trashdump +WideChests_mergeable-chest-steel-chest-chest-warehouse-trashdump=All + +WideChests_circuit-connector-position-center-center=Closest to center +WideChests_circuit-connector-position-right-top=Right top +WideChests_circuit-connector-position-right-middle=Right middle +WideChests_circuit-connector-position-right-bottom=Right bottom +WideChests_circuit-connector-position-left-top=Left top +WideChests_circuit-connector-position-left-middle=Left middle +WideChests_circuit-connector-position-left-bottom=Left bottom +WideChests_circuit-connector-position-bottom-right=Bottom right +WideChests_circuit-connector-position-bottom-middle=Bottom middle +WideChests_circuit-connector-position-bottom-left=Bottom left + +[flying-text] +WideChests_items-would-be-deleted-merge=Merge would cause item to be deleted +WideChests_items-would-be-deleted-split=Split would cause item to be deleted diff --git a/WideChests/locale/ru/locale.cfg b/WideChests/locale/ru/locale.cfg new file mode 100644 index 00000000..a3a75466 --- /dev/null +++ b/WideChests/locale/ru/locale.cfg @@ -0,0 +1,104 @@ +[item-group-name] +WideChests_merged-chests=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉ сундук + +[chest-name] +WideChests_wide-wooden-chest=ДСрСвянный сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ +WideChests_high-wooden-chest=ДСрСвянный сундук высотой __1__ +WideChests_wooden-warehouse=ДСрСвянный склад __1__ x __2__ +WideChests_wooden-trashdump=ДСрСвянная свалка __1__ x __2__ + +WideChests_wide-iron-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ +WideChests_high-iron-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук высотой __1__ +WideChests_iron-warehouse=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ склад __1__ x __2__ +WideChests_iron-trashdump=ЖСлСзная свалка __1__ x __2__ + +WideChests_wide-steel-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ +WideChests_high-steel-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук высотой __1__ +WideChests_steel-warehouse=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ склад __1__ x __2__ +WideChests_steel-trashdump=Π‘Ρ‚Π°Π»ΡŒΠ½Π°Ρ свалка __1__ x __2__ + +[item-name] +WideChests_merge-chest-selector=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ сундуков + +[shortcut-name] +WideChests_merge-chest-selector=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ сундуки + +[controls] +WideChests_rotate-blueprint-clockwise=Rotate blueprint clockwise (translate please) +WideChests_rotate-blueprint-couterclockwise=Rotate blueprint couterclockwise (translate please) + +[controls-description] +WideChests_rotate-blueprint-clockwise=Works on blueprints with merged chests. (translate please) +WideChests_rotate-blueprint-couterclockwise=Works on blueprints with merged chests. (translate please) + +[mod-setting-name] +WideChests_mergeable-chest-wooden=Wooden chest merge mode (translate please) +WideChests_mergeable-chest-iron=Iron chest merge mode (translate please) +WideChests_mergeable-chest-steel=Steel chest merge mode (translate please) +WideChests_max-chest-width=Максимальная ΡˆΠΈΡ€ΠΈΠ½Π° сундука +WideChests_max-chest-height=Максимальная высота сундука +WideChests_max-chest-area=Максимальная ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ сундука +WideChests_inventory-size-multiplier=ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° инвСнтаря +WideChests_inventory-size-limit=Π›ΠΈΠΌΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° инвСнтаря +WideChests_sprite-decal-chance=Шанс добавлСния Π΄Π΅ΠΊΠ°Π»ΠΈ ΠΊ спрайту склада +WideChests_warehouse-threshold=ΠŸΠΎΡ€ΠΎΠ³ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для свалки +WideChests_whitelist-chest-sizes=ДопустимыС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ сундуков +WideChests_mirror-whitelists=Mirror whitelist setting (translate please) +WideChests_circuit-connector-position=Circuit connection position (translate please) +WideChests_allow-delete-items=Allow void items (translate please) + +[mod-setting-description] +WideChests_max-chest-width=Максимальная ΡˆΠΈΡ€ΠΈΠ½Π° объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 42. +WideChests_max-chest-height=Максимальная высота объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 42. +WideChests_max-chest-area=Максимальная ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 1600. +WideChests_inventory-size-multiplier=ИзмСняя эту ΠΎΠΏΡ†ΠΈΡŽ, Π²Ρ‹ рискуСтС Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого ΠΏΡ€ΠΈ объСдинСнии/Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ сундуков! +WideChests_inventory-size-limit=ИзмСняя эту ΠΎΠΏΡ†ΠΈΡŽ, Π²Ρ‹ рискуСтС Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого ΠΏΡ€ΠΈ объСдинСнии/Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ сундуков! +WideChests_sprite-decal-chance=Шанс добавлСния ΠΊ сСгмСнту ΠΊΡ€Ρ‹ΡˆΠΈ склада Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄Π΅ΠΊΠ°Π»Π΅ΠΉ (ΠΏΠΎΠ΄Ρ‚Ρ‘ΠΊΠΈ/Ρ‚Ρ€ΡƒΠ±Ρ‹/etc). +WideChests_warehouse-threshold=Π‘Π²Π°Π»ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто складов с ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ И высотой большС X. +WideChests_whitelist-chest-sizes=Набор ΠΏΠ°Ρ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π¨xΠ’ (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ) Π³Π΄Π΅ Π¨ ΠΈ Π’ Ρ†Π΅Π»Ρ‹Π΅ числа Π»ΠΈΠ±ΠΎ большая Π±ΡƒΠΊΠ²Π° N (ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ любоС число). +WideChests_mirror-whitelists=When enabled you don't have to specify both "AxB" and "BxA". Either one of them will work as both of them. (translate please) +WideChests_circuit-connector-position=Specifies where the circuit connector will be placed on the merged chests. (translate please) +WideChests_allow-delete-items=Allows deleting items during merging or splitting of chests. (translate please) + +[string-mod-setting] +WideChests_mergeable-chest-wooden-none=None (translate please) +WideChests_mergeable-chest-wooden-chest=Only chest (translate please) +WideChests_mergeable-chest-wooden-warehouse=Only warehouse (translate please) +WideChests_mergeable-chest-wooden-trashdump=Only trashdump (translate please) +WideChests_mergeable-chest-wooden-chest-warehouse=Chest and warehouse (translate please) +WideChests_mergeable-chest-wooden-chest-trashdump=Chest and trashdump (translate please) +WideChests_mergeable-chest-wooden-warehouse-trashdump=Warehouse and trashdump (translate please) +WideChests_mergeable-chest-wooden-chest-warehouse-trashdump=All (translate please) + +WideChests_mergeable-chest-iron-none=None (translate please) +WideChests_mergeable-chest-iron-chest=Only chest (translate please) +WideChests_mergeable-chest-iron-warehouse=Only warehouse (translate please) +WideChests_mergeable-chest-iron-trashdump=Only trashdump (translate please) +WideChests_mergeable-chest-iron-chest-warehouse=Chest and warehouse (translate please) +WideChests_mergeable-chest-iron-chest-trashdump=Chest and trashdump (translate please) +WideChests_mergeable-chest-iron-warehouse-trashdump=Warehouse and trashdump (translate please) +WideChests_mergeable-chest-iron-chest-warehouse-trashdump=All (translate please) + +WideChests_mergeable-chest-steel-none=None (translate please) +WideChests_mergeable-chest-steel-chest=Only chest (translate please) +WideChests_mergeable-chest-steel-warehouse=Only warehouse (translate please) +WideChests_mergeable-chest-steel-trashdump=Only trashdump (translate please) +WideChests_mergeable-chest-steel-chest-warehouse=Chest and warehouse (translate please) +WideChests_mergeable-chest-steel-chest-trashdump=Chest and trashdump (translate please) +WideChests_mergeable-chest-steel-warehouse-trashdump=Warehouse and trashdump (translate please) +WideChests_mergeable-chest-steel-chest-warehouse-trashdump=All (translate please) + +WideChests_circuit-connector-position-center-center=Closest to center (translate please) +WideChests_circuit-connector-position-right-top=Right top (translate please) +WideChests_circuit-connector-position-right-middle=Right middle (translate please) +WideChests_circuit-connector-position-right-bottom=Right bottom (translate please) +WideChests_circuit-connector-position-left-top=Left top (translate please) +WideChests_circuit-connector-position-left-middle=Left middle (translate please) +WideChests_circuit-connector-position-left-bottom=Left bottom (translate please) +WideChests_circuit-connector-position-bottom-right=Bottom right (translate please) +WideChests_circuit-connector-position-bottom-middle=Bottom middle (translate please) +WideChests_circuit-connector-position-bottom-left=Bottom left (translate please) + +[flying-text] +WideChests_items-would-be-deleted-merge=Merge would cause item to be deleted (translate please) +WideChests_items-would-be-deleted-split=Split would cause item to be deleted (translate please) diff --git a/WideChests/locale/uk/locale.cfg b/WideChests/locale/uk/locale.cfg new file mode 100644 index 00000000..46cce65e --- /dev/null +++ b/WideChests/locale/uk/locale.cfg @@ -0,0 +1,104 @@ +[item-group-name] +WideChests_merged-chests=Об'Ρ”Π΄Π½Π°Π½Ρ– скрині + +[chest-name] +WideChests_wide-wooden-chest=Π”Π΅Ρ€Π΅Π²'яна скриня __1__ ΡˆΠΈΡ€ΠΈΠ½ΠΎΡŽ +WideChests_high-wooden-chest=Π”Π΅Ρ€Π΅Π²'яна скриня заввишки __1__ +WideChests_wooden-chest-warehouse=Π”Π΅Ρ€Π΅Π²'яний склад __1__ x __2__ +WideChests_wooden-chest-trashdump=Π”Π΅Ρ€Π΅Π²'яний смітник __1__ x __2__ + +WideChests_wide-iron-chest=Π—Π°Π»Ρ–Π·Π½Π° скриня ΡˆΠΈΡ€ΠΈΠ½ΠΎΡŽ __1__ +WideChests_high-iron-chest=Π—Π°Π»Ρ–Π·Π½Π° скриня заввишки __1__ +WideChests_iron-chest-warehouse=Π—Π°Π»Ρ–Π·Π½ΠΈΠΉ склад __1__ x __2__ +WideChests_iron-chest-trashdump=Π—Π°Π»Ρ–Π·Π½ΠΈΠΉ смітник __1__ x __2__ + +WideChests_wide-steel-chest=Π‘Ρ‚Π°Π»Π΅Π²Π° скриня ΡˆΠΈΡ€ΠΈΠ½ΠΎΡŽ __1__ +WideChests_high-steel-chest=Π‘Ρ‚Π°Π»Π΅Π²Π° скриня заввишки __1__ +WideChests_steel-chest-warehouse=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΈΠΉ склад __1__ x __2__ +WideChests_steel-chest-trashdump=Π‘Ρ‚Π°Π»Π΅Π²ΠΈΠΉ смітник __1__ x __2__ + +[item-name] +WideChests_merge-chest-selector=ІнструмСнт ΠΎΠ±'єднання ΡΠΊΡ€ΠΈΠ½ΡŒ + +[shortcut-name] +WideChests_merge-chest-selector=Об'єднання ΡΠΊΡ€ΠΈΠ½ΡŒ + +[controls] +WideChests_rotate-blueprint-clockwise=ΠŸΠΎΠ²Π΅Ρ€Π½Ρ–Ρ‚ΡŒ крСслСння Π·Π° годинниковою ΡΡ‚Ρ€Ρ–Π»ΠΊΠΎΡŽ +WideChests_rotate-blueprint-couterclockwise=ΠŸΠΎΠ²Π΅Ρ€Π½Ρ–Ρ‚ΡŒ крСслСння ΠΏΡ€ΠΎΡ‚ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π½ΠΈΠΊΠΎΠ²ΠΎΡ— стрілки + +[controls-description] +WideChests_rotate-blueprint-clockwise=ΠŸΡ€Π°Ρ†ΡŽΡ” Π½Π°Π΄ крСслСннями Π· ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΠΌΠΈ скринями. +WideChests_rotate-blueprint-couterclockwise=ΠŸΡ€Π°Ρ†ΡŽΡ” Π½Π°Π΄ крСслСннями Π· ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΠΌΠΈ скринями. + +[mod-setting-name] +WideChests_mergeable-chest-wooden-chest=Π Π΅ΠΆΠΈΠΌ злиття Π΄Π΅Ρ€Π΅Π²'яних ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_mergeable-chest-iron-chest=Π Π΅ΠΆΠΈΠΌ злиття Π·Π°Π»Ρ–Π·Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_mergeable-chest-steel-chest=Π Π΅ΠΆΠΈΠΌ злиття ΡΡ‚Π°Π»ΡŒΠ½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_max-chest-width=Максимальна ΡˆΠΈΡ€ΠΈΠ½Π° ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_max-chest-height=Максимальна висота ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_max-chest-area=Максимальна ΠΏΠ»ΠΎΡ‰Π° ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_inventory-size-multiplier=ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Ρ–ΠΊΠ°Ρ‚ΠΎΡ€ Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρƒ Ρ–Π½Π²Π΅Ρ€Ρ‚Π°Ρ€ΡŽ +WideChests_inventory-size-limit=ОбмСТСння Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρƒ Ρ–Π½Π²Π΅Ρ€Ρ‚Π°Ρ€ΡŽ +WideChests_sprite-decal-chance=Π—ΠΌΡ–Π½Π° для спрайт-Π½Π°ΠΊΠ»Π΅ΠΉΠΊΠΈ +WideChests_warehouse-threshold=ΠŸΠΎΡ€Ρ–Π³ Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρƒ складу +WideChests_whitelist-chest-sizes=Π‘Ρ–Π»ΠΈΠΉ список ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ +WideChests_mirror-whitelists=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Π΄Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Ρ–Π»ΠΎΠ³ΠΎ списку +WideChests_circuit-connector-position=ПолоТСння ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ Π»Π°Π½Ρ†ΡŽΠ³Π° +WideChests_allow-delete-items=Π”ΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΠΈ нСдійсні Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ + +[mod-setting-description] +WideChests_max-chest-width=Максимальна ΡˆΠΈΡ€ΠΈΠ½Π° ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ. Π’ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ ΠΌΠΎΠ΄ WideChestsUnlimited, якщо Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ‰ΠΎΠ± обмСТСння Π±ΡƒΠ»ΠΎ Π±Ρ–Π»ΡŒΡˆΠ΅ 42. +WideChests_max-chest-height=Максимальна висота ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ. Π’ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ ΠΌΠΎΠ΄ WideChestsUnlimited, якщо Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ‰ΠΎΠ± Π»Ρ–ΠΌΡ–Ρ‚ Π±ΡƒΠ² Π²ΠΈΡ‰ΠΈΠΌ Π·Π° 42. +WideChests_max-chest-area=Максимальна ΠΏΠ»ΠΎΡ‰Π° ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ. Π’ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ ΠΌΠΎΠ΄ WideChestsUnlimited, якщо Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ‰ΠΎΠ± Π»Ρ–ΠΌΡ–Ρ‚ Π±ΡƒΠ² Π±Ρ–Π»ΡŒΡˆΠΈΠΌ Π·Π° 1600. +WideChests_inventory-size-multiplier=Π ΠΎΠ·ΠΌΡ–Ρ€ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŽ ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΎΡ— скрині - Ρ†Π΅ сума Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρ–Π² Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŽ ΠΎΠΊΡ€Π΅ΠΌΠΈΡ… ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ. Π¦Π΅ число ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π½Π° Ρ†Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. +WideChests_inventory-size-limit=Максимальний Ρ€ΠΎΠ·ΠΌΡ–Ρ€ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŽ, який ΠΌΠΎΠΆΠ΅ ΠΌΠ°Ρ‚ΠΈ ΠΎΠ±'Ρ”Π΄Π½Π°Π½Π° скриня. Π—Π°Π·Π²ΠΈΡ‡Π°ΠΉ Ρ€ΠΎΠ·ΠΌΡ–Ρ€ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŽ ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΎΡ— скрині Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” сумі Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρ–Π² Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€ΡŽ ΠΎΠΊΡ€Π΅ΠΌΠΈΡ… ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… ΡΠΊΡ€ΠΈΠ½ΡŒ (Π° ΠΏΠΎΡ‚Ρ–ΠΌ ΠΏΠΎΠΌΠ½ΠΎΠΆΠ΅Π½Ρ–ΠΉ Π½Π° Π²ΠΈΡ‰Π΅Π²ΠΊΠ°Π·Π°Π½ΠΈΠΉ ΠΌΠ½ΠΎΠΆΠ½ΠΈΠΊ). +WideChests_sprite-decal-chance=Відсоткова ΠΉΠΌΠΎΠ²Ρ–Ρ€Π½Ρ–ΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎ Π½Π° ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… скринях Π·'ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π°ΠΊΠ»Π΅ΠΉΠΊΠΈ (Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΈΠΉ Π²Π°Ρ€Ρ–Π°Π½Ρ‚). Поки Ρ‰ΠΎ лишС склади (ΠΎΠ±'Ρ”Π΄Π½Π°Π½Ρ– скрині Π· ΠΎΠ±ΠΎΠΌΠ° сторонами Π±Ρ–Π»ΡŒΡˆΠΈΠΌΠΈ Π²Ρ–Π΄ 1 Π΄ΠΎ "ΠŸΠΎΡ€ΠΎΠ³Ρƒ Ρ€ΠΎΠ·ΠΌΡ–Ρ€Ρƒ складу") ΠΌΠ°ΡŽΡ‚ΡŒ Π½Π°ΠΊΠ»Π΅ΠΉΠΊΠΈ. +WideChests_warehouse-threshold=Π‘ΠΌΡ–Ρ‚Π½ΠΈΠΊ Π±ΡƒΠ΄Π΅ використано ΠΏΡ€ΠΈ ΠΎΠ±'Ρ”Π΄Π½Π°Π½Π½Ρ– області, Π±Ρ–Π»ΡŒΡˆΠΎΡ— Π·Π° X Π· ΠΎΠ±ΠΎΡ… Π±ΠΎΠΊΡ–Π². +WideChests_whitelist-chest-sizes=Π’ΠΊΠ°Π·ΡƒΡ”, які скрині Π²Π²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎ. Π¦Π΅ список Π·Π½Π°Ρ‡Π΅Π½ΡŒ Ρ‚ΠΈΠΏΡƒ "AxB", Ρ€ΠΎΠ·Π΄Ρ–Π»Π΅Π½ΠΈΡ… ΠΏΡ€ΠΎΠ±Ρ–Π»ΠΎΠΌ, "A" Ρ– "B" ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ Ρ†Ρ–Π»ΠΈΠΌΠΈ числами (Π±Ρ–Π»ΡŒΡˆΠΈΠΌΠΈ Π·Π° 0) Π°Π±ΠΎ "N", які ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡŒ собою символ підстановки (Ρ†Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Ρ”, Ρ‰ΠΎ Π²Ρ–Π½ Π±ΡƒΠ΄Π΅ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ‚ΠΈ Π²ΡΡŒΠΎΠΌΡƒ). Наприклад, "1x6 2x4 13xN" Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΠ±'Ρ”Π΄Π½Π°Ρ‚ΠΈ лишС скрині 1x6, 2x4, 13x1, 13x2, 13x3, 13x4 Ρ– Ρ‚.Π΄... Π—Π° замовчуванням "NxN" дозволяє ΠΎΠ±'Ρ”Π΄Π½ΡƒΠ²Π°Ρ‚ΠΈ всС, Ρ‰ΠΎ Π·Π°Π²Π³ΠΎΠ΄Π½ΠΎ (Ρ‚ΠΎΠ±Ρ‚ΠΎ Π΄ΠΎ 42x42 Π·Π° замовчуванням). +WideChests_mirror-whitelists=Π―ΠΊΡ‰ΠΎ ΡƒΠ²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎ, Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²ΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Ρ– "AxB", Ρ– "BxA". Π‘ΡƒΠ΄ΡŒ-який Π· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅ ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ як ΠΎΠ±ΠΈΠ΄Π²Π°. +WideChests_circuit-connector-position=Π’ΠΊΠ°Π·ΡƒΡ”, Π΄Π΅ Π±ΡƒΠ΄Π΅ Ρ€ΠΎΠ·ΠΌΡ–Ρ‰Π΅Π½ΠΎ Π·'Ρ”Π΄Π½ΡƒΠ²Π°Ρ‡ Π»Π°Π½Ρ†ΡŽΠ³Π° Π½Π° ΠΎΠ±'Ρ”Π΄Π½Π°Π½ΠΈΡ… скринях. +WideChests_allow-delete-items=Дозволяє видаляти ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ ΠΏΡ–Π΄ час ΠΎΠ±'єднання Π°Π±ΠΎ розділСння ΡΠΊΡ€ΠΈΠ½ΡŒ. + +[string-mod-setting] +WideChests_mergeable-chest-wooden-chest-none=Ні +WideChests_mergeable-chest-wooden-chest-chest=Π’Ρ–Π»ΡŒΠΊΠΈ скрині +WideChests_mergeable-chest-wooden-chest-warehouse=Π’Ρ–Π»ΡŒΠΊΠΈ склад +WideChests_mergeable-chest-wooden-chest-trashdump=Π’Ρ–Π»ΡŒΠΊΠΈ смітник +WideChests_mergeable-chest-wooden-chest-chest-warehouse=Бкриня Ρ‚Π° склад +WideChests_mergeable-chest-wooden-chest-chest-trashdump=Бкриня Ρ– смітник +WideChests_mergeable-chest-wooden-chest-warehouse-trashdump=Π‘ΠΊΠ»Π°Π΄ Ρ– Π·Π²Π°Π»ΠΈΡ‰Π΅ +WideChests_mergeable-chest-wooden-chest-chest-warehouse-trashdump=УсС + +WideChests_mergeable-chest-iron-chest-none=Ні +WideChests_mergeable-chest-iron-chest-chest=Π’Ρ–Π»ΡŒΠΊΠΈ скрині +WideChests_mergeable-chest-iron-chest-warehouse=Π’Ρ–Π»ΡŒΠΊΠΈ склад +WideChests_mergeable-chest-iron-chest-trashdump=Π’Ρ–Π»ΡŒΠΊΠΈ смітник +WideChests_mergeable-chest-iron-chest-chest-warehouse=Бкриня Ρ‚Π° склад +WideChests_mergeable-chest-iron-chest-chest-trashdump=Бкриня Ρ– смітник +WideChests_mergeable-chest-iron-chest-warehouse-trashdump=Π‘ΠΊΠ»Π°Π΄ Ρ– Π·Π²Π°Π»ΠΈΡ‰Π΅ +WideChests_mergeable-chest-iron-chest-chest-warehouse-trashdump=УсС + +WideChests_mergeable-chest-steel-chest-none=Ні +WideChests_mergeable-chest-steel-chest-chest=Π’Ρ–Π»ΡŒΠΊΠΈ скрині +WideChests_mergeable-chest-steel-chest-warehouse=Π’Ρ–Π»ΡŒΠΊΠΈ склад +WideChests_mergeable-chest-steel-chest-trashdump=Π’Ρ–Π»ΡŒΠΊΠΈ смітник +WideChests_mergeable-chest-steel-chest-chest-warehouse=Бкриня Ρ‚Π° склад +WideChests_mergeable-chest-steel-chest-chest-trashdump=Бкриня Ρ– смітник +WideChests_mergeable-chest-steel-chest-warehouse-trashdump=Π‘ΠΊΠ»Π°Π΄ Ρ– Π·Π²Π°Π»ΠΈΡ‰Π΅ +WideChests_mergeable-chest-steel-chest-chest-warehouse-trashdump=УсС + +WideChests_circuit-connector-position-center-center=НайблиТчС Π΄ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ +WideChests_circuit-connector-position-right-top=ΠŸΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ Π²Π³ΠΎΡ€Ρ– +WideChests_circuit-connector-position-right-middle=ΠŸΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ посСрСдині +WideChests_circuit-connector-position-right-bottom=ΠŸΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ Π²Π½ΠΈΠ·Ρƒ +WideChests_circuit-connector-position-left-top=Π—Π»Ρ–Π²Π° Π²Π³ΠΎΡ€Ρ– +WideChests_circuit-connector-position-left-middle=Π›Ρ–Π²ΠΎΡ€ΡƒΡ‡ посСрСдині +WideChests_circuit-connector-position-left-bottom=Π—Π»Ρ–Π²Π° Π²Π½ΠΈΠ·Ρƒ +WideChests_circuit-connector-position-bottom-right=Π’Π½ΠΈΠ·Ρƒ ΠΏΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ +WideChests_circuit-connector-position-bottom-middle=Π’Π½ΠΈΠ·Ρƒ посСрСдині +WideChests_circuit-connector-position-bottom-left=Π’Π½ΠΈΠ·Ρƒ Π·Π»Ρ–Π²Π° + +[flying-text] +WideChests_items-would-be-deleted-merge=Злиття ΠΏΡ€ΠΈΠ·Π²Π΅Π΄Π΅ Π΄ΠΎ видалСння Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° +WideChests_items-would-be-deleted-split=РозділСння ΠΏΡ€ΠΈΠ·Π²Π΅Π΄Π΅ Π΄ΠΎ видалСння Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° \ No newline at end of file diff --git a/WideChests_4.2.0/migrations/WideChests_3.0.0.json b/WideChests/migrations/WideChests_3.0.0.json similarity index 100% rename from WideChests_4.2.0/migrations/WideChests_3.0.0.json rename to WideChests/migrations/WideChests_3.0.0.json diff --git a/WideChests/migrations/WideChests_5.0.0.json b/WideChests/migrations/WideChests_5.0.0.json new file mode 100644 index 00000000..9c9b7947 --- /dev/null +++ b/WideChests/migrations/WideChests_5.0.0.json @@ -0,0 +1 @@ +{"item": [["merge-chest-selector", "WideChests_merge-chest-selector"]], "entity": [["wide-wooden-chest-2", "WideChests_wide-wooden-chest-2"], ["wide-wooden-chest-3", "WideChests_wide-wooden-chest-3"], ["wide-wooden-chest-4", "WideChests_wide-wooden-chest-4"], ["wide-wooden-chest-5", "WideChests_wide-wooden-chest-5"], ["wide-wooden-chest-6", "WideChests_wide-wooden-chest-6"], ["wide-wooden-chest-7", "WideChests_wide-wooden-chest-7"], ["wide-wooden-chest-8", "WideChests_wide-wooden-chest-8"], ["wide-wooden-chest-9", "WideChests_wide-wooden-chest-9"], ["wide-wooden-chest-10", "WideChests_wide-wooden-chest-10"], ["wide-wooden-chest-11", "WideChests_wide-wooden-chest-11"], ["wide-wooden-chest-12", "WideChests_wide-wooden-chest-12"], ["wide-wooden-chest-13", "WideChests_wide-wooden-chest-13"], ["wide-wooden-chest-14", "WideChests_wide-wooden-chest-14"], ["wide-wooden-chest-15", "WideChests_wide-wooden-chest-15"], ["wide-wooden-chest-16", "WideChests_wide-wooden-chest-16"], ["wide-wooden-chest-17", "WideChests_wide-wooden-chest-17"], ["wide-wooden-chest-18", "WideChests_wide-wooden-chest-18"], ["wide-wooden-chest-19", "WideChests_wide-wooden-chest-19"], ["wide-wooden-chest-20", "WideChests_wide-wooden-chest-20"], ["wide-wooden-chest-21", "WideChests_wide-wooden-chest-21"], ["wide-wooden-chest-22", "WideChests_wide-wooden-chest-22"], ["wide-wooden-chest-23", "WideChests_wide-wooden-chest-23"], ["wide-wooden-chest-24", "WideChests_wide-wooden-chest-24"], ["wide-wooden-chest-25", "WideChests_wide-wooden-chest-25"], ["wide-wooden-chest-26", "WideChests_wide-wooden-chest-26"], ["wide-wooden-chest-27", "WideChests_wide-wooden-chest-27"], ["wide-wooden-chest-28", "WideChests_wide-wooden-chest-28"], ["wide-wooden-chest-29", "WideChests_wide-wooden-chest-29"], ["wide-wooden-chest-30", "WideChests_wide-wooden-chest-30"], ["wide-wooden-chest-31", "WideChests_wide-wooden-chest-31"], ["wide-wooden-chest-32", "WideChests_wide-wooden-chest-32"], ["wide-wooden-chest-33", "WideChests_wide-wooden-chest-33"], ["wide-wooden-chest-34", "WideChests_wide-wooden-chest-34"], ["wide-wooden-chest-35", "WideChests_wide-wooden-chest-35"], ["wide-wooden-chest-36", "WideChests_wide-wooden-chest-36"], ["wide-wooden-chest-37", "WideChests_wide-wooden-chest-37"], ["wide-wooden-chest-38", "WideChests_wide-wooden-chest-38"], ["wide-wooden-chest-39", "WideChests_wide-wooden-chest-39"], ["wide-wooden-chest-40", "WideChests_wide-wooden-chest-40"], ["wide-wooden-chest-41", "WideChests_wide-wooden-chest-41"], ["wide-wooden-chest-42", "WideChests_wide-wooden-chest-42"], ["high-wooden-chest-2", "WideChests_high-wooden-chest-2"], ["high-wooden-chest-3", "WideChests_high-wooden-chest-3"], ["high-wooden-chest-4", "WideChests_high-wooden-chest-4"], ["high-wooden-chest-5", "WideChests_high-wooden-chest-5"], ["high-wooden-chest-6", "WideChests_high-wooden-chest-6"], ["high-wooden-chest-7", "WideChests_high-wooden-chest-7"], ["high-wooden-chest-8", "WideChests_high-wooden-chest-8"], ["high-wooden-chest-9", "WideChests_high-wooden-chest-9"], ["high-wooden-chest-10", "WideChests_high-wooden-chest-10"], ["high-wooden-chest-11", "WideChests_high-wooden-chest-11"], ["high-wooden-chest-12", "WideChests_high-wooden-chest-12"], ["high-wooden-chest-13", "WideChests_high-wooden-chest-13"], ["high-wooden-chest-14", "WideChests_high-wooden-chest-14"], ["high-wooden-chest-15", "WideChests_high-wooden-chest-15"], ["high-wooden-chest-16", "WideChests_high-wooden-chest-16"], ["high-wooden-chest-17", "WideChests_high-wooden-chest-17"], ["high-wooden-chest-18", "WideChests_high-wooden-chest-18"], ["high-wooden-chest-19", "WideChests_high-wooden-chest-19"], ["high-wooden-chest-20", "WideChests_high-wooden-chest-20"], ["high-wooden-chest-21", "WideChests_high-wooden-chest-21"], ["high-wooden-chest-22", "WideChests_high-wooden-chest-22"], ["high-wooden-chest-23", "WideChests_high-wooden-chest-23"], ["high-wooden-chest-24", "WideChests_high-wooden-chest-24"], ["high-wooden-chest-25", "WideChests_high-wooden-chest-25"], ["high-wooden-chest-26", "WideChests_high-wooden-chest-26"], ["high-wooden-chest-27", "WideChests_high-wooden-chest-27"], ["high-wooden-chest-28", "WideChests_high-wooden-chest-28"], ["high-wooden-chest-29", "WideChests_high-wooden-chest-29"], ["high-wooden-chest-30", "WideChests_high-wooden-chest-30"], ["high-wooden-chest-31", "WideChests_high-wooden-chest-31"], ["high-wooden-chest-32", "WideChests_high-wooden-chest-32"], ["high-wooden-chest-33", "WideChests_high-wooden-chest-33"], ["high-wooden-chest-34", "WideChests_high-wooden-chest-34"], ["high-wooden-chest-35", "WideChests_high-wooden-chest-35"], ["high-wooden-chest-36", "WideChests_high-wooden-chest-36"], ["high-wooden-chest-37", "WideChests_high-wooden-chest-37"], ["high-wooden-chest-38", "WideChests_high-wooden-chest-38"], ["high-wooden-chest-39", "WideChests_high-wooden-chest-39"], ["high-wooden-chest-40", "WideChests_high-wooden-chest-40"], ["high-wooden-chest-41", "WideChests_high-wooden-chest-41"], ["high-wooden-chest-42", "WideChests_high-wooden-chest-42"], ["wooden-warehouse-2x2", "WideChests_wooden-chest-warehouse-2x2"], ["wooden-warehouse-2x3", "WideChests_wooden-chest-warehouse-2x3"], ["wooden-warehouse-2x4", "WideChests_wooden-chest-warehouse-2x4"], ["wooden-warehouse-2x5", "WideChests_wooden-chest-warehouse-2x5"], ["wooden-warehouse-2x6", "WideChests_wooden-chest-warehouse-2x6"], ["wooden-warehouse-2x7", "WideChests_wooden-chest-warehouse-2x7"], ["wooden-warehouse-2x8", "WideChests_wooden-chest-warehouse-2x8"], ["wooden-warehouse-2x9", "WideChests_wooden-chest-warehouse-2x9"], ["wooden-warehouse-2x10", "WideChests_wooden-chest-warehouse-2x10"], ["wooden-warehouse-2x11", "WideChests_wooden-chest-warehouse-2x11"], ["wooden-warehouse-2x12", "WideChests_wooden-chest-warehouse-2x12"], ["wooden-warehouse-2x13", "WideChests_wooden-chest-warehouse-2x13"], ["wooden-warehouse-2x14", "WideChests_wooden-chest-warehouse-2x14"], ["wooden-warehouse-2x15", "WideChests_wooden-chest-warehouse-2x15"], ["wooden-warehouse-2x16", "WideChests_wooden-chest-warehouse-2x16"], ["wooden-warehouse-2x17", "WideChests_wooden-chest-warehouse-2x17"], ["wooden-warehouse-2x18", "WideChests_wooden-chest-warehouse-2x18"], ["wooden-warehouse-2x19", "WideChests_wooden-chest-warehouse-2x19"], ["wooden-warehouse-2x20", "WideChests_wooden-chest-warehouse-2x20"], ["wooden-warehouse-2x21", "WideChests_wooden-chest-warehouse-2x21"], ["wooden-warehouse-2x22", "WideChests_wooden-chest-warehouse-2x22"], ["wooden-warehouse-2x23", "WideChests_wooden-chest-warehouse-2x23"], ["wooden-warehouse-2x24", "WideChests_wooden-chest-warehouse-2x24"], ["wooden-warehouse-2x25", "WideChests_wooden-chest-warehouse-2x25"], ["wooden-warehouse-2x26", "WideChests_wooden-chest-warehouse-2x26"], ["wooden-warehouse-2x27", "WideChests_wooden-chest-warehouse-2x27"], ["wooden-warehouse-2x28", "WideChests_wooden-chest-warehouse-2x28"], ["wooden-warehouse-2x29", "WideChests_wooden-chest-warehouse-2x29"], ["wooden-warehouse-2x30", "WideChests_wooden-chest-warehouse-2x30"], ["wooden-warehouse-2x31", "WideChests_wooden-chest-warehouse-2x31"], ["wooden-warehouse-2x32", "WideChests_wooden-chest-warehouse-2x32"], ["wooden-warehouse-2x33", "WideChests_wooden-chest-warehouse-2x33"], ["wooden-warehouse-2x34", "WideChests_wooden-chest-warehouse-2x34"], ["wooden-warehouse-2x35", "WideChests_wooden-chest-warehouse-2x35"], ["wooden-warehouse-2x36", "WideChests_wooden-chest-warehouse-2x36"], ["wooden-warehouse-2x37", "WideChests_wooden-chest-warehouse-2x37"], ["wooden-warehouse-2x38", "WideChests_wooden-chest-warehouse-2x38"], ["wooden-warehouse-2x39", "WideChests_wooden-chest-warehouse-2x39"], ["wooden-warehouse-2x40", "WideChests_wooden-chest-warehouse-2x40"], ["wooden-warehouse-2x41", "WideChests_wooden-chest-warehouse-2x41"], ["wooden-warehouse-2x42", "WideChests_wooden-chest-warehouse-2x42"], ["wooden-warehouse-3x2", "WideChests_wooden-chest-warehouse-3x2"], ["wooden-warehouse-3x3", "WideChests_wooden-chest-warehouse-3x3"], ["wooden-warehouse-3x4", "WideChests_wooden-chest-warehouse-3x4"], ["wooden-warehouse-3x5", "WideChests_wooden-chest-warehouse-3x5"], ["wooden-warehouse-3x6", "WideChests_wooden-chest-warehouse-3x6"], ["wooden-warehouse-3x7", "WideChests_wooden-chest-warehouse-3x7"], ["wooden-warehouse-3x8", "WideChests_wooden-chest-warehouse-3x8"], ["wooden-warehouse-3x9", "WideChests_wooden-chest-warehouse-3x9"], ["wooden-warehouse-3x10", "WideChests_wooden-chest-warehouse-3x10"], ["wooden-warehouse-3x11", "WideChests_wooden-chest-warehouse-3x11"], ["wooden-warehouse-3x12", "WideChests_wooden-chest-warehouse-3x12"], ["wooden-warehouse-3x13", "WideChests_wooden-chest-warehouse-3x13"], ["wooden-warehouse-3x14", "WideChests_wooden-chest-warehouse-3x14"], ["wooden-warehouse-3x15", "WideChests_wooden-chest-warehouse-3x15"], ["wooden-warehouse-3x16", "WideChests_wooden-chest-warehouse-3x16"], ["wooden-warehouse-3x17", "WideChests_wooden-chest-warehouse-3x17"], ["wooden-warehouse-3x18", "WideChests_wooden-chest-warehouse-3x18"], ["wooden-warehouse-3x19", "WideChests_wooden-chest-warehouse-3x19"], ["wooden-warehouse-3x20", "WideChests_wooden-chest-warehouse-3x20"], ["wooden-warehouse-3x21", "WideChests_wooden-chest-warehouse-3x21"], ["wooden-warehouse-3x22", "WideChests_wooden-chest-warehouse-3x22"], ["wooden-warehouse-3x23", "WideChests_wooden-chest-warehouse-3x23"], ["wooden-warehouse-3x24", "WideChests_wooden-chest-warehouse-3x24"], ["wooden-warehouse-3x25", "WideChests_wooden-chest-warehouse-3x25"], ["wooden-warehouse-3x26", "WideChests_wooden-chest-warehouse-3x26"], ["wooden-warehouse-3x27", "WideChests_wooden-chest-warehouse-3x27"], ["wooden-warehouse-3x28", "WideChests_wooden-chest-warehouse-3x28"], ["wooden-warehouse-3x29", "WideChests_wooden-chest-warehouse-3x29"], ["wooden-warehouse-3x30", "WideChests_wooden-chest-warehouse-3x30"], ["wooden-warehouse-3x31", "WideChests_wooden-chest-warehouse-3x31"], ["wooden-warehouse-3x32", "WideChests_wooden-chest-warehouse-3x32"], ["wooden-warehouse-3x33", "WideChests_wooden-chest-warehouse-3x33"], ["wooden-warehouse-3x34", "WideChests_wooden-chest-warehouse-3x34"], ["wooden-warehouse-3x35", "WideChests_wooden-chest-warehouse-3x35"], ["wooden-warehouse-3x36", "WideChests_wooden-chest-warehouse-3x36"], ["wooden-warehouse-3x37", "WideChests_wooden-chest-warehouse-3x37"], ["wooden-warehouse-3x38", "WideChests_wooden-chest-warehouse-3x38"], ["wooden-warehouse-3x39", "WideChests_wooden-chest-warehouse-3x39"], ["wooden-warehouse-3x40", "WideChests_wooden-chest-warehouse-3x40"], ["wooden-warehouse-3x41", "WideChests_wooden-chest-warehouse-3x41"], ["wooden-warehouse-3x42", "WideChests_wooden-chest-warehouse-3x42"], ["wooden-warehouse-4x2", "WideChests_wooden-chest-warehouse-4x2"], ["wooden-warehouse-4x3", "WideChests_wooden-chest-warehouse-4x3"], ["wooden-warehouse-4x4", "WideChests_wooden-chest-warehouse-4x4"], ["wooden-warehouse-4x5", "WideChests_wooden-chest-warehouse-4x5"], ["wooden-warehouse-4x6", "WideChests_wooden-chest-warehouse-4x6"], ["wooden-warehouse-4x7", "WideChests_wooden-chest-warehouse-4x7"], ["wooden-warehouse-4x8", "WideChests_wooden-chest-warehouse-4x8"], ["wooden-warehouse-4x9", "WideChests_wooden-chest-warehouse-4x9"], ["wooden-warehouse-4x10", "WideChests_wooden-chest-warehouse-4x10"], ["wooden-warehouse-4x11", "WideChests_wooden-chest-warehouse-4x11"], ["wooden-warehouse-4x12", "WideChests_wooden-chest-warehouse-4x12"], ["wooden-warehouse-4x13", "WideChests_wooden-chest-warehouse-4x13"], ["wooden-warehouse-4x14", "WideChests_wooden-chest-warehouse-4x14"], ["wooden-warehouse-4x15", "WideChests_wooden-chest-warehouse-4x15"], ["wooden-warehouse-4x16", "WideChests_wooden-chest-warehouse-4x16"], ["wooden-warehouse-4x17", "WideChests_wooden-chest-warehouse-4x17"], ["wooden-warehouse-4x18", "WideChests_wooden-chest-warehouse-4x18"], ["wooden-warehouse-4x19", "WideChests_wooden-chest-warehouse-4x19"], ["wooden-warehouse-4x20", "WideChests_wooden-chest-warehouse-4x20"], ["wooden-warehouse-4x21", "WideChests_wooden-chest-warehouse-4x21"], ["wooden-warehouse-4x22", "WideChests_wooden-chest-warehouse-4x22"], ["wooden-warehouse-4x23", "WideChests_wooden-chest-warehouse-4x23"], ["wooden-warehouse-4x24", "WideChests_wooden-chest-warehouse-4x24"], ["wooden-warehouse-4x25", "WideChests_wooden-chest-warehouse-4x25"], ["wooden-warehouse-4x26", "WideChests_wooden-chest-warehouse-4x26"], ["wooden-warehouse-4x27", "WideChests_wooden-chest-warehouse-4x27"], ["wooden-warehouse-4x28", "WideChests_wooden-chest-warehouse-4x28"], ["wooden-warehouse-4x29", "WideChests_wooden-chest-warehouse-4x29"], ["wooden-warehouse-4x30", "WideChests_wooden-chest-warehouse-4x30"], ["wooden-warehouse-4x31", "WideChests_wooden-chest-warehouse-4x31"], ["wooden-warehouse-4x32", "WideChests_wooden-chest-warehouse-4x32"], ["wooden-warehouse-4x33", "WideChests_wooden-chest-warehouse-4x33"], ["wooden-warehouse-4x34", "WideChests_wooden-chest-warehouse-4x34"], ["wooden-warehouse-4x35", "WideChests_wooden-chest-warehouse-4x35"], ["wooden-warehouse-4x36", "WideChests_wooden-chest-warehouse-4x36"], ["wooden-warehouse-4x37", "WideChests_wooden-chest-warehouse-4x37"], ["wooden-warehouse-4x38", "WideChests_wooden-chest-warehouse-4x38"], ["wooden-warehouse-4x39", "WideChests_wooden-chest-warehouse-4x39"], ["wooden-warehouse-4x40", "WideChests_wooden-chest-warehouse-4x40"], ["wooden-warehouse-4x41", "WideChests_wooden-chest-warehouse-4x41"], ["wooden-warehouse-4x42", "WideChests_wooden-chest-warehouse-4x42"], ["wooden-warehouse-5x2", "WideChests_wooden-chest-warehouse-5x2"], ["wooden-warehouse-5x3", "WideChests_wooden-chest-warehouse-5x3"], ["wooden-warehouse-5x4", "WideChests_wooden-chest-warehouse-5x4"], ["wooden-warehouse-5x5", "WideChests_wooden-chest-warehouse-5x5"], ["wooden-warehouse-5x6", "WideChests_wooden-chest-warehouse-5x6"], ["wooden-warehouse-5x7", "WideChests_wooden-chest-warehouse-5x7"], ["wooden-warehouse-5x8", "WideChests_wooden-chest-warehouse-5x8"], ["wooden-warehouse-5x9", "WideChests_wooden-chest-warehouse-5x9"], ["wooden-warehouse-5x10", "WideChests_wooden-chest-warehouse-5x10"], ["wooden-warehouse-5x11", "WideChests_wooden-chest-warehouse-5x11"], ["wooden-warehouse-5x12", "WideChests_wooden-chest-warehouse-5x12"], ["wooden-warehouse-5x13", "WideChests_wooden-chest-warehouse-5x13"], ["wooden-warehouse-5x14", "WideChests_wooden-chest-warehouse-5x14"], ["wooden-warehouse-5x15", "WideChests_wooden-chest-warehouse-5x15"], ["wooden-warehouse-5x16", "WideChests_wooden-chest-warehouse-5x16"], ["wooden-warehouse-5x17", "WideChests_wooden-chest-warehouse-5x17"], ["wooden-warehouse-5x18", "WideChests_wooden-chest-warehouse-5x18"], ["wooden-warehouse-5x19", "WideChests_wooden-chest-warehouse-5x19"], ["wooden-warehouse-5x20", "WideChests_wooden-chest-warehouse-5x20"], ["wooden-warehouse-5x21", "WideChests_wooden-chest-warehouse-5x21"], ["wooden-warehouse-5x22", "WideChests_wooden-chest-warehouse-5x22"], ["wooden-warehouse-5x23", "WideChests_wooden-chest-warehouse-5x23"], ["wooden-warehouse-5x24", "WideChests_wooden-chest-warehouse-5x24"], ["wooden-warehouse-5x25", "WideChests_wooden-chest-warehouse-5x25"], ["wooden-warehouse-5x26", "WideChests_wooden-chest-warehouse-5x26"], ["wooden-warehouse-5x27", "WideChests_wooden-chest-warehouse-5x27"], ["wooden-warehouse-5x28", "WideChests_wooden-chest-warehouse-5x28"], ["wooden-warehouse-5x29", "WideChests_wooden-chest-warehouse-5x29"], ["wooden-warehouse-5x30", "WideChests_wooden-chest-warehouse-5x30"], ["wooden-warehouse-5x31", "WideChests_wooden-chest-warehouse-5x31"], ["wooden-warehouse-5x32", "WideChests_wooden-chest-warehouse-5x32"], ["wooden-warehouse-5x33", "WideChests_wooden-chest-warehouse-5x33"], ["wooden-warehouse-5x34", "WideChests_wooden-chest-warehouse-5x34"], ["wooden-warehouse-5x35", "WideChests_wooden-chest-warehouse-5x35"], ["wooden-warehouse-5x36", "WideChests_wooden-chest-warehouse-5x36"], ["wooden-warehouse-5x37", "WideChests_wooden-chest-warehouse-5x37"], ["wooden-warehouse-5x38", "WideChests_wooden-chest-warehouse-5x38"], ["wooden-warehouse-5x39", "WideChests_wooden-chest-warehouse-5x39"], ["wooden-warehouse-5x40", "WideChests_wooden-chest-warehouse-5x40"], ["wooden-warehouse-5x41", "WideChests_wooden-chest-warehouse-5x41"], ["wooden-warehouse-5x42", "WideChests_wooden-chest-warehouse-5x42"], ["wooden-warehouse-6x2", "WideChests_wooden-chest-warehouse-6x2"], ["wooden-warehouse-6x3", "WideChests_wooden-chest-warehouse-6x3"], ["wooden-warehouse-6x4", "WideChests_wooden-chest-warehouse-6x4"], ["wooden-warehouse-6x5", "WideChests_wooden-chest-warehouse-6x5"], ["wooden-warehouse-7x2", "WideChests_wooden-chest-warehouse-7x2"], ["wooden-warehouse-7x3", "WideChests_wooden-chest-warehouse-7x3"], ["wooden-warehouse-7x4", "WideChests_wooden-chest-warehouse-7x4"], ["wooden-warehouse-7x5", "WideChests_wooden-chest-warehouse-7x5"], ["wooden-warehouse-8x2", "WideChests_wooden-chest-warehouse-8x2"], ["wooden-warehouse-8x3", "WideChests_wooden-chest-warehouse-8x3"], ["wooden-warehouse-8x4", "WideChests_wooden-chest-warehouse-8x4"], ["wooden-warehouse-8x5", "WideChests_wooden-chest-warehouse-8x5"], ["wooden-warehouse-9x2", "WideChests_wooden-chest-warehouse-9x2"], ["wooden-warehouse-9x3", "WideChests_wooden-chest-warehouse-9x3"], ["wooden-warehouse-9x4", "WideChests_wooden-chest-warehouse-9x4"], ["wooden-warehouse-9x5", "WideChests_wooden-chest-warehouse-9x5"], ["wooden-warehouse-10x2", "WideChests_wooden-chest-warehouse-10x2"], ["wooden-warehouse-10x3", "WideChests_wooden-chest-warehouse-10x3"], ["wooden-warehouse-10x4", "WideChests_wooden-chest-warehouse-10x4"], ["wooden-warehouse-10x5", "WideChests_wooden-chest-warehouse-10x5"], ["wooden-warehouse-11x2", "WideChests_wooden-chest-warehouse-11x2"], ["wooden-warehouse-11x3", "WideChests_wooden-chest-warehouse-11x3"], ["wooden-warehouse-11x4", "WideChests_wooden-chest-warehouse-11x4"], ["wooden-warehouse-11x5", "WideChests_wooden-chest-warehouse-11x5"], ["wooden-warehouse-12x2", "WideChests_wooden-chest-warehouse-12x2"], ["wooden-warehouse-12x3", "WideChests_wooden-chest-warehouse-12x3"], ["wooden-warehouse-12x4", "WideChests_wooden-chest-warehouse-12x4"], ["wooden-warehouse-12x5", "WideChests_wooden-chest-warehouse-12x5"], ["wooden-warehouse-13x2", "WideChests_wooden-chest-warehouse-13x2"], ["wooden-warehouse-13x3", "WideChests_wooden-chest-warehouse-13x3"], ["wooden-warehouse-13x4", "WideChests_wooden-chest-warehouse-13x4"], ["wooden-warehouse-13x5", "WideChests_wooden-chest-warehouse-13x5"], ["wooden-warehouse-14x2", "WideChests_wooden-chest-warehouse-14x2"], ["wooden-warehouse-14x3", "WideChests_wooden-chest-warehouse-14x3"], ["wooden-warehouse-14x4", "WideChests_wooden-chest-warehouse-14x4"], ["wooden-warehouse-14x5", "WideChests_wooden-chest-warehouse-14x5"], ["wooden-warehouse-15x2", "WideChests_wooden-chest-warehouse-15x2"], ["wooden-warehouse-15x3", "WideChests_wooden-chest-warehouse-15x3"], ["wooden-warehouse-15x4", "WideChests_wooden-chest-warehouse-15x4"], ["wooden-warehouse-15x5", "WideChests_wooden-chest-warehouse-15x5"], ["wooden-warehouse-16x2", "WideChests_wooden-chest-warehouse-16x2"], ["wooden-warehouse-16x3", "WideChests_wooden-chest-warehouse-16x3"], ["wooden-warehouse-16x4", "WideChests_wooden-chest-warehouse-16x4"], ["wooden-warehouse-16x5", "WideChests_wooden-chest-warehouse-16x5"], ["wooden-warehouse-17x2", "WideChests_wooden-chest-warehouse-17x2"], ["wooden-warehouse-17x3", "WideChests_wooden-chest-warehouse-17x3"], ["wooden-warehouse-17x4", "WideChests_wooden-chest-warehouse-17x4"], ["wooden-warehouse-17x5", "WideChests_wooden-chest-warehouse-17x5"], ["wooden-warehouse-18x2", "WideChests_wooden-chest-warehouse-18x2"], ["wooden-warehouse-18x3", "WideChests_wooden-chest-warehouse-18x3"], ["wooden-warehouse-18x4", "WideChests_wooden-chest-warehouse-18x4"], ["wooden-warehouse-18x5", "WideChests_wooden-chest-warehouse-18x5"], ["wooden-warehouse-19x2", "WideChests_wooden-chest-warehouse-19x2"], ["wooden-warehouse-19x3", "WideChests_wooden-chest-warehouse-19x3"], ["wooden-warehouse-19x4", "WideChests_wooden-chest-warehouse-19x4"], ["wooden-warehouse-19x5", "WideChests_wooden-chest-warehouse-19x5"], ["wooden-warehouse-20x2", "WideChests_wooden-chest-warehouse-20x2"], ["wooden-warehouse-20x3", "WideChests_wooden-chest-warehouse-20x3"], ["wooden-warehouse-20x4", "WideChests_wooden-chest-warehouse-20x4"], ["wooden-warehouse-20x5", "WideChests_wooden-chest-warehouse-20x5"], ["wooden-warehouse-21x2", "WideChests_wooden-chest-warehouse-21x2"], ["wooden-warehouse-21x3", "WideChests_wooden-chest-warehouse-21x3"], ["wooden-warehouse-21x4", "WideChests_wooden-chest-warehouse-21x4"], ["wooden-warehouse-21x5", "WideChests_wooden-chest-warehouse-21x5"], ["wooden-warehouse-22x2", "WideChests_wooden-chest-warehouse-22x2"], ["wooden-warehouse-22x3", "WideChests_wooden-chest-warehouse-22x3"], ["wooden-warehouse-22x4", "WideChests_wooden-chest-warehouse-22x4"], ["wooden-warehouse-22x5", "WideChests_wooden-chest-warehouse-22x5"], ["wooden-warehouse-23x2", "WideChests_wooden-chest-warehouse-23x2"], ["wooden-warehouse-23x3", "WideChests_wooden-chest-warehouse-23x3"], ["wooden-warehouse-23x4", "WideChests_wooden-chest-warehouse-23x4"], ["wooden-warehouse-23x5", "WideChests_wooden-chest-warehouse-23x5"], ["wooden-warehouse-24x2", "WideChests_wooden-chest-warehouse-24x2"], ["wooden-warehouse-24x3", "WideChests_wooden-chest-warehouse-24x3"], ["wooden-warehouse-24x4", "WideChests_wooden-chest-warehouse-24x4"], ["wooden-warehouse-24x5", "WideChests_wooden-chest-warehouse-24x5"], ["wooden-warehouse-25x2", "WideChests_wooden-chest-warehouse-25x2"], ["wooden-warehouse-25x3", "WideChests_wooden-chest-warehouse-25x3"], ["wooden-warehouse-25x4", "WideChests_wooden-chest-warehouse-25x4"], ["wooden-warehouse-25x5", "WideChests_wooden-chest-warehouse-25x5"], ["wooden-warehouse-26x2", "WideChests_wooden-chest-warehouse-26x2"], ["wooden-warehouse-26x3", "WideChests_wooden-chest-warehouse-26x3"], ["wooden-warehouse-26x4", "WideChests_wooden-chest-warehouse-26x4"], ["wooden-warehouse-26x5", "WideChests_wooden-chest-warehouse-26x5"], ["wooden-warehouse-27x2", "WideChests_wooden-chest-warehouse-27x2"], ["wooden-warehouse-27x3", "WideChests_wooden-chest-warehouse-27x3"], ["wooden-warehouse-27x4", "WideChests_wooden-chest-warehouse-27x4"], ["wooden-warehouse-27x5", "WideChests_wooden-chest-warehouse-27x5"], ["wooden-warehouse-28x2", "WideChests_wooden-chest-warehouse-28x2"], ["wooden-warehouse-28x3", "WideChests_wooden-chest-warehouse-28x3"], ["wooden-warehouse-28x4", "WideChests_wooden-chest-warehouse-28x4"], ["wooden-warehouse-28x5", "WideChests_wooden-chest-warehouse-28x5"], ["wooden-warehouse-29x2", "WideChests_wooden-chest-warehouse-29x2"], ["wooden-warehouse-29x3", "WideChests_wooden-chest-warehouse-29x3"], ["wooden-warehouse-29x4", "WideChests_wooden-chest-warehouse-29x4"], ["wooden-warehouse-29x5", "WideChests_wooden-chest-warehouse-29x5"], ["wooden-warehouse-30x2", "WideChests_wooden-chest-warehouse-30x2"], ["wooden-warehouse-30x3", "WideChests_wooden-chest-warehouse-30x3"], ["wooden-warehouse-30x4", "WideChests_wooden-chest-warehouse-30x4"], ["wooden-warehouse-30x5", "WideChests_wooden-chest-warehouse-30x5"], ["wooden-warehouse-31x2", "WideChests_wooden-chest-warehouse-31x2"], ["wooden-warehouse-31x3", "WideChests_wooden-chest-warehouse-31x3"], ["wooden-warehouse-31x4", "WideChests_wooden-chest-warehouse-31x4"], ["wooden-warehouse-31x5", "WideChests_wooden-chest-warehouse-31x5"], ["wooden-warehouse-32x2", "WideChests_wooden-chest-warehouse-32x2"], ["wooden-warehouse-32x3", "WideChests_wooden-chest-warehouse-32x3"], ["wooden-warehouse-32x4", "WideChests_wooden-chest-warehouse-32x4"], ["wooden-warehouse-32x5", "WideChests_wooden-chest-warehouse-32x5"], ["wooden-warehouse-33x2", "WideChests_wooden-chest-warehouse-33x2"], ["wooden-warehouse-33x3", "WideChests_wooden-chest-warehouse-33x3"], ["wooden-warehouse-33x4", "WideChests_wooden-chest-warehouse-33x4"], ["wooden-warehouse-33x5", "WideChests_wooden-chest-warehouse-33x5"], ["wooden-warehouse-34x2", "WideChests_wooden-chest-warehouse-34x2"], ["wooden-warehouse-34x3", "WideChests_wooden-chest-warehouse-34x3"], ["wooden-warehouse-34x4", "WideChests_wooden-chest-warehouse-34x4"], ["wooden-warehouse-34x5", "WideChests_wooden-chest-warehouse-34x5"], ["wooden-warehouse-35x2", "WideChests_wooden-chest-warehouse-35x2"], ["wooden-warehouse-35x3", "WideChests_wooden-chest-warehouse-35x3"], ["wooden-warehouse-35x4", "WideChests_wooden-chest-warehouse-35x4"], ["wooden-warehouse-35x5", "WideChests_wooden-chest-warehouse-35x5"], ["wooden-warehouse-36x2", "WideChests_wooden-chest-warehouse-36x2"], ["wooden-warehouse-36x3", "WideChests_wooden-chest-warehouse-36x3"], ["wooden-warehouse-36x4", "WideChests_wooden-chest-warehouse-36x4"], ["wooden-warehouse-36x5", "WideChests_wooden-chest-warehouse-36x5"], ["wooden-warehouse-37x2", "WideChests_wooden-chest-warehouse-37x2"], ["wooden-warehouse-37x3", "WideChests_wooden-chest-warehouse-37x3"], ["wooden-warehouse-37x4", "WideChests_wooden-chest-warehouse-37x4"], ["wooden-warehouse-37x5", "WideChests_wooden-chest-warehouse-37x5"], ["wooden-warehouse-38x2", "WideChests_wooden-chest-warehouse-38x2"], ["wooden-warehouse-38x3", "WideChests_wooden-chest-warehouse-38x3"], ["wooden-warehouse-38x4", "WideChests_wooden-chest-warehouse-38x4"], ["wooden-warehouse-38x5", "WideChests_wooden-chest-warehouse-38x5"], ["wooden-warehouse-39x2", "WideChests_wooden-chest-warehouse-39x2"], ["wooden-warehouse-39x3", "WideChests_wooden-chest-warehouse-39x3"], ["wooden-warehouse-39x4", "WideChests_wooden-chest-warehouse-39x4"], ["wooden-warehouse-39x5", "WideChests_wooden-chest-warehouse-39x5"], ["wooden-warehouse-40x2", "WideChests_wooden-chest-warehouse-40x2"], ["wooden-warehouse-40x3", "WideChests_wooden-chest-warehouse-40x3"], ["wooden-warehouse-40x4", "WideChests_wooden-chest-warehouse-40x4"], ["wooden-warehouse-40x5", "WideChests_wooden-chest-warehouse-40x5"], ["wooden-warehouse-41x2", "WideChests_wooden-chest-warehouse-41x2"], ["wooden-warehouse-41x3", "WideChests_wooden-chest-warehouse-41x3"], ["wooden-warehouse-41x4", "WideChests_wooden-chest-warehouse-41x4"], ["wooden-warehouse-41x5", "WideChests_wooden-chest-warehouse-41x5"], ["wooden-warehouse-42x2", "WideChests_wooden-chest-warehouse-42x2"], ["wooden-warehouse-42x3", "WideChests_wooden-chest-warehouse-42x3"], ["wooden-warehouse-42x4", "WideChests_wooden-chest-warehouse-42x4"], ["wooden-warehouse-42x5", "WideChests_wooden-chest-warehouse-42x5"], ["wooden-trashdump-6x6", "WideChests_wooden-chest-trashdump-6x6"], ["wooden-trashdump-6x7", "WideChests_wooden-chest-trashdump-6x7"], ["wooden-trashdump-6x8", "WideChests_wooden-chest-trashdump-6x8"], ["wooden-trashdump-6x9", "WideChests_wooden-chest-trashdump-6x9"], ["wooden-trashdump-6x10", "WideChests_wooden-chest-trashdump-6x10"], ["wooden-trashdump-6x11", "WideChests_wooden-chest-trashdump-6x11"], ["wooden-trashdump-6x12", "WideChests_wooden-chest-trashdump-6x12"], ["wooden-trashdump-6x13", "WideChests_wooden-chest-trashdump-6x13"], ["wooden-trashdump-6x14", "WideChests_wooden-chest-trashdump-6x14"], ["wooden-trashdump-6x15", "WideChests_wooden-chest-trashdump-6x15"], ["wooden-trashdump-6x16", "WideChests_wooden-chest-trashdump-6x16"], ["wooden-trashdump-6x17", "WideChests_wooden-chest-trashdump-6x17"], ["wooden-trashdump-6x18", "WideChests_wooden-chest-trashdump-6x18"], ["wooden-trashdump-6x19", "WideChests_wooden-chest-trashdump-6x19"], ["wooden-trashdump-6x20", "WideChests_wooden-chest-trashdump-6x20"], ["wooden-trashdump-6x21", "WideChests_wooden-chest-trashdump-6x21"], ["wooden-trashdump-6x22", "WideChests_wooden-chest-trashdump-6x22"], ["wooden-trashdump-6x23", "WideChests_wooden-chest-trashdump-6x23"], ["wooden-trashdump-6x24", "WideChests_wooden-chest-trashdump-6x24"], ["wooden-trashdump-6x25", "WideChests_wooden-chest-trashdump-6x25"], ["wooden-trashdump-6x26", "WideChests_wooden-chest-trashdump-6x26"], ["wooden-trashdump-6x27", "WideChests_wooden-chest-trashdump-6x27"], ["wooden-trashdump-6x28", "WideChests_wooden-chest-trashdump-6x28"], ["wooden-trashdump-6x29", "WideChests_wooden-chest-trashdump-6x29"], ["wooden-trashdump-6x30", "WideChests_wooden-chest-trashdump-6x30"], ["wooden-trashdump-6x31", "WideChests_wooden-chest-trashdump-6x31"], ["wooden-trashdump-6x32", "WideChests_wooden-chest-trashdump-6x32"], ["wooden-trashdump-6x33", "WideChests_wooden-chest-trashdump-6x33"], ["wooden-trashdump-6x34", "WideChests_wooden-chest-trashdump-6x34"], ["wooden-trashdump-6x35", "WideChests_wooden-chest-trashdump-6x35"], ["wooden-trashdump-6x36", "WideChests_wooden-chest-trashdump-6x36"], ["wooden-trashdump-6x37", "WideChests_wooden-chest-trashdump-6x37"], ["wooden-trashdump-6x38", "WideChests_wooden-chest-trashdump-6x38"], ["wooden-trashdump-6x39", "WideChests_wooden-chest-trashdump-6x39"], ["wooden-trashdump-6x40", "WideChests_wooden-chest-trashdump-6x40"], ["wooden-trashdump-6x41", "WideChests_wooden-chest-trashdump-6x41"], ["wooden-trashdump-6x42", "WideChests_wooden-chest-trashdump-6x42"], ["wooden-trashdump-7x6", "WideChests_wooden-chest-trashdump-7x6"], ["wooden-trashdump-7x7", "WideChests_wooden-chest-trashdump-7x7"], ["wooden-trashdump-7x8", "WideChests_wooden-chest-trashdump-7x8"], ["wooden-trashdump-7x9", "WideChests_wooden-chest-trashdump-7x9"], ["wooden-trashdump-7x10", "WideChests_wooden-chest-trashdump-7x10"], ["wooden-trashdump-7x11", "WideChests_wooden-chest-trashdump-7x11"], ["wooden-trashdump-7x12", "WideChests_wooden-chest-trashdump-7x12"], ["wooden-trashdump-7x13", "WideChests_wooden-chest-trashdump-7x13"], ["wooden-trashdump-7x14", "WideChests_wooden-chest-trashdump-7x14"], ["wooden-trashdump-7x15", "WideChests_wooden-chest-trashdump-7x15"], ["wooden-trashdump-7x16", "WideChests_wooden-chest-trashdump-7x16"], ["wooden-trashdump-7x17", "WideChests_wooden-chest-trashdump-7x17"], ["wooden-trashdump-7x18", "WideChests_wooden-chest-trashdump-7x18"], ["wooden-trashdump-7x19", "WideChests_wooden-chest-trashdump-7x19"], ["wooden-trashdump-7x20", "WideChests_wooden-chest-trashdump-7x20"], ["wooden-trashdump-7x21", "WideChests_wooden-chest-trashdump-7x21"], ["wooden-trashdump-7x22", "WideChests_wooden-chest-trashdump-7x22"], ["wooden-trashdump-7x23", "WideChests_wooden-chest-trashdump-7x23"], ["wooden-trashdump-7x24", "WideChests_wooden-chest-trashdump-7x24"], ["wooden-trashdump-7x25", "WideChests_wooden-chest-trashdump-7x25"], ["wooden-trashdump-7x26", "WideChests_wooden-chest-trashdump-7x26"], ["wooden-trashdump-7x27", "WideChests_wooden-chest-trashdump-7x27"], ["wooden-trashdump-7x28", "WideChests_wooden-chest-trashdump-7x28"], ["wooden-trashdump-7x29", "WideChests_wooden-chest-trashdump-7x29"], ["wooden-trashdump-7x30", "WideChests_wooden-chest-trashdump-7x30"], ["wooden-trashdump-7x31", "WideChests_wooden-chest-trashdump-7x31"], ["wooden-trashdump-7x32", "WideChests_wooden-chest-trashdump-7x32"], ["wooden-trashdump-7x33", "WideChests_wooden-chest-trashdump-7x33"], ["wooden-trashdump-7x34", "WideChests_wooden-chest-trashdump-7x34"], ["wooden-trashdump-7x35", "WideChests_wooden-chest-trashdump-7x35"], ["wooden-trashdump-7x36", "WideChests_wooden-chest-trashdump-7x36"], ["wooden-trashdump-7x37", "WideChests_wooden-chest-trashdump-7x37"], ["wooden-trashdump-7x38", "WideChests_wooden-chest-trashdump-7x38"], ["wooden-trashdump-7x39", "WideChests_wooden-chest-trashdump-7x39"], ["wooden-trashdump-7x40", "WideChests_wooden-chest-trashdump-7x40"], ["wooden-trashdump-7x41", "WideChests_wooden-chest-trashdump-7x41"], ["wooden-trashdump-7x42", "WideChests_wooden-chest-trashdump-7x42"], ["wooden-trashdump-8x6", "WideChests_wooden-chest-trashdump-8x6"], ["wooden-trashdump-8x7", "WideChests_wooden-chest-trashdump-8x7"], ["wooden-trashdump-8x8", "WideChests_wooden-chest-trashdump-8x8"], ["wooden-trashdump-8x9", "WideChests_wooden-chest-trashdump-8x9"], ["wooden-trashdump-8x10", "WideChests_wooden-chest-trashdump-8x10"], ["wooden-trashdump-8x11", "WideChests_wooden-chest-trashdump-8x11"], ["wooden-trashdump-8x12", "WideChests_wooden-chest-trashdump-8x12"], ["wooden-trashdump-8x13", "WideChests_wooden-chest-trashdump-8x13"], ["wooden-trashdump-8x14", "WideChests_wooden-chest-trashdump-8x14"], ["wooden-trashdump-8x15", "WideChests_wooden-chest-trashdump-8x15"], ["wooden-trashdump-8x16", "WideChests_wooden-chest-trashdump-8x16"], ["wooden-trashdump-8x17", "WideChests_wooden-chest-trashdump-8x17"], ["wooden-trashdump-8x18", "WideChests_wooden-chest-trashdump-8x18"], ["wooden-trashdump-8x19", "WideChests_wooden-chest-trashdump-8x19"], ["wooden-trashdump-8x20", "WideChests_wooden-chest-trashdump-8x20"], ["wooden-trashdump-8x21", "WideChests_wooden-chest-trashdump-8x21"], ["wooden-trashdump-8x22", "WideChests_wooden-chest-trashdump-8x22"], ["wooden-trashdump-8x23", "WideChests_wooden-chest-trashdump-8x23"], ["wooden-trashdump-8x24", "WideChests_wooden-chest-trashdump-8x24"], ["wooden-trashdump-8x25", "WideChests_wooden-chest-trashdump-8x25"], ["wooden-trashdump-8x26", "WideChests_wooden-chest-trashdump-8x26"], ["wooden-trashdump-8x27", "WideChests_wooden-chest-trashdump-8x27"], ["wooden-trashdump-8x28", "WideChests_wooden-chest-trashdump-8x28"], ["wooden-trashdump-8x29", "WideChests_wooden-chest-trashdump-8x29"], ["wooden-trashdump-8x30", "WideChests_wooden-chest-trashdump-8x30"], ["wooden-trashdump-8x31", "WideChests_wooden-chest-trashdump-8x31"], ["wooden-trashdump-8x32", "WideChests_wooden-chest-trashdump-8x32"], ["wooden-trashdump-8x33", "WideChests_wooden-chest-trashdump-8x33"], ["wooden-trashdump-8x34", "WideChests_wooden-chest-trashdump-8x34"], ["wooden-trashdump-8x35", "WideChests_wooden-chest-trashdump-8x35"], ["wooden-trashdump-8x36", "WideChests_wooden-chest-trashdump-8x36"], ["wooden-trashdump-8x37", "WideChests_wooden-chest-trashdump-8x37"], ["wooden-trashdump-8x38", "WideChests_wooden-chest-trashdump-8x38"], ["wooden-trashdump-8x39", "WideChests_wooden-chest-trashdump-8x39"], ["wooden-trashdump-8x40", "WideChests_wooden-chest-trashdump-8x40"], ["wooden-trashdump-8x41", "WideChests_wooden-chest-trashdump-8x41"], ["wooden-trashdump-8x42", "WideChests_wooden-chest-trashdump-8x42"], ["wooden-trashdump-9x6", "WideChests_wooden-chest-trashdump-9x6"], ["wooden-trashdump-9x7", "WideChests_wooden-chest-trashdump-9x7"], ["wooden-trashdump-9x8", "WideChests_wooden-chest-trashdump-9x8"], ["wooden-trashdump-9x9", "WideChests_wooden-chest-trashdump-9x9"], ["wooden-trashdump-9x10", "WideChests_wooden-chest-trashdump-9x10"], ["wooden-trashdump-9x11", "WideChests_wooden-chest-trashdump-9x11"], ["wooden-trashdump-9x12", "WideChests_wooden-chest-trashdump-9x12"], ["wooden-trashdump-9x13", "WideChests_wooden-chest-trashdump-9x13"], ["wooden-trashdump-9x14", "WideChests_wooden-chest-trashdump-9x14"], ["wooden-trashdump-9x15", "WideChests_wooden-chest-trashdump-9x15"], ["wooden-trashdump-9x16", "WideChests_wooden-chest-trashdump-9x16"], ["wooden-trashdump-9x17", "WideChests_wooden-chest-trashdump-9x17"], ["wooden-trashdump-9x18", "WideChests_wooden-chest-trashdump-9x18"], ["wooden-trashdump-9x19", "WideChests_wooden-chest-trashdump-9x19"], ["wooden-trashdump-9x20", "WideChests_wooden-chest-trashdump-9x20"], ["wooden-trashdump-9x21", "WideChests_wooden-chest-trashdump-9x21"], ["wooden-trashdump-9x22", "WideChests_wooden-chest-trashdump-9x22"], ["wooden-trashdump-9x23", "WideChests_wooden-chest-trashdump-9x23"], ["wooden-trashdump-9x24", "WideChests_wooden-chest-trashdump-9x24"], ["wooden-trashdump-9x25", "WideChests_wooden-chest-trashdump-9x25"], ["wooden-trashdump-9x26", "WideChests_wooden-chest-trashdump-9x26"], ["wooden-trashdump-9x27", "WideChests_wooden-chest-trashdump-9x27"], ["wooden-trashdump-9x28", "WideChests_wooden-chest-trashdump-9x28"], ["wooden-trashdump-9x29", "WideChests_wooden-chest-trashdump-9x29"], ["wooden-trashdump-9x30", "WideChests_wooden-chest-trashdump-9x30"], ["wooden-trashdump-9x31", "WideChests_wooden-chest-trashdump-9x31"], ["wooden-trashdump-9x32", "WideChests_wooden-chest-trashdump-9x32"], ["wooden-trashdump-9x33", "WideChests_wooden-chest-trashdump-9x33"], ["wooden-trashdump-9x34", "WideChests_wooden-chest-trashdump-9x34"], ["wooden-trashdump-9x35", "WideChests_wooden-chest-trashdump-9x35"], ["wooden-trashdump-9x36", "WideChests_wooden-chest-trashdump-9x36"], ["wooden-trashdump-9x37", "WideChests_wooden-chest-trashdump-9x37"], ["wooden-trashdump-9x38", "WideChests_wooden-chest-trashdump-9x38"], ["wooden-trashdump-9x39", "WideChests_wooden-chest-trashdump-9x39"], ["wooden-trashdump-9x40", "WideChests_wooden-chest-trashdump-9x40"], ["wooden-trashdump-9x41", "WideChests_wooden-chest-trashdump-9x41"], ["wooden-trashdump-9x42", "WideChests_wooden-chest-trashdump-9x42"], ["wooden-trashdump-10x6", "WideChests_wooden-chest-trashdump-10x6"], ["wooden-trashdump-10x7", "WideChests_wooden-chest-trashdump-10x7"], ["wooden-trashdump-10x8", "WideChests_wooden-chest-trashdump-10x8"], ["wooden-trashdump-10x9", "WideChests_wooden-chest-trashdump-10x9"], ["wooden-trashdump-10x10", "WideChests_wooden-chest-trashdump-10x10"], ["wooden-trashdump-10x11", "WideChests_wooden-chest-trashdump-10x11"], ["wooden-trashdump-10x12", "WideChests_wooden-chest-trashdump-10x12"], ["wooden-trashdump-10x13", "WideChests_wooden-chest-trashdump-10x13"], ["wooden-trashdump-10x14", "WideChests_wooden-chest-trashdump-10x14"], ["wooden-trashdump-10x15", "WideChests_wooden-chest-trashdump-10x15"], ["wooden-trashdump-10x16", "WideChests_wooden-chest-trashdump-10x16"], ["wooden-trashdump-10x17", "WideChests_wooden-chest-trashdump-10x17"], ["wooden-trashdump-10x18", "WideChests_wooden-chest-trashdump-10x18"], ["wooden-trashdump-10x19", "WideChests_wooden-chest-trashdump-10x19"], ["wooden-trashdump-10x20", "WideChests_wooden-chest-trashdump-10x20"], ["wooden-trashdump-10x21", "WideChests_wooden-chest-trashdump-10x21"], ["wooden-trashdump-10x22", "WideChests_wooden-chest-trashdump-10x22"], ["wooden-trashdump-10x23", "WideChests_wooden-chest-trashdump-10x23"], ["wooden-trashdump-10x24", "WideChests_wooden-chest-trashdump-10x24"], ["wooden-trashdump-10x25", "WideChests_wooden-chest-trashdump-10x25"], ["wooden-trashdump-10x26", "WideChests_wooden-chest-trashdump-10x26"], ["wooden-trashdump-10x27", "WideChests_wooden-chest-trashdump-10x27"], ["wooden-trashdump-10x28", "WideChests_wooden-chest-trashdump-10x28"], ["wooden-trashdump-10x29", "WideChests_wooden-chest-trashdump-10x29"], ["wooden-trashdump-10x30", "WideChests_wooden-chest-trashdump-10x30"], ["wooden-trashdump-10x31", "WideChests_wooden-chest-trashdump-10x31"], ["wooden-trashdump-10x32", "WideChests_wooden-chest-trashdump-10x32"], ["wooden-trashdump-10x33", "WideChests_wooden-chest-trashdump-10x33"], ["wooden-trashdump-10x34", "WideChests_wooden-chest-trashdump-10x34"], ["wooden-trashdump-10x35", "WideChests_wooden-chest-trashdump-10x35"], ["wooden-trashdump-10x36", "WideChests_wooden-chest-trashdump-10x36"], ["wooden-trashdump-10x37", "WideChests_wooden-chest-trashdump-10x37"], ["wooden-trashdump-10x38", "WideChests_wooden-chest-trashdump-10x38"], ["wooden-trashdump-10x39", "WideChests_wooden-chest-trashdump-10x39"], ["wooden-trashdump-10x40", "WideChests_wooden-chest-trashdump-10x40"], ["wooden-trashdump-10x41", "WideChests_wooden-chest-trashdump-10x41"], ["wooden-trashdump-10x42", "WideChests_wooden-chest-trashdump-10x42"], ["wooden-trashdump-11x6", "WideChests_wooden-chest-trashdump-11x6"], ["wooden-trashdump-11x7", "WideChests_wooden-chest-trashdump-11x7"], ["wooden-trashdump-11x8", "WideChests_wooden-chest-trashdump-11x8"], ["wooden-trashdump-11x9", "WideChests_wooden-chest-trashdump-11x9"], ["wooden-trashdump-11x10", "WideChests_wooden-chest-trashdump-11x10"], ["wooden-trashdump-11x11", "WideChests_wooden-chest-trashdump-11x11"], ["wooden-trashdump-11x12", "WideChests_wooden-chest-trashdump-11x12"], ["wooden-trashdump-11x13", "WideChests_wooden-chest-trashdump-11x13"], ["wooden-trashdump-11x14", "WideChests_wooden-chest-trashdump-11x14"], ["wooden-trashdump-11x15", "WideChests_wooden-chest-trashdump-11x15"], ["wooden-trashdump-11x16", "WideChests_wooden-chest-trashdump-11x16"], ["wooden-trashdump-11x17", "WideChests_wooden-chest-trashdump-11x17"], ["wooden-trashdump-11x18", "WideChests_wooden-chest-trashdump-11x18"], ["wooden-trashdump-11x19", "WideChests_wooden-chest-trashdump-11x19"], ["wooden-trashdump-11x20", "WideChests_wooden-chest-trashdump-11x20"], ["wooden-trashdump-11x21", "WideChests_wooden-chest-trashdump-11x21"], ["wooden-trashdump-11x22", "WideChests_wooden-chest-trashdump-11x22"], ["wooden-trashdump-11x23", "WideChests_wooden-chest-trashdump-11x23"], ["wooden-trashdump-11x24", "WideChests_wooden-chest-trashdump-11x24"], ["wooden-trashdump-11x25", "WideChests_wooden-chest-trashdump-11x25"], ["wooden-trashdump-11x26", "WideChests_wooden-chest-trashdump-11x26"], ["wooden-trashdump-11x27", "WideChests_wooden-chest-trashdump-11x27"], ["wooden-trashdump-11x28", "WideChests_wooden-chest-trashdump-11x28"], ["wooden-trashdump-11x29", "WideChests_wooden-chest-trashdump-11x29"], ["wooden-trashdump-11x30", "WideChests_wooden-chest-trashdump-11x30"], ["wooden-trashdump-11x31", "WideChests_wooden-chest-trashdump-11x31"], ["wooden-trashdump-11x32", "WideChests_wooden-chest-trashdump-11x32"], ["wooden-trashdump-11x33", "WideChests_wooden-chest-trashdump-11x33"], ["wooden-trashdump-11x34", "WideChests_wooden-chest-trashdump-11x34"], ["wooden-trashdump-11x35", "WideChests_wooden-chest-trashdump-11x35"], ["wooden-trashdump-11x36", "WideChests_wooden-chest-trashdump-11x36"], ["wooden-trashdump-11x37", "WideChests_wooden-chest-trashdump-11x37"], ["wooden-trashdump-11x38", "WideChests_wooden-chest-trashdump-11x38"], ["wooden-trashdump-11x39", "WideChests_wooden-chest-trashdump-11x39"], ["wooden-trashdump-11x40", "WideChests_wooden-chest-trashdump-11x40"], ["wooden-trashdump-11x41", "WideChests_wooden-chest-trashdump-11x41"], ["wooden-trashdump-11x42", "WideChests_wooden-chest-trashdump-11x42"], ["wooden-trashdump-12x6", "WideChests_wooden-chest-trashdump-12x6"], ["wooden-trashdump-12x7", "WideChests_wooden-chest-trashdump-12x7"], ["wooden-trashdump-12x8", "WideChests_wooden-chest-trashdump-12x8"], ["wooden-trashdump-12x9", "WideChests_wooden-chest-trashdump-12x9"], ["wooden-trashdump-12x10", "WideChests_wooden-chest-trashdump-12x10"], ["wooden-trashdump-12x11", "WideChests_wooden-chest-trashdump-12x11"], ["wooden-trashdump-12x12", "WideChests_wooden-chest-trashdump-12x12"], ["wooden-trashdump-12x13", "WideChests_wooden-chest-trashdump-12x13"], ["wooden-trashdump-12x14", "WideChests_wooden-chest-trashdump-12x14"], ["wooden-trashdump-12x15", "WideChests_wooden-chest-trashdump-12x15"], ["wooden-trashdump-12x16", "WideChests_wooden-chest-trashdump-12x16"], ["wooden-trashdump-12x17", "WideChests_wooden-chest-trashdump-12x17"], ["wooden-trashdump-12x18", "WideChests_wooden-chest-trashdump-12x18"], ["wooden-trashdump-12x19", "WideChests_wooden-chest-trashdump-12x19"], ["wooden-trashdump-12x20", "WideChests_wooden-chest-trashdump-12x20"], ["wooden-trashdump-12x21", "WideChests_wooden-chest-trashdump-12x21"], ["wooden-trashdump-12x22", "WideChests_wooden-chest-trashdump-12x22"], ["wooden-trashdump-12x23", "WideChests_wooden-chest-trashdump-12x23"], ["wooden-trashdump-12x24", "WideChests_wooden-chest-trashdump-12x24"], ["wooden-trashdump-12x25", "WideChests_wooden-chest-trashdump-12x25"], ["wooden-trashdump-12x26", "WideChests_wooden-chest-trashdump-12x26"], ["wooden-trashdump-12x27", "WideChests_wooden-chest-trashdump-12x27"], ["wooden-trashdump-12x28", "WideChests_wooden-chest-trashdump-12x28"], ["wooden-trashdump-12x29", "WideChests_wooden-chest-trashdump-12x29"], ["wooden-trashdump-12x30", "WideChests_wooden-chest-trashdump-12x30"], ["wooden-trashdump-12x31", "WideChests_wooden-chest-trashdump-12x31"], ["wooden-trashdump-12x32", "WideChests_wooden-chest-trashdump-12x32"], ["wooden-trashdump-12x33", "WideChests_wooden-chest-trashdump-12x33"], ["wooden-trashdump-12x34", "WideChests_wooden-chest-trashdump-12x34"], ["wooden-trashdump-12x35", "WideChests_wooden-chest-trashdump-12x35"], ["wooden-trashdump-12x36", "WideChests_wooden-chest-trashdump-12x36"], ["wooden-trashdump-12x37", "WideChests_wooden-chest-trashdump-12x37"], ["wooden-trashdump-12x38", "WideChests_wooden-chest-trashdump-12x38"], ["wooden-trashdump-12x39", "WideChests_wooden-chest-trashdump-12x39"], ["wooden-trashdump-12x40", "WideChests_wooden-chest-trashdump-12x40"], ["wooden-trashdump-12x41", "WideChests_wooden-chest-trashdump-12x41"], ["wooden-trashdump-12x42", "WideChests_wooden-chest-trashdump-12x42"], ["wooden-trashdump-13x6", "WideChests_wooden-chest-trashdump-13x6"], ["wooden-trashdump-13x7", "WideChests_wooden-chest-trashdump-13x7"], ["wooden-trashdump-13x8", "WideChests_wooden-chest-trashdump-13x8"], ["wooden-trashdump-13x9", "WideChests_wooden-chest-trashdump-13x9"], ["wooden-trashdump-13x10", "WideChests_wooden-chest-trashdump-13x10"], ["wooden-trashdump-13x11", "WideChests_wooden-chest-trashdump-13x11"], ["wooden-trashdump-13x12", "WideChests_wooden-chest-trashdump-13x12"], ["wooden-trashdump-13x13", "WideChests_wooden-chest-trashdump-13x13"], ["wooden-trashdump-13x14", "WideChests_wooden-chest-trashdump-13x14"], ["wooden-trashdump-13x15", "WideChests_wooden-chest-trashdump-13x15"], ["wooden-trashdump-13x16", "WideChests_wooden-chest-trashdump-13x16"], ["wooden-trashdump-13x17", "WideChests_wooden-chest-trashdump-13x17"], ["wooden-trashdump-13x18", "WideChests_wooden-chest-trashdump-13x18"], ["wooden-trashdump-13x19", "WideChests_wooden-chest-trashdump-13x19"], ["wooden-trashdump-13x20", "WideChests_wooden-chest-trashdump-13x20"], ["wooden-trashdump-13x21", "WideChests_wooden-chest-trashdump-13x21"], ["wooden-trashdump-13x22", "WideChests_wooden-chest-trashdump-13x22"], ["wooden-trashdump-13x23", "WideChests_wooden-chest-trashdump-13x23"], ["wooden-trashdump-13x24", "WideChests_wooden-chest-trashdump-13x24"], ["wooden-trashdump-13x25", "WideChests_wooden-chest-trashdump-13x25"], ["wooden-trashdump-13x26", "WideChests_wooden-chest-trashdump-13x26"], ["wooden-trashdump-13x27", "WideChests_wooden-chest-trashdump-13x27"], ["wooden-trashdump-13x28", "WideChests_wooden-chest-trashdump-13x28"], ["wooden-trashdump-13x29", "WideChests_wooden-chest-trashdump-13x29"], ["wooden-trashdump-13x30", "WideChests_wooden-chest-trashdump-13x30"], ["wooden-trashdump-13x31", "WideChests_wooden-chest-trashdump-13x31"], ["wooden-trashdump-13x32", "WideChests_wooden-chest-trashdump-13x32"], ["wooden-trashdump-13x33", "WideChests_wooden-chest-trashdump-13x33"], ["wooden-trashdump-13x34", "WideChests_wooden-chest-trashdump-13x34"], ["wooden-trashdump-13x35", "WideChests_wooden-chest-trashdump-13x35"], ["wooden-trashdump-13x36", "WideChests_wooden-chest-trashdump-13x36"], ["wooden-trashdump-13x37", "WideChests_wooden-chest-trashdump-13x37"], ["wooden-trashdump-13x38", "WideChests_wooden-chest-trashdump-13x38"], ["wooden-trashdump-13x39", "WideChests_wooden-chest-trashdump-13x39"], ["wooden-trashdump-13x40", "WideChests_wooden-chest-trashdump-13x40"], ["wooden-trashdump-13x41", "WideChests_wooden-chest-trashdump-13x41"], ["wooden-trashdump-13x42", "WideChests_wooden-chest-trashdump-13x42"], ["wooden-trashdump-14x6", "WideChests_wooden-chest-trashdump-14x6"], ["wooden-trashdump-14x7", "WideChests_wooden-chest-trashdump-14x7"], ["wooden-trashdump-14x8", "WideChests_wooden-chest-trashdump-14x8"], ["wooden-trashdump-14x9", "WideChests_wooden-chest-trashdump-14x9"], ["wooden-trashdump-14x10", "WideChests_wooden-chest-trashdump-14x10"], ["wooden-trashdump-14x11", "WideChests_wooden-chest-trashdump-14x11"], ["wooden-trashdump-14x12", "WideChests_wooden-chest-trashdump-14x12"], ["wooden-trashdump-14x13", "WideChests_wooden-chest-trashdump-14x13"], ["wooden-trashdump-14x14", "WideChests_wooden-chest-trashdump-14x14"], ["wooden-trashdump-14x15", "WideChests_wooden-chest-trashdump-14x15"], ["wooden-trashdump-14x16", "WideChests_wooden-chest-trashdump-14x16"], ["wooden-trashdump-14x17", "WideChests_wooden-chest-trashdump-14x17"], ["wooden-trashdump-14x18", "WideChests_wooden-chest-trashdump-14x18"], ["wooden-trashdump-14x19", "WideChests_wooden-chest-trashdump-14x19"], ["wooden-trashdump-14x20", "WideChests_wooden-chest-trashdump-14x20"], ["wooden-trashdump-14x21", "WideChests_wooden-chest-trashdump-14x21"], ["wooden-trashdump-14x22", "WideChests_wooden-chest-trashdump-14x22"], ["wooden-trashdump-14x23", "WideChests_wooden-chest-trashdump-14x23"], ["wooden-trashdump-14x24", "WideChests_wooden-chest-trashdump-14x24"], ["wooden-trashdump-14x25", "WideChests_wooden-chest-trashdump-14x25"], ["wooden-trashdump-14x26", "WideChests_wooden-chest-trashdump-14x26"], ["wooden-trashdump-14x27", "WideChests_wooden-chest-trashdump-14x27"], ["wooden-trashdump-14x28", "WideChests_wooden-chest-trashdump-14x28"], ["wooden-trashdump-14x29", "WideChests_wooden-chest-trashdump-14x29"], ["wooden-trashdump-14x30", "WideChests_wooden-chest-trashdump-14x30"], ["wooden-trashdump-14x31", "WideChests_wooden-chest-trashdump-14x31"], ["wooden-trashdump-14x32", "WideChests_wooden-chest-trashdump-14x32"], ["wooden-trashdump-14x33", "WideChests_wooden-chest-trashdump-14x33"], ["wooden-trashdump-14x34", "WideChests_wooden-chest-trashdump-14x34"], ["wooden-trashdump-14x35", "WideChests_wooden-chest-trashdump-14x35"], ["wooden-trashdump-14x36", "WideChests_wooden-chest-trashdump-14x36"], ["wooden-trashdump-14x37", "WideChests_wooden-chest-trashdump-14x37"], ["wooden-trashdump-14x38", "WideChests_wooden-chest-trashdump-14x38"], ["wooden-trashdump-14x39", "WideChests_wooden-chest-trashdump-14x39"], ["wooden-trashdump-14x40", "WideChests_wooden-chest-trashdump-14x40"], ["wooden-trashdump-14x41", "WideChests_wooden-chest-trashdump-14x41"], ["wooden-trashdump-14x42", "WideChests_wooden-chest-trashdump-14x42"], ["wooden-trashdump-15x6", "WideChests_wooden-chest-trashdump-15x6"], ["wooden-trashdump-15x7", "WideChests_wooden-chest-trashdump-15x7"], ["wooden-trashdump-15x8", "WideChests_wooden-chest-trashdump-15x8"], ["wooden-trashdump-15x9", "WideChests_wooden-chest-trashdump-15x9"], ["wooden-trashdump-15x10", "WideChests_wooden-chest-trashdump-15x10"], ["wooden-trashdump-15x11", "WideChests_wooden-chest-trashdump-15x11"], ["wooden-trashdump-15x12", "WideChests_wooden-chest-trashdump-15x12"], ["wooden-trashdump-15x13", "WideChests_wooden-chest-trashdump-15x13"], ["wooden-trashdump-15x14", "WideChests_wooden-chest-trashdump-15x14"], ["wooden-trashdump-15x15", "WideChests_wooden-chest-trashdump-15x15"], ["wooden-trashdump-15x16", "WideChests_wooden-chest-trashdump-15x16"], ["wooden-trashdump-15x17", "WideChests_wooden-chest-trashdump-15x17"], ["wooden-trashdump-15x18", "WideChests_wooden-chest-trashdump-15x18"], ["wooden-trashdump-15x19", "WideChests_wooden-chest-trashdump-15x19"], ["wooden-trashdump-15x20", "WideChests_wooden-chest-trashdump-15x20"], ["wooden-trashdump-15x21", "WideChests_wooden-chest-trashdump-15x21"], ["wooden-trashdump-15x22", "WideChests_wooden-chest-trashdump-15x22"], ["wooden-trashdump-15x23", "WideChests_wooden-chest-trashdump-15x23"], ["wooden-trashdump-15x24", "WideChests_wooden-chest-trashdump-15x24"], ["wooden-trashdump-15x25", "WideChests_wooden-chest-trashdump-15x25"], ["wooden-trashdump-15x26", "WideChests_wooden-chest-trashdump-15x26"], ["wooden-trashdump-15x27", "WideChests_wooden-chest-trashdump-15x27"], ["wooden-trashdump-15x28", "WideChests_wooden-chest-trashdump-15x28"], ["wooden-trashdump-15x29", "WideChests_wooden-chest-trashdump-15x29"], ["wooden-trashdump-15x30", "WideChests_wooden-chest-trashdump-15x30"], ["wooden-trashdump-15x31", "WideChests_wooden-chest-trashdump-15x31"], ["wooden-trashdump-15x32", "WideChests_wooden-chest-trashdump-15x32"], ["wooden-trashdump-15x33", "WideChests_wooden-chest-trashdump-15x33"], ["wooden-trashdump-15x34", "WideChests_wooden-chest-trashdump-15x34"], ["wooden-trashdump-15x35", "WideChests_wooden-chest-trashdump-15x35"], ["wooden-trashdump-15x36", "WideChests_wooden-chest-trashdump-15x36"], ["wooden-trashdump-15x37", "WideChests_wooden-chest-trashdump-15x37"], ["wooden-trashdump-15x38", "WideChests_wooden-chest-trashdump-15x38"], ["wooden-trashdump-15x39", "WideChests_wooden-chest-trashdump-15x39"], ["wooden-trashdump-15x40", "WideChests_wooden-chest-trashdump-15x40"], ["wooden-trashdump-15x41", "WideChests_wooden-chest-trashdump-15x41"], ["wooden-trashdump-15x42", "WideChests_wooden-chest-trashdump-15x42"], ["wooden-trashdump-16x6", "WideChests_wooden-chest-trashdump-16x6"], ["wooden-trashdump-16x7", "WideChests_wooden-chest-trashdump-16x7"], ["wooden-trashdump-16x8", "WideChests_wooden-chest-trashdump-16x8"], ["wooden-trashdump-16x9", "WideChests_wooden-chest-trashdump-16x9"], ["wooden-trashdump-16x10", "WideChests_wooden-chest-trashdump-16x10"], ["wooden-trashdump-16x11", "WideChests_wooden-chest-trashdump-16x11"], ["wooden-trashdump-16x12", "WideChests_wooden-chest-trashdump-16x12"], ["wooden-trashdump-16x13", "WideChests_wooden-chest-trashdump-16x13"], ["wooden-trashdump-16x14", "WideChests_wooden-chest-trashdump-16x14"], ["wooden-trashdump-16x15", "WideChests_wooden-chest-trashdump-16x15"], ["wooden-trashdump-16x16", "WideChests_wooden-chest-trashdump-16x16"], ["wooden-trashdump-16x17", "WideChests_wooden-chest-trashdump-16x17"], ["wooden-trashdump-16x18", "WideChests_wooden-chest-trashdump-16x18"], ["wooden-trashdump-16x19", "WideChests_wooden-chest-trashdump-16x19"], ["wooden-trashdump-16x20", "WideChests_wooden-chest-trashdump-16x20"], ["wooden-trashdump-16x21", "WideChests_wooden-chest-trashdump-16x21"], ["wooden-trashdump-16x22", "WideChests_wooden-chest-trashdump-16x22"], ["wooden-trashdump-16x23", "WideChests_wooden-chest-trashdump-16x23"], ["wooden-trashdump-16x24", "WideChests_wooden-chest-trashdump-16x24"], ["wooden-trashdump-16x25", "WideChests_wooden-chest-trashdump-16x25"], ["wooden-trashdump-16x26", "WideChests_wooden-chest-trashdump-16x26"], ["wooden-trashdump-16x27", "WideChests_wooden-chest-trashdump-16x27"], ["wooden-trashdump-16x28", "WideChests_wooden-chest-trashdump-16x28"], ["wooden-trashdump-16x29", "WideChests_wooden-chest-trashdump-16x29"], ["wooden-trashdump-16x30", "WideChests_wooden-chest-trashdump-16x30"], ["wooden-trashdump-16x31", "WideChests_wooden-chest-trashdump-16x31"], ["wooden-trashdump-16x32", "WideChests_wooden-chest-trashdump-16x32"], ["wooden-trashdump-16x33", "WideChests_wooden-chest-trashdump-16x33"], ["wooden-trashdump-16x34", "WideChests_wooden-chest-trashdump-16x34"], ["wooden-trashdump-16x35", "WideChests_wooden-chest-trashdump-16x35"], ["wooden-trashdump-16x36", "WideChests_wooden-chest-trashdump-16x36"], ["wooden-trashdump-16x37", "WideChests_wooden-chest-trashdump-16x37"], ["wooden-trashdump-16x38", "WideChests_wooden-chest-trashdump-16x38"], ["wooden-trashdump-16x39", "WideChests_wooden-chest-trashdump-16x39"], ["wooden-trashdump-16x40", "WideChests_wooden-chest-trashdump-16x40"], ["wooden-trashdump-16x41", "WideChests_wooden-chest-trashdump-16x41"], ["wooden-trashdump-16x42", "WideChests_wooden-chest-trashdump-16x42"], ["wooden-trashdump-17x6", "WideChests_wooden-chest-trashdump-17x6"], ["wooden-trashdump-17x7", "WideChests_wooden-chest-trashdump-17x7"], ["wooden-trashdump-17x8", "WideChests_wooden-chest-trashdump-17x8"], ["wooden-trashdump-17x9", "WideChests_wooden-chest-trashdump-17x9"], ["wooden-trashdump-17x10", "WideChests_wooden-chest-trashdump-17x10"], ["wooden-trashdump-17x11", "WideChests_wooden-chest-trashdump-17x11"], ["wooden-trashdump-17x12", "WideChests_wooden-chest-trashdump-17x12"], ["wooden-trashdump-17x13", "WideChests_wooden-chest-trashdump-17x13"], ["wooden-trashdump-17x14", "WideChests_wooden-chest-trashdump-17x14"], ["wooden-trashdump-17x15", "WideChests_wooden-chest-trashdump-17x15"], ["wooden-trashdump-17x16", "WideChests_wooden-chest-trashdump-17x16"], ["wooden-trashdump-17x17", "WideChests_wooden-chest-trashdump-17x17"], ["wooden-trashdump-17x18", "WideChests_wooden-chest-trashdump-17x18"], ["wooden-trashdump-17x19", "WideChests_wooden-chest-trashdump-17x19"], ["wooden-trashdump-17x20", "WideChests_wooden-chest-trashdump-17x20"], ["wooden-trashdump-17x21", "WideChests_wooden-chest-trashdump-17x21"], ["wooden-trashdump-17x22", "WideChests_wooden-chest-trashdump-17x22"], ["wooden-trashdump-17x23", "WideChests_wooden-chest-trashdump-17x23"], ["wooden-trashdump-17x24", "WideChests_wooden-chest-trashdump-17x24"], ["wooden-trashdump-17x25", "WideChests_wooden-chest-trashdump-17x25"], ["wooden-trashdump-17x26", "WideChests_wooden-chest-trashdump-17x26"], ["wooden-trashdump-17x27", "WideChests_wooden-chest-trashdump-17x27"], ["wooden-trashdump-17x28", "WideChests_wooden-chest-trashdump-17x28"], ["wooden-trashdump-17x29", "WideChests_wooden-chest-trashdump-17x29"], ["wooden-trashdump-17x30", "WideChests_wooden-chest-trashdump-17x30"], ["wooden-trashdump-17x31", "WideChests_wooden-chest-trashdump-17x31"], ["wooden-trashdump-17x32", "WideChests_wooden-chest-trashdump-17x32"], ["wooden-trashdump-17x33", "WideChests_wooden-chest-trashdump-17x33"], ["wooden-trashdump-17x34", "WideChests_wooden-chest-trashdump-17x34"], ["wooden-trashdump-17x35", "WideChests_wooden-chest-trashdump-17x35"], ["wooden-trashdump-17x36", "WideChests_wooden-chest-trashdump-17x36"], ["wooden-trashdump-17x37", "WideChests_wooden-chest-trashdump-17x37"], ["wooden-trashdump-17x38", "WideChests_wooden-chest-trashdump-17x38"], ["wooden-trashdump-17x39", "WideChests_wooden-chest-trashdump-17x39"], ["wooden-trashdump-17x40", "WideChests_wooden-chest-trashdump-17x40"], ["wooden-trashdump-17x41", "WideChests_wooden-chest-trashdump-17x41"], ["wooden-trashdump-17x42", "WideChests_wooden-chest-trashdump-17x42"], ["wooden-trashdump-18x6", "WideChests_wooden-chest-trashdump-18x6"], ["wooden-trashdump-18x7", "WideChests_wooden-chest-trashdump-18x7"], ["wooden-trashdump-18x8", "WideChests_wooden-chest-trashdump-18x8"], ["wooden-trashdump-18x9", "WideChests_wooden-chest-trashdump-18x9"], ["wooden-trashdump-18x10", "WideChests_wooden-chest-trashdump-18x10"], ["wooden-trashdump-18x11", "WideChests_wooden-chest-trashdump-18x11"], ["wooden-trashdump-18x12", "WideChests_wooden-chest-trashdump-18x12"], ["wooden-trashdump-18x13", "WideChests_wooden-chest-trashdump-18x13"], ["wooden-trashdump-18x14", "WideChests_wooden-chest-trashdump-18x14"], ["wooden-trashdump-18x15", "WideChests_wooden-chest-trashdump-18x15"], ["wooden-trashdump-18x16", "WideChests_wooden-chest-trashdump-18x16"], ["wooden-trashdump-18x17", "WideChests_wooden-chest-trashdump-18x17"], ["wooden-trashdump-18x18", "WideChests_wooden-chest-trashdump-18x18"], ["wooden-trashdump-18x19", "WideChests_wooden-chest-trashdump-18x19"], ["wooden-trashdump-18x20", "WideChests_wooden-chest-trashdump-18x20"], ["wooden-trashdump-18x21", "WideChests_wooden-chest-trashdump-18x21"], ["wooden-trashdump-18x22", "WideChests_wooden-chest-trashdump-18x22"], ["wooden-trashdump-18x23", "WideChests_wooden-chest-trashdump-18x23"], ["wooden-trashdump-18x24", "WideChests_wooden-chest-trashdump-18x24"], ["wooden-trashdump-18x25", "WideChests_wooden-chest-trashdump-18x25"], ["wooden-trashdump-18x26", "WideChests_wooden-chest-trashdump-18x26"], ["wooden-trashdump-18x27", "WideChests_wooden-chest-trashdump-18x27"], ["wooden-trashdump-18x28", "WideChests_wooden-chest-trashdump-18x28"], ["wooden-trashdump-18x29", "WideChests_wooden-chest-trashdump-18x29"], ["wooden-trashdump-18x30", "WideChests_wooden-chest-trashdump-18x30"], ["wooden-trashdump-18x31", "WideChests_wooden-chest-trashdump-18x31"], ["wooden-trashdump-18x32", "WideChests_wooden-chest-trashdump-18x32"], ["wooden-trashdump-18x33", "WideChests_wooden-chest-trashdump-18x33"], ["wooden-trashdump-18x34", "WideChests_wooden-chest-trashdump-18x34"], ["wooden-trashdump-18x35", "WideChests_wooden-chest-trashdump-18x35"], ["wooden-trashdump-18x36", "WideChests_wooden-chest-trashdump-18x36"], ["wooden-trashdump-18x37", "WideChests_wooden-chest-trashdump-18x37"], ["wooden-trashdump-18x38", "WideChests_wooden-chest-trashdump-18x38"], ["wooden-trashdump-18x39", "WideChests_wooden-chest-trashdump-18x39"], ["wooden-trashdump-18x40", "WideChests_wooden-chest-trashdump-18x40"], ["wooden-trashdump-18x41", "WideChests_wooden-chest-trashdump-18x41"], ["wooden-trashdump-18x42", "WideChests_wooden-chest-trashdump-18x42"], ["wooden-trashdump-19x6", "WideChests_wooden-chest-trashdump-19x6"], ["wooden-trashdump-19x7", "WideChests_wooden-chest-trashdump-19x7"], ["wooden-trashdump-19x8", "WideChests_wooden-chest-trashdump-19x8"], ["wooden-trashdump-19x9", "WideChests_wooden-chest-trashdump-19x9"], ["wooden-trashdump-19x10", "WideChests_wooden-chest-trashdump-19x10"], ["wooden-trashdump-19x11", "WideChests_wooden-chest-trashdump-19x11"], ["wooden-trashdump-19x12", "WideChests_wooden-chest-trashdump-19x12"], ["wooden-trashdump-19x13", "WideChests_wooden-chest-trashdump-19x13"], ["wooden-trashdump-19x14", "WideChests_wooden-chest-trashdump-19x14"], ["wooden-trashdump-19x15", "WideChests_wooden-chest-trashdump-19x15"], ["wooden-trashdump-19x16", "WideChests_wooden-chest-trashdump-19x16"], ["wooden-trashdump-19x17", "WideChests_wooden-chest-trashdump-19x17"], ["wooden-trashdump-19x18", "WideChests_wooden-chest-trashdump-19x18"], ["wooden-trashdump-19x19", "WideChests_wooden-chest-trashdump-19x19"], ["wooden-trashdump-19x20", "WideChests_wooden-chest-trashdump-19x20"], ["wooden-trashdump-19x21", "WideChests_wooden-chest-trashdump-19x21"], ["wooden-trashdump-19x22", "WideChests_wooden-chest-trashdump-19x22"], ["wooden-trashdump-19x23", "WideChests_wooden-chest-trashdump-19x23"], ["wooden-trashdump-19x24", "WideChests_wooden-chest-trashdump-19x24"], ["wooden-trashdump-19x25", "WideChests_wooden-chest-trashdump-19x25"], ["wooden-trashdump-19x26", "WideChests_wooden-chest-trashdump-19x26"], ["wooden-trashdump-19x27", "WideChests_wooden-chest-trashdump-19x27"], ["wooden-trashdump-19x28", "WideChests_wooden-chest-trashdump-19x28"], ["wooden-trashdump-19x29", "WideChests_wooden-chest-trashdump-19x29"], ["wooden-trashdump-19x30", "WideChests_wooden-chest-trashdump-19x30"], ["wooden-trashdump-19x31", "WideChests_wooden-chest-trashdump-19x31"], ["wooden-trashdump-19x32", "WideChests_wooden-chest-trashdump-19x32"], ["wooden-trashdump-19x33", "WideChests_wooden-chest-trashdump-19x33"], ["wooden-trashdump-19x34", "WideChests_wooden-chest-trashdump-19x34"], ["wooden-trashdump-19x35", "WideChests_wooden-chest-trashdump-19x35"], ["wooden-trashdump-19x36", "WideChests_wooden-chest-trashdump-19x36"], ["wooden-trashdump-19x37", "WideChests_wooden-chest-trashdump-19x37"], ["wooden-trashdump-19x38", "WideChests_wooden-chest-trashdump-19x38"], ["wooden-trashdump-19x39", "WideChests_wooden-chest-trashdump-19x39"], ["wooden-trashdump-19x40", "WideChests_wooden-chest-trashdump-19x40"], ["wooden-trashdump-19x41", "WideChests_wooden-chest-trashdump-19x41"], ["wooden-trashdump-19x42", "WideChests_wooden-chest-trashdump-19x42"], ["wooden-trashdump-20x6", "WideChests_wooden-chest-trashdump-20x6"], ["wooden-trashdump-20x7", "WideChests_wooden-chest-trashdump-20x7"], ["wooden-trashdump-20x8", "WideChests_wooden-chest-trashdump-20x8"], ["wooden-trashdump-20x9", "WideChests_wooden-chest-trashdump-20x9"], ["wooden-trashdump-20x10", "WideChests_wooden-chest-trashdump-20x10"], ["wooden-trashdump-20x11", "WideChests_wooden-chest-trashdump-20x11"], ["wooden-trashdump-20x12", "WideChests_wooden-chest-trashdump-20x12"], ["wooden-trashdump-20x13", "WideChests_wooden-chest-trashdump-20x13"], ["wooden-trashdump-20x14", "WideChests_wooden-chest-trashdump-20x14"], ["wooden-trashdump-20x15", "WideChests_wooden-chest-trashdump-20x15"], ["wooden-trashdump-20x16", "WideChests_wooden-chest-trashdump-20x16"], ["wooden-trashdump-20x17", "WideChests_wooden-chest-trashdump-20x17"], ["wooden-trashdump-20x18", "WideChests_wooden-chest-trashdump-20x18"], ["wooden-trashdump-20x19", "WideChests_wooden-chest-trashdump-20x19"], ["wooden-trashdump-20x20", "WideChests_wooden-chest-trashdump-20x20"], ["wooden-trashdump-20x21", "WideChests_wooden-chest-trashdump-20x21"], ["wooden-trashdump-20x22", "WideChests_wooden-chest-trashdump-20x22"], ["wooden-trashdump-20x23", "WideChests_wooden-chest-trashdump-20x23"], ["wooden-trashdump-20x24", "WideChests_wooden-chest-trashdump-20x24"], ["wooden-trashdump-20x25", "WideChests_wooden-chest-trashdump-20x25"], ["wooden-trashdump-20x26", "WideChests_wooden-chest-trashdump-20x26"], ["wooden-trashdump-20x27", "WideChests_wooden-chest-trashdump-20x27"], ["wooden-trashdump-20x28", "WideChests_wooden-chest-trashdump-20x28"], ["wooden-trashdump-20x29", "WideChests_wooden-chest-trashdump-20x29"], ["wooden-trashdump-20x30", "WideChests_wooden-chest-trashdump-20x30"], ["wooden-trashdump-20x31", "WideChests_wooden-chest-trashdump-20x31"], ["wooden-trashdump-20x32", "WideChests_wooden-chest-trashdump-20x32"], ["wooden-trashdump-20x33", "WideChests_wooden-chest-trashdump-20x33"], ["wooden-trashdump-20x34", "WideChests_wooden-chest-trashdump-20x34"], ["wooden-trashdump-20x35", "WideChests_wooden-chest-trashdump-20x35"], ["wooden-trashdump-20x36", "WideChests_wooden-chest-trashdump-20x36"], ["wooden-trashdump-20x37", "WideChests_wooden-chest-trashdump-20x37"], ["wooden-trashdump-20x38", "WideChests_wooden-chest-trashdump-20x38"], ["wooden-trashdump-20x39", "WideChests_wooden-chest-trashdump-20x39"], ["wooden-trashdump-20x40", "WideChests_wooden-chest-trashdump-20x40"], ["wooden-trashdump-20x41", "WideChests_wooden-chest-trashdump-20x41"], ["wooden-trashdump-20x42", "WideChests_wooden-chest-trashdump-20x42"], ["wooden-trashdump-21x6", "WideChests_wooden-chest-trashdump-21x6"], ["wooden-trashdump-21x7", "WideChests_wooden-chest-trashdump-21x7"], ["wooden-trashdump-21x8", "WideChests_wooden-chest-trashdump-21x8"], ["wooden-trashdump-21x9", "WideChests_wooden-chest-trashdump-21x9"], ["wooden-trashdump-21x10", "WideChests_wooden-chest-trashdump-21x10"], ["wooden-trashdump-21x11", "WideChests_wooden-chest-trashdump-21x11"], ["wooden-trashdump-21x12", "WideChests_wooden-chest-trashdump-21x12"], ["wooden-trashdump-21x13", "WideChests_wooden-chest-trashdump-21x13"], ["wooden-trashdump-21x14", "WideChests_wooden-chest-trashdump-21x14"], ["wooden-trashdump-21x15", "WideChests_wooden-chest-trashdump-21x15"], ["wooden-trashdump-21x16", "WideChests_wooden-chest-trashdump-21x16"], ["wooden-trashdump-21x17", "WideChests_wooden-chest-trashdump-21x17"], ["wooden-trashdump-21x18", "WideChests_wooden-chest-trashdump-21x18"], ["wooden-trashdump-21x19", "WideChests_wooden-chest-trashdump-21x19"], ["wooden-trashdump-21x20", "WideChests_wooden-chest-trashdump-21x20"], ["wooden-trashdump-21x21", "WideChests_wooden-chest-trashdump-21x21"], ["wooden-trashdump-21x22", "WideChests_wooden-chest-trashdump-21x22"], ["wooden-trashdump-21x23", "WideChests_wooden-chest-trashdump-21x23"], ["wooden-trashdump-21x24", "WideChests_wooden-chest-trashdump-21x24"], ["wooden-trashdump-21x25", "WideChests_wooden-chest-trashdump-21x25"], ["wooden-trashdump-21x26", "WideChests_wooden-chest-trashdump-21x26"], ["wooden-trashdump-21x27", "WideChests_wooden-chest-trashdump-21x27"], ["wooden-trashdump-21x28", "WideChests_wooden-chest-trashdump-21x28"], ["wooden-trashdump-21x29", "WideChests_wooden-chest-trashdump-21x29"], ["wooden-trashdump-21x30", "WideChests_wooden-chest-trashdump-21x30"], ["wooden-trashdump-21x31", "WideChests_wooden-chest-trashdump-21x31"], ["wooden-trashdump-21x32", "WideChests_wooden-chest-trashdump-21x32"], ["wooden-trashdump-21x33", "WideChests_wooden-chest-trashdump-21x33"], ["wooden-trashdump-21x34", "WideChests_wooden-chest-trashdump-21x34"], ["wooden-trashdump-21x35", "WideChests_wooden-chest-trashdump-21x35"], ["wooden-trashdump-21x36", "WideChests_wooden-chest-trashdump-21x36"], ["wooden-trashdump-21x37", "WideChests_wooden-chest-trashdump-21x37"], ["wooden-trashdump-21x38", "WideChests_wooden-chest-trashdump-21x38"], ["wooden-trashdump-21x39", "WideChests_wooden-chest-trashdump-21x39"], ["wooden-trashdump-21x40", "WideChests_wooden-chest-trashdump-21x40"], ["wooden-trashdump-21x41", "WideChests_wooden-chest-trashdump-21x41"], ["wooden-trashdump-21x42", "WideChests_wooden-chest-trashdump-21x42"], ["wooden-trashdump-22x6", "WideChests_wooden-chest-trashdump-22x6"], ["wooden-trashdump-22x7", "WideChests_wooden-chest-trashdump-22x7"], ["wooden-trashdump-22x8", "WideChests_wooden-chest-trashdump-22x8"], ["wooden-trashdump-22x9", "WideChests_wooden-chest-trashdump-22x9"], ["wooden-trashdump-22x10", "WideChests_wooden-chest-trashdump-22x10"], ["wooden-trashdump-22x11", "WideChests_wooden-chest-trashdump-22x11"], ["wooden-trashdump-22x12", "WideChests_wooden-chest-trashdump-22x12"], ["wooden-trashdump-22x13", "WideChests_wooden-chest-trashdump-22x13"], ["wooden-trashdump-22x14", "WideChests_wooden-chest-trashdump-22x14"], ["wooden-trashdump-22x15", "WideChests_wooden-chest-trashdump-22x15"], ["wooden-trashdump-22x16", "WideChests_wooden-chest-trashdump-22x16"], ["wooden-trashdump-22x17", "WideChests_wooden-chest-trashdump-22x17"], ["wooden-trashdump-22x18", "WideChests_wooden-chest-trashdump-22x18"], ["wooden-trashdump-22x19", "WideChests_wooden-chest-trashdump-22x19"], ["wooden-trashdump-22x20", "WideChests_wooden-chest-trashdump-22x20"], ["wooden-trashdump-22x21", "WideChests_wooden-chest-trashdump-22x21"], ["wooden-trashdump-22x22", "WideChests_wooden-chest-trashdump-22x22"], ["wooden-trashdump-22x23", "WideChests_wooden-chest-trashdump-22x23"], ["wooden-trashdump-22x24", "WideChests_wooden-chest-trashdump-22x24"], ["wooden-trashdump-22x25", "WideChests_wooden-chest-trashdump-22x25"], ["wooden-trashdump-22x26", "WideChests_wooden-chest-trashdump-22x26"], ["wooden-trashdump-22x27", "WideChests_wooden-chest-trashdump-22x27"], ["wooden-trashdump-22x28", "WideChests_wooden-chest-trashdump-22x28"], ["wooden-trashdump-22x29", "WideChests_wooden-chest-trashdump-22x29"], ["wooden-trashdump-22x30", "WideChests_wooden-chest-trashdump-22x30"], ["wooden-trashdump-22x31", "WideChests_wooden-chest-trashdump-22x31"], ["wooden-trashdump-22x32", "WideChests_wooden-chest-trashdump-22x32"], ["wooden-trashdump-22x33", "WideChests_wooden-chest-trashdump-22x33"], ["wooden-trashdump-22x34", "WideChests_wooden-chest-trashdump-22x34"], ["wooden-trashdump-22x35", "WideChests_wooden-chest-trashdump-22x35"], ["wooden-trashdump-22x36", "WideChests_wooden-chest-trashdump-22x36"], ["wooden-trashdump-22x37", "WideChests_wooden-chest-trashdump-22x37"], ["wooden-trashdump-22x38", "WideChests_wooden-chest-trashdump-22x38"], ["wooden-trashdump-22x39", "WideChests_wooden-chest-trashdump-22x39"], ["wooden-trashdump-22x40", "WideChests_wooden-chest-trashdump-22x40"], ["wooden-trashdump-22x41", "WideChests_wooden-chest-trashdump-22x41"], ["wooden-trashdump-22x42", "WideChests_wooden-chest-trashdump-22x42"], ["wooden-trashdump-23x6", "WideChests_wooden-chest-trashdump-23x6"], ["wooden-trashdump-23x7", "WideChests_wooden-chest-trashdump-23x7"], ["wooden-trashdump-23x8", "WideChests_wooden-chest-trashdump-23x8"], ["wooden-trashdump-23x9", "WideChests_wooden-chest-trashdump-23x9"], ["wooden-trashdump-23x10", "WideChests_wooden-chest-trashdump-23x10"], ["wooden-trashdump-23x11", "WideChests_wooden-chest-trashdump-23x11"], ["wooden-trashdump-23x12", "WideChests_wooden-chest-trashdump-23x12"], ["wooden-trashdump-23x13", "WideChests_wooden-chest-trashdump-23x13"], ["wooden-trashdump-23x14", "WideChests_wooden-chest-trashdump-23x14"], ["wooden-trashdump-23x15", "WideChests_wooden-chest-trashdump-23x15"], ["wooden-trashdump-23x16", "WideChests_wooden-chest-trashdump-23x16"], ["wooden-trashdump-23x17", "WideChests_wooden-chest-trashdump-23x17"], ["wooden-trashdump-23x18", "WideChests_wooden-chest-trashdump-23x18"], ["wooden-trashdump-23x19", "WideChests_wooden-chest-trashdump-23x19"], ["wooden-trashdump-23x20", "WideChests_wooden-chest-trashdump-23x20"], ["wooden-trashdump-23x21", "WideChests_wooden-chest-trashdump-23x21"], ["wooden-trashdump-23x22", "WideChests_wooden-chest-trashdump-23x22"], ["wooden-trashdump-23x23", "WideChests_wooden-chest-trashdump-23x23"], ["wooden-trashdump-23x24", "WideChests_wooden-chest-trashdump-23x24"], ["wooden-trashdump-23x25", "WideChests_wooden-chest-trashdump-23x25"], ["wooden-trashdump-23x26", "WideChests_wooden-chest-trashdump-23x26"], ["wooden-trashdump-23x27", "WideChests_wooden-chest-trashdump-23x27"], ["wooden-trashdump-23x28", "WideChests_wooden-chest-trashdump-23x28"], ["wooden-trashdump-23x29", "WideChests_wooden-chest-trashdump-23x29"], ["wooden-trashdump-23x30", "WideChests_wooden-chest-trashdump-23x30"], ["wooden-trashdump-23x31", "WideChests_wooden-chest-trashdump-23x31"], ["wooden-trashdump-23x32", "WideChests_wooden-chest-trashdump-23x32"], ["wooden-trashdump-23x33", "WideChests_wooden-chest-trashdump-23x33"], ["wooden-trashdump-23x34", "WideChests_wooden-chest-trashdump-23x34"], ["wooden-trashdump-23x35", "WideChests_wooden-chest-trashdump-23x35"], ["wooden-trashdump-23x36", "WideChests_wooden-chest-trashdump-23x36"], ["wooden-trashdump-23x37", "WideChests_wooden-chest-trashdump-23x37"], ["wooden-trashdump-23x38", "WideChests_wooden-chest-trashdump-23x38"], ["wooden-trashdump-23x39", "WideChests_wooden-chest-trashdump-23x39"], ["wooden-trashdump-23x40", "WideChests_wooden-chest-trashdump-23x40"], ["wooden-trashdump-23x41", "WideChests_wooden-chest-trashdump-23x41"], ["wooden-trashdump-23x42", "WideChests_wooden-chest-trashdump-23x42"], ["wooden-trashdump-24x6", "WideChests_wooden-chest-trashdump-24x6"], ["wooden-trashdump-24x7", "WideChests_wooden-chest-trashdump-24x7"], ["wooden-trashdump-24x8", "WideChests_wooden-chest-trashdump-24x8"], ["wooden-trashdump-24x9", "WideChests_wooden-chest-trashdump-24x9"], ["wooden-trashdump-24x10", "WideChests_wooden-chest-trashdump-24x10"], ["wooden-trashdump-24x11", "WideChests_wooden-chest-trashdump-24x11"], ["wooden-trashdump-24x12", "WideChests_wooden-chest-trashdump-24x12"], ["wooden-trashdump-24x13", "WideChests_wooden-chest-trashdump-24x13"], ["wooden-trashdump-24x14", "WideChests_wooden-chest-trashdump-24x14"], ["wooden-trashdump-24x15", "WideChests_wooden-chest-trashdump-24x15"], ["wooden-trashdump-24x16", "WideChests_wooden-chest-trashdump-24x16"], ["wooden-trashdump-24x17", "WideChests_wooden-chest-trashdump-24x17"], ["wooden-trashdump-24x18", "WideChests_wooden-chest-trashdump-24x18"], ["wooden-trashdump-24x19", "WideChests_wooden-chest-trashdump-24x19"], ["wooden-trashdump-24x20", "WideChests_wooden-chest-trashdump-24x20"], ["wooden-trashdump-24x21", "WideChests_wooden-chest-trashdump-24x21"], ["wooden-trashdump-24x22", "WideChests_wooden-chest-trashdump-24x22"], ["wooden-trashdump-24x23", "WideChests_wooden-chest-trashdump-24x23"], ["wooden-trashdump-24x24", "WideChests_wooden-chest-trashdump-24x24"], ["wooden-trashdump-24x25", "WideChests_wooden-chest-trashdump-24x25"], ["wooden-trashdump-24x26", "WideChests_wooden-chest-trashdump-24x26"], ["wooden-trashdump-24x27", "WideChests_wooden-chest-trashdump-24x27"], ["wooden-trashdump-24x28", "WideChests_wooden-chest-trashdump-24x28"], ["wooden-trashdump-24x29", "WideChests_wooden-chest-trashdump-24x29"], ["wooden-trashdump-24x30", "WideChests_wooden-chest-trashdump-24x30"], ["wooden-trashdump-24x31", "WideChests_wooden-chest-trashdump-24x31"], ["wooden-trashdump-24x32", "WideChests_wooden-chest-trashdump-24x32"], ["wooden-trashdump-24x33", "WideChests_wooden-chest-trashdump-24x33"], ["wooden-trashdump-24x34", "WideChests_wooden-chest-trashdump-24x34"], ["wooden-trashdump-24x35", "WideChests_wooden-chest-trashdump-24x35"], ["wooden-trashdump-24x36", "WideChests_wooden-chest-trashdump-24x36"], ["wooden-trashdump-24x37", "WideChests_wooden-chest-trashdump-24x37"], ["wooden-trashdump-24x38", "WideChests_wooden-chest-trashdump-24x38"], ["wooden-trashdump-24x39", "WideChests_wooden-chest-trashdump-24x39"], ["wooden-trashdump-24x40", "WideChests_wooden-chest-trashdump-24x40"], ["wooden-trashdump-24x41", "WideChests_wooden-chest-trashdump-24x41"], ["wooden-trashdump-24x42", "WideChests_wooden-chest-trashdump-24x42"], ["wooden-trashdump-25x6", "WideChests_wooden-chest-trashdump-25x6"], ["wooden-trashdump-25x7", "WideChests_wooden-chest-trashdump-25x7"], ["wooden-trashdump-25x8", "WideChests_wooden-chest-trashdump-25x8"], ["wooden-trashdump-25x9", "WideChests_wooden-chest-trashdump-25x9"], ["wooden-trashdump-25x10", "WideChests_wooden-chest-trashdump-25x10"], ["wooden-trashdump-25x11", "WideChests_wooden-chest-trashdump-25x11"], ["wooden-trashdump-25x12", "WideChests_wooden-chest-trashdump-25x12"], ["wooden-trashdump-25x13", "WideChests_wooden-chest-trashdump-25x13"], ["wooden-trashdump-25x14", "WideChests_wooden-chest-trashdump-25x14"], ["wooden-trashdump-25x15", "WideChests_wooden-chest-trashdump-25x15"], ["wooden-trashdump-25x16", "WideChests_wooden-chest-trashdump-25x16"], ["wooden-trashdump-25x17", "WideChests_wooden-chest-trashdump-25x17"], ["wooden-trashdump-25x18", "WideChests_wooden-chest-trashdump-25x18"], ["wooden-trashdump-25x19", "WideChests_wooden-chest-trashdump-25x19"], ["wooden-trashdump-25x20", "WideChests_wooden-chest-trashdump-25x20"], ["wooden-trashdump-25x21", "WideChests_wooden-chest-trashdump-25x21"], ["wooden-trashdump-25x22", "WideChests_wooden-chest-trashdump-25x22"], ["wooden-trashdump-25x23", "WideChests_wooden-chest-trashdump-25x23"], ["wooden-trashdump-25x24", "WideChests_wooden-chest-trashdump-25x24"], ["wooden-trashdump-25x25", "WideChests_wooden-chest-trashdump-25x25"], ["wooden-trashdump-25x26", "WideChests_wooden-chest-trashdump-25x26"], ["wooden-trashdump-25x27", "WideChests_wooden-chest-trashdump-25x27"], ["wooden-trashdump-25x28", "WideChests_wooden-chest-trashdump-25x28"], ["wooden-trashdump-25x29", "WideChests_wooden-chest-trashdump-25x29"], ["wooden-trashdump-25x30", "WideChests_wooden-chest-trashdump-25x30"], ["wooden-trashdump-25x31", "WideChests_wooden-chest-trashdump-25x31"], ["wooden-trashdump-25x32", "WideChests_wooden-chest-trashdump-25x32"], ["wooden-trashdump-25x33", "WideChests_wooden-chest-trashdump-25x33"], ["wooden-trashdump-25x34", "WideChests_wooden-chest-trashdump-25x34"], ["wooden-trashdump-25x35", "WideChests_wooden-chest-trashdump-25x35"], ["wooden-trashdump-25x36", "WideChests_wooden-chest-trashdump-25x36"], ["wooden-trashdump-25x37", "WideChests_wooden-chest-trashdump-25x37"], ["wooden-trashdump-25x38", "WideChests_wooden-chest-trashdump-25x38"], ["wooden-trashdump-25x39", "WideChests_wooden-chest-trashdump-25x39"], ["wooden-trashdump-25x40", "WideChests_wooden-chest-trashdump-25x40"], ["wooden-trashdump-25x41", "WideChests_wooden-chest-trashdump-25x41"], ["wooden-trashdump-25x42", "WideChests_wooden-chest-trashdump-25x42"], ["wooden-trashdump-26x6", "WideChests_wooden-chest-trashdump-26x6"], ["wooden-trashdump-26x7", "WideChests_wooden-chest-trashdump-26x7"], ["wooden-trashdump-26x8", "WideChests_wooden-chest-trashdump-26x8"], ["wooden-trashdump-26x9", "WideChests_wooden-chest-trashdump-26x9"], ["wooden-trashdump-26x10", "WideChests_wooden-chest-trashdump-26x10"], ["wooden-trashdump-26x11", "WideChests_wooden-chest-trashdump-26x11"], ["wooden-trashdump-26x12", "WideChests_wooden-chest-trashdump-26x12"], ["wooden-trashdump-26x13", "WideChests_wooden-chest-trashdump-26x13"], ["wooden-trashdump-26x14", "WideChests_wooden-chest-trashdump-26x14"], ["wooden-trashdump-26x15", "WideChests_wooden-chest-trashdump-26x15"], ["wooden-trashdump-26x16", "WideChests_wooden-chest-trashdump-26x16"], ["wooden-trashdump-26x17", "WideChests_wooden-chest-trashdump-26x17"], ["wooden-trashdump-26x18", "WideChests_wooden-chest-trashdump-26x18"], ["wooden-trashdump-26x19", "WideChests_wooden-chest-trashdump-26x19"], ["wooden-trashdump-26x20", "WideChests_wooden-chest-trashdump-26x20"], ["wooden-trashdump-26x21", "WideChests_wooden-chest-trashdump-26x21"], ["wooden-trashdump-26x22", "WideChests_wooden-chest-trashdump-26x22"], ["wooden-trashdump-26x23", "WideChests_wooden-chest-trashdump-26x23"], ["wooden-trashdump-26x24", "WideChests_wooden-chest-trashdump-26x24"], ["wooden-trashdump-26x25", "WideChests_wooden-chest-trashdump-26x25"], ["wooden-trashdump-26x26", "WideChests_wooden-chest-trashdump-26x26"], ["wooden-trashdump-26x27", "WideChests_wooden-chest-trashdump-26x27"], ["wooden-trashdump-26x28", "WideChests_wooden-chest-trashdump-26x28"], ["wooden-trashdump-26x29", "WideChests_wooden-chest-trashdump-26x29"], ["wooden-trashdump-26x30", "WideChests_wooden-chest-trashdump-26x30"], ["wooden-trashdump-26x31", "WideChests_wooden-chest-trashdump-26x31"], ["wooden-trashdump-26x32", "WideChests_wooden-chest-trashdump-26x32"], ["wooden-trashdump-26x33", "WideChests_wooden-chest-trashdump-26x33"], ["wooden-trashdump-26x34", "WideChests_wooden-chest-trashdump-26x34"], ["wooden-trashdump-26x35", "WideChests_wooden-chest-trashdump-26x35"], ["wooden-trashdump-26x36", "WideChests_wooden-chest-trashdump-26x36"], ["wooden-trashdump-26x37", "WideChests_wooden-chest-trashdump-26x37"], ["wooden-trashdump-26x38", "WideChests_wooden-chest-trashdump-26x38"], ["wooden-trashdump-26x39", "WideChests_wooden-chest-trashdump-26x39"], ["wooden-trashdump-26x40", "WideChests_wooden-chest-trashdump-26x40"], ["wooden-trashdump-26x41", "WideChests_wooden-chest-trashdump-26x41"], ["wooden-trashdump-26x42", "WideChests_wooden-chest-trashdump-26x42"], ["wooden-trashdump-27x6", "WideChests_wooden-chest-trashdump-27x6"], ["wooden-trashdump-27x7", "WideChests_wooden-chest-trashdump-27x7"], ["wooden-trashdump-27x8", "WideChests_wooden-chest-trashdump-27x8"], ["wooden-trashdump-27x9", "WideChests_wooden-chest-trashdump-27x9"], ["wooden-trashdump-27x10", "WideChests_wooden-chest-trashdump-27x10"], ["wooden-trashdump-27x11", "WideChests_wooden-chest-trashdump-27x11"], ["wooden-trashdump-27x12", "WideChests_wooden-chest-trashdump-27x12"], ["wooden-trashdump-27x13", "WideChests_wooden-chest-trashdump-27x13"], ["wooden-trashdump-27x14", "WideChests_wooden-chest-trashdump-27x14"], ["wooden-trashdump-27x15", "WideChests_wooden-chest-trashdump-27x15"], ["wooden-trashdump-27x16", "WideChests_wooden-chest-trashdump-27x16"], ["wooden-trashdump-27x17", "WideChests_wooden-chest-trashdump-27x17"], ["wooden-trashdump-27x18", "WideChests_wooden-chest-trashdump-27x18"], ["wooden-trashdump-27x19", "WideChests_wooden-chest-trashdump-27x19"], ["wooden-trashdump-27x20", "WideChests_wooden-chest-trashdump-27x20"], ["wooden-trashdump-27x21", "WideChests_wooden-chest-trashdump-27x21"], ["wooden-trashdump-27x22", "WideChests_wooden-chest-trashdump-27x22"], ["wooden-trashdump-27x23", "WideChests_wooden-chest-trashdump-27x23"], ["wooden-trashdump-27x24", "WideChests_wooden-chest-trashdump-27x24"], ["wooden-trashdump-27x25", "WideChests_wooden-chest-trashdump-27x25"], ["wooden-trashdump-27x26", "WideChests_wooden-chest-trashdump-27x26"], ["wooden-trashdump-27x27", "WideChests_wooden-chest-trashdump-27x27"], ["wooden-trashdump-27x28", "WideChests_wooden-chest-trashdump-27x28"], ["wooden-trashdump-27x29", "WideChests_wooden-chest-trashdump-27x29"], ["wooden-trashdump-27x30", "WideChests_wooden-chest-trashdump-27x30"], ["wooden-trashdump-27x31", "WideChests_wooden-chest-trashdump-27x31"], ["wooden-trashdump-27x32", "WideChests_wooden-chest-trashdump-27x32"], ["wooden-trashdump-27x33", "WideChests_wooden-chest-trashdump-27x33"], ["wooden-trashdump-27x34", "WideChests_wooden-chest-trashdump-27x34"], ["wooden-trashdump-27x35", "WideChests_wooden-chest-trashdump-27x35"], ["wooden-trashdump-27x36", "WideChests_wooden-chest-trashdump-27x36"], ["wooden-trashdump-27x37", "WideChests_wooden-chest-trashdump-27x37"], ["wooden-trashdump-27x38", "WideChests_wooden-chest-trashdump-27x38"], ["wooden-trashdump-27x39", "WideChests_wooden-chest-trashdump-27x39"], ["wooden-trashdump-27x40", "WideChests_wooden-chest-trashdump-27x40"], ["wooden-trashdump-27x41", "WideChests_wooden-chest-trashdump-27x41"], ["wooden-trashdump-27x42", "WideChests_wooden-chest-trashdump-27x42"], ["wooden-trashdump-28x6", "WideChests_wooden-chest-trashdump-28x6"], ["wooden-trashdump-28x7", "WideChests_wooden-chest-trashdump-28x7"], ["wooden-trashdump-28x8", "WideChests_wooden-chest-trashdump-28x8"], ["wooden-trashdump-28x9", "WideChests_wooden-chest-trashdump-28x9"], ["wooden-trashdump-28x10", "WideChests_wooden-chest-trashdump-28x10"], ["wooden-trashdump-28x11", "WideChests_wooden-chest-trashdump-28x11"], ["wooden-trashdump-28x12", "WideChests_wooden-chest-trashdump-28x12"], ["wooden-trashdump-28x13", "WideChests_wooden-chest-trashdump-28x13"], ["wooden-trashdump-28x14", "WideChests_wooden-chest-trashdump-28x14"], ["wooden-trashdump-28x15", "WideChests_wooden-chest-trashdump-28x15"], ["wooden-trashdump-28x16", "WideChests_wooden-chest-trashdump-28x16"], ["wooden-trashdump-28x17", "WideChests_wooden-chest-trashdump-28x17"], ["wooden-trashdump-28x18", "WideChests_wooden-chest-trashdump-28x18"], ["wooden-trashdump-28x19", "WideChests_wooden-chest-trashdump-28x19"], ["wooden-trashdump-28x20", "WideChests_wooden-chest-trashdump-28x20"], ["wooden-trashdump-28x21", "WideChests_wooden-chest-trashdump-28x21"], ["wooden-trashdump-28x22", "WideChests_wooden-chest-trashdump-28x22"], ["wooden-trashdump-28x23", "WideChests_wooden-chest-trashdump-28x23"], ["wooden-trashdump-28x24", "WideChests_wooden-chest-trashdump-28x24"], ["wooden-trashdump-28x25", "WideChests_wooden-chest-trashdump-28x25"], ["wooden-trashdump-28x26", "WideChests_wooden-chest-trashdump-28x26"], ["wooden-trashdump-28x27", "WideChests_wooden-chest-trashdump-28x27"], ["wooden-trashdump-28x28", "WideChests_wooden-chest-trashdump-28x28"], ["wooden-trashdump-28x29", "WideChests_wooden-chest-trashdump-28x29"], ["wooden-trashdump-28x30", "WideChests_wooden-chest-trashdump-28x30"], ["wooden-trashdump-28x31", "WideChests_wooden-chest-trashdump-28x31"], ["wooden-trashdump-28x32", "WideChests_wooden-chest-trashdump-28x32"], ["wooden-trashdump-28x33", "WideChests_wooden-chest-trashdump-28x33"], ["wooden-trashdump-28x34", "WideChests_wooden-chest-trashdump-28x34"], ["wooden-trashdump-28x35", "WideChests_wooden-chest-trashdump-28x35"], ["wooden-trashdump-28x36", "WideChests_wooden-chest-trashdump-28x36"], ["wooden-trashdump-28x37", "WideChests_wooden-chest-trashdump-28x37"], ["wooden-trashdump-28x38", "WideChests_wooden-chest-trashdump-28x38"], ["wooden-trashdump-28x39", "WideChests_wooden-chest-trashdump-28x39"], ["wooden-trashdump-28x40", "WideChests_wooden-chest-trashdump-28x40"], ["wooden-trashdump-28x41", "WideChests_wooden-chest-trashdump-28x41"], ["wooden-trashdump-28x42", "WideChests_wooden-chest-trashdump-28x42"], ["wooden-trashdump-29x6", "WideChests_wooden-chest-trashdump-29x6"], ["wooden-trashdump-29x7", "WideChests_wooden-chest-trashdump-29x7"], ["wooden-trashdump-29x8", "WideChests_wooden-chest-trashdump-29x8"], ["wooden-trashdump-29x9", "WideChests_wooden-chest-trashdump-29x9"], ["wooden-trashdump-29x10", "WideChests_wooden-chest-trashdump-29x10"], ["wooden-trashdump-29x11", "WideChests_wooden-chest-trashdump-29x11"], ["wooden-trashdump-29x12", "WideChests_wooden-chest-trashdump-29x12"], ["wooden-trashdump-29x13", "WideChests_wooden-chest-trashdump-29x13"], ["wooden-trashdump-29x14", "WideChests_wooden-chest-trashdump-29x14"], ["wooden-trashdump-29x15", "WideChests_wooden-chest-trashdump-29x15"], ["wooden-trashdump-29x16", "WideChests_wooden-chest-trashdump-29x16"], ["wooden-trashdump-29x17", "WideChests_wooden-chest-trashdump-29x17"], ["wooden-trashdump-29x18", "WideChests_wooden-chest-trashdump-29x18"], ["wooden-trashdump-29x19", "WideChests_wooden-chest-trashdump-29x19"], ["wooden-trashdump-29x20", "WideChests_wooden-chest-trashdump-29x20"], ["wooden-trashdump-29x21", "WideChests_wooden-chest-trashdump-29x21"], ["wooden-trashdump-29x22", "WideChests_wooden-chest-trashdump-29x22"], ["wooden-trashdump-29x23", "WideChests_wooden-chest-trashdump-29x23"], ["wooden-trashdump-29x24", "WideChests_wooden-chest-trashdump-29x24"], ["wooden-trashdump-29x25", "WideChests_wooden-chest-trashdump-29x25"], ["wooden-trashdump-29x26", "WideChests_wooden-chest-trashdump-29x26"], ["wooden-trashdump-29x27", "WideChests_wooden-chest-trashdump-29x27"], ["wooden-trashdump-29x28", "WideChests_wooden-chest-trashdump-29x28"], ["wooden-trashdump-29x29", "WideChests_wooden-chest-trashdump-29x29"], ["wooden-trashdump-29x30", "WideChests_wooden-chest-trashdump-29x30"], ["wooden-trashdump-29x31", "WideChests_wooden-chest-trashdump-29x31"], ["wooden-trashdump-29x32", "WideChests_wooden-chest-trashdump-29x32"], ["wooden-trashdump-29x33", "WideChests_wooden-chest-trashdump-29x33"], ["wooden-trashdump-29x34", "WideChests_wooden-chest-trashdump-29x34"], ["wooden-trashdump-29x35", "WideChests_wooden-chest-trashdump-29x35"], ["wooden-trashdump-29x36", "WideChests_wooden-chest-trashdump-29x36"], ["wooden-trashdump-29x37", "WideChests_wooden-chest-trashdump-29x37"], ["wooden-trashdump-29x38", "WideChests_wooden-chest-trashdump-29x38"], ["wooden-trashdump-29x39", "WideChests_wooden-chest-trashdump-29x39"], ["wooden-trashdump-29x40", "WideChests_wooden-chest-trashdump-29x40"], ["wooden-trashdump-29x41", "WideChests_wooden-chest-trashdump-29x41"], ["wooden-trashdump-29x42", "WideChests_wooden-chest-trashdump-29x42"], ["wooden-trashdump-30x6", "WideChests_wooden-chest-trashdump-30x6"], ["wooden-trashdump-30x7", "WideChests_wooden-chest-trashdump-30x7"], ["wooden-trashdump-30x8", "WideChests_wooden-chest-trashdump-30x8"], ["wooden-trashdump-30x9", "WideChests_wooden-chest-trashdump-30x9"], ["wooden-trashdump-30x10", "WideChests_wooden-chest-trashdump-30x10"], ["wooden-trashdump-30x11", "WideChests_wooden-chest-trashdump-30x11"], ["wooden-trashdump-30x12", "WideChests_wooden-chest-trashdump-30x12"], ["wooden-trashdump-30x13", "WideChests_wooden-chest-trashdump-30x13"], ["wooden-trashdump-30x14", "WideChests_wooden-chest-trashdump-30x14"], ["wooden-trashdump-30x15", "WideChests_wooden-chest-trashdump-30x15"], ["wooden-trashdump-30x16", "WideChests_wooden-chest-trashdump-30x16"], ["wooden-trashdump-30x17", "WideChests_wooden-chest-trashdump-30x17"], ["wooden-trashdump-30x18", "WideChests_wooden-chest-trashdump-30x18"], ["wooden-trashdump-30x19", "WideChests_wooden-chest-trashdump-30x19"], ["wooden-trashdump-30x20", "WideChests_wooden-chest-trashdump-30x20"], ["wooden-trashdump-30x21", "WideChests_wooden-chest-trashdump-30x21"], ["wooden-trashdump-30x22", "WideChests_wooden-chest-trashdump-30x22"], ["wooden-trashdump-30x23", "WideChests_wooden-chest-trashdump-30x23"], ["wooden-trashdump-30x24", "WideChests_wooden-chest-trashdump-30x24"], ["wooden-trashdump-30x25", "WideChests_wooden-chest-trashdump-30x25"], ["wooden-trashdump-30x26", "WideChests_wooden-chest-trashdump-30x26"], ["wooden-trashdump-30x27", "WideChests_wooden-chest-trashdump-30x27"], ["wooden-trashdump-30x28", "WideChests_wooden-chest-trashdump-30x28"], ["wooden-trashdump-30x29", "WideChests_wooden-chest-trashdump-30x29"], ["wooden-trashdump-30x30", "WideChests_wooden-chest-trashdump-30x30"], ["wooden-trashdump-30x31", "WideChests_wooden-chest-trashdump-30x31"], ["wooden-trashdump-30x32", "WideChests_wooden-chest-trashdump-30x32"], ["wooden-trashdump-30x33", "WideChests_wooden-chest-trashdump-30x33"], ["wooden-trashdump-30x34", "WideChests_wooden-chest-trashdump-30x34"], ["wooden-trashdump-30x35", "WideChests_wooden-chest-trashdump-30x35"], ["wooden-trashdump-30x36", "WideChests_wooden-chest-trashdump-30x36"], ["wooden-trashdump-30x37", "WideChests_wooden-chest-trashdump-30x37"], ["wooden-trashdump-30x38", "WideChests_wooden-chest-trashdump-30x38"], ["wooden-trashdump-30x39", "WideChests_wooden-chest-trashdump-30x39"], ["wooden-trashdump-30x40", "WideChests_wooden-chest-trashdump-30x40"], ["wooden-trashdump-30x41", "WideChests_wooden-chest-trashdump-30x41"], ["wooden-trashdump-30x42", "WideChests_wooden-chest-trashdump-30x42"], ["wooden-trashdump-31x6", "WideChests_wooden-chest-trashdump-31x6"], ["wooden-trashdump-31x7", "WideChests_wooden-chest-trashdump-31x7"], ["wooden-trashdump-31x8", "WideChests_wooden-chest-trashdump-31x8"], ["wooden-trashdump-31x9", "WideChests_wooden-chest-trashdump-31x9"], ["wooden-trashdump-31x10", "WideChests_wooden-chest-trashdump-31x10"], ["wooden-trashdump-31x11", "WideChests_wooden-chest-trashdump-31x11"], ["wooden-trashdump-31x12", "WideChests_wooden-chest-trashdump-31x12"], ["wooden-trashdump-31x13", "WideChests_wooden-chest-trashdump-31x13"], ["wooden-trashdump-31x14", "WideChests_wooden-chest-trashdump-31x14"], ["wooden-trashdump-31x15", "WideChests_wooden-chest-trashdump-31x15"], ["wooden-trashdump-31x16", "WideChests_wooden-chest-trashdump-31x16"], ["wooden-trashdump-31x17", "WideChests_wooden-chest-trashdump-31x17"], ["wooden-trashdump-31x18", "WideChests_wooden-chest-trashdump-31x18"], ["wooden-trashdump-31x19", "WideChests_wooden-chest-trashdump-31x19"], ["wooden-trashdump-31x20", "WideChests_wooden-chest-trashdump-31x20"], ["wooden-trashdump-31x21", "WideChests_wooden-chest-trashdump-31x21"], ["wooden-trashdump-31x22", "WideChests_wooden-chest-trashdump-31x22"], ["wooden-trashdump-31x23", "WideChests_wooden-chest-trashdump-31x23"], ["wooden-trashdump-31x24", "WideChests_wooden-chest-trashdump-31x24"], ["wooden-trashdump-31x25", "WideChests_wooden-chest-trashdump-31x25"], ["wooden-trashdump-31x26", "WideChests_wooden-chest-trashdump-31x26"], ["wooden-trashdump-31x27", "WideChests_wooden-chest-trashdump-31x27"], ["wooden-trashdump-31x28", "WideChests_wooden-chest-trashdump-31x28"], ["wooden-trashdump-31x29", "WideChests_wooden-chest-trashdump-31x29"], ["wooden-trashdump-31x30", "WideChests_wooden-chest-trashdump-31x30"], ["wooden-trashdump-31x31", "WideChests_wooden-chest-trashdump-31x31"], ["wooden-trashdump-31x32", "WideChests_wooden-chest-trashdump-31x32"], ["wooden-trashdump-31x33", "WideChests_wooden-chest-trashdump-31x33"], ["wooden-trashdump-31x34", "WideChests_wooden-chest-trashdump-31x34"], ["wooden-trashdump-31x35", "WideChests_wooden-chest-trashdump-31x35"], ["wooden-trashdump-31x36", "WideChests_wooden-chest-trashdump-31x36"], ["wooden-trashdump-31x37", "WideChests_wooden-chest-trashdump-31x37"], ["wooden-trashdump-31x38", "WideChests_wooden-chest-trashdump-31x38"], ["wooden-trashdump-31x39", "WideChests_wooden-chest-trashdump-31x39"], ["wooden-trashdump-31x40", "WideChests_wooden-chest-trashdump-31x40"], ["wooden-trashdump-31x41", "WideChests_wooden-chest-trashdump-31x41"], ["wooden-trashdump-31x42", "WideChests_wooden-chest-trashdump-31x42"], ["wooden-trashdump-32x6", "WideChests_wooden-chest-trashdump-32x6"], ["wooden-trashdump-32x7", "WideChests_wooden-chest-trashdump-32x7"], ["wooden-trashdump-32x8", "WideChests_wooden-chest-trashdump-32x8"], ["wooden-trashdump-32x9", "WideChests_wooden-chest-trashdump-32x9"], ["wooden-trashdump-32x10", "WideChests_wooden-chest-trashdump-32x10"], ["wooden-trashdump-32x11", "WideChests_wooden-chest-trashdump-32x11"], ["wooden-trashdump-32x12", "WideChests_wooden-chest-trashdump-32x12"], ["wooden-trashdump-32x13", "WideChests_wooden-chest-trashdump-32x13"], ["wooden-trashdump-32x14", "WideChests_wooden-chest-trashdump-32x14"], ["wooden-trashdump-32x15", "WideChests_wooden-chest-trashdump-32x15"], ["wooden-trashdump-32x16", "WideChests_wooden-chest-trashdump-32x16"], ["wooden-trashdump-32x17", "WideChests_wooden-chest-trashdump-32x17"], ["wooden-trashdump-32x18", "WideChests_wooden-chest-trashdump-32x18"], ["wooden-trashdump-32x19", "WideChests_wooden-chest-trashdump-32x19"], ["wooden-trashdump-32x20", "WideChests_wooden-chest-trashdump-32x20"], ["wooden-trashdump-32x21", "WideChests_wooden-chest-trashdump-32x21"], ["wooden-trashdump-32x22", "WideChests_wooden-chest-trashdump-32x22"], ["wooden-trashdump-32x23", "WideChests_wooden-chest-trashdump-32x23"], ["wooden-trashdump-32x24", "WideChests_wooden-chest-trashdump-32x24"], ["wooden-trashdump-32x25", "WideChests_wooden-chest-trashdump-32x25"], ["wooden-trashdump-32x26", "WideChests_wooden-chest-trashdump-32x26"], ["wooden-trashdump-32x27", "WideChests_wooden-chest-trashdump-32x27"], ["wooden-trashdump-32x28", "WideChests_wooden-chest-trashdump-32x28"], ["wooden-trashdump-32x29", "WideChests_wooden-chest-trashdump-32x29"], ["wooden-trashdump-32x30", "WideChests_wooden-chest-trashdump-32x30"], ["wooden-trashdump-32x31", "WideChests_wooden-chest-trashdump-32x31"], ["wooden-trashdump-32x32", "WideChests_wooden-chest-trashdump-32x32"], ["wooden-trashdump-32x33", "WideChests_wooden-chest-trashdump-32x33"], ["wooden-trashdump-32x34", "WideChests_wooden-chest-trashdump-32x34"], ["wooden-trashdump-32x35", "WideChests_wooden-chest-trashdump-32x35"], ["wooden-trashdump-32x36", "WideChests_wooden-chest-trashdump-32x36"], ["wooden-trashdump-32x37", "WideChests_wooden-chest-trashdump-32x37"], ["wooden-trashdump-32x38", "WideChests_wooden-chest-trashdump-32x38"], ["wooden-trashdump-32x39", "WideChests_wooden-chest-trashdump-32x39"], ["wooden-trashdump-32x40", "WideChests_wooden-chest-trashdump-32x40"], ["wooden-trashdump-32x41", "WideChests_wooden-chest-trashdump-32x41"], ["wooden-trashdump-32x42", "WideChests_wooden-chest-trashdump-32x42"], ["wooden-trashdump-33x6", "WideChests_wooden-chest-trashdump-33x6"], ["wooden-trashdump-33x7", "WideChests_wooden-chest-trashdump-33x7"], ["wooden-trashdump-33x8", "WideChests_wooden-chest-trashdump-33x8"], ["wooden-trashdump-33x9", "WideChests_wooden-chest-trashdump-33x9"], ["wooden-trashdump-33x10", "WideChests_wooden-chest-trashdump-33x10"], ["wooden-trashdump-33x11", "WideChests_wooden-chest-trashdump-33x11"], ["wooden-trashdump-33x12", "WideChests_wooden-chest-trashdump-33x12"], ["wooden-trashdump-33x13", "WideChests_wooden-chest-trashdump-33x13"], ["wooden-trashdump-33x14", "WideChests_wooden-chest-trashdump-33x14"], ["wooden-trashdump-33x15", "WideChests_wooden-chest-trashdump-33x15"], ["wooden-trashdump-33x16", "WideChests_wooden-chest-trashdump-33x16"], ["wooden-trashdump-33x17", "WideChests_wooden-chest-trashdump-33x17"], ["wooden-trashdump-33x18", "WideChests_wooden-chest-trashdump-33x18"], ["wooden-trashdump-33x19", "WideChests_wooden-chest-trashdump-33x19"], ["wooden-trashdump-33x20", "WideChests_wooden-chest-trashdump-33x20"], ["wooden-trashdump-33x21", "WideChests_wooden-chest-trashdump-33x21"], ["wooden-trashdump-33x22", "WideChests_wooden-chest-trashdump-33x22"], ["wooden-trashdump-33x23", "WideChests_wooden-chest-trashdump-33x23"], ["wooden-trashdump-33x24", "WideChests_wooden-chest-trashdump-33x24"], ["wooden-trashdump-33x25", "WideChests_wooden-chest-trashdump-33x25"], ["wooden-trashdump-33x26", "WideChests_wooden-chest-trashdump-33x26"], ["wooden-trashdump-33x27", "WideChests_wooden-chest-trashdump-33x27"], ["wooden-trashdump-33x28", "WideChests_wooden-chest-trashdump-33x28"], ["wooden-trashdump-33x29", "WideChests_wooden-chest-trashdump-33x29"], ["wooden-trashdump-33x30", "WideChests_wooden-chest-trashdump-33x30"], ["wooden-trashdump-33x31", "WideChests_wooden-chest-trashdump-33x31"], ["wooden-trashdump-33x32", "WideChests_wooden-chest-trashdump-33x32"], ["wooden-trashdump-33x33", "WideChests_wooden-chest-trashdump-33x33"], ["wooden-trashdump-33x34", "WideChests_wooden-chest-trashdump-33x34"], ["wooden-trashdump-33x35", "WideChests_wooden-chest-trashdump-33x35"], ["wooden-trashdump-33x36", "WideChests_wooden-chest-trashdump-33x36"], ["wooden-trashdump-33x37", "WideChests_wooden-chest-trashdump-33x37"], ["wooden-trashdump-33x38", "WideChests_wooden-chest-trashdump-33x38"], ["wooden-trashdump-33x39", "WideChests_wooden-chest-trashdump-33x39"], ["wooden-trashdump-33x40", "WideChests_wooden-chest-trashdump-33x40"], ["wooden-trashdump-33x41", "WideChests_wooden-chest-trashdump-33x41"], ["wooden-trashdump-33x42", "WideChests_wooden-chest-trashdump-33x42"], ["wooden-trashdump-34x6", "WideChests_wooden-chest-trashdump-34x6"], ["wooden-trashdump-34x7", "WideChests_wooden-chest-trashdump-34x7"], ["wooden-trashdump-34x8", "WideChests_wooden-chest-trashdump-34x8"], ["wooden-trashdump-34x9", "WideChests_wooden-chest-trashdump-34x9"], ["wooden-trashdump-34x10", "WideChests_wooden-chest-trashdump-34x10"], ["wooden-trashdump-34x11", "WideChests_wooden-chest-trashdump-34x11"], ["wooden-trashdump-34x12", "WideChests_wooden-chest-trashdump-34x12"], ["wooden-trashdump-34x13", "WideChests_wooden-chest-trashdump-34x13"], ["wooden-trashdump-34x14", "WideChests_wooden-chest-trashdump-34x14"], ["wooden-trashdump-34x15", "WideChests_wooden-chest-trashdump-34x15"], ["wooden-trashdump-34x16", "WideChests_wooden-chest-trashdump-34x16"], ["wooden-trashdump-34x17", "WideChests_wooden-chest-trashdump-34x17"], ["wooden-trashdump-34x18", "WideChests_wooden-chest-trashdump-34x18"], ["wooden-trashdump-34x19", "WideChests_wooden-chest-trashdump-34x19"], ["wooden-trashdump-34x20", "WideChests_wooden-chest-trashdump-34x20"], ["wooden-trashdump-34x21", "WideChests_wooden-chest-trashdump-34x21"], ["wooden-trashdump-34x22", "WideChests_wooden-chest-trashdump-34x22"], ["wooden-trashdump-34x23", "WideChests_wooden-chest-trashdump-34x23"], ["wooden-trashdump-34x24", "WideChests_wooden-chest-trashdump-34x24"], ["wooden-trashdump-34x25", "WideChests_wooden-chest-trashdump-34x25"], ["wooden-trashdump-34x26", "WideChests_wooden-chest-trashdump-34x26"], ["wooden-trashdump-34x27", "WideChests_wooden-chest-trashdump-34x27"], ["wooden-trashdump-34x28", "WideChests_wooden-chest-trashdump-34x28"], ["wooden-trashdump-34x29", "WideChests_wooden-chest-trashdump-34x29"], ["wooden-trashdump-34x30", "WideChests_wooden-chest-trashdump-34x30"], ["wooden-trashdump-34x31", "WideChests_wooden-chest-trashdump-34x31"], ["wooden-trashdump-34x32", "WideChests_wooden-chest-trashdump-34x32"], ["wooden-trashdump-34x33", "WideChests_wooden-chest-trashdump-34x33"], ["wooden-trashdump-34x34", "WideChests_wooden-chest-trashdump-34x34"], ["wooden-trashdump-34x35", "WideChests_wooden-chest-trashdump-34x35"], ["wooden-trashdump-34x36", "WideChests_wooden-chest-trashdump-34x36"], ["wooden-trashdump-34x37", "WideChests_wooden-chest-trashdump-34x37"], ["wooden-trashdump-34x38", "WideChests_wooden-chest-trashdump-34x38"], ["wooden-trashdump-34x39", "WideChests_wooden-chest-trashdump-34x39"], ["wooden-trashdump-34x40", "WideChests_wooden-chest-trashdump-34x40"], ["wooden-trashdump-34x41", "WideChests_wooden-chest-trashdump-34x41"], ["wooden-trashdump-34x42", "WideChests_wooden-chest-trashdump-34x42"], ["wooden-trashdump-35x6", "WideChests_wooden-chest-trashdump-35x6"], ["wooden-trashdump-35x7", "WideChests_wooden-chest-trashdump-35x7"], ["wooden-trashdump-35x8", "WideChests_wooden-chest-trashdump-35x8"], ["wooden-trashdump-35x9", "WideChests_wooden-chest-trashdump-35x9"], ["wooden-trashdump-35x10", "WideChests_wooden-chest-trashdump-35x10"], ["wooden-trashdump-35x11", "WideChests_wooden-chest-trashdump-35x11"], ["wooden-trashdump-35x12", "WideChests_wooden-chest-trashdump-35x12"], ["wooden-trashdump-35x13", "WideChests_wooden-chest-trashdump-35x13"], ["wooden-trashdump-35x14", "WideChests_wooden-chest-trashdump-35x14"], ["wooden-trashdump-35x15", "WideChests_wooden-chest-trashdump-35x15"], ["wooden-trashdump-35x16", "WideChests_wooden-chest-trashdump-35x16"], ["wooden-trashdump-35x17", "WideChests_wooden-chest-trashdump-35x17"], ["wooden-trashdump-35x18", "WideChests_wooden-chest-trashdump-35x18"], ["wooden-trashdump-35x19", "WideChests_wooden-chest-trashdump-35x19"], ["wooden-trashdump-35x20", "WideChests_wooden-chest-trashdump-35x20"], ["wooden-trashdump-35x21", "WideChests_wooden-chest-trashdump-35x21"], ["wooden-trashdump-35x22", "WideChests_wooden-chest-trashdump-35x22"], ["wooden-trashdump-35x23", "WideChests_wooden-chest-trashdump-35x23"], ["wooden-trashdump-35x24", "WideChests_wooden-chest-trashdump-35x24"], ["wooden-trashdump-35x25", "WideChests_wooden-chest-trashdump-35x25"], ["wooden-trashdump-35x26", "WideChests_wooden-chest-trashdump-35x26"], ["wooden-trashdump-35x27", "WideChests_wooden-chest-trashdump-35x27"], ["wooden-trashdump-35x28", "WideChests_wooden-chest-trashdump-35x28"], ["wooden-trashdump-35x29", "WideChests_wooden-chest-trashdump-35x29"], ["wooden-trashdump-35x30", "WideChests_wooden-chest-trashdump-35x30"], ["wooden-trashdump-35x31", "WideChests_wooden-chest-trashdump-35x31"], ["wooden-trashdump-35x32", "WideChests_wooden-chest-trashdump-35x32"], ["wooden-trashdump-35x33", "WideChests_wooden-chest-trashdump-35x33"], ["wooden-trashdump-35x34", "WideChests_wooden-chest-trashdump-35x34"], ["wooden-trashdump-35x35", "WideChests_wooden-chest-trashdump-35x35"], ["wooden-trashdump-35x36", "WideChests_wooden-chest-trashdump-35x36"], ["wooden-trashdump-35x37", "WideChests_wooden-chest-trashdump-35x37"], ["wooden-trashdump-35x38", "WideChests_wooden-chest-trashdump-35x38"], ["wooden-trashdump-35x39", "WideChests_wooden-chest-trashdump-35x39"], ["wooden-trashdump-35x40", "WideChests_wooden-chest-trashdump-35x40"], ["wooden-trashdump-35x41", "WideChests_wooden-chest-trashdump-35x41"], ["wooden-trashdump-35x42", "WideChests_wooden-chest-trashdump-35x42"], ["wooden-trashdump-36x6", "WideChests_wooden-chest-trashdump-36x6"], ["wooden-trashdump-36x7", "WideChests_wooden-chest-trashdump-36x7"], ["wooden-trashdump-36x8", "WideChests_wooden-chest-trashdump-36x8"], ["wooden-trashdump-36x9", "WideChests_wooden-chest-trashdump-36x9"], ["wooden-trashdump-36x10", "WideChests_wooden-chest-trashdump-36x10"], ["wooden-trashdump-36x11", "WideChests_wooden-chest-trashdump-36x11"], ["wooden-trashdump-36x12", "WideChests_wooden-chest-trashdump-36x12"], ["wooden-trashdump-36x13", "WideChests_wooden-chest-trashdump-36x13"], ["wooden-trashdump-36x14", "WideChests_wooden-chest-trashdump-36x14"], ["wooden-trashdump-36x15", "WideChests_wooden-chest-trashdump-36x15"], ["wooden-trashdump-36x16", "WideChests_wooden-chest-trashdump-36x16"], ["wooden-trashdump-36x17", "WideChests_wooden-chest-trashdump-36x17"], ["wooden-trashdump-36x18", "WideChests_wooden-chest-trashdump-36x18"], ["wooden-trashdump-36x19", "WideChests_wooden-chest-trashdump-36x19"], ["wooden-trashdump-36x20", "WideChests_wooden-chest-trashdump-36x20"], ["wooden-trashdump-36x21", "WideChests_wooden-chest-trashdump-36x21"], ["wooden-trashdump-36x22", "WideChests_wooden-chest-trashdump-36x22"], ["wooden-trashdump-36x23", "WideChests_wooden-chest-trashdump-36x23"], ["wooden-trashdump-36x24", "WideChests_wooden-chest-trashdump-36x24"], ["wooden-trashdump-36x25", "WideChests_wooden-chest-trashdump-36x25"], ["wooden-trashdump-36x26", "WideChests_wooden-chest-trashdump-36x26"], ["wooden-trashdump-36x27", "WideChests_wooden-chest-trashdump-36x27"], ["wooden-trashdump-36x28", "WideChests_wooden-chest-trashdump-36x28"], ["wooden-trashdump-36x29", "WideChests_wooden-chest-trashdump-36x29"], ["wooden-trashdump-36x30", "WideChests_wooden-chest-trashdump-36x30"], ["wooden-trashdump-36x31", "WideChests_wooden-chest-trashdump-36x31"], ["wooden-trashdump-36x32", "WideChests_wooden-chest-trashdump-36x32"], ["wooden-trashdump-36x33", "WideChests_wooden-chest-trashdump-36x33"], ["wooden-trashdump-36x34", "WideChests_wooden-chest-trashdump-36x34"], ["wooden-trashdump-36x35", "WideChests_wooden-chest-trashdump-36x35"], ["wooden-trashdump-36x36", "WideChests_wooden-chest-trashdump-36x36"], ["wooden-trashdump-36x37", "WideChests_wooden-chest-trashdump-36x37"], ["wooden-trashdump-36x38", "WideChests_wooden-chest-trashdump-36x38"], ["wooden-trashdump-36x39", "WideChests_wooden-chest-trashdump-36x39"], ["wooden-trashdump-36x40", "WideChests_wooden-chest-trashdump-36x40"], ["wooden-trashdump-36x41", "WideChests_wooden-chest-trashdump-36x41"], ["wooden-trashdump-36x42", "WideChests_wooden-chest-trashdump-36x42"], ["wooden-trashdump-37x6", "WideChests_wooden-chest-trashdump-37x6"], ["wooden-trashdump-37x7", "WideChests_wooden-chest-trashdump-37x7"], ["wooden-trashdump-37x8", "WideChests_wooden-chest-trashdump-37x8"], ["wooden-trashdump-37x9", "WideChests_wooden-chest-trashdump-37x9"], ["wooden-trashdump-37x10", "WideChests_wooden-chest-trashdump-37x10"], ["wooden-trashdump-37x11", "WideChests_wooden-chest-trashdump-37x11"], ["wooden-trashdump-37x12", "WideChests_wooden-chest-trashdump-37x12"], ["wooden-trashdump-37x13", "WideChests_wooden-chest-trashdump-37x13"], ["wooden-trashdump-37x14", "WideChests_wooden-chest-trashdump-37x14"], ["wooden-trashdump-37x15", "WideChests_wooden-chest-trashdump-37x15"], ["wooden-trashdump-37x16", "WideChests_wooden-chest-trashdump-37x16"], ["wooden-trashdump-37x17", "WideChests_wooden-chest-trashdump-37x17"], ["wooden-trashdump-37x18", "WideChests_wooden-chest-trashdump-37x18"], ["wooden-trashdump-37x19", "WideChests_wooden-chest-trashdump-37x19"], ["wooden-trashdump-37x20", "WideChests_wooden-chest-trashdump-37x20"], ["wooden-trashdump-37x21", "WideChests_wooden-chest-trashdump-37x21"], ["wooden-trashdump-37x22", "WideChests_wooden-chest-trashdump-37x22"], ["wooden-trashdump-37x23", "WideChests_wooden-chest-trashdump-37x23"], ["wooden-trashdump-37x24", "WideChests_wooden-chest-trashdump-37x24"], ["wooden-trashdump-37x25", "WideChests_wooden-chest-trashdump-37x25"], ["wooden-trashdump-37x26", "WideChests_wooden-chest-trashdump-37x26"], ["wooden-trashdump-37x27", "WideChests_wooden-chest-trashdump-37x27"], ["wooden-trashdump-37x28", "WideChests_wooden-chest-trashdump-37x28"], ["wooden-trashdump-37x29", "WideChests_wooden-chest-trashdump-37x29"], ["wooden-trashdump-37x30", "WideChests_wooden-chest-trashdump-37x30"], ["wooden-trashdump-37x31", "WideChests_wooden-chest-trashdump-37x31"], ["wooden-trashdump-37x32", "WideChests_wooden-chest-trashdump-37x32"], ["wooden-trashdump-37x33", "WideChests_wooden-chest-trashdump-37x33"], ["wooden-trashdump-37x34", "WideChests_wooden-chest-trashdump-37x34"], ["wooden-trashdump-37x35", "WideChests_wooden-chest-trashdump-37x35"], ["wooden-trashdump-37x36", "WideChests_wooden-chest-trashdump-37x36"], ["wooden-trashdump-37x37", "WideChests_wooden-chest-trashdump-37x37"], ["wooden-trashdump-37x38", "WideChests_wooden-chest-trashdump-37x38"], ["wooden-trashdump-37x39", "WideChests_wooden-chest-trashdump-37x39"], ["wooden-trashdump-37x40", "WideChests_wooden-chest-trashdump-37x40"], ["wooden-trashdump-37x41", "WideChests_wooden-chest-trashdump-37x41"], ["wooden-trashdump-37x42", "WideChests_wooden-chest-trashdump-37x42"], ["wooden-trashdump-38x6", "WideChests_wooden-chest-trashdump-38x6"], ["wooden-trashdump-38x7", "WideChests_wooden-chest-trashdump-38x7"], ["wooden-trashdump-38x8", "WideChests_wooden-chest-trashdump-38x8"], ["wooden-trashdump-38x9", "WideChests_wooden-chest-trashdump-38x9"], ["wooden-trashdump-38x10", "WideChests_wooden-chest-trashdump-38x10"], ["wooden-trashdump-38x11", "WideChests_wooden-chest-trashdump-38x11"], ["wooden-trashdump-38x12", "WideChests_wooden-chest-trashdump-38x12"], ["wooden-trashdump-38x13", "WideChests_wooden-chest-trashdump-38x13"], ["wooden-trashdump-38x14", "WideChests_wooden-chest-trashdump-38x14"], ["wooden-trashdump-38x15", "WideChests_wooden-chest-trashdump-38x15"], ["wooden-trashdump-38x16", "WideChests_wooden-chest-trashdump-38x16"], ["wooden-trashdump-38x17", "WideChests_wooden-chest-trashdump-38x17"], ["wooden-trashdump-38x18", "WideChests_wooden-chest-trashdump-38x18"], ["wooden-trashdump-38x19", "WideChests_wooden-chest-trashdump-38x19"], ["wooden-trashdump-38x20", "WideChests_wooden-chest-trashdump-38x20"], ["wooden-trashdump-38x21", "WideChests_wooden-chest-trashdump-38x21"], ["wooden-trashdump-38x22", "WideChests_wooden-chest-trashdump-38x22"], ["wooden-trashdump-38x23", "WideChests_wooden-chest-trashdump-38x23"], ["wooden-trashdump-38x24", "WideChests_wooden-chest-trashdump-38x24"], ["wooden-trashdump-38x25", "WideChests_wooden-chest-trashdump-38x25"], ["wooden-trashdump-38x26", "WideChests_wooden-chest-trashdump-38x26"], ["wooden-trashdump-38x27", "WideChests_wooden-chest-trashdump-38x27"], ["wooden-trashdump-38x28", "WideChests_wooden-chest-trashdump-38x28"], ["wooden-trashdump-38x29", "WideChests_wooden-chest-trashdump-38x29"], ["wooden-trashdump-38x30", "WideChests_wooden-chest-trashdump-38x30"], ["wooden-trashdump-38x31", "WideChests_wooden-chest-trashdump-38x31"], ["wooden-trashdump-38x32", "WideChests_wooden-chest-trashdump-38x32"], ["wooden-trashdump-38x33", "WideChests_wooden-chest-trashdump-38x33"], ["wooden-trashdump-38x34", "WideChests_wooden-chest-trashdump-38x34"], ["wooden-trashdump-38x35", "WideChests_wooden-chest-trashdump-38x35"], ["wooden-trashdump-38x36", "WideChests_wooden-chest-trashdump-38x36"], ["wooden-trashdump-38x37", "WideChests_wooden-chest-trashdump-38x37"], ["wooden-trashdump-38x38", "WideChests_wooden-chest-trashdump-38x38"], ["wooden-trashdump-38x39", "WideChests_wooden-chest-trashdump-38x39"], ["wooden-trashdump-38x40", "WideChests_wooden-chest-trashdump-38x40"], ["wooden-trashdump-38x41", "WideChests_wooden-chest-trashdump-38x41"], ["wooden-trashdump-38x42", "WideChests_wooden-chest-trashdump-38x42"], ["wooden-trashdump-39x6", "WideChests_wooden-chest-trashdump-39x6"], ["wooden-trashdump-39x7", "WideChests_wooden-chest-trashdump-39x7"], ["wooden-trashdump-39x8", "WideChests_wooden-chest-trashdump-39x8"], ["wooden-trashdump-39x9", "WideChests_wooden-chest-trashdump-39x9"], ["wooden-trashdump-39x10", "WideChests_wooden-chest-trashdump-39x10"], ["wooden-trashdump-39x11", "WideChests_wooden-chest-trashdump-39x11"], ["wooden-trashdump-39x12", "WideChests_wooden-chest-trashdump-39x12"], ["wooden-trashdump-39x13", "WideChests_wooden-chest-trashdump-39x13"], ["wooden-trashdump-39x14", "WideChests_wooden-chest-trashdump-39x14"], ["wooden-trashdump-39x15", "WideChests_wooden-chest-trashdump-39x15"], ["wooden-trashdump-39x16", "WideChests_wooden-chest-trashdump-39x16"], ["wooden-trashdump-39x17", "WideChests_wooden-chest-trashdump-39x17"], ["wooden-trashdump-39x18", "WideChests_wooden-chest-trashdump-39x18"], ["wooden-trashdump-39x19", "WideChests_wooden-chest-trashdump-39x19"], ["wooden-trashdump-39x20", "WideChests_wooden-chest-trashdump-39x20"], ["wooden-trashdump-39x21", "WideChests_wooden-chest-trashdump-39x21"], ["wooden-trashdump-39x22", "WideChests_wooden-chest-trashdump-39x22"], ["wooden-trashdump-39x23", "WideChests_wooden-chest-trashdump-39x23"], ["wooden-trashdump-39x24", "WideChests_wooden-chest-trashdump-39x24"], ["wooden-trashdump-39x25", "WideChests_wooden-chest-trashdump-39x25"], ["wooden-trashdump-39x26", "WideChests_wooden-chest-trashdump-39x26"], ["wooden-trashdump-39x27", "WideChests_wooden-chest-trashdump-39x27"], ["wooden-trashdump-39x28", "WideChests_wooden-chest-trashdump-39x28"], ["wooden-trashdump-39x29", "WideChests_wooden-chest-trashdump-39x29"], ["wooden-trashdump-39x30", "WideChests_wooden-chest-trashdump-39x30"], ["wooden-trashdump-39x31", "WideChests_wooden-chest-trashdump-39x31"], ["wooden-trashdump-39x32", "WideChests_wooden-chest-trashdump-39x32"], ["wooden-trashdump-39x33", "WideChests_wooden-chest-trashdump-39x33"], ["wooden-trashdump-39x34", "WideChests_wooden-chest-trashdump-39x34"], ["wooden-trashdump-39x35", "WideChests_wooden-chest-trashdump-39x35"], ["wooden-trashdump-39x36", "WideChests_wooden-chest-trashdump-39x36"], ["wooden-trashdump-39x37", "WideChests_wooden-chest-trashdump-39x37"], ["wooden-trashdump-39x38", "WideChests_wooden-chest-trashdump-39x38"], ["wooden-trashdump-39x39", "WideChests_wooden-chest-trashdump-39x39"], ["wooden-trashdump-39x40", "WideChests_wooden-chest-trashdump-39x40"], ["wooden-trashdump-39x41", "WideChests_wooden-chest-trashdump-39x41"], ["wooden-trashdump-39x42", "WideChests_wooden-chest-trashdump-39x42"], ["wooden-trashdump-40x6", "WideChests_wooden-chest-trashdump-40x6"], ["wooden-trashdump-40x7", "WideChests_wooden-chest-trashdump-40x7"], ["wooden-trashdump-40x8", "WideChests_wooden-chest-trashdump-40x8"], ["wooden-trashdump-40x9", "WideChests_wooden-chest-trashdump-40x9"], ["wooden-trashdump-40x10", "WideChests_wooden-chest-trashdump-40x10"], ["wooden-trashdump-40x11", "WideChests_wooden-chest-trashdump-40x11"], ["wooden-trashdump-40x12", "WideChests_wooden-chest-trashdump-40x12"], ["wooden-trashdump-40x13", "WideChests_wooden-chest-trashdump-40x13"], ["wooden-trashdump-40x14", "WideChests_wooden-chest-trashdump-40x14"], ["wooden-trashdump-40x15", "WideChests_wooden-chest-trashdump-40x15"], ["wooden-trashdump-40x16", "WideChests_wooden-chest-trashdump-40x16"], ["wooden-trashdump-40x17", "WideChests_wooden-chest-trashdump-40x17"], ["wooden-trashdump-40x18", "WideChests_wooden-chest-trashdump-40x18"], ["wooden-trashdump-40x19", "WideChests_wooden-chest-trashdump-40x19"], ["wooden-trashdump-40x20", "WideChests_wooden-chest-trashdump-40x20"], ["wooden-trashdump-40x21", "WideChests_wooden-chest-trashdump-40x21"], ["wooden-trashdump-40x22", "WideChests_wooden-chest-trashdump-40x22"], ["wooden-trashdump-40x23", "WideChests_wooden-chest-trashdump-40x23"], ["wooden-trashdump-40x24", "WideChests_wooden-chest-trashdump-40x24"], ["wooden-trashdump-40x25", "WideChests_wooden-chest-trashdump-40x25"], ["wooden-trashdump-40x26", "WideChests_wooden-chest-trashdump-40x26"], ["wooden-trashdump-40x27", "WideChests_wooden-chest-trashdump-40x27"], ["wooden-trashdump-40x28", "WideChests_wooden-chest-trashdump-40x28"], ["wooden-trashdump-40x29", "WideChests_wooden-chest-trashdump-40x29"], ["wooden-trashdump-40x30", "WideChests_wooden-chest-trashdump-40x30"], ["wooden-trashdump-40x31", "WideChests_wooden-chest-trashdump-40x31"], ["wooden-trashdump-40x32", "WideChests_wooden-chest-trashdump-40x32"], ["wooden-trashdump-40x33", "WideChests_wooden-chest-trashdump-40x33"], ["wooden-trashdump-40x34", "WideChests_wooden-chest-trashdump-40x34"], ["wooden-trashdump-40x35", "WideChests_wooden-chest-trashdump-40x35"], ["wooden-trashdump-40x36", "WideChests_wooden-chest-trashdump-40x36"], ["wooden-trashdump-40x37", "WideChests_wooden-chest-trashdump-40x37"], ["wooden-trashdump-40x38", "WideChests_wooden-chest-trashdump-40x38"], ["wooden-trashdump-40x39", "WideChests_wooden-chest-trashdump-40x39"], ["wooden-trashdump-40x40", "WideChests_wooden-chest-trashdump-40x40"], ["wooden-trashdump-40x41", "WideChests_wooden-chest-trashdump-40x41"], ["wooden-trashdump-40x42", "WideChests_wooden-chest-trashdump-40x42"], ["wooden-trashdump-41x6", "WideChests_wooden-chest-trashdump-41x6"], ["wooden-trashdump-41x7", "WideChests_wooden-chest-trashdump-41x7"], ["wooden-trashdump-41x8", "WideChests_wooden-chest-trashdump-41x8"], ["wooden-trashdump-41x9", "WideChests_wooden-chest-trashdump-41x9"], ["wooden-trashdump-41x10", "WideChests_wooden-chest-trashdump-41x10"], ["wooden-trashdump-41x11", "WideChests_wooden-chest-trashdump-41x11"], ["wooden-trashdump-41x12", "WideChests_wooden-chest-trashdump-41x12"], ["wooden-trashdump-41x13", "WideChests_wooden-chest-trashdump-41x13"], ["wooden-trashdump-41x14", "WideChests_wooden-chest-trashdump-41x14"], ["wooden-trashdump-41x15", "WideChests_wooden-chest-trashdump-41x15"], ["wooden-trashdump-41x16", "WideChests_wooden-chest-trashdump-41x16"], ["wooden-trashdump-41x17", "WideChests_wooden-chest-trashdump-41x17"], ["wooden-trashdump-41x18", "WideChests_wooden-chest-trashdump-41x18"], ["wooden-trashdump-41x19", "WideChests_wooden-chest-trashdump-41x19"], ["wooden-trashdump-41x20", "WideChests_wooden-chest-trashdump-41x20"], ["wooden-trashdump-41x21", "WideChests_wooden-chest-trashdump-41x21"], ["wooden-trashdump-41x22", "WideChests_wooden-chest-trashdump-41x22"], ["wooden-trashdump-41x23", "WideChests_wooden-chest-trashdump-41x23"], ["wooden-trashdump-41x24", "WideChests_wooden-chest-trashdump-41x24"], ["wooden-trashdump-41x25", "WideChests_wooden-chest-trashdump-41x25"], ["wooden-trashdump-41x26", "WideChests_wooden-chest-trashdump-41x26"], ["wooden-trashdump-41x27", "WideChests_wooden-chest-trashdump-41x27"], ["wooden-trashdump-41x28", "WideChests_wooden-chest-trashdump-41x28"], ["wooden-trashdump-41x29", "WideChests_wooden-chest-trashdump-41x29"], ["wooden-trashdump-41x30", "WideChests_wooden-chest-trashdump-41x30"], ["wooden-trashdump-41x31", "WideChests_wooden-chest-trashdump-41x31"], ["wooden-trashdump-41x32", "WideChests_wooden-chest-trashdump-41x32"], ["wooden-trashdump-41x33", "WideChests_wooden-chest-trashdump-41x33"], ["wooden-trashdump-41x34", "WideChests_wooden-chest-trashdump-41x34"], ["wooden-trashdump-41x35", "WideChests_wooden-chest-trashdump-41x35"], ["wooden-trashdump-41x36", "WideChests_wooden-chest-trashdump-41x36"], ["wooden-trashdump-41x37", "WideChests_wooden-chest-trashdump-41x37"], ["wooden-trashdump-41x38", "WideChests_wooden-chest-trashdump-41x38"], ["wooden-trashdump-41x39", "WideChests_wooden-chest-trashdump-41x39"], ["wooden-trashdump-41x40", "WideChests_wooden-chest-trashdump-41x40"], ["wooden-trashdump-41x41", "WideChests_wooden-chest-trashdump-41x41"], ["wooden-trashdump-41x42", "WideChests_wooden-chest-trashdump-41x42"], ["wooden-trashdump-42x6", "WideChests_wooden-chest-trashdump-42x6"], ["wooden-trashdump-42x7", "WideChests_wooden-chest-trashdump-42x7"], ["wooden-trashdump-42x8", "WideChests_wooden-chest-trashdump-42x8"], ["wooden-trashdump-42x9", "WideChests_wooden-chest-trashdump-42x9"], ["wooden-trashdump-42x10", "WideChests_wooden-chest-trashdump-42x10"], ["wooden-trashdump-42x11", "WideChests_wooden-chest-trashdump-42x11"], ["wooden-trashdump-42x12", "WideChests_wooden-chest-trashdump-42x12"], ["wooden-trashdump-42x13", "WideChests_wooden-chest-trashdump-42x13"], ["wooden-trashdump-42x14", "WideChests_wooden-chest-trashdump-42x14"], ["wooden-trashdump-42x15", "WideChests_wooden-chest-trashdump-42x15"], ["wooden-trashdump-42x16", "WideChests_wooden-chest-trashdump-42x16"], ["wooden-trashdump-42x17", "WideChests_wooden-chest-trashdump-42x17"], ["wooden-trashdump-42x18", "WideChests_wooden-chest-trashdump-42x18"], ["wooden-trashdump-42x19", "WideChests_wooden-chest-trashdump-42x19"], ["wooden-trashdump-42x20", "WideChests_wooden-chest-trashdump-42x20"], ["wooden-trashdump-42x21", "WideChests_wooden-chest-trashdump-42x21"], ["wooden-trashdump-42x22", "WideChests_wooden-chest-trashdump-42x22"], ["wooden-trashdump-42x23", "WideChests_wooden-chest-trashdump-42x23"], ["wooden-trashdump-42x24", "WideChests_wooden-chest-trashdump-42x24"], ["wooden-trashdump-42x25", "WideChests_wooden-chest-trashdump-42x25"], ["wooden-trashdump-42x26", "WideChests_wooden-chest-trashdump-42x26"], ["wooden-trashdump-42x27", "WideChests_wooden-chest-trashdump-42x27"], ["wooden-trashdump-42x28", "WideChests_wooden-chest-trashdump-42x28"], ["wooden-trashdump-42x29", "WideChests_wooden-chest-trashdump-42x29"], ["wooden-trashdump-42x30", "WideChests_wooden-chest-trashdump-42x30"], ["wooden-trashdump-42x31", "WideChests_wooden-chest-trashdump-42x31"], ["wooden-trashdump-42x32", "WideChests_wooden-chest-trashdump-42x32"], ["wooden-trashdump-42x33", "WideChests_wooden-chest-trashdump-42x33"], ["wooden-trashdump-42x34", "WideChests_wooden-chest-trashdump-42x34"], ["wooden-trashdump-42x35", "WideChests_wooden-chest-trashdump-42x35"], ["wooden-trashdump-42x36", "WideChests_wooden-chest-trashdump-42x36"], ["wooden-trashdump-42x37", "WideChests_wooden-chest-trashdump-42x37"], ["wooden-trashdump-42x38", "WideChests_wooden-chest-trashdump-42x38"], ["wooden-trashdump-42x39", "WideChests_wooden-chest-trashdump-42x39"], ["wooden-trashdump-42x40", "WideChests_wooden-chest-trashdump-42x40"], ["wooden-trashdump-42x41", "WideChests_wooden-chest-trashdump-42x41"], ["wooden-trashdump-42x42", "WideChests_wooden-chest-trashdump-42x42"], ["wide-iron-chest-2", "WideChests_wide-iron-chest-2"], ["wide-iron-chest-3", "WideChests_wide-iron-chest-3"], ["wide-iron-chest-4", "WideChests_wide-iron-chest-4"], ["wide-iron-chest-5", "WideChests_wide-iron-chest-5"], ["wide-iron-chest-6", "WideChests_wide-iron-chest-6"], ["wide-iron-chest-7", "WideChests_wide-iron-chest-7"], ["wide-iron-chest-8", "WideChests_wide-iron-chest-8"], ["wide-iron-chest-9", "WideChests_wide-iron-chest-9"], ["wide-iron-chest-10", "WideChests_wide-iron-chest-10"], ["wide-iron-chest-11", "WideChests_wide-iron-chest-11"], ["wide-iron-chest-12", "WideChests_wide-iron-chest-12"], ["wide-iron-chest-13", "WideChests_wide-iron-chest-13"], ["wide-iron-chest-14", "WideChests_wide-iron-chest-14"], ["wide-iron-chest-15", "WideChests_wide-iron-chest-15"], ["wide-iron-chest-16", "WideChests_wide-iron-chest-16"], ["wide-iron-chest-17", "WideChests_wide-iron-chest-17"], ["wide-iron-chest-18", "WideChests_wide-iron-chest-18"], ["wide-iron-chest-19", "WideChests_wide-iron-chest-19"], ["wide-iron-chest-20", "WideChests_wide-iron-chest-20"], ["wide-iron-chest-21", "WideChests_wide-iron-chest-21"], ["wide-iron-chest-22", "WideChests_wide-iron-chest-22"], ["wide-iron-chest-23", "WideChests_wide-iron-chest-23"], ["wide-iron-chest-24", "WideChests_wide-iron-chest-24"], ["wide-iron-chest-25", "WideChests_wide-iron-chest-25"], ["wide-iron-chest-26", "WideChests_wide-iron-chest-26"], ["wide-iron-chest-27", "WideChests_wide-iron-chest-27"], ["wide-iron-chest-28", "WideChests_wide-iron-chest-28"], ["wide-iron-chest-29", "WideChests_wide-iron-chest-29"], ["wide-iron-chest-30", "WideChests_wide-iron-chest-30"], ["wide-iron-chest-31", "WideChests_wide-iron-chest-31"], ["wide-iron-chest-32", "WideChests_wide-iron-chest-32"], ["wide-iron-chest-33", "WideChests_wide-iron-chest-33"], ["wide-iron-chest-34", "WideChests_wide-iron-chest-34"], ["wide-iron-chest-35", "WideChests_wide-iron-chest-35"], ["wide-iron-chest-36", "WideChests_wide-iron-chest-36"], ["wide-iron-chest-37", "WideChests_wide-iron-chest-37"], ["wide-iron-chest-38", "WideChests_wide-iron-chest-38"], ["wide-iron-chest-39", "WideChests_wide-iron-chest-39"], ["wide-iron-chest-40", "WideChests_wide-iron-chest-40"], ["wide-iron-chest-41", "WideChests_wide-iron-chest-41"], ["wide-iron-chest-42", "WideChests_wide-iron-chest-42"], ["high-iron-chest-2", "WideChests_high-iron-chest-2"], ["high-iron-chest-3", "WideChests_high-iron-chest-3"], ["high-iron-chest-4", "WideChests_high-iron-chest-4"], ["high-iron-chest-5", "WideChests_high-iron-chest-5"], ["high-iron-chest-6", "WideChests_high-iron-chest-6"], ["high-iron-chest-7", "WideChests_high-iron-chest-7"], ["high-iron-chest-8", "WideChests_high-iron-chest-8"], ["high-iron-chest-9", "WideChests_high-iron-chest-9"], ["high-iron-chest-10", "WideChests_high-iron-chest-10"], ["high-iron-chest-11", "WideChests_high-iron-chest-11"], ["high-iron-chest-12", "WideChests_high-iron-chest-12"], ["high-iron-chest-13", "WideChests_high-iron-chest-13"], ["high-iron-chest-14", "WideChests_high-iron-chest-14"], ["high-iron-chest-15", "WideChests_high-iron-chest-15"], ["high-iron-chest-16", "WideChests_high-iron-chest-16"], ["high-iron-chest-17", "WideChests_high-iron-chest-17"], ["high-iron-chest-18", "WideChests_high-iron-chest-18"], ["high-iron-chest-19", "WideChests_high-iron-chest-19"], ["high-iron-chest-20", "WideChests_high-iron-chest-20"], ["high-iron-chest-21", "WideChests_high-iron-chest-21"], ["high-iron-chest-22", "WideChests_high-iron-chest-22"], ["high-iron-chest-23", "WideChests_high-iron-chest-23"], ["high-iron-chest-24", "WideChests_high-iron-chest-24"], ["high-iron-chest-25", "WideChests_high-iron-chest-25"], ["high-iron-chest-26", "WideChests_high-iron-chest-26"], ["high-iron-chest-27", "WideChests_high-iron-chest-27"], ["high-iron-chest-28", "WideChests_high-iron-chest-28"], ["high-iron-chest-29", "WideChests_high-iron-chest-29"], ["high-iron-chest-30", "WideChests_high-iron-chest-30"], ["high-iron-chest-31", "WideChests_high-iron-chest-31"], ["high-iron-chest-32", "WideChests_high-iron-chest-32"], ["high-iron-chest-33", "WideChests_high-iron-chest-33"], ["high-iron-chest-34", "WideChests_high-iron-chest-34"], ["high-iron-chest-35", "WideChests_high-iron-chest-35"], ["high-iron-chest-36", "WideChests_high-iron-chest-36"], ["high-iron-chest-37", "WideChests_high-iron-chest-37"], ["high-iron-chest-38", "WideChests_high-iron-chest-38"], ["high-iron-chest-39", "WideChests_high-iron-chest-39"], ["high-iron-chest-40", "WideChests_high-iron-chest-40"], ["high-iron-chest-41", "WideChests_high-iron-chest-41"], ["high-iron-chest-42", "WideChests_high-iron-chest-42"], ["iron-warehouse-2x2", "WideChests_iron-chest-warehouse-2x2"], ["iron-warehouse-2x3", "WideChests_iron-chest-warehouse-2x3"], ["iron-warehouse-2x4", "WideChests_iron-chest-warehouse-2x4"], ["iron-warehouse-2x5", "WideChests_iron-chest-warehouse-2x5"], ["iron-warehouse-2x6", "WideChests_iron-chest-warehouse-2x6"], ["iron-warehouse-2x7", "WideChests_iron-chest-warehouse-2x7"], ["iron-warehouse-2x8", "WideChests_iron-chest-warehouse-2x8"], ["iron-warehouse-2x9", "WideChests_iron-chest-warehouse-2x9"], ["iron-warehouse-2x10", "WideChests_iron-chest-warehouse-2x10"], ["iron-warehouse-2x11", "WideChests_iron-chest-warehouse-2x11"], ["iron-warehouse-2x12", "WideChests_iron-chest-warehouse-2x12"], ["iron-warehouse-2x13", "WideChests_iron-chest-warehouse-2x13"], ["iron-warehouse-2x14", "WideChests_iron-chest-warehouse-2x14"], ["iron-warehouse-2x15", "WideChests_iron-chest-warehouse-2x15"], ["iron-warehouse-2x16", "WideChests_iron-chest-warehouse-2x16"], ["iron-warehouse-2x17", "WideChests_iron-chest-warehouse-2x17"], ["iron-warehouse-2x18", "WideChests_iron-chest-warehouse-2x18"], ["iron-warehouse-2x19", "WideChests_iron-chest-warehouse-2x19"], ["iron-warehouse-2x20", "WideChests_iron-chest-warehouse-2x20"], ["iron-warehouse-2x21", "WideChests_iron-chest-warehouse-2x21"], ["iron-warehouse-2x22", "WideChests_iron-chest-warehouse-2x22"], ["iron-warehouse-2x23", "WideChests_iron-chest-warehouse-2x23"], ["iron-warehouse-2x24", "WideChests_iron-chest-warehouse-2x24"], ["iron-warehouse-2x25", "WideChests_iron-chest-warehouse-2x25"], ["iron-warehouse-2x26", "WideChests_iron-chest-warehouse-2x26"], ["iron-warehouse-2x27", "WideChests_iron-chest-warehouse-2x27"], ["iron-warehouse-2x28", "WideChests_iron-chest-warehouse-2x28"], ["iron-warehouse-2x29", "WideChests_iron-chest-warehouse-2x29"], ["iron-warehouse-2x30", "WideChests_iron-chest-warehouse-2x30"], ["iron-warehouse-2x31", "WideChests_iron-chest-warehouse-2x31"], ["iron-warehouse-2x32", "WideChests_iron-chest-warehouse-2x32"], ["iron-warehouse-2x33", "WideChests_iron-chest-warehouse-2x33"], ["iron-warehouse-2x34", "WideChests_iron-chest-warehouse-2x34"], ["iron-warehouse-2x35", "WideChests_iron-chest-warehouse-2x35"], ["iron-warehouse-2x36", "WideChests_iron-chest-warehouse-2x36"], ["iron-warehouse-2x37", "WideChests_iron-chest-warehouse-2x37"], ["iron-warehouse-2x38", "WideChests_iron-chest-warehouse-2x38"], ["iron-warehouse-2x39", "WideChests_iron-chest-warehouse-2x39"], ["iron-warehouse-2x40", "WideChests_iron-chest-warehouse-2x40"], ["iron-warehouse-2x41", "WideChests_iron-chest-warehouse-2x41"], ["iron-warehouse-2x42", "WideChests_iron-chest-warehouse-2x42"], ["iron-warehouse-3x2", "WideChests_iron-chest-warehouse-3x2"], ["iron-warehouse-3x3", "WideChests_iron-chest-warehouse-3x3"], ["iron-warehouse-3x4", "WideChests_iron-chest-warehouse-3x4"], ["iron-warehouse-3x5", "WideChests_iron-chest-warehouse-3x5"], ["iron-warehouse-3x6", "WideChests_iron-chest-warehouse-3x6"], ["iron-warehouse-3x7", "WideChests_iron-chest-warehouse-3x7"], ["iron-warehouse-3x8", "WideChests_iron-chest-warehouse-3x8"], ["iron-warehouse-3x9", "WideChests_iron-chest-warehouse-3x9"], ["iron-warehouse-3x10", "WideChests_iron-chest-warehouse-3x10"], ["iron-warehouse-3x11", "WideChests_iron-chest-warehouse-3x11"], ["iron-warehouse-3x12", "WideChests_iron-chest-warehouse-3x12"], ["iron-warehouse-3x13", "WideChests_iron-chest-warehouse-3x13"], ["iron-warehouse-3x14", "WideChests_iron-chest-warehouse-3x14"], ["iron-warehouse-3x15", "WideChests_iron-chest-warehouse-3x15"], ["iron-warehouse-3x16", "WideChests_iron-chest-warehouse-3x16"], ["iron-warehouse-3x17", "WideChests_iron-chest-warehouse-3x17"], ["iron-warehouse-3x18", "WideChests_iron-chest-warehouse-3x18"], ["iron-warehouse-3x19", "WideChests_iron-chest-warehouse-3x19"], ["iron-warehouse-3x20", "WideChests_iron-chest-warehouse-3x20"], ["iron-warehouse-3x21", "WideChests_iron-chest-warehouse-3x21"], ["iron-warehouse-3x22", "WideChests_iron-chest-warehouse-3x22"], ["iron-warehouse-3x23", "WideChests_iron-chest-warehouse-3x23"], ["iron-warehouse-3x24", "WideChests_iron-chest-warehouse-3x24"], ["iron-warehouse-3x25", "WideChests_iron-chest-warehouse-3x25"], ["iron-warehouse-3x26", "WideChests_iron-chest-warehouse-3x26"], ["iron-warehouse-3x27", "WideChests_iron-chest-warehouse-3x27"], ["iron-warehouse-3x28", "WideChests_iron-chest-warehouse-3x28"], ["iron-warehouse-3x29", "WideChests_iron-chest-warehouse-3x29"], ["iron-warehouse-3x30", "WideChests_iron-chest-warehouse-3x30"], ["iron-warehouse-3x31", "WideChests_iron-chest-warehouse-3x31"], ["iron-warehouse-3x32", "WideChests_iron-chest-warehouse-3x32"], ["iron-warehouse-3x33", "WideChests_iron-chest-warehouse-3x33"], ["iron-warehouse-3x34", "WideChests_iron-chest-warehouse-3x34"], ["iron-warehouse-3x35", "WideChests_iron-chest-warehouse-3x35"], ["iron-warehouse-3x36", "WideChests_iron-chest-warehouse-3x36"], ["iron-warehouse-3x37", "WideChests_iron-chest-warehouse-3x37"], ["iron-warehouse-3x38", "WideChests_iron-chest-warehouse-3x38"], ["iron-warehouse-3x39", "WideChests_iron-chest-warehouse-3x39"], ["iron-warehouse-3x40", "WideChests_iron-chest-warehouse-3x40"], ["iron-warehouse-3x41", "WideChests_iron-chest-warehouse-3x41"], ["iron-warehouse-3x42", "WideChests_iron-chest-warehouse-3x42"], ["iron-warehouse-4x2", "WideChests_iron-chest-warehouse-4x2"], ["iron-warehouse-4x3", "WideChests_iron-chest-warehouse-4x3"], ["iron-warehouse-4x4", "WideChests_iron-chest-warehouse-4x4"], ["iron-warehouse-4x5", "WideChests_iron-chest-warehouse-4x5"], ["iron-warehouse-4x6", "WideChests_iron-chest-warehouse-4x6"], ["iron-warehouse-4x7", "WideChests_iron-chest-warehouse-4x7"], ["iron-warehouse-4x8", "WideChests_iron-chest-warehouse-4x8"], ["iron-warehouse-4x9", "WideChests_iron-chest-warehouse-4x9"], ["iron-warehouse-4x10", "WideChests_iron-chest-warehouse-4x10"], ["iron-warehouse-4x11", "WideChests_iron-chest-warehouse-4x11"], ["iron-warehouse-4x12", "WideChests_iron-chest-warehouse-4x12"], ["iron-warehouse-4x13", "WideChests_iron-chest-warehouse-4x13"], ["iron-warehouse-4x14", "WideChests_iron-chest-warehouse-4x14"], ["iron-warehouse-4x15", "WideChests_iron-chest-warehouse-4x15"], ["iron-warehouse-4x16", "WideChests_iron-chest-warehouse-4x16"], ["iron-warehouse-4x17", "WideChests_iron-chest-warehouse-4x17"], ["iron-warehouse-4x18", "WideChests_iron-chest-warehouse-4x18"], ["iron-warehouse-4x19", "WideChests_iron-chest-warehouse-4x19"], ["iron-warehouse-4x20", "WideChests_iron-chest-warehouse-4x20"], ["iron-warehouse-4x21", "WideChests_iron-chest-warehouse-4x21"], ["iron-warehouse-4x22", "WideChests_iron-chest-warehouse-4x22"], ["iron-warehouse-4x23", "WideChests_iron-chest-warehouse-4x23"], ["iron-warehouse-4x24", "WideChests_iron-chest-warehouse-4x24"], ["iron-warehouse-4x25", "WideChests_iron-chest-warehouse-4x25"], ["iron-warehouse-4x26", "WideChests_iron-chest-warehouse-4x26"], ["iron-warehouse-4x27", "WideChests_iron-chest-warehouse-4x27"], ["iron-warehouse-4x28", "WideChests_iron-chest-warehouse-4x28"], ["iron-warehouse-4x29", "WideChests_iron-chest-warehouse-4x29"], ["iron-warehouse-4x30", "WideChests_iron-chest-warehouse-4x30"], ["iron-warehouse-4x31", "WideChests_iron-chest-warehouse-4x31"], ["iron-warehouse-4x32", "WideChests_iron-chest-warehouse-4x32"], ["iron-warehouse-4x33", "WideChests_iron-chest-warehouse-4x33"], ["iron-warehouse-4x34", "WideChests_iron-chest-warehouse-4x34"], ["iron-warehouse-4x35", "WideChests_iron-chest-warehouse-4x35"], ["iron-warehouse-4x36", "WideChests_iron-chest-warehouse-4x36"], ["iron-warehouse-4x37", "WideChests_iron-chest-warehouse-4x37"], ["iron-warehouse-4x38", "WideChests_iron-chest-warehouse-4x38"], ["iron-warehouse-4x39", "WideChests_iron-chest-warehouse-4x39"], ["iron-warehouse-4x40", "WideChests_iron-chest-warehouse-4x40"], ["iron-warehouse-4x41", "WideChests_iron-chest-warehouse-4x41"], ["iron-warehouse-4x42", "WideChests_iron-chest-warehouse-4x42"], ["iron-warehouse-5x2", "WideChests_iron-chest-warehouse-5x2"], ["iron-warehouse-5x3", "WideChests_iron-chest-warehouse-5x3"], ["iron-warehouse-5x4", "WideChests_iron-chest-warehouse-5x4"], ["iron-warehouse-5x5", "WideChests_iron-chest-warehouse-5x5"], ["iron-warehouse-5x6", "WideChests_iron-chest-warehouse-5x6"], ["iron-warehouse-5x7", "WideChests_iron-chest-warehouse-5x7"], ["iron-warehouse-5x8", "WideChests_iron-chest-warehouse-5x8"], ["iron-warehouse-5x9", "WideChests_iron-chest-warehouse-5x9"], ["iron-warehouse-5x10", "WideChests_iron-chest-warehouse-5x10"], ["iron-warehouse-5x11", "WideChests_iron-chest-warehouse-5x11"], ["iron-warehouse-5x12", "WideChests_iron-chest-warehouse-5x12"], ["iron-warehouse-5x13", "WideChests_iron-chest-warehouse-5x13"], ["iron-warehouse-5x14", "WideChests_iron-chest-warehouse-5x14"], ["iron-warehouse-5x15", "WideChests_iron-chest-warehouse-5x15"], ["iron-warehouse-5x16", "WideChests_iron-chest-warehouse-5x16"], ["iron-warehouse-5x17", "WideChests_iron-chest-warehouse-5x17"], ["iron-warehouse-5x18", "WideChests_iron-chest-warehouse-5x18"], ["iron-warehouse-5x19", "WideChests_iron-chest-warehouse-5x19"], ["iron-warehouse-5x20", "WideChests_iron-chest-warehouse-5x20"], ["iron-warehouse-5x21", "WideChests_iron-chest-warehouse-5x21"], ["iron-warehouse-5x22", "WideChests_iron-chest-warehouse-5x22"], ["iron-warehouse-5x23", "WideChests_iron-chest-warehouse-5x23"], ["iron-warehouse-5x24", "WideChests_iron-chest-warehouse-5x24"], ["iron-warehouse-5x25", "WideChests_iron-chest-warehouse-5x25"], ["iron-warehouse-5x26", "WideChests_iron-chest-warehouse-5x26"], ["iron-warehouse-5x27", "WideChests_iron-chest-warehouse-5x27"], ["iron-warehouse-5x28", "WideChests_iron-chest-warehouse-5x28"], ["iron-warehouse-5x29", "WideChests_iron-chest-warehouse-5x29"], ["iron-warehouse-5x30", "WideChests_iron-chest-warehouse-5x30"], ["iron-warehouse-5x31", "WideChests_iron-chest-warehouse-5x31"], ["iron-warehouse-5x32", "WideChests_iron-chest-warehouse-5x32"], ["iron-warehouse-5x33", "WideChests_iron-chest-warehouse-5x33"], ["iron-warehouse-5x34", "WideChests_iron-chest-warehouse-5x34"], ["iron-warehouse-5x35", "WideChests_iron-chest-warehouse-5x35"], ["iron-warehouse-5x36", "WideChests_iron-chest-warehouse-5x36"], ["iron-warehouse-5x37", "WideChests_iron-chest-warehouse-5x37"], ["iron-warehouse-5x38", "WideChests_iron-chest-warehouse-5x38"], ["iron-warehouse-5x39", "WideChests_iron-chest-warehouse-5x39"], ["iron-warehouse-5x40", "WideChests_iron-chest-warehouse-5x40"], ["iron-warehouse-5x41", "WideChests_iron-chest-warehouse-5x41"], ["iron-warehouse-5x42", "WideChests_iron-chest-warehouse-5x42"], ["iron-warehouse-6x2", "WideChests_iron-chest-warehouse-6x2"], ["iron-warehouse-6x3", "WideChests_iron-chest-warehouse-6x3"], ["iron-warehouse-6x4", "WideChests_iron-chest-warehouse-6x4"], ["iron-warehouse-6x5", "WideChests_iron-chest-warehouse-6x5"], ["iron-warehouse-7x2", "WideChests_iron-chest-warehouse-7x2"], ["iron-warehouse-7x3", "WideChests_iron-chest-warehouse-7x3"], ["iron-warehouse-7x4", "WideChests_iron-chest-warehouse-7x4"], ["iron-warehouse-7x5", "WideChests_iron-chest-warehouse-7x5"], ["iron-warehouse-8x2", "WideChests_iron-chest-warehouse-8x2"], ["iron-warehouse-8x3", "WideChests_iron-chest-warehouse-8x3"], ["iron-warehouse-8x4", "WideChests_iron-chest-warehouse-8x4"], ["iron-warehouse-8x5", "WideChests_iron-chest-warehouse-8x5"], ["iron-warehouse-9x2", "WideChests_iron-chest-warehouse-9x2"], ["iron-warehouse-9x3", "WideChests_iron-chest-warehouse-9x3"], ["iron-warehouse-9x4", "WideChests_iron-chest-warehouse-9x4"], ["iron-warehouse-9x5", "WideChests_iron-chest-warehouse-9x5"], ["iron-warehouse-10x2", "WideChests_iron-chest-warehouse-10x2"], ["iron-warehouse-10x3", "WideChests_iron-chest-warehouse-10x3"], ["iron-warehouse-10x4", "WideChests_iron-chest-warehouse-10x4"], ["iron-warehouse-10x5", "WideChests_iron-chest-warehouse-10x5"], ["iron-warehouse-11x2", "WideChests_iron-chest-warehouse-11x2"], ["iron-warehouse-11x3", "WideChests_iron-chest-warehouse-11x3"], ["iron-warehouse-11x4", "WideChests_iron-chest-warehouse-11x4"], ["iron-warehouse-11x5", "WideChests_iron-chest-warehouse-11x5"], ["iron-warehouse-12x2", "WideChests_iron-chest-warehouse-12x2"], ["iron-warehouse-12x3", "WideChests_iron-chest-warehouse-12x3"], ["iron-warehouse-12x4", "WideChests_iron-chest-warehouse-12x4"], ["iron-warehouse-12x5", "WideChests_iron-chest-warehouse-12x5"], ["iron-warehouse-13x2", "WideChests_iron-chest-warehouse-13x2"], ["iron-warehouse-13x3", "WideChests_iron-chest-warehouse-13x3"], ["iron-warehouse-13x4", "WideChests_iron-chest-warehouse-13x4"], ["iron-warehouse-13x5", "WideChests_iron-chest-warehouse-13x5"], ["iron-warehouse-14x2", "WideChests_iron-chest-warehouse-14x2"], ["iron-warehouse-14x3", "WideChests_iron-chest-warehouse-14x3"], ["iron-warehouse-14x4", "WideChests_iron-chest-warehouse-14x4"], ["iron-warehouse-14x5", "WideChests_iron-chest-warehouse-14x5"], ["iron-warehouse-15x2", "WideChests_iron-chest-warehouse-15x2"], ["iron-warehouse-15x3", "WideChests_iron-chest-warehouse-15x3"], ["iron-warehouse-15x4", "WideChests_iron-chest-warehouse-15x4"], ["iron-warehouse-15x5", "WideChests_iron-chest-warehouse-15x5"], ["iron-warehouse-16x2", "WideChests_iron-chest-warehouse-16x2"], ["iron-warehouse-16x3", "WideChests_iron-chest-warehouse-16x3"], ["iron-warehouse-16x4", "WideChests_iron-chest-warehouse-16x4"], ["iron-warehouse-16x5", "WideChests_iron-chest-warehouse-16x5"], ["iron-warehouse-17x2", "WideChests_iron-chest-warehouse-17x2"], ["iron-warehouse-17x3", "WideChests_iron-chest-warehouse-17x3"], ["iron-warehouse-17x4", "WideChests_iron-chest-warehouse-17x4"], ["iron-warehouse-17x5", "WideChests_iron-chest-warehouse-17x5"], ["iron-warehouse-18x2", "WideChests_iron-chest-warehouse-18x2"], ["iron-warehouse-18x3", "WideChests_iron-chest-warehouse-18x3"], ["iron-warehouse-18x4", "WideChests_iron-chest-warehouse-18x4"], ["iron-warehouse-18x5", "WideChests_iron-chest-warehouse-18x5"], ["iron-warehouse-19x2", "WideChests_iron-chest-warehouse-19x2"], ["iron-warehouse-19x3", "WideChests_iron-chest-warehouse-19x3"], ["iron-warehouse-19x4", "WideChests_iron-chest-warehouse-19x4"], ["iron-warehouse-19x5", "WideChests_iron-chest-warehouse-19x5"], ["iron-warehouse-20x2", "WideChests_iron-chest-warehouse-20x2"], ["iron-warehouse-20x3", "WideChests_iron-chest-warehouse-20x3"], ["iron-warehouse-20x4", "WideChests_iron-chest-warehouse-20x4"], ["iron-warehouse-20x5", "WideChests_iron-chest-warehouse-20x5"], ["iron-warehouse-21x2", "WideChests_iron-chest-warehouse-21x2"], ["iron-warehouse-21x3", "WideChests_iron-chest-warehouse-21x3"], ["iron-warehouse-21x4", "WideChests_iron-chest-warehouse-21x4"], ["iron-warehouse-21x5", "WideChests_iron-chest-warehouse-21x5"], ["iron-warehouse-22x2", "WideChests_iron-chest-warehouse-22x2"], ["iron-warehouse-22x3", "WideChests_iron-chest-warehouse-22x3"], ["iron-warehouse-22x4", "WideChests_iron-chest-warehouse-22x4"], ["iron-warehouse-22x5", "WideChests_iron-chest-warehouse-22x5"], ["iron-warehouse-23x2", "WideChests_iron-chest-warehouse-23x2"], ["iron-warehouse-23x3", "WideChests_iron-chest-warehouse-23x3"], ["iron-warehouse-23x4", "WideChests_iron-chest-warehouse-23x4"], ["iron-warehouse-23x5", "WideChests_iron-chest-warehouse-23x5"], ["iron-warehouse-24x2", "WideChests_iron-chest-warehouse-24x2"], ["iron-warehouse-24x3", "WideChests_iron-chest-warehouse-24x3"], ["iron-warehouse-24x4", "WideChests_iron-chest-warehouse-24x4"], ["iron-warehouse-24x5", "WideChests_iron-chest-warehouse-24x5"], ["iron-warehouse-25x2", "WideChests_iron-chest-warehouse-25x2"], ["iron-warehouse-25x3", "WideChests_iron-chest-warehouse-25x3"], ["iron-warehouse-25x4", "WideChests_iron-chest-warehouse-25x4"], ["iron-warehouse-25x5", "WideChests_iron-chest-warehouse-25x5"], ["iron-warehouse-26x2", "WideChests_iron-chest-warehouse-26x2"], ["iron-warehouse-26x3", "WideChests_iron-chest-warehouse-26x3"], ["iron-warehouse-26x4", "WideChests_iron-chest-warehouse-26x4"], ["iron-warehouse-26x5", "WideChests_iron-chest-warehouse-26x5"], ["iron-warehouse-27x2", "WideChests_iron-chest-warehouse-27x2"], ["iron-warehouse-27x3", "WideChests_iron-chest-warehouse-27x3"], ["iron-warehouse-27x4", "WideChests_iron-chest-warehouse-27x4"], ["iron-warehouse-27x5", "WideChests_iron-chest-warehouse-27x5"], ["iron-warehouse-28x2", "WideChests_iron-chest-warehouse-28x2"], ["iron-warehouse-28x3", "WideChests_iron-chest-warehouse-28x3"], ["iron-warehouse-28x4", "WideChests_iron-chest-warehouse-28x4"], ["iron-warehouse-28x5", "WideChests_iron-chest-warehouse-28x5"], ["iron-warehouse-29x2", "WideChests_iron-chest-warehouse-29x2"], ["iron-warehouse-29x3", "WideChests_iron-chest-warehouse-29x3"], ["iron-warehouse-29x4", "WideChests_iron-chest-warehouse-29x4"], ["iron-warehouse-29x5", "WideChests_iron-chest-warehouse-29x5"], ["iron-warehouse-30x2", "WideChests_iron-chest-warehouse-30x2"], ["iron-warehouse-30x3", "WideChests_iron-chest-warehouse-30x3"], ["iron-warehouse-30x4", "WideChests_iron-chest-warehouse-30x4"], ["iron-warehouse-30x5", "WideChests_iron-chest-warehouse-30x5"], ["iron-warehouse-31x2", "WideChests_iron-chest-warehouse-31x2"], ["iron-warehouse-31x3", "WideChests_iron-chest-warehouse-31x3"], ["iron-warehouse-31x4", "WideChests_iron-chest-warehouse-31x4"], ["iron-warehouse-31x5", "WideChests_iron-chest-warehouse-31x5"], ["iron-warehouse-32x2", "WideChests_iron-chest-warehouse-32x2"], ["iron-warehouse-32x3", "WideChests_iron-chest-warehouse-32x3"], ["iron-warehouse-32x4", "WideChests_iron-chest-warehouse-32x4"], ["iron-warehouse-32x5", "WideChests_iron-chest-warehouse-32x5"], ["iron-warehouse-33x2", "WideChests_iron-chest-warehouse-33x2"], ["iron-warehouse-33x3", "WideChests_iron-chest-warehouse-33x3"], ["iron-warehouse-33x4", "WideChests_iron-chest-warehouse-33x4"], ["iron-warehouse-33x5", "WideChests_iron-chest-warehouse-33x5"], ["iron-warehouse-34x2", "WideChests_iron-chest-warehouse-34x2"], ["iron-warehouse-34x3", "WideChests_iron-chest-warehouse-34x3"], ["iron-warehouse-34x4", "WideChests_iron-chest-warehouse-34x4"], ["iron-warehouse-34x5", "WideChests_iron-chest-warehouse-34x5"], ["iron-warehouse-35x2", "WideChests_iron-chest-warehouse-35x2"], ["iron-warehouse-35x3", "WideChests_iron-chest-warehouse-35x3"], ["iron-warehouse-35x4", "WideChests_iron-chest-warehouse-35x4"], ["iron-warehouse-35x5", "WideChests_iron-chest-warehouse-35x5"], ["iron-warehouse-36x2", "WideChests_iron-chest-warehouse-36x2"], ["iron-warehouse-36x3", "WideChests_iron-chest-warehouse-36x3"], ["iron-warehouse-36x4", "WideChests_iron-chest-warehouse-36x4"], ["iron-warehouse-36x5", "WideChests_iron-chest-warehouse-36x5"], ["iron-warehouse-37x2", "WideChests_iron-chest-warehouse-37x2"], ["iron-warehouse-37x3", "WideChests_iron-chest-warehouse-37x3"], ["iron-warehouse-37x4", "WideChests_iron-chest-warehouse-37x4"], ["iron-warehouse-37x5", "WideChests_iron-chest-warehouse-37x5"], ["iron-warehouse-38x2", "WideChests_iron-chest-warehouse-38x2"], ["iron-warehouse-38x3", "WideChests_iron-chest-warehouse-38x3"], ["iron-warehouse-38x4", "WideChests_iron-chest-warehouse-38x4"], ["iron-warehouse-38x5", "WideChests_iron-chest-warehouse-38x5"], ["iron-warehouse-39x2", "WideChests_iron-chest-warehouse-39x2"], ["iron-warehouse-39x3", "WideChests_iron-chest-warehouse-39x3"], ["iron-warehouse-39x4", "WideChests_iron-chest-warehouse-39x4"], ["iron-warehouse-39x5", "WideChests_iron-chest-warehouse-39x5"], ["iron-warehouse-40x2", "WideChests_iron-chest-warehouse-40x2"], ["iron-warehouse-40x3", "WideChests_iron-chest-warehouse-40x3"], ["iron-warehouse-40x4", "WideChests_iron-chest-warehouse-40x4"], ["iron-warehouse-40x5", "WideChests_iron-chest-warehouse-40x5"], ["iron-warehouse-41x2", "WideChests_iron-chest-warehouse-41x2"], ["iron-warehouse-41x3", "WideChests_iron-chest-warehouse-41x3"], ["iron-warehouse-41x4", "WideChests_iron-chest-warehouse-41x4"], ["iron-warehouse-41x5", "WideChests_iron-chest-warehouse-41x5"], ["iron-warehouse-42x2", "WideChests_iron-chest-warehouse-42x2"], ["iron-warehouse-42x3", "WideChests_iron-chest-warehouse-42x3"], ["iron-warehouse-42x4", "WideChests_iron-chest-warehouse-42x4"], ["iron-warehouse-42x5", "WideChests_iron-chest-warehouse-42x5"], ["iron-trashdump-6x6", "WideChests_iron-chest-trashdump-6x6"], ["iron-trashdump-6x7", "WideChests_iron-chest-trashdump-6x7"], ["iron-trashdump-6x8", "WideChests_iron-chest-trashdump-6x8"], ["iron-trashdump-6x9", "WideChests_iron-chest-trashdump-6x9"], ["iron-trashdump-6x10", "WideChests_iron-chest-trashdump-6x10"], ["iron-trashdump-6x11", "WideChests_iron-chest-trashdump-6x11"], ["iron-trashdump-6x12", "WideChests_iron-chest-trashdump-6x12"], ["iron-trashdump-6x13", "WideChests_iron-chest-trashdump-6x13"], ["iron-trashdump-6x14", "WideChests_iron-chest-trashdump-6x14"], ["iron-trashdump-6x15", "WideChests_iron-chest-trashdump-6x15"], ["iron-trashdump-6x16", "WideChests_iron-chest-trashdump-6x16"], ["iron-trashdump-6x17", "WideChests_iron-chest-trashdump-6x17"], ["iron-trashdump-6x18", "WideChests_iron-chest-trashdump-6x18"], ["iron-trashdump-6x19", "WideChests_iron-chest-trashdump-6x19"], ["iron-trashdump-6x20", "WideChests_iron-chest-trashdump-6x20"], ["iron-trashdump-6x21", "WideChests_iron-chest-trashdump-6x21"], ["iron-trashdump-6x22", "WideChests_iron-chest-trashdump-6x22"], ["iron-trashdump-6x23", "WideChests_iron-chest-trashdump-6x23"], ["iron-trashdump-6x24", "WideChests_iron-chest-trashdump-6x24"], ["iron-trashdump-6x25", "WideChests_iron-chest-trashdump-6x25"], ["iron-trashdump-6x26", "WideChests_iron-chest-trashdump-6x26"], ["iron-trashdump-6x27", "WideChests_iron-chest-trashdump-6x27"], ["iron-trashdump-6x28", "WideChests_iron-chest-trashdump-6x28"], ["iron-trashdump-6x29", "WideChests_iron-chest-trashdump-6x29"], ["iron-trashdump-6x30", "WideChests_iron-chest-trashdump-6x30"], ["iron-trashdump-6x31", "WideChests_iron-chest-trashdump-6x31"], ["iron-trashdump-6x32", "WideChests_iron-chest-trashdump-6x32"], ["iron-trashdump-6x33", "WideChests_iron-chest-trashdump-6x33"], ["iron-trashdump-6x34", "WideChests_iron-chest-trashdump-6x34"], ["iron-trashdump-6x35", "WideChests_iron-chest-trashdump-6x35"], ["iron-trashdump-6x36", "WideChests_iron-chest-trashdump-6x36"], ["iron-trashdump-6x37", "WideChests_iron-chest-trashdump-6x37"], ["iron-trashdump-6x38", "WideChests_iron-chest-trashdump-6x38"], ["iron-trashdump-6x39", "WideChests_iron-chest-trashdump-6x39"], ["iron-trashdump-6x40", "WideChests_iron-chest-trashdump-6x40"], ["iron-trashdump-6x41", "WideChests_iron-chest-trashdump-6x41"], ["iron-trashdump-6x42", "WideChests_iron-chest-trashdump-6x42"], ["iron-trashdump-7x6", "WideChests_iron-chest-trashdump-7x6"], ["iron-trashdump-7x7", "WideChests_iron-chest-trashdump-7x7"], ["iron-trashdump-7x8", "WideChests_iron-chest-trashdump-7x8"], ["iron-trashdump-7x9", "WideChests_iron-chest-trashdump-7x9"], ["iron-trashdump-7x10", "WideChests_iron-chest-trashdump-7x10"], ["iron-trashdump-7x11", "WideChests_iron-chest-trashdump-7x11"], ["iron-trashdump-7x12", "WideChests_iron-chest-trashdump-7x12"], ["iron-trashdump-7x13", "WideChests_iron-chest-trashdump-7x13"], ["iron-trashdump-7x14", "WideChests_iron-chest-trashdump-7x14"], ["iron-trashdump-7x15", "WideChests_iron-chest-trashdump-7x15"], ["iron-trashdump-7x16", "WideChests_iron-chest-trashdump-7x16"], ["iron-trashdump-7x17", "WideChests_iron-chest-trashdump-7x17"], ["iron-trashdump-7x18", "WideChests_iron-chest-trashdump-7x18"], ["iron-trashdump-7x19", "WideChests_iron-chest-trashdump-7x19"], ["iron-trashdump-7x20", "WideChests_iron-chest-trashdump-7x20"], ["iron-trashdump-7x21", "WideChests_iron-chest-trashdump-7x21"], ["iron-trashdump-7x22", "WideChests_iron-chest-trashdump-7x22"], ["iron-trashdump-7x23", "WideChests_iron-chest-trashdump-7x23"], ["iron-trashdump-7x24", "WideChests_iron-chest-trashdump-7x24"], ["iron-trashdump-7x25", "WideChests_iron-chest-trashdump-7x25"], ["iron-trashdump-7x26", "WideChests_iron-chest-trashdump-7x26"], ["iron-trashdump-7x27", "WideChests_iron-chest-trashdump-7x27"], ["iron-trashdump-7x28", "WideChests_iron-chest-trashdump-7x28"], ["iron-trashdump-7x29", "WideChests_iron-chest-trashdump-7x29"], ["iron-trashdump-7x30", "WideChests_iron-chest-trashdump-7x30"], ["iron-trashdump-7x31", "WideChests_iron-chest-trashdump-7x31"], ["iron-trashdump-7x32", "WideChests_iron-chest-trashdump-7x32"], ["iron-trashdump-7x33", "WideChests_iron-chest-trashdump-7x33"], ["iron-trashdump-7x34", "WideChests_iron-chest-trashdump-7x34"], ["iron-trashdump-7x35", "WideChests_iron-chest-trashdump-7x35"], ["iron-trashdump-7x36", "WideChests_iron-chest-trashdump-7x36"], ["iron-trashdump-7x37", "WideChests_iron-chest-trashdump-7x37"], ["iron-trashdump-7x38", "WideChests_iron-chest-trashdump-7x38"], ["iron-trashdump-7x39", "WideChests_iron-chest-trashdump-7x39"], ["iron-trashdump-7x40", "WideChests_iron-chest-trashdump-7x40"], ["iron-trashdump-7x41", "WideChests_iron-chest-trashdump-7x41"], ["iron-trashdump-7x42", "WideChests_iron-chest-trashdump-7x42"], ["iron-trashdump-8x6", "WideChests_iron-chest-trashdump-8x6"], ["iron-trashdump-8x7", "WideChests_iron-chest-trashdump-8x7"], ["iron-trashdump-8x8", "WideChests_iron-chest-trashdump-8x8"], ["iron-trashdump-8x9", "WideChests_iron-chest-trashdump-8x9"], ["iron-trashdump-8x10", "WideChests_iron-chest-trashdump-8x10"], ["iron-trashdump-8x11", "WideChests_iron-chest-trashdump-8x11"], ["iron-trashdump-8x12", "WideChests_iron-chest-trashdump-8x12"], ["iron-trashdump-8x13", "WideChests_iron-chest-trashdump-8x13"], ["iron-trashdump-8x14", "WideChests_iron-chest-trashdump-8x14"], ["iron-trashdump-8x15", "WideChests_iron-chest-trashdump-8x15"], ["iron-trashdump-8x16", "WideChests_iron-chest-trashdump-8x16"], ["iron-trashdump-8x17", "WideChests_iron-chest-trashdump-8x17"], ["iron-trashdump-8x18", "WideChests_iron-chest-trashdump-8x18"], ["iron-trashdump-8x19", "WideChests_iron-chest-trashdump-8x19"], ["iron-trashdump-8x20", "WideChests_iron-chest-trashdump-8x20"], ["iron-trashdump-8x21", "WideChests_iron-chest-trashdump-8x21"], ["iron-trashdump-8x22", "WideChests_iron-chest-trashdump-8x22"], ["iron-trashdump-8x23", "WideChests_iron-chest-trashdump-8x23"], ["iron-trashdump-8x24", "WideChests_iron-chest-trashdump-8x24"], ["iron-trashdump-8x25", "WideChests_iron-chest-trashdump-8x25"], ["iron-trashdump-8x26", "WideChests_iron-chest-trashdump-8x26"], ["iron-trashdump-8x27", "WideChests_iron-chest-trashdump-8x27"], ["iron-trashdump-8x28", "WideChests_iron-chest-trashdump-8x28"], ["iron-trashdump-8x29", "WideChests_iron-chest-trashdump-8x29"], ["iron-trashdump-8x30", "WideChests_iron-chest-trashdump-8x30"], ["iron-trashdump-8x31", "WideChests_iron-chest-trashdump-8x31"], ["iron-trashdump-8x32", "WideChests_iron-chest-trashdump-8x32"], ["iron-trashdump-8x33", "WideChests_iron-chest-trashdump-8x33"], ["iron-trashdump-8x34", "WideChests_iron-chest-trashdump-8x34"], ["iron-trashdump-8x35", "WideChests_iron-chest-trashdump-8x35"], ["iron-trashdump-8x36", "WideChests_iron-chest-trashdump-8x36"], ["iron-trashdump-8x37", "WideChests_iron-chest-trashdump-8x37"], ["iron-trashdump-8x38", "WideChests_iron-chest-trashdump-8x38"], ["iron-trashdump-8x39", "WideChests_iron-chest-trashdump-8x39"], ["iron-trashdump-8x40", "WideChests_iron-chest-trashdump-8x40"], ["iron-trashdump-8x41", "WideChests_iron-chest-trashdump-8x41"], ["iron-trashdump-8x42", "WideChests_iron-chest-trashdump-8x42"], ["iron-trashdump-9x6", "WideChests_iron-chest-trashdump-9x6"], ["iron-trashdump-9x7", "WideChests_iron-chest-trashdump-9x7"], ["iron-trashdump-9x8", "WideChests_iron-chest-trashdump-9x8"], ["iron-trashdump-9x9", "WideChests_iron-chest-trashdump-9x9"], ["iron-trashdump-9x10", "WideChests_iron-chest-trashdump-9x10"], ["iron-trashdump-9x11", "WideChests_iron-chest-trashdump-9x11"], ["iron-trashdump-9x12", "WideChests_iron-chest-trashdump-9x12"], ["iron-trashdump-9x13", "WideChests_iron-chest-trashdump-9x13"], ["iron-trashdump-9x14", "WideChests_iron-chest-trashdump-9x14"], ["iron-trashdump-9x15", "WideChests_iron-chest-trashdump-9x15"], ["iron-trashdump-9x16", "WideChests_iron-chest-trashdump-9x16"], ["iron-trashdump-9x17", "WideChests_iron-chest-trashdump-9x17"], ["iron-trashdump-9x18", "WideChests_iron-chest-trashdump-9x18"], ["iron-trashdump-9x19", "WideChests_iron-chest-trashdump-9x19"], ["iron-trashdump-9x20", "WideChests_iron-chest-trashdump-9x20"], ["iron-trashdump-9x21", "WideChests_iron-chest-trashdump-9x21"], ["iron-trashdump-9x22", "WideChests_iron-chest-trashdump-9x22"], ["iron-trashdump-9x23", "WideChests_iron-chest-trashdump-9x23"], ["iron-trashdump-9x24", "WideChests_iron-chest-trashdump-9x24"], ["iron-trashdump-9x25", "WideChests_iron-chest-trashdump-9x25"], ["iron-trashdump-9x26", "WideChests_iron-chest-trashdump-9x26"], ["iron-trashdump-9x27", "WideChests_iron-chest-trashdump-9x27"], ["iron-trashdump-9x28", "WideChests_iron-chest-trashdump-9x28"], ["iron-trashdump-9x29", "WideChests_iron-chest-trashdump-9x29"], ["iron-trashdump-9x30", "WideChests_iron-chest-trashdump-9x30"], ["iron-trashdump-9x31", "WideChests_iron-chest-trashdump-9x31"], ["iron-trashdump-9x32", "WideChests_iron-chest-trashdump-9x32"], ["iron-trashdump-9x33", "WideChests_iron-chest-trashdump-9x33"], ["iron-trashdump-9x34", "WideChests_iron-chest-trashdump-9x34"], ["iron-trashdump-9x35", "WideChests_iron-chest-trashdump-9x35"], ["iron-trashdump-9x36", "WideChests_iron-chest-trashdump-9x36"], ["iron-trashdump-9x37", "WideChests_iron-chest-trashdump-9x37"], ["iron-trashdump-9x38", "WideChests_iron-chest-trashdump-9x38"], ["iron-trashdump-9x39", "WideChests_iron-chest-trashdump-9x39"], ["iron-trashdump-9x40", "WideChests_iron-chest-trashdump-9x40"], ["iron-trashdump-9x41", "WideChests_iron-chest-trashdump-9x41"], ["iron-trashdump-9x42", "WideChests_iron-chest-trashdump-9x42"], ["iron-trashdump-10x6", "WideChests_iron-chest-trashdump-10x6"], ["iron-trashdump-10x7", "WideChests_iron-chest-trashdump-10x7"], ["iron-trashdump-10x8", "WideChests_iron-chest-trashdump-10x8"], ["iron-trashdump-10x9", "WideChests_iron-chest-trashdump-10x9"], ["iron-trashdump-10x10", "WideChests_iron-chest-trashdump-10x10"], ["iron-trashdump-10x11", "WideChests_iron-chest-trashdump-10x11"], ["iron-trashdump-10x12", "WideChests_iron-chest-trashdump-10x12"], ["iron-trashdump-10x13", "WideChests_iron-chest-trashdump-10x13"], ["iron-trashdump-10x14", "WideChests_iron-chest-trashdump-10x14"], ["iron-trashdump-10x15", "WideChests_iron-chest-trashdump-10x15"], ["iron-trashdump-10x16", "WideChests_iron-chest-trashdump-10x16"], ["iron-trashdump-10x17", "WideChests_iron-chest-trashdump-10x17"], ["iron-trashdump-10x18", "WideChests_iron-chest-trashdump-10x18"], ["iron-trashdump-10x19", "WideChests_iron-chest-trashdump-10x19"], ["iron-trashdump-10x20", "WideChests_iron-chest-trashdump-10x20"], ["iron-trashdump-10x21", "WideChests_iron-chest-trashdump-10x21"], ["iron-trashdump-10x22", "WideChests_iron-chest-trashdump-10x22"], ["iron-trashdump-10x23", "WideChests_iron-chest-trashdump-10x23"], ["iron-trashdump-10x24", "WideChests_iron-chest-trashdump-10x24"], ["iron-trashdump-10x25", "WideChests_iron-chest-trashdump-10x25"], ["iron-trashdump-10x26", "WideChests_iron-chest-trashdump-10x26"], ["iron-trashdump-10x27", "WideChests_iron-chest-trashdump-10x27"], ["iron-trashdump-10x28", "WideChests_iron-chest-trashdump-10x28"], ["iron-trashdump-10x29", "WideChests_iron-chest-trashdump-10x29"], ["iron-trashdump-10x30", "WideChests_iron-chest-trashdump-10x30"], ["iron-trashdump-10x31", "WideChests_iron-chest-trashdump-10x31"], ["iron-trashdump-10x32", "WideChests_iron-chest-trashdump-10x32"], ["iron-trashdump-10x33", "WideChests_iron-chest-trashdump-10x33"], ["iron-trashdump-10x34", "WideChests_iron-chest-trashdump-10x34"], ["iron-trashdump-10x35", "WideChests_iron-chest-trashdump-10x35"], ["iron-trashdump-10x36", "WideChests_iron-chest-trashdump-10x36"], ["iron-trashdump-10x37", "WideChests_iron-chest-trashdump-10x37"], ["iron-trashdump-10x38", "WideChests_iron-chest-trashdump-10x38"], ["iron-trashdump-10x39", "WideChests_iron-chest-trashdump-10x39"], ["iron-trashdump-10x40", "WideChests_iron-chest-trashdump-10x40"], ["iron-trashdump-10x41", "WideChests_iron-chest-trashdump-10x41"], ["iron-trashdump-10x42", "WideChests_iron-chest-trashdump-10x42"], ["iron-trashdump-11x6", "WideChests_iron-chest-trashdump-11x6"], ["iron-trashdump-11x7", "WideChests_iron-chest-trashdump-11x7"], ["iron-trashdump-11x8", "WideChests_iron-chest-trashdump-11x8"], ["iron-trashdump-11x9", "WideChests_iron-chest-trashdump-11x9"], ["iron-trashdump-11x10", "WideChests_iron-chest-trashdump-11x10"], ["iron-trashdump-11x11", "WideChests_iron-chest-trashdump-11x11"], ["iron-trashdump-11x12", "WideChests_iron-chest-trashdump-11x12"], ["iron-trashdump-11x13", "WideChests_iron-chest-trashdump-11x13"], ["iron-trashdump-11x14", "WideChests_iron-chest-trashdump-11x14"], ["iron-trashdump-11x15", "WideChests_iron-chest-trashdump-11x15"], ["iron-trashdump-11x16", "WideChests_iron-chest-trashdump-11x16"], ["iron-trashdump-11x17", "WideChests_iron-chest-trashdump-11x17"], ["iron-trashdump-11x18", "WideChests_iron-chest-trashdump-11x18"], ["iron-trashdump-11x19", "WideChests_iron-chest-trashdump-11x19"], ["iron-trashdump-11x20", "WideChests_iron-chest-trashdump-11x20"], ["iron-trashdump-11x21", "WideChests_iron-chest-trashdump-11x21"], ["iron-trashdump-11x22", "WideChests_iron-chest-trashdump-11x22"], ["iron-trashdump-11x23", "WideChests_iron-chest-trashdump-11x23"], ["iron-trashdump-11x24", "WideChests_iron-chest-trashdump-11x24"], ["iron-trashdump-11x25", "WideChests_iron-chest-trashdump-11x25"], ["iron-trashdump-11x26", "WideChests_iron-chest-trashdump-11x26"], ["iron-trashdump-11x27", "WideChests_iron-chest-trashdump-11x27"], ["iron-trashdump-11x28", "WideChests_iron-chest-trashdump-11x28"], ["iron-trashdump-11x29", "WideChests_iron-chest-trashdump-11x29"], ["iron-trashdump-11x30", "WideChests_iron-chest-trashdump-11x30"], ["iron-trashdump-11x31", "WideChests_iron-chest-trashdump-11x31"], ["iron-trashdump-11x32", "WideChests_iron-chest-trashdump-11x32"], ["iron-trashdump-11x33", "WideChests_iron-chest-trashdump-11x33"], ["iron-trashdump-11x34", "WideChests_iron-chest-trashdump-11x34"], ["iron-trashdump-11x35", "WideChests_iron-chest-trashdump-11x35"], ["iron-trashdump-11x36", "WideChests_iron-chest-trashdump-11x36"], ["iron-trashdump-11x37", "WideChests_iron-chest-trashdump-11x37"], ["iron-trashdump-11x38", "WideChests_iron-chest-trashdump-11x38"], ["iron-trashdump-11x39", "WideChests_iron-chest-trashdump-11x39"], ["iron-trashdump-11x40", "WideChests_iron-chest-trashdump-11x40"], ["iron-trashdump-11x41", "WideChests_iron-chest-trashdump-11x41"], ["iron-trashdump-11x42", "WideChests_iron-chest-trashdump-11x42"], ["iron-trashdump-12x6", "WideChests_iron-chest-trashdump-12x6"], ["iron-trashdump-12x7", "WideChests_iron-chest-trashdump-12x7"], ["iron-trashdump-12x8", "WideChests_iron-chest-trashdump-12x8"], ["iron-trashdump-12x9", "WideChests_iron-chest-trashdump-12x9"], ["iron-trashdump-12x10", "WideChests_iron-chest-trashdump-12x10"], ["iron-trashdump-12x11", "WideChests_iron-chest-trashdump-12x11"], ["iron-trashdump-12x12", "WideChests_iron-chest-trashdump-12x12"], ["iron-trashdump-12x13", "WideChests_iron-chest-trashdump-12x13"], ["iron-trashdump-12x14", "WideChests_iron-chest-trashdump-12x14"], ["iron-trashdump-12x15", "WideChests_iron-chest-trashdump-12x15"], ["iron-trashdump-12x16", "WideChests_iron-chest-trashdump-12x16"], ["iron-trashdump-12x17", "WideChests_iron-chest-trashdump-12x17"], ["iron-trashdump-12x18", "WideChests_iron-chest-trashdump-12x18"], ["iron-trashdump-12x19", "WideChests_iron-chest-trashdump-12x19"], ["iron-trashdump-12x20", "WideChests_iron-chest-trashdump-12x20"], ["iron-trashdump-12x21", "WideChests_iron-chest-trashdump-12x21"], ["iron-trashdump-12x22", "WideChests_iron-chest-trashdump-12x22"], ["iron-trashdump-12x23", "WideChests_iron-chest-trashdump-12x23"], ["iron-trashdump-12x24", "WideChests_iron-chest-trashdump-12x24"], ["iron-trashdump-12x25", "WideChests_iron-chest-trashdump-12x25"], ["iron-trashdump-12x26", "WideChests_iron-chest-trashdump-12x26"], ["iron-trashdump-12x27", "WideChests_iron-chest-trashdump-12x27"], ["iron-trashdump-12x28", "WideChests_iron-chest-trashdump-12x28"], ["iron-trashdump-12x29", "WideChests_iron-chest-trashdump-12x29"], ["iron-trashdump-12x30", "WideChests_iron-chest-trashdump-12x30"], ["iron-trashdump-12x31", "WideChests_iron-chest-trashdump-12x31"], ["iron-trashdump-12x32", "WideChests_iron-chest-trashdump-12x32"], ["iron-trashdump-12x33", "WideChests_iron-chest-trashdump-12x33"], ["iron-trashdump-12x34", "WideChests_iron-chest-trashdump-12x34"], ["iron-trashdump-12x35", "WideChests_iron-chest-trashdump-12x35"], ["iron-trashdump-12x36", "WideChests_iron-chest-trashdump-12x36"], ["iron-trashdump-12x37", "WideChests_iron-chest-trashdump-12x37"], ["iron-trashdump-12x38", "WideChests_iron-chest-trashdump-12x38"], ["iron-trashdump-12x39", "WideChests_iron-chest-trashdump-12x39"], ["iron-trashdump-12x40", "WideChests_iron-chest-trashdump-12x40"], ["iron-trashdump-12x41", "WideChests_iron-chest-trashdump-12x41"], ["iron-trashdump-12x42", "WideChests_iron-chest-trashdump-12x42"], ["iron-trashdump-13x6", "WideChests_iron-chest-trashdump-13x6"], ["iron-trashdump-13x7", "WideChests_iron-chest-trashdump-13x7"], ["iron-trashdump-13x8", "WideChests_iron-chest-trashdump-13x8"], ["iron-trashdump-13x9", "WideChests_iron-chest-trashdump-13x9"], ["iron-trashdump-13x10", "WideChests_iron-chest-trashdump-13x10"], ["iron-trashdump-13x11", "WideChests_iron-chest-trashdump-13x11"], ["iron-trashdump-13x12", "WideChests_iron-chest-trashdump-13x12"], ["iron-trashdump-13x13", "WideChests_iron-chest-trashdump-13x13"], ["iron-trashdump-13x14", "WideChests_iron-chest-trashdump-13x14"], ["iron-trashdump-13x15", "WideChests_iron-chest-trashdump-13x15"], ["iron-trashdump-13x16", "WideChests_iron-chest-trashdump-13x16"], ["iron-trashdump-13x17", "WideChests_iron-chest-trashdump-13x17"], ["iron-trashdump-13x18", "WideChests_iron-chest-trashdump-13x18"], ["iron-trashdump-13x19", "WideChests_iron-chest-trashdump-13x19"], ["iron-trashdump-13x20", "WideChests_iron-chest-trashdump-13x20"], ["iron-trashdump-13x21", "WideChests_iron-chest-trashdump-13x21"], ["iron-trashdump-13x22", "WideChests_iron-chest-trashdump-13x22"], ["iron-trashdump-13x23", "WideChests_iron-chest-trashdump-13x23"], ["iron-trashdump-13x24", "WideChests_iron-chest-trashdump-13x24"], ["iron-trashdump-13x25", "WideChests_iron-chest-trashdump-13x25"], ["iron-trashdump-13x26", "WideChests_iron-chest-trashdump-13x26"], ["iron-trashdump-13x27", "WideChests_iron-chest-trashdump-13x27"], ["iron-trashdump-13x28", "WideChests_iron-chest-trashdump-13x28"], ["iron-trashdump-13x29", "WideChests_iron-chest-trashdump-13x29"], ["iron-trashdump-13x30", "WideChests_iron-chest-trashdump-13x30"], ["iron-trashdump-13x31", "WideChests_iron-chest-trashdump-13x31"], ["iron-trashdump-13x32", "WideChests_iron-chest-trashdump-13x32"], ["iron-trashdump-13x33", "WideChests_iron-chest-trashdump-13x33"], ["iron-trashdump-13x34", "WideChests_iron-chest-trashdump-13x34"], ["iron-trashdump-13x35", "WideChests_iron-chest-trashdump-13x35"], ["iron-trashdump-13x36", "WideChests_iron-chest-trashdump-13x36"], ["iron-trashdump-13x37", "WideChests_iron-chest-trashdump-13x37"], ["iron-trashdump-13x38", "WideChests_iron-chest-trashdump-13x38"], ["iron-trashdump-13x39", "WideChests_iron-chest-trashdump-13x39"], ["iron-trashdump-13x40", "WideChests_iron-chest-trashdump-13x40"], ["iron-trashdump-13x41", "WideChests_iron-chest-trashdump-13x41"], ["iron-trashdump-13x42", "WideChests_iron-chest-trashdump-13x42"], ["iron-trashdump-14x6", "WideChests_iron-chest-trashdump-14x6"], ["iron-trashdump-14x7", "WideChests_iron-chest-trashdump-14x7"], ["iron-trashdump-14x8", "WideChests_iron-chest-trashdump-14x8"], ["iron-trashdump-14x9", "WideChests_iron-chest-trashdump-14x9"], ["iron-trashdump-14x10", "WideChests_iron-chest-trashdump-14x10"], ["iron-trashdump-14x11", "WideChests_iron-chest-trashdump-14x11"], ["iron-trashdump-14x12", "WideChests_iron-chest-trashdump-14x12"], ["iron-trashdump-14x13", "WideChests_iron-chest-trashdump-14x13"], ["iron-trashdump-14x14", "WideChests_iron-chest-trashdump-14x14"], ["iron-trashdump-14x15", "WideChests_iron-chest-trashdump-14x15"], ["iron-trashdump-14x16", "WideChests_iron-chest-trashdump-14x16"], ["iron-trashdump-14x17", "WideChests_iron-chest-trashdump-14x17"], ["iron-trashdump-14x18", "WideChests_iron-chest-trashdump-14x18"], ["iron-trashdump-14x19", "WideChests_iron-chest-trashdump-14x19"], ["iron-trashdump-14x20", "WideChests_iron-chest-trashdump-14x20"], ["iron-trashdump-14x21", "WideChests_iron-chest-trashdump-14x21"], ["iron-trashdump-14x22", "WideChests_iron-chest-trashdump-14x22"], ["iron-trashdump-14x23", "WideChests_iron-chest-trashdump-14x23"], ["iron-trashdump-14x24", "WideChests_iron-chest-trashdump-14x24"], ["iron-trashdump-14x25", "WideChests_iron-chest-trashdump-14x25"], ["iron-trashdump-14x26", "WideChests_iron-chest-trashdump-14x26"], ["iron-trashdump-14x27", "WideChests_iron-chest-trashdump-14x27"], ["iron-trashdump-14x28", "WideChests_iron-chest-trashdump-14x28"], ["iron-trashdump-14x29", "WideChests_iron-chest-trashdump-14x29"], ["iron-trashdump-14x30", "WideChests_iron-chest-trashdump-14x30"], ["iron-trashdump-14x31", "WideChests_iron-chest-trashdump-14x31"], ["iron-trashdump-14x32", "WideChests_iron-chest-trashdump-14x32"], ["iron-trashdump-14x33", "WideChests_iron-chest-trashdump-14x33"], ["iron-trashdump-14x34", "WideChests_iron-chest-trashdump-14x34"], ["iron-trashdump-14x35", "WideChests_iron-chest-trashdump-14x35"], ["iron-trashdump-14x36", "WideChests_iron-chest-trashdump-14x36"], ["iron-trashdump-14x37", "WideChests_iron-chest-trashdump-14x37"], ["iron-trashdump-14x38", "WideChests_iron-chest-trashdump-14x38"], ["iron-trashdump-14x39", "WideChests_iron-chest-trashdump-14x39"], ["iron-trashdump-14x40", "WideChests_iron-chest-trashdump-14x40"], ["iron-trashdump-14x41", "WideChests_iron-chest-trashdump-14x41"], ["iron-trashdump-14x42", "WideChests_iron-chest-trashdump-14x42"], ["iron-trashdump-15x6", "WideChests_iron-chest-trashdump-15x6"], ["iron-trashdump-15x7", "WideChests_iron-chest-trashdump-15x7"], ["iron-trashdump-15x8", "WideChests_iron-chest-trashdump-15x8"], ["iron-trashdump-15x9", "WideChests_iron-chest-trashdump-15x9"], ["iron-trashdump-15x10", "WideChests_iron-chest-trashdump-15x10"], ["iron-trashdump-15x11", "WideChests_iron-chest-trashdump-15x11"], ["iron-trashdump-15x12", "WideChests_iron-chest-trashdump-15x12"], ["iron-trashdump-15x13", "WideChests_iron-chest-trashdump-15x13"], ["iron-trashdump-15x14", "WideChests_iron-chest-trashdump-15x14"], ["iron-trashdump-15x15", "WideChests_iron-chest-trashdump-15x15"], ["iron-trashdump-15x16", "WideChests_iron-chest-trashdump-15x16"], ["iron-trashdump-15x17", "WideChests_iron-chest-trashdump-15x17"], ["iron-trashdump-15x18", "WideChests_iron-chest-trashdump-15x18"], ["iron-trashdump-15x19", "WideChests_iron-chest-trashdump-15x19"], ["iron-trashdump-15x20", "WideChests_iron-chest-trashdump-15x20"], ["iron-trashdump-15x21", "WideChests_iron-chest-trashdump-15x21"], ["iron-trashdump-15x22", "WideChests_iron-chest-trashdump-15x22"], ["iron-trashdump-15x23", "WideChests_iron-chest-trashdump-15x23"], ["iron-trashdump-15x24", "WideChests_iron-chest-trashdump-15x24"], ["iron-trashdump-15x25", "WideChests_iron-chest-trashdump-15x25"], ["iron-trashdump-15x26", "WideChests_iron-chest-trashdump-15x26"], ["iron-trashdump-15x27", "WideChests_iron-chest-trashdump-15x27"], ["iron-trashdump-15x28", "WideChests_iron-chest-trashdump-15x28"], ["iron-trashdump-15x29", "WideChests_iron-chest-trashdump-15x29"], ["iron-trashdump-15x30", "WideChests_iron-chest-trashdump-15x30"], ["iron-trashdump-15x31", "WideChests_iron-chest-trashdump-15x31"], ["iron-trashdump-15x32", "WideChests_iron-chest-trashdump-15x32"], ["iron-trashdump-15x33", "WideChests_iron-chest-trashdump-15x33"], ["iron-trashdump-15x34", "WideChests_iron-chest-trashdump-15x34"], ["iron-trashdump-15x35", "WideChests_iron-chest-trashdump-15x35"], ["iron-trashdump-15x36", "WideChests_iron-chest-trashdump-15x36"], ["iron-trashdump-15x37", "WideChests_iron-chest-trashdump-15x37"], ["iron-trashdump-15x38", "WideChests_iron-chest-trashdump-15x38"], ["iron-trashdump-15x39", "WideChests_iron-chest-trashdump-15x39"], ["iron-trashdump-15x40", "WideChests_iron-chest-trashdump-15x40"], ["iron-trashdump-15x41", "WideChests_iron-chest-trashdump-15x41"], ["iron-trashdump-15x42", "WideChests_iron-chest-trashdump-15x42"], ["iron-trashdump-16x6", "WideChests_iron-chest-trashdump-16x6"], ["iron-trashdump-16x7", "WideChests_iron-chest-trashdump-16x7"], ["iron-trashdump-16x8", "WideChests_iron-chest-trashdump-16x8"], ["iron-trashdump-16x9", "WideChests_iron-chest-trashdump-16x9"], ["iron-trashdump-16x10", "WideChests_iron-chest-trashdump-16x10"], ["iron-trashdump-16x11", "WideChests_iron-chest-trashdump-16x11"], ["iron-trashdump-16x12", "WideChests_iron-chest-trashdump-16x12"], ["iron-trashdump-16x13", "WideChests_iron-chest-trashdump-16x13"], ["iron-trashdump-16x14", "WideChests_iron-chest-trashdump-16x14"], ["iron-trashdump-16x15", "WideChests_iron-chest-trashdump-16x15"], ["iron-trashdump-16x16", "WideChests_iron-chest-trashdump-16x16"], ["iron-trashdump-16x17", "WideChests_iron-chest-trashdump-16x17"], ["iron-trashdump-16x18", "WideChests_iron-chest-trashdump-16x18"], ["iron-trashdump-16x19", "WideChests_iron-chest-trashdump-16x19"], ["iron-trashdump-16x20", "WideChests_iron-chest-trashdump-16x20"], ["iron-trashdump-16x21", "WideChests_iron-chest-trashdump-16x21"], ["iron-trashdump-16x22", "WideChests_iron-chest-trashdump-16x22"], ["iron-trashdump-16x23", "WideChests_iron-chest-trashdump-16x23"], ["iron-trashdump-16x24", "WideChests_iron-chest-trashdump-16x24"], ["iron-trashdump-16x25", "WideChests_iron-chest-trashdump-16x25"], ["iron-trashdump-16x26", "WideChests_iron-chest-trashdump-16x26"], ["iron-trashdump-16x27", "WideChests_iron-chest-trashdump-16x27"], ["iron-trashdump-16x28", "WideChests_iron-chest-trashdump-16x28"], ["iron-trashdump-16x29", "WideChests_iron-chest-trashdump-16x29"], ["iron-trashdump-16x30", "WideChests_iron-chest-trashdump-16x30"], ["iron-trashdump-16x31", "WideChests_iron-chest-trashdump-16x31"], ["iron-trashdump-16x32", "WideChests_iron-chest-trashdump-16x32"], ["iron-trashdump-16x33", "WideChests_iron-chest-trashdump-16x33"], ["iron-trashdump-16x34", "WideChests_iron-chest-trashdump-16x34"], ["iron-trashdump-16x35", "WideChests_iron-chest-trashdump-16x35"], ["iron-trashdump-16x36", "WideChests_iron-chest-trashdump-16x36"], ["iron-trashdump-16x37", "WideChests_iron-chest-trashdump-16x37"], ["iron-trashdump-16x38", "WideChests_iron-chest-trashdump-16x38"], ["iron-trashdump-16x39", "WideChests_iron-chest-trashdump-16x39"], ["iron-trashdump-16x40", "WideChests_iron-chest-trashdump-16x40"], ["iron-trashdump-16x41", "WideChests_iron-chest-trashdump-16x41"], ["iron-trashdump-16x42", "WideChests_iron-chest-trashdump-16x42"], ["iron-trashdump-17x6", "WideChests_iron-chest-trashdump-17x6"], ["iron-trashdump-17x7", "WideChests_iron-chest-trashdump-17x7"], ["iron-trashdump-17x8", "WideChests_iron-chest-trashdump-17x8"], ["iron-trashdump-17x9", "WideChests_iron-chest-trashdump-17x9"], ["iron-trashdump-17x10", "WideChests_iron-chest-trashdump-17x10"], ["iron-trashdump-17x11", "WideChests_iron-chest-trashdump-17x11"], ["iron-trashdump-17x12", "WideChests_iron-chest-trashdump-17x12"], ["iron-trashdump-17x13", "WideChests_iron-chest-trashdump-17x13"], ["iron-trashdump-17x14", "WideChests_iron-chest-trashdump-17x14"], ["iron-trashdump-17x15", "WideChests_iron-chest-trashdump-17x15"], ["iron-trashdump-17x16", "WideChests_iron-chest-trashdump-17x16"], ["iron-trashdump-17x17", "WideChests_iron-chest-trashdump-17x17"], ["iron-trashdump-17x18", "WideChests_iron-chest-trashdump-17x18"], ["iron-trashdump-17x19", "WideChests_iron-chest-trashdump-17x19"], ["iron-trashdump-17x20", "WideChests_iron-chest-trashdump-17x20"], ["iron-trashdump-17x21", "WideChests_iron-chest-trashdump-17x21"], ["iron-trashdump-17x22", "WideChests_iron-chest-trashdump-17x22"], ["iron-trashdump-17x23", "WideChests_iron-chest-trashdump-17x23"], ["iron-trashdump-17x24", "WideChests_iron-chest-trashdump-17x24"], ["iron-trashdump-17x25", "WideChests_iron-chest-trashdump-17x25"], ["iron-trashdump-17x26", "WideChests_iron-chest-trashdump-17x26"], ["iron-trashdump-17x27", "WideChests_iron-chest-trashdump-17x27"], ["iron-trashdump-17x28", "WideChests_iron-chest-trashdump-17x28"], ["iron-trashdump-17x29", "WideChests_iron-chest-trashdump-17x29"], ["iron-trashdump-17x30", "WideChests_iron-chest-trashdump-17x30"], ["iron-trashdump-17x31", "WideChests_iron-chest-trashdump-17x31"], ["iron-trashdump-17x32", "WideChests_iron-chest-trashdump-17x32"], ["iron-trashdump-17x33", "WideChests_iron-chest-trashdump-17x33"], ["iron-trashdump-17x34", "WideChests_iron-chest-trashdump-17x34"], ["iron-trashdump-17x35", "WideChests_iron-chest-trashdump-17x35"], ["iron-trashdump-17x36", "WideChests_iron-chest-trashdump-17x36"], ["iron-trashdump-17x37", "WideChests_iron-chest-trashdump-17x37"], ["iron-trashdump-17x38", "WideChests_iron-chest-trashdump-17x38"], ["iron-trashdump-17x39", "WideChests_iron-chest-trashdump-17x39"], ["iron-trashdump-17x40", "WideChests_iron-chest-trashdump-17x40"], ["iron-trashdump-17x41", "WideChests_iron-chest-trashdump-17x41"], ["iron-trashdump-17x42", "WideChests_iron-chest-trashdump-17x42"], ["iron-trashdump-18x6", "WideChests_iron-chest-trashdump-18x6"], ["iron-trashdump-18x7", "WideChests_iron-chest-trashdump-18x7"], ["iron-trashdump-18x8", "WideChests_iron-chest-trashdump-18x8"], ["iron-trashdump-18x9", "WideChests_iron-chest-trashdump-18x9"], ["iron-trashdump-18x10", "WideChests_iron-chest-trashdump-18x10"], ["iron-trashdump-18x11", "WideChests_iron-chest-trashdump-18x11"], ["iron-trashdump-18x12", "WideChests_iron-chest-trashdump-18x12"], ["iron-trashdump-18x13", "WideChests_iron-chest-trashdump-18x13"], ["iron-trashdump-18x14", "WideChests_iron-chest-trashdump-18x14"], ["iron-trashdump-18x15", "WideChests_iron-chest-trashdump-18x15"], ["iron-trashdump-18x16", "WideChests_iron-chest-trashdump-18x16"], ["iron-trashdump-18x17", "WideChests_iron-chest-trashdump-18x17"], ["iron-trashdump-18x18", "WideChests_iron-chest-trashdump-18x18"], ["iron-trashdump-18x19", "WideChests_iron-chest-trashdump-18x19"], ["iron-trashdump-18x20", "WideChests_iron-chest-trashdump-18x20"], ["iron-trashdump-18x21", "WideChests_iron-chest-trashdump-18x21"], ["iron-trashdump-18x22", "WideChests_iron-chest-trashdump-18x22"], ["iron-trashdump-18x23", "WideChests_iron-chest-trashdump-18x23"], ["iron-trashdump-18x24", "WideChests_iron-chest-trashdump-18x24"], ["iron-trashdump-18x25", "WideChests_iron-chest-trashdump-18x25"], ["iron-trashdump-18x26", "WideChests_iron-chest-trashdump-18x26"], ["iron-trashdump-18x27", "WideChests_iron-chest-trashdump-18x27"], ["iron-trashdump-18x28", "WideChests_iron-chest-trashdump-18x28"], ["iron-trashdump-18x29", "WideChests_iron-chest-trashdump-18x29"], ["iron-trashdump-18x30", "WideChests_iron-chest-trashdump-18x30"], ["iron-trashdump-18x31", "WideChests_iron-chest-trashdump-18x31"], ["iron-trashdump-18x32", "WideChests_iron-chest-trashdump-18x32"], ["iron-trashdump-18x33", "WideChests_iron-chest-trashdump-18x33"], ["iron-trashdump-18x34", "WideChests_iron-chest-trashdump-18x34"], ["iron-trashdump-18x35", "WideChests_iron-chest-trashdump-18x35"], ["iron-trashdump-18x36", "WideChests_iron-chest-trashdump-18x36"], ["iron-trashdump-18x37", "WideChests_iron-chest-trashdump-18x37"], ["iron-trashdump-18x38", "WideChests_iron-chest-trashdump-18x38"], ["iron-trashdump-18x39", "WideChests_iron-chest-trashdump-18x39"], ["iron-trashdump-18x40", "WideChests_iron-chest-trashdump-18x40"], ["iron-trashdump-18x41", "WideChests_iron-chest-trashdump-18x41"], ["iron-trashdump-18x42", "WideChests_iron-chest-trashdump-18x42"], ["iron-trashdump-19x6", "WideChests_iron-chest-trashdump-19x6"], ["iron-trashdump-19x7", "WideChests_iron-chest-trashdump-19x7"], ["iron-trashdump-19x8", "WideChests_iron-chest-trashdump-19x8"], ["iron-trashdump-19x9", "WideChests_iron-chest-trashdump-19x9"], ["iron-trashdump-19x10", "WideChests_iron-chest-trashdump-19x10"], ["iron-trashdump-19x11", "WideChests_iron-chest-trashdump-19x11"], ["iron-trashdump-19x12", "WideChests_iron-chest-trashdump-19x12"], ["iron-trashdump-19x13", "WideChests_iron-chest-trashdump-19x13"], ["iron-trashdump-19x14", "WideChests_iron-chest-trashdump-19x14"], ["iron-trashdump-19x15", "WideChests_iron-chest-trashdump-19x15"], ["iron-trashdump-19x16", "WideChests_iron-chest-trashdump-19x16"], ["iron-trashdump-19x17", "WideChests_iron-chest-trashdump-19x17"], ["iron-trashdump-19x18", "WideChests_iron-chest-trashdump-19x18"], ["iron-trashdump-19x19", "WideChests_iron-chest-trashdump-19x19"], ["iron-trashdump-19x20", "WideChests_iron-chest-trashdump-19x20"], ["iron-trashdump-19x21", "WideChests_iron-chest-trashdump-19x21"], ["iron-trashdump-19x22", "WideChests_iron-chest-trashdump-19x22"], ["iron-trashdump-19x23", "WideChests_iron-chest-trashdump-19x23"], ["iron-trashdump-19x24", "WideChests_iron-chest-trashdump-19x24"], ["iron-trashdump-19x25", "WideChests_iron-chest-trashdump-19x25"], ["iron-trashdump-19x26", "WideChests_iron-chest-trashdump-19x26"], ["iron-trashdump-19x27", "WideChests_iron-chest-trashdump-19x27"], ["iron-trashdump-19x28", "WideChests_iron-chest-trashdump-19x28"], ["iron-trashdump-19x29", "WideChests_iron-chest-trashdump-19x29"], ["iron-trashdump-19x30", "WideChests_iron-chest-trashdump-19x30"], ["iron-trashdump-19x31", "WideChests_iron-chest-trashdump-19x31"], ["iron-trashdump-19x32", "WideChests_iron-chest-trashdump-19x32"], ["iron-trashdump-19x33", "WideChests_iron-chest-trashdump-19x33"], ["iron-trashdump-19x34", "WideChests_iron-chest-trashdump-19x34"], ["iron-trashdump-19x35", "WideChests_iron-chest-trashdump-19x35"], ["iron-trashdump-19x36", "WideChests_iron-chest-trashdump-19x36"], ["iron-trashdump-19x37", "WideChests_iron-chest-trashdump-19x37"], ["iron-trashdump-19x38", "WideChests_iron-chest-trashdump-19x38"], ["iron-trashdump-19x39", "WideChests_iron-chest-trashdump-19x39"], ["iron-trashdump-19x40", "WideChests_iron-chest-trashdump-19x40"], ["iron-trashdump-19x41", "WideChests_iron-chest-trashdump-19x41"], ["iron-trashdump-19x42", "WideChests_iron-chest-trashdump-19x42"], ["iron-trashdump-20x6", "WideChests_iron-chest-trashdump-20x6"], ["iron-trashdump-20x7", "WideChests_iron-chest-trashdump-20x7"], ["iron-trashdump-20x8", "WideChests_iron-chest-trashdump-20x8"], ["iron-trashdump-20x9", "WideChests_iron-chest-trashdump-20x9"], ["iron-trashdump-20x10", "WideChests_iron-chest-trashdump-20x10"], ["iron-trashdump-20x11", "WideChests_iron-chest-trashdump-20x11"], ["iron-trashdump-20x12", "WideChests_iron-chest-trashdump-20x12"], ["iron-trashdump-20x13", "WideChests_iron-chest-trashdump-20x13"], ["iron-trashdump-20x14", "WideChests_iron-chest-trashdump-20x14"], ["iron-trashdump-20x15", "WideChests_iron-chest-trashdump-20x15"], ["iron-trashdump-20x16", "WideChests_iron-chest-trashdump-20x16"], ["iron-trashdump-20x17", "WideChests_iron-chest-trashdump-20x17"], ["iron-trashdump-20x18", "WideChests_iron-chest-trashdump-20x18"], ["iron-trashdump-20x19", "WideChests_iron-chest-trashdump-20x19"], ["iron-trashdump-20x20", "WideChests_iron-chest-trashdump-20x20"], ["iron-trashdump-20x21", "WideChests_iron-chest-trashdump-20x21"], ["iron-trashdump-20x22", "WideChests_iron-chest-trashdump-20x22"], ["iron-trashdump-20x23", "WideChests_iron-chest-trashdump-20x23"], ["iron-trashdump-20x24", "WideChests_iron-chest-trashdump-20x24"], ["iron-trashdump-20x25", "WideChests_iron-chest-trashdump-20x25"], ["iron-trashdump-20x26", "WideChests_iron-chest-trashdump-20x26"], ["iron-trashdump-20x27", "WideChests_iron-chest-trashdump-20x27"], ["iron-trashdump-20x28", "WideChests_iron-chest-trashdump-20x28"], ["iron-trashdump-20x29", "WideChests_iron-chest-trashdump-20x29"], ["iron-trashdump-20x30", "WideChests_iron-chest-trashdump-20x30"], ["iron-trashdump-20x31", "WideChests_iron-chest-trashdump-20x31"], ["iron-trashdump-20x32", "WideChests_iron-chest-trashdump-20x32"], ["iron-trashdump-20x33", "WideChests_iron-chest-trashdump-20x33"], ["iron-trashdump-20x34", "WideChests_iron-chest-trashdump-20x34"], ["iron-trashdump-20x35", "WideChests_iron-chest-trashdump-20x35"], ["iron-trashdump-20x36", "WideChests_iron-chest-trashdump-20x36"], ["iron-trashdump-20x37", "WideChests_iron-chest-trashdump-20x37"], ["iron-trashdump-20x38", "WideChests_iron-chest-trashdump-20x38"], ["iron-trashdump-20x39", "WideChests_iron-chest-trashdump-20x39"], ["iron-trashdump-20x40", "WideChests_iron-chest-trashdump-20x40"], ["iron-trashdump-20x41", "WideChests_iron-chest-trashdump-20x41"], ["iron-trashdump-20x42", "WideChests_iron-chest-trashdump-20x42"], ["iron-trashdump-21x6", "WideChests_iron-chest-trashdump-21x6"], ["iron-trashdump-21x7", "WideChests_iron-chest-trashdump-21x7"], ["iron-trashdump-21x8", "WideChests_iron-chest-trashdump-21x8"], ["iron-trashdump-21x9", "WideChests_iron-chest-trashdump-21x9"], ["iron-trashdump-21x10", "WideChests_iron-chest-trashdump-21x10"], ["iron-trashdump-21x11", "WideChests_iron-chest-trashdump-21x11"], ["iron-trashdump-21x12", "WideChests_iron-chest-trashdump-21x12"], ["iron-trashdump-21x13", "WideChests_iron-chest-trashdump-21x13"], ["iron-trashdump-21x14", "WideChests_iron-chest-trashdump-21x14"], ["iron-trashdump-21x15", "WideChests_iron-chest-trashdump-21x15"], ["iron-trashdump-21x16", "WideChests_iron-chest-trashdump-21x16"], ["iron-trashdump-21x17", "WideChests_iron-chest-trashdump-21x17"], ["iron-trashdump-21x18", "WideChests_iron-chest-trashdump-21x18"], ["iron-trashdump-21x19", "WideChests_iron-chest-trashdump-21x19"], ["iron-trashdump-21x20", "WideChests_iron-chest-trashdump-21x20"], ["iron-trashdump-21x21", "WideChests_iron-chest-trashdump-21x21"], ["iron-trashdump-21x22", "WideChests_iron-chest-trashdump-21x22"], ["iron-trashdump-21x23", "WideChests_iron-chest-trashdump-21x23"], ["iron-trashdump-21x24", "WideChests_iron-chest-trashdump-21x24"], ["iron-trashdump-21x25", "WideChests_iron-chest-trashdump-21x25"], ["iron-trashdump-21x26", "WideChests_iron-chest-trashdump-21x26"], ["iron-trashdump-21x27", "WideChests_iron-chest-trashdump-21x27"], ["iron-trashdump-21x28", "WideChests_iron-chest-trashdump-21x28"], ["iron-trashdump-21x29", "WideChests_iron-chest-trashdump-21x29"], ["iron-trashdump-21x30", "WideChests_iron-chest-trashdump-21x30"], ["iron-trashdump-21x31", "WideChests_iron-chest-trashdump-21x31"], ["iron-trashdump-21x32", "WideChests_iron-chest-trashdump-21x32"], ["iron-trashdump-21x33", "WideChests_iron-chest-trashdump-21x33"], ["iron-trashdump-21x34", "WideChests_iron-chest-trashdump-21x34"], ["iron-trashdump-21x35", "WideChests_iron-chest-trashdump-21x35"], ["iron-trashdump-21x36", "WideChests_iron-chest-trashdump-21x36"], ["iron-trashdump-21x37", "WideChests_iron-chest-trashdump-21x37"], ["iron-trashdump-21x38", "WideChests_iron-chest-trashdump-21x38"], ["iron-trashdump-21x39", "WideChests_iron-chest-trashdump-21x39"], ["iron-trashdump-21x40", "WideChests_iron-chest-trashdump-21x40"], ["iron-trashdump-21x41", "WideChests_iron-chest-trashdump-21x41"], ["iron-trashdump-21x42", "WideChests_iron-chest-trashdump-21x42"], ["iron-trashdump-22x6", "WideChests_iron-chest-trashdump-22x6"], ["iron-trashdump-22x7", "WideChests_iron-chest-trashdump-22x7"], ["iron-trashdump-22x8", "WideChests_iron-chest-trashdump-22x8"], ["iron-trashdump-22x9", "WideChests_iron-chest-trashdump-22x9"], ["iron-trashdump-22x10", "WideChests_iron-chest-trashdump-22x10"], ["iron-trashdump-22x11", "WideChests_iron-chest-trashdump-22x11"], ["iron-trashdump-22x12", "WideChests_iron-chest-trashdump-22x12"], ["iron-trashdump-22x13", "WideChests_iron-chest-trashdump-22x13"], ["iron-trashdump-22x14", "WideChests_iron-chest-trashdump-22x14"], ["iron-trashdump-22x15", "WideChests_iron-chest-trashdump-22x15"], ["iron-trashdump-22x16", "WideChests_iron-chest-trashdump-22x16"], ["iron-trashdump-22x17", "WideChests_iron-chest-trashdump-22x17"], ["iron-trashdump-22x18", "WideChests_iron-chest-trashdump-22x18"], ["iron-trashdump-22x19", "WideChests_iron-chest-trashdump-22x19"], ["iron-trashdump-22x20", "WideChests_iron-chest-trashdump-22x20"], ["iron-trashdump-22x21", "WideChests_iron-chest-trashdump-22x21"], ["iron-trashdump-22x22", "WideChests_iron-chest-trashdump-22x22"], ["iron-trashdump-22x23", "WideChests_iron-chest-trashdump-22x23"], ["iron-trashdump-22x24", "WideChests_iron-chest-trashdump-22x24"], ["iron-trashdump-22x25", "WideChests_iron-chest-trashdump-22x25"], ["iron-trashdump-22x26", "WideChests_iron-chest-trashdump-22x26"], ["iron-trashdump-22x27", "WideChests_iron-chest-trashdump-22x27"], ["iron-trashdump-22x28", "WideChests_iron-chest-trashdump-22x28"], ["iron-trashdump-22x29", "WideChests_iron-chest-trashdump-22x29"], ["iron-trashdump-22x30", "WideChests_iron-chest-trashdump-22x30"], ["iron-trashdump-22x31", "WideChests_iron-chest-trashdump-22x31"], ["iron-trashdump-22x32", "WideChests_iron-chest-trashdump-22x32"], ["iron-trashdump-22x33", "WideChests_iron-chest-trashdump-22x33"], ["iron-trashdump-22x34", "WideChests_iron-chest-trashdump-22x34"], ["iron-trashdump-22x35", "WideChests_iron-chest-trashdump-22x35"], ["iron-trashdump-22x36", "WideChests_iron-chest-trashdump-22x36"], ["iron-trashdump-22x37", "WideChests_iron-chest-trashdump-22x37"], ["iron-trashdump-22x38", "WideChests_iron-chest-trashdump-22x38"], ["iron-trashdump-22x39", "WideChests_iron-chest-trashdump-22x39"], ["iron-trashdump-22x40", "WideChests_iron-chest-trashdump-22x40"], ["iron-trashdump-22x41", "WideChests_iron-chest-trashdump-22x41"], ["iron-trashdump-22x42", "WideChests_iron-chest-trashdump-22x42"], ["iron-trashdump-23x6", "WideChests_iron-chest-trashdump-23x6"], ["iron-trashdump-23x7", "WideChests_iron-chest-trashdump-23x7"], ["iron-trashdump-23x8", "WideChests_iron-chest-trashdump-23x8"], ["iron-trashdump-23x9", "WideChests_iron-chest-trashdump-23x9"], ["iron-trashdump-23x10", "WideChests_iron-chest-trashdump-23x10"], ["iron-trashdump-23x11", "WideChests_iron-chest-trashdump-23x11"], ["iron-trashdump-23x12", "WideChests_iron-chest-trashdump-23x12"], ["iron-trashdump-23x13", "WideChests_iron-chest-trashdump-23x13"], ["iron-trashdump-23x14", "WideChests_iron-chest-trashdump-23x14"], ["iron-trashdump-23x15", "WideChests_iron-chest-trashdump-23x15"], ["iron-trashdump-23x16", "WideChests_iron-chest-trashdump-23x16"], ["iron-trashdump-23x17", "WideChests_iron-chest-trashdump-23x17"], ["iron-trashdump-23x18", "WideChests_iron-chest-trashdump-23x18"], ["iron-trashdump-23x19", "WideChests_iron-chest-trashdump-23x19"], ["iron-trashdump-23x20", "WideChests_iron-chest-trashdump-23x20"], ["iron-trashdump-23x21", "WideChests_iron-chest-trashdump-23x21"], ["iron-trashdump-23x22", "WideChests_iron-chest-trashdump-23x22"], ["iron-trashdump-23x23", "WideChests_iron-chest-trashdump-23x23"], ["iron-trashdump-23x24", "WideChests_iron-chest-trashdump-23x24"], ["iron-trashdump-23x25", "WideChests_iron-chest-trashdump-23x25"], ["iron-trashdump-23x26", "WideChests_iron-chest-trashdump-23x26"], ["iron-trashdump-23x27", "WideChests_iron-chest-trashdump-23x27"], ["iron-trashdump-23x28", "WideChests_iron-chest-trashdump-23x28"], ["iron-trashdump-23x29", "WideChests_iron-chest-trashdump-23x29"], ["iron-trashdump-23x30", "WideChests_iron-chest-trashdump-23x30"], ["iron-trashdump-23x31", "WideChests_iron-chest-trashdump-23x31"], ["iron-trashdump-23x32", "WideChests_iron-chest-trashdump-23x32"], ["iron-trashdump-23x33", "WideChests_iron-chest-trashdump-23x33"], ["iron-trashdump-23x34", "WideChests_iron-chest-trashdump-23x34"], ["iron-trashdump-23x35", "WideChests_iron-chest-trashdump-23x35"], ["iron-trashdump-23x36", "WideChests_iron-chest-trashdump-23x36"], ["iron-trashdump-23x37", "WideChests_iron-chest-trashdump-23x37"], ["iron-trashdump-23x38", "WideChests_iron-chest-trashdump-23x38"], ["iron-trashdump-23x39", "WideChests_iron-chest-trashdump-23x39"], ["iron-trashdump-23x40", "WideChests_iron-chest-trashdump-23x40"], ["iron-trashdump-23x41", "WideChests_iron-chest-trashdump-23x41"], ["iron-trashdump-23x42", "WideChests_iron-chest-trashdump-23x42"], ["iron-trashdump-24x6", "WideChests_iron-chest-trashdump-24x6"], ["iron-trashdump-24x7", "WideChests_iron-chest-trashdump-24x7"], ["iron-trashdump-24x8", "WideChests_iron-chest-trashdump-24x8"], ["iron-trashdump-24x9", "WideChests_iron-chest-trashdump-24x9"], ["iron-trashdump-24x10", "WideChests_iron-chest-trashdump-24x10"], ["iron-trashdump-24x11", "WideChests_iron-chest-trashdump-24x11"], ["iron-trashdump-24x12", "WideChests_iron-chest-trashdump-24x12"], ["iron-trashdump-24x13", "WideChests_iron-chest-trashdump-24x13"], ["iron-trashdump-24x14", "WideChests_iron-chest-trashdump-24x14"], ["iron-trashdump-24x15", "WideChests_iron-chest-trashdump-24x15"], ["iron-trashdump-24x16", "WideChests_iron-chest-trashdump-24x16"], ["iron-trashdump-24x17", "WideChests_iron-chest-trashdump-24x17"], ["iron-trashdump-24x18", "WideChests_iron-chest-trashdump-24x18"], ["iron-trashdump-24x19", "WideChests_iron-chest-trashdump-24x19"], ["iron-trashdump-24x20", "WideChests_iron-chest-trashdump-24x20"], ["iron-trashdump-24x21", "WideChests_iron-chest-trashdump-24x21"], ["iron-trashdump-24x22", "WideChests_iron-chest-trashdump-24x22"], ["iron-trashdump-24x23", "WideChests_iron-chest-trashdump-24x23"], ["iron-trashdump-24x24", "WideChests_iron-chest-trashdump-24x24"], ["iron-trashdump-24x25", "WideChests_iron-chest-trashdump-24x25"], ["iron-trashdump-24x26", "WideChests_iron-chest-trashdump-24x26"], ["iron-trashdump-24x27", "WideChests_iron-chest-trashdump-24x27"], ["iron-trashdump-24x28", "WideChests_iron-chest-trashdump-24x28"], ["iron-trashdump-24x29", "WideChests_iron-chest-trashdump-24x29"], ["iron-trashdump-24x30", "WideChests_iron-chest-trashdump-24x30"], ["iron-trashdump-24x31", "WideChests_iron-chest-trashdump-24x31"], ["iron-trashdump-24x32", "WideChests_iron-chest-trashdump-24x32"], ["iron-trashdump-24x33", "WideChests_iron-chest-trashdump-24x33"], ["iron-trashdump-24x34", "WideChests_iron-chest-trashdump-24x34"], ["iron-trashdump-24x35", "WideChests_iron-chest-trashdump-24x35"], ["iron-trashdump-24x36", "WideChests_iron-chest-trashdump-24x36"], ["iron-trashdump-24x37", "WideChests_iron-chest-trashdump-24x37"], ["iron-trashdump-24x38", "WideChests_iron-chest-trashdump-24x38"], ["iron-trashdump-24x39", "WideChests_iron-chest-trashdump-24x39"], ["iron-trashdump-24x40", "WideChests_iron-chest-trashdump-24x40"], ["iron-trashdump-24x41", "WideChests_iron-chest-trashdump-24x41"], ["iron-trashdump-24x42", "WideChests_iron-chest-trashdump-24x42"], ["iron-trashdump-25x6", "WideChests_iron-chest-trashdump-25x6"], ["iron-trashdump-25x7", "WideChests_iron-chest-trashdump-25x7"], ["iron-trashdump-25x8", "WideChests_iron-chest-trashdump-25x8"], ["iron-trashdump-25x9", "WideChests_iron-chest-trashdump-25x9"], ["iron-trashdump-25x10", "WideChests_iron-chest-trashdump-25x10"], ["iron-trashdump-25x11", "WideChests_iron-chest-trashdump-25x11"], ["iron-trashdump-25x12", "WideChests_iron-chest-trashdump-25x12"], ["iron-trashdump-25x13", "WideChests_iron-chest-trashdump-25x13"], ["iron-trashdump-25x14", "WideChests_iron-chest-trashdump-25x14"], ["iron-trashdump-25x15", "WideChests_iron-chest-trashdump-25x15"], ["iron-trashdump-25x16", "WideChests_iron-chest-trashdump-25x16"], ["iron-trashdump-25x17", "WideChests_iron-chest-trashdump-25x17"], ["iron-trashdump-25x18", "WideChests_iron-chest-trashdump-25x18"], ["iron-trashdump-25x19", "WideChests_iron-chest-trashdump-25x19"], ["iron-trashdump-25x20", "WideChests_iron-chest-trashdump-25x20"], ["iron-trashdump-25x21", "WideChests_iron-chest-trashdump-25x21"], ["iron-trashdump-25x22", "WideChests_iron-chest-trashdump-25x22"], ["iron-trashdump-25x23", "WideChests_iron-chest-trashdump-25x23"], ["iron-trashdump-25x24", "WideChests_iron-chest-trashdump-25x24"], ["iron-trashdump-25x25", "WideChests_iron-chest-trashdump-25x25"], ["iron-trashdump-25x26", "WideChests_iron-chest-trashdump-25x26"], ["iron-trashdump-25x27", "WideChests_iron-chest-trashdump-25x27"], ["iron-trashdump-25x28", "WideChests_iron-chest-trashdump-25x28"], ["iron-trashdump-25x29", "WideChests_iron-chest-trashdump-25x29"], ["iron-trashdump-25x30", "WideChests_iron-chest-trashdump-25x30"], ["iron-trashdump-25x31", "WideChests_iron-chest-trashdump-25x31"], ["iron-trashdump-25x32", "WideChests_iron-chest-trashdump-25x32"], ["iron-trashdump-25x33", "WideChests_iron-chest-trashdump-25x33"], ["iron-trashdump-25x34", "WideChests_iron-chest-trashdump-25x34"], ["iron-trashdump-25x35", "WideChests_iron-chest-trashdump-25x35"], ["iron-trashdump-25x36", "WideChests_iron-chest-trashdump-25x36"], ["iron-trashdump-25x37", "WideChests_iron-chest-trashdump-25x37"], ["iron-trashdump-25x38", "WideChests_iron-chest-trashdump-25x38"], ["iron-trashdump-25x39", "WideChests_iron-chest-trashdump-25x39"], ["iron-trashdump-25x40", "WideChests_iron-chest-trashdump-25x40"], ["iron-trashdump-25x41", "WideChests_iron-chest-trashdump-25x41"], ["iron-trashdump-25x42", "WideChests_iron-chest-trashdump-25x42"], ["iron-trashdump-26x6", "WideChests_iron-chest-trashdump-26x6"], ["iron-trashdump-26x7", "WideChests_iron-chest-trashdump-26x7"], ["iron-trashdump-26x8", "WideChests_iron-chest-trashdump-26x8"], ["iron-trashdump-26x9", "WideChests_iron-chest-trashdump-26x9"], ["iron-trashdump-26x10", "WideChests_iron-chest-trashdump-26x10"], ["iron-trashdump-26x11", "WideChests_iron-chest-trashdump-26x11"], ["iron-trashdump-26x12", "WideChests_iron-chest-trashdump-26x12"], ["iron-trashdump-26x13", "WideChests_iron-chest-trashdump-26x13"], ["iron-trashdump-26x14", "WideChests_iron-chest-trashdump-26x14"], ["iron-trashdump-26x15", "WideChests_iron-chest-trashdump-26x15"], ["iron-trashdump-26x16", "WideChests_iron-chest-trashdump-26x16"], ["iron-trashdump-26x17", "WideChests_iron-chest-trashdump-26x17"], ["iron-trashdump-26x18", "WideChests_iron-chest-trashdump-26x18"], ["iron-trashdump-26x19", "WideChests_iron-chest-trashdump-26x19"], ["iron-trashdump-26x20", "WideChests_iron-chest-trashdump-26x20"], ["iron-trashdump-26x21", "WideChests_iron-chest-trashdump-26x21"], ["iron-trashdump-26x22", "WideChests_iron-chest-trashdump-26x22"], ["iron-trashdump-26x23", "WideChests_iron-chest-trashdump-26x23"], ["iron-trashdump-26x24", "WideChests_iron-chest-trashdump-26x24"], ["iron-trashdump-26x25", "WideChests_iron-chest-trashdump-26x25"], ["iron-trashdump-26x26", "WideChests_iron-chest-trashdump-26x26"], ["iron-trashdump-26x27", "WideChests_iron-chest-trashdump-26x27"], ["iron-trashdump-26x28", "WideChests_iron-chest-trashdump-26x28"], ["iron-trashdump-26x29", "WideChests_iron-chest-trashdump-26x29"], ["iron-trashdump-26x30", "WideChests_iron-chest-trashdump-26x30"], ["iron-trashdump-26x31", "WideChests_iron-chest-trashdump-26x31"], ["iron-trashdump-26x32", "WideChests_iron-chest-trashdump-26x32"], ["iron-trashdump-26x33", "WideChests_iron-chest-trashdump-26x33"], ["iron-trashdump-26x34", "WideChests_iron-chest-trashdump-26x34"], ["iron-trashdump-26x35", "WideChests_iron-chest-trashdump-26x35"], ["iron-trashdump-26x36", "WideChests_iron-chest-trashdump-26x36"], ["iron-trashdump-26x37", "WideChests_iron-chest-trashdump-26x37"], ["iron-trashdump-26x38", "WideChests_iron-chest-trashdump-26x38"], ["iron-trashdump-26x39", "WideChests_iron-chest-trashdump-26x39"], ["iron-trashdump-26x40", "WideChests_iron-chest-trashdump-26x40"], ["iron-trashdump-26x41", "WideChests_iron-chest-trashdump-26x41"], ["iron-trashdump-26x42", "WideChests_iron-chest-trashdump-26x42"], ["iron-trashdump-27x6", "WideChests_iron-chest-trashdump-27x6"], ["iron-trashdump-27x7", "WideChests_iron-chest-trashdump-27x7"], ["iron-trashdump-27x8", "WideChests_iron-chest-trashdump-27x8"], ["iron-trashdump-27x9", "WideChests_iron-chest-trashdump-27x9"], ["iron-trashdump-27x10", "WideChests_iron-chest-trashdump-27x10"], ["iron-trashdump-27x11", "WideChests_iron-chest-trashdump-27x11"], ["iron-trashdump-27x12", "WideChests_iron-chest-trashdump-27x12"], ["iron-trashdump-27x13", "WideChests_iron-chest-trashdump-27x13"], ["iron-trashdump-27x14", "WideChests_iron-chest-trashdump-27x14"], ["iron-trashdump-27x15", "WideChests_iron-chest-trashdump-27x15"], ["iron-trashdump-27x16", "WideChests_iron-chest-trashdump-27x16"], ["iron-trashdump-27x17", "WideChests_iron-chest-trashdump-27x17"], ["iron-trashdump-27x18", "WideChests_iron-chest-trashdump-27x18"], ["iron-trashdump-27x19", "WideChests_iron-chest-trashdump-27x19"], ["iron-trashdump-27x20", "WideChests_iron-chest-trashdump-27x20"], ["iron-trashdump-27x21", "WideChests_iron-chest-trashdump-27x21"], ["iron-trashdump-27x22", "WideChests_iron-chest-trashdump-27x22"], ["iron-trashdump-27x23", "WideChests_iron-chest-trashdump-27x23"], ["iron-trashdump-27x24", "WideChests_iron-chest-trashdump-27x24"], ["iron-trashdump-27x25", "WideChests_iron-chest-trashdump-27x25"], ["iron-trashdump-27x26", "WideChests_iron-chest-trashdump-27x26"], ["iron-trashdump-27x27", "WideChests_iron-chest-trashdump-27x27"], ["iron-trashdump-27x28", "WideChests_iron-chest-trashdump-27x28"], ["iron-trashdump-27x29", "WideChests_iron-chest-trashdump-27x29"], ["iron-trashdump-27x30", "WideChests_iron-chest-trashdump-27x30"], ["iron-trashdump-27x31", "WideChests_iron-chest-trashdump-27x31"], ["iron-trashdump-27x32", "WideChests_iron-chest-trashdump-27x32"], ["iron-trashdump-27x33", "WideChests_iron-chest-trashdump-27x33"], ["iron-trashdump-27x34", "WideChests_iron-chest-trashdump-27x34"], ["iron-trashdump-27x35", "WideChests_iron-chest-trashdump-27x35"], ["iron-trashdump-27x36", "WideChests_iron-chest-trashdump-27x36"], ["iron-trashdump-27x37", "WideChests_iron-chest-trashdump-27x37"], ["iron-trashdump-27x38", "WideChests_iron-chest-trashdump-27x38"], ["iron-trashdump-27x39", "WideChests_iron-chest-trashdump-27x39"], ["iron-trashdump-27x40", "WideChests_iron-chest-trashdump-27x40"], ["iron-trashdump-27x41", "WideChests_iron-chest-trashdump-27x41"], ["iron-trashdump-27x42", "WideChests_iron-chest-trashdump-27x42"], ["iron-trashdump-28x6", "WideChests_iron-chest-trashdump-28x6"], ["iron-trashdump-28x7", "WideChests_iron-chest-trashdump-28x7"], ["iron-trashdump-28x8", "WideChests_iron-chest-trashdump-28x8"], ["iron-trashdump-28x9", "WideChests_iron-chest-trashdump-28x9"], ["iron-trashdump-28x10", "WideChests_iron-chest-trashdump-28x10"], ["iron-trashdump-28x11", "WideChests_iron-chest-trashdump-28x11"], ["iron-trashdump-28x12", "WideChests_iron-chest-trashdump-28x12"], ["iron-trashdump-28x13", "WideChests_iron-chest-trashdump-28x13"], ["iron-trashdump-28x14", "WideChests_iron-chest-trashdump-28x14"], ["iron-trashdump-28x15", "WideChests_iron-chest-trashdump-28x15"], ["iron-trashdump-28x16", "WideChests_iron-chest-trashdump-28x16"], ["iron-trashdump-28x17", "WideChests_iron-chest-trashdump-28x17"], ["iron-trashdump-28x18", "WideChests_iron-chest-trashdump-28x18"], ["iron-trashdump-28x19", "WideChests_iron-chest-trashdump-28x19"], ["iron-trashdump-28x20", "WideChests_iron-chest-trashdump-28x20"], ["iron-trashdump-28x21", "WideChests_iron-chest-trashdump-28x21"], ["iron-trashdump-28x22", "WideChests_iron-chest-trashdump-28x22"], ["iron-trashdump-28x23", "WideChests_iron-chest-trashdump-28x23"], ["iron-trashdump-28x24", "WideChests_iron-chest-trashdump-28x24"], ["iron-trashdump-28x25", "WideChests_iron-chest-trashdump-28x25"], ["iron-trashdump-28x26", "WideChests_iron-chest-trashdump-28x26"], ["iron-trashdump-28x27", "WideChests_iron-chest-trashdump-28x27"], ["iron-trashdump-28x28", "WideChests_iron-chest-trashdump-28x28"], ["iron-trashdump-28x29", "WideChests_iron-chest-trashdump-28x29"], ["iron-trashdump-28x30", "WideChests_iron-chest-trashdump-28x30"], ["iron-trashdump-28x31", "WideChests_iron-chest-trashdump-28x31"], ["iron-trashdump-28x32", "WideChests_iron-chest-trashdump-28x32"], ["iron-trashdump-28x33", "WideChests_iron-chest-trashdump-28x33"], ["iron-trashdump-28x34", "WideChests_iron-chest-trashdump-28x34"], ["iron-trashdump-28x35", "WideChests_iron-chest-trashdump-28x35"], ["iron-trashdump-28x36", "WideChests_iron-chest-trashdump-28x36"], ["iron-trashdump-28x37", "WideChests_iron-chest-trashdump-28x37"], ["iron-trashdump-28x38", "WideChests_iron-chest-trashdump-28x38"], ["iron-trashdump-28x39", "WideChests_iron-chest-trashdump-28x39"], ["iron-trashdump-28x40", "WideChests_iron-chest-trashdump-28x40"], ["iron-trashdump-28x41", "WideChests_iron-chest-trashdump-28x41"], ["iron-trashdump-28x42", "WideChests_iron-chest-trashdump-28x42"], ["iron-trashdump-29x6", "WideChests_iron-chest-trashdump-29x6"], ["iron-trashdump-29x7", "WideChests_iron-chest-trashdump-29x7"], ["iron-trashdump-29x8", "WideChests_iron-chest-trashdump-29x8"], ["iron-trashdump-29x9", "WideChests_iron-chest-trashdump-29x9"], ["iron-trashdump-29x10", "WideChests_iron-chest-trashdump-29x10"], ["iron-trashdump-29x11", "WideChests_iron-chest-trashdump-29x11"], ["iron-trashdump-29x12", "WideChests_iron-chest-trashdump-29x12"], ["iron-trashdump-29x13", "WideChests_iron-chest-trashdump-29x13"], ["iron-trashdump-29x14", "WideChests_iron-chest-trashdump-29x14"], ["iron-trashdump-29x15", "WideChests_iron-chest-trashdump-29x15"], ["iron-trashdump-29x16", "WideChests_iron-chest-trashdump-29x16"], ["iron-trashdump-29x17", "WideChests_iron-chest-trashdump-29x17"], ["iron-trashdump-29x18", "WideChests_iron-chest-trashdump-29x18"], ["iron-trashdump-29x19", "WideChests_iron-chest-trashdump-29x19"], ["iron-trashdump-29x20", "WideChests_iron-chest-trashdump-29x20"], ["iron-trashdump-29x21", "WideChests_iron-chest-trashdump-29x21"], ["iron-trashdump-29x22", "WideChests_iron-chest-trashdump-29x22"], ["iron-trashdump-29x23", "WideChests_iron-chest-trashdump-29x23"], ["iron-trashdump-29x24", "WideChests_iron-chest-trashdump-29x24"], ["iron-trashdump-29x25", "WideChests_iron-chest-trashdump-29x25"], ["iron-trashdump-29x26", "WideChests_iron-chest-trashdump-29x26"], ["iron-trashdump-29x27", "WideChests_iron-chest-trashdump-29x27"], ["iron-trashdump-29x28", "WideChests_iron-chest-trashdump-29x28"], ["iron-trashdump-29x29", "WideChests_iron-chest-trashdump-29x29"], ["iron-trashdump-29x30", "WideChests_iron-chest-trashdump-29x30"], ["iron-trashdump-29x31", "WideChests_iron-chest-trashdump-29x31"], ["iron-trashdump-29x32", "WideChests_iron-chest-trashdump-29x32"], ["iron-trashdump-29x33", "WideChests_iron-chest-trashdump-29x33"], ["iron-trashdump-29x34", "WideChests_iron-chest-trashdump-29x34"], ["iron-trashdump-29x35", "WideChests_iron-chest-trashdump-29x35"], ["iron-trashdump-29x36", "WideChests_iron-chest-trashdump-29x36"], ["iron-trashdump-29x37", "WideChests_iron-chest-trashdump-29x37"], ["iron-trashdump-29x38", "WideChests_iron-chest-trashdump-29x38"], ["iron-trashdump-29x39", "WideChests_iron-chest-trashdump-29x39"], ["iron-trashdump-29x40", "WideChests_iron-chest-trashdump-29x40"], ["iron-trashdump-29x41", "WideChests_iron-chest-trashdump-29x41"], ["iron-trashdump-29x42", "WideChests_iron-chest-trashdump-29x42"], ["iron-trashdump-30x6", "WideChests_iron-chest-trashdump-30x6"], ["iron-trashdump-30x7", "WideChests_iron-chest-trashdump-30x7"], ["iron-trashdump-30x8", "WideChests_iron-chest-trashdump-30x8"], ["iron-trashdump-30x9", "WideChests_iron-chest-trashdump-30x9"], ["iron-trashdump-30x10", "WideChests_iron-chest-trashdump-30x10"], ["iron-trashdump-30x11", "WideChests_iron-chest-trashdump-30x11"], ["iron-trashdump-30x12", "WideChests_iron-chest-trashdump-30x12"], ["iron-trashdump-30x13", "WideChests_iron-chest-trashdump-30x13"], ["iron-trashdump-30x14", "WideChests_iron-chest-trashdump-30x14"], ["iron-trashdump-30x15", "WideChests_iron-chest-trashdump-30x15"], ["iron-trashdump-30x16", "WideChests_iron-chest-trashdump-30x16"], ["iron-trashdump-30x17", "WideChests_iron-chest-trashdump-30x17"], ["iron-trashdump-30x18", "WideChests_iron-chest-trashdump-30x18"], ["iron-trashdump-30x19", "WideChests_iron-chest-trashdump-30x19"], ["iron-trashdump-30x20", "WideChests_iron-chest-trashdump-30x20"], ["iron-trashdump-30x21", "WideChests_iron-chest-trashdump-30x21"], ["iron-trashdump-30x22", "WideChests_iron-chest-trashdump-30x22"], ["iron-trashdump-30x23", "WideChests_iron-chest-trashdump-30x23"], ["iron-trashdump-30x24", "WideChests_iron-chest-trashdump-30x24"], ["iron-trashdump-30x25", "WideChests_iron-chest-trashdump-30x25"], ["iron-trashdump-30x26", "WideChests_iron-chest-trashdump-30x26"], ["iron-trashdump-30x27", "WideChests_iron-chest-trashdump-30x27"], ["iron-trashdump-30x28", "WideChests_iron-chest-trashdump-30x28"], ["iron-trashdump-30x29", "WideChests_iron-chest-trashdump-30x29"], ["iron-trashdump-30x30", "WideChests_iron-chest-trashdump-30x30"], ["iron-trashdump-30x31", "WideChests_iron-chest-trashdump-30x31"], ["iron-trashdump-30x32", "WideChests_iron-chest-trashdump-30x32"], ["iron-trashdump-30x33", "WideChests_iron-chest-trashdump-30x33"], ["iron-trashdump-30x34", "WideChests_iron-chest-trashdump-30x34"], ["iron-trashdump-30x35", "WideChests_iron-chest-trashdump-30x35"], ["iron-trashdump-30x36", "WideChests_iron-chest-trashdump-30x36"], ["iron-trashdump-30x37", "WideChests_iron-chest-trashdump-30x37"], ["iron-trashdump-30x38", "WideChests_iron-chest-trashdump-30x38"], ["iron-trashdump-30x39", "WideChests_iron-chest-trashdump-30x39"], ["iron-trashdump-30x40", "WideChests_iron-chest-trashdump-30x40"], ["iron-trashdump-30x41", "WideChests_iron-chest-trashdump-30x41"], ["iron-trashdump-30x42", "WideChests_iron-chest-trashdump-30x42"], ["iron-trashdump-31x6", "WideChests_iron-chest-trashdump-31x6"], ["iron-trashdump-31x7", "WideChests_iron-chest-trashdump-31x7"], ["iron-trashdump-31x8", "WideChests_iron-chest-trashdump-31x8"], ["iron-trashdump-31x9", "WideChests_iron-chest-trashdump-31x9"], ["iron-trashdump-31x10", "WideChests_iron-chest-trashdump-31x10"], ["iron-trashdump-31x11", "WideChests_iron-chest-trashdump-31x11"], ["iron-trashdump-31x12", "WideChests_iron-chest-trashdump-31x12"], ["iron-trashdump-31x13", "WideChests_iron-chest-trashdump-31x13"], ["iron-trashdump-31x14", "WideChests_iron-chest-trashdump-31x14"], ["iron-trashdump-31x15", "WideChests_iron-chest-trashdump-31x15"], ["iron-trashdump-31x16", "WideChests_iron-chest-trashdump-31x16"], ["iron-trashdump-31x17", "WideChests_iron-chest-trashdump-31x17"], ["iron-trashdump-31x18", "WideChests_iron-chest-trashdump-31x18"], ["iron-trashdump-31x19", "WideChests_iron-chest-trashdump-31x19"], ["iron-trashdump-31x20", "WideChests_iron-chest-trashdump-31x20"], ["iron-trashdump-31x21", "WideChests_iron-chest-trashdump-31x21"], ["iron-trashdump-31x22", "WideChests_iron-chest-trashdump-31x22"], ["iron-trashdump-31x23", "WideChests_iron-chest-trashdump-31x23"], ["iron-trashdump-31x24", "WideChests_iron-chest-trashdump-31x24"], ["iron-trashdump-31x25", "WideChests_iron-chest-trashdump-31x25"], ["iron-trashdump-31x26", "WideChests_iron-chest-trashdump-31x26"], ["iron-trashdump-31x27", "WideChests_iron-chest-trashdump-31x27"], ["iron-trashdump-31x28", "WideChests_iron-chest-trashdump-31x28"], ["iron-trashdump-31x29", "WideChests_iron-chest-trashdump-31x29"], ["iron-trashdump-31x30", "WideChests_iron-chest-trashdump-31x30"], ["iron-trashdump-31x31", "WideChests_iron-chest-trashdump-31x31"], ["iron-trashdump-31x32", "WideChests_iron-chest-trashdump-31x32"], ["iron-trashdump-31x33", "WideChests_iron-chest-trashdump-31x33"], ["iron-trashdump-31x34", "WideChests_iron-chest-trashdump-31x34"], ["iron-trashdump-31x35", "WideChests_iron-chest-trashdump-31x35"], ["iron-trashdump-31x36", "WideChests_iron-chest-trashdump-31x36"], ["iron-trashdump-31x37", "WideChests_iron-chest-trashdump-31x37"], ["iron-trashdump-31x38", "WideChests_iron-chest-trashdump-31x38"], ["iron-trashdump-31x39", "WideChests_iron-chest-trashdump-31x39"], ["iron-trashdump-31x40", "WideChests_iron-chest-trashdump-31x40"], ["iron-trashdump-31x41", "WideChests_iron-chest-trashdump-31x41"], ["iron-trashdump-31x42", "WideChests_iron-chest-trashdump-31x42"], ["iron-trashdump-32x6", "WideChests_iron-chest-trashdump-32x6"], ["iron-trashdump-32x7", "WideChests_iron-chest-trashdump-32x7"], ["iron-trashdump-32x8", "WideChests_iron-chest-trashdump-32x8"], ["iron-trashdump-32x9", "WideChests_iron-chest-trashdump-32x9"], ["iron-trashdump-32x10", "WideChests_iron-chest-trashdump-32x10"], ["iron-trashdump-32x11", "WideChests_iron-chest-trashdump-32x11"], ["iron-trashdump-32x12", "WideChests_iron-chest-trashdump-32x12"], ["iron-trashdump-32x13", "WideChests_iron-chest-trashdump-32x13"], ["iron-trashdump-32x14", "WideChests_iron-chest-trashdump-32x14"], ["iron-trashdump-32x15", "WideChests_iron-chest-trashdump-32x15"], ["iron-trashdump-32x16", "WideChests_iron-chest-trashdump-32x16"], ["iron-trashdump-32x17", "WideChests_iron-chest-trashdump-32x17"], ["iron-trashdump-32x18", "WideChests_iron-chest-trashdump-32x18"], ["iron-trashdump-32x19", "WideChests_iron-chest-trashdump-32x19"], ["iron-trashdump-32x20", "WideChests_iron-chest-trashdump-32x20"], ["iron-trashdump-32x21", "WideChests_iron-chest-trashdump-32x21"], ["iron-trashdump-32x22", "WideChests_iron-chest-trashdump-32x22"], ["iron-trashdump-32x23", "WideChests_iron-chest-trashdump-32x23"], ["iron-trashdump-32x24", "WideChests_iron-chest-trashdump-32x24"], ["iron-trashdump-32x25", "WideChests_iron-chest-trashdump-32x25"], ["iron-trashdump-32x26", "WideChests_iron-chest-trashdump-32x26"], ["iron-trashdump-32x27", "WideChests_iron-chest-trashdump-32x27"], ["iron-trashdump-32x28", "WideChests_iron-chest-trashdump-32x28"], ["iron-trashdump-32x29", "WideChests_iron-chest-trashdump-32x29"], ["iron-trashdump-32x30", "WideChests_iron-chest-trashdump-32x30"], ["iron-trashdump-32x31", "WideChests_iron-chest-trashdump-32x31"], ["iron-trashdump-32x32", "WideChests_iron-chest-trashdump-32x32"], ["iron-trashdump-32x33", "WideChests_iron-chest-trashdump-32x33"], ["iron-trashdump-32x34", "WideChests_iron-chest-trashdump-32x34"], ["iron-trashdump-32x35", "WideChests_iron-chest-trashdump-32x35"], ["iron-trashdump-32x36", "WideChests_iron-chest-trashdump-32x36"], ["iron-trashdump-32x37", "WideChests_iron-chest-trashdump-32x37"], ["iron-trashdump-32x38", "WideChests_iron-chest-trashdump-32x38"], ["iron-trashdump-32x39", "WideChests_iron-chest-trashdump-32x39"], ["iron-trashdump-32x40", "WideChests_iron-chest-trashdump-32x40"], ["iron-trashdump-32x41", "WideChests_iron-chest-trashdump-32x41"], ["iron-trashdump-32x42", "WideChests_iron-chest-trashdump-32x42"], ["iron-trashdump-33x6", "WideChests_iron-chest-trashdump-33x6"], ["iron-trashdump-33x7", "WideChests_iron-chest-trashdump-33x7"], ["iron-trashdump-33x8", "WideChests_iron-chest-trashdump-33x8"], ["iron-trashdump-33x9", "WideChests_iron-chest-trashdump-33x9"], ["iron-trashdump-33x10", "WideChests_iron-chest-trashdump-33x10"], ["iron-trashdump-33x11", "WideChests_iron-chest-trashdump-33x11"], ["iron-trashdump-33x12", "WideChests_iron-chest-trashdump-33x12"], ["iron-trashdump-33x13", "WideChests_iron-chest-trashdump-33x13"], ["iron-trashdump-33x14", "WideChests_iron-chest-trashdump-33x14"], ["iron-trashdump-33x15", "WideChests_iron-chest-trashdump-33x15"], ["iron-trashdump-33x16", "WideChests_iron-chest-trashdump-33x16"], ["iron-trashdump-33x17", "WideChests_iron-chest-trashdump-33x17"], ["iron-trashdump-33x18", "WideChests_iron-chest-trashdump-33x18"], ["iron-trashdump-33x19", "WideChests_iron-chest-trashdump-33x19"], ["iron-trashdump-33x20", "WideChests_iron-chest-trashdump-33x20"], ["iron-trashdump-33x21", "WideChests_iron-chest-trashdump-33x21"], ["iron-trashdump-33x22", "WideChests_iron-chest-trashdump-33x22"], ["iron-trashdump-33x23", "WideChests_iron-chest-trashdump-33x23"], ["iron-trashdump-33x24", "WideChests_iron-chest-trashdump-33x24"], ["iron-trashdump-33x25", "WideChests_iron-chest-trashdump-33x25"], ["iron-trashdump-33x26", "WideChests_iron-chest-trashdump-33x26"], ["iron-trashdump-33x27", "WideChests_iron-chest-trashdump-33x27"], ["iron-trashdump-33x28", "WideChests_iron-chest-trashdump-33x28"], ["iron-trashdump-33x29", "WideChests_iron-chest-trashdump-33x29"], ["iron-trashdump-33x30", "WideChests_iron-chest-trashdump-33x30"], ["iron-trashdump-33x31", "WideChests_iron-chest-trashdump-33x31"], ["iron-trashdump-33x32", "WideChests_iron-chest-trashdump-33x32"], ["iron-trashdump-33x33", "WideChests_iron-chest-trashdump-33x33"], ["iron-trashdump-33x34", "WideChests_iron-chest-trashdump-33x34"], ["iron-trashdump-33x35", "WideChests_iron-chest-trashdump-33x35"], ["iron-trashdump-33x36", "WideChests_iron-chest-trashdump-33x36"], ["iron-trashdump-33x37", "WideChests_iron-chest-trashdump-33x37"], ["iron-trashdump-33x38", "WideChests_iron-chest-trashdump-33x38"], ["iron-trashdump-33x39", "WideChests_iron-chest-trashdump-33x39"], ["iron-trashdump-33x40", "WideChests_iron-chest-trashdump-33x40"], ["iron-trashdump-33x41", "WideChests_iron-chest-trashdump-33x41"], ["iron-trashdump-33x42", "WideChests_iron-chest-trashdump-33x42"], ["iron-trashdump-34x6", "WideChests_iron-chest-trashdump-34x6"], ["iron-trashdump-34x7", "WideChests_iron-chest-trashdump-34x7"], ["iron-trashdump-34x8", "WideChests_iron-chest-trashdump-34x8"], ["iron-trashdump-34x9", "WideChests_iron-chest-trashdump-34x9"], ["iron-trashdump-34x10", "WideChests_iron-chest-trashdump-34x10"], ["iron-trashdump-34x11", "WideChests_iron-chest-trashdump-34x11"], ["iron-trashdump-34x12", "WideChests_iron-chest-trashdump-34x12"], ["iron-trashdump-34x13", "WideChests_iron-chest-trashdump-34x13"], ["iron-trashdump-34x14", "WideChests_iron-chest-trashdump-34x14"], ["iron-trashdump-34x15", "WideChests_iron-chest-trashdump-34x15"], ["iron-trashdump-34x16", "WideChests_iron-chest-trashdump-34x16"], ["iron-trashdump-34x17", "WideChests_iron-chest-trashdump-34x17"], ["iron-trashdump-34x18", "WideChests_iron-chest-trashdump-34x18"], ["iron-trashdump-34x19", "WideChests_iron-chest-trashdump-34x19"], ["iron-trashdump-34x20", "WideChests_iron-chest-trashdump-34x20"], ["iron-trashdump-34x21", "WideChests_iron-chest-trashdump-34x21"], ["iron-trashdump-34x22", "WideChests_iron-chest-trashdump-34x22"], ["iron-trashdump-34x23", "WideChests_iron-chest-trashdump-34x23"], ["iron-trashdump-34x24", "WideChests_iron-chest-trashdump-34x24"], ["iron-trashdump-34x25", "WideChests_iron-chest-trashdump-34x25"], ["iron-trashdump-34x26", "WideChests_iron-chest-trashdump-34x26"], ["iron-trashdump-34x27", "WideChests_iron-chest-trashdump-34x27"], ["iron-trashdump-34x28", "WideChests_iron-chest-trashdump-34x28"], ["iron-trashdump-34x29", "WideChests_iron-chest-trashdump-34x29"], ["iron-trashdump-34x30", "WideChests_iron-chest-trashdump-34x30"], ["iron-trashdump-34x31", "WideChests_iron-chest-trashdump-34x31"], ["iron-trashdump-34x32", "WideChests_iron-chest-trashdump-34x32"], ["iron-trashdump-34x33", "WideChests_iron-chest-trashdump-34x33"], ["iron-trashdump-34x34", "WideChests_iron-chest-trashdump-34x34"], ["iron-trashdump-34x35", "WideChests_iron-chest-trashdump-34x35"], ["iron-trashdump-34x36", "WideChests_iron-chest-trashdump-34x36"], ["iron-trashdump-34x37", "WideChests_iron-chest-trashdump-34x37"], ["iron-trashdump-34x38", "WideChests_iron-chest-trashdump-34x38"], ["iron-trashdump-34x39", "WideChests_iron-chest-trashdump-34x39"], ["iron-trashdump-34x40", "WideChests_iron-chest-trashdump-34x40"], ["iron-trashdump-34x41", "WideChests_iron-chest-trashdump-34x41"], ["iron-trashdump-34x42", "WideChests_iron-chest-trashdump-34x42"], ["iron-trashdump-35x6", "WideChests_iron-chest-trashdump-35x6"], ["iron-trashdump-35x7", "WideChests_iron-chest-trashdump-35x7"], ["iron-trashdump-35x8", "WideChests_iron-chest-trashdump-35x8"], ["iron-trashdump-35x9", "WideChests_iron-chest-trashdump-35x9"], ["iron-trashdump-35x10", "WideChests_iron-chest-trashdump-35x10"], ["iron-trashdump-35x11", "WideChests_iron-chest-trashdump-35x11"], ["iron-trashdump-35x12", "WideChests_iron-chest-trashdump-35x12"], ["iron-trashdump-35x13", "WideChests_iron-chest-trashdump-35x13"], ["iron-trashdump-35x14", "WideChests_iron-chest-trashdump-35x14"], ["iron-trashdump-35x15", "WideChests_iron-chest-trashdump-35x15"], ["iron-trashdump-35x16", "WideChests_iron-chest-trashdump-35x16"], ["iron-trashdump-35x17", "WideChests_iron-chest-trashdump-35x17"], ["iron-trashdump-35x18", "WideChests_iron-chest-trashdump-35x18"], ["iron-trashdump-35x19", "WideChests_iron-chest-trashdump-35x19"], ["iron-trashdump-35x20", "WideChests_iron-chest-trashdump-35x20"], ["iron-trashdump-35x21", "WideChests_iron-chest-trashdump-35x21"], ["iron-trashdump-35x22", "WideChests_iron-chest-trashdump-35x22"], ["iron-trashdump-35x23", "WideChests_iron-chest-trashdump-35x23"], ["iron-trashdump-35x24", "WideChests_iron-chest-trashdump-35x24"], ["iron-trashdump-35x25", "WideChests_iron-chest-trashdump-35x25"], ["iron-trashdump-35x26", "WideChests_iron-chest-trashdump-35x26"], ["iron-trashdump-35x27", "WideChests_iron-chest-trashdump-35x27"], ["iron-trashdump-35x28", "WideChests_iron-chest-trashdump-35x28"], ["iron-trashdump-35x29", "WideChests_iron-chest-trashdump-35x29"], ["iron-trashdump-35x30", "WideChests_iron-chest-trashdump-35x30"], ["iron-trashdump-35x31", "WideChests_iron-chest-trashdump-35x31"], ["iron-trashdump-35x32", "WideChests_iron-chest-trashdump-35x32"], ["iron-trashdump-35x33", "WideChests_iron-chest-trashdump-35x33"], ["iron-trashdump-35x34", "WideChests_iron-chest-trashdump-35x34"], ["iron-trashdump-35x35", "WideChests_iron-chest-trashdump-35x35"], ["iron-trashdump-35x36", "WideChests_iron-chest-trashdump-35x36"], ["iron-trashdump-35x37", "WideChests_iron-chest-trashdump-35x37"], ["iron-trashdump-35x38", "WideChests_iron-chest-trashdump-35x38"], ["iron-trashdump-35x39", "WideChests_iron-chest-trashdump-35x39"], ["iron-trashdump-35x40", "WideChests_iron-chest-trashdump-35x40"], ["iron-trashdump-35x41", "WideChests_iron-chest-trashdump-35x41"], ["iron-trashdump-35x42", "WideChests_iron-chest-trashdump-35x42"], ["iron-trashdump-36x6", "WideChests_iron-chest-trashdump-36x6"], ["iron-trashdump-36x7", "WideChests_iron-chest-trashdump-36x7"], ["iron-trashdump-36x8", "WideChests_iron-chest-trashdump-36x8"], ["iron-trashdump-36x9", "WideChests_iron-chest-trashdump-36x9"], ["iron-trashdump-36x10", "WideChests_iron-chest-trashdump-36x10"], ["iron-trashdump-36x11", "WideChests_iron-chest-trashdump-36x11"], ["iron-trashdump-36x12", "WideChests_iron-chest-trashdump-36x12"], ["iron-trashdump-36x13", "WideChests_iron-chest-trashdump-36x13"], ["iron-trashdump-36x14", "WideChests_iron-chest-trashdump-36x14"], ["iron-trashdump-36x15", "WideChests_iron-chest-trashdump-36x15"], ["iron-trashdump-36x16", "WideChests_iron-chest-trashdump-36x16"], ["iron-trashdump-36x17", "WideChests_iron-chest-trashdump-36x17"], ["iron-trashdump-36x18", "WideChests_iron-chest-trashdump-36x18"], ["iron-trashdump-36x19", "WideChests_iron-chest-trashdump-36x19"], ["iron-trashdump-36x20", "WideChests_iron-chest-trashdump-36x20"], ["iron-trashdump-36x21", "WideChests_iron-chest-trashdump-36x21"], ["iron-trashdump-36x22", "WideChests_iron-chest-trashdump-36x22"], ["iron-trashdump-36x23", "WideChests_iron-chest-trashdump-36x23"], ["iron-trashdump-36x24", "WideChests_iron-chest-trashdump-36x24"], ["iron-trashdump-36x25", "WideChests_iron-chest-trashdump-36x25"], ["iron-trashdump-36x26", "WideChests_iron-chest-trashdump-36x26"], ["iron-trashdump-36x27", "WideChests_iron-chest-trashdump-36x27"], ["iron-trashdump-36x28", "WideChests_iron-chest-trashdump-36x28"], ["iron-trashdump-36x29", "WideChests_iron-chest-trashdump-36x29"], ["iron-trashdump-36x30", "WideChests_iron-chest-trashdump-36x30"], ["iron-trashdump-36x31", "WideChests_iron-chest-trashdump-36x31"], ["iron-trashdump-36x32", "WideChests_iron-chest-trashdump-36x32"], ["iron-trashdump-36x33", "WideChests_iron-chest-trashdump-36x33"], ["iron-trashdump-36x34", "WideChests_iron-chest-trashdump-36x34"], ["iron-trashdump-36x35", "WideChests_iron-chest-trashdump-36x35"], ["iron-trashdump-36x36", "WideChests_iron-chest-trashdump-36x36"], ["iron-trashdump-36x37", "WideChests_iron-chest-trashdump-36x37"], ["iron-trashdump-36x38", "WideChests_iron-chest-trashdump-36x38"], ["iron-trashdump-36x39", "WideChests_iron-chest-trashdump-36x39"], ["iron-trashdump-36x40", "WideChests_iron-chest-trashdump-36x40"], ["iron-trashdump-36x41", "WideChests_iron-chest-trashdump-36x41"], ["iron-trashdump-36x42", "WideChests_iron-chest-trashdump-36x42"], ["iron-trashdump-37x6", "WideChests_iron-chest-trashdump-37x6"], ["iron-trashdump-37x7", "WideChests_iron-chest-trashdump-37x7"], ["iron-trashdump-37x8", "WideChests_iron-chest-trashdump-37x8"], ["iron-trashdump-37x9", "WideChests_iron-chest-trashdump-37x9"], ["iron-trashdump-37x10", "WideChests_iron-chest-trashdump-37x10"], ["iron-trashdump-37x11", "WideChests_iron-chest-trashdump-37x11"], ["iron-trashdump-37x12", "WideChests_iron-chest-trashdump-37x12"], ["iron-trashdump-37x13", "WideChests_iron-chest-trashdump-37x13"], ["iron-trashdump-37x14", "WideChests_iron-chest-trashdump-37x14"], ["iron-trashdump-37x15", "WideChests_iron-chest-trashdump-37x15"], ["iron-trashdump-37x16", "WideChests_iron-chest-trashdump-37x16"], ["iron-trashdump-37x17", "WideChests_iron-chest-trashdump-37x17"], ["iron-trashdump-37x18", "WideChests_iron-chest-trashdump-37x18"], ["iron-trashdump-37x19", "WideChests_iron-chest-trashdump-37x19"], ["iron-trashdump-37x20", "WideChests_iron-chest-trashdump-37x20"], ["iron-trashdump-37x21", "WideChests_iron-chest-trashdump-37x21"], ["iron-trashdump-37x22", "WideChests_iron-chest-trashdump-37x22"], ["iron-trashdump-37x23", "WideChests_iron-chest-trashdump-37x23"], ["iron-trashdump-37x24", "WideChests_iron-chest-trashdump-37x24"], ["iron-trashdump-37x25", "WideChests_iron-chest-trashdump-37x25"], ["iron-trashdump-37x26", "WideChests_iron-chest-trashdump-37x26"], ["iron-trashdump-37x27", "WideChests_iron-chest-trashdump-37x27"], ["iron-trashdump-37x28", "WideChests_iron-chest-trashdump-37x28"], ["iron-trashdump-37x29", "WideChests_iron-chest-trashdump-37x29"], ["iron-trashdump-37x30", "WideChests_iron-chest-trashdump-37x30"], ["iron-trashdump-37x31", "WideChests_iron-chest-trashdump-37x31"], ["iron-trashdump-37x32", "WideChests_iron-chest-trashdump-37x32"], ["iron-trashdump-37x33", "WideChests_iron-chest-trashdump-37x33"], ["iron-trashdump-37x34", "WideChests_iron-chest-trashdump-37x34"], ["iron-trashdump-37x35", "WideChests_iron-chest-trashdump-37x35"], ["iron-trashdump-37x36", "WideChests_iron-chest-trashdump-37x36"], ["iron-trashdump-37x37", "WideChests_iron-chest-trashdump-37x37"], ["iron-trashdump-37x38", "WideChests_iron-chest-trashdump-37x38"], ["iron-trashdump-37x39", "WideChests_iron-chest-trashdump-37x39"], ["iron-trashdump-37x40", "WideChests_iron-chest-trashdump-37x40"], ["iron-trashdump-37x41", "WideChests_iron-chest-trashdump-37x41"], ["iron-trashdump-37x42", "WideChests_iron-chest-trashdump-37x42"], ["iron-trashdump-38x6", "WideChests_iron-chest-trashdump-38x6"], ["iron-trashdump-38x7", "WideChests_iron-chest-trashdump-38x7"], ["iron-trashdump-38x8", "WideChests_iron-chest-trashdump-38x8"], ["iron-trashdump-38x9", "WideChests_iron-chest-trashdump-38x9"], ["iron-trashdump-38x10", "WideChests_iron-chest-trashdump-38x10"], ["iron-trashdump-38x11", "WideChests_iron-chest-trashdump-38x11"], ["iron-trashdump-38x12", "WideChests_iron-chest-trashdump-38x12"], ["iron-trashdump-38x13", "WideChests_iron-chest-trashdump-38x13"], ["iron-trashdump-38x14", "WideChests_iron-chest-trashdump-38x14"], ["iron-trashdump-38x15", "WideChests_iron-chest-trashdump-38x15"], ["iron-trashdump-38x16", "WideChests_iron-chest-trashdump-38x16"], ["iron-trashdump-38x17", "WideChests_iron-chest-trashdump-38x17"], ["iron-trashdump-38x18", "WideChests_iron-chest-trashdump-38x18"], ["iron-trashdump-38x19", "WideChests_iron-chest-trashdump-38x19"], ["iron-trashdump-38x20", "WideChests_iron-chest-trashdump-38x20"], ["iron-trashdump-38x21", "WideChests_iron-chest-trashdump-38x21"], ["iron-trashdump-38x22", "WideChests_iron-chest-trashdump-38x22"], ["iron-trashdump-38x23", "WideChests_iron-chest-trashdump-38x23"], ["iron-trashdump-38x24", "WideChests_iron-chest-trashdump-38x24"], ["iron-trashdump-38x25", "WideChests_iron-chest-trashdump-38x25"], ["iron-trashdump-38x26", "WideChests_iron-chest-trashdump-38x26"], ["iron-trashdump-38x27", "WideChests_iron-chest-trashdump-38x27"], ["iron-trashdump-38x28", "WideChests_iron-chest-trashdump-38x28"], ["iron-trashdump-38x29", "WideChests_iron-chest-trashdump-38x29"], ["iron-trashdump-38x30", "WideChests_iron-chest-trashdump-38x30"], ["iron-trashdump-38x31", "WideChests_iron-chest-trashdump-38x31"], ["iron-trashdump-38x32", "WideChests_iron-chest-trashdump-38x32"], ["iron-trashdump-38x33", "WideChests_iron-chest-trashdump-38x33"], ["iron-trashdump-38x34", "WideChests_iron-chest-trashdump-38x34"], ["iron-trashdump-38x35", "WideChests_iron-chest-trashdump-38x35"], ["iron-trashdump-38x36", "WideChests_iron-chest-trashdump-38x36"], ["iron-trashdump-38x37", "WideChests_iron-chest-trashdump-38x37"], ["iron-trashdump-38x38", "WideChests_iron-chest-trashdump-38x38"], ["iron-trashdump-38x39", "WideChests_iron-chest-trashdump-38x39"], ["iron-trashdump-38x40", "WideChests_iron-chest-trashdump-38x40"], ["iron-trashdump-38x41", "WideChests_iron-chest-trashdump-38x41"], ["iron-trashdump-38x42", "WideChests_iron-chest-trashdump-38x42"], ["iron-trashdump-39x6", "WideChests_iron-chest-trashdump-39x6"], ["iron-trashdump-39x7", "WideChests_iron-chest-trashdump-39x7"], ["iron-trashdump-39x8", "WideChests_iron-chest-trashdump-39x8"], ["iron-trashdump-39x9", "WideChests_iron-chest-trashdump-39x9"], ["iron-trashdump-39x10", "WideChests_iron-chest-trashdump-39x10"], ["iron-trashdump-39x11", "WideChests_iron-chest-trashdump-39x11"], ["iron-trashdump-39x12", "WideChests_iron-chest-trashdump-39x12"], ["iron-trashdump-39x13", "WideChests_iron-chest-trashdump-39x13"], ["iron-trashdump-39x14", "WideChests_iron-chest-trashdump-39x14"], ["iron-trashdump-39x15", "WideChests_iron-chest-trashdump-39x15"], ["iron-trashdump-39x16", "WideChests_iron-chest-trashdump-39x16"], ["iron-trashdump-39x17", "WideChests_iron-chest-trashdump-39x17"], ["iron-trashdump-39x18", "WideChests_iron-chest-trashdump-39x18"], ["iron-trashdump-39x19", "WideChests_iron-chest-trashdump-39x19"], ["iron-trashdump-39x20", "WideChests_iron-chest-trashdump-39x20"], ["iron-trashdump-39x21", "WideChests_iron-chest-trashdump-39x21"], ["iron-trashdump-39x22", "WideChests_iron-chest-trashdump-39x22"], ["iron-trashdump-39x23", "WideChests_iron-chest-trashdump-39x23"], ["iron-trashdump-39x24", "WideChests_iron-chest-trashdump-39x24"], ["iron-trashdump-39x25", "WideChests_iron-chest-trashdump-39x25"], ["iron-trashdump-39x26", "WideChests_iron-chest-trashdump-39x26"], ["iron-trashdump-39x27", "WideChests_iron-chest-trashdump-39x27"], ["iron-trashdump-39x28", "WideChests_iron-chest-trashdump-39x28"], ["iron-trashdump-39x29", "WideChests_iron-chest-trashdump-39x29"], ["iron-trashdump-39x30", "WideChests_iron-chest-trashdump-39x30"], ["iron-trashdump-39x31", "WideChests_iron-chest-trashdump-39x31"], ["iron-trashdump-39x32", "WideChests_iron-chest-trashdump-39x32"], ["iron-trashdump-39x33", "WideChests_iron-chest-trashdump-39x33"], ["iron-trashdump-39x34", "WideChests_iron-chest-trashdump-39x34"], ["iron-trashdump-39x35", "WideChests_iron-chest-trashdump-39x35"], ["iron-trashdump-39x36", "WideChests_iron-chest-trashdump-39x36"], ["iron-trashdump-39x37", "WideChests_iron-chest-trashdump-39x37"], ["iron-trashdump-39x38", "WideChests_iron-chest-trashdump-39x38"], ["iron-trashdump-39x39", "WideChests_iron-chest-trashdump-39x39"], ["iron-trashdump-39x40", "WideChests_iron-chest-trashdump-39x40"], ["iron-trashdump-39x41", "WideChests_iron-chest-trashdump-39x41"], ["iron-trashdump-39x42", "WideChests_iron-chest-trashdump-39x42"], ["iron-trashdump-40x6", "WideChests_iron-chest-trashdump-40x6"], ["iron-trashdump-40x7", "WideChests_iron-chest-trashdump-40x7"], ["iron-trashdump-40x8", "WideChests_iron-chest-trashdump-40x8"], ["iron-trashdump-40x9", "WideChests_iron-chest-trashdump-40x9"], ["iron-trashdump-40x10", "WideChests_iron-chest-trashdump-40x10"], ["iron-trashdump-40x11", "WideChests_iron-chest-trashdump-40x11"], ["iron-trashdump-40x12", "WideChests_iron-chest-trashdump-40x12"], ["iron-trashdump-40x13", "WideChests_iron-chest-trashdump-40x13"], ["iron-trashdump-40x14", "WideChests_iron-chest-trashdump-40x14"], ["iron-trashdump-40x15", "WideChests_iron-chest-trashdump-40x15"], ["iron-trashdump-40x16", "WideChests_iron-chest-trashdump-40x16"], ["iron-trashdump-40x17", "WideChests_iron-chest-trashdump-40x17"], ["iron-trashdump-40x18", "WideChests_iron-chest-trashdump-40x18"], ["iron-trashdump-40x19", "WideChests_iron-chest-trashdump-40x19"], ["iron-trashdump-40x20", "WideChests_iron-chest-trashdump-40x20"], ["iron-trashdump-40x21", "WideChests_iron-chest-trashdump-40x21"], ["iron-trashdump-40x22", "WideChests_iron-chest-trashdump-40x22"], ["iron-trashdump-40x23", "WideChests_iron-chest-trashdump-40x23"], ["iron-trashdump-40x24", "WideChests_iron-chest-trashdump-40x24"], ["iron-trashdump-40x25", "WideChests_iron-chest-trashdump-40x25"], ["iron-trashdump-40x26", "WideChests_iron-chest-trashdump-40x26"], ["iron-trashdump-40x27", "WideChests_iron-chest-trashdump-40x27"], ["iron-trashdump-40x28", "WideChests_iron-chest-trashdump-40x28"], ["iron-trashdump-40x29", "WideChests_iron-chest-trashdump-40x29"], ["iron-trashdump-40x30", "WideChests_iron-chest-trashdump-40x30"], ["iron-trashdump-40x31", "WideChests_iron-chest-trashdump-40x31"], ["iron-trashdump-40x32", "WideChests_iron-chest-trashdump-40x32"], ["iron-trashdump-40x33", "WideChests_iron-chest-trashdump-40x33"], ["iron-trashdump-40x34", "WideChests_iron-chest-trashdump-40x34"], ["iron-trashdump-40x35", "WideChests_iron-chest-trashdump-40x35"], ["iron-trashdump-40x36", "WideChests_iron-chest-trashdump-40x36"], ["iron-trashdump-40x37", "WideChests_iron-chest-trashdump-40x37"], ["iron-trashdump-40x38", "WideChests_iron-chest-trashdump-40x38"], ["iron-trashdump-40x39", "WideChests_iron-chest-trashdump-40x39"], ["iron-trashdump-40x40", "WideChests_iron-chest-trashdump-40x40"], ["iron-trashdump-40x41", "WideChests_iron-chest-trashdump-40x41"], ["iron-trashdump-40x42", "WideChests_iron-chest-trashdump-40x42"], ["iron-trashdump-41x6", "WideChests_iron-chest-trashdump-41x6"], ["iron-trashdump-41x7", "WideChests_iron-chest-trashdump-41x7"], ["iron-trashdump-41x8", "WideChests_iron-chest-trashdump-41x8"], ["iron-trashdump-41x9", "WideChests_iron-chest-trashdump-41x9"], ["iron-trashdump-41x10", "WideChests_iron-chest-trashdump-41x10"], ["iron-trashdump-41x11", "WideChests_iron-chest-trashdump-41x11"], ["iron-trashdump-41x12", "WideChests_iron-chest-trashdump-41x12"], ["iron-trashdump-41x13", "WideChests_iron-chest-trashdump-41x13"], ["iron-trashdump-41x14", "WideChests_iron-chest-trashdump-41x14"], ["iron-trashdump-41x15", "WideChests_iron-chest-trashdump-41x15"], ["iron-trashdump-41x16", "WideChests_iron-chest-trashdump-41x16"], ["iron-trashdump-41x17", "WideChests_iron-chest-trashdump-41x17"], ["iron-trashdump-41x18", "WideChests_iron-chest-trashdump-41x18"], ["iron-trashdump-41x19", "WideChests_iron-chest-trashdump-41x19"], ["iron-trashdump-41x20", "WideChests_iron-chest-trashdump-41x20"], ["iron-trashdump-41x21", "WideChests_iron-chest-trashdump-41x21"], ["iron-trashdump-41x22", "WideChests_iron-chest-trashdump-41x22"], ["iron-trashdump-41x23", "WideChests_iron-chest-trashdump-41x23"], ["iron-trashdump-41x24", "WideChests_iron-chest-trashdump-41x24"], ["iron-trashdump-41x25", "WideChests_iron-chest-trashdump-41x25"], ["iron-trashdump-41x26", "WideChests_iron-chest-trashdump-41x26"], ["iron-trashdump-41x27", "WideChests_iron-chest-trashdump-41x27"], ["iron-trashdump-41x28", "WideChests_iron-chest-trashdump-41x28"], ["iron-trashdump-41x29", "WideChests_iron-chest-trashdump-41x29"], ["iron-trashdump-41x30", "WideChests_iron-chest-trashdump-41x30"], ["iron-trashdump-41x31", "WideChests_iron-chest-trashdump-41x31"], ["iron-trashdump-41x32", "WideChests_iron-chest-trashdump-41x32"], ["iron-trashdump-41x33", "WideChests_iron-chest-trashdump-41x33"], ["iron-trashdump-41x34", "WideChests_iron-chest-trashdump-41x34"], ["iron-trashdump-41x35", "WideChests_iron-chest-trashdump-41x35"], ["iron-trashdump-41x36", "WideChests_iron-chest-trashdump-41x36"], ["iron-trashdump-41x37", "WideChests_iron-chest-trashdump-41x37"], ["iron-trashdump-41x38", "WideChests_iron-chest-trashdump-41x38"], ["iron-trashdump-41x39", "WideChests_iron-chest-trashdump-41x39"], ["iron-trashdump-41x40", "WideChests_iron-chest-trashdump-41x40"], ["iron-trashdump-41x41", "WideChests_iron-chest-trashdump-41x41"], ["iron-trashdump-41x42", "WideChests_iron-chest-trashdump-41x42"], ["iron-trashdump-42x6", "WideChests_iron-chest-trashdump-42x6"], ["iron-trashdump-42x7", "WideChests_iron-chest-trashdump-42x7"], ["iron-trashdump-42x8", "WideChests_iron-chest-trashdump-42x8"], ["iron-trashdump-42x9", "WideChests_iron-chest-trashdump-42x9"], ["iron-trashdump-42x10", "WideChests_iron-chest-trashdump-42x10"], ["iron-trashdump-42x11", "WideChests_iron-chest-trashdump-42x11"], ["iron-trashdump-42x12", "WideChests_iron-chest-trashdump-42x12"], ["iron-trashdump-42x13", "WideChests_iron-chest-trashdump-42x13"], ["iron-trashdump-42x14", "WideChests_iron-chest-trashdump-42x14"], ["iron-trashdump-42x15", "WideChests_iron-chest-trashdump-42x15"], ["iron-trashdump-42x16", "WideChests_iron-chest-trashdump-42x16"], ["iron-trashdump-42x17", "WideChests_iron-chest-trashdump-42x17"], ["iron-trashdump-42x18", "WideChests_iron-chest-trashdump-42x18"], ["iron-trashdump-42x19", "WideChests_iron-chest-trashdump-42x19"], ["iron-trashdump-42x20", "WideChests_iron-chest-trashdump-42x20"], ["iron-trashdump-42x21", "WideChests_iron-chest-trashdump-42x21"], ["iron-trashdump-42x22", "WideChests_iron-chest-trashdump-42x22"], ["iron-trashdump-42x23", "WideChests_iron-chest-trashdump-42x23"], ["iron-trashdump-42x24", "WideChests_iron-chest-trashdump-42x24"], ["iron-trashdump-42x25", "WideChests_iron-chest-trashdump-42x25"], ["iron-trashdump-42x26", "WideChests_iron-chest-trashdump-42x26"], ["iron-trashdump-42x27", "WideChests_iron-chest-trashdump-42x27"], ["iron-trashdump-42x28", "WideChests_iron-chest-trashdump-42x28"], ["iron-trashdump-42x29", "WideChests_iron-chest-trashdump-42x29"], ["iron-trashdump-42x30", "WideChests_iron-chest-trashdump-42x30"], ["iron-trashdump-42x31", "WideChests_iron-chest-trashdump-42x31"], ["iron-trashdump-42x32", "WideChests_iron-chest-trashdump-42x32"], ["iron-trashdump-42x33", "WideChests_iron-chest-trashdump-42x33"], ["iron-trashdump-42x34", "WideChests_iron-chest-trashdump-42x34"], ["iron-trashdump-42x35", "WideChests_iron-chest-trashdump-42x35"], ["iron-trashdump-42x36", "WideChests_iron-chest-trashdump-42x36"], ["iron-trashdump-42x37", "WideChests_iron-chest-trashdump-42x37"], ["iron-trashdump-42x38", "WideChests_iron-chest-trashdump-42x38"], ["iron-trashdump-42x39", "WideChests_iron-chest-trashdump-42x39"], ["iron-trashdump-42x40", "WideChests_iron-chest-trashdump-42x40"], ["iron-trashdump-42x41", "WideChests_iron-chest-trashdump-42x41"], ["iron-trashdump-42x42", "WideChests_iron-chest-trashdump-42x42"], ["wide-steel-chest-2", "WideChests_wide-steel-chest-2"], ["wide-steel-chest-3", "WideChests_wide-steel-chest-3"], ["wide-steel-chest-4", "WideChests_wide-steel-chest-4"], ["wide-steel-chest-5", "WideChests_wide-steel-chest-5"], ["wide-steel-chest-6", "WideChests_wide-steel-chest-6"], ["wide-steel-chest-7", "WideChests_wide-steel-chest-7"], ["wide-steel-chest-8", "WideChests_wide-steel-chest-8"], ["wide-steel-chest-9", "WideChests_wide-steel-chest-9"], ["wide-steel-chest-10", "WideChests_wide-steel-chest-10"], ["wide-steel-chest-11", "WideChests_wide-steel-chest-11"], ["wide-steel-chest-12", "WideChests_wide-steel-chest-12"], ["wide-steel-chest-13", "WideChests_wide-steel-chest-13"], ["wide-steel-chest-14", "WideChests_wide-steel-chest-14"], ["wide-steel-chest-15", "WideChests_wide-steel-chest-15"], ["wide-steel-chest-16", "WideChests_wide-steel-chest-16"], ["wide-steel-chest-17", "WideChests_wide-steel-chest-17"], ["wide-steel-chest-18", "WideChests_wide-steel-chest-18"], ["wide-steel-chest-19", "WideChests_wide-steel-chest-19"], ["wide-steel-chest-20", "WideChests_wide-steel-chest-20"], ["wide-steel-chest-21", "WideChests_wide-steel-chest-21"], ["wide-steel-chest-22", "WideChests_wide-steel-chest-22"], ["wide-steel-chest-23", "WideChests_wide-steel-chest-23"], ["wide-steel-chest-24", "WideChests_wide-steel-chest-24"], ["wide-steel-chest-25", "WideChests_wide-steel-chest-25"], ["wide-steel-chest-26", "WideChests_wide-steel-chest-26"], ["wide-steel-chest-27", "WideChests_wide-steel-chest-27"], ["wide-steel-chest-28", "WideChests_wide-steel-chest-28"], ["wide-steel-chest-29", "WideChests_wide-steel-chest-29"], ["wide-steel-chest-30", "WideChests_wide-steel-chest-30"], ["wide-steel-chest-31", "WideChests_wide-steel-chest-31"], ["wide-steel-chest-32", "WideChests_wide-steel-chest-32"], ["wide-steel-chest-33", "WideChests_wide-steel-chest-33"], ["wide-steel-chest-34", "WideChests_wide-steel-chest-34"], ["wide-steel-chest-35", "WideChests_wide-steel-chest-35"], ["wide-steel-chest-36", "WideChests_wide-steel-chest-36"], ["wide-steel-chest-37", "WideChests_wide-steel-chest-37"], ["wide-steel-chest-38", "WideChests_wide-steel-chest-38"], ["wide-steel-chest-39", "WideChests_wide-steel-chest-39"], ["wide-steel-chest-40", "WideChests_wide-steel-chest-40"], ["wide-steel-chest-41", "WideChests_wide-steel-chest-41"], ["wide-steel-chest-42", "WideChests_wide-steel-chest-42"], ["high-steel-chest-2", "WideChests_high-steel-chest-2"], ["high-steel-chest-3", "WideChests_high-steel-chest-3"], ["high-steel-chest-4", "WideChests_high-steel-chest-4"], ["high-steel-chest-5", "WideChests_high-steel-chest-5"], ["high-steel-chest-6", "WideChests_high-steel-chest-6"], ["high-steel-chest-7", "WideChests_high-steel-chest-7"], ["high-steel-chest-8", "WideChests_high-steel-chest-8"], ["high-steel-chest-9", "WideChests_high-steel-chest-9"], ["high-steel-chest-10", "WideChests_high-steel-chest-10"], ["high-steel-chest-11", "WideChests_high-steel-chest-11"], ["high-steel-chest-12", "WideChests_high-steel-chest-12"], ["high-steel-chest-13", "WideChests_high-steel-chest-13"], ["high-steel-chest-14", "WideChests_high-steel-chest-14"], ["high-steel-chest-15", "WideChests_high-steel-chest-15"], ["high-steel-chest-16", "WideChests_high-steel-chest-16"], ["high-steel-chest-17", "WideChests_high-steel-chest-17"], ["high-steel-chest-18", "WideChests_high-steel-chest-18"], ["high-steel-chest-19", "WideChests_high-steel-chest-19"], ["high-steel-chest-20", "WideChests_high-steel-chest-20"], ["high-steel-chest-21", "WideChests_high-steel-chest-21"], ["high-steel-chest-22", "WideChests_high-steel-chest-22"], ["high-steel-chest-23", "WideChests_high-steel-chest-23"], ["high-steel-chest-24", "WideChests_high-steel-chest-24"], ["high-steel-chest-25", "WideChests_high-steel-chest-25"], ["high-steel-chest-26", "WideChests_high-steel-chest-26"], ["high-steel-chest-27", "WideChests_high-steel-chest-27"], ["high-steel-chest-28", "WideChests_high-steel-chest-28"], ["high-steel-chest-29", "WideChests_high-steel-chest-29"], ["high-steel-chest-30", "WideChests_high-steel-chest-30"], ["high-steel-chest-31", "WideChests_high-steel-chest-31"], ["high-steel-chest-32", "WideChests_high-steel-chest-32"], ["high-steel-chest-33", "WideChests_high-steel-chest-33"], ["high-steel-chest-34", "WideChests_high-steel-chest-34"], ["high-steel-chest-35", "WideChests_high-steel-chest-35"], ["high-steel-chest-36", "WideChests_high-steel-chest-36"], ["high-steel-chest-37", "WideChests_high-steel-chest-37"], ["high-steel-chest-38", "WideChests_high-steel-chest-38"], ["high-steel-chest-39", "WideChests_high-steel-chest-39"], ["high-steel-chest-40", "WideChests_high-steel-chest-40"], ["high-steel-chest-41", "WideChests_high-steel-chest-41"], ["high-steel-chest-42", "WideChests_high-steel-chest-42"], ["steel-warehouse-2x2", "WideChests_steel-chest-warehouse-2x2"], ["steel-warehouse-2x3", "WideChests_steel-chest-warehouse-2x3"], ["steel-warehouse-2x4", "WideChests_steel-chest-warehouse-2x4"], ["steel-warehouse-2x5", "WideChests_steel-chest-warehouse-2x5"], ["steel-warehouse-2x6", "WideChests_steel-chest-warehouse-2x6"], ["steel-warehouse-2x7", "WideChests_steel-chest-warehouse-2x7"], ["steel-warehouse-2x8", "WideChests_steel-chest-warehouse-2x8"], ["steel-warehouse-2x9", "WideChests_steel-chest-warehouse-2x9"], ["steel-warehouse-2x10", "WideChests_steel-chest-warehouse-2x10"], ["steel-warehouse-2x11", "WideChests_steel-chest-warehouse-2x11"], ["steel-warehouse-2x12", "WideChests_steel-chest-warehouse-2x12"], ["steel-warehouse-2x13", "WideChests_steel-chest-warehouse-2x13"], ["steel-warehouse-2x14", "WideChests_steel-chest-warehouse-2x14"], ["steel-warehouse-2x15", "WideChests_steel-chest-warehouse-2x15"], ["steel-warehouse-2x16", "WideChests_steel-chest-warehouse-2x16"], ["steel-warehouse-2x17", "WideChests_steel-chest-warehouse-2x17"], ["steel-warehouse-2x18", "WideChests_steel-chest-warehouse-2x18"], ["steel-warehouse-2x19", "WideChests_steel-chest-warehouse-2x19"], ["steel-warehouse-2x20", "WideChests_steel-chest-warehouse-2x20"], ["steel-warehouse-2x21", "WideChests_steel-chest-warehouse-2x21"], ["steel-warehouse-2x22", "WideChests_steel-chest-warehouse-2x22"], ["steel-warehouse-2x23", "WideChests_steel-chest-warehouse-2x23"], ["steel-warehouse-2x24", "WideChests_steel-chest-warehouse-2x24"], ["steel-warehouse-2x25", "WideChests_steel-chest-warehouse-2x25"], ["steel-warehouse-2x26", "WideChests_steel-chest-warehouse-2x26"], ["steel-warehouse-2x27", "WideChests_steel-chest-warehouse-2x27"], ["steel-warehouse-2x28", "WideChests_steel-chest-warehouse-2x28"], ["steel-warehouse-2x29", "WideChests_steel-chest-warehouse-2x29"], ["steel-warehouse-2x30", "WideChests_steel-chest-warehouse-2x30"], ["steel-warehouse-2x31", "WideChests_steel-chest-warehouse-2x31"], ["steel-warehouse-2x32", "WideChests_steel-chest-warehouse-2x32"], ["steel-warehouse-2x33", "WideChests_steel-chest-warehouse-2x33"], ["steel-warehouse-2x34", "WideChests_steel-chest-warehouse-2x34"], ["steel-warehouse-2x35", "WideChests_steel-chest-warehouse-2x35"], ["steel-warehouse-2x36", "WideChests_steel-chest-warehouse-2x36"], ["steel-warehouse-2x37", "WideChests_steel-chest-warehouse-2x37"], ["steel-warehouse-2x38", "WideChests_steel-chest-warehouse-2x38"], ["steel-warehouse-2x39", "WideChests_steel-chest-warehouse-2x39"], ["steel-warehouse-2x40", "WideChests_steel-chest-warehouse-2x40"], ["steel-warehouse-2x41", "WideChests_steel-chest-warehouse-2x41"], ["steel-warehouse-2x42", "WideChests_steel-chest-warehouse-2x42"], ["steel-warehouse-3x2", "WideChests_steel-chest-warehouse-3x2"], ["steel-warehouse-3x3", "WideChests_steel-chest-warehouse-3x3"], ["steel-warehouse-3x4", "WideChests_steel-chest-warehouse-3x4"], ["steel-warehouse-3x5", "WideChests_steel-chest-warehouse-3x5"], ["steel-warehouse-3x6", "WideChests_steel-chest-warehouse-3x6"], ["steel-warehouse-3x7", "WideChests_steel-chest-warehouse-3x7"], ["steel-warehouse-3x8", "WideChests_steel-chest-warehouse-3x8"], ["steel-warehouse-3x9", "WideChests_steel-chest-warehouse-3x9"], ["steel-warehouse-3x10", "WideChests_steel-chest-warehouse-3x10"], ["steel-warehouse-3x11", "WideChests_steel-chest-warehouse-3x11"], ["steel-warehouse-3x12", "WideChests_steel-chest-warehouse-3x12"], ["steel-warehouse-3x13", "WideChests_steel-chest-warehouse-3x13"], ["steel-warehouse-3x14", "WideChests_steel-chest-warehouse-3x14"], ["steel-warehouse-3x15", "WideChests_steel-chest-warehouse-3x15"], ["steel-warehouse-3x16", "WideChests_steel-chest-warehouse-3x16"], ["steel-warehouse-3x17", "WideChests_steel-chest-warehouse-3x17"], ["steel-warehouse-3x18", "WideChests_steel-chest-warehouse-3x18"], ["steel-warehouse-3x19", "WideChests_steel-chest-warehouse-3x19"], ["steel-warehouse-3x20", "WideChests_steel-chest-warehouse-3x20"], ["steel-warehouse-3x21", "WideChests_steel-chest-warehouse-3x21"], ["steel-warehouse-3x22", "WideChests_steel-chest-warehouse-3x22"], ["steel-warehouse-3x23", "WideChests_steel-chest-warehouse-3x23"], ["steel-warehouse-3x24", "WideChests_steel-chest-warehouse-3x24"], ["steel-warehouse-3x25", "WideChests_steel-chest-warehouse-3x25"], ["steel-warehouse-3x26", "WideChests_steel-chest-warehouse-3x26"], ["steel-warehouse-3x27", "WideChests_steel-chest-warehouse-3x27"], ["steel-warehouse-3x28", "WideChests_steel-chest-warehouse-3x28"], ["steel-warehouse-3x29", "WideChests_steel-chest-warehouse-3x29"], ["steel-warehouse-3x30", "WideChests_steel-chest-warehouse-3x30"], ["steel-warehouse-3x31", "WideChests_steel-chest-warehouse-3x31"], ["steel-warehouse-3x32", "WideChests_steel-chest-warehouse-3x32"], ["steel-warehouse-3x33", "WideChests_steel-chest-warehouse-3x33"], ["steel-warehouse-3x34", "WideChests_steel-chest-warehouse-3x34"], ["steel-warehouse-3x35", "WideChests_steel-chest-warehouse-3x35"], ["steel-warehouse-3x36", "WideChests_steel-chest-warehouse-3x36"], ["steel-warehouse-3x37", "WideChests_steel-chest-warehouse-3x37"], ["steel-warehouse-3x38", "WideChests_steel-chest-warehouse-3x38"], ["steel-warehouse-3x39", "WideChests_steel-chest-warehouse-3x39"], ["steel-warehouse-3x40", "WideChests_steel-chest-warehouse-3x40"], ["steel-warehouse-3x41", "WideChests_steel-chest-warehouse-3x41"], ["steel-warehouse-3x42", "WideChests_steel-chest-warehouse-3x42"], ["steel-warehouse-4x2", "WideChests_steel-chest-warehouse-4x2"], ["steel-warehouse-4x3", "WideChests_steel-chest-warehouse-4x3"], ["steel-warehouse-4x4", "WideChests_steel-chest-warehouse-4x4"], ["steel-warehouse-4x5", "WideChests_steel-chest-warehouse-4x5"], ["steel-warehouse-4x6", "WideChests_steel-chest-warehouse-4x6"], ["steel-warehouse-4x7", "WideChests_steel-chest-warehouse-4x7"], ["steel-warehouse-4x8", "WideChests_steel-chest-warehouse-4x8"], ["steel-warehouse-4x9", "WideChests_steel-chest-warehouse-4x9"], ["steel-warehouse-4x10", "WideChests_steel-chest-warehouse-4x10"], ["steel-warehouse-4x11", "WideChests_steel-chest-warehouse-4x11"], ["steel-warehouse-4x12", "WideChests_steel-chest-warehouse-4x12"], ["steel-warehouse-4x13", "WideChests_steel-chest-warehouse-4x13"], ["steel-warehouse-4x14", "WideChests_steel-chest-warehouse-4x14"], ["steel-warehouse-4x15", "WideChests_steel-chest-warehouse-4x15"], ["steel-warehouse-4x16", "WideChests_steel-chest-warehouse-4x16"], ["steel-warehouse-4x17", "WideChests_steel-chest-warehouse-4x17"], ["steel-warehouse-4x18", "WideChests_steel-chest-warehouse-4x18"], ["steel-warehouse-4x19", "WideChests_steel-chest-warehouse-4x19"], ["steel-warehouse-4x20", "WideChests_steel-chest-warehouse-4x20"], ["steel-warehouse-4x21", "WideChests_steel-chest-warehouse-4x21"], ["steel-warehouse-4x22", "WideChests_steel-chest-warehouse-4x22"], ["steel-warehouse-4x23", "WideChests_steel-chest-warehouse-4x23"], ["steel-warehouse-4x24", "WideChests_steel-chest-warehouse-4x24"], ["steel-warehouse-4x25", "WideChests_steel-chest-warehouse-4x25"], ["steel-warehouse-4x26", "WideChests_steel-chest-warehouse-4x26"], ["steel-warehouse-4x27", "WideChests_steel-chest-warehouse-4x27"], ["steel-warehouse-4x28", "WideChests_steel-chest-warehouse-4x28"], ["steel-warehouse-4x29", "WideChests_steel-chest-warehouse-4x29"], ["steel-warehouse-4x30", "WideChests_steel-chest-warehouse-4x30"], ["steel-warehouse-4x31", "WideChests_steel-chest-warehouse-4x31"], ["steel-warehouse-4x32", "WideChests_steel-chest-warehouse-4x32"], ["steel-warehouse-4x33", "WideChests_steel-chest-warehouse-4x33"], ["steel-warehouse-4x34", "WideChests_steel-chest-warehouse-4x34"], ["steel-warehouse-4x35", "WideChests_steel-chest-warehouse-4x35"], ["steel-warehouse-4x36", "WideChests_steel-chest-warehouse-4x36"], ["steel-warehouse-4x37", "WideChests_steel-chest-warehouse-4x37"], ["steel-warehouse-4x38", "WideChests_steel-chest-warehouse-4x38"], ["steel-warehouse-4x39", "WideChests_steel-chest-warehouse-4x39"], ["steel-warehouse-4x40", "WideChests_steel-chest-warehouse-4x40"], ["steel-warehouse-4x41", "WideChests_steel-chest-warehouse-4x41"], ["steel-warehouse-4x42", "WideChests_steel-chest-warehouse-4x42"], ["steel-warehouse-5x2", "WideChests_steel-chest-warehouse-5x2"], ["steel-warehouse-5x3", "WideChests_steel-chest-warehouse-5x3"], ["steel-warehouse-5x4", "WideChests_steel-chest-warehouse-5x4"], ["steel-warehouse-5x5", "WideChests_steel-chest-warehouse-5x5"], ["steel-warehouse-5x6", "WideChests_steel-chest-warehouse-5x6"], ["steel-warehouse-5x7", "WideChests_steel-chest-warehouse-5x7"], ["steel-warehouse-5x8", "WideChests_steel-chest-warehouse-5x8"], ["steel-warehouse-5x9", "WideChests_steel-chest-warehouse-5x9"], ["steel-warehouse-5x10", "WideChests_steel-chest-warehouse-5x10"], ["steel-warehouse-5x11", "WideChests_steel-chest-warehouse-5x11"], ["steel-warehouse-5x12", "WideChests_steel-chest-warehouse-5x12"], ["steel-warehouse-5x13", "WideChests_steel-chest-warehouse-5x13"], ["steel-warehouse-5x14", "WideChests_steel-chest-warehouse-5x14"], ["steel-warehouse-5x15", "WideChests_steel-chest-warehouse-5x15"], ["steel-warehouse-5x16", "WideChests_steel-chest-warehouse-5x16"], ["steel-warehouse-5x17", "WideChests_steel-chest-warehouse-5x17"], ["steel-warehouse-5x18", "WideChests_steel-chest-warehouse-5x18"], ["steel-warehouse-5x19", "WideChests_steel-chest-warehouse-5x19"], ["steel-warehouse-5x20", "WideChests_steel-chest-warehouse-5x20"], ["steel-warehouse-5x21", "WideChests_steel-chest-warehouse-5x21"], ["steel-warehouse-5x22", "WideChests_steel-chest-warehouse-5x22"], ["steel-warehouse-5x23", "WideChests_steel-chest-warehouse-5x23"], ["steel-warehouse-5x24", "WideChests_steel-chest-warehouse-5x24"], ["steel-warehouse-5x25", "WideChests_steel-chest-warehouse-5x25"], ["steel-warehouse-5x26", "WideChests_steel-chest-warehouse-5x26"], ["steel-warehouse-5x27", "WideChests_steel-chest-warehouse-5x27"], ["steel-warehouse-5x28", "WideChests_steel-chest-warehouse-5x28"], ["steel-warehouse-5x29", "WideChests_steel-chest-warehouse-5x29"], ["steel-warehouse-5x30", "WideChests_steel-chest-warehouse-5x30"], ["steel-warehouse-5x31", "WideChests_steel-chest-warehouse-5x31"], ["steel-warehouse-5x32", "WideChests_steel-chest-warehouse-5x32"], ["steel-warehouse-5x33", "WideChests_steel-chest-warehouse-5x33"], ["steel-warehouse-5x34", "WideChests_steel-chest-warehouse-5x34"], ["steel-warehouse-5x35", "WideChests_steel-chest-warehouse-5x35"], ["steel-warehouse-5x36", "WideChests_steel-chest-warehouse-5x36"], ["steel-warehouse-5x37", "WideChests_steel-chest-warehouse-5x37"], ["steel-warehouse-5x38", "WideChests_steel-chest-warehouse-5x38"], ["steel-warehouse-5x39", "WideChests_steel-chest-warehouse-5x39"], ["steel-warehouse-5x40", "WideChests_steel-chest-warehouse-5x40"], ["steel-warehouse-5x41", "WideChests_steel-chest-warehouse-5x41"], ["steel-warehouse-5x42", "WideChests_steel-chest-warehouse-5x42"], ["steel-warehouse-6x2", "WideChests_steel-chest-warehouse-6x2"], ["steel-warehouse-6x3", "WideChests_steel-chest-warehouse-6x3"], ["steel-warehouse-6x4", "WideChests_steel-chest-warehouse-6x4"], ["steel-warehouse-6x5", "WideChests_steel-chest-warehouse-6x5"], ["steel-warehouse-7x2", "WideChests_steel-chest-warehouse-7x2"], ["steel-warehouse-7x3", "WideChests_steel-chest-warehouse-7x3"], ["steel-warehouse-7x4", "WideChests_steel-chest-warehouse-7x4"], ["steel-warehouse-7x5", "WideChests_steel-chest-warehouse-7x5"], ["steel-warehouse-8x2", "WideChests_steel-chest-warehouse-8x2"], ["steel-warehouse-8x3", "WideChests_steel-chest-warehouse-8x3"], ["steel-warehouse-8x4", "WideChests_steel-chest-warehouse-8x4"], ["steel-warehouse-8x5", "WideChests_steel-chest-warehouse-8x5"], ["steel-warehouse-9x2", "WideChests_steel-chest-warehouse-9x2"], ["steel-warehouse-9x3", "WideChests_steel-chest-warehouse-9x3"], ["steel-warehouse-9x4", "WideChests_steel-chest-warehouse-9x4"], ["steel-warehouse-9x5", "WideChests_steel-chest-warehouse-9x5"], ["steel-warehouse-10x2", "WideChests_steel-chest-warehouse-10x2"], ["steel-warehouse-10x3", "WideChests_steel-chest-warehouse-10x3"], ["steel-warehouse-10x4", "WideChests_steel-chest-warehouse-10x4"], ["steel-warehouse-10x5", "WideChests_steel-chest-warehouse-10x5"], ["steel-warehouse-11x2", "WideChests_steel-chest-warehouse-11x2"], ["steel-warehouse-11x3", "WideChests_steel-chest-warehouse-11x3"], ["steel-warehouse-11x4", "WideChests_steel-chest-warehouse-11x4"], ["steel-warehouse-11x5", "WideChests_steel-chest-warehouse-11x5"], ["steel-warehouse-12x2", "WideChests_steel-chest-warehouse-12x2"], ["steel-warehouse-12x3", "WideChests_steel-chest-warehouse-12x3"], ["steel-warehouse-12x4", "WideChests_steel-chest-warehouse-12x4"], ["steel-warehouse-12x5", "WideChests_steel-chest-warehouse-12x5"], ["steel-warehouse-13x2", "WideChests_steel-chest-warehouse-13x2"], ["steel-warehouse-13x3", "WideChests_steel-chest-warehouse-13x3"], ["steel-warehouse-13x4", "WideChests_steel-chest-warehouse-13x4"], ["steel-warehouse-13x5", "WideChests_steel-chest-warehouse-13x5"], ["steel-warehouse-14x2", "WideChests_steel-chest-warehouse-14x2"], ["steel-warehouse-14x3", "WideChests_steel-chest-warehouse-14x3"], ["steel-warehouse-14x4", "WideChests_steel-chest-warehouse-14x4"], ["steel-warehouse-14x5", "WideChests_steel-chest-warehouse-14x5"], ["steel-warehouse-15x2", "WideChests_steel-chest-warehouse-15x2"], ["steel-warehouse-15x3", "WideChests_steel-chest-warehouse-15x3"], ["steel-warehouse-15x4", "WideChests_steel-chest-warehouse-15x4"], ["steel-warehouse-15x5", "WideChests_steel-chest-warehouse-15x5"], ["steel-warehouse-16x2", "WideChests_steel-chest-warehouse-16x2"], ["steel-warehouse-16x3", "WideChests_steel-chest-warehouse-16x3"], ["steel-warehouse-16x4", "WideChests_steel-chest-warehouse-16x4"], ["steel-warehouse-16x5", "WideChests_steel-chest-warehouse-16x5"], ["steel-warehouse-17x2", "WideChests_steel-chest-warehouse-17x2"], ["steel-warehouse-17x3", "WideChests_steel-chest-warehouse-17x3"], ["steel-warehouse-17x4", "WideChests_steel-chest-warehouse-17x4"], ["steel-warehouse-17x5", "WideChests_steel-chest-warehouse-17x5"], ["steel-warehouse-18x2", "WideChests_steel-chest-warehouse-18x2"], ["steel-warehouse-18x3", "WideChests_steel-chest-warehouse-18x3"], ["steel-warehouse-18x4", "WideChests_steel-chest-warehouse-18x4"], ["steel-warehouse-18x5", "WideChests_steel-chest-warehouse-18x5"], ["steel-warehouse-19x2", "WideChests_steel-chest-warehouse-19x2"], ["steel-warehouse-19x3", "WideChests_steel-chest-warehouse-19x3"], ["steel-warehouse-19x4", "WideChests_steel-chest-warehouse-19x4"], ["steel-warehouse-19x5", "WideChests_steel-chest-warehouse-19x5"], ["steel-warehouse-20x2", "WideChests_steel-chest-warehouse-20x2"], ["steel-warehouse-20x3", "WideChests_steel-chest-warehouse-20x3"], ["steel-warehouse-20x4", "WideChests_steel-chest-warehouse-20x4"], ["steel-warehouse-20x5", "WideChests_steel-chest-warehouse-20x5"], ["steel-warehouse-21x2", "WideChests_steel-chest-warehouse-21x2"], ["steel-warehouse-21x3", "WideChests_steel-chest-warehouse-21x3"], ["steel-warehouse-21x4", "WideChests_steel-chest-warehouse-21x4"], ["steel-warehouse-21x5", "WideChests_steel-chest-warehouse-21x5"], ["steel-warehouse-22x2", "WideChests_steel-chest-warehouse-22x2"], ["steel-warehouse-22x3", "WideChests_steel-chest-warehouse-22x3"], ["steel-warehouse-22x4", "WideChests_steel-chest-warehouse-22x4"], ["steel-warehouse-22x5", "WideChests_steel-chest-warehouse-22x5"], ["steel-warehouse-23x2", "WideChests_steel-chest-warehouse-23x2"], ["steel-warehouse-23x3", "WideChests_steel-chest-warehouse-23x3"], ["steel-warehouse-23x4", "WideChests_steel-chest-warehouse-23x4"], ["steel-warehouse-23x5", "WideChests_steel-chest-warehouse-23x5"], ["steel-warehouse-24x2", "WideChests_steel-chest-warehouse-24x2"], ["steel-warehouse-24x3", "WideChests_steel-chest-warehouse-24x3"], ["steel-warehouse-24x4", "WideChests_steel-chest-warehouse-24x4"], ["steel-warehouse-24x5", "WideChests_steel-chest-warehouse-24x5"], ["steel-warehouse-25x2", "WideChests_steel-chest-warehouse-25x2"], ["steel-warehouse-25x3", "WideChests_steel-chest-warehouse-25x3"], ["steel-warehouse-25x4", "WideChests_steel-chest-warehouse-25x4"], ["steel-warehouse-25x5", "WideChests_steel-chest-warehouse-25x5"], ["steel-warehouse-26x2", "WideChests_steel-chest-warehouse-26x2"], ["steel-warehouse-26x3", "WideChests_steel-chest-warehouse-26x3"], ["steel-warehouse-26x4", "WideChests_steel-chest-warehouse-26x4"], ["steel-warehouse-26x5", "WideChests_steel-chest-warehouse-26x5"], ["steel-warehouse-27x2", "WideChests_steel-chest-warehouse-27x2"], ["steel-warehouse-27x3", "WideChests_steel-chest-warehouse-27x3"], ["steel-warehouse-27x4", "WideChests_steel-chest-warehouse-27x4"], ["steel-warehouse-27x5", "WideChests_steel-chest-warehouse-27x5"], ["steel-warehouse-28x2", "WideChests_steel-chest-warehouse-28x2"], ["steel-warehouse-28x3", "WideChests_steel-chest-warehouse-28x3"], ["steel-warehouse-28x4", "WideChests_steel-chest-warehouse-28x4"], ["steel-warehouse-28x5", "WideChests_steel-chest-warehouse-28x5"], ["steel-warehouse-29x2", "WideChests_steel-chest-warehouse-29x2"], ["steel-warehouse-29x3", "WideChests_steel-chest-warehouse-29x3"], ["steel-warehouse-29x4", "WideChests_steel-chest-warehouse-29x4"], ["steel-warehouse-29x5", "WideChests_steel-chest-warehouse-29x5"], ["steel-warehouse-30x2", "WideChests_steel-chest-warehouse-30x2"], ["steel-warehouse-30x3", "WideChests_steel-chest-warehouse-30x3"], ["steel-warehouse-30x4", "WideChests_steel-chest-warehouse-30x4"], ["steel-warehouse-30x5", "WideChests_steel-chest-warehouse-30x5"], ["steel-warehouse-31x2", "WideChests_steel-chest-warehouse-31x2"], ["steel-warehouse-31x3", "WideChests_steel-chest-warehouse-31x3"], ["steel-warehouse-31x4", "WideChests_steel-chest-warehouse-31x4"], ["steel-warehouse-31x5", "WideChests_steel-chest-warehouse-31x5"], ["steel-warehouse-32x2", "WideChests_steel-chest-warehouse-32x2"], ["steel-warehouse-32x3", "WideChests_steel-chest-warehouse-32x3"], ["steel-warehouse-32x4", "WideChests_steel-chest-warehouse-32x4"], ["steel-warehouse-32x5", "WideChests_steel-chest-warehouse-32x5"], ["steel-warehouse-33x2", "WideChests_steel-chest-warehouse-33x2"], ["steel-warehouse-33x3", "WideChests_steel-chest-warehouse-33x3"], ["steel-warehouse-33x4", "WideChests_steel-chest-warehouse-33x4"], ["steel-warehouse-33x5", "WideChests_steel-chest-warehouse-33x5"], ["steel-warehouse-34x2", "WideChests_steel-chest-warehouse-34x2"], ["steel-warehouse-34x3", "WideChests_steel-chest-warehouse-34x3"], ["steel-warehouse-34x4", "WideChests_steel-chest-warehouse-34x4"], ["steel-warehouse-34x5", "WideChests_steel-chest-warehouse-34x5"], ["steel-warehouse-35x2", "WideChests_steel-chest-warehouse-35x2"], ["steel-warehouse-35x3", "WideChests_steel-chest-warehouse-35x3"], ["steel-warehouse-35x4", "WideChests_steel-chest-warehouse-35x4"], ["steel-warehouse-35x5", "WideChests_steel-chest-warehouse-35x5"], ["steel-warehouse-36x2", "WideChests_steel-chest-warehouse-36x2"], ["steel-warehouse-36x3", "WideChests_steel-chest-warehouse-36x3"], ["steel-warehouse-36x4", "WideChests_steel-chest-warehouse-36x4"], ["steel-warehouse-36x5", "WideChests_steel-chest-warehouse-36x5"], ["steel-warehouse-37x2", "WideChests_steel-chest-warehouse-37x2"], ["steel-warehouse-37x3", "WideChests_steel-chest-warehouse-37x3"], ["steel-warehouse-37x4", "WideChests_steel-chest-warehouse-37x4"], ["steel-warehouse-37x5", "WideChests_steel-chest-warehouse-37x5"], ["steel-warehouse-38x2", "WideChests_steel-chest-warehouse-38x2"], ["steel-warehouse-38x3", "WideChests_steel-chest-warehouse-38x3"], ["steel-warehouse-38x4", "WideChests_steel-chest-warehouse-38x4"], ["steel-warehouse-38x5", "WideChests_steel-chest-warehouse-38x5"], ["steel-warehouse-39x2", "WideChests_steel-chest-warehouse-39x2"], ["steel-warehouse-39x3", "WideChests_steel-chest-warehouse-39x3"], ["steel-warehouse-39x4", "WideChests_steel-chest-warehouse-39x4"], ["steel-warehouse-39x5", "WideChests_steel-chest-warehouse-39x5"], ["steel-warehouse-40x2", "WideChests_steel-chest-warehouse-40x2"], ["steel-warehouse-40x3", "WideChests_steel-chest-warehouse-40x3"], ["steel-warehouse-40x4", "WideChests_steel-chest-warehouse-40x4"], ["steel-warehouse-40x5", "WideChests_steel-chest-warehouse-40x5"], ["steel-warehouse-41x2", "WideChests_steel-chest-warehouse-41x2"], ["steel-warehouse-41x3", "WideChests_steel-chest-warehouse-41x3"], ["steel-warehouse-41x4", "WideChests_steel-chest-warehouse-41x4"], ["steel-warehouse-41x5", "WideChests_steel-chest-warehouse-41x5"], ["steel-warehouse-42x2", "WideChests_steel-chest-warehouse-42x2"], ["steel-warehouse-42x3", "WideChests_steel-chest-warehouse-42x3"], ["steel-warehouse-42x4", "WideChests_steel-chest-warehouse-42x4"], ["steel-warehouse-42x5", "WideChests_steel-chest-warehouse-42x5"], ["steel-trashdump-6x6", "WideChests_steel-chest-trashdump-6x6"], ["steel-trashdump-6x7", "WideChests_steel-chest-trashdump-6x7"], ["steel-trashdump-6x8", "WideChests_steel-chest-trashdump-6x8"], ["steel-trashdump-6x9", "WideChests_steel-chest-trashdump-6x9"], ["steel-trashdump-6x10", "WideChests_steel-chest-trashdump-6x10"], ["steel-trashdump-6x11", "WideChests_steel-chest-trashdump-6x11"], ["steel-trashdump-6x12", "WideChests_steel-chest-trashdump-6x12"], ["steel-trashdump-6x13", "WideChests_steel-chest-trashdump-6x13"], ["steel-trashdump-6x14", "WideChests_steel-chest-trashdump-6x14"], ["steel-trashdump-6x15", "WideChests_steel-chest-trashdump-6x15"], ["steel-trashdump-6x16", "WideChests_steel-chest-trashdump-6x16"], ["steel-trashdump-6x17", "WideChests_steel-chest-trashdump-6x17"], ["steel-trashdump-6x18", "WideChests_steel-chest-trashdump-6x18"], ["steel-trashdump-6x19", "WideChests_steel-chest-trashdump-6x19"], ["steel-trashdump-6x20", "WideChests_steel-chest-trashdump-6x20"], ["steel-trashdump-6x21", "WideChests_steel-chest-trashdump-6x21"], ["steel-trashdump-6x22", "WideChests_steel-chest-trashdump-6x22"], ["steel-trashdump-6x23", "WideChests_steel-chest-trashdump-6x23"], ["steel-trashdump-6x24", "WideChests_steel-chest-trashdump-6x24"], ["steel-trashdump-6x25", "WideChests_steel-chest-trashdump-6x25"], ["steel-trashdump-6x26", "WideChests_steel-chest-trashdump-6x26"], ["steel-trashdump-6x27", "WideChests_steel-chest-trashdump-6x27"], ["steel-trashdump-6x28", "WideChests_steel-chest-trashdump-6x28"], ["steel-trashdump-6x29", "WideChests_steel-chest-trashdump-6x29"], ["steel-trashdump-6x30", "WideChests_steel-chest-trashdump-6x30"], ["steel-trashdump-6x31", "WideChests_steel-chest-trashdump-6x31"], ["steel-trashdump-6x32", "WideChests_steel-chest-trashdump-6x32"], ["steel-trashdump-6x33", "WideChests_steel-chest-trashdump-6x33"], ["steel-trashdump-6x34", "WideChests_steel-chest-trashdump-6x34"], ["steel-trashdump-6x35", "WideChests_steel-chest-trashdump-6x35"], ["steel-trashdump-6x36", "WideChests_steel-chest-trashdump-6x36"], ["steel-trashdump-6x37", "WideChests_steel-chest-trashdump-6x37"], ["steel-trashdump-6x38", "WideChests_steel-chest-trashdump-6x38"], ["steel-trashdump-6x39", "WideChests_steel-chest-trashdump-6x39"], ["steel-trashdump-6x40", "WideChests_steel-chest-trashdump-6x40"], ["steel-trashdump-6x41", "WideChests_steel-chest-trashdump-6x41"], ["steel-trashdump-6x42", "WideChests_steel-chest-trashdump-6x42"], ["steel-trashdump-7x6", "WideChests_steel-chest-trashdump-7x6"], ["steel-trashdump-7x7", "WideChests_steel-chest-trashdump-7x7"], ["steel-trashdump-7x8", "WideChests_steel-chest-trashdump-7x8"], ["steel-trashdump-7x9", "WideChests_steel-chest-trashdump-7x9"], ["steel-trashdump-7x10", "WideChests_steel-chest-trashdump-7x10"], ["steel-trashdump-7x11", "WideChests_steel-chest-trashdump-7x11"], ["steel-trashdump-7x12", "WideChests_steel-chest-trashdump-7x12"], ["steel-trashdump-7x13", "WideChests_steel-chest-trashdump-7x13"], ["steel-trashdump-7x14", "WideChests_steel-chest-trashdump-7x14"], ["steel-trashdump-7x15", "WideChests_steel-chest-trashdump-7x15"], ["steel-trashdump-7x16", "WideChests_steel-chest-trashdump-7x16"], ["steel-trashdump-7x17", "WideChests_steel-chest-trashdump-7x17"], ["steel-trashdump-7x18", "WideChests_steel-chest-trashdump-7x18"], ["steel-trashdump-7x19", "WideChests_steel-chest-trashdump-7x19"], ["steel-trashdump-7x20", "WideChests_steel-chest-trashdump-7x20"], ["steel-trashdump-7x21", "WideChests_steel-chest-trashdump-7x21"], ["steel-trashdump-7x22", "WideChests_steel-chest-trashdump-7x22"], ["steel-trashdump-7x23", "WideChests_steel-chest-trashdump-7x23"], ["steel-trashdump-7x24", "WideChests_steel-chest-trashdump-7x24"], ["steel-trashdump-7x25", "WideChests_steel-chest-trashdump-7x25"], ["steel-trashdump-7x26", "WideChests_steel-chest-trashdump-7x26"], ["steel-trashdump-7x27", "WideChests_steel-chest-trashdump-7x27"], ["steel-trashdump-7x28", "WideChests_steel-chest-trashdump-7x28"], ["steel-trashdump-7x29", "WideChests_steel-chest-trashdump-7x29"], ["steel-trashdump-7x30", "WideChests_steel-chest-trashdump-7x30"], ["steel-trashdump-7x31", "WideChests_steel-chest-trashdump-7x31"], ["steel-trashdump-7x32", "WideChests_steel-chest-trashdump-7x32"], ["steel-trashdump-7x33", "WideChests_steel-chest-trashdump-7x33"], ["steel-trashdump-7x34", "WideChests_steel-chest-trashdump-7x34"], ["steel-trashdump-7x35", "WideChests_steel-chest-trashdump-7x35"], ["steel-trashdump-7x36", "WideChests_steel-chest-trashdump-7x36"], ["steel-trashdump-7x37", "WideChests_steel-chest-trashdump-7x37"], ["steel-trashdump-7x38", "WideChests_steel-chest-trashdump-7x38"], ["steel-trashdump-7x39", "WideChests_steel-chest-trashdump-7x39"], ["steel-trashdump-7x40", "WideChests_steel-chest-trashdump-7x40"], ["steel-trashdump-7x41", "WideChests_steel-chest-trashdump-7x41"], ["steel-trashdump-7x42", "WideChests_steel-chest-trashdump-7x42"], ["steel-trashdump-8x6", "WideChests_steel-chest-trashdump-8x6"], ["steel-trashdump-8x7", "WideChests_steel-chest-trashdump-8x7"], ["steel-trashdump-8x8", "WideChests_steel-chest-trashdump-8x8"], ["steel-trashdump-8x9", "WideChests_steel-chest-trashdump-8x9"], ["steel-trashdump-8x10", "WideChests_steel-chest-trashdump-8x10"], ["steel-trashdump-8x11", "WideChests_steel-chest-trashdump-8x11"], ["steel-trashdump-8x12", "WideChests_steel-chest-trashdump-8x12"], ["steel-trashdump-8x13", "WideChests_steel-chest-trashdump-8x13"], ["steel-trashdump-8x14", "WideChests_steel-chest-trashdump-8x14"], ["steel-trashdump-8x15", "WideChests_steel-chest-trashdump-8x15"], ["steel-trashdump-8x16", "WideChests_steel-chest-trashdump-8x16"], ["steel-trashdump-8x17", "WideChests_steel-chest-trashdump-8x17"], ["steel-trashdump-8x18", "WideChests_steel-chest-trashdump-8x18"], ["steel-trashdump-8x19", "WideChests_steel-chest-trashdump-8x19"], ["steel-trashdump-8x20", "WideChests_steel-chest-trashdump-8x20"], ["steel-trashdump-8x21", "WideChests_steel-chest-trashdump-8x21"], ["steel-trashdump-8x22", "WideChests_steel-chest-trashdump-8x22"], ["steel-trashdump-8x23", "WideChests_steel-chest-trashdump-8x23"], ["steel-trashdump-8x24", "WideChests_steel-chest-trashdump-8x24"], ["steel-trashdump-8x25", "WideChests_steel-chest-trashdump-8x25"], ["steel-trashdump-8x26", "WideChests_steel-chest-trashdump-8x26"], ["steel-trashdump-8x27", "WideChests_steel-chest-trashdump-8x27"], ["steel-trashdump-8x28", "WideChests_steel-chest-trashdump-8x28"], ["steel-trashdump-8x29", "WideChests_steel-chest-trashdump-8x29"], ["steel-trashdump-8x30", "WideChests_steel-chest-trashdump-8x30"], ["steel-trashdump-8x31", "WideChests_steel-chest-trashdump-8x31"], ["steel-trashdump-8x32", "WideChests_steel-chest-trashdump-8x32"], ["steel-trashdump-8x33", "WideChests_steel-chest-trashdump-8x33"], ["steel-trashdump-8x34", "WideChests_steel-chest-trashdump-8x34"], ["steel-trashdump-8x35", "WideChests_steel-chest-trashdump-8x35"], ["steel-trashdump-8x36", "WideChests_steel-chest-trashdump-8x36"], ["steel-trashdump-8x37", "WideChests_steel-chest-trashdump-8x37"], ["steel-trashdump-8x38", "WideChests_steel-chest-trashdump-8x38"], ["steel-trashdump-8x39", "WideChests_steel-chest-trashdump-8x39"], ["steel-trashdump-8x40", "WideChests_steel-chest-trashdump-8x40"], ["steel-trashdump-8x41", "WideChests_steel-chest-trashdump-8x41"], ["steel-trashdump-8x42", "WideChests_steel-chest-trashdump-8x42"], ["steel-trashdump-9x6", "WideChests_steel-chest-trashdump-9x6"], ["steel-trashdump-9x7", "WideChests_steel-chest-trashdump-9x7"], ["steel-trashdump-9x8", "WideChests_steel-chest-trashdump-9x8"], ["steel-trashdump-9x9", "WideChests_steel-chest-trashdump-9x9"], ["steel-trashdump-9x10", "WideChests_steel-chest-trashdump-9x10"], ["steel-trashdump-9x11", "WideChests_steel-chest-trashdump-9x11"], ["steel-trashdump-9x12", "WideChests_steel-chest-trashdump-9x12"], ["steel-trashdump-9x13", "WideChests_steel-chest-trashdump-9x13"], ["steel-trashdump-9x14", "WideChests_steel-chest-trashdump-9x14"], ["steel-trashdump-9x15", "WideChests_steel-chest-trashdump-9x15"], ["steel-trashdump-9x16", "WideChests_steel-chest-trashdump-9x16"], ["steel-trashdump-9x17", "WideChests_steel-chest-trashdump-9x17"], ["steel-trashdump-9x18", "WideChests_steel-chest-trashdump-9x18"], ["steel-trashdump-9x19", "WideChests_steel-chest-trashdump-9x19"], ["steel-trashdump-9x20", "WideChests_steel-chest-trashdump-9x20"], ["steel-trashdump-9x21", "WideChests_steel-chest-trashdump-9x21"], ["steel-trashdump-9x22", "WideChests_steel-chest-trashdump-9x22"], ["steel-trashdump-9x23", "WideChests_steel-chest-trashdump-9x23"], ["steel-trashdump-9x24", "WideChests_steel-chest-trashdump-9x24"], ["steel-trashdump-9x25", "WideChests_steel-chest-trashdump-9x25"], ["steel-trashdump-9x26", "WideChests_steel-chest-trashdump-9x26"], ["steel-trashdump-9x27", "WideChests_steel-chest-trashdump-9x27"], ["steel-trashdump-9x28", "WideChests_steel-chest-trashdump-9x28"], ["steel-trashdump-9x29", "WideChests_steel-chest-trashdump-9x29"], ["steel-trashdump-9x30", "WideChests_steel-chest-trashdump-9x30"], ["steel-trashdump-9x31", "WideChests_steel-chest-trashdump-9x31"], ["steel-trashdump-9x32", "WideChests_steel-chest-trashdump-9x32"], ["steel-trashdump-9x33", "WideChests_steel-chest-trashdump-9x33"], ["steel-trashdump-9x34", "WideChests_steel-chest-trashdump-9x34"], ["steel-trashdump-9x35", "WideChests_steel-chest-trashdump-9x35"], ["steel-trashdump-9x36", "WideChests_steel-chest-trashdump-9x36"], ["steel-trashdump-9x37", "WideChests_steel-chest-trashdump-9x37"], ["steel-trashdump-9x38", "WideChests_steel-chest-trashdump-9x38"], ["steel-trashdump-9x39", "WideChests_steel-chest-trashdump-9x39"], ["steel-trashdump-9x40", "WideChests_steel-chest-trashdump-9x40"], ["steel-trashdump-9x41", "WideChests_steel-chest-trashdump-9x41"], ["steel-trashdump-9x42", "WideChests_steel-chest-trashdump-9x42"], ["steel-trashdump-10x6", "WideChests_steel-chest-trashdump-10x6"], ["steel-trashdump-10x7", "WideChests_steel-chest-trashdump-10x7"], ["steel-trashdump-10x8", "WideChests_steel-chest-trashdump-10x8"], ["steel-trashdump-10x9", "WideChests_steel-chest-trashdump-10x9"], ["steel-trashdump-10x10", "WideChests_steel-chest-trashdump-10x10"], ["steel-trashdump-10x11", "WideChests_steel-chest-trashdump-10x11"], ["steel-trashdump-10x12", "WideChests_steel-chest-trashdump-10x12"], ["steel-trashdump-10x13", "WideChests_steel-chest-trashdump-10x13"], ["steel-trashdump-10x14", "WideChests_steel-chest-trashdump-10x14"], ["steel-trashdump-10x15", "WideChests_steel-chest-trashdump-10x15"], ["steel-trashdump-10x16", "WideChests_steel-chest-trashdump-10x16"], ["steel-trashdump-10x17", "WideChests_steel-chest-trashdump-10x17"], ["steel-trashdump-10x18", "WideChests_steel-chest-trashdump-10x18"], ["steel-trashdump-10x19", "WideChests_steel-chest-trashdump-10x19"], ["steel-trashdump-10x20", "WideChests_steel-chest-trashdump-10x20"], ["steel-trashdump-10x21", "WideChests_steel-chest-trashdump-10x21"], ["steel-trashdump-10x22", "WideChests_steel-chest-trashdump-10x22"], ["steel-trashdump-10x23", "WideChests_steel-chest-trashdump-10x23"], ["steel-trashdump-10x24", "WideChests_steel-chest-trashdump-10x24"], ["steel-trashdump-10x25", "WideChests_steel-chest-trashdump-10x25"], ["steel-trashdump-10x26", "WideChests_steel-chest-trashdump-10x26"], ["steel-trashdump-10x27", "WideChests_steel-chest-trashdump-10x27"], ["steel-trashdump-10x28", "WideChests_steel-chest-trashdump-10x28"], ["steel-trashdump-10x29", "WideChests_steel-chest-trashdump-10x29"], ["steel-trashdump-10x30", "WideChests_steel-chest-trashdump-10x30"], ["steel-trashdump-10x31", "WideChests_steel-chest-trashdump-10x31"], ["steel-trashdump-10x32", "WideChests_steel-chest-trashdump-10x32"], ["steel-trashdump-10x33", "WideChests_steel-chest-trashdump-10x33"], ["steel-trashdump-10x34", "WideChests_steel-chest-trashdump-10x34"], ["steel-trashdump-10x35", "WideChests_steel-chest-trashdump-10x35"], ["steel-trashdump-10x36", "WideChests_steel-chest-trashdump-10x36"], ["steel-trashdump-10x37", "WideChests_steel-chest-trashdump-10x37"], ["steel-trashdump-10x38", "WideChests_steel-chest-trashdump-10x38"], ["steel-trashdump-10x39", "WideChests_steel-chest-trashdump-10x39"], ["steel-trashdump-10x40", "WideChests_steel-chest-trashdump-10x40"], ["steel-trashdump-10x41", "WideChests_steel-chest-trashdump-10x41"], ["steel-trashdump-10x42", "WideChests_steel-chest-trashdump-10x42"], ["steel-trashdump-11x6", "WideChests_steel-chest-trashdump-11x6"], ["steel-trashdump-11x7", "WideChests_steel-chest-trashdump-11x7"], ["steel-trashdump-11x8", "WideChests_steel-chest-trashdump-11x8"], ["steel-trashdump-11x9", "WideChests_steel-chest-trashdump-11x9"], ["steel-trashdump-11x10", "WideChests_steel-chest-trashdump-11x10"], ["steel-trashdump-11x11", "WideChests_steel-chest-trashdump-11x11"], ["steel-trashdump-11x12", "WideChests_steel-chest-trashdump-11x12"], ["steel-trashdump-11x13", "WideChests_steel-chest-trashdump-11x13"], ["steel-trashdump-11x14", "WideChests_steel-chest-trashdump-11x14"], ["steel-trashdump-11x15", "WideChests_steel-chest-trashdump-11x15"], ["steel-trashdump-11x16", "WideChests_steel-chest-trashdump-11x16"], ["steel-trashdump-11x17", "WideChests_steel-chest-trashdump-11x17"], ["steel-trashdump-11x18", "WideChests_steel-chest-trashdump-11x18"], ["steel-trashdump-11x19", "WideChests_steel-chest-trashdump-11x19"], ["steel-trashdump-11x20", "WideChests_steel-chest-trashdump-11x20"], ["steel-trashdump-11x21", "WideChests_steel-chest-trashdump-11x21"], ["steel-trashdump-11x22", "WideChests_steel-chest-trashdump-11x22"], ["steel-trashdump-11x23", "WideChests_steel-chest-trashdump-11x23"], ["steel-trashdump-11x24", "WideChests_steel-chest-trashdump-11x24"], ["steel-trashdump-11x25", "WideChests_steel-chest-trashdump-11x25"], ["steel-trashdump-11x26", "WideChests_steel-chest-trashdump-11x26"], ["steel-trashdump-11x27", "WideChests_steel-chest-trashdump-11x27"], ["steel-trashdump-11x28", "WideChests_steel-chest-trashdump-11x28"], ["steel-trashdump-11x29", "WideChests_steel-chest-trashdump-11x29"], ["steel-trashdump-11x30", "WideChests_steel-chest-trashdump-11x30"], ["steel-trashdump-11x31", "WideChests_steel-chest-trashdump-11x31"], ["steel-trashdump-11x32", "WideChests_steel-chest-trashdump-11x32"], ["steel-trashdump-11x33", "WideChests_steel-chest-trashdump-11x33"], ["steel-trashdump-11x34", "WideChests_steel-chest-trashdump-11x34"], ["steel-trashdump-11x35", "WideChests_steel-chest-trashdump-11x35"], ["steel-trashdump-11x36", "WideChests_steel-chest-trashdump-11x36"], ["steel-trashdump-11x37", "WideChests_steel-chest-trashdump-11x37"], ["steel-trashdump-11x38", "WideChests_steel-chest-trashdump-11x38"], ["steel-trashdump-11x39", "WideChests_steel-chest-trashdump-11x39"], ["steel-trashdump-11x40", "WideChests_steel-chest-trashdump-11x40"], ["steel-trashdump-11x41", "WideChests_steel-chest-trashdump-11x41"], ["steel-trashdump-11x42", "WideChests_steel-chest-trashdump-11x42"], ["steel-trashdump-12x6", "WideChests_steel-chest-trashdump-12x6"], ["steel-trashdump-12x7", "WideChests_steel-chest-trashdump-12x7"], ["steel-trashdump-12x8", "WideChests_steel-chest-trashdump-12x8"], ["steel-trashdump-12x9", "WideChests_steel-chest-trashdump-12x9"], ["steel-trashdump-12x10", "WideChests_steel-chest-trashdump-12x10"], ["steel-trashdump-12x11", "WideChests_steel-chest-trashdump-12x11"], ["steel-trashdump-12x12", "WideChests_steel-chest-trashdump-12x12"], ["steel-trashdump-12x13", "WideChests_steel-chest-trashdump-12x13"], ["steel-trashdump-12x14", "WideChests_steel-chest-trashdump-12x14"], ["steel-trashdump-12x15", "WideChests_steel-chest-trashdump-12x15"], ["steel-trashdump-12x16", "WideChests_steel-chest-trashdump-12x16"], ["steel-trashdump-12x17", "WideChests_steel-chest-trashdump-12x17"], ["steel-trashdump-12x18", "WideChests_steel-chest-trashdump-12x18"], ["steel-trashdump-12x19", "WideChests_steel-chest-trashdump-12x19"], ["steel-trashdump-12x20", "WideChests_steel-chest-trashdump-12x20"], ["steel-trashdump-12x21", "WideChests_steel-chest-trashdump-12x21"], ["steel-trashdump-12x22", "WideChests_steel-chest-trashdump-12x22"], ["steel-trashdump-12x23", "WideChests_steel-chest-trashdump-12x23"], ["steel-trashdump-12x24", "WideChests_steel-chest-trashdump-12x24"], ["steel-trashdump-12x25", "WideChests_steel-chest-trashdump-12x25"], ["steel-trashdump-12x26", "WideChests_steel-chest-trashdump-12x26"], ["steel-trashdump-12x27", "WideChests_steel-chest-trashdump-12x27"], ["steel-trashdump-12x28", "WideChests_steel-chest-trashdump-12x28"], ["steel-trashdump-12x29", "WideChests_steel-chest-trashdump-12x29"], ["steel-trashdump-12x30", "WideChests_steel-chest-trashdump-12x30"], ["steel-trashdump-12x31", "WideChests_steel-chest-trashdump-12x31"], ["steel-trashdump-12x32", "WideChests_steel-chest-trashdump-12x32"], ["steel-trashdump-12x33", "WideChests_steel-chest-trashdump-12x33"], ["steel-trashdump-12x34", "WideChests_steel-chest-trashdump-12x34"], ["steel-trashdump-12x35", "WideChests_steel-chest-trashdump-12x35"], ["steel-trashdump-12x36", "WideChests_steel-chest-trashdump-12x36"], ["steel-trashdump-12x37", "WideChests_steel-chest-trashdump-12x37"], ["steel-trashdump-12x38", "WideChests_steel-chest-trashdump-12x38"], ["steel-trashdump-12x39", "WideChests_steel-chest-trashdump-12x39"], ["steel-trashdump-12x40", "WideChests_steel-chest-trashdump-12x40"], ["steel-trashdump-12x41", "WideChests_steel-chest-trashdump-12x41"], ["steel-trashdump-12x42", "WideChests_steel-chest-trashdump-12x42"], ["steel-trashdump-13x6", "WideChests_steel-chest-trashdump-13x6"], ["steel-trashdump-13x7", "WideChests_steel-chest-trashdump-13x7"], ["steel-trashdump-13x8", "WideChests_steel-chest-trashdump-13x8"], ["steel-trashdump-13x9", "WideChests_steel-chest-trashdump-13x9"], ["steel-trashdump-13x10", "WideChests_steel-chest-trashdump-13x10"], ["steel-trashdump-13x11", "WideChests_steel-chest-trashdump-13x11"], ["steel-trashdump-13x12", "WideChests_steel-chest-trashdump-13x12"], ["steel-trashdump-13x13", "WideChests_steel-chest-trashdump-13x13"], ["steel-trashdump-13x14", "WideChests_steel-chest-trashdump-13x14"], ["steel-trashdump-13x15", "WideChests_steel-chest-trashdump-13x15"], ["steel-trashdump-13x16", "WideChests_steel-chest-trashdump-13x16"], ["steel-trashdump-13x17", "WideChests_steel-chest-trashdump-13x17"], ["steel-trashdump-13x18", "WideChests_steel-chest-trashdump-13x18"], ["steel-trashdump-13x19", "WideChests_steel-chest-trashdump-13x19"], ["steel-trashdump-13x20", "WideChests_steel-chest-trashdump-13x20"], ["steel-trashdump-13x21", "WideChests_steel-chest-trashdump-13x21"], ["steel-trashdump-13x22", "WideChests_steel-chest-trashdump-13x22"], ["steel-trashdump-13x23", "WideChests_steel-chest-trashdump-13x23"], ["steel-trashdump-13x24", "WideChests_steel-chest-trashdump-13x24"], ["steel-trashdump-13x25", "WideChests_steel-chest-trashdump-13x25"], ["steel-trashdump-13x26", "WideChests_steel-chest-trashdump-13x26"], ["steel-trashdump-13x27", "WideChests_steel-chest-trashdump-13x27"], ["steel-trashdump-13x28", "WideChests_steel-chest-trashdump-13x28"], ["steel-trashdump-13x29", "WideChests_steel-chest-trashdump-13x29"], ["steel-trashdump-13x30", "WideChests_steel-chest-trashdump-13x30"], ["steel-trashdump-13x31", "WideChests_steel-chest-trashdump-13x31"], ["steel-trashdump-13x32", "WideChests_steel-chest-trashdump-13x32"], ["steel-trashdump-13x33", "WideChests_steel-chest-trashdump-13x33"], ["steel-trashdump-13x34", "WideChests_steel-chest-trashdump-13x34"], ["steel-trashdump-13x35", "WideChests_steel-chest-trashdump-13x35"], ["steel-trashdump-13x36", "WideChests_steel-chest-trashdump-13x36"], ["steel-trashdump-13x37", "WideChests_steel-chest-trashdump-13x37"], ["steel-trashdump-13x38", "WideChests_steel-chest-trashdump-13x38"], ["steel-trashdump-13x39", "WideChests_steel-chest-trashdump-13x39"], ["steel-trashdump-13x40", "WideChests_steel-chest-trashdump-13x40"], ["steel-trashdump-13x41", "WideChests_steel-chest-trashdump-13x41"], ["steel-trashdump-13x42", "WideChests_steel-chest-trashdump-13x42"], ["steel-trashdump-14x6", "WideChests_steel-chest-trashdump-14x6"], ["steel-trashdump-14x7", "WideChests_steel-chest-trashdump-14x7"], ["steel-trashdump-14x8", "WideChests_steel-chest-trashdump-14x8"], ["steel-trashdump-14x9", "WideChests_steel-chest-trashdump-14x9"], ["steel-trashdump-14x10", "WideChests_steel-chest-trashdump-14x10"], ["steel-trashdump-14x11", "WideChests_steel-chest-trashdump-14x11"], ["steel-trashdump-14x12", "WideChests_steel-chest-trashdump-14x12"], ["steel-trashdump-14x13", "WideChests_steel-chest-trashdump-14x13"], ["steel-trashdump-14x14", "WideChests_steel-chest-trashdump-14x14"], ["steel-trashdump-14x15", "WideChests_steel-chest-trashdump-14x15"], ["steel-trashdump-14x16", "WideChests_steel-chest-trashdump-14x16"], ["steel-trashdump-14x17", "WideChests_steel-chest-trashdump-14x17"], ["steel-trashdump-14x18", "WideChests_steel-chest-trashdump-14x18"], ["steel-trashdump-14x19", "WideChests_steel-chest-trashdump-14x19"], ["steel-trashdump-14x20", "WideChests_steel-chest-trashdump-14x20"], ["steel-trashdump-14x21", "WideChests_steel-chest-trashdump-14x21"], ["steel-trashdump-14x22", "WideChests_steel-chest-trashdump-14x22"], ["steel-trashdump-14x23", "WideChests_steel-chest-trashdump-14x23"], ["steel-trashdump-14x24", "WideChests_steel-chest-trashdump-14x24"], ["steel-trashdump-14x25", "WideChests_steel-chest-trashdump-14x25"], ["steel-trashdump-14x26", "WideChests_steel-chest-trashdump-14x26"], ["steel-trashdump-14x27", "WideChests_steel-chest-trashdump-14x27"], ["steel-trashdump-14x28", "WideChests_steel-chest-trashdump-14x28"], ["steel-trashdump-14x29", "WideChests_steel-chest-trashdump-14x29"], ["steel-trashdump-14x30", "WideChests_steel-chest-trashdump-14x30"], ["steel-trashdump-14x31", "WideChests_steel-chest-trashdump-14x31"], ["steel-trashdump-14x32", "WideChests_steel-chest-trashdump-14x32"], ["steel-trashdump-14x33", "WideChests_steel-chest-trashdump-14x33"], ["steel-trashdump-14x34", "WideChests_steel-chest-trashdump-14x34"], ["steel-trashdump-14x35", "WideChests_steel-chest-trashdump-14x35"], ["steel-trashdump-14x36", "WideChests_steel-chest-trashdump-14x36"], ["steel-trashdump-14x37", "WideChests_steel-chest-trashdump-14x37"], ["steel-trashdump-14x38", "WideChests_steel-chest-trashdump-14x38"], ["steel-trashdump-14x39", "WideChests_steel-chest-trashdump-14x39"], ["steel-trashdump-14x40", "WideChests_steel-chest-trashdump-14x40"], ["steel-trashdump-14x41", "WideChests_steel-chest-trashdump-14x41"], ["steel-trashdump-14x42", "WideChests_steel-chest-trashdump-14x42"], ["steel-trashdump-15x6", "WideChests_steel-chest-trashdump-15x6"], ["steel-trashdump-15x7", "WideChests_steel-chest-trashdump-15x7"], ["steel-trashdump-15x8", "WideChests_steel-chest-trashdump-15x8"], ["steel-trashdump-15x9", "WideChests_steel-chest-trashdump-15x9"], ["steel-trashdump-15x10", "WideChests_steel-chest-trashdump-15x10"], ["steel-trashdump-15x11", "WideChests_steel-chest-trashdump-15x11"], ["steel-trashdump-15x12", "WideChests_steel-chest-trashdump-15x12"], ["steel-trashdump-15x13", "WideChests_steel-chest-trashdump-15x13"], ["steel-trashdump-15x14", "WideChests_steel-chest-trashdump-15x14"], ["steel-trashdump-15x15", "WideChests_steel-chest-trashdump-15x15"], ["steel-trashdump-15x16", "WideChests_steel-chest-trashdump-15x16"], ["steel-trashdump-15x17", "WideChests_steel-chest-trashdump-15x17"], ["steel-trashdump-15x18", "WideChests_steel-chest-trashdump-15x18"], ["steel-trashdump-15x19", "WideChests_steel-chest-trashdump-15x19"], ["steel-trashdump-15x20", "WideChests_steel-chest-trashdump-15x20"], ["steel-trashdump-15x21", "WideChests_steel-chest-trashdump-15x21"], ["steel-trashdump-15x22", "WideChests_steel-chest-trashdump-15x22"], ["steel-trashdump-15x23", "WideChests_steel-chest-trashdump-15x23"], ["steel-trashdump-15x24", "WideChests_steel-chest-trashdump-15x24"], ["steel-trashdump-15x25", "WideChests_steel-chest-trashdump-15x25"], ["steel-trashdump-15x26", "WideChests_steel-chest-trashdump-15x26"], ["steel-trashdump-15x27", "WideChests_steel-chest-trashdump-15x27"], ["steel-trashdump-15x28", "WideChests_steel-chest-trashdump-15x28"], ["steel-trashdump-15x29", "WideChests_steel-chest-trashdump-15x29"], ["steel-trashdump-15x30", "WideChests_steel-chest-trashdump-15x30"], ["steel-trashdump-15x31", "WideChests_steel-chest-trashdump-15x31"], ["steel-trashdump-15x32", "WideChests_steel-chest-trashdump-15x32"], ["steel-trashdump-15x33", "WideChests_steel-chest-trashdump-15x33"], ["steel-trashdump-15x34", "WideChests_steel-chest-trashdump-15x34"], ["steel-trashdump-15x35", "WideChests_steel-chest-trashdump-15x35"], ["steel-trashdump-15x36", "WideChests_steel-chest-trashdump-15x36"], ["steel-trashdump-15x37", "WideChests_steel-chest-trashdump-15x37"], ["steel-trashdump-15x38", "WideChests_steel-chest-trashdump-15x38"], ["steel-trashdump-15x39", "WideChests_steel-chest-trashdump-15x39"], ["steel-trashdump-15x40", "WideChests_steel-chest-trashdump-15x40"], ["steel-trashdump-15x41", "WideChests_steel-chest-trashdump-15x41"], ["steel-trashdump-15x42", "WideChests_steel-chest-trashdump-15x42"], ["steel-trashdump-16x6", "WideChests_steel-chest-trashdump-16x6"], ["steel-trashdump-16x7", "WideChests_steel-chest-trashdump-16x7"], ["steel-trashdump-16x8", "WideChests_steel-chest-trashdump-16x8"], ["steel-trashdump-16x9", "WideChests_steel-chest-trashdump-16x9"], ["steel-trashdump-16x10", "WideChests_steel-chest-trashdump-16x10"], ["steel-trashdump-16x11", "WideChests_steel-chest-trashdump-16x11"], ["steel-trashdump-16x12", "WideChests_steel-chest-trashdump-16x12"], ["steel-trashdump-16x13", "WideChests_steel-chest-trashdump-16x13"], ["steel-trashdump-16x14", "WideChests_steel-chest-trashdump-16x14"], ["steel-trashdump-16x15", "WideChests_steel-chest-trashdump-16x15"], ["steel-trashdump-16x16", "WideChests_steel-chest-trashdump-16x16"], ["steel-trashdump-16x17", "WideChests_steel-chest-trashdump-16x17"], ["steel-trashdump-16x18", "WideChests_steel-chest-trashdump-16x18"], ["steel-trashdump-16x19", "WideChests_steel-chest-trashdump-16x19"], ["steel-trashdump-16x20", "WideChests_steel-chest-trashdump-16x20"], ["steel-trashdump-16x21", "WideChests_steel-chest-trashdump-16x21"], ["steel-trashdump-16x22", "WideChests_steel-chest-trashdump-16x22"], ["steel-trashdump-16x23", "WideChests_steel-chest-trashdump-16x23"], ["steel-trashdump-16x24", "WideChests_steel-chest-trashdump-16x24"], ["steel-trashdump-16x25", "WideChests_steel-chest-trashdump-16x25"], ["steel-trashdump-16x26", "WideChests_steel-chest-trashdump-16x26"], ["steel-trashdump-16x27", "WideChests_steel-chest-trashdump-16x27"], ["steel-trashdump-16x28", "WideChests_steel-chest-trashdump-16x28"], ["steel-trashdump-16x29", "WideChests_steel-chest-trashdump-16x29"], ["steel-trashdump-16x30", "WideChests_steel-chest-trashdump-16x30"], ["steel-trashdump-16x31", "WideChests_steel-chest-trashdump-16x31"], ["steel-trashdump-16x32", "WideChests_steel-chest-trashdump-16x32"], ["steel-trashdump-16x33", "WideChests_steel-chest-trashdump-16x33"], ["steel-trashdump-16x34", "WideChests_steel-chest-trashdump-16x34"], ["steel-trashdump-16x35", "WideChests_steel-chest-trashdump-16x35"], ["steel-trashdump-16x36", "WideChests_steel-chest-trashdump-16x36"], ["steel-trashdump-16x37", "WideChests_steel-chest-trashdump-16x37"], ["steel-trashdump-16x38", "WideChests_steel-chest-trashdump-16x38"], ["steel-trashdump-16x39", "WideChests_steel-chest-trashdump-16x39"], ["steel-trashdump-16x40", "WideChests_steel-chest-trashdump-16x40"], ["steel-trashdump-16x41", "WideChests_steel-chest-trashdump-16x41"], ["steel-trashdump-16x42", "WideChests_steel-chest-trashdump-16x42"], ["steel-trashdump-17x6", "WideChests_steel-chest-trashdump-17x6"], ["steel-trashdump-17x7", "WideChests_steel-chest-trashdump-17x7"], ["steel-trashdump-17x8", "WideChests_steel-chest-trashdump-17x8"], ["steel-trashdump-17x9", "WideChests_steel-chest-trashdump-17x9"], ["steel-trashdump-17x10", "WideChests_steel-chest-trashdump-17x10"], ["steel-trashdump-17x11", "WideChests_steel-chest-trashdump-17x11"], ["steel-trashdump-17x12", "WideChests_steel-chest-trashdump-17x12"], ["steel-trashdump-17x13", "WideChests_steel-chest-trashdump-17x13"], ["steel-trashdump-17x14", "WideChests_steel-chest-trashdump-17x14"], ["steel-trashdump-17x15", "WideChests_steel-chest-trashdump-17x15"], ["steel-trashdump-17x16", "WideChests_steel-chest-trashdump-17x16"], ["steel-trashdump-17x17", "WideChests_steel-chest-trashdump-17x17"], ["steel-trashdump-17x18", "WideChests_steel-chest-trashdump-17x18"], ["steel-trashdump-17x19", "WideChests_steel-chest-trashdump-17x19"], ["steel-trashdump-17x20", "WideChests_steel-chest-trashdump-17x20"], ["steel-trashdump-17x21", "WideChests_steel-chest-trashdump-17x21"], ["steel-trashdump-17x22", "WideChests_steel-chest-trashdump-17x22"], ["steel-trashdump-17x23", "WideChests_steel-chest-trashdump-17x23"], ["steel-trashdump-17x24", "WideChests_steel-chest-trashdump-17x24"], ["steel-trashdump-17x25", "WideChests_steel-chest-trashdump-17x25"], ["steel-trashdump-17x26", "WideChests_steel-chest-trashdump-17x26"], ["steel-trashdump-17x27", "WideChests_steel-chest-trashdump-17x27"], ["steel-trashdump-17x28", "WideChests_steel-chest-trashdump-17x28"], ["steel-trashdump-17x29", "WideChests_steel-chest-trashdump-17x29"], ["steel-trashdump-17x30", "WideChests_steel-chest-trashdump-17x30"], ["steel-trashdump-17x31", "WideChests_steel-chest-trashdump-17x31"], ["steel-trashdump-17x32", "WideChests_steel-chest-trashdump-17x32"], ["steel-trashdump-17x33", "WideChests_steel-chest-trashdump-17x33"], ["steel-trashdump-17x34", "WideChests_steel-chest-trashdump-17x34"], ["steel-trashdump-17x35", "WideChests_steel-chest-trashdump-17x35"], ["steel-trashdump-17x36", "WideChests_steel-chest-trashdump-17x36"], ["steel-trashdump-17x37", "WideChests_steel-chest-trashdump-17x37"], ["steel-trashdump-17x38", "WideChests_steel-chest-trashdump-17x38"], ["steel-trashdump-17x39", "WideChests_steel-chest-trashdump-17x39"], ["steel-trashdump-17x40", "WideChests_steel-chest-trashdump-17x40"], ["steel-trashdump-17x41", "WideChests_steel-chest-trashdump-17x41"], ["steel-trashdump-17x42", "WideChests_steel-chest-trashdump-17x42"], ["steel-trashdump-18x6", "WideChests_steel-chest-trashdump-18x6"], ["steel-trashdump-18x7", "WideChests_steel-chest-trashdump-18x7"], ["steel-trashdump-18x8", "WideChests_steel-chest-trashdump-18x8"], ["steel-trashdump-18x9", "WideChests_steel-chest-trashdump-18x9"], ["steel-trashdump-18x10", "WideChests_steel-chest-trashdump-18x10"], ["steel-trashdump-18x11", "WideChests_steel-chest-trashdump-18x11"], ["steel-trashdump-18x12", "WideChests_steel-chest-trashdump-18x12"], ["steel-trashdump-18x13", "WideChests_steel-chest-trashdump-18x13"], ["steel-trashdump-18x14", "WideChests_steel-chest-trashdump-18x14"], ["steel-trashdump-18x15", "WideChests_steel-chest-trashdump-18x15"], ["steel-trashdump-18x16", "WideChests_steel-chest-trashdump-18x16"], ["steel-trashdump-18x17", "WideChests_steel-chest-trashdump-18x17"], ["steel-trashdump-18x18", "WideChests_steel-chest-trashdump-18x18"], ["steel-trashdump-18x19", "WideChests_steel-chest-trashdump-18x19"], ["steel-trashdump-18x20", "WideChests_steel-chest-trashdump-18x20"], ["steel-trashdump-18x21", "WideChests_steel-chest-trashdump-18x21"], ["steel-trashdump-18x22", "WideChests_steel-chest-trashdump-18x22"], ["steel-trashdump-18x23", "WideChests_steel-chest-trashdump-18x23"], ["steel-trashdump-18x24", "WideChests_steel-chest-trashdump-18x24"], ["steel-trashdump-18x25", "WideChests_steel-chest-trashdump-18x25"], ["steel-trashdump-18x26", "WideChests_steel-chest-trashdump-18x26"], ["steel-trashdump-18x27", "WideChests_steel-chest-trashdump-18x27"], ["steel-trashdump-18x28", "WideChests_steel-chest-trashdump-18x28"], ["steel-trashdump-18x29", "WideChests_steel-chest-trashdump-18x29"], ["steel-trashdump-18x30", "WideChests_steel-chest-trashdump-18x30"], ["steel-trashdump-18x31", "WideChests_steel-chest-trashdump-18x31"], ["steel-trashdump-18x32", "WideChests_steel-chest-trashdump-18x32"], ["steel-trashdump-18x33", "WideChests_steel-chest-trashdump-18x33"], ["steel-trashdump-18x34", "WideChests_steel-chest-trashdump-18x34"], ["steel-trashdump-18x35", "WideChests_steel-chest-trashdump-18x35"], ["steel-trashdump-18x36", "WideChests_steel-chest-trashdump-18x36"], ["steel-trashdump-18x37", "WideChests_steel-chest-trashdump-18x37"], ["steel-trashdump-18x38", "WideChests_steel-chest-trashdump-18x38"], ["steel-trashdump-18x39", "WideChests_steel-chest-trashdump-18x39"], ["steel-trashdump-18x40", "WideChests_steel-chest-trashdump-18x40"], ["steel-trashdump-18x41", "WideChests_steel-chest-trashdump-18x41"], ["steel-trashdump-18x42", "WideChests_steel-chest-trashdump-18x42"], ["steel-trashdump-19x6", "WideChests_steel-chest-trashdump-19x6"], ["steel-trashdump-19x7", "WideChests_steel-chest-trashdump-19x7"], ["steel-trashdump-19x8", "WideChests_steel-chest-trashdump-19x8"], ["steel-trashdump-19x9", "WideChests_steel-chest-trashdump-19x9"], ["steel-trashdump-19x10", "WideChests_steel-chest-trashdump-19x10"], ["steel-trashdump-19x11", "WideChests_steel-chest-trashdump-19x11"], ["steel-trashdump-19x12", "WideChests_steel-chest-trashdump-19x12"], ["steel-trashdump-19x13", "WideChests_steel-chest-trashdump-19x13"], ["steel-trashdump-19x14", "WideChests_steel-chest-trashdump-19x14"], ["steel-trashdump-19x15", "WideChests_steel-chest-trashdump-19x15"], ["steel-trashdump-19x16", "WideChests_steel-chest-trashdump-19x16"], ["steel-trashdump-19x17", "WideChests_steel-chest-trashdump-19x17"], ["steel-trashdump-19x18", "WideChests_steel-chest-trashdump-19x18"], ["steel-trashdump-19x19", "WideChests_steel-chest-trashdump-19x19"], ["steel-trashdump-19x20", "WideChests_steel-chest-trashdump-19x20"], ["steel-trashdump-19x21", "WideChests_steel-chest-trashdump-19x21"], ["steel-trashdump-19x22", "WideChests_steel-chest-trashdump-19x22"], ["steel-trashdump-19x23", "WideChests_steel-chest-trashdump-19x23"], ["steel-trashdump-19x24", "WideChests_steel-chest-trashdump-19x24"], ["steel-trashdump-19x25", "WideChests_steel-chest-trashdump-19x25"], ["steel-trashdump-19x26", "WideChests_steel-chest-trashdump-19x26"], ["steel-trashdump-19x27", "WideChests_steel-chest-trashdump-19x27"], ["steel-trashdump-19x28", "WideChests_steel-chest-trashdump-19x28"], ["steel-trashdump-19x29", "WideChests_steel-chest-trashdump-19x29"], ["steel-trashdump-19x30", "WideChests_steel-chest-trashdump-19x30"], ["steel-trashdump-19x31", "WideChests_steel-chest-trashdump-19x31"], ["steel-trashdump-19x32", "WideChests_steel-chest-trashdump-19x32"], ["steel-trashdump-19x33", "WideChests_steel-chest-trashdump-19x33"], ["steel-trashdump-19x34", "WideChests_steel-chest-trashdump-19x34"], ["steel-trashdump-19x35", "WideChests_steel-chest-trashdump-19x35"], ["steel-trashdump-19x36", "WideChests_steel-chest-trashdump-19x36"], ["steel-trashdump-19x37", "WideChests_steel-chest-trashdump-19x37"], ["steel-trashdump-19x38", "WideChests_steel-chest-trashdump-19x38"], ["steel-trashdump-19x39", "WideChests_steel-chest-trashdump-19x39"], ["steel-trashdump-19x40", "WideChests_steel-chest-trashdump-19x40"], ["steel-trashdump-19x41", "WideChests_steel-chest-trashdump-19x41"], ["steel-trashdump-19x42", "WideChests_steel-chest-trashdump-19x42"], ["steel-trashdump-20x6", "WideChests_steel-chest-trashdump-20x6"], ["steel-trashdump-20x7", "WideChests_steel-chest-trashdump-20x7"], ["steel-trashdump-20x8", "WideChests_steel-chest-trashdump-20x8"], ["steel-trashdump-20x9", "WideChests_steel-chest-trashdump-20x9"], ["steel-trashdump-20x10", "WideChests_steel-chest-trashdump-20x10"], ["steel-trashdump-20x11", "WideChests_steel-chest-trashdump-20x11"], ["steel-trashdump-20x12", "WideChests_steel-chest-trashdump-20x12"], ["steel-trashdump-20x13", "WideChests_steel-chest-trashdump-20x13"], ["steel-trashdump-20x14", "WideChests_steel-chest-trashdump-20x14"], ["steel-trashdump-20x15", "WideChests_steel-chest-trashdump-20x15"], ["steel-trashdump-20x16", "WideChests_steel-chest-trashdump-20x16"], ["steel-trashdump-20x17", "WideChests_steel-chest-trashdump-20x17"], ["steel-trashdump-20x18", "WideChests_steel-chest-trashdump-20x18"], ["steel-trashdump-20x19", "WideChests_steel-chest-trashdump-20x19"], ["steel-trashdump-20x20", "WideChests_steel-chest-trashdump-20x20"], ["steel-trashdump-20x21", "WideChests_steel-chest-trashdump-20x21"], ["steel-trashdump-20x22", "WideChests_steel-chest-trashdump-20x22"], ["steel-trashdump-20x23", "WideChests_steel-chest-trashdump-20x23"], ["steel-trashdump-20x24", "WideChests_steel-chest-trashdump-20x24"], ["steel-trashdump-20x25", "WideChests_steel-chest-trashdump-20x25"], ["steel-trashdump-20x26", "WideChests_steel-chest-trashdump-20x26"], ["steel-trashdump-20x27", "WideChests_steel-chest-trashdump-20x27"], ["steel-trashdump-20x28", "WideChests_steel-chest-trashdump-20x28"], ["steel-trashdump-20x29", "WideChests_steel-chest-trashdump-20x29"], ["steel-trashdump-20x30", "WideChests_steel-chest-trashdump-20x30"], ["steel-trashdump-20x31", "WideChests_steel-chest-trashdump-20x31"], ["steel-trashdump-20x32", "WideChests_steel-chest-trashdump-20x32"], ["steel-trashdump-20x33", "WideChests_steel-chest-trashdump-20x33"], ["steel-trashdump-20x34", "WideChests_steel-chest-trashdump-20x34"], ["steel-trashdump-20x35", "WideChests_steel-chest-trashdump-20x35"], ["steel-trashdump-20x36", "WideChests_steel-chest-trashdump-20x36"], ["steel-trashdump-20x37", "WideChests_steel-chest-trashdump-20x37"], ["steel-trashdump-20x38", "WideChests_steel-chest-trashdump-20x38"], ["steel-trashdump-20x39", "WideChests_steel-chest-trashdump-20x39"], ["steel-trashdump-20x40", "WideChests_steel-chest-trashdump-20x40"], ["steel-trashdump-20x41", "WideChests_steel-chest-trashdump-20x41"], ["steel-trashdump-20x42", "WideChests_steel-chest-trashdump-20x42"], ["steel-trashdump-21x6", "WideChests_steel-chest-trashdump-21x6"], ["steel-trashdump-21x7", "WideChests_steel-chest-trashdump-21x7"], ["steel-trashdump-21x8", "WideChests_steel-chest-trashdump-21x8"], ["steel-trashdump-21x9", "WideChests_steel-chest-trashdump-21x9"], ["steel-trashdump-21x10", "WideChests_steel-chest-trashdump-21x10"], ["steel-trashdump-21x11", "WideChests_steel-chest-trashdump-21x11"], ["steel-trashdump-21x12", "WideChests_steel-chest-trashdump-21x12"], ["steel-trashdump-21x13", "WideChests_steel-chest-trashdump-21x13"], ["steel-trashdump-21x14", "WideChests_steel-chest-trashdump-21x14"], ["steel-trashdump-21x15", "WideChests_steel-chest-trashdump-21x15"], ["steel-trashdump-21x16", "WideChests_steel-chest-trashdump-21x16"], ["steel-trashdump-21x17", "WideChests_steel-chest-trashdump-21x17"], ["steel-trashdump-21x18", "WideChests_steel-chest-trashdump-21x18"], ["steel-trashdump-21x19", "WideChests_steel-chest-trashdump-21x19"], ["steel-trashdump-21x20", "WideChests_steel-chest-trashdump-21x20"], ["steel-trashdump-21x21", "WideChests_steel-chest-trashdump-21x21"], ["steel-trashdump-21x22", "WideChests_steel-chest-trashdump-21x22"], ["steel-trashdump-21x23", "WideChests_steel-chest-trashdump-21x23"], ["steel-trashdump-21x24", "WideChests_steel-chest-trashdump-21x24"], ["steel-trashdump-21x25", "WideChests_steel-chest-trashdump-21x25"], ["steel-trashdump-21x26", "WideChests_steel-chest-trashdump-21x26"], ["steel-trashdump-21x27", "WideChests_steel-chest-trashdump-21x27"], ["steel-trashdump-21x28", "WideChests_steel-chest-trashdump-21x28"], ["steel-trashdump-21x29", "WideChests_steel-chest-trashdump-21x29"], ["steel-trashdump-21x30", "WideChests_steel-chest-trashdump-21x30"], ["steel-trashdump-21x31", "WideChests_steel-chest-trashdump-21x31"], ["steel-trashdump-21x32", "WideChests_steel-chest-trashdump-21x32"], ["steel-trashdump-21x33", "WideChests_steel-chest-trashdump-21x33"], ["steel-trashdump-21x34", "WideChests_steel-chest-trashdump-21x34"], ["steel-trashdump-21x35", "WideChests_steel-chest-trashdump-21x35"], ["steel-trashdump-21x36", "WideChests_steel-chest-trashdump-21x36"], ["steel-trashdump-21x37", "WideChests_steel-chest-trashdump-21x37"], ["steel-trashdump-21x38", "WideChests_steel-chest-trashdump-21x38"], ["steel-trashdump-21x39", "WideChests_steel-chest-trashdump-21x39"], ["steel-trashdump-21x40", "WideChests_steel-chest-trashdump-21x40"], ["steel-trashdump-21x41", "WideChests_steel-chest-trashdump-21x41"], ["steel-trashdump-21x42", "WideChests_steel-chest-trashdump-21x42"], ["steel-trashdump-22x6", "WideChests_steel-chest-trashdump-22x6"], ["steel-trashdump-22x7", "WideChests_steel-chest-trashdump-22x7"], ["steel-trashdump-22x8", "WideChests_steel-chest-trashdump-22x8"], ["steel-trashdump-22x9", "WideChests_steel-chest-trashdump-22x9"], ["steel-trashdump-22x10", "WideChests_steel-chest-trashdump-22x10"], ["steel-trashdump-22x11", "WideChests_steel-chest-trashdump-22x11"], ["steel-trashdump-22x12", "WideChests_steel-chest-trashdump-22x12"], ["steel-trashdump-22x13", "WideChests_steel-chest-trashdump-22x13"], ["steel-trashdump-22x14", "WideChests_steel-chest-trashdump-22x14"], ["steel-trashdump-22x15", "WideChests_steel-chest-trashdump-22x15"], ["steel-trashdump-22x16", "WideChests_steel-chest-trashdump-22x16"], ["steel-trashdump-22x17", "WideChests_steel-chest-trashdump-22x17"], ["steel-trashdump-22x18", "WideChests_steel-chest-trashdump-22x18"], ["steel-trashdump-22x19", "WideChests_steel-chest-trashdump-22x19"], ["steel-trashdump-22x20", "WideChests_steel-chest-trashdump-22x20"], ["steel-trashdump-22x21", "WideChests_steel-chest-trashdump-22x21"], ["steel-trashdump-22x22", "WideChests_steel-chest-trashdump-22x22"], ["steel-trashdump-22x23", "WideChests_steel-chest-trashdump-22x23"], ["steel-trashdump-22x24", "WideChests_steel-chest-trashdump-22x24"], ["steel-trashdump-22x25", "WideChests_steel-chest-trashdump-22x25"], ["steel-trashdump-22x26", "WideChests_steel-chest-trashdump-22x26"], ["steel-trashdump-22x27", "WideChests_steel-chest-trashdump-22x27"], ["steel-trashdump-22x28", "WideChests_steel-chest-trashdump-22x28"], ["steel-trashdump-22x29", "WideChests_steel-chest-trashdump-22x29"], ["steel-trashdump-22x30", "WideChests_steel-chest-trashdump-22x30"], ["steel-trashdump-22x31", "WideChests_steel-chest-trashdump-22x31"], ["steel-trashdump-22x32", "WideChests_steel-chest-trashdump-22x32"], ["steel-trashdump-22x33", "WideChests_steel-chest-trashdump-22x33"], ["steel-trashdump-22x34", "WideChests_steel-chest-trashdump-22x34"], ["steel-trashdump-22x35", "WideChests_steel-chest-trashdump-22x35"], ["steel-trashdump-22x36", "WideChests_steel-chest-trashdump-22x36"], ["steel-trashdump-22x37", "WideChests_steel-chest-trashdump-22x37"], ["steel-trashdump-22x38", "WideChests_steel-chest-trashdump-22x38"], ["steel-trashdump-22x39", "WideChests_steel-chest-trashdump-22x39"], ["steel-trashdump-22x40", "WideChests_steel-chest-trashdump-22x40"], ["steel-trashdump-22x41", "WideChests_steel-chest-trashdump-22x41"], ["steel-trashdump-22x42", "WideChests_steel-chest-trashdump-22x42"], ["steel-trashdump-23x6", "WideChests_steel-chest-trashdump-23x6"], ["steel-trashdump-23x7", "WideChests_steel-chest-trashdump-23x7"], ["steel-trashdump-23x8", "WideChests_steel-chest-trashdump-23x8"], ["steel-trashdump-23x9", "WideChests_steel-chest-trashdump-23x9"], ["steel-trashdump-23x10", "WideChests_steel-chest-trashdump-23x10"], ["steel-trashdump-23x11", "WideChests_steel-chest-trashdump-23x11"], ["steel-trashdump-23x12", "WideChests_steel-chest-trashdump-23x12"], ["steel-trashdump-23x13", "WideChests_steel-chest-trashdump-23x13"], ["steel-trashdump-23x14", "WideChests_steel-chest-trashdump-23x14"], ["steel-trashdump-23x15", "WideChests_steel-chest-trashdump-23x15"], ["steel-trashdump-23x16", "WideChests_steel-chest-trashdump-23x16"], ["steel-trashdump-23x17", "WideChests_steel-chest-trashdump-23x17"], ["steel-trashdump-23x18", "WideChests_steel-chest-trashdump-23x18"], ["steel-trashdump-23x19", "WideChests_steel-chest-trashdump-23x19"], ["steel-trashdump-23x20", "WideChests_steel-chest-trashdump-23x20"], ["steel-trashdump-23x21", "WideChests_steel-chest-trashdump-23x21"], ["steel-trashdump-23x22", "WideChests_steel-chest-trashdump-23x22"], ["steel-trashdump-23x23", "WideChests_steel-chest-trashdump-23x23"], ["steel-trashdump-23x24", "WideChests_steel-chest-trashdump-23x24"], ["steel-trashdump-23x25", "WideChests_steel-chest-trashdump-23x25"], ["steel-trashdump-23x26", "WideChests_steel-chest-trashdump-23x26"], ["steel-trashdump-23x27", "WideChests_steel-chest-trashdump-23x27"], ["steel-trashdump-23x28", "WideChests_steel-chest-trashdump-23x28"], ["steel-trashdump-23x29", "WideChests_steel-chest-trashdump-23x29"], ["steel-trashdump-23x30", "WideChests_steel-chest-trashdump-23x30"], ["steel-trashdump-23x31", "WideChests_steel-chest-trashdump-23x31"], ["steel-trashdump-23x32", "WideChests_steel-chest-trashdump-23x32"], ["steel-trashdump-23x33", "WideChests_steel-chest-trashdump-23x33"], ["steel-trashdump-23x34", "WideChests_steel-chest-trashdump-23x34"], ["steel-trashdump-23x35", "WideChests_steel-chest-trashdump-23x35"], ["steel-trashdump-23x36", "WideChests_steel-chest-trashdump-23x36"], ["steel-trashdump-23x37", "WideChests_steel-chest-trashdump-23x37"], ["steel-trashdump-23x38", "WideChests_steel-chest-trashdump-23x38"], ["steel-trashdump-23x39", "WideChests_steel-chest-trashdump-23x39"], ["steel-trashdump-23x40", "WideChests_steel-chest-trashdump-23x40"], ["steel-trashdump-23x41", "WideChests_steel-chest-trashdump-23x41"], ["steel-trashdump-23x42", "WideChests_steel-chest-trashdump-23x42"], ["steel-trashdump-24x6", "WideChests_steel-chest-trashdump-24x6"], ["steel-trashdump-24x7", "WideChests_steel-chest-trashdump-24x7"], ["steel-trashdump-24x8", "WideChests_steel-chest-trashdump-24x8"], ["steel-trashdump-24x9", "WideChests_steel-chest-trashdump-24x9"], ["steel-trashdump-24x10", "WideChests_steel-chest-trashdump-24x10"], ["steel-trashdump-24x11", "WideChests_steel-chest-trashdump-24x11"], ["steel-trashdump-24x12", "WideChests_steel-chest-trashdump-24x12"], ["steel-trashdump-24x13", "WideChests_steel-chest-trashdump-24x13"], ["steel-trashdump-24x14", "WideChests_steel-chest-trashdump-24x14"], ["steel-trashdump-24x15", "WideChests_steel-chest-trashdump-24x15"], ["steel-trashdump-24x16", "WideChests_steel-chest-trashdump-24x16"], ["steel-trashdump-24x17", "WideChests_steel-chest-trashdump-24x17"], ["steel-trashdump-24x18", "WideChests_steel-chest-trashdump-24x18"], ["steel-trashdump-24x19", "WideChests_steel-chest-trashdump-24x19"], ["steel-trashdump-24x20", "WideChests_steel-chest-trashdump-24x20"], ["steel-trashdump-24x21", "WideChests_steel-chest-trashdump-24x21"], ["steel-trashdump-24x22", "WideChests_steel-chest-trashdump-24x22"], ["steel-trashdump-24x23", "WideChests_steel-chest-trashdump-24x23"], ["steel-trashdump-24x24", "WideChests_steel-chest-trashdump-24x24"], ["steel-trashdump-24x25", "WideChests_steel-chest-trashdump-24x25"], ["steel-trashdump-24x26", "WideChests_steel-chest-trashdump-24x26"], ["steel-trashdump-24x27", "WideChests_steel-chest-trashdump-24x27"], ["steel-trashdump-24x28", "WideChests_steel-chest-trashdump-24x28"], ["steel-trashdump-24x29", "WideChests_steel-chest-trashdump-24x29"], ["steel-trashdump-24x30", "WideChests_steel-chest-trashdump-24x30"], ["steel-trashdump-24x31", "WideChests_steel-chest-trashdump-24x31"], ["steel-trashdump-24x32", "WideChests_steel-chest-trashdump-24x32"], ["steel-trashdump-24x33", "WideChests_steel-chest-trashdump-24x33"], ["steel-trashdump-24x34", "WideChests_steel-chest-trashdump-24x34"], ["steel-trashdump-24x35", "WideChests_steel-chest-trashdump-24x35"], ["steel-trashdump-24x36", "WideChests_steel-chest-trashdump-24x36"], ["steel-trashdump-24x37", "WideChests_steel-chest-trashdump-24x37"], ["steel-trashdump-24x38", "WideChests_steel-chest-trashdump-24x38"], ["steel-trashdump-24x39", "WideChests_steel-chest-trashdump-24x39"], ["steel-trashdump-24x40", "WideChests_steel-chest-trashdump-24x40"], ["steel-trashdump-24x41", "WideChests_steel-chest-trashdump-24x41"], ["steel-trashdump-24x42", "WideChests_steel-chest-trashdump-24x42"], ["steel-trashdump-25x6", "WideChests_steel-chest-trashdump-25x6"], ["steel-trashdump-25x7", "WideChests_steel-chest-trashdump-25x7"], ["steel-trashdump-25x8", "WideChests_steel-chest-trashdump-25x8"], ["steel-trashdump-25x9", "WideChests_steel-chest-trashdump-25x9"], ["steel-trashdump-25x10", "WideChests_steel-chest-trashdump-25x10"], ["steel-trashdump-25x11", "WideChests_steel-chest-trashdump-25x11"], ["steel-trashdump-25x12", "WideChests_steel-chest-trashdump-25x12"], ["steel-trashdump-25x13", "WideChests_steel-chest-trashdump-25x13"], ["steel-trashdump-25x14", "WideChests_steel-chest-trashdump-25x14"], ["steel-trashdump-25x15", "WideChests_steel-chest-trashdump-25x15"], ["steel-trashdump-25x16", "WideChests_steel-chest-trashdump-25x16"], ["steel-trashdump-25x17", "WideChests_steel-chest-trashdump-25x17"], ["steel-trashdump-25x18", "WideChests_steel-chest-trashdump-25x18"], ["steel-trashdump-25x19", "WideChests_steel-chest-trashdump-25x19"], ["steel-trashdump-25x20", "WideChests_steel-chest-trashdump-25x20"], ["steel-trashdump-25x21", "WideChests_steel-chest-trashdump-25x21"], ["steel-trashdump-25x22", "WideChests_steel-chest-trashdump-25x22"], ["steel-trashdump-25x23", "WideChests_steel-chest-trashdump-25x23"], ["steel-trashdump-25x24", "WideChests_steel-chest-trashdump-25x24"], ["steel-trashdump-25x25", "WideChests_steel-chest-trashdump-25x25"], ["steel-trashdump-25x26", "WideChests_steel-chest-trashdump-25x26"], ["steel-trashdump-25x27", "WideChests_steel-chest-trashdump-25x27"], ["steel-trashdump-25x28", "WideChests_steel-chest-trashdump-25x28"], ["steel-trashdump-25x29", "WideChests_steel-chest-trashdump-25x29"], ["steel-trashdump-25x30", "WideChests_steel-chest-trashdump-25x30"], ["steel-trashdump-25x31", "WideChests_steel-chest-trashdump-25x31"], ["steel-trashdump-25x32", "WideChests_steel-chest-trashdump-25x32"], ["steel-trashdump-25x33", "WideChests_steel-chest-trashdump-25x33"], ["steel-trashdump-25x34", "WideChests_steel-chest-trashdump-25x34"], ["steel-trashdump-25x35", "WideChests_steel-chest-trashdump-25x35"], ["steel-trashdump-25x36", "WideChests_steel-chest-trashdump-25x36"], ["steel-trashdump-25x37", "WideChests_steel-chest-trashdump-25x37"], ["steel-trashdump-25x38", "WideChests_steel-chest-trashdump-25x38"], ["steel-trashdump-25x39", "WideChests_steel-chest-trashdump-25x39"], ["steel-trashdump-25x40", "WideChests_steel-chest-trashdump-25x40"], ["steel-trashdump-25x41", "WideChests_steel-chest-trashdump-25x41"], ["steel-trashdump-25x42", "WideChests_steel-chest-trashdump-25x42"], ["steel-trashdump-26x6", "WideChests_steel-chest-trashdump-26x6"], ["steel-trashdump-26x7", "WideChests_steel-chest-trashdump-26x7"], ["steel-trashdump-26x8", "WideChests_steel-chest-trashdump-26x8"], ["steel-trashdump-26x9", "WideChests_steel-chest-trashdump-26x9"], ["steel-trashdump-26x10", "WideChests_steel-chest-trashdump-26x10"], ["steel-trashdump-26x11", "WideChests_steel-chest-trashdump-26x11"], ["steel-trashdump-26x12", "WideChests_steel-chest-trashdump-26x12"], ["steel-trashdump-26x13", "WideChests_steel-chest-trashdump-26x13"], ["steel-trashdump-26x14", "WideChests_steel-chest-trashdump-26x14"], ["steel-trashdump-26x15", "WideChests_steel-chest-trashdump-26x15"], ["steel-trashdump-26x16", "WideChests_steel-chest-trashdump-26x16"], ["steel-trashdump-26x17", "WideChests_steel-chest-trashdump-26x17"], ["steel-trashdump-26x18", "WideChests_steel-chest-trashdump-26x18"], ["steel-trashdump-26x19", "WideChests_steel-chest-trashdump-26x19"], ["steel-trashdump-26x20", "WideChests_steel-chest-trashdump-26x20"], ["steel-trashdump-26x21", "WideChests_steel-chest-trashdump-26x21"], ["steel-trashdump-26x22", "WideChests_steel-chest-trashdump-26x22"], ["steel-trashdump-26x23", "WideChests_steel-chest-trashdump-26x23"], ["steel-trashdump-26x24", "WideChests_steel-chest-trashdump-26x24"], ["steel-trashdump-26x25", "WideChests_steel-chest-trashdump-26x25"], ["steel-trashdump-26x26", "WideChests_steel-chest-trashdump-26x26"], ["steel-trashdump-26x27", "WideChests_steel-chest-trashdump-26x27"], ["steel-trashdump-26x28", "WideChests_steel-chest-trashdump-26x28"], ["steel-trashdump-26x29", "WideChests_steel-chest-trashdump-26x29"], ["steel-trashdump-26x30", "WideChests_steel-chest-trashdump-26x30"], ["steel-trashdump-26x31", "WideChests_steel-chest-trashdump-26x31"], ["steel-trashdump-26x32", "WideChests_steel-chest-trashdump-26x32"], ["steel-trashdump-26x33", "WideChests_steel-chest-trashdump-26x33"], ["steel-trashdump-26x34", "WideChests_steel-chest-trashdump-26x34"], ["steel-trashdump-26x35", "WideChests_steel-chest-trashdump-26x35"], ["steel-trashdump-26x36", "WideChests_steel-chest-trashdump-26x36"], ["steel-trashdump-26x37", "WideChests_steel-chest-trashdump-26x37"], ["steel-trashdump-26x38", "WideChests_steel-chest-trashdump-26x38"], ["steel-trashdump-26x39", "WideChests_steel-chest-trashdump-26x39"], ["steel-trashdump-26x40", "WideChests_steel-chest-trashdump-26x40"], ["steel-trashdump-26x41", "WideChests_steel-chest-trashdump-26x41"], ["steel-trashdump-26x42", "WideChests_steel-chest-trashdump-26x42"], ["steel-trashdump-27x6", "WideChests_steel-chest-trashdump-27x6"], ["steel-trashdump-27x7", "WideChests_steel-chest-trashdump-27x7"], ["steel-trashdump-27x8", "WideChests_steel-chest-trashdump-27x8"], ["steel-trashdump-27x9", "WideChests_steel-chest-trashdump-27x9"], ["steel-trashdump-27x10", "WideChests_steel-chest-trashdump-27x10"], ["steel-trashdump-27x11", "WideChests_steel-chest-trashdump-27x11"], ["steel-trashdump-27x12", "WideChests_steel-chest-trashdump-27x12"], ["steel-trashdump-27x13", "WideChests_steel-chest-trashdump-27x13"], ["steel-trashdump-27x14", "WideChests_steel-chest-trashdump-27x14"], ["steel-trashdump-27x15", "WideChests_steel-chest-trashdump-27x15"], ["steel-trashdump-27x16", "WideChests_steel-chest-trashdump-27x16"], ["steel-trashdump-27x17", "WideChests_steel-chest-trashdump-27x17"], ["steel-trashdump-27x18", "WideChests_steel-chest-trashdump-27x18"], ["steel-trashdump-27x19", "WideChests_steel-chest-trashdump-27x19"], ["steel-trashdump-27x20", "WideChests_steel-chest-trashdump-27x20"], ["steel-trashdump-27x21", "WideChests_steel-chest-trashdump-27x21"], ["steel-trashdump-27x22", "WideChests_steel-chest-trashdump-27x22"], ["steel-trashdump-27x23", "WideChests_steel-chest-trashdump-27x23"], ["steel-trashdump-27x24", "WideChests_steel-chest-trashdump-27x24"], ["steel-trashdump-27x25", "WideChests_steel-chest-trashdump-27x25"], ["steel-trashdump-27x26", "WideChests_steel-chest-trashdump-27x26"], ["steel-trashdump-27x27", "WideChests_steel-chest-trashdump-27x27"], ["steel-trashdump-27x28", "WideChests_steel-chest-trashdump-27x28"], ["steel-trashdump-27x29", "WideChests_steel-chest-trashdump-27x29"], ["steel-trashdump-27x30", "WideChests_steel-chest-trashdump-27x30"], ["steel-trashdump-27x31", "WideChests_steel-chest-trashdump-27x31"], ["steel-trashdump-27x32", "WideChests_steel-chest-trashdump-27x32"], ["steel-trashdump-27x33", "WideChests_steel-chest-trashdump-27x33"], ["steel-trashdump-27x34", "WideChests_steel-chest-trashdump-27x34"], ["steel-trashdump-27x35", "WideChests_steel-chest-trashdump-27x35"], ["steel-trashdump-27x36", "WideChests_steel-chest-trashdump-27x36"], ["steel-trashdump-27x37", "WideChests_steel-chest-trashdump-27x37"], ["steel-trashdump-27x38", "WideChests_steel-chest-trashdump-27x38"], ["steel-trashdump-27x39", "WideChests_steel-chest-trashdump-27x39"], ["steel-trashdump-27x40", "WideChests_steel-chest-trashdump-27x40"], ["steel-trashdump-27x41", "WideChests_steel-chest-trashdump-27x41"], ["steel-trashdump-27x42", "WideChests_steel-chest-trashdump-27x42"], ["steel-trashdump-28x6", "WideChests_steel-chest-trashdump-28x6"], ["steel-trashdump-28x7", "WideChests_steel-chest-trashdump-28x7"], ["steel-trashdump-28x8", "WideChests_steel-chest-trashdump-28x8"], ["steel-trashdump-28x9", "WideChests_steel-chest-trashdump-28x9"], ["steel-trashdump-28x10", "WideChests_steel-chest-trashdump-28x10"], ["steel-trashdump-28x11", "WideChests_steel-chest-trashdump-28x11"], ["steel-trashdump-28x12", "WideChests_steel-chest-trashdump-28x12"], ["steel-trashdump-28x13", "WideChests_steel-chest-trashdump-28x13"], ["steel-trashdump-28x14", "WideChests_steel-chest-trashdump-28x14"], ["steel-trashdump-28x15", "WideChests_steel-chest-trashdump-28x15"], ["steel-trashdump-28x16", "WideChests_steel-chest-trashdump-28x16"], ["steel-trashdump-28x17", "WideChests_steel-chest-trashdump-28x17"], ["steel-trashdump-28x18", "WideChests_steel-chest-trashdump-28x18"], ["steel-trashdump-28x19", "WideChests_steel-chest-trashdump-28x19"], ["steel-trashdump-28x20", "WideChests_steel-chest-trashdump-28x20"], ["steel-trashdump-28x21", "WideChests_steel-chest-trashdump-28x21"], ["steel-trashdump-28x22", "WideChests_steel-chest-trashdump-28x22"], ["steel-trashdump-28x23", "WideChests_steel-chest-trashdump-28x23"], ["steel-trashdump-28x24", "WideChests_steel-chest-trashdump-28x24"], ["steel-trashdump-28x25", "WideChests_steel-chest-trashdump-28x25"], ["steel-trashdump-28x26", "WideChests_steel-chest-trashdump-28x26"], ["steel-trashdump-28x27", "WideChests_steel-chest-trashdump-28x27"], ["steel-trashdump-28x28", "WideChests_steel-chest-trashdump-28x28"], ["steel-trashdump-28x29", "WideChests_steel-chest-trashdump-28x29"], ["steel-trashdump-28x30", "WideChests_steel-chest-trashdump-28x30"], ["steel-trashdump-28x31", "WideChests_steel-chest-trashdump-28x31"], ["steel-trashdump-28x32", "WideChests_steel-chest-trashdump-28x32"], ["steel-trashdump-28x33", "WideChests_steel-chest-trashdump-28x33"], ["steel-trashdump-28x34", "WideChests_steel-chest-trashdump-28x34"], ["steel-trashdump-28x35", "WideChests_steel-chest-trashdump-28x35"], ["steel-trashdump-28x36", "WideChests_steel-chest-trashdump-28x36"], ["steel-trashdump-28x37", "WideChests_steel-chest-trashdump-28x37"], ["steel-trashdump-28x38", "WideChests_steel-chest-trashdump-28x38"], ["steel-trashdump-28x39", "WideChests_steel-chest-trashdump-28x39"], ["steel-trashdump-28x40", "WideChests_steel-chest-trashdump-28x40"], ["steel-trashdump-28x41", "WideChests_steel-chest-trashdump-28x41"], ["steel-trashdump-28x42", "WideChests_steel-chest-trashdump-28x42"], ["steel-trashdump-29x6", "WideChests_steel-chest-trashdump-29x6"], ["steel-trashdump-29x7", "WideChests_steel-chest-trashdump-29x7"], ["steel-trashdump-29x8", "WideChests_steel-chest-trashdump-29x8"], ["steel-trashdump-29x9", "WideChests_steel-chest-trashdump-29x9"], ["steel-trashdump-29x10", "WideChests_steel-chest-trashdump-29x10"], ["steel-trashdump-29x11", "WideChests_steel-chest-trashdump-29x11"], ["steel-trashdump-29x12", "WideChests_steel-chest-trashdump-29x12"], ["steel-trashdump-29x13", "WideChests_steel-chest-trashdump-29x13"], ["steel-trashdump-29x14", "WideChests_steel-chest-trashdump-29x14"], ["steel-trashdump-29x15", "WideChests_steel-chest-trashdump-29x15"], ["steel-trashdump-29x16", "WideChests_steel-chest-trashdump-29x16"], ["steel-trashdump-29x17", "WideChests_steel-chest-trashdump-29x17"], ["steel-trashdump-29x18", "WideChests_steel-chest-trashdump-29x18"], ["steel-trashdump-29x19", "WideChests_steel-chest-trashdump-29x19"], ["steel-trashdump-29x20", "WideChests_steel-chest-trashdump-29x20"], ["steel-trashdump-29x21", "WideChests_steel-chest-trashdump-29x21"], ["steel-trashdump-29x22", "WideChests_steel-chest-trashdump-29x22"], ["steel-trashdump-29x23", "WideChests_steel-chest-trashdump-29x23"], ["steel-trashdump-29x24", "WideChests_steel-chest-trashdump-29x24"], ["steel-trashdump-29x25", "WideChests_steel-chest-trashdump-29x25"], ["steel-trashdump-29x26", "WideChests_steel-chest-trashdump-29x26"], ["steel-trashdump-29x27", "WideChests_steel-chest-trashdump-29x27"], ["steel-trashdump-29x28", "WideChests_steel-chest-trashdump-29x28"], ["steel-trashdump-29x29", "WideChests_steel-chest-trashdump-29x29"], ["steel-trashdump-29x30", "WideChests_steel-chest-trashdump-29x30"], ["steel-trashdump-29x31", "WideChests_steel-chest-trashdump-29x31"], ["steel-trashdump-29x32", "WideChests_steel-chest-trashdump-29x32"], ["steel-trashdump-29x33", "WideChests_steel-chest-trashdump-29x33"], ["steel-trashdump-29x34", "WideChests_steel-chest-trashdump-29x34"], ["steel-trashdump-29x35", "WideChests_steel-chest-trashdump-29x35"], ["steel-trashdump-29x36", "WideChests_steel-chest-trashdump-29x36"], ["steel-trashdump-29x37", "WideChests_steel-chest-trashdump-29x37"], ["steel-trashdump-29x38", "WideChests_steel-chest-trashdump-29x38"], ["steel-trashdump-29x39", "WideChests_steel-chest-trashdump-29x39"], ["steel-trashdump-29x40", "WideChests_steel-chest-trashdump-29x40"], ["steel-trashdump-29x41", "WideChests_steel-chest-trashdump-29x41"], ["steel-trashdump-29x42", "WideChests_steel-chest-trashdump-29x42"], ["steel-trashdump-30x6", "WideChests_steel-chest-trashdump-30x6"], ["steel-trashdump-30x7", "WideChests_steel-chest-trashdump-30x7"], ["steel-trashdump-30x8", "WideChests_steel-chest-trashdump-30x8"], ["steel-trashdump-30x9", "WideChests_steel-chest-trashdump-30x9"], ["steel-trashdump-30x10", "WideChests_steel-chest-trashdump-30x10"], ["steel-trashdump-30x11", "WideChests_steel-chest-trashdump-30x11"], ["steel-trashdump-30x12", "WideChests_steel-chest-trashdump-30x12"], ["steel-trashdump-30x13", "WideChests_steel-chest-trashdump-30x13"], ["steel-trashdump-30x14", "WideChests_steel-chest-trashdump-30x14"], ["steel-trashdump-30x15", "WideChests_steel-chest-trashdump-30x15"], ["steel-trashdump-30x16", "WideChests_steel-chest-trashdump-30x16"], ["steel-trashdump-30x17", "WideChests_steel-chest-trashdump-30x17"], ["steel-trashdump-30x18", "WideChests_steel-chest-trashdump-30x18"], ["steel-trashdump-30x19", "WideChests_steel-chest-trashdump-30x19"], ["steel-trashdump-30x20", "WideChests_steel-chest-trashdump-30x20"], ["steel-trashdump-30x21", "WideChests_steel-chest-trashdump-30x21"], ["steel-trashdump-30x22", "WideChests_steel-chest-trashdump-30x22"], ["steel-trashdump-30x23", "WideChests_steel-chest-trashdump-30x23"], ["steel-trashdump-30x24", "WideChests_steel-chest-trashdump-30x24"], ["steel-trashdump-30x25", "WideChests_steel-chest-trashdump-30x25"], ["steel-trashdump-30x26", "WideChests_steel-chest-trashdump-30x26"], ["steel-trashdump-30x27", "WideChests_steel-chest-trashdump-30x27"], ["steel-trashdump-30x28", "WideChests_steel-chest-trashdump-30x28"], ["steel-trashdump-30x29", "WideChests_steel-chest-trashdump-30x29"], ["steel-trashdump-30x30", "WideChests_steel-chest-trashdump-30x30"], ["steel-trashdump-30x31", "WideChests_steel-chest-trashdump-30x31"], ["steel-trashdump-30x32", "WideChests_steel-chest-trashdump-30x32"], ["steel-trashdump-30x33", "WideChests_steel-chest-trashdump-30x33"], ["steel-trashdump-30x34", "WideChests_steel-chest-trashdump-30x34"], ["steel-trashdump-30x35", "WideChests_steel-chest-trashdump-30x35"], ["steel-trashdump-30x36", "WideChests_steel-chest-trashdump-30x36"], ["steel-trashdump-30x37", "WideChests_steel-chest-trashdump-30x37"], ["steel-trashdump-30x38", "WideChests_steel-chest-trashdump-30x38"], ["steel-trashdump-30x39", "WideChests_steel-chest-trashdump-30x39"], ["steel-trashdump-30x40", "WideChests_steel-chest-trashdump-30x40"], ["steel-trashdump-30x41", "WideChests_steel-chest-trashdump-30x41"], ["steel-trashdump-30x42", "WideChests_steel-chest-trashdump-30x42"], ["steel-trashdump-31x6", "WideChests_steel-chest-trashdump-31x6"], ["steel-trashdump-31x7", "WideChests_steel-chest-trashdump-31x7"], ["steel-trashdump-31x8", "WideChests_steel-chest-trashdump-31x8"], ["steel-trashdump-31x9", "WideChests_steel-chest-trashdump-31x9"], ["steel-trashdump-31x10", "WideChests_steel-chest-trashdump-31x10"], ["steel-trashdump-31x11", "WideChests_steel-chest-trashdump-31x11"], ["steel-trashdump-31x12", "WideChests_steel-chest-trashdump-31x12"], ["steel-trashdump-31x13", "WideChests_steel-chest-trashdump-31x13"], ["steel-trashdump-31x14", "WideChests_steel-chest-trashdump-31x14"], ["steel-trashdump-31x15", "WideChests_steel-chest-trashdump-31x15"], ["steel-trashdump-31x16", "WideChests_steel-chest-trashdump-31x16"], ["steel-trashdump-31x17", "WideChests_steel-chest-trashdump-31x17"], ["steel-trashdump-31x18", "WideChests_steel-chest-trashdump-31x18"], ["steel-trashdump-31x19", "WideChests_steel-chest-trashdump-31x19"], ["steel-trashdump-31x20", "WideChests_steel-chest-trashdump-31x20"], ["steel-trashdump-31x21", "WideChests_steel-chest-trashdump-31x21"], ["steel-trashdump-31x22", "WideChests_steel-chest-trashdump-31x22"], ["steel-trashdump-31x23", "WideChests_steel-chest-trashdump-31x23"], ["steel-trashdump-31x24", "WideChests_steel-chest-trashdump-31x24"], ["steel-trashdump-31x25", "WideChests_steel-chest-trashdump-31x25"], ["steel-trashdump-31x26", "WideChests_steel-chest-trashdump-31x26"], ["steel-trashdump-31x27", "WideChests_steel-chest-trashdump-31x27"], ["steel-trashdump-31x28", "WideChests_steel-chest-trashdump-31x28"], ["steel-trashdump-31x29", "WideChests_steel-chest-trashdump-31x29"], ["steel-trashdump-31x30", "WideChests_steel-chest-trashdump-31x30"], ["steel-trashdump-31x31", "WideChests_steel-chest-trashdump-31x31"], ["steel-trashdump-31x32", "WideChests_steel-chest-trashdump-31x32"], ["steel-trashdump-31x33", "WideChests_steel-chest-trashdump-31x33"], ["steel-trashdump-31x34", "WideChests_steel-chest-trashdump-31x34"], ["steel-trashdump-31x35", "WideChests_steel-chest-trashdump-31x35"], ["steel-trashdump-31x36", "WideChests_steel-chest-trashdump-31x36"], ["steel-trashdump-31x37", "WideChests_steel-chest-trashdump-31x37"], ["steel-trashdump-31x38", "WideChests_steel-chest-trashdump-31x38"], ["steel-trashdump-31x39", "WideChests_steel-chest-trashdump-31x39"], ["steel-trashdump-31x40", "WideChests_steel-chest-trashdump-31x40"], ["steel-trashdump-31x41", "WideChests_steel-chest-trashdump-31x41"], ["steel-trashdump-31x42", "WideChests_steel-chest-trashdump-31x42"], ["steel-trashdump-32x6", "WideChests_steel-chest-trashdump-32x6"], ["steel-trashdump-32x7", "WideChests_steel-chest-trashdump-32x7"], ["steel-trashdump-32x8", "WideChests_steel-chest-trashdump-32x8"], ["steel-trashdump-32x9", "WideChests_steel-chest-trashdump-32x9"], ["steel-trashdump-32x10", "WideChests_steel-chest-trashdump-32x10"], ["steel-trashdump-32x11", "WideChests_steel-chest-trashdump-32x11"], ["steel-trashdump-32x12", "WideChests_steel-chest-trashdump-32x12"], ["steel-trashdump-32x13", "WideChests_steel-chest-trashdump-32x13"], ["steel-trashdump-32x14", "WideChests_steel-chest-trashdump-32x14"], ["steel-trashdump-32x15", "WideChests_steel-chest-trashdump-32x15"], ["steel-trashdump-32x16", "WideChests_steel-chest-trashdump-32x16"], ["steel-trashdump-32x17", "WideChests_steel-chest-trashdump-32x17"], ["steel-trashdump-32x18", "WideChests_steel-chest-trashdump-32x18"], ["steel-trashdump-32x19", "WideChests_steel-chest-trashdump-32x19"], ["steel-trashdump-32x20", "WideChests_steel-chest-trashdump-32x20"], ["steel-trashdump-32x21", "WideChests_steel-chest-trashdump-32x21"], ["steel-trashdump-32x22", "WideChests_steel-chest-trashdump-32x22"], ["steel-trashdump-32x23", "WideChests_steel-chest-trashdump-32x23"], ["steel-trashdump-32x24", "WideChests_steel-chest-trashdump-32x24"], ["steel-trashdump-32x25", "WideChests_steel-chest-trashdump-32x25"], ["steel-trashdump-32x26", "WideChests_steel-chest-trashdump-32x26"], ["steel-trashdump-32x27", "WideChests_steel-chest-trashdump-32x27"], ["steel-trashdump-32x28", "WideChests_steel-chest-trashdump-32x28"], ["steel-trashdump-32x29", "WideChests_steel-chest-trashdump-32x29"], ["steel-trashdump-32x30", "WideChests_steel-chest-trashdump-32x30"], ["steel-trashdump-32x31", "WideChests_steel-chest-trashdump-32x31"], ["steel-trashdump-32x32", "WideChests_steel-chest-trashdump-32x32"], ["steel-trashdump-32x33", "WideChests_steel-chest-trashdump-32x33"], ["steel-trashdump-32x34", "WideChests_steel-chest-trashdump-32x34"], ["steel-trashdump-32x35", "WideChests_steel-chest-trashdump-32x35"], ["steel-trashdump-32x36", "WideChests_steel-chest-trashdump-32x36"], ["steel-trashdump-32x37", "WideChests_steel-chest-trashdump-32x37"], ["steel-trashdump-32x38", "WideChests_steel-chest-trashdump-32x38"], ["steel-trashdump-32x39", "WideChests_steel-chest-trashdump-32x39"], ["steel-trashdump-32x40", "WideChests_steel-chest-trashdump-32x40"], ["steel-trashdump-32x41", "WideChests_steel-chest-trashdump-32x41"], ["steel-trashdump-32x42", "WideChests_steel-chest-trashdump-32x42"], ["steel-trashdump-33x6", "WideChests_steel-chest-trashdump-33x6"], ["steel-trashdump-33x7", "WideChests_steel-chest-trashdump-33x7"], ["steel-trashdump-33x8", "WideChests_steel-chest-trashdump-33x8"], ["steel-trashdump-33x9", "WideChests_steel-chest-trashdump-33x9"], ["steel-trashdump-33x10", "WideChests_steel-chest-trashdump-33x10"], ["steel-trashdump-33x11", "WideChests_steel-chest-trashdump-33x11"], ["steel-trashdump-33x12", "WideChests_steel-chest-trashdump-33x12"], ["steel-trashdump-33x13", "WideChests_steel-chest-trashdump-33x13"], ["steel-trashdump-33x14", "WideChests_steel-chest-trashdump-33x14"], ["steel-trashdump-33x15", "WideChests_steel-chest-trashdump-33x15"], ["steel-trashdump-33x16", "WideChests_steel-chest-trashdump-33x16"], ["steel-trashdump-33x17", "WideChests_steel-chest-trashdump-33x17"], ["steel-trashdump-33x18", "WideChests_steel-chest-trashdump-33x18"], ["steel-trashdump-33x19", "WideChests_steel-chest-trashdump-33x19"], ["steel-trashdump-33x20", "WideChests_steel-chest-trashdump-33x20"], ["steel-trashdump-33x21", "WideChests_steel-chest-trashdump-33x21"], ["steel-trashdump-33x22", "WideChests_steel-chest-trashdump-33x22"], ["steel-trashdump-33x23", "WideChests_steel-chest-trashdump-33x23"], ["steel-trashdump-33x24", "WideChests_steel-chest-trashdump-33x24"], ["steel-trashdump-33x25", "WideChests_steel-chest-trashdump-33x25"], ["steel-trashdump-33x26", "WideChests_steel-chest-trashdump-33x26"], ["steel-trashdump-33x27", "WideChests_steel-chest-trashdump-33x27"], ["steel-trashdump-33x28", "WideChests_steel-chest-trashdump-33x28"], ["steel-trashdump-33x29", "WideChests_steel-chest-trashdump-33x29"], ["steel-trashdump-33x30", "WideChests_steel-chest-trashdump-33x30"], ["steel-trashdump-33x31", "WideChests_steel-chest-trashdump-33x31"], ["steel-trashdump-33x32", "WideChests_steel-chest-trashdump-33x32"], ["steel-trashdump-33x33", "WideChests_steel-chest-trashdump-33x33"], ["steel-trashdump-33x34", "WideChests_steel-chest-trashdump-33x34"], ["steel-trashdump-33x35", "WideChests_steel-chest-trashdump-33x35"], ["steel-trashdump-33x36", "WideChests_steel-chest-trashdump-33x36"], ["steel-trashdump-33x37", "WideChests_steel-chest-trashdump-33x37"], ["steel-trashdump-33x38", "WideChests_steel-chest-trashdump-33x38"], ["steel-trashdump-33x39", "WideChests_steel-chest-trashdump-33x39"], ["steel-trashdump-33x40", "WideChests_steel-chest-trashdump-33x40"], ["steel-trashdump-33x41", "WideChests_steel-chest-trashdump-33x41"], ["steel-trashdump-33x42", "WideChests_steel-chest-trashdump-33x42"], ["steel-trashdump-34x6", "WideChests_steel-chest-trashdump-34x6"], ["steel-trashdump-34x7", "WideChests_steel-chest-trashdump-34x7"], ["steel-trashdump-34x8", "WideChests_steel-chest-trashdump-34x8"], ["steel-trashdump-34x9", "WideChests_steel-chest-trashdump-34x9"], ["steel-trashdump-34x10", "WideChests_steel-chest-trashdump-34x10"], ["steel-trashdump-34x11", "WideChests_steel-chest-trashdump-34x11"], ["steel-trashdump-34x12", "WideChests_steel-chest-trashdump-34x12"], ["steel-trashdump-34x13", "WideChests_steel-chest-trashdump-34x13"], ["steel-trashdump-34x14", "WideChests_steel-chest-trashdump-34x14"], ["steel-trashdump-34x15", "WideChests_steel-chest-trashdump-34x15"], ["steel-trashdump-34x16", "WideChests_steel-chest-trashdump-34x16"], ["steel-trashdump-34x17", "WideChests_steel-chest-trashdump-34x17"], ["steel-trashdump-34x18", "WideChests_steel-chest-trashdump-34x18"], ["steel-trashdump-34x19", "WideChests_steel-chest-trashdump-34x19"], ["steel-trashdump-34x20", "WideChests_steel-chest-trashdump-34x20"], ["steel-trashdump-34x21", "WideChests_steel-chest-trashdump-34x21"], ["steel-trashdump-34x22", "WideChests_steel-chest-trashdump-34x22"], ["steel-trashdump-34x23", "WideChests_steel-chest-trashdump-34x23"], ["steel-trashdump-34x24", "WideChests_steel-chest-trashdump-34x24"], ["steel-trashdump-34x25", "WideChests_steel-chest-trashdump-34x25"], ["steel-trashdump-34x26", "WideChests_steel-chest-trashdump-34x26"], ["steel-trashdump-34x27", "WideChests_steel-chest-trashdump-34x27"], ["steel-trashdump-34x28", "WideChests_steel-chest-trashdump-34x28"], ["steel-trashdump-34x29", "WideChests_steel-chest-trashdump-34x29"], ["steel-trashdump-34x30", "WideChests_steel-chest-trashdump-34x30"], ["steel-trashdump-34x31", "WideChests_steel-chest-trashdump-34x31"], ["steel-trashdump-34x32", "WideChests_steel-chest-trashdump-34x32"], ["steel-trashdump-34x33", "WideChests_steel-chest-trashdump-34x33"], ["steel-trashdump-34x34", "WideChests_steel-chest-trashdump-34x34"], ["steel-trashdump-34x35", "WideChests_steel-chest-trashdump-34x35"], ["steel-trashdump-34x36", "WideChests_steel-chest-trashdump-34x36"], ["steel-trashdump-34x37", "WideChests_steel-chest-trashdump-34x37"], ["steel-trashdump-34x38", "WideChests_steel-chest-trashdump-34x38"], ["steel-trashdump-34x39", "WideChests_steel-chest-trashdump-34x39"], ["steel-trashdump-34x40", "WideChests_steel-chest-trashdump-34x40"], ["steel-trashdump-34x41", "WideChests_steel-chest-trashdump-34x41"], ["steel-trashdump-34x42", "WideChests_steel-chest-trashdump-34x42"], ["steel-trashdump-35x6", "WideChests_steel-chest-trashdump-35x6"], ["steel-trashdump-35x7", "WideChests_steel-chest-trashdump-35x7"], ["steel-trashdump-35x8", "WideChests_steel-chest-trashdump-35x8"], ["steel-trashdump-35x9", "WideChests_steel-chest-trashdump-35x9"], ["steel-trashdump-35x10", "WideChests_steel-chest-trashdump-35x10"], ["steel-trashdump-35x11", "WideChests_steel-chest-trashdump-35x11"], ["steel-trashdump-35x12", "WideChests_steel-chest-trashdump-35x12"], ["steel-trashdump-35x13", "WideChests_steel-chest-trashdump-35x13"], ["steel-trashdump-35x14", "WideChests_steel-chest-trashdump-35x14"], ["steel-trashdump-35x15", "WideChests_steel-chest-trashdump-35x15"], ["steel-trashdump-35x16", "WideChests_steel-chest-trashdump-35x16"], ["steel-trashdump-35x17", "WideChests_steel-chest-trashdump-35x17"], ["steel-trashdump-35x18", "WideChests_steel-chest-trashdump-35x18"], ["steel-trashdump-35x19", "WideChests_steel-chest-trashdump-35x19"], ["steel-trashdump-35x20", "WideChests_steel-chest-trashdump-35x20"], ["steel-trashdump-35x21", "WideChests_steel-chest-trashdump-35x21"], ["steel-trashdump-35x22", "WideChests_steel-chest-trashdump-35x22"], ["steel-trashdump-35x23", "WideChests_steel-chest-trashdump-35x23"], ["steel-trashdump-35x24", "WideChests_steel-chest-trashdump-35x24"], ["steel-trashdump-35x25", "WideChests_steel-chest-trashdump-35x25"], ["steel-trashdump-35x26", "WideChests_steel-chest-trashdump-35x26"], ["steel-trashdump-35x27", "WideChests_steel-chest-trashdump-35x27"], ["steel-trashdump-35x28", "WideChests_steel-chest-trashdump-35x28"], ["steel-trashdump-35x29", "WideChests_steel-chest-trashdump-35x29"], ["steel-trashdump-35x30", "WideChests_steel-chest-trashdump-35x30"], ["steel-trashdump-35x31", "WideChests_steel-chest-trashdump-35x31"], ["steel-trashdump-35x32", "WideChests_steel-chest-trashdump-35x32"], ["steel-trashdump-35x33", "WideChests_steel-chest-trashdump-35x33"], ["steel-trashdump-35x34", "WideChests_steel-chest-trashdump-35x34"], ["steel-trashdump-35x35", "WideChests_steel-chest-trashdump-35x35"], ["steel-trashdump-35x36", "WideChests_steel-chest-trashdump-35x36"], ["steel-trashdump-35x37", "WideChests_steel-chest-trashdump-35x37"], ["steel-trashdump-35x38", "WideChests_steel-chest-trashdump-35x38"], ["steel-trashdump-35x39", "WideChests_steel-chest-trashdump-35x39"], ["steel-trashdump-35x40", "WideChests_steel-chest-trashdump-35x40"], ["steel-trashdump-35x41", "WideChests_steel-chest-trashdump-35x41"], ["steel-trashdump-35x42", "WideChests_steel-chest-trashdump-35x42"], ["steel-trashdump-36x6", "WideChests_steel-chest-trashdump-36x6"], ["steel-trashdump-36x7", "WideChests_steel-chest-trashdump-36x7"], ["steel-trashdump-36x8", "WideChests_steel-chest-trashdump-36x8"], ["steel-trashdump-36x9", "WideChests_steel-chest-trashdump-36x9"], ["steel-trashdump-36x10", "WideChests_steel-chest-trashdump-36x10"], ["steel-trashdump-36x11", "WideChests_steel-chest-trashdump-36x11"], ["steel-trashdump-36x12", "WideChests_steel-chest-trashdump-36x12"], ["steel-trashdump-36x13", "WideChests_steel-chest-trashdump-36x13"], ["steel-trashdump-36x14", "WideChests_steel-chest-trashdump-36x14"], ["steel-trashdump-36x15", "WideChests_steel-chest-trashdump-36x15"], ["steel-trashdump-36x16", "WideChests_steel-chest-trashdump-36x16"], ["steel-trashdump-36x17", "WideChests_steel-chest-trashdump-36x17"], ["steel-trashdump-36x18", "WideChests_steel-chest-trashdump-36x18"], ["steel-trashdump-36x19", "WideChests_steel-chest-trashdump-36x19"], ["steel-trashdump-36x20", "WideChests_steel-chest-trashdump-36x20"], ["steel-trashdump-36x21", "WideChests_steel-chest-trashdump-36x21"], ["steel-trashdump-36x22", "WideChests_steel-chest-trashdump-36x22"], ["steel-trashdump-36x23", "WideChests_steel-chest-trashdump-36x23"], ["steel-trashdump-36x24", "WideChests_steel-chest-trashdump-36x24"], ["steel-trashdump-36x25", "WideChests_steel-chest-trashdump-36x25"], ["steel-trashdump-36x26", "WideChests_steel-chest-trashdump-36x26"], ["steel-trashdump-36x27", "WideChests_steel-chest-trashdump-36x27"], ["steel-trashdump-36x28", "WideChests_steel-chest-trashdump-36x28"], ["steel-trashdump-36x29", "WideChests_steel-chest-trashdump-36x29"], ["steel-trashdump-36x30", "WideChests_steel-chest-trashdump-36x30"], ["steel-trashdump-36x31", "WideChests_steel-chest-trashdump-36x31"], ["steel-trashdump-36x32", "WideChests_steel-chest-trashdump-36x32"], ["steel-trashdump-36x33", "WideChests_steel-chest-trashdump-36x33"], ["steel-trashdump-36x34", "WideChests_steel-chest-trashdump-36x34"], ["steel-trashdump-36x35", "WideChests_steel-chest-trashdump-36x35"], ["steel-trashdump-36x36", "WideChests_steel-chest-trashdump-36x36"], ["steel-trashdump-36x37", "WideChests_steel-chest-trashdump-36x37"], ["steel-trashdump-36x38", "WideChests_steel-chest-trashdump-36x38"], ["steel-trashdump-36x39", "WideChests_steel-chest-trashdump-36x39"], ["steel-trashdump-36x40", "WideChests_steel-chest-trashdump-36x40"], ["steel-trashdump-36x41", "WideChests_steel-chest-trashdump-36x41"], ["steel-trashdump-36x42", "WideChests_steel-chest-trashdump-36x42"], ["steel-trashdump-37x6", "WideChests_steel-chest-trashdump-37x6"], ["steel-trashdump-37x7", "WideChests_steel-chest-trashdump-37x7"], ["steel-trashdump-37x8", "WideChests_steel-chest-trashdump-37x8"], ["steel-trashdump-37x9", "WideChests_steel-chest-trashdump-37x9"], ["steel-trashdump-37x10", "WideChests_steel-chest-trashdump-37x10"], ["steel-trashdump-37x11", "WideChests_steel-chest-trashdump-37x11"], ["steel-trashdump-37x12", "WideChests_steel-chest-trashdump-37x12"], ["steel-trashdump-37x13", "WideChests_steel-chest-trashdump-37x13"], ["steel-trashdump-37x14", "WideChests_steel-chest-trashdump-37x14"], ["steel-trashdump-37x15", "WideChests_steel-chest-trashdump-37x15"], ["steel-trashdump-37x16", "WideChests_steel-chest-trashdump-37x16"], ["steel-trashdump-37x17", "WideChests_steel-chest-trashdump-37x17"], ["steel-trashdump-37x18", "WideChests_steel-chest-trashdump-37x18"], ["steel-trashdump-37x19", "WideChests_steel-chest-trashdump-37x19"], ["steel-trashdump-37x20", "WideChests_steel-chest-trashdump-37x20"], ["steel-trashdump-37x21", "WideChests_steel-chest-trashdump-37x21"], ["steel-trashdump-37x22", "WideChests_steel-chest-trashdump-37x22"], ["steel-trashdump-37x23", "WideChests_steel-chest-trashdump-37x23"], ["steel-trashdump-37x24", "WideChests_steel-chest-trashdump-37x24"], ["steel-trashdump-37x25", "WideChests_steel-chest-trashdump-37x25"], ["steel-trashdump-37x26", "WideChests_steel-chest-trashdump-37x26"], ["steel-trashdump-37x27", "WideChests_steel-chest-trashdump-37x27"], ["steel-trashdump-37x28", "WideChests_steel-chest-trashdump-37x28"], ["steel-trashdump-37x29", "WideChests_steel-chest-trashdump-37x29"], ["steel-trashdump-37x30", "WideChests_steel-chest-trashdump-37x30"], ["steel-trashdump-37x31", "WideChests_steel-chest-trashdump-37x31"], ["steel-trashdump-37x32", "WideChests_steel-chest-trashdump-37x32"], ["steel-trashdump-37x33", "WideChests_steel-chest-trashdump-37x33"], ["steel-trashdump-37x34", "WideChests_steel-chest-trashdump-37x34"], ["steel-trashdump-37x35", "WideChests_steel-chest-trashdump-37x35"], ["steel-trashdump-37x36", "WideChests_steel-chest-trashdump-37x36"], ["steel-trashdump-37x37", "WideChests_steel-chest-trashdump-37x37"], ["steel-trashdump-37x38", "WideChests_steel-chest-trashdump-37x38"], ["steel-trashdump-37x39", "WideChests_steel-chest-trashdump-37x39"], ["steel-trashdump-37x40", "WideChests_steel-chest-trashdump-37x40"], ["steel-trashdump-37x41", "WideChests_steel-chest-trashdump-37x41"], ["steel-trashdump-37x42", "WideChests_steel-chest-trashdump-37x42"], ["steel-trashdump-38x6", "WideChests_steel-chest-trashdump-38x6"], ["steel-trashdump-38x7", "WideChests_steel-chest-trashdump-38x7"], ["steel-trashdump-38x8", "WideChests_steel-chest-trashdump-38x8"], ["steel-trashdump-38x9", "WideChests_steel-chest-trashdump-38x9"], ["steel-trashdump-38x10", "WideChests_steel-chest-trashdump-38x10"], ["steel-trashdump-38x11", "WideChests_steel-chest-trashdump-38x11"], ["steel-trashdump-38x12", "WideChests_steel-chest-trashdump-38x12"], ["steel-trashdump-38x13", "WideChests_steel-chest-trashdump-38x13"], ["steel-trashdump-38x14", "WideChests_steel-chest-trashdump-38x14"], ["steel-trashdump-38x15", "WideChests_steel-chest-trashdump-38x15"], ["steel-trashdump-38x16", "WideChests_steel-chest-trashdump-38x16"], ["steel-trashdump-38x17", "WideChests_steel-chest-trashdump-38x17"], ["steel-trashdump-38x18", "WideChests_steel-chest-trashdump-38x18"], ["steel-trashdump-38x19", "WideChests_steel-chest-trashdump-38x19"], ["steel-trashdump-38x20", "WideChests_steel-chest-trashdump-38x20"], ["steel-trashdump-38x21", "WideChests_steel-chest-trashdump-38x21"], ["steel-trashdump-38x22", "WideChests_steel-chest-trashdump-38x22"], ["steel-trashdump-38x23", "WideChests_steel-chest-trashdump-38x23"], ["steel-trashdump-38x24", "WideChests_steel-chest-trashdump-38x24"], ["steel-trashdump-38x25", "WideChests_steel-chest-trashdump-38x25"], ["steel-trashdump-38x26", "WideChests_steel-chest-trashdump-38x26"], ["steel-trashdump-38x27", "WideChests_steel-chest-trashdump-38x27"], ["steel-trashdump-38x28", "WideChests_steel-chest-trashdump-38x28"], ["steel-trashdump-38x29", "WideChests_steel-chest-trashdump-38x29"], ["steel-trashdump-38x30", "WideChests_steel-chest-trashdump-38x30"], ["steel-trashdump-38x31", "WideChests_steel-chest-trashdump-38x31"], ["steel-trashdump-38x32", "WideChests_steel-chest-trashdump-38x32"], ["steel-trashdump-38x33", "WideChests_steel-chest-trashdump-38x33"], ["steel-trashdump-38x34", "WideChests_steel-chest-trashdump-38x34"], ["steel-trashdump-38x35", "WideChests_steel-chest-trashdump-38x35"], ["steel-trashdump-38x36", "WideChests_steel-chest-trashdump-38x36"], ["steel-trashdump-38x37", "WideChests_steel-chest-trashdump-38x37"], ["steel-trashdump-38x38", "WideChests_steel-chest-trashdump-38x38"], ["steel-trashdump-38x39", "WideChests_steel-chest-trashdump-38x39"], ["steel-trashdump-38x40", "WideChests_steel-chest-trashdump-38x40"], ["steel-trashdump-38x41", "WideChests_steel-chest-trashdump-38x41"], ["steel-trashdump-38x42", "WideChests_steel-chest-trashdump-38x42"], ["steel-trashdump-39x6", "WideChests_steel-chest-trashdump-39x6"], ["steel-trashdump-39x7", "WideChests_steel-chest-trashdump-39x7"], ["steel-trashdump-39x8", "WideChests_steel-chest-trashdump-39x8"], ["steel-trashdump-39x9", "WideChests_steel-chest-trashdump-39x9"], ["steel-trashdump-39x10", "WideChests_steel-chest-trashdump-39x10"], ["steel-trashdump-39x11", "WideChests_steel-chest-trashdump-39x11"], ["steel-trashdump-39x12", "WideChests_steel-chest-trashdump-39x12"], ["steel-trashdump-39x13", "WideChests_steel-chest-trashdump-39x13"], ["steel-trashdump-39x14", "WideChests_steel-chest-trashdump-39x14"], ["steel-trashdump-39x15", "WideChests_steel-chest-trashdump-39x15"], ["steel-trashdump-39x16", "WideChests_steel-chest-trashdump-39x16"], ["steel-trashdump-39x17", "WideChests_steel-chest-trashdump-39x17"], ["steel-trashdump-39x18", "WideChests_steel-chest-trashdump-39x18"], ["steel-trashdump-39x19", "WideChests_steel-chest-trashdump-39x19"], ["steel-trashdump-39x20", "WideChests_steel-chest-trashdump-39x20"], ["steel-trashdump-39x21", "WideChests_steel-chest-trashdump-39x21"], ["steel-trashdump-39x22", "WideChests_steel-chest-trashdump-39x22"], ["steel-trashdump-39x23", "WideChests_steel-chest-trashdump-39x23"], ["steel-trashdump-39x24", "WideChests_steel-chest-trashdump-39x24"], ["steel-trashdump-39x25", "WideChests_steel-chest-trashdump-39x25"], ["steel-trashdump-39x26", "WideChests_steel-chest-trashdump-39x26"], ["steel-trashdump-39x27", "WideChests_steel-chest-trashdump-39x27"], ["steel-trashdump-39x28", "WideChests_steel-chest-trashdump-39x28"], ["steel-trashdump-39x29", "WideChests_steel-chest-trashdump-39x29"], ["steel-trashdump-39x30", "WideChests_steel-chest-trashdump-39x30"], ["steel-trashdump-39x31", "WideChests_steel-chest-trashdump-39x31"], ["steel-trashdump-39x32", "WideChests_steel-chest-trashdump-39x32"], ["steel-trashdump-39x33", "WideChests_steel-chest-trashdump-39x33"], ["steel-trashdump-39x34", "WideChests_steel-chest-trashdump-39x34"], ["steel-trashdump-39x35", "WideChests_steel-chest-trashdump-39x35"], ["steel-trashdump-39x36", "WideChests_steel-chest-trashdump-39x36"], ["steel-trashdump-39x37", "WideChests_steel-chest-trashdump-39x37"], ["steel-trashdump-39x38", "WideChests_steel-chest-trashdump-39x38"], ["steel-trashdump-39x39", "WideChests_steel-chest-trashdump-39x39"], ["steel-trashdump-39x40", "WideChests_steel-chest-trashdump-39x40"], ["steel-trashdump-39x41", "WideChests_steel-chest-trashdump-39x41"], ["steel-trashdump-39x42", "WideChests_steel-chest-trashdump-39x42"], ["steel-trashdump-40x6", "WideChests_steel-chest-trashdump-40x6"], ["steel-trashdump-40x7", "WideChests_steel-chest-trashdump-40x7"], ["steel-trashdump-40x8", "WideChests_steel-chest-trashdump-40x8"], ["steel-trashdump-40x9", "WideChests_steel-chest-trashdump-40x9"], ["steel-trashdump-40x10", "WideChests_steel-chest-trashdump-40x10"], ["steel-trashdump-40x11", "WideChests_steel-chest-trashdump-40x11"], ["steel-trashdump-40x12", "WideChests_steel-chest-trashdump-40x12"], ["steel-trashdump-40x13", "WideChests_steel-chest-trashdump-40x13"], ["steel-trashdump-40x14", "WideChests_steel-chest-trashdump-40x14"], ["steel-trashdump-40x15", "WideChests_steel-chest-trashdump-40x15"], ["steel-trashdump-40x16", "WideChests_steel-chest-trashdump-40x16"], ["steel-trashdump-40x17", "WideChests_steel-chest-trashdump-40x17"], ["steel-trashdump-40x18", "WideChests_steel-chest-trashdump-40x18"], ["steel-trashdump-40x19", "WideChests_steel-chest-trashdump-40x19"], ["steel-trashdump-40x20", "WideChests_steel-chest-trashdump-40x20"], ["steel-trashdump-40x21", "WideChests_steel-chest-trashdump-40x21"], ["steel-trashdump-40x22", "WideChests_steel-chest-trashdump-40x22"], ["steel-trashdump-40x23", "WideChests_steel-chest-trashdump-40x23"], ["steel-trashdump-40x24", "WideChests_steel-chest-trashdump-40x24"], ["steel-trashdump-40x25", "WideChests_steel-chest-trashdump-40x25"], ["steel-trashdump-40x26", "WideChests_steel-chest-trashdump-40x26"], ["steel-trashdump-40x27", "WideChests_steel-chest-trashdump-40x27"], ["steel-trashdump-40x28", "WideChests_steel-chest-trashdump-40x28"], ["steel-trashdump-40x29", "WideChests_steel-chest-trashdump-40x29"], ["steel-trashdump-40x30", "WideChests_steel-chest-trashdump-40x30"], ["steel-trashdump-40x31", "WideChests_steel-chest-trashdump-40x31"], ["steel-trashdump-40x32", "WideChests_steel-chest-trashdump-40x32"], ["steel-trashdump-40x33", "WideChests_steel-chest-trashdump-40x33"], ["steel-trashdump-40x34", "WideChests_steel-chest-trashdump-40x34"], ["steel-trashdump-40x35", "WideChests_steel-chest-trashdump-40x35"], ["steel-trashdump-40x36", "WideChests_steel-chest-trashdump-40x36"], ["steel-trashdump-40x37", "WideChests_steel-chest-trashdump-40x37"], ["steel-trashdump-40x38", "WideChests_steel-chest-trashdump-40x38"], ["steel-trashdump-40x39", "WideChests_steel-chest-trashdump-40x39"], ["steel-trashdump-40x40", "WideChests_steel-chest-trashdump-40x40"], ["steel-trashdump-40x41", "WideChests_steel-chest-trashdump-40x41"], ["steel-trashdump-40x42", "WideChests_steel-chest-trashdump-40x42"], ["steel-trashdump-41x6", "WideChests_steel-chest-trashdump-41x6"], ["steel-trashdump-41x7", "WideChests_steel-chest-trashdump-41x7"], ["steel-trashdump-41x8", "WideChests_steel-chest-trashdump-41x8"], ["steel-trashdump-41x9", "WideChests_steel-chest-trashdump-41x9"], ["steel-trashdump-41x10", "WideChests_steel-chest-trashdump-41x10"], ["steel-trashdump-41x11", "WideChests_steel-chest-trashdump-41x11"], ["steel-trashdump-41x12", "WideChests_steel-chest-trashdump-41x12"], ["steel-trashdump-41x13", "WideChests_steel-chest-trashdump-41x13"], ["steel-trashdump-41x14", "WideChests_steel-chest-trashdump-41x14"], ["steel-trashdump-41x15", "WideChests_steel-chest-trashdump-41x15"], ["steel-trashdump-41x16", "WideChests_steel-chest-trashdump-41x16"], ["steel-trashdump-41x17", "WideChests_steel-chest-trashdump-41x17"], ["steel-trashdump-41x18", "WideChests_steel-chest-trashdump-41x18"], ["steel-trashdump-41x19", "WideChests_steel-chest-trashdump-41x19"], ["steel-trashdump-41x20", "WideChests_steel-chest-trashdump-41x20"], ["steel-trashdump-41x21", "WideChests_steel-chest-trashdump-41x21"], ["steel-trashdump-41x22", "WideChests_steel-chest-trashdump-41x22"], ["steel-trashdump-41x23", "WideChests_steel-chest-trashdump-41x23"], ["steel-trashdump-41x24", "WideChests_steel-chest-trashdump-41x24"], ["steel-trashdump-41x25", "WideChests_steel-chest-trashdump-41x25"], ["steel-trashdump-41x26", "WideChests_steel-chest-trashdump-41x26"], ["steel-trashdump-41x27", "WideChests_steel-chest-trashdump-41x27"], ["steel-trashdump-41x28", "WideChests_steel-chest-trashdump-41x28"], ["steel-trashdump-41x29", "WideChests_steel-chest-trashdump-41x29"], ["steel-trashdump-41x30", "WideChests_steel-chest-trashdump-41x30"], ["steel-trashdump-41x31", "WideChests_steel-chest-trashdump-41x31"], ["steel-trashdump-41x32", "WideChests_steel-chest-trashdump-41x32"], ["steel-trashdump-41x33", "WideChests_steel-chest-trashdump-41x33"], ["steel-trashdump-41x34", "WideChests_steel-chest-trashdump-41x34"], ["steel-trashdump-41x35", "WideChests_steel-chest-trashdump-41x35"], ["steel-trashdump-41x36", "WideChests_steel-chest-trashdump-41x36"], ["steel-trashdump-41x37", "WideChests_steel-chest-trashdump-41x37"], ["steel-trashdump-41x38", "WideChests_steel-chest-trashdump-41x38"], ["steel-trashdump-41x39", "WideChests_steel-chest-trashdump-41x39"], ["steel-trashdump-41x40", "WideChests_steel-chest-trashdump-41x40"], ["steel-trashdump-41x41", "WideChests_steel-chest-trashdump-41x41"], ["steel-trashdump-41x42", "WideChests_steel-chest-trashdump-41x42"], ["steel-trashdump-42x6", "WideChests_steel-chest-trashdump-42x6"], ["steel-trashdump-42x7", "WideChests_steel-chest-trashdump-42x7"], ["steel-trashdump-42x8", "WideChests_steel-chest-trashdump-42x8"], ["steel-trashdump-42x9", "WideChests_steel-chest-trashdump-42x9"], ["steel-trashdump-42x10", "WideChests_steel-chest-trashdump-42x10"], ["steel-trashdump-42x11", "WideChests_steel-chest-trashdump-42x11"], ["steel-trashdump-42x12", "WideChests_steel-chest-trashdump-42x12"], ["steel-trashdump-42x13", "WideChests_steel-chest-trashdump-42x13"], ["steel-trashdump-42x14", "WideChests_steel-chest-trashdump-42x14"], ["steel-trashdump-42x15", "WideChests_steel-chest-trashdump-42x15"], ["steel-trashdump-42x16", "WideChests_steel-chest-trashdump-42x16"], ["steel-trashdump-42x17", "WideChests_steel-chest-trashdump-42x17"], ["steel-trashdump-42x18", "WideChests_steel-chest-trashdump-42x18"], ["steel-trashdump-42x19", "WideChests_steel-chest-trashdump-42x19"], ["steel-trashdump-42x20", "WideChests_steel-chest-trashdump-42x20"], ["steel-trashdump-42x21", "WideChests_steel-chest-trashdump-42x21"], ["steel-trashdump-42x22", "WideChests_steel-chest-trashdump-42x22"], ["steel-trashdump-42x23", "WideChests_steel-chest-trashdump-42x23"], ["steel-trashdump-42x24", "WideChests_steel-chest-trashdump-42x24"], ["steel-trashdump-42x25", "WideChests_steel-chest-trashdump-42x25"], ["steel-trashdump-42x26", "WideChests_steel-chest-trashdump-42x26"], ["steel-trashdump-42x27", "WideChests_steel-chest-trashdump-42x27"], ["steel-trashdump-42x28", "WideChests_steel-chest-trashdump-42x28"], ["steel-trashdump-42x29", "WideChests_steel-chest-trashdump-42x29"], ["steel-trashdump-42x30", "WideChests_steel-chest-trashdump-42x30"], ["steel-trashdump-42x31", "WideChests_steel-chest-trashdump-42x31"], ["steel-trashdump-42x32", "WideChests_steel-chest-trashdump-42x32"], ["steel-trashdump-42x33", "WideChests_steel-chest-trashdump-42x33"], ["steel-trashdump-42x34", "WideChests_steel-chest-trashdump-42x34"], ["steel-trashdump-42x35", "WideChests_steel-chest-trashdump-42x35"], ["steel-trashdump-42x36", "WideChests_steel-chest-trashdump-42x36"], ["steel-trashdump-42x37", "WideChests_steel-chest-trashdump-42x37"], ["steel-trashdump-42x38", "WideChests_steel-chest-trashdump-42x38"], ["steel-trashdump-42x39", "WideChests_steel-chest-trashdump-42x39"], ["steel-trashdump-42x40", "WideChests_steel-chest-trashdump-42x40"], ["steel-trashdump-42x41", "WideChests_steel-chest-trashdump-42x41"], ["steel-trashdump-42x42", "WideChests_steel-chest-trashdump-42x42"]]} \ No newline at end of file diff --git a/WideChests/prototypes/custom_input.lua b/WideChests/prototypes/custom_input.lua new file mode 100644 index 00000000..f6b92c44 --- /dev/null +++ b/WideChests/prototypes/custom_input.lua @@ -0,0 +1,13 @@ +data:extend( +{ + { + type = 'custom-input', + name = MergingChests.custom_input_names.rotate_blueprint_clockwise, + key_sequence = '' + }, + { + type = 'custom-input', + name = MergingChests.custom_input_names.rotate_blueprint_counterclockwise, + key_sequence = '' + } +}) diff --git a/WideChests/prototypes/groups.lua b/WideChests/prototypes/groups.lua new file mode 100644 index 00000000..159c7478 --- /dev/null +++ b/WideChests/prototypes/groups.lua @@ -0,0 +1,34 @@ +data:extend( +{ + { + type = 'item-group', + name = MergingChests.item_group_names.merged_chests, + order = 'wide-chests', + icon = '__base__/graphics/item-group/logistics.png', + icon_size = 64, + }, + { + type = 'item-subgroup', + name = MergingChests.item_group_names.wide_chests, + group = MergingChests.item_group_names.merged_chests, + order = 'a', + }, + { + type = 'item-subgroup', + name = MergingChests.item_group_names.high_chests, + group = MergingChests.item_group_names.merged_chests, + order = 'b', + }, + { + type = 'item-subgroup', + name = MergingChests.item_group_names.warehouses, + group = MergingChests.item_group_names.merged_chests, + order = 'c', + }, + { + type = 'item-subgroup', + name = MergingChests.item_group_names.trashdumps, + group = MergingChests.item_group_names.merged_chests, + order = 'd', + } +}) diff --git a/WideChests/prototypes/item.lua b/WideChests/prototypes/item.lua new file mode 100644 index 00000000..a4651a90 --- /dev/null +++ b/WideChests/prototypes/item.lua @@ -0,0 +1,22 @@ +data:extend({ + { + type = 'selection-tool', + name = MergingChests.merge_selection_tool_name, + icon = '__WideChests__/graphics/icons/merge-chest-selector.png', + icon_size = 32, + subgroup = 'tool', + order = 'c[automated-construction]-a[merge-chest]', + stack_size = 1, + stackable = false, + draw_label_for_cursor_render = true, + selection_color = { r = 0, g = 0, b = 1 }, + alt_selection_color = { r = 1, g = 0, b = 0 }, + flags = { 'only-in-cursor' }, + selection_mode = { 'buildable-type' }, + alt_selection_mode = { 'buildable-type' }, + selection_cursor_box_type = 'entity', + alt_selection_cursor_box_type = 'entity', + entity_filters = {}, + alt_entity_filters = {} + } +}) diff --git a/WideChests/prototypes/shortcuts.lua b/WideChests/prototypes/shortcuts.lua new file mode 100644 index 00000000..f3454c6c --- /dev/null +++ b/WideChests/prototypes/shortcuts.lua @@ -0,0 +1,17 @@ +data:extend( +{ + { + type = 'shortcut', + name = MergingChests.merge_shortcut_name, + order = 'b[blueprints]-c[merge-chests]', + action = 'lua', + icon = + { + filename = '__WideChests__/graphics/icons/merge-shortcut.png', + priority = 'extra-high-no-scale', + size = 32, + scale = 1, + flags = { 'icon' } + } + } +}) diff --git a/WideChests/scripts/event_handlers/merge_chest.lua b/WideChests/scripts/event_handlers/merge_chest.lua new file mode 100644 index 00000000..8abfd52d --- /dev/null +++ b/WideChests/scripts/event_handlers/merge_chest.lua @@ -0,0 +1,210 @@ +local bounding_box = require("__flib__/bounding-box") + +--- @param box BoundingBox +--- @return number +function bounding_box.area(box) + return bounding_box.width(box) * bounding_box.height(box) +end + +--- @alias ChestGroup +--- | { entities: LuaEntity[], bounding_box: BoundingBox, merged_chest_name: string } + +--- @param event chest_merged_event +local function raise_on_chest_merged(event) + script.raise_event(MergingChests.on_chest_merged_event_name, event) +end + +--- @param entities LuaEntity[] +--- @return { [string]: LuaEntity[] } +local function group_by_name(entities) + local groups = { } + for _, entity in ipairs(entities) do + local entity_name = entity.name + if not groups[entity_name] then + groups[entity_name] = { } + end + table.insert(groups[entity_name], entity) + end + return groups +end + +--- @alias Histogram +--- | number[] +--- | { min_index: integer, max_index: integer } + +--- @param histogram Histogram +--- @param is_size_allowed fun(width: integer, height: integer): boolean +--- @return integer index, integer width, integer height +local function find_largest_rectangle_under_histogram(histogram, is_size_allowed) + local max_index = 0 + local max_width = 0 + local max_height = 0 + + local stack = { } + local top = 0 + local index = 0 + + local function calculate_area_and_update() + local peak = stack[top] + top = top - 1 + + local width = histogram[peak + histogram.min_index] + local height = top == 0 and index or (index - stack[top] - 1) + + if width * height > max_width * max_height and is_size_allowed(width, height) then + max_index = index + histogram.min_index - height + max_width = width + max_height = height + end + end + + while index < histogram.max_index - histogram.min_index + 1 do + if top == 0 or histogram[stack[top] + histogram.min_index] <= histogram[index + histogram.min_index] then + top = top + 1 + stack[top] = index + index = index + 1 + else + calculate_area_and_update() + end + end + + while top > 0 do + calculate_area_and_update() + end + + return max_index, max_width, max_height +end + +--- @param grid Grid +--- @param is_size_allowed fun(width: integer, height: integer): boolean +--- @return BoundingBox | nil +local function find_largest_rectangle(grid, is_size_allowed) + --- @type BoundingBox | nil + local rectangle = nil + + --- @type Histogram + local histogram = { + min_index = grid.min_y, + max_index = grid.max_y + } + for x = grid.min_x, grid.max_x do + for y = grid.min_y, grid.max_y do + if grid[x] and grid[x][y] then + histogram[y] = (histogram[y] or 0) + 1 + else + histogram[y] = 0 + end + end + + local y_start, width, height = find_largest_rectangle_under_histogram(histogram, is_size_allowed) + + if width * height > (rectangle and bounding_box.area(rectangle) or 0) then + rectangle = { + left_top = { + x = x - width + 1, + y = y_start + }, + right_bottom = { + x = x + 1, + y = y_start + height + } + } + end + end + + return rectangle +end + +--- @param entities LuaEntity[] +--- @return ChestGroup[] +local function group_chests(entities) + local chest_name = entities[1].name + local chest_grid = MergingChests.entities_to_grid(entities) + + local groups = { } + local merged = false + + repeat + merged = false + + --- @param width integer + --- @param height integer + --- @return boolean + local function is_size_allowed(width, height) + return game.entity_prototypes[MergingChests.get_merged_chest_name(chest_name, width, height)] ~= nil + end + + local rectangle = find_largest_rectangle(chest_grid, is_size_allowed) + + if rectangle and (bounding_box.width(rectangle) > 1 or bounding_box.height(rectangle) > 1) then + --- @type ChestGroup + local group = { + entities = { }, + merged_chest_name = MergingChests.get_merged_chest_name(chest_name, bounding_box.width(rectangle), bounding_box.height(rectangle)), + bounding_box = rectangle + } + for x = rectangle.left_top.x, rectangle.right_bottom.x - 1 do + for y = rectangle.left_top.y, rectangle.right_bottom.y - 1 do + table.insert(group.entities, chest_grid[x][y]) + chest_grid[x][y] = nil + end + end + + table.insert(groups, group) + merged = true + end + until not merged + + return groups +end + +--- @param player LuaPlayer +--- @param chest_name string +--- @param position MapPosition +--- @return LuaEntity? +local function create_merged_chest(player, chest_name, position) + return player.surface.create_entity({ + name = chest_name, + position = position, + force = player.force, + raise_built = true + }) +end + +local function on_player_selected_area(event) + if event.item and event.item == MergingChests.merge_selection_tool_name then + local player = game.players[event.player_index] + + local entity_groups = group_by_name(event.entities) + for _, entities in pairs(entity_groups) do + for _, chest_group_to_merge in ipairs(group_chests(entities)) do + if MergingChests.can_move_inventories(chest_group_to_merge.entities, chest_group_to_merge.merged_chest_name, bounding_box.area(chest_group_to_merge.bounding_box)) then + local merged_chest = create_merged_chest(player, chest_group_to_merge.merged_chest_name, bounding_box.center(chest_group_to_merge.bounding_box)) + if merged_chest then + MergingChests.move_inventories(chest_group_to_merge.entities, { merged_chest }) + MergingChests.move_inventory_bar(chest_group_to_merge.entities, { merged_chest }) + MergingChests.reconnect_circuits(chest_group_to_merge.entities, { merged_chest }) + + raise_on_chest_merged({ + player_index = event.player_index, + surface = event.surface, + merged_chest = merged_chest, + split_chests = chest_group_to_merge.entities + }) + + for _, entity in ipairs(chest_group_to_merge.entities) do + entity.destroy({ raise_destroy = true }) + end + end + else + player.create_local_flying_text({ + text = 'flying-text.'..MergingChests.prefix_with_modname('items-would-be-deleted-merge'), + position = chest_group_to_merge.entities[1].position + }) + end + end + end + end +end + +script.on_event(defines.events.on_player_selected_area, on_player_selected_area) diff --git a/WideChests/scripts/event_handlers/rotate_blueprint.lua b/WideChests/scripts/event_handlers/rotate_blueprint.lua new file mode 100644 index 00000000..f58a5066 --- /dev/null +++ b/WideChests/scripts/event_handlers/rotate_blueprint.lua @@ -0,0 +1,99 @@ +local function rotate_entity_clockwise(entity) + entity.position = { + x = -entity.position.y, + y = entity.position.x + } + + entity.direction = ((entity.direction or 0) + 2) % 8 +end + +local function rotate_entity_counterclockwise(entity) + entity.position = { + x = entity.position.y, + y = -entity.position.x + } + + entity.direction = ((entity.direction or 0) - 2 + 8) % 8 +end + +local function rotate_tile_clockwise(tile) + tile.position = { + x = -tile.position.y - 1, + y = tile.position.x + } +end + +local function rotate_tile_counterclockwise(tile) + tile.position = { + x = tile.position.y, + y = -tile.position.x - 1 + } +end + +--- @param player_index integer +local function get_blueprint_in_cursor(player_index) + player = game.players[player_index] + local cursor = player.cursor_stack + if player.is_cursor_blueprint() and cursor and cursor.valid_for_read then + if cursor.is_blueprint_book and cursor.active_index then + local blueprint_inventory = cursor.get_inventory(defines.inventory.item_main) + if blueprint_inventory == nil or blueprint_inventory.get_item_count() == 0 then + return nil + end + cursor = blueprint_inventory[cursor.active_index] + end + + for _, entity in ipairs(cursor.get_blueprint_entities() or {}) do + local split_chest_name, width, height = MergingChests.get_merged_chest_info(entity.name) + if split_chest_name ~= nil and width ~= nil and height ~= nil and not MergingChests.is_size_allowed(height, width, split_chest_name) then + return nil + end + end + return cursor + end + return nil +end + +--- @param player_index integer +--- @param rotate_entity function +--- @param rotate_tile function +local function rotate_blueprint(player_index, rotate_entity, rotate_tile) + local blueprint = get_blueprint_in_cursor(player_index) + if blueprint == nil then + return + end + + local entities = blueprint.get_blueprint_entities() + if entities == nil then + return + end + + for _, entity in ipairs(entities) do + local split_chest_name, width, height = MergingChests.get_merged_chest_info(entity.name) + if split_chest_name ~= nil and width ~= nil and height ~= nil and width ~= height then + entity.name = MergingChests.get_merged_chest_name(split_chest_name, height, width) + end + + rotate_entity(entity) + end + blueprint.set_blueprint_entities(entities) + + local tiles = blueprint.get_blueprint_tiles() + if tiles ~= nil then + for _, tile in ipairs(tiles) do + rotate_tile(tile) + end + blueprint.set_blueprint_tiles(tiles) + end +end + +local function on_rotate_blueprint_clockwise(event) + rotate_blueprint(event.player_index, rotate_entity_clockwise, rotate_tile_clockwise) +end + +local function on_rotate_blueprint_counterclockwise(event) + rotate_blueprint(event.player_index, rotate_entity_counterclockwise, rotate_tile_counterclockwise) +end + +script.on_event(MergingChests.custom_input_names.rotate_blueprint_clockwise, on_rotate_blueprint_clockwise) +script.on_event(MergingChests.custom_input_names.rotate_blueprint_counterclockwise, on_rotate_blueprint_counterclockwise) diff --git a/WideChests/scripts/event_handlers/shortcut.lua b/WideChests/scripts/event_handlers/shortcut.lua new file mode 100644 index 00000000..9201ae72 --- /dev/null +++ b/WideChests/scripts/event_handlers/shortcut.lua @@ -0,0 +1,13 @@ +local function on_shortcut(event) + if event.prototype_name == MergingChests.merge_shortcut_name then + local player = game.players[event.player_index] + if player.clear_cursor() then + local stack = player.cursor_stack + if stack and stack.can_set_stack({ name = MergingChests.merge_selection_tool_name }) then + stack.set_stack({ name = MergingChests.merge_selection_tool_name }) + end + end + end +end + +script.on_event(defines.events.on_lua_shortcut, on_shortcut) diff --git a/WideChests/scripts/event_handlers/split_chest.lua b/WideChests/scripts/event_handlers/split_chest.lua new file mode 100644 index 00000000..15e381ea --- /dev/null +++ b/WideChests/scripts/event_handlers/split_chest.lua @@ -0,0 +1,65 @@ +--- @param event chest_merged_event +local function raise_on_chest_split(event) + script.raise_event(MergingChests.on_chest_split_event_name, event) +end + +--- @param merged_chest LuaEntity +--- @param split_chest_name string +--- @param width integer +--- @param height integer +--- @param player LuaPlayer +--- @return LuaEntity[] +local function create_split_chest(merged_chest, split_chest_name, width, height, player) + local left_top = { + x = merged_chest.position.x - (width - 1) / 2, + y = merged_chest.position.y - (height - 1) / 2 + } + + local split_chests = { } + for dX = 0, width - 1 do + for dY = 0, height - 1 do + table.insert(split_chests, merged_chest.surface.create_entity({ + name = split_chest_name, + position = { x = left_top.x + dX, y = left_top.y + dY }, + force = player.force, + raise_built = true + })) + end + end + + return split_chests +end + +local function on_player_alt_selected_area(event) + if event.item and event.item == MergingChests.merge_selection_tool_name then + local player = game.players[event.player_index] + + for _, merged_chest in ipairs(event.entities) do + local split_chest_name, width, height = MergingChests.get_merged_chest_info(merged_chest.name) + if split_chest_name ~= nil and width ~= nil and height ~= nil then + if MergingChests.can_move_inventories({ merged_chest }, split_chest_name, width * height) or player.mod_settings[MergingChests.setting_names.allow_delete_items].value then + local split_chests = create_split_chest(merged_chest, split_chest_name, width, height, player) + + MergingChests.move_inventories({ merged_chest }, split_chests) + MergingChests.move_inventory_bar({ merged_chest }, split_chests) + MergingChests.reconnect_circuits({ merged_chest }, split_chests) + + raise_on_chest_split({ + player_index = event.player_index, + surface = event.surface, + merged_chest = merged_chest, + split_chests = split_chests + }) + merged_chest.destroy({ raise_destroy = true }) + else + player.create_local_flying_text({ + text = 'flying-text.'..MergingChests.prefix_with_modname('items-would-be-deleted-split'), + position = merged_chest.position + }) + end + end + end + end +end + +script.on_event(defines.events.on_player_alt_selected_area, on_player_alt_selected_area) \ No newline at end of file diff --git a/WideChests/scripts/math_utils.lua b/WideChests/scripts/math_utils.lua new file mode 100644 index 00000000..ebc32101 --- /dev/null +++ b/WideChests/scripts/math_utils.lua @@ -0,0 +1,21 @@ +function math.round(num) + if num >= 0 then + return math.floor(num + 0.5) + else + return math.ceil(num - 0.5) + end +end + +function math.gcd(num1, num2) + if num1 == num2 then + return num1 + elseif num1 > num2 then + return math.gcd(num1 - num2, num2) + else + return math.gcd(num1, num2 - num1) + end +end + +function math.lcm(num1, num2) + return num1 * num2 / math.gcd(num1, num2) +end \ No newline at end of file diff --git a/WideChests_4.2.0/prototypes/prng.lua b/WideChests/scripts/prng.lua similarity index 94% rename from WideChests_4.2.0/prototypes/prng.lua rename to WideChests/scripts/prng.lua index 411e115e..c83a8759 100644 --- a/WideChests_4.2.0/prototypes/prng.lua +++ b/WideChests/scripts/prng.lua @@ -22,4 +22,4 @@ function prng.range(min, max) return math.floor(min + n * (max - min) + 0.5) end -prng.initHash("MergingChests") \ No newline at end of file +prng.initHash('MergingChests') \ No newline at end of file diff --git a/WideChests/scripts/sprite_generation.lua b/WideChests/scripts/sprite_generation.lua new file mode 100644 index 00000000..940e0085 --- /dev/null +++ b/WideChests/scripts/sprite_generation.lua @@ -0,0 +1,189 @@ +require('scripts.prng') +require('scripts.math_utils') + +--- @alias position { x?: number, y?: number } + +--- @alias sprite_segment +--- | { filename?: string, width?: number, height?: number, frame_count?: number, scale?: number, shift?: position, tint?: Color } +--- | position + +--- @alias sprite_segment_variants sprite_segment | sprite_segment[] + +--- @alias widths { left: number, middle: number, right: number } +--- @alias heights { top: number, middle: number, bottom: number } + +--- @alias sprite_definition +--- | { top_left?: sprite_segment_variants } +--- | { top?: sprite_segment_variants } +--- | { top_right?: sprite_segment_variants } +--- | { left?: sprite_segment_variants } +--- | { middle?: sprite_segment_variants } +--- | { right?: sprite_segment_variants } +--- | { bottom_left?: sprite_segment_variants } +--- | { bottom?: sprite_segment_variants } +--- | { bottom_right?: sprite_segment_variants } +--- | { top_center?: sprite_segment_variants } +--- | { left_center?: sprite_segment_variants } +--- | { center?: sprite_segment_variants } +--- | { right_center?: sprite_segment_variants } +--- | { bottom_center?: sprite_segment_variants } +--- | { filename: string, scale: number, shift: position, widths: widths, heights: heights, tint?: Color } +--- | { shadow?: boolean } + +--- @alias entity_sprite +--- | { entity: sprite_definition, shadow?: sprite_definition } + +--- @alias segments_data +--- | { wide_segments?: entity_sprite } +--- | { high_segments?: entity_sprite } +--- | { warehouse_segments?: entity_sprite } +--- | { trashdump_segments?: entity_sprite } + +local function postprocess_sprite(sprite) + local lcm = 1 + for _, layer in ipairs(sprite) do + if layer.frame_count then + lcm = math.lcm(lcm, layer.frame_count) + end + end + + if lcm > 1 then + for _, layer in ipairs(sprite) do + layer.repeat_count = lcm / (layer.frame_count or 1) + end + end +end + +-- top left corner of sprite will be placed onto center of entity (plus shifts) +-- random decals may be used +-- shiftX, shiftY = local segment tile shift +-- shifts in segment(s) are pixel shifts +--- @param segments sprite_definition +--- @param segment sprite_segment_variants +--- @param shift_x number +--- @param shift_y number +--- @param width number | nil +--- @param height number | nil +--- @return table +local function create_sprite_tile(segments, segment, shift_x, shift_y, width, height) + local main_segment = segment + + if segment[1] ~= nil then + if segment[2] ~= nil and prng.range(1, 100) < MergingChests.get_mod_settings().sprite_variation_chance then + main_segment = segment[1] + segment = segment[prng.range(2, table_size(segment))] + else + main_segment = segment + segment = segment[1] + end + end + + width = segment.width or width + height = segment.height or height + + return + { + filename = segment.filename or segments.filename, + priority = 'medium', + x = (segment.x or main_segment.x or 0), + y = (segment.y or main_segment.y or 0), + width = width, + height = height, + shift = + { + shift_x + (width / 2.0 * (segments.scale or 1) + (segment.shift and segment.shift.x or 0) + segments.shift.x) / 32.0, + shift_y + (height / 2.0 * (segments.scale or 1) + (segment.shift and segment.shift.y or 0) + segments.shift.y) / 32.0 + }, + scale = segment.scale or segments.scale or 1, + frame_count = segment.frame_count or 1, + draw_as_shadow = segments.shadow or false, + tint = segment.tint or segments.tint + } +end + +--- @param width number +--- @param height number +--- @param segments sprite_definition +--- @param sprite_layers table +local function create_entity_sprite(width, height, segments, sprite_layers) + local x0 = -width / 2 + local y0 = -height / 2 + local xM = width / 2 - 1 + local yM = height / 2 - 1 + + -- do top line + if segments.top_left then + table.insert(sprite_layers, create_sprite_tile(segments, segments.top_left, x0, y0, segments.widths.left, segments.heights.top)) + end + if segments.top then + for x = 1, width - 2 do + table.insert(sprite_layers, create_sprite_tile(segments, segments.top, x0 + x, y0, segments.widths.middle, segments.heights.top)) + end + end + if segments.top_right then + table.insert(sprite_layers, create_sprite_tile(segments, segments.top_right, xM, y0, segments.widths.right, segments.heights.top)) + end + + -- do middle horizontal lines + for y = 1, height - 2 do + if segments.left then + table.insert(sprite_layers, create_sprite_tile(segments, segments.left, x0, y0 + y, segments.widths.left, segments.heights.middle)) + end + if segments.middle then + for x = 1, width - 2 do + table.insert(sprite_layers, create_sprite_tile(segments, segments.middle, x0 + x, y0 + y, segments.widths.middle, segments.heights.middle)) + end + end + if segments.right then + table.insert(sprite_layers, create_sprite_tile(segments, segments.right, xM, y0 + y, segments.widths.right, segments.heights.middle)) + end + end + + -- do bottom line + if segments.bottom_left then + table.insert(sprite_layers, create_sprite_tile(segments, segments.bottom_left, x0, yM, segments.widths.left, segments.heights.bottom)) + end + if segments.bottom then + for x = 1, width - 2 do + table.insert(sprite_layers, create_sprite_tile(segments, segments.bottom, x0 + x, yM, segments.widths.middle, segments.heights.bottom)) + end + end + if segments.bottom_right then + table.insert(sprite_layers, create_sprite_tile(segments, segments.bottom_right, xM, yM, segments.widths.right, segments.heights.bottom)) + end + + -- centers + if segments.top_center then + table.insert(sprite_layers, create_sprite_tile(segments, segments.top_center, (x0 + xM) / 2, y0, nil, nil)) + end + if segments.left_center then + table.insert(sprite_layers, create_sprite_tile(segments, segments.left_center, x0, (y0 + yM) / 2, nil, nil)) + end + if segments.center then + table.insert(sprite_layers, create_sprite_tile(segments, segments.center, (x0 + xM) / 2, (y0 + yM) / 2, nil, nil)) + end + if segments.right_center then + table.insert(sprite_layers, create_sprite_tile(segments, segments.right_center, xM, (y0 + yM) / 2, nil, nil)) + end + if segments.bottom_center then + table.insert(sprite_layers, create_sprite_tile(segments, segments.bottom_center, (x0 + xM) / 2, yM, nil, nil)) + end +end + +--- @param width number +--- @param height number +--- @param segments entity_sprite +local function create_sprite(width, height, segments) + local sprite_layers = { } + + create_entity_sprite(width, height, segments.entity, sprite_layers) + if segments.shadow then + create_entity_sprite(width, height, segments.shadow, sprite_layers) + end + + postprocess_sprite(sprite_layers) + + return sprite_layers +end + +return create_sprite \ No newline at end of file diff --git a/WideChests/setting_init.lua b/WideChests/setting_init.lua new file mode 100644 index 00000000..21698d97 --- /dev/null +++ b/WideChests/setting_init.lua @@ -0,0 +1,182 @@ +--- @alias setting_allowed_value +--- | 'none' +--- | 'chest' +--- | 'warehouse' +--- | 'chest-warehouse' +--- | 'trashdump' +--- | 'chest-trashdump' +--- | 'warehouse-trashdump' +--- | 'chest-warehouse-trashdump' + +--- @alias register_options +--- | { disable_chest?: boolean, disable_warehouse?: boolean, disable_trashdump?: boolean } +--- | { default_value?: setting_allowed_value, order?: string } +--- | { size_settings?: boolean, inventory_settings?: boolean, threshold_setting?: boolean, circuit_connection_setting?: boolean } + +--- Creates a mod setting for configuring how `chest_name` should be mergeable. +--- Also allows to configure other mod settings for each chest type separately. +--- @param chest_name string Name of the mergeable chest (for example 'wooden-chest', 'iron-chest' or 'steel-chest') +--- @param options register_options | nil +function MergingChests.create_mergeable_chest_setting(chest_name, options) + options = options or {} + + local allowed_values = { + 'none' + } + if not options.disable_chest then + table.insert(allowed_values, 'chest') + end + if not options.disable_warehouse then + table.insert(allowed_values, 'warehouse') + end + if not options.disable_trashdump then + table.insert(allowed_values, 'trashdump') + end + if not options.disable_chest and not options.disable_warehouse then + table.insert(allowed_values, 'chest-warehouse') + end + if not options.disable_chest and not options.disable_trashdump then + table.insert(allowed_values, 'chest-trashdump') + end + if not options.disable_warehouse and not options.disable_trashdump then + table.insert(allowed_values, 'warehouse-trashdump') + end + if not options.disable_chest and not options.disable_warehouse and not options.disable_trashdump then + table.insert(allowed_values, 'chest-warehouse-trashdump') + end + + if table_size(allowed_values) <= 1 then + error('All mergeable modes are disabled for '..chest_name) + end + + local has_custom_settings = options.size_settings or options.inventory_settings or options.threshold_setting or options.circuit_connection_setting + + data:extend({ + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.mergeable_chest, chest_name), + type = 'string-setting', + setting_type = 'startup', + default_value = options.default_value or allowed_values[#allowed_values], + allowed_values = allowed_values, + order = (has_custom_settings and '99-' or '01-')..(options.order or chest_name)..'-01' + } + }) + + if options.size_settings then + data:extend({ + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_width, chest_name), + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 10, + order = '99-'..(options.order or chest_name)..'-02' + }, + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_height, chest_name), + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 10, + order = '99-'..(options.order or chest_name)..'-03' + }, + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_area, chest_name), + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 100, + order = '99-'..(options.order or chest_name)..'-04' + }, + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.whitelist, chest_name), + type = 'string-setting', + setting_type = 'startup', + default_value = 'NxN', + allow_blank = true, + order = '99-'..(options.order or chest_name)..'-05' + }, + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.mirror_whitelist, chest_name), + type = 'bool-setting', + setting_type = 'startup', + default_value = false, + order = '99-'..(options.order or chest_name)..'-06' + } + }) + end + + if options.inventory_settings then + data:extend({ + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_multiplier, chest_name), + type = 'double-setting', + setting_type = 'startup', + minimum_value = 0, + default_value = 1.0, + order = '99-'..(options.order or chest_name)..'-07' + }, + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_limit, chest_name), + type = 'int-setting', + setting_type = 'startup', + minimum_value = 1, + maximum_value = 65535, + default_value = 1000, + order = '99-'..(options.order or chest_name)..'-08' + } + }) + end + + if options.threshold_setting then + data:extend({ + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.warehouse_threshold, chest_name), + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 5, + order = '99-'..(options.order or chest_name)..'-09' + } + }) + end + + if options.circuit_connection_setting then + data:extend({ + { + name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.circuit_connector_position, chest_name), + type = 'string-setting', + setting_type = 'startup', + default_value = 'center-center', + allowed_values = { + 'center-center', + 'right-top', + 'right-middle', + 'right-bottom', + 'left-top', + 'left-middle', + 'left-bottom', + 'bottom-right', + 'bottom-middle', + 'bottom-left' + }, + order = '99-'..(options.order or chest_name)..'-10' + } + }) + end +end + +--- Deletes specified chest name settings. Useful for other mods which remove some type of chest +--- @param chest_name string +function MergingChests.delete_chest_name_settings(chest_name) + data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.mergeable_chest, chest_name)] = nil + data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_width, chest_name)] = nil + data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_height, chest_name)] = nil + data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_area, chest_name)] = nil + data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.whitelist, chest_name)] = nil + data.raw['bool-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.mirror_whitelist, chest_name)] = nil + data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_limit, chest_name)] = nil + data.raw['double-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_multiplier, chest_name)] = nil + data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.warehouse_threshold, chest_name)] = nil + data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.circuit_connector_position, chest_name)] = nil +end diff --git a/WideChests/settings.lua b/WideChests/settings.lua new file mode 100644 index 00000000..29a9442c --- /dev/null +++ b/WideChests/settings.lua @@ -0,0 +1,109 @@ +require('init') +require('setting_init') + +MergingChests.create_mergeable_chest_setting('wooden-chest', { default_value = 'none', order = '1' }) +MergingChests.create_mergeable_chest_setting('iron-chest', { default_value = 'none', order = '2' }) +MergingChests.create_mergeable_chest_setting('steel-chest', { order = '3' }) + +data:extend( +{ + { + name = MergingChests.setting_names.max_width, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 10, + order = '02' + }, + { + name = MergingChests.setting_names.max_height, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 10, + order = '03' + }, + { + name = MergingChests.setting_names.max_area, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 100, + order = '04' + }, + { + name = MergingChests.setting_names.whitelist, + type = 'string-setting', + setting_type = 'startup', + default_value = 'NxN', + allow_blank = true, + order = '05' + }, + { + name = MergingChests.setting_names.mirror_whitelist, + type = 'bool-setting', + setting_type = 'startup', + default_value = false, + order = '06' + }, + { + name = MergingChests.setting_names.inventory_size_multiplier, + type = 'double-setting', + setting_type = 'startup', + minimum_value = 0, + default_value = 1.0, + order = '07' + }, + { + name = MergingChests.setting_names.inventory_size_limit, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 1, + maximum_value = 65535, + default_value = 1000, + order = '08' + }, + { + name = MergingChests.setting_names.sprite_decal_chance, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 0, + maximum_value = 100, + default_value = 15, + order = '09' + }, + { + name = MergingChests.setting_names.warehouse_threshold, + type = 'int-setting', + setting_type = 'startup', + minimum_value = 2, + default_value = 5, + order = '10' + }, + { + name = MergingChests.setting_names.circuit_connector_position, + type = 'string-setting', + setting_type = 'startup', + default_value = 'center-center', + allowed_values = { + 'center-center', + 'right-top', + 'right-middle', + 'right-bottom', + 'left-top', + 'left-middle', + 'left-bottom', + 'bottom-right', + 'bottom-middle', + 'bottom-left' + }, + order = '11' + }, + { + name = MergingChests.setting_names.allow_delete_items, + type = 'bool-setting', + setting_type = 'runtime-per-user', + default_value = false, + order = '12' + } +}) diff --git a/WideChests/thumbnail.png b/WideChests/thumbnail.png new file mode 100644 index 00000000..4ef93f38 Binary files /dev/null and b/WideChests/thumbnail.png differ diff --git a/WideChests_4.2.0/changelog.txt b/WideChests_4.2.0/changelog.txt deleted file mode 100644 index 715395bc..00000000 --- a/WideChests_4.2.0/changelog.txt +++ /dev/null @@ -1,367 +0,0 @@ -ο»Ώ--------------------------------------------------------------------------------------------------- -Version: 4.2.0 -Date: 13.8.2023 - Feature: - - Added support for chests from Very Small Chests mod. - - Updated graphics of warehouses. - ---------------------------------------------------------------------------------------------------- -Version: 4.1.0 -Date: 30.1.2023 - Feature: - - Added support for chests from Paper Chest mod. - ---------------------------------------------------------------------------------------------------- -Version: 4.0.3 -Date: 5.1.2023 - Translation: - - Updated English and German (provided by ST-DDT) translations. - ---------------------------------------------------------------------------------------------------- -Version: 4.0.2 -Date: 23.4.2022 - Bugfix: - - Renamed Nullius chests to fit new version of Nullius. - ---------------------------------------------------------------------------------------------------- -Version: 4.0.1 -Date: 5.3.2022 - Bugfix: - - Fixed changelog. - ---------------------------------------------------------------------------------------------------- -Version: 4.0.0 -Date: 4.3.2022 - Breaking change: - - Fixed type of chest placed when splitting Bob/Dyworld chests. This unfortunately means that all previously merged Bob/Dyworld chests are going to disappear. For Bob chests it is possible to first split the chests before installing this update, but there's no such fix for Dyworld chests. - - Bugfix: - - Fixed support for Nullius chests. - ---------------------------------------------------------------------------------------------------- -Version: 3.6.0 -Date: 3.3.2022 - Features: - - Added support for Nullius chests. - ---------------------------------------------------------------------------------------------------- -Version: 3.5.0 -Date: 26.10.2021 - Features: - - Added support for DyWorld chests. - ---------------------------------------------------------------------------------------------------- -Version: 3.4.0 -Date: 19.6.2021 - Major features: - - Implemented blueprint rotation that supports rotating merged chests within them. Key binding is unbound by default. - - Feature: - - Added support for copying item requests when requester chest is split (mod configuration in WideChestsLogistic). - ---------------------------------------------------------------------------------------------------- -Version: 3.3.0 -Date: 30.12.2020 - Major features: - - Added possibility to merge logistic chests (only single line wide/high). This feature is enabled when you have "WideChestsLogistic" mod enabled. Beware of long loading time and higher memory usage. - - Dependencies: - - Added optional dependency on WideChestsLogistic. - - Bugfix: - - Fixed missing limit of red bar during merge of large chests. - ---------------------------------------------------------------------------------------------------- -Version: 3.2.1 -Date: 26.11.2020 - Info: - - Updated for Factorio 1.1. - ---------------------------------------------------------------------------------------------------- -Version: 3.2.0 -Date: 10.12.2020 - Translation: - - Added Russian localizations. - ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 -Date: 15.8.2020 - Info: - - Updated for Factorio 1.0. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.7 -Date: 9.5.2020 - Bugfix: - - Fixed incorrect check of whitelisted chests during merging. - - Moved updating chest stack size to data-final-fixes stage. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.6 -Date: 20.4.2020 - Bugfix: - - Removed "Modify check stack size" mod setting seince now it has to be always on. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.5 -Date: 23.3.2020 - Feature: - - Merging tool is now only available as shortcut. - - Hotfix: - - Fixed bug in new merged chest health calculation. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.4 -Date: 21.3.2020 - Bugfix: - - Merged chest's health now scales with the size of the chest (up to 10 times the health of base chest). - ---------------------------------------------------------------------------------------------------- -Version: 3.0.3 -Date: 10.3.2020 - Bugfix: - - Fixed merging algorithm bug. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.2 -Date: 28.1.2020 - Bugfix: - - Added migration json which works with default mod settings. People who increased the limits and used those chests will either have to create their own migration json or bite the bullet and replace those chests in their save. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.1 -Date: 27.1.2020 - Bugfix: - - Fixed modifying maximum chest stack size not working. - ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 -Date: 23.1.2020 - Major features: - - Added possibility to merge all basic chest types at once (only with each other). This feature is enabled when you have "WideChestsAllTypes" mod enabled. Beware of long loading time and higher memory usage. - - Bob's Brass and Titanium chests are now supported if you have both bobplates and boblogistics enabled. - - Enforced hard limits on maximum chest area (1600), width (42) and height (42). Increasing over this limit won't do anything unless you have "WideChestsUnlimited" mod enabled in which case there are no limits again. Beware of long loading time and higher memory usage. - - Bugfix: - - Fixed edge case creating chests out of thin air when merging specific arrangement of chests. - - Dependencies: - - Added optional dependency on boblogistics. - - Added optional dependency on bobplates. - - Added optional dependency on WideChestsAllTypes. - - Added optional dependency on WideChestsUnlimited. - ---------------------------------------------------------------------------------------------------- -Version: 2.2.2 -Date: 26.5.2019 - Bugfixes: - - Removed Fast replace group to merged chests. - ---------------------------------------------------------------------------------------------------- -Version: 2.2.1 -Date: 8.5.2019 - Bugfixes: - - Added maximum chest inventory size limit to game's limit of inventory size (65535). - - Multiplication sign "Γ—" can be used in whitelist setting instead of letter "x". - - Translation: - - Added additional German localizations. - ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 19.4.2019 - Feature: - - Added whitelist setting to limit creatable chests. - - Info: - - Merged chests can no longer be upgraded using upgrade planner. - ---------------------------------------------------------------------------------------------------- -Version: 2.1.2 -Date: 21.3.2019 - Translation: - - Added German localizations. - ---------------------------------------------------------------------------------------------------- -Version: 2.1.1 -Date: 2.3.2019 - Bugfixes: - - Fixed Wide chest shadow bug. - - Info: - - Added mod thumbnail. - ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 2.3.2019 - Features: - - Merging tool converted to shortcut and it is no longer available as a item. - - Updated Merged steel chest sprite. - - Bugfixes: - - Fixed High chest shadow bug. - - Info: - - Updated for Factorio 0.17. - - Added mod setting to revert back to old Merging tool (giving you the item back, found in blueprint library). - ---------------------------------------------------------------------------------------------------- -Version: 2.0.3 -Date: 29.9.2018 - Bugfixes: - - Fixed default width/height of chests to be 42 instead of 40. - - Fixed bug in merging algorithm. - ---------------------------------------------------------------------------------------------------- -Version: 2.0.2 -Date: 28.9.2018 - Bugfixes: - - Removed migration script to Version: 1.0.0 that caused error when loading on existing save. - ---------------------------------------------------------------------------------------------------- -Version: 2.0.1 -Date: 28.9.2018 - Bugfixes: - - Resized warehouse sprite to fit into low res sprite resolution restrictions. - ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 28.9.2018 - Major Features: - - Implemented merging of area chests. Maximum chest width, length and area is configurable in mod settings. - - Features: - - Threshold when trashdump will be used (instead of warehouse) is configurable in mod settings. - - Only singular chests can be merged (alternative select merged chests to split them before merging them). - - Merge merge tool is now available in blueprint library for free. - - Added setting to modify mergable chest item stack size so that bots can build all possible chests. - - Implemented mod setting to select mergable chest type (wooden, iron or steel chest). - - Info: - - Changelog filled. - ---------------------------------------------------------------------------------------------------- -Version: 1.9.3 -Date: 18.12.2017 - Major Features: - - Max chest size is no longer limited to 42. Configurable in mod settings. Default is still 42. - ---------------------------------------------------------------------------------------------------- -Version: 1.9.2 -Date: 13.12.2017 - Info: - - Updated for Factorio 0.16. - ---------------------------------------------------------------------------------------------------- -Version: 1.9.1 -Date: 19.11.2017 - Bugfixes: - - Fixed crash when merging full chests. - ---------------------------------------------------------------------------------------------------- -Version: 1.9.0 -Date: 16.11.2017 - Major Features: - - When placing blueprints the ghost is not divided into individual chests and bots delived entire chest in one go (and circuit connections are not destroyed). Maximum size a bots can build is steel chest stack size. - - Implemented advanced merging algorithm. Chests in selected area are merged by decresing sizes (horizontal chests are prefered) and single selection can merge chests in both directions. - - Features: - - Circuit connections are merged (some cables may not reach after merging and will be missing, see example). - - Red inventory bar is also merged. - ---------------------------------------------------------------------------------------------------- -Version: 1.8.3 -Date: 8.10.2017 - Bugfixes: - - Fixed bug when merging vertical chests horizontaly and horizontal chests verticaly. - ---------------------------------------------------------------------------------------------------- -Version: 1.8.2 -Date: 27.5.2017 - Bugfixes: - - New Merge tool selector icon (to differentiate it from blueprints with chests in them). - ---------------------------------------------------------------------------------------------------- -Version: 1.8.1 -Date: 20.5.2017 - Translation: - - Added English, Czech and Russian localizations (if you want to add other look into locale\en\locale.cfg, translate and send it to me, I will add it). - ---------------------------------------------------------------------------------------------------- -Version: 1.8.0 -Date: 19.5.2017 - Major Features: - - Placing merged chests by blueprint will split it into steel chests that will be automaticly merged when they are all placed. - - Features: - - Merging of already merged chests with other chests is now possible. - ---------------------------------------------------------------------------------------------------- -Version: 1.7.0 -Date: 17.5.2017 - Major Features: - - Alt selecting wide/high chests will split them into steel chests. Beware when changing inventory size in settings: some items can be destroyed. - - Player can select any non rectangular area of steel chests to merge them. Chests will be merged in direction of longer side (width or height). - ---------------------------------------------------------------------------------------------------- -Version: 1.6.1 -Date: 30.4.2017 - Bugfixes: - - Wide/High chest items are hidden from logistic requester and filter menu. - ---------------------------------------------------------------------------------------------------- -Version: 1.6.0 -Date: 30.4.2017 - Features: - - Added option to modify and limit chest size. - - Bugfixes: - - Fixed on-player-selected-area event ignoring selection item. - ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 -Date: 27.4.2017 - Info: - - Updated for Factorio 0.15. - ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 21.9.2016 - Bugfixes: - - Fixed crash when selecting area with zero size. - - Fixed config for chest recipes changing after initial migration. - ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 20.9.2016 - Features: - - Added config for what chest sizes should have recipes (for blueprints). - ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 20.9.2016 - Major Features: - - Contents of chests are now merged. - ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 18.9.2016 - Major Features: - - Added chests sizes up to 42 (cannot imagine anyone would need more...also more is impossible without reducing texture quality). - - Bugfixes: - - Fixed error with naming mod. - ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 18.9.2016 - Major Features: - - Implemented chest merging. - - Added chest sizes up to 6. - ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 -Date: 27.7.2016 - Major Features: - - First Version: with 3 and 6 wide chests. diff --git a/WideChests_4.2.0/control.lua b/WideChests_4.2.0/control.lua deleted file mode 100644 index 980fb96f..00000000 --- a/WideChests_4.2.0/control.lua +++ /dev/null @@ -1,486 +0,0 @@ -require("init") -require("utils") - -function MergingChests.GetChestSize(data, entity) - if entity.name == data.id then - return 1, 1 - elseif util.string_starts_with(entity.name, "wide-"..data.type.."-chest") then - return tonumber(string.sub(entity.name, string.len("wide-"..data.type.."-chest-") + 1)), 1 - elseif util.string_starts_with(entity.name, "high-"..data.type.."-chest") then - return 1, tonumber(string.sub(entity.name, string.len("high-"..data.type.."-chest-") + 1)) - elseif util.string_starts_with(entity.name, data.type.."-warehouse-") then - local width, height = table.unpack(util.split(string.sub(entity.name, string.len(data.type.."-warehouse-") + 1), "x")) - return tonumber(width), tonumber(height) - elseif util.string_starts_with(entity.name, data.type.."-trashdump-") then - local width, height = table.unpack(util.split(string.sub(entity.name, string.len(data.type.."-trashdump-") + 1), "x")) - return tonumber(width), tonumber(height) - else - return 0, 0 - end -end - -function MergingChests.GetChestName(data, width, height) - if height == 1 then - return "wide-"..data.type.."-chest-"..width - elseif width == 1 then - return "high-"..data.type.."-chest-"..height - elseif width <= settings.startup["warehouse-threshold"].value or height <= settings.startup["warehouse-threshold"].value then - return data.type.."-warehouse-"..width.."x"..height - else - return data.type.."-trashdump-"..width.."x"..height - end -end - -function MergingChests.MoveInventories(from, to) - local j = 1 - local l = 1 - local toInventory = to[j].get_inventory(1) - local bar = 0 - - for _, entity in ipairs(from) do - bar = bar + entity.get_inventory(1).get_bar() - 1 - end - - for i = 1, #from do - local fromInventory = from[i].get_inventory(1) - - for k = 1, #fromInventory do - if fromInventory[k].valid_for_read then - toInventory[l].set_stack(fromInventory[k]) - l = l + 1 - - if l > #toInventory then - j = j + 1 - - if j > #to then - -- should never happen but just to be sure - goto setbar - end - - toInventory = to[j].get_inventory(1) - l = 1 - end - end - end - end - - -- evenly distribute bar count over chests - ::setbar:: - local remainingBar = bar - local remainingEntites = #to - for _, entity in ipairs(to) do - local singleBar = math.min(math.round(remainingBar / remainingEntites), 65535) - entity.get_inventory(1).set_bar(singleBar + 1) - remainingBar = remainingBar - singleBar - remainingEntites = remainingEntites - 1 - end -end - -function MergingChests.MoveLogisticRequests(player_index, from, to) - if game.players[player_index].mod_settings["WideChestsLogistic_copy-requests-on-split"].value and #to > #from then - -- copy requests from "from" entities to all "to" entities (don"t split them up) - for _, entity_to in ipairs(to) do - for _, entity_from in ipairs(from) do - for from_slot_index = 1, entity_from.request_slot_count do - local request = entity_from.get_request_slot(from_slot_index) - if request then - entity_to.set_request_slot(request, entity_to.request_slot_count + 1) - end - end - end - end - else - local to_index = 1 - for _, entity_from in ipairs(from) do - for from_slot_index = 1, entity_from.request_slot_count do - local request = entity_from.get_request_slot(from_slot_index) - if request then - to[to_index].set_request_slot(request, to[to_index].request_slot_count + 1) - to_index = to_index + 1 - if to_index > #to then - to_index = 1 - end - end - end - end - end -end - -function MergingChests.ReconnectCircuits(from, to) - local fromSet = { } - for _, entity in ipairs(from) do - fromSet[entity] = entity - end - - local connections = { } - local red = false - local green = false - for _, entity in ipairs(from) do - for __, connection in ipairs(entity.circuit_connection_definitions) do - if not fromSet[connection.target_entity] then - table.insert(connections, connection) - - red = red or connection.wire == defines.wire_type.red - green = green or connection.wire == defines.wire_type.green - end - end - end - - if #connections > 0 then - --connect all "to" entities together - for i = 1, #to - 1 do - if red then - to[i].connect_neighbour{wire = defines.wire_type.red, target_entity = to[i + 1]} - end - - if green then - to[i].connect_neighbour{wire = defines.wire_type.green, target_entity = to[i + 1]} - end - end - - for _, connection in ipairs(connections) do - local closestEntity = nil - local min = nil - - for __, entity in ipairs(to) do - local diffX = entity.position.x - connection.target_entity.position.x - local diffY = entity.position.y - connection.target_entity.position.y - - if not min or (diffX * diffX + diffY * diffY < min) then - min = diffX * diffX + diffY * diffY - closestEntity = entity - end - end - - closestEntity.connect_neighbour(connection) - end - end -end - --- merging functions -function MergingChests.FindChestsBounds(data, entities) - local minX, minY, maxX, maxY = nil, nil, nil, nil - - for _, entity in ipairs(entities) do - local width, height = MergingChests.GetChestSize(data, entity) - - local floorX = math.floor(entity.position.x) - local floorY = math.floor(entity.position.y) - - if not minX or (minX > floorX) then minX = floorX end - if not minY or (minY > floorY) then minY = floorY end - if not maxX or (maxX < floorX) then maxX = floorX end - if not maxY or (maxY < floorY) then maxY = floorY end - end - - return { minX = minX, minY = minY, maxX = maxX, maxY = maxY } -end - -function MergingChests.SortIntoGroups(data, entities) - local mapBounds = MergingChests.FindChestsBounds(data, entities) - local chestMap = { } - - -- fill map - for _, entity in ipairs(entities) do - chestMap[math.floor(entity.position.x)] = chestMap[math.floor(entity.position.x)] or { } - - chestMap[math.floor(entity.position.x)][math.floor(entity.position.y)] = entity - end - - local groups = { } - local merged = false - - repeat - merged = false - - local xStart, yStart, width, height = MergingChests.FindLargestChest(chestMap, mapBounds) - - if width > 1 or height > 1 then - -- fill new group and used entities remove from map - local newGroup = { } - for x = xStart, xStart + width - 1 do - for y = yStart, yStart + height - 1 do - table.insert(newGroup, chestMap[x][y]) - - chestMap[x][y] = nil - end - end - - table.insert(groups, { entities = newGroup, width = width, height = height, position = { x = xStart + width / 2, y = yStart + height / 2 } }) - merged = true - end - until not merged - - return groups -end - -function MergingChests.FindLargestChest(map, area) - local maxX = 0 - local maxY = 0 - local maxWidth = 0 - local maxHeight = 0 - - local row = { } - for x = area.minX, area.maxX do - for y = area.minY, area.maxY do - if map[x] and map[x][y] then - row[y] = (row[y] or 0) + 1 - else - row[y] = 0 - end - end - - local y, width, height = MergingChests.FindLargestAreaUnderHistogram(row, area.minY, area.maxY) - - if width * height > maxWidth * maxHeight then - maxX = x - width + 1 - maxY = y - maxWidth = width - maxHeight = height - end - end - - return maxX, maxY, maxWidth, maxHeight -end - -function MergingChests.FindLargestAreaUnderHistogram(row, min, max) - local maxY = 0 - local maxWidth = 0 - local maxHeight = 0 - - local stack = { } - local top = 0 - local y = 0 - local n = max - min + 1 - - local function CalculateAreaAndUpdate() - local peak = stack[top] - top = top - 1 - - local width = row[peak + min] - local height = top == 0 and y or (y - stack[top] - 1) - - if maxWidth * maxHeight < width * height and MergingChests.CheckWhitelist(width, height) then - maxY = y + min - height - maxWidth = width - maxHeight = height - end - end - - while y < n do - if top == 0 or row[stack[top] + min] <= row[y + min] then - top = top + 1 - stack[top] = y - y = y + 1 - else - CalculateAreaAndUpdate() - end - end - - while top > 0 do - CalculateAreaAndUpdate() - end - - return maxY, maxWidth, maxHeight -end - -function MergingChests.CreateMergedChest(data, group, player) - local newChestName - if group.width > settings.startup["warehouse-threshold"].value and group.height > settings.startup["warehouse-threshold"].value then - newChestName = data.type.."-trashdump-"..group.width.."x"..group.height - elseif group.width > 1 and group.height > 1 then - newChestName = data.type.."-warehouse-"..group.width.."x"..group.height - elseif group.width > 1 then - newChestName = "wide-"..data.type.."-chest-"..group.width - elseif group.height > 1 then - newChestName = "high-"..data.type.."-chest-"..group.height - end - - return player.surface.create_entity{name = newChestName, position = group.position, force = player.force} -end - --- splitting functions -function MergingChests.CreateSplitedChests(data, entity, player) - local width, height = MergingChests.GetChestSize(data, entity) - local position = { x = entity.position.x - (width - 1) / 2, y = entity.position.y - (height - 1) / 2 } - - local entities = { } - - for dX = 0, width - 1 do - for dY = 0, height - 1 do - table.insert(entities, entity.surface.create_entity{name = data.id, position = { x = position.x + dX, y = position.y + dY }, force = player.force}) - end - end - - return entities -end - --- event handlers -function MergingChests.OnPlayerSelectedArea(event) - if event.item and event.item == "merge-chest-selector" then - local player = game.players[event.player_index] - - -- use event entities and remove everything but mergable chests - local chestGroups = groupByName(event.entities) - for id, entities in pairs(chestGroups) do - local data = MergingChests.MergableChestIdToData[id] - for _, group in ipairs(MergingChests.SortIntoGroups(data, entities)) do - if #group.entities > 1 then - local newChest = MergingChests.CreateMergedChest(data, group, player) - - MergingChests.MoveInventories(group.entities, { newChest }) - if data.logistic then - MergingChests.MoveLogisticRequests(event.player_index, group.entities, { newChest }) - end - MergingChests.ReconnectCircuits(group.entities, { newChest }) - - for _, entity in ipairs(group.entities) do - entity.destroy() - end - end - end - end - end -end - -function MergingChests.OnPlayerAltSelectedArea(event) - if event.item and event.item == "merge-chest-selector" then - local player = game.players[event.player_index] - - -- use event entities and remove everything but merged chests - for _, data in pairs(MergingChests.MergableChestIdToData) do - local entities = event.entities - for i = #entities, 1, -1 do - local entity = entities[i] - if math.max(MergingChests.GetChestSize(data, entity)) > 1 then - - local newEntities = MergingChests.CreateSplitedChests(data, entity, player) - - MergingChests.MoveInventories({ entity }, newEntities) - if data.logistic then - MergingChests.MoveLogisticRequests(event.player_index, { entity }, newEntities) - end - MergingChests.ReconnectCircuits({ entity }, newEntities) - - table.remove(entities, i) - entity.destroy() - end - end - end - end -end - -function MergingChests.OnShortCut(event) - if event.prototype_name == "merge-chest-selector" then - local player = game.players[event.player_index] - if player.clear_cursor() then - local stack = player.cursor_stack - if player.cursor_stack and stack.can_set_stack({ name = "merge-chest-selector" }) then - stack.set_stack({ name = "merge-chest-selector" }) - end - end - end -end - -function MergingChests.RotateEntityClockwise(entity) - entity.position = { - x = -entity.position.y, - y = entity.position.x - } - - entity.direction = ((entity.direction or 0) + 2) % 8 -end - -function MergingChests.RotateEntityCounterclockwise(entity) - entity.position = { - x = entity.position.y, - y = -entity.position.x - } - - entity.direction = ((entity.direction or 0) - 2 + 8) % 8 -end - -function MergingChests.RotateTileClockwise(tile) - tile.position = { - x = -tile.position.y - 1, - y = tile.position.x - } -end - -function MergingChests.RotateTileCounterclockwise(tile) - tile.position = { - x = tile.position.y, - y = -tile.position.x - 1 - } -end - -function MergingChests.GetBlueprintInHand(player_index) - player = game.players[player_index] - local cursor = player.cursor_stack - if player.is_cursor_blueprint() and cursor.valid_for_read then - if cursor.is_blueprint_book and cursor.active_index then - local blueprint_inventory = cursor.get_inventory(defines.inventory.item_main) - if blueprint_inventory.get_item_count() == 0 then - return nil - end - cursor = blueprint_inventory[cursor.active_index] - end - - for _, entity in ipairs(cursor.get_blueprint_entities() or {}) do - for _, data in pairs(MergingChests.MergableChestIdToData) do - local width, height = MergingChests.GetChestSize(data, entity) - if math.max(width, height) > 1 and not MergingChests.CheckWhitelist(height, width) then - return nil - end - end - end - return cursor - end - return nil -end - -function MergingChests.HandleBlueprintRotate(player_index, rotate_entity, rotate_tile) - local blueprint = MergingChests.GetBlueprintInHand(player_index) - if blueprint ~= nil then - local entities = blueprint.get_blueprint_entities() - for _, entity in ipairs(entities) do - local is_merged_chest = false - for _, data in pairs(MergingChests.MergableChestIdToData) do - local width, height = MergingChests.GetChestSize(data, entity) - if width ~= height then - entity.name = MergingChests.GetChestName(data, height, width) - rotate_entity(entity) - is_merged_chest = true - break - end - end - - if not is_merged_chest then - rotate_entity(entity) - end - end - blueprint.set_blueprint_entities(entities) - - local tiles = blueprint.get_blueprint_tiles() - if tiles ~= nil then - for _, tile in ipairs(tiles) do - rotate_tile(tile) - end - blueprint.set_blueprint_tiles(tiles) - end - end -end - -function MergingChests.OnRotateBlueprintClockwise(event) - MergingChests.HandleBlueprintRotate(event.player_index, MergingChests.RotateEntityClockwise, MergingChests.RotateTileClockwise) -end - -function MergingChests.OnRotateBlueprintCounterClockwise(event) - MergingChests.HandleBlueprintRotate(event.player_index, MergingChests.RotateEntityCounterclockwise, MergingChests.RotateTileCounterclockwise) -end - -script.on_event(defines.events.on_player_selected_area, MergingChests.OnPlayerSelectedArea) -script.on_event(defines.events.on_player_alt_selected_area, MergingChests.OnPlayerAltSelectedArea) -script.on_event(defines.events.on_lua_shortcut, MergingChests.OnShortCut) -script.on_event("WideChests_rotate-blueprint-clockwise", MergingChests.OnRotateBlueprintClockwise) -script.on_event("WideChests_rotate-blueprint-couterclockwise", MergingChests.OnRotateBlueprintCounterClockwise) \ No newline at end of file diff --git a/WideChests_4.2.0/data-final-fixes.lua b/WideChests_4.2.0/data-final-fixes.lua deleted file mode 100644 index 7de988a9..00000000 --- a/WideChests_4.2.0/data-final-fixes.lua +++ /dev/null @@ -1,7 +0,0 @@ -require("init") - -local limits = MergingChests.Limits() -for _, id in ipairs(MergingChests.MergableChestIds) do - data.raw["item"][id].stack_size = - math.max(data.raw["item"][id].stack_size, math.min(limits.area, limits.width * limits.height)) -end diff --git a/WideChests_4.2.0/data-updates.lua b/WideChests_4.2.0/data-updates.lua deleted file mode 100644 index 79b50e41..00000000 --- a/WideChests_4.2.0/data-updates.lua +++ /dev/null @@ -1,7 +0,0 @@ -require("init") -require("utils") -require("prototypes.item") -require("prototypes.entity") -require("prototypes.groups") -require("prototypes.shortcuts") -require("prototypes.custom-input") diff --git a/WideChests_4.2.0/graphics/entity/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/high-chest-shadow.png deleted file mode 100644 index 04ba0aeb..00000000 Binary files a/WideChests_4.2.0/graphics/entity/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/high-chest.png b/WideChests_4.2.0/graphics/entity/high-chest.png deleted file mode 100644 index cbefc878..00000000 Binary files a/WideChests_4.2.0/graphics/entity/high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png deleted file mode 100644 index 2d2aba1c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/high-chest/active-provider-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/high-chest/active-provider-high-chest.png deleted file mode 100644 index ba110edf..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/high-chest/active-provider-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index 75cabdae..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse.png deleted file mode 100644 index 94ff086c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/wide-chest/active-provider-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/wide-chest/active-provider-wide-chest.png deleted file mode 100644 index 50249450..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-active-provider/wide-chest/active-provider-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png deleted file mode 100644 index b0a83c15..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/buffer-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/buffer-high-chest.png deleted file mode 100644 index 836a4f3a..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/buffer-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/high-chest-shadow.png deleted file mode 100644 index acd5ef8e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/high-chest/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index d88595ac..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse.png deleted file mode 100644 index 0861aa85..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/buffer-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/buffer-wide-chest.png deleted file mode 100644 index 5d28269d..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/buffer-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/wide-chest-shadow.png deleted file mode 100644 index cde8ae3c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-buffer/wide-chest/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/high-chest-shadow.png deleted file mode 100644 index acd5ef8e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/passive-provider-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/passive-provider-high-chest.png deleted file mode 100644 index 7dc9035c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/high-chest/passive-provider-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png deleted file mode 100644 index ff3778fd..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index 03820953..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse.png deleted file mode 100644 index 47c404ca..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/passive-provider-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/passive-provider-wide-chest.png deleted file mode 100644 index 98572830..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/passive-provider-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/wide-chest-shadow.png deleted file mode 100644 index cde8ae3c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-passive-provider/wide-chest/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/high-chest-shadow.png deleted file mode 100644 index acd5ef8e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/requester-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/requester-high-chest.png deleted file mode 100644 index 217e2b49..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/high-chest/requester-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/requester-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/requester-hatch-door.png deleted file mode 100644 index b98b6041..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/requester-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index f078b585..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse.png deleted file mode 100644 index a600d398..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/requester-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/requester-wide-chest.png deleted file mode 100644 index 5d27bd9e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/requester-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/wide-chest-shadow.png deleted file mode 100644 index cde8ae3c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-requester/wide-chest/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/high-chest-shadow.png deleted file mode 100644 index acd5ef8e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/storage-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/storage-high-chest.png deleted file mode 100644 index ccb27623..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/high-chest/storage-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/storage-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/storage-hatch-door.png deleted file mode 100644 index 4e85f069..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/storage-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index 9bd14ca4..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse.png deleted file mode 100644 index a35cfd5a..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/storage-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/storage-wide-chest.png deleted file mode 100644 index 9effa2f5..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/storage-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/wide-chest-shadow.png deleted file mode 100644 index cde8ae3c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest-storage/wide-chest/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-hatch-door.png deleted file mode 100644 index 9aeb83dc..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-high-chest.png deleted file mode 100644 index 6de3a2a9..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-wide-chest.png deleted file mode 100644 index 2dcfbb6b..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/active-provider-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-hatch-door.png deleted file mode 100644 index 2c7dcead..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-high-chest.png deleted file mode 100644 index 6a97f850..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-wide-chest.png deleted file mode 100644 index f5d7dd82..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/buffer-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-hatch-door.png deleted file mode 100644 index 4c5fb2a0..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-high-chest.png deleted file mode 100644 index 626d3b29..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-wide-chest.png deleted file mode 100644 index 850c0c75..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/passive-provider-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest/requester-hatch-door.png deleted file mode 100644 index b2ae3be8..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/requester-high-chest.png deleted file mode 100644 index bfe2371d..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/requester-wide-chest.png deleted file mode 100644 index 03cceaac..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/requester-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-hatch-door.png b/WideChests_4.2.0/graphics/entity/logistic-chest/storage-hatch-door.png deleted file mode 100644 index 106a3495..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-hatch-door.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-high-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/storage-high-chest.png deleted file mode 100644 index 7632c946..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-high-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-wide-chest.png b/WideChests_4.2.0/graphics/entity/logistic-chest/storage-wide-chest.png deleted file mode 100644 index fd5afa12..00000000 Binary files a/WideChests_4.2.0/graphics/entity/logistic-chest/storage-wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/high-chest/high-chest-shadow.png b/WideChests_4.2.0/graphics/entity/steel-chest/high-chest/high-chest-shadow.png deleted file mode 100644 index acd5ef8e..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/high-chest/high-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png deleted file mode 100644 index 2bfc11dd..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png deleted file mode 100644 index ec21bb6d..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png deleted file mode 100644 index 89df2dc0..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png deleted file mode 100644 index a4a9b99d..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png deleted file mode 100644 index 3d25e234..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png deleted file mode 100644 index a5d89271..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-shadow.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-shadow.png deleted file mode 100644 index fe384304..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse.png b/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse.png deleted file mode 100644 index c9b3c6c0..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/warehouse/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png deleted file mode 100644 index cde8ae3c..00000000 Binary files a/WideChests_4.2.0/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/trashdump-entity.png b/WideChests_4.2.0/graphics/entity/trashdump-entity.png deleted file mode 100644 index ca7dd2c8..00000000 Binary files a/WideChests_4.2.0/graphics/entity/trashdump-entity.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/trashdump-shadow.png b/WideChests_4.2.0/graphics/entity/trashdump-shadow.png deleted file mode 100644 index 82f724ab..00000000 Binary files a/WideChests_4.2.0/graphics/entity/trashdump-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/warehouse.png b/WideChests_4.2.0/graphics/entity/warehouse.png deleted file mode 100644 index 5e652f2f..00000000 Binary files a/WideChests_4.2.0/graphics/entity/warehouse.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/wide-chest-shadow.png b/WideChests_4.2.0/graphics/entity/wide-chest-shadow.png deleted file mode 100644 index c2309720..00000000 Binary files a/WideChests_4.2.0/graphics/entity/wide-chest-shadow.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/entity/wide-chest.png b/WideChests_4.2.0/graphics/entity/wide-chest.png deleted file mode 100644 index edd84fb0..00000000 Binary files a/WideChests_4.2.0/graphics/entity/wide-chest.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/icons/merge-chest-selector.png b/WideChests_4.2.0/graphics/icons/merge-chest-selector.png deleted file mode 100644 index 40d96094..00000000 Binary files a/WideChests_4.2.0/graphics/icons/merge-chest-selector.png and /dev/null differ diff --git a/WideChests_4.2.0/graphics/icons/merge-shortcut.png b/WideChests_4.2.0/graphics/icons/merge-shortcut.png deleted file mode 100644 index 7685cf66..00000000 Binary files a/WideChests_4.2.0/graphics/icons/merge-shortcut.png and /dev/null differ diff --git a/WideChests_4.2.0/info.json b/WideChests_4.2.0/info.json deleted file mode 100644 index c6d26b1e..00000000 --- a/WideChests_4.2.0/info.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "WideChests", - "version": "4.2.0", - "factorio_version": "1.1", - "title": "Merging Chests", - "author": "Atria", - "contact": "tomas.chmelik2@gmail.com", - "homepage": "https://github.com/Atria1234/WideChests", - "description": "Enables merging of multiple chests into one entity. Supports merging of arbitrary number of chests (configurable in mod settings).", - "dependencies": [ - "? boblogistics", - "? bobplates", - "? DyWorld-Dynamics", - "? nullius >= 1.3.4", - "? paperchest", - "? angelsbioprocessing", - "? verysmallchests", - "? WideChestsAllTypes", - "? WideChestsUnlimited", - "? WideChestsLogistic >= 1.3.0" - ] -} diff --git a/WideChests_4.2.0/init-settings.lua b/WideChests_4.2.0/init-settings.lua deleted file mode 100644 index 99ae7a7c..00000000 --- a/WideChests_4.2.0/init-settings.lua +++ /dev/null @@ -1,409 +0,0 @@ -MergingChests = { } - -MergingChests.AllTypesModName = "WideChestsAllTypes" -MergingChests.UnlimitedModName = "WideChestsUnlimited" -MergingChests.LogisticModName = "WideChestsLogistic" - -MergingChests.BobLogisticModName = "boblogistics" -MergingChests.BobPlatesModName = "bobplates" -MergingChests.DyWorldModName = "DyWorld-Dynamics" -MergingChests.NulliusModName = "nullius" -MergingChests.PaperChestModName = "paperchest" -MergingChests.AngelsBioProcessingModName = "angelsbioprocessing" -MergingChests.VerySmallChestsModName = "verysmallchests" - -function MergingChests.CheckMod(mod) - return (mods or script.active_mods)[mod] -end - -MergingChests.MergableChestIdToData = { } -MergingChests.MergableChestIdToData["wooden-chest"] = { - id = "wooden-chest", - name = "Wooden Chest", - type = "wooden", - additional_properties = { - icon = "__base__/graphics/icons/wooden-chest.png", - icon_size = 64 - } -} -MergingChests.MergableChestIdToData["iron-chest"] = { - id = "iron-chest", - name = "Iron Chest", - type = "iron", - additional_properties = { - icon = "__base__/graphics/icons/iron-chest.png", - icon_size = 64 - } -} -MergingChests.MergableChestIdToData["steel-chest"] = { - id = "steel-chest", - name = "Steel Chest", - type = "steel", - additional_properties = { - icon = "__base__/graphics/icons/steel-chest.png", - icon_size = 64 - } -} - -if MergingChests.CheckMod(MergingChests.LogisticModName) then - MergingChests.MergableChestIdToData["logistic-chest-passive-provider"] = { - id = "logistic-chest-passive-provider", - name = "Logistic Passive Chest", - type = "logistic-passive", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-passive-provider.png", - icon_size = 64, - logistic_mode = "passive-provider" - } - } - MergingChests.MergableChestIdToData["logistic-chest-active-provider"] = { - id = "logistic-chest-active-provider", - type = "logistic-active", - name = "Logistic Active Chest", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-active-provider.png", - icon_size = 64, - logistic_mode = "active-provider" - } - } - MergingChests.MergableChestIdToData["logistic-chest-storage"] = { - id = "logistic-chest-storage", - type = "logistic-storage", - name = "Logistic Storage Chest", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-storage.png", - icon_size = 64, - logistic_mode = "storage", - max_logistic_slots = 1 - } - } - MergingChests.MergableChestIdToData["logistic-chest-buffer"] = { - id = "logistic-chest-buffer", - type = "logistic-buffer", - name = "Logistic Buffer Chest", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-buffer.png", - icon_size = 64, - logistic_mode = "buffer" - } - } - MergingChests.MergableChestIdToData["logistic-chest-requester"] = { - id = "logistic-chest-requester", - type = "logistic-requester", - name = "Logistic Requester Chest", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-requester.png", - icon_size = 64, - logistic_mode = "requester" - } - } -end - -if MergingChests.CheckMod(MergingChests.BobLogisticModName) and MergingChests.CheckMod(MergingChests.BobPlatesModName) then - MergingChests.MergableChestIdToData["brass-chest"] = { - id = "brass-chest", - name = "BobLogistic Brass Chest", - type = "bob-brass", - additional_properties = { - icon = "__boblogistics__/graphics/icons/brass-chest.png", - icon_size = 32 - } - } - MergingChests.MergableChestIdToData["titanium-chest"] = { - id = "titanium-chest", - name = "BobLogistic Titanium Chest", - type = "bob-titanium", - additional_properties = { - icon = "__boblogistics__/graphics/icons/titanium-chest.png", - icon_size = 32 - } - } -end - -if MergingChests.CheckMod(MergingChests.DyWorldModName) then - MergingChests.MergableChestIdToData["small-storage"] = { - id = "small-storage", - name = "DyWorld Wood Storage Chest", - type = "dyworld-small-1", - additional_properties = { - icon = "__base__/graphics/icons/wooden-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["small-storage-2"] = { - id = "small-storage-2", - name = "DyWorld Iron Storage Chest", - type = "dyworld-small-2", - additional_properties = { - icon = "__base__/graphics/icons/iron-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["small-storage-3"] = { - id = "small-storage-3", - name = "DyWorld Steel Storage Chest", - type = "dyworld-small-3", - additional_properties = { - icon = "__base__/graphics/icons/steel-chest.png", - icon_size = 64 - } - } -end - -if MergingChests.CheckMod(MergingChests.NulliusModName) then - MergingChests.MergableChestIdToData["nullius-small-chest-1"] = { - id = "wooden-chest", - name = "Nullius Small Storage Chest 1", - type = "nullius-small-1", - additional_properties = { - icon = "__base__/graphics/icons/wooden-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["nullius-small-chest-2"] = { - id = "iron-chest", - name = "Nullius Small Storage Chest 2", - type = "nullius-small-2", - additional_properties = { - icon = "__base__/graphics/icons/iron-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["nullius-small-chest-3"] = { - id = "steel-chest", - name = "Nullius Small Storage Chest 3", - type = "nullius-small-3", - additional_properties = { - icon = "__base__/graphics/icons/steel-chest.png", - icon_size = 64 - } - } - if MergingChests.CheckMod(MergingChests.LogisticModName) then - MergingChests.MergableChestIdToData["nullius-small-supply-chest-1"] = { - id = "nullius-small-supply-chest-1", - name = "Nullius Logistic Passive Chest 1", - type = "nullius-small-logistic-passive-1", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-passive-provider.png", - icon_size = 64, - logistic_mode = "passive-provider" - } - } - MergingChests.MergableChestIdToData["nullius-small-supply-chest-2"] = { - id = "logistic-chest-passive-provider", - name = "Nullius Logistic Passive Chest 2", - type = "nullius-small-logistic-passive-2", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-passive-provider.png", - icon_size = 64, - logistic_mode = "passive-provider" - } - } - MergingChests.MergableChestIdToData["nullius-small-dispatch-chest-1"] = { - id = "nullius-small-dispatch-chest-1", - name = "Nullius Logistic Active Chest 1", - type = "nullius-small-logistic-active-1", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-active-provider.png", - icon_size = 64, - logistic_mode = "active-provider" - } - } - MergingChests.MergableChestIdToData["nullius-small-dispatch-chest-2"] = { - id = "logistic-chest-active-provider", - name = "Nullius Logistic Active Chest 2", - type = "nullius-small-logistic-active-2", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-active-provider.png", - icon_size = 64, - logistic_mode = "active-provider" - } - } - MergingChests.MergableChestIdToData["nullius-small-storage-chest-1"] = { - id = "nullius-small-storage-chest-1", - name = "Nullius Logistic Storage Chest 1", - type = "nullius-small-logistic-storage-1", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-storage.png", - icon_size = 64, - logistic_mode = "storage", - max_logistic_slots = 1 - } - } - MergingChests.MergableChestIdToData["nullius-small-storage-chest-2"] = { - id = "logistic-chest-storage", - name = "Nullius Logistic Storage Chest 2", - type = "nullius-small-logistic-storage-2", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-storage.png", - icon_size = 64, - logistic_mode = "storage", - max_logistic_slots = 1 - } - } - MergingChests.MergableChestIdToData["nullius-small-buffer-chest-1"] = { - id = "nullius-small-buffer-chest-1", - name = "Nullius Logistic Buffer Chest 1", - type = "nullius-small-logistic-buffer-1", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-buffer.png", - icon_size = 64, - logistic_mode = "buffer" - } - } - MergingChests.MergableChestIdToData["nullius-small-buffer-chest-2"] = { - id = "logistic-chest-buffer", - name = "Nullius Logistic Buffer Chest 2", - type = "nullius-small-logistic-buffer-2", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-buffer.png", - icon_size = 64, - logistic_mode = "buffer" - } - } - MergingChests.MergableChestIdToData["nullius-small-demand-chest-1"] = { - id = "nullius-small-demand-chest-1", - name = "Nullius Logistic Requester Chest 1", - type = "nullius-small-logistic-requester-1", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-requester.png", - icon_size = 64, - logistic_mode = "requester" - } - } - MergingChests.MergableChestIdToData["nullius-small-demand-chest-2"] = { - id = "logistic-chest-requester", - name = "Nullius Logistic Requester Chest 2", - type = "nullius-small-logistic-requester-2", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-requester.png", - icon_size = 64, - logistic_mode = "requester" - } - } - end -end - -if MergingChests.CheckMod(MergingChests.PaperChestModName) and MergingChests.CheckMod(MergingChests.AngelsBioProcessingModName) then - MergingChests.MergableChestIdToData["cellulose-fiber-chest"] = { - id = "cellulose-fiber-chest", - name = "PaperChest Cellulose Fiber Chest", - type = "paper-chest-cellulose-fiber", - additional_properties = { - icon = "__paperchest__/graphics/icons/cellulose-fiber-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["paper-chest"] = { - id = "paper-chest", - name = "PaperChest Paper Chest", - type = "paper-chest-paper", - additional_properties = { - icon = "__paperchest__/graphics/icons/paper-chest.png", - icon_size = 64 - } - } -end - -if MergingChests.CheckMod(MergingChests.VerySmallChestsModName) then - MergingChests.MergableChestIdToData["wooden-chest-small"] = { - id = "wooden-chest-small", - name = "VerySmallChests Small Wooden Chest", - type = "verysmallchests-wooden-chest-small", - additional_properties = { - icon = "__base__/graphics/icons/wooden-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["iron-chest-small"] = { - id = "iron-chest-small", - name = "VerySmallChests Small Iron Chest", - type = "verysmallchests-iron-chest-small", - additional_properties = { - icon = "__base__/graphics/icons/iron-chest.png", - icon_size = 64 - } - } - MergingChests.MergableChestIdToData["steel-chest-small"] = { - id = "steel-chest-small", - name = "VerySmallChests Small Steel Chest", - type = "verysmallchests-steel-chest-small", - additional_properties = { - icon = "__base__/graphics/icons/steel-chest.png", - icon_size = 64 - } - } - if MergingChests.CheckMod(MergingChests.LogisticModName) then - MergingChests.MergableChestIdToData["logistic-chest-passive-provider-small"] = { - id = "logistic-chest-passive-provider-small", - name = "VerySmallChests Small Logistic Passive Chest", - type = "verysmallchests-logistic-passive-small", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-passive-provider.png", - icon_size = 64, - logistic_mode = "passive-provider" - } - } - MergingChests.MergableChestIdToData["logistic-chest-active-provider-small"] = { - id = "logistic-chest-active-provider-small", - name = "VerySmallChests Small Logistic Active Chest", - type = "verysmallchests-logistic-active-small", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-active-provider.png", - icon_size = 64, - logistic_mode = "active-provider" - } - } - MergingChests.MergableChestIdToData["logistic-chest-storage-small"] = { - id = "logistic-chest-storage-small", - name = "VerySmallChests Small Logistic Storage Chest", - type = "verysmallchests-logistic-storage-small", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-storage.png", - icon_size = 64, - logistic_mode = "storage", - max_logistic_slots = 1 - } - } - MergingChests.MergableChestIdToData["logistic-chest-buffer-small"] = { - id = "logistic-chest-buffer-small", - name = "VerySmallChests Small Logistic Buffer Chest", - type = "verysmallchests-logistic-buffer-small", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-buffer.png", - icon_size = 64, - logistic_mode = "buffer" - } - } - MergingChests.MergableChestIdToData["logistic-chest-requester-small"] = { - id = "logistic-chest-requester-small", - name = "VerySmallChests Small Logistic Requester Chest", - type = "verysmallchests-logistic-requester-small", - logistic = true, - additional_properties = { - icon = "__base__/graphics/icons/logistic-chest-requester.png", - icon_size = 64, - logistic_mode = "requester" - } - } - end -end \ No newline at end of file diff --git a/WideChests_4.2.0/init.lua b/WideChests_4.2.0/init.lua deleted file mode 100644 index 29cc4219..00000000 --- a/WideChests_4.2.0/init.lua +++ /dev/null @@ -1,71 +0,0 @@ -require("init-settings") - ----@return {width: number, height: number, area: number} -function MergingChests.Limits() - if MergingChests.CheckMod(MergingChests.UnlimitedModName) then - return { - width = settings.startup["max-chest-width"].value, - height = settings.startup["max-chest-height"].value, - area = settings.startup["max-chest-area"].value - } - else - return { - width = math.min(settings.startup["max-chest-width"].value, 42), - height = math.min(settings.startup["max-chest-height"].value, 42), - area = math.min(settings.startup["max-chest-area"].value, 1600) - } - end -end - -MergingChests.MergableChestIds = { } -for _, data in pairs(MergingChests.MergableChestIdToData) do - if ( - MergingChests.CheckMod(MergingChests.AllTypesModName) - or data.logistic and MergingChests.CheckMod(MergingChests.LogisticModName) - or settings.startup["mergable-chest-name"].value == data.name - ) then - table.insert(MergingChests.MergableChestIds, data.id) - end -end - -local ANY = "any-size" - ---- @type nil | { [number|`ANY`]: { [number|`ANY`]: boolean } } -local chestWhitelist = nil -function parseWhitelist() - chestWhitelist = { } - local hasItem = false - for width, height in string.gmatch(settings.startup["whitelist-chest-sizes"].value, "([%dN]+)[Γ—xX$*]([%dN]+)") do - if (tonumber(width) or width == "N") and (tonumber(height) or height == "N") then - width = tonumber(width) or ANY - height = tonumber(height) or ANY - if not chestWhitelist[width] then - chestWhitelist[width] = { } - hasItem = true - end - if not chestWhitelist[width][ANY] then - chestWhitelist[width][height] = true - end - end - end - - if not hasItem then - chestWhitelist = { [ANY] = { [ANY] = true } } - end - - return chestWhitelist -end - -function MergingChests.CheckWhitelist(width, height) - chestWhitelist = chestWhitelist or parseWhitelist() - - local limits = MergingChests.Limits() - return - width * height <= limits.area and - width <= limits.width and - height <= limits.height and - ( - (chestWhitelist[ANY] and (chestWhitelist[ANY][ANY] or chestWhitelist[ANY][height])) or - (chestWhitelist[width] and (chestWhitelist[width][ANY] or chestWhitelist[width][height])) - ) -end diff --git a/WideChests_4.2.0/locale/en/locale.cfg b/WideChests_4.2.0/locale/en/locale.cfg deleted file mode 100644 index 9ef2be8e..00000000 --- a/WideChests_4.2.0/locale/en/locale.cfg +++ /dev/null @@ -1,139 +0,0 @@ -[item-group-name] -merged-chests=Merged chests - -[chest-name] -wide-wooden-chest=Wooden chest __1__ wide -high-wooden-chest=Wooden chest __1__ high -wooden-warehouse=Wooden Warehouse __1__ x __2__ -wooden-trashdump=Wooden Trashdump __1__ x __2__ - -wide-iron-chest=Iron chest __1__ wide -high-iron-chest=Iron chest __1__ high -iron-warehouse=Iron Warehouse __1__ x __2__ -iron-trashdump=Iron Trashdump __1__ x __2__ - -wide-steel-chest=Steel chest __1__ wide -high-steel-chest=Steel chest __1__ high -steel-warehouse=Steel Warehouse __1__ x __2__ -steel-trashdump=Steel Trashdump __1__ x __2__ - -wide-logistic-passive-chest=Passive provider chest __1__ wide -high-logistic-passive-chest=Passive provider chest __1__ high - -high-logistic-active-chest=Active provider chest __1__ high -wide-logistic-active-chest=Active provider chest __1__ wide - -high-logistic-storage-chest=Storage chest __1__ high -wide-logistic-storage-chest=Storage chest __1__ wide - -wide-logistic-buffer-chest=Buffer chest __1__ wide -high-logistic-buffer-chest=Buffer chest __1__ high - -wide-logistic-requester-chest=Requester chest __1__ wide -high-logistic-requester-chest=Requester chest __1__ high - -wide-bob-brass-chest=Brass chest __1__ wide -high-bob-brass-chest=Brass chest __1__ high -bob-brass-warehouse=Brass Warehouse __1__ x __2__ -bob-brass-trashdump=Brass Trashdump __1__ x __2__ - -wide-bob-titanium-chest=Titanium chest __1__ wide -high-bob-titanium-chest=Titanium chest __1__ high -bob-titanium-warehouse=Titanium Warehouse __1__ x __2__ -bob-titanium-trashdump=Titanium Trashdump __1__ x __2__ - -wide-dyworld-small-1-chest=Wooden chest __1__ wide -high-dyworld-small-1-chest=Wooden chest __1__ high -dyworld-small-1-warehouse=Wooden Warehouse __1__ x __2__ -dyworld-small-1-trashdump=Wooden Trashdump __1__ x __2__ - -wide-dyworld-small-2-chest=Iron chest __1__ wide -high-dyworld-small-2-chest=Iron chest __1__ high -dyworld-small-2-warehouse=Iron Warehouse __1__ x __2__ -dyworld-small-2-trashdump=Iron Trashdump __1__ x __2__ - -wide-dyworld-small-3-chest=Steel chest __1__ wide -high-dyworld-small-3-chest=Steel chest __1__ high -dyworld-small-3-warehouse=Steel Warehouse __1__ x __2__ -dyworld-small-3-trashdump=Steel Trashdump __1__ x __2__ - -wide-nullius-small-1-chest=Iron chest __1__ wide -high-nullius-small-1-chest=Iron chest __1__ high -nullius-small-1-warehouse=Iron Warehouse __1__ x __2__ -nullius-small-1-trashdump=Iron Trashdump __1__ x __2__ - -wide-nullius-small-2-chest=Steel chest __1__ wide -high-nullius-small-2-chest=Steel chest __1__ high -nullius-small-2-warehouse=Steel Warehouse __1__ x __2__ -nullius-small-2-trashdump=Steel Trashdump __1__ x __2__ - -wide-nullius-small-3-chest=Titanium chest __1__ wide -high-nullius-small-3-chest=Titanium chest __1__ high -nullius-small-3-warehouse=Titanium Warehouse __1__ x __2__ -nullius-small-3-trashdump=Titanium Trashdump __1__ x __2__ - -wide-nullius-small-logistic-passive-1-chest=Passive provider chest __1__ wide -high-nullius-small-logistic-passive-1-chest=Passive provider chest __1__ high - -wide-nullius-small-logistic-passive-2-chest=Passive provider chest __1__ wide -high-nullius-small-logistic-passive-2-chest=Passive provider chest __1__ high - -wide-nullius-small-logistic-active-1-chest=Active provider chest __1__ wide -high-nullius-small-logistic-active-1-chest=Active provider chest __1__ high - -wide-nullius-small-logistic-active-2-chest=Active provider chest __1__ wide -high-nullius-small-logistic-active-2-chest=Active provider chest __1__ high - -wide-nullius-small-logistic-storage-1-chest=Storage chest __1__ wide -high-nullius-small-logistic-storage-1-chest=Storage chest __1__ high - -wide-nullius-small-logistic-storage-2-chest=Storage chest __1__ wide -high-nullius-small-logistic-storage-2-chest=Storage chest __1__ high - -wide-nullius-small-logistic-buffer-1-chest=Buffer chest __1__ wide -high-nullius-small-logistic-buffer-1-chest=Buffer chest __1__ high - -wide-nullius-small-logistic-buffer-2-chest=Buffer chest __1__ wide -high-nullius-small-logistic-buffer-2-chest=Buffer chest __1__ high - -wide-nullius-small-logistic-requester-1-chest=Requester chest __1__ wide -high-nullius-small-logistic-requester-1-chest=Requester chest __1__ high - -wide-nullius-small-logistic-requester-2-chest=Requester chest __1__ wide -high-nullius-small-logistic-requester-2-chest=Requester chest __1__ high - -[item-name] -merge-chest-selector=Chest Merge Tool - -[shortcut-name] -merge-chest-selector=Merging Chests - -[controls] -WideChests_rotate-blueprint-clockwise=Rotate blueprint clockwise -WideChests_rotate-blueprint-couterclockwise=Rotate blueprint couterclockwise - -[controls-description] -WideChests_rotate-blueprint-clockwise=Works on blueprints with merged chests. -WideChests_rotate-blueprint-couterclockwise=Works on blueprints with merged chests. - -[mod-setting-name] -mergable-chest-name=Mergable chest -max-chest-width=Maximum chest width -max-chest-height=Maximum chest height -max-chest-area=Maximum chest area -inventory-size-multiplier=Inventory size multiplier -inventory-size-limit=Inventory size limit -sprite-decal-chance=Change for sprite decal -warehouse-threshold=Warehouse size threshold -whitelist-chest-sizes=Whitelist of merged chests - -[mod-setting-description] -mergable-chest-name=Chest type that can be merged. Install WideChestsAllTypes mod to enable all at once. -max-chest-width=Maximum width of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 42. -max-chest-height=Maximum height of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 42. -max-chest-area=Maximum area of merged chest. Install WideChestsUnlimited mod if you want limit to be higher than 1600. -inventory-size-multiplier=Merged chest's inventory size is sum of inventory sizes of individual merged chests. This number is than multiplied by this setting. Changing this may result in loss of items when merging or splitting! -inventory-size-limit=Maximum inventory size a merged chest can have. Normally merged chest's inventory size is sum of inventory sizes of individual merged chests (and then multiplied by above multiplier). Changing this may result in loss of items when merging or splitting! -sprite-decal-chance=Percent chance of decals (graphical variety) to appear on merged chests. So far only warehouses (merged chests with both sides larger between 1 and "Warehouse size threshold") have decals. -warehouse-threshold=Trashdump will be used when merging area larger than X on both sides. -whitelist-chest-sizes=Specified which chests are enabled. It's a list of values like 'AxB' separated by space, 'A' and 'B' can either be a integer (greater than 0) or 'N' that represent a wildcard (meaning it will match everything). For example, "1x6 2x4 13xN" will only allow 1x6, 2x4, 13x1, 13x2, 13x3, 13x4, etc... chests to be mergeable. Default 'NxN' allow anything (so up to 42x42 by default). \ No newline at end of file diff --git a/WideChests_4.2.0/locale/ru/locale.cfg b/WideChests_4.2.0/locale/ru/locale.cfg deleted file mode 100644 index 9524366f..00000000 --- a/WideChests_4.2.0/locale/ru/locale.cfg +++ /dev/null @@ -1,139 +0,0 @@ -[item-group-name] -merged-chests=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹ΠΉ сундук - -[chest-name] -wide-wooden-chest=ДСрСвянный сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-wooden-chest=ДСрСвянный сундук высотой __1__ -wooden-warehouse=ДСрСвянный склад __1__ x __2__ -wooden-trashdump=ДСрСвянная свалка __1__ x __2__ - -wide-iron-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-iron-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук высотой __1__ -iron-warehouse=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ склад __1__ x __2__ -iron-trashdump=ЖСлСзная свалка __1__ x __2__ - -wide-steel-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-steel-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук высотой __1__ -steel-warehouse=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ склад __1__ x __2__ -steel-trashdump=Π‘Ρ‚Π°Π»ΡŒΠ½Π°Ρ свалка __1__ x __2__ - -wide-logistic-passive-chest=Passive provider chest __1__ wide (translate please) -high-logistic-passive-chest=Passive provider chest __1__ high (translate please) - -wide-logistic-active-chest=Active provider chest __1__ wide (translate please) -high-logistic-active-chest=Active provider chest __1__ high (translate please) - -wide-logistic-storage-chest=Storage chest __1__ wide (translate please) -high-logistic-storage-chest=Storage chest __1__ high (translate please) - -wide-logistic-buffer-chest=Buffer chest __1__ wide (translate please) -high-logistic-buffer-chest=Buffer chest __1__ high (translate please) - -wide-logistic-requester-chest=Requester chest __1__ wide (translate please) -high-logistic-requester-chest=Requester chest __1__ high (translate please) - -wide-bob-brass-chest=Π›Π°Ρ‚ΡƒΠ½Π½Ρ‹ΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-bob-brass-chest=Π›Π°Ρ‚ΡƒΠ½Π½Ρ‹ΠΉ Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук высотой __1__ -bob-brass-warehouse=Π›Π°Ρ‚ΡƒΠ½Π½Ρ‹ΠΉ склад __1__ x __2__ -bob-brass-trashdump=Латунная свалка __1__ x __2__ - -wide-bob-titanium-chest=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ сундкук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-bob-titanium-chest=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ сундук высотой __1__ -bob-titanium-warehouse=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ склад __1__ x __2__ -bob-titanium-trashdump=Витановая свалка __1__ x __2__ - -wide-dyworld-small-1-chest=ДСрСвянный сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-dyworld-small-1-chest=ДСрСвянный сундук высотой __1__ -dyworld-small-1-warehouse=ДСрСвянный склад __1__ x __2__ -dyworld-small-1-trashdump=ДСрСвянная свалка __1__ x __2__ - -wide-dyworld-small-2-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-dyworld-small-2-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук высотой __1__ -dyworld-small-2-warehouse=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ склад __1__ x __2__ -dyworld-small-2-trashdump=ЖСлСзная свалка __1__ x __2__ - -wide-dyworld-small-3-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-dyworld-small-3-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук высотой __1__ -dyworld-small-3-warehouse=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ склад __1__ x __2__ -dyworld-small-3-trashdump=Π‘Ρ‚Π°Π»ΡŒΠ½Π°Ρ свалка __1__ x __2__ - -wide-nullius-small-1-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-nullius-small-1-chest=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ сундук высотой __1__ -nullius-small-1-warehouse=Π–Π΅Π»Π΅Π·Π½Ρ‹ΠΉ склад __1__ x __2__ -nullius-small-1-trashdump=ЖСлСзная свалка __1__ x __2__ - -wide-nullius-small-2-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-nullius-small-2-chest=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ сундук высотой __1__ -nullius-small-2-warehouse=Π‘Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ склад __1__ x __2__ -nullius-small-2-trashdump=Π‘Ρ‚Π°Π»ΡŒΠ½Π°Ρ свалка __1__ x __2__ - -wide-nullius-small-3-chest=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ сундкук ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ __1__ -high-nullius-small-3-chest=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ сундук высотой __1__ -nullius-small-3-warehouse=Π’ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ склад __1__ x __2__ -nullius-small-3-trashdump=Витановая свалка __1__ x __2__ - -wide-nullius-small-logistic-passive-1-chest=Passive provider chest __1__ wide (translate please) -high-nullius-small-logistic-passive-1-chest=Passive provider chest __1__ high (translate please) - -wide-nullius-small-logistic-passive-2-chest=Passive provider chest __1__ wide (translate please) -high-nullius-small-logistic-passive-2-chest=Passive provider chest __1__ high (translate please) - -wide-nullius-small-logistic-active-1-chest=Active provider chest __1__ wide (translate please) -high-nullius-small-logistic-active-1-chest=Active provider chest __1__ high (translate please) - -wide-nullius-small-logistic-active-2-chest=Active provider chest __1__ wide (translate please) -high-nullius-small-logistic-active-2-chest=Active provider chest __1__ high (translate please) - -wide-nullius-small-logistic-storage-1-chest=Storage chest __1__ wide (translate please) -high-nullius-small-logistic-storage-1-chest=Storage chest __1__ high (translate please) - -wide-nullius-small-logistic-storage-2-chest=Storage chest __1__ wide (translate please) -high-nullius-small-logistic-storage-2-chest=Storage chest __1__ high (translate please) - -wide-nullius-small-logistic-buffer-1-chest=Buffer chest __1__ wide (translate please) -high-nullius-small-logistic-buffer-1-chest=Buffer chest __1__ high (translate please) - -wide-nullius-small-logistic-buffer-2-chest=Buffer chest __1__ wide (translate please) -high-nullius-small-logistic-buffer-2-chest=Buffer chest __1__ high (translate please) - -wide-nullius-small-logistic-requester-1-chest=Requester chest __1__ wide (translate please) -high-nullius-small-logistic-requester-1-chest=Requester chest __1__ high (translate please) - -wide-nullius-small-logistic-requester-2-chest=Requester chest __1__ wide (translate please) -high-nullius-small-logistic-requester-2-chest=Requester chest __1__ high (translate please) - -[item-name] -merge-chest-selector=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ сундуков - -[shortcut-name] -merge-chest-selector=ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ сундуки - -[controls] -WideChests_rotate-blueprint-clockwise=Rotate blueprint clockwise (translate please) -WideChests_rotate-blueprint-couterclockwise=Rotate blueprint couterclockwise (translate please) - -[controls-description] -WideChests_rotate-blueprint-clockwise=Works on blueprints with merged chests. (translate please) -WideChests_rotate-blueprint-couterclockwise=Works on blueprints with merged chests. (translate please) - -[mod-setting-name] -mergable-chest-name=Допустимый для объСдинСния Ρ‚ΠΈΠΏ сундуков -max-chest-width=Максимальная ΡˆΠΈΡ€ΠΈΠ½Π° сундука -max-chest-height=Максимальная высота сундука -max-chest-area=Максимальная ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ сундука -inventory-size-multiplier=ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° инвСнтаря -inventory-size-limit=Π›ΠΈΠΌΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° инвСнтаря -sprite-decal-chance=Шанс добавлСния Π΄Π΅ΠΊΠ°Π»ΠΈ ΠΊ спрайту склада -warehouse-threshold=ΠŸΠΎΡ€ΠΎΠ³ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для свалки -whitelist-chest-sizes=ДопустимыС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ сундуков - -[mod-setting-description] -mergable-chest-name=Какой Ρ‚ΠΈΠΏ сундука ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½. УстановитС ΠΌΠΎΠ΄ WideChestsAllTypes для объСдинСния сундуков Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². -max-chest-width=Максимальная ΡˆΠΈΡ€ΠΈΠ½Π° объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 42. -max-chest-height=Максимальная высота объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 42. -max-chest-area=Максимальная ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ объСдиннСного сундука. УстановитС ΠΌΠΎΠ΄ WideChestsUnlimited Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚ большС 1600. -inventory-size-multiplier=ИзмСняя эту ΠΎΠΏΡ†ΠΈΡŽ, Π²Ρ‹ рискуСтС Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого ΠΏΡ€ΠΈ объСдинСнии/Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ сундуков! -inventory-size-limit=ИзмСняя эту ΠΎΠΏΡ†ΠΈΡŽ, Π²Ρ‹ рискуСтС Ρ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ содСрТимого ΠΏΡ€ΠΈ объСдинСнии/Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ сундуков! -sprite-decal-chance=Шанс добавлСния ΠΊ сСгмСнту ΠΊΡ€Ρ‹ΡˆΠΈ склада Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π΄Π΅ΠΊΠ°Π»Π΅ΠΉ (ΠΏΠΎΠ΄Ρ‚Ρ‘ΠΊΠΈ/Ρ‚Ρ€ΡƒΠ±Ρ‹/etc). -warehouse-threshold=Π‘Π²Π°Π»ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто складов с ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ И высотой большС X. -whitelist-chest-sizes=Набор ΠΏΠ°Ρ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π¨xΠ’ (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ) Π³Π΄Π΅ Π¨ ΠΈ Π’ Ρ†Π΅Π»Ρ‹Π΅ числа Π»ΠΈΠ±ΠΎ большая Π±ΡƒΠΊΠ²Π° N (ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π°Ρ любоС число). \ No newline at end of file diff --git a/WideChests_4.2.0/prototypes/custom-input.lua b/WideChests_4.2.0/prototypes/custom-input.lua deleted file mode 100644 index ec948789..00000000 --- a/WideChests_4.2.0/prototypes/custom-input.lua +++ /dev/null @@ -1,13 +0,0 @@ -data:extend( -{ - { - type = "custom-input", - name = "WideChests_rotate-blueprint-clockwise", - key_sequence = "" - }, - { - type = "custom-input", - name = "WideChests_rotate-blueprint-couterclockwise", - key_sequence = "" - } -}) diff --git a/WideChests_4.2.0/prototypes/entity.lua b/WideChests_4.2.0/prototypes/entity.lua deleted file mode 100644 index 26fa6738..00000000 --- a/WideChests_4.2.0/prototypes/entity.lua +++ /dev/null @@ -1,170 +0,0 @@ -require("sprite-generation") -require("sprite-segments") - -function MergingChests.LimitInventorySize(default_inventory_size, tiles) - return util.clamp( - default_inventory_size * tiles * settings.startup["inventory-size-multiplier"].value, - 0, - settings.startup["inventory-size-limit"].value - ) -end - -function MergingChests.CreateEntity(chest_data, name, loc_name, subgroup, width, height, sprite, connector) - local base - if chest_data.logistic then - base = { - type = "logistic-container", - max_health = data.raw["logistic-container"][chest_data.id].max_health * math.min(width * height, 10), - inventory_size = MergingChests.LimitInventorySize(data.raw["logistic-container"][chest_data.id].inventory_size, width * height), - animation_sound = data.raw["logistic-container"][chest_data.id].animation_sound, - opened_duration = 7, - animation = - { - layers = sprite - } - } - else - base = { - type = "container", - max_health = data.raw.container[chest_data.id].max_health * math.min(width * height, 10), - inventory_size = MergingChests.LimitInventorySize(data.raw.container[chest_data.id].inventory_size, width * height), - picture = - { - layers = sprite - } - } - end - - return util.merge({ - base, - chest_data.additional_properties or {}, - { - name = name, - localised_name = loc_name, - flags = { "placeable-player", "player-creation", "not-upgradable" }, - minable = { mining_time = 2, result = chest_data.id, count = width * height }, - placeable_by = { item = chest_data.id, count = width * height }, - corpse = "medium-remnants", - dying_explosion = "medium-explosion", - open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, - close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - collision_box = { { -width / 2 + 0.15, -height / 2 + 0.15 }, { width / 2 - 0.15, height / 2 - 0.15 } }, - selection_box = { { -width / 2, -height / 2 }, { width / 2, height / 2 } }, - subgroup = subgroup, - circuit_wire_connection_point = connector.points, - circuit_connector_sprites = connector.sprites, - circuit_wire_max_distance = default_circuit_wire_max_distance + math.min(width, height) - 1, - } - }) -end - -function MergingChests.CreateWideChestEntity(data, size) - return MergingChests.CreateEntity( - data, - "wide-"..data.type.."-chest-"..size, - { "chest-name.wide-"..data.type.."-chest", size }, - "wide-chests", - size, 1, - MergingChests.CreateSprite(size, 1, MergingChests.GetWideChestSpriteSegmentsData(data.id)), - circuit_connector_definitions["chest"] - ) -end - -function MergingChests.CreateHighChestEntity(data, size) - local connectorV = circuit_connector_definitions.create - ( - universal_connector_template, - { - { - variation = 24, - main_offset = util.by_pixel(-16, 0), - shadow_offset = util.by_pixel(2.5, 4.5), - show_shadow = false - } - } - ) - return MergingChests.CreateEntity( - data, - "high-"..data.type.."-chest-"..size, - { "chest-name.high-"..data.type.."-chest", size }, - "high-chests", - 1, size, - MergingChests.CreateSprite(1, size, MergingChests.GetHighChestSpriteSegmentsData(data.id)), - connectorV - ) -end - -function MergingChests.CreateWarehouseEntity(data, width, height) - local connector = circuit_connector_definitions.create - ( - universal_connector_template, - { - { - variation = 24, - main_offset = util.by_pixel(-16 * width, 0), - shadow_offset = util.by_pixel(10 - 16 * width, 4), - show_shadow = false - } - } - ) - return MergingChests.CreateEntity( - data, - data.type.."-warehouse-"..width.."x"..height, - { "chest-name."..data.type.."-warehouse", width, height }, - "warehouse", - width, height, - MergingChests.CreateSprite(width, height, MergingChests.GetWarehouseSpriteSegmentsData(data.id)), - connector - ) -end - -function MergingChests.CreateTrashdumpEntity(data, width, height) - local connector = circuit_connector_definitions.create - ( - universal_connector_template, - { - { - variation = 24, - main_offset = util.by_pixel(14 - 16 * width, 0), - shadow_offset = util.by_pixel(24 - 16 * width, 4), - show_shadow = false - } - } - ) - return MergingChests.CreateEntity( - data, - data.type.."-trashdump-"..width.."x"..height, - { "chest-name."..data.type.."-trashdump", width, height }, - "trashdump", - width, height, - MergingChests.CreateSprite(width, height, MergingChests.GetTrashdumpSpriteSegmentsData(data.id)), - connector - ) -end - -local limits = MergingChests.Limits() -for _, id in ipairs(MergingChests.MergableChestIds) do - local chestData = MergingChests.MergableChestIdToData[id] - for j = 2, math.min(limits.height, limits.area) do - if MergingChests.CheckWhitelist(1, j) then - data:extend({ MergingChests.CreateHighChestEntity(chestData, j) }) - end - end - - for i = 2, math.min(limits.width, limits.area) do - if MergingChests.CheckWhitelist(i, 1) then - data:extend({ MergingChests.CreateWideChestEntity(chestData, i) }) - end - - for j = 2, math.min(limits.height, limits.area) do - if MergingChests.CheckWhitelist(i, j) then - if i > settings.startup["warehouse-threshold"].value and j > settings.startup["warehouse-threshold"].value then - data:extend({ MergingChests.CreateTrashdumpEntity(chestData, i, j) }) - else - data:extend({ MergingChests.CreateWarehouseEntity(chestData, i, j) }) - end - end - end - end -end \ No newline at end of file diff --git a/WideChests_4.2.0/prototypes/groups.lua b/WideChests_4.2.0/prototypes/groups.lua deleted file mode 100644 index 5b640fc0..00000000 --- a/WideChests_4.2.0/prototypes/groups.lua +++ /dev/null @@ -1,34 +0,0 @@ -data:extend( -{ - { - type = "item-group", - name = "merged-chests", - order = "wide-chests", - icon = "__base__/graphics/item-group/logistics.png", - icon_size = 64, - }, - { - type = "item-subgroup", - name = "wide-chests", - group = "merged-chests", - order = "a", - }, - { - type = "item-subgroup", - name = "high-chests", - group = "merged-chests", - order = "b", - }, - { - type = "item-subgroup", - name = "warehouse", - group = "merged-chests", - order = "c", - }, - { - type = "item-subgroup", - name = "trashdump", - group = "merged-chests", - order = "d", - }, -}) \ No newline at end of file diff --git a/WideChests_4.2.0/prototypes/item.lua b/WideChests_4.2.0/prototypes/item.lua deleted file mode 100644 index e37469fd..00000000 --- a/WideChests_4.2.0/prototypes/item.lua +++ /dev/null @@ -1,34 +0,0 @@ -local filters -if MergingChests.CheckMod(MergingChests.LogisticModName) then - filters = { - "logistic-container", - "container" - } -else - filters = { - "container" - } -end - -data:extend({ - { - type = "selection-tool", - name = "merge-chest-selector", - icon = "__WideChests__/graphics/icons/merge-chest-selector.png", - icon_size = 32, - subgroup = "tool", - order = "c[automated-construction]-a[merge-chest]", - stack_size = 1, - stackable = false, - draw_label_for_cursor_render = true, - selection_color = { r = 0, g = 0, b = 1 }, - alt_selection_color = { r = 1, g = 0, b = 0 }, - flags = { "only-in-cursor" }, - selection_mode = { "buildable-type" }, - alt_selection_mode = { "buildable-type" }, - selection_cursor_box_type = "entity", - alt_selection_cursor_box_type = "entity", - entity_filters = MergingChests.MergableChestIds, - alt_entity_type_filters = filters - } -}) diff --git a/WideChests_4.2.0/prototypes/shortcuts.lua b/WideChests_4.2.0/prototypes/shortcuts.lua deleted file mode 100644 index fda752ff..00000000 --- a/WideChests_4.2.0/prototypes/shortcuts.lua +++ /dev/null @@ -1,17 +0,0 @@ -data:extend( -{ - { - type = "shortcut", - name = "merge-chest-selector", - order = "b[blueprints]-c[merge-chests]", - action = "lua", - icon = - { - filename = "__WideChests__/graphics/icons/merge-shortcut.png", - priority = "extra-high-no-scale", - size = 32, - scale = 1, - flags = { "icon" } - } - } -}) diff --git a/WideChests_4.2.0/prototypes/sprite-generation.lua b/WideChests_4.2.0/prototypes/sprite-generation.lua deleted file mode 100644 index d8ec26ed..00000000 --- a/WideChests_4.2.0/prototypes/sprite-generation.lua +++ /dev/null @@ -1,155 +0,0 @@ -require("prng") - -MergingChests.DecalChance = settings.startup["sprite-decal-chance"].value - -function MergingChests.IndexToCoordinates(index, mod) - return - math.floor(math.fmod(index, mod)), - math.floor(index / mod) -end - -function MergingChests.PostprocessSprite(sprite) - local lcm = 1 - for _, layer in ipairs(sprite) do - if layer.frame_count then - lcm = math.lcm(lcm, layer.frame_count) - end - end - - if lcm > 1 then - for _, layer in ipairs(sprite) do - layer.repeat_count = lcm / (layer.frame_count or 1) - end - end -end - ----@param width number ----@param height number ----@param segments entity_sprite -function MergingChests.CreateSprite(width, height, segments) - local sprite = { } - - MergingChests.CreateEntitySprite(width, height, segments.entity, sprite) - if segments.shadow then - MergingChests.CreateEntitySprite(width, height, segments.shadow, sprite) - end - - MergingChests.PostprocessSprite(sprite) - - return sprite; -end - ----@param width number ----@param height number ----@param segments sprite_definition ----@param sprite table -function MergingChests.CreateEntitySprite(width, height, segments, sprite) - local x0 = -width / 2 - local y0 = -height / 2 - local xM = width / 2 - 1 - local yM = height / 2 - 1 - - -- do top line - if segments.top_left then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 0, x0, y0)) - end - if segments.top then - for x = 1, width - 2 do - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 1, x0 + x, y0)) - end - end - if segments.top_right then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 2, xM, y0)) - end - - -- do middle horizontal lines - for y = 1, height - 2 do - if segments.left then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 3, x0, y0 + y)) - end - if segments.middle then - for x = 1, width - 2 do - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 4, x0 + x, y0 + y)) - end - end - if segments.right then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 5, xM, y0 + y)) - end - end - - -- do bottom line - if segments.bottom_left then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 6, x0, yM)) - end - if segments.bottom then - for x = 1, width - 2 do - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 7, x0 + x, yM)) - end - end - if segments.bottom_right then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 8, xM, yM)) - end - - -- centers - if segments.top_center then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 11, (x0 + xM) / 2, y0)) - end - if segments.left_center then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 13, x0, (y0 + yM) / 2)) - end - if segments.center then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 14, (x0 + xM) / 2, (y0 + yM) / 2)) - end - if segments.right_center then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 15, xM, (y0 + yM) / 2)) - end - if segments.bottom_center then - table.insert(sprite, MergingChests.CreateSpriteInfo(segments, 17, (x0 + xM) / 2, yM)) - end -end - --- top left corner of sprite will be placed onto center of entity (plus shifts) --- random decals may be used --- shiftX, shiftY = local segment tile shift --- shifts in segment(s) are pixel shifts ----@param sprite_definition sprite_definition ----@param segment_index number ----@param shift_x number ----@param shift_y number ----@return table -function MergingChests.CreateSpriteInfo(sprite_definition, segment_index, shift_x, shift_y) - local segment = sprite_definition[segment_index] - local main_segment = segment - - if segment[1] ~= nil then - if segment[2] ~= nil and prng.range(1, 100) < MergingChests.DecalChance then - main_segment = segment[1] - segment = segment[prng.range(2, table_size(segment))] - else - main_segment = segment - segment = segment[1] - end - end - - local index_horizontal, index_vertical = MergingChests.IndexToCoordinates(segment_index, 3) - local width = segment.width or sprite_definition.widths[index_horizontal] - local height = segment.height or sprite_definition.heights[index_vertical] - - return - { - filename = segment.sprite or sprite_definition.sprite, - priority = "medium", - x = (segment.x or main_segment.x or 0), - y = (segment.y or main_segment.y or 0), - width = width, - height = height, - shift = - { - shift_x + (width / 2.0 * (sprite_definition.scale or 1) + (segment.shift and segment.shift.x or 0) + sprite_definition.shift.x) / 32.0, - shift_y + (height / 2.0 * (sprite_definition.scale or 1) + (segment.shift and segment.shift.y or 0) + sprite_definition.shift.y) / 32.0 - }, - scale = segment.scale or sprite_definition.scale or 1, - frame_count = segment.frame_count or 1, - draw_as_shadow = sprite_definition.shadow or false - } -end \ No newline at end of file diff --git a/WideChests_4.2.0/prototypes/sprite-segments.lua b/WideChests_4.2.0/prototypes/sprite-segments.lua deleted file mode 100644 index 430a3698..00000000 --- a/WideChests_4.2.0/prototypes/sprite-segments.lua +++ /dev/null @@ -1,642 +0,0 @@ ---- @alias position { x?: number, y?: number } - ---- @alias sprite_segment ---- | { sprite?: string, width?: number, height?: number, frame_count?: number, scale?: number, shift?: position } ---- | position - ---- @alias sprite_segment_variants sprite_segment | sprite_segment[] - ---- @alias widths { left: number, middle: number, right: number } | number[] ---- @alias heights { top: number, middle: number, bottom: number } | number[] - ---- @alias sprite_definition ---- | { [number]: sprite_segment_variants } ---- | { top_left?: sprite_segment_variants } ---- | { top?: sprite_segment_variants } ---- | { top_right?: sprite_segment_variants } ---- | { left?: sprite_segment_variants } ---- | { middle?: sprite_segment_variants } ---- | { right?: sprite_segment_variants } ---- | { bottom_left?: sprite_segment_variants } ---- | { bottom?: sprite_segment_variants } ---- | { bottom_right?: sprite_segment_variants } ---- | { top_center?: sprite_segment_variants } ---- | { left_center?: sprite_segment_variants } ---- | { center?: sprite_segment_variants } ---- | { right_center?: sprite_segment_variants } ---- | { bottom_center?: sprite_segment_variants } ---- | { sprite: string, scale: number, shift: position, widths: widths, heights: heights } ---- | { shadow?: boolean } - ---- @alias entity_sprite ---- | { entity: sprite_definition, shadow?: sprite_definition } - ---- @param entity_sprite string ---- @param center_sprite string ---- @param shadow_sprite string ---- @return entity_sprite -function CreateLogisticWideChestSegments(entity_sprite, center_sprite, shadow_sprite) - return { - entity = - { - sprite = entity_sprite, - top_left = { x = 0, y = 0 }, - top = { x = 64, y = 0 }, - top_right = { x = 128, y = 0 }, - - widths = { left = 64, middle = 64, right = 64 }, - heights = - { - top = 80, - middle = 0, - bottom = 0 - }, - shift = { x = -0.5, y = -4.5 }, - scale = 0.5, - - center = { - sprite = center_sprite, - width = 66, - height = 32, - frame_count = 7 - } - }, - shadow = - { - sprite = shadow_sprite, - top_right = { x = 60, y = 0, shift = { x = 30 } }, - - widths = { left = 0, middle = 0, right = 50 }, - heights = - { - top = 46, - middle = 0, - bottom = 0 - }, - shift = { x = -4, y = 10 }, - scale = 0.5, - shadow = true - } - } -end - ---- @param entity_sprite string ---- @param center_sprite string ---- @param shadow_sprite string ---- @return entity_sprite -function CreateLogisticHighChestSegments(entity_sprite, center_sprite, shadow_sprite) - return { - entity = - { - sprite = entity_sprite, - top_left = { x = 0, y = 0, shift = { y = -8 } }, - left = { x = 0, y = 80 }, - bottom_left = { x = 0, y = 144 }, - - widths = { left = 64, middle = 0, right = 0 }, - heights = - { - top = 80, - middle = 64, - bottom = 64 - }, - shift = { x = 0, y = -0.5 }, - scale = 0.5, - - center = { - sprite = center_sprite, - width = 66, - height = 32, - shift = { x = -0.5, y = -4 }, - frame_count = 7 - } - }, - shadow = - { - sprite = shadow_sprite, - top_right = { x = 8, y = 0, shift = { y = 6.5 } }, - right = { x = 8, y = 18 }, - bottom_right = { x = 8, y = 45 }, - - widths = { left = 0, middle = 0, right = 102 }, - heights = - { - top = 55, - middle = 64, - bottom = 55 - }, - shift = { x = 0.75, y = 4 }, - scale = 0.5, - shadow = true - } - } -end - ---- @param entity_sprite string ---- @param center_sprite string ---- @param shadow_sprite string ---- @return entity_sprite -function CreateLogisticWarehouseSegments(entity_sprite, center_sprite, shadow_sprite) - return { - entity = - { - sprite = entity_sprite, - - top_left = { x = 190, y = 177, shift = { y = 7 } }, - top = { x = 256, y = 177, shift = { y = 7 } }, - top_right = { x = 320, y = 177, shift = { y = 7 } }, - - left = { x = 190, y = 252 }, - middle = { x = 256, y = 252 }, - right = { x = 320, y = 252 }, - - bottom_left = { x = 190, y = 316 }, - bottom = { x = 256, y = 316 }, - bottom_right = { x = 320, y = 316 }, - - center = { - sprite = center_sprite, - width = 66, - height = 32, - shift = { y = 3 }, - frame_count = 7 - }, - - widths = { left = 66, middle = 64, right = 66 }, - heights = - { - top = 50, - middle = 64, - bottom = 110 - }, - shift = { x = 0, y = -23 }, - scale = 0.5 - }, - shadow = - { - sprite = shadow_sprite, - - top_right = { x = 384, y = 261, shift = { x = 32, y = 7 } }, - - right = { x = 384, y = 310, shift = { x = 32 } }, - - bottom_left = { x = 193, y = 374 }, - bottom = { x = 259, y = 374 }, - bottom_right = { x = 384, y = 374, shift = { x = 32 } }, - - widths = { left = 110, middle = 64, right = 120 }, - heights = - { - top = 50, - middle = 64, - bottom = 50 - }, - shift = { x = -1, y = 6 }, - scale = 0.5, - shadow = true - } - } -end - -MergingChests.OTHER = "any-other" - ---- @type ---- | { wide_segments: { [string]: entity_sprite } } ---- | { high_segments: { [string]: entity_sprite } } ---- | { warehouse_segments: { [string]: entity_sprite } } ---- | { trashdump_segments: { [string]: entity_sprite } } -sprite_segments_data = -{ - wide_segments = - { - ["logistic-chest-active-provider"] = CreateLogisticWideChestSegments( - "__WideChests__/graphics/entity/logistic-chest-active-provider/wide-chest/active-provider-wide-chest.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/wide-chest/wide-chest-shadow.png" - ), - ["logistic-chest-buffer"] = CreateLogisticWideChestSegments( - "__WideChests__/graphics/entity/logistic-chest-buffer/wide-chest/buffer-wide-chest.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/wide-chest/wide-chest-shadow.png" - ), - ["logistic-chest-passive-provider"] = CreateLogisticWideChestSegments( - "__WideChests__/graphics/entity/logistic-chest-passive-provider/wide-chest/passive-provider-wide-chest.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/wide-chest/wide-chest-shadow.png" - ), - ["logistic-chest-requester"] = CreateLogisticWideChestSegments( - "__WideChests__/graphics/entity/logistic-chest-requester/wide-chest/requester-wide-chest.png", - "__WideChests__/graphics/entity/logistic-chest-requester/requester-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-requester/wide-chest/wide-chest-shadow.png" - ), - ["logistic-chest-storage"] = CreateLogisticWideChestSegments( - "__WideChests__/graphics/entity/logistic-chest-storage/wide-chest/storage-wide-chest.png", - "__WideChests__/graphics/entity/logistic-chest-storage/storage-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-storage/wide-chest/wide-chest-shadow.png" - ), - - [MergingChests.OTHER] = { - entity = - { - sprite = "__WideChests__/graphics/entity/steel-chest/wide-chest/wide-chest.png", - top_left = { x = 0, y = 0 }, - top = { x = 32, y = 0 }, - top_right = { x = 64, y = 0 }, - - widths = { left = 64, middle = 64, right = 64 }, - heights = - { - top = 80, - middle = 0, - bottom = 0 - }, - shift = { x = -0.25, y = -4.5 }, - scale = 0.5 - }, - shadow = - { - sprite = "__WideChests__/graphics/entity/steel-chest/wide-chest/wide-chest-shadow.png", - top_right = { x = 60, y = 0, shift = { x = 30 } }, - - widths = { left = 0, middle = 0, right = 50 }, - heights = - { - top = 46, - middle = 0, - bottom = 0 - }, - shift = { x = 0.75, y = 12.5 }, - scale = 0.5, - shadow = true - } - } - }, - high_segments = - { - ["logistic-chest-active-provider"] = CreateLogisticHighChestSegments( - "__WideChests__/graphics/entity/logistic-chest-active-provider/high-chest/active-provider-high-chest.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/high-chest/high-chest-shadow.png" - ), - ["logistic-chest-buffer"] = CreateLogisticHighChestSegments( - "__WideChests__/graphics/entity/logistic-chest-buffer/high-chest/buffer-high-chest.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/high-chest/high-chest-shadow.png" - ), - ["logistic-chest-passive-provider"] = CreateLogisticHighChestSegments( - "__WideChests__/graphics/entity/logistic-chest-passive-provider/high-chest/passive-provider-high-chest.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/high-chest/high-chest-shadow.png" - ), - ["logistic-chest-requester"] = CreateLogisticHighChestSegments( - "__WideChests__/graphics/entity/logistic-chest-requester/high-chest/requester-high-chest.png", - "__WideChests__/graphics/entity/logistic-chest-requester/requester-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-requester/high-chest/high-chest-shadow.png" - ), - ["logistic-chest-storage"] = CreateLogisticHighChestSegments( - "__WideChests__/graphics/entity/logistic-chest-storage/high-chest/storage-high-chest.png", - "__WideChests__/graphics/entity/logistic-chest-storage/storage-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-storage/high-chest/high-chest-shadow.png" - ), - - [MergingChests.OTHER] = { - entity = - { - sprite = "__WideChests__/graphics/entity/steel-chest/high-chest/high-chest.png", - top_left = { x = 0, y = 0, shift = { y = 5 } }, - left = { x = 0, y = 22 }, - bottom_left = { x = 0, y = 54 }, - - widths = { left = 64, middle = 0, right = 0 }, - heights = - { - top = 54, - middle = 64, - bottom = 90 - }, - shift = { x = -0.25, y = -9.5 }, - scale = 0.5 - }, - shadow = - { - sprite = "__WideChests__/graphics/entity/steel-chest/high-chest/high-chest-shadow.png", - top_right = { x = 0, y = 0, shift = { y = 6.5 } }, - right = { x = 0, y = 18 }, - bottom_right = { x = 0, y = 45 }, - - widths = { left = 0, middle = 0, right = 110 }, - heights = - { - top = 55, - middle = 64, - bottom = 55 - }, - shift = { x = 0.75, y = 6 }, - scale = 0.5, - shadow = true - } - } - }, - warehouse_segments = - { - ["logistic-chest-active-provider"] = CreateLogisticWarehouseSegments( - "__WideChests__/graphics/entity/logistic-chest-active-provider/warehouse/warehouse.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/active-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-active-provider/warehouse/warehouse-shadow.png" - ), - ["logistic-chest-buffer"] = CreateLogisticWarehouseSegments( - "__WideChests__/graphics/entity/logistic-chest-buffer/warehouse/warehouse.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/buffer-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-buffer/warehouse/warehouse-shadow.png" - ), - ["logistic-chest-passive-provider"] = CreateLogisticWarehouseSegments( - "__WideChests__/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/passive-provider-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-passive-provider/warehouse/warehouse-shadow.png" - ), - ["logistic-chest-requester"] = CreateLogisticWarehouseSegments( - "__WideChests__/graphics/entity/logistic-chest-requester/warehouse/warehouse.png", - "__WideChests__/graphics/entity/logistic-chest-requester/requester-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-requester/warehouse/warehouse-shadow.png" - ), - ["logistic-chest-storage"] = CreateLogisticWarehouseSegments( - "__WideChests__/graphics/entity/logistic-chest-storage/warehouse/warehouse.png", - "__WideChests__/graphics/entity/logistic-chest-storage/storage-hatch-door.png", - "__WideChests__/graphics/entity/logistic-chest-storage/warehouse/warehouse-shadow.png" - ), - - [MergingChests.OTHER] = { - entity = - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse.png", - - top_left = { x = 190, y = 177, shift = { y = 7 } }, - top = { x = 256, y = 177, shift = { y = 7 } }, - top_right = { x = 320, y = 177, shift = { y = 7 } }, - - left = { - { x = 190, y = 252 }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png", - y = 234 - } - }, - middle = { - { x = 256, y = 252 }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png", - y = 234 - } - }, - right = { - { x = 320, y = 252 }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-2.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-3.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-4.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-5.png", - y = 234 - }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-6.png", - y = 234 - } - }, - - bottom_left = { x = 190, y = 316 }, - bottom = { - { x = 256, y = 316 }, - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-alternatives-1.png" - } - }, - bottom_right = { x = 320, y = 316 }, - - widths = { left = 66, middle = 64, right = 66 }, - heights = - { - top = 50, - middle = 64, - bottom = 110 - }, - shift = { x = 0, y = -23 }, - scale = 0.5 - }, - shadow = - { - sprite = "__WideChests__/graphics/entity/steel-chest/warehouse/warehouse-shadow.png", - - top_right = { x = 384, y = 261, shift = { x = 32, y = 7 } }, - - right = { x = 384, y = 310, shift = { x = 32 } }, - - bottom_left = { x = 193, y = 374 }, - bottom = { x = 259, y = 374 }, - bottom_right = { x = 384, y = 374, shift = { x = 32 } }, - - widths = { left = 110, middle = 64, right = 120 }, - heights = - { - top = 50, - middle = 64, - bottom = 50 - }, - shift = { x = -1, y = 6 }, - scale = 0.5, - shadow = true - } - } - }, - trashdump_segments = - { - [MergingChests.OTHER] = { - entity = - { - sprite = "__WideChests__/graphics/entity/steel-chest/trashdump/trashdump-entity.png", - - top_left = { x = 0, y = 0 }, - top = { x = 36, y = 0 }, - top_right = { x = 72, y = 0 }, - - left = { x = 0, y = 41 }, - right = { x = 72, y = 41 }, - - bottom_left = { x = 0, y = 85, shift = { x = 1 } }, - bottom = { x = 36, y = 85 }, - bottom_right = { x = 72, y = 85 }, - - widths = { left = 32, middle = 32, right = 32 }, - heights = - { - top = 37, - middle = 40, - bottom = 35 - }, - shift = { x = 0, y = -8 } - }, - shadow = - { - sprite = "__WideChests__/graphics/entity/steel-chest/trashdump/trashdump-shadow.png", - - top_left = { x = 0, y = 0 }, - top = { x = 63, y = 0, shift = { x = -16 } }, - top_right = { x = 136, y = 0, shift = { x = -17 } }, - - left = { x = 0, y = 60 }, - right = { x = 0, y = 60 }, - - bottom_left = { x = 0, y = 116 }, - bottom = { x = 63, y = 0, shift = { x = -16 } }, - bottom_right = { x = 136, y = 116, shift = { x = -16 } }, - - widths = { left = 42, middle = 58, right = 44 }, - heights = - { - top = 50, - middle = 47, - bottom = 16 - }, - shift = { x = 18, y = 27 }, - shadow = true - } - } - } -} - --- make copies -sprite_segments_data.wide_segments['nullius-small-dispatch-chest-1'] = sprite_segments_data.wide_segments['logistic-chest-active-provider'] -sprite_segments_data.wide_segments['nullius-small-dispatch-chest-2'] = sprite_segments_data.wide_segments['logistic-chest-active-provider'] -sprite_segments_data.wide_segments['nullius-small-buffer-chest-1'] = sprite_segments_data.wide_segments['logistic-chest-buffer'] -sprite_segments_data.wide_segments['nullius-small-buffer-chest-2'] = sprite_segments_data.wide_segments['logistic-chest-buffer'] -sprite_segments_data.wide_segments['nullius-small-supply-chest-1'] = sprite_segments_data.wide_segments['logistic-chest-passive-provider'] -sprite_segments_data.wide_segments['nullius-small-supply-chest-2'] = sprite_segments_data.wide_segments['logistic-chest-passive-provider'] -sprite_segments_data.wide_segments['nullius-small-demand-chest-1'] = sprite_segments_data.wide_segments['logistic-chest-requester'] -sprite_segments_data.wide_segments['nullius-small-demand-chest-2'] = sprite_segments_data.wide_segments['logistic-chest-requester'] -sprite_segments_data.wide_segments['nullius-small-storage-chest-1'] = sprite_segments_data.wide_segments['logistic-chest-storage'] -sprite_segments_data.wide_segments['nullius-small-storage-chest-2'] = sprite_segments_data.wide_segments['logistic-chest-storage'] - -sprite_segments_data.high_segments['nullius-small-dispatch-chest-1'] = sprite_segments_data.high_segments['logistic-chest-active-provider'] -sprite_segments_data.high_segments['nullius-small-dispatch-chest-2'] = sprite_segments_data.high_segments['logistic-chest-active-provider'] -sprite_segments_data.high_segments['nullius-small-buffer-chest-1'] = sprite_segments_data.high_segments['logistic-chest-buffer'] -sprite_segments_data.high_segments['nullius-small-buffer-chest-2'] = sprite_segments_data.high_segments['logistic-chest-buffer'] -sprite_segments_data.high_segments['nullius-small-supply-chest-1'] = sprite_segments_data.high_segments['logistic-chest-passive-provider'] -sprite_segments_data.high_segments['nullius-small-supply-chest-2'] = sprite_segments_data.high_segments['logistic-chest-passive-provider'] -sprite_segments_data.high_segments['nullius-small-demand-chest-1'] = sprite_segments_data.high_segments['logistic-chest-requester'] -sprite_segments_data.high_segments['nullius-small-demand-chest-2'] = sprite_segments_data.high_segments['logistic-chest-requester'] -sprite_segments_data.high_segments['nullius-small-storage-chest-1'] = sprite_segments_data.high_segments['logistic-chest-storage'] -sprite_segments_data.high_segments['nullius-small-storage-chest-2'] = sprite_segments_data.high_segments['logistic-chest-storage'] - -sprite_segments_data.warehouse_segments['nullius-small-dispatch-chest-1'] = sprite_segments_data.warehouse_segments['logistic-chest-active-provider'] -sprite_segments_data.warehouse_segments['nullius-small-dispatch-chest-2'] = sprite_segments_data.warehouse_segments['logistic-chest-active-provider'] -sprite_segments_data.warehouse_segments['nullius-small-buffer-chest-1'] = sprite_segments_data.warehouse_segments['logistic-chest-buffer'] -sprite_segments_data.warehouse_segments['nullius-small-buffer-chest-2'] = sprite_segments_data.warehouse_segments['logistic-chest-buffer'] -sprite_segments_data.warehouse_segments['nullius-small-supply-chest-1'] = sprite_segments_data.warehouse_segments['logistic-chest-passive-provider'] -sprite_segments_data.warehouse_segments['nullius-small-supply-chest-2'] = sprite_segments_data.warehouse_segments['logistic-chest-passive-provider'] -sprite_segments_data.warehouse_segments['nullius-small-demand-chest-1'] = sprite_segments_data.warehouse_segments['logistic-chest-requester'] -sprite_segments_data.warehouse_segments['nullius-small-demand-chest-2'] = sprite_segments_data.warehouse_segments['logistic-chest-requester'] -sprite_segments_data.warehouse_segments['nullius-small-storage-chest-1'] = sprite_segments_data.warehouse_segments['logistic-chest-storage'] -sprite_segments_data.warehouse_segments['nullius-small-storage-chest-2'] = sprite_segments_data.warehouse_segments['logistic-chest-storage'] - ---- @param segment sprite_definition -function TransformSegmentData(segment) - segment.widths[0] = segment.widths.left - segment.widths[1] = segment.widths.middle - segment.widths[2] = segment.widths.right - - segment.heights[0] = segment.heights.top - segment.heights[1] = segment.heights.middle - segment.heights[2] = segment.heights.bottom - - segment[0] = segment.top_left - segment[1] = segment.top - segment[2] = segment.top_right - segment[3] = segment.left - segment[4] = segment.middle - segment[5] = segment.right - segment[6] = segment.bottom_left - segment[7] = segment.bottom - segment[8] = segment.bottom_right - - segment[11] = segment.top_center - segment[13] = segment.left_center - segment[14] = segment.center - segment[15] = segment.right_center - segment[17] = segment.bottom_center -end - --- transform widths and heights maps to arrays and stores segments in an array -for _, segments in pairs(sprite_segments_data) do - for __, segment in pairs(segments) do - if segment.entity then - TransformSegmentData(segment.entity) - end - if segment.shadow then - TransformSegmentData(segment.shadow) - end - end -end - ---- @param entity_name string ---- @return entity_sprite -function MergingChests.GetWideChestSpriteSegmentsData(entity_name) - return sprite_segments_data.wide_segments[entity_name] or sprite_segments_data.wide_segments[MergingChests.OTHER] -end - ---- @param entity_name string ---- @return entity_sprite -function MergingChests.GetHighChestSpriteSegmentsData(entity_name) - return sprite_segments_data.high_segments[entity_name] or sprite_segments_data.high_segments[MergingChests.OTHER] -end - ---- @param entity_name string ---- @return entity_sprite -function MergingChests.GetWarehouseSpriteSegmentsData(entity_name) - return sprite_segments_data.warehouse_segments[entity_name] or sprite_segments_data.warehouse_segments[MergingChests.OTHER] -end - ---- @param entity_name string ---- @return entity_sprite -function MergingChests.GetTrashdumpSpriteSegmentsData(entity_name) - return sprite_segments_data.trashdump_segments[entity_name] or sprite_segments_data.trashdump_segments[MergingChests.OTHER] -end diff --git a/WideChests_4.2.0/settings.lua b/WideChests_4.2.0/settings.lua deleted file mode 100644 index 83e09f1c..00000000 --- a/WideChests_4.2.0/settings.lua +++ /dev/null @@ -1,97 +0,0 @@ -require("init-settings") - -local allowedChestNames = { } -for _, data in pairs(MergingChests.MergableChestIdToData) do - if data.name then - table.insert(allowedChestNames, data.name) - end -end - -data:extend( -{ - { - name = "mergable-chest-name", - type = "string-setting", - setting_type = "startup", - default_value = MergingChests.MergableChestIdToData["steel-chest"].name, - allowed_values = allowedChestNames, - per_user = false, - order = "1" - }, - { - name = "max-chest-width", - type = "int-setting", - setting_type = "startup", - minimum_value = 2, - default_value = 42, - per_user = false, - order = "2" - }, - { - name = "max-chest-height", - type = "int-setting", - setting_type = "startup", - minimum_value = 2, - default_value = 42, - per_user = false, - order = "3" - }, - { - name = "max-chest-area", - type = "int-setting", - setting_type = "startup", - minimum_value = 2, - default_value = 1600, - per_user = false, - order = "4" - }, - { - name = "whitelist-chest-sizes", - type = "string-setting", - setting_type = "startup", - default_value = "NxN", - allow_blank = true, - per_user = false, - order = "5" - }, - { - name = "inventory-size-multiplier", - type = "double-setting", - setting_type = "startup", - minimum_value = 0, - default_value = 1.0, - per_user = false, - order = "6" - }, - { - name = "inventory-size-limit", - type = "int-setting", - setting_type = "startup", - minimum_value = 1, - maximum_value = 65535, - default_value = 1000, - per_user = false, - order = "7" - }, - { - name = "sprite-decal-chance", - type = "int-setting", - setting_type = "startup", - minimum_value = 0, - maximum_value = 100, - default_value = 15, - per_user = false, - order = "8" - }, - { - name = "warehouse-threshold", - type = "int-setting", - setting_type = "startup", - minimum_value = 2, - default_value = 5, - per_user = false, - order = "9" - }, -}) - - diff --git a/WideChests_4.2.0/thumbnail.png b/WideChests_4.2.0/thumbnail.png deleted file mode 100644 index 1677d1a8..00000000 Binary files a/WideChests_4.2.0/thumbnail.png and /dev/null differ diff --git a/WideChests_4.2.0/utils.lua b/WideChests_4.2.0/utils.lua deleted file mode 100644 index 5995dfc8..00000000 --- a/WideChests_4.2.0/utils.lua +++ /dev/null @@ -1,35 +0,0 @@ -require "util" - -function math.round(num) - if num >= 0 then - return math.floor(num + 0.5) - else - return math.ceil(num - 0.5) - end -end - -function math.gcd(num1, num2) - if num1 == num2 then - return num1 - elseif num1 > num2 then - return math.gcd(num1 - num2, num2) - else - return math.gcd(num1, num2 - num1) - end -end - -function math.lcm(num1, num2) - return num1 * num2 / math.gcd(num1, num2) -end - -function groupByName(t) - local result = { } - for _, item in ipairs(t) do - local key = item.name - if not result[key] then - result[key] = { } - end - table.insert(result[key], item) - end - return result -end diff --git a/WireShortcuts/changelog.txt b/WireShortcuts/changelog.txt new file mode 100644 index 00000000..fd1c9ec7 --- /dev/null +++ b/WireShortcuts/changelog.txt @@ -0,0 +1,202 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.13 +Date: 2023-04-26 + Bugfixes: + - Fixed that the shortcuts and hotkeys wouldn't work properly with a connection in progress. +--------------------------------------------------------------------------------------------------- +Version: 1.1.12 +Date: 2023-04-15 + Bugfixes: + - Fixed that the wire cutter tool could be placed into the inventory; + - Fixed crash when using shortcuts when dead. +--------------------------------------------------------------------------------------------------- +Version: 1.1.11 +Date: 2023-01-24 + Changes: + - Removed a no longer necessary compatibility feature that prevented spawning wires in the map mode. +--------------------------------------------------------------------------------------------------- +Version: 1.1.10 +Date: 2022-10-01 + Bugfixes: + - Fixed a wire cutter incompatibility with LTN due to hidden wires. +--------------------------------------------------------------------------------------------------- +Version: 1.1.9 +Date: 2022-05-02 + Bugfixes: + - Fixed crash when Circuit Network technology is removed by a mod. +--------------------------------------------------------------------------------------------------- +Version: 1.1.8 +Date: 2021-07-09 + Bugfixes: + - Fixed reported incompatibility with Space Exploration harder. +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 2021-07-09 + Bugfixes: + - Fixed reported incompatibility with Space Exploration. +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 2021-03-22 + Bugfixes: + - Fixed reported desync due to conditional loading of components. +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2021-01-01 + Changes: + - Removed special compatibility with Industrial Revolution. In case of issues, use "/unlock-shortcut-bar" command + Bugfixes: + - Fixed incompatibility with Industrial Revolution 2. +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2020-12-15 + Changes: + - Wire cutter selection colors adjusted to match the colors of the blueprinting tools. + - Extensive internal refactoring. If everthing went right, no changes visible to the user. + Bugfixes: + - Fixed some copy-paste mishaps in the changelog. +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2020-12-02 + Bugfixes: + - Fixed possible incompatibility with other shortcut mods. +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2020-12-02 + Bugfixes: + - Fixed that the wire cutter didn't work for the gates. +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2020-12-02 + Features: + - Added the wire cutter tool. See mod desription for details. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020-11-26 + Features: + - Updated for factorio 1.1.0. + Bugfixes: + - Fixed that red and green wire icons couldn't be selected for blueprint thumbnails. +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 +Date: 2020-06-11 + Features: + - Updated item icons to match the new HD icons in the game. +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 +Date: 2020-05-01 + Locale: + - Updated German locale, contributed by FI. + Bugfixes: + - Fixed the cursor clearing check so that red and green wire wouldn't get in the way. + - Implemented that red and green wire are also disposed of when placed into the player trash or on the ground. +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 2020-04-30 + Features: + - Updated for Factorio 0.18.22. + Bugfixes: + - Fixed a potential loss of items in the rare event the cursor couldn't be cleared. +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 2020-04-10 + Bugfixes: + - Attempted to fix that hotkey would not respect shortcut unlocks. + - Fixed minor internal validation error. +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 2020-01-23 + Features: + - Updated for Factorio 0.18. +--------------------------------------------------------------------------------------------------- +Version: 0.3.174 +Date: 2019-10-02 + Bugfixes: + - Fixed reported migration crash. +--------------------------------------------------------------------------------------------------- +Version: 0.3.173 +Date: 2019-09-14 + Minor Features: + - Added compatibility with Industrial Revolution for the copper wire shortcut unlock. +--------------------------------------------------------------------------------------------------- +Version: 0.3.172 +Date: 2019-07-26 + Bugfixes: + - Fixed minor issues with the implementation of the wire surrogates. + - Fixed the changelog. +--------------------------------------------------------------------------------------------------- +Version: 0.3.171 +Date: 2019-07-25 + Bugfixes: + - Changelog typo + - Fixed replacing wires with surrogates in recipes. +--------------------------------------------------------------------------------------------------- +Version: 0.3.170 +Date: 2019-07-25 + Features: + - Added an option to retain "wire surrogates" in recipes for mods that use them. HIGHLY NOT RECOMMENDED. Let the wires go! But if you must. +--------------------------------------------------------------------------------------------------- +Version: 0.2.179 +Date: 2019-07-20 + Bugfixes: + - Fixed that colored wire wasn't removed from modded recipes if they were defined in a particular way. +--------------------------------------------------------------------------------------------------- +Version: 0.2.178 +Date: 2019-05-20 + Changes: + - Disabled wire generation in map mode due to a report that it causes crashes in certain circumstances with other mods. +--------------------------------------------------------------------------------------------------- +Version: 0.2.177 +Date: 2019-03-17 + Bugfixes: + - Reported error with removing wire from ingredient. +--------------------------------------------------------------------------------------------------- +Version: 0.2.176 +Date: 2019-03-16 + Locale: + - German, contributed by LeByom. +--------------------------------------------------------------------------------------------------- +Version: 0.2.175 +Date: 2019-03-15 + Changes: + - Reversed the order of the changelog to improve human readability and respect the convention. +--------------------------------------------------------------------------------------------------- +Version: 0.2.174 +Date: 2019-03-14 + Bugfixes: + - Fixed that red and green wire weren't properly removed from ingredients of recipes in the presence of Bob's Electronics and potentially other electronics related mods. +--------------------------------------------------------------------------------------------------- +Version: 0.2.173 +Date: 2019-03-13 + Bugfixes: + - Fixed the changelog format to make the in-game parser happy. + - Typos in the changelog. +--------------------------------------------------------------------------------------------------- +Version: 0.2.172 +Date: 2019-03-12 + Features: + - Remove red and green wire from all recipes (none in vanilla, but sometimes happens in mods, e.g. LTN). +--------------------------------------------------------------------------------------------------- +Version: 0.2.171 +Date: 2019-03-12 + Features: + - Added changelog :) +--------------------------------------------------------------------------------------------------- +Version: 0.2.17 +Date: 2019-03-12 + Features: + - Shortcut and hotkey to pick up copper wire from the player inventory if available or otherwise give one (1) copper wire. +--------------------------------------------------------------------------------------------------- +Version: 0.1.171 +Date: 2019-03-12 + Changes: + - Hotkey to switch color of the currently held wire changed to Ctrl + Tab to avoid conflict with Steam overlay. +--------------------------------------------------------------------------------------------------- +Version: 0.1.17 +Date: 2019-03-12 + Features: + - Red and green wire no longer craftable. + - Red and green wire disappear from the player inventory if placed there by Q or manually. + - Shortcut and hotkey to give a stack of red or green wire. + - Hotkey to switch color of wire when holding a stack. + Locale: + - English, Russian, Ukrainian. diff --git a/WireShortcuts/control.lua b/WireShortcuts/control.lua new file mode 100644 index 00000000..4dce7401 --- /dev/null +++ b/WireShortcuts/control.lua @@ -0,0 +1,117 @@ +function handle_shortcut(event) + local event_name = event.prototype_name or event.input_name + if string.sub(event_name, 1, 13) ~= "WireShortcuts" then return end + + local player = game.players[event.player_index] + if not player.cursor_stack then return end + if event_name == "WireShortcuts-give-cutter" then + give_tool(player, "wire-cutter-universal") + else + local advanced_mode = + settings.get_player_settings(player)["wire-shortcuts-is-advanced-cutter"].value + local cutter_held = player.cursor_stack.valid_for_read and + string.sub(player.cursor_stack.name, 1, 11) == "wire-cutter" + local mode_name = string.sub(event_name, 20, #event_name) + + if advanced_mode and cutter_held then + give_tool(player, "wire-cutter-" .. mode_name) + elseif mode_name == "copper" then + give_copper(player) + else + give_tool(player, mode_name .. "-wire", 200) + end + end +end + +function give_tool(player, tool_name, count) + if player.drag_target then + player.clear_cursor() + end + if player.clear_cursor() then + player.cursor_stack.set_stack({name = tool_name, count = count or 1}) + end +end + +function give_copper(player) + local inv = player.get_main_inventory() + if inv and inv.valid then + if player.cursor_stack.valid_for_read then + if string.sub(player.cursor_stack.name, 1, 11) == "wire-cutter" then + player.clear_cursor() + elseif player.cursor_stack.name == "copper-cable" then + return + end + end + local wire = inv.find_item_stack("copper-cable") + if wire then + player.cursor_stack.swap_stack(wire) + else + give_tool(player, "copper-cable") + end + end +end + +function handle_switch_wire(player_index) + local player = game.players[player_index] + if player.cursor_stack.valid_for_read then + if player.cursor_stack.name == "red-wire" then + give_tool(player, "green-wire", 200) + elseif player.cursor_stack.name == "green-wire" then + give_tool(player, "red-wire", 200) + elseif player.cursor_stack.name == "wire-cutter-red" then + give_tool(player, "wire-cutter-green") + elseif player.cursor_stack.name == "wire-cutter-green" then + give_tool(player, "wire-cutter-red") + end + end +end + +-- Some mods have entities with hidden connections that break if disconnected, we catch them here +function has_hidden_connections(entity) + local blacklisted = { + "se-rocket-launch-pad", + "logistic-train-stop-lamp-control", + "logistic-train-stop-input" + } + for _, filter in ipairs(blacklisted) do + if string.sub(entity.name, 1, #filter) == filter then return true end + end + return false +end + +function handle_disconnect(event, alt) + if string.sub(event.item, 1, 11) == "wire-cutter" then + disconnect_mode = string.sub(event.item, 13, #event.item) + for _, entity in ipairs(event.entities) do + if entity.valid and not has_hidden_connections(entity) then + if not alt and disconnect_mode == "copper" or alt and disconnect_mode == "universal" then + entity.disconnect_neighbour() + elseif not alt and disconnect_mode == "red" or alt and disconnect_mode == "green" then + entity.disconnect_neighbour(defines.wire_type.red) + elseif not alt and disconnect_mode == "green" or alt and disconnect_mode == "red" then + entity.disconnect_neighbour(defines.wire_type.green) + elseif disconnect_mode == "universal" or alt and disconnect_mode == "copper" then + entity.disconnect_neighbour(defines.wire_type.red) + entity.disconnect_neighbour(defines.wire_type.green) + end + end + end + end +end + +script.on_event({ + defines.events.on_lua_shortcut, + "WireShortcuts-give-red", + "WireShortcuts-give-green", + "WireShortcuts-give-copper", + "WireShortcuts-give-cutter" +}, handle_shortcut) + +script.on_event("WireShortcuts-switch-wire", + function(event) handle_switch_wire(event.player_index) end) + +script.on_event(defines.events.on_player_selected_area, + function(event) handle_disconnect(event, false) end) + +script.on_event(defines.events.on_player_alt_selected_area, + function(event) handle_disconnect(event, true) end) diff --git a/WireShortcuts/data-final-fixes.lua b/WireShortcuts/data-final-fixes.lua new file mode 100644 index 00000000..85c40606 --- /dev/null +++ b/WireShortcuts/data-final-fixes.lua @@ -0,0 +1,72 @@ +local is_wire_surrogate = settings.startup["wire-shortcuts-is-retain-wire-crafting"].value + +if data.raw["recipe"]["red-wire"] and data.raw["recipe"]["green-wire"] then + data.raw["recipe"]["red-wire"].hidden = true + data.raw["recipe"]["red-wire"].enabled = false + data.raw["recipe"]["green-wire"].hidden = true + data.raw["recipe"]["green-wire"].enabled = false +end + +if data.raw["item"]["red-wire"] and data.raw["item"]["green-wire"] then + data.raw["item"]["red-wire"].flags = {"only-in-cursor"} + data.raw["item"]["green-wire"].flags = {"only-in-cursor"} +end + +if data.raw["technology"]["circuit-network"] then + local tech_effects = data.raw["technology"]["circuit-network"].effects + for i = (#tech_effects), 1, -1 do + if tech_effects[i].type == "unlock-recipe" then + if tech_effects[i].recipe == "red-wire" or tech_effects[i].recipe == "green-wire" then + if is_wire_surrogate then + tech_effects[i].recipe = "fake-" .. tech_effects[i].recipe + else + table.remove(tech_effects, i) + end + end + end + end +end + +function remove_or_replace_wire(ingredients) + for i = (#ingredients), 1, -1 do + if ingredients[i] then + if ingredients[i][1] == "green-wire" or + ingredients[i][1] == "red-wire" then + if is_wire_surrogate then + ingredients[i][1] = "fake-" .. ingredients[i][1] + else + table.remove(ingredients, i) + end + elseif ingredients[i].name and (ingredients[i].name == "green-wire" or ingredients[i].name == "red-wire") then + if is_wire_surrogate then + ingredients[i].name = "fake-" .. ingredients[i].name + else + table.remove(ingredients, i) + end + end + end + end +end + +for _, recipe in pairs(data.raw["recipe"]) do + if recipe.ingredients then + remove_or_replace_wire(recipe.ingredients) + end + if recipe.expensive and recipe.expensive.ingredients then + remove_or_replace_wire(recipe.expensive.ingredients) + end + if recipe.normal and recipe.normal.ingredients then + remove_or_replace_wire(recipe.normal.ingredients) + end +end + +if is_wire_surrogate then + data.raw["item"]["fake-red-wire"].flags = {} + data.raw["item"]["fake-green-wire"].flags = {} + data.raw["recipe"]["fake-red-wire"].hidden = false + data.raw["recipe"]["fake-green-wire"].hidden = false + if data.raw["recipe"]["red-wire"] and data.raw["recipe"]["green-wire"] then + data.raw["recipe"]["fake-red-wire"].ingredients = data.raw["recipe"]["red-wire"].ingredients + data.raw["recipe"]["fake-green-wire"].ingredients = data.raw["recipe"]["green-wire"].ingredients + end +end \ No newline at end of file diff --git a/WireShortcuts/data.lua b/WireShortcuts/data.lua new file mode 100644 index 00000000..d813819f --- /dev/null +++ b/WireShortcuts/data.lua @@ -0,0 +1,4 @@ +require("prototypes.input") +require("prototypes.shortcut") +require("prototypes.wire-cutter") +require("prototypes.fake-wire") diff --git a/WireShortcuts/graphics/icons/copper-wire-x24.png b/WireShortcuts/graphics/icons/copper-wire-x24.png new file mode 100644 index 00000000..2cce6cc6 Binary files /dev/null and b/WireShortcuts/graphics/icons/copper-wire-x24.png differ diff --git a/WireShortcuts/graphics/icons/copper-wire-x32.png b/WireShortcuts/graphics/icons/copper-wire-x32.png new file mode 100644 index 00000000..fcac14b6 Binary files /dev/null and b/WireShortcuts/graphics/icons/copper-wire-x32.png differ diff --git a/WireShortcuts/graphics/icons/fake-green-wire.png b/WireShortcuts/graphics/icons/fake-green-wire.png new file mode 100644 index 00000000..70003832 Binary files /dev/null and b/WireShortcuts/graphics/icons/fake-green-wire.png differ diff --git a/WireShortcuts/graphics/icons/fake-red-wire.png b/WireShortcuts/graphics/icons/fake-red-wire.png new file mode 100644 index 00000000..d3434968 Binary files /dev/null and b/WireShortcuts/graphics/icons/fake-red-wire.png differ diff --git a/WireShortcuts/graphics/icons/green-wire-x24.png b/WireShortcuts/graphics/icons/green-wire-x24.png new file mode 100644 index 00000000..4783e009 Binary files /dev/null and b/WireShortcuts/graphics/icons/green-wire-x24.png differ diff --git a/WireShortcuts/graphics/icons/green-wire-x32.png b/WireShortcuts/graphics/icons/green-wire-x32.png new file mode 100644 index 00000000..51524574 Binary files /dev/null and b/WireShortcuts/graphics/icons/green-wire-x32.png differ diff --git a/WireShortcuts/graphics/icons/red-wire-x24.png b/WireShortcuts/graphics/icons/red-wire-x24.png new file mode 100644 index 00000000..2e1b7d38 Binary files /dev/null and b/WireShortcuts/graphics/icons/red-wire-x24.png differ diff --git a/WireShortcuts/graphics/icons/red-wire-x32.png b/WireShortcuts/graphics/icons/red-wire-x32.png new file mode 100644 index 00000000..66679339 Binary files /dev/null and b/WireShortcuts/graphics/icons/red-wire-x32.png differ diff --git a/WireShortcuts/graphics/icons/white-wire-x24.png b/WireShortcuts/graphics/icons/white-wire-x24.png new file mode 100644 index 00000000..b41a2820 Binary files /dev/null and b/WireShortcuts/graphics/icons/white-wire-x24.png differ diff --git a/WireShortcuts/graphics/icons/white-wire-x32.png b/WireShortcuts/graphics/icons/white-wire-x32.png new file mode 100644 index 00000000..c45d4665 Binary files /dev/null and b/WireShortcuts/graphics/icons/white-wire-x32.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-copper.png b/WireShortcuts/graphics/icons/wire-cutter-copper.png new file mode 100644 index 00000000..c24d7a08 Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-copper.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-green.png b/WireShortcuts/graphics/icons/wire-cutter-green.png new file mode 100644 index 00000000..03435981 Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-green.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-red.png b/WireShortcuts/graphics/icons/wire-cutter-red.png new file mode 100644 index 00000000..6675e3d4 Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-red.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-universal.png b/WireShortcuts/graphics/icons/wire-cutter-universal.png new file mode 100644 index 00000000..04ff843b Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-universal.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-white-x24.png b/WireShortcuts/graphics/icons/wire-cutter-white-x24.png new file mode 100644 index 00000000..642580c3 Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-white-x24.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-white-x32.png b/WireShortcuts/graphics/icons/wire-cutter-white-x32.png new file mode 100644 index 00000000..407f777a Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-white-x32.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-x24.png b/WireShortcuts/graphics/icons/wire-cutter-x24.png new file mode 100644 index 00000000..c7b1552a Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-x24.png differ diff --git a/WireShortcuts/graphics/icons/wire-cutter-x32.png b/WireShortcuts/graphics/icons/wire-cutter-x32.png new file mode 100644 index 00000000..b7021a82 Binary files /dev/null and b/WireShortcuts/graphics/icons/wire-cutter-x32.png differ diff --git a/WireShortcuts/info.json b/WireShortcuts/info.json new file mode 100644 index 00000000..abdf0ffd --- /dev/null +++ b/WireShortcuts/info.json @@ -0,0 +1,9 @@ +{ + "name": "WireShortcuts", + "version": "1.1.13", + "factorio_version": "1.1", + "title": "Wire Shortcuts", + "author": "daydev", + "description": "Removes red and green wires as craftable items and makes them available as shortcuts, similar to blueprints and planners. Let them clutter your inventory no more! Includes a wire cutter tool to quickly remove wires.", + "dependencies": [] +} \ No newline at end of file diff --git a/WireShortcuts/locale/de/wire-shortcuts.cfg b/WireShortcuts/locale/de/wire-shortcuts.cfg new file mode 100644 index 00000000..c0d9bb45 --- /dev/null +++ b/WireShortcuts/locale/de/wire-shortcuts.cfg @@ -0,0 +1,27 @@ +ο»Ώ[shortcut] +WireShortcuts-give-red=Rotes Signalkabel +WireShortcuts-give-green=GrΓΌnes Signalkabel +WireShortcuts-give-copper=Kupferkabel + +[controls] +WireShortcuts-give-red=Erzeuge rotes Signalkabel +WireShortcuts-give-green=Erzeuge grΓΌnes Signalkabel +WireShortcuts-give-copper=Erzeuge Kupferkabel +WireShortcuts-switch-wire=Kabelfarbe wechseln + +[message] +cannot-clean-cursor=Konnte Mauszeiger nicht leeren. + +[item-name] +fake-red-wire=Rotes Ersatzsignalkabel +fake-green-wire=GrΓΌnes Ersatzsignalkabel + +[item-description] +fake-red-wire=KΓΌnstlicher, kabel-Γ€hnlicher Ersatz, nicht zertifiziert fΓΌr den Gebrauch im Schaltungsnetz. +fake-green-wire=KΓΌnstlicher, kabel-Γ€hnlicher Ersatz, nicht zertifiziert fΓΌr den Gebrauch im Schaltungsnetz. + +[mod-setting-name] +wire-shortcuts-is-retain-wire-crafting=Kabel in Rezepten beibehalten (NICHT EMPFOHLEN) + +[mod-setting-description] +wire-shortcuts-is-retain-wire-crafting=Wenn aktiviert, werden farbige Kabel in selten vorkommenden Rezepten nicht entfernt, sondern mit identischen ErsΓ€tzen ausgetauscht. Nicht empfohlen, kann mΓΆglicherweise Probleme verursachen, aber wenn es sein muss. \ No newline at end of file diff --git a/WireShortcuts/locale/en/wire-shortcuts.cfg b/WireShortcuts/locale/en/wire-shortcuts.cfg new file mode 100644 index 00000000..a1434658 --- /dev/null +++ b/WireShortcuts/locale/en/wire-shortcuts.cfg @@ -0,0 +1,31 @@ +[shortcut] +WireShortcuts-give-red=Red wire +WireShortcuts-give-green=Green wire +WireShortcuts-give-copper=Copper wire +WireShortcuts-give-cutter=Wire cutter + +[controls] +WireShortcuts-give-red=Give red wire +WireShortcuts-give-green=Give green wire +WireShortcuts-give-copper=Give copper wire +WireShortcuts-switch-wire=Switch wire color +WireShortcuts-give-cutter=Wire cutter tool + +[message] +cannot-clean-cursor=Cannot clear cursor. + +[item-name] +fake-red-wire=Surrogate red wire +fake-green-wire=Surrogate green wire + +[item-description] +fake-red-wire=Artificial wire-like substitute, not certified for use in the circuit network. +fake-green-wire=Artificial wire-like substitute, not certified for use in the circuit network. + +[mod-setting-name] +wire-shortcuts-is-retain-wire-crafting=Keep wires in recipes (NOT RECOMMENDED) +wire-shortcuts-is-advanced-cutter=Multi-mode wire cutter + +[mod-setting-description] +wire-shortcuts-is-retain-wire-crafting=If enabled, colored wires in the rare modded recipes are not removed but replaced by identical surrogates. Not recommended, can potentially cause trouble, but if you must. +wire-shortcuts-is-advanced-cutter=Enables mode switching for the wire cutter tool as detailed in the mod description. \ No newline at end of file diff --git a/WireShortcuts/locale/ru/wire-shortcuts.cfg b/WireShortcuts/locale/ru/wire-shortcuts.cfg new file mode 100644 index 00000000..5bde5c22 --- /dev/null +++ b/WireShortcuts/locale/ru/wire-shortcuts.cfg @@ -0,0 +1,31 @@ +[shortcut] +WireShortcuts-give-red=ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-give-green=Π—Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-give-copper=ΠœΠ΅Π΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-give-cutter=ΠšΡƒΡΠ°Ρ‡ΠΊΠΈ + +[controls] +WireShortcuts-give-red=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ красный ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-give-green=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-give-copper=Π’Π·ΡΡ‚ΡŒ ΠΌΠ΅Π΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ +WireShortcuts-switch-wire=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° +WireShortcuts-give-cutter=ΠšΡƒΡΠ°Ρ‡ΠΊΠΈ + +[message] +cannot-clean-cursor=НСвозмоТно ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ курсор. + +[item-name] +fake-red-wire=Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒ красного ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° +fake-green-wire=Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒ Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° + +[item-description] +fake-red-wire=Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. НСпригодСн для использования Π² логичСских сСтях. +fake-green-wire=Π˜ΡΠΊΡƒΡΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°. НСпригодСн для использования Π² логичСских сСтях. + +[mod-setting-name] +wire-shortcuts-is-retain-wire-crafting=ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… (НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•Π’Π‘Π―) +wire-shortcuts-is-advanced-cutter=ΠœΠ½ΠΎΠ³ΠΎΡ€Π΅ΠΆΠΈΠΌΠ½Ρ‹Π΅ кусачки + +[mod-setting-description] +wire-shortcuts-is-retain-wire-crafting=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Π² Ρ€Π΅Π΄ΠΊΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄Π°Ρ… ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° Π½Π΅ ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ, Π° Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ суррогаты. НС рСкомСндуСтся, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ Ссли ΠΎΡ‡Π΅Π½ΡŒ хочСтся. +wire-shortcuts-is-advanced-cutter=ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² инструмСнта-кусачСк, ΠΊΠ°ΠΊ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΎ Π² описании ΠΌΠΎΠ΄Π°. \ No newline at end of file diff --git a/WireShortcuts/locale/uk/wire-shortcuts.cfg b/WireShortcuts/locale/uk/wire-shortcuts.cfg new file mode 100644 index 00000000..c7fd0b03 --- /dev/null +++ b/WireShortcuts/locale/uk/wire-shortcuts.cfg @@ -0,0 +1,31 @@ +[shortcut] +WireShortcuts-give-red=Π§Π΅Ρ€Π²ΠΎΠ½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-give-green=Π—Π΅Π»Π΅Π½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-give-copper=ΠœΡ–Π΄Π½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-give-cutter=Гострогубці + +[controls] +WireShortcuts-give-red=Π‘Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ Ρ‡Π΅Ρ€Π²ΠΎΠ½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-give-green=Π‘Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ Π·Π΅Π»Π΅Π½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-give-copper=Взяти ΠΌΡ–Π΄Π½ΠΈΠΉ Π΄Ρ€Ρ–Ρ‚ +WireShortcuts-switch-wire=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ ΠΊΠΎΠ»Ρ–Ρ€ Π΄Ρ€ΠΎΡ‚Ρƒ +WireShortcuts-give-cutter=Гострогубці + +[message] +cannot-clean-cursor=НСмоТливо Π²ΠΈΠ²Ρ–Π»ΡŒΠ½ΠΈΡ‚ΠΈ курсор. + +[item-name] +fake-red-wire=Π—Π°ΠΌΡ–Π½Π½ΠΈΠΊ Ρ‡Π΅Ρ€Π²ΠΎΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΠΎΡ‚Ρƒ +fake-green-wire=Π—Π°ΠΌΡ–Π½Π½ΠΈΠΊ Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ Π΄Ρ€ΠΎΡ‚Ρƒ + +[item-description] +fake-red-wire=Π¨Ρ‚ΡƒΡ‡Π½ΠΈΠΉ Π·Π°ΠΌΡ–Π½Π½ΠΈΠΊ Π΄Ρ€ΠΎΡ‚Ρƒ. НСпридатний Π΄ΠΎ використання Π² Π»ΠΎΠ³Ρ–Ρ‡Π½ΠΈΡ… ΠΌΠ΅Ρ€Π΅ΠΆΠ°Ρ…. +fake-green-wire=Π¨Ρ‚ΡƒΡ‡Π½ΠΈΠΉ Π·Π°ΠΌΡ–Π½Π½ΠΈΠΊ Π΄Ρ€ΠΎΡ‚Ρƒ. НСпридатний Π΄ΠΎ використання Π² Π»ΠΎΠ³Ρ–Ρ‡Π½ΠΈΡ… ΠΌΠ΅Ρ€Π΅ΠΆΠ°Ρ…. + +[mod-setting-name] +wire-shortcuts-is-retain-wire-crafting=Π—Π°Π»ΠΈΡˆΠΈΡ‚ΠΈ Π΄Ρ€Ρ–Ρ‚ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… (НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π„Π’Π¬Π‘Π―) +wire-shortcuts-is-advanced-cutter=Π‘Π°Π³Π°Ρ‚ΠΎΡ€Π΅ΠΆΠΈΠΌΠ½Ρ– гострогубці + +[mod-setting-description] +wire-shortcuts-is-retain-wire-crafting=Π―ΠΊΡ‰ΠΎ ΡƒΠ²Ρ–ΠΌΠΊΠ½ΡƒΡ‚ΠΎ, Π² рідкісних Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… Π² Ρ–Π½ΡˆΠΈΡ… ΠΌΠΎΠ΄Π°Ρ… Π΄Ρ€Ρ–Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΠ±ΠΈΡ€Π°Ρ”Ρ‚ΡŒΡΡ, Π° Π·Π°ΠΌΡ–Π½ΡŽΡ”Ρ‚ΡŒΡΡ Π½Π° Π°Π½Π°Π»ΠΎΠ³Ρ–Ρ‡Π½ΠΈΠΉ суррогат. НС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡ”Ρ‚ΡŒΡΡ, ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π°Π»Π΅ якщо Π΄ΡƒΠΆΠ΅ Ρ…ΠΎΡ‡Π΅Ρ‚ΡŒΡΡ. +wire-shortcuts-is-advanced-cutter=Дозволяє ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ Ρ€Π΅ΠΆΠΈΠΌΡ–Π² інструмСнта-гострогубців як Π²ΠΈΠΊΠ»Π°Π΄Π΅Π½ΠΎ Π² описі ΠΌΠΎΠ΄Ρƒ. diff --git a/WireShortcuts/migrations/remove_wire.lua b/WireShortcuts/migrations/remove_wire.lua new file mode 100644 index 00000000..a8090151 --- /dev/null +++ b/WireShortcuts/migrations/remove_wire.lua @@ -0,0 +1,11 @@ +local players = game.players +for i = 1, (#players) do + if players[i] and players[i].valid then + local inv = players[i].get_main_inventory() + if inv and inv.valid then + inv.remove("red-wire") + inv.remove("green-wire") + end + end +end + diff --git a/WireShortcuts/migrations/wire_surrogates.json b/WireShortcuts/migrations/wire_surrogates.json new file mode 100644 index 00000000..56521090 --- /dev/null +++ b/WireShortcuts/migrations/wire_surrogates.json @@ -0,0 +1,22 @@ +{ + "item": [ + [ + "red-wire", + "fake-red-wire" + ], + [ + "green-wire", + "fake-green-wire" + ] + ], + "recipe": [ + [ + "red-wire", + "fake-red-wire" + ], + [ + "green-wire", + "fake-green-wire" + ] + ] +} \ No newline at end of file diff --git a/WireShortcuts/prototypes/fake-wire.lua b/WireShortcuts/prototypes/fake-wire.lua new file mode 100644 index 00000000..6b53cf04 --- /dev/null +++ b/WireShortcuts/prototypes/fake-wire.lua @@ -0,0 +1,46 @@ +if settings.startup["wire-shortcuts-is-retain-wire-crafting"].value then + data:extend({ + { + type = "item", + name = "fake-red-wire", + icon = "__WireShortcuts__/graphics/icons/fake-red-wire.png", + icon_size = 64, + icon_mipmaps = 4, + subgroup = "circuit-network", + order = "b[wires]-a[red-wire]", + stack_size = 200, + flags = {"hidden"} + }, + { + type = "item", + name = "fake-green-wire", + icon = "__WireShortcuts__/graphics/icons/fake-green-wire.png", + icon_size = 64, + icon_mipmaps = 4, + subgroup = "circuit-network", + order = "b[wires]-b[green-wire]", + stack_size = 200, + flags = {"hidden"} + } + + }) + + data:extend({ + { + type = "recipe", + name = "fake-red-wire", + enabled = false, + hidden = true, + ingredients = {{"electronic-circuit", 1}, {"copper-cable", 1}}, + result = "fake-red-wire" + }, + { + type = "recipe", + name = "fake-green-wire", + enabled = false, + hidden = true, + ingredients = {{"electronic-circuit", 1}, {"copper-cable", 1}}, + result = "fake-green-wire" + } + }) +end diff --git a/WireShortcuts/prototypes/input.lua b/WireShortcuts/prototypes/input.lua new file mode 100644 index 00000000..c40f9f2f --- /dev/null +++ b/WireShortcuts/prototypes/input.lua @@ -0,0 +1,22 @@ +function wire_hotkey(wire_type, keybind) + return { + type = "custom-input", + name = "WireShortcuts-give-" .. wire_type, + key_sequence = keybind, + action = "lua", + consuming = "none" + } +end + +data:extend({ + wire_hotkey("red", "ALT + F"), + wire_hotkey("green", "ALT + G"), + wire_hotkey("copper", "ALT + C"), + wire_hotkey("cutter", "ALT + X"), + { + type = "custom-input", + name = "WireShortcuts-switch-wire", + key_sequence = "CONTROL + TAB", + consuming = "none" + } +}) diff --git a/WireShortcuts/prototypes/shortcut.lua b/WireShortcuts/prototypes/shortcut.lua new file mode 100644 index 00000000..e2246155 --- /dev/null +++ b/WireShortcuts/prototypes/shortcut.lua @@ -0,0 +1,91 @@ +local circuit_tech_unlock +if data.raw["technology"]["circuit-network"] then + circuit_tech_unlock = "circuit-network" +end +local copper_tech_unlock +if data.raw["technology"]["electronics"] then + copper_tech_unlock = "electronics" +end + +function wire_shortcut(wire_type, tech_unlock) + return { + type = "shortcut", + name = "WireShortcuts-give-" .. wire_type, + order = "w[wire]-r[" .. wire_type .. "-wire]", + action = "lua", + associated_control_input = "WireShortcuts-give-" .. wire_type, + localised_name = {"shortcut.WireShortcuts-give-" .. wire_type}, + technology_to_unlock = tech_unlock or circuit_tech_unlock, + icon = { + filename = "__WireShortcuts__/graphics/icons/" .. wire_type .. "-wire-x32.png", + priority = "extra-high-no-scale", + size = 32, + scale = 1, + flags = {"icon"} + }, + disabled_icon = { + filename = "__WireShortcuts__/graphics/icons/white-wire-x32.png", + priority = "extra-high-no-scale", + size = 32, + scale = 1, + flags = {"icon"} + }, + small_icon = { + filename = "__WireShortcuts__/graphics/icons/" .. wire_type .. "-wire-x24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"icon"} + }, + disabled_small_icon = { + filename = "__WireShortcuts__/graphics/icons/white-wire-x24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"icon"} + } + } +end + +data:extend({ + wire_shortcut("red"), + wire_shortcut("green"), + wire_shortcut("copper", copper_tech_unlock), + { + type = "shortcut", + name = "WireShortcuts-give-cutter", + order = "w[wire]-c[cutter]", + action = "lua", + associated_control_input = "WireShortcuts-give-cutter", + localised_name = {"shortcut.WireShortcuts-give-cutter"}, + technology_to_unlock = circuit_tech_unlock, + icon = { + filename = "__WireShortcuts__/graphics/icons/wire-cutter-x32.png", + priority = "extra-high-no-scale", + size = 32, + scale = 1, + flags = {"gui-icon"} + }, + disabled_icon = { + filename = "__WireShortcuts__/graphics/icons/wire-cutter-white-x32.png", + priority = "extra-high-no-scale", + size = 32, + scale = 1, + flags = {"gui-icon"} + }, + small_icon = { + filename = "__WireShortcuts__/graphics/icons/wire-cutter-x24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"gui-icon"} + }, + disabled_small_icon = { + filename = "__WireShortcuts__/graphics/icons/wire-cutter-white-x24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"gui-icon"} + } + } +}) diff --git a/WireShortcuts/prototypes/wire-cutter.lua b/WireShortcuts/prototypes/wire-cutter.lua new file mode 100644 index 00000000..9289dd0d --- /dev/null +++ b/WireShortcuts/prototypes/wire-cutter.lua @@ -0,0 +1,66 @@ +local electric_wireable = {"electric-pole", "power-switch"} +local circuit_wireable = { + "arithmetic-combinator", + "constant-combinator", + "decider-combinator", + "programmable-speaker", + "power-switch", + "electric-pole", + "accumulator", + "container", + "inserter", + "lamp", + "logistic-container", + "mining-drill", + "offshore-pump", + "pump", + "rail-chain-signal", + "rail-signal", + "roboport", + "storage-tank", + "train-stop", + "transport-belt", + "wall" +} + +local box_red = {255, 24, 24} +local box_green = {71, 255, 73} +local box_yellow = {239, 153, 34} +local box_blue = {57, 156, 251} + +function wire_cutter(opts) + return { + type = "selection-tool", + name = "wire-cutter-" .. opts.cutter_type, + icon = "__WireShortcuts__/graphics/icons/wire-cutter-" .. opts.cutter_type .. ".png", + icon_size = 64, + flags = {"only-in-cursor", "hidden", "spawnable", "not-stackable"}, + stack_size = 1, + stackable = false, + selection_color = opts.primary_color, + selection_mode = {"buildable-type", "same-force"}, + alt_selection_color = opts.alt_color, + alt_selection_mode = {"buildable-type", "same-force"}, + selection_cursor_box_type = "not-allowed", -- 'not allowed' just means 'red box' + alt_selection_cursor_box_type = "not-allowed", + entity_type_filters = opts.primary_filter or circuit_wireable, + alt_entity_type_filters = opts.alt_filter or circuit_wireable + } +end + +data:extend({ + wire_cutter { + cutter_type = "universal", + primary_color = box_blue, + alt_color = box_yellow, + alt_filter = electric_wireable + }, + wire_cutter { + cutter_type = "copper", + primary_color = box_yellow, + alt_color = box_blue, + primary_filter = electric_wireable + }, + wire_cutter {cutter_type = "red", primary_color = box_red, alt_color = box_green}, + wire_cutter {cutter_type = "green", primary_color = box_green, alt_color = box_red} +}) diff --git a/WireShortcuts/settings.lua b/WireShortcuts/settings.lua new file mode 100644 index 00000000..c9f90cda --- /dev/null +++ b/WireShortcuts/settings.lua @@ -0,0 +1,14 @@ +data:extend({ + { + type = "bool-setting", + name = "wire-shortcuts-is-retain-wire-crafting", + setting_type = "startup", + default_value = false + }, + { + type = "bool-setting", + name = "wire-shortcuts-is-advanced-cutter", + setting_type = "runtime-per-user", + default_value = false + } +}) \ No newline at end of file diff --git a/WireShortcuts/thumbnail.png b/WireShortcuts/thumbnail.png new file mode 100644 index 00000000..db60e4dd Binary files /dev/null and b/WireShortcuts/thumbnail.png differ diff --git a/YARM/LICENSE.md b/YARM/LICENSE.md new file mode 100644 index 00000000..b1a3656a --- /dev/null +++ b/YARM/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License + + +Copyright (c) 2015-2019 Octav "narc" Sandulescu + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/YARM/README.md b/YARM/README.md new file mode 100644 index 00000000..1a323850 --- /dev/null +++ b/YARM/README.md @@ -0,0 +1,162 @@ +This is a [Factorio](http://www.factorio.com/) mod. It lets you keep track of +your mining sites and warns you when they're starting to run low. + + +## How? ## + +Once the mod is installed, using it is relatively simple: + +* Use the shortcut button "Resource monitor marker" to drag-select at least one +ore entity in a patch (like using a blueprint). + * If everything went well, you should now see a blue overlay showing up on + top of the ore(s) you clicked, and growing as YARM finds their neighbours, + and their neighbours, until the entire ore patch has been scanned. + * After the scan, you have 2 seconds to select another ore of the same kind, + which will be added to the same site. + * If you tap the ground instead, you will cancel the site. + * If you tap a different kind of ore instead, you will instantly create + the site and start a new one on the other ore. + * Upon the expiry of those 2 seconds, the site will be created and a + message will be shown informing you of its name and the amount of ore found + in it. + * Sites can be renamed at any time! The default name is just a + suggestion. + +By default, YARM shows only sites that are about to expire, i.e. less than +X hours runtime remaining. (Estimated through a combination of current speed and +lifetime depletion.) In the mod settings this can be tuned. There are buttons +available to change the filter to either "no sites" (which never shows any sites +at all!) or "all sites" (which never hides them). + +Each site has some buttons associated with it: + +* The 'ab|' button allows you to rename the site. This can be useful to prevent +auto-naming from overwriting one of your sites with another. + * Note: Names may not be longer than 50 characters! +* The 'eye' button opens the map to the center of the ore, and zooms to world +if there is radar coverage. +* The 'X' button allows you to delete the site. When first clicked, it turns +red; click it again within 2 seconds to confirm deletion, or leave it alone to +cancel it. +* The '+' button allows you to expand an existing site. Click the '+' for the +site you want to expand, then use the marker tool to select the new ore site +you want to add to the existing monitor. Sites are not renamed by this process. + * NB: For ease of use, the '+' button also activates the resource + monitoring marker shortcut. + * Pressing the '+' while it's red (which indicates addition in progress) + will finish the adding process (and update the site, if it's changed). + * While expanding a site, a blue overlay (identical to the one used when + creating the site in the first place) will highlight the ores that comprise + the site currently. For performance reasons, the overlay appears gradually + rather than all at once. + +Sites are bound to forces (i.e., teams), so any sites you add will be visible +to your teammates. + +Endless resources (by default, oil, but mods exist for others) are supported; +the percentage full is therein calculated based on how much more than the +minimum amount is present in the ore entities. This is minimally informative, +and time to depletion is probably going to be quite wrong, but it's the best we +can do with what we have. + + +## Many thanks for ## + +* The major effort by drs9999 to create +[the original Resource Monitor](http://www.factorioforums.com/forum/viewtopic.php?f=86&t=2855). +* The similarly-major efforts of jorgenRe and @L0771 to create +[the 0.12 unofficial update](http://www.factorioforums.com/forum/viewtopic.php?f=120&t=13809). +* Excellent suggestions for new behaviour from @cpw, @KaneHart, and several +members of the #factorio IRC on espernet. +* Continuous Integration by CircleCI: +[![Circle CI](https://circleci.com/gh/narc0tiq/YARM.svg?style=svg)](https://circleci.com/gh/narc0tiq/YARM) +* Graphics by Meppi on the Factorio forums: +* Major performance enhancements by @Afforess +* Updating assistance by @Bisa +* External interface additions by @Choumiko and @afex +* The Russian translation by RikkiLook +* The Hebrew translation by JoCKeR-IL +* German translation by luma88 +* Configuration assistance by @Martok88 +* Italian translation by futuroattore86 +* Chinese translation by @71e6fd52 and @muink +* Japanese translation by @shelaf +* More updating assistance by @kylewill0725 +* Other-mod-friendly patches by @JonasJurczok +* Resource monitor shortcut graphics by @npc-strider (aka morley376) +* Sorting implementation by @okradonkey +* [The Factorio Discord](https://discord.gg/5N4pQPF), especially Factorio devs helping in #mod-making (especially @Bilka, @Klonan, @Rseding91) +* Smoothed ore-per-minute calculation by @wchristian + * With prettification from @AndrewSav +* Alphabetical site sorting by @mgkr +* Multiple changes and fixes by @perobertson +* [GVV](https://mods.factorio.com/mod/gvv) compatibility by @JasonLandbridge +* SpaceEx compatibility patch by @ExterminatorX99 +* Estimate calculations by @Kingdud (with apologies for taking over a year to test) + * But it will need a bit more fixing to prevent corrupting saves. If you have v0.8.206, please read [this comment](https://github.com/narc0tiq/YARM/issues/145#issuecomment-1087358098) +* SpaceEx explorer viewer patch by @oof2win2 +* Ore counts adjusted by mining productivity by @georgehank + * With fixes by @EvilPLa + + + +## Remote interface ## + +YARM's remote interface is grown as needed; there are only a few functions currently: + +- `remote.call("YARM", "reset_player", player_name_or_index)`: sets the target player's character to be whatever the player has selected (if it's of a compatible type, of course) and clears out internal data relative to the player. +- `remote.call("YARM", "reset_ui", player_name_or_index)`: destroys the target player's YARM UI, forcing it to be recreated (hopefully correctly) at the next UI update cycle (about every 5 seconds). +- `remote.call("YARM", "set_filter", player_name_or_index, new_filter)`: provides programmatic hooks to change the active filter. The filter value may be 'none', 'warnings', or 'all' -- other values are unsupported. The previously active filter is returned. +- `remote.call("YARM", "get_on_site_updated_event_id")`: returns the identifier for the `on_site_updated` event, detailed below. You should probably call this every time mods are initialized, as it is set in the main `control.lua` runtime. + +Additionally, there is one event: + +- `on_site_updated` is periodically raised whenever a site's ore count and stats are brought up to date. The event contains: + - `force_name`, the name of the force owning this site + - `site_name`, the name of the site that just finished updating; site names are unique within a force + - `amount`, the number of ore units remaining in the site + - `ore_per_minute`, the number of ore units mined in a minute on this site, based on the number mined since the last update + - `remaining_permille`, the ratio of ore remaining versus the initial amount from when the site was created + - permille is analogous to percent, but multiplied by 1000 instead of 100; its symbol is ‰ + - `ore_type`, the entity.name of the resource entities tracked in this site (e.g., `crude-oil` or `iron-ore`) + + +## License ## + +The source of **YARM** is Copyright 2015 Octav "narc" Sandulescu. It +is licensed under the [MIT license][mit], available in this package in the file +[LICENSE.md](LICENSE.md). + +Some of the graphics (the eye icon and the gear icon) are licensed +[CC-BY-SA Unported 3.0][CC-BY-SA-3], +and based on the creations of +[User:MGalloway (WMF)](https://commons.wikimedia.org/wiki/User:MGalloway_%28WMF%29). + + +[mit]: http://opensource.org/licenses/mit-license.html +[CC-BY-SA-3]: https://creativecommons.org/licenses/by-sa/3.0/deed.en + +## Statistics ## + +19 alternative name suggestions were offered for the "YA" part of the name "YARM", among them: + +- Yet Another Resource Monitor (narc) +- Your Awesome Resource Monitor (Keyboardhack) +- Young Adolescent Resource Monitor (Kane\_Hart) +- Yiddish-Approved Resource Monitor (narc) +- Yawning Angel, Resource Monitor (Tivec) +- Yeti Approves [of] Resource Monitor (Keyboardhack) +- Your Aunt's Resource Monitor (HanziQ & Tivec) [it's not your grandmother's resource monitor, that's for sure! -- ed.] +- Your Adorable Resource Monitor (Keyboardhack) +- Yassir Arafat Resource Monitor (HanziQ) +- Yawn, Another Resource Monitor (AnarConn) +- Yum Anal Resource Monitor (AnarConn) +- Yellow Arrow Resource Monitor (JoCKeR-iL) +- Y Another Resource Monitor? (AnarConn) +- Yad Avraham Resource Monitor (JoCKeR-iL) +- Yatssi Atssi Resource Monitor (JoCKeR-iL) +- Yahoo! Answers Resource Monitor (HanziQ) +- Yes! Amen! Resource Monitor! (Tivec) +- Yallah Ahmed Resource Monitor (Tivec) +- You Are (the) Resource Monitor (narc) +- YARRRResource Monitor (mk-fg) diff --git a/YARM/changelog.txt b/YARM/changelog.txt new file mode 100644 index 00000000..639ab9df --- /dev/null +++ b/YARM/changelog.txt @@ -0,0 +1,586 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.10.14 +Date: 2023-09-18 + Changes: + - make some divisions a bit more safe and clear (@mithaldu/@wchristian) + - prevent a crash when adding an entity that has become invalid (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.13 +Date: 2023-08-10 + Changes: + - Update German translation (@ST-DDT) + - fix crash with endless ores that have no entities left (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.12 +Date: 2023-08-09 + Changes: + - remove some more buttons in lite mode (@mithaldu/@wchristian) + - add lite mode tooltip (@mithaldu/@wchristian) + - recommend GUI_Unifyer (@mithaldu/@wchristian) + - document authorship situation in info.json (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.11 +Date: 2023-08-09 + Changes: + - lite mode toggle (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.10 +Date: 2023-08-09 + Changes: + - fix rendering of separators in surface split mode with many surfaces (@mithaldu/@wchristian) + - make the version migration at startup more safe (@mithaldu/@wchristian) + - Update German translation (@ST-DDT) +--------------------------------------------------------------------------------------------------- +Version: 0.10.8 +Date: 2023-08-07 + Changes: + - fix a migration crash (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.7 +Date: 2023-08-07 + Changes: + - narrower gui layout, thanks a lot to @ST-DDT for the ideas (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.6 +Date: 2023-08-07 + Changes: + - Update German translation (@ST-DDT) +--------------------------------------------------------------------------------------------------- +Version: 0.10.5 +Date: 2023-08-07 + Changes: + - tighter visual design (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.4 +Date: 2023-08-07 + Changes: + - added a ups settings to allow more accurate estimates on megabases (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.3 +Date: 2023-08-07 + Changes: + - new thumbnail (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.2 +Date: 2023-08-07 + Changes: + - remove superfluous divider line in surface split mode (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.1 +Date: 2023-08-06 + Changes: + - add a button to split sites by surface (@mithaldu/@wchristian) + - update background toggle button style when clicking (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.10.0 +Date: 2023-08-06 + Changes: + - integrate prodictivity adjustment into speed rendering (@mithaldu/@wchristian) + - rework display of infinite sources (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.13 +Date: 2023-07-04 + Changes: + - Added settings to show/hide sites summary (@MatrixDJ96 / Mattia Rombi) +--------------------------------------------------------------------------------------------------- +Version: 0.9.12 +Date: 2023-07-02 + Changes: + - fix display of hours when time left is > 1 day (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.11 +Date: 2023-06-30 + Changes: + - Update ru-CN translation (@RikkiLook) +--------------------------------------------------------------------------------------------------- +Version: 0.9.10 +Date: 2023-06-25 + Changes: + - fix site speed change arrow color if site is not changing + (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.9 +Date: 2023-06-08 + Changes: + - add a trend indicator for "time left" (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.8 +Date: 2023-06-07 + Changes: + - mark category groups for totals and individual sites (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.7 +Date: 2023-06-06 + Bugfixes: + - Update zh-CN translation (@luaotix) + - Remove some magic variables and make releasing/contributing easier (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.6 +Date: 2023-06-01 + Bugfixes: + - Fix a crash caused by multiple ore types generating the same product (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.5 +Date: 2023-05-31 + Bugfixes: + - Handle coloring correctly when threshold is set to 0 (@mithaldu/@wchristian) + - Add a setting to automatically increase the maximum of an ore site (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.4 +Date: 2023-05-31 + Bugfixes: + - Move grow limit setting to be a map setting (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.3 +Date: 2023-05-31 + Changes: + - Allow limiting the growing mode when creating a new site (@mithaldu/@wchristian) + Bugfixes: + - Allow hour warnings to be values with decimals (@mithaldu/@wchristian) + - Allow creating multiple sites at once (@mithaldu/@wchristian) + - Allow creating sites with a single click reliably (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.2 +Date: 2023-05-31 + Bugfixes: + - Fix crash bug and display of summary for endless resources like oil (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.1 +Date: 2023-05-31 + Changes: + - Add summary lines for each ore at the top (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.9.0 +Date: 2023-05-30 + Changes: + - Add smarter ETD calculations (@mithaldu/@wchristian) + - Add dark background toggle (@mithaldu/@wchristian) +--------------------------------------------------------------------------------------------------- +Version: 0.8.210 +Date: 2023-05-15 + Bugfixes: + - Fix productivity display (per instructions from @EvilPLa) +--------------------------------------------------------------------------------------------------- +Version: 0.8.209 +Date: 2023-05-09 + Bugfixes: + - Force ore-per-minute to converge quickly when diffs are small (@wchristian and @AndrewSaw, #149) +--------------------------------------------------------------------------------------------------- +Version: 0.8.208 +Date: 2023-05-08 + Bugfixes: + - Fix ore-per-minute calculation error (@wchristian, #148) + Changes: + - Add compatibility with SE explorer for site remote viewing (@oof2win2, #147) + - Add productivity-adjusted ore amounts for site display (@georgehank, #136) +--------------------------------------------------------------------------------------------------- +Version: 0.8.207 +Date: 2021-04-04 + Bugfixes: + - Revert back to previous ore calculations to prevent further save file corruption -- see #145 for details +--------------------------------------------------------------------------------------------------- +Version: 0.8.206 +Date: 2021-04-04 + Changes: + - New method of calculating ore-per-minute (@Kingdud, #131) +--------------------------------------------------------------------------------------------------- +Version: 0.8.205 +Date: 2021-03-21 + Bugfixes: + - Fix crash from surface being deleted (@ExterminatorX99, #144) +--------------------------------------------------------------------------------------------------- +Version: 0.8.204 +Date: 2021-02-28 + Changes: + - Add GVV compatibility (@JasonLandbridge, #141) +--------------------------------------------------------------------------------------------------- +Version: 0.8.203 +Date: 2021-01-05 + Bugfixes: + - Reference clear_cursor instead of clean_cursor (Factorio rename) (@perobertson, #130) +--------------------------------------------------------------------------------------------------- +Version: 0.8.202 +Date: 2020-12-29 + Features: + - Optionally add surface name to generated site names (@perobertson, #128) +--------------------------------------------------------------------------------------------------- +Version: 0.8.201 +Date: 2020-09-26 + Changes: + - Now compatible with Factorio 1.1 (@skaupper, #126) +--------------------------------------------------------------------------------------------------- +Version: 0.8.102 +Date: 2020-08-14 + Features: + - Add sorting sites alphabetically (@mgkr, #125) +--------------------------------------------------------------------------------------------------- +Version: 0.8.18 +Date: 2019-06-19 + Bugfixes: + - Avoid a server crash on first multiplayer player join (tick 0 on_tick before on_init) + - Reset ore statistics on site expansion +--------------------------------------------------------------------------------------------------- +Version: 0.8.17 +Date: 2019-05-15 + Changes: + - Numeric columns in YARM now right-aligned. Everything looks 1000% better! (Thanks, @Choumiko) + - Ore type column now features ore icons (using rich text) for the ore's mining results + Bugfixes: + - Load after AAI programmable vehicles, to avoid a weird cross-compatibility issue with it and Liquid Science +--------------------------------------------------------------------------------------------------- +Version: 0.8.16 +Date: 2019-05-13 + Locale: + - Updated Japanese translation (@shela, #112) + Changes: + - Smoothed ore-per-minute and ETD calculations (@wchristian, #113) +--------------------------------------------------------------------------------------------------- +Version: 0.8.15 +Date: 2019-05-09 + Bugfixes: + - Fix startup crash with Omnimatter +--------------------------------------------------------------------------------------------------- +Version: 0.8.14 +Date: 2019-05-06 + Features: + - Create fake ore items to allow the YARM selector to show a preview of the ore entity count while dragging (thanks, @Klonan!). + Bugfixes: + - Probably fixed a desync caused by the delayed (N-per-tick) iteration of entities (see #110 for details). +--------------------------------------------------------------------------------------------------- +Version: 0.8.13 +Date: 2019-05-06 + Bugfixes: + - Prevent crashing from trying to set the active filter before the YARM GUI is created. + Features: + - Add a remote call `get_active_filter(player_name_or_index)` that returns the given player's active filter without changing it (avoiding the need to call `set_filter` twice). +--------------------------------------------------------------------------------------------------- +Version: 0.8.12 +Date: 2019-05-02 + Bugfixes: + - Gracefully handle the inability to place a chart tag (e.g., when the area it belongs to is uncharted). +--------------------------------------------------------------------------------------------------- +Version: 0.8.11 +Date: 2019-05-02 + Bugfixes: + - Compatibility fix for Factorio 0.17.35. Requires Factorio >= 0.17.35! +--------------------------------------------------------------------------------------------------- +Version: 0.8.10 +Date: 2019-05-02 + Bugfixes: + - Restore missing chart tag ore icons. + Changes: + - Infinite resources now display number of entities rather than a useless ore count. +--------------------------------------------------------------------------------------------------- +Version: 0.8.9 +Date: 2019-04-22 + Bugfixes: + - Gracefully remove sites referencing ores that disappeared (for whatever reason). Warn the player this happened. +--------------------------------------------------------------------------------------------------- +Version: 0.8.8 +Date: 2019-04-20 + Bugfixes: + - Actually finish transitioning site expansion to the new ore_tracker introduced in v0.8.6 (fixes #107). +--------------------------------------------------------------------------------------------------- +Version: 0.8.7 +Date: 2019-04-18 + Changes: + - The previous release was experimental -- please read the change log for 0.8.6, too! + Features: + - It is now possible (thanks to @okradonkey) for a player to change the sort order of sites: + - sort by percent remaining (as before), + - sort by ore type, + - sort by absolute ore count, and + - sort by estimated time remaining. +--------------------------------------------------------------------------------------------------- +Version: 0.8.6 +Date: 2019-04-11 + Changes: + - Separate ore tracking functions to another module. This should be an invisible change, except for adding the ability to globally limit the number of entities queried in a single tick. + - Save/load times may also be affected by the above, as we are now keeping references to actual entities instead of keeping just their coordinates; on the bright side, UPS should be higher, especially for large sites. +--------------------------------------------------------------------------------------------------- +Version: 0.8.5 +Date: 2019-04-10 + Changes: + - Set the YARM selector tool to be hidden from filters. There is never a need to put the selector in your quickbar or in an inventory, as it is not configurable. + - Removed pcall()s -- if an error occurs, crash the game just like any other mod. Pcalls are notoriously slow, so this should give us back a little performance. + Features: + - Added a setting to allow turning off the map markers introduced in 0.8.4. + Locale: + - Removed unused locale keys from the base (English) locale. +--------------------------------------------------------------------------------------------------- +Version: 0.8.4 +Date: 2019-04-01 + Locale: + - Update Japanese locale (@shelaf) + Bugfixes: + - Fixed endless resource yield calculation to match Factorio's tooltips (approximately) + Changes: + - Remove "Endless resource base production" setting -- now we're showing the actual yield that Factorio itself does, there's no more fixups to do. + Features: + - Automatically create map markers when sites are created. + - Map markers include the current amount of resources in the site OR its yield total (for endless resources). + - Map markers are automatically recreated if edited/destroyed. + - Map markers are deleted when the site is. +--------------------------------------------------------------------------------------------------- +Version: 0.8.3 +Date: 2019-03-25 + Locale: + - Update Russian locale (@RikkiLook) + - Add missing locale key "controls.get-yarm-selector" + Changes: + - Default keybind now Alt+Y, to avoid conflicting with the Toggle Personal Roboport keybind. + - Remote view now opens the map, rather than zooming to world. This seems more useful in finding where a particular site is (whereas the live view is somewhat less useful). + - Use (with permission!) the shortcut graphics made by **morley376** (aka @npc-strider) for the Shortcuts mod. + +--------------------------------------------------------------------------------------------------- +Version: 0.8.2 +Date: 2019-03-23 + Bugfixes: + - Prevent an error when Esc-closing a GUI with event.element being unavailable (e.g., the FNEI GUI). + +--------------------------------------------------------------------------------------------------- +Version: 0.8.1 +Date: 2019-03-23 + Features: + - Add a change log (you're looking at it!) + - Remove the resource monitor technology, recipe, and item + - Add a shortcut button with a blueprint-like selection tool -- this replaces the resource monitor item + - Add a shortcut key for the selection tool (default Alt+R) + - Remove remote viewer entities. If you're currently remote viewing, you should be returned to your real character during the migration + - Viewing a site now opens the map to the site's center (zoomed to world if radar available) + - Renaming can now be cancelled with Esc key + - Add a reset_ui remote call; it requires a player name or index, and will force recreating that player's UI by destroying their YARM UI root + - Instead of an on/off expando toggling between "warnings only" and "all sites", there are now actual filters for 'no sites', 'sites with warnings', and 'all sites" + - Add a set_filter remote call; it requires a player name or index and one of ('none', 'warnings', or 'all') and sets the current filter accordingly. It returns the old value of the filter (from before the call) + Changes: + - Site creation/expansion timer and delete confirmation timeout reduced to 2 seconds (from 10 seconds, aka way too long!). Note that delete confirmation is still limited by UI update rate, which is usually every 5 seconds. + - Renaming sites is now always available (not hidden behind remote viewing) + - Most of the UI buttons now have tooltips + - The remote calls hide_expando and show_expando do nothing now (they log to factorio-current.log); you should use set_filter instead + Bugfixes: + - Set button sizes to 16x16 (hopefully fixes appearance at 100% scale) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.402 +Date: 2019-03-04 + Changes: + - YARM's GUI now lives in a mod_gui instead of player.gui.left (@JonasJurczok) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.401 +Date: 2019-03-01 + Changes: + - Update to Factorio 0.17 (@kylewill0725) + - Much cheaper resource monitoring research -- now only 10 red science + +--------------------------------------------------------------------------------------------------- +Version: 0.7.309 +Date: 2018-11-01 + Locale: + - Update Chinese locale (@muink) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.308 +Date: 2018-10-18 + Locale: + - Update Japanese locale (@shelaf) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.307 +Date: 2018-09-24 + Bugfixes: + - Prevent site names from getting too long (@Sergeant-Steve) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.306 +Date: 2018-05-14 + Locale: + - Update Chinese locale (@muink) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.305 +Date: 2018-05-08 + Features: + - Add a custom event when a site is updated (remote.call("YARM", "get_on_site_updated_event_id") to get the event ID) (@afex) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.304 +Date: 2018-04-21 + Locale: + - Update Chinese locale (@muink) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.303 +Date: 2018-01-25 + Locale: + - Add Italian locale (@futuroattore86) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.302 +Date: 2017-12-15 + Locale: + - Update Russian locale (@RikkiLook) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.301 +Date: 2017-12-14 + Changes: + - Update to Factorio 0.16 + +--------------------------------------------------------------------------------------------------- +Version: 0.7.206 +Date: 2017-10-23 + Features: + - Configurability! YARM settings are now available as mod settings (@Martok88) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.205 +Date: 2017-10-17 + Features: + - Configurable warning percentage (default 10%) (@Martok88) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.204 +Date: 2017-08-08 + Changes: + - Stop player from remote viewing while in a vehicle (prevents you from getting kicked out of the vehicle) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.203 +Date: 2017-06-15 + Locale: + - Add Chinese translation (@745275633) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.202 +Date: 2017-06-07 + Changes: + - Mod name now "YARM - Resource Monitor" + +--------------------------------------------------------------------------------------------------- +Version: 0.7.201 +Date: 2017-05-01 + Changes: + - Update to Factorio 0.15 + - Remote viewers now have destructible=false instead of health=0 + +--------------------------------------------------------------------------------------------------- +Version: 0.7.108 +Date: 2016-12-05 + Features: + - Add the ability to expand an existing site (without recreating it) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.107 +Date: 2016-09-20 + Changes: + - Major performance improvement (@squizzling) + - Add some basic documentation to the README + +--------------------------------------------------------------------------------------------------- +Version: 0.7.106 +Date: 2016-08-29 + Changes: + - Update to Factorio 0.14 + +--------------------------------------------------------------------------------------------------- +Version: 0.7.105 +Date: 2016-08-15 + Bugfixes: + - Don't try to destroy invalid old remote viewers + +--------------------------------------------------------------------------------------------------- +Version: 0.7.104 +Date: 2016-08-08 + Features: + - Support custom resource categories + - Blacklist Homeworld's sand resource (too common) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.103 +Date: 2016-08-07 + Bugfixes: + - Make remote viewers properly invulnerable (@Nexela) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.102 +Date: 2016-07-15 + Locale: + - Add German translation (@luma88) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.101 +Date: 2016-07-01 + Changes: + - Update to Factorio 0.13 (@Bisa) + - New icons (made by @Meppi) - ref: https://forums.factorio.com/viewtopic.php?p=146209#p146209 + Locale: + - Hebrew locale fixes (@jocker-il) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.17 +Date: 2016-06-10 + Locale: + - Add Hebrew translation (@jocker-il) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.16 +Date: 2016-02-26 + Bugfixes: + - Create force_data if not available + +--------------------------------------------------------------------------------------------------- +Version: 0.7.15 +Date: 2016-02-14 + Changes: + - Reduce YARM save data (@Afforess) + - Improve performance (@Afforess) + - Allow configuring endless resource base value (@zorbathut) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.12 +Date: 2015-11-06 + Features: + - Add a remote API to toggle the YARM list (@Choumiko) + Locale: + - Add Russian translation by @RikkiLook + +--------------------------------------------------------------------------------------------------- +Version: 0.7.7 +Date: 2015-10-21 + Changes: + - Require Factorio 0.12.12 (API changes) + +--------------------------------------------------------------------------------------------------- +Version: 0.7.6 +Date: 2015-10-19 + Changes: + - Require Factorio 0.12.11 (after a major API overhaul) + Bugfixes: + - Find ore entities more reliably (scan full tile, not just tile center) + - Reduce GUI update rate (mitigates missed UI clicks, not fully fixed) + +--------------------------------------------------------------------------------------------------- +Version: 0.6.23 +Date: 2015-10-04 + Changes: + - Require Factorio 0.12.9 (avoids https://forums.factorio.com/16578) + Bugfixes: + - Don't leave behind remote viewer entities + - Don't generate weird colors (negative numbers are bad) + +--------------------------------------------------------------------------------------------------- +Version: 0.6.20 +Date: 2015-10-01 + Bugfixes: + - Detect infinite ores correctly, don't just assume they're infinite if minimum_resource_amount is set (Bob's ores have it set) + +--------------------------------------------------------------------------------------------------- +Version: 0.6.19 +Date: 2015-09-30 + Features: + - Initial release! All the things are new. + - You can add ore sites + - You can remove ore sites + - Sites are shared with your force + - Sites tell you how much ore is left, how fast it's being mined, and how long until it runs out (at current rate) diff --git a/YARM/control.lua b/YARM/control.lua new file mode 100644 index 00000000..d8b21bba --- /dev/null +++ b/YARM/control.lua @@ -0,0 +1,26 @@ +require "resmon" +require "remote" + + +-- if this ever happens, I'll be enormously surprised +if not resmon then error("YARM has become badly corrupted: the variable resmon should've been set!") end + +-- Enable Lua API global Variable Viewer +-- https://mods.factorio.com/mod/gvv +if script.active_mods["gvv"] then + require("__gvv__.gvv")() +end + +script.on_init(resmon.init_globals) +script.on_configuration_changed(resmon.init_globals) + +script.on_load(resmon.on_load) + +script.on_event(defines.events.on_player_created, resmon.on_player_created) +script.on_event(defines.events.on_tick, resmon.on_tick) +script.on_event(defines.events.on_gui_click, resmon.on_gui_click) +script.on_event(defines.events.on_gui_closed, resmon.on_gui_closed) +script.on_event("get-yarm-selector", resmon.on_get_selection_tool) +script.on_event(defines.events.on_player_selected_area, resmon.on_player_selected_area) + +on_site_updated = script.generate_event_name() diff --git a/YARM/data-final-fixes.lua b/YARM/data-final-fixes.lua new file mode 100644 index 00000000..f48880dd --- /dev/null +++ b/YARM/data-final-fixes.lua @@ -0,0 +1,18 @@ +local ore_items = {} + +for name, proto in pairs(data.raw.resource) do + ore_items[#ore_items + 1] = { + type = 'item', + stack_size = 1, + flags = { 'hidden' }, + + name = 'YARM-fake-' .. proto.name, + icon = proto.icon or nil, + icons = proto.icons or nil, + icon_size = proto.icon_size or nil, + + place_result = proto.name, + } +end + +data:extend(ore_items) diff --git a/YARM/data.lua b/YARM/data.lua new file mode 100644 index 00000000..b4f96717 --- /dev/null +++ b/YARM/data.lua @@ -0,0 +1,2 @@ +require("prototypes.prototypes") +require("prototypes.legacy") diff --git a/YARM/graphics/gui.pdn b/YARM/graphics/gui.pdn new file mode 100644 index 00000000..6e9c358d Binary files /dev/null and b/YARM/graphics/gui.pdn differ diff --git a/YARM/graphics/gui.png b/YARM/graphics/gui.png new file mode 100644 index 00000000..aab839d2 Binary files /dev/null and b/YARM/graphics/gui.png differ diff --git a/YARM/graphics/nil.png b/YARM/graphics/nil.png new file mode 100644 index 00000000..ed79b583 Binary files /dev/null and b/YARM/graphics/nil.png differ diff --git a/YARM/graphics/resource-monitor-x24-white.png b/YARM/graphics/resource-monitor-x24-white.png new file mode 100644 index 00000000..2e924358 Binary files /dev/null and b/YARM/graphics/resource-monitor-x24-white.png differ diff --git a/YARM/graphics/resource-monitor-x24.png b/YARM/graphics/resource-monitor-x24.png new file mode 100644 index 00000000..ab0eb873 Binary files /dev/null and b/YARM/graphics/resource-monitor-x24.png differ diff --git a/YARM/graphics/resource-monitor-x32-white.png b/YARM/graphics/resource-monitor-x32-white.png new file mode 100644 index 00000000..8c3e103c Binary files /dev/null and b/YARM/graphics/resource-monitor-x32-white.png differ diff --git a/YARM/graphics/resource-monitor-x32.png b/YARM/graphics/resource-monitor-x32.png new file mode 100644 index 00000000..00c13686 Binary files /dev/null and b/YARM/graphics/resource-monitor-x32.png differ diff --git a/YARM/graphics/resource-monitor.png b/YARM/graphics/resource-monitor.png new file mode 100644 index 00000000..4aff6c67 Binary files /dev/null and b/YARM/graphics/resource-monitor.png differ diff --git a/YARM/graphics/rm_Overlay.png b/YARM/graphics/rm_Overlay.png new file mode 100644 index 00000000..e9b4dc36 Binary files /dev/null and b/YARM/graphics/rm_Overlay.png differ diff --git a/YARM/info.json b/YARM/info.json new file mode 100644 index 00000000..0e7a4069 --- /dev/null +++ b/YARM/info.json @@ -0,0 +1,14 @@ +{ + "name": "YARM", + "version": "0.10.14", + "factorio_version": "1.1", + "title": "YARM - Resource Monitor", + "author": "Mithaldu (current maintainer)", + "homepage": "https://github.com/narc0tiq/YARM", + "dependencies": [ + "? aai-programmable-vehicles", + "? angelsrefining", + "? omnimatter" + ], + "description": "This mod helps you to keep track of your mining sites, with useful data such as the percent mined, and estimated time to depletion.\n\n*** GUI_Unifyer is highly recommended to be installed with this mod. ***\n\nOriginal author: Octav 'narc' Sandulescu, based on work by drs, jorgenRe, and L0771" +} diff --git a/YARM/libs/array_pair.lua b/YARM/libs/array_pair.lua new file mode 100644 index 00000000..7d173575 --- /dev/null +++ b/YARM/libs/array_pair.lua @@ -0,0 +1,52 @@ +array_pair = {} +array_pair.__index = array_pair + +function array_pair.new() + return { table_a = {}, table_b = {} } +end + +function array_pair.reset(list) + list.table_a = {} + list.table_b = {} +end + +function array_pair.insert(list, tuple) + table.insert(list.table_a, tuple.x) + table.insert(list.table_b, tuple.y) +end + +function array_pair.remove(list) + if #list.table_a > 0 then + local a = table.remove(list.table_a) + local b = table.remove(list.table_b) + return { x = a, y = b } + end + return nil +end + +function array_pair.size(list) + return #list.table_a +end + +function array_pair.iterator(list) + local iterator = { list = list, current_index = #list.table_a } + function iterator.next() + if iterator.has_next() then + local idx = iterator.current_index + iterator.current_index = iterator.current_index - 1 + return { x = iterator.list.table_a[idx], y = iterator.list.table_b[idx] } + end + return nil + end + + function iterator.remove() + local idx = iterator.current_index + 1 + return { x = table.remove(iterator.list.table_a, idx), y = table.remove(iterator.list.table_b, idx) } + end + + function iterator.has_next() + return iterator.current_index >= 1 + end + + return iterator +end diff --git a/YARM/libs/ore_tracker.lua b/YARM/libs/ore_tracker.lua new file mode 100644 index 00000000..8cca4850 --- /dev/null +++ b/YARM/libs/ore_tracker.lua @@ -0,0 +1,158 @@ +--[[ + + The Ore Tracker -- a cache for resource entities that are being tracked by YARM. + + Provides two major helpers: + - add_entity(), which will store an entity's particulars and provide a + cache key to allow retrieving its data quickly, and + - get_entity_cache(), which will retrieve a table indexed by the + previously-mentioned cache key, containing data about the stored entity + (position, resource_amount, and a reference to the entity itself). + + Internally, the ore tracker also continually iterates its entities and + updates the cache with their resource_amount, to allow callers to avoid + having to query the entity directly (thus, not crossing the Lua/C++ + boundary unnecessarily). + + Requires an `on_load` and `on_tick`, and relies on the setting + 'YARM-entities-per-tick' to control the rate of updates. +]] +-- + +ore_tracker = { + -- Used for the entity updates spread over multiple ticks + iterator_state = nil, + --iterator_key = nil, -- maintained in `global.ore_tracker`! + iterator_func = nil, + + -- Used to quickly check if an entity is already present. + -- Built in `on_load` and maintained by `add_entity`, based on + -- `global.ore_tracker` data. + position_cache = {}, +} + + +local function position_to_string(position) + -- scale it up so (hopefully) any floating point component disappears, + -- then force it to be an integer with %d. not using util.positiontostr + -- as it uses %g and keeps the floating point component. + return string.format("%d,%d", position.x * 100, position.y * 100) +end + + +function ore_tracker.has_entity(entity) + if not entity or not entity.valid or entity.type ~= "resource" then return false end + + local position_key = position_to_string(entity.position) + if ore_tracker.position_cache[position_key] then + return true + end + + return false +end + +--*f Add an entity to the ore tracker +--*r Returns the entity's tracker index; +-- Note: if the tracker already had the entity, it will simply return the +-- existing tracker index rather than create a new one. +function ore_tracker.add_entity(entity) + if not entity or not entity.valid or entity.type ~= "resource" then return nil end + + if not global.ore_tracker or not global.ore_tracker.entities then + global.ore_tracker = { + entities = {}, + } + end + + local position_key = position_to_string(entity.position) + if ore_tracker.has_entity(entity) then + local its_index = ore_tracker.position_cache[position_key] + + -- We're accessing the entity.position anyway, let's also use this + -- opportunity to update the tracker values (and be 1000% certain + -- that it's tracking the right entity). + local tracking_data = global.ore_tracker.entities[its_index] + tracking_data.entity = entity + tracking_data.valid = entity.valid + tracking_data.position = entity.position + tracking_data.resource_amount = entity.amount + + return its_index + end + + -- Otherwise, create the tracking data and store it, including position_cache + local entities = global.ore_tracker.entities + local next_index = #entities + 1 + entities[next_index] = { + entity = entity, + valid = entity.valid, + position = entity.position, + resource_amount = entity.amount + } + ore_tracker.position_cache[position_key] = next_index + + return next_index +end + +function ore_tracker.get_entity_cache() + if not global.ore_tracker then return nil end + + return global.ore_tracker.entities +end + +function ore_tracker.on_load() + if not global.ore_tracker or not global.ore_tracker.entities then return end + + for tracker_index, tracking_data in pairs(global.ore_tracker.entities) do + local key = position_to_string(tracking_data.position) + ore_tracker.position_cache[key] = tracker_index + end +end + +local function update_entities_this_tick() + if not global.ore_tracker or not global.ore_tracker.entities then return end + local entities_per_tick = settings.global['YARM-entities-per-tick'].value + + if not ore_tracker.iterator_func then + local possible_key = nil + ore_tracker.iterator_func, ore_tracker.iterator_state, possible_key = + pairs(global.ore_tracker.entities) + + -- NB: A client joining the server will find iterator_key already set, + -- and we super-want it to resume from that synchronized key. + if not global.ore_tracker.iterator_key then + global.ore_tracker.iterator_key = possible_key + end + end + + local key = global.ore_tracker.iterator_key + local state = ore_tracker.iterator_state + local iterator = ore_tracker.iterator_func + local tracking_data = nil + for i = 1, entities_per_tick do + key, tracking_data = iterator(state, key) + if key == nil then + global.ore_tracker.iterator_key = nil + ore_tracker.iterator_state = nil + ore_tracker.iterator_func = nil + return + end + + if not tracking_data.entity or not tracking_data.entity.valid then + tracking_data.resource_amount = 0 + tracking_data.entity = nil + tracking_data.valid = false + else + tracking_data.resource_amount = tracking_data.entity.amount + end + end + + global.ore_tracker.iterator_key = key + ore_tracker.iterator_state = state + ore_tracker.iterator_func = iterator +end + + +function ore_tracker.on_tick(event) + update_entities_this_tick() +end diff --git a/YARM/locale/de/base.cfg b/YARM/locale/de/base.cfg new file mode 100644 index 00000000..314c3ec0 --- /dev/null +++ b/YARM/locale/de/base.cfg @@ -0,0 +1,101 @@ +YARM-warn-no-return-possible=Ups! YARM hat vergessen (oder niemals gelernt) wo dein eigentlicher Charakter ist. Wenn du ihn finden kannst, zeige auf ihn mit deinem Cursor und schreibe in die Console: /c remote.call("YARM", "reset_player", game.player.index) + +YARM-err-site-name-too-long=Ups! Die Standort-Namen dΓΌrfen nicht lΓ€nger als __1__ Zeichen sein. Bitte versuche einen kΓΌrzeren Namen! + +YARM-site-submitted=Standort hinzugefΓΌgt "__1__" mit __2__ __3__. +YARM-site-expanded=Standort "__1__" erweitert, dieser hat jetzt __2__ __3__ (__4__). + +YARM-ore-per-minute=__1__/m +YARM-time-to-deplete=__1__ +YARM-etd-day-fragment=__1__d +YARM-etd-hour-fragment=__1__h +YARM-etd-never=nie +YARM-etd-under-1m=<1 m +YARM-etd-now=Jetzt + +YARM-site-rename-title=Umbenennen +YARM-site-rename-confirm=OK +YARM-site-rename-cancel=Abbrechen + +YARM-infinite-entity-count=∞ - __1__x + +YARM-category-totals=Gesamt +YARM-category-sites=Standorte + +[entity-name] +rm_overlay=Resource Overlay + +[item-name] +yarm-selector-tool=Resourcen Monitor + +[item-description] +yarm-selector-tool=Du kannst dieses Item nicht als Hotbar-Filter benutzen. Verwende es stattdessen von der Shortcut-Leiste (oder als Tastatur-KΓΌrzel). + +[shortcut-name] +yarm-selector=Resourcen Monitor (__CONTROL__get-yarm-selector__) + +[controls] +get-yarm-selector=Verwende den Resource Monitor + +[mod-setting-name] +YARM-entities-per-tick=EntitΓ€ten pro Tick +YARM-ticks-between-checks=Ticks zwischen Resourcen-Aktualisierung +YARM-overlay-step=Overlay-Genauigkeit +YARM-warn-timeleft=Resourcen Warnzeit in Stunden +YARM-warn-timeleft_totals=Gesamt-Resourcen Warnzeit in Stunden +YARM-map-markers=Zeige Kartenmarkierungen +YARM-order-by=Sortiere Liste nach +YARM-site-prefix-with-surface=Stelle dem Standortnamen den Namen der OberflΓ€che voran. +YARM-debug-profiling=(Debug) Aktiviere Profiling Ausgaben +YARM-adjust-for-productivity=ProduktivitΓ€tsforschung einbeziehen +YARM-productivity-show-raw-and-adjusted=Zeige sowohl die Roh- als auch angepassten Werte +YARM-productivity-parentheses-part-is=Welche Werte sollen in Klammern angezeigt werden +YARM-grow-limit=Standort-Wachstumslimit +YARM-adjust-over-percentage-sites=Passe Standorte ΓΌber 100% an +YARM-show-sites-summary=Zeige Rohstoff-Zusammenfassungen +YARM-nominal-ups=Nominelle UPS + +[mod-setting-description] +YARM-entities-per-tick=Dies steuert bei ΓΌberwachten Resource-EntitΓ€ten (Feldern), wie viele pro Tick aktualisiert werden. (Normalerweise gibt es 60 Ticks pro Sekunde). Wenn du die Zahl verringerst, kann das einen positiven Effekt auf die UPS haben. +YARM-ticks-between-checks=Die Aktualisierung Resourcen-Standorten nur alle N Spiel-Ticks (60 Ticks = 1 Sekunde). Durch erhΓΆhung dieses Werte kannst du mΓΆglicherweise die UPS verbessern, allerdings dauert dann die Aktualisierung der Standort-Werte lΓ€nger. +YARM-overlay-step=Große Rohstoff-Vorkommen hinzuzufΓΌgen, kann die FPS durch große Overlays negativ beeinflussen. Durch die VerΓ€nderung der Genauigkeit wird der Einfluss auf die FPS reduziert, da weniger EntitΓ€ten erstellt werden. Setze es auf 1 fΓΌr eine vollstΓ€ndige Abdeckung, 2 fΓΌr 1/4, 3 fΓΌr 1/9 Abdeckung, usw... +YARM-warn-timeleft=Die verbleibende Zeit in Stunden, ab der der Spieler bei einem einzelnen Resourcen-Standort gewarnt wird. +YARM-warn-timeleft_totals=Die verbleibende Zeit in Stunden, ab der der Spieler fΓΌr eine einzelne Resource gewarnt wird, wenn dafΓΌr mehr als ein aktiver Standort dafΓΌr existiert. +YARM-map-markers=Zeigt auf der Karte eine Markierung an, die Namen und den aktuellen Inhalt des Standorts anzeigen. Dieser wird automatisch aktualisiert. Hinweis: Nachdem diese Einsetellung geΓ€ndert wurde kann es ein paar Sekunden dauern, bevor das Ergebnis sichtbar wird. +YARM-order-by=Γ„ndere die Anzeigereihenfolge fΓΌr Standorte in der YARM Liste. +YARM-site-prefix-with-surface=FΓΌge den Namen der OberflΓ€che zum Namen des Standorts hinzu. NΓΌtzlich fΓΌr Spiele mit mehreren OberflΓ€chen. +YARM-debug-profiling=Wenn aktiviert, werden einige Informationen ΓΌber die Ticks und deren Timing in die Ausgabe des Spielers und die factorio-current.log geschrieben. +YARM-adjust-for-productivity=Die angezeigten Werte werden entsprechend der erforschten Berbau-ProduktivitΓ€t angepasst. +YARM-productivity-show-raw-and-adjusted=Es werden sowohl die Roh-Werte als auch die an die Bergbau-ProduktivitΓ€t angepassten Werte angezeigt, eine davon in Klammern. +YARM-productivity-parentheses-part-is=Γ„ndere welcher Wert in Klammern angezeigt werden soll (Roh-Werte oder an die Bergbau-ProduktivitΓ€t angepasste Werte). +YARM-grow-limit=Die maximale Entfernung vom ursprΓΌnglichen Zentrum, die ein Standort wachsen darf, wenn es erstellt wurde. -1 = Unbegrenztes Wachstum. 0 = Kein Wachstum. Mehr als 1 = Begrenztes Wachstum +YARM-adjust-over-percentage-sites=Wenn aktiviert werden Standorte ihren "Initialen Wert" so setzen, dass dieser dem aktuellen Wert entspricht, wenn dieser grâßer ist als der zuvor gespeicherte initiale Wert. Dies kann sowohl als temporΓ€rer Fix oder permanente ÜberprΓΌfung verwendet werden. +YARM-nominal-ups=Die angenommene Anzahl an Updates pro Sekunde, die fΓΌr die Restzeit und Mining-Geschwindigkeit angenommen wird. 60 ist der Standardwert, aber wenn das Spiel konsistent langsamer lΓ€uft als der Standard, kannst du den Wert auf deine durchschnittlichen UPS setzen und somit die Spielzeit AbschΓ€tzungen an die Realzeit angleichen. + +[string-mod-setting] +YARM-order-by-percent-remaining=Verbleibende Prozent +YARM-order-by-ore-type=Rohstoff-Typ, dann verbleibende Prozent +YARM-order-by-ore-count=Verbleibende Resourcen +YARM-order-by-etd=Verbleibende Zeit bis ErschΓΆpfung +YARM-productivity-parentheses-part-is-adjusted=An Bergbau-ProduktivitΓ€t anpassen +YARM-productivity-parentheses-part-is-raw=Rohwerte + +[YARM-tooltips] +rename-site-named=Standort umbenannt '__1__' +rename-site-cancel=Umbenennen des Standorts abbrechen +goto-site=Zum Standort springen +delete-site=Diesen Standort lΓΆschen +delete-site-confirm=Das LΓΆschen des Standorts bestΓ€tigen (Dies kann nicht rΓΌckgΓ€ngig gemacht werden!)\nWenn du nichts machst, wird es automatisch abgebrochen. +expand-site=Standort erweitern +expand-site-cancel=Standort erweitern abrrechen +filter-none=Filter: Keine Standorte (YARM Daten ausblenden) +filter-warnings=Filter: Nur Warnungen +filter-all=Filter: Alle Standorte +toggle-bg=Hintergrund umschalten +toggle-surfacesplit=OberflΓ€chentrennung umschalten +toggle-lite=Anzeige von weniger wichtigen Teilen umschalten + +[YARM-warnings] +discard-single-missing-ore-type-single=[YARM] Warnung: Standort "__1__" wurde verworfen, da die Resource "__2__" unbekannt ist. Bitte erstelle den Standort erneut, wenn dies nΓΆtig ist. +discard-multi-missing-ore-type-single=[YARM] Warnung: Die Standorte "__1__" wurden verworfen, da die Resource "__2__" unbekannt ist. Bitte erstelle die Standorte erneut, wenn dies nΓΆtig ist. +discard-multi-missing-ore-type-multi=[YARM] Warnung: Die Standorte "__1__" wurden verworfen, da die Resourcen "__2__" unbekannt sind. Bitte erstelle die Standorte erneut, wenn dies nΓΆtig ist. diff --git a/YARM/locale/en/base.cfg b/YARM/locale/en/base.cfg new file mode 100644 index 00000000..efc2539f --- /dev/null +++ b/YARM/locale/en/base.cfg @@ -0,0 +1,101 @@ +YARM-warn-no-return-possible=Oops! YARM has forgotten (or never learned) where your real character is. If you can find them in the world, point your cursor to them and type into the console: /c remote.call("YARM", "reset_player", game.player.index) + +YARM-err-site-name-too-long=Oops! Site names aren't allowed to be longer than __1__ characters, please try a shorter name! + +YARM-site-submitted=Added site "__1__" with __2__ __3__. +YARM-site-expanded=Site "__1__" updated, now has __2__ __3__ (__4__). + +YARM-ore-per-minute=__1__/m +YARM-time-to-deplete=__1__ +YARM-etd-day-fragment=__1__d +YARM-etd-hour-fragment=__1__h +YARM-etd-never=never +YARM-etd-under-1m=<1 m +YARM-etd-now=now + +YARM-site-rename-title=Rename '__1__' +YARM-site-rename-confirm=Do it +YARM-site-rename-cancel=No, wait, nevermind + +YARM-infinite-entity-count=∞ - __1__x + +YARM-category-totals=Totals +YARM-category-sites=Sites + +[entity-name] +rm_overlay=Resource Overlay + +[item-name] +yarm-selector-tool=Resource monitor + +[item-description] +yarm-selector-tool=Don't use this on your hotbar filter, it won't work. Instead, use it from the shortcut bar (or keyboard shortcut). + +[shortcut-name] +yarm-selector=Resource monitor (__CONTROL__get-yarm-selector__) + +[controls] +get-yarm-selector=Use resource monitor + +[mod-setting-name] +YARM-entities-per-tick=Entities per tick +YARM-ticks-between-checks=Ticks between resource updates +YARM-overlay-step=Overlay step +YARM-warn-timeleft=Resource warning hours +YARM-warn-timeleft_totals=Total resource warning hours +YARM-map-markers=Enable map markers +YARM-order-by=Order resource list by +YARM-site-prefix-with-surface=Prefix the site name with the surface name +YARM-debug-profiling=(Debug) Enable profiling output +YARM-adjust-for-productivity=Adjust values for productivity researched +YARM-productivity-show-raw-and-adjusted=Show both raw and adjusted values +YARM-productivity-parentheses-part-is=Which value is in parentheses +YARM-grow-limit=Site growth limit +YARM-adjust-over-percentage-sites=Adjust sites over 100% +YARM-show-sites-summary=Show ore summary lines +YARM-nominal-ups=Nominal UPS + +[mod-setting-description] +YARM-ticks-between-checks=When a resource site is being monitored, the amount of resources in it is only updated once every N game ticks (60 ticks = 1 second), based on this value. Increase to hopefully improve UPS, at the cost of needing longer to update a site's estimates. +YARM-entities-per-tick=For resources that are being monitored, this controls how many resource entities (ore tiles) to query in a single tick (1 of the normally 60 updates every second). Reduce this to hopefully improve UPS. +YARM-overlay-step=Adding huge resource patches can cause FPS drop with large overlays. Changing the sparseness of the overlay will reduce the FPS drop by having less entities. Set to 1 for full coverage, 2 for 1/4, 3 for 1/9, etc. +YARM-map-markers=Show markers on the map containing the site name and its current content, updating automatically. Note: after changing this setting, it may take a few seconds for the results to be visible! +YARM-warn-timeleft=The hours of remaining resources that will alert the player for a single resource site. +YARM-warn-timeleft_totals=The hours of remaining resources that will alert the player for the total lines which are displayed if there are multiple active sites for an ore type. +YARM-order-by=Change the display order of sites in the YARM list. +YARM-site-prefix-with-surface=Prefix the surface name to the site name. Useful for maps with multiple surfaces. +YARM-debug-profiling=When enabled, outputs some information about tick timing to the player output and factorio-current.log. +YARM-adjust-for-productivity=Amounts are shown adjusted by mining productivity research. +YARM-productivity-show-raw-and-adjusted=Amounts show both raw amount and amount adjusted by mining productivity research, one of them in parentheses (default: show the raw amount in parentheses). +YARM-productivity-parentheses-part-is=Change which amount (raw or adjusted for mining productivity) is shown in parentheses. +YARM-grow-limit=Maximum distance from the original center that a site may grow when it is created. -1 = Unlimited growth. 0 = No growth. More than 0 = Limited growth. +YARM-adjust-over-percentage-sites=When enabled sites will have their "initial amount" set to match the current amount, if the current amount of resources is more than the one noted initially. Can be used as a temporary fix or a permanent check. +YARM-nominal-ups=The number of updates per second that YARM will assume when calculating ETD and mining speeds. 60 is the default, but if your game is consistently running below the default, adjust this value to your average UPS to get more accurate estimates and speeds. + +[string-mod-setting] +YARM-order-by-percent-remaining=remaining percentage +YARM-order-by-ore-type=ore type, then remaining percentage +YARM-order-by-ore-count=ore count remaining +YARM-order-by-etd=estimated time to depletion +YARM-productivity-parentheses-part-is-adjusted=adjusted for productivity research +YARM-productivity-parentheses-part-is-raw=raw + +[YARM-tooltips] +rename-site-named=Rename site '__1__' +rename-site-cancel=Cancel renaming the site +goto-site=View this site +delete-site=Delete this site +delete-site-confirm=Confirm deleting this site (this is not reversible!)\nIt will automatically cancel if you do nothing +expand-site=Expand this site +expand-site-cancel=Cancel expanding this site +filter-none=Filter: no sites (hide YARM data) +filter-warnings=Filter: warnings only +filter-all=Filter: all sites +toggle-bg=Toggle Background +toggle-surfacesplit=Toggle splitting of sites by surface +toggle-lite=Toggle hiding of less important ui parts + +[YARM-warnings] +discard-single-missing-ore-type-single=[YARM] Warning: discarded site "__1__" with unknown ore type "__2__". Please recreate the site if necessary. +discard-multi-missing-ore-type-single=[YARM] Warning: discarded sites "__1__" with unknown ore type "__2__". Please recreate the sites if necessary. +discard-multi-missing-ore-type-multi=[YARM] Warning: discarded sites "__1__" with unknown ore types "__2__". Please recreate the sites if necessary. diff --git a/YARM/locale/he/base.cfg b/YARM/locale/he/base.cfg new file mode 100644 index 00000000..370a498a --- /dev/null +++ b/YARM/locale/he/base.cfg @@ -0,0 +1,28 @@ +YARM-err-generic=[YARM] האיגש: __1__ +YARM-err-specific=[YARM|__1__] האיגש: __2__ + +YARM-warn-no-return-possible= Χ”Χ™Χ’Χ‘ ! YARM Χ”Χ“Χ•Χ§Χ€Χ” ΧͺΧ¨Χ•Χ©Χ‘ האבה Χ”Χ“Χ•Χ§Χ€Χ” Χͺא Χ©Χ§Χ”Χ• Χ”Χ™ΧœΧ’ Χ¨Χ‘Χ›Χ’Χ” לש ΧŸΧžΧ‘Χ” Χͺא Χ‘Χ¦Χ” ,Χ§Χ—Χ©ΧžΧ” ΧΧœΧ•Χ’Χ‘ Χ”Χͺוא ΧΧ•Χ¦ΧžΧœ ךΧͺורש׀אב םא .ךלש ΧͺΧ•ΧžΧ“Χ” ה׀יא )Χ’Χ“Χ•Χ™ אל וא( Χ—Χ›Χ©: /c remote.call("YARM", "reset_player", game.player.index) +YARM-warn-not-in-real-body=Χ”Χ™Χ’Χ‘!ΧͺΧ™Χ Χ© Χ”Χ‘Χ  זאו םדוק Χ”Χ™ΧœΧ Χ¨Χ•Χ–Χ— אנא .ךלש ΧͺΧ•ΧžΧ“Χ” ΧΧ•Χ§ΧžΧ‘ ΧšΧ Χ™Χ רשאכ Χ§Χ—Χ•Χ¨Χž Χ¨Χͺאב ΧͺΧ•Χ€Χ¦Χœ ΧœΧ•Χ›Χ™ ΧšΧ Χ™Χ + +YARM-site-submitted=Χ¨Χͺא Χ£Χ‘Χ•Χ” "__1__" םג __2__ __3__. + +YARM-ore-per-minute=__1__/m +YARM-time-to-deplete=__1__ +YARM-etd-hour-fragment=__1__ h +YARM-etd-minute-fragment=__1__ m +YARM-etd-never=םג׀ ףא +YARM-etd-under-1m=<1 m + +YARM-site-rename-title=םש Χ”Χ Χ©! +YARM-site-rename-confirm=רושיא +YARM-site-rename-cancel=Χ™Χ•Χ Χ™Χ© ΧœΧ˜Χ‘ + +[entity-name] +resource-monitor=ΧΧ™Χ‘ΧΧ©ΧžΧ” Χ—Χ§Χ€Χž +rm_overlay=ΧΧ™Χ‘ΧΧ©ΧžΧ” Χ’Χ™Χ¦Χž + +[item-name] +resource-monitor=ΧΧ™Χ‘ΧΧ©ΧžΧ” Χ—Χ§Χ€Χž + +[technology-name] +resource-monitoring=ΧΧ™Χ‘ΧΧ©Χž לג Χ—Χ•Χ§Χ™Χ€ diff --git a/YARM/locale/it/base.cfg b/YARM/locale/it/base.cfg new file mode 100644 index 00000000..9db2b8ac --- /dev/null +++ b/YARM/locale/it/base.cfg @@ -0,0 +1,44 @@ +YARM-err-generic=[YARM] Errore: __1__ +YARM-err-specific=[YARM|__1__] Errore: __2__ + +YARM-warn-no-return-possible=Oops! YARM ha dimenticato (o mai imparato) dove si trova il tuo personaggio. Se riesci a trovarlo, punta il cursore su di esso e digita nella console: /c remote.call("YARM", "reset_player", game.player.index) +YARM-warn-not-in-real-body=Oops! Non puoi visualizzare un sito remoto se non sei nel tuo personaggio. Per favore ritornaci e poi riprova. +YARM-warn-in-vehicle=Oops! Non puoi visualizzare un sito remoto mentre guidi un veicolo. Per favore termina prima la guida e poi riprova. + +YARM-err-sand-is-bad=Oops! La sabbia non dovrebbe essere tracciata per ragioni di performance. Ce n'Γ¨ davvero troppa! + +YARM-site-submitted=Aggiunto sito "__1__" a __2__ __3__. +YARM-site-expanded=Sito "__1__" aggiornato, ora ha __2__ __3__ (__4__). + +YARM-ore-per-minute=__1__ al min. +YARM-time-to-deplete=__1__ +YARM-etd-hour-fragment=__1__h +YARM-etd-never=Mai +YARM-etd-under-1m=<1 m + +YARM-site-rename-title=Rinominalo! +YARM-site-rename-confirm=Fallo +YARM-site-rename-cancel=No, aspetta, lascia perdere... + +YARM-warn-please-empty-cursor=Oops! Hai qualcos'altro sul cursore, per favore lascialo prima di espandere il sito. +YARM-warn-no-YARM-item=Oops! Sembra che tu non abbia il monitor di risorse nel tuo inventario, per favore creane uno prima di provare a espandere il sito. + +[entity-name] +resource-monitor=Monitor Risorse +rm_overlay=Sovrapposizione Risorse + +[item-name] +resource-monitor=Monitor Risorse + +[technology-name] +resource-monitoring=Monitoraggio Risorse + +[mod-setting-name] +YARM-ticks-between-checks=Ticks tra gli aggiornamenti delle Risorse +YARM-endless-resource-base=Produzione base Risorse senza fine +YARM-overlay-step=Passaggi Overlay (sovrapposizione) + +[mod-setting-description] +YARM-ticks-between-checks= Quando una sito di una risorsa viene monitorato, l'ammontare delle risorse in esso Γ¨ aggiornato solo ogni TOT ticks di gioco (60 ticks = 1 secondo), basato su questo valore. +YARM-endless-resource-base= Una risorsa senza fine (come i giacimenti di petrolio) a un certo punto raggiungeranno un livello di produzione base. Di default, questo viene mostrato come 0% "completo". Impostalo a 100 per mostrare il livello di produzione di base come 100% "completo". +YARM-overlay-step= Aggiungere dei giacimenti enormi di risorse puΓ² causare un FPS drop a causa degli overlay (sovrapposizioni). Cambiare la sporadicitΓ  di questi ultimi, ridurrΓ  il drop di FPS grazie al minor numero di entitΓ . Impostalo su 1 per una copertura totale, 2 per 1/4, 3 per 1/9, ecc... diff --git a/YARM/locale/ja/base.cfg b/YARM/locale/ja/base.cfg new file mode 100644 index 00000000..66dd61d2 --- /dev/null +++ b/YARM/locale/ja/base.cfg @@ -0,0 +1,75 @@ +YARM-warn-no-return-possible=ごめんγͺさい!YARMはあγͺたγζœ¬ε½“γγ‚­γƒ£γƒ©γ‚―γ‚ΏγƒΌγŒγ©γ“γ«γ„γ‚‹γ‹εΏ˜γ‚Œγ¦γ—γΎγ„γΎγ—γŸ(γΎγŸγ―θ¦šγˆγ¦γ„γΎγ›γ‚“)。キャラクターをこγδΈ–η•Œγ§θ¦‹γ€γ‘γ‚‰γ‚Œγ‚‹ε ΄εˆγ―γ€γ‚­γƒ£γƒ©γ‚―γ‚ΏγƒΌγ«γ‚«γƒΌγ‚½γƒ«γ‚’εˆγ‚γ›γ¦γ‚³γƒ³γ‚½γƒΌγƒ«γ«ζ¬‘γγ‚ˆγ†γ«ε…₯εŠ›γ—γ¦γγ γ•γ„: /c remote.call("YARM", "reset_player", game.player.index) + +YARM-err-site-name-too-long=ごめんγͺさい! __1__ ζ–‡ε­—δ»₯上γεŒΊη”»εγ―θ¨±ε―γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚ηŸ­γ„εε‰γ«γ—γ¦γγ γ•γ„οΌ + +YARM-site-submitted=__2__ __3__ γ«εŒΊη”» "__1__" γ‚’θΏ½εŠ γ—γΎγ—γŸγ€‚ +YARM-site-expanded=εŒΊη”» "__1__" γ‚’ζ›΄ζ–°γ—γΎγ—γŸγ€‚ηΎεœ¨γ― __2__ __3__ (__4__) です。 + +YARM-ore-per-minute=__1__/m +YARM-time-to-deplete=__1__ +YARM-etd-hour-fragment=__1__h +YARM-etd-never=γͺし +YARM-etd-under-1m=<1 m +YARM-etd-now=現在 + +YARM-site-rename-title=名前γε€‰ζ›΄ '__1__' +YARM-site-rename-confirm=倉更する +YARM-site-rename-cancel=中歒する + +YARM-infinite-entity-count=∞ - __1__x + +[entity-name] +rm_overlay=γƒͺγ‚½γƒΌγ‚Ήγ‚ͺーバーレむ + +[item-name] +yarm-selector-tool=γƒͺソースヒニター + +[item-description] +yarm-selector-tool=γƒ›γƒƒγƒˆγƒγƒΌγƒ•γ‚£γƒ«γ‚Ώγ§δ½Ώη”¨γ—γͺγ„γ§γγ γ•γ„γ€‚ε‹•δ½œγ—γΎγ›γ‚“γ€‚δ»£γ‚γ‚Šγ«γ‚·γƒ§γƒΌγƒˆγ‚«γƒƒγƒˆγƒγƒΌ(γΎγŸγ―γ‚­γƒΌγƒœγƒΌγƒ‰γ‚·γƒ§γƒΌγƒˆγ‚«γƒƒγƒˆ)から使用します。 + +[shortcut-name] +yarm-selector=γƒͺソースヒニター (__CONTROL__get-yarm-selector__) + +[controls] +get-yarm-selector=γƒͺソースヒニターを使用する + +[mod-setting-name] +YARM-entities-per-tick=Tickγ‚γŸγ‚Šγγ‚¨γƒ³γƒ†γ‚£γƒ†γ‚£ζ•° +YARM-ticks-between-checks=γƒͺγ‚½γƒΌγ‚Ήγζ›΄ζ–°ι–“ιš” +YARM-overlay-step=γ‚ͺγƒΌγƒγƒΌγƒ¬γ‚€ι–“ιš” +YARM-map-markers=γƒžγƒƒγƒ—γƒžγƒΌγ‚«γƒΌγ‚’ζœ‰εŠΉγ«γ™γ‚‹ +YARM-order-by=γƒͺγ‚½γƒΌγ‚Ήγƒͺγ‚Ήγƒˆγι †εΊ +YARM-site-prefix-with-surface=εŒΊη”»εγε‰γ«γ‚΅γƒΌγƒ•γ‚§γ‚Ήεγ‚’δ»˜γ‘γ‚‹ +YARM-debug-profiling=(デバッグ)γƒ—γƒ­γƒ•γ‚‘γ‚€γƒ«ε‡ΊεŠ›γ‚’ζœ‰εŠΉγ«γ™γ‚‹ + +[mod-setting-description] +YARM-ticks-between-checks=γƒͺγ‚½γƒΌγ‚ΉεŒΊη”»γŒη›£θ¦–γ•γ‚Œγ¦γ„γ‚‹ε ΄εˆγ€γƒͺソース量はこγε€€γ«εŸΊγ₯いてNγ‚²γƒΌγƒ Tick(60Tick = 1η§’)γ”γ¨γ«ζ›΄ζ–°γ•γ‚ŒγΎγ™γ€‚UPSγ‚’ζ”Ήε–„γ™γ‚‹γ«γ―ε€§γγγ—γΎγ™γ€‚εŒΊη”»γζŽ¨θ¨ˆγ‚’ζ›΄ζ–°γ™γ‚‹γγ«ζ™‚ι–“γŒγ‹γ‹γ‚ŠγΎγ™γ€‚ +YARM-entities-per-tick=監視γƒͺγ‚½γƒΌγ‚Ήγε ΄εˆγ€γ“γ‚Œγ―1Tick(ι€šεΈΈζ―Žη§’60ε›žζ›΄ζ–°γ™γ‚‹γγ†γ‘γ1ε›ž)でクエγƒͺするγƒͺソースエンティティ(ι‰±ηŸ³γ‚Ώγ‚€γƒ«)ζ•°γ‚’εˆΆεΎ‘γ—γΎγ™γ€‚UPSを改善するには小さくします。 +YARM-overlay-step=ε·¨ε€§γͺγƒͺγ‚½γƒΌγ‚Ήγƒ‘γƒƒγƒγ‚’θΏ½εŠ γ™γ‚‹γ¨ε€§γγͺγ‚ͺγƒΌγƒγƒΌγƒ¬γ‚€γ«γ‚ˆγ‚‹FPSγδ½ŽδΈ‹γ‚’引き衷こします。γ‚ͺγƒΌγƒγƒΌγƒ¬γ‚€γ‚’γΎγ°γ‚‰γ«γ™γ‚‹γ¨γ‚¨γƒ³γƒ†γ‚£γƒ†γ‚£γŒε°‘γͺくγͺγ‚ŠFPSγδ½ŽδΈ‹γ‚’θ»½ζΈ›γ—γΎγ™γ€‚ε…¨δ½“γ‚’θ¦†γ†ε ΄εˆ1、1/4γε ΄εˆ2、1/9γε ΄εˆ3γ¨γ„γ£γŸγ‚ˆγ†γ«θ¨­εšγ—ます。 +YARM-map-markers=εŒΊη”»εγ¨ηΎεœ¨ι‡γγƒžγƒΌγ‚«γƒΌγ‚’εœ°ε›³γ«θ‘¨η€Ίγ—γ€θ‡ͺε‹•ηš„γ«ζ›΄ζ–°γ—γΎγ™γ€‚ζ³¨ζ„: こγθ¨­εšε€‰ζ›΄εΎŒγ€η΅ζžœγŒθ‘¨η€Ίγ•γ‚Œγ‚‹γΎγ§γ«ζ•°η§’γ‹γ‹γ‚‹γ“γ¨γŒγ‚γ‚ŠγΎγ™γ€‚ +YARM-order-by=YARMγƒͺγ‚Ήγƒˆγγ‚΅γ‚€γƒˆγθ‘¨η€Ίι †εΊγ‚’倉更します。 +YARM-site-prefix-with-surface=εŒΊη”»εγε‰γ«γ‚΅γƒΌγƒ•γ‚§γ‚Ήεγ‚’δ»˜γ‘γΎγ™γ€‚θ€‡ζ•°γ‚΅γƒΌγƒ•γ‚§γ‚Ήγγ‚γ‚‹γƒžγƒƒγƒ—γ§ε½Ήγ«η«‹γ‘ます。 +YARM-debug-profiling=ζœ‰εŠΉγ«γ™γ‚‹γ¨γ€Tickγ‚Ώγ‚€γƒŸγƒ³γ‚°γζƒ…報をプレむダーγε‡ΊεŠ›γ¨factorio-current.logγ«ε‡ΊεŠ›γ—γΎγ™γ€‚ + +[string-mod-setting] +YARM-order-by-percent-remaining=ζ‹γƒ‘ーセンテージ +YARM-order-by-ore-type=ι‰±ηŸ³γη¨ι‘žγ€ζ‹γƒ‘ーセンテージ +YARM-order-by-ore-count=ζ‹ι‰±ηŸ³ζ•° +YARM-order-by-etd=ζž―ζΈ‡γΎγ§γζލεšζ™‚ι–“ + +[YARM-tooltips] +rename-site-named=εŒΊη”»εγ‚’ε€‰ζ›΄γ™γ‚‹ '__1__' +rename-site-cancel=εŒΊη”»εγε€‰ζ›΄γ‚’δΈ­ζ­’する +goto-site=こγεŒΊη”»γ‚’葨瀺する +delete-site=こγεŒΊη”»γ‚’ε‰Šι™€γ™γ‚‹ +delete-site-confirm=こγεŒΊη”»γε‰Šι™€γ‚’η’Ίθͺ(ε…ƒγ«ζˆ»γ™γ“γ¨γ―γ§γγΎγ›γ‚“οΌ)\n何もしγͺいとθ‡ͺε‹•ηš„γ«δΈ­ζ­’γ•γ‚ŒγΎγ™γ€‚ +expand-site=こγεŒΊη”»γ‚’ζ‹‘弡する +expand-site-cancel=こγεŒΊη”»γζ‹‘弡を中歒する +filter-none=フィルタ: γͺし(YARMγƒ‡γƒΌγ‚Ώγ‚’ιš γ™) +filter-warnings=フィルタ: θ­¦ε‘ŠγγΏ +filter-all=フィルタ: ε…¨εŒΊη”» + +[YARM-warnings] +discard-single-missing-ore-type-single=[YARM] θ­¦ε‘Š: 不明γͺι‰±ηŸ³γ‚Ώγ‚€γƒ— "__2__" γεŒΊη”» "__1__" γ‚’η ΄ζ£„γ—γΎγ—γŸγ€‚εΏ…θ¦γ«εΏœγ˜γ¦εŒΊη”»γ‚’ε†δ½œζˆγ—γ¦γγ γ•γ„γ€‚ +discard-multi-missing-ore-type-single=[YARM] θ­¦ε‘Š: 不明γͺι‰±ηŸ³γ‚Ώγ‚€γƒ— "__2__" γεŒΊη”» "__1__" γ‚’η ΄ζ£„γ—γΎγ—γŸγ€‚εΏ…θ¦γ«εΏœγ˜γ¦εŒΊη”»γ‚’ε†δ½œζˆγ—γ¦γγ γ•γ„γ€‚ +discard-multi-missing-ore-type-multi=[YARM] θ­¦ε‘Š: 不明γͺι‰±ηŸ³γ‚Ώγ‚€γƒ— "__2__" γεŒΊη”» "__1__" γ‚’η ΄ζ£„γ—γΎγ—γŸγ€‚εΏ…θ¦γ«εΏœγ˜γ¦εŒΊη”»γ‚’ε†δ½œζˆγ—γ¦γγ γ•γ„γ€‚ diff --git a/YARM/locale/ru/base.cfg b/YARM/locale/ru/base.cfg new file mode 100644 index 00000000..e59648b7 --- /dev/null +++ b/YARM/locale/ru/base.cfg @@ -0,0 +1,95 @@ +YARM-warn-no-return-possible=Упс! YARM Π·Π°Π±Ρ‹Π» (ΠΈΠ»ΠΈ Π½Π΅ нашСл) Ρ‚Π²ΠΎΠ΅Π³ΠΎ пСрсонаТа. Если Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ Π² ΠΌΠΈΡ€Π΅, Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ курсор Π½Π° Π½Π΅Π³ΠΎ ΠΈ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉΡ‚Π΅ Π² консоли: /c remote.call("YARM", "reset_player", game.player.index) + +YARM-err-site-name-too-long=Упс! НазваниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС __1__ символов, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ снова. + +YARM-site-submitted=Π”ΠΎΠ±Π°Π²Π»Π΅Π½ участок "__1__" с __2__ __3__. +YARM-site-expanded=Участок "__1__" ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ __2__ __3__ (__4__). + +YARM-ore-per-minute=__1__/ΠΌΠΈΠ½. +YARM-time-to-deplete=__1__ +YARM-etd-day-fragment=__1__Π΄. +YARM-etd-hour-fragment=__1__ час(ΠΎΠ²) +YARM-etd-never=Π½ΠΈΠΊΠΎΠ³Π΄Π° +YARM-etd-under-1m=<1 ΠΌΠΈΠ½. +YARM-etd-now=now + +YARM-site-rename-title=ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ это! +YARM-site-rename-confirm=Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это +YARM-site-rename-cancel=НСт, ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΎΡ‚ΠΌΠ΅Π½Π° + +YARM-infinite-entity-count=∞ - __1__x + +YARM-category-totals=ВсСго +YARM-category-sites=Участки +[entity-name] +rm_overlay=Π‘Π»ΠΎΠΉ рСсурсов + +[item-name] +yarm-selector-tool=ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ рСсурсов + +[item-description] +yarm-selector-tool=НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅ hotbar, ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ°Π½Π΅Π»ΠΈ быстрого доступа (ΠΈΠ»ΠΈ сочСтаниС клавиш). + +[shortcut-name] +yarm-selector=ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ рСсурсов (__CONTROL__get-yarm-selector__) + +[controls] +get-yarm-selector=Исп. ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ рСсурсов + +[mod-setting-name] +YARM-entities-per-tick=Π•Π΄ΠΈΠ½ΠΈΡ† Π½Π° Ρ‚ΠΈΠΊ +YARM-ticks-between-checks=Π’ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ обновлСниями рСсурсов +YARM-overlay-step=Π Π°Π·ΠΌΠ΅Ρ€ покрытия +YARM-warn-timeleft=ΠžΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ Π² часах рСсурса +YARM-warn-timeleft_totals=ВсСго часов рСсурса +YARM-map-markers=Π’ΠΊΠ». ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΊΠ°Ρ€Ρ‚Ρ‹ +YARM-order-by=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ список рСсурсов +YARM-site-prefix-with-surface=ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ ΠΈΠΌΠ΅Π½ΠΈ участка с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ повСрхности +YARM-debug-profiling=(Debug) Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ +YARM-adjust-for-productivity=ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ извСстной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ +YARM-productivity-show-raw-and-adjusted=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΠΈ скоррСктированныС значСния +YARM-productivity-parentheses-part-is=КакоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ находится Π² скобках +YARM-grow-limit=ΠŸΡ€Π΅Π΄Π΅Π» роста участка +YARM-adjust-over-percentage-sites=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ участок Π΄ΠΎ 100% + +[mod-setting-description] +YARM-ticks-between-checks= ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ рСсурса обновляСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° N ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΊΠΎΠ² (60 Ρ‚ΠΈΠΊΠΎΠ² = 1 сСкунда), Π½Π° основС этого значСния. +YARM-entities-per-tick=Для рСсурсов, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ вСдСтся наблюдСниС, этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт, сколько рСсурсных Π΅Π΄ΠΈΠ½ΠΈΡ† (Ρ€ΡƒΠ΄Π½Ρ‹Ρ… ΠΏΠ»ΠΈΡ‚ΠΎΠΊ) Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚ (1 ΠΈΠ· 60 ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду). Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ UPS. +YARM-overlay-step= Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Π·ΠΎΠ½Π° покрытия ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ рСсурса ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ падСнию FPS. ИзмСнСниС Π·ΠΎΠ½Ρ‹ налоТСния ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ FPS отобраТая мСньшС ΠΌΠ΅Ρ‚ΠΎΠΊ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ отобраТСния, 2 для 1/4, 3 для 1/9, ΠΈ Ρ‚. Π΄. +YARM-map-markers=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹, содСрТащиС имя участка ΠΈ Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ содСрТимоС, обновляСмоС автоматичСски. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: послС измСнСния этой настройки ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколько сСкунд, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ стали Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ! +YARM-warn-timeleft=ΠžΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΎ часах ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎΡΡ рСсурса Π½Π° ΠΎΠ΄Π½ΠΎΠΌ участкС. +YARM-warn-timeleft_totals=ΠžΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ часах суммарно ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ рСсурсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… участков для Ρ‚ΠΈΠΏΠ° Ρ€ΡƒΠ΄Ρ‹. +YARM-order-by=ИзмСнСниС порядка отобраТСния списка рСсурсов YARM. +YARM-site-prefix-with-surface=ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ названия повСрхности ΠΊ названию участка. ПолСзно для ΠΊΠ°Ρ€Ρ‚ с нСсколькими повСрхностями. +YARM-debug-profiling=ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΊΠΎΠ² Π½Π° экран ΠΈ Π² factorio-current.log. +YARM-adjust-for-productivity=Π‘ΡƒΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° исслСдованиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ. +YARM-productivity-show-raw-and-adjusted=Π‘ΡƒΠΌΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ сумму, Ρ‚Π°ΠΊ ΠΈ сумму, ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ исслСдования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ, ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π² скобках (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ сумму Π² скобках). +YARM-productivity-parentheses-part-is=Π’ скобках ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ суммы (исходной ΠΈΠ»ΠΈ скоррСктированной с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ). +YARM-grow-limit=МаксимальноС расстояниС ΠΎΡ‚ исходного Ρ†Π΅Π½Ρ‚Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ участок ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании. -1 = НСограничСнный Ρ€Π°Π·ΠΌΠ΅Ρ€. 0 = НСт увСличСния. Π‘ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 0 = ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€. +YARM-adjust-over-percentage-sites=ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρƒ участков "Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ" Π±ΡƒΠ΄Π΅Ρ‚ установлСно Π² соотвСтствии с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΊΠΎΠ»-Π²ΠΎΠΌ, Ссли Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ рСсурсов большС, Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ постоянная ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°. + +[string-mod-setting] +YARM-order-by-percent-remaining=ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ +YARM-order-by-ore-type=Ρ‚ΠΈΠΏ Ρ€ΡƒΠ΄Ρ‹, Π·Π°Ρ‚Π΅ΠΌ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ +YARM-order-by-ore-count=ΠΊΠΎΠ»-Π²ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ Ρ€ΡƒΠ΄Ρ‹ +YARM-order-by-etd=расчСтноС врСмя Π΄ΠΎ истощСния +YARM-productivity-parentheses-part-is-adjusted=с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° исслСдованиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ +YARM-productivity-parentheses-part-is-raw=исходный + +[YARM-tooltips] +rename-site-named=ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ участок '__1__' +rename-site-cancel=ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ +goto-site=ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ участок +delete-site=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ участок +delete-site-confirm=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ!). АвтоматичСски отмСнится ΠΏΡ€ΠΈ бСздСйствии. +expand-site=Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ этот участок +expand-site-cancel=ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ участка +filter-none=Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ участки (Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ YARM) +filter-warnings=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с прСдупрСТдСниями +filter-all=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС участки +toggle-bg=Π‘ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ + +[YARM-warnings] +discard-single-missing-ore-type-single=[YARM] Warning: discarded site "__1__" with unknown ore type "__2__". Please recreate the site if necessary. +discard-multi-missing-ore-type-single=[YARM] Warning: discarded sites "__1__" with unknown ore type "__2__". Please recreate the sites if necessary. +discard-multi-missing-ore-type-multi=[YARM] Warning: discarded sites "__1__" with unknown ore types "__2__". Please recreate the sites if necessary. diff --git a/YARM/locale/zh-CN/base.cfg b/YARM/locale/zh-CN/base.cfg new file mode 100644 index 00000000..704db6c0 --- /dev/null +++ b/YARM/locale/zh-CN/base.cfg @@ -0,0 +1,107 @@ +#ζ±‰εŒ–οΌšaotixοΌŒεŸΊδΊŽη¬‘θ„Έθ‘₯ε……θ°ƒζ•΄θ€Œζ₯。 + +YARM-warn-no-return-possible=注意!YARMε·²η»ι—εΏ˜οΌˆζˆ–ζ Ήζœ¬δΈηŸ₯ι“οΌ‰ζ‚¨ηš„ηŽ©εΆθ§’色εžδ½“γ€‚ε¦‚ζžœζ‚¨θƒ½εœ¨δΈ–η•ŒδΈ­ζ‰Ύεˆ°εƒδ»¬οΌŒθ―·ε°†ε…‰ζ ‡ζŒ‡ε‘εƒδ»¬εΉΆι”ε…₯ζŽ§εˆΆε°ε‘½δ»€: /c remote.call("YARM", "reset_player", game.player.index) + +YARM-err-site-name-too-long=ζ³¨ζ„οΌη›‘ζ΅‹εŒΊεŸŸεη§°δΈεΎ—θΆ…θΏ‡__1__δΈͺε­—η¬¦ι•ΏεΊ¦οΌŒθ―·δ½Ώη”¨θΎƒηŸ­ηš„εη§°οΌ + +YARM-site-submitted=ε·²ζ·»εŠ η›‘ζ΅‹εŒΊεŸŸγ€Œ__1__γ€ηš„__2__ __3__。 +YARM-site-expanded=η›‘ζ΅‹εŒΊεŸŸγ€Œ__1__γ€ε·²ζ›΄ζ–°οΌŒηŽ°εœ¨δΈΊ __2__ __3__ (__4__)。 + +YARM-ore-per-minute=__1__/m +YARM-time-to-deplete=__1__ +YARM-etd-day-fragment=__1__倩 +YARM-etd-hour-fragment=__1__ζ—Ά +YARM-etd-never=永不 +YARM-etd-under-1m=<1m +YARM-etd-now=现在 + +YARM-site-rename-title=ι‡ε‘½εγ€Œ__1__」 +YARM-site-rename-confirm=ζ‰§θ‘Œ +YARM-site-rename-cancel=δΈοΌŒη­‰η­‰οΌŒη—啦 + +YARM-infinite-entity-count=∞ - __1__x + +[entity-name] +rm_overlay=衄源覆盖 + +[item-name] +yarm-selector-tool=衄源监桋 + +[item-description] +yarm-selector-tool=δΈθ¦εœ¨εΏ«ζ·ζ δΈŠδ½Ώη”¨ζ­€οΌŒθΏ™ε°†δΈδΌšη”Ÿζ•ˆγ€‚θ€ŒεΊ”δ»ŽεΏ«ζ·ε›Ύζ ‡(ζˆ–δ½Ώη”¨εΏ«ζ·ι”)ζ₯使用εƒγ€‚ + +[shortcut-name] +yarm-selector=衄源监桋 (__CONTROL__get-yarm-selector__) + +[controls] +get-yarm-selector=使用衄源监桋 + +[mod-setting-name] +YARM-entities-per-tick=每tickη›‘ζ΅‹εžδ½“ +YARM-ticks-between-checks=衄源监桋更新tickι—΄ιš” +YARM-overlay-step=衄源覆盖 +YARM-warn-timeleft=衄源提醒小既数 +YARM-warn-timeleft_totals=总衄源提醒小既数 +YARM-map-markers=ε―η”¨εœ°ε›Ύζ ‡η­Ύ +YARM-order-by=θ΅„ζΊεˆ—θ‘¨ζŽ’εΊδΎζ +YARM-site-prefix-with-surface=δ»₯θ‘¨ι’εη§°εšδΈΊη›‘ζ΅‹εŒΊεŸŸεη§°ηš„ε‰ηΌ€ +YARM-debug-profiling=(DebugοΌ‰ε―η”¨εˆ†ζžθΎ“ε‡Ί + +YARM-adjust-for-productivity=ε·²η ”η©Άηš„δΊ§θƒ½εŠ ζˆθ°ƒζ•΄ε€Ό +YARM-productivity-show-raw-and-adjusted=εŒζ—Άζ˜Ύη€Ίεˆε§‹ε€Όε’Œθ°ƒζ•΄ε€Ό +YARM-productivity-parentheses-part-is=ζ‹¬ε·δΈ­ζ˜―ε“ͺδΈͺε€Ό +YARM-grow-limit=η›‘ζ΅‹εŒΊεŸŸε’žι•Ώι™εˆΆ +YARM-adjust-over-percentage-sites=θ°ƒζ•΄η›‘ζ΅‹εŒΊεŸŸθΆ…θΏ‡100% + +[mod-setting-description] +YARM-ticks-between-checks=当一δΈͺθ΅„ζΊη‚Ήθ’«η›‘ζ΅‹ζ—ΆοΌŒεƒηš„衄源量εͺζ ΉζθΏ™δΈͺε€ΌοΌŒζ―NδΈͺ游戏tickζ›΄ζ–°δΈ€ζ¬‘οΌˆ60tick=1η§’οΌ‰γ€‚ε’žεŠ ζ•°ε€Όε―ζ”Ήε–„UPSοΌŒδ»£δ»·ζ˜―ιœ€θ¦ζ›΄ι•Ώηš„ζ—Άι—΄ζ₯ζ›΄ζ–°η›‘ζ΅‹εŒΊεŸŸγ€‚ +YARM-entities-per-tick=ε―ΉδΊŽζ­£εœ¨θ’«η›‘ζ΅‹ηš„θ΅„ζΊοΌŒθΏ™ε°†ζŽ§εˆΆεœ¨δΈ€δΈͺζ ‡θ°ε†…ζŸ₯θ―’ε€šε°‘δΈͺ衄源εžδ½“οΌˆηŸΏηŸ³οΌ‰οΌˆι€šεΈΈζ―η§’60δΈͺζ›΄ζ–°1δΈͺ)。减少数值可改善UPS。 +YARM-overlay-step=ζ·»εŠ ε·¨ε€§ηš„θ΅„ζΊη‚Ήε―θƒ½ε―Όθ‡΄FPSε€§εΉ…δΈ‹ι™γ€‚ζ”Ήε˜ε εŠ ε±‚ηš„η¨€η–εΊ¦ε°†ε‡ε°‘FPSηš„δΈ‹ι™γ€‚ θΎη½1δΈΊε…¨θ¦†η›–οΌŒ2δΈΊ1/4,3δΈΊ1/9,δ»₯ζ­€η±»ζŽ¨γ€‚ +YARM-warn-timeleft=ζι†’ηŽ©εΆε•δΈͺη›‘ζ΅‹εŒΊεŸŸηš„ε‰©δ½™θ΅„ζΊε°ζ—Άζ•°γ€‚ +YARM-warn-timeleft_totals==ε‰©δ½™θ΅„ζΊηš„ε°ζ—Άζ•°οΌŒε¦‚ζžœδΈ€δΈͺηŸΏηŸ³η±»εž‹ζœ‰ε€šδΈͺεΌ€ι‡‡δΈ­ηš„η›‘ζ΅‹εŒΊεŸŸοΌŒζι†’ηŽ©εΆηš„总数。 +YARM-map-markers=εœ¨εœ°ε›ΎδΈŠζ˜Ύη€ΊεŒ…ε«εœ°η‚Ήεη§°εŠε…Άε½“ε‰ε†…εΉηš„ζ ‡θ°οΌŒεΉΆθ‡ͺεŠ¨ζ›΄ζ–°γ€‚ζ³¨ζ„οΌšζ›΄ζ”Ήζ­€θΎη½εŽοΌŒε―θƒ½ιœ€θ¦ε‡ η§’ι’Ÿζ‰θƒ½ηœ‹εˆ°η»“ζžœοΌ +YARM-warn-percent=θ­¦ε‘ŠηŽ©εΆε‰©δ½™θ΅„ζΊηš„η™Ύεˆ†ζ―”γ€‚ +YARM-order-by=ζ›΄ζ”ΉYARMεˆ—θ‘¨δΈ­η›‘ζ΅‹εŒΊεŸŸηš„ζ˜Ύη€Ίι‘ΊεΊγ€‚ +YARM-site-prefix-with-surface=ε°†θ‘¨ι’εη§°δ½œδΈΊη›‘ζ΅‹εŒΊεŸŸεη§°ηš„ε‰ηΌ€γ€‚ι€‚η”¨δΊŽε…·ζœ‰ε€šδΈͺθ‘¨ι’ηš„ζΈΈζˆγ€‚ +YARM-debug-profiling=ε―η”¨εŽοΌŒε°†ζœ‰ε…³tickη”¨ζ—Άηš„δΈ€δΊ›δΏ‘ζ―θΎ“ε‡Ίεˆ°δΏ‘ζ―ηͺ—ε£ε’Œfactorio-current.log。 +YARM-adjust-for-productivity=ζ˜Ύη€Ίηš„ζ•°ε€Όη»ε·²η ”η©Άηš„ι‡‡ηŸΏδΊ§θƒ½εŠ ζˆθ€Œθ°ƒζ•΄γ€‚ +YARM-productivity-show-raw-and-adjusted=ζ•°ε€Όζ˜Ύη€Ίεˆε§‹ζ•°ε€Όε’Œε·²η ”η©Άηš„ι‡‡ηŸΏδΊ§θƒ½εŠ ζˆηš„ζ•°ε€ΌοΌŒε…ΆδΈ­δΈ€δΈͺεœ¨ζ‹¬ε·δΈ­οΌˆι»˜θ€οΌšεœ¨ζ‹¬ε·δΈ­ζ˜Ύη€Ίεˆε§‹ζ•°ε€ΌοΌ‰γ€‚ +YARM-productivity-parentheses-part-is=ζ›΄ζ”Ήζ‹¬ε·δΈ­ζ˜Ύη€Ίηš„ζ•°ε€ΌοΌˆεˆε§‹ζˆ–ε·²η ”η©Άηš„ι‡‡ηŸΏδΊ§θƒ½εŠ ζˆοΌ‰γ€‚ +YARM-grow-limit=η›‘ζ΅‹εŒΊεŸŸεˆ›ε»Ίζ—ΆδΈŽε’žι•Ώηš„ζœ€ε€§ι•ΏεΊ¦γ€‚-1ε³ζ— ι™ε’žι•Ώγ€‚0ε³ζ— ε’žι•Ώγ€‚θΆ…θΏ‡0ε³ζœ‰ι™ε’žι•Ώγ€‚ +YARM-adjust-over-percentage-sites=ε―η”¨εŽοΌŒε¦‚ζžœε½“ε‰θ΅„ζΊι‡θΆ…θΏ‡ζœ€εˆζ£€ζ΅‹ηš„θ΅„ζΊι‡οΌŒη›‘ζ΅‹εŒΊεŸŸε°†θΎη½ε…Άβ€œεˆε§‹ζ•°ι‡β€δ»₯εŒΉι…ε½“ε‰ζ•°ι‡γ€‚ε―η”¨δ½œδΈ΄ζ—ΆδΏε€ζˆ–ζ°ΈδΉ…ζ£€ζŸ₯。 + + +[string-mod-setting] +YARM-order-by-percent-remaining=ε‰©δ½™η™Ύεˆ†ζ―” +YARM-order-by-ore-type=ηŸΏηŸ³η±»εž‹οΌŒη„ΆεŽζ˜―ε‰©δ½™η™Ύεˆ†ζ―” +YARM-order-by-ore-count=ε‰©δ½™ηŸΏηŸ³ζ•°ι‡ +YARM-order-by-etd=δΌ°θ‘ζΆˆθ€—ζ—Άι—΄ +YARM-productivity-parentheses-part-is-adjusted=δΈΊε·²η ”η©Άηš„ι‡‡ηŸΏδΊ§θƒ½εŠ ζˆθ€Œθ°ƒζ•΄ +YARM-productivity-parentheses-part-is-raw=εˆε§‹ + + +[YARM-tooltips] +rename-site-named=ι‡ε‘½εη›‘ζ΅‹εŒΊεŸŸγ€Œ__1__」 +rename-site-cancel=ε–ζΆˆι‡ε‘½εη›‘ζ΅‹εŒΊεŸŸ +goto-site=ζŸ₯ηœ‹ζ­€η›‘ζ΅‹εŒΊεŸŸ +delete-site=εˆ ι™€ζ­€η›‘ζ΅‹εŒΊεŸŸ +delete-site-confirm=η‘θ€εˆ ι™€ζ­€η›‘ζ΅‹εŒΊεŸŸοΌˆδΈε―逆!)\nε¦‚ζžœζ‚¨δ»€δΉˆιƒ½δΈεšεƒδΌšθ‡ͺεŠ¨ε–ζΆˆ +expand-site=ζ‰©ε±•ζ­€η›‘ζ΅‹εŒΊεŸŸ +expand-site-cancel=ε–ζΆˆζ‰©ε±•ζ­€η›‘ζ΅‹εŒΊεŸŸ +filter-none=η­›ι€‰οΌšζ— η›‘ζ΅‹εŒΊεŸŸοΌˆιšθ—YARMζ•°ζοΌ‰ +filter-warnings=η­›ι€‰οΌšδ»…θ­¦ε‘Š +filter-all=η­›ι€‰οΌšζ‰€ζœ‰η›‘ζ΅‹εŒΊεŸŸ +toggle-bg=εˆ‡ζ’θƒŒζ™― + +[YARM-warnings] +discard-single-missing-ore-type-single=[YARM]θ­¦ε‘ŠοΌšζ— ζ•ˆη›‘ζ΅‹εŒΊεŸŸγ€Œ__1__」ζœͺηŸ₯ηš„ηŸΏηŸ³η±»εž‹γ€Œ__2__γ€γ€‚ε¦‚ζœ‰εΏ…θ¦οΌŒθ―·ι‡ζ–°εˆ›ε»Ίη›‘ζ΅‹εŒΊεŸŸγ€‚ +discard-multi-missing-ore-type-single=[YARM]θ­¦ε‘ŠοΌšζ— ζ•ˆη›‘ζ΅‹εŒΊεŸŸγ€Œ__1__」ζœͺηŸ₯ηš„ηŸΏηŸ³η±»εž‹γ€Œ__2__γ€γ€‚ε¦‚ζœ‰εΏ…θ¦οΌŒθ―·ι‡ζ–°εˆ›ε»Ίη›‘ζ΅‹εŒΊεŸŸγ€‚ +discard-multi-missing-ore-type-multi=[YARM]θ­¦ε‘ŠοΌšζ— ζ•ˆη›‘ζ΅‹εŒΊεŸŸγ€Œ__1__」ζœͺηŸ₯ηš„ηŸΏηŸ³η±»εž‹γ€Œ__2__γ€γ€‚ε¦‚ζœ‰εΏ…θ¦οΌŒθ―·ι‡ζ–°εˆ›ε»Ίη›‘ζ΅‹εŒΊεŸŸγ€‚ + + + +[mod-name] +YARM=YARM 衄源监桋 + +[mod-description] +YARM=εΈεŠ©ζ‚¨θ·ŸθΈͺζ‚¨ηš„ι‡‡ηŸΏεœ°οΌŒεΉΆζδΎ›ζœ‰η”¨ηš„ζ•°ζοΌŒε¦‚εΌ€ι‡‡η™Ύεˆ†ζ―”ε’ŒδΌ°θ‘ηš„θ€—ε°½ζ—Άι—΄γ€‚ diff --git a/YARM/prototypes/legacy.lua b/YARM/prototypes/legacy.lua new file mode 100644 index 00000000..d0013bf8 --- /dev/null +++ b/YARM/prototypes/legacy.lua @@ -0,0 +1,75 @@ +--[[ + +This file is for legacy prototypes: we keep them becausethey're necessary to +allow migrating from old versions up to the current one. + +]] + + +-- BEGIN: 0.8.0 removed remote viewing; remote viewers need to keep existing +-- to prevent uncontrolled reset of player data. + +data:extend( + { + { + type = "resource-category", + name = "empty-resource-category", + }, + { + type = "recipe-category", + name = "empty-recipe-category", + }, + }) + +local empty_animation = { + filename = "__YARM__/graphics/nil.png", + priority = "medium", + width = 1, + height = 1, + direction_count = 18, + frame_count = 1, + animation_speed = 1, + shift = { 0, 0 }, + axially_symmetrical = false, +} + +local empty_anim_level = { + idle = empty_animation, + idle_mask = empty_animation, + idle_with_gun = empty_animation, + idle_with_gun_mask = empty_animation, + mining_with_hands = empty_animation, + mining_with_hands_mask = empty_animation, + mining_with_tool = empty_animation, + mining_with_tool_mask = empty_animation, + running_with_gun = empty_animation, + running_with_gun_mask = empty_animation, + running = empty_animation, + running_mask = empty_animation, +} + +local fake_player = table.deepcopy(data.raw.character.character) +fake_player.name = "yarm-remote-viewer" +fake_player.crafting_categories = { "empty-recipe-category" } +fake_player.mining_categories = { "empty-resource-category" } +fake_player.max_health = 100 +fake_player.inventory_size = 0 +fake_player.build_distance = 0 +fake_player.drop_item_distance = 0 +fake_player.reach_distance = 0 +fake_player.reach_resource_distance = 0 +fake_player.mining_speed = 0 +fake_player.running_speed = 0 +fake_player.distance_per_frame = 0 +fake_player.animations = { + level1 = empty_anim_level, + level2addon = empty_anim_level, + level3addon = empty_anim_level, +} +fake_player.light = { { intensity = 0, size = 0 } } +fake_player.flags = { "placeable-off-grid", "not-on-map", "not-repairable" } +fake_player.collision_mask = { "ground-tile" } + +data:extend({ fake_player }) + +-- END: 0.8.0 removed remote viewing diff --git a/YARM/prototypes/prototypes.lua b/YARM/prototypes/prototypes.lua new file mode 100644 index 00000000..059a4608 --- /dev/null +++ b/YARM/prototypes/prototypes.lua @@ -0,0 +1,269 @@ +data:extend( + { + { + type = 'custom-input', + name = 'get-yarm-selector', + key_sequence = 'ALT + Y', + consuming = 'none' + }, + + { + type = 'shortcut', + name = 'yarm-selector', + order = "a[yarm]", + action = 'spawn-item', + item_to_spawn = 'yarm-selector-tool', + style = 'green', + icon = { + filename = '__YARM__/graphics/resource-monitor-x32-white.png', + priority = 'extra-high-no-scale', + size = 32, + scale = 1, + flags = { 'icon' }, + }, + small_icon = { + filename = '__YARM__/graphics/resource-monitor-x24.png', + priority = 'extra-high-no-scale', + size = 24, + scale = 1, + flags = { 'icon' }, + }, + disabled_small_icon = { + filename = '__YARM__/graphics/resource-monitor-x24-white.png', + priority = 'extra-high-no-scale', + size = 24, + scale = 1, + flags = { 'icon' }, + }, + }, + + { + type = 'selection-tool', + name = 'yarm-selector-tool', + icon = '__YARM__/graphics/resource-monitor.png', + icon_size = 32, + flags = { 'only-in-cursor', 'hidden', 'spawnable' }, + stack_size = 1, + stackable = false, + selection_color = { g = 1 }, + selection_mode = 'any-entity', + alt_selection_color = { g = 1, b = 1 }, + alt_selection_mode = { 'nothing' }, + selection_cursor_box_type = 'copy', + alt_selection_cursor_box_type = 'copy', + entity_filter_mode = 'whitelist', + entity_type_filters = { 'resource' }, + }, + + { + type = 'container', + name = 'rm_overlay', + flags = { 'placeable-neutral', 'player-creation', 'not-repairable' }, + icon = '__YARM__/graphics/rm_Overlay.png', + icon_size = 32, + + max_health = 1, + order = 'z[resource-monitor]', + + collision_mask = { 'resource-layer' }, + collision_box = { { -0.35, -0.35 }, { 0.35, 0.35 } }, + + selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + inventory_size = 1, + picture = + { + filename = '__YARM__/graphics/rm_Overlay.png', + priority = 'extra-high', + width = 32, + height = 32, + shift = { 0.0, 0.0 } + } + }, + }) + +local default_gui = data.raw['gui-style'].default + +local red_label = { + type = 'label_style', + parent = 'label', + font_color = { r = 1, g = 0.2, b = 0.2 } +} +default_gui.YARM_err_label = red_label + +local function arb_graphics(xpos, ypos, size) + return { + filename = '__YARM__/graphics/gui.png', + priority = 'extra-high-no-scale', + width = size, + height = size, + x = xpos, + y = ypos, + } +end + +local function button_graphics(xpos, ypos) + return arb_graphics(xpos, ypos, 16) +end + +default_gui.YARM_outer_frame_no_border = { + type = 'frame_style', + parent = 'outer_frame', + graphical_set = {} +} + +default_gui.YARM_outer_frame_no_border_bg = { + type = 'frame_style', + parent = 'outer_frame', + graphical_set = arb_graphics(3, 3, 1) +} +default_gui.YARM_outer_frame_no_border_bg.graphical_set.blend_mode = 'multiplicative' + +default_gui.YARM_button_with_icon = { + type = 'button_style', + parent = 'slot_button', + + scalable = true, + + top_padding = 1, + right_padding = 1, + bottom_padding = 1, + left_padding = 1, + + width = 16, + height = 16, + + default_graphical_set = button_graphics(0, 0), + hovered_graphical_set = button_graphics(16, 0), + clicked_graphical_set = button_graphics(32, 0), +} + +local function make_filter_buttons(base_name, tex_y) + default_gui[base_name] = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, tex_y), + hovered_graphical_set = button_graphics(16, tex_y), + clicked_graphical_set = button_graphics(32, tex_y), + } + + default_gui[base_name .. '_on'] = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(16, tex_y), + hovered_graphical_set = button_graphics(0, tex_y), + clicked_graphical_set = button_graphics(32, tex_y), + } +end + +make_filter_buttons('YARM_filter_none', 48) +make_filter_buttons('YARM_filter_warnings', 16) +make_filter_buttons('YARM_filter_all', 32) +make_filter_buttons('YARM_toggle_surfacesplit', 64) +make_filter_buttons('YARM_toggle_bg', 80) +make_filter_buttons('YARM_toggle_lite', 208) + +default_gui.YARM_overlay_site = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 64), + hovered_graphical_set = button_graphics(16, 64), + clicked_graphical_set = button_graphics(32, 64), +} + +default_gui.YARM_goto_site = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 80), + hovered_graphical_set = button_graphics(16, 80), + clicked_graphical_set = button_graphics(32, 80), +} + +default_gui.YARM_delete_site = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 96), + hovered_graphical_set = button_graphics(16, 96), + clicked_graphical_set = button_graphics(32, 96), +} + +default_gui.YARM_rename_site = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 112), + hovered_graphical_set = button_graphics(16, 112), + clicked_graphical_set = button_graphics(32, 112), +} + +default_gui.YARM_delete_site_confirm = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 128), + hovered_graphical_set = button_graphics(16, 128), + clicked_graphical_set = button_graphics(32, 128), +} + +default_gui.YARM_goto_site_cancel = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 144), + hovered_graphical_set = button_graphics(16, 144), + clicked_graphical_set = button_graphics(32, 144), +} + +default_gui.YARM_rename_site_cancel = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 160), + hovered_graphical_set = button_graphics(16, 160), + clicked_graphical_set = button_graphics(32, 160), +} + +default_gui.YARM_expand_site = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 176), + hovered_graphical_set = button_graphics(16, 176), + clicked_graphical_set = button_graphics(32, 176), +} + +default_gui.YARM_expand_site_cancel = { + type = 'button_style', + parent = 'YARM_button_with_icon', + + default_graphical_set = button_graphics(0, 192), + hovered_graphical_set = button_graphics(16, 192), + clicked_graphical_set = button_graphics(32, 192), +} + +default_gui.YARM_site_table = { + type = 'table_style', + horizontal_spacing = 3, + vertical_spacing = 1, +} + + +default_gui.YARM_buttons_h = { + type = 'horizontal_flow_style', + parent = 'horizontal_flow', + horizontal_spacing = 1, + vertical_spacing = 5, + top_padding = 4, +} + +default_gui.YARM_buttons_v = { + type = 'vertical_flow_style', + parent = 'vertical_flow', + horizontal_spacing = 1, + vertical_spacing = 5, + top_padding = 4, +} diff --git a/YARM/remote.lua b/YARM/remote.lua new file mode 100644 index 00000000..1f3c31d6 --- /dev/null +++ b/YARM/remote.lua @@ -0,0 +1,67 @@ +require "resmon" +local mod_gui = require("mod-gui") + +local interface = {} + +function interface.how_many_entities_tracked(player_name_or_index) + local player = game.players[player_name_or_index] + player.print({ "", "Tracking ", #global.ore_tracker.entities, " entities" }) +end + +function interface.reset_ui(player_name_or_index) + local player = game.players[player_name_or_index] + local frame_flow = mod_gui.get_frame_flow(player) + local root = frame_flow.YARM_root + if root and root.valid then root.destroy() end +end + +function interface.reset_player(player_name_or_index) + local player = game.players[player_name_or_index] + local player_data = global.player_data[player.index] + + player.character = player.selected + player_data.viewing_site = nil + player_data.real_character = nil + player_data.remote_viewer = nil +end + +function interface.get_current_filter(player_name_or_index) + local player = game.players[player_name_or_index] + local player_data = global.player_data[player.index] + + return player_data.active_filter or 'none' +end + +function interface.set_filter(player_name_or_index, new_filter) + local player = game.players[player_name_or_index] + local player_data = global.player_data[player.index] + local old_filter = player_data.active_filter + + -- TODO Could use some validation here... what values are actually allowed, that kind of thing. + player_data.active_filter = new_filter or 'none' + + resmon.update_ui_filter_buttons(player, player_data.active_filter) + resmon.update_ui(player) + + return old_filter +end + +function interface.hide_expando(player_name_or_index) + log("hide_expando is no longer supported. Try set_filter(player_name_or_index, 'none' or 'warnings' or 'all')") + return false +end + +function interface.show_expando(player_name_or_index) + log("show_expando is no longer supported. Try set_filter(player_name_or_index, 'none' or 'warnings' or 'all')") + return false +end + +function interface.get_on_site_updated_event_id() + return on_site_updated +end + +function interface.get_global_data() + return global +end + +remote.add_interface("YARM", interface) diff --git a/YARM/resmon.lua b/YARM/resmon.lua new file mode 100644 index 00000000..d9a645d6 --- /dev/null +++ b/YARM/resmon.lua @@ -0,0 +1,1773 @@ +require "util" +require "libs/array_pair" +require "libs/ore_tracker" +local mod_gui = require("mod-gui") +local v = require "semver" + +local mod_version = "0.10.14" + +-- Sanity: site names aren't allowed to be longer than this, to prevent them +-- kicking the buttons off the right edge of the screen +local MAX_SITE_NAME_LENGTH = 50 + +resmon = { + on_click = {}, + endless_resources = {}, + filters = {}, + + -- updated `on_tick` to contain `ore_tracker.get_entity_cache()` + entity_cache = nil, +} + +function string.starts_with(haystack, needle) + return string.sub(haystack, 1, string.len(needle)) == needle +end + +function string.ends_with(haystack, needle) + return string.sub(haystack, -string.len(needle)) == needle +end + +function resmon.init_globals() + for index, _ in pairs(game.players) do + resmon.init_player(index) + end +end + +function resmon.on_player_created(event) + resmon.init_player(event.player_index) +end + +-- migration v0.8.0: remove remote viewers and put players back into the right entity if available +local function migrate_remove_remote_viewer(player, player_data) + local real_char = player_data.real_character + if not real_char or not real_char.valid then + player.print { "YARM-warn-no-return-possible" } + return + end + + player.character = real_char + if player_data.remote_viewer and player_data.remote_viewer.valid then + player_data.remote_viewer.destroy() + end + + player_data.real_character = nil + player_data.remote_viewer = nil + player_data.viewing_site = nil +end + + +local function migrate_remove_minimum_resource_amount(force_data) + for _, site in pairs(force_data.ore_sites) do + if site.minimum_resource_amount then site.minimum_resource_amount = nil end + end +end + + +function resmon.init_player(player_index) + local player = game.players[player_index] + resmon.init_force(player.force) + + -- migration v0.7.402: YARM_root now in mod_gui, destroy the old one + local old_root = player.gui.left.YARM_root + if old_root and old_root.valid then old_root.destroy() end + + local root = mod_gui.get_frame_flow(player).YARM_root + if root and root.buttons and ( + -- migration v0.8.0: expando now a set of filter buttons, destroy the root and recreate later + root.buttons.YARM_expando + -- migration v0.TBD: add toggle bg button + or not root.buttons.YARM_toggle_bg + or not root.buttons.YARM_toggle_surfacesplit + or not root.buttons.YARM_toggle_lite) + then + root.destroy() + end + + if not global.player_data then global.player_data = {} end + + local player_data = global.player_data[player_index] + if not player_data then player_data = {} end + + if not player_data.gui_update_ticks or player_data.gui_update_ticks == 60 then player_data.gui_update_ticks = 300 end + + if not player_data.overlays then player_data.overlays = {} end + + if player_data.viewing_site then migrate_remove_remote_viewer(player, player_data) end + + global.player_data[player_index] = player_data +end + +function resmon.init_force(force) + if not global.force_data then global.force_data = {} end + + local force_data = global.force_data[force.name] + if not force_data then force_data = {} end + + if not force_data.ore_sites then + force_data.ore_sites = {} + else + resmon.migrate_ore_sites(force_data) + resmon.migrate_ore_entities(force_data) + + resmon.sanity_check_sites(force, force_data) + end + + migrate_remove_minimum_resource_amount(force_data) + + global.force_data[force.name] = force_data +end + +local function table_contains(haystack, needle) + for _, candidate in pairs(haystack) do + if candidate == needle then + return true + end + end + + return false +end + + +function resmon.sanity_check_sites(force, force_data) + local discarded_sites = {} + local missing_ores = {} + + for name, site in pairs(force_data.ore_sites) do + local entity_prototype = game.entity_prototypes[site.ore_type] + if not entity_prototype or not entity_prototype.valid then + discarded_sites[#discarded_sites + 1] = name + if not table_contains(missing_ores, site.ore_type) then + missing_ores[#missing_ores + 1] = site.ore_type + end + + if site.chart_tag and site.chart_tag.valid then + site.chart_tag.destroy() + end + force_data.ore_sites[name] = nil + end + end + + if #discarded_sites == 0 then return end + + local discard_message = "YARM-warnings.discard-multi-missing-ore-type-multi" + if #missing_ores == 1 then + discard_message = "YARM-warnings.discard-multi-missing-ore-type-single" + if #discarded_sites == 1 then + discard_message = "YARM-warnings.discard-single-missing-ore-type-single" + end + end + + force.print { discard_message, table.concat(discarded_sites, ', '), table.concat(missing_ores, ', ') } + log { "", force.name, ' was warned: ', { discard_message, table.concat(discarded_sites, ', '), + table.concat(missing_ores, ', ') } } +end + +local function position_to_string(entity) + -- scale it up so (hopefully) any floating point component disappears, + -- then force it to be an integer with %d. not using util.positiontostr + -- as it uses %g and keeps the floating point component. + return string.format("%d,%d", entity.x * 100, entity.y * 100) +end + + +function resmon.migrate_ore_entities(force_data) + for name, site in pairs(force_data.ore_sites) do + -- v0.7.15: instead of tracking entities, track their positions and + -- re-find the entity when needed. + if site.known_positions then + site.known_positions = nil + end + if site.entities then + site.entity_positions = array_pair.new() + for _, ent in pairs(site.entities) do + if ent.valid then + array_pair.insert(site.entity_positions, ent.position) + end + end + site.entities = nil + end + + -- v0.7.107: change to using the site position as a table key, to + -- allow faster searching for already-added entities. + if site.entity_positions then + site.entity_table = {} + site.entity_count = 0 + local iter = array_pair.iterator(site.entity_positions) + while iter.has_next() do + pos = iter.next() + local key = position_to_string(pos) + site.entity_table[key] = pos + site.entity_count = site.entity_count + 1 + end + site.entity_positions = nil + end + + -- v0.8.6: The entities are now tracked by the ore_tracker, and + -- sites need only maintain ore tracker indices. + if site.entity_table then + site.tracker_indices = {} + site.entity_count = 0 + + for _, pos in pairs(site.entity_table) do + local ent = site.surface.find_entity(site.ore_type, pos) + + if ent and ent.valid then + local index = ore_tracker.add_entity(ent) + site.tracker_indices[index] = true + site.entity_count = site.entity_count + 1 + end + end + + site.entity_table = nil + end + end +end + +function resmon.migrate_ore_sites(force_data) + for name, site in pairs(force_data.ore_sites) do + if not site.remaining_permille then + site.remaining_permille = math.floor(site.amount * 1000 / site.initial_amount) + end + if not site.ore_per_minute then site.ore_per_minute = 0 end + if not site.scanned_ore_per_minute then site.scanned_ore_per_minute = 0 end + if not site.lifetime_ore_per_minute then site.lifetime_ore_per_minute = 0 end + if not site.etd_minutes then site.etd_minutes = 1 / 0 end + if not site.scanned_etd_minutes then site.scanned_etd_minutes = -1 end + if not site.lifetime_etd_minutes then site.lifetime_etd_minutes = 1 / 0 end + if not site.etd_is_lifetime then site.etd_is_lifetime = 1 end + if not site.etd_minutes_delta then site.etd_minutes_delta = 0 end + if not site.ore_per_minute_delta then site.ore_per_minute_delta = 0 end + end +end + +local function find_resource_at(surface, position) + -- The position we get is centered in its tile (e.g., {8.5, 17.5}). + -- Sometimes, the resource does not cover the center, so search the full tile. + local top_left = { x = position.x - 0.5, y = position.y - 0.5 } + local bottom_right = { x = position.x + 0.5, y = position.y + 0.5 } + + local stuff = surface.find_entities_filtered { area = { top_left, bottom_right }, type = 'resource' } + if #stuff < 1 then return nil end + + return stuff[1] -- there should never be another resource at the exact same coordinates +end + + +local function find_center(area) + local xpos = (area.left + area.right) / 2 + local ypos = (area.top + area.bottom) / 2 + return { x = xpos, y = ypos } +end + + +local function find_center_tile(area) + local center = find_center(area) + return { x = math.floor(center.x), y = math.floor(center.y) } +end + + +function resmon.on_player_selected_area(event) + if event.item ~= 'yarm-selector-tool' then return end + + local player_data = global.player_data[event.player_index] + local entities = event.entities + + if #entities < 1 then + entities = { find_resource_at(event.surface, { + x = 0.5 + math.floor((event.area.left_top.x + event.area.right_bottom.x) / 2), + y = 0.5 + math.floor((event.area.left_top.y + event.area.right_bottom.y) / 2) + }) } + end + + if #entities < 1 then + -- if we have an expanding site, submit it. else, just drop the current site + if player_data.current_site and player_data.current_site.is_site_expanding then + resmon.submit_site(event.player_index) + else + resmon.clear_current_site(event.player_index) + end + return + end + + local entities_by_type = {} + for _, entity in pairs(entities) do + if entity.prototype.type == 'resource' then + entities_by_type[entity.name] = entities_by_type[entity.name] or {} + table.insert(entities_by_type[entity.name], entity) + end + end + + player_data.todo = player_data.todo or {} + for _, group in pairs(entities_by_type) do table.insert(player_data.todo, group) end + -- note: resmon.update_players() (via on_tick) will continue the operation from here +end + +function resmon.clear_current_site(player_index) + local player = game.players[player_index] + local player_data = global.player_data[player_index] + + player_data.current_site = nil + + while #player_data.overlays > 0 do + table.remove(player_data.overlays).destroy() + end +end + +function resmon.add_resource(player_index, entity) + if not entity.valid then return end + local player = game.players[player_index] + local player_data = global.player_data[player_index] + + if player_data.current_site and player_data.current_site.ore_type ~= entity.name then + if player_data.current_site.finalizing then + resmon.submit_site(player_index) + else + resmon.clear_current_site(player_index) + end + end + + if not player_data.current_site then + player_data.current_site = { + added_at = game.tick, + surface = entity.surface, + force = player.force, + ore_type = entity.name, + ore_name = entity.prototype.localised_name, + tracker_indices = {}, + entity_count = 0, + initial_amount = 0, + amount = 0, + extents = { + left = entity.position.x, + right = entity.position.x, + top = entity.position.y, + bottom = entity.position.y, + }, + next_to_scan = {}, + entities_to_be_overlaid = {}, + next_to_overlay = {}, + etd_minutes = -1, + scanned_etd_minutes = -1, + lifetime_etd_minutes = -1, + ore_per_minute = -1, + scanned_ore_per_minute = -1, + lifetime_ore_per_minute = -1, + etd_is_lifetime = 1, + last_ore_check = nil, -- used for ETD easing; initialized when needed, + last_modified_amount = nil, -- but I wanted to _show_ that they can exist. + etd_minutes_delta = 0, + ore_per_minute_delta = 0, + } + end + + + if player_data.current_site.is_site_expanding then + player_data.current_site.has_expanded = true -- relevant for the console output + if not player_data.current_site.original_amount then + player_data.current_site.original_amount = player_data.current_site.amount + end + end + + resmon.add_single_entity(player_index, entity) + -- note: resmon.scan_current_site() (via on_tick) will continue the operation from here +end + +function resmon.add_single_entity(player_index, entity) + local player_data = global.player_data[player_index] + local site = player_data.current_site + local tracker_index = ore_tracker.add_entity(entity) + + -- Don't re-add the same entity multiple times + if site.tracker_indices[tracker_index] then return end + + -- Reset the finalizing timer + if site.finalizing then site.finalizing = false end + + -- Memorize this entity + site.tracker_indices[tracker_index] = true + site.entity_count = site.entity_count + 1 + table.insert(site.next_to_scan, entity) + site.amount = site.amount + entity.amount + + -- Resize the site bounds if necessary + if entity.position.x < site.extents.left then + site.extents.left = entity.position.x + elseif entity.position.x > site.extents.right then + site.extents.right = entity.position.x + end + if entity.position.y < site.extents.top then + site.extents.top = entity.position.y + elseif entity.position.y > site.extents.bottom then + site.extents.bottom = entity.position.y + end + + -- Give visible feedback, too + resmon.put_marker_at(entity.surface, entity.position, player_data) +end + +function resmon.put_marker_at(surface, pos, player_data) + if math.floor(pos.x) % settings.global["YARM-overlay-step"].value ~= 0 or + math.floor(pos.y) % settings.global["YARM-overlay-step"].value ~= 0 then + return + end + + local overlay = surface.create_entity { name = "rm_overlay", + force = game.forces.neutral, + position = pos } + overlay.minable = false + overlay.destructible = false + overlay.operable = false + table.insert(player_data.overlays, overlay) +end + +local function shift_position(position, direction) + if direction == defines.direction.north then + return { x = position.x, y = position.y - 1 } + elseif direction == defines.direction.northeast then + return { x = position.x + 1, y = position.y - 1 } + elseif direction == defines.direction.east then + return { x = position.x + 1, y = position.y } + elseif direction == defines.direction.southeast then + return { x = position.x + 1, y = position.y + 1 } + elseif direction == defines.direction.south then + return { x = position.x, y = position.y + 1 } + elseif direction == defines.direction.southwest then + return { x = position.x - 1, y = position.y + 1 } + elseif direction == defines.direction.west then + return { x = position.x - 1, y = position.y } + elseif direction == defines.direction.northwest then + return { x = position.x - 1, y = position.y - 1 } + else + return position + end +end + + +function resmon.scan_current_site(player_index) + local site = global.player_data[player_index].current_site + + local to_scan = math.min(30, #site.next_to_scan) + local max_dist = settings.global["YARM-grow-limit"].value + for i = 1, to_scan do + local entity = table.remove(site.next_to_scan, 1) + local entity_position = entity.position + local surface = entity.surface + site.first_center = site.first_center or find_center(site.extents) + + -- Look in every direction around this entity... + for _, dir in pairs(defines.direction) do + -- ...and if there's a resource, add it + local search_pos = shift_position(entity_position, dir) + if max_dist < 0 or util.distance(search_pos, site.first_center) < max_dist then + local found = find_resource_at(surface, search_pos) + if found and found.name == site.ore_type then + resmon.add_single_entity(player_index, found) + end + end + end + end +end + +local function format_number(n) -- credit http://richard.warburton.it + local left, num, right = string.match(n, '^([^%d]*%d)(%d*)(.-)$') + return left .. (num:reverse():gsub('(%d%d%d)', '%1,'):reverse()) .. right +end + + +local si_prefixes = { '', ' k', ' M', ' G' } + +local function format_number_si(n) + for i = 1, #si_prefixes do + if n < 1000 then + return string.format('%d%s', n, si_prefixes[i]) + end + n = math.floor(n / 1000) + end + + -- 1,234 T resources? I guess we should support it... + return string.format('%s T', format_number(n)) +end + + +local octant_names = { + [0] = "E", + [1] = "SE", + [2] = "S", + [3] = "SW", + [4] = "W", + [5] = "NW", + [6] = "N", + [7] = "NE", +} + +local function get_octant_name(vector) + local radians = math.atan2(vector.y, vector.x) + local octant = math.floor(8 * radians / (2 * math.pi) + 8.5) % 8 + + return octant_names[octant] +end + + +function resmon.finalize_site(player_index) + local player = game.players[player_index] + local player_data = global.player_data[player_index] + + local site = player_data.current_site + site.finalizing = true + site.finalizing_since = game.tick + site.initial_amount = site.amount + site.ore_per_minute = 0 + site.remaining_permille = 1000 + + site.center = find_center_tile(site.extents) + + --[[ don't rename a site we've expanded! (if the site name changes it'll create a new site + instead of replacing the existing one) ]] + if not site.is_site_expanding then + site.name = string.format("%s %d", get_octant_name(site.center), util.distance({ x = 0, y = 0 }, site.center)) + if settings.global["YARM-site-prefix-with-surface"].value then + site.name = string.format("%s %s", site.surface.name, site.name) + end + end + + resmon.count_deposits(site, site.added_at % settings.global["YARM-ticks-between-checks"].value) +end + +function resmon.update_chart_tag(site) + local is_chart_tag_enabled = settings.global["YARM-map-markers"].value + + if not is_chart_tag_enabled then + if site.chart_tag and site.chart_tag.valid then + -- chart tags were just disabled, so remove them from the world + site.chart_tag.destroy() + site.chart_tag = nil + end + return + end + + if not site.chart_tag or not site.chart_tag.valid then + if not site.force or not site.force.valid or not site.surface.valid then return end + + local chart_tag = { + position = site.center, + text = site.name, + } + site.chart_tag = site.force.add_chart_tag(site.surface, chart_tag) + if not site.chart_tag then return end -- may fail if chunk is not currently charted accd. to @Bilka + end + + local display_value = resmon.generate_display_site_amount(site, nil, 1) + local prototype = game.entity_prototypes[site.ore_type] + site.chart_tag.text = + string.format('%s - %s %s', site.name, display_value, resmon.get_rich_text_for_products(prototype)) + return +end + +function resmon.generate_display_site_amount(site, player, short) + local format_func = short and format_number_si or format_number + local entity_prototype = game.entity_prototypes[site.ore_type] + if resmon.is_endless_resource(site.ore_type, entity_prototype) then + local normal_site_amount = entity_prototype.normal_resource_amount * site.entity_count + local val = (normal_site_amount == 0 and 0) or (100 * site.amount / normal_site_amount) + return site.entity_count .. " x " .. format_number(string.format("%.1f%%", val)) + end + + local amount_display = format_func(site.amount) + if not settings.global["YARM-adjust-for-productivity"].value then return amount_display end + + local amount_prod_display = + format_func(math.floor(site.amount * (1 + (player or site).force.mining_drill_productivity_bonus))) + + if not settings.global["YARM-productivity-show-raw-and-adjusted"].value then + return amount_prod_display + elseif settings.global["YARM-productivity-parentheses-part-is"].value == "adjusted" then + return string.format("%s (%s)", amount_display, amount_prod_display) + else + return string.format("%s (%s)", amount_prod_display, amount_display) + end +end + +function resmon.get_rich_text_for_products(proto) + if not proto or not proto.mineable_properties or not proto.mineable_properties.products then + return '' -- only supporting resource entities... + end + + local result = '' + for _, product in pairs(proto.mineable_properties.products) do + result = result .. string.format('[%s=%s]', product.type, product.name) + end + + return result +end + +function resmon.submit_site(player_index) + local player = game.players[player_index] + local player_data = global.player_data[player_index] + local force_data = global.force_data[player.force.name] + local site = player_data.current_site + + force_data.ore_sites[site.name] = site + resmon.clear_current_site(player_index) + if (site.is_site_expanding) then + if (site.has_expanded) then + -- reset statistics, the site didn't actually just grow a bunch of ore in existing tiles + site.last_ore_check = nil + site.last_modified_amount = nil + + local amount_added = site.amount - site.original_amount + local sign = amount_added < 0 and '' or '+' -- format_number will handle the negative sign for us (if needed) + player.print { "YARM-site-expanded", site.name, format_number(site.amount), site.ore_name, + sign .. format_number(amount_added) } + end + --[[ NB: deliberately not outputting anything in the case where the player cancelled (or + timed out) a site expansion without expanding anything (to avoid console spam) ]] + + if site.chart_tag and site.chart_tag.valid then + site.chart_tag.destroy() + end + else + player.print { "YARM-site-submitted", site.name, format_number(site.amount), site.ore_name } + end + resmon.update_chart_tag(site) + + -- clear site expanding state so we can re-expand the same site again (and get sensible numbers!) + if (site.is_site_expanding) then + site.is_site_expanding = nil + site.has_expanded = nil + site.original_amount = nil + end + resmon.update_force_members_ui(player) +end + +function resmon.is_endless_resource(ent_name, proto) + if resmon.endless_resources[ent_name] ~= nil then + return resmon.endless_resources[ent_name] + end + + if not proto then return false end + + if proto.infinite_resource then + resmon.endless_resources[ent_name] = true + else + resmon.endless_resources[ent_name] = false + end + + return resmon.endless_resources[ent_name] +end + +function resmon.count_deposits(site, update_cycle) + if site.iter_fn then + resmon.tick_deposit_count(site) + return + end + + local site_update_cycle = site.added_at % settings.global["YARM-ticks-between-checks"].value + if site_update_cycle ~= update_cycle then + return + end + + site.iter_fn, site.iter_state, site.iter_key = pairs(site.tracker_indices) + site.update_amount = 0 +end + +function resmon.tick_deposit_count(site) + local index = site.iter_key + + for _ = 1, 1000 do + index = site.iter_fn(site.iter_state, index) + if index == nil then + resmon.finish_deposit_count(site) + return + end + + local tracking_data = resmon.entity_cache[index] + if tracking_data and tracking_data.valid then + site.update_amount = site.update_amount + tracking_data.resource_amount + else + site.tracker_indices[index] = nil -- It's permitted to delete from a table being iterated + site.entity_count = site.entity_count - 1 + end + end + site.iter_key = index +end + +-- as a default case, takes a diff between two values and returns a smoothed +-- easing step. however to force convergence, it does *not* smooth diffs below 1 +-- and clamps smoothed diffs below 10 to be at least 1. +function resmon.smooth_clamp_diff(diff) + if math.abs(diff) < 1 then + return diff + elseif math.abs(diff) < 10 then + return math.abs(diff) / diff + end + + return 0.1 * diff +end + +function resmon.finish_deposit_count(site) + site.iter_key = nil + site.iter_fn = nil + site.iter_state = nil + + if site.last_ore_check then + if not site.last_modified_amount then -- make sure those two values have a default + site.last_modified_amount = site.amount -- + site.last_modified_tick = site.last_ore_check -- + end + local delta_ore_since_last_update = site.last_modified_amount - site.amount + if delta_ore_since_last_update ~= 0 then -- only store the amount and tick from last update if it actually changed + site.last_modified_tick = site.last_ore_check -- + site.last_modified_amount = site.amount -- + end + local delta_ore_since_last_change = (site.update_amount - site.last_modified_amount) -- use final amount and tick to calculate + local delta_ticks = game.tick - site.last_modified_tick -- + local new_ore_per_minute = (delta_ore_since_last_change * 3600 / delta_ticks) -- ease the per minute value over time + local diff_step = resmon.smooth_clamp_diff(new_ore_per_minute - site.scanned_ore_per_minute) -- + site.scanned_ore_per_minute = site.scanned_ore_per_minute + diff_step -- + end + + local entity_prototype = game.entity_prototypes[site.ore_type] + local is_endless = resmon.is_endless_resource(site.ore_type, entity_prototype) + local minimum = is_endless and (site.entity_count * entity_prototype.minimum_resource_amount) or 0 + local amount_left = site.amount - minimum + + site.scanned_etd_minutes = + (site.scanned_ore_per_minute ~= 0 and amount_left / (-site.scanned_ore_per_minute)) + or (amount_left == 0 and 0) + or -1 + + site.amount = site.update_amount + amount_left = site.amount - minimum + site.amount_left = amount_left + if settings.global["YARM-adjust-over-percentage-sites"].value then + site.initial_amount = math.max(site.initial_amount, site.amount) + end + site.last_ore_check = game.tick + + site.remaining_permille = resmon.calc_remaining_permille(site) + + local age_minutes = (game.tick - site.added_at) / 3600 + local depleted = site.initial_amount - site.amount + site.lifetime_ore_per_minute = -depleted / age_minutes + site.lifetime_etd_minutes = + (site.lifetime_ore_per_minute ~= 0 and amount_left / (-site.lifetime_ore_per_minute)) + or (amount_left == 0 and 0) + or -1 + + local old_etd_minutes = site.etd_minutes + local old_ore_per_minute = site.ore_per_minute + if site.scanned_etd_minutes == -1 or site.lifetime_etd_minutes <= site.scanned_etd_minutes then + site.ore_per_minute = site.lifetime_ore_per_minute + site.etd_minutes = site.lifetime_etd_minutes + site.etd_is_lifetime = 1 + else + site.ore_per_minute = site.scanned_ore_per_minute + site.etd_minutes = site.scanned_etd_minutes + site.etd_is_lifetime = 0 + end + site.etd_minutes_delta = site.etd_minutes - old_etd_minutes + site.ore_per_minute_delta = site.ore_per_minute - old_ore_per_minute + + -- these are just to prevent errant NaNs + site.etd_minutes_delta = (site.etd_minutes_delta ~= site.etd_minutes_delta) and 0 or site.etd_minutes_delta + site.ore_per_minute_delta = + (site.ore_per_minute_delta ~= site.ore_per_minute_delta) and 0 or site.ore_per_minute_delta + + resmon.update_chart_tag(site) + + script.raise_event(on_site_updated, { + force_name = site.force.name, + site_name = site.name, + amount = site.amount, + ore_per_minute = site.ore_per_minute, + remaining_permille = site.remaining_permille, + ore_type = site.ore_type, + etd_minutes = site.etd_minutes, + }) +end + +function resmon.calc_remaining_permille(site) + local entity_prototype = game.entity_prototypes[site.ore_type] + local minimum = resmon.is_endless_resource(site.ore_type, entity_prototype) + and (site.entity_count * entity_prototype.minimum_resource_amount) or 0 + local amount_left = site.amount - minimum + local initial_amount_available = site.initial_amount - minimum + return initial_amount_available <= 0 and 0 or math.floor(amount_left * 1000 / initial_amount_available) +end + +local function site_comparator_default(left, right) + if left.remaining_permille ~= right.remaining_permille then + return left.remaining_permille < right.remaining_permille + elseif left.added_at ~= right.added_at then + return left.added_at < right.added_at + else + return left.name < right.name + end +end + + +local function site_comparator_by_ore_type(left, right) + if left.ore_type ~= right.ore_type then + return left.ore_type < right.ore_type + else + return site_comparator_default(left, right) + end +end + + +local function site_comparator_by_ore_count(left, right) + if left.amount ~= right.amount then + return left.amount < right.amount + else + return site_comparator_default(left, right) + end +end + + +local function site_comparator_by_etd(left, right) + -- infinite time to depletion is indicated when etd_minutes == -1 + -- we want sites with infinite depletion time at the end of the list + if left.etd_minutes ~= right.etd_minutes then + if left.etd_minutes >= 0 and right.etd_minutes >= 0 then + -- these are both real etd estimates so sort normally + return left.etd_minutes < right.etd_minutes + else + -- left and right are not equal AND one of them is -1 + -- (they are not both -1 because then they'd be equal) + -- and we want -1 to be at the end of the list + -- so reverse the sort order in this case + return left.etd_minutes > right.etd_minutes + end + else + return site_comparator_default(left, right) + end +end + + +local function site_comparator_by_alpha(left, right) + return left.name < right.name +end + + +local function sites_in_order(sites, comparator) + -- damn in-place table.sort makes us make a copy first... + local ordered_sites = {} + for _, site in pairs(sites) do + table.insert(ordered_sites, site) + end + + table.sort(ordered_sites, comparator) + + local i = 0 + local n = #ordered_sites + return function() + i = i + 1 + if i <= n then return ordered_sites[i] end + end +end + + +local function sites_in_player_order(sites, player) + local order_by = player.mod_settings["YARM-order-by"].value + + local comparator = + (order_by == 'ore-type' and site_comparator_by_ore_type) + or (order_by == 'ore-count' and site_comparator_by_ore_count) + or (order_by == 'etd' and site_comparator_by_etd) + or (order_by == 'alphabetical' and site_comparator_by_alpha) + or site_comparator_default + + return sites_in_order(sites, comparator) +end + +-- NB: filter names should be single words with optional underscores (_) +-- They will be used for naming GUI elements +local FILTER_NONE = "none" +local FILTER_WARNINGS = "warnings" +local FILTER_ALL = "all" + +resmon.filters[FILTER_NONE] = function() return false end +resmon.filters[FILTER_ALL] = function() return true end +resmon.filters[FILTER_WARNINGS] = function(site, player) + local remaining = site.etd_minutes + local threshold_hours = site.is_summary and "timeleft_totals" or "timeleft" + return remaining ~= -1 and remaining <= player.mod_settings["YARM-warn-" .. threshold_hours].value * 60 +end + + +function resmon.update_ui(player) + local player_data = global.player_data[player.index] + local force_data = global.force_data[player.force.name] + local show_sites_summary = player.mod_settings["YARM-show-sites-summary"].value + + local frame_flow = mod_gui.get_frame_flow(player) + local root = frame_flow.YARM_root + if not root then + root = frame_flow.add { type = "frame", + name = "YARM_root", + direction = "horizontal", + style = "YARM_outer_frame_no_border" } + + local buttons = root.add { type = "flow", + name = "buttons", + direction = "vertical", + style = "YARM_buttons_v" } + + buttons.add { type = "button", name = "YARM_filter_" .. FILTER_NONE, style = "YARM_filter_none", + tooltip = { "YARM-tooltips.filter-none" } } + buttons.add { type = "button", name = "YARM_filter_" .. FILTER_WARNINGS, style = "YARM_filter_warnings", + tooltip = { "YARM-tooltips.filter-warnings" } } + buttons.add { type = "button", name = "YARM_filter_" .. FILTER_ALL, style = "YARM_filter_all", + tooltip = { "YARM-tooltips.filter-all" } } + buttons.add { type = "button", name = "YARM_toggle_bg", style = "YARM_toggle_bg", + tooltip = { "YARM-tooltips.toggle-bg" } } + buttons.add { type = "button", name = "YARM_toggle_surfacesplit", style = "YARM_toggle_surfacesplit", + tooltip = { "YARM-tooltips.toggle-surfacesplit" } } + buttons.add { type = "button", name = "YARM_toggle_lite", style = "YARM_toggle_lite", + tooltip = { "YARM-tooltips.toggle-lite" } } + + if not player_data.active_filter then player_data.active_filter = FILTER_WARNINGS end + resmon.update_ui_filter_buttons(player, player_data.active_filter) + end + + if root.sites and root.sites.valid then + root.sites.destroy() + end + + if not force_data or not force_data.ore_sites then return end + + local is_full = root.buttons.YARM_toggle_lite.style.name ~= "YARM_toggle_lite_on" + local column_count = is_full and 12 or 5 + local sites_gui = root.add { type = "table", column_count = column_count, name = "sites", style = "YARM_site_table" } + sites_gui.style.horizontal_spacing = 5 + local column_alignments = sites_gui.style.column_alignments + if is_full then + column_alignments[1] = 'left' -- rename button + column_alignments[2] = 'left' -- surface name + column_alignments[3] = 'left' -- site name + column_alignments[4] = 'right' -- remaining percent + column_alignments[5] = 'right' -- site amount + column_alignments[6] = 'left' -- ore name + column_alignments[7] = 'right' -- ore per minute + column_alignments[8] = 'left' -- ETD + column_alignments[9] = 'right' -- ETD + column_alignments[10] = 'left' -- ETD + column_alignments[11] = 'center' -- ETD + column_alignments[12] = 'left' -- buttons + else + column_alignments[1] = 'left' -- surface name + column_alignments[2] = 'left' -- site name + column_alignments[3] = 'left' -- ore name + column_alignments[4] = 'right' -- ETD + column_alignments[5] = 'left' -- buttons + end + + local site_filter = resmon.filters[player_data.active_filter] or resmon.filters[FILTER_NONE] + local surface_filters = { false } + if root.buttons.YARM_toggle_surfacesplit.style.name == "YARM_toggle_surfacesplit_on" then + surface_filters = resmon.surface_filters() + end + local surface_num = 0 + local rendered_last = false + + for _, surface_filter in pairs(surface_filters) do + local sites = resmon.get_sites_on_surface(force_data, player, surface_filter) + if next(sites) then + local will_render_sites + local will_render_totals + local summary = show_sites_summary and resmon.generate_summaries(player, sites) or {} + for summary_site in sites_in_player_order(summary, player) do + if site_filter(summary_site, player) then will_render_totals = true end + end + for _, site in pairs(sites) do + if site_filter(site, player) then will_render_sites = true end + end + + surface_num = surface_num + 1 + if surface_num > 1 and rendered_last and (will_render_totals or will_render_sites) then + for _ = 1, column_count do sites_gui.add { type = "line" } end + for _ = 1, column_count do sites_gui.add { type = "line" } end + for _ = 1, column_count do sites_gui.add { type = "line" } end + end + rendered_last = rendered_last or will_render_totals or will_render_sites + + local row = 1 + for summary_site in sites_in_player_order(summary, player) do + if resmon.print_single_site(site_filter, summary_site, player, sites_gui, player_data, row, is_full) then + row = row + 1 + end + end + if will_render_totals and will_render_sites then + if is_full then + sites_gui.add { type = "label" }.style.maximal_height = 5 + end + sites_gui.add { type = "label" }.style.maximal_height = 5 + sites_gui.add { type = "label", caption = { "YARM-category-sites" } } + local start = is_full and 4 or 3 + for _ = start, column_count do sites_gui.add { type = "label" }.style.maximal_height = 5 end + end + row = 1 + for _, site in pairs(sites) do + if resmon.print_single_site(site_filter, site, player, sites_gui, player_data, row, is_full) then + row = row + 1 + end + end + end + end +end + +function resmon.get_sites_on_surface(force_data, player, surface_filter) + local filtered_sites = {} + for site in sites_in_player_order(force_data.ore_sites, player) do + if resmon.site_is_on_surface(site, surface_filter) then + table.insert(filtered_sites, site) + end + end + return filtered_sites +end + +function resmon.surface_filters() + local surface_filters = {} + for k in pairs(game.surfaces) do table.insert(surface_filters, k) end + return surface_filters +end + +function resmon.site_is_on_surface(site, surface_filter) + return not surface_filter or site.surface.name == surface_filter +end + +function resmon.generate_summaries(player, sites) + local summary = {} + for _, site in pairs(sites) do + local entity_prototype = game.entity_prototypes[site.ore_type] + local is_endless = resmon.is_endless_resource(site.ore_type, entity_prototype) and 1 or nil + local root = mod_gui.get_frame_flow(player).YARM_root + local summary_id = site.ore_type .. + (root.buttons.YARM_toggle_surfacesplit.style.name == "YARM_toggle_surfacesplit_on" and site.surface.name or "") + if not summary[summary_id] then + summary[summary_id] = { + name = "Total " .. summary_id, + ore_type = site.ore_type, + ore_name = site.ore_name, + initial_amount = 0, + amount = 0, + ore_per_minute = 0, + etd_minutes = 0, + is_summary = 1, + entity_count = 0, + remaining_permille = (is_endless and 0 or 1000), + site_count = 0, + etd_minutes_delta = 0, + ore_per_minute_delta = 0, + surface = site.surface, + } + end + + local summary_site = summary[summary_id] + summary_site.site_count = summary_site.site_count + 1 + summary_site.initial_amount = summary_site.initial_amount + site.initial_amount + summary_site.amount = summary_site.amount + site.amount + summary_site.ore_per_minute = summary_site.ore_per_minute + site.ore_per_minute + summary_site.entity_count = summary_site.entity_count + site.entity_count + summary_site.remaining_permille = resmon.calc_remaining_permille(summary_site) + local minimum = is_endless and (summary_site.entity_count * entity_prototype.minimum_resource_amount) or 0 + local amount_left = summary_site.amount - minimum + summary_site.etd_minutes = + (summary_site.ore_per_minute ~= 0 and amount_left / (-summary_site.ore_per_minute)) + or (amount_left == 0 and 0) + or -1 + summary_site.etd_minutes_delta = summary_site.etd_minutes_delta + (site.etd_minutes_delta or 0) + summary_site.ore_per_minute_delta = summary_site.ore_per_minute_delta + (site.ore_per_minute_delta or 0) + end + return summary +end + +function resmon.on_click.set_filter(event) + local new_filter = string.sub(event.element.name, 1 + string.len("YARM_filter_")) + local player = game.players[event.player_index] + local player_data = global.player_data[event.player_index] + + player_data.active_filter = new_filter + + resmon.update_ui_filter_buttons(player, new_filter) + + resmon.update_ui(player) +end + +function resmon.update_ui_filter_buttons(player, active_filter) + -- rarely, it might be possible to arrive here before the YARM GUI gets created + local root = mod_gui.get_frame_flow(player).YARM_root + -- in that case, leave it for a later update_ui call. + if not root or not root.valid then return end + + local buttons_container = root.buttons + for filter_name, _ in pairs(resmon.filters) do + local is_active_filter = filter_name == active_filter + + local button = buttons_container["YARM_filter_" .. filter_name] + if button and button.valid then + local style_name = button.style.name + local is_active_style = style_name:ends_with("_on") + + if is_active_style and not is_active_filter then + button.style = string.sub(style_name, 1, string.len(style_name) - 3) + elseif is_active_filter and not is_active_style then + button.style = style_name .. "_on" + end + end + end +end + +function resmon.print_single_site(site_filter, site, player, sites_gui, player_data, row, is_full) + if not site_filter(site, player) then return end + + -- TODO: This shouldn't be part of printing the site! It cancels the deletion + -- process after 2 seconds pass. + if site.deleting_since and site.deleting_since + 120 < game.tick then + site.deleting_since = nil + end + + local color = resmon.site_color(site, player) + local el = nil + local root = mod_gui.get_frame_flow(player).YARM_root + + if not site.is_summary then + if is_full then + if player_data.renaming_site == site.name then + sites_gui.add { type = "button", + name = "YARM_rename_site_" .. site.name, + tooltip = { "YARM-tooltips.rename-site-cancel" }, + style = "YARM_rename_site_cancel" } + else + sites_gui.add { type = "button", + name = "YARM_rename_site_" .. site.name, + tooltip = { "YARM-tooltips.rename-site-named", site.name }, + style = "YARM_rename_site" } + end + end + + local surf_name = root.buttons.YARM_toggle_surfacesplit.style.name == "YARM_toggle_surfacesplit_on" + and site.surface.name or "" + el = sites_gui.add { type = "label", name = "YARM_label_surface_" .. site.name, caption = surf_name } + el.style.font_color = color + + el = sites_gui.add { type = "label", name = "YARM_label_site_" .. site.name, caption = site.name } + el.style.font_color = color + else + if is_full then + sites_gui.add { type = "label" } + end + local surface = (root.buttons.YARM_toggle_surfacesplit.style.name == "YARM_toggle_surfacesplit_on" and row == 1) + and site.surface.name or "" + sites_gui.add { type = "label", caption = surface } + local totals = row == 1 and { "YARM-category-totals" } or "" + sites_gui.add { type = "label", caption = totals } + end + + if is_full then + el = sites_gui.add { type = "label", name = "YARM_label_percent_" .. site.name, + caption = string.format("%.1f%%", site.remaining_permille / 10) } + el.style.font_color = color + + local display_amount = resmon.generate_display_site_amount(site, player, nil) + el = sites_gui.add { type = "label", name = "YARM_label_amount_" .. site.name, + caption = display_amount } + el.style.font_color = color + end + + local entity_prototype = game.entity_prototypes[site.ore_type] + el = sites_gui.add { type = "label", name = "YARM_label_ore_name_" .. site.name, + caption = is_full and { "", resmon.get_rich_text_for_products(entity_prototype), " ", site.ore_name } + or resmon.get_rich_text_for_products(entity_prototype) } + el.style.font_color = color + + if is_full then + el = sites_gui.add { type = "label", name = "YARM_label_ore_per_minute_" .. site.name, + caption = resmon.render_speed(site, player) } + el.style.font_color = color + + resmon.render_arrow_for_percent_delta(sites_gui, -1 * site.ore_per_minute_delta, site.ore_per_minute) + end + + el = sites_gui.add { type = "label", name = "YARM_label_etd_" .. site.name, + caption = resmon.time_to_deplete(site) } + el.style.font_color = color + + if is_full then + resmon.render_arrow_for_percent_delta(sites_gui, site.etd_minutes_delta, site.etd_minutes) + + if not site.is_summary then + local etd_icon = site.etd_is_lifetime == 1 and "[img=quantity-time]" or "[img=utility/played_green]" + el = sites_gui.add { type = "label", name = "YARM_label_etd_header_" .. site.name, + caption = { "YARM-time-to-deplete", etd_icon } } + el.style.font_color = color + else + sites_gui.add { type = "label", caption = "" } + end + end + + local site_buttons = sites_gui.add { type = "flow", name = "YARM_site_buttons_" .. site.name, + direction = "horizontal", style = "YARM_buttons_h" } + + if not site.is_summary then + site_buttons.add { type = "button", + name = "YARM_goto_site_" .. site.name, + tooltip = { "YARM-tooltips.goto-site" }, + style = "YARM_goto_site" } + + if is_full then + if site.deleting_since then + site_buttons.add { type = "button", + name = "YARM_delete_site_" .. site.name, + tooltip = { "YARM-tooltips.delete-site-confirm" }, + style = "YARM_delete_site_confirm" } + else + site_buttons.add { type = "button", + name = "YARM_delete_site_" .. site.name, + tooltip = { "YARM-tooltips.delete-site" }, + style = "YARM_delete_site" } + end + + if site.is_site_expanding then + site_buttons.add { type = "button", + name = "YARM_expand_site_" .. site.name, + tooltip = { "YARM-tooltips.expand-site-cancel" }, + style = "YARM_expand_site_cancel" } + else + site_buttons.add { type = "button", + name = "YARM_expand_site_" .. site.name, + tooltip = { "YARM-tooltips.expand-site" }, + style = "YARM_expand_site" } + end + end + end + + return true +end + +function resmon.render_arrow_for_percent_delta(sites_gui, delta, amount) + local percent_delta = (100 * (delta or 0) / (amount or 0)) / 5 + local hue = percent_delta >= 0 and (1 / 3) or 0 + local saturation = math.min(math.abs(percent_delta), 1) + local value = math.min(0.5 + math.abs(percent_delta / 2), 1) + sites_gui.add({ type = "label", caption = (amount == 0 and "") or (delta or 0) >= 0 and "⬆" or "⬇" }).style.font_color = + resmon.hsv2rgb(hue, saturation, value) +end + +function resmon.time_to_deplete(site) + local ups_adjust = settings.global["YARM-nominal-ups"].value / 60 + local minutes = (site.etd_minutes and (site.etd_minutes / ups_adjust)) or -1 + + if minutes == -1 or minutes == math.huge then return { "YARM-etd-never" } end + + local hours = math.floor(minutes / 60) + local days = math.floor(hours / 24) + hours = hours % 24 + minutes = minutes % 60 + local time_frag = { "YARM-etd-hour-fragment", + { "", string.format("%02d", hours), ":", string.format("%02d", math.floor(minutes)) } } + + if days > 0 then + return { "", { "YARM-etd-day-fragment", days }, " ", time_frag } + elseif minutes > 0 then + return time_frag + elseif site.amount_left == 0 then + return { "YARM-etd-now" } + else + return { "YARM-etd-under-1m" } + end +end + +function resmon.render_speed(site, player) + local ups_adjust = settings.global["YARM-nominal-ups"].value / 60 + local speed = ups_adjust * site.ore_per_minute + + local entity_prototype = game.entity_prototypes[site.ore_type] + if resmon.is_endless_resource(site.ore_type, entity_prototype) then + local normal_site_amount = entity_prototype.normal_resource_amount * site.entity_count + local speed_display = (normal_site_amount == 0 and 0) or (100 * speed) / normal_site_amount + return resmon.speed_to_human("%.3f%%", speed_display, -0.001) + end + + local speed_display = resmon.speed_to_human("%.1f", speed, -0.1) + + if not settings.global["YARM-adjust-for-productivity"].value then + return speed_display + end + + local speed_prod = speed * (1 + (player or site).force.mining_drill_productivity_bonus) + local speed_prod_display = resmon.speed_to_human("%.1f", speed_prod, -0.1) + + if not settings.global["YARM-productivity-show-raw-and-adjusted"].value then + return speed_prod_display + elseif settings.global["YARM-productivity-parentheses-part-is"].value == "adjusted" then + return { "", speed_display, " (", speed_prod_display, ")" } + else + return { "", speed_prod_display, " (", speed_display, ")" } + end +end + +function resmon.speed_to_human(format, speed, limit) + local speed_display = + speed < limit and { "YARM-ore-per-minute", format_number(string.format(format, speed)) } or + speed < 0 and { "YARM-ore-per-minute", { "", "<", string.format(format, -0.1) } } or "" + return speed_display +end + +function resmon.site_color(site, player) + local threshold_type = site.is_summary and "timeleft_totals" or "timeleft" + local threshold = player.mod_settings["YARM-warn-" .. threshold_type].value * 60 + local minutes = site.etd_minutes + if minutes == -1 then minutes = threshold end + local factor = (threshold == 0 and 1) or (minutes / threshold) + if factor > 1 then factor = 1 end + local hue = factor / 3 + return resmon.hsv2rgb(hue, 1, 1) +end + +function resmon.hsv2rgb(h, s, v) + local r, g, b + local i = math.floor(h * 6); + local f = h * 6 - i; + local p = v * (1 - s); + local q = v * (1 - f * s); + local t = v * (1 - (1 - f) * s); + i = i % 6 + if i == 0 then + r, g, b = v, t, p + elseif i == 1 then + r, g, b = q, v, p + elseif i == 2 then + r, g, b = p, v, t + elseif i == 3 then + r, g, b = p, q, v + elseif i == 4 then + r, g, b = t, p, v + elseif i == 5 then + r, g, b = v, p, q + end + return { r = r, g = g, b = b } +end + +function resmon.on_click.YARM_rename_confirm(event) + local player = game.players[event.player_index] + local player_data = global.player_data[event.player_index] + local force_data = global.force_data[player.force.name] + + local old_name = player_data.renaming_site + local new_name = player.gui.center.YARM_site_rename.new_name.text + + if string.len(new_name) > MAX_SITE_NAME_LENGTH then + player.print { 'YARM-err-site-name-too-long', MAX_SITE_NAME_LENGTH } + return + end + + local site = force_data.ore_sites[old_name] + force_data.ore_sites[old_name] = nil + force_data.ore_sites[new_name] = site + site.name = new_name + + resmon.update_chart_tag(site) + + player_data.renaming_site = nil + player.gui.center.YARM_site_rename.destroy() + + resmon.update_force_members_ui(player) +end + +function resmon.on_click.YARM_rename_cancel(event) + local player = game.players[event.player_index] + local player_data = global.player_data[event.player_index] + + player_data.renaming_site = nil + player.gui.center.YARM_site_rename.destroy() + + resmon.update_force_members_ui(player) +end + +function resmon.on_click.rename_site(event) + local site_name = string.sub(event.element.name, 1 + string.len("YARM_rename_site_")) + + local player = game.players[event.player_index] + local player_data = global.player_data[event.player_index] + + if player.gui.center.YARM_site_rename then + resmon.on_click.YARM_rename_cancel(event) + return + end + + player_data.renaming_site = site_name + local root = player.gui.center.add { type = "frame", + name = "YARM_site_rename", + caption = { "YARM-site-rename-title", site_name }, + direction = "horizontal" } + + root.add { type = "textfield", name = "new_name" }.text = site_name + root.add { type = "button", name = "YARM_rename_confirm", caption = { "YARM-site-rename-confirm" } } + root.add { type = "button", name = "YARM_rename_cancel", caption = { "YARM-site-rename-cancel" } } + + player.opened = root + + resmon.update_force_members_ui(player) +end + +function resmon.on_gui_closed(event) + if event.gui_type ~= defines.gui_type.custom then return end + if not event.element or not event.element.valid then return end + if event.element.name ~= "YARM_site_rename" then return end + + resmon.on_click.YARM_rename_cancel(event) +end + +function resmon.on_click.remove_site(event) + local site_name = string.sub(event.element.name, 1 + string.len("YARM_delete_site_")) + + local player = game.players[event.player_index] + local force_data = global.force_data[player.force.name] + local site = force_data.ore_sites[site_name] + + if site.deleting_since then + force_data.ore_sites[site_name] = nil + + if site.chart_tag and site.chart_tag.valid then + site.chart_tag.destroy() + end + else + site.deleting_since = event.tick + end + + resmon.update_force_members_ui(player) +end + +function resmon.on_click.goto_site(event) + local site_name = string.sub(event.element.name, 1 + string.len("YARM_goto_site_")) + + local player = game.players[event.player_index] + local force_data = global.force_data[player.force.name] + local site = force_data.ore_sites[site_name] + + if game.active_mods["space-exploration"] ~= nil then + local zone = remote.call("space-exploration", "get_zone_from_surface_index", + { surface_index = site.surface.index }) + if not zone then + -- the zone is not available for some reason. + player.print { "YARM-spaceexploration-zone-unavailable" } + log("YARM: Unavailable to view SE zone at " .. serpent.line(site.center) .. " on surface " .. site.surface) + return + end -- TODO: need to show some error logs for this + remote.call("space-exploration", "remote_view_start", + { + player = player, + zone_name = zone.name, + position = site.center, + location_name = site.name, + freeze_history = true + }) + else + player.open_map(site.center) + end + + resmon.update_force_members_ui(player) +end + +-- one button handler for both the expand_site and expand_site_cancel buttons +function resmon.on_click.expand_site(event) + local site_name = string.sub(event.element.name, 1 + string.len("YARM_expand_site_")) + + local player = game.players[event.player_index] + local player_data = global.player_data[event.player_index] + local force_data = global.force_data[player.force.name] + local site = force_data.ore_sites[site_name] + local are_we_cancelling_expand = site.is_site_expanding + + --[[ we want to submit the site if we're cancelling the expansion (mostly because submitting the + site cleans up the expansion-related variables on the site) or if we were adding a new site + and decide to expand an existing one + --]] + if are_we_cancelling_expand or player_data.current_site then + resmon.submit_site(event.player_index) + end + + --[[ this is to handle cancelling an expansion (by clicking the red button) - submitting the site is + all we need to do in this case ]] + if are_we_cancelling_expand then + resmon.update_force_members_ui(player) + return + end + + resmon.pull_YARM_item_to_cursor_if_possible(event.player_index) + if player.cursor_stack.valid_for_read and player.cursor_stack.name == "yarm-selector-tool" then + site.is_site_expanding = true + player_data.current_site = site + + resmon.update_force_members_ui(player) + resmon.start_recreate_overlay_existing_site(event.player_index) + end +end + +function resmon.on_click.toggle_bg(event) + local player = game.players[event.player_index] + local root = mod_gui.get_frame_flow(player).YARM_root + if not root then return end + root.style = (root.style.name == "YARM_outer_frame_no_border_bg") + and "YARM_outer_frame_no_border" or "YARM_outer_frame_no_border_bg" + local button = root.buttons.YARM_toggle_bg + button.style = button.style.name == "YARM_toggle_bg" and "YARM_toggle_bg_on" or "YARM_toggle_bg" + resmon.update_ui(player) +end + +function resmon.on_click.toggle_surfacesplit(event) + local player = game.players[event.player_index] + local root = mod_gui.get_frame_flow(player).YARM_root + if not root then return end + local button = root.buttons.YARM_toggle_surfacesplit + button.style = + button.style.name == "YARM_toggle_surfacesplit" and "YARM_toggle_surfacesplit_on" or "YARM_toggle_surfacesplit" + resmon.update_ui(player) +end + +function resmon.on_click.toggle_lite(event) + local player = game.players[event.player_index] + local root = mod_gui.get_frame_flow(player).YARM_root + if not root then return end + local button = root.buttons.YARM_toggle_lite + button.style = + button.style.name == "YARM_toggle_lite" and "YARM_toggle_lite_on" or "YARM_toggle_lite" + resmon.update_ui(player) +end + +function resmon.pull_YARM_item_to_cursor_if_possible(player_index) + local player = game.players[player_index] + if player.cursor_stack.valid_for_read then -- already have something? + if player.cursor_stack.name == "yarm-selector-tool" then return end + + player.clear_cursor() -- and it's not a selector tool, so Q it away + end + + player.cursor_stack.set_stack { name = "yarm-selector-tool" } +end + +function resmon.on_get_selection_tool(event) + resmon.pull_YARM_item_to_cursor_if_possible(event.player_index) +end + +function resmon.start_recreate_overlay_existing_site(player_index) + local site = global.player_data[player_index].current_site + site.is_overlay_being_created = true + + -- forcible cleanup in case we got interrupted during a previous background overlay attempt + site.entities_to_be_overlaid = {} + site.entities_to_be_overlaid_count = 0 + site.next_to_overlay = {} + site.next_to_overlay_count = 0 + + for index in pairs(site.tracker_indices) do + local tracking_data = resmon.entity_cache[index] + if tracking_data then + local ent = tracking_data.entity + if ent and ent.valid then + local key = position_to_string(ent.position) + site.entities_to_be_overlaid[key] = ent.position + site.entities_to_be_overlaid_count = site.entities_to_be_overlaid_count + 1 + end + end + end +end + +function resmon.process_overlay_for_existing_site(player_index) + local player_data = global.player_data[player_index] + local site = player_data.current_site + + if site.next_to_overlay_count == 0 then + if site.entities_to_be_overlaid_count == 0 then + resmon.end_overlay_creation_for_existing_site(player_index) + return + else + local ent_key, ent_pos = next(site.entities_to_be_overlaid) + site.next_to_overlay[ent_key] = ent_pos + site.next_to_overlay_count = site.next_to_overlay_count + 1 + end + end + + local to_scan = math.min(30, site.next_to_overlay_count) + for i = 1, to_scan do + local ent_key, ent_pos = next(site.next_to_overlay) + + local entity = site.surface.find_entity(site.ore_type, ent_pos) + local entity_position = entity.position + local surface = entity.surface + local key = position_to_string(entity_position) + + -- put marker down + resmon.put_marker_at(surface, entity_position, player_data) + -- remove it from our to-do lists + site.entities_to_be_overlaid[key] = nil + site.entities_to_be_overlaid_count = site.entities_to_be_overlaid_count - 1 + site.next_to_overlay[key] = nil + site.next_to_overlay_count = site.next_to_overlay_count - 1 + + -- Look in every direction around this entity... + for _, dir in pairs(defines.direction) do + -- ...and if there's a resource that's not already overlaid, add it + local found = find_resource_at(surface, shift_position(entity_position, dir)) + if found and found.name == site.ore_type then + local offsetkey = position_to_string(found.position) + if site.entities_to_be_overlaid[offsetkey] ~= nil and site.next_to_overlay[offsetkey] == nil then + site.next_to_overlay[offsetkey] = found.position + site.next_to_overlay_count = site.next_to_overlay_count + 1 + end + end + end + end +end + +function resmon.end_overlay_creation_for_existing_site(player_index) + local site = global.player_data[player_index].current_site + site.is_overlay_being_created = false + site.finalizing = true + site.finalizing_since = game.tick +end + +function resmon.update_force_members_ui(player) + for _, p in pairs(player.force.players) do + resmon.update_ui(p) + end +end + +function resmon.on_gui_click(event) + if resmon.on_click[event.element.name] then + resmon.on_click[event.element.name](event) + elseif string.starts_with(event.element.name, "YARM_filter_") then + resmon.on_click.set_filter(event) + elseif string.starts_with(event.element.name, "YARM_delete_site_") then + resmon.on_click.remove_site(event) + elseif string.starts_with(event.element.name, "YARM_rename_site_") then + resmon.on_click.rename_site(event) + elseif string.starts_with(event.element.name, "YARM_goto_site_") then + resmon.on_click.goto_site(event) + elseif string.starts_with(event.element.name, "YARM_expand_site_") then + resmon.on_click.expand_site(event) + elseif string.starts_with(event.element.name, "YARM_toggle_bg") then + resmon.on_click.toggle_bg(event) + elseif string.starts_with(event.element.name, "YARM_toggle_surfacesplit") then + resmon.on_click.toggle_surfacesplit(event) + elseif string.starts_with(event.element.name, "YARM_toggle_lite") then + resmon.on_click.toggle_lite(event) + end +end + +function resmon.update_players(event) + -- At tick 0 on an MP server initial join, on_init may not have run + if not global.player_data then return end + + for index, player in pairs(game.players) do + local player_data = global.player_data[index] + + if not player_data then + resmon.init_player(index) + elseif not player.connected and player_data.current_site then + resmon.clear_current_site(index) + end + + if player_data.current_site then + local site = player_data.current_site + + if #site.next_to_scan > 0 then + resmon.scan_current_site(index) + elseif not site.finalizing then + resmon.finalize_site(index) + elseif site.finalizing_since + 120 == event.tick then + resmon.submit_site(index) + end + + if site.is_overlay_being_created then + resmon.process_overlay_for_existing_site(index) + end + else + local todo = player_data.todo or {} + if #todo > 0 then + for _, entity in pairs(table.remove(todo)) do + resmon.add_resource(index, entity) + end + end + end + + if event.tick % player_data.gui_update_ticks == 15 + index then + resmon.update_ui(player) + end + end +end + +function resmon.update_forces(event) + -- At tick 0 on an MP server initial join, on_init may not have run + if not global.force_data then return end + + local update_cycle = event.tick % settings.global["YARM-ticks-between-checks"].value + for _, force in pairs(game.forces) do + local force_data = global.force_data[force.name] + + if not force_data then + resmon.init_force(force) + elseif force_data and force_data.ore_sites then + for _, site in pairs(force_data.ore_sites) do + resmon.count_deposits(site, update_cycle) + end + end + end +end + +local function profiler_output(message, stopwatch) + local output = { "", message, " - ", stopwatch } + + log(output) + for _, player in pairs(game.players) do + player.print(output) + end +end + + +local function on_tick_internal(event) + ore_tracker.on_tick(event) + resmon.entity_cache = ore_tracker.get_entity_cache() + + resmon.update_players(event) + resmon.update_forces(event) +end + + +local function on_tick_internal_with_profiling(event) + local big_stopwatch = game.create_profiler() + local stopwatch = game.create_profiler() + ore_tracker.on_tick(event) + stopwatch.stop() + profiler_output("ore_tracker", stopwatch) + + resmon.entity_cache = ore_tracker.get_entity_cache() + + stopwatch.reset() + resmon.update_players(event) + stopwatch.stop() + profiler_output("update_players", stopwatch) + + stopwatch.reset() + resmon.update_forces(event) + stopwatch.stop() + profiler_output("update_forces", stopwatch) + + big_stopwatch.stop() + profiler_output("total on_tick", big_stopwatch) +end + + +function resmon.on_tick(event) + local wants_profiling = settings.global["YARM-debug-profiling"].value or false + if wants_profiling then + on_tick_internal_with_profiling(event) + else + on_tick_internal(event) + end +end + +function resmon.on_load() + ore_tracker.on_load() +end diff --git a/YARM/semver.lua b/YARM/semver.lua new file mode 100644 index 00000000..23f981ed --- /dev/null +++ b/YARM/semver.lua @@ -0,0 +1,209 @@ +local semver = { + _VERSION = '1.2.1', + _DESCRIPTION = 'semver for Lua', + _URL = 'https://github.com/kikito/semver.lua', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2015 Enrique GarcΓ­a Cota + + Permission is hereby granted, free of charge, to any person obtaining a + copy of tother software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and tother permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ]] +} + +local function checkPositiveInteger(number, name) + assert(number >= 0, name .. ' must be a valid positive number') + assert(math.floor(number) == number, name .. ' must be an integer') +end + +local function present(value) + return value and value ~= '' +end + +-- splitByDot("a.bbc.d") == {"a", "bbc", "d"} +local function splitByDot(str) + str = str or "" + local t, count = {}, 0 + str:gsub("([^%.]+)", function(c) + count = count + 1 + t[count] = c + end) + return t +end + +local function parsePrereleaseAndBuildWithSign(str) + local prereleaseWithSign, buildWithSign = str:match("^(-[^+]+)(+.+)$") + if not (prereleaseWithSign and buildWithSign) then + prereleaseWithSign = str:match("^(-.+)$") + buildWithSign = str:match("^(+.+)$") + end + assert(prereleaseWithSign or buildWithSign, ("The parameter %q must begin with + or - to denote a prerelease or a build"):format(str)) + return prereleaseWithSign, buildWithSign +end + +local function parsePrerelease(prereleaseWithSign) + if prereleaseWithSign then + local prerelease = prereleaseWithSign:match("^-(%w[%.%w-]*)$") + assert(prerelease, ("The prerelease %q is not a slash followed by alphanumerics, dots and slashes"):format(prereleaseWithSign)) + return prerelease + end +end + +local function parseBuild(buildWithSign) + if buildWithSign then + local build = buildWithSign:match("^%+(%w[%.%w-]*)$") + assert(build, ("The build %q is not a + sign followed by alphanumerics, dots and slashes"):format(buildWithSign)) + return build + end +end + +local function parsePrereleaseAndBuild(str) + if not present(str) then return nil, nil end + + local prereleaseWithSign, buildWithSign = parsePrereleaseAndBuildWithSign(str) + + local prerelease = parsePrerelease(prereleaseWithSign) + local build = parseBuild(buildWithSign) + + return prerelease, build +end + +local function parseVersion(str) + local sMajor, sMinor, sPatch, sPrereleaseAndBuild = str:match("^(%d+)%.?(%d*)%.?(%d*)(.-)$") + assert(type(sMajor) == 'string', ("Could not extract version number(s) from %q"):format(str)) + local major, minor, patch = tonumber(sMajor), tonumber(sMinor), tonumber(sPatch) + local prerelease, build = parsePrereleaseAndBuild(sPrereleaseAndBuild) + return major, minor, patch, prerelease, build +end + + +-- return 0 if a == b, -1 if a < b, and 1 if a > b +local function compare(a,b) + return a == b and 0 or a < b and -1 or 1 +end + +local function compareIds(myId, otherId) + if myId == otherId then return 0 + elseif not myId then return -1 + elseif not otherId then return 1 + end + + local selfNumber, otherNumber = tonumber(myId), tonumber(otherId) + + if selfNumber and otherNumber then -- numerical comparison + return compare(selfNumber, otherNumber) + -- numericals are always smaller than alphanums + elseif selfNumber then + return -1 + elseif otherNumber then + return 1 + else + return compare(myId, otherId) -- alphanumerical comparison + end +end + +local function smallerIdList(myIds, otherIds) + local myLength = #myIds + local comparison + + for i=1, myLength do + comparison = compareIds(myIds[i], otherIds[i]) + if comparison ~= 0 then + return comparison == -1 + end + -- if comparison == 0, continue loop + end + + return myLength < #otherIds +end + +local function smallerPrerelease(mine, other) + if mine == other or not mine then return false + elseif not other then return true + end + + return smallerIdList(splitByDot(mine), splitByDot(other)) +end + +local methods = {} + +function methods:nextMajor() + return semver(self.major + 1, 0, 0) +end +function methods:nextMinor() + return semver(self.major, self.minor + 1, 0) +end +function methods:nextPatch() + return semver(self.major, self.minor, self.patch + 1) +end + +local mt = { __index = methods } +function mt:__eq(other) + return self.major == other.major and + self.minor == other.minor and + self.patch == other.patch and + self.prerelease == other.prerelease + -- notice that build is ignored for precedence in semver 2.0.0 +end +function mt:__lt(other) + if self.major ~= other.major then return self.major < other.major end + if self.minor ~= other.minor then return self.minor < other.minor end + if self.patch ~= other.patch then return self.patch < other.patch end + return smallerPrerelease(self.prerelease, other.prerelease) + -- notice that build is ignored for precedence in semver 2.0.0 +end +-- This works like the "pessimisstic operator" in Rubygems. +-- if a and b are versions, a ^ b means "b is backwards-compatible with a" +-- in other words, "it's safe to upgrade from a to b" +function mt:__pow(other) + if self.major == 0 then + return self == other + end + return self.major == other.major and + self.minor <= other.minor +end +function mt:__tostring() + local buffer = { ("%d.%d.%d"):format(self.major, self.minor, self.patch) } + if self.prerelease then table.insert(buffer, "-" .. self.prerelease) end + if self.build then table.insert(buffer, "+" .. self.build) end + return table.concat(buffer) +end + +local function new(major, minor, patch, prerelease, build) + assert(major, "At least one parameter is needed") + + if type(major) == 'string' then + major,minor,patch,prerelease,build = parseVersion(major) + end + patch = patch or 0 + minor = minor or 0 + + checkPositiveInteger(major, "major") + checkPositiveInteger(minor, "minor") + checkPositiveInteger(patch, "patch") + + local result = {major=major, minor=minor, patch=patch, prerelease=prerelease, build=build} + return setmetatable(result, mt) +end + +setmetatable(semver, { __call = function(_, ...) return new(...) end }) +semver._VERSION= semver(semver._VERSION) + +return semver diff --git a/YARM/settings.lua b/YARM/settings.lua new file mode 100644 index 00000000..8fa66c7a --- /dev/null +++ b/YARM/settings.lua @@ -0,0 +1,135 @@ +data:extend({ + + -- Global settings + { + type = "int-setting", + name = "YARM-ticks-between-checks", + setting_type = "runtime-global", + order = "a", + default_value = 600, + minimum_value = 20, + maximum_value = 1200 + }, + { + type = "int-setting", + name = "YARM-entities-per-tick", + setting_type = "runtime-global", + order = "a", + default_value = 100, + minimum_value = 10, + maximum_value = 1000, + }, + { + type = "bool-setting", + name = "YARM-map-markers", + setting_type = "runtime-global", + order = "b", + default_value = true, + }, + { + type = "int-setting", + name = "YARM-overlay-step", + setting_type = "runtime-global", + order = "c", + default_value = 1, + minimum_value = 1, + maximum_value = 5 + }, + { + type = "bool-setting", + name = "YARM-site-prefix-with-surface", + setting_type = "runtime-global", + order = "d", + default_value = false + }, + { + type = "bool-setting", + name = "YARM-debug-profiling", + setting_type = "runtime-global", + order = "zz[debug]", + default_value = false, + }, + + { + type = "bool-setting", + name = "YARM-adjust-for-productivity", + setting_type = "runtime-global", + order = "c", + default_value = "false", + }, + { + type = "bool-setting", + name = "YARM-productivity-show-raw-and-adjusted", + setting_type = "runtime-global", + order = "d", + default_value = "false", + }, + { + type = "string-setting", + name = "YARM-productivity-parentheses-part-is", + setting_type = "runtime-global", + order = "e", + default_value = "adjusted", + allowed_values = { "adjusted", "raw" } + }, + { + type = "double-setting", + name = "YARM-grow-limit", + setting_type = "runtime-global", + order = "f", + default_value = -1, + minimum_value = -1, + maximum_value = 10000000 + }, + { + type = "bool-setting", + name = "YARM-adjust-over-percentage-sites", + setting_type = "runtime-global", + order = "g", + default_value = "false", + }, + { + type = "double-setting", + name = "YARM-nominal-ups", + setting_type = "runtime-global", + order = "h", + default_value = 60, + minimum_value = 0, + maximum_value = 10000000, + }, + + -- Per user settings + { + type = "double-setting", + name = "YARM-warn-timeleft", + setting_type = "runtime-per-user", + order = "a", + default_value = 24, + minimum_value = 0, + maximum_value = 10000000 + }, + { + type = "double-setting", + name = "YARM-warn-timeleft_totals", + setting_type = "runtime-per-user", + order = "b", + default_value = 48, + minimum_value = 0, + maximum_value = 10000000 + }, + { + type = "string-setting", + name = "YARM-order-by", + setting_type = "runtime-per-user", + order = "c", + default_value = "etd", + allowed_values = { "alphabetical", "percent-remaining", "ore-type", "ore-count", "etd" } + }, + { + type = "bool-setting", + name = "YARM-show-sites-summary", + setting_type = "runtime-per-user", + order = "d", + default_value = true + }, +}) diff --git a/YARM/thumbnail.png b/YARM/thumbnail.png new file mode 100644 index 00000000..1ab55875 Binary files /dev/null and b/YARM/thumbnail.png differ diff --git a/YARM_0.10.14.zip b/YARM_0.10.14.zip deleted file mode 100644 index d7874435..00000000 Binary files a/YARM_0.10.14.zip and /dev/null differ diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/changelog.txt b/ZCS-Trash-Landfill-Continued-Continued/changelog.txt similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/changelog.txt rename to ZCS-Trash-Landfill-Continued-Continued/changelog.txt diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/control.lua b/ZCS-Trash-Landfill-Continued-Continued/control.lua similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/control.lua rename to ZCS-Trash-Landfill-Continued-Continued/control.lua diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/data.lua b/ZCS-Trash-Landfill-Continued-Continued/data.lua similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/data.lua rename to ZCS-Trash-Landfill-Continued-Continued/data.lua diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/graphics/zcs-trash-landfill-entity.png b/ZCS-Trash-Landfill-Continued-Continued/graphics/zcs-trash-landfill-entity.png similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/graphics/zcs-trash-landfill-entity.png rename to ZCS-Trash-Landfill-Continued-Continued/graphics/zcs-trash-landfill-entity.png diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/graphics/zcs-trash-landfill.png b/ZCS-Trash-Landfill-Continued-Continued/graphics/zcs-trash-landfill.png similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/graphics/zcs-trash-landfill.png rename to ZCS-Trash-Landfill-Continued-Continued/graphics/zcs-trash-landfill.png diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/info.json b/ZCS-Trash-Landfill-Continued-Continued/info.json similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/info.json rename to ZCS-Trash-Landfill-Continued-Continued/info.json diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/locale/en/zcs-trash-landfill.cfg b/ZCS-Trash-Landfill-Continued-Continued/locale/en/zcs-trash-landfill.cfg similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/locale/en/zcs-trash-landfill.cfg rename to ZCS-Trash-Landfill-Continued-Continued/locale/en/zcs-trash-landfill.cfg diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/locale/zcs-trash-landfill.cfg b/ZCS-Trash-Landfill-Continued-Continued/locale/zcs-trash-landfill.cfg similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/locale/zcs-trash-landfill.cfg rename to ZCS-Trash-Landfill-Continued-Continued/locale/zcs-trash-landfill.cfg diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/prototypes/prototypes.lua b/ZCS-Trash-Landfill-Continued-Continued/prototypes/prototypes.lua similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/prototypes/prototypes.lua rename to ZCS-Trash-Landfill-Continued-Continued/prototypes/prototypes.lua diff --git a/ZCS-Trash-Landfill-Continued-Continued_1.0.0/thumbnail.png b/ZCS-Trash-Landfill-Continued-Continued/thumbnail.png similarity index 100% rename from ZCS-Trash-Landfill-Continued-Continued_1.0.0/thumbnail.png rename to ZCS-Trash-Landfill-Continued-Continued/thumbnail.png diff --git a/aai-industry_9.2.4/changelog.txt b/aai-industry/changelog.txt similarity index 100% rename from aai-industry_9.2.4/changelog.txt rename to aai-industry/changelog.txt diff --git a/aai-industry_9.2.4/control-NEW1 b/aai-industry/control-NEW1 similarity index 100% rename from aai-industry_9.2.4/control-NEW1 rename to aai-industry/control-NEW1 diff --git a/aai-industry_9.2.4/control-old.lua b/aai-industry/control-old.lua similarity index 100% rename from aai-industry_9.2.4/control-old.lua rename to aai-industry/control-old.lua diff --git a/aai-industry_9.2.4/control.lua b/aai-industry/control.lua similarity index 100% rename from aai-industry_9.2.4/control.lua rename to aai-industry/control.lua diff --git a/aai-industry_9.2.4/data-final-fixes.lua b/aai-industry/data-final-fixes.lua similarity index 100% rename from aai-industry_9.2.4/data-final-fixes.lua rename to aai-industry/data-final-fixes.lua diff --git a/aai-industry_9.2.4/data-updates.lua b/aai-industry/data-updates.lua similarity index 100% rename from aai-industry_9.2.4/data-updates.lua rename to aai-industry/data-updates.lua diff --git a/aai-industry_9.2.4/data-util.lua b/aai-industry/data-util.lua similarity index 100% rename from aai-industry_9.2.4/data-util.lua rename to aai-industry/data-util.lua diff --git a/aai-industry_9.2.4/data.lua b/aai-industry/data.lua similarity index 100% rename from aai-industry_9.2.4/data.lua rename to aai-industry/data.lua diff --git a/aai-industry_9.2.4/graphics/blank.png b/aai-industry/graphics/blank.png similarity index 100% rename from aai-industry_9.2.4/graphics/blank.png rename to aai-industry/graphics/blank.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine-light.png b/aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine-light.png rename to aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine-shadow.png b/aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine-shadow.png rename to aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine.png b/aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/burner-assembling-machine.png rename to aai-industry/graphics/entity/burner-assembling-machine/burner-assembling-machine.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-light.png b/aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-light.png rename to aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-shadow.png b/aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-shadow.png rename to aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine.png b/aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine.png rename to aai-industry/graphics/entity/burner-assembling-machine/hr-burner-assembling-machine.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-lab/burner-lab-light.png b/aai-industry/graphics/entity/burner-lab/burner-lab-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-lab/burner-lab-light.png rename to aai-industry/graphics/entity/burner-lab/burner-lab-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-lab/burner-lab.png b/aai-industry/graphics/entity/burner-lab/burner-lab.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-lab/burner-lab.png rename to aai-industry/graphics/entity/burner-lab/burner-lab.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-lab/hr-burner-lab-light.png b/aai-industry/graphics/entity/burner-lab/hr-burner-lab-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-lab/hr-burner-lab-light.png rename to aai-industry/graphics/entity/burner-lab/hr-burner-lab-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-lab/hr-burner-lab.png b/aai-industry/graphics/entity/burner-lab/hr-burner-lab.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-lab/hr-burner-lab.png rename to aai-industry/graphics/entity/burner-lab/hr-burner-lab.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-glow.png b/aai-industry/graphics/entity/burner-turbine/burner-turbine-glow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-glow.png rename to aai-industry/graphics/entity/burner-turbine/burner-turbine-glow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-light.png b/aai-industry/graphics/entity/burner-turbine/burner-turbine-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-light.png rename to aai-industry/graphics/entity/burner-turbine/burner-turbine-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-shadow.png b/aai-industry/graphics/entity/burner-turbine/burner-turbine-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine-shadow.png rename to aai-industry/graphics/entity/burner-turbine/burner-turbine-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine.png b/aai-industry/graphics/entity/burner-turbine/burner-turbine.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/burner-turbine.png rename to aai-industry/graphics/entity/burner-turbine/burner-turbine.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-glow.png b/aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-glow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-glow.png rename to aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-glow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-light.png b/aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-light.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-light.png rename to aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-light.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-shadow.png b/aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine-shadow.png rename to aai-industry/graphics/entity/burner-turbine/hr-burner-turbine-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine.png b/aai-industry/graphics/entity/burner-turbine/hr-burner-turbine.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/burner-turbine/hr-burner-turbine.png rename to aai-industry/graphics/entity/burner-turbine/hr-burner-turbine.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall.png b/aai-industry/graphics/entity/concrete-wall.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall.png rename to aai-industry/graphics/entity/concrete-wall.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-01.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-01.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-01.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-01.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-02.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-02.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-02.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-02.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-03.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-03.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-03.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-03.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-04.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-04.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-04.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-04.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-05.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-05.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-05.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-05.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-06.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-06.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-06.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-06.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-07.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-07.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-07.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-07.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-08.png b/aai-industry/graphics/entity/concrete-wall/remains/wall-remain-08.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/remains/wall-remain-08.png rename to aai-industry/graphics/entity/concrete-wall/remains/wall-remain-08.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-left-down-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-corner-left-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-left-down-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-corner-left-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-left-down.png b/aai-industry/graphics/entity/concrete-wall/wall-corner-left-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-left-down.png rename to aai-industry/graphics/entity/concrete-wall/wall-corner-left-down.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-right-down-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-corner-right-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-right-down-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-corner-right-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-right-down.png b/aai-industry/graphics/entity/concrete-wall/wall-corner-right-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-corner-right-down.png rename to aai-industry/graphics/entity/concrete-wall/wall-corner-right-down.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-left-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-ending-left-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-left-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-ending-left-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-left.png b/aai-industry/graphics/entity/concrete-wall/wall-ending-left.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-left.png rename to aai-industry/graphics/entity/concrete-wall/wall-ending-left.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-right-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-ending-right-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-right-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-ending-right-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-right.png b/aai-industry/graphics/entity/concrete-wall/wall-ending-right.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-ending-right.png rename to aai-industry/graphics/entity/concrete-wall/wall-ending-right.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-patch-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-patch-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-patch-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-patch-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-patch.png b/aai-industry/graphics/entity/concrete-wall/wall-patch.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-patch.png rename to aai-industry/graphics/entity/concrete-wall/wall-patch.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-single-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-single-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-single-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-single-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-single.png b/aai-industry/graphics/entity/concrete-wall/wall-single.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-single.png rename to aai-industry/graphics/entity/concrete-wall/wall-single.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-1.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-1.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-1.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-2.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-2.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-2.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-3.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-3.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-3.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-horizontal-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-horizontal-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-1.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-1.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-1.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-2.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-2.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-2.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-3.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-3.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-3.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-straight-vertical-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-straight-vertical-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-t-down-shadow.png b/aai-industry/graphics/entity/concrete-wall/wall-t-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-t-down-shadow.png rename to aai-industry/graphics/entity/concrete-wall/wall-t-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/concrete-wall/wall-t-down.png b/aai-industry/graphics/entity/concrete-wall/wall-t-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/concrete-wall/wall-t-down.png rename to aai-industry/graphics/entity/concrete-wall/wall-t-down.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-east-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-east-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-east-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-east-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-north-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-north-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-north-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-north-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-south-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-south-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-south-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-south-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-west-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-west-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-west-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/hr-offshore-pump-west-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-east-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-east-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-east-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-east-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-north-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-north-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-north-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-north-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-south-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-south-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-south-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-south-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-west-glass.png b/aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-west-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/glass safe/offshore-pump-west-glass.png rename to aai-industry/graphics/entity/offshore-pump/glass safe/offshore-pump-west-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-animation.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-animation.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-glass.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-glass.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-liquid.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east-liquid.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-east.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-east.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-animation.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-animation.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-glass.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-glass.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-liquid.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north-liquid.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-north.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-north.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-animation.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-animation.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-glass.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-glass.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-liquid.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south-liquid.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-south.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-south.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-animation.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-animation.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-glass.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-glass.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-liquid.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west-liquid.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west.png b/aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/hr-offshore-pump-west.png rename to aai-industry/graphics/entity/offshore-pump/hr-offshore-pump-west.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-animation.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-east-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-animation.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-east-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-glass.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-east-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-glass.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-east-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-liquid.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-east-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east-liquid.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-east-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-east.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-east.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-east.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-animation.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-north-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-animation.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-north-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-glass.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-north-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-glass.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-north-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-liquid.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-north-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north-liquid.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-north-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-north.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-north.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-north.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-animation.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-south-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-animation.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-south-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-glass.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-south-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-glass.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-south-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-liquid.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-south-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south-liquid.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-south-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-south.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-south.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-south.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-animation.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-west-animation.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-animation.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-west-animation.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-glass.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-west-glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-glass.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-west-glass.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-liquid.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-west-liquid.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west-liquid.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-west-liquid.png diff --git a/aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west.png b/aai-industry/graphics/entity/offshore-pump/offshore-pump-west.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/offshore-pump/offshore-pump-west.png rename to aai-industry/graphics/entity/offshore-pump/offshore-pump-west.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-1.png b/aai-industry/graphics/entity/ship-wreck/big-ship-wreck-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-1.png rename to aai-industry/graphics/entity/ship-wreck/big-ship-wreck-1.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-2.png b/aai-industry/graphics/entity/ship-wreck/big-ship-wreck-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-2.png rename to aai-industry/graphics/entity/ship-wreck/big-ship-wreck-2.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-3.png b/aai-industry/graphics/entity/ship-wreck/big-ship-wreck-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/big-ship-wreck-3.png rename to aai-industry/graphics/entity/ship-wreck/big-ship-wreck-3.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/medium-ship-wreck-1.png b/aai-industry/graphics/entity/ship-wreck/medium-ship-wreck-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/medium-ship-wreck-1.png rename to aai-industry/graphics/entity/ship-wreck/medium-ship-wreck-1.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/medium-ship-wreck-2.png b/aai-industry/graphics/entity/ship-wreck/medium-ship-wreck-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/medium-ship-wreck-2.png rename to aai-industry/graphics/entity/ship-wreck/medium-ship-wreck-2.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-a.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-a.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-a.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-a.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-b.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-b.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-b.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-b.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-c.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-c.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-c.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-c.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-d.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-d.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-d.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-d.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-e.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-e.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-e.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-e.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-f.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-f.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-f.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-f.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-g.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-g.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-g.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-g.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-h.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-h.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-h.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-h.png diff --git a/aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-i.png b/aai-industry/graphics/entity/ship-wreck/small-ship-wreck-i.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/ship-wreck/small-ship-wreck-i.png rename to aai-industry/graphics/entity/ship-wreck/small-ship-wreck-i.png diff --git a/aai-industry_9.2.4/graphics/entity/small-iron-electric-pole.png b/aai-industry/graphics/entity/small-iron-electric-pole.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/small-iron-electric-pole.png rename to aai-industry/graphics/entity/small-iron-electric-pole.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-01.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-01.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-01.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-01.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-02.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-02.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-02.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-02.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-03.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-03.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-03.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-03.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-04.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-04.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-04.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-04.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-05.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-05.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-05.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-05.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-06.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-06.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-06.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-06.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-07.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-07.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-07.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-07.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-08.png b/aai-industry/graphics/entity/steel-wall/remains/wall-remain-08.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/remains/wall-remain-08.png rename to aai-industry/graphics/entity/steel-wall/remains/wall-remain-08.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-left-down-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-corner-left-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-left-down-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-corner-left-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-left-down.png b/aai-industry/graphics/entity/steel-wall/wall-corner-left-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-left-down.png rename to aai-industry/graphics/entity/steel-wall/wall-corner-left-down.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-right-down-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-corner-right-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-right-down-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-corner-right-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-right-down.png b/aai-industry/graphics/entity/steel-wall/wall-corner-right-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-corner-right-down.png rename to aai-industry/graphics/entity/steel-wall/wall-corner-right-down.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-left-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-ending-left-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-left-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-ending-left-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-left.png b/aai-industry/graphics/entity/steel-wall/wall-ending-left.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-left.png rename to aai-industry/graphics/entity/steel-wall/wall-ending-left.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-right-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-ending-right-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-right-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-ending-right-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-right.png b/aai-industry/graphics/entity/steel-wall/wall-ending-right.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-ending-right.png rename to aai-industry/graphics/entity/steel-wall/wall-ending-right.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-patch-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-patch-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-patch-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-patch-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-patch.png b/aai-industry/graphics/entity/steel-wall/wall-patch.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-patch.png rename to aai-industry/graphics/entity/steel-wall/wall-patch.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-single-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-single-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-single-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-single-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-single.png b/aai-industry/graphics/entity/steel-wall/wall-single.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-single.png rename to aai-industry/graphics/entity/steel-wall/wall-single.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-1.png b/aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-1.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-1.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-2.png b/aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-2.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-2.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-3.png b/aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-3.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-3.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-horizontal-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-horizontal-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-1.png b/aai-industry/graphics/entity/steel-wall/wall-straight-vertical-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-1.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-vertical-1.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-2.png b/aai-industry/graphics/entity/steel-wall/wall-straight-vertical-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-2.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-vertical-2.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-3.png b/aai-industry/graphics/entity/steel-wall/wall-straight-vertical-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-3.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-vertical-3.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-straight-vertical-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-straight-vertical-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-straight-vertical-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-t-down-shadow.png b/aai-industry/graphics/entity/steel-wall/wall-t-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-t-down-shadow.png rename to aai-industry/graphics/entity/steel-wall/wall-t-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/steel-wall/wall-t-down.png b/aai-industry/graphics/entity/steel-wall/wall-t-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/steel-wall/wall-t-down.png rename to aai-industry/graphics/entity/steel-wall/wall-t-down.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall.png b/aai-industry/graphics/entity/stone-wall.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall.png rename to aai-industry/graphics/entity/stone-wall.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-01.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-01.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-01.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-01.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-02.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-02.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-02.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-02.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-03.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-03.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-03.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-03.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-04.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-04.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-04.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-04.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-05.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-05.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-05.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-05.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-06.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-06.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-06.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-06.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-07.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-07.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-07.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-07.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-08.png b/aai-industry/graphics/entity/stone-wall/remains/wall-remain-08.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/remains/wall-remain-08.png rename to aai-industry/graphics/entity/stone-wall/remains/wall-remain-08.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-left-down-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-corner-left-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-left-down-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-corner-left-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-left-down.png b/aai-industry/graphics/entity/stone-wall/wall-corner-left-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-left-down.png rename to aai-industry/graphics/entity/stone-wall/wall-corner-left-down.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-right-down-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-corner-right-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-right-down-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-corner-right-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-right-down.png b/aai-industry/graphics/entity/stone-wall/wall-corner-right-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-corner-right-down.png rename to aai-industry/graphics/entity/stone-wall/wall-corner-right-down.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-left-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-ending-left-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-left-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-ending-left-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-left.png b/aai-industry/graphics/entity/stone-wall/wall-ending-left.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-left.png rename to aai-industry/graphics/entity/stone-wall/wall-ending-left.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-right-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-ending-right-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-right-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-ending-right-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-right.png b/aai-industry/graphics/entity/stone-wall/wall-ending-right.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-ending-right.png rename to aai-industry/graphics/entity/stone-wall/wall-ending-right.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-patch-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-patch-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-patch-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-patch-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-patch.png b/aai-industry/graphics/entity/stone-wall/wall-patch.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-patch.png rename to aai-industry/graphics/entity/stone-wall/wall-patch.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-single-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-single-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-single-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-single-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-single.png b/aai-industry/graphics/entity/stone-wall/wall-single.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-single.png rename to aai-industry/graphics/entity/stone-wall/wall-single.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-1.png b/aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-1.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-1.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-2.png b/aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-2.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-2.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-3.png b/aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-3.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-3.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-horizontal-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-horizontal-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-1.png b/aai-industry/graphics/entity/stone-wall/wall-straight-vertical-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-1.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-vertical-1.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-2.png b/aai-industry/graphics/entity/stone-wall/wall-straight-vertical-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-2.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-vertical-2.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-3.png b/aai-industry/graphics/entity/stone-wall/wall-straight-vertical-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-3.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-vertical-3.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-straight-vertical-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-straight-vertical-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-straight-vertical-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-t-down-shadow.png b/aai-industry/graphics/entity/stone-wall/wall-t-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-t-down-shadow.png rename to aai-industry/graphics/entity/stone-wall/wall-t-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/stone-wall/wall-t-down.png b/aai-industry/graphics/entity/stone-wall/wall-t-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/stone-wall/wall-t-down.png rename to aai-industry/graphics/entity/stone-wall/wall-t-down.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-down-shadow.png b/aai-industry/graphics/entity/wall/wall-corner-left-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-down-shadow.png rename to aai-industry/graphics/entity/wall/wall-corner-left-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-down.png b/aai-industry/graphics/entity/wall/wall-corner-left-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-down.png rename to aai-industry/graphics/entity/wall/wall-corner-left-down.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-shadow.png b/aai-industry/graphics/entity/wall/wall-corner-left-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-left-shadow.png rename to aai-industry/graphics/entity/wall/wall-corner-left-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-left.png b/aai-industry/graphics/entity/wall/wall-corner-left.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-left.png rename to aai-industry/graphics/entity/wall/wall-corner-left.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-down-shadow.png b/aai-industry/graphics/entity/wall/wall-corner-right-down-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-down-shadow.png rename to aai-industry/graphics/entity/wall/wall-corner-right-down-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-down.png b/aai-industry/graphics/entity/wall/wall-corner-right-down.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-down.png rename to aai-industry/graphics/entity/wall/wall-corner-right-down.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-shadow.png b/aai-industry/graphics/entity/wall/wall-corner-right-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-right-shadow.png rename to aai-industry/graphics/entity/wall/wall-corner-right-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-corner-right.png b/aai-industry/graphics/entity/wall/wall-corner-right.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-corner-right.png rename to aai-industry/graphics/entity/wall/wall-corner-right.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-ending-left-shadow.png b/aai-industry/graphics/entity/wall/wall-ending-left-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-ending-left-shadow.png rename to aai-industry/graphics/entity/wall/wall-ending-left-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-ending-left.png b/aai-industry/graphics/entity/wall/wall-ending-left.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-ending-left.png rename to aai-industry/graphics/entity/wall/wall-ending-left.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-ending-right-shadow.png b/aai-industry/graphics/entity/wall/wall-ending-right-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-ending-right-shadow.png rename to aai-industry/graphics/entity/wall/wall-ending-right-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-ending-right.png b/aai-industry/graphics/entity/wall/wall-ending-right.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-ending-right.png rename to aai-industry/graphics/entity/wall/wall-ending-right.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-filling.png b/aai-industry/graphics/entity/wall/wall-filling.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-filling.png rename to aai-industry/graphics/entity/wall/wall-filling.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-gate-shadow.png b/aai-industry/graphics/entity/wall/wall-gate-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-gate-shadow.png rename to aai-industry/graphics/entity/wall/wall-gate-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-gate.png b/aai-industry/graphics/entity/wall/wall-gate.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-gate.png rename to aai-industry/graphics/entity/wall/wall-gate.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-horizontal-shadow.png b/aai-industry/graphics/entity/wall/wall-horizontal-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-horizontal-shadow.png rename to aai-industry/graphics/entity/wall/wall-horizontal-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-horizontal.png b/aai-industry/graphics/entity/wall/wall-horizontal.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-horizontal.png rename to aai-industry/graphics/entity/wall/wall-horizontal.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-patch-shadow.png b/aai-industry/graphics/entity/wall/wall-patch-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-patch-shadow.png rename to aai-industry/graphics/entity/wall/wall-patch-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-patch.png b/aai-industry/graphics/entity/wall/wall-patch.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-patch.png rename to aai-industry/graphics/entity/wall/wall-patch.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-single-shadow.png b/aai-industry/graphics/entity/wall/wall-single-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-single-shadow.png rename to aai-industry/graphics/entity/wall/wall-single-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-single.png b/aai-industry/graphics/entity/wall/wall-single.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-single.png rename to aai-industry/graphics/entity/wall/wall-single.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-straight-horizontal-2.png b/aai-industry/graphics/entity/wall/wall-straight-horizontal-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-straight-horizontal-2.png rename to aai-industry/graphics/entity/wall/wall-straight-horizontal-2.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-straight-horizontal-3.png b/aai-industry/graphics/entity/wall/wall-straight-horizontal-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-straight-horizontal-3.png rename to aai-industry/graphics/entity/wall/wall-straight-horizontal-3.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-straight-vertical-2.png b/aai-industry/graphics/entity/wall/wall-straight-vertical-2.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-straight-vertical-2.png rename to aai-industry/graphics/entity/wall/wall-straight-vertical-2.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-straight-vertical-3.png b/aai-industry/graphics/entity/wall/wall-straight-vertical-3.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-straight-vertical-3.png rename to aai-industry/graphics/entity/wall/wall-straight-vertical-3.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-t-shadow.png b/aai-industry/graphics/entity/wall/wall-t-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-t-shadow.png rename to aai-industry/graphics/entity/wall/wall-t-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-t.png b/aai-industry/graphics/entity/wall/wall-t.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-t.png rename to aai-industry/graphics/entity/wall/wall-t.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-vertical-shadow.png b/aai-industry/graphics/entity/wall/wall-vertical-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-vertical-shadow.png rename to aai-industry/graphics/entity/wall/wall-vertical-shadow.png diff --git a/aai-industry_9.2.4/graphics/entity/wall/wall-vertical.png b/aai-industry/graphics/entity/wall/wall-vertical.png similarity index 100% rename from aai-industry_9.2.4/graphics/entity/wall/wall-vertical.png rename to aai-industry/graphics/entity/wall/wall-vertical.png diff --git a/aai-industry_9.2.4/graphics/icons/big-electric-motor.png b/aai-industry/graphics/icons/big-electric-motor.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/big-electric-motor.png rename to aai-industry/graphics/icons/big-electric-motor.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-assembling-machine.png b/aai-industry/graphics/icons/burner-assembling-machine.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-assembling-machine.png rename to aai-industry/graphics/icons/burner-assembling-machine.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-assembling-machine1.png b/aai-industry/graphics/icons/burner-assembling-machine1.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-assembling-machine1.png rename to aai-industry/graphics/icons/burner-assembling-machine1.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-filter-inserter.png b/aai-industry/graphics/icons/burner-filter-inserter.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-filter-inserter.png rename to aai-industry/graphics/icons/burner-filter-inserter.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-lab.png b/aai-industry/graphics/icons/burner-lab.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-lab.png rename to aai-industry/graphics/icons/burner-lab.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-turbine.png b/aai-industry/graphics/icons/burner-turbine.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-turbine.png rename to aai-industry/graphics/icons/burner-turbine.png diff --git a/aai-industry_9.2.4/graphics/icons/burner-turbine1.png b/aai-industry/graphics/icons/burner-turbine1.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/burner-turbine1.png rename to aai-industry/graphics/icons/burner-turbine1.png diff --git a/aai-industry_9.2.4/graphics/icons/concrete-wall.png b/aai-industry/graphics/icons/concrete-wall.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/concrete-wall.png rename to aai-industry/graphics/icons/concrete-wall.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-engine-unit-base.png b/aai-industry/graphics/icons/electric-engine-unit-base.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-engine-unit-base.png rename to aai-industry/graphics/icons/electric-engine-unit-base.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-engine-unit-mask.png b/aai-industry/graphics/icons/electric-engine-unit-mask.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-engine-unit-mask.png rename to aai-industry/graphics/icons/electric-engine-unit-mask.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-engine-unit.png b/aai-industry/graphics/icons/electric-engine-unit.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-engine-unit.png rename to aai-industry/graphics/icons/electric-engine-unit.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-motor-base.png b/aai-industry/graphics/icons/electric-motor-base.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-motor-base.png rename to aai-industry/graphics/icons/electric-motor-base.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-motor-mask.png b/aai-industry/graphics/icons/electric-motor-mask.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-motor-mask.png rename to aai-industry/graphics/icons/electric-motor-mask.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-motor-stacked.png b/aai-industry/graphics/icons/electric-motor-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-motor-stacked.png rename to aai-industry/graphics/icons/electric-motor-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/electric-motor.png b/aai-industry/graphics/icons/electric-motor.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/electric-motor.png rename to aai-industry/graphics/icons/electric-motor.png diff --git a/aai-industry_9.2.4/graphics/icons/engine-unit-base.png b/aai-industry/graphics/icons/engine-unit-base.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/engine-unit-base.png rename to aai-industry/graphics/icons/engine-unit-base.png diff --git a/aai-industry_9.2.4/graphics/icons/engine-unit-mask.png b/aai-industry/graphics/icons/engine-unit-mask.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/engine-unit-mask.png rename to aai-industry/graphics/icons/engine-unit-mask.png diff --git a/aai-industry_9.2.4/graphics/icons/engine-unit.png b/aai-industry/graphics/icons/engine-unit.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/engine-unit.png rename to aai-industry/graphics/icons/engine-unit.png diff --git a/aai-industry_9.2.4/graphics/icons/fuel-cell.png b/aai-industry/graphics/icons/fuel-cell.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/fuel-cell.png rename to aai-industry/graphics/icons/fuel-cell.png diff --git a/aai-industry_9.2.4/graphics/icons/glass-stacked.png b/aai-industry/graphics/icons/glass-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/glass-stacked.png rename to aai-industry/graphics/icons/glass-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/glass.png b/aai-industry/graphics/icons/glass.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/glass.png rename to aai-industry/graphics/icons/glass.png diff --git a/aai-industry_9.2.4/graphics/icons/industrial-furnace.png b/aai-industry/graphics/icons/industrial-furnace.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/industrial-furnace.png rename to aai-industry/graphics/icons/industrial-furnace.png diff --git a/aai-industry_9.2.4/graphics/icons/industrial-furnace1.png b/aai-industry/graphics/icons/industrial-furnace1.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/industrial-furnace1.png rename to aai-industry/graphics/icons/industrial-furnace1.png diff --git a/aai-industry_9.2.4/graphics/icons/motor-base.png b/aai-industry/graphics/icons/motor-base.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/motor-base.png rename to aai-industry/graphics/icons/motor-base.png diff --git a/aai-industry_9.2.4/graphics/icons/motor-mask.png b/aai-industry/graphics/icons/motor-mask.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/motor-mask.png rename to aai-industry/graphics/icons/motor-mask.png diff --git a/aai-industry_9.2.4/graphics/icons/motor-stacked.png b/aai-industry/graphics/icons/motor-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/motor-stacked.png rename to aai-industry/graphics/icons/motor-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/motor.png b/aai-industry/graphics/icons/motor.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/motor.png rename to aai-industry/graphics/icons/motor.png diff --git a/aai-industry_9.2.4/graphics/icons/offshore-pump.png b/aai-industry/graphics/icons/offshore-pump.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/offshore-pump.png rename to aai-industry/graphics/icons/offshore-pump.png diff --git a/aai-industry_9.2.4/graphics/icons/processed-fuel (2).png b/aai-industry/graphics/icons/processed-fuel (2).png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/processed-fuel (2).png rename to aai-industry/graphics/icons/processed-fuel (2).png diff --git a/aai-industry_9.2.4/graphics/icons/processed-fuel-stacked (2).png b/aai-industry/graphics/icons/processed-fuel-stacked (2).png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/processed-fuel-stacked (2).png rename to aai-industry/graphics/icons/processed-fuel-stacked (2).png diff --git a/aai-industry_9.2.4/graphics/icons/processed-fuel-stacked.png b/aai-industry/graphics/icons/processed-fuel-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/processed-fuel-stacked.png rename to aai-industry/graphics/icons/processed-fuel-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/processed-fuel.png b/aai-industry/graphics/icons/processed-fuel.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/processed-fuel.png rename to aai-industry/graphics/icons/processed-fuel.png diff --git a/aai-industry_9.2.4/graphics/icons/sand-stacked.png b/aai-industry/graphics/icons/sand-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/sand-stacked.png rename to aai-industry/graphics/icons/sand-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/sand.png b/aai-industry/graphics/icons/sand.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/sand.png rename to aai-industry/graphics/icons/sand.png diff --git a/aai-industry_9.2.4/graphics/icons/single-cylinder-engine.png b/aai-industry/graphics/icons/single-cylinder-engine.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/single-cylinder-engine.png rename to aai-industry/graphics/icons/single-cylinder-engine.png diff --git a/aai-industry_9.2.4/graphics/icons/small-electric-motor-stacked.png b/aai-industry/graphics/icons/small-electric-motor-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/small-electric-motor-stacked.png rename to aai-industry/graphics/icons/small-electric-motor-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/small-electric-motor.png b/aai-industry/graphics/icons/small-electric-motor.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/small-electric-motor.png rename to aai-industry/graphics/icons/small-electric-motor.png diff --git a/aai-industry_9.2.4/graphics/icons/small-iron-electric-pole (2).png b/aai-industry/graphics/icons/small-iron-electric-pole (2).png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/small-iron-electric-pole (2).png rename to aai-industry/graphics/icons/small-iron-electric-pole (2).png diff --git a/aai-industry_9.2.4/graphics/icons/small-iron-electric-pole.png b/aai-industry/graphics/icons/small-iron-electric-pole.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/small-iron-electric-pole.png rename to aai-industry/graphics/icons/small-iron-electric-pole.png diff --git a/aai-industry_9.2.4/graphics/icons/steel-wall.png b/aai-industry/graphics/icons/steel-wall.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/steel-wall.png rename to aai-industry/graphics/icons/steel-wall.png diff --git a/aai-industry_9.2.4/graphics/icons/stone-tablet-stacked.png b/aai-industry/graphics/icons/stone-tablet-stacked.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/stone-tablet-stacked.png rename to aai-industry/graphics/icons/stone-tablet-stacked.png diff --git a/aai-industry_9.2.4/graphics/icons/stone-tablet.png b/aai-industry/graphics/icons/stone-tablet.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/stone-tablet.png rename to aai-industry/graphics/icons/stone-tablet.png diff --git a/aai-industry_9.2.4/graphics/icons/stone-wall.png b/aai-industry/graphics/icons/stone-wall.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/stone-wall.png rename to aai-industry/graphics/icons/stone-wall.png diff --git a/aai-industry_9.2.4/graphics/icons/wall-straight-horizontal-1.png b/aai-industry/graphics/icons/wall-straight-horizontal-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/icons/wall-straight-horizontal-1.png rename to aai-industry/graphics/icons/wall-straight-horizontal-1.png diff --git a/aai-industry_9.2.4/graphics/technology/area-mining-drill.png b/aai-industry/graphics/technology/area-mining-drill.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/area-mining-drill.png rename to aai-industry/graphics/technology/area-mining-drill.png diff --git a/aai-industry_9.2.4/graphics/technology/automation-0.png b/aai-industry/graphics/technology/automation-0.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/automation-0.png rename to aai-industry/graphics/technology/automation-0.png diff --git a/aai-industry_9.2.4/graphics/technology/bi-dart-turret.png b/aai-industry/graphics/technology/bi-dart-turret.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/bi-dart-turret.png rename to aai-industry/graphics/technology/bi-dart-turret.png diff --git a/aai-industry_9.2.4/graphics/technology/burner-turbine.png b/aai-industry/graphics/technology/burner-turbine.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/burner-turbine.png rename to aai-industry/graphics/technology/burner-turbine.png diff --git a/aai-industry_9.2.4/graphics/technology/electric-engine.png b/aai-industry/graphics/technology/electric-engine.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/electric-engine.png rename to aai-industry/graphics/technology/electric-engine.png diff --git a/aai-industry_9.2.4/graphics/technology/electric-lab.png b/aai-industry/graphics/technology/electric-lab.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/electric-lab.png rename to aai-industry/graphics/technology/electric-lab.png diff --git a/aai-industry_9.2.4/graphics/technology/electric-mining.png b/aai-industry/graphics/technology/electric-mining.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/electric-mining.png rename to aai-industry/graphics/technology/electric-mining.png diff --git a/aai-industry_9.2.4/graphics/technology/electricity-1.png b/aai-industry/graphics/technology/electricity-1.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/electricity-1.png rename to aai-industry/graphics/technology/electricity-1.png diff --git a/aai-industry_9.2.4/graphics/technology/electricity.png b/aai-industry/graphics/technology/electricity.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/electricity.png rename to aai-industry/graphics/technology/electricity.png diff --git a/aai-industry_9.2.4/graphics/technology/filter-inserters.png b/aai-industry/graphics/technology/filter-inserters.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/filter-inserters.png rename to aai-industry/graphics/technology/filter-inserters.png diff --git a/aai-industry_9.2.4/graphics/technology/fuel-processing.png b/aai-industry/graphics/technology/fuel-processing.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/fuel-processing.png rename to aai-industry/graphics/technology/fuel-processing.png diff --git a/aai-industry_9.2.4/graphics/technology/industrial-furnace.png b/aai-industry/graphics/technology/industrial-furnace.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/industrial-furnace.png rename to aai-industry/graphics/technology/industrial-furnace.png diff --git a/aai-industry_9.2.4/graphics/technology/logistics-0.png b/aai-industry/graphics/technology/logistics-0.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/logistics-0.png rename to aai-industry/graphics/technology/logistics-0.png diff --git a/aai-industry_9.2.4/graphics/technology/multi-cylinder-engine.png b/aai-industry/graphics/technology/multi-cylinder-engine.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/multi-cylinder-engine.png rename to aai-industry/graphics/technology/multi-cylinder-engine.png diff --git a/aai-industry_9.2.4/graphics/technology/radar.png b/aai-industry/graphics/technology/radar.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/radar.png rename to aai-industry/graphics/technology/radar.png diff --git a/aai-industry_9.2.4/graphics/technology/sand-processing.png b/aai-industry/graphics/technology/sand-processing.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/sand-processing.png rename to aai-industry/graphics/technology/sand-processing.png diff --git a/aai-industry_9.2.4/graphics/technology/steam-power.png b/aai-industry/graphics/technology/steam-power.png similarity index 100% rename from aai-industry_9.2.4/graphics/technology/steam-power.png rename to aai-industry/graphics/technology/steam-power.png diff --git a/aai-industry_9.2.4/graphics/torch/torch-icon.png b/aai-industry/graphics/torch/torch-icon.png similarity index 100% rename from aai-industry_9.2.4/graphics/torch/torch-icon.png rename to aai-industry/graphics/torch/torch-icon.png diff --git a/aai-industry_9.2.4/graphics/torch/torch-shadow.png b/aai-industry/graphics/torch/torch-shadow.png similarity index 100% rename from aai-industry_9.2.4/graphics/torch/torch-shadow.png rename to aai-industry/graphics/torch/torch-shadow.png diff --git a/aai-industry_9.2.4/graphics/torch/torch.png b/aai-industry/graphics/torch/torch.png similarity index 100% rename from aai-industry_9.2.4/graphics/torch/torch.png rename to aai-industry/graphics/torch/torch.png diff --git a/aai-industry/info.json b/aai-industry/info.json new file mode 100644 index 00000000..c036ad33 --- /dev/null +++ b/aai-industry/info.json @@ -0,0 +1,19 @@ +{ + "name": "aai-industry", + "version": "9.2.4", + "title": "AAI Industry", + "author": "Earendel, reworked by nastyslave", + "dependencies": [ + "base >= 1.1", + "boblibrary", + "boblogistics", + "bobpower", + "bobplates", + "angelspetrochem", + "angelssmelting", + "? BurnerOffshorePump" + ], + "description": "The industry part of Advanced Autonomous Industries. Adds motors, powered offshore pumps, burner labs, and more. Alters tech and recipes. Additional features will be added gradually. Works with Bobs and Angels.", + "factorio_version": "1.1", + "homepage": "https://forums.factorio.com/viewtopic.php?f=94&t=48232" +} \ No newline at end of file diff --git a/aai-industry_9.2.4/locale/en/strings.cfg b/aai-industry/locale/en/strings.cfg similarity index 100% rename from aai-industry_9.2.4/locale/en/strings.cfg rename to aai-industry/locale/en/strings.cfg diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-assembling-machine.lua b/aai-industry/prototypes/entity/entity-burner-assembling-machine.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-assembling-machine.lua rename to aai-industry/prototypes/entity/entity-burner-assembling-machine.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-assembling-machine1.lua b/aai-industry/prototypes/entity/entity-burner-assembling-machine1.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-assembling-machine1.lua rename to aai-industry/prototypes/entity/entity-burner-assembling-machine1.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-filter-inserter.lua b/aai-industry/prototypes/entity/entity-burner-filter-inserter.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-filter-inserter.lua rename to aai-industry/prototypes/entity/entity-burner-filter-inserter.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-lab.lua b/aai-industry/prototypes/entity/entity-burner-lab.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-lab.lua rename to aai-industry/prototypes/entity/entity-burner-lab.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-lab1.lua b/aai-industry/prototypes/entity/entity-burner-lab1.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-lab1.lua rename to aai-industry/prototypes/entity/entity-burner-lab1.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-turbine.lua b/aai-industry/prototypes/entity/entity-burner-turbine.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-turbine.lua rename to aai-industry/prototypes/entity/entity-burner-turbine.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-burner-turbine1.lua b/aai-industry/prototypes/entity/entity-burner-turbine1.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-burner-turbine1.lua rename to aai-industry/prototypes/entity/entity-burner-turbine1.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-offshore-pump.lua b/aai-industry/prototypes/entity/entity-offshore-pump.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-offshore-pump.lua rename to aai-industry/prototypes/entity/entity-offshore-pump.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-ship-wreck.lua b/aai-industry/prototypes/entity/entity-ship-wreck.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-ship-wreck.lua rename to aai-industry/prototypes/entity/entity-ship-wreck.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-update.lua b/aai-industry/prototypes/entity/entity-update.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-update.lua rename to aai-industry/prototypes/entity/entity-update.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity-walls.lua b/aai-industry/prototypes/entity/entity-walls.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity-walls.lua rename to aai-industry/prototypes/entity/entity-walls.lua diff --git a/aai-industry_9.2.4/prototypes/entity/entity.lua b/aai-industry/prototypes/entity/entity.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/entity/entity.lua rename to aai-industry/prototypes/entity/entity.lua diff --git a/aai-industry_9.2.4/prototypes/item/item-update.lua b/aai-industry/prototypes/item/item-update.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/item/item-update.lua rename to aai-industry/prototypes/item/item-update.lua diff --git a/aai-industry_9.2.4/prototypes/item/item.lua b/aai-industry/prototypes/item/item.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/item/item.lua rename to aai-industry/prototypes/item/item.lua diff --git a/aai-industry_9.2.4/prototypes/recipe/recipe-final.lua b/aai-industry/prototypes/recipe/recipe-final.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/recipe/recipe-final.lua rename to aai-industry/prototypes/recipe/recipe-final.lua diff --git a/aai-industry_9.2.4/prototypes/recipe/recipe-update.lua b/aai-industry/prototypes/recipe/recipe-update.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/recipe/recipe-update.lua rename to aai-industry/prototypes/recipe/recipe-update.lua diff --git a/aai-industry_9.2.4/prototypes/recipe/recipe.lua b/aai-industry/prototypes/recipe/recipe.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/recipe/recipe.lua rename to aai-industry/prototypes/recipe/recipe.lua diff --git a/aai-industry_9.2.4/prototypes/technology/technology-update.lua b/aai-industry/prototypes/technology/technology-update.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/technology/technology-update.lua rename to aai-industry/prototypes/technology/technology-update.lua diff --git a/aai-industry_9.2.4/prototypes/technology/technology.lua b/aai-industry/prototypes/technology/technology.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/technology/technology.lua rename to aai-industry/prototypes/technology/technology.lua diff --git a/aai-industry_9.2.4/prototypes/torches.lua b/aai-industry/prototypes/torches.lua similarity index 100% rename from aai-industry_9.2.4/prototypes/torches.lua rename to aai-industry/prototypes/torches.lua diff --git a/aai-industry_9.2.4/settings.lua b/aai-industry/settings.lua similarity index 100% rename from aai-industry_9.2.4/settings.lua rename to aai-industry/settings.lua diff --git a/aai-industry_9.2.4/sounds/torch.ogg b/aai-industry/sounds/torch.ogg similarity index 100% rename from aai-industry_9.2.4/sounds/torch.ogg rename to aai-industry/sounds/torch.ogg diff --git a/aai-industry_9.2.4/thumbnail.png b/aai-industry/thumbnail.png similarity index 100% rename from aai-industry_9.2.4/thumbnail.png rename to aai-industry/thumbnail.png diff --git a/aai-industry_9.2.4/util.lua b/aai-industry/util.lua similarity index 100% rename from aai-industry_9.2.4/util.lua rename to aai-industry/util.lua diff --git a/aai-industry_9.2.4/info.json b/aai-industry_9.2.4/info.json deleted file mode 100644 index be3e4bea..00000000 --- a/aai-industry_9.2.4/info.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "aai-industry", - "version": "9.2.4", - "title": "AAI Industry", - "author": "Earendel, reworked by nastyslave", - "dependencies": [ - "base >= 1.1", - "boblibrary", - "boblogistics", - "bobpower", - "bobplates", - "angelspetrochem", - "angelssmelting", - "? toxicPollution", - "? BurnerOffshorePump" - ], - "description": "The industry part of Advanced Autonomous Industries. Adds motors, powered offshore pumps, burner labs, and more. Alters tech and recipes. Additional features will be added gradually. Works with Bobs and Angels.", - "factorio_version": "1.1", - "homepage": "https://forums.factorio.com/viewtopic.php?f=94&t=48232" -} \ No newline at end of file diff --git a/alien-biomes-hr-terrain/changelog.txt b/alien-biomes-hr-terrain/changelog.txt new file mode 100644 index 00000000..89a1be7a --- /dev/null +++ b/alien-biomes-hr-terrain/changelog.txt @@ -0,0 +1,11 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.6.1 +Date: 24. 11. 2020 + Info: + - Updated for Factorio 1.1. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 27. 01. 2020 + Info: + - Updated for Factorio 0.18. \ No newline at end of file diff --git a/alien-biomes-hr-terrain/data.lua b/alien-biomes-hr-terrain/data.lua new file mode 100644 index 00000000..a794fc0d --- /dev/null +++ b/alien-biomes-hr-terrain/data.lua @@ -0,0 +1 @@ +alien_biomes_hr_terrain = true \ No newline at end of file diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-0.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-0.png new file mode 100644 index 00000000..8e459fbc Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-0.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-1.png new file mode 100644 index 00000000..a20a514a Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-2.png new file mode 100644 index 00000000..cab515a1 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-3.png new file mode 100644 index 00000000..a707e9a4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-4.png new file mode 100644 index 00000000..ce9b736e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-5.png new file mode 100644 index 00000000..03fa3f8b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-6.png new file mode 100644 index 00000000..dfaba23e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-7.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-7.png new file mode 100644 index 00000000..c08da0ad Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-7.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-8.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-8.png new file mode 100644 index 00000000..679d9faa Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-8.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-9.png b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-9.png new file mode 100644 index 00000000..34db0b8f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/frozen-snow-9.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-1.png new file mode 100644 index 00000000..e3a3ca0e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-2.png new file mode 100644 index 00000000..b2df9166 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-3.png new file mode 100644 index 00000000..29288d9d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-4.png new file mode 100644 index 00000000..e2ac1502 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-5.png new file mode 100644 index 00000000..40d9509d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-6.png new file mode 100644 index 00000000..56354383 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-1.png new file mode 100644 index 00000000..c3eaf72f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-2.png new file mode 100644 index 00000000..85f2cc3d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-3.png new file mode 100644 index 00000000..11a5de2c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-aubergine-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-1.png new file mode 100644 index 00000000..603a74f0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-2.png new file mode 100644 index 00000000..9c0bc6da Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-3.png new file mode 100644 index 00000000..2833e511 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-4.png new file mode 100644 index 00000000..8737348c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-5.png new file mode 100644 index 00000000..9af6fa0e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-6.png new file mode 100644 index 00000000..c949f9a2 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-1.png new file mode 100644 index 00000000..9269d80b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-2.png new file mode 100644 index 00000000..2056a080 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-3.png new file mode 100644 index 00000000..3315ae37 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-beige-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-1.png new file mode 100644 index 00000000..91ce5b97 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-2.png new file mode 100644 index 00000000..57e4eb5b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-3.png new file mode 100644 index 00000000..e29fbe84 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-4.png new file mode 100644 index 00000000..5669e537 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-5.png new file mode 100644 index 00000000..9798c0aa Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-6.png new file mode 100644 index 00000000..6ae144ed Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-1.png new file mode 100644 index 00000000..a69d49b0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-2.png new file mode 100644 index 00000000..f10c6e76 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-3.png new file mode 100644 index 00000000..72a2efb7 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-black-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-1.png new file mode 100644 index 00000000..39ee083c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-2.png new file mode 100644 index 00000000..ae08a72a Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-3.png new file mode 100644 index 00000000..c02175c0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-4.png new file mode 100644 index 00000000..564b83ff Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-5.png new file mode 100644 index 00000000..636db68b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-6.png new file mode 100644 index 00000000..067ed8c9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-1.png new file mode 100644 index 00000000..40abc0d3 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-2.png new file mode 100644 index 00000000..537415b7 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-3.png new file mode 100644 index 00000000..ca18aab8 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-brown-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-1.png new file mode 100644 index 00000000..46d6e22b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-2.png new file mode 100644 index 00000000..f3098441 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-3.png new file mode 100644 index 00000000..582193d4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-4.png new file mode 100644 index 00000000..da5a02a8 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-5.png new file mode 100644 index 00000000..744a7812 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-6.png new file mode 100644 index 00000000..27c5d714 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-1.png new file mode 100644 index 00000000..b8a592eb Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-2.png new file mode 100644 index 00000000..6ca6af9f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-3.png new file mode 100644 index 00000000..4c0e44fb Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-cream-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-1.png new file mode 100644 index 00000000..b04e6340 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-2.png new file mode 100644 index 00000000..4a8b05e0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-3.png new file mode 100644 index 00000000..fba4ec7d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-4.png new file mode 100644 index 00000000..2de6fa5e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-5.png new file mode 100644 index 00000000..96521eff Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-6.png new file mode 100644 index 00000000..dc79a08b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-1.png new file mode 100644 index 00000000..6b054475 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-2.png new file mode 100644 index 00000000..6d7c5aa4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-3.png new file mode 100644 index 00000000..bc1f6452 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-dustyrose-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-1.png new file mode 100644 index 00000000..b478eb2d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-2.png new file mode 100644 index 00000000..f8f37848 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-3.png new file mode 100644 index 00000000..b0ebb10e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-4.png new file mode 100644 index 00000000..618ee977 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-5.png new file mode 100644 index 00000000..97f4c449 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-6.png new file mode 100644 index 00000000..0ee3841d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-1.png new file mode 100644 index 00000000..a3de7931 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-2.png new file mode 100644 index 00000000..f71a15e9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-3.png new file mode 100644 index 00000000..4dc7a4d6 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-grey-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-1.png new file mode 100644 index 00000000..274ff07e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-2.png new file mode 100644 index 00000000..bf2b80e9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-3.png new file mode 100644 index 00000000..dda63236 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-4.png new file mode 100644 index 00000000..045c7d5f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-5.png new file mode 100644 index 00000000..555f5db4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-6.png new file mode 100644 index 00000000..6f6911bb Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-1.png new file mode 100644 index 00000000..e2a359c4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-2.png new file mode 100644 index 00000000..8b1d2115 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-3.png new file mode 100644 index 00000000..0b351c9a Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-purple-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-1.png new file mode 100644 index 00000000..6b7f645d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-2.png new file mode 100644 index 00000000..81d501ff Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-3.png new file mode 100644 index 00000000..597bb896 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-4.png new file mode 100644 index 00000000..830a0608 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-5.png new file mode 100644 index 00000000..406c90ba Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-6.png new file mode 100644 index 00000000..e2c48234 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-1.png new file mode 100644 index 00000000..910bc73b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-2.png new file mode 100644 index 00000000..1c37132d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-3.png new file mode 100644 index 00000000..abe0991c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-red-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-1.png new file mode 100644 index 00000000..21ce1745 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-2.png new file mode 100644 index 00000000..f48144ad Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-3.png new file mode 100644 index 00000000..f626fbac Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-4.png new file mode 100644 index 00000000..c6199c94 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-5.png new file mode 100644 index 00000000..642c8a68 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-6.png new file mode 100644 index 00000000..7214c91e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-1.png new file mode 100644 index 00000000..95763101 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-2.png new file mode 100644 index 00000000..ceddef73 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-3.png new file mode 100644 index 00000000..dcefa5a2 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-tan-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-1.png new file mode 100644 index 00000000..94f5b49f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-2.png new file mode 100644 index 00000000..f9eb53e0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-3.png new file mode 100644 index 00000000..77c50117 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-4.png new file mode 100644 index 00000000..8ecbd092 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-5.png new file mode 100644 index 00000000..9833a747 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-6.png new file mode 100644 index 00000000..8e067c43 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-1.png new file mode 100644 index 00000000..087e7ef4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-2.png new file mode 100644 index 00000000..b42343ff Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-3.png new file mode 100644 index 00000000..43e3ac8b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-violet-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-1.png new file mode 100644 index 00000000..a61863b8 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-2.png new file mode 100644 index 00000000..99f698d4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-3.png new file mode 100644 index 00000000..df9de8db Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-4.png new file mode 100644 index 00000000..ec4f6fc6 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-5.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-5.png new file mode 100644 index 00000000..498dd2ec Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-5.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-6.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-6.png new file mode 100644 index 00000000..31dd9913 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-dirt-6.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-1.png new file mode 100644 index 00000000..0bb1993b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-2.png new file mode 100644 index 00000000..99d7e9d4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-3.png new file mode 100644 index 00000000..c7c3eca9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/mineral-white-sand-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-1.png new file mode 100644 index 00000000..7a9beb20 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-2.png new file mode 100644 index 00000000..362d8a08 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-blue-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-1.png new file mode 100644 index 00000000..50685b29 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-2.png new file mode 100644 index 00000000..d0d95cce Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-3.png new file mode 100644 index 00000000..135502d9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-4.png new file mode 100644 index 00000000..47bf5698 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-green-grass-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-1.png new file mode 100644 index 00000000..ae81a2a0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-2.png new file mode 100644 index 00000000..69d96888 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-mauve-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-1.png new file mode 100644 index 00000000..776d45cb Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-2.png new file mode 100644 index 00000000..2f40009c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-olive-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-1.png new file mode 100644 index 00000000..a50350d8 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-2.png new file mode 100644 index 00000000..3ef027fd Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-orange-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-1.png new file mode 100644 index 00000000..e63a7e5c Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-2.png new file mode 100644 index 00000000..492249b0 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-purple-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-1.png new file mode 100644 index 00000000..57f1adbf Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-2.png new file mode 100644 index 00000000..a5fd8e71 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-red-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-1.png new file mode 100644 index 00000000..4cee703a Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-2.png new file mode 100644 index 00000000..1f05b6c9 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-turquoise-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-1.png new file mode 100644 index 00000000..de2e7b64 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-2.png new file mode 100644 index 00000000..00c14e2f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-violet-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-1.png new file mode 100644 index 00000000..d5e64876 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-2.png new file mode 100644 index 00000000..c30b76c3 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/vegetation-yellow-grass-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-1.png new file mode 100644 index 00000000..5748f00e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-2.png new file mode 100644 index 00000000..4edf5e8b Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-3.png new file mode 100644 index 00000000..50629337 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-4.png new file mode 100644 index 00000000..b75a58b4 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-blue-heat-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-1.png new file mode 100644 index 00000000..8c889c9e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-2.png new file mode 100644 index 00000000..a190b1dd Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-3.png new file mode 100644 index 00000000..cfd32257 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-4.png new file mode 100644 index 00000000..d184387e Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-green-heat-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-1.png new file mode 100644 index 00000000..24336697 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-2.png new file mode 100644 index 00000000..90ce8898 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-3.png new file mode 100644 index 00000000..74cf018d Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-4.png new file mode 100644 index 00000000..38e17574 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-orange-heat-4.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-1.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-1.png new file mode 100644 index 00000000..0f8143ea Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-1.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-2.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-2.png new file mode 100644 index 00000000..eab28b65 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-2.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-3.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-3.png new file mode 100644 index 00000000..345cc59f Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-3.png differ diff --git a/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-4.png b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-4.png new file mode 100644 index 00000000..8de77d51 Binary files /dev/null and b/alien-biomes-hr-terrain/graphics/terrain/hr/volcanic-purple-heat-4.png differ diff --git a/alien-biomes-hr-terrain/info.json b/alien-biomes-hr-terrain/info.json new file mode 100644 index 00000000..809f535a --- /dev/null +++ b/alien-biomes-hr-terrain/info.json @@ -0,0 +1,10 @@ +{ + "name": "alien-biomes-hr-terrain", + "version": "0.6.1", + "title": "Alien Biomes High-Res Terrain", + "author": "Earendel", + "dependencies": ["base >= 1.1.0"], + "description": "The high-resolution textures for Alien Biomes. This mod does nothing on its own, it only provides textures to the Alien Biomes mod if it is installed. Not all the textures can fit in one zip file due to mod portal filesize restrictions.", + "factorio_version": "1.1", + "homepage":"https://factorio.miraheze.org/" +} diff --git a/alien-biomes-hr-terrain/licence.txt b/alien-biomes-hr-terrain/licence.txt new file mode 100644 index 00000000..6849f5e7 --- /dev/null +++ b/alien-biomes-hr-terrain/licence.txt @@ -0,0 +1,20 @@ +FMLDOL +Factorio Mod Limited Distribution Only Licence +https://docs.google.com/document/d/1z-6hZQekEHOu1Pk4z-V5LuwlHnveFLJGTjVAtjYHwMU +This software is provided without warranty and the software author/license owner cannot be held liable for damages. + +Commercial Use: +No. +You are not allowed to make money off this mod or any of the contained assets. +You are allowed to feature the mods in other media, such as Twitch or YouTube. It would be nice if you mentioned Earendel's Patreon https://www.patreon.com/earendel when featuring the mod but this in not a requirement. + +Modification: +Restricted. +You may make alterations for your own private personal use only. +You are not allowed to distribute anything altered, or derived from this mod with the following exception: +You may post partial modified sections of this mod in Earendel's discord https://discord.gg/ymjUVMv for the purpose of providing bug fixes or enhancements. + +Distribution: +Yes, but with the following conditions: +The mod must not be modified. (Repackaging the mod does not count as modification. It can be used in mod packs.) +You must disclose the source by providing a link to the mod on the mod portal https://mods.factorio.com, a link to the Earendel's discord https://discord.gg/ymjUVMv for bug reporting and discussion, and a link to Earendel's Patreon https://www.patreon.com/earendel to support further development. diff --git a/alien-biomes-hr-terrain/thumbnail.png b/alien-biomes-hr-terrain/thumbnail.png new file mode 100644 index 00000000..fb23fbf5 Binary files /dev/null and b/alien-biomes-hr-terrain/thumbnail.png differ diff --git a/alien-biomes-hr-terrain_0.6.1.zip b/alien-biomes-hr-terrain_0.6.1.zip deleted file mode 100644 index 4528286d..00000000 Binary files a/alien-biomes-hr-terrain_0.6.1.zip and /dev/null differ diff --git a/alien-biomes/README.md b/alien-biomes/README.md new file mode 100644 index 00000000..d6bfae22 --- /dev/null +++ b/alien-biomes/README.md @@ -0,0 +1,6 @@ +# alien-biomes +Alien Biomes + +This is **NOT** an open source project, please check the licence file. + +If you would like to contribute please contact Earendel on Discord first: https://discord.gg/ymjUVMv diff --git a/alien-biomes/changelog.txt b/alien-biomes/changelog.txt new file mode 100644 index 00000000..fd2d7d25 --- /dev/null +++ b/alien-biomes/changelog.txt @@ -0,0 +1,348 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.6.8 +Date: 03. 11. 2022 + Compatibility: + - Added warning message when Alien Biomes has to remove tiles from other mods due to the tile limit. + - [K2] K2 tiles are now considered higher priority and will be kept before tiles from other mods when the tile limit is reached. + - [IR] Fixed a crash that could occur when trying to modify tree prototypes that don't have an autoplace specification. + - [IR] Eased tile restrictions for IR's rubber trees, which are now only restricted from spawning in volcanic and frozen biomes. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.7 +Date: 17. 02. 2022 + Compatibility: + - Fixed load order problem with IR2. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.6 +Date: 16. 02. 2022 + Bugfixes: + - Fix tile transition to "water wube" for future menu simulations. + + Compatibility: + - Landfill won't collide with resources is water also doesn't (for mods with water resources). + - Allows IR2 rubber trees to spawn on grass. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.5 +Date: 15. 05. 2021 + Locale: + - Russian translation thanks to Shadow_Man. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.4 +Date: 21. 01. 2021 + Compatibility: + - Spider leg fix for Klonan. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.3 +Date: 14. 12. 2020 + Bugfixes: + - Fixed player wouldn't collide with pipes due to shared code with Combat Mechanics Overhaul. (You can use Combat Mechanics Overhaul to get that feature.) + +--------------------------------------------------------------------------------------------------- +Version: 0.6.2 +Date: 12. 12. 2020 + Changes: + - Tree collision changes: Previously trees were given much smaller collision boxes to make it easier for players to move through but this had unwanted sideffects. Now trees don't collide with the player at all and have their collision box restored to the vanilla default size. + - Some trees have additional tile restrictions. This prevents grassland trees from appearing on dirt and dryland trees appearing in desert. + - Increased tree pollution absorption by 50%. + - Trees have layered icons with tinted leaves. + + Locle: + - Trees have names. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.1 +Date: 24. 11. 2020 + Info: + - Updated for Factorio 1.1. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.8 +Date: 16. 08. 2020 + Changes: + - Added nuclear ground as a priority tile. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.7 +Date: 07. 08. 2020 + Locale: + - Added Japanese translation. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.6 +Date: 31. 05. 2020 + Locale: + - Added Chinese translation thanks to Frost. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.5 +Date: 26. 05. 2020 + Changes: + - Specified the minimum Factorio version number as 0.18.27. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.4 +Date: 24. 05. 2020 + Changes: + - Added character footstep and vehicle driving partical effects for all tile types (but still a work in process). + + Bugfixes: + - Fixed loading error with newer versions of Factorio if the "remove obsolete tiles" option was enabled. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.3 +Date: 29. 04. 2020 + Changes: + - Added experimental rivers generation. The rivers genereration is acceptable in some cases but in most cases the effect is not great so it is disabled by default. + - Changed the structure of mod settings so that other mods can alter the list of allowed values and force certain tiles to exist if they are required. If you are not using the default settings then it is advisable to match your previous settings before loading an old save. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.2 +Date: 21. 03. 2020 + Bugfixes: + - Fixed a mod compatibility issue related to removing tiles in settings. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 27. 01. 2020 + Info: + - Updated for Factorio 0.18. + + Changes: + - Added reflections for trees. + - Added normal maps for trees (so the leaves sway in the wind). + - Updated licence file to specifically allow streamers and youtubers to feature the mod, and to list discord https://discord.gg/ymjUVMv as the primary locating for suggested code changes. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.16 +Date: 22. 10. 2019 + Changes: + - Changed landfill texture to use new dedicated landfill texture. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.15 + Changes: + - Increased frozen biome pollution absorption (more). + +--------------------------------------------------------------------------------------------------- +Version: 0.4.14 + Changes: + - Increased frozen biome pollution absorption. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.14 + Bugfixes: + - Update tree picture prototype to match a change in the base game. + - Added a missing terrain tile to the priority tiles list. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.12 + Bugfixes: + - Mod portal zip file seemed to be broken for some reason. Also fixed the change log. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.11 + Changes: + - Changed shallow water so it can't spawn above elevation 0 and put water on otherwise waterless planets. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.10 + Graphics: + - Upscaled Medusa tree graphics by Kamsta99 + +--------------------------------------------------------------------------------------------------- +Version: 0.4.9 + Bugfixes: + - Fixed trees not being selectable over resources. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.8 + Changes: + - Changed to static title transitions so that the mod can't be disabled by other mods recklessly changing vanilla functions. + Features: + - Changed tree selection priority so they are not in the way. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.7 + Bugfixes: + - Fixed error if you disable all volcanic tiles. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.6 + Changes: + - Put "out-of-map" tile back at layer index 0. + + Ease of use: + - Reduced tree and rock health. + - Reduced rock spawn amounts. + + Graphics: + - Partial hr graphics for snow biome trees thanks to Kamsta99. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.5 + Bugfixes: + - Fixed issue with landfill and Dectorio. + + Changes: + - Added pollution absorption rates matching the new spec. + - Increased scale of in-biome tile noise to reduce 'camo' effect. + - Moved 2 of the 5 dirt tiles into small rare dirt patches within grass biomes. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 + Bugfixes: + - Fixed landfill would not work on wetland shallow water + +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 + Changes: + - Removed around 150 noise layers by changing tiles from having their own noise layer to using the same one but with offsets. This should fix issues where the game would crash from having too many noise layers. The mod only adds 5 now. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 + Changes: + - Vanilla "grass-1" is no longer a required + +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 + Info: + - Updated for Factorio 0.17. + + Changes: + - The terrain climate mod settings have been merged into map settings. + - Terrain placement changed to use the probability expression system of 0.17. + - The 'Regenerate Map' code has been removed and made into a standalone mod: "Regenerate Terrain". + - All tree settings have been tweaked. + + Features: + - Sand now appears next to water for beaches. + - Original Palm trees have been added, they spawn on beaches. + + Major Features: + - Shallow water has been added to coasts. + - Shallow water has been added to wetland biomes. + + Sounds: + - Created spashing audio for shallow water. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 + Changes: + - Added settings so that you completely remove biomes from the game, preventing them from loading and taking up tile ids (255 tile limit). + + Optimisations: + - Most decoratives now use tinting instead of dedicated textures. + + Ease of use: + - Added setting to reduce terrain player movement penalty. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 + Changes: + - Added decal layer correction post process. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 + Bugfixes: + - Fixed wrong function call. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 + Major Features: + - If over 255 tiles are in data.raw the game won't load, so tiles are removed (replaced with landfill) until it will load an you can access the menu. This at least lets you access the menu and disable mods that add tiles you don't need, or you can play that way if you don't mind missing those tiles. You can see what is removed in your log file. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 + Changes: + - Made obsolete vanilla tile removal optional (disabled by default) so that mods that require them will not break. Restored dead trees. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 + Bugfixes: + - Fixed Craters for medium res. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 + Info: + - Complete rebuild. There may be bugs. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.7 + Bugfixes: + - Fixed stone decals being removed by vanilla change. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.6 + Bugfixes: + - Fixed decals overlapping water (on newly generated sections). + +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 + Bugfixes: + - Fixed sounds were missing from v0.2.4 due to a new packaging script missing them. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.4 + Changes: + - Added generic bedrock decals for most biomes. + + Graphics: + - Added some High-Resolution graphics. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 + Bugfixes: + - Fixed landfill appearing as red desert. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 + Info: + - Updated for Factorio 0.15. High-resolution graphics will be in a future release. If continuing a 0.14 map there may be hard edges on newly generated chunks. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.7 + Features: + - Adds 2 new tree types with completely original models (i.e. not a recolour of vanilla trees). Snow Fir Tree, and Volcanic Coral Tree. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 + Bugfixes: + - Fixes placing landfill in deep water. + + Features: + - Landfill now has it's own tile type and a new icon. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 + Features: + - Added Volcanic Tileset. + + Bugfixes: + - All biomes (including vanilla land tiles) now have the missing u and o variants, which means that you don't get the weirdness that can happen in vanilla when you place flooring near a biome transition. + - All tiles (including vanilla) now have order strings so they are in a sensible order in the map editor. + + Locale: + - All tiles now have locale strings. + + +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 + Sounds: + - Snow Footstep Sounds + +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 + Bugfixes: + - Fixed Tundra assignment. + + Features: + - Added more tree variations. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 + Changes: + - Improved biome distribution edge blending (less straight lines) diff --git a/combat-mechanics-overhaul_0.6.24/collision-mask-util-extended/control/collision-mask-util-control.lua b/alien-biomes/collision-mask-util-extended/control/collision-mask-util-control.lua similarity index 100% rename from combat-mechanics-overhaul_0.6.24/collision-mask-util-extended/control/collision-mask-util-control.lua rename to alien-biomes/collision-mask-util-extended/control/collision-mask-util-control.lua diff --git a/combat-mechanics-overhaul_0.6.24/collision-mask-util-extended/data/collision-mask-util-extended.lua b/alien-biomes/collision-mask-util-extended/data/collision-mask-util-extended.lua similarity index 100% rename from combat-mechanics-overhaul_0.6.24/collision-mask-util-extended/data/collision-mask-util-extended.lua rename to alien-biomes/collision-mask-util-extended/data/collision-mask-util-extended.lua diff --git a/alien-biomes/control.lua b/alien-biomes/control.lua new file mode 100644 index 00000000..d363acd9 --- /dev/null +++ b/alien-biomes/control.lua @@ -0,0 +1,18 @@ +local function print_tiles_removed_warning() + if #game.tile_prototypes == 255 then -- I guess you could end up with exactly 255 without us removing anything but that's pretty unlikely + + if not global.warned_last_time then + game.print({"alien-biomes.tiles-removed-warning"}) + if settings.startup["alien-biomes-remove-obsolete-tiles"].value ~= "Enabled" then + game.print({"alien-biomes.tiles-removed-warning-try-remove-obsolete"}) + end + end + global.warned_last_time = true + + else + global.warned_last_time = false + end +end + +script.on_configuration_changed(print_tiles_removed_warning) +script.on_event(defines.events.on_player_created, print_tiles_removed_warning) diff --git a/alien-biomes/data-final-fixes.lua b/alien-biomes/data-final-fixes.lua new file mode 100644 index 00000000..44d1810b --- /dev/null +++ b/alien-biomes/data-final-fixes.lua @@ -0,0 +1,429 @@ +local data_util = require('data-util') +local fallback_tile = "landfill" +local transitions = require("prototypes/tile/tile-transitions-static") + +require("prototypes/phase-3/collision-common") + +-- now that terrains can be larger spread out resources +for _, resource in pairs(data.raw.resource) do + if resource.coverage then + resource.coverage = resource.coverage / 2 + end + if resource.richness_multiplier_distance_bonus then + resource.richness_multiplier_distance_bonus = 1 + (resource.richness_multiplier_distance_bonus - 1) / 2 + end + resource.selection_priority = 0 +end + +-- it may be tempting to completely remove all vegetation entities from the game for this +-- but that would be bad becuase it would affect existing chunks and break mods +if settings.startup["alien-biomes-disable-vegetation"].value == "Enabled" then + for _, prototype in pairs(data.raw['tree']) do + prototype.autoplace = nil + end + for _, prototype in pairs(data.raw['tile']) do + if string.find(prototype.name, "grass") then + prototype.autoplace = nil + end + end + for _, prototype in pairs(data.raw['tile']) do + if string.find(prototype.name, "grass") then + prototype.autoplace = nil + end + end + local block_decorative_words = {"grass", "asterisk", "fluff", "garballo", "bush", "croton", "pita", "cane"} + for _, prototype in pairs(data.raw['optimized-decorative']) do + for _, word in pairs(block_decorative_words) do + if string.find(prototype.name, word) then + prototype.autoplace = nil + end + end + end + data.raw['fish']['fish'].autoplace = nil +end + +data.raw.tile.landfill.map_color = { r = 68, g = 61, b = 55 } +data.raw.tile.landfill.layer = 37 +data.raw.tile.landfill.pollution_absorption_per_second=0.0 +data.raw.tile.landfill.variants.material_background = + { + picture = "__alien-biomes__/graphics/terrain/landfill.png", + count = 8, + hr_version = + { + picture = "__alien-biomes__/graphics/terrain/hr-landfill.png", + count = 8, + scale = 0.5 + } + } +data.raw.tile.landfill.transitions = transitions.cliff_transitions() +data.raw.tile.landfill.transitions_between_transitions = transitions.cliff_transitions_between_transitions() + +for _, tile in pairs(data.raw.tile) do + if tile.name == "water" or tile.name == "deepwater" or tile.name == "water-shallow" or tile.name == "water-mud" then + tile.pollution_absorption_per_second=0.0000075 + elseif string.find(tile.name, "grass") or string.find(tile.name, "frozen") then + tile.pollution_absorption_per_second= math.min(tile.pollution_absorption_per_second or 0.0000075, 0.0000075) + elseif string.find(tile.name, "dirt") then + tile.pollution_absorption_per_second= math.min(tile.pollution_absorption_per_second or 0.000005, 0.000005) + else + tile.pollution_absorption_per_second= math.min(tile.pollution_absorption_per_second or 0.0000025, 0.0000025) + end +end + +local function swap_tile_restriction(prototypes, old_name, new_name) + for _, prototype in pairs(prototypes) do + if prototype.autoplace and prototype.autoplace.tile_restriction then + for _, restriction in pairs(prototype.autoplace.tile_restriction) do + if restriction == old_name then + prototype.autoplace.tile_restriction[_] = new_name + end + end + end + end +end + + +local function swap_tile_restrictions(old_name, new_name) + + -- decoratives on tiles + swap_tile_restriction(data.raw["optimized-decorative"], old_name, new_name) + + -- simple-entities on tiles + swap_tile_restriction(data.raw["simple-entity"], old_name, new_name) + + -- trees on tiles + swap_tile_restriction(data.raw["tree"], old_name, new_name) + +end + +local function remove_from_transitions(remove_tile) + for _, tile in pairs(data.raw.tile) do + if tile.transitions then + for _, transition in pairs(tile.transitions) do + if transition.to_tiles then + for _, to_tile in pairs(transition.to_tiles) do + if to_tile == remove_tile then + transition.to_tiles[_] = nil + end + end + end + end + end + if tile.next_direction == remove_tile then + tile.next_direction = nil + end + end +end + +local function remove_tile(tile_name) + data.raw.tile[tile_name] = nil + remove_from_transitions(tile_name) + swap_tile_restrictions(tile_name, nil) + + for _, character in pairs(data.raw.character) do + if character.footprint_particles then + for i, particle in pairs(character.footprint_particles) do + if particle.tiles and table_size(particle.tiles) > 0 then + data_util.remove_from_table(particle.tiles, tile_name) + if table_size(particle.tiles) == 0 then + table.remove(character.footprint_particles, i) + end + end + end + if table_size(character.footprint_particles) == 0 then + character.footprint_particles = nil + end + end + + if character.synced_footstep_particle_triggers then + for i, particle in pairs(character.synced_footstep_particle_triggers) do + if particle.tiles and table_size(particle.tiles) > 0 then + data_util.remove_from_table(particle.tiles, tile_name) + if table_size(particle.tiles) == 0 then + table.remove(character.synced_footstep_particle_triggers, i) + end + end + end + if table_size(character.synced_footstep_particle_triggers) == 0 then + character.synced_footstep_particle_triggers = nil + end + end + end + + for _, car in pairs(data.raw.car) do + if car.track_particle_triggers then + for i, particle in pairs(car.track_particle_triggers) do + if particle.tiles and table_size(particle.tiles) > 0 then + data_util.remove_from_table(particle.tiles, tile_name) + if table_size(particle.tiles) == 0 then + table.remove(car.track_particle_triggers, i) + end + end + end + if table_size(car.track_particle_triggers) == 0 then + car.track_particle_triggers = nil + end + end + end + +end + +local function replace_tile_with_tile(old_name, new_name) + + if data.raw.tile[new_name] then + -- items that place tiles + for _, prototype in pairs(data.raw["item"]) do + if prototype.place_as_tile and prototype.place_as_tile.result == old_name then + prototype.place_as_tile.result = new_name + end + end + + remove_from_transitions(old_name) + + swap_tile_restrictions(old_name, new_name) + end + +end + +-- make things use the alien biomes tile if possible. +for old_name, new_name in pairs(alien_biomes.tile_alias) do + replace_tile_with_tile(old_name, new_name) +end + + + + +local disable_unused_tiles = function() + for old_name, new_name in pairs(alien_biomes.tile_alias) do + -- grass 1 is often used by other mods as a template so keep it + if data.raw.tile[new_name] and old_name ~= "grass-1" and old_name ~= "dirt-1" then + remove_tile(old_name) + end + end + remove_tile("water-green") + remove_tile("deepwater-green") +end + +if settings.startup["alien-biomes-remove-obsolete-tiles"].value == "Enabled" then + disable_unused_tiles() +end + + +local function include_or_exclude_tiles(tile_list, tile_count2) + for _, tile in pairs(tile_list) do + tile_count2 = tile_count2 + 1 + if tile_count2 <= 255 then + log( "Tile "..tile_count2.." included: ".. tile.name) + -- add the tile back in + data.raw.tile[tile.name] = tile + else + log( "Tile "..tile_count2.." excluded: ".. tile.name) + replace_tile_with_tile(tile.name, fallback_tile) + end + end + return tile_count2 +end + +-- if there are more than 255 tiles the game will not load. +-- remove tiles over the 255 limit so people can at least get to the menu and change settings +-- plaecable tiles (floors) are less important than terrain, becuase you can fix floors later +-- but if terrain is messed up your save is broken! +local function force_game_load() + local tile_count = table_size(data.raw.tile) + + if tile_count > 255 then + log( "More than 255 tiles are defined, the game will not load unless some are removed." ) + local sorted_tiles = {} -- vanilla critical + sorted_tiles[1] = {} -- vanilla critical + sorted_tiles[2] = {} -- AB critical + sorted_tiles[3] = {} -- alien_biomes_priority_tiles (priority modded tiles) + sorted_tiles[4] = {} -- other vanilla or mod tiles + sorted_tiles[5] = {} -- vanilla unused + local priority_tiles = { + "tile-unknown", "out-of-map", + "deepwater", "deepwater-green", "water", "water-green", "water-shallow", "water-mud", "grass-1", + "lab-dark-1", "lab-dark-2", "lab-white", "tutorial-grid", + "stone-path", "concrete", "hazard-concrete-left", "hazard-concrete-right", + "refined-concrete", "refined-hazard-concrete-left", "refined-hazard-concrete-right", + "landfill", "building-platform", "nuclear-ground", + "se-space", "se-asteroid", "se-spaceship-floor", + "se-space-platform-scaffold", "se-space-platform-plating", "se-regolith", "interior-divider", "se-interior-divider" -- "se-interior-divider" in case we fix the name in the future + } + local low_priority_tiles = {} + + if not mods["Dectorio"] then -- Dectorio uses those, don't make them low priority when it's active + local refined_concrete_list = { + "red-refined-concrete", "green-refined-concrete", "blue-refined-concrete", "orange-refined-concrete", "yellow-refined-concrete", + "pink-refined-concrete", "purple-refined-concrete", "black-refined-concrete", "brown-refined-concrete", "cyan-refined-concrete", "acid-refined-concrete" + } + data_util.concatenate_lists(low_priority_tiles, refined_concrete_list) + end + + local priority_tiles_set = data_util.list_to_set(priority_tiles) + local low_priority_tiles_set = data_util.list_to_set(low_priority_tiles) + local alien_biomes_tiles_set = data_util.list_to_set(alien_biomes.list_tiles(alien_biomes.all_tiles())) + local alien_biomes_priority_tiles_set = data_util.list_to_set(alien_biomes_priority_tiles) + for _, tile in pairs(data.raw.tile) do + + local priority = nil + + if priority_tiles_set[tile.name] then + priority = 1 + elseif alien_biomes_tiles_set[tile.name] then + priority = 2 + elseif alien_biomes_priority_tiles_set[tile.name] then + priority = 3 + elseif low_priority_tiles_set[tile.name] then + priority = 5 + else + priority = 4 + end + + data.raw.tile[tile.name] = nil + table.insert(sorted_tiles[priority], tile) + end + + local tile_count2 = 0 + -- all tiles are removed, put back in by priority + for i, tile_list in pairs(sorted_tiles) do + log("Priority " .. i .. ":") + tile_count2 = include_or_exclude_tiles(tile_list, tile_count2) + end + + end + +end +force_game_load() + +local function set_decals_to_layer(decal_layer) + log("Setting decals to layer " .. decal_layer) + for _, decal in pairs(data.raw['optimized-decorative']) do + if decal.tile_layer == default_decal_layer then + decal.tile_layer = decal_layer + end + end +end + +-- there are lots of terrain layers now +-- most constructed tiles / flooring do not expect that and have a layer that is too low +-- sort the layers +local function sort_tile_layers() + local ab_by_name = {} + for _, name in pairs(alien_biomes.list_tiles(alien_biomes.all_tiles())) do + ab_by_name[name] = name + end + local exclusions = {"out-of-map", "water", "deepwater", "water-green", "deepwater-green", "water-wube", "water-shallow", "water-mud", "grass-1", "landfill"} + local ab_layers = {} + local other_layers = {} + for _, tile in pairs(data.raw.tile) do + local exclude = false + for _, name in pairs(exclusions) do + if name == tile.name then exclude = true end + end + if not exclude then + local layer = tile.layer or 1 + if ab_by_name[tile.name] then + ab_layers[layer] = ab_layers[layer] or {} + table.insert(ab_layers[layer], tile) + else + other_layers[layer] = other_layers[layer] or {} + table.insert(other_layers[layer], tile) + end + end + end + + -- water + data.raw.tile["out-of-map"].layer = 0 + data.raw.tile["water"].layer = 1 + data.raw.tile["deepwater"].layer = 2 + if data.raw.tile["water-green"] then data.raw.tile["water-green"].layer = 1 end + if data.raw.tile["deepwater-green"] then data.raw.tile["deepwater-green"].layer = 2 end + data.raw.tile["water-wube"].layer = 3 + local next_layer = 4 + if data.raw.tile["water-shallow"] then + data.raw.tile["water-shallow"].layer = next_layer + next_layer = next_layer + 1 + end + if data.raw.tile["water-mud"] then + data.raw.tile["water-mud"].layer = next_layer + next_layer = next_layer + 1 + end + if data.raw.tile["grass-1"] then + data.raw.tile["grass-1"].layer = next_layer + next_layer = next_layer + 1 + end + + -- then terrain + + local i = 0 + -- use i becuase layer lists can be populated in different orders + for i = 0, 255, 1 do + if ab_layers[i] then + local layer_group = ab_layers[i] + for _, tile in pairs(layer_group) do + tile.layer = next_layer + next_layer = next_layer + 1 + end + end + end + + -- then landfill + data.raw.tile["landfill"].layer = next_layer + next_layer = next_layer + 1 + + local decal_layer = next_layer -1 + + -- then floors + for i = 0, 255, 1 do + if other_layers[i] then + local layer_group = other_layers[i] + for _, tile in pairs(layer_group) do + if tile.next_direction and data.raw.tile[tile.next_direction] and data.raw.tile[tile.next_direction].ab_layer_changed then + -- keep tile rotations on the same layer + tile.layer = data.raw.tile[tile.next_direction].layer + tile.ab_layer_changed = true + else + tile.layer = next_layer + tile.ab_layer_changed = true + next_layer = next_layer + 1 + end + end + end + end + + for _, layer_group in pairs(other_layers) do + for _, tile in pairs(layer_group) do + tile.ab_layer_changed = nil + end + end + + -- set decals to final terrain layer + set_decals_to_layer(decal_layer) +end +sort_tile_layers() + +local function log_tiles() + log("logging tile layers") + local log_data = {} + for _, tile in pairs(data.raw.tile) do + log_data["layer " .. tile.layer] = log_data["layer " .. tile.layer] and log_data["layer " .. tile.layer] .. ", " .. tile.name or tile.name + end + log( serpent.block( log_data, {comment = false, numformat = '%1.8g' } ) ) +end +log_tiles() + +data.raw["utility-constants"].default.entity_renderer_search_box_limits.bottom = 6 -- reduce tall tree pop + +--log( serpent.block( data.raw, {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw["tree"], {comment = false, numformat = '%1.8g' } ) ) + +--log( serpent.block( data.raw["noise-layer"], {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw, {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( alien_biomes.all_tiles(), {comment = false, numformat = '%1.8g' } ) ) + +--log( serpent.block( data.raw["simple-entity"], {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw["optimized-decorative"], {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw["optimized-decorative"]['puberty-decal'], {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw["optimized-decorative"]['light-mud-decal'], {comment = false, numformat = '%1.8g' } ) ) +--log( serpent.block( data.raw["optimized-decorative"]['stone-decal-tan'], {comment = false, numformat = '%1.8g' } ) ) diff --git a/alien-biomes/data-updates.lua b/alien-biomes/data-updates.lua new file mode 100644 index 00000000..a9fdbc97 --- /dev/null +++ b/alien-biomes/data-updates.lua @@ -0,0 +1,6 @@ +for _, tree in pairs(data.raw.tree) do + if string.find(tree.name, "rubber", 1, true) and tree.autoplace then + tree.autoplace.tile_restriction = alien_biomes.list_tiles( + alien_biomes.exclude_tags(alien_biomes.all_tiles(), {"volcanic", "frozen"})) + end +end diff --git a/alien-biomes/data-util.lua b/alien-biomes/data-util.lua new file mode 100644 index 00000000..a512c426 --- /dev/null +++ b/alien-biomes/data-util.lua @@ -0,0 +1,47 @@ +local data_util = {} +data_util.str_gsub = string.gsub + +function data_util.replace(str, what, with) + what = data_util.str_gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern + with = data_util.str_gsub(with, "[%%]", "%%%%") -- escape replacement + return data_util.str_gsub(str, what, with) +end + +function data_util.replace_filenames_recursive(subject, what, with) + for _, sub in pairs(subject) do + if (type(sub) == "table") then + data_util.replace_filenames_recursive(sub, what, with) + elseif _ == "filename" then + subject.filename = data_util.replace(subject.filename, what, with) + end + end +end + +function data_util.remove_from_table(list, item) + local index = 0 + for _,_item in ipairs(list) do + if item == _item then + index = _ + break + end + end + if index > 0 then + table.remove(list, index) + end +end + +function data_util.concatenate_lists(a, b) + for _, item in pairs(b) do + table.insert(a, item) + end +end + +function data_util.list_to_set(list) + local set = {} + for _, item in pairs(list) do + set[item] = true + end + return set +end + +return data_util diff --git a/alien-biomes/data.lua b/alien-biomes/data.lua new file mode 100644 index 00000000..59a66975 --- /dev/null +++ b/alien-biomes/data.lua @@ -0,0 +1,62 @@ +-- test map seed: 2682915831 +local util = require("data-util") +local default_decal_layer = 183 -- should be replaced in data-final-fixes +if not logged_mods_once then logged_mods_once = true log("Log mods once: "..serpent.block(mods)) end +collision_mask_util_extended = require("__alien-biomes__/collision-mask-util-extended/data/collision-mask-util-extended") + +--[[ +Use this to make critical tiles a priortiy over placeable decorative tiles: +alien_biomes_priority_tiles = alien_biomes_priority_tiles or {} +table.insert(alien_biomes_priority_tiles, "my-tile-name") +]] +alien_biomes_priority_tiles = alien_biomes_priority_tiles or {} +-- Factorissimo2 +table.insert(alien_biomes_priority_tiles, "factory-floor-1") +table.insert(alien_biomes_priority_tiles, "factory-entrance-1") +table.insert(alien_biomes_priority_tiles, "factory-pattern-1") +table.insert(alien_biomes_priority_tiles, "factory-wall-1") +table.insert(alien_biomes_priority_tiles, "factory-floor-2") +table.insert(alien_biomes_priority_tiles, "factory-entrance-2") +table.insert(alien_biomes_priority_tiles, "factory-pattern-2") +table.insert(alien_biomes_priority_tiles, "factory-wall-2") +table.insert(alien_biomes_priority_tiles, "factory-floor-3") +table.insert(alien_biomes_priority_tiles, "factory-entrance-3") +table.insert(alien_biomes_priority_tiles, "factory-pattern-3") +table.insert(alien_biomes_priority_tiles, "factory-wall-3") +-- Krastorio 2 +table.insert(alien_biomes_priority_tiles, "kr-creep") +table.insert(alien_biomes_priority_tiles, "kr-white-reinforced-plate") +table.insert(alien_biomes_priority_tiles, "kr-black-reinforced-plate") + +local biomes = require("prototypes/biome/biomes") + +-- global +alien_biomes = {} +alien_biomes.all_tiles = biomes.all_tiles +alien_biomes.require_tag = biomes.require_tag +alien_biomes.require_tags = biomes.require_tags +alien_biomes.exclude_tags = biomes.exclude_tags +alien_biomes.list_tiles = biomes.list_tiles +alien_biomes.axes = biomes.axes +alien_biomes.spec = biomes.spec +alien_biomes.tile_alias = biomes.tile_alias + + +require("prototypes/styles") +require("prototypes/disables") +require("prototypes/noise-layers") +require("prototypes/noise-programs") +require("prototypes/decorative/decoratives") +require("prototypes/decorative/puddle-decal") +require("prototypes/decorative/wetland-decal") +require("prototypes/decorative/rocks") +require("prototypes/decorative/lava") +require("prototypes/decorative/vegetation") +require("prototypes/decorative/vegetation-bush") +require("prototypes/decorative/vegetation-cane") +require("prototypes/decorative/crater") +require("prototypes/entity/trees") + +for _, cliff in pairs(data.raw.cliff) do + util.replace_filenames_recursive(cliff.orientations, "__base__", "__alien-biomes__") +end diff --git a/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-01.png b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-01.png new file mode 100644 index 00000000..658aa022 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-01.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-02.png b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-02.png new file mode 100644 index 00000000..9bbab9e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-02.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-03.png b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-03.png new file mode 100644 index 00000000..a7ae560f Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-03.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-04.png b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-04.png new file mode 100644 index 00000000..81c815c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-04.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-05.png b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-05.png new file mode 100644 index 00000000..a46f12ed Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/hr/cane-cluster-05.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-01.png b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-01.png new file mode 100644 index 00000000..538cbba4 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-01.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-02.png b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-02.png new file mode 100644 index 00000000..7b6228ff Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-02.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-03.png b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-03.png new file mode 100644 index 00000000..512fb578 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-03.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-04.png b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-04.png new file mode 100644 index 00000000..425dfa1f Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-04.png differ diff --git a/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-05.png b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-05.png new file mode 100644 index 00000000..2c606f27 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-cluster/sr/cane-cluster-05.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-01.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-01.png new file mode 100644 index 00000000..8f713070 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-01.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-02.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-02.png new file mode 100644 index 00000000..f7da6a78 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-02.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-03.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-03.png new file mode 100644 index 00000000..e25e4b06 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-03.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-04.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-04.png new file mode 100644 index 00000000..2dfd4d96 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-04.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-05.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-05.png new file mode 100644 index 00000000..b8e44c19 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-05.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/hr/cane-single-06.png b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-06.png new file mode 100644 index 00000000..cda9cfe0 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/hr/cane-single-06.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-01.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-01.png new file mode 100644 index 00000000..005da8a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-01.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-02.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-02.png new file mode 100644 index 00000000..bd835ca2 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-02.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-03.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-03.png new file mode 100644 index 00000000..070f7226 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-03.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-04.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-04.png new file mode 100644 index 00000000..c1b6618b Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-04.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-05.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-05.png new file mode 100644 index 00000000..89b8f2d7 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-05.png differ diff --git a/alien-biomes/graphics/decorative/cane-single/sr/cane-single-06.png b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-06.png new file mode 100644 index 00000000..0f4d93c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/cane-single/sr/cane-single-06.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-huge-01.png b/alien-biomes/graphics/decorative/crater/hr/crater-huge-01.png new file mode 100644 index 00000000..40b83355 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-huge-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-large-01.png b/alien-biomes/graphics/decorative/crater/hr/crater-large-01.png new file mode 100644 index 00000000..d585b24d Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-large-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-large-02.png b/alien-biomes/graphics/decorative/crater/hr/crater-large-02.png new file mode 100644 index 00000000..e36eb13f Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-large-02.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-large-03.png b/alien-biomes/graphics/decorative/crater/hr/crater-large-03.png new file mode 100644 index 00000000..92520a7c Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-large-03.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-large-04.png b/alien-biomes/graphics/decorative/crater/hr/crater-large-04.png new file mode 100644 index 00000000..4fb2eafc Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-large-04.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-large-05.png b/alien-biomes/graphics/decorative/crater/hr/crater-large-05.png new file mode 100644 index 00000000..490c37d8 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-large-05.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-01.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-01.png new file mode 100644 index 00000000..3a9408bd Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-02.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-02.png new file mode 100644 index 00000000..55258ba6 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-03.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-03.png new file mode 100644 index 00000000..e7a45081 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-04.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-04.png new file mode 100644 index 00000000..bab595b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-05.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-05.png new file mode 100644 index 00000000..c222c5ed Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-06.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-06.png new file mode 100644 index 00000000..cc934236 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-medium-07.png b/alien-biomes/graphics/decorative/crater/hr/crater-medium-07.png new file mode 100644 index 00000000..6c803fbe Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/crater/hr/crater-small-01.png b/alien-biomes/graphics/decorative/crater/hr/crater-small-01.png new file mode 100644 index 00000000..4ca9d787 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/hr/crater-small-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-huge-01.png b/alien-biomes/graphics/decorative/crater/sr/crater-huge-01.png new file mode 100644 index 00000000..874d743d Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-huge-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-large-01.png b/alien-biomes/graphics/decorative/crater/sr/crater-large-01.png new file mode 100644 index 00000000..ee8a20f8 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-large-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-large-02.png b/alien-biomes/graphics/decorative/crater/sr/crater-large-02.png new file mode 100644 index 00000000..1bcd7fd9 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-large-02.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-large-03.png b/alien-biomes/graphics/decorative/crater/sr/crater-large-03.png new file mode 100644 index 00000000..23a04d18 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-large-03.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-large-04.png b/alien-biomes/graphics/decorative/crater/sr/crater-large-04.png new file mode 100644 index 00000000..ced48d33 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-large-04.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-large-05.png b/alien-biomes/graphics/decorative/crater/sr/crater-large-05.png new file mode 100644 index 00000000..ced14ee9 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-large-05.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-01.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-01.png new file mode 100644 index 00000000..6e043944 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-02.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-02.png new file mode 100644 index 00000000..90288dab Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-03.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-03.png new file mode 100644 index 00000000..88fdb9d9 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-04.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-04.png new file mode 100644 index 00000000..366c7277 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-05.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-05.png new file mode 100644 index 00000000..85785197 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-06.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-06.png new file mode 100644 index 00000000..eea4e1b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-medium-07.png b/alien-biomes/graphics/decorative/crater/sr/crater-medium-07.png new file mode 100644 index 00000000..9b1ae38a Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/crater/sr/crater-small-01.png b/alien-biomes/graphics/decorative/crater/sr/crater-small-01.png new file mode 100644 index 00000000..595ba3cd Binary files /dev/null and b/alien-biomes/graphics/decorative/crater/sr/crater-small-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..0fded2a0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..68910a02 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..c0ca0cb3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..5d65f799 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..977be12c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..4c70d51f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..d75a973b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..e651a633 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..0a3dda8a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..5f9b37be Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..ca3cdc6c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..efe87edf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..64ee15bb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..8e384574 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..522d580c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..9cd63060 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..eae1dfc8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..6d114304 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..d258cea2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..082ae136 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..d254cbe2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..aeeced5f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..e0243f48 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..47597227 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..0097ec8b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..2e4ba376 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..105ab841 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..c6a9a410 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..948bb2c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..0da72891 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..cced5a45 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..54b9b943 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..b6982a61 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..61565e96 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..0bd6f133 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..1d920002 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..8da9f1c0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..b135f6b3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..8507dbe8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..d1353dba Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..60786e89 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..1bc1f91b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..5b534e6d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..7aa75c4d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..85f55985 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..8e584583 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..23b7f4f9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..1af4f294 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..0fbf23f7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..d88fefb6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..00179f46 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..f9e95c41 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..78e1e0b7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..ef6f894e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..bcca7f6c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..6f84e43a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..12edc7db Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..1be77380 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..d9a4e47a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..c33e06f7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/aubergine/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..81227a5e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..fc90a933 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..f93b3bbe Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..1dae14bd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..77f36f4f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..9fb78931 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..25e4b5d0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..0e702bae Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..6609192a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..b9880fd6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..44bd324f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..217f4a79 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..2c7b7640 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..7e376764 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..1892d564 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..07ae713d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..85093109 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..762612f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..45892338 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..a031dbf5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..19ea64bf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..36c728d6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..4ba0c0b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..78bcddec Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..ca739c03 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..c7801fd7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..9d685a06 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..b2069295 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..7eb371ab Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..5670444f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..6d0bcf78 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..d6f39c39 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..ad9d1771 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..ba7f284f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..7bd4d333 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..c3ad1d1b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..80cba63f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..7ac12e76 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..335d4c32 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..d1c851aa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..b590b905 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..c2c8470b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..9e83142f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..08568c4f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..44b2df62 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..f3354d1b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..e3929424 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..8d94a5e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..2c9876b0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..ca9a68aa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..f2d2e323 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..9cb664f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..c72a5974 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..b8ec6b7c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..6394ec99 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..4afcdbe9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..36df1689 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..cbc94e53 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..5688b975 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..a6c2edaa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/beige/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..eb6ae037 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..7dc0a97d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..883ec5b0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..6d28c254 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..4a0586cf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..9b80f804 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..cd4e4b57 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..1d252ae7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..c23f4ac6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..75c2b9a2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..dacdb0f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..6a2ecbed Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..b8b3fba7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..6fcad426 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..972ca584 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..7b5dcf15 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..1d3ccb13 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..e5cfc4a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..336c6369 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..f38aea0d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..ceafd949 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..2d1715a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..4ddb4b3b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..87682bb7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..bdedcdc9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..9db45349 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..c789b731 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..45efcfa3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..55c52942 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..cbdbecb4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..2ef743d1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..ff4d3f2c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..53b2984b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..b1705dfa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..204775f1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..725ffb69 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..1c8b4954 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..be33fc5b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..4efb792d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..af90778f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..45650457 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..2db91fef Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..c43dc725 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..e9422b41 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..a4edd594 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..c70da793 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..6a37c306 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..747239a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..0b92071e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..412212e3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..1e8db825 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..3b3b16ba Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..dc9a37fb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..a7350e95 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..d2d9359c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..a478f644 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..a20a2b20 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..3a6a4f79 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..27cff51d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..b097f08a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/black/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..bef7db7f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..fec6d02a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..4fbf9f13 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..f013d494 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..e7cab7ec Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..b16b5998 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..a72342bd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..3892539b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..b42063cc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..3b69aca8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..cfbc547f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..043eff1c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..25439f1d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..78c3bd72 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..3c683e58 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..c1715ba9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..c22d8743 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..b9012b84 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..269370f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..19d81714 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..9cf8a13b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..cc158cc4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..ac7ec387 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..01c209a3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..920d9e18 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..45881ece Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..acf4c2f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..dbacf4ce Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..5a56c6bf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..831a5bb3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..cffbd127 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..c6c89b50 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..d2b48bfa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..07185ffc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..24f593f4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..bd6e9329 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..02eacb09 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..5bbc743b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..716b1c76 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..8e6642e1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..f6b3accd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..0ad30b3a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..666a3fc5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..ed920526 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..2c1adac5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..c0cf5f89 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..48e7e563 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..577f9878 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..c94d8729 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..445f7ae7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..c8d58b3a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..d0408a6e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..53217fe6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..8cf43161 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..0437d7de Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..546f2375 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..3c0c544e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..1e4c03ce Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..75b18eab Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..7168db2e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/brown/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..e672ca7c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..9fb4d149 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..75479697 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..d32b8ffe Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..5f2bb91a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..a7edbcca Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..872905cb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..318bca1c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..713d9a24 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..fefe4cf0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..fda62298 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..41780d4f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..ac1378f2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..e423ff44 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..e43b9cf6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..7cf85099 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..68389214 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..db54f24f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..b91e5a2d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..e9797d0e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..051e2e06 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..c175e267 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..41c2e269 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..39640171 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..94f3a298 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..90ce4afd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..a346f5b1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..f1bf8440 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..b1903972 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..7196b538 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..0daec656 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..96afa542 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..57d784c2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..bdd5381a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..f4e49b01 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..b7b3279d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..d1f47d48 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..a01bca01 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..f0df162e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..3cb78c6d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..b2ebc8b0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..f4b3932b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..4aedd9a2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..d75acfe0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..f97a392d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..bf41933f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..2905f5f2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..22398230 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..7832888f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..81337f37 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..7dce0446 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..18ce2d01 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..be298c29 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..501cd92a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..fd1e713e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..77144edd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..f4b95790 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..8ca1ebbc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..2b043ed3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..ab081b73 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/cream/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..53038f3d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..d708bb39 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..29b2b13d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..0aa42f40 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..89314bfc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..67a755a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..f12a9e34 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..60f3376b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..0c0e0709 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..de0c1133 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..7e53c633 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..f284433b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..087c6de1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..334bc9a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..6e883e05 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..6f6941da Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..f6ca76a0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..40137b92 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..2920d684 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..9ce2f60b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..0eb55f71 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..a139cdfd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..018b5038 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..75208395 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..7955704e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..37802669 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..6ec820ff Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..703be338 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..625d9e35 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..3e79bee9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..e4518b33 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..bbdda599 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..742f642e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..eec33926 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..132b3a58 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..7b0019bb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..a572ea95 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..d6e94d92 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..2384c5f9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..6d9e96f3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..f2216466 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..64080f49 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..5308b311 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..1a20f09f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..3c77a333 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..866a59ea Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..2f1f7a13 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..c4a44bf7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..b9fa26e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..db401fa6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..2ab36c8c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..90a82a0e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..895e2d8f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..25caa935 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..d5ca37d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..fb8e0e61 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..be3990fb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..33ffc354 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..e61fbee8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..462cbbee Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/dustyrose/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..f0e791fb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..a513e235 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..751369cd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..c5178180 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..dbec6a6d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..13c0e454 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..8a6d2c52 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..285b39b4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..ad22b026 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..4f1d29ac Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..6f4d4876 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..a2a518fd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..2f00c42c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..59e59a58 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..82ae594c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..ac526de4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..81f458db Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..4d18b638 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..8ff4b440 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..2aa2d19a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..f4d94eff Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..10b4e61c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..b8b1324e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..f4a5c00f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..9104b4a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..bbd92916 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..d39bf458 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..f77555dc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..b7434da7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..c1eb51c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..fd77b360 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..76d845c5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..82234319 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..aa9d4ed3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..e453a179 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..a0c81508 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..6a8b28ac Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..7a65c135 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..52947f56 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..757d3673 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..cce0cd7d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..4cb72c21 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..06dcf869 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..55086761 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..fdffdc29 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..d761d363 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..190c5826 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..0a9239bd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..dacf5c43 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..796deb4a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..55427735 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..e1c29015 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..ebf46079 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..3ddc7781 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..814de172 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..19157963 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..8924f9b3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..70a01ac6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..ac9964fe Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..0ede258c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/grey/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..bb682dd8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..f30ace26 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..0e632ae7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..0a0e5dbe Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..782d6f18 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..ff0e8c12 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..edb1658d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..39e51ea1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..08eda2fa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..40e94590 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..5c2f323f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..21e63f35 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..db1b7bd6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..ee36638c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..89b32a89 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..41e16db1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..c4fda48b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..78ff6718 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..a43dca5e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..30d79307 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..5ccc9d38 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..23c493c0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..ab4e16a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..fa2879c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..4ea48a24 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..352b2b34 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..68d4cb35 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..6e672716 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..f8ce95f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..7e59383b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..945b7374 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..8e8954c5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..12965af5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..c6ffd9d3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..e1c11a99 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..2634a02a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..bc0e9d8d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..83dbe3d9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..602f4b7c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..0f45a135 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..aa205945 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..db23ea15 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..5e85ac81 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..d1c93f1f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..3a9faa26 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..b7d7e1f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..20a2684e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..7f8c33df Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..45c42899 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..4c274d6e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..5cd6885a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..d26d7162 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..573b01bf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..90fe676c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..a1763621 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..ca9a3f2a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..d2ba0988 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..e8bc939c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..57a60b75 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..8c007056 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/purple/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..1ffec069 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..db8695cd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..790cd636 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..0f3396d9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..61f39b83 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..d9d821bb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..1fb53568 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..45dfc0bf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..b1611cff Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..207db79f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..0586809c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..12178f15 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..6f03dac9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..7f1db1d5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..c9a96b2b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..cb61d7e1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..fff53102 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..df450e87 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..366a3ea9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..15615b6a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..b4f75acf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..df5a3aa5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..e8fae559 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..19c2719f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..bdc4cb35 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..bdec44e8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..56ec6b9a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..d7cc699b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..aa5d4649 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..bc46efe3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..c4fc0fc4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..1adeca02 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..d9d98149 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..7b54a01d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..24a673b7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..e4ac3cb7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..ea1da7b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..ba209e48 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..98f3643b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..d486aa77 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..d35a153d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..e7aa756b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..8696472b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..3b5a414f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..250701c2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..263ec1ec Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..2b9e3092 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..f3e5a9dd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..491c13bc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..8c298143 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..6cc4310d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..36bc8c2f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..018e6d70 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..2c69c508 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..2c60b8bc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..1b24b6b1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..3e902508 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..658f579b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..dc0e9f86 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..b8287b02 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/red/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..074d0bfd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..ab787cd8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..b8b4898c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..c13004fd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..658c65c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..71f4e3aa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..21757e97 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..df950b58 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..8f6a6a5a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..e0b75d67 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..94471346 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..38948143 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..476a6e71 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..e2171220 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..8cd4eab6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..6e14fcc5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..5fbb9905 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..da8dd62f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..e9fb78fa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..aa632ad4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..84ca6af4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..a461cc10 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..cd2475f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..a1d20aa4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..9931d478 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..e28299c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..1f8c556b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..b5c50cc8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..a4a92676 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..db7da724 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..796a96de Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..f7214134 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..a46acb4c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..43cf8454 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..3acb6e8f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..1d07c534 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..a5c19b8d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..0b7cee9a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..e0193139 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..2da70bf5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..e7c2bf3f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..ba90cc7e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..35701524 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..86524672 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..0e438e08 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..742ca39d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..b34a3a34 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..5cd8c7d9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..5cf0bed7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..0b339e51 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..779b05aa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..3157cada Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..441b64c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..b3880e4b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..586bdcec Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..73d8c3fa Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..6d6afc05 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..7630a45f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..7258c7b3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..b61fdad7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/tan/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..e5e911cf Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..4b37bc21 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..d911f134 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..ab2f61dc Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..95db7b21 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..ed784e9c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..ca14103a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..c1acef93 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..e2aa6843 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..abb6e77c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..5fbbc105 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..b542c6e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..7ce8624b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..7c960804 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..db5d54a1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..922b9755 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..de78f815 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..bd886d3b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..81818743 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..5e950fd0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..d55fe136 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..2c197b23 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..f1cdb6c5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..5508a5a9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..7f508150 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..8f34878d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..c7a9642c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..729d92ac Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..e1733327 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..53741d2c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..d6424dd9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..d1cc2ba9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..ed0f990e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..dd5a354b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..7187edd1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..c41ed2d4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..de4cb279 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..44471498 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..e8e626a8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..60bf6166 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..aba35512 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..9d48e121 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..937c7c30 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..0eda3d59 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..c6887bf4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..41352e17 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..ee87fa10 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..6730339f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..7d707aac Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..441d27ce Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..2cb938e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..98b04375 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..da248e87 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..fa8e7a93 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..5fee830b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..2b8b4517 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..748c35df Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..f69fa16a Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..234efb49 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..8a4a7bc4 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/violet/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-00.png new file mode 100644 index 00000000..c371586f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-01.png new file mode 100644 index 00000000..e078ef9e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-02.png new file mode 100644 index 00000000..b96aa182 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-03.png new file mode 100644 index 00000000..0cab6b7e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-04.png new file mode 100644 index 00000000..90500dc0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-05.png new file mode 100644 index 00000000..5a660505 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-06.png new file mode 100644 index 00000000..0bfe814b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-07.png new file mode 100644 index 00000000..73b4de3e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-08.png new file mode 100644 index 00000000..be35e92b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-09.png new file mode 100644 index 00000000..77256671 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-10.png new file mode 100644 index 00000000..b2e12a87 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-11.png new file mode 100644 index 00000000..f682873e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-12.png new file mode 100644 index 00000000..0a7c2c67 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-13.png new file mode 100644 index 00000000..d3520397 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-14.png new file mode 100644 index 00000000..d6050eb5 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-15.png new file mode 100644 index 00000000..3319b783 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-16.png new file mode 100644 index 00000000..9d452c7e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-17.png new file mode 100644 index 00000000..23371885 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-18.png new file mode 100644 index 00000000..f3a67a39 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-19.png new file mode 100644 index 00000000..59209fbd Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-20.png new file mode 100644 index 00000000..a21e1f5f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-21.png new file mode 100644 index 00000000..46db40d1 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-22.png new file mode 100644 index 00000000..19568352 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-23.png new file mode 100644 index 00000000..96632f20 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-24.png new file mode 100644 index 00000000..b635aa15 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-25.png new file mode 100644 index 00000000..a0c2d965 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-26.png new file mode 100644 index 00000000..86c41768 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-27.png new file mode 100644 index 00000000..5be5a22c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-28.png new file mode 100644 index 00000000..ca725fa9 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-29.png new file mode 100644 index 00000000..963d63fb Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/hr-sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-00.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-00.png new file mode 100644 index 00000000..eb94f14f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-01.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-01.png new file mode 100644 index 00000000..ca203b5f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-02.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-02.png new file mode 100644 index 00000000..222e289b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-03.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-03.png new file mode 100644 index 00000000..960e77c7 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-04.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-04.png new file mode 100644 index 00000000..0d1431a8 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-05.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-05.png new file mode 100644 index 00000000..5898da90 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-06.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-06.png new file mode 100644 index 00000000..02afec6b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-07.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-07.png new file mode 100644 index 00000000..2b1a2c8b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-08.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-08.png new file mode 100644 index 00000000..f8d70b9b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-09.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-09.png new file mode 100644 index 00000000..e5b45e00 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-10.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-10.png new file mode 100644 index 00000000..71fcb429 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-11.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-11.png new file mode 100644 index 00000000..dc0ce659 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-12.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-12.png new file mode 100644 index 00000000..5d40f15e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-13.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-13.png new file mode 100644 index 00000000..909dbb36 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-14.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-14.png new file mode 100644 index 00000000..d01c5c9f Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-15.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-15.png new file mode 100644 index 00000000..8c5891e3 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-16.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-16.png new file mode 100644 index 00000000..1017695b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-17.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-17.png new file mode 100644 index 00000000..8d9fbd53 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-18.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-18.png new file mode 100644 index 00000000..2d28367e Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-19.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-19.png new file mode 100644 index 00000000..83d0d23c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-20.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-20.png new file mode 100644 index 00000000..2cfd45e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-21.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-21.png new file mode 100644 index 00000000..49bebd0b Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-22.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-22.png new file mode 100644 index 00000000..7b7c611c Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-23.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-23.png new file mode 100644 index 00000000..b6ac4de2 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-24.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-24.png new file mode 100644 index 00000000..02dbe201 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-25.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-25.png new file mode 100644 index 00000000..01717925 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-26.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-26.png new file mode 100644 index 00000000..9f04c885 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-27.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-27.png new file mode 100644 index 00000000..ba3edd16 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-28.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-28.png new file mode 100644 index 00000000..d2d8e781 Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-29.png b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-29.png new file mode 100644 index 00000000..9132679d Binary files /dev/null and b/alien-biomes/graphics/decorative/dune/white/sand-dune-decal/sand-dune-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-00.png new file mode 100644 index 00000000..fb12b427 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-01.png new file mode 100644 index 00000000..c0891745 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-02.png new file mode 100644 index 00000000..553835a9 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-03.png new file mode 100644 index 00000000..78496a73 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-04.png new file mode 100644 index 00000000..b64e460c Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-05.png new file mode 100644 index 00000000..62732775 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-06.png new file mode 100644 index 00000000..72d964c9 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-07.png new file mode 100644 index 00000000..02cc50a0 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-08.png new file mode 100644 index 00000000..99f4f7b6 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-09.png new file mode 100644 index 00000000..38b96f6e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-10.png new file mode 100644 index 00000000..94f3f01d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-11.png new file mode 100644 index 00000000..70b0a9d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-12.png new file mode 100644 index 00000000..1a7a7aa8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-13.png new file mode 100644 index 00000000..eeb77e53 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-14.png new file mode 100644 index 00000000..62e26180 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-15.png new file mode 100644 index 00000000..a678ed7e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-17.png new file mode 100644 index 00000000..23f42f3f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-18.png new file mode 100644 index 00000000..ef8db158 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/hr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-00.png new file mode 100644 index 00000000..a9662d46 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-01.png new file mode 100644 index 00000000..0e4f605b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-02.png new file mode 100644 index 00000000..ee8bc899 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-03.png new file mode 100644 index 00000000..42bf67da Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-04.png new file mode 100644 index 00000000..fa42194e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-05.png new file mode 100644 index 00000000..3923d1c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-06.png new file mode 100644 index 00000000..fcb0de04 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-07.png new file mode 100644 index 00000000..b93503be Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-08.png new file mode 100644 index 00000000..3ac9a911 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-09.png new file mode 100644 index 00000000..eee68399 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-10.png new file mode 100644 index 00000000..b82e2b2c Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-11.png new file mode 100644 index 00000000..bcd9dbb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-12.png new file mode 100644 index 00000000..f093e40b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-13.png new file mode 100644 index 00000000..a0d0d8a4 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-14.png new file mode 100644 index 00000000..bfd27806 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-15.png new file mode 100644 index 00000000..c32e66fb Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-17.png new file mode 100644 index 00000000..39601ca3 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-18.png new file mode 100644 index 00000000..97946455 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-blue-pink/sr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-00.png new file mode 100644 index 00000000..cea7cc62 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-01.png new file mode 100644 index 00000000..0e58ca6a Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-02.png new file mode 100644 index 00000000..6ba49fe3 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-03.png new file mode 100644 index 00000000..22feac6d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-04.png new file mode 100644 index 00000000..29e22c47 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-05.png new file mode 100644 index 00000000..c5e42f9f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-06.png new file mode 100644 index 00000000..21f1962a Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-07.png new file mode 100644 index 00000000..3a391bde Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-08.png new file mode 100644 index 00000000..6e1e71c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-09.png new file mode 100644 index 00000000..7430ae97 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-10.png new file mode 100644 index 00000000..186cdf00 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-11.png new file mode 100644 index 00000000..d863ecc1 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-12.png new file mode 100644 index 00000000..ff1a603b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-13.png new file mode 100644 index 00000000..ecfb3204 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-14.png new file mode 100644 index 00000000..9c830294 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-15.png new file mode 100644 index 00000000..4c0989df Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-17.png new file mode 100644 index 00000000..ae64adb8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-18.png new file mode 100644 index 00000000..3d7a292d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-00.png new file mode 100644 index 00000000..8d53a6ac Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-01.png new file mode 100644 index 00000000..37d2b996 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-02.png new file mode 100644 index 00000000..25bb877e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-03.png new file mode 100644 index 00000000..d8a506cf Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-04.png new file mode 100644 index 00000000..74628f71 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-05.png new file mode 100644 index 00000000..2798570f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-06.png new file mode 100644 index 00000000..40b19a17 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-07.png new file mode 100644 index 00000000..88b29111 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-08.png new file mode 100644 index 00000000..610f8846 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-09.png new file mode 100644 index 00000000..c86d1bf8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-10.png new file mode 100644 index 00000000..499f4801 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-11.png new file mode 100644 index 00000000..e161b38e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-12.png new file mode 100644 index 00000000..90b05c69 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-13.png new file mode 100644 index 00000000..20313803 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-14.png new file mode 100644 index 00000000..7a0280e1 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-15.png new file mode 100644 index 00000000..68efaa2a Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-17.png new file mode 100644 index 00000000..2b23aa89 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-18.png new file mode 100644 index 00000000..cd088c8b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-00.png new file mode 100644 index 00000000..1f71e806 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-01.png new file mode 100644 index 00000000..e4f78594 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-02.png new file mode 100644 index 00000000..1456a941 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-03.png new file mode 100644 index 00000000..f384c7da Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-04.png new file mode 100644 index 00000000..3b805f16 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-05.png new file mode 100644 index 00000000..026adc97 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-06.png new file mode 100644 index 00000000..c37c371f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-07.png new file mode 100644 index 00000000..1b87c29f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-08.png new file mode 100644 index 00000000..649e6daf Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-09.png new file mode 100644 index 00000000..306cacf1 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-10.png new file mode 100644 index 00000000..90192019 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-11.png new file mode 100644 index 00000000..453ce7e3 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-12.png new file mode 100644 index 00000000..0cfbbfde Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-13.png new file mode 100644 index 00000000..064edd76 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-14.png new file mode 100644 index 00000000..56a6b96b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-15.png new file mode 100644 index 00000000..cb9fec4f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-17.png new file mode 100644 index 00000000..a170f41e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-18.png new file mode 100644 index 00000000..6c61e6e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/hr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-00.png new file mode 100644 index 00000000..4701eac0 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-01.png new file mode 100644 index 00000000..2f20318e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-02.png new file mode 100644 index 00000000..4cf52637 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-03.png new file mode 100644 index 00000000..4898bc37 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-04.png new file mode 100644 index 00000000..6225568e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-05.png new file mode 100644 index 00000000..7586d73f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-06.png new file mode 100644 index 00000000..b8d2c85e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-07.png new file mode 100644 index 00000000..f3b588e6 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-08.png new file mode 100644 index 00000000..c9351691 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-09.png new file mode 100644 index 00000000..0b2413f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-10.png new file mode 100644 index 00000000..9695e37f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-11.png new file mode 100644 index 00000000..38b478b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-12.png new file mode 100644 index 00000000..268a44c8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-13.png new file mode 100644 index 00000000..e44f9a93 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-14.png new file mode 100644 index 00000000..ade8ecfb Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-15.png new file mode 100644 index 00000000..1f1c3646 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-17.png new file mode 100644 index 00000000..db2cb1fb Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-18.png new file mode 100644 index 00000000..f5c49823 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-green-yellow/sr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-00.png new file mode 100644 index 00000000..130a18c2 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-01.png new file mode 100644 index 00000000..9a99cc32 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-02.png new file mode 100644 index 00000000..abc7852f Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-03.png new file mode 100644 index 00000000..3d6fbfa2 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-04.png new file mode 100644 index 00000000..14b98719 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-05.png new file mode 100644 index 00000000..db2b7ddc Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-06.png new file mode 100644 index 00000000..6a0b9816 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-07.png new file mode 100644 index 00000000..703c4a49 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-08.png new file mode 100644 index 00000000..309647c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-09.png new file mode 100644 index 00000000..85463b9b Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-10.png new file mode 100644 index 00000000..a6a2c3fc Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-11.png new file mode 100644 index 00000000..d33903f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-12.png new file mode 100644 index 00000000..2114761c Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-13.png new file mode 100644 index 00000000..9cbab529 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-14.png new file mode 100644 index 00000000..e6865f59 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-15.png new file mode 100644 index 00000000..779bc43a Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-17.png new file mode 100644 index 00000000..8a592015 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-18.png new file mode 100644 index 00000000..24d4f9af Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/hr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-00.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-00.png new file mode 100644 index 00000000..8214f2b1 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-01.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-01.png new file mode 100644 index 00000000..a089834e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-02.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-02.png new file mode 100644 index 00000000..41e93809 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-03.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-03.png new file mode 100644 index 00000000..dc36f9af Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-04.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-04.png new file mode 100644 index 00000000..d143c33e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-05.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-05.png new file mode 100644 index 00000000..ebdd60d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-06.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-06.png new file mode 100644 index 00000000..98d8da5d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-07.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-07.png new file mode 100644 index 00000000..f38838b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-08.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-08.png new file mode 100644 index 00000000..ec337038 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-09.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-09.png new file mode 100644 index 00000000..5bc98c32 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-10.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-10.png new file mode 100644 index 00000000..5c9b4c14 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-11.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-11.png new file mode 100644 index 00000000..7806f2d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-12.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-12.png new file mode 100644 index 00000000..cb40c3d8 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-12.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-13.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-13.png new file mode 100644 index 00000000..7ffdc05d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-13.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-14.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-14.png new file mode 100644 index 00000000..17e05dbb Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-14.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-15.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-15.png new file mode 100644 index 00000000..1edfe47e Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-15.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-17.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-17.png new file mode 100644 index 00000000..459ebf14 Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-17.png differ diff --git a/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-18.png b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-18.png new file mode 100644 index 00000000..3c24326d Binary files /dev/null and b/alien-biomes/graphics/decorative/flower-bush/flower-bush-red-blue/sr/flower-bush-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-00.png new file mode 100644 index 00000000..9cc951e9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-01.png new file mode 100644 index 00000000..e53d613f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-02.png new file mode 100644 index 00000000..4e0c80f1 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-03.png new file mode 100644 index 00000000..fe5a4923 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-04.png new file mode 100644 index 00000000..b86fbd67 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-05.png new file mode 100644 index 00000000..67537ae7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-06.png new file mode 100644 index 00000000..2e477943 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-07.png new file mode 100644 index 00000000..2283bc50 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-08.png new file mode 100644 index 00000000..de69cc36 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-09.png new file mode 100644 index 00000000..dec3d449 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-10.png new file mode 100644 index 00000000..e433f9ea Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-11.png new file mode 100644 index 00000000..501cbbd0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-12.png new file mode 100644 index 00000000..01b3e4b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-13.png new file mode 100644 index 00000000..023fb270 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-14.png new file mode 100644 index 00000000..460d771f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-15.png new file mode 100644 index 00000000..4e437cfe Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-16.png new file mode 100644 index 00000000..a12f904a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-17.png new file mode 100644 index 00000000..b141da09 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-18.png new file mode 100644 index 00000000..c724c034 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-19.png new file mode 100644 index 00000000..3288cb32 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-20.png new file mode 100644 index 00000000..97bfb86b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-21.png new file mode 100644 index 00000000..4c316e39 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-22.png new file mode 100644 index 00000000..b92fcb30 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-23.png new file mode 100644 index 00000000..386eb5e5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-24.png new file mode 100644 index 00000000..cc141e10 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-25.png new file mode 100644 index 00000000..2d72077e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-26.png new file mode 100644 index 00000000..9563986d Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-27.png new file mode 100644 index 00000000..cb4c543e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-28.png new file mode 100644 index 00000000..a7a633f8 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-29.png new file mode 100644 index 00000000..4d01a796 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/hr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-00.png new file mode 100644 index 00000000..693d12ba Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-01.png new file mode 100644 index 00000000..270dc3a1 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-02.png new file mode 100644 index 00000000..9a1f307b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-03.png new file mode 100644 index 00000000..67fd4e79 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-04.png new file mode 100644 index 00000000..04f76b94 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-05.png new file mode 100644 index 00000000..e248987e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-06.png new file mode 100644 index 00000000..202d826e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-07.png new file mode 100644 index 00000000..97feab6c Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-08.png new file mode 100644 index 00000000..2677e9e8 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-09.png new file mode 100644 index 00000000..b823f546 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-10.png new file mode 100644 index 00000000..d53350c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-11.png new file mode 100644 index 00000000..a166236a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-12.png new file mode 100644 index 00000000..50f610fd Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-13.png new file mode 100644 index 00000000..7f34ce8a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-14.png new file mode 100644 index 00000000..be0f032b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-15.png new file mode 100644 index 00000000..9091db50 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-16.png new file mode 100644 index 00000000..f61151c9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-17.png new file mode 100644 index 00000000..a3f7b532 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-18.png new file mode 100644 index 00000000..61fc3a36 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-19.png new file mode 100644 index 00000000..6eb5fb9e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-20.png new file mode 100644 index 00000000..2b3ccf50 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-21.png new file mode 100644 index 00000000..fca00cc8 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-22.png new file mode 100644 index 00000000..d2c89a1b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-23.png new file mode 100644 index 00000000..d1590ea1 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-24.png new file mode 100644 index 00000000..99b76997 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-25.png new file mode 100644 index 00000000..da1605d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-26.png new file mode 100644 index 00000000..5553386a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-27.png new file mode 100644 index 00000000..bd7ffbd2 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-28.png new file mode 100644 index 00000000..83b48a7a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-29.png new file mode 100644 index 00000000..314a58c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/blue/sr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-00.png new file mode 100644 index 00000000..9fb37397 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-01.png new file mode 100644 index 00000000..161f5678 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-02.png new file mode 100644 index 00000000..d26cd292 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-03.png new file mode 100644 index 00000000..0e0cb61f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-04.png new file mode 100644 index 00000000..ecca5edd Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-05.png new file mode 100644 index 00000000..4652fc91 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-06.png new file mode 100644 index 00000000..ef1280be Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-07.png new file mode 100644 index 00000000..8dfd1a38 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-08.png new file mode 100644 index 00000000..7fbb57b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-09.png new file mode 100644 index 00000000..43657202 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-10.png new file mode 100644 index 00000000..8e53ca6e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-11.png new file mode 100644 index 00000000..066f4a82 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-12.png new file mode 100644 index 00000000..db6d7b25 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-13.png new file mode 100644 index 00000000..8ca3def7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-14.png new file mode 100644 index 00000000..753254b4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-15.png new file mode 100644 index 00000000..18d0b9dd Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-16.png new file mode 100644 index 00000000..23d9f7ea Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-17.png new file mode 100644 index 00000000..b4e301d0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-18.png new file mode 100644 index 00000000..a0edf2ac Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-19.png new file mode 100644 index 00000000..e53152f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-20.png new file mode 100644 index 00000000..69d7c71d Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-21.png new file mode 100644 index 00000000..da66c176 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-22.png new file mode 100644 index 00000000..bb2334cd Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-23.png new file mode 100644 index 00000000..ca106a2a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-24.png new file mode 100644 index 00000000..7a000c3c Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-25.png new file mode 100644 index 00000000..826624af Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-26.png new file mode 100644 index 00000000..0dcc4cb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-27.png new file mode 100644 index 00000000..ca087cd1 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-28.png new file mode 100644 index 00000000..d312ed6a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-29.png new file mode 100644 index 00000000..6a0750eb Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/hr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-00.png new file mode 100644 index 00000000..b9278427 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-01.png new file mode 100644 index 00000000..240ca756 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-02.png new file mode 100644 index 00000000..542c8990 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-03.png new file mode 100644 index 00000000..96052eba Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-04.png new file mode 100644 index 00000000..bed1907b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-05.png new file mode 100644 index 00000000..c9da4c55 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-06.png new file mode 100644 index 00000000..a9a5f16b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-07.png new file mode 100644 index 00000000..72262667 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-08.png new file mode 100644 index 00000000..61c4b549 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-09.png new file mode 100644 index 00000000..601e08ac Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-10.png new file mode 100644 index 00000000..93d368d6 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-11.png new file mode 100644 index 00000000..bf456e52 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-12.png new file mode 100644 index 00000000..e2962ca0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-13.png new file mode 100644 index 00000000..bd5be4c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-14.png new file mode 100644 index 00000000..a20e943e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-15.png new file mode 100644 index 00000000..8fd46b05 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-16.png new file mode 100644 index 00000000..a920b1dc Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-17.png new file mode 100644 index 00000000..895bce89 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-18.png new file mode 100644 index 00000000..ee9b3610 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-19.png new file mode 100644 index 00000000..b26c14ed Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-20.png new file mode 100644 index 00000000..a376cd76 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-21.png new file mode 100644 index 00000000..e9e350ae Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-22.png new file mode 100644 index 00000000..2ef60aa8 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-23.png new file mode 100644 index 00000000..8a0b0266 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-24.png new file mode 100644 index 00000000..2396afe6 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-25.png new file mode 100644 index 00000000..0136e9b4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-26.png new file mode 100644 index 00000000..f17e56ec Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-27.png new file mode 100644 index 00000000..0394892c Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-28.png new file mode 100644 index 00000000..717ac2f9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-29.png new file mode 100644 index 00000000..50fa0d3a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/green/sr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-00.png new file mode 100644 index 00000000..04db1f17 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-01.png new file mode 100644 index 00000000..960cf886 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-02.png new file mode 100644 index 00000000..fbcd3bec Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-03.png new file mode 100644 index 00000000..3b5d94a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-04.png new file mode 100644 index 00000000..1879bcb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-05.png new file mode 100644 index 00000000..7a59d706 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-06.png new file mode 100644 index 00000000..fc45c2b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-07.png new file mode 100644 index 00000000..8b543cd5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-08.png new file mode 100644 index 00000000..1ebcd019 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-09.png new file mode 100644 index 00000000..b30a0d18 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-10.png new file mode 100644 index 00000000..19230bbc Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-11.png new file mode 100644 index 00000000..fa8fd323 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-12.png new file mode 100644 index 00000000..32dcc44e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-13.png new file mode 100644 index 00000000..4b1ac61a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-14.png new file mode 100644 index 00000000..5932747f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-15.png new file mode 100644 index 00000000..80a61e65 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-16.png new file mode 100644 index 00000000..7fe77f64 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-17.png new file mode 100644 index 00000000..c28431d4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-18.png new file mode 100644 index 00000000..ace96257 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-19.png new file mode 100644 index 00000000..e818d016 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-20.png new file mode 100644 index 00000000..95725211 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-21.png new file mode 100644 index 00000000..57c5ed8a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-22.png new file mode 100644 index 00000000..684ebf39 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-23.png new file mode 100644 index 00000000..0554f987 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-24.png new file mode 100644 index 00000000..8dec8e1e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-25.png new file mode 100644 index 00000000..1cd72e1b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-26.png new file mode 100644 index 00000000..d3cbf54b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-27.png new file mode 100644 index 00000000..c21ce6ef Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-28.png new file mode 100644 index 00000000..7107a1e9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-29.png new file mode 100644 index 00000000..d8a2deaa Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/hr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-00.png new file mode 100644 index 00000000..4993c379 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-01.png new file mode 100644 index 00000000..47f8f5bb Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-02.png new file mode 100644 index 00000000..d97ec3af Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-03.png new file mode 100644 index 00000000..7d240eac Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-04.png new file mode 100644 index 00000000..ab29d10b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-05.png new file mode 100644 index 00000000..3edbbf58 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-06.png new file mode 100644 index 00000000..25f96cb3 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-07.png new file mode 100644 index 00000000..347aefa9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-08.png new file mode 100644 index 00000000..15280883 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-09.png new file mode 100644 index 00000000..94e8f111 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-10.png new file mode 100644 index 00000000..066882ee Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-11.png new file mode 100644 index 00000000..d439c7a7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-12.png new file mode 100644 index 00000000..202ef611 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-13.png new file mode 100644 index 00000000..df8229f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-14.png new file mode 100644 index 00000000..b38957b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-15.png new file mode 100644 index 00000000..b898de4f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-16.png new file mode 100644 index 00000000..d8820ab0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-17.png new file mode 100644 index 00000000..0fc635f7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-18.png new file mode 100644 index 00000000..dde48807 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-19.png new file mode 100644 index 00000000..b8710cb8 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-20.png new file mode 100644 index 00000000..aad9f9b2 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-21.png new file mode 100644 index 00000000..4479942b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-22.png new file mode 100644 index 00000000..26bc96df Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-23.png new file mode 100644 index 00000000..cbd158fa Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-24.png new file mode 100644 index 00000000..dd23c4dc Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-25.png new file mode 100644 index 00000000..e1742a45 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-26.png new file mode 100644 index 00000000..98334320 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-27.png new file mode 100644 index 00000000..0084f545 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-28.png new file mode 100644 index 00000000..a846375e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-29.png new file mode 100644 index 00000000..596b1d13 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/orange/sr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-00.png new file mode 100644 index 00000000..385d7e32 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-01.png new file mode 100644 index 00000000..b8c859a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-02.png new file mode 100644 index 00000000..2f99179c Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-03.png new file mode 100644 index 00000000..4a3b5cdf Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-04.png new file mode 100644 index 00000000..74d9f86f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-05.png new file mode 100644 index 00000000..442f5d02 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-06.png new file mode 100644 index 00000000..4ad176e2 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-07.png new file mode 100644 index 00000000..7a9c7d7a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-08.png new file mode 100644 index 00000000..2bd4643d Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-09.png new file mode 100644 index 00000000..5cf56851 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-10.png new file mode 100644 index 00000000..7b3bd835 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-11.png new file mode 100644 index 00000000..4205b9cb Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-12.png new file mode 100644 index 00000000..d2904bb9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-13.png new file mode 100644 index 00000000..a7db7423 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-14.png new file mode 100644 index 00000000..cab4d0ba Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-15.png new file mode 100644 index 00000000..d5faf317 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-16.png new file mode 100644 index 00000000..3209a18b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-17.png new file mode 100644 index 00000000..c3e5df9c Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-18.png new file mode 100644 index 00000000..17c88aeb Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-19.png new file mode 100644 index 00000000..e9370c4b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-20.png new file mode 100644 index 00000000..2142bf02 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-21.png new file mode 100644 index 00000000..8d038eba Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-22.png new file mode 100644 index 00000000..f6714982 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-23.png new file mode 100644 index 00000000..6b852832 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-24.png new file mode 100644 index 00000000..a0c26b2a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-25.png new file mode 100644 index 00000000..efb00309 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-26.png new file mode 100644 index 00000000..0deb5f61 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-27.png new file mode 100644 index 00000000..a41bf7b4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-28.png new file mode 100644 index 00000000..ac7970e5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-29.png new file mode 100644 index 00000000..a3bea943 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/hr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-00.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-00.png new file mode 100644 index 00000000..fec9f5c4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-01.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-01.png new file mode 100644 index 00000000..9e93fdb9 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-02.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-02.png new file mode 100644 index 00000000..a0c4f767 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-03.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-03.png new file mode 100644 index 00000000..addd5290 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-04.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-04.png new file mode 100644 index 00000000..d69289f3 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-05.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-05.png new file mode 100644 index 00000000..85be0ff2 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-06.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-06.png new file mode 100644 index 00000000..370b43e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-07.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-07.png new file mode 100644 index 00000000..90d414c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-08.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-08.png new file mode 100644 index 00000000..e7a47661 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-09.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-09.png new file mode 100644 index 00000000..cabeb5db Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-10.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-10.png new file mode 100644 index 00000000..26643958 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-11.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-11.png new file mode 100644 index 00000000..a2e98845 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-12.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-12.png new file mode 100644 index 00000000..0a3039d5 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-13.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-13.png new file mode 100644 index 00000000..bac5669e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-14.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-14.png new file mode 100644 index 00000000..3e2eb8e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-15.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-15.png new file mode 100644 index 00000000..4eee1cdc Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-16.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-16.png new file mode 100644 index 00000000..7b2a5b59 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-17.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-17.png new file mode 100644 index 00000000..f01b808b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-18.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-18.png new file mode 100644 index 00000000..57ee85ce Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-19.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-19.png new file mode 100644 index 00000000..c9977590 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-20.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-20.png new file mode 100644 index 00000000..27c22c23 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-21.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-21.png new file mode 100644 index 00000000..695a7be0 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-22.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-22.png new file mode 100644 index 00000000..98dec588 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-23.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-23.png new file mode 100644 index 00000000..f1907ea4 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-24.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-24.png new file mode 100644 index 00000000..fdf2e97d Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-25.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-25.png new file mode 100644 index 00000000..6941084a Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-26.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-26.png new file mode 100644 index 00000000..88e91d6b Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-27.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-27.png new file mode 100644 index 00000000..62805c53 Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-28.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-28.png new file mode 100644 index 00000000..32f6486e Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-29.png b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-29.png new file mode 100644 index 00000000..2dd2038f Binary files /dev/null and b/alien-biomes/graphics/decorative/lava/purple/sr/lava-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-00.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-00.png new file mode 100644 index 00000000..6a017aef Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-01.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-01.png new file mode 100644 index 00000000..97f61403 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-02.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-02.png new file mode 100644 index 00000000..294e462a Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-03.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-03.png new file mode 100644 index 00000000..31e67e5f Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-04.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-04.png new file mode 100644 index 00000000..1e3e3122 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-05.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-05.png new file mode 100644 index 00000000..4abce97e Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-06.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-06.png new file mode 100644 index 00000000..c7b3130b Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-07.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-07.png new file mode 100644 index 00000000..4e3362a6 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-08.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-08.png new file mode 100644 index 00000000..df9895c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-09.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-09.png new file mode 100644 index 00000000..ed428047 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-10.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-10.png new file mode 100644 index 00000000..eada5e23 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-11.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-11.png new file mode 100644 index 00000000..eab966a2 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-12.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-12.png new file mode 100644 index 00000000..69536c16 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-13.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-13.png new file mode 100644 index 00000000..a8e970b6 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-14.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-14.png new file mode 100644 index 00000000..d1f80889 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-15.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-15.png new file mode 100644 index 00000000..d91d8036 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-16.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-16.png new file mode 100644 index 00000000..b28be130 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-17.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-17.png new file mode 100644 index 00000000..f5e18945 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-18.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-18.png new file mode 100644 index 00000000..17636f8d Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-19.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-19.png new file mode 100644 index 00000000..54adcd9d Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-20.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-20.png new file mode 100644 index 00000000..7a07d2b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-21.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-21.png new file mode 100644 index 00000000..261e8ab2 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-22.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-22.png new file mode 100644 index 00000000..ce5350ca Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-23.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-23.png new file mode 100644 index 00000000..6c833317 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-24.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-24.png new file mode 100644 index 00000000..0155cfba Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-25.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-25.png new file mode 100644 index 00000000..aa71afad Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-26.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-26.png new file mode 100644 index 00000000..e586d540 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-27.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-27.png new file mode 100644 index 00000000..2ab901e1 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-28.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-28.png new file mode 100644 index 00000000..b6dfd4c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-29.png b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-29.png new file mode 100644 index 00000000..39273b33 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/hr/puddle-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-00.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-00.png new file mode 100644 index 00000000..96ee31ca Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-01.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-01.png new file mode 100644 index 00000000..14689c90 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-02.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-02.png new file mode 100644 index 00000000..6cd3f048 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-03.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-03.png new file mode 100644 index 00000000..73dc0264 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-04.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-04.png new file mode 100644 index 00000000..9ac9a1a4 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-05.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-05.png new file mode 100644 index 00000000..222b8046 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-06.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-06.png new file mode 100644 index 00000000..2e8fbd30 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-07.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-07.png new file mode 100644 index 00000000..40218d34 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-08.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-08.png new file mode 100644 index 00000000..b36a988a Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-09.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-09.png new file mode 100644 index 00000000..c83be0e5 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-10.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-10.png new file mode 100644 index 00000000..176a5332 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-11.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-11.png new file mode 100644 index 00000000..4bec1c0f Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-12.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-12.png new file mode 100644 index 00000000..0ce2ad08 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-13.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-13.png new file mode 100644 index 00000000..6b9e4710 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-14.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-14.png new file mode 100644 index 00000000..5e0fb859 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-15.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-15.png new file mode 100644 index 00000000..e6d88638 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-16.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-16.png new file mode 100644 index 00000000..9e375919 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-17.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-17.png new file mode 100644 index 00000000..34a4b447 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-18.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-18.png new file mode 100644 index 00000000..32351f1a Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-19.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-19.png new file mode 100644 index 00000000..130c6446 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-20.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-20.png new file mode 100644 index 00000000..ee20a6c1 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-21.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-21.png new file mode 100644 index 00000000..7128f529 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-22.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-22.png new file mode 100644 index 00000000..f17093aa Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-23.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-23.png new file mode 100644 index 00000000..5574670c Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-24.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-24.png new file mode 100644 index 00000000..aaf786a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-25.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-25.png new file mode 100644 index 00000000..54cc7a29 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-26.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-26.png new file mode 100644 index 00000000..196a223b Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-27.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-27.png new file mode 100644 index 00000000..bf3fed37 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-28.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-28.png new file mode 100644 index 00000000..e023dca0 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-29.png b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-29.png new file mode 100644 index 00000000..3079b566 Binary files /dev/null and b/alien-biomes/graphics/decorative/puddle/sr/puddle-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-01.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-01.png new file mode 100644 index 00000000..5a576f92 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-02.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-02.png new file mode 100644 index 00000000..55ed8b9a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-03.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-03.png new file mode 100644 index 00000000..834b4933 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-04.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-04.png new file mode 100644 index 00000000..03366d5a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-05.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-05.png new file mode 100644 index 00000000..b6767711 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-06.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-06.png new file mode 100644 index 00000000..1d083279 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-07.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-07.png new file mode 100644 index 00000000..c518bb89 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-08.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-08.png new file mode 100644 index 00000000..650d9570 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-09.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-09.png new file mode 100644 index 00000000..de4b3d46 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-10.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-10.png new file mode 100644 index 00000000..aa8a4cde Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-11.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-11.png new file mode 100644 index 00000000..f18f3159 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-12.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-12.png new file mode 100644 index 00000000..07fa30f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-13.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-13.png new file mode 100644 index 00000000..dc866097 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-14.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-14.png new file mode 100644 index 00000000..e32fc0a6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-15.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-15.png new file mode 100644 index 00000000..73b06d15 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-16.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-16.png new file mode 100644 index 00000000..04700c43 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-17.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-17.png new file mode 100644 index 00000000..24324c87 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-18.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-18.png new file mode 100644 index 00000000..597ae932 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-19.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-19.png new file mode 100644 index 00000000..3272e1ce Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-20.png b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-20.png new file mode 100644 index 00000000..e527eb79 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/hr-rock-big-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-01.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-01.png new file mode 100644 index 00000000..cd1be203 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-02.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-02.png new file mode 100644 index 00000000..7d92485b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-03.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-03.png new file mode 100644 index 00000000..30f10b04 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-04.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-04.png new file mode 100644 index 00000000..d7526f3c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-05.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-05.png new file mode 100644 index 00000000..2966454b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-06.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-06.png new file mode 100644 index 00000000..21231a0d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-07.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-07.png new file mode 100644 index 00000000..234769b0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-08.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-08.png new file mode 100644 index 00000000..285fc072 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-09.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-09.png new file mode 100644 index 00000000..db3cffb9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-10.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-10.png new file mode 100644 index 00000000..acbb42d3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-11.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-11.png new file mode 100644 index 00000000..7c5fd2d6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-12.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-12.png new file mode 100644 index 00000000..4d11917b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-13.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-13.png new file mode 100644 index 00000000..2cb1ebb5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-14.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-14.png new file mode 100644 index 00000000..ff3f61aa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-15.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-15.png new file mode 100644 index 00000000..25dd5294 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-16.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-16.png new file mode 100644 index 00000000..8b80e68d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-17.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-17.png new file mode 100644 index 00000000..ffc5d6f7 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-18.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-18.png new file mode 100644 index 00000000..8cff5576 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-19.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-19.png new file mode 100644 index 00000000..4dade9e5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-20.png b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-20.png new file mode 100644 index 00000000..9cf2ffd3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-big/rock-big-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-05.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-05.png new file mode 100644 index 00000000..047847ce Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-06.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-06.png new file mode 100644 index 00000000..4d9504cc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-07.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-07.png new file mode 100644 index 00000000..0d9e18a3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-08.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-08.png new file mode 100644 index 00000000..13d35031 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-09.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-09.png new file mode 100644 index 00000000..7651d504 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-10.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-10.png new file mode 100644 index 00000000..ea84d26f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-11.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-11.png new file mode 100644 index 00000000..0b1edf05 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-12.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-12.png new file mode 100644 index 00000000..d94cf968 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-13.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-13.png new file mode 100644 index 00000000..7ee6b455 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-14.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-14.png new file mode 100644 index 00000000..a3d3eed3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-15.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-15.png new file mode 100644 index 00000000..6962d930 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-16.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-16.png new file mode 100644 index 00000000..c9be2bf3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-17.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-17.png new file mode 100644 index 00000000..2a66df80 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-18.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-18.png new file mode 100644 index 00000000..489fc73f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-19.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-19.png new file mode 100644 index 00000000..655902db Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-20.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-20.png new file mode 100644 index 00000000..f6f4f07d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/hr-rock-huge-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-05.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-05.png new file mode 100644 index 00000000..0eb53e7d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-06.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-06.png new file mode 100644 index 00000000..6ed8de04 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-07.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-07.png new file mode 100644 index 00000000..cacaee4e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-08.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-08.png new file mode 100644 index 00000000..6bda2c29 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-09.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-09.png new file mode 100644 index 00000000..f7d9c0ce Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-10.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-10.png new file mode 100644 index 00000000..ed833965 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-11.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-11.png new file mode 100644 index 00000000..042880a4 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-12.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-12.png new file mode 100644 index 00000000..00a0ff3c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-13.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-13.png new file mode 100644 index 00000000..1f16a2e8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-14.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-14.png new file mode 100644 index 00000000..7550c215 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-15.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-15.png new file mode 100644 index 00000000..8ce357de Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-16.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-16.png new file mode 100644 index 00000000..bf77bb04 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-17.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-17.png new file mode 100644 index 00000000..1e537b15 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-18.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-18.png new file mode 100644 index 00000000..f91bf772 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-19.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-19.png new file mode 100644 index 00000000..da760e46 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-20.png b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-20.png new file mode 100644 index 00000000..4af68e62 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-huge/rock-huge-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-01.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-01.png new file mode 100644 index 00000000..f7d87bcf Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-02.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-02.png new file mode 100644 index 00000000..b0d2fa94 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-03.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-03.png new file mode 100644 index 00000000..88682c0f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-04.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-04.png new file mode 100644 index 00000000..26263c06 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-05.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-05.png new file mode 100644 index 00000000..a560db00 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-06.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-06.png new file mode 100644 index 00000000..3364e72d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-07.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-07.png new file mode 100644 index 00000000..687fce21 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-08.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-08.png new file mode 100644 index 00000000..96c93046 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-09.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-09.png new file mode 100644 index 00000000..f979f28d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-10.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-10.png new file mode 100644 index 00000000..81553ca0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-11.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-11.png new file mode 100644 index 00000000..2c9221ae Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-12.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-12.png new file mode 100644 index 00000000..92e74c80 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/hr-rock-medium-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-01.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-01.png new file mode 100644 index 00000000..3e03e7aa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-02.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-02.png new file mode 100644 index 00000000..a5e1e676 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-03.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-03.png new file mode 100644 index 00000000..37149d2f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-04.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-04.png new file mode 100644 index 00000000..b1496e20 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-05.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-05.png new file mode 100644 index 00000000..14d91689 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-06.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-06.png new file mode 100644 index 00000000..0abe6295 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-07.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-07.png new file mode 100644 index 00000000..ba619aea Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-08.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-08.png new file mode 100644 index 00000000..3c037ad6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-09.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-09.png new file mode 100644 index 00000000..325dcc12 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-10.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-10.png new file mode 100644 index 00000000..a0d5aa13 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-11.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-11.png new file mode 100644 index 00000000..15796197 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-12.png b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-12.png new file mode 100644 index 00000000..028dee25 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-medium/rock-medium-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-01.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-01.png new file mode 100644 index 00000000..de224828 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-02.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-02.png new file mode 100644 index 00000000..c19e5219 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-03.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-03.png new file mode 100644 index 00000000..bd49aa1b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-04.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-04.png new file mode 100644 index 00000000..fb42a414 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-05.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-05.png new file mode 100644 index 00000000..38e98df4 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-06.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-06.png new file mode 100644 index 00000000..f1647dbd Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-07.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-07.png new file mode 100644 index 00000000..78690eb8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-08.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-08.png new file mode 100644 index 00000000..6bc227bf Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-09.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-09.png new file mode 100644 index 00000000..445a418b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-10.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-10.png new file mode 100644 index 00000000..8cf5dc5b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-11.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-11.png new file mode 100644 index 00000000..4980f9b4 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-12.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-12.png new file mode 100644 index 00000000..1984a776 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-13.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-13.png new file mode 100644 index 00000000..ca00a5fe Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-14.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-14.png new file mode 100644 index 00000000..8d3b5917 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-15.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-15.png new file mode 100644 index 00000000..94921052 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-16.png b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-16.png new file mode 100644 index 00000000..1dbb4170 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/hr-rock-small-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-01.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-01.png new file mode 100644 index 00000000..ab4a5532 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-02.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-02.png new file mode 100644 index 00000000..8e0411ca Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-03.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-03.png new file mode 100644 index 00000000..bba51d87 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-04.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-04.png new file mode 100644 index 00000000..0b630982 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-05.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-05.png new file mode 100644 index 00000000..71aeb4fa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-06.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-06.png new file mode 100644 index 00000000..4764a5f9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-07.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-07.png new file mode 100644 index 00000000..ccaa08c0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-08.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-08.png new file mode 100644 index 00000000..d9ad6e95 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-09.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-09.png new file mode 100644 index 00000000..33244fb3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-10.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-10.png new file mode 100644 index 00000000..ae81444e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-11.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-11.png new file mode 100644 index 00000000..1bb239fd Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-12.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-12.png new file mode 100644 index 00000000..e7a5a9ac Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-13.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-13.png new file mode 100644 index 00000000..4f248728 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-14.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-14.png new file mode 100644 index 00000000..bd648dfc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-15.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-15.png new file mode 100644 index 00000000..a0e61fd5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-16.png b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-16.png new file mode 100644 index 00000000..9adf15d0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-small/rock-small-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-01.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-01.png new file mode 100644 index 00000000..72cb87a3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-02.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-02.png new file mode 100644 index 00000000..e33e39f5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-03.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-03.png new file mode 100644 index 00000000..b2dd3977 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-04.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-04.png new file mode 100644 index 00000000..87ee5c63 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-05.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-05.png new file mode 100644 index 00000000..26669554 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-06.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-06.png new file mode 100644 index 00000000..957021e2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-07.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-07.png new file mode 100644 index 00000000..b732d809 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-08.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-08.png new file mode 100644 index 00000000..bc3313b1 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-09.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-09.png new file mode 100644 index 00000000..5fc95fe0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-10.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-10.png new file mode 100644 index 00000000..d296d124 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-11.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-11.png new file mode 100644 index 00000000..b7bfcf79 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-12.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-12.png new file mode 100644 index 00000000..0e74d25d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-13.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-13.png new file mode 100644 index 00000000..c85d2503 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-14.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-14.png new file mode 100644 index 00000000..dbcd33f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-15.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-15.png new file mode 100644 index 00000000..4b38d7af Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-16.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-16.png new file mode 100644 index 00000000..12c6f44a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-01.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-01.png new file mode 100644 index 00000000..ed6db582 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-02.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-02.png new file mode 100644 index 00000000..e1167e14 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-03.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-03.png new file mode 100644 index 00000000..c64375ae Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-04.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-04.png new file mode 100644 index 00000000..2457b74c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-05.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-05.png new file mode 100644 index 00000000..0b4bcb87 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-06.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-06.png new file mode 100644 index 00000000..4aca9e30 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-07.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-07.png new file mode 100644 index 00000000..e41739f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-08.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-08.png new file mode 100644 index 00000000..bba029ec Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-09.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-09.png new file mode 100644 index 00000000..1bb6b178 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-10.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-10.png new file mode 100644 index 00000000..6ad9ee2c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-11.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-11.png new file mode 100644 index 00000000..d45bc337 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-12.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-12.png new file mode 100644 index 00000000..2933e612 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-13.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-13.png new file mode 100644 index 00000000..0d0f28b5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-14.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-14.png new file mode 100644 index 00000000..4b315a86 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-15.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-15.png new file mode 100644 index 00000000..e2cdd969 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-16.png b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-16.png new file mode 100644 index 00000000..2e7ef402 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/rock-tiny/rock-tiny-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-01.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-01.png new file mode 100644 index 00000000..8a75079c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-02.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-02.png new file mode 100644 index 00000000..1ae0830d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-03.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-03.png new file mode 100644 index 00000000..9c6949c9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-04.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-04.png new file mode 100644 index 00000000..2eb91132 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-05.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-05.png new file mode 100644 index 00000000..44027fee Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-06.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-06.png new file mode 100644 index 00000000..47412202 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-07.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-07.png new file mode 100644 index 00000000..e2258efb Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-08.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-08.png new file mode 100644 index 00000000..50069a87 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-09.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-09.png new file mode 100644 index 00000000..e4699752 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-10.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-10.png new file mode 100644 index 00000000..505e606a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-11.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-11.png new file mode 100644 index 00000000..0640039d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-12.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-12.png new file mode 100644 index 00000000..a6fdbc62 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-13.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-13.png new file mode 100644 index 00000000..8227955a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-14.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-14.png new file mode 100644 index 00000000..4386df44 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-15.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-15.png new file mode 100644 index 00000000..5ff9df62 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-16.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-16.png new file mode 100644 index 00000000..040e08a3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-17.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-17.png new file mode 100644 index 00000000..aef7b536 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-18.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-18.png new file mode 100644 index 00000000..cbdb3247 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-19.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-19.png new file mode 100644 index 00000000..2e9e30e3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-20.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-20.png new file mode 100644 index 00000000..5ff21dee Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-21.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-21.png new file mode 100644 index 00000000..c60b6553 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-22.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-22.png new file mode 100644 index 00000000..04583d01 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-23.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-23.png new file mode 100644 index 00000000..74b4f874 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-24.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-24.png new file mode 100644 index 00000000..b7051eff Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-25.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-25.png new file mode 100644 index 00000000..e91cf263 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-26.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-26.png new file mode 100644 index 00000000..d473c94f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-27.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-27.png new file mode 100644 index 00000000..3c9fe615 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-28.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-28.png new file mode 100644 index 00000000..4d712396 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-29.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-29.png new file mode 100644 index 00000000..ce342f3b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-30.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-30.png new file mode 100644 index 00000000..a1c1656f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/hr-sand-decal-30.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-01.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-01.png new file mode 100644 index 00000000..17379407 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-02.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-02.png new file mode 100644 index 00000000..250c298c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-03.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-03.png new file mode 100644 index 00000000..bd470b2d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-04.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-04.png new file mode 100644 index 00000000..d79c7649 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-05.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-05.png new file mode 100644 index 00000000..c83cb7dd Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-06.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-06.png new file mode 100644 index 00000000..124c0da0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-07.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-07.png new file mode 100644 index 00000000..9c1fbf12 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-08.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-08.png new file mode 100644 index 00000000..fef06ba6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-09.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-09.png new file mode 100644 index 00000000..f0738ffa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-10.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-10.png new file mode 100644 index 00000000..9f3a91a2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-11.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-11.png new file mode 100644 index 00000000..35fa2045 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-12.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-12.png new file mode 100644 index 00000000..a0c18841 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-13.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-13.png new file mode 100644 index 00000000..4a887b4d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-14.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-14.png new file mode 100644 index 00000000..aa0534fc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-15.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-15.png new file mode 100644 index 00000000..eb86f946 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-16.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-16.png new file mode 100644 index 00000000..163f4bd8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-17.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-17.png new file mode 100644 index 00000000..364162df Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-18.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-18.png new file mode 100644 index 00000000..b667c996 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-19.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-19.png new file mode 100644 index 00000000..ad15a651 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-20.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-20.png new file mode 100644 index 00000000..fa0cf5c5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-21.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-21.png new file mode 100644 index 00000000..28d5b2df Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-22.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-22.png new file mode 100644 index 00000000..9d652be6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-23.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-23.png new file mode 100644 index 00000000..e92a2dda Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-24.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-24.png new file mode 100644 index 00000000..ecc0969a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-25.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-25.png new file mode 100644 index 00000000..169586c5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-26.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-26.png new file mode 100644 index 00000000..e95a6707 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-27.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-27.png new file mode 100644 index 00000000..af135f99 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-28.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-28.png new file mode 100644 index 00000000..6f03c825 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-29.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-29.png new file mode 100644 index 00000000..88aed0dd Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-30.png b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-30.png new file mode 100644 index 00000000..1975127d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-decal/sand-decal-30.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-01.png new file mode 100644 index 00000000..95a2a007 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-02.png new file mode 100644 index 00000000..a37f478a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-03.png new file mode 100644 index 00000000..9a90f445 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-04.png new file mode 100644 index 00000000..af53280a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-05.png new file mode 100644 index 00000000..e5219058 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-06.png new file mode 100644 index 00000000..d342a69d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-07.png new file mode 100644 index 00000000..ac749e05 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-08.png new file mode 100644 index 00000000..2d54b583 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-09.png new file mode 100644 index 00000000..0d0a130b Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-10.png new file mode 100644 index 00000000..3f55ea80 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-11.png new file mode 100644 index 00000000..0d7d3cb1 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-12.png new file mode 100644 index 00000000..27d87168 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-13.png new file mode 100644 index 00000000..90bb8fba Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-14.png new file mode 100644 index 00000000..574d493d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-15.png new file mode 100644 index 00000000..303842f0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-16.png new file mode 100644 index 00000000..ac8b446a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-01.png new file mode 100644 index 00000000..d8e27261 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-02.png new file mode 100644 index 00000000..42f9777c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-03.png new file mode 100644 index 00000000..dd9f8937 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-04.png new file mode 100644 index 00000000..6715ca38 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-05.png new file mode 100644 index 00000000..206bef3c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-06.png new file mode 100644 index 00000000..306a877d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-07.png new file mode 100644 index 00000000..80a1a99a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-08.png new file mode 100644 index 00000000..cc968273 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-09.png new file mode 100644 index 00000000..65e3db32 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-10.png new file mode 100644 index 00000000..0e610015 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-11.png new file mode 100644 index 00000000..625f957c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-12.png new file mode 100644 index 00000000..8a381989 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-13.png new file mode 100644 index 00000000..fe884394 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-14.png new file mode 100644 index 00000000..aecfe1ab Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-15.png new file mode 100644 index 00000000..f1a7bc93 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-16.png new file mode 100644 index 00000000..b0a34bd4 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-01.png new file mode 100644 index 00000000..62309bb2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-02.png new file mode 100644 index 00000000..99ca2a48 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-03.png new file mode 100644 index 00000000..ea2ff77e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-04.png new file mode 100644 index 00000000..afb83cb8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-05.png new file mode 100644 index 00000000..b61b5e8d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-06.png new file mode 100644 index 00000000..2c19e353 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-07.png new file mode 100644 index 00000000..e463c2c2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-08.png new file mode 100644 index 00000000..193a1303 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-09.png new file mode 100644 index 00000000..19117418 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-10.png new file mode 100644 index 00000000..d4caf9b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-11.png new file mode 100644 index 00000000..d519d21f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-12.png new file mode 100644 index 00000000..33aa61cf Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-13.png new file mode 100644 index 00000000..8476ffc9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-14.png new file mode 100644 index 00000000..76fa4662 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-15.png new file mode 100644 index 00000000..07fab56e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-16.png new file mode 100644 index 00000000..0162fd99 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-01.png new file mode 100644 index 00000000..50c494c9 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-02.png new file mode 100644 index 00000000..27b2dea6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-03.png new file mode 100644 index 00000000..e48c3021 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-04.png new file mode 100644 index 00000000..7f7c43a0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-05.png new file mode 100644 index 00000000..a00fc38d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-06.png new file mode 100644 index 00000000..d7700a01 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-07.png new file mode 100644 index 00000000..0444222e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-08.png new file mode 100644 index 00000000..64b215cd Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-09.png new file mode 100644 index 00000000..54b8b6b2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-10.png new file mode 100644 index 00000000..3f9efe09 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-11.png new file mode 100644 index 00000000..62cf46f3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-12.png new file mode 100644 index 00000000..51e4f943 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-13.png new file mode 100644 index 00000000..0f7f96a6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-14.png new file mode 100644 index 00000000..5a3ee547 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-15.png new file mode 100644 index 00000000..b1ae89ea Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-16.png new file mode 100644 index 00000000..0fcebe44 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-big-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-01.png new file mode 100644 index 00000000..c18c8963 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-02.png new file mode 100644 index 00000000..1d40b150 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-03.png new file mode 100644 index 00000000..87ed9811 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-04.png new file mode 100644 index 00000000..b928e806 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-05.png new file mode 100644 index 00000000..1977d30e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-06.png new file mode 100644 index 00000000..81d21335 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-07.png new file mode 100644 index 00000000..ffa0de21 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-08.png new file mode 100644 index 00000000..8a8d24f3 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-09.png new file mode 100644 index 00000000..c9c90e38 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-10.png new file mode 100644 index 00000000..f3ddfe5c Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-11.png new file mode 100644 index 00000000..0c9eb16d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-12.png new file mode 100644 index 00000000..ecf60860 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-13.png new file mode 100644 index 00000000..fe457240 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-14.png new file mode 100644 index 00000000..708a258d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-15.png new file mode 100644 index 00000000..2f966bec Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-16.png new file mode 100644 index 00000000..22512368 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-medium-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-01.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-01.png new file mode 100644 index 00000000..2e8e8d08 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-02.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-02.png new file mode 100644 index 00000000..d1b20a36 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-03.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-03.png new file mode 100644 index 00000000..47e86d2d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-04.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-04.png new file mode 100644 index 00000000..bf4e6dad Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-05.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-05.png new file mode 100644 index 00000000..711e64df Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-06.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-06.png new file mode 100644 index 00000000..6a2fbaed Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-07.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-07.png new file mode 100644 index 00000000..f03ecf40 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-08.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-08.png new file mode 100644 index 00000000..97bfb359 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-09.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-09.png new file mode 100644 index 00000000..2622250a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-10.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-10.png new file mode 100644 index 00000000..acfc2ba5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-11.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-11.png new file mode 100644 index 00000000..39005192 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-12.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-12.png new file mode 100644 index 00000000..62c1eab6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-13.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-13.png new file mode 100644 index 00000000..1c88c932 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-14.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-14.png new file mode 100644 index 00000000..5a58ca56 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-15.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-15.png new file mode 100644 index 00000000..2c132bb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-16.png b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-16.png new file mode 100644 index 00000000..789d945f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/sand-rock/sand-rock-small-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-00.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-00.png new file mode 100644 index 00000000..d4069b7d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-01.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-01.png new file mode 100644 index 00000000..b9b45d08 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-02.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-02.png new file mode 100644 index 00000000..b759daff Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-03.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-03.png new file mode 100644 index 00000000..0b45eb09 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-04.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-04.png new file mode 100644 index 00000000..c3f46baa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-05.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-05.png new file mode 100644 index 00000000..31ea6b4d Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-06.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-06.png new file mode 100644 index 00000000..62ac7cb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-07.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-07.png new file mode 100644 index 00000000..5519db55 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-08.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-08.png new file mode 100644 index 00000000..cad9b6c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-09.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-09.png new file mode 100644 index 00000000..f122a2bc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-10.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-10.png new file mode 100644 index 00000000..9602b066 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-11.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-11.png new file mode 100644 index 00000000..36c3b7a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-12.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-12.png new file mode 100644 index 00000000..b95b0e23 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-13.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-13.png new file mode 100644 index 00000000..8e8eb8fc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-14.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-14.png new file mode 100644 index 00000000..7d609527 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-15.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-15.png new file mode 100644 index 00000000..6c0a86eb Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-16.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-16.png new file mode 100644 index 00000000..9cfa93d4 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-17.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-17.png new file mode 100644 index 00000000..5f1378ae Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-18.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-18.png new file mode 100644 index 00000000..8553e2c8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-19.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-19.png new file mode 100644 index 00000000..c72ee4aa Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-20.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-20.png new file mode 100644 index 00000000..695c9b53 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-21.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-21.png new file mode 100644 index 00000000..1cce832e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-22.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-22.png new file mode 100644 index 00000000..728bbf27 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-23.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-23.png new file mode 100644 index 00000000..a942bc22 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-24.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-24.png new file mode 100644 index 00000000..ab926932 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-25.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-25.png new file mode 100644 index 00000000..91c115d6 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-26.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-26.png new file mode 100644 index 00000000..3ada1683 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-27.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-27.png new file mode 100644 index 00000000..370d7843 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-28.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-28.png new file mode 100644 index 00000000..8d5c4eda Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-29.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-29.png new file mode 100644 index 00000000..3714d791 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/hr-stone-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-00.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-00.png new file mode 100644 index 00000000..7f90bd00 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-01.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-01.png new file mode 100644 index 00000000..7da53240 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-02.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-02.png new file mode 100644 index 00000000..c6240c96 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-03.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-03.png new file mode 100644 index 00000000..ee4f927e Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-04.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-04.png new file mode 100644 index 00000000..f00f0df2 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-05.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-05.png new file mode 100644 index 00000000..d7d43633 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-06.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-06.png new file mode 100644 index 00000000..08c3c65f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-07.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-07.png new file mode 100644 index 00000000..c5849bbb Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-08.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-08.png new file mode 100644 index 00000000..10a584bc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-09.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-09.png new file mode 100644 index 00000000..394a2780 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-10.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-10.png new file mode 100644 index 00000000..99663d97 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-11.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-11.png new file mode 100644 index 00000000..a8d13261 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-12.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-12.png new file mode 100644 index 00000000..9ad5b40a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-13.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-13.png new file mode 100644 index 00000000..855ff692 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-14.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-14.png new file mode 100644 index 00000000..5d63fb7a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-15.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-15.png new file mode 100644 index 00000000..842fd1e7 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-16.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-16.png new file mode 100644 index 00000000..8f745db0 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-17.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-17.png new file mode 100644 index 00000000..3d8cf985 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-18.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-18.png new file mode 100644 index 00000000..1aaf0c83 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-19.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-19.png new file mode 100644 index 00000000..5ec670dc Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-20.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-20.png new file mode 100644 index 00000000..5359e683 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-21.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-21.png new file mode 100644 index 00000000..f257e022 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-22.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-22.png new file mode 100644 index 00000000..a888f031 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-23.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-23.png new file mode 100644 index 00000000..aaa4de85 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-24.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-24.png new file mode 100644 index 00000000..83ec2713 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-25.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-25.png new file mode 100644 index 00000000..5726e15a Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-26.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-26.png new file mode 100644 index 00000000..cbf16507 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-27.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-27.png new file mode 100644 index 00000000..8a53da9f Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-28.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-28.png new file mode 100644 index 00000000..fc552d87 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-29.png b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-29.png new file mode 100644 index 00000000..a89f2af8 Binary files /dev/null and b/alien-biomes/graphics/decorative/rock/base/stone-decal/stone-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-00.png new file mode 100644 index 00000000..8aa948ba Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-01.png new file mode 100644 index 00000000..ea2ab13e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-02.png new file mode 100644 index 00000000..0d343614 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-03.png new file mode 100644 index 00000000..207195c7 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-04.png new file mode 100644 index 00000000..0d57cecf Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-05.png new file mode 100644 index 00000000..7ec15ed6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-06.png new file mode 100644 index 00000000..8275ef2a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-07.png new file mode 100644 index 00000000..7f050a9f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-08.png new file mode 100644 index 00000000..9830da04 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-09.png new file mode 100644 index 00000000..23e333c6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-10.png new file mode 100644 index 00000000..9c7fdff1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-11.png new file mode 100644 index 00000000..2cf1cbc1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-00.png new file mode 100644 index 00000000..0240330f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-01.png new file mode 100644 index 00000000..a073330e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-02.png new file mode 100644 index 00000000..7ef55081 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-03.png new file mode 100644 index 00000000..4ea0032a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-04.png new file mode 100644 index 00000000..3db92852 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-05.png new file mode 100644 index 00000000..4023f401 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-06.png new file mode 100644 index 00000000..53cfeaff Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-07.png new file mode 100644 index 00000000..bdf2a27b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-08.png new file mode 100644 index 00000000..1e55ccb7 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-09.png new file mode 100644 index 00000000..4f66d31f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-10.png new file mode 100644 index 00000000..655c7eef Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-11.png new file mode 100644 index 00000000..293e74a6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-00.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-00.png new file mode 100644 index 00000000..e149ba30 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-01.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-01.png new file mode 100644 index 00000000..2a8377b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-02.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-02.png new file mode 100644 index 00000000..33d5f765 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-03.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-03.png new file mode 100644 index 00000000..fbd26219 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-04.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-04.png new file mode 100644 index 00000000..30b33c4e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-05.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-05.png new file mode 100644 index 00000000..92b07cbf Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-06.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-06.png new file mode 100644 index 00000000..9e1aeb10 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-07.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-07.png new file mode 100644 index 00000000..823af908 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-08.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-08.png new file mode 100644 index 00000000..9618f5e9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-09.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-09.png new file mode 100644 index 00000000..ae212434 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-10.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-10.png new file mode 100644 index 00000000..e6141fdd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-11.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-11.png new file mode 100644 index 00000000..74cca6cc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-12.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-12.png new file mode 100644 index 00000000..81a8a7d4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-13.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-13.png new file mode 100644 index 00000000..e3e34538 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-14.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-14.png new file mode 100644 index 00000000..50e4a238 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-15.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-15.png new file mode 100644 index 00000000..2e6796cc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-16.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-16.png new file mode 100644 index 00000000..4d232b8d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-17.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-17.png new file mode 100644 index 00000000..40e44a4c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-18.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-18.png new file mode 100644 index 00000000..645f291e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-19.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-19.png new file mode 100644 index 00000000..289102c9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/asterisk-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-00.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-00.png new file mode 100644 index 00000000..a1c2bb22 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-01.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-01.png new file mode 100644 index 00000000..b9d95f3d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-02.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-02.png new file mode 100644 index 00000000..038a514c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-03.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-03.png new file mode 100644 index 00000000..f8df3616 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-04.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-04.png new file mode 100644 index 00000000..7b05bf06 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-05.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-05.png new file mode 100644 index 00000000..19b0d611 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-06.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-06.png new file mode 100644 index 00000000..033ce08e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-07.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-07.png new file mode 100644 index 00000000..d9719ca4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-08.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-08.png new file mode 100644 index 00000000..ef3c1f6d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-09.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-09.png new file mode 100644 index 00000000..d663cce3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-10.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-10.png new file mode 100644 index 00000000..94aa9be7 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-11.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-11.png new file mode 100644 index 00000000..c03926ac Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-12.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-12.png new file mode 100644 index 00000000..170f4645 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-13.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-13.png new file mode 100644 index 00000000..1b946685 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-14.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-14.png new file mode 100644 index 00000000..672eeb23 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-15.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-15.png new file mode 100644 index 00000000..781a369b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-16.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-16.png new file mode 100644 index 00000000..f3128af8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-17.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-17.png new file mode 100644 index 00000000..ed89b163 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-18.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-18.png new file mode 100644 index 00000000..0eba4541 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-19.png b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-19.png new file mode 100644 index 00000000..1f7e47b2 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/asterisk/hr-asterisk-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-00.png new file mode 100644 index 00000000..206699c8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-01.png new file mode 100644 index 00000000..54267645 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-02.png new file mode 100644 index 00000000..843eefc8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-03.png new file mode 100644 index 00000000..e80aeaa1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-04.png new file mode 100644 index 00000000..89727aca Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-05.png new file mode 100644 index 00000000..794fb2da Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-06.png new file mode 100644 index 00000000..db5b5522 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-07.png new file mode 100644 index 00000000..f927d87b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-08.png new file mode 100644 index 00000000..47d71d2d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-09.png new file mode 100644 index 00000000..a365bd18 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-10.png new file mode 100644 index 00000000..c3d88fb6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-11.png new file mode 100644 index 00000000..1e531811 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/bush-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-00.png new file mode 100644 index 00000000..9e52731a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-01.png new file mode 100644 index 00000000..e544c934 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-02.png new file mode 100644 index 00000000..19470416 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-03.png new file mode 100644 index 00000000..d3e43f33 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-04.png new file mode 100644 index 00000000..010bceac Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-05.png new file mode 100644 index 00000000..bff20f80 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-06.png new file mode 100644 index 00000000..2640b8eb Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-07.png new file mode 100644 index 00000000..4b9909ef Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-08.png new file mode 100644 index 00000000..1af97693 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-09.png new file mode 100644 index 00000000..4ba8e92f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-10.png new file mode 100644 index 00000000..e3981a65 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-11.png new file mode 100644 index 00000000..8b63b2eb Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-00.png new file mode 100644 index 00000000..4ac1cc39 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-01.png new file mode 100644 index 00000000..45322d5a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-02.png new file mode 100644 index 00000000..b74620b9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-03.png new file mode 100644 index 00000000..b4b0a6ea Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-04.png new file mode 100644 index 00000000..0811196e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-05.png new file mode 100644 index 00000000..a50c902f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-06.png new file mode 100644 index 00000000..1d090e91 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-07.png new file mode 100644 index 00000000..998c1b0e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-08.png new file mode 100644 index 00000000..ce9ae305 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-09.png new file mode 100644 index 00000000..245ca184 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-10.png new file mode 100644 index 00000000..3f7ed9bd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-11.png new file mode 100644 index 00000000..aac91fe3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-00.png new file mode 100644 index 00000000..b6510eb4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-01.png new file mode 100644 index 00000000..6fca03d5 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-02.png new file mode 100644 index 00000000..6c78c169 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-03.png new file mode 100644 index 00000000..1b0e2755 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-04.png new file mode 100644 index 00000000..f5bfdd3d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-05.png new file mode 100644 index 00000000..6825a7ff Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-06.png new file mode 100644 index 00000000..df5cb015 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-07.png new file mode 100644 index 00000000..b7664ada Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-08.png new file mode 100644 index 00000000..c3cb559d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-09.png new file mode 100644 index 00000000..5533a959 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-10.png new file mode 100644 index 00000000..7e516d8a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-11.png new file mode 100644 index 00000000..fa229e7f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-00.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-00.png new file mode 100644 index 00000000..da34ecca Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-01.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-01.png new file mode 100644 index 00000000..2a2e43d6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-02.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-02.png new file mode 100644 index 00000000..02654406 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-03.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-03.png new file mode 100644 index 00000000..62f1b3d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-04.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-04.png new file mode 100644 index 00000000..73d9f22a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-05.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-05.png new file mode 100644 index 00000000..afe2dda9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-06.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-06.png new file mode 100644 index 00000000..b923ae06 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-07.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-07.png new file mode 100644 index 00000000..465b11a5 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-08.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-08.png new file mode 100644 index 00000000..1d041f2e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-09.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-09.png new file mode 100644 index 00000000..818062dd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-10.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-10.png new file mode 100644 index 00000000..eda40bf7 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-11.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-11.png new file mode 100644 index 00000000..b30161e4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-12.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-12.png new file mode 100644 index 00000000..aa8a22b8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-13.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-13.png new file mode 100644 index 00000000..2db48333 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-14.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-14.png new file mode 100644 index 00000000..206de86b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-15.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-15.png new file mode 100644 index 00000000..0fa0a8ff Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-16.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-16.png new file mode 100644 index 00000000..2cfc7e5a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-17.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-17.png new file mode 100644 index 00000000..fc967fc0 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-18.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-18.png new file mode 100644 index 00000000..8cc3a6f4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/croton-19.png b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-19.png new file mode 100644 index 00000000..22e883b0 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/croton-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-00.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-00.png new file mode 100644 index 00000000..2a92acd9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-01.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-01.png new file mode 100644 index 00000000..d33bcaf1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-02.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-02.png new file mode 100644 index 00000000..f455cbd6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-03.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-03.png new file mode 100644 index 00000000..1548bb22 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-04.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-04.png new file mode 100644 index 00000000..7bacc7e8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-05.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-05.png new file mode 100644 index 00000000..9363c2bb Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-06.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-06.png new file mode 100644 index 00000000..de20082d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-07.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-07.png new file mode 100644 index 00000000..35e28b62 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-08.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-08.png new file mode 100644 index 00000000..332e96f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-09.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-09.png new file mode 100644 index 00000000..cb403e6e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-10.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-10.png new file mode 100644 index 00000000..09b5ea93 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-11.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-11.png new file mode 100644 index 00000000..53ef5c9a Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-12.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-12.png new file mode 100644 index 00000000..08bbdbdd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-13.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-13.png new file mode 100644 index 00000000..112945f7 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-14.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-14.png new file mode 100644 index 00000000..76260ed9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-15.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-15.png new file mode 100644 index 00000000..d29bad8c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-16.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-16.png new file mode 100644 index 00000000..f019549b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-17.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-17.png new file mode 100644 index 00000000..fdc1666b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-18.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-18.png new file mode 100644 index 00000000..a471ef7e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-19.png b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-19.png new file mode 100644 index 00000000..eb072123 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/croton/hr-croton-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-00.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-00.png new file mode 100644 index 00000000..89444c84 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-01.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-01.png new file mode 100644 index 00000000..ec5714dc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-02.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-02.png new file mode 100644 index 00000000..672aed41 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-03.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-03.png new file mode 100644 index 00000000..27548680 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-04.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-04.png new file mode 100644 index 00000000..46d9a6af Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-05.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-05.png new file mode 100644 index 00000000..2f3f28b2 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-06.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-06.png new file mode 100644 index 00000000..2e40fee9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-07.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-07.png new file mode 100644 index 00000000..95dcd428 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-08.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-08.png new file mode 100644 index 00000000..2e5acd72 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-09.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-09.png new file mode 100644 index 00000000..815eafc9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-10.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-10.png new file mode 100644 index 00000000..7acd0ac3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-11.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-11.png new file mode 100644 index 00000000..03e0a96e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/desert-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-00.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-00.png new file mode 100644 index 00000000..aa8bd377 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-01.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-01.png new file mode 100644 index 00000000..2680883f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-02.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-02.png new file mode 100644 index 00000000..7e5a1797 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-03.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-03.png new file mode 100644 index 00000000..bc8fedf8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-04.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-04.png new file mode 100644 index 00000000..831e9983 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-05.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-05.png new file mode 100644 index 00000000..deed3641 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-06.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-06.png new file mode 100644 index 00000000..73ed3dcf Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-07.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-07.png new file mode 100644 index 00000000..55bed78b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-08.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-08.png new file mode 100644 index 00000000..1a17010e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-09.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-09.png new file mode 100644 index 00000000..6abb0c2f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-10.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-10.png new file mode 100644 index 00000000..504cefb0 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-11.png b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-11.png new file mode 100644 index 00000000..64475f69 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-00.png new file mode 100644 index 00000000..c4246d16 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-01.png new file mode 100644 index 00000000..8d46f36d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-02.png new file mode 100644 index 00000000..e4bf3f15 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-03.png new file mode 100644 index 00000000..07ecb432 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-04.png new file mode 100644 index 00000000..589a7bb8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-05.png new file mode 100644 index 00000000..f0d2078d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-06.png new file mode 100644 index 00000000..d49f62cd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-07.png new file mode 100644 index 00000000..c49efcc3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-08.png new file mode 100644 index 00000000..c6ea0355 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-09.png new file mode 100644 index 00000000..975c0117 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-10.png new file mode 100644 index 00000000..23c093a2 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-11.png new file mode 100644 index 00000000..44d8f804 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-12.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-12.png new file mode 100644 index 00000000..8b81e0e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-13.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-13.png new file mode 100644 index 00000000..a590adac Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-14.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-14.png new file mode 100644 index 00000000..46ca246b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-15.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-15.png new file mode 100644 index 00000000..cf218189 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-16.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-16.png new file mode 100644 index 00000000..952c1865 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-17.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-17.png new file mode 100644 index 00000000..1ef78183 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-18.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-18.png new file mode 100644 index 00000000..38f9fa3e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-19.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-19.png new file mode 100644 index 00000000..296036fc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-00.png new file mode 100644 index 00000000..4e4d13ba Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-01.png new file mode 100644 index 00000000..4893d43c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-02.png new file mode 100644 index 00000000..112a8012 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-03.png new file mode 100644 index 00000000..e801c338 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-04.png new file mode 100644 index 00000000..900019ed Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-05.png new file mode 100644 index 00000000..a6318c32 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-06.png new file mode 100644 index 00000000..42b03075 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-07.png new file mode 100644 index 00000000..f029639e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-08.png new file mode 100644 index 00000000..c845408b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-09.png new file mode 100644 index 00000000..eb46cf33 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-10.png new file mode 100644 index 00000000..110c8f7c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-11.png new file mode 100644 index 00000000..df7d161d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-12.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-12.png new file mode 100644 index 00000000..b84f3a72 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-13.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-13.png new file mode 100644 index 00000000..50b00cb9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-14.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-14.png new file mode 100644 index 00000000..911b52cd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-15.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-15.png new file mode 100644 index 00000000..64b254f2 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-15.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-16.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-16.png new file mode 100644 index 00000000..7efccacc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-16.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-17.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-17.png new file mode 100644 index 00000000..3d3a06ca Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-17.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-18.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-18.png new file mode 100644 index 00000000..4b538c6e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-18.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-19.png b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-19.png new file mode 100644 index 00000000..cd3725ab Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-19.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-00.png new file mode 100644 index 00000000..a9e6da85 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-01.png new file mode 100644 index 00000000..26e5de46 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-02.png new file mode 100644 index 00000000..1f4888a1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-03.png new file mode 100644 index 00000000..a7d43c4d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-04.png new file mode 100644 index 00000000..825ea17e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-05.png new file mode 100644 index 00000000..5a8c3c82 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-06.png new file mode 100644 index 00000000..084fa065 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-07.png new file mode 100644 index 00000000..4fb57616 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-08.png new file mode 100644 index 00000000..b9e851ec Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-09.png new file mode 100644 index 00000000..078df7fc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-10.png new file mode 100644 index 00000000..5f383733 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-11.png new file mode 100644 index 00000000..66670609 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-12.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-12.png new file mode 100644 index 00000000..38d8f6d8 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-13.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-13.png new file mode 100644 index 00000000..959f9a7f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-14.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-14.png new file mode 100644 index 00000000..c7c53122 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-00.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-00.png new file mode 100644 index 00000000..949b2a16 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-01.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-01.png new file mode 100644 index 00000000..60f3f540 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-02.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-02.png new file mode 100644 index 00000000..ee735e4b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-03.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-03.png new file mode 100644 index 00000000..b3e7378f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-04.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-04.png new file mode 100644 index 00000000..d3c1e5de Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-05.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-05.png new file mode 100644 index 00000000..04b68d58 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-06.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-06.png new file mode 100644 index 00000000..6488be47 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-07.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-07.png new file mode 100644 index 00000000..0b4eb7ea Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-08.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-08.png new file mode 100644 index 00000000..b6413197 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-09.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-09.png new file mode 100644 index 00000000..84d6bb41 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-10.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-10.png new file mode 100644 index 00000000..282486cc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-11.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-11.png new file mode 100644 index 00000000..aac0ea14 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-12.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-12.png new file mode 100644 index 00000000..a5904cfa Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-13.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-13.png new file mode 100644 index 00000000..ee422fb3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-14.png b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-14.png new file mode 100644 index 00000000..ad44d6e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita-mini/pita-mini-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-00.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-00.png new file mode 100644 index 00000000..5c8df451 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-01.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-01.png new file mode 100644 index 00000000..815591fa Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-02.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-02.png new file mode 100644 index 00000000..04acdc3e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-03.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-03.png new file mode 100644 index 00000000..4609710d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-04.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-04.png new file mode 100644 index 00000000..2b6335e9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-05.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-05.png new file mode 100644 index 00000000..3cc11da3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-06.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-06.png new file mode 100644 index 00000000..a67dd108 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-07.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-07.png new file mode 100644 index 00000000..1eea97dc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-08.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-08.png new file mode 100644 index 00000000..00e98fcc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-09.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-09.png new file mode 100644 index 00000000..68b3dfbd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-10.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-10.png new file mode 100644 index 00000000..3fb40bec Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-11.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-11.png new file mode 100644 index 00000000..554f5f68 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-12.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-12.png new file mode 100644 index 00000000..1f949b72 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-13.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-13.png new file mode 100644 index 00000000..c0b22b5e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-14.png b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-14.png new file mode 100644 index 00000000..77f45854 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/hr-pita-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-00.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-00.png new file mode 100644 index 00000000..91849c9f Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-01.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-01.png new file mode 100644 index 00000000..2b2de6b3 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-02.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-02.png new file mode 100644 index 00000000..0c9feb3d Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-03.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-03.png new file mode 100644 index 00000000..f8ab589b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-04.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-04.png new file mode 100644 index 00000000..5f0b5284 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-05.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-05.png new file mode 100644 index 00000000..bd074023 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-06.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-06.png new file mode 100644 index 00000000..f8e71200 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-07.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-07.png new file mode 100644 index 00000000..4e12b318 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-08.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-08.png new file mode 100644 index 00000000..f3ec7c19 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-09.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-09.png new file mode 100644 index 00000000..e9025161 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-10.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-10.png new file mode 100644 index 00000000..07d68461 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-11.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-11.png new file mode 100644 index 00000000..5c093467 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-12.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-12.png new file mode 100644 index 00000000..4e345b20 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-12.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-13.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-13.png new file mode 100644 index 00000000..5568490e Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-13.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/pita/pita-14.png b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-14.png new file mode 100644 index 00000000..d28c80b1 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/pita/pita-14.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-00.png new file mode 100644 index 00000000..d77e2164 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-01.png new file mode 100644 index 00000000..1e13ebcc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-02.png new file mode 100644 index 00000000..d6cd4e28 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-03.png new file mode 100644 index 00000000..c8fe9658 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-04.png new file mode 100644 index 00000000..2cdb2fc9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-05.png new file mode 100644 index 00000000..cff4ab58 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-06.png new file mode 100644 index 00000000..405f10b5 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-07.png new file mode 100644 index 00000000..6f2d391c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-08.png new file mode 100644 index 00000000..28a5c3bb Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-09.png new file mode 100644 index 00000000..bdb158f6 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-10.png new file mode 100644 index 00000000..19465e5b Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-11.png new file mode 100644 index 00000000..ef7324bd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/hr-small-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-00.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-00.png new file mode 100644 index 00000000..b9abaf93 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-00.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-01.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-01.png new file mode 100644 index 00000000..ea3eec52 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-01.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-02.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-02.png new file mode 100644 index 00000000..381e57bc Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-02.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-03.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-03.png new file mode 100644 index 00000000..b9be0d73 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-03.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-04.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-04.png new file mode 100644 index 00000000..a0144cf9 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-04.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-05.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-05.png new file mode 100644 index 00000000..1b36246c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-05.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-06.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-06.png new file mode 100644 index 00000000..1115ebcd Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-06.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-07.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-07.png new file mode 100644 index 00000000..4c7a7b32 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-07.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-08.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-08.png new file mode 100644 index 00000000..d43cdc1c Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-08.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-09.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-09.png new file mode 100644 index 00000000..f67895d4 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-09.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-10.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-10.png new file mode 100644 index 00000000..bbdb61ca Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-10.png differ diff --git a/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-11.png b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-11.png new file mode 100644 index 00000000..1631c092 Binary files /dev/null and b/alien-biomes/graphics/decorative/vegetation/base/small-grass/small-grass-11.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-00.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-00.png new file mode 100644 index 00000000..3aa6126c Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-01.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-01.png new file mode 100644 index 00000000..b27befec Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-02.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-02.png new file mode 100644 index 00000000..86900cda Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-03.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-03.png new file mode 100644 index 00000000..9bf27776 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-04.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-04.png new file mode 100644 index 00000000..94cb4091 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-05.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-05.png new file mode 100644 index 00000000..ee272f9d Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-06.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-06.png new file mode 100644 index 00000000..3cffa234 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-07.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-07.png new file mode 100644 index 00000000..34ebaf29 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-08.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-08.png new file mode 100644 index 00000000..27d0a406 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-09.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-09.png new file mode 100644 index 00000000..596a6890 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-10.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-10.png new file mode 100644 index 00000000..a7539f17 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-11.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-11.png new file mode 100644 index 00000000..4791b5e3 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-12.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-12.png new file mode 100644 index 00000000..6b0fe296 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-13.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-13.png new file mode 100644 index 00000000..38c3cbe2 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-14.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-14.png new file mode 100644 index 00000000..2da96c44 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-15.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-15.png new file mode 100644 index 00000000..1c075852 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-16.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-16.png new file mode 100644 index 00000000..98f6a6a3 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-17.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-17.png new file mode 100644 index 00000000..8ec21206 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-18.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-18.png new file mode 100644 index 00000000..0f92ccc4 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-19.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-19.png new file mode 100644 index 00000000..6735eaa3 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-20.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-20.png new file mode 100644 index 00000000..1dca8c4c Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-21.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-21.png new file mode 100644 index 00000000..02513f5b Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-22.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-22.png new file mode 100644 index 00000000..f280c355 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-23.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-23.png new file mode 100644 index 00000000..be8d88de Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-24.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-24.png new file mode 100644 index 00000000..2c2fe7ba Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-25.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-25.png new file mode 100644 index 00000000..53f625ee Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-26.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-26.png new file mode 100644 index 00000000..779c8032 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-27.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-27.png new file mode 100644 index 00000000..ca9347f3 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-28.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-28.png new file mode 100644 index 00000000..36b9abd8 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-29.png b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-29.png new file mode 100644 index 00000000..ca0483e4 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/hr-wetland-decal-29.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-00.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-00.png new file mode 100644 index 00000000..09861d30 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-00.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-01.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-01.png new file mode 100644 index 00000000..5d9f8e1c Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-01.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-02.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-02.png new file mode 100644 index 00000000..972b112f Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-02.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-03.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-03.png new file mode 100644 index 00000000..38716714 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-03.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-04.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-04.png new file mode 100644 index 00000000..9660176c Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-04.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-05.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-05.png new file mode 100644 index 00000000..c2899507 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-05.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-06.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-06.png new file mode 100644 index 00000000..6d518aff Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-06.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-07.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-07.png new file mode 100644 index 00000000..4ada7eb6 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-07.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-08.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-08.png new file mode 100644 index 00000000..aa1d0578 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-08.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-09.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-09.png new file mode 100644 index 00000000..a678df49 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-09.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-10.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-10.png new file mode 100644 index 00000000..7c372bc7 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-10.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-11.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-11.png new file mode 100644 index 00000000..43ee9bbd Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-11.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-12.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-12.png new file mode 100644 index 00000000..91db42e0 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-12.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-13.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-13.png new file mode 100644 index 00000000..1c47de8f Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-13.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-14.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-14.png new file mode 100644 index 00000000..cbe7df23 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-14.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-15.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-15.png new file mode 100644 index 00000000..33c04e8d Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-15.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-16.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-16.png new file mode 100644 index 00000000..8a51fbff Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-16.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-17.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-17.png new file mode 100644 index 00000000..f6ca0c3c Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-17.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-18.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-18.png new file mode 100644 index 00000000..710fa4ea Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-18.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-19.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-19.png new file mode 100644 index 00000000..e5c2b8bc Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-19.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-20.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-20.png new file mode 100644 index 00000000..a01bec9a Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-20.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-21.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-21.png new file mode 100644 index 00000000..3dd42a88 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-21.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-22.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-22.png new file mode 100644 index 00000000..132db2d2 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-22.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-23.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-23.png new file mode 100644 index 00000000..9bcb04eb Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-23.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-24.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-24.png new file mode 100644 index 00000000..1ca57d30 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-24.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-25.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-25.png new file mode 100644 index 00000000..7d6d9985 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-25.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-26.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-26.png new file mode 100644 index 00000000..c0f9425b Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-26.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-27.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-27.png new file mode 100644 index 00000000..26be14ff Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-27.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-28.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-28.png new file mode 100644 index 00000000..70042ce0 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-28.png differ diff --git a/alien-biomes/graphics/decorative/wetland/wetland-decal-29.png b/alien-biomes/graphics/decorative/wetland/wetland-decal-29.png new file mode 100644 index 00000000..b5de5305 Binary files /dev/null and b/alien-biomes/graphics/decorative/wetland/wetland-decal-29.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-leaves.png new file mode 100644 index 00000000..3e744e61 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-normal.png new file mode 100644 index 00000000..0a41fef1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-shadow.png new file mode 100644 index 00000000..af7e87f8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-trunk.png new file mode 100644 index 00000000..b0f84ecd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-leaves.png new file mode 100644 index 00000000..b7084565 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-normal.png new file mode 100644 index 00000000..afe75d90 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-shadow.png new file mode 100644 index 00000000..3edf377b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-trunk.png new file mode 100644 index 00000000..7ed8ddd7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-leaves.png new file mode 100644 index 00000000..89da1bf9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-normal.png new file mode 100644 index 00000000..e6084f75 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-shadow.png new file mode 100644 index 00000000..68b510b4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-trunk.png new file mode 100644 index 00000000..27e3b506 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-leaves.png new file mode 100644 index 00000000..fb7da5c7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-normal.png new file mode 100644 index 00000000..5308e7c6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-shadow.png new file mode 100644 index 00000000..8c17c505 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-trunk.png new file mode 100644 index 00000000..9755a933 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-leaves.png new file mode 100644 index 00000000..fdbe902d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-normal.png new file mode 100644 index 00000000..474d4f6a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-shadow.png new file mode 100644 index 00000000..37ba786d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-trunk.png new file mode 100644 index 00000000..6a906064 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-leaves.png new file mode 100644 index 00000000..05b3c856 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-normal.png new file mode 100644 index 00000000..ecbd6cb2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-shadow.png new file mode 100644 index 00000000..30c07b39 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-trunk.png new file mode 100644 index 00000000..d7578e0f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-leaves.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-leaves.png new file mode 100644 index 00000000..34309441 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-normal.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-normal.png new file mode 100644 index 00000000..81f4f478 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-shadow.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-shadow.png new file mode 100644 index 00000000..083b2ab6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-trunk.png b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-trunk.png new file mode 100644 index 00000000..29aadadc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/hr-tree-ash-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-a-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-leaves.png new file mode 100644 index 00000000..e6c85d89 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-a-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-normal.png new file mode 100644 index 00000000..e76735f3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-a-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-shadow.png new file mode 100644 index 00000000..f9bbd495 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-a-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-trunk.png new file mode 100644 index 00000000..c6668253 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-b-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-leaves.png new file mode 100644 index 00000000..8413c660 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-b-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-normal.png new file mode 100644 index 00000000..c30140b7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-b-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-shadow.png new file mode 100644 index 00000000..105453c4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-b-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-trunk.png new file mode 100644 index 00000000..b9141e1c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-c-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-leaves.png new file mode 100644 index 00000000..32b50b41 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-c-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-normal.png new file mode 100644 index 00000000..2219eb2e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-c-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-shadow.png new file mode 100644 index 00000000..bd00d32d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-c-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-trunk.png new file mode 100644 index 00000000..0033df2b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-d-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-leaves.png new file mode 100644 index 00000000..7aca7783 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-d-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-normal.png new file mode 100644 index 00000000..8fe1d7bf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-d-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-shadow.png new file mode 100644 index 00000000..654684c3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-d-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-trunk.png new file mode 100644 index 00000000..9cd4ba94 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-e-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-leaves.png new file mode 100644 index 00000000..84937bd1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-e-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-normal.png new file mode 100644 index 00000000..09e6e412 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-e-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-shadow.png new file mode 100644 index 00000000..4f2f0779 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-e-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-trunk.png new file mode 100644 index 00000000..b2ae5a8f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-f-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-leaves.png new file mode 100644 index 00000000..080b271b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-f-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-normal.png new file mode 100644 index 00000000..c857de28 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-f-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-shadow.png new file mode 100644 index 00000000..c5f1798a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-f-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-trunk.png new file mode 100644 index 00000000..219870d2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-g-leaves.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-leaves.png new file mode 100644 index 00000000..414dcb9e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-g-normal.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-normal.png new file mode 100644 index 00000000..c84a3119 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-g-shadow.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-shadow.png new file mode 100644 index 00000000..0aad9bac Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-g-trunk.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-trunk.png new file mode 100644 index 00000000..8408aa7a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/ash/tree-ash-reflection.png b/alien-biomes/graphics/entity/tree/ash/tree-ash-reflection.png new file mode 100644 index 00000000..28075186 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/ash/tree-ash-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-leaves.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-leaves.png new file mode 100644 index 00000000..ae608d8f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-normal.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-normal.png new file mode 100644 index 00000000..b8d86b2b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-shadow.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-shadow.png new file mode 100644 index 00000000..8b1b9092 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-trunk.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-trunk.png new file mode 100644 index 00000000..727a4a65 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-leaves.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-leaves.png new file mode 100644 index 00000000..85d05bcc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-normal.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-normal.png new file mode 100644 index 00000000..05c55fd9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-shadow.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-shadow.png new file mode 100644 index 00000000..665926d7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-trunk.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-trunk.png new file mode 100644 index 00000000..e8a25ef0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-leaves.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-leaves.png new file mode 100644 index 00000000..21562253 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-normal.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-normal.png new file mode 100644 index 00000000..66f2663b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-shadow.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-shadow.png new file mode 100644 index 00000000..3d6b8a9e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-trunk.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-trunk.png new file mode 100644 index 00000000..59a69aaa Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-leaves.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-leaves.png new file mode 100644 index 00000000..9d777d6c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-normal.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-normal.png new file mode 100644 index 00000000..79a0da39 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-shadow.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-shadow.png new file mode 100644 index 00000000..ce704e22 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-trunk.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-trunk.png new file mode 100644 index 00000000..e13e80b4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-leaves.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-leaves.png new file mode 100644 index 00000000..0c106d0e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-normal.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-normal.png new file mode 100644 index 00000000..730a3e03 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-shadow.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-shadow.png new file mode 100644 index 00000000..04eab30e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-trunk.png b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-trunk.png new file mode 100644 index 00000000..6589486b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/hr-tree-baobab-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-leaves.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-leaves.png new file mode 100644 index 00000000..44fb0139 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-normal.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-normal.png new file mode 100644 index 00000000..8ab5608f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-shadow.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-shadow.png new file mode 100644 index 00000000..079eb29c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-trunk.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-trunk.png new file mode 100644 index 00000000..613254af Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-leaves.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-leaves.png new file mode 100644 index 00000000..168b1fdd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-normal.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-normal.png new file mode 100644 index 00000000..a6b4cd48 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-shadow.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-shadow.png new file mode 100644 index 00000000..dea5dbce Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-trunk.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-trunk.png new file mode 100644 index 00000000..45e10061 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-leaves.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-leaves.png new file mode 100644 index 00000000..d8a7b161 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-normal.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-normal.png new file mode 100644 index 00000000..86191ca0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-shadow.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-shadow.png new file mode 100644 index 00000000..2295f9d9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-trunk.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-trunk.png new file mode 100644 index 00000000..b6c45900 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-leaves.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-leaves.png new file mode 100644 index 00000000..f28202d4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-normal.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-normal.png new file mode 100644 index 00000000..5d98e745 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-shadow.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-shadow.png new file mode 100644 index 00000000..062c7ba1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-trunk.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-trunk.png new file mode 100644 index 00000000..a6d88f79 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-leaves.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-leaves.png new file mode 100644 index 00000000..1adfeea4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-normal.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-normal.png new file mode 100644 index 00000000..7be50f1a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-shadow.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-shadow.png new file mode 100644 index 00000000..bc1b90a4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-trunk.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-trunk.png new file mode 100644 index 00000000..b095979b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/baobab/tree-baobab-reflection.png b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-reflection.png new file mode 100644 index 00000000..bf4dfe8e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/baobab/tree-baobab-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-leaves.png new file mode 100644 index 00000000..70d4b911 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-normal.png new file mode 100644 index 00000000..b583d699 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-shadow.png new file mode 100644 index 00000000..b6ee0c07 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-trunk.png new file mode 100644 index 00000000..d15b70e8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-leaves.png new file mode 100644 index 00000000..d97c5fef Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-normal.png new file mode 100644 index 00000000..6ccc4150 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-shadow.png new file mode 100644 index 00000000..bdc14bb0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-trunk.png new file mode 100644 index 00000000..e5adf507 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-leaves.png new file mode 100644 index 00000000..4fb3d6de Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-normal.png new file mode 100644 index 00000000..8203bf47 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-shadow.png new file mode 100644 index 00000000..bf7f2eb2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-trunk.png new file mode 100644 index 00000000..c69c4df9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/hr-tree-conifer-01-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-leaves.png new file mode 100644 index 00000000..479881e4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-normal.png new file mode 100644 index 00000000..565274bc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-shadow.png new file mode 100644 index 00000000..2e737cbc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-trunk.png new file mode 100644 index 00000000..0120dae1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-leaves.png new file mode 100644 index 00000000..8289ab3e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-normal.png new file mode 100644 index 00000000..23fe1f1f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-shadow.png new file mode 100644 index 00000000..a06a2556 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-trunk.png new file mode 100644 index 00000000..b7c72bc8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-leaves.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-leaves.png new file mode 100644 index 00000000..44b6c4e3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-normal.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-normal.png new file mode 100644 index 00000000..970b90a7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-shadow.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-shadow.png new file mode 100644 index 00000000..71509d68 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-trunk.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-trunk.png new file mode 100644 index 00000000..f38560c4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-reflection.png b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-reflection.png new file mode 100644 index 00000000..e5cdf02b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/conifer-01/tree-conifer-01-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-shadow.png new file mode 100644 index 00000000..fbc01989 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-trunk.png new file mode 100644 index 00000000..0383713a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-01-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-shadow.png new file mode 100644 index 00000000..46d5bbee Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-trunk.png new file mode 100644 index 00000000..0a838e43 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-02-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-shadow.png new file mode 100644 index 00000000..b30c3a79 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-trunk.png new file mode 100644 index 00000000..2a1f6693 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-03-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-shadow.png new file mode 100644 index 00000000..8c08829f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-trunk.png new file mode 100644 index 00000000..2753a7e3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-04-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-shadow.png new file mode 100644 index 00000000..2f52329d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-trunk.png new file mode 100644 index 00000000..c65107ad Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-05-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-shadow.png new file mode 100644 index 00000000..2978e2e7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-trunk.png new file mode 100644 index 00000000..60ecef15 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-06-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-shadow.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-shadow.png new file mode 100644 index 00000000..fa7de18d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-trunk.png b/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-trunk.png new file mode 100644 index 00000000..1615fa75 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/green-coral/green-coral-07-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-leaves.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-leaves.png new file mode 100644 index 00000000..f5cd0145 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-normal.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-normal.png new file mode 100644 index 00000000..14f54bbb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-shadow.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-shadow.png new file mode 100644 index 00000000..43bc22cc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-trunk.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-trunk.png new file mode 100644 index 00000000..52911ed1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-leaves.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-leaves.png new file mode 100644 index 00000000..be2b3a58 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-normal.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-normal.png new file mode 100644 index 00000000..7e4db83d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-shadow.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-shadow.png new file mode 100644 index 00000000..02b12356 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-trunk.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-trunk.png new file mode 100644 index 00000000..a573ca62 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-leaves.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-leaves.png new file mode 100644 index 00000000..76a76b6b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-normal.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-normal.png new file mode 100644 index 00000000..8d721a67 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-shadow.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-shadow.png new file mode 100644 index 00000000..7f99161a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-trunk.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-trunk.png new file mode 100644 index 00000000..49a7beed Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-leaves.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-leaves.png new file mode 100644 index 00000000..83b191a2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-normal.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-normal.png new file mode 100644 index 00000000..00168619 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-shadow.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-shadow.png new file mode 100644 index 00000000..2c84b073 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-trunk.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-trunk.png new file mode 100644 index 00000000..f1bfe51f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-leaves.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-leaves.png new file mode 100644 index 00000000..4b6b523f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-normal.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-normal.png new file mode 100644 index 00000000..d72f9719 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-shadow.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-shadow.png new file mode 100644 index 00000000..f4ea9222 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-trunk.png b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-trunk.png new file mode 100644 index 00000000..cb01ca91 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/hr-tree-greypine-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-leaves.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-leaves.png new file mode 100644 index 00000000..63e90de9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-normal.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-normal.png new file mode 100644 index 00000000..53261ca8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-shadow.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-shadow.png new file mode 100644 index 00000000..8f8b48fc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-trunk.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-trunk.png new file mode 100644 index 00000000..409db244 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-leaves.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-leaves.png new file mode 100644 index 00000000..0fa6daea Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-normal.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-normal.png new file mode 100644 index 00000000..6ba43958 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-shadow.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-shadow.png new file mode 100644 index 00000000..f49a2fb0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-trunk.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-trunk.png new file mode 100644 index 00000000..39c775bd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-leaves.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-leaves.png new file mode 100644 index 00000000..b6b68608 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-normal.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-normal.png new file mode 100644 index 00000000..72445510 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-shadow.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-shadow.png new file mode 100644 index 00000000..11a58000 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-trunk.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-trunk.png new file mode 100644 index 00000000..dd80b7f1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-leaves.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-leaves.png new file mode 100644 index 00000000..4ba2014a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-normal.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-normal.png new file mode 100644 index 00000000..7acb71e7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-shadow.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-shadow.png new file mode 100644 index 00000000..822c3675 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-trunk.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-trunk.png new file mode 100644 index 00000000..eed5c720 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-leaves.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-leaves.png new file mode 100644 index 00000000..edbed664 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-normal.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-normal.png new file mode 100644 index 00000000..9a1f3053 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-shadow.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-shadow.png new file mode 100644 index 00000000..bf43a1bb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-trunk.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-trunk.png new file mode 100644 index 00000000..d8aabdf4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/greypine/tree-greypine-reflection.png b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-reflection.png new file mode 100644 index 00000000..42992db3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/greypine/tree-greypine-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-leaves.png new file mode 100644 index 00000000..251ed2f2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-normal.png new file mode 100644 index 00000000..d0c972ae Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-shadow.png new file mode 100644 index 00000000..2f169bca Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-trunk.png new file mode 100644 index 00000000..7fbf8a2a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-leaves.png new file mode 100644 index 00000000..d321f019 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-normal.png new file mode 100644 index 00000000..e54535cc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-shadow.png new file mode 100644 index 00000000..9e91e111 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-trunk.png new file mode 100644 index 00000000..fed3adaf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-leaves.png new file mode 100644 index 00000000..1221dab4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-normal.png new file mode 100644 index 00000000..414cca64 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-shadow.png new file mode 100644 index 00000000..756b92a9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-trunk.png new file mode 100644 index 00000000..91fa0967 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-leaves.png new file mode 100644 index 00000000..b2c6f787 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-normal.png new file mode 100644 index 00000000..43efb4d9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-shadow.png new file mode 100644 index 00000000..7181e0ec Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-trunk.png new file mode 100644 index 00000000..7be428ea Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-leaves.png new file mode 100644 index 00000000..c43fcc8b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-normal.png new file mode 100644 index 00000000..05b28e3a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-shadow.png new file mode 100644 index 00000000..6505fdc5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-trunk.png new file mode 100644 index 00000000..0d3e03d9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-leaves.png new file mode 100644 index 00000000..8e6cea1d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-normal.png new file mode 100644 index 00000000..9c9e5034 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-shadow.png new file mode 100644 index 00000000..0a0e8b76 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-trunk.png new file mode 100644 index 00000000..b10b9acf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-leaves.png new file mode 100644 index 00000000..63f68e56 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-normal.png new file mode 100644 index 00000000..66f28e6b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-shadow.png new file mode 100644 index 00000000..22348eb7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-trunk.png new file mode 100644 index 00000000..3aba9ecc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-leaves.png new file mode 100644 index 00000000..18c885c8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-normal.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-normal.png new file mode 100644 index 00000000..d2d03c7c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-shadow.png new file mode 100644 index 00000000..dbea2c75 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-trunk.png new file mode 100644 index 00000000..fd73ba56 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/hr-tree-mangrove-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-leaves.png new file mode 100644 index 00000000..064f4ff6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-normal.png new file mode 100644 index 00000000..00ed1e2c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-shadow.png new file mode 100644 index 00000000..582d7aee Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-trunk.png new file mode 100644 index 00000000..7001eb43 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-leaves.png new file mode 100644 index 00000000..dde8343c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-normal.png new file mode 100644 index 00000000..5819d48b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-shadow.png new file mode 100644 index 00000000..eb3d800d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-trunk.png new file mode 100644 index 00000000..cec9419a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-leaves.png new file mode 100644 index 00000000..8cce424c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-normal.png new file mode 100644 index 00000000..8e393be2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-shadow.png new file mode 100644 index 00000000..75e4b6b0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-trunk.png new file mode 100644 index 00000000..3a129186 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-leaves.png new file mode 100644 index 00000000..dd95872e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-normal.png new file mode 100644 index 00000000..9dd22bc1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-shadow.png new file mode 100644 index 00000000..da27db85 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-trunk.png new file mode 100644 index 00000000..2612afd7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-leaves.png new file mode 100644 index 00000000..10590ce7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-normal.png new file mode 100644 index 00000000..2fd50dff Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-shadow.png new file mode 100644 index 00000000..0826df61 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-trunk.png new file mode 100644 index 00000000..84c88052 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-leaves.png new file mode 100644 index 00000000..e16f2fa6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-normal.png new file mode 100644 index 00000000..d17da802 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-shadow.png new file mode 100644 index 00000000..57c8b87e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-trunk.png new file mode 100644 index 00000000..b504e485 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-leaves.png new file mode 100644 index 00000000..0160c986 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-normal.png new file mode 100644 index 00000000..0621244c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-shadow.png new file mode 100644 index 00000000..1540385b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-trunk.png new file mode 100644 index 00000000..5dcec03b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-leaves.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-leaves.png new file mode 100644 index 00000000..2b540c64 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-normal.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-normal.png new file mode 100644 index 00000000..2216c883 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-shadow.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-shadow.png new file mode 100644 index 00000000..cf853cd5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-trunk.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-trunk.png new file mode 100644 index 00000000..9e7732e4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-reflection.png b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-reflection.png new file mode 100644 index 00000000..22275e97 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/mangrove/tree-mangrove-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-leaves.png new file mode 100644 index 00000000..9f0f3c5f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-shadow.png new file mode 100644 index 00000000..53da2b0e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-trunk.png new file mode 100644 index 00000000..f2495b07 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-leaves.png new file mode 100644 index 00000000..37349d37 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-shadow.png new file mode 100644 index 00000000..c866147c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-trunk.png new file mode 100644 index 00000000..3abe42a1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-leaves.png new file mode 100644 index 00000000..200f8107 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-shadow.png new file mode 100644 index 00000000..cdcab014 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-trunk.png new file mode 100644 index 00000000..0d996f27 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-leaves.png new file mode 100644 index 00000000..95cf2dff Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-shadow.png new file mode 100644 index 00000000..93b78a79 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-trunk.png new file mode 100644 index 00000000..5a62ea83 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-leaves.png new file mode 100644 index 00000000..f214f82a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-shadow.png new file mode 100644 index 00000000..10e574ee Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-trunk.png new file mode 100644 index 00000000..881b161c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/hr-tree-medusa-01-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-leaves.png new file mode 100644 index 00000000..6046a914 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-shadow.png new file mode 100644 index 00000000..d0a012fc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-trunk.png new file mode 100644 index 00000000..856f77d2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-leaves.png new file mode 100644 index 00000000..e52935a9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-shadow.png new file mode 100644 index 00000000..58ff6cf7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-trunk.png new file mode 100644 index 00000000..0f59a035 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-leaves.png new file mode 100644 index 00000000..89b53b0d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-shadow.png new file mode 100644 index 00000000..97ff4f77 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-trunk.png new file mode 100644 index 00000000..43c650b0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-leaves.png new file mode 100644 index 00000000..d9d30bbc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-shadow.png new file mode 100644 index 00000000..94415b21 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-trunk.png new file mode 100644 index 00000000..2f057f19 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-leaves.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-leaves.png new file mode 100644 index 00000000..9abe6398 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-shadow.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-shadow.png new file mode 100644 index 00000000..ba741c14 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-trunk.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-trunk.png new file mode 100644 index 00000000..a4d31623 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-reflection.png b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-reflection.png new file mode 100644 index 00000000..98441c25 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/medusa-01/tree-medusa-01-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-leaves.png new file mode 100644 index 00000000..09b81593 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-normal.png new file mode 100644 index 00000000..5d46de6f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-shadow.png new file mode 100644 index 00000000..926e94a4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-trunk.png new file mode 100644 index 00000000..bf4b71ea Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-leaves.png new file mode 100644 index 00000000..62462ae3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-normal.png new file mode 100644 index 00000000..56089faa Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-shadow.png new file mode 100644 index 00000000..345147b5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-trunk.png new file mode 100644 index 00000000..2bd28f61 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-leaves.png new file mode 100644 index 00000000..a71b8d7f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-normal.png new file mode 100644 index 00000000..264ca079 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-shadow.png new file mode 100644 index 00000000..27a201d0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-trunk.png new file mode 100644 index 00000000..d2e39b18 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-leaves.png new file mode 100644 index 00000000..eab106e7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-normal.png new file mode 100644 index 00000000..831c6819 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-shadow.png new file mode 100644 index 00000000..2c1cfcd2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-trunk.png new file mode 100644 index 00000000..c69527f5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-leaves.png new file mode 100644 index 00000000..99b51a87 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-normal.png new file mode 100644 index 00000000..e811da96 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-shadow.png new file mode 100644 index 00000000..ae8fda50 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-trunk.png new file mode 100644 index 00000000..10c5810f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-leaves.png new file mode 100644 index 00000000..32c1023e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-normal.png new file mode 100644 index 00000000..1d94810c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-shadow.png new file mode 100644 index 00000000..993e0daf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-trunk.png new file mode 100644 index 00000000..f1cd610c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-leaves.png new file mode 100644 index 00000000..17202fd7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-normal.png new file mode 100644 index 00000000..357e7e95 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-shadow.png new file mode 100644 index 00000000..0f0cf8e7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-trunk.png new file mode 100644 index 00000000..d60fae6f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-leaves.png new file mode 100644 index 00000000..651a983e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-normal.png new file mode 100644 index 00000000..d3c3c632 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-shadow.png new file mode 100644 index 00000000..f6ea617d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-trunk.png new file mode 100644 index 00000000..a1168cf8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-leaves.png new file mode 100644 index 00000000..ac81db2e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-normal.png new file mode 100644 index 00000000..4085ce4c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-shadow.png new file mode 100644 index 00000000..557b2f71 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-trunk.png new file mode 100644 index 00000000..5cd04316 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-leaves.png new file mode 100644 index 00000000..cc258f1d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-normal.png new file mode 100644 index 00000000..7520f549 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-shadow.png new file mode 100644 index 00000000..c97a9cb4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-trunk.png new file mode 100644 index 00000000..da9cb204 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-leaves.png new file mode 100644 index 00000000..33eb3672 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-normal.png new file mode 100644 index 00000000..13795e9c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-shadow.png new file mode 100644 index 00000000..2c0e0846 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-trunk.png new file mode 100644 index 00000000..4cf996d7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-leaves.png new file mode 100644 index 00000000..83ac79a8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-normal.png new file mode 100644 index 00000000..6ea26052 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-shadow.png new file mode 100644 index 00000000..b82ba381 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-trunk.png new file mode 100644 index 00000000..ec4a2d17 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-leaves.png new file mode 100644 index 00000000..3c140ac1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-normal.png new file mode 100644 index 00000000..79fe7e03 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-shadow.png new file mode 100644 index 00000000..dc6848ad Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-trunk.png new file mode 100644 index 00000000..fd88e13d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-leaves.png new file mode 100644 index 00000000..4e383c61 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-normal.png new file mode 100644 index 00000000..d760b6f8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-shadow.png new file mode 100644 index 00000000..6912bc4e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-trunk.png new file mode 100644 index 00000000..195dfc58 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-leaves.png new file mode 100644 index 00000000..1d7ca4c4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-normal.png new file mode 100644 index 00000000..c5af3fda Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-shadow.png new file mode 100644 index 00000000..f76e661c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-trunk.png new file mode 100644 index 00000000..ef555460 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-leaves.png new file mode 100644 index 00000000..ff790f17 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-normal.png new file mode 100644 index 00000000..4b0b3743 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-shadow.png new file mode 100644 index 00000000..a18be65c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-trunk.png new file mode 100644 index 00000000..f2b9e801 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-leaves.png new file mode 100644 index 00000000..5b6ab16d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-normal.png new file mode 100644 index 00000000..82842d64 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-shadow.png new file mode 100644 index 00000000..be272cc2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-trunk.png new file mode 100644 index 00000000..7b6f0e65 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-leaves.png new file mode 100644 index 00000000..96af30a1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-normal.png new file mode 100644 index 00000000..00ab86de Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-shadow.png new file mode 100644 index 00000000..6974f8f6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-trunk.png new file mode 100644 index 00000000..decc9691 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-leaves.png new file mode 100644 index 00000000..e75835db Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-normal.png new file mode 100644 index 00000000..a22899c0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-shadow.png new file mode 100644 index 00000000..352ad9e5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-trunk.png new file mode 100644 index 00000000..ef6bf33f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-leaves.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-leaves.png new file mode 100644 index 00000000..5f797da5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-normal.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-normal.png new file mode 100644 index 00000000..042dffef Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-shadow.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-shadow.png new file mode 100644 index 00000000..e83ad302 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-trunk.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-trunk.png new file mode 100644 index 00000000..1163ac3d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-j-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-reflection.png b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-reflection.png new file mode 100644 index 00000000..291b7079 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/oaktapus/tree-oaktapus-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-leaves.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-leaves.png new file mode 100644 index 00000000..291eea2e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-normal.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-normal.png new file mode 100644 index 00000000..111f52f6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-shadow.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-shadow.png new file mode 100644 index 00000000..f25e2a69 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-trunk.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-trunk.png new file mode 100644 index 00000000..b02f98ff Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-leaves.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-leaves.png new file mode 100644 index 00000000..d6b0cd5f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-normal.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-normal.png new file mode 100644 index 00000000..0a66cf96 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-shadow.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-shadow.png new file mode 100644 index 00000000..e12dbdb3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-trunk.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-trunk.png new file mode 100644 index 00000000..cf099f04 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-leaves.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-leaves.png new file mode 100644 index 00000000..cd89e88f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-normal.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-normal.png new file mode 100644 index 00000000..df708d7e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-shadow.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-shadow.png new file mode 100644 index 00000000..7b0f5020 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-trunk.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-trunk.png new file mode 100644 index 00000000..27211165 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-leaves.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-leaves.png new file mode 100644 index 00000000..e64ef5f2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-normal.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-normal.png new file mode 100644 index 00000000..c558d605 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-shadow.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-shadow.png new file mode 100644 index 00000000..d47fad25 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-trunk.png b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-trunk.png new file mode 100644 index 00000000..dc284ecf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/hr-tree-palm-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-a-leaves.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-leaves.png new file mode 100644 index 00000000..8ed409b0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-a-normal.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-normal.png new file mode 100644 index 00000000..c9e1566a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-a-shadow.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-shadow.png new file mode 100644 index 00000000..6239fcb3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-a-trunk.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-trunk.png new file mode 100644 index 00000000..e748de7a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-b-leaves.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-leaves.png new file mode 100644 index 00000000..422357fb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-b-normal.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-normal.png new file mode 100644 index 00000000..be08c3b9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-b-shadow.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-shadow.png new file mode 100644 index 00000000..e6d3a196 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-b-trunk.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-trunk.png new file mode 100644 index 00000000..364dbec9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-c-leaves.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-leaves.png new file mode 100644 index 00000000..f82790a0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-c-normal.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-normal.png new file mode 100644 index 00000000..3960ecba Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-c-shadow.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-shadow.png new file mode 100644 index 00000000..5e179cbf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-c-trunk.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-trunk.png new file mode 100644 index 00000000..d3f71897 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-d-leaves.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-leaves.png new file mode 100644 index 00000000..e577ec4c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-d-normal.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-normal.png new file mode 100644 index 00000000..6cc95d15 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-d-shadow.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-shadow.png new file mode 100644 index 00000000..f1433e03 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-d-trunk.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-trunk.png new file mode 100644 index 00000000..d5cb3ac2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/palm/tree-palm-reflection.png b/alien-biomes/graphics/entity/tree/palm/tree-palm-reflection.png new file mode 100644 index 00000000..87f41908 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/palm/tree-palm-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-leaves.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-leaves.png new file mode 100644 index 00000000..7fe59847 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-normal.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-normal.png new file mode 100644 index 00000000..89785e87 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-shadow.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-shadow.png new file mode 100644 index 00000000..34cc13a9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-trunk.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-trunk.png new file mode 100644 index 00000000..13974ade Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-leaves.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-leaves.png new file mode 100644 index 00000000..d46fd69b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-normal.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-normal.png new file mode 100644 index 00000000..606f77de Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-shadow.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-shadow.png new file mode 100644 index 00000000..59b2a0a4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-trunk.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-trunk.png new file mode 100644 index 00000000..8325a8a8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-leaves.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-leaves.png new file mode 100644 index 00000000..59f663a9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-normal.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-normal.png new file mode 100644 index 00000000..5f014ce2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-shadow.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-shadow.png new file mode 100644 index 00000000..aec0e9cd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-trunk.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-trunk.png new file mode 100644 index 00000000..1f6615da Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-leaves.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-leaves.png new file mode 100644 index 00000000..f5e7408d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-normal.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-normal.png new file mode 100644 index 00000000..c53c8d86 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-shadow.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-shadow.png new file mode 100644 index 00000000..89b9503e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-trunk.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-trunk.png new file mode 100644 index 00000000..c14d4b54 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-leaves.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-leaves.png new file mode 100644 index 00000000..98929766 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-normal.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-normal.png new file mode 100644 index 00000000..ef753aca Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-shadow.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-shadow.png new file mode 100644 index 00000000..7c6f8eec Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-trunk.png b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-trunk.png new file mode 100644 index 00000000..57f1c6b2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/hr-tree-pear-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-a-leaves.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-leaves.png new file mode 100644 index 00000000..cdbb7688 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-a-normal.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-normal.png new file mode 100644 index 00000000..e688c6bb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-a-shadow.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-shadow.png new file mode 100644 index 00000000..7ca16d27 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-a-trunk.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-trunk.png new file mode 100644 index 00000000..91e8e19e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-b-leaves.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-leaves.png new file mode 100644 index 00000000..f216b43e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-b-normal.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-normal.png new file mode 100644 index 00000000..b5c6179d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-b-shadow.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-shadow.png new file mode 100644 index 00000000..af4729cf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-b-trunk.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-trunk.png new file mode 100644 index 00000000..66225d54 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-c-leaves.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-leaves.png new file mode 100644 index 00000000..24a6e21f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-c-normal.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-normal.png new file mode 100644 index 00000000..89211987 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-c-shadow.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-shadow.png new file mode 100644 index 00000000..85795276 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-c-trunk.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-trunk.png new file mode 100644 index 00000000..c2198d56 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-d-leaves.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-leaves.png new file mode 100644 index 00000000..de20f7cb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-d-normal.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-normal.png new file mode 100644 index 00000000..3d8dd1bb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-d-shadow.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-shadow.png new file mode 100644 index 00000000..3d3daf90 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-d-trunk.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-trunk.png new file mode 100644 index 00000000..1ed878a4 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-e-leaves.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-leaves.png new file mode 100644 index 00000000..cd520b37 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-e-normal.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-normal.png new file mode 100644 index 00000000..e9af0840 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-e-shadow.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-shadow.png new file mode 100644 index 00000000..fe763cb1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-e-trunk.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-trunk.png new file mode 100644 index 00000000..80ce8276 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/pear/tree-pear-reflection.png b/alien-biomes/graphics/entity/tree/pear/tree-pear-reflection.png new file mode 100644 index 00000000..12a95159 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/pear/tree-pear-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-leaves.png new file mode 100644 index 00000000..6105151a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-normal.png new file mode 100644 index 00000000..5e1d908d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-shadow.png new file mode 100644 index 00000000..658a21de Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-trunk.png new file mode 100644 index 00000000..c56237dc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-leaves.png new file mode 100644 index 00000000..5aaa2764 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-normal.png new file mode 100644 index 00000000..6016b9a7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-shadow.png new file mode 100644 index 00000000..1d66427b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-trunk.png new file mode 100644 index 00000000..d12a5b1f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-leaves.png new file mode 100644 index 00000000..cdac104b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-normal.png new file mode 100644 index 00000000..a2fc7d59 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-shadow.png new file mode 100644 index 00000000..d838950f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-trunk.png new file mode 100644 index 00000000..844abad1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-leaves.png new file mode 100644 index 00000000..f44f8064 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-normal.png new file mode 100644 index 00000000..1eedc51f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-shadow.png new file mode 100644 index 00000000..ab0b68d0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-trunk.png new file mode 100644 index 00000000..e0cfb0c8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-leaves.png new file mode 100644 index 00000000..d65885ab Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-normal.png new file mode 100644 index 00000000..f5199a15 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-shadow.png new file mode 100644 index 00000000..e6209132 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-trunk.png new file mode 100644 index 00000000..18c1cf6f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-leaves.png new file mode 100644 index 00000000..6a578cbb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-normal.png new file mode 100644 index 00000000..3960591c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-shadow.png new file mode 100644 index 00000000..bacbf0ad Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-trunk.png new file mode 100644 index 00000000..3a28c063 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-leaves.png new file mode 100644 index 00000000..7cbc2279 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-normal.png new file mode 100644 index 00000000..a7fb461c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-shadow.png new file mode 100644 index 00000000..00f8fbc2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-trunk.png new file mode 100644 index 00000000..51d9e42e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-leaves.png new file mode 100644 index 00000000..0528704f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-normal.png new file mode 100644 index 00000000..97ab9806 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-shadow.png new file mode 100644 index 00000000..6f8478f0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-trunk.png new file mode 100644 index 00000000..de08524f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-leaves.png new file mode 100644 index 00000000..484dc789 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-normal.png new file mode 100644 index 00000000..6597e5de Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-shadow.png new file mode 100644 index 00000000..41b6d795 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-trunk.png new file mode 100644 index 00000000..024e52fc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-leaves.png new file mode 100644 index 00000000..3093a436 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-normal.png new file mode 100644 index 00000000..c5ef2144 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-shadow.png new file mode 100644 index 00000000..f67bc9a9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-trunk.png new file mode 100644 index 00000000..4b221be9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-leaves.png new file mode 100644 index 00000000..861d5245 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-normal.png new file mode 100644 index 00000000..79db8cb7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-shadow.png new file mode 100644 index 00000000..5fc9c272 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-trunk.png new file mode 100644 index 00000000..54f50984 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-leaves.png new file mode 100644 index 00000000..8b3263a6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-normal.png new file mode 100644 index 00000000..a31de219 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-shadow.png new file mode 100644 index 00000000..c7061b59 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-trunk.png new file mode 100644 index 00000000..eed4a726 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-leaves.png new file mode 100644 index 00000000..36c07b58 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-normal.png new file mode 100644 index 00000000..d3759f09 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-shadow.png new file mode 100644 index 00000000..8960044a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-trunk.png new file mode 100644 index 00000000..084eb60f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-leaves.png new file mode 100644 index 00000000..7df21776 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-normal.png new file mode 100644 index 00000000..126269c7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-shadow.png new file mode 100644 index 00000000..533ba7d3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-trunk.png new file mode 100644 index 00000000..cdbb5c3e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-leaves.png new file mode 100644 index 00000000..793e4d73 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-normal.png new file mode 100644 index 00000000..b880be41 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-shadow.png new file mode 100644 index 00000000..f32ade4b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-trunk.png new file mode 100644 index 00000000..f24106bc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-leaves.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-leaves.png new file mode 100644 index 00000000..0ca041af Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-normal.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-normal.png new file mode 100644 index 00000000..8881f5b2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-shadow.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-shadow.png new file mode 100644 index 00000000..feb2518a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-trunk.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-trunk.png new file mode 100644 index 00000000..9b4ca5f2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-reflection.png b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-reflection.png new file mode 100644 index 00000000..d6c0a44d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/scarecrow/tree-scarecrow-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-leaves.png new file mode 100644 index 00000000..833f25d0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-normal.png new file mode 100644 index 00000000..e86c97fe Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-shadow.png new file mode 100644 index 00000000..4649e9a3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-trunk.png new file mode 100644 index 00000000..bbc6aecd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-leaves.png new file mode 100644 index 00000000..a815c651 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-normal.png new file mode 100644 index 00000000..cb9007ed Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-shadow.png new file mode 100644 index 00000000..9c66a97d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-trunk.png new file mode 100644 index 00000000..348aaba0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-leaves.png new file mode 100644 index 00000000..5c60ffed Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-normal.png new file mode 100644 index 00000000..defb1c32 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-shadow.png new file mode 100644 index 00000000..6528d1d9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-trunk.png new file mode 100644 index 00000000..10f6b23d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-leaves.png new file mode 100644 index 00000000..bfd8bf03 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-normal.png new file mode 100644 index 00000000..15f33fef Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-shadow.png new file mode 100644 index 00000000..a10b85a3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-trunk.png new file mode 100644 index 00000000..4fa3f943 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-leaves.png new file mode 100644 index 00000000..9832b521 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-normal.png new file mode 100644 index 00000000..6c368d51 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-shadow.png new file mode 100644 index 00000000..7a0e1081 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-trunk.png new file mode 100644 index 00000000..f9947511 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-leaves.png new file mode 100644 index 00000000..f703da1c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-normal.png new file mode 100644 index 00000000..4de96d4b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-shadow.png new file mode 100644 index 00000000..e0b9de1f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-trunk.png new file mode 100644 index 00000000..4d6af03a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-leaves.png new file mode 100644 index 00000000..14397180 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-normal.png new file mode 100644 index 00000000..2e88054c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-shadow.png new file mode 100644 index 00000000..5889b009 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-trunk.png new file mode 100644 index 00000000..428e25f9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-leaves.png new file mode 100644 index 00000000..1ab0785f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-normal.png new file mode 100644 index 00000000..bf0154c3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-shadow.png new file mode 100644 index 00000000..e3774827 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-trunk.png new file mode 100644 index 00000000..ff72800e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-leaves.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-leaves.png new file mode 100644 index 00000000..fe03b6c0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-normal.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-normal.png new file mode 100644 index 00000000..c9c24cea Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-shadow.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-shadow.png new file mode 100644 index 00000000..774b9fb8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-trunk.png b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-trunk.png new file mode 100644 index 00000000..ce7cb1fb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/hr-tree-specter-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-a-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-leaves.png new file mode 100644 index 00000000..30cf7915 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-a-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-normal.png new file mode 100644 index 00000000..343f8d5e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-a-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-shadow.png new file mode 100644 index 00000000..c973b904 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-a-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-trunk.png new file mode 100644 index 00000000..9fce360e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-b-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-leaves.png new file mode 100644 index 00000000..80ffc587 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-b-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-normal.png new file mode 100644 index 00000000..34a3bd3a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-b-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-shadow.png new file mode 100644 index 00000000..40639e94 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-b-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-trunk.png new file mode 100644 index 00000000..a6b3eda9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-c-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-leaves.png new file mode 100644 index 00000000..767f1d92 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-c-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-normal.png new file mode 100644 index 00000000..42b69fe1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-c-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-shadow.png new file mode 100644 index 00000000..ab027de2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-c-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-trunk.png new file mode 100644 index 00000000..19f47985 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-d-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-leaves.png new file mode 100644 index 00000000..8088facd Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-d-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-normal.png new file mode 100644 index 00000000..0c32165c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-d-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-shadow.png new file mode 100644 index 00000000..35a26303 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-d-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-trunk.png new file mode 100644 index 00000000..4206fdcc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-e-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-leaves.png new file mode 100644 index 00000000..aa081dd5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-e-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-normal.png new file mode 100644 index 00000000..1a61121e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-e-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-shadow.png new file mode 100644 index 00000000..d4dc2bef Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-e-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-trunk.png new file mode 100644 index 00000000..66a9d1f0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-f-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-leaves.png new file mode 100644 index 00000000..524d608b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-f-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-normal.png new file mode 100644 index 00000000..3e9f5e0b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-f-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-shadow.png new file mode 100644 index 00000000..2b1552dc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-f-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-trunk.png new file mode 100644 index 00000000..97a74cfe Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-g-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-leaves.png new file mode 100644 index 00000000..4441e87b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-g-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-normal.png new file mode 100644 index 00000000..4ac92b32 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-g-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-shadow.png new file mode 100644 index 00000000..3e7a50d2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-g-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-trunk.png new file mode 100644 index 00000000..adb83d7f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-h-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-leaves.png new file mode 100644 index 00000000..bb6a274f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-h-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-normal.png new file mode 100644 index 00000000..495c6900 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-h-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-shadow.png new file mode 100644 index 00000000..05820063 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-h-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-trunk.png new file mode 100644 index 00000000..6f3fbb24 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-i-leaves.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-leaves.png new file mode 100644 index 00000000..c2cb91e7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-i-normal.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-normal.png new file mode 100644 index 00000000..49aa2eae Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-i-shadow.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-shadow.png new file mode 100644 index 00000000..d242bd92 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-i-trunk.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-trunk.png new file mode 100644 index 00000000..e2f0bac7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/specter/tree-specter-reflection.png b/alien-biomes/graphics/entity/tree/specter/tree-specter-reflection.png new file mode 100644 index 00000000..acb73661 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/specter/tree-specter-reflection.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-leaves.png new file mode 100644 index 00000000..7e3fc889 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-normal.png new file mode 100644 index 00000000..db6f5b72 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-shadow.png new file mode 100644 index 00000000..532eaac1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-trunk.png new file mode 100644 index 00000000..1763b89f Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-leaves.png new file mode 100644 index 00000000..f753df83 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-normal.png new file mode 100644 index 00000000..c9f69965 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-shadow.png new file mode 100644 index 00000000..058b31d9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-trunk.png new file mode 100644 index 00000000..11cddf6a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-leaves.png new file mode 100644 index 00000000..de48d58e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-normal.png new file mode 100644 index 00000000..528d1d17 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-shadow.png new file mode 100644 index 00000000..44962056 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-trunk.png new file mode 100644 index 00000000..74159bb7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-leaves.png new file mode 100644 index 00000000..bff2a21a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-normal.png new file mode 100644 index 00000000..597091bf Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-shadow.png new file mode 100644 index 00000000..28b93e2c Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-trunk.png new file mode 100644 index 00000000..a0420f4d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-leaves.png new file mode 100644 index 00000000..e2aa2664 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-normal.png new file mode 100644 index 00000000..afa69f42 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-shadow.png new file mode 100644 index 00000000..ac3cfe46 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-trunk.png new file mode 100644 index 00000000..ff07dfda Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-leaves.png new file mode 100644 index 00000000..e4709dc6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-normal.png new file mode 100644 index 00000000..77f6b5ab Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-shadow.png new file mode 100644 index 00000000..a5c35cd3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-trunk.png new file mode 100644 index 00000000..736b669e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-leaves.png new file mode 100644 index 00000000..6f36d50d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-normal.png new file mode 100644 index 00000000..c0b05119 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-shadow.png new file mode 100644 index 00000000..8a858a88 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-trunk.png new file mode 100644 index 00000000..27f65ccb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-leaves.png new file mode 100644 index 00000000..ff783542 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-normal.png new file mode 100644 index 00000000..a5c5a79e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-shadow.png new file mode 100644 index 00000000..7e80a48d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-trunk.png new file mode 100644 index 00000000..4c5ee193 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-leaves.png new file mode 100644 index 00000000..7d293981 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-normal.png new file mode 100644 index 00000000..33e07206 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-shadow.png new file mode 100644 index 00000000..54b2fd05 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-trunk.png new file mode 100644 index 00000000..cf71f9cb Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-leaves.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-leaves.png new file mode 100644 index 00000000..8852ec50 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-normal.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-normal.png new file mode 100644 index 00000000..81b73243 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-shadow.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-shadow.png new file mode 100644 index 00000000..11d2745d Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-trunk.png b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-trunk.png new file mode 100644 index 00000000..6428aed7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/hr-tree-willow-j-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-a-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-leaves.png new file mode 100644 index 00000000..f0971af9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-a-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-normal.png new file mode 100644 index 00000000..3dca1a78 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-a-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-shadow.png new file mode 100644 index 00000000..12f63b32 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-a-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-trunk.png new file mode 100644 index 00000000..104e3163 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-a-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-b-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-leaves.png new file mode 100644 index 00000000..173903ee Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-b-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-normal.png new file mode 100644 index 00000000..d9e159b7 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-b-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-shadow.png new file mode 100644 index 00000000..9b699f6b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-b-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-trunk.png new file mode 100644 index 00000000..cc7f283b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-b-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-c-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-leaves.png new file mode 100644 index 00000000..0cbcf3e6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-c-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-normal.png new file mode 100644 index 00000000..f6dd1f0a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-c-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-shadow.png new file mode 100644 index 00000000..be3625e6 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-c-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-trunk.png new file mode 100644 index 00000000..05700e95 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-c-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-d-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-leaves.png new file mode 100644 index 00000000..7516d645 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-d-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-normal.png new file mode 100644 index 00000000..24ce7ad3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-d-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-shadow.png new file mode 100644 index 00000000..a911cd35 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-d-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-trunk.png new file mode 100644 index 00000000..50e02881 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-d-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-e-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-leaves.png new file mode 100644 index 00000000..de7af5ec Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-e-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-normal.png new file mode 100644 index 00000000..74b31c37 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-e-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-shadow.png new file mode 100644 index 00000000..90f70abc Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-e-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-trunk.png new file mode 100644 index 00000000..cad04435 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-e-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-f-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-leaves.png new file mode 100644 index 00000000..284bbe22 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-f-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-normal.png new file mode 100644 index 00000000..103111d5 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-f-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-shadow.png new file mode 100644 index 00000000..6f2d6a43 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-f-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-trunk.png new file mode 100644 index 00000000..ee91ce06 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-f-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-g-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-leaves.png new file mode 100644 index 00000000..00ba39f9 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-g-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-normal.png new file mode 100644 index 00000000..2be4fe9e Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-g-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-shadow.png new file mode 100644 index 00000000..b6b2c5c1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-g-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-trunk.png new file mode 100644 index 00000000..75e1ec54 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-g-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-h-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-leaves.png new file mode 100644 index 00000000..2fb5f9d0 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-h-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-normal.png new file mode 100644 index 00000000..cb98f7a8 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-h-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-shadow.png new file mode 100644 index 00000000..57633b52 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-h-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-trunk.png new file mode 100644 index 00000000..ab4d37c3 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-h-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-i-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-leaves.png new file mode 100644 index 00000000..30cb4418 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-i-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-normal.png new file mode 100644 index 00000000..cc208b5b Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-i-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-shadow.png new file mode 100644 index 00000000..f00f6912 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-i-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-trunk.png new file mode 100644 index 00000000..1d0ebe45 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-i-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-j-leaves.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-leaves.png new file mode 100644 index 00000000..546ea6d2 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-leaves.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-j-normal.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-normal.png new file mode 100644 index 00000000..fa9be18a Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-normal.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-j-shadow.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-shadow.png new file mode 100644 index 00000000..c0eef6e1 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-shadow.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-j-trunk.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-trunk.png new file mode 100644 index 00000000..7011de66 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-j-trunk.png differ diff --git a/alien-biomes/graphics/entity/tree/willow/tree-willow-reflection.png b/alien-biomes/graphics/entity/tree/willow/tree-willow-reflection.png new file mode 100644 index 00000000..9fc80941 Binary files /dev/null and b/alien-biomes/graphics/entity/tree/willow/tree-willow-reflection.png differ diff --git a/alien-biomes/graphics/icons/tree-01-leaves.png b/alien-biomes/graphics/icons/tree-01-leaves.png new file mode 100644 index 00000000..e7fec2bd Binary files /dev/null and b/alien-biomes/graphics/icons/tree-01-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-01-trunk.png b/alien-biomes/graphics/icons/tree-01-trunk.png new file mode 100644 index 00000000..f3ee8a34 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-01-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-02-leaves.png b/alien-biomes/graphics/icons/tree-02-leaves.png new file mode 100644 index 00000000..b8a51c22 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-02-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-02-trunk.png b/alien-biomes/graphics/icons/tree-02-trunk.png new file mode 100644 index 00000000..bfaf0bca Binary files /dev/null and b/alien-biomes/graphics/icons/tree-02-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-03-leaves.png b/alien-biomes/graphics/icons/tree-03-leaves.png new file mode 100644 index 00000000..ebb90266 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-03-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-03-trunk.png b/alien-biomes/graphics/icons/tree-03-trunk.png new file mode 100644 index 00000000..7ff716de Binary files /dev/null and b/alien-biomes/graphics/icons/tree-03-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-04-leaves.png b/alien-biomes/graphics/icons/tree-04-leaves.png new file mode 100644 index 00000000..431a276d Binary files /dev/null and b/alien-biomes/graphics/icons/tree-04-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-04-trunk.png b/alien-biomes/graphics/icons/tree-04-trunk.png new file mode 100644 index 00000000..1cdf0ec3 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-04-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-05-leaves.png b/alien-biomes/graphics/icons/tree-05-leaves.png new file mode 100644 index 00000000..6052923a Binary files /dev/null and b/alien-biomes/graphics/icons/tree-05-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-05-trunk.png b/alien-biomes/graphics/icons/tree-05-trunk.png new file mode 100644 index 00000000..2f20cf63 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-05-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-06-leaves.png b/alien-biomes/graphics/icons/tree-06-leaves.png new file mode 100644 index 00000000..1f34ef12 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-06-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-06-trunk.png b/alien-biomes/graphics/icons/tree-06-trunk.png new file mode 100644 index 00000000..7af01568 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-06-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-07-leaves.png b/alien-biomes/graphics/icons/tree-07-leaves.png new file mode 100644 index 00000000..198dc9af Binary files /dev/null and b/alien-biomes/graphics/icons/tree-07-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-07-trunk.png b/alien-biomes/graphics/icons/tree-07-trunk.png new file mode 100644 index 00000000..da6aec6f Binary files /dev/null and b/alien-biomes/graphics/icons/tree-07-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-08-leaves.png b/alien-biomes/graphics/icons/tree-08-leaves.png new file mode 100644 index 00000000..720fa5ec Binary files /dev/null and b/alien-biomes/graphics/icons/tree-08-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-08-trunk.png b/alien-biomes/graphics/icons/tree-08-trunk.png new file mode 100644 index 00000000..afaf08be Binary files /dev/null and b/alien-biomes/graphics/icons/tree-08-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-09-leaves.png b/alien-biomes/graphics/icons/tree-09-leaves.png new file mode 100644 index 00000000..83bae569 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-09-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-09-trunk.png b/alien-biomes/graphics/icons/tree-09-trunk.png new file mode 100644 index 00000000..94ec066e Binary files /dev/null and b/alien-biomes/graphics/icons/tree-09-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-ash-leaves.png b/alien-biomes/graphics/icons/tree-ash-leaves.png new file mode 100644 index 00000000..a7dd3c14 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-ash-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-ash-stump.png b/alien-biomes/graphics/icons/tree-ash-stump.png new file mode 100644 index 00000000..75e5bf2d Binary files /dev/null and b/alien-biomes/graphics/icons/tree-ash-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-ash-trunk.png b/alien-biomes/graphics/icons/tree-ash-trunk.png new file mode 100644 index 00000000..49df37a6 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-ash-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-baobab-leaves.png b/alien-biomes/graphics/icons/tree-baobab-leaves.png new file mode 100644 index 00000000..fbc36e40 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-baobab-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-baobab-stump.png b/alien-biomes/graphics/icons/tree-baobab-stump.png new file mode 100644 index 00000000..e9cb4f56 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-baobab-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-baobab-trunk.png b/alien-biomes/graphics/icons/tree-baobab-trunk.png new file mode 100644 index 00000000..adef95e5 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-baobab-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-conifer-01-leaves.png b/alien-biomes/graphics/icons/tree-conifer-01-leaves.png new file mode 100644 index 00000000..0c6cc93b Binary files /dev/null and b/alien-biomes/graphics/icons/tree-conifer-01-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-conifer-01-trunk.png b/alien-biomes/graphics/icons/tree-conifer-01-trunk.png new file mode 100644 index 00000000..7486061d Binary files /dev/null and b/alien-biomes/graphics/icons/tree-conifer-01-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-greypine-leaves.png b/alien-biomes/graphics/icons/tree-greypine-leaves.png new file mode 100644 index 00000000..b780069c Binary files /dev/null and b/alien-biomes/graphics/icons/tree-greypine-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-greypine-stump.png b/alien-biomes/graphics/icons/tree-greypine-stump.png new file mode 100644 index 00000000..03e0b510 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-greypine-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-greypine-trunk.png b/alien-biomes/graphics/icons/tree-greypine-trunk.png new file mode 100644 index 00000000..5977f01e Binary files /dev/null and b/alien-biomes/graphics/icons/tree-greypine-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-mangrove-leaves.png b/alien-biomes/graphics/icons/tree-mangrove-leaves.png new file mode 100644 index 00000000..92a8630d Binary files /dev/null and b/alien-biomes/graphics/icons/tree-mangrove-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-mangrove-stump.png b/alien-biomes/graphics/icons/tree-mangrove-stump.png new file mode 100644 index 00000000..2ce83e01 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-mangrove-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-mangrove-trunk.png b/alien-biomes/graphics/icons/tree-mangrove-trunk.png new file mode 100644 index 00000000..e8904da5 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-mangrove-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-medusa-01-leaves.png b/alien-biomes/graphics/icons/tree-medusa-01-leaves.png new file mode 100644 index 00000000..27bf213b Binary files /dev/null and b/alien-biomes/graphics/icons/tree-medusa-01-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-medusa-01-trunk.png b/alien-biomes/graphics/icons/tree-medusa-01-trunk.png new file mode 100644 index 00000000..5e342702 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-medusa-01-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-oaktapus-leaves.png b/alien-biomes/graphics/icons/tree-oaktapus-leaves.png new file mode 100644 index 00000000..7ef6d929 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-oaktapus-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-oaktapus-stump.png b/alien-biomes/graphics/icons/tree-oaktapus-stump.png new file mode 100644 index 00000000..812b4e56 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-oaktapus-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-oaktapus-trunk.png b/alien-biomes/graphics/icons/tree-oaktapus-trunk.png new file mode 100644 index 00000000..e77cc4ce Binary files /dev/null and b/alien-biomes/graphics/icons/tree-oaktapus-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-palm-leaves.png b/alien-biomes/graphics/icons/tree-palm-leaves.png new file mode 100644 index 00000000..75a3ef75 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-palm-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-palm-trunk.png b/alien-biomes/graphics/icons/tree-palm-trunk.png new file mode 100644 index 00000000..b0d67735 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-palm-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-pear-leaves.png b/alien-biomes/graphics/icons/tree-pear-leaves.png new file mode 100644 index 00000000..138fb8fb Binary files /dev/null and b/alien-biomes/graphics/icons/tree-pear-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-pear-stump.png b/alien-biomes/graphics/icons/tree-pear-stump.png new file mode 100644 index 00000000..afbb8e88 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-pear-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-pear-trunk.png b/alien-biomes/graphics/icons/tree-pear-trunk.png new file mode 100644 index 00000000..cd88a65b Binary files /dev/null and b/alien-biomes/graphics/icons/tree-pear-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-scarecrow-leaves.png b/alien-biomes/graphics/icons/tree-scarecrow-leaves.png new file mode 100644 index 00000000..e5bdd199 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-scarecrow-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-scarecrow-stump.png b/alien-biomes/graphics/icons/tree-scarecrow-stump.png new file mode 100644 index 00000000..2ec9e47c Binary files /dev/null and b/alien-biomes/graphics/icons/tree-scarecrow-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-scarecrow-trunk.png b/alien-biomes/graphics/icons/tree-scarecrow-trunk.png new file mode 100644 index 00000000..897baa0f Binary files /dev/null and b/alien-biomes/graphics/icons/tree-scarecrow-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-specter-leaves.png b/alien-biomes/graphics/icons/tree-specter-leaves.png new file mode 100644 index 00000000..85181a4c Binary files /dev/null and b/alien-biomes/graphics/icons/tree-specter-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-specter-stump.png b/alien-biomes/graphics/icons/tree-specter-stump.png new file mode 100644 index 00000000..276a8eab Binary files /dev/null and b/alien-biomes/graphics/icons/tree-specter-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-specter-trunk.png b/alien-biomes/graphics/icons/tree-specter-trunk.png new file mode 100644 index 00000000..76454899 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-specter-trunk.png differ diff --git a/alien-biomes/graphics/icons/tree-willow-leaves.png b/alien-biomes/graphics/icons/tree-willow-leaves.png new file mode 100644 index 00000000..0eb51dc3 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-willow-leaves.png differ diff --git a/alien-biomes/graphics/icons/tree-willow-stump.png b/alien-biomes/graphics/icons/tree-willow-stump.png new file mode 100644 index 00000000..c769c07b Binary files /dev/null and b/alien-biomes/graphics/icons/tree-willow-stump.png differ diff --git a/alien-biomes/graphics/icons/tree-willow-trunk.png b/alien-biomes/graphics/icons/tree-willow-trunk.png new file mode 100644 index 00000000..3cf8b6c7 Binary files /dev/null and b/alien-biomes/graphics/icons/tree-willow-trunk.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-entrance-shadow.png b/alien-biomes/graphics/terrain/cliffs/cliff-entrance-shadow.png new file mode 100644 index 00000000..da5d3a78 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-entrance-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-entrance.png b/alien-biomes/graphics/terrain/cliffs/cliff-entrance.png new file mode 100644 index 00000000..96291332 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-entrance.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-inner-shadow.png b/alien-biomes/graphics/terrain/cliffs/cliff-inner-shadow.png new file mode 100644 index 00000000..ddff2ca9 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-inner-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-inner.png b/alien-biomes/graphics/terrain/cliffs/cliff-inner.png new file mode 100644 index 00000000..7ca74dba Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-inner.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-outer-shadow.png b/alien-biomes/graphics/terrain/cliffs/cliff-outer-shadow.png new file mode 100644 index 00000000..d132089b Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-outer-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-outer.png b/alien-biomes/graphics/terrain/cliffs/cliff-outer.png new file mode 100644 index 00000000..14bbb373 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-outer.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-sides-shadow.png b/alien-biomes/graphics/terrain/cliffs/cliff-sides-shadow.png new file mode 100644 index 00000000..1deaaca6 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-sides-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/cliff-sides.png b/alien-biomes/graphics/terrain/cliffs/cliff-sides.png new file mode 100644 index 00000000..33389c43 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/cliff-sides.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance-shadow.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance-shadow.png new file mode 100644 index 00000000..1f83ab4c Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance.png new file mode 100644 index 00000000..7f93c686 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-entrance.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner-shadow.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner-shadow.png new file mode 100644 index 00000000..214a20ff Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner.png new file mode 100644 index 00000000..46b61817 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-inner.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer-shadow.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer-shadow.png new file mode 100644 index 00000000..91e28d23 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer.png new file mode 100644 index 00000000..adf3cc7b Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-outer.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides-shadow.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides-shadow.png new file mode 100644 index 00000000..a69714b2 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides-shadow.png differ diff --git a/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides.png b/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides.png new file mode 100644 index 00000000..ce53f840 Binary files /dev/null and b/alien-biomes/graphics/terrain/cliffs/hr-cliff-sides.png differ diff --git a/alien-biomes/graphics/terrain/hr-landfill.png b/alien-biomes/graphics/terrain/hr-landfill.png new file mode 100644 index 00000000..0fe68cf8 Binary files /dev/null and b/alien-biomes/graphics/terrain/hr-landfill.png differ diff --git a/alien-biomes/graphics/terrain/landfill.png b/alien-biomes/graphics/terrain/landfill.png new file mode 100644 index 00000000..f50810e8 Binary files /dev/null and b/alien-biomes/graphics/terrain/landfill.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-0.png b/alien-biomes/graphics/terrain/sr/frozen-snow-0.png new file mode 100644 index 00000000..47078510 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-0.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-1.png b/alien-biomes/graphics/terrain/sr/frozen-snow-1.png new file mode 100644 index 00000000..2a458d45 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-2.png b/alien-biomes/graphics/terrain/sr/frozen-snow-2.png new file mode 100644 index 00000000..c3017eac Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-3.png b/alien-biomes/graphics/terrain/sr/frozen-snow-3.png new file mode 100644 index 00000000..3013a30f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-4.png b/alien-biomes/graphics/terrain/sr/frozen-snow-4.png new file mode 100644 index 00000000..931cf473 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-5.png b/alien-biomes/graphics/terrain/sr/frozen-snow-5.png new file mode 100644 index 00000000..0dc4d8cc Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-6.png b/alien-biomes/graphics/terrain/sr/frozen-snow-6.png new file mode 100644 index 00000000..a08c8485 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-7.png b/alien-biomes/graphics/terrain/sr/frozen-snow-7.png new file mode 100644 index 00000000..a3e4c44f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-7.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-8.png b/alien-biomes/graphics/terrain/sr/frozen-snow-8.png new file mode 100644 index 00000000..46042536 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-8.png differ diff --git a/alien-biomes/graphics/terrain/sr/frozen-snow-9.png b/alien-biomes/graphics/terrain/sr/frozen-snow-9.png new file mode 100644 index 00000000..32f31201 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/frozen-snow-9.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-1.png new file mode 100644 index 00000000..7f9fb082 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-2.png new file mode 100644 index 00000000..6c78b1e5 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-3.png new file mode 100644 index 00000000..54fa9a94 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-4.png new file mode 100644 index 00000000..e665dd46 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-5.png new file mode 100644 index 00000000..30ea24dc Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-6.png new file mode 100644 index 00000000..2ea34486 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-1.png new file mode 100644 index 00000000..58b7d62e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-2.png new file mode 100644 index 00000000..6e9dffb2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-3.png new file mode 100644 index 00000000..367710e0 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-aubergine-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-1.png new file mode 100644 index 00000000..db4e77df Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-2.png new file mode 100644 index 00000000..86967d12 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-3.png new file mode 100644 index 00000000..b2804544 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-4.png new file mode 100644 index 00000000..cc643118 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-5.png new file mode 100644 index 00000000..0f5b0c09 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-6.png new file mode 100644 index 00000000..65a334ce Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-1.png new file mode 100644 index 00000000..564d6fad Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-2.png new file mode 100644 index 00000000..8f8e0603 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-beige-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-3.png new file mode 100644 index 00000000..8a0a77b3 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-beige-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-1.png new file mode 100644 index 00000000..509823db Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-2.png new file mode 100644 index 00000000..caf2b807 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-3.png new file mode 100644 index 00000000..64d6cb6a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-4.png new file mode 100644 index 00000000..0e35a9e5 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-5.png new file mode 100644 index 00000000..4819c137 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-6.png new file mode 100644 index 00000000..7225f04e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-black-sand-1.png new file mode 100644 index 00000000..cd8905a2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-black-sand-2.png new file mode 100644 index 00000000..b6c2bb84 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-black-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-black-sand-3.png new file mode 100644 index 00000000..e594435a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-black-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-1.png new file mode 100644 index 00000000..b949cb8f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-2.png new file mode 100644 index 00000000..1c56bac8 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-3.png new file mode 100644 index 00000000..04fa5b48 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-4.png new file mode 100644 index 00000000..05391069 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-5.png new file mode 100644 index 00000000..d444dc0a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-6.png new file mode 100644 index 00000000..e8f28982 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-1.png new file mode 100644 index 00000000..856b902c Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-2.png new file mode 100644 index 00000000..ccaf23bd Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-brown-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-3.png new file mode 100644 index 00000000..a5ed691c Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-brown-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-1.png new file mode 100644 index 00000000..34f05881 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-2.png new file mode 100644 index 00000000..efdf14c4 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-3.png new file mode 100644 index 00000000..56bf849f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-4.png new file mode 100644 index 00000000..6d0a85cd Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-5.png new file mode 100644 index 00000000..534589ba Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-6.png new file mode 100644 index 00000000..f586ebab Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-1.png new file mode 100644 index 00000000..99a24892 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-2.png new file mode 100644 index 00000000..1e6b91a8 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-cream-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-3.png new file mode 100644 index 00000000..677ee823 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-cream-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-1.png new file mode 100644 index 00000000..4e888afa Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-2.png new file mode 100644 index 00000000..32cbdd7b Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-3.png new file mode 100644 index 00000000..adfda861 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-4.png new file mode 100644 index 00000000..634a5fc5 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-5.png new file mode 100644 index 00000000..19605b58 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-6.png new file mode 100644 index 00000000..24b6770d Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-1.png new file mode 100644 index 00000000..d7b9fefb Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-2.png new file mode 100644 index 00000000..4b7ac7e7 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-3.png new file mode 100644 index 00000000..03b3693b Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-dustyrose-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-1.png new file mode 100644 index 00000000..27427034 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-2.png new file mode 100644 index 00000000..dbfdbf75 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-3.png new file mode 100644 index 00000000..c4912439 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-4.png new file mode 100644 index 00000000..f47f9923 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-5.png new file mode 100644 index 00000000..1e1c56c8 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-6.png new file mode 100644 index 00000000..93c14d60 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-1.png new file mode 100644 index 00000000..bcb65ab0 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-2.png new file mode 100644 index 00000000..20f9acff Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-grey-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-3.png new file mode 100644 index 00000000..18a5ff17 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-grey-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-1.png new file mode 100644 index 00000000..28e0557f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-2.png new file mode 100644 index 00000000..b0411561 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-3.png new file mode 100644 index 00000000..a256ce09 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-4.png new file mode 100644 index 00000000..762dccf1 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-5.png new file mode 100644 index 00000000..de4f8412 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-6.png new file mode 100644 index 00000000..fdfa6a1a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-1.png new file mode 100644 index 00000000..3225f4a0 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-2.png new file mode 100644 index 00000000..df2a9f40 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-purple-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-3.png new file mode 100644 index 00000000..e572629f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-purple-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-1.png new file mode 100644 index 00000000..b83b9e64 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-2.png new file mode 100644 index 00000000..9e6b6b79 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-3.png new file mode 100644 index 00000000..7a994c4a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-4.png new file mode 100644 index 00000000..fff1da9e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-5.png new file mode 100644 index 00000000..731e48b6 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-6.png new file mode 100644 index 00000000..5016da5d Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-red-sand-1.png new file mode 100644 index 00000000..efa791a1 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-red-sand-2.png new file mode 100644 index 00000000..6a5de4f0 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-red-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-red-sand-3.png new file mode 100644 index 00000000..418a06f2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-red-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-1.png new file mode 100644 index 00000000..c1c2b7f9 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-2.png new file mode 100644 index 00000000..a779433a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-3.png new file mode 100644 index 00000000..5f3dcb0e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-4.png new file mode 100644 index 00000000..dba429d9 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-5.png new file mode 100644 index 00000000..32acecc3 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-6.png new file mode 100644 index 00000000..bc79a67a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-1.png new file mode 100644 index 00000000..c5680acd Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-2.png new file mode 100644 index 00000000..22128e1a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-tan-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-3.png new file mode 100644 index 00000000..7f700336 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-tan-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-1.png new file mode 100644 index 00000000..cc02e222 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-2.png new file mode 100644 index 00000000..4e702f3d Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-3.png new file mode 100644 index 00000000..edf81f99 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-4.png new file mode 100644 index 00000000..a73a6141 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-5.png new file mode 100644 index 00000000..10dcc004 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-6.png new file mode 100644 index 00000000..a1f3567e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-1.png new file mode 100644 index 00000000..824469f1 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-2.png new file mode 100644 index 00000000..ef533f70 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-violet-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-3.png new file mode 100644 index 00000000..b21c3788 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-violet-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-1.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-1.png new file mode 100644 index 00000000..52f58979 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-2.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-2.png new file mode 100644 index 00000000..baa65d76 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-3.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-3.png new file mode 100644 index 00000000..482f0ddc Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-4.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-4.png new file mode 100644 index 00000000..414d04af Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-5.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-5.png new file mode 100644 index 00000000..b27928da Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-5.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-dirt-6.png b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-6.png new file mode 100644 index 00000000..b5821ddc Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-dirt-6.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-sand-1.png b/alien-biomes/graphics/terrain/sr/mineral-white-sand-1.png new file mode 100644 index 00000000..4c1810ce Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-sand-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-sand-2.png b/alien-biomes/graphics/terrain/sr/mineral-white-sand-2.png new file mode 100644 index 00000000..8009431e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-sand-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/mineral-white-sand-3.png b/alien-biomes/graphics/terrain/sr/mineral-white-sand-3.png new file mode 100644 index 00000000..38be9fa9 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/mineral-white-sand-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-1.png new file mode 100644 index 00000000..3cf5568f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-2.png new file mode 100644 index 00000000..0099aa0d Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-blue-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-green-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-1.png new file mode 100644 index 00000000..613f489c Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-green-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-2.png new file mode 100644 index 00000000..8f2e5ed1 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-green-grass-3.png b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-3.png new file mode 100644 index 00000000..805bd2a4 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-green-grass-4.png b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-4.png new file mode 100644 index 00000000..d02c9757 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-green-grass-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-1.png new file mode 100644 index 00000000..7274e197 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-2.png new file mode 100644 index 00000000..1c7a6f3c Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-mauve-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-1.png new file mode 100644 index 00000000..c8b79ad9 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-2.png new file mode 100644 index 00000000..81517523 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-olive-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-1.png new file mode 100644 index 00000000..663a7fa9 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-2.png new file mode 100644 index 00000000..70d3454a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-orange-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-1.png new file mode 100644 index 00000000..3b8b4682 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-2.png new file mode 100644 index 00000000..74030f9a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-purple-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-red-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-red-grass-1.png new file mode 100644 index 00000000..41c0e720 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-red-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-red-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-red-grass-2.png new file mode 100644 index 00000000..075c2ffb Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-red-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-1.png new file mode 100644 index 00000000..9657fd40 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-2.png new file mode 100644 index 00000000..1c62263e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-turquoise-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-1.png new file mode 100644 index 00000000..62a3d11e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-2.png new file mode 100644 index 00000000..8597a95d Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-violet-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-1.png b/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-1.png new file mode 100644 index 00000000..969a9fe4 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-2.png b/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-2.png new file mode 100644 index 00000000..17994c30 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/vegetation-yellow-grass-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-1.png b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-1.png new file mode 100644 index 00000000..63e124f2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-2.png b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-2.png new file mode 100644 index 00000000..549bc1e2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-3.png b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-3.png new file mode 100644 index 00000000..401bf6cb Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-4.png b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-4.png new file mode 100644 index 00000000..81d6dde5 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-blue-heat-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-green-heat-1.png b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-1.png new file mode 100644 index 00000000..09932222 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-green-heat-2.png b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-2.png new file mode 100644 index 00000000..a4a4909f Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-green-heat-3.png b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-3.png new file mode 100644 index 00000000..ef912d5b Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-green-heat-4.png b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-4.png new file mode 100644 index 00000000..f242a12a Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-green-heat-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-1.png b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-1.png new file mode 100644 index 00000000..f5faf110 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-2.png b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-2.png new file mode 100644 index 00000000..7095433e Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-3.png b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-3.png new file mode 100644 index 00000000..95132735 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-4.png b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-4.png new file mode 100644 index 00000000..d5c81375 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-orange-heat-4.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-1.png b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-1.png new file mode 100644 index 00000000..ea5c2c45 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-1.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-2.png b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-2.png new file mode 100644 index 00000000..69f6b340 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-2.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-3.png b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-3.png new file mode 100644 index 00000000..b039c3a2 Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-3.png differ diff --git a/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-4.png b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-4.png new file mode 100644 index 00000000..45d0a6bf Binary files /dev/null and b/alien-biomes/graphics/terrain/sr/volcanic-purple-heat-4.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/hr/beach-transition.png b/alien-biomes/graphics/terrain/water-transitions/hr/beach-transition.png new file mode 100644 index 00000000..c90d8a2b Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/hr/beach-transition.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/hr/beach.png b/alien-biomes/graphics/terrain/water-transitions/hr/beach.png new file mode 100644 index 00000000..325e9967 Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/hr/beach.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/hr/cliff-transition.png b/alien-biomes/graphics/terrain/water-transitions/hr/cliff-transition.png new file mode 100644 index 00000000..0fd67bc9 Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/hr/cliff-transition.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/hr/cliff.png b/alien-biomes/graphics/terrain/water-transitions/hr/cliff.png new file mode 100644 index 00000000..087e38d8 Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/hr/cliff.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/sr/beach-transition.png b/alien-biomes/graphics/terrain/water-transitions/sr/beach-transition.png new file mode 100644 index 00000000..80f544e6 Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/sr/beach-transition.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/sr/beach.png b/alien-biomes/graphics/terrain/water-transitions/sr/beach.png new file mode 100644 index 00000000..a71b0f0b Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/sr/beach.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/sr/cliff-transition.png b/alien-biomes/graphics/terrain/water-transitions/sr/cliff-transition.png new file mode 100644 index 00000000..c9cfc9fa Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/sr/cliff-transition.png differ diff --git a/alien-biomes/graphics/terrain/water-transitions/sr/cliff.png b/alien-biomes/graphics/terrain/water-transitions/sr/cliff.png new file mode 100644 index 00000000..eace64c1 Binary files /dev/null and b/alien-biomes/graphics/terrain/water-transitions/sr/cliff.png differ diff --git a/alien-biomes/info.json b/alien-biomes/info.json new file mode 100644 index 00000000..5bcb2faf --- /dev/null +++ b/alien-biomes/info.json @@ -0,0 +1,13 @@ +{ + "name": "alien-biomes", + "version": "0.6.8", + "title": "Alien Biomes", + "author": "Earendel", + "dependencies": [ + "base >= 1.1.0", + "?alien-biomes-hr-terrain >= 0.3.1" + ], + "description": "A collection of additional biomes: Snow, Volcanic, Crater, various colors of Dirt, Sand and Grass. Includes new tree and decorative variants. There are planet controls in the mod options. V3 is a complete rebuild, starting a new map is advised, but there is a terrain regeneration option that will preserve parts of your base. HR Terrain Textures are in a separate mod.", + "factorio_version": "1.1", + "homepage":"https://factorio.miraheze.org/" +} diff --git a/combat-mechanics-overhaul_0.6.24/licence.txt b/alien-biomes/licence.txt similarity index 100% rename from combat-mechanics-overhaul_0.6.24/licence.txt rename to alien-biomes/licence.txt diff --git a/alien-biomes/locale/cs/strings.cfg b/alien-biomes/locale/cs/strings.cfg new file mode 100644 index 00000000..431b6a98 --- /dev/null +++ b/alien-biomes/locale/cs/strings.cfg @@ -0,0 +1,179 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=TrΓ‘va +grass-1=TrΓ‘va 1 +grass-2=TrΓ‘va 2 +grass-3=TrΓ‘va 3 +grass-4=TrΓ‘va 4 +dirt=HlΓ­na +dirt-1=HlΓ­na 1 +dirt-2=HlΓ­na 2 +dirt-3=HlΓ­na 3 +dirt-4=HlΓ­na 4 +dirt-5=HlΓ­na 5 +dirt-6=HlΓ­na 6 +dirt-7=HlΓ­na 7 +sand=PΓ­sek +sand-1=PΓ­sek 1 +sand-2=PΓ­sek 2 +sand-3=PΓ­sek 3 +snow=SnΓ­h +snow-0=SnΓ­h 0 +snow-1=SnΓ­h 1 +snow-2=SnΓ­h 2 +snow-3=SnΓ­h 3 +snow-4=SnΓ­h 4 +snow-5=SnΓ­h 5 (Led) +snow-6=SnΓ­h 6 (Led) +snow-7=SnΓ­h 7 (Led) +snow-8=SnΓ­h 8 (Led) +snow-9=SnΓ­h 9 (Led) +heat-1=Chladno +heat-2=Teplo +heat-3=Horko +heat-4=SpalujΓ­cΓ­ +frozen=Zmrznuto +volcanic=VulkanickΓ½ +aubergine=LilkovΓ‘ +beige=BΓ©ΕΎovΓ‘ +black=ČernΓ‘ +blue=ModrΓ‘ +brown=HnΔ›dΓ‘ +cream=KrΓ©movΓ‘ +dustyrose=PraΕ‘nΓ‘ +green=ZelenΓ‘ +grey=Ε edΓ‘ +purple=FialovΓ‘ +red=ČervenΓ‘ +tan=BronzovΓ‘ +violet=RΕ―ΕΎovΓ‘ +white=BΓ­lΓ‘ +mauve=NafialovΔ›lΓ‘ +turquoise=TyrkysovΓ‘ +olive=OlivovΓ‘ +orange=OranΕΎovΓ‘ +yellow=Ε½lutΓ‘ + +[autoplace-control-names] +temperature=Teplota +cold=Teplota: StudenΓ© klima +hot=Teplota: TeplΓ© klima +dirt-aubergine=HlΓ­na: LilkovΓ‘ +dirt-beige=HlΓ­na: BΓ©ΕΎovΓ‘ +dirt-black=HlΓ­na: ČernΓ‘ +dirt-brown=HlΓ­na: HnΔ›dΓ‘ +dirt-cream=HlΓ­na: KrΓ©movΓ‘ +dirt-dustyrose=HlΓ­na: PraΕ‘nΓ‘ +dirt-grey=HlΓ­na: Ε edΓ‘ +dirt-purple=HlΓ­na: FialovΓ‘ +dirt-red=HlΓ­na: ČervenΓ‘ +dirt-tan=HlΓ­na: BronzovΓ‘ +dirt-violet=HlΓ­na: RΕ―ΕΎovΓ‘ +dirt-white=HlΓ­na: BΓ­lΓ‘ +frozen=Zmrznuto +grass-blue=TrΓ‘va: ModrΓ‘ +grass-green=TrΓ‘va: ZelenΓ‘ +grass-mauve=TrΓ‘va: NafialovΔ›lΓ‘ +grass-olive=TrΓ‘va: OlivovΓ‘ +grass-orange=TrΓ‘va: OranΕΎovΓ‘ +grass-purple=TrΓ‘va: FialovΓ‘ +grass-red=TrΓ‘va: ČervenΓ‘ +grass-turquoise=TrΓ‘va: TyrkysovΓ‘ +grass-violet=TrΓ‘va: RΕ―ΕΎovΓ‘ +grass-yellow=TrΓ‘va: Ε½lutΓ‘ +sand-aubergine=PΓ­sek: LilkovΓ½ +sand-beige=PΓ­sek: BΓ©ΕΎovΓ½ +sand-black=PΓ­sek: ČernΓ½ +sand-brown=PΓ­sek: HnΔ›dΓ½ +sand-cream=PΓ­sek: KrΓ©movΓ½ +sand-dustyrose=PΓ­sek: PraΕ‘nΓ½ +sand-grey=PΓ­sek: Ε edΓ½ +sand-purple=PΓ­sek: FialovΓ½ +sand-red=PΓ­sek: ČervenΓ½ +sand-tan=PΓ­sek: BronzovΓ½ +sand-violet=PΓ­sek: RΕ―ΕΎovΓ½ +sand-white=PΓ­sek: BΓ­lΓ½ +volcanic-blue=VulkanickΓ½: ModrΓ‘ +volcanic-green=VulkanickΓ½: ZelenΓ‘ +volcanic-orange=VulkanickΓ½: OranΕΎovΓ‘ +volcanic-purple=VulkanickΓ½: FialovΓ‘ + +[gui-map-generator] +cold-description=Intenzita studenΓ½ch oblastΓ­. +hot-description=Intenzita teplΓ½ch oblastΓ­. + +[entity-name] +rock=KΓ‘men +tree=Strom + +[tile-name] +landfill=Zemina +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=Velikost biomu +alien-biomes-temperature-low=TeplotnΓ­ rozsah: MalΓ½ +alien-biomes-temperature-high=TeplotnΓ­ rozsah: VelkΓ½ +alien-biomes-humidity-low=Rozsah vlhkosti: MalΓ½ +alien-biomes-humidity-high=Rozsah vlhkosti: VelkΓ½ +alien-biomes-aux-low=Auxiliary Range: Low +alien-biomes-aux-high=Auxiliary Range: High +alien-biomes-disable-vegetation=Odstranit veΕ‘kerou vegetaci +alien-biomes-remove-obsolete-tiles=Odstranit zastaralΓ© dlaΕΎdice +alien-biomes-include-dirt-aubergine=Zahrnout dlaΕΎdice: HlΓ­na - LilkovΓ‘ +alien-biomes-include-dirt-beige=Zahrnout dlaΕΎdice: HlΓ­na - BΓ©ΕΎovΓ‘ +alien-biomes-include-dirt-black=Zahrnout dlaΕΎdice: HlΓ­na - ČernΓ‘ +alien-biomes-include-dirt-brown=Zahrnout dlaΕΎdice: HlΓ­na - HnΔ›dΓ‘ +alien-biomes-include-dirt-cream=Zahrnout dlaΕΎdice: HlΓ­na - KrΓ©movΓ‘ +alien-biomes-include-dirt-dustyrose=Zahrnout dlaΕΎdice: HlΓ­na - PraΕ‘nΓ‘ +alien-biomes-include-dirt-grey=Zahrnout dlaΕΎdice: HlΓ­na - Ε edΓ‘ +alien-biomes-include-dirt-purple=Zahrnout dlaΕΎdice: HlΓ­na - FialovΓ‘ +alien-biomes-include-dirt-red=Zahrnout dlaΕΎdice: HlΓ­na - ČervenΓ‘ +alien-biomes-include-dirt-tan=Zahrnout dlaΕΎdice: HlΓ­na - BronzovΓ‘ +alien-biomes-include-dirt-violet=Zahrnout dlaΕΎdice: HlΓ­na - RΕ―ΕΎovΓ‘ +alien-biomes-include-dirt-white=Zahrnout dlaΕΎdice: HlΓ­na - BΓ­lΓ‘ +alien-biomes-include-frozen=Zahrnout dlaΕΎdice: Zmrznuto +alien-biomes-include-grass-blue=Zahrnout dlaΕΎdice: TrΓ‘va - ModrΓ‘ +alien-biomes-include-grass-green=Zahrnout dlaΕΎdice: TrΓ‘va - ZelenΓ‘ +alien-biomes-include-grass-mauve=Zahrnout dlaΕΎdice: TrΓ‘va - NafialovΔ›lΓ‘ +alien-biomes-include-grass-olive=Zahrnout dlaΕΎdice: TrΓ‘va - OlivovΓ‘ +alien-biomes-include-grass-orange=Zahrnout dlaΕΎdice: TrΓ‘va - OranΕΎovΓ‘ +alien-biomes-include-grass-purple=Zahrnout dlaΕΎdice: TrΓ‘va - FialovΓ‘ +alien-biomes-include-grass-red=Zahrnout dlaΕΎdice: TrΓ‘va - ČervenΓ‘ +alien-biomes-include-grass-turquoise=Zahrnout dlaΕΎdice: TrΓ‘va - TyrkysovΓ‘ +alien-biomes-include-grass-violet=Zahrnout dlaΕΎdice: TrΓ‘va - FialovΓ‘ +alien-biomes-include-grass-yellow=Zahrnout dlaΕΎdice: TrΓ‘va - Ε½lutΓ‘ +alien-biomes-include-sand-aubergine=Zahrnout dlaΕΎdice: PΓ­sek - LilkovΓ½ +alien-biomes-include-sand-beige=Zahrnout dlaΕΎdice: PΓ­sek - BΓ©ΕΎovΓ½ +alien-biomes-include-sand-black=Zahrnout dlaΕΎdice: PΓ­sek - ČernΓ½ +alien-biomes-include-sand-brown=Zahrnout dlaΕΎdice: PΓ­sek - HnΔ›dΓ½ +alien-biomes-include-sand-cream=Zahrnout dlaΕΎdice: PΓ­sek - KrΓ©movΓ½ +alien-biomes-include-sand-dustyrose=Zahrnout dlaΕΎdice: PΓ­sek - PraΕ‘nΓ½ +alien-biomes-include-sand-grey=Zahrnout dlaΕΎdice: PΓ­sek - Ε edΓ½ +alien-biomes-include-sand-purple=Zahrnout dlaΕΎdice: PΓ­sek - FialovΓ½ +alien-biomes-include-sand-red=Zahrnout dlaΕΎdice: PΓ­sek - ČervenΓ½ +alien-biomes-include-sand-tan=Zahrnout dlaΕΎdice: PΓ­sek - BronzovΓ½ +alien-biomes-include-sand-violet=Zahrnout dlaΕΎdice: PΓ­sek - RΕ―ΕΎovΓ½ +alien-biomes-include-sand-white=Zahrnout dlaΕΎdice: PΓ­sek - BΓ­lΓ½ +alien-biomes-include-volcanic-blue=Zahrnout dlaΕΎdice: VulkanickΓ‘ - ModrΓ‘ +alien-biomes-include-volcanic-green=Zahrnout dlaΕΎdice: VulkanickΓ‘ - ZelenΓ‘ +alien-biomes-include-volcanic-orange=Zahrnout dlaΕΎdice: VulkanickΓ‘ - OranΕΎovΓ‘ +alien-biomes-include-volcanic-purple=Zahrnout dlaΕΎdice: VulkanickΓ‘ - FialovΓ‘ +alien-biomes-include-inland-shallows=Zahrnout vnitrozemskΓ© mΔ›lčiny +alien-biomes-include-coastal-shallows=Zahrnout pobΕ™eΕΎnΓ­ mΔ›lčiny +alien-biomes-include-rivers=Zahrnout Ε™eky (WIP) +tile-speed-reduction=ProcentuΓ‘lnΓ­ snΓ­ΕΎenΓ­ rychlosti na dlaΕΎdicΓ­ch + +[mod-setting-description] +alien-biomes-terrain-scale=ZvΔ›tΕ‘Γ­ či zmenΕ‘Γ­ velikost biomu. MenΕ‘Γ­ hodnoty vytvΓ‘Ε™ejΓ­ menΕ‘Γ­, ale častΔ›jΕ‘Γ­ biomy. ZΓ‘kladnΓ­ hodnota je 100. +alien-biomes-temperature-low=NΓ­zkΓ© teplotnΓ­ extrΓ©my planety. SniΕΎte k pΕ™idΓ‘nΓ­ vΓ­ce zmrzlΓ½ch oblastΓ­. PΕ™i zvΓ½Ε‘enΓ­ se chladnΓ© oblasti stanou mΓ©nΔ› častΓ½mi, nebo se nebudou vΕ―bec vyskytovat. ZΓ‘kladnΓ­ hodnota je -50. +alien-biomes-temperature-high=VysokΓ© teplotnΓ­ extrΓ©my planety. ZvyΕ‘te pro pΕ™idΓ‘nΓ­ vΓ­ce vulkanickΓ½ch oblastΓ­. PΕ™i snΓ­ΕΎenΓ­ se vulkanickΓ© oblasti stanou mΓ©nΔ› častΓ½mi, nebo se nebudou vΕ―bec vyskytovat. ZΓ‘kladnΓ­ hodnota je 150. +alien-biomes-humidity-low=NΓ­zkΓ© vlhkostnΓ­ extrΓ©my planety. SniΕΎte k pΕ™idΓ‘nΓ­ vΓ­ce pouΕ‘tΓ­. PΕ™i zvΓ½Ε‘enΓ­ se pouΕ‘tnΓ­ oblasti stanou mΓ©nΔ› častΓ½mi, nebo se nebudou vΕ―bec vyskytovat. ZΓ‘kladnΓ­ hodnota je 0. +alien-biomes-humidity-high=VysokΓ© vlhkostnΓ­ extrΓ©my planety. ZvyΕ‘te pro pΕ™idΓ‘nΓ­ vΓ­ce travnatΓ½ch oblastΓ­. PΕ™i snΓ­ΕΎenΓ­ se travnatΓ© oblasti stanou mΓ©nΔ› častΓ½mi, nebo se nebudou vΕ―bec vyskytovat. ZΓ‘kladnΓ­ hodnota je 100. +alien-biomes-aux-low=NΓ­zkΓ© extrΓ©my barevnΓ© variability planety. SniΕΎte k pΕ™idΓ‘nΓ­ vΓ­ce zelenΓ½ch / hnΔ›dΓ½ch / bronzovΓ½ch oblastΓ­. PΕ™i zvΓ½Ε‘enΓ­ se zelenΓ© / hnΔ›dΓ© / bronzovΓ© oblasti stanou mΓ©nΔ› častΓ½mi. ZΓ‘kladnΓ­ hodnota je 0. +alien-biomes-aux-high=VysokΓ© extrΓ©my barevnΓ© variability planety. ZvyΕ‘te k pΕ™idΓ‘nΓ­ vΓ­ce modrΓ½ch / fialovΓ½ch / červenΓ½ch oblastΓ­. PΕ™i snΓ­ΕΎenΓ­ se modrΓ© / fialovΓ© / červenΓ© oblasti stanou mΓ©nΔ› častΓ½mi. ZΓ‘kladnΓ­ hodnota je 100. +alien-biomes-disable-vegetation=Je-li povoleno, veΕ‘kerΓ½ travnatΓ½ terΓ©n, stromy, a na rostlinΓ‘ch zaloΕΎenΓ© dekorace budou odstranΔ›ny (pokud nebudou pΕ™idΓ‘ny jinou modifikacΓ­). To vΓ‘m umoΕΎnΓ­ simulovat mrtvou planetu, mΔ›sΓ­c, nebo asteroid. +alien-biomes-remove-obsolete-tiles=Alien Biomes nahrazuje nΔ›kterΓ© dlaΕΎdice ze zΓ‘kladnΓ­ hry. ZastaralΓ© dlaΕΎdice lze odstranit k uvolnΔ›nΓ­ dalΕ‘Γ­ho mΓ­sta, takΕΎe mΕ―ΕΎe bΓ½t pouΕΎito vΓ­ce mΓ³dΕ― (existuje limit o velikosti 255 dlaΕΎdic). Tato akce mΕ―ΕΎe zpΕ―sobit problΓ©my ostatnΓ­m modifikacΓ­m, kterΓ© tyto zΓ‘kladnΓ­ dlaΕΎdice vyΕΎadujΓ­. +alien-biomes-reduced-tiles=RedukovanΓ© varianty dlaΕΎdic +tile-speed-reduction=NΔ›kterΓ© dlaΕΎdice (napΕ™Γ­klad horkΓ½, vulkanickΓ½ terΓ©n) sniΕΎujΓ­ rychlost pohybu hrÑče. SnΓ­ΕΎenΓ­ tohoto čísla znamenΓ‘, ΕΎe vΓ‘s budou tyto dlaΕΎdice zpomalovat mΓ©nΔ›. diff --git a/alien-biomes/locale/en/strings.cfg b/alien-biomes/locale/en/strings.cfg new file mode 100644 index 00000000..7fe5eb2e --- /dev/null +++ b/alien-biomes/locale/en/strings.cfg @@ -0,0 +1,272 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=Grass +grass-1=Grass 1 +grass-2=Grass 2 +grass-3=Grass 3 +grass-4=Grass 4 +dirt=Dirt +dirt-1=Dirt 1 +dirt-2=Dirt 2 +dirt-3=Dirt 3 +dirt-4=Dirt 4 +dirt-5=Dirt 5 +dirt-6=Dirt 6 +dirt-7=Dirt 7 +sand=Sand +sand-1=Sand 1 +sand-2=Sand 2 +sand-3=Sand 3 +snow=Snow +snow-0=Snow 0 +snow-1=Snow 1 +snow-2=Snow 2 +snow-3=Snow 3 +snow-4=Snow 4 +snow-5=Snow 5 (Ice) +snow-6=Snow 6 (Ice) +snow-7=Snow 7 (Ice) +snow-8=Snow 8 (Ice) +snow-9=Snow 9 (Ice) +heat-1=Cool +heat-2=Warm +heat-3=Hot +heat-4=Scorching +frozen=Frozen +volcanic=volcanic +aubergine=Aubergine +beige=Beige +black=Black +blue=Blue +brown=Brown +cream=Cream +dustyrose=Dustyrose +green=Green +grey=Grey +purple=Purple +red=Red +tan=Tan +violet=Violet +white=White +mauve=Mauve +turquoise=Turquoise +olive=Olive +orange=Orange +yellow=Yellow +ab-tree=__1__ __2__ Tree +fiir=Fiir +seqnoia=Seqnoia +mewkaliptus=Mewkaliptus +mahogangy=Mahogangy +maypaple=Maypaple +wyliki=Wyliki +cednar=Cednar +beesh=Beesh +baarell=Baarell +oaktapus=Oaktapus +grepine=Grepine +vash=Vash +scarecrow=Snarebaow +specter=Ecter +willu=Willu +margrove=Margrove +pearch=Pearch +maobab=Maobab +konifa=Konifa +parm=Parm +medusa=Medusa +lemon=Lemon +auburn=Auburn +vermilion=vermilion +scarlet=Scarlet +evergreen=Evergreen +marshmallow=marshmallow +arsenic=Arsenic +plumb=Plumb +bile=Bile +opal=Opal +cherry=Cherry +topaz=Topaz +jade=Jade +cyanide=Cyanide +tickling=Tickling +cranberry=Cranberry +choking=Choking +crimson=Crimson +mulberry=Mulberry +grape=Grape +sunleaf=Sunleaf +springleaf=Springleaf +starleaf=Starleaf +beetroot=Beetroot +amethyst=Amethyst +broadleaf=Broadleaf +candyfloss=Candyfloss +serene=Serene +emerald=Emerald +smoky=Smoky +thistle=Thistle +sunset=Sunset +blackleaf=Blackleaf +sapphire=Sapphire +bloodlash=Bloodlash +succulent=Succulent +powderpuff=Powderpuff +dusky=Dusky +mint=Mint +spinleaf=Spinleaf +mottled=Mottled +mosaic=Mosaic +strangling=Strangling +fluffy=Fluffy +mothwing=Mothwing +bearded=Bearded +fusia=Fusia +sticky=Sticky +dreamtrap=Dreamtrap +cactuar=Cactuar +orchid=Orchid +cinder=Cinder +dragonfly=Dragonfly +deeproot=Deeproot +sporepuff=Sporepuff +hangman=Hangman +ruby=Ruby +magnolia=Magnolia +autumn=Autumn +raisin=Raisin +stoic=Stoic +twilight=Twilight +midnight=Midnight +snowdrop=Snowdrop +iceblade=Iceblade +amber=Amber +paradise=Paradise +amaranth=Amaranth +peacock=Peacock +tiles-removed-warning=[img=utility/warning_icon] Alien Biomes had to remove some tiles in order to stay under the 255 tiles limit. Removed tiles will end up as landfill. +tiles-removed-warning-try-remove-obsolete=You can use the "[color=green]Remove Obsolete Tiles[/color]" mod setting to remove unused vanilla tiles and save 20 tiles. + +[autoplace-control-names] +temperature=Temperature +cold=Temperature: Cold Climates +hot=Temperature: Hot Climates +dirt-aubergine=Dirt: Aubergine +dirt-beige=Dirt: Beige +dirt-black=Dirt: Black +dirt-brown=Dirt: Brown +dirt-cream=Dirt: Cream +dirt-dustyrose=Dirt: Dustyrose +dirt-grey=Dirt: Grey +dirt-purple=Dirt: Purple +dirt-red=Dirt: Red +dirt-tan=Dirt: Tan +dirt-violet=Dirt: Violet +dirt-white=Dirt: White +frozen=Frozen +grass-blue=Grass: Blue +grass-green=Grass: Green +grass-mauve=Grass: Mauve +grass-olive=Grass: Olive +grass-orange=Grass: Orange +grass-purple=Grass: Purple +grass-red=Grass: Red +grass-turquoise=Grass: Turquoise +grass-violet=Grass: Violet +grass-yellow=Grass: Yellow +sand-aubergine=Sand: Aubergine +sand-beige=Sand: Beige +sand-black=Sand: Black +sand-brown=Sand: Brown +sand-cream=Sand: Cream +sand-dustyrose=Sand: Dustyrose +sand-grey=Sand: Grey +sand-purple=Sand: Purple +sand-red=Sand: Red +sand-tan=Sand: Tan +sand-violet=Sand: Violet +sand-white=Sand: White +volcanic-blue=Volcanic: Blue +volcanic-green=Volcanic: Green +volcanic-orange=Volcanic: Orange +volcanic-purple=Volcanic: Purple + +[gui-map-generator] +cold-description=The intensity of cold patches. +hot-description=The intensity of hot patches. + +[entity-name] +rock=Rock +tree=Tree + +[tile-name] +landfill=Landfill +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=Biome Scale +alien-biomes-temperature-low=Temperature Range: Low +alien-biomes-temperature-high=Temperature Range: High +alien-biomes-humidity-low=Humidity Range: Low +alien-biomes-humidity-high=Humidity Range: High +alien-biomes-aux-low=Auxiliary Range: Low +alien-biomes-aux-high=Auxiliary Range: High +alien-biomes-disable-vegetation=Remove All Vegetation +alien-biomes-remove-obsolete-tiles=Remove Obsolete Tiles +alien-biomes-include-dirt-aubergine=Include Tiles: Dirt - Aubergine +alien-biomes-include-dirt-beige=Include Tiles: Dirt - Beige +alien-biomes-include-dirt-black=Include Tiles: Dirt - Black +alien-biomes-include-dirt-brown=Include Tiles: Dirt - Brown +alien-biomes-include-dirt-cream=Include Tiles: Dirt - Cream +alien-biomes-include-dirt-dustyrose=Include Tiles: Dirt - Dustyrose +alien-biomes-include-dirt-grey=Include Tiles: Dirt - Grey +alien-biomes-include-dirt-purple=Include Tiles: Dirt - Purple +alien-biomes-include-dirt-red=Include Tiles: Dirt - Red +alien-biomes-include-dirt-tan=Include Tiles: Dirt - Tan +alien-biomes-include-dirt-violet=Include Tiles: Dirt - Violet +alien-biomes-include-dirt-white=Include Tiles: Dirt - White +alien-biomes-include-frozen=Include Tiles: Frozen +alien-biomes-include-grass-blue=Include Tiles: Grass - Blue +alien-biomes-include-grass-green=Include Tiles: Grass - Green +alien-biomes-include-grass-mauve=Include Tiles: Grass - Mauve +alien-biomes-include-grass-olive=Include Tiles: Grass - Olive +alien-biomes-include-grass-orange=Include Tiles: Grass - Orange +alien-biomes-include-grass-purple=Include Tiles: Grass - Purple +alien-biomes-include-grass-red=Include Tiles: Grass - Red +alien-biomes-include-grass-turquoise=Include Tiles: Grass - Turquoise +alien-biomes-include-grass-violet=Include Tiles: Grass - Violet +alien-biomes-include-grass-yellow=Include Tiles: Grass - Yellow +alien-biomes-include-sand-aubergine=Include Tiles: Sand - Aubergine +alien-biomes-include-sand-beige=Include Tiles: Sand - Beige +alien-biomes-include-sand-black=Include Tiles: Sand - Black +alien-biomes-include-sand-brown=Include Tiles: Sand - Brown +alien-biomes-include-sand-cream=Include Tiles: Sand - Cream +alien-biomes-include-sand-dustyrose=Include Tiles: Sand - Dustyrose +alien-biomes-include-sand-grey=Include Tiles: Sand - Grey +alien-biomes-include-sand-purple=Include Tiles: Sand - Purple +alien-biomes-include-sand-red=Include Tiles: Sand - Red +alien-biomes-include-sand-tan=Include Tiles: Sand - Tan +alien-biomes-include-sand-violet=Include Tiles: Sand - Violet +alien-biomes-include-sand-white=Include Tiles: Sand - White +alien-biomes-include-volcanic-blue=Include Tiles: Volcanic - Blue +alien-biomes-include-volcanic-green=Include Tiles: Volcanic - Green +alien-biomes-include-volcanic-orange=Include Tiles: Volcanic - Orange +alien-biomes-include-volcanic-purple=Include Tiles: Volcanic - Purple +alien-biomes-include-inland-shallows=Include Inland Shallows +alien-biomes-include-coastal-shallows=Include Coastal Shallows +alien-biomes-include-rivers=Include Rivers (WIP) +tile-speed-reduction=Tile Speed Reduction % + +[mod-setting-description] +alien-biomes-terrain-scale=Increase or decrease biome size. Lower values create smaller more frequent biomes. Default is 100. +alien-biomes-temperature-low=The planet's lower temperature extremes. Decrease to add more frozen snow and ice. Increase to make frozen areas less common or impossible. Default is -50. +alien-biomes-temperature-high=The planet's higher temperature extremes. Increase to add more volcanic areas. Decrease to make volcanic areas less common or impossible. Default is 150. +alien-biomes-humidity-low=The planet's lower humidity extremes. Decrease to add more desert. Increase to make desert areas less common or impossible. Default is 0. +alien-biomes-humidity-high=The planet's higher humidity extremes. Increase to add more grass areas. Decrease to make grass areas less common or impossible. Default is 100. +alien-biomes-aux-low=The planet's lower colour variation extremes. Decrease to add more green / brown / tan colours. Increase to make green / brown / tan colours less common. Default is 0. +alien-biomes-aux-high=The planet's higher colour variation extremes. Increase to add more blue / purple / red colours. Decrease to make blue / purple / red colours less common. Default is 100. +alien-biomes-disable-vegetation=If enabled, all grassy terrain, trees, and plant-based decoratives will be removed (unless added by a different mod). This allows you to simulate a dead planet, moon, or asteroid. +alien-biomes-remove-obsolete-tiles=Alien Biomes replaces a lot of the vanilla tiles. The obsolete tiles can be removed to free up 20 additional tile slots so more mods that add tiles can be used (there is a limit of 255 tiles). Doing so might cause problems with other mods that require those vanilla tiles. +alien-biomes-reduced-tiles=Reduced Tile Variants +tile-speed-reduction=Some tiles (like hot volcanic terrain) reduce player speed. Reducing this number means the terrain will slow you less. diff --git a/alien-biomes/locale/es-ES/strings.cfg b/alien-biomes/locale/es-ES/strings.cfg new file mode 100644 index 00000000..aaaf8ab6 --- /dev/null +++ b/alien-biomes/locale/es-ES/strings.cfg @@ -0,0 +1,179 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=Hierbas +grass-1=Hierbas 1 +grass-2=Hierbas 2 +grass-3=Hierbas 3 +grass-4=Hierbas 4 +dirt=Chatarra +dirt-1=Chatarra 1 +dirt-2=Chatarra 2 +dirt-3=Chatarra 3 +dirt-4=Chatarra 4 +dirt-5=Chatarra 5 +dirt-6=Chatarra 6 +dirt-7=Chatarra 7 +sand=Arena +sand-1=Arena 1 +sand-2=Arena 2 +sand-3=Arena 3 +snow=Nieve +snow-0=Nieve 0 +snow-1=Nieve 1 +snow-2=Nieve 2 +snow-3=Nieve 3 +snow-4=Nieve 4 +snow-5=Nieve 5 (Hielo) +snow-6=Nieve 6 (Hielo) +snow-7=Nieve 7 (Hielo) +snow-8=Nieve 8 (Hielo) +snow-9=Nieve 9 (Hielo) +heat-1=Frνo +heat-2=Cαlido +heat-3=Caliente +heat-4=Abrasador +frozen=Congelado +volcanic=Volcαnico +aubergine=Berenjena +beige=Beige +black=Negro +blue=Azul +brown=Marrσn +cream=Crema +dustyrose=Polvo Rosa +green=Verde +grey=Gris +purple=Pϊrpura +red=Rojo +tan=Bronceado +violet=Violeta +white=Blanco +mauve=Malva +turquoise=Turquesa +olive=Oliva +orange=Naranja +yellow=Amarillo + +[autoplace-control-names] +temperature=Temperatura +cold=Temperatura: Climas Frνos +hot=Temperatura: Climas Calientes +dirt-aubergine=Chatarra: Berenjena +dirt-beige=Chatarra: Beige +dirt-black=Chatarra: Negro +dirt-brown=Chatarra: Marrσn +dirt-cream=Chatarra: Crema +dirt-dustyrose=Chatarra: Polvo Rosa +dirt-grey=Chatarra: Gris +dirt-purple=Chatarra: Pϊrpura +dirt-red=Chatarra: Rojo +dirt-tan=Chatarra: Bronceado +dirt-violet=Chatarra: Violeta +dirt-white=Chatarra: Blanco +frozen=Congelado +grass-blue=Hierbas: Azul +grass-green=Hierbas: Verde +grass-mauve=Hierbas: Malva +grass-olive=Hierbas: Oliva +grass-orange=Hierbas: Naranja +grass-purple=Hierbas: Pϊrpura +grass-red=Hierbas: Rojo +grass-turquoise=Hierbas: Turquesa +grass-violet=Hierbas: Violeta +grass-yellow=Hierbas: Amarillo +sand-aubergine=Arena: Berenjena +sand-beige=Arena: Beige +sand-black=Arena: Negro +sand-brown=Arena: Marrσn +sand-cream=Arena: Crema +sand-dustyrose=Arena: Polvo Rosa +sand-grey=Arena: Gris +sand-purple=Arena: Pϊrpura +sand-red=Arena: Rojo +sand-tan=Arena: Bronceado +sand-violet=Arena: Violeta +sand-white=Arena: Blanco +volcanic-blue=Volcαnico: Azul +volcanic-green=Volcαnico: Verde +volcanic-orange=Volcαnico: Naranja +volcanic-purple=Volcαnico: Pϊrpura + +[gui-map-generator] +cold-description=La intensidad de los parches frνos. +hot-description=La intensidad de los parches calientes. + +[entity-name] +rock=Roca +tree=Αrbol + +[tile-name] +landfill=Escombros +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=Escala Biome +alien-biomes-temperature-low=Rango de Temperatura: Bajo +alien-biomes-temperature-high=Temperatura Range: Alto +alien-biomes-humidity-low=Humidity Range: Bajo +alien-biomes-humidity-high=Humidity Range: Alto +alien-biomes-aux-low=Rango Auxiliar: Bajo +alien-biomes-aux-high=Rango Auxiliar: Alto +alien-biomes-disable-vegetation= Eliminar toda la Vegetaciσn +alien-biomes-remove-obsolete-tiles=Eliminar Fichas Obsoletas +alien-biomes-include-dirt-aubergine=Incluir Fichas: Chatarra - Berenjena +alien-biomes-include-dirt-beige=Incluir Fichas: Chatarra - Beige +alien-biomes-include-dirt-black=Incluir Fichas: Chatarra - Negro +alien-biomes-include-dirt-brown=Incluir Fichas: Chatarra - Marrσn +alien-biomes-include-dirt-cream=Incluir Fichas: Chatarra - Crema +alien-biomes-include-dirt-dustyrose=Incluir Fichas: Chatarra - Polvo Rosa +alien-biomes-include-dirt-grey=Incluir Fichas: Chatarra - Gris +alien-biomes-include-dirt-purple=Incluir Fichas: Chatarra - Pϊrpura +alien-biomes-include-dirt-red=Incluir Fichas: Chatarra - Rojo +alien-biomes-include-dirt-tan=Incluir Fichas: Chatarra - Bronceado +alien-biomes-include-dirt-violet=Incluir Fichas: Chatarra - Violeta +alien-biomes-include-dirt-white=Incluir Fichas: Chatarra - Blanco +alien-biomes-include-frozen=Incluir Fichas: Congelado +alien-biomes-include-grass-blue=Incluir Fichas: Hierbas - Azul +alien-biomes-include-grass-green=Incluir Fichas: Hierbas - Verde +alien-biomes-include-grass-mauve=Incluir Fichas: Hierbas - Malva +alien-biomes-include-grass-olive=Incluir Fichas: Hierbas - Oliva +alien-biomes-include-grass-orange=Incluir Fichas: Hierbas - Naranja +alien-biomes-include-grass-purple=Incluir Fichas: Hierbas - Pϊrpura +alien-biomes-include-grass-red=Incluir Fichas: Hierbas - Rojo +alien-biomes-include-grass-turquoise=Incluir Fichas: Hierbas - Turquesa +alien-biomes-include-grass-violet=Incluir Fichas: Hierbas - Violeta +alien-biomes-include-grass-yellow=Incluir Fichas: Hierbas - Amarillo +alien-biomes-include-sand-aubergine=Incluir Fichas: Arena - Berenjena +alien-biomes-include-sand-beige=Incluir Fichas: Arena - Beige +alien-biomes-include-sand-black=Incluir Fichas: Arena - Negro +alien-biomes-include-sand-brown=Incluir Fichas: Arena - Marrσn +alien-biomes-include-sand-cream=Incluir Fichas: Arena - Crema +alien-biomes-include-sand-dustyrose=Incluir Fichas: Arena - Polvo Rosa +alien-biomes-include-sand-grey=Incluir Fichas: Arena - Gris +alien-biomes-include-sand-purple=Incluir Fichas: Arena - Pϊrpura +alien-biomes-include-sand-red=Incluir Fichas: Arena - Rojo +alien-biomes-include-sand-tan=Incluir Fichas: Arena - Bronceado +alien-biomes-include-sand-violet=Incluir Fichas: Arena - Violeta +alien-biomes-include-sand-white=Incluir Fichas: Arena - Blanco +alien-biomes-include-volcanic-blue=Incluir Fichas: Volcαnico - Azul +alien-biomes-include-volcanic-green=Incluir Fichas: Volcαnico - Verde +alien-biomes-include-volcanic-orange=Incluir Fichas: Volcαnico - Naranja +alien-biomes-include-volcanic-purple=Incluir Fichas: Volcαnico - Pϊrpura +alien-biomes-include-inland-shallows= Incluir aguas poca profundas del interior +alien-biomes-include-coastal-shallows=Incluir aguas costeras poca profunda +alien-biomes-include-rivers=Incluir rνos (WIP) +tile-speed-reduction=% de fichas de reducciσn + +[mod-setting-description] +alien-biomes-terrain-scale= Aumenta o disminuye el tamaρo del biome. Los valores mαs bajos crean biomas mαs pequeρos y mαs frecuentes. El valor predeterminado es 100. +alien-biomes-temperature-low=Las temperaturas extremas mαs bajas del planeta. Disminuya para agregar mαs nieve y hielo congelados. Aumente para hacer que las αreas congeladas sean menos comunes o imposibles. El valor predeterminado es -50. +alien-biomes-temperature-high=Las temperaturas extremas mαs altas de los planetas. Aumente para agregar mαs αreas volcαnicas. Disminuya para hacer que las αreas volcαnicas sean menos comunes o imposibles. El valor predeterminado es 150. +alien-biomes-humidity-low=Los extremos de humedad mαs bajos de los planetas. Disminuya para agregar mαs desierto. Aumente para hacer que las αreas desιrticas sean menos comunes o imposibles. El valor predeterminado es 0. +alien-biomes-humidity-high= Los extremos de humedad mαs altos de los planetas. Aumente para agregar mαs αreas de cιsped. Disminuya para hacer que las αreas de cιsped sean menos comunes o imposibles. El valor predeterminado es 100. +alien-biomes-aux-low=Los extremos de variaciσn de color mαs bajos de los planetas. Disminuya para agregar mαs colores verde / marrσn / bronceado. Aumente para que los colores verde / marrσn / bronceado sean menos comunes. El valor predeterminado es 0. +alien-biomes-aux-high=Los extremos de variaciσn de color mαs altos del planeta. Aumente para agregar mαs colores azul / pϊrpura / rojo. Disminuya para hacer que los colores azul / pϊrpura / rojo sean menos comunes. El valor predeterminado es 100. +alien-biomes-disable-vegetation=Si estα habilitado, se eliminarαn todos los terrenos con cιsped, αrboles y decorativos a base de plantas (a menos que se agregue un mod diferente). Esto le permite simular un planeta muerto, luna o asteroide. +alien-biomes-remove-obsolete-tiles= Alien Biomes reemplaza muchas de las fichas de vainilla. Los fichas obsoletos se pueden eliminar para liberar espacios de fichas adicionales para que se puedan usar mαs modificaciones que agreguen fichas (hay un lνmite de 255 fichas). Hacerlo podrνa causar problemas con otras modificaciones que requieren esos fichas de vainilla. +alien-biomes-reduced-tiles=Reducciσn de las variantes de fichas +tile-speed-reduction=Algunas fichas (como terreno volcαnico caliente) reducen la velocidad del jugador. Reducir este nϊmero significa que el terreno te ralentizarα menos. diff --git a/alien-biomes/locale/pl/strings.cfg b/alien-biomes/locale/pl/strings.cfg new file mode 100644 index 00000000..d3b12e80 --- /dev/null +++ b/alien-biomes/locale/pl/strings.cfg @@ -0,0 +1,178 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=Trawa +grass-1=Trawa 1 +grass-2=Trawa 2 +grass-3=Trawa 3 +grass-4=Trawa 4 +dirt=BΕ‚oto +dirt-1=BΕ‚oto 1 +dirt-2=BΕ‚oto 2 +dirt-3=BΕ‚oto 3 +dirt-4=BΕ‚oto 4 +dirt-5=BΕ‚oto 5 +dirt-6=BΕ‚oto 6 +dirt-7=BΕ‚oto 7 +sand=Piasek +sand-1=Piasek 1 +sand-2=Piasek 2 +sand-3=Piasek 3 +snow=Śnieg +snow-0=Śnieg 0 +snow-1=Śnieg 1 +snow-2=Śnieg 2 +snow-3=Śnieg 3 +snow-4=Śnieg 4 +snow-5=Śnieg 5 (LΓ³d) +snow-6=Śnieg 6 (LΓ³d) +snow-7=Śnieg 7 (LΓ³d) +snow-8=Śnieg 8 (LΓ³d) +snow-9=Śnieg 9 (LΓ³d) +heat-1=ChΕ‚odny +heat-2=CiepΕ‚y +heat-3=GorΔ…cy +heat-4=Upalny +frozen=MroΕΊny +volcanic=Wulkaniczny +aubergine=BakΕ‚aΕΌanowy +beige=BeΕΌowy +black=Czarny +blue=Niebieski +brown=BrΔ…zowy +cream=Kremowy +dustyrose=Zakurzony rΓ³ΕΌ +green=Zielony +grey=Szary +purple=RΓ³ΕΌowy +red=Czerwony +tan=Opalony +violet=Fioletowy +white=BiaΕ‚y +mauve=FioΕ‚koworΓ³ΕΌowy +turquoise=Turkusowy +olive=Oliwkowy +orange=PomaraΕ„czowy +yellow=Ε»Γ³Ε‚ty + +[autoplace-control-names] +temperature=Temperatura +cold=Temperatura: Zimne klimaty +hot=Temperatura: GorΔ…ce klimaty +dirt-aubergine=BΕ‚oto: BakΕ‚aΕΌanowy +dirt-beige=BΕ‚oto: BeΕΌowy +dirt-black=BΕ‚oto: Czarny +dirt-brown=BΕ‚oto: BrΔ…zowy +dirt-cream=BΕ‚oto: Kremowy +dirt-dustyrose=BΕ‚oto: Zakurzony rΓ³ΕΌ +dirt-grey=BΕ‚oto: Szary +dirt-purple=BΕ‚oto: RΓ³ΕΌowy +dirt-red=BΕ‚oto: Czerwony +dirt-tan=BΕ‚oto: Opalony +dirt-violet=BΕ‚oto: Fioletowy +dirt-white=BΕ‚oto: BiaΕ‚y +frozen=MroΕΊny +grass-blue=Trawa: Blue +grass-green=Trawa: Green +grass-mauve=Trawa: FioΕ‚koworΓ³ΕΌowy +grass-olive=Trawa: Oliwkowy +grass-orange=Trawa: PomaraΕ„czowy +grass-purple=Trawa: RΓ³ΕΌowy +grass-red=Trawa: Czerwony +grass-turquoise=Trawa: Turkusowy +grass-violet=Trawa: Fioletowy +grass-yellow=Trawa: Ε»Γ³Ε‚ty +sand-aubergine=Piasek: BakΕ‚aΕΌanowy +sand-beige=Piasek: BeΕΌowy +sand-black=Piasek: Czarny +sand-brown=Piasek: BrΔ…zowy +sand-cream=Piasek: Kremowy +sand-dustyrose=Piasek: Zakurzony rΓ³ΕΌ +sand-grey=Piasek: Szary +sand-purple=Piasek: RΓ³ΕΌowy +sand-red=Piasek: Czerwony +sand-tan=Piasek: Opalony +sand-violet=Piasek: Fioletowy +sand-white=Piasek: BiaΕ‚y +volcanic-blue=Wulkan: Blue +volcanic-green=Wulkan: Green +volcanic-orange=Wulkan: PomaraΕ„czowy +volcanic-purple=Wulkan: RΓ³ΕΌowy + +[gui-map-generator] +cold-description=IntensywnoΕ›Δ‡ zimnych Ε‚at. +hot-description=IntensywnoΕ›Δ‡ gorΔ…cych Ε‚at. + +[entity-name] +rock=SkaΕ‚a +tree=Drzewo + +[tile-name] +landfill=SkΕ‚adowisko +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=Skala biomu +alien-biomes-temperature-low=Zakres temperatur: Niski +alien-biomes-temperature-high=Zakres temperatur: Wysoki +alien-biomes-humidity-low=Zakres wilgotnoΕ›ci: Niski +alien-biomes-humidity-high=Zakres wilgotnoΕ›ci: Wysoki +alien-biomes-aux-low=Zakres kolorystyczny: Niski +alien-biomes-aux-high=Zakres kolorystyczny: Wysoki +alien-biomes-disable-vegetation=WyΕ‚Δ…cz caΕ‚Δ… wegetacjΔ™ +alien-biomes-remove-obsolete-tiles=UsuΕ„ przestarzaΕ‚e kafelki +alien-biomes-include-dirt-aubergine=UwzglΔ™dnij kafelki: BΕ‚oto - BakΕ‚aΕΌanowy +alien-biomes-include-dirt-beige=UwzglΔ™dnij kafelki: BΕ‚oto - BeΕΌowy +alien-biomes-include-dirt-black=UwzglΔ™dnij kafelki: BΕ‚oto - Czarny +alien-biomes-include-dirt-brown=UwzglΔ™dnij kafelki: BΕ‚oto - BrΔ…zowy +alien-biomes-include-dirt-cream=UwzglΔ™dnij kafelki: BΕ‚oto - Kremowy +alien-biomes-include-dirt-dustyrose=UwzglΔ™dnij kafelki: BΕ‚oto - Zakurzony rΓ³ΕΌ +alien-biomes-include-dirt-grey=UwzglΔ™dnij kafelki: BΕ‚oto - Szary +alien-biomes-include-dirt-purple=UwzglΔ™dnij kafelki: BΕ‚oto - RΓ³ΕΌowy +alien-biomes-include-dirt-red=UwzglΔ™dnij kafelki: BΕ‚oto - Czerwony +alien-biomes-include-dirt-tan=UwzglΔ™dnij kafelki: BΕ‚oto - Opalony +alien-biomes-include-dirt-violet=UwzglΔ™dnij kafelki: BΕ‚oto - Fioletowy +alien-biomes-include-dirt-white=UwzglΔ™dnij kafelki: BΕ‚oto - BiaΕ‚y +alien-biomes-include-frozen=UwzglΔ™dnij kafelki: Frozen +alien-biomes-include-grass-blue=UwzglΔ™dnij kafelki: Trawa - Blue +alien-biomes-include-grass-green=UwzglΔ™dnij kafelki: Trawa - Green +alien-biomes-include-grass-mauve=UwzglΔ™dnij kafelki: Trawa - FioΕ‚koworΓ³ΕΌowy +alien-biomes-include-grass-olive=UwzglΔ™dnij kafelki: Trawa - Oliwkowy +alien-biomes-include-grass-orange=UwzglΔ™dnij kafelki: Trawa - PomaraΕ„czowy +alien-biomes-include-grass-purple=UwzglΔ™dnij kafelki: Trawa - RΓ³ΕΌowy +alien-biomes-include-grass-red=UwzglΔ™dnij kafelki: Trawa - Czerwony +alien-biomes-include-grass-turquoise=UwzglΔ™dnij kafelki: Trawa - Turkusowy +alien-biomes-include-grass-violet=UwzglΔ™dnij kafelki: Trawa - Fioletowy +alien-biomes-include-grass-yellow=UwzglΔ™dnij kafelki: Trawa - Ε»Γ³Ε‚ty +alien-biomes-include-sand-aubergine=UwzglΔ™dnij kafelki: Piasek - BakΕ‚aΕΌanowy +alien-biomes-include-sand-beige=UwzglΔ™dnij kafelki: Piasek - BeΕΌowy +alien-biomes-include-sand-black=UwzglΔ™dnij kafelki: Piasek - Czarny +alien-biomes-include-sand-brown=UwzglΔ™dnij kafelki: Piasek - BrΔ…zowy +alien-biomes-include-sand-cream=UwzglΔ™dnij kafelki: Piasek - Kremowy +alien-biomes-include-sand-dustyrose=UwzglΔ™dnij kafelki: Piasek - Zakurzony rΓ³ΕΌ +alien-biomes-include-sand-grey=UwzglΔ™dnij kafelki: Piasek - Szary +alien-biomes-include-sand-purple=UwzglΔ™dnij kafelki: Piasek - RΓ³ΕΌowy +alien-biomes-include-sand-red=UwzglΔ™dnij kafelki: Piasek - Czerwony +alien-biomes-include-sand-tan=UwzglΔ™dnij kafelki: Piasek - Opalony +alien-biomes-include-sand-violet=UwzglΔ™dnij kafelki: Piasek - Fioletowy +alien-biomes-include-sand-white=UwzglΔ™dnij kafelki: Piasek - BiaΕ‚y +alien-biomes-include-volcanic-blue=UwzglΔ™dnij kafelki: Wulkaniczny - Blue +alien-biomes-include-volcanic-green=UwzglΔ™dnij kafelki: Wulkaniczny - Green +alien-biomes-include-volcanic-orange=UwzglΔ™dnij kafelki: Wulkaniczny - PomaraΕ„czowy +alien-biomes-include-volcanic-purple=UwzglΔ™dnij kafelki: Wulkaniczny - RΓ³ΕΌowy +alien-biomes-include-inland-shallows=UwzglΔ™dnij kafelki: PΕ‚ytki Ε›rΓ³dlΔ…dowe +alien-biomes-include-coastal-shallows=UwzglΔ™dnij kafelki: PΕ‚ytki przybrzeΕΌne +tile-speed-reduction=Zmniejszenie prΔ™dkoΕ›ci na pΕ‚ytkach % + +[mod-setting-description] +alien-biomes-terrain-scale=ZwiΔ™ksz lub zmniejsz rozmiar biomu. NiΕΌsze wartoΕ›ci tworzΔ… mniejsze, czΔ™stsze biomy. DomyΕ›lnie jest to 100. +alien-biomes-temperature-low=Ekstremalne niΕΌsze temperatury planety. Zmniejsz, aby dodaΔ‡ wiΔ™cej zamarzniΔ™tego Ε›niegu i lodu. ZwiΔ™ksz, aby zamroΕΌone obszary byΕ‚y mniej powszechne lub niemoΕΌliwe. DomyΕ›lnie jest to -50. +alien-biomes-temperature-high=Ekstremalne wyΕΌsze temperatury planety. ZwiΔ™ksz, aby dodaΔ‡ wiΔ™cej obszarΓ³w wulkanicznych. Zmniejsz, aby obszary wulkaniczne byΕ‚y mniej powszechne lub niemoΕΌliwe. DomyΕ›lnie jest to 150. +alien-biomes-humidity-low=Ekstremalne poziomy wilgotnoΕ›ci na planecie. Zmniejsz, aby dodaΔ‡ wiΔ™cej pustyni. ZwiΔ™ksz, aby obszary pustynne byΕ‚y mniej powszechne lub niemoΕΌliwe. DomyΕ›lnie 0. +alien-biomes-humidity-high=Ekstremalne poziomy wilgotnoΕ›ci na planecie. ZwiΔ™ksz, aby dodaΔ‡ wiΔ™cej obszarΓ³w trawiastych. Zmniejsz, aby obszary traw byΕ‚y mniej powszechne lub niemoΕΌliwe. DomyΕ›lnie jest to 100. +alien-biomes-aux-low=Ekstremalne rΓ³ΕΌnice kolorystyczne planety. Zmniejsz, aby dodaΔ‡ wiΔ™cej kolorΓ³w zielonego / brΔ…zowego / opalonego. ZwiΔ™ksz, aby kolory zielony / brΔ…zowy / jasnobrΔ…zowy byΕ‚y mniej powszechne. DomyΕ›lnie 0. +alien-biomes-aux-high=Ekstremalne rΓ³ΕΌnice kolorystyczne planety. ZwiΔ™ksz, aby dodaΔ‡ wiΔ™cej kolorΓ³w niebieski / fioletowy / czerwony. Zmniejsz, aby kolory niebieski / fioletowy / czerwony byΕ‚y mniej powszechne. DomyΕ›lnie jest to 100. +alien-biomes-disable-vegetation=JeΕ›li zaznaczone, nie pojawi siΔ™ ΕΌaden trawiasty teren, drzewa ani ozdoby roΕ›linne (chyba ΕΌe zostanie dodany przez inny mod). Pozwala to symulowaΔ‡ martwΔ… planetΔ™, ksiΔ™ΕΌyc lub asteroidΔ™. +alien-biomes-remove-obsolete-tiles=Alien Biomes zastΔ™puje wiele podstawowych pΕ‚ytek. PrzestarzaΕ‚e kafelki moΕΌna usunΔ…Δ‡, aby zwolniΔ‡ dodatkowe miejsca na kafelki, dziΔ™ki czemu moΕΌna zastosowaΔ‡ wiΔ™cej modΓ³w, ktΓ³re dodajΔ… kafelki (jest limit 255 kafelkΓ³w). MoΕΌe to powodowaΔ‡ problemy z innymi modami, ktΓ³re wymagajΔ… tych pΕ‚ytek podstawowych. +alien-biomes-reduced-tiles=Zredukowane warianty pΕ‚ytek +tile-speed-reduction=NiektΓ³re pΕ‚ytki (jak gorΔ…cy teren wulkaniczny) zmniejszajΔ… prΔ™dkoΕ›Δ‡ gracza. Zmniejszenie tej liczby oznacza, ΕΌe teren ciΔ™ spowolni. diff --git a/alien-biomes/locale/ru/strings.cfg b/alien-biomes/locale/ru/strings.cfg new file mode 100644 index 00000000..d4b282f0 --- /dev/null +++ b/alien-biomes/locale/ru/strings.cfg @@ -0,0 +1,180 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=Π’Ρ€Π°Π²Π° +grass-1=Π’Ρ€Π°Π²Π° 1 +grass-2=Π’Ρ€Π°Π²Π° 2 +grass-3=Π’Ρ€Π°Π²Π° 3 +grass-4=Π’Ρ€Π°Π²Π° 4 +dirt=Π“Ρ€ΡΠ·ΡŒ +dirt-1=Π“Ρ€ΡΠ·ΡŒ 1 +dirt-2=Π“Ρ€ΡΠ·ΡŒ 2 +dirt-3=Π“Ρ€ΡΠ·ΡŒ 3 +dirt-4=Π“Ρ€ΡΠ·ΡŒ 4 +dirt-5=Π“Ρ€ΡΠ·ΡŒ 5 +dirt-6=Π“Ρ€ΡΠ·ΡŒ 6 +dirt-7=Π“Ρ€ΡΠ·ΡŒ 7 +sand=ПСсок +sand-1=ПСсок 1 +sand-2=ПСсок 2 +sand-3=ПСсок 3 +snow=Π‘Π½Π΅Π³ +snow-0=Π‘Π½Π΅Π³ 0 +snow-1=Π‘Π½Π΅Π³ 1 +snow-2=Π‘Π½Π΅Π³ 2 +snow-3=Π‘Π½Π΅Π³ 3 +snow-4=Π‘Π½Π΅Π³ 4 +snow-5=Π‘Π½Π΅Π³ 5 (Π›Ρ‘Π΄) +snow-6=Π‘Π½Π΅Π³ 6 (Π›Ρ‘Π΄) +snow-7=Π‘Π½Π΅Π³ 7 (Π›Ρ‘Π΄) +snow-8=Π‘Π½Π΅Π³ 8 (Π›Ρ‘Π΄) +snow-9=Π‘Π½Π΅Π³ 9 (Π›Ρ‘Π΄) +heat-1=ΠŸΡ€ΠΎΡ…Π»Π°Π΄Π½Ρ‹ΠΉ +heat-2=Π’Ρ‘ΠΏΠ»Ρ‹ΠΉ +heat-3=Горячий +heat-4=ΠžΠ±ΠΆΠΈΠ³Π°ΡŽΡ‰ΠΈΠΉ +frozen=Π—Π°ΠΌΡ‘Ρ€Π·ΡˆΠΈΠΉ +volcanic=ВулканичСский +aubergine=Π‘Π°ΠΊΠ»Π°ΠΆΠ°Π½Π½Ρ‹ΠΉ +beige=Π‘Π΅ΠΆΠ΅Π²Ρ‹ΠΉ +black=Π§Π΅Ρ€Π½Ρ‹ΠΉ +blue=Π‘ΠΈΠ½ΠΈΠΉ +brown=ΠšΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +cream=ΠšΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ +dustyrose=ΠŸΡ‹Π»ΡŒΠ½ΠΎ-Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ +green=Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ +grey=Π‘Π΅Ρ€Ρ‹ΠΉ +purple=ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +red=ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +tan=Π–Ρ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +violet=Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +white=Π‘Π΅Π»Ρ‹ΠΉ +mauve=Π ΠΎΠ·ΠΎΠ²Π°Ρ‚ΠΎ-Π»ΠΈΠ»ΠΎΠ²Ρ‹ΠΉ +turquoise=Π‘ΠΈΡ€ΡŽΠ·ΠΎΠ²Ρ‹ΠΉ +olive=ΠžΠ»ΠΈΠ²ΠΊΠΎΠ²Ρ‹ΠΉ +orange=ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ +yellow=Π–Ρ‘Π»Ρ‚Ρ‹ΠΉ +ab-tree=__1__ __2__ Π΄Π΅Ρ€Π΅Π²ΠΎ + +[autoplace-control-names] +temperature=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +cold=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°: Π₯ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠΌΠ°Ρ‚ +hot=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°: Горячий ΠΊΠ»ΠΈΠΌΠ°Ρ‚ +dirt-aubergine=Π“Ρ€ΡΠ·ΡŒ: Π‘Π°ΠΊΠ»Π°ΠΆΠ°Π½Π½Ρ‹ΠΉ +dirt-beige=Π“Ρ€ΡΠ·ΡŒ: Π‘Π΅ΠΆΠ΅Π²Ρ‹ΠΉ +dirt-black=Π“Ρ€ΡΠ·ΡŒ: Π§Ρ‘Ρ€Π½Ρ‹ΠΉ +dirt-brown=Π“Ρ€ΡΠ·ΡŒ: ΠšΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +dirt-cream=Π“Ρ€ΡΠ·ΡŒ: ΠšΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ +dirt-dustyrose=Π“Ρ€ΡΠ·ΡŒ: ΠŸΡ‹Π»ΡŒΠ½ΠΎ-Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ +dirt-grey=Π“Ρ€ΡΠ·ΡŒ: Π‘Π΅Ρ€Ρ‹ΠΉ +dirt-purple=Π“Ρ€ΡΠ·ΡŒ: ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +dirt-red=Π“Ρ€ΡΠ·ΡŒ: ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +dirt-tan=Π“Ρ€ΡΠ·ΡŒ: Π–Ρ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +dirt-violet=Π“Ρ€ΡΠ·ΡŒ: Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +dirt-white=Π“Ρ€ΡΠ·ΡŒ: Π‘Π΅Π»Ρ‹ΠΉ +frozen=Π—Π°ΠΌΡ‘Ρ€Π·ΡˆΠΈΠΉ +grass-blue=Π’Ρ€Π°Π²Π°: Π‘ΠΈΠ½ΠΈΠΉ +grass-green=Π’Ρ€Π°Π²Π°: Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ +grass-mauve=Π’Ρ€Π°Π²Π°: Π ΠΎΠ·ΠΎΠ²Π°Ρ‚ΠΎ-Π»ΠΈΠ»ΠΎΠ²Ρ‹ΠΉ +grass-olive=Π’Ρ€Π°Π²Π°: ΠžΠ»ΠΈΠ²ΠΊΠΎΠ²Ρ‹ΠΉ +grass-orange=Π’Ρ€Π°Π²Π°: ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ +grass-purple=Π’Ρ€Π°Π²Π°: ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +grass-red=Π’Ρ€Π°Π²Π°: ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +grass-turquoise=Π’Ρ€Π°Π²Π°: Π‘ΠΈΡ€ΡŽΠ·ΠΎΠ²Ρ‹ΠΉ +grass-violet=Π’Ρ€Π°Π²Π°: Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +grass-yellow=Π’Ρ€Π°Π²Π°: Π–Ρ‘Π»Ρ‚Ρ‹ΠΉ +sand-aubergine=ПСсок: Π‘Π°ΠΊΠ»Π°ΠΆΠ°Π½Π½Ρ‹ΠΉ +sand-beige=ПСсок: Π‘Π΅ΠΆΠ΅Π²Ρ‹ΠΉ +sand-black=ПСсок: Π§Ρ‘Ρ€Π½Ρ‹ΠΉ +sand-brown=ПСсок: ΠšΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +sand-cream=ПСсок: ΠšΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ +sand-dustyrose=ПСсок: ΠŸΡ‹Π»ΡŒΠ½ΠΎ-Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ +sand-grey=ПСсок: Π‘Π΅Ρ€Ρ‹ΠΉ +sand-purple=ПСсок: ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +sand-red=ПСсок: ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +sand-tan=ПСсок: Π–Ρ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +sand-violet=ПСсок: Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +sand-white=ПСсок: Π‘Π΅Π»Ρ‹ΠΉ +volcanic-blue=ВулканичСский: Π‘ΠΈΠ½ΠΈΠΉ +volcanic-green=ВулканичСский: Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ +volcanic-orange=ВулканичСский: ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ +volcanic-purple=ВулканичСский: ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ + +[gui-map-generator] +cold-description=Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹Ρ… участков. +hot-description=Π˜Π½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ горячих участков. + +[entity-name] +rock=Π‘ΠΊΠ°Π»Π° +tree=Π”Π΅Ρ€Π΅Π²ΠΎ + +[tile-name] +landfill=ΠžΡ‚ΡΡ‹ΠΏΠΊΠ° +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=ΠœΠ°ΡΡˆΡ‚Π°Π± Π±ΠΈΠΎΠΌΠ° +alien-biomes-temperature-low=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: Низкий +alien-biomes-temperature-high=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: Высокий +alien-biomes-humidity-low=Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ влаТности: Низкий +alien-biomes-humidity-high=Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ влаТности: Высокий +alien-biomes-aux-low=Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: Низкий +alien-biomes-aux-high=Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: Высокий +alien-biomes-disable-vegetation=Π£Π±Ρ€Π°Ρ‚ΡŒ всю Ρ€Π°ΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ +alien-biomes-remove-obsolete-tiles=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ‚Π°ΠΉΠ»Ρ‹ +alien-biomes-include-dirt-aubergine=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π‘Π°ΠΊΠ»Π°ΠΆΠ°Π½Π½Ρ‹ΠΉ +alien-biomes-include-dirt-beige=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π‘Π΅ΠΆΠ΅Π²Ρ‹ΠΉ +alien-biomes-include-dirt-black=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π§Ρ‘Ρ€Π½Ρ‹ΠΉ +alien-biomes-include-dirt-brown=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - ΠšΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +alien-biomes-include-dirt-cream=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - ΠšΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-dirt-dustyrose=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - ΠŸΡ‹Π»ΡŒΠ½ΠΎ-Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-dirt-grey=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π‘Π΅Ρ€Ρ‹ΠΉ +alien-biomes-include-dirt-purple=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +alien-biomes-include-dirt-red=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +alien-biomes-include-dirt-tan=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π–Ρ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +alien-biomes-include-dirt-violet=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-dirt-white=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π“Ρ€ΡΠ·ΡŒ - Π‘Π΅Π»Ρ‹ΠΉ +alien-biomes-include-frozen=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π—Π°ΠΌΡ‘Ρ€Π·ΡˆΠΈΠΉ +alien-biomes-include-grass-blue=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π‘ΠΈΠ½ΠΈΠΉ +alien-biomes-include-grass-green=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ +alien-biomes-include-grass-mauve=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π ΠΎΠ·ΠΎΠ²Π°Ρ‚ΠΎ-Π»ΠΈΠ»ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-grass-olive=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - ΠžΠ»ΠΈΠ²ΠΊΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-grass-orange=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ +alien-biomes-include-grass-purple=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +alien-biomes-include-grass-red=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +alien-biomes-include-grass-turquoise=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π‘ΠΈΡ€ΡŽΠ·ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-grass-violet=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-grass-yellow=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: Π’Ρ€Π°Π²Π° - Π–Ρ‘Π»Ρ‚Ρ‹ΠΉ +alien-biomes-include-sand-aubergine=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π‘Π°ΠΊΠ»Π°ΠΆΠ°Π½Π½Ρ‹ΠΉ +alien-biomes-include-sand-beige=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π‘Π΅ΠΆΠ΅Π²Ρ‹ΠΉ +alien-biomes-include-sand-black=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π§Ρ‘Ρ€Π½Ρ‹ΠΉ +alien-biomes-include-sand-brown=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - ΠšΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +alien-biomes-include-sand-cream=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - ΠšΡ€Π΅ΠΌΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-sand-dustyrose=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - ΠŸΡ‹Π»ΡŒΠ½ΠΎ-Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-sand-grey=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π‘Π΅Ρ€Ρ‹ΠΉ +alien-biomes-include-sand-purple=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +alien-biomes-include-sand-red=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ +alien-biomes-include-sand-tan=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π–Ρ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ +alien-biomes-include-sand-violet=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π€ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹ΠΉ +alien-biomes-include-sand-white=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ПСсок - Π‘Π΅Π»Ρ‹ΠΉ +alien-biomes-include-volcanic-blue=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ВулканичСский - Π‘ΠΈΠ½ΠΈΠΉ +alien-biomes-include-volcanic-green=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ВулканичСский - Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ +alien-biomes-include-volcanic-orange=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ВулканичСский - ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ +alien-biomes-include-volcanic-purple=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΉΠ»Ρ‹: ВулканичСский - ΠŸΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ +alien-biomes-include-inland-shallows=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ мСлководьС +alien-biomes-include-coastal-shallows=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ΅ мСлководьС +alien-biomes-include-rivers=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ€Π΅ΠΊ (Π±Π΅Ρ‚Π°) +tile-speed-reduction=УмСньшСниС скорости Ρ‚Π°ΠΉΠ»Π° Π² % + +[mod-setting-description] +alien-biomes-terrain-scale=Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΈΠΎΠΌΠ°. МСньшиС значСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π±ΠΈΠΎΠΌΡ‹ мСньшС, Π½ΠΎ Ρ‡Π°Ρ‰Π΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 100. +alien-biomes-temperature-low=НиТняя Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ снСга ΠΈ льда. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π·Π°ΠΌΡ‘Ρ€Π·ΡˆΠΈΠ΅ участки. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -50. +alien-biomes-temperature-high=ВСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вулканичСских областСй. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π΅ΠΆΠ΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 150. +alien-biomes-humidity-low=НиТняя Π³Ρ€Π°Π½ΠΈΡ†Π° влаТности. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΡΡ‚Ρ‹Π½ΡŒ. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ пустыни. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0. +alien-biomes-humidity-high=ВСрхняя Π³Ρ€Π°Π½ΠΈΡ‡Π° влаТности. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°ΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ€Π΅ΠΆΠ΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 100. +alien-biomes-aux-low=НиТняя Π³Ρ€Π°Π½ΠΈΡ†Π° Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Ρ†Π²Π΅Ρ‚Π°. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ/ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ/ΠΆΡ‘Π»Ρ‚ΠΎ-ΠΊΠΎΡ€ΠΈΡ‡Π½Π΅Π²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚Π°. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этих Ρ†Π²Π΅Ρ‚ΠΎΠ² стало мСньшС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 0. +alien-biomes-aux-high=ВСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Ρ†Π²Π΅Ρ‚Π°. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ синий/ΠΏΡƒΡ€ΠΏΡƒΡ€Π½Ρ‹ΠΉ/красный Ρ†Π²Π΅Ρ‚Π°. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этих Ρ†Π²Π΅Ρ‚ΠΎΠ² стало мСньшС. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 100. +alien-biomes-disable-vegetation=Если ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, Π½Π° повСрхности Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Π²Ρ‹, Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ Ρ€Π°ΡΡ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Ρ‹ Π½Π΅ добавят). Π­Ρ‚ΠΎ сдСлано для симуляции ΠΌΡ‘Ρ€Ρ‚Π²ΠΎΠΉ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹, Π»ΡƒΠ½Ρ‹ ΠΈΠ»ΠΈ астСроида. +alien-biomes-remove-obsolete-tiles=Alien Biomes замСняСт мноТСство стандартных Ρ‚Π°ΠΉΠ»ΠΎΠ². Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Ρ‚Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто для Ρ‚Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ² (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ 255 Ρ‚Π°ΠΉΠ»ΠΎΠ²). Но ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти стандартныС Ρ‚Π°ΠΉΠ»Ρ‹. +alien-biomes-reduced-tiles=Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ‚Π°ΠΉΠ»ΠΎΠ² +tile-speed-reduction=НСкоторыС Ρ‚Π°ΠΉΠ»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вулканичСская зСмля) ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠΊΠ°. Число ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Π½Π° сколько ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ваша ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. diff --git a/alien-biomes/locale/zh-CN/strings.cfg b/alien-biomes/locale/zh-CN/strings.cfg new file mode 100644 index 00000000..93b7c55c --- /dev/null +++ b/alien-biomes/locale/zh-CN/strings.cfg @@ -0,0 +1,179 @@ +[alien-biomes] +doublestring=__1__ __2__ +grass=θ‰εœ° +grass-1=θ‰εœ° 1 +grass-2=θ‰εœ° 2 +grass-3=θ‰εœ° 3 +grass-4=θ‰εœ° 4 +dirt=土地 +dirt-1=土地 1 +dirt-2=土地 2 +dirt-3=土地 3 +dirt-4=土地 4 +dirt-5=土地5 +dirt-6=土地 6 +dirt-7=土地 7 +sand=ζ²™ζΌ  +sand-1=ζ²™ζΌ  1 +sand-2=ζ²™ζΌ  2 +sand-3=ζ²™ζΌ  3 +snow=ι›ͺ地 +snow-0=ι›ͺ地 0 +snow-1=ι›ͺ地 1 +snow-2=ι›ͺ地 2 +snow-3=ι›ͺ地 3 +snow-4=ι›ͺ地 4 +snow-5=ι›ͺ地 5 (ε†°) +snow-6=ι›ͺ地 6 (ε†°) +snow-7=ι›ͺ地 7 (ε†°) +snow-8=ι›ͺ地 8 (ε†°) +snow-9=ι›ͺ地 9 (ε†°) +heat-1=ε‡‰ηˆ½ +heat-2=ζΈ©ζš– +heat-3=η‚Žηƒ­ +heat-4=灼热 +frozen=ζžε―’ +volcanic=火山地葨 +aubergine=紫纒色 +beige=米黄色 +black=黑色 +blue=蓝色 +brown=棕色 +cream=淑黄色 +dustyrose=η°ηŽ«η‘°θ‰² +green=绿色 +grey=灰色 +purple=紫色 +red=纒色 +tan=棕耐色 +violet=η΄«η½—ε…° +white=白色 +mauve=淑紫色 +turquoise=蓝绿色 +olive=黄棕色 +orange=橙色 +yellow=黄色 + +[autoplace-control-names] +temperature=ζΈ©εΊ¦ +cold=ζΈ©εΊ¦:ε―’εΈ¦ζ°”ε€™ +hot=ζΈ©εΊ¦:ηƒ­εΈ¦ζ°”ε€™ +dirt-aubergine=土地:紫纒色 +dirt-beige=土地:米黄色 +dirt-black=土地:黑色 +dirt-brown=土地:棕色 +dirt-cream=土地:淑黄色 +dirt-dustyrose=土地:η°ηŽ«η‘°θ‰² +dirt-grey=土地:灰色 +dirt-purple=土地:紫色 +dirt-red=土地:纒色 +dirt-tan=土地:棕耐色 +dirt-violet=土地:紫罗兰色 +dirt-white=土地:白色 +frozen=ζžε―’ +grass-blue=θ‰εœ°: 蓝色 +grass-green=θ‰εœ°: 绿色 +grass-mauve=θ‰εœ°: 淑紫色 +grass-olive=θ‰εœ°: 黄绿色 +grass-orange=θ‰εœ°: 橙色 +grass-purple=θ‰εœ°: 紫色 +grass-red=θ‰εœ°: 纒色 +grass-turquoise=θ‰εœ°: 蓝绿色 +grass-violet=θ‰εœ°: 紫罗兰色 +grass-yellow=θ‰εœ°: 黄色 +sand-aubergine=ζ²™ζΌ : 紫纒色 +sand-beige=ζ²™ζΌ : 米黄色 +sand-black=ζ²™ζΌ : 黑色 +sand-brown=ζ²™ζΌ : 棕色 +sand-cream=ζ²™ζΌ : 淑黄色 +sand-dustyrose=ζ²™ζΌ : η°ηŽ«η‘°θ‰² +sand-grey=ζ²™ζΌ : 灰色 +sand-purple=ζ²™ζΌ : 紫色 +sand-red=ζ²™ζΌ : 纒色 +sand-tan=ζ²™ζΌ : 棕耐色 +sand-violet=ζ²™ζΌ : 紫罗兰色 +sand-white=ζ²™ζΌ : 白色 +volcanic-blue=火山地葨: 蓝色 +volcanic-green=火山地葨: 绿色 +volcanic-orange=火山地葨: 橙色 +volcanic-purple=火山地葨: 紫色 + +[gui-map-generator] +cold-description=ε―’ζ΅ηš„εΌΊεΊ¦γ€‚ +hot-description=ζš–ζ΅ηš„εΌΊεΊ¦γ€‚ + +[entity-name] +rock=岩石 +tree=ζ ‘ζœ¨ + +[tile-name] +landfill=ε‘«ζ΅·ζ–™ +tile_single=__1__ +tile_colored=__1__ __2__ + +[mod-setting-name] +alien-biomes-terrain-scale=η”Ÿη‰©ηΎ€θ½θ§„ζ¨‘ +alien-biomes-temperature-low=ζΈ©εΊ¦θŒƒε›΄: 低 +alien-biomes-temperature-high=ζΈ©εΊ¦θŒƒε›΄: 高 +alien-biomes-humidity-low=ζΉΏεΊ¦θŒƒε›΄: 低 +alien-biomes-humidity-high=ζΉΏεΊ¦θŒƒε›΄: 高 +alien-biomes-aux-low=ι™„εŠ θŒƒε›΄: 低 +alien-biomes-aux-high=ι™„εŠ θŒƒε›΄: 高 +alien-biomes-disable-vegetation=εˆ ι™€ζ‰€ζœ‰ζ€θ’« +alien-biomes-remove-obsolete-tiles=εˆ ι™€θΏ‡ζ—Άηš„εœ°ε½’ +alien-biomes-include-dirt-aubergine=εŒ…ε«εœ°ε½’: 土地 - 紫纒色 +alien-biomes-include-dirt-beige=εŒ…ε«εœ°ε½’: 土地 - 米黄色 +alien-biomes-include-dirt-black=εŒ…ε«εœ°ε½’: 土地 - 黑色 +alien-biomes-include-dirt-brown=εŒ…ε«εœ°ε½’: 土地 - 棕色 +alien-biomes-include-dirt-cream=εŒ…ε«εœ°ε½’: 土地 - 桅黄色 +alien-biomes-include-dirt-dustyrose=εŒ…ε«εœ°ε½’: 土地 - η°ηŽ«η‘°θ‰² +alien-biomes-include-dirt-grey=εŒ…ε«εœ°ε½’: 土地 - 灰色 +alien-biomes-include-dirt-purple=εŒ…ε«εœ°ε½’: 土地 - 紫色 +alien-biomes-include-dirt-red=εŒ…ε«εœ°ε½’: 土地 - 纒色 +alien-biomes-include-dirt-tan=εŒ…ε«εœ°ε½’: 土地 - 棕耐色 +alien-biomes-include-dirt-violet=εŒ…ε«εœ°ε½’: 土地 - 紫罗兰色 +alien-biomes-include-dirt-white=εŒ…ε«εœ°ε½’: 土地 - 白色 +alien-biomes-include-frozen=εŒ…ε«εœ°ε½’: ζžε―’ +alien-biomes-include-grass-blue=εŒ…ε«εœ°ε½’: θ‰εœ° - 蓝色 +alien-biomes-include-grass-green=εŒ…ε«εœ°ε½’: θ‰εœ° - 绿色 +alien-biomes-include-grass-mauve=εŒ…ε«εœ°ε½’: θ‰εœ° - 淑紫色 +alien-biomes-include-grass-olive=εŒ…ε«εœ°ε½’: θ‰εœ° - 黄绿色 +alien-biomes-include-grass-orange=εŒ…ε«εœ°ε½’: θ‰εœ° - 橙色 +alien-biomes-include-grass-purple=εŒ…ε«εœ°ε½’: θ‰εœ° - 紫色 +alien-biomes-include-grass-red=εŒ…ε«εœ°ε½’: θ‰εœ° - 纒色 +alien-biomes-include-grass-turquoise=εŒ…ε«εœ°ε½’: θ‰εœ° - 蓝绿色 +alien-biomes-include-grass-violet=εŒ…ε«εœ°ε½’: θ‰εœ° - 紫罗兰色 +alien-biomes-include-grass-yellow=εŒ…ε«εœ°ε½’: θ‰εœ° - 黄色 +alien-biomes-include-sand-aubergine=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 紫纒色 +alien-biomes-include-sand-beige=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 米黄色 +alien-biomes-include-sand-black=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 黑色 +alien-biomes-include-sand-brown=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 棕色 +alien-biomes-include-sand-cream=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 淑黄色 +alien-biomes-include-sand-dustyrose=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - η°ηŽ«η‘°θ‰² +alien-biomes-include-sand-grey=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 灰色 +alien-biomes-include-sand-purple=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 紫色 +alien-biomes-include-sand-red=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 纒色 +alien-biomes-include-sand-tan=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 棕耐色 +alien-biomes-include-sand-violet=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 紫罗兰色 +alien-biomes-include-sand-white=εŒ…ε«εœ°ε½’: ζ²™ζΌ  - 白色 +alien-biomes-include-volcanic-blue=εŒ…ε«εœ°ε½’: 火山地葨 - 蓝色 +alien-biomes-include-volcanic-green=εŒ…ε«εœ°ε½’: 火山地葨 - 绿色 +alien-biomes-include-volcanic-orange=εŒ…ε«εœ°ε½’: 火山地葨 - 橙色 +alien-biomes-include-volcanic-purple=εŒ…ε«εœ°ε½’: 火山地葨 - 紫色 +alien-biomes-include-inland-shallows=εŒ…ε«ε†…ι™†ζ΅…ζ»© +alien-biomes-include-coastal-shallows=εŒ…ε«ζ²Ώζ΅·ζ΅…ζ»© +alien-biomes-include-rivers=εŒ…ε«ζ²³ζ΅(εΌ€ε‘δΈ­εŠŸθƒ½) +tile-speed-reduction=εœ°ε½’ε‡ι€Ÿ % + +[mod-setting-description] +alien-biomes-terrain-scale=ε’žεŠ ζˆ–ε‡ε°‘η”Ÿη‰©ηΎ€θ½ηš„ε€§ε°γ€‚θΎƒδ½Žηš„ε€ΌδΊ§η”Ÿζ›΄ε°γ€ζ›΄ι’‘ηΉηš„η”Ÿη‰©ηΎ€θ½γ€‚ι»˜θ€ε€ΌδΈΊ 100。 +alien-biomes-temperature-low=δ»£θ‘¨ζ˜Ÿηƒηš„ζΈ©εΊ¦δΈ‹ι™γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šηš„ι›ͺεœ°ε’Œε†°η›–εœ°ε½’γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšδ½Ώζžε―’εœ°ε½’δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ -50。 +alien-biomes-temperature-high=δ»£θ‘¨ζ˜Ÿηƒηš„ζΈ©εΊ¦δΈŠι™γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šηš„η«ε±±εœ°ε½’γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšδ½Ώη«ε±±εœ°ε½’δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ 150。 +alien-biomes-humidity-low=δ»£θ‘¨ζ˜Ÿηƒηš„ζΉΏεΊ¦δΈ‹ι™γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šηš„ζ²™ζΌ εœ°ε½’γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšδ½Ώζ²™ζΌ εœ°ε½’δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ 0。 +alien-biomes-humidity-high=δ»£θ‘¨ζ˜Ÿηƒηš„ζΉΏεΊ¦δΈŠι™γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šηš„θ‰εœ°γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšδ½Ώθ‰εœ°δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ 100。 +alien-biomes-aux-low=δ»£θ‘¨ζ˜Ÿηƒηš„ι’œθ‰²ε€šζ ·ζ€§δΈ‹ι™γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šη»Ώθ‰² / 棕色 / ζ£•θ€θ‰²εœ°ε½’γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšδ½Ώη»Ώθ‰² / 棕色 /ζ£•θ€θ‰²εœ°ε½’δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ 0。 +alien-biomes-aux-high=δ»£θ‘¨ζ˜Ÿηƒηš„ι’œθ‰²ε€šζ ·δΈŠι™γ€‚ζι«˜θΏ™δΈͺε€ΌδΌšε’žεŠ ζ›΄ε€šηš„θ“θ‰² / 紫色 / ηΊ’θ‰²εœ°ε½’γ€‚ι™δ½ŽθΏ™δΈͺε€ΌδΌšδ½Ώθ“θ‰² / 紫色 / ηΊ’θ‰²εœ°ε½’δ½ŽδΊŽζ­£εΈΈε€Όζˆ–η›΄ζŽ₯η¦η”¨γ€‚ι»˜θ€ε€ΌδΈΊ 100。 +alien-biomes-disable-vegetation=ε¦‚ζžœε―η”¨οΌŒζ‰€ζœ‰ηš„θ‰εœ°εœ°ε½’οΌŒζ ‘ζœ¨ε’ŒεŸΊδΊŽζ€η‰©ηš„θ£…ι₯°ε°†θ’«εˆ ι™€(ι™€ιžη”±ζŽδ»–Mod添加)。这允θΈζ‚¨ζ¨‘ζ‹ŸδΈ€δΈͺζ­»εŽ»ηš„θ‘Œζ˜Ÿγ€ζœˆηƒζˆ–ε°θ‘Œζ˜Ÿγ€‚ +alien-biomes-remove-obsolete-tiles=ε€–ζ˜Ÿη”Ÿη‰©ηΎ€θ½ε–δ»£δΊ†εΎˆε€šζ™ι€šη”Ÿη‰©ηΎ€θ½γ€‚可δ»₯η§»ι™€θΏ‡ζ—Άηš„εœ°ε½’ζ₯ι‡Šζ”Ύι’ε€–ηš„εœ°ε½’ζ§½οΌŒθΏ™ζ ·ε°±ε―δ»₯δ½Ώη”¨ζ›΄ε€šηš„εœ°ε½’Mod(ζΈΈζˆι™εˆΆζœ€ε€šεͺ能使用255种地归)γ€‚θΏ™ζ ·εšε―θƒ½δΌšε―Όθ‡΄ι‚£δΊ›ιœ€θ¦εŽŸη‰ˆεœ°ε½’ηš„Modε‡ΊηŽ°ι—ι’˜γ€‚ +alien-biomes-reduced-tiles=ε‡ε°‘εœ°ε½’ε˜δ½“ +tile-speed-reduction=δΈ€δΊ›εœ°ε½’(ε¦‚η‚Žηƒ­ηš„η«ε±±εœ°ε½’)δΌšι™δ½ŽηŽ©εΆηš„η§»εŠ¨ι€ŸεΊ¦γ€‚ι™δ½ŽθΏ™δΈͺε€Όζ„ε‘³η€εœ°ε½’δΌšζ›΄ε°‘ηš„ι™δ½Žζ‚¨ηš„η§»εŠ¨ι€ŸεΊ¦γ€‚ diff --git a/alien-biomes/prototypes/biome/biome-axes.lua b/alien-biomes/prototypes/biome/biome-axes.lua new file mode 100644 index 00000000..28f06c02 --- /dev/null +++ b/alien-biomes/prototypes/biome/biome-axes.lua @@ -0,0 +1,51 @@ +-- distribution axes control biome type placement +-- volcanic +-- sand | dirt | grass +-- frozen +-- other axes used for biome subtypes (mineral/vegetation colors) +-- since new dimensions can't be created and noise layers are not sufficient +-- sub-sections of the distribution axes need to be used for subtypes +-- subtype variations (alternate textures) controlled maily by noise layers + +return { + distribution_temperature = { + dimension = "temperature", + low = -50, + high = 150, + }, + distribution_moisture = { + dimension = "water", + low = 0, + high = 1, + }, + volcanic_a = { -- heat + dimension = "temperature", + low = 100, + high = 150, + }, + volcanic_b = { -- color: orange, green, blue, purple + dimension = "aux", + low = 0, + high = 1, + }, + mineral_a = { -- saturation: greys -> purple red tan + dimension = "temperature", -- subsection of distribution axes + low = 0, + high = 100, + }, + mineral_b = { -- lightness: light tan -> dark purple + dimension = "aux", + low = 0, + high = 1, + }, + vegetation_a = { -- blue -> red + dimension = "temperature", + low = 0, + high = 100, + }, + vegetation_b = { -- green -> purple + dimension = "aux", + low = 0, + high = 1, + } +} diff --git a/alien-biomes/prototypes/biome/biome-spec.lua b/alien-biomes/prototypes/biome/biome-spec.lua new file mode 100644 index 00000000..7170528b --- /dev/null +++ b/alien-biomes/prototypes/biome/biome-spec.lua @@ -0,0 +1,86 @@ +-- multiply axes by variants +-- note: equal influence, higher ranges overlapping other optimal point range wins. +-- beach_weight defaults to -1 +return { + mineral = { -- and sand + dimensions = { distribution_temperature = {0.25, 0.75} }, + axes = { + purple = { dimensions = {mineral_a = {0.6, 1.0}, mineral_b = {0.9, 1.0}} }, + violet = { dimensions = {mineral_a = {0.6, 1.0}, mineral_b = {0.8, 0.9}} }, + red = { dimensions = {mineral_a = {0.6, 1.0}, mineral_b = {0.6, 0.8}} }, + brown = { dimensions = {mineral_a = {0.6, 1.0}, mineral_b = {0.3, 0.6}} }, + tan = { dimensions = {mineral_a = {0.6, 1.0}, mineral_b = {0.0, 0.3}} }, + aubergine = { dimensions = {mineral_a = {0.3, 0.6}, mineral_b = {0.8, 1.0}} }, + dustyrose = { dimensions = {mineral_a = {0.3, 0.6}, mineral_b = {0.6, 0.8}} }, + beige = { dimensions = {mineral_a = {0.3, 0.6}, mineral_b = {0.3, 0.6}} }, + cream = { dimensions = {mineral_a = {0.3, 0.6}, mineral_b = {0.0, 0.3}} }, + black = { dimensions = {mineral_a = {0.0, 0.3}, mineral_b = {0.7, 1.0}} }, + grey = { dimensions = {mineral_a = {0.0, 0.3}, mineral_b = {0.3, 0.7}} }, + white = { dimensions = {mineral_a = {0.0, 0.3}, mineral_b = {0.0, 0.3}} }, + }, + variants = { + ["dirt-1"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.4, 0.6}} }, + ["dirt-2"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.4, 0.6}} }, + ["dirt-3"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.6, 0.8}} }, + ["dirt-4"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.6, 0.95}} }, + ["dirt-5"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.4, 0.6}} }, + ["dirt-6"] = { transition = "beach", group = "dirt", dimensions = {distribution_moisture = {0.4, 0.6}} }, + ["sand-1"] = { transition = "beach", group = "sand", dimensions = {distribution_moisture = {0.0, 0.4}}, beach_weight = 1 }, + ["sand-2"] = { transition = "beach", group = "sand", dimensions = {distribution_moisture = {0.0, 0.4}}, beach_weight = 1 }, + ["sand-3"] = { transition = "beach", group = "sand", dimensions = {distribution_moisture = {0.0, 0.4}}, beach_weight = 1 }, + } + }, + vegetation = { + dimensions = { distribution_temperature = {0.25, 0.75}, distribution_moisture = {0.6, 1.0} }, + axes = { + turquoise = { dimensions = {vegetation_a = {0.0, 0.2}, vegetation_b = {0.0, 0.7}} }, + green = { dimensions = {vegetation_a = {0.2, 0.5}, vegetation_b = {0.0, 0.7}} }, + olive = { dimensions = {vegetation_a = {0.5, 0.65}, vegetation_b = {0.0, 0.7}} }, + yellow = { dimensions = {vegetation_a = {0.65, 0.8}, vegetation_b = {0.0, 0.7}} }, + orange = { dimensions = {vegetation_a = {0.8, 1.0}, vegetation_b = {0.0, 0.7}} }, + red = { dimensions = {vegetation_a = {0.8, 1.0}, vegetation_b = {0.7, 1.0}} }, + violet = { dimensions = {vegetation_a = {0.6, 0.8}, vegetation_b = {0.7, 1.0}} }, + purple = { dimensions = {vegetation_a = {0.4, 0.6}, vegetation_b = {0.7, 1.0}} }, + mauve = { dimensions = {vegetation_a = {0.2, 0.4}, vegetation_b = {0.7, 1.0}} }, + blue = { dimensions = {vegetation_a = {0.0, 0.2}, vegetation_b = {0.7, 1.0}} }, + }, + variants = { + ["grass-1"] = { transition = "beach", group = "grass" }, + ["grass-2"] = { transition = "beach", group = "grass" }, + ["grass-3"] = { transition = "beach", group = "grass", limit_axes = {"green"} }, + ["grass-4"] = { transition = "beach", group = "grass", limit_axes = {"green"} }, + } + }, + volcanic = { + dimensions = { distribution_temperature = {0.75, 1.0}}, + axes = { + orange = { dimensions = {volcanic_b = {0.0, 0.7}} }, + green = { dimensions = {volcanic_b = {0.7, 0.8}} }, + blue = { dimensions = {volcanic_b = {0.8, 0.9}}}, + purple = { dimensions = {volcanic_b = {0.9, 1.0}} }, + }, + variants = { + ["heat-1"] = { transition = "cliff", group = "volcanic", dimensions = {volcanic_a = {0.0, 0.4}}, beach_weight = 0 }, + ["heat-2"] = { transition = "cliff", group = "volcanic", dimensions = {volcanic_a = {0.4, 0.7}}, }, + ["heat-3"] = { transition = "cliff", group = "volcanic", dimensions = {volcanic_a = {0.7, 0.9}}, }, + ["heat-4"] = { transition = "cliff", group = "volcanic", dimensions = {volcanic_a = {0.9, 1.0}}, }, + } + }, + frozen = { + dimensions = { distribution_temperature = {0.0, 0.25}}, + variants = { + ["snow-0"] = { transition = "cliff", group = "frozen", tags={"snow"} }, -- legacy powder + ["snow-1"] = { transition = "cliff", group = "frozen", tags={"snow"} }, -- powder + ["snow-2"] = { transition = "cliff", group = "frozen", tags={"snow"} }, -- hard lumpy snow + ["snow-3"] = { transition = "cliff", group = "frozen", tags={"snow"} }, -- hard snow + ["snow-4"] = { transition = "cliff", group = "frozen", tags={"snow"} }, -- rough snow (melting?) + ["snow-5"] = { transition = "cliff", group = "frozen", tags={"ice"}, beach_weight = 1 }, -- light ice light cracks (water) + ["snow-6"] = { transition = "cliff", group = "frozen", tags={"ice"}, beach_weight = 1 }, -- dark ice light cracks + ["snow-7"] = { transition = "cliff", group = "frozen", tags={"ice"}, }, -- smooth ice + ["snow-8"] = { transition = "cliff", group = "frozen", tags={"ice"}, }, -- light lumpy ice + ["snow-9"] = { transition = "cliff", group = "frozen", tags={"ice"}, beach_weight = 1 }, -- light ice dark cracks (inland) + } + } +} +-- split on water? ice can only go in high humidity or low elevation areas (except ice-8 for variation) +-- snow-5 is the water ice (water light makes cracks light) diff --git a/alien-biomes/prototypes/biome/biomes.lua b/alien-biomes/prototypes/biome/biomes.lua new file mode 100644 index 00000000..f387a138 --- /dev/null +++ b/alien-biomes/prototypes/biome/biomes.lua @@ -0,0 +1,676 @@ +-- note: planet temperature controls could be controlled by altering noise-expression parameters +-- allow snow decals near snow transition zone +local noise = require("noise") +local Particles = require("particles") +local biomes = {} + +local tile_noise_weight = 0.5 +local tile_noise_enabled = true +local tile_noise_persistence = 0.75 + +local tile_noise_influence = 2/3 +local size_control_influence = 1 +local plateau_influence = 1 +local beach_influence = 1 +local beach_range = 5 + +local dimension_influence = nil +local noise_influence = 0.02 -- 0.05 +local terrain_noise_scale = 4 + +biomes.transitions = require("prototypes/tile/tile-transitions-static") +biomes.sounds = require("prototypes/tile/tile-sounds") +biomes.colors = require("prototypes/tile/tile-colors") +biomes.tile_alias = require("prototypes/tile/tile-alias") +biomes.axes = require("prototypes/biome/biome-axes") +biomes.spec = require("prototypes/biome/biome-spec") + +biomes.tiles_all = {} -- populate with biomes + +biomes.all_tiles = function() + return table.deepcopy(biomes.tiles_all) +end + +biomes.add_tag = function(tile, tag) + tile.tags[tag] = tag +end + +-- biomes.require_tag((biomes.require_tag(biomes.all_tiles(), {"dirt", "sand"}), {"aubergine", "purple", "violet", "mauve"}) +-- require ONE of many tags +biomes.require_tag = function(tiles, tags) + for tile_key, tile in pairs(tiles) do + local valid = false + for _, tag in pairs(tags) do + if tile.tags[tag] then valid = true break end + end + if not valid then tiles[tile_key] = nil end + end + return tiles +end + +-- require ALL of many tags +biomes.require_tags = function(tiles, tags) + for tile_key, tile in pairs(tiles) do + local valid = true + for _, tag in pairs(tags) do + if not tile.tags[tag] then valid = false break end + end + if not valid then tiles[tile_key] = nil end + end + return tiles +end + +-- add tile sets together +biomes.add_tiles = function(tiles_a, tiles_b) + local tiles = {} + for tile_key, tile in pairs(tiles_a) do + tiles[tile_key] = tile + end + for tile_key, tile in pairs(tiles_b) do + tiles[tile_key] = tile + end + return tiles +end + +-- tiles only returned if they appear in both +biomes.multiply_tiles = function(tiles_a, tiles_b) + local tiles = {} + for tile_key, tile in pairs(tiles_a) do + if tiles_b[tile_key] then + tiles[tile_key] = tile + end + end + return tiles +end + +-- require NONE of many tags +biomes.exclude_tags = function(tiles, tags) + for tile_key, tile in pairs(tiles) do + local valid = true + for _, tag in pairs(tags) do + if tile.tags[tag] then valid = false break end + end + if not valid then tiles[tile_key] = nil end + end + return tiles +end + +biomes.list_tiles = function(tiles) + local list = {} + for tile_key, tile in pairs(tiles) do + table.insert(list, tile_key) + end + return list +end + +local function scaled_noise_layer_expression(noise_name, scale) + if tile_noise_enabled == false then return noise.to_noise_expression(0) end + return noise.function_application("factorio-multioctave-noise", + { + x = noise.var("x") / scale, + y = noise.var("y") / scale, + persistence = tile_noise_persistence, + seed0 = noise.var("map_seed"), + seed1 = noise.noise_layer_name_to_id(noise_name), + input_scale = noise.fraction(1, 6), + output_scale = tile_noise_influence, + octaves = 5, + } + ) +end + +local function terrain_noise_layer_expression(i) + if tile_noise_enabled == false then return noise.to_noise_expression(0) end + return noise.function_application("factorio-multioctave-noise", + { + x = noise.var("x") / terrain_noise_scale + 1000 * i, + y = noise.var("y") / terrain_noise_scale, + persistence = tile_noise_persistence, + seed0 = noise.var("map_seed"), + seed1 = noise.noise_layer_name_to_id("terrain-variation"), + input_scale = noise.fraction(1, 6), + output_scale = tile_noise_influence, + octaves = 6, + } + ) +end + + +local function peak_to_noise_expression(variable, optimal, range) + local distance_from_optimal = noise.ridge(variable - optimal, 0, math.huge) + -- Idea is to have a plateau in the center of the rectangle, + -- edges that taper off at a consistent slope for all rectangles (so that interactions between rectangles are predictable), + return range - distance_from_optimal +end + +local function plateau_peak_to_noise_expression(variable, optimal, range) + -- Clamp rectangle-based peaks so that large rectangles don't become + -- super powerful at their centers, because we want to be able to override + -- them e.g. with beach peaks or whatever + return noise.min(peak_to_noise_expression(variable, optimal, range) * 20, 1) * plateau_influence +end + +local function volume_to_noise_expression(volume) + + local result = nil + if (volume["aux_min"] and volume["aux_max"]) then + local aux_center = (volume["aux_min"] + volume["aux_max"]) / 2 + local aux_range = math.abs(volume["aux_min"] - volume["aux_max"]) / 2 + local aux_fitness = plateau_peak_to_noise_expression(noise.var("aux"), aux_center, aux_range) + result = aux_fitness + end + + if (volume["water_min"] and volume["water_max"]) then + local water_center = (volume["water_min"] + volume["water_max"]) / 2 + local water_range = math.abs(volume["water_min"] - volume["water_max"]) / 2 + local water_fitness = plateau_peak_to_noise_expression(noise.var("moisture"), water_center, water_range) + if(result == nil) then + result = water_fitness + else + result = noise.min(result, water_fitness) + end + end + + if (volume["temperature_min"] and volume["temperature_max"]) then + local temperature_center = (volume["temperature_min"] + volume["temperature_max"]) / 2 + local temperature_range = math.abs(volume["temperature_min"] - volume["temperature_max"]) / 2 + local temperature_fitness = plateau_peak_to_noise_expression(noise.var("temperature"), temperature_center, temperature_range) + if(result == nil) then + result = temperature_fitness + else + result = noise.min(result, temperature_fitness) + end + end + + if (volume["elevation_min"] and volume["elevation_max"]) then + local elevation_center = (volume["elevation_min"] + volume["elevation_max"]) / 2 + local elevation_range = math.abs(volume["elevation_min"] - volume["elevation_max"]) / 2 + local elevation_fitness = plateau_peak_to_noise_expression(noise.var("elevation"), elevation_center, elevation_range) + if(result == nil) then + result = elevation_fitness + else + result = noise.min(result, elevation_fitness) + end + end + + return result +end + +local function apply_beach_expression(probability_expression, volume, beach_weight) + + beach_weight = (beach_weight ~= nil) and beach_weight or -1 + + if (beach_weight < 0) then + + probability_expression = probability_expression + noise.min(0, -1 + noise.var("elevation") / beach_range) + + elseif(beach_weight > 0)then + + -- boost at beaches but it must be the right type of terrain. + -- ignore the moisture axis + local volume2 = table.deepcopy(volume) + volume2.water_min = nil + volume2.water_max = nil + local sanswater = volume_to_noise_expression(volume2) + local beach = noise.min(noise.var("elevation"), 0 - noise.var("elevation")) / beach_range + + probability_expression = noise.max(probability_expression, sanswater + beach) + + end + + return probability_expression + +end + + + +biomes.combine_volume_constraints = function(volume, axis, point_a, point_b) + + local r_point_a = point_a + local r_point_b = point_b + -- dimension can be flipped + if biomes.axes[axis].reverse then + r_point_a = 1 - point_a + r_point_b = 1 - point_b + end + -- get real low and high (b might be lower than a) + local point_l = math.min(r_point_a, r_point_b) + local point_h = math.max(r_point_a, r_point_b) + + local dimension = biomes.axes[axis].dimension + + local low = biomes.axes[axis].low + local high = biomes.axes[axis].high + + local d_point_a = low + (high - low) * point_l + local d_point_b = low + (high - low) * point_h + + if(volume[dimension .. "_min"]) then + volume[dimension .. "_min"] = math.max(d_point_a, volume[dimension .. "_min"]); + else + volume[dimension .. "_min"] = d_point_a; + end + + if(volume[dimension .. "_max"]) then + volume[dimension .. "_max"] = math.min(d_point_b, volume[dimension .. "_max"]); + else + volume[dimension .. "_max"] = d_point_b; + end + + return volume +end + +function tile_variations_template(normal_res_picture, normal_res_transition, high_res_picture, high_res_transition, options) + local use_hr = high_res_picture ~= nil + local function main_variation(size_) + local y_ = ((size_ == 1) and 0) or ((size_ == 2) and 64) or ((size_ == 4) and 160) or 320 + local ret = { + picture = normal_res_picture, + count = 16, + size = size_, + y = y_, + line_length = (size_ == 8) and 8 or 16 + } + if use_hr then + ret.hr_version = + { + picture = high_res_picture, + count = 16, + size = size_, + y = 2 * y_, + line_length = (size_ == 8) and 8 or 16, + scale = 0.5 + } + end + + if options[size_] then + for k, v in pairs(options[size_]) do + ret[k] = v + if high_res_picture then + ret.hr_version[k] = v + end + end + end + + return ret + end + + local function make_transition_variation(x_, line_len_, cnt_) + local ret = { + picture = normal_res_transition, + count = cnt_ or 8, + line_length = line_len_ or 8, + x = x_, + } + if use_hr then + ret.hr_version= + { + picture = high_res_transition, + count = cnt_ or 8, + line_length = line_len_ or 8, + x = 2 * x_, + scale = 0.5, + } + end + return ret + end + + local main_ = + { + main_variation(1), + main_variation(2), + main_variation(4), + } + if (options.max_size == 8) then + table.insert(main_, main_variation(8)) + end + + return + { + main = main_, + inner_corner_mask = make_transition_variation(0), + outer_corner_mask = make_transition_variation(288), + side_mask = make_transition_variation(576), + u_transition_mask = make_transition_variation(864, 1, 1), + o_transition_mask = make_transition_variation(1152, 2, 1), + } +end + +biomes.collapse = function () + local collapsed = {} + for group_name, group in pairs(biomes.spec) do + if group.axes then + for axis_name, axis in pairs(group.axes) do + for variant_name, variant in pairs(group.variants) do + if variant.limit_axes then + -- some varient only apply to axes types, i.e. grass varients 3 and 4 only exist on green grass + local pass = false + for _, allowed in pairs(variant.limit_axes) do + if axis_name == allowed then pass = true end + end + if pass == false then break end + end + local volume = variant.volume and table.deepcopy(variant.volume) or {} + for dimension_name, dimension in pairs(group.dimensions) do + biomes.combine_volume_constraints( volume, dimension_name, dimension[1], dimension[2]) + end + for dimension_name, dimension in pairs(axis.dimensions) do + biomes.combine_volume_constraints( volume, dimension_name, dimension[1], dimension[2]) + end + if variant.dimensions then + for dimension_name, dimension in pairs(variant.dimensions) do + biomes.combine_volume_constraints( volume, dimension_name, dimension[1], dimension[2]) + end + end + + local biome = {volume = volume} + biome.group = variant.group or group_name + biome.axis = axis_name + biome.variant = variant_name + biome.transition = variant.transition + biome.tags = variant.tags or {} + biome.beach_weight = variant.beach_weight + biome.frequency = variant.frequency + biome.name = group_name .. "-" .. axis_name .. "-" .. variant_name + collapsed[biome.name] = biome + end + end + else + for variant_name, variant in pairs(group.variants) do + local volume = variant.volume and table.deepcopy(variant.volume) or {} + for dimension_name, dimension in pairs(group.dimensions) do + biomes.combine_volume_constraints( volume, dimension_name, dimension[1], dimension[2]) + end + if variant.dimensions then + for dimension_name, dimension in pairs(variant.dimensions) do + biomes.combine_volume_constraints( volume, dimension_name, dimension[1], dimension[2]) + end + end + local biome = {volume = volume} + biome.group = variant.group or group_name + biome.variant = variant_name + biome.transition = variant.transition + biome.tags = variant.tags or {} + biome.beach_weight = variant.beach_weight + biome.weight = variant.weight or 1 + biome.name = group_name .. "-" .. variant_name + collapsed[biome.name] = biome + end + end + end + biomes.collapsed = collapsed +end + +biomes.collapse() + +biomes.build_tiles = function () + + for _, tile in pairs(data.raw.tile) do + if _ ~= "water" and _ ~= "deepwater" then + data.raw.tile[_].autoplace = nil + end + end + local layer = 0 + for biome_name, biome in pairs(biomes.collapsed) do + local include_tile = true + local setting_name = "alien-biomes-include-" .. biome.group + if biome.axis then setting_name = setting_name .. "-" .. biome.axis end + + if settings.startup[setting_name] and settings.startup[setting_name].value == "Disabled" then + include_tile = false + end + if include_tile then + layer = layer + 1 + local control = biome.group + if biome.axis then control = control .. "-" .. biome.axis end + --local autoplace = { control = control, peaks = table.deepcopy(biome.peaks)} + local tile = { + name = biome_name, + tags = {} + } + for _, tag in pairs(biome.tags) do + biomes.add_tag(tile, tag) + end + biomes.add_tag(tile, biome.group) + if biome.axis then + biomes.add_tag(tile, biome.axis) + biomes.add_tag(tile, biome.group .. "-" .. biome.axis) -- "grass-purple" + end + biomes.add_tag(tile, biome.variant) + biomes.tiles_all[biome_name] = tile + + local probability_expression = volume_to_noise_expression(biome.volume) + + -- make larger patches of snow vs ice + local snow_bias = 0.4 + local water_weight = 1 + local water_scale = 8 + if (biome.group == "frozen") then + if (biome.variant == "snow-5") or + (biome.variant == "snow-6") or + (biome.variant == "snow-7") or + (biome.variant == "snow-8") or + (biome.variant == "snow-9") then + -- ice + probability_expression = probability_expression - snow_bias - water_weight * scaled_noise_layer_expression("water", water_scale) + else + probability_expression = probability_expression + snow_bias + water_weight * scaled_noise_layer_expression("water", water_scale) + end + end + + -- make patches of dirt in grass + local grass_bias = 0.6 + local grass_noise_weight = 0.7 + local grass_noise_scale = 1 + if biome.group == "vegetation" then + probability_expression = probability_expression + grass_bias - grass_noise_weight * scaled_noise_layer_expression("crater", grass_noise_scale) + elseif biome.variant == "dirt-3" or biome.variant == "dirt-4" then -- the ones in the grass moisture zone + probability_expression = probability_expression - grass_bias - grass_noise_weight * scaled_noise_layer_expression("crater", grass_noise_scale) + end + + probability_expression = apply_beach_expression(probability_expression, biome.volume, biome.beach_weight) + probability_expression = probability_expression + tile_noise_weight * terrain_noise_layer_expression(layer) + + + local tile_data = { + type = "tile", + name = biome_name, + can_be_part_of_blueprint = false, + collision_mask = {"ground-tile"}, + autoplace = {probability_expression = probability_expression}, + layer = layer, + --layer = 190 - layer, + variants = tile_variations_template( + "__alien-biomes__/graphics/terrain/sr/"..biome_name..".png", + "__base__/graphics/terrain/masks/transition-3.png", + alien_biomes_hr_terrain and "__alien-biomes-hr-terrain__/graphics/terrain/hr/"..biome_name..".png" or nil, + "__base__/graphics/terrain/masks/hr-transition-3.png", + { + max_size = 4, + [1] = { weights = {0.085, 0.085, 0.085, 0.085, 0.087, 0.085, 0.065, 0.085, 0.045, 0.045, 0.045, 0.045, 0.005, 0.025, 0.045, 0.045 } }, + [2] = { probability = 1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + [4] = { probability = 0.1, weights = {0.018, 0.020, 0.015, 0.025, 0.015, 0.020, 0.025, 0.015, 0.025, 0.025, 0.010, 0.025, 0.020, 0.025, 0.025, 0.010 }, }, + --[8] = { probability = 1.00, weights = {0.090, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.025, 0.125, 0.005, 0.010, 0.100, 0.100, 0.010, 0.020, 0.020} }, + } + ), + transitions = biomes.transitions[biome.transition .. "_transitions"](), + transitions_between_transitions = biomes.transitions[biome.transition .. "_transitions_between_transitions"](), + + walking_sound = table.deepcopy(biomes.sounds.dirt), + map_color = biomes.colors[biome_name], + pollution_absorption_per_second=0.000005, + walking_speed_modifier = 1, + vehicle_friction_modifier = 1, + } + if biome.axis then + tile_data.localised_name = { "tile-name.tile_colored", { "alien-biomes."..biome.axis }, { "alien-biomes."..biome.variant } } + else + tile_data.localised_name = { "tile-name.tile_single", { "alien-biomes."..biome.variant } } + end + if biome.group == "grass" then + tile_data.walking_sound = table.deepcopy(biomes.sounds.grass) + tile_data.walking_speed_modifier = 1 + tile_data.vehicle_friction_modifier = 1.6 + tile_data.pollution_absorption_per_second=0.0000075 + elseif biome.group == "dirt" then + tile_data.walking_sound = table.deepcopy(biomes.sounds.dirt) + tile_data.walking_speed_modifier = 1 + tile_data.vehicle_friction_modifier = 1.4 + elseif biome.group == "sand" then + tile_data.walking_sound = table.deepcopy(biomes.sounds.sand) + tile_data.walking_speed_modifier = 0.8 + tile_data.vehicle_friction_modifier = 2 + tile_data.pollution_absorption_per_second=0.0000025 + elseif biome.group == "frozen" then + tile_data.walking_sound = table.deepcopy(biomes.sounds.snow) + tile_data.walking_speed_modifier = 0.8 + tile_data.vehicle_friction_modifier = 2 + if biome.variant == "snow-5" + or biome.variant == "snow-6" + or biome.variant == "snow-7" + or biome.variant == "snow-9" then -- ice + tile_data.walking_sound = table.deepcopy(biomes.sounds.ice) + end + elseif biome.group == "volcanic" then + tile_data.walking_sound = table.deepcopy(biomes.sounds.dirt) + tile_data.pollution_absorption_per_second=0.0000025 + if biome.variant == "heat-1" then + tile_data.walking_speed_modifier = 1 + tile_data.vehicle_friction_modifier = 2 + elseif biome.variant == "heat-2" then + tile_data.walking_speed_modifier = 0.9 + tile_data.vehicle_friction_modifier = 4 + elseif biome.variant == "heat-3" then + tile_data.walking_speed_modifier = 0.8 + tile_data.vehicle_friction_modifier = 8 + elseif biome.variant == "heat-4" then + tile_data.walking_speed_modifier = 0.7 + tile_data.vehicle_friction_modifier = 16 + end + end + if tile_data.walking_speed_modifier < 1 then + local mult = settings.startup['tile-speed-reduction'].value / 100 + tile_data.walking_speed_modifier = 1 - (1 - tile_data.walking_speed_modifier) * mult + end + + data:extend({ + tile_data + }) + + -- Particles + Particles.add_tile_particles(biome) + + if biome.group == "dirt" or biome.group == "sand" or biome.group == "volcanic" or biome.group == "frozen" then + for _, character in pairs(data.raw.character) do + if character.footprint_particles and character.footprint_particles[1] and character.footprint_particles[1].tiles then + table.insert(character.footprint_particles[1].tiles, biome_name) + end + end + end + + end + end +end +biomes.build_tiles() +Particles.apply_tile_particles() -- bind to entities + +if not(settings.startup["alien-biomes-include-inland-shallows"] and settings.startup["alien-biomes-include-inland-shallows"].value == "Disabled") then + -- inland shallows, high moisture areas, allows decoratives + data.raw.tile["water-mud"].autoplace = { + probability_expression = volume_to_noise_expression({ + water_min = 0.9, + water_max = 1.1, + temperature_min = 0, + temperature_max = 100 + }) + + tile_noise_weight * noise.min(scaled_noise_layer_expression("water", 0.25), scaled_noise_layer_expression("water", 0.314)) + + noise.min(0, -1 + noise.var("elevation") / beach_range) + - 1.15 + } + data.raw.tile["water-mud"].map_color = { + r = 54, + g = 88, + b = 90, + } + data.raw.tile["water-mud"].allowed_neighbors = nil + data.raw.tile["water-mud"].collision_mask = { + "water-tile", + "floor-layer", + "resource-layer", + } + data.raw.tile["water-mud"].walking_sound = table.deepcopy(biomes.sounds.water) + data.raw.tile["water-mud"].walking_speed_modifier = 0.5 + data.raw.tile["water-mud"].vehicle_friction_modifier = 32 + biomes.tiles_all["water-mud"] = { + name = "water-mud", + tags = {"water-mud", "shallows"} + } +end + +data.raw.tile.deepwater.autoplace = make_water_autoplace_settings(-5, 200) +data.raw.tile.water.autoplace = make_water_autoplace_settings(0, 100) + +-- Coastal shallows / rivers +data.raw.tile["water-shallow"].map_color = { + r = 53, + g = 97, + b = 110, +} +data.raw.tile["water-shallow"].allowed_neighbors = nil +data.raw.tile["water-shallow"].collision_mask = { + "water-tile", + "floor-layer", + "resource-layer", + "doodad-layer", +} +data.raw.tile["water-shallow"].walking_sound = table.deepcopy(biomes.sounds.water) +data.raw.tile["water-shallow"].walking_speed_modifier = 0.5 +data.raw.tile["water-shallow"].vehicle_friction_modifier = 32 +biomes.tiles_all["water-shallow"] = { + name = "water-shallow", + tags = {"water-shallow", "shallows"} +} + + +-- Coastal +if settings.startup["alien-biomes-include-coastal-shallows"].value ~= "Disabled" + or settings.startup["alien-biomes-include-rivers"].value ~= "Disabled" then + + local weight = 200 + data.raw.tile["water-shallow"].autoplace = make_water_autoplace_settings(0, weight) + local prob = data.raw.tile["water-shallow"].autoplace.probability_expression + local coastal = prob + + scaled_noise_layer_expression("water", 0.25) * weight / 4 + + noise.var("elevation") * weight / 2 + + noise.min(noise.var("temperature"), 0) * weight * 50 + + -- rivers + local ra = noise.absolute_value(scaled_noise_layer_expression("terrain-variation", (2 + 2 / noise.var("segmentation_multiplier"))*2 )) + local rb = noise.absolute_value(scaled_noise_layer_expression("water", (2 + 2 / noise.var("segmentation_multiplier"))*1 )) + local rc = (0.05 * ra + 0.95 * noise.min(ra, rb)) + local rivers = + 2 * (volume_to_noise_expression({ + water_min = 0.66, + water_max = 1.5, + temperature_min = -20, + temperature_max = 100 + }) - 1) + -0.6 * noise.var("elevation") + + (15 + -150 * rc) + + if settings.startup["alien-biomes-include-coastal-shallows"].value ~= "Disabled" then + data.raw.tile["water-shallow"].autoplace.probability_expression = coastal + if settings.startup["alien-biomes-include-rivers"].value ~= "Disabled" then + data.raw.tile["water-shallow"].autoplace.probability_expression = noise.max(coastal, rivers) + end + else + data.raw.tile["water-shallow"].autoplace.probability_expression = rivers + end + +end + + +--log( serpent.block( data.raw["tile"], {comment = false, numformat = '%1.8g' } ) ) +--log( "biomes.tiles_all" .. serpent.block( biomes.tiles_all, {comment = false, numformat = '%1.8g' } ) ) + +return biomes diff --git a/alien-biomes/prototypes/biome/particle-animations.lua b/alien-biomes/prototypes/biome/particle-animations.lua new file mode 100644 index 00000000..0e94b2df --- /dev/null +++ b/alien-biomes/prototypes/biome/particle-animations.lua @@ -0,0 +1,3604 @@ +local sounds = require("__base__/prototypes/entity/sounds") + +particle_animations = {} + +particle_animations.get_metal_particle_big_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/metal-particle/metal-particle-big.png", + priority = "extra-high", + width = 26, + height = 22, + frame_count = 12, + tint = options.tint, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/metal-particle/hr-metal-particle-big.png", + priority = "extra-high", + width = 50, + height = 44, + frame_count = 12, + tint = options.tint, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,0.75), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_wooden_particle_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-01.png", + line_length = 4, + width = 9, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-01.png", + line_length = 4, + width = 17, + height = 16, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-02.png", + line_length = 4, + width = 2, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-02.png", + line_length = 4, + width = 4, + height = 9, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-03.png", + line_length = 4, + width = 6, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-03.png", + line_length = 4, + width = 10, + height = 14, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-04.png", + line_length = 4, + width = 5, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-04.png", + line_length = 4, + width = 8, + height = 11, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-05.png", + line_length = 4, + width = 6, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-05.png", + line_length = 4, + width = 14, + height = 13, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-06.png", + line_length = 4, + width = 7, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-06.png", + line_length = 4, + width = 14, + height = 12, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-07.png", + line_length = 4, + width = 6, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-07.png", + line_length = 4, + width = 11, + height = 10, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-08.png", + line_length = 4, + width = 8, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-08.png", + line_length = 4, + width = 17, + height = 14, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-09.png", + line_length = 4, + width = 7, + height = 8, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-09.png", + line_length = 4, + width = 14, + height = 16, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-10.png", + line_length = 4, + width = 5, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-10.png", + line_length = 4, + width = 11, + height = 20, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-11.png", + line_length = 4, + width = 10, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-11.png", + line_length = 4, + width = 21, + height = 18, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-12.png", + line_length = 4, + width = 6, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-12.png", + line_length = 4, + width = 14, + height = 32, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-13.png", + line_length = 4, + width = 7, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-13.png", + line_length = 4, + width = 14, + height = 18, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-14.png", + line_length = 4, + width = 7, + height = 12, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-14.png", + line_length = 4, + width = 12, + height = 24, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-15.png", + line_length = 4, + width = 7, + height = 10, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-15.png", + line_length = 4, + width = 14, + height = 19, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-16.png", + line_length = 4, + width = 12, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-16.png", + line_length = 4, + width = 24, + height = 12, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-17.png", + line_length = 4, + width = 12, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-17.png", + line_length = 4, + width = 25, + height = 15, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-18.png", + line_length = 4, + width = 11, + height = 11, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-18.png", + line_length = 4, + width = 22, + height = 23, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-19.png", + line_length = 4, + width = 16, + height = 15, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-19.png", + line_length = 4, + width = 32, + height = 29, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-20.png", + line_length = 4, + width = 9, + height = 14, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-20.png", + line_length = 4, + width = 17, + height = 29, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-21.png", + line_length = 4, + width = 8, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-21.png", + line_length = 4, + width = 15, + height = 32, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-22.png", + line_length = 4, + width = 17, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-22.png", + line_length = 4, + width = 34, + height = 19, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-23.png", + line_length = 4, + width = 17, + height = 22, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-23.png", + line_length = 4, + width = 34, + height = 43, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-24.png", + line_length = 4, + width = 19, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-24.png", + line_length = 4, + width = 38, + height = 33, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-25.png", + line_length = 4, + width = 23, + height = 25, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-25.png", + line_length = 4, + width = 45, + height = 50, + frame_count = 16, + scale = 0.5 + } + } + } + +end + +particle_animations.get_branch_particle_shadow_pictures = function() + return + { + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-01.png", + line_length = 4, + width = 34, + height = 32, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-01.png", + line_length = 4, + width = 66, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-02.png", + line_length = 4, + width = 44, + height = 54, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-02.png", + line_length = 4, + width = 87, + height = 107, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-03.png", + line_length = 4, + width = 60, + height = 60, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-03.png", + line_length = 4, + width = 121, + height = 119, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-04.png", + line_length = 4, + width = 13, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-04.png", + line_length = 4, + width = 26, + height = 57, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-05.png", + line_length = 4, + width = 27, + height = 21, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-05.png", + line_length = 4, + width = 53, + height = 40, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-06.png", + line_length = 4, + width = 32, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-06.png", + line_length = 4, + width = 64, + height = 46, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-07.png", + line_length = 4, + width = 33, + height = 35, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-07.png", + line_length = 4, + width = 65, + height = 69, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-08.png", + line_length = 4, + width = 14, + height = 29, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-08.png", + line_length = 4, + width = 27, + height = 60, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-09.png", + line_length = 4, + width = 26, + height = 32, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-09.png", + line_length = 4, + width = 52, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-10.png", + line_length = 4, + width = 27, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-10.png", + line_length = 4, + width = 53, + height = 55, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-11.png", + line_length = 4, + width = 25, + height = 33, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-11.png", + line_length = 4, + width = 49, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-12.png", + line_length = 4, + width = 32, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-12.png", + line_length = 4, + width = 64, + height = 56, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-13.png", + line_length = 4, + width = 25, + height = 18, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-13.png", + line_length = 4, + width = 50, + height = 35, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-14.png", + line_length = 4, + width = 27, + height = 19, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-14.png", + line_length = 4, + width = 54, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-15.png", + line_length = 4, + width = 12, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-15.png", + line_length = 4, + width = 23, + height = 30, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-16.png", + line_length = 4, + width = 12, + height = 13, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-16.png", + line_length = 4, + width = 25, + height = 27, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-17.png", + line_length = 4, + width = 31, + height = 29, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-17.png", + line_length = 4, + width = 62, + height = 59, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-18.png", + line_length = 4, + width = 29, + height = 34, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-18.png", + line_length = 4, + width = 57, + height = 67, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-19.png", + line_length = 4, + width = 38, + height = 40, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-19.png", + line_length = 4, + width = 76, + height = 79, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-20.png", + line_length = 4, + width = 28, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-20.png", + line_length = 4, + width = 56, + height = 48, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-21.png", + line_length = 4, + width = 23, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-21.png", + line_length = 4, + width = 46, + height = 47, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-22.png", + line_length = 4, + width = 14, + height = 19, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-22.png", + line_length = 4, + width = 26, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-23.png", + line_length = 4, + width = 35, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-23.png", + line_length = 4, + width = 70, + height = 26, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-24.png", + line_length = 4, + width = 14, + height = 18, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-24.png", + line_length = 4, + width = 28, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-25.png", + line_length = 4, + width = 22, + height = 21, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-25.png", + line_length = 4, + width = 44, + height = 41, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-26.png", + line_length = 4, + width = 13, + height = 22, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-26.png", + line_length = 4, + width = 25, + height = 42, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-27.png", + line_length = 4, + width = 36, + height = 17, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-27.png", + line_length = 4, + width = 70, + height = 33, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-28.png", + line_length = 4, + width = 17, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-28.png", + line_length = 4, + width = 34, + height = 29, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-shadow-29.png", + line_length = 4, + width = 26, + height = 25, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-shadow-29.png", + line_length = 4, + width = 51, + height = 50, + frame_count = 8, + scale = 0.5 + } + } + } +end + +particle_animations.get_branch_particle_pictures = function() + return + { + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-01.png", + line_length = 4, + width = 34, + height = 32, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-01.png", + line_length = 4, + width = 66, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-02.png", + line_length = 4, + width = 44, + height = 54, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-02.png", + line_length = 4, + width = 87, + height = 107, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-03.png", + line_length = 4, + width = 60, + height = 60, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-03.png", + line_length = 4, + width = 121, + height = 119, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-04.png", + line_length = 4, + width = 13, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-04.png", + line_length = 4, + width = 26, + height = 57, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-05.png", + line_length = 4, + width = 27, + height = 21, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-05.png", + line_length = 4, + width = 53, + height = 40, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-06.png", + line_length = 4, + width = 32, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-06.png", + line_length = 4, + width = 64, + height = 46, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-07.png", + line_length = 4, + width = 33, + height = 35, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-07.png", + line_length = 4, + width = 65, + height = 69, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-08.png", + line_length = 4, + width = 14, + height = 29, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-08.png", + line_length = 4, + width = 27, + height = 60, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-09.png", + line_length = 4, + width = 26, + height = 32, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-09.png", + line_length = 4, + width = 52, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-10.png", + line_length = 4, + width = 27, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-10.png", + line_length = 4, + width = 53, + height = 55, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-11.png", + line_length = 4, + width = 25, + height = 33, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-11.png", + line_length = 4, + width = 49, + height = 64, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-12.png", + line_length = 4, + width = 32, + height = 28, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-12.png", + line_length = 4, + width = 64, + height = 56, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-13.png", + line_length = 4, + width = 25, + height = 18, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-13.png", + line_length = 4, + width = 50, + height = 35, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-14.png", + line_length = 4, + width = 27, + height = 19, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-14.png", + line_length = 4, + width = 54, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-15.png", + line_length = 4, + width = 12, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-15.png", + line_length = 4, + width = 23, + height = 30, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-16.png", + line_length = 4, + width = 12, + height = 13, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-16.png", + line_length = 4, + width = 25, + height = 27, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-17.png", + line_length = 4, + width = 31, + height = 29, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-17.png", + line_length = 4, + width = 62, + height = 59, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-18.png", + line_length = 4, + width = 29, + height = 34, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-18.png", + line_length = 4, + width = 57, + height = 67, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-19.png", + line_length = 4, + width = 38, + height = 40, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-19.png", + line_length = 4, + width = 76, + height = 79, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-20.png", + line_length = 4, + width = 28, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-20.png", + line_length = 4, + width = 56, + height = 48, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-21.png", + line_length = 4, + width = 23, + height = 24, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-21.png", + line_length = 4, + width = 46, + height = 47, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-22.png", + line_length = 4, + width = 14, + height = 19, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-22.png", + line_length = 4, + width = 26, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-23.png", + line_length = 4, + width = 35, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-23.png", + line_length = 4, + width = 70, + height = 26, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-24.png", + line_length = 4, + width = 14, + height = 18, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-24.png", + line_length = 4, + width = 28, + height = 37, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-25.png", + line_length = 4, + width = 22, + height = 21, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-25.png", + line_length = 4, + width = 44, + height = 41, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-26.png", + line_length = 4, + width = 13, + height = 22, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-26.png", + line_length = 4, + width = 25, + height = 42, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-27.png", + line_length = 4, + width = 36, + height = 17, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-27.png", + line_length = 4, + width = 70, + height = 33, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-28.png", + line_length = 4, + width = 17, + height = 14, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-28.png", + line_length = 4, + width = 34, + height = 29, + frame_count = 8, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/branch-particle/branch-particle-29.png", + line_length = 4, + width = 26, + height = 25, + frame_count = 8, + hr_version = + { + filename = "__base__/graphics/particle/branch-particle/hr-branch-particle-29.png", + line_length = 4, + width = 51, + height = 50, + frame_count = 8, + scale = 0.5 + } + } + } +end + +particle_animations.get_leaf_particle_pictures = function(options) + return + { + sheet = + { + filename = "__base__/graphics/particle/leaf-particle/leaf-particle.png", + priority = "extra-high", + line_length = 12, + width = 12, + height = 10, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.5,-0.5), options and options.shift or nil), + tint = options and options.tint or nil, + hr_version = + { + filename = "__base__/graphics/particle/leaf-particle/hr-leaf-particle.png", + priority = "extra-high", + line_length = 12, + width = 26, + height = 18, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.25,-0.75), options and options.shift or nil), + tint = options and options.tint or nil, + scale = 0.5 + } + } + } +end + +particle_animations.get_new_leaf_particle_pictures = function(options) + return + { + sheet = + { + filename = "__base__/graphics/particle/leaf-particle/new-leaf-particle.png", + priority = "extra-high", + line_length = 12, + width = 12, + height = 10, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.5,-0.5), options and options.shift or nil), + tint = options and options.tint or nil, + hr_version = + { + filename = "__base__/graphics/particle/leaf-particle/hr-new-leaf-particle.png", + priority = "extra-high", + line_length = 12, + width = 26, + height = 18, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.25,-0.75), options and options.shift or nil), + tint = options and options.tint or nil, + scale = 0.5 + } + } + } +end + +particle_animations.get_coal_particle_shadow_pictures = function() + return + + { + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-shadow-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-shadow-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-shadow-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-shadow-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-shadow-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-shadow-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-shadow-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-shadow-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_coal_particle_pictures = function() + return + { + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/coal-particle/coal-particle-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/coal-particle/hr-coal-particle-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_old_stone_particle_shadow_pictures = function(options) + return + + { + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-shadow-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-shadow-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-shadow-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-shadow-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-shadow-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-shadow-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-shadow-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-shadow-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_old_stone_particle_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_copper_particle_shadow_pictures = function(options) + return + + { + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-shadow-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-shadow-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-shadow-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-shadow-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-shadow-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-shadow-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-shadow-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-shadow-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_copper_particle_pictures = function(options) + return + + { + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/copper-ore-particle/copper-ore-particle-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/copper-ore-particle/hr-copper-ore-particle-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_iron_particle_shadow_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-shadow-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-shadow-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-shadow-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-shadow-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-shadow-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-shadow-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-shadow-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-shadow-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_iron_particle_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-1.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-1.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-2.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-2.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-3.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-3.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/iron-ore-particle/iron-ore-particle-4.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 1, + hr_version = + { + filename = "__base__/graphics/particle/iron-ore-particle/hr-iron-ore-particle-4.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 1, + scale = 0.5 + } + } + } +end + +particle_animations.get_explosion_remnants_front_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/explosion-particle/explosion-particle-front.png", + priority = "extra-high", + width = 24, + height = 22, + frame_count = 12, + animation_speed = 0.5, + variation_count = 24, + shift = options.shift, + hr_version = + { + filename = "__base__/graphics/particle/explosion-particle/hr-explosion-particle-front.png", + priority = "extra-high", + width = 46, + height = 44, + frame_count = 12, + animation_speed = 0.5, + variation_count = 24, + shift = util.add_shift(util.by_pixel(2.25,-0.75), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_explosion_remnants_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/explosion-particle/explosion-particle.png", + priority = "extra-high", + width = 38, + height = 38, + frame_count = 10, + animation_speed = 0.5, + variation_count = 40 + } + } +end + +particle_animations.get_explosion_remnants_shadow_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/explosion-particle/explosion-particle-shadow.png", + priority = "extra-high", + width = 48, + height = 38, + frame_count = 10, + animation_speed = 0.5, + variation_count = 40, + shift = {0.0625, 0} + } + } +end + +particle_animations.get_shell_particle_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/shell-particle/shell-particle-1.png", + priority = "extra-high", + width = 6, + height = 6, + frame_count = 5 + }, + { + filename = "__base__/graphics/particle/shell-particle/shell-particle-2.png", + priority = "extra-high", + width = 5, + height = 7, + frame_count = 5 + } + } +end + +particle_animations.get_shell_particle_shadow_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/shell-particle/shell-particle-shadow-1.png", + priority = "extra-high", + width = 9, + height = 7, + frame_count = 5 + }, + { + filename = "__base__/graphics/particle/shell-particle/shell-particle-shadow-2.png", + priority = "extra-high", + width = 7, + height = 8, + frame_count = 5 + } + } +end + +particle_animations.get_wooden_particle_shadow_pictures = function(options) + return + { + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-01.png", + line_length = 4, + width = 9, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-01.png", + line_length = 4, + width = 17, + height = 16, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-02.png", + line_length = 4, + width = 2, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-02.png", + line_length = 4, + width = 4, + height = 9, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-03.png", + line_length = 4, + width = 6, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-03.png", + line_length = 4, + width = 10, + height = 14, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-04.png", + line_length = 4, + width = 5, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-04.png", + line_length = 4, + width = 8, + height = 11, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-05.png", + line_length = 4, + width = 6, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-05.png", + line_length = 4, + width = 14, + height = 13, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-06.png", + line_length = 4, + width = 7, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-06.png", + line_length = 4, + width = 14, + height = 12, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-07.png", + line_length = 4, + width = 6, + height = 5, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-07.png", + line_length = 4, + width = 11, + height = 10, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-08.png", + line_length = 4, + width = 8, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-08.png", + line_length = 4, + width = 17, + height = 14, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-09.png", + line_length = 4, + width = 7, + height = 8, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-09.png", + line_length = 4, + width = 14, + height = 16, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-10.png", + line_length = 4, + width = 5, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-10.png", + line_length = 4, + width = 11, + height = 20, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-11.png", + line_length = 4, + width = 10, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-11.png", + line_length = 4, + width = 21, + height = 18, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-12.png", + line_length = 4, + width = 6, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-12.png", + line_length = 4, + width = 14, + height = 32, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-13.png", + line_length = 4, + width = 7, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-13.png", + line_length = 4, + width = 14, + height = 18, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-14.png", + line_length = 4, + width = 7, + height = 12, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-14.png", + line_length = 4, + width = 12, + height = 24, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-15.png", + line_length = 4, + width = 7, + height = 10, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-15.png", + line_length = 4, + width = 14, + height = 19, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-16.png", + line_length = 4, + width = 12, + height = 6, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-16.png", + line_length = 4, + width = 24, + height = 12, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-17.png", + line_length = 4, + width = 12, + height = 7, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-17.png", + line_length = 4, + width = 25, + height = 15, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-18.png", + line_length = 4, + width = 11, + height = 11, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-18.png", + line_length = 4, + width = 22, + height = 23, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-19.png", + line_length = 4, + width = 16, + height = 15, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-19.png", + line_length = 4, + width = 32, + height = 29, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-20.png", + line_length = 4, + width = 9, + height = 14, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-20.png", + line_length = 4, + width = 17, + height = 29, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-21.png", + line_length = 4, + width = 8, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-21.png", + line_length = 4, + width = 15, + height = 32, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-22.png", + line_length = 4, + width = 17, + height = 9, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-22.png", + line_length = 4, + width = 34, + height = 19, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-23.png", + line_length = 4, + width = 17, + height = 22, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-23.png", + line_length = 4, + width = 34, + height = 43, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-24.png", + line_length = 4, + width = 19, + height = 16, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-24.png", + line_length = 4, + width = 38, + height = 33, + frame_count = 16, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/particle/wooden-particle/wooden-particle-shadow-25.png", + line_length = 4, + width = 23, + height = 25, + frame_count = 16, + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wooden-particle-shadow-25.png", + line_length = 4, + width = 45, + height = 50, + frame_count = 16, + scale = 0.5 + } + } + } +end + +particle_animations.get_explosion_remnants_particle = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/explosion-particle/explosion-particle-back.png", + priority = "extra-high", + width = 14, + height = 12, + frame_count = 12, + tint = options.tint, + animation_speed = 0.5, + variation_count = 24, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/explosion-particle/hr-explosion-particle-back.png", + priority = "extra-high", + width = 28, + height = 26, + frame_count = 12, + tint = options.tint, + animation_speed = 0.5, + variation_count = 24, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_metal_particle_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/metal-particle/metal-particle-medium.png", + priority = "extra-high", + width = 16, + height = 14, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/metal-particle/hr-metal-particle-medium.png", + priority = "extra-high", + width = 30, + height = 30, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,0.75), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_metal_particle_medium_long_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/metal-particle/long-metal-particle-medium.png", + priority = "extra-high", + width = 50, + height = 46, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/metal-particle/hr-long-metal-particle-medium.png", + priority = "extra-high", + width = 100, + height = 92, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(3.75,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_mechanical_component_particle_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/mechanical-components-particle/mechanical-components-particle-medium.png", + priority = "extra-high", + width = 12, + height = 10, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/mechanical-components-particle/hr-mechanical-components-particle-medium.png", + priority = "extra-high", + width = 22, + height = 22, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,-0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_vegetation_particle_small_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/vegetation-particle/vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 10, + height = 14, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/vegetation-particle/hr-vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 20, + height = 26, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,-1.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_grass_particle_small_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/vegetation-particle/vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 10, + height = 14, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + --scale = 1.2 + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/vegetation-particle/hr-vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 20, + height = 26, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + shift = util.add_shift(util.by_pixel(2.25,-1.25), options.shift), + scale = 0.8 + } + } + } +end + +particle_animations.get_vegetation_particle_character_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/vegetation-particle/vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 10, + height = 14, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + scale = 1.1, + hr_version = + { + filename = "__base__/graphics/particle/vegetation-particle/hr-vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 20, + height = 26, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + shift = util.add_shift(util.by_pixel(2.25,-1.25), options.shift), + scale = 0.7 + } + } + } +end + +particle_animations.get_vegetation_particle_vehicle_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/vegetation-particle/vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 10, + height = 14, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + scale = 1.2, + hr_version = + { + filename = "__base__/graphics/particle/vegetation-particle/hr-vegetation-particle-small-medium.png", + priority = "extra-high", + line_length = 12, + width = 20, + height = 26, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 4, + shift = util.add_shift(util.by_pixel(2.25,-1.25), options.shift), + scale = 0.8 + } + } + } +end + +particle_animations.get_metal_particle_small_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/metal-particle/metal-particle-small.png", + priority = "extra-high", + width = 10, + height = 8, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/metal-particle/hr-metal-particle-small.png", + priority = "extra-high", + width = 20, + height = 16, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,-0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_wooden_splinter_particle_small_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/wooden-particle/wood-splinter-particle-small.png", + priority = "extra-high", + width = 6, + height = 6, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wood-splinter-particle-small.png", + priority = "extra-high", + width = 10, + height = 10, + tint = options.tint, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + shift = util.add_shift(util.by_pixel(2.25,-0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_wooden_splinter_particle_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/wooden-particle/wood-splinter-particle-medium.png", + priority = "extra-high", + width = 10, + height = 10, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/wooden-particle/hr-wood-splinter-particle-medium.png", + priority = "extra-high", + width = 20, + height = 20, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_glass_particle_small_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/glass-particle/glass-particle-small.png", + priority = "extra-high", + width = 6, + height = 8, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/glass-particle/hr-glass-particle-small.png", + priority = "extra-high", + width = 14, + height = 14, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.75,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_guts_and_entrails_particle_small_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/guts-entrails-particle/guts-entrails-small-medium.png", + priority = "extra-high", + width = 16, + height = 16, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(3.5,1.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/guts-entrails-particle/hr-guts-entrails-small-medium.png", + priority = "extra-high", + width = 32, + height = 32, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(3.25,1.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_guts_and_entrails_particle_big_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/guts-entrails-particle/guts-entrails-big.png", + priority = "extra-high", + width = 42, + height = 38, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(1.5,-0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/guts-entrails-particle/hr-guts-entrails-big.png", + priority = "extra-high", + width = 84, + height = 76, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(3.25,1.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_stone_particle_tiny_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-tiny.png", + priority = "extra-high", + width = 4, + height = 4, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-tiny.png", + priority = "extra-high", + width = 6, + height = 6, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_stone_particle_small_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-small.png", + priority = "extra-high", + width = 6, + height = 6, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-small.png", + priority = "extra-high", + width = 10, + height = 12, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_stone_particle_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-medium.png", + priority = "extra-high", + width = 10, + height = 10, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-medium.png", + priority = "extra-high", + width = 18, + height = 20, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.25), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_stone_particle_big_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/stone-particle/stone-particle-big.png", + priority = "extra-high", + width = 18, + height = 22, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/stone-particle/hr-stone-particle-big.png", + priority = "extra-high", + width = 36, + height = 44, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2.25,0.75), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_cable_and_electronic_particle_small_medium_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/cable-and-electronics-particle/cables-and-electronics-particle-small-medium.png", + priority = "extra-high", + width = 22, + height = 28, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(1.5,0.5), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/cable-and-electronics-particle/hr-cables-and-electronics-particle-small-medium.png", + priority = "extra-high", + width = 44, + height = 58, + frame_count = 12, + animation_speed = 0.5, + variation_count = 10, + tint = options.tint, + shift = util.add_shift(util.by_pixel(1.25,0.75), options.shift), + scale = 0.5 + } + } + } +end + +particle_animations.get_sparks_debris_pictures = function() + return + { + sheet = + { + filename = "__base__/graphics/particle/spark-particle/sparks-debris.png", + line_length = 12, + width = 10, + height = 12, + frame_count = 12, + variation_count = 2, + shift = util.by_pixel(1.5,0.5), + hr_version = + { + filename = "__base__/graphics/particle/spark-particle/hr-sparks-debris.png", + line_length = 12, + width = 20, + height = 22, + frame_count = 12, + variation_count = 2, + scale = 0.5, + shift = util.by_pixel(2,0.5) + } + } + } +end + +particle_animations.get_pole_sparks_particle_pictures = function() + return + { + sheet = + { + filename = "__base__/graphics/particle/pole-sparks/pole-sparks.png", + draw_as_glow = true, + line_length = 12, + width = 4, + height = 4, + frame_count = 12, + variation_count = 3, + shift = util.by_pixel(0,0), + hr_version = + { + filename = "__base__/graphics/particle/pole-sparks/hr-pole-sparks.png", + draw_as_glow = true, + line_length = 12, + width = 6, + height = 6, + frame_count = 12, + variation_count = 3, + scale = 0.5, + shift = util.by_pixel(0,0) + } + } + } +end + +particle_animations.get_sparks_particle_pictures = function() + return + + { + sheet = + { + filename = "__base__/graphics/particle/spark-particle/sparks.png", + draw_as_glow = true, + line_length = 12, + width = 4, + height = 4, + frame_count = 12, + variation_count = 3, + shift = util.by_pixel(0,0), + hr_version = + { + filename = "__base__/graphics/particle/spark-particle/hr-sparks.png", + draw_as_glow = true, + line_length = 12, + width = 6, + height = 6, + frame_count = 12, + variation_count = 3, + scale = 0.5, + shift = util.by_pixel(0,0) + } + } + } + +end + +particle_animations.get_blood_particle_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/blood-particle/blood-particle.png", + line_length = 12, + width = 10, + height = 8, + frame_count = 12, + variation_count = 7, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2,-1), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/blood-particle/hr-blood-particle.png", + line_length = 12, + width = 16, + height = 16, + frame_count = 12, + variation_count = 7, + tint = options.tint, + scale = 0.5, + shift = util.add_shift(util.by_pixel(1.5,-1), options.shift) + } + } + } +end + +particle_animations.get_slowdown_particle_pictures = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/blood-particle/blood-particle.png", + line_length = 12, + width = 10, + height = 8, + frame_count = 12, + variation_count = 7, + tint = options.tint, + scale = 1.9, + shift = util.add_shift(util.by_pixel(2,-1), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/blood-particle/hr-blood-particle.png", + line_length = 12, + width = 16, + height = 16, + frame_count = 12, + variation_count = 7, + tint = options.tint, + scale = 0.9, + shift = util.add_shift(util.by_pixel(1.5,-1), options.shift) + } + } + } +end + +particle_animations.get_explosion_remnants_particle = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/blood-particle/blood-particle.png", + line_length = 12, + width = 10, + height = 8, + frame_count = 12, + variation_count = 7, + tint = options.tint, + shift = util.add_shift(util.by_pixel(2,-1), options.shift), + hr_version = + { + filename = "__base__/graphics/particle/blood-particle/hr-blood-particle.png", + line_length = 12, + width = 16, + height = 16, + frame_count = 12, + variation_count = 7, + tint = options.tint, + scale = 0.5, + shift = util.add_shift(util.by_pixel(1.5,-1), options.shift) + } + } + } +end + +particle_animations.get_dust_particle = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/entity/smoke-fast/smoke-fast.png", + priority = "high", + width = 50, + height = 50, + frame_count = 16, + animation_speed = 1 / 2, + scale = 0.5, + variation_count = 1, + tint = options.tint, + affected_by_wind = true + } + } +end + +particle_animations.get_general_dust_particle = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/entity/smoke-fast/smoke-general.png", + priority = "high", + width = 50, + height = 50, + frame_count = 16, + animation_speed = 1 / 2, + scale = 0.5, + variation_count = 1, + tint = options.tint, + affected_by_wind = true + } + } +end + +particle_animations.get_artillery_shell_particle = function(options) + local options = options or {} + return + { + sheet = + { + filename = "__base__/graphics/particle/artillery-shell-particle/artillery-shells.png", + line_length = 12, + width = 18, + height = 18, + frame_count = 12, + variation_count = 4, + axially_symmetrical = false, + direction_count = 1, + shift = util.add_shift(util.by_pixel(2.5,-0.5), options.shift), + animation_speed = 1, + hr_version = + { + filename = "__base__/graphics/particle/artillery-shell-particle/hr-artillery-shells.png", + line_length = 12, + width = 34, + height = 36, + frame_count = 12, + variation_count = 4, + axially_symmetrical = false, + direction_count = 1, + shift = util.add_shift(util.by_pixel(2.25,-0.75), options.shift), + animation_speed = 1, + scale = 0.5 + } + } + } +end + +local default_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle", + starting_frame_deviation = 5, + starting_frame_speed_deviation = 5, + offset_deviation = {{-0.06, -0.06}, {0.06, 0.06}}, + speed_from_center = 0.007 + } +end + +local tiny_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-tiny", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil + } +end + +local small_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil + } +end + +local small_lower_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-lower-particle-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil + } +end + +local small_dust_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-stone-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil + } +end + +local default_ended_in_water_trigger_effect = function() + return + { + + { + type = "create-particle", + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "deep-water-particle", + offset_deviation = { { -0.05, -0.05 }, { 0.05, 0.05 } }, + tile_collision_mask = nil, + initial_height = 0, + initial_height_deviation = 0.02, + initial_vertical_speed = 0.05, + initial_vertical_speed_deviation = 0.05, + speed_from_center = 0.01, + speed_from_center_deviation = 0.006, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 2, + tail_length_deviation = 1, + tail_width = 3 + }, + { + type = "create-particle", + repeat_count = 10, + repeat_count_deviation = 6, + probability = 0.03, + affects_target = false, + show_in_tooltip = false, + particle_name = "water-particle", + offsets = + { + { 0, 0 }, + { 0.01563, -0.09375 }, + { 0.0625, 0.09375 }, + { -0.1094, 0.0625 } + }, + offset_deviation = { { -0.2969, -0.1992 }, { 0.2969, 0.1992 } }, + tile_collision_mask = nil, + initial_height = 0, + initial_height_deviation = 0.02, + initial_vertical_speed = 0.053, + initial_vertical_speed_deviation = 0.005, + speed_from_center = 0.02, + speed_from_center_deviation = 0.006, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 9, + tail_length_deviation = 0, + tail_width = 1 + }, + { + type = "play-sound", + sound = sounds.small_splash + } + } + +end + +local particle_ended_in_water_trigger_effect = function() + return + { + type = "create-particle", + repeat_count = 5, + repeat_count_deviation = 4, + probability = 0.2, + affects_target = false, + show_in_tooltip = false, + particle_name = "deep-water-particle", + offsets = { { 0, 0 } }, + offset_deviation = { { -0.2969, -0.2969 }, { 0.2969, 0.2969 } }, + tile_collision_mask = nil, + initial_height = 0.1, + initial_height_deviation = 0.5, + initial_vertical_speed = 0.06, + initial_vertical_speed_deviation = 0.069, + speed_from_center = 0.02, + speed_from_center_deviation = 0.05, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 9, + tail_length_deviation = 8, + tail_width = 1 + } +end + +local make_particle = function(params) + + if not params then error("No params given to make_particle function") end + local name = params.name or error("No name given") + + local ended_in_water_trigger_effect = params.ended_in_water_trigger_effect or default_ended_in_water_trigger_effect() + if params.ended_in_water_trigger_effect == false then + ended_in_water_trigger_effect = nil + end + + local particle = + { + + type = "optimized-particle", + name = name, + + life_time = params.life_time or 60 * 15, + fade_away_duration = params.fade_away_duration, + + render_layer = params.render_layer or "projectile", + render_layer_when_on_ground = params.render_layer_when_on_ground or "corpse", + + regular_trigger_effect_frequency = params.regular_trigger_effect_frequency or 2, + regular_trigger_effect = params.regular_trigger_effect, + ended_in_water_trigger_effect = ended_in_water_trigger_effect, + + pictures = params.pictures, + shadows = params.shadows, + draw_shadow_when_on_ground = params.draw_shadow_when_on_ground, + + movement_modifier_when_on_ground = params.movement_modifier_when_on_ground, + movement_modifier = params.movement_modifier, + vertical_acceleration = params.vertical_acceleration, + + mining_particle_frame_speed = params.mining_particle_frame_speed, + + } + + return particle + +end + +function bloodtint() +return {r = 172, g = 51, b = 204} +end + +function shadowtint() +return {r = 0, g = 0, b = 0} +end + +function bloodparticlescale() + return 0.5 +end + +function watertint() + return {r = 0.1, g = 0.6, b = 0.85} +end + +function waterparticlescale() + return 1 +end diff --git a/alien-biomes/prototypes/biome/particles.lua b/alien-biomes/prototypes/biome/particles.lua new file mode 100644 index 00000000..22aa17ff --- /dev/null +++ b/alien-biomes/prototypes/biome/particles.lua @@ -0,0 +1,692 @@ +require("particle-animations") +local sounds = require("__base__/prototypes/entity/sounds") +local tile_colors = require("prototypes/tile/tile-colors") + +local default_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle", + starting_frame_deviation = 5, + starting_frame_speed_deviation = 5, + offset_deviation = {{-0.06, -0.06}, {0.06, 0.06}}, + speed_from_center = 0.007 + } +end + +local tiny_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-tiny", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil, + } +end + +local small_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil, + } +end + +local small_lower_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-lower-particle-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil, + } +end + +local small_dust_smoke_trigger_effect = function() + return + { + type = "create-trivial-smoke", + smoke_name = "smoke-explosion-particle-stone-small", + starting_frame_deviation = 0, + starting_frame_speed_deviation = 0, + offset_deviation = {{-0.03, -0.03}, {0.03, 0.03}}, + speed_from_center = nil, + } +end + +local default_ended_in_water_trigger_effect = function() + return + { + + { + type = "create-particle", + probability = 1, + affects_target = false, + show_in_tooltip = false, + particle_name = "deep-water-particle", + offset_deviation = { { -0.05, -0.05 }, { 0.05, 0.05 } }, + tile_collision_mask = nil, + initial_height = 0, + initial_height_deviation = 0.02, + initial_vertical_speed = 0.05, + initial_vertical_speed_deviation = 0.05, + speed_from_center = 0.01, + speed_from_center_deviation = 0.006, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 2, + tail_length_deviation = 1, + tail_width = 3 + }, + { + type = "create-particle", + repeat_count = 10, + repeat_count_deviation = 6, + probability = 0.03, + affects_target = false, + show_in_tooltip = false, + particle_name = "water-particle", + offsets = + { + { 0, 0 }, + { 0.01563, -0.09375 }, + { 0.0625, 0.09375 }, + { -0.1094, 0.0625 } + }, + offset_deviation = { { -0.2969, -0.1992 }, { 0.2969, 0.1992 } }, + tile_collision_mask = nil, + initial_height = 0, + initial_height_deviation = 0.02, + initial_vertical_speed = 0.053, + initial_vertical_speed_deviation = 0.005, + speed_from_center = 0.02, + speed_from_center_deviation = 0.006, + frame_speed = 1, + frame_speed_deviation = 0, + tail_length = 9, + tail_length_deviation = 0, + tail_width = 1 + }, + { + type = "play-sound", + sound = sounds.small_splash, + }, + } + +end + +local Particles = {} + +Particles.particle_tints_dirt_sand = { + tan = {193,162,127}, + white = {255,255,255}, + grey = {177,183,187}, + black = {50,50,50}, + purple = {169,177,239}, + red = {185,107,105}, + violet = {165,107,161}, + dustyrose = {180,148,137}, + cream = {234,216,179}, + brown = {162,117,88}, + beige = {178,164,138}, + aubergine = {126,115,156} +} +for i, tint in pairs(Particles.particle_tints_dirt_sand) do +local tint_2 = { + r = tint[1]/255, + g = tint[2]/255, + b = tint[3]/255, + a = 1 +} +Particles.particle_tints_dirt_sand[i] = tint_2 +end + +Particles.particle_tints_vegetation = { + turquoise = { r = 0.2, g = 0.7, b = 0.7, a = 1 }, + green = { r = 0.2, g = 0.7, b = 0.2, a = 1 }, + olive = { r = 0.5, g = 0.7, b = 0.2, a = 1 }, + yellow = { r = 0.7, g = 0.7, b = 0.2, a = 1 }, + orange = { r = 0.7, g = 0.5, b = 0.2, a = 1 }, + red = { r = 0.7, g = 0.2, b = 0.2, a = 1 }, + violet = { r = 0.7, g = 0.2, b = 0.5, a = 1 }, + purple = { r = 0.5, g = 0.2, b = 0.7, a = 1 }, + mauve = { r = 0.3, g = 0.2, b = 0.7, a = 1 }, + blue = { r = 0.2, g = 0.2, b = 0.7, a = 1 }, +} + + +Particles.make_particle = function(params) + + if not params then error("No params given to Particles.make_particle function") end + local name = params.name or error("No name given") + + local ended_in_water_trigger_effect = params.ended_in_water_trigger_effect or default_ended_in_water_trigger_effect() + if params.ended_in_water_trigger_effect == false then + ended_in_water_trigger_effect = nil + end + + local particle = + { + + type = "optimized-particle", + name = name, + + life_time = params.life_time or 60 * 15, + fade_away_duration = params.fade_away_duration, + + render_layer = params.render_layer or "projectile", + render_layer_when_on_ground = params.render_layer_when_on_ground or "corpse", + + regular_trigger_effect_frequency = params.regular_trigger_effect_frequency or 2, + regular_trigger_effect = params.regular_trigger_effect, + ended_in_water_trigger_effect = ended_in_water_trigger_effect, + + pictures = params.pictures, + shadows = params.shadows, + draw_shadow_when_on_ground = params.draw_shadow_when_on_ground, + + movement_modifier_when_on_ground = params.movement_modifier_when_on_ground, + movement_modifier = params.movement_modifier, + vertical_acceleration = params.vertical_acceleration, + + mining_particle_frame_speed = params.mining_particle_frame_speed, + + } + + return particle + +end + + +function Particles.add_tile_particles(biome) + Particles.particle_sets = Particles.particle_sets or {} + Particles.entity_particle_sets = Particles.entity_particle_sets or {} + + -- biome = tile + local tile_name = biome.name + local biome_set_name = biome.group..(biome.axis and ("-"..biome.axis) or "") + + local particle_set = Particles.particle_sets[biome_set_name] + if not particle_set then + local set_tint + local function multiply_tints (tint_a, tint_b) + return { + r = (tint_a.r or tint_a[1]) * tint_b.r, + g = (tint_a.g or tint_a[2]) * tint_b.g, + b = (tint_a.b or tint_a[3]) * tint_b.b, + a = (tint_a.a or 1) * (tint_b.a or 1), + } + end + + if biome.group == "dirt" or biome.group == "sand" then + set_tint = Particles.particle_tints_dirt_sand[biome.axis] + elseif biome.group == "vegetation" then + set_tint = Particles.particle_tints_vegetation[biome.axis] + elseif biome.group == "volcanic" then + set_tint = Particles.particle_tints_dirt_sand["black"] + elseif biome.group == "frozen" then + set_tint = Particles.particle_tints_dirt_sand["white"] + end + if tile_colors[tile_name] then + set_tint = multiply_tints ({1/255,1/255,1/255},tile_colors[tile_name]) + end + if not set_tint then -- fallback + set_tint = Particles.particle_tints_dirt_sand["brown"] + end + + particle_set = { + dust = Particles.make_particle + { + name = biome_set_name.."-dust-particle", + life_time = 30, + pictures = particle_animations.get_general_dust_particle ({ tint = multiply_tints(set_tint, { r = 0.9, g = 0.9, b = 0.9, a = 1.000 })}), --({ tint = { r = 0.443, g = 0.333, b = 0.189, a = 0.502 }}), + shadows = nil, + ended_in_water_trigger_effect = false, + movement_modifier = 0.1, + movement_modifier_when_on_ground = 0, + fade_away_duration = 40, + render_layer = "lower-object", + }, + + dust_vehicle = Particles.make_particle + { + name = biome_set_name.."-dust-vehicle-particle", + life_time = 20, + pictures = particle_animations.get_general_dust_particle ({ tint = multiply_tints(set_tint, { r = 0.6, g = 0.6, b = 0.6, a = 0.502 })}), + shadows = nil, + ended_in_water_trigger_effect = false, + movement_modifier = 0.1 + }, + + dust_vehicle_front = Particles.make_particle -- front ram? + { + name = biome_set_name.."-dust-tank-front-particle", + life_time = 30, + pictures = particle_animations.get_general_dust_particle ({ tint = multiply_tints(set_tint, { r = 0.6, g = 0.6, b = 0.6, a = 0.502 })}), + shadows = nil, + ended_in_water_trigger_effect = false, + movement_modifier = 0.1, + movement_modifier_when_on_ground = 0, + render_layer = "lower-object", + }, + + tiny = Particles.make_particle + { + name = biome_set_name.."-stone-particle-tiny", + pictures = particle_animations.get_stone_particle_tiny_pictures ({ tint = multiply_tints(set_tint, { r = 1, g = 1, b = 1, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_tiny_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = default_ended_in_water_trigger_effect() + }, + + tiny_character = Particles.make_particle + { + name = biome_set_name.."-stone-character-particle-tiny", + life_time = 20, + pictures = particle_animations.get_stone_particle_tiny_pictures ({ tint = multiply_tints(set_tint, { r = 0.9, g = 0.9, b = 0.9, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_tiny_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = false, + render_layer = "lower-object-above-shadow" + }, + + tiny_vehicle = Particles.make_particle + { + name = biome_set_name.."-stone-vehicle-particle-tiny", + life_time = 30, + pictures = particle_animations.get_stone_particle_tiny_pictures ({ tint = multiply_tints(set_tint, { r = 0.8, g = 0.8, b = 0.8, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_tiny_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = false, + render_layer = "lower-object-above-shadow" + }, + + small = Particles.make_particle + { + name = biome_set_name.."-stone-particle-small", + pictures = particle_animations.get_stone_particle_small_pictures ({ tint = multiply_tints(set_tint, { r = 1.000, g = 1, b = 1, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_small_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = tiny_smoke_trigger_effect(), + ended_in_water_trigger_effect = default_ended_in_water_trigger_effect() + }, + + small_vehicle = Particles.make_particle + { + name = biome_set_name.."-stone-vehicle-particle-small", + life_time = 30, + pictures = particle_animations.get_stone_particle_small_pictures ({ tint = multiply_tints(set_tint, { r = 0.9, g = 0.9, b = 0.9, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_small_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = false, + render_layer = "lower-object-above-shadow" + }, + + medium = Particles.make_particle + { + name = biome_set_name.."-stone-particle-medium", + pictures = particle_animations.get_stone_particle_medium_pictures ({ tint = multiply_tints(set_tint, { r = 1.000, g = 1, b = 1, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_medium_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = small_smoke_trigger_effect(), + ended_in_water_trigger_effect = default_ended_in_water_trigger_effect() + }, + + medium_lower = Particles.make_particle + { + name = biome_set_name.."-stone-lower-particle-medium", + pictures = particle_animations.get_stone_particle_medium_pictures ({ tint = multiply_tints(set_tint, { r = 1.000, g = 1, b = 1, a = 1.000 })}), + shadows = particle_animations.get_stone_particle_medium_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = small_smoke_trigger_effect(), + ended_in_water_trigger_effect = false, + render_layer = "lower-object-above-shadow" + }, + + vegetation_small = Particles.make_particle + { + name = biome_set_name.."-vegetation-particle-small-medium", + pictures = particle_animations.get_vegetation_particle_small_medium_pictures({ tint = { r = 1.000, g = 1, b = 1, a = 1.000 }}), + shadows =particle_animations.get_vegetation_particle_small_medium_pictures({ tint = shadowtint(), shift = util.by_pixel (0.5,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = false + }, + + vegetation_small_character = Particles.make_particle + { + name = biome_set_name.."-vegetation-character-particle-small-medium", + life_time = 20, + pictures = particle_animations.get_vegetation_particle_character_pictures ({ tint = { r = 1.000, g = 1, b = 1, a = 1.000 }}), + shadows = nil, + ended_in_water_trigger_effect = false, + render_layer = "lower-object-above-shadow" + }, + + splinter = Particles.make_particle + { + name = biome_set_name.."-grass-wooden-splinter-particle-small", + pictures = particle_animations.get_wooden_splinter_particle_small_pictures ({ tint = { r = 1, g = 1, b = 1, a = 1.000 }}), + shadows = particle_animations.get_wooden_splinter_particle_small_pictures({ tint = shadowtint(), shift = util.by_pixel (1,0)}), + regular_trigger_effect = nil, + ended_in_water_trigger_effect = false + }, + } + Particles.particle_sets[biome_set_name] = particle_set + for _, p in pairs(particle_set) do + data:extend({p}) + end + end + + for _, entity_type in pairs({"character", "car"}) do + Particles.entity_particle_sets[entity_type] = Particles.entity_particle_sets[entity_type] or {} + local entity_particle_set = Particles.entity_particle_sets[entity_type][biome_set_name] + if not entity_particle_set then + -- make the set + entity_particle_set = { + tiles = { }, + actions = { } + } + Particles.entity_particle_sets[entity_type][biome_set_name] = entity_particle_set + if entity_type == "character" then + if biome.group == "vegetation" then + entity_particle_set.actions = { + { + type = "create-particle", + repeat_count = 5, + particle_name = particle_set.vegetation_small_character.name, + probability = 1, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.01, + frame_speed = 0.4, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + { + type = "create-particle", + repeat_count = 4, + particle_name = particle_set.tiny_character.name, + probability = 1, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.01, + frame_speed = 0.4, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + { + type = "create-particle", + repeat_count = 2, + particle_name = particle_set.dust_vehicle.name, + probability = 0.75, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.01, + frame_speed = 0.4, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + { + type = "create-particle", + repeat_count = 1, + particle_name = particle_set.splinter.name, + probability = 0.25, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.01, + frame_speed = 0.4, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + } + else + entity_particle_set.actions = { + { + type = "create-particle", + repeat_count = 5, + particle_name = particle_set.dust.name, + probability = 1, + initial_height = 0.2, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + { + type = "create-particle", + repeat_count = 1, + particle_name = particle_set.tiny_character.name, + probability = 1, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.01, + frame_speed = 0.4, + initial_vertical_speed_deviation = 0.05, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + }, + } + end + else -- tanks and car together for now + if biome.group == "vegetation" then + entity_particle_set.actions = { + { + type = "create-particle", + repeat_count = 2, + particle_name = particle_set.tiny_vehicle.name, + probability = 0.05, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.8,-0.5}, + {-0.8,-0.5}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.2, -0.25}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 2, + particle_name = particle_set.small.name, + probability = 0.05, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.9,-0.5}, + {-0.8,-0.5}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 7, + particle_name = particle_set.vegetation_small.name, + probability = 0.07, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.8,-0.5}, + {-0.8,-0.5}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 5, + particle_name = particle_set.dust.name, + probability = 0.1, + initial_height = 0.2, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.25, -0.25}, {0.25, 0.25}}, + rotate_offsets = true + }, + } + else + entity_particle_set.actions = { + { + type = "create-particle", + repeat_count = 8, + particle_name = particle_set.dust.name, + probability = 0.3, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.7, 1}, + {-0.7,1} + }, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 5, + particle_name = particle_set.dust_vehicle_front.name, + probability = 0.3, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.7, -1}, + {-0.7,-1} + }, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 4, + particle_name = particle_set.tiny_vehicle.name, + probability = 0.05, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.8,-0.5}, + {-0.8,-0.5}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.2, -0.25}, {0.2, 0.2}}, + rotate_offsets = true + }, + { + type = "create-particle", + repeat_count = 3, + particle_name = particle_set.small_vehicle.name, + probability = 0.05, + initial_height = 0.1, + speed_from_center = 0.01, + speed_from_center_deviation = 0, + initial_vertical_speed = 0.02, + frame_speed = 1, + initial_vertical_speed_deviation = 0.05, + offsets = + { + {0.75, 1}, + {-0.75,1}, + {0.8,-0.5}, + {-0.8,-0.5}, + {0.8, -1}, + {-0.8,-1} + }, + offset_deviation = {{-0.2, -0.2}, {0.2, 0.2}}, + rotate_offsets = true + }, + } + end + end + end + table.insert(entity_particle_set.tiles, tile_name) + end + +end + +function Particles.apply_tile_particles() + + if Particles.entity_particle_sets then + for entity_type, entity_particle_set in pairs(Particles.entity_particle_sets) do + for _, set in pairs(entity_particle_set) do + if entity_type == "car" then + for _, car in pairs(data.raw.car) do + if car.track_particle_triggers then + table.insert(car.track_particle_triggers, table.deepcopy(set)) + end + end + elseif entity_type == "character" then + for _, character in pairs(data.raw.character) do + if character.synced_footstep_particle_triggers then + table.insert(character.synced_footstep_particle_triggers, table.deepcopy(set)) + end + end + end + end + end + end + +end + +return Particles diff --git a/alien-biomes/prototypes/decorative/crater.lua b/alien-biomes/prototypes/decorative/crater.lua new file mode 100644 index 00000000..2a8c6f5b --- /dev/null +++ b/alien-biomes/prototypes/decorative/crater.lua @@ -0,0 +1,79 @@ +local crater_tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"dirt", "sand", "heat-1"})) +local function autoplace_crater (max_probability, random_probability_penalty) + return { + max_probability = max_probability, + random_probability_penalty = random_probability_penalty, + sharpness = 0.7, + order = "a[doodad]-b[decal]", + peaks = { + { influence = -0.3}, + { + influence = 0.5, + noise_layer = "crater", + noise_octaves_difference = -2, + noise_persistence = 0.9, + water_optimal = 0, + water_range = 0.2, + water_max_range = 0.3, + } + }, + tile_restriction = crater_tile_restriction + } +end +local function crater_picture (name, width, height) + return { + filename = "__alien-biomes__/graphics/decorative/crater/sr/crater-"..name..".png", + width = math.floor(width/2), + height = math.floor(height/2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/crater/hr/crater-"..name..".png", + width = width, + height = height, + scale = 0.5 + }, + } +end +local function make_crater(name, box, max_probability, random_probability_penalty, pictures) + return { + name = name, + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[crater-decal]", + collision_box = {{-box, -box*0.75}, {box, box*0.75}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = autoplace_crater(max_probability), + pictures = pictures + } +end +data:extend({ + { + type = "noise-layer", + name = "crater" + }, + make_crater("crater3-huge", 8, 0.001, 0.95, { + crater_picture("huge-01", 1249, 877), + }), + make_crater("crater1-large-rare", 4, 0.07, 0.95, { + crater_picture("large-01", 679, 513), + }), + make_crater("crater1-large", 4, 0.07, 0.7, { + crater_picture("large-02", 327, 284), + crater_picture("large-03", 481, 393), + crater_picture("large-04", 406, 382), + crater_picture("large-05", 363, 301), + }), + make_crater("crater2-medium", 3, 0.09, 0.5, { + crater_picture("medium-01", 283, 231), + crater_picture("medium-02", 213, 182), + crater_picture("medium-03", 243, 189), + crater_picture("medium-04", 237, 173), + crater_picture("medium-05", 195, 182), + crater_picture("medium-06", 146, 125), + crater_picture("medium-07", 180, 127), + }), + make_crater("crater4-small", 2, 0.06, 0.8, { + crater_picture("small-01", 122, 108), + }), +}) diff --git a/alien-biomes/prototypes/decorative/decoratives.lua b/alien-biomes/prototypes/decorative/decoratives.lua new file mode 100644 index 00000000..863bf97a --- /dev/null +++ b/alien-biomes/prototypes/decorative/decoratives.lua @@ -0,0 +1,22 @@ +data.raw["optimized-decorative"]["light-mud-decal"].tile_layer = default_decal_layer +data.raw["optimized-decorative"]["dark-mud-decal"].tile_layer = default_decal_layer +data.raw["optimized-decorative"]["puberty-decal"].tile_layer = default_decal_layer +data.raw["optimized-decorative"]["red-desert-decal"].tile_layer = default_decal_layer + +local require_water = function(type, name) + local prototype = data.raw[type][name] + if not (prototype and prototype.autoplace and prototype.autoplace.peaks) then return end + -- apply negative out of max range + table.insert(prototype.autoplace.peaks, { + water_optimal = 1, + water_range = 0.5, + water_max_range = 0.7, + influence = 1, + max_influence = 0, + }) + +end +require_water("optimized-decorative", "brown-asterisk") +require_water("optimized-decorative", "brown-fluff-dry") +require_water("optimized-decorative", "brown-fluff") +require_water("optimized-decorative", "red-pita") diff --git a/alien-biomes/prototypes/decorative/lava.lua b/alien-biomes/prototypes/decorative/lava.lua new file mode 100644 index 00000000..daf9560b --- /dev/null +++ b/alien-biomes/prototypes/decorative/lava.lua @@ -0,0 +1,458 @@ +-- TODO: finish painting decals +local data_util = require("data-util") +data:extend({ +{ + type = "noise-layer", + name = "puddle-decal" +} +}) +local lava_decal_base = { + name = "lava-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[lava-decal]", + collision_box = {{-8, -8}, {8, 8}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = { + max_probability = 0.01, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = -1 + }, + { + infleunce = 0.1, + noise_layer = "puddle-decal", + noise_octaves_difference = -2, + noise_persistence = 0.95, + }, + { + influence = 1, + temperature_optimal = 150, + temperature_range = 50, + temperature_max_range = 60, + } + }, + sharpness = 0.7, + }, + pictures = + { + --[[ + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-00.png", + width = 174, + height = 134, + shift = util.by_pixel(5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-00.png", + width = 351, + height = 267, + shift = util.by_pixel(4.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-01.png", + width = 151, + height = 130, + shift = util.by_pixel(2.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-01.png", + width = 305, + height = 262, + shift = util.by_pixel(2.25, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-02.png", + width = 163, + height = 135, + shift = util.by_pixel(-8.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-02.png", + width = 327, + height = 270, + shift = util.by_pixel(-8.25, -0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-03.png", + width = 127, + height = 135, + shift = util.by_pixel(10.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-03.png", + width = 258, + height = 268, + shift = util.by_pixel(10, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-04.png", + width = 114, + height = 100, + shift = util.by_pixel(9, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-04.png", + width = 231, + height = 201, + shift = util.by_pixel(8.75, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-05.png", + width = 146, + height = 116, + shift = util.by_pixel(12, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-05.png", + width = 295, + height = 234, + shift = util.by_pixel(12.25, 6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-06.png", + width = 133, + height = 85, + shift = util.by_pixel(-6.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-06.png", + width = 271, + height = 172, + shift = util.by_pixel(-5.75, 0.5), + scale = 0.5 + }, + },]]-- + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-07.png", + width = 139, + height = 118, + shift = util.by_pixel(-1.5, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-07.png", + width = 282, + height = 266, + shift = util.by_pixel(-1.5, -1.5), + scale = 0.5 + }, + }, + --[[{ + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-08.png", + width = 188, + height = 114, + shift = util.by_pixel(0, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-08.png", + width = 377, + height = 231, + shift = util.by_pixel(-0.25, -7.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-09.png", + width = 170, + height = 100, + shift = util.by_pixel(9, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-09.png", + width = 376, + height = 202, + shift = util.by_pixel(0, 6), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-10.png", + width = 184, + height = 116, + shift = util.by_pixel(-1, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-10.png", + width = 372, + height = 234, + shift = util.by_pixel(-1, 3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-11.png", + width = 171, + height = 111, + shift = util.by_pixel(-1.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-11.png", + width = 344, + height = 224, + shift = util.by_pixel(-1.5, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-12.png", + width = 138, + height = 94, + shift = util.by_pixel(-10, 4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-12.png", + width = 290, + height = 189, + shift = util.by_pixel(-8, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-13.png", + width = 159, + height = 109, + shift = util.by_pixel(-4.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-13.png", + width = 326, + height = 228, + shift = util.by_pixel(-3, -2), + scale = 0.5 + }, + },]]-- + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-14.png", + width = 153, + height = 111, + shift = util.by_pixel(-13.5, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-14.png", + width = 312, + height = 225, + shift = util.by_pixel(-13.5, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-15.png", + width = 178, + height = 92, + shift = util.by_pixel(-5, 4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-15.png", + width = 359, + height = 186, + shift = util.by_pixel(-4.25, 4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-16.png", + width = 142, + height = 117, + shift = util.by_pixel(11, 6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-16.png", + width = 287, + height = 266, + shift = util.by_pixel(10.75, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-17.png", + width = 188, + height = 133, + shift = util.by_pixel(0, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-17.png", + width = 377, + height = 267, + shift = util.by_pixel(0.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-18.png", + width = 186, + height = 135, + shift = util.by_pixel(1, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-18.png", + width = 375, + height = 269, + shift = util.by_pixel(0.25, -1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-19.png", + width = 171, + height = 134, + shift = util.by_pixel(-0.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-19.png", + width = 346, + height = 270, + shift = util.by_pixel(-0.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-20.png", + width = 129, + height = 99, + shift = util.by_pixel(-3.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-20.png", + width = 261, + height = 198, + shift = util.by_pixel(-3.25, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-21.png", + width = 134, + height = 101, + shift = util.by_pixel(3, -8.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-21.png", + width = 270, + height = 205, + shift = util.by_pixel(2.5, -8.75), + scale = 0.5 + }, + }, + --[[{ + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-22.png", + width = 131, + height = 105, + shift = util.by_pixel(-11.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-22.png", + width = 266, + height = 212, + shift = util.by_pixel(-11.5, 5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-23.png", + width = 145, + height = 80, + shift = util.by_pixel(13.5, -10), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-23.png", + width = 292, + height = 164, + shift = util.by_pixel(13.5, -10.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-24.png", + width = 188, + height = 115, + shift = util.by_pixel(0, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-24.png", + width = 377, + height = 232, + shift = util.by_pixel(-0.25, 2.5), + scale = 0.5 + }, + },]]-- + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-25.png", + width = 188, + height = 100, + shift = util.by_pixel(0, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-25.png", + width = 376, + height = 204, + shift = util.by_pixel(0, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-26.png", + width = 186, + height = 107, + shift = util.by_pixel(-1, -12.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-26.png", + width = 376, + height = 214, + shift = util.by_pixel(0, -13), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-27.png", + width = 188, + height = 103, + shift = util.by_pixel(0, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-27.png", + width = 378, + height = 209, + shift = util.by_pixel(0, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-28.png", + width = 188, + height = 95, + shift = util.by_pixel(0, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-28.png", + width = 378, + height = 198, + shift = util.by_pixel(0, 5), + scale = 0.5 + }, + }, + --[[{ + filename = "__alien-biomes__/graphics/decorative/lava/|color|/sr/lava-decal-29.png", + width = 176, + height = 108, + shift = util.by_pixel(6, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/lava/|color|/hr/lava-decal-29.png", + width = 352, + height = 218, + shift = util.by_pixel(6, 0), + scale = 0.5 + }, + },]]-- + }, +} +local variants = { } +if settings.startup["alien-biomes-include-volcanic-orange"].value ~= "Disabled" then + table.insert(variants, "orange") +end +if settings.startup["alien-biomes-include-volcanic-green"].value ~= "Disabled" then + table.insert(variants, "green") +end +if settings.startup["alien-biomes-include-volcanic-blue"].value ~= "Disabled" then + table.insert(variants, "blue") +end +if settings.startup["alien-biomes-include-volcanic-purple"].value ~= "Disabled" then + table.insert(variants, "purple") +end +local heats = {"heat-2", "heat-3", "heat-4"} +for _, variant in pairs(variants) do + local lava = table.deepcopy(lava_decal_base) + lava.name = lava.name .. "-" .. variant + lava.autoplace.tile_restriction = {} + for _, heat in pairs(heats) do + table.insert(lava.autoplace.tile_restriction, "volcanic-" .. variant .. "-" .. heat) + end + data_util.replace_filenames_recursive(lava.pictures, "|color|", variant) + data:extend({lava}) +end diff --git a/alien-biomes/prototypes/decorative/puddle-decal.lua b/alien-biomes/prototypes/decorative/puddle-decal.lua new file mode 100644 index 00000000..f975298f --- /dev/null +++ b/alien-biomes/prototypes/decorative/puddle-decal.lua @@ -0,0 +1,432 @@ +data:extend({ +{ + type = "noise-layer", + name = "puddle-decal" +}, +{ + name = "puddle-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[puddle-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = { + max_probability = 0.1, + random_probability_penalty = 0.66, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = -1 + }, + { + infleunce = 0.5, + noise_layer = "puddle-decal", + noise_octaves_difference = -2, + noise_persistence = 0.9, + }, + { + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.5, + } + }, + sharpness = 0.7, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"dirt", "grass", "snow-0", "snow-1"})) + }, + pictures = + { + --addchole + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-00.png", + width = 174, + height = 134, + shift = util.by_pixel(5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-00.png", + width = 351, + height = 267, + shift = util.by_pixel(4.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-01.png", + width = 151, + height = 130, + shift = util.by_pixel(2.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-01.png", + width = 305, + height = 262, + shift = util.by_pixel(2.25, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-02.png", + width = 163, + height = 135, + shift = util.by_pixel(-8.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-02.png", + width = 327, + height = 270, + shift = util.by_pixel(-8.25, -0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-03.png", + width = 127, + height = 134, + shift = util.by_pixel(10.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-03.png", + width = 258, + height = 268, + shift = util.by_pixel(10, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-04.png", + width = 114, + height = 100, + shift = util.by_pixel(9, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-04.png", + width = 231, + height = 201, + shift = util.by_pixel(8.75, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-05.png", + width = 146, + height = 116, + shift = util.by_pixel(12, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-05.png", + width = 295, + height = 234, + shift = util.by_pixel(12.25, 6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-06.png", + width = 133, + height = 85, + shift = util.by_pixel(-6.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-06.png", + width = 271, + height = 172, + shift = util.by_pixel(-5.75, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-07.png", + width = 139, + height = 118, + shift = util.by_pixel(-1.5, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-07.png", + width = 282, + height = 266, + shift = util.by_pixel(-1.5, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-08.png", + width = 188, + height = 114, + shift = util.by_pixel(0, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-08.png", + width = 377, + height = 231, + shift = util.by_pixel(-0.25, -7.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-09.png", + width = 170, + height = 100, + shift = util.by_pixel(9, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-09.png", + width = 376, + height = 202, + shift = util.by_pixel(0, 6), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-10.png", + width = 184, + height = 116, + shift = util.by_pixel(-1, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-10.png", + width = 372, + height = 234, + shift = util.by_pixel(-1, 3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-11.png", + width = 171, + height = 111, + shift = util.by_pixel(-1.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-11.png", + width = 344, + height = 224, + shift = util.by_pixel(-1.5, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-12.png", + width = 138, + height = 94, + shift = util.by_pixel(-10, 4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-12.png", + width = 290, + height = 189, + shift = util.by_pixel(-8, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-13.png", + width = 159, + height = 109, + shift = util.by_pixel(-4.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-13.png", + width = 326, + height = 228, + shift = util.by_pixel(-3, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-14.png", + width = 153, + height = 111, + shift = util.by_pixel(-13.5, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-14.png", + width = 312, + height = 225, + shift = util.by_pixel(-13.5, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-15.png", + width = 178, + height = 92, + shift = util.by_pixel(-5, 4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-15.png", + width = 359, + height = 186, + shift = util.by_pixel(-4.25, 4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-16.png", + width = 142, + height = 117, + shift = util.by_pixel(11, 6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-16.png", + width = 287, + height = 266, + shift = util.by_pixel(10.75, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-17.png", + width = 188, + height = 133, + shift = util.by_pixel(0, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-17.png", + width = 377, + height = 267, + shift = util.by_pixel(0.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-18.png", + width = 186, + height = 135, + shift = util.by_pixel(1, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-18.png", + width = 375, + height = 269, + shift = util.by_pixel(0.25, -1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-19.png", + width = 171, + height = 134, + shift = util.by_pixel(-0.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-19.png", + width = 346, + height = 270, + shift = util.by_pixel(-0.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-20.png", + width = 129, + height = 99, + shift = util.by_pixel(-3.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-20.png", + width = 261, + height = 198, + shift = util.by_pixel(-3.25, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-21.png", + width = 134, + height = 101, + shift = util.by_pixel(3, -8.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-21.png", + width = 270, + height = 205, + shift = util.by_pixel(2.5, -8.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-22.png", + width = 131, + height = 105, + shift = util.by_pixel(-11.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-22.png", + width = 266, + height = 212, + shift = util.by_pixel(-11.5, 5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-23.png", + width = 145, + height = 80, + shift = util.by_pixel(13.5, -10), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-23.png", + width = 292, + height = 164, + shift = util.by_pixel(13.5, -10.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-24.png", + width = 188, + height = 115, + shift = util.by_pixel(0, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-24.png", + width = 377, + height = 232, + shift = util.by_pixel(-0.25, 2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-25.png", + width = 188, + height = 100, + shift = util.by_pixel(0, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-25.png", + width = 376, + height = 204, + shift = util.by_pixel(0, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-26.png", + width = 186, + height = 107, + shift = util.by_pixel(-1, -12.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-26.png", + width = 376, + height = 214, + shift = util.by_pixel(0, -13), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-27.png", + width = 188, + height = 103, + shift = util.by_pixel(0, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-27.png", + width = 378, + height = 209, + shift = util.by_pixel(0, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-28.png", + width = 188, + height = 95, + shift = util.by_pixel(0, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-28.png", + width = 378, + height = 198, + shift = util.by_pixel(0, 5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/puddle/sr/puddle-decal-29.png", + width = 176, + height = 108, + shift = util.by_pixel(6, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/puddle/hr/puddle-decal-29.png", + width = 352, + height = 218, + shift = util.by_pixel(6, 0), + scale = 0.5 + }, + }, + }, +}}) diff --git a/alien-biomes/prototypes/decorative/rocks-base.lua b/alien-biomes/prototypes/decorative/rocks-base.lua new file mode 100644 index 00000000..4007d103 --- /dev/null +++ b/alien-biomes/prototypes/decorative/rocks-base.lua @@ -0,0 +1,3453 @@ +local rock_coverage_multiplier = 3 +local rock_max_prob_multiplier = 6 +return { +{ + name = "rock-huge", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-huge.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "grass", + order = "b[decorative]-l[rock]-a[huge]", + collision_box = {{-1.5, -1.1}, {1.5, 1.1}}, + selection_box = {{-1.7, -1.3}, {1.7, 1.3}}, + minable = + { + mining_particle = "stone-particle", + mining_time = 1.5, + results = {{name = "stone", amount_min = 20, amount_max = 40}, {name = "coal", amount_min = 0, amount_max = 20}}, + --count = 200 + }, + loot = + { + {item = "stone", probability = 1, count_min = 10, count_max = 20} + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + render_layer = "object", + max_health = 2000, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + autoplace = { + coverage = 0.00125 * rock_coverage_multiplier, + max_probability = 0.0875 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-a[huge]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-05.png", + width = 101, + height = 90, + shift = {0.25, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-05.png", + width = 201, + height = 179, + scale = 0.5, + shift = {0.25, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-06.png", + width = 117, + height = 86, + shift = {0.4375, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-06.png", + width = 233, + height = 171, + scale = 0.5, + shift = {0.429688, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-07.png", + width = 120, + height = 96, + shift = {0.390625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-07.png", + width = 240, + height = 192, + scale = 0.5, + shift = {0.398438, 0.03125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-08.png", + width = 110, + height = 88, + shift = {0.140625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-08.png", + width = 219, + height = 175, + scale = 0.5, + shift = {0.148438, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-09.png", + width = 120, + height = 104, + shift = {0.3125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-09.png", + width = 240, + height = 208, + scale = 0.5, + shift = {0.3125, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-10.png", + width = 122, + height = 95, + shift = {0.1875, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-10.png", + width = 243, + height = 190, + scale = 0.5, + shift = {0.1875, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-11.png", + width = 125, + height = 93, + shift = {0.390625, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-11.png", + width = 249, + height = 185, + scale = 0.5, + shift = {0.398438, 0.0546875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-12.png", + width = 137, + height = 82, + shift = {0.34375, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-12.png", + width = 273, + height = 163, + scale = 0.5, + shift = {0.34375, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-13.png", + width = 138, + height = 88, + shift = {0.265625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-13.png", + width = 275, + height = 175, + scale = 0.5, + shift = {0.273438, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-14.png", + width = 121, + height = 108, + shift = {0.203125, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-14.png", + width = 241, + height = 215, + scale = 0.5, + shift = {0.195312, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-15.png", + width = 159, + height = 91, + shift = {0.515625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-15.png", + width = 318, + height = 181, + scale = 0.5, + shift = {0.523438, 0.03125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-16.png", + width = 109, + height = 112, + shift = {0.046875, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-16.png", + width = 217, + height = 224, + scale = 0.5, + shift = {0.0546875, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-17.png", + width = 166, + height = 114, + shift = {0.234375, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-17.png", + width = 332, + height = 228, + scale = 0.5, + shift = {0.226562, 0.046875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-18.png", + width = 145, + height = 122, + shift = {0.203125, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-18.png", + width = 290, + height = 243, + scale = 0.5, + shift = {0.195312, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-19.png", + width = 175, + height = 113, + shift = {0.609375, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-19.png", + width = 349, + height = 225, + scale = 0.5, + shift = {0.609375, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/rock-huge-20.png", + width = 144, + height = 125, + shift = {0.140625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-huge/hr-rock-huge-20.png", + width = 287, + height = 250, + scale = 0.5, + shift = {0.132812, 0.03125} + }, + } + } +}, +{ + name = "rock-big", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-big.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "grass", + order = "b[decorative]-l[rock]-b[big]", + collision_box = {{-1.0, -0.9}, {1.0, 1.0}}, + selection_box = {{-1.2, -1.2}, {1.2, 1.2}}, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + result = "stone", + count = 20 + }, + loot = + { + {item = "stone", probability = 1, count_min = 10, count_max = 20} + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + render_layer = "object", + max_health = 500, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + autoplace = { + coverage = 0.002 * rock_coverage_multiplier, + max_probability = 0.16 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-b[big]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-01.png", + width = 94, + height = 64, + shift = {-0.046875, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-01.png", + width = 188, + height = 127, + scale = 0.5, + shift = {-0.046875, 0.171875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-02.png", + width = 98, + height = 68, + shift = {0.4375, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-02.png", + width = 195, + height = 135, + scale = 0.5, + shift = {0.445312, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-03.png", + width = 103, + height = 66, + shift = {0.484375, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-03.png", + width = 205, + height = 132, + scale = 0.5, + shift = {0.484375, 0.0546875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-04.png", + width = 72, + height = 71, + shift = {0.21875, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-04.png", + width = 144, + height = 142, + scale = 0.5, + shift = {0.210938, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-05.png", + width = 65, + height = 54, + shift = {0.015625, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-05.png", + width = 130, + height = 107, + scale = 0.5, + shift = {0.0234375, 0.226562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-06.png", + width = 83, + height = 55, + shift = {0.15625, 0.234375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-06.png", + width = 165, + height = 109, + scale = 0.5, + shift = {0.15625, 0.226562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-07.png", + width = 75, + height = 67, + shift = {0.265625, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-07.png", + width = 150, + height = 133, + scale = 0.5, + shift = {0.257812, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-08.png", + width = 78, + height = 56, + shift = {0.09375, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-08.png", + width = 156, + height = 111, + scale = 0.5, + shift = {0.0859375, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-09.png", + width = 94, + height = 60, + shift = {0.078125, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-09.png", + width = 187, + height = 120, + scale = 0.5, + shift = {0.078125, 0.0859375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-10.png", + width = 113, + height = 64, + shift = {-0.15625, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-10.png", + width = 225, + height = 128, + scale = 0.5, + shift = {-0.15625, 0.0703125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-11.png", + width = 92, + height = 72, + shift = {0.203125, 0.265625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-11.png", + width = 183, + height = 144, + scale = 0.5, + shift = {0.195312, 0.257812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-12.png", + width = 79, + height = 69, + shift = {0.046875, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-12.png", + width = 158, + height = 138, + scale = 0.5, + shift = {0.0390625, 0.15625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-13.png", + width = 94, + height = 75, + shift = {0.21875, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-13.png", + width = 188, + height = 150, + scale = 0.5, + shift = {0.226562, 0.21875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-14.png", + width = 93, + height = 80, + shift = {0.125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-14.png", + width = 186, + height = 160, + scale = 0.5, + shift = {0.132812, 0.0625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-15.png", + width = 91, + height = 87, + shift = {0.3125, -0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-15.png", + width = 181, + height = 174, + scale = 0.5, + shift = {0.304688, -0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-16.png", + width = 106, + height = 75, + shift = {0.34375, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-16.png", + width = 212, + height = 150, + scale = 0.5, + shift = {0.335938, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-17.png", + width = 78, + height = 59, + shift = {0.25, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-17.png", + width = 155, + height = 117, + scale = 0.5, + shift = {0.25, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-18.png", + width = 71, + height = 64, + shift = {0.3125, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-18.png", + width = 141, + height = 128, + scale = 0.5, + shift = {0.304688, 0.0390625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-19.png", + width = 88, + height = 57, + shift = {0.390625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-19.png", + width = 176, + height = 114, + scale = 0.5, + shift = {0.390625, 0.0234375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/rock-big-20.png", + width = 60, + height = 63, + shift = {0.140625, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-big/hr-rock-big-20.png", + width = 120, + height = 125, + scale = 0.5, + shift = {0.148438, 0.03125} + }, + }, + } +}, +{ + name = "rock-medium", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-c[medium]", + selectable_in_game = false, + collision_box = {{-1.1, -1.1}, {1.1, 1.1}}, + --selection_box = {{-1.3, -1.3}, {1.3, 1.3}}, + render_layer = "decorative", + autoplace = { + coverage = 0.005 * rock_coverage_multiplier, + max_probability = 0.35 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-c[medium]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 32, + shift = {0.078125, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 89, + height = 63, + scale = 0.5, + shift = {0.078125, 0.109375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 33, + shift = {0.015625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 66, + scale = 0.5, + shift = {0.015625, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 32, + shift = {0.140625, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 92, + height = 63, + scale = 0.5, + shift = {0.148438, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 30, + shift = {0, 0.1875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 59, + scale = 0.5, + shift = {-0.0078125, 0.1875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 36, + shift = {0.203125, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 104, + height = 72, + scale = 0.5, + shift = {0.203125, 0.179688} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 41, + shift = {0.015625, 0.21875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 83, + height = 82, + scale = 0.5, + shift = {0.015625, 0.21875} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 33, + shift = {0.0625, 0.3125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 111, + height = 65, + scale = 0.5, + shift = {0.0625, 0.3125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 40, + height = 41, + shift = {0.109375, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 79, + height = 81, + scale = 0.5, + shift = {0.109375, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 28, + shift = {0.015625, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 56, + scale = 0.5, + shift = {0.015625, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 34, + shift = {0, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 68, + scale = 0.5, + shift = {0, 0.132812} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 36, + shift = {-0.03125, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 105, + height = 71, + scale = 0.5, + shift = {-0.0234375, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 40, + shift = {0.078125, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-medium/hr-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 80, + scale = 0.5, + shift = {0.078125, -0.015625} + }, + } + } +}, +{ + name = "rock-small", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-d[small]", + selectable_in_game = false, + collision_box = {{-0.8, -0.8}, {0.8, 0.8}}, + render_layer = "decorative", + autoplace = { + coverage = 0.01 * rock_coverage_multiplier, + max_probability = 0.7 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-d[small]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 19, + shift = {0.0625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 37, + scale = 0.5, + shift = {0.0546875, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 18, + shift = {0.046875, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 35, + scale = 0.5, + shift = {0.0390625, 0.078125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 21, + shift = {-0.015625, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 42, + scale = 0.5, + shift = {-0.0078125, 0.148438} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 17, + shift = {0.015625, 0.15625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 33, + scale = 0.5, + shift = {0.0234375, 0.15625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 23, + shift = {0.046875, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 47, + height = 46, + scale = 0.5, + shift = {0.0390625, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 21, + shift = {-0.03125, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 41, + scale = 0.5, + shift = {-0.03125, 0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 18, + shift = {-0.015625, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 64, + height = 36, + scale = 0.5, + shift = {-0.015625, 0.0703125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 16, + shift = {-0.71875, -0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 31, + scale = 0.5, + shift = {-0.71875, -0.164062} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 17, + shift = {-0.09375, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 34, + scale = 0.5, + shift = {-0.0859375, 0.101562} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 17, + shift = {0, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 48, + height = 34, + scale = 0.5, + shift = {0.0078125, 0.125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 17, + shift = {-0.09375, 0.078125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 33, + scale = 0.5, + shift = {-0.0859375, 0.078125} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 20, + shift = {0.078125, 0.109375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 47, + height = 39, + scale = 0.5, + shift = {0.078125, 0.117188} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 17, + shift = {0, 0.09375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 33, + scale = 0.5, + shift = {0, 0.09375} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 15, + shift = {0.046875, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 30, + scale = 0.5, + shift = {0.046875, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 19, + shift = {0, 0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 37, + scale = 0.5, + shift = {0, 0.140625} + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 17, + shift = {0.015625, 0.125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-small/hr-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + scale = 0.5, + shift = {0.0234375, 0.125} + }, + } + } +}, +{ + name = "rock-tiny", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-l[rock]-e[tiny]", + selectable_in_game = false, + collision_box = {{-0.1, -0.1}, {0.1, 0.1}}, + render_layer = "decorative", + autoplace = { + coverage = 0.011000000000000001 * rock_coverage_multiplier, + max_probability = 0.77000000000000002 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-e[tiny]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-01.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 11, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-01.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 21, + scale = 0.5, + shift = {0.0390625, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-02.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0, 0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-02.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 19, + scale = 0.5, + shift = {0.0078125, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-03.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 12, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-03.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 24, + scale = 0.5, + shift = {0.0234375, 0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-04.png", + priority = base_decorative_sprite_priority, + width = 16, + height = 10, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-04.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 20, + scale = 0.5, + shift = {0.03125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-05.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 13, + shift = {0, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-05.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 25, + scale = 0.5, + shift = {0, -0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-06.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 12, + shift = {0, -0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-06.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 24, + scale = 0.5, + shift = {0, -0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-07.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 17, + shift = {-0.34375, -0.140625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-07.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 34, + scale = 0.5, + shift = {-0.34375, -0.132812} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-08.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 10, + shift = {-0.03125, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-08.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 19, + scale = 0.5, + shift = {-0.03125, 0} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-09.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-09.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 20, + scale = 0.5, + shift = {0.0234375, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-10.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0.015625, -0.03125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-10.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + scale = 0.5, + shift = {0.0078125, -0.0234375} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-11.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 10, + shift = {0.046875, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-11.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + scale = 0.5, + shift = {0.046875, 0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-12.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 11, + shift = {0.015625, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-12.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 22, + scale = 0.5, + shift = {0.015625, 0} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-13.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.03125, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-13.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 19, + scale = 0.5, + shift = {0.03125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-14.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.015625, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-14.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 19, + scale = 0.5, + shift = {0.0078125, 0.0078125} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-15.png", + priority = base_decorative_sprite_priority, + width = 13, + height = 11, + shift = {0, 0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-15.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 22, + scale = 0.5, + shift = {0.0078125, 0.015625} + } + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/rock-tiny-16.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = {0.03125, 0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/rock-tiny/hr-rock-tiny-16.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 20, + scale = 0.5, + shift = {0.03125, 0.0078125} + } + } + } +}, +{ + name = "sand-rock-big", + type = "simple-entity", + flags = {"placeable-neutral", "placeable-off-grid", "not-on-map"}, + icon = "__base__/graphics/icons/rock-big.png", + icon_size = 64, icon_mipmaps = 4, + subgroup = "wrecks", + order = "b[decorative]-l[rock]-b[big]", + collision_box = {{-0.75, -0.75}, {0.75, 0.75}}, + selection_box = {{-1.0, -1.0}, {1.0, 0.75}}, + render_layer = "object", + max_health = 500, + autoplace = { + coverage = 0.0025 * rock_coverage_multiplier, + max_probability = 0.175 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-b[big]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + minable = + { + mining_particle = "stone-particle", + mining_time = 1, + results = {{name = "stone", amount_min = 10, amount_max = 20}}, + }, + loot = + { + {item = "stone", probability = 1, count_min = 0, count_max = 10} + }, + resistances = + { + { type = "fire", percent = 100 }, + { type = "poison", percent = 100 } + }, + count_as_rock_for_filtered_deconstruction = true, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-01.png", + width = 105, + height = 69, + shift = {0.296875, -0.4}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-01.png", + width = 209, + height = 138, + shift = {0.304688, -0.4}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-02.png", + width = 82, + height = 65, + shift = {0.0, 0.046875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-02.png", + width = 165, + height = 129, + shift = {0.0, 0.0390625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-03.png", + width = 76, + height = 69, + shift = {0.14375, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-03.png", + width = 151, + height = 139, + shift = {0.151562, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-04.png", + width = 108, + height = 55, + shift = {0.398438, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-04.png", + width = 216, + height = 110, + shift = {0.390625, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-05.png", + width = 77, + height = 74, + shift = {0.328125, 0.0625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-05.png", + width = 154, + height = 147, + shift = {0.328125, 0.0703125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-06.png", + width = 77, + height = 66, + shift = {0.16875, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-06.png", + width = 154, + height = 132, + shift = {0.16875, -0.1}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-07.png", + width = 96, + height = 65, + shift = {0.3, -0.2}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-07.png", + width = 193, + height = 130, + shift = {0.3, -0.2}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-08.png", + width = 68, + height = 59, + shift = {0.0, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-08.png", + width = 136, + height = 117, + shift = {0.0, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-09.png", + width = 78, + height = 58, + shift = {0.2, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-09.png", + width = 157, + height = 115, + shift = {0.1, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-10.png", + width = 99, + height = 77, + shift = {0.325, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-10.png", + width = 198, + height = 153, + shift = {0.325, -0.1}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-11.png", + width = 95, + height = 58, + shift = {0.453125, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-11.png", + width = 190, + height = 115, + shift = {0.453125, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-12.png", + width = 115, + height = 63, + shift = {0.546875, -0.015625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-12.png", + width = 229, + height = 126, + shift = {0.539062, -0.015625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-13.png", + width = 75, + height = 63, + shift = {0.0625, 0.171875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-13.png", + width = 151, + height = 125, + shift = {0.0703125, 0.179688}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-14.png", + width = 69, + height = 59, + shift = {0.153125, 0.0}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-14.png", + width = 137, + height = 117, + shift = {0.160938, 0.0}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-15.png", + width = 100, + height = 71, + shift = {0.234375, -0.203125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-15.png", + width = 201, + height = 141, + shift = {0.242188, -0.195312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-big-16.png", + width = 104, + height = 77, + shift = {0.359375, -0.1}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-big-16.png", + width = 209, + height = 154, + shift = {0.351562, -0.1}, + scale = 0.5, + }, + }, + }, +}, +{ + name = "sand-rock-medium", + type = "optimized-decorative", + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck-grass]-b[small]", + collision_box = {{-1.5, -0.5}, {1.5, 0.5}}, + selection_box = {{-1.7, -0.6}, {1.7, 0.6}}, + selectable_in_game = false, + render_layer = "floor", + autoplace = { + coverage = 0.004 * rock_coverage_multiplier, + max_probability = 0.27999999999999998 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-c[medium]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 41, + shift = {0.328125, 0.515625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-01.png", + priority = base_decorative_sprite_priority, + width = 134, + height = 82, + shift = {0.328125, 0.515625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 40, + shift = {0.15625, 0.5625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-02.png", + priority = base_decorative_sprite_priority, + width = 110, + height = 79, + shift = {0.15625, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 30, + shift = {0.34375, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-03.png", + priority = base_decorative_sprite_priority, + width = 90, + height = 60, + shift = {0.34375, 0.484375}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 45, + shift = {0.296875, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-04.png", + priority = base_decorative_sprite_priority, + width = 110, + height = 89, + shift = {0.296875, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 38, + shift = {0.359375, 0.25}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-05.png", + priority = base_decorative_sprite_priority, + width = 106, + height = 76, + shift = {0.359375, 0.25}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 46, + shift = {0.4375, 0.296875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-06.png", + priority = base_decorative_sprite_priority, + width = 100, + height = 92, + shift = {0.4375, 0.296875}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 41, + shift = {0.59375, 0.40625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-07.png", + priority = base_decorative_sprite_priority, + width = 82, + height = 83, + shift = {0.59375, 0.398438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 46, + shift = {0.59375, 0.328125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-08.png", + priority = base_decorative_sprite_priority, + width = 123, + height = 92, + shift = {0.601562, 0.328125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 38, + shift = {0.5625, 0.3125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-09.png", + priority = base_decorative_sprite_priority, + width = 146, + height = 76, + shift = {0.5625, 0.3125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 39, + shift = {0.46875, 0.453125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-10.png", + priority = base_decorative_sprite_priority, + width = 112, + height = 77, + shift = {0.46875, 0.460938}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 30, + shift = {0.4375, 0.515625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-11.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 61, + shift = {0.445312, 0.507812}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 42, + shift = {0.390625, 0.453125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-12.png", + priority = base_decorative_sprite_priority, + width = 105, + height = 84, + shift = {0.398438, 0.453125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-13.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 36, + shift = {0.375, 0.640625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-13.png", + priority = base_decorative_sprite_priority, + width = 94, + height = 73, + shift = {0.375, 0.632812}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-14.png", + priority = base_decorative_sprite_priority, + width = 61, + height = 45, + shift = {0.359375, 0.578125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-14.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 89, + shift = {0.359375, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-15.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 33, + shift = {0.1875, 0.765625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-15.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 65, + shift = {0.1875, 0.773438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-medium-16.png", + priority = base_decorative_sprite_priority, + width = 72, + height = 38, + shift = {0.109375, 0.71875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-medium-16.png", + priority = base_decorative_sprite_priority, + width = 144, + height = 76, + shift = {0.109375, 0.71875}, + scale = 0.5, + }, + }, + } +}, + +{ + name = "sand-rock-small", + type = "optimized-decorative", + subgroup = "wrecks", + order = "d[remnants]-d[ship-wreck-grass]-b[small]", + collision_box = {{-1.5, -0.5}, {1.5, 0.5}}, + selection_box = {{-1.7, -0.6}, {1.7, 0.6}}, + selectable_in_game = false, + render_layer = "floor", + autoplace = { + coverage = 0.011000000000000001 * rock_coverage_multiplier, + max_probability = 0.77000000000000002 * rock_max_prob_multiplier, + order = "a[doodad]-a[rock]-d[small]", + peaks = { + { + noise_layer = "rocks", + noise_octaves_difference = -2, + noise_persistence = 0.9, + } + }, + sharpness = 0.7 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 23, + shift = {0.40625, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-01.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 45, + shift = {0.40625, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 22, + shift = {0.296875, 0.484375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-02.png", + priority = base_decorative_sprite_priority, + width = 54, + height = 45, + shift = {0.296875, 0.476562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 22, + height = 20, + shift = {0.328125, 0.53125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-03.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 40, + shift = {0.328125, 0.53125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 22, + shift = {0.265625, 0.59375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-04.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 43, + shift = {0.265625, 0.601562}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 24, + shift = {0.296875, 0.46875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-05.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 48, + shift = {0.296875, 0.46875}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 20, + shift = {0.546875, 0.53125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-06.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 39, + shift = {0.554688, 0.523438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 21, + shift = {0.578125, 0.546875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-07.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 41, + shift = {0.570312, 0.539062}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 25, + height = 23, + shift = {0.640625, 0.390625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-08.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 46, + shift = {0.640625, 0.390625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 22, + shift = {0.671875, 0.34375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-09.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 43, + shift = {0.671875, 0.335938}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 20, + shift = {0.625, 0.40625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-10.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 39, + shift = {0.632812, 0.398438}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 21, + shift = {0.453125, 0.609375}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-11.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 41, + shift = {0.460938, 0.617188}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 34, + height = 26, + shift = {0.46875, 0.5625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-12.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 51, + shift = {0.460938, 0.570312}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 19, + shift = {0.484375, 0.796875}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-13.png", + priority = base_decorative_sprite_priority, + width = 70, + height = 37, + shift = {0.484375, 0.789062}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 24, + shift = {0.1875, 0.90625}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-14.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 48, + shift = {0.179688, 0.90625}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 24, + shift = {0.140625, 0.78125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-15.png", + priority = base_decorative_sprite_priority, + width = 56, + height = 48, + shift = {0.140625, 0.78125}, + scale = 0.5, + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/sand-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 23, + shift = {-0.03125, 0.78125}, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-rock/hr-sand-rock-small-16.png", + priority = base_decorative_sprite_priority, + width = 74, + height = 46, + shift = {-0.03125, 0.78125}, + scale = 0.5, + }, + }, + }, +}, +{ + name = "sand-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-6, -6}, {6, 6}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, -- despite the name, this is not sand exclusive decal; draw under stone path and concrete + autoplace = { + max_probability = 0.05, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = 0.2, + noise_layer = "sand-decal", + --noise_octaves_difference = -2, + noise_octaves_difference = -4, + noise_persistence = 0.9 + }, + { + influence = 0.05, + } + }, + sharpness = 0.1 + }, + pictures = + { + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-01.png", + width = 488, + height = 322, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-01.png", + width = 975, + height = 664, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-02.png", + width = 314, + height = 239, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-02.png", + width = 628, + height = 477, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-03.png", + width = 260, + height = 166, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-03.png", + width = 519, + height = 331, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-04.png", + width = 435, + height = 391, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-04.png", + width = 870, + height = 781, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-05.png", + width = 115, + height = 81, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-05.png", + width = 230, + height = 161, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-06.png", + width = 70, + height = 55, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-06.png", + width = 140, + height = 110, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-07.png", + width = 143, + height = 122, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-07.png", + width = 285, + height = 243, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-08.png", + width = 78, + height = 43, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-08.png", + width = 156, + height = 85, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-09.png", + width = 106, + height = 76, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-09.png", + width = 212, + height = 152, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-10.png", + width = 117, + height = 99, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-10.png", + width = 233, + height = 197, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-11.png", + width = 162, + height = 207, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-11.png", + width = 324, + height = 413, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-12.png", + width = 252, + height = 244, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-12.png", + width = 504, + height = 488, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-13.png", + width = 165, + height = 153, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-13.png", + width = 329, + height = 305, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-14.png", + width = 406, + height = 362, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-14.png", + width = 811, + height = 724, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-15.png", + width = 133, + height = 131, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-15.png", + width = 266, + height = 262, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-16.png", + width = 461, + height = 356, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-16.png", + width = 921, + height = 712, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-17.png", + width = 361, + height = 198, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-17.png", + width = 722, + height = 395, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-18.png", + width = 94, + height = 145, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-18.png", + width = 187, + height = 289, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-19.png", + width = 500, + height = 187, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-19.png", + width = 999, + height = 374, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-20.png", + width = 392, + height = 200, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-20.png", + width = 783, + height = 399, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-21.png", + width = 334, + height = 203, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-21.png", + width = 668, + height = 406, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-22.png", + width = 219, + height = 159, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-22.png", + width = 437, + height = 318, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-23.png", + width = 197, + height = 123, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-23.png", + width = 394, + height = 246, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-24.png", + width = 181, + height = 146, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-24.png", + width = 361, + height = 291, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-25.png", + width = 645, + height = 641, + slice_y = 4, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-25.png", + width = 1290, + height = 1281, + slice_y = 4, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-26.png", + width = 157, + height = 87, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-26.png", + width = 314, + height = 174, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-27.png", + width = 174, + height = 132, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-27.png", + width = 348, + height = 264, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-28.png", + width = 244, + height = 179, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-28.png", + width = 488, + height = 357, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-29.png", + width = 297, + height = 317, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-29.png", + width = 594, + height = 634, + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/sand-decal-30.png", + width = 98, + height = 108, + hr_version = + { + filename = "__alien-biomes__/graphics/decorative/rock/base/sand-decal/hr-sand-decal-30.png", + width = 195, + height = 215, + scale = 0.5 + }, + }, + }, +}, +{ + name = "sand-dune-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = + { + order = "a[doodad]-b[decal]", + sharpness = 0.2, + max_probability = 0.04, + peaks = + { + peak, + { + influence = 0.5, + }, + { + influence = 1, + noise_layer = "sand-dune-decal", + noise_octaves_difference = -3, + noise_persistence = 0.7, + } + }, + tile_restriction = { "sand-1" } + }, + pictures = + { + --dune + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-00.png", + width = 105, + height = 84, + shift = util.by_pixel(-8.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-00.png", + width = 212, + height = 168, + shift = util.by_pixel(-8, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-01.png", + width = 88, + height = 73, + shift = util.by_pixel(-3, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-01.png", + width = 211, + height = 148, + shift = util.by_pixel(5.75, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-02.png", + width = 130, + height = 91, + shift = util.by_pixel(3, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-02.png", + width = 260, + height = 184, + shift = util.by_pixel(3, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-03.png", + width = 61, + height = 90, + shift = util.by_pixel(0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-03.png", + width = 129, + height = 181, + shift = util.by_pixel(0.75, 1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-04.png", + width = 95, + height = 92, + shift = util.by_pixel(-3.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-04.png", + width = 196, + height = 184, + shift = util.by_pixel(-3.5, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-05.png", + width = 107, + height = 92, + shift = util.by_pixel(-1.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-05.png", + width = 215, + height = 184, + shift = util.by_pixel(-1.25, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-06.png", + width = 108, + height = 89, + shift = util.by_pixel(6, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-06.png", + width = 218, + height = 179, + shift = util.by_pixel(6.5, 4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-07.png", + width = 125, + height = 91, + shift = util.by_pixel(17.5, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-07.png", + width = 250, + height = 183, + shift = util.by_pixel(17.5, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-08.png", + width = 130, + height = 86, + shift = util.by_pixel(5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-08.png", + width = 260, + height = 176, + shift = util.by_pixel(5, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-09.png", + width = 129, + height = 92, + shift = util.by_pixel(-5.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-09.png", + width = 260, + height = 184, + shift = util.by_pixel(-5.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-10.png", + width = 115, + height = 91, + shift = util.by_pixel(-14.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-10.png", + width = 233, + height = 183, + shift = util.by_pixel(-13.75, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-11.png", + width = 85, + height = 92, + shift = util.by_pixel(-9.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-11.png", + width = 172, + height = 184, + shift = util.by_pixel(-9.5, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-12.png", + width = 129, + height = 82, + shift = util.by_pixel(2.5, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-12.png", + width = 260, + height = 166, + shift = util.by_pixel(2.5, -6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-13.png", + width = 129, + height = 85, + shift = util.by_pixel(4.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-13.png", + width = 259, + height = 172, + shift = util.by_pixel(4.75, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-14.png", + width = 98, + height = 92, + shift = util.by_pixel(-3, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-14.png", + width = 199, + height = 184, + shift = util.by_pixel(-2.25, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-15.png", + width = 104, + height = 92, + shift = util.by_pixel(9, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-15.png", + width = 214, + height = 184, + shift = util.by_pixel(8.5, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-16.png", + width = 80, + height = 91, + shift = util.by_pixel(-8, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-16.png", + width = 162, + height = 182, + shift = util.by_pixel(-8, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-17.png", + width = 110, + height = 76, + shift = util.by_pixel(-3, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-17.png", + width = 222, + height = 153, + shift = util.by_pixel(-3, -0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-18.png", + width = 122, + height = 92, + shift = util.by_pixel(4, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-18.png", + width = 247, + height = 184, + shift = util.by_pixel(4.25, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-19.png", + width = 103, + height = 92, + shift = util.by_pixel(-6.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-19.png", + width = 211, + height = 184, + shift = util.by_pixel(-5.75, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-20.png", + width = 121, + height = 91, + shift = util.by_pixel(-0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-20.png", + width = 248, + height = 183, + shift = util.by_pixel(-1.5, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-21.png", + width = 87, + height = 91, + shift = util.by_pixel(6.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-21.png", + width = 176, + height = 184, + shift = util.by_pixel(6.5, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-22.png", + width = 104, + height = 92, + shift = util.by_pixel(9, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-22.png", + width = 208, + height = 185, + shift = util.by_pixel(9, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-23.png", + width = 113, + height = 91, + shift = util.by_pixel(-3.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-23.png", + width = 227, + height = 184, + shift = util.by_pixel(-3.75, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-24.png", + width = 78, + height = 92, + shift = util.by_pixel(5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-24.png", + width = 158, + height = 186, + shift = util.by_pixel(4.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-25.png", + width = 129, + height = 91, + shift = util.by_pixel(1.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-25.png", + width = 260, + height = 184, + shift = util.by_pixel(1.5, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-26.png", + width = 66, + height = 92, + shift = util.by_pixel(-1, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-26.png", + width = 134, + height = 184, + shift = util.by_pixel(-0.5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-27.png", + width = 63, + height = 82, + shift = util.by_pixel(26.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-27.png", + width = 127, + height = 165, + shift = util.by_pixel(26.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-28.png", + width = 129, + height = 79, + shift = util.by_pixel(-2.5, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-28.png", + width = 258, + height = 158, + shift = util.by_pixel(-2.5, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/sand-dune-decal-29.png", + width = 89, + height = 92, + shift = util.by_pixel(-3.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/dune/|color|/sand-dune-decal/hr-sand-dune-decal-29.png", + width = 180, + height = 184, + shift = util.by_pixel(-3.5, -2), + scale = 0.5 + }, + }, + }, +}, +{ + name = "stone-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[red-desert-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, -- under stone-path + autoplace = + { + max_probability = 0.01, + order = "a[doodad]-b[decal]", + peaks = { + { + noise_layer = "stone-decal", + noise_octaves_difference = -2, + noise_persistence = 0.9 + } + }, + sharpness = 0.3 + }, + pictures = + { + --lightDecal + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-00.png", + width = 199, + height = 149, + shift = util.by_pixel(4.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-00.png", + width = 400, + height = 299, + shift = util.by_pixel(4.5, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-01.png", + width = 210, + height = 160, + shift = util.by_pixel(-1, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-01.png", + width = 419, + height = 320, + shift = util.by_pixel(-0.75, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-02.png", + width = 208, + height = 142, + shift = util.by_pixel(-1, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-02.png", + width = 417, + height = 287, + shift = util.by_pixel(-1.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-03.png", + width = 211, + height = 149, + shift = util.by_pixel(-0.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-03.png", + width = 421, + height = 298, + shift = util.by_pixel(-0.25, 5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-04.png", + width = 198, + height = 151, + shift = util.by_pixel(6, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-04.png", + width = 396, + height = 302, + shift = util.by_pixel(6, 4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-05.png", + width = 205, + height = 147, + shift = util.by_pixel(-2.5, 7.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-05.png", + width = 408, + height = 295, + shift = util.by_pixel(-2.5, 7.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-06.png", + width = 208, + height = 158, + shift = util.by_pixel(-1, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-06.png", + width = 417, + height = 317, + shift = util.by_pixel(-1.25, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-07.png", + width = 209, + height = 155, + shift = util.by_pixel(0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-07.png", + width = 419, + height = 312, + shift = util.by_pixel(0.75, 2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-08.png", + width = 206, + height = 158, + shift = util.by_pixel(-2, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-08.png", + width = 413, + height = 317, + shift = util.by_pixel(-2.25, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-09.png", + width = 201, + height = 155, + shift = util.by_pixel(0.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-09.png", + width = 403, + height = 310, + shift = util.by_pixel(0.25, 1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-10.png", + width = 206, + height = 153, + shift = util.by_pixel(-1, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-10.png", + width = 411, + height = 307, + shift = util.by_pixel(-0.75, 1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-11.png", + width = 210, + height = 147, + shift = util.by_pixel(0, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-11.png", + width = 421, + height = 295, + shift = util.by_pixel(-0.25, -0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-12.png", + width = 210, + height = 140, + shift = util.by_pixel(-1, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-12.png", + width = 420, + height = 280, + shift = util.by_pixel(-0.5, -7), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-13.png", + width = 201, + height = 156, + shift = util.by_pixel(0.5, 3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-13.png", + width = 403, + height = 311, + shift = util.by_pixel(0.75, 3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-14.png", + width = 209, + height = 152, + shift = util.by_pixel(0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-14.png", + width = 418, + height = 304, + shift = util.by_pixel(0, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-15.png", + width = 199, + height = 142, + shift = util.by_pixel(-3.5, 6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-15.png", + width = 398, + height = 284, + shift = util.by_pixel(-3.5, 6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-16.png", + width = 204, + height = 154, + shift = util.by_pixel(4, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-16.png", + width = 406, + height = 313, + shift = util.by_pixel(4, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-17.png", + width = 210, + height = 147, + shift = util.by_pixel(1, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-17.png", + width = 420, + height = 294, + shift = util.by_pixel(0.5, 4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-18.png", + width = 189, + height = 145, + shift = util.by_pixel(0.5, 5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-18.png", + width = 379, + height = 289, + shift = util.by_pixel(0.25, 5.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-19.png", + width = 201, + height = 155, + shift = util.by_pixel(-5.5, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-19.png", + width = 401, + height = 311, + shift = util.by_pixel(-5.25, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-20.png", + width = 209, + height = 158, + shift = util.by_pixel(0.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-20.png", + width = 418, + height = 315, + shift = util.by_pixel(0.5, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-21.png", + width = 208, + height = 157, + shift = util.by_pixel(1, 3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-21.png", + width = 418, + height = 314, + shift = util.by_pixel(1, 3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-22.png", + width = 211, + height = 135, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-22.png", + width = 421, + height = 270, + shift = util.by_pixel(-0.25, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-23.png", + width = 202, + height = 145, + shift = util.by_pixel(2, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-23.png", + width = 403, + height = 290, + shift = util.by_pixel(2.25, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-24.png", + width = 209, + height = 158, + shift = util.by_pixel(-0.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-24.png", + width = 418, + height = 315, + shift = util.by_pixel(-0.5, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-25.png", + width = 207, + height = 155, + shift = util.by_pixel(-2.5, 4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-25.png", + width = 414, + height = 310, + shift = util.by_pixel(-2, 4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-26.png", + width = 201, + height = 154, + shift = util.by_pixel(-3.5, 5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-26.png", + width = 403, + height = 306, + shift = util.by_pixel(-3.75, 5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-27.png", + width = 208, + height = 151, + shift = util.by_pixel(1, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-27.png", + width = 416, + height = 303, + shift = util.by_pixel(1, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-28.png", + width = 211, + height = 155, + shift = util.by_pixel(-0.5, 2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-28.png", + width = 422, + height = 311, + shift = util.by_pixel(0, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/stone-decal-29.png", + width = 203, + height = 146, + shift = util.by_pixel(-3.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/rock/base/stone-decal/hr-stone-decal-29.png", + width = 406, + height = 292, + shift = util.by_pixel(-3.5, 2), + scale = 0.5 + }, + }, + }, +}, +} diff --git a/alien-biomes/prototypes/decorative/rocks.lua b/alien-biomes/prototypes/decorative/rocks.lua new file mode 100644 index 00000000..b626bb88 --- /dev/null +++ b/alien-biomes/prototypes/decorative/rocks.lua @@ -0,0 +1,614 @@ +local util = require('data-util') + +local any = alien_biomes.require_tag +local all = alien_biomes.require_tags +local list = alien_biomes.list_tiles +local tiles = alien_biomes.all_tiles + +local tints = { + tan = {193,162,127}, + white = {255,255,255}, + grey = {177,183,187}, + black = {135,135,135}, + purple = {169,177,239}, + red = {185,107,105}, + violet = {165,107,161}, + dustyrose = {180,148,137}, + cream = {234,216,179}, + brown = {162,117,88}, + beige = {178,164,138}, + aubergine = {126,115,156} +} +for _, tint in pairs(tints) do + local tint2 = {} + tint2.a = 1 + tint2.r = tint[1]/255 + tint2.g = tint[2]/255 + tint2.b = tint[3]/255 + tints[_] = tint2 +end +for _, tint in pairs(tints) do + if _ ~= "tan" then + local fade = 0.5 + if _ == "white" or _ == "black" then + fade = 0.2 + end + -- step 20% towards normal rock color for other rocks (becuase cliff colours are locked) + tint.r = tint.r * (1 - fade) + tints["tan"].r * fade + tint.g = tint.g * (1 - fade) + tints["tan"].g * fade + tint.b = tint.b * (1 - fade) + tints["tan"].b * fade + end +end + +-- NOISE LAYERS +data:extend({ + { + type = "noise-layer", + name = "mud-decal" + }, + { + type = "noise-layer", + name = "stone-decal" + } +}) + +-- SHARED GRASS +data.raw['optimized-decorative']['puberty-decal'].autoplace = +{ + max_probability = 0.01, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = 1, + noise_layer = "mud-decal", + noise_octaves_difference = -2, + noise_persistence = 0.9 + } + }, + sharpness = 0.3, + tile_restriction = list(any(tiles(), {'grass'})) +} + +data.raw["optimized-decorative"]["dark-mud-decal"].autoplace = { + max_probability = 0.01, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = 1, + noise_layer = "mud-decal", + noise_octaves_difference = -2, + noise_persistence = 0.9 + }, + }, + sharpness = 0.3, + tile_restriction = list(any(tiles(), {'grass', 'dirt'})) +} + +-- ROCKS + +-- get base rocks +local base_rocks_list = require("rocks-base") +local base_rocks = {} +for _, rock in pairs(base_rocks_list) do + base_rocks[rock.name] = rock +end + +-- make a new colored rock from a base rock and restrict to certain biome tiles by tag +local make_rock = function(name, base_names, tile_restriction, multiplier, color) + if table_size(tile_restriction) > 0 then + if color == nil then color = name end + for _, base_name in pairs(base_names) do + local rock = table.deepcopy(base_rocks[base_name]) + rock.name = base_name .. '-' .. name + rock.autoplace.tile_restriction = tile_restriction + if rock.autoplace.coverage then rock.autoplace.coverage = rock.autoplace.coverage * multiplier end + if rock.autoplace.max_probability then rock.autoplace.max_probability = rock.autoplace.max_probability * multiplier end + + -- replace still required for dunes + if base_name == 'sand-dune-decal' then + util.replace_filenames_recursive(rock.pictures, '|color|', color) + else + for _, pic in pairs(rock.pictures) do + pic.tint = tints[color] + if pic.hr_version then + pic.hr_version.tint = tints[color] + end + end + end + + --rock.localised_name = {"alien-biomes.doublestring", {"alien-biomes.".. color}, {"entity-name.rock"} } + rock.localised_name = {"entity-name.rock"} + -- volcanic has generally more rocks + data:extend({rock}) + end + end +end + +-- main rocks +make_rock( + 'tan', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'dustyrose',-- dirt + 'green', 'turquoise' -- grass + } + )), + 1 +) + +-- main rocks +make_rock( + 'dustyrose', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(tiles(),{'dirt-dustyrose', 'grass-violet'})), + 1 +) + +make_rock( + 'cream', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'cream',-- dirt + 'yellow' -- grass + } + )), + 1 +) + +make_rock( + 'brown', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'brown',-- dirt + 'orange' -- grass + } + )), + 1 +) + +make_rock( + 'beige', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'beige',-- dirt + 'olive' -- grass + } + )), + 1 +) + +make_rock( + 'red', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'red', -- dirt or grass + } + )), + 1 +) + +make_rock( + 'violet', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(tiles(),{'dirt-violet'})), + 1 +) + +make_rock( + 'purple', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(tiles(),{'dirt-purple'})), + 1 +) + +make_rock( + 'aubergine', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(tiles(),{'dirt-aubergine', 'grass-mauve'})), + 1 +) + +make_rock( + 'black', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'volcanic'}), -- land types + {'black', 'volcanic' } + )), + 1 +) + +make_rock( + 'grey', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(tiles(),{'dirt-grey', 'grass-blue', 'grass-turquoise'})), + 1 +) + +make_rock( + 'white', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny' + }, + list(any(any(tiles(), + {'dirt', 'frozen'}), -- land types + { + 'white', -- dirt + 'snow', + } + )), + 1 +) + +-- non-sand shared decals +make_rock( + 'tan', + { 'stone-decal' }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'tan', 'brown', 'cream', 'beige', 'dustyrose',-- dirt + 'green', 'olive', 'turquoise', 'yellow', 'orange', 'purple' -- grass + } + )), + 1 +) + +make_rock( + 'red', + { 'stone-decal' }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'red', 'violet', -- dirt + 'red', 'violet', -- grass + } + )), + 1 +) + +make_rock( + 'purple', + { 'stone-decal' }, + list(any(any(tiles(), + {'dirt', 'grass'}), -- land types + { + 'purple', 'aubergine', -- dirt + 'purple', -- grass + } + )), + 1 +) + +make_rock( + 'black', + { 'stone-decal' }, + list(any(any(tiles(), + {'dirt'}), -- land types + {'black'} + )), + 1 +) + +make_rock( + 'white', + { 'stone-decal' }, + list(any(any(tiles(), + {'dirt', 'grass', 'frozen'}), -- land types + { + 'white', 'grey', -- dirt + 'blue', 'mauve', -- grass + 'snow', + } + )), + 1 +) + +-- shared decals +make_rock( + 'tan', + { 'sand-decal' }, + list(any(any(tiles(), + {'dirt', 'sand', 'grass'}), -- land types + { + 'tan', 'brown', 'cream', 'beige', 'dustyrose',-- dirt + 'green', 'olive', 'turquoise', 'yellow', 'orange', 'purple' -- grass + } + )), + 1 +) + +make_rock( + 'red', + { 'sand-decal' }, + list(any(any(tiles(), + {'dirt', 'sand', 'grass'}), -- land types + { + 'red', 'violet', -- dirt + 'red', 'violet', -- grass + } + )), + 1 +) + +make_rock( + 'purple', + { 'sand-decal' }, + list(any(any(tiles(), + {'dirt', 'sand', 'grass'}), -- land types + { + 'purple', 'aubergine', -- dirt + 'purple', -- grass + } + )), + 1 +) + +make_rock( + 'black', + { 'sand-decal' }, + list(any(any(tiles(), + {'dirt', 'sand', 'volcanic'}), -- land types + {'black', 'volcanic' } + )), + 2 +) + +make_rock( + 'white', + { 'sand-decal' }, + list(any(any(tiles(), + {'dirt', 'sand', 'grass', 'frozen'}), -- land types + { + 'white', 'grey', -- dirt + 'blue', 'mauve', -- grass + 'snow', + } + )), + 2 +) + +-- sandy rocks and decals +make_rock( + 'tan', + { + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + list(any(any(tiles(), + {'sand'}), -- land types + { + 'tan', 'brown', 'cream', 'beige' -- dirt + } + )), + 1 +) + +make_rock( + 'red', + { + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + list(any(any(tiles(), + {'sand'}), -- land types + { + 'red', 'violet', 'dustyrose', -- dirt + } + )), + 1 +) + +make_rock( + 'purple', + { + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + list(any(any(tiles(), + {'sand'}), -- land types + { + 'purple', 'aubergine', -- dirt + } + )), + 1 +) + +make_rock( + 'black', + { + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + list(any(any(tiles(), + {'sand'}), -- land types + {'black' } + )), + 1 +) + +make_rock( + 'white', + { + 'sand-rock-big', + 'sand-rock-medium', + 'sand-rock-small', + }, + list(any(any(tiles(), + {'sand'}), -- land types + { + 'white', 'grey', -- dirt + } + )), + 1 +) + +-- dune +for color, data in pairs(alien_biomes.spec.mineral.axes) do + make_rock(color, {'sand-dune-decal'}, list(any(any(tiles(),{'sand'}), {color} )), 4 ) +end + +-- volcanic +local volcanic_tiles = list(any(tiles(), {'volcanic'} )) +make_rock( + 'volcanic', + { + 'rock-huge', + 'rock-big', + 'rock-medium', + 'rock-small', + 'rock-tiny', + 'sand-decal', + 'stone-decal' + }, + volcanic_tiles, + 2, + "black" +) +if data.raw['simple-entity']['rock-huge-volcanic'] then + data.raw['simple-entity']['rock-huge-volcanic'].autoplace = { + random_probability_penalty = 0.6, tile_restriction = volcanic_tiles, + peaks = { + { influence = -0.2 }, + { noise_layer = "grass1", influence = 0.4, noise_persistance = 0.8, noise_octaves_difference = -4}, + } + } +end +if data.raw['simple-entity']['rock-big-volcanic'] then + data.raw['simple-entity']['rock-big-volcanic'].autoplace = { + random_probability_penalty = 0.6, tile_restriction = volcanic_tiles, + peaks = { + { influence = -0.1 }, + { noise_layer = "grass1", influence = 0.4, noise_persistance = 0.8, noise_octaves_difference = -4}, + } + } +end +if data.raw['optimized-decorative']['rock-medium-volcanic'] then +data.raw['optimized-decorative']['rock-medium-volcanic'].autoplace = { + random_probability_penalty = 0.2, tile_restriction = volcanic_tiles, + peaks = { + { influence = 0.4 }, + { noise_layer = "grass1", influence = 0.4, noise_persistance = 0.8, noise_octaves_difference = -4}, + } +} +end +if data.raw['optimized-decorative']['rock-small-volcanic'] then +data.raw['optimized-decorative']['rock-small-volcanic'].autoplace = { + random_probability_penalty = 0.25, tile_restriction = volcanic_tiles, + peaks = { + { influence = 0.45 }, + { noise_layer = "grass1", influence = 0.4, noise_persistance = 0.8, noise_octaves_difference = -4}, + } +} +end +if data.raw['optimized-decorative']['rock-tiny-volcanic'] then +data.raw['optimized-decorative']['rock-tiny-volcanic'].autoplace = { + random_probability_penalty = 0.25, tile_restriction = volcanic_tiles, + peaks = { + { influence = 0.5 }, + { noise_layer = "grass1", influence = 0.4, noise_persistance = 0.8, noise_octaves_difference = -4}, + } +} +end +if data.raw['optimized-decorative']['sand-decal-volcanic'] then +data.raw['optimized-decorative']['sand-decal-volcanic'].autoplace = { + max_probability = 0.3, tile_restriction = volcanic_tiles, + peaks = { + { influence = 0.2 }, + { noise_layer = "dirt-1", influence = 0.1, noise_persistance = 0.8, noise_octaves_difference = -4}, + } +} +end +if data.raw['optimized-decorative']['stone-decal-volcanic'] then +data.raw['optimized-decorative']['stone-decal-volcanic'].autoplace = { + max_probability = 0.3, tile_restriction = volcanic_tiles, + peaks = { + { influence = 0.2 }, + { noise_layer = "dirt-2", influence = 0.1, noise_persistance = 0.8, noise_octaves_difference = -4}, + } +} +end diff --git a/alien-biomes/prototypes/decorative/vegetation-base.lua b/alien-biomes/prototypes/decorative/vegetation-base.lua new file mode 100644 index 00000000..51771763 --- /dev/null +++ b/alien-biomes/prototypes/decorative/vegetation-base.lua @@ -0,0 +1,2647 @@ +data:extend({ + { + type = "noise-layer", + name = "grass3" + }, + { + type = "noise-layer", + name = "pita" + } +}) + +-- fields https://wiki.factorio.com/Types/AutoplaceSpecification +--[[ +sharpness = 0.3 -- probability distribution: 0 = linear line, 1 = vertical step at 0.5, 0.5 starts a linear line from 0.25 to o.75 +placement_density = 1, +max_probability = 0.5. -- Multiplier for output of the sharpness filter. +coverage = 0.2, -- Sets a fraction of surface that should be covered by this item. +random_probability_penalty = 0.2, -- random value between 0 and this number is subtracted from probability after sharpness +tile_restriction = tile list + +-- in peaks +{ influence = -1 }, +min_influence +max_influence +noise-layer -- Range of the noise is approximately from -1.5 to 1.5. +_optimal to _range to _max_range is a scale from 1 to 0 to -1 +dimension (_optimal) value is then multiplied by noise if any +]]-- + +-- condense autoplaces for quick reference +local autoplaces = { + -- fluff + ["asterisk"] = { + random_probability_penalty = 0.25, + peaks = { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "fluff", + noise_octaves_difference = -2, + noise_persistence = 0.8, + }, + { + water_optimal = 0.7, + water_range = 0.2, + water_max_range = 0.3, + } + }, + }, + ["asterisk-mini"] = { + random_probability_penalty = 0.25, + peaks = { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "fluff", + noise_octaves_difference = -2, + noise_persistence = 0.7, + }, + { + water_optimal = 0.7, + water_range = 0.2, + water_max_range = 0.3, + } + } + }, + ["desert-bush"] = { + random_probability_penalty = 0.25, + order = "a[doodad]-d[fluff]", + sharpness = 0.9, + max_probability = 0.5, + random_probability_penalty = 0.9, + peaks = + { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "fluff", + noise_octaves_difference = -2, + noise_persistence = 0.7, + water_optimal = 0.5, + water_range = 0.1, + water_max_range = 0.2, + }, + }, + }, + + -- pita + ["croton"] = { + order = "a[doodad]-e[pita]", + sharpness = 0.7, + max_probability = 0.95, + random_probability_penalty = 0.25, + peaks = + { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "pita", + noise_octaves_difference = -2, + noise_persistence = 0.8, + }, + { + water_optimal = 1, + water_range = 0.2, + water_max_range = 0.3, + } + }, + }, + ["pita"] = + { + order = "a[doodad]-e[pita]", + sharpness = 0.7, + max_probability = 0.7, + random_probability_penalty = 0.25, + peaks = { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "pita", + noise_octaves_difference = -2, + noise_persistence = 0.7, + }, + { + water_optimal = 0.6, + water_range = 0.2, + water_max_range = 0.4, + } + }, + }, + ["pita-mini"] = { + order = "a[doodad]-e[pita]", + sharpness = 0.7, + max_probability = 0.7, + random_probability_penalty = 0.25, + peaks = + { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "pita", + noise_octaves_difference = -2, + noise_persistence = 0.7, + }, + { + water_optimal = 0.6, + water_range = 0.2, + water_max_range = 0.4, + } + }, + }, + + -- garballo + ["bush-mini"] = { + order = "a[doodad]-e[garballo]", + sharpness = 0.8, + random_probability_penalty = 0.5, + peaks = + { + { influence = -0.7 }, + { + influence = 0.4, + max_influence = 0.4, + noise_layer = "garballo", + noise_octaves_difference = -2, + noise_persistence = 0.8, + }, + { + water_optimal = 1, + water_range = 0.2, + water_max_range = 0.3, + } + }, + }, + + -- grass + ["carpet-grass"] = { + order = "a[doodad]-f[grass]-c", + sharpness = 0.3, + max_probability = 0.3, -- was 0.01 + random_probability_penalty = 0.25, + peaks = + { + { influence = -0.3 }, -- 0.5 -- since coverage = 0 isn"t low enough (!), need to substract some more + { + influence = 0.3, + max_influence = 0.3, + noise_layer = "grass3", + noise_octaves_difference = -2.8, + noise_persistence = 0.7 + }, + { + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.45, + } + }, + }, + ["hairy-grass"] = { + order = "a[doodad]-f[grass]-b", + sharpness = 0.2, + max_probability = 0.05, -- was 0.01 + random_probability_penalty = 0.25, + peaks = + { + { influence = -0.3 }, + { + influence = 0.3, + max_influence = 0.3, + noise_layer = "grass2", + noise_octaves_difference = -2.8, + noise_persistence = 0.7 + }, + { + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.41, + } + }, + }, + ["small-grass"] = { + order = "a[doodad]-f[grass]-d", + sharpness = 0.2, + max_probability = 0.02, + random_probability_penalty = 0.25, + peaks = + { + { influence = -0.3 }, + { + influence = 0.3, + max_influence = 0.3, + noise_layer = "grass1", + noise_octaves_difference = -2.8, + noise_persistence = 0.7 + }, + { + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.41, + } + }, + }, +} +return { +{ + name = "asterisk", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[asterisk-mini]-b[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + render_layer = "decorative", + autoplace = autoplaces["asterisk"], + pictures = + { + --gAst + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-00.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 40, + shift = util.by_pixel(5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-00.png", + priority = base_decorative_sprite_priority, + width = 120, + height = 80, + shift = util.by_pixel(5, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-01.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 47, + shift = util.by_pixel(0.5, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-01.png", + priority = base_decorative_sprite_priority, + width = 130, + height = 95, + shift = util.by_pixel(1, -5.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-02.png", + priority = base_decorative_sprite_priority, + width = 61, + height = 38, + shift = util.by_pixel(-0.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-02.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 76, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-03.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 38, + shift = util.by_pixel(6, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-03.png", + priority = base_decorative_sprite_priority, + width = 121, + height = 75, + shift = util.by_pixel(5.75, -0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-04.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 38, + shift = util.by_pixel(4, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-04.png", + priority = base_decorative_sprite_priority, + width = 85, + height = 77, + shift = util.by_pixel(3.75, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-05.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 39, + shift = util.by_pixel(-0.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-05.png", + priority = base_decorative_sprite_priority, + width = 132, + height = 77, + shift = util.by_pixel(-0.5, -1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-06.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 46, + shift = util.by_pixel(3, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-06.png", + priority = base_decorative_sprite_priority, + width = 84, + height = 92, + shift = util.by_pixel(3, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-07.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 40, + shift = util.by_pixel(6, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-07.png", + priority = base_decorative_sprite_priority, + width = 118, + height = 79, + shift = util.by_pixel(6, -2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-08.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 39, + shift = util.by_pixel(3.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-08.png", + priority = base_decorative_sprite_priority, + width = 104, + height = 78, + shift = util.by_pixel(3.5, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-09.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 30, + shift = util.by_pixel(-1, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-09.png", + priority = base_decorative_sprite_priority, + width = 88, + height = 61, + shift = util.by_pixel(-1, -2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-10.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 31, + shift = util.by_pixel(3, -9.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-10.png", + priority = base_decorative_sprite_priority, + width = 89, + height = 63, + shift = util.by_pixel(2.75, -9.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-11.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 28, + shift = util.by_pixel(13.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-11.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 58, + shift = util.by_pixel(13.75, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-12.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 32, + shift = util.by_pixel(-7.5, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-12.png", + priority = base_decorative_sprite_priority, + width = 90, + height = 64, + shift = util.by_pixel(-7.5, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-13.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 36, + shift = util.by_pixel(4, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-13.png", + priority = base_decorative_sprite_priority, + width = 89, + height = 73, + shift = util.by_pixel(4.25, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-14.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 28, + shift = util.by_pixel(1, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-14.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 56, + shift = util.by_pixel(1, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-15.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 25, + shift = util.by_pixel(3.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-15.png", + priority = base_decorative_sprite_priority, + width = 85, + height = 51, + shift = util.by_pixel(3.25, -0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-16.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 36, + shift = util.by_pixel(8, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-16.png", + priority = base_decorative_sprite_priority, + width = 92, + height = 71, + shift = util.by_pixel(8, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-17.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + shift = util.by_pixel(3, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-17.png", + priority = base_decorative_sprite_priority, + width = 90, + height = 65, + shift = util.by_pixel(3, -0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-18.png", + priority = base_decorative_sprite_priority, + width = 58, + height = 34, + shift = util.by_pixel(4, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-18.png", + priority = base_decorative_sprite_priority, + width = 117, + height = 69, + shift = util.by_pixel(4.25, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/asterisk-19.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 32, + shift = util.by_pixel(0.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk/hr-asterisk-19.png", + priority = base_decorative_sprite_priority, + width = 82, + height = 64, + shift = util.by_pixel(0.5, -2), + scale = 0.5 + }, + }, + } +}, +{ + name = "asterisk-mini", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[asterisk-mini]-c[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + render_layer = "decorative", + autoplace = autoplaces["asterisk-mini"], + pictures = + { + --miniAstG + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-00.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 20, + shift = util.by_pixel(8.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-00.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 41, + shift = util.by_pixel(8.5, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-01.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 20, + shift = util.by_pixel(3.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-01.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 40, + shift = util.by_pixel(3.25, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-02.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 20, + shift = util.by_pixel(-1, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-02.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 39, + shift = util.by_pixel(-1.25, 2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-03.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 16, + shift = util.by_pixel(-1.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-03.png", + priority = base_decorative_sprite_priority, + width = 54, + height = 32, + shift = util.by_pixel(-1.5, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-04.png", + priority = base_decorative_sprite_priority, + width = 20, + height = 21, + shift = util.by_pixel(-7, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-04.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 43, + shift = util.by_pixel(-6.75, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-05.png", + priority = base_decorative_sprite_priority, + width = 20, + height = 20, + shift = util.by_pixel(-4, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-05.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 39, + shift = util.by_pixel(-4.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-06.png", + priority = base_decorative_sprite_priority, + width = 15, + height = 9, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-06.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 19, + shift = util.by_pixel(-0.25, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-07.png", + priority = base_decorative_sprite_priority, + width = 14, + height = 10, + shift = util.by_pixel(0, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-07.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 20, + shift = util.by_pixel(0.25, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-08.png", + priority = base_decorative_sprite_priority, + width = 17, + height = 10, + shift = util.by_pixel(-1.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-08.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 20, + shift = util.by_pixel(-1.5, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-09.png", + priority = base_decorative_sprite_priority, + width = 13, + height = 13, + shift = util.by_pixel(0.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-09.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 27, + shift = util.by_pixel(1, -1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-10.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 12, + shift = util.by_pixel(0, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-10.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 23, + shift = util.by_pixel(-0.25, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/asterisk-mini-11.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 16, + shift = util.by_pixel(-3.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/asterisk-mini/hr-asterisk-mini-11.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + shift = util.by_pixel(-3.5, -2.75), + scale = 0.5 + }, + }, + } +}, +{ + name = "bush-mini", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-j[bush]-a[mini]-a[green]", + collision_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + autoplace = autoplaces["bush-mini"], + pictures = + { + --gBushMini + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-00.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 22, + shift = util.by_pixel(2.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-00.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 45, + shift = util.by_pixel(3.5, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-01.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 23, + shift = util.by_pixel(3.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-01.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 46, + shift = util.by_pixel(4.25, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-02.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 18, + shift = util.by_pixel(2.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-02.png", + priority = base_decorative_sprite_priority, + width = 58, + height = 38, + shift = util.by_pixel(3, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-03.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 25, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-03.png", + priority = base_decorative_sprite_priority, + width = 61, + height = 50, + shift = util.by_pixel(0.25, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-04.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 22, + shift = util.by_pixel(2, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-04.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 44, + shift = util.by_pixel(2.75, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-05.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 21, + shift = util.by_pixel(-1.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-05.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 42, + shift = util.by_pixel(-0.75, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-06.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 21, + shift = util.by_pixel(4, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-06.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 43, + shift = util.by_pixel(4.25, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-07.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 24, + shift = util.by_pixel(1, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-07.png", + priority = base_decorative_sprite_priority, + width = 64, + height = 49, + shift = util.by_pixel(1.5, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-08.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 18, + shift = util.by_pixel(-1.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-08.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 36, + shift = util.by_pixel(-0.75, -0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-09.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 16, + shift = util.by_pixel(3, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-09.png", + priority = base_decorative_sprite_priority, + width = 47, + height = 33, + shift = util.by_pixel(3.75, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-10.png", + priority = base_decorative_sprite_priority, + width = 19, + height = 16, + shift = util.by_pixel(-0.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-10.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 31, + shift = util.by_pixel(0, -2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/bush-mini-11.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 12, + shift = util.by_pixel(0.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/bush-mini/hr-bush-mini-11.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 25, + shift = util.by_pixel(0.75, -0.25), + scale = 0.5 + }, + }, + } +}, +{ + name = "carpet-grass", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-a[grass]-b[carpet]", + collision_box = {{-2, -2}, {2, 2}}, + selection_box = {{-1.5, -1.5}, {1.5, 1.5}}, + selectable_in_game = false, + autoplace = autoplaces["carpet-grass"], + pictures = + { + --greenCarpet + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-08.png", + priority = base_decorative_sprite_priority, + width = 126, + height = 121, + shift = util.by_pixel(-4, 12.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-08.png", + priority = base_decorative_sprite_priority, + width = 252, + height = 241, + shift = util.by_pixel(-4, 12.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-09.png", + priority = base_decorative_sprite_priority, + width = 130, + height = 68, + shift = util.by_pixel(0, 9), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-09.png", + priority = base_decorative_sprite_priority, + width = 260, + height = 135, + shift = util.by_pixel(0, 9.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-10.png", + priority = base_decorative_sprite_priority, + width = 136, + height = 145, + shift = util.by_pixel(5, -7.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-10.png", + priority = base_decorative_sprite_priority, + width = 272, + height = 290, + shift = util.by_pixel(5, -7.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-11.png", + priority = base_decorative_sprite_priority, + width = 134, + height = 127, + shift = util.by_pixel(1, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-11.png", + priority = base_decorative_sprite_priority, + width = 267, + height = 253, + shift = util.by_pixel(0.75, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-03.png", + priority = base_decorative_sprite_priority, + width = 142, + height = 108, + shift = util.by_pixel(2, -15), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-03.png", + priority = base_decorative_sprite_priority, + width = 282, + height = 220, + shift = util.by_pixel(2, -15.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-04.png", + priority = base_decorative_sprite_priority, + width = 129, + height = 73, + shift = util.by_pixel(3.5, -7.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-04.png", + priority = base_decorative_sprite_priority, + width = 264, + height = 146, + shift = util.by_pixel(2, -7.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-05.png", + priority = base_decorative_sprite_priority, + width = 118, + height = 131, + shift = util.by_pixel(4, 1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-05.png", + priority = base_decorative_sprite_priority, + width = 235, + height = 262, + shift = util.by_pixel(4.25, 2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-06.png", + priority = base_decorative_sprite_priority, + width = 126, + height = 129, + shift = util.by_pixel(2, -6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-06.png", + priority = base_decorative_sprite_priority, + width = 260, + height = 257, + shift = util.by_pixel(-0.5, -6.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-07.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 126, + shift = util.by_pixel(6, 2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-07.png", + priority = base_decorative_sprite_priority, + width = 244, + height = 255, + shift = util.by_pixel(5.5, 2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-00.png", + priority = base_decorative_sprite_priority, + width = 144, + height = 146, + shift = util.by_pixel(2, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-00.png", + priority = base_decorative_sprite_priority, + width = 289, + height = 292, + shift = util.by_pixel(1.75, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-01.png", + priority = base_decorative_sprite_priority, + width = 137, + height = 132, + shift = util.by_pixel(0.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-01.png", + priority = base_decorative_sprite_priority, + width = 273, + height = 264, + shift = util.by_pixel(0.25, -0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/carpet-grass-02.png", + priority = base_decorative_sprite_priority, + width = 123, + height = 93, + shift = util.by_pixel(-4.5, 14.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/carpet-grass/hr-carpet-grass-02.png", + priority = base_decorative_sprite_priority, + width = 246, + height = 185, + shift = util.by_pixel(-4.5, 14.25), + scale = 0.5 + }, + }, + } +}, +{ + name = "croton", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-d[croton]-a[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + render_layer = "decorative", + selectable_in_game = false, + autoplace = autoplaces["croton"], + pictures = + { + --crotonG + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-00.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 28, + shift = util.by_pixel(4.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-00.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 54, + shift = util.by_pixel(4.25, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-01.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 25, + shift = util.by_pixel(5.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-01.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 52, + shift = util.by_pixel(6, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-02.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 27, + shift = util.by_pixel(7, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-02.png", + priority = base_decorative_sprite_priority, + width = 71, + height = 54, + shift = util.by_pixel(6.75, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-03.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 28, + shift = util.by_pixel(3.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-03.png", + priority = base_decorative_sprite_priority, + width = 70, + height = 56, + shift = util.by_pixel(4, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-04.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 27, + shift = util.by_pixel(5.5, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-04.png", + priority = base_decorative_sprite_priority, + width = 74, + height = 54, + shift = util.by_pixel(5.5, -5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-05.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 26, + shift = util.by_pixel(7.5, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-05.png", + priority = base_decorative_sprite_priority, + width = 71, + height = 53, + shift = util.by_pixel(7.75, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-06.png", + priority = base_decorative_sprite_priority, + width = 35, + height = 24, + shift = util.by_pixel(4.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-06.png", + priority = base_decorative_sprite_priority, + width = 71, + height = 49, + shift = util.by_pixel(4.25, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-07.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 21, + shift = util.by_pixel(4.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-07.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 42, + shift = util.by_pixel(4.75, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-08.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 27, + shift = util.by_pixel(6, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-08.png", + priority = base_decorative_sprite_priority, + width = 70, + height = 56, + shift = util.by_pixel(6, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-09.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 24, + shift = util.by_pixel(4.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-09.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 48, + shift = util.by_pixel(4.25, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-10.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 21, + shift = util.by_pixel(4.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-10.png", + priority = base_decorative_sprite_priority, + width = 53, + height = 42, + shift = util.by_pixel(4.25, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-11.png", + priority = base_decorative_sprite_priority, + width = 25, + height = 16, + shift = util.by_pixel(3.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-11.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 33, + shift = util.by_pixel(3.75, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-12.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 24, + shift = util.by_pixel(7, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-12.png", + priority = base_decorative_sprite_priority, + width = 59, + height = 48, + shift = util.by_pixel(6.75, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-13.png", + priority = base_decorative_sprite_priority, + width = 25, + height = 18, + shift = util.by_pixel(4.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-13.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 35, + shift = util.by_pixel(4.75, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-14.png", + priority = base_decorative_sprite_priority, + width = 30, + height = 21, + shift = util.by_pixel(4, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-14.png", + priority = base_decorative_sprite_priority, + width = 59, + height = 41, + shift = util.by_pixel(3.75, -4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-15.png", + priority = base_decorative_sprite_priority, + width = 25, + height = 18, + shift = util.by_pixel(4.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-15.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 35, + shift = util.by_pixel(4.5, -2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-16.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 21, + shift = util.by_pixel(5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-16.png", + priority = base_decorative_sprite_priority, + width = 64, + height = 42, + shift = util.by_pixel(5, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-17.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 16, + shift = util.by_pixel(3.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-17.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 31, + shift = util.by_pixel(3.75, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-18.png", + priority = base_decorative_sprite_priority, + width = 21, + height = 16, + shift = util.by_pixel(5.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-18.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 32, + shift = util.by_pixel(5.25, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/croton-19.png", + priority = base_decorative_sprite_priority, + width = 18, + height = 14, + shift = util.by_pixel(3, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/croton/hr-croton-19.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 30, + shift = util.by_pixel(3, -2), + scale = 0.5 + }, + }, + } +}, +{ + name = "desert-bush", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-g[red-desert-bush]", + collision_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + autoplace = autoplaces["desert-bush"], + pictures = + { + --gdbush + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-00.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 24, + shift = util.by_pixel(10, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-00.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 48, + shift = util.by_pixel(9.75, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-01.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 24, + shift = util.by_pixel(4.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-01.png", + priority = base_decorative_sprite_priority, + width = 63, + height = 48, + shift = util.by_pixel(4.75, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-02.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 26, + shift = util.by_pixel(6.5, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-02.png", + priority = base_decorative_sprite_priority, + width = 67, + height = 53, + shift = util.by_pixel(6.25, -7.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-03.png", + priority = base_decorative_sprite_priority, + width = 32, + height = 24, + shift = util.by_pixel(3, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-03.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 49, + shift = util.by_pixel(3.25, -2.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-04.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 26, + shift = util.by_pixel(4.5, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-04.png", + priority = base_decorative_sprite_priority, + width = 65, + height = 51, + shift = util.by_pixel(4.75, -7.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-05.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 24, + shift = util.by_pixel(11, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-05.png", + priority = base_decorative_sprite_priority, + width = 76, + height = 49, + shift = util.by_pixel(11, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-06.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 25, + shift = util.by_pixel(8, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-06.png", + priority = base_decorative_sprite_priority, + width = 75, + height = 50, + shift = util.by_pixel(8.25, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-07.png", + priority = base_decorative_sprite_priority, + width = 38, + height = 23, + shift = util.by_pixel(5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-07.png", + priority = base_decorative_sprite_priority, + width = 76, + height = 46, + shift = util.by_pixel(5, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-08.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 22, + shift = util.by_pixel(4.5, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-08.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 44, + shift = util.by_pixel(4.25, -7), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-09.png", + priority = base_decorative_sprite_priority, + width = 27, + height = 18, + shift = util.by_pixel(7.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-09.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 36, + shift = util.by_pixel(7.75, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-10.png", + priority = base_decorative_sprite_priority, + width = 26, + height = 19, + shift = util.by_pixel(2, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-10.png", + priority = base_decorative_sprite_priority, + width = 52, + height = 37, + shift = util.by_pixel(2.5, -4.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/desert-bush-11.png", + priority = base_decorative_sprite_priority, + width = 28, + height = 20, + shift = util.by_pixel(9, -6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/desert-bush/hr-desert-bush-11.png", + priority = base_decorative_sprite_priority, + width = 57, + height = 39, + shift = util.by_pixel(8.75, -5.75), + scale = 0.5 + }, + }, + } +}, +{ + name = "hairy-grass", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-a[grass]-a[hairy]", + collision_box = {{-1, -1}, {1, 1}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + autoplace = autoplaces["hairy-grass"], + pictures = + { + --hairyGreen + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-13.png", + priority = base_decorative_sprite_priority, + width = 40, + height = 26, + shift = util.by_pixel(4, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-13.png", + priority = base_decorative_sprite_priority, + width = 79, + height = 52, + shift = util.by_pixel(4.25, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-14.png", + priority = base_decorative_sprite_priority, + width = 40, + height = 21, + shift = util.by_pixel(6, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-14.png", + priority = base_decorative_sprite_priority, + width = 80, + height = 41, + shift = util.by_pixel(6.5, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-15.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 34, + shift = util.by_pixel(3.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-15.png", + priority = base_decorative_sprite_priority, + width = 72, + height = 68, + shift = util.by_pixel(3.5, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-16.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 19, + shift = util.by_pixel(2, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-16.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 39, + shift = util.by_pixel(1.75, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-17.png", + priority = base_decorative_sprite_priority, + width = 29, + height = 23, + shift = util.by_pixel(4.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-17.png", + priority = base_decorative_sprite_priority, + width = 59, + height = 47, + shift = util.by_pixel(4.25, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-18.png", + priority = base_decorative_sprite_priority, + width = 24, + height = 14, + shift = util.by_pixel(6, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-18.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 29, + shift = util.by_pixel(5.75, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-19.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 24, + shift = util.by_pixel(6.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-19.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 48, + shift = util.by_pixel(6.75, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-06.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 45, + shift = util.by_pixel(8.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-06.png", + priority = base_decorative_sprite_priority, + width = 102, + height = 90, + shift = util.by_pixel(9, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-07.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 33, + shift = util.by_pixel(9, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-07.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 67, + shift = util.by_pixel(9, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-08.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 31, + shift = util.by_pixel(0.5, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-08.png", + priority = base_decorative_sprite_priority, + width = 101, + height = 63, + shift = util.by_pixel(0.75, -4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-09.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 39, + shift = util.by_pixel(6.5, -6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-09.png", + priority = base_decorative_sprite_priority, + width = 82, + height = 77, + shift = util.by_pixel(6.5, -6.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-10.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 38, + shift = util.by_pixel(5.5, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-10.png", + priority = base_decorative_sprite_priority, + width = 109, + height = 76, + shift = util.by_pixel(5.75, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-11.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 27, + shift = util.by_pixel(4.5, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-11.png", + priority = base_decorative_sprite_priority, + width = 84, + height = 52, + shift = util.by_pixel(4.5, -5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-12.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 30, + shift = util.by_pixel(6.5, -6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-12.png", + priority = base_decorative_sprite_priority, + width = 66, + height = 60, + shift = util.by_pixel(7, -6), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-00.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 60, + shift = util.by_pixel(8.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-00.png", + priority = base_decorative_sprite_priority, + width = 147, + height = 118, + shift = util.by_pixel(8.75, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-01.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 46, + shift = util.by_pixel(9.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-01.png", + priority = base_decorative_sprite_priority, + width = 153, + height = 91, + shift = util.by_pixel(9.75, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-02.png", + priority = base_decorative_sprite_priority, + width = 79, + height = 48, + shift = util.by_pixel(5.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-02.png", + priority = base_decorative_sprite_priority, + width = 158, + height = 96, + shift = util.by_pixel(5, -1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-03.png", + priority = base_decorative_sprite_priority, + width = 86, + height = 72, + shift = util.by_pixel(3, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-03.png", + priority = base_decorative_sprite_priority, + width = 172, + height = 144, + shift = util.by_pixel(3, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-04.png", + priority = base_decorative_sprite_priority, + width = 81, + height = 36, + shift = util.by_pixel(4.5, -3), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-04.png", + priority = base_decorative_sprite_priority, + width = 161, + height = 73, + shift = util.by_pixel(4.75, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hairy-grass-05.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 36, + shift = util.by_pixel(4, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/hairy-grass/hr-hairy-grass-05.png", + priority = base_decorative_sprite_priority, + width = 119, + height = 72, + shift = util.by_pixel(3.75, -4), + scale = 0.5 + }, + }, + + } +}, +{ + name = "pita", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-c[pita]-a[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + render_layer = "object", + selectable_in_game = false, + autoplace = autoplaces["pita"], + pictures = + { + --gpita + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-00.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 53, + shift = util.by_pixel(11.5, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-00.png", + priority = base_decorative_sprite_priority, + width = 153, + height = 104, + shift = util.by_pixel(11.25, -5.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-01.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 53, + shift = util.by_pixel(11.5, -9.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-01.png", + priority = base_decorative_sprite_priority, + width = 146, + height = 104, + shift = util.by_pixel(11.5, -9.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-02.png", + priority = base_decorative_sprite_priority, + width = 59, + height = 41, + shift = util.by_pixel(9.5, -6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-02.png", + priority = base_decorative_sprite_priority, + width = 120, + height = 83, + shift = util.by_pixel(9.5, -6.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-03.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 42, + shift = util.by_pixel(10, -6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-03.png", + priority = base_decorative_sprite_priority, + width = 121, + height = 84, + shift = util.by_pixel(10.25, -6), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-04.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 47, + shift = util.by_pixel(12.5, -9.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-04.png", + priority = base_decorative_sprite_priority, + width = 144, + height = 95, + shift = util.by_pixel(12.5, -9.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-05.png", + priority = base_decorative_sprite_priority, + width = 70, + height = 46, + shift = util.by_pixel(9, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-05.png", + priority = base_decorative_sprite_priority, + width = 140, + height = 92, + shift = util.by_pixel(8.5, -7.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-06.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 60, + shift = util.by_pixel(7, -7), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-06.png", + priority = base_decorative_sprite_priority, + width = 156, + height = 120, + shift = util.by_pixel(7, -7), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-07.png", + priority = base_decorative_sprite_priority, + width = 78, + height = 62, + shift = util.by_pixel(10, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-07.png", + priority = base_decorative_sprite_priority, + width = 155, + height = 123, + shift = util.by_pixel(10.25, -5.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-08.png", + priority = base_decorative_sprite_priority, + width = 81, + height = 59, + shift = util.by_pixel(11.5, -6.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-08.png", + priority = base_decorative_sprite_priority, + width = 162, + height = 116, + shift = util.by_pixel(11.5, -6.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-09.png", + priority = base_decorative_sprite_priority, + width = 62, + height = 39, + shift = util.by_pixel(6, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-09.png", + priority = base_decorative_sprite_priority, + width = 123, + height = 78, + shift = util.by_pixel(6.25, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-10.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 35, + shift = util.by_pixel(4, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-10.png", + priority = base_decorative_sprite_priority, + width = 99, + height = 70, + shift = util.by_pixel(4.25, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-11.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 33, + shift = util.by_pixel(6.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-11.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 64, + shift = util.by_pixel(6.5, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-12.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 39, + shift = util.by_pixel(6.5, -5.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-12.png", + priority = base_decorative_sprite_priority, + width = 99, + height = 77, + shift = util.by_pixel(6.25, -5.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-13.png", + priority = base_decorative_sprite_priority, + width = 55, + height = 36, + shift = util.by_pixel(8.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-13.png", + priority = base_decorative_sprite_priority, + width = 109, + height = 71, + shift = util.by_pixel(8.25, -4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/pita-14.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 34, + shift = util.by_pixel(7, -5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita/hr-pita-14.png", + priority = base_decorative_sprite_priority, + width = 100, + height = 68, + shift = util.by_pixel(6.5, -5), + scale = 0.5 + }, + }, + } +}, +{ + name = "pita-mini", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-d[pita-mini]-a[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + render_layer = "decorative", + selectable_in_game = false, + autoplace = autoplaces["pita-mini"], + pictures = + { + --pitaMini + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-00.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 26, + shift = util.by_pixel(4, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-00.png", + priority = base_decorative_sprite_priority, + width = 83, + height = 52, + shift = util.by_pixel(4.25, -2), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-01.png", + priority = base_decorative_sprite_priority, + width = 37, + height = 28, + shift = util.by_pixel(4.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-01.png", + priority = base_decorative_sprite_priority, + width = 75, + height = 57, + shift = util.by_pixel(4.75, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-02.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 29, + shift = util.by_pixel(5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-02.png", + priority = base_decorative_sprite_priority, + width = 87, + height = 57, + shift = util.by_pixel(4.75, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-03.png", + priority = base_decorative_sprite_priority, + width = 48, + height = 31, + shift = util.by_pixel(6, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-03.png", + priority = base_decorative_sprite_priority, + width = 96, + height = 62, + shift = util.by_pixel(6, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-04.png", + priority = base_decorative_sprite_priority, + width = 44, + height = 35, + shift = util.by_pixel(4, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-04.png", + priority = base_decorative_sprite_priority, + width = 87, + height = 68, + shift = util.by_pixel(3.75, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-05.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + shift = util.by_pixel(5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-05.png", + priority = base_decorative_sprite_priority, + width = 92, + height = 65, + shift = util.by_pixel(5.5, -3.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-06.png", + priority = base_decorative_sprite_priority, + width = 31, + height = 22, + shift = util.by_pixel(3.5, -1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-06.png", + priority = base_decorative_sprite_priority, + width = 64, + height = 45, + shift = util.by_pixel(3.5, -0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-07.png", + priority = base_decorative_sprite_priority, + width = 36, + height = 20, + shift = util.by_pixel(4, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-07.png", + priority = base_decorative_sprite_priority, + width = 73, + height = 39, + shift = util.by_pixel(3.75, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-08.png", + priority = base_decorative_sprite_priority, + width = 33, + height = 23, + shift = util.by_pixel(5.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-08.png", + priority = base_decorative_sprite_priority, + width = 66, + height = 46, + shift = util.by_pixel(5.5, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-09.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 37, + shift = util.by_pixel(5.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-09.png", + priority = base_decorative_sprite_priority, + width = 97, + height = 72, + shift = util.by_pixel(5.75, -3.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-10.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 35, + shift = util.by_pixel(4.5, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-10.png", + priority = base_decorative_sprite_priority, + width = 101, + height = 71, + shift = util.by_pixel(4.75, -4.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-11.png", + priority = base_decorative_sprite_priority, + width = 49, + height = 36, + shift = util.by_pixel(5.5, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-11.png", + priority = base_decorative_sprite_priority, + width = 98, + height = 71, + shift = util.by_pixel(5.5, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-12.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 31, + shift = util.by_pixel(6.5, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-12.png", + priority = base_decorative_sprite_priority, + width = 90, + height = 63, + shift = util.by_pixel(6.5, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-13.png", + priority = base_decorative_sprite_priority, + width = 42, + height = 31, + shift = util.by_pixel(4, -4.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-13.png", + priority = base_decorative_sprite_priority, + width = 84, + height = 64, + shift = util.by_pixel(4.5, -4.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/pita-mini-14.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 29, + shift = util.by_pixel(2.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/pita-mini/hr-pita-mini-14.png", + priority = base_decorative_sprite_priority, + width = 79, + height = 58, + shift = util.by_pixel(2.75, -3), + scale = 0.5 + }, + }, + } +}, +{ + name = "small-grass", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-a[grass]-c[small]", + collision_box = {{-1.5, -1.5}, {1.5, 1.5}}, + selection_box = {{-1, -1}, {1, 1}}, + selectable_in_game = false, + autoplace = autoplaces["small-grass"], + pictures = + { + --greenSmall + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-00.png", + priority = base_decorative_sprite_priority, + width = 60, + height = 42, + shift = util.by_pixel(6, -6), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-00.png", + priority = base_decorative_sprite_priority, + width = 122, + height = 84, + shift = util.by_pixel(6, -6), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-01.png", + priority = base_decorative_sprite_priority, + width = 51, + height = 33, + shift = util.by_pixel(1.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-01.png", + priority = base_decorative_sprite_priority, + width = 101, + height = 65, + shift = util.by_pixel(1.25, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-02.png", + priority = base_decorative_sprite_priority, + width = 43, + height = 37, + shift = util.by_pixel(2.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-02.png", + priority = base_decorative_sprite_priority, + width = 86, + height = 74, + shift = util.by_pixel(3, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-03.png", + priority = base_decorative_sprite_priority, + width = 54, + height = 38, + shift = util.by_pixel(-3, -4), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-03.png", + priority = base_decorative_sprite_priority, + width = 106, + height = 74, + shift = util.by_pixel(-3, -4), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-04.png", + priority = base_decorative_sprite_priority, + width = 50, + height = 34, + shift = util.by_pixel(-2, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-04.png", + priority = base_decorative_sprite_priority, + width = 100, + height = 67, + shift = util.by_pixel(-2.5, -2.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-05.png", + priority = base_decorative_sprite_priority, + width = 58, + height = 33, + shift = util.by_pixel(-2, -3.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-05.png", + priority = base_decorative_sprite_priority, + width = 116, + height = 65, + shift = util.by_pixel(-2, -3.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-06.png", + priority = base_decorative_sprite_priority, + width = 41, + height = 35, + shift = util.by_pixel(2.5, -2.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-06.png", + priority = base_decorative_sprite_priority, + width = 81, + height = 70, + shift = util.by_pixel(2.75, -3), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-07.png", + priority = base_decorative_sprite_priority, + width = 48, + height = 27, + shift = util.by_pixel(-3, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-07.png", + priority = base_decorative_sprite_priority, + width = 95, + height = 54, + shift = util.by_pixel(-3.25, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-08.png", + priority = base_decorative_sprite_priority, + width = 45, + height = 28, + shift = util.by_pixel(-2.5, -2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-08.png", + priority = base_decorative_sprite_priority, + width = 91, + height = 56, + shift = util.by_pixel(-2.75, -2.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-09.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 27, + shift = util.by_pixel(0.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-09.png", + priority = base_decorative_sprite_priority, + width = 77, + height = 54, + shift = util.by_pixel(0.25, -1.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-10.png", + priority = base_decorative_sprite_priority, + width = 23, + height = 17, + shift = util.by_pixel(6.5, -1.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-10.png", + priority = base_decorative_sprite_priority, + width = 46, + height = 33, + shift = util.by_pixel(6, -1.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/small-grass-11.png", + priority = base_decorative_sprite_priority, + width = 20, + height = 13, + shift = util.by_pixel(3, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/vegetation/base/small-grass/hr-small-grass-11.png", + priority = base_decorative_sprite_priority, + width = 39, + height = 26, + shift = util.by_pixel(3.25, 0), + scale = 0.5 + }, + }, + } +}, +} diff --git a/alien-biomes/prototypes/decorative/vegetation-bush.lua b/alien-biomes/prototypes/decorative/vegetation-bush.lua new file mode 100644 index 00000000..d5b3d93c --- /dev/null +++ b/alien-biomes/prototypes/decorative/vegetation-bush.lua @@ -0,0 +1,531 @@ +local util = require("data-util") +local flower_bush_base = { + name = "flower-bush", + type = "optimized-decorative", + autoplace = { + max_probability = 1, + order = "a[doodad]-e[garballo]", + peaks = { + { influence = -1.4 }, + { + noise_layer = "garballo", + noise_octaves_difference = -2, + noise_persistence = 0.8, + }, + { + temperature_optimal = 15, + temperature_range = 15, + temperature_max_range = 20, + water_optimal = 1, + water_range = 0.3, + water_max_range = 0.35, + aux_optimal = 0, + aux_range = 0.25, + aux_max_range = 0.2, + } + }, + random_probability_penalty = 0.75, + sharpness = 0.8 + }, + subgroup = "grass", + collision_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + order = "b[decorative]-g[fluff]-b[dry]-a[brown]", + pictures = { + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-00.png", + frame_count = 1, + height = 22, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-00.png", + frame_count = 1, + height = 44, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.1015625, + -0.0625 + }, + width = 67 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.09375, + -0.0625 + }, + width = 34 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-01.png", + frame_count = 1, + height = 29, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-01.png", + frame_count = 1, + height = 58, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.09375, + -0.03125 + }, + width = 76 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.09375, + -0.046875 + }, + width = 38 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-02.png", + frame_count = 1, + height = 22, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-02.png", + frame_count = 1, + height = 44, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0546875, + -0.046875 + }, + width = 75 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.046875, + -0.0625 + }, + width = 37 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-03.png", + frame_count = 1, + height = 27, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-03.png", + frame_count = 1, + height = 54, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0703125, + -0.046875 + }, + width = 65 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.078125, + -0.046875 + }, + width = 33 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-04.png", + frame_count = 1, + height = 27, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-04.png", + frame_count = 1, + height = 55, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.125, + -0.1015625 + }, + width = 88 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.125, + -0.109375 + }, + width = 44 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-05.png", + frame_count = 1, + height = 24, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-05.png", + frame_count = 1, + height = 49, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0703125, + -0.0234375 + }, + width = 63 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.078125, + -0.03125 + }, + width = 31 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-06.png", + frame_count = 1, + height = 25, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-06.png", + frame_count = 1, + height = 50, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.109375, + -0.078125 + }, + width = 74 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.109375, + -0.078125 + }, + width = 37 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-07.png", + frame_count = 1, + height = 27, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-07.png", + frame_count = 1, + height = 53, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + -0.0546875, + -0.1171875 + }, + width = 89 + }, + line_length = 1, + priority = "extra-high", + shift = { + -0.046875, + -0.109375 + }, + width = 45 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-08.png", + frame_count = 1, + height = 29, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-08.png", + frame_count = 1, + height = 58, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.046875, + -0.046875 + }, + width = 70 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.046875, + -0.046875 + }, + width = 35 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-09.png", + frame_count = 1, + height = 27, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-09.png", + frame_count = 1, + height = 53, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0390625, + -0.0078125 + }, + width = 83 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.03125, + -0.015625 + }, + width = 42 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-10.png", + frame_count = 1, + height = 30, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-10.png", + frame_count = 1, + height = 61, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.078125, + -0.0703125 + }, + width = 76 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.09375, + -0.0625 + }, + width = 38 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-11.png", + frame_count = 1, + height = 25, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-11.png", + frame_count = 1, + height = 50, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0546875, + -0.0625 + }, + width = 71 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.046875, + -0.046875 + }, + width = 35 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-12.png", + frame_count = 1, + height = 29, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-12.png", + frame_count = 1, + height = 57, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.1171875, + -0.0078125 + }, + width = 79 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.125, + -0.015625 + }, + width = 40 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-13.png", + frame_count = 1, + height = 25, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-13.png", + frame_count = 1, + height = 50, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.015625, + -0.046875 + }, + width = 60 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.03125, + -0.046875 + }, + width = 30 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-14.png", + frame_count = 1, + height = 19, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-14.png", + frame_count = 1, + height = 38, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0234375, + -0.078125 + }, + width = 65 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.015625, + -0.078125 + }, + width = 33 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-15.png", + frame_count = 1, + height = 26, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-15.png", + frame_count = 1, + height = 51, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0390625, + -0.0390625 + }, + width = 65 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.046875, + -0.03125 + }, + width = 33 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-17.png", + frame_count = 1, + height = 19, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-17.png", + frame_count = 1, + height = 38, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0546875, + -0.03125 + }, + width = 49 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.0625, + -0.015625 + }, + width = 24 + }, + { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/sr/flower-bush-18.png", + frame_count = 1, + height = 17, + hr_version = { + filename = "__alien-biomes__/graphics/decorative/flower-bush/flower-bush-green-pink/hr/flower-bush-18.png", + frame_count = 1, + height = 35, + line_length = 1, + priority = "extra-high", + scale = 0.5, + shift = { + 0.0390625, + -0.0390625 + }, + width = 53 + }, + line_length = 1, + priority = "extra-high", + shift = { + 0.03125, + -0.046875 + }, + width = 26 + }, + }, + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, +} +local variants = { + { + name = "blue-pink", + temperature = 0.15, + aux = 1, + noise_layer = "garballo" + }, + { name = "green-pink", + temperature = 0.15, + aux = 0, + noise_layer = "pita" + }, + { name = "green-yellow", + temperature = 0.85, + aux = 0, + noise_layer = "grass3" + }, + { name = "red-blue", + temperature = 0.85, + aux = 1, + noise_layer = "fluff" + }, +} +for _, variant in pairs(variants) do + local bush = table.deepcopy(flower_bush_base) + bush.name = bush.name .. "-" .. variant.name + bush.autoplace.peaks[#bush.autoplace.peaks].temperature_optimal = variant.temperature * 100 + bush.autoplace.peaks[#bush.autoplace.peaks].aux_optimal = variant.aux + bush.autoplace.peaks[2].noise_layer = variant.noise_layer + util.replace_filenames_recursive(bush.pictures, "green-pink", variant.name) + bush.autoplace.tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"dirt", "grass"})) + if table_size(bush.autoplace.tile_restriction) > 0 then + data:extend({bush}) + end +end diff --git a/alien-biomes/prototypes/decorative/vegetation-cane.lua b/alien-biomes/prototypes/decorative/vegetation-cane.lua new file mode 100644 index 00000000..0e13d0ff --- /dev/null +++ b/alien-biomes/prototypes/decorative/vegetation-cane.lua @@ -0,0 +1,95 @@ +local pic = function(name, number, width, height) + return { + filename = "__alien-biomes__/graphics/decorative/"..name.."/sr/"..name.."-"..number..".png", + priority = base_decorative_sprite_priority, + width = math.floor(width/2), + height = math.floor(height/2), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/"..name.."/hr/"..name.."-"..number..".png", + priority = base_decorative_sprite_priority, + width = width, + height = height, + scale = 0.5 + }, + } +end +local tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"snow"})) -- not ice +if table_size(tile_restriction) > 0 then + data:extend({ + { + name = "cane-single", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[asterisk-mini]-b[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + render_layer = "decorative", + autoplace = { + random_probability_penalty = 0.25, + peaks = { + { influence = -0.2 }, + { + influence = 0.4, + noise_layer = "grass1", + noise_octaves_difference = -2, + noise_persistence = 0.8, + temperature_optimal = -10, + temperature_range = 10, + temperature_max_range = 15, + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.6, + } + }, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"snow"})) -- not ice + }, + pictures = + { + pic("cane-single", "01", 56, 60), + pic("cane-single", "02", 44, 43), + pic("cane-single", "03", 48, 51), + pic("cane-single", "04", 45, 37), + pic("cane-single", "05", 81, 57), + pic("cane-single", "06", 31, 94), + } + }, + { + name = "cane-cluster", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[asterisk-mini]-b[green]", + collision_box = {{-0.7, -0.7}, {0.7, 0.7}}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selectable_in_game = false, + render_layer = "decorative", + autoplace = { + random_probability_penalty = 0.75, + peaks = { + { influence = -0.2 }, + { + influence = 0.4, + noise_layer = "grass1", + noise_octaves_difference = -2, + noise_persistence = 0.7, + temperature_optimal = -10, + temperature_range = 10, + temperature_max_range = 15, + water_optimal = 1, + water_range = 0.4, + water_max_range = 0.6, + } + }, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"snow"})) -- not ice + }, + pictures = + { + pic("cane-cluster", "01", 131, 146), + pic("cane-cluster", "02", 154, 176), + pic("cane-cluster", "03", 264, 156), + pic("cane-cluster", "04", 119, 138), + pic("cane-cluster", "05", 140, 230), + } + }, + }) +end diff --git a/alien-biomes/prototypes/decorative/vegetation.lua b/alien-biomes/prototypes/decorative/vegetation.lua new file mode 100644 index 00000000..3649e85e --- /dev/null +++ b/alien-biomes/prototypes/decorative/vegetation.lua @@ -0,0 +1,200 @@ +local util = require('data-util') + +local any = alien_biomes.require_tag +local all = alien_biomes.require_tags +local exclude = alien_biomes.exclude_tags +local list = alien_biomes.list_tiles +local tiles = alien_biomes.all_tiles + +local not_harsh = list(exclude(tiles(), {'frozen', 'volcanic', 'sand'})) +local not_extreme = list(exclude(tiles(), {'frozen', 'volcanic'})) +local not_frozen = list(exclude(tiles(), {'frozen'})) +local not_ice = list(exclude(tiles(), {'frozen'})) + +-- update some vanilla ones +local vanilla_restrictions = { + ['red-croton'] = not_extreme, + ['red-pita'] = not_extreme, + ['red-pita-mini'] = not_extreme, + ['red-asterisk'] = not_frozen, + ['red-asterisk-mini'] = not_frozen, + ['brown-asterisk'] = not_extreme, + ['brown-asterisk-mini'] = not_extreme, + ['brown-fluff'] = not_frozen, + ['brown-fluff-dry'] = not_frozen, + ['brown-hairy-grass'] = not_ice, + ['brown-carpet-grass'] = not_ice, + ['brown-small-grass'] = not_ice, + ['red-desert-bush'] = not_frozen, + ['white-desert-bush'] = not_ice, +} +for prototype_name, restriction in pairs(vanilla_restrictions) do + if data.raw['optimized-decorative'][prototype_name] and data.raw['optimized-decorative'][prototype_name].autoplace then + data.raw['optimized-decorative'][prototype_name].autoplace.tile_restriction = table.deepcopy(restriction) + end +end + +-- get base plants +local base_plants_list = require("vegetation-base") +local base_plants = {} +for _, plant in pairs(base_plants_list) do + base_plants[plant.name] = plant + local old = data.raw['optimized-decorative']['green-'..plant.name] + if old then old.autoplace = nil end +end + +local veg_spec = alien_biomes.spec.vegetation +local biome_axes = alien_biomes.axes +local temperature_range = {0.25, 0.75} + +local dimension_autoplace = function(peak, axis, point_a, point_b) + r_point_a = point_a + r_point_b = point_b + if biome_axes[axis].reverse then + r_point_a = 1 - point_a + r_point_b = 1 - point_b + end + local point_l = math.min(r_point_a, r_point_b) + local point_h = math.max(r_point_a, r_point_b) + + local dimension = biome_axes[axis].dimension + local low = biome_axes[axis].low + local high = biome_axes[axis].high + local d_point_a = low + (high - low) * point_l + local d_point_b = low + (high - low) * point_h + + peak[dimension .. "_optimal"] = (d_point_a + d_point_b) / 2 + peak[dimension .. "_range"] = math.abs(d_point_a - d_point_b) * 0.5 + peak[dimension .. "_max_range"] = math.abs(d_point_a - d_point_b) * 0.5 + 0.03 -- bigger overlap + +end + + + +-- biome color -> plant color +local match = { + ["green"] = "green", + ["olive"] = "olive", + ["yellow"] = "yellow", + ["orange"] = "orange", + ["red"] = "red", + ["violet"] = "violet", + ["purple"] = "purple", + ["mauve"] = "mauve", + ["blue"] = "blue", + ["turquoise"] = "turquoise", +} +local clockwise = { + ["green"] = "olive", + ["olive"] = "yellow", + ["yellow"] = "orange", + ["orange"] = "red", + ["red"] = "violet", + ["violet"] = "purple", + ["purple"] = "mauve", + ["mauve"] = "blue", + ["blue"] = "turquoise", + ["turquoise"] = "green", +} +local clockwise2 = { + ["green"] = "yellow", + ["olive"] = "orange", + ["yellow"] = "red", + ["orange"] = "violet", + ["red"] = "purple", + ["violet"] = "mauve", + ["purple"] = "blue", + ["mauve"] = "turquoise", + ["blue"] = "green", + ["turquoise"] = "olive", +} +local anticlockwise = { + ["green"] = "turquoise", + ["olive"] = "green", + ["yellow"] = "olive", + ["orange"] = "yellow", + ["red"] = "orange", + ["violet"] = "red", + ["purple"] = "violet", + ["mauve"] = "purple", + ["blue"] = "mauve", + ["turquoise"] = "blue", +} + +local vegetation_map = { + ["carpet-grass"] = match, + ["small-grass"] = match, + ["hairy-grass"] = match, + ["asterisk"] = clockwise, + ["asterisk-mini"] = clockwise, + ["bush-mini"] = match, + ["desert-bush"] = clockwise, + ["croton"] = clockwise2, + ["pita"] = match, + ["pita-mini"] = match, +} + +local tints = { + green = {90,125,39}, + olive = {132,139,46}, + yellow = {182, 161, 60},-- yellow = {217,196,75}, + orange = {180, 92, 40}, + red = {175, 46, 46}, + violet = {164,57,115}, + purple = {105,73,173}, + mauve = {100,98,202}, + blue = {51,89,166}, + turquoise = {79, 112, 81}, +} +for _, tint in pairs(tints) do + local tint2 = {} + tint2.a = 1 + tint2.r = tint[1]/255 + tint2.g = tint[2]/255 + tint2.b = tint[3]/255 + tints[_] = tint2 +end + +for plant_name, color_map in pairs(vegetation_map) do + for biome_color, plant_color in pairs(color_map) do + local axis = veg_spec.axes[biome_color] + local plant = table.deepcopy(base_plants[plant_name]) + plant.name = plant_name .. '-' .. plant_color + local tint = table.deepcopy(tints[plant_color]) + if plant_name == "asterisk" and plant_color == "blue" then + tint = {60,80,100} + end + --util.replace_filenames_recursive(plant.pictures, '|color|', plant_color) + for _, pic in pairs(plant.pictures) do + pic.tint = tint + if pic.hr_version then + pic.hr_version.tint = tint + end + end + + local peak = nil + for _, test_peak in pairs(plant.autoplace.peaks) do + if test_peak["water_optimal"] then + peak = test_peak + end + end + if not peak then + peak = {} + peak["water_optimal"] = 1 + peak["water_range"] = 0.3 + peak["water_max_range"] = 0.4 + table.insert(plant.autoplace.peaks, peak) + end + for dimension_name, dimension in pairs(axis.dimensions) do + dimension_autoplace( peak, dimension_name, dimension[1], dimension[2]) + end + if plant_name == "asterisk" then + plant.autoplace.tile_restriction = table.deepcopy(not_extreme) + elseif plant_name ~= "desert-bush" then + plant.autoplace.tile_restriction = table.deepcopy(not_harsh) + end + if plant.autoplace.tile_restriction == nil or table_size(plant.autoplace.tile_restriction) > 0 then + data:extend({plant}) + end + end +end diff --git a/alien-biomes/prototypes/decorative/wetland-decal.lua b/alien-biomes/prototypes/decorative/wetland-decal.lua new file mode 100644 index 00000000..d7a90836 --- /dev/null +++ b/alien-biomes/prototypes/decorative/wetland-decal.lua @@ -0,0 +1,432 @@ +data:extend({ + { + type = "noise-layer", + name = "wetland-decal" + }, + { + name = "wetland-decal", + type = "optimized-decorative", + subgroup = "grass", + order = "b[decorative]-b[puddle-decal]", + collision_box = {{-4, -4}, {4, 4}}, + collision_mask = {"doodad-layer", "water-tile", "not-colliding-with-itself"}, + render_layer = "decals", + tile_layer = default_decal_layer, + autoplace = { + max_probability = 0.1, + order = "a[doodad]-b[decal]", + peaks = { + { + influence = -1.2 + }, + { + influence = 0.1, + noise_layer = "wetland-decal", + noise_octaves_difference = -2, + noise_persistence = 0.8, + }, + { + influence = 1, + water_optimal = 1, + water_range = 0.2, + water_max_range = 0.4, + } + }, + sharpness = 0.1, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"dirt", "grass"})) + }, + pictures = + { + --decalDark + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-00.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-00.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-01.png", + width = 307, + height = 219, + shift = util.by_pixel(-0.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-01.png", + width = 613, + height = 438, + shift = util.by_pixel(-0.25, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-02.png", + width = 307, + height = 219, + shift = util.by_pixel(-0.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-02.png", + width = 612, + height = 438, + shift = util.by_pixel(0, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-03.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-03.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-04.png", + width = 305, + height = 219, + shift = util.by_pixel(-0.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-04.png", + width = 612, + height = 438, + shift = util.by_pixel(0, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-05.png", + width = 306, + height = 217, + shift = util.by_pixel(-1, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-05.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-06.png", + width = 307, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-06.png", + width = 613, + height = 434, + shift = util.by_pixel(-0.25, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-07.png", + width = 306, + height = 218, + shift = util.by_pixel(0, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-07.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-08.png", + width = 305, + height = 218, + shift = util.by_pixel(-0.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-08.png", + width = 612, + height = 436, + shift = util.by_pixel(0, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-09.png", + width = 306, + height = 218, + shift = util.by_pixel(-1, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-09.png", + width = 612, + height = 437, + shift = util.by_pixel(0, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-10.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-10.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-11.png", + width = 306, + height = 217, + shift = util.by_pixel(0, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-11.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-12.png", + width = 306, + height = 219, + shift = util.by_pixel(0, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-12.png", + width = 612, + height = 439, + shift = util.by_pixel(0, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-13.png", + width = 307, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-13.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-14.png", + width = 306, + height = 217, + shift = util.by_pixel(0, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-14.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-15.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-15.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-16.png", + width = 305, + height = 218, + shift = util.by_pixel(-0.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-16.png", + width = 612, + height = 437, + shift = util.by_pixel(0, 0.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-17.png", + width = 307, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-17.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-18.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-18.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-19.png", + width = 307, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-19.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-20.png", + width = 305, + height = 219, + shift = util.by_pixel(-0.5, -0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-20.png", + width = 612, + height = 438, + shift = util.by_pixel(0, 0), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-21.png", + width = 307, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-21.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-22.png", + width = 305, + height = 218, + shift = util.by_pixel(-0.5, 1), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-22.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-23.png", + width = 306, + height = 217, + shift = util.by_pixel(0, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-23.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-24.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-24.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-25.png", + width = 305, + height = 217, + shift = util.by_pixel(-0.5, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-25.png", + width = 612, + height = 434, + shift = util.by_pixel(0, 1), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-26.png", + width = 305, + height = 218, + shift = util.by_pixel(-0.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-26.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 0.75), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-27.png", + width = 306, + height = 217, + shift = util.by_pixel(-1, 0.5), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-27.png", + width = 612, + height = 435, + shift = util.by_pixel(0, 1.25), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-28.png", + width = 305, + height = 218, + shift = util.by_pixel(-0.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-28.png", + width = 612, + height = 436, + shift = util.by_pixel(0, 0.5), + scale = 0.5 + }, + }, + { + filename = "__alien-biomes__/graphics/decorative/wetland/wetland-decal-29.png", + width = 307, + height = 218, + shift = util.by_pixel(-0.5, 0), + hr_version = { + filename = "__alien-biomes__/graphics/decorative/wetland/hr-wetland-decal-29.png", + width = 612, + height = 436, + shift = util.by_pixel(0, 0.5), + scale = 0.5 + }, + }, + }, + }}) diff --git a/alien-biomes/prototypes/disables.lua b/alien-biomes/prototypes/disables.lua new file mode 100644 index 00000000..6e28e93b --- /dev/null +++ b/alien-biomes/prototypes/disables.lua @@ -0,0 +1,19 @@ +data.raw["autoplace-control"]["grass"] = nil +data.raw["autoplace-control"]["dirt"] = nil +data.raw["autoplace-control"]["sand"] = nil +data.raw["autoplace-control"]["desert"] = nil + + +-- disable base rocks +data.raw['simple-entity']['rock-huge'].autoplace = nil +data.raw['simple-entity']['rock-big'].autoplace = nil +data.raw['optimized-decorative']['rock-medium'].autoplace = nil +data.raw['optimized-decorative']['rock-small'] .autoplace= nil +data.raw['optimized-decorative']['rock-tiny'].autoplace = nil +data.raw['simple-entity']['sand-rock-big'].autoplace = nil +data.raw['optimized-decorative']['sand-rock-medium'].autoplace = nil +data.raw['optimized-decorative']['sand-rock-small'].autoplace = nil +data.raw['optimized-decorative']['sand-decal'].autoplace = nil +data.raw['optimized-decorative']['sand-dune-decal'].autoplace = nil +data.raw['optimized-decorative']['light-mud-decal'].autoplace = nil +data.raw['optimized-decorative']['red-desert-decal'].autoplace = nil diff --git a/alien-biomes/prototypes/entity/tree-data.lua b/alien-biomes/prototypes/entity/tree-data.lua new file mode 100644 index 00000000..cebe763b --- /dev/null +++ b/alien-biomes/prototypes/entity/tree-data.lua @@ -0,0 +1,1323 @@ +local grass_dirt = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"grass", "dirt"})) +local grass = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"grass"})) + +local trees = { + -- wetland + { + name = "tree-wetland-a", + model = "oaktapus", + locale = "lemon", + noise = "trees-1", + temperature_low = 0.65, + temperature_high = 1, + aux_low = 0, + aux_high = 0.2, + water_band = 4, + density = 4, + colors = { + {r = 241, g = 238, b = 14}, + {r = 245, g = 165, b = 11}, + {r = 105, g = 184, b = 40} + }, + tags = {"green", "yellow"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-b", + model = "specter", + locale = "auburn", + noise = "trees-2", + temperature_low = 0.9, + temperature_high = 1, + aux_low = 0.2, + aux_high = 0.7, + water_band = 4, + density = 4, + colors = { + {r = 245, g = 165, b = 11}, + {r = 163, g = 113, b = 21}, + {r = 184, g = 32, b = 32}, + }, + tags = {"orange", "red"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-c", + model = "05", + locale = "vermilion", + noise = "trees-3", + temperature_low = 0.9, + temperature_high = 1, + aux_low = 0.7, + aux_high = 1, + water_band = 4, + density = 4, + colors = { + {r = 227, g = 169, b = 209}, + {r = 184, g = 31, b = 31}, + {r = 107, g = 70, b = 25}, + }, + tags = {"red"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-d", + model = "specter", + locale = "scarlet", + noise = "trees-4", + temperature_low = 0.35, + temperature_high = 0.9, + aux_low = 0.2, + aux_high = 0.4, + water_band = 4, + density = 4, + colors = { + {r = 84, g = 17, b = 17}, + {r = 184, g = 31, b = 31}, + {r = 109, g = 53, b = 33}, + {r = 106, g = 89, b = 32}, + {r = 96, g = 101, b = 40}, + {r = 174, g = 130, b = 34}, + }, + tags = {"red"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-e", + model = "04", + locale = "evergreen", + noise = "trees-5", + temperature_low = 0.35, + temperature_high = 0.9, + aux_low = 0.4, + aux_high = 0.8, + water_band = 4, + density = 4, + colors = { + {r = 218, g = 187, b = 44}, + {r = 79, g = 119, b = 21}, + {r = 105, g = 184, b = 40}, + }, + tags = {"green"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-f", + model = "mangrove", + locale = "marshmallow", + noise = "trees-6", + temperature_low = 0.55, + temperature_high = 0.9, + aux_low = 0.8, + aux_high = 1, + water_band = 4, + density = 4, + colors = { + {r = 166, g = 76, b = 112}, + {r = 219, g = 192, b = 209}, + {r = 86, g = 41, b = 79}, + {r = 240, g = 119, b = 206}, + {r = 200, g = 97, b = 108}, + }, + tags = {"violet", "white"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-g", + model = "05", + locale = "arsenic", + noise = "trees-7", + temperature_low = 0.4, + temperature_high = 0.65, + aux_low = 0.0, + aux_high = 0.2, + water_band = 4, + density = 4, + colors = { + {r = 245, g = 165, b = 11}, + {r = 241, g = 238, b = 14}, + {r = 142, g = 99, b = 23}, + }, + tags = {"yellow"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-h", + model = "07", + locale = "plumb", + noise = "trees-8", + temperature_low = 0.4, + temperature_high = 0.65, + aux_low = 0.8, + aux_high = 1, + water_band = 4, + density = 4, + colors = { + {r = 154, g = 93, b = 228}, + {r = 50, g = 34, b = 70}, + {r = 112, g = 56, b = 180}, + {r = 152, g = 131, b = 178}, + {r = 138, g = 97, b = 221}, + {r = 152, g = 67, b = 206}, + {r = 103, g = 98, b = 221}, + }, + tags = {"purple"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-i", + model = "mangrove", + locale = "bile", + noise = "trees-9", + temperature_low = 0.35, + temperature_high = 0.4, + aux_low = 0.0, + aux_high = 0.2, + water_band = 4, + density = 4, + colors = { + {r = 150, g = 134, b = 46}, + {r = 70, g = 76, b = 23}, + {r = 94, g = 125, b = 20}, + {r = 109, g = 122, b = 56}, + {r = 105, g = 164, b = 40}, + {r = 79, g = 119, b = 21}, + }, + tags = {"green"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-j", + model = "ash", + locale = "opal", + noise = "trees-1", + temperature_low = 0.1, + temperature_high = 0.35, + aux_low = 0.2, + aux_high = 0.55, + water_band = 4, + density = 4, + colors = { + {r = 55, g = 22, b = 74}, + {r = 36, g = 106, b = 112}, + {r = 17, g = 80, b = 17}, + }, + tags = {"purple", "turquoise", "blue"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-k", + model = "03", + locale = "cherry", + noise = "trees-2", + temperature_low = 0.1, + temperature_high = 0.35, + aux_low = 0.55, + aux_high = 0.8, + water_band = 4, + density = 4, + colors = { + {r = 128, g = 28, b = 120}, + {r = 184, g = 31, b = 31}, + {r = 55, g = 22, b = 74}, + }, + tags = {"red", "purple"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-l", + model = "oaktapus", + locale = "topaz", + noise = "trees-3", + temperature_low = 0.1, + temperature_high = 0.3, + aux_low = 0.8, + aux_high = 1, + water_band = 4, + density = 4, + colors = { + {r = 17, g = 202, b = 248}, + {r = 192, g = 180, b = 237}, + {r = 77, g = 81, b = 163}, + }, + tags = {"blue"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-m", + model = "07", + locale = "jade", + noise = "trees-4", + temperature_low = 0.0, + temperature_high = 0.25, + aux_low = 0.0, + aux_high = 0.2, + water_band = 4, + density = 4, + colors = { + {r = 36, g = 225, b = 157}, + {r = 176, g = 220, b = 155}, + {r = 105, g = 184, b = 40}, + }, + tags = {"green", "turquoise"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-n", + model = "mangrove", + locale = "cyanide", + noise = "trees-5", + temperature_low = 0.0, + temperature_high = 0.1, + aux_low = 0.2, + aux_high = 0.6, + water_band = 4, + density = 4, + colors = { + {r = 65, g = 123, b = 122}, + {r = 43, g = 122, b = 89}, + {r = 75, g = 110, b = 123}, + {r = 17, g = 62, b = 5}, + {r = 103, g = 149, b = 156}, + }, + tags = {"green", "turquoise"}, + tile_restriction = grass, + }, + { + name = "tree-wetland-o", + model = "01", + locale = "tickling", + noise = "trees-6", + temperature_low = 0.0, + temperature_high = 0.1, + aux_low = 0.6, + aux_high = 1, + water_band = 4, + density = 4, + colors = { + {r = 17, g = 62, b = 5}, + {r = 69, g = 73, b = 9}, + {r = 105, g = 184, b = 40}, + }, + tags = {"green"}, + tile_restriction = grass, + }, + + -- Grassland + { + name = "tree-grassland-a", + model = "ash", + locale = "olive", + noise = "trees-7", + temperature_low = 0.6, + temperature_high = 1, + aux_low = 0, + aux_high = 0.15, + water_band = 3, + density = 3, + colors = { + {r = 165, g = 184, b = 40}, + {r = 79, g = 119, b = 21}, + {r = 69, g = 73, b = 9}, + }, + tags = {"green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-b", + model = "scarecrow", + locale = "amber", + noise = "trees-8", + temperature_low = 0.85, + temperature_high = 1, + aux_low = 0.15, + aux_high = 0.35, + water_band = 3, + density = 3, + colors = { + {r = 142, g = 109, b = 23}, + {r = 184, g = 91, b = 31}, + {r = 218, g = 167, b = 44}, + }, + tags = {"red", "orange"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-c", + model = "oaktapus", + locale = "crimson", + noise = "trees-9", + temperature_low = 0.75, + temperature_high = 1, + aux_low = 0.35, + aux_high = 0.7, + water_band = 3, + density = 3, + colors = { + {r = 184, g = 31, b = 31}, + {r = 245, g = 145, b = 11}, + {r = 109, g = 53, b = 33}, + }, + tags = {"red", "orange"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-d", + model = "ash", + locale = "mulberry", + noise = "trees-1", + temperature_low = 0.9, + temperature_high = 1, + aux_low = 0.7, + aux_high = 1, + water_band = 3, + density = 3, + colors = { + {r = 109, g = 53, b = 33}, + {r = 128, g = 28, b = 120}, + {r = 184, g = 31, b = 31}, + }, + tags = {"red", "purple"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-e", + model = "scarecrow", + locale = "grape", + noise = "trees-2", + temperature_low = 0.75, + temperature_high = 0.9, + aux_low = 0.7, + aux_high = 1, + water_band = 3, + density = 3, + colors = { + {r = 128, g = 28, b = 120}, + {r = 109, g = 53, b = 33}, + {r = 55, g = 22, b = 74}, + }, + tags = {"purple"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-f", + model = "ash", + locale = "sunleaf", + noise = "trees-3", + temperature_low = 0.6, + temperature_high = 0.85, + aux_low = 0.15, + aux_high = 0.35, + water_band = 3, + density = 3, + colors = { + {r = 218, g = 187, b = 44}, + {r = 245, g = 165, b = 11}, + {r = 142, g = 99, b = 23}, + }, + tags = {"yellow"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-g", + model = "ash", + locale = "springleaf", + noise = "trees-4", + temperature_low = 0.4, + temperature_high = 0.75, + aux_low = 0.35, + aux_high = 0.55, + water_band = 3, + density = 3, + colors = { + {r = 69, g = 73, b = 9}, + {r = 165, g = 184, b = 40}, + {r = 79, g = 119, b = 21}, + {r = 210, g = 185, b = 48}, + {r = 218, g = 187, b = 44}, + }, + tags = {"green", "yellow"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-h", + model = "05", + locale = "broadleaf", + noise = "trees-5", + temperature_low = 0.1, + temperature_high = 0.75, + aux_low = 0.55, + aux_high = 0.65, + water_band = 3, + density = 3, + colors = { + {r = 79, g = 119, b = 21}, + {r = 165, g = 184, b = 40}, + {r = 69, g = 73, b = 9}, + }, + tags = {"green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-h2", + model = "04", + locale = "beetroot", + noise = "trees-6", + temperature_low = 0.4, + temperature_high = 0.75, + aux_low = 0.65, + aux_high = 0.85, + water_band = 2, + density = 2.1, + colors = { + {r = 128, g = 28, b = 75}, + {r = 219, g = 78, b = 173}, + {r = 95, g = 75, b = 147}, + {r = 184, g = 31, b = 67}, + }, + tags = {"purple", "violet"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-h3", + model = "scarecrow", + locale = "amethyst", + noise = "trees-7", + temperature_low = 0.1, + temperature_high = 0.4, + aux_low = 0.65, + aux_high = 0.85, + water_band = 2, + density = 2.1, + colors = { + {r = 67, g = 67, b = 142}, + {r = 115, g = 67, b = 142}, + {r = 95, g = 75, b = 147}, + {r = 75, g = 28, b = 148}, + }, + tags = {"purple", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-i", + model = "greypine", + locale = "candyfloss", + noise = "trees-8", + temperature_low = 0.3, + temperature_high = 0.75, + aux_low = 0.8, + aux_high = 1, + water_band = 3, + density = 3, + colors = { + {r = 55, g = 22, b = 74}, + {r = 128, g = 28, b = 120}, + {r = 192, g = 180, b = 237}, + {r = 230, g = 120, b = 255}, + }, + tags = {"violet", "white"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-j", + model = "08", + locale = "starleaf", + noise = "trees-8", + temperature_low = 0.4, + temperature_high = 0.6, + aux_low = 0, + aux_high = 0.3, + water_band = 3, + density = 3, + colors = { + {r = 218, g = 187, b = 44}, + {r = 79, g = 119, b = 21}, + {r = 105, g = 184, b = 40}, + }, + tags = {"green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-k", + model = "02", + locale = "emerald", + noise = "trees-9", + temperature_low = 0.1, + temperature_high = 0.4, + aux_low = 0, + aux_high = 0.3, + water_band = 3, + density = 3, + colors = { + {r = 76, g = 61, b = 16}, + {r = 69, g = 137, b = 69}, + {r = 152, g = 119, b = 33}, + {r = 109, g = 132, b = 43}, + }, + tags = {"green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-l", + model = "specter", + locale = "sunset", + noise = "trees-1", + temperature_low = 0.25, + temperature_high = 0.4, + aux_low = 0.3, + aux_high = 0.55, + water_band = 3, + density = 3, + colors = { + {r = 184, g = 31, b = 31}, + {r = 142, g = 99, b = 23}, + {r = 76, g = 61, b = 16}, + }, + tags = {"red"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-m", + model = "ash", + locale = "thistle", + noise = "trees-2", + temperature_low = 0.1, + temperature_high = 0.3, + aux_low = 0.8, + aux_high = 1, + water_band = 3, + density = 3, + colors = { + {r = 192, g = 180, b = 237}, + {r = 128, g = 28, b = 120}, + {r = 167, g = 198, b = 220}, + }, + tags = {"violet", "white", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-n", + model = "greypine", + locale = "smoky", + noise = "trees-3", + temperature_low = 0.1, + temperature_high = 0.25, + aux_low = 0.3, + aux_high = 0.55, + water_band = 3, + density = 3, + colors = { + {r = 221, g = 176, b = 207}, + {r = 184, g = 31, b = 31}, + {r = 75, g = 92, b = 123}, + }, + tags = {"red", "white", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-o", + model = "02", + locale = "blackleaf", + noise = "trees-4", + temperature_low = 0.0, + temperature_high = 0.1, + aux_low = 0.0, + aux_high = 0.3, + water_band = 3, + density = 3, + colors = { + {r = 32, g = 76, b = 69}, + {r = 75, g = 92, b = 123}, + {r = 76, g = 61, b = 16}, + }, + tags = {"turquoise"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-p", + model = "05", + locale = "twilight", + noise = "trees-5", + temperature_low = 0.0, + temperature_high = 0.1, + aux_low = 0.3, + aux_high = 0.7, + water_band = 3, + density = 3, + colors = { + {r = 75, g = 92, b = 123}, + {r = 44, g = 65, b = 126}, + {r = 32, g = 76, b = 69}, + }, + tags = {"turquoise", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-grassland-q", + model = "specter", + locale = "sapphire", + noise = "trees-6", + temperature_low = 0.0, + temperature_high = 0.1, + aux_low = 0.7, + aux_high = 0.1, + water_band = 3, + density = 3, + colors = { + {r = 167, g = 198, b = 220}, + {r = 44, g = 65, b = 126}, + {r = 192, g = 180, b = 237}, + }, + tags = {"white", "blue"}, + tile_restriction = grass_dirt, + }, + + + -- dryland + { + name = "tree-dryland-a", + model = "willow", + locale = "bloodlash", + noise = "trees-7", + temperature_low = 0.85, + temperature_high = 1, + aux_low = 0.0, + aux_high = 0.4, + water_band = 2, + density = 1, + colors = { + {r = 255, g = 0, b = 0}, + {r = 255, g = 99, b = 23}, + {r = 255, g = 200, b = 0}, + {r = 142, g = 99, b = 23}, + {r = 245, g = 165, b = 11}, + {r = 79, g = 119, b = 21}, + }, + tags = {"red", "yellow"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-b", + model = "04", + locale = "succulent", + noise = "trees-8", + temperature_low = 0.85, + temperature_high = 1, + aux_low = 0.4, + aux_high = 0.7, + water_band = 2, + density = 1, + colors = { + {r = 17, g = 62, b = 5}, + {r = 142, g = 99, b = 23}, + {r = 79, g = 119, b = 21}, + }, + tags = {"green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-c", + model = "scarecrow", + locale = "powderpuff", + noise = "trees-9", + temperature_low = 0.7, + temperature_high = 1, + aux_low = 0.7, + aux_high = 0.9, + water_band = 2, + density = 1, + colors = { + {r = 138, g = 61, b = 44}, + {r = 87, g = 54, b = 83}, + {r = 241, g = 200, b = 241}, + {r = 150, g = 100, b = 110}, + }, + tags = {"white", "red", "violet"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-d", + model = "04", + locale = "dusky", + noise = "trees-1", + temperature_low = 0.7, + temperature_high = 1, + aux_low = 0.9, + aux_high = 1, + water_band = 2, + density = 1, + colors = { + {r = 44, g = 65, b = 126}, + {r = 128, g = 28, b = 118}, + {r = 55, g = 22, b = 74}, + }, + tags = {"red", "purple", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-e", + model = "oaktapus", + locale = "mint", + noise = "trees-2", + temperature_low = 0.45, + temperature_high = 0.85, + aux_low = 0, + aux_high = 0.2, + water_band = 2, + density = 1, + colors = { + {r = 105, g = 184, b = 40}, + {r = 176, g = 220, b = 165}, + {r = 142, g = 99, b = 23}, + }, + tags = {"green", "turquoise"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-f", + model = "08", + locale = "spinleaf", + noise = "trees-3", + temperature_low = 0.7, + temperature_high = 0.85, + aux_low = 0.2, + aux_high = 0.7, + water_band = 2, + density = 1, + colors = { + {r = 245, g = 165, b = 11}, + {r = 241, g = 238, b = 14}, + {r = 142, g = 99, b = 23}, + }, + tags = {"green", "yellow"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-g", + model = "oaktapus", + locale = "mottled", + noise = "trees-4", + temperature_low = 0.45, + temperature_high = 0.7, + aux_low = 0.2, + aux_high = 0.5, + water_band = 2, + density = 1, + colors = { + {r = 174, g = 156, b = 56}, + {r = 163, g = 88, b = 33}, + {r = 152, g = 99, b = 23}, + {r = 79, g = 119, b = 21}, + }, + tags = {"green", "yellow"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-h", + model = "04", + locale = "mosaic", + noise = "trees-5", + temperature_low = 0.45, + temperature_high = 0.7, + aux_low = 0.5, + aux_high = 0.85, + water_band = 2, + density = 1, + colors = { + {r = 184, g = 31, b = 31}, + {r = 84, g = 17, b = 17}, + {r = 245, g = 145, b = 11}, + {r = 85, g = 22, b = 74}, + }, + tags = {"red", "yellow", "purple"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-i", + model = "willow", + locale = "strangling", + noise = "trees-6", + temperature_low = 0.45, + temperature_high = 0.7, + aux_low = 0.85, + aux_high = 1, + water_band = 2, + density = 1, + colors = { + {r = 128, g = 28, b = 120}, + {r = 84, g = 17, b = 17}, + {r = 184, g = 31, b = 31}, + }, + tags = {"violet"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-j", + model = "01", + locale = "fluffy", + noise = "trees-7", + temperature_low = 0.0, + temperature_high = 0.45, + aux_low = 0.0, + aux_high = 0.15, + water_band = 2, + density = 1, + colors = { + {r = 176, g = 220, b = 165}, + {r = 105, g = 184, b = 40}, + {r = 75, g = 92, b = 123}, + }, + tags = {"turquoise", "green"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-k", + model = "greypine", + locale = "mothwing", + noise = "trees-8", + temperature_low = 0.15, + temperature_high = 0.45, + aux_low = 0.15, + aux_high = 0.45, + water_band = 2, + density = 1, + colors = { + {r = 17, g = 62, b = 5}, + {r = 79, g = 119, b = 21}, + {r = 75, g = 92, b = 123}, + }, + tags = {"turquoise", "green", "blue"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-l", + model = "01", + locale = "bearded", + noise = "trees-9", + temperature_low = 0.0, + temperature_high = 0.45, + aux_low = 0.45, + aux_high = 0.75, + water_band = 2, + density = 1, + colors = { + {r = 42, g = 86, b = 79}, + {r = 74, g = 32, b = 27}, + {r = 17, g = 82, b = 17}, + }, + tags = {"turquoise", "green", "red"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-m", + model = "scarecrow", + locale = "fusia", + noise = "trees-1", + temperature_low = 0.2, + temperature_high = 0.45, + aux_low = 0.75, + aux_high = 1, + water_band = 2, + density = 1, + colors = { + {r = 84, g = 17, b = 17}, + {r = 55, g = 22, b = 74}, + {r = 128, g = 28, b = 120}, + }, + tags = {"violet", "purple"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-n", + model = "06", + locale = "sticky", + noise = "trees-2", + temperature_low = 0, + temperature_high = 0.15, + aux_low = 0.15, + aux_high = 0.45, + water_band = 2, + density = 1, + colors = { + {r = 75, g = 92, b = 123}, + {r = 32, g = 76, b = 69}, + {r = 17, g = 62, b = 5}, + }, + tags = {"turquoise"}, + tile_restriction = grass_dirt, + }, + { + name = "tree-dryland-o", + model = "01", + locale = "dreamtrap", + noise = "trees-3", + temperature_low = 0, + temperature_high = 0.2, + aux_low = 0.85, + aux_high = 1, + water_band = 2, + density = 1, + colors = { + {r = 230, g = 220, b = 255}, + {r = 55, g = 22, b = 74}, + {r = 100, g = 100, b = 200}, + {r = 200, g = 150, b = 255}, + {r = 160, g = 150, b = 160}, + }, + tile_restriction = not_sand, + tags = {"purple", "white"}, + tile_restriction = grass_dirt, + }, + + -- desert + { + name = "tree-desert-a", + model = "08", + locale = "cactuar", + noise = "trees-4", + temperature_low = 0.75, + temperature_high = 1, + aux_low = 0.0, + aux_high = 0.15, + water_band = 1, + density = 1, + colors = { + {r = 142, g = 99, b = 23}, + {r = 241, g = 238, b = 14}, + {r = 69, g = 73, b = 9}, + }, + tags = {"green"} + }, + { + name = "tree-desert-b", + model = "pear", + locale = "orchid", + noise = "trees-5", + temperature_low = 0.8, + temperature_high = 1, + aux_low = 0.15, + aux_high = 0.45, + water_band = 1, + density = 1, + colors = { + {r = 227, g = 169, b = 209}, + {r = 220, g = 47, b = 222}, + {r = 184, g = 31, b = 31}, + }, + tags = {"red", "violet"} + }, + { + name = "tree-desert-c", + model = "greypine", + locale = "cinder", + noise = "trees-6", + temperature_low = 0.75, + temperature_high = 1, + aux_low = 0.45, + aux_high = 0.7, + water_band = 1, + density = 1, + colors = { + {r = 245, g = 165, b = 11}, + {r = 163, g = 113, b = 21}, + {r = 184, g = 32, b = 32}, + }, + tags = {"yellow", "red"} + }, + { + name = "tree-desert-d", + model = "pear", + locale = "dragonfly", + noise = "trees-7", + temperature_low = 0.75, + temperature_high = 1, + aux_low = 0.7, + aux_high = 0.9, + water_band = 1, + density = 1, + colors = { + {r = 79, g = 119, b = 21}, + {r = 176, g = 220, b = 165}, + {r = 76, g = 61, b = 16}, + }, + tags = {"green"} + }, + { + name = "tree-desert-e", + model = "08", + locale = "deeproot", + noise = "trees-8", + temperature_low = 0.75, + temperature_high = 1, + aux_low = 0.9, + aux_high = 1, + water_band = 1, + density = 1, + colors = { + {r = 167, g = 198, b = 86}, + {r = 176, g = 220, b = 165}, + {r = 79, g = 119, b = 21}, + }, + tags = {"green"} + }, + { + name = "tree-desert-f", + model = "pear", + locale = "sporepuff", + noise = "trees-9", + temperature_low = 0.5, + temperature_high = 0.8, + aux_low = 0.15, + aux_high = 0.45, + water_band = 1, + density = 1, + colors = { + {r = 150, g = 150, b = 20}, + {r = 69, g = 73, b = 9}, + {r = 79, g = 119, b = 21}, + }, + tags = {"yellow"} + }, + { + name = "tree-desert-g", + model = "06", + locale = "hangman", + noise = "trees-1", + temperature_low = 0.45, + temperature_high = 0.75, + aux_low = 0.0, + aux_high = 0.15, + water_band = 1, + density = 1, + colors = { + {r = 184, g = 31, b = 31}, + {r = 55, g = 22, b = 74}, + {r = 245, g = 165, b = 11}, + }, + tags = {"green"} + }, + { + name = "tree-desert-h", + model = "baobab", + locale = "ruby", + noise = "trees-2", + temperature_low = 0.5, + temperature_high = 0.75, + aux_low = 0.45, + aux_high = 1, + water_band = 1, + density = 1, + colors = { + {r = 84, g = 17, b = 17}, + {r = 184, g = 31, b = 31}, + {r = 76, g = 61, b = 16}, + }, + tags = {"red"} + }, + { + name = "tree-desert-i", + model = "greypine", + locale = "magnolia", + noise = "trees-3", + temperature_low = 0.0, + temperature_high = 0.5, + aux_low = 0.15, + aux_high = 0.5, + water_band = 1, + density = 1, + colors = { + {r = 255, g = 255, b = 255}, + {r = 255, g = 255, b = 200}, + {r = 250, g = 250, b = 250}, + {r = 255, g = 225, b = 200}, + }, + tags = {"white", "yellow"} + }, + { + name = "tree-desert-j", + model = "09", + locale = "dustyrose", + noise = "trees-4", + temperature_low = 0.15, + temperature_high = 0.5, + aux_low = 0.5, + aux_high = 0.7, + water_band = 1, + density = 1, + colors = { + {r = 245, g = 165, b = 165}, + {r = 184, g = 31, b = 31}, + {r = 225, g = 134, b = 177}, + }, + tags = {"violet", "red", "white"} + }, + { + name = "tree-desert-k", + model = "baobab", + locale = "autumn", + noise = "trees-5", + temperature_low = 0.15, + temperature_high = 0.5, + aux_low = 0.7, + aux_high = 0.9, + water_band = 1, + density = 1, + colors = { + {r = 184, g = 31, b = 31}, + {r = 84, g = 17, b = 17}, + {r = 245, g = 165, b = 11}, + }, + tags = {"red", "yellow"} + }, + { + name = "tree-desert-l", + model = "09", + locale = "raisin", + noise = "trees-6", + temperature_low = 0.15, + temperature_high = 0.5, + aux_low = 0.9, + aux_high = 1, + water_band = 1, + density = 1, + colors = { + {r = 227, g = 169, b = 189}, + {r = 136, g = 28, b = 118}, + {r = 164, g = 31, b = 144}, + }, + tags = {"red", "violet"} + }, + { + name = "tree-desert-m", + model = "baobab", + locale = "midnight", + noise = "trees-7", + temperature_low = 0.0, + temperature_high = 0.45, + aux_low = 0.0, + aux_high = 0.15, + water_band = 1, + density = 1, + colors = { + {r = 55, g = 40, b = 74}, + {r = 22, g = 44, b = 120}, + {r = 16, g = 42, b = 42}, + {r = 8, g = 8, b = 8}, + }, + tags = {"purple", "blue", "turquoise"} + }, + { + name = "tree-desert-n", + model = "09", + locale = "snowdrop", + noise = "trees-8", + temperature_low = 0.0, + temperature_high = 0.15, + aux_low = 0.5, + aux_high = 1, + water_band = 1, + density = 1, + colors = { + {r = 255, g = 255, b = 255}, + {r = 192, g = 180, b = 237}, + {r = 108, g = 28, b = 140}, + {r = 190, g = 190, b = 229}, + }, + tags = {"purple", "blue", "white"} + }, + -- frozen + { + name = "tree-snow-a", + model = "conifer-01", + locale = "iceblade", + noise = "trees-1", + stump = "tree-02-stump", + temperature_low = -0.15, + temperature_high = 0, + aux_low = 0, + aux_high = 1, + density = 2, + colors = { + {r = 255, g = 255, b = 255}, + {r = 167, g = 198, b = 220}, + {r = 32, g = 76, b = 42}, + {r = 17, g = 62, b = 5}, + }, + tags = {"green", "turquoise", "white"}, + tile_restriction = alien_biomes.list_tiles(alien_biomes.exclude_tags(alien_biomes.all_tiles(), {"ice", "volcanic", "sand"})) + }, + -- volcanic + { + name = "tree-volcanic-a", + model = "medusa-01", + locale = "amber", + noise = "trees-1", + stump = "tree-02-stump", + temperature_low = 1, + temperature_high = 1.25, + aux_low = 0, + aux_high = 1, + density = 1, + colors = { + {r = 194, g = 31, b = 31}, + {r = 245, g = 165, b = 11}, + {r = 241, g = 208, b = 14}, + {r = 162, g = 99, b = 23}, + }, + tags = {"red", "yellow"}, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"heat-1"})) + }, + -- palm + { + name = "tree-palm-a", + model = "palm", + locale = "paradise", + noise = "trees-3", + stump = "tree-02-stump", + elevation_low = 0, + elevation_high = 2, + temperature_high = 1, + temperature_low = 0.25, + temperature_high = 1, + water_low = 0.4, + water_high = 1, + aux_low = 0, + aux_high = 0.5, + density = 1, + colors = { + {r = 85, g = 114, b = 47}, + {r = 100, g = 127, b = 52}, + {r = 63, g = 118, b = 10}, + {r = 101, g = 106, b = 23} + }, + tags = {"green"}, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"sand"})) + }, + -- palm + { + name = "tree-palm-b", + model = "palm", + locale = "amaranth", + noise = "trees-2", + stump = "tree-02-stump", + elevation_low = 0, + elevation_high = 2, + temperature_high = 1, + temperature_low = 0.25, + temperature_high = 1, + water_low = 0.4, + water_high = 1, + aux_low = 0.5, + aux_high = 1, + density = 1, + colors = { + {r = 114, g = 47, b = 85}, + {r = 127, g = 52, b = 100}, + {r = 118, g = 10, b = 63}, + {r = 106, g = 23, b = 101} + }, + tags = {"violet"}, + tile_restriction = alien_biomes.list_tiles(alien_biomes.require_tag(alien_biomes.all_tiles(), {"sand"})) + }, +} +return trees diff --git a/alien-biomes/prototypes/entity/tree-models.lua b/alien-biomes/prototypes/entity/tree-models.lua new file mode 100644 index 00000000..70572e6d --- /dev/null +++ b/alien-biomes/prototypes/entity/tree-models.lua @@ -0,0 +1,9132 @@ +local data_util = require("data-util") +local function index_to_letter(index, starting_at) + return string.char(string.byte(starting_at or "a", 1) - 1 + index) +end + +--[[ +old variants: +01 oaktapus +02 greypine +03 ash +04 scarecrow +05 specter +06 willow +07 mangrove +08 pear +09 baobab + +reflection prep: +all trunks base must line up +shrink by factor of 5 +split right +]]-- + +local tree_types = +{ + { -- tree-01 + --addHere-tree01 -- "fir" + type_name = "01", + locale = "fiir", + drawing_box = {{-0.9, -3}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/01/tree-01-reflection.png", + priority = "extra-high", + width = 28, + height = 40, + shift = util.by_pixel(0, 70), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-01 + { -- a + trunk = + { + width = 73, + height = 171, + shift = util.by_pixel(0, -70), + hr_version = + { + width = 140, + height = 340, + shift = util.by_pixel(2, -69), + scale = 0.5 + } + }, + stump = + { + width = 39, + height = 35, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 76, + height = 68, + shift = util.by_pixel(-1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 163, + height = 67, + shift = util.by_pixel(60, -2), + hr_version = + { + width = 324, + height = 134, + shift = util.by_pixel(61, -2), + scale = 0.5 + } + }, + leaves = + { + width = 93, + height = 151, + shift = util.by_pixel(-2, -74), + hr_version = + { + width = 184, + height = 306, + shift = util.by_pixel(-1, -74), + scale = 0.5, + } + }, + normal = + { + width = 94, + height = 146, + shift = util.by_pixel(0, -76), + hr_version = + { + width = 184, + height = 290, + shift = util.by_pixel(-0.5, -76), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 65, + height = 165, + shift = util.by_pixel(4, -68), + hr_version = + { + width = 132, + height = 326, + shift = util.by_pixel(4, -66), + scale = 0.5 + } + }, + stump = + { + width = 39, + height = 33, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 72, + height = 66, + shift = util.by_pixel(0, -1), + scale = 0.5 + } + }, + shadow = + { + width = 159, + height = 67, + shift = util.by_pixel(62, -2), + hr_version = + { + width = 312, + height = 126, + shift = util.by_pixel(64, 0), + scale = 0.5 + } + }, + leaves = + { + width = 91, + height = 157, + shift = util.by_pixel(0, -72), + hr_version = + { + width = 182, + height = 316, + shift = util.by_pixel(1, -72), + scale = 0.5 + } + }, + normal = + { + width = 90, + height = 150, + shift = util.by_pixel(2, -75), + hr_version = + { + width = 180, + height = 300, + shift = util.by_pixel(2, -75), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 71, + height = 167, + shift = util.by_pixel(-6, -70), + hr_version = + { + width = 136, + height = 330, + shift = util.by_pixel(-4, -68), + scale = 0.5 + } + }, + stump = + { + width = 39, + height = 33, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 74, + height = 62, + shift = util.by_pixel(0, -1), + scale = 0.5 + } + }, + shadow = + { + width = 155, + height = 65, + shift = util.by_pixel(58, 0), + hr_version = + { + width = 306, + height = 132, + shift = util.by_pixel(59, 0), + scale = 0.5 + } + }, + leaves = + { + width = 93, + height = 157, + shift = util.by_pixel(-2, -74), + hr_version = + { + width = 180, + height = 308, + shift = util.by_pixel(0, -72), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 154, + shift = util.by_pixel(1, -70), + hr_version = + { + width = 182, + height = 306, + shift = util.by_pixel(0.5, -70), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 57, + height = 163, + shift = util.by_pixel(0, -68), + hr_version = + { + width = 108, + height = 324, + shift = util.by_pixel(2, -67), + scale = 0.5 + } + }, + stump = + { + width = 41, + height = 35, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 82, + height = 68, + shift = util.by_pixel(0, -3), + scale = 0.5 + } + }, + shadow = + { + width = 145, + height = 67, + shift = util.by_pixel(58, -4), + hr_version = + { + width = 288, + height = 130, + shift = util.by_pixel(59, -3), + scale = 0.5 + } + }, + leaves = + { + width = 95, + height = 153, + shift = util.by_pixel(0, -72), + hr_version = + { + width = 188, + height = 310, + shift = util.by_pixel(1, -72), + scale = 0.5 + } + }, + normal = + { + width = 94, + height = 144, + shift = util.by_pixel(2, -75), + hr_version = + { + width = 188, + height = 286, + shift = util.by_pixel(2, -75.5), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 69, + height = 165, + shift = util.by_pixel(2, -68), + hr_version = + { + width = 138, + height = 324, + shift = util.by_pixel(2, -66), + scale = 0.5 + } + }, + stump = + { + width = 39, + height = 33, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 78, + height = 62, + shift = util.by_pixel(0, -1), + scale = 0.5 + } + }, + shadow = + { + width = 159, + height = 69, + shift = util.by_pixel(66, 0), + hr_version = + { + width = 314, + height = 136, + shift = util.by_pixel(67, 1), + scale = 0.5 + } + }, + leaves = + { + width = 97, + height = 143, + shift = util.by_pixel(2, -68), + hr_version = + { + width = 190, + height = 300, + shift = util.by_pixel(3, -71), + scale = 0.5 + } + }, + normal = + { + width = 96, + height = 140, + shift = util.by_pixel(4, -68), + hr_version = + { + width = 190, + height = 280, + shift = util.by_pixel(4, -68), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 63, + height = 165, + shift = util.by_pixel(-6, -66), + hr_version = + { + width = 118, + height = 326, + shift = util.by_pixel(-4, -65), + scale = 0.5 + } + }, + stump = + { + width = 41, + height = 37, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 76, + height = 70, + shift = util.by_pixel(0, -1), + scale = 0.5 + } + }, + shadow = + { + width = 151, + height = 71, + shift = util.by_pixel(56, 0), + hr_version = + { + width = 304, + height = 140, + shift = util.by_pixel(56, 1), + scale = 0.5 + } + }, + leaves = + { + width = 97, + height = 153, + shift = util.by_pixel(-4, -68), + hr_version = + { + width = 190, + height = 304, + shift = util.by_pixel(-3, -67), + scale = 0.5 + } + }, + normal = + { + width = 96, + height = 140, + shift = util.by_pixel(-2, -71), + hr_version = + { + width = 190, + height = 278, + shift = util.by_pixel(-2, -71), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 71, + height = 147, + shift = util.by_pixel(-2, -60), + hr_version = + { + width = 142, + height = 294, + shift = util.by_pixel(-2, -59), + scale = 0.5 + } + }, + stump = + { + width = 37, + height = 33, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 72, + height = 62, + shift = util.by_pixel(-1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 127, + height = 69, + shift = util.by_pixel(40, -4), + hr_version = + { + width = 252, + height = 130, + shift = util.by_pixel(41, -2), + scale = 0.5 + } + }, + leaves = + { + width = 93, + height = 139, + shift = util.by_pixel(-4, -62), + hr_version = + { + width = 184, + height = 274, + shift = util.by_pixel(-3, -61), + scale = 0.5 + } + }, + normal = + { + width = 94, + height = 124, + shift = util.by_pixel(-2, -62), + hr_version = + { + width = 186, + height = 248, + shift = util.by_pixel(-2.5, -62), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 57, + height = 151, + shift = util.by_pixel(4, -62), + hr_version = + { + width = 116, + height = 296, + shift = util.by_pixel(4, -60), + scale = 0.5 + } + }, + stump = + { + width = 37, + height = 35, + shift = util.by_pixel(-2, -4), + hr_version = + { + width = 70, + height = 64, + shift = util.by_pixel(-1, -2), + scale = 0.5 + } + }, + shadow = + { + width = 135, + height = 67, + shift = util.by_pixel(54, -4), + hr_version = + { + width = 266, + height = 130, + shift = util.by_pixel(55, -3), + scale = 0.5 + } + }, + leaves = + { + width = 91, + height = 141, + shift = util.by_pixel(0, -64), + hr_version = + { + width = 180, + height = 282, + shift = util.by_pixel(1, -63), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 122, + shift = util.by_pixel(2, -61), + hr_version = + { + width = 180, + height = 244, + shift = util.by_pixel(1.5, -61), + scale = 0.5 + } + }, + }, + { -- i + trunk = + { + width = 63, + height = 123, + shift = util.by_pixel(-2, -50), + hr_version = + { + width = 120, + height = 244, + shift = util.by_pixel(0, -49), + scale = 0.5 + } + }, + stump = + { + width = 41, + height = 35, + shift = util.by_pixel(2, -6), + hr_version = + { + width = 82, + height = 68, + shift = util.by_pixel(2, -5), + scale = 0.5 + } + }, + shadow = + { + width = 113, + height = 61, + shift = util.by_pixel(50, 2), + hr_version = + { + width = 228, + height = 118, + shift = util.by_pixel(50, 3), + scale = 0.5 + } + }, + leaves = + { + width = 79, + height = 115, + shift = util.by_pixel(-4, -52), + hr_version = + { + width = 152, + height = 234, + shift = util.by_pixel(-2, -52), + scale = 0.5 + } + }, + normal = + { + width = 78, + height = 100, + shift = util.by_pixel(-1, -56), + hr_version = + { + width = 152, + height = 196, + shift = util.by_pixel(-1.5, -56.5), + scale = 0.5 + } + }, + }, + { -- j + trunk = + { + width = 55, + height = 127, + shift = util.by_pixel(0, -52), + hr_version = + { + width = 110, + height = 250, + shift = util.by_pixel(0, -50), + scale = 0.5 + } + }, + stump = + { + width = 39, + height = 39, + shift = util.by_pixel(2, -8), + hr_version = + { + width = 74, + height = 74, + shift = util.by_pixel(3, -6), + scale = 0.5 + } + }, + shadow = + { + width = 109, + height = 53, + shift = util.by_pixel(48, -4), + hr_version = + { + width = 212, + height = 104, + shift = util.by_pixel(50, -3), + scale = 0.5 + } + }, + leaves = + { + width = 67, + height = 115, + shift = util.by_pixel(0, -52), + hr_version = + { + width = 134, + height = 228, + shift = util.by_pixel(0, -51), + scale = 0.5 + } + }, + normal = + { + width = 68, + height = 98, + shift = util.by_pixel(2, -58), + hr_version = + { + width = 134, + height = 194, + shift = util.by_pixel(1.5, -58.5), + scale = 0.5 + } + }, + }, + { -- k + trunk = + { + width = 129, + height = 111, + shift = util.by_pixel(10, -14), + hr_version = + { + width = 258, + height = 224, + shift = util.by_pixel(10, -13), + scale = 0.5 + } + }, + stump = + { + width = 45, + height = 39, + shift = util.by_pixel(-10, 4), + hr_version = + { + width = 86, + height = 78, + shift = util.by_pixel(-9, 4), + scale = 0.5 + } + }, + shadow = + { + width = 129, + height = 107, + shift = util.by_pixel(12, -14), + hr_version = + { + width = 256, + height = 212, + shift = util.by_pixel(13, -13), + scale = 0.5 + } + }, + leaves = + { + width = 123, + height = 95, + shift = util.by_pixel(10, -16), + hr_version = + { + width = 250, + height = 206, + shift = util.by_pixel(10, -12), + scale = 0.5 + } + }, + normal = + { + width = 94, + height = 76, + shift = util.by_pixel(26, -26), + hr_version = + { + width = 186, + height = 150, + shift = util.by_pixel(26, -26), + scale = 0.5 + } + }, + }, + { -- l + trunk = + { + width = 309, + height = 59, + shift = util.by_pixel(32, 6), + hr_version = + { + width = 620, + height = 116, + shift = util.by_pixel(32, 7), + scale = 0.5 + } + }, + stump = + { + width = 197, + height = 101, + shift = util.by_pixel(88, 30), + hr_version = + { + width = 396, + height = 202, + shift = util.by_pixel(88, 31), + scale = 0.5 + } + }, + shadow = + { + width = 185, + height = 49, + shift = util.by_pixel(-30, 4), + hr_version = + { + width = 366, + height = 94, + shift = util.by_pixel(-29, 5), + scale = 0.5 + } + }, + leaves = + { + width = 171, + height = 57, + shift = util.by_pixel(-34, 0), + hr_version = + { + width = 354, + height = 114, + shift = util.by_pixel(-31, 0), + scale = 0.5 + } + }, + normal = + { + width = 122, + height = 56, + shift = util.by_pixel(-52, 1), + hr_version = + { + width = 240, + height = 112, + shift = util.by_pixel(-52.5, 1), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-02 + --addHere-tree02 -- "sequoia" + type_name = "02", + locale = "seqnoia", + drawing_box = {{-0.9, -3.9}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/02/tree-02-reflection.png", + priority = "extra-high", + width = 28, + height = 40, + shift = util.by_pixel(5, 75), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-02 + { -- a + trunk = + { + width = 82, + height = 162, + shift = util.by_pixel(0, -66), + hr_version = + { + width = 162, + height = 324, + shift = util.by_pixel(1, -65), + scale = 0.5 + } + }, + stump = + { + width = 44, + height = 34, + shift = util.by_pixel(2, -2), + hr_version = + { + width = 88, + height = 70, + shift = util.by_pixel(2, -2), + scale = 0.5 + } + }, + shadow = + { + width = 196, + height = 64, + shift = util.by_pixel(90, -2), + hr_version = + { + width = 384, + height = 130, + shift = util.by_pixel(92, -2), + scale = 0.5 + } + }, + leaves = + { + width = 96, + height = 154, + shift = util.by_pixel(-2, -74), + hr_version = + { + width = 184, + height = 310, + shift = util.by_pixel(0, -74), + scale = 0.5 + } + }, + normal = + { + width = 94, + height = 146, + shift = util.by_pixel(1, -78), + hr_version = + { + width = 186, + height = 292, + shift = util.by_pixel(0.5, -78), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 76, + height = 142, + shift = util.by_pixel(-4, -60), + hr_version = + { + width = 150, + height = 286, + shift = util.by_pixel(-3, -59), + scale = 0.5 + } + }, + stump = + { + width = 38, + height = 30, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 78, + height = 60, + shift = util.by_pixel(2, -3), + scale = 0.5 + } + }, + shadow = + { + width = 186, + height = 68, + shift = util.by_pixel(86, 0), + hr_version = + { + width = 372, + height = 134, + shift = util.by_pixel(86, 1), + scale = 0.5 + } + }, + leaves = + { + width = 92, + height = 136, + shift = util.by_pixel(-2, -62), + hr_version = + { + width = 184, + height = 274, + shift = util.by_pixel(-2, -62), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 132, + shift = util.by_pixel(-1, -64), + hr_version = + { + width = 184, + height = 262, + shift = util.by_pixel(-1, -64), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 72, + height = 140, + shift = util.by_pixel(-4, -58), + hr_version = + { + width = 144, + height = 280, + shift = util.by_pixel(-4, -57), + scale = 0.5 + } + }, + stump = + { + width = 38, + height = 32, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 78, + height = 60, + shift = util.by_pixel(2, -2), + scale = 0.5 + } + }, + shadow = + { + width = 176, + height = 64, + shift = util.by_pixel(76, -2), + hr_version = + { + width = 352, + height = 128, + shift = util.by_pixel(77, -2), + scale = 0.5 + } + }, + leaves = + { + width = 90, + height = 130, + shift = util.by_pixel(-2, -62), + hr_version = + { + width = 178, + height = 264, + shift = util.by_pixel(-1, -62), + scale = 0.5 + } + }, + normal = + { + width = 90, + height = 124, + shift = util.by_pixel(0, -66), + hr_version = + { + width = 178, + height = 244, + shift = util.by_pixel(0, -66.5), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 72, + height = 168, + shift = util.by_pixel(6, -70), + hr_version = + { + width = 142, + height = 336, + shift = util.by_pixel(7, -70), + scale = 0.5 + } + }, + stump = + { + width = 52, + height = 40, + shift = util.by_pixel(6, -6), + hr_version = + { + width = 102, + height = 80, + shift = util.by_pixel(7, -6), + scale = 0.5 + } + }, + shadow = + { + width = 200, + height = 66, + shift = util.by_pixel(94, -4), + hr_version = + { + width = 402, + height = 134, + shift = util.by_pixel(94, -4), + scale = 0.5 + } + }, + leaves = + { + width = 90, + height = 166, + shift = util.by_pixel(6, -76), + hr_version = + { + width = 180, + height = 330, + shift = util.by_pixel(6, -75), + scale = 0.5 + } + }, + normal = + { + width = 90, + height = 152, + shift = util.by_pixel(7, -82), + hr_version = + { + width = 180, + height = 302, + shift = util.by_pixel(7, -82), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 86, + height = 144, + shift = util.by_pixel(2, -58), + hr_version = + { + width = 168, + height = 286, + shift = util.by_pixel(3, -57), + scale = 0.5 + } + }, + stump = + { + width = 50, + height = 40, + shift = util.by_pixel(8, -6), + hr_version = + { + width = 100, + height = 78, + shift = util.by_pixel(8, -5), + scale = 0.5 + } + }, + shadow = + { + width = 204, + height = 70, + shift = util.by_pixel(96, 6), + hr_version = + { + width = 410, + height = 144, + shift = util.by_pixel(96, 6), + scale = 0.5 + } + }, + leaves = + { + width = 98, + height = 140, + shift = util.by_pixel(0, -64), + hr_version = + { + width = 194, + height = 276, + shift = util.by_pixel(1, -63), + scale = 0.5 + } + }, + normal = + { + width = 98, + height = 138, + shift = util.by_pixel(2, -64), + hr_version = + { + width = 194, + height = 272, + shift = util.by_pixel(2, -64.5), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 74, + height = 156, + shift = util.by_pixel(-12, -64), + hr_version = + { + width = 144, + height = 310, + shift = util.by_pixel(-10, -63), + scale = 0.5 + } + }, + stump = + { + width = 48, + height = 40, + shift = util.by_pixel(6, -6), + hr_version = + { + width = 96, + height = 78, + shift = util.by_pixel(6, -5), + scale = 0.5 + } + }, + shadow = + { + width = 170, + height = 64, + shift = util.by_pixel(76, 0), + hr_version = + { + width = 344, + height = 130, + shift = util.by_pixel(75, 0), + scale = 0.5 + } + }, + leaves = + { + width = 92, + height = 150, + shift = util.by_pixel(-10, -68), + hr_version = + { + width = 184, + height = 302, + shift = util.by_pixel(-10, -68), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 148, + shift = util.by_pixel(-9, -69), + hr_version = + { + width = 184, + height = 292, + shift = util.by_pixel(-9, -69.5), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 86, + height = 140, + shift = util.by_pixel(4, -56), + hr_version = + { + width = 168, + height = 282, + shift = util.by_pixel(6, -56), + scale = 0.5 + } + }, + stump = + { + width = 38, + height = 32, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 78, + height = 66, + shift = util.by_pixel(0, -2), + scale = 0.5 + } + }, + shadow = + { + width = 188, + height = 64, + shift = util.by_pixel(86, -6), + hr_version = + { + width = 384, + height = 122, + shift = util.by_pixel(84, -4), + scale = 0.5 + } + }, + leaves = + { + width = 100, + height = 136, + shift = util.by_pixel(4, -68), + hr_version = + { + width = 198, + height = 270, + shift = util.by_pixel(5, -67), + scale = 0.5 + } + }, + normal = + { + width = 98, + height = 120, + shift = util.by_pixel(6, -74), + hr_version = + { + width = 196, + height = 238, + shift = util.by_pixel(6, -74.5), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 92, + height = 124, + shift = util.by_pixel(-10, -48), + hr_version = + { + width = 182, + height = 244, + shift = util.by_pixel(-8, -47), + scale = 0.5 + } + }, + stump = + { + width = 38, + height = 32, + shift = util.by_pixel(2, -2), + hr_version = + { + width = 80, + height = 66, + shift = util.by_pixel(1, -2), + scale = 0.5 + } + }, + shadow = + { + width = 154, + height = 60, + shift = util.by_pixel(68, 4), + hr_version = + { + width = 306, + height = 118, + shift = util.by_pixel(69, 5), + scale = 0.5 + } + }, + leaves = + { + width = 96, + height = 116, + shift = util.by_pixel(-8, -58), + hr_version = + { + width = 192, + height = 234, + shift = util.by_pixel(-7, -58), + scale = 0.5 + } + }, + normal = + { + width = 96, + height = 112, + shift = util.by_pixel(-6, -60), + hr_version = + { + width = 190, + height = 220, + shift = util.by_pixel(-6, -60.5), + scale = 0.5 + } + }, + }, + { -- i + trunk = + { + width = 62, + height = 102, + shift = util.by_pixel(4, -38), + hr_version = + { + width = 126, + height = 206, + shift = util.by_pixel(4, -38), + scale = 0.5 + } + }, + stump = + { + width = 44, + height = 38, + shift = util.by_pixel(6, -6), + hr_version = + { + width = 88, + height = 74, + shift = util.by_pixel(7, -5), + scale = 0.5 + } + }, + shadow = + { + width = 132, + height = 54, + shift = util.by_pixel(60, 0), + hr_version = + { + width = 262, + height = 110, + shift = util.by_pixel(61, 0), + scale = 0.5 + } + }, + leaves = + { + width = 78, + height = 96, + shift = util.by_pixel(2, -48), + hr_version = + { + width = 152, + height = 194, + shift = util.by_pixel(4, -48), + scale = 0.5 + } + }, + normal = + { + width = 76, + height = 98, + shift = util.by_pixel(5, -47), + hr_version = + { + width = 152, + height = 194, + shift = util.by_pixel(5, -47), + scale = 0.5 + } + }, + }, + { -- j + trunk = + { + width = 64, + height = 96, + shift = util.by_pixel(-8, -36), + hr_version = + { + width = 128, + height = 194, + shift = util.by_pixel(-8, -36), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 32, + shift = util.by_pixel(6, -4), + hr_version = + { + width = 84, + height = 66, + shift = util.by_pixel(5, -4), + scale = 0.5 + } + }, + shadow = + { + width = 124, + height = 56, + shift = util.by_pixel(54, -2), + hr_version = + { + width = 248, + height = 108, + shift = util.by_pixel(55, -1), + scale = 0.5 + } + }, + leaves = + { + width = 78, + height = 100, + shift = util.by_pixel(-8, -48), + hr_version = + { + width = 152, + height = 198, + shift = util.by_pixel(-7, -47), + scale = 0.5 + } + }, + normal = + { + width = 78, + height = 100, + shift = util.by_pixel(-6, -47), + hr_version = + { + width = 152, + height = 200, + shift = util.by_pixel(-6.5, -46.5), + scale = 0.5 + } + }, + }, + { -- k + trunk = + { + width = 120, + height = 124, + shift = util.by_pixel(4, -20), + hr_version = + { + width = 234, + height = 244, + shift = util.by_pixel(6, -19), + scale = 0.5 + } + }, + stump = + { + width = 70, + height = 66, + shift = util.by_pixel(0, 4), + hr_version = + { + width = 138, + height = 130, + shift = util.by_pixel(1, 5), + scale = 0.5 + } + }, + shadow = + { + width = 124, + height = 132, + shift = util.by_pixel(12, -20), + hr_version = + { + width = 248, + height = 262, + shift = util.by_pixel(12, -19), + scale = 0.5 + } + }, + leaves = + { + width = 106, + height = 132, + shift = util.by_pixel(14, -32), + hr_version = + { + width = 216, + height = 264, + shift = util.by_pixel(13, -30), + scale = 0.5 + } + }, + normal = + { + width = 108, + height = 108, + shift = util.by_pixel(14, -41), + hr_version = + { + width = 214, + height = 212, + shift = util.by_pixel(14, -41.5), + scale = 0.5 + } + }, + }, + { -- l + trunk = + { + width = 202, + height = 62, + shift = util.by_pixel(-8, -8), + hr_version = + { + width = 410, + height = 122, + shift = util.by_pixel(-9, -7), + scale = 0.5 + } + }, + stump = + { + width = 94, + height = 48, + shift = util.by_pixel(28, -12), + hr_version = + { + width = 188, + height = 100, + shift = util.by_pixel(28, -12), + scale = 0.5 + } + }, + shadow = + { + width = 208, + height = 70, + shift = util.by_pixel(-2, 0), + hr_version = + { + width = 418, + height = 138, + shift = util.by_pixel(-2, 1), + scale = 0.5 + } + }, + leaves = + { + width = 202, + height = 80, + shift = util.by_pixel(-12, -8), + hr_version = + { + width = 404, + height = 156, + shift = util.by_pixel(-11, -6), + scale = 0.5 + } + }, + normal = + { + width = 154, + height = 80, + shift = util.by_pixel(-35, -5), + hr_version = + { + width = 308, + height = 156, + shift = util.by_pixel(-35, -5.5), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-03 + --addHere-tree03 -- "eucalyptus" + type_name = "03", + locale = "mewkaliptus", + drawing_box = {{-0.9, -3.7}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/03/tree-03-reflection.png", + priority = "extra-high", + width = 44, + height = 40, + shift = util.by_pixel(10, 65), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-03 + { -- a + trunk = { + width = 135, + height = 157, + shift = util.by_pixel(-6, -56), + hr_version = { + width = 264, + height = 312, + shift = util.by_pixel(-5, -56), + scale = 0.5 + }, + }, + stump = { + width = 53, + height = 41, + shift = util.by_pixel(0, 2), + hr_version = { + width = 100, + height = 80, + shift = util.by_pixel(1, 2), + scale = 0.5 + }, + }, + shadow = { + width = 153, + height = 101, + shift = util.by_pixel(60, -14), + hr_version = { + width = 300, + height = 202, + shift = util.by_pixel(61, -14), + scale = 0.5 + }, + }, + leaves = { + width = 141, + height = 153, + shift = util.by_pixel(-8, -74), + hr_version = { + width = 282, + height = 304, + shift = util.by_pixel(-8, -74), + scale = 0.5 + }, + }, + normal = { + width = 142, + height = 136, + shift = util.by_pixel(-8, -82), + hr_version = { + width = 284, + height = 270, + shift = util.by_pixel(-8, -82), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 127, + height = 157, + shift = util.by_pixel(20, -58), + hr_version = { + width = 252, + height = 314, + shift = util.by_pixel(20, -58), + scale = 0.5 + }, + }, + stump = { + width = 53, + height = 43, + shift = util.by_pixel(-4, 0), + hr_version = { + width = 106, + height = 84, + shift = util.by_pixel(-4, 0), + scale = 0.5 + }, + }, + shadow = { + width = 203, + height = 117, + shift = util.by_pixel(86, -12), + hr_version = { + width = 406, + height = 230, + shift = util.by_pixel(86, -11), + scale = 0.5 + }, + }, + leaves = { + width = 171, + height = 137, + shift = util.by_pixel(22, -80), + hr_version = { + width = 342, + height = 272, + shift = util.by_pixel(22, -80), + scale = 0.5 + }, + }, + normal = { + width = 174, + height = 138, + shift = util.by_pixel(23, -80), + hr_version = { + width = 344, + height = 276, + shift = util.by_pixel(22.5, -79.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 135, + height = 125, + shift = util.by_pixel(-10, -44), + hr_version = { + width = 268, + height = 246, + shift = util.by_pixel(-9, -43), + scale = 0.5 + }, + }, + stump = { + width = 51, + height = 41, + shift = util.by_pixel(2, -2), + hr_version = { + width = 98, + height = 78, + shift = util.by_pixel(3, -1), + scale = 0.5 + }, + }, + shadow = { + width = 323, + height = 97, + shift = util.by_pixel(-26, 8), + hr_version = { + width = 646, + height = 188, + shift = util.by_pixel(-26, 9), + scale = 0.5 + }, + }, + leaves = { + width = 161, + height = 117, + shift = util.by_pixel(-10, -48), + hr_version = { + width = 314, + height = 232, + shift = util.by_pixel(-8, -48), + scale = 0.5 + }, + }, + normal = { + width = 160, + height = 118, + shift = util.by_pixel(-8, -47), + hr_version = { + width = 318, + height = 234, + shift = util.by_pixel(-8, -47.5), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 73, + height = 145, + shift = util.by_pixel(6, -52), + hr_version = { + width = 142, + height = 286, + shift = util.by_pixel(7, -51), + scale = 0.5 + }, + }, + stump = { + width = 51, + height = 41, + shift = util.by_pixel(-6, 0), + hr_version = { + width = 96, + height = 78, + shift = util.by_pixel(-5, 1), + scale = 0.5 + }, + }, + shadow = { + width = 159, + height = 79, + shift = util.by_pixel(66, 0), + hr_version = { + width = 318, + height = 156, + shift = util.by_pixel(66, 0), + scale = 0.5 + }, + }, + leaves = { + width = 103, + height = 129, + shift = util.by_pixel(8, -68), + hr_version = { + width = 202, + height = 254, + shift = util.by_pixel(9, -67), + scale = 0.5 + }, + }, + normal = { + width = 102, + height = 116, + shift = util.by_pixel(10, -72), + hr_version = { + width = 202, + height = 230, + shift = util.by_pixel(9.5, -72.5), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 89, + height = 127, + shift = util.by_pixel(6, -48), + hr_version = { + width = 174, + height = 250, + shift = util.by_pixel(7, -47), + scale = 0.5 + }, + }, + stump = { + width = 51, + height = 39, + shift = util.by_pixel(-4, -4), + hr_version = { + width = 98, + height = 74, + shift = util.by_pixel(-3, -3), + scale = 0.5 + }, + }, + shadow = { + width = 167, + height = 69, + shift = util.by_pixel(70, 0), + hr_version = { + width = 330, + height = 132, + shift = util.by_pixel(71, 1), + scale = 0.5 + }, + }, + leaves = { + width = 117, + height = 105, + shift = util.by_pixel(8, -62), + hr_version = { + width = 234, + height = 208, + shift = util.by_pixel(8, -61), + scale = 0.5 + }, + }, + normal = { + width = 120, + height = 100, + shift = util.by_pixel(9, -64), + hr_version = { + width = 238, + height = 198, + shift = util.by_pixel(8.5, -64), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 79, + height = 133, + shift = util.by_pixel(-12, -50), + hr_version = { + width = 158, + height = 262, + shift = util.by_pixel(-12, -49), + scale = 0.5 + }, + }, + stump = { + width = 47, + height = 33, + shift = util.by_pixel(4, 0), + hr_version = { + width = 90, + height = 66, + shift = util.by_pixel(5, 0), + scale = 0.5 + }, + }, + shadow = { + width = 113, + height = 73, + shift = util.by_pixel(48, -4), + hr_version = { + width = 224, + height = 142, + shift = util.by_pixel(48, -3), + scale = 0.5 + }, + }, + leaves = { + width = 109, + height = 119, + shift = util.by_pixel(-14, -58), + hr_version = { + width = 214, + height = 232, + shift = util.by_pixel(-13, -57), + scale = 0.5 + }, + }, + normal = { + width = 108, + height = 102, + shift = util.by_pixel(-12, -63), + hr_version = { + width = 216, + height = 202, + shift = util.by_pixel(-12, -63.5), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 73, + height = 123, + shift = util.by_pixel(-10, -42), + hr_version = { + width = 140, + height = 240, + shift = util.by_pixel(-9, -41), + scale = 0.5 + }, + }, + stump = { + width = 45, + height = 39, + shift = util.by_pixel(0, 0), + hr_version = { + width = 88, + height = 76, + shift = util.by_pixel(0, 0), + scale = 0.5 + }, + }, + shadow = { + width = 107, + height = 71, + shift = util.by_pixel(44, -6), + hr_version = { + width = 212, + height = 136, + shift = util.by_pixel(44, -5), + scale = 0.5 + }, + }, + leaves = { + width = 95, + height = 117, + shift = util.by_pixel(0, -58), + hr_version = { + width = 188, + height = 230, + shift = util.by_pixel(1, -57), + scale = 0.5 + }, + }, + normal = { + width = 94, + height = 96, + shift = util.by_pixel(2, -66), + hr_version = { + width = 186, + height = 188, + shift = util.by_pixel(1.5, -66.5), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 87, + height = 115, + shift = util.by_pixel(2, -38), + hr_version = { + width = 174, + height = 224, + shift = util.by_pixel(2, -37), + scale = 0.5 + }, + }, + stump = { + width = 45, + height = 41, + shift = util.by_pixel(-2, -2), + hr_version = { + width = 88, + height = 74, + shift = util.by_pixel(-2, 0), + scale = 0.5 + }, + }, + shadow = { + width = 131, + height = 69, + shift = util.by_pixel(54, -2), + hr_version = { + width = 258, + height = 132, + shift = util.by_pixel(55, -1), + scale = 0.5 + }, + }, + leaves = { + width = 93, + height = 103, + shift = util.by_pixel(6, -44), + hr_version = { + width = 182, + height = 200, + shift = util.by_pixel(7, -43), + scale = 0.5 + }, + }, + normal = { + width = 94, + height = 78, + shift = util.by_pixel(8, -54), + hr_version = { + width = 186, + height = 154, + shift = util.by_pixel(7.5, -54), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 99, + height = 101, + shift = util.by_pixel(2, -34), + hr_version = { + width = 196, + height = 202, + shift = util.by_pixel(2, -34), + scale = 0.5 + }, + }, + stump = { + width = 49, + height = 43, + shift = util.by_pixel(0, -4), + hr_version = { + width = 92, + height = 80, + shift = util.by_pixel(1, -3), + scale = 0.5 + }, + }, + shadow = { + width = 109, + height = 61, + shift = util.by_pixel(48, 4), + hr_version = { + width = 218, + height = 120, + shift = util.by_pixel(48, 4), + scale = 0.5 + }, + }, + leaves = { + width = 99, + height = 91, + shift = util.by_pixel(-2, -42), + hr_version = { + width = 198, + height = 178, + shift = util.by_pixel(-1, -41), + scale = 0.5 + }, + }, + normal = { + width = 96, + height = 68, + shift = util.by_pixel(-3, -51), + hr_version = { + width = 190, + height = 136, + shift = util.by_pixel(-3.5, -50.5), + scale = 0.5 + }, + }, + }, + { -- j + trunk = { + width = 51, + height = 95, + shift = util.by_pixel(6, -34), + hr_version = { + width = 100, + height = 188, + shift = util.by_pixel(6, -34), + scale = 0.5 + }, + }, + stump = { + width = 29, + height = 27, + shift = util.by_pixel(-2, 0), + hr_version = { + width = 58, + height = 52, + shift = util.by_pixel(-2, 0), + scale = 0.5 + }, + }, + shadow = { + width = 89, + height = 55, + shift = util.by_pixel(38, -2), + hr_version = { + width = 178, + height = 110, + shift = util.by_pixel(39, -2), + scale = 0.5 + }, + }, + leaves = { + width = 57, + height = 85, + shift = util.by_pixel(6, -44), + hr_version = { + width = 112, + height = 166, + shift = util.by_pixel(6, -43), + scale = 0.5 + }, + }, + normal = { + width = 58, + height = 68, + shift = util.by_pixel(7, -51), + hr_version = { + width = 114, + height = 136, + shift = util.by_pixel(6.5, -50.5), + scale = 0.5 + }, + }, + }, + { -- k + trunk = { + width = 47, + height = 69, + shift = util.by_pixel(8, -24), + hr_version = { + width = 92, + height = 134, + shift = util.by_pixel(8, -23), + scale = 0.5 + }, + }, + stump = { + width = 27, + height = 25, + shift = util.by_pixel(-2, -2), + hr_version = { + width = 52, + height = 46, + shift = util.by_pixel(-2, -1), + scale = 0.5 + }, + }, + shadow = { + width = 85, + height = 35, + shift = util.by_pixel(38, 2), + hr_version = { + width = 170, + height = 66, + shift = util.by_pixel(38, 3), + scale = 0.5 + }, + }, + leaves = { + width = 69, + height = 63, + shift = util.by_pixel(4, -32), + hr_version = { + width = 140, + height = 126, + shift = util.by_pixel(4, -32), + scale = 0.5 + }, + }, + normal = { + width = 72, + height = 54, + shift = util.by_pixel(5, -36), + hr_version = { + width = 140, + height = 104, + shift = util.by_pixel(4.5, -36.5), + scale = 0.5 + }, + }, + }, + { -- l + trunk = { + width = 59, + height = 85, + shift = util.by_pixel(-10, -30), + hr_version = { + width = 112, + height = 166, + shift = util.by_pixel(-9, -29), + scale = 0.5 + }, + }, + stump = { + width = 33, + height = 25, + shift = util.by_pixel(2, 0), + hr_version = { + width = 62, + height = 50, + shift = util.by_pixel(3, 0), + scale = 0.5 + }, + }, + shadow = { + width = 73, + height = 47, + shift = util.by_pixel(30, -6), + hr_version = { + width = 142, + height = 90, + shift = util.by_pixel(31, -5), + scale = 0.5 + }, + }, + leaves = { + width = 79, + height = 71, + shift = util.by_pixel(-14, -42), + hr_version = { + width = 154, + height = 142, + shift = util.by_pixel(-13, -42), + scale = 0.5 + }, + }, + normal = { + width = 78, + height = 62, + shift = util.by_pixel(-12, -46), + hr_version = { + width = 154, + height = 122, + shift = util.by_pixel(-12.5, -46), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-04 + --addHere-tree04 -- "mahogany" + type_name = "04", + locale = "mahogangy", + drawing_box = {{-0.9, -3.9}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/04/tree-04-reflection.png", + priority = "extra-high", + width = 32, + height = 40, + shift = util.by_pixel(5, 65), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-04 + { -- a + trunk = + { + width = 86, + height = 160, + shift = util.by_pixel(-4, -60), + hr_version = + { + width = 174, + height = 316, + shift = util.by_pixel(-4, -58), + scale = 0.5 + } + }, + stump = + { + width = 56, + height = 50, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 112, + height = 94, + shift = util.by_pixel(3, -2), + scale = 0.5 + } + }, + shadow = + { + width = 160, + height = 66, + shift = util.by_pixel(64, -6), + hr_version = + { + width = 318, + height = 130, + shift = util.by_pixel(65, -5), + scale = 0.5 + } + }, + leaves = + { + width = 108, + height = 154, + shift = util.by_pixel(-4, -68), + hr_version = + { + width = 216, + height = 314, + shift = util.by_pixel(-3, -67), + scale = 0.5 + } + }, + normal = + { + width = 110, + height = 124, + shift = util.by_pixel(-2, -82), + hr_version = + { + width = 218, + height = 248, + shift = util.by_pixel(-2.5, -82), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 72, + height = 166, + shift = util.by_pixel(4, -60), + hr_version = + { + width = 142, + height = 334, + shift = util.by_pixel(5, -60), + scale = 0.5 + } + }, + stump = + { + width = 60, + height = 46, + shift = util.by_pixel(-2, 0), + hr_version = + { + width = 118, + height = 94, + shift = util.by_pixel(-1, 0), + scale = 0.5 + } + }, + shadow = + { + width = 154, + height = 78, + shift = util.by_pixel(68, -4), + hr_version = + { + width = 308, + height = 154, + shift = util.by_pixel(68, -3), + scale = 0.5 + } + }, + leaves = + { + width = 92, + height = 146, + shift = util.by_pixel(4, -74), + hr_version = + { + width = 184, + height = 302, + shift = util.by_pixel(4, -72), + scale = 0.5 + } + }, + normal = + { + width = 94, + height = 124, + shift = util.by_pixel(5, -84), + hr_version = + { + width = 186, + height = 246, + shift = util.by_pixel(5, -84.5), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 88, + height = 162, + shift = util.by_pixel(4, -60), + hr_version = + { + width = 176, + height = 328, + shift = util.by_pixel(4, -60), + scale = 0.5 + } + }, + stump = + { + width = 56, + height = 44, + shift = util.by_pixel(-4, 0), + hr_version = + { + width = 108, + height = 88, + shift = util.by_pixel(-3, 0), + scale = 0.5 + } + }, + shadow = + { + width = 158, + height = 70, + shift = util.by_pixel(66, 0), + hr_version = + { + width = 312, + height = 134, + shift = util.by_pixel(67, 2), + scale = 0.5 + } + }, + leaves = + { + width = 104, + height = 164, + shift = util.by_pixel(2, -66), + hr_version = + { + width = 208, + height = 324, + shift = util.by_pixel(2, -64), + scale = 0.5 + } + }, + normal = + { + width = 106, + height = 134, + shift = util.by_pixel(3, -77), + hr_version = + { + width = 208, + height = 268, + shift = util.by_pixel(2.5, -77), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 108, + height = 132, + shift = util.by_pixel(2, -48), + hr_version = + { + width = 216, + height = 266, + shift = util.by_pixel(2, -48), + scale = 0.5 + } + }, + stump = + { + width = 48, + height = 40, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 96, + height = 82, + shift = util.by_pixel(1, -2), + scale = 0.5 + } + }, + shadow = + { + width = 158, + height = 78, + shift = util.by_pixel(70, 0), + hr_version = + { + width = 320, + height = 158, + shift = util.by_pixel(69, 0), + scale = 0.5 + } + }, + leaves = + { + width = 114, + height = 148, + shift = util.by_pixel(-6, -66), + hr_version = + { + width = 230, + height = 290, + shift = util.by_pixel(-6, -64), + scale = 0.5 + } + }, + normal = + { + width = 116, + height = 126, + shift = util.by_pixel(-5, -74), + hr_version = + { + width = 230, + height = 250, + shift = util.by_pixel(-5, -74), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 80, + height = 164, + shift = util.by_pixel(-10, -64), + hr_version = + { + width = 158, + height = 324, + shift = util.by_pixel(-9, -62), + scale = 0.5 + } + }, + stump = + { + width = 52, + height = 42, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 102, + height = 84, + shift = util.by_pixel(1, -2), + scale = 0.5 + } + }, + shadow = + { + width = 138, + height = 88, + shift = util.by_pixel(60, -4), + hr_version = + { + width = 274, + height = 170, + shift = util.by_pixel(61, -2), + scale = 0.5 + } + }, + leaves = + { + width = 110, + height = 138, + shift = util.by_pixel(-4, -84), + hr_version = + { + width = 222, + height = 280, + shift = util.by_pixel(-4, -84), + scale = 0.5 + } + }, + normal = + { + width = 112, + height = 130, + shift = util.by_pixel(-3, -88), + hr_version = + { + width = 222, + height = 256, + shift = util.by_pixel(-3, -88.5), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 96, + height = 164, + shift = util.by_pixel(4, -62), + hr_version = + { + width = 194, + height = 332, + shift = util.by_pixel(4, -62), + scale = 0.5 + } + }, + stump = + { + width = 48, + height = 40, + shift = util.by_pixel(-2, 0), + hr_version = + { + width = 100, + height = 84, + shift = util.by_pixel(-2, 0), + scale = 0.5 + } + }, + shadow = + { + width = 168, + height = 78, + shift = util.by_pixel(70, -4), + hr_version = + { + width = 332, + height = 156, + shift = util.by_pixel(72, -4), + scale = 0.5 + } + }, + leaves = + { + width = 112, + height = 134, + shift = util.by_pixel(10, -82), + hr_version = + { + width = 224, + height = 272, + shift = util.by_pixel(11, -82), + scale = 0.5 + } + }, + normal = + { + width = 112, + height = 122, + shift = util.by_pixel(13, -87), + hr_version = + { + width = 222, + height = 244, + shift = util.by_pixel(12.5, -87), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 92, + height = 142, + shift = util.by_pixel(-14, -54), + hr_version = + { + width = 178, + height = 282, + shift = util.by_pixel(-12, -53), + scale = 0.5 + } + }, + stump = + { + width = 46, + height = 42, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 94, + height = 86, + shift = util.by_pixel(0, -4), + scale = 0.5 + } + }, + shadow = + { + width = 148, + height = 72, + shift = util.by_pixel(56, -8), + hr_version = + { + width = 296, + height = 144, + shift = util.by_pixel(56, -7), + scale = 0.5 + } + }, + leaves = + { + width = 112, + height = 130, + shift = util.by_pixel(-12, -76), + hr_version = + { + width = 222, + height = 258, + shift = util.by_pixel(-11, -75), + scale = 0.5 + } + }, + normal = + { + width = 112, + height = 110, + shift = util.by_pixel(-10, -84), + hr_version = + { + width = 222, + height = 220, + shift = util.by_pixel(-10.5, -83.5), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 64, + height = 144, + shift = util.by_pixel(-2, -54), + hr_version = + { + width = 128, + height = 284, + shift = util.by_pixel(-2, -53), + scale = 0.5 + } + }, + stump = + { + width = 48, + height = 46, + shift = util.by_pixel(2, -6), + hr_version = + { + width = 96, + height = 92, + shift = util.by_pixel(2, -5), + scale = 0.5 + } + }, + shadow = + { + width = 148, + height = 74, + shift = util.by_pixel(66, -8), + hr_version = + { + width = 292, + height = 152, + shift = util.by_pixel(67, -8), + scale = 0.5 + } + }, + leaves = + { + width = 100, + height = 142, + shift = util.by_pixel(8, -60), + hr_version = + { + width = 202, + height = 280, + shift = util.by_pixel(8, -57), + scale = 0.5 + } + }, + normal = + { + width = 102, + height = 102, + shift = util.by_pixel(8, -76), + hr_version = + { + width = 204, + height = 202, + shift = util.by_pixel(8.5, -76), + scale = 0.5 + } + }, + }, + { -- i + trunk = + { + width = 48, + height = 122, + shift = util.by_pixel(6, -46), + hr_version = + { + width = 92, + height = 246, + shift = util.by_pixel(7, -46), + scale = 0.5 + } + }, + stump = + { + width = 42, + height = 34, + shift = util.by_pixel(2, -2), + hr_version = + { + width = 82, + height = 68, + shift = util.by_pixel(3, -2), + scale = 0.5 + } + }, + shadow = + { + width = 124, + height = 66, + shift = util.by_pixel(56, 6), + hr_version = + { + width = 244, + height = 128, + shift = util.by_pixel(57, 7), + scale = 0.5 + } + }, + leaves = + { + width = 70, + height = 122, + shift = util.by_pixel(6, -52), + hr_version = + { + width = 140, + height = 240, + shift = util.by_pixel(6, -50), + scale = 0.5 + } + }, + normal = + { + width = 70, + height = 104, + shift = util.by_pixel(7, -57), + hr_version = + { + width = 138, + height = 206, + shift = util.by_pixel(7, -57), + scale = 0.5 + } + }, + }, + { -- j + trunk = + { + width = 48, + height = 120, + shift = util.by_pixel(-8, -48), + hr_version = + { + width = 98, + height = 238, + shift = util.by_pixel(-8, -47), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 32, + shift = util.by_pixel(-4, -4), + hr_version = + { + width = 78, + height = 66, + shift = util.by_pixel(-3, -4), + scale = 0.5 + } + }, + shadow = + { + width = 116, + height = 64, + shift = util.by_pixel(46, -8), + hr_version = + { + width = 228, + height = 122, + shift = util.by_pixel(47, -6), + scale = 0.5 + } + }, + leaves = + { + width = 70, + height = 128, + shift = util.by_pixel(-8, -56), + hr_version = + { + width = 140, + height = 254, + shift = util.by_pixel(-8, -55), + scale = 0.5 + } + }, + normal = + { + width = 70, + height = 106, + shift = util.by_pixel(-7, -65), + hr_version = + { + width = 140, + height = 210, + shift = util.by_pixel(-7, -65), + scale = 0.5 + } + }, + }, + { -- k + trunk = + { + width = 204, + height = 80, + shift = util.by_pixel(-16, -12), + hr_version = + { + width = 406, + height = 158, + shift = util.by_pixel(-15, -11), + scale = 0.5 + } + }, + stump = + { + width = 50, + height = 56, + shift = util.by_pixel(18, -4), + hr_version = + { + width = 104, + height = 108, + shift = util.by_pixel(18, -2), + scale = 0.5 + } + }, + shadow = + { + width = 208, + height = 62, + shift = util.by_pixel(-8, -8), + hr_version = + { + width = 410, + height = 124, + shift = util.by_pixel(-6, -8), + scale = 0.5 + } + }, + leaves = + { + width = 208, + height = 80, + shift = util.by_pixel(-20, -22), + hr_version = + { + width = 414, + height = 164, + shift = util.by_pixel(-19, -19), + scale = 0.5 + } + }, + normal = + { + width = 134, + height = 72, + shift = util.by_pixel(-55, -22), + hr_version = + { + width = 266, + height = 144, + shift = util.by_pixel(-55, -22), + scale = 0.5 + } + }, + }, + { -- l + trunk = + { + width = 156, + height = 126, + shift = util.by_pixel(4, -4), + hr_version = + { + width = 312, + height = 250, + shift = util.by_pixel(4, -3), + scale = 0.5 + } + }, + stump = + { + width = 56, + height = 48, + shift = util.by_pixel(-12, -16), + hr_version = + { + width = 108, + height = 92, + shift = util.by_pixel(-10, -15), + scale = 0.5 + } + }, + shadow = + { + width = 180, + height = 126, + shift = util.by_pixel(26, 6), + hr_version = + { + width = 366, + height = 250, + shift = util.by_pixel(25, 7), + scale = 0.5 + } + }, + leaves = + { + width = 156, + height = 118, + shift = util.by_pixel(10, 2), + hr_version = + { + width = 314, + height = 240, + shift = util.by_pixel(10, 1), + scale = 0.5 + } + }, + normal = + { + width = 110, + height = 94, + shift = util.by_pixel(35, 15), + hr_version = + { + width = 218, + height = 186, + shift = util.by_pixel(35, 15), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-05 + --addHere-tree05 - "maple" + type_name = "05", + locale = "maypaple", + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/05/tree-05-reflection.png", + priority = "extra-high", + width = 32, + height = 36, + shift = util.by_pixel(5, 60), + y = 36 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-05 + { -- a + trunk = { + width = 74, + height = 120, + shift = util.by_pixel(12, -44), + hr_version = { + width = 144, + height = 242, + shift = util.by_pixel(13, -45), + scale = 0.5 + }, + }, + stump = { + width = 46, + height = 32, + shift = util.by_pixel(-2, 0), + hr_version = { + width = 88, + height = 64, + shift = util.by_pixel(-1, 0), + scale = 0.5 + }, + }, + shadow = { + width = 160, + height = 76, + shift = util.by_pixel(62, -8), + hr_version = { + width = 322, + height = 150, + shift = util.by_pixel(62, -8), + scale = 0.5 + }, + }, + leaves = { + width = 116, + height = 130, + shift = util.by_pixel(6, -60), + hr_version = { + width = 234, + height = 258, + shift = util.by_pixel(5, -60), + scale = 0.5 + }, + }, + normal = { + width = 118, + height = 108, + shift = util.by_pixel(6, -71), + hr_version = { + width = 234, + height = 216, + shift = util.by_pixel(6, -71), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 60, + height = 114, + shift = util.by_pixel(0, -40), + hr_version = { + width = 114, + height = 226, + shift = util.by_pixel(1, -40), + scale = 0.5 + }, + }, + stump = { + width = 38, + height = 34, + shift = util.by_pixel(0, 0), + hr_version = { + width = 78, + height = 68, + shift = util.by_pixel(-1, 0), + scale = 0.5 + }, + }, + shadow = { + width = 146, + height = 82, + shift = util.by_pixel(58, 2), + hr_version = { + width = 290, + height = 166, + shift = util.by_pixel(58, 1), + scale = 0.5 + }, + }, + leaves = { + width = 112, + height = 122, + shift = util.by_pixel(6, -60), + hr_version = { + width = 222, + height = 242, + shift = util.by_pixel(6, -60), + scale = 0.5 + }, + }, + normal = { + width = 112, + height = 106, + shift = util.by_pixel(6, -68), + hr_version = { + width = 222, + height = 212, + shift = util.by_pixel(6, -67.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 60, + height = 138, + shift = util.by_pixel(-10, -54), + hr_version = { + width = 122, + height = 276, + shift = util.by_pixel(-10, -54), + scale = 0.5 + }, + }, + stump = { + width = 40, + height = 34, + shift = util.by_pixel(0, -2), + hr_version = { + width = 84, + height = 64, + shift = util.by_pixel(-1, -1), + scale = 0.5 + }, + }, + shadow = { + width = 136, + height = 84, + shift = util.by_pixel(52, 2), + hr_version = { + width = 272, + height = 162, + shift = util.by_pixel(52, 3), + scale = 0.5 + }, + }, + leaves = { + width = 112, + height = 148, + shift = util.by_pixel(-2, -66), + hr_version = { + width = 224, + height = 290, + shift = util.by_pixel(-2, -65), + scale = 0.5 + }, + }, + normal = { + width = 112, + height = 128, + shift = util.by_pixel(-2, -74), + hr_version = { + width = 224, + height = 256, + shift = util.by_pixel(-2, -74), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 60, + height = 122, + shift = util.by_pixel(4, -44), + hr_version = { + width = 120, + height = 244, + shift = util.by_pixel(4, -44), + scale = 0.5 + }, + }, + stump = { + width = 42, + height = 36, + shift = util.by_pixel(0, 0), + hr_version = { + width = 78, + height = 70, + shift = util.by_pixel(1, 0), + scale = 0.5 + }, + }, + shadow = { + width = 140, + height = 84, + shift = util.by_pixel(54, -2), + hr_version = { + width = 278, + height = 168, + shift = util.by_pixel(54, -2), + scale = 0.5 + }, + }, + leaves = { + width = 100, + height = 124, + shift = util.by_pixel(6, -60), + hr_version = { + width = 202, + height = 244, + shift = util.by_pixel(5, -59), + scale = 0.5 + }, + }, + normal = { + width = 100, + height = 104, + shift = util.by_pixel(6, -67), + hr_version = { + width = 200, + height = 208, + shift = util.by_pixel(6, -67), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 54, + height = 118, + shift = util.by_pixel(0, -44), + hr_version = { + width = 106, + height = 232, + shift = util.by_pixel(0, -43), + scale = 0.5 + }, + }, + stump = { + width = 40, + height = 34, + shift = util.by_pixel(0, -2), + hr_version = { + width = 80, + height = 64, + shift = util.by_pixel(0, -1), + scale = 0.5 + }, + }, + shadow = { + width = 136, + height = 72, + shift = util.by_pixel(52, 2), + hr_version = { + width = 268, + height = 144, + shift = util.by_pixel(53, 2), + scale = 0.5 + }, + }, + leaves = { + width = 118, + height = 126, + shift = util.by_pixel(-2, -58), + hr_version = { + width = 236, + height = 250, + shift = util.by_pixel(-2, -57), + scale = 0.5 + }, + }, + normal = { + width = 118, + height = 104, + shift = util.by_pixel(-2, -66), + hr_version = { + width = 236, + height = 206, + shift = util.by_pixel(-2, -66.5), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 58, + height = 120, + shift = util.by_pixel(-10, -44), + hr_version = { + width = 112, + height = 236, + shift = util.by_pixel(-9, -43), + scale = 0.5 + }, + }, + stump = { + width = 38, + height = 36, + shift = util.by_pixel(0, -2), + hr_version = { + width = 80, + height = 68, + shift = util.by_pixel(-1, -1), + scale = 0.5 + }, + }, + shadow = { + width = 136, + height = 86, + shift = util.by_pixel(52, -2), + hr_version = { + width = 272, + height = 168, + shift = util.by_pixel(52, -1), + scale = 0.5 + }, + }, + leaves = { + width = 98, + height = 126, + shift = util.by_pixel(-4, -54), + hr_version = { + width = 194, + height = 252, + shift = util.by_pixel(-4, -54), + scale = 0.5 + }, + }, + normal = { + width = 98, + height = 106, + shift = util.by_pixel(-3, -64), + hr_version = { + width = 194, + height = 212, + shift = util.by_pixel(-3.5, -64), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 44, + height = 108, + shift = util.by_pixel(0, -40), + hr_version = { + width = 86, + height = 214, + shift = util.by_pixel(0, -40), + scale = 0.5 + }, + }, + stump = { + width = 32, + height = 40, + shift = util.by_pixel(0, -6), + hr_version = { + width = 64, + height = 74, + shift = util.by_pixel(0, -5), + scale = 0.5 + }, + }, + shadow = { + width = 120, + height = 84, + shift = util.by_pixel(42, -6), + hr_version = { + width = 238, + height = 164, + shift = util.by_pixel(42, -5), + scale = 0.5 + }, + }, + leaves = { + width = 90, + height = 112, + shift = util.by_pixel(0, -52), + hr_version = { + width = 178, + height = 220, + shift = util.by_pixel(0, -51), + scale = 0.5 + }, + }, + normal = { + width = 88, + height = 108, + shift = util.by_pixel(1, -51), + hr_version = { + width = 176, + height = 216, + shift = util.by_pixel(1, -51), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 74, + height = 108, + shift = util.by_pixel(6, -40), + hr_version = { + width = 144, + height = 212, + shift = util.by_pixel(7, -39), + scale = 0.5 + }, + }, + stump = { + width = 36, + height = 36, + shift = util.by_pixel(0, -4), + hr_version = { + width = 72, + height = 76, + shift = util.by_pixel(0, -5), + scale = 0.5 + }, + }, + shadow = { + width = 134, + height = 62, + shift = util.by_pixel(50, 0), + hr_version = { + width = 270, + height = 122, + shift = util.by_pixel(49, 0), + scale = 0.5 + }, + }, + leaves = { + width = 114, + height = 100, + shift = util.by_pixel(6, -48), + hr_version = { + width = 228, + height = 196, + shift = util.by_pixel(6, -47), + scale = 0.5 + }, + }, + normal = { + width = 114, + height = 88, + shift = util.by_pixel(6, -51), + hr_version = { + width = 228, + height = 174, + shift = util.by_pixel(6.5, -51), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 34, + height = 92, + shift = util.by_pixel(-2, -34), + hr_version = { + width = 70, + height = 184, + shift = util.by_pixel(-3, -34), + scale = 0.5 + }, + }, + stump = { + width = 30, + height = 32, + shift = util.by_pixel(0, -4), + hr_version = { + width = 58, + height = 60, + shift = util.by_pixel(0, -3), + scale = 0.5 + }, + }, + shadow = { + width = 108, + height = 62, + shift = util.by_pixel(40, -4), + hr_version = { + width = 214, + height = 118, + shift = util.by_pixel(40, -3), + scale = 0.5 + }, + }, + leaves = { + width = 84, + height = 102, + shift = util.by_pixel(-6, -46), + hr_version = { + width = 166, + height = 200, + shift = util.by_pixel(-5, -45), + scale = 0.5 + }, + }, + normal = { + width = 84, + height = 84, + shift = util.by_pixel(-5, -53), + hr_version = { + width = 166, + height = 166, + shift = util.by_pixel(-5, -53.5), + scale = 0.5 + }, + }, + }, + { -- j + trunk = { + width = 36, + height = 84, + shift = util.by_pixel(2, -30), + hr_version = { + width = 66, + height = 162, + shift = util.by_pixel(3, -29), + scale = 0.5 + }, + }, + stump = { + width = 30, + height = 32, + shift = util.by_pixel(0, -4), + hr_version = { + width = 56, + height = 62, + shift = util.by_pixel(1, -4), + scale = 0.5 + }, + }, + shadow = { + width = 98, + height = 66, + shift = util.by_pixel(40, 0), + hr_version = { + width = 192, + height = 126, + shift = util.by_pixel(41, 1), + scale = 0.5 + }, + }, + leaves = { + width = 74, + height = 94, + shift = util.by_pixel(0, -42), + hr_version = { + width = 142, + height = 184, + shift = util.by_pixel(1, -41), + scale = 0.5 + }, + }, + normal = { + width = 72, + height = 82, + shift = util.by_pixel(1, -45), + hr_version = { + width = 144, + height = 164, + shift = util.by_pixel(1.5, -45), + scale = 0.5 + }, + }, + }, + { -- k + trunk = { + width = 140, + height = 90, + shift = util.by_pixel(-18, 8), + hr_version = { + width = 274, + height = 176, + shift = util.by_pixel(-17, 9), + scale = 0.5 + }, + }, + stump = { + width = 56, + height = 46, + shift = util.by_pixel(24, -14), + hr_version = { + width = 110, + height = 88, + shift = util.by_pixel(24, -13), + scale = 0.5 + }, + }, + shadow = { + width = 140, + height = 80, + shift = util.by_pixel(-14, 12), + hr_version = { + width = 276, + height = 160, + shift = util.by_pixel(-13, 12), + scale = 0.5 + }, + }, + leaves = { + width = 120, + height = 84, + shift = util.by_pixel(-30, 6), + hr_version = { + width = 234, + height = 162, + shift = util.by_pixel(-29, 7), + scale = 0.5 + }, + }, + normal = { + width = 86, + height = 76, + shift = util.by_pixel(-45, 9), + hr_version = { + width = 170, + height = 152, + shift = util.by_pixel(-45, 9.5), + scale = 0.5 + }, + }, + }, + { -- l + trunk = { + width = 124, + height = 94, + shift = util.by_pixel(16, -22), + hr_version = { + width = 252, + height = 186, + shift = util.by_pixel(15, -22), + scale = 0.5 + }, + }, + stump = { + width = 54, + height = 34, + shift = util.by_pixel(-22, 8), + hr_version = { + width = 104, + height = 70, + shift = util.by_pixel(-21, 7), + scale = 0.5 + }, + }, + shadow = { + width = 128, + height = 94, + shift = util.by_pixel(22, -18), + hr_version = { + width = 258, + height = 186, + shift = util.by_pixel(21, -18), + scale = 0.5 + }, + }, + leaves = { + width = 124, + height = 82, + shift = util.by_pixel(16, -30), + hr_version = { + width = 252, + height = 164, + shift = util.by_pixel(15, -30), + scale = 0.5 + }, + }, + normal = { + width = 80, + height = 74, + shift = util.by_pixel(35, -34), + hr_version = { + width = 158, + height = 146, + shift = util.by_pixel(34.5, -34.5), + scale = 0.5 + }, + }, + }, + } + }, + { -- tree-06 + --addHere-tree06 -- "wyliki" + type_name = "06", + locale = "wyliki", + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/06/tree-06-reflection.png", + priority = "extra-high", + width = 28, + height = 32, + shift = util.by_pixel(-5, 35), + x = 28 * variation, + variation_count = 1, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-06 + { -- a + trunk = { + width = 72, + height = 134, + shift = util.by_pixel(6, -40), + hr_version = { + width = 140, + height = 268, + shift = util.by_pixel(7, -40), + scale = 0.5 + }, + }, + stump = { + width = 60, + height = 62, + shift = util.by_pixel(0, -4), + hr_version = { + width = 118, + height = 120, + shift = util.by_pixel(0, -3), + scale = 0.5 + }, + }, + shadow = { + width = 170, + height = 76, + shift = util.by_pixel(64, 0), + hr_version = { + width = 338, + height = 148, + shift = util.by_pixel(64, 1), + scale = 0.5 + }, + }, + leaves = { + width = 68, + height = 98, + shift = util.by_pixel(10, -50), + hr_version = { + width = 132, + height = 196, + shift = util.by_pixel(11, -50), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 84, + height = 124, + shift = util.by_pixel(8, -26), + hr_version = { + width = 168, + height = 248, + shift = util.by_pixel(8, -26), + scale = 0.5 + }, + }, + stump = { + width = 62, + height = 68, + shift = util.by_pixel(0, 2), + hr_version = { + width = 124, + height = 132, + shift = util.by_pixel(0, 3), + scale = 0.5 + }, + }, + shadow = { + width = 174, + height = 58, + shift = util.by_pixel(68, 12), + hr_version = { + width = 352, + height = 116, + shift = util.by_pixel(67, 12), + scale = 0.5 + }, + }, + leaves = { + width = 84, + height = 94, + shift = util.by_pixel(10, -40), + hr_version = { + width = 172, + height = 186, + shift = util.by_pixel(9, -40), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 100, + height = 106, + shift = util.by_pixel(0, -16), + hr_version = { + width = 198, + height = 208, + shift = util.by_pixel(0, -15), + scale = 0.5 + }, + }, + stump = { + width = 62, + height = 58, + shift = util.by_pixel(-4, 8), + hr_version = { + width = 122, + height = 116, + shift = util.by_pixel(-3, 8), + scale = 0.5 + }, + }, + shadow = { + width = 174, + height = 50, + shift = util.by_pixel(66, 16), + hr_version = { + width = 352, + height = 98, + shift = util.by_pixel(65, 16), + scale = 0.5 + }, + }, + leaves = { + width = 92, + height = 80, + shift = util.by_pixel(2, -28), + hr_version = { + width = 178, + height = 162, + shift = util.by_pixel(3, -29), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 74, + height = 124, + shift = util.by_pixel(-16, -22), + hr_version = { + width = 148, + height = 244, + shift = util.by_pixel(-16, -21), + scale = 0.5 + }, + }, + stump = { + width = 60, + height = 64, + shift = util.by_pixel(-6, 8), + hr_version = { + width = 120, + height = 128, + shift = util.by_pixel(-6, 8), + scale = 0.5 + }, + }, + shadow = { + width = 152, + height = 68, + shift = util.by_pixel(44, 14), + hr_version = { + width = 308, + height = 130, + shift = util.by_pixel(43, 15), + scale = 0.5 + }, + }, + leaves = { + width = 74, + height = 92, + shift = util.by_pixel(-14, -40), + hr_version = { + width = 150, + height = 180, + shift = util.by_pixel(-15, -39), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 76, + height = 134, + shift = util.by_pixel(-14, -32), + hr_version = { + width = 154, + height = 270, + shift = util.by_pixel(-15, -33), + scale = 0.5 + }, + }, + stump = { + width = 64, + height = 54, + shift = util.by_pixel(-8, 8), + hr_version = { + width = 126, + height = 106, + shift = util.by_pixel(-8, 8), + scale = 0.5 + }, + }, + shadow = { + width = 124, + height = 76, + shift = util.by_pixel(26, 6), + hr_version = { + width = 248, + height = 146, + shift = util.by_pixel(26, 7), + scale = 0.5 + }, + }, + leaves = { + width = 68, + height = 114, + shift = util.by_pixel(-18, -48), + hr_version = { + width = 136, + height = 226, + shift = util.by_pixel(-18, -48), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 90, + height = 136, + shift = util.by_pixel(-16, -38), + hr_version = { + width = 184, + height = 268, + shift = util.by_pixel(-17, -37), + scale = 0.5 + }, + }, + stump = { + width = 62, + height = 60, + shift = util.by_pixel(-10, 0), + hr_version = { + width = 122, + height = 120, + shift = util.by_pixel(-10, 0), + scale = 0.5 + }, + }, + shadow = { + width = 162, + height = 54, + shift = util.by_pixel(42, -4), + hr_version = { + width = 326, + height = 110, + shift = util.by_pixel(42, -5), + scale = 0.5 + }, + }, + leaves = { + width = 88, + height = 114, + shift = util.by_pixel(-18, -48), + hr_version = { + width = 180, + height = 230, + shift = util.by_pixel(-19, -49), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 100, + height = 132, + shift = util.by_pixel(-10, -36), + hr_version = { + width = 194, + height = 266, + shift = util.by_pixel(-9, -36), + scale = 0.5 + }, + }, + stump = { + width = 64, + height = 64, + shift = util.by_pixel(-8, -2), + hr_version = { + width = 122, + height = 126, + shift = util.by_pixel(-7, -1), + scale = 0.5 + }, + }, + shadow = { + width = 180, + height = 52, + shift = util.by_pixel(54, -8), + hr_version = { + width = 354, + height = 100, + shift = util.by_pixel(55, -7), + scale = 0.5 + }, + }, + leaves = { + width = 92, + height = 116, + shift = util.by_pixel(-10, -48), + hr_version = { + width = 178, + height = 228, + shift = util.by_pixel(-9, -47), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 86, + height = 130, + shift = util.by_pixel(4, -36), + hr_version = { + width = 166, + height = 258, + shift = util.by_pixel(5, -36), + scale = 0.5 + }, + }, + stump = { + width = 66, + height = 58, + shift = util.by_pixel(-6, 0), + hr_version = { + width = 128, + height = 114, + shift = util.by_pixel(-5, 0), + scale = 0.5 + }, + }, + shadow = { + width = 160, + height = 76, + shift = util.by_pixel(56, -8), + hr_version = { + width = 320, + height = 146, + shift = util.by_pixel(56, -7), + scale = 0.5 + }, + }, + leaves = { + width = 74, + height = 96, + shift = util.by_pixel(12, -46), + hr_version = { + width = 144, + height = 190, + shift = util.by_pixel(13, -46), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 74, + height = 118, + shift = util.by_pixel(-14, -20), + hr_version = { + width = 152, + height = 238, + shift = util.by_pixel(-14, -21), + scale = 0.5 + }, + }, + stump = { + width = 70, + height = 66, + shift = util.by_pixel(-12, 6), + hr_version = { + width = 144, + height = 126, + shift = util.by_pixel(-12, 7), + scale = 0.5 + }, + }, + shadow = { + width = 116, + height = 76, + shift = util.by_pixel(18, 12), + hr_version = { + width = 228, + height = 148, + shift = util.by_pixel(19, 13), + scale = 0.5 + }, + }, + leaves = { + width = 64, + height = 92, + shift = util.by_pixel(-18, -36), + hr_version = { + width = 132, + height = 186, + shift = util.by_pixel(-19, -37), + scale = 0.5 + }, + }, + }, + { -- j + trunk = { + width = 72, + height = 116, + shift = util.by_pixel(-12, -22), + hr_version = { + width = 142, + height = 232, + shift = util.by_pixel(-12, -22), + scale = 0.5 + }, + }, + stump = { + width = 68, + height = 60, + shift = util.by_pixel(-10, 6), + hr_version = { + width = 134, + height = 116, + shift = util.by_pixel(-10, 7), + scale = 0.5 + }, + }, + shadow = { + width = 128, + height = 76, + shift = util.by_pixel(26, 8), + hr_version = { + width = 256, + height = 148, + shift = util.by_pixel(26, 9), + scale = 0.5 + }, + }, + leaves = { + width = 66, + height = 92, + shift = util.by_pixel(-14, -38), + hr_version = { + width = 134, + height = 182, + shift = util.by_pixel(-15, -38), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-07 + --addHere-tree07 -- "cedar" + type_name = "07", + locale = "cednar", + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/07/tree-07-reflection.png", + priority = "extra-high", + width = 40, + height = 40, + shift = util.by_pixel(0, 65), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-07 + { -- a + trunk = + { + width = 86, + height = 160, + shift = util.by_pixel(-2, -60), + hr_version = + { + width = 174, + height = 320, + shift = util.by_pixel(-2, -60), + scale = 0.5 + } + }, + stump = + { + width = 44, + height = 46, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 88, + height = 88, + shift = util.by_pixel(0, -2), + scale = 0.5 + } + }, + shadow = + { + width = 174, + height = 98, + shift = util.by_pixel(64, -12), + hr_version = + { + width = 350, + height = 190, + shift = util.by_pixel(64, -10), + scale = 0.5 + } + }, + leaves = + { + width = 122, + height = 166, + shift = util.by_pixel(2, -70), + hr_version = + { + width = 244, + height = 336, + shift = util.by_pixel(2, -67), + scale = 0.5 + } + }, + normal = + { + width = 124, + height = 146, + shift = util.by_pixel(3, -78), + hr_version = + { + width = 246, + height = 290, + shift = util.by_pixel(2.5, -78.5), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 88, + height = 152, + shift = util.by_pixel(10, -58), + hr_version = + { + width = 178, + height = 306, + shift = util.by_pixel(10, -58), + scale = 0.5 + } + }, + stump = + { + width = 50, + height = 44, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 100, + height = 86, + shift = util.by_pixel(0, -3), + scale = 0.5 + } + }, + shadow = + { + width = 184, + height = 90, + shift = util.by_pixel(70, -4), + hr_version = + { + width = 368, + height = 178, + shift = util.by_pixel(71, -3), + scale = 0.5 + } + }, + leaves = + { + width = 142, + height = 148, + shift = util.by_pixel(8, -62), + hr_version = + { + width = 280, + height = 296, + shift = util.by_pixel(9, -62), + scale = 0.5 + } + }, + normal = + { + width = 142, + height = 126, + shift = util.by_pixel(10, -72), + hr_version = + { + width = 282, + height = 250, + shift = util.by_pixel(9.5, -72), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 90, + height = 152, + shift = util.by_pixel(-10, -58), + hr_version = + { + width = 180, + height = 300, + shift = util.by_pixel(-10, -57), + scale = 0.5 + } + }, + stump = + { + width = 48, + height = 44, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 98, + height = 82, + shift = util.by_pixel(1, -2), + scale = 0.5 + } + }, + shadow = + { + width = 144, + height = 86, + shift = util.by_pixel(46, -2), + hr_version = + { + width = 284, + height = 174, + shift = util.by_pixel(47, -2), + scale = 0.5 + } + }, + leaves = + { + width = 136, + height = 162, + shift = util.by_pixel(-16, -68), + hr_version = + { + width = 270, + height = 324, + shift = util.by_pixel(-15, -68), + scale = 0.5 + } + }, + normal = + { + width = 136, + height = 152, + shift = util.by_pixel(-14, -71), + hr_version = + { + width = 270, + height = 304, + shift = util.by_pixel(-14, -71), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 86, + height = 134, + shift = util.by_pixel(-2, -50), + hr_version = + { + width = 172, + height = 268, + shift = util.by_pixel(-2, -49), + scale = 0.5 + } + }, + stump = + { + width = 42, + height = 38, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 84, + height = 76, + shift = util.by_pixel(0, -1), + scale = 0.5 + } + }, + shadow = + { + width = 148, + height = 88, + shift = util.by_pixel(66, 0), + hr_version = + { + width = 290, + height = 172, + shift = util.by_pixel(68, 1), + scale = 0.5 + } + }, + leaves = + { + width = 114, + height = 142, + shift = util.by_pixel(0, -68), + hr_version = + { + width = 230, + height = 290, + shift = util.by_pixel(0, -66), + scale = 0.5 + } + }, + normal = + { + width = 116, + height = 124, + shift = util.by_pixel(1, -77), + hr_version = + { + width = 232, + height = 248, + shift = util.by_pixel(1, -76.5), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 102, + height = 144, + shift = util.by_pixel(0, -54), + hr_version = + { + width = 204, + height = 286, + shift = util.by_pixel(0, -53), + scale = 0.5 + } + }, + stump = + { + width = 44, + height = 40, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 88, + height = 78, + shift = util.by_pixel(1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 160, + height = 84, + shift = util.by_pixel(68, -2), + hr_version = + { + width = 318, + height = 166, + shift = util.by_pixel(69, -1), + scale = 0.5 + } + }, + leaves = + { + width = 122, + height = 146, + shift = util.by_pixel(2, -64), + hr_version = + { + width = 244, + height = 292, + shift = util.by_pixel(3, -63), + scale = 0.5 + } + }, + normal = + { + width = 122, + height = 120, + shift = util.by_pixel(4, -75), + hr_version = + { + width = 242, + height = 238, + shift = util.by_pixel(4, -75.5), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 100, + height = 140, + shift = util.by_pixel(-4, -54), + hr_version = + { + width = 196, + height = 280, + shift = util.by_pixel(-3, -53), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 36, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 82, + height = 76, + shift = util.by_pixel(0, -2), + scale = 0.5 + } + }, + shadow = + { + width = 136, + height = 96, + shift = util.by_pixel(56, -6), + hr_version = + { + width = 270, + height = 188, + shift = util.by_pixel(57, -5), + scale = 0.5 + } + }, + leaves = + { + width = 128, + height = 140, + shift = util.by_pixel(-6, -74), + hr_version = + { + width = 256, + height = 282, + shift = util.by_pixel(-5, -74), + scale = 0.5 + } + }, + normal = + { + width = 128, + height = 132, + shift = util.by_pixel(-4, -77), + hr_version = + { + width = 254, + height = 264, + shift = util.by_pixel(-4, -77), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 90, + height = 110, + shift = util.by_pixel(8, -40), + hr_version = + { + width = 180, + height = 218, + shift = util.by_pixel(8, -39), + scale = 0.5 + } + }, + stump = + { + width = 42, + height = 34, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 86, + height = 72, + shift = util.by_pixel(0, -2), + scale = 0.5 + } + }, + shadow = + { + width = 136, + height = 76, + shift = util.by_pixel(58, -2), + hr_version = + { + width = 266, + height = 154, + shift = util.by_pixel(60, -2), + scale = 0.5 + } + }, + leaves = + { + width = 110, + height = 128, + shift = util.by_pixel(10, -54), + hr_version = + { + width = 222, + height = 258, + shift = util.by_pixel(10, -54), + scale = 0.5 + } + }, + normal = + { + width = 112, + height = 112, + shift = util.by_pixel(11, -61), + hr_version = + { + width = 222, + height = 222, + shift = util.by_pixel(10.5, -61), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 86, + height = 126, + shift = util.by_pixel(-12, -44), + hr_version = + { + width = 166, + height = 246, + shift = util.by_pixel(-10, -42), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 40, + shift = util.by_pixel(0, -2), + hr_version = + { + width = 84, + height = 76, + shift = util.by_pixel(0, 0), + scale = 0.5 + } + }, + shadow = + { + width = 146, + height = 74, + shift = util.by_pixel(46, 0), + hr_version = + { + width = 288, + height = 146, + shift = util.by_pixel(47, 1), + scale = 0.5 + } + }, + leaves = + { + width = 114, + height = 116, + shift = util.by_pixel(-10, -56), + hr_version = + { + width = 228, + height = 242, + shift = util.by_pixel(-10, -53), + scale = 0.5 + } + }, + normal = + { + width = 114, + height = 110, + shift = util.by_pixel(-9, -57), + hr_version = + { + width = 226, + height = 218, + shift = util.by_pixel(-9, -57.5), + scale = 0.5 + } + }, + }, + { -- i + trunk = + { + width = 72, + height = 102, + shift = util.by_pixel(0, -36), + hr_version = + { + width = 142, + height = 204, + shift = util.by_pixel(1, -35), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 38, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 80, + height = 72, + shift = util.by_pixel(2, -2), + scale = 0.5 + } + }, + shadow = + { + width = 114, + height = 72, + shift = util.by_pixel(46, -2), + hr_version = + { + width = 222, + height = 140, + shift = util.by_pixel(48, -1), + scale = 0.5 + } + }, + leaves = + { + width = 92, + height = 110, + shift = util.by_pixel(-2, -56), + hr_version = + { + width = 182, + height = 218, + shift = util.by_pixel(-1, -54), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 104, + shift = util.by_pixel(-1, -56), + hr_version = + { + width = 184, + height = 206, + shift = util.by_pixel(-0.5, -56.5), + scale = 0.5 + } + }, + }, + { -- j + trunk = + { + width = 76, + height = 98, + shift = util.by_pixel(-2, -34), + hr_version = + { + width = 154, + height = 198, + shift = util.by_pixel(-2, -34), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 40, + shift = util.by_pixel(0, -6), + hr_version = + { + width = 80, + height = 80, + shift = util.by_pixel(1, -5), + scale = 0.5 + } + }, + shadow = + { + width = 130, + height = 62, + shift = util.by_pixel(52, 0), + hr_version = + { + width = 258, + height = 126, + shift = util.by_pixel(53, 0), + scale = 0.5 + } + }, + leaves = + { + width = 100, + height = 98, + shift = util.by_pixel(2, -44), + hr_version = + { + width = 200, + height = 200, + shift = util.by_pixel(2, -44), + scale = 0.5 + } + }, + normal = + { + width = 102, + height = 86, + shift = util.by_pixel(2, -50), + hr_version = + { + width = 202, + height = 170, + shift = util.by_pixel(2, -50.5), + scale = 0.5 + } + }, + }, + { -- k + trunk = + { + width = 114, + height = 136, + shift = util.by_pixel(2, -22), + hr_version = + { + width = 226, + height = 274, + shift = util.by_pixel(3, -22), + scale = 0.5 + } + }, + stump = + { + width = 62, + height = 48, + shift = util.by_pixel(-10, 10), + hr_version = + { + width = 120, + height = 96, + shift = util.by_pixel(-9, 11), + scale = 0.5 + } + }, + shadow = + { + width = 132, + height = 114, + shift = util.by_pixel(20, -14), + hr_version = + { + width = 264, + height = 230, + shift = util.by_pixel(20, -14), + scale = 0.5 + } + }, + leaves = + { + width = 100, + height = 100, + shift = util.by_pixel(16, -44), + hr_version = + { + width = 204, + height = 198, + shift = util.by_pixel(15, -43), + scale = 0.5 + } + }, + normal = + { + width = 102, + height = 92, + shift = util.by_pixel(16, -47), + hr_version = + { + width = 204, + height = 184, + shift = util.by_pixel(16, -46.5), + scale = 0.5 + } + }, + }, + { -- l + trunk = + { + width = 160, + height = 62, + shift = util.by_pixel(-28, 4), + hr_version = + { + width = 314, + height = 124, + shift = util.by_pixel(-26, 4), + scale = 0.5 + } + }, + stump = + { + width = 54, + height = 46, + shift = util.by_pixel(2, -2), + hr_version = + { + width = 104, + height = 94, + shift = util.by_pixel(3, -2), + scale = 0.5 + } + }, + shadow = + { + width = 176, + height = 80, + shift = util.by_pixel(-24, 14), + hr_version = + { + width = 354, + height = 156, + shift = util.by_pixel(-24, 15), + scale = 0.5 + } + }, + leaves = + { + width = 164, + height = 72, + shift = util.by_pixel(-32, 2), + hr_version = + { + width = 328, + height = 144, + shift = util.by_pixel(-31, 3), + scale = 0.5 + } + }, + normal = + { + width = 122, + height = 74, + shift = util.by_pixel(-51, 4), + hr_version = + { + width = 242, + height = 146, + shift = util.by_pixel(-51, 3.5), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-08 + --addHere-tree08 -- "beech" + type_name = "08", + locale = "beesh", + drawing_box = {{-0.9, -3}, {0.9, 0.6}}, + negate_tint = { r = 80, g = 77, b = 61 }, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/08/tree-08-reflection.png", + priority = "extra-high", + width = 36, + height = 40, + shift = util.by_pixel(0, 75), + y = 40 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-08 + { -- a + trunk = + { + width = 106, + height = 142, + shift = util.by_pixel(-6, -58), + hr_version = + { + width = 210, + height = 286, + shift = util.by_pixel(-5, -58), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 34, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 76, + height = 70, + shift = util.by_pixel(3, -4), + scale = 0.5 + } + }, + shadow = + { + width = 156, + height = 110, + shift = util.by_pixel(70, 2), + hr_version = + { + width = 310, + height = 222, + shift = util.by_pixel(71, 2), + scale = 0.5 + } + }, + leaves = + { + width = 130, + height = 142, + shift = util.by_pixel(-6, -78), + hr_version = + { + width = 262, + height = 282, + shift = util.by_pixel(-6, -77), + scale = 0.5 + } + }, + normal = + { + width = 130, + height = 112, + shift = util.by_pixel(-5, -91), + hr_version = + { + width = 260, + height = 222, + shift = util.by_pixel(-5, -91), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 120, + height = 138, + shift = util.by_pixel(-4, -56), + hr_version = + { + width = 238, + height = 276, + shift = util.by_pixel(-3, -55), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 36, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 76, + height = 68, + shift = util.by_pixel(1, -3), + scale = 0.5 + } + }, + shadow = + { + width = 162, + height = 90, + shift = util.by_pixel(76, -6), + hr_version = + { + width = 322, + height = 178, + shift = util.by_pixel(77, -5), + scale = 0.5 + } + }, + leaves = + { + width = 162, + height = 154, + shift = util.by_pixel(-4, -72), + hr_version = + { + width = 322, + height = 306, + shift = util.by_pixel(-3, -70), + scale = 0.5 + } + }, + normal = + { + width = 162, + height = 104, + shift = util.by_pixel(-2, -95), + hr_version = + { + width = 322, + height = 206, + shift = util.by_pixel(-2, -95), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 106, + height = 152, + shift = util.by_pixel(2, -64), + hr_version = + { + width = 210, + height = 300, + shift = util.by_pixel(3, -63), + scale = 0.5 + } + }, + stump = + { + width = 38, + height = 36, + shift = util.by_pixel(0, -6), + hr_version = + { + width = 72, + height = 66, + shift = util.by_pixel(1, -4), + scale = 0.5 + } + }, + shadow = + { + width = 166, + height = 114, + shift = util.by_pixel(70, -2), + hr_version = + { + width = 326, + height = 228, + shift = util.by_pixel(72, -2), + scale = 0.5 + } + }, + leaves = + { + width = 126, + height = 146, + shift = util.by_pixel(6, -84), + hr_version = + { + width = 252, + height = 294, + shift = util.by_pixel(6, -83), + scale = 0.5 + } + }, + normal = + { + width = 128, + height = 130, + shift = util.by_pixel(7, -90), + hr_version = + { + width = 254, + height = 260, + shift = util.by_pixel(6.5, -90), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 84, + height = 114, + shift = util.by_pixel(0, -46), + hr_version = + { + width = 166, + height = 228, + shift = util.by_pixel(1, -45), + scale = 0.5 + } + }, + stump = + { + width = 36, + height = 36, + shift = util.by_pixel(4, -6), + hr_version = + { + width = 74, + height = 68, + shift = util.by_pixel(4, -5), + scale = 0.5 + } + }, + shadow = + { + width = 138, + height = 86, + shift = util.by_pixel(70, 6), + hr_version = + { + width = 274, + height = 170, + shift = util.by_pixel(71, 7), + scale = 0.5 + } + }, + leaves = + { + width = 110, + height = 110, + shift = util.by_pixel(-2, -74), + hr_version = + { + width = 214, + height = 220, + shift = util.by_pixel(0, -73), + scale = 0.5 + } + }, + normal = + { + width = 108, + height = 92, + shift = util.by_pixel(0, -82), + hr_version = + { + width = 216, + height = 182, + shift = util.by_pixel(0.5, -82), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 86, + height = 122, + shift = util.by_pixel(-8, -50), + hr_version = + { + width = 172, + height = 242, + shift = util.by_pixel(-7, -49), + scale = 0.5 + } + }, + stump = + { + width = 40, + height = 30, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 76, + height = 62, + shift = util.by_pixel(3, -4), + scale = 0.5 + } + }, + shadow = + { + width = 150, + height = 76, + shift = util.by_pixel(64, 4), + hr_version = + { + width = 296, + height = 150, + shift = util.by_pixel(65, 5), + scale = 0.5 + } + }, + leaves = + { + width = 118, + height = 106, + shift = util.by_pixel(0, -72), + hr_version = + { + width = 228, + height = 210, + shift = util.by_pixel(2, -71), + scale = 0.5 + } + }, + normal = + { + width = 116, + height = 84, + shift = util.by_pixel(3, -79), + hr_version = + { + width = 228, + height = 166, + shift = util.by_pixel(2.5, -79.5), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 84, + height = 138, + shift = util.by_pixel(-4, -56), + hr_version = + { + width = 166, + height = 272, + shift = util.by_pixel(-3, -55), + scale = 0.5 + } + }, + stump = + { + width = 36, + height = 34, + shift = util.by_pixel(-2, -4), + hr_version = + { + width = 70, + height = 64, + shift = util.by_pixel(-1, -3), + scale = 0.5 + } + }, + shadow = + { + width = 138, + height = 86, + shift = util.by_pixel(62, -8), + hr_version = + { + width = 274, + height = 170, + shift = util.by_pixel(63, -7), + scale = 0.5 + } + }, + leaves = + { + width = 108, + height = 148, + shift = util.by_pixel(-2, -68), + hr_version = + { + width = 218, + height = 294, + shift = util.by_pixel(-2, -67), + scale = 0.5 + } + }, + normal = + { + width = 108, + height = 102, + shift = util.by_pixel(-1, -90), + hr_version = + { + width = 216, + height = 200, + shift = util.by_pixel(-1, -90.5), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 72, + height = 112, + shift = util.by_pixel(14, -44), + hr_version = + { + width = 146, + height = 222, + shift = util.by_pixel(14, -43), + scale = 0.5 + } + }, + stump = + { + width = 34, + height = 28, + shift = util.by_pixel(2, -2), + hr_version = + { + width = 68, + height = 56, + shift = util.by_pixel(3, -2), + scale = 0.5 + } + }, + shadow = + { + width = 136, + height = 72, + shift = util.by_pixel(64, -10), + hr_version = + { + width = 272, + height = 138, + shift = util.by_pixel(64, -8), + scale = 0.5 + } + }, + leaves = + { + width = 94, + height = 96, + shift = util.by_pixel(12, -72), + hr_version = + { + width = 190, + height = 192, + shift = util.by_pixel(12, -71), + scale = 0.5 + } + }, + normal = + { + width = 96, + height = 82, + shift = util.by_pixel(12, -77), + hr_version = + { + width = 192, + height = 164, + shift = util.by_pixel(12.5, -77), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 80, + height = 94, + shift = util.by_pixel(-10, -34), + hr_version = + { + width = 160, + height = 190, + shift = util.by_pixel(-10, -34), + scale = 0.5 + } + }, + stump = + { + width = 32, + height = 30, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 62, + height = 58, + shift = util.by_pixel(-1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 114, + height = 66, + shift = util.by_pixel(52, 6), + hr_version = + { + width = 224, + height = 128, + shift = util.by_pixel(53, 7), + scale = 0.5 + } + }, + leaves = + { + width = 110, + height = 86, + shift = util.by_pixel(-10, -54), + hr_version = + { + width = 218, + height = 174, + shift = util.by_pixel(-9, -54), + scale = 0.5 + } + }, + normal = + { + width = 110, + height = 78, + shift = util.by_pixel(-8, -58), + hr_version = + { + width = 218, + height = 152, + shift = util.by_pixel(-8.5, -58.5), + scale = 0.5 + } + }, + }, + { -- i + trunk = + { + width = 38, + height = 90, + shift = util.by_pixel(-2, -34), + hr_version = + { + width = 78, + height = 176, + shift = util.by_pixel(-2, -33), + scale = 0.5 + } + }, + stump = + { + width = 34, + height = 34, + shift = util.by_pixel(2, -6), + hr_version = + { + width = 68, + height = 62, + shift = util.by_pixel(2, -4), + scale = 0.5 + } + }, + shadow = + { + width = 94, + height = 52, + shift = util.by_pixel(44, -6), + hr_version = + { + width = 186, + height = 102, + shift = util.by_pixel(45, -5), + scale = 0.5 + } + }, + leaves = + { + width = 66, + height = 84, + shift = util.by_pixel(2, -60), + hr_version = + { + width = 130, + height = 168, + shift = util.by_pixel(3, -60), + scale = 0.5 + } + }, + normal = + { + width = 64, + height = 78, + shift = util.by_pixel(4, -62), + hr_version = + { + width = 128, + height = 154, + shift = util.by_pixel(4, -62.5), + scale = 0.5 + } + }, + }, + { -- j + trunk = + { + width = 46, + height = 90, + shift = util.by_pixel(2, -34), + hr_version = + { + width = 88, + height = 180, + shift = util.by_pixel(3, -33), + scale = 0.5 + } + }, + stump = + { + width = 34, + height = 32, + shift = util.by_pixel(2, -4), + hr_version = + { + width = 64, + height = 64, + shift = util.by_pixel(3, -4), + scale = 0.5 + } + }, + shadow = + { + width = 104, + height = 50, + shift = util.by_pixel(46, -2), + hr_version = + { + width = 208, + height = 100, + shift = util.by_pixel(46, -2), + scale = 0.5 + } + }, + leaves = + { + width = 82, + height = 78, + shift = util.by_pixel(2, -56), + hr_version = + { + width = 162, + height = 160, + shift = util.by_pixel(3, -56), + scale = 0.5 + } + }, + normal = + { + width = 82, + height = 74, + shift = util.by_pixel(4, -59), + hr_version = + { + width = 162, + height = 148, + shift = util.by_pixel(4, -58.5), + scale = 0.5 + } + }, + }, + { -- k + trunk = + { + width = 150, + height = 108, + shift = util.by_pixel(-22, -24), + hr_version = + { + width = 300, + height = 218, + shift = util.by_pixel(-22, -24), + scale = 0.5 + } + }, + stump = + { + width = 54, + height = 38, + shift = util.by_pixel(12, 0), + hr_version = + { + width = 110, + height = 78, + shift = util.by_pixel(12, 0), + scale = 0.5 + } + }, + shadow = + { + width = 160, + height = 90, + shift = util.by_pixel(-18, -16), + hr_version = + { + width = 320, + height = 180, + shift = util.by_pixel(-18, -16), + scale = 0.5 + } + }, + leaves = + { + width = 150, + height = 120, + shift = util.by_pixel(-38, -36), + hr_version = + { + width = 308, + height = 240, + shift = util.by_pixel(-34, -35), + scale = 0.5 + } + }, + normal = + { + width = 92, + height = 94, + shift = util.by_pixel(-66, -47), + hr_version = + { + width = 180, + height = 188, + shift = util.by_pixel(-66.5, -46.5), + scale = 0.5 + } + }, + }, + { -- l + trunk = + { + width = 138, + height = 102, + shift = util.by_pixel(24, 10), + hr_version = + { + width = 274, + height = 204, + shift = util.by_pixel(25, 10), + scale = 0.5 + } + }, + stump = + { + width = 52, + height = 46, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 102, + height = 92, + shift = util.by_pixel(-1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 162, + height = 108, + shift = util.by_pixel(42, 24), + hr_version = + { + width = 324, + height = 216, + shift = util.by_pixel(42, 24), + scale = 0.5 + } + }, + leaves = + { + width = 122, + height = 98, + shift = util.by_pixel(48, 8), + hr_version = + { + width = 246, + height = 198, + shift = util.by_pixel(48, 9), + scale = 0.5 + } + }, + normal = + { + width = 100, + height = 54, + shift = util.by_pixel(60, 28), + hr_version = + { + width = 200, + height = 108, + shift = util.by_pixel(60, 28), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-09 -- "baarell" + --addHere-tree09 + type_name = "09", + locale = "baarell", + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + negate_tint = { r = 128, g = 124, b = 104}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__base__/graphics/entity/tree/09/tree-09-reflection.png", + priority = "extra-high", + width = 44, + height = 48, + shift = util.by_pixel(5, 75), + y = 48 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { -- tree-09 + { -- a + trunk = + { + width = 154, + height = 194, + shift = util.by_pixel(0, -68), + hr_version = + { + width = 308, + height = 392, + shift = util.by_pixel(0, -68), + scale = 0.5 + } + }, + stump = + { + width = 90, + height = 62, + shift = util.by_pixel(-4, -2), + hr_version = + { + width = 182, + height = 124, + shift = util.by_pixel(-4, -1), + scale = 0.5 + } + }, + shadow = + { + width = 232, + height = 106, + shift = util.by_pixel(84, 0), + hr_version = + { + width = 458, + height = 214, + shift = util.by_pixel(86, 0), + scale = 0.5 + } + }, + leaves = + { + width = 174, + height = 196, + shift = util.by_pixel(0, -80), + hr_version = + { + width = 350, + height = 390, + shift = util.by_pixel(0, -78), + scale = 0.5 + } + }, + normal = + { + width = 176, + height = 148, + shift = util.by_pixel(1, -102), + hr_version = + { + width = 350, + height = 294, + shift = util.by_pixel(1, -102), + scale = 0.5 + } + }, + }, + { -- b + trunk = + { + width = 146, + height = 196, + shift = util.by_pixel(8, -70), + hr_version = + { + width = 294, + height = 390, + shift = util.by_pixel(8, -69), + scale = 0.5 + } + }, + stump = + { + width = 90, + height = 64, + shift = util.by_pixel(4, -4), + hr_version = + { + width = 178, + height = 124, + shift = util.by_pixel(5, -2), + scale = 0.5 + } + }, + shadow = + { + width = 186, + height = 114, + shift = util.by_pixel(82, 6), + hr_version = + { + width = 374, + height = 226, + shift = util.by_pixel(82, 7), + scale = 0.5 + } + }, + leaves = + { + width = 168, + height = 182, + shift = util.by_pixel(6, -88), + hr_version = + { + width = 334, + height = 368, + shift = util.by_pixel(7, -88), + scale = 0.5 + } + }, + normal = + { + width = 168, + height = 154, + shift = util.by_pixel(8, -102), + hr_version = + { + width = 336, + height = 306, + shift = util.by_pixel(8, -102), + scale = 0.5 + } + }, + }, + { -- c + trunk = + { + width = 130, + height = 196, + shift = util.by_pixel(-4, -66), + hr_version = + { + width = 258, + height = 392, + shift = util.by_pixel(-3, -65), + scale = 0.5 + } + }, + stump = + { + width = 72, + height = 64, + shift = util.by_pixel(-4, 0), + hr_version = + { + width = 144, + height = 128, + shift = util.by_pixel(-3, 1), + scale = 0.5 + } + }, + shadow = + { + width = 184, + height = 110, + shift = util.by_pixel(72, -4), + hr_version = + { + width = 364, + height = 222, + shift = util.by_pixel(73, -4), + scale = 0.5 + } + }, + leaves = + { + width = 134, + height = 202, + shift = util.by_pixel(2, -78), + hr_version = + { + width = 266, + height = 408, + shift = util.by_pixel(3, -78), + scale = 0.5 + } + }, + normal = + { + width = 134, + height = 180, + shift = util.by_pixel(3, -89), + hr_version = + { + width = 268, + height = 356, + shift = util.by_pixel(3.5, -89.5), + scale = 0.5 + } + }, + }, + { -- d + trunk = + { + width = 132, + height = 172, + shift = util.by_pixel(4, -56), + hr_version = + { + width = 264, + height = 348, + shift = util.by_pixel(4, -56), + scale = 0.5 + } + }, + stump = + { + width = 74, + height = 68, + shift = util.by_pixel(0, -4), + hr_version = + { + width = 146, + height = 140, + shift = util.by_pixel(1, -4), + scale = 0.5 + } + }, + shadow = + { + width = 172, + height = 118, + shift = util.by_pixel(80, -2), + hr_version = + { + width = 344, + height = 232, + shift = util.by_pixel(80, -1), + scale = 0.5 + } + }, + leaves = + { + width = 144, + height = 152, + shift = util.by_pixel(-2, -76), + hr_version = + { + width = 284, + height = 308, + shift = util.by_pixel(-1, -76), + scale = 0.5 + } + }, + normal = + { + width = 142, + height = 128, + shift = util.by_pixel(0, -88), + hr_version = + { + width = 282, + height = 256, + shift = util.by_pixel(0, -87.5), + scale = 0.5 + } + }, + }, + { -- e + trunk = + { + width = 126, + height = 138, + shift = util.by_pixel(10, -46), + hr_version = + { + width = 252, + height = 272, + shift = util.by_pixel(10, -44), + scale = 0.5 + } + }, + stump = + { + width = 64, + height = 50, + shift = util.by_pixel(-2, -2), + hr_version = + { + width = 126, + height = 100, + shift = util.by_pixel(-1, -1), + scale = 0.5 + } + }, + shadow = + { + width = 154, + height = 96, + shift = util.by_pixel(72, 12), + hr_version = + { + width = 306, + height = 190, + shift = util.by_pixel(73, 13), + scale = 0.5 + } + }, + leaves = + { + width = 138, + height = 130, + shift = util.by_pixel(12, -56), + hr_version = + { + width = 280, + height = 264, + shift = util.by_pixel(12, -56), + scale = 0.5 + } + }, + normal = + { + width = 140, + height = 112, + shift = util.by_pixel(13, -65), + hr_version = + { + width = 278, + height = 224, + shift = util.by_pixel(13, -65), + scale = 0.5 + } + }, + }, + { -- f + trunk = + { + width = 124, + height = 144, + shift = util.by_pixel(-20, -48), + hr_version = + { + width = 246, + height = 286, + shift = util.by_pixel(-19, -47), + scale = 0.5 + } + }, + stump = + { + width = 68, + height = 48, + shift = util.by_pixel(2, 0), + hr_version = + { + width = 132, + height = 98, + shift = util.by_pixel(4, 0), + scale = 0.5 + } + }, + shadow = + { + width = 142, + height = 96, + shift = util.by_pixel(54, 6), + hr_version = + { + width = 282, + height = 184, + shift = util.by_pixel(55, 8), + scale = 0.5 + } + }, + leaves = + { + width = 128, + height = 146, + shift = util.by_pixel(-10, -60), + hr_version = + { + width = 260, + height = 288, + shift = util.by_pixel(-11, -58), + scale = 0.5 + } + }, + normal = + { + width = 130, + height = 128, + shift = util.by_pixel(-9, -66), + hr_version = + { + width = 258, + height = 254, + shift = util.by_pixel(-9.5, -66.5), + scale = 0.5 + } + }, + }, + { -- g + trunk = + { + width = 122, + height = 156, + shift = util.by_pixel(-12, -52), + hr_version = + { + width = 240, + height = 312, + shift = util.by_pixel(-11, -52), + scale = 0.5 + } + }, + stump = + { + width = 60, + height = 50, + shift = util.by_pixel(0, 0), + hr_version = + { + width = 126, + height = 104, + shift = util.by_pixel(0, 0), + scale = 0.5 + } + }, + shadow = + { + width = 156, + height = 90, + shift = util.by_pixel(54, -14), + hr_version = + { + width = 310, + height = 182, + shift = util.by_pixel(55, -14), + scale = 0.5 + } + }, + leaves = + { + width = 134, + height = 148, + shift = util.by_pixel(-14, -68), + hr_version = + { + width = 266, + height = 296, + shift = util.by_pixel(-13, -67), + scale = 0.5 + } + }, + normal = + { + width = 134, + height = 110, + shift = util.by_pixel(-12, -85), + hr_version = + { + width = 266, + height = 218, + shift = util.by_pixel(-12.5, -85.5), + scale = 0.5 + } + }, + }, + { -- h + trunk = + { + width = 128, + height = 156, + shift = util.by_pixel(18, -52), + hr_version = + { + width = 256, + height = 312, + shift = util.by_pixel(18, -52), + scale = 0.5 + } + }, + stump = + { + width = 60, + height = 50, + shift = util.by_pixel(0, 0), + hr_version = + { + width = 122, + height = 102, + shift = util.by_pixel(0, 1), + scale = 0.5 + } + }, + shadow = + { + width = 150, + height = 96, + shift = util.by_pixel(74, -10), + hr_version = + { + width = 296, + height = 192, + shift = util.by_pixel(75, -10), + scale = 0.5 + } + }, + leaves = + { + width = 122, + height = 148, + shift = util.by_pixel(18, -66), + hr_version = + { + width = 250, + height = 292, + shift = util.by_pixel(18, -64), + scale = 0.5 + } + }, + normal = + { + width = 120, + height = 110, + shift = util.by_pixel(17, -83), + hr_version = + { + width = 238, + height = 216, + shift = util.by_pixel(17, -83.5), + scale = 0.5 + } + }, + } + }, + }, + { -- tree-01 + --addHere-tree01 + type_name = "oaktapus", + locale = "oaktapus", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-reflection.png", + priority = "extra-high", + width = 148/4, + height = 390/10, + shift = util.by_pixel(0, 60), + y = 390/10 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 177, + height = 150, + shift = util.by_pixel(29.5, -38), + hr_version = { + width = 354, + height = 298, + shift = util.by_pixel(30.5, -37.5), + scale = 0.5 + }, + }, + leaves = { + width = 102, + height = 115, + shift = util.by_pixel(-11, -65.5), + hr_version = { + width = 204, + height = 231, + shift = util.by_pixel(-10.5, -64.75), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 179, + height = 149, + shift = util.by_pixel(49.5, -40.5), + hr_version = { + width = 358, + height = 298, + shift = util.by_pixel(50, -40), + scale = 0.5 + }, + }, + leaves = { + width = 89, + height = 107, + shift = util.by_pixel(3.5, -69.5), + hr_version = { + width = 178, + height = 215, + shift = util.by_pixel(4, -69.25), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 156, + height = 146, + shift = util.by_pixel(52, -34), + hr_version = { + width = 313, + height = 291, + shift = util.by_pixel(52.25, -33.75), + scale = 0.5 + }, + }, + leaves = { + width = 94, + height = 104, + shift = util.by_pixel(6, -64), + hr_version = { + width = 190, + height = 210, + shift = util.by_pixel(6.5, -63.5), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 176, + height = 152, + shift = util.by_pixel(55, -35), + hr_version = { + width = 351, + height = 302, + shift = util.by_pixel(55.25, -34.5), + scale = 0.5 + }, + }, + leaves = { + width = 102, + height = 106, + shift = util.by_pixel(12, -63), + hr_version = { + width = 205, + height = 212, + shift = util.by_pixel(12.25, -62), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 174, + height = 141, + shift = util.by_pixel(56, -35.5), + hr_version = { + width = 346, + height = 281, + shift = util.by_pixel(56.5, -34.75), + scale = 0.5 + }, + }, + leaves = { + width = 105, + height = 110, + shift = util.by_pixel(16.5, -55), + hr_version = { + width = 212, + height = 221, + shift = util.by_pixel(17, -54.75), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 176, + height = 141, + shift = util.by_pixel(42, -22.5), + hr_version = { + width = 350, + height = 280, + shift = util.by_pixel(42.5, -22), + scale = 0.5 + }, + }, + leaves = { + width = 95, + height = 101, + shift = util.by_pixel(0.5, -46.5), + hr_version = { + width = 191, + height = 203, + shift = util.by_pixel(0.75, -45.75), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 164, + height = 150, + shift = util.by_pixel(20, -24), + hr_version = { + width = 328, + height = 301, + shift = util.by_pixel(20.5, -23.75), + scale = 0.5 + }, + }, + leaves = { + width = 96, + height = 119, + shift = util.by_pixel(-18, -50.5), + hr_version = { + width = 193, + height = 239, + shift = util.by_pixel(-17.75, -49.75), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 181, + height = 144, + shift = util.by_pixel(26.5, -33), + hr_version = { + width = 360, + height = 288, + shift = util.by_pixel(27, -32.5), + scale = 0.5 + }, + }, + leaves = { + width = 108, + height = 108, + shift = util.by_pixel(-20, -59), + hr_version = { + width = 216, + height = 216, + shift = util.by_pixel(-20, -59), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 165, + height = 162, + shift = util.by_pixel(41.5, -22), + hr_version = { + width = 329, + height = 323, + shift = util.by_pixel(41.75, -21.25), + scale = 0.5 + }, + }, + leaves = { + width = 88, + height = 121, + shift = util.by_pixel(0, -47.5), + hr_version = { + width = 177, + height = 244, + shift = util.by_pixel(0.75, -47), + scale = 0.5 + }, + }, + }, + { -- j + trunk = { + width = 132, + height = 115, + shift = util.by_pixel(35, -29.5), + hr_version = { + width = 264, + height = 229, + shift = util.by_pixel(35.5, -29.25), + scale = 0.5 + }, + }, + leaves = { + width = 89, + height = 90, + shift = util.by_pixel(4.5, -53), + hr_version = { + width = 180, + height = 179, + shift = util.by_pixel(5, -52.25), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-02 + --addHere-tree02 + type_name = "greypine", + locale = "grepine", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.9}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-reflection.png", + priority = "extra-high", + width = 132/4, + height = 225/5, + shift = util.by_pixel(0, 60), + y = 225/5 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 225, + height = 169, + shift = util.by_pixel(61.5, -46.5), + hr_version = { + width = 448, + height = 340, + shift = util.by_pixel(61.5, -47.5), + scale = 0.5 + }, + }, + leaves = { + width = 95, + height = 131, + shift = util.by_pixel(-4.5, -70.5), + hr_version = { + width = 190, + height = 261, + shift = util.by_pixel(-4.5, -70.75), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 279, + height = 193, + shift = util.by_pixel(31.5, -43.5), + hr_version = { + width = 558, + height = 385, + shift = util.by_pixel(32, -43.25), + scale = 0.5 + }, + }, + leaves = { + width = 98, + height = 143, + shift = util.by_pixel(-6, -70.5), + hr_version = { + width = 194, + height = 285, + shift = util.by_pixel(-6, -70.25), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 249, + height = 188, + shift = util.by_pixel(69.5, -51), + hr_version = { + width = 499, + height = 377, + shift = util.by_pixel(69.25, -50.75), + scale = 0.5 + }, + }, + leaves = { + width = 106, + height = 154, + shift = util.by_pixel(-3, -83), + hr_version = { + width = 213, + height = 309, + shift = util.by_pixel(-3.25, -83.25), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 271, + height = 187, + shift = util.by_pixel(90.5, -50.5), + hr_version = { + width = 541, + height = 374, + shift = util.by_pixel(90.25, -51), + scale = 0.5 + }, + }, + leaves = { + width = 119, + height = 154, + shift = util.by_pixel(13.5, -70), + hr_version = { + width = 238, + height = 309, + shift = util.by_pixel(14, -70.25), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 256, + height = 191, + shift = util.by_pixel(73, -46.5), + hr_version = { + width = 512, + height = 381, + shift = util.by_pixel(73.5, -46.25), + scale = 0.5 + }, + }, + leaves = { + width = 104, + height = 144, + shift = util.by_pixel(-3, -73), + hr_version = { + width = 207, + height = 286, + shift = util.by_pixel(-2.75, -73), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-03 + --addHere-tree03 + type_name = "ash", + locale = "vash", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.7}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-reflection.png", + priority = "extra-high", + width = 136/4, + height = 287/7, + shift = util.by_pixel(0, 60), + y = 287/7 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 243, + height = 156, + shift = util.by_pixel(72.5, -45), + hr_version = { + width = 487, + height = 312, + shift = util.by_pixel(72.75, -45), + scale = 0.5 + }, + }, + leaves = { + width = 119, + height = 98, + shift = util.by_pixel(12.5, -76), + hr_version = { + width = 237, + height = 195, + shift = util.by_pixel(13.25, -75.75), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 162, + height = 124, + shift = util.by_pixel(50, -39), + hr_version = { + width = 324, + height = 246, + shift = util.by_pixel(50, -39), + scale = 0.5 + }, + }, + leaves = { + width = 78, + height = 72, + shift = util.by_pixel(12, -65), + hr_version = { + width = 157, + height = 144, + shift = util.by_pixel(12.75, -65), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 193, + height = 169, + shift = util.by_pixel(59.5, -51.5), + hr_version = { + width = 387, + height = 337, + shift = util.by_pixel(59.75, -51.25), + scale = 0.5 + }, + }, + leaves = { + width = 94, + height = 88, + shift = util.by_pixel(13, -92), + hr_version = { + width = 187, + height = 178, + shift = util.by_pixel(13.25, -91.5), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 236, + height = 169, + shift = util.by_pixel(65, -53.5), + hr_version = { + width = 473, + height = 337, + shift = util.by_pixel(64.75, -53.75), + scale = 0.5 + }, + }, + leaves = { + width = 100, + height = 83, + shift = util.by_pixel(0, -98.5), + hr_version = { + width = 204, + height = 167, + shift = util.by_pixel(0.5, -97.75), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 258, + height = 143, + shift = util.by_pixel(59, -48.5), + hr_version = { + width = 516, + height = 285, + shift = util.by_pixel(59, -48.75), + scale = 0.5 + }, + }, + leaves = { + width = 117, + height = 83, + shift = util.by_pixel(-7.5, -80.5), + hr_version = { + width = 235, + height = 167, + shift = util.by_pixel(-6.75, -79.75), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 213, + height = 158, + shift = util.by_pixel(48.5, -44), + hr_version = { + width = 427, + height = 315, + shift = util.by_pixel(48.75, -43.75), + scale = 0.5 + }, + }, + leaves = { + width = 93, + height = 100, + shift = util.by_pixel(-8.5, -67), + hr_version = { + width = 186, + height = 201, + shift = util.by_pixel(-8, -66.25), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 176, + height = 149, + shift = util.by_pixel(40, -34.5), + hr_version = { + width = 352, + height = 299, + shift = util.by_pixel(40, -35.25), + scale = 0.5 + }, + }, + leaves = { + width = 76, + height = 105, + shift = util.by_pixel(-6, -59.5), + hr_version = { + width = 155, + height = 212, + shift = util.by_pixel(-5.25, -59), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-04 + --addHere-tree04 + type_name = "scarecrow", + locale = "scarecrow", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.9}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-reflection.png", + priority = "extra-high", + width = 132/4, + height = 344/8, + shift = util.by_pixel(0, 60), + y = 344/8 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 255, + height = 170, + shift = util.by_pixel(78.5, -50), + hr_version = { + width = 509, + height = 340, + shift = util.by_pixel(78.75, -49.5), + scale = 0.5 + }, + }, + leaves = { + width = 98, + height = 127, + shift = util.by_pixel(0, -76.5), + hr_version = { + width = 197, + height = 254, + shift = util.by_pixel(0.25, -75.5), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 231, + height = 168, + shift = util.by_pixel(69.5, -46), + hr_version = { + width = 463, + height = 336, + shift = util.by_pixel(70.25, -45.5), + scale = 0.5 + }, + }, + leaves = { + width = 105, + height = 140, + shift = util.by_pixel(3.5, -68), + hr_version = { + width = 212, + height = 280, + shift = util.by_pixel(4, -67.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 265, + height = 176, + shift = util.by_pixel(92.5, -47), + hr_version = { + width = 530, + height = 353, + shift = util.by_pixel(92.5, -47.25), + scale = 0.5 + }, + }, + leaves = { + width = 99, + height = 125, + shift = util.by_pixel(1.5, -74.5), + hr_version = { + width = 197, + height = 250, + shift = util.by_pixel(2.25, -74.5), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 273, + height = 173, + shift = util.by_pixel(88.5, -46.5), + hr_version = { + width = 545, + height = 348, + shift = util.by_pixel(88.75, -46.5), + scale = 0.5 + }, + }, + leaves = { + width = 99, + height = 125, + shift = util.by_pixel(-6.5, -75.5), + hr_version = { + width = 198, + height = 248, + shift = util.by_pixel(-6, -75), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 246, + height = 182, + shift = util.by_pixel(63, -51.5), + hr_version = { + width = 492, + height = 365, + shift = util.by_pixel(63.5, -50.75), + scale = 0.5 + }, + }, + leaves = { + width = 108, + height = 136, + shift = util.by_pixel(-8, -77), + hr_version = { + width = 217, + height = 273, + shift = util.by_pixel(-7.75, -76.25), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 260, + height = 190, + shift = util.by_pixel(86, -51), + hr_version = { + width = 520, + height = 380, + shift = util.by_pixel(86.5, -51), + scale = 0.5 + }, + }, + leaves = { + width = 100, + height = 122, + shift = util.by_pixel(4, -87), + hr_version = { + width = 200, + height = 246, + shift = util.by_pixel(4, -87), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 260, + height = 176, + shift = util.by_pixel(82, -36.5), + hr_version = { + width = 522, + height = 352, + shift = util.by_pixel(82.5, -36.25), + scale = 0.5 + }, + }, + leaves = { + width = 98, + height = 116, + shift = util.by_pixel(-1, -70), + hr_version = { + width = 199, + height = 231, + shift = util.by_pixel(-0.75, -69.75), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 253, + height = 169, + shift = util.by_pixel(76.5, -35.5), + hr_version = { + width = 505, + height = 340, + shift = util.by_pixel(77.25, -35.5), + scale = 0.5 + }, + }, + leaves = { + width = 103, + height = 122, + shift = util.by_pixel(-0.5, -62), + hr_version = { + width = 206, + height = 245, + shift = util.by_pixel(0, -61.25), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-05 + --addHere-tree05 + type_name = "specter", + locale = "specter", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-reflection.png", + priority = "extra-high", + width = 156/4, + height = 351/9, + shift = util.by_pixel(0, 60), + y = 351/9 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 210, + height = 142, + shift = util.by_pixel(55, -33), + hr_version = { + width = 419, + height = 284, + shift = util.by_pixel(55.25, -33), + scale = 0.5 + }, + }, + leaves = { + width = 116, + height = 118, + shift = util.by_pixel(-3, -56), + hr_version = { + width = 233, + height = 236, + shift = util.by_pixel(-2.75, -56), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 198, + height = 129, + shift = util.by_pixel(59, -29.5), + hr_version = { + width = 394, + height = 259, + shift = util.by_pixel(59.5, -29.25), + scale = 0.5 + }, + }, + leaves = { + width = 104, + height = 115, + shift = util.by_pixel(-2, -49.5), + hr_version = { + width = 210, + height = 230, + shift = util.by_pixel(-1.5, -49.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 187, + height = 138, + shift = util.by_pixel(56.5, -33), + hr_version = { + width = 375, + height = 276, + shift = util.by_pixel(56.75, -33), + scale = 0.5 + }, + }, + leaves = { + width = 116, + height = 135, + shift = util.by_pixel(7, -51.5), + hr_version = { + width = 232, + height = 270, + shift = util.by_pixel(7.5, -51), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 206, + height = 138, + shift = util.by_pixel(57, -23), + hr_version = { + width = 412, + height = 275, + shift = util.by_pixel(57, -22.75), + scale = 0.5 + }, + }, + leaves = { + width = 133, + height = 131, + shift = util.by_pixel(2.5, -35.5), + hr_version = { + width = 264, + height = 260, + shift = util.by_pixel(3, -35.5), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 185, + height = 129, + shift = util.by_pixel(40.5, -19.5), + hr_version = { + width = 369, + height = 258, + shift = util.by_pixel(41.25, -19.5), + scale = 0.5 + }, + }, + leaves = { + width = 120, + height = 109, + shift = util.by_pixel(-6, -39.5), + hr_version = { + width = 240, + height = 216, + shift = util.by_pixel(-6, -39.5), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 188, + height = 145, + shift = util.by_pixel(43, -36.5), + hr_version = { + width = 375, + height = 291, + shift = util.by_pixel(43.75, -36.25), + scale = 0.5 + }, + }, + leaves = { + width = 125, + height = 140, + shift = util.by_pixel(-0.5, -51), + hr_version = { + width = 250, + height = 281, + shift = util.by_pixel(0.5, -51.25), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 182, + height = 108, + shift = util.by_pixel(54, -17), + hr_version = { + width = 362, + height = 216, + shift = util.by_pixel(54.5, -16.5), + scale = 0.5 + }, + }, + leaves = { + width = 117, + height = 100, + shift = util.by_pixel(1.5, -33), + hr_version = { + width = 232, + height = 201, + shift = util.by_pixel(2, -33.25), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 164, + height = 119, + shift = util.by_pixel(45, -17.5), + hr_version = { + width = 330, + height = 240, + shift = util.by_pixel(45.5, -17.5), + scale = 0.5 + }, + }, + leaves = { + width = 111, + height = 112, + shift = util.by_pixel(7.5, -36), + hr_version = { + width = 221, + height = 224, + shift = util.by_pixel(7.75, -36), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 175, + height = 111, + shift = util.by_pixel(38.5, -9.5), + hr_version = { + width = 352, + height = 221, + shift = util.by_pixel(39, -9.25), + scale = 0.5 + }, + }, + leaves = { + width = 119, + height = 110, + shift = util.by_pixel(-1.5, -27), + hr_version = { + width = 238, + height = 220, + shift = util.by_pixel(-1, -26.5), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-06 + --addHere-tree06 + type_name = "willow", + locale = "willu", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-reflection.png", + priority = "extra-high", + width = 30, + height = 35, + shift = util.by_pixel(0, 35), + x = 30 * variation, + variation_count = 1, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 178, + height = 144, + shift = util.by_pixel(60, -34), + hr_version = { + width = 356, + height = 289, + shift = util.by_pixel(59.5, -33.75), + scale = 0.5 + }, + }, + leaves = { + width = 66, + height = 97, + shift = util.by_pixel(19, -46.5), + hr_version = { + width = 133, + height = 195, + shift = util.by_pixel(19.25, -46.75), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 188, + height = 129, + shift = util.by_pixel(61, -23.5), + hr_version = { + width = 375, + height = 258, + shift = util.by_pixel(61.25, -23), + scale = 0.5 + }, + }, + leaves = { + width = 85, + height = 92, + shift = util.by_pixel(17.5, -37), + hr_version = { + width = 170, + height = 186, + shift = util.by_pixel(18, -37), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 202, + height = 107, + shift = util.by_pixel(52, -12.5), + hr_version = { + width = 403, + height = 214, + shift = util.by_pixel(52.25, -12.5), + scale = 0.5 + }, + }, + leaves = { + width = 89, + height = 79, + shift = util.by_pixel(11.5, -25.5), + hr_version = { + width = 178, + height = 158, + shift = util.by_pixel(11, -25.5), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 172, + height = 130, + shift = util.by_pixel(34, -17), + hr_version = { + width = 343, + height = 259, + shift = util.by_pixel(34.25, -16.75), + scale = 0.5 + }, + }, + leaves = { + width = 75, + height = 90, + shift = util.by_pixel(-6.5, -36), + hr_version = { + width = 150, + height = 178, + shift = util.by_pixel(-6.5, -36), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 140, + height = 144, + shift = util.by_pixel(18, -28), + hr_version = { + width = 280, + height = 287, + shift = util.by_pixel(18, -28.25), + scale = 0.5 + }, + }, + leaves = { + width = 68, + height = 112, + shift = util.by_pixel(-10, -44), + hr_version = { + width = 137, + height = 224, + shift = util.by_pixel(-10.25, -44.5), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 186, + height = 136, + shift = util.by_pixel(31, -36), + hr_version = { + width = 371, + height = 272, + shift = util.by_pixel(30.75, -36), + scale = 0.5 + }, + }, + leaves = { + width = 89, + height = 114, + shift = util.by_pixel(-10.5, -46), + hr_version = { + width = 177, + height = 228, + shift = util.by_pixel(-10.25, -45.5), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 202, + height = 133, + shift = util.by_pixel(43, -34.5), + hr_version = { + width = 402, + height = 268, + shift = util.by_pixel(43, -35), + scale = 0.5 + }, + }, + leaves = { + width = 89, + height = 114, + shift = util.by_pixel(-0.5, -44), + hr_version = { + width = 177, + height = 228, + shift = util.by_pixel(-0.75, -44), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 173, + height = 129, + shift = util.by_pixel(49.5, -34.5), + hr_version = { + width = 347, + height = 258, + shift = util.by_pixel(49.25, -34.5), + scale = 0.5 + }, + }, + leaves = { + width = 71, + height = 95, + shift = util.by_pixel(21.5, -43.5), + hr_version = { + width = 143, + height = 190, + shift = util.by_pixel(21.25, -43), + scale = 0.5 + }, + }, + }, + { -- i + trunk = { + width = 127, + height = 129, + shift = util.by_pixel(12.5, -14.5), + hr_version = { + width = 253, + height = 259, + shift = util.by_pixel(12.75, -14.75), + scale = 0.5 + }, + }, + leaves = { + width = 65, + height = 93, + shift = util.by_pixel(-10.5, -33.5), + hr_version = { + width = 129, + height = 185, + shift = util.by_pixel(-10.25, -33.75), + scale = 0.5 + }, + }, + }, + { -- j + trunk = { + width = 136, + height = 126, + shift = util.by_pixel(22, -17), + hr_version = { + width = 272, + height = 253, + shift = util.by_pixel(22, -16.75), + scale = 0.5 + }, + }, + leaves = { + width = 67, + height = 92, + shift = util.by_pixel(-6.5, -35), + hr_version = { + width = 133, + height = 182, + shift = util.by_pixel(-6.25, -35), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-07 + --addHere-tree07 + type_name = "mangrove", + locale = "margrove", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-reflection.png", + priority = "extra-high", + width = 140/4, + height = 312/8, + shift = util.by_pixel(0, 60), + y = 312/8 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 181, + height = 122, + shift = util.by_pixel(38.5 + 24, -21), + hr_version = { + width = 362, + height = 244, + shift = util.by_pixel(39 + 24, -20.5), + scale = 0.5 + }, + }, + leaves = { + width = 402/3/2, + height = 166/2, + shift = util.by_pixel(-26 + 24, -42), + hr_version = { + width = 402/3, + height = 166, + shift = util.by_pixel(-26 + 24, -42), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 167, + height = 120, + shift = util.by_pixel(14.5 + 24, -36), + hr_version = { + width = 335, + height = 239, + shift = util.by_pixel(14.75 + 24, -35.75), + scale = 0.5 + }, + }, + leaves = { + width = 438/3/2, + height = 192/2, + shift = util.by_pixel(-41 + 24, -50), + hr_version = { + width = 438/3, + height = 192, + shift = util.by_pixel(-41 + 24, -50), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 167, + height = 128, + shift = util.by_pixel(8.5 + 24, -47), + hr_version = { + width = 334, + height = 256, + shift = util.by_pixel(9 + 24, -46.5), + scale = 0.5 + }, + }, + leaves = { + width = 480/3/2, + height = 220/2, + shift = util.by_pixel(-42 + 24, -56), + hr_version = { + width = 480/3, + height = 220, + shift = util.by_pixel(-42 + 24, -56), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 184, + height = 158, + shift = util.by_pixel(25 + 24, -48), + hr_version = { + width = 368, + height = 314, + shift = util.by_pixel(25.5 + 24, -47.5), + scale = 0.5 + }, + }, + leaves = { + width = 540/3/2, + height = 254/2, + shift = util.by_pixel(-28 + 24, -65), + hr_version = { + width = 540/3, + height = 254, + shift = util.by_pixel(-28 + 24, -65), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 202, + height = 143, + shift = util.by_pixel(48 + 24, -55.5), + hr_version = { + width = 405, + height = 286, + shift = util.by_pixel(48.25 + 24, -54.5), + scale = 0.5 + }, + }, + leaves = { + width = 450/3/2, + height = 268/2, + shift = util.by_pixel(-17 + 24, -61), + hr_version = { + width = 450/3, + height = 268, + shift = util.by_pixel(-17 + 24, -61), + scale = 0.5 + }, + }, + }, + { -- f + trunk = { + width = 218, + height = 135, + shift = util.by_pixel(57 + 24, -49.5), + hr_version = { + width = 435, + height = 270, + shift = util.by_pixel(56.75 + 24, -49), + scale = 0.5 + }, + }, + leaves = { + width = 504/3/2, + height = 240/2, + shift = util.by_pixel(-3 + 24, -57), + hr_version = { + width = 504/3, + height = 240, + shift = util.by_pixel(-3 + 24, -57), + scale = 0.5 + }, + }, + }, + { -- g + trunk = { + width = 213, + height = 121, + shift = util.by_pixel(55.5 + 24, -36.5), + hr_version = { + width = 426, + height = 240, + shift = util.by_pixel(55.5 + 24, -36), + scale = 0.5 + }, + }, + leaves = { + width = 480/3/2, + height = 200/2, + shift = util.by_pixel(-9 + 24, -46), + hr_version = { + width = 480/3, + height = 200, + shift = util.by_pixel(-9 + 24, -46), + scale = 0.5 + }, + }, + }, + { -- h + trunk = { + width = 198, + height = 121, + shift = util.by_pixel(50 + 24, -21.5), + hr_version = { + width = 397, + height = 243, + shift = util.by_pixel(50.25 + 24, -21.25), + scale = 0.5 + }, + }, + leaves = { + width = 444/3/2, + height = 174/2, + shift = util.by_pixel(-20 + 24, -40), + hr_version = { + width = 444/3, + height = 174, + shift = util.by_pixel(-20 + 24, -40), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-08 + --addHere-tree08 + type_name = "pear", + locale = "pearch", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-reflection.png", + priority = "extra-high", + width = 116/4, + height = 180/5, + shift = util.by_pixel(0, 60), + y = 180/5 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 200, + height = 140, + shift = util.by_pixel(55, -34), + hr_version = { + width = 399, + height = 279, + shift = util.by_pixel(55.75, -33.75), + scale = 0.5 + }, + }, + leaves = { + width = 94, + height = 70, + shift = util.by_pixel(0, -71), + hr_version = { + width = 188, + height = 141, + shift = util.by_pixel(0.5, -70.75), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 213, + height = 139, + shift = util.by_pixel(57.5, -30.5), + hr_version = { + width = 426, + height = 277, + shift = util.by_pixel(57.5, -30.25), + scale = 0.5 + }, + }, + leaves = { + width = 102, + height = 70, + shift = util.by_pixel(2, -69), + hr_version = { + width = 205, + height = 142, + shift = util.by_pixel(2.25, -68.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 188, + height = 136, + shift = util.by_pixel(65, -36), + hr_version = { + width = 377, + height = 271, + shift = util.by_pixel(65.75, -35.75), + scale = 0.5 + }, + }, + leaves = { + width = 76, + height = 76, + shift = util.by_pixel(6, -68), + hr_version = { + width = 152, + height = 152, + shift = util.by_pixel(6.5, -68), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 212, + height = 134, + shift = util.by_pixel(62, -39), + hr_version = { + width = 424, + height = 267, + shift = util.by_pixel(62.5, -38.75), + scale = 0.5 + }, + }, + leaves = { + width = 93, + height = 81, + shift = util.by_pixel(-0.5, -69.5), + hr_version = { + width = 187, + height = 162, + shift = util.by_pixel(0.25, -68.5), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 208, + height = 147, + shift = util.by_pixel(55, -33.5), + hr_version = { + width = 416, + height = 295, + shift = util.by_pixel(55, -33.25), + scale = 0.5 + }, + }, + leaves = { + width = 95, + height = 83, + shift = util.by_pixel(-6.5, -70.5), + hr_version = { + width = 189, + height = 166, + shift = util.by_pixel(-5.75, -70), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-09 + --addHere-tree09 + type_name = "baobab", + locale = "maobab", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -3.5}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-reflection.png", + priority = "extra-high", + width = 148/4, + height = 200/5, + shift = util.by_pixel(0, 60), + y = 200/5 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 243, + height = 170, + shift = util.by_pixel(65.5, -37), + hr_version = { + width = 487, + height = 340, + shift = util.by_pixel(66.25, -36.5), + scale = 0.5 + }, + }, + leaves = { + width = 123, + height = 102, + shift = util.by_pixel(4.5, -73), + hr_version = { + width = 244, + height = 204, + shift = util.by_pixel(5, -72.5), + scale = 0.5 + }, + }, + }, + { -- b + trunk = { + width = 208, + height = 150, + shift = util.by_pixel(53, -36), + hr_version = { + width = 415, + height = 300, + shift = util.by_pixel(53.25, -35.5), + scale = 0.5 + }, + }, + leaves = { + width = 99, + height = 86, + shift = util.by_pixel(-2.5, -69), + hr_version = { + width = 197, + height = 172, + shift = util.by_pixel(-2.25, -68.5), + scale = 0.5 + }, + }, + }, + { -- c + trunk = { + width = 238, + height = 167, + shift = util.by_pixel(56, -37.5), + hr_version = { + width = 476, + height = 333, + shift = util.by_pixel(56.5, -37.25), + scale = 0.5 + }, + }, + leaves = { + width = 113, + height = 95, + shift = util.by_pixel(-8.5, -74.5), + hr_version = { + width = 225, + height = 189, + shift = util.by_pixel(-8.25, -73.75), + scale = 0.5 + }, + }, + }, + { -- d + trunk = { + width = 169, + height = 116, + shift = util.by_pixel(45.5, -32), + hr_version = { + width = 338, + height = 233, + shift = util.by_pixel(46, -31.75), + scale = 0.5 + }, + }, + leaves = { + width = 90, + height = 64, + shift = util.by_pixel(4, -60), + hr_version = { + width = 179, + height = 126, + shift = util.by_pixel(4.75, -59.5), + scale = 0.5 + }, + }, + }, + { -- e + trunk = { + width = 202, + height = 157, + shift = util.by_pixel(63, -38.5), + hr_version = { + width = 403, + height = 315, + shift = util.by_pixel(63.25, -38.25), + scale = 0.5 + }, + }, + leaves = { + width = 103, + height = 103, + shift = util.by_pixel(11.5, -67.5), + hr_version = { + width = 205, + height = 206, + shift = util.by_pixel(12.25, -67), + scale = 0.5 + }, + }, + }, + }, + }, + { -- tree-conifer-01 + -- x positive moves image right + -- y positive moves image down + type_name = "conifer-01", + locale = "konifa", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-1, -9}, {1, 0.8}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/conifer-01/tree-conifer-01-reflection.png", + priority = "extra-high", + width = 180/4, + height = 189/3, + shift = util.by_pixel(0, 100), + y = 189/3 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + width = 1498/5, + height = 226, + shift = util.by_pixel(81, -62), + hr_version = { + width = 1498/5*2, + height = 226*2, + shift = util.by_pixel(81, -62), + scale = 0.5 + } + }, + leaves = { + width = 339/3, + height = 164, + shift = util.by_pixel(11, -84), + hr_version = { + width = 339/3*2, + height = 164*2, + shift = util.by_pixel(11, -84), + scale = 0.5 + } + }, + }, + { -- b + trunk = { + width = 540/4, + height = 152, + shift = util.by_pixel(18, -48), + hr_version = { + width = 540/4*2, + height = 152*2, + shift = util.by_pixel(18, -48), + scale = 0.5 + } + }, + leaves = { + width = 279/3, + height = 134, + shift = util.by_pixel(0, -66), + hr_version = { + width = 279/3*2, + height = 134*2, + shift = util.by_pixel(0, -66), + scale = 0.5 + } + }, + }, + { -- c + trunk = { + width = 1400/4, + height = 321, + shift = util.by_pixel(90, -88), + hr_version = { + width = 1400/4*2, + height = 321*2, + shift = util.by_pixel(90, -88), + scale = 0.5 + } + }, + leaves = { + width = 534/3, + height = 258, + shift = util.by_pixel(4, -123), + hr_version = { + width = 534/3*2, + height = 258*2, + shift = util.by_pixel(4, -123), + scale = 0.5 + } + }, + }, + }, + }, + { -- tree-palm + -- x positive moves image right + -- y positive moves image down + type_name = "palm", + locale = "parm", + alien_biomes_texture = true, + normals_match_leaves = true, + drawing_box = {{-0.9, -5.9}, {0.9, 0.8}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/palm/tree-palm-reflection.png", + priority = "extra-high", + width = 116/4, + height = 144/4, + shift = util.by_pixel(0, 60), + y = 144/4 * variation, + variation_count = 4, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = + { + width = 60/2, + height = 168/2, + shift = util.by_pixel(0, -31), + hr_version = + { + width = 60, + height = 168, + shift = util.by_pixel(0, -31), + scale = 0.5 + } + }, + shadow = + { + width = 976/4/2, + height = 114/2, + shift = util.by_pixel(58, 10), + hr_version = + { + width = 976/4, + height = 114, + shift = util.by_pixel(58, 10), + scale = 0.5 + } + }, + leaves = + { + width = 432/3/2, + height = 114/2, + shift = util.by_pixel(-2, -65), + hr_version = + { + width = 432/3, + height = 114, + shift = util.by_pixel(-2, -65), + scale = 0.5 + } + } + }, + { -- b + trunk = + { + width = 64/2, + height = 218/2, + shift = util.by_pixel(2, -40), + hr_version = + { + width = 64, + height = 218, + shift = util.by_pixel(2, -40), + scale = 0.5 + } + }, + shadow = + { + width = 1000/4/2, + height = 118/2, + shift = util.by_pixel(58, 0), + hr_version = + { + width = 1000/4, + height = 118, + shift = util.by_pixel(58, 0), + scale = 0.5 + } + }, + leaves = + { + width = 546/3/2, + height = 118/2, + shift = util.by_pixel(-8, -92), + hr_version = + { + width = 546/3, + height = 118, + shift = util.by_pixel(-8, -92), + scale = 0.5 + } + } + }, + { -- c + trunk = + { + width = 66/2, + height = 210/2, + shift = util.by_pixel(0, -38), + hr_version = + { + width = 66, + height = 210, + shift = util.by_pixel(0, -38), + scale = 0.5 + } + }, + shadow = + { + width = 1008/4/2, + height = 124/2, + shift = util.by_pixel(58, 0), + hr_version = + { + width = 1008/4, + height = 124, + shift = util.by_pixel(58, 0), + scale = 0.5 + } + }, + leaves = + { + width = 486/3/2, + height = 124/2, + shift = util.by_pixel(10, -92), + hr_version = + { + width = 486/3, + height = 124, + shift = util.by_pixel(10, -92), + scale = 0.5 + } + } + }, + { -- d + trunk = + { + width = 78/2, + height = 198/2, + shift = util.by_pixel(0, -33), + hr_version = + { + width = 78, + height = 198, + shift = util.by_pixel(0, -33), + scale = 0.5 + } + }, + shadow = + { + width = 896/4/2, + height = 126/2, + shift = util.by_pixel(58, -1), + hr_version = + { + width = 896/4, + height = 126, + shift = util.by_pixel(58, -1), + scale = 0.5 + } + }, + leaves = + { + width = 486/3/2, + height = 126/2, + shift = util.by_pixel(-1, -85), + hr_version = + { + width = 486/3, + height = 126, + shift = util.by_pixel(-1, -85), + scale = 0.5 + } + } + }, + }, + }, + { -- tree-medusa-01 + type_name = "medusa-01", + locale = "medusa", + alien_biomes_texture = true, + drawing_box = {{-0.9, -3.9}, {0.9, 0.6}}, + water_reflection_function = function (variation) + return + { + pictures = + { + filename = "__alien-biomes__/graphics/entity/tree/medusa-01/tree-medusa-01-reflection.png", + priority = "extra-high", + width = 30, + height = 31, + shift = util.by_pixel(0, 35), + x = 30 * variation, + variation_count = 1, + scale = 5, + }, + rotate = false, + orientation_to_variation = false + } + end, + variations = { + { -- a + trunk = { + frame_count = 2, + width = 254/2, + height = 100, + shift = util.by_pixel(30, -22), + hr_version = + { + frame_count = 2, + width = 254, + height = 100*2, + shift = util.by_pixel(30, -22), + scale = 0.5 + } + }, + leaves = { + frame_count = 1, + width = 67, + height = 57, + shift = util.by_pixel(0, -44), + hr_version = + { + frame_count = 1, + width = 67*2, + height = 57*2, + shift = util.by_pixel(0, -44), + scale = 0.5 + } + }, + }, + { -- b + trunk = { + frame_count = 2, + width = 302/2, + height = 110, + shift = util.by_pixel(16, -31), + hr_version = + { + frame_count = 2, + width = 302, + height = 110*2, + shift = util.by_pixel(16, -31), + scale = 0.5 + } + }, + leaves = { + frame_count = 1, + width = 87, + height = 59, + shift = util.by_pixel(-16, -58), + hr_version = + { + frame_count = 1, + width = 87*2, + height = 59*2, + shift = util.by_pixel(-16, -58), + scale = 0.5 + } + }, + }, + { -- c + trunk = { + frame_count = 2, + width = 232/2, + height = 110, + shift = util.by_pixel(24, -10), + hr_version = + { + frame_count = 2, + width = 232, + height = 110*2, + shift = util.by_pixel(24, -10), + scale = 0.5 + } + }, + leaves = { + frame_count = 1, + width = 72, + height = 74, + shift = util.by_pixel(2, -28), + hr_version = + { + frame_count = 1, + width = 72*2, + height = 74*2, + shift = util.by_pixel(2, -28), + scale = 0.5 + } + }, + }, + { -- d + trunk = { + frame_count = 2, + width = 236/2, + height = 110, + shift = util.by_pixel(30, -40), + hr_version = + { + frame_count = 2, + width = 236, + height = 110*2, + shift = util.by_pixel(30, -40), + scale = 0.5 + } + }, + leaves = { + frame_count = 1, + width = 59, + height = 65, + shift = util.by_pixel(0, -62), + hr_version = + { + frame_count = 1, + width = 59*2, + height = 65*2, + shift = util.by_pixel(0, -62), + scale = 0.5 + } + }, + }, + { -- e + trunk = { + frame_count = 2, + width = 200/2, + height = 110, + shift = util.by_pixel(28, -36), + hr_version = + { + frame_count = 2, + width = 200, + height = 110*2, + shift = util.by_pixel(28, -36), + scale = 0.5 + } + }, + leaves = { + frame_count = 1, + width = 65, + height = 81, + shift = util.by_pixel(10, -51), + hr_version = + { + frame_count = 1, + width = 65*2, + height = 81*2, + shift = util.by_pixel(10, -51), + scale = 0.5 + } + }, + }, + }, + }, +} + +local tree_models = {} +-- expand variations +for tree_index, tree_type in pairs(tree_types) do + local type_name = tree_type.type_name + local tree_variations = {} -- expanded versions + local i = 1 + -- lock letter + for variation_index, variation in ipairs(tree_type.variations) do + variation.variation_letter = index_to_letter(variation_index) + variation.real_variation_index = variation_index + end + -- make sure there are at least 7 variations by duplicating earlier ones + -- that way if more textures are added later there will be at least 7 in already generated areas + while #tree_type.variations < 7 do + i = i + 1 + table.insert(tree_type.variations, table.deepcopy(tree_type.variations[i])) + end + for variation_index, variation in ipairs(tree_type.variations) do + local variation_letter = variation.variation_letter + local variation_path = type_name .. "/tree-" .. type_name .. "-" .. variation_letter + local hr_variation_path = type_name .. "/hr-tree-" .. type_name .. "-" .. variation_letter + local path_start = tree_type.alien_biomes_texture and "__alien-biomes__" or "__base__" + local newTree = { + trunk = + { + filename = path_start.."/graphics/entity/tree/" .. variation_path .. "-trunk.png", + flags = { "mipmap" }, + width = variation.trunk.width, + height = variation.trunk.height, + frame_count = variation.trunk.frame_count or 4, + shift = variation.trunk.shift, + hr_version = util.table.deepcopy(variation.trunk.hr_version) + }, + leaves = + { + filename = path_start.."/graphics/entity/tree/" .. variation_path .. "-leaves.png", + flags = { "mipmap" }, + width = variation.leaves.width, + height = variation.leaves.height, + frame_count = variation.leaves.frame_count or 3, + shift = variation.leaves.shift, + hr_version = util.table.deepcopy(variation.leaves.hr_version) + }, + leaf_generation = + { + type = "create-particle", + particle_name = "leaf-particle", + offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}, + initial_height = 2, + initial_height_deviation = 1, + speed_from_center = 0.01 + }, + branch_generation = + { + type = "create-particle", + particle_name = "branch-particle", + offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}, + initial_height = 2, + initial_height_deviation = 2, + speed_from_center = 0.01, + frame_speed = 0.1, + repeat_count = 15 + } + } + if newTree.trunk.hr_version then + newTree.trunk.hr_version.filename = path_start.."/graphics/entity/tree/" .. hr_variation_path .. "-trunk.png" + newTree.trunk.hr_version.frame_count = variation.trunk.hr_version.frame_count or 4 + newTree.trunk.hr_version.flags = { "mipmap" } + --newTree.leaves.hr_version.scale = 0.5 + end + if newTree.leaves.hr_version then + newTree.leaves.hr_version.filename = path_start.."/graphics/entity/tree/" .. hr_variation_path .. "-leaves.png" + newTree.leaves.hr_version.frame_count = variation.leaves.hr_version.frame_count or 3 + newTree.leaves.hr_version.flags = { "mipmap" } + --newTree.leaves.hr_version.scale = 0.5 + end + if variation.normal then + newTree.normal = + { + filename = "__base__/graphics/entity/tree/" .. variation_path .. "-normal.png", + width = variation.normal.width, + height = variation.normal.height, + frame_count = 3, + shift = variation.normal.shift, + hr_version = util.table.deepcopy(variation.normal.hr_version) + } + newTree.normal.hr_version.filename = "__base__/graphics/entity/tree/" .. hr_variation_path .. "-normal.png" + newTree.normal.hr_version.frame_count = newTree.normal.frame_count + elseif tree_type.normals_match_leaves then + newTree.normal = table.deepcopy(newTree.leaves) + newTree.normal.filename = path_start.."/graphics/entity/tree/" .. variation_path .. "-normal.png" + newTree.normal.flags = nil + if newTree.normal.hr_version then + newTree.normal.hr_version.filename = path_start.."/graphics/entity/tree/" .. hr_variation_path .. "-normal.png" + newTree.normal.hr_version.flags = nil + end + end + if tree_type.water_reflection_function then + newTree.water_reflection = tree_type.water_reflection_function(variation.real_variation_index - 1) + end + if variation.shadow then + -- note: old trees had shadow baked into the trunk texture + + newTree.trunk.frame_count = variation.trunk.frame_count or 1 + if newTree.trunk.hr_version then newTree.trunk.hr_version.frame_count = variation.trunk.frame_count or 1 end + + newTree.trunk.frame_count = variation.trunk.frame_count or 1 + newTree.shadow = { + draw_as_shadow = true, + filename = path_start.."/graphics/entity/tree/" .. variation_path .. "-shadow.png", + flags = { "mipmap", "shadow" }, + frame_count = variation.shadow.frame_count or 4, + width = variation.shadow.width, + height = variation.shadow.height, + shift = variation.shadow.shift, + disable_shadow_distortion_beginning_at_frame = 2, + } + if variation.shadow.hr_version then + hr_version = { + draw_as_shadow = true, + filename = path_start.."/graphics/entity/tree/" .. hr_variation_path .. "-shadow.png", + flags = { "mipmap", "shadow" }, + frame_count = variation.shadow.hr_version.frame_count or 4, + width = variation.shadow.hr_version.width, + height = variation.shadow.hr_version.height, + shift = variation.shadow.hr_version.shift, + scale = 0.5, + disable_shadow_distortion_beginning_at_frame = 2, + } + end + else + newTree.shadow = table.deepcopy(newTree.trunk) + newTree.shadow.draw_as_shadow = true + newTree.shadow.flags = { "mipmap", "shadow" } + newTree.shadow.disable_shadow_distortion_beginning_at_frame = 2 + if newTree.shadow.hr_version then + newTree.shadow.hr_version.draw_as_shadow = true + newTree.shadow.hr_version.flags = { "mipmap", "shadow" } + newTree.shadow.hr_version.disable_shadow_distortion_beginning_at_frame = 2 + end + data_util.replace_filenames_recursive(newTree.shadow, "trunk", "shadow") + end + + tree_variations[#tree_variations + 1] = newTree + end + tree_type.tree_variations = tree_variations + tree_models[type_name] = tree_type +end + +return tree_models diff --git a/alien-biomes/prototypes/entity/tree-notes.txt b/alien-biomes/prototypes/entity/tree-notes.txt new file mode 100644 index 00000000..e78ae22e --- /dev/null +++ b/alien-biomes/prototypes/entity/tree-notes.txt @@ -0,0 +1,121 @@ +--[[ +Vanilla Tree Notes: +01: Hydra: red tint, curly roots, branches early, spikey branches, sparese thick leaves, desert / dirt +02: Ash: grey trunk, thin leaves, tall tree, light connifer look, good for cold climate +03: Oak: desaturated yellow trunk, slightly twisted, normal looking, stubby roots, good for normal climate +04: Antler: red tinge, thick conical trunk, horizontal branching, good for drier climates. +05: Zigzag: grey zigzaging twisted trunk. horizontal scragely branches. thick leaves. good for blue areas +06: Willow: orange weeping tree, thick trunk but narrow overall. sparse leaves make it best for dirt / desert but would be good for wetland if thicker leaves +07: Weeper: grey thin conical trunk. weeping branches, lower branches root down. Good for mangrove style (turqoise) or pink flowers elsewhere +08: Crowsnest: red-grey thick conical trunk. branches all clustered at the top and then feather. good for hot dry climates +09: Baobob: yellow-grey very thick conical trunk. branches near the top are thick and spikey +dead-dry-hairy-tree: red tint, twisted trunk, horizontal, feahtery limbs +dead-grey-trunk: desaturated yellow, slightly twisted trunk, stubby limbs, horizontal and vertical +dead-tree-desert: red tinge, angular reachign branches, slender trunk, vertical +dry-hairy-tree: brown, weeping feathery limbs, slightly twisted trunk, branches early, vertical +dry-tree: a brown stump, few stubby branches, vertical +green-coral: stubby green coral. + +Tree implementation: +each tree needs a "-stump" of type corpse +typrically the first tree is called "tree-##" + but the subsequent trees are given an identifier "tree-##-red" +The vanilla trees are: +( temp_opt, temp_range, water_optimal, water_range, static_influence, tree_noise_influence ) + tree_autoplace(30, 5, 0.75, 0.25), +tree-01, 25~35, 0.5~1, olive green, yellow - desert edges +tree-02, 10~24, 0.55~0.75, lightish green - near desert edges +tree-02-red, 10~24, 0.4~0.5, -0.25 rare, yellow, red, green, multicolored pastel trees, small clumps in the desert +tree-03, 20~30, 0.7~0.9, light green, brown, yellow, red +tree-04, 5~19, 0.4~0.8, -0.5 rare, dark bluish green, likes mud and grass +tree-05, 5~19, 0.6~1, bright green, likes moisture +tree-06, 9~35, 0.05~0.15, brown/green, sparse +tree-06-brown, 9~35, 0.05~0.15, brownish-orange-light, sparse +tree-07, 15~35, 0.15~0.25, yellow/brownish-almost-green, sparse +tree-08, 15~25, 0.0~0.2, -1 rare, green-yellow, orange-brown, reddish, - for desert +tree-08-brown, 15~25, 0.0~0.2, -0.99 rare, - orange / brownish-light - for desert +tree-08-red, -10~0, 0.0~0.1, -5 rare, - reddish - for desert +tree-09-brown, 15~35, 0.15~0.25, -0.5 rare, greenish / brownish/ reddish -light- for desert +tree-09, 25~35, 0.4~0.5, -0.21 rare, dark green +tree-09-red, 5~25, 0.15~0.25, -0.5 rare, red - for green-grass + +Wet Trees (01, 06, 07) +Temperate Trees (02, 03, 04, 05) +Dirt Trees (02, 03, 04, 05) +Desert trees (0.8 and 0.9, maybe 04) + +Tree plans: +Temperature and aux control color. Extreme aux values can also push trees to only certain areas +Moisture controls type +Elevation could also be used in some cases (palm trees) +Moisture blocks: +Desert 0~0.4, Dirt 0.4~0.6, Dirt/Grass border 0.6~0.8, Deep grass, 0.8~1 +above values may need to change so use table for M1, M2, M3, M4 + +By Biome (there will be some overlap) + +Green: + Light desaturated green + bright green (low aux) + Dark green + +Olive: + Dark green + Orange and brown + +Yellow: + Orange + Bright Green (low aux) + Greeny Brown + +Orange: + Bright yellow (low aux) + Red + Brown + +Red: + Orange, Red, Yellow + +Purple: + Deep purple + Pastel Purple (high aux) + +Violet: + Magenta (high aux) + Burgundy (high aux) + Pastel pink + +Blue: + Pastel Blue + Deep Blue (high aux) + Cyan (high aux) + +Turqoise: + Turqoise connifer + Teal (high aux) + Weeping dark green + +Desert trees +Pink desert trees +Red desert trees +orange desert trees +Yellow desert trees +brown desert trees +green desert trees +dark green desert trees +Dark red desert trees +dark purple desert trees + +dark green near-snow snow trees +dark turqoise near-snow snow trees +white snow trees + +palm trees (use base 7 or 8 for now) + +Color options: +Pick 2-X color options +take the first (primary) option and make a slightly darker duplicate +for each color, step 2/3 to each other color +exclude duplicates +repeat until 32 colors are there +]]-- diff --git a/alien-biomes/prototypes/entity/tree-stump.lua b/alien-biomes/prototypes/entity/tree-stump.lua new file mode 100644 index 00000000..a817fca6 --- /dev/null +++ b/alien-biomes/prototypes/entity/tree-stump.lua @@ -0,0 +1,2231 @@ + +data:extend({ + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-a-trunk.png", + frame_count = 1, + height = 150, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 298, + scale = 0.5, + shift = { + 0.953125, + -1.171875 + }, + width = 354, + x = 1416 + }, + shift = { + 0.921875, + -1.1875 + }, + width = 177, + x = 708 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-b-trunk.png", + frame_count = 1, + height = 149, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 298, + scale = 0.5, + shift = { + 1.5625, + -1.25 + }, + width = 358, + x = 1432 + }, + shift = { + 1.546875, + -1.265625 + }, + width = 179, + x = 716 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-c-trunk.png", + frame_count = 1, + height = 146, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 291, + scale = 0.5, + shift = { + 1.6328125, + -1.0546875 + }, + width = 313, + x = 1252 + }, + shift = { + 1.625, + -1.0625 + }, + width = 156, + x = 624 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-d-trunk.png", + frame_count = 1, + height = 152, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 302, + scale = 0.5, + shift = { + 1.7265625, + -1.078125 + }, + width = 351, + x = 1404 + }, + shift = { + 1.71875, + -1.09375 + }, + width = 176, + x = 704 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-e-trunk.png", + frame_count = 1, + height = 141, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 281, + scale = 0.5, + shift = { + 1.765625, + -1.0859375 + }, + width = 346, + x = 1384 + }, + shift = { + 1.75, + -1.109375 + }, + width = 174, + x = 696 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-f-trunk.png", + frame_count = 1, + height = 141, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 280, + scale = 0.5, + shift = { + 1.328125, + -0.6875 + }, + width = 350, + x = 1400 + }, + shift = { + 1.3125, + -0.703125 + }, + width = 176, + x = 704 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-g-trunk.png", + frame_count = 1, + height = 150, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 301, + scale = 0.5, + shift = { + 0.640625, + -0.7421875 + }, + width = 328, + x = 1312 + }, + shift = { + 0.625, + -0.75 + }, + width = 164, + x = 656 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-h-trunk.png", + frame_count = 1, + height = 144, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-h-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 288, + scale = 0.5, + shift = { + 0.84375, + -1.015625 + }, + width = 360, + x = 1440 + }, + shift = { + 0.828125, + -1.03125 + }, + width = 181, + x = 724 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-i-trunk.png", + frame_count = 1, + height = 162, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-i-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 323, + scale = 0.5, + shift = { + 1.3046875, + -0.6640625 + }, + width = 329, + x = 1316 + }, + shift = { + 1.296875, + -0.6875 + }, + width = 165, + x = 660 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/tree-oaktapus-j-trunk.png", + frame_count = 1, + height = 115, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/oaktapus/hr-tree-oaktapus-j-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 229, + scale = 0.5, + shift = { + 1.109375, + -0.9140625 + }, + width = 264, + x = 1056 + }, + shift = { + 1.09375, + -0.921875 + }, + width = 132, + x = 528 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-oaktapus-stump.png", + icon_size = 32, + name = "tree-oaktapus-stump", + order = "d[remnants]-b[tree]-a[tree-oaktapus]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-a-trunk.png", + frame_count = 1, + height = 169, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/hr-tree-greypine-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 340, + scale = 0.5, + shift = { + 1.921875, + -1.484375 + }, + width = 448, + x = 1792 + }, + shift = { + 1.921875, + -1.453125 + }, + width = 225, + x = 900 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-b-trunk.png", + frame_count = 1, + height = 193, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/hr-tree-greypine-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 385, + scale = 0.5, + shift = { + 1, + -1.3515625 + }, + width = 558, + x = 2232 + }, + shift = { + 0.984375, + -1.359375 + }, + width = 279, + x = 1116 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-c-trunk.png", + frame_count = 1, + height = 188, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/hr-tree-greypine-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 377, + scale = 0.5, + shift = { + 2.1640625, + -1.5859375 + }, + width = 499, + x = 1996 + }, + shift = { + 2.171875, + -1.59375 + }, + width = 249, + x = 996 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-d-trunk.png", + frame_count = 1, + height = 187, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/hr-tree-greypine-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 374, + scale = 0.5, + shift = { + 2.8203125, + -1.59375 + }, + width = 541, + x = 2164 + }, + shift = { + 2.828125, + -1.578125 + }, + width = 271, + x = 1084 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/tree-greypine-e-trunk.png", + frame_count = 1, + height = 191, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/greypine/hr-tree-greypine-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 381, + scale = 0.5, + shift = { + 2.296875, + -1.4453125 + }, + width = 512, + x = 2048 + }, + shift = { + 2.28125, + -1.453125 + }, + width = 256, + x = 1024 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-greypine-stump.png", + icon_size = 32, + name = "tree-greypine-stump", + order = "d[remnants]-b[tree]-b[tree-greypine]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-a-trunk.png", + frame_count = 1, + height = 156, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 312, + scale = 0.5, + shift = { + 2.2734375, + -1.40625 + }, + width = 487, + x = 1948 + }, + shift = { + 2.265625, + -1.40625 + }, + width = 243, + x = 972 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-b-trunk.png", + frame_count = 1, + height = 124, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 246, + scale = 0.5, + shift = { + 1.5625, + -1.21875 + }, + width = 324, + x = 1296 + }, + shift = { + 1.5625, + -1.21875 + }, + width = 162, + x = 648 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-c-trunk.png", + frame_count = 1, + height = 169, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 337, + scale = 0.5, + shift = { + 1.8671875, + -1.6015625 + }, + width = 387, + x = 1548 + }, + shift = { + 1.859375, + -1.609375 + }, + width = 193, + x = 772 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-d-trunk.png", + frame_count = 1, + height = 169, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 337, + scale = 0.5, + shift = { + 2.0234375, + -1.6796875 + }, + width = 473, + x = 1892 + }, + shift = { + 2.03125, + -1.671875 + }, + width = 236, + x = 944 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-e-trunk.png", + frame_count = 1, + height = 143, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 285, + scale = 0.5, + shift = { + 1.84375, + -1.5234375 + }, + width = 516, + x = 2064 + }, + shift = { + 1.84375, + -1.515625 + }, + width = 258, + x = 1032 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-f-trunk.png", + frame_count = 1, + height = 158, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 315, + scale = 0.5, + shift = { + 1.5234375, + -1.3671875 + }, + width = 427, + x = 1708 + }, + shift = { + 1.515625, + -1.375 + }, + width = 213, + x = 852 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/tree-ash-g-trunk.png", + frame_count = 1, + height = 149, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/ash/hr-tree-ash-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 299, + scale = 0.5, + shift = { + 1.25, + -1.1015625 + }, + width = 352, + x = 1408 + }, + shift = { + 1.25, + -1.078125 + }, + width = 176, + x = 704 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-ash-stump.png", + icon_size = 32, + name = "tree-ash-stump", + order = "d[remnants]-b[tree]-c[tree-ash]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-a-trunk.png", + frame_count = 1, + height = 170, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 340, + scale = 0.5, + shift = { + 2.4609375, + -1.546875 + }, + width = 508, + x = 2036 + }, + shift = { + 2.453125, + -1.5625 + }, + width = 254, + x = 1018 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-b-trunk.png", + frame_count = 1, + height = 168, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 336, + scale = 0.5, + shift = { + 2.1953125, + -1.421875 + }, + width = 463, + x = 1852 + }, + shift = { + 2.171875, + -1.4375 + }, + width = 231, + x = 924 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-c-trunk.png", + frame_count = 1, + height = 176, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 351, + scale = 0.5, + shift = { + 2.890625, + -1.4765625 + }, + width = 530, + x = 2120 + }, + shift = { + 2.890625, + -1.46875 + }, + width = 265, + x = 1060 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-d-trunk.png", + frame_count = 1, + height = 173, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 348, + scale = 0.5, + shift = { + 2.7734375, + -1.453125 + }, + width = 544, + x = 2180 + }, + shift = { + 2.765625, + -1.453125 + }, + width = 272, + x = 1090 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-e-trunk.png", + frame_count = 1, + height = 182, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 364, + scale = 0.5, + shift = { + 1.984375, + -1.5859375 + }, + width = 492, + x = 1968, + y = 0 + }, + shift = { + 1.96875, + -1.609375 + }, + width = 246, + x = 984 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-f-trunk.png", + frame_count = 1, + height = 190, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 380, + scale = 0.5, + shift = { + 2.703125, + -1.59375 + }, + width = 520, + x = 2080 + }, + shift = { + 2.6875, + -1.59375 + }, + width = 260, + x = 1040 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-g-trunk.png", + frame_count = 1, + height = 176, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 352, + scale = 0.5, + shift = { + 2.578125, + -1.1328125 + }, + width = 522, + x = 2088 + }, + shift = { + 2.5625, + -1.140625 + }, + width = 260, + x = 1040 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/tree-scarecrow-h-trunk.png", + frame_count = 1, + height = 169, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/scarecrow/hr-tree-scarecrow-h-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 340, + scale = 0.5, + shift = { + 2.4140625, + -1.109375 + }, + width = 504, + x = 2020 + }, + shift = { + 2.390625, + -1.109375 + }, + width = 252, + x = 1010 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-scarecrow-stump.png", + icon_size = 32, + name = "tree-scarecrow-stump", + order = "d[remnants]-b[tree]-d[tree-scarecrow]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-a-trunk.png", + frame_count = 1, + height = 142, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 284, + scale = 0.5, + shift = { + 1.7265625, + -1.03125 + }, + width = 419, + x = 1676 + }, + shift = { + 1.71875, + -1.03125 + }, + width = 210, + x = 840 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-b-trunk.png", + frame_count = 1, + height = 129, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 259, + scale = 0.5, + shift = { + 1.859375, + -0.9140625 + }, + width = 394, + x = 1576 + }, + shift = { + 1.84375, + -0.921875 + }, + width = 198, + x = 792 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-c-trunk.png", + frame_count = 1, + height = 138, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 276, + scale = 0.5, + shift = { + 1.7734375, + -1.03125 + }, + width = 375, + x = 1500 + }, + shift = { + 1.765625, + -1.03125 + }, + width = 187, + x = 748 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-d-trunk.png", + frame_count = 1, + height = 138, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 275, + scale = 0.5, + shift = { + 1.78125, + -0.7109375 + }, + width = 412, + x = 1648 + }, + shift = { + 1.78125, + -0.71875 + }, + width = 206, + x = 824 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-e-trunk.png", + frame_count = 1, + height = 129, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 258, + scale = 0.5, + shift = { + 1.2890625, + -0.609375 + }, + width = 369, + x = 1476 + }, + shift = { + 1.265625, + -0.609375 + }, + width = 185, + x = 740 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-f-trunk.png", + frame_count = 1, + height = 145, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 291, + scale = 0.5, + shift = { + 1.3671875, + -1.1328125 + }, + width = 375, + x = 1500 + }, + shift = { + 1.34375, + -1.140625 + }, + width = 188, + x = 752 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-g-trunk.png", + frame_count = 1, + height = 108, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 216, + scale = 0.5, + shift = { + 1.703125, + -0.515625 + }, + width = 362, + x = 1448 + }, + shift = { + 1.6875, + -0.53125 + }, + width = 182, + x = 728 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-h-trunk.png", + frame_count = 1, + height = 119, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-h-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 240, + scale = 0.5, + shift = { + 1.421875, + -0.546875 + }, + width = 330, + x = 1320 + }, + shift = { + 1.40625, + -0.546875 + }, + width = 164, + x = 656 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/tree-specter-i-trunk.png", + frame_count = 1, + height = 111, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/specter/hr-tree-specter-i-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 221, + scale = 0.5, + shift = { + 1.21875, + -0.2890625 + }, + width = 352, + x = 1408 + }, + shift = { + 1.203125, + -0.296875 + }, + width = 175, + x = 700 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-specter-stump.png", + icon_size = 32, + name = "tree-specter-stump", + order = "d[remnants]-b[tree]-e[tree-specter]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-a-trunk.png", + frame_count = 1, + height = 144, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 289, + scale = 0.5, + shift = { + 1.859375, + -1.0546875 + }, + width = 356, + x = 1424 + }, + shift = { + 1.875, + -1.0625 + }, + width = 178, + x = 712 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-b-trunk.png", + frame_count = 1, + height = 129, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 258, + scale = 0.5, + shift = { + 1.9140625, + -0.71875 + }, + width = 375, + x = 1500 + }, + shift = { + 1.90625, + -0.734375 + }, + width = 188, + x = 752 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-c-trunk.png", + frame_count = 1, + height = 107, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 214, + scale = 0.5, + shift = { + 1.6328125, + -0.390625 + }, + width = 403, + x = 1612 + }, + shift = { + 1.625, + -0.390625 + }, + width = 202, + x = 808 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-d-trunk.png", + frame_count = 1, + height = 130, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 259, + scale = 0.5, + shift = { + 1.0703125, + -0.5234375 + }, + width = 343, + x = 1372 + }, + shift = { + 1.0625, + -0.53125 + }, + width = 172, + x = 688 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-e-trunk.png", + frame_count = 1, + height = 144, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 287, + scale = 0.5, + shift = { + 0.5625, + -0.8828125 + }, + width = 280, + x = 1120 + }, + shift = { + 0.5625, + -0.875 + }, + width = 140, + x = 560 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-f-trunk.png", + frame_count = 1, + height = 136, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 272, + scale = 0.5, + shift = { + 0.9609375, + -1.125 + }, + width = 371, + x = 1484 + }, + shift = { + 0.96875, + -1.125 + }, + width = 186, + x = 744 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-g-trunk.png", + frame_count = 1, + height = 133, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 268, + scale = 0.5, + shift = { + 1.34375, + -1.09375 + }, + width = 402, + x = 1608 + }, + shift = { + 1.34375, + -1.078125 + }, + width = 202, + x = 808 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-h-trunk.png", + frame_count = 1, + height = 129, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-h-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 258, + scale = 0.5, + shift = { + 1.5390625, + -1.078125 + }, + width = 347, + x = 1388 + }, + shift = { + 1.546875, + -1.078125 + }, + width = 173, + x = 692 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-i-trunk.png", + frame_count = 1, + height = 129, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-i-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 259, + scale = 0.5, + shift = { + 0.3984375, + -0.4609375 + }, + width = 253, + x = 1012 + }, + shift = { + 0.390625, + -0.453125 + }, + width = 127, + x = 508 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/tree-willow-j-trunk.png", + frame_count = 1, + height = 126, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/willow/hr-tree-willow-j-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 253, + scale = 0.5, + shift = { + 0.6875, + -0.5234375 + }, + width = 272, + x = 1088 + }, + shift = { + 0.6875, + -0.53125 + }, + width = 136, + x = 544 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-willow-stump.png", + icon_size = 32, + name = "tree-willow-stump", + order = "d[remnants]-b[tree]-f[tree-willow]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-a-trunk.png", + frame_count = 1, + height = 122, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 244, + scale = 0.5, + shift = { + 1.96875, + -0.640625 + }, + width = 362, + x = 1448 + }, + shift = { + 1.953125, + -0.65625 + }, + width = 181, + x = 724 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-b-trunk.png", + frame_count = 1, + height = 120, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 239, + scale = 0.5, + shift = { + 1.2109375, + -1.1171875 + }, + width = 335, + x = 1340 + }, + shift = { + 1.203125, + -1.125 + }, + width = 167, + x = 668 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-c-trunk.png", + frame_count = 1, + height = 128, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 256, + scale = 0.5, + shift = { + 1.03125, + -1.453125 + }, + width = 334, + x = 1336 + }, + shift = { + 1.015625, + -1.46875 + }, + width = 167, + x = 668 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-d-trunk.png", + frame_count = 1, + height = 158, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 314, + scale = 0.5, + shift = { + 1.546875, + -1.484375 + }, + width = 368, + x = 1472 + }, + shift = { + 1.53125, + -1.5 + }, + width = 184, + x = 736 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-e-trunk.png", + frame_count = 1, + height = 143, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 286, + scale = 0.5, + shift = { + 2.2578125, + -1.703125 + }, + width = 405, + x = 1620 + }, + shift = { + 2.25, + -1.734375 + }, + width = 202, + x = 808 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-f-trunk.png", + frame_count = 1, + height = 135, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-f-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 270, + scale = 0.5, + shift = { + 2.5234375, + -1.53125 + }, + width = 435, + x = 1740 + }, + shift = { + 2.53125, + -1.546875 + }, + width = 218, + x = 872 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-g-trunk.png", + frame_count = 1, + height = 121, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-g-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 240, + scale = 0.5, + shift = { + 2.484375, + -1.125 + }, + width = 426, + x = 1704 + }, + shift = { + 2.484375, + -1.140625 + }, + width = 213, + x = 852 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/tree-mangrove-h-trunk.png", + frame_count = 1, + height = 121, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/mangrove/hr-tree-mangrove-h-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 243, + scale = 0.5, + shift = { + 2.3203125, + -0.6640625 + }, + width = 397, + x = 1588 + }, + shift = { + 2.3125, + -0.671875 + }, + width = 198, + x = 792 + }, + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-mangrove-stump.png", + icon_size = 32, + name = "tree-mangrove-stump", + order = "d[remnants]-b[tree]-g[tree-mangrove]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-a-trunk.png", + frame_count = 1, + height = 140, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/hr-tree-pear-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 279, + scale = 0.5, + shift = { + 1.7421875, + -1.0546875 + }, + width = 399, + x = 1596 + }, + shift = { + 1.71875, + -1.0625 + }, + width = 200, + x = 800 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-b-trunk.png", + frame_count = 1, + height = 139, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/hr-tree-pear-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 277, + scale = 0.5, + shift = { + 1.796875, + -0.9453125 + }, + width = 426, + x = 1704 + }, + shift = { + 1.796875, + -0.953125 + }, + width = 213, + x = 852 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-c-trunk.png", + frame_count = 1, + height = 136, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/hr-tree-pear-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 271, + scale = 0.5, + shift = { + 2.0546875, + -1.1171875 + }, + width = 377, + x = 1508 + }, + shift = { + 2.03125, + -1.125 + }, + width = 188, + x = 752 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-d-trunk.png", + frame_count = 1, + height = 134, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/hr-tree-pear-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 267, + scale = 0.5, + shift = { + 1.953125, + -1.2109375 + }, + width = 424, + x = 1696 + }, + shift = { + 1.9375, + -1.21875 + }, + width = 212, + x = 848 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/tree-pear-e-trunk.png", + frame_count = 1, + height = 147, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/pear/hr-tree-pear-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 295, + scale = 0.5, + shift = { + 1.71875, + -1.0390625 + }, + width = 416, + x = 1664 + }, + shift = { + 1.71875, + -1.046875 + }, + width = 208, + x = 832 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-pear-stump.png", + icon_size = 32, + name = "tree-pear-stump", + order = "d[remnants]-b[tree]-h[tree-pear]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + { + animation = { + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-a-trunk.png", + frame_count = 1, + height = 170, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/hr-tree-baobab-a-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 340, + scale = 0.5, + shift = { + 2.0703125, + -1.140625 + }, + width = 487, + x = 1948 + }, + shift = { + 2.046875, + -1.15625 + }, + width = 243, + x = 972 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-b-trunk.png", + frame_count = 1, + height = 150, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/hr-tree-baobab-b-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 300, + scale = 0.5, + shift = { + 1.6640625, + -1.109375 + }, + width = 415, + x = 1660 + }, + shift = { + 1.65625, + -1.125 + }, + width = 208, + x = 832 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-c-trunk.png", + frame_count = 1, + height = 167, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/hr-tree-baobab-c-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 333, + scale = 0.5, + shift = { + 1.765625, + -1.1640625 + }, + width = 476, + x = 1904 + }, + shift = { + 1.75, + -1.171875 + }, + width = 238, + x = 952 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-d-trunk.png", + frame_count = 1, + height = 116, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/hr-tree-baobab-d-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 233, + scale = 0.5, + shift = { + 1.4375, + -0.9921875 + }, + width = 338, + x = 1352 + }, + shift = { + 1.421875, + -1 + }, + width = 169, + x = 676 + }, + { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/tree-baobab-e-trunk.png", + frame_count = 1, + height = 157, + hr_version = { + direction_count = 1, + filename = "__alien-biomes__/graphics/entity/tree/baobab/hr-tree-baobab-e-trunk.png", + flags = { + "mipmap" + }, + frame_count = 1, + height = 315, + scale = 0.5, + shift = { + 1.9765625, + -1.1953125 + }, + width = 403, + x = 1612 + }, + shift = { + 1.96875, + -1.203125 + }, + width = 202, + x = 808 + } + }, + collision_box = { + { + -0.4, + -0.4 + }, + { + 0.4, + 0.4 + } + }, + final_render_layer = "remnants", + flags = { + "placeable-neutral", + "not-on-map" + }, + icon = "__alien-biomes__/graphics/icons/tree-baobab-stump.png", + icon_size = 32, + name = "tree-baobab-stump", + order = "d[remnants]-b[tree]-i[tree-baobab]", + selectable_in_game = false, + selection_box = { + { + -0.5, + -0.5 + }, + { + 0.5, + 0.5 + } + }, + subgroup = "remnants", + tile_height = 1, + tile_width = 1, + time_before_removed = 54000, + type = "corpse" + }, + }) diff --git a/alien-biomes/prototypes/entity/trees.lua b/alien-biomes/prototypes/entity/trees.lua new file mode 100644 index 00000000..78c1f08c --- /dev/null +++ b/alien-biomes/prototypes/entity/trees.lua @@ -0,0 +1,320 @@ +--local inspect = require('inspect') +require('tree-stump') + +local util = require('util') +local merge = util.merge +local tree_models = require('tree-models') +local color_limit = 32 +local starting_area_clearing_radius = 64 +local starting_area_clearing_border_width = 32 + +local function index_to_letter(index, starting_at) + return string.char(string.byte(starting_at or "a", 1) - 1 + index) +end + +-- disable existing trees +for _, tree in pairs(data.raw.tree) do + if not string.find(tree.name, "rubber", 1, true) then + tree.autoplace = nil + end +end + +local water_bands = { + [1] = {0.2, 0.4}, + [2] = {0.4, 0.6}, + [3] = {0.6, 0.9}, + [4] = {0.9, 1.1}, +} + +local function map_temperature(input) + -- range is currently 0 - 100 + return input * 100 +end + +local starting_area_clearing_peak = { + influence = -0.25, + richness_influence = 0, + distance_optimal = 0, + distance_range = starting_area_clearing_radius - starting_area_clearing_border_width, + distance_max_range = starting_area_clearing_radius + starting_area_clearing_border_width, + distance_top_property_limit = starting_area_clearing_radius, -- must be halfway between range and max_range so that influence never becomes positive! +} + +local next_tree_noise_layer_number = 1 + +-- static_influence is added +-- tree_noise_influence is multiplied by tree noise, the result of which is added +local function tree_autoplace(treedata) + + local dimensions_peak = { + influence = 1, + richness_influence = 0.25, + } + + if treedata.water_band then + treedata.water_low = water_bands[treedata.water_band][1] + treedata.water_high = water_bands[treedata.water_band][1] + end + if treedata.water_low and treedata.water_high then + dimensions_peak.water_optimal = (treedata.water_low + treedata.water_high) * 0.5 + dimensions_peak.water_range = (treedata.water_high - treedata.water_low) * 0.5 + dimensions_peak.water_max_range = (treedata.water_high - treedata.water_low) * 0.5 + 0.05 + end + + if treedata.temperature_low and treedata.temperature_high then + local temp_low = map_temperature(treedata.temperature_low) + local temp_high = map_temperature(treedata.temperature_high) + dimensions_peak.temperature_optimal = (temp_low + temp_high) * 0.5 + dimensions_peak.temperature_range = (temp_high - temp_low) * 0.5 + dimensions_peak.temperature_max_range = (temp_high - temp_low) * 0.5 + 0.05 + end + + if treedata.aux_low and treedata.aux_high then + local aux_low = treedata.aux_low + local aux_high = treedata.aux_high + dimensions_peak.aux_optimal = (aux_low + aux_high) * 0.5 + dimensions_peak.aux_range = (aux_high - aux_low) * 0.5 + dimensions_peak.aux_max_range = (aux_high - aux_low) * 0.5 + 0.05 + end + + if treedata.elevation_low and treedata.elevation_high then + dimensions_peak.elevation_optimal = (treedata.elevation_low + treedata.elevation_high) * 0.5 + dimensions_peak.elevation_range = (treedata.elevation_high - treedata.elevation_low) * 0.5 + dimensions_peak.elevation_max_range = (treedata.elevation_high - treedata.elevation_low) * 0.5 + 0.05 + end + + local tree_noise_influence = 0.65 + local density = (treedata.density or 1) + local static_influence = -1 + treedata.density * 0.1 + local noise_layer_name = treedata.noise + data:extend{{type="noise-layer", name=noise_layer_name}} + + local autoplace = { + control = "trees", + order = "z[tree]-b[forest]", + max_probability = 0.5 * density/4, + random_probability_penalty = 0.02 + 0.01 * (1 - density/4); + sharpness = 0.25, + richness_base = 0.0, -- 0.0, + richness_multiplier = 0.5, + peaks = { + { + -- increase richness everywhere to reduce + -- large groups of unhealthy trees + influence = 0, + richness_influence = 1.2 + }, + { + influence = static_influence, + richness_influence = -static_influence, + }, + { + -- Give each tree type its own noise layer to add some randomness + -- to the boundaries between types of forests. + -- This results in more forest coverage overall so has to be countered + -- with more negative static influence. + max_influence = tree_noise_influence, + influence = tree_noise_influence, + richness_influence = -tree_noise_influence, + noise_layer = noise_layer_name, + noise_persistence = 0.6, + noise_octaves_difference = -0.75 + }, + { + max_influence = tree_noise_influence * 0.7, + influence = tree_noise_influence * 0.7, + richness_influence = -tree_noise_influence, + noise_layer = "trees", + noise_persistence = 0.6, + noise_octaves_difference = -0.65 + }, + dimensions_peak, + starting_area_clearing_peak, + }, + } + --log( treedata.name ) + --log( serpent.block( autoplace, {comment = false, numformat = '%1.8g' } ) ) + local excludes = {"volcanic", "frozen"} + if treedata.water_band and treedata.water_band > 1 then + table.insert(excludes, "sand") + end + autoplace.tile_restriction = treedata.tile_restriction or alien_biomes.list_tiles(alien_biomes.exclude_tags(alien_biomes.all_tiles(), excludes)) + return autoplace +end + +local function clamp_color(value) + return math.min(math.max(value, 0), 255) +end + +local function table_add_color(table, color) + local step = 5 + color.r = clamp_color(math.ceil(color.r/5)*5) + color.g = clamp_color(math.ceil(color.g/5)*5) + color.b = clamp_color(math.ceil(color.b/5)*5) + local key = color.r .. "-" .. color.g .. "-" .. color.b + if not table[key] then + table[key] = color + table.count = table.count + 1 + end +end + +local function lerp_color(color_a, color_b, value) + return { + r = math.ceil(color_a.r + (color_b.r - color_a.r) * value), + b = math.ceil(color_a.b + (color_b.b - color_a.b) * value), + g = math.ceil(color_a.g + (color_b.g - color_a.g) * value), + } +end + +local function expand_colors(all_colors) + local source_colors = table.deepcopy(all_colors) + for color_a_name, color_a in pairs(source_colors) do + for color_b_name, color_b in pairs(source_colors) do + if color_a_name ~= "count" + and color_b_name ~= "count" and + color_a_name ~= color_b_name and + all_colors.count < color_limit then + -- move 1/3 to the new color + table_add_color(all_colors, lerp_color(color_a, color_b, 1/3) ) + end + end + end +end + +local function lighten_color() + +end + +local function negate_channel(color, negate) + -- the darker the negate the bigger the step needed towards white + return math.ceil((1 - (1 - color / 255) * negate / 255) * 255) +end + +local function make_tree(treedata) + local all_colors = { count = 0 } + for _, color in pairs(treedata.colors) do + if treedata.negate_tint then + table_add_color(all_colors, { + r = negate_channel(color.r, treedata.negate_tint.r), + g = negate_channel(color.g, treedata.negate_tint.g), + b = negate_channel(color.b, treedata.negate_tint.b) + }) + else + table_add_color(all_colors, color) + end + end + -- brown + if treedata.model ~= "palm" then + table_add_color(all_colors, {r = 75, g = 60, b = 40,}) + end + + + local step = 0 + while (all_colors.count < color_limit) and (step < 8) do + step = step + 1 + expand_colors(all_colors) + end + + -- get colors array + local colors = {} + for _, color in pairs(all_colors) do + if _ ~= "count" then + table.insert(colors, color) + end + end + if tree_models[treedata.model] then + treedata.model = tree_models[treedata.model] + local ab = treedata.model.alien_biomes_texture == true + local tree = { + type = "tree", + name = treedata.name, + --icon = ab and "__base__/graphics/icons/tree-01.png" or "__base__/graphics/icons/tree-" .. treedata.model.type_name .. ".png", + icons = { + {icon = "__alien-biomes__/graphics/icons/tree-" .. treedata.model.type_name .. "-trunk.png", icon_size = 64 }, + {icon = "__alien-biomes__/graphics/icons/tree-" .. treedata.model.type_name .. "-leaves.png", icon_size = 64, tint = colors[1] }, + }, + flags = {"placeable-neutral", "placeable-off-grid", "breaths-air"}, + selection_priority = 0, + minable = + { + mining_particle = "wooden-particle", + mining_time = 0.5, + result = "wood", + count = 4 + }, + corpse = treedata.stump or ("tree-" .. treedata.model.type_name .. "-stump"), + remains_when_mined = treedata.stump or ("tree-" .. treedata.model.type_name .. "-stump"), + emissions_per_second = -0.0015,-- -0.001, + max_health = 20, + collision_box = {{-0.4, -0.4}, {0.4, 0.4}}, --{{-1/32, -1/32}, {1/32, 1/32}}, + selection_box = treedata.selection_box or {{-0.9, -2.2}, {0.9, 0.6}}, + drawing_box = treedata.model.drawing_box, + subgroup = "trees", + order = "a[tree]-b[alien-biomes]-a[" .. treedata.name .. "]", + vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 }, + autoplace = tree_autoplace(treedata), + variations = treedata.model.tree_variations, + colors = colors, + darkness_of_burnt_tree = 0.5, + localised_name = { "alien-biomes.ab-tree", {"alien-biomes."..treedata.locale}, {"alien-biomes."..treedata.model.locale}}, + variation_weights = treedata.variation_weights, + } + data:extend({tree}) + else + log( "Tree model load error:" ) + log( serpent.block( treedata, {comment = false, numformat = '%1.8g' } ) ) + end +end + + +local trees_data = require('tree-data') + +for _, treedata in pairs(trees_data) do + if not (treedata.enabled == false) then + make_tree(treedata) + end +end +--data.raw.tree["tree-wetland-c"].variations = data.raw.tree["tree-05"].variations + +local not_extreme = alien_biomes.list_tiles(alien_biomes.exclude_tags(alien_biomes.all_tiles(), {"frozen", "volcanic"})) +local not_super_extreme = alien_biomes.list_tiles(alien_biomes.exclude_tags(alien_biomes.all_tiles(), {"heat-4", "heat-3", "ice"})) + +local deadtrees = { + ["dry-hairy-tree"] = {water_optimal = 0.8, tile_restriction = not_extreme}, + ["dead-grey-trunk"] = {water_optimal = 0.7, tile_restriction = not_extreme}, + ["dead-dry-hairy-tree"] = {water_optimal = 0.6, tile_restriction = not_extreme}, + ["dead-tree-desert"] = {water_optimal = 0.5, tile_restriction = not_extreme}, + ["dry-tree"] = {water_optimal = 0.4, tile_restriction = not_super_extreme}, +} + +for _, tree_data in pairs(deadtrees) do + data.raw.tree[_].autoplace = + { + control = "trees", + max_probability = 0.01, + order = "z[tree]-b[forest]", + peaks = { + { + influence = -0.7, + richness_influence = 0 + }, + { + influence = 1, + noise_layer = "trees", + noise_octaves_difference = -1.5, + noise_persistence = 0.5, + richness_influence = 0 + }, + { + influence = 1, + richness_influence = 0, + water_optimal = tree_data.water_optimal, + water_max_range = 0.4, + water_range = 0.3 + } + }, + random_probability_penalty = 0.01, + sharpness = 0.6, + tile_restriction = table.deepcopy(tree_data.tile_restriction) + } +end diff --git a/alien-biomes/prototypes/noise-layers.lua b/alien-biomes/prototypes/noise-layers.lua new file mode 100644 index 00000000..8c6e2b60 --- /dev/null +++ b/alien-biomes/prototypes/noise-layers.lua @@ -0,0 +1,12 @@ + +data:extend({ + -- New noise layers + { -- new + type = "noise-layer", + name = "terrain-variation" + }, + { -- new + type = "noise-layer", + name = "water" + } +}) diff --git a/alien-biomes/prototypes/noise-programs.lua b/alien-biomes/prototypes/noise-programs.lua new file mode 100644 index 00000000..13a3bfe1 --- /dev/null +++ b/alien-biomes/prototypes/noise-programs.lua @@ -0,0 +1,242 @@ +local noise = require("noise") +local tne = noise.to_noise_expression + +local function make_basis_noise_function(seed0,seed1,outscale0,inscale0) + outscale0 = outscale0 or 1 + inscale0 = inscale0 or 1/outscale0 + return function(x,y,inscale,outscale) + return tne{ + type = "function-application", + function_name = "factorio-basis-noise", + arguments = { + x = tne(x), + y = tne(y), + seed0 = tne(seed0), + seed1 = tne(seed1), + input_scale = tne((inscale or 1) * inscale0), + output_scale = tne((outscale or 1) * outscale0) + } + } + end +end + +-- Returns a multioctave noise function where each octave's noise is multiplied by some other noise +-- by default 'some other noise' is the basis noise at 17x lower frequency, +-- normalized around 0.5 and clamped between 0 and 1 +local function make_multioctave_modulated_noise_function(params) + local seed0 = params.seed0 or 1 + local seed1 = params.seed1 or 1 + local octave_count = params.octave_count or 1 + local octave0_output_scale = params.octave0_output_scale or 1 + local octave0_input_scale = params.octave0_input_scale or 1 + local octave_output_scale_multiplier = params.octave_output_scale_multiplier or 2 + local octave_input_scale_multiplier = params.octave_input_scale_multiplier or 1/2 + local basis_noise_function = params.basis_noise_function or make_basis_noise_function(seed0, seed1) + local modulation_noise_function = params.modulation_noise_function or function(x,y) + return noise.clamp(basis_noise_function(x,y)+0.5, 0, 1) + end + -- input scale of modulation relative to each octave's base input scale + local mris = params.modulation_relative_input_scale or 1/17 + + return function(x,y) + local outscale = octave0_output_scale + local inscale = octave0_input_scale + local result = 0 + + for i=1,octave_count do + local noise = basis_noise_function(x*inscale, y*inscale) + local modulation = modulation_noise_function(x*(inscale*mris), y*(inscale*mris)) + result = result + (outscale * noise * modulation) + + outscale = outscale * octave_output_scale_multiplier + inscale = inscale * octave_input_scale_multiplier + end + + return result + end +end + +local function make_multioctave_noise_function(seed0,seed1,octaves,octave_output_scale_multiplier,octave_input_scale_multiplier,output_scale0,input_scale0) + octave_output_scale_multiplier = octave_output_scale_multiplier or 2 + octave_input_scale_multiplier = octave_input_scale_multiplier or 1 / octave_output_scale_multiplier + return function(x,y,inscale,outscale) + return tne{ + type = "function-application", + function_name = "factorio-quick-multioctave-noise", + arguments = + { + x = tne(x), + y = tne(y), + seed0 = tne(seed0), + seed1 = tne(seed1), + input_scale = tne((inscale or 1) * (input_scale0 or 1)), + output_scale = tne((outscale or 1) * (output_scale0 or 1)), + octaves = tne(octaves), + octave_output_scale_multiplier = tne(octave_output_scale_multiplier), + octave_input_scale_multiplier = tne(octave_input_scale_multiplier) + } + } + end +end + +-- Inputs to multi-octave noise to replicate 0.15 terrain +-- (ignoring that it won't match due to shifting having changed) +-- Roughness scale=0.125000, seed=9, amplitude=0.325000 +-- Elevation scale=0.500000, seed=8, amplitude=6000.000000 + +-- TODO: Use actual noise layer indexes for seeds instead of hard-coding + +local function clamp_moisture(raw_moisture) + return noise.clamp(raw_moisture, 0, 1) +end + +local function clamp_temperature(raw_temperature) + return noise.clamp(raw_temperature, -20, 150) +end + +local function clamp_aux(raw_aux) + return noise.clamp(raw_aux, 0, 1) +end + +local average_sea_level_temperature = 15 +local elevation_temperature_gradient = 0 -- -0.5 might be a good value to start with if you want to try correlating temperature with elevation + +data:extend({ + { + type = "autoplace-control", + name = "hot", + order = "z-a", + category = "terrain", + richness = true, + }, + { + type = "noise-expression", + name = "control-setting:hot:frequency:multiplier", + expression = noise.to_noise_expression(1) + }, + { + type = "noise-expression", + name = "control-setting:hot:bias", + expression = noise.to_noise_expression(0) + }, + { + type = "autoplace-control", + name = "cold", + order = "z-b", + category = "terrain", + richness = true, + }, + { + type = "noise-expression", + name = "control-setting:cold:frequency:multiplier", + expression = noise.to_noise_expression(1) + }, + { + type = "noise-expression", + name = "control-setting:cold:bias", + expression = noise.to_noise_expression(0) + }, +}) + +data:extend({ + { + type = "noise-expression", + name = "temperature", + intended_property = "temperature", + expression = noise.define_noise_function( function(x,y,tile,map) + + -- values range from 0 to 6 + local cold = noise.get_control_setting("cold").size_multiplier -- 0-6 + local hot = noise.get_control_setting("hot").size_multiplier -- 0-6 + + -- make base noise with the frequencey half of the average of the hot and cold scale + local base_x = x * (noise.var("control-setting:cold:frequency:multiplier") + noise.var("control-setting:hot:frequency:multiplier")) / 2 + local base_y = y * (noise.var("control-setting:cold:frequency:multiplier") + noise.var("control-setting:hot:frequency:multiplier")) / 2 + 40000 + + local average = 50 - 125 * cold / 6 + 125 * hot / 6 -- -5 to 150 + local range = 50 * (noise.clamp(cold, 0, 1) / 2 + cold / 10) + 50 * (noise.clamp(hot, 0, 1) / 2 + hot / 10) + --(seed0,seed1,octaves,octave_output_scale_multiplier = 2,octave_input_scale_multiplier = 1/2,output_scale0 = 1,input_scale0 = 1) + local base = average + range * noise.clamp(0.25 * make_multioctave_noise_function(map.seed, 5, + 11, -- octaves + 1.4, -- octave_output_scale_multiplier + 0.5, -- octave_input_scale_multiplier + 1, -- output_scale0 + 1 -- input_scale0 + )(base_x,base_y,1/32,1/20), -1, 1) + + -- add additional hot and cold spots with their own scales + + local hot_x = x * noise.var("control-setting:hot:frequency:multiplier") + 40000 + local hot_y = y * noise.var("control-setting:hot:frequency:multiplier") + local hotspots = (noise.clamp(hot, 0, 1) / 2 + hot / 10) * 40 * noise.clamp(-0.45 + hot /6 + + make_multioctave_noise_function(map.seed, 5, 10, 1.5, 0.5)(hot_x,hot_y,1/8,1/20), 0, 4) + + local cold_x = x * noise.var("control-setting:cold:frequency:multiplier") - 40000 + local cold_y = y * noise.var("control-setting:cold:frequency:multiplier") + local coldspots = (noise.clamp(cold, 0, 1) / 2 + cold / 10) * 50 * noise.clamp(-0.45 + cold/6 + + make_multioctave_noise_function(map.seed, 5, 10, 1.5, 0.5)(cold_x,cold_y,1/30,1/20), 0, 4) + + --return clamp_temperature(base) + --return clamp_temperature(50 - coldspots + hotspots) + local combined = base - coldspots + hotspots + combined = noise.clamp(combined, -50, 110) -- slice off the lava peaks + local volcanic_area = noise.clamp(combined - 100, 0, 10) + local volcanic_hotspots = noise.clamp(0.5 + make_multioctave_noise_function(map.seed, 5, 6, 1.5, 0.5)(x,y,1,1/20), 0, 10) * volcanic_area * 4 -- 0 - 40 + return clamp_temperature(combined + volcanic_hotspots) + end) + }, + { + type = "noise-expression", + name = "moisture", + intended_property = "moisture", + expression = noise.define_noise_function( function(x,y,tile,map) + x = x * noise.var("control-setting:moisture:frequency:multiplier") + 30000 -- Move the point where 'fractal similarity' is obvious off into the boonies + y = y * noise.var("control-setting:moisture:frequency:multiplier") + local raw_moisture = + 0.5 + + 2.5 * make_multioctave_noise_function(map.seed, 6, 8, 0.5, 3)(x,y,1/2000,1/8) + + 2.2 * noise.var("control-setting:moisture:bias") + return clamp_moisture(raw_moisture) + end) + }, + { + type = "noise-expression", + name = "aux", + intended_property = "aux", + expression = noise.define_noise_function( function(x,y,tile,map) + x = x * noise.var("control-setting:aux:frequency:multiplier") + 20000 -- Move the point where 'fractal similarity' is obvious off into the boonies + y = y * noise.var("control-setting:aux:frequency:multiplier") + local raw_aux = + 0.45 -- slight bias to normal + + 2.2 * make_multioctave_noise_function(map.seed, 7, 8, 0.5, 3)(x,y,1/5000,1/4) + + 2.2 * noise.var("control-setting:aux:bias") + return clamp_aux(raw_aux) + end) + }, + --[[{ + type = "noise-expression", + name = "debug-temperature", + intended_property = "temperature", + expression = noise.define_noise_function( function(x,y,tile,map) + return noise.clamp(50 + y * (1 / 1024) * 200, -50, 150) + end) + }, + { + type = "noise-expression", + name = "debug-moisture", + intended_property = "moisture", + expression = noise.define_noise_function( function(x,y,tile,map) + return clamp_moisture(0.5 + x * (1 / 1024)) + end) + }, + { + type = "noise-expression", + name = "debug-aux", + intended_property = "aux", + expression = noise.define_noise_function( function(x,y,tile,map) + -- Tile peaks tend to be based on aux+water, + -- so let's use the same dimension as temperature for aux + return clamp_aux(0.5 + x * (1 / 1024)) + end) + },]]-- +}) diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-common.lua b/alien-biomes/prototypes/phase-3/collision-common.lua similarity index 98% rename from combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-common.lua rename to alien-biomes/prototypes/phase-3/collision-common.lua index c48e395a..4b6ae517 100644 --- a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-common.lua +++ b/alien-biomes/prototypes/phase-3/collision-common.lua @@ -8,9 +8,10 @@ for _, tile in pairs(data.raw.tile) do end end +-- copies from Space Exploration if data.raw.tile.water and collision_mask_util_extended.mask_contains_layer(data.raw.tile.water.collision_mask, "resource-layer") then table.insert(data.raw.tile.landfill.collision_mask, "resource-layer") -- prevent regenerated ores from spawning on landfill -end +end for _, type in pairs({"car"}) do for _, prototype in pairs(data.raw[type]) do diff --git a/alien-biomes/prototypes/styles.lua b/alien-biomes/prototypes/styles.lua new file mode 100644 index 00000000..f9dfad09 --- /dev/null +++ b/alien-biomes/prototypes/styles.lua @@ -0,0 +1,28 @@ +data.raw["gui-style"]["default"]["alien-biomes-frame"] = +{ + type = "frame_style", + parent = "frame", + maximal_height = 500, +} +data.raw["gui-style"]["default"]["alien-biomes-scroll-pane"] = +{ + type = "scroll_pane_style", + parent = "scroll_pane", + vertical_scroll_bar_spacing = 1, +} +data.raw["gui-style"]["default"]["alien-biomes-textbox"] = +{ + type = "textbox_style", + parent = "textbox", + width = 400, + maximal_width = 400, + single_line = false, +} +data.raw["gui-style"]["default"]["alien-biomes-label-multiline"] = +{ + type = "label_style", + parent = "label", + single_line = false, + width = 390, + maximal_width = 390, +} diff --git a/alien-biomes/prototypes/tile/tile-alias.lua b/alien-biomes/prototypes/tile/tile-alias.lua new file mode 100644 index 00000000..227f9f3c --- /dev/null +++ b/alien-biomes/prototypes/tile/tile-alias.lua @@ -0,0 +1,22 @@ +return { + ["grass-1"] = "vegetation-green-grass-1" , + ["grass-2"] = "vegetation-green-grass-2" , + ["grass-3"] = "vegetation-green-grass-3" , + ["grass-4"] = "vegetation-green-grass-4" , + ["dirt-1"] = "mineral-tan-dirt-1" , + ["dirt-2"] = "mineral-tan-dirt-2" , + ["dirt-3"] = "mineral-tan-dirt-1" , + ["dirt-4"] = "mineral-tan-dirt-2" , + ["dirt-5"] = "mineral-tan-dirt-3" , + ["dirt-6"] = "mineral-tan-dirt-5" , + ["dirt-7"] = "mineral-tan-dirt-4" , + ["dry-dirt"] = "mineral-tan-dirt-6" , + ["red-desert-0"] = "vegetation-olive-grass-2" , + ["red-desert-1"] = "mineral-brown-dirt-1" , + ["red-desert-2"] = "mineral-brown-dirt-5" , + ["red-desert-3"] = "mineral-brown-dirt-6" , + ["sand-1"] = "mineral-brown-sand-1" , + ["sand-2"] = "mineral-brown-sand-1" , + ["sand-3"] = "mineral-brown-sand-2" , + ["sand-4"] = "mineral-brown-sand-3" , +} diff --git a/alien-biomes/prototypes/tile/tile-colors.lua b/alien-biomes/prototypes/tile/tile-colors.lua new file mode 100644 index 00000000..1713f402 --- /dev/null +++ b/alien-biomes/prototypes/tile/tile-colors.lua @@ -0,0 +1,195 @@ +return { + --TODO: this is out of date + ['frozen-snow-0'] = {r = 218, g = 221, b = 230}, + ['frozen-snow-1'] = {r = 215, g = 219, b = 228}, + ['frozen-snow-2'] = {r = 201, g = 206, b = 214}, + ['frozen-snow-3'] = {r = 208, g = 211, b = 219}, + ['frozen-snow-4'] = {r = 193, g = 199, b = 208}, + ['frozen-snow-5'] = {r = 153, g = 170, b = 181}, + ['frozen-snow-6'] = {r = 128, g = 147, b = 162}, + ['frozen-snow-7'] = {r = 139, g = 159, b = 168}, + ['frozen-snow-8'] = {r = 164, g = 178, b = 189}, + ['frozen-snow-9'] = {r = 155, g = 173, b = 184}, + ['mineral-aubergine-dirt-1'] = {r = 61, g = 56, b = 74}, + ['mineral-aubergine-dirt-2'] = {r = 48, g = 43, b = 61}, + ['mineral-aubergine-dirt-3'] = {r = 45, g = 41, b = 55}, + ['mineral-aubergine-dirt-4'] = {r = 49, g = 44, b = 59}, + ['mineral-aubergine-dirt-5'] = {r = 48, g = 44, b = 58}, + ['mineral-aubergine-dirt-6'] = {r = 44, g = 40, b = 54}, + ['mineral-aubergine-dirt-7'] = {r = 46, g = 44, b = 59}, + ['mineral-aubergine-dirt-8'] = {r = 53, g = 48, b = 66}, + ['mineral-aubergine-dirt-9'] = {r = 54, g = 49, b = 66}, + ['mineral-aubergine-sand-1'] = {r = 59, g = 54, b = 79}, + ['mineral-aubergine-sand-2'] = {r = 60, g = 53, b = 80}, + ['mineral-aubergine-sand-3'] = {r = 59, g = 53, b = 75}, + ['mineral-beige-dirt-1'] = {r = 131, g = 118, b = 94}, + ['mineral-beige-dirt-2'] = {r = 108, g = 96, b = 75}, + ['mineral-beige-dirt-3'] = {r = 98, g = 90, b = 75}, + ['mineral-beige-dirt-4'] = {r = 94, g = 86, b = 70}, + ['mineral-beige-dirt-5'] = {r = 91, g = 83, b = 69}, + ['mineral-beige-dirt-6'] = {r = 86, g = 78, b = 63}, + ['mineral-beige-dirt-7'] = {r = 105, g = 96, b = 80}, + ['mineral-beige-dirt-8'] = {r = 120, g = 106, b = 85}, + ['mineral-beige-dirt-9'] = {r = 119, g = 108, b = 88}, + ['mineral-beige-sand-1'] = {r = 139, g = 124, b = 98}, + ['mineral-beige-sand-2'] = {r = 141, g = 126, b = 100}, + ['mineral-beige-sand-3'] = {r = 130, g = 116, b = 91}, + ['mineral-black-dirt-1'] = {r = 59, g = 59, b = 55}, + ['mineral-black-dirt-2'] = {r = 43, g = 44, b = 41}, + ['mineral-black-dirt-3'] = {r = 43, g = 45, b = 45}, + ['mineral-black-dirt-4'] = {r = 43, g = 45, b = 43}, + ['mineral-black-dirt-5'] = {r = 39, g = 40, b = 39}, + ['mineral-black-dirt-6'] = {r = 38, g = 39, b = 38}, + ['mineral-black-dirt-7'] = {r = 41, g = 43, b = 43}, + ['mineral-black-dirt-8'] = {r = 50, g = 51, b = 49}, + ['mineral-black-dirt-9'] = {r = 50, g = 51, b = 49}, + ['mineral-black-sand-1'] = {r = 56, g = 59, b = 56}, + ['mineral-black-sand-2'] = {r = 55, g = 58, b = 56}, + ['mineral-black-sand-3'] = {r = 56, g = 58, b = 55}, + ['mineral-brown-dirt-1'] = {r = 115, g = 81, b = 61}, + ['mineral-brown-dirt-2'] = {r = 90, g = 63, b = 46}, + ['mineral-brown-dirt-3'] = {r = 76, g = 55, b = 43}, + ['mineral-brown-dirt-4'] = {r = 68, g = 48, b = 36}, + ['mineral-brown-dirt-5'] = {r = 70, g = 51, b = 39}, + ['mineral-brown-dirt-6'] = {r = 61, g = 43, b = 31}, + ['mineral-brown-dirt-7'] = {r = 90, g = 68, b = 54}, + ['mineral-brown-dirt-8'] = {r = 103, g = 73, b = 54}, + ['mineral-brown-dirt-9'] = {r = 101, g = 73, b = 55}, + ['mineral-brown-sand-1'] = {r = 125, g = 86, b = 64}, + ['mineral-brown-sand-2'] = {r = 129, g = 90, b = 66}, + ['mineral-brown-sand-3'] = {r = 113, g = 79, b = 59}, + ['mineral-cream-dirt-1'] = {r = 163, g = 153, b = 109}, + ['mineral-cream-dirt-2'] = {r = 136, g = 128, b = 86}, + ['mineral-cream-dirt-3'] = {r = 121, g = 114, b = 84}, + ['mineral-cream-dirt-4'] = {r = 118, g = 110, b = 80}, + ['mineral-cream-dirt-5'] = {r = 111, g = 105, b = 75}, + ['mineral-cream-dirt-6'] = {r = 109, g = 101, b = 71}, + ['mineral-cream-dirt-7'] = {r = 131, g = 124, b = 91}, + ['mineral-cream-dirt-8'] = {r = 150, g = 140, b = 99}, + ['mineral-cream-dirt-9'] = {r = 149, g = 139, b = 101}, + ['mineral-cream-sand-1'] = {r = 175, g = 168, b = 116}, + ['mineral-cream-sand-2'] = {r = 180, g = 173, b = 121}, + ['mineral-cream-sand-3'] = {r = 160, g = 151, b = 105}, + ['mineral-dustyrose-dirt-1'] = {r = 103, g = 81, b = 74}, + ['mineral-dustyrose-dirt-2'] = {r = 79, g = 63, b = 58}, + ['mineral-dustyrose-dirt-3'] = {r = 76, g = 64, b = 63}, + ['mineral-dustyrose-dirt-4'] = {r = 70, g = 60, b = 56}, + ['mineral-dustyrose-dirt-5'] = {r = 71, g = 60, b = 58}, + ['mineral-dustyrose-dirt-6'] = {r = 64, g = 54, b = 51}, + ['mineral-dustyrose-dirt-7'] = {r = 79, g = 68, b = 64}, + ['mineral-dustyrose-dirt-8'] = {r = 89, g = 71, b = 66}, + ['mineral-dustyrose-dirt-9'] = {r = 89, g = 73, b = 68}, + ['mineral-dustyrose-sand-1'] = {r = 103, g = 76, b = 73}, + ['mineral-dustyrose-sand-2'] = {r = 103, g = 78, b = 73}, + ['mineral-dustyrose-sand-3'] = {r = 100, g = 78, b = 71}, + ['mineral-grey-dirt-1'] = {r = 119, g = 120, b = 115}, + ['mineral-grey-dirt-2'] = {r = 96, g = 99, b = 95}, + ['mineral-grey-dirt-3'] = {r = 96, g = 100, b = 100}, + ['mineral-grey-dirt-4'] = {r = 96, g = 100, b = 98}, + ['mineral-grey-dirt-5'] = {r = 90, g = 94, b = 93}, + ['mineral-grey-dirt-6'] = {r = 89, g = 91, b = 89}, + ['mineral-grey-dirt-7'] = {r = 94, g = 98, b = 96}, + ['mineral-grey-dirt-8'] = {r = 108, g = 109, b = 105}, + ['mineral-grey-dirt-9'] = {r = 108, g = 110, b = 108}, + ['mineral-grey-sand-1'] = {r = 116, g = 119, b = 116}, + ['mineral-grey-sand-2'] = {r = 115, g = 118, b = 115}, + ['mineral-grey-sand-3'] = {r = 116, g = 118, b = 115}, + ['mineral-purple-dirt-1'] = {r = 74, g = 73, b = 118}, + ['mineral-purple-dirt-2'] = {r = 56, g = 58, b = 103}, + ['mineral-purple-dirt-3'] = {r = 54, g = 54, b = 85}, + ['mineral-purple-dirt-4'] = {r = 63, g = 61, b = 96}, + ['mineral-purple-dirt-5'] = {r = 69, g = 66, b = 98}, + ['mineral-purple-dirt-6'] = {r = 59, g = 59, b = 91}, + ['mineral-purple-dirt-7'] = {r = 64, g = 68, b = 98}, + ['mineral-purple-dirt-8'] = {r = 61, g = 63, b = 109}, + ['mineral-purple-dirt-9'] = {r = 65, g = 64, b = 106}, + ['mineral-purple-sand-1'] = {r = 65, g = 69, b = 129}, + ['mineral-purple-sand-2'] = {r = 65, g = 65, b = 131}, + ['mineral-purple-sand-3'] = {r = 64, g = 64, b = 121}, + ['mineral-red-dirt-1'] = {r = 124, g = 64, b = 51}, + ['mineral-red-dirt-2'] = {r = 100, g = 49, b = 38}, + ['mineral-red-dirt-3'] = {r = 91, g = 50, b = 41}, + ['mineral-red-dirt-4'] = {r = 75, g = 38, b = 30}, + ['mineral-red-dirt-5'] = {r = 89, g = 50, b = 41}, + ['mineral-red-dirt-6'] = {r = 69, g = 33, b = 25}, + ['mineral-red-dirt-7'] = {r = 106, g = 63, b = 54}, + ['mineral-red-dirt-8'] = {r = 111, g = 56, b = 45}, + ['mineral-red-dirt-9'] = {r = 110, g = 58, b = 46}, + ['mineral-red-sand-1'] = {r = 130, g = 54, b = 46}, + ['mineral-red-sand-2'] = {r = 131, g = 58, b = 45}, + ['mineral-red-sand-3'] = {r = 124, g = 58, b = 46}, + ['mineral-tan-dirt-1'] = {r = 139, g = 105, b = 68}, + ['mineral-tan-dirt-2'] = {r = 114, g = 84, b = 49}, + ['mineral-tan-dirt-3'] = {r = 93, g = 70, b = 44}, + ['mineral-tan-dirt-4'] = {r = 88, g = 65, b = 40}, + ['mineral-tan-dirt-5'] = {r = 84, g = 63, b = 39}, + ['mineral-tan-dirt-6'] = {r = 80, g = 59, b = 34}, + ['mineral-tan-dirt-7'] = {r = 108, g = 83, b = 54}, + ['mineral-tan-dirt-8'] = {r = 126, g = 95, b = 59}, + ['mineral-tan-dirt-9'] = {r = 124, g = 95, b = 61}, + ['mineral-tan-sand-1'] = {r = 153, g = 120, b = 73}, + ['mineral-tan-sand-2'] = {r = 156, g = 125, b = 78}, + ['mineral-tan-sand-3'] = {r = 136, g = 105, b = 64}, + ['mineral-violet-dirt-1'] = {r = 108, g = 68, b = 100}, + ['mineral-violet-dirt-2'] = {r = 89, g = 53, b = 86}, + ['mineral-violet-dirt-3'] = {r = 78, g = 51, b = 73}, + ['mineral-violet-dirt-4'] = {r = 83, g = 54, b = 79}, + ['mineral-violet-dirt-5'] = {r = 88, g = 60, b = 83}, + ['mineral-violet-dirt-6'] = {r = 76, g = 50, b = 75}, + ['mineral-violet-dirt-7'] = {r = 89, g = 61, b = 88}, + ['mineral-violet-dirt-8'] = {r = 95, g = 59, b = 93}, + ['mineral-violet-dirt-9'] = {r = 95, g = 60, b = 90}, + ['mineral-violet-sand-1'] = {r = 110, g = 61, b = 109}, + ['mineral-violet-sand-2'] = {r = 115, g = 63, b = 109}, + ['mineral-violet-sand-3'] = {r = 108, g = 61, b = 103}, + ['mineral-white-dirt-1'] = {r = 165, g = 165, b = 161}, + ['mineral-white-dirt-2'] = {r = 138, g = 140, b = 136}, + ['mineral-white-dirt-3'] = {r = 138, g = 141, b = 141}, + ['mineral-white-dirt-4'] = {r = 139, g = 141, b = 139}, + ['mineral-white-dirt-5'] = {r = 130, g = 133, b = 131}, + ['mineral-white-dirt-6'] = {r = 128, g = 130, b = 128}, + ['mineral-white-dirt-7'] = {r = 136, g = 139, b = 138}, + ['mineral-white-dirt-8'] = {r = 151, g = 153, b = 150}, + ['mineral-white-dirt-9'] = {r = 153, g = 154, b = 153}, + ['mineral-white-sand-1'] = {r = 178, g = 178, b = 173}, + ['mineral-white-sand-2'] = {r = 181, g = 183, b = 178}, + ['mineral-white-sand-3'] = {r = 161, g = 163, b = 159}, + ['vegetation-blue-grass-1'] = {r = 44, g = 51, b = 73}, + ['vegetation-blue-grass-2'] = {r = 44, g = 49, b = 60}, + ['vegetation-green-grass-1'] = {r = 68, g = 61, b = 21}, + ['vegetation-green-grass-2'] = {r = 75, g = 63, b = 25}, + ['vegetation-green-grass-3'] = {r = 69, g = 58, b = 30}, + ['vegetation-green-grass-4'] = {r = 70, g = 53, b = 26}, + ['vegetation-mauve-grass-1'] = {r = 52, g = 45, b = 75}, + ['vegetation-mauve-grass-2'] = {r = 49, g = 40, b = 65}, + ['vegetation-olive-grass-1'] = {r = 91, g = 73, b = 17}, + ['vegetation-olive-grass-2'] = {r = 92, g = 71, b = 24}, + ['vegetation-orange-grass-1'] = {r = 103, g = 56, b = 16}, + ['vegetation-orange-grass-2'] = {r = 98, g = 52, b = 20}, + ['vegetation-purple-grass-1'] = {r = 66, g = 35, b = 80}, + ['vegetation-purple-grass-2'] = {r = 55, g = 26, b = 72}, + ['vegetation-red-grass-1'] = {r = 91, g = 25, b = 18}, + ['vegetation-red-grass-2'] = {r = 88, g = 25, b = 21}, + ['vegetation-turquoise-grass-1'] = {r = 55, g = 56, b = 47}, + ['vegetation-turquoise-grass-2'] = {r = 62, g = 57, b = 40}, + ['vegetation-violet-grass-1'] = {r = 78, g = 30, b = 49}, + ['vegetation-violet-grass-2'] = {r = 71, g = 25, b = 46}, + ['vegetation-yellow-grass-1'] = {r = 116, g = 88, b = 14}, + ['vegetation-yellow-grass-2'] = {r = 109, g = 80, b = 21}, + ['volcanic-blue-heat-1'] = {r = 31, g = 36, b = 36}, + ['volcanic-blue-heat-2'] = {r = 31, g = 38, b = 39}, + ['volcanic-blue-heat-3'] = {r = 24, g = 40, b = 55}, + ['volcanic-blue-heat-4'] = {r = 16, g = 68, b = 126}, + ['volcanic-green-heat-1'] = {r = 34, g = 36, b = 31}, + ['volcanic-green-heat-2'] = {r = 34, g = 39, b = 31}, + ['volcanic-green-heat-3'] = {r = 28, g = 55, b = 24}, + ['volcanic-green-heat-4'] = {r = 24, g = 126, b = 16}, + ['volcanic-orange-heat-1'] = {r = 36, g = 34, b = 31}, + ['volcanic-orange-heat-2'] = {r = 39, g = 34, b = 31}, + ['volcanic-orange-heat-3'] = {r = 55, g = 28, b = 24}, + ['volcanic-orange-heat-4'] = {r = 126, g = 24, b = 16}, + ['volcanic-purple-heat-1'] = {r = 35, g = 31, b = 36}, + ['volcanic-purple-heat-2'] = {r = 36, g = 31, b = 39}, + ['volcanic-purple-heat-3'] = {r = 38, g = 24, b = 55}, + ['volcanic-purple-heat-4'] = {r = 60, g = 16, b = 126}, +} diff --git a/alien-biomes/prototypes/tile/tile-sounds.lua b/alien-biomes/prototypes/tile/tile-sounds.lua new file mode 100644 index 00000000..736ae9bd --- /dev/null +++ b/alien-biomes/prototypes/tile/tile-sounds.lua @@ -0,0 +1,114 @@ +return { + dirt = { + { + filename = "__base__/sound/walking/dirt-02.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/dirt-03.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/dirt-04.ogg", + volume = 0.8 + } + }, + grass = { + { + filename = "__base__/sound/walking/grass-01.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/grass-02.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/grass-03.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/grass-04.ogg", + volume = 0.8 + } + }, + ice = { + { + filename = "__base__/sound/walking/concrete-01.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-02.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-03.ogg", + volume = 1.2 + }, + { + filename = "__base__/sound/walking/concrete-04.ogg", + volume = 1.2 + } + }, + sand = { + { + filename = "__base__/sound/walking/sand-01.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-02.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-03.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-04.ogg", + volume = 0.8 + } + }, + sand = { + { + filename = "__base__/sound/walking/sand-01.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-02.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-03.ogg", + volume = 0.8 + }, + { + filename = "__base__/sound/walking/sand-04.ogg", + volume = 0.8 + } + }, + snow = { + { filename = "__alien-biomes__/sound/walking/snow-01.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-02.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-03.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-04.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-05.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-06.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-07.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-08.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-09.ogg", volume = 0.75 }, + { filename = "__alien-biomes__/sound/walking/snow-10.ogg", volume = 0.75 }, + }, + water = { + { filename = "__alien-biomes__/sound/walking/water-01.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-02.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-03.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-04.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-05.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-06.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-07.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-08.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-09.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-10.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-11.ogg", volume = 0.9 }, + { filename = "__alien-biomes__/sound/walking/water-12.ogg", volume = 0.9 }, + } +} diff --git a/alien-biomes/prototypes/tile/tile-transitions-dynamic.lua b/alien-biomes/prototypes/tile/tile-transitions-dynamic.lua new file mode 100644 index 00000000..055527df --- /dev/null +++ b/alien-biomes/prototypes/tile/tile-transitions-dynamic.lua @@ -0,0 +1,197 @@ +local transitions = {} + + +local tile_noise_enabled = true +local tile_noise_persistence = 0.7 + +local tile_noise_influence = 2/3 +local size_control_influence = 1 +local rectangle_influence = 1 +local beach_influence = 5 +local water_inflike = 4096 + +local default_transition_group_id = 0 +local water_transition_group_id = 1 +local out_of_map_transition_group_id = 2 + +local out_of_map_transition = + make_out_of_map_transition_template + ( + { "out-of-map" }, + "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + { + o_transition_tall = false, + side_count = 8, + inner_corner_count = 4, + outer_corner_count = 4, + u_transition_count = 1, + o_transition_count = 1, + base = init_transition_between_transition_common_options() + }, + false, + true, + true +) +transitions.out_of_map_transition = out_of_map_transition + + +transitions.beach_transitions = +{ + water_transition_template + ( + water_tile_type_names, + "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + { + o_transition_tall = false, + u_transition_tall = false, + side_tall = false, + inner_corner_tall = false, + outer_corner_tall = false, + u_transition_count = 4, + o_transition_count = 8, + --base = init_transition_between_transition_common_options() + } + ), + out_of_map_transition +} + +transitions.beach_transitions_between_transitions = +{ + generic_transition_between_transitions_template + ( + default_transition_group_id, + water_transition_group_id, + "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + { + side_tall = false, + inner_corner_tall = false, + outer_corner_tall = false, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = { water_patch = patch_for_inner_corner_of_transition_between_transition, } + } + ), + make_generic_transition_template + ( + nil, + default_transition_group_id, + out_of_map_transition_group_id, + "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + { + inner_corner_tall = true, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = init_transition_between_transition_common_options() + }, + false, + true, + true + ), + generic_transition_between_transitions_template + ( + water_transition_group_id, + out_of_map_transition_group_id, + "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + { + o_transition_tall = false, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = init_transition_between_transition_common_options({ water_patch = patch_for_inner_corner_of_transition_between_transition, }) + } + ), + +} + + +transitions.cliff_transitions = +{ + water_transition_template + ( + water_tile_type_names, + "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + { + o_transition_tall = false, + u_transition_count = 2, + o_transition_count = 4, + side_count = 8, + outer_corner_count = 8, + inner_corner_count = 8 + } + ), + out_of_map_transition +} + +transitions.cliff_transitions_between_transitions = +{ + generic_transition_between_transitions_template + ( + default_transition_group_id, + water_transition_group_id, + "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + { + o_transition_tall = false, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = { water_patch = patch_for_inner_corner_of_transition_between_transition, } + } + ), + make_generic_transition_template + ( + nil, + default_transition_group_id, + out_of_map_transition_group_id, + "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + { + o_transition_tall = false, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = init_transition_between_transition_common_options({ water_patch = patch_for_inner_corner_of_transition_between_transition, }) + }, + false, + true, + true + ), + generic_transition_between_transitions_template + ( + water_transition_group_id, + out_of_map_transition_group_id, + "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + { + o_transition_tall = false, + inner_corner_count = 3, + outer_corner_count = 3, + side_count = 3, + u_transition_count = 1, + o_transition_count = 0, + base = init_transition_between_transition_common_options({ water_patch = patch_for_inner_corner_of_transition_between_transition, }) + } + ), + +} + + +return transitions diff --git a/alien-biomes/prototypes/tile/tile-transitions-static.lua b/alien-biomes/prototypes/tile/tile-transitions-static.lua new file mode 100644 index 00000000..2daefd6c --- /dev/null +++ b/alien-biomes/prototypes/tile/tile-transitions-static.lua @@ -0,0 +1,1985 @@ +function alien_biomes_beach_transitions() + return { + { + inner_corner = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 0, + y = 0 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 1088, + y = 0 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + x = 1088, + y = 0 + }, + o_transition = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 0, + y = 2304 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 0, + y = 1152 + }, + o_transition_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + x = 1088, + y = 1152 + }, + outer_corner = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 0, + y = 576 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 1088, + y = 576 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + x = 1088, + y = 288 + }, + side = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 0, + y = 1152 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 0, + y = 576 + }, + side_background = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 1088, + y = 1152 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 544, + y = 576 + }, + side_mask = { + count = 16, + hr_version = { + count = 16, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 16, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + x = 1088, + y = 576 + }, + to_tiles = { + "water", + "deepwater", + "water-green", + "deepwater-green", + "water-shallow", + "water-mud", + "water-wube" + }, + transition_group = 1, + u_transition = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 0, + y = 1728 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 0, + y = 864 + }, + u_transition_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + tall = false, + x = 1088, + y = 1728 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + tall = false, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach.png", + x = 1088, + y = 864 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 0 + }, + o_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 1152 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 576 + }, + to_tiles = { + "out-of-map" + }, + transition_group = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 864 + } + } + } +end +function alien_biomes_beach_transitions_between_transitions() + return { + { + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + x = 1088, + y = 0 + }, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = false, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 1, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/beach-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/beach-transition.png", + x = 1088, + y = 864 + }, + water_patch = { + filename = "__base__/graphics/terrain/water-transitions/water-patch.png", + height = 32, + hr_version = { + filename = "__base__/graphics/terrain/water-transitions/hr-water-patch.png", + height = 64, + scale = 0.5, + width = 64 + }, + width = 32 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-out-of-map-transition.png", + x = 1088, + y = 864 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 1, + transition_group1 = 1, + transition_group2 = 2, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-sand-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/sand-shore-out-of-map-transition.png", + x = 1088, + y = 864 + }, + water_patch = nil + } + } +end + +function alien_biomes_cliff_transitions() + return { + { + inner_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 0 + }, + o_transition = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = false, + x = 0, + y = 2304 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = false, + x = 0, + y = 1152 + }, + o_transition_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 4, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 1152 + }, + outer_corner = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 288 + }, + side = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 8, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 576 + }, + to_tiles = { + "water", + "deepwater", + "water-green", + "deepwater-green", + "water-shallow", + "water-mud", + "water-wube" + }, + transition_group = 1, + u_transition = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 2, + hr_version = { + count = 2, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 2, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff.png", + x = 1088, + y = 864 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 0 + }, + o_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = false, + x = 1088, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = false, + x = 544, + y = 1152 + }, + o_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 2304 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 1152 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 4, + hr_version = { + count = 4, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 4, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 8, + hr_version = { + count = 8, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 8, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 576 + }, + to_tiles = { + "out-of-map" + }, + transition_group = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/out-of-map-transition.png", + x = 1088, + y = 864 + } + } + } + +end + +function alien_biomes_cliff_transitions_between_transitions() + return { + { + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 0 + }, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 1, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/hr/cliff-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__alien-biomes__/graphics/terrain/water-transitions/sr/cliff-transition.png", + x = 1088, + y = 864 + }, + water_patch = { + filename = "__base__/graphics/terrain/water-transitions/water-patch.png", + height = 32, + hr_version = { + filename = "__base__/graphics/terrain/water-transitions/hr-water-patch.png", + height = 64, + scale = 0.5, + width = 64 + }, + width = 32 + } + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 0, + transition_group1 = 0, + transition_group2 = 2, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dirt-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dirt-out-of-map-transition.png", + x = 1088, + y = 864 + }, + water_patch = nil + }, + { + background_layer_group = "zero", + background_layer_offset = 1, + inner_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 0 + }, + inner_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 0 + }, + inner_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 0 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 0 + }, + offset_background_layer_by_tile_layer = true, + outer_corner = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 288 + }, + outer_corner_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 288 + }, + outer_corner_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 576 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 288 + }, + side = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 576 + }, + side_background = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 576 + }, + side_mask = { + count = 3, + hr_version = { + count = 3, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1152 + }, + line_length = 3, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 576 + }, + transition_group = 1, + transition_group1 = 1, + transition_group2 = 2, + u_transition = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 0, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 0, + y = 864 + }, + u_transition_background = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + tall = true, + x = 1088, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + tall = true, + x = 544, + y = 864 + }, + u_transition_mask = { + count = 1, + hr_version = { + count = 1, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/hr-dark-dirt-shore-out-of-map-transition.png", + scale = 0.5, + x = 2176, + y = 1728 + }, + line_length = 1, + picture = "__base__/graphics/terrain/out-of-map-transition/dark-dirt-shore-out-of-map-transition.png", + x = 1088, + y = 864 + }, + water_patch = nil + } + } +end + +return { + beach_transitions = alien_biomes_beach_transitions, + beach_transitions_between_transitions = alien_biomes_beach_transitions_between_transitions, + cliff_transitions = alien_biomes_cliff_transitions, + cliff_transitions_between_transitions = alien_biomes_cliff_transitions_between_transitions, +} diff --git a/alien-biomes/settings.lua b/alien-biomes/settings.lua new file mode 100644 index 00000000..e365285e --- /dev/null +++ b/alien-biomes/settings.lua @@ -0,0 +1,105 @@ +local allowed_values = function() return {"Enabled", "Disabled"} end +data:extend{ + { + type = "string-setting", + name = "alien-biomes-disable-vegetation", + setting_type = "startup", + default_value = "Disabled", + allowed_values = allowed_values(), + order = "h" + }, + { + type = "string-setting", + name = "alien-biomes-remove-obsolete-tiles", + setting_type = "startup", + default_value = "Disabled", + allowed_values = allowed_values(), + order = "i" + }, + { + type = "int-setting", + name = "tile-speed-reduction", + setting_type = "startup", + default_value = 100, + minimum_value = 0, + maximum_value = 100, + order = "z-a" + }, + +} +local biome_settings = { + "dirt-aubergine", + "dirt-beige", + "dirt-black", + "dirt-brown", + "dirt-cream", + "dirt-dustyrose", + "dirt-grey", + "dirt-purple", + "dirt-red", + "dirt-tan", + "dirt-violet", + "dirt-white", + "frozen", + "grass-blue", + "grass-green", + "grass-mauve", + "grass-olive", + "grass-orange", + "grass-purple", + "grass-red", + "grass-turquoise", + "grass-violet", + "grass-yellow", + "sand-aubergine", + "sand-beige", + "sand-black", + "sand-brown", + "sand-cream", + "sand-dustyrose", + "sand-grey", + "sand-purple", + "sand-red", + "sand-tan", + "sand-violet", + "sand-white", + "volcanic-blue", + "volcanic-green", + "volcanic-orange", + "volcanic-purple", +} +for _, setting in pairs(biome_settings) do + data:extend({{ + type = "string-setting", + name = "alien-biomes-include-"..setting, + setting_type = "startup", + default_value = "Enabled", + allowed_values = allowed_values(), + order = "t-" .. setting + }}) +end +data:extend({{ + type = "string-setting", + name = "alien-biomes-include-inland-shallows", + setting_type = "startup", + default_value = "Enabled", + allowed_values = allowed_values(), + order = "t-z-a-wetland" +}}) +data:extend({{ + type = "string-setting", + name = "alien-biomes-include-coastal-shallows", + setting_type = "startup", + default_value = "Enabled", + allowed_values = allowed_values(), + order = "t-z-b-shallows" +}}) + +data:extend({{ + type = "string-setting", + name = "alien-biomes-include-rivers", + setting_type = "startup", + default_value = "Disabled", + allowed_values = allowed_values(), + order = "t-z-b-shallows" +}}) diff --git a/alien-biomes/sound/walking/snow-01.ogg b/alien-biomes/sound/walking/snow-01.ogg new file mode 100644 index 00000000..2272caaa Binary files /dev/null and b/alien-biomes/sound/walking/snow-01.ogg differ diff --git a/alien-biomes/sound/walking/snow-02.ogg b/alien-biomes/sound/walking/snow-02.ogg new file mode 100644 index 00000000..b2a95ce6 Binary files /dev/null and b/alien-biomes/sound/walking/snow-02.ogg differ diff --git a/alien-biomes/sound/walking/snow-03.ogg b/alien-biomes/sound/walking/snow-03.ogg new file mode 100644 index 00000000..2d4ef182 Binary files /dev/null and b/alien-biomes/sound/walking/snow-03.ogg differ diff --git a/alien-biomes/sound/walking/snow-04.ogg b/alien-biomes/sound/walking/snow-04.ogg new file mode 100644 index 00000000..43179ff7 Binary files /dev/null and b/alien-biomes/sound/walking/snow-04.ogg differ diff --git a/alien-biomes/sound/walking/snow-05.ogg b/alien-biomes/sound/walking/snow-05.ogg new file mode 100644 index 00000000..f6bab67e Binary files /dev/null and b/alien-biomes/sound/walking/snow-05.ogg differ diff --git a/alien-biomes/sound/walking/snow-06.ogg b/alien-biomes/sound/walking/snow-06.ogg new file mode 100644 index 00000000..eb88a08d Binary files /dev/null and b/alien-biomes/sound/walking/snow-06.ogg differ diff --git a/alien-biomes/sound/walking/snow-07.ogg b/alien-biomes/sound/walking/snow-07.ogg new file mode 100644 index 00000000..3b52729d Binary files /dev/null and b/alien-biomes/sound/walking/snow-07.ogg differ diff --git a/alien-biomes/sound/walking/snow-08.ogg b/alien-biomes/sound/walking/snow-08.ogg new file mode 100644 index 00000000..9cef7eff Binary files /dev/null and b/alien-biomes/sound/walking/snow-08.ogg differ diff --git a/alien-biomes/sound/walking/snow-09.ogg b/alien-biomes/sound/walking/snow-09.ogg new file mode 100644 index 00000000..5b8917f1 Binary files /dev/null and b/alien-biomes/sound/walking/snow-09.ogg differ diff --git a/alien-biomes/sound/walking/snow-10.ogg b/alien-biomes/sound/walking/snow-10.ogg new file mode 100644 index 00000000..e5e43c86 Binary files /dev/null and b/alien-biomes/sound/walking/snow-10.ogg differ diff --git a/alien-biomes/sound/walking/water-01.ogg b/alien-biomes/sound/walking/water-01.ogg new file mode 100644 index 00000000..55469e4d Binary files /dev/null and b/alien-biomes/sound/walking/water-01.ogg differ diff --git a/alien-biomes/sound/walking/water-02.ogg b/alien-biomes/sound/walking/water-02.ogg new file mode 100644 index 00000000..71a98243 Binary files /dev/null and b/alien-biomes/sound/walking/water-02.ogg differ diff --git a/alien-biomes/sound/walking/water-03.ogg b/alien-biomes/sound/walking/water-03.ogg new file mode 100644 index 00000000..fd3ec4bc Binary files /dev/null and b/alien-biomes/sound/walking/water-03.ogg differ diff --git a/alien-biomes/sound/walking/water-04.ogg b/alien-biomes/sound/walking/water-04.ogg new file mode 100644 index 00000000..fd3c7c8f Binary files /dev/null and b/alien-biomes/sound/walking/water-04.ogg differ diff --git a/alien-biomes/sound/walking/water-05.ogg b/alien-biomes/sound/walking/water-05.ogg new file mode 100644 index 00000000..c0af3d0d Binary files /dev/null and b/alien-biomes/sound/walking/water-05.ogg differ diff --git a/alien-biomes/sound/walking/water-06.ogg b/alien-biomes/sound/walking/water-06.ogg new file mode 100644 index 00000000..aab16f4b Binary files /dev/null and b/alien-biomes/sound/walking/water-06.ogg differ diff --git a/alien-biomes/sound/walking/water-07.ogg b/alien-biomes/sound/walking/water-07.ogg new file mode 100644 index 00000000..933cf663 Binary files /dev/null and b/alien-biomes/sound/walking/water-07.ogg differ diff --git a/alien-biomes/sound/walking/water-08.ogg b/alien-biomes/sound/walking/water-08.ogg new file mode 100644 index 00000000..8a2f7468 Binary files /dev/null and b/alien-biomes/sound/walking/water-08.ogg differ diff --git a/alien-biomes/sound/walking/water-09.ogg b/alien-biomes/sound/walking/water-09.ogg new file mode 100644 index 00000000..eb9c34a6 Binary files /dev/null and b/alien-biomes/sound/walking/water-09.ogg differ diff --git a/alien-biomes/sound/walking/water-10.ogg b/alien-biomes/sound/walking/water-10.ogg new file mode 100644 index 00000000..ae42cbc9 Binary files /dev/null and b/alien-biomes/sound/walking/water-10.ogg differ diff --git a/alien-biomes/sound/walking/water-11.ogg b/alien-biomes/sound/walking/water-11.ogg new file mode 100644 index 00000000..aecec14a Binary files /dev/null and b/alien-biomes/sound/walking/water-11.ogg differ diff --git a/alien-biomes/sound/walking/water-12.ogg b/alien-biomes/sound/walking/water-12.ogg new file mode 100644 index 00000000..5548ba78 Binary files /dev/null and b/alien-biomes/sound/walking/water-12.ogg differ diff --git a/alien-biomes/thumbnail.png b/alien-biomes/thumbnail.png new file mode 100644 index 00000000..fb23fbf5 Binary files /dev/null and b/alien-biomes/thumbnail.png differ diff --git a/alien-biomes_0.6.8.zip b/alien-biomes_0.6.8.zip deleted file mode 100644 index 9457a11b..00000000 Binary files a/alien-biomes_0.6.8.zip and /dev/null differ diff --git a/angels-smelting-extended_1.0.12/To-Do-List.txt b/angels-smelting-extended/To-Do-List.txt similarity index 100% rename from angels-smelting-extended_1.0.12/To-Do-List.txt rename to angels-smelting-extended/To-Do-List.txt diff --git a/angels-smelting-extended_1.0.12/changelog.txt b/angels-smelting-extended/changelog.txt similarity index 100% rename from angels-smelting-extended_1.0.12/changelog.txt rename to angels-smelting-extended/changelog.txt diff --git a/angels-smelting-extended_1.0.12/data-updates.lua b/angels-smelting-extended/data-updates.lua similarity index 100% rename from angels-smelting-extended_1.0.12/data-updates.lua rename to angels-smelting-extended/data-updates.lua diff --git a/angels-smelting-extended_1.0.12/data.lua b/angels-smelting-extended/data.lua similarity index 100% rename from angels-smelting-extended_1.0.12/data.lua rename to angels-smelting-extended/data.lua diff --git a/angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-brass.png b/angels-smelting-extended/graphics/icons/New folder/roll-brass.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-brass.png rename to angels-smelting-extended/graphics/icons/New folder/roll-brass.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-bronze.png b/angels-smelting-extended/graphics/icons/New folder/roll-bronze.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-bronze.png rename to angels-smelting-extended/graphics/icons/New folder/roll-bronze.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-nitinol.png b/angels-smelting-extended/graphics/icons/New folder/roll-nitinol.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-nitinol.png rename to angels-smelting-extended/graphics/icons/New folder/roll-nitinol.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-tin.png b/angels-smelting-extended/graphics/icons/New folder/roll-tin.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/New folder/roll-tin.png rename to angels-smelting-extended/graphics/icons/New folder/roll-tin.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/casting-machine-tech.png b/angels-smelting-extended/graphics/icons/casting-machine-tech.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/casting-machine-tech.png rename to angels-smelting-extended/graphics/icons/casting-machine-tech.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/girder-stack.png b/angels-smelting-extended/graphics/icons/girder-stack.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/girder-stack.png rename to angels-smelting-extended/graphics/icons/girder-stack.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-blank.png b/angels-smelting-extended/graphics/icons/roll-blank.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-blank.png rename to angels-smelting-extended/graphics/icons/roll-blank.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-brass.png b/angels-smelting-extended/graphics/icons/roll-brass.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-brass.png rename to angels-smelting-extended/graphics/icons/roll-brass.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-bronze.png b/angels-smelting-extended/graphics/icons/roll-bronze.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-bronze.png rename to angels-smelting-extended/graphics/icons/roll-bronze.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-cobalt-steel.png b/angels-smelting-extended/graphics/icons/roll-cobalt-steel.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-cobalt-steel.png rename to angels-smelting-extended/graphics/icons/roll-cobalt-steel.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-gunmetal.png b/angels-smelting-extended/graphics/icons/roll-gunmetal.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-gunmetal.png rename to angels-smelting-extended/graphics/icons/roll-gunmetal.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-invar.png b/angels-smelting-extended/graphics/icons/roll-invar.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-invar.png rename to angels-smelting-extended/graphics/icons/roll-invar.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-nitinol.png b/angels-smelting-extended/graphics/icons/roll-nitinol.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-nitinol.png rename to angels-smelting-extended/graphics/icons/roll-nitinol.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/roll-tungsten.png b/angels-smelting-extended/graphics/icons/roll-tungsten.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/roll-tungsten.png rename to angels-smelting-extended/graphics/icons/roll-tungsten.png diff --git a/angels-smelting-extended_1.0.12/graphics/icons/wire-coil-insulated.png b/angels-smelting-extended/graphics/icons/wire-coil-insulated.png similarity index 100% rename from angels-smelting-extended_1.0.12/graphics/icons/wire-coil-insulated.png rename to angels-smelting-extended/graphics/icons/wire-coil-insulated.png diff --git a/angels-smelting-extended/info.json b/angels-smelting-extended/info.json new file mode 100644 index 00000000..5dcdd109 --- /dev/null +++ b/angels-smelting-extended/info.json @@ -0,0 +1,19 @@ +{ + "name": "angels-smelting-extended", + "version": "1.0.13", + "factorio_version": "1.1", + "title": "Angel's Extended Smelting and Compression", + "author": "pezzawinkle", + "contact": "", + "homepage": "", + "description": "Extension to Angel's Smelting providing all metal mixing recipes to metallurgy (Brass, Bronze, etc) and compression on metal casting (eg. Iron Sheet) as well as casting gear wheels and pipes", + "dependencies": [ + "angelspetrochem >= 0.9.21", + "angelsrefining >= 0.12.1", + "angelssmelting >= 0.6.22", + "? angelsindustries >= 0.4.15", + "? bobplates >= 1.1.3", + "(?) boblogistics >= 1.1.3", + "! angelssmelting-extended-upgradet >=0.0.3" + ] +} diff --git a/angels-smelting-extended_1.0.12/locale/en/smelting-extended.cfg b/angels-smelting-extended/locale/en/smelting-extended.cfg similarity index 100% rename from angels-smelting-extended_1.0.12/locale/en/smelting-extended.cfg rename to angels-smelting-extended/locale/en/smelting-extended.cfg diff --git a/angels-smelting-extended_1.0.12/migrations/smelting-extended_0.0.1.json b/angels-smelting-extended/migrations/smelting-extended_0.0.1.json similarity index 100% rename from angels-smelting-extended_1.0.12/migrations/smelting-extended_0.0.1.json rename to angels-smelting-extended/migrations/smelting-extended_0.0.1.json diff --git a/angels-smelting-extended_1.0.12/migrations/smelting-extended_0.0.1.lua b/angels-smelting-extended/migrations/smelting-extended_0.0.1.lua similarity index 100% rename from angels-smelting-extended_1.0.12/migrations/smelting-extended_0.0.1.lua rename to angels-smelting-extended/migrations/smelting-extended_0.0.1.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/alloys-category-extended.lua b/angels-smelting-extended/prototypes/alloys-category-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/alloys-category-extended.lua rename to angels-smelting-extended/prototypes/alloys-category-extended.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/data-tables.lua b/angels-smelting-extended/prototypes/data-tables.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/data-tables.lua rename to angels-smelting-extended/prototypes/data-tables.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/icon-replace-functions.lua b/angels-smelting-extended/prototypes/icon-replace-functions.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/icon-replace-functions.lua rename to angels-smelting-extended/prototypes/icon-replace-functions.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/items/alloys-extended.lua b/angels-smelting-extended/prototypes/items/alloys-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/items/alloys-extended.lua rename to angels-smelting-extended/prototypes/items/alloys-extended.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/items/compression-extended.lua b/angels-smelting-extended/prototypes/items/compression-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/items/compression-extended.lua rename to angels-smelting-extended/prototypes/items/compression-extended.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/items/ironworks.lua b/angels-smelting-extended/prototypes/items/ironworks.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/items/ironworks.lua rename to angels-smelting-extended/prototypes/items/ironworks.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/items/shielding.lua b/angels-smelting-extended/prototypes/items/shielding.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/items/shielding.lua rename to angels-smelting-extended/prototypes/items/shielding.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/items/stacks.lua b/angels-smelting-extended/prototypes/items/stacks.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/items/stacks.lua rename to angels-smelting-extended/prototypes/items/stacks.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/override.lua b/angels-smelting-extended/prototypes/override.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/override.lua rename to angels-smelting-extended/prototypes/override.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/recipes/compressing-extended.lua b/angels-smelting-extended/prototypes/recipes/compressing-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/recipes/compressing-extended.lua rename to angels-smelting-extended/prototypes/recipes/compressing-extended.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/recipes/ironworks.lua b/angels-smelting-extended/prototypes/recipes/ironworks.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/recipes/ironworks.lua rename to angels-smelting-extended/prototypes/recipes/ironworks.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/recipes/shielding.lua b/angels-smelting-extended/prototypes/recipes/shielding.lua similarity index 99% rename from angels-smelting-extended_1.0.12/prototypes/recipes/shielding.lua rename to angels-smelting-extended/prototypes/recipes/shielding.lua index a59dee61..ce5f6aeb 100644 --- a/angels-smelting-extended_1.0.12/prototypes/recipes/shielding.lua +++ b/angels-smelting-extended/prototypes/recipes/shielding.lua @@ -213,8 +213,9 @@ if data.raw.item["insulated-cable"] then local box = { production_type = "input", pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, + base_area = 0.2, + base_level = -0.5, + filter = "liquid-rubber", pipe_connections = {{type = "input-output", position = {-3, 1}}, {type = "input-output", position = {3, 1}}} } table.insert(data.raw["assembling-machine"]["strand-casting-machine"].fluid_boxes, box) diff --git a/angels-smelting-extended_1.0.12/prototypes/recipes/smelting-alloys-extended.lua b/angels-smelting-extended/prototypes/recipes/smelting-alloys-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/recipes/smelting-alloys-extended.lua rename to angels-smelting-extended/prototypes/recipes/smelting-alloys-extended.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/recipes/stacks.lua b/angels-smelting-extended/prototypes/recipes/stacks.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/recipes/stacks.lua rename to angels-smelting-extended/prototypes/recipes/stacks.lua diff --git a/angels-smelting-extended_1.0.12/prototypes/technology/smelting-extended.lua b/angels-smelting-extended/prototypes/technology/smelting-extended.lua similarity index 100% rename from angels-smelting-extended_1.0.12/prototypes/technology/smelting-extended.lua rename to angels-smelting-extended/prototypes/technology/smelting-extended.lua diff --git a/angels-smelting-extended_1.0.12/settings.lua b/angels-smelting-extended/settings.lua similarity index 100% rename from angels-smelting-extended_1.0.12/settings.lua rename to angels-smelting-extended/settings.lua diff --git a/angels-smelting-extended_1.0.12/thumbnail.png b/angels-smelting-extended/thumbnail.png similarity index 100% rename from angels-smelting-extended_1.0.12/thumbnail.png rename to angels-smelting-extended/thumbnail.png diff --git a/angels-smelting-extended_1.0.12/info.json b/angels-smelting-extended_1.0.12/info.json deleted file mode 100644 index 69b623d5..00000000 --- a/angels-smelting-extended_1.0.12/info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "angels-smelting-extended", - "version": "1.0.12", - "factorio_version": "1.1", - "title": "Angel's Extended Smelting and Compression", - "author": "pezzawinkle", - "contact": "", - "homepage": "", - "description": "Extension to Angel's Smelting providing all metal mixing recipes to metallurgy (Brass, Bronze, etc) and compression on metal casting (eg. Iron Sheet) as well as casting gear wheels and pipes", - "dependencies": [ - "angelspetrochem >= 0.9.21", - "angelsrefining >= 0.12.1", - "angelssmelting >= 0.6.18", - "? angelsindustries >= 0.4.15", - "? bobplates >= 1.1.3", - "(?) boblogistics >= 1.1.3", - "! angelssmelting-extended-upgradet >=0.0.3" - ] -} diff --git a/angelsaddons-storage/changelog.txt b/angelsaddons-storage/changelog.txt new file mode 100644 index 00000000..7d27e0b5 --- /dev/null +++ b/angelsaddons-storage/changelog.txt @@ -0,0 +1,69 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.0.10 +Date: 01.01.2023 + Bugfixes: + - Fixed tips and tricks icon when warehouses are disabled (850) +--------------------------------------------------------------------------------------------------- +Version: 0.0.9 +Date: 06.06.2022 + Bugfixes: + - Fixed technology cost of logistics silos when playing with bobtech + - Fixed technology cost of logistics warehouses when playing with bobtech + - Added missing setting localisation + - Fixed active / passive provider warehouse descriptions +--------------------------------------------------------------------------------------------------- +Version: 0.0.8 +Date: 19.12.2021 + Bugfixes: + - Fixed technology cost of logistics silos when not playing with bobslogistics + - Fixed technology cost of logistics warehouses when not playing with bobslogistics +--------------------------------------------------------------------------------------------------- +Version: 0.0.7 +Date: 10.08.2021 + Changes: + - Added some tips and tricks + - Superfluous property clean-up +--------------------------------------------------------------------------------------------------- +Version: 0.0.6 +Date: 31.05.2021 + Bugfixes: + - Fixed crash related to typo in hidden dependencies +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 26.05.2021 + Changes: + - Added setting to disable logitics silos and ore silos independently (499) + - Warehouses now prerequisite on ore silos if both are enabled (428) + - Pressure tank now always prerequisite on fluid handling + - Changed recipes of ore silos when playing with angels refining (340) + - Changed some recipes of logistics silos when playing with angels industries (340) + - Changed some recipes of logistics warehouses when playing with angels industries (340) + - Changed slot count for active providers to match the storage variant + - Changed ore silo pick-up result to be just the regular silo (541) + - Changed and expanded locale strings and text descriptions (489) +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 +Date: 27.11.2020 + Changes: + - Patched to work without angels (after oversight in last patch) +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 +Date: 26.11.2020 + Changes: + - Updated to Factorio version 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 +Date: 29.10.2020 + Changes: + - Added Inline storage tank as an option when playing without Angels petrochem (387) + Bugfixes: + - Fixed blueprinting issues with Jax 35 tank (389) + - Some minor localisation changes to unify angels localisation across mods (372) +--------------------------------------------------------------------------------------------------- +Version: 0.0.1 +Date: 20.08.2020 + Features: + - Merges angels storage mods: + - Angels pressure-tanks v0.5.2 + - Angels warehouses v0.5.2 + - Angels oresilos v0.6.2 diff --git a/angelsaddons-storage/data-updates.lua b/angelsaddons-storage/data-updates.lua new file mode 100644 index 00000000..6466bd52 --- /dev/null +++ b/angelsaddons-storage/data-updates.lua @@ -0,0 +1,4 @@ +require("prototypes.overrides.fluid-tanks") +require("prototypes.overrides.silos") +require("prototypes.overrides.warehouses") +require("prototypes.tips-and-tricks.tips-and-tricks") diff --git a/angelsaddons-storage/data.lua b/angelsaddons-storage/data.lua new file mode 100644 index 00000000..5dab592e --- /dev/null +++ b/angelsaddons-storage/data.lua @@ -0,0 +1,33 @@ +angelsmods = angelsmods or {} +angelsmods.addons = angelsmods.addons or {} +angelsmods.addons.storage = angelsmods.addons.storage or {} +angelsmods.addons.storage.icon_scaling = settings.startup["angels-enable-storage-icon-scaling"].value + +-- pressure tank trigger +angelsmods.addons.storage.inlinetank = mods["angelspetrochem"] and true + or angelsmods.addons.storage.pressuretanks + or settings.startup["angels-enable-inline-tank"].value +angelsmods.addons.storage.pressuretank = angelsmods.addons.storage.pressuretanks + or settings.startup["angels-enable-pressure-tank"].value +-- warehouse trigger +angelsmods.addons.storage.warehouses = angelsmods.addons.storage.warehouses + or settings.startup["angels-enable-warehouses"].value +-- silo triggers +angelsmods.addons.storage.silos = angelsmods.addons.storage.silos or settings.startup["angels-enable-silos"].value +angelsmods.addons.storage.oresilos = angelsmods.addons.storage.oresilos + or settings.startup["angels-enable-oresilos"].value + +--categories +require("prototypes.storage-categories") +--buildings +require("prototypes.buildings.fluid-tanks") +require("prototypes.buildings.silos") +require("prototypes.buildings.warehouses") +--recipes +require("prototypes.recipes.fluid-tanks") +require("prototypes.recipes.silos") +require("prototypes.recipes.warehouses") +--technology +require("prototypes.technology.fluid-tanks") +require("prototypes.technology.silos") +require("prototypes.technology.warehouses") diff --git a/angelsaddons-storage/graphics/entity/blank.png b/angelsaddons-storage/graphics/entity/blank.png new file mode 100644 index 00000000..b881dc90 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/blank.png differ diff --git a/angelsaddons-storage/graphics/entity/pressure-tank-1.png b/angelsaddons-storage/graphics/entity/pressure-tank-1.png new file mode 100644 index 00000000..fadf5a11 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/pressure-tank-1.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-coal.png b/angelsaddons-storage/graphics/entity/silo-coal.png new file mode 100644 index 00000000..9320ee93 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-coal.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-log-aprovider.png b/angelsaddons-storage/graphics/entity/silo-log-aprovider.png new file mode 100644 index 00000000..27940f7d Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-log-aprovider.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-log-buffer.png b/angelsaddons-storage/graphics/entity/silo-log-buffer.png new file mode 100644 index 00000000..286e630d Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-log-buffer.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-log-pprovider.png b/angelsaddons-storage/graphics/entity/silo-log-pprovider.png new file mode 100644 index 00000000..b46ab14a Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-log-pprovider.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-log-requester.png b/angelsaddons-storage/graphics/entity/silo-log-requester.png new file mode 100644 index 00000000..ff6e92fb Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-log-requester.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-log-storage.png b/angelsaddons-storage/graphics/entity/silo-log-storage.png new file mode 100644 index 00000000..8aa22adb Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-log-storage.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore1.png b/angelsaddons-storage/graphics/entity/silo-ore1.png new file mode 100644 index 00000000..62e8aa30 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore1.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore2.png b/angelsaddons-storage/graphics/entity/silo-ore2.png new file mode 100644 index 00000000..ce523c57 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore2.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore3.png b/angelsaddons-storage/graphics/entity/silo-ore3.png new file mode 100644 index 00000000..4c035b20 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore3.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore4.png b/angelsaddons-storage/graphics/entity/silo-ore4.png new file mode 100644 index 00000000..c81bec67 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore4.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore5.png b/angelsaddons-storage/graphics/entity/silo-ore5.png new file mode 100644 index 00000000..89836fdf Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore5.png differ diff --git a/angelsaddons-storage/graphics/entity/silo-ore6.png b/angelsaddons-storage/graphics/entity/silo-ore6.png new file mode 100644 index 00000000..5ac32862 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo-ore6.png differ diff --git a/angelsaddons-storage/graphics/entity/silo.png b/angelsaddons-storage/graphics/entity/silo.png new file mode 100644 index 00000000..a382aceb Binary files /dev/null and b/angelsaddons-storage/graphics/entity/silo.png differ diff --git a/angelsaddons-storage/graphics/entity/storage-tank-3.png b/angelsaddons-storage/graphics/entity/storage-tank-3.png new file mode 100644 index 00000000..a6fb1a8f Binary files /dev/null and b/angelsaddons-storage/graphics/entity/storage-tank-3.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-hr.png b/angelsaddons-storage/graphics/entity/warehouse-hr.png new file mode 100644 index 00000000..6dc8c854 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-aprovider-hr.png b/angelsaddons-storage/graphics/entity/warehouse-log-aprovider-hr.png new file mode 100644 index 00000000..db3e4678 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-aprovider-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-aprovider.png b/angelsaddons-storage/graphics/entity/warehouse-log-aprovider.png new file mode 100644 index 00000000..7da7848a Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-aprovider.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-buffer-hr.png b/angelsaddons-storage/graphics/entity/warehouse-log-buffer-hr.png new file mode 100644 index 00000000..e6294403 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-buffer-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-buffer.png b/angelsaddons-storage/graphics/entity/warehouse-log-buffer.png new file mode 100644 index 00000000..7d4a4bab Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-buffer.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-pprovider-hr.png b/angelsaddons-storage/graphics/entity/warehouse-log-pprovider-hr.png new file mode 100644 index 00000000..7d03500c Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-pprovider-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-pprovider.png b/angelsaddons-storage/graphics/entity/warehouse-log-pprovider.png new file mode 100644 index 00000000..7269fc33 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-pprovider.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-requester-hr.png b/angelsaddons-storage/graphics/entity/warehouse-log-requester-hr.png new file mode 100644 index 00000000..e3ef377e Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-requester-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-requester.png b/angelsaddons-storage/graphics/entity/warehouse-log-requester.png new file mode 100644 index 00000000..2d587e70 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-requester.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-storage-hr.png b/angelsaddons-storage/graphics/entity/warehouse-log-storage-hr.png new file mode 100644 index 00000000..e64c9deb Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-storage-hr.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse-log-storage.png b/angelsaddons-storage/graphics/entity/warehouse-log-storage.png new file mode 100644 index 00000000..813a49e7 Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse-log-storage.png differ diff --git a/angelsaddons-storage/graphics/entity/warehouse.png b/angelsaddons-storage/graphics/entity/warehouse.png new file mode 100644 index 00000000..0de584fa Binary files /dev/null and b/angelsaddons-storage/graphics/entity/warehouse.png differ diff --git a/angelsaddons-storage/graphics/icons/pressure-tank-1.png b/angelsaddons-storage/graphics/icons/pressure-tank-1.png new file mode 100644 index 00000000..73cfd343 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/pressure-tank-1.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-coal.png b/angelsaddons-storage/graphics/icons/silo-coal.png new file mode 100644 index 00000000..40c2d661 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-coal.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-log-aprovider.png b/angelsaddons-storage/graphics/icons/silo-log-aprovider.png new file mode 100644 index 00000000..48c7a286 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-log-aprovider.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-log-buffer.png b/angelsaddons-storage/graphics/icons/silo-log-buffer.png new file mode 100644 index 00000000..74e1f254 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-log-buffer.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-log-pprovider.png b/angelsaddons-storage/graphics/icons/silo-log-pprovider.png new file mode 100644 index 00000000..ce86da0a Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-log-pprovider.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-log-requester.png b/angelsaddons-storage/graphics/icons/silo-log-requester.png new file mode 100644 index 00000000..40bcfb08 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-log-requester.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-log-storage.png b/angelsaddons-storage/graphics/icons/silo-log-storage.png new file mode 100644 index 00000000..bfc2c35a Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-log-storage.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore1.png b/angelsaddons-storage/graphics/icons/silo-ore1.png new file mode 100644 index 00000000..0c19d138 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore1.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore2.png b/angelsaddons-storage/graphics/icons/silo-ore2.png new file mode 100644 index 00000000..0cb017f6 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore2.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore3.png b/angelsaddons-storage/graphics/icons/silo-ore3.png new file mode 100644 index 00000000..4b9203df Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore3.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore4.png b/angelsaddons-storage/graphics/icons/silo-ore4.png new file mode 100644 index 00000000..4c4d9c73 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore4.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore5.png b/angelsaddons-storage/graphics/icons/silo-ore5.png new file mode 100644 index 00000000..faec9d8a Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore5.png differ diff --git a/angelsaddons-storage/graphics/icons/silo-ore6.png b/angelsaddons-storage/graphics/icons/silo-ore6.png new file mode 100644 index 00000000..0b450f3f Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo-ore6.png differ diff --git a/angelsaddons-storage/graphics/icons/silo.png b/angelsaddons-storage/graphics/icons/silo.png new file mode 100644 index 00000000..78225aa6 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/silo.png differ diff --git a/angelsaddons-storage/graphics/icons/storage-tank-3.png b/angelsaddons-storage/graphics/icons/storage-tank-3.png new file mode 100644 index 00000000..d02c9b54 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/storage-tank-3.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse-log-aprovider.png b/angelsaddons-storage/graphics/icons/warehouse-log-aprovider.png new file mode 100644 index 00000000..23909cd5 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse-log-aprovider.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse-log-buffer.png b/angelsaddons-storage/graphics/icons/warehouse-log-buffer.png new file mode 100644 index 00000000..48e9828f Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse-log-buffer.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse-log-pprovider.png b/angelsaddons-storage/graphics/icons/warehouse-log-pprovider.png new file mode 100644 index 00000000..aebcf57d Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse-log-pprovider.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse-log-requester.png b/angelsaddons-storage/graphics/icons/warehouse-log-requester.png new file mode 100644 index 00000000..bf8c7e0f Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse-log-requester.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse-log-storage.png b/angelsaddons-storage/graphics/icons/warehouse-log-storage.png new file mode 100644 index 00000000..ede5e9c2 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse-log-storage.png differ diff --git a/angelsaddons-storage/graphics/icons/warehouse.png b/angelsaddons-storage/graphics/icons/warehouse.png new file mode 100644 index 00000000..60b12e32 Binary files /dev/null and b/angelsaddons-storage/graphics/icons/warehouse.png differ diff --git a/angelsaddons-storage/graphics/technology/logistic-silo-tech.png b/angelsaddons-storage/graphics/technology/logistic-silo-tech.png new file mode 100644 index 00000000..a96783a5 Binary files /dev/null and b/angelsaddons-storage/graphics/technology/logistic-silo-tech.png differ diff --git a/angelsaddons-storage/graphics/technology/pressure-tank-tech.png b/angelsaddons-storage/graphics/technology/pressure-tank-tech.png new file mode 100644 index 00000000..edcc7363 Binary files /dev/null and b/angelsaddons-storage/graphics/technology/pressure-tank-tech.png differ diff --git a/angelsaddons-storage/graphics/technology/silo-tech.png b/angelsaddons-storage/graphics/technology/silo-tech.png new file mode 100644 index 00000000..883d7e89 Binary files /dev/null and b/angelsaddons-storage/graphics/technology/silo-tech.png differ diff --git a/angelsaddons-storage/graphics/technology/warehouses-logistics.png b/angelsaddons-storage/graphics/technology/warehouses-logistics.png new file mode 100644 index 00000000..7d2958f2 Binary files /dev/null and b/angelsaddons-storage/graphics/technology/warehouses-logistics.png differ diff --git a/angelsaddons-storage/graphics/technology/warehouses.png b/angelsaddons-storage/graphics/technology/warehouses.png new file mode 100644 index 00000000..5fb8c0f8 Binary files /dev/null and b/angelsaddons-storage/graphics/technology/warehouses.png differ diff --git a/angelsaddons-storage/info.json b/angelsaddons-storage/info.json new file mode 100644 index 00000000..b8a6a2cd --- /dev/null +++ b/angelsaddons-storage/info.json @@ -0,0 +1,15 @@ +{ + "name": "angelsaddons-storage", + "version": "0.0.10", + "factorio_version": "1.1", + "title": "Angel's Addons - Storage Options", + "author": "Arch666Angel", + "contact": "https://discord.gg/ff5p6KE", + "homepage": "https://forums.factorio.com/viewforum.php?f=185", + "description": "Adds pressure tanks (extremely large tanks), warehouses and silos.", + "dependencies": [ + "base >= 1.1.33", + "(?) angelsrefining", + "? angelspetrochem >= 0.9.20" + ] +} diff --git a/angelsaddons-storage/locale/en/storage.cfg b/angelsaddons-storage/locale/en/storage.cfg new file mode 100644 index 00000000..a4b14a8b --- /dev/null +++ b/angelsaddons-storage/locale/en/storage.cfg @@ -0,0 +1,101 @@ +[entity-name] +silo=Silo +angels-warehouse=Warehouse +angels-pressure-tank-1=Jax 35 pressure tank +angels-storage-tank-3=Petrochem small inline tank + +silo-ore1=Saphirite silo +silo-ore2=Jivolite silo +silo-ore3=Stiratite silo +silo-ore4=Crotinnium silo +silo-ore5=Rubyte silo +silo-ore6=Bobmonium silo +silo-coal=Coal silo + +silo-active-provider=Active provider silo +silo-passive-provider=Passive provider silo +silo-requester=Requester silo +silo-storage=Storage silo +silo-buffer=Buffer silo + +angels-warehouse-passive-provider=Passive provider warehouse +angels-warehouse-active-provider=Active provider warehouse +angels-warehouse-storage=Storage warehouse +angels-warehouse-requester=Requester warehouse +angels-warehouse-buffer=Buffer warehouse + +[item-name] +silo=Silo +angels-warehouse=Warehouse +angels-pressure-tank-1=Jax 35 pressure tank +angels-storage-tank-3=Petrochem small inline tank + +silo-ore1=Saphirite silo +silo-ore2=Jivolite silo +silo-ore3=Stiratite silo +silo-ore4=Crotinnium silo +silo-ore5=Rubyte silo +silo-ore6=Bobmonium silo +silo-coal=Coal silo + +silo-active-provider=Active provider silo +silo-passive-provider=Passive provider silo +silo-requester=Requester silo +silo-storage=Storage silo +silo-buffer=Buffer silo + +angels-warehouse-passive-provider=Passive provider warehouse +angels-warehouse-active-provider=Active provider warehouse +angels-warehouse-storage=Storage warehouse +angels-warehouse-requester=Requester warehouse +angels-warehouse-buffer=Buffer warehouse + +[technology-name] +ore-silos=Ore silos +logistic-silos=Logistic silos + +angels-warehouses=Warehouses +angels-logistic-warehouses=Logistic warehouses + +pressure-tanks=Pressure tanks + +[mod-setting-name] +angels-enable-storage-icon-scaling=Enable icon scaling on silos and warehouses +angels-enable-silos=Enable Angel's silos +angels-enable-oresilos=Enable Angel's ore themed silos +angels-enable-warehouses=Enable Angel's warehouses +angels-enable-pressure-tank=Enable pressure fluid tanks +angels-enable-inline-tank=Enable small inline tanks + +[mod-setting-description] +angels-enable-storage-icon-scaling=Icons on silos and warehouses scale to size of the silos and warehouses, instead of being small. + +[technology-description] +ore-silos=Large containers for long-term storage. +logistic-silos=Silos for the logistic network. + +angels-warehouses=Huge containers for long-term storage. +angels-logistic-warehouses=Warehouses for the logistic network. + +pressure-tanks=Pressurized storage tank with high capacity for liquids or gasses. + +[entity-description] +silo-ore1=Silo with a "Saphirite" aesthetic. +silo-ore2=Silo with a "Jivolite" aesthetic. +silo-ore3=Silo with a "Stiratite" aesthetic. +silo-ore4=Silo with a "Crotinnium" aesthetic. +silo-ore5=Silo with a "Rubyte" aesthetic. +silo-ore6=Silo with a "Bobmonium" aesthetic. +silo-coal=Silo with a "Coal" aesthetic. + +silo-active-provider=Sends its content to the logistic network. +silo-passive-provider=Makes its content available to the logistic network. +silo-requester=Requests specified items from the logistic network. +silo-storage=Long-term storage for the logistic network. +silo-buffer=Requests specified items to be available for personal logistics and automated construction. + +angels-warehouse-active-provider=Sends its content to the logistic network. +angels-warehouse-passive-provider=Makes its content available to the logistic network. +angels-warehouse-storage=Long-term storage for the logistic network. +angels-warehouse-requester=Requests specified items from the logistic network. +angels-warehouse-buffer=Requests specified items to be available for personal logistics and automated construction. diff --git a/angelsaddons-storage/locale/en/tips-and-tricks.cfg b/angelsaddons-storage/locale/en/tips-and-tricks.cfg new file mode 100644 index 00000000..2fbf1ba4 --- /dev/null +++ b/angelsaddons-storage/locale/en/tips-and-tricks.cfg @@ -0,0 +1,6 @@ +[tips-and-tricks-name] +angelsaddons-storage=Angel's Addons Storage Options + +[tips-and-tricks-description] +angelsaddons-storage=This mod adds a variety of angels silos, warehouses and pressure tanks independently of angels modset. +angelsaddons-storage-notes=\n\n[font=default-bold]NOTES[/font]: Silos are 4x4 storage boxes with 256 slots (logistics versions vary)\n[font=default-bold]NOTES[/font]: Warehouses are 6x6 storage boxes with 768 slots (logistics versions vary)\n[font=default-bold]NOTES[/font]: Fluid storage tanks contain larger volumes than vanilla \ No newline at end of file diff --git a/angelsaddons-storage/prototypes/buildings/fluid-tanks.lua b/angelsaddons-storage/prototypes/buildings/fluid-tanks.lua new file mode 100644 index 00000000..a7e64778 --- /dev/null +++ b/angelsaddons-storage/prototypes/buildings/fluid-tanks.lua @@ -0,0 +1,205 @@ +if angelsmods.addons.storage.pressuretank then + --PRESSURE TANKS + data:extend({ + { + type = "item", + name = "angels-pressure-tank-1", + icon = "__angelsaddons-storage__/graphics/icons/pressure-tank-1.png", + icon_size = 32, + subgroup = "angels-fluid-tanks", + order = "e", + place_result = "angels-pressure-tank-1", + stack_size = 10, + }, + { + type = "storage-tank", + name = "angels-pressure-tank-1", + icon = "__angelsaddons-storage__/graphics/icons/pressure-tank-1.png", + icon_size = 32, + flags = { "placeable-player", "player-creation", "not-rotatable" }, + minable = { mining_time = 3, result = "angels-pressure-tank-1" }, + max_health = 500, + corpse = "medium-remnants", + collision_box = { { -2.3, -2.3 }, { 2.3, 2.3 } }, + selection_box = { { -2.5, -2.5 }, { 2.5, 2.5 } }, + fluid_box = { + base_area = 3500, + pipe_covers = pipecoverspictures(), + pipe_connections = { + { position = { 0, -3 } }, + { position = { 3, 0 } }, + { position = { -3, 0 } }, + { position = { 0, 3 } }, + }, + }, + window_bounding_box = { { -0.125, 0.6875 }, { 0.1875, 1.1875 } }, + pictures = { + picture = { + sheet = { + filename = "__angelsaddons-storage__/graphics/entity/pressure-tank-1.png", + priority = "extra-high", + frames = 1, + width = 224, + height = 224, + shift = { 0, 0 }, + }, + }, + fluid_background = { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + priority = "extra-high", + width = 32, + height = 15, + }, + window_background = { + filename = "__base__/graphics/entity/storage-tank/window-background.png", + priority = "extra-high", + width = 17, + height = 24, + }, + flow_sprite = { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + priority = "extra-high", + width = 160, + height = 20, + }, + gas_flow = { + filename = "__base__/graphics/entity/pipe/steam.png", + priority = "extra-high", + line_length = 10, + width = 24, + height = 15, + frame_count = 60, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + hr_version = { + filename = "__base__/graphics/entity/pipe/hr-steam.png", + priority = "extra-high", + line_length = 10, + width = 48, + height = 30, + frame_count = 60, + axially_symmetrical = false, + animation_speed = 0.25, + direction_count = 1, + }, + }, + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8, + }, + apparent_volume = 1.5, + max_sounds_per_type = 3, + }, + circuit_wire_connection_points = circuit_connector_definitions["storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + }) +end + +if angelsmods.addons.storage.inlinetank and not mods["angelspetrochem"] then + --INLINE TANKS + data:extend({ + { + type = "item", + name = "angels-storage-tank-3", + icon = "__angelsaddons-storage__/graphics/icons/storage-tank-3.png", + icon_size = 32, + subgroup = "storage", + order = "b[fluid]-b[inline-storage-tank]", + place_result = "angels-storage-tank-3", + stack_size = 10, + }, + { + type = "storage-tank", + name = "angels-storage-tank-3", + icon = "__angelsaddons-storage__/graphics/icons/storage-tank-3.png", + icon_size = 32, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 3, result = "angels-storage-tank-3" }, + max_health = 500, + corpse = "medium-remnants", + collision_box = { { -0.9, -0.9 }, { 0.9, 0.9 } }, + selection_box = { { -1, -1 }, { 1, 1 } }, + two_direction_only = false, + fluid_box = { + base_area = 200, + pipe_covers = pipecoverspictures(), + pipe_connections = { + { position = { 0.5, -1.5 } }, + { position = { 0.5, 1.5 } }, + }, + }, + window_bounding_box = { { -0.125, 0.6875 }, { 0.1875, 1.1875 } }, + pictures = { + picture = { + sheet = { + filename = "__angelsaddons-storage__/graphics/entity/storage-tank-3.png", + priority = "extra-high", + frames = 4, + width = 256, + height = 320, + scale = 0.495, + shift = { 0, -0.5 }, + }, + }, + fluid_background = { + filename = "__angelsaddons-storage__/graphics/entity/blank.png", + priority = "extra-high", + width = 1, + height = 1, + }, + window_background = { + filename = "__angelsaddons-storage__/graphics/entity/blank.png", + priority = "extra-high", + width = 1, + height = 1, + }, + flow_sprite = { + filename = "__angelsaddons-storage__/graphics/entity/blank.png", + priority = "extra-high", + width = 1, + height = 1, + }, + gas_flow = { + filename = "__angelsaddons-storage__/graphics/entity/blank.png", + priority = "extra-high", + width = 1, + height = 1, + frame_count = 1, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + hr_version = { + filename = "__angelsaddons-storage__/graphics/entity/blank.png", + priority = "extra-high", + width = 1, + height = 1, + frame_count = 1, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + }, + }, + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8, + }, + apparent_volume = 1.5, + max_sounds_per_type = 3, + }, + circuit_wire_connection_points = circuit_connector_definitions["storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + }) +end diff --git a/angelsaddons-storage/prototypes/buildings/silos.lua b/angelsaddons-storage/prototypes/buildings/silos.lua new file mode 100644 index 00000000..52c3fcb7 --- /dev/null +++ b/angelsaddons-storage/prototypes/buildings/silos.lua @@ -0,0 +1,115 @@ +if angelsmods.addons.storage.silos or angelsmods.addons.storage.oresilos then + ----------------------------------------------------------------------------- + -- REGULAR SILO ------------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "item", + name = "silo", + icon = "__angelsaddons-storage__/graphics/icons/silo.png", + icon_size = 32, + subgroup = "angels-silo", + order = "a", + place_result = "silo", + stack_size = 10, + }, + { + type = "container", + name = "silo", + icon = "__angelsaddons-storage__/graphics/icons/silo.png", + icon_size = 32, + flags = { "placeable-neutral", "player-creation" }, + minable = { mining_time = 1, result = "silo" }, + max_health = 300, + corpse = "small-remnants", + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume = 0.65 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.7 }, + resistances = { + { + type = "fire", + percent = 90, + }, + }, + collision_box = { { -1.9, -1.9 }, { 1.9, 1.9 } }, + selection_box = { { -2, -2 }, { 2, 2 } }, + fast_replaceable_group = "silo", + inventory_size = 256, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + picture = { + filename = "__angelsaddons-storage__/graphics/entity/silo.png", + priority = "extra-high", + width = 192, + height = 192, + shift = { 0, 0 }, + }, + circuit_wire_connection_point = circuit_connector_definitions["chest"].points, + circuit_connector_sprites = circuit_connector_definitions["chest"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + }) +end + +if angelsmods.addons.storage.oresilos then + ----------------------------------------------------------------------------- + -- ORE SILOS ---------------------------------------------------------------- + ----------------------------------------------------------------------------- + local ore_silo = { "ore1", "ore2", "ore3", "ore4", "ore5", "ore6", "coal" } + local silo_add = {} + for order, name in pairs(ore_silo) do + local cont_add, item_add = {}, { nil } + cont_add = table.deepcopy(data.raw.container.silo) + cont_add.name = "silo-" .. name + cont_add.icon = "__angelsaddons-storage__/graphics/icons/silo-" .. name .. ".png" + cont_add.picture.filename = "__angelsaddons-storage__/graphics/entity/silo-" .. name .. ".png" + --cont_add.minable.result = "silo-"..name --want to actually return the silo + + item_add = table.deepcopy(data.raw.item.silo) + item_add.name = "silo-" .. name + item_add.icon = "__angelsaddons-storage__/graphics/icons/silo-" .. name .. ".png" + item_add.order = "a[ore]-" .. order .. "[" .. name .. "]" + item_add.place_result = "silo-" .. name + item_add.subgroup = "angels-ore-silo" + + silo_add[#silo_add + 1] = cont_add + silo_add[#silo_add + 1] = item_add + end + data:extend(silo_add) +end + +if angelsmods.addons.storage.silos then + ----------------------------------------------------------------------------- + -- LOGISTIC SILOS ----------------------------------------------------------- + ----------------------------------------------------------------------------- + local log_names = { + ["aprovider"] = { order = "i", stacks = 384, mode = "active-provider" }, + ["pprovider"] = { order = "j", stacks = 256, mode = "passive-provider" }, + ["storage"] = { order = "k", stacks = 384, mode = "storage", slots = 1 }, + ["buffer"] = { order = "l", stacks = 256, mode = "buffer" }, + ["requester"] = { order = "m", stacks = 209, mode = "requester" }, + } + local silo_add = {} + for name, stat in pairs(log_names) do + local cont_add, item_add = nil, nil + cont_add = table.deepcopy(data.raw.container.silo) + cont_add.name = "silo-" .. stat.mode + cont_add.type = "logistic-container" + cont_add.icon = "__angelsaddons-storage__/graphics/icons/silo-log-" .. name .. ".png" + cont_add.picture.filename = "__angelsaddons-storage__/graphics/entity/silo-log-" .. name .. ".png" + cont_add.minable.result = "silo-" .. stat.mode + cont_add.logistic_mode = stat.mode + cont_add.inventory_size = stat.stacks + if stat.slots then + cont_add.max_logistic_slots = stat.slots + end + + item_add = table.deepcopy(data.raw.item.silo) + item_add.name = "silo-" .. stat.mode + item_add.icon = "__angelsaddons-storage__/graphics/icons/silo-log-" .. name .. ".png" + item_add.order = "a[silo]-" .. stat.order .. "[" .. stat.mode .. "]" + item_add.place_result = "silo-" .. stat.mode + + silo_add[#silo_add + 1] = cont_add + silo_add[#silo_add + 1] = item_add + end + data:extend(silo_add) +end diff --git a/angelsaddons-storage/prototypes/buildings/warehouses.lua b/angelsaddons-storage/prototypes/buildings/warehouses.lua new file mode 100644 index 00000000..9f43d6ef --- /dev/null +++ b/angelsaddons-storage/prototypes/buildings/warehouses.lua @@ -0,0 +1,96 @@ +data:extend({ + { + type = "sprite", + name = "angels-warehouse", + filename = "__angelsaddons-storage__/graphics/icons/warehouse.png", + flags = { "icon" }, + size = 32, + }, +}) + +if angelsmods.addons.storage.warehouses then + ----------------------------------------------------------------------------- + -- REGULAR WAREHOUSE -------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "item", + name = "angels-warehouse", + icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", + icon_size = 32, + subgroup = "angels-warehouse", + order = "a[angels-warehouse]", + place_result = "angels-warehouse", + stack_size = 10, + }, + { + type = "container", + name = "angels-warehouse", + icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", + icon_size = 32, + flags = { "placeable-neutral", "player-creation" }, + minable = { mining_time = 1, result = "angels-warehouse" }, + max_health = 300, + corpse = "small-remnants", + open_sound = { filename = "__base__/sound/metallic-chest-open.ogg", volume = 0.65 }, + close_sound = { filename = "__base__/sound/metallic-chest-close.ogg", volume = 0.7 }, + resistances = { + { + type = "fire", + percent = 90, + }, + }, + collision_box = { { -2.9, -2.9 }, { 2.9, 2.9 } }, + selection_box = { { -3, -3 }, { 3, 3 } }, + fast_replaceable_group = "angels-warehouse", + inventory_size = 768, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + picture = { + filename = "__angelsaddons-storage__/graphics/entity/warehouse.png", + priority = "extra-high", + width = 256, + height = 288, + shift = { 0, -0.5 }, + }, + circuit_wire_connection_point = circuit_connector_definitions["chest"].points, + circuit_connector_sprites = circuit_connector_definitions["chest"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + }) + + ----------------------------------------------------------------------------- + -- LOGISTIC WAREHOUSES ------------------------------------------------------ + ----------------------------------------------------------------------------- + local log_names = { + ["aprovider"] = { order = "i", stacks = 768, mode = "active-provider" }, + ["pprovider"] = { order = "j", stacks = 512, mode = "passive-provider" }, + ["storage"] = { order = "k", stacks = 768, mode = "storage", slots = 1 }, + ["buffer"] = { order = "l", stacks = 512, mode = "buffer" }, + ["requester"] = { order = "m", stacks = 418, mode = "requester" }, + } + local warehouse_add = {} + for name, stat in pairs(log_names) do + local cont_add, item_add = nil, nil + cont_add = table.deepcopy(data.raw.container["angels-warehouse"]) + cont_add.name = "angels-warehouse-" .. stat.mode + cont_add.type = "logistic-container" + cont_add.icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-" .. name .. ".png" + cont_add.picture.filename = "__angelsaddons-storage__/graphics/entity/warehouse-log-" .. name .. ".png" + cont_add.minable.result = "angels-warehouse-" .. stat.mode + cont_add.logistic_mode = stat.mode + cont_add.inventory_size = stat.stacks + if stat.slots then + cont_add.max_logistic_slots = stat.slots + end + + item_add = table.deepcopy(data.raw.item["angels-warehouse"]) + item_add.name = "angels-warehouse-" .. stat.mode + item_add.icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-" .. name .. ".png" + item_add.order = "a[warehouse]-" .. stat.order .. "[" .. stat.mode .. "]" + item_add.place_result = "angels-warehouse-" .. stat.mode + + warehouse_add[#warehouse_add + 1] = cont_add + warehouse_add[#warehouse_add + 1] = item_add + end + data:extend(warehouse_add) +end diff --git a/angelsaddons-storage/prototypes/overrides/fluid-tanks.lua b/angelsaddons-storage/prototypes/overrides/fluid-tanks.lua new file mode 100644 index 00000000..cbcc7c7c --- /dev/null +++ b/angelsaddons-storage/prototypes/overrides/fluid-tanks.lua @@ -0,0 +1,12 @@ +--OVERRIDE FOR ANGELS +-- PETROCHEM +if angelsmods.addons.storage.pressuretank then + if angelsmods.petrochem then + if bobmods and bobmods.logistics then + data.raw["item"]["angels-pressure-tank-1"].order = "c[large-tank]-d[jax35]" + end + else + data.raw["item"]["angels-pressure-tank-1"].subgroup = "storage" + data.raw["item"]["angels-pressure-tank-1"].order = "b[fluid]-a[storage-tank]-a[angels]" + end +end diff --git a/angelsaddons-storage/prototypes/overrides/silos.lua b/angelsaddons-storage/prototypes/overrides/silos.lua new file mode 100644 index 00000000..4a0d8d4a --- /dev/null +++ b/angelsaddons-storage/prototypes/overrides/silos.lua @@ -0,0 +1,89 @@ +if angelsmods.addons.storage.icon_scaling then + if angelsmods.addons.storage.silos or angelsmods.addons.storage.oresilos then + data.raw["container"]["silo"].scale_info_icons = true + end + if angelsmods.addons.storage.silos then + data.raw["logistic-container"]["silo-active-provider"].scale_info_icons = true + data.raw["logistic-container"]["silo-passive-provider"].scale_info_icons = true + data.raw["logistic-container"]["silo-requester"].scale_info_icons = true + data.raw["logistic-container"]["silo-storage"].scale_info_icons = true + data.raw["logistic-container"]["silo-buffer"].scale_info_icons = true + end + if angelsmods.addons.storage.oresilos then + data.raw["container"]["silo-ore1"].scale_info_icons = true + data.raw["container"]["silo-ore2"].scale_info_icons = true + data.raw["container"]["silo-ore3"].scale_info_icons = true + data.raw["container"]["silo-ore4"].scale_info_icons = true + data.raw["container"]["silo-ore5"].scale_info_icons = true + data.raw["container"]["silo-ore6"].scale_info_icons = true + data.raw["container"]["silo-coal"].scale_info_icons = true + end +end + +--OVERRIDE FOR ANGELS +--REFINING +if angelsmods.addons.storage.oresilos and angelsmods.refining then + angelsmods.functions.OV.add_prereq("ore-silos", "ore-crushing") + for refinery_product_name, ore_name in pairs({ + ["saphirite"] = "ore1", + ["jivolite"] = "ore2", + ["stiratite"] = "ore3", + ["crotinnium"] = "ore4", + ["rubyte"] = "ore5", + ["bobmonium"] = "ore6", + }) do + if angelsmods.trigger.refinery_products[refinery_product_name] then + angelsmods.functions.OV.patch_recipes({ + { + name = "silo-" .. ore_name, + ingredients = { + { type = "item", name = "angels-" .. ore_name .. "-crushed", amount = 10 }, + }, + }, + }) + else + angelsmods.functions.add_flag("silo-" .. ore_name, "hidden") + angelsmods.functions.OV.disable_recipe("silo-" .. ore_name) + end + end + angelsmods.functions.OV.patch_recipes({ + { + name = "silo-coal", + ingredients = { + { type = "item", name = angelsmods.petrochem and "coal-crushed" or "coal", amount = 10 }, + }, + }, + }) + if angelsmods.petrochem then + angelsmods.functions.OV.add_prereq("ore-silos", "angels-coal-processing") + end + angelsmods.functions.OV.execute() +end + +--INDUSTRIES +if angelsmods.industries then + data.raw["item-subgroup"]["angels-silo"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-silo"].order = "ac[chests-silo]" + data.raw["item-subgroup"]["angels-ore-silo"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-ore-silo"].order = "ac[chests-silo]" +end + +--OVERRIDE FOR BOBS +if angelsmods.addons.storage.silos then + --LOGISTICS + if mods["boblogistics"] then + else + table.insert( + data.raw.technology["logistic-silos"].unit.ingredients, + { type = "item", name = "utility-science-pack", amount = 1 } + ) + end + + --TECHNOLOGY + if mods["bobtech"] and bobmods.tech.advanced_logistic_science then + table.insert( + data.raw.technology["logistic-silos"].unit.ingredients, + { type = "item", name = "advanced-logistic-science-pack", amount = 1 } + ) + end +end diff --git a/angelsaddons-storage/prototypes/overrides/warehouses.lua b/angelsaddons-storage/prototypes/overrides/warehouses.lua new file mode 100644 index 00000000..740a5513 --- /dev/null +++ b/angelsaddons-storage/prototypes/overrides/warehouses.lua @@ -0,0 +1,35 @@ +if angelsmods.addons.storage.warehouses then + if angelsmods.addons.storage.icon_scaling then + data.raw["container"]["angels-warehouse"].scale_info_icons = true + data.raw["logistic-container"]["angels-warehouse-passive-provider"].scale_info_icons = true + data.raw["logistic-container"]["angels-warehouse-active-provider"].scale_info_icons = true + data.raw["logistic-container"]["angels-warehouse-storage"].scale_info_icons = true + data.raw["logistic-container"]["angels-warehouse-requester"].scale_info_icons = true + data.raw["logistic-container"]["angels-warehouse-buffer"].scale_info_icons = true + end + + --OVERRIDE FOR ANGELS + --INDUSTRIES + if angelsmods.industries then + data.raw["item-subgroup"]["angels-warehouse"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-warehouse"].order = "ad[chests-warehouse]" + end + + --OVERRIDE FOR BOBS + --LOGISTICS + if mods["boblogistics"] then + else + table.insert( + data.raw.technology["angels-logistic-warehouses"].unit.ingredients, + { type = "item", name = "utility-science-pack", amount = 1 } + ) + end + + --TECHNOLOGY + if mods["bobtech"] and bobmods.tech.advanced_logistic_science then + table.insert( + data.raw.technology["angels-logistic-warehouses"].unit.ingredients, + { type = "item", name = "advanced-logistic-science-pack", amount = 1 } + ) + end +end diff --git a/angelsaddons-storage/prototypes/recipes/fluid-tanks.lua b/angelsaddons-storage/prototypes/recipes/fluid-tanks.lua new file mode 100644 index 00000000..82f430c6 --- /dev/null +++ b/angelsaddons-storage/prototypes/recipes/fluid-tanks.lua @@ -0,0 +1,34 @@ +if angelsmods.addons.storage.pressuretank then + --PRESSURE TANKS + data:extend({ + { + type = "recipe", + name = "angels-pressure-tank-1", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "stone-brick", amount = 20 }, + { type = "item", name = "pipe", amount = 50 }, + }, + result = "angels-pressure-tank-1", + icon_size = 32, + }, + }) +end + +if angelsmods.addons.storage.inlinetank and not mods["angelspetrochem"] then + --INLINE TANKS + data:extend({ + { + type = "recipe", + name = "angels-storage-tank-3", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 10 }, + }, + result = "angels-storage-tank-3", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/recipes/silos.lua b/angelsaddons-storage/prototypes/recipes/silos.lua new file mode 100644 index 00000000..37d80415 --- /dev/null +++ b/angelsaddons-storage/prototypes/recipes/silos.lua @@ -0,0 +1,165 @@ +if angelsmods.addons.storage.silos or angelsmods.addons.storage.oresilos then + ----------------------------------------------------------------------------- + -- REGULAR SILO ------------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "recipe", + name = "silo", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "iron-plate", amount = 20 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = "stone-brick", amount = 20 }, + }, + result = "silo", + }, + }) +end + +if angelsmods.addons.storage.oresilos then + ----------------------------------------------------------------------------- + -- ORE SILOS ---------------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "recipe", + name = "silo-ore1", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore1", + }, + { + type = "recipe", + name = "silo-ore2", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore2", + }, + { + type = "recipe", + name = "silo-ore3", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore3", + }, + { + type = "recipe", + name = "silo-ore4", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore4", + }, + { + type = "recipe", + name = "silo-ore5", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore5", + }, + { + type = "recipe", + name = "silo-ore6", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-ore6", + }, + { + type = "recipe", + name = "silo-coal", + energy_required = 0.5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + }, + result = "silo-coal", + }, + }) +end + +if angelsmods.addons.storage.silos then + ----------------------------------------------------------------------------- + -- LOGISTIC SILOS ----------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "recipe", + name = "silo-passive-provider", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 10 }, + }, + result = "silo-passive-provider", + }, + { + type = "recipe", + name = "silo-active-provider", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = "advanced-circuit", amount = 10 }, + }, + result = "silo-active-provider", + }, + { + type = "recipe", + name = "silo-requester", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 10 }, + }, + result = "silo-requester", + }, + { + type = "recipe", + name = "silo-storage", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 10 }, + }, + result = "silo-storage", + }, + { + type = "recipe", + name = "silo-buffer", + energy_required = 5, + enabled = false, + ingredients = { + { type = "item", name = "silo", amount = 1 }, + { type = "item", name = "steel-plate", amount = 10 }, + { type = "item", name = "advanced-circuit", amount = 10 }, + }, + result = "silo-buffer", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/recipes/warehouses.lua b/angelsaddons-storage/prototypes/recipes/warehouses.lua new file mode 100644 index 00000000..5176e253 --- /dev/null +++ b/angelsaddons-storage/prototypes/recipes/warehouses.lua @@ -0,0 +1,103 @@ +if angelsmods.addons.storage.warehouses then + ----------------------------------------------------------------------------- + -- REGULAR WAREHOUSE -------------------------------------------------------- + ----------------------------------------------------------------------------- + data:extend({ + { + type = "recipe", + name = "angels-warehouse", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 50 }, + { type = "item", name = "iron-plate", amount = 100 }, + { type = "item", name = "stone-brick", amount = 100 }, + }, + result = "angels-warehouse", + icon_size = 32, + subgroup = "angels-warehouse", + order = "a", + }, + }) + + ----------------------------------------------------------------------------- + -- LOGISTIC WAREHOUSES ------------------------------------------------------ + ----------------------------------------------------------------------------- + data:extend({ + { + type = "recipe", + name = "angels-warehouse-passive-provider", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "angels-warehouse", amount = 1 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 20 }, + }, + result = "angels-warehouse-passive-provider", + icon_size = 32, + subgroup = "angels-warehouse", + order = "c", + }, + { + type = "recipe", + name = "angels-warehouse-active-provider", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "angels-warehouse", amount = 1 }, + { type = "item", name = "advanced-circuit", amount = 20 }, + }, + result = "angels-warehouse-active-provider", + icon_size = 32, + subgroup = "angels-warehouse", + order = "b", + }, + { + type = "recipe", + name = "angels-warehouse-storage", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "angels-warehouse", amount = 1 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 20 }, + }, + result = "angels-warehouse-storage", + icon_size = 32, + subgroup = "angels-warehouse", + order = "d", + }, + { + type = "recipe", + name = "angels-warehouse-requester", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "angels-warehouse", amount = 1 }, + { type = "item", name = mods["angelsindustries"] and "electronic-circuit" or "advanced-circuit", amount = 20 }, + }, + result = "angels-warehouse-requester", + icon_size = 32, + subgroup = "angels-warehouse", + order = "f", + }, + { + type = "recipe", + name = "angels-warehouse-buffer", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "steel-plate", amount = 20 }, + { type = "item", name = "angels-warehouse", amount = 1 }, + { type = "item", name = "advanced-circuit", amount = 20 }, + }, + result = "angels-warehouse-buffer", + icon_size = 32, + subgroup = "angels-warehouse", + order = "e", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/storage-categories.lua b/angelsaddons-storage/prototypes/storage-categories.lua new file mode 100644 index 00000000..ddb0c431 --- /dev/null +++ b/angelsaddons-storage/prototypes/storage-categories.lua @@ -0,0 +1,30 @@ +if not data.raw["item-subgroup"]["angels-silo"] then + data:extend({ + { + type = "item-subgroup", + name = "angels-silo", + group = "logistics", + order = "zc", + }, + }) +end +if not data.raw["item-subgroup"]["angels-ore-silo"] then + data:extend({ + { + type = "item-subgroup", + name = "angels-ore-silo", + group = "logistics", + order = "zd", + }, + }) +end +if not data.raw["item-subgroup"]["angels-warehouse"] then + data:extend({ + { + type = "item-subgroup", + name = "angels-warehouse", + group = "logistics", + order = "ze", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/technology/fluid-tanks.lua b/angelsaddons-storage/prototypes/technology/fluid-tanks.lua new file mode 100644 index 00000000..be20fad9 --- /dev/null +++ b/angelsaddons-storage/prototypes/technology/fluid-tanks.lua @@ -0,0 +1,35 @@ +if angelsmods.addons.storage.inlinetank and not mods["angelspetrochem"] then + local tech = data.raw.technology["fluid-handling"] + if tech and tech.effects then + table.insert(tech.effects, { type = "unlock-recipe", recipe = "angels-storage-tank-3" }) + end +end + +if angelsmods.addons.storage.pressuretank then + data:extend({ + { + type = "technology", + name = "pressure-tanks", + icon = "__angelsaddons-storage__/graphics/technology/pressure-tank-tech.png", + icon_size = 128, + prerequisites = { + "fluid-handling", + }, + effects = { + { + type = "unlock-recipe", + recipe = "angels-pressure-tank-1", + }, + }, + unit = { + count = 50, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + }, + time = 15, + }, + order = "c-a", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/technology/silos.lua b/angelsaddons-storage/prototypes/technology/silos.lua new file mode 100644 index 00000000..3ae51e62 --- /dev/null +++ b/angelsaddons-storage/prototypes/technology/silos.lua @@ -0,0 +1,102 @@ +if angelsmods.addons.storage.silos or angelsmods.addons.storage.oresilos then + data:extend({ + { + type = "technology", + name = "ore-silos", + icon = "__angelsaddons-storage__/graphics/technology/silo-tech.png", + icon_size = 128, + prerequisites = { + "steel-processing", + }, + effects = { + { + type = "unlock-recipe", + recipe = "silo", + }, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore1", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore2", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore3", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore4", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore5", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-ore6", + } or nil, + angelsmods.addons.storage.oresilos and { + type = "unlock-recipe", + recipe = "silo-coal", + } or nil, + }, + unit = { + count = 30, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + }, + time = 15, + }, + order = "c-a", + }, + }) +end + +if angelsmods.addons.storage.silos then + data:extend({ + { + type = "technology", + name = "logistic-silos", + icon = "__angelsaddons-storage__/graphics/technology/logistic-silo-tech.png", + icon_size = 128, + prerequisites = { + "logistic-system", + "ore-silos", + }, + effects = { + { + type = "unlock-recipe", + recipe = "silo-passive-provider", + }, + { + type = "unlock-recipe", + recipe = "silo-active-provider", + }, + { + type = "unlock-recipe", + recipe = "silo-requester", + }, + { + type = "unlock-recipe", + recipe = "silo-storage", + }, + { + type = "unlock-recipe", + recipe = "silo-buffer", + }, + }, + unit = { + count = 50, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + { type = "item", name = "chemical-science-pack", amount = 1 }, + }, + time = 15, + }, + order = "c-a", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/technology/warehouses.lua b/angelsaddons-storage/prototypes/technology/warehouses.lua new file mode 100644 index 00000000..13047af7 --- /dev/null +++ b/angelsaddons-storage/prototypes/technology/warehouses.lua @@ -0,0 +1,69 @@ +if angelsmods.addons.storage.warehouses then + data:extend({ + { + type = "technology", + name = "angels-warehouses", + icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", + icon_size = 128, + prerequisites = { + (angelsmods.addons.storage.silos or angelsmods.addons.storage.oresilos) and "ore-silos" or "steel-processing", + }, + effects = { + { + type = "unlock-recipe", + recipe = "angels-warehouse", + }, + }, + unit = { + count = 50, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + }, + time = 15, + }, + order = "c-a", + }, + { + type = "technology", + name = "angels-logistic-warehouses", + icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", + icon_size = 128, + prerequisites = { + "angels-warehouses", + "logistic-system", + }, + effects = { + { + type = "unlock-recipe", + recipe = "angels-warehouse-passive-provider", + }, + { + type = "unlock-recipe", + recipe = "angels-warehouse-active-provider", + }, + { + type = "unlock-recipe", + recipe = "angels-warehouse-storage", + }, + { + type = "unlock-recipe", + recipe = "angels-warehouse-requester", + }, + { + type = "unlock-recipe", + recipe = "angels-warehouse-buffer", + }, + }, + unit = { + count = 75, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + { type = "item", name = "chemical-science-pack", amount = 1 }, + }, + time = 15, + }, + order = "c-a", + }, + }) +end diff --git a/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage-description.lua b/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage-description.lua new file mode 100644 index 00000000..d623143c --- /dev/null +++ b/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage-description.lua @@ -0,0 +1,42 @@ +local description = { "", { "tips-and-tricks-description.angelsaddons-storage" } } + +local function get_item_from_name(item_name, item_type, before) + before = before or "- " + item_type = item_type or "item" + return { + "", + before .. "[" .. "img=" .. item_type .. "/" .. item_name .. "] ", + { item_type .. "-name." .. item_name }, + "\n", + } +end + +local available_storage = { "" } +if angelsmods.addons.storage.silos then + table.insert(available_storage, "\n\n[font=default-bold]STORAGE SILOS:[/font]\n") + table.insert(available_storage, get_item_from_name("silo")) + table.insert(available_storage, "[font=default-bold] NOTE[/font]: Includes logistics versions once unlocked") +end +if angelsmods.addons.storage.oresilos then + table.insert(available_storage, "\n[font=default-bold]ORE SILOS:[/font]\n") + table.insert(available_storage, get_item_from_name("silo-ore2")) + table.insert(available_storage, "[font=default-bold] NOTE[/font]: Colours and textures based on angels 6 base ores") +end +if angelsmods.addons.storage.warehouses then + table.insert(available_storage, "\n[font=default-bold]WAREHOUSES:[/font]\n") + table.insert(available_storage, get_item_from_name("angels-warehouse")) + table.insert(available_storage, "[font=default-bold] NOTE[/font]: Includes logistics versions once unlocked") +end +if angelsmods.addons.storage.pressuretank or (angelsmods.addons.storage.inlinetank and not mods["angelspetrochem"]) then + table.insert(available_storage, "\n[font=default-bold]FLUID STORAGE:[/font]\n") +end +if angelsmods.addons.storage.inlinetank and not mods["angelspetrochem"] then + table.insert(available_storage, get_item_from_name("angels-storage-tank-3")) +end +if angelsmods.addons.storage.pressuretank then + table.insert(available_storage, get_item_from_name("angels-pressure-tank-1")) +end + +table.insert(description, available_storage) +table.insert(description, { "tips-and-tricks-description.angelsaddons-storage-notes" }) +return description diff --git a/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage.lua b/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage.lua new file mode 100644 index 00000000..e4efb0d3 --- /dev/null +++ b/angelsaddons-storage/prototypes/tips-and-tricks/1-angelsaddons-storage/1-angelsaddons-storage.lua @@ -0,0 +1,32 @@ +data:extend({ + { + type = "tips-and-tricks-item-category", + name = "angelsaddons-storage", + order = "c-ac[addons-storage]", + }, + + { + type = "tips-and-tricks-item", + name = "angelsaddons-storage", + + is_title = true, + tag = "[img=angels-warehouse]", + localised_name = { "tips-and-tricks-name.angelsaddons-storage" }, + localised_description = require( + "prototypes.tips-and-tricks.1-angelsaddons-storage.1-angelsaddons-storage-description" + ), + + category = "angelsaddons-storage", + order = "aa-[storage]", + indent = 0, + + starting_status = "locked", + dependencies = nil, + trigger = { + type = "research", + technology = "steel-processing", + }, + + --simulation = require "prototypes.tips-and-tricks.1-angelsaddons-storage.1-angelsaddons-storage-simulation", + }, +}) diff --git a/angelsaddons-storage/prototypes/tips-and-tricks/tips-and-tricks.lua b/angelsaddons-storage/prototypes/tips-and-tricks/tips-and-tricks.lua new file mode 100644 index 00000000..275b6df9 --- /dev/null +++ b/angelsaddons-storage/prototypes/tips-and-tricks/tips-and-tricks.lua @@ -0,0 +1,2 @@ +require("prototypes.tips-and-tricks.1-angelsaddons-storage.1-angelsaddons-storage") +require("prototypes.tips-and-tricks.1-angelsaddons-storage.1-angelsaddons-storage-description") diff --git a/angelsaddons-storage/settings-updates.lua b/angelsaddons-storage/settings-updates.lua new file mode 100644 index 00000000..94eb8ebe --- /dev/null +++ b/angelsaddons-storage/settings-updates.lua @@ -0,0 +1,3 @@ +if mods["angelspetrochem"] then + angelsmods.settings.hide_setting("bool-setting", "angels-enable-inline-tank") +end diff --git a/angelsaddons-storage/settings.lua b/angelsaddons-storage/settings.lua new file mode 100644 index 00000000..bd29479e --- /dev/null +++ b/angelsaddons-storage/settings.lua @@ -0,0 +1,44 @@ +data:extend({ + { + type = "bool-setting", + name = "angels-enable-oresilos", + setting_type = "startup", + default_value = mods["angelsrefining"] and true or false, + order = "a-a", + }, + { + type = "bool-setting", + name = "angels-enable-silos", + setting_type = "startup", + default_value = true, + order = "a-b", + }, + { + type = "bool-setting", + name = "angels-enable-warehouses", + setting_type = "startup", + default_value = true, + order = "b", + }, + { + type = "bool-setting", + name = "angels-enable-inline-tank", + setting_type = "startup", + default_value = true, + order = "c-a", + }, + { + type = "bool-setting", + name = "angels-enable-pressure-tank", + setting_type = "startup", + default_value = true, + order = "c-b", + }, + { + type = "bool-setting", + name = "angels-enable-storage-icon-scaling", + setting_type = "startup", + default_value = false, + order = "d", + }, +}) diff --git a/angelsaddons-storage/thumbnail.png b/angelsaddons-storage/thumbnail.png new file mode 100644 index 00000000..b74e0e03 Binary files /dev/null and b/angelsaddons-storage/thumbnail.png differ diff --git a/angelsaddons-storage_0.0.10.zip b/angelsaddons-storage_0.0.10.zip deleted file mode 100644 index 8ace41e7..00000000 Binary files a/angelsaddons-storage_0.0.10.zip and /dev/null differ diff --git a/angelsbioprocessing_9.7.24/changelog.txt b/angelsbioprocessing/changelog.txt similarity index 100% rename from angelsbioprocessing_9.7.24/changelog.txt rename to angelsbioprocessing/changelog.txt diff --git a/angelsbioprocessing_9.7.24/control.lua b/angelsbioprocessing/control.lua similarity index 100% rename from angelsbioprocessing_9.7.24/control.lua rename to angelsbioprocessing/control.lua diff --git a/angelsbioprocessing_9.7.24/data-updates.lua b/angelsbioprocessing/data-updates.lua similarity index 100% rename from angelsbioprocessing_9.7.24/data-updates.lua rename to angelsbioprocessing/data-updates.lua diff --git a/angelsbioprocessing_9.7.24/data.lua b/angelsbioprocessing/data.lua similarity index 100% rename from angelsbioprocessing_9.7.24/data.lua rename to angelsbioprocessing/data.lua diff --git a/angelsbioprocessing_9.7.24/graphics/empty_icon.png b/angelsbioprocessing/graphics/empty_icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/empty_icon.png rename to angelsbioprocessing/graphics/empty_icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/2x2.png b/angelsbioprocessing/graphics/entity/2x2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/2x2.png rename to angelsbioprocessing/graphics/entity/2x2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/3x3.png b/angelsbioprocessing/graphics/entity/3x3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/3x3.png rename to angelsbioprocessing/graphics/entity/3x3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/4x4.png b/angelsbioprocessing/graphics/entity/4x4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/4x4.png rename to angelsbioprocessing/graphics/entity/4x4.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/5x5.png b/angelsbioprocessing/graphics/entity/5x5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/5x5.png rename to angelsbioprocessing/graphics/entity/5x5.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/6x6.png b/angelsbioprocessing/graphics/entity/6x6.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/6x6.png rename to angelsbioprocessing/graphics/entity/6x6.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/7x7.png b/angelsbioprocessing/graphics/entity/7x7.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/7x7.png rename to angelsbioprocessing/graphics/entity/7x7.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/algae-farm/algae-farm.png b/angelsbioprocessing/graphics/entity/algae-farm/algae-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/algae-farm/algae-farm.png rename to angelsbioprocessing/graphics/entity/algae-farm/algae-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/algae-farm/water-splash.png b/angelsbioprocessing/graphics/entity/algae-farm/water-splash.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/algae-farm/water-splash.png rename to angelsbioprocessing/graphics/entity/algae-farm/water-splash.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-1.png b/angelsbioprocessing/graphics/entity/aliens/fish-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-1.png rename to angelsbioprocessing/graphics/entity/aliens/fish-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-2.png b/angelsbioprocessing/graphics/entity/aliens/fish-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-2.png rename to angelsbioprocessing/graphics/entity/aliens/fish-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-3.png b/angelsbioprocessing/graphics/entity/aliens/fish-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/aliens/fish-3.png rename to angelsbioprocessing/graphics/entity/aliens/fish-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-butchery/bio-butchery.png b/angelsbioprocessing/graphics/entity/bio-butchery/bio-butchery.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-butchery/bio-butchery.png rename to angelsbioprocessing/graphics/entity/bio-butchery/bio-butchery.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-animation.png b/angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-animation.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-animation.png rename to angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-animation.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-off.png b/angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-off.png rename to angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-shadow.png b/angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-hatchery/bio-hatchery-shadow.png rename to angelsbioprocessing/graphics/entity/bio-hatchery/bio-hatchery-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-press/bio-press.png b/angelsbioprocessing/graphics/entity/bio-press/bio-press.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-press/bio-press.png rename to angelsbioprocessing/graphics/entity/bio-press/bio-press.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processing-plant/bio-processing-plant.png b/angelsbioprocessing/graphics/entity/bio-processing-plant/bio-processing-plant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processing-plant/bio-processing-plant.png rename to angelsbioprocessing/graphics/entity/bio-processing-plant/bio-processing-plant.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-ani-original.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-ani-original.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-ani-original.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-ani-original.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-ani.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-ani.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-ani.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-ani.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg-original.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg-original.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg-original.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg-original.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg0000.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg0000.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-bg0000.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-bg0000.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-trans.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor-trans.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor-trans.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor-trans.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor.png b/angelsbioprocessing/graphics/entity/bio-processor/bio-processor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-processor/bio-processor.png rename to angelsbioprocessing/graphics/entity/bio-processor/bio-processor.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-biter-off.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-biter-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-biter-off.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-biter-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-biter.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-biter.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-biter.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-biter.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish-off.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish-off.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-fish.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-fish.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-puffer-off.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-puffer-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-puffer-off.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-puffer-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-puffer.png b/angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-puffer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/bio-refugium-puffer.png rename to angelsbioprocessing/graphics/entity/bio-refugium/bio-refugium-puffer.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-1-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-1-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-1-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-1-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-1.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-1.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-2-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-2-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-2-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-2-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-2.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-2.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-3-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-3-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-3-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-3-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-3.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-3.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-4-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-4-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-4-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-4-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-4.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-4.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-5-shadow.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-5-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-5-shadow.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-5-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-5.png b/angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/bio-refugium/puffer-nest-5.png rename to angelsbioprocessing/graphics/entity/bio-refugium/puffer-nest-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/composter/composter-animation.png b/angelsbioprocessing/graphics/entity/composter/composter-animation.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/composter/composter-animation.png rename to angelsbioprocessing/graphics/entity/composter/composter-animation.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/composter/composter.png b/angelsbioprocessing/graphics/entity/composter/composter.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/composter/composter.png rename to angelsbioprocessing/graphics/entity/composter/composter.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/crop-farm.png b/angelsbioprocessing/graphics/entity/crop-farm/crop-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/crop-farm.png rename to angelsbioprocessing/graphics/entity/crop-farm/crop-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/farm-base.png b/angelsbioprocessing/graphics/entity/crop-farm/farm-base.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/farm-base.png rename to angelsbioprocessing/graphics/entity/crop-farm/farm-base.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-1.png b/angelsbioprocessing/graphics/entity/crop-farm/field-animation-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-1.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-animation-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-2.png b/angelsbioprocessing/graphics/entity/crop-farm/field-animation-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-2.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-animation-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-3.png b/angelsbioprocessing/graphics/entity/crop-farm/field-animation-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-3.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-animation-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-4.png b/angelsbioprocessing/graphics/entity/crop-farm/field-animation-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-animation-4.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-animation-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-basic.png b/angelsbioprocessing/graphics/entity/crop-farm/field-basic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-basic.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-basic.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-desert.png b/angelsbioprocessing/graphics/entity/crop-farm/field-desert.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-desert.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-desert.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-temperate.png b/angelsbioprocessing/graphics/entity/crop-farm/field-temperate.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-temperate.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-temperate.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-water.png b/angelsbioprocessing/graphics/entity/crop-farm/field-water.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/crop-farm/field-water.png rename to angelsbioprocessing/graphics/entity/crop-farm/field-water.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/dummy.png b/angelsbioprocessing/graphics/entity/dummy.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/dummy.png rename to angelsbioprocessing/graphics/entity/dummy.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-1.png b/angelsbioprocessing/graphics/entity/gardens/desert-garden-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-1.png rename to angelsbioprocessing/graphics/entity/gardens/desert-garden-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-2.png b/angelsbioprocessing/graphics/entity/gardens/desert-garden-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-2.png rename to angelsbioprocessing/graphics/entity/gardens/desert-garden-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-3.png b/angelsbioprocessing/graphics/entity/gardens/desert-garden-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-3.png rename to angelsbioprocessing/graphics/entity/gardens/desert-garden-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-4.png b/angelsbioprocessing/graphics/entity/gardens/desert-garden-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/desert-garden-4.png rename to angelsbioprocessing/graphics/entity/gardens/desert-garden-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-1.png b/angelsbioprocessing/graphics/entity/gardens/swamp-garden-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-1.png rename to angelsbioprocessing/graphics/entity/gardens/swamp-garden-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-2.png b/angelsbioprocessing/graphics/entity/gardens/swamp-garden-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-2.png rename to angelsbioprocessing/graphics/entity/gardens/swamp-garden-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-3.png b/angelsbioprocessing/graphics/entity/gardens/swamp-garden-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/swamp-garden-3.png rename to angelsbioprocessing/graphics/entity/gardens/swamp-garden-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-1.png b/angelsbioprocessing/graphics/entity/gardens/temperate-garden-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-1.png rename to angelsbioprocessing/graphics/entity/gardens/temperate-garden-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-2.png b/angelsbioprocessing/graphics/entity/gardens/temperate-garden-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-2.png rename to angelsbioprocessing/graphics/entity/gardens/temperate-garden-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-3.png b/angelsbioprocessing/graphics/entity/gardens/temperate-garden-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-3.png rename to angelsbioprocessing/graphics/entity/gardens/temperate-garden-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-4.png b/angelsbioprocessing/graphics/entity/gardens/temperate-garden-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-4.png rename to angelsbioprocessing/graphics/entity/gardens/temperate-garden-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-5.png b/angelsbioprocessing/graphics/entity/gardens/temperate-garden-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/gardens/temperate-garden-5.png rename to angelsbioprocessing/graphics/entity/gardens/temperate-garden-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/nutrient-extractor/nutrient-extractor.png b/angelsbioprocessing/graphics/entity/nutrient-extractor/nutrient-extractor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/nutrient-extractor/nutrient-extractor.png rename to angelsbioprocessing/graphics/entity/nutrient-extractor/nutrient-extractor.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/seed-extractor/seed-extractor.png b/angelsbioprocessing/graphics/entity/seed-extractor/seed-extractor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/seed-extractor/seed-extractor.png rename to angelsbioprocessing/graphics/entity/seed-extractor/seed-extractor.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-inner.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-inner.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-inner.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-inner.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-o.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-o.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-o.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-o.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-outer.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-outer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-outer.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-outer.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-u.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-u.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-corner-u.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-corner-u.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-side.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-side.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-side.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-side.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-small.png b/angelsbioprocessing/graphics/entity/tile-bio/bio-tile-small.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/tile-bio/bio-tile-small.png rename to angelsbioprocessing/graphics/entity/tile-bio/bio-tile-small.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/1.png b/angelsbioprocessing/graphics/entity/trees/1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/1.png rename to angelsbioprocessing/graphics/entity/trees/1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/2.png b/angelsbioprocessing/graphics/entity/trees/2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/2.png rename to angelsbioprocessing/graphics/entity/trees/2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-base.png b/angelsbioprocessing/graphics/entity/trees/bio-arboretum-base.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-base.png rename to angelsbioprocessing/graphics/entity/trees/bio-arboretum-base.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-off.png b/angelsbioprocessing/graphics/entity/trees/bio-arboretum-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-off.png rename to angelsbioprocessing/graphics/entity/trees/bio-arboretum-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-on.png b/angelsbioprocessing/graphics/entity/trees/bio-arboretum-on.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-on.png rename to angelsbioprocessing/graphics/entity/trees/bio-arboretum-on.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-pipes.png b/angelsbioprocessing/graphics/entity/trees/bio-arboretum-pipes.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-pipes.png rename to angelsbioprocessing/graphics/entity/trees/bio-arboretum-pipes.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-shadow.png b/angelsbioprocessing/graphics/entity/trees/bio-arboretum-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-arboretum-shadow.png rename to angelsbioprocessing/graphics/entity/trees/bio-arboretum-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-1.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-1.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-2.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-2.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-3.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-3.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-base.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-base.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-base.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-base.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-pipes.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-pipes.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-pipes.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-pipes.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-shadow.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-shadow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-shadow.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-shadow.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top-off.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-top-off.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top-off.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-top-off.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top-on.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-top-on.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top-on.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-top-on.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top.png b/angelsbioprocessing/graphics/entity/trees/bio-generator-top.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/bio-generator-top.png rename to angelsbioprocessing/graphics/entity/trees/bio-generator-top.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-a.png b/angelsbioprocessing/graphics/entity/trees/tree-1-a.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-a.png rename to angelsbioprocessing/graphics/entity/trees/tree-1-a.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-b.png b/angelsbioprocessing/graphics/entity/trees/tree-1-b.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-b.png rename to angelsbioprocessing/graphics/entity/trees/tree-1-b.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-c.png b/angelsbioprocessing/graphics/entity/trees/tree-1-c.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-1-c.png rename to angelsbioprocessing/graphics/entity/trees/tree-1-c.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-a.png b/angelsbioprocessing/graphics/entity/trees/tree-2-a.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-a.png rename to angelsbioprocessing/graphics/entity/trees/tree-2-a.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-b.png b/angelsbioprocessing/graphics/entity/trees/tree-2-b.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-b.png rename to angelsbioprocessing/graphics/entity/trees/tree-2-b.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-c.png b/angelsbioprocessing/graphics/entity/trees/tree-2-c.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-c.png rename to angelsbioprocessing/graphics/entity/trees/tree-2-c.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-d.png b/angelsbioprocessing/graphics/entity/trees/tree-2-d.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-2-d.png rename to angelsbioprocessing/graphics/entity/trees/tree-2-d.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-a.png b/angelsbioprocessing/graphics/entity/trees/tree-3-a.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-a.png rename to angelsbioprocessing/graphics/entity/trees/tree-3-a.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-b.png b/angelsbioprocessing/graphics/entity/trees/tree-3-b.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-b.png rename to angelsbioprocessing/graphics/entity/trees/tree-3-b.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-c.png b/angelsbioprocessing/graphics/entity/trees/tree-3-c.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-c.png rename to angelsbioprocessing/graphics/entity/trees/tree-3-c.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-d.png b/angelsbioprocessing/graphics/entity/trees/tree-3-d.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-d.png rename to angelsbioprocessing/graphics/entity/trees/tree-3-d.png diff --git a/angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-e.png b/angelsbioprocessing/graphics/entity/trees/tree-3-e.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/entity/trees/tree-3-e.png rename to angelsbioprocessing/graphics/entity/trees/tree-3-e.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/algae-blue.png b/angelsbioprocessing/graphics/icons/algae-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/algae-blue.png rename to angelsbioprocessing/graphics/icons/algae-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/algae-brown.png b/angelsbioprocessing/graphics/icons/algae-brown.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/algae-brown.png rename to angelsbioprocessing/graphics/icons/algae-brown.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/algae-farm.png b/angelsbioprocessing/graphics/icons/algae-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/algae-farm.png rename to angelsbioprocessing/graphics/icons/algae-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/algae-green.png b/angelsbioprocessing/graphics/icons/algae-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/algae-green.png rename to angelsbioprocessing/graphics/icons/algae-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/algae-red.png b/angelsbioprocessing/graphics/icons/algae-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/algae-red.png rename to angelsbioprocessing/graphics/icons/algae-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-blue.png b/angelsbioprocessing/graphics/icons/alien-artifact-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-blue.png rename to angelsbioprocessing/graphics/icons/alien-artifact-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-green.png b/angelsbioprocessing/graphics/icons/alien-artifact-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-green.png rename to angelsbioprocessing/graphics/icons/alien-artifact-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-orange.png b/angelsbioprocessing/graphics/icons/alien-artifact-orange.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-orange.png rename to angelsbioprocessing/graphics/icons/alien-artifact-orange.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-purple.png b/angelsbioprocessing/graphics/icons/alien-artifact-purple.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-purple.png rename to angelsbioprocessing/graphics/icons/alien-artifact-purple.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-red.png b/angelsbioprocessing/graphics/icons/alien-artifact-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-red.png rename to angelsbioprocessing/graphics/icons/alien-artifact-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-yellow.png b/angelsbioprocessing/graphics/icons/alien-artifact-yellow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact-yellow.png rename to angelsbioprocessing/graphics/icons/alien-artifact-yellow.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-artifact.png b/angelsbioprocessing/graphics/icons/alien-artifact.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-artifact.png rename to angelsbioprocessing/graphics/icons/alien-artifact.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-bacteria.png b/angelsbioprocessing/graphics/icons/alien-bacteria.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-bacteria.png rename to angelsbioprocessing/graphics/icons/alien-bacteria.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-farm.png b/angelsbioprocessing/graphics/icons/alien-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-farm.png rename to angelsbioprocessing/graphics/icons/alien-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-fish-1.png b/angelsbioprocessing/graphics/icons/alien-fish-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-fish-1.png rename to angelsbioprocessing/graphics/icons/alien-fish-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-fish-2.png b/angelsbioprocessing/graphics/icons/alien-fish-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-fish-2.png rename to angelsbioprocessing/graphics/icons/alien-fish-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-fish-3.png b/angelsbioprocessing/graphics/icons/alien-fish-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-fish-3.png rename to angelsbioprocessing/graphics/icons/alien-fish-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-goo.png b/angelsbioprocessing/graphics/icons/alien-goo.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-goo.png rename to angelsbioprocessing/graphics/icons/alien-goo.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-base.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-base.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-base.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-base.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-blue.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-blue.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-green.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-green.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-orange.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-orange.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-orange.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-orange.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-purple.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-purple.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-purple.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-purple.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-red.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-red.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-yellow.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact-yellow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact-yellow.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact-yellow.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact.png b/angelsbioprocessing/graphics/icons/alien-pre-artifact.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-pre-artifact.png rename to angelsbioprocessing/graphics/icons/alien-pre-artifact.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-processed-meat.png b/angelsbioprocessing/graphics/icons/alien-processed-meat.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-processed-meat.png rename to angelsbioprocessing/graphics/icons/alien-processed-meat.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/alien-spores.png b/angelsbioprocessing/graphics/icons/alien-spores.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/alien-spores.png rename to angelsbioprocessing/graphics/icons/alien-spores.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bacteria-anaerobic.png b/angelsbioprocessing/graphics/icons/bacteria-anaerobic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bacteria-anaerobic.png rename to angelsbioprocessing/graphics/icons/bacteria-anaerobic.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/basic-farm.png b/angelsbioprocessing/graphics/icons/basic-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/basic-farm.png rename to angelsbioprocessing/graphics/icons/basic-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-arboretum.png b/angelsbioprocessing/graphics/icons/bio-arboretum.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-arboretum.png rename to angelsbioprocessing/graphics/icons/bio-arboretum.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-butchery.png b/angelsbioprocessing/graphics/icons/bio-butchery.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-butchery.png rename to angelsbioprocessing/graphics/icons/bio-butchery.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-desert-generator.png b/angelsbioprocessing/graphics/icons/bio-desert-generator.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-desert-generator.png rename to angelsbioprocessing/graphics/icons/bio-desert-generator.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-hatchery.png b/angelsbioprocessing/graphics/icons/bio-hatchery.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-hatchery.png rename to angelsbioprocessing/graphics/icons/bio-hatchery.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-press.png b/angelsbioprocessing/graphics/icons/bio-press.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-press.png rename to angelsbioprocessing/graphics/icons/bio-press.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-processor.png b/angelsbioprocessing/graphics/icons/bio-processor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-processor.png rename to angelsbioprocessing/graphics/icons/bio-processor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-refugium-fish.png b/angelsbioprocessing/graphics/icons/bio-refugium-fish.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-refugium-fish.png rename to angelsbioprocessing/graphics/icons/bio-refugium-fish.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-refugium-puffer.png b/angelsbioprocessing/graphics/icons/bio-refugium-puffer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-refugium-puffer.png rename to angelsbioprocessing/graphics/icons/bio-refugium-puffer.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-swamp-generator.png b/angelsbioprocessing/graphics/icons/bio-swamp-generator.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-swamp-generator.png rename to angelsbioprocessing/graphics/icons/bio-swamp-generator.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-temperate-generator.png b/angelsbioprocessing/graphics/icons/bio-temperate-generator.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-temperate-generator.png rename to angelsbioprocessing/graphics/icons/bio-temperate-generator.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bio-tile.png b/angelsbioprocessing/graphics/icons/bio-tile.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bio-tile.png rename to angelsbioprocessing/graphics/icons/bio-tile.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-1.png b/angelsbioprocessing/graphics/icons/biomass-refining-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-1.png rename to angelsbioprocessing/graphics/icons/biomass-refining-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-2.png b/angelsbioprocessing/graphics/icons/biomass-refining-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-2.png rename to angelsbioprocessing/graphics/icons/biomass-refining-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-3.png b/angelsbioprocessing/graphics/icons/biomass-refining-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biomass-refining-3.png rename to angelsbioprocessing/graphics/icons/biomass-refining-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biter-big.png b/angelsbioprocessing/graphics/icons/biter-big.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biter-big.png rename to angelsbioprocessing/graphics/icons/biter-big.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biter-crown.png b/angelsbioprocessing/graphics/icons/biter-crown.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biter-crown.png rename to angelsbioprocessing/graphics/icons/biter-crown.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biter-medium.png b/angelsbioprocessing/graphics/icons/biter-medium.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biter-medium.png rename to angelsbioprocessing/graphics/icons/biter-medium.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/biter-small.png b/angelsbioprocessing/graphics/icons/biter-small.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/biter-small.png rename to angelsbioprocessing/graphics/icons/biter-small.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/blue-cellulose-fiber.png b/angelsbioprocessing/graphics/icons/blue-cellulose-fiber.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/blue-cellulose-fiber.png rename to angelsbioprocessing/graphics/icons/blue-cellulose-fiber.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-1.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-1.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-2.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-2.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-3.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-3.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-4.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-4.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-5.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-5.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-6.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-6.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-6.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-6.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-7.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-7.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-7.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-7.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-8.png b/angelsbioprocessing/graphics/icons/bobmodules/orange-module-8.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/orange-module-8.png rename to angelsbioprocessing/graphics/icons/bobmodules/orange-module-8.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-1.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-1.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-2.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-2.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-3.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-3.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-4.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-4.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-5.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-5.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-6.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-6.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-6.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-6.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-7.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-7.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-7.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-7.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-8.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module-8.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module-8.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module-8.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module.png b/angelsbioprocessing/graphics/icons/bobmodules/purple-module.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/bobmodules/purple-module.png rename to angelsbioprocessing/graphics/icons/bobmodules/purple-module.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/breeding.png b/angelsbioprocessing/graphics/icons/breeding.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/breeding.png rename to angelsbioprocessing/graphics/icons/breeding.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber-algae.png b/angelsbioprocessing/graphics/icons/cellulose-fiber-algae.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber-algae.png rename to angelsbioprocessing/graphics/icons/cellulose-fiber-algae.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber-raw-wood.png b/angelsbioprocessing/graphics/icons/cellulose-fiber-raw-wood.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber-raw-wood.png rename to angelsbioprocessing/graphics/icons/cellulose-fiber-raw-wood.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber.png b/angelsbioprocessing/graphics/icons/cellulose-fiber.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/cellulose-fiber.png rename to angelsbioprocessing/graphics/icons/cellulose-fiber.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/composter.png b/angelsbioprocessing/graphics/icons/composter.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/composter.png rename to angelsbioprocessing/graphics/icons/composter.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-enhancer.png b/angelsbioprocessing/graphics/icons/crystal-enhancer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-enhancer.png rename to angelsbioprocessing/graphics/icons/crystal-enhancer.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-full-blue.png b/angelsbioprocessing/graphics/icons/crystal-full-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-full-blue.png rename to angelsbioprocessing/graphics/icons/crystal-full-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-full-green.png b/angelsbioprocessing/graphics/icons/crystal-full-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-full-green.png rename to angelsbioprocessing/graphics/icons/crystal-full-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-full-harmonic.png b/angelsbioprocessing/graphics/icons/crystal-full-harmonic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-full-harmonic.png rename to angelsbioprocessing/graphics/icons/crystal-full-harmonic.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-full-raw.png b/angelsbioprocessing/graphics/icons/crystal-full-raw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-full-raw.png rename to angelsbioprocessing/graphics/icons/crystal-full-raw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-full-red.png b/angelsbioprocessing/graphics/icons/crystal-full-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-full-red.png rename to angelsbioprocessing/graphics/icons/crystal-full-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-grindstone.png b/angelsbioprocessing/graphics/icons/crystal-grindstone.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-grindstone.png rename to angelsbioprocessing/graphics/icons/crystal-grindstone.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-powder.png b/angelsbioprocessing/graphics/icons/crystal-powder.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-powder.png rename to angelsbioprocessing/graphics/icons/crystal-powder.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-seed.png b/angelsbioprocessing/graphics/icons/crystal-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-seed.png rename to angelsbioprocessing/graphics/icons/crystal-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-blue.png b/angelsbioprocessing/graphics/icons/crystal-shard-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-blue.png rename to angelsbioprocessing/graphics/icons/crystal-shard-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-green.png b/angelsbioprocessing/graphics/icons/crystal-shard-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-green.png rename to angelsbioprocessing/graphics/icons/crystal-shard-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-harmonic.png b/angelsbioprocessing/graphics/icons/crystal-shard-harmonic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-harmonic.png rename to angelsbioprocessing/graphics/icons/crystal-shard-harmonic.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-raw.png b/angelsbioprocessing/graphics/icons/crystal-shard-raw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-raw.png rename to angelsbioprocessing/graphics/icons/crystal-shard-raw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-red.png b/angelsbioprocessing/graphics/icons/crystal-shard-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-shard-red.png rename to angelsbioprocessing/graphics/icons/crystal-shard-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-blue.png b/angelsbioprocessing/graphics/icons/crystal-splinter-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-blue.png rename to angelsbioprocessing/graphics/icons/crystal-splinter-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-green.png b/angelsbioprocessing/graphics/icons/crystal-splinter-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-green.png rename to angelsbioprocessing/graphics/icons/crystal-splinter-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-harmonic.png b/angelsbioprocessing/graphics/icons/crystal-splinter-harmonic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-harmonic.png rename to angelsbioprocessing/graphics/icons/crystal-splinter-harmonic.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-raw.png b/angelsbioprocessing/graphics/icons/crystal-splinter-raw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-raw.png rename to angelsbioprocessing/graphics/icons/crystal-splinter-raw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-red.png b/angelsbioprocessing/graphics/icons/crystal-splinter-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/crystal-splinter-red.png rename to angelsbioprocessing/graphics/icons/crystal-splinter-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-1-seed.png b/angelsbioprocessing/graphics/icons/desert-1-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-1-seed.png rename to angelsbioprocessing/graphics/icons/desert-1-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-1.png b/angelsbioprocessing/graphics/icons/desert-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-1.png rename to angelsbioprocessing/graphics/icons/desert-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-2-seed.png b/angelsbioprocessing/graphics/icons/desert-2-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-2-seed.png rename to angelsbioprocessing/graphics/icons/desert-2-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-2.png b/angelsbioprocessing/graphics/icons/desert-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-2.png rename to angelsbioprocessing/graphics/icons/desert-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-3-seed-dormant.png b/angelsbioprocessing/graphics/icons/desert-3-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-3-seed-dormant.png rename to angelsbioprocessing/graphics/icons/desert-3-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-3-seed.png b/angelsbioprocessing/graphics/icons/desert-3-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-3-seed.png rename to angelsbioprocessing/graphics/icons/desert-3-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-3.png b/angelsbioprocessing/graphics/icons/desert-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-3.png rename to angelsbioprocessing/graphics/icons/desert-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-4-seed-dormant.png b/angelsbioprocessing/graphics/icons/desert-4-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-4-seed-dormant.png rename to angelsbioprocessing/graphics/icons/desert-4-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-4-seed.png b/angelsbioprocessing/graphics/icons/desert-4-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-4-seed.png rename to angelsbioprocessing/graphics/icons/desert-4-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-4.png b/angelsbioprocessing/graphics/icons/desert-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-4.png rename to angelsbioprocessing/graphics/icons/desert-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-5-seed-dormant.png b/angelsbioprocessing/graphics/icons/desert-5-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-5-seed-dormant.png rename to angelsbioprocessing/graphics/icons/desert-5-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-5-seed.png b/angelsbioprocessing/graphics/icons/desert-5-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-5-seed.png rename to angelsbioprocessing/graphics/icons/desert-5-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-5.png b/angelsbioprocessing/graphics/icons/desert-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-5.png rename to angelsbioprocessing/graphics/icons/desert-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-farm.png b/angelsbioprocessing/graphics/icons/desert-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-farm.png rename to angelsbioprocessing/graphics/icons/desert-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-garden.png b/angelsbioprocessing/graphics/icons/desert-garden.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-garden.png rename to angelsbioprocessing/graphics/icons/desert-garden.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/desert-upgrade.png b/angelsbioprocessing/graphics/icons/desert-upgrade.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/desert-upgrade.png rename to angelsbioprocessing/graphics/icons/desert-upgrade.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/egg-large.png b/angelsbioprocessing/graphics/icons/egg-large.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/egg-large.png rename to angelsbioprocessing/graphics/icons/egg-large.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/egg-medium.png b/angelsbioprocessing/graphics/icons/egg-medium.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/egg-medium.png rename to angelsbioprocessing/graphics/icons/egg-medium.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/egg-shell-seed.png b/angelsbioprocessing/graphics/icons/egg-shell-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/egg-shell-seed.png rename to angelsbioprocessing/graphics/icons/egg-shell-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/egg-small.png b/angelsbioprocessing/graphics/icons/egg-small.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/egg-small.png rename to angelsbioprocessing/graphics/icons/egg-small.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/fish-pulp.png b/angelsbioprocessing/graphics/icons/fish-pulp.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/fish-pulp.png rename to angelsbioprocessing/graphics/icons/fish-pulp.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/gas-chlor-methane.png b/angelsbioprocessing/graphics/icons/gas-chlor-methane.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/gas-chlor-methane.png rename to angelsbioprocessing/graphics/icons/gas-chlor-methane.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/gas-ethanol.png b/angelsbioprocessing/graphics/icons/gas-ethanol.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/gas-ethanol.png rename to angelsbioprocessing/graphics/icons/gas-ethanol.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/gas-puffer-atmosphere.png b/angelsbioprocessing/graphics/icons/gas-puffer-atmosphere.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/gas-puffer-atmosphere.png rename to angelsbioprocessing/graphics/icons/gas-puffer-atmosphere.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hand.png b/angelsbioprocessing/graphics/icons/hand.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hand.png rename to angelsbioprocessing/graphics/icons/hand.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hogger-1-icon.png b/angelsbioprocessing/graphics/icons/hogger-1-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hogger-1-icon.png rename to angelsbioprocessing/graphics/icons/hogger-1-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hogger-2-icon.png b/angelsbioprocessing/graphics/icons/hogger-2-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hogger-2-icon.png rename to angelsbioprocessing/graphics/icons/hogger-2-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hogger-3-icon.png b/angelsbioprocessing/graphics/icons/hogger-3-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hogger-3-icon.png rename to angelsbioprocessing/graphics/icons/hogger-3-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hogger-4-icon.png b/angelsbioprocessing/graphics/icons/hogger-4-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hogger-4-icon.png rename to angelsbioprocessing/graphics/icons/hogger-4-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/hogger-5-icon.png b/angelsbioprocessing/graphics/icons/hogger-5-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/hogger-5-icon.png rename to angelsbioprocessing/graphics/icons/hogger-5-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-acetic-acid.png b/angelsbioprocessing/graphics/icons/liquid-acetic-acid.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-acetic-acid.png rename to angelsbioprocessing/graphics/icons/liquid-acetic-acid.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-acetic-anhydride.png b/angelsbioprocessing/graphics/icons/liquid-acetic-anhydride.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-acetic-anhydride.png rename to angelsbioprocessing/graphics/icons/liquid-acetic-anhydride.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-black-liquor.png b/angelsbioprocessing/graphics/icons/liquid-black-liquor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-black-liquor.png rename to angelsbioprocessing/graphics/icons/liquid-black-liquor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-blood.png b/angelsbioprocessing/graphics/icons/liquid-blood.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-blood.png rename to angelsbioprocessing/graphics/icons/liquid-blood.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-brown-liquor.png b/angelsbioprocessing/graphics/icons/liquid-brown-liquor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-brown-liquor.png rename to angelsbioprocessing/graphics/icons/liquid-brown-liquor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-cellulose-acetate-mixture.png b/angelsbioprocessing/graphics/icons/liquid-cellulose-acetate-mixture.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-cellulose-acetate-mixture.png rename to angelsbioprocessing/graphics/icons/liquid-cellulose-acetate-mixture.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-cellulose-acetate.png b/angelsbioprocessing/graphics/icons/liquid-cellulose-acetate.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-cellulose-acetate.png rename to angelsbioprocessing/graphics/icons/liquid-cellulose-acetate.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-fermentation-raw.png b/angelsbioprocessing/graphics/icons/liquid-fermentation-raw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-fermentation-raw.png rename to angelsbioprocessing/graphics/icons/liquid-fermentation-raw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-fish-atmosphere.png b/angelsbioprocessing/graphics/icons/liquid-fish-atmosphere.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-fish-atmosphere.png rename to angelsbioprocessing/graphics/icons/liquid-fish-atmosphere.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-green-liquor.png b/angelsbioprocessing/graphics/icons/liquid-green-liquor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-green-liquor.png rename to angelsbioprocessing/graphics/icons/liquid-green-liquor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-nutrient-pulp.png b/angelsbioprocessing/graphics/icons/liquid-nutrient-pulp.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-nutrient-pulp.png rename to angelsbioprocessing/graphics/icons/liquid-nutrient-pulp.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-plant-milk.png b/angelsbioprocessing/graphics/icons/liquid-plant-milk.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-plant-milk.png rename to angelsbioprocessing/graphics/icons/liquid-plant-milk.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-polluted-fish-atmosphere.png b/angelsbioprocessing/graphics/icons/liquid-polluted-fish-atmosphere.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-polluted-fish-atmosphere.png rename to angelsbioprocessing/graphics/icons/liquid-polluted-fish-atmosphere.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-propionic-acid.png b/angelsbioprocessing/graphics/icons/liquid-propionic-acid.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-propionic-acid.png rename to angelsbioprocessing/graphics/icons/liquid-propionic-acid.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-pulping-liquor.png b/angelsbioprocessing/graphics/icons/liquid-pulping-liquor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-pulping-liquor.png rename to angelsbioprocessing/graphics/icons/liquid-pulping-liquor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil-filtering-1.png b/angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil-filtering-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil-filtering-1.png rename to angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil-filtering-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil-filtering-2.png b/angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil-filtering-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil-filtering-2.png rename to angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil-filtering-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil.png b/angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-raw-vegetable-oil.png rename to angelsbioprocessing/graphics/icons/liquid-raw-vegetable-oil.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-vegetable-oil.png b/angelsbioprocessing/graphics/icons/liquid-vegetable-oil.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-vegetable-oil.png rename to angelsbioprocessing/graphics/icons/liquid-vegetable-oil.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/liquid-white-liquor.png b/angelsbioprocessing/graphics/icons/liquid-white-liquor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/liquid-white-liquor.png rename to angelsbioprocessing/graphics/icons/liquid-white-liquor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-1.png b/angelsbioprocessing/graphics/icons/module-bio-productivity-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-1.png rename to angelsbioprocessing/graphics/icons/module-bio-productivity-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-2.png b/angelsbioprocessing/graphics/icons/module-bio-productivity-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-2.png rename to angelsbioprocessing/graphics/icons/module-bio-productivity-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-3.png b/angelsbioprocessing/graphics/icons/module-bio-productivity-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/module-bio-productivity-3.png rename to angelsbioprocessing/graphics/icons/module-bio-productivity-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/molecule-acetic-acid.png b/angelsbioprocessing/graphics/icons/molecule-acetic-acid.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/molecule-acetic-acid.png rename to angelsbioprocessing/graphics/icons/molecule-acetic-acid.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/molecule-acetic-anhydride.png b/angelsbioprocessing/graphics/icons/molecule-acetic-anhydride.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/molecule-acetic-anhydride.png rename to angelsbioprocessing/graphics/icons/molecule-acetic-anhydride.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/molecule-cellulose-acetate.png b/angelsbioprocessing/graphics/icons/molecule-cellulose-acetate.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/molecule-cellulose-acetate.png rename to angelsbioprocessing/graphics/icons/molecule-cellulose-acetate.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/molecule-ethanol.png b/angelsbioprocessing/graphics/icons/molecule-ethanol.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/molecule-ethanol.png rename to angelsbioprocessing/graphics/icons/molecule-ethanol.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/molecule-propionic-acid.png b/angelsbioprocessing/graphics/icons/molecule-propionic-acid.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/molecule-propionic-acid.png rename to angelsbioprocessing/graphics/icons/molecule-propionic-acid.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/nutrient-extractor.png b/angelsbioprocessing/graphics/icons/nutrient-extractor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/nutrient-extractor.png rename to angelsbioprocessing/graphics/icons/nutrient-extractor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-cellulose.png b/angelsbioprocessing/graphics/icons/paste-cellulose.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-cellulose.png rename to angelsbioprocessing/graphics/icons/paste-cellulose.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-cobalt.png b/angelsbioprocessing/graphics/icons/paste-cobalt.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-cobalt.png rename to angelsbioprocessing/graphics/icons/paste-cobalt.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-copper.png b/angelsbioprocessing/graphics/icons/paste-copper.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-copper.png rename to angelsbioprocessing/graphics/icons/paste-copper.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-gold.png b/angelsbioprocessing/graphics/icons/paste-gold.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-gold.png rename to angelsbioprocessing/graphics/icons/paste-gold.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-iron.png b/angelsbioprocessing/graphics/icons/paste-iron.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-iron.png rename to angelsbioprocessing/graphics/icons/paste-iron.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-silver.png b/angelsbioprocessing/graphics/icons/paste-silver.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-silver.png rename to angelsbioprocessing/graphics/icons/paste-silver.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-titanium.png b/angelsbioprocessing/graphics/icons/paste-titanium.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-titanium.png rename to angelsbioprocessing/graphics/icons/paste-titanium.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-tungsten.png b/angelsbioprocessing/graphics/icons/paste-tungsten.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-tungsten.png rename to angelsbioprocessing/graphics/icons/paste-tungsten.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/paste-zinc.png b/angelsbioprocessing/graphics/icons/paste-zinc.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/paste-zinc.png rename to angelsbioprocessing/graphics/icons/paste-zinc.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/petri-dish.png b/angelsbioprocessing/graphics/icons/petri-dish.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/petri-dish.png rename to angelsbioprocessing/graphics/icons/petri-dish.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/processor-recipe.png b/angelsbioprocessing/graphics/icons/processor-recipe.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/processor-recipe.png rename to angelsbioprocessing/graphics/icons/processor-recipe.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-1-egg.png b/angelsbioprocessing/graphics/icons/puffer-1-egg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-1-egg.png rename to angelsbioprocessing/graphics/icons/puffer-1-egg.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-1-icon.png b/angelsbioprocessing/graphics/icons/puffer-1-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-1-icon.png rename to angelsbioprocessing/graphics/icons/puffer-1-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-2-egg.png b/angelsbioprocessing/graphics/icons/puffer-2-egg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-2-egg.png rename to angelsbioprocessing/graphics/icons/puffer-2-egg.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-2-icon.png b/angelsbioprocessing/graphics/icons/puffer-2-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-2-icon.png rename to angelsbioprocessing/graphics/icons/puffer-2-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-3-egg.png b/angelsbioprocessing/graphics/icons/puffer-3-egg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-3-egg.png rename to angelsbioprocessing/graphics/icons/puffer-3-egg.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-3-icon.png b/angelsbioprocessing/graphics/icons/puffer-3-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-3-icon.png rename to angelsbioprocessing/graphics/icons/puffer-3-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-4-egg.png b/angelsbioprocessing/graphics/icons/puffer-4-egg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-4-egg.png rename to angelsbioprocessing/graphics/icons/puffer-4-egg.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-4-icon.png b/angelsbioprocessing/graphics/icons/puffer-4-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-4-icon.png rename to angelsbioprocessing/graphics/icons/puffer-4-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-5-egg.png b/angelsbioprocessing/graphics/icons/puffer-5-egg.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-5-egg.png rename to angelsbioprocessing/graphics/icons/puffer-5-egg.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-5-icon.png b/angelsbioprocessing/graphics/icons/puffer-5-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-5-icon.png rename to angelsbioprocessing/graphics/icons/puffer-5-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-6-icon.png b/angelsbioprocessing/graphics/icons/puffer-6-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-6-icon.png rename to angelsbioprocessing/graphics/icons/puffer-6-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-egg-shell-powder.png b/angelsbioprocessing/graphics/icons/puffer-egg-shell-powder.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-egg-shell-powder.png rename to angelsbioprocessing/graphics/icons/puffer-egg-shell-powder.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-egg-shell.png b/angelsbioprocessing/graphics/icons/puffer-egg-shell.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-egg-shell.png rename to angelsbioprocessing/graphics/icons/puffer-egg-shell.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/puffer-nest.png b/angelsbioprocessing/graphics/icons/puffer-nest.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/puffer-nest.png rename to angelsbioprocessing/graphics/icons/puffer-nest.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-cobalt.png b/angelsbioprocessing/graphics/icons/pulver-cobalt.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-cobalt.png rename to angelsbioprocessing/graphics/icons/pulver-cobalt.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-copper.png b/angelsbioprocessing/graphics/icons/pulver-copper.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-copper.png rename to angelsbioprocessing/graphics/icons/pulver-copper.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-gold.png b/angelsbioprocessing/graphics/icons/pulver-gold.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-gold.png rename to angelsbioprocessing/graphics/icons/pulver-gold.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-iron.png b/angelsbioprocessing/graphics/icons/pulver-iron.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-iron.png rename to angelsbioprocessing/graphics/icons/pulver-iron.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-silver.png b/angelsbioprocessing/graphics/icons/pulver-silver.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-silver.png rename to angelsbioprocessing/graphics/icons/pulver-silver.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-stone.png b/angelsbioprocessing/graphics/icons/pulver-stone.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-stone.png rename to angelsbioprocessing/graphics/icons/pulver-stone.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-titanium.png b/angelsbioprocessing/graphics/icons/pulver-titanium.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-titanium.png rename to angelsbioprocessing/graphics/icons/pulver-titanium.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-tungsten.png b/angelsbioprocessing/graphics/icons/pulver-tungsten.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-tungsten.png rename to angelsbioprocessing/graphics/icons/pulver-tungsten.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/pulver-zinc.png b/angelsbioprocessing/graphics/icons/pulver-zinc.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/pulver-zinc.png rename to angelsbioprocessing/graphics/icons/pulver-zinc.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/raw-meat.png b/angelsbioprocessing/graphics/icons/raw-meat.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/raw-meat.png rename to angelsbioprocessing/graphics/icons/raw-meat.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/red-cellulose-fiber.png b/angelsbioprocessing/graphics/icons/red-cellulose-fiber.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/red-cellulose-fiber.png rename to angelsbioprocessing/graphics/icons/red-cellulose-fiber.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/seed-extractor.png b/angelsbioprocessing/graphics/icons/seed-extractor.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/seed-extractor.png rename to angelsbioprocessing/graphics/icons/seed-extractor.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-blue.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-blue.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-blue.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-blue.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-green.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-green.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-green.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-green.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-orange.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-orange.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-orange.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-orange.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-purple.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-purple.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-purple.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-purple.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-red.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-red.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-red.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-red.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-yellow.png b/angelsbioprocessing/graphics/icons/small-alien-artifact-yellow.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact-yellow.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact-yellow.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact.png b/angelsbioprocessing/graphics/icons/small-alien-artifact.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/small-alien-artifact.png rename to angelsbioprocessing/graphics/icons/small-alien-artifact.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-alginic-acid.png b/angelsbioprocessing/graphics/icons/solid-alginic-acid.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-alginic-acid.png rename to angelsbioprocessing/graphics/icons/solid-alginic-acid.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-alienated-fertilizer.png b/angelsbioprocessing/graphics/icons/solid-alienated-fertilizer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-alienated-fertilizer.png rename to angelsbioprocessing/graphics/icons/solid-alienated-fertilizer.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-beans.png b/angelsbioprocessing/graphics/icons/solid-beans.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-beans.png rename to angelsbioprocessing/graphics/icons/solid-beans.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-bio-plastic.png b/angelsbioprocessing/graphics/icons/solid-bio-plastic.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-bio-plastic.png rename to angelsbioprocessing/graphics/icons/solid-bio-plastic.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-bio-resin.png b/angelsbioprocessing/graphics/icons/solid-bio-resin.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-bio-resin.png rename to angelsbioprocessing/graphics/icons/solid-bio-resin.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-bio-rubber.png b/angelsbioprocessing/graphics/icons/solid-bio-rubber.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-bio-rubber.png rename to angelsbioprocessing/graphics/icons/solid-bio-rubber.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-calcium-carbonate.png b/angelsbioprocessing/graphics/icons/solid-calcium-carbonate.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-calcium-carbonate.png rename to angelsbioprocessing/graphics/icons/solid-calcium-carbonate.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-compost.png b/angelsbioprocessing/graphics/icons/solid-compost.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-compost.png rename to angelsbioprocessing/graphics/icons/solid-compost.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-corn.png b/angelsbioprocessing/graphics/icons/solid-corn.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-corn.png rename to angelsbioprocessing/graphics/icons/solid-corn.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-crystal-full-saw.png b/angelsbioprocessing/graphics/icons/solid-crystal-full-saw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-crystal-full-saw.png rename to angelsbioprocessing/graphics/icons/solid-crystal-full-saw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-crystal-tipped-saw.png b/angelsbioprocessing/graphics/icons/solid-crystal-tipped-saw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-crystal-tipped-saw.png rename to angelsbioprocessing/graphics/icons/solid-crystal-tipped-saw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-fertilizer.png b/angelsbioprocessing/graphics/icons/solid-fertilizer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-fertilizer.png rename to angelsbioprocessing/graphics/icons/solid-fertilizer.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-flour.png b/angelsbioprocessing/graphics/icons/solid-flour.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-flour.png rename to angelsbioprocessing/graphics/icons/solid-flour.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-fruit.png b/angelsbioprocessing/graphics/icons/solid-fruit.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-fruit.png rename to angelsbioprocessing/graphics/icons/solid-fruit.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-leafs.png b/angelsbioprocessing/graphics/icons/solid-leafs.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-leafs.png rename to angelsbioprocessing/graphics/icons/solid-leafs.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-nuclear-fertilizer.png b/angelsbioprocessing/graphics/icons/solid-nuclear-fertilizer.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-nuclear-fertilizer.png rename to angelsbioprocessing/graphics/icons/solid-nuclear-fertilizer.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-nuts.png b/angelsbioprocessing/graphics/icons/solid-nuts.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-nuts.png rename to angelsbioprocessing/graphics/icons/solid-nuts.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-paper.png b/angelsbioprocessing/graphics/icons/solid-paper.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-paper.png rename to angelsbioprocessing/graphics/icons/solid-paper.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-pips.png b/angelsbioprocessing/graphics/icons/solid-pips.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-pips.png rename to angelsbioprocessing/graphics/icons/solid-pips.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-saw.png b/angelsbioprocessing/graphics/icons/solid-saw.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-saw.png rename to angelsbioprocessing/graphics/icons/solid-saw.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-soil.png b/angelsbioprocessing/graphics/icons/solid-soil.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-soil.png rename to angelsbioprocessing/graphics/icons/solid-soil.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-tree.png b/angelsbioprocessing/graphics/icons/solid-tree.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-tree.png rename to angelsbioprocessing/graphics/icons/solid-tree.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/solid-wood-pulp.png b/angelsbioprocessing/graphics/icons/solid-wood-pulp.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/solid-wood-pulp.png rename to angelsbioprocessing/graphics/icons/solid-wood-pulp.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/substrate-dish.png b/angelsbioprocessing/graphics/icons/substrate-dish.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/substrate-dish.png rename to angelsbioprocessing/graphics/icons/substrate-dish.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-1-seed.png b/angelsbioprocessing/graphics/icons/swamp-1-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-1-seed.png rename to angelsbioprocessing/graphics/icons/swamp-1-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-1.png b/angelsbioprocessing/graphics/icons/swamp-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-1.png rename to angelsbioprocessing/graphics/icons/swamp-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-2-seed.png b/angelsbioprocessing/graphics/icons/swamp-2-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-2-seed.png rename to angelsbioprocessing/graphics/icons/swamp-2-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-2.png b/angelsbioprocessing/graphics/icons/swamp-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-2.png rename to angelsbioprocessing/graphics/icons/swamp-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-3-seed-dormant.png b/angelsbioprocessing/graphics/icons/swamp-3-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-3-seed-dormant.png rename to angelsbioprocessing/graphics/icons/swamp-3-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-3-seed.png b/angelsbioprocessing/graphics/icons/swamp-3-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-3-seed.png rename to angelsbioprocessing/graphics/icons/swamp-3-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-3.png b/angelsbioprocessing/graphics/icons/swamp-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-3.png rename to angelsbioprocessing/graphics/icons/swamp-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-4-seed-dormant.png b/angelsbioprocessing/graphics/icons/swamp-4-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-4-seed-dormant.png rename to angelsbioprocessing/graphics/icons/swamp-4-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-4-seed.png b/angelsbioprocessing/graphics/icons/swamp-4-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-4-seed.png rename to angelsbioprocessing/graphics/icons/swamp-4-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-4.png b/angelsbioprocessing/graphics/icons/swamp-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-4.png rename to angelsbioprocessing/graphics/icons/swamp-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-5-seed-dormant.png b/angelsbioprocessing/graphics/icons/swamp-5-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-5-seed-dormant.png rename to angelsbioprocessing/graphics/icons/swamp-5-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-5-seed.png b/angelsbioprocessing/graphics/icons/swamp-5-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-5-seed.png rename to angelsbioprocessing/graphics/icons/swamp-5-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-5.png b/angelsbioprocessing/graphics/icons/swamp-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-5.png rename to angelsbioprocessing/graphics/icons/swamp-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-farm.png b/angelsbioprocessing/graphics/icons/swamp-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-farm.png rename to angelsbioprocessing/graphics/icons/swamp-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-garden.png b/angelsbioprocessing/graphics/icons/swamp-garden.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-garden.png rename to angelsbioprocessing/graphics/icons/swamp-garden.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/swamp-upgrade.png b/angelsbioprocessing/graphics/icons/swamp-upgrade.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/swamp-upgrade.png rename to angelsbioprocessing/graphics/icons/swamp-upgrade.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-1-seed.png b/angelsbioprocessing/graphics/icons/temperate-1-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-1-seed.png rename to angelsbioprocessing/graphics/icons/temperate-1-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-1.png b/angelsbioprocessing/graphics/icons/temperate-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-1.png rename to angelsbioprocessing/graphics/icons/temperate-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-2-seed.png b/angelsbioprocessing/graphics/icons/temperate-2-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-2-seed.png rename to angelsbioprocessing/graphics/icons/temperate-2-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-2.png b/angelsbioprocessing/graphics/icons/temperate-2.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-2.png rename to angelsbioprocessing/graphics/icons/temperate-2.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-3-seed-dormant.png b/angelsbioprocessing/graphics/icons/temperate-3-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-3-seed-dormant.png rename to angelsbioprocessing/graphics/icons/temperate-3-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-3-seed.png b/angelsbioprocessing/graphics/icons/temperate-3-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-3-seed.png rename to angelsbioprocessing/graphics/icons/temperate-3-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-3.png b/angelsbioprocessing/graphics/icons/temperate-3.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-3.png rename to angelsbioprocessing/graphics/icons/temperate-3.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-4-seed-dormant.png b/angelsbioprocessing/graphics/icons/temperate-4-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-4-seed-dormant.png rename to angelsbioprocessing/graphics/icons/temperate-4-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-4-seed.png b/angelsbioprocessing/graphics/icons/temperate-4-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-4-seed.png rename to angelsbioprocessing/graphics/icons/temperate-4-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-4.png b/angelsbioprocessing/graphics/icons/temperate-4.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-4.png rename to angelsbioprocessing/graphics/icons/temperate-4.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-5-seed-dormant.png b/angelsbioprocessing/graphics/icons/temperate-5-seed-dormant.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-5-seed-dormant.png rename to angelsbioprocessing/graphics/icons/temperate-5-seed-dormant.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-5-seed.png b/angelsbioprocessing/graphics/icons/temperate-5-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-5-seed.png rename to angelsbioprocessing/graphics/icons/temperate-5-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-5.png b/angelsbioprocessing/graphics/icons/temperate-5.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-5.png rename to angelsbioprocessing/graphics/icons/temperate-5.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-farm.png b/angelsbioprocessing/graphics/icons/temperate-farm.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-farm.png rename to angelsbioprocessing/graphics/icons/temperate-farm.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-garden.png b/angelsbioprocessing/graphics/icons/temperate-garden.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-garden.png rename to angelsbioprocessing/graphics/icons/temperate-garden.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/temperate-upgrade.png b/angelsbioprocessing/graphics/icons/temperate-upgrade.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/temperate-upgrade.png rename to angelsbioprocessing/graphics/icons/temperate-upgrade.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/token-bio.png b/angelsbioprocessing/graphics/icons/token-bio.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/token-bio.png rename to angelsbioprocessing/graphics/icons/token-bio.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-desert-icon.png b/angelsbioprocessing/graphics/icons/tree-desert-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-desert-icon.png rename to angelsbioprocessing/graphics/icons/tree-desert-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-desert-seed.png b/angelsbioprocessing/graphics/icons/tree-desert-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-desert-seed.png rename to angelsbioprocessing/graphics/icons/tree-desert-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-desert.png b/angelsbioprocessing/graphics/icons/tree-desert.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-desert.png rename to angelsbioprocessing/graphics/icons/tree-desert.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-seed.png b/angelsbioprocessing/graphics/icons/tree-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-seed.png rename to angelsbioprocessing/graphics/icons/tree-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-swamp-icon.png b/angelsbioprocessing/graphics/icons/tree-swamp-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-swamp-icon.png rename to angelsbioprocessing/graphics/icons/tree-swamp-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-swamp-seed.png b/angelsbioprocessing/graphics/icons/tree-swamp-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-swamp-seed.png rename to angelsbioprocessing/graphics/icons/tree-swamp-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-swamp.png b/angelsbioprocessing/graphics/icons/tree-swamp.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-swamp.png rename to angelsbioprocessing/graphics/icons/tree-swamp.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-temperate-icon.png b/angelsbioprocessing/graphics/icons/tree-temperate-icon.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-temperate-icon.png rename to angelsbioprocessing/graphics/icons/tree-temperate-icon.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-temperate-seed.png b/angelsbioprocessing/graphics/icons/tree-temperate-seed.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-temperate-seed.png rename to angelsbioprocessing/graphics/icons/tree-temperate-seed.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree-temperate.png b/angelsbioprocessing/graphics/icons/tree-temperate.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree-temperate.png rename to angelsbioprocessing/graphics/icons/tree-temperate.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/tree.png b/angelsbioprocessing/graphics/icons/tree.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/tree.png rename to angelsbioprocessing/graphics/icons/tree.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/vegetable-oil-refining-1.png b/angelsbioprocessing/graphics/icons/vegetable-oil-refining-1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/vegetable-oil-refining-1.png rename to angelsbioprocessing/graphics/icons/vegetable-oil-refining-1.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/void.png b/angelsbioprocessing/graphics/icons/void.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/void.png rename to angelsbioprocessing/graphics/icons/void.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-board.png b/angelsbioprocessing/graphics/icons/wood-board.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-board.png rename to angelsbioprocessing/graphics/icons/wood-board.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-bricks.png b/angelsbioprocessing/graphics/icons/wood-bricks.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-bricks.png rename to angelsbioprocessing/graphics/icons/wood-bricks.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-cellulose.png b/angelsbioprocessing/graphics/icons/wood-cellulose.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-cellulose.png rename to angelsbioprocessing/graphics/icons/wood-cellulose.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-charcoal.png b/angelsbioprocessing/graphics/icons/wood-charcoal.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-charcoal.png rename to angelsbioprocessing/graphics/icons/wood-charcoal.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-fiber-board.png b/angelsbioprocessing/graphics/icons/wood-fiber-board.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-fiber-board.png rename to angelsbioprocessing/graphics/icons/wood-fiber-board.png diff --git a/angelsbioprocessing_9.7.24/graphics/icons/wood-pellets.png b/angelsbioprocessing/graphics/icons/wood-pellets.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/icons/wood-pellets.png rename to angelsbioprocessing/graphics/icons/wood-pellets.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/algae-farm-group.png b/angelsbioprocessing/graphics/technology/algae-farm-group.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/algae-farm-group.png rename to angelsbioprocessing/graphics/technology/algae-farm-group.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/algae-farm-tech.png b/angelsbioprocessing/graphics/technology/algae-farm-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/algae-farm-tech.png rename to angelsbioprocessing/graphics/technology/algae-farm-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/base-farm-tech.png b/angelsbioprocessing/graphics/technology/base-farm-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/base-farm-tech.png rename to angelsbioprocessing/graphics/technology/base-farm-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-arboretum-tech.png b/angelsbioprocessing/graphics/technology/bio-arboretum-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-arboretum-tech.png rename to angelsbioprocessing/graphics/technology/bio-arboretum-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-desert-generator-tech.png b/angelsbioprocessing/graphics/technology/bio-desert-generator-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-desert-generator-tech.png rename to angelsbioprocessing/graphics/technology/bio-desert-generator-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-hatchery-tech.png b/angelsbioprocessing/graphics/technology/bio-hatchery-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-hatchery-tech.png rename to angelsbioprocessing/graphics/technology/bio-hatchery-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-biter-tech.png b/angelsbioprocessing/graphics/technology/bio-refugium-biter-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-biter-tech.png rename to angelsbioprocessing/graphics/technology/bio-refugium-biter-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-butchery-tech.png b/angelsbioprocessing/graphics/technology/bio-refugium-butchery-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-butchery-tech.png rename to angelsbioprocessing/graphics/technology/bio-refugium-butchery-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-fish-tech.png b/angelsbioprocessing/graphics/technology/bio-refugium-fish-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-fish-tech.png rename to angelsbioprocessing/graphics/technology/bio-refugium-fish-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-puffer-breeding-tech.png b/angelsbioprocessing/graphics/technology/bio-refugium-puffer-breeding-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-puffer-breeding-tech.png rename to angelsbioprocessing/graphics/technology/bio-refugium-puffer-breeding-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-puffer-hatchery-tech.png b/angelsbioprocessing/graphics/technology/bio-refugium-puffer-hatchery-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-refugium-puffer-hatchery-tech.png rename to angelsbioprocessing/graphics/technology/bio-refugium-puffer-hatchery-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-swamp-generator-tech.png b/angelsbioprocessing/graphics/technology/bio-swamp-generator-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-swamp-generator-tech.png rename to angelsbioprocessing/graphics/technology/bio-swamp-generator-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/bio-temperate-generator-tech.png b/angelsbioprocessing/graphics/technology/bio-temperate-generator-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/bio-temperate-generator-tech.png rename to angelsbioprocessing/graphics/technology/bio-temperate-generator-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/crystal.png b/angelsbioprocessing/graphics/technology/crystal.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/crystal.png rename to angelsbioprocessing/graphics/technology/crystal.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/desert-farm-tech.png b/angelsbioprocessing/graphics/technology/desert-farm-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/desert-farm-tech.png rename to angelsbioprocessing/graphics/technology/desert-farm-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/farm-mutation-tech.png b/angelsbioprocessing/graphics/technology/farm-mutation-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/farm-mutation-tech.png rename to angelsbioprocessing/graphics/technology/farm-mutation-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/fermentation-tech.png b/angelsbioprocessing/graphics/technology/fermentation-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/fermentation-tech.png rename to angelsbioprocessing/graphics/technology/fermentation-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-1-tech.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-1-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-1-tech.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-1-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-1-tech1.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-1-tech1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-1-tech1.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-1-tech1.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-2-tech.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-2-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-2-tech.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-2-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-2-tech1.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-2-tech1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-2-tech1.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-2-tech1.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-3-tech.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-3-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-3-tech.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-3-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-3-tech1.png b/angelsbioprocessing/graphics/technology/module-bio-productivity-3-tech1.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/module-bio-productivity-3-tech1.png rename to angelsbioprocessing/graphics/technology/module-bio-productivity-3-tech1.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/nutrient-extractor-tech.png b/angelsbioprocessing/graphics/technology/nutrient-extractor-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/nutrient-extractor-tech.png rename to angelsbioprocessing/graphics/technology/nutrient-extractor-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/paper-tech.png b/angelsbioprocessing/graphics/technology/paper-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/paper-tech.png rename to angelsbioprocessing/graphics/technology/paper-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/paste.png b/angelsbioprocessing/graphics/technology/paste.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/paste.png rename to angelsbioprocessing/graphics/technology/paste.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/pellet-tech.png b/angelsbioprocessing/graphics/technology/pellet-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/pellet-tech.png rename to angelsbioprocessing/graphics/technology/pellet-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/press-tech.png b/angelsbioprocessing/graphics/technology/press-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/press-tech.png rename to angelsbioprocessing/graphics/technology/press-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/refugium-1-group.png b/angelsbioprocessing/graphics/technology/refugium-1-group.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/refugium-1-group.png rename to angelsbioprocessing/graphics/technology/refugium-1-group.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/refugium-2-group.png b/angelsbioprocessing/graphics/technology/refugium-2-group.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/refugium-2-group.png rename to angelsbioprocessing/graphics/technology/refugium-2-group.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/seed-extractor-tech.png b/angelsbioprocessing/graphics/technology/seed-extractor-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/seed-extractor-tech.png rename to angelsbioprocessing/graphics/technology/seed-extractor-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/swamp-farm-tech.png b/angelsbioprocessing/graphics/technology/swamp-farm-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/swamp-farm-tech.png rename to angelsbioprocessing/graphics/technology/swamp-farm-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/temperate-farm-tech.png b/angelsbioprocessing/graphics/technology/temperate-farm-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/temperate-farm-tech.png rename to angelsbioprocessing/graphics/technology/temperate-farm-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/tree-swamp-tech.png b/angelsbioprocessing/graphics/technology/tree-swamp-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/tree-swamp-tech.png rename to angelsbioprocessing/graphics/technology/tree-swamp-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/tree-temperate-tech.png b/angelsbioprocessing/graphics/technology/tree-temperate-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/tree-temperate-tech.png rename to angelsbioprocessing/graphics/technology/tree-temperate-tech.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/vegetables-farm-group.png b/angelsbioprocessing/graphics/technology/vegetables-farm-group.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/vegetables-farm-group.png rename to angelsbioprocessing/graphics/technology/vegetables-farm-group.png diff --git a/angelsbioprocessing_9.7.24/graphics/technology/wood-tech.png b/angelsbioprocessing/graphics/technology/wood-tech.png similarity index 100% rename from angelsbioprocessing_9.7.24/graphics/technology/wood-tech.png rename to angelsbioprocessing/graphics/technology/wood-tech.png diff --git a/angelsbioprocessing_9.7.24/info.json b/angelsbioprocessing/info.json similarity index 100% rename from angelsbioprocessing_9.7.24/info.json rename to angelsbioprocessing/info.json diff --git a/angelsbioprocessing_9.7.24/license CC BY-NC-ND 4.0.txt b/angelsbioprocessing/license CC BY-NC-ND 4.0.txt similarity index 100% rename from angelsbioprocessing_9.7.24/license CC BY-NC-ND 4.0.txt rename to angelsbioprocessing/license CC BY-NC-ND 4.0.txt diff --git a/angelsbioprocessing_9.7.24/locale/en/bio-processing.cfg b/angelsbioprocessing/locale/en/bio-processing.cfg similarity index 100% rename from angelsbioprocessing_9.7.24/locale/en/bio-processing.cfg rename to angelsbioprocessing/locale/en/bio-processing.cfg diff --git a/angelsbioprocessing_9.7.24/locale/en/tips-and-tricks.cfg b/angelsbioprocessing/locale/en/tips-and-tricks.cfg similarity index 100% rename from angelsbioprocessing_9.7.24/locale/en/tips-and-tricks.cfg rename to angelsbioprocessing/locale/en/tips-and-tricks.cfg diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.1.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.1.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.1.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.1.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.10.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.10.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.10.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.10.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.11.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.11.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.11.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.11.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.13.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.13.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.13.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.13.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.18.json b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.18.json similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.18.json rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.18.json diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.18.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.18.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.18.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.18.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.7.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.7.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.7.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.7.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.8.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.8.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.8.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.8.lua diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.9.json b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.9.json similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.9.json rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.9.json diff --git a/angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.9.lua b/angelsbioprocessing/migrations/angelsbioprocessing_0.7.9.lua similarity index 100% rename from angelsbioprocessing_9.7.24/migrations/angelsbioprocessing_0.7.9.lua rename to angelsbioprocessing/migrations/angelsbioprocessing_0.7.9.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/bio-processing-category.lua b/angelsbioprocessing/prototypes/bio-processing-category.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/bio-processing-category.lua rename to angelsbioprocessing/prototypes/bio-processing-category.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/bio-processing-functions.lua b/angelsbioprocessing/prototypes/bio-processing-functions.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/bio-processing-functions.lua rename to angelsbioprocessing/prototypes/bio-processing-functions.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/bio-processing-generate.lua b/angelsbioprocessing/prototypes/bio-processing-generate.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/bio-processing-generate.lua rename to angelsbioprocessing/prototypes/bio-processing-generate.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/bio-processing-override.lua b/angelsbioprocessing/prototypes/bio-processing-override.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/bio-processing-override.lua rename to angelsbioprocessing/prototypes/bio-processing-override.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/bio-processing-triggers.lua b/angelsbioprocessing/prototypes/bio-processing-triggers.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/bio-processing-triggers.lua rename to angelsbioprocessing/prototypes/bio-processing-triggers.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/algae-farm.lua b/angelsbioprocessing/prototypes/buildings/algae-farm.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/algae-farm.lua rename to angelsbioprocessing/prototypes/buildings/algae-farm.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/alien-fish.lua b/angelsbioprocessing/prototypes/buildings/alien-fish.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/alien-fish.lua rename to angelsbioprocessing/prototypes/buildings/alien-fish.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/arboretum.lua b/angelsbioprocessing/prototypes/buildings/arboretum.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/arboretum.lua rename to angelsbioprocessing/prototypes/buildings/arboretum.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/bio-press.lua b/angelsbioprocessing/prototypes/buildings/bio-press.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/bio-press.lua rename to angelsbioprocessing/prototypes/buildings/bio-press.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/bio-processor.lua b/angelsbioprocessing/prototypes/buildings/bio-processor.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/bio-processor.lua rename to angelsbioprocessing/prototypes/buildings/bio-processor.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/bio-tile.lua b/angelsbioprocessing/prototypes/buildings/bio-tile.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/bio-tile.lua rename to angelsbioprocessing/prototypes/buildings/bio-tile.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/butchery.lua b/angelsbioprocessing/prototypes/buildings/butchery.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/butchery.lua rename to angelsbioprocessing/prototypes/buildings/butchery.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/composter.lua b/angelsbioprocessing/prototypes/buildings/composter.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/composter.lua rename to angelsbioprocessing/prototypes/buildings/composter.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/crop-farm.lua b/angelsbioprocessing/prototypes/buildings/crop-farm.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/crop-farm.lua rename to angelsbioprocessing/prototypes/buildings/crop-farm.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/gardens.lua b/angelsbioprocessing/prototypes/buildings/gardens.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/gardens.lua rename to angelsbioprocessing/prototypes/buildings/gardens.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/hatchery.lua b/angelsbioprocessing/prototypes/buildings/hatchery.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/hatchery.lua rename to angelsbioprocessing/prototypes/buildings/hatchery.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/nutrient-extractor.lua b/angelsbioprocessing/prototypes/buildings/nutrient-extractor.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/nutrient-extractor.lua rename to angelsbioprocessing/prototypes/buildings/nutrient-extractor.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/puffer-nest.lua b/angelsbioprocessing/prototypes/buildings/puffer-nest.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/puffer-nest.lua rename to angelsbioprocessing/prototypes/buildings/puffer-nest.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/puffer-spawner.lua b/angelsbioprocessing/prototypes/buildings/puffer-spawner.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/puffer-spawner.lua rename to angelsbioprocessing/prototypes/buildings/puffer-spawner.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/refugium.lua b/angelsbioprocessing/prototypes/buildings/refugium.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/refugium.lua rename to angelsbioprocessing/prototypes/buildings/refugium.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/seed-extractor.lua b/angelsbioprocessing/prototypes/buildings/seed-extractor.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/seed-extractor.lua rename to angelsbioprocessing/prototypes/buildings/seed-extractor.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/buildings/trees.lua b/angelsbioprocessing/prototypes/buildings/trees.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/buildings/trees.lua rename to angelsbioprocessing/prototypes/buildings/trees.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-module.lua b/angelsbioprocessing/prototypes/items/bio-module.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-module.lua rename to angelsbioprocessing/prototypes/items/bio-module.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-processing-algae.lua b/angelsbioprocessing/prototypes/items/bio-processing-algae.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-processing-algae.lua rename to angelsbioprocessing/prototypes/items/bio-processing-algae.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-processing-alien-crystal.lua b/angelsbioprocessing/prototypes/items/bio-processing-alien-crystal.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-processing-alien-crystal.lua rename to angelsbioprocessing/prototypes/items/bio-processing-alien-crystal.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-processing-alien.lua b/angelsbioprocessing/prototypes/items/bio-processing-alien.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-processing-alien.lua rename to angelsbioprocessing/prototypes/items/bio-processing-alien.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-processing-paste.lua b/angelsbioprocessing/prototypes/items/bio-processing-paste.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-processing-paste.lua rename to angelsbioprocessing/prototypes/items/bio-processing-paste.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-processing-wood-paper.lua b/angelsbioprocessing/prototypes/items/bio-processing-wood-paper.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-processing-wood-paper.lua rename to angelsbioprocessing/prototypes/items/bio-processing-wood-paper.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-biter.lua b/angelsbioprocessing/prototypes/items/bio-refugium-biter.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-biter.lua rename to angelsbioprocessing/prototypes/items/bio-refugium-biter.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-fish.lua b/angelsbioprocessing/prototypes/items/bio-refugium-fish.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-fish.lua rename to angelsbioprocessing/prototypes/items/bio-refugium-fish.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-hogger.lua b/angelsbioprocessing/prototypes/items/bio-refugium-hogger.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-hogger.lua rename to angelsbioprocessing/prototypes/items/bio-refugium-hogger.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-puffer.lua b/angelsbioprocessing/prototypes/items/bio-refugium-puffer.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-refugium-puffer.lua rename to angelsbioprocessing/prototypes/items/bio-refugium-puffer.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/bio-refugium.lua b/angelsbioprocessing/prototypes/items/bio-refugium.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/bio-refugium.lua rename to angelsbioprocessing/prototypes/items/bio-refugium.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/crop-farming-processing.lua b/angelsbioprocessing/prototypes/items/crop-farming-processing.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/crop-farming-processing.lua rename to angelsbioprocessing/prototypes/items/crop-farming-processing.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/items/crop-farming-vegetables.lua b/angelsbioprocessing/prototypes/items/crop-farming-vegetables.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/items/crop-farming-vegetables.lua rename to angelsbioprocessing/prototypes/items/crop-farming-vegetables.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-angel.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-angel.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-angel.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-angel.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-arboretum.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-arboretum.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-arboretum.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-arboretum.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-base-game.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-base-game.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-base-game.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-base-game.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bob-artifacts.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-bob-artifacts.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bob-artifacts.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-bob-artifacts.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bob.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-bob.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bob.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-bob.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bobgreenhouse.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-bobgreenhouse.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bobgreenhouse.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-bobgreenhouse.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bobmodules.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-bobmodules.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-bobmodules.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-bobmodules.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-paste.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-paste.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-paste.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-paste.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-special-vanilla.lua b/angelsbioprocessing/prototypes/overrides/bio-processing-override-special-vanilla.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/overrides/bio-processing-override-special-vanilla.lua rename to angelsbioprocessing/prototypes/overrides/bio-processing-override-special-vanilla.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-module.lua b/angelsbioprocessing/prototypes/recipes/bio-module.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-module.lua rename to angelsbioprocessing/prototypes/recipes/bio-module.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-algae.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-algae.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-algae.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-algae.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-alien-crystal.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-alien-crystal.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-alien-crystal.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-alien-crystal.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-alien.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-alien.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-alien.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-alien.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-entity-angels.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-entity-angels.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-entity-angels.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-entity-angels.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-entity.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-entity.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-entity.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-entity.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-paper.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-paper.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-paper.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-paper.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-paste.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-paste.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-paste.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-paste.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-wood.lua b/angelsbioprocessing/prototypes/recipes/bio-processing-wood.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-processing-wood.lua rename to angelsbioprocessing/prototypes/recipes/bio-processing-wood.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-biter.lua b/angelsbioprocessing/prototypes/recipes/bio-refugium-biter.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-biter.lua rename to angelsbioprocessing/prototypes/recipes/bio-refugium-biter.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-fish.lua b/angelsbioprocessing/prototypes/recipes/bio-refugium-fish.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-fish.lua rename to angelsbioprocessing/prototypes/recipes/bio-refugium-fish.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-hogger.lua b/angelsbioprocessing/prototypes/recipes/bio-refugium-hogger.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-hogger.lua rename to angelsbioprocessing/prototypes/recipes/bio-refugium-hogger.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-puffer.lua b/angelsbioprocessing/prototypes/recipes/bio-refugium-puffer.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/bio-refugium-puffer.lua rename to angelsbioprocessing/prototypes/recipes/bio-refugium-puffer.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-gardens.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-gardens.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-gardens.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-gardens.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-fermentation.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-processing-fermentation.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-fermentation.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-processing-fermentation.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-nutrients.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-processing-nutrients.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-nutrients.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-processing-nutrients.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-vegetable-oil.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-processing-vegetable-oil.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-vegetable-oil.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-processing-vegetable-oil.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-vegetables.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-processing-vegetables.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-processing-vegetables.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-processing-vegetables.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-vegetables.lua b/angelsbioprocessing/prototypes/recipes/crop-farming-vegetables.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/recipes/crop-farming-vegetables.lua rename to angelsbioprocessing/prototypes/recipes/crop-farming-vegetables.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/bio-module.lua b/angelsbioprocessing/prototypes/technology/bio-module.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/bio-module.lua rename to angelsbioprocessing/prototypes/technology/bio-module.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-algae.lua b/angelsbioprocessing/prototypes/technology/bio-processing-algae.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-algae.lua rename to angelsbioprocessing/prototypes/technology/bio-processing-algae.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-alien.lua b/angelsbioprocessing/prototypes/technology/bio-processing-alien.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-alien.lua rename to angelsbioprocessing/prototypes/technology/bio-processing-alien.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-wood-paper.lua b/angelsbioprocessing/prototypes/technology/bio-processing-wood-paper.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/bio-processing-wood-paper.lua rename to angelsbioprocessing/prototypes/technology/bio-processing-wood-paper.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/bio-refugium.lua b/angelsbioprocessing/prototypes/technology/bio-refugium.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/bio-refugium.lua rename to angelsbioprocessing/prototypes/technology/bio-refugium.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/technology/crop-farming.lua b/angelsbioprocessing/prototypes/technology/crop-farming.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/technology/crop-farming.lua rename to angelsbioprocessing/prototypes/technology/crop-farming.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-1-bio-nauvis-algae/1-1-1-bio-nauvis-algae.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-2-bio-nauvis-trees/1-1-2-bio-nauvis-trees.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-3-bio-nauvis-arbor/1-1-3-bio-nauvis-arbor.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-1-bio-nauvis/1-1-bio-nauvis.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-1-bio-vegetables-farming/1-2-1-bio-vegetables-farming.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-2-bio-vegetables-crops/1-2-2-bio-vegetables-crops.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-2-bio-vegetables/1-2-bio-vegetables.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-3-bio-animals/1-3-bio-animals.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing-description.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing-description.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing-description.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing-description.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing.lua b/angelsbioprocessing/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/1-bio-processing/1-bio-processing.lua diff --git a/angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/tips-and-tricks.lua b/angelsbioprocessing/prototypes/tips-and-tricks/tips-and-tricks.lua similarity index 100% rename from angelsbioprocessing_9.7.24/prototypes/tips-and-tricks/tips-and-tricks.lua rename to angelsbioprocessing/prototypes/tips-and-tricks/tips-and-tricks.lua diff --git a/angelsbioprocessing_9.7.24/settings-updates.lua b/angelsbioprocessing/settings-updates.lua similarity index 100% rename from angelsbioprocessing_9.7.24/settings-updates.lua rename to angelsbioprocessing/settings-updates.lua diff --git a/angelsbioprocessing_9.7.24/settings.lua b/angelsbioprocessing/settings.lua similarity index 100% rename from angelsbioprocessing_9.7.24/settings.lua rename to angelsbioprocessing/settings.lua diff --git a/angelsbioprocessing_9.7.24/sound/aquarium.ogg b/angelsbioprocessing/sound/aquarium.ogg similarity index 100% rename from angelsbioprocessing_9.7.24/sound/aquarium.ogg rename to angelsbioprocessing/sound/aquarium.ogg diff --git a/angelsbioprocessing_9.7.24/sound/fart_1.ogg b/angelsbioprocessing/sound/fart_1.ogg similarity index 100% rename from angelsbioprocessing_9.7.24/sound/fart_1.ogg rename to angelsbioprocessing/sound/fart_1.ogg diff --git a/angelsbioprocessing_9.7.24/sound/fart_2.ogg b/angelsbioprocessing/sound/fart_2.ogg similarity index 100% rename from angelsbioprocessing_9.7.24/sound/fart_2.ogg rename to angelsbioprocessing/sound/fart_2.ogg diff --git a/angelsbioprocessing_9.7.24/sound/mining-wood-1.ogg b/angelsbioprocessing/sound/mining-wood-1.ogg similarity index 100% rename from angelsbioprocessing_9.7.24/sound/mining-wood-1.ogg rename to angelsbioprocessing/sound/mining-wood-1.ogg diff --git a/angelsbioprocessing_9.7.24/thumbnail.png b/angelsbioprocessing/thumbnail.png similarity index 100% rename from angelsbioprocessing_9.7.24/thumbnail.png rename to angelsbioprocessing/thumbnail.png diff --git a/angelsextended-remelting-fixed_9.1.3/LICENSE b/angelsextended-remelting-fixed/LICENSE similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/LICENSE rename to angelsextended-remelting-fixed/LICENSE diff --git a/angelsextended-remelting-fixed_9.1.3/README.md b/angelsextended-remelting-fixed/README.md similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/README.md rename to angelsextended-remelting-fixed/README.md diff --git a/angelsextended-remelting-fixed_9.1.3/changelog.txt b/angelsextended-remelting-fixed/changelog.txt similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/changelog.txt rename to angelsextended-remelting-fixed/changelog.txt diff --git a/angelsextended-remelting-fixed_9.1.3/data-final-fixes.lua b/angelsextended-remelting-fixed/data-final-fixes.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/data-final-fixes.lua rename to angelsextended-remelting-fixed/data-final-fixes.lua diff --git a/angelsextended-remelting-fixed_9.1.3/data-updates.lua b/angelsextended-remelting-fixed/data-updates.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/data-updates.lua rename to angelsextended-remelting-fixed/data-updates.lua diff --git a/angelsextended-remelting-fixed_9.1.3/data.lua b/angelsextended-remelting-fixed/data.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/data.lua rename to angelsextended-remelting-fixed/data.lua diff --git a/angelsextended-remelting-fixed_9.1.3/graphics/icons/num_1.png b/angelsextended-remelting-fixed/graphics/icons/num_1.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/graphics/icons/num_1.png rename to angelsextended-remelting-fixed/graphics/icons/num_1.png diff --git a/angelsextended-remelting-fixed_9.1.3/graphics/icons/num_2.png b/angelsextended-remelting-fixed/graphics/icons/num_2.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/graphics/icons/num_2.png rename to angelsextended-remelting-fixed/graphics/icons/num_2.png diff --git a/angelsextended-remelting-fixed_9.1.3/graphics/icons/num_3.png b/angelsextended-remelting-fixed/graphics/icons/num_3.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/graphics/icons/num_3.png rename to angelsextended-remelting-fixed/graphics/icons/num_3.png diff --git a/angelsextended-remelting-fixed_9.1.3/graphics/icons/num_4.png b/angelsextended-remelting-fixed/graphics/icons/num_4.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/graphics/icons/num_4.png rename to angelsextended-remelting-fixed/graphics/icons/num_4.png diff --git a/angelsextended-remelting-fixed_9.1.3/graphics/icons/remelting.png b/angelsextended-remelting-fixed/graphics/icons/remelting.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/graphics/icons/remelting.png rename to angelsextended-remelting-fixed/graphics/icons/remelting.png diff --git a/angelsextended-remelting-fixed_9.1.3/info.json b/angelsextended-remelting-fixed/info.json similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/info.json rename to angelsextended-remelting-fixed/info.json diff --git a/angelsextended-remelting-fixed_9.1.3/locale/en/remelting.cfg b/angelsextended-remelting-fixed/locale/en/remelting.cfg similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/locale/en/remelting.cfg rename to angelsextended-remelting-fixed/locale/en/remelting.cfg diff --git a/angelsextended-remelting-fixed_9.1.3/locale/ru/remelting.cfg b/angelsextended-remelting-fixed/locale/ru/remelting.cfg similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/locale/ru/remelting.cfg rename to angelsextended-remelting-fixed/locale/ru/remelting.cfg diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk1.lua b/angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk1.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk1.lua rename to angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk1.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk2.lua b/angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk2.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk2.lua rename to angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk2.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk3.lua b/angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk3.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk3.lua rename to angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk3.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk4.lua b/angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk4.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/buildings/alloy-mixer-mk4.lua rename to angelsextended-remelting-fixed/prototypes/buildings/alloy-mixer-mk4.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/override-functions.lua b/angelsextended-remelting-fixed/prototypes/override-functions.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/override-functions.lua rename to angelsextended-remelting-fixed/prototypes/override-functions.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-aluminium.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-aluminium.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-aluminium.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-aluminium.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-chrome.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-chrome.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-chrome.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-chrome.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-cobalt.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-cobalt.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-cobalt.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-cobalt.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-copper.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-copper.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-copper.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-copper.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-glass.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-glass.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-glass.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-glass.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-gold.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-gold.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-gold.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-gold.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-iron.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-iron.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-iron.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-iron.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-lead.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-lead.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-lead.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-lead.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-manganese.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-manganese.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-manganese.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-manganese.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-nickel.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-nickel.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-nickel.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-nickel.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-platinum.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-platinum.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-platinum.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-platinum.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-silicon.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-silicon.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-silicon.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-silicon.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-silver.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-silver.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-silver.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-silver.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-solder.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-solder.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-solder.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-solder.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-steel.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-steel.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-steel.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-steel.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-tin.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-tin.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-tin.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-tin.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-titanium.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-titanium.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-titanium.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-titanium.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-tungsten.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-tungsten.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-tungsten.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-tungsten.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-zinc.lua b/angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-zinc.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/angelssmelting/remelting-zinc.lua rename to angelsextended-remelting-fixed/prototypes/recipes/angelssmelting/remelting-zinc.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-brass.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-brass.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-brass.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-brass.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-bronze.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-bronze.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-bronze.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-bronze.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-cobalt-steel.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-cobalt-steel.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-cobalt-steel.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-cobalt-steel.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-gunmetal.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-gunmetal.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-gunmetal.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-gunmetal.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-invar.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-invar.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-invar.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-invar.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-nitinol.lua b/angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-nitinol.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/bobplates/remelting-nitinol.lua rename to angelsextended-remelting-fixed/prototypes/recipes/bobplates/remelting-nitinol.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/recipes/clowns/remelting-magnesium.lua b/angelsextended-remelting-fixed/prototypes/recipes/clowns/remelting-magnesium.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/recipes/clowns/remelting-magnesium.lua rename to angelsextended-remelting-fixed/prototypes/recipes/clowns/remelting-magnesium.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-category-bobplates.lua b/angelsextended-remelting-fixed/prototypes/remelting-category-bobplates.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-category-bobplates.lua rename to angelsextended-remelting-fixed/prototypes/remelting-category-bobplates.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-category.lua b/angelsextended-remelting-fixed/prototypes/remelting-category.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-category.lua rename to angelsextended-remelting-fixed/prototypes/remelting-category.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-angelssmelting.lua b/angelsextended-remelting-fixed/prototypes/remelting-override-angelssmelting.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-angelssmelting.lua rename to angelsextended-remelting-fixed/prototypes/remelting-override-angelssmelting.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-bobplates.lua b/angelsextended-remelting-fixed/prototypes/remelting-override-bobplates.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-bobplates.lua rename to angelsextended-remelting-fixed/prototypes/remelting-override-bobplates.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-clowns.lua b/angelsextended-remelting-fixed/prototypes/remelting-override-clowns.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-clowns.lua rename to angelsextended-remelting-fixed/prototypes/remelting-override-clowns.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-shinygfx.lua b/angelsextended-remelting-fixed/prototypes/remelting-override-shinygfx.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/remelting-override-shinygfx.lua rename to angelsextended-remelting-fixed/prototypes/remelting-override-shinygfx.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/technology/remelting-technology-optional.lua b/angelsextended-remelting-fixed/prototypes/technology/remelting-technology-optional.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/technology/remelting-technology-optional.lua rename to angelsextended-remelting-fixed/prototypes/technology/remelting-technology-optional.lua diff --git a/angelsextended-remelting-fixed_9.1.3/prototypes/technology/remelting-technology.lua b/angelsextended-remelting-fixed/prototypes/technology/remelting-technology.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/prototypes/technology/remelting-technology.lua rename to angelsextended-remelting-fixed/prototypes/technology/remelting-technology.lua diff --git a/angelsextended-remelting-fixed_9.1.3/settings.lua b/angelsextended-remelting-fixed/settings.lua similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/settings.lua rename to angelsextended-remelting-fixed/settings.lua diff --git a/angelsextended-remelting-fixed_9.1.3/thumbnail.png b/angelsextended-remelting-fixed/thumbnail.png similarity index 100% rename from angelsextended-remelting-fixed_9.1.3/thumbnail.png rename to angelsextended-remelting-fixed/thumbnail.png diff --git a/angelsinfiniteores_0.9.10/changelog.txt b/angelsinfiniteores/changelog.txt similarity index 100% rename from angelsinfiniteores_0.9.10/changelog.txt rename to angelsinfiniteores/changelog.txt diff --git a/angelsinfiniteores_0.9.10/data-updates.lua b/angelsinfiniteores/data-updates.lua similarity index 100% rename from angelsinfiniteores_0.9.10/data-updates.lua rename to angelsinfiniteores/data-updates.lua diff --git a/angelsinfiniteores_0.9.10/data.lua b/angelsinfiniteores/data.lua similarity index 100% rename from angelsinfiniteores_0.9.10/data.lua rename to angelsinfiniteores/data.lua diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-1.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-1.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-1.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-2.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-2.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-2.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-2.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-3.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-3.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-3.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-3.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-4.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-4.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-4.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-4.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-5.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-5.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-5.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-5.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-6.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-6.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-6.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-6.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-7.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-7.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-7.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-7.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-8.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-8.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-8.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-8.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-1.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-1.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-1.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-2.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-2.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-2.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-2.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-3.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-3.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-3.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-3.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-4.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-4.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-4.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-4.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-5.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-5.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-5.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-5.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-6.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-6.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-6.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-6.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-7.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-7.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-7.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-7.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-8.png b/angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-8.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores-particle/ore-particle-shadow-8.png rename to angelsinfiniteores/graphics/entity/ores-particle/ore-particle-shadow-8.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-1.png b/angelsinfiniteores/graphics/entity/ores/ore-1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-1.png rename to angelsinfiniteores/graphics/entity/ores/ore-1.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-11-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-11-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-11-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-11-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-11-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-11-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-11-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-11-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-11-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-12-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-12-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-12-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-12-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-12-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-12-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-12-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-12-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-12-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-13-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-13-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-13-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-13-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-13-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-13-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-13-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-13-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-13-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-14-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-14-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-14-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-14-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-14-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-14-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-14-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-14-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-14-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-15-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-15-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-15-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-15-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-15-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-15-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-15-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-15-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-15-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-16-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-16-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-16-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-16-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-16-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-16-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-16-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-16-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-16-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-17-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-17-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-17-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-17-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-17-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-17-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-17-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-17-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-17-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-hr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-18-hr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-hr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-18-hr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-18-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-18-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-lr-glow.png b/angelsinfiniteores/graphics/entity/ores/ore-18-lr-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-lr-glow.png rename to angelsinfiniteores/graphics/entity/ores/ore-18-lr-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-18-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-18-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-18-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-19-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-19-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-19-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-19-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-19-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-19-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-19-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-19-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-2.png b/angelsinfiniteores/graphics/entity/ores/ore-2.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-2.png rename to angelsinfiniteores/graphics/entity/ores/ore-2.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-20-hr.png b/angelsinfiniteores/graphics/entity/ores/ore-20-hr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-20-hr.png rename to angelsinfiniteores/graphics/entity/ores/ore-20-hr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-20-lr.png b/angelsinfiniteores/graphics/entity/ores/ore-20-lr.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-20-lr.png rename to angelsinfiniteores/graphics/entity/ores/ore-20-lr.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-3.png b/angelsinfiniteores/graphics/entity/ores/ore-3.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-3.png rename to angelsinfiniteores/graphics/entity/ores/ore-3.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-4.png b/angelsinfiniteores/graphics/entity/ores/ore-4.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-4.png rename to angelsinfiniteores/graphics/entity/ores/ore-4.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-5.png b/angelsinfiniteores/graphics/entity/ores/ore-5.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-5.png rename to angelsinfiniteores/graphics/entity/ores/ore-5.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-6.png b/angelsinfiniteores/graphics/entity/ores/ore-6.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-6.png rename to angelsinfiniteores/graphics/entity/ores/ore-6.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-7.png b/angelsinfiniteores/graphics/entity/ores/ore-7.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-7.png rename to angelsinfiniteores/graphics/entity/ores/ore-7.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-8.png b/angelsinfiniteores/graphics/entity/ores/ore-8.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-8.png rename to angelsinfiniteores/graphics/entity/ores/ore-8.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/ores/ore-9.png b/angelsinfiniteores/graphics/entity/ores/ore-9.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/ores/ore-9.png rename to angelsinfiniteores/graphics/entity/ores/ore-9.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/patches/fissure-glow.png b/angelsinfiniteores/graphics/entity/patches/fissure-glow.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/patches/fissure-glow.png rename to angelsinfiniteores/graphics/entity/patches/fissure-glow.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/patches/fissure.png b/angelsinfiniteores/graphics/entity/patches/fissure.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/patches/fissure.png rename to angelsinfiniteores/graphics/entity/patches/fissure.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/patches/gas.png b/angelsinfiniteores/graphics/entity/patches/gas.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/patches/gas.png rename to angelsinfiniteores/graphics/entity/patches/gas.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/patches/liquid.png b/angelsinfiniteores/graphics/entity/patches/liquid.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/patches/liquid.png rename to angelsinfiniteores/graphics/entity/patches/liquid.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-1.png b/angelsinfiniteores/graphics/entity/rock/crystal-rock-1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-1.png rename to angelsinfiniteores/graphics/entity/rock/crystal-rock-1.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-2.png b/angelsinfiniteores/graphics/entity/rock/crystal-rock-2.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-2.png rename to angelsinfiniteores/graphics/entity/rock/crystal-rock-2.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-3.png b/angelsinfiniteores/graphics/entity/rock/crystal-rock-3.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-3.png rename to angelsinfiniteores/graphics/entity/rock/crystal-rock-3.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-4.png b/angelsinfiniteores/graphics/entity/rock/crystal-rock-4.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-4.png rename to angelsinfiniteores/graphics/entity/rock/crystal-rock-4.png diff --git a/angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-big-1.png b/angelsinfiniteores/graphics/entity/rock/crystal-rock-big-1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/entity/rock/crystal-rock-big-1.png rename to angelsinfiniteores/graphics/entity/rock/crystal-rock-big-1.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore1.png b/angelsinfiniteores/graphics/icons/angels-ore1.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore1.png rename to angelsinfiniteores/graphics/icons/angels-ore1.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore2.png b/angelsinfiniteores/graphics/icons/angels-ore2.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore2.png rename to angelsinfiniteores/graphics/icons/angels-ore2.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore3.png b/angelsinfiniteores/graphics/icons/angels-ore3.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore3.png rename to angelsinfiniteores/graphics/icons/angels-ore3.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore4.png b/angelsinfiniteores/graphics/icons/angels-ore4.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore4.png rename to angelsinfiniteores/graphics/icons/angels-ore4.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore5.png b/angelsinfiniteores/graphics/icons/angels-ore5.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore5.png rename to angelsinfiniteores/graphics/icons/angels-ore5.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/angels-ore6.png b/angelsinfiniteores/graphics/icons/angels-ore6.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/angels-ore6.png rename to angelsinfiniteores/graphics/icons/angels-ore6.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/nuc-uranium-ore.png b/angelsinfiniteores/graphics/icons/nuc-uranium-ore.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/nuc-uranium-ore.png rename to angelsinfiniteores/graphics/icons/nuc-uranium-ore.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/ore-6-blank.png b/angelsinfiniteores/graphics/icons/ore-6-blank.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/ore-6-blank.png rename to angelsinfiniteores/graphics/icons/ore-6-blank.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/ore-7-blank.png b/angelsinfiniteores/graphics/icons/ore-7-blank.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/ore-7-blank.png rename to angelsinfiniteores/graphics/icons/ore-7-blank.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/up-fluorite.png b/angelsinfiniteores/graphics/icons/up-fluorite.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/up-fluorite.png rename to angelsinfiniteores/graphics/icons/up-fluorite.png diff --git a/angelsinfiniteores_0.9.10/graphics/icons/up-uraninite.png b/angelsinfiniteores/graphics/icons/up-uraninite.png similarity index 100% rename from angelsinfiniteores_0.9.10/graphics/icons/up-uraninite.png rename to angelsinfiniteores/graphics/icons/up-uraninite.png diff --git a/angelsinfiniteores/info.json b/angelsinfiniteores/info.json new file mode 100644 index 00000000..12e69ab7 --- /dev/null +++ b/angelsinfiniteores/info.json @@ -0,0 +1,25 @@ +{ + "name": "angelsinfiniteores", + "version": "0.9.11", + "factorio_version": "1.1", + "title": "Angel's Infinite Ores", + "author": "Arch666Angel", + "contact": "", + "homepage": "https://forums.factorio.com/viewforum.php?f=185", + "description": "Adds infinite ores for the base game, Bob's mods, Yuoki Industries, Uranium Power, Nucular, Dark Matter Replicators and the base ores for Angel's Refining. Works well with RSO mod. Has config options to change the yield for all infinite resources including oil and gas.", + "dependencies": [ + "base >= 1.1.33", + "? angelsrefining >= 0.11.19", + "? rso-mod >= 2.3.3", + "? bobores >= 0.18.3", + "? bobplates >= 0.18.8", + "? Yuoki >= 0.4.0", + "? UraniumPower >= 0.6.3", + "? Nucular >= 0.2.0", + "? dark-matter-replicators >= 0.6.1", + "(?) dark-matter-replicators-18 >= 1.1.0", + "? pycoalprocessing >= 1.3.4", + "? pyrawores >= 1.5.2", + "? pypetroleumhandling >= 1.2.4" + ] +} diff --git a/angelsinfiniteores_0.9.10/locale/en/names.cfg b/angelsinfiniteores/locale/en/names.cfg similarity index 100% rename from angelsinfiniteores_0.9.10/locale/en/names.cfg rename to angelsinfiniteores/locale/en/names.cfg diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/angels-ore-inf.lua b/angelsinfiniteores/prototypes/generation/angels-ore-inf.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/angels-ore-inf.lua rename to angelsinfiniteores/prototypes/generation/angels-ore-inf.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/bob-options.lua b/angelsinfiniteores/prototypes/generation/bob-options.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/bob-options.lua rename to angelsinfiniteores/prototypes/generation/bob-options.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/bob-ore-inf.lua b/angelsinfiniteores/prototypes/generation/bob-ore-inf.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/bob-ore-inf.lua rename to angelsinfiniteores/prototypes/generation/bob-ore-inf.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/dm-tenemut.lua b/angelsinfiniteores/prototypes/generation/dm-tenemut.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/dm-tenemut.lua rename to angelsinfiniteores/prototypes/generation/dm-tenemut.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/py-ore-inf.lua b/angelsinfiniteores/prototypes/generation/py-ore-inf.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/py-ore-inf.lua rename to angelsinfiniteores/prototypes/generation/py-ore-inf.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/resource-builder.lua b/angelsinfiniteores/prototypes/generation/resource-builder.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/resource-builder.lua rename to angelsinfiniteores/prototypes/generation/resource-builder.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/resource-generator-dirty-trace.lua b/angelsinfiniteores/prototypes/generation/resource-generator-dirty-trace.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/resource-generator-dirty-trace.lua rename to angelsinfiniteores/prototypes/generation/resource-generator-dirty-trace.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/up-fluorite.lua b/angelsinfiniteores/prototypes/generation/up-fluorite.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/up-fluorite.lua rename to angelsinfiniteores/prototypes/generation/up-fluorite.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/up-uraninite.lua b/angelsinfiniteores/prototypes/generation/up-uraninite.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/up-uraninite.lua rename to angelsinfiniteores/prototypes/generation/up-uraninite.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/vanilla-ore-inf.lua b/angelsinfiniteores/prototypes/generation/vanilla-ore-inf.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/vanilla-ore-inf.lua rename to angelsinfiniteores/prototypes/generation/vanilla-ore-inf.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/generation/yuoki-ore-inf.lua b/angelsinfiniteores/prototypes/generation/yuoki-ore-inf.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/generation/yuoki-ore-inf.lua rename to angelsinfiniteores/prototypes/generation/yuoki-ore-inf.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/infiniteores-override.lua b/angelsinfiniteores/prototypes/infiniteores-override.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/infiniteores-override.lua rename to angelsinfiniteores/prototypes/infiniteores-override.lua diff --git a/angelsinfiniteores_0.9.10/prototypes/overrides/infiniteores-override-bobplates.lua b/angelsinfiniteores/prototypes/overrides/infiniteores-override-bobplates.lua similarity index 100% rename from angelsinfiniteores_0.9.10/prototypes/overrides/infiniteores-override-bobplates.lua rename to angelsinfiniteores/prototypes/overrides/infiniteores-override-bobplates.lua diff --git a/angelsinfiniteores_0.9.10/settings.lua b/angelsinfiniteores/settings.lua similarity index 100% rename from angelsinfiniteores_0.9.10/settings.lua rename to angelsinfiniteores/settings.lua diff --git a/angelsinfiniteores_0.9.10/thumbnail.png b/angelsinfiniteores/thumbnail.png similarity index 100% rename from angelsinfiniteores_0.9.10/thumbnail.png rename to angelsinfiniteores/thumbnail.png diff --git a/angelsinfiniteores_0.9.10/info.json b/angelsinfiniteores_0.9.10/info.json deleted file mode 100644 index 316a7a68..00000000 --- a/angelsinfiniteores_0.9.10/info.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "angelsinfiniteores", - "version": "0.9.10", - "factorio_version": "1.1", - "title": "Angel's Infinite Ores", - "author": "Arch666Angel", - "contact": "", - "homepage": "https://forums.factorio.com/viewforum.php?f=185", - "description": "Adds infinite ores for the base game, Bob's mods, Yuoki Industries, Uranium Power, Nucular, Dark Matter Replicators and the base ores for Angel's Refining. Works well with RSO mod. Has config options to change the yield for all infinite resources including oil and gas.", - "dependencies": [ - "base >= 1.1.33", - "? angelsrefining >= 0.11.19", - "? rso-mod >= 2.3.3", - "? bobores >= 0.18.3", - "? bobplates >= 0.18.8", - "? Yuoki >= 0.4.0", - "? UraniumPower >= 0.6.3", - "? Nucular >= 0.2.0", - "? dark-matter-replicators >= 0.6.1", - "(?) dark-matter-replicators-18 >= 1.1.0", - "? pycoalprocessing >= 1.3.4", - "? pyrawores >= 1.5.2", - "? pypetroleumhandling >= 1.2.4" - ] -} diff --git a/angelspetrochem_9.9.24/changelog.txt b/angelspetrochem/changelog.txt similarity index 100% rename from angelspetrochem_9.9.24/changelog.txt rename to angelspetrochem/changelog.txt diff --git a/angelspetrochem_9.9.24/data-final-fixes.lua b/angelspetrochem/data-final-fixes.lua similarity index 100% rename from angelspetrochem_9.9.24/data-final-fixes.lua rename to angelspetrochem/data-final-fixes.lua diff --git a/angelspetrochem_9.9.24/data-updates.lua b/angelspetrochem/data-updates.lua similarity index 100% rename from angelspetrochem_9.9.24/data-updates.lua rename to angelspetrochem/data-updates.lua diff --git a/angelspetrochem_9.9.24/data.lua b/angelspetrochem/data.lua similarity index 100% rename from angelspetrochem_9.9.24/data.lua rename to angelspetrochem/data.lua diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-chemical-plant/advanced-chemical-plant.png b/angelspetrochem/graphics/entity/advanced-chemical-plant/advanced-chemical-plant.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-chemical-plant/advanced-chemical-plant.png rename to angelspetrochem/graphics/entity/advanced-chemical-plant/advanced-chemical-plant.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-base.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-base.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-base.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-base.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-light.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-light.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-shadow.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-shadow.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/advanced-gas-refinery-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-base.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-base.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-base.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-base.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-light.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-light.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-shadow.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-shadow.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/hr-advanced-gas-refinery-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-vertical-pipe-shadow-patch.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/hr-vertical-pipe-shadow-patch.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/hr-vertical-pipe-shadow-patch.png diff --git a/angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/vertical-pipe-shadow-patch.png b/angelspetrochem/graphics/entity/advanced-gas-refinery/vertical-pipe-shadow-patch.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/advanced-gas-refinery/vertical-pipe-shadow-patch.png rename to angelspetrochem/graphics/entity/advanced-gas-refinery/vertical-pipe-shadow-patch.png diff --git a/angelspetrochem_9.9.24/graphics/entity/air-filter/air-filter.png b/angelspetrochem/graphics/entity/air-filter/air-filter.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/air-filter/air-filter.png rename to angelspetrochem/graphics/entity/air-filter/air-filter.png diff --git a/angelspetrochem_9.9.24/graphics/entity/chemical-plant/chemical-plant.png b/angelspetrochem/graphics/entity/chemical-plant/chemical-plant.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/chemical-plant/chemical-plant.png rename to angelspetrochem/graphics/entity/chemical-plant/chemical-plant.png diff --git a/angelspetrochem_9.9.24/graphics/entity/chemical-plant/mixer-overlay.png b/angelspetrochem/graphics/entity/chemical-plant/mixer-overlay.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/chemical-plant/mixer-overlay.png rename to angelspetrochem/graphics/entity/chemical-plant/mixer-overlay.png diff --git a/angelspetrochem_9.9.24/graphics/entity/chemical-plant/mixer-tint.png b/angelspetrochem/graphics/entity/chemical-plant/mixer-tint.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/chemical-plant/mixer-tint.png rename to angelspetrochem/graphics/entity/chemical-plant/mixer-tint.png diff --git a/angelspetrochem_9.9.24/graphics/entity/chemical-plant/pipe-overlay.png b/angelspetrochem/graphics/entity/chemical-plant/pipe-overlay.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/chemical-plant/pipe-overlay.png rename to angelspetrochem/graphics/entity/chemical-plant/pipe-overlay.png diff --git a/angelspetrochem_9.9.24/graphics/entity/chemical-plant/pipe-tint.png b/angelspetrochem/graphics/entity/chemical-plant/pipe-tint.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/chemical-plant/pipe-tint.png rename to angelspetrochem/graphics/entity/chemical-plant/pipe-tint.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-east-off.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-east-off.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-east-off.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-east-off.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-east-on.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-east-on.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-east-on.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-east-on.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-north-off.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-north-off.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-north-off.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-north-off.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-north-on.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-north-on.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-north-on.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-north-on.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-south-off.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-south-off.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-south-off.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-south-off.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-south-on.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-south-on.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-south-on.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-south-on.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-west-off.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-west-off.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-west-off.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-west-off.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-west-on.png b/angelspetrochem/graphics/entity/electric-boiler/boiler-west-on.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electric-boiler/boiler-west-on.png rename to angelspetrochem/graphics/entity/electric-boiler/boiler-west-on.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electrolyser/blank.png b/angelspetrochem/graphics/entity/electrolyser/blank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electrolyser/blank.png rename to angelspetrochem/graphics/entity/electrolyser/blank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electrolyser/electrolyser-east.png b/angelspetrochem/graphics/entity/electrolyser/electrolyser-east.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electrolyser/electrolyser-east.png rename to angelspetrochem/graphics/entity/electrolyser/electrolyser-east.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electrolyser/electrolyser-north.png b/angelspetrochem/graphics/entity/electrolyser/electrolyser-north.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electrolyser/electrolyser-north.png rename to angelspetrochem/graphics/entity/electrolyser/electrolyser-north.png diff --git a/angelspetrochem_9.9.24/graphics/entity/electrolyser/pipe-south.png b/angelspetrochem/graphics/entity/electrolyser/pipe-south.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/electrolyser/pipe-south.png rename to angelspetrochem/graphics/entity/electrolyser/pipe-south.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack-light.png b/angelspetrochem/graphics/entity/flare-stack/flare-stack-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack-light.png rename to angelspetrochem/graphics/entity/flare-stack/flare-stack-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack-shadow.png b/angelspetrochem/graphics/entity/flare-stack/flare-stack-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack-shadow.png rename to angelspetrochem/graphics/entity/flare-stack/flare-stack-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack.png b/angelspetrochem/graphics/entity/flare-stack/flare-stack.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/flare-stack.png rename to angelspetrochem/graphics/entity/flare-stack/flare-stack.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack-light.png b/angelspetrochem/graphics/entity/flare-stack/hr-flare-stack-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack-light.png rename to angelspetrochem/graphics/entity/flare-stack/hr-flare-stack-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack-shadow.png b/angelspetrochem/graphics/entity/flare-stack/hr-flare-stack-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack-shadow.png rename to angelspetrochem/graphics/entity/flare-stack/hr-flare-stack-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack.png b/angelspetrochem/graphics/entity/flare-stack/hr-flare-stack.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/flare-stack/hr-flare-stack.png rename to angelspetrochem/graphics/entity/flare-stack/hr-flare-stack.png diff --git a/angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-1.png b/angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-1.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-1.png rename to angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-1.png diff --git a/angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-2.png b/angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-2.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-2.png rename to angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-2.png diff --git a/angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-animation.png b/angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-animation.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/fluid-splitter/fluid-splitter-animation.png rename to angelspetrochem/graphics/entity/fluid-splitter/fluid-splitter-animation.png diff --git a/angelspetrochem_9.9.24/graphics/entity/fluid-splitter/heavy-pump.png b/angelspetrochem/graphics/entity/fluid-splitter/heavy-pump.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/fluid-splitter/heavy-pump.png rename to angelspetrochem/graphics/entity/fluid-splitter/heavy-pump.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-base.png b/angelspetrochem/graphics/entity/gas-refinery/gas-refinery-base.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-base.png rename to angelspetrochem/graphics/entity/gas-refinery/gas-refinery-base.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-light.png b/angelspetrochem/graphics/entity/gas-refinery/gas-refinery-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-light.png rename to angelspetrochem/graphics/entity/gas-refinery/gas-refinery-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-shadow.png b/angelspetrochem/graphics/entity/gas-refinery/gas-refinery-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/gas-refinery-shadow.png rename to angelspetrochem/graphics/entity/gas-refinery/gas-refinery-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-base.png b/angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-base.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-base.png rename to angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-base.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-light.png b/angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-light.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-light.png rename to angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-light.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-shadow.png b/angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-gas-refinery-shadow.png rename to angelspetrochem/graphics/entity/gas-refinery/hr-gas-refinery-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-vertical-pipe-shadow-patch.png b/angelspetrochem/graphics/entity/gas-refinery/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/hr-vertical-pipe-shadow-patch.png rename to angelspetrochem/graphics/entity/gas-refinery/hr-vertical-pipe-shadow-patch.png diff --git a/angelspetrochem_9.9.24/graphics/entity/gas-refinery/vertical-pipe-shadow-patch.png b/angelspetrochem/graphics/entity/gas-refinery/vertical-pipe-shadow-patch.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/gas-refinery/vertical-pipe-shadow-patch.png rename to angelspetrochem/graphics/entity/gas-refinery/vertical-pipe-shadow-patch.png diff --git a/angelspetrochem_9.9.24/graphics/entity/patches/gas.png b/angelspetrochem/graphics/entity/patches/gas.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/patches/gas.png rename to angelspetrochem/graphics/entity/patches/gas.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank.png b/angelspetrochem/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank.png rename to angelspetrochem/graphics/entity/petrochem-gas-tank/hr-petrochem-gas-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/petrochem-gas-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-gas-tank/petrochem-gas-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/petrochem-gas-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-gas-tank/petrochem-gas-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/petrochem-gas-tank.png b/angelspetrochem/graphics/entity/petrochem-gas-tank/petrochem-gas-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-gas-tank/petrochem-gas-tank.png rename to angelspetrochem/graphics/entity/petrochem-gas-tank/petrochem-gas-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank.png b/angelspetrochem/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank.png rename to angelspetrochem/graphics/entity/petrochem-inline-tank/hr-petrochem-inline-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/petrochem-inline-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-inline-tank/petrochem-inline-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/petrochem-inline-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-inline-tank/petrochem-inline-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/petrochem-inline-tank.png b/angelspetrochem/graphics/entity/petrochem-inline-tank/petrochem-inline-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-inline-tank/petrochem-inline-tank.png rename to angelspetrochem/graphics/entity/petrochem-inline-tank/petrochem-inline-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank.png b/angelspetrochem/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank.png rename to angelspetrochem/graphics/entity/petrochem-oil-tank/hr-petrochem-oil-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/petrochem-oil-tank-shadow.png b/angelspetrochem/graphics/entity/petrochem-oil-tank/petrochem-oil-tank-shadow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/petrochem-oil-tank-shadow.png rename to angelspetrochem/graphics/entity/petrochem-oil-tank/petrochem-oil-tank-shadow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/petrochem-oil-tank.png b/angelspetrochem/graphics/entity/petrochem-oil-tank/petrochem-oil-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/petrochem-oil-tank/petrochem-oil-tank.png rename to angelspetrochem/graphics/entity/petrochem-oil-tank/petrochem-oil-tank.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/01.png b/angelspetrochem/graphics/entity/polymerization-chamber/01.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/01.png rename to angelspetrochem/graphics/entity/polymerization-chamber/01.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/04.png b/angelspetrochem/graphics/entity/polymerization-chamber/04.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/04.png rename to angelspetrochem/graphics/entity/polymerization-chamber/04.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/11.png b/angelspetrochem/graphics/entity/polymerization-chamber/11.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/11.png rename to angelspetrochem/graphics/entity/polymerization-chamber/11.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/12.png b/angelspetrochem/graphics/entity/polymerization-chamber/12.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/12.png rename to angelspetrochem/graphics/entity/polymerization-chamber/12.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/13.png b/angelspetrochem/graphics/entity/polymerization-chamber/13.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/13.png rename to angelspetrochem/graphics/entity/polymerization-chamber/13.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/22.png b/angelspetrochem/graphics/entity/polymerization-chamber/22.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/22.png rename to angelspetrochem/graphics/entity/polymerization-chamber/22.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/23.png b/angelspetrochem/graphics/entity/polymerization-chamber/23.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/23.png rename to angelspetrochem/graphics/entity/polymerization-chamber/23.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/24.png b/angelspetrochem/graphics/entity/polymerization-chamber/24.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/24.png rename to angelspetrochem/graphics/entity/polymerization-chamber/24.png diff --git a/angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/polymerization-chamber.png b/angelspetrochem/graphics/entity/polymerization-chamber/polymerization-chamber.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/polymerization-chamber/polymerization-chamber.png rename to angelspetrochem/graphics/entity/polymerization-chamber/polymerization-chamber.png diff --git a/angelspetrochem_9.9.24/graphics/entity/separator/separator.png b/angelspetrochem/graphics/entity/separator/separator.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/separator/separator.png rename to angelspetrochem/graphics/entity/separator/separator.png diff --git a/angelspetrochem_9.9.24/graphics/entity/steam-cracker/steam-cracker.png b/angelspetrochem/graphics/entity/steam-cracker/steam-cracker.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/steam-cracker/steam-cracker.png rename to angelspetrochem/graphics/entity/steam-cracker/steam-cracker.png diff --git a/angelspetrochem_9.9.24/graphics/entity/valve/valve-converter.png b/angelspetrochem/graphics/entity/valve/valve-converter.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/valve/valve-converter.png rename to angelspetrochem/graphics/entity/valve/valve-converter.png diff --git a/angelspetrochem_9.9.24/graphics/entity/valve/valve-inspector.png b/angelspetrochem/graphics/entity/valve/valve-inspector.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/valve/valve-inspector.png rename to angelspetrochem/graphics/entity/valve/valve-inspector.png diff --git a/angelspetrochem_9.9.24/graphics/entity/valve/valve-overflow.png b/angelspetrochem/graphics/entity/valve/valve-overflow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/valve/valve-overflow.png rename to angelspetrochem/graphics/entity/valve/valve-overflow.png diff --git a/angelspetrochem_9.9.24/graphics/entity/valve/valve-return.png b/angelspetrochem/graphics/entity/valve/valve-return.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/valve/valve-return.png rename to angelspetrochem/graphics/entity/valve/valve-return.png diff --git a/angelspetrochem_9.9.24/graphics/entity/valve/valve-underflow.png b/angelspetrochem/graphics/entity/valve/valve-underflow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/entity/valve/valve-underflow.png rename to angelspetrochem/graphics/entity/valve/valve-underflow.png diff --git a/angelspetrochem_9.9.24/graphics/icons/advanced-chemical-plant.png b/angelspetrochem/graphics/icons/advanced-chemical-plant.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/advanced-chemical-plant.png rename to angelspetrochem/graphics/icons/advanced-chemical-plant.png diff --git a/angelspetrochem_9.9.24/graphics/icons/air-filter.png b/angelspetrochem/graphics/icons/air-filter.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/air-filter.png rename to angelspetrochem/graphics/icons/air-filter.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal-blue.png b/angelspetrochem/graphics/icons/catalyst-metal-blue.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal-blue.png rename to angelspetrochem/graphics/icons/catalyst-metal-blue.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal-carrier.png b/angelspetrochem/graphics/icons/catalyst-metal-carrier.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal-carrier.png rename to angelspetrochem/graphics/icons/catalyst-metal-carrier.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal-green.png b/angelspetrochem/graphics/icons/catalyst-metal-green.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal-green.png rename to angelspetrochem/graphics/icons/catalyst-metal-green.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal-red.png b/angelspetrochem/graphics/icons/catalyst-metal-red.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal-red.png rename to angelspetrochem/graphics/icons/catalyst-metal-red.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal-yellow.png b/angelspetrochem/graphics/icons/catalyst-metal-yellow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal-yellow.png rename to angelspetrochem/graphics/icons/catalyst-metal-yellow.png diff --git a/angelspetrochem_9.9.24/graphics/icons/catalyst-metal.png b/angelspetrochem/graphics/icons/catalyst-metal.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/catalyst-metal.png rename to angelspetrochem/graphics/icons/catalyst-metal.png diff --git a/angelspetrochem_9.9.24/graphics/icons/chemical-plant.png b/angelspetrochem/graphics/icons/chemical-plant.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/chemical-plant.png rename to angelspetrochem/graphics/icons/chemical-plant.png diff --git a/angelspetrochem_9.9.24/graphics/icons/coal-crushed.png b/angelspetrochem/graphics/icons/coal-crushed.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/coal-crushed.png rename to angelspetrochem/graphics/icons/coal-crushed.png diff --git a/angelspetrochem_9.9.24/graphics/icons/electric-boiler.png b/angelspetrochem/graphics/icons/electric-boiler.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/electric-boiler.png rename to angelspetrochem/graphics/icons/electric-boiler.png diff --git a/angelspetrochem_9.9.24/graphics/icons/electrolyser.png b/angelspetrochem/graphics/icons/electrolyser.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/electrolyser.png rename to angelspetrochem/graphics/icons/electrolyser.png diff --git a/angelspetrochem_9.9.24/graphics/icons/filter-lime-used.png b/angelspetrochem/graphics/icons/filter-lime-used.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/filter-lime-used.png rename to angelspetrochem/graphics/icons/filter-lime-used.png diff --git a/angelspetrochem_9.9.24/graphics/icons/filter-lime.png b/angelspetrochem/graphics/icons/filter-lime.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/filter-lime.png rename to angelspetrochem/graphics/icons/filter-lime.png diff --git a/angelspetrochem_9.9.24/graphics/icons/flare-stack.png b/angelspetrochem/graphics/icons/flare-stack.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/flare-stack.png rename to angelspetrochem/graphics/icons/flare-stack.png diff --git a/angelspetrochem_9.9.24/graphics/icons/fluid-splitter-1.png b/angelspetrochem/graphics/icons/fluid-splitter-1.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/fluid-splitter-1.png rename to angelspetrochem/graphics/icons/fluid-splitter-1.png diff --git a/angelspetrochem_9.9.24/graphics/icons/fluid-splitter-2.png b/angelspetrochem/graphics/icons/fluid-splitter-2.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/fluid-splitter-2.png rename to angelspetrochem/graphics/icons/fluid-splitter-2.png diff --git a/angelspetrochem_9.9.24/graphics/icons/gas-refinery-small.png b/angelspetrochem/graphics/icons/gas-refinery-small.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/gas-refinery-small.png rename to angelspetrochem/graphics/icons/gas-refinery-small.png diff --git a/angelspetrochem_9.9.24/graphics/icons/gas-refinery.png b/angelspetrochem/graphics/icons/gas-refinery.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/gas-refinery.png rename to angelspetrochem/graphics/icons/gas-refinery.png diff --git a/angelspetrochem_9.9.24/graphics/icons/gas.png b/angelspetrochem/graphics/icons/gas.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/gas.png rename to angelspetrochem/graphics/icons/gas.png diff --git a/angelspetrochem_9.9.24/graphics/icons/heavy-pump.png b/angelspetrochem/graphics/icons/heavy-pump.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/heavy-pump.png rename to angelspetrochem/graphics/icons/heavy-pump.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/acetone.png b/angelspetrochem/graphics/icons/molecules/acetone.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/acetone.png rename to angelspetrochem/graphics/icons/molecules/acetone.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/allyl-chloride.png b/angelspetrochem/graphics/icons/molecules/allyl-chloride.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/allyl-chloride.png rename to angelspetrochem/graphics/icons/molecules/allyl-chloride.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ammonia.png b/angelspetrochem/graphics/icons/molecules/ammonia.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ammonia.png rename to angelspetrochem/graphics/icons/molecules/ammonia.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ammonium-chloride.png b/angelspetrochem/graphics/icons/molecules/ammonium-chloride.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ammonium-chloride.png rename to angelspetrochem/graphics/icons/molecules/ammonium-chloride.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/benzene.png b/angelspetrochem/graphics/icons/molecules/benzene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/benzene.png rename to angelspetrochem/graphics/icons/molecules/benzene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/bisphenol_a.png b/angelspetrochem/graphics/icons/molecules/bisphenol_a.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/bisphenol_a.png rename to angelspetrochem/graphics/icons/molecules/bisphenol_a.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/butadiene.png b/angelspetrochem/graphics/icons/molecules/butadiene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/butadiene.png rename to angelspetrochem/graphics/icons/molecules/butadiene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/butane.png b/angelspetrochem/graphics/icons/molecules/butane.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/butane.png rename to angelspetrochem/graphics/icons/molecules/butane.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/carbon-dioxide.png b/angelspetrochem/graphics/icons/molecules/carbon-dioxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/carbon-dioxide.png rename to angelspetrochem/graphics/icons/molecules/carbon-dioxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/carbon-monoxide.png b/angelspetrochem/graphics/icons/molecules/carbon-monoxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/carbon-monoxide.png rename to angelspetrochem/graphics/icons/molecules/carbon-monoxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/chloramine.png b/angelspetrochem/graphics/icons/molecules/chloramine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/chloramine.png rename to angelspetrochem/graphics/icons/molecules/chloramine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/chlorine.png b/angelspetrochem/graphics/icons/molecules/chlorine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/chlorine.png rename to angelspetrochem/graphics/icons/molecules/chlorine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/chloromethane.png b/angelspetrochem/graphics/icons/molecules/chloromethane.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/chloromethane.png rename to angelspetrochem/graphics/icons/molecules/chloromethane.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/deuterium.png b/angelspetrochem/graphics/icons/molecules/deuterium.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/deuterium.png rename to angelspetrochem/graphics/icons/molecules/deuterium.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/dimethylamine.png b/angelspetrochem/graphics/icons/molecules/dimethylamine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/dimethylamine.png rename to angelspetrochem/graphics/icons/molecules/dimethylamine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/dimethylhydrazine.png b/angelspetrochem/graphics/icons/molecules/dimethylhydrazine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/dimethylhydrazine.png rename to angelspetrochem/graphics/icons/molecules/dimethylhydrazine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/dinitrogen-tetroxide.png b/angelspetrochem/graphics/icons/molecules/dinitrogen-tetroxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/dinitrogen-tetroxide.png rename to angelspetrochem/graphics/icons/molecules/dinitrogen-tetroxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/epichlorohydrin.png b/angelspetrochem/graphics/icons/molecules/epichlorohydrin.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/epichlorohydrin.png rename to angelspetrochem/graphics/icons/molecules/epichlorohydrin.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ethane.png b/angelspetrochem/graphics/icons/molecules/ethane.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ethane.png rename to angelspetrochem/graphics/icons/molecules/ethane.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ethylbenzene.png b/angelspetrochem/graphics/icons/molecules/ethylbenzene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ethylbenzene.png rename to angelspetrochem/graphics/icons/molecules/ethylbenzene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ethylene-carbonate.png b/angelspetrochem/graphics/icons/molecules/ethylene-carbonate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ethylene-carbonate.png rename to angelspetrochem/graphics/icons/molecules/ethylene-carbonate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ethylene-oxide.png b/angelspetrochem/graphics/icons/molecules/ethylene-oxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ethylene-oxide.png rename to angelspetrochem/graphics/icons/molecules/ethylene-oxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/ethylene.png b/angelspetrochem/graphics/icons/molecules/ethylene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/ethylene.png rename to angelspetrochem/graphics/icons/molecules/ethylene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/formaldehyde.png b/angelspetrochem/graphics/icons/molecules/formaldehyde.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/formaldehyde.png rename to angelspetrochem/graphics/icons/molecules/formaldehyde.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/glycerol.png b/angelspetrochem/graphics/icons/molecules/glycerol.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/glycerol.png rename to angelspetrochem/graphics/icons/molecules/glycerol.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/heavy-water.png b/angelspetrochem/graphics/icons/molecules/heavy-water.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/heavy-water.png rename to angelspetrochem/graphics/icons/molecules/heavy-water.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrazine.png b/angelspetrochem/graphics/icons/molecules/hydrazine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrazine.png rename to angelspetrochem/graphics/icons/molecules/hydrazine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrochloric-acid.png b/angelspetrochem/graphics/icons/molecules/hydrochloric-acid.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrochloric-acid.png rename to angelspetrochem/graphics/icons/molecules/hydrochloric-acid.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrofluoric-acid.png b/angelspetrochem/graphics/icons/molecules/hydrofluoric-acid.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrofluoric-acid.png rename to angelspetrochem/graphics/icons/molecules/hydrofluoric-acid.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-chloride.png b/angelspetrochem/graphics/icons/molecules/hydrogen-chloride.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-chloride.png rename to angelspetrochem/graphics/icons/molecules/hydrogen-chloride.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-peroxide.png b/angelspetrochem/graphics/icons/molecules/hydrogen-peroxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-peroxide.png rename to angelspetrochem/graphics/icons/molecules/hydrogen-peroxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-sulfide.png b/angelspetrochem/graphics/icons/molecules/hydrogen-sulfide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen-sulfide.png rename to angelspetrochem/graphics/icons/molecules/hydrogen-sulfide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen.png b/angelspetrochem/graphics/icons/molecules/hydrogen.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/hydrogen.png rename to angelspetrochem/graphics/icons/molecules/hydrogen.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/melamine.png b/angelspetrochem/graphics/icons/molecules/melamine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/melamine.png rename to angelspetrochem/graphics/icons/molecules/melamine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/methane.png b/angelspetrochem/graphics/icons/molecules/methane.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/methane.png rename to angelspetrochem/graphics/icons/molecules/methane.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/methanol.png b/angelspetrochem/graphics/icons/molecules/methanol.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/methanol.png rename to angelspetrochem/graphics/icons/molecules/methanol.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/methylamine.png b/angelspetrochem/graphics/icons/molecules/methylamine.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/methylamine.png rename to angelspetrochem/graphics/icons/molecules/methylamine.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/nitric-acid.png b/angelspetrochem/graphics/icons/molecules/nitric-acid.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/nitric-acid.png rename to angelspetrochem/graphics/icons/molecules/nitric-acid.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/nitric-oxide.png b/angelspetrochem/graphics/icons/molecules/nitric-oxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/nitric-oxide.png rename to angelspetrochem/graphics/icons/molecules/nitric-oxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/nitrogen-dioxide.png b/angelspetrochem/graphics/icons/molecules/nitrogen-dioxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/nitrogen-dioxide.png rename to angelspetrochem/graphics/icons/molecules/nitrogen-dioxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/nitrogen.png b/angelspetrochem/graphics/icons/molecules/nitrogen.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/nitrogen.png rename to angelspetrochem/graphics/icons/molecules/nitrogen.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/oxygen.png b/angelspetrochem/graphics/icons/molecules/oxygen.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/oxygen.png rename to angelspetrochem/graphics/icons/molecules/oxygen.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/perchloric-acid.png b/angelspetrochem/graphics/icons/molecules/perchloric-acid.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/perchloric-acid.png rename to angelspetrochem/graphics/icons/molecules/perchloric-acid.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/phenol.png b/angelspetrochem/graphics/icons/molecules/phenol.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/phenol.png rename to angelspetrochem/graphics/icons/molecules/phenol.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/phosgene.png b/angelspetrochem/graphics/icons/molecules/phosgene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/phosgene.png rename to angelspetrochem/graphics/icons/molecules/phosgene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/polyethylene.png b/angelspetrochem/graphics/icons/molecules/polyethylene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/polyethylene.png rename to angelspetrochem/graphics/icons/molecules/polyethylene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/polyethylene_rotated.png b/angelspetrochem/graphics/icons/molecules/polyethylene_rotated.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/polyethylene_rotated.png rename to angelspetrochem/graphics/icons/molecules/polyethylene_rotated.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/propene.png b/angelspetrochem/graphics/icons/molecules/propene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/propene.png rename to angelspetrochem/graphics/icons/molecules/propene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/semiheavy-water.png b/angelspetrochem/graphics/icons/molecules/semiheavy-water.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/semiheavy-water.png rename to angelspetrochem/graphics/icons/molecules/semiheavy-water.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/styrene.png b/angelspetrochem/graphics/icons/molecules/styrene.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/styrene.png rename to angelspetrochem/graphics/icons/molecules/styrene.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/sulfur-dioxide.png b/angelspetrochem/graphics/icons/molecules/sulfur-dioxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/sulfur-dioxide.png rename to angelspetrochem/graphics/icons/molecules/sulfur-dioxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/sulfuric-acid.png b/angelspetrochem/graphics/icons/molecules/sulfuric-acid.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/sulfuric-acid.png rename to angelspetrochem/graphics/icons/molecules/sulfuric-acid.png diff --git a/angelspetrochem_9.9.24/graphics/icons/molecules/urea.png b/angelspetrochem/graphics/icons/molecules/urea.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/molecules/urea.png rename to angelspetrochem/graphics/icons/molecules/urea.png diff --git a/angelspetrochem_9.9.24/graphics/icons/ore-fluorite.png b/angelspetrochem/graphics/icons/ore-fluorite.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/ore-fluorite.png rename to angelspetrochem/graphics/icons/ore-fluorite.png diff --git a/angelspetrochem_9.9.24/graphics/icons/pellet-coke.png b/angelspetrochem/graphics/icons/pellet-coke.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/pellet-coke.png rename to angelspetrochem/graphics/icons/pellet-coke.png diff --git a/angelspetrochem_9.9.24/graphics/icons/petrochem-gas-tank.png b/angelspetrochem/graphics/icons/petrochem-gas-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/petrochem-gas-tank.png rename to angelspetrochem/graphics/icons/petrochem-gas-tank.png diff --git a/angelspetrochem_9.9.24/graphics/icons/petrochem-inline-tank.png b/angelspetrochem/graphics/icons/petrochem-inline-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/petrochem-inline-tank.png rename to angelspetrochem/graphics/icons/petrochem-inline-tank.png diff --git a/angelspetrochem_9.9.24/graphics/icons/petrochem-oil-tank.png b/angelspetrochem/graphics/icons/petrochem-oil-tank.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/petrochem-oil-tank.png rename to angelspetrochem/graphics/icons/petrochem-oil-tank.png diff --git a/angelspetrochem_9.9.24/graphics/icons/polymerization-chamber-ico.png b/angelspetrochem/graphics/icons/polymerization-chamber-ico.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/polymerization-chamber-ico.png rename to angelspetrochem/graphics/icons/polymerization-chamber-ico.png diff --git a/angelspetrochem_9.9.24/graphics/icons/powder-coke.png b/angelspetrochem/graphics/icons/powder-coke.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/powder-coke.png rename to angelspetrochem/graphics/icons/powder-coke.png diff --git a/angelspetrochem_9.9.24/graphics/icons/rocket-booster.png b/angelspetrochem/graphics/icons/rocket-booster.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/rocket-booster.png rename to angelspetrochem/graphics/icons/rocket-booster.png diff --git a/angelspetrochem_9.9.24/graphics/icons/rocket-fuel-capsule.png b/angelspetrochem/graphics/icons/rocket-fuel-capsule.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/rocket-fuel-capsule.png rename to angelspetrochem/graphics/icons/rocket-fuel-capsule.png diff --git a/angelspetrochem_9.9.24/graphics/icons/rocket-fuel.png b/angelspetrochem/graphics/icons/rocket-fuel.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/rocket-fuel.png rename to angelspetrochem/graphics/icons/rocket-fuel.png diff --git a/angelspetrochem_9.9.24/graphics/icons/rocket-oxidizer-capsule.png b/angelspetrochem/graphics/icons/rocket-oxidizer-capsule.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/rocket-oxidizer-capsule.png rename to angelspetrochem/graphics/icons/rocket-oxidizer-capsule.png diff --git a/angelspetrochem_9.9.24/graphics/icons/separator.png b/angelspetrochem/graphics/icons/separator.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/separator.png rename to angelspetrochem/graphics/icons/separator.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-ammonium-nitrate.png b/angelspetrochem/graphics/icons/solid-ammonium-nitrate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-ammonium-nitrate.png rename to angelspetrochem/graphics/icons/solid-ammonium-nitrate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-ammonium-perchlorate.png b/angelspetrochem/graphics/icons/solid-ammonium-perchlorate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-ammonium-perchlorate.png rename to angelspetrochem/graphics/icons/solid-ammonium-perchlorate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-ammonium-sulphate.png b/angelspetrochem/graphics/icons/solid-ammonium-sulphate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-ammonium-sulphate.png rename to angelspetrochem/graphics/icons/solid-ammonium-sulphate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-bisphenol-a.png b/angelspetrochem/graphics/icons/solid-bisphenol-a.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-bisphenol-a.png rename to angelspetrochem/graphics/icons/solid-bisphenol-a.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-calcium-chloride.png b/angelspetrochem/graphics/icons/solid-calcium-chloride.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-calcium-chloride.png rename to angelspetrochem/graphics/icons/solid-calcium-chloride.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-calcium-sulfate.png b/angelspetrochem/graphics/icons/solid-calcium-sulfate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-calcium-sulfate.png rename to angelspetrochem/graphics/icons/solid-calcium-sulfate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-carbon.png b/angelspetrochem/graphics/icons/solid-carbon.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-carbon.png rename to angelspetrochem/graphics/icons/solid-carbon.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-coke.png b/angelspetrochem/graphics/icons/solid-coke.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-coke.png rename to angelspetrochem/graphics/icons/solid-coke.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-electrode-used.png b/angelspetrochem/graphics/icons/solid-electrode-used.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-electrode-used.png rename to angelspetrochem/graphics/icons/solid-electrode-used.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-electrode.png b/angelspetrochem/graphics/icons/solid-electrode.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-electrode.png rename to angelspetrochem/graphics/icons/solid-electrode.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-oil-residual.png b/angelspetrochem/graphics/icons/solid-oil-residual.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-oil-residual.png rename to angelspetrochem/graphics/icons/solid-oil-residual.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-resin.png b/angelspetrochem/graphics/icons/solid-resin.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-resin.png rename to angelspetrochem/graphics/icons/solid-resin.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-rubber.png b/angelspetrochem/graphics/icons/solid-rubber.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-rubber.png rename to angelspetrochem/graphics/icons/solid-rubber.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-carbonate.png b/angelspetrochem/graphics/icons/solid-sodium-carbonate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-carbonate.png rename to angelspetrochem/graphics/icons/solid-sodium-carbonate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-chlorate.png b/angelspetrochem/graphics/icons/solid-sodium-chlorate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-chlorate.png rename to angelspetrochem/graphics/icons/solid-sodium-chlorate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-cobaltate.png b/angelspetrochem/graphics/icons/solid-sodium-cobaltate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-cobaltate.png rename to angelspetrochem/graphics/icons/solid-sodium-cobaltate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-cyanide.png b/angelspetrochem/graphics/icons/solid-sodium-cyanide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-cyanide.png rename to angelspetrochem/graphics/icons/solid-sodium-cyanide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-hydroxide.png b/angelspetrochem/graphics/icons/solid-sodium-hydroxide.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-hydroxide.png rename to angelspetrochem/graphics/icons/solid-sodium-hydroxide.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-hypochlorite.png b/angelspetrochem/graphics/icons/solid-sodium-hypochlorite.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-hypochlorite.png rename to angelspetrochem/graphics/icons/solid-sodium-hypochlorite.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-nitrate.png b/angelspetrochem/graphics/icons/solid-sodium-nitrate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-nitrate.png rename to angelspetrochem/graphics/icons/solid-sodium-nitrate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-perchlorate.png b/angelspetrochem/graphics/icons/solid-sodium-perchlorate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-perchlorate.png rename to angelspetrochem/graphics/icons/solid-sodium-perchlorate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium-sulfate.png b/angelspetrochem/graphics/icons/solid-sodium-sulfate.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium-sulfate.png rename to angelspetrochem/graphics/icons/solid-sodium-sulfate.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sodium.png b/angelspetrochem/graphics/icons/solid-sodium.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sodium.png rename to angelspetrochem/graphics/icons/solid-sodium.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-sulfur.png b/angelspetrochem/graphics/icons/solid-sulfur.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-sulfur.png rename to angelspetrochem/graphics/icons/solid-sulfur.png diff --git a/angelspetrochem_9.9.24/graphics/icons/solid-tnt.png b/angelspetrochem/graphics/icons/solid-tnt.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/solid-tnt.png rename to angelspetrochem/graphics/icons/solid-tnt.png diff --git a/angelspetrochem_9.9.24/graphics/icons/steam-cracker.png b/angelspetrochem/graphics/icons/steam-cracker.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/steam-cracker.png rename to angelspetrochem/graphics/icons/steam-cracker.png diff --git a/angelspetrochem_9.9.24/graphics/icons/valve-converter.png b/angelspetrochem/graphics/icons/valve-converter.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/valve-converter.png rename to angelspetrochem/graphics/icons/valve-converter.png diff --git a/angelspetrochem_9.9.24/graphics/icons/valve-inspector.png b/angelspetrochem/graphics/icons/valve-inspector.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/valve-inspector.png rename to angelspetrochem/graphics/icons/valve-inspector.png diff --git a/angelspetrochem_9.9.24/graphics/icons/valve-overflow.png b/angelspetrochem/graphics/icons/valve-overflow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/valve-overflow.png rename to angelspetrochem/graphics/icons/valve-overflow.png diff --git a/angelspetrochem_9.9.24/graphics/icons/valve-return.png b/angelspetrochem/graphics/icons/valve-return.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/valve-return.png rename to angelspetrochem/graphics/icons/valve-return.png diff --git a/angelspetrochem_9.9.24/graphics/icons/valve-underflow.png b/angelspetrochem/graphics/icons/valve-underflow.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/icons/valve-underflow.png rename to angelspetrochem/graphics/icons/valve-underflow.png diff --git a/angelspetrochem_9.9.24/graphics/technology/advanced-chemical-plant-tech.png b/angelspetrochem/graphics/technology/advanced-chemical-plant-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/advanced-chemical-plant-tech.png rename to angelspetrochem/graphics/technology/advanced-chemical-plant-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/advanced-gas-refinery-tech.png b/angelspetrochem/graphics/technology/advanced-gas-refinery-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/advanced-gas-refinery-tech.png rename to angelspetrochem/graphics/technology/advanced-gas-refinery-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/air-filter-tech.png b/angelspetrochem/graphics/technology/air-filter-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/air-filter-tech.png rename to angelspetrochem/graphics/technology/air-filter-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/booster-tech.png b/angelspetrochem/graphics/technology/booster-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/booster-tech.png rename to angelspetrochem/graphics/technology/booster-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/chemical-plant-tech.png b/angelspetrochem/graphics/technology/chemical-plant-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/chemical-plant-tech.png rename to angelspetrochem/graphics/technology/chemical-plant-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/electric-boiler-tech.png b/angelspetrochem/graphics/technology/electric-boiler-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/electric-boiler-tech.png rename to angelspetrochem/graphics/technology/electric-boiler-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/electrolyser-tech.png b/angelspetrochem/graphics/technology/electrolyser-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/electrolyser-tech.png rename to angelspetrochem/graphics/technology/electrolyser-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/flare-stack-tech.png b/angelspetrochem/graphics/technology/flare-stack-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/flare-stack-tech.png rename to angelspetrochem/graphics/technology/flare-stack-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/fluid-splitter-tech.png b/angelspetrochem/graphics/technology/fluid-splitter-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/fluid-splitter-tech.png rename to angelspetrochem/graphics/technology/fluid-splitter-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/gas-refinery-tech.png b/angelspetrochem/graphics/technology/gas-refinery-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/gas-refinery-tech.png rename to angelspetrochem/graphics/technology/gas-refinery-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/nuclear-fuel.png b/angelspetrochem/graphics/technology/nuclear-fuel.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/nuclear-fuel.png rename to angelspetrochem/graphics/technology/nuclear-fuel.png diff --git a/angelspetrochem_9.9.24/graphics/technology/petrochem.png b/angelspetrochem/graphics/technology/petrochem.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/petrochem.png rename to angelspetrochem/graphics/technology/petrochem.png diff --git a/angelspetrochem_9.9.24/graphics/technology/plastic-1-tech.png b/angelspetrochem/graphics/technology/plastic-1-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/plastic-1-tech.png rename to angelspetrochem/graphics/technology/plastic-1-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/plastic-2-tech.png b/angelspetrochem/graphics/technology/plastic-2-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/plastic-2-tech.png rename to angelspetrochem/graphics/technology/plastic-2-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/plastic-3-tech.png b/angelspetrochem/graphics/technology/plastic-3-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/plastic-3-tech.png rename to angelspetrochem/graphics/technology/plastic-3-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/polymerization-chamber-tech.png b/angelspetrochem/graphics/technology/polymerization-chamber-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/polymerization-chamber-tech.png rename to angelspetrochem/graphics/technology/polymerization-chamber-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/resins-tech.png b/angelspetrochem/graphics/technology/resins-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/resins-tech.png rename to angelspetrochem/graphics/technology/resins-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/rubbers-tech.png b/angelspetrochem/graphics/technology/rubbers-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/rubbers-tech.png rename to angelspetrochem/graphics/technology/rubbers-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/separator-tech.png b/angelspetrochem/graphics/technology/separator-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/separator-tech.png rename to angelspetrochem/graphics/technology/separator-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/sodium-tech-1.png b/angelspetrochem/graphics/technology/sodium-tech-1.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/sodium-tech-1.png rename to angelspetrochem/graphics/technology/sodium-tech-1.png diff --git a/angelspetrochem_9.9.24/graphics/technology/sodium-tech.png b/angelspetrochem/graphics/technology/sodium-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/sodium-tech.png rename to angelspetrochem/graphics/technology/sodium-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/steam-cracker-tech.png b/angelspetrochem/graphics/technology/steam-cracker-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/steam-cracker-tech.png rename to angelspetrochem/graphics/technology/steam-cracker-tech.png diff --git a/angelspetrochem_9.9.24/graphics/technology/tnt-tech.png b/angelspetrochem/graphics/technology/tnt-tech.png similarity index 100% rename from angelspetrochem_9.9.24/graphics/technology/tnt-tech.png rename to angelspetrochem/graphics/technology/tnt-tech.png diff --git a/angelspetrochem/info.json b/angelspetrochem/info.json new file mode 100644 index 00000000..c6a6cc8a --- /dev/null +++ b/angelspetrochem/info.json @@ -0,0 +1,16 @@ +{ + "name": "angelspetrochem", + "version": "0.9.26", + "factorio_version": "1.1", + "title": "Angel's Petrochemical Processing", + "author": "Arch666Angel", + "contact": "https://discord.gg/ff5p6KE", + "homepage": "https://forums.factorio.com/viewforum.php?f=185", + "description": "Angel's Petrochemical processing changes Oil processing and adds Gas processing, as well as a more complex web of chemical production. Includes overrides and tie-ins to Bob's technologies and recipes. Dependencies: Angel's Refining", + "dependencies": [ + "angelsrefining >= 0.12.1", + "? bobplates >= 1.1.6", + "? bobassembly >= 1.1.5", + "? bobrevamp >= 1.1.5" + ] +} diff --git a/angelspetrochem_9.9.24/license CC BY-NC-ND 4.0.txt b/angelspetrochem/license CC BY-NC-ND 4.0.txt similarity index 100% rename from angelspetrochem_9.9.24/license CC BY-NC-ND 4.0.txt rename to angelspetrochem/license CC BY-NC-ND 4.0.txt diff --git a/angelspetrochem_9.9.24/locale/en/petrochem.cfg b/angelspetrochem/locale/en/petrochem.cfg similarity index 100% rename from angelspetrochem_9.9.24/locale/en/petrochem.cfg rename to angelspetrochem/locale/en/petrochem.cfg diff --git a/angelspetrochem_9.9.24/locale/en/tips-and-tricks.cfg b/angelspetrochem/locale/en/tips-and-tricks.cfg similarity index 100% rename from angelspetrochem_9.9.24/locale/en/tips-and-tricks.cfg rename to angelspetrochem/locale/en/tips-and-tricks.cfg diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.13.lua b/angelspetrochem/migrations/angelspetrochem_0.9.13.lua similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.13.lua rename to angelspetrochem/migrations/angelspetrochem_0.9.13.lua diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.14.json b/angelspetrochem/migrations/angelspetrochem_0.9.14.json similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.14.json rename to angelspetrochem/migrations/angelspetrochem_0.9.14.json diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.15.json b/angelspetrochem/migrations/angelspetrochem_0.9.15.json similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.15.json rename to angelspetrochem/migrations/angelspetrochem_0.9.15.json diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.15.lua b/angelspetrochem/migrations/angelspetrochem_0.9.15.lua similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.15.lua rename to angelspetrochem/migrations/angelspetrochem_0.9.15.lua diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.16.lua b/angelspetrochem/migrations/angelspetrochem_0.9.16.lua similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.16.lua rename to angelspetrochem/migrations/angelspetrochem_0.9.16.lua diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.6.lua b/angelspetrochem/migrations/angelspetrochem_0.9.6.lua similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.6.lua rename to angelspetrochem/migrations/angelspetrochem_0.9.6.lua diff --git a/angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.9.lua b/angelspetrochem/migrations/angelspetrochem_0.9.9.lua similarity index 100% rename from angelspetrochem_9.9.24/migrations/angelspetrochem_0.9.9.lua rename to angelspetrochem/migrations/angelspetrochem_0.9.9.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/advanced-chemical-plant.lua b/angelspetrochem/prototypes/buildings/advanced-chemical-plant.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/advanced-chemical-plant.lua rename to angelspetrochem/prototypes/buildings/advanced-chemical-plant.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/advanced-gas-refinery.lua b/angelspetrochem/prototypes/buildings/advanced-gas-refinery.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/advanced-gas-refinery.lua rename to angelspetrochem/prototypes/buildings/advanced-gas-refinery.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/air-filter.lua b/angelspetrochem/prototypes/buildings/air-filter.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/air-filter.lua rename to angelspetrochem/prototypes/buildings/air-filter.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/chemical-plant.lua b/angelspetrochem/prototypes/buildings/chemical-plant.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/chemical-plant.lua rename to angelspetrochem/prototypes/buildings/chemical-plant.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/electric-boiler.lua b/angelspetrochem/prototypes/buildings/electric-boiler.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/electric-boiler.lua rename to angelspetrochem/prototypes/buildings/electric-boiler.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/electrolyser.lua b/angelspetrochem/prototypes/buildings/electrolyser.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/electrolyser.lua rename to angelspetrochem/prototypes/buildings/electrolyser.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/flare-stack.lua b/angelspetrochem/prototypes/buildings/flare-stack.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/flare-stack.lua rename to angelspetrochem/prototypes/buildings/flare-stack.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/fluid-splitter.lua b/angelspetrochem/prototypes/buildings/fluid-splitter.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/fluid-splitter.lua rename to angelspetrochem/prototypes/buildings/fluid-splitter.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/gas-refinery.lua b/angelspetrochem/prototypes/buildings/gas-refinery.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/gas-refinery.lua rename to angelspetrochem/prototypes/buildings/gas-refinery.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/heavy-pump.lua b/angelspetrochem/prototypes/buildings/heavy-pump.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/heavy-pump.lua rename to angelspetrochem/prototypes/buildings/heavy-pump.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/oil-refinery.lua b/angelspetrochem/prototypes/buildings/oil-refinery.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/oil-refinery.lua rename to angelspetrochem/prototypes/buildings/oil-refinery.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/pipes-overlay.lua b/angelspetrochem/prototypes/buildings/pipes-overlay.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/pipes-overlay.lua rename to angelspetrochem/prototypes/buildings/pipes-overlay.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/separator.lua b/angelspetrochem/prototypes/buildings/separator.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/separator.lua rename to angelspetrochem/prototypes/buildings/separator.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/steam-cracker.lua b/angelspetrochem/prototypes/buildings/steam-cracker.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/steam-cracker.lua rename to angelspetrochem/prototypes/buildings/steam-cracker.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/storage-tanks.lua b/angelspetrochem/prototypes/buildings/storage-tanks.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/storage-tanks.lua rename to angelspetrochem/prototypes/buildings/storage-tanks.lua diff --git a/angelspetrochem_9.9.24/prototypes/buildings/valves.lua b/angelspetrochem/prototypes/buildings/valves.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/buildings/valves.lua rename to angelspetrochem/prototypes/buildings/valves.lua diff --git a/angelspetrochem_9.9.24/prototypes/generation/angels-natural-gas.lua b/angelspetrochem/prototypes/generation/angels-natural-gas.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/generation/angels-natural-gas.lua rename to angelspetrochem/prototypes/generation/angels-natural-gas.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/angelsrefining.lua b/angelspetrochem/prototypes/global-override/angelsrefining.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/angelsrefining.lua rename to angelspetrochem/prototypes/global-override/angelsrefining.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/base-game.lua b/angelspetrochem/prototypes/global-override/base-game.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/base-game.lua rename to angelspetrochem/prototypes/global-override/base-game.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobassembly.lua b/angelspetrochem/prototypes/global-override/bobassembly.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobassembly.lua rename to angelspetrochem/prototypes/global-override/bobassembly.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobgreenhouse.lua b/angelspetrochem/prototypes/global-override/bobgreenhouse.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobgreenhouse.lua rename to angelspetrochem/prototypes/global-override/bobgreenhouse.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/boblogistics.lua b/angelspetrochem/prototypes/global-override/boblogistics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/boblogistics.lua rename to angelspetrochem/prototypes/global-override/boblogistics.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobplates.lua b/angelspetrochem/prototypes/global-override/bobplates.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobplates.lua rename to angelspetrochem/prototypes/global-override/bobplates.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobrevamp.lua b/angelspetrochem/prototypes/global-override/bobrevamp.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobrevamp.lua rename to angelspetrochem/prototypes/global-override/bobrevamp.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobtech.lua b/angelspetrochem/prototypes/global-override/bobtech.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobtech.lua rename to angelspetrochem/prototypes/global-override/bobtech.lua diff --git a/angelspetrochem_9.9.24/prototypes/global-override/bobwarfare.lua b/angelspetrochem/prototypes/global-override/bobwarfare.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/global-override/bobwarfare.lua rename to angelspetrochem/prototypes/global-override/bobwarfare.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-basics.lua b/angelspetrochem/prototypes/items/petrochem-basics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-basics.lua rename to angelspetrochem/prototypes/items/petrochem-basics.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-carbons.lua b/angelspetrochem/prototypes/items/petrochem-carbons.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-carbons.lua rename to angelspetrochem/prototypes/items/petrochem-carbons.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-chlorine.lua b/angelspetrochem/prototypes/items/petrochem-chlorine.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-chlorine.lua rename to angelspetrochem/prototypes/items/petrochem-chlorine.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-nitrogen.lua b/angelspetrochem/prototypes/items/petrochem-nitrogen.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-nitrogen.lua rename to angelspetrochem/prototypes/items/petrochem-nitrogen.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-raws.lua b/angelspetrochem/prototypes/items/petrochem-raws.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-raws.lua rename to angelspetrochem/prototypes/items/petrochem-raws.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-solids.lua b/angelspetrochem/prototypes/items/petrochem-solids.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-solids.lua rename to angelspetrochem/prototypes/items/petrochem-solids.lua diff --git a/angelspetrochem_9.9.24/prototypes/items/petrochem-sulfur.lua b/angelspetrochem/prototypes/items/petrochem-sulfur.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/items/petrochem-sulfur.lua rename to angelspetrochem/prototypes/items/petrochem-sulfur.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/angelsindustries.lua b/angelspetrochem/prototypes/override/angelsindustries.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/angelsindustries.lua rename to angelspetrochem/prototypes/override/angelsindustries.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/angelspetrochem.lua b/angelspetrochem/prototypes/override/angelspetrochem.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/angelspetrochem.lua rename to angelspetrochem/prototypes/override/angelspetrochem.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/angelsrefining.lua b/angelspetrochem/prototypes/override/angelsrefining.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/angelsrefining.lua rename to angelspetrochem/prototypes/override/angelsrefining.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/angelssmelting.lua b/angelspetrochem/prototypes/override/angelssmelting.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/angelssmelting.lua rename to angelspetrochem/prototypes/override/angelssmelting.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/base-game.lua b/angelspetrochem/prototypes/override/base-game.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/base-game.lua rename to angelspetrochem/prototypes/override/base-game.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobassembly.lua b/angelspetrochem/prototypes/override/bobassembly.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobassembly.lua rename to angelspetrochem/prototypes/override/bobassembly.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobclasses.lua b/angelspetrochem/prototypes/override/bobclasses.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobclasses.lua rename to angelspetrochem/prototypes/override/bobclasses.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobelectronics.lua b/angelspetrochem/prototypes/override/bobelectronics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobelectronics.lua rename to angelspetrochem/prototypes/override/bobelectronics.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobgreenhouse.lua b/angelspetrochem/prototypes/override/bobgreenhouse.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobgreenhouse.lua rename to angelspetrochem/prototypes/override/bobgreenhouse.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/boblogistics.lua b/angelspetrochem/prototypes/override/boblogistics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/boblogistics.lua rename to angelspetrochem/prototypes/override/boblogistics.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobplates.lua b/angelspetrochem/prototypes/override/bobplates.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobplates.lua rename to angelspetrochem/prototypes/override/bobplates.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobrevamp.lua b/angelspetrochem/prototypes/override/bobrevamp.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobrevamp.lua rename to angelspetrochem/prototypes/override/bobrevamp.lua diff --git a/angelspetrochem_9.9.24/prototypes/override/bobwarfare.lua b/angelspetrochem/prototypes/override/bobwarfare.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/override/bobwarfare.lua rename to angelspetrochem/prototypes/override/bobwarfare.lua diff --git a/angelspetrochem_9.9.24/prototypes/petrochem-category.lua b/angelspetrochem/prototypes/petrochem-category.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/petrochem-category.lua rename to angelspetrochem/prototypes/petrochem-category.lua diff --git a/angelspetrochem_9.9.24/prototypes/petrochem-generate.lua b/angelspetrochem/prototypes/petrochem-generate.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/petrochem-generate.lua rename to angelspetrochem/prototypes/petrochem-generate.lua diff --git a/angelspetrochem_9.9.24/prototypes/petrochem-global-override.lua b/angelspetrochem/prototypes/petrochem-global-override.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/petrochem-global-override.lua rename to angelspetrochem/prototypes/petrochem-global-override.lua diff --git a/angelspetrochem_9.9.24/prototypes/petrochem-override.lua b/angelspetrochem/prototypes/petrochem-override.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/petrochem-override.lua rename to angelspetrochem/prototypes/petrochem-override.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-basics.lua b/angelspetrochem/prototypes/recipes/petrochem-basics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-basics.lua rename to angelspetrochem/prototypes/recipes/petrochem-basics.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-carbons.lua b/angelspetrochem/prototypes/recipes/petrochem-carbons.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-carbons.lua rename to angelspetrochem/prototypes/recipes/petrochem-carbons.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-chlorine.lua b/angelspetrochem/prototypes/recipes/petrochem-chlorine.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-chlorine.lua rename to angelspetrochem/prototypes/recipes/petrochem-chlorine.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-entity-angels.lua b/angelspetrochem/prototypes/recipes/petrochem-entity-angels.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-entity-angels.lua rename to angelspetrochem/prototypes/recipes/petrochem-entity-angels.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-entity.lua b/angelspetrochem/prototypes/recipes/petrochem-entity.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-entity.lua rename to angelspetrochem/prototypes/recipes/petrochem-entity.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-nitrogen.lua b/angelspetrochem/prototypes/recipes/petrochem-nitrogen.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-nitrogen.lua rename to angelspetrochem/prototypes/recipes/petrochem-nitrogen.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-sodium.lua b/angelspetrochem/prototypes/recipes/petrochem-sodium.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-sodium.lua rename to angelspetrochem/prototypes/recipes/petrochem-sodium.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-solids.lua b/angelspetrochem/prototypes/recipes/petrochem-solids.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-solids.lua rename to angelspetrochem/prototypes/recipes/petrochem-solids.lua diff --git a/angelspetrochem_9.9.24/prototypes/recipes/petrochem-sulfur.lua b/angelspetrochem/prototypes/recipes/petrochem-sulfur.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/recipes/petrochem-sulfur.lua rename to angelspetrochem/prototypes/recipes/petrochem-sulfur.lua diff --git a/angelspetrochem_9.9.24/prototypes/technology/petrochem-basic-chemistry.lua b/angelspetrochem/prototypes/technology/petrochem-basic-chemistry.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/technology/petrochem-basic-chemistry.lua rename to angelspetrochem/prototypes/technology/petrochem-basic-chemistry.lua diff --git a/angelspetrochem_9.9.24/prototypes/technology/petrochem-basics.lua b/angelspetrochem/prototypes/technology/petrochem-basics.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/technology/petrochem-basics.lua rename to angelspetrochem/prototypes/technology/petrochem-basics.lua diff --git a/angelspetrochem_9.9.24/prototypes/technology/petrochem-petro-chemistry.lua b/angelspetrochem/prototypes/technology/petrochem-petro-chemistry.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/technology/petrochem-petro-chemistry.lua rename to angelspetrochem/prototypes/technology/petrochem-petro-chemistry.lua diff --git a/angelspetrochem_9.9.24/prototypes/technology/petrochem-solids.lua b/angelspetrochem/prototypes/technology/petrochem-solids.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/technology/petrochem-solids.lua rename to angelspetrochem/prototypes/technology/petrochem-solids.lua diff --git a/angelspetrochem_9.9.24/prototypes/technology/petrochem-weaponary.lua b/angelspetrochem/prototypes/technology/petrochem-weaponary.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/technology/petrochem-weaponary.lua rename to angelspetrochem/prototypes/technology/petrochem-weaponary.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering-description.lua b/angelspetrochem/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering-description.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering-description.lua rename to angelspetrochem/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering-description.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering.lua b/angelspetrochem/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering.lua rename to angelspetrochem/prototypes/tips-and-tricks/1-1-petrochem-air-filtering/1-1-petrochem-air-filtering.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem-description.lua b/angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem-description.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem-description.lua rename to angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem-description.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem-simulation.lua b/angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem-simulation.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem-simulation.lua rename to angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem-simulation.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem.lua b/angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/1-petrochem/1-petrochem.lua rename to angelspetrochem/prototypes/tips-and-tricks/1-petrochem/1-petrochem.lua diff --git a/angelspetrochem_9.9.24/prototypes/tips-and-tricks/tips-and-tricks.lua b/angelspetrochem/prototypes/tips-and-tricks/tips-and-tricks.lua similarity index 100% rename from angelspetrochem_9.9.24/prototypes/tips-and-tricks/tips-and-tricks.lua rename to angelspetrochem/prototypes/tips-and-tricks/tips-and-tricks.lua diff --git a/angelspetrochem_9.9.24/settings-updates.lua b/angelspetrochem/settings-updates.lua similarity index 100% rename from angelspetrochem_9.9.24/settings-updates.lua rename to angelspetrochem/settings-updates.lua diff --git a/angelspetrochem_9.9.24/settings.lua b/angelspetrochem/settings.lua similarity index 100% rename from angelspetrochem_9.9.24/settings.lua rename to angelspetrochem/settings.lua diff --git a/angelspetrochem_9.9.24/sound/electrolyser.ogg b/angelspetrochem/sound/electrolyser.ogg similarity index 100% rename from angelspetrochem_9.9.24/sound/electrolyser.ogg rename to angelspetrochem/sound/electrolyser.ogg diff --git a/angelspetrochem_9.9.24/sound/gas-refinery.ogg b/angelspetrochem/sound/gas-refinery.ogg similarity index 100% rename from angelspetrochem_9.9.24/sound/gas-refinery.ogg rename to angelspetrochem/sound/gas-refinery.ogg diff --git a/angelspetrochem_9.9.24/sound/separator.ogg b/angelspetrochem/sound/separator.ogg similarity index 100% rename from angelspetrochem_9.9.24/sound/separator.ogg rename to angelspetrochem/sound/separator.ogg diff --git a/angelspetrochem_9.9.24/sound/steam-cracker.ogg b/angelspetrochem/sound/steam-cracker.ogg similarity index 100% rename from angelspetrochem_9.9.24/sound/steam-cracker.ogg rename to angelspetrochem/sound/steam-cracker.ogg diff --git a/angelspetrochem_9.9.24/thumbnail.png b/angelspetrochem/thumbnail.png similarity index 100% rename from angelspetrochem_9.9.24/thumbnail.png rename to angelspetrochem/thumbnail.png diff --git a/angelspetrochem_9.9.24/info.json b/angelspetrochem_9.9.24/info.json deleted file mode 100644 index 46a63d40..00000000 --- a/angelspetrochem_9.9.24/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "angelspetrochem", - "version": "9.9.24", - "factorio_version": "1.1", - "title": "Angel's Petrochemical Processing", - "author": "Arch666Angel", - "contact": "https://discord.gg/ff5p6KE", - "homepage": "https://forums.factorio.com/viewforum.php?f=185", - "description": "Angel's Petrochemical processing changes Oil processing and adds Gas processing, as well as a more complex web of chemical production. Includes overrides and tie-ins to Bob's technologies and recipes. Dependencies: Angel's Refining", - "dependencies": [ - "angelsrefining >= 0.12.1", - "? bobplates >= 1.1.6", - "? bobassembly >= 1.1.5", - "? bobrevamp >= 1.1.5" - ] -} diff --git a/angelsrefining_9.12.4/changelog.txt b/angelsrefining/changelog.txt similarity index 100% rename from angelsrefining_9.12.4/changelog.txt rename to angelsrefining/changelog.txt diff --git a/angelsrefining_9.12.4/control.lua b/angelsrefining/control.lua similarity index 100% rename from angelsrefining_9.12.4/control.lua rename to angelsrefining/control.lua diff --git a/angelsrefining_9.12.4/data-final-fixes.lua b/angelsrefining/data-final-fixes.lua similarity index 100% rename from angelsrefining_9.12.4/data-final-fixes.lua rename to angelsrefining/data-final-fixes.lua diff --git a/angelsrefining_9.12.4/data-updates.lua b/angelsrefining/data-updates.lua similarity index 100% rename from angelsrefining_9.12.4/data-updates.lua rename to angelsrefining/data-updates.lua diff --git a/angelsrefining_9.12.4/data.lua b/angelsrefining/data.lua similarity index 100% rename from angelsrefining_9.12.4/data.lua rename to angelsrefining/data.lua diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-base.png b/angelsrefining/graphics/barrel/barrel-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-base.png rename to angelsrefining/graphics/barrel/barrel-base.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-empty-base.png b/angelsrefining/graphics/barrel/barrel-empty-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-empty-base.png rename to angelsrefining/graphics/barrel/barrel-empty-base.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-empty-overlay.png b/angelsrefining/graphics/barrel/barrel-empty-overlay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-empty-overlay.png rename to angelsrefining/graphics/barrel/barrel-empty-overlay.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-empty.png b/angelsrefining/graphics/barrel/barrel-empty.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-empty.png rename to angelsrefining/graphics/barrel/barrel-empty.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-emptying.png b/angelsrefining/graphics/barrel/barrel-emptying.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-emptying.png rename to angelsrefining/graphics/barrel/barrel-emptying.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-fill.png b/angelsrefining/graphics/barrel/barrel-fill.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-fill.png rename to angelsrefining/graphics/barrel/barrel-fill.png diff --git a/angelsrefining_9.12.4/graphics/barrel/barrel-overlay.png b/angelsrefining/graphics/barrel/barrel-overlay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/barrel/barrel-overlay.png rename to angelsrefining/graphics/barrel/barrel-overlay.png diff --git a/angelsrefining_9.12.4/graphics/entity/barreling-pump/barreling-pump-animation.png b/angelsrefining/graphics/entity/barreling-pump/barreling-pump-animation.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/barreling-pump/barreling-pump-animation.png rename to angelsrefining/graphics/entity/barreling-pump/barreling-pump-animation.png diff --git a/angelsrefining_9.12.4/graphics/entity/barreling-pump/barreling-pump.png b/angelsrefining/graphics/entity/barreling-pump/barreling-pump.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/barreling-pump/barreling-pump.png rename to angelsrefining/graphics/entity/barreling-pump/barreling-pump.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-base.png b/angelsrefining/graphics/entity/clarifier/clarifier-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-base.png rename to angelsrefining/graphics/entity/clarifier/clarifier-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-pipe-connections.png b/angelsrefining/graphics/entity/clarifier/clarifier-pipe-connections.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-pipe-connections.png rename to angelsrefining/graphics/entity/clarifier/clarifier-pipe-connections.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-recipe-mask.png b/angelsrefining/graphics/entity/clarifier/clarifier-recipe-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-recipe-mask.png rename to angelsrefining/graphics/entity/clarifier/clarifier-recipe-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-shadow.png b/angelsrefining/graphics/entity/clarifier/clarifier-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/clarifier-shadow.png rename to angelsrefining/graphics/entity/clarifier/clarifier-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-base.png b/angelsrefining/graphics/entity/clarifier/hr-clarifier-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-base.png rename to angelsrefining/graphics/entity/clarifier/hr-clarifier-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-pipe-connections.png b/angelsrefining/graphics/entity/clarifier/hr-clarifier-pipe-connections.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-pipe-connections.png rename to angelsrefining/graphics/entity/clarifier/hr-clarifier-pipe-connections.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-recipe-mask.png b/angelsrefining/graphics/entity/clarifier/hr-clarifier-recipe-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-recipe-mask.png rename to angelsrefining/graphics/entity/clarifier/hr-clarifier-recipe-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-shadow.png b/angelsrefining/graphics/entity/clarifier/hr-clarifier-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/hr-clarifier-shadow.png rename to angelsrefining/graphics/entity/clarifier/hr-clarifier-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/hr-vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/clarifier/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/hr-vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/clarifier/hr-vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/clarifier/vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/clarifier/vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/clarifier/vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/clarifier/vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-icon-base.png b/angelsrefining/graphics/entity/crystallizer/crystallizer-icon-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-icon-base.png rename to angelsrefining/graphics/entity/crystallizer/crystallizer-icon-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-pipe-connection.png b/angelsrefining/graphics/entity/crystallizer/crystallizer-pipe-connection.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-pipe-connection.png rename to angelsrefining/graphics/entity/crystallizer/crystallizer-pipe-connection.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-shadow.png b/angelsrefining/graphics/entity/crystallizer/crystallizer-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer-shadow.png rename to angelsrefining/graphics/entity/crystallizer/crystallizer-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer.png b/angelsrefining/graphics/entity/crystallizer/crystallizer.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/crystallizer.png rename to angelsrefining/graphics/entity/crystallizer/crystallizer.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer-pipe-connection.png b/angelsrefining/graphics/entity/crystallizer/hr-crystallizer-pipe-connection.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer-pipe-connection.png rename to angelsrefining/graphics/entity/crystallizer/hr-crystallizer-pipe-connection.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer-shadow.png b/angelsrefining/graphics/entity/crystallizer/hr-crystallizer-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer-shadow.png rename to angelsrefining/graphics/entity/crystallizer/hr-crystallizer-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer.png b/angelsrefining/graphics/entity/crystallizer/hr-crystallizer.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/crystallizer/hr-crystallizer.png rename to angelsrefining/graphics/entity/crystallizer/hr-crystallizer.png diff --git a/angelsrefining_9.12.4/graphics/entity/electro-whinning-cell/electro-whinning-cell.png b/angelsrefining/graphics/entity/electro-whinning-cell/electro-whinning-cell.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/electro-whinning-cell/electro-whinning-cell.png rename to angelsrefining/graphics/entity/electro-whinning-cell/electro-whinning-cell.png diff --git a/angelsrefining_9.12.4/graphics/entity/filtration-unit/filtration-unit.png b/angelsrefining/graphics/entity/filtration-unit/filtration-unit.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/filtration-unit/filtration-unit.png rename to angelsrefining/graphics/entity/filtration-unit/filtration-unit.png diff --git a/angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-east.png b/angelsrefining/graphics/entity/filtration-unit/pipe-east.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-east.png rename to angelsrefining/graphics/entity/filtration-unit/pipe-east.png diff --git a/angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-north.png b/angelsrefining/graphics/entity/filtration-unit/pipe-north.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-north.png rename to angelsrefining/graphics/entity/filtration-unit/pipe-north.png diff --git a/angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-south.png b/angelsrefining/graphics/entity/filtration-unit/pipe-south.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-south.png rename to angelsrefining/graphics/entity/filtration-unit/pipe-south.png diff --git a/angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-west.png b/angelsrefining/graphics/entity/filtration-unit/pipe-west.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/filtration-unit/pipe-west.png rename to angelsrefining/graphics/entity/filtration-unit/pipe-west.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/blank.png b/angelsrefining/graphics/entity/hydro-plant/blank.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/blank.png rename to angelsrefining/graphics/entity/hydro-plant/blank.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-base.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-base.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-dynamo.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-dynamo.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-dynamo.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-dynamo.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-fan.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-fan.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-fan.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-fan.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-highlights.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-highlights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-highlights.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-highlights.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-mask.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-mask.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-pipe-connections.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-pipe-connections.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-pipe-connections.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-pipe-connections.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-shadow.png b/angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-hydro-plant-shadow.png rename to angelsrefining/graphics/entity/hydro-plant/hr-hydro-plant-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/hydro-plant/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hr-vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/hydro-plant/hr-vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-base.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-base.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-dynamo.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-dynamo.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-dynamo.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-dynamo.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-fan.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-fan.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-fan.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-fan.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-highlights.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-highlights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-highlights.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-highlights.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-mask.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-mask.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-pipe-connections.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-pipe-connections.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-pipe-connections.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-pipe-connections.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-shadow.png b/angelsrefining/graphics/entity/hydro-plant/hydro-plant-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/hydro-plant-shadow.png rename to angelsrefining/graphics/entity/hydro-plant/hydro-plant-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-east1.png b/angelsrefining/graphics/entity/hydro-plant/pipe-east1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-east1.png rename to angelsrefining/graphics/entity/hydro-plant/pipe-east1.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-east2.png b/angelsrefining/graphics/entity/hydro-plant/pipe-east2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-east2.png rename to angelsrefining/graphics/entity/hydro-plant/pipe-east2.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-north1.png b/angelsrefining/graphics/entity/hydro-plant/pipe-north1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-north1.png rename to angelsrefining/graphics/entity/hydro-plant/pipe-north1.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-north2.png b/angelsrefining/graphics/entity/hydro-plant/pipe-north2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-north2.png rename to angelsrefining/graphics/entity/hydro-plant/pipe-north2.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-south1.png b/angelsrefining/graphics/entity/hydro-plant/pipe-south1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/pipe-south1.png rename to angelsrefining/graphics/entity/hydro-plant/pipe-south1.png diff --git a/angelsrefining_9.12.4/graphics/entity/hydro-plant/vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/hydro-plant/vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/hydro-plant/vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/hydro-plant/vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/liquifier/liquifier.png b/angelsrefining/graphics/entity/liquifier/liquifier.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/liquifier/liquifier.png rename to angelsrefining/graphics/entity/liquifier/liquifier.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-crusher/hr-ore-crusher-base.png b/angelsrefining/graphics/entity/ore-crusher/hr-ore-crusher-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-crusher/hr-ore-crusher-base.png rename to angelsrefining/graphics/entity/ore-crusher/hr-ore-crusher-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-crusher/hr-ore-crusher-shadow.png b/angelsrefining/graphics/entity/ore-crusher/hr-ore-crusher-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-crusher/hr-ore-crusher-shadow.png rename to angelsrefining/graphics/entity/ore-crusher/hr-ore-crusher-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-crusher/ore-crusher-base.png b/angelsrefining/graphics/entity/ore-crusher/ore-crusher-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-crusher/ore-crusher-base.png rename to angelsrefining/graphics/entity/ore-crusher/ore-crusher-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-crusher/ore-crusher-shadow.png b/angelsrefining/graphics/entity/ore-crusher/ore-crusher-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-crusher/ore-crusher-shadow.png rename to angelsrefining/graphics/entity/ore-crusher/ore-crusher-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-base.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-base.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-froth-tintable.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-froth-tintable.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-froth-tintable.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-froth-tintable.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-idle.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-idle.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-idle.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-idle.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-water-tintable.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-water-tintable.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-water-tintable.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-animation-water-tintable.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-base.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-base.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-highlights.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-highlights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-highlights.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-highlights.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-mask.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-mask.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-pipe-cover-overlays.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-pipe-cover-overlays.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-pipe-cover-overlays.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-pipe-cover-overlays.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-shadow.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-shadow.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-ore-flotation-cell-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/ore-floatation-cell/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/hr-vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/ore-floatation-cell/hr-vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-base.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-base.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-froth-tintable.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-froth-tintable.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-froth-tintable.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-froth-tintable.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-idle.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-idle.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-idle.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-idle.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-water-tintable.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-water-tintable.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-water-tintable.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-animation-water-tintable.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-base.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-base.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-highlights.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-highlights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-highlights.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-highlights.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-mask.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-mask.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-mask.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-pipe-cover-overlays.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-pipe-cover-overlays.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-pipe-cover-overlays.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-pipe-cover-overlays.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-shadow.png b/angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/ore-flotation-cell-shadow.png rename to angelsrefining/graphics/entity/ore-floatation-cell/ore-flotation-cell-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-east.png b/angelsrefining/graphics/entity/ore-floatation-cell/pipe-east.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-east.png rename to angelsrefining/graphics/entity/ore-floatation-cell/pipe-east.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-north.png b/angelsrefining/graphics/entity/ore-floatation-cell/pipe-north.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-north.png rename to angelsrefining/graphics/entity/ore-floatation-cell/pipe-north.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-south.png b/angelsrefining/graphics/entity/ore-floatation-cell/pipe-south.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-south.png rename to angelsrefining/graphics/entity/ore-floatation-cell/pipe-south.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-west.png b/angelsrefining/graphics/entity/ore-floatation-cell/pipe-west.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/pipe-west.png rename to angelsrefining/graphics/entity/ore-floatation-cell/pipe-west.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/vertical-pipe-shadow-patch.png b/angelsrefining/graphics/entity/ore-floatation-cell/vertical-pipe-shadow-patch.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-floatation-cell/vertical-pipe-shadow-patch.png rename to angelsrefining/graphics/entity/ore-floatation-cell/vertical-pipe-shadow-patch.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/1ore-leaching-plant.png b/angelsrefining/graphics/entity/ore-leaching-plant/1ore-leaching-plant.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/1ore-leaching-plant.png rename to angelsrefining/graphics/entity/ore-leaching-plant/1ore-leaching-plant.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/2ore-leaching-plant-overlay.png b/angelsrefining/graphics/entity/ore-leaching-plant/2ore-leaching-plant-overlay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/2ore-leaching-plant-overlay.png rename to angelsrefining/graphics/entity/ore-leaching-plant/2ore-leaching-plant-overlay.png diff --git a/Big-Monsters_1.4.0/graphics/empty.png b/angelsrefining/graphics/entity/ore-leaching-plant/empty.png similarity index 100% rename from Big-Monsters_1.4.0/graphics/empty.png rename to angelsrefining/graphics/entity/ore-leaching-plant/empty.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/pipe-east.png b/angelsrefining/graphics/entity/ore-leaching-plant/pipe-east.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/pipe-east.png rename to angelsrefining/graphics/entity/ore-leaching-plant/pipe-east.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/pipe-south.png b/angelsrefining/graphics/entity/ore-leaching-plant/pipe-south.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/pipe-south.png rename to angelsrefining/graphics/entity/ore-leaching-plant/pipe-south.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-powderizer/powderizer-hr.png b/angelsrefining/graphics/entity/ore-powderizer/powderizer-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-powderizer/powderizer-hr.png rename to angelsrefining/graphics/entity/ore-powderizer/powderizer-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-powderizer/powderizer-lr.png b/angelsrefining/graphics/entity/ore-powderizer/powderizer-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-powderizer/powderizer-lr.png rename to angelsrefining/graphics/entity/ore-powderizer/powderizer-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-base.png b/angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-base.png rename to angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-lights.png b/angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-lights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-lights.png rename to angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-lights.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-shadow.png b/angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-ore-refinery-shadow.png rename to angelsrefining/graphics/entity/ore-refinery/hr-ore-refinery-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-stack-patch-overlay.png b/angelsrefining/graphics/entity/ore-refinery/hr-stack-patch-overlay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/hr-stack-patch-overlay.png rename to angelsrefining/graphics/entity/ore-refinery/hr-stack-patch-overlay.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-base.png b/angelsrefining/graphics/entity/ore-refinery/ore-refinery-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-base.png rename to angelsrefining/graphics/entity/ore-refinery/ore-refinery-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-lights.png b/angelsrefining/graphics/entity/ore-refinery/ore-refinery-lights.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-lights.png rename to angelsrefining/graphics/entity/ore-refinery/ore-refinery-lights.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-shadow.png b/angelsrefining/graphics/entity/ore-refinery/ore-refinery-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/ore-refinery-shadow.png rename to angelsrefining/graphics/entity/ore-refinery/ore-refinery-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-refinery/stack-patch-overlay.png b/angelsrefining/graphics/entity/ore-refinery/stack-patch-overlay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-refinery/stack-patch-overlay.png rename to angelsrefining/graphics/entity/ore-refinery/stack-patch-overlay.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-base.png b/angelsrefining/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-base.png rename to angelsrefining/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-shadow.png b/angelsrefining/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-shadow.png rename to angelsrefining/graphics/entity/ore-sorting-facility/hr-ore-sorting-facility-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/ore-sorting-facility-base.png b/angelsrefining/graphics/entity/ore-sorting-facility/ore-sorting-facility-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/ore-sorting-facility-base.png rename to angelsrefining/graphics/entity/ore-sorting-facility/ore-sorting-facility-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/ore-sorting-facility-shadow.png b/angelsrefining/graphics/entity/ore-sorting-facility/ore-sorting-facility-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-sorting-facility/ore-sorting-facility-shadow.png rename to angelsrefining/graphics/entity/ore-sorting-facility/ore-sorting-facility-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-1.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-1.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-1.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-2.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-2.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-2.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-3.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-3.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-3.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-4.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-4.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-4.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-5.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-5.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-5.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-6.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-6.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-6.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-7.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-7.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-7.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-8.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-8.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-8.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-1.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-1.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-1.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-2.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-2.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-2.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-3.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-3.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-3.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-4.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-4.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-4.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-5.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-5.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-5.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-6.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-6.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-6.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-7.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-7.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-7.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-8.png b/angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores-particle/ore-particle-shadow-8.png rename to angelsrefining/graphics/entity/ores-particle/ore-particle-shadow-8.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/Thumbs.db b/angelsrefining/graphics/entity/ores/Thumbs.db similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/Thumbs.db rename to angelsrefining/graphics/entity/ores/Thumbs.db diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-1.png b/angelsrefining/graphics/entity/ores/ore-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-1.png rename to angelsrefining/graphics/entity/ores/ore-1.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-11-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-11-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-11-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-11-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-11-hr.png b/angelsrefining/graphics/entity/ores/ore-11-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-11-hr.png rename to angelsrefining/graphics/entity/ores/ore-11-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-11-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-11-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-11-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-11-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-11-lr.png b/angelsrefining/graphics/entity/ores/ore-11-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-11-lr.png rename to angelsrefining/graphics/entity/ores/ore-11-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-12-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-12-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-12-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-12-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-12-hr.png b/angelsrefining/graphics/entity/ores/ore-12-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-12-hr.png rename to angelsrefining/graphics/entity/ores/ore-12-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-12-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-12-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-12-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-12-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-12-lr.png b/angelsrefining/graphics/entity/ores/ore-12-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-12-lr.png rename to angelsrefining/graphics/entity/ores/ore-12-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-13-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-13-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-13-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-13-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-13-hr.png b/angelsrefining/graphics/entity/ores/ore-13-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-13-hr.png rename to angelsrefining/graphics/entity/ores/ore-13-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-13-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-13-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-13-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-13-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-13-lr.png b/angelsrefining/graphics/entity/ores/ore-13-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-13-lr.png rename to angelsrefining/graphics/entity/ores/ore-13-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-14-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-14-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-14-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-14-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-14-hr.png b/angelsrefining/graphics/entity/ores/ore-14-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-14-hr.png rename to angelsrefining/graphics/entity/ores/ore-14-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-14-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-14-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-14-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-14-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-14-lr.png b/angelsrefining/graphics/entity/ores/ore-14-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-14-lr.png rename to angelsrefining/graphics/entity/ores/ore-14-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-15-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-15-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-15-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-15-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-15-hr.png b/angelsrefining/graphics/entity/ores/ore-15-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-15-hr.png rename to angelsrefining/graphics/entity/ores/ore-15-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-15-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-15-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-15-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-15-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-15-lr.png b/angelsrefining/graphics/entity/ores/ore-15-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-15-lr.png rename to angelsrefining/graphics/entity/ores/ore-15-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-16-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-16-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-16-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-16-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-16-hr.png b/angelsrefining/graphics/entity/ores/ore-16-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-16-hr.png rename to angelsrefining/graphics/entity/ores/ore-16-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-16-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-16-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-16-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-16-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-16-lr.png b/angelsrefining/graphics/entity/ores/ore-16-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-16-lr.png rename to angelsrefining/graphics/entity/ores/ore-16-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-17-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-17-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-17-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-17-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-17-hr.png b/angelsrefining/graphics/entity/ores/ore-17-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-17-hr.png rename to angelsrefining/graphics/entity/ores/ore-17-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-17-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-17-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-17-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-17-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-17-lr.png b/angelsrefining/graphics/entity/ores/ore-17-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-17-lr.png rename to angelsrefining/graphics/entity/ores/ore-17-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-18-hr-glow.png b/angelsrefining/graphics/entity/ores/ore-18-hr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-18-hr-glow.png rename to angelsrefining/graphics/entity/ores/ore-18-hr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-18-hr.png b/angelsrefining/graphics/entity/ores/ore-18-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-18-hr.png rename to angelsrefining/graphics/entity/ores/ore-18-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-18-lr-glow.png b/angelsrefining/graphics/entity/ores/ore-18-lr-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-18-lr-glow.png rename to angelsrefining/graphics/entity/ores/ore-18-lr-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-18-lr.png b/angelsrefining/graphics/entity/ores/ore-18-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-18-lr.png rename to angelsrefining/graphics/entity/ores/ore-18-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-19-hr.png b/angelsrefining/graphics/entity/ores/ore-19-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-19-hr.png rename to angelsrefining/graphics/entity/ores/ore-19-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-19-lr.png b/angelsrefining/graphics/entity/ores/ore-19-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-19-lr.png rename to angelsrefining/graphics/entity/ores/ore-19-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-2.png b/angelsrefining/graphics/entity/ores/ore-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-2.png rename to angelsrefining/graphics/entity/ores/ore-2.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-20-hr.png b/angelsrefining/graphics/entity/ores/ore-20-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-20-hr.png rename to angelsrefining/graphics/entity/ores/ore-20-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-20-lr.png b/angelsrefining/graphics/entity/ores/ore-20-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-20-lr.png rename to angelsrefining/graphics/entity/ores/ore-20-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-21-hr.png b/angelsrefining/graphics/entity/ores/ore-21-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-21-hr.png rename to angelsrefining/graphics/entity/ores/ore-21-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-21-lr.png b/angelsrefining/graphics/entity/ores/ore-21-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-21-lr.png rename to angelsrefining/graphics/entity/ores/ore-21-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-22-hr.png b/angelsrefining/graphics/entity/ores/ore-22-hr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-22-hr.png rename to angelsrefining/graphics/entity/ores/ore-22-hr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-22-lr.png b/angelsrefining/graphics/entity/ores/ore-22-lr.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-22-lr.png rename to angelsrefining/graphics/entity/ores/ore-22-lr.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-3.png b/angelsrefining/graphics/entity/ores/ore-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-3.png rename to angelsrefining/graphics/entity/ores/ore-3.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-4.png b/angelsrefining/graphics/entity/ores/ore-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-4.png rename to angelsrefining/graphics/entity/ores/ore-4.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-5.png b/angelsrefining/graphics/entity/ores/ore-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-5.png rename to angelsrefining/graphics/entity/ores/ore-5.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-6.png b/angelsrefining/graphics/entity/ores/ore-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-6.png rename to angelsrefining/graphics/entity/ores/ore-6.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-7.png b/angelsrefining/graphics/entity/ores/ore-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-7.png rename to angelsrefining/graphics/entity/ores/ore-7.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-8.png b/angelsrefining/graphics/entity/ores/ore-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-8.png rename to angelsrefining/graphics/entity/ores/ore-8.png diff --git a/angelsrefining_9.12.4/graphics/entity/ores/ore-9.png b/angelsrefining/graphics/entity/ores/ore-9.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ores/ore-9.png rename to angelsrefining/graphics/entity/ores/ore-9.png diff --git a/angelsrefining_9.12.4/graphics/entity/patches/fissure-glow.png b/angelsrefining/graphics/entity/patches/fissure-glow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/patches/fissure-glow.png rename to angelsrefining/graphics/entity/patches/fissure-glow.png diff --git a/angelsrefining_9.12.4/graphics/entity/patches/fissure.png b/angelsrefining/graphics/entity/patches/fissure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/patches/fissure.png rename to angelsrefining/graphics/entity/patches/fissure.png diff --git a/angelsrefining_9.12.4/graphics/entity/patches/gas.png b/angelsrefining/graphics/entity/patches/gas.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/patches/gas.png rename to angelsrefining/graphics/entity/patches/gas.png diff --git a/angelsrefining_9.12.4/graphics/entity/patches/liquid.png b/angelsrefining/graphics/entity/patches/liquid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/patches/liquid.png rename to angelsrefining/graphics/entity/patches/liquid.png diff --git a/angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-1.png b/angelsrefining/graphics/entity/rock/crystal-rock-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-1.png rename to angelsrefining/graphics/entity/rock/crystal-rock-1.png diff --git a/angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-2.png b/angelsrefining/graphics/entity/rock/crystal-rock-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-2.png rename to angelsrefining/graphics/entity/rock/crystal-rock-2.png diff --git a/angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-3.png b/angelsrefining/graphics/entity/rock/crystal-rock-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-3.png rename to angelsrefining/graphics/entity/rock/crystal-rock-3.png diff --git a/angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-4.png b/angelsrefining/graphics/entity/rock/crystal-rock-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-4.png rename to angelsrefining/graphics/entity/rock/crystal-rock-4.png diff --git a/angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-big-1.png b/angelsrefining/graphics/entity/rock/crystal-rock-big-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/rock/crystal-rock-big-1.png rename to angelsrefining/graphics/entity/rock/crystal-rock-big-1.png diff --git a/angelsrefining_9.12.4/graphics/entity/salination-plant/hr-salination-plant-base.png b/angelsrefining/graphics/entity/salination-plant/hr-salination-plant-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/salination-plant/hr-salination-plant-base.png rename to angelsrefining/graphics/entity/salination-plant/hr-salination-plant-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/salination-plant/hr-salination-plant-shadow.png b/angelsrefining/graphics/entity/salination-plant/hr-salination-plant-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/salination-plant/hr-salination-plant-shadow.png rename to angelsrefining/graphics/entity/salination-plant/hr-salination-plant-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/salination-plant/salination-plant-base.png b/angelsrefining/graphics/entity/salination-plant/salination-plant-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/salination-plant/salination-plant-base.png rename to angelsrefining/graphics/entity/salination-plant/salination-plant-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/salination-plant/salination-plant-shadow.png b/angelsrefining/graphics/entity/salination-plant/salination-plant-shadow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/salination-plant/salination-plant-shadow.png rename to angelsrefining/graphics/entity/salination-plant/salination-plant-shadow.png diff --git a/angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk2-ico.png b/angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk2-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk2-ico.png rename to angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk2-ico.png diff --git a/angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk2.png b/angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk2.png rename to angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk2.png diff --git a/angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk3-ico.png b/angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk3-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk3-ico.png rename to angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk3-ico.png diff --git a/angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk3.png b/angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump-mk3.png rename to angelsrefining/graphics/entity/seafloor-pump/seafloor-pump-mk3.png diff --git a/angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump.png b/angelsrefining/graphics/entity/seafloor-pump/seafloor-pump.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/seafloor-pump/seafloor-pump.png rename to angelsrefining/graphics/entity/seafloor-pump/seafloor-pump.png diff --git a/angelsrefining_9.12.4/graphics/entity/thermal-extractor/thermal-extractor-animation.png b/angelsrefining/graphics/entity/thermal-extractor/thermal-extractor-animation.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/thermal-extractor/thermal-extractor-animation.png rename to angelsrefining/graphics/entity/thermal-extractor/thermal-extractor-animation.png diff --git a/angelsrefining_9.12.4/graphics/entity/thermal-extractor/thermal-extractor-base.png b/angelsrefining/graphics/entity/thermal-extractor/thermal-extractor-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/thermal-extractor/thermal-extractor-base.png rename to angelsrefining/graphics/entity/thermal-extractor/thermal-extractor-base.png diff --git a/angelsrefining_9.12.4/graphics/entity/washing-plant/washing-plant.png b/angelsrefining/graphics/entity/washing-plant/washing-plant.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/washing-plant/washing-plant.png rename to angelsrefining/graphics/entity/washing-plant/washing-plant.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-east.png b/angelsrefining/graphics/entity/water-pump/down-pipe-east.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-east.png rename to angelsrefining/graphics/entity/water-pump/down-pipe-east.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-north.png b/angelsrefining/graphics/entity/water-pump/down-pipe-north.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-north.png rename to angelsrefining/graphics/entity/water-pump/down-pipe-north.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-south.png b/angelsrefining/graphics/entity/water-pump/down-pipe-south.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-south.png rename to angelsrefining/graphics/entity/water-pump/down-pipe-south.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-west.png b/angelsrefining/graphics/entity/water-pump/down-pipe-west.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/down-pipe-west.png rename to angelsrefining/graphics/entity/water-pump/down-pipe-west.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/over1.png b/angelsrefining/graphics/entity/water-pump/over1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/over1.png rename to angelsrefining/graphics/entity/water-pump/over1.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/over2.png b/angelsrefining/graphics/entity/water-pump/over2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/over2.png rename to angelsrefining/graphics/entity/water-pump/over2.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/pump-east.png b/angelsrefining/graphics/entity/water-pump/pump-east.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/pump-east.png rename to angelsrefining/graphics/entity/water-pump/pump-east.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/pump-north.png b/angelsrefining/graphics/entity/water-pump/pump-north.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/pump-north.png rename to angelsrefining/graphics/entity/water-pump/pump-north.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/pump-south.png b/angelsrefining/graphics/entity/water-pump/pump-south.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/pump-south.png rename to angelsrefining/graphics/entity/water-pump/pump-south.png diff --git a/angelsrefining_9.12.4/graphics/entity/water-pump/pump-west.png b/angelsrefining/graphics/entity/water-pump/pump-west.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/water-pump/pump-west.png rename to angelsrefining/graphics/entity/water-pump/pump-west.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-base.png b/angelsrefining/graphics/icons/angels-gas/gas-item-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-base.png rename to angelsrefining/graphics/icons/angels-gas/gas-item-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-bot.png b/angelsrefining/graphics/icons/angels-gas/gas-item-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-bot.png rename to angelsrefining/graphics/icons/angels-gas/gas-item-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-mid.png b/angelsrefining/graphics/icons/angels-gas/gas-item-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-mid.png rename to angelsrefining/graphics/icons/angels-gas/gas-item-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-top.png b/angelsrefining/graphics/icons/angels-gas/gas-item-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-item-top.png rename to angelsrefining/graphics/icons/angels-gas/gas-item-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-base.png b/angelsrefining/graphics/icons/angels-gas/gas-recipe-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-base.png rename to angelsrefining/graphics/icons/angels-gas/gas-recipe-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-bot.png b/angelsrefining/graphics/icons/angels-gas/gas-recipe-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-bot.png rename to angelsrefining/graphics/icons/angels-gas/gas-recipe-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-mid.png b/angelsrefining/graphics/icons/angels-gas/gas-recipe-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-mid.png rename to angelsrefining/graphics/icons/angels-gas/gas-recipe-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-top.png b/angelsrefining/graphics/icons/angels-gas/gas-recipe-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-recipe-top.png rename to angelsrefining/graphics/icons/angels-gas/gas-recipe-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-base.png b/angelsrefining/graphics/icons/angels-gas/gas-tech-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-base.png rename to angelsrefining/graphics/icons/angels-gas/gas-tech-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-bot.png b/angelsrefining/graphics/icons/angels-gas/gas-tech-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-bot.png rename to angelsrefining/graphics/icons/angels-gas/gas-tech-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-mid.png b/angelsrefining/graphics/icons/angels-gas/gas-tech-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-mid.png rename to angelsrefining/graphics/icons/angels-gas/gas-tech-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-top.png b/angelsrefining/graphics/icons/angels-gas/gas-tech-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-gas/gas-tech-top.png rename to angelsrefining/graphics/icons/angels-gas/gas-tech-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-bottom.png b/angelsrefining/graphics/icons/angels-generic/generic-base-bottom.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-bottom.png rename to angelsrefining/graphics/icons/angels-generic/generic-base-bottom.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-mid.png b/angelsrefining/graphics/icons/angels-generic/generic-base-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-mid.png rename to angelsrefining/graphics/icons/angels-generic/generic-base-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-top.png b/angelsrefining/graphics/icons/angels-generic/generic-base-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-generic/generic-base-top.png rename to angelsrefining/graphics/icons/angels-generic/generic-base-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/filter-ceramic-front.png b/angelsrefining/graphics/icons/angels-liquid/filter-ceramic-front.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/filter-ceramic-front.png rename to angelsrefining/graphics/icons/angels-liquid/filter-ceramic-front.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/filter-coal-front.png b/angelsrefining/graphics/icons/angels-liquid/filter-coal-front.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/filter-coal-front.png rename to angelsrefining/graphics/icons/angels-liquid/filter-coal-front.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-base.png b/angelsrefining/graphics/icons/angels-liquid/liquid-item-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-base.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-item-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-bot.png b/angelsrefining/graphics/icons/angels-liquid/liquid-item-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-bot.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-item-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-mid.png b/angelsrefining/graphics/icons/angels-liquid/liquid-item-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-mid.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-item-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-top.png b/angelsrefining/graphics/icons/angels-liquid/liquid-item-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-item-top.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-item-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-base.png b/angelsrefining/graphics/icons/angels-liquid/liquid-recipe-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-base.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-recipe-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-bot.png b/angelsrefining/graphics/icons/angels-liquid/liquid-recipe-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-bot.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-recipe-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-mid.png b/angelsrefining/graphics/icons/angels-liquid/liquid-recipe-mid.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-mid.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-recipe-mid.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-top.png b/angelsrefining/graphics/icons/angels-liquid/liquid-recipe-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-recipe-top.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-recipe-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-base.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-base.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-base.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-base.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-left.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-left.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-left.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-left.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-mask.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-mask.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-mask.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-right.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-right.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot-right.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot-right.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-bot.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-bot.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-top-mask.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-top-mask.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-top-mask.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-top-mask.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-top.png b/angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-top.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-liquid/liquid-viscous-item-top.png rename to angelsrefining/graphics/icons/angels-liquid/liquid-viscous-item-top.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1-HR.png b/angelsrefining/graphics/icons/angels-ore1-HR.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1-HR.png rename to angelsrefining/graphics/icons/angels-ore1-HR.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1-chunk.png b/angelsrefining/graphics/icons/angels-ore1-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1-chunk.png rename to angelsrefining/graphics/icons/angels-ore1-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1-crushed.png b/angelsrefining/graphics/icons/angels-ore1-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1-crushed.png rename to angelsrefining/graphics/icons/angels-ore1-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1-crystal.png b/angelsrefining/graphics/icons/angels-ore1-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1-crystal.png rename to angelsrefining/graphics/icons/angels-ore1-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1-pure.png b/angelsrefining/graphics/icons/angels-ore1-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1-pure.png rename to angelsrefining/graphics/icons/angels-ore1-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1.png b/angelsrefining/graphics/icons/angels-ore1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1.png rename to angelsrefining/graphics/icons/angels-ore1.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-1.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-1.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-2.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-2.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-3.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-3.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-4.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-4.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-5.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-5.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-6.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-6.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-7.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-7.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-8.png b/angelsrefining/graphics/icons/angels-ore1/angels-ore1-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore1/angels-ore1-8.png rename to angelsrefining/graphics/icons/angels-ore1/angels-ore1-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore2-chunk.png b/angelsrefining/graphics/icons/angels-ore2-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore2-chunk.png rename to angelsrefining/graphics/icons/angels-ore2-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore2-crushed.png b/angelsrefining/graphics/icons/angels-ore2-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore2-crushed.png rename to angelsrefining/graphics/icons/angels-ore2-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore2-crystal.png b/angelsrefining/graphics/icons/angels-ore2-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore2-crystal.png rename to angelsrefining/graphics/icons/angels-ore2-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore2-pure.png b/angelsrefining/graphics/icons/angels-ore2-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore2-pure.png rename to angelsrefining/graphics/icons/angels-ore2-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore2.png b/angelsrefining/graphics/icons/angels-ore2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore2.png rename to angelsrefining/graphics/icons/angels-ore2.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3-HR.png b/angelsrefining/graphics/icons/angels-ore3-HR.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3-HR.png rename to angelsrefining/graphics/icons/angels-ore3-HR.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3-chunk.png b/angelsrefining/graphics/icons/angels-ore3-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3-chunk.png rename to angelsrefining/graphics/icons/angels-ore3-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3-crushed.png b/angelsrefining/graphics/icons/angels-ore3-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3-crushed.png rename to angelsrefining/graphics/icons/angels-ore3-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3-crystal.png b/angelsrefining/graphics/icons/angels-ore3-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3-crystal.png rename to angelsrefining/graphics/icons/angels-ore3-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3-pure.png b/angelsrefining/graphics/icons/angels-ore3-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3-pure.png rename to angelsrefining/graphics/icons/angels-ore3-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3.png b/angelsrefining/graphics/icons/angels-ore3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3.png rename to angelsrefining/graphics/icons/angels-ore3.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-1.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-1.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-2.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-2.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-3.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-3.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-4.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-4.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-5.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-5.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-6.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-6.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-7.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-7.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-8.png b/angelsrefining/graphics/icons/angels-ore3/angels-ore3-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore3/angels-ore3-8.png rename to angelsrefining/graphics/icons/angels-ore3/angels-ore3-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore4-chunk.png b/angelsrefining/graphics/icons/angels-ore4-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore4-chunk.png rename to angelsrefining/graphics/icons/angels-ore4-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore4-crushed.png b/angelsrefining/graphics/icons/angels-ore4-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore4-crushed.png rename to angelsrefining/graphics/icons/angels-ore4-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore4-crystal.png b/angelsrefining/graphics/icons/angels-ore4-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore4-crystal.png rename to angelsrefining/graphics/icons/angels-ore4-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore4-pure.png b/angelsrefining/graphics/icons/angels-ore4-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore4-pure.png rename to angelsrefining/graphics/icons/angels-ore4-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore4.png b/angelsrefining/graphics/icons/angels-ore4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore4.png rename to angelsrefining/graphics/icons/angels-ore4.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5-HR.png b/angelsrefining/graphics/icons/angels-ore5-HR.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5-HR.png rename to angelsrefining/graphics/icons/angels-ore5-HR.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5-chunk.png b/angelsrefining/graphics/icons/angels-ore5-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5-chunk.png rename to angelsrefining/graphics/icons/angels-ore5-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5-crushed.png b/angelsrefining/graphics/icons/angels-ore5-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5-crushed.png rename to angelsrefining/graphics/icons/angels-ore5-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5-crystal.png b/angelsrefining/graphics/icons/angels-ore5-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5-crystal.png rename to angelsrefining/graphics/icons/angels-ore5-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5-pure.png b/angelsrefining/graphics/icons/angels-ore5-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5-pure.png rename to angelsrefining/graphics/icons/angels-ore5-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5.png b/angelsrefining/graphics/icons/angels-ore5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5.png rename to angelsrefining/graphics/icons/angels-ore5.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-1.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-1.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-2.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-2.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-3.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-3.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-4.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-4.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-5.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-5.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-6.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-6.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-7.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-7.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-8.png b/angelsrefining/graphics/icons/angels-ore5/angels-ore5-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore5/angels-ore5-8.png rename to angelsrefining/graphics/icons/angels-ore5/angels-ore5-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6-chunk.png b/angelsrefining/graphics/icons/angels-ore6-chunk.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6-chunk.png rename to angelsrefining/graphics/icons/angels-ore6-chunk.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6-crushed.png b/angelsrefining/graphics/icons/angels-ore6-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6-crushed.png rename to angelsrefining/graphics/icons/angels-ore6-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6-crystal.png b/angelsrefining/graphics/icons/angels-ore6-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6-crystal.png rename to angelsrefining/graphics/icons/angels-ore6-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6-pure.png b/angelsrefining/graphics/icons/angels-ore6-pure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6-pure.png rename to angelsrefining/graphics/icons/angels-ore6-pure.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6.png b/angelsrefining/graphics/icons/angels-ore6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6.png rename to angelsrefining/graphics/icons/angels-ore6.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-1.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-1.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-2.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-2.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-3.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-3.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-4.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-4.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-5.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-5.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-6.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-6.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-7.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-7.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-8.png b/angelsrefining/graphics/icons/angels-ore6/angels-ore6-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore6/angels-ore6-8.png rename to angelsrefining/graphics/icons/angels-ore6/angels-ore6-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore8-crushed.png b/angelsrefining/graphics/icons/angels-ore8-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore8-crushed.png rename to angelsrefining/graphics/icons/angels-ore8-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore8-crystal.png b/angelsrefining/graphics/icons/angels-ore8-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore8-crystal.png rename to angelsrefining/graphics/icons/angels-ore8-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore8-dust.png b/angelsrefining/graphics/icons/angels-ore8-dust.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore8-dust.png rename to angelsrefining/graphics/icons/angels-ore8-dust.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore8-powder.png b/angelsrefining/graphics/icons/angels-ore8-powder.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore8-powder.png rename to angelsrefining/graphics/icons/angels-ore8-powder.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore9-crushed.png b/angelsrefining/graphics/icons/angels-ore9-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore9-crushed.png rename to angelsrefining/graphics/icons/angels-ore9-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore9-crystal.png b/angelsrefining/graphics/icons/angels-ore9-crystal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore9-crystal.png rename to angelsrefining/graphics/icons/angels-ore9-crystal.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore9-dust.png b/angelsrefining/graphics/icons/angels-ore9-dust.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore9-dust.png rename to angelsrefining/graphics/icons/angels-ore9-dust.png diff --git a/angelsrefining_9.12.4/graphics/icons/angels-ore9-powder.png b/angelsrefining/graphics/icons/angels-ore9-powder.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/angels-ore9-powder.png rename to angelsrefining/graphics/icons/angels-ore9-powder.png diff --git a/angelsrefining_9.12.4/graphics/icons/barreling-pump.png b/angelsrefining/graphics/icons/barreling-pump.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/barreling-pump.png rename to angelsrefining/graphics/icons/barreling-pump.png diff --git a/angelsrefining_9.12.4/graphics/icons/bobs-logo.png b/angelsrefining/graphics/icons/bobs-logo.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/bobs-logo.png rename to angelsrefining/graphics/icons/bobs-logo.png diff --git a/angelsrefining_9.12.4/graphics/icons/catalysator-brown.png b/angelsrefining/graphics/icons/catalysator-brown.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/catalysator-brown.png rename to angelsrefining/graphics/icons/catalysator-brown.png diff --git a/angelsrefining_9.12.4/graphics/icons/catalysator-green.png b/angelsrefining/graphics/icons/catalysator-green.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/catalysator-green.png rename to angelsrefining/graphics/icons/catalysator-green.png diff --git a/angelsrefining_9.12.4/graphics/icons/catalysator-orange.png b/angelsrefining/graphics/icons/catalysator-orange.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/catalysator-orange.png rename to angelsrefining/graphics/icons/catalysator-orange.png diff --git a/angelsrefining_9.12.4/graphics/icons/catalysator-yellow.png b/angelsrefining/graphics/icons/catalysator-yellow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/catalysator-yellow.png rename to angelsrefining/graphics/icons/catalysator-yellow.png diff --git a/angelsrefining_9.12.4/graphics/icons/clarifier.png b/angelsrefining/graphics/icons/clarifier.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/clarifier.png rename to angelsrefining/graphics/icons/clarifier.png diff --git a/angelsrefining_9.12.4/graphics/icons/copper-nugget.png b/angelsrefining/graphics/icons/copper-nugget.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/copper-nugget.png rename to angelsrefining/graphics/icons/copper-nugget.png diff --git a/angelsrefining_9.12.4/graphics/icons/copper-pebbles.png b/angelsrefining/graphics/icons/copper-pebbles.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/copper-pebbles.png rename to angelsrefining/graphics/icons/copper-pebbles.png diff --git a/angelsrefining_9.12.4/graphics/icons/copper-plate-crushed.png b/angelsrefining/graphics/icons/copper-plate-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/copper-plate-crushed.png rename to angelsrefining/graphics/icons/copper-plate-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/copper-slag.png b/angelsrefining/graphics/icons/copper-slag.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/copper-slag.png rename to angelsrefining/graphics/icons/copper-slag.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-1.png b/angelsrefining/graphics/icons/crushed/crushed-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-1.png rename to angelsrefining/graphics/icons/crushed/crushed-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-2.png b/angelsrefining/graphics/icons/crushed/crushed-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-2.png rename to angelsrefining/graphics/icons/crushed/crushed-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-3.png b/angelsrefining/graphics/icons/crushed/crushed-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-3.png rename to angelsrefining/graphics/icons/crushed/crushed-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-4.png b/angelsrefining/graphics/icons/crushed/crushed-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-4.png rename to angelsrefining/graphics/icons/crushed/crushed-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-5.png b/angelsrefining/graphics/icons/crushed/crushed-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-5.png rename to angelsrefining/graphics/icons/crushed/crushed-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-6.png b/angelsrefining/graphics/icons/crushed/crushed-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-6.png rename to angelsrefining/graphics/icons/crushed/crushed-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-7.png b/angelsrefining/graphics/icons/crushed/crushed-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-7.png rename to angelsrefining/graphics/icons/crushed/crushed-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/crushed/crushed-8.png b/angelsrefining/graphics/icons/crushed/crushed-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crushed/crushed-8.png rename to angelsrefining/graphics/icons/crushed/crushed-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/crystal-dust.png b/angelsrefining/graphics/icons/crystal-dust.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crystal-dust.png rename to angelsrefining/graphics/icons/crystal-dust.png diff --git a/angelsrefining_9.12.4/graphics/icons/crystallizer.png b/angelsrefining/graphics/icons/crystallizer.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/crystallizer.png rename to angelsrefining/graphics/icons/crystallizer.png diff --git a/angelsrefining_9.12.4/graphics/icons/electro-whinning-cell-ico.png b/angelsrefining/graphics/icons/electro-whinning-cell-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/electro-whinning-cell-ico.png rename to angelsrefining/graphics/icons/electro-whinning-cell-ico.png diff --git a/angelsrefining_9.12.4/graphics/icons/filter-ceramic-used.png b/angelsrefining/graphics/icons/filter-ceramic-used.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filter-ceramic-used.png rename to angelsrefining/graphics/icons/filter-ceramic-used.png diff --git a/angelsrefining_9.12.4/graphics/icons/filter-ceramic.png b/angelsrefining/graphics/icons/filter-ceramic.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filter-ceramic.png rename to angelsrefining/graphics/icons/filter-ceramic.png diff --git a/angelsrefining_9.12.4/graphics/icons/filter-coal.png b/angelsrefining/graphics/icons/filter-coal.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filter-coal.png rename to angelsrefining/graphics/icons/filter-coal.png diff --git a/angelsrefining_9.12.4/graphics/icons/filter-frame.png b/angelsrefining/graphics/icons/filter-frame.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filter-frame.png rename to angelsrefining/graphics/icons/filter-frame.png diff --git a/angelsrefining_9.12.4/graphics/icons/filtration-unit-2.png b/angelsrefining/graphics/icons/filtration-unit-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filtration-unit-2.png rename to angelsrefining/graphics/icons/filtration-unit-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/filtration-unit-3.png b/angelsrefining/graphics/icons/filtration-unit-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filtration-unit-3.png rename to angelsrefining/graphics/icons/filtration-unit-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/filtration-unit.png b/angelsrefining/graphics/icons/filtration-unit.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/filtration-unit.png rename to angelsrefining/graphics/icons/filtration-unit.png diff --git a/angelsrefining_9.12.4/graphics/icons/fissure.png b/angelsrefining/graphics/icons/fissure.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/fissure.png rename to angelsrefining/graphics/icons/fissure.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-blue.png b/angelsrefining/graphics/icons/geode-blue.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-blue.png rename to angelsrefining/graphics/icons/geode-blue.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-cyan.png b/angelsrefining/graphics/icons/geode-cyan.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-cyan.png rename to angelsrefining/graphics/icons/geode-cyan.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-lightgreen.png b/angelsrefining/graphics/icons/geode-lightgreen.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-lightgreen.png rename to angelsrefining/graphics/icons/geode-lightgreen.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-purple.png b/angelsrefining/graphics/icons/geode-purple.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-purple.png rename to angelsrefining/graphics/icons/geode-purple.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-red.png b/angelsrefining/graphics/icons/geode-red.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-red.png rename to angelsrefining/graphics/icons/geode-red.png diff --git a/angelsrefining_9.12.4/graphics/icons/geode-yellow.png b/angelsrefining/graphics/icons/geode-yellow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/geode-yellow.png rename to angelsrefining/graphics/icons/geode-yellow.png diff --git a/angelsrefining_9.12.4/graphics/icons/hydro-plant.png b/angelsrefining/graphics/icons/hydro-plant.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/hydro-plant.png rename to angelsrefining/graphics/icons/hydro-plant.png diff --git a/angelsrefining_9.12.4/graphics/icons/iron-nugget.png b/angelsrefining/graphics/icons/iron-nugget.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/iron-nugget.png rename to angelsrefining/graphics/icons/iron-nugget.png diff --git a/angelsrefining_9.12.4/graphics/icons/iron-pebbles.png b/angelsrefining/graphics/icons/iron-pebbles.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/iron-pebbles.png rename to angelsrefining/graphics/icons/iron-pebbles.png diff --git a/angelsrefining_9.12.4/graphics/icons/iron-plate-crushed.png b/angelsrefining/graphics/icons/iron-plate-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/iron-plate-crushed.png rename to angelsrefining/graphics/icons/iron-plate-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/iron-slag.png b/angelsrefining/graphics/icons/iron-slag.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/iron-slag.png rename to angelsrefining/graphics/icons/iron-slag.png diff --git a/angelsrefining_9.12.4/graphics/icons/lead-plate-crushed.png b/angelsrefining/graphics/icons/lead-plate-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/lead-plate-crushed.png rename to angelsrefining/graphics/icons/lead-plate-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/liquifier.png b/angelsrefining/graphics/icons/liquifier.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/liquifier.png rename to angelsrefining/graphics/icons/liquifier.png diff --git a/angelsrefining_9.12.4/graphics/icons/milling-drum-used.png b/angelsrefining/graphics/icons/milling-drum-used.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/milling-drum-used.png rename to angelsrefining/graphics/icons/milling-drum-used.png diff --git a/angelsrefining_9.12.4/graphics/icons/milling-drum.png b/angelsrefining/graphics/icons/milling-drum.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/milling-drum.png rename to angelsrefining/graphics/icons/milling-drum.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_1.png b/angelsrefining/graphics/icons/num_1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_1.png rename to angelsrefining/graphics/icons/num_1.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_2.png b/angelsrefining/graphics/icons/num_2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_2.png rename to angelsrefining/graphics/icons/num_2.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_3.png b/angelsrefining/graphics/icons/num_3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_3.png rename to angelsrefining/graphics/icons/num_3.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_4.png b/angelsrefining/graphics/icons/num_4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_4.png rename to angelsrefining/graphics/icons/num_4.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_5.png b/angelsrefining/graphics/icons/num_5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_5.png rename to angelsrefining/graphics/icons/num_5.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_6.png b/angelsrefining/graphics/icons/num_6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_6.png rename to angelsrefining/graphics/icons/num_6.png diff --git a/angelsrefining_9.12.4/graphics/icons/num_7.png b/angelsrefining/graphics/icons/num_7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/num_7.png rename to angelsrefining/graphics/icons/num_7.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-0-outline.png b/angelsrefining/graphics/icons/numerals/num-0-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-0-outline.png rename to angelsrefining/graphics/icons/numerals/num-0-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-0.png b/angelsrefining/graphics/icons/numerals/num-0.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-0.png rename to angelsrefining/graphics/icons/numerals/num-0.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-1-outline.png b/angelsrefining/graphics/icons/numerals/num-1-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-1-outline.png rename to angelsrefining/graphics/icons/numerals/num-1-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-1.png b/angelsrefining/graphics/icons/numerals/num-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-1.png rename to angelsrefining/graphics/icons/numerals/num-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-10-outline.png b/angelsrefining/graphics/icons/numerals/num-10-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-10-outline.png rename to angelsrefining/graphics/icons/numerals/num-10-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-10.png b/angelsrefining/graphics/icons/numerals/num-10.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-10.png rename to angelsrefining/graphics/icons/numerals/num-10.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-2-outline.png b/angelsrefining/graphics/icons/numerals/num-2-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-2-outline.png rename to angelsrefining/graphics/icons/numerals/num-2-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-2.png b/angelsrefining/graphics/icons/numerals/num-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-2.png rename to angelsrefining/graphics/icons/numerals/num-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-3-outline.png b/angelsrefining/graphics/icons/numerals/num-3-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-3-outline.png rename to angelsrefining/graphics/icons/numerals/num-3-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-3.png b/angelsrefining/graphics/icons/numerals/num-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-3.png rename to angelsrefining/graphics/icons/numerals/num-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-4-outline.png b/angelsrefining/graphics/icons/numerals/num-4-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-4-outline.png rename to angelsrefining/graphics/icons/numerals/num-4-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-4.png b/angelsrefining/graphics/icons/numerals/num-4.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-4.png rename to angelsrefining/graphics/icons/numerals/num-4.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-5-outline.png b/angelsrefining/graphics/icons/numerals/num-5-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-5-outline.png rename to angelsrefining/graphics/icons/numerals/num-5-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-5.png b/angelsrefining/graphics/icons/numerals/num-5.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-5.png rename to angelsrefining/graphics/icons/numerals/num-5.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-6-outline.png b/angelsrefining/graphics/icons/numerals/num-6-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-6-outline.png rename to angelsrefining/graphics/icons/numerals/num-6-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-6.png b/angelsrefining/graphics/icons/numerals/num-6.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-6.png rename to angelsrefining/graphics/icons/numerals/num-6.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-7-outline.png b/angelsrefining/graphics/icons/numerals/num-7-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-7-outline.png rename to angelsrefining/graphics/icons/numerals/num-7-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-7.png b/angelsrefining/graphics/icons/numerals/num-7.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-7.png rename to angelsrefining/graphics/icons/numerals/num-7.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-8-outline.png b/angelsrefining/graphics/icons/numerals/num-8-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-8-outline.png rename to angelsrefining/graphics/icons/numerals/num-8-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-8.png b/angelsrefining/graphics/icons/numerals/num-8.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-8.png rename to angelsrefining/graphics/icons/numerals/num-8.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-9-outline.png b/angelsrefining/graphics/icons/numerals/num-9-outline.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-9-outline.png rename to angelsrefining/graphics/icons/numerals/num-9-outline.png diff --git a/angelsrefining_9.12.4/graphics/icons/numerals/num-9.png b/angelsrefining/graphics/icons/numerals/num-9.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/numerals/num-9.png rename to angelsrefining/graphics/icons/numerals/num-9.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-bauxite.png b/angelsrefining/graphics/icons/ore-bauxite.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-bauxite.png rename to angelsrefining/graphics/icons/ore-bauxite.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-chrome.png b/angelsrefining/graphics/icons/ore-chrome.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-chrome.png rename to angelsrefining/graphics/icons/ore-chrome.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-crusher.png b/angelsrefining/graphics/icons/ore-crusher.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-crusher.png rename to angelsrefining/graphics/icons/ore-crusher.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-floatation-cell.png b/angelsrefining/graphics/icons/ore-floatation-cell.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-floatation-cell.png rename to angelsrefining/graphics/icons/ore-floatation-cell.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-fluorite.png b/angelsrefining/graphics/icons/ore-fluorite.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-fluorite.png rename to angelsrefining/graphics/icons/ore-fluorite.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-leaching-plant-2.png b/angelsrefining/graphics/icons/ore-leaching-plant-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-leaching-plant-2.png rename to angelsrefining/graphics/icons/ore-leaching-plant-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-leaching-plant-3.png b/angelsrefining/graphics/icons/ore-leaching-plant-3.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-leaching-plant-3.png rename to angelsrefining/graphics/icons/ore-leaching-plant-3.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-leaching-plant.png b/angelsrefining/graphics/icons/ore-leaching-plant.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-leaching-plant.png rename to angelsrefining/graphics/icons/ore-leaching-plant.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-manganese.png b/angelsrefining/graphics/icons/ore-manganese.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-manganese.png rename to angelsrefining/graphics/icons/ore-manganese.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-platinum.png b/angelsrefining/graphics/icons/ore-platinum.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-platinum.png rename to angelsrefining/graphics/icons/ore-platinum.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-refinery.png b/angelsrefining/graphics/icons/ore-refinery.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-refinery.png rename to angelsrefining/graphics/icons/ore-refinery.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-rutile.png b/angelsrefining/graphics/icons/ore-rutile.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-rutile.png rename to angelsrefining/graphics/icons/ore-rutile.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-sorting-facility.png b/angelsrefining/graphics/icons/ore-sorting-facility.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-sorting-facility.png rename to angelsrefining/graphics/icons/ore-sorting-facility.png diff --git a/angelsrefining_9.12.4/graphics/icons/ore-zinc.png b/angelsrefining/graphics/icons/ore-zinc.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/ore-zinc.png rename to angelsrefining/graphics/icons/ore-zinc.png diff --git a/angelsrefining_9.12.4/graphics/icons/powderizer-ico.png b/angelsrefining/graphics/icons/powderizer-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/powderizer-ico.png rename to angelsrefining/graphics/icons/powderizer-ico.png diff --git a/angelsrefining_9.12.4/graphics/icons/salination-plant.png b/angelsrefining/graphics/icons/salination-plant.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/salination-plant.png rename to angelsrefining/graphics/icons/salination-plant.png diff --git a/angelsrefining_9.12.4/graphics/icons/seafloor-pump-ico.png b/angelsrefining/graphics/icons/seafloor-pump-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/seafloor-pump-ico.png rename to angelsrefining/graphics/icons/seafloor-pump-ico.png diff --git a/angelsrefining_9.12.4/graphics/icons/slag.png b/angelsrefining/graphics/icons/slag.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/slag.png rename to angelsrefining/graphics/icons/slag.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-clay.png b/angelsrefining/graphics/icons/solid-clay.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-clay.png rename to angelsrefining/graphics/icons/solid-clay.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-limestone.png b/angelsrefining/graphics/icons/solid-limestone.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-limestone.png rename to angelsrefining/graphics/icons/solid-limestone.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-lithium.png b/angelsrefining/graphics/icons/solid-lithium.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-lithium.png rename to angelsrefining/graphics/icons/solid-lithium.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-mud.png b/angelsrefining/graphics/icons/solid-mud.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-mud.png rename to angelsrefining/graphics/icons/solid-mud.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-salt-1.png b/angelsrefining/graphics/icons/solid-salt-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-salt-1.png rename to angelsrefining/graphics/icons/solid-salt-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-salt.png b/angelsrefining/graphics/icons/solid-salt.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-salt.png rename to angelsrefining/graphics/icons/solid-salt.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-sand-1.png b/angelsrefining/graphics/icons/solid-sand-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-sand-1.png rename to angelsrefining/graphics/icons/solid-sand-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/solid-sand.png b/angelsrefining/graphics/icons/solid-sand.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/solid-sand.png rename to angelsrefining/graphics/icons/solid-sand.png diff --git a/angelsrefining_9.12.4/graphics/icons/sort-icon.png b/angelsrefining/graphics/icons/sort-icon.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/sort-icon.png rename to angelsrefining/graphics/icons/sort-icon.png diff --git a/angelsrefining_9.12.4/graphics/icons/stone-crushed.png b/angelsrefining/graphics/icons/stone-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/stone-crushed.png rename to angelsrefining/graphics/icons/stone-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/stone-slurry.png b/angelsrefining/graphics/icons/stone-slurry.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/stone-slurry.png rename to angelsrefining/graphics/icons/stone-slurry.png diff --git a/angelsrefining_9.12.4/graphics/icons/thermal-extractor.png b/angelsrefining/graphics/icons/thermal-extractor.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/thermal-extractor.png rename to angelsrefining/graphics/icons/thermal-extractor.png diff --git a/angelsrefining_9.12.4/graphics/icons/thermal-filtering-1.png b/angelsrefining/graphics/icons/thermal-filtering-1.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/thermal-filtering-1.png rename to angelsrefining/graphics/icons/thermal-filtering-1.png diff --git a/angelsrefining_9.12.4/graphics/icons/thermal-filtering-2.png b/angelsrefining/graphics/icons/thermal-filtering-2.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/thermal-filtering-2.png rename to angelsrefining/graphics/icons/thermal-filtering-2.png diff --git a/angelsrefining_9.12.4/graphics/icons/tin-plate-crushed.png b/angelsrefining/graphics/icons/tin-plate-crushed.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/tin-plate-crushed.png rename to angelsrefining/graphics/icons/tin-plate-crushed.png diff --git a/angelsrefining_9.12.4/graphics/icons/void.png b/angelsrefining/graphics/icons/void.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/void.png rename to angelsrefining/graphics/icons/void.png diff --git a/angelsrefining_9.12.4/graphics/icons/washing-plant-ico.png b/angelsrefining/graphics/icons/washing-plant-ico.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/washing-plant-ico.png rename to angelsrefining/graphics/icons/washing-plant-ico.png diff --git a/angelsrefining_9.12.4/graphics/icons/water-pump.png b/angelsrefining/graphics/icons/water-pump.png similarity index 100% rename from angelsrefining_9.12.4/graphics/icons/water-pump.png rename to angelsrefining/graphics/icons/water-pump.png diff --git a/angelsrefining_9.12.4/graphics/item-group/barreling-group.png b/angelsrefining/graphics/item-group/barreling-group.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/barreling-group.png rename to angelsrefining/graphics/item-group/barreling-group.png diff --git a/angelsrefining_9.12.4/graphics/item-group/converter-group.png b/angelsrefining/graphics/item-group/converter-group.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/converter-group.png rename to angelsrefining/graphics/item-group/converter-group.png diff --git a/angelsrefining_9.12.4/graphics/item-group/heavy-pump-group.png b/angelsrefining/graphics/item-group/heavy-pump-group.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/heavy-pump-group.png rename to angelsrefining/graphics/item-group/heavy-pump-group.png diff --git a/angelsrefining_9.12.4/graphics/item-group/ore-refining.png b/angelsrefining/graphics/item-group/ore-refining.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/ore-refining.png rename to angelsrefining/graphics/item-group/ore-refining.png diff --git a/angelsrefining_9.12.4/graphics/item-group/void-group.png b/angelsrefining/graphics/item-group/void-group.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/void-group.png rename to angelsrefining/graphics/item-group/void-group.png diff --git a/angelsrefining_9.12.4/graphics/item-group/water-treatment-group.png b/angelsrefining/graphics/item-group/water-treatment-group.png similarity index 100% rename from angelsrefining_9.12.4/graphics/item-group/water-treatment-group.png rename to angelsrefining/graphics/item-group/water-treatment-group.png diff --git a/angelsrefining_9.12.4/graphics/technology/Thumbs.db b/angelsrefining/graphics/technology/Thumbs.db similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/Thumbs.db rename to angelsrefining/graphics/technology/Thumbs.db diff --git a/angelsrefining_9.12.4/graphics/technology/barrel-tech.png b/angelsrefining/graphics/technology/barrel-tech.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/barrel-tech.png rename to angelsrefining/graphics/technology/barrel-tech.png diff --git a/angelsrefining_9.12.4/graphics/technology/chemical-refining.png b/angelsrefining/graphics/technology/chemical-refining.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/chemical-refining.png rename to angelsrefining/graphics/technology/chemical-refining.png diff --git a/angelsrefining_9.12.4/graphics/technology/electro-whinning-cell-tech.png b/angelsrefining/graphics/technology/electro-whinning-cell-tech.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/electro-whinning-cell-tech.png rename to angelsrefining/graphics/technology/electro-whinning-cell-tech.png diff --git a/angelsrefining_9.12.4/graphics/technology/geode-processing-blue.png b/angelsrefining/graphics/technology/geode-processing-blue.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/geode-processing-blue.png rename to angelsrefining/graphics/technology/geode-processing-blue.png diff --git a/angelsrefining_9.12.4/graphics/technology/geode-processing-cyan.png b/angelsrefining/graphics/technology/geode-processing-cyan.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/geode-processing-cyan.png rename to angelsrefining/graphics/technology/geode-processing-cyan.png diff --git a/angelsrefining_9.12.4/graphics/technology/geode-processing-green.png b/angelsrefining/graphics/technology/geode-processing-green.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/geode-processing-green.png rename to angelsrefining/graphics/technology/geode-processing-green.png diff --git a/angelsrefining_9.12.4/graphics/technology/geode-processing-red.png b/angelsrefining/graphics/technology/geode-processing-red.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/geode-processing-red.png rename to angelsrefining/graphics/technology/geode-processing-red.png diff --git a/angelsrefining_9.12.4/graphics/technology/geode-processing-yellow.png b/angelsrefining/graphics/technology/geode-processing-yellow.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/geode-processing-yellow.png rename to angelsrefining/graphics/technology/geode-processing-yellow.png diff --git a/angelsrefining_9.12.4/graphics/technology/hydro-refining.png b/angelsrefining/graphics/technology/hydro-refining.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/hydro-refining.png rename to angelsrefining/graphics/technology/hydro-refining.png diff --git a/angelsrefining_9.12.4/graphics/technology/liquifier-tech.png b/angelsrefining/graphics/technology/liquifier-tech.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/liquifier-tech.png rename to angelsrefining/graphics/technology/liquifier-tech.png diff --git a/angelsrefining_9.12.4/graphics/technology/mechanical-refining.png b/angelsrefining/graphics/technology/mechanical-refining.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/mechanical-refining.png rename to angelsrefining/graphics/technology/mechanical-refining.png diff --git a/angelsrefining_9.12.4/graphics/technology/ore-sorting.png b/angelsrefining/graphics/technology/ore-sorting.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/ore-sorting.png rename to angelsrefining/graphics/technology/ore-sorting.png diff --git a/angelsrefining_9.12.4/graphics/technology/powderizer-tech.png b/angelsrefining/graphics/technology/powderizer-tech.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/powderizer-tech.png rename to angelsrefining/graphics/technology/powderizer-tech.png diff --git a/angelsrefining_9.12.4/graphics/technology/slag-processing.png b/angelsrefining/graphics/technology/slag-processing.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/slag-processing.png rename to angelsrefining/graphics/technology/slag-processing.png diff --git a/angelsrefining_9.12.4/graphics/technology/thermal-extractor.png b/angelsrefining/graphics/technology/thermal-extractor.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/thermal-extractor.png rename to angelsrefining/graphics/technology/thermal-extractor.png diff --git a/angelsrefining_9.12.4/graphics/technology/thermal-refining.png b/angelsrefining/graphics/technology/thermal-refining.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/thermal-refining.png rename to angelsrefining/graphics/technology/thermal-refining.png diff --git a/angelsrefining_9.12.4/graphics/technology/washing-plant-tech.png b/angelsrefining/graphics/technology/washing-plant-tech.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/washing-plant-tech.png rename to angelsrefining/graphics/technology/washing-plant-tech.png diff --git a/angelsrefining_9.12.4/graphics/technology/water-treatment.png b/angelsrefining/graphics/technology/water-treatment.png similarity index 100% rename from angelsrefining_9.12.4/graphics/technology/water-treatment.png rename to angelsrefining/graphics/technology/water-treatment.png diff --git a/angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-1-crushing-recipe.png b/angelsrefining/graphics/tips-and-tricks/1-1-1-crushing-recipe.png similarity index 100% rename from angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-1-crushing-recipe.png rename to angelsrefining/graphics/tips-and-tricks/1-1-1-crushing-recipe.png diff --git a/angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-2-floatation-recipe.png b/angelsrefining/graphics/tips-and-tricks/1-1-2-floatation-recipe.png similarity index 100% rename from angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-2-floatation-recipe.png rename to angelsrefining/graphics/tips-and-tricks/1-1-2-floatation-recipe.png diff --git a/angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-3-leaching-recipe.png b/angelsrefining/graphics/tips-and-tricks/1-1-3-leaching-recipe.png similarity index 100% rename from angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-3-leaching-recipe.png rename to angelsrefining/graphics/tips-and-tricks/1-1-3-leaching-recipe.png diff --git a/angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-4-purification-recipe.png b/angelsrefining/graphics/tips-and-tricks/1-1-4-purification-recipe.png similarity index 100% rename from angelsrefining_9.12.4/graphics/tips-and-tricks/1-1-4-purification-recipe.png rename to angelsrefining/graphics/tips-and-tricks/1-1-4-purification-recipe.png diff --git a/angelsrefining/info.json b/angelsrefining/info.json new file mode 100644 index 00000000..871fc510 --- /dev/null +++ b/angelsrefining/info.json @@ -0,0 +1,22 @@ +{ + "name": "angelsrefining", + "version": "0.12.7", + "factorio_version": "1.1", + "title": "Angel's Refining", + "author": "Arch666Angel", + "contact": "https://discord.gg/ff5p6KE", + "homepage": "https://forums.factorio.com/viewforum.php?f=185", + "description": "Adds ore refining to the game. Compound ores have to be refined before you are able to smelt and cast them into plates. Works best (has more functionality) in conjunction with Angel's industries and/or Bob's mods and supports additional mods like Yuoki Industries.", + "dependencies": [ + "base >= 1.1.51", + "? bobplates >= 1.1.6", + "? bobrevamp >= 1.1.5", + "(?) bobmodules", + "(?) boblogistics", + "(?) bobpower", + "? rso-mod >= 2.3.3", + "? Yuoki >= 0.4.0", + "? UraniumPower >= 0.6.4", + "? Nucular >= 0.2.0" + ] +} diff --git a/angelsrefining_9.12.4/license CC BY-NC-ND 4.0.txt b/angelsrefining/license CC BY-NC-ND 4.0.txt similarity index 100% rename from angelsrefining_9.12.4/license CC BY-NC-ND 4.0.txt rename to angelsrefining/license CC BY-NC-ND 4.0.txt diff --git a/angelsrefining_9.12.4/locale/en/compat.cfg b/angelsrefining/locale/en/compat.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/compat.cfg rename to angelsrefining/locale/en/compat.cfg diff --git a/angelsrefining_9.12.4/locale/en/ore-refining-refining.cfg b/angelsrefining/locale/en/ore-refining-refining.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/ore-refining-refining.cfg rename to angelsrefining/locale/en/ore-refining-refining.cfg diff --git a/angelsrefining_9.12.4/locale/en/ore-refining-sorting.cfg b/angelsrefining/locale/en/ore-refining-sorting.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/ore-refining-sorting.cfg rename to angelsrefining/locale/en/ore-refining-sorting.cfg diff --git a/angelsrefining_9.12.4/locale/en/ore-refining.cfg b/angelsrefining/locale/en/ore-refining.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/ore-refining.cfg rename to angelsrefining/locale/en/ore-refining.cfg diff --git a/angelsrefining_9.12.4/locale/en/tips-and-tricks.cfg b/angelsrefining/locale/en/tips-and-tricks.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/tips-and-tricks.cfg rename to angelsrefining/locale/en/tips-and-tricks.cfg diff --git a/angelsrefining_9.12.4/locale/en/water-treatment.cfg b/angelsrefining/locale/en/water-treatment.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/water-treatment.cfg rename to angelsrefining/locale/en/water-treatment.cfg diff --git a/angelsrefining_9.12.4/locale/en/welcome-message.cfg b/angelsrefining/locale/en/welcome-message.cfg similarity index 100% rename from angelsrefining_9.12.4/locale/en/welcome-message.cfg rename to angelsrefining/locale/en/welcome-message.cfg diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.10.lua b/angelsrefining/migrations/angelsrefining_0.11.10.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.10.lua rename to angelsrefining/migrations/angelsrefining_0.11.10.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.11.lua b/angelsrefining/migrations/angelsrefining_0.11.11.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.11.lua rename to angelsrefining/migrations/angelsrefining_0.11.11.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.14.lua b/angelsrefining/migrations/angelsrefining_0.11.14.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.14.lua rename to angelsrefining/migrations/angelsrefining_0.11.14.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.17.json b/angelsrefining/migrations/angelsrefining_0.11.17.json similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.17.json rename to angelsrefining/migrations/angelsrefining_0.11.17.json diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.17.lua b/angelsrefining/migrations/angelsrefining_0.11.17.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.17.lua rename to angelsrefining/migrations/angelsrefining_0.11.17.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.20.lua b/angelsrefining/migrations/angelsrefining_0.11.20.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.20.lua rename to angelsrefining/migrations/angelsrefining_0.11.20.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.11.6.lua b/angelsrefining/migrations/angelsrefining_0.11.6.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.11.6.lua rename to angelsrefining/migrations/angelsrefining_0.11.6.lua diff --git a/angelsrefining_9.12.4/migrations/angelsrefining_0.12.0.lua b/angelsrefining/migrations/angelsrefining_0.12.0.lua similarity index 100% rename from angelsrefining_9.12.4/migrations/angelsrefining_0.12.0.lua rename to angelsrefining/migrations/angelsrefining_0.12.0.lua diff --git a/angelsrefining_9.12.4/prototypes/angels-functions.lua b/angelsrefining/prototypes/angels-functions.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/angels-functions.lua rename to angelsrefining/prototypes/angels-functions.lua diff --git a/angelsrefining_9.12.4/prototypes/angels-settings.lua b/angelsrefining/prototypes/angels-settings.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/angels-settings.lua rename to angelsrefining/prototypes/angels-settings.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/barreling-pump.lua b/angelsrefining/prototypes/buildings/barreling-pump.lua similarity index 97% rename from angelsrefining_9.12.4/prototypes/buildings/barreling-pump.lua rename to angelsrefining/prototypes/buildings/barreling-pump.lua index 340c6d4a..15bc885e 100644 --- a/angelsrefining_9.12.4/prototypes/buildings/barreling-pump.lua +++ b/angelsrefining/prototypes/buildings/barreling-pump.lua @@ -117,6 +117,7 @@ if angelsmods.trigger.enable_auto_barreling then barreling_pump.result_inventory_size = 1 barreling_pump.source_inventory_size = 1 barreling_pump.ingredient_count = nil + barreling_pump.cant_insert_at_source_message_key = "cant_insert.angels-barreling-pump-limitation" end data:extend({ barreling_pump }) diff --git a/angelsrefining_9.12.4/prototypes/buildings/clarifier.lua b/angelsrefining/prototypes/buildings/clarifier.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/clarifier.lua rename to angelsrefining/prototypes/buildings/clarifier.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/crystallizer.lua b/angelsrefining/prototypes/buildings/crystallizer.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/crystallizer.lua rename to angelsrefining/prototypes/buildings/crystallizer.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/electro-whinning-cell.lua b/angelsrefining/prototypes/buildings/electro-whinning-cell.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/electro-whinning-cell.lua rename to angelsrefining/prototypes/buildings/electro-whinning-cell.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/filtration-unit.lua b/angelsrefining/prototypes/buildings/filtration-unit.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/filtration-unit.lua rename to angelsrefining/prototypes/buildings/filtration-unit.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ground-water-pump.lua b/angelsrefining/prototypes/buildings/ground-water-pump.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ground-water-pump.lua rename to angelsrefining/prototypes/buildings/ground-water-pump.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/hydro-plant.lua b/angelsrefining/prototypes/buildings/hydro-plant.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/hydro-plant.lua rename to angelsrefining/prototypes/buildings/hydro-plant.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/liquifier.lua b/angelsrefining/prototypes/buildings/liquifier.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/liquifier.lua rename to angelsrefining/prototypes/buildings/liquifier.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ore-crusher.lua b/angelsrefining/prototypes/buildings/ore-crusher.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ore-crusher.lua rename to angelsrefining/prototypes/buildings/ore-crusher.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ore-floatation-cell.lua b/angelsrefining/prototypes/buildings/ore-floatation-cell.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ore-floatation-cell.lua rename to angelsrefining/prototypes/buildings/ore-floatation-cell.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ore-leaching-plant.lua b/angelsrefining/prototypes/buildings/ore-leaching-plant.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ore-leaching-plant.lua rename to angelsrefining/prototypes/buildings/ore-leaching-plant.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ore-refinery.lua b/angelsrefining/prototypes/buildings/ore-refinery.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ore-refinery.lua rename to angelsrefining/prototypes/buildings/ore-refinery.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/ore-sorting-facility.lua b/angelsrefining/prototypes/buildings/ore-sorting-facility.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/ore-sorting-facility.lua rename to angelsrefining/prototypes/buildings/ore-sorting-facility.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/pipes-overlay.lua b/angelsrefining/prototypes/buildings/pipes-overlay.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/pipes-overlay.lua rename to angelsrefining/prototypes/buildings/pipes-overlay.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/powderizer.lua b/angelsrefining/prototypes/buildings/powderizer.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/powderizer.lua rename to angelsrefining/prototypes/buildings/powderizer.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/salination-plant.lua b/angelsrefining/prototypes/buildings/salination-plant.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/salination-plant.lua rename to angelsrefining/prototypes/buildings/salination-plant.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/seafloor-pump.lua b/angelsrefining/prototypes/buildings/seafloor-pump.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/seafloor-pump.lua rename to angelsrefining/prototypes/buildings/seafloor-pump.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/thermal-extractor.lua b/angelsrefining/prototypes/buildings/thermal-extractor.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/thermal-extractor.lua rename to angelsrefining/prototypes/buildings/thermal-extractor.lua diff --git a/angelsrefining_9.12.4/prototypes/buildings/washing-plant.lua b/angelsrefining/prototypes/buildings/washing-plant.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/buildings/washing-plant.lua rename to angelsrefining/prototypes/buildings/washing-plant.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/angels-crystal-rock.lua b/angelsrefining/prototypes/generation/angels-crystal-rock.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/angels-crystal-rock.lua rename to angelsrefining/prototypes/generation/angels-crystal-rock.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/angels-fissure.lua b/angelsrefining/prototypes/generation/angels-fissure.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/angels-fissure.lua rename to angelsrefining/prototypes/generation/angels-fissure.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/angels-ore.lua b/angelsrefining/prototypes/generation/angels-ore.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/angels-ore.lua rename to angelsrefining/prototypes/generation/angels-ore.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/angels-override.lua b/angelsrefining/prototypes/generation/angels-override.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/angels-override.lua rename to angelsrefining/prototypes/generation/angels-override.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/bob-ore-update.lua b/angelsrefining/prototypes/generation/bob-ore-update.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/bob-ore-update.lua rename to angelsrefining/prototypes/generation/bob-ore-update.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/map-gen-presets.lua b/angelsrefining/prototypes/generation/map-gen-presets.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/map-gen-presets.lua rename to angelsrefining/prototypes/generation/map-gen-presets.lua diff --git a/angelsrefining_9.12.4/prototypes/generation/resource-builder.lua b/angelsrefining/prototypes/generation/resource-builder.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/generation/resource-builder.lua rename to angelsrefining/prototypes/generation/resource-builder.lua diff --git a/angelsrefining_9.12.4/prototypes/items/refining-items.lua b/angelsrefining/prototypes/items/refining-items.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/items/refining-items.lua rename to angelsrefining/prototypes/items/refining-items.lua diff --git a/angelsrefining_9.12.4/prototypes/items/refining-ores.lua b/angelsrefining/prototypes/items/refining-ores.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/items/refining-ores.lua rename to angelsrefining/prototypes/items/refining-ores.lua diff --git a/angelsrefining_9.12.4/prototypes/items/water-treatment-items.lua b/angelsrefining/prototypes/items/water-treatment-items.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/items/water-treatment-items.lua rename to angelsrefining/prototypes/items/water-treatment-items.lua diff --git a/angelsrefining_9.12.4/prototypes/migration-functions.lua b/angelsrefining/prototypes/migration-functions.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/migration-functions.lua rename to angelsrefining/prototypes/migration-functions.lua diff --git a/angelsrefining_9.12.4/prototypes/override-functions.lua b/angelsrefining/prototypes/override-functions.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override-functions.lua rename to angelsrefining/prototypes/override-functions.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-base.lua b/angelsrefining/prototypes/override/refining-override-base.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-base.lua rename to angelsrefining/prototypes/override/refining-override-base.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobequipment.lua b/angelsrefining/prototypes/override/refining-override-bobequipment.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobequipment.lua rename to angelsrefining/prototypes/override/refining-override-bobequipment.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobgems.lua b/angelsrefining/prototypes/override/refining-override-bobgems.lua similarity index 98% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobgems.lua rename to angelsrefining/prototypes/override/refining-override-bobgems.lua index 384d202a..6a94b96b 100644 --- a/angelsrefining_9.12.4/prototypes/override/refining-override-bobgems.lua +++ b/angelsrefining/prototypes/override/refining-override-bobgems.lua @@ -12,7 +12,7 @@ local create_single_gem_crystallization = function(recipe_bace_name, ores) local ore_name = type(ore_data) == "table" and ore_data[1] or ore_data local ore_amount = type(ore_data) == "table" and ore_data[2] or 1 if data.raw.item[ore_name] and ore_amount > 0 then - table.insert(recipe.results, { ore_name, ore_amount }) + table.insert(recipe.results, { name = ore_name, amount = ore_amount }) recipe.order = type(ore_data) == "table" and ore_data[3] or nil recipe.icons = angelsmods.functions.create_liquid_recipe_icon( { ore_name }, diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-boblogistics.lua b/angelsrefining/prototypes/override/refining-override-boblogistics.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-boblogistics.lua rename to angelsrefining/prototypes/override/refining-override-boblogistics.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobmining.lua b/angelsrefining/prototypes/override/refining-override-bobmining.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobmining.lua rename to angelsrefining/prototypes/override/refining-override-bobmining.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobmodules.lua b/angelsrefining/prototypes/override/refining-override-bobmodules.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobmodules.lua rename to angelsrefining/prototypes/override/refining-override-bobmodules.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobores.lua b/angelsrefining/prototypes/override/refining-override-bobores.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobores.lua rename to angelsrefining/prototypes/override/refining-override-bobores.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobplates.lua b/angelsrefining/prototypes/override/refining-override-bobplates.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobplates.lua rename to angelsrefining/prototypes/override/refining-override-bobplates.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobpower.lua b/angelsrefining/prototypes/override/refining-override-bobpower.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobpower.lua rename to angelsrefining/prototypes/override/refining-override-bobpower.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobrevamp.lua b/angelsrefining/prototypes/override/refining-override-bobrevamp.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobrevamp.lua rename to angelsrefining/prototypes/override/refining-override-bobrevamp.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobtech.lua b/angelsrefining/prototypes/override/refining-override-bobtech.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobtech.lua rename to angelsrefining/prototypes/override/refining-override-bobtech.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobvehicleequipment.lua b/angelsrefining/prototypes/override/refining-override-bobvehicleequipment.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobvehicleequipment.lua rename to angelsrefining/prototypes/override/refining-override-bobvehicleequipment.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-bobwarfare.lua b/angelsrefining/prototypes/override/refining-override-bobwarfare.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-bobwarfare.lua rename to angelsrefining/prototypes/override/refining-override-bobwarfare.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-refining.lua b/angelsrefining/prototypes/override/refining-override-refining.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-refining.lua rename to angelsrefining/prototypes/override/refining-override-refining.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-smelting.lua b/angelsrefining/prototypes/override/refining-override-smelting.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-smelting.lua rename to angelsrefining/prototypes/override/refining-override-smelting.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-sorting.lua b/angelsrefining/prototypes/override/refining-override-sorting.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-sorting.lua rename to angelsrefining/prototypes/override/refining-override-sorting.lua diff --git a/angelsrefining_9.12.4/prototypes/override/refining-override-water-treatment.lua b/angelsrefining/prototypes/override/refining-override-water-treatment.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/override/refining-override-water-treatment.lua rename to angelsrefining/prototypes/override/refining-override-water-treatment.lua diff --git a/angelsrefining_9.12.4/prototypes/recipe-builder-fallbacks.lua b/angelsrefining/prototypes/recipe-builder-fallbacks.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipe-builder-fallbacks.lua rename to angelsrefining/prototypes/recipe-builder-fallbacks.lua diff --git a/angelsrefining_9.12.4/prototypes/recipe-builder.lua b/angelsrefining/prototypes/recipe-builder.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipe-builder.lua rename to angelsrefining/prototypes/recipe-builder.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic.lua b/angelsrefining/prototypes/recipes/refining-dynamic.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic.lua rename to angelsrefining/prototypes/recipes/refining-dynamic.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/chunk-processing-dust-mix.lua b/angelsrefining/prototypes/recipes/refining-dynamic/chunk-processing-dust-mix.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/chunk-processing-dust-mix.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/chunk-processing-dust-mix.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/chunk-processing.lua b/angelsrefining/prototypes/recipes/refining-dynamic/chunk-processing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/chunk-processing.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/chunk-processing.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-processing-powder-mix.lua b/angelsrefining/prototypes/recipes/refining-dynamic/crushed-processing-powder-mix.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-processing-powder-mix.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/crushed-processing-powder-mix.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-processing.lua b/angelsrefining/prototypes/recipes/refining-dynamic/crushed-processing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-processing.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/crushed-processing.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-smelting.lua b/angelsrefining/prototypes/recipes/refining-dynamic/crushed-smelting.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crushed-smelting.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/crushed-smelting.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crystal-processing-mix.lua b/angelsrefining/prototypes/recipes/refining-dynamic/crystal-processing-mix.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crystal-processing-mix.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/crystal-processing-mix.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crystal-processing.lua b/angelsrefining/prototypes/recipes/refining-dynamic/crystal-processing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/crystal-processing.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/crystal-processing.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/gems.lua b/angelsrefining/prototypes/recipes/refining-dynamic/gems.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/gems.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/gems.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/geodes.lua b/angelsrefining/prototypes/recipes/refining-dynamic/geodes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/geodes.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/geodes.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/pure-processing-mix.lua b/angelsrefining/prototypes/recipes/refining-dynamic/pure-processing-mix.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/pure-processing-mix.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/pure-processing-mix.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/pure-processing.lua b/angelsrefining/prototypes/recipes/refining-dynamic/pure-processing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/pure-processing.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/pure-processing.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/slag-stone.lua b/angelsrefining/prototypes/recipes/refining-dynamic/slag-stone.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-dynamic/slag-stone.lua rename to angelsrefining/prototypes/recipes/refining-dynamic/slag-stone.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-entity-angels.lua b/angelsrefining/prototypes/recipes/refining-entity-angels.lua similarity index 98% rename from angelsrefining_9.12.4/prototypes/recipes/refining-entity-angels.lua rename to angelsrefining/prototypes/recipes/refining-entity-angels.lua index c8dfb8b6..7cdebc82 100644 --- a/angelsrefining_9.12.4/prototypes/recipes/refining-entity-angels.lua +++ b/angelsrefining/prototypes/recipes/refining-entity-angels.lua @@ -619,11 +619,11 @@ angelsmods.functions.RB.build({ energy_required = 5, enabled = false, ingredients = { - {type = "item", name = "liqui-1", amount = 1}, - {type = "item", name = "t0-plate", amount = 20}, --drd - {type = "item", name = "t0-circuit", amount = 2}, - {type = "item", name = "t0-pipe", amount = 16}, --drd - {type = "item", name = "t0-brick", amount = 8} --drd + { type = "item", name = "liqui-1", amount = 1 }, + { type = "item", name = "t0-plate", amount = 2 }, + { type = "item", name = "t0-circuit", amount = 2 }, + { type = "item", name = "t0-pipe", amount = 2 }, + { type = "item", name = "t0-brick", amount = 2 }, }, result = "liquifier", }, @@ -631,11 +631,11 @@ angelsmods.functions.RB.build({ energy_required = 5 * buildingtime, enabled = false, ingredients = { - {type = "item", name = "liqui-1", amount = 1}, - {type = "item", name = "t0-plate", amount = 20 * buildingmulti}, --drd - {type = "item", name = "t0-circuit", amount = 2 * buildingmulti}, - {type = "item", name = "t0-pipe", amount = 16 * buildingmulti}, --drd - {type = "item", name = "t0-brick", amount = 8 * buildingmulti} --drd + { type = "item", name = "liqui-1", amount = 1 }, + { type = "item", name = "t0-plate", amount = 2 * buildingmulti }, + { type = "item", name = "t0-circuit", amount = 2 * buildingmulti }, + { type = "item", name = "t0-pipe", amount = 2 * buildingmulti }, + { type = "item", name = "t0-brick", amount = 2 * buildingmulti }, }, result = "liquifier", }, @@ -764,7 +764,7 @@ angelsmods.functions.RB.build({ enabled = false, ingredients = { { type = "item", name = "thermal-2", amount = 1 }, - { type = "item", name = "t3-plate", amount = 60 }, --DrD + { type = "item", name = "t3-plate", amount = 6 }, { type = "item", name = "t3-circuit", amount = 4 }, { type = "item", name = "t3-pipe", amount = 4 }, { type = "item", name = "t3-brick", amount = 4 }, @@ -777,7 +777,7 @@ angelsmods.functions.RB.build({ enabled = false, ingredients = { { type = "item", name = "thermal-2", amount = 1 }, - { type = "item", name = "t3-plate", amount = 60 * buildingmulti }, --DrD + { type = "item", name = "t3-plate", amount = 6 * buildingmulti }, { type = "item", name = "t3-circuit", amount = 4 * buildingmulti }, { type = "item", name = "t3-pipe", amount = 4 * buildingmulti }, { type = "item", name = "t3-brick", amount = 4 * buildingmulti }, diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-entity.lua b/angelsrefining/prototypes/recipes/refining-entity.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/refining-entity.lua rename to angelsrefining/prototypes/recipes/refining-entity.lua diff --git a/angelsrefining_9.12.4/prototypes/recipes/refining-static.lua b/angelsrefining/prototypes/recipes/refining-static.lua similarity index 99% rename from angelsrefining_9.12.4/prototypes/recipes/refining-static.lua rename to angelsrefining/prototypes/recipes/refining-static.lua index faa02586..a7d21ba7 100644 --- a/angelsrefining_9.12.4/prototypes/recipes/refining-static.lua +++ b/angelsrefining/prototypes/recipes/refining-static.lua @@ -665,7 +665,7 @@ data:extend({ type = "recipe", name = "angelsore8-anode-sludge-filtering", localised_name = { "recipe-name.angelsore8-solution-filtering" }, - category = "filtering-2", + category = "filtering-3", subgroup = "ore-processing-c", energy_required = 2, enabled = false, @@ -723,7 +723,7 @@ data:extend({ type = "recipe", name = "angelsore8-crystal", localised_name = { "recipe-name.angelsore8-crystal" }, - category = "crystallizing-2", + category = "crystallizing-3", subgroup = "ore-processing-d", energy_required = 2, enabled = false, @@ -771,7 +771,7 @@ data:extend({ type = "recipe", name = "angelsore9-anode-sludge-filtering", localised_name = { "recipe-name.angelsore9-solution-filtering" }, - category = "filtering-2", + category = "filtering-3", subgroup = "ore-processing-c", energy_required = 2, enabled = false, @@ -829,7 +829,7 @@ data:extend({ type = "recipe", name = "angelsore9-crystal", localised_name = { "recipe-name.angelsore9-crystal" }, - category = "crystallizing-2", + category = "crystallizing-3", subgroup = "ore-processing-d", energy_required = 2, enabled = false, @@ -1514,7 +1514,7 @@ data:extend({ { type = "recipe", name = "catalysator-green", - category = "crystallizing", + category = "crystallizing-2", subgroup = "geode-crystallization", energy_required = 0.5, enabled = false, diff --git a/angelsrefining_9.12.4/prototypes/recipes/water-treatment-recipes.lua b/angelsrefining/prototypes/recipes/water-treatment-recipes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/recipes/water-treatment-recipes.lua rename to angelsrefining/prototypes/recipes/water-treatment-recipes.lua diff --git a/angelsrefining_9.12.4/prototypes/refining-category.lua b/angelsrefining/prototypes/refining-category.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/refining-category.lua rename to angelsrefining/prototypes/refining-category.lua diff --git a/angelsrefining_9.12.4/prototypes/refining-generate.lua b/angelsrefining/prototypes/refining-generate.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/refining-generate.lua rename to angelsrefining/prototypes/refining-generate.lua diff --git a/angelsrefining_9.12.4/prototypes/refining-override.lua b/angelsrefining/prototypes/refining-override.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/refining-override.lua rename to angelsrefining/prototypes/refining-override.lua diff --git a/angelsrefining_9.12.4/prototypes/technology/refining-technology.lua b/angelsrefining/prototypes/technology/refining-technology.lua similarity index 99% rename from angelsrefining_9.12.4/prototypes/technology/refining-technology.lua rename to angelsrefining/prototypes/technology/refining-technology.lua index 8f77f36f..b3a86de8 100644 --- a/angelsrefining_9.12.4/prototypes/technology/refining-technology.lua +++ b/angelsrefining/prototypes/technology/refining-technology.lua @@ -127,6 +127,7 @@ data:extend({ prerequisites = { --"ore-crushing", "ore-floatation", + "slag-processing-1", "water-washing-2", }, effects = { @@ -327,6 +328,7 @@ data:extend({ "geode-processing-2", "chemical-science-pack", "ore-powderizer", + "slag-processing-2", }, effects = { { @@ -452,6 +454,7 @@ data:extend({ prerequisites = { "slag-processing-1", "ore-leaching", + "geode-processing-2", }, effects = { { @@ -466,6 +469,10 @@ data:extend({ type = "unlock-recipe", recipe = "liquifier-3", }, + { + type = "unlock-recipe", + recipe = "catalysator-green", + }, { type = "unlock-recipe", recipe = "slag-processing-4", @@ -482,14 +489,6 @@ data:extend({ type = "unlock-recipe", recipe = "slag-processing-7", }, - { - type = "unlock-recipe", - recipe = "slag-processing-8", - }, - { - type = "unlock-recipe", - recipe = "slag-processing-9", - }, { type = "unlock-recipe", recipe = "filter-ceramic", @@ -541,6 +540,14 @@ data:extend({ type = "unlock-recipe", recipe = "catalysator-orange", }, + { + type = "unlock-recipe", + recipe = "slag-processing-8", + }, + { + type = "unlock-recipe", + recipe = "slag-processing-9", + }, }, unit = { count = 50, diff --git a/angelsrefining_9.12.4/prototypes/technology/water-treatment-technology.lua b/angelsrefining/prototypes/technology/water-treatment-technology.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/technology/water-treatment-technology.lua rename to angelsrefining/prototypes/technology/water-treatment-technology.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks-functions.lua b/angelsrefining/prototypes/tips-and-tricks-functions.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks-functions.lua rename to angelsrefining/prototypes/tips-and-tricks-functions.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-init.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-init.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-init.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-init.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-prototypes.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-prototypes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-prototypes.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing-simulation-prototypes.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-1-crushing/1-1-1-crushing.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-init.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-init.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-init.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-init.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-prototypes.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-prototypes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-prototypes.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation-simulation-prototypes.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-2-floatation/1-1-2-floatation.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-init.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-init.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-init.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-init.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-prototypes.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-prototypes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-prototypes.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching-simulation-prototypes.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-3-leaching/1-1-3-leaching.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-init.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-init.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-init.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-init.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-prototypes.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-prototypes.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-prototypes.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification-simulation-prototypes.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-4-purification/1-1-4-purification.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining.lua b/angelsrefining/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining.lua rename to angelsrefining/prototypes/tips-and-tricks/1-1-ore-refining/1-1-ore-refining.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting.lua b/angelsrefining/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting.lua rename to angelsrefining/prototypes/tips-and-tricks/1-2-ore-sorting/1-2-ore-sorting.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing.lua b/angelsrefining/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing.lua rename to angelsrefining/prototypes/tips-and-tricks/1-3-water-processing/1-3-water-processing.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-description.lua b/angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-description.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-description.lua rename to angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-description.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-simulation.lua b/angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-simulation.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-simulation.lua rename to angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation-simulation.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation.lua b/angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation.lua rename to angelsrefining/prototypes/tips-and-tricks/1-ore-generation/1-ore-generation.lua diff --git a/angelsrefining_9.12.4/prototypes/tips-and-tricks/tips-and-tricks.lua b/angelsrefining/prototypes/tips-and-tricks/tips-and-tricks.lua similarity index 100% rename from angelsrefining_9.12.4/prototypes/tips-and-tricks/tips-and-tricks.lua rename to angelsrefining/prototypes/tips-and-tricks/tips-and-tricks.lua diff --git a/angelsrefining_9.12.4/settings-updates.lua b/angelsrefining/settings-updates.lua similarity index 100% rename from angelsrefining_9.12.4/settings-updates.lua rename to angelsrefining/settings-updates.lua diff --git a/angelsrefining_9.12.4/settings.lua b/angelsrefining/settings.lua similarity index 100% rename from angelsrefining_9.12.4/settings.lua rename to angelsrefining/settings.lua diff --git a/angelsrefining_9.12.4/sound/filtration-unit.ogg b/angelsrefining/sound/filtration-unit.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/filtration-unit.ogg rename to angelsrefining/sound/filtration-unit.ogg diff --git a/angelsrefining_9.12.4/sound/ore-crusher.ogg b/angelsrefining/sound/ore-crusher.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-crusher.ogg rename to angelsrefining/sound/ore-crusher.ogg diff --git a/angelsrefining_9.12.4/sound/ore-floatation-cell.ogg b/angelsrefining/sound/ore-floatation-cell.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-floatation-cell.ogg rename to angelsrefining/sound/ore-floatation-cell.ogg diff --git a/angelsrefining_9.12.4/sound/ore-leaching-plant.ogg b/angelsrefining/sound/ore-leaching-plant.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-leaching-plant.ogg rename to angelsrefining/sound/ore-leaching-plant.ogg diff --git a/angelsrefining_9.12.4/sound/ore-powderizer.ogg b/angelsrefining/sound/ore-powderizer.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-powderizer.ogg rename to angelsrefining/sound/ore-powderizer.ogg diff --git a/angelsrefining_9.12.4/sound/ore-refinery.ogg b/angelsrefining/sound/ore-refinery.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-refinery.ogg rename to angelsrefining/sound/ore-refinery.ogg diff --git a/angelsrefining_9.12.4/sound/ore-sorting-facility.ogg b/angelsrefining/sound/ore-sorting-facility.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/ore-sorting-facility.ogg rename to angelsrefining/sound/ore-sorting-facility.ogg diff --git a/angelsrefining_9.12.4/sound/thermal-extractor.ogg b/angelsrefining/sound/thermal-extractor.ogg similarity index 100% rename from angelsrefining_9.12.4/sound/thermal-extractor.ogg rename to angelsrefining/sound/thermal-extractor.ogg diff --git a/angelsrefining_9.12.4/src/ground_water_pump.lua b/angelsrefining/src/ground_water_pump.lua similarity index 100% rename from angelsrefining_9.12.4/src/ground_water_pump.lua rename to angelsrefining/src/ground_water_pump.lua diff --git a/angelsrefining_9.12.4/src/starting_items.lua b/angelsrefining/src/starting_items.lua similarity index 100% rename from angelsrefining_9.12.4/src/starting_items.lua rename to angelsrefining/src/starting_items.lua diff --git a/angelsrefining_9.12.4/src/welcome_dialog.lua b/angelsrefining/src/welcome_dialog.lua similarity index 100% rename from angelsrefining_9.12.4/src/welcome_dialog.lua rename to angelsrefining/src/welcome_dialog.lua diff --git a/angelsrefining_9.12.4/thumbnail.png b/angelsrefining/thumbnail.png similarity index 100% rename from angelsrefining_9.12.4/thumbnail.png rename to angelsrefining/thumbnail.png diff --git a/angelsrefining_9.12.4/info.json b/angelsrefining_9.12.4/info.json deleted file mode 100644 index 067a5b26..00000000 --- a/angelsrefining_9.12.4/info.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "angelsrefining", - "version": "9.12.4", - "factorio_version": "1.1", - "title": "Angel's Refining", - "author": "Arch666Angel", - "contact": "https://discord.gg/ff5p6KE", - "homepage": "https://forums.factorio.com/viewforum.php?f=185", - "description": "Adds ore refining to the game. Compound ores have to be refined before you are able to smelt and cast them into plates. Works best (has more functionality) in conjunction with Angel's industries and/or Bob's mods and supports additional mods like Yuoki Industries.", - "dependencies": [ - "base >= 1.1.51", - "? bobplates >= 1.1.6", - "? bobrevamp >= 1.1.5", - "(?) bobmodules", - "(?) boblogistics", - "(?) bobpower", - "? rso-mod >= 2.3.3", - "? Yuoki >= 0.4.0", - "? UraniumPower >= 0.6.4", - "? Nucular >= 0.2.0" - ] -} diff --git a/angelssmelting_9.6.21/changelog.txt b/angelssmelting/changelog.txt similarity index 100% rename from angelssmelting_9.6.21/changelog.txt rename to angelssmelting/changelog.txt diff --git a/angelssmelting_9.6.21/data-final-fixes.lua b/angelssmelting/data-final-fixes.lua similarity index 100% rename from angelssmelting_9.6.21/data-final-fixes.lua rename to angelssmelting/data-final-fixes.lua diff --git a/angelssmelting_9.6.21/data-updates.lua b/angelssmelting/data-updates.lua similarity index 100% rename from angelssmelting_9.6.21/data-updates.lua rename to angelssmelting/data-updates.lua diff --git a/angelssmelting_9.6.21/data.lua b/angelssmelting/data.lua similarity index 100% rename from angelssmelting_9.6.21/data.lua rename to angelssmelting/data.lua diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-base.png b/angelssmelting/graphics/entity/blast-furnace/blast-furnace-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-base.png rename to angelssmelting/graphics/entity/blast-furnace/blast-furnace-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-fire.png b/angelssmelting/graphics/entity/blast-furnace/blast-furnace-fire.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-fire.png rename to angelssmelting/graphics/entity/blast-furnace/blast-furnace-fire.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-glow.png b/angelssmelting/graphics/entity/blast-furnace/blast-furnace-glow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-glow.png rename to angelssmelting/graphics/entity/blast-furnace/blast-furnace-glow.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-shadow.png b/angelssmelting/graphics/entity/blast-furnace/blast-furnace-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-shadow.png rename to angelssmelting/graphics/entity/blast-furnace/blast-furnace-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-working-light.png b/angelssmelting/graphics/entity/blast-furnace/blast-furnace-working-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/blast-furnace-working-light.png rename to angelssmelting/graphics/entity/blast-furnace/blast-furnace-working-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-base.png b/angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-base.png rename to angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-fire.png b/angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-fire.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-fire.png rename to angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-fire.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-shadow.png b/angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-shadow.png rename to angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-working-light.png b/angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-working-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/blast-furnace/hr-blast-furnace-working-light.png rename to angelssmelting/graphics/entity/blast-furnace/hr-blast-furnace-working-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-base.png b/angelssmelting/graphics/entity/casting-machine/casting-machine-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-base.png rename to angelssmelting/graphics/entity/casting-machine/casting-machine-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-light.png b/angelssmelting/graphics/entity/casting-machine/casting-machine-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-light.png rename to angelssmelting/graphics/entity/casting-machine/casting-machine-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-shadow.png b/angelssmelting/graphics/entity/casting-machine/casting-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/casting-machine-shadow.png rename to angelssmelting/graphics/entity/casting-machine/casting-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-base.png b/angelssmelting/graphics/entity/casting-machine/hr-casting-machine-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-base.png rename to angelssmelting/graphics/entity/casting-machine/hr-casting-machine-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-light.png b/angelssmelting/graphics/entity/casting-machine/hr-casting-machine-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-light.png rename to angelssmelting/graphics/entity/casting-machine/hr-casting-machine-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-shadow.png b/angelssmelting/graphics/entity/casting-machine/hr-casting-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/casting-machine/hr-casting-machine-shadow.png rename to angelssmelting/graphics/entity/casting-machine/hr-casting-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-base.png b/angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-base.png rename to angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-light.png b/angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-light.png rename to angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-shadow.png b/angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/chemical-furnace-shadow.png rename to angelssmelting/graphics/entity/chemical-furnace/chemical-furnace-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-base_01.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-base_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-base_01.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-base_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-base_02.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-base_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-base_02.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-base_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-light_01.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-light_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-light_01.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-light_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-light_02.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-light_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-light_02.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-light_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_01.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_01.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_02.png b/angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_02.png rename to angelssmelting/graphics/entity/chemical-furnace/hr-chemical-furnace-shadow_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/cooling-tower-shadow.png b/angelssmelting/graphics/entity/cooling-tower/cooling-tower-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/cooling-tower-shadow.png rename to angelssmelting/graphics/entity/cooling-tower/cooling-tower-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/cooling-tower.png b/angelssmelting/graphics/entity/cooling-tower/cooling-tower.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/cooling-tower.png rename to angelssmelting/graphics/entity/cooling-tower/cooling-tower.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/fan-animation.png b/angelssmelting/graphics/entity/cooling-tower/fan-animation.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/fan-animation.png rename to angelssmelting/graphics/entity/cooling-tower/fan-animation.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-cooling-tower-shadow.png b/angelssmelting/graphics/entity/cooling-tower/hr-cooling-tower-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-cooling-tower-shadow.png rename to angelssmelting/graphics/entity/cooling-tower/hr-cooling-tower-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-cooling-tower.png b/angelssmelting/graphics/entity/cooling-tower/hr-cooling-tower.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-cooling-tower.png rename to angelssmelting/graphics/entity/cooling-tower/hr-cooling-tower.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-fan-animation.png b/angelssmelting/graphics/entity/cooling-tower/hr-fan-animation.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-fan-animation.png rename to angelssmelting/graphics/entity/cooling-tower/hr-fan-animation.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-vertical-pipe-shadow-patch.png b/angelssmelting/graphics/entity/cooling-tower/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/hr-vertical-pipe-shadow-patch.png rename to angelssmelting/graphics/entity/cooling-tower/hr-vertical-pipe-shadow-patch.png diff --git a/angelssmelting_9.6.21/graphics/entity/cooling-tower/vertical-pipe-shadow-patch.png b/angelssmelting/graphics/entity/cooling-tower/vertical-pipe-shadow-patch.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/cooling-tower/vertical-pipe-shadow-patch.png rename to angelssmelting/graphics/entity/cooling-tower/vertical-pipe-shadow-patch.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-base_01.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-base_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-base_01.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-base_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-base_02.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-base_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-base_02.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-base_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-shadow_01.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-shadow_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-shadow_01.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-shadow_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-shadow_02.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-shadow_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-shadow_02.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-shadow_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_01.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_01.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_02.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_02.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-lights_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_01.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_01.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_01.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_01.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_02.png b/angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_02.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_02.png rename to angelssmelting/graphics/entity/induction-furnace/hr-induction-furnace-working-recipe-tint-mask_02.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-vertical-pipe-shadow-patch.png b/angelssmelting/graphics/entity/induction-furnace/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/hr-vertical-pipe-shadow-patch.png rename to angelssmelting/graphics/entity/induction-furnace/hr-vertical-pipe-shadow-patch.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-base.png b/angelssmelting/graphics/entity/induction-furnace/induction-furnace-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-base.png rename to angelssmelting/graphics/entity/induction-furnace/induction-furnace-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-shadow.png b/angelssmelting/graphics/entity/induction-furnace/induction-furnace-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-shadow.png rename to angelssmelting/graphics/entity/induction-furnace/induction-furnace-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-working-lights.png b/angelssmelting/graphics/entity/induction-furnace/induction-furnace-working-lights.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-working-lights.png rename to angelssmelting/graphics/entity/induction-furnace/induction-furnace-working-lights.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-working-recipe-tint-mask.png b/angelssmelting/graphics/entity/induction-furnace/induction-furnace-working-recipe-tint-mask.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/induction-furnace-working-recipe-tint-mask.png rename to angelssmelting/graphics/entity/induction-furnace/induction-furnace-working-recipe-tint-mask.png diff --git a/angelssmelting_9.6.21/graphics/entity/induction-furnace/vertical-pipe-shadow-patch.png b/angelssmelting/graphics/entity/induction-furnace/vertical-pipe-shadow-patch.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/induction-furnace/vertical-pipe-shadow-patch.png rename to angelssmelting/graphics/entity/induction-furnace/vertical-pipe-shadow-patch.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-base.png b/angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-base.png rename to angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-dust.png b/angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-dust.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-dust.png rename to angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-dust.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-shadow.png b/angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-shadow.png rename to angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-top.png b/angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-top.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/hr-ore-processing-machine-top.png rename to angelssmelting/graphics/entity/ore-processing-machine/hr-ore-processing-machine-top.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-base.png b/angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-base.png rename to angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-dust.png b/angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-dust.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-dust.png rename to angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-dust.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-shadow.png b/angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-shadow.png rename to angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-top.png b/angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-top.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/ore-processing-machine/ore-processing-machine-top.png rename to angelssmelting/graphics/entity/ore-processing-machine/ore-processing-machine-top.png diff --git a/angelssmelting_9.6.21/graphics/entity/pellet-press/hr-pellet-press-base.png b/angelssmelting/graphics/entity/pellet-press/hr-pellet-press-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/pellet-press/hr-pellet-press-base.png rename to angelssmelting/graphics/entity/pellet-press/hr-pellet-press-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/pellet-press/hr-pellet-press-shadow.png b/angelssmelting/graphics/entity/pellet-press/hr-pellet-press-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/pellet-press/hr-pellet-press-shadow.png rename to angelssmelting/graphics/entity/pellet-press/hr-pellet-press-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/pellet-press/pellet-press-base.png b/angelssmelting/graphics/entity/pellet-press/pellet-press-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/pellet-press/pellet-press-base.png rename to angelssmelting/graphics/entity/pellet-press/pellet-press-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/pellet-press/pellet-press-shadow.png b/angelssmelting/graphics/entity/pellet-press/pellet-press-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/pellet-press/pellet-press-shadow.png rename to angelssmelting/graphics/entity/pellet-press/pellet-press-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/powder-mixer/hr-powder-mixer-base.png b/angelssmelting/graphics/entity/powder-mixer/hr-powder-mixer-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/powder-mixer/hr-powder-mixer-base.png rename to angelssmelting/graphics/entity/powder-mixer/hr-powder-mixer-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/powder-mixer/hr-powder-mixer-shadow.png b/angelssmelting/graphics/entity/powder-mixer/hr-powder-mixer-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/powder-mixer/hr-powder-mixer-shadow.png rename to angelssmelting/graphics/entity/powder-mixer/hr-powder-mixer-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/powder-mixer/powder-mixer-base.png b/angelssmelting/graphics/entity/powder-mixer/powder-mixer-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/powder-mixer/powder-mixer-base.png rename to angelssmelting/graphics/entity/powder-mixer/powder-mixer-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/powder-mixer/powder-mixer-shadow.png b/angelssmelting/graphics/entity/powder-mixer/powder-mixer-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/powder-mixer/powder-mixer-shadow.png rename to angelssmelting/graphics/entity/powder-mixer/powder-mixer-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-base.png b/angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-base.png rename to angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-glow.png b/angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-glow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-glow.png rename to angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-glow.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-light.png b/angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-light.png rename to angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-shadow.png b/angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/hr-sintering-oven-shadow.png rename to angelssmelting/graphics/entity/sintering-oven/hr-sintering-oven-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-base.png b/angelssmelting/graphics/entity/sintering-oven/sintering-oven-base.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-base.png rename to angelssmelting/graphics/entity/sintering-oven/sintering-oven-base.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-glow.png b/angelssmelting/graphics/entity/sintering-oven/sintering-oven-glow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-glow.png rename to angelssmelting/graphics/entity/sintering-oven/sintering-oven-glow.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-light.png b/angelssmelting/graphics/entity/sintering-oven/sintering-oven-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-light.png rename to angelssmelting/graphics/entity/sintering-oven/sintering-oven-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-shadow.png b/angelssmelting/graphics/entity/sintering-oven/sintering-oven-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/sintering-oven/sintering-oven-shadow.png rename to angelssmelting/graphics/entity/sintering-oven/sintering-oven-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-idle-state.png b/angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-idle-state.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-idle-state.png rename to angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-idle-state.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-light.png b/angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-light.png rename to angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-recipe-mask.png b/angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-recipe-mask.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-recipe-mask.png rename to angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-recipe-mask.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-shadow.png b/angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-shadow.png rename to angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-working-animation.png b/angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-working-animation.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/hr-strand-casting-machine-working-animation.png rename to angelssmelting/graphics/entity/strand-casting-machine/hr-strand-casting-machine-working-animation.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-idle-state.png b/angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-idle-state.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-idle-state.png rename to angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-idle-state.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-light.png b/angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-light.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-light.png rename to angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-light.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-recipe-mask.png b/angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-recipe-mask.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-recipe-mask.png rename to angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-recipe-mask.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-shadow.png b/angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-shadow.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-shadow.png rename to angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-shadow.png diff --git a/angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-working-animation.png b/angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-working-animation.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/strand-casting-machine/strand-casting-machine-working-animation.png rename to angelssmelting/graphics/entity/strand-casting-machine/strand-casting-machine-working-animation.png diff --git a/angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-inner.png b/angelssmelting/graphics/entity/tiles/clay-bricks-inner.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-inner.png rename to angelssmelting/graphics/entity/tiles/clay-bricks-inner.png diff --git a/angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-outer.png b/angelssmelting/graphics/entity/tiles/clay-bricks-outer.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-outer.png rename to angelssmelting/graphics/entity/tiles/clay-bricks-outer.png diff --git a/angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-side.png b/angelssmelting/graphics/entity/tiles/clay-bricks-side.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-side.png rename to angelssmelting/graphics/entity/tiles/clay-bricks-side.png diff --git a/angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-small.png b/angelssmelting/graphics/entity/tiles/clay-bricks-small.png similarity index 100% rename from angelssmelting_9.6.21/graphics/entity/tiles/clay-bricks-small.png rename to angelssmelting/graphics/entity/tiles/clay-bricks-small.png diff --git a/angelssmelting_9.6.21/graphics/icons/anode-copper.png b/angelssmelting/graphics/icons/anode-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/anode-copper.png rename to angelssmelting/graphics/icons/anode-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/anode-lead.png b/angelssmelting/graphics/icons/anode-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/anode-lead.png rename to angelssmelting/graphics/icons/anode-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/blast-furnace.png b/angelssmelting/graphics/icons/blast-furnace.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/blast-furnace.png rename to angelssmelting/graphics/icons/blast-furnace.png diff --git a/angelssmelting_9.6.21/graphics/icons/brick-clay-raw.png b/angelssmelting/graphics/icons/brick-clay-raw.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/brick-clay-raw.png rename to angelssmelting/graphics/icons/brick-clay-raw.png diff --git a/angelssmelting_9.6.21/graphics/icons/brick-clay.png b/angelssmelting/graphics/icons/brick-clay.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/brick-clay.png rename to angelssmelting/graphics/icons/brick-clay.png diff --git a/angelssmelting_9.6.21/graphics/icons/brick-concrete.png b/angelssmelting/graphics/icons/brick-concrete.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/brick-concrete.png rename to angelssmelting/graphics/icons/brick-concrete.png diff --git a/angelssmelting_9.6.21/graphics/icons/brick-reinforced.png b/angelssmelting/graphics/icons/brick-reinforced.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/brick-reinforced.png rename to angelssmelting/graphics/icons/brick-reinforced.png diff --git a/angelssmelting_9.6.21/graphics/icons/casting-machine.png b/angelssmelting/graphics/icons/casting-machine.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/casting-machine.png rename to angelssmelting/graphics/icons/casting-machine.png diff --git a/angelssmelting_9.6.21/graphics/icons/cathode-gold.png b/angelssmelting/graphics/icons/cathode-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cathode-gold.png rename to angelssmelting/graphics/icons/cathode-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/cathode-manganese.png b/angelssmelting/graphics/icons/cathode-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cathode-manganese.png rename to angelssmelting/graphics/icons/cathode-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/cathode-nickel.png b/angelssmelting/graphics/icons/cathode-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cathode-nickel.png rename to angelssmelting/graphics/icons/cathode-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/cathode-silver.png b/angelssmelting/graphics/icons/cathode-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cathode-silver.png rename to angelssmelting/graphics/icons/cathode-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/cathode-zinc.png b/angelssmelting/graphics/icons/cathode-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cathode-zinc.png rename to angelssmelting/graphics/icons/cathode-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/chemical-furnace.png b/angelssmelting/graphics/icons/chemical-furnace.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/chemical-furnace.png rename to angelssmelting/graphics/icons/chemical-furnace.png diff --git a/angelssmelting_9.6.21/graphics/icons/cooling-tower.png b/angelssmelting/graphics/icons/cooling-tower.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/cooling-tower.png rename to angelssmelting/graphics/icons/cooling-tower.png diff --git a/angelssmelting_9.6.21/graphics/icons/expendable-mold.png b/angelssmelting/graphics/icons/expendable-mold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/expendable-mold.png rename to angelssmelting/graphics/icons/expendable-mold.png diff --git a/angelssmelting_9.6.21/graphics/icons/glass-mixture.png b/angelssmelting/graphics/icons/glass-mixture.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/glass-mixture.png rename to angelssmelting/graphics/icons/glass-mixture.png diff --git a/angelssmelting_9.6.21/graphics/icons/induction-furnace.png b/angelssmelting/graphics/icons/induction-furnace.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/induction-furnace.png rename to angelssmelting/graphics/icons/induction-furnace.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-aluminium.png b/angelssmelting/graphics/icons/ingot-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-aluminium.png rename to angelssmelting/graphics/icons/ingot-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-chrome.png b/angelssmelting/graphics/icons/ingot-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-chrome.png rename to angelssmelting/graphics/icons/ingot-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-cobalt.png b/angelssmelting/graphics/icons/ingot-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-cobalt.png rename to angelssmelting/graphics/icons/ingot-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-copper.png b/angelssmelting/graphics/icons/ingot-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-copper.png rename to angelssmelting/graphics/icons/ingot-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-gold.png b/angelssmelting/graphics/icons/ingot-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-gold.png rename to angelssmelting/graphics/icons/ingot-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-iron.png b/angelssmelting/graphics/icons/ingot-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-iron.png rename to angelssmelting/graphics/icons/ingot-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-lead.png b/angelssmelting/graphics/icons/ingot-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-lead.png rename to angelssmelting/graphics/icons/ingot-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-manganese.png b/angelssmelting/graphics/icons/ingot-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-manganese.png rename to angelssmelting/graphics/icons/ingot-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-nickel.png b/angelssmelting/graphics/icons/ingot-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-nickel.png rename to angelssmelting/graphics/icons/ingot-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-platinum.png b/angelssmelting/graphics/icons/ingot-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-platinum.png rename to angelssmelting/graphics/icons/ingot-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-silicon.png b/angelssmelting/graphics/icons/ingot-silicon.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-silicon.png rename to angelssmelting/graphics/icons/ingot-silicon.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-silver.png b/angelssmelting/graphics/icons/ingot-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-silver.png rename to angelssmelting/graphics/icons/ingot-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-steel.png b/angelssmelting/graphics/icons/ingot-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-steel.png rename to angelssmelting/graphics/icons/ingot-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-tin.png b/angelssmelting/graphics/icons/ingot-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-tin.png rename to angelssmelting/graphics/icons/ingot-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-titanium.png b/angelssmelting/graphics/icons/ingot-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-titanium.png rename to angelssmelting/graphics/icons/ingot-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/ingot-zinc.png b/angelssmelting/graphics/icons/ingot-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ingot-zinc.png rename to angelssmelting/graphics/icons/ingot-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/liquid-coolant-clean.png b/angelssmelting/graphics/icons/liquid-coolant-clean.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/liquid-coolant-clean.png rename to angelssmelting/graphics/icons/liquid-coolant-clean.png diff --git a/angelssmelting_9.6.21/graphics/icons/liquid-coolant-used.png b/angelssmelting/graphics/icons/liquid-coolant-used.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/liquid-coolant-used.png rename to angelssmelting/graphics/icons/liquid-coolant-used.png diff --git a/angelssmelting_9.6.21/graphics/icons/liquid-coolant.png b/angelssmelting/graphics/icons/liquid-coolant.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/liquid-coolant.png rename to angelssmelting/graphics/icons/liquid-coolant.png diff --git a/angelssmelting_9.6.21/graphics/icons/molecule-hexafluorosilicic-acid.png b/angelssmelting/graphics/icons/molecule-hexafluorosilicic-acid.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molecule-hexafluorosilicic-acid.png rename to angelssmelting/graphics/icons/molecule-hexafluorosilicic-acid.png diff --git a/angelssmelting_9.6.21/graphics/icons/molecule-silane.png b/angelssmelting/graphics/icons/molecule-silane.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molecule-silane.png rename to angelssmelting/graphics/icons/molecule-silane.png diff --git a/angelssmelting_9.6.21/graphics/icons/molecule-titanium-tetrachloride.png b/angelssmelting/graphics/icons/molecule-titanium-tetrachloride.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molecule-titanium-tetrachloride.png rename to angelssmelting/graphics/icons/molecule-titanium-tetrachloride.png diff --git a/angelssmelting_9.6.21/graphics/icons/molecule-trichlorosilane.png b/angelssmelting/graphics/icons/molecule-trichlorosilane.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molecule-trichlorosilane.png rename to angelssmelting/graphics/icons/molecule-trichlorosilane.png diff --git a/angelssmelting_9.6.21/graphics/icons/molecule-tungsten-hexafluoride.png b/angelssmelting/graphics/icons/molecule-tungsten-hexafluoride.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molecule-tungsten-hexafluoride.png rename to angelssmelting/graphics/icons/molecule-tungsten-hexafluoride.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-aluminium.png b/angelssmelting/graphics/icons/molten-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-aluminium.png rename to angelssmelting/graphics/icons/molten-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-brass.png b/angelssmelting/graphics/icons/molten-brass.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-brass.png rename to angelssmelting/graphics/icons/molten-brass.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-bronze.png b/angelssmelting/graphics/icons/molten-bronze.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-bronze.png rename to angelssmelting/graphics/icons/molten-bronze.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-chrome.png b/angelssmelting/graphics/icons/molten-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-chrome.png rename to angelssmelting/graphics/icons/molten-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-cobalt-steel.png b/angelssmelting/graphics/icons/molten-cobalt-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-cobalt-steel.png rename to angelssmelting/graphics/icons/molten-cobalt-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-cobalt.png b/angelssmelting/graphics/icons/molten-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-cobalt.png rename to angelssmelting/graphics/icons/molten-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-concrete.png b/angelssmelting/graphics/icons/molten-concrete.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-concrete.png rename to angelssmelting/graphics/icons/molten-concrete.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-copper.png b/angelssmelting/graphics/icons/molten-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-copper.png rename to angelssmelting/graphics/icons/molten-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-glass.png b/angelssmelting/graphics/icons/molten-glass.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-glass.png rename to angelssmelting/graphics/icons/molten-glass.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-gold.png b/angelssmelting/graphics/icons/molten-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-gold.png rename to angelssmelting/graphics/icons/molten-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-gunmetal.png b/angelssmelting/graphics/icons/molten-gunmetal.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-gunmetal.png rename to angelssmelting/graphics/icons/molten-gunmetal.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-invar.png b/angelssmelting/graphics/icons/molten-invar.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-invar.png rename to angelssmelting/graphics/icons/molten-invar.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-iron.png b/angelssmelting/graphics/icons/molten-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-iron.png rename to angelssmelting/graphics/icons/molten-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-lead.png b/angelssmelting/graphics/icons/molten-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-lead.png rename to angelssmelting/graphics/icons/molten-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-manganese.png b/angelssmelting/graphics/icons/molten-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-manganese.png rename to angelssmelting/graphics/icons/molten-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-nickel.png b/angelssmelting/graphics/icons/molten-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-nickel.png rename to angelssmelting/graphics/icons/molten-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-nitinol.png b/angelssmelting/graphics/icons/molten-nitinol.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-nitinol.png rename to angelssmelting/graphics/icons/molten-nitinol.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-platinum.png b/angelssmelting/graphics/icons/molten-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-platinum.png rename to angelssmelting/graphics/icons/molten-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-silicon.png b/angelssmelting/graphics/icons/molten-silicon.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-silicon.png rename to angelssmelting/graphics/icons/molten-silicon.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-silver.png b/angelssmelting/graphics/icons/molten-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-silver.png rename to angelssmelting/graphics/icons/molten-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-solder.png b/angelssmelting/graphics/icons/molten-solder.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-solder.png rename to angelssmelting/graphics/icons/molten-solder.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-steel.png b/angelssmelting/graphics/icons/molten-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-steel.png rename to angelssmelting/graphics/icons/molten-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-tin.png b/angelssmelting/graphics/icons/molten-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-tin.png rename to angelssmelting/graphics/icons/molten-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-titanium.png b/angelssmelting/graphics/icons/molten-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-titanium.png rename to angelssmelting/graphics/icons/molten-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/molten-zinc.png b/angelssmelting/graphics/icons/molten-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/molten-zinc.png rename to angelssmelting/graphics/icons/molten-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/motor-casing-0.png b/angelssmelting/graphics/icons/motor-casing-0.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/motor-casing-0.png rename to angelssmelting/graphics/icons/motor-casing-0.png diff --git a/angelssmelting_9.6.21/graphics/icons/non-expendable-mold.png b/angelssmelting/graphics/icons/non-expendable-mold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/non-expendable-mold.png rename to angelssmelting/graphics/icons/non-expendable-mold.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-bauxite.png b/angelssmelting/graphics/icons/ore-bauxite.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-bauxite.png rename to angelssmelting/graphics/icons/ore-bauxite.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-chrome.png b/angelssmelting/graphics/icons/ore-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-chrome.png rename to angelssmelting/graphics/icons/ore-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-coal.png b/angelssmelting/graphics/icons/ore-coal.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-coal.png rename to angelssmelting/graphics/icons/ore-coal.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-cobalt.png b/angelssmelting/graphics/icons/ore-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-cobalt.png rename to angelssmelting/graphics/icons/ore-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-copper.png b/angelssmelting/graphics/icons/ore-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-copper.png rename to angelssmelting/graphics/icons/ore-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-gold.png b/angelssmelting/graphics/icons/ore-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-gold.png rename to angelssmelting/graphics/icons/ore-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-iron.png b/angelssmelting/graphics/icons/ore-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-iron.png rename to angelssmelting/graphics/icons/ore-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-lead.png b/angelssmelting/graphics/icons/ore-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-lead.png rename to angelssmelting/graphics/icons/ore-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-manganese.png b/angelssmelting/graphics/icons/ore-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-manganese.png rename to angelssmelting/graphics/icons/ore-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-nickel.png b/angelssmelting/graphics/icons/ore-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-nickel.png rename to angelssmelting/graphics/icons/ore-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-platinum.png b/angelssmelting/graphics/icons/ore-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-platinum.png rename to angelssmelting/graphics/icons/ore-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-processing-machine.png b/angelssmelting/graphics/icons/ore-processing-machine.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-processing-machine.png rename to angelssmelting/graphics/icons/ore-processing-machine.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-rutile.png b/angelssmelting/graphics/icons/ore-rutile.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-rutile.png rename to angelssmelting/graphics/icons/ore-rutile.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-silica.png b/angelssmelting/graphics/icons/ore-silica.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-silica.png rename to angelssmelting/graphics/icons/ore-silica.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-silver.png b/angelssmelting/graphics/icons/ore-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-silver.png rename to angelssmelting/graphics/icons/ore-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-stone.png b/angelssmelting/graphics/icons/ore-stone.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-stone.png rename to angelssmelting/graphics/icons/ore-stone.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-thorium-1.png b/angelssmelting/graphics/icons/ore-thorium-1.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-thorium-1.png rename to angelssmelting/graphics/icons/ore-thorium-1.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-thorium-2.png b/angelssmelting/graphics/icons/ore-thorium-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-thorium-2.png rename to angelssmelting/graphics/icons/ore-thorium-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-thorium-3.png b/angelssmelting/graphics/icons/ore-thorium-3.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-thorium-3.png rename to angelssmelting/graphics/icons/ore-thorium-3.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-thorium.png b/angelssmelting/graphics/icons/ore-thorium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-thorium.png rename to angelssmelting/graphics/icons/ore-thorium.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-tin.png b/angelssmelting/graphics/icons/ore-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-tin.png rename to angelssmelting/graphics/icons/ore-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-tungsten.png b/angelssmelting/graphics/icons/ore-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-tungsten.png rename to angelssmelting/graphics/icons/ore-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/ore-zinc.png b/angelssmelting/graphics/icons/ore-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/ore-zinc.png rename to angelssmelting/graphics/icons/ore-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-aluminium.png b/angelssmelting/graphics/icons/pellet-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-aluminium.png rename to angelssmelting/graphics/icons/pellet-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-chrome.png b/angelssmelting/graphics/icons/pellet-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-chrome.png rename to angelssmelting/graphics/icons/pellet-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-cobalt.png b/angelssmelting/graphics/icons/pellet-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-cobalt.png rename to angelssmelting/graphics/icons/pellet-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-copper.png b/angelssmelting/graphics/icons/pellet-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-copper.png rename to angelssmelting/graphics/icons/pellet-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-gold.png b/angelssmelting/graphics/icons/pellet-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-gold.png rename to angelssmelting/graphics/icons/pellet-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-iron.png b/angelssmelting/graphics/icons/pellet-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-iron.png rename to angelssmelting/graphics/icons/pellet-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-lead.png b/angelssmelting/graphics/icons/pellet-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-lead.png rename to angelssmelting/graphics/icons/pellet-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-manganese.png b/angelssmelting/graphics/icons/pellet-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-manganese.png rename to angelssmelting/graphics/icons/pellet-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-nickel.png b/angelssmelting/graphics/icons/pellet-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-nickel.png rename to angelssmelting/graphics/icons/pellet-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-platinum.png b/angelssmelting/graphics/icons/pellet-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-platinum.png rename to angelssmelting/graphics/icons/pellet-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-press.png b/angelssmelting/graphics/icons/pellet-press.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-press.png rename to angelssmelting/graphics/icons/pellet-press.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-silica.png b/angelssmelting/graphics/icons/pellet-silica.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-silica.png rename to angelssmelting/graphics/icons/pellet-silica.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-silver.png b/angelssmelting/graphics/icons/pellet-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-silver.png rename to angelssmelting/graphics/icons/pellet-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-tin.png b/angelssmelting/graphics/icons/pellet-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-tin.png rename to angelssmelting/graphics/icons/pellet-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-titanium.png b/angelssmelting/graphics/icons/pellet-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-titanium.png rename to angelssmelting/graphics/icons/pellet-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-tungsten.png b/angelssmelting/graphics/icons/pellet-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-tungsten.png rename to angelssmelting/graphics/icons/pellet-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-wood.png b/angelssmelting/graphics/icons/pellet-wood.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-wood.png rename to angelssmelting/graphics/icons/pellet-wood.png diff --git a/angelssmelting_9.6.21/graphics/icons/pellet-zinc.png b/angelssmelting/graphics/icons/pellet-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/pellet-zinc.png rename to angelssmelting/graphics/icons/pellet-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-aluminium.png b/angelssmelting/graphics/icons/plate-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-aluminium.png rename to angelssmelting/graphics/icons/plate-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-brass.png b/angelssmelting/graphics/icons/plate-brass.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-brass.png rename to angelssmelting/graphics/icons/plate-brass.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-bronze.png b/angelssmelting/graphics/icons/plate-bronze.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-bronze.png rename to angelssmelting/graphics/icons/plate-bronze.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-chrome-2.png b/angelssmelting/graphics/icons/plate-chrome-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-chrome-2.png rename to angelssmelting/graphics/icons/plate-chrome-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-chrome.png b/angelssmelting/graphics/icons/plate-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-chrome.png rename to angelssmelting/graphics/icons/plate-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-cobalt-steel.png b/angelssmelting/graphics/icons/plate-cobalt-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-cobalt-steel.png rename to angelssmelting/graphics/icons/plate-cobalt-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-cobalt.png b/angelssmelting/graphics/icons/plate-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-cobalt.png rename to angelssmelting/graphics/icons/plate-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-copper.png b/angelssmelting/graphics/icons/plate-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-copper.png rename to angelssmelting/graphics/icons/plate-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-electrum-1.png b/angelssmelting/graphics/icons/plate-electrum-1.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-electrum-1.png rename to angelssmelting/graphics/icons/plate-electrum-1.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-electrum.png b/angelssmelting/graphics/icons/plate-electrum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-electrum.png rename to angelssmelting/graphics/icons/plate-electrum.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-glass.png b/angelssmelting/graphics/icons/plate-glass.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-glass.png rename to angelssmelting/graphics/icons/plate-glass.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-gold.png b/angelssmelting/graphics/icons/plate-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-gold.png rename to angelssmelting/graphics/icons/plate-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-gunmetal.png b/angelssmelting/graphics/icons/plate-gunmetal.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-gunmetal.png rename to angelssmelting/graphics/icons/plate-gunmetal.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-invar-1.png b/angelssmelting/graphics/icons/plate-invar-1.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-invar-1.png rename to angelssmelting/graphics/icons/plate-invar-1.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-invar.png b/angelssmelting/graphics/icons/plate-invar.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-invar.png rename to angelssmelting/graphics/icons/plate-invar.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-iron-hot.png b/angelssmelting/graphics/icons/plate-iron-hot.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-iron-hot.png rename to angelssmelting/graphics/icons/plate-iron-hot.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-iron.png b/angelssmelting/graphics/icons/plate-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-iron.png rename to angelssmelting/graphics/icons/plate-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-lead.png b/angelssmelting/graphics/icons/plate-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-lead.png rename to angelssmelting/graphics/icons/plate-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-manganese.png b/angelssmelting/graphics/icons/plate-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-manganese.png rename to angelssmelting/graphics/icons/plate-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-nickel.png b/angelssmelting/graphics/icons/plate-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-nickel.png rename to angelssmelting/graphics/icons/plate-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-nitinol-2.png b/angelssmelting/graphics/icons/plate-nitinol-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-nitinol-2.png rename to angelssmelting/graphics/icons/plate-nitinol-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-nitinol.png b/angelssmelting/graphics/icons/plate-nitinol.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-nitinol.png rename to angelssmelting/graphics/icons/plate-nitinol.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-platinum.png b/angelssmelting/graphics/icons/plate-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-platinum.png rename to angelssmelting/graphics/icons/plate-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-silicon.png b/angelssmelting/graphics/icons/plate-silicon.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-silicon.png rename to angelssmelting/graphics/icons/plate-silicon.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-silver.png b/angelssmelting/graphics/icons/plate-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-silver.png rename to angelssmelting/graphics/icons/plate-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-steel.png b/angelssmelting/graphics/icons/plate-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-steel.png rename to angelssmelting/graphics/icons/plate-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-tin.png b/angelssmelting/graphics/icons/plate-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-tin.png rename to angelssmelting/graphics/icons/plate-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-titanium.png b/angelssmelting/graphics/icons/plate-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-titanium.png rename to angelssmelting/graphics/icons/plate-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-tungsten.png b/angelssmelting/graphics/icons/plate-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-tungsten.png rename to angelssmelting/graphics/icons/plate-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/plate-zinc.png b/angelssmelting/graphics/icons/plate-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/plate-zinc.png rename to angelssmelting/graphics/icons/plate-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-aluminium.png b/angelssmelting/graphics/icons/powder-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-aluminium.png rename to angelssmelting/graphics/icons/powder-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-chrome.png b/angelssmelting/graphics/icons/powder-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-chrome.png rename to angelssmelting/graphics/icons/powder-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-cobalt.png b/angelssmelting/graphics/icons/powder-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-cobalt.png rename to angelssmelting/graphics/icons/powder-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-coke.png b/angelssmelting/graphics/icons/powder-coke.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-coke.png rename to angelssmelting/graphics/icons/powder-coke.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-copper.png b/angelssmelting/graphics/icons/powder-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-copper.png rename to angelssmelting/graphics/icons/powder-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-gold.png b/angelssmelting/graphics/icons/powder-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-gold.png rename to angelssmelting/graphics/icons/powder-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-iron.png b/angelssmelting/graphics/icons/powder-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-iron.png rename to angelssmelting/graphics/icons/powder-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-lead.png b/angelssmelting/graphics/icons/powder-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-lead.png rename to angelssmelting/graphics/icons/powder-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-manganese.png b/angelssmelting/graphics/icons/powder-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-manganese.png rename to angelssmelting/graphics/icons/powder-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-mixer-ico.png b/angelssmelting/graphics/icons/powder-mixer-ico.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-mixer-ico.png rename to angelssmelting/graphics/icons/powder-mixer-ico.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-nickel.png b/angelssmelting/graphics/icons/powder-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-nickel.png rename to angelssmelting/graphics/icons/powder-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-platinum.png b/angelssmelting/graphics/icons/powder-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-platinum.png rename to angelssmelting/graphics/icons/powder-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-silica.png b/angelssmelting/graphics/icons/powder-silica.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-silica.png rename to angelssmelting/graphics/icons/powder-silica.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-silver.png b/angelssmelting/graphics/icons/powder-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-silver.png rename to angelssmelting/graphics/icons/powder-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-steel.png b/angelssmelting/graphics/icons/powder-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-steel.png rename to angelssmelting/graphics/icons/powder-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-tin.png b/angelssmelting/graphics/icons/powder-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-tin.png rename to angelssmelting/graphics/icons/powder-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-titanium.png b/angelssmelting/graphics/icons/powder-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-titanium.png rename to angelssmelting/graphics/icons/powder-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-tungsten-mixture.png b/angelssmelting/graphics/icons/powder-tungsten-mixture.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-tungsten-mixture.png rename to angelssmelting/graphics/icons/powder-tungsten-mixture.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-tungsten.png b/angelssmelting/graphics/icons/powder-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-tungsten.png rename to angelssmelting/graphics/icons/powder-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/powder-zinc.png b/angelssmelting/graphics/icons/powder-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/powder-zinc.png rename to angelssmelting/graphics/icons/powder-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-aluminium.png b/angelssmelting/graphics/icons/processed-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-aluminium.png rename to angelssmelting/graphics/icons/processed-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-chrome.png b/angelssmelting/graphics/icons/processed-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-chrome.png rename to angelssmelting/graphics/icons/processed-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-cobalt.png b/angelssmelting/graphics/icons/processed-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-cobalt.png rename to angelssmelting/graphics/icons/processed-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-copper.png b/angelssmelting/graphics/icons/processed-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-copper.png rename to angelssmelting/graphics/icons/processed-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-gold.png b/angelssmelting/graphics/icons/processed-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-gold.png rename to angelssmelting/graphics/icons/processed-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-iron.png b/angelssmelting/graphics/icons/processed-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-iron.png rename to angelssmelting/graphics/icons/processed-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-lead.png b/angelssmelting/graphics/icons/processed-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-lead.png rename to angelssmelting/graphics/icons/processed-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-manganese.png b/angelssmelting/graphics/icons/processed-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-manganese.png rename to angelssmelting/graphics/icons/processed-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-nickel.png b/angelssmelting/graphics/icons/processed-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-nickel.png rename to angelssmelting/graphics/icons/processed-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-platinum.png b/angelssmelting/graphics/icons/processed-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-platinum.png rename to angelssmelting/graphics/icons/processed-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-silica.png b/angelssmelting/graphics/icons/processed-silica.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-silica.png rename to angelssmelting/graphics/icons/processed-silica.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-silver.png b/angelssmelting/graphics/icons/processed-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-silver.png rename to angelssmelting/graphics/icons/processed-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-tin.png b/angelssmelting/graphics/icons/processed-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-tin.png rename to angelssmelting/graphics/icons/processed-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-titanium.png b/angelssmelting/graphics/icons/processed-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-titanium.png rename to angelssmelting/graphics/icons/processed-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-tungsten.png b/angelssmelting/graphics/icons/processed-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-tungsten.png rename to angelssmelting/graphics/icons/processed-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/processed-zinc.png b/angelssmelting/graphics/icons/processed-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/processed-zinc.png rename to angelssmelting/graphics/icons/processed-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-aluminium.png b/angelssmelting/graphics/icons/rod-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-aluminium.png rename to angelssmelting/graphics/icons/rod-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-iron.png b/angelssmelting/graphics/icons/rod-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-iron.png rename to angelssmelting/graphics/icons/rod-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-stack-aluminium.png b/angelssmelting/graphics/icons/rod-stack-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-stack-aluminium.png rename to angelssmelting/graphics/icons/rod-stack-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-stack-iron.png b/angelssmelting/graphics/icons/rod-stack-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-stack-iron.png rename to angelssmelting/graphics/icons/rod-stack-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-stack-steel.png b/angelssmelting/graphics/icons/rod-stack-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-stack-steel.png rename to angelssmelting/graphics/icons/rod-stack-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-steel.png b/angelssmelting/graphics/icons/rod-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-steel.png rename to angelssmelting/graphics/icons/rod-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-titanium.png b/angelssmelting/graphics/icons/rod-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-titanium.png rename to angelssmelting/graphics/icons/rod-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/rod-tungsten.png b/angelssmelting/graphics/icons/rod-tungsten.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/rod-tungsten.png rename to angelssmelting/graphics/icons/rod-tungsten.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-aluminium.png b/angelssmelting/graphics/icons/roll-aluminium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-aluminium.png rename to angelssmelting/graphics/icons/roll-aluminium.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-chrome.png b/angelssmelting/graphics/icons/roll-chrome.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-chrome.png rename to angelssmelting/graphics/icons/roll-chrome.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-cobalt.png b/angelssmelting/graphics/icons/roll-cobalt.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-cobalt.png rename to angelssmelting/graphics/icons/roll-cobalt.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-copper.png b/angelssmelting/graphics/icons/roll-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-copper.png rename to angelssmelting/graphics/icons/roll-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-gold.png b/angelssmelting/graphics/icons/roll-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-gold.png rename to angelssmelting/graphics/icons/roll-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-iron.png b/angelssmelting/graphics/icons/roll-iron.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-iron.png rename to angelssmelting/graphics/icons/roll-iron.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-lead.png b/angelssmelting/graphics/icons/roll-lead.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-lead.png rename to angelssmelting/graphics/icons/roll-lead.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-manganese.png b/angelssmelting/graphics/icons/roll-manganese.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-manganese.png rename to angelssmelting/graphics/icons/roll-manganese.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-nickel.png b/angelssmelting/graphics/icons/roll-nickel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-nickel.png rename to angelssmelting/graphics/icons/roll-nickel.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-platinum.png b/angelssmelting/graphics/icons/roll-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-platinum.png rename to angelssmelting/graphics/icons/roll-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-silver.png b/angelssmelting/graphics/icons/roll-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-silver.png rename to angelssmelting/graphics/icons/roll-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-solder.png b/angelssmelting/graphics/icons/roll-solder.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-solder.png rename to angelssmelting/graphics/icons/roll-solder.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-steel.png b/angelssmelting/graphics/icons/roll-steel.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-steel.png rename to angelssmelting/graphics/icons/roll-steel.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-tin.png b/angelssmelting/graphics/icons/roll-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-tin.png rename to angelssmelting/graphics/icons/roll-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-titanium.png b/angelssmelting/graphics/icons/roll-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-titanium.png rename to angelssmelting/graphics/icons/roll-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/roll-zinc.png b/angelssmelting/graphics/icons/roll-zinc.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/roll-zinc.png rename to angelssmelting/graphics/icons/roll-zinc.png diff --git a/angelssmelting_9.6.21/graphics/icons/silicon-crucible-2.png b/angelssmelting/graphics/icons/silicon-crucible-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/silicon-crucible-2.png rename to angelssmelting/graphics/icons/silicon-crucible-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/silicon-crucible.png b/angelssmelting/graphics/icons/silicon-crucible.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/silicon-crucible.png rename to angelssmelting/graphics/icons/silicon-crucible.png diff --git a/angelssmelting_9.6.21/graphics/icons/silicon-mono.png b/angelssmelting/graphics/icons/silicon-mono.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/silicon-mono.png rename to angelssmelting/graphics/icons/silicon-mono.png diff --git a/angelssmelting_9.6.21/graphics/icons/silicon-seed.png b/angelssmelting/graphics/icons/silicon-seed.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/silicon-seed.png rename to angelssmelting/graphics/icons/silicon-seed.png diff --git a/angelssmelting_9.6.21/graphics/icons/silicon-wafer.png b/angelssmelting/graphics/icons/silicon-wafer.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/silicon-wafer.png rename to angelssmelting/graphics/icons/silicon-wafer.png diff --git a/angelssmelting_9.6.21/graphics/icons/sintering-oven.png b/angelssmelting/graphics/icons/sintering-oven.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/sintering-oven.png rename to angelssmelting/graphics/icons/sintering-oven.png diff --git a/angelssmelting_9.6.21/graphics/icons/solder-2.png b/angelssmelting/graphics/icons/solder-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solder-2.png rename to angelssmelting/graphics/icons/solder-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solder-mixture.png b/angelssmelting/graphics/icons/solder-mixture.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solder-mixture.png rename to angelssmelting/graphics/icons/solder-mixture.png diff --git a/angelssmelting_9.6.21/graphics/icons/solder.png b/angelssmelting/graphics/icons/solder.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solder.png rename to angelssmelting/graphics/icons/solder.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-aluminium-hydroxide.png b/angelssmelting/graphics/icons/solid-aluminium-hydroxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-aluminium-hydroxide.png rename to angelssmelting/graphics/icons/solid-aluminium-hydroxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-aluminium-oxide.png b/angelssmelting/graphics/icons/solid-aluminium-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-aluminium-oxide.png rename to angelssmelting/graphics/icons/solid-aluminium-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-ammonium-chloroplatinate.png b/angelssmelting/graphics/icons/solid-ammonium-chloroplatinate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-ammonium-chloroplatinate.png rename to angelssmelting/graphics/icons/solid-ammonium-chloroplatinate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-ammonium-paratungstate.png b/angelssmelting/graphics/icons/solid-ammonium-paratungstate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-ammonium-paratungstate.png rename to angelssmelting/graphics/icons/solid-ammonium-paratungstate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-cement.png b/angelssmelting/graphics/icons/solid-cement.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-cement.png rename to angelssmelting/graphics/icons/solid-cement.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-chromate.png b/angelssmelting/graphics/icons/solid-chromate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-chromate.png rename to angelssmelting/graphics/icons/solid-chromate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-chrome-oxide-2.png b/angelssmelting/graphics/icons/solid-chrome-oxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-chrome-oxide-2.png rename to angelssmelting/graphics/icons/solid-chrome-oxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-chrome-oxide.png b/angelssmelting/graphics/icons/solid-chrome-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-chrome-oxide.png rename to angelssmelting/graphics/icons/solid-chrome-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-cobalt-hydroxide-2.png b/angelssmelting/graphics/icons/solid-cobalt-hydroxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-cobalt-hydroxide-2.png rename to angelssmelting/graphics/icons/solid-cobalt-hydroxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-cobalt-hydroxide.png b/angelssmelting/graphics/icons/solid-cobalt-hydroxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-cobalt-hydroxide.png rename to angelssmelting/graphics/icons/solid-cobalt-hydroxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-cobalt-oxide-2.png b/angelssmelting/graphics/icons/solid-cobalt-oxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-cobalt-oxide-2.png rename to angelssmelting/graphics/icons/solid-cobalt-oxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-cobalt-oxide.png b/angelssmelting/graphics/icons/solid-cobalt-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-cobalt-oxide.png rename to angelssmelting/graphics/icons/solid-cobalt-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-dichromate.png b/angelssmelting/graphics/icons/solid-dichromate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-dichromate.png rename to angelssmelting/graphics/icons/solid-dichromate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-iron-hydroxide-2.png b/angelssmelting/graphics/icons/solid-iron-hydroxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-iron-hydroxide-2.png rename to angelssmelting/graphics/icons/solid-iron-hydroxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-iron-hydroxide.png b/angelssmelting/graphics/icons/solid-iron-hydroxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-iron-hydroxide.png rename to angelssmelting/graphics/icons/solid-iron-hydroxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-lead-oxide-2.png b/angelssmelting/graphics/icons/solid-lead-oxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-lead-oxide-2.png rename to angelssmelting/graphics/icons/solid-lead-oxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-lead-oxide.png b/angelssmelting/graphics/icons/solid-lead-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-lead-oxide.png rename to angelssmelting/graphics/icons/solid-lead-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-lime-2.png b/angelssmelting/graphics/icons/solid-lime-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-lime-2.png rename to angelssmelting/graphics/icons/solid-lime-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-lime.png b/angelssmelting/graphics/icons/solid-lime.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-lime.png rename to angelssmelting/graphics/icons/solid-lime.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-manganese-oxide.png b/angelssmelting/graphics/icons/solid-manganese-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-manganese-oxide.png rename to angelssmelting/graphics/icons/solid-manganese-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-nickel-carbonyl.png b/angelssmelting/graphics/icons/solid-nickel-carbonyl.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-nickel-carbonyl.png rename to angelssmelting/graphics/icons/solid-nickel-carbonyl.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-silver-nitrate-2.png b/angelssmelting/graphics/icons/solid-silver-nitrate-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-silver-nitrate-2.png rename to angelssmelting/graphics/icons/solid-silver-nitrate-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-silver-nitrate.png b/angelssmelting/graphics/icons/solid-silver-nitrate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-silver-nitrate.png rename to angelssmelting/graphics/icons/solid-silver-nitrate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-silver-oxide.png b/angelssmelting/graphics/icons/solid-silver-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-silver-oxide.png rename to angelssmelting/graphics/icons/solid-silver-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-sodium-aluminate.png b/angelssmelting/graphics/icons/solid-sodium-aluminate.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-sodium-aluminate.png rename to angelssmelting/graphics/icons/solid-sodium-aluminate.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-sodium-gold-cyanide.png b/angelssmelting/graphics/icons/solid-sodium-gold-cyanide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-sodium-gold-cyanide.png rename to angelssmelting/graphics/icons/solid-sodium-gold-cyanide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-sodium-silver-cyanide.png b/angelssmelting/graphics/icons/solid-sodium-silver-cyanide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-sodium-silver-cyanide.png rename to angelssmelting/graphics/icons/solid-sodium-silver-cyanide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-tungsten-oxide.png b/angelssmelting/graphics/icons/solid-tungsten-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-tungsten-oxide.png rename to angelssmelting/graphics/icons/solid-tungsten-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-zinc-oxide-2.png b/angelssmelting/graphics/icons/solid-zinc-oxide-2.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-zinc-oxide-2.png rename to angelssmelting/graphics/icons/solid-zinc-oxide-2.png diff --git a/angelssmelting_9.6.21/graphics/icons/solid-zinc-oxide.png b/angelssmelting/graphics/icons/solid-zinc-oxide.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/solid-zinc-oxide.png rename to angelssmelting/graphics/icons/solid-zinc-oxide.png diff --git a/angelssmelting_9.6.21/graphics/icons/spent-non-expendable-mold.png b/angelssmelting/graphics/icons/spent-non-expendable-mold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/spent-non-expendable-mold.png rename to angelssmelting/graphics/icons/spent-non-expendable-mold.png diff --git a/angelssmelting_9.6.21/graphics/icons/sponge-titanium.png b/angelssmelting/graphics/icons/sponge-titanium.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/sponge-titanium.png rename to angelssmelting/graphics/icons/sponge-titanium.png diff --git a/angelssmelting_9.6.21/graphics/icons/strand-casting-machine.png b/angelssmelting/graphics/icons/strand-casting-machine.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/strand-casting-machine.png rename to angelssmelting/graphics/icons/strand-casting-machine.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-copper.png b/angelssmelting/graphics/icons/wire-coil-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-copper.png rename to angelssmelting/graphics/icons/wire-coil-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-glass.png b/angelssmelting/graphics/icons/wire-coil-glass.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-glass.png rename to angelssmelting/graphics/icons/wire-coil-glass.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-gold.png b/angelssmelting/graphics/icons/wire-coil-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-gold.png rename to angelssmelting/graphics/icons/wire-coil-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-platinum.png b/angelssmelting/graphics/icons/wire-coil-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-platinum.png rename to angelssmelting/graphics/icons/wire-coil-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-silver.png b/angelssmelting/graphics/icons/wire-coil-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-silver.png rename to angelssmelting/graphics/icons/wire-coil-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-coil-tin.png b/angelssmelting/graphics/icons/wire-coil-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-coil-tin.png rename to angelssmelting/graphics/icons/wire-coil-tin.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-copper.png b/angelssmelting/graphics/icons/wire-copper.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-copper.png rename to angelssmelting/graphics/icons/wire-copper.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-gold.png b/angelssmelting/graphics/icons/wire-gold.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-gold.png rename to angelssmelting/graphics/icons/wire-gold.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-platinum.png b/angelssmelting/graphics/icons/wire-platinum.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-platinum.png rename to angelssmelting/graphics/icons/wire-platinum.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-silver.png b/angelssmelting/graphics/icons/wire-silver.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-silver.png rename to angelssmelting/graphics/icons/wire-silver.png diff --git a/angelssmelting_9.6.21/graphics/icons/wire-tin.png b/angelssmelting/graphics/icons/wire-tin.png similarity index 100% rename from angelssmelting_9.6.21/graphics/icons/wire-tin.png rename to angelssmelting/graphics/icons/wire-tin.png diff --git a/angelssmelting_9.6.21/graphics/technology/blast-furnace-tech.png b/angelssmelting/graphics/technology/blast-furnace-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/blast-furnace-tech.png rename to angelssmelting/graphics/technology/blast-furnace-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-aluminium-tech.png b/angelssmelting/graphics/technology/casting-aluminium-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-aluminium-tech.png rename to angelssmelting/graphics/technology/casting-aluminium-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-brass-tech.png b/angelssmelting/graphics/technology/casting-brass-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-brass-tech.png rename to angelssmelting/graphics/technology/casting-brass-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-bronze-tech.png b/angelssmelting/graphics/technology/casting-bronze-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-bronze-tech.png rename to angelssmelting/graphics/technology/casting-bronze-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-chrome-tech.png b/angelssmelting/graphics/technology/casting-chrome-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-chrome-tech.png rename to angelssmelting/graphics/technology/casting-chrome-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-cobalt-steel-tech.png b/angelssmelting/graphics/technology/casting-cobalt-steel-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-cobalt-steel-tech.png rename to angelssmelting/graphics/technology/casting-cobalt-steel-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-cobalt-tech.png b/angelssmelting/graphics/technology/casting-cobalt-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-cobalt-tech.png rename to angelssmelting/graphics/technology/casting-cobalt-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-copper-tech.png b/angelssmelting/graphics/technology/casting-copper-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-copper-tech.png rename to angelssmelting/graphics/technology/casting-copper-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-gold-tech.png b/angelssmelting/graphics/technology/casting-gold-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-gold-tech.png rename to angelssmelting/graphics/technology/casting-gold-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-gunmetal-tech.png b/angelssmelting/graphics/technology/casting-gunmetal-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-gunmetal-tech.png rename to angelssmelting/graphics/technology/casting-gunmetal-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-invar-tech.png b/angelssmelting/graphics/technology/casting-invar-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-invar-tech.png rename to angelssmelting/graphics/technology/casting-invar-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-iron-tech.png b/angelssmelting/graphics/technology/casting-iron-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-iron-tech.png rename to angelssmelting/graphics/technology/casting-iron-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-lead-tech.png b/angelssmelting/graphics/technology/casting-lead-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-lead-tech.png rename to angelssmelting/graphics/technology/casting-lead-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-manganese-tech.png b/angelssmelting/graphics/technology/casting-manganese-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-manganese-tech.png rename to angelssmelting/graphics/technology/casting-manganese-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-nickel-tech.png b/angelssmelting/graphics/technology/casting-nickel-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-nickel-tech.png rename to angelssmelting/graphics/technology/casting-nickel-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-nitinol-tech.png b/angelssmelting/graphics/technology/casting-nitinol-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-nitinol-tech.png rename to angelssmelting/graphics/technology/casting-nitinol-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-platinum-tech.png b/angelssmelting/graphics/technology/casting-platinum-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-platinum-tech.png rename to angelssmelting/graphics/technology/casting-platinum-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-silicon-tech.png b/angelssmelting/graphics/technology/casting-silicon-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-silicon-tech.png rename to angelssmelting/graphics/technology/casting-silicon-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-silver-tech.png b/angelssmelting/graphics/technology/casting-silver-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-silver-tech.png rename to angelssmelting/graphics/technology/casting-silver-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-solder-tech.png b/angelssmelting/graphics/technology/casting-solder-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-solder-tech.png rename to angelssmelting/graphics/technology/casting-solder-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-steel-tech.png b/angelssmelting/graphics/technology/casting-steel-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-steel-tech.png rename to angelssmelting/graphics/technology/casting-steel-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-tin-tech.png b/angelssmelting/graphics/technology/casting-tin-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-tin-tech.png rename to angelssmelting/graphics/technology/casting-tin-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-titanium-tech.png b/angelssmelting/graphics/technology/casting-titanium-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-titanium-tech.png rename to angelssmelting/graphics/technology/casting-titanium-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-tungsten-tech.png b/angelssmelting/graphics/technology/casting-tungsten-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-tungsten-tech.png rename to angelssmelting/graphics/technology/casting-tungsten-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/casting-zinc-tech.png b/angelssmelting/graphics/technology/casting-zinc-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/casting-zinc-tech.png rename to angelssmelting/graphics/technology/casting-zinc-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/cement-tech.png b/angelssmelting/graphics/technology/cement-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/cement-tech.png rename to angelssmelting/graphics/technology/cement-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/coolant-tech.png b/angelssmelting/graphics/technology/coolant-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/coolant-tech.png rename to angelssmelting/graphics/technology/coolant-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/glass-tech.png b/angelssmelting/graphics/technology/glass-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/glass-tech.png rename to angelssmelting/graphics/technology/glass-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/induction-furnace-tech.png b/angelssmelting/graphics/technology/induction-furnace-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/induction-furnace-tech.png rename to angelssmelting/graphics/technology/induction-furnace-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/pellet-press-tech.png b/angelssmelting/graphics/technology/pellet-press-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/pellet-press-tech.png rename to angelssmelting/graphics/technology/pellet-press-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/powder-mixer-tech.png b/angelssmelting/graphics/technology/powder-mixer-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/powder-mixer-tech.png rename to angelssmelting/graphics/technology/powder-mixer-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/processing-machine-tech.png b/angelssmelting/graphics/technology/processing-machine-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/processing-machine-tech.png rename to angelssmelting/graphics/technology/processing-machine-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/sintering-oven-tech.png b/angelssmelting/graphics/technology/sintering-oven-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/sintering-oven-tech.png rename to angelssmelting/graphics/technology/sintering-oven-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-aluminium-tech.png b/angelssmelting/graphics/technology/smelting-aluminium-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-aluminium-tech.png rename to angelssmelting/graphics/technology/smelting-aluminium-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-chrome-tech.png b/angelssmelting/graphics/technology/smelting-chrome-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-chrome-tech.png rename to angelssmelting/graphics/technology/smelting-chrome-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-cobalt-tech.png b/angelssmelting/graphics/technology/smelting-cobalt-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-cobalt-tech.png rename to angelssmelting/graphics/technology/smelting-cobalt-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-copper-tech.png b/angelssmelting/graphics/technology/smelting-copper-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-copper-tech.png rename to angelssmelting/graphics/technology/smelting-copper-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-gold-tech.png b/angelssmelting/graphics/technology/smelting-gold-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-gold-tech.png rename to angelssmelting/graphics/technology/smelting-gold-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-iron-tech.png b/angelssmelting/graphics/technology/smelting-iron-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-iron-tech.png rename to angelssmelting/graphics/technology/smelting-iron-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-lead-tech.png b/angelssmelting/graphics/technology/smelting-lead-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-lead-tech.png rename to angelssmelting/graphics/technology/smelting-lead-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-manganese-tech.png b/angelssmelting/graphics/technology/smelting-manganese-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-manganese-tech.png rename to angelssmelting/graphics/technology/smelting-manganese-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-nickel-tech.png b/angelssmelting/graphics/technology/smelting-nickel-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-nickel-tech.png rename to angelssmelting/graphics/technology/smelting-nickel-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-platinum-tech.png b/angelssmelting/graphics/technology/smelting-platinum-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-platinum-tech.png rename to angelssmelting/graphics/technology/smelting-platinum-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-silicon-tech.png b/angelssmelting/graphics/technology/smelting-silicon-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-silicon-tech.png rename to angelssmelting/graphics/technology/smelting-silicon-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-silver-tech.png b/angelssmelting/graphics/technology/smelting-silver-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-silver-tech.png rename to angelssmelting/graphics/technology/smelting-silver-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-tin-tech.png b/angelssmelting/graphics/technology/smelting-tin-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-tin-tech.png rename to angelssmelting/graphics/technology/smelting-tin-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-titanium-tech.png b/angelssmelting/graphics/technology/smelting-titanium-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-titanium-tech.png rename to angelssmelting/graphics/technology/smelting-titanium-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/smelting-zinc-tech.png b/angelssmelting/graphics/technology/smelting-zinc-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/smelting-zinc-tech.png rename to angelssmelting/graphics/technology/smelting-zinc-tech.png diff --git a/angelssmelting_9.6.21/graphics/technology/strand-casting-machine-tech.png b/angelssmelting/graphics/technology/strand-casting-machine-tech.png similarity index 100% rename from angelssmelting_9.6.21/graphics/technology/strand-casting-machine-tech.png rename to angelssmelting/graphics/technology/strand-casting-machine-tech.png diff --git a/angelssmelting/info.json b/angelssmelting/info.json new file mode 100644 index 00000000..4db04bd6 --- /dev/null +++ b/angelssmelting/info.json @@ -0,0 +1,15 @@ +{ + "name": "angelssmelting", + "version": "0.6.23", + "factorio_version": "1.1", + "title": "Angel's Smelting", + "author": "Arch666Angel", + "contact": "https://discord.gg/ff5p6KE", + "homepage": "https://forums.factorio.com/viewforum.php?f=185", + "description": "Angel's Smelting provides alternative ways to produce plate and increase ore yield at the expense of space and energy.", + "dependencies": [ + "angelsrefining >= 0.12.1", + "angelspetrochem >= 0.9.26", + "? bobplates >= 1.1.6" + ] +} diff --git a/angelssmelting_9.6.21/license CC BY-NC-ND 4.0.txt b/angelssmelting/license CC BY-NC-ND 4.0.txt similarity index 100% rename from angelssmelting_9.6.21/license CC BY-NC-ND 4.0.txt rename to angelssmelting/license CC BY-NC-ND 4.0.txt diff --git a/angelssmelting_9.6.21/locale/en/smelting.cfg b/angelssmelting/locale/en/smelting.cfg similarity index 100% rename from angelssmelting_9.6.21/locale/en/smelting.cfg rename to angelssmelting/locale/en/smelting.cfg diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.5.5.json b/angelssmelting/migrations/angelssmelting_0.5.5.json similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.5.5.json rename to angelssmelting/migrations/angelssmelting_0.5.5.json diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.1.lua b/angelssmelting/migrations/angelssmelting_0.6.1.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.1.lua rename to angelssmelting/migrations/angelssmelting_0.6.1.lua diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.12.lua b/angelssmelting/migrations/angelssmelting_0.6.12.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.12.lua rename to angelssmelting/migrations/angelssmelting_0.6.12.lua diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.15.json b/angelssmelting/migrations/angelssmelting_0.6.15.json similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.15.json rename to angelssmelting/migrations/angelssmelting_0.6.15.json diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.15.lua b/angelssmelting/migrations/angelssmelting_0.6.15.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.15.lua rename to angelssmelting/migrations/angelssmelting_0.6.15.lua diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.20.lua b/angelssmelting/migrations/angelssmelting_0.6.20.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.20.lua rename to angelssmelting/migrations/angelssmelting_0.6.20.lua diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.5.lua b/angelssmelting/migrations/angelssmelting_0.6.5.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.5.lua rename to angelssmelting/migrations/angelssmelting_0.6.5.lua diff --git a/angelssmelting_9.6.21/migrations/angelssmelting_0.6.6.lua b/angelssmelting/migrations/angelssmelting_0.6.6.lua similarity index 100% rename from angelssmelting_9.6.21/migrations/angelssmelting_0.6.6.lua rename to angelssmelting/migrations/angelssmelting_0.6.6.lua diff --git a/angelssmelting_9.6.21/prototypes/angels-smelting-category.lua b/angelssmelting/prototypes/angels-smelting-category.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/angels-smelting-category.lua rename to angelssmelting/prototypes/angels-smelting-category.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/blast-furnace.lua b/angelssmelting/prototypes/buildings/blast-furnace.lua similarity index 97% rename from angelssmelting_9.6.21/prototypes/buildings/blast-furnace.lua rename to angelssmelting/prototypes/buildings/blast-furnace.lua index f6ddc939..96cd157f 100644 --- a/angelssmelting_9.6.21/prototypes/buildings/blast-furnace.lua +++ b/angelssmelting/prototypes/buildings/blast-furnace.lua @@ -52,7 +52,10 @@ data:extend({ name = "smoke", deviation = { 0.1, 0.1 }, frequency = 10, - position = { -2.0, -1.8 }, + north_position = { -2.0, -1.8 }, + south_position = { -2.0, -1.8 }, + east_position = { -2.0, -1.8 }, + west_position = { -2.0, -1.8 }, starting_vertical_speed = 0.08, starting_frame_deviation = 60, }, @@ -259,7 +262,10 @@ data:extend({ name = "smoke", deviation = { 0.1, 0.1 }, frequency = 10, - position = { -2.0, -1.8 }, + north_position = { -2.0, -1.8 }, + south_position = { -2.0, -1.8 }, + east_position = { -2.0, -1.8 }, + west_position = { -2.0, -1.8 }, starting_vertical_speed = 0.08, starting_frame_deviation = 60, }, @@ -466,7 +472,10 @@ data:extend({ name = "smoke", deviation = { 0.1, 0.1 }, frequency = 10, - position = { -2.0, -1.8 }, + north_position = { -2.0, -1.8 }, + south_position = { -2.0, -1.8 }, + east_position = { -2.0, -1.8 }, + west_position = { -2.0, -1.8 }, starting_vertical_speed = 0.08, starting_frame_deviation = 60, }, @@ -672,7 +681,10 @@ data:extend({ name = "smoke", deviation = { 0.1, 0.1 }, frequency = 10, - position = { -2.0, -1.8 }, + north_position = { -2.0, -1.8 }, + south_position = { -2.0, -1.8 }, + east_position = { -2.0, -1.8 }, + west_position = { -2.0, -1.8 }, starting_vertical_speed = 0.08, starting_frame_deviation = 60, }, diff --git a/angelssmelting_9.6.21/prototypes/buildings/casting-machine.lua b/angelssmelting/prototypes/buildings/casting-machine.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/casting-machine.lua rename to angelssmelting/prototypes/buildings/casting-machine.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/chemical-furnace.lua b/angelssmelting/prototypes/buildings/chemical-furnace.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/chemical-furnace.lua rename to angelssmelting/prototypes/buildings/chemical-furnace.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/clay-bricks.lua b/angelssmelting/prototypes/buildings/clay-bricks.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/clay-bricks.lua rename to angelssmelting/prototypes/buildings/clay-bricks.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/concrete-bricks.lua b/angelssmelting/prototypes/buildings/concrete-bricks.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/concrete-bricks.lua rename to angelssmelting/prototypes/buildings/concrete-bricks.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/cooling-tower.lua b/angelssmelting/prototypes/buildings/cooling-tower.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/cooling-tower.lua rename to angelssmelting/prototypes/buildings/cooling-tower.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/induction-furnace.lua b/angelssmelting/prototypes/buildings/induction-furnace.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/induction-furnace.lua rename to angelssmelting/prototypes/buildings/induction-furnace.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/ore-processing-machine.lua b/angelssmelting/prototypes/buildings/ore-processing-machine.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/ore-processing-machine.lua rename to angelssmelting/prototypes/buildings/ore-processing-machine.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/pellet-press.lua b/angelssmelting/prototypes/buildings/pellet-press.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/pellet-press.lua rename to angelssmelting/prototypes/buildings/pellet-press.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/powder-mixer.lua b/angelssmelting/prototypes/buildings/powder-mixer.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/powder-mixer.lua rename to angelssmelting/prototypes/buildings/powder-mixer.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/sintering-oven.lua b/angelssmelting/prototypes/buildings/sintering-oven.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/sintering-oven.lua rename to angelssmelting/prototypes/buildings/sintering-oven.lua diff --git a/angelssmelting_9.6.21/prototypes/buildings/strand-casting-machine.lua b/angelssmelting/prototypes/buildings/strand-casting-machine.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/buildings/strand-casting-machine.lua rename to angelssmelting/prototypes/buildings/strand-casting-machine.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-alloy-solder.lua b/angelssmelting/prototypes/items/angels-alloy-solder.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-alloy-solder.lua rename to angelssmelting/prototypes/items/angels-alloy-solder.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-alloy-steel.lua b/angelssmelting/prototypes/items/angels-alloy-steel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-alloy-steel.lua rename to angelssmelting/prototypes/items/angels-alloy-steel.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-aluminium.lua b/angelssmelting/prototypes/items/angels-aluminium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-aluminium.lua rename to angelssmelting/prototypes/items/angels-aluminium.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-chrome.lua b/angelssmelting/prototypes/items/angels-chrome.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-chrome.lua rename to angelssmelting/prototypes/items/angels-chrome.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-cobalt.lua b/angelssmelting/prototypes/items/angels-cobalt.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-cobalt.lua rename to angelssmelting/prototypes/items/angels-cobalt.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-copper.lua b/angelssmelting/prototypes/items/angels-copper.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-copper.lua rename to angelssmelting/prototypes/items/angels-copper.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-glass.lua b/angelssmelting/prototypes/items/angels-glass.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-glass.lua rename to angelssmelting/prototypes/items/angels-glass.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-gold.lua b/angelssmelting/prototypes/items/angels-gold.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-gold.lua rename to angelssmelting/prototypes/items/angels-gold.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-iron.lua b/angelssmelting/prototypes/items/angels-iron.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-iron.lua rename to angelssmelting/prototypes/items/angels-iron.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-lead.lua b/angelssmelting/prototypes/items/angels-lead.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-lead.lua rename to angelssmelting/prototypes/items/angels-lead.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-manganese.lua b/angelssmelting/prototypes/items/angels-manganese.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-manganese.lua rename to angelssmelting/prototypes/items/angels-manganese.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-nickel.lua b/angelssmelting/prototypes/items/angels-nickel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-nickel.lua rename to angelssmelting/prototypes/items/angels-nickel.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-platinum.lua b/angelssmelting/prototypes/items/angels-platinum.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-platinum.lua rename to angelssmelting/prototypes/items/angels-platinum.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-silicon.lua b/angelssmelting/prototypes/items/angels-silicon.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-silicon.lua rename to angelssmelting/prototypes/items/angels-silicon.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-silver.lua b/angelssmelting/prototypes/items/angels-silver.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-silver.lua rename to angelssmelting/prototypes/items/angels-silver.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-stone.lua b/angelssmelting/prototypes/items/angels-stone.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-stone.lua rename to angelssmelting/prototypes/items/angels-stone.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-support.lua b/angelssmelting/prototypes/items/angels-support.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-support.lua rename to angelssmelting/prototypes/items/angels-support.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-thorium.lua b/angelssmelting/prototypes/items/angels-thorium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-thorium.lua rename to angelssmelting/prototypes/items/angels-thorium.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-tin.lua b/angelssmelting/prototypes/items/angels-tin.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-tin.lua rename to angelssmelting/prototypes/items/angels-tin.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-titanium.lua b/angelssmelting/prototypes/items/angels-titanium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-titanium.lua rename to angelssmelting/prototypes/items/angels-titanium.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-tungsten.lua b/angelssmelting/prototypes/items/angels-tungsten.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-tungsten.lua rename to angelssmelting/prototypes/items/angels-tungsten.lua diff --git a/angelssmelting_9.6.21/prototypes/items/angels-zinc.lua b/angelssmelting/prototypes/items/angels-zinc.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/items/angels-zinc.lua rename to angelssmelting/prototypes/items/angels-zinc.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-brass.lua b/angelssmelting/prototypes/override/smelting-override-alloy-brass.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-brass.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-brass.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-bronze.lua b/angelssmelting/prototypes/override/smelting-override-alloy-bronze.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-bronze.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-bronze.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-cobalt-steel.lua b/angelssmelting/prototypes/override/smelting-override-alloy-cobalt-steel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-cobalt-steel.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-cobalt-steel.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-gunmetal.lua b/angelssmelting/prototypes/override/smelting-override-alloy-gunmetal.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-gunmetal.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-gunmetal.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-invar.lua b/angelssmelting/prototypes/override/smelting-override-alloy-invar.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-invar.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-invar.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-nitinol.lua b/angelssmelting/prototypes/override/smelting-override-alloy-nitinol.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-nitinol.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-nitinol.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-solder.lua b/angelssmelting/prototypes/override/smelting-override-alloy-solder.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-solder.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-solder.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-steel.lua b/angelssmelting/prototypes/override/smelting-override-alloy-steel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-steel.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-steel.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-support.lua b/angelssmelting/prototypes/override/smelting-override-alloy-support.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-alloy-support.lua rename to angelssmelting/prototypes/override/smelting-override-alloy-support.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-aluminium.lua b/angelssmelting/prototypes/override/smelting-override-aluminium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-aluminium.lua rename to angelssmelting/prototypes/override/smelting-override-aluminium.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-chrome.lua b/angelssmelting/prototypes/override/smelting-override-chrome.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-chrome.lua rename to angelssmelting/prototypes/override/smelting-override-chrome.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-cobalt.lua b/angelssmelting/prototypes/override/smelting-override-cobalt.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-cobalt.lua rename to angelssmelting/prototypes/override/smelting-override-cobalt.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-copper.lua b/angelssmelting/prototypes/override/smelting-override-copper.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-copper.lua rename to angelssmelting/prototypes/override/smelting-override-copper.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-entity.lua b/angelssmelting/prototypes/override/smelting-override-entity.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-entity.lua rename to angelssmelting/prototypes/override/smelting-override-entity.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-glass.lua b/angelssmelting/prototypes/override/smelting-override-glass.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-glass.lua rename to angelssmelting/prototypes/override/smelting-override-glass.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-gold.lua b/angelssmelting/prototypes/override/smelting-override-gold.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-gold.lua rename to angelssmelting/prototypes/override/smelting-override-gold.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-iron.lua b/angelssmelting/prototypes/override/smelting-override-iron.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-iron.lua rename to angelssmelting/prototypes/override/smelting-override-iron.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-lead.lua b/angelssmelting/prototypes/override/smelting-override-lead.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-lead.lua rename to angelssmelting/prototypes/override/smelting-override-lead.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-lithium.lua b/angelssmelting/prototypes/override/smelting-override-lithium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-lithium.lua rename to angelssmelting/prototypes/override/smelting-override-lithium.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-manganese.lua b/angelssmelting/prototypes/override/smelting-override-manganese.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-manganese.lua rename to angelssmelting/prototypes/override/smelting-override-manganese.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-nickel.lua b/angelssmelting/prototypes/override/smelting-override-nickel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-nickel.lua rename to angelssmelting/prototypes/override/smelting-override-nickel.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-platinum.lua b/angelssmelting/prototypes/override/smelting-override-platinum.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-platinum.lua rename to angelssmelting/prototypes/override/smelting-override-platinum.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-productivity.lua b/angelssmelting/prototypes/override/smelting-override-productivity.lua similarity index 90% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-productivity.lua rename to angelssmelting/prototypes/override/smelting-override-productivity.lua index 2d2408f3..05b78896 100644 --- a/angelssmelting_9.6.21/prototypes/override/smelting-override-productivity.lua +++ b/angelssmelting/prototypes/override/smelting-override-productivity.lua @@ -41,6 +41,11 @@ angelsmods.functions.allow_productivity("angels-roll-platinum-converting") angelsmods.functions.allow_productivity("angels-mono-silicon-1") angelsmods.functions.allow_productivity("angels-mono-silicon-2") +angelsmods.functions.allow_productivity("angels-plate-glass-1") +angelsmods.functions.allow_productivity("angels-plate-glass-2") +angelsmods.functions.allow_productivity("angels-plate-glass-3") +angelsmods.functions.allow_productivity("angels-coil-glass-fiber") +angelsmods.functions.allow_productivity("angels-coil-glass-fiber-fast") angelsmods.functions.allow_productivity("angels-plate-silver") angelsmods.functions.allow_productivity("angels-wire-coil-silver-converting") diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-silicon.lua b/angelssmelting/prototypes/override/smelting-override-silicon.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-silicon.lua rename to angelssmelting/prototypes/override/smelting-override-silicon.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-silver.lua b/angelssmelting/prototypes/override/smelting-override-silver.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-silver.lua rename to angelssmelting/prototypes/override/smelting-override-silver.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-stone.lua b/angelssmelting/prototypes/override/smelting-override-stone.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-stone.lua rename to angelssmelting/prototypes/override/smelting-override-stone.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-support.lua b/angelssmelting/prototypes/override/smelting-override-support.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-support.lua rename to angelssmelting/prototypes/override/smelting-override-support.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-thorium.lua b/angelssmelting/prototypes/override/smelting-override-thorium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-thorium.lua rename to angelssmelting/prototypes/override/smelting-override-thorium.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-tin.lua b/angelssmelting/prototypes/override/smelting-override-tin.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-tin.lua rename to angelssmelting/prototypes/override/smelting-override-tin.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-titanium.lua b/angelssmelting/prototypes/override/smelting-override-titanium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-titanium.lua rename to angelssmelting/prototypes/override/smelting-override-titanium.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-tungsten.lua b/angelssmelting/prototypes/override/smelting-override-tungsten.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-tungsten.lua rename to angelssmelting/prototypes/override/smelting-override-tungsten.lua diff --git a/angelssmelting_9.6.21/prototypes/override/smelting-override-zinc.lua b/angelssmelting/prototypes/override/smelting-override-zinc.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/override/smelting-override-zinc.lua rename to angelssmelting/prototypes/override/smelting-override-zinc.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-alloy-solder.lua b/angelssmelting/prototypes/recipes/smelting-alloy-solder.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-alloy-solder.lua rename to angelssmelting/prototypes/recipes/smelting-alloy-solder.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-alloy-steel.lua b/angelssmelting/prototypes/recipes/smelting-alloy-steel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-alloy-steel.lua rename to angelssmelting/prototypes/recipes/smelting-alloy-steel.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-aluminium.lua b/angelssmelting/prototypes/recipes/smelting-aluminium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-aluminium.lua rename to angelssmelting/prototypes/recipes/smelting-aluminium.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-chrome.lua b/angelssmelting/prototypes/recipes/smelting-chrome.lua similarity index 97% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-chrome.lua rename to angelssmelting/prototypes/recipes/smelting-chrome.lua index 9eda7b92..25abfcea 100644 --- a/angelssmelting_9.6.21/prototypes/recipes/smelting-chrome.lua +++ b/angelssmelting/prototypes/recipes/smelting-chrome.lua @@ -7,7 +7,7 @@ data:extend({ { type = "recipe", name = "chrome-ore-processing", - category = "ore-processing-3", + category = "ore-processing-4", subgroup = "angels-chrome", energy_required = 2, enabled = false, @@ -23,7 +23,7 @@ data:extend({ { type = "recipe", name = "chrome-processed-processing", - category = "pellet-pressing-3", + category = "pellet-pressing-4", subgroup = "angels-chrome", energy_required = 2, enabled = false, @@ -100,7 +100,7 @@ data:extend({ { type = "recipe", name = "chrome-ore-smelting", - category = "chemical-smelting-2", + category = "chemical-smelting-3", subgroup = "angels-chrome", energy_required = 4, enabled = false, @@ -173,7 +173,7 @@ data:extend({ { type = "recipe", name = "molten-chrome-smelting", - category = "induction-smelting-3", + category = "induction-smelting-4", subgroup = "angels-chrome-casting", energy_required = 4, enabled = false, @@ -189,7 +189,7 @@ data:extend({ { type = "recipe", name = "roll-chrome-casting", - category = "strand-casting-3", + category = "strand-casting-4", subgroup = "angels-chrome-casting", normal = { enabled = false, @@ -256,7 +256,7 @@ data:extend({ { type = "recipe", name = "angels-plate-chrome", - category = "casting-3", + category = "casting-4", subgroup = "angels-chrome-casting", normal = { enabled = false, diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-cobalt.lua b/angelssmelting/prototypes/recipes/smelting-cobalt.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-cobalt.lua rename to angelssmelting/prototypes/recipes/smelting-cobalt.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-copper.lua b/angelssmelting/prototypes/recipes/smelting-copper.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-copper.lua rename to angelssmelting/prototypes/recipes/smelting-copper.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-entity-angels.lua b/angelssmelting/prototypes/recipes/smelting-entity-angels.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-entity-angels.lua rename to angelssmelting/prototypes/recipes/smelting-entity-angels.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-entity.lua b/angelssmelting/prototypes/recipes/smelting-entity.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-entity.lua rename to angelssmelting/prototypes/recipes/smelting-entity.lua diff --git a/angelssmelting/prototypes/recipes/smelting-glass.lua b/angelssmelting/prototypes/recipes/smelting-glass.lua new file mode 100644 index 00000000..7a1aabeb --- /dev/null +++ b/angelssmelting/prototypes/recipes/smelting-glass.lua @@ -0,0 +1,317 @@ +local intermediatemulti = angelsmods.marathon.intermediatemulti + +data:extend({ + --GLAS + -- SMELTING INTERMEDIATE + -- SMELTING RESULTS + { + type = "recipe", + name = "glass-mixture-1", + category = "powder-mixing", + subgroup = "angels-glass", + energy_required = 10, + enabled = false, + ingredients = { + { type = "item", name = "quartz", amount = 3 }, + }, + results = { + { type = "item", name = "solid-glass-mixture", amount = 4 }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("solid-glass-mixture"), + 1, + angelsmods.smelting.number_tint + ), + order = "a[solid-glass-mixture]-a", + }, + { + type = "recipe", + name = "glass-mixture-2", + category = "powder-mixing-2", + subgroup = "angels-glass", + energy_required = 4, + enabled = false, + ingredients = { + { type = "item", name = "quartz", amount = 1 }, + { type = "item", name = "solid-lime", amount = 1 }, + }, + results = { + { type = "item", name = "solid-glass-mixture", amount = 2 }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("solid-glass-mixture"), + 2, + angelsmods.smelting.number_tint + ), + order = "a[solid-glass-mixture]-b", + }, + { + type = "recipe", + name = "glass-mixture-3", + category = "powder-mixing-3", + subgroup = "angels-glass", + energy_required = 4, + enabled = false, + ingredients = { + { type = "item", name = "quartz", amount = 1 }, + { type = "item", name = "solid-aluminium-oxide", amount = 1 }, + { type = "item", name = "solid-lime", amount = 1 }, + }, + results = { + { type = "item", name = "solid-glass-mixture", amount = 3 }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("solid-glass-mixture"), + 3, + angelsmods.smelting.number_tint + ), + order = "a[solid-glass-mixture]-c", + }, + { + type = "recipe", + name = "glass-mixture-4", + category = "powder-mixing-3", + subgroup = "angels-glass", + energy_required = 4, + enabled = false, + ingredients = { + { type = "item", name = "solid-sand", amount = 1 }, + { type = "item", name = "solid-sodium-carbonate", amount = 1 }, + { type = "item", name = "solid-lime", amount = 1 }, + { type = "item", name = "solid-sodium-sulfate", amount = 1 }, + }, + results = { + { type = "item", name = "solid-glass-mixture", amount = 4 }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("solid-glass-mixture"), + 4, + angelsmods.smelting.number_tint + ), + order = "a[solid-glass-mixture]-d", + }, + -- CASTING INTERMEDIATE + { + type = "recipe", + name = "molten-glass-smelting", + category = "induction-smelting-2", + subgroup = "angels-glass-casting", + energy_required = 4, + enabled = false, + ingredients = { + { type = "item", name = "solid-glass-mixture", amount = 12 }, + }, + results = { + { type = "fluid", name = "liquid-molten-glass", amount = 120 }, + }, + order = "b[liquid-molten-glass]", + crafting_machine_tint = angelsmods.functions.get_fluid_recipe_tint("liquid-molten-glass"), + }, + { + type = "recipe", + name = "angels-coil-glass-fiber", + category = "strand-casting-2", + subgroup = "angels-glass-casting", + normal = { + enabled = false, + energy_required = 4, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 80 }, + { type = "fluid", name = "water", amount = 40 }, + }, + results = { + { type = "item", name = "angels-coil-glass-fiber", amount = 4 }, + }, + }, + expensive = { + enabled = false, + energy_required = 4, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 100 * intermediatemulti }, + { type = "fluid", name = "water", amount = 40 }, + }, + results = { + { type = "item", name = "angels-coil-glass-fiber", amount = 4 }, + }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("angels-coil-glass-fiber"), + 1, + angelsmods.smelting.number_tint + ), + order = "c[angels-coil-glass-fiber]-a", + crafting_machine_tint = angelsmods.functions.get_fluid_recipe_tint("liquid-molten-glass"), + }, + { + type = "recipe", + name = "angels-coil-glass-fiber-fast", + category = "strand-casting-3", + subgroup = "angels-glass-casting", + normal = { + enabled = false, + energy_required = 2, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 140 }, + { type = "fluid", name = "liquid-coolant", amount = 40 }, + }, + results = { + { type = "item", name = "angels-coil-glass-fiber", amount = 8 }, + { type = "fluid", name = "liquid-coolant-used", amount = 40, catalyst_amount = 40, temperature = 300 }, + }, + main_product = "angels-coil-glass-fiber", + }, + expensive = { + enabled = false, + energy_required = 2, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 180 * intermediatemulti }, + { type = "fluid", name = "liquid-coolant", amount = 40 }, + }, + results = { + { type = "item", name = "angels-coil-glass-fiber", amount = 8 }, + { type = "fluid", name = "liquid-coolant-used", amount = 40, catalyst_amount = 40, temperature = 300 }, + }, + main_product = "angels-coil-glass-fiber", + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("angels-coil-glass-fiber"), + 2, + angelsmods.smelting.number_tint + ), + order = "c[angels-coil-glass-fiber]-b", + crafting_machine_tint = angelsmods.functions.get_fluid_recipe_tint("liquid-molten-glass"), + }, + -- CASTING RESULT + { + type = "recipe", + name = "angels-plate-glass-1", + category = "casting-2", + subgroup = "angels-glass-casting", + normal = { + enabled = false, + energy_required = 5, --DrD 4 to 5 + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 40 }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 3 }, + }, + }, + expensive = { + enabled = false, + energy_required = 4, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 3 }, + }, + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("angels-plate-glass"), + 1, + angelsmods.smelting.number_tint + ), + order = "d[angels-plate-glass]-b", -- d[angels-plate-glass]-a reserved for quartz (ore) smelting (see bob overrides) + }, + { + type = "recipe", + name = "angels-plate-glass-2", + category = "casting-3", + subgroup = "angels-glass-casting", + normal = { + enabled = false, + energy_required = 3, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 40 }, + { type = "fluid", name = "liquid-molten-lead", amount = 20, catalyst_amount = 20 }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 4 }, + { type = "item", name = "solid-lead-oxide", amount = 2, catalyst_amount = 2 }, + }, + main_product = "angels-plate-glass", + }, + expensive = { + enabled = false, + energy_required = 3, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, + { type = "fluid", name = "liquid-molten-lead", amount = 20, catalyst_amount = 20 }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 4 }, + { type = "item", name = "solid-lead-oxide", amount = 2, catalyst_amount = 2 }, + }, + main_product = "angels-plate-glass", + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("angels-plate-glass"), + 2, + angelsmods.smelting.number_tint + ), + order = "d[angels-plate-glass]-c", + }, + { + type = "recipe", + name = "angels-plate-glass-3", + category = "casting-4", + subgroup = "angels-glass-casting", + normal = { + enabled = false, + energy_required = 2, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 40 }, + { type = "fluid", name = "liquid-molten-tin", amount = 20, catalyst_amount = 20 }, + { type = "fluid", name = "gas-nitrogen", amount = 20 }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 5 }, + { type = "item", name = "ingot-tin", amount = 2, catalyst_amount = 2 }, + }, + main_product = "angels-plate-glass", + }, + expensive = { + enabled = false, + energy_required = 2, + ingredients = { + { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, + { type = "fluid", name = "liquid-molten-tin", amount = 20, catalyst_amount = 20 }, + { type = "fluid", name = "gas-nitrogen", amount = 20 }, + }, + results = { + { type = "item", name = "angels-plate-glass", amount = 5 }, + { type = "item", name = "ingot-tin", amount = 2, catalyst_amount = 2 }, + }, + main_product = "angels-plate-glass", + }, + icons = angelsmods.functions.add_number_icon_layer( + angelsmods.functions.get_object_icons("angels-plate-glass"), + 3, + angelsmods.smelting.number_tint + ), + order = "d[angels-plate-glass]-d", + }, + { + type = "recipe", + name = "angels-glass-fiber-board", + category = "crafting-with-fluid", + subgroup = "angels-glass-casting", + energy_required = 1, + enabled = false, + ingredients = { + { type = "item", name = "angels-coil-glass-fiber", amount = 1 }, + { type = "fluid", name = "liquid-resin", amount = 40 }, + }, + results = { + { type = "item", name = "angels-void", amount = 1 }, -- see glass overrides + }, + icons = angelsmods.functions.add_number_icon_layer({ + { + icon = "__angelsrefining__/graphics/icons/void.png", + icon_size = 32, + }, + }, 1, angelsmods.smelting.number_tint), + order = "e[angels-glass-fiber-board]", + }, +}) diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-gold.lua b/angelssmelting/prototypes/recipes/smelting-gold.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-gold.lua rename to angelssmelting/prototypes/recipes/smelting-gold.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-iron.lua b/angelssmelting/prototypes/recipes/smelting-iron.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-iron.lua rename to angelssmelting/prototypes/recipes/smelting-iron.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-lead.lua b/angelssmelting/prototypes/recipes/smelting-lead.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-lead.lua rename to angelssmelting/prototypes/recipes/smelting-lead.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-manganese.lua b/angelssmelting/prototypes/recipes/smelting-manganese.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-manganese.lua rename to angelssmelting/prototypes/recipes/smelting-manganese.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-nickel.lua b/angelssmelting/prototypes/recipes/smelting-nickel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-nickel.lua rename to angelssmelting/prototypes/recipes/smelting-nickel.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-platinum.lua b/angelssmelting/prototypes/recipes/smelting-platinum.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-platinum.lua rename to angelssmelting/prototypes/recipes/smelting-platinum.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-silicon.lua b/angelssmelting/prototypes/recipes/smelting-silicon.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-silicon.lua rename to angelssmelting/prototypes/recipes/smelting-silicon.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-silver.lua b/angelssmelting/prototypes/recipes/smelting-silver.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-silver.lua rename to angelssmelting/prototypes/recipes/smelting-silver.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-stone.lua b/angelssmelting/prototypes/recipes/smelting-stone.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-stone.lua rename to angelssmelting/prototypes/recipes/smelting-stone.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-support.lua b/angelssmelting/prototypes/recipes/smelting-support.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-support.lua rename to angelssmelting/prototypes/recipes/smelting-support.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-tin.lua b/angelssmelting/prototypes/recipes/smelting-tin.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-tin.lua rename to angelssmelting/prototypes/recipes/smelting-tin.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-titanium.lua b/angelssmelting/prototypes/recipes/smelting-titanium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-titanium.lua rename to angelssmelting/prototypes/recipes/smelting-titanium.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-tungsten.lua b/angelssmelting/prototypes/recipes/smelting-tungsten.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-tungsten.lua rename to angelssmelting/prototypes/recipes/smelting-tungsten.lua diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-zinc.lua b/angelssmelting/prototypes/recipes/smelting-zinc.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/recipes/smelting-zinc.lua rename to angelssmelting/prototypes/recipes/smelting-zinc.lua diff --git a/angelssmelting_9.6.21/prototypes/smelting-generate.lua b/angelssmelting/prototypes/smelting-generate.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/smelting-generate.lua rename to angelssmelting/prototypes/smelting-generate.lua diff --git a/angelssmelting_9.6.21/prototypes/smelting-override-global.lua b/angelssmelting/prototypes/smelting-override-global.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/smelting-override-global.lua rename to angelssmelting/prototypes/smelting-override-global.lua diff --git a/angelssmelting_9.6.21/prototypes/smelting-override.lua b/angelssmelting/prototypes/smelting-override.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/smelting-override.lua rename to angelssmelting/prototypes/smelting-override.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-alloy-solder.lua b/angelssmelting/prototypes/technology/smelting-alloy-solder.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-alloy-solder.lua rename to angelssmelting/prototypes/technology/smelting-alloy-solder.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-alloy-steel.lua b/angelssmelting/prototypes/technology/smelting-alloy-steel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-alloy-steel.lua rename to angelssmelting/prototypes/technology/smelting-alloy-steel.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-aluminium.lua b/angelssmelting/prototypes/technology/smelting-aluminium.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-aluminium.lua rename to angelssmelting/prototypes/technology/smelting-aluminium.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-chrome.lua b/angelssmelting/prototypes/technology/smelting-chrome.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-chrome.lua rename to angelssmelting/prototypes/technology/smelting-chrome.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-cobalt.lua b/angelssmelting/prototypes/technology/smelting-cobalt.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-cobalt.lua rename to angelssmelting/prototypes/technology/smelting-cobalt.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-copper.lua b/angelssmelting/prototypes/technology/smelting-copper.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-copper.lua rename to angelssmelting/prototypes/technology/smelting-copper.lua diff --git a/angelssmelting/prototypes/technology/smelting-glass.lua b/angelssmelting/prototypes/technology/smelting-glass.lua new file mode 100644 index 00000000..da191dce --- /dev/null +++ b/angelssmelting/prototypes/technology/smelting-glass.lua @@ -0,0 +1,120 @@ +data:extend({ + { + type = "technology", + name = "angels-glass-smelting-1", + icon = "__angelssmelting__/graphics/technology/glass-tech.png", + icon_size = 256, + icon_mipmaps = 4, + prerequisites = { + --"angels-metallurgy-2", + "powder-metallurgy-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "glass-mixture-1", + }, + { + type = "unlock-recipe", + recipe = "molten-glass-smelting", + }, + { + type = "unlock-recipe", + recipe = "angels-plate-glass-1", + }, + }, + unit = { + count = 150, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + }, + time = 30, + }, + order = "c-a", + }, + { + type = "technology", + name = "angels-glass-smelting-2", + icon = "__angelssmelting__/graphics/technology/glass-tech.png", + icon_size = 256, + icon_mipmaps = 4, + prerequisites = { + --"angels-metallurgy-3", + "powder-metallurgy-3", + "angels-glass-smelting-1", + "angels-stone-smelting-2", + "angels-lead-smelting-2", -- need this for the lead oxide processing + }, + effects = { + { + type = "unlock-recipe", + recipe = "glass-mixture-2", + }, + { + type = "unlock-recipe", + recipe = "angels-plate-glass-2", + }, + { + type = "unlock-recipe", + recipe = "angels-coil-glass-fiber", + }, + }, + unit = { + count = 200, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + { type = "item", name = "chemical-science-pack", amount = 1 }, + }, + time = 30, + }, + order = "c-a", + }, + { + type = "technology", + name = "angels-glass-smelting-3", + icon = "__angelssmelting__/graphics/technology/glass-tech.png", + icon_size = 256, + icon_mipmaps = 4, + prerequisites = { + --"angels-metallurgy-4", + "powder-metallurgy-4", + --[["strand-casting-1",]] + "angels-glass-smelting-2", + "angels-aluminium-smelting-2", + "angels-tin-casting-3", + "sodium-processing", + --"angels-nitrogen-processing-1" + }, + effects = { + { + type = "unlock-recipe", + recipe = "glass-mixture-3", + }, + { + type = "unlock-recipe", + recipe = "glass-mixture-4", + }, + { + type = "unlock-recipe", + recipe = "angels-plate-glass-3", + }, + { + type = "unlock-recipe", + recipe = "angels-coil-glass-fiber-fast", + }, + }, + unit = { + count = 250, + ingredients = { + { type = "item", name = "automation-science-pack", amount = 1 }, + { type = "item", name = "logistic-science-pack", amount = 1 }, + { type = "item", name = "chemical-science-pack", amount = 1 }, + { type = "item", name = "production-science-pack", amount = 1 }, + }, + time = 30, + }, + order = "c-a", + }, +}) diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-gold.lua b/angelssmelting/prototypes/technology/smelting-gold.lua similarity index 99% rename from angelssmelting_9.6.21/prototypes/technology/smelting-gold.lua rename to angelssmelting/prototypes/technology/smelting-gold.lua index 62a423f9..eabfb54f 100644 --- a/angelssmelting_9.6.21/prototypes/technology/smelting-gold.lua +++ b/angelssmelting/prototypes/technology/smelting-gold.lua @@ -139,7 +139,7 @@ data:extend({ --"angels-metallurgy-5", "ore-processing-4", "angels-gold-smelting-2", - "sodium-processing", + "sodium-processing-2", }, effects = { { diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-iron.lua b/angelssmelting/prototypes/technology/smelting-iron.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-iron.lua rename to angelssmelting/prototypes/technology/smelting-iron.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-lead.lua b/angelssmelting/prototypes/technology/smelting-lead.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-lead.lua rename to angelssmelting/prototypes/technology/smelting-lead.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-manganese.lua b/angelssmelting/prototypes/technology/smelting-manganese.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-manganese.lua rename to angelssmelting/prototypes/technology/smelting-manganese.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-nickel.lua b/angelssmelting/prototypes/technology/smelting-nickel.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-nickel.lua rename to angelssmelting/prototypes/technology/smelting-nickel.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-platinum.lua b/angelssmelting/prototypes/technology/smelting-platinum.lua similarity index 98% rename from angelssmelting_9.6.21/prototypes/technology/smelting-platinum.lua rename to angelssmelting/prototypes/technology/smelting-platinum.lua index 5414d463..19af77ab 100644 --- a/angelssmelting_9.6.21/prototypes/technology/smelting-platinum.lua +++ b/angelssmelting/prototypes/technology/smelting-platinum.lua @@ -9,7 +9,7 @@ data:extend({ icon_mipmaps = 4, prerequisites = { "ore-electro-whinning-cell", - "angels-metallurgy-3", + "angels-metallurgy-4", }, effects = { { @@ -35,6 +35,7 @@ data:extend({ { type = "item", name = "automation-science-pack", amount = 1 }, { type = "item", name = "logistic-science-pack", amount = 1 }, { type = "item", name = "chemical-science-pack", amount = 1 }, + { type = "item", name = "production-science-pack", amount = 1 }, }, time = 30, }, diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-silicon.lua b/angelssmelting/prototypes/technology/smelting-silicon.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-silicon.lua rename to angelssmelting/prototypes/technology/smelting-silicon.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-silver.lua b/angelssmelting/prototypes/technology/smelting-silver.lua similarity index 99% rename from angelssmelting_9.6.21/prototypes/technology/smelting-silver.lua rename to angelssmelting/prototypes/technology/smelting-silver.lua index 3273a579..c99475fe 100644 --- a/angelssmelting_9.6.21/prototypes/technology/smelting-silver.lua +++ b/angelssmelting/prototypes/technology/smelting-silver.lua @@ -131,7 +131,7 @@ data:extend({ --"angels-metallurgy-4", "ore-processing-3", "angels-silver-smelting-2", - "sodium-processing", + "sodium-processing-2", }, effects = { { diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-stone.lua b/angelssmelting/prototypes/technology/smelting-stone.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-stone.lua rename to angelssmelting/prototypes/technology/smelting-stone.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-support.lua b/angelssmelting/prototypes/technology/smelting-support.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-support.lua rename to angelssmelting/prototypes/technology/smelting-support.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-tin.lua b/angelssmelting/prototypes/technology/smelting-tin.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-tin.lua rename to angelssmelting/prototypes/technology/smelting-tin.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-titanium.lua b/angelssmelting/prototypes/technology/smelting-titanium.lua similarity index 99% rename from angelssmelting_9.6.21/prototypes/technology/smelting-titanium.lua rename to angelssmelting/prototypes/technology/smelting-titanium.lua index f86be4ac..464b6992 100644 --- a/angelssmelting_9.6.21/prototypes/technology/smelting-titanium.lua +++ b/angelssmelting/prototypes/technology/smelting-titanium.lua @@ -173,7 +173,7 @@ data:extend({ "angels-titanium-casting-2", "angels-tin-smelting-3", "angels-aluminium-smelting-3", - "angels-chrome-smelting-2", + "angels-chrome-smelting-1", "angels-cobalt-smelting-2", }, effects = { diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-tungsten.lua b/angelssmelting/prototypes/technology/smelting-tungsten.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-tungsten.lua rename to angelssmelting/prototypes/technology/smelting-tungsten.lua diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-zinc.lua b/angelssmelting/prototypes/technology/smelting-zinc.lua similarity index 100% rename from angelssmelting_9.6.21/prototypes/technology/smelting-zinc.lua rename to angelssmelting/prototypes/technology/smelting-zinc.lua diff --git a/angelssmelting_9.6.21/settings-updates.lua b/angelssmelting/settings-updates.lua similarity index 100% rename from angelssmelting_9.6.21/settings-updates.lua rename to angelssmelting/settings-updates.lua diff --git a/angelssmelting_9.6.21/sound/casting-machine.ogg b/angelssmelting/sound/casting-machine.ogg similarity index 100% rename from angelssmelting_9.6.21/sound/casting-machine.ogg rename to angelssmelting/sound/casting-machine.ogg diff --git a/angelssmelting_9.6.21/sound/induction-furnace.ogg b/angelssmelting/sound/induction-furnace.ogg similarity index 100% rename from angelssmelting_9.6.21/sound/induction-furnace.ogg rename to angelssmelting/sound/induction-furnace.ogg diff --git a/angelssmelting_9.6.21/sound/ore-processing-machine.ogg b/angelssmelting/sound/ore-processing-machine.ogg similarity index 100% rename from angelssmelting_9.6.21/sound/ore-processing-machine.ogg rename to angelssmelting/sound/ore-processing-machine.ogg diff --git a/angelssmelting_9.6.21/sound/sintering-oven.ogg b/angelssmelting/sound/sintering-oven.ogg similarity index 100% rename from angelssmelting_9.6.21/sound/sintering-oven.ogg rename to angelssmelting/sound/sintering-oven.ogg diff --git a/angelssmelting_9.6.21/sound/strand-casting-machine.ogg b/angelssmelting/sound/strand-casting-machine.ogg similarity index 100% rename from angelssmelting_9.6.21/sound/strand-casting-machine.ogg rename to angelssmelting/sound/strand-casting-machine.ogg diff --git a/angelssmelting_9.6.21/thumbnail.png b/angelssmelting/thumbnail.png similarity index 100% rename from angelssmelting_9.6.21/thumbnail.png rename to angelssmelting/thumbnail.png diff --git a/angelssmelting_9.6.21/info.json b/angelssmelting_9.6.21/info.json deleted file mode 100644 index 1e7d76f4..00000000 --- a/angelssmelting_9.6.21/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "angelssmelting", - "version": "9.6.21", - "factorio_version": "1.1", - "title": "Angel's Smelting", - "author": "Arch666Angel", - "contact": "https://discord.gg/ff5p6KE", - "homepage": "https://forums.factorio.com/viewforum.php?f=185", - "description": "Angel's Smelting provides alternative ways to produce plate and increase ore yield at the expense of space and energy.", - "dependencies": [ - "angelsrefining >= 0.12.1", - "angelspetrochem >= 0.9.20", - "? bobplates >= 1.1.6" - ] -} diff --git a/angelssmelting_9.6.21/prototypes/recipes/smelting-glass.lua b/angelssmelting_9.6.21/prototypes/recipes/smelting-glass.lua deleted file mode 100644 index 945fb393..00000000 --- a/angelssmelting_9.6.21/prototypes/recipes/smelting-glass.lua +++ /dev/null @@ -1,271 +0,0 @@ -local intermediatemulti = angelsmods.marathon.intermediatemulti - -data:extend({ - --GLAS - -- SMELTING INTERMEDIATE - -- SMELTING RESULTS - { - type = "recipe", - name = "glass-mixture-1", - category = "powder-mixing", - subgroup = "angels-glass", - energy_required = 10, - enabled = false, - ingredients = { - { type = "item", name = "quartz", amount = 3 }, - }, - results = { - { type = "item", name = "solid-glass-mixture", amount = 4 }, - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("solid-glass-mixture"), - 1, - angelsmods.smelting.number_tint - ), - order = "a[solid-glass-mixture]-a", - }, - { - type = "recipe", - name = "glass-mixture-2", - category = "powder-mixing-2", - subgroup = "angels-glass", - energy_required = 4, - enabled = false, - ingredients = { - { type = "item", name = "quartz", amount = 1 }, - { type = "item", name = "solid-lime", amount = 1 }, - }, - results = { - { type = "item", name = "solid-glass-mixture", amount = 2 }, - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("solid-glass-mixture"), - 2, - angelsmods.smelting.number_tint - ), - order = "a[solid-glass-mixture]-b", - }, - { - type = "recipe", - name = "glass-mixture-3", - category = "powder-mixing-3", - subgroup = "angels-glass", - energy_required = 4, - enabled = false, - ingredients = { - { type = "item", name = "quartz", amount = 1 }, - { type = "item", name = "solid-aluminium-oxide", amount = 1 }, - { type = "item", name = "solid-lime", amount = 1 }, - }, - results = { - { type = "item", name = "solid-glass-mixture", amount = 3 }, - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("solid-glass-mixture"), - 3, - angelsmods.smelting.number_tint - ), - order = "a[solid-glass-mixture]-c", - }, - { - type = "recipe", - name = "glass-mixture-4", - category = "powder-mixing-3", - subgroup = "angels-glass", - energy_required = 4, - enabled = false, - ingredients = { - { type = "item", name = "solid-sand", amount = 1 }, - { type = "item", name = "solid-sodium-carbonate", amount = 1 }, - { type = "item", name = "solid-lime", amount = 1 }, - { type = "item", name = "solid-sodium-sulfate", amount = 1 }, - }, - results = { - { type = "item", name = "solid-glass-mixture", amount = 4 }, - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("solid-glass-mixture"), - 4, - angelsmods.smelting.number_tint - ), - order = "a[solid-glass-mixture]-d", - }, - -- CASTING INTERMEDIATE - { - type = "recipe", - name = "molten-glass-smelting", - category = "induction-smelting-2", - subgroup = "angels-glass-casting", - energy_required = 4, - enabled = false, - ingredients = { - { type = "item", name = "solid-glass-mixture", amount = 12 }, - }, - results = { - { type = "fluid", name = "liquid-molten-glass", amount = 120 }, - }, - order = "b[liquid-molten-glass]", - crafting_machine_tint = angelsmods.functions.get_fluid_recipe_tint("liquid-molten-glass"), - }, - { - type = "recipe", - name = "angels-coil-glass-fiber", - category = "strand-casting", - subgroup = "angels-glass-casting", - normal = { - enabled = false, - energy_required = 4, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 80 }, - }, - results = { - { type = "item", name = "angels-coil-glass-fiber", amount = 4 }, - }, - }, - expensive = { - enabled = false, - energy_required = 4, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 100 * intermediatemulti }, - }, - results = { - { type = "item", name = "angels-coil-glass-fiber", amount = 4 }, - }, - }, - order = "c[angels-coil-glass-fiber]", - crafting_machine_tint = angelsmods.functions.get_fluid_recipe_tint("liquid-molten-glass"), - }, - -- CASTING RESULT - { - type = "recipe", - name = "angels-plate-glass-1", - category = "casting-2", - subgroup = "angels-glass-casting", - normal = { - enabled = false, - energy_required = 5, --DrD 4 to 5 - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 40 }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 3 }, --DrD 4 to 3 - }, - }, - expensive = { - enabled = false, - energy_required = 4, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 3 }, - }, - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("angels-plate-glass"), - 1, - angelsmods.smelting.number_tint - ), - order = "d[angels-plate-glass]-b", -- d[angels-plate-glass]-a reserved for quartz (ore) smelting (see bob overrides) - }, - { - type = "recipe", - name = "angels-plate-glass-2", - category = "casting-3", - subgroup = "angels-glass-casting", - normal = { - enabled = false, - energy_required = 3, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 40 }, - { type = "fluid", name = "liquid-molten-lead", amount = 20 }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 4 }, - { type = "item", name = "solid-lead-oxide", amount = 2 }, - }, - main_product = "angels-plate-glass", - }, - expensive = { - enabled = false, - energy_required = 3, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, - { type = "fluid", name = "liquid-molten-lead", amount = 20 }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 4 }, - { type = "item", name = "solid-lead-oxide", amount = 2 }, - }, - main_product = "angels-plate-glass", - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("angels-plate-glass"), - 2, - angelsmods.smelting.number_tint - ), - order = "d[angels-plate-glass]-c", - }, - { - type = "recipe", - name = "angels-plate-glass-3", - category = "casting-4", - subgroup = "angels-glass-casting", - normal = { - enabled = false, - energy_required = 2, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 40 }, - { type = "fluid", name = "liquid-molten-tin", amount = 20 }, - { type = "fluid", name = "gas-nitrogen", amount = 20 }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 5 }, - { type = "item", name = "ingot-tin", amount = 2 }, - }, - main_product = "angels-plate-glass", - }, - expensive = { - enabled = false, - energy_required = 2, - ingredients = { - { type = "fluid", name = "liquid-molten-glass", amount = 50 * intermediatemulti }, - { type = "fluid", name = "liquid-molten-tin", amount = 20 }, - { type = "fluid", name = "gas-nitrogen", amount = 20 }, - }, - results = { - { type = "item", name = "angels-plate-glass", amount = 5 }, - { type = "item", name = "ingot-tin", amount = 2 }, - }, - main_product = "angels-plate-glass", - }, - icons = angelsmods.functions.add_number_icon_layer( - angelsmods.functions.get_object_icons("angels-plate-glass"), - 3, - angelsmods.smelting.number_tint - ), - order = "d[angels-plate-glass]-d", - }, - { - type = "recipe", - name = "angels-glass-fiber-board", - category = "crafting-with-fluid", - subgroup = "angels-glass-casting", - energy_required = 1, - enabled = false, - ingredients = { - { type = "item", name = "angels-coil-glass-fiber", amount = 1 }, - { type = "fluid", name = "liquid-resin", amount = 40 }, - }, - results = { - { type = "item", name = "angels-void", amount = 1 }, -- see glass overrides - }, - icons = angelsmods.functions.add_number_icon_layer({ - { - icon = "__angelsrefining__/graphics/icons/void.png", - icon_size = 32, - }, - }, 1, angelsmods.smelting.number_tint), - order = "e[angels-glass-fiber-board]", - }, -}) diff --git a/angelssmelting_9.6.21/prototypes/technology/smelting-glass.lua b/angelssmelting_9.6.21/prototypes/technology/smelting-glass.lua deleted file mode 100644 index e1369b5c..00000000 --- a/angelssmelting_9.6.21/prototypes/technology/smelting-glass.lua +++ /dev/null @@ -1,120 +0,0 @@ -data:extend({ - { - type = "technology", - name = "angels-glass-smelting-1", - icon = "__angelssmelting__/graphics/technology/glass-tech.png", - icon_size = 256, - icon_mipmaps = 4, - prerequisites = { - --"angels-metallurgy-2", - "powder-metallurgy-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "glass-mixture-1", - }, - { - type = "unlock-recipe", - recipe = "molten-glass-smelting", - }, - { - type = "unlock-recipe", - recipe = "angels-plate-glass-1", - }, - }, - unit = { - count = 150, - ingredients = { - { type = "item", name = "automation-science-pack", amount = 1 }, - { type = "item", name = "logistic-science-pack", amount = 1 }, - }, - time = 30, - }, - order = "c-a", - }, - { - type = "technology", - name = "angels-glass-smelting-2", - icon = "__angelssmelting__/graphics/technology/glass-tech.png", - icon_size = 256, - icon_mipmaps = 4, - prerequisites = { - --"angels-metallurgy-3", - "powder-metallurgy-3", - "angels-glass-smelting-1", - "angels-stone-smelting-2", - "angels-lead-smelting-2", -- need this for the lead oxide processing - }, - effects = { - { - type = "unlock-recipe", - recipe = "glass-mixture-2", - }, - { - type = "unlock-recipe", - recipe = "angels-plate-glass-2", - }, - { - type = "unlock-recipe", - recipe = "angels-coil-glass-fiber", - }, - }, - unit = { - count = 200, - ingredients = { - { type = "item", name = "automation-science-pack", amount = 1 }, - { type = "item", name = "logistic-science-pack", amount = 1 }, - { type = "item", name = "chemical-science-pack", amount = 1 }, - }, - time = 30, - }, - order = "c-a", - }, - { - type = "technology", - name = "angels-glass-smelting-3", - icon = "__angelssmelting__/graphics/technology/glass-tech.png", - icon_size = 256, - icon_mipmaps = 4, - prerequisites = { - --"angels-metallurgy-4", - "powder-metallurgy-4", - --[["strand-casting-1",]] - "angels-glass-smelting-2", - "angels-aluminium-smelting-2", - "angels-tin-casting-3", - "sodium-processing", - --"angels-nitrogen-processing-1" - }, - effects = { - { - type = "unlock-recipe", - recipe = "glass-mixture-3", - }, - { - type = "unlock-recipe", - recipe = "glass-mixture-4", - }, - { - type = "unlock-recipe", - recipe = "angels-plate-glass-3", - }, - --[[{ - type = "unlock-recipe", - recipe = "angels-coil-glass-fiber" - },]] - }, - unit = { - count = 250, - ingredients = { - { type = "item", name = "automation-science-pack", amount = 1 }, - { type = "item", name = "logistic-science-pack", amount = 1 }, - { type = "item", name = "chemical-science-pack", amount = 1 }, - { type = "item", name = "production-science-pack", amount = 1 }, - }, - time = 30, - }, - order = "c-a", - }, -}) diff --git a/baraws_1.1.1/data-final-fixes.lua b/baraws/data-final-fixes.lua similarity index 100% rename from baraws_1.1.1/data-final-fixes.lua rename to baraws/data-final-fixes.lua diff --git a/baraws_1.1.1/info.json b/baraws/info.json similarity index 100% rename from baraws_1.1.1/info.json rename to baraws/info.json diff --git a/baraws_1.1.1/locale/en/mod-setting.cfg b/baraws/locale/en/mod-setting.cfg similarity index 100% rename from baraws_1.1.1/locale/en/mod-setting.cfg rename to baraws/locale/en/mod-setting.cfg diff --git a/baraws_1.1.1/settings.lua b/baraws/settings.lua similarity index 100% rename from baraws_1.1.1/settings.lua rename to baraws/settings.lua diff --git a/baraws_1.1.1/thumbnail.png b/baraws/thumbnail.png similarity index 100% rename from baraws_1.1.1/thumbnail.png rename to baraws/thumbnail.png diff --git a/beautiful_straight_bridge_railway_1.1.3/changelog.txt b/beautiful_straight_bridge_railway/changelog.txt similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/changelog.txt rename to beautiful_straight_bridge_railway/changelog.txt diff --git a/beautiful_straight_bridge_railway/data-updates.lua b/beautiful_straight_bridge_railway/data-updates.lua new file mode 100644 index 00000000..e97e7054 --- /dev/null +++ b/beautiful_straight_bridge_railway/data-updates.lua @@ -0,0 +1,20 @@ +-- technology +table.insert(data.raw["technology"]["railway"].effects, {type = "unlock-recipe", recipe = "bbr-rail-brick"}) +--[[ +-- change default entity to placeable on water +--data.raw["rail-signal"]["rail-signal"].collision_mask = { "rail-layer" } --DrD +--data.raw["rail-chain-signal"]["rail-chain-signal"].collision_mask = { "rail-layer" } --DrD +for _, signal in pairs(data.raw["rail-signal"]) do --DrD + signal.collision_mask = { "object-layer" } +end +for _, signal in pairs(data.raw["rail-chain-signal"]) do --DrD + signal.collision_mask = { "object-layer" } +end +]] +-- change big electric pole including other mods (bobs etc.) +local poles = data.raw["electric-pole"] +for key, value in pairs(poles) do + if (string.find(key, "big-electric-pole",1,true)) then + data.raw["electric-pole"][key].collision_mask = { "object-layer" } + end +end \ No newline at end of file diff --git a/beautiful_straight_bridge_railway/data.lua b/beautiful_straight_bridge_railway/data.lua new file mode 100644 index 00000000..976dbabb --- /dev/null +++ b/beautiful_straight_bridge_railway/data.lua @@ -0,0 +1 @@ +require("prototypes.item") \ No newline at end of file diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-horizontal-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/curved-rail-vertical-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-horizontal-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/curved-rail/hr-curved-rail-vertical-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-diagonal-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-horizontal-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/hr-straight-rail-vertical-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-left-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-bottom-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-diagonal-right-top-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-horizontal-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-background-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-brick.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-brick.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-brick.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-brick.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-iron.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-iron.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-iron.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-iron.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-wood.png b/beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-wood.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/entity/straight-rail/straight-rail-vertical-stone-path-wood.png rename to beautiful_straight_bridge_railway/graphics/entity/straight-rail/straight-rail-vertical-stone-path-wood.png diff --git a/beautiful_straight_bridge_railway_1.1.3/graphics/icons/electric.png b/beautiful_straight_bridge_railway/graphics/icons/electric.png similarity index 100% rename from beautiful_straight_bridge_railway_1.1.3/graphics/icons/electric.png rename to beautiful_straight_bridge_railway/graphics/icons/electric.png diff --git a/beautiful_straight_bridge_railway/info.json b/beautiful_straight_bridge_railway/info.json new file mode 100644 index 00000000..4c827d3e --- /dev/null +++ b/beautiful_straight_bridge_railway/info.json @@ -0,0 +1,16 @@ +{ + "name": "beautiful_straight_bridge_railway", + "version": "1.1.5", + "title": "Beautiful Straight Bridge Railway", + "author": "smallfly", + "contact": "smallflyATgmxDE", + "homepage": "", + "factorio_version": "1.1", + "dependencies": ["base >= 0.15"], + "description": "This mod is a copy of the mod Beautiful Bridge Railway by author kapaer. The only difference is that here curved rails can't be placed on water." +} + + + + + diff --git a/beautiful_straight_bridge_railway/locale/en/en.cfg b/beautiful_straight_bridge_railway/locale/en/en.cfg new file mode 100644 index 00000000..c2e0dc7d --- /dev/null +++ b/beautiful_straight_bridge_railway/locale/en/en.cfg @@ -0,0 +1,23 @@ +[entity-name] +bbr-rail-wood=Wooden bridge rail +bbr-straight-rail-wood=Straight wooden bridge rail +bbr-curved-rail-wood=Curved wooden bridge rail +bbr-rail-iron=Iron bridge rail +bbr-straight-rail-iron=Straight iron bridge rail +bbr-curved-rail-iron=Curved iron bridge rail +bbr-rail-brick=Brick bridge rail +bbr-straight-rail-brick=Straight brick bridge rail +bbr-curved-rail-brick=Curved brick bridge rail + +bbr-rail-electric-wood=Wooden bridge rail with power +bbr-straight-rail-electric-wood=Straight wooden bridge rail with power +bbr-curved-rail-electric-wood=Curved wooden bridge rail with power +bbr-rail-electric-iron=Iron bridge rail with power +bbr-straight-rail-electric-iron=Straight iron bridge rail with power +bbr-curved-rail-electric-iron=Curved iron bridge rail with power +bbr-rail-electric-brick=Brick bridge rail with power +bbr-straight-rail-electric-brick=Straight brick bridge rail with power +bbr-curved-rail-electric-brick=Curved brick bridge rail with power + +[controls] +kap-bbr-cycle-key=replace rails in Blueprint diff --git a/beautiful_straight_bridge_railway/migrations/register.lua b/beautiful_straight_bridge_railway/migrations/register.lua new file mode 100644 index 00000000..5969e794 --- /dev/null +++ b/beautiful_straight_bridge_railway/migrations/register.lua @@ -0,0 +1,10 @@ + +-- check research +for index, force in pairs(game.forces) do + local technologies = force.technologies + local recipes = force.recipes + + if technologies["railway"].researched then + recipes["bbr-rail-brick"].enabled = true + end +end \ No newline at end of file diff --git a/beautiful_straight_bridge_railway/prototypes/item.lua b/beautiful_straight_bridge_railway/prototypes/item.lua new file mode 100644 index 00000000..1b78339d --- /dev/null +++ b/beautiful_straight_bridge_railway/prototypes/item.lua @@ -0,0 +1,183 @@ + +local bbr_rail_pictures_internal = function(elems) + local keys = {{"straight_rail", "horizontal", 64, 128, 0, 0, true}, + {"straight_rail", "vertical", 128, 64, 0, 0, true}, + {"straight_rail", "diagonal-left-top", 96, 96, 0.5, 0.5, true}, + {"straight_rail", "diagonal-right-top", 96, 96, -0.5, 0.5, true}, + {"straight_rail", "diagonal-right-bottom", 96, 96, -0.5, -0.5, true}, + {"straight_rail", "diagonal-left-bottom", 96, 96, 0.5, -0.5, true}, + {"curved_rail", "vertical-left-top", 192, 288, 0.5, 0.5}, + {"curved_rail", "vertical-right-top", 192, 288, -0.5, 0.5}, + {"curved_rail", "vertical-right-bottom", 192, 288, -0.5, -0.5}, + {"curved_rail", "vertical-left-bottom", 192, 288, 0.5, -0.5}, + {"curved_rail" ,"horizontal-left-top", 288, 192, 0.5, 0.5}, + {"curved_rail" ,"horizontal-right-top", 288, 192, -0.5, 0.5}, + {"curved_rail" ,"horizontal-right-bottom", 288, 192, -0.5, -0.5}, + {"curved_rail" ,"horizontal-left-bottom", 288, 192, 0.5, -0.5}} + local res = {} + local g_path + for _ , key in ipairs(keys) do + part = {} + dashkey = key[1]:gsub("_", "-") + for _ , elem in ipairs(elems) do + if elem.id then + g_path = "__beautiful_straight_bridge_railway__" + footer = "-"..elem.id + else + g_path = "__base__" + footer = "" + end + part[elem[1]] = { + filename = string.format("%s/graphics/entity/%s/%s-%s-%s%s.png",g_path, dashkey, dashkey, key[2], elem[2], footer), + priority = elem.priority or "extra-high", + flags = elem.mipmap and { "icon" } or { "low-object" }, + width = key[3], + height = key[4], + shift = {key[5], key[6]}, + variation_count = (key[7] and elem.variations) or 1, + hr_version = { + filename = string.format("%s/graphics/entity/%s/hr-%s-%s-%s%s.png",g_path, dashkey, dashkey, key[2], elem[2], footer), + priority = elem.priority or "extra-high", + flags = elem.mipmap and { "icon" } or { "low-object" }, + width = key[3]*2, + height = key[4]*2, + shift = {key[5], key[6]}, + scale = 0.5, + variation_count = (key[7] and elem.variations) or 1, + } + } + end + dashkey2 = key[2]:gsub("-", "_") + res[key[1] .. "_" .. dashkey2] = part + end + + res["rail_endings"] = { sheets = { + { + filename = "__base__/graphics/entity/rail-endings/rail-endings-background.png", + priority = "high", + flags = { "low-object" }, + width = 128, + height = 128, + hr_version = { + filename = "__base__/graphics/entity/rail-endings/hr-rail-endings-background.png", + priority = "high", + flags = { "low-object" }, + width = 256, + height = 256, + scale = 0.5 + } + }, + { + filename = "__base__/graphics/entity/rail-endings/rail-endings-metals.png", + priority = "high", + flags = { "icon" }, + width = 128, + height = 128, + hr_version = { + filename = "__base__/graphics/entity/rail-endings/hr-rail-endings-metals.png", + priority = "high", + flags = { "icon" }, + width = 256, + height = 256, + scale = 0.5 + } + } + }} + return res +end + +local bbr_rail_pictures = function(id) + return bbr_rail_pictures_internal({{"metals", "metals", mipmap = true}, + {"backplates", "backplates", mipmap = true}, + {"ties", "ties", variations = 3}, + {"stone_path", "stone-path", variations = 3, id = id}, + {"stone_path_background", "stone-path-background", variations = 3, id = id}, + {"segment_visualisation_middle", "segment-visualisation-middle"}, + {"segment_visualisation_ending_front", "segment-visualisation-ending-1"}, + {"segment_visualisation_ending_back", "segment-visualisation-ending-2"}, + {"segment_visualisation_continuing_front", "segment-visualisation-continuing-1"}, + {"segment_visualisation_continuing_back", "segment-visualisation-continuing-2"} + }) +end + +-- add fast_replaceable_group to vanilla rail +-- data.raw["straight-rail"]["straight-rail"].fast_replaceable_group = "straight-rail" +-- data.raw["curved-rail"]["curved-rail"].fast_replaceable_group = "curved-rail" + +local ptype +local holder = {} +local bridges = { + brick = { + order = "a[train-system]-az-c", + ingredients = { + {"stone-brick", 1}, {"iron-stick", 1}, {"steel-plate", 1} + }, + overlay_icon = "stone-brick.png" + } +} + +for id, param in pairs(bridges) do + +-- recipe + ptype = table.deepcopy(data.raw["recipe"]["rail"]) + ptype.name = "bbr-rail-"..id + ptype.ingredients = param.ingredients + ptype.result = "bbr-rail-"..id + table.insert(holder, ptype) + +-- item + ptype = table.deepcopy(data.raw["rail-planner"]["rail"]) + ptype.name = "bbr-rail-"..id + ptype.localised_name = {"entity-name."..ptype.name} + ptype.icons = { + { icon = ptype.icon }, + { + icon = "__base__/graphics/icons/"..param.overlay_icon , + scale = 0.4, + shift = {6, -6}, + tint = param.tint + } + } + ptype.order = string.format("%s[%s]", param.order, ptype.name) + ptype.place_result = "bbr-straight-rail-"..id + ptype.straight_rail = "bbr-straight-rail-"..id + ptype.curved_rail = "bbr-curved-rail-"..id + table.insert(holder, ptype) + +-- straight-rail + ptype = table.deepcopy(data.raw["straight-rail"]["straight-rail"]) + ptype.name = "bbr-straight-rail-"..id + ptype.collision_mask = { "object-layer" } + ptype.minable.result = "bbr-rail-"..id + ptype.pictures = bbr_rail_pictures(id) + ptype.icons = { + { icon = ptype.icon }, + { + icon = "__base__/graphics/icons/"..param.overlay_icon , + scale = 0.4, + shift = {6, -6}, + tint = param.tint + } + } + table.insert(holder, ptype) + +-- curved-rail + ptype = table.deepcopy(data.raw["curved-rail"]["curved-rail"]) + ptype.name = "bbr-curved-rail-"..id + ptype.collision_mask = { "object-layer" } + ptype.minable.result = "bbr-rail-"..id + ptype.placeable_by.item="bbr-rail-"..id + ptype.pictures = bbr_rail_pictures(id) + ptype.icons = { + { icon = ptype.icon }, + { + icon = "__base__/graphics/icons/"..param.overlay_icon , + scale = 0.4, + shift = {6, -6}, + tint = param.tint + } + } + table.insert(holder, ptype) +end + +data:extend(holder) \ No newline at end of file diff --git a/beautiful_straight_bridge_railway/thumbnail.png b/beautiful_straight_bridge_railway/thumbnail.png new file mode 100644 index 00000000..29f5c83d Binary files /dev/null and b/beautiful_straight_bridge_railway/thumbnail.png differ diff --git a/beautiful_straight_bridge_railway_1.1.3/control.lua b/beautiful_straight_bridge_railway_1.1.3/control.lua deleted file mode 100644 index e4b36a21..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/control.lua +++ /dev/null @@ -1,240 +0,0 @@ - -runOnce = false - ---[[ -script.on_event(defines.events.on_built_entity -entity.get_connected_rail - ame.print ("Current bridge length: " .. currentBridgeLength) - - local table = require '__stdlib__/stdlib/utils/table' - - - game.print("railAtMousePos: " .. railAtMousePos.name - - - /c -local railAtMousePos = game.player.selected -railAtMousePos.destroy() - - - -/c -local railAtMousePos = game.player.selected - -if not railAtMousePos or not string.find(railAtMousePos.name, "bbr-straight", 1, true) then - game.print("Nothing selected.") - return -end - -local totalNum = 1 -local focusRail = railAtMousePos.get_connected_rail{ - rail_direction=defines.rail_direction.front, - rail_connection_direction=defines.rail_connection_direction.straight - } - -while (focusRail and string.find(focusRail.name, "bbr-straight", 1, true)) do - totalNum = totalNum + 1 - focusRail = focusRail.get_connected_rail{ - rail_direction=defines.rail_direction.front, - rail_connection_direction=defines.rail_connection_direction.straight - } -end - -focusRail = railAtMousePos.get_connected_rail{ - rail_direction=defines.rail_direction.back, - rail_connection_direction=defines.rail_connection_direction.straight - } - -while (focusRail and string.find(focusRail.name, "bbr-straight", 1, true)) do - totalNum = totalNum + 1 - focusRail = focusRail.get_connected_rail{ - rail_direction=defines.rail_direction.back, - rail_connection_direction=defines.rail_connection_direction.straight - } -end - -if totalNum > 10 then - game.print("Current bridge length of " .. totalNum .. " is longer than max. allowed 10!") - railAtMousePos.destroy() -end - - - -game.print("#" .. totalNum .. " BACK focusRail.name " .. focusRail.name) -game.print("#" .. totalNum .. " FRONT focusRail.name " .. focusRail.name) - - -, -, - local totalNum = 0 - - for i, segment in ipairs(railsSegmentsFront) do - string.find(tech, "bbr-straight", 1, true) - - game.print(i .. "# Rail segment length: " .. segment.name .. " num: " .. totalNum) - end - - - .. totalLength -local totalLength = railsSegmentsFront.table_size() - local allRailsOfSegment = Table.merge(railsSegmentsFront, railsSegmentsBack) - -]] - -local function on_built_entity(event) - --game.print("on_built_entity") - - created_entity = event.created_entity - if not created_entity then created_entity = event.entity end -- for event script_raised_built its only called entity - - if not created_entity or not string.find(created_entity.name, "bbr-straight", 1, true) then - --game.print("No created_entity or not bbr-straight") - return - end - - --game.print("on_built_entity created_entity.name " .. created_entity.name) - - local totalNum = 1 - local focusRail = created_entity.get_connected_rail{ - rail_direction=defines.rail_direction.front, - rail_connection_direction=defines.rail_connection_direction.straight - } - - while (focusRail and string.find(focusRail.name, "bbr-straight", 1, true)) do - totalNum = totalNum + 1 - focusRail = focusRail.get_connected_rail{ - rail_direction=defines.rail_direction.front, - rail_connection_direction=defines.rail_connection_direction.straight - } - end - - focusRail = created_entity.get_connected_rail{ - rail_direction=defines.rail_direction.back, - rail_connection_direction=defines.rail_connection_direction.straight - } - - while (focusRail and string.find(focusRail.name, "bbr-straight", 1, true)) do - totalNum = totalNum + 1 - focusRail = focusRail.get_connected_rail{ - rail_direction=defines.rail_direction.back, - rail_connection_direction=defines.rail_connection_direction.straight - } - end - - if totalNum > settings.global["beautiful-straight-bridge-railway-limit-max-bridge-length"].value then - game.print("Current bridge length of " .. totalNum .. " is longer than max. allowed " .. settings.global["beautiful-straight-bridge-railway-limit-max-bridge-length"].value .. "!") - created_entity.destroy() - else - -- game.print("Bridge length of " .. totalNum .. " is ok.") - end -end - -script.on_event({ - defines.events.on_built_entity, - defines.events.on_robot_built_entity, - defines.events.script_raised_built, - defines.events.script_raised_revive, - defines.events.on_entity_cloned - }, - on_built_entity) - -script.on_event(defines.events.on_tick, function(event) - if runOnce then return end - runOnce = true - if remote.interfaces.RailPowerSystem and remote.interfaces.RailPowerSystem.addRail then - local bridges = { "wood", "iron", "brick" } - for i, id in ipairs(bridges) do - remote.call("RailPowerSystem", "addRail", "bbr-straight-rail-electric-"..id, "bbr-curved-rail-electric-"..id) - end - end -end) - -script.on_event("kap-bbr-cycle-key", function(event) - local player = game.players[event.player_index] - if player then - local bprint = player.cursor_stack - if bprint and bprint.valid and (bprint.is_blueprint or bprint.is_blueprint_book) and bprint.valid_for_read and bprint.is_blueprint_setup() then - replace_blueprint_rails(player, bprint) - end - end -end) - -function get_replace_list(entities) --- get installed rails - local item = game.item_prototypes - local index = {} - local s_rails = {} - local c_rails = {} - local rail_counts = {} - local rail_nums = {} - if item then - for i, val in pairs(item) do - if val.type == "rail-planner" then - local s_name = val.straight_rail.name - local c_name = val.curved_rail.name - table.insert(index, {name = val.name, straight_rail = s_name, curved_rail = c_name, local_name = val.localised_name}) - s_rails[s_name] = 1 - c_rails[c_name] = 1 - rail_counts[val.name] = 0 - rail_nums[s_name] = { name = val.name, num = 1} - rail_nums[c_name] = { name = val.name, num = 4} - end - end - end - --- count rails in blueprint - for i, entity in pairs (entities) do - if rail_nums[entity.name] then - rail_counts[rail_nums[entity.name].name] = rail_counts[rail_nums[entity.name].name] + rail_nums[entity.name].num - end - end - --- get next rail - local max_num = -1 - local max_name - for name, count in pairs(rail_counts) do - if count > max_num then - max_num = count - max_name = name - end - end - - local target_index = 1 - if not max_name then return end - for i, val in pairs(index) do - if max_name == val.name then - target_index = i+1 - break - end - end - if target_index > #index then - target_index = 1 - end - - return { [index[target_index].straight_rail] = s_rails, [index[target_index].curved_rail] = c_rails }, index[target_index].local_name - -end - - -function replace_blueprint_rails(player, bprint) - local entities = bprint.get_blueprint_entities() - if entities then - local is_replace = false - local lists, replace_name = get_replace_list(entities) - if lists then - for r_to, r_from in pairs(lists) do - for k, entity in pairs (entities) do - if r_from[entity.name] then - is_replace = true - entities[k].name = r_to - end - end - end - bprint.set_blueprint_entities(entities) - end - if is_replace then - player.print(replace_name) - end - end -end - diff --git a/beautiful_straight_bridge_railway_1.1.3/data-updates.lua b/beautiful_straight_bridge_railway_1.1.3/data-updates.lua deleted file mode 100644 index 1799da46..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/data-updates.lua +++ /dev/null @@ -1,78 +0,0 @@ --- technology -table.insert(data.raw["technology"]["railway"].effects, {type = "unlock-recipe", recipe = "bbr-rail-wood"}) -table.insert(data.raw["technology"]["railway"].effects, {type = "unlock-recipe", recipe = "bbr-rail-iron"}) -table.insert(data.raw["technology"]["railway"].effects, {type = "unlock-recipe", recipe = "bbr-rail-brick"}) - --- change default entity to placeable on water -data.raw["rail-signal"]["rail-signal"].collision_mask = { "rail-layer" } -data.raw["rail-chain-signal"]["rail-chain-signal"].collision_mask = { "rail-layer" } - --- change big electric pole including other mods (bobs etc.) -local poles = data.raw["electric-pole"] -for key, value in pairs(poles) do - if (string.find(key, "big-electric-pole",1,true)) then - data.raw["electric-pole"][key].collision_mask = { "object-layer" } - end -end - --- RailPowerSystem support -if data.raw["technology"]["rail-power-system"] then - local bridges = { wood = "a[train-system]-az-d", iron = "a[train-system]-az-e", brick = "a[train-system]-az-f" } - for id, order in pairs(bridges) do - local ptype = { - type = "recipe", - name = "bbr-rail-electric-"..id, - enabled = false, - ingredients = { { "bbr-rail-"..id, 1 }, { "copper-cable", 3 } }, - result ="bbr-rail-electric-"..id, - result_count = 1, - } - data:extend{ptype} - - ptype = table.deepcopy(data.raw["rail-planner"]["bbr-rail-"..id]) - ptype.name = "bbr-rail-electric-"..id - ptype.localised_name = {"entity-name."..ptype.name} - ptype.order = string.format("%s[%s]", order, ptype.name) - table.insert(ptype.icons, { - icon = "__beautiful_straight_bridge_railway__/graphics/icons/electric.png", - icon_size = 32, - scale = 0.7, - shift = {-6, -6}, - }) - ptype.place_result = "bbr-straight-rail-electric-"..id - ptype.straight_rail = "bbr-straight-rail-electric-"..id - ptype.curved_rail = "bbr-curved-rail-electric-"..id - data:extend{ptype} - --- straight-rail - ptype = table.deepcopy(data.raw["straight-rail"]["bbr-straight-rail-"..id]) - ptype.name = "bbr-straight-rail-electric-"..id - ptype.minable.result = "bbr-rail-electric-"..id - table.insert(ptype.icons, { - icon = "__beautiful_straight_bridge_railway__/graphics/icons/electric.png", - icon_size = 32, - scale = 0.7, - shift = {-6, -6}, - }) - data:extend{ptype} - --- curved-rail - ptype = table.deepcopy(data.raw["curved-rail"]["bbr-curved-rail-"..id]) - ptype.name = "bbr-curved-rail-electric-"..id - ptype.minable.result = "bbr-rail-electric-"..id - ptype.placeable_by.item="bbr-rail-electric-"..id - table.insert(ptype.icons, { - icon = "__beautiful_straight_bridge_railway__/graphics/icons/electric.png", - icon_size = 32, - scale = 0.7, - shift = {-6, -6}, - }) - data:extend{ptype} - --- add technology effect - table.insert(data.raw["technology"]["rail-power-system"].effects, {type = "unlock-recipe", recipe = "bbr-rail-electric-"..id}) - end -end - - - diff --git a/beautiful_straight_bridge_railway_1.1.3/data.lua b/beautiful_straight_bridge_railway_1.1.3/data.lua deleted file mode 100644 index 9a34d061..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/data.lua +++ /dev/null @@ -1,11 +0,0 @@ -require("prototypes.item") - -data:extend({ - { - type = "custom-input", - name = "kap-bbr-cycle-key", - key_sequence = "CONTROL + SHIFT + R", - consuming = "game-only", - } - }) - diff --git a/beautiful_straight_bridge_railway_1.1.3/info.json b/beautiful_straight_bridge_railway_1.1.3/info.json deleted file mode 100644 index 107ed85b..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "beautiful_straight_bridge_railway", - "version": "1.1.3", - "title": "Schmitt | Beautiful Bridge Railway: Straight! Length-Limit!", - "author": "DE_Schmitt", - "contact": "", - "homepage": "", - "factorio_version": "1.1", - "dependencies": ["base >= 0.15"], - "description": "This mod is a copy of the mod Beautiful Bridge Railway by author kapaer. The only difference is that here curved rails can't be placed on water." -} - - - - - diff --git a/beautiful_straight_bridge_railway_1.1.3/locale/en/en.cfg b/beautiful_straight_bridge_railway_1.1.3/locale/en/en.cfg deleted file mode 100644 index 510fa9e5..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/locale/en/en.cfg +++ /dev/null @@ -1,28 +0,0 @@ -[entity-name] -bbr-rail-wood=Wooden bridge rail -bbr-straight-rail-wood=Straight wooden bridge rail -bbr-curved-rail-wood=Curved wooden bridge rail -bbr-rail-iron=Iron bridge rail -bbr-straight-rail-iron=Straight iron bridge rail -bbr-curved-rail-iron=Curved iron bridge rail -bbr-rail-brick=Brick bridge rail -bbr-straight-rail-brick=Straight brick bridge rail -bbr-curved-rail-brick=Curved brick bridge rail - -bbr-rail-electric-wood=Wooden bridge rail with power -bbr-straight-rail-electric-wood=Straight wooden bridge rail with power -bbr-curved-rail-electric-wood=Curved wooden bridge rail with power -bbr-rail-electric-iron=Iron bridge rail with power -bbr-straight-rail-electric-iron=Straight iron bridge rail with power -bbr-curved-rail-electric-iron=Curved iron bridge rail with power -bbr-rail-electric-brick=Brick bridge rail with power -bbr-straight-rail-electric-brick=Straight brick bridge rail with power -bbr-curved-rail-electric-brick=Curved brick bridge rail with power - -[controls] -kap-bbr-cycle-key=replace rails in Blueprint - -[mod-setting-name] -beautiful-straight-bridge-railway-limit-max-bridge-length=Limit max. bridge length -[mod-setting-description] -beautiful-straight-bridge-railway-limit-max-bridge-length=When building longer bridges there will be gaps after this distance. diff --git a/beautiful_straight_bridge_railway_1.1.3/migrations/register.lua b/beautiful_straight_bridge_railway_1.1.3/migrations/register.lua deleted file mode 100644 index 2c921e8f..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/migrations/register.lua +++ /dev/null @@ -1,20 +0,0 @@ - --- check research -for index, force in pairs(game.forces) do - local technologies = force.technologies - local recipes = force.recipes - - if technologies["railway"].researched then - recipes["bbr-rail-wood"].enabled = true - recipes["bbr-rail-iron"].enabled = true - recipes["bbr-rail-brick"].enabled = true - end - ---[[ - if technologies["electric-energy-distribution-1"].researched then - recipes["bbr-medium-electric-pole"].enabled = true - recipes["bbr-big-electric-pole"].enabled = true - end -]]-- - -end diff --git a/beautiful_straight_bridge_railway_1.1.3/migrations/register_railpowersystem.lua b/beautiful_straight_bridge_railway_1.1.3/migrations/register_railpowersystem.lua deleted file mode 100644 index a83e6f75..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/migrations/register_railpowersystem.lua +++ /dev/null @@ -1,13 +0,0 @@ - --- check research -for index, force in pairs(game.forces) do - local technologies = force.technologies - local recipes = force.recipes - - if technologies["rail-power-system"] and technologies["rail-power-system"].researched then - recipes["bbr-rail-electric-wood"].enabled = true - recipes["bbr-rail-electric-iron"].enabled = true - recipes["bbr-rail-electric-brick"].enabled = true - end - -end diff --git a/beautiful_straight_bridge_railway_1.1.3/prototypes/item.lua b/beautiful_straight_bridge_railway_1.1.3/prototypes/item.lua deleted file mode 100644 index 0d155fa9..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/prototypes/item.lua +++ /dev/null @@ -1,210 +0,0 @@ - -local bbr_rail_pictures_internal = function(elems) - local keys = {{"straight_rail", "horizontal", 64, 128, 0, 0, true}, - {"straight_rail", "vertical", 128, 64, 0, 0, true}, - {"straight_rail", "diagonal-left-top", 96, 96, 0.5, 0.5, true}, - {"straight_rail", "diagonal-right-top", 96, 96, -0.5, 0.5, true}, - {"straight_rail", "diagonal-right-bottom", 96, 96, -0.5, -0.5, true}, - {"straight_rail", "diagonal-left-bottom", 96, 96, 0.5, -0.5, true}, - {"curved_rail", "vertical-left-top", 192, 288, 0.5, 0.5}, - {"curved_rail", "vertical-right-top", 192, 288, -0.5, 0.5}, - {"curved_rail", "vertical-right-bottom", 192, 288, -0.5, -0.5}, - {"curved_rail", "vertical-left-bottom", 192, 288, 0.5, -0.5}, - {"curved_rail" ,"horizontal-left-top", 288, 192, 0.5, 0.5}, - {"curved_rail" ,"horizontal-right-top", 288, 192, -0.5, 0.5}, - {"curved_rail" ,"horizontal-right-bottom", 288, 192, -0.5, -0.5}, - {"curved_rail" ,"horizontal-left-bottom", 288, 192, 0.5, -0.5}} - local res = {} - local g_path - for _ , key in ipairs(keys) do - part = {} - dashkey = key[1]:gsub("_", "-") - for _ , elem in ipairs(elems) do - if elem.id then - g_path = "__beautiful_straight_bridge_railway__" - footer = "-"..elem.id - else - g_path = "__base__" - footer = "" - end - part[elem[1]] = { - filename = string.format("%s/graphics/entity/%s/%s-%s-%s%s.png",g_path, dashkey, dashkey, key[2], elem[2], footer), - priority = elem.priority or "extra-high", - flags = elem.mipmap and { "icon" } or { "low-object" }, - width = key[3], - height = key[4], - shift = {key[5], key[6]}, - variation_count = (key[7] and elem.variations) or 1, - hr_version = { - filename = string.format("%s/graphics/entity/%s/hr-%s-%s-%s%s.png",g_path, dashkey, dashkey, key[2], elem[2], footer), - priority = elem.priority or "extra-high", - flags = elem.mipmap and { "icon" } or { "low-object" }, - width = key[3]*2, - height = key[4]*2, - shift = {key[5], key[6]}, - scale = 0.5, - variation_count = (key[7] and elem.variations) or 1, - } - } - end - dashkey2 = key[2]:gsub("-", "_") - res[key[1] .. "_" .. dashkey2] = part - end - - res["rail_endings"] = { sheets = { - { - filename = "__base__/graphics/entity/rail-endings/rail-endings-background.png", - priority = "high", - flags = { "low-object" }, - width = 128, - height = 128, - hr_version = { - filename = "__base__/graphics/entity/rail-endings/hr-rail-endings-background.png", - priority = "high", - flags = { "low-object" }, - width = 256, - height = 256, - scale = 0.5 - } - }, - { - filename = "__base__/graphics/entity/rail-endings/rail-endings-metals.png", - priority = "high", - flags = { "icon" }, - width = 128, - height = 128, - hr_version = { - filename = "__base__/graphics/entity/rail-endings/hr-rail-endings-metals.png", - priority = "high", - flags = { "icon" }, - width = 256, - height = 256, - scale = 0.5 - } - } - }} - return res -end - -local bbr_rail_pictures = function(id) - return bbr_rail_pictures_internal({{"metals", "metals", mipmap = true}, - {"backplates", "backplates", mipmap = true}, - {"ties", "ties", variations = 3}, - {"stone_path", "stone-path", variations = 3, id = id}, - {"stone_path_background", "stone-path-background", variations = 3, id = id}, - {"segment_visualisation_middle", "segment-visualisation-middle"}, - {"segment_visualisation_ending_front", "segment-visualisation-ending-1"}, - {"segment_visualisation_ending_back", "segment-visualisation-ending-2"}, - {"segment_visualisation_continuing_front", "segment-visualisation-continuing-1"}, - {"segment_visualisation_continuing_back", "segment-visualisation-continuing-2"} - }) -end - --- add fast_replaceable_group to vanilla rail --- data.raw["straight-rail"]["straight-rail"].fast_replaceable_group = "straight-rail" --- data.raw["curved-rail"]["curved-rail"].fast_replaceable_group = "curved-rail" - -local ptype -local holder = {} -local bridges = { - wood = { - order = "a[train-system]-az-a", - ingredients = { - {"wood", 1}, {"iron-stick", 1}, {"steel-plate", 1} - }, - overlay_icon = "wood.png" - }, - iron = { - order = "a[train-system]-az-b", - ingredients = { - {"iron-plate", 1}, {"iron-stick", 1}, {"steel-plate", 1} - }, - overlay_icon = "steel-plate.png", - tint = {r=0.7, g=0.3, b=0.3, a=1} - }, - brick = { - order = "a[train-system]-az-c", - ingredients = { - {"stone-brick", 1}, {"iron-stick", 1}, {"steel-plate", 1} - }, - overlay_icon = "stone-brick.png" - } -} - -for id, param in pairs(bridges) do - --- recipe - ptype = table.deepcopy(data.raw["recipe"]["rail"]) - ptype.name = "bbr-rail-"..id - ptype.ingredients = param.ingredients - ptype.result = "bbr-rail-"..id - table.insert(holder, ptype) - --- item - ptype = table.deepcopy(data.raw["rail-planner"]["rail"]) - ptype.name = "bbr-rail-"..id - ptype.localised_name = {"entity-name."..ptype.name} - ptype.icons = { - { icon = ptype.icon }, - { - icon = "__base__/graphics/icons/"..param.overlay_icon , - scale = 0.4, - shift = {6, -6}, - tint = param.tint - } - } - ptype.order = string.format("%s[%s]", param.order, ptype.name) - ptype.place_result = "bbr-straight-rail-"..id - ptype.straight_rail = "bbr-straight-rail-"..id - ptype.curved_rail = "bbr-curved-rail-"..id - table.insert(holder, ptype) - --- straight-rail - ptype = table.deepcopy(data.raw["straight-rail"]["straight-rail"]) - ptype.name = "bbr-straight-rail-"..id - ptype.collision_mask = { "object-layer" } - ptype.minable.result = "bbr-rail-"..id - ptype.pictures = bbr_rail_pictures(id) - ptype.icons = { - { icon = ptype.icon }, - { - icon = "__base__/graphics/icons/"..param.overlay_icon , - scale = 0.4, - shift = {6, -6}, - tint = param.tint - } - } - table.insert(holder, ptype) - --- curved-rail - ptype = table.deepcopy(data.raw["curved-rail"]["curved-rail"]) - ptype.name = "bbr-curved-rail-"..id - -- ptype.collision_mask = { "object-layer" } - ptype.minable.result = "bbr-rail-"..id - ptype.placeable_by.item="bbr-rail-"..id - ptype.pictures = bbr_rail_pictures(id) - ptype.icons = { - { icon = ptype.icon }, - { - icon = "__base__/graphics/icons/"..param.overlay_icon , - scale = 0.4, - shift = {6, -6}, - tint = param.tint - } - } - table.insert(holder, ptype) -end - -data:extend(holder) - - --- move to data-updates.lua because will not be overwritten by other mods ---[[ --- change default entity to placeable on water -data.raw["rail-signal"]["rail-signal"].collision_mask = { "rail-layer" } -data.raw["rail-chain-signal"]["rail-chain-signal"].collision_mask = { "rail-layer" } - --- data.raw["electric-pole"]["small-electric-pole"].collision_mask = { "object-layer" } --- data.raw["electric-pole"]["medium-electric-pole"].collision_mask = { "object-layer" } -data.raw["electric-pole"]["big-electric-pole"].collision_mask = { "object-layer" } -]]-- diff --git a/beautiful_straight_bridge_railway_1.1.3/settings.lua b/beautiful_straight_bridge_railway_1.1.3/settings.lua deleted file mode 100644 index ce38b214..00000000 --- a/beautiful_straight_bridge_railway_1.1.3/settings.lua +++ /dev/null @@ -1,11 +0,0 @@ ---Landfill plus -data:extend({ - { - type = "int-setting", - name = "beautiful-straight-bridge-railway-limit-max-bridge-length", - setting_type = "runtime-global", - default_value = 20 - } -}) - - diff --git a/beautiful_straight_bridge_railway_1.1.3/thumbnail.png b/beautiful_straight_bridge_railway_1.1.3/thumbnail.png deleted file mode 100644 index eca95d82..00000000 Binary files a/beautiful_straight_bridge_railway_1.1.3/thumbnail.png and /dev/null differ diff --git a/belt-visualizer/changelog.txt b/belt-visualizer/changelog.txt new file mode 100644 index 00000000..58a6a5cb --- /dev/null +++ b/belt-visualizer/changelog.txt @@ -0,0 +1,159 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.3.5 +Date: 2024-01-10 + Features: + - Added temprary auto hover mode disable when using keybinds +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2024-01-10 + Locale: + - Added German translations (#5) +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 2024-01-08 + Bugfixes: + - Fixed inconsistency with toggle hover on loading save +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 2023-09-24 + Bugfixes: + - Temporarily fixed crash with loader ghosts +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 2023-09-22 + Bugfixes: + - Fixed changelog +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 2023-09-22 + Features: + - Added ghost highlighting +--------------------------------------------------------------------------------------------------- +Version: 1.2.10 +Date: 2023-08-16 + Bugfixes: + - Fixed multiple filter splitter issues +--------------------------------------------------------------------------------------------------- +Version: 1.2.9 +Date: 2023-07-23 + Features: + - Added per-player setting for container passthrough + Locale: + - Added Russian translations (#2) +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 +Date: 2023-07-21 + Features: + - Loaders now highlight through other loaders with the same container + Bugfixes: + - Fixed live refresh not working +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 2023-07-21 + Optimizations: + - Clearing highlights spread over multiple ticks to avoid small lag spikes +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 +Date: 2023-07-21 + Optimizations: + - Splitter performance improved with deduplication +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 2023-07-06 + Changes: + - Small code cleanup +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 2023-06-10 + Bugfixes: + - Fixed crash with missing LuaEntity::valid check +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 2023-06-08 + Bugfixes: + - Fixed crash with caching the belt line of ghost underground belts +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 2023-06-07 + Features: + - Removed flickering while using hover mode and selecting belts from the same line +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2023-05-14 + Bugfixes: + - Fixed live refresh activating on modifying previously highlighted belt + - Fixed live refresh not activating on underground belts and linked belts +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2023-05-05 + Features: + - Added Hover Mode + Optimizations: + - Looped belts no longer get duplicate lines drawn + Bugfixes: + - Fixed underground belts not highlighting the dash under rare conditions + - Fixed linked belts not highlighting backwards +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 2023-02-03 + Bugfixes: + - Fixed changelog version number +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 2023-02-03 + Bugfixes: + - Fixed crash when highlighting with blueprint library item in cursor +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2023-01-31 + Changes: + - Highlighting with an empty cursor will now highlight both sides of a filter splitter + Bugfixes: + - Fixed splitters getting queued twice when highlighted from both sides +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2022-12-14 + Bugfixes: + - Fixed crash when clearing highlights before a live refresh +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2022-12-14 + Bugfixes: + - Fixed highlighting consecutive splitters causing massive lag +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2022-12-02 + Bugfixes: + - Fixed usage of on_entity_cloned +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2022-12-02 + Features: + - Introduced live refresh when highlighted belt has been modified +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2022-11-14 + Features: + - Added functionality for highlighting through specific sides of filter splitters + Optimizations: + - Refactored most of the code for performance improvements +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 2022-11-02 + Bugfixes: + - Fixed highlights not being removed when a player leaves and rejoins the game +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 2022-11-02 + Bugfixes: + - Belt Visualizer now visualizes belts once more +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2022-11-02 + Bugfixes: + - Fixed crash when mining belts queued for highlighting +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2022-11-02 + Features: + - Initial release \ No newline at end of file diff --git a/belt-visualizer/control.lua b/belt-visualizer/control.lua new file mode 100644 index 00000000..70bf464e --- /dev/null +++ b/belt-visualizer/control.lua @@ -0,0 +1,345 @@ +local const = require("scripts/constants") +local utils = require("scripts/utils") +local highlight_entity = require("scripts/highlight") +local get_belt_type = utils.get_belt_type +local connectables = const.connectables +local lane_cycle = const.lane_cycle +local side_cycle = const.side_cycle +local e = defines.events + +local function setup_globals() + global.data = {} + global.in_progress = {} + global.refresh = {} + global.belt_lines = {} + global.clear = global.clear or {} + global.hover = global.hover or {} + -- global.colors = const.generate_colors() +end + +script.on_init(function() + setup_globals() +end) + +script.on_configuration_changed(function(_) + rendering.clear("belt-visualizer") + setup_globals() +end) + +local function clear(index) + global.in_progress[index] = nil + global.refresh[index] = nil + local data = global.data[index] + if not data then return end + data.checked = nil + data.belt_line = nil + if data.ids then + global.clear[data.ids] = true + end + data.ids = nil +end + +local function remove_player(event) + local index = event.player_index + clear(index) + global.data[index] = nil + global.belt_lines[index] = nil + global.hover[index] = nil +end + +script.on_event(e.on_player_left_game, remove_player) +script.on_event(e.on_player_removed, remove_player) + +local function highlight(event) + local index = event.player_index + clear(index) + local player = game.get_player(index) --[[@as LuaPlayer]] + local selected = player.selected + if not selected then + if global.hover[index] == "disabled" then + global.hover[index] = "on" + end + return + end + local ghost = event.input_name ~= "bv-highlight-belt" or selected.type == "entity-ghost" + local type = selected.type + if type == "entity-ghost" then + if ghost then + type = selected.ghost_type + else return end + end + if not connectables[type] then return end + local data = global.data[index] or {} + global.data[index] = data + local unit_number = selected.unit_number --[[@as number]] + local filter = not player.is_cursor_empty() and player.cursor_stack.valid_for_read and player.cursor_stack.name + if data.filter == filter and data.origin.valid and data.origin.unit_number == unit_number then + data.cycle = data.cycle % 3 + 1 + else + data.cycle = 1 + end + data.index = index + data.ghost = ghost + data.filter = filter + data.origin = selected + data.drawn_offsets = {} + data.drawn_arcs = {} + data.checked = {[unit_number] = utils.empty_check(type)} + data.belt_line = {} + data.head = selected + data.tail = selected + data.next_entities = {} + data.next_index = 1 + data.next_len = 2 + local lanes = lane_cycle[data.cycle] + for path = 1, 2 do + data.next_entities[path] = {entity = selected, lanes = lanes, path = path} + local sides = type == "splitter" and side_cycle.both + for lane in pairs(lanes) do + utils.check_entity(data, unit_number, lane, path, sides) + end + end + data.ids = {} + data.container_passthrough = settings.get_player_settings(player)["bv-container-passthrough"].value + global.in_progress[index] = true +end + +local function refresh(data) + clear(data.index) + local entity = data.origin + if not entity.valid then return end + data.next_entities = {} + data.next_index = 1 + data.next_len = 2 + for i = 1, 2 do + data.next_entities[i] = {entity = entity, lanes = lane_cycle[data.cycle], path = i} + end + data.drawn_offsets = {} + data.drawn_arcs = {} + data.checked = {[entity.unit_number] = utils.empty_check(entity.type)} + data.belt_line = {} + data.head = entity + data.tail = entity + data.ids = {} + global.in_progress[data.index] = true +end + +local function keybind(event) + local index = event.player_index + if global.hover[index] == "on" then + global.hover[index] = "disabled" + else + highlight(event) + end +end + +script.on_event("bv-highlight-belt", keybind) +script.on_event("bv-highlight-ghost", keybind) + +script.on_event(e.on_selected_entity_changed, function(event) + local player = game.get_player(event.player_index) --[[@as LuaPlayer]] + local data = global.data[event.player_index] + local selected = player.selected --[[@as LuaEntity]] + local is_connectable = selected and connectables[get_belt_type(selected)] + local belt_line = data and data.belt_line + if is_connectable and belt_line and belt_line[selected.unit_number] then + data.origin = player.selected + return + end + if global.hover[event.player_index] ~= "on" then return end + highlight(event) +end) + +local function toggle_hover(event) + local index = event.player_index + local player = game.get_player(index) --[[@as LuaPlayer]] + local toggle = not player.is_shortcut_toggled("bv-toggle-hover") + global.hover[index] = toggle and "on" or "off" + player.set_shortcut_toggled("bv-toggle-hover", toggle) +end + +script.on_event("bv-toggle-hover", toggle_hover) +script.on_event(e.on_lua_shortcut, function(event) + if event.prototype_name ~= "bv-toggle-hover" then return end + toggle_hover(event) +end) + +local function highlightable(data, entity) + local checked = data.checked + if not checked then return false end + if checked[entity.unit_number] then return true end + for _, input in pairs(entity.belt_neighbours.inputs) do + if checked[input.unit_number] then return true end + end + for _, output in pairs(entity.belt_neighbours.outputs) do + if checked[output.unit_number] then return true end + end + if entity.type == "underground-belt" then + local neighbour = entity.neighbours + if neighbour and checked[neighbour.unit_number] then return true end + elseif entity.type == "linked-belt" then + local neighbour = entity.linked_belt_neighbour + if neighbour and checked[neighbour.unit_number] then return true end + end + return false +end + +local function on_entity_modified(event) + local entity = event.entity or event.created_entity or event.destination + for _, data in pairs(global.data) do + if highlightable(data, entity) then + if not global.refresh[data.index] then + global.refresh[data.index] = event.tick + 60 + end + end + end +end + +local filter = {{filter = "transport-belt-connectable"}} + +script.on_event(e.on_built_entity, on_entity_modified, filter) +script.on_event(e.on_robot_built_entity, on_entity_modified, filter) +script.on_event(e.on_entity_cloned, on_entity_modified, filter) +script.on_event(e.script_raised_built, on_entity_modified, filter) +script.on_event(e.script_raised_revive, on_entity_modified, filter) +script.on_event(e.on_player_mined_entity, on_entity_modified, filter) +script.on_event(e.on_robot_mined_entity, on_entity_modified, filter) +script.on_event(e.script_raised_destroy, on_entity_modified, filter) +script.on_event(e.on_entity_died, on_entity_modified, filter) + +script.on_event(e.on_player_rotated_entity, function(event) + if not connectables[event.entity.type] then return end + on_entity_modified(event) + local entity = event.entity + local neighbours = entity.type == "underground-belt" and entity.neighbours or entity.type == "linked-belt" and entity.linked_belt_neighbour + if neighbours then on_entity_modified{entity = neighbours, tick = event.tick} end +end) + +---@param t table +---@param case any +local function switch(t, case, ...) + local fun = t[case] + if fun then + return fun(...) + end +end + +---@type table +local next_switch = { + ["transport-belt"] = function(entity) + return entity.belt_neighbours.outputs[1] + end, + ["underground-belt"] = function(entity) + if entity.belt_to_ground_type == "input" then + return entity.neighbours + else + return entity.belt_neighbours.outputs[1] + end + end, + ["linked-belt"] = function(entity) + if entity.linked_belt_type == "input" then + return entity.linked_belt_neighbour + else + return entity.belt_neighbours.outputs[1] + end + end, +} + +---@type table +local previous_switch = { + ["transport-belt"] = function(entity) + return entity.belt_neighbours.inputs[1] + end, + ["underground-belt"] = function(entity) + if entity.belt_to_ground_type == "output" then + return entity.neighbours + else + return entity.belt_neighbours.inputs[1] + end + end, + ["linked-belt"] = function(entity) + if entity.linked_belt_type == "output" then + return entity.linked_belt_neighbour + else + return entity.belt_neighbours.inputs[1] + end + end, +} + +local function walk_belt(belt, belt_switch, belt_line, max_highlights, ghost, include) + local c = 0 + while c < max_highlights do + if not belt then return end + if belt.type == "entity-ghost" and not ghost then return end + local belt_type = get_belt_type(belt) + if belt_type == "splitter" then return end + if include then + belt_line[belt.unit_number] = true + end + local limit = 1 + if (belt_type == "underground-belt" and belt.belt_to_ground_type == "output") + or (belt_type == "linked-belt" and belt.linked_belt_type == "output") then + limit = 0 + end + if #belt.belt_neighbours.inputs > limit then return end + belt_line[belt.unit_number] = true + belt = switch(belt_switch, belt_type, belt) + c = c + 1 + end + return belt +end + +local function cache_belt_line(data, max_highlights) + local head, tail = data.head, data.tail + local belt_line = data.belt_line + local ghost = data.ghost + if head and head.valid then + head = switch(next_switch, get_belt_type(head), head) + data.head = walk_belt(head, next_switch, belt_line, max_highlights, ghost) + end + if tail and tail.valid then + data.tail = walk_belt(tail, previous_switch, belt_line, max_highlights, ghost, true) + end +end + +script.on_event(e.on_tick, function(event) + for index, tick in pairs(global.refresh) do + if tick == event.tick then + refresh(global.data[index]) + end + end + local player_count = table_size(global.in_progress) + local highlight_maximum = settings.global["bv-highlight-maximum"].value + local max_highlights = highlight_maximum * 8 / table_size(global.clear) + for ids in pairs(global.clear) do + local c = 0 + for id in pairs(ids) do + if rendering.is_valid(id) then + rendering.destroy(id) + end + ids[id] = nil + c = c + 1 + if c > max_highlights then break end + end + if not next(ids) then global.clear[ids] = nil end + end + max_highlights = highlight_maximum / player_count + for index in pairs(global.in_progress) do + local data = global.data[index] + cache_belt_line(data, max_highlights) + local c = 0 + while c < max_highlights do + local next_index = data.next_index + local next_data = data.next_entities[next_index] + if not next_data then break end + local entity = next_data.entity + if entity.valid then + highlight_entity[get_belt_type(entity)](data, next_data.entity, next_data.lanes, next_data.path) + c = c + 1 + end + data.next_entities[next_index] = nil + data.next_index = next_index + 1 + end + if not data.next_entities[data.next_index] then global.in_progress[data.index] = nil end + end +end) \ No newline at end of file diff --git a/belt-visualizer/data.lua b/belt-visualizer/data.lua new file mode 100644 index 00000000..c298acd5 --- /dev/null +++ b/belt-visualizer/data.lua @@ -0,0 +1,52 @@ +data:extend{{ + type = "custom-input", + name = "bv-highlight-belt", + key_sequence = "SHIFT + H", + action = "lua", + order = "b", +}, { + type = "custom-input", + name = "bv-highlight-ghost", + key_sequence = "H", + action = "lua", + order = "a", +}, { + type = "custom-input", + name = "bv-toggle-hover", + key_sequence = "", + action = "lua", + order = "c", +}, { + type = "shortcut", + name = "bv-toggle-hover", + action = "lua", + localised_name = {"shortcut.bv-toggle-hover"}, + associated_control_input = "bv-toggle-hover", + toggleable = true, + icon = { + filename = "__belt-visualizer__/graphics/toggle-hover-x32.png", + priority = "extra-high-no-scale", + size = 32, + scale = 0.5, + mipmap_count = 1, + flags = {"gui-icon"}, + }, + small_icon = + { + filename = "__belt-visualizer__/graphics/toggle-hover-x24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 0.5, + mipmap_count = 1, + flags = {"gui-icon"} + }, + disabled_small_icon = + { + filename = "__belt-visualizer__/graphics/toggle-hover-x24-white.png", + priority = "extra-high-no-scale", + size = 24, + scale = 0.5, + mipmap_count = 1, + flags = {"gui-icon"} + } +}} \ No newline at end of file diff --git a/belt-visualizer_1.3.2/graphics/toggle-hover-x24-white.png b/belt-visualizer/graphics/toggle-hover-x24-white.png similarity index 100% rename from belt-visualizer_1.3.2/graphics/toggle-hover-x24-white.png rename to belt-visualizer/graphics/toggle-hover-x24-white.png diff --git a/belt-visualizer_1.3.2/graphics/toggle-hover-x24.png b/belt-visualizer/graphics/toggle-hover-x24.png similarity index 100% rename from belt-visualizer_1.3.2/graphics/toggle-hover-x24.png rename to belt-visualizer/graphics/toggle-hover-x24.png diff --git a/belt-visualizer_1.3.2/graphics/toggle-hover-x32.png b/belt-visualizer/graphics/toggle-hover-x32.png similarity index 100% rename from belt-visualizer_1.3.2/graphics/toggle-hover-x32.png rename to belt-visualizer/graphics/toggle-hover-x32.png diff --git a/belt-visualizer/info.json b/belt-visualizer/info.json new file mode 100644 index 00000000..a133b036 --- /dev/null +++ b/belt-visualizer/info.json @@ -0,0 +1,10 @@ +{ + "name": "belt-visualizer", + "version": "1.3.5", + "title": "Belt Visualizer", + "author": "_CodeGreen", + "contact": "Discord: _CodeGreen#0836", + "description": "Highlight a belt line with the press of a button! (H)\nCycle between different lanes by highlighting the same belt again.\nPressing again while not selecting a belt will stop highlighting.\n\nSee mod portal for more information.", + "factorio_version": "1.1", + "dependencies": [] +} \ No newline at end of file diff --git a/belt-visualizer/locale/en/config.cfg b/belt-visualizer/locale/en/config.cfg new file mode 100644 index 00000000..420cf962 --- /dev/null +++ b/belt-visualizer/locale/en/config.cfg @@ -0,0 +1,15 @@ +[mod-setting-name] +bv-highlight-maximum=Maximum highlights per tick +bv-container-passthrough=Container passthrough + +[mod-setting-description] +bv-highlight-maximum=The global maximum number of belts that will get highlighted per tick. Lowering will slow down the visualization speed and improve performance. +bv-container-passthrough=Controls whether highlighted loaders will continue through containers. + +[controls] +bv-highlight-belt=Highlight non-ghost belts +bv-highlight-ghost=Highlight belts +bv-toggle-hover=Toggle hover mode + +[shortcut] +bv-toggle-hover=Toggle hover mode \ No newline at end of file diff --git a/belt-visualizer_1.3.2/locale/ru/config.cfg b/belt-visualizer/locale/ru/config.cfg similarity index 100% rename from belt-visualizer_1.3.2/locale/ru/config.cfg rename to belt-visualizer/locale/ru/config.cfg diff --git a/belt-visualizer_1.3.2/scripts/constants.lua b/belt-visualizer/scripts/constants.lua similarity index 100% rename from belt-visualizer_1.3.2/scripts/constants.lua rename to belt-visualizer/scripts/constants.lua diff --git a/belt-visualizer_1.3.2/scripts/highlight.lua b/belt-visualizer/scripts/highlight.lua similarity index 100% rename from belt-visualizer_1.3.2/scripts/highlight.lua rename to belt-visualizer/scripts/highlight.lua diff --git a/belt-visualizer_1.3.2/scripts/rendering.lua b/belt-visualizer/scripts/rendering.lua similarity index 100% rename from belt-visualizer_1.3.2/scripts/rendering.lua rename to belt-visualizer/scripts/rendering.lua diff --git a/belt-visualizer_1.3.2/scripts/utils.lua b/belt-visualizer/scripts/utils.lua similarity index 100% rename from belt-visualizer_1.3.2/scripts/utils.lua rename to belt-visualizer/scripts/utils.lua diff --git a/belt-visualizer_1.3.2/settings.lua b/belt-visualizer/settings.lua similarity index 100% rename from belt-visualizer_1.3.2/settings.lua rename to belt-visualizer/settings.lua diff --git a/belt-visualizer_1.3.2/thumbnail.png b/belt-visualizer/thumbnail.png similarity index 100% rename from belt-visualizer_1.3.2/thumbnail.png rename to belt-visualizer/thumbnail.png diff --git a/belt-visualizer_1.3.2.zip b/belt-visualizer_1.3.2.zip deleted file mode 100644 index ff40088b..00000000 Binary files a/belt-visualizer_1.3.2.zip and /dev/null differ diff --git a/belt-visualizer_1.3.2/changelog.txt b/belt-visualizer_1.3.2/changelog.txt deleted file mode 100644 index 84bd9a7d..00000000 --- a/belt-visualizer_1.3.2/changelog.txt +++ /dev/null @@ -1,144 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 2023-09-24 - Bugfixes: - - Temporarily fixed crash with loader ghosts ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 2023-09-22 - Bugfixes: - - Fixed changelog ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2023-09-22 - Features: - - Added ghost highlighting ---------------------------------------------------------------------------------------------------- -Version: 1.2.10 -Date: 2023-08-16 - Bugfixes: - - Fixed multiple filter splitter issues ---------------------------------------------------------------------------------------------------- -Version: 1.2.9 -Date: 2023-07-23 - Features: - - Added per-player setting for container passthrough - Locale: - - Added Russian translations (#2) ---------------------------------------------------------------------------------------------------- -Version: 1.2.8 -Date: 2023-07-21 - Features: - - Loaders now highlight through other loaders with the same container - Bugfixes: - - Fixed live refresh not working ---------------------------------------------------------------------------------------------------- -Version: 1.2.7 -Date: 2023-07-21 - Optimizations: - - Clearing highlights spread over multiple ticks to avoid small lag spikes ---------------------------------------------------------------------------------------------------- -Version: 1.2.6 -Date: 2023-07-21 - Optimizations: - - Splitter performance improved with deduplication ---------------------------------------------------------------------------------------------------- -Version: 1.2.5 -Date: 2023-07-06 - Changes: - - Small code cleanup ---------------------------------------------------------------------------------------------------- -Version: 1.2.4 -Date: 2023-06-10 - Bugfixes: - - Fixed crash with missing LuaEntity::valid check ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 2023-06-08 - Bugfixes: - - Fixed crash with caching the belt line of ghost underground belts ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2023-06-07 - Features: - - Removed flickering while using hover mode and selecting belts from the same line ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2023-05-14 - Bugfixes: - - Fixed live refresh activating on modifying previously highlighted belt - - Fixed live refresh not activating on underground belts and linked belts ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2023-05-05 - Features: - - Added Hover Mode - Optimizations: - - Looped belts no longer get duplicate lines drawn - Bugfixes: - - Fixed underground belts not highlighting the dash under rare conditions - - Fixed linked belts not highlighting backwards ---------------------------------------------------------------------------------------------------- -Version: 1.1.7 -Date: 2023-02-03 - Bugfixes: - - Fixed changelog version number ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 2023-02-03 - Bugfixes: - - Fixed crash when highlighting with blueprint library item in cursor ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 2023-01-31 - Changes: - - Highlighting with an empty cursor will now highlight both sides of a filter splitter - Bugfixes: - - Fixed splitters getting queued twice when highlighted from both sides ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 2022-12-14 - Bugfixes: - - Fixed crash when clearing highlights before a live refresh ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2022-12-14 - Bugfixes: - - Fixed highlighting consecutive splitters causing massive lag ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2022-12-02 - Bugfixes: - - Fixed usage of on_entity_cloned ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2022-12-02 - Features: - - Introduced live refresh when highlighted belt has been modified ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2022-11-14 - Features: - - Added functionality for highlighting through specific sides of filter splitters - Optimizations: - - Refactored most of the code for performance improvements ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2022-11-02 - Bugfixes: - - Fixed highlights not being removed when a player leaves and rejoins the game ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2022-11-02 - Bugfixes: - - Belt Visualizer now visualizes belts once more ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2022-11-02 - Bugfixes: - - Fixed crash when mining belts queued for highlighting ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2022-11-02 - Features: - - Initial release \ No newline at end of file diff --git a/belt-visualizer_1.3.2/control.lua b/belt-visualizer_1.3.2/control.lua deleted file mode 100644 index 248e1815..00000000 --- a/belt-visualizer_1.3.2/control.lua +++ /dev/null @@ -1,331 +0,0 @@ -local const = require("scripts/constants") -local utils = require("scripts/utils") -local highlight_entity = require("scripts/highlight") -local get_belt_type = utils.get_belt_type -local connectables = const.connectables -local lane_cycle = const.lane_cycle -local side_cycle = const.side_cycle -local e = defines.events - -local function setup_globals() - global.data = {} - global.in_progress = {} - global.refresh = {} - global.belt_lines = {} - global.clear = global.clear or {} - global.hover = global.hover or {} - -- global.colors = const.generate_colors() -end - -script.on_init(function() - setup_globals() -end) - -script.on_configuration_changed(function(_) - rendering.clear("belt-visualizer") - setup_globals() -end) - -local function clear(index) - global.in_progress[index] = nil - global.refresh[index] = nil - local data = global.data[index] - if not data then return end - data.checked = nil - data.belt_line = nil - if data.ids then - global.clear[data.ids] = true - end - data.ids = nil -end - -local function remove_player(event) - local index = event.player_index - clear(index) - global.data[index] = nil - global.belt_lines[index] = nil - global.hover[index] = nil -end - -script.on_event(e.on_player_left_game, remove_player) -script.on_event(e.on_player_removed, remove_player) - -local function highlight(event) - local index = event.player_index - clear(index) - local player = game.get_player(index) --[[@as LuaPlayer]] - local selected = player.selected - if not selected then return end - local ghost = selected.type == "entity-ghost" or event.input_name == "bv-highlight-ghost" - local type = selected.type - if type == "entity-ghost" then - if ghost then - type = selected.ghost_type - else return end - end - if not connectables[type] then return end - local data = global.data[index] or {} - global.data[index] = data - local unit_number = selected.unit_number --[[@as number]] - local filter = not player.is_cursor_empty() and player.cursor_stack.valid_for_read and player.cursor_stack.name - if data.ghost == ghost and data.filter == filter and data.origin.valid and data.origin.unit_number == unit_number then - data.cycle = data.cycle % 3 + 1 - else - data.cycle = 1 - end - data.index = index - data.ghost = ghost - data.filter = filter - data.origin = selected - data.drawn_offsets = {} - data.drawn_arcs = {} - data.checked = {[unit_number] = utils.empty_check(type)} - data.belt_line = {} - data.head = selected - data.tail = selected - data.next_entities = {} - data.next_index = 1 - data.next_len = 2 - local lanes = lane_cycle[data.cycle] - for path = 1, 2 do - data.next_entities[path] = {entity = selected, lanes = lanes, path = path} - local sides = type == "splitter" and side_cycle.both - for lane in pairs(lanes) do - utils.check_entity(data, unit_number, lane, path, sides) - end - end - data.ids = {} - data.container_passthrough = settings.get_player_settings(player)["bv-container-passthrough"].value - global.in_progress[index] = true -end - -local function refresh(data) - clear(data.index) - local entity = data.origin - if not entity.valid then return end - data.next_entities = {} - data.next_index = 1 - data.next_len = 2 - for i = 1, 2 do - data.next_entities[i] = {entity = entity, lanes = lane_cycle[data.cycle], path = i} - end - data.drawn_offsets = {} - data.drawn_arcs = {} - data.checked = {[entity.unit_number] = utils.empty_check(entity.type)} - data.belt_line = {} - data.head = entity - data.tail = entity - data.ids = {} - global.in_progress[data.index] = true -end - -script.on_event("bv-highlight-belt", highlight) -script.on_event("bv-highlight-ghost", highlight) - -script.on_event(e.on_selected_entity_changed, function(event) - if not global.hover[event.player_index] then return end - local player = game.get_player(event.player_index) --[[@as LuaPlayer]] - local data = global.data[event.player_index] - local selected = player.selected --[[@as LuaEntity]] - local is_connectable = selected and connectables[get_belt_type(selected)] - local belt_line = data and data.belt_line - if is_connectable and belt_line and belt_line[selected.unit_number] then - data.origin = player.selected - return - end - highlight(event) -end) - -local function toggle_hover(event) - local index = event.player_index - clear(index) - local player = game.get_player(index) --[[@as LuaPlayer]] - global.hover[index] = not global.hover[index] - player.set_shortcut_toggled("bv-toggle-hover", global.hover[index]) -end - -script.on_event("bv-toggle-hover", toggle_hover) -script.on_event(e.on_lua_shortcut, function(event) - if event.prototype_name ~= "bv-toggle-hover" then return end - toggle_hover(event) -end) - -local function highlightable(data, entity) - local checked = data.checked - if not checked then return false end - if checked[entity.unit_number] then return true end - for _, input in pairs(entity.belt_neighbours.inputs) do - if checked[input.unit_number] then return true end - end - for _, output in pairs(entity.belt_neighbours.outputs) do - if checked[output.unit_number] then return true end - end - if entity.type == "underground-belt" then - local neighbour = entity.neighbours - if neighbour and checked[neighbour.unit_number] then return true end - elseif entity.type == "linked-belt" then - local neighbour = entity.linked_belt_neighbour - if neighbour and checked[neighbour.unit_number] then return true end - end - return false -end - -local function on_entity_modified(event) - local entity = event.entity or event.created_entity or event.destination - for _, data in pairs(global.data) do - if highlightable(data, entity) then - if not global.refresh[data.index] then - global.refresh[data.index] = event.tick + 60 - end - end - end -end - -local filter = {{filter = "transport-belt-connectable"}} - -script.on_event(e.on_built_entity, on_entity_modified, filter) -script.on_event(e.on_robot_built_entity, on_entity_modified, filter) -script.on_event(e.on_entity_cloned, on_entity_modified, filter) -script.on_event(e.script_raised_built, on_entity_modified, filter) -script.on_event(e.script_raised_revive, on_entity_modified, filter) -script.on_event(e.on_player_mined_entity, on_entity_modified, filter) -script.on_event(e.on_robot_mined_entity, on_entity_modified, filter) -script.on_event(e.script_raised_destroy, on_entity_modified, filter) -script.on_event(e.on_entity_died, on_entity_modified, filter) - -script.on_event(e.on_player_rotated_entity, function(event) - if not connectables[event.entity.type] then return end - on_entity_modified(event) - local entity = event.entity - local neighbours = entity.type == "underground-belt" and entity.neighbours or entity.type == "linked-belt" and entity.linked_belt_neighbour - if neighbours then on_entity_modified{entity = neighbours, tick = event.tick} end -end) - ----@param t table ----@param case any -local function switch(t, case, ...) - local fun = t[case] - if fun then - return fun(...) - end -end - ----@type table -local next_switch = { - ["transport-belt"] = function(entity) - return entity.belt_neighbours.outputs[1] - end, - ["underground-belt"] = function(entity) - if entity.belt_to_ground_type == "input" then - return entity.neighbours - else - return entity.belt_neighbours.outputs[1] - end - end, - ["linked-belt"] = function(entity) - if entity.linked_belt_type == "input" then - return entity.linked_belt_neighbour - else - return entity.belt_neighbours.outputs[1] - end - end, -} - ----@type table -local previous_switch = { - ["transport-belt"] = function(entity) - return entity.belt_neighbours.inputs[1] - end, - ["underground-belt"] = function(entity) - if entity.belt_to_ground_type == "output" then - return entity.neighbours - else - return entity.belt_neighbours.inputs[1] - end - end, - ["linked-belt"] = function(entity) - if entity.linked_belt_type == "output" then - return entity.linked_belt_neighbour - else - return entity.belt_neighbours.inputs[1] - end - end, -} - -local function walk_belt(belt, belt_switch, belt_line, max_highlights, ghost, include) - local c = 0 - while c < max_highlights do - if not belt then return end - if belt.type == "entity-ghost" and not ghost then return end - local belt_type = get_belt_type(belt) - if belt_type == "splitter" then return end - if include then - belt_line[belt.unit_number] = true - end - local limit = 1 - if (belt_type == "underground-belt" and belt.belt_to_ground_type == "output") - or (belt_type == "linked-belt" and belt.linked_belt_type == "output") then - limit = 0 - end - if #belt.belt_neighbours.inputs > limit then return end - belt_line[belt.unit_number] = true - belt = switch(belt_switch, belt_type, belt) - c = c + 1 - end - return belt -end - -local function cache_belt_line(data, max_highlights) - local head, tail = data.head, data.tail - local belt_line = data.belt_line - local ghost = data.ghost - if head and head.valid then - head = switch(next_switch, get_belt_type(head), head) - data.head = walk_belt(head, next_switch, belt_line, max_highlights, ghost) - end - if tail and tail.valid then - data.tail = walk_belt(tail, previous_switch, belt_line, max_highlights, ghost, true) - end -end - -script.on_event(e.on_tick, function(event) - for index, tick in pairs(global.refresh) do - if tick == event.tick then - refresh(global.data[index]) - end - end - local player_count = table_size(global.in_progress) - local highlight_maximum = settings.global["bv-highlight-maximum"].value - local max_highlights = highlight_maximum * 8 / table_size(global.clear) - for ids in pairs(global.clear) do - local c = 0 - for id in pairs(ids) do - if rendering.is_valid(id) then - rendering.destroy(id) - end - ids[id] = nil - c = c + 1 - if c > max_highlights then break end - end - if not next(ids) then global.clear[ids] = nil end - end - max_highlights = highlight_maximum / player_count - for index in pairs(global.in_progress) do - local data = global.data[index] - cache_belt_line(data, max_highlights) - local c = 0 - while c < max_highlights do - local next_index = data.next_index - local next_data = data.next_entities[next_index] - if not next_data then break end - local entity = next_data.entity - if entity.valid then - highlight_entity[get_belt_type(entity)](data, next_data.entity, next_data.lanes, next_data.path) - c = c + 1 - end - data.next_entities[next_index] = nil - data.next_index = next_index + 1 - end - if not data.next_entities[data.next_index] then global.in_progress[data.index] = nil end - end -end) \ No newline at end of file diff --git a/belt-visualizer_1.3.2/data.lua b/belt-visualizer_1.3.2/data.lua deleted file mode 100644 index 1bb56f6d..00000000 --- a/belt-visualizer_1.3.2/data.lua +++ /dev/null @@ -1,52 +0,0 @@ -data:extend{{ - type = "custom-input", - name = "bv-highlight-belt", - key_sequence = "SHIFT + H", - action = "lua", - order = "b", -},{ - type = "custom-input", - name = "bv-highlight-ghost", - key_sequence = "H", - action = "lua", - order = "a", -},{ - type = "custom-input", - name = "bv-toggle-hover", - key_sequence = "", - action = "lua", - order = "c", -},{ - type = "shortcut", - name = "bv-toggle-hover", - action = "lua", - localised_name = {"shortcut.bv-toggle-hover"}, - associated_control_input = "bv-toggle-hover", - toggleable = true, - icon = { - filename = "__belt-visualizer__/graphics/toggle-hover-x32.png", - priority = "extra-high-no-scale", - size = 32, - scale = 0.5, - mipmap_count = 1, - flags = {"gui-icon"}, - }, - small_icon = - { - filename = "__belt-visualizer__/graphics/toggle-hover-x24.png", - priority = "extra-high-no-scale", - size = 24, - scale = 0.5, - mipmap_count = 1, - flags = {"gui-icon"} - }, - disabled_small_icon = - { - filename = "__belt-visualizer__/graphics/toggle-hover-x24-white.png", - priority = "extra-high-no-scale", - size = 24, - scale = 0.5, - mipmap_count = 1, - flags = {"gui-icon"} - } -}} diff --git a/belt-visualizer_1.3.2/info.json b/belt-visualizer_1.3.2/info.json deleted file mode 100644 index 4b45ed3e..00000000 --- a/belt-visualizer_1.3.2/info.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "belt-visualizer", - "version": "1.3.2", - "title": "Belt Visualizer", - "author": "_CodeGreen", - "contact": "Discord: _CodeGreen#0836", - "description": "Highlight a belt line with the press of a button! (H)\nCycle between different lanes by highlighting the same belt again.\nPressing again while not selecting a belt will stop highlighting.\n\nSee mod portal for more information.", - "factorio_version": "1.1", - "dependencies": [] -} \ No newline at end of file diff --git a/belt-visualizer_1.3.2/locale/en/config.cfg b/belt-visualizer_1.3.2/locale/en/config.cfg deleted file mode 100644 index c3e61fb1..00000000 --- a/belt-visualizer_1.3.2/locale/en/config.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[mod-setting-name] -bv-highlight-maximum=Maximum highlights per tick -bv-container-passthrough=Container passthrough - -[mod-setting-description] -bv-highlight-maximum=The global maximum number of belts that will get highlighted per tick. Lowering will slow down the visualization speed and improve performance. -bv-container-passthrough=Controls whether highlighted loaders will continue through containers. - -[controls] -bv-highlight-belt=Highlight Non-Ghost Belts -bv-highlight-ghost=Highlight Belts -bv-toggle-hover=Toggle Hover Mode - -[shortcut] -bv-toggle-hover=Toggle Hover Mode \ No newline at end of file diff --git a/betterCargoPlanes_1.3.7/README.md b/betterCargoPlanes/README.md similarity index 100% rename from betterCargoPlanes_1.3.7/README.md rename to betterCargoPlanes/README.md diff --git a/betterCargoPlanes_1.3.7/changelog.txt b/betterCargoPlanes/changelog.txt similarity index 100% rename from betterCargoPlanes_1.3.7/changelog.txt rename to betterCargoPlanes/changelog.txt diff --git a/betterCargoPlanes_1.3.7/control.lua b/betterCargoPlanes/control.lua similarity index 100% rename from betterCargoPlanes_1.3.7/control.lua rename to betterCargoPlanes/control.lua diff --git a/betterCargoPlanes_1.3.7/data-final-fixes.lua b/betterCargoPlanes/data-final-fixes.lua similarity index 100% rename from betterCargoPlanes_1.3.7/data-final-fixes.lua rename to betterCargoPlanes/data-final-fixes.lua diff --git a/betterCargoPlanes_1.3.7/data-updates.lua b/betterCargoPlanes/data-updates.lua similarity index 100% rename from betterCargoPlanes_1.3.7/data-updates.lua rename to betterCargoPlanes/data-updates.lua diff --git a/betterCargoPlanes_1.3.7/data.lua b/betterCargoPlanes/data.lua similarity index 100% rename from betterCargoPlanes_1.3.7/data.lua rename to betterCargoPlanes/data.lua diff --git a/betterCargoPlanes_1.3.7/graphics/entity/better_cargo_plane/better_cargo_plane_spritesheet.png b/betterCargoPlanes/graphics/entity/better_cargo_plane/better_cargo_plane_spritesheet.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/entity/better_cargo_plane/better_cargo_plane_spritesheet.png rename to betterCargoPlanes/graphics/entity/better_cargo_plane/better_cargo_plane_spritesheet.png diff --git a/betterCargoPlanes_1.3.7/graphics/entity/better_cargo_plane/hr-better_cargo_plane_spritesheet.png b/betterCargoPlanes/graphics/entity/better_cargo_plane/hr-better_cargo_plane_spritesheet.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/entity/better_cargo_plane/hr-better_cargo_plane_spritesheet.png rename to betterCargoPlanes/graphics/entity/better_cargo_plane/hr-better_cargo_plane_spritesheet.png diff --git a/betterCargoPlanes_1.3.7/graphics/entity/even_better_cargo_plane/even_better_cargo_plane_spritesheet.png b/betterCargoPlanes/graphics/entity/even_better_cargo_plane/even_better_cargo_plane_spritesheet.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/entity/even_better_cargo_plane/even_better_cargo_plane_spritesheet.png rename to betterCargoPlanes/graphics/entity/even_better_cargo_plane/even_better_cargo_plane_spritesheet.png diff --git a/betterCargoPlanes_1.3.7/graphics/entity/even_better_cargo_plane/hr-even_better_cargo_plane_spritesheet.png b/betterCargoPlanes/graphics/entity/even_better_cargo_plane/hr-even_better_cargo_plane_spritesheet.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/entity/even_better_cargo_plane/hr-even_better_cargo_plane_spritesheet.png rename to betterCargoPlanes/graphics/entity/even_better_cargo_plane/hr-even_better_cargo_plane_spritesheet.png diff --git a/betterCargoPlanes_1.3.7/graphics/icons/better_cargo_plane_icon.png b/betterCargoPlanes/graphics/icons/better_cargo_plane_icon.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/icons/better_cargo_plane_icon.png rename to betterCargoPlanes/graphics/icons/better_cargo_plane_icon.png diff --git a/betterCargoPlanes_1.3.7/graphics/icons/even_better_cargo_plane_icon.png b/betterCargoPlanes/graphics/icons/even_better_cargo_plane_icon.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/icons/even_better_cargo_plane_icon.png rename to betterCargoPlanes/graphics/icons/even_better_cargo_plane_icon.png diff --git a/betterCargoPlanes_1.3.7/graphics/technology/better-cargo-planes-tech.png b/betterCargoPlanes/graphics/technology/better-cargo-planes-tech.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/technology/better-cargo-planes-tech.png rename to betterCargoPlanes/graphics/technology/better-cargo-planes-tech.png diff --git a/betterCargoPlanes_1.3.7/graphics/technology/even-better-cargo-planes-tech.png b/betterCargoPlanes/graphics/technology/even-better-cargo-planes-tech.png similarity index 100% rename from betterCargoPlanes_1.3.7/graphics/technology/even-better-cargo-planes-tech.png rename to betterCargoPlanes/graphics/technology/even-better-cargo-planes-tech.png diff --git a/betterCargoPlanes_1.3.7/info.json b/betterCargoPlanes/info.json similarity index 100% rename from betterCargoPlanes_1.3.7/info.json rename to betterCargoPlanes/info.json diff --git a/betterCargoPlanes_1.3.7/locale/en/all.cfg b/betterCargoPlanes/locale/en/all.cfg similarity index 100% rename from betterCargoPlanes_1.3.7/locale/en/all.cfg rename to betterCargoPlanes/locale/en/all.cfg diff --git a/betterCargoPlanes_1.3.7/locale/ru/all.cfg b/betterCargoPlanes/locale/ru/all.cfg similarity index 100% rename from betterCargoPlanes_1.3.7/locale/ru/all.cfg rename to betterCargoPlanes/locale/ru/all.cfg diff --git a/betterCargoPlanes_1.3.7/prototypes/compatability/Krastorio2_Equipment.lua b/betterCargoPlanes/prototypes/compatability/Krastorio2_Equipment.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/compatability/Krastorio2_Equipment.lua rename to betterCargoPlanes/prototypes/compatability/Krastorio2_Equipment.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/compatability/Krastorio2_Equipment_Final-Fixes.lua b/betterCargoPlanes/prototypes/compatability/Krastorio2_Equipment_Final-Fixes.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/compatability/Krastorio2_Equipment_Final-Fixes.lua rename to betterCargoPlanes/prototypes/compatability/Krastorio2_Equipment_Final-Fixes.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/entities.lua b/betterCargoPlanes/prototypes/entities.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/entities.lua rename to betterCargoPlanes/prototypes/entities.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/entity-updates.lua b/betterCargoPlanes/prototypes/entity-updates.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/entity-updates.lua rename to betterCargoPlanes/prototypes/entity-updates.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/equipment-grid-updates.lua b/betterCargoPlanes/prototypes/equipment-grid-updates.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/equipment-grid-updates.lua rename to betterCargoPlanes/prototypes/equipment-grid-updates.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/equipment-grid.lua b/betterCargoPlanes/prototypes/equipment-grid.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/equipment-grid.lua rename to betterCargoPlanes/prototypes/equipment-grid.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/items.lua b/betterCargoPlanes/prototypes/items.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/items.lua rename to betterCargoPlanes/prototypes/items.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/recipe-updates.lua b/betterCargoPlanes/prototypes/recipe-updates.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/recipe-updates.lua rename to betterCargoPlanes/prototypes/recipe-updates.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/recipes.lua b/betterCargoPlanes/prototypes/recipes.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/recipes.lua rename to betterCargoPlanes/prototypes/recipes.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/technologies-updates.lua b/betterCargoPlanes/prototypes/technologies-updates.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/technologies-updates.lua rename to betterCargoPlanes/prototypes/technologies-updates.lua diff --git a/betterCargoPlanes_1.3.7/prototypes/technologies.lua b/betterCargoPlanes/prototypes/technologies.lua similarity index 100% rename from betterCargoPlanes_1.3.7/prototypes/technologies.lua rename to betterCargoPlanes/prototypes/technologies.lua diff --git a/betterCargoPlanes_1.3.7/settings.lua b/betterCargoPlanes/settings.lua similarity index 100% rename from betterCargoPlanes_1.3.7/settings.lua rename to betterCargoPlanes/settings.lua diff --git a/betterCargoPlanes_1.3.7/thumbnail.png b/betterCargoPlanes/thumbnail.png similarity index 100% rename from betterCargoPlanes_1.3.7/thumbnail.png rename to betterCargoPlanes/thumbnail.png diff --git a/blueprint-sandboxes_1.16.4/.gitignore b/blueprint-sandboxes_1.16.4/.gitignore deleted file mode 100644 index 99cdfd44..00000000 --- a/blueprint-sandboxes_1.16.4/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.idea -*.iml -*.kra -release diff --git a/blueprint-sandboxes_1.16.4/README.md b/blueprint-sandboxes_1.16.4/README.md deleted file mode 100644 index cf9b4147..00000000 --- a/blueprint-sandboxes_1.16.4/README.md +++ /dev/null @@ -1,73 +0,0 @@ -## Blueprint Sandboxes - -Temporary Editor-lite permissions in Lab-like environments for designing and experimenting. - -Inspired by previous mods such as [Edit-Blueprints](https://mods.factorio.com/mod/Edit-Blueprints) and [Blueprint Designer Lab](https://mods.factorio.com/mod/BlueprintLab_design), [this mod](https://mods.factorio.com/mod/blueprint-sandboxes) aims to handle the situations where you want to design or tweak some Blueprints in a God-mode-like way, but without saving your active game, loading a different sandbox game, then leaving that to go back to the original once done. - -To that end, it supports personal and team Sandbox Surfaces which enable: God-mode, extra Recipes (and Technologies if you wish), and automated construction. Getting in and out of Sandboxes is immediate and toggle-able via shortcuts (defaults to Shift+B). - -To teach you the basics and provide many more details, the in-game Tips-and-Tricks are used; the first is visible after a few seconds, and the rest after you start using the Sandbox. The rest of this is considered a non-exhaustive summary - if you want to know more, see those Tips/Tricks! - -* Multiple Sandboxes: your own and one for your force/team. If you're using Space Exploration, there's also Planetary and Orbital Sandboxes. -* Blueprint Intput/Output: Copy/Paste, Blueprint Library, and in-Cursor. -* Item Input/Output: Infinity chests and loaders are available. -* God-mode: Fly around and construct/deconstruct much faster. -* Persistent Inventory: Your Inventory is saved and restored when exiting/entering. -* Automated Construction: Ghosts are automatically built for you. -* All Recipes: If desired, use all Technology (instead of what you already know). -* Resource Generation: Draw then use any kind of Resource Patch. -* Water placement: Place water, so you can then landfill it (or not). -* Default Equipment: You can decide what an empty Sandbox starts with. - -# FAQ - -* Pollution counts towards Evolution. -* Production Statistics cannot be segregated. -* Crafting Counts cannot be segregated - this does not work for Lazy Bastard. -* You can die in the real world while in a Sandbox. -* When Resetting the Sandbox and the game crashes with any other mod listed in the error - it's _that_ mod's fault for not handling `on_pre_surface_cleared`. - -# Known Issues - -### Cannot Undo in (Real World/Sandbox) after coming from (Sandbox/Real World) - -This is an issue with Factorio, and there's nothing this mod can do about it (while still being this mod). - -### Space Exploration Sandboxes report incorrect Daylight on their first use - -This also seems to be an issue with Factorio. Although the Daylight property is forcefully set and told to not change, the next read of the value will be zero (or perhaps what the value originally was). It's purely a cosmetic bug. - -### Space Exploration sometimes blocks placements due to Zone/Force issues - -In its original form, this mod had great compatibility with Space Exploration - from this mod's POV. From SE's POV, however, at least two things were bad. First, it's technically possible to cheat (well, it _always_ is, since you're in control of the games you play), even though this mod discourages it and aims to prevent it. Second, SE's handling of Forces had some assumptions that were not true when using this mod. As such, there were a few bugs, like having twice as many CMEs as normal. - -Recently, SE became "aware" of this mod and have made changes to _prevent_ placement of some important SE Entities. Around the same time, this mod introduced "Illusions" to safely swap out scripted Entities with basic placeholders. - -At this time, _most_ of those Entities cannot _normally_ be placed within the Sandboxes - you will get an error from SE instead. They _can_ be Ghost-built (holding shift, or using a Blueprint), in _most_ cases. This is because SE does not check the types of the Ghosts, and this mod can safely replace them with Illusions. For the real Entities, SE blocks the placement _before_ this mod can do anything about it. - -I've reached out to their team to improve the compatibility, but nothing came of it. - -### Selecting new contents for some Blueprints will include Illusions instead of Real Entities - -There is a significant flaw in Factorio's handling of Blueprints that have already been created when you want to "select new contents" for them; to quote a Factorio dev, it's "kind of a giant hack in my opinion and I don't see it getting re-worked any time soon." This is the only real acknowledgement of this issue, whereas all other responses seem to deflect or feign ignorance. As far as I have found, this is the only (and for our purposes, quite a large) shortcoming of the otherwise excellent Modding API. - -In short, this mod has _no_ access or capability to adjust a Blueprint when you are "selecting new contents." This capability is necessary to swap our Fake Illusions (script-less Entities that replace other, more complicated ones for various reasons) with their Real Counterparts. This cannot be overcome without Factorio itself being fixed by the development team. That said, there is _potentially_ a hackish and unnecessary workaround when you do this to a Blueprint in your Inventory. - -I have found at least three existing discussions on this topic, for reference: - -* [New contents for blueprint broken vs. new blueprint](https://forums.factorio.com/viewtopic.php?f=29&t=88793) -* [Blueprints missing entity list when reused](https://forums.factorio.com/viewtopic.php?f=7&t=99323) -* [Updated blueprint has no entities during on_player_setup_blueprint](https://forums.factorio.com/viewtopic.php?f=48&t=88100) - -### Blueprint Library sourced Blueprints will not transfer via Cursor - -Similar to above, another Factorio bug describes Blueprints in your cursor that are sourced from the Blueprint Library will be described as __not__ `valid_for_read`, thus accessing their contents is not possible, so this mod cannot transfer them into your Sandbox cursor because of that. - -I have found at least three existing discussions on this topic, for reference: - -* [How to access temporary BP in player's hand?](https://test.forums.factorio.com/viewtopic.php?t=93956) -* [Updated blueprint has no entities during on_player_setup_blueprint](https://forums.factorio.com/viewtopic.php?f=48&t=88100) -* [get blueprint-book from library link](https://test.forums.factorio.com/viewtopic.php?t=95272) - -## Credits -* undermark5: Factorissimo Performance Improvements diff --git a/blueprint-sandboxes_1.16.4/changelog.txt b/blueprint-sandboxes_1.16.4/changelog.txt deleted file mode 100644 index 428097d4..00000000 --- a/blueprint-sandboxes_1.16.4/changelog.txt +++ /dev/null @@ -1,276 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.16.4 -Date: 2023-07-30 - Changes: - - Necessary updates for 1.16.0 and Factorio 1.1.87: large refactor of Equipment Blueprint placement ---------------------------------------------------------------------------------------------------- -Version: 1.16.3 -Date: 2023-07-08 - Bugfixes: - - Regression fix when leaving a Lab into a non-Character controller ---------------------------------------------------------------------------------------------------- -Version: 1.16.2 -Date: 2023-07-02 - Bugfixes: - - Crash when deleting Labs ---------------------------------------------------------------------------------------------------- -Version: 1.16.1 -Date: 2023-06-15 - Bugfixes: - - Potential crashes and incorrect Sandbox surface generation when paired with mods such as RSO caused by 1.15 ---------------------------------------------------------------------------------------------------- -Version: 1.16.0 -Date: 2023-06-10 - Changes: - - Illusion replacements of Container-based Entities are now Infinity Containers - Bugfixes: - - Some much older versions of this mod would crash in a rare scenario when loading a recent version ---------------------------------------------------------------------------------------------------- -Version: 1.15.0 -Date: 2023-06-02 - Changes: - - Blueprints can be provided as the default Equipment to be used when Resetting each Sandbox - Bugfixes: - - script_raised_built is now handled like on_built_entity ---------------------------------------------------------------------------------------------------- -Version: 1.14.0 -Date: 2023-05-30 - Changes: - - Blueprints can be brought into and out of the Sandbox via the Cursor (in most cases) ---------------------------------------------------------------------------------------------------- -Version: 1.13.0 -Date: 2023-05-28 - Changes: - - Lab speed within Sandboxes is now a setting ---------------------------------------------------------------------------------------------------- -Version: 1.12.2 -Date: 2023-04-30 - Changes: - - Large performance improvements when paired with Factorissimo2, courtesy of undermark5 ---------------------------------------------------------------------------------------------------- -Version: 1.12.1 -Date: 2023-01-07 - Changes: - - Adding a warning for selecting new contents for a Blueprint in your Blueprint Library, since Factorio does not allow mods to handle this situation - Bugfixes: - - Selecting new contents for a Blueprint in your Inventory was not always replacing Illusions with Real Entities ---------------------------------------------------------------------------------------------------- -Version: 1.12.0 -Date: 2023-01-04 - Changes: - - The "Extra Mining Speed" applied in Sandboxes is now a Runtime Setting ---------------------------------------------------------------------------------------------------- -Version: 1.11.5 -Date: 2023-01-03 - Bugfixes: - - Tapelines were sometimes auto-built which prevents the intended use ---------------------------------------------------------------------------------------------------- -Version: 1.11.4 -Date: 2023-01-02 - Bugfixes: - - Logistic Train Stop Inputs/Outputs were sometimes auto-built resulting in circuit network issues ---------------------------------------------------------------------------------------------------- -Version: 1.11.3 -Date: 2022-12-30 - Bugfixes: - - Crash after Space Exploration deletes a Surface that was used by this mod - - Crash after a Space Exploration update from 0.5 to 0.6 and certain Entities were used inside a Sandbox ---------------------------------------------------------------------------------------------------- -Version: 1.11.2 -Date: 2022-11-22 - Changes: - - Illusions no longer appear in the "Made in" tooltips - Bugfixes: - - Crash when Ghost-building an Illusion over an Illusion ---------------------------------------------------------------------------------------------------- -Version: 1.11.1 -Date: 2022-11-09 - Changes: - - dangOreus will ignore any created Sandbox Surfaces ---------------------------------------------------------------------------------------------------- -Version: 1.11.0 -Date: 2022-10-31 - Changes: - - New Illusions framework: Entities that are swapped to cardboard-cutouts inside of Sandboxes to avoid issues or cheating - - Nearly all script-driven Space Exploration Entities are now Illusions in the Sandboxes ---------------------------------------------------------------------------------------------------- -Version: 1.10.1 -Date: 2022-09-04 - Changes: - - Moons within the Calidus system and Moons with Threats are no longer chosen for Planetary Sandboxes. Existing Planetary Sandboxes fitting this criteria will be destroyed - - Performance improvements related to some cases of creating Entities with the Factorissimo integration - Bugfixes: - - Crash when something other than this mod lets the Planer enter then leave a Sandbox ---------------------------------------------------------------------------------------------------- -Version: 1.10.0 -Date: 2022-08-23 - Changes: - - Asynchronous Sandbox Operations are now maintained in an internal Queue - - Factorissimo Factories within Sandboxes are treated similarly to Sandboxes - Bugfixes: - - Crash with a combination of entering/existing Factorissimo Factories within Sandboxes - - Crash after renaming or deleting certain Surfaces in the middle of asynchronous operations ---------------------------------------------------------------------------------------------------- -Version: 1.9.3 -Date: 2022-08-08 - Bugfixes: - - Adding Mods that alter Research would not be accounted for in the Sandbox ---------------------------------------------------------------------------------------------------- -Version: 1.9.2 -Date: 2022-07-29 - Bugfixes: - - Non-Admins could not set Filters on Infinity Chests/Pipes ---------------------------------------------------------------------------------------------------- -Version: 1.9.0 -Date: 2022-07-23 - Changes: - - Proxy chats between Players inside Sandboxes and those outside of Sandboxes - Bugfixes: - - Space Exploration Core Seams are not exposed as Resource Planners in <= 0.5 ---------------------------------------------------------------------------------------------------- -Version: 1.8.3 -Date: 2022-07-23 - Changes: - - Space Exploration Core Seams are now exposed as Resource Planners - - Creations in Sandboxes are no longer async by default, since Factorio 1.1.61 - Bugfixes: - - Crash with 1.6.x versions of Space Exploration ---------------------------------------------------------------------------------------------------- -Version: 1.8.2 -Date: 2022-06-24 - Bugfixes: - - Crash when combined with other mods that remove some Autoplace Controls from Nauvis ---------------------------------------------------------------------------------------------------- -Version: 1.8.1 -Date: 2022-06-16 - Bugfixes: - - Crash when starting a new game ---------------------------------------------------------------------------------------------------- -Version: 1.8.0 -Date: 2022-06-15 - Changes: - - New Setting to prevent non-Admins from Resetting Force-wide Sandboxes in Multiplayer games ---------------------------------------------------------------------------------------------------- -Version: 1.7.4 -Date: 2022-06-13 - Bugfixes: - - The migration for 1.7.3 wasn't always applied - - The Unlock-all-Technology setting was sometimes reverting gained bonuses ---------------------------------------------------------------------------------------------------- -Version: 1.7.3 -Date: 2022-05-30 - Bugfixes: - - The Daylight Slider icon was mistakenly sending a Click Event ---------------------------------------------------------------------------------------------------- -Version: 1.7.2 -Date: 2022-05-29 - Bugfixes: - - Crash when adding this mod back to a save after having removed it ---------------------------------------------------------------------------------------------------- -Version: 1.7.1 -Date: 2022-05-19 - Bugfixes: - - The default Resource Planner density is much larger ---------------------------------------------------------------------------------------------------- -Version: 1.7.0 -Date: 2022-05-17 - Changes: - - New Tile Planners for creating Tiles that might not otherwise be possible, only within Sandboxes - - New daylight slider within Sandboxes to alter the daytime on the Sandbox Surface - - Performance improvements related to any built Entities - Bugfixes: - - When paired with Editor Extensions, if Cheat Mode was already enabled outside of the Sandboxes, it would not be "re-enabled" within the Sandboxes, preventing the use of the additional Recipes within Sandboxes ---------------------------------------------------------------------------------------------------- -Version: 1.6.1 -Date: 2022-04-25 - Changes: - - Resource Planners consider the Map Generator's Richness and Resource-specific values when determining how much to place - - Resource Planners consider the Bounding Box of the Resource when determining how often to place ---------------------------------------------------------------------------------------------------- -Version: 1.6.0 -Date: 2022-05-03 - Changes: - - Last-known-Positions within Sandboxes are persisted so that they can be returned to when swapping between Sandboxes and other Surfaces - - Cheat-mode is toggled between the previous state and true, instead of reverting back to false - - Players that are toggled into the Map Editor can no longer enter a Sandbox (otherwise their original Character would be lost) - - Non-Character Inventories are persisted so that they can be restored when exiting a Sandbox - Bugfixes: - - Removed Players wouldn't clean up their Persistent Inventories ---------------------------------------------------------------------------------------------------- -Version: 1.5.1 -Date: 2022-04-25 - Changes: - - Craft-to-Cursor is smarter about exactly which Item ends up in the Cursor for Recipes with multiple Products - Bugfixes: - - Crafting a Recipe in a Sandbox that produces a Liquid would crash ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 -Date: 2022-04-21 - Changes: - - Bonus Inventory Slots for Sandboxes Setting - - Prevent Sandbox Inventories from becoming full by spilling their last slot - - Provide a "Trash can" in new Sandboxes ---------------------------------------------------------------------------------------------------- -Version: 1.4.2 -Date: 2022-04-18 - Bugfixes: - - Ghosting certain Entities with Modules into a Space-based Sandbox could crash ---------------------------------------------------------------------------------------------------- -Version: 1.4.1 -Date: 2022-04-17 - Bugfixes: - - Level-based Research wasn't correctly synchronized ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 2022-04-16 - Changes: - - Loaders will only be "owned" by this Mod if no other Mod has already activated them in the data stage - - More Item Requests can be automatically handled within Sandboxes - Bugfixes: - - Entering a Sandbox with the Editor Extensions Mod loaded would give the Player too many capabilities outside of the Sandbox (but not within) ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2022-04-15 - Changes: - - Craft-to-Cursor is now a Player Mod Setting ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2022-04-12 - Changes: - - The Research Queue for Sandboxes mimics the real Research Queue ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2022-04-10 - Bugfixes: - - New games beginning with a Cutscene would crash ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2022-04-08 - Changes: - - The Inventory within Sandboxes is now persisted ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2022-04-05 - Changes: - - The Space Exploration Planetary Lab now uses a Moon instead of a Star - - Existing Space Exploration Planetary Labs will be deleted - Bugfixes: - - Passengers in Rockets that are launched while the Player is inside a Sandbox would crash - - Various fixes related to the Space Exploration Planetary Lab ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2022-04-03 - Bugfixes: - - The Sandbox Force could have become out-of-sync with its original Force ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2022-04-02 - Bugfixes: - - Placing Blueprints with Tiles in a Planetary Lab would revert the Tiles to Empty Space ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2022-03-29 - Changes: - - Initial Release - Bugfixes: - - None diff --git a/blueprint-sandboxes_1.16.4/control.lua b/blueprint-sandboxes_1.16.4/control.lua deleted file mode 100644 index dca97588..00000000 --- a/blueprint-sandboxes_1.16.4/control.lua +++ /dev/null @@ -1,236 +0,0 @@ --- Required by basically everything immediately -BPSB = require("scripts.bpsb") -Events = require("scripts.events") -Settings = require("scripts.settings") -Debug = require("scripts.debug") -Queue = require("scripts.queue") - --- Required by some -Illusion = require("scripts.illusion") - --- Required, but not ordered importantly -Init = require("scripts.init") -Chat = require("scripts.chat") -Equipment = require("scripts.equipment") -Factorissimo = require("scripts.factorissimo") -Force = require("scripts.force") -God = require("scripts.god") -Inventory = require("scripts.inventory") -Lab = require("scripts.lab") -Migrate = require("scripts.migrate") -Research = require("scripts.research") -Resources = require("scripts.resources") -Tiles = require("scripts.tiles") -ToggleGUI = require("scripts.toggle-gui") - --- Required by Sandbox -SpaceExploration = require("scripts.space-exploration") - --- Requires SpaceExploration method immediately -Sandbox = require("scripts.sandbox") - -require('scripts.remote-interface') - --- Initializations - -script.on_init(function() - Init.FirstTimeInit() - Settings.SetupConditionalHandlers() -end) - -script.on_event(defines.events.on_player_created, function(event) - local player = game.players[event.player_index] - log("on_player_created index: " .. event.player_index) - Force.Init(player.force) - Init.Player(player) -end) - -script.on_event(defines.events.on_player_removed, function(event) - local playerData = global.players[event.player_index] - log("on_player_removed index: " .. event.player_index) - Lab.DeleteLab(playerData.labName) - if playerData.sandboxInventory then - playerData.sandboxInventory.destroy() - end - if playerData.preSandboxInventory then - playerData.preSandboxInventory.destroy() - end - global.players[event.player_index] = nil -end) - -script.on_event(defines.events.on_force_created, function(event) - log("on_force_created name: " .. event.force.name) - Force.Init(event.force) -end) - --- Conditional Event Listeners - -script.on_load(Settings.SetupConditionalHandlers) - -script.on_event(defines.events.on_runtime_mod_setting_changed, Settings.OnRuntimeSettingChanged) - --- Important Game Events - -script.on_configuration_changed(function(event) - for _, sandboxForceData in pairs(global.sandboxForces) do - -- Ensure that new automatic recipes aren't hidden - sandboxForceData.hiddenItemsUnlocked = false - end - --[[ TODO: - There's a bug related to this section if a Player is currently - inside of a Sandbox while loading a Save where the Configuration - Changed. The above hiddenItemsUnlocked flag is reset, since for - some reason the Recipes will have disappeared again, but of - course there's nothing here to enable them again! - That's because the enabling code doesn't seem to work anywhere - outside of right-after the Player has been swapped to their - Sandbox Force (see the to-do over there). - Currently, if that same code is used here, the flag will be true, - but the Recipes are still hidden, so they'll be stuck hidden! - ]] - - Migrate.Run() - Research.SyncAllForces() -end) - -script.on_event(defines.events.on_player_changed_force, function(event) - local player = game.players[event.player_index] - Force.Init(player.force) - Sandbox.OnPlayerForceChanged(player) -end) - -script.on_event(defines.events.on_forces_merged, function(event) - Force.Init(event.destination) - Force.Merge(event.source_name, event.destination) -end) - -script.on_event(defines.events.on_player_promoted, function(event) - local player = game.players[event.player_index] - ToggleGUI.Update(player) -end) - -script.on_event(defines.events.on_player_demoted, function(event) - local player = game.players[event.player_index] - ToggleGUI.Update(player) -end) - -script.on_event(defines.events.on_console_chat, Chat.OnChat) - -script.on_event(defines.events.on_research_finished, Research.OnResearched) -script.on_event(defines.events.on_research_reversed, Research.OnResearched) -script.on_event(defines.events.on_research_started, Research.OnResearchStarted) - -script.on_event(defines.events.on_player_changed_surface, function(event) - local player = game.players[event.player_index] - Sandbox.OnPlayerSurfaceChanged(player) - ToggleGUI.Update(player) -end) - -script.on_event(defines.events.on_surface_created, function(event) - local surface = game.surfaces[event.surface_index] - local _ = Lab.AfterCreate(surface) or SpaceExploration.AfterCreate(surface) - local _ = Lab.Equip(surface) or SpaceExploration.Equip(surface) -end) - -script.on_event(defines.events.on_surface_cleared, function(event) - return Lab.Equip(game.surfaces[event.surface_index]) - or SpaceExploration.Equip(game.surfaces[event.surface_index]) -end) - -script.on_event(defines.events.on_chunk_generated, function(event) - local equipmentData = global.equipmentInProgress[event.surface.name] - if equipmentData then - Equipment.BuildBlueprint( - equipmentData.stack, - equipmentData.surface, - equipmentData.forceName - ) - end -end) - -script.on_event(defines.events.on_pre_surface_deleted, function(event) - local surface = game.surfaces[event.surface_index] - if global.labSurfaces[surface.name] then - global.labSurfaces[surface.name] = nil - end - local surfaceData = global.seSurfaces[surface.name] - if surfaceData then - local sandboxForceData = global.sandboxForces[surfaceData.sandboxForceName] - SpaceExploration.PreDeleteSandbox(sandboxForceData, surface.name) - end -end) - -script.on_event(defines.events.on_surface_renamed, function(event) - -- TODO: Renaming surfaces likely doesn't really work - if global.labSurfaces[event.old_name] then - global.labSurfaces[event.new_name] = global.labSurfaces[event.old_name] - global.labSurfaces[event.old_name] = nil - end - local surfaceData = global.seSurfaces[event.old_name] - if surfaceData then - local sandboxForceData = global.sandboxForces[surfaceData.sandboxForceName] - if sandboxForceData.sePlanetaryLabZoneName == event.old_name then - sandboxForceData.sePlanetaryLabZoneName = event.new_name - end - if sandboxForceData.seOrbitalSandboxZoneName == event.old_name then - sandboxForceData.seOrbitalSandboxZoneName = event.new_name - end - global.seSurfaces[event.new_name] = global.seSurfaces[event.old_name] - global.seSurfaces[event.old_name] = nil - end -end) - -script.on_event(defines.events.on_marked_for_deconstruction, God.OnMarkedForDeconstruct) -script.on_event(defines.events.on_marked_for_upgrade, God.OnMarkedForUpgrade) -script.on_event(defines.events.on_built_entity, function(event) - God.OnBuiltEntity(event.created_entity) -end, God.onBuiltEntityFilters) -script.on_event(defines.events.script_raised_built, function(event) - God.OnBuiltEntity(event.entity) -end, God.onBuiltEntityFilters) -script.on_event(defines.events.on_player_crafted_item, God.OnPlayerCraftedItem) -script.on_event(defines.events.on_player_main_inventory_changed, God.OnInventoryChanged) - -script.on_event(defines.events.on_player_setup_blueprint, Illusion.OnBlueprintSetup) - --- TODO: on_entity_settings_pasted - -script.on_event(defines.events.on_player_selected_area, function(event) - Resources.OnAreaSelected(event, true) -end) -script.on_event(defines.events.on_player_alt_selected_area, function(event) - Resources.OnAreaSelected(event, false) -end) - --- Internal - -script.on_event(Events.on_daylight_changed_event, function(event) - log("on_daylight_changed_event from player: " .. event.player_index) - for _, player in pairs(game.players) do - if player.index ~= event.player_index - and player.surface.name == event.surface_name - then - ToggleGUI.Update(player) - end - end -end) - --- Shortcuts - -script.on_event(ToggleGUI.toggleShortcut, ToggleGUI.OnToggleShortcut) -script.on_event(defines.events.on_lua_shortcut, ToggleGUI.OnToggleShortcut) - --- GUI - -script.on_event(defines.events.on_gui_click, ToggleGUI.OnGuiClick) -script.on_event(defines.events.on_gui_value_changed, ToggleGUI.OnGuiValueChanged) -script.on_event(defines.events.on_gui_selection_state_changed, ToggleGUI.OnGuiDropdown) - -script.on_event(defines.events.on_gui_closed, function(event) - if (event.gui_type == defines.gui_type.blueprint_library) then - -- We know this won't work, but we'll do it to print a message anyway - Illusion.OnBlueprintGUIClosed(event) - elseif (event.gui_type == defines.gui_type.item) then - Illusion.OnBlueprintGUIClosed(event) - end -end) diff --git a/blueprint-sandboxes_1.16.4/data-final-fixes.lua b/blueprint-sandboxes_1.16.4/data-final-fixes.lua deleted file mode 100644 index a7a72d77..00000000 --- a/blueprint-sandboxes_1.16.4/data-final-fixes.lua +++ /dev/null @@ -1,6 +0,0 @@ -BPSB = require("scripts.bpsb") - -require("prototypes.recipes.hidden-vanilla-final-fixes") -require("prototypes.recipes.resources-final-fixes") -require("prototypes.recipes.tiles-final-fixes") -require("prototypes.illusions-final-fixes") diff --git a/blueprint-sandboxes_1.16.4/data-updates.lua b/blueprint-sandboxes_1.16.4/data-updates.lua deleted file mode 100644 index 7b8bbc87..00000000 --- a/blueprint-sandboxes_1.16.4/data-updates.lua +++ /dev/null @@ -1,3 +0,0 @@ -BPSB = require("scripts.bpsb") - -require("prototypes.recipes.hidden-vanilla-updates") diff --git a/blueprint-sandboxes_1.16.4/data.lua b/blueprint-sandboxes_1.16.4/data.lua deleted file mode 100644 index 45e2056e..00000000 --- a/blueprint-sandboxes_1.16.4/data.lua +++ /dev/null @@ -1,7 +0,0 @@ -BPSB = require("scripts.bpsb") -ToggleGUI = require("scripts.toggle-gui") - -require("prototypes.item-groups") -require("prototypes.shortcuts") -require("prototypes.styles") -require("prototypes.tips-and-tricks") diff --git a/blueprint-sandboxes_1.16.4/graphics/choose-sandbox.png b/blueprint-sandboxes_1.16.4/graphics/choose-sandbox.png deleted file mode 100644 index 6e15f142..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/choose-sandbox.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/graphics/daylight-slider.png b/blueprint-sandboxes_1.16.4/graphics/daylight-slider.png deleted file mode 100644 index 9aeecf1d..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/daylight-slider.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/graphics/icon-x64.png b/blueprint-sandboxes_1.16.4/graphics/icon-x64.png deleted file mode 100644 index 5f817748..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/icon-x64.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/graphics/recipes.png b/blueprint-sandboxes_1.16.4/graphics/recipes.png deleted file mode 100644 index 0bd9dbd2..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/recipes.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/graphics/reset-sandbox.png b/blueprint-sandboxes_1.16.4/graphics/reset-sandbox.png deleted file mode 100644 index cec66c99..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/reset-sandbox.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/graphics/toggle-gui.png b/blueprint-sandboxes_1.16.4/graphics/toggle-gui.png deleted file mode 100644 index f770bb03..00000000 Binary files a/blueprint-sandboxes_1.16.4/graphics/toggle-gui.png and /dev/null differ diff --git a/blueprint-sandboxes_1.16.4/info.json b/blueprint-sandboxes_1.16.4/info.json deleted file mode 100644 index 18abbdeb..00000000 --- a/blueprint-sandboxes_1.16.4/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "blueprint-sandboxes", - "version": "1.16.4", - "factorio_version": "1.1", - "title": "Blueprint Sandboxes", - "author": "somethingtohide", - "description": "Temporary Editor-lite permissions in Lab-like environments for designing and experimenting.", - "homepage": "https://github.com/cameronleger/blueprint-sandboxes", - "dependencies": [ - "base >= 1.1.87", - "? space-exploration >= 0.5.18", - "? Cursed-FMD", - "? factorissimo-2-notnotmelon" - ] -} diff --git a/blueprint-sandboxes_1.16.4/license.txt b/blueprint-sandboxes_1.16.4/license.txt deleted file mode 100644 index 25511cc6..00000000 --- a/blueprint-sandboxes_1.16.4/license.txt +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 Cameron Leger - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/blueprint-sandboxes_1.16.4/locale/en/blueprint-sandboxes.cfg b/blueprint-sandboxes_1.16.4/locale/en/blueprint-sandboxes.cfg deleted file mode 100644 index 02aaebef..00000000 --- a/blueprint-sandboxes_1.16.4/locale/en/blueprint-sandboxes.cfg +++ /dev/null @@ -1,105 +0,0 @@ -[mod-name] -blueprint-sandboxes=Blueprint Sandboxes - -[mod-description] -blueprint-sandboxes=Temporary Editor-lite permissions in Lab-like environments for designing and experimenting. - -[controls] -bpsb-toggle-gui-sb-toggle-shortcut=Toggle Sandbox - -[controls-description] -bpsb-toggle-gui-sb-toggle-shortcut=Enter or exit the Selected Sandbox - -[shortcut-name] -bpsb-toggle-gui-sb-toggle-shortcut=Toggle Sandbox - -[shortcut-description] -bpsb-toggle-gui-sb-toggle-shortcut=Enter or exit the Selected Sandbox - -[mod-setting-name] -bpsb-allow-all-technology=Unlock all Technology inside Sandboxes -bpsb-only-admins-force-reset=Restrict Reset to Admins -bpsb-scan-all-chunks=Continuously scan Sandbox Chunks -bpsb-craft-to-cursor=Craft to Cursor -bpsb-bonus-inventory-slots=Bonus Inventory Slots -bpsb-extra-mining-speed=Extra Mining Speed -bpsb-extra-lab-speed=Extra Lab Speed -bpsb-god-async-tick=Async Tick Interval -bpsb-god-async-create-per-tick=Async-per-tick Creations -bpsb-god-async-upgrade-per-tick=Async-per-tick Upgrades -bpsb-god-async-delete-per-tick=Async-per-tick Deletions - -[mod-setting-description] -bpsb-only-admins-force-reset=In multiplayer, prevent non-Admins from Resetting any Force-wide Sandboxes -bpsb-scan-all-chunks=Acts like a Radar to reveal all Chunks within Sandboxes. This will eventually slow down your game and increase the file-size, but is reversible by Resetting the Sandbox. -bpsb-craft-to-cursor=When "Crafting" in Sandboxes, place the result directly into the Cursor. -bpsb-extra-mining-speed=Additional multiplier on the Mining Speed within Sandboxes. An extremely large value is required if using Space Exploration. -bpsb-extra-lab-speed=Additional multiplier on the Laboratory Speed within Sandboxes. A negative value is applied to discourage researching in the Sandbox, since it would be overwritten by your outside progress anyway, but it would allow testing lab builds. -bpsb-god-async-tick=How often to handle the Async entities. -bpsb-god-async-create-per-tick=If 0, handle immediately; if >0, schedule handling on a future tick for at-most this amount of entities. See Tips-and-Tricks for more info. -bpsb-god-async-upgrade-per-tick=If 0, handle immediately; if >0, schedule handling on a future tick for at-most this amount of entities. See Tips-and-Tricks for more info. -bpsb-god-async-delete-per-tick=If 0, handle immediately; if >0, schedule handling on a future tick for at-most this amount of entities. See Tips-and-Tricks for more info. - -[item-group-name] -blueprint-sandboxes=Blueprint Sandboxes - -[gui] -bpsb-toggle-gui=Blueprint Sandboxes __CONTROL__bpsb-toggle-gui-sb-toggle-shortcut__ -bpsb-toggle-gui-selected-sandbox-dropdown=Sandbox -bpsb-toggle-gui-reset-button=Reset -bpsb-toggle-gui-daytime-slider=Daytime - -[gui-description] -bpsb-toggle-gui-selected-sandbox-dropdown=Choose which Sandbox to play in -bpsb-toggle-gui-reset-button=Reset this Sandbox.\nClick with a Blueprint to set the default equipment; shift + click to reset the default equipment. -bpsb-toggle-gui-reset-button-only-admins=Reset is Limited to Admins by a Setting -bpsb-toggle-gui-daytime-slider=Controls the amount of daylight - -[ils] -bpsb-ils-prefix=Fake __1__ - -[sandbox] -bpsb-sb-player-lab=My own Lab -bpsb-sb-force-lab=My Force's Lab -bpsb-sb-space-exploration-disabled=(Requires SE) -bpsb-sb-force-lab-space-exploration=My Force's Planetary Lab -bpsb-sb-force-orbit-space-exploration=My Force's Orbital Sandbox - -[tips-and-tricks-item-name] -bpsb-intro-introduction=Blueprint Sandboxes -bpsb-intro-multiple-sandboxes=Sandbox choices -bpsb-intro-reset-v2=Cleanup -bpsb-intro-daylight=Daylight -bpsb-intro-sandbox-force=Linked Force -bpsb-intro-new-recipes=Sandbox Recipes -bpsb-intro-god-mode=God-mode -bpsb-intro-auto-building=Automated building -bpsb-intro-illusions=Illusions -bpsb-space-exploration-introduction=Space Exploration Sandboxes -bpsb-space-exploration-inner-star-tech=How it works -bpsb-space-exploration-planetary-lab=Planetary Lab -bpsb-space-exploration-orbital-sandbox=Orbital Sandbox -bpsb-space-exploration-remote-view=Navigation Satellite -bpsb-space-exploration-mining=Mining -bpsb-factorissimo-introduction=Factories in Sandboxes - -[tips-and-tricks-item-description] -bpsb-intro-introduction=Welcome to the Blueprint Sandboxes mod!\nThis allows you to use some Editor-mode and God-mode functionality, without leaving your current game, within lab-like environments.\n\nThe best ways to get Blueprints in and out of your Sandboxes are to Copy-and-Paste and utilize your Blueprint Library. Sometimes, you can also "bring" a Blueprint in and out by having it in your cursor.\n\nTo jump into your first Sandbox, use the shortcut __CONTROL__bpsb-toggle-gui-sb-toggle-shortcut__ or click the Toggle Button in your Shortcut Bar. Use the same method again to exit Sandboxes. -bpsb-intro-multiple-sandboxes=A Sandbox GUI appears while you are inside a Sandbox, and the first thing you'll notice is that you can change which Sandbox you are in:\n\nMy own Lab: this is a Lab-like Sandbox that is unique to you.\nMy Force's Lab: this is another Lab-like Sandbox that is shared between your entire Force.\nMy Force's Planetary Lab: yet another Lab-like Sandbox, but it is known by Space Exploration.\nMy Force's Orbital Sandbox: a Sandbox that exists somewhere in Space. -bpsb-intro-reset-v2=The next thing you might notice in the Sandbox GUI is a Reset Button. The Reset Button will completely reset the current Sandbox that you are in, in case you want to start-over.\n\nThe default equipment that is provided in the reset Sandbox can be changed with a Blueprint, if you click this button while holding the Blueprint. You can also reset this Blueprint back to the default by Shift+clicking the button without a Blueprint.\n\nBe mindful of others when you use this inside of a Force-wide Sandbox! -bpsb-intro-daylight=Another thing you will notice in the Sandbox GUI Daylight slider. This indirectly controls the Sandbox's Time of Day to give you different levels of Daylight, helpful for placing lights in your Blueprints. -bpsb-intro-sandbox-force=While you are in a Sandbox environment, you are actually transferred to another Force which strongly resembles your original Force. Since you have more-powerful permissions inside Sandboxes, this allows those to be cleanly separated from your normal activities.\n\nDepending on your Mod Settings, this Force will either synchronize the Research that you've unlocked, or have all Research unlocked already. For the former, the "progress" of an individual Technology cannot be real-time, but the Research Queue is kept in-sync.\n\nSince this Force is based off of your own Force, if you change Forces then you will have different Force-related Sandboxes, and your Personal Sandbox might require a Reset (since you no longer own anything inside of it). -bpsb-intro-new-recipes=While you are in a Sandbox environment, you also have access to some new Recipes for easier experimenting.\n\nFirst, Factorio's own hidden Loaders are enabled, if they weren't already enabled by another mod. For the same load-testing purposes, the Infinity Accumulator, Chest, and Pipe are also enabled. You can use these as abstract inputs and outputs to test your designs.\n\nThen, every Resource will have a corresponding "Resource Planner." Using the default selection method (__CONTROL__select-for-blueprint__), you can draw that Resource into the Sandbox; using the alternative selection method (__CONTROL__select-for-cancel-deconstruct__), you can remove it!\n\nSome special Tiles (like Water) will have a "Tile Planner." These give you Items that you can place as Tiles.\n\nFinally, inside Sandboxes you can craft items immediately and directly to your cursor; instead of crafting to your inventory and then selecting that result, anything you click-to-craft is ready for use! This also replaces what was in your cursor before, so you can simply __CONTROL__open-character-gui__, click a recipe, __CONTROL__confirm-gui__, keep designing, rinse, and repeat. This is also configurable per-user. -bpsb-intro-god-mode=You are treated like a God within Sandboxes. Your body stays where you left it (be careful with that!) and you can float freely in here. Your inventory here is persistent and separate from your normal player's inventory.\n\nIn Mod Settings, you can opt-in to having all Technology already Researched (as opposed to being linked to what you know outside of here), and having each Sandbox fully-visible in Map-view. Continuously-scanning the Sandboxes will potentially increase the size of your save files, but that can be reversed by Resetting the large Sandboxes; it can also potentially slow down your game, but only while inside very large Sandboxes. -bpsb-intro-auto-building=In addition to God-mode, you have some Editor-mode capabilities as well! Normally, God-mode would place ghost-entities without the items in your inventory, but here, ghosts are automatically filled-in for you. Upgrade and Deconstruction Planners also take effect immediately.\n\nSince this cannot use the Editor-mode - thus must occur in Lua - this is unfortunately slower than Editor-mode's "immediately construct" settings. Also, to workaround some potential bugs concerning orders-of-operations, there are a few settings relating to these behaviors.\n\nCreating, Destroying, and Upgrading can each happen synchronously (on the same tick as the Event) or asynchronously (on a periodic tick scheduled after the Event). By default in Factorio < 1.1.61, to handle a bug concerning the Smart-Belts setting, only Creation is set to asynchronous.\n\nIn the Mod Settings, setting the Async-per-tick value to anything above zero will enable this behavior, controlling the amount handled for each Sandbox individually. When disabled, exactly when the Event is fired is also when that Request is handled. When enabled, the Requests are left-alone, instead scheduled to be handled on a future tick. The setting then controls how many of those Requests are handled each iteration; naturally, this is a performance setting - do you care for throughput or latency?\n\nLastly, manual deconstruction is also handled immediately by default. This is handled by an insanely large increase to the Sandbox's Mining Speed. This increase is adjustable in Mod Settings. -bpsb-intro-illusions=Complex Entities have the potential to cause many sorts of issues when used within Sandboxes; sometimes this or another mod would crash, an odd or irreversible gameplay issue would occur, or it simply would not be desired to have that Entity in the Sandbox.\n\nIllusions are the solution to this problem. When certain problematic Entities are placed in a Sandbox, they are replaced with an Illusion of that Entity. This "fake" Entity has the same size, graphics, and base functionality as the original, but it will not have any script-driven functionality. It's slightly more advanced than a cardboard cutout.\n\nIllusions are automatically translated for you. When you place the Entity in a Sandbox it's automatically converted to the Illusion; and when you create a blueprint the Illusions are automatically converted to their real counterparts. However, sometimes another mod might have already attempted to prevent you from placing the real Entity in the Sandbox; for this situation, you can try building a ghost instead with __ALT_CONTROL__1__build-ghost__, since that might not have been blocked. -bpsb-space-exploration-introduction=Space Exploration compatibility is a goal of this Mod, however a few limitations exist that complicate the relationship. -bpsb-space-exploration-inner-star-tech=The reason why Space Exploration won't let you build in the default Lab Sandboxes is that it must "own" all Surfaces that it knows about, and it does this by generating a plan for the entire Universe and not considering anything that falls outside of that plan. In order to work with Space Exploration, the Surfaces must have "come from" Space Exploration. Naturally, this poses problems for us trying to generate completely new Surfaces!\n\nA fine middle-ground seems to be asking Space Exploration for that Universe, and then dedicating some Stars to Forces for use as Sandboxes. Note that a Star is not the same as a Star's Orbit; the Orbit is what you see everywhere in Space Exploration, but the Star itself seems unusable. This means we can get a Surface that Space Exploration owns, but doesn't use, so we remain out of the way!\n\nHowever, Stars are of limited quantity, which is why there aren't any Personal Space Sandboxes, only Force-wide Space Sandboxes. -bpsb-space-exploration-planetary-lab=The first Space Exploration Sandbox is the Planetary Lab. If you notice that you cannot place certain Space Exploration entities in your other Labs, then you probably want to build here instead. Technically, this is a somewhat-randomly-chosen Moon with Lab-Tile overrides so that you can place ground-based Entities. Unfortunately, that means you probably can't use this Moon for your own purposes! -bpsb-space-exploration-orbital-sandbox=The second Space Exploration Sandbox is the Orbital Sandbox. Similar to the Planetary Lab, this allows you to place Space-related entities, and is what you want if you're designing for Space Stations. Unlike most other Sandboxes, this is not a Lab-like environment. It's technically inside of a Star, so it won't affect your normal play-through. -bpsb-space-exploration-remote-view=Because of the extremely-similar implementations, the Navigation Satellite has a few interesting interactions with Blueprint Sandboxes.\n\nEntering a Sandbox from the Satellite works well, since we'll exit that mode before entering the Sandbox mode.\n\nEntering the Satellite from the Sandbox is a little different, because you aren't from the same Force anymore! You cannot interact with anything you owned before, but you also probably cannot even see those Planets (etc.) anyway. For this reason, it's not encouraged to actually build and launch Satellites from Sandboxes, which enables this functionality for your Sandbox's Force. -bpsb-space-exploration-mining=There can only be one God-mode in Factorio, and both Space Exploration and Blueprint Sandboxes want to use it.\n\nSpace Exploration uses it for the Navigation Satellite. This allows you to affect the locations you are remotely viewing. However, it sets the Mining Speed to near-zero so that you can remove ghosts, but not actual entities.\n\nThis is problematic for Blueprint Sandboxes because it means you can't mine entities to remove them! There is a small workaround here but it does not play nicely with the Navigation Satellite for the Sandbox's Force: the Sandbox Force has an extremely fast Mining Speed boost. This boost is configurable via Mod Settings, but when using Space Exploration the value must be insanely large. -bpsb-factorissimo-introduction=Compatibility with Factorissimo is possible as long as you are using notnotmelon's fork, since it introduces some APIs that make the integration possible.\n\nFor the most part, Factories placed inside of Sandboxes will gain the extra functionality provided by that Sandbox. For example, automated ghost-filling and quick-crafting both work inside of Factorissimo Factories. However, there are a few limitations that are unavoidable.\n\nSince Factories are stored in a shared-surface, some surface-wide functionality has been disabled inside of them. You cannot adjust the Brightness within Factories, and you cannot reset them either. Also, the "persistence" of your invisible-body would be overly complex to handle, so you cannot leave the Sandbox or transfer to another Sandbox if you are inside of a Factory within it - you must exit the Factory first. - -[bpsb-messages] -space-exploration-delete-sandbox=You cannot delete a Zone that's being used as a Blueprint Sandbox. diff --git a/blueprint-sandboxes_1.16.4/prototypes/illusions-final-fixes.lua b/blueprint-sandboxes_1.16.4/prototypes/illusions-final-fixes.lua deleted file mode 100644 index 7d227184..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/illusions-final-fixes.lua +++ /dev/null @@ -1,47 +0,0 @@ -Illusion = require("scripts.illusion") - -for _, mapping in pairs(Illusion.mappings) do - local type = mapping[1] - local name = mapping[2] - local item = mapping[3] - if data.raw[type] ~= nil and data.raw[type][name] ~= nil then - local entity = data.raw[type][name] - - local group = entity.name - if entity.fast_replaceable_group ~= nil then - group = entity.fast_replaceable_group - end - entity.fast_replaceable_group = group - - local illusion = table.deepcopy(entity) - illusion.name = Illusion.realToIllusionMap[name] - illusion.placeable_by = { item = item, count = 1 } - if illusion.flags ~= nil then - table.insert(illusion.flags, "not-in-made-in") - else - illusion.flags = { "not-in-made-in" } - end - - illusion.localised_description = { "entity-description." .. name } - if entity.localised_name ~= nil then - illusion.localised_name = { - 'ils.bpsb-ils-prefix', - { entity.localised_name }, - } - else - illusion.localised_name = { - 'ils.bpsb-ils-prefix', - { 'entity-name.' .. name }, - } - end - - if illusion.type == "container" then - illusion.type = "infinity-container" - illusion.erase_contents_when_mined = true - end - - data:extend({ illusion }) - else - log("data[" .. type .. "][" .. name .. "] not found; cannot create Illusion") - end -end diff --git a/blueprint-sandboxes_1.16.4/prototypes/item-groups.lua b/blueprint-sandboxes_1.16.4/prototypes/item-groups.lua deleted file mode 100644 index 15a324b4..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/item-groups.lua +++ /dev/null @@ -1,38 +0,0 @@ -Resources = require("scripts.resources") -Tiles = require("scripts.tiles") - --- New Group for New Recipes -data:extend({ - { - type = "item-group", - name = BPSB.name, - icon = BPSB.path .. "/graphics/icon-x64.png", - icon_size = 64, - inventory_order = "z", - order = "z", - }, - { - type = "item-subgroup", - name = BPSB.pfx .. "loaders", - group = BPSB.name, - order = "a[loaders]", - }, - { - type = "item-subgroup", - name = BPSB.pfx .. "infinity", - group = BPSB.name, - order = "b[infinity]", - }, - { - type = "item-subgroup", - name = Resources.name, - group = BPSB.name, - order = "c[resources]", - }, - { - type = "item-subgroup", - name = Tiles.name, - group = BPSB.name, - order = "d[tiles]", - }, -}) diff --git a/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-final-fixes.lua b/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-final-fixes.lua deleted file mode 100644 index 255e1e4f..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-final-fixes.lua +++ /dev/null @@ -1,26 +0,0 @@ --- Move Loaders to our Tab (only if they exist) -if data.raw.recipe[BPSB.pfx .. "loader"] then - data.raw.item["loader"].subgroup = BPSB.pfx .. "loaders" - data.raw.item["loader"].order = "a-a" - - data.raw.item["fast-loader"].subgroup = BPSB.pfx .. "loaders" - data.raw.item["fast-loader"].order = "a-b" - - data.raw.item["express-loader"].subgroup = BPSB.pfx .. "loaders" - data.raw.item["express-loader"].order = "a-c" -end - --- Move Infinity Entities to our Tab -data.raw.item["electric-energy-interface"].subgroup = BPSB.pfx .. "infinity" -data.raw.item["electric-energy-interface"].order = "a-a" - -data.raw.item["infinity-chest"].subgroup = BPSB.pfx .. "infinity" -data.raw.item["infinity-chest"].order = "a-b" - -data.raw.item["infinity-pipe"].subgroup = BPSB.pfx .. "infinity" -data.raw.item["infinity-pipe"].order = "a-c" - --- Allow anyone to use Infinity Filters -data.raw["electric-energy-interface"]["electric-energy-interface"].gui_mode = "all" -data.raw["infinity-container"]["infinity-chest"].gui_mode = "all" -data.raw["infinity-pipe"]["infinity-pipe"].gui_mode = "all" diff --git a/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-updates.lua b/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-updates.lua deleted file mode 100644 index 114b3dac..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/recipes/hidden-vanilla-updates.lua +++ /dev/null @@ -1,44 +0,0 @@ --- Recipes for hidden/infinity items, only unlocked in Lab -function createLockedRecipeForHiddenItem(name) - if data.raw.item[name] then - data:extend({ - { - type = "recipe", - name = BPSB.pfx .. name, - energy_required = 1, - enabled = false, - ingredients = {}, - result = name, - } - }) - end -end - --- Loaders will only be enabled if nothing else shows them -local shouldEnableLoaders = true -for _, recipe in pairs(data.raw.recipe) do - if not recipe.hidden then - if recipe.result == "loader" then - shouldEnableLoaders = false - break - end - if recipe.results then - for _, result in pairs(recipe.results) do - if result.name == "loader" then - shouldEnableLoaders = false - break - end - end - end - end -end -if shouldEnableLoaders then - createLockedRecipeForHiddenItem("loader") - createLockedRecipeForHiddenItem("fast-loader") - createLockedRecipeForHiddenItem("express-loader") -end - --- Infinity Entities will always be enabled -createLockedRecipeForHiddenItem("electric-energy-interface") -createLockedRecipeForHiddenItem("infinity-chest") -createLockedRecipeForHiddenItem("infinity-pipe") diff --git a/blueprint-sandboxes_1.16.4/prototypes/recipes/resources-final-fixes.lua b/blueprint-sandboxes_1.16.4/prototypes/recipes/resources-final-fixes.lua deleted file mode 100644 index 77d11808..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/recipes/resources-final-fixes.lua +++ /dev/null @@ -1,79 +0,0 @@ -PlannerIcons = require("scripts.planner-icons") -Resources = require("scripts.resources") - -local function startsWith(str, beginning) - return str:sub(1, #beginning) == beginning -end - -local function endsWith(str, ending) - return ending == "" or str:sub(-#ending) == ending -end - --- Helpers for Resource Planners -function shouldSkipResourcePlanner(resource) - local skipCoreMining = true - if mods["space-exploration"] - and startsWith(mods["space-exploration"], "0.6") - then - skipCoreMining = false - end - return (resource.category == "se-core-mining" and skipCoreMining) - or (resource.category == "se-core-mining" and endsWith(resource.name, "-sealed")) -end - -function createResourcePlannerPrototypes(resource) - -- First, find a way to name the Planner based on the mining result - local localisedName = resource.localised_name - if resource.minable.result then - localisedName = { "item-name." .. resource.minable.result } - elseif resource.minable.results then - local firstResult = resource.minable.results[1] - if firstResult then - if firstResult.type == "item" then - localisedName = { "item-name." .. firstResult.name } - elseif firstResult.type == "fluid" then - localisedName = { "fluid-name." .. firstResult.name } - end - end - end - - -- Finally, create the Selection Tool and its Recipe - return { - { - type = "selection-tool", - name = Resources.pfx .. resource.name, - localised_name = localisedName, - icons = PlannerIcons.CreateLayeredIcon(resource), - subgroup = Resources.name, - order = resource.order, - stack_size = 1, - stackable = false, - selection_color = { r = 0, g = 1, b = 0 }, - alt_selection_color = { r = 1, g = 0, b = 0 }, - selection_mode = { "any-tile" }, - alt_selection_mode = { "any-entity" }, - selection_cursor_box_type = "pair", - alt_selection_cursor_box_type = "pair", - alt_entity_filters = { resource.name }, - always_include_tiles = true, - }, - { - type = "recipe", - name = Resources.pfx .. resource.name, - localised_name = localisedName, - energy_required = 1, - enabled = false, - ingredients = {}, - result = Resources.pfx .. resource.name, - hide_from_stats = true, - } - } -end - --- New Items/Recipes for Resource Planners -for _, resource in pairs(data.raw.resource) do - -- Some Resources are better left alone - if not shouldSkipResourcePlanner(resource) then - data:extend(createResourcePlannerPrototypes(resource)) - end -end diff --git a/blueprint-sandboxes_1.16.4/prototypes/recipes/tiles-final-fixes.lua b/blueprint-sandboxes_1.16.4/prototypes/recipes/tiles-final-fixes.lua deleted file mode 100644 index 59292bd8..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/recipes/tiles-final-fixes.lua +++ /dev/null @@ -1,48 +0,0 @@ -PlannerIcons = require("scripts.planner-icons") -Tiles = require("scripts.tiles") - --- Helpers for Tile Planners -function shouldSkipTilePlanner(tile) - return tile.name ~= "water" -end - -function createTilePlannerPrototypes(tile) - local localisedName = tile.localised_name or { "tile-name." .. tile.name } - local icons = PlannerIcons.CreateLayeredIcon(tile) - return { - { - type = "item", - name = Tiles.pfx .. tile.name, - localised_name = localisedName, - icons = icons, - subgroup = Tiles.name, - order = tile.order, - stack_size = 1000, - stackable = true, - place_as_tile = { - result = tile.name, - condition = {}, - condition_size = 1, - }, - }, - { - type = "recipe", - name = Tiles.pfx .. tile.name, - localised_name = localisedName, - icons = icons, - energy_required = 1, - enabled = false, - ingredients = {}, - result = Tiles.pfx .. tile.name, - hide_from_stats = true, - } - } -end - --- New Items/Recipes for Tile Planners -for _, tile in pairs(data.raw.tile) do - -- Some Tiles are better left alone - if not shouldSkipTilePlanner(tile) then - data:extend(createTilePlannerPrototypes(tile)) - end -end diff --git a/blueprint-sandboxes_1.16.4/prototypes/shortcuts.lua b/blueprint-sandboxes_1.16.4/prototypes/shortcuts.lua deleted file mode 100644 index 446bb031..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/shortcuts.lua +++ /dev/null @@ -1,25 +0,0 @@ -data:extend({ - { - type = "custom-input", - name = ToggleGUI.toggleShortcut, - order = "a[toggle]", - key_sequence = "SHIFT + B" - }, - { - type = "shortcut", - name = ToggleGUI.toggleShortcut, - order = "b[blueprints]-z[sandbox]", - action = "lua", - associated_control_input = ToggleGUI.toggleShortcut, - style = "green", - toggleable = true, - icon = { - filename = BPSB.path .. "/graphics/icon-x64.png", - priority = "extra-high-no-scale", - size = 64, - scale = 0.5, - mipmap_count = 3, - flags = { "gui-icon" }, - }, - }, -}) diff --git a/blueprint-sandboxes_1.16.4/prototypes/styles.lua b/blueprint-sandboxes_1.16.4/prototypes/styles.lua deleted file mode 100644 index e7842b80..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/styles.lua +++ /dev/null @@ -1,18 +0,0 @@ -data.raw["gui-style"]["default"][BPSB.pfx .. "padded-horizontal-flow"] = { - type = "horizontal_flow_style", - parent = "horizontal_flow", - horizontal_spacing = 6, -} - -data.raw["gui-style"]["default"][BPSB.pfx .. "centered-horizontal-flow"] = { - type = "horizontal_flow_style", - parent = BPSB.pfx .. "padded-horizontal-flow", - vertical_align = "center", -} - -data.raw["gui-style"]["default"][BPSB.pfx .. "sprite-like-tool-button"] = { - type = "image_style", - parent = "image", - natural_size = 28, - stretch_image_to_widget_size = true, -} diff --git a/blueprint-sandboxes_1.16.4/prototypes/tips-and-tricks.lua b/blueprint-sandboxes_1.16.4/prototypes/tips-and-tricks.lua deleted file mode 100644 index d33ad880..00000000 --- a/blueprint-sandboxes_1.16.4/prototypes/tips-and-tricks.lua +++ /dev/null @@ -1,281 +0,0 @@ -local category = BPSB.pfx .. "intro" -local pfxOrder = BPSB.pfx -local pfxCategory = category .. "-" - -data:extend({ - { - type = "tips-and-tricks-item-category", - name = category, - order = pfxOrder .. "a", - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=item-group." .. BPSB.name .. "]", - name = pfxCategory .. "introduction", - order = pfxOrder .. "a", - is_title = true, - starting_status = "unlocked", - trigger = { - type = "time-elapsed", - ticks = 60 * 5 -- 5 seconds - }, - image = BPSB.path .. "/graphics/toggle-gui.png", - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "multiple-sandboxes", - indent = 1, - order = pfxOrder .. "b", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - image = BPSB.path .. "/graphics/choose-sandbox.png", - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=utility/reset_white]", - name = pfxCategory .. "reset-v2", - indent = 1, - order = pfxOrder .. "c", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - image = BPSB.path .. "/graphics/reset-sandbox.png", - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=utility/select_icon_white]", - name = pfxCategory .. "daylight", - indent = 1, - order = pfxOrder .. "d", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - image = BPSB.path .. "/graphics/daylight-slider.png", - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "sandbox-force", - indent = 1, - order = pfxOrder .. "e", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "new-recipes", - indent = 1, - order = pfxOrder .. "f", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - image = BPSB.path .. "/graphics/recipes.png", - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "god-mode", - indent = 1, - order = pfxOrder .. "g", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "auto-building", - indent = 1, - order = pfxOrder .. "h", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - simulation = { - init = [[ - local stack = game.create_inventory(1)[1] - stack.import_stack("0eNqV1NuKwyAQBuB3mWtb4ilpfZWyLEkri5CYoHbZEHz3muambFOYufT0ifLPLND1dzsF5xOYBdx19BHMZYHofnzbr3NpniwYcMkOwMC3wzpKofVxGkM6dLZPkBk4f7N/YHj+YmB9csnZTXoO5m9/HzobyoZPBoNpjOXY6NdbC3UQR81gBiOPulxwc8Fet2WR2Zsr8G5FcSXe5RRXoV0Sq9Es6RdqNCs/sWqHbdAsKQsnesZUcXekM13S+xKv6EHS/x9b78GcnnwcLMhZwrmSHH2cq8hpwrmaHH6cSy8q9V5Upd0+W7N56eQMfm2IW3mcuGrOotFcc1lXOT8AiIPzfg==") - stack.build_blueprint { - surface = game.surfaces[1], - force = game.forces.player, - position = { 0, 0 }, - } - - script.on_nth_tick(30, function() - local requestsHandled = 0 - local requestedRevives = game.surfaces[1].find_entities_filtered({ - type = "entity-ghost", - limit = 1, - }) - for _, request in pairs(requestedRevives) do - requestsHandled = requestsHandled + 1 - request.revive() - end - if requestsHandled == 0 then - script.on_nth_tick(60, nil) - end - end) - ]] - }, - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "illusions", - indent = 1, - order = pfxOrder .. "i", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, -}) - -if mods["space-exploration"] then - category = BPSB.pfx .. "space-exploration" - pfxCategory = category .. "-" - data:extend({ - { - type = "tips-and-tricks-item-category", - name = category, - order = pfxOrder .. "b", - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=virtual-signal.se-spaceship] [img=item-group." .. BPSB.name .. "]", - name = pfxCategory .. "introduction", - order = pfxOrder .. "a", - is_title = true, - trigger = { - type = "and", - triggers = { - { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, { - type = "unlock-recipe", - recipe = "se-medpack", - } - }, - }, - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=virtual-signal.se-star]", - name = pfxCategory .. "inner-star-tech", - indent = 1, - order = pfxOrder .. "b", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=virtual-signal.se-planet]", - name = pfxCategory .. "planetary-lab", - indent = 1, - order = pfxOrder .. "c", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=virtual-signal.se-planet-orbit]", - name = pfxCategory .. "orbital-sandbox", - indent = 1, - order = pfxOrder .. "d", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=virtual-signal.se-remote-view]", - name = pfxCategory .. "remote-view", - indent = 1, - order = pfxOrder .. "e", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - { - type = "tips-and-tricks-item", - category = category, - name = pfxCategory .. "mining", - indent = 1, - order = pfxOrder .. "f", - dependencies = { pfxCategory .. "introduction" }, - trigger = { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, - }, - }) -end - -if mods["factorissimo-2-notnotmelon"] then - category = BPSB.pfx .. "factorissimo" - pfxCategory = category .. "-" - data:extend({ - { - type = "tips-and-tricks-item-category", - name = category, - order = pfxOrder .. "c", - }, - { - type = "tips-and-tricks-item", - category = category, - tag = "[img=item.factory-1] [img=item-group." .. BPSB.name .. "]", - name = pfxCategory .. "introduction", - order = pfxOrder .. "a", - is_title = true, - trigger = { - type = "and", - triggers = { - { - type = "unlock-recipe", - recipe = BPSB.pfx .. "electric-energy-interface", - }, { - type = "unlock-recipe", - recipe = "factory-1", - } - }, - }, - }, - }) -end diff --git a/blueprint-sandboxes_1.16.4/release.sh b/blueprint-sandboxes_1.16.4/release.sh deleted file mode 100644 index 61439ed7..00000000 --- a/blueprint-sandboxes_1.16.4/release.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -name=$(cat info.json | jq -r .name) -version=$(cat info.json | jq -r .version) - -# Create git tag for this version -git tag -f "$version" - -mkdir release - -# Prepare zip for Factorio native use and mod portal -git archive --prefix "${name}_$version/" \ - -o "release/${name}_$version.zip" \ - HEAD diff --git a/blueprint-sandboxes_1.16.4/scripts/bpsb.lua b/blueprint-sandboxes_1.16.4/scripts/bpsb.lua deleted file mode 100644 index 2ff51633..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/bpsb.lua +++ /dev/null @@ -1,7 +0,0 @@ -local BPSB = {} - -BPSB.name = "blueprint-sandboxes" -BPSB.path = "__" .. BPSB.name .. "__" -BPSB.pfx = "bpsb-" - -return BPSB diff --git a/blueprint-sandboxes_1.16.4/scripts/chat.lua b/blueprint-sandboxes_1.16.4/scripts/chat.lua deleted file mode 100644 index 7b2ae60c..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/chat.lua +++ /dev/null @@ -1,22 +0,0 @@ --- Chat helpers to proxy messages between Sandboxes and the normal Surfaces -local Chat = {} - --- Proxy Chats between Sandbox Force <-> Original Force -function Chat.OnChat(event) - if event.player_index == nil then - return - end - local player = game.players[event.player_index] - local playerData = global.players[event.player_index] - - if Sandbox.IsPlayerInsideSandbox(player) then - game.forces[playerData.forceName].print(player.name .. ": " .. event.message, player.chat_color) - else - local sandboxForce = game.forces[playerData.sandboxForceName] - if sandboxForce ~= nil then - sandboxForce.print(player.name .. ": " .. event.message, player.chat_color) - end - end -end - -return Chat diff --git a/blueprint-sandboxes_1.16.4/scripts/debug.lua b/blueprint-sandboxes_1.16.4/scripts/debug.lua deleted file mode 100644 index 5f59700d..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/debug.lua +++ /dev/null @@ -1,34 +0,0 @@ -local Debug = {} - -function Debug.ItemStack(value) - data = {} - if (value == nil) then - data["nil"] = true - return data - end - - data["nil"] = false - data["valid"] = value.valid - data["valid_for_read"] = value.valid_for_read - if not value.valid_for_read then - return data - end - - data["is_blueprint"] = value.is_blueprint - if value.is_blueprint then - data["is_blueprint_setup"] = value.is_blueprint_setup() - end - - if value.is_blueprint then - local entities = value.get_blueprint_entities() - if entities then - data["entities"] = #entities - else - data["entities"] = "nil" - end - end - - return data -end - -return Debug diff --git a/blueprint-sandboxes_1.16.4/scripts/equipment.lua b/blueprint-sandboxes_1.16.4/scripts/equipment.lua deleted file mode 100644 index 02741512..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/equipment.lua +++ /dev/null @@ -1,143 +0,0 @@ --- Equipment-related methods -local Equipment = {} - --- Initializes an Inventory for the default equipment Blueprint(s) -function Equipment.Init(default) - local equipment = game.create_inventory(1) - Equipment.Set(equipment, default) - return equipment -end - --- Updates the default equipment Blueprint(s) -function Equipment.Set(equipment, default) - equipment[1].import_stack(default) -end - ---[[ -Before 1.1.87, there was a bug that did not correctly forcefully generate -chunks for surfaces with the Lab Tiles setting, which required us to -fix those tiles after generation but before placing the Blueprint. -This but was fixed in 1.1.87, however, it introduced another bug where -building a blueprint then did not immediately work on those tiles, -but building entities seemed to. So, the workaround is to delay the blueprint -building, so we do some work when the surface is generated, then the rest -as soon as possible (aligning to generated chunks seems faster (in ticks) -than waiting any number of specific ticks). -]] -function Equipment.Place(stack, surface, forceName) - if stack.is_blueprint then - log("Beginning Equipment Placement") - Equipment.Prepare(stack, surface) - - global.equipmentInProgress[surface.name] = { - stack = stack, - surface = surface, - forceName = forceName, - retries = 100, - } - Equipment.BuildBlueprint(stack, surface, forceName) - else - global.equipmentInProgress[surface.name] = nil - end - return true -end - --- Prepares a Surface for an Equipment Blueprint -function Equipment.Prepare(stack, surface) - -- We need to know how many Chunks must be generated to fit this Blueprint - local radius = 0 - local function updateRadius(thing) - local x = math.abs(thing.position.x) - local y = math.abs(thing.position.y) - radius = math.max(radius, x, y) - end - local entities = stack.get_blueprint_entities() - local tiles = stack.get_blueprint_tiles() - if entities then - for _, thing in pairs(entities) do - updateRadius(thing) - end - end - if tiles then - for _, thing in pairs(tiles) do - updateRadius(thing) - end - end - - -- Then, we can forcefully generate the necessary Chunks - local chunkRadius = 1 + math.ceil(radius / 32) - log("Requesting Chunks for Blueprint Placement: " .. chunkRadius) - surface.request_to_generate_chunks({ x = 0, y = 0 }, chunkRadius) - surface.force_generate_chunk_requests() - log("Chunks allegedly generated") -end - --- Applies an Equipment Blueprint to a Surface -function Equipment.IsReadyForBlueprint(stack, surface) - local entities = stack.get_blueprint_entities() - local tiles = stack.get_blueprint_tiles() - local function is_chunk_generated(thing) - return surface.is_chunk_generated({ - thing.position.x / 32, - thing.position.y / 32, - }) - end - if entities then - for _, thing in pairs(entities) do - if not is_chunk_generated(thing) then - return false - end - end - end - if tiles then - for _, thing in pairs(tiles) do - if not is_chunk_generated(thing) then - return false - end - end - end - return true -end - --- Applies an Equipment Blueprint to a Surface -function Equipment.BuildBlueprint(stack, surface, forceName) - local equipmentData = global.equipmentInProgress[surface.name] - - -- First, let's check if the Chunks are ready for us - if not Equipment.IsReadyForBlueprint(stack, surface) then - equipmentData.retries = equipmentData.retries - 1 - return false - end - - -- Then, place the Tiles ourselves since it might prevent placing the Blueprint - local tiles = stack.get_blueprint_tiles() - if tiles then - surface.set_tiles(tiles, true, true, true, true) - end - - -- Finally, we can place the Blueprint - local ghosts = stack.build_blueprint({ - surface = surface.name, - force = forceName, - position = { 0, 0 }, - skip_fog_of_war = true, - raise_built = true, - }) - - -- But that may have not been successful, despite our attempts to ensure it! - if #ghosts > 0 then - log("Some ghosts created, ending repeated attempts; assuming Blueprint is placed") - global.equipmentInProgress[surface.name] = nil - return true - elseif equipmentData.retries <= 0 then - log("No ghosts created, but we've exceeded retry limit, ending repeated attempts") - surface.print("Failed to place Equipment Blueprint after too many retries") - global.equipmentInProgress[surface.name] = nil - return false - else - equipmentData.retries = equipmentData.retries - 1 - return false - end -end - -return Equipment diff --git a/blueprint-sandboxes_1.16.4/scripts/events.lua b/blueprint-sandboxes_1.16.4/scripts/events.lua deleted file mode 100644 index 4b0a563f..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/events.lua +++ /dev/null @@ -1,13 +0,0 @@ -local Events = {} - -Events.on_daylight_changed_event = script.generate_event_name() - -function Events.SendDaylightChangedEvent(player_index, surface_name, daytime) - script.raise_event(Events.on_daylight_changed_event, { - surface_name = surface_name, - player_index = player_index, - daytime = daytime, - }) -end - -return Events diff --git a/blueprint-sandboxes_1.16.4/scripts/factorissimo.lua b/blueprint-sandboxes_1.16.4/scripts/factorissimo.lua deleted file mode 100644 index 196e46f1..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/factorissimo.lua +++ /dev/null @@ -1,68 +0,0 @@ --- Factorissimo related functionality -local Factorissimo = {} - -Factorissimo.name = "factorissimo" -Factorissimo.enabled = not not remote.interfaces[Factorissimo.name] - -Factorissimo.surfacePfx = "factory-floor-" -local surfacePfxLength = string.len(Factorissimo.surfacePfx) - -function Factorissimo.GetAllFactories() - if Factorissimo.enabled then - return remote.call(Factorissimo.name, "get_global", { "factories" }) - else - return {} - end -end - --- Whether the Surface is a Factory -function Factorissimo.IsFactory(thingWithName) - if not Factorissimo.enabled then - return false - end - - return string.sub(thingWithName.name, 1, surfacePfxLength) == Factorissimo.surfacePfx -end - --- Whether the Surface is a Factory inside of a Sandbox -function Factorissimo.IsFactoryInsideSandbox(surface, position) - if not Factorissimo.enabled then - return false - end - - local factory = Factorissimo.GetFactory(surface, position) - if not factory then - return false - end - - return Sandbox.IsSandboxForce(factory.force) -end - --- Find a Factory given a Surface and Position (if possible) -function Factorissimo.GetFactory(surface, position) - return remote.call(Factorissimo.name, "find_surrounding_factory", surface, position) -end - --- Find a Factory's Outside Surface recursively -function Factorissimo.GetOutsideSurfaceForFactory(surface, position) - if not Factorissimo.IsFactory(surface) then - return nil - end - - local factory = Factorissimo.GetFactory(surface, position) - if not factory then - return nil - end - - if Factorissimo.IsFactory(factory.outside_surface) then - return Factorissimo.GetOutsideSurfaceForFactory(factory.outside_surface, { - x = factory.outside_door_x, - y = factory.outside_door_y, - }) - else - return factory.outside_surface - end - return nil -end - -return Factorissimo diff --git a/blueprint-sandboxes_1.16.4/scripts/force.lua b/blueprint-sandboxes_1.16.4/scripts/force.lua deleted file mode 100644 index 41d20599..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/force.lua +++ /dev/null @@ -1,149 +0,0 @@ --- Managing Forces and their Sandbox Forces -local Force = {} - --- Properties from the original Force that are synced to the Sandbox Force (in not-all-tech mode) -Force.syncedProperties = { - -- "manual_mining_speed_modifier", Forcibly set - "manual_crafting_speed_modifier", - -- "laboratory_speed_modifier", Forcibly set - "laboratory_productivity_bonus", - "worker_robots_speed_modifier", - "worker_robots_battery_modifier", - "worker_robots_storage_bonus", - "inserter_stack_size_bonus", - "stack_inserter_capacity_bonus", - "character_trash_slot_count", - "maximum_following_robot_count", - "following_robots_lifetime_modifier", - "character_running_speed_modifier", - "artillery_range_modifier", - "character_build_distance_bonus", - "character_item_drop_distance_bonus", - "character_reach_distance_bonus", - "character_resource_reach_distance_bonus", - "character_item_pickup_distance_bonus", - "character_loot_pickup_distance_bonus", - -- "character_inventory_slots_bonus", Set with a bonus - "character_health_bonus", - "mining_drill_productivity_bonus", - "train_braking_force_bonus", -} - --- Setup Force, if necessary -function Force.Init(force) - if global.forces[force.name] - or Sandbox.IsSandboxForce(force) - or #force.players < 1 - then - log("Skip Force.Init: " .. force.name) - return - end - - log("Force.Init: " .. force.name) - local forceLabName = Lab.NameFromForce(force) - local sandboxForceName = Sandbox.NameFromForce(force) - global.forces[force.name] = { - sandboxForceName = sandboxForceName, - } - global.sandboxForces[sandboxForceName] = { - forceName = force.name, - hiddenItemsUnlocked = false, - labName = forceLabName, - sePlanetaryLabZoneName = nil, - seOrbitalSandboxZoneName = nil, - } -end - --- Delete Force's information, if necessary -function Force.Merge(oldForceName, newForce) - -- Double-check we know about this Force - local oldForceData = global.forces[oldForceName] - local newForceData = global.forces[newForce.name] - if not oldForceData or not newForceData then - log("Skip Force.Merge: " .. oldForceName .. " -> " .. newForce.name) - return - end - local sandboxForceName = oldForceData.sandboxForceName - local oldSandboxForceData = global.sandboxForces[sandboxForceName] - local oldSandboxForce = game.forces[sandboxForceName] - - -- Bounce any Players currently using the older Sandboxes - if oldSandboxForce then - for _, player in pairs(oldSandboxForce.players) do - if Sandbox.IsPlayerInsideSandbox(player) then - log("Force.Merge must manually change Sandbox Player's Force: " .. player.name .. " -> " .. newForce.name) - player.force = newForce - end - end - end - - -- Delete the old Force-related Surfaces/Forces - Lab.DeleteLab(oldSandboxForceData.labName) - SpaceExploration.DeleteSandbox(oldSandboxForceData, oldSandboxForceData.sePlanetaryLabZoneName) - SpaceExploration.DeleteSandbox(oldSandboxForceData, oldSandboxForceData.seOrbitalSandboxZoneName) - if oldSandboxForce then - log("Force.Merge must merge Sandbox Forces: " .. oldSandboxForce.name .. " -> " .. newForceData.sandboxForceName) - game.merge_forces(oldSandboxForce, newForceData.sandboxForceName) - end - - -- Delete the old Force's data - global.forces[oldForceName] = nil - global.sandboxForces[sandboxForceName] = nil -end - --- Configure Sandbox Force -function Force.ConfigureSandboxForce(force, sandboxForce) - -- Ensure the two Forces don't attack each other - force.set_cease_fire(sandboxForce, true) - sandboxForce.set_cease_fire(force, true) - - -- Sync a few properties just in case, but only if they should be linked - if not settings.global[Settings.allowAllTech].value then - for _, property in pairs(Force.syncedProperties) do - sandboxForce[property] = force[property] - end - end - - -- Counteract Space Exploration's slow Mining Speed for Gods - sandboxForce.manual_mining_speed_modifier = settings.global[Settings.extraMiningSpeed].value - - -- Make research faster/slower based on play-style - sandboxForce.laboratory_speed_modifier = settings.global[Settings.extraLabSpeed].value - - -- You should have a little more space too - sandboxForce.character_inventory_slots_bonus = - force.character_inventory_slots_bonus - + settings.global[Settings.bonusInventorySlots].value - - return sandboxForce -end - --- Create Sandbox Force, if necessary -function Force.GetOrCreateSandboxForce(force) - local sandboxForceName = global.forces[force.name].sandboxForceName - local sandboxForce = game.forces[sandboxForceName] - if sandboxForce then - Force.ConfigureSandboxForce(force, sandboxForce) - return sandboxForce - end - - log("Creating Sandbox Force: " .. sandboxForceName) - sandboxForce = game.create_force(sandboxForceName) - Force.ConfigureSandboxForce(force, sandboxForce) - Research.Sync(force, sandboxForce) - return sandboxForce -end - --- For all Forces with Sandboxes, Configure them again -function Force.SyncAllForces() - for _, force in pairs(game.forces) do - if not Sandbox.IsSandboxForce(force) then - local sandboxForce = game.forces[Sandbox.NameFromForce(force)] - if sandboxForce then - Force.ConfigureSandboxForce(force, sandboxForce) - end - end - end -end - -return Force diff --git a/blueprint-sandboxes_1.16.4/scripts/god.lua b/blueprint-sandboxes_1.16.4/scripts/god.lua deleted file mode 100644 index e35fe624..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/god.lua +++ /dev/null @@ -1,298 +0,0 @@ --- Custom Extensions to the God-Controller -local God = {} - -God.onBuiltEntityFilters = { - { filter = "type", type = "tile-ghost" }, - { filter = "type", type = "entity-ghost" }, - { filter = "type", type = "item-request-proxy" }, -} - -for realEntityName, illusionName in pairs(Illusion.realToIllusionMap) do - table.insert( - God.onBuiltEntityFilters, - { filter = "name", name = realEntityName } - ) -end - --- TODO: Perhaps this can be determined by flags? -God.skipHandlingEntities = { - ["logistic-train-stop-input"] = true, - ["logistic-train-stop-output"] = true, - ["tl-dummy-entity"] = true, -} - --- Immediately destroy an Entity (and perhaps related Entities) -function God.Destroy(entity) - if entity.valid - and entity.can_be_destroyed() - and entity.to_be_deconstructed() - then - - -- If the Entity has Transport Lines, also delete any Items on it - if entity.prototype.belt_speed ~= nil then - for i = 1, entity.get_max_transport_line_index() do - entity.get_transport_line(i).clear() - end - end - - -- If the Entity represents a Hidden Tile underneath - if entity.type == "deconstructible-tile-proxy" then - local hiddenTile = entity.surface.get_hidden_tile(entity.position) - entity.surface.set_tiles { - { - name = hiddenTile, - position = entity.position, - } - } - end - - entity.destroy({ raise_destroy = true }) - end -end - --- Immediately Insert an Entity's Requests -function God.InsertRequests(entity) - if entity.valid - and entity.type == "item-request-proxy" - and entity.proxy_target then - -- Insert any Requested Items (like Modules, Fuel) - for name, count in pairs(entity.item_requests) do - entity.proxy_target.insert({ - name = name, - count = count, - }) - end - entity.destroy() - end -end - --- Immediately Revive a Ghost Entity -function God.Create(entity) - Illusion.ReplaceIfNecessary(entity) - if entity.valid then - if entity.type == "tile-ghost" then - -- Tiles are simple Revives - entity.silent_revive({ raise_revive = true }) - elseif entity.type == "item-request-proxy" then - -- Requests are simple - God.InsertRequests(entity) - elseif entity.type == "entity-ghost" then - -- Entities might also want Items after Reviving - local _, revived, request = entity.silent_revive({ - return_item_request_proxy = true, - raise_revive = true - }) - - if revived and request then - God.InsertRequests(request) - end - end - end -end - --- Immediately turn one Entity into another -function God.Upgrade(entity) - if entity.valid - and entity.to_be_upgraded() - then - local target = entity.get_upgrade_target() - local direction = entity.get_upgrade_direction() - - if Illusion.IsIllusion(entity.name) and - Illusion.GetActualName(entity.name) == target.name - then - log("Cancelling an Upgrade from an Illusion to its Real Entity: " .. entity.name) - entity.cancel_upgrade(entity.force) - return - end - - local options = { - name = target.name, - position = entity.position, - direction = direction or entity.direction, - force = entity.force, - fast_replace = true, - spill = false, - raise_built = true, - } - - -- Otherwise it fails to place "output" sides (it defaults to "input") - if entity.type == "underground-belt" then - options.type = entity.belt_to_ground_type - end - - local result = entity.surface.create_entity(options) - - if result == nil and entity.valid then - log("Upgrade Failed, Cancelling: " .. entity.name) - entity.cancel_upgrade(entity.force) - else - log("Upgrade Failed, Old Entity Gone too!") - end - end -end - --- Ensure the God's Inventory is kept in-sync -function God.OnInventoryChanged(event) - local player = game.players[event.player_index] - local playerData = global.players[event.player_index] - if Sandbox.IsPlayerInsideSandbox(player) then - Inventory.Prune(player) - playerData.sandboxInventory = Inventory.Persist( - player.get_main_inventory(), - playerData.sandboxInventory - ) - end -end - --- Ensure newly-crafted Items are put into the Cursor for use -function God.OnPlayerCraftedItem(event) - local player = game.players[event.player_index] - if Sandbox.IsPlayerInsideSandbox(player) - and player.cursor_stack - and player.cursor_stack.valid - and event.item_stack.valid - and event.item_stack.valid_for_read - and event.recipe.valid - and ( - #event.recipe.products == 1 - or ( - event.recipe.prototype.main_product - and event.recipe.prototype.main_product.name == event.item_stack.name - ) - ) - and player.mod_settings[Settings.craftToCursor].value - then - event.item_stack.count = event.item_stack.prototype.stack_size - player.cursor_stack.clear() - player.cursor_stack.transfer_stack(event.item_stack) - end -end - -function God.AsyncWrapper(setting, queue, handler, entity) - if settings.global[setting].value == 0 then - handler(entity) - else - Queue.Push(queue, entity) - end -end - -function God.ShouldHandleEntity(entity) - if not Sandbox.IsSandboxForce(entity.force) then - return false - end - - local name = Illusion.GhostOrRealName(entity) - if God.skipHandlingEntities[name] then - return false - end - - return Lab.IsLab(entity.surface) - or SpaceExploration.IsSandbox(entity.surface) - or (Factorissimo.IsFactory(entity.surface) - and Factorissimo.IsFactoryInsideSandbox(entity.surface, entity.position)) -end - --- Ensure new Orders are handled -function God.OnMarkedForDeconstruct(event) - -- log("Entity Deconstructing: " .. event.entity.unit_number .. " " .. event.entity.type) - if God.ShouldHandleEntity(event.entity) then - God.AsyncWrapper( - Settings.godAsyncDeleteRequestsPerTick, - global.asyncDestroyQueue, - God.Destroy, - event.entity - ) - end -end - --- Ensure new Orders are handled -function God.OnMarkedForUpgrade(event) - -- log("Entity Upgrading: " .. event.entity.unit_number .. " " .. event.entity.type) - if God.ShouldHandleEntity(event.entity) then - God.AsyncWrapper( - Settings.godAsyncUpgradeRequestsPerTick, - global.asyncUpgradeQueue, - God.Upgrade, - event.entity - ) - end -end - --- Ensure new Ghosts are handled -function God.OnBuiltEntity(entity) - -- log("Entity Creating: " .. entity.unit_number .. " " .. entity.type) - if God.ShouldHandleEntity(entity) then - God.AsyncWrapper( - Settings.godAsyncCreateRequestsPerTick, - global.asyncCreateQueue, - God.Create, - entity - ) - end -end - --- For each known Sandbox Surface, handle any async God functionality -function God.HandleAllSandboxRequests(event) - local createRequestsPerTick = settings.global[Settings.godAsyncCreateRequestsPerTick].value - local upgradeRequestsPerTick = settings.global[Settings.godAsyncUpgradeRequestsPerTick].value - local deleteRequestsPerTick = settings.global[Settings.godAsyncDeleteRequestsPerTick].value - - local destroyRequestsHandled = 0 - while Queue.Size(global.asyncDestroyQueue) > 0 - and deleteRequestsPerTick > 0 - do - God.Destroy(Queue.Pop(global.asyncDestroyQueue)) - destroyRequestsHandled = destroyRequestsHandled + 1 - deleteRequestsPerTick = deleteRequestsPerTick - 1 - end - if Queue.Size(global.asyncDestroyQueue) == 0 - and destroyRequestsHandled > 0 - then - global.asyncDestroyQueue = Queue.New() - end - - local upgradeRequestsHandled = 0 - while Queue.Size(global.asyncUpgradeQueue) > 0 - and upgradeRequestsPerTick > 0 - do - God.Upgrade(Queue.Pop(global.asyncUpgradeQueue)) - upgradeRequestsHandled = upgradeRequestsHandled + 1 - upgradeRequestsPerTick = upgradeRequestsPerTick - 1 - end - if Queue.Size(global.asyncUpgradeQueue) == 0 - and upgradeRequestsHandled > 0 - then - global.asyncUpgradeQueue = Queue.New() - end - - local createRequestsHandled = 0 - while Queue.Size(global.asyncCreateQueue) > 0 - and createRequestsPerTick > 0 - do - God.Create(Queue.Pop(global.asyncCreateQueue)) - createRequestsHandled = createRequestsHandled + 1 - createRequestsPerTick = createRequestsPerTick - 1 - end - if Queue.Size(global.asyncCreateQueue) == 0 - and createRequestsHandled > 0 - then - global.asyncCreateQueue = Queue.New() - end -end - --- Charts each Sandbox that a Player is currently inside of -function God.ChartAllOccupiedSandboxes() - if settings.global[Settings.scanSandboxes].value then - local charted = {} - for _, player in pairs(game.players) do - local hash = player.force.name .. player.surface.name - if Sandbox.IsSandbox(player.surface) and not charted[hash] then - player.force.chart_all(player.surface) - charted[hash] = true - end - end - end -end - -return God diff --git a/blueprint-sandboxes_1.16.4/scripts/illusion.lua b/blueprint-sandboxes_1.16.4/scripts/illusion.lua deleted file mode 100644 index ee41ab8f..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/illusion.lua +++ /dev/null @@ -1,209 +0,0 @@ --- Illusion magic for swapping real/complex entities with fake/simple variants -local Illusion = {} - -Illusion.pfx = BPSB.pfx .. "ils-" -local pfxLength = string.len(Illusion.pfx) - --- Full list of Entities that require Illusions -Illusion.mappings = { - -- { "type", "entity-name", "item-name" }, - { "ammo-turret", "se-meteor-defence-container", "se-meteor-defence" }, - { "ammo-turret", "se-meteor-point-defence-container", "se-meteor-point-defence" }, - { "assembling-machine", "se-delivery-cannon", "se-delivery-cannon" }, - { "assembling-machine", "se-delivery-cannon-weapon", "se-delivery-cannon-weapon" }, - { "assembling-machine", "se-energy-transmitter-injector", "se-energy-transmitter-injector" }, - { "assembling-machine", "se-energy-transmitter-emitter", "se-energy-transmitter-emitter" }, - { "assembling-machine", "se-space-elevator", "se-space-elevator" }, - { "boiler", "se-energy-transmitter-chamber", "se-energy-transmitter-chamber" }, - { "container", "se-rocket-launch-pad", "se-rocket-launch-pad" }, - { "container", "se-rocket-landing-pad", "se-rocket-landing-pad" }, - { "electric-energy-interface", "se-energy-beam-defence", "se-energy-beam-defence" }, - { "mining-drill", "se-core-miner-drill", "se-core-miner" }, -} - -Illusion.realToIllusionMap = {} -for _, mapping in ipairs(Illusion.mappings) do - Illusion.realToIllusionMap[mapping[2]] = Illusion.pfx .. mapping[2] -end - -Illusion.realNameFilters = {} -for realEntityName, illusionName in pairs(Illusion.realToIllusionMap) do - table.insert(Illusion.realNameFilters, realEntityName) -end - --- Whether the Thing is an Illusion -function Illusion.IsIllusion(name) - return string.sub(name, 1, pfxLength) == Illusion.pfx -end - --- Extract the Name from an Illusion -function Illusion.GetActualName(name) - return string.sub(name, pfxLength + 1) -end - --- Extract the Name from an Entity -function Illusion.GhostOrRealName(entity) - local realName = entity.name - if entity.type == "entity-ghost" then - realName = entity.ghost_name - end - return realName -end - --- Convert a built Entity into an Illusion (if possible) -function Illusion.ReplaceIfNecessary(entity) - if not entity.valid then - return - end - - local realName = Illusion.GhostOrRealName(entity) - local illusionName = Illusion.realToIllusionMap[realName] - if illusionName == nil then - return - end - - local options = { - name = illusionName, - position = entity.position, - direction = entity.direction, - force = entity.force, - fast_replace = true, - spill = false, - raise_built = true, - } - - local result = entity.surface.create_entity(options) - - if result == nil then - log("Could not replace " .. realName .. " with " .. illusionName) - else - log("Replaced " .. realName .. " with " .. illusionName) - end -end - - ---[[ -Holy shit, this is perhaps __the__ most gross portion of the Modding API. -on_player_setup_blueprint _should_ be the primary and only method for handling -Blueprints, but it is not. It is only _correctly_ called when the Blueprint -is first created. If a Blueprint has its contents reselected, then it is still -called, but the event data is entirely useless. Allegedly, you'd have to find -the Blueprint in the Player's inventory - but it might not always be there either! -It seems most in the community went for on_gui_closed which _probably_ has the -Blueprint, however it will occur after selection so I imagine there's potential -for it to _appear_ wrong before saving. on_gui_opened would work the same, -but of course it would not catch any updates, so it's useless in this case. -Worse still, this _only_ works for Blueprints in your Inventory - not from -the Library! For that situation, we'll warn the Player. - -See: - -[kovarex] [1.0.0] Updated blueprint has no entities during on_player_setup_blueprint -https://forums.factorio.com/viewtopic.php?f=48&t=88100 - -[kovarex] [1.1.36] Blueprints missing entity list when reused -https://forums.factorio.com/viewtopic.php?f=7&t=99323 - -[kovarex] [1.0.0] New contents for blueprint broken vs. new blueprint -https://forums.factorio.com/viewtopic.php?f=29&t=88793 - -Copying (Ctrl+C): -- on_blueprint_setup is called -- blueprint_to_setup NOT valid_for_read -- cursor_stack valid_for_read -- cursor_stack is setup, has entity mapping, and entities - -Copying into new Blueprint (Shift+Ctrl+C): -Empty Blueprint in cursor, from Inventory or Book in Inventory, selecting new area (Alt+B): -- on_blueprint_setup is called -- blueprint_to_setup valid_for_read -- blueprint_to_setup is setup, has entity mapping, and entities -- cursor_stack NOT valid_for_read - -Selecting new contents, from Inventory or Book in Inventory: -Selecting new contents, from Library or Book in Library: -- on_blueprint_setup is called -- blueprint_to_setup NOT valid_for_read -- cursor_stack valid_for_read -- cursor_stack NOT setup, NO entity mapping, NO entities - -Closing/Confirming Blueprint GUI, from Inventory or Book in Inventory: -- on_gui_closed is called -- item valid_for_read -- item NOT setup, NO entity mapping, but has entities - -Closing/Confirming Blueprint GUI, from Library or Book in Library: -- on_gui_closed is called -- item valid_for_read -- item NOT setup, NO entity mapping, NO entities - -]] - --- Convert an entire Blueprint's contents from Illusions (if possible) -function Illusion.HandleBlueprintEvent(player, potentialItemStacks) - if not Sandbox.IsPlayerInsideSandbox(player) then - return - end - - local blueprint = nil - for _, itemStack in pairs(potentialItemStacks) do - if itemStack and itemStack.valid_for_read and itemStack.is_blueprint then - blueprint = itemStack - break - end - end - - -- We must catch more events than we need, so this is expected - if not blueprint then - return - end - - -- Some events won't have a functional Blueprint, so we're screwed! - local entities = blueprint.get_blueprint_entities() - if not entities then - log("Cannot handle Blueprint update: no entities in Blueprint (caused by selecting new contents)") - local playerData = global.players[player.index] - local lastWarningForNewContents = playerData.lastWarningForNewContents or 0 - if game.tick - lastWarningForNewContents > (216000) then -- 1 hour - player.print("WARNING: Known issues in Factorio prevent mods from seeing or updating Blueprints when using 'Select new contents'.") - player.print("This mod requires that ability to swap the Fake Illusions for their Real Entities in your Blueprints.") - player.print("If you are including any Fake Illusions in this Blueprint, they likely will NOT be replaced, especially if the source Blueprint is within the Library instead of your Inventory.") - player.print("This message will only appear periodically. See the mod's page for more details.") - playerData.lastWarningForNewContents = game.tick - end - return - end - - local replaced = 0 - for _, entity in pairs(entities) do - if Illusion.IsIllusion(entity.name) then - entity.name = Illusion.GetActualName(entity.name) - replaced = replaced + 1 - end - end - if replaced > 0 then - blueprint.set_blueprint_entities(entities) - end - log("Replaced " .. replaced .. " entities in Sandbox Blueprint") -end - --- A Player is creating a new Blueprint from a selection -function Illusion.OnBlueprintSetup(event) - local player = game.players[event.player_index] - Illusion.HandleBlueprintEvent(player, { - player.blueprint_to_setup, - player.cursor_stack, - }) -end - --- A Player might be updating an existing Blueprint (only works in the Inventory!) -function Illusion.OnBlueprintGUIClosed(event) - if not event.item then - return - end - Illusion.HandleBlueprintEvent(game.players[event.player_index], { - event.item, - }) -end - -return Illusion diff --git a/blueprint-sandboxes_1.16.4/scripts/init.lua b/blueprint-sandboxes_1.16.4/scripts/init.lua deleted file mode 100644 index 483fb674..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/init.lua +++ /dev/null @@ -1,50 +0,0 @@ --- First-time Setup for new Games and new Players -local Init = {} - --- Setup Player, if necessary -function Init.Player(player) - if global.players[player.index] then - log("Skip Init.Player: " .. player.name) - return - end - - log("Init.Player: " .. player.name) - local playerLabName = Lab.NameFromPlayer(player) - local sandboxForceName = Sandbox.NameFromForce(player.force) - global.players[player.index] = { - forceName = player.force.name, - labName = playerLabName, - sandboxForceName = sandboxForceName, - selectedSandbox = Sandbox.player, - sandboxInventory = nil, - insideSandbox = nil, - lastSandboxPositions = {}, - } - ToggleGUI.Init(player) -end - --- Reset all Mod data -function Init.FirstTimeInit() - log("Init.FirstTimeInit") - global.version = Migrate.version - global.forces = {} - global.players = {} - global.labSurfaces = {} - global.sandboxForces = {} - global.seSurfaces = {} - global.equipmentInProgress = {} - global.asyncCreateQueue = Queue.New() - global.asyncUpgradeQueue = Queue.New() - global.asyncDestroyQueue = Queue.New() - global.lastSettingForAsyncGodTick = settings.global[Settings.godAsyncTick].value - - -- Warning: do not rely on this alone; new Saves have no Players/Forces yet - for _, force in pairs(game.forces) do - Force.Init(force) - end - for _, player in pairs(game.players) do - Init.Player(player) - end -end - -return Init diff --git a/blueprint-sandboxes_1.16.4/scripts/inventory.lua b/blueprint-sandboxes_1.16.4/scripts/inventory.lua deleted file mode 100644 index 844fe243..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/inventory.lua +++ /dev/null @@ -1,100 +0,0 @@ --- Inventory-related methods -local Inventory = {} - --- TODO: Consider the Cursor Inventory too (otherwise items can be lost during transition) --- TODO: Consider Filters (otherwise they are lost during transition) - --- Extracts a Player Cursor's Blueprint as a string (if present) -function Inventory.GetCursorBlueprintString(player) - local blueprint = nil - if player.is_cursor_blueprint() then - if player.character - and player.character.cursor_stack - and player.character.cursor_stack.valid - and player.character.cursor_stack.valid_for_read - then - blueprint = player.character.cursor_stack.export_stack() - elseif player.cursor_stack - and player.cursor_stack.valid - and player.cursor_stack.valid_for_read - then - blueprint = player.cursor_stack.export_stack() - else - player.print("There was a Blueprint in your cursor, but Factorio incorrectly describes it as invalid. This is most likely because it's currently in the Blueprint Library (a known bug in Factorio).") - end - end - return blueprint -end - --- Whether a Player's Cursor can non-destructively be replaced -function Inventory.WasCursorSafelyCleared(player) - if not player or not player.cursor_stack.valid then - return false - end - if player.is_cursor_empty() then return true end - if player.is_cursor_blueprint() then return true end - - --[[ TODO: - This doesn't usually happen, since the "source location" of the item - seems to be lost after swapping the character. - ]] - if not player.cursor_stack_temporary then - player.clear_cursor() - return true - end - - return false -end - --- Whether a Player's Inventory is vulnerable to going missing due to lack of a body -function Inventory.ShouldPersist(controller) - return controller ~= defines.controllers.character -end - --- Ensure a Player's Inventory isn't full -function Inventory.Prune(player) - local inventory = player.get_main_inventory() - if not inventory then - return - end - - if inventory.count_empty_stacks() == 0 then - player.print("Your inventory is almost full. Please throw some items away.") - player.surface.spill_item_stack(player.position, inventory[#inventory]) - inventory[#inventory].clear() - end -end - --- Persist one Inventory into another mod-created one -function Inventory.Persist(from, to) - if not from then - return nil - end - if not to then - to = game.create_inventory(#from) - else - to.resize(#from) - end - for i = 1, #from do - to[i].set_stack(from[i]) - end - return to -end - --- Restore one Inventory into another -function Inventory.Restore(from, to) - if not from or not to then - return - end - local transition = math.min(#from, #to) - for i = 1, transition do - to[i].set_stack(from[i]) - end - if transition < #to then - for i = transition + 1, #to do - to[i].set_stack() - end - end -end - -return Inventory diff --git a/blueprint-sandboxes_1.16.4/scripts/lab.lua b/blueprint-sandboxes_1.16.4/scripts/lab.lua deleted file mode 100644 index 98802430..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/lab.lua +++ /dev/null @@ -1,183 +0,0 @@ --- Manage the Lab-like Surfaces -local Lab = {} - -Lab.pfx = BPSB.pfx .. "lab-" -local pfxLength = string.len(Lab.pfx) - -Lab.chartAllLabsTick = 300 - -Lab.equipmentString = "0eNqNkd1ugzAMhd/F10kF6bq2eZVqQpAaZgkMSkI1hnj3OVRC1dT95M6x/Z2TkxmqdsTBE0ewM5DrOYC9zBCo4bJNd3EaECxQxA4UcNmlClt00ZPTyOibScs++rp0CIsC4it+gM0X9SenokZvrKFvH/fN8qYAOVIkvJtai6ngsavQi8AvGAVDH2Sz56QttEzBBFabJbn6BjL/eNcPwEz8VmNdoy8CfQoiz7bzRGm/KRHXxNLS7h1DfILfHVYBszuskdyni4AxEjchTXns+hsWo/RasYnXIoUrrehHXFJ6a9j24Y8V3NCHVcWc8pfj2RxfzyY77SWXL6PBsLw=" - --- A unique per-Player Lab Name -function Lab.NameFromPlayer(player) - return Lab.pfx .. "p-" .. player.name -end - --- A unique per-Force Lab Name -function Lab.NameFromForce(force) - return Lab.pfx .. "f-" .. force.name -end - --- Whether the Surface (or Force) is specific to a Lab -function Lab.IsLab(thingWithName) - return string.sub(thingWithName.name, 1, pfxLength) == Lab.pfx - -- return not not global.labSurfaces[thingWithName.name] -end - --- Create a new Lab Surface, if necessary -function Lab.GetOrCreateSurface(labName, sandboxForce) - local surface = game.surfaces[labName] - - if not Lab.IsLab({ name = labName }) then - log("Not a Lab, won't Create: " .. labName) - return - end - - if surface then - if global.labSurfaces[labName] then - return surface - end - log("Found a Lab Surface, but not the Data; recreating it for safety") - end - - log("Creating Lab: " .. labName) - global.labSurfaces[labName] = { - sandboxForceName = sandboxForce.name, - equipmentBlueprints = Equipment.Init(Lab.equipmentString), - daytime = 0.95, - } - if not surface then - surface = game.create_surface(labName, { - default_enable_all_autoplace_controls = false, - cliff_settings = { cliff_elevation_0 = 1024 }, - }) - end - - return surface -end - --- Set a Lab's Daytime to a specific value -function Lab.SetDayTime(player, surface, daytime) - if Lab.IsLab(surface) then - surface.freeze_daytime = true - surface.daytime = daytime - global.labSurfaces[surface.name].daytime = daytime - Events.SendDaylightChangedEvent(player.index, surface.name, daytime) - return true - else - return false - end -end - --- Delete a Lab Surface, if present -function Lab.DeleteLab(surfaceName) - if game.surfaces[surfaceName] and global.labSurfaces[surfaceName] then - log("Deleting Lab: " .. surfaceName) - local equipmentBlueprints = global.labSurfaces.equipmentBlueprints - if equipmentBlueprints and equipmentBlueprints.valid() then - equipmentBlueprints.destroy() - end - global.labSurfaces[surfaceName] = nil - game.delete_surface(surfaceName) - return true - else - log("Not a Lab, won't Delete: " .. surfaceName) - return false - end -end - --- Set the Lab's equipment Blueprint for a Surface -function Lab.SetEquipmentBlueprint(surface, equipmentString) - if Lab.IsLab(surface) then - log("Setting Lab equipment: " .. surface.name) - Equipment.Set( - global.labSurfaces[surface.name].equipmentBlueprints, - equipmentString - ) - surface.print("The equipment Blueprint for this Lab has been changed") - return true - else - log("Not a Lab, won't Set equipment: " .. surface.name) - return false - end -end - --- Reset the Lab's equipment Blueprint for a Surface -function Lab.ResetEquipmentBlueprint(surface) - if Lab.IsLab(surface) then - log("Resetting Lab equipment: " .. surface.name) - Equipment.Set( - global.labSurfaces[surface.name].equipmentBlueprints, - Lab.equipmentString - ) - surface.print("The equipment Blueprint for this Lab has been reset") - return true - else - log("Not a Lab, won't Reset equipment: " .. surface.name) - return false - end -end - --- Reset the Lab a Player is currently in -function Lab.Reset(player) - if Lab.IsLab(player.surface) then - log("Resetting Lab: " .. player.surface.name) - player.teleport({ 0, 0 }, player.surface.name) - player.surface.clear(false) - return true - else - log("Not a Lab, won't Reset: " .. player.surface.name) - return false - end -end - --- Set some important Surface settings for a Lab -function Lab.AfterCreate(surface) - local surfaceData = global.labSurfaces[surface.name] - if not surfaceData then - log("Not a Lab, won't handle Creation: " .. surface.name) - return false - end - - log("Handling Creation of Lab: " .. surface.name) - - if remote.interfaces["RSO"] then - pcall(remote.call, "RSO", "ignoreSurface", surface.name) - end - - if remote.interfaces["dangOreus"] then - pcall(remote.call, "dangOreus", "toggle", surface.name) - end - - if remote.interfaces["AbandonedRuins"] then - pcall(remote.call, "AbandonedRuins", "exclude_surface", surface.name) - end - - surface.freeze_daytime = true - surface.daytime = 0.95 - surface.show_clouds = false - surface.generate_with_lab_tiles = true - - return true -end - --- Add some helpful initial Entities to a Lab -function Lab.Equip(surface) - local surfaceData = global.labSurfaces[surface.name] - if not surfaceData then - log("Not a Lab, won't Equip: " .. surface.name) - return false - end - - log("Equipping Lab: " .. surface.name) - - Equipment.Place( - surfaceData.equipmentBlueprints[1], - surface, - surfaceData.sandboxForceName - ) - - return true -end - -return Lab diff --git a/blueprint-sandboxes_1.16.4/scripts/migrate.lua b/blueprint-sandboxes_1.16.4/scripts/migrate.lua deleted file mode 100644 index 14a1bd4f..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/migrate.lua +++ /dev/null @@ -1,387 +0,0 @@ -local Migrate = {} - -Migrate.version = 011604 - -function Migrate.Run() - if not global.version then - global.version = 0 - end - - if global.version < Migrate.version then - if global.version < 010003 then Migrate.v1_0_3() end - if global.version < 010100 then Migrate.v1_1_0() end - if global.version < 010401 then Migrate.v1_4_1() end - if global.version < 010500 then Migrate.v1_5_0() end - if global.version < 010600 then Migrate.v1_6_0() end - if global.version < 010700 then Migrate.v1_7_0() end - if global.version < 010703 then Migrate.v1_7_3() end - if global.version < 010704 then Migrate.v1_7_4() end - if global.version < 011000 then Migrate.v1_10_0() end - if global.version < 011001 then Migrate.v1_10_1() end - if global.version < 011101 then Migrate.v1_11_1() end - if global.version < 011103 then Migrate.v1_11_3() end - if global.version < 011500 then Migrate.v1_15_0() end - if global.version < 011604 then Migrate.v1_16_4() end - end - - global.version = Migrate.version -end - -function Migrate.RecreateGuis() - for _, player in pairs(game.players) do - ToggleGUI.Destroy(player) - ToggleGUI.Init(player) - end -end - -function Migrate.v1_0_3() - --[[ - It was discovered that in on_configuration_changed Space Exploration would - "fix" all Tiles for all Zones that it knows of, which causes problems - specifically for the Planetary Sandbox, which initially used Stars. - At this point, we unfortunately have to completely remove those Sandboxes, - which is unavoidable because by the nature of this update we would have - triggered the complete-reset of that Surface anyway. - ]] - - log("Migration 1.0.3 Starting") - - if SpaceExploration.enabled then - local planetaryLabId = 3 - local planetaryLabsOnStars = {} - local playersToKickFromPlanetaryLabs = {} - - for name, surfaceData in pairs(global.seSurfaces) do - if (not surfaceData.orbital) and SpaceExploration.IsStar(name) then - table.insert(planetaryLabsOnStars, { - zoneName = name, - sandboxForceName = surfaceData.sandboxForceName, - }) - end - end - - for index, player in pairs(game.players) do - local playerData = global.players[index] - if playerData.insideSandbox == planetaryLabId - and SpaceExploration.IsStar(player.surface.name) - then - table.insert(playersToKickFromPlanetaryLabs, player) - end - end - - for _, player in pairs(playersToKickFromPlanetaryLabs) do - log("Kicking Player out of Planetary Lab: " .. player.name) - Sandbox.Exit(player) - end - - for _, surfaceData in pairs(planetaryLabsOnStars) do - log("Destroying Planetary Lab inside Star: " .. surfaceData.zoneName) - SpaceExploration.DeleteSandbox( - global.sandboxForces[surfaceData.sandboxForceName], - surfaceData.zoneName - ) - end - end - - log("Migration 1.0.3 Finished") -end - -function Migrate.v1_1_0() - --[[ - A "persistent" Sandbox Inventory was created for each Player. - ]] - - log("Migration 1.1.0 Starting") - - for index, player in pairs(game.players) do - local playerData = global.players[index] - playerData.sandboxInventory = game.create_inventory(#player.get_main_inventory()) - if Sandbox.IsPlayerInsideSandbox(player) then - log("Player inside Sandbox, fully-syncing the inventory.") - Inventory.Persist( - player.get_main_inventory(), - playerData.sandboxInventory - ) - end - end - - log("Migration 1.1.0 Finished") -end - -function Migrate.v1_4_1() - --[[ - The levels for level-based Research wasn't being synchronized. - ]] - - log("Migration 1.4.1 Starting") - - Research.SyncAllForces() - - log("Migration 1.4.1 Finished") -end - -function Migrate.v1_5_0() - --[[ - Bonus Slots for Sandbox Force Inventories were added. - ]] - - log("Migration 1.5.0 Starting") - - Force.SyncAllForces() - - log("Migration 1.5.0 Finished") -end - -function Migrate.v1_6_0() - --[[ - Last-known positions inside Sandboxes were added. - ]] - - log("Migration 1.6.0 Starting") - - for index, _ in pairs(game.players) do - local playerData = global.players[index] - playerData.lastSandboxPositions = {} - end - - log("Migration 1.6.0 Finished") -end - -function Migrate.v1_7_0() - --[[ - Configurable-per-Sandbox daytime was added. - ]] - - log("Migration 1.7.0 Starting") - - for surfaceName, _ in pairs(global.labSurfaces) do - local surface = game.surfaces[surfaceName] - if surface then - surface.always_day = false - surface.freeze_daytime = true - surface.daytime = 0.95 - global.labSurfaces[surfaceName].daytime = 0.95 - end - end - - for surfaceName, _ in pairs(global.seSurfaces) do - local surface = game.surfaces[surfaceName] - if surface then - surface.always_day = false - surface.freeze_daytime = true - surface.daytime = 0.95 - global.seSurfaces[surfaceName].daytime = 0.95 - end - end - - Migrate.RecreateGuis() - - log("Migration 1.7.0 Finished") -end - -function Migrate.v1_7_3() - --[[ - The daylight portrait icon had the same name as the Reset Button. - ]] - - log("Migration 1.7.3 Starting") - - Migrate.RecreateGuis() - - log("Migration 1.7.3 Finished") -end - -function Migrate.v1_7_4() - --[[ - The 1.7.3 migration wasn't correctly applied to 1.7.x - Allow-all-Tech was incorrectly applying the existing Force's bonuses - ]] - - Migrate.v1_7_3() - - log("Migration 1.7.4 Starting") - - if settings.global[Settings.allowAllTech].value then - game.print("Blueprint Sandboxes Notice: You had the Unlock-all-Technologies " .. - "Setting enabled, but there was a bug pre-1.7.4 that was incorrectly " .. - "overriding some of the bonuses from leveled-research. You should " .. - "disable, then re-enable this setting in order to fix that.") - end - - log("Migration 1.7.4 Finished") -end - -function Migrate.v1_10_0() - --[[ - Internal Queues for Asynchronous Sandbox requests - replace the old find_entities_filtered - ]] - - log("Migration 1.10.0 Starting") - - global.asyncCreateQueue = Queue.New() - global.asyncUpgradeQueue = Queue.New() - global.asyncDestroyQueue = Queue.New() - - for _, surfaceData in pairs(global.labSurfaces) do - surfaceData.hasRequests = nil - end - - for _, surfaceData in pairs(global.seSurfaces) do - surfaceData.hasRequests = nil - end - - log("Migration 1.10.0 Finished") -end - -function Migrate.v1_10_1() - --[[ - Planetary Labs were possibly created within a Player's Home System - and on Planets that could be dangerous. - ]] - - log("Migration 1.10.1 Starting") - - if SpaceExploration.enabled then - local planetaryLabId = 3 - local badPlanetaryLabs = {} - local badPlanetaryLabNames = {} - local playersToKickFromPlanetaryLabs = {} - local zoneIndex = remote.call(SpaceExploration.name, "get_zone_index", {}) - - for name, surfaceData in pairs(global.seSurfaces) do - if not surfaceData.orbital then - local zone = remote.call(SpaceExploration.name, "get_zone_from_name", { - zone_name = name, - }) - local rootZone = SpaceExploration.GetRootZone(zoneIndex, zone) - if SpaceExploration.IsZoneThreatening(zone) - or rootZone.special_type == "homesystem" then - table.insert(badPlanetaryLabs, { - zoneName = name, - sandboxForceName = surfaceData.sandboxForceName, - }) - badPlanetaryLabNames[name] = true - end - end - end - - for index, player in pairs(game.players) do - local playerData = global.players[index] - if playerData.insideSandbox == planetaryLabId - and badPlanetaryLabNames[player.surface.name] - then - table.insert(playersToKickFromPlanetaryLabs, player) - end - end - - for _, player in pairs(playersToKickFromPlanetaryLabs) do - log("Kicking Player out of Planetary Lab: " .. player.name) - Sandbox.Exit(player) - end - - for _, surfaceData in pairs(badPlanetaryLabs) do - log("Destroying Planetary Lab: " .. surfaceData.zoneName) - SpaceExploration.DeleteSandbox( - global.sandboxForces[surfaceData.sandboxForceName], - surfaceData.zoneName - ) - local message = "Unfortunately, your Planetary Sandbox was generated in a " .. - "non-ideal or dangerous location, so it was destroyed. Accessing " .. - "the Sandbox again will create a new one in a safer location." - game.forces[surfaceData.sandboxForceName].print(message) - game.forces[global.sandboxForces[surfaceData.sandboxForceName].forceName].print(message) - end - end - - log("Migration 1.10.1 Finished") -end - -function Migrate.v1_11_1() - --[[ - dangOreus was applying to Labs and causing significant lag - ]] - - log("Migration 1.11.1 Starting") - - if remote.interfaces["dangOreus"] then - for labName, _ in pairs(global.labSurfaces) do - pcall(remote.call, "dangOreus", "toggle", labName) - end - end - - log("Migration 1.11.1 Finished") -end - -function Migrate.v1_11_3_surface(surfaceName) - local surface = game.surfaces[surfaceName] - if not surface then - return - end - - local entitiesToSwap = surface.find_entities_filtered({ name = Illusion.realNameFilters, }) - for _, entity in pairs(entitiesToSwap) do - Illusion.ReplaceIfNecessary(entity) - end - - local ghostsToSwap = surface.find_entities_filtered({ ghost_name = Illusion.realNameFilters, }) - for _, entity in pairs(ghostsToSwap) do - Illusion.ReplaceIfNecessary(entity) - end -end - -function Migrate.v1_11_3() - --[[ - 1.11.0 did not include a migration of real-to-illusion Entities, - but it was found that some older Entities combined with Space Exploration 0.6 - could cause a crash. - ]] - - log("Migration 1.11.3 Starting") - - for surfaceName, _ in pairs(global.labSurfaces) do - Migrate.v1_11_3_surface(surfaceName) - end - - for surfaceName, _ in pairs(global.seSurfaces) do - Migrate.v1_11_3_surface(surfaceName) - end - - log("Migration 1.11.3 Finished") -end - -function Migrate.v1_15_0() - --[[ - 1.15.0 introduced a default Equipment Inventory for each Sandbox - ]] - - log("Migration 1.15.0 Starting") - - for surfaceName, surfaceData in pairs(global.labSurfaces) do - surfaceData.equipmentBlueprints = Equipment.Init(Lab.equipmentString) - end - - for surfaceName, surfaceData in pairs(global.seSurfaces) do - if (surfaceData.orbital) then - surfaceData.equipmentBlueprints = Equipment.Init(SpaceExploration.orbitalEquipmentString) - else - surfaceData.equipmentBlueprints = Equipment.Init(Lab.equipmentString) - end - end - - log("Migration 1.15.0 Finished") -end - -function Migrate.v1_16_4() - --[[ - 1.16.4 introduced an alternative Equipment placement technique - ]] - - log("Migration 1.16.4 Starting") - - global.equipmentInProgress = {} - - log("Migration 1.16.4 Finished") -end - -return Migrate diff --git a/blueprint-sandboxes_1.16.4/scripts/planner-icons.lua b/blueprint-sandboxes_1.16.4/scripts/planner-icons.lua deleted file mode 100644 index fda96f2d..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/planner-icons.lua +++ /dev/null @@ -1,70 +0,0 @@ -local PlannerIcons = {} - -function PlannerIcons.CreateLayeredIcon(prototype) - local backgroundIconSize = 64 - local overallLayeredIconScale = 0.4 - - local layeredIcons = { - { - icon = BPSB.path .. "/graphics/icon-x64.png", - icon_size = backgroundIconSize, - icon_mipmaps = 3, - tint = { r = 0.75, g = 0.75, b = 0.75, a = 1 }, - }, - } - - local foundIcon = false - if prototype.icons then - foundIcon = true - -- Complex Icons approach (layer but re-scale each) - for _, icon in pairs(prototype.icons) do - local thisIconScale = 1.0 - if icon.scale then - thisIconScale = icon.scale - end - table.insert(layeredIcons, { - icon = icon.icon, - icon_size = icon.icon_size or prototype.icon_size, - tint = icon.tint, - shift = icon.shift, - scale = thisIconScale * overallLayeredIconScale * (backgroundIconSize / (icon.icon_size or prototype.icon_size)), - icon_mipmaps = icon.icon_mipmaps, - }) - end - elseif prototype.icon then - foundIcon = true - -- The simplest Icon approach - table.insert(layeredIcons, { - icon = prototype.icon, - icon_size = prototype.icon_size, - icon_mipmaps = prototype.icon_mipmaps, - scale = overallLayeredIconScale * (backgroundIconSize / prototype.icon_size), - }) - elseif prototype.variants then - foundIcon = true - -- Slightly complex Tile approach - local image = prototype.variants.main[1] - if prototype.variants.material_background then - image = prototype.variants.material_background - end - local thisImageScale = 1.0 - if image.scale then - thisImageScale = image.scale - end - local thisImageSize = (image.size or 1.0) * 32 / thisImageScale - table.insert(layeredIcons, { - icon = image.picture, - icon_size = thisImageSize, - tint = prototype.tint, - scale = thisImageScale * overallLayeredIconScale * (backgroundIconSize / thisImageSize), - }) - end - - if not foundIcon then - log("No icon found for prototype: " .. serpent.block(prototype)) - end - - return layeredIcons -end - -return PlannerIcons diff --git a/blueprint-sandboxes_1.16.4/scripts/queue.lua b/blueprint-sandboxes_1.16.4/scripts/queue.lua deleted file mode 100644 index fa41512a..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/queue.lua +++ /dev/null @@ -1,30 +0,0 @@ --- https://www.lua.org/pil/11.4.html - -local Queue = {} - -function Queue.New() - return { first = 0, last = -1 } -end - -function Queue.Push(list, value) - local last = list.last + 1 - list.last = last - list[last] = value -end - -function Queue.Pop(list) - local first = list.first - if first > list.last then - return nil - end - local value = list[first] - list[first] = nil - list.first = first + 1 - return value -end - -function Queue.Size(list) - return list.last - list.first + 1 -end - -return Queue diff --git a/blueprint-sandboxes_1.16.4/scripts/remote-interface.lua b/blueprint-sandboxes_1.16.4/scripts/remote-interface.lua deleted file mode 100644 index 9f69ff1c..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/remote-interface.lua +++ /dev/null @@ -1,14 +0,0 @@ -remote.add_interface( - "blueprint-sandboxes", - { - space_exploration_delete_surface = function(event) - local surface = game.surfaces[event.surface_index] - if SpaceExploration.IsSandbox(surface) then - return { - allow_delete = false, - message = {"bpsb-messages.space-exploration-delete-sandbox"}, - } - end - end, - } -) diff --git a/blueprint-sandboxes_1.16.4/scripts/research.lua b/blueprint-sandboxes_1.16.4/scripts/research.lua deleted file mode 100644 index ba341457..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/research.lua +++ /dev/null @@ -1,103 +0,0 @@ --- Managing the Research of each Force's Sandboxes -local Research = {} - --- Set a Force's Sandboxes Research equal to that of the Force's (or all research) -function Research.Sync(originalForce, sandboxForce) - if settings.global[Settings.allowAllTech].value then - sandboxForce.research_all_technologies() - log("Researching everything for: " .. sandboxForce.name) - else - for tech, _ in pairs(game.technology_prototypes) do - sandboxForce.technologies[tech].researched = originalForce.technologies[tech].researched - sandboxForce.technologies[tech].level = originalForce.technologies[tech].level - end - log("Copied all Research from: " .. originalForce.name .. " -> " .. sandboxForce.name) - end -end - --- Set a Force's Sandboxes Research Queue equal to that of the Force's -function Research.SyncQueue(originalForce, sandboxForce) - if settings.global[Settings.allowAllTech].value then - sandboxForce.research_queue = nil - log("Emptying Research Queue for: " .. sandboxForce.name) - else - local newQueue = {} - for _, tech in pairs(originalForce.research_queue) do - table.insert(newQueue, tech.name) - end - sandboxForce.research_queue = newQueue - log("Copied Research Queue from: " .. originalForce.name .. " -> " .. sandboxForce.name) - end -end - --- Enable the Infinity Input/Output Recipes -function Research.EnableSandboxSpecificResearch(force) - if global.sandboxForces[force.name].hiddenItemsUnlocked == true then - return - end - log("Unlocking hidden Recipes for: " .. force.name) - - if force.recipes[BPSB.pfx .. "loader"] then - force.recipes[BPSB.pfx .. "loader"].enabled = true - force.recipes[BPSB.pfx .. "fast-loader"].enabled = true - force.recipes[BPSB.pfx .. "express-loader"].enabled = true - end - - force.recipes[BPSB.pfx .. "electric-energy-interface"].enabled = true - force.recipes[BPSB.pfx .. "infinity-chest"].enabled = true - force.recipes[BPSB.pfx .. "infinity-pipe"].enabled = true - - for name, recipe in pairs(force.recipes) do - if Resources.IsResourcePlanner(name) or Tiles.IsTilePlanner(name) then - recipe.enabled = true - end - end - - global.sandboxForces[force.name].hiddenItemsUnlocked = true -end - --- For all Forces with Sandboxes, Sync their Research -function Research.SyncAllForces() - for _, force in pairs(game.forces) do - if not Sandbox.IsSandboxForce(force) then - local sandboxForce = game.forces[Sandbox.NameFromForce(force)] - if sandboxForce then - Research.Sync(force, sandboxForce) - Research.SyncQueue(force, sandboxForce) - end - end - end -end - --- As a Force's Research changes, keep the Force's Sandboxes in-sync -function Research.OnResearched(event) - if not settings.global[Settings.allowAllTech].value then - local force = event.research.force - if not Sandbox.IsSandboxForce(force) then - local sandboxForce = game.forces[Sandbox.NameFromForce(force)] - if sandboxForce then - log("New Research: " .. event.research.name .. " from " .. force.name .. " -> " .. sandboxForce.name) - sandboxForce.technologies[event.research.name].researched = force.technologies[event.research.name].researched - sandboxForce.technologies[event.research.name].level = force.technologies[event.research.name].level - sandboxForce.play_sound { path = "utility/research_completed" } - Research.SyncQueue(force, sandboxForce) - end - end - end -end - --- As a Force's Research Queue changes, show it in the Force's Sandboxes -function Research.OnResearchStarted(event) - if not settings.global[Settings.allowAllTech].value then - local force = event.research.force - if not Sandbox.IsSandboxForce(force) then - local sandboxForce = game.forces[Sandbox.NameFromForce(force)] - if sandboxForce then - log("New Research Queued: " .. event.research.name .. " from " .. force.name .. " -> " .. sandboxForce.name) - Research.SyncQueue(force, sandboxForce) - end - end - end -end - -return Research diff --git a/blueprint-sandboxes_1.16.4/scripts/resources.lua b/blueprint-sandboxes_1.16.4/scripts/resources.lua deleted file mode 100644 index 0986e702..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/resources.lua +++ /dev/null @@ -1,97 +0,0 @@ --- Custom Planners to add/remove Resources -local Resources = {} - -Resources.name = BPSB.pfx .. "sandbox-resources" -Resources.pfx = BPSB.pfx .. "sbr-" -local pfxLength = string.len(Resources.pfx) - -Resources.nameScalar = { default = 1 } -Resources.nameScalar["crude-oil"] = 1 -Resources.nameScalar["mineral-water"] = 5 - -Resources.categoryScalar = { default = 10000 } -Resources.categoryScalar["basic-fluid"] = 1 -Resources.categoryScalar["basic-solid"] = 10000 -Resources.categoryScalar["oil"] = 1 -Resources.categoryScalar["hard-resource"] = 8000 -Resources.categoryScalar["kr-quarry"] = 1500 - --- Whether the Thing is a Resource Planner -function Resources.IsResourcePlanner(name) - return string.sub(name, 1, pfxLength) == Resources.pfx -end - --- Extract the Resource Name from a Resource Planner -function Resources.GetResourceName(name) - return string.sub(name, pfxLength + 1) -end - --- Determine the amount to spawn for a Resource Planner -function Resources.GetResourceAmount(resourceName) - local resourcePrototype = game.entity_prototypes[resourceName] - - local nameScalar = Resources.nameScalar[resourceName] or Resources.nameScalar["default"] - local categoryScalar = Resources.categoryScalar[resourcePrototype.resource_category] or Resources.categoryScalar["default"] - - local richness = 1 - local autoplace_controls = game.surfaces["nauvis"].map_gen_settings.autoplace_controls[resourceName] - if autoplace_controls then - richness = autoplace_controls.richness - if richness < 0 then richness = 1 - else richness = math.max(0.5, richness) - end - end - - local normal = resourcePrototype.normal_resource_amount - local minimum = resourcePrototype.minimum_resource_amount - - return nameScalar * categoryScalar * richness * math.max(normal, minimum) -end - --- Determine how often to spawn for a Resource Planner -function Resources.GetResourceSpacing(resourceName) - local box = game.entity_prototypes[resourceName].map_generator_bounding_box - return { - x = math.max(1, math.ceil(box.right_bottom.x - box.left_top.x)), - y = math.max(1, math.ceil(box.right_bottom.y - box.left_top.y)), - } -end - --- Add Resources when a Resource Planner is used -function Resources.OnAreaSelectedForAdd(event) - local resourceName = Resources.GetResourceName(event.item) - local density = Resources.GetResourceAmount(resourceName) - local spacing = Resources.GetResourceSpacing(resourceName) - for x = event.area.left_top.x, event.area.right_bottom.x, spacing.x do - for y = event.area.left_top.y, event.area.right_bottom.y, spacing.y do - event.surface.create_entity({ - name = resourceName, - position = { x = x, y = y }, - amount = density, - raise_built = true, - }) - end - end -end - --- Removed Resources when a Resource Planner is used -function Resources.OnAreaSelectedForRemove(event) - for _, entity in pairs(event.entities) do - entity.destroy({ raise_destroy = true }) - end -end - --- Add/Remove Resources when a Resource Planner is used -function Resources.OnAreaSelected(event, add) - if (Lab.IsLab(event.surface) or SpaceExploration.IsSandbox(event.surface)) - and Resources.IsResourcePlanner(event.item) - then - if add then - Resources.OnAreaSelectedForAdd(event) - else - Resources.OnAreaSelectedForRemove(event) - end - end -end - -return Resources diff --git a/blueprint-sandboxes_1.16.4/scripts/sandbox.lua b/blueprint-sandboxes_1.16.4/scripts/sandbox.lua deleted file mode 100644 index 6c7cbff7..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/sandbox.lua +++ /dev/null @@ -1,393 +0,0 @@ --- Managing multiple Sandboxes for each Player/Force -local Sandbox = {} - -Sandbox.pfx = BPSB.pfx .. "sb-" - --- GUI Dropdown items for Sandboxes -Sandbox.choices = { - { "sandbox." .. Sandbox.pfx .. "player-lab" }, - { "sandbox." .. Sandbox.pfx .. "force-lab" }, - { "sandbox." .. Sandbox.pfx .. "force-lab-space-exploration" }, - { "sandbox." .. Sandbox.pfx .. "force-orbit-space-exploration" }, -} -if not SpaceExploration.enabled then - Sandbox.choices[3] = { "sandbox." .. Sandbox.pfx .. "space-exploration-disabled" } - Sandbox.choices[4] = { "sandbox." .. Sandbox.pfx .. "space-exploration-disabled" } -end - --- Constants to represent indexes for Sandbox.choices -Sandbox.player = 1 -Sandbox.force = 2 -Sandbox.forcePlanetaryLab = 3 -Sandbox.forceOrbitalSandbox = 4 - --- A unique per-Force Sandbox Name -function Sandbox.NameFromForce(force) - return Sandbox.pfx .. "f-" .. force.name -end - --- Whether the Force is specific to Blueprint Sandboxes -function Sandbox.IsSandboxForce(force) - -- return string.sub(force.name, 1, pfxLength) == Sandbox.pfx - return not not global.sandboxForces[force.name] -end - --- Whether something is any type of Sandbox -function Sandbox.IsSandbox(thingWithName) - return Lab.IsLab(thingWithName) - or SpaceExploration.IsSandbox(thingWithName) -end - --- Whether something is any type of Sandbox -function Sandbox.IsPlayerInsideSandbox(player) - return global.players[player.index].preSandboxPosition ~= nil - and Sandbox.IsSandbox(player.surface) -end - --- Whether a Sandbox choice is allowed -function Sandbox.IsEnabled(selectedSandbox) - if selectedSandbox == Sandbox.player then - return true - elseif selectedSandbox == Sandbox.force then - return true - elseif selectedSandbox == Sandbox.forceOrbitalSandbox then - return SpaceExploration.enabled - elseif selectedSandbox == Sandbox.forcePlanetaryLab then - return SpaceExploration.enabled - else - log("Impossible Choice for Sandbox: " .. selectedSandbox) - return false - end -end - --- Which Surface Name to use for this Player based on their Selected Sandbox -function Sandbox.GetOrCreateSandboxSurface(player, sandboxForce) - local playerData = global.players[player.index] - - if playerData.selectedSandbox == Sandbox.player - then - return Lab.GetOrCreateSurface(playerData.labName, sandboxForce) - elseif playerData.selectedSandbox == Sandbox.force - then - return Lab.GetOrCreateSurface(global.sandboxForces[sandboxForce.name].labName, sandboxForce) - elseif SpaceExploration.enabled - and playerData.selectedSandbox == Sandbox.forceOrbitalSandbox - then - return SpaceExploration.GetOrCreateOrbitalSurfaceForForce(player, sandboxForce) - elseif SpaceExploration.enabled - and playerData.selectedSandbox == Sandbox.forcePlanetaryLab - then - return SpaceExploration.GetOrCreatePlanetarySurfaceForForce(player, sandboxForce) - else - log("Impossible Choice for Sandbox: " .. playerData.selectedSandbox) - return - end -end - --- Convert the Player to God-mode, save their previous State, and enter Selected Sandbox -function Sandbox.Enter(player) - local playerData = global.players[player.index] - - if Sandbox.IsPlayerInsideSandbox(player) then - log("Already inside Sandbox: " .. playerData.insideSandbox) - return - end - - if player.stashed_controller_type - and player.stashed_controller_type ~= defines.controllers.editor - then - player.print("You are already detached from your Character, so you cannot enter a Sandbox. Return to your Character first.") - return - end - - local sandboxForce = Force.GetOrCreateSandboxForce(game.forces[playerData.forceName]) - local surface = Sandbox.GetOrCreateSandboxSurface(player, sandboxForce) - if surface == nil then - log("Completely Unknown Sandbox Surface, cannot use") - return - end - log("Entering Sandbox: " .. surface.name) - - -- Store some temporary State to use once inside the Sandbox - local inputBlueprint = Inventory.GetCursorBlueprintString(player) - - --[[ - Otherwise, there is a Factorio "bug" that can destroy what was in the Cursor. - It seems to happen with something from the Inventory being in the Stack, then - entering the Sandbox, then copying something from the Sandbox, then exiting the - Sandbox. At this point, the Cursor Stack is still fine and valid, but it seems - to have lost its original location, so "clearing" it out will destroy it. - ]] - player.clear_cursor() - - -- Store the Player's previous State (that must be referenced to Exit) - playerData.insideSandbox = playerData.selectedSandbox - playerData.preSandboxForceName = player.force.name - playerData.preSandboxCharacter = player.character - playerData.preSandboxController = player.controller_type - playerData.preSandboxPosition = player.position - playerData.preSandboxSurfaceName = player.surface.name - playerData.preSandboxCheatMode = player.cheat_mode - - -- Sometimes a Player has a volatile Inventory that needs restoring later - if Inventory.ShouldPersist(playerData.preSandboxController) then - playerData.preSandboxInventory = Inventory.Persist( - player.get_main_inventory(), - playerData.preSandboxInventory - ) - else - if playerData.preSandboxInventory then - playerData.preSandboxInventory.destroy() - playerData.preSandboxInventory = nil - end - end - - -- Harmlessly detach the Player from their Character - player.set_controller({ type = defines.controllers.god }) - - -- Harmlessly teleport their God-body to the Sandbox - player.teleport(playerData.lastSandboxPositions[surface.name] or { 0, 0 }, surface) - - -- Swap to the new Force; it has different bonuses! - player.force = sandboxForce - - -- Since the Sandbox might have Cheat Mode enabled, EditorExtensions won't receive an Event for this otherwise - if player.cheat_mode then - player.cheat_mode = false - end - - -- Enable Cheat mode _afterwards_, since EditorExtensions will alter the Force (now the Sandbox Force) based on this - player.cheat_mode = true - - -- Harmlessly ensure our own Recipes are enabled - -- TODO: It's unclear why this must happen _after_ the above code - Research.EnableSandboxSpecificResearch(sandboxForce) - - -- Now that everything has taken effect, restoring the Inventory is safe - Inventory.Restore( - playerData.sandboxInventory, - player.get_main_inventory() - ) - - -- Then, restore the Blueprint in the Cursor - if inputBlueprint then - player.cursor_stack.import_stack(inputBlueprint) - player.cursor_stack_temporary = true - end -end - --- Convert the Player to their previous State, and leave Selected Sandbox -function Sandbox.Exit(player) - local playerData = global.players[player.index] - - if not Sandbox.IsPlayerInsideSandbox(player) then - log("Already outside Sandbox") - return - end - log("Exiting Sandbox: " .. player.surface.name) - - -- Store some temporary State to use once outside the Sandbox - local outputBlueprint = Inventory.GetCursorBlueprintString(player) - - -- Remember where they left off - playerData.lastSandboxPositions[player.surface.name] = player.position - - -- Attach the Player back to their original Character (also changes force) - Sandbox.RecoverPlayerCharacter(player, playerData) - - -- Swap to their original Force (in case they're not sent back to a Character) - player.force = playerData.preSandboxForceName - - -- Toggle Cheat mode _afterwards_, just in case EditorExtensions ever listens to this Event - player.cheat_mode = playerData.preSandboxCheatMode or false - - -- Sometimes a Player is already a God (like in Sandbox), and their Inventory wasn't on a body - if Inventory.ShouldPersist(playerData.preSandboxController) then - Inventory.Restore( - playerData.preSandboxInventory, - player.get_main_inventory() - ) - end - - -- Reset the Player's previous State - playerData.insideSandbox = nil - playerData.preSandboxForceName = nil - playerData.preSandboxCharacter = nil - playerData.preSandboxController = nil - playerData.preSandboxPosition = nil - playerData.preSandboxSurfaceName = nil - playerData.preSandboxCheatMode = nil - if playerData.preSandboxInventory then - playerData.preSandboxInventory.destroy() - playerData.preSandboxInventory = nil - end - - -- Potentially, restore the Blueprint in the Cursor - if outputBlueprint and Inventory.WasCursorSafelyCleared(player) then - player.cursor_stack.import_stack(outputBlueprint) - player.cursor_stack_temporary = true - end -end - --- Ensure the Player has a Character to go back to -function Sandbox.RecoverPlayerCharacter(player, playerData) - -- Typical situation, there wasn't a Character, or there was a valid one - if (not playerData.preSandboxCharacter) or playerData.preSandboxCharacter.valid then - player.teleport(playerData.preSandboxPosition, playerData.preSandboxSurfaceName) - player.set_controller({ - type = playerData.preSandboxController, - character = playerData.preSandboxCharacter - }) - return - end - - -- Space Exploration deletes and recreates Characters; check that out next - local fromSpaceExploration = SpaceExploration.GetPlayerCharacter(player) - if fromSpaceExploration and fromSpaceExploration.valid then - player.teleport(fromSpaceExploration.position, fromSpaceExploration.surface.name) - player.set_controller({ - type = defines.controllers.character, - character = fromSpaceExploration - }) - return - end - - -- We might at-least have a Surface to go back to - if playerData.preSandboxSurfaceName and game.surfaces[playerData.preSandboxSurfaceName] then - player.print("Unfortunately, your previous Character was lost, so it had to be recreated.") - player.teleport(playerData.preSandboxPosition, playerData.preSandboxSurfaceName) - local recreated = game.surfaces[playerData.preSandboxSurfaceName].create_entity { - name = "character", - position = playerData.preSandboxPosition, - force = playerData.preSandboxForceName, - raise_built = true, - } - player.set_controller({ - type = playerData.preSandboxController, - character = recreated - }) - return - end - - -- Otherwise, we need a completely clean slate :( - player.print("Unfortunately, your previous Character was completely lost, so you must start anew.") - player.teleport({ 0, 0 }, "nauvis") - local recreated = game.surfaces["nauvis"].create_entity { - name = "character", - position = { 0, 0 }, - force = playerData.preSandboxForceName, - raise_built = true, - } - player.set_controller({ - type = playerData.preSandboxController, - character = recreated - }) -end - --- Keep a Player's God-state, but change between Selected Sandboxes -function Sandbox.Transfer(player) - local playerData = global.players[player.index] - - if not Sandbox.IsPlayerInsideSandbox(player) then - log("Outside Sandbox, cannot transfer") - return - end - - local sandboxForce = Force.GetOrCreateSandboxForce(game.forces[playerData.forceName]) - local surface = Sandbox.GetOrCreateSandboxSurface(player, sandboxForce) - if surface == nil then - log("Completely Unknown Sandbox Surface, cannot use") - return - end - - log("Transferring to Sandbox: " .. surface.name) - playerData.lastSandboxPositions[player.surface.name] = player.position - player.teleport(playerData.lastSandboxPositions[surface.name] or { 0, 0 }, surface) - - playerData.insideSandbox = playerData.selectedSandbox -end - --- Update Sandboxes Player if a Player actually changes Forces (outside of this mod) -function Sandbox.OnPlayerForceChanged(player) - local playerData = global.players[player.index] - local force = player.force - if not Sandbox.IsSandboxForce(force) - and playerData.forceName ~= force.name - then - log("Storing changed Player's Force: " .. player.name .. " -> " .. force.name) - playerData.forceName = force.name - - local sandboxForceName = Sandbox.NameFromForce(force) - - playerData.sandboxForceName = sandboxForceName - local labData = global.labSurfaces[playerData.labName] - if labData then - labData.sandboxForceName = sandboxForceName - end - - if Sandbox.IsPlayerInsideSandbox(player) then - player.print("Your Force changed, so you have been removed from your Sandbox") - playerData.preSandboxForceName = force.name - Sandbox.Exit(player) - end - player.print("Your Force changed, so you might have to Reset your Lab") - end -end - --- Determine whether the Player is inside a known Sandbox -function Sandbox.GetSandboxChoiceFor(player, surface) - local playerData = global.players[player.index] - if surface.name == playerData.labName then - return Sandbox.player - elseif surface.name == global.sandboxForces[playerData.sandboxForceName].labName then - return Sandbox.force - elseif surface.name == global.sandboxForces[playerData.sandboxForceName].seOrbitalSandboxZoneName then - return Sandbox.forceOrbitalSandbox - elseif surface.name == global.sandboxForces[playerData.sandboxForceName].sePlanetaryLabZoneName then - return Sandbox.forcePlanetaryLab - elseif Factorissimo.IsFactory(surface) then - local outsideSurface = Factorissimo.GetOutsideSurfaceForFactory( - surface, - player.position - ) - if outsideSurface then - return Sandbox.GetSandboxChoiceFor(player, outsideSurface) - end - end - return nil -end - --- Update whether the Player is inside a known Sandbox -function Sandbox.OnPlayerSurfaceChanged(player) - if Sandbox.IsPlayerInsideSandbox(player) then - global.players[player.index].insideSandbox = Sandbox.GetSandboxChoiceFor(player, player.surface) - end -end - --- Enter, Exit, or Transfer a Player across Sandboxes -function Sandbox.Toggle(player_index) - local player = game.players[player_index] - local playerData = global.players[player.index] - - if Factorissimo.IsFactoryInsideSandbox(player.surface, player.position) then - player.print("You are inside of a Factory, so you cannot change Sandboxes") - return - end - - if not Sandbox.IsEnabled(playerData.selectedSandbox) then - playerData.selectedSandbox = Sandbox.player - end - - if Sandbox.IsPlayerInsideSandbox(player) - and playerData.insideSandbox ~= playerData.selectedSandbox - then - Sandbox.Transfer(player) - elseif Sandbox.IsPlayerInsideSandbox(player) then - Sandbox.Exit(player) - else - SpaceExploration.ExitRemoteView(player) - Sandbox.Enter(player) - end -end - -return Sandbox diff --git a/blueprint-sandboxes_1.16.4/scripts/settings.lua b/blueprint-sandboxes_1.16.4/scripts/settings.lua deleted file mode 100644 index 82a232eb..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/settings.lua +++ /dev/null @@ -1,51 +0,0 @@ -local Settings = {} - -Settings.scanSandboxes = BPSB.pfx .. "scan-all-chunks" -Settings.allowAllTech = BPSB.pfx .. "allow-all-technology" -Settings.onlyAdminsForceReset = BPSB.pfx .. "only-admins-force-reset" -Settings.craftToCursor = BPSB.pfx .. "craft-to-cursor" -Settings.bonusInventorySlots = BPSB.pfx .. "bonus-inventory-slots" -Settings.extraMiningSpeed = BPSB.pfx .. "extra-mining-speed" -Settings.extraLabSpeed = BPSB.pfx .. "extra-lab-speed" -Settings.godAsyncTick = BPSB.pfx .. "god-async-tick" -Settings.godAsyncCreateRequestsPerTick = BPSB.pfx .. "god-async-create-per-tick" -Settings.godAsyncUpgradeRequestsPerTick = BPSB.pfx .. "god-async-upgrade-per-tick" -Settings.godAsyncDeleteRequestsPerTick = BPSB.pfx .. "god-async-delete-per-tick" - -function Settings.SetupScanSandboxes() - if settings.global[Settings.scanSandboxes].value then - script.on_nth_tick(Lab.chartAllLabsTick, God.ChartAllOccupiedSandboxes) - else - script.on_nth_tick(Lab.chartAllLabsTick, nil) - end -end - -function Settings.SetupConditionalHandlers() - Settings.SetupScanSandboxes() - script.on_nth_tick(settings.global[Settings.godAsyncTick].value, God.HandleAllSandboxRequests) -end - -function Settings.OnRuntimeSettingChanged(event) - if event.setting == Settings.scanSandboxes then - Settings.SetupScanSandboxes() - elseif event.setting == Settings.allowAllTech then - Research.SyncAllForces() - elseif event.setting == Settings.onlyAdminsForceReset then - for _, player in pairs(game.players) do - ToggleGUI.Update(player) - end - elseif event.setting == Settings.bonusInventorySlots then - Force.SyncAllForces() - elseif event.setting == Settings.extraMiningSpeed then - Force.SyncAllForces() - elseif event.setting == Settings.extraLabSpeed then - Force.SyncAllForces() - elseif event.setting == Settings.godAsyncTick then - local newValue = settings.global[Settings.godAsyncTick].value - script.on_nth_tick(global.lastSettingForAsyncGodTick, nil) - script.on_nth_tick(newValue, God.HandleAllSandboxRequests) - global.lastSettingForAsyncGodTick = newValue - end -end - -return Settings diff --git a/blueprint-sandboxes_1.16.4/scripts/space-exploration.lua b/blueprint-sandboxes_1.16.4/scripts/space-exploration.lua deleted file mode 100644 index 9a8fb43f..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/space-exploration.lua +++ /dev/null @@ -1,328 +0,0 @@ --- Space Exploration related functionality -local SpaceExploration = {} - -SpaceExploration.name = "space-exploration" -SpaceExploration.enabled = not not remote.interfaces[SpaceExploration.name] - -SpaceExploration.orbitalEquipmentString = "0eNqllt2OgyAQhd9lrqEB2m5bX6XZGLWjS4JoAJt1G999wW5M07T7N94hzDfDzDkJFyjNgL3TNkB2AV111kN2vIDXjS1M+hfGHiEDHbAFBrZo0woNVsHpiqNF14w8xqOriwphYqDtCd8hkxP7kVPqhi+svjO38Wp6ZYA26KDxWtS8GHM7tCW6mOAbDIO+8zGysyl3pAkGI2RcTamqO5D6xb2eAEWstxzqGl3u9UdESLF8DzKtl0za1trGLV69oQ8P8KvtnECttnNLrqdzjyFo2/h0ymHbnTEf4p6JZeIpT82NW8ENOKXuBW2+WndH5+rajs20FOSR+z7elPemCHXnWu6roq47c4J0kSeANRWgqABJBAhiPDU/tQH/n4CkakBSNSCpGpBUDUiiBiRRA5KoAUnTgCBKQBAVIIgCEMT5C9r4BW36gjZ8QZs91f5U91PNT/U+0fpE5xON/yffx5fA/OzKbl57DM7o/AxUe7nZHdTu5aDEfh1fSJ/ZLl9g" - --- Whether the Surface has been taken as a Space Sandbox -function SpaceExploration.IsSandbox(surface) - return SpaceExploration.enabled - and global.seSurfaces[surface.name] -end - --- Whether the Surface has been taken as a Planetary Lab Sandbox -function SpaceExploration.IsPlanetarySandbox(surface) - return SpaceExploration.enabled - and global.seSurfaces[surface.name] - and not global.seSurfaces[surface.name].orbital -end - --- Whether the Zone is Star -function SpaceExploration.IsStar(zoneName) - if not SpaceExploration.enabled then - return false - end - return remote.call(SpaceExploration.name, "get_zone_from_name", { - zone_name = zoneName, - }).type == "star" -end - --- Ask Space Exploration for the Player's current Character -function SpaceExploration.GetPlayerCharacter(player) - if not SpaceExploration.enabled then - return - end - return remote.call(SpaceExploration.name, "get_player_character", { - player = player, - }) -end - --- Whether the Sandbox might have Biters falling -function SpaceExploration.IsZoneThreatening(zone) - return (zone.type == "planet" or zone.type == "moon") - and zone.controls - and zone.controls["se-vitamelange"] - and zone.controls["se-vitamelange"].richness > 0 -end - --- Walk Parent Indexes to find the Root Zone (Star) -function SpaceExploration.GetRootZone(zoneIndex, zone) - local rootZone = zone - while rootZone.parent_index do - rootZone = zoneIndex[rootZone.parent_index] - end - return rootZone -end - --- Chooses a non-home-system Star or Moon for a Force's Space Sandbox, if necessary --- Notably, Star _Orbits_ are "usable" Zones, but not Stars themselves --- In other words, these should be completely safe and invisible outside of this mod! --- Moons, on the other hand, will take a valuable resource away from the player --- We also carefully choose Moons in order to not take away too much from them, --- and to not be too dangerous. -function SpaceExploration.ChooseZoneForForce(player, sandboxForce, type) - if not SpaceExploration.enabled then - return - end - - local zoneIndex = remote.call(SpaceExploration.name, "get_zone_index", {}) - for _, zone in pairs(zoneIndex) do - if zone.type == type - and not zone.is_homeworld - and not zone.ruins - and not zone.glyph - and zone.special_type ~= "homesystem" - and not global.seSurfaces[zone.name] - then - local rootZone = SpaceExploration.GetRootZone(zoneIndex, zone) - if not SpaceExploration.IsZoneThreatening(zone) - and rootZone.special_type ~= "homesystem" - then - log("Choosing SE Zone " .. zone.name .. " as Sandbox for " .. sandboxForce.name) - return zone.name - end - end - end -end - -function SpaceExploration.GetOrCreateSurface(zoneName) - if not SpaceExploration.enabled then - return - end - - return remote.call(SpaceExploration.name, "zone_get_make_surface", { - zone_index = remote.call(SpaceExploration.name, "get_zone_from_name", { - zone_name = zoneName, - }).index, - }) -end - --- Chooses a non-home-system Star for a Force's Space Sandbox, if necessary -function SpaceExploration.GetOrCreatePlanetarySurfaceForForce(player, sandboxForce) - if not SpaceExploration.enabled then - return - end - - local zoneName = global.sandboxForces[sandboxForce.name].sePlanetaryLabZoneName - if zoneName == nil then - zoneName = SpaceExploration.ChooseZoneForForce(player, sandboxForce, "moon") - global.sandboxForces[sandboxForce.name].sePlanetaryLabZoneName = zoneName - global.seSurfaces[zoneName] = { - sandboxForceName = sandboxForce.name, - equipmentBlueprints = Equipment.Init(Lab.equipmentString), - daytime = 0.95, - orbital = false, - } - end - - return SpaceExploration.GetOrCreateSurface(zoneName) -end - --- Chooses a non-home-system Star for a Force's Planetary Sandbox, if necessary -function SpaceExploration.GetOrCreateOrbitalSurfaceForForce(player, sandboxForce) - if not SpaceExploration.enabled then - return - end - - local zoneName = global.sandboxForces[sandboxForce.name].seOrbitalSandboxZoneName - if zoneName == nil then - zoneName = SpaceExploration.ChooseZoneForForce(player, sandboxForce, "star") - global.sandboxForces[sandboxForce.name].seOrbitalSandboxZoneName = zoneName - global.seSurfaces[zoneName] = { - sandboxForceName = sandboxForce.name, - equipmentBlueprints = Equipment.Init(SpaceExploration.orbitalEquipmentString), - daytime = 0.95, - orbital = true, - } - end - - return SpaceExploration.GetOrCreateSurface(zoneName) -end - --- Set a Sandbox's Daytime to a specific value -function SpaceExploration.SetDayTime(player, surface, daytime) - if SpaceExploration.IsSandbox(surface) then - surface.freeze_daytime = true - surface.daytime = daytime - global.seSurfaces[surface.name].daytime = daytime - Events.SendDaylightChangedEvent(player.index, surface.name, daytime) - return true - else - return false - end -end - --- Reset the Sandbox's equipment Blueprint for a Surface -function SpaceExploration.ResetEquipmentBlueprint(surface) - if not SpaceExploration.enabled then - return - end - - if SpaceExploration.IsSandbox(surface) then - log("Resetting SE equipment: " .. surface.name) - if global.seSurfaces[surface.name].orbital then - Equipment.Set( - global.seSurfaces[surface.name].equipmentBlueprints, - SpaceExploration.orbitalEquipmentString - ) - else - Equipment.Set( - global.seSurfaces[surface.name].equipmentBlueprints, - Lab.equipmentString - ) - end - surface.print("The equipment Blueprint for this Sandbox has been reset") - return true - else - log("Not a SE Sandbox, won't Reset equipment: " .. surface.name) - return false - end -end - --- Set the Sandbox's equipment Blueprint for a Surface -function SpaceExploration.SetEquipmentBlueprint(surface, equipmentString) - if not SpaceExploration.enabled then - return - end - - if SpaceExploration.IsSandbox(surface) then - log("Setting SE equipment: " .. surface.name) - Equipment.Set( - global.seSurfaces[surface.name].equipmentBlueprints, - equipmentString - ) - surface.print("The equipment Blueprint for this Sandbox has been changed") - return true - else - log("Not a SE Sandbox, won't Set equipment: " .. surface.name) - return false - end -end - --- Reset the Space Sandbox a Player is currently in -function SpaceExploration.Reset(player) - if not SpaceExploration.enabled then - return - end - - if SpaceExploration.IsSandbox(player.surface) then - log("Resetting SE Sandbox: " .. player.surface.name) - player.teleport({ 0, 0 }, player.surface.name) - player.surface.clear(false) - return true - else - log("Not a SE Sandbox, won't Reset: " .. player.surface.name) - return false - end -end - --- Return a Sandbox to the available Zones -function SpaceExploration.PreDeleteSandbox(sandboxForceData, zoneName) - if not SpaceExploration.enabled or not zoneName then - return - end - - if global.seSurfaces[zoneName] then - log("Pre-Deleting SE Sandbox: " .. zoneName) - local equipmentBlueprints = global.seSurfaces[zoneName].equipmentBlueprints - if equipmentBlueprints and equipmentBlueprints.valid() then - equipmentBlueprints.destroy() - end - global.seSurfaces[zoneName] = nil - if sandboxForceData.sePlanetaryLabZoneName == zoneName then - sandboxForceData.sePlanetaryLabZoneName = nil - end - if sandboxForceData.seOrbitalSandboxZoneName == zoneName then - sandboxForceData.seOrbitalSandboxZoneName = nil - end - else - log("Not a SE Sandbox, won't Pre-Delete: " .. zoneName) - end -end - --- Delete a Space Sandbox and return it to the available Zones -function SpaceExploration.DeleteSandbox(sandboxForceData, zoneName) - if not SpaceExploration.enabled or not zoneName then - return - end - - if global.seSurfaces[zoneName] then - SpaceExploration.PreDeleteSandbox(sandboxForceData, zoneName) - log("Deleting SE Sandbox: " .. zoneName) - game.delete_surface(zoneName) - return true - else - log("Not a SE Sandbox, won't Delete: " .. zoneName) - return false - end -end - --- Set some important Surface settings for Space Sandbox -function SpaceExploration.AfterCreate(surface) - if not SpaceExploration.enabled then - return - end - - local surfaceData = global.seSurfaces[surface.name] - if not surfaceData then - log("Not a SE Sandbox, won't handle Creation: " .. surface.name) - return false - end - - log("Handling Creation of SE Sandbox: " .. surface.name) - - surface.freeze_daytime = true - surface.daytime = surfaceData.daytime - surface.show_clouds = false - - if (surfaceData.orbital) then - surface.generate_with_lab_tiles = false - else - surface.generate_with_lab_tiles = true - end - - return true -end - --- Add some helpful initial Entities to a Space Sandbox -function SpaceExploration.Equip(surface) - if not SpaceExploration.enabled then - return - end - - local surfaceData = global.seSurfaces[surface.name] - if not surfaceData then - log("Not a SE Sandbox, won't Equip: " .. surface.name) - return false - end - - log("Equipping SE Sandbox: " .. surface.name) - - if not surfaceData.orbital then - surface.generate_with_lab_tiles = true - end - Equipment.Place( - surfaceData.equipmentBlueprints[1], - surface, - surfaceData.sandboxForceName - ) - - return true -end - ---[[ Ensure that NavSat is not active -NOTE: This was not necessary in SE < 0.5.109 (the NavSat QoL Update) -Now, without this, the Inventory-differences after entering a Sandbox while -in the Navigation Satellite would be persisted, and without any good way -to undo that override. ---]] -function SpaceExploration.ExitRemoteView(player) - if not SpaceExploration.enabled then - return - end - remote.call(SpaceExploration.name, "remote_view_stop", { player = player }) -end - -return SpaceExploration diff --git a/blueprint-sandboxes_1.16.4/scripts/tiles.lua b/blueprint-sandboxes_1.16.4/scripts/tiles.lua deleted file mode 100644 index 136f55f5..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/tiles.lua +++ /dev/null @@ -1,18 +0,0 @@ --- Custom Planners to add/remove Resources -local Tiles = {} - -Tiles.name = BPSB.pfx .. "sandbox-tiles" -Tiles.pfx = BPSB.pfx .. "sbt-" -local pfxLength = string.len(Tiles.pfx) - --- Whether the Thing is a Tile Planner -function Tiles.IsTilePlanner(name) - return string.sub(name, 1, pfxLength) == Tiles.pfx -end - --- Extract the Resource Name from a Tile Planner -function Tiles.GetResourceName(name) - return string.sub(name, pfxLength + 1) -end - -return Tiles diff --git a/blueprint-sandboxes_1.16.4/scripts/toggle-gui.lua b/blueprint-sandboxes_1.16.4/scripts/toggle-gui.lua deleted file mode 100644 index 8ca5949f..00000000 --- a/blueprint-sandboxes_1.16.4/scripts/toggle-gui.lua +++ /dev/null @@ -1,186 +0,0 @@ -local ToggleGUI = {} - -ToggleGUI.name = BPSB.pfx .. "toggle-gui" -ToggleGUI.pfx = ToggleGUI.name .. "-" -ToggleGUI.toggleShortcut = ToggleGUI.pfx .. "sb-toggle-shortcut" -ToggleGUI.selectedSandboxDropdown = ToggleGUI.pfx .. "selected-sandbox-dropdown" -ToggleGUI.resetButton = ToggleGUI.pfx .. "reset-button" -ToggleGUI.daytimeSlider = ToggleGUI.pfx .. "daytime-slider" - -function ToggleGUI.Init(player) - if player.gui.left[ToggleGUI.name] then - return - end - - local frame = player.gui.left.add { - type = "frame", - name = ToggleGUI.name, - caption = { "gui." .. ToggleGUI.name }, - visible = false, - } - - local innerFrame = frame.add { - type = "frame", - name = "innerFrame", - direction = "vertical", - style = "inside_shallow_frame_with_padding", - } - - local topLineFlow = innerFrame.add { - type = "flow", - name = "topLineFlow", - direction = "horizontal", - style = BPSB.pfx .. "centered-horizontal-flow", - } - - topLineFlow.add { - type = "sprite-button", - name = ToggleGUI.resetButton, - tooltip = { "gui-description." .. ToggleGUI.resetButton }, - style = "tool_button", - sprite = "utility/reset_white", - } - - topLineFlow.add { - type = "drop-down", - name = ToggleGUI.selectedSandboxDropdown, - tooltip = { "gui-description." .. ToggleGUI.selectedSandboxDropdown }, - items = Sandbox.choices, - selected_index = global.players[player.index].selectedSandbox, - }.style.horizontally_stretchable = true - - local daylightFlow = innerFrame.add { - type = "flow", - name = "daylightFlow", - direction = "horizontal", - style = BPSB.pfx .. "centered-horizontal-flow", - } - - daylightFlow.add { - type = "sprite", - tooltip = { "gui-description." .. ToggleGUI.daytimeSlider }, - sprite = "utility/select_icon_white", - resize_to_sprite = false, - style = BPSB.pfx .. "sprite-like-tool-button", - } - - daylightFlow.add { - type = "slider", - name = ToggleGUI.daytimeSlider, - value = 0.0, - minimum_value = 0.5, - maximum_value = 0.975, - value_step = 0.025, - style = "notched_slider", - }.style.horizontally_stretchable = true - - ToggleGUI.Update(player) -end - -function ToggleGUI.Destroy(player) - if not player.gui.left[ToggleGUI.name] then - return - end - player.gui.left[ToggleGUI.name].destroy() -end - -function ToggleGUI.FindDescendantByName(instance, name) - for _, child in pairs(instance.children) do - if child.name == name then - return child - end - local found = ToggleGUI.FindDescendantByName(child, name) - if found then return found end - end -end - -function ToggleGUI.FindByName(player, name) - return ToggleGUI.FindDescendantByName(player.gui.left[ToggleGUI.name], name) -end - -function ToggleGUI.Update(player) - if not player.gui.left[ToggleGUI.name] then - return - end - - ToggleGUI.FindByName(player, ToggleGUI.selectedSandboxDropdown).selected_index = global.players[player.index].selectedSandbox - - if Sandbox.IsPlayerInsideSandbox(player) then - local playerData = global.players[player.index] - - player.set_shortcut_toggled(ToggleGUI.toggleShortcut, true) - player.gui.left[ToggleGUI.name].visible = true - - local resetButton = ToggleGUI.FindByName(player, ToggleGUI.resetButton) - if game.is_multiplayer - and not player.admin - and playerData.selectedSandbox ~= Sandbox.player - and settings.global[Settings.onlyAdminsForceReset].value - then - resetButton.enabled = false - resetButton.tooltip = { "gui-description." .. ToggleGUI.resetButton .. "-only-admins" } - else - resetButton.enabled = true - resetButton.tooltip = { "gui-description." .. ToggleGUI.resetButton } - end - - ToggleGUI.FindByName(player, ToggleGUI.daytimeSlider).slider_value = player.surface.daytime - else - player.set_shortcut_toggled(ToggleGUI.toggleShortcut, false) - player.gui.left[ToggleGUI.name].visible = false - ToggleGUI.FindByName(player, ToggleGUI.resetButton).enabled = false - end -end - -function ToggleGUI.OnGuiValueChanged(event) - local player = game.players[event.player_index] - if event.element.name == ToggleGUI.daytimeSlider then - local daytime = event.element.slider_value - return Lab.SetDayTime(player, player.surface, daytime) - or SpaceExploration.SetDayTime(player, player.surface, daytime) - end -end - -function ToggleGUI.OnGuiDropdown(event) - local player = game.players[event.player_index] - if event.element.name == ToggleGUI.selectedSandboxDropdown then - local choice = event.element.selected_index - if Sandbox.IsEnabled(choice) then - global.players[player.index].selectedSandbox = event.element.selected_index - Sandbox.Toggle(event.player_index) - else - player.print("That Sandbox is not possible.") - event.element.selected_index = global.players[player.index].selectedSandbox - ToggleGUI.Update(player) - end - end -end - -function ToggleGUI.OnGuiClick(event) - local player = game.players[event.player_index] - if event.element.name == ToggleGUI.toggleShortcut then - Sandbox.Toggle(event.player_index) - elseif event.element.name == ToggleGUI.resetButton then - if event.shift then - return Lab.ResetEquipmentBlueprint(player.surface) - or SpaceExploration.ResetEquipmentBlueprint(player.surface) - else - local blueprintString = Inventory.GetCursorBlueprintString(player) - if blueprintString then - return Lab.SetEquipmentBlueprint(player.surface, blueprintString) - or SpaceExploration.SetEquipmentBlueprint(player.surface, blueprintString) - else - return Lab.Reset(player) - or SpaceExploration.Reset(player) - end - end - end -end - -function ToggleGUI.OnToggleShortcut(event) - if (event.input_name or event.prototype_name) == ToggleGUI.toggleShortcut then - Sandbox.Toggle(event.player_index) - end -end - -return ToggleGUI diff --git a/blueprint-sandboxes_1.16.4/settings.lua b/blueprint-sandboxes_1.16.4/settings.lua deleted file mode 100644 index 6a4be4a8..00000000 --- a/blueprint-sandboxes_1.16.4/settings.lua +++ /dev/null @@ -1,96 +0,0 @@ -BPSB = require("scripts/bpsb") -Settings = require("scripts/settings") - -data:extend({ - { - type = "bool-setting", - name = Settings.allowAllTech, - setting_type = "runtime-global", - order = "a[common]-a", - default_value = false, - }, - { - type = "bool-setting", - name = Settings.onlyAdminsForceReset, - setting_type = "runtime-global", - order = "a[common]-b", - default_value = false, - }, - { - type = "bool-setting", - name = Settings.scanSandboxes, - setting_type = "runtime-global", - order = "a[common]-c", - default_value = false, - }, - { - type = "int-setting", - name = Settings.bonusInventorySlots, - setting_type = "runtime-global", - order = "a[common]-d", - default_value = 30, - minimum_value = 0, - maximum_value = 300, - }, - { - type = "int-setting", - name = Settings.extraMiningSpeed, - setting_type = "runtime-global", - order = "a[common]-e", - default_value = 1000000000, - minimum_value = 0, - maximum_value = 1000000000, - }, - { - type = "double-setting", - name = Settings.extraLabSpeed, - setting_type = "runtime-global", - order = "a[common]-f", - default_value = -0.999, - minimum_value = -0.999, - maximum_value = 10.0, - }, - { - type = "bool-setting", - name = Settings.craftToCursor, - setting_type = "runtime-per-user", - order = "a[player]-a", - default_value = true, - }, - { - type = "int-setting", - name = Settings.godAsyncTick, - setting_type = "runtime-global", - order = "b[god]-a", - default_value = 15, - minimum_value = 1, - maximum_value = 120, - }, - { - type = "int-setting", - name = Settings.godAsyncCreateRequestsPerTick, - setting_type = "runtime-global", - order = "b[god]-b", - default_value = 0, - minimum_value = 0, - maximum_value = 10000, - }, - { - type = "int-setting", - name = Settings.godAsyncUpgradeRequestsPerTick, - setting_type = "runtime-global", - order = "b[god]-c", - default_value = 0, - minimum_value = 0, - maximum_value = 10000, - }, - { - type = "int-setting", - name = Settings.godAsyncDeleteRequestsPerTick, - setting_type = "runtime-global", - order = "b[god]-d", - default_value = 0, - minimum_value = 0, - maximum_value = 10000, - }, -}) diff --git a/blueprint-sandboxes_1.16.4/thumbnail.png b/blueprint-sandboxes_1.16.4/thumbnail.png deleted file mode 100644 index f30292c6..00000000 Binary files a/blueprint-sandboxes_1.16.4/thumbnail.png and /dev/null differ diff --git a/blueprint_flip_and_turn_101.8.6/autowarning.lua b/blueprint_flip_and_turn/autowarning.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/autowarning.lua rename to blueprint_flip_and_turn/autowarning.lua diff --git a/blueprint_flip_and_turn_101.8.6/baseversion.lua b/blueprint_flip_and_turn/baseversion.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/baseversion.lua rename to blueprint_flip_and_turn/baseversion.lua diff --git a/blueprint_flip_and_turn_101.8.6/changelog.txt b/blueprint_flip_and_turn/changelog.txt similarity index 100% rename from blueprint_flip_and_turn_101.8.6/changelog.txt rename to blueprint_flip_and_turn/changelog.txt diff --git a/blueprint_flip_and_turn_101.8.6/control.lua b/blueprint_flip_and_turn/control.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/control.lua rename to blueprint_flip_and_turn/control.lua diff --git a/blueprint_flip_and_turn_101.8.6/data.lua b/blueprint_flip_and_turn/data.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/data.lua rename to blueprint_flip_and_turn/data.lua diff --git a/blueprint_flip_and_turn_101.8.6/flip-data.lua b/blueprint_flip_and_turn/flip-data.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/flip-data.lua rename to blueprint_flip_and_turn/flip-data.lua diff --git a/blueprint_flip_and_turn_101.8.6/get_user_setting.lua b/blueprint_flip_and_turn/get_user_setting.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/get_user_setting.lua rename to blueprint_flip_and_turn/get_user_setting.lua diff --git a/blueprint_flip_and_turn_101.8.6/graphics/gui.png b/blueprint_flip_and_turn/graphics/gui.png similarity index 100% rename from blueprint_flip_and_turn_101.8.6/graphics/gui.png rename to blueprint_flip_and_turn/graphics/gui.png diff --git a/blueprint_flip_and_turn_101.8.6/graphics/gui3buttons.png b/blueprint_flip_and_turn/graphics/gui3buttons.png similarity index 100% rename from blueprint_flip_and_turn_101.8.6/graphics/gui3buttons.png rename to blueprint_flip_and_turn/graphics/gui3buttons.png diff --git a/blueprint_flip_and_turn_101.8.6/info.json b/blueprint_flip_and_turn/info.json similarity index 100% rename from blueprint_flip_and_turn_101.8.6/info.json rename to blueprint_flip_and_turn/info.json diff --git a/blueprint_flip_and_turn_101.8.6/locale/en/en.cfg b/blueprint_flip_and_turn/locale/en/en.cfg similarity index 100% rename from blueprint_flip_and_turn_101.8.6/locale/en/en.cfg rename to blueprint_flip_and_turn/locale/en/en.cfg diff --git a/blueprint_flip_and_turn_101.8.6/locale/ru/ru.cfg b/blueprint_flip_and_turn/locale/ru/ru.cfg similarity index 100% rename from blueprint_flip_and_turn_101.8.6/locale/ru/ru.cfg rename to blueprint_flip_and_turn/locale/ru/ru.cfg diff --git a/blueprint_flip_and_turn_101.8.6/modwarning.lua b/blueprint_flip_and_turn/modwarning.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/modwarning.lua rename to blueprint_flip_and_turn/modwarning.lua diff --git a/blueprint_flip_and_turn_101.8.6/prototypes/hotkeys.lua b/blueprint_flip_and_turn/prototypes/hotkeys.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/prototypes/hotkeys.lua rename to blueprint_flip_and_turn/prototypes/hotkeys.lua diff --git a/blueprint_flip_and_turn_101.8.6/prototypes/style.lua b/blueprint_flip_and_turn/prototypes/style.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/prototypes/style.lua rename to blueprint_flip_and_turn/prototypes/style.lua diff --git a/blueprint_flip_and_turn_101.8.6/safecall.lua b/blueprint_flip_and_turn/safecall.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/safecall.lua rename to blueprint_flip_and_turn/safecall.lua diff --git a/blueprint_flip_and_turn_101.8.6/settings.lua b/blueprint_flip_and_turn/settings.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/settings.lua rename to blueprint_flip_and_turn/settings.lua diff --git a/blueprint_flip_and_turn_101.8.6/thumbnail.png b/blueprint_flip_and_turn/thumbnail.png similarity index 100% rename from blueprint_flip_and_turn_101.8.6/thumbnail.png rename to blueprint_flip_and_turn/thumbnail.png diff --git a/blueprint_flip_and_turn_101.8.6/walk.lua b/blueprint_flip_and_turn/walk.lua similarity index 100% rename from blueprint_flip_and_turn_101.8.6/walk.lua rename to blueprint_flip_and_turn/walk.lua diff --git a/bobassembly_1.1.6/changelog.txt b/bobassembly/changelog.txt similarity index 100% rename from bobassembly_1.1.6/changelog.txt rename to bobassembly/changelog.txt diff --git a/bobassembly_1.1.6/data-final-fixes.lua b/bobassembly/data-final-fixes.lua similarity index 100% rename from bobassembly_1.1.6/data-final-fixes.lua rename to bobassembly/data-final-fixes.lua diff --git a/bobassembly_1.1.6/data-updates.lua b/bobassembly/data-updates.lua similarity index 100% rename from bobassembly_1.1.6/data-updates.lua rename to bobassembly/data-updates.lua diff --git a/bobassembly_1.1.6/data.lua b/bobassembly/data.lua similarity index 100% rename from bobassembly_1.1.6/data.lua rename to bobassembly/data.lua diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine-4/assembling-machine-4.png b/bobassembly/graphics/entity/assembling-machine-4/assembling-machine-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine-4/assembling-machine-4.png rename to bobassembly/graphics/entity/assembling-machine-4/assembling-machine-4.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-0.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-0.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-0.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-0.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-1-shadow.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-1-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-1-shadow.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-1-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-1.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-1.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-1.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-2-shadow.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-2-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-2-shadow.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-2-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-2.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-2.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-2.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-3-shadow.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-3-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-3-shadow.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-3-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-3.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-3.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-3.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-mask.png b/bobassembly/graphics/entity/assembling-machine/assembling-machine-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/assembling-machine-mask.png rename to bobassembly/graphics/entity/assembling-machine/assembling-machine-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-1-shadow.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-1-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-1-shadow.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-1-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-1.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-1.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-1.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-2-shadow.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-2-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-2-shadow.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-2-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-2.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-2.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-2.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-3-shadow.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-3-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-3-shadow.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-3-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-3.png b/bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/assembling-machine/hr-assembling-machine-3.png rename to bobassembly/graphics/entity/assembling-machine/hr-assembling-machine-3.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-green-patch-mask.png b/bobassembly/graphics/entity/chemical-plant-old/boiling-green-patch-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-green-patch-mask.png rename to bobassembly/graphics/entity/chemical-plant-old/boiling-green-patch-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-green-patch.png b/bobassembly/graphics/entity/chemical-plant-old/boiling-green-patch.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-green-patch.png rename to bobassembly/graphics/entity/chemical-plant-old/boiling-green-patch.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-window-green-patch.png b/bobassembly/graphics/entity/chemical-plant-old/boiling-window-green-patch.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/boiling-window-green-patch.png rename to bobassembly/graphics/entity/chemical-plant-old/boiling-window-green-patch.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant-mask.png b/bobassembly/graphics/entity/chemical-plant-old/chemical-plant-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant-mask.png rename to bobassembly/graphics/entity/chemical-plant-old/chemical-plant-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant-shadow.png b/bobassembly/graphics/entity/chemical-plant-old/chemical-plant-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant-shadow.png rename to bobassembly/graphics/entity/chemical-plant-old/chemical-plant-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant.png b/bobassembly/graphics/entity/chemical-plant-old/chemical-plant.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/chemical-plant.png rename to bobassembly/graphics/entity/chemical-plant-old/chemical-plant.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-green-patch-mask.png b/bobassembly/graphics/entity/chemical-plant-old/hr-boiling-green-patch-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-green-patch-mask.png rename to bobassembly/graphics/entity/chemical-plant-old/hr-boiling-green-patch-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-green-patch.png b/bobassembly/graphics/entity/chemical-plant-old/hr-boiling-green-patch.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-green-patch.png rename to bobassembly/graphics/entity/chemical-plant-old/hr-boiling-green-patch.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-window-green-patch.png b/bobassembly/graphics/entity/chemical-plant-old/hr-boiling-window-green-patch.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-boiling-window-green-patch.png rename to bobassembly/graphics/entity/chemical-plant-old/hr-boiling-window-green-patch.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-chemical-plant-shadow.png b/bobassembly/graphics/entity/chemical-plant-old/hr-chemical-plant-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-chemical-plant-shadow.png rename to bobassembly/graphics/entity/chemical-plant-old/hr-chemical-plant-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-chemical-plant.png b/bobassembly/graphics/entity/chemical-plant-old/hr-chemical-plant.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant-old/hr-chemical-plant.png rename to bobassembly/graphics/entity/chemical-plant-old/hr-chemical-plant.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-highlights.png b/bobassembly/graphics/entity/chemical-plant/chemical-plant-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-highlights.png rename to bobassembly/graphics/entity/chemical-plant/chemical-plant-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-mask.png b/bobassembly/graphics/entity/chemical-plant/chemical-plant-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-mask.png rename to bobassembly/graphics/entity/chemical-plant/chemical-plant-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-shadow.png b/bobassembly/graphics/entity/chemical-plant/chemical-plant-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant-shadow.png rename to bobassembly/graphics/entity/chemical-plant/chemical-plant-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant.png b/bobassembly/graphics/entity/chemical-plant/chemical-plant.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/chemical-plant.png rename to bobassembly/graphics/entity/chemical-plant/chemical-plant.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-highlights.png b/bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-highlights.png rename to bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-mask.png b/bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-mask.png rename to bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-shadow.png b/bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant-shadow.png rename to bobassembly/graphics/entity/chemical-plant/hr-chemical-plant-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant.png b/bobassembly/graphics/entity/chemical-plant/hr-chemical-plant.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/hr-chemical-plant.png rename to bobassembly/graphics/entity/chemical-plant/hr-chemical-plant.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/chemical-plant-remnants-mask.png b/bobassembly/graphics/entity/chemical-plant/remnants/chemical-plant-remnants-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/chemical-plant-remnants-mask.png rename to bobassembly/graphics/entity/chemical-plant/remnants/chemical-plant-remnants-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/chemical-plant-remnants.png b/bobassembly/graphics/entity/chemical-plant/remnants/chemical-plant-remnants.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/chemical-plant-remnants.png rename to bobassembly/graphics/entity/chemical-plant/remnants/chemical-plant-remnants.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png b/bobassembly/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png rename to bobassembly/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants.png b/bobassembly/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants.png rename to bobassembly/graphics/entity/chemical-plant/remnants/hr-chemical-plant-remnants.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-chemical-mixing-furnace-2.png b/bobassembly/graphics/entity/electric-furnace/electric-chemical-mixing-furnace-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-chemical-mixing-furnace-2.png rename to bobassembly/graphics/entity/electric-furnace/electric-chemical-mixing-furnace-2.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-chemical-mixing-furnace.png b/bobassembly/graphics/entity/electric-furnace/electric-chemical-mixing-furnace.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-chemical-mixing-furnace.png rename to bobassembly/graphics/entity/electric-furnace/electric-chemical-mixing-furnace.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-heater.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace-heater.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-heater.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace-heater.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-mask.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-mask.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-1.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace-propeller-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-1.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace-propeller-1.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-2.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace-propeller-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-2.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace-propeller-2.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-shadow.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace-shadow.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace.png b/bobassembly/graphics/entity/electric-furnace/electric-furnace.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/electric-furnace.png rename to bobassembly/graphics/entity/electric-furnace/electric-furnace.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-heater.png b/bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-heater.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-heater.png rename to bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-heater.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png b/bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png rename to bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png b/bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png rename to bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-shadow.png b/bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-shadow.png rename to bobassembly/graphics/entity/electric-furnace/hr-electric-furnace-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace.png b/bobassembly/graphics/entity/electric-furnace/hr-electric-furnace.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace.png rename to bobassembly/graphics/entity/electric-furnace/hr-electric-furnace.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-base.png b/bobassembly/graphics/entity/electrolyser/electrolyser-2-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-base.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-2-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-highlights.png b/bobassembly/graphics/entity/electrolyser/electrolyser-2-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-highlights.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-2-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-mask.png b/bobassembly/graphics/entity/electrolyser/electrolyser-2-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-mask.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-2-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-shadow.png b/bobassembly/graphics/entity/electrolyser/electrolyser-2-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-2-shadow.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-2-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-base.png b/bobassembly/graphics/entity/electrolyser/electrolyser-3-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-base.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-3-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-highlights.png b/bobassembly/graphics/entity/electrolyser/electrolyser-3-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-highlights.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-3-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-mask.png b/bobassembly/graphics/entity/electrolyser/electrolyser-3-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-mask.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-3-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-shadow.png b/bobassembly/graphics/entity/electrolyser/electrolyser-3-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-3-shadow.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-3-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-base.png b/bobassembly/graphics/entity/electrolyser/electrolyser-4-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-base.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-4-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-highlights.png b/bobassembly/graphics/entity/electrolyser/electrolyser-4-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-highlights.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-4-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-mask.png b/bobassembly/graphics/entity/electrolyser/electrolyser-4-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-mask.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-4-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-shadow.png b/bobassembly/graphics/entity/electrolyser/electrolyser-4-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-4-shadow.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-4-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-base.png b/bobassembly/graphics/entity/electrolyser/electrolyser-5-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-base.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-5-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-highlights.png b/bobassembly/graphics/entity/electrolyser/electrolyser-5-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-highlights.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-5-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-mask.png b/bobassembly/graphics/entity/electrolyser/electrolyser-5-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-mask.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-5-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-shadow.png b/bobassembly/graphics/entity/electrolyser/electrolyser-5-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/electrolyser-5-shadow.png rename to bobassembly/graphics/entity/electrolyser/electrolyser-5-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-base.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-base.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-highlights.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-highlights.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-mask.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-mask.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-shadow.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-2-shadow.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-2-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-base.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-base.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-highlights.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-highlights.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-mask.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-mask.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-shadow.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-3-shadow.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-3-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-base.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-base.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-highlights.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-highlights.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-mask.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-mask.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-shadow.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-4-shadow.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-4-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-base.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-base.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-base.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-base.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-highlights.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-highlights.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-highlights.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-highlights.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-mask.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-mask.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-mask.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-mask.png diff --git a/bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-shadow.png b/bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-shadow.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/electrolyser/hr-electrolyser-5-shadow.png rename to bobassembly/graphics/entity/electrolyser/hr-electrolyser-5-shadow.png diff --git a/bobassembly_1.1.6/graphics/entity/oil-refinery/oil-refinery-fire.png b/bobassembly/graphics/entity/oil-refinery/oil-refinery-fire.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/oil-refinery/oil-refinery-fire.png rename to bobassembly/graphics/entity/oil-refinery/oil-refinery-fire.png diff --git a/bobassembly_1.1.6/graphics/entity/oil-refinery/oil-refinery.png b/bobassembly/graphics/entity/oil-refinery/oil-refinery.png similarity index 100% rename from bobassembly_1.1.6/graphics/entity/oil-refinery/oil-refinery.png rename to bobassembly/graphics/entity/oil-refinery/oil-refinery.png diff --git a/bobassembly_1.1.6/graphics/icons/assembling-machine-1.png b/bobassembly/graphics/icons/assembling-machine-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/assembling-machine-1.png rename to bobassembly/graphics/icons/assembling-machine-1.png diff --git a/bobassembly_1.1.6/graphics/icons/assembling-machine-4.png b/bobassembly/graphics/icons/assembling-machine-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/assembling-machine-4.png rename to bobassembly/graphics/icons/assembling-machine-4.png diff --git a/bobassembly_1.1.6/graphics/icons/assembling-machine-5.png b/bobassembly/graphics/icons/assembling-machine-5.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/assembling-machine-5.png rename to bobassembly/graphics/icons/assembling-machine-5.png diff --git a/bobassembly_1.1.6/graphics/icons/assembling-machine-6.png b/bobassembly/graphics/icons/assembling-machine-6.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/assembling-machine-6.png rename to bobassembly/graphics/icons/assembling-machine-6.png diff --git a/bobassembly_1.1.6/graphics/icons/burner-assembling-machine.png b/bobassembly/graphics/icons/burner-assembling-machine.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/burner-assembling-machine.png rename to bobassembly/graphics/icons/burner-assembling-machine.png diff --git a/bobassembly_1.1.6/graphics/icons/chemical-plant-2.png b/bobassembly/graphics/icons/chemical-plant-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/chemical-plant-2.png rename to bobassembly/graphics/icons/chemical-plant-2.png diff --git a/bobassembly_1.1.6/graphics/icons/chemical-plant-3.png b/bobassembly/graphics/icons/chemical-plant-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/chemical-plant-3.png rename to bobassembly/graphics/icons/chemical-plant-3.png diff --git a/bobassembly_1.1.6/graphics/icons/chemical-plant-4.png b/bobassembly/graphics/icons/chemical-plant-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/chemical-plant-4.png rename to bobassembly/graphics/icons/chemical-plant-4.png diff --git a/bobassembly_1.1.6/graphics/icons/distillery-blue.png b/bobassembly/graphics/icons/distillery-blue.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/distillery-blue.png rename to bobassembly/graphics/icons/distillery-blue.png diff --git a/bobassembly_1.1.6/graphics/icons/distillery-green.png b/bobassembly/graphics/icons/distillery-green.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/distillery-green.png rename to bobassembly/graphics/icons/distillery-green.png diff --git a/bobassembly_1.1.6/graphics/icons/distillery-purple.png b/bobassembly/graphics/icons/distillery-purple.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/distillery-purple.png rename to bobassembly/graphics/icons/distillery-purple.png diff --git a/bobassembly_1.1.6/graphics/icons/distillery-red.png b/bobassembly/graphics/icons/distillery-red.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/distillery-red.png rename to bobassembly/graphics/icons/distillery-red.png diff --git a/bobassembly_1.1.6/graphics/icons/electric-chemical-mixing-furnace-2.png b/bobassembly/graphics/icons/electric-chemical-mixing-furnace-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electric-chemical-mixing-furnace-2.png rename to bobassembly/graphics/icons/electric-chemical-mixing-furnace-2.png diff --git a/bobassembly_1.1.6/graphics/icons/electric-chemical-mixing-furnace.png b/bobassembly/graphics/icons/electric-chemical-mixing-furnace.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electric-chemical-mixing-furnace.png rename to bobassembly/graphics/icons/electric-chemical-mixing-furnace.png diff --git a/bobassembly_1.1.6/graphics/icons/electric-furnace-2.png b/bobassembly/graphics/icons/electric-furnace-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electric-furnace-2.png rename to bobassembly/graphics/icons/electric-furnace-2.png diff --git a/bobassembly_1.1.6/graphics/icons/electric-furnace-3.png b/bobassembly/graphics/icons/electric-furnace-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electric-furnace-3.png rename to bobassembly/graphics/icons/electric-furnace-3.png diff --git a/bobassembly_1.1.6/graphics/icons/electrolyser-2.png b/bobassembly/graphics/icons/electrolyser-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electrolyser-2.png rename to bobassembly/graphics/icons/electrolyser-2.png diff --git a/bobassembly_1.1.6/graphics/icons/electrolyser-3.png b/bobassembly/graphics/icons/electrolyser-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electrolyser-3.png rename to bobassembly/graphics/icons/electrolyser-3.png diff --git a/bobassembly_1.1.6/graphics/icons/electrolyser-4.png b/bobassembly/graphics/icons/electrolyser-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electrolyser-4.png rename to bobassembly/graphics/icons/electrolyser-4.png diff --git a/bobassembly_1.1.6/graphics/icons/electrolyser-5.png b/bobassembly/graphics/icons/electrolyser-5.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electrolyser-5.png rename to bobassembly/graphics/icons/electrolyser-5.png diff --git a/bobassembly_1.1.6/graphics/icons/electronics-machine-1.png b/bobassembly/graphics/icons/electronics-machine-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electronics-machine-1.png rename to bobassembly/graphics/icons/electronics-machine-1.png diff --git a/bobassembly_1.1.6/graphics/icons/electronics-machine-2.png b/bobassembly/graphics/icons/electronics-machine-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electronics-machine-2.png rename to bobassembly/graphics/icons/electronics-machine-2.png diff --git a/bobassembly_1.1.6/graphics/icons/electronics-machine-3.png b/bobassembly/graphics/icons/electronics-machine-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/electronics-machine-3.png rename to bobassembly/graphics/icons/electronics-machine-3.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-2.png b/bobassembly/graphics/icons/new-colors/assembling-machine-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-2.png rename to bobassembly/graphics/icons/new-colors/assembling-machine-2.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-3.png b/bobassembly/graphics/icons/new-colors/assembling-machine-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-3.png rename to bobassembly/graphics/icons/new-colors/assembling-machine-3.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-4.png b/bobassembly/graphics/icons/new-colors/assembling-machine-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-4.png rename to bobassembly/graphics/icons/new-colors/assembling-machine-4.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-5.png b/bobassembly/graphics/icons/new-colors/assembling-machine-5.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/assembling-machine-5.png rename to bobassembly/graphics/icons/new-colors/assembling-machine-5.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/chemical-plant-2.png b/bobassembly/graphics/icons/new-colors/chemical-plant-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/chemical-plant-2.png rename to bobassembly/graphics/icons/new-colors/chemical-plant-2.png diff --git a/bobassembly_1.1.6/graphics/icons/new-colors/electronics-machine-1.png b/bobassembly/graphics/icons/new-colors/electronics-machine-1.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/new-colors/electronics-machine-1.png rename to bobassembly/graphics/icons/new-colors/electronics-machine-1.png diff --git a/bobassembly_1.1.6/graphics/icons/steam-assembling-machine.png b/bobassembly/graphics/icons/steam-assembling-machine.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/steam-assembling-machine.png rename to bobassembly/graphics/icons/steam-assembling-machine.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/alloy-processing.png b/bobassembly/graphics/icons/technology/alloy-processing.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/alloy-processing.png rename to bobassembly/graphics/icons/technology/alloy-processing.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/centrifuge.png b/bobassembly/graphics/icons/technology/centrifuge.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/centrifuge.png rename to bobassembly/graphics/icons/technology/centrifuge.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant-2.png b/bobassembly/graphics/icons/technology/chemical-plant-2.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant-2.png rename to bobassembly/graphics/icons/technology/chemical-plant-2.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant-256.png b/bobassembly/graphics/icons/technology/chemical-plant-256.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant-256.png rename to bobassembly/graphics/icons/technology/chemical-plant-256.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant-3.png b/bobassembly/graphics/icons/technology/chemical-plant-3.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant-3.png rename to bobassembly/graphics/icons/technology/chemical-plant-3.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant-4.png b/bobassembly/graphics/icons/technology/chemical-plant-4.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant-4.png rename to bobassembly/graphics/icons/technology/chemical-plant-4.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant-old.png b/bobassembly/graphics/icons/technology/chemical-plant-old.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant-old.png rename to bobassembly/graphics/icons/technology/chemical-plant-old.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-plant.png b/bobassembly/graphics/icons/technology/chemical-plant.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-plant.png rename to bobassembly/graphics/icons/technology/chemical-plant.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemical-processing.png b/bobassembly/graphics/icons/technology/chemical-processing.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemical-processing.png rename to bobassembly/graphics/icons/technology/chemical-processing.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/chemistry.png b/bobassembly/graphics/icons/technology/chemistry.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/chemistry.png rename to bobassembly/graphics/icons/technology/chemistry.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/distillery-blue.png b/bobassembly/graphics/icons/technology/distillery-blue.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/distillery-blue.png rename to bobassembly/graphics/icons/technology/distillery-blue.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/distillery-green.png b/bobassembly/graphics/icons/technology/distillery-green.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/distillery-green.png rename to bobassembly/graphics/icons/technology/distillery-green.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/distillery-purple.png b/bobassembly/graphics/icons/technology/distillery-purple.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/distillery-purple.png rename to bobassembly/graphics/icons/technology/distillery-purple.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/distillery-red.png b/bobassembly/graphics/icons/technology/distillery-red.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/distillery-red.png rename to bobassembly/graphics/icons/technology/distillery-red.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/electrolyser.png b/bobassembly/graphics/icons/technology/electrolyser.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/electrolyser.png rename to bobassembly/graphics/icons/technology/electrolyser.png diff --git a/bobassembly_1.1.6/graphics/icons/technology/multi-purpose-furnace.png b/bobassembly/graphics/icons/technology/multi-purpose-furnace.png similarity index 100% rename from bobassembly_1.1.6/graphics/icons/technology/multi-purpose-furnace.png rename to bobassembly/graphics/icons/technology/multi-purpose-furnace.png diff --git a/bobassembly/info.json b/bobassembly/info.json new file mode 100644 index 00000000..a68dc6d0 --- /dev/null +++ b/bobassembly/info.json @@ -0,0 +1,16 @@ +{ + "name": "bobassembly", + "version": "1.2.2", + "factorio_version": "1.1", + "title": "Bob's Assembling machines mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0", + "(?) space-exploration" + ], + "description": "Requires Bob's functions library mod\n\nThis mod adds assembling machines 4, 5 and 6, and updates the recipe for assembling machine 3 to fit my progression pattern.\nThe mod also adds higher tiers of Electric furnace, Chemical plant and Oil refinery.\nIt also includes the Electronic assembling machine chain, and additional tiers of machines added by Bob's Metals, Chemicals and Intermediates mod.\n\nDesigned to work best with my full mod pack.\nAll additional machine tiers other than assembling machines can be turned off in the mod options." +} diff --git a/bobassembly_1.1.6/locale/en/bobassembly.cfg b/bobassembly/locale/en/bobassembly.cfg similarity index 100% rename from bobassembly_1.1.6/locale/en/bobassembly.cfg rename to bobassembly/locale/en/bobassembly.cfg diff --git a/bobassembly_1.1.6/migrations/bobassembly_0.18.6.json b/bobassembly/migrations/bobassembly_0.18.6.json similarity index 100% rename from bobassembly_1.1.6/migrations/bobassembly_0.18.6.json rename to bobassembly/migrations/bobassembly_0.18.6.json diff --git a/bobassembly_1.1.6/prototypes/assembly-burner.lua b/bobassembly/prototypes/assembly-burner.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/assembly-burner.lua rename to bobassembly/prototypes/assembly-burner.lua diff --git a/bobassembly_1.1.6/prototypes/assembly-electronics-updates.lua b/bobassembly/prototypes/assembly-electronics-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/assembly-electronics-updates.lua rename to bobassembly/prototypes/assembly-electronics-updates.lua diff --git a/bobassembly_1.1.6/prototypes/assembly-electronics.lua b/bobassembly/prototypes/assembly-electronics.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/assembly-electronics.lua rename to bobassembly/prototypes/assembly-electronics.lua diff --git a/bobassembly_1.1.6/prototypes/assembly-updates.lua b/bobassembly/prototypes/assembly-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/assembly-updates.lua rename to bobassembly/prototypes/assembly-updates.lua diff --git a/bobassembly_1.1.6/prototypes/assembly.lua b/bobassembly/prototypes/assembly.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/assembly.lua rename to bobassembly/prototypes/assembly.lua diff --git a/bobassembly_1.1.6/prototypes/centrifuge-updates.lua b/bobassembly/prototypes/centrifuge-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/centrifuge-updates.lua rename to bobassembly/prototypes/centrifuge-updates.lua diff --git a/bobassembly_1.1.6/prototypes/centrifuge.lua b/bobassembly/prototypes/centrifuge.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/centrifuge.lua rename to bobassembly/prototypes/centrifuge.lua diff --git a/bobassembly_1.1.6/prototypes/chemical-mixing-furnace-updates.lua b/bobassembly/prototypes/chemical-mixing-furnace-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/chemical-mixing-furnace-updates.lua rename to bobassembly/prototypes/chemical-mixing-furnace-updates.lua diff --git a/bobassembly_1.1.6/prototypes/chemical-mixing-furnace.lua b/bobassembly/prototypes/chemical-mixing-furnace.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/chemical-mixing-furnace.lua rename to bobassembly/prototypes/chemical-mixing-furnace.lua diff --git a/bobassembly_1.1.6/prototypes/chemical-plant-updates.lua b/bobassembly/prototypes/chemical-plant-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/chemical-plant-updates.lua rename to bobassembly/prototypes/chemical-plant-updates.lua diff --git a/bobassembly_1.1.6/prototypes/chemical-plant.lua b/bobassembly/prototypes/chemical-plant.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/chemical-plant.lua rename to bobassembly/prototypes/chemical-plant.lua diff --git a/bobassembly_1.1.6/prototypes/distillery-updates.lua b/bobassembly/prototypes/distillery-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/distillery-updates.lua rename to bobassembly/prototypes/distillery-updates.lua diff --git a/bobassembly_1.1.6/prototypes/distillery.lua b/bobassembly/prototypes/distillery.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/distillery.lua rename to bobassembly/prototypes/distillery.lua diff --git a/bobassembly_1.1.6/prototypes/electric-furnace-updates.lua b/bobassembly/prototypes/electric-furnace-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/electric-furnace-updates.lua rename to bobassembly/prototypes/electric-furnace-updates.lua diff --git a/bobassembly_1.1.6/prototypes/electric-furnace.lua b/bobassembly/prototypes/electric-furnace.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/electric-furnace.lua rename to bobassembly/prototypes/electric-furnace.lua diff --git a/bobassembly_1.1.6/prototypes/electrolyser-updates.lua b/bobassembly/prototypes/electrolyser-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/electrolyser-updates.lua rename to bobassembly/prototypes/electrolyser-updates.lua diff --git a/bobassembly_1.1.6/prototypes/electrolyser.lua b/bobassembly/prototypes/electrolyser.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/electrolyser.lua rename to bobassembly/prototypes/electrolyser.lua diff --git a/bobassembly_1.1.6/prototypes/fluid-furnace-updates.lua b/bobassembly/prototypes/fluid-furnace-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/fluid-furnace-updates.lua rename to bobassembly/prototypes/fluid-furnace-updates.lua diff --git a/bobassembly_1.1.6/prototypes/fluid-furnace.lua b/bobassembly/prototypes/fluid-furnace.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/fluid-furnace.lua rename to bobassembly/prototypes/fluid-furnace.lua diff --git a/bobassembly_1.1.6/prototypes/oil-refinery-updates.lua b/bobassembly/prototypes/oil-refinery-updates.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/oil-refinery-updates.lua rename to bobassembly/prototypes/oil-refinery-updates.lua diff --git a/bobassembly_1.1.6/prototypes/oil-refinery.lua b/bobassembly/prototypes/oil-refinery.lua similarity index 100% rename from bobassembly_1.1.6/prototypes/oil-refinery.lua rename to bobassembly/prototypes/oil-refinery.lua diff --git a/bobassembly_1.1.6/settings.lua b/bobassembly/settings.lua similarity index 100% rename from bobassembly_1.1.6/settings.lua rename to bobassembly/settings.lua diff --git a/bobassembly_1.1.6/thumbnail.png b/bobassembly/thumbnail.png similarity index 100% rename from bobassembly_1.1.6/thumbnail.png rename to bobassembly/thumbnail.png diff --git a/bobassembly_1.1.6/info.json b/bobassembly_1.1.6/info.json deleted file mode 100644 index 8dee841d..00000000 --- a/bobassembly_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "bobassembly", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Assembling machines mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6", - "(?) space-exploration" - ], - "description": "Requires Bob's functions library mod\n\nThis mod adds assembling machines 4, 5 and 6, and updates the recipe for assembling machine 3 to fit my progression pattern.\nThe mod also adds higher tiers of Electric furnace, Chemical plant and Oil refinery.\nIt also includes the Electronic assembling machine chain, and additional tiers of machines added by Bob's Metals, Chemicals and Intermediates mod.\n\nDesigned to work best with my full mod pack.\nAll additional machine tiers other than assembling machines can be turned off in the mod options." -} diff --git a/bobelectronics_1.1.6/changelog.txt b/bobelectronics/changelog.txt similarity index 100% rename from bobelectronics_1.1.6/changelog.txt rename to bobelectronics/changelog.txt diff --git a/bobelectronics_1.1.6/data-updates.lua b/bobelectronics/data-updates.lua similarity index 100% rename from bobelectronics_1.1.6/data-updates.lua rename to bobelectronics/data-updates.lua diff --git a/bobelectronics_1.1.6/data.lua b/bobelectronics/data.lua similarity index 100% rename from bobelectronics_1.1.6/data.lua rename to bobelectronics/data.lua diff --git a/bobelectronics_1.1.6/graphics/icons/basic-circuit-board.png b/bobelectronics/graphics/icons/basic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/basic-circuit-board.png rename to bobelectronics/graphics/icons/basic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/basic-electronic-circuit-board.png b/bobelectronics/graphics/icons/basic-electronic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/basic-electronic-circuit-board.png rename to bobelectronics/graphics/icons/basic-electronic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/basic-electronic-components.png b/bobelectronics/graphics/icons/basic-electronic-components.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/basic-electronic-components.png rename to bobelectronics/graphics/icons/basic-electronic-components.png diff --git a/bobelectronics_1.1.6/graphics/icons/bob-oil-processing.png b/bobelectronics/graphics/icons/bob-oil-processing.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/bob-oil-processing.png rename to bobelectronics/graphics/icons/bob-oil-processing.png diff --git a/bobelectronics_1.1.6/graphics/icons/circuit-board.png b/bobelectronics/graphics/icons/circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/circuit-board.png rename to bobelectronics/graphics/icons/circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/coal-cracking.png b/bobelectronics/graphics/icons/coal-cracking.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/coal-cracking.png rename to bobelectronics/graphics/icons/coal-cracking.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/basic-circuit-board.png b/bobelectronics/graphics/icons/colour-coded/basic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/basic-circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/basic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/basic-electronic-circuit-board.png b/bobelectronics/graphics/icons/colour-coded/basic-electronic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/basic-electronic-circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/basic-electronic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/circuit-board.png b/bobelectronics/graphics/icons/colour-coded/circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-circuit-board.png b/bobelectronics/graphics/icons/colour-coded/electronic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/electronic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-logic-board.png b/bobelectronics/graphics/icons/colour-coded/electronic-logic-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-logic-board.png rename to bobelectronics/graphics/icons/colour-coded/electronic-logic-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-processing-board.png b/bobelectronics/graphics/icons/colour-coded/electronic-processing-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/electronic-processing-board.png rename to bobelectronics/graphics/icons/colour-coded/electronic-processing-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/multi-layer-circuit-board.png b/bobelectronics/graphics/icons/colour-coded/multi-layer-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/multi-layer-circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/multi-layer-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/colour-coded/superior-circuit-board.png b/bobelectronics/graphics/icons/colour-coded/superior-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/colour-coded/superior-circuit-board.png rename to bobelectronics/graphics/icons/colour-coded/superior-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/cpu.png b/bobelectronics/graphics/icons/cpu.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/cpu.png rename to bobelectronics/graphics/icons/cpu.png diff --git a/bobelectronics_1.1.6/graphics/icons/electronic-circuit-board.png b/bobelectronics/graphics/icons/electronic-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/electronic-circuit-board.png rename to bobelectronics/graphics/icons/electronic-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/electronic-components.png b/bobelectronics/graphics/icons/electronic-components.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/electronic-components.png rename to bobelectronics/graphics/icons/electronic-components.png diff --git a/bobelectronics_1.1.6/graphics/icons/electronic-logic-board.png b/bobelectronics/graphics/icons/electronic-logic-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/electronic-logic-board.png rename to bobelectronics/graphics/icons/electronic-logic-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/electronic-processing-board.png b/bobelectronics/graphics/icons/electronic-processing-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/electronic-processing-board.png rename to bobelectronics/graphics/icons/electronic-processing-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/ferric-chloride-solution.png b/bobelectronics/graphics/icons/ferric-chloride-solution.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/ferric-chloride-solution.png rename to bobelectronics/graphics/icons/ferric-chloride-solution.png diff --git a/bobelectronics_1.1.6/graphics/icons/fibreglass-board.png b/bobelectronics/graphics/icons/fibreglass-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/fibreglass-board.png rename to bobelectronics/graphics/icons/fibreglass-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/gilded-copper-cable.png b/bobelectronics/graphics/icons/gilded-copper-cable.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/gilded-copper-cable.png rename to bobelectronics/graphics/icons/gilded-copper-cable.png diff --git a/bobelectronics_1.1.6/graphics/icons/insulated-cable.png b/bobelectronics/graphics/icons/insulated-cable.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/insulated-cable.png rename to bobelectronics/graphics/icons/insulated-cable.png diff --git a/bobelectronics_1.1.6/graphics/icons/integrated-electronics.png b/bobelectronics/graphics/icons/integrated-electronics.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/integrated-electronics.png rename to bobelectronics/graphics/icons/integrated-electronics.png diff --git a/bobelectronics_1.1.6/graphics/icons/multi-layer-circuit-board.png b/bobelectronics/graphics/icons/multi-layer-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/multi-layer-circuit-board.png rename to bobelectronics/graphics/icons/multi-layer-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/phenolic-board.png b/bobelectronics/graphics/icons/phenolic-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/phenolic-board.png rename to bobelectronics/graphics/icons/phenolic-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/resin.png b/bobelectronics/graphics/icons/resin.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/resin.png rename to bobelectronics/graphics/icons/resin.png diff --git a/bobelectronics_1.1.6/graphics/icons/rubber.png b/bobelectronics/graphics/icons/rubber.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/rubber.png rename to bobelectronics/graphics/icons/rubber.png diff --git a/bobelectronics_1.1.6/graphics/icons/silicon-wafer.png b/bobelectronics/graphics/icons/silicon-wafer.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/silicon-wafer.png rename to bobelectronics/graphics/icons/silicon-wafer.png diff --git a/bobelectronics_1.1.6/graphics/icons/solder-plate.png b/bobelectronics/graphics/icons/solder-plate.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/solder-plate.png rename to bobelectronics/graphics/icons/solder-plate.png diff --git a/bobelectronics_1.1.6/graphics/icons/solder.png b/bobelectronics/graphics/icons/solder.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/solder.png rename to bobelectronics/graphics/icons/solder.png diff --git a/bobelectronics_1.1.6/graphics/icons/superior-circuit-board.png b/bobelectronics/graphics/icons/superior-circuit-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/superior-circuit-board.png rename to bobelectronics/graphics/icons/superior-circuit-board.png diff --git a/bobelectronics_1.1.6/graphics/icons/synthetic-wood.png b/bobelectronics/graphics/icons/synthetic-wood.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/synthetic-wood.png rename to bobelectronics/graphics/icons/synthetic-wood.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics-2.png b/bobelectronics/graphics/icons/technology/advanced-electronics-2.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics-2.png rename to bobelectronics/graphics/icons/technology/advanced-electronics-2.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics-3.png b/bobelectronics/graphics/icons/technology/advanced-electronics-3.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics-3.png rename to bobelectronics/graphics/icons/technology/advanced-electronics-3.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics.png b/bobelectronics/graphics/icons/technology/advanced-electronics.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/advanced-electronics.png rename to bobelectronics/graphics/icons/technology/advanced-electronics.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/electronics.png b/bobelectronics/graphics/icons/technology/electronics.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/electronics.png rename to bobelectronics/graphics/icons/technology/electronics.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/fluids.png b/bobelectronics/graphics/icons/technology/fluids.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/fluids.png rename to bobelectronics/graphics/icons/technology/fluids.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/intermediates.png b/bobelectronics/graphics/icons/technology/intermediates.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/intermediates.png rename to bobelectronics/graphics/icons/technology/intermediates.png diff --git a/bobelectronics_1.1.6/graphics/icons/technology/resources.png b/bobelectronics/graphics/icons/technology/resources.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/technology/resources.png rename to bobelectronics/graphics/icons/technology/resources.png diff --git a/bobelectronics_1.1.6/graphics/icons/tinned-copper-cable.png b/bobelectronics/graphics/icons/tinned-copper-cable.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/tinned-copper-cable.png rename to bobelectronics/graphics/icons/tinned-copper-cable.png diff --git a/bobelectronics_1.1.6/graphics/icons/wooden-board.png b/bobelectronics/graphics/icons/wooden-board.png similarity index 100% rename from bobelectronics_1.1.6/graphics/icons/wooden-board.png rename to bobelectronics/graphics/icons/wooden-board.png diff --git a/bobelectronics/info.json b/bobelectronics/info.json new file mode 100644 index 00000000..dbf4b437 --- /dev/null +++ b/bobelectronics/info.json @@ -0,0 +1,15 @@ +{ + "name": "bobelectronics", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Electronics mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nThis mod changes the way you build electronics, making the process more realistic.\nFirst you have to assemble electronic components, then combine them into circuit boards.\nUnlike in the base game, each tier of circuit board does NOT require the previous tier.\nIt also adds a 4th tier of electronics used for high end machinery.\n\nAlthough it can work by itself, it is designed to function best with my entire set of mods installed." +} diff --git a/bobelectronics_1.1.6/locale/en/bobelectronics.cfg b/bobelectronics/locale/en/bobelectronics.cfg similarity index 100% rename from bobelectronics_1.1.6/locale/en/bobelectronics.cfg rename to bobelectronics/locale/en/bobelectronics.cfg diff --git a/bobelectronics_1.1.6/migrations/bobelectronics_0.15.0.json b/bobelectronics/migrations/bobelectronics_0.15.0.json similarity index 100% rename from bobelectronics_1.1.6/migrations/bobelectronics_0.15.0.json rename to bobelectronics/migrations/bobelectronics_0.15.0.json diff --git a/bobelectronics_1.1.6/migrations/bobelectronics_0.15.0.lua b/bobelectronics/migrations/bobelectronics_0.15.0.lua similarity index 100% rename from bobelectronics_1.1.6/migrations/bobelectronics_0.15.0.lua rename to bobelectronics/migrations/bobelectronics_0.15.0.lua diff --git a/bobelectronics_1.1.6/prototypes/category.lua b/bobelectronics/prototypes/category.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/category.lua rename to bobelectronics/prototypes/category.lua diff --git a/bobelectronics_1.1.6/prototypes/chemicals.lua b/bobelectronics/prototypes/chemicals.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/chemicals.lua rename to bobelectronics/prototypes/chemicals.lua diff --git a/bobelectronics_1.1.6/prototypes/electronics.lua b/bobelectronics/prototypes/electronics.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/electronics.lua rename to bobelectronics/prototypes/electronics.lua diff --git a/bobelectronics_1.1.6/prototypes/productivity-limitations.lua b/bobelectronics/prototypes/productivity-limitations.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/productivity-limitations.lua rename to bobelectronics/prototypes/productivity-limitations.lua diff --git a/bobelectronics_1.1.6/prototypes/recipe-updates.lua b/bobelectronics/prototypes/recipe-updates.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/recipe-updates.lua rename to bobelectronics/prototypes/recipe-updates.lua diff --git a/bobelectronics_1.1.6/prototypes/resource.lua b/bobelectronics/prototypes/resource.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/resource.lua rename to bobelectronics/prototypes/resource.lua diff --git a/bobelectronics_1.1.6/prototypes/technology-updates.lua b/bobelectronics/prototypes/technology-updates.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/technology-updates.lua rename to bobelectronics/prototypes/technology-updates.lua diff --git a/bobelectronics_1.1.6/prototypes/technology.lua b/bobelectronics/prototypes/technology.lua similarity index 100% rename from bobelectronics_1.1.6/prototypes/technology.lua rename to bobelectronics/prototypes/technology.lua diff --git a/bobelectronics_1.1.6/settings.lua b/bobelectronics/settings.lua similarity index 100% rename from bobelectronics_1.1.6/settings.lua rename to bobelectronics/settings.lua diff --git a/bobelectronics_1.1.6/thumbnail.png b/bobelectronics/thumbnail.png similarity index 100% rename from bobelectronics_1.1.6/thumbnail.png rename to bobelectronics/thumbnail.png diff --git a/bobelectronics_1.1.6/info.json b/bobelectronics_1.1.6/info.json deleted file mode 100644 index 7c9038f9..00000000 --- a/bobelectronics_1.1.6/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bobelectronics", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Electronics mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nThis mod changes the way you build electronics, making the process more realistic.\nFirst you have to assemble electronic components, then combine them into circuit boards.\nUnlike in the base game, each tier of circuit board does NOT require the previous tier.\nIt also adds a 4th tier of electronics used for high end machinery.\n\nAlthough it can work by itself, it is designed to function best with my entire set of mods installed." -} diff --git a/bobenemies/changelog.txt b/bobenemies/changelog.txt new file mode 100644 index 00000000..c7e92f9d --- /dev/null +++ b/bobenemies/changelog.txt @@ -0,0 +1,167 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 22. 12. 2023 + Bugfixes: + - Fixed giant fire spitter changing colour when attacking #137 + - Added Russian locale (thanks Eldrinn-Elantey!) #149 +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 01. 01. 2023 + Bugfixes: + - Fixing accidental global variables #50 +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 06. 06. 2022 + Changes: + - Hid small alien artifact when not used #12 +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 26. 11. 2020 + Changes: + - Removed the old unused fire patch +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 25. 11. 2020 + Info: + - Updated to work with Factorio 1.1 + Changes: + - Added a change for build_base_evolution_requirement when harder enemies spawn sooner is enabled. + - Changed all spitter and worm attacks to use streams (like in base) +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 17. 08. 2020 + Info: + - Updated to 1.0 with no changes +--------------------------------------------------------------------------------------------------- +Version: 0.18.5 +Date: 23. 05. 2020 + Changes: + - Removed Stickers (Damage over Time effects) from Giant Fire/Poison biters. +--------------------------------------------------------------------------------------------------- +Version: 0.18.4 +Date: 24. 04. 2020 + Changes: + - Added a few missing lines to enemies code from base game. + Balancing: + - Increased regular Alien artifact drop rate from Elemental(The ones added by this mod) biters/spitters with all coloured artifacts turned on. (and other minor loot change tweaks) +--------------------------------------------------------------------------------------------------- +Version: 0.18.3 +Date: 22. 03. 2020 + Changes: + - Fixed Alien artifact crafting recipes so that crafting coloured artifacts from basic aren't disabled when you turn off small artifacts. +--------------------------------------------------------------------------------------------------- +Version: 0.18.2 +Date: 12. 03. 2020 + Changes: + - Update poison sticker damage tick. + - Changed small poison cloud to new format. + - Fire and Poison spitters/worms no longer cause Poison/Fire stickers. + - Badass Behemoths cause poison sticker instead of fire sticker. +--------------------------------------------------------------------------------------------------- +Version: 0.18.1 +Date: 28. 01. 2020 + Bugfixes: + - Fixed Worm, Biter and Spitter sounds. +--------------------------------------------------------------------------------------------------- +Version: 0.18.0 +Date: 23. 01. 2020 + Info: + - Updated to work with Factorio 0.18 + Bugfixes: + - Fixed icons (you only see them in map editor mode) + Balancing: + - Reduced pollution_to_join_attack on all enemies. + - Elemental nests will absorb pollution faster +--------------------------------------------------------------------------------------------------- +Version: 0.17.7 +Date: 03. 06. 2019 + Changes: + - Added build_base_evolution_requirement to spawners. + - Giant Biters and above can deal fire/poison sticker too. + Bugfixes: + - Fixed giant worm's hole size. + Features: + - Added damage type Plasma + - Added poison sticker (DOT) to some poison damage weapons + Balancing: + - Adjusted all biter/spitter resistances a little. + - Reduced Liviathan health a fair bit if the health boost option is turned off. (A quater for biters, a fifth for spitters) + - Increased small poison cloud damage rate +--------------------------------------------------------------------------------------------------- +Version: 0.17.6 +Date: 25. 05. 2019 + Bugfixes: + - Fixed odd looking biter and spitter corpses. +--------------------------------------------------------------------------------------------------- +Version: 0.17.5 +Date: 22. 05. 2019 + Changes: + - Changed spawner colours to make them more unique. + - Increased my worm turret prepare distance + Bugfixes: + - Fixed odd looking worms. +--------------------------------------------------------------------------------------------------- +Version: 0.17.4 +Date: 11. 04. 2019 + Bugfixes: + - Fixed crash when health overhaul was enabled and super nest disabled. +--------------------------------------------------------------------------------------------------- +Version: 0.17.3 +Date: 11. 04. 2019 + Changes: + - Changed Bob's spawner enemy spawns to be more in line with new base game. + - Bob's nests spawn further out from the starting area. + - Spitters and Worms will now target their spit to a position ahead of you and not home like 0.17 base game spit projectiles. + Features: + - Added option to choose Leviathan spawn frequency (at Evolution Factor 1.0) + - Added option to allow harder enemies to spawn at a lower Evolution Factor level + - Added option to increase the health of most bob enemies between huge and behemoth + - Added option to add a higher tier spawner +--------------------------------------------------------------------------------------------------- +Version: 0.17.2 +Date: 14. 03. 2019 + Bugfixes: + - fix for 0.17.12 pollution changes +--------------------------------------------------------------------------------------------------- +Version: 0.17.1 +Date: 26. 02. 2019 + Bugfixes: + - Colours fix +--------------------------------------------------------------------------------------------------- +Version: 0.17.0 +Date: 26. 02. 2019 + Info: + - Updated to work with Factorio 0.17 + Changes: + - Change artifacts to enabled by default +--------------------------------------------------------------------------------------------------- +Version: 0.16.0 +Date: 19. 12. 2017 + Info: + - Updated to work with Factorio 0.16 + - perimeter -> radius on AOE damage + - icon_size tags added. +--------------------------------------------------------------------------------------------------- +Version: 0.15.2 +Date: 09. 05. 2017 + Changes: + - removed conditional require: multiplayer checksum fix + - Base game nests should now drop alien artifacts + - full stat rebalance to match base game changes + - Leviathan health multiplied by 10 to make them more of a boss +--------------------------------------------------------------------------------------------------- +Version: 0.15.1 +Date: 28. 04. 2017 + Features: + - Added the ability to use 1 coloured artifact and 5 normal to make 5 coloured artifacts. +--------------------------------------------------------------------------------------------------- +Version: 0.15.0 +Date: 27. 04. 2017 + Info: + - Updated to work with Factorio 0.15 + Changes: + - Had to update 1 base game function call. + - Re-added base game artifacts. + - Artifacts are disabled by default. + Features: + - Added config option for biters/spitters dropping small artifacts. diff --git a/bobenemies_1.1.6/data-updates.lua b/bobenemies/data-updates.lua similarity index 100% rename from bobenemies_1.1.6/data-updates.lua rename to bobenemies/data-updates.lua diff --git a/bobenemies_1.1.6/data.lua b/bobenemies/data.lua similarity index 100% rename from bobenemies_1.1.6/data.lua rename to bobenemies/data.lua diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-blue.png b/bobenemies/graphics/icons/alien-artifact-blue.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-blue.png rename to bobenemies/graphics/icons/alien-artifact-blue.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-green.png b/bobenemies/graphics/icons/alien-artifact-green.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-green.png rename to bobenemies/graphics/icons/alien-artifact-green.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-orange.png b/bobenemies/graphics/icons/alien-artifact-orange.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-orange.png rename to bobenemies/graphics/icons/alien-artifact-orange.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-purple.png b/bobenemies/graphics/icons/alien-artifact-purple.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-purple.png rename to bobenemies/graphics/icons/alien-artifact-purple.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-red.png b/bobenemies/graphics/icons/alien-artifact-red.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-red.png rename to bobenemies/graphics/icons/alien-artifact-red.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact-yellow.png b/bobenemies/graphics/icons/alien-artifact-yellow.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact-yellow.png rename to bobenemies/graphics/icons/alien-artifact-yellow.png diff --git a/bobenemies_1.1.6/graphics/icons/alien-artifact.png b/bobenemies/graphics/icons/alien-artifact.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/alien-artifact.png rename to bobenemies/graphics/icons/alien-artifact.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-blue.png b/bobenemies/graphics/icons/small-alien-artifact-blue.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-blue.png rename to bobenemies/graphics/icons/small-alien-artifact-blue.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-green.png b/bobenemies/graphics/icons/small-alien-artifact-green.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-green.png rename to bobenemies/graphics/icons/small-alien-artifact-green.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-orange.png b/bobenemies/graphics/icons/small-alien-artifact-orange.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-orange.png rename to bobenemies/graphics/icons/small-alien-artifact-orange.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-purple.png b/bobenemies/graphics/icons/small-alien-artifact-purple.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-purple.png rename to bobenemies/graphics/icons/small-alien-artifact-purple.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-red.png b/bobenemies/graphics/icons/small-alien-artifact-red.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-red.png rename to bobenemies/graphics/icons/small-alien-artifact-red.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact-yellow.png b/bobenemies/graphics/icons/small-alien-artifact-yellow.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact-yellow.png rename to bobenemies/graphics/icons/small-alien-artifact-yellow.png diff --git a/bobenemies_1.1.6/graphics/icons/small-alien-artifact.png b/bobenemies/graphics/icons/small-alien-artifact.png similarity index 100% rename from bobenemies_1.1.6/graphics/icons/small-alien-artifact.png rename to bobenemies/graphics/icons/small-alien-artifact.png diff --git a/bobenemies/info.json b/bobenemies/info.json new file mode 100644 index 00000000..30521bac --- /dev/null +++ b/bobenemies/info.json @@ -0,0 +1,14 @@ +{ + "name": "bobenemies", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Enemies mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0" + ], + "description": "Re-adds Alien artifacts to the game.\nAdds 6 different coloured versions of artifacts to the game, each based on a different damage type.\nAdds small versions of artifacts dropped by biters and spitters.\nAdds extra damage type versions of big worm\nAdds a new Elemental nest that spawns the new biters and spitters\nAdds a big piercing biter and big electric spitter\nAdds Huge enemies of Acid and Explosive types\nAdds Giant enemies of Poison and Fire types\nAdds multi-type Titan type enemies\nAdds multi-type Badass behemoth enemies\nAdds multi-type Leviathan enemies, a real end-game threat." +} diff --git a/bobenemies_1.1.6/locale/en/bobenemies.cfg b/bobenemies/locale/en/bobenemies.cfg similarity index 100% rename from bobenemies_1.1.6/locale/en/bobenemies.cfg rename to bobenemies/locale/en/bobenemies.cfg diff --git a/bobenemies/locale/ru/bobenemies.cfg b/bobenemies/locale/ru/bobenemies.cfg new file mode 100644 index 00000000..a8fa09a5 --- /dev/null +++ b/bobenemies/locale/ru/bobenemies.cfg @@ -0,0 +1,104 @@ +[item-name] +alien-artifact=Π˜Π½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-red=ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-orange=ΠžΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-yellow=Π–Ρ‘Π»Ρ‚Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-green=Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-blue=Π‘ΠΈΠ½ΠΈΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +alien-artifact-purple=Π ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» + +small-alien-artifact=ΠœΠ°Π»Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-red=ΠœΠ°Π»Ρ‹ΠΉ красный ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-orange=ΠœΠ°Π»Ρ‹ΠΉ ΠΎΡ€Π°Π½ΠΆΠ΅Π²Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-yellow=ΠœΠ°Π»Ρ‹ΠΉ ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-green=ΠœΠ°Π»Ρ‹ΠΉ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-blue=ΠœΠ°Π»Ρ‹ΠΉ синий ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» +small-alien-artifact-purple=ΠœΠ°Π»Ρ‹ΠΉ Ρ€ΠΎΠ·ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» + + +[entity-name] +bob-biter-spawner=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ ΡƒΠ»Π΅ΠΉ кусак +bob-biter-spawner-corpse=ΠžΡΡ‚Π°Π½ΠΊΠΈ большого ΡƒΠ»ΡŒΡ кусак +bob-spitter-spawner=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ ΡƒΠ»Π΅ΠΉ ΠΏΠ»Π΅Π²Π°ΠΊ +bob-spitter-spawner-corpse=ΠžΡΡ‚Π°Π½ΠΊΠΈ большого ΡƒΠ»ΡŒΡ ΠΏΠ»Π΅Π²Π°ΠΊ +bob-super-spawner=Π‘ΡƒΠΏΠ΅Ρ€-Π£Π»Π΅ΠΉ +bob-super-spawner-corpse=ΠžΡΡ‚Π°Π½ΠΊΠΈ Π‘ΡƒΠΏΠ΅Ρ€-УлСя + +bob-big-piercing-biter=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ‚Π²Π΅Ρ€Π΄ΠΎΠ·ΡƒΠ±Ρ‹ΠΉ кусака +bob-big-piercing-biter-corpse=Π’Ρ€ΡƒΠΏ большого Ρ‚Π²Π΅Ρ€Π΄ΠΎΠ·ΡƒΠ±ΠΎΠ³ΠΎ кусаки +bob-huge-acid-biter=ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ кислотный кусака +bob-huge-acid-biter-corpse=Π’Ρ€ΡƒΠΏ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ кислотного кусаки +bob-huge-explosive-biter=ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ кусака +bob-huge-explosive-biter-corpse=Π’Ρ€ΡƒΠΏ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ кусаки +bob-giant-poison-biter=Гигантский ядовитый кусака +bob-giant-poison-biter-corpse=Π’Ρ€ΡƒΠΏ гигантского ядовитого кусаки +bob-giant-fire-biter=Гигантский ΠΎΠ³Π½Π΅Π½Π½Ρ‹ΠΉ кусака +bob-giant-fire-biter-corpse=Π’Ρ€ΡƒΠΏ гигантского ΠΎΠ³Π½Π΅Π½Π½ΠΎΠ³ΠΎ кусаки +bob-titan-biter=ВитаничСский кусака +bob-titan-biter-corpse=Π’Ρ€ΡƒΠΏ титаничСского кусаки +bob-behemoth-biter=Π‘Π΅ΡˆΠ΅Π½Ρ‹ΠΉ кусака +bob-behemoth-biter-corpse=Π’Ρ€ΡƒΠΏ бСшСного кусаки +bob-leviathan-biter=ЦиклопичСский кусака +bob-leviathan-biter-corpse=Π’Ρ€ΡƒΠΏ циклопичСского кусаки + +bob-big-electric-spitter=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ элСктричСский ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-big-electric-spitter-corpse=Π’Ρ€ΡƒΠΏ большого элСктричСского ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-huge-explosive-spitter=ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-huge-explosive-spitter-corpse=Π’Ρ€ΡƒΠΏ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-huge-acid-spitter=ΠžΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ кислотный ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-huge-acid-spitter-corpse=Π’Ρ€ΡƒΠΏ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ кислотного кусаки +bob-giant-fire-spitter=Гигантский ΠΎΠ³Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-giant-fire-spitter-corpse=Π’Ρ€ΡƒΠΏ гигантского ΠΎΠ³Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-giant-poison-spitter=Гигантский ядовитый ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-giant-poison-spitter-corpse=Π’Ρ€ΡƒΠΏ гигантского ядовитого ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-titan-spitter=ВитаничСский ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-titan-spitter-corpse=Π’Ρ€ΡƒΠΏ титаничСского ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-behemoth-spitter=Π‘Π΅ΡˆΠ΅Π½Ρ‹ΠΉ ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-behemoth-spitter-corpse=Π’Ρ€ΡƒΠΏ бСшСного ΠΏΠ»Π΅Π²Π°ΠΊΠΈ +bob-leviathan-spitter=ЦиклопичСский ΠΏΠ»Π΅Π²Π°ΠΊΠ° +bob-leviathan-spitter-corpse=Π’Ρ€ΡƒΠΏ циклопичСского ΠΏΠ»Π΅Π²Π°ΠΊΠΈ + +bob-big-piercing-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Π±Ρ€ΠΎΠ½Π΅Π±ΠΎΠΉΠ½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π²ΡŒ +bob-big-piercing-worm-corpse=Π’Ρ€ΡƒΠΏ большого Π±Ρ€ΠΎΠ½Π΅Π±ΠΎΠΉΠ½ΠΎΠ³ΠΎ чСрвя +bob-big-electric-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ элСктричСский Ρ‡Π΅Ρ€Π²ΡŒ +bob-big-electric-worm-corpse=Π’Ρ€ΡƒΠΏ большого элСктричСского чСрвя +big-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ кислотный Ρ‡Π΅Ρ€Π²ΡŒ +big-worm-corpse=Π’Ρ€ΡƒΠΏ большого кислотного чСрвя +bob-big-explosive-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ Ρ‡Π΅Ρ€Π²ΡŒ +bob-big-explosive-worm-corpse=Π’Ρ€ΡƒΠΏ большого Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ чСрвя +bob-big-fire-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ ΠΎΠ³Π½Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π²ΡŒ +bob-big-fire-worm-corpse=Π’Ρ€ΡƒΠΏ большого ΠΎΠ³Π½Π΅Π½Π½ΠΎΠ³ΠΎ чСрвя +bob-big-poison-worm-turret=Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ ядовитый Ρ‡Π΅Ρ€Π²ΡŒ +bob-big-poison-worm-corpse=Π’Ρ€ΡƒΠΏ большого ядовитого чСрвя + +bob-giant-worm-turret=Гигантский Ρ‡Π΅Ρ€Π²ΡŒ +bob-giant-worm-corpse=Π’Ρ€ΡƒΠΏ гигантского чСрвя +bob-behemoth-worm-turret=Π‘Π΅ΡˆΠ΅Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π²ΡŒ +bob-behemoth-worm-corpse=Π’Ρ€ΡƒΠΏ бСшСного чСрвя + + +[damage-type-name] +bob-pierce=ΠŸΡ€ΠΎΠ½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΉ +plasma=ΠŸΠ»Π°Π·ΠΌΠ΅Π½Π½Ρ‹ΠΉ + + +[mod-setting-name] +bobmods-enemies-enableartifacts=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-enablesmallartifacts=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Π»Ρ‹Π΅ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-enablenewartifacts=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-aliensdropartifacts=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΈΠ· кусак ΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ +bobmods-enemies-leviathanfrequency=Частота появлСния Π›Π΅Π²ΠΈΠ°Ρ„Π°Π½ΠΎΠ² +bobmods-enemies-biggersooner=Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π²Ρ€Π°Π³ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ +bobmods-enemies-superspawner=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π‘ΡƒΠΏΠ΅Ρ€-Π£Π»Π΅ΠΉ +bobmods-enemies-healthincrease=Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ кусак + + +[mod-setting-description] +bobmods-enemies-enableartifacts=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ смСрти кусак Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-enablesmallartifacts=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ смСрти кусак Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΌΠ°Π»Ρ‹Π΅ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-enablenewartifacts=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈ смСрти кусак Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ +bobmods-enemies-aliensdropartifacts=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΠ»Π΅Π²Π°ΠΊ ΠΈ кусак +bobmods-enemies-leviathanfrequency=ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ частоту появлСния Π›Π΅Π²ΠΈΠ°Ρ„Π°Π½ΠΎΠ² ΠΏΡ€ΠΈ максимальном Ρ„Π°ΠΊΡ‚ΠΎΡ€Π΅ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ +bobmods-enemies-biggersooner=Если Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Ρ‚ΠΎ измСняСт порядок появлСния кусак ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ кусаки ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π΅ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. +bobmods-enemies-superspawner=Если Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Ρ‚ΠΎ Π‘ΡƒΠΏΠ΅Ρ€-Π£Π»Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… кусак Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π°Ρ‰Π΅. +bobmods-enemies-healthincrease=Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ€Π°Π³ΠΎΠ² diff --git a/bobenemies_1.1.6/migrations/bobenemies_0.17.0.json b/bobenemies/migrations/bobenemies_0.17.0.json similarity index 100% rename from bobenemies_1.1.6/migrations/bobenemies_0.17.0.json rename to bobenemies/migrations/bobenemies_0.17.0.json diff --git a/bobenemies_1.1.6/prototypes/alien-artifact.lua b/bobenemies/prototypes/alien-artifact.lua similarity index 100% rename from bobenemies_1.1.6/prototypes/alien-artifact.lua rename to bobenemies/prototypes/alien-artifact.lua diff --git a/bobenemies_1.1.6/prototypes/biters.lua b/bobenemies/prototypes/biters.lua similarity index 96% rename from bobenemies_1.1.6/prototypes/biters.lua rename to bobenemies/prototypes/biters.lua index fd1d9563..a97765b6 100644 --- a/bobenemies_1.1.6/prototypes/biters.lua +++ b/bobenemies/prototypes/biters.lua @@ -366,18 +366,23 @@ data:extend({ water_reflection = biter_water_reflection(bobmods.enemies.huge_scale), }, - add_biter_die_animation(bobmods.enemies.huge_scale, bobmods.enemies.explosive_tint, bobmods.enemies.explosive_tint2, { - type = "corpse", - name = "bob-huge-explosive-biter-corpse", - icon = "__base__/graphics/icons/medium-biter-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selectable_in_game = false, - selection_box = { { -1, -1 }, { 1, 1 } }, - subgroup = "corpses", - order = "c[corpse]-a[biter]-d[bigger]", - flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, - }), + add_biter_die_animation( + bobmods.enemies.huge_scale, + bobmods.enemies.explosive_tint, + bobmods.enemies.explosive_tint2, + { + type = "corpse", + name = "bob-huge-explosive-biter-corpse", + icon = "__base__/graphics/icons/medium-biter-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selectable_in_game = false, + selection_box = { { -1, -1 }, { 1, 1 } }, + subgroup = "corpses", + order = "c[corpse]-a[biter]-d[bigger]", + flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, + } + ), { type = "unit", @@ -920,18 +925,23 @@ data:extend({ water_reflection = biter_water_reflection(bobmods.enemies.behemoth_scale), }, - add_biter_die_animation(bobmods.enemies.behemoth_scale, bobmods.enemies.behemoth_tint, bobmods.enemies.behemoth_tint2, { - type = "corpse", - name = "bob-behemoth-biter-corpse", - icon = "__base__/graphics/icons/big-biter-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selectable_in_game = false, - selection_box = { { -1, -1 }, { 1, 1 } }, - subgroup = "corpses", - order = "c[corpse]-a[biter]-e[behemoth]", - flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, - }), + add_biter_die_animation( + bobmods.enemies.behemoth_scale, + bobmods.enemies.behemoth_tint, + bobmods.enemies.behemoth_tint2, + { + type = "corpse", + name = "bob-behemoth-biter-corpse", + icon = "__base__/graphics/icons/big-biter-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selectable_in_game = false, + selection_box = { { -1, -1 }, { 1, 1 } }, + subgroup = "corpses", + order = "c[corpse]-a[biter]-e[behemoth]", + flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, + } + ), { type = "unit", diff --git a/bobenemies_1.1.6/prototypes/damage-type.lua b/bobenemies/prototypes/damage-type.lua similarity index 100% rename from bobenemies_1.1.6/prototypes/damage-type.lua rename to bobenemies/prototypes/damage-type.lua diff --git a/bobenemies/prototypes/entities.lua b/bobenemies/prototypes/entities.lua new file mode 100644 index 00000000..9dce5510 --- /dev/null +++ b/bobenemies/prototypes/entities.lua @@ -0,0 +1,96 @@ +data:extend({ + { + type = "smoke-with-trigger", + name = "small-poison-cloud", + flags = { "not-on-map" }, + show_when_smoke_off = true, + animation = { + width = 152, + height = 120, + line_length = 5, + frame_count = 60, + shift = { -0.53125, -0.4375 }, + priority = "high", + animation_speed = 0.25, + filename = "__base__/graphics/entity/smoke/smoke.png", + flags = { "smoke" }, + }, + affected_by_wind = false, + cyclic = true, + duration = 60 * 10, + fade_away_duration = 2 * 60, + spread_duration = 10, + color = { r = 0.239, g = 0.875, b = 0.992, a = 0.690 }, -- #3ddffdb0, + created_effect = { + { + type = "cluster", + cluster_count = 4, + distance = 2, + distance_deviation = 1, + action_delivery = { + type = "instant", + target_effects = { + type = "create-smoke", + show_in_tooltip = false, + entity_name = "poison-cloud-visual-dummy", + initial_height = 0, + }, + }, + }, + }, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-smoke", + show_in_tooltip = false, + entity_name = "poison-cloud-visual-dummy", + initial_height = 0, + }, + { + type = "nested-result", + action = { + type = "area", + radius = 4, + entity_flags = { "breaths-air" }, + action_delivery = { + type = "instant", + target_effects = { + type = "damage", + damage = { amount = 4, type = "poison" }, + }, + }, + }, + }, + }, + }, + }, + action_cooldown = 30, + }, +}) + +data:extend({ + { + type = "sticker", + name = "poison-sticker", + flags = { "not-on-map" }, + animation = { + filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", + line_length = 8, + width = 60, + height = 118, + frame_count = 25, + direction_count = 1, + blend_mode = "additive", + animation_speed = 1, + scale = 0.4, + tint = { r = 0.1, g = 0.5, b = 0.1 }, + }, + duration_in_ticks = 30 * 60, + damage_interval = 10, + target_movement_modifier = 0.8, + damage_per_tick = { amount = 8, type = "poison" }, + }, +}) diff --git a/bobenemies/prototypes/functions.lua b/bobenemies/prototypes/functions.lua new file mode 100644 index 00000000..d657aa98 --- /dev/null +++ b/bobenemies/prototypes/functions.lua @@ -0,0 +1,329 @@ +-- needed: name, order, health, scale, tint, tint2, ammo_type +-- optional: icon, healing_per_tick, resistances, spawning_time_modifier, distraction_cooldown, pollution_to_join_attack, movement_speed, distance_per_frame, range, vision_distance + +function bobmods.enemies.new_biter(input) + data:extend({ + { + type = "unit", + name = input.name, + order = input.order, + icon = input.icon or "__base__/graphics/icons/big-biter.png", + icon_size = input.icon_size or 32, + flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "breaths-air", "not-repairable" }, + max_health = input.health, + subgroup = "enemies", + resistances = input.resistances, + spawning_time_modifier = input.spawning_time_modifier or 2, + healing_per_tick = input.healing_per_tick or 0.02, + collision_box = { { -0.4 * input.scale, -0.4 * input.scale }, { 0.4 * input.scale, 0.4 * input.scale } }, + selection_box = { { -0.7 * input.scale, -1.5 * input.scale }, { 0.7 * input.scale, 0.3 * input.scale } }, + sticker_box = { { -0.6 * input.scale, -0.8 * input.scale }, { 0.6 * input.scale, 0 } }, + distraction_cooldown = input.distraction_cooldown or 300, + min_pursue_time = 10 * 60, + max_pursue_distance = 50, + attack_parameters = { + type = "projectile", + ammo_category = "melee", + ammo_type = input.ammo_type, + range = input.range or 1.5, + cooldown = 35, + sound = make_biter_roars(0.6 * input.scale), + animation = biterattackanimation(input.scale, input.tint, input.tint2), + }, + vision_distance = input.vision_distance or 30, + movement_speed = input.movement_speed or 0.17, + distance_per_frame = input.distance_per_frame or 0.2, + -- in pu + pollution_to_join_attack = input.pollution_to_join_attack or 2000, + corpse = input.name .. "-corpse", + dying_explosion = "blood-explosion-big", + working_sound = make_biter_calls(0.9 * input.scale), + dying_sound = make_biter_dying_sounds(1.0 * input.scale), + run_animation = biterrunanimation(input.scale, input.tint, input.tint2), + }, + + { + type = "corpse", + name = input.name .. "-corpse", + icon = input.icon or "__base__/graphics/icons/big-biter-corpse.png", + icon_size = input.icon_size or 32, + selectable_in_game = false, + selection_box = { { -1 * input.scale, -1 * input.scale }, { 1 * input.scale, 1 * input.scale } }, + subgroup = "corpses", + order = "c[corpse]-" .. input.order, + flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, + dying_speed = 0.04, + time_before_removed = 15 * 60 * 60, + final_render_layer = "corpse", + animation = biterdieanimation(input.scale, input.tint, input.tint2), + }, + }) +end + +bobmods.enemies.spit_begin_sound_big = { + { + filename = "__base__/sound/creatures/spitter-spit-start-big-1.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-2.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-3.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-4.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-5.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-6.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-7.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-8.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-9.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-big-10.ogg", + volume = 0.47, + }, +} + +bobmods.enemies.spit_begin_sound_behemoth = { + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-1.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-2.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-3.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-4.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-5.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-6.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-7.ogg", + volume = 0.47, + }, + { + filename = "__base__/sound/creatures/spitter-spit-start-behemoth-8.ogg", + volume = 0.47, + }, +} + +bobmods.enemies.spit_target_sound = { + type = "play-sound", + sound = { + { + filename = "__base__/sound/creatures/projectile-acid-burn-1.ogg", + volume = 0.65, + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-2.ogg", + volume = 0.65, + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-long-1.ogg", + volume = 0.6, + }, + { + filename = "__base__/sound/creatures/projectile-acid-burn-long-2.ogg", + volume = 0.6, + }, + }, +} + +function bobmods.enemies.spitter_attack_parameters(data) + return { + type = "stream", + ammo_category = "biological", + cooldown = data.cooldown, + cooldown_deviation = data.cooldown_deviation, + range = data.range, + range_mode = "bounding-box-to-bounding-box", + min_attack_distance = data.min_attack_distance, + damage_modifier = data.damage_modifier, + warmup = 30, + projectile_creation_parameters = spitter_shoot_shiftings(data.scale, data.scale * scale_spitter_stream), + use_shooter_direction = true, + lead_target_for_projectile_speed = 0.2 * 0.75 * 1.5 * 1.5, -- this is same as particle horizontal speed of flamethrower fire stream + ammo_type = { + category = "biological", + action = { + type = "direct", + action_delivery = { + type = "stream", + stream = data.acid_stream_name, + }, + }, + }, + cyclic_sound = { + begin_sound = data.begin_sound, + middle_sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0, + }, + }, + end_sound = { + { + filename = "__base__/sound/creatures/spitter-spit-end-big-1.ogg", + volume = 0.43, + }, + { + filename = "__base__/sound/creatures/spitter-spit-end-big-2.ogg", + volume = 0.43, + }, + { + filename = "__base__/sound/creatures/spitter-spit-end-big-3.ogg", + volume = 0.43, + }, + { + filename = "__base__/sound/creatures/spitter-spit-end-big-4.ogg", + volume = 0.43, + }, + { + filename = "__base__/sound/creatures/spitter-spit-end-big-5.ogg", + volume = 0.43, + }, + }, + }, + animation = spitterattackanimation(data.scale, data.tint1, data.tint2), + } +end + +function bobmods.enemies.acid_stream(data) + return { + type = "stream", + name = data.name, + flags = { "not-on-map" }, + particle_buffer_size = 90, + particle_spawn_interval = data.particle_spawn_interval, + particle_spawn_timeout = data.particle_spawn_timeout, + particle_vertical_acceleration = 0.005 * 0.60 * 1.5, --x + particle_horizontal_speed = 0.2 * 0.75 * 1.5 * 1.5, --x + particle_horizontal_speed_deviation = 0.005 * 0.70, + particle_start_alpha = 0.5, + particle_end_alpha = 1, + particle_alpha_per_part = 0.8, + particle_scale_per_part = 0.8, + particle_loop_frame_count = 15, + particle_fade_out_duration = 2, + particle_loop_exit_threshold = 0.25, + -- special_neutral_target_damage = {amount = 1, type = "acid"}, + working_sound = { + sound = { + { + filename = "__base__/sound/fight/projectile-acid-burn-loop.ogg", + volume = 0.4, + }, + }, + }, + initial_action = data.action, + particle = { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", + draw_as_glow = true, + line_length = 5, + width = 22, + height = 84, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 30), data.scale), + tint = data.tint, + priority = "high", + scale = data.scale, + animation_speed = 1, + hr_version = { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", + draw_as_glow = true, + line_length = 5, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), data.scale), + tint = data.tint, + priority = "high", + scale = 0.5 * data.scale, + animation_speed = 1, + }, + }, + spine_animation = { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-tail.png", + draw_as_glow = true, + line_length = 5, + width = 66, + height = 12, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(0, -2), data.scale), + tint = data.tint, + priority = "high", + scale = data.scale, + animation_speed = 1, + hr_version = { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-tail.png", + draw_as_glow = true, + line_length = 5, + width = 132, + height = 20, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(0, -1), data.scale), + tint = data.tint, + priority = "high", + scale = 0.5 * data.scale, + animation_speed = 1, + }, + }, + shadow = { + filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", + line_length = 15, + width = 22, + height = 84, + frame_count = 15, + priority = "high", + shift = util.mul_shift(util.by_pixel(-2, 30), data.scale), + draw_as_shadow = true, + scale = data.scale, + animation_speed = 1, + hr_version = { + filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", + line_length = 15, + width = 42, + height = 164, + frame_count = 15, + shift = util.mul_shift(util.by_pixel(-2, 31), data.scale), + draw_as_shadow = true, + priority = "high", + scale = 0.5 * data.scale, + animation_speed = 1, + }, + }, + oriented_particle = true, + shadow_scale_enabled = true, + } +end diff --git a/bobenemies_1.1.6/prototypes/projectiles.lua b/bobenemies/prototypes/projectiles.lua similarity index 100% rename from bobenemies_1.1.6/prototypes/projectiles.lua rename to bobenemies/prototypes/projectiles.lua diff --git a/bobenemies_1.1.6/prototypes/spawners.lua b/bobenemies/prototypes/spawners.lua similarity index 99% rename from bobenemies_1.1.6/prototypes/spawners.lua rename to bobenemies/prototypes/spawners.lua index 89385d27..0e25a9cb 100644 --- a/bobenemies_1.1.6/prototypes/spawners.lua +++ b/bobenemies/prototypes/spawners.lua @@ -72,7 +72,6 @@ data:extend({ map_generator_bounding_box = { { -4.2, -3.2 }, { 3.2, 3.2 } }, pollution_absorption_absolute = 80, pollution_absorption_proportional = 0.03, - pollution_to_enhance_spawning = 30000, corpse = "bob-biter-spawner-corpse", dying_explosion = "blood-explosion-huge", loot = {}, @@ -198,7 +197,6 @@ data:extend({ map_generator_bounding_box = { { -4.2, -3.2 }, { 3.2, 3.2 } }, pollution_absorption_absolute = 80, pollution_absorption_proportional = 0.03, - pollution_to_enhance_spawning = 30000, corpse = "bob-spitter-spawner-corpse", dying_explosion = "blood-explosion-huge", loot = {}, @@ -340,7 +338,6 @@ if settings.startup["bobmods-enemies-superspawner"].value == true then map_generator_bounding_box = { { -4.2, -3.2 }, { 3.2, 3.2 } }, pollution_absorption_absolute = 200, pollution_absorption_proportional = 0.1, - pollution_to_enhance_spawning = 30000, corpse = "bob-super-spawner-corpse", dying_explosion = "blood-explosion-huge", loot = {}, diff --git a/bobenemies_1.1.6/prototypes/spitters.lua b/bobenemies/prototypes/spitters.lua similarity index 97% rename from bobenemies_1.1.6/prototypes/spitters.lua rename to bobenemies/prototypes/spitters.lua index f8c9785f..984747e3 100644 --- a/bobenemies_1.1.6/prototypes/spitters.lua +++ b/bobenemies/prototypes/spitters.lua @@ -201,18 +201,23 @@ data:extend({ water_reflection = spitter_water_reflection(bobmods.enemies.huge_scale), }, - add_spitter_die_animation(bobmods.enemies.huge_scale, bobmods.enemies.explosive_tint, bobmods.enemies.explosive_tint2, { - type = "corpse", - name = "bob-huge-explosive-spitter-corpse", - icon = "__base__/graphics/icons/big-biter-corpse.png", - icon_size = 64, - icon_mipmaps = 4, - selectable_in_game = false, - selection_box = { { -1, -1 }, { 1, 1 } }, - subgroup = "corpses", - order = "c[corpse]-b[spitter]-d[bigger]", - flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, - }), + add_spitter_die_animation( + bobmods.enemies.huge_scale, + bobmods.enemies.explosive_tint, + bobmods.enemies.explosive_tint2, + { + type = "corpse", + name = "bob-huge-explosive-spitter-corpse", + icon = "__base__/graphics/icons/big-biter-corpse.png", + icon_size = 64, + icon_mipmaps = 4, + selectable_in_game = false, + selection_box = { { -1, -1 }, { 1, 1 } }, + subgroup = "corpses", + order = "c[corpse]-b[spitter]-d[bigger]", + flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, + } + ), { type = "unit", @@ -389,8 +394,8 @@ data:extend({ cooldown_deviation = 0.15, damage_modifier = 5, scale = bobmods.enemies.giant_scale, - tint1 = bobmods.enemies.acid_tint, - tint2 = bobmods.enemies.acid_tint2, + tint1 = bobmods.enemies.fire_tint, + tint2 = bobmods.enemies.fire_tint2, begin_sound = bobmods.enemies.spit_begin_sound_big, }), vision_distance = 30, diff --git a/bobenemies_1.1.6/prototypes/values.lua b/bobenemies/prototypes/values.lua similarity index 100% rename from bobenemies_1.1.6/prototypes/values.lua rename to bobenemies/prototypes/values.lua diff --git a/bobenemies_1.1.6/prototypes/worms.lua b/bobenemies/prototypes/worms.lua similarity index 99% rename from bobenemies_1.1.6/prototypes/worms.lua rename to bobenemies/prototypes/worms.lua index 86971c1f..2ca3ec4b 100644 --- a/bobenemies_1.1.6/prototypes/worms.lua +++ b/bobenemies/prototypes/worms.lua @@ -435,7 +435,6 @@ data:extend({ action_delivery = { type = "stream", stream = "bob-titan-stream", - duration = 160, source_offset = { 0.15, -0.5 }, }, }, diff --git a/bobenemies_1.1.6/settings.lua b/bobenemies/settings.lua similarity index 100% rename from bobenemies_1.1.6/settings.lua rename to bobenemies/settings.lua diff --git a/bobenemies_1.1.6/thumbnail.png b/bobenemies/thumbnail.png similarity index 100% rename from bobenemies_1.1.6/thumbnail.png rename to bobenemies/thumbnail.png diff --git a/bobenemies_1.1.6/changelog.txt b/bobenemies_1.1.6/changelog.txt deleted file mode 100644 index 697ddb4a..00000000 --- a/bobenemies_1.1.6/changelog.txt +++ /dev/null @@ -1,161 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 01. 01. 2023 - Bugfixes: - - Fixing accidental global variables #50 ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 06. 06. 2022 - Changes: - - Hid small alien artifact when not used #12 ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 26. 11. 2020 - Changes: - - Removed the old unused fire patch ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 25. 11. 2020 - Info: - - Updated to work with Factorio 1.1 - Changes: - - Added a change for build_base_evolution_requirement when harder enemies spawn sooner is enabled. - - Changed all spitter and worm attacks to use streams (like in base) ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 17. 08. 2020 - Info: - - Updated to 1.0 with no changes ---------------------------------------------------------------------------------------------------- -Version: 0.18.5 -Date: 23. 05. 2020 - Changes: - - Removed Stickers (Damage over Time effects) from Giant Fire/Poison biters. ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 24. 04. 2020 - Changes: - - Added a few missing lines to enemies code from base game. - Balancing: - - Increased regular Alien artifact drop rate from Elemental(The ones added by this mod) biters/spitters with all coloured artifacts turned on. (and other minor loot change tweaks) ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 22. 03. 2020 - Changes: - - Fixed Alien artifact crafting recipes so that crafting coloured artifacts from basic aren't disabled when you turn off small artifacts. ---------------------------------------------------------------------------------------------------- -Version: 0.18.2 -Date: 12. 03. 2020 - Changes: - - Update poison sticker damage tick. - - Changed small poison cloud to new format. - - Fire and Poison spitters/worms no longer cause Poison/Fire stickers. - - Badass Behemoths cause poison sticker instead of fire sticker. ---------------------------------------------------------------------------------------------------- -Version: 0.18.1 -Date: 28. 01. 2020 - Bugfixes: - - Fixed Worm, Biter and Spitter sounds. ---------------------------------------------------------------------------------------------------- -Version: 0.18.0 -Date: 23. 01. 2020 - Info: - - Updated to work with Factorio 0.18 - Bugfixes: - - Fixed icons (you only see them in map editor mode) - Balancing: - - Reduced pollution_to_join_attack on all enemies. - - Elemental nests will absorb pollution faster ---------------------------------------------------------------------------------------------------- -Version: 0.17.7 -Date: 03. 06. 2019 - Changes: - - Added build_base_evolution_requirement to spawners. - - Giant Biters and above can deal fire/poison sticker too. - Bugfixes: - - Fixed giant worm's hole size. - Features: - - Added damage type Plasma - - Added poison sticker (DOT) to some poison damage weapons - Balancing: - - Adjusted all biter/spitter resistances a little. - - Reduced Liviathan health a fair bit if the health boost option is turned off. (A quater for biters, a fifth for spitters) - - Increased small poison cloud damage rate ---------------------------------------------------------------------------------------------------- -Version: 0.17.6 -Date: 25. 05. 2019 - Bugfixes: - - Fixed odd looking biter and spitter corpses. ---------------------------------------------------------------------------------------------------- -Version: 0.17.5 -Date: 22. 05. 2019 - Changes: - - Changed spawner colours to make them more unique. - - Increased my worm turret prepare distance - Bugfixes: - - Fixed odd looking worms. ---------------------------------------------------------------------------------------------------- -Version: 0.17.4 -Date: 11. 04. 2019 - Bugfixes: - - Fixed crash when health overhaul was enabled and super nest disabled. ---------------------------------------------------------------------------------------------------- -Version: 0.17.3 -Date: 11. 04. 2019 - Changes: - - Changed Bob's spawner enemy spawns to be more in line with new base game. - - Bob's nests spawn further out from the starting area. - - Spitters and Worms will now target their spit to a position ahead of you and not home like 0.17 base game spit projectiles. - Features: - - Added option to choose Leviathan spawn frequency (at Evolution Factor 1.0) - - Added option to allow harder enemies to spawn at a lower Evolution Factor level - - Added option to increase the health of most bob enemies between huge and behemoth - - Added option to add a higher tier spawner ---------------------------------------------------------------------------------------------------- -Version: 0.17.2 -Date: 14. 03. 2019 - Bugfixes: - - fix for 0.17.12 pollution changes ---------------------------------------------------------------------------------------------------- -Version: 0.17.1 -Date: 26. 02. 2019 - Bugfixes: - - Colours fix ---------------------------------------------------------------------------------------------------- -Version: 0.17.0 -Date: 26. 02. 2019 - Info: - - Updated to work with Factorio 0.17 - Changes: - - Change artifacts to enabled by default ---------------------------------------------------------------------------------------------------- -Version: 0.16.0 -Date: 19. 12. 2017 - Info: - - Updated to work with Factorio 0.16 - - perimeter -> radius on AOE damage - - icon_size tags added. ---------------------------------------------------------------------------------------------------- -Version: 0.15.2 -Date: 09. 05. 2017 - Changes: - - removed conditional require: multiplayer checksum fix - - Base game nests should now drop alien artifacts - - full stat rebalance to match base game changes - - Leviathan health multiplied by 10 to make them more of a boss ---------------------------------------------------------------------------------------------------- -Version: 0.15.1 -Date: 28. 04. 2017 - Features: - - Added the ability to use 1 coloured artifact and 5 normal to make 5 coloured artifacts. ---------------------------------------------------------------------------------------------------- -Version: 0.15.0 -Date: 27. 04. 2017 - Info: - - Updated to work with Factorio 0.15 - Changes: - - Had to update 1 base game function call. - - Re-added base game artifacts. - - Artifacts are disabled by default. - Features: - - Added config option for biters/spitters dropping small artifacts. diff --git a/bobenemies_1.1.6/info.json b/bobenemies_1.1.6/info.json deleted file mode 100644 index 2f3dc23d..00000000 --- a/bobenemies_1.1.6/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "bobenemies", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Enemies mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6" - ], - "description": "Re-adds Alien artifacts to the game.\nAdds 6 different coloured versions of artifacts to the game, each based on a different damage type.\nAdds small versions of artifacts dropped by biters and spitters.\nAdds extra damage type versions of big worm\nAdds a new Elemental nest that spawns the new biters and spitters\nAdds a big piercing biter and big electric spitter\nAdds Huge enemies of Acid and Explosive types\nAdds Giant enemies of Poison and Fire types\nAdds multi-type Titan type enemies\nAdds multi-type Badass behemoth enemies\nAdds multi-type Leviathan enemies, a real end-game threat." -} diff --git a/bobenemies_1.1.6/prototypes/entities.lua b/bobenemies_1.1.6/prototypes/entities.lua deleted file mode 100644 index 2883492d..00000000 --- a/bobenemies_1.1.6/prototypes/entities.lua +++ /dev/null @@ -1,97 +0,0 @@ -data:extend({ - { - type = "smoke-with-trigger", - name = "small-poison-cloud", - flags = { "not-on-map" }, - show_when_smoke_off = true, - animation = { - width = 152, - height = 120, - line_length = 5, - frame_count = 60, - shift = { -0.53125, -0.4375 }, - priority = "high", - animation_speed = 0.25, - filename = "__base__/graphics/entity/smoke/smoke.png", - flags = { "smoke" }, - }, - slow_down_factor = 0, - affected_by_wind = false, - cyclic = true, - duration = 60 * 10, - fade_away_duration = 2 * 60, - spread_duration = 10, - color = { r = 0.239, g = 0.875, b = 0.992, a = 0.690 }, -- #3ddffdb0, - created_effect = { - { - type = "cluster", - cluster_count = 4, - distance = 2, - distance_deviation = 1, - action_delivery = { - type = "instant", - target_effects = { - type = "create-smoke", - show_in_tooltip = false, - entity_name = "poison-cloud-visual-dummy", - initial_height = 0, - }, - }, - }, - }, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-smoke", - show_in_tooltip = false, - entity_name = "poison-cloud-visual-dummy", - initial_height = 0, - }, - { - type = "nested-result", - action = { - type = "area", - radius = 4, - entity_flags = { "breaths-air" }, - action_delivery = { - type = "instant", - target_effects = { - type = "damage", - damage = { amount = 4, type = "poison" }, - }, - }, - }, - }, - }, - }, - }, - action_frequency = 5, - }, -}) - -data:extend({ - { - type = "sticker", - name = "poison-sticker", - flags = { "not-on-map" }, - animation = { - filename = "__base__/graphics/entity/fire-flame/fire-flame-13.png", - line_length = 8, - width = 60, - height = 118, - frame_count = 25, - direction_count = 1, - blend_mode = "additive", - animation_speed = 1, - scale = 0.4, - tint = { r = 0.1, g = 0.5, b = 0.1 }, - }, - duration_in_ticks = 30 * 60, - damage_interval = 10, - target_movement_modifier = 0.8, - damage_per_tick = { amount = 8, type = "poison" }, - }, -}) diff --git a/bobenemies_1.1.6/prototypes/functions.lua b/bobenemies_1.1.6/prototypes/functions.lua deleted file mode 100644 index 7a42bca8..00000000 --- a/bobenemies_1.1.6/prototypes/functions.lua +++ /dev/null @@ -1,331 +0,0 @@ --- needed: name, order, health, scale, tint, tint2, ammo_type --- optional: icon, healing_per_tick, resistances, spawning_time_modifier, distraction_cooldown, pollution_to_join_attack, movement_speed, distance_per_frame, range, vision_distance - -function bobmods.enemies.new_biter(input) - data:extend({ - { - type = "unit", - name = input.name, - order = input.order, - icon = input.icon or "__base__/graphics/icons/big-biter.png", - icon_size = input.icon_size or 32, - flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "breaths-air", "not-repairable" }, - max_health = input.health, - subgroup = "enemies", - resistances = input.resistances, - spawning_time_modifier = input.spawning_time_modifier or 2, - healing_per_tick = input.healing_per_tick or 0.02, - collision_box = { { -0.4 * input.scale, -0.4 * input.scale }, { 0.4 * input.scale, 0.4 * input.scale } }, - selection_box = { { -0.7 * input.scale, -1.5 * input.scale }, { 0.7 * input.scale, 0.3 * input.scale } }, - sticker_box = { { -0.6 * input.scale, -0.8 * input.scale }, { 0.6 * input.scale, 0 } }, - distraction_cooldown = input.distraction_cooldown or 300, - min_pursue_time = 10 * 60, - max_pursue_distance = 50, - attack_parameters = { - type = "projectile", - ammo_category = "melee", - ammo_type = input.ammo_type, - range = input.range or 1.5, - cooldown = 35, - sound = make_biter_roars(0.6 * input.scale), - animation = biterattackanimation(input.scale, input.tint, input.tint2), - }, - vision_distance = input.vision_distance or 30, - movement_speed = input.movement_speed or 0.17, - distance_per_frame = input.distance_per_frame or 0.2, - -- in pu - pollution_to_join_attack = input.pollution_to_join_attack or 2000, - corpse = input.name .. "-corpse", - dying_explosion = "blood-explosion-big", - working_sound = make_biter_calls(0.9 * input.scale), - dying_sound = make_biter_dying_sounds(1.0 * input.scale), - run_animation = biterrunanimation(input.scale, input.tint, input.tint2), - }, - - { - type = "corpse", - name = input.name .. "-corpse", - icon = input.icon or "__base__/graphics/icons/big-biter-corpse.png", - icon_size = input.icon_size or 32, - selectable_in_game = false, - selection_box = { { -1 * input.scale, -1 * input.scale }, { 1 * input.scale, 1 * input.scale } }, - subgroup = "corpses", - order = "c[corpse]-" .. input.order, - flags = { "placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map" }, - dying_speed = 0.04, - time_before_removed = 15 * 60 * 60, - final_render_layer = "corpse", - animation = biterdieanimation(input.scale, input.tint, input.tint2), - }, - }) -end - -bobmods.enemies.spit_begin_sound_big = { - { - filename = "__base__/sound/creatures/spitter-spit-start-big-1.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-2.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-3.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-4.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-5.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-6.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-7.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-8.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-9.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-big-10.ogg", - volume = 0.47, - }, -} - -bobmods.enemies.spit_begin_sound_behemoth = { - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-1.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-2.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-3.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-4.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-5.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-6.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-7.ogg", - volume = 0.47, - }, - { - filename = "__base__/sound/creatures/spitter-spit-start-behemoth-8.ogg", - volume = 0.47, - }, -} - -bobmods.enemies.spit_target_sound = { - type = "play-sound", - sound = { - { - filename = "__base__/sound/creatures/projectile-acid-burn-1.ogg", - volume = 0.65, - }, - { - filename = "__base__/sound/creatures/projectile-acid-burn-2.ogg", - volume = 0.65, - }, - { - filename = "__base__/sound/creatures/projectile-acid-burn-long-1.ogg", - volume = 0.6, - }, - { - filename = "__base__/sound/creatures/projectile-acid-burn-long-2.ogg", - volume = 0.6, - }, - }, -} - -function bobmods.enemies.spitter_attack_parameters(data) - return - { - type = "stream", - ammo_category = "biological", - cooldown = data.cooldown, - cooldown_deviation = data.cooldown_deviation, - range = data.range, - range_mode = "bounding-box-to-bounding-box", - min_attack_distance = data.min_attack_distance, - damage_modifier = data.damage_modifier, - warmup = 30, - projectile_creation_parameters = spitter_shoot_shiftings(data.scale, data.scale * scale_spitter_stream), - use_shooter_direction = true, - lead_target_for_projectile_speed = 0.2 * 0.75 * 1.5 * 1.5, -- this is same as particle horizontal speed of flamethrower fire stream - ammo_type = { - category = "biological", - action = { - type = "direct", - action_delivery = { - type = "stream", - stream = data.acid_stream_name, - }, - }, - }, - cyclic_sound = { - begin_sound = data.begin_sound, - middle_sound = { - { - filename = "__base__/sound/fight/flamethrower-mid.ogg", - volume = 0, - }, - }, - end_sound = { - { - filename = "__base__/sound/creatures/spitter-spit-end-big-1.ogg", - volume = 0.43, - }, - { - filename = "__base__/sound/creatures/spitter-spit-end-big-2.ogg", - volume = 0.43, - }, - { - filename = "__base__/sound/creatures/spitter-spit-end-big-3.ogg", - volume = 0.43, - }, - { - filename = "__base__/sound/creatures/spitter-spit-end-big-4.ogg", - volume = 0.43, - }, - { - filename = "__base__/sound/creatures/spitter-spit-end-big-5.ogg", - volume = 0.43, - }, - }, - }, - animation = spitterattackanimation(data.scale, data.tint1, data.tint2), - } -end - -function bobmods.enemies.acid_stream(data) - return - { - type = "stream", - name = data.name, - flags = { "not-on-map" }, - particle_buffer_size = 90, - particle_spawn_interval = data.particle_spawn_interval, - particle_spawn_timeout = data.particle_spawn_timeout, - particle_vertical_acceleration = 0.005 * 0.60 * 1.5, --x - particle_horizontal_speed = 0.2 * 0.75 * 1.5 * 1.5, --x - particle_horizontal_speed_deviation = 0.005 * 0.70, - particle_start_alpha = 0.5, - particle_end_alpha = 1, - particle_alpha_per_part = 0.8, - particle_scale_per_part = 0.8, - particle_loop_frame_count = 15, - particle_fade_out_duration = 2, - particle_loop_exit_threshold = 0.25, - -- special_neutral_target_damage = {amount = 1, type = "acid"}, - working_sound = { - sound = { - { - filename = "__base__/sound/fight/projectile-acid-burn-loop.ogg", - volume = 0.4, - }, - }, - }, - initial_action = data.action, - particle = { - filename = "__base__/graphics/entity/acid-projectile/acid-projectile-head.png", - draw_as_glow = true, - line_length = 5, - width = 22, - height = 84, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 30), data.scale), - tint = data.tint, - priority = "high", - scale = data.scale, - animation_speed = 1, - hr_version = { - filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-head.png", - draw_as_glow = true, - line_length = 5, - width = 42, - height = 164, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 31), data.scale), - tint = data.tint, - priority = "high", - scale = 0.5 * data.scale, - animation_speed = 1, - }, - }, - spine_animation = { - filename = "__base__/graphics/entity/acid-projectile/acid-projectile-tail.png", - draw_as_glow = true, - line_length = 5, - width = 66, - height = 12, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(0, -2), data.scale), - tint = data.tint, - priority = "high", - scale = data.scale, - animation_speed = 1, - hr_version = { - filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-tail.png", - draw_as_glow = true, - line_length = 5, - width = 132, - height = 20, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(0, -1), data.scale), - tint = data.tint, - priority = "high", - scale = 0.5 * data.scale, - animation_speed = 1, - }, - }, - shadow = { - filename = "__base__/graphics/entity/acid-projectile/acid-projectile-shadow.png", - line_length = 15, - width = 22, - height = 84, - frame_count = 15, - priority = "high", - shift = util.mul_shift(util.by_pixel(-2, 30), data.scale), - draw_as_shadow = true, - scale = data.scale, - animation_speed = 1, - hr_version = { - filename = "__base__/graphics/entity/acid-projectile/hr-acid-projectile-shadow.png", - line_length = 15, - width = 42, - height = 164, - frame_count = 15, - shift = util.mul_shift(util.by_pixel(-2, 31), data.scale), - draw_as_shadow = true, - priority = "high", - scale = 0.5 * data.scale, - animation_speed = 1, - }, - }, - oriented_particle = true, - shadow_scale_enabled = true, - } -end diff --git a/bobequipment_1.1.6/changelog.txt b/bobequipment/changelog.txt similarity index 100% rename from bobequipment_1.1.6/changelog.txt rename to bobequipment/changelog.txt diff --git a/bobequipment_1.1.6/data-updates.lua b/bobequipment/data-updates.lua similarity index 100% rename from bobequipment_1.1.6/data-updates.lua rename to bobequipment/data-updates.lua diff --git a/bobequipment_1.1.6/data.lua b/bobequipment/data.lua similarity index 100% rename from bobequipment_1.1.6/data.lua rename to bobequipment/data.lua diff --git a/bobequipment_1.1.6/graphics/beam/laser-body-amethyst.png b/bobequipment/graphics/beam/laser-body-amethyst.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-body-amethyst.png rename to bobequipment/graphics/beam/laser-body-amethyst.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-body-emerald.png b/bobequipment/graphics/beam/laser-body-emerald.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-body-emerald.png rename to bobequipment/graphics/beam/laser-body-emerald.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-body-sapphire.png b/bobequipment/graphics/beam/laser-body-sapphire.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-body-sapphire.png rename to bobequipment/graphics/beam/laser-body-sapphire.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-body-topaz.png b/bobequipment/graphics/beam/laser-body-topaz.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-body-topaz.png rename to bobequipment/graphics/beam/laser-body-topaz.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-body.png b/bobequipment/graphics/beam/laser-body.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-body.png rename to bobequipment/graphics/beam/laser-body.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-end-amethyst.png b/bobequipment/graphics/beam/laser-end-amethyst.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-end-amethyst.png rename to bobequipment/graphics/beam/laser-end-amethyst.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-end-emerald.png b/bobequipment/graphics/beam/laser-end-emerald.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-end-emerald.png rename to bobequipment/graphics/beam/laser-end-emerald.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-end-sapphire.png b/bobequipment/graphics/beam/laser-end-sapphire.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-end-sapphire.png rename to bobequipment/graphics/beam/laser-end-sapphire.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-end-topaz.png b/bobequipment/graphics/beam/laser-end-topaz.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-end-topaz.png rename to bobequipment/graphics/beam/laser-end-topaz.png diff --git a/bobequipment_1.1.6/graphics/beam/laser-end.png b/bobequipment/graphics/beam/laser-end.png similarity index 100% rename from bobequipment_1.1.6/graphics/beam/laser-end.png rename to bobequipment/graphics/beam/laser-end.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-equipment.png b/bobequipment/graphics/equipment/battery-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-equipment.png rename to bobequipment/graphics/equipment/battery-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-mk2-equipment.png b/bobequipment/graphics/equipment/battery-mk2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-mk2-equipment.png rename to bobequipment/graphics/equipment/battery-mk2-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-mk3-equipment.png b/bobequipment/graphics/equipment/battery-mk3-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-mk3-equipment.png rename to bobequipment/graphics/equipment/battery-mk3-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-mk4-equipment.png b/bobequipment/graphics/equipment/battery-mk4-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-mk4-equipment.png rename to bobequipment/graphics/equipment/battery-mk4-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-mk5-equipment.png b/bobequipment/graphics/equipment/battery-mk5-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-mk5-equipment.png rename to bobequipment/graphics/equipment/battery-mk5-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/battery-mk6-equipment.png b/bobequipment/graphics/equipment/battery-mk6-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/battery-mk6-equipment.png rename to bobequipment/graphics/equipment/battery-mk6-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk1-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk1-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk1-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk1-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk2-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk2-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk2-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk3-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk3-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk3-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk3-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk4-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk4-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk4-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk4-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk5-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk5-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk5-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk5-equipment.png diff --git a/bobequipment_1.1.6/graphics/equipment/energy-shield-mk6-equipment.png b/bobequipment/graphics/equipment/energy-shield-mk6-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/equipment/energy-shield-mk6-equipment.png rename to bobequipment/graphics/equipment/energy-shield-mk6-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/construction-robot-1.png b/bobequipment/graphics/icons/construction-robot-1.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/construction-robot-1.png rename to bobequipment/graphics/icons/construction-robot-1.png diff --git a/bobequipment_1.1.6/graphics/icons/construction-robot-2.png b/bobequipment/graphics/icons/construction-robot-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/construction-robot-2.png rename to bobequipment/graphics/icons/construction-robot-2.png diff --git a/bobequipment_1.1.6/graphics/icons/construction-robot-3.png b/bobequipment/graphics/icons/construction-robot-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/construction-robot-3.png rename to bobequipment/graphics/icons/construction-robot-3.png diff --git a/bobequipment_1.1.6/graphics/icons/construction-robot-4.png b/bobequipment/graphics/icons/construction-robot-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/construction-robot-4.png rename to bobequipment/graphics/icons/construction-robot-4.png diff --git a/bobequipment_1.1.6/graphics/icons/construction-robot-5.png b/bobequipment/graphics/icons/construction-robot-5.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/construction-robot-5.png rename to bobequipment/graphics/icons/construction-robot-5.png diff --git a/bobequipment_1.1.6/graphics/icons/defender.png b/bobequipment/graphics/icons/defender.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/defender.png rename to bobequipment/graphics/icons/defender.png diff --git a/bobequipment_1.1.6/graphics/icons/destroyer.png b/bobequipment/graphics/icons/destroyer.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/destroyer.png rename to bobequipment/graphics/icons/destroyer.png diff --git a/bobequipment_1.1.6/graphics/icons/distractor.png b/bobequipment/graphics/icons/distractor.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/distractor.png rename to bobequipment/graphics/icons/distractor.png diff --git a/bobequipment_1.1.6/graphics/icons/laser-robot.png b/bobequipment/graphics/icons/laser-robot.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/laser-robot.png rename to bobequipment/graphics/icons/laser-robot.png diff --git a/bobequipment_1.1.6/graphics/icons/personal-roboport-equipment-base.png b/bobequipment/graphics/icons/personal-roboport-equipment-base.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/personal-roboport-equipment-base.png rename to bobequipment/graphics/icons/personal-roboport-equipment-base.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-antenna-2.png b/bobequipment/graphics/icons/roboport-antenna-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-antenna-2.png rename to bobequipment/graphics/icons/roboport-antenna-2.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-antenna-3.png b/bobequipment/graphics/icons/roboport-antenna-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-antenna-3.png rename to bobequipment/graphics/icons/roboport-antenna-3.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-antenna-4.png b/bobequipment/graphics/icons/roboport-antenna-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-antenna-4.png rename to bobequipment/graphics/icons/roboport-antenna-4.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-antenna.png b/bobequipment/graphics/icons/roboport-antenna.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-antenna.png rename to bobequipment/graphics/icons/roboport-antenna.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-chargepad-2.png b/bobequipment/graphics/icons/roboport-chargepad-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-chargepad-2.png rename to bobequipment/graphics/icons/roboport-chargepad-2.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-chargepad-3.png b/bobequipment/graphics/icons/roboport-chargepad-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-chargepad-3.png rename to bobequipment/graphics/icons/roboport-chargepad-3.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-chargepad-4.png b/bobequipment/graphics/icons/roboport-chargepad-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-chargepad-4.png rename to bobequipment/graphics/icons/roboport-chargepad-4.png diff --git a/bobequipment_1.1.6/graphics/icons/roboport-chargepad.png b/bobequipment/graphics/icons/roboport-chargepad.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/roboport-chargepad.png rename to bobequipment/graphics/icons/roboport-chargepad.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment-0.png b/bobequipment/graphics/icons/solar-panel-equipment-0.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment-0.png rename to bobequipment/graphics/icons/solar-panel-equipment-0.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment-1.png b/bobequipment/graphics/icons/solar-panel-equipment-1.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment-1.png rename to bobequipment/graphics/icons/solar-panel-equipment-1.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment-2.png b/bobequipment/graphics/icons/solar-panel-equipment-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment-2.png rename to bobequipment/graphics/icons/solar-panel-equipment-2.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment-3.png b/bobequipment/graphics/icons/solar-panel-equipment-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment-3.png rename to bobequipment/graphics/icons/solar-panel-equipment-3.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment-4.png b/bobequipment/graphics/icons/solar-panel-equipment-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment-4.png rename to bobequipment/graphics/icons/solar-panel-equipment-4.png diff --git a/bobequipment_1.1.6/graphics/icons/solar-panel-equipment.png b/bobequipment/graphics/icons/solar-panel-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/solar-panel-equipment.png rename to bobequipment/graphics/icons/solar-panel-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-equipment.png b/bobequipment/graphics/icons/technology/battery-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-equipment.png rename to bobequipment/graphics/icons/technology/battery-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-mk2-equipment.png b/bobequipment/graphics/icons/technology/battery-mk2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-mk2-equipment.png rename to bobequipment/graphics/icons/technology/battery-mk2-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-mk3-equipment.png b/bobequipment/graphics/icons/technology/battery-mk3-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-mk3-equipment.png rename to bobequipment/graphics/icons/technology/battery-mk3-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-mk4-equipment.png b/bobequipment/graphics/icons/technology/battery-mk4-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-mk4-equipment.png rename to bobequipment/graphics/icons/technology/battery-mk4-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-mk5-equipment.png b/bobequipment/graphics/icons/technology/battery-mk5-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-mk5-equipment.png rename to bobequipment/graphics/icons/technology/battery-mk5-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/battery-mk6-equipment.png b/bobequipment/graphics/icons/technology/battery-mk6-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/battery-mk6-equipment.png rename to bobequipment/graphics/icons/technology/battery-mk6-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk2-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk2-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk2-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk2_2-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk2_2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk2_2-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk2_2-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk3-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk3-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk3-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk3-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk4-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk4-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk4-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk4-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk5-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk5-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk5-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk5-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk6-equipment.png b/bobequipment/graphics/icons/technology/energy-shield-mk6-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/energy-shield-mk6-equipment.png rename to bobequipment/graphics/icons/technology/energy-shield-mk6-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-1.png b/bobequipment/graphics/icons/technology/fusion-reactor-equipment-1.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-1.png rename to bobequipment/graphics/icons/technology/fusion-reactor-equipment-1.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-2.png b/bobequipment/graphics/icons/technology/fusion-reactor-equipment-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-2.png rename to bobequipment/graphics/icons/technology/fusion-reactor-equipment-2.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-3.png b/bobequipment/graphics/icons/technology/fusion-reactor-equipment-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-3.png rename to bobequipment/graphics/icons/technology/fusion-reactor-equipment-3.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-4.png b/bobequipment/graphics/icons/technology/fusion-reactor-equipment-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/fusion-reactor-equipment-4.png rename to bobequipment/graphics/icons/technology/fusion-reactor-equipment-4.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-1.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-1.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-1.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-1.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-2.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-2.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-2.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-2.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-3.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-3.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-3.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-3.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-4.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-4.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-4.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-4.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-5.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-5.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-5.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-5.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-6.png b/bobequipment/graphics/icons/technology/personal-laser-defense-equipment-6.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-laser-defense-equipment-6.png rename to bobequipment/graphics/icons/technology/personal-laser-defense-equipment-6.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk0-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-mk0-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk0-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-mk0-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk1-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-mk1-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk1-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-mk1-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk2-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-mk2-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk2-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-mk2-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk3-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-mk3-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk3-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-mk3-equipment.png diff --git a/bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk4-equipment.png b/bobequipment/graphics/icons/technology/personal-roboport-mk4-equipment.png similarity index 100% rename from bobequipment_1.1.6/graphics/icons/technology/personal-roboport-mk4-equipment.png rename to bobequipment/graphics/icons/technology/personal-roboport-mk4-equipment.png diff --git a/bobequipment/info.json b/bobequipment/info.json new file mode 100644 index 00000000..6f872573 --- /dev/null +++ b/bobequipment/info.json @@ -0,0 +1,14 @@ +{ + "name": "bobequipment", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Personal Equipment mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nExpands the range of equipment available in base mod for the modular armor.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobequipment_1.1.6/locale/en/bobequipment.cfg b/bobequipment/locale/en/bobequipment.cfg similarity index 100% rename from bobequipment_1.1.6/locale/en/bobequipment.cfg rename to bobequipment/locale/en/bobequipment.cfg diff --git a/bobequipment_1.1.6/prototypes/beams.lua b/bobequipment/prototypes/beams.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/beams.lua rename to bobequipment/prototypes/beams.lua diff --git a/bobequipment_1.1.6/prototypes/equipment/equipment.lua b/bobequipment/prototypes/equipment/equipment.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/equipment/equipment.lua rename to bobequipment/prototypes/equipment/equipment.lua diff --git a/bobequipment_1.1.6/prototypes/item/equipment.lua b/bobequipment/prototypes/item/equipment.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/item/equipment.lua rename to bobequipment/prototypes/item/equipment.lua diff --git a/bobequipment_1.1.6/prototypes/personal-roboport.lua b/bobequipment/prototypes/personal-roboport.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/personal-roboport.lua rename to bobequipment/prototypes/personal-roboport.lua diff --git a/bobequipment_1.1.6/prototypes/recipe/equipment.lua b/bobequipment/prototypes/recipe/equipment.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/recipe/equipment.lua rename to bobequipment/prototypes/recipe/equipment.lua diff --git a/bobequipment_1.1.6/prototypes/recipe/updates.lua b/bobequipment/prototypes/recipe/updates.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/recipe/updates.lua rename to bobequipment/prototypes/recipe/updates.lua diff --git a/bobequipment_1.1.6/prototypes/technology/equipment.lua b/bobequipment/prototypes/technology/equipment.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/technology/equipment.lua rename to bobequipment/prototypes/technology/equipment.lua diff --git a/bobequipment_1.1.6/prototypes/technology/technology-updates.lua b/bobequipment/prototypes/technology/technology-updates.lua similarity index 100% rename from bobequipment_1.1.6/prototypes/technology/technology-updates.lua rename to bobequipment/prototypes/technology/technology-updates.lua diff --git a/bobequipment_1.1.6/thumbnail.png b/bobequipment/thumbnail.png similarity index 100% rename from bobequipment_1.1.6/thumbnail.png rename to bobequipment/thumbnail.png diff --git a/bobequipment_1.1.6/info.json b/bobequipment_1.1.6/info.json deleted file mode 100644 index 9e8c0413..00000000 --- a/bobequipment_1.1.6/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "bobequipment", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Personal Equipment mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nExpands the range of equipment available in base mod for the modular armor.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobicons_1.1.2/01adc633.ed2b330c-d9c7-4e7f-acfd-cc302e912408.png b/bobicons/01adc633.ed2b330c-d9c7-4e7f-acfd-cc302e912408.png similarity index 100% rename from bobicons_1.1.2/01adc633.ed2b330c-d9c7-4e7f-acfd-cc302e912408.png rename to bobicons/01adc633.ed2b330c-d9c7-4e7f-acfd-cc302e912408.png diff --git a/bobicons_1.1.2/01b6875d.3a3832d3-b3dc-4df4-a110-686fda32f23e.png b/bobicons/01b6875d.3a3832d3-b3dc-4df4-a110-686fda32f23e.png similarity index 100% rename from bobicons_1.1.2/01b6875d.3a3832d3-b3dc-4df4-a110-686fda32f23e.png rename to bobicons/01b6875d.3a3832d3-b3dc-4df4-a110-686fda32f23e.png diff --git a/bobicons_1.1.2/2f0d7b8564298817d007a751d89b1cbe301a974d.thumb.png b/bobicons/2f0d7b8564298817d007a751d89b1cbe301a974d.thumb.png similarity index 100% rename from bobicons_1.1.2/2f0d7b8564298817d007a751d89b1cbe301a974d.thumb.png rename to bobicons/2f0d7b8564298817d007a751d89b1cbe301a974d.thumb.png diff --git a/bobicons_1.1.2/basic-splitter-128.png b/bobicons/basic-splitter-128.png similarity index 100% rename from bobicons_1.1.2/basic-splitter-128.png rename to bobicons/basic-splitter-128.png diff --git a/bobicons_1.1.2/basics/radar-1-64.png b/bobicons/basics/radar-1-64.png similarity index 100% rename from bobicons_1.1.2/basics/radar-1-64.png rename to bobicons/basics/radar-1-64.png diff --git a/bobicons_1.1.2/basics/radar-2-64.png b/bobicons/basics/radar-2-64.png similarity index 100% rename from bobicons_1.1.2/basics/radar-2-64.png rename to bobicons/basics/radar-2-64.png diff --git a/bobicons_1.1.2/basics/radar-3-64.png b/bobicons/basics/radar-3-64.png similarity index 100% rename from bobicons_1.1.2/basics/radar-3-64.png rename to bobicons/basics/radar-3-64.png diff --git a/bobicons_1.1.2/basics/radar-4-64.png b/bobicons/basics/radar-4-64.png similarity index 100% rename from bobicons_1.1.2/basics/radar-4-64.png rename to bobicons/basics/radar-4-64.png diff --git a/bobicons_1.1.2/basics/radar-5-64.png b/bobicons/basics/radar-5-64.png similarity index 100% rename from bobicons_1.1.2/basics/radar-5-64.png rename to bobicons/basics/radar-5-64.png diff --git a/bobicons_1.1.2/basics/solar-panel-equipment-1-128.png b/bobicons/basics/solar-panel-equipment-1-128.png similarity index 100% rename from bobicons_1.1.2/basics/solar-panel-equipment-1-128.png rename to bobicons/basics/solar-panel-equipment-1-128.png diff --git a/bobicons_1.1.2/basics/solar-panel-equipment-2-128.png b/bobicons/basics/solar-panel-equipment-2-128.png similarity index 100% rename from bobicons_1.1.2/basics/solar-panel-equipment-2-128.png rename to bobicons/basics/solar-panel-equipment-2-128.png diff --git a/bobicons_1.1.2/basics/solar-panel-equipment-3-128.png b/bobicons/basics/solar-panel-equipment-3-128.png similarity index 100% rename from bobicons_1.1.2/basics/solar-panel-equipment-3-128.png rename to bobicons/basics/solar-panel-equipment-3-128.png diff --git a/bobicons_1.1.2/basics/solar-panel-equipment-4-128.png b/bobicons/basics/solar-panel-equipment-4-128.png similarity index 100% rename from bobicons_1.1.2/basics/solar-panel-equipment-4-128.png rename to bobicons/basics/solar-panel-equipment-4-128.png diff --git a/bobicons_1.1.2/cliff-explosives.png b/bobicons/cliff-explosives.png similarity index 100% rename from bobicons_1.1.2/cliff-explosives.png rename to bobicons/cliff-explosives.png diff --git a/bobicons_1.1.2/data-final-fixes.lua b/bobicons/data-final-fixes.lua similarity index 100% rename from bobicons_1.1.2/data-final-fixes.lua rename to bobicons/data-final-fixes.lua diff --git a/bobicons_1.1.2/gem.png b/bobicons/gem.png similarity index 100% rename from bobicons_1.1.2/gem.png rename to bobicons/gem.png diff --git a/bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/module-combining-case-64.png b/bobicons/graphics/icons/CoppermineBobModuleRebalancing/module-combining-case-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/module-combining-case-64.png rename to bobicons/graphics/icons/CoppermineBobModuleRebalancing/module-combining-case-64.png diff --git a/bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/module-combining-solder-64.png b/bobicons/graphics/icons/CoppermineBobModuleRebalancing/module-combining-solder-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/module-combining-solder-64.png rename to bobicons/graphics/icons/CoppermineBobModuleRebalancing/module-combining-solder-64.png diff --git a/bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/rocket-control-circuit-64.png b/bobicons/graphics/icons/CoppermineBobModuleRebalancing/rocket-control-circuit-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/CoppermineBobModuleRebalancing/rocket-control-circuit-64.png rename to bobicons/graphics/icons/CoppermineBobModuleRebalancing/rocket-control-circuit-64.png diff --git a/bobicons_1.1.2/graphics/icons/PCPRedux/catalyst-metal-cyan-64.png b/bobicons/graphics/icons/PCPRedux/catalyst-metal-cyan-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/PCPRedux/catalyst-metal-cyan-64.png rename to bobicons/graphics/icons/PCPRedux/catalyst-metal-cyan-64.png diff --git a/bobicons_1.1.2/graphics/icons/PCPRedux/poly-lactic-acid-plastic-64.png b/bobicons/graphics/icons/PCPRedux/poly-lactic-acid-plastic-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/PCPRedux/poly-lactic-acid-plastic-64.png rename to bobicons/graphics/icons/PCPRedux/poly-lactic-acid-plastic-64.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/acetylene.png b/bobicons/graphics/icons/_VARIANTS/acetylene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/acetylene.png rename to bobicons/graphics/icons/_VARIANTS/acetylene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/advanced-photovoltaic-cells.png b/bobicons/graphics/icons/_VARIANTS/advanced-photovoltaic-cells.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/advanced-photovoltaic-cells.png rename to bobicons/graphics/icons/_VARIANTS/advanced-photovoltaic-cells.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/antithetical-matter.png b/bobicons/graphics/icons/_VARIANTS/antithetical-matter.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/antithetical-matter.png rename to bobicons/graphics/icons/_VARIANTS/antithetical-matter.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_ablative_armor_plate.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_ablative_armor_plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_ablative_armor_plate.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_ablative_armor_plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum_used.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum_used.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum_used.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_alpha_lapis_philosophorum_used.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore1_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore1_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore1_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore1_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore2_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore2_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore2_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore2_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore3_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore3_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore3_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore3_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore4_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore4_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore4_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore4_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore5_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore5_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore5_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore5_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore6_unicomp.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore6_unicomp.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_angels_ore6_unicomp.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_angels_ore6_unicomp.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_distractor.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_distractor.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_distractor.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_distractor.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_explosive.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_explosive.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_explosive.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_explosive.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_poison.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_poison.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_artillery_shell_poison.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_artillery_shell_poison.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_autonomous_experimental_unit.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_autonomous_experimental_unit.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_autonomous_experimental_unit.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_autonomous_experimental_unit.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_ballistic_testing_kit.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_ballistic_testing_kit.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_ballistic_testing_kit.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_ballistic_testing_kit.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_beta_catalysator.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_beta_catalysator.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_beta_catalysator.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_beta_catalysator.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_beta_catalysator_used.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_beta_catalysator_used.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_beta_catalysator_used.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_beta_catalysator_used.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_breeding_reactor.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_breeding_reactor.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_breeding_reactor.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_breeding_reactor.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_bromine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_bromine.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine_monochloride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_bromine_monochloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine_monochloride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_bromine_monochloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine_trifluoride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_bromine_trifluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_bromine_trifluoride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_bromine_trifluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_chromed_experimental_casing.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_chromed_experimental_casing.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_chromed_experimental_casing.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_chromed_experimental_casing.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_cpu_die.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_cpu_die.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_cpu_die.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_cpu_die.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_crushed_meteorite_ore.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_crushed_meteorite_ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_crushed_meteorite_ore.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_crushed_meteorite_ore.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dichlormethan.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_dichlormethan.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dichlormethan.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_dichlormethan.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dichlormethan_128.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_dichlormethan_128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dichlormethan_128.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_dichlormethan_128.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dysprosium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_dysprosium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_dysprosium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_dysprosium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_europium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_europium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_europium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_europium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_casing.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_casing.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_casing.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_casing.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_cobalt_zinc_alloy.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_cobalt_zinc_alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_cobalt_zinc_alloy.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_cobalt_zinc_alloy.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_meta_plastics.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_meta_plastics.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_meta_plastics.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_meta_plastics.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_rocket.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_rocket.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_experimental_rocket.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_experimental_rocket.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_genesis_capsule.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_genesis_capsule.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_genesis_capsule.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_genesis_capsule.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_guanidiniumhydrochlorid.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_guanidiniumhydrochlorid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_guanidiniumhydrochlorid.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_guanidiniumhydrochlorid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_h6_saltag_chloride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_h6_saltag_chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_h6_saltag_chloride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_h6_saltag_chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_hawking_ray_device.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_hawking_ray_device.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_hawking_ray_device.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_hawking_ray_device.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_impure_slurry.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_impure_slurry.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_impure_slurry.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_impure_slurry.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_iron_neodymium_magnet_coil.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_iron_neodymium_magnet_coil.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_iron_neodymium_magnet_coil.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_iron_neodymium_magnet_coil.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_manganese_nodule.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_manganese_nodule.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_manganese_nodule.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_manganese_nodule.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_meteorite_ore.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_meteorite_ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_meteorite_ore.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_meteorite_ore.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_molten_alloy_iron_neodymium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_molten_alloy_iron_neodymium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_molten_alloy_iron_neodymium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_molten_alloy_iron_neodymium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_molten_staballoy.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_molten_staballoy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_molten_staballoy.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_molten_staballoy.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_neodymium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_neodymium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_neodymium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_neodymium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_noudle_nitrate_slurry.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_noudle_nitrate_slurry.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_noudle_nitrate_slurry.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_noudle_nitrate_slurry.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_omnipotentia.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_omnipotentia.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_omnipotentia.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_omnipotentia.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_overcharged_fuel.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_overcharged_fuel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_overcharged_fuel.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_overcharged_fuel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plate_staballoy.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_plate_staballoy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plate_staballoy.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_plate_staballoy.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_chloride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_chloride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_weapons_grade.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_weapons_grade.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_weapons_grade.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_plutonium_oxide_pellet_weapons_grade.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_potassium_bromide.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_potassium_bromide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_potassium_bromide.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_potassium_bromide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_potassium_chloride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_potassium_chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_potassium_chloride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_potassium_chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_pure_star_metal.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_pure_star_metal.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_pure_star_metal.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_pure_star_metal.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_radioactive_waste.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_radioactive_waste.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_radioactive_waste.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_radioactive_waste.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_radioactive_waste_recycling.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_radioactive_waste_recycling.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_radioactive_waste_recycling.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_radioactive_waste_recycling.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_rare_earth_filtering.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_rare_earth_filtering.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_rare_earth_filtering.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_rare_earth_filtering.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_rare_earth_slag_slurry.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_rare_earth_slag_slurry.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_rare_earth_slag_slurry.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_rare_earth_slag_slurry.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_recycler.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_recycler.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_recycler.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_recycler.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde_128.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde_128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde_128.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_salicylaldehyde_128.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_samarium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_samarium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_samarium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_samarium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sapphire_laser_emitter.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sapphire_laser_emitter.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sapphire_laser_emitter.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sapphire_laser_emitter.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_analytic_device.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_analytic_device.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_analytic_device.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_analytic_device.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_copper_coil.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_copper_coil.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_copper_coil.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_copper_coil.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_electron_gun.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_electron_gun.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_electron_gun.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_electron_gun.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_iron_core.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_iron_core.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_iron_core.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_iron_core.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_magnet.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_magnet.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_magnet.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_magnet.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_oscilloscope.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_oscilloscope.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_oscilloscope.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_oscilloscope.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_quantrinium_sample.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_quantrinium_sample.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_quantrinium_sample.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_quantrinium_sample.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_quantum_analyser.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_quantum_analyser.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_quantum_analyser.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_quantum_analyser.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_ampoule_filled.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_ampoule_filled.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_ampoule_filled.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_ampoule_filled.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_empty.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_empty.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_empty.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_empty.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_filled.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_filled.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_filled.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_sc_test_chamber_filled.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_empty.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_empty.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_empty.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_empty.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_filled.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_filled.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_filled.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_science_catalyst_fn_47_filled.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_aluminium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_aluminium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_aluminium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_aluminium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_brass.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_brass.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_brass.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_brass.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_bronze.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_bronze.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_bronze.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_bronze.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt_steel.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt_steel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt_steel.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_cobalt_steel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_copper.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_copper.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_copper.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_copper.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_gold.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_gold.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_gold.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_gold.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_invar.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_invar.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_invar.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_invar.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_iron.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_iron.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_iron.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_iron.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_lead.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_lead.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_lead.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_lead.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nickel.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nickel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nickel.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nickel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nitinol.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nitinol.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nitinol.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_nitinol.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_silver.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_silver.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_silver.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_silver.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_steel.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_steel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_steel.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_steel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tin.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tin.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tin.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_titanium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_titanium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_titanium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_titanium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tungsten.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tungsten.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tungsten.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_tungsten.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_zinc.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_zinc.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_zinc.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_box_zinc.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_scrap_metal_recycling-6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_star_crystal.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_star_crystal.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_star_crystal.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_star_crystal.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_star_metal_plate.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_star_metal_plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_star_metal_plate.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_star_metal_plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_starfall_target_marker.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_starfall_target_marker.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_starfall_target_marker.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_starfall_target_marker.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_stone_path.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_stone_path.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_stone_path.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_stone_path.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_triaminoguanidinium_hydrochloride.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_triaminoguanidinium_hydrochloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_triaminoguanidinium_hydrochloride.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_triaminoguanidinium_hydrochloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_trichloromethane.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_trichloromethane.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_trichloromethane.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_trichloromethane.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_trichloromethane_128.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_trichloromethane_128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_trichloromethane_128.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_trichloromethane_128.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_breeder_reactor_inventory.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_breeder_reactor_inventory.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_breeder_reactor_inventory.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_breeder_reactor_inventory.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_enriched_breeder_reactor_inventory.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_enriched_breeder_reactor_inventory.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_enriched_breeder_reactor_inventory.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_enriched_breeder_reactor_inventory.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_7.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_7.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_7.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_fuel_cell_7.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_10.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_10.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_10.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_10.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2_from_yellowcake.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2_from_yellowcake.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2_from_yellowcake.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_2_from_yellowcake.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_7.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_7.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_7.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_7.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_8.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_8.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_8.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_8.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_9.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_9.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_9.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_hexafluoride_9.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_mox_fuel_cell_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_mox_fuel_cell_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_mox_fuel_cell_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_mox_fuel_cell_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_10.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_10.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_10.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_10.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_7.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_7.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_7.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_7.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_8.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_8.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_8.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_8.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_9.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_9.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_9.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_oxide_pellet_9.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_pellet_2_to_hexafluoride_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_pellet_2_to_hexafluoride_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_pellet_2_to_hexafluoride_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_pellet_2_to_hexafluoride_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_plutonium_breeding_process_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_plutonium_breeding_process_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_plutonium_breeding_process_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_plutonium_breeding_process_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_seperation_process_for_weapon_grade_plutonium.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_seperation_process_for_weapon_grade_plutonium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_seperation_process_for_weapon_grade_plutonium.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_seperation_process_for_weapon_grade_plutonium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_7.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_7.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_7.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_fuel_cell_7.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_mox_fuel_cell_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_mox_fuel_cell_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_mox_fuel_cell_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_uesed_mox_fuel_cell_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_2.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_3.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_4.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_5.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_6.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_7.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_7.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_7.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_fuel_cell_recovery_7.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_mox_fuel_cell_recovery_1.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_mox_fuel_cell_recovery_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_uranium_used_mox_fuel_cell_recovery_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_uranium_used_mox_fuel_cell_recovery_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_wankel_engine_unit.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_wankel_engine_unit.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_wankel_engine_unit.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_wankel_engine_unit.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_waterfill.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_waterfill.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_waterfill.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_waterfill.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_yellowcake.png b/bobicons/graphics/icons/_VARIANTS/apm/ap_yellowcake.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/ap_yellowcake.png rename to bobicons/graphics/icons/_VARIANTS/apm/ap_yellowcake.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-2.png b/bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-2.png rename to bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-3.png b/bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-3.png rename to bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-4.png b/bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-4.png rename to bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-5.png b/bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear-5.png rename to bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear-5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear.png b/bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/assembly-machines-gear.png rename to bobicons/graphics/icons/_VARIANTS/apm/assembly-machines-gear.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/basic-filter-inserter.png b/bobicons/graphics/icons/_VARIANTS/apm/basic-filter-inserter.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/basic-filter-inserter.png rename to bobicons/graphics/icons/_VARIANTS/apm/basic-filter-inserter.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/burner_mining_drill_mk2.png b/bobicons/graphics/icons/_VARIANTS/apm/burner_mining_drill_mk2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/burner_mining_drill_mk2.png rename to bobicons/graphics/icons/_VARIANTS/apm/burner_mining_drill_mk2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dummy.png b/bobicons/graphics/icons/_VARIANTS/apm/dummy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dummy.png rename to bobicons/graphics/icons/_VARIANTS/apm/dummy.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_input.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_input.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_input.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_input.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_output.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_output.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_output.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/ap_crating_output.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/recycling.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/recycling.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/recycling.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/recycling.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_1.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_1.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_2.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_2.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_3.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_3.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_4.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_4.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_5.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_5.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_5.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_6.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_6.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/tier_6.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/tier_6.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_forward.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_forward.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_forward.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_forward.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_reverse.png b/bobicons/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_reverse.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_reverse.png rename to bobicons/graphics/icons/_VARIANTS/apm/dynamics/unicomp_transition_reverse.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/inserter-parts.png b/bobicons/graphics/icons/_VARIANTS/apm/inserter-parts.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/inserter-parts.png rename to bobicons/graphics/icons/_VARIANTS/apm/inserter-parts.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/insulation_tape.png b/bobicons/graphics/icons/_VARIANTS/apm/insulation_tape.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/insulation_tape.png rename to bobicons/graphics/icons/_VARIANTS/apm/insulation_tape.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/nuclear-reactor-2.png b/bobicons/graphics/icons/_VARIANTS/apm/nuclear-reactor-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/nuclear-reactor-2.png rename to bobicons/graphics/icons/_VARIANTS/apm/nuclear-reactor-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/nuclear-reactor-3.png b/bobicons/graphics/icons/_VARIANTS/apm/nuclear-reactor-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/nuclear-reactor-3.png rename to bobicons/graphics/icons/_VARIANTS/apm/nuclear-reactor-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/pattern_chemestry_flame.png b/bobicons/graphics/icons/_VARIANTS/apm/pattern_chemestry_flame.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/pattern_chemestry_flame.png rename to bobicons/graphics/icons/_VARIANTS/apm/pattern_chemestry_flame.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/science-pack-wood.png b/bobicons/graphics/icons/_VARIANTS/apm/science-pack-wood.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/science-pack-wood.png rename to bobicons/graphics/icons/_VARIANTS/apm/science-pack-wood.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/scrap_metal.png b/bobicons/graphics/icons/_VARIANTS/apm/scrap_metal.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/scrap_metal.png rename to bobicons/graphics/icons/_VARIANTS/apm/scrap_metal.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/scrap_metal_box_iron.png b/bobicons/graphics/icons/_VARIANTS/apm/scrap_metal_box_iron.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/scrap_metal_box_iron.png rename to bobicons/graphics/icons/_VARIANTS/apm/scrap_metal_box_iron.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/smart-inserter-parts.png b/bobicons/graphics/icons/_VARIANTS/apm/smart-inserter-parts.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/smart-inserter-parts.png rename to bobicons/graphics/icons/_VARIANTS/apm/smart-inserter-parts.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/stack-inserter-parts.png b/bobicons/graphics/icons/_VARIANTS/apm/stack-inserter-parts.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/stack-inserter-parts.png rename to bobicons/graphics/icons/_VARIANTS/apm/stack-inserter-parts.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/apm/wood_tar.png b/bobicons/graphics/icons/_VARIANTS/apm/wood_tar.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/apm/wood_tar.png rename to bobicons/graphics/icons/_VARIANTS/apm/wood_tar.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/basic-electronic-components-1.png b/bobicons/graphics/icons/_VARIANTS/basic-electronic-components-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/basic-electronic-components-1.png rename to bobicons/graphics/icons/_VARIANTS/basic-electronic-components-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/bearing-1.png b/bobicons/graphics/icons/_VARIANTS/bearing-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/bearing-1.png rename to bobicons/graphics/icons/_VARIANTS/bearing-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/bio-computer.png b/bobicons/graphics/icons/_VARIANTS/bio-computer.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/bio-computer.png rename to bobicons/graphics/icons/_VARIANTS/bio-computer.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/black-brick.png b/bobicons/graphics/icons/_VARIANTS/black-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/black-brick.png rename to bobicons/graphics/icons/_VARIANTS/black-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/blue-brick.png b/bobicons/graphics/icons/_VARIANTS/blue-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/blue-brick.png rename to bobicons/graphics/icons/_VARIANTS/blue-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/board.png b/bobicons/graphics/icons/_VARIANTS/board/board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/board.png rename to bobicons/graphics/icons/_VARIANTS/board/board.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-1.png b/bobicons/graphics/icons/_VARIANTS/board/circuit-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-1.png rename to bobicons/graphics/icons/_VARIANTS/board/circuit-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-2.png b/bobicons/graphics/icons/_VARIANTS/board/circuit-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-2.png rename to bobicons/graphics/icons/_VARIANTS/board/circuit-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-3.png b/bobicons/graphics/icons/_VARIANTS/board/circuit-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/circuit-3.png rename to bobicons/graphics/icons/_VARIANTS/board/circuit-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/etched-2.png b/bobicons/graphics/icons/_VARIANTS/board/etched-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/etched-2.png rename to bobicons/graphics/icons/_VARIANTS/board/etched-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/etched-3.png b/bobicons/graphics/icons/_VARIANTS/board/etched-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/etched-3.png rename to bobicons/graphics/icons/_VARIANTS/board/etched-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-1.png b/bobicons/graphics/icons/_VARIANTS/board/metallized-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-1.png rename to bobicons/graphics/icons/_VARIANTS/board/metallized-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-2.png b/bobicons/graphics/icons/_VARIANTS/board/metallized-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-2.png rename to bobicons/graphics/icons/_VARIANTS/board/metallized-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-3.png b/bobicons/graphics/icons/_VARIANTS/board/metallized-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/board/metallized-3.png rename to bobicons/graphics/icons/_VARIANTS/board/metallized-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/brass-plate.png b/bobicons/graphics/icons/_VARIANTS/brass-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/brass-plate.png rename to bobicons/graphics/icons/_VARIANTS/brass-plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/brick-clay-graphite.png b/bobicons/graphics/icons/_VARIANTS/brick-clay-graphite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/brick-clay-graphite.png rename to bobicons/graphics/icons/_VARIANTS/brick-clay-graphite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/brick-clay.png b/bobicons/graphics/icons/_VARIANTS/brick-clay.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/brick-clay.png rename to bobicons/graphics/icons/_VARIANTS/brick-clay.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/brick-spinel.png b/bobicons/graphics/icons/_VARIANTS/brick-spinel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/brick-spinel.png rename to bobicons/graphics/icons/_VARIANTS/brick-spinel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/brick-zirconia.png b/bobicons/graphics/icons/_VARIANTS/brick-zirconia.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/brick-zirconia.png rename to bobicons/graphics/icons/_VARIANTS/brick-zirconia.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/bronze-plate.png b/bobicons/graphics/icons/_VARIANTS/bronze-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/bronze-plate.png rename to bobicons/graphics/icons/_VARIANTS/bronze-plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/cargo-wagon-2.png b/bobicons/graphics/icons/_VARIANTS/cargo-wagon-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/cargo-wagon-2.png rename to bobicons/graphics/icons/_VARIANTS/cargo-wagon-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/NaOH.png b/bobicons/graphics/icons/_VARIANTS/chem/NaOH.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/NaOH.png rename to bobicons/graphics/icons/_VARIANTS/chem/NaOH.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/distilled-water.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/distilled-water.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/distilled-water.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/distilled-water.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/gray-water.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/gray-water.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/gray-water.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/gray-water.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/nitric-acid.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/nitric-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/nitric-acid.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/nitric-acid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/nitric-sulfuric.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/nitric-sulfuric.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/nitric-sulfuric.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/nitric-sulfuric.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/oleum.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/oleum.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/oleum.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/oleum.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/phosphoric-acid.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/phosphoric-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/phosphoric-acid.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/phosphoric-acid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/waste-slurry.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/waste-slurry.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/waste-slurry.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/waste-slurry.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/waste-water.png b/bobicons/graphics/icons/_VARIANTS/chem/aqueous/waste-water.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/aqueous/waste-water.png rename to bobicons/graphics/icons/_VARIANTS/chem/aqueous/waste-water.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/chlorine.png b/bobicons/graphics/icons/_VARIANTS/chem/chlorine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/chlorine.png rename to bobicons/graphics/icons/_VARIANTS/chem/chlorine.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/benzene.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/benzene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/benzene.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/benzene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/butadiene.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/butadiene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/butadiene.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/butadiene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/heavy-naptha.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/heavy-naptha.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/heavy-naptha.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/heavy-naptha.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/methane.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/methane.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/methane.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/methane.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/propylene.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/propylene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/propylene.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/propylene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/styrene.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/styrene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrocarbon/styrene.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrocarbon/styrene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogen.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogen.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogen.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogen.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/ammonia.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/ammonia.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/ammonia.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/ammonia.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-chloride.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-chloride.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-fluoride.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-fluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-fluoride.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-fluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-sulfide.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-sulfide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-sulfide.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/hydrogen-sulfide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/silane.png b/bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/silane.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/hydrogenated/silane.png rename to bobicons/graphics/icons/_VARIANTS/chem/hydrogenated/silane.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/misc/silicon-tetrachloride.png b/bobicons/graphics/icons/_VARIANTS/chem/misc/silicon-tetrachloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/misc/silicon-tetrachloride.png rename to bobicons/graphics/icons/_VARIANTS/chem/misc/silicon-tetrachloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/misc/titanium-tetrachloride.png b/bobicons/graphics/icons/_VARIANTS/chem/misc/titanium-tetrachloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/misc/titanium-tetrachloride.png rename to bobicons/graphics/icons/_VARIANTS/chem/misc/titanium-tetrachloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/natural-gas.png b/bobicons/graphics/icons/_VARIANTS/chem/natural-gas.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/natural-gas.png rename to bobicons/graphics/icons/_VARIANTS/chem/natural-gas.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/nitrogen.png b/bobicons/graphics/icons/_VARIANTS/chem/nitrogen.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/nitrogen.png rename to bobicons/graphics/icons/_VARIANTS/chem/nitrogen.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/blasting-fluid.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/blasting-fluid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/blasting-fluid.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/blasting-fluid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/carbon-tetrafluoride.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/carbon-tetrafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/carbon-tetrafluoride.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/carbon-tetrafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/chlorobenzene.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/chlorobenzene.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/chlorobenzene.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/chlorobenzene.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/dimethyl-carbonate.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/dimethyl-carbonate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/dimethyl-carbonate.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/dimethyl-carbonate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epichlorohydrin.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/epichlorohydrin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epichlorohydrin.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/epichlorohydrin.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epoxy-hardener.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/epoxy-hardener.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epoxy-hardener.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/epoxy-hardener.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epoxy-resin.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/epoxy-resin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/epoxy-resin.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/epoxy-resin.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/ethylene-dichloride.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/ethylene-dichloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/ethylene-dichloride.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/ethylene-dichloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/formaldehyde.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/formaldehyde.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/formaldehyde.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/formaldehyde.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/formic-acid.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/formic-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/formic-acid.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/formic-acid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/methanol.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/methanol.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/methanol.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/methanol.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/natural-gas.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/natural-gas.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/natural-gas.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/natural-gas.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/uncured-epoxy.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/uncured-epoxy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/uncured-epoxy.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/uncured-epoxy.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/uncured-resol.png b/bobicons/graphics/icons/_VARIANTS/chem/other-organic/uncured-resol.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/other-organic/uncured-resol.png rename to bobicons/graphics/icons/_VARIANTS/chem/other-organic/uncured-resol.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/carbon-dioxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/carbon-dioxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/carbon-dioxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/carbon-dioxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/carbon-monoxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/carbon-monoxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/carbon-monoxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/carbon-monoxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/flue-gas.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/flue-gas.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/flue-gas.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/flue-gas.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/nitrogen-dioxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/nitrogen-dioxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/nitrogen-dioxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/nitrogen-dioxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/nitrogen-monoxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/nitrogen-monoxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/nitrogen-monoxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/nitrogen-monoxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/sulfur-dioxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/sulfur-dioxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/sulfur-dioxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/sulfur-dioxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/sulfur-trioxide.png b/bobicons/graphics/icons/_VARIANTS/chem/oxide/sulfur-trioxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxide/sulfur-trioxide.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxide/sulfur-trioxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxygen.png b/bobicons/graphics/icons/_VARIANTS/chem/oxygen.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/oxygen.png rename to bobicons/graphics/icons/_VARIANTS/chem/oxygen.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chem/phenol.png b/bobicons/graphics/icons/_VARIANTS/chem/phenol.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chem/phenol.png rename to bobicons/graphics/icons/_VARIANTS/chem/phenol.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/chromium.png b/bobicons/graphics/icons/_VARIANTS/chromium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/chromium.png rename to bobicons/graphics/icons/_VARIANTS/chromium.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/coke.png b/bobicons/graphics/icons/_VARIANTS/coke.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/coke.png rename to bobicons/graphics/icons/_VARIANTS/coke.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/borax.png b/bobicons/graphics/icons/_VARIANTS/concentrate/borax.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/borax.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/borax.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/cassiterite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/cassiterite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/cassiterite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/cassiterite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chalcocite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/chalcocite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chalcocite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/chalcocite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chalcopyrite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/chalcopyrite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chalcopyrite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/chalcopyrite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chromite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/chromite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/chromite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/chromite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/clay.png b/bobicons/graphics/icons/_VARIANTS/concentrate/clay.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/clay.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/clay.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/fluorite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/fluorite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/fluorite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/fluorite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/galena.png b/bobicons/graphics/icons/_VARIANTS/concentrate/galena.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/galena.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/galena.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/heavy-sand.png b/bobicons/graphics/icons/_VARIANTS/concentrate/heavy-sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/heavy-sand.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/heavy-sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/hematite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/hematite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/hematite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/hematite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/hydroxylapatite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/hydroxylapatite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/hydroxylapatite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/hydroxylapatite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/ilmenite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/ilmenite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/ilmenite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/ilmenite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/lithium-concentrate.png b/bobicons/graphics/icons/_VARIANTS/concentrate/lithium-concentrate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/lithium-concentrate.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/lithium-concentrate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/magnetite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/magnetite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/magnetite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/magnetite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/molybdenite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/molybdenite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/molybdenite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/molybdenite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/monazite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/monazite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/monazite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/monazite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pentlandite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/pentlandite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pentlandite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/pentlandite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pitchblende.png b/bobicons/graphics/icons/_VARIANTS/concentrate/pitchblende.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pitchblende.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/pitchblende.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pyrolusite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/pyrolusite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/pyrolusite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/pyrolusite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/saltpeter.png b/bobicons/graphics/icons/_VARIANTS/concentrate/saltpeter.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/saltpeter.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/saltpeter.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/scheelite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/scheelite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/scheelite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/scheelite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/sphalerite.png b/bobicons/graphics/icons/_VARIANTS/concentrate/sphalerite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/sphalerite.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/sphalerite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/zircon.png b/bobicons/graphics/icons/_VARIANTS/concentrate/zircon.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/concentrate/zircon.png rename to bobicons/graphics/icons/_VARIANTS/concentrate/zircon.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/condensed-cells.png b/bobicons/graphics/icons/_VARIANTS/condensed-cells.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/condensed-cells.png rename to bobicons/graphics/icons/_VARIANTS/condensed-cells.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/control-1.png b/bobicons/graphics/icons/_VARIANTS/control-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/control-1.png rename to bobicons/graphics/icons/_VARIANTS/control-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/control-2.png b/bobicons/graphics/icons/_VARIANTS/control-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/control-2.png rename to bobicons/graphics/icons/_VARIANTS/control-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/control-3.png b/bobicons/graphics/icons/_VARIANTS/control-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/control-3.png rename to bobicons/graphics/icons/_VARIANTS/control-3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/coolant.png b/bobicons/graphics/icons/_VARIANTS/coolant.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/coolant.png rename to bobicons/graphics/icons/_VARIANTS/coolant.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/copper.png b/bobicons/graphics/icons/_VARIANTS/copper.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/copper.png rename to bobicons/graphics/icons/_VARIANTS/copper.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/cotton.png b/bobicons/graphics/icons/_VARIANTS/cotton.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/cotton.png rename to bobicons/graphics/icons/_VARIANTS/cotton.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/electronic-components-1.png b/bobicons/graphics/icons/_VARIANTS/electronic-components-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/electronic-components-1.png rename to bobicons/graphics/icons/_VARIANTS/electronic-components-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid.png b/bobicons/graphics/icons/_VARIANTS/energy-liquid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid.png rename to bobicons/graphics/icons/_VARIANTS/energy-liquid.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid2.png b/bobicons/graphics/icons/_VARIANTS/energy-liquid2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid2.png rename to bobicons/graphics/icons/_VARIANTS/energy-liquid2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid3.png b/bobicons/graphics/icons/_VARIANTS/energy-liquid3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/energy-liquid3.png rename to bobicons/graphics/icons/_VARIANTS/energy-liquid3.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/fibreglass-board1.png b/bobicons/graphics/icons/_VARIANTS/fibreglass-board1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/fibreglass-board1.png rename to bobicons/graphics/icons/_VARIANTS/fibreglass-board1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/first-aid-1.png b/bobicons/graphics/icons/_VARIANTS/first-aid-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/first-aid-1.png rename to bobicons/graphics/icons/_VARIANTS/first-aid-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/first-aid-2.png b/bobicons/graphics/icons/_VARIANTS/first-aid-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/first-aid-2.png rename to bobicons/graphics/icons/_VARIANTS/first-aid-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/fluid-wagon-2.png b/bobicons/graphics/icons/_VARIANTS/fluid-wagon-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/fluid-wagon-2.png rename to bobicons/graphics/icons/_VARIANTS/fluid-wagon-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/fuse.png b/bobicons/graphics/icons/_VARIANTS/fuse.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/fuse.png rename to bobicons/graphics/icons/_VARIANTS/fuse.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/fused-basalt.png b/bobicons/graphics/icons/_VARIANTS/fused-basalt.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/fused-basalt.png rename to bobicons/graphics/icons/_VARIANTS/fused-basalt.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/fused-quartz.png b/bobicons/graphics/icons/_VARIANTS/fused-quartz.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/fused-quartz.png rename to bobicons/graphics/icons/_VARIANTS/fused-quartz.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/glass-tile.png b/bobicons/graphics/icons/_VARIANTS/glass-tile.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/glass-tile.png rename to bobicons/graphics/icons/_VARIANTS/glass-tile.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/glass.png b/bobicons/graphics/icons/_VARIANTS/glass.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/glass.png rename to bobicons/graphics/icons/_VARIANTS/glass.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/gold-ingot.png b/bobicons/graphics/icons/_VARIANTS/gold-ingot.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/gold-ingot.png rename to bobicons/graphics/icons/_VARIANTS/gold-ingot.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/green-brick.png b/bobicons/graphics/icons/_VARIANTS/green-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/green-brick.png rename to bobicons/graphics/icons/_VARIANTS/green-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/latex.png b/bobicons/graphics/icons/_VARIANTS/latex.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/latex.png rename to bobicons/graphics/icons/_VARIANTS/latex.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/micro-cell.png b/bobicons/graphics/icons/_VARIANTS/micro-cell.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/micro-cell.png rename to bobicons/graphics/icons/_VARIANTS/micro-cell.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/milled-uranium-ore.png b/bobicons/graphics/icons/_VARIANTS/milled-uranium-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/milled-uranium-ore.png rename to bobicons/graphics/icons/_VARIANTS/milled-uranium-ore.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/nitride-block.png b/bobicons/graphics/icons/_VARIANTS/nitride-block.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/nitride-block.png rename to bobicons/graphics/icons/_VARIANTS/nitride-block.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/nitrocellulose.png b/bobicons/graphics/icons/_VARIANTS/nitrocellulose.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/nitrocellulose.png rename to bobicons/graphics/icons/_VARIANTS/nitrocellulose.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oceanic-salt.png b/bobicons/graphics/icons/_VARIANTS/oceanic-salt.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oceanic-salt.png rename to bobicons/graphics/icons/_VARIANTS/oceanic-salt.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/optimal-fuel.png b/bobicons/graphics/icons/_VARIANTS/optimal-fuel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/optimal-fuel.png rename to bobicons/graphics/icons/_VARIANTS/optimal-fuel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/aluminum-hydroxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/aluminum-hydroxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/aluminum-hydroxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/aluminum-hydroxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/aluminum-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/aluminum-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/aluminum-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/aluminum-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/boron-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/boron-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/boron-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/boron-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/calcium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/calcium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/calcium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/calcium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/chromium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/chromium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/chromium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/chromium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/cobalt-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/cobalt-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/cobalt-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/cobalt-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/cuprous-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/cuprous-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/cuprous-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/cuprous-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/lead-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/lead-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/lead-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/lead-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/lithium-hydroxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/lithium-hydroxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/lithium-hydroxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/lithium-hydroxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/magnesium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/magnesium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/magnesium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/magnesium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/nickel-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/nickel-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/nickel-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/nickel-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/re-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/re-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/re-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/re-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/sodium-hydroxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/sodium-hydroxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/sodium-hydroxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/sodium-hydroxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/titanium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/titanium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/titanium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/titanium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/tungsten-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/tungsten-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/tungsten-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/tungsten-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-238-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/uranium-238-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-238-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/uranium-238-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-fuel-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/uranium-fuel-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-fuel-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/uranium-fuel-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-weapons-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/uranium-weapons-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/uranium-weapons-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/uranium-weapons-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/vanadium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/vanadium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/vanadium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/vanadium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/zinc-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/zinc-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/zinc-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/zinc-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/zirconium-oxide.png b/bobicons/graphics/icons/_VARIANTS/oxide/zirconium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/oxide/zirconium-oxide.png rename to bobicons/graphics/icons/_VARIANTS/oxide/zirconium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/plastic-pellets.png b/bobicons/graphics/icons/_VARIANTS/plastic-pellets.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/plastic-pellets.png rename to bobicons/graphics/icons/_VARIANTS/plastic-pellets.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/powder-1.png b/bobicons/graphics/icons/_VARIANTS/powder-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/powder-1.png rename to bobicons/graphics/icons/_VARIANTS/powder-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/powder-2.png b/bobicons/graphics/icons/_VARIANTS/powder-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/powder-2.png rename to bobicons/graphics/icons/_VARIANTS/powder-2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/purple-brick.png b/bobicons/graphics/icons/_VARIANTS/purple-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/purple-brick.png rename to bobicons/graphics/icons/_VARIANTS/purple-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/quantum-particle.png b/bobicons/graphics/icons/_VARIANTS/quantum-particle.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/quantum-particle.png rename to bobicons/graphics/icons/_VARIANTS/quantum-particle.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/quantum-waste.png b/bobicons/graphics/icons/_VARIANTS/quantum-waste.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/quantum-waste.png rename to bobicons/graphics/icons/_VARIANTS/quantum-waste.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/quartz-sand.png b/bobicons/graphics/icons/_VARIANTS/quartz-sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/quartz-sand.png rename to bobicons/graphics/icons/_VARIANTS/quartz-sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/copper-ore.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/copper-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/copper-ore.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/copper-ore.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/evaporites.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/evaporites.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/evaporites.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/evaporites.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/igneous-sulfide.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/igneous-sulfide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/igneous-sulfide.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/igneous-sulfide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/iron-ore.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/iron-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/iron-ore.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/iron-ore.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/laterite.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/laterite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/laterite.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/laterite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/magnetic.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/magnetic.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/magnetic.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/magnetic.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/massive-sulfide.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/massive-sulfide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/massive-sulfide.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/massive-sulfide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/phosphorite.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/phosphorite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/phosphorite.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/phosphorite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/sand.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/sand.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/skarn.png b/bobicons/graphics/icons/_VARIANTS/raw-resource/skarn.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw-resource/skarn.png rename to bobicons/graphics/icons/_VARIANTS/raw-resource/skarn.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/borax.png b/bobicons/graphics/icons/_VARIANTS/raw/borax.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/borax.png rename to bobicons/graphics/icons/_VARIANTS/raw/borax.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/cassiterite.png b/bobicons/graphics/icons/_VARIANTS/raw/cassiterite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/cassiterite.png rename to bobicons/graphics/icons/_VARIANTS/raw/cassiterite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chalcocite.png b/bobicons/graphics/icons/_VARIANTS/raw/chalcocite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chalcocite.png rename to bobicons/graphics/icons/_VARIANTS/raw/chalcocite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chalcopyrite.png b/bobicons/graphics/icons/_VARIANTS/raw/chalcopyrite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chalcopyrite.png rename to bobicons/graphics/icons/_VARIANTS/raw/chalcopyrite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chromite.png b/bobicons/graphics/icons/_VARIANTS/raw/chromite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/chromite.png rename to bobicons/graphics/icons/_VARIANTS/raw/chromite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/clay.png b/bobicons/graphics/icons/_VARIANTS/raw/clay.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/clay.png rename to bobicons/graphics/icons/_VARIANTS/raw/clay.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/fayalite.png b/bobicons/graphics/icons/_VARIANTS/raw/fayalite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/fayalite.png rename to bobicons/graphics/icons/_VARIANTS/raw/fayalite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/fluorite.png b/bobicons/graphics/icons/_VARIANTS/raw/fluorite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/fluorite.png rename to bobicons/graphics/icons/_VARIANTS/raw/fluorite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/galena.png b/bobicons/graphics/icons/_VARIANTS/raw/galena.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/galena.png rename to bobicons/graphics/icons/_VARIANTS/raw/galena.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/gravel.png b/bobicons/graphics/icons/_VARIANTS/raw/gravel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/gravel.png rename to bobicons/graphics/icons/_VARIANTS/raw/gravel.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/hematite.png b/bobicons/graphics/icons/_VARIANTS/raw/hematite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/hematite.png rename to bobicons/graphics/icons/_VARIANTS/raw/hematite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/inert-waste.png b/bobicons/graphics/icons/_VARIANTS/raw/inert-waste.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/inert-waste.png rename to bobicons/graphics/icons/_VARIANTS/raw/inert-waste.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/limestone.png b/bobicons/graphics/icons/_VARIANTS/raw/limestone.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/limestone.png rename to bobicons/graphics/icons/_VARIANTS/raw/limestone.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/magnesite.png b/bobicons/graphics/icons/_VARIANTS/raw/magnesite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/magnesite.png rename to bobicons/graphics/icons/_VARIANTS/raw/magnesite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/monazite.png b/bobicons/graphics/icons/_VARIANTS/raw/monazite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/monazite.png rename to bobicons/graphics/icons/_VARIANTS/raw/monazite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/phosphate-rock.png b/bobicons/graphics/icons/_VARIANTS/raw/phosphate-rock.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/phosphate-rock.png rename to bobicons/graphics/icons/_VARIANTS/raw/phosphate-rock.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/rutile.png b/bobicons/graphics/icons/_VARIANTS/raw/rutile.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/rutile.png rename to bobicons/graphics/icons/_VARIANTS/raw/rutile.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sand.png b/bobicons/graphics/icons/_VARIANTS/raw/sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sand.png rename to bobicons/graphics/icons/_VARIANTS/raw/sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/scheelite.png b/bobicons/graphics/icons/_VARIANTS/raw/scheelite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/scheelite.png rename to bobicons/graphics/icons/_VARIANTS/raw/scheelite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/slag.png b/bobicons/graphics/icons/_VARIANTS/raw/slag.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/slag.png rename to bobicons/graphics/icons/_VARIANTS/raw/slag.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sludge.png b/bobicons/graphics/icons/_VARIANTS/raw/sludge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sludge.png rename to bobicons/graphics/icons/_VARIANTS/raw/sludge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sphalerite.png b/bobicons/graphics/icons/_VARIANTS/raw/sphalerite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/sphalerite.png rename to bobicons/graphics/icons/_VARIANTS/raw/sphalerite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/vanadium-magnetite.png b/bobicons/graphics/icons/_VARIANTS/raw/vanadium-magnetite.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/vanadium-magnetite.png rename to bobicons/graphics/icons/_VARIANTS/raw/vanadium-magnetite.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/vanadium-slag.png b/bobicons/graphics/icons/_VARIANTS/raw/vanadium-slag.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/vanadium-slag.png rename to bobicons/graphics/icons/_VARIANTS/raw/vanadium-slag.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/raw/zirconia.png b/bobicons/graphics/icons/_VARIANTS/raw/zirconia.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/raw/zirconia.png rename to bobicons/graphics/icons/_VARIANTS/raw/zirconia.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/red-brick.png b/bobicons/graphics/icons/_VARIANTS/red-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/red-brick.png rename to bobicons/graphics/icons/_VARIANTS/red-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/rod-4.png b/bobicons/graphics/icons/_VARIANTS/rod-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/rod-4.png rename to bobicons/graphics/icons/_VARIANTS/rod-4.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/rubber.png b/bobicons/graphics/icons/_VARIANTS/rubber.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/rubber.png rename to bobicons/graphics/icons/_VARIANTS/rubber.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/ammonium-vanadate.png b/bobicons/graphics/icons/_VARIANTS/salt/ammonium-vanadate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/ammonium-vanadate.png rename to bobicons/graphics/icons/_VARIANTS/salt/ammonium-vanadate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/calcium-chloride.png b/bobicons/graphics/icons/_VARIANTS/salt/calcium-chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/calcium-chloride.png rename to bobicons/graphics/icons/_VARIANTS/salt/calcium-chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/calcium-sulfate.png b/bobicons/graphics/icons/_VARIANTS/salt/calcium-sulfate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/calcium-sulfate.png rename to bobicons/graphics/icons/_VARIANTS/salt/calcium-sulfate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/cryolite-mixture.png b/bobicons/graphics/icons/_VARIANTS/salt/cryolite-mixture.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/cryolite-mixture.png rename to bobicons/graphics/icons/_VARIANTS/salt/cryolite-mixture.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-perchlorate.png b/bobicons/graphics/icons/_VARIANTS/salt/lithium-perchlorate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-perchlorate.png rename to bobicons/graphics/icons/_VARIANTS/salt/lithium-perchlorate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-tetrafluoroborate.png b/bobicons/graphics/icons/_VARIANTS/salt/lithium-tetrafluoroborate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-tetrafluoroborate.png rename to bobicons/graphics/icons/_VARIANTS/salt/lithium-tetrafluoroborate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-titanate.png b/bobicons/graphics/icons/_VARIANTS/salt/lithium-titanate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/lithium-titanate.png rename to bobicons/graphics/icons/_VARIANTS/salt/lithium-titanate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/magnesium-chloride.png b/bobicons/graphics/icons/_VARIANTS/salt/magnesium-chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/magnesium-chloride.png rename to bobicons/graphics/icons/_VARIANTS/salt/magnesium-chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/saltpeter.png b/bobicons/graphics/icons/_VARIANTS/salt/saltpeter.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/saltpeter.png rename to bobicons/graphics/icons/_VARIANTS/salt/saltpeter.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/silicon-carbide.png b/bobicons/graphics/icons/_VARIANTS/salt/silicon-carbide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/silicon-carbide.png rename to bobicons/graphics/icons/_VARIANTS/salt/silicon-carbide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/silicon-nitride.png b/bobicons/graphics/icons/_VARIANTS/salt/silicon-nitride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/silicon-nitride.png rename to bobicons/graphics/icons/_VARIANTS/salt/silicon-nitride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-carbonate.png b/bobicons/graphics/icons/_VARIANTS/salt/sodium-carbonate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-carbonate.png rename to bobicons/graphics/icons/_VARIANTS/salt/sodium-carbonate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-chloride.png b/bobicons/graphics/icons/_VARIANTS/salt/sodium-chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-chloride.png rename to bobicons/graphics/icons/_VARIANTS/salt/sodium-chloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-chromate.png b/bobicons/graphics/icons/_VARIANTS/salt/sodium-chromate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-chromate.png rename to bobicons/graphics/icons/_VARIANTS/salt/sodium-chromate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-sulfate.png b/bobicons/graphics/icons/_VARIANTS/salt/sodium-sulfate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/sodium-sulfate.png rename to bobicons/graphics/icons/_VARIANTS/salt/sodium-sulfate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/tungsten-carbide.png b/bobicons/graphics/icons/_VARIANTS/salt/tungsten-carbide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/tungsten-carbide.png rename to bobicons/graphics/icons/_VARIANTS/salt/tungsten-carbide.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-238-hexafluoride.png b/bobicons/graphics/icons/_VARIANTS/salt/uranium-238-hexafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-238-hexafluoride.png rename to bobicons/graphics/icons/_VARIANTS/salt/uranium-238-hexafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-fuel-hexafluoride.png b/bobicons/graphics/icons/_VARIANTS/salt/uranium-fuel-hexafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-fuel-hexafluoride.png rename to bobicons/graphics/icons/_VARIANTS/salt/uranium-fuel-hexafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-natural-hexafluoride.png b/bobicons/graphics/icons/_VARIANTS/salt/uranium-natural-hexafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-natural-hexafluoride.png rename to bobicons/graphics/icons/_VARIANTS/salt/uranium-natural-hexafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-weapons-hexafluoride.png b/bobicons/graphics/icons/_VARIANTS/salt/uranium-weapons-hexafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranium-weapons-hexafluoride.png rename to bobicons/graphics/icons/_VARIANTS/salt/uranium-weapons-hexafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranyl-nitrate.png b/bobicons/graphics/icons/_VARIANTS/salt/uranyl-nitrate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/uranyl-nitrate.png rename to bobicons/graphics/icons/_VARIANTS/salt/uranyl-nitrate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/salt/zirconium-tetrachloride.png b/bobicons/graphics/icons/_VARIANTS/salt/zirconium-tetrachloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/salt/zirconium-tetrachloride.png rename to bobicons/graphics/icons/_VARIANTS/salt/zirconium-tetrachloride.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sand.png b/bobicons/graphics/icons/_VARIANTS/sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sand.png rename to bobicons/graphics/icons/_VARIANTS/sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/shaft-0.png b/bobicons/graphics/icons/_VARIANTS/shaft-0.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/shaft-0.png rename to bobicons/graphics/icons/_VARIANTS/shaft-0.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/shaft-1.png b/bobicons/graphics/icons/_VARIANTS/shaft-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/shaft-1.png rename to bobicons/graphics/icons/_VARIANTS/shaft-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/silicon-boule.png b/bobicons/graphics/icons/_VARIANTS/silicon-boule.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/silicon-boule.png rename to bobicons/graphics/icons/_VARIANTS/silicon-boule.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/silicon-wafer1.png b/bobicons/graphics/icons/_VARIANTS/silicon-wafer1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/silicon-wafer1.png rename to bobicons/graphics/icons/_VARIANTS/silicon-wafer1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/silo3-icon.png b/bobicons/graphics/icons/_VARIANTS/silo3-icon.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/silo3-icon.png rename to bobicons/graphics/icons/_VARIANTS/silo3-icon.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/silo3-icon2.png b/bobicons/graphics/icons/_VARIANTS/silo3-icon2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/silo3-icon2.png rename to bobicons/graphics/icons/_VARIANTS/silo3-icon2.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/solder-1-plate.png b/bobicons/graphics/icons/_VARIANTS/solder-1-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/solder-1-plate.png rename to bobicons/graphics/icons/_VARIANTS/solder-1-plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/solder-2-plate.png b/bobicons/graphics/icons/_VARIANTS/solder-2-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/solder-2-plate.png rename to bobicons/graphics/icons/_VARIANTS/solder-2-plate.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/solder-flux.png b/bobicons/graphics/icons/_VARIANTS/solder-flux.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/solder-flux.png rename to bobicons/graphics/icons/_VARIANTS/solder-flux.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/solid-sand.png b/bobicons/graphics/icons/_VARIANTS/solid-sand.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/solid-sand.png rename to bobicons/graphics/icons/_VARIANTS/solid-sand.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/gold-sponge.png b/bobicons/graphics/icons/_VARIANTS/sponge/gold-sponge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/gold-sponge.png rename to bobicons/graphics/icons/_VARIANTS/sponge/gold-sponge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/platinum-sponge.png b/bobicons/graphics/icons/_VARIANTS/sponge/platinum-sponge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/platinum-sponge.png rename to bobicons/graphics/icons/_VARIANTS/sponge/platinum-sponge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/raw-iron.png b/bobicons/graphics/icons/_VARIANTS/sponge/raw-iron.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/raw-iron.png rename to bobicons/graphics/icons/_VARIANTS/sponge/raw-iron.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/silver-sponge.png b/bobicons/graphics/icons/_VARIANTS/sponge/silver-sponge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/silver-sponge.png rename to bobicons/graphics/icons/_VARIANTS/sponge/silver-sponge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/titanium-sponge.png b/bobicons/graphics/icons/_VARIANTS/sponge/titanium-sponge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/titanium-sponge.png rename to bobicons/graphics/icons/_VARIANTS/sponge/titanium-sponge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/tungsten-powder.png b/bobicons/graphics/icons/_VARIANTS/sponge/tungsten-powder.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/tungsten-powder.png rename to bobicons/graphics/icons/_VARIANTS/sponge/tungsten-powder.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/zirconium-sponge.png b/bobicons/graphics/icons/_VARIANTS/sponge/zirconium-sponge.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/sponge/zirconium-sponge.png rename to bobicons/graphics/icons/_VARIANTS/sponge/zirconium-sponge.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/steel-billet.png b/bobicons/graphics/icons/_VARIANTS/steel-billet.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/steel-billet.png rename to bobicons/graphics/icons/_VARIANTS/steel-billet.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/surfactant.png b/bobicons/graphics/icons/_VARIANTS/surfactant.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/surfactant.png rename to bobicons/graphics/icons/_VARIANTS/surfactant.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/tech-data-pack-1.png b/bobicons/graphics/icons/_VARIANTS/tech-data-pack-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/tech-data-pack-1.png rename to bobicons/graphics/icons/_VARIANTS/tech-data-pack-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/titanium-ingot.png b/bobicons/graphics/icons/_VARIANTS/titanium-ingot.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/titanium-ingot.png rename to bobicons/graphics/icons/_VARIANTS/titanium-ingot.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/tooling-1.png b/bobicons/graphics/icons/_VARIANTS/tooling-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/tooling-1.png rename to bobicons/graphics/icons/_VARIANTS/tooling-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/tungsten-cermet.png b/bobicons/graphics/icons/_VARIANTS/tungsten-cermet.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/tungsten-cermet.png rename to bobicons/graphics/icons/_VARIANTS/tungsten-cermet.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/unstable-explosives.png b/bobicons/graphics/icons/_VARIANTS/unstable-explosives.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/unstable-explosives.png rename to bobicons/graphics/icons/_VARIANTS/unstable-explosives.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/uranium-238-ingot.png b/bobicons/graphics/icons/_VARIANTS/uranium-238-ingot.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/uranium-238-ingot.png rename to bobicons/graphics/icons/_VARIANTS/uranium-238-ingot.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/uranium-weapons-ingot.png b/bobicons/graphics/icons/_VARIANTS/uranium-weapons-ingot.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/uranium-weapons-ingot.png rename to bobicons/graphics/icons/_VARIANTS/uranium-weapons-ingot.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/waffer.png b/bobicons/graphics/icons/_VARIANTS/waffer.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/waffer.png rename to bobicons/graphics/icons/_VARIANTS/waffer.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/wheel-1.png b/bobicons/graphics/icons/_VARIANTS/wheel-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/wheel-1.png rename to bobicons/graphics/icons/_VARIANTS/wheel-1.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/wood-resin.png b/bobicons/graphics/icons/_VARIANTS/wood-resin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/wood-resin.png rename to bobicons/graphics/icons/_VARIANTS/wood-resin.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/yellow-brick.png b/bobicons/graphics/icons/_VARIANTS/yellow-brick.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/yellow-brick.png rename to bobicons/graphics/icons/_VARIANTS/yellow-brick.png diff --git a/bobicons_1.1.2/graphics/icons/_VARIANTS/zinc-ingot.png b/bobicons/graphics/icons/_VARIANTS/zinc-ingot.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/_VARIANTS/zinc-ingot.png rename to bobicons/graphics/icons/_VARIANTS/zinc-ingot.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-acid-128.png b/bobicons/graphics/icons/alien/alien-acid-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-acid-128.png rename to bobicons/graphics/icons/alien/alien-acid-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-128.png b/bobicons/graphics/icons/alien/alien-artifact-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-128.png rename to bobicons/graphics/icons/alien/alien-artifact-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-2-128.png b/bobicons/graphics/icons/alien/alien-artifact-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-2-128.png rename to bobicons/graphics/icons/alien/alien-artifact-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-blue-128.png b/bobicons/graphics/icons/alien/alien-artifact-blue-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-blue-128.png rename to bobicons/graphics/icons/alien/alien-artifact-blue-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-green-128.png b/bobicons/graphics/icons/alien/alien-artifact-green-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-green-128.png rename to bobicons/graphics/icons/alien/alien-artifact-green-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-orange-128.png b/bobicons/graphics/icons/alien/alien-artifact-orange-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-orange-128.png rename to bobicons/graphics/icons/alien/alien-artifact-orange-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-purple-128.png b/bobicons/graphics/icons/alien/alien-artifact-purple-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-purple-128.png rename to bobicons/graphics/icons/alien/alien-artifact-purple-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-red-128.png b/bobicons/graphics/icons/alien/alien-artifact-red-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-red-128.png rename to bobicons/graphics/icons/alien/alien-artifact-red-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-artifact-yellow-128.png b/bobicons/graphics/icons/alien/alien-artifact-yellow-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-artifact-yellow-128.png rename to bobicons/graphics/icons/alien/alien-artifact-yellow-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy-128.png b/bobicons/graphics/icons/alien/alien-blue-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy-128.png rename to bobicons/graphics/icons/alien/alien-blue-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy1-128.png b/bobicons/graphics/icons/alien/alien-blue-alloy1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy1-128.png rename to bobicons/graphics/icons/alien/alien-blue-alloy1-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy2-128.png b/bobicons/graphics/icons/alien/alien-blue-alloy2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-blue-alloy2-128.png rename to bobicons/graphics/icons/alien/alien-blue-alloy2-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-explosive-128.png b/bobicons/graphics/icons/alien/alien-explosive-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-explosive-128.png rename to bobicons/graphics/icons/alien/alien-explosive-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-fire-128.png b/bobicons/graphics/icons/alien/alien-fire-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-fire-128.png rename to bobicons/graphics/icons/alien/alien-fire-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy-128.png b/bobicons/graphics/icons/alien/alien-orange-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy-128.png rename to bobicons/graphics/icons/alien/alien-orange-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy1-128.png b/bobicons/graphics/icons/alien/alien-orange-alloy1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy1-128.png rename to bobicons/graphics/icons/alien/alien-orange-alloy1-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy2-128.png b/bobicons/graphics/icons/alien/alien-orange-alloy2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-orange-alloy2-128.png rename to bobicons/graphics/icons/alien/alien-orange-alloy2-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/alien-poison-128.png b/bobicons/graphics/icons/alien/alien-poison-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/alien-poison-128.png rename to bobicons/graphics/icons/alien/alien-poison-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-acid.png b/bobicons/graphics/icons/alien/old/alien-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-acid.png rename to bobicons/graphics/icons/alien/old/alien-acid.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-2.png b/bobicons/graphics/icons/alien/old/alien-artifact-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-2.png rename to bobicons/graphics/icons/alien/old/alien-artifact-2.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-blue.png b/bobicons/graphics/icons/alien/old/alien-artifact-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-blue.png rename to bobicons/graphics/icons/alien/old/alien-artifact-blue.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-green.png b/bobicons/graphics/icons/alien/old/alien-artifact-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-green.png rename to bobicons/graphics/icons/alien/old/alien-artifact-green.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-orange.png b/bobicons/graphics/icons/alien/old/alien-artifact-orange.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-orange.png rename to bobicons/graphics/icons/alien/old/alien-artifact-orange.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-purple.png b/bobicons/graphics/icons/alien/old/alien-artifact-purple.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-purple.png rename to bobicons/graphics/icons/alien/old/alien-artifact-purple.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-red.png b/bobicons/graphics/icons/alien/old/alien-artifact-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-red.png rename to bobicons/graphics/icons/alien/old/alien-artifact-red.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-yellow.png b/bobicons/graphics/icons/alien/old/alien-artifact-yellow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact-yellow.png rename to bobicons/graphics/icons/alien/old/alien-artifact-yellow.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-artifact.png b/bobicons/graphics/icons/alien/old/alien-artifact.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-artifact.png rename to bobicons/graphics/icons/alien/old/alien-artifact.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy1.png b/bobicons/graphics/icons/alien/old/alien-blue-alloy1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy1.png rename to bobicons/graphics/icons/alien/old/alien-blue-alloy1.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy2.png b/bobicons/graphics/icons/alien/old/alien-blue-alloy2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy2.png rename to bobicons/graphics/icons/alien/old/alien-blue-alloy2.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy3.png b/bobicons/graphics/icons/alien/old/alien-blue-alloy3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-blue-alloy3.png rename to bobicons/graphics/icons/alien/old/alien-blue-alloy3.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-explosive.png b/bobicons/graphics/icons/alien/old/alien-explosive.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-explosive.png rename to bobicons/graphics/icons/alien/old/alien-explosive.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-fire.png b/bobicons/graphics/icons/alien/old/alien-fire.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-fire.png rename to bobicons/graphics/icons/alien/old/alien-fire.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy1.png b/bobicons/graphics/icons/alien/old/alien-orange-alloy1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy1.png rename to bobicons/graphics/icons/alien/old/alien-orange-alloy1.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy2.png b/bobicons/graphics/icons/alien/old/alien-orange-alloy2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy2.png rename to bobicons/graphics/icons/alien/old/alien-orange-alloy2.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy3.png b/bobicons/graphics/icons/alien/old/alien-orange-alloy3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-orange-alloy3.png rename to bobicons/graphics/icons/alien/old/alien-orange-alloy3.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/alien-poison.png b/bobicons/graphics/icons/alien/old/alien-poison.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/alien-poison.png rename to bobicons/graphics/icons/alien/old/alien-poison.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-blue.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-blue.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-blue.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-green.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-green.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-green.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-orange.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-orange.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-orange.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-orange.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-purple.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-purple.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-purple.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-purple.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-red.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-red.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-red.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-yellow.png b/bobicons/graphics/icons/alien/old/small-alien-artifact-yellow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact-yellow.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact-yellow.png diff --git a/bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact.png b/bobicons/graphics/icons/alien/old/small-alien-artifact.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/old/small-alien-artifact.png rename to bobicons/graphics/icons/alien/old/small-alien-artifact.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-blue-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-blue-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-blue-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-blue-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-green-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-green-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-green-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-green-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-orange-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-orange-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-orange-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-orange-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-purple-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-purple-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-purple-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-purple-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-red-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-red-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-red-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-red-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-yellow-128.png b/bobicons/graphics/icons/alien/small-alien-artifact-yellow-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/small-alien-artifact-yellow-128.png rename to bobicons/graphics/icons/alien/small-alien-artifact-yellow-128.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-blue.png b/bobicons/graphics/icons/alien/var/alien-artifact-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-blue.png rename to bobicons/graphics/icons/alien/var/alien-artifact-blue.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-green.png b/bobicons/graphics/icons/alien/var/alien-artifact-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-green.png rename to bobicons/graphics/icons/alien/var/alien-artifact-green.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-orange.png b/bobicons/graphics/icons/alien/var/alien-artifact-orange.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-orange.png rename to bobicons/graphics/icons/alien/var/alien-artifact-orange.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-purple.png b/bobicons/graphics/icons/alien/var/alien-artifact-purple.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-purple.png rename to bobicons/graphics/icons/alien/var/alien-artifact-purple.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-red.png b/bobicons/graphics/icons/alien/var/alien-artifact-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-red.png rename to bobicons/graphics/icons/alien/var/alien-artifact-red.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-yellow.png b/bobicons/graphics/icons/alien/var/alien-artifact-yellow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact-yellow.png rename to bobicons/graphics/icons/alien/var/alien-artifact-yellow.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/alien-artifact.png b/bobicons/graphics/icons/alien/var/alien-artifact.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/alien-artifact.png rename to bobicons/graphics/icons/alien/var/alien-artifact.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-blue.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-blue.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-blue.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-green.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-green.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-green.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-orange.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-orange.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-orange.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-orange.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-purple.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-purple.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-purple.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-purple.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-red.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-red.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-red.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-yellow.png b/bobicons/graphics/icons/alien/var/small-alien-artifact-yellow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact-yellow.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact-yellow.png diff --git a/bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact.png b/bobicons/graphics/icons/alien/var/small-alien-artifact.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/alien/var/small-alien-artifact.png rename to bobicons/graphics/icons/alien/var/small-alien-artifact.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-blue.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-blue.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-blue.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-green.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-green.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-green.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-harmonic.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-harmonic.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-harmonic.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-harmonic.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-harmonic1.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-harmonic1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-harmonic1.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-harmonic1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-raw.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-raw.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-raw.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-raw.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-red.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-full-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-full-red.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-full-red.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-blue.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-blue.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-blue.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-green.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-green.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-green.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-harmonic.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-harmonic.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-harmonic.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-harmonic.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-harmonic2.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-harmonic2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-harmonic2.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-harmonic2.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-raw.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-raw.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-raw.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-raw.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-red.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-shard-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-shard-red.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-shard-red.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-blue.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-blue.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-blue.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-green.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-green.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-green.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic2.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic2.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-harmonic2.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-raw.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-raw.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-raw.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-raw.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-red.png b/bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/crystal-splinter-red.png rename to bobicons/graphics/icons/angelsbioprocessing/crystal-splinter-red.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-blue1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-blue1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-blue1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-blue1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-green1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-green1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-green1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-green1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-harmonic11.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-harmonic11.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-harmonic11.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-harmonic11.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-raw1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-raw1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-raw1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-raw1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-red1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-red1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-full-red1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-full-red1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-blue1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-blue1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-blue1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-blue1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-green1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-green1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-green1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-green1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-harmonic1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-harmonic1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-harmonic1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-harmonic1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-raw1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-raw1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-raw1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-raw1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-red1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-red1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-shard-red1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-shard-red1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-blue1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-blue1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-blue1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-blue1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-green1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-green1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-green1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-green1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-harmonic1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-harmonic1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-harmonic1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-harmonic1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-raw1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-raw1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-raw1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-raw1.png diff --git a/bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-red1.png b/bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-red1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsbioprocessing/old/crystal-splinter-red1.png rename to bobicons/graphics/icons/angelsbioprocessing/old/crystal-splinter-red1.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-blue-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-blue-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-blue-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-blue-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-carrier-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-carrier-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-carrier-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-carrier-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-green-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-green-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-green-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-green-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-red-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-red-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-red-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-red-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-yellow-64.png b/bobicons/graphics/icons/angelspetrochem/catalyst-metal-yellow-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/catalyst-metal-yellow-64.png rename to bobicons/graphics/icons/angelspetrochem/catalyst-metal-yellow-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/pellet-coke-64.png b/bobicons/graphics/icons/angelspetrochem/pellet-coke-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/pellet-coke-64.png rename to bobicons/graphics/icons/angelspetrochem/pellet-coke-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-carbon-64.png b/bobicons/graphics/icons/angelspetrochem/solid-carbon-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-carbon-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-carbon-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-coke-64.png b/bobicons/graphics/icons/angelspetrochem/solid-coke-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-coke-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-coke-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-electrode-64.png b/bobicons/graphics/icons/angelspetrochem/solid-electrode-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-electrode-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-electrode-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-electrode-used-64.png b/bobicons/graphics/icons/angelspetrochem/solid-electrode-used-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-electrode-used-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-electrode-used-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-oil-residual-64.png b/bobicons/graphics/icons/angelspetrochem/solid-oil-residual-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-oil-residual-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-oil-residual-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelspetrochem/solid-sodium-hydroxide-64.png b/bobicons/graphics/icons/angelspetrochem/solid-sodium-hydroxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelspetrochem/solid-sodium-hydroxide-64.png rename to bobicons/graphics/icons/angelspetrochem/solid-sodium-hydroxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore1-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore1-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore1-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore1-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore1-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore1-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore1-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore1-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore1-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore2-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore2-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore2-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore2-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore2-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore2-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore2-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore2-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore2-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore3-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore3-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore3-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore3-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore3-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore3-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore3-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore3-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore3-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore4-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore4-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore4-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore4-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore4-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore4-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore4-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore4-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore4-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore4-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore5-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore5-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore5-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore5-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore5-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore5-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore5-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore5-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore5-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore6-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore6-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-chunk-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore6-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore6-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore6-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore6-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore6-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore6-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-pure-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore6-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore6-pure-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore6-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore8-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore8-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore8-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore8-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-dust-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore8-dust-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-dust-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore8-dust-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-powder-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore8-powder-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-powder-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore8-powder-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-slime-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore8-slime-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore8-slime-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore8-slime-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-crushed-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore9-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore9-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-crystal-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore9-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore9-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-dust-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore9-dust-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-dust-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore9-dust-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-powder-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore9-powder-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-powder-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore9-powder-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-slime-64.png b/bobicons/graphics/icons/angelsrefining/angels-ore9-slime-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/angels-ore9-slime-64.png rename to bobicons/graphics/icons/angelsrefining/angels-ore9-slime-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-brown-64.png b/bobicons/graphics/icons/angelsrefining/catalysator-brown-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-brown-64.png rename to bobicons/graphics/icons/angelsrefining/catalysator-brown-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-green-64.png b/bobicons/graphics/icons/angelsrefining/catalysator-green-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-green-64.png rename to bobicons/graphics/icons/angelsrefining/catalysator-green-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-orange-64.png b/bobicons/graphics/icons/angelsrefining/catalysator-orange-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-orange-64.png rename to bobicons/graphics/icons/angelsrefining/catalysator-orange-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-yellow-64.png b/bobicons/graphics/icons/angelsrefining/catalysator-yellow-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/catalysator-yellow-64.png rename to bobicons/graphics/icons/angelsrefining/catalysator-yellow-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-nugget-64.png b/bobicons/graphics/icons/angelsrefining/copper-nugget-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-nugget-64.png rename to bobicons/graphics/icons/angelsrefining/copper-nugget-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-chunk-64.png b/bobicons/graphics/icons/angelsrefining/copper-ore-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/copper-ore-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-crushed-64.png b/bobicons/graphics/icons/angelsrefining/copper-ore-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/copper-ore-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-crystal-64.png b/bobicons/graphics/icons/angelsrefining/copper-ore-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/copper-ore-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-pure-64.png b/bobicons/graphics/icons/angelsrefining/copper-ore-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-ore-pure-64.png rename to bobicons/graphics/icons/angelsrefining/copper-ore-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-pebbles-64.png b/bobicons/graphics/icons/angelsrefining/copper-pebbles-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-pebbles-64.png rename to bobicons/graphics/icons/angelsrefining/copper-pebbles-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/copper-slag-64.png b/bobicons/graphics/icons/angelsrefining/copper-slag-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/copper-slag-64.png rename to bobicons/graphics/icons/angelsrefining/copper-slag-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/crystal-dust-128.png b/bobicons/graphics/icons/angelsrefining/crystal-dust-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/crystal-dust-128.png rename to bobicons/graphics/icons/angelsrefining/crystal-dust-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/filter-ceramic-64.png b/bobicons/graphics/icons/angelsrefining/filter-ceramic-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/filter-ceramic-64.png rename to bobicons/graphics/icons/angelsrefining/filter-ceramic-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/filter-ceramic-used-64.png b/bobicons/graphics/icons/angelsrefining/filter-ceramic-used-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/filter-ceramic-used-64.png rename to bobicons/graphics/icons/angelsrefining/filter-ceramic-used-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/filter-coal-64.png b/bobicons/graphics/icons/angelsrefining/filter-coal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/filter-coal-64.png rename to bobicons/graphics/icons/angelsrefining/filter-coal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/filter-frame-64.png b/bobicons/graphics/icons/angelsrefining/filter-frame-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/filter-frame-64.png rename to bobicons/graphics/icons/angelsrefining/filter-frame-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-blue-64.png b/bobicons/graphics/icons/angelsrefining/geode-blue-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-blue-64.png rename to bobicons/graphics/icons/angelsrefining/geode-blue-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-cyan-64.png b/bobicons/graphics/icons/angelsrefining/geode-cyan-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-cyan-64.png rename to bobicons/graphics/icons/angelsrefining/geode-cyan-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-lightgreen-64.png b/bobicons/graphics/icons/angelsrefining/geode-lightgreen-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-lightgreen-64.png rename to bobicons/graphics/icons/angelsrefining/geode-lightgreen-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-purple-64.png b/bobicons/graphics/icons/angelsrefining/geode-purple-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-purple-64.png rename to bobicons/graphics/icons/angelsrefining/geode-purple-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-red-64.png b/bobicons/graphics/icons/angelsrefining/geode-red-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-red-64.png rename to bobicons/graphics/icons/angelsrefining/geode-red-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/geode-yellow-64.png b/bobicons/graphics/icons/angelsrefining/geode-yellow-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/geode-yellow-64.png rename to bobicons/graphics/icons/angelsrefining/geode-yellow-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-nugget-64.png b/bobicons/graphics/icons/angelsrefining/iron-nugget-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-nugget-64.png rename to bobicons/graphics/icons/angelsrefining/iron-nugget-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-chunk-64.png b/bobicons/graphics/icons/angelsrefining/iron-ore-chunk-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-chunk-64.png rename to bobicons/graphics/icons/angelsrefining/iron-ore-chunk-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-crushed-64.png b/bobicons/graphics/icons/angelsrefining/iron-ore-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/iron-ore-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-crystal-64.png b/bobicons/graphics/icons/angelsrefining/iron-ore-crystal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-crystal-64.png rename to bobicons/graphics/icons/angelsrefining/iron-ore-crystal-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-pure-64.png b/bobicons/graphics/icons/angelsrefining/iron-ore-pure-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-ore-pure-64.png rename to bobicons/graphics/icons/angelsrefining/iron-ore-pure-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-pebbles-64.png b/bobicons/graphics/icons/angelsrefining/iron-pebbles-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-pebbles-64.png rename to bobicons/graphics/icons/angelsrefining/iron-pebbles-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/iron-slag-64.png b/bobicons/graphics/icons/angelsrefining/iron-slag-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/iron-slag-64.png rename to bobicons/graphics/icons/angelsrefining/iron-slag-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/milling-drum-64.png b/bobicons/graphics/icons/angelsrefining/milling-drum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/milling-drum-64.png rename to bobicons/graphics/icons/angelsrefining/milling-drum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/milling-drum-used-64.png b/bobicons/graphics/icons/angelsrefining/milling-drum-used-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/milling-drum-used-64.png rename to bobicons/graphics/icons/angelsrefining/milling-drum-used-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/nodule-crushed-64.png b/bobicons/graphics/icons/angelsrefining/nodule-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/nodule-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/nodule-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/ore-chrome-2-64.png b/bobicons/graphics/icons/angelsrefining/ore-chrome-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/ore-chrome-2-64.png rename to bobicons/graphics/icons/angelsrefining/ore-chrome-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/ore-chrome-64.png b/bobicons/graphics/icons/angelsrefining/ore-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/ore-chrome-64.png rename to bobicons/graphics/icons/angelsrefining/ore-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/ore-fluorite-64.png b/bobicons/graphics/icons/angelsrefining/ore-fluorite-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/ore-fluorite-64.png rename to bobicons/graphics/icons/angelsrefining/ore-fluorite-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/ore-platinum-64.png b/bobicons/graphics/icons/angelsrefining/ore-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/ore-platinum-64.png rename to bobicons/graphics/icons/angelsrefining/ore-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/slag-64.png b/bobicons/graphics/icons/angelsrefining/slag-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/slag-64.png rename to bobicons/graphics/icons/angelsrefining/slag-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-clay-64.png b/bobicons/graphics/icons/angelsrefining/solid-clay-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-clay-64.png rename to bobicons/graphics/icons/angelsrefining/solid-clay-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-limestone-2-64 .png b/bobicons/graphics/icons/angelsrefining/solid-limestone-2-64 .png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-limestone-2-64 .png rename to bobicons/graphics/icons/angelsrefining/solid-limestone-2-64 .png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-limestone-64.png b/bobicons/graphics/icons/angelsrefining/solid-limestone-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-limestone-64.png rename to bobicons/graphics/icons/angelsrefining/solid-limestone-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-mud-64.png b/bobicons/graphics/icons/angelsrefining/solid-mud-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-mud-64.png rename to bobicons/graphics/icons/angelsrefining/solid-mud-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-sand-128.png b/bobicons/graphics/icons/angelsrefining/solid-sand-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-sand-128.png rename to bobicons/graphics/icons/angelsrefining/solid-sand-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/solid-sand-64.png b/bobicons/graphics/icons/angelsrefining/solid-sand-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/solid-sand-64.png rename to bobicons/graphics/icons/angelsrefining/solid-sand-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/stone-crushed-64.png b/bobicons/graphics/icons/angelsrefining/stone-crushed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/stone-crushed-64.png rename to bobicons/graphics/icons/angelsrefining/stone-crushed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelsrefining/water-purified-128.png b/bobicons/graphics/icons/angelsrefining/water-purified-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelsrefining/water-purified-128.png rename to bobicons/graphics/icons/angelsrefining/water-purified-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/anode-copper-64.png b/bobicons/graphics/icons/angelssmelting/anode-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/anode-copper-64.png rename to bobicons/graphics/icons/angelssmelting/anode-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/anode-lead-64.png b/bobicons/graphics/icons/angelssmelting/anode-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/anode-lead-64.png rename to bobicons/graphics/icons/angelssmelting/anode-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/blast-furnace-64.png b/bobicons/graphics/icons/angelssmelting/blast-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/blast-furnace-64.png rename to bobicons/graphics/icons/angelssmelting/blast-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/brick-clay-64.png b/bobicons/graphics/icons/angelssmelting/brick-clay-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/brick-clay-64.png rename to bobicons/graphics/icons/angelssmelting/brick-clay-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/brick-clay-raw-64.png b/bobicons/graphics/icons/angelssmelting/brick-clay-raw-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/brick-clay-raw-64.png rename to bobicons/graphics/icons/angelssmelting/brick-clay-raw-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/brick-concrete-64.png b/bobicons/graphics/icons/angelssmelting/brick-concrete-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/brick-concrete-64.png rename to bobicons/graphics/icons/angelssmelting/brick-concrete-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/brick-reinforced-64.png b/bobicons/graphics/icons/angelssmelting/brick-reinforced-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/brick-reinforced-64.png rename to bobicons/graphics/icons/angelssmelting/brick-reinforced-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/casting-machine-64.png b/bobicons/graphics/icons/angelssmelting/casting-machine-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/casting-machine-64.png rename to bobicons/graphics/icons/angelssmelting/casting-machine-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cathode-gold-64.png b/bobicons/graphics/icons/angelssmelting/cathode-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cathode-gold-64.png rename to bobicons/graphics/icons/angelssmelting/cathode-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cathode-manganese-64.png b/bobicons/graphics/icons/angelssmelting/cathode-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cathode-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/cathode-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cathode-nickel-64.png b/bobicons/graphics/icons/angelssmelting/cathode-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cathode-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/cathode-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cathode-silver-64.png b/bobicons/graphics/icons/angelssmelting/cathode-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cathode-silver-64.png rename to bobicons/graphics/icons/angelssmelting/cathode-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cathode-zinc-64.png b/bobicons/graphics/icons/angelssmelting/cathode-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cathode-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/cathode-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/chemical-furnace-64.png b/bobicons/graphics/icons/angelssmelting/chemical-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/chemical-furnace-64.png rename to bobicons/graphics/icons/angelssmelting/chemical-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/cooling-tower-64.png b/bobicons/graphics/icons/angelssmelting/cooling-tower-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/cooling-tower-64.png rename to bobicons/graphics/icons/angelssmelting/cooling-tower-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/expendable-mold-64.png b/bobicons/graphics/icons/angelssmelting/expendable-mold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/expendable-mold-64.png rename to bobicons/graphics/icons/angelssmelting/expendable-mold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/gas-silane-64.png b/bobicons/graphics/icons/angelssmelting/gas-silane-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/gas-silane-64.png rename to bobicons/graphics/icons/angelssmelting/gas-silane-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/gas-tungsten-hexafluoride-64.png b/bobicons/graphics/icons/angelssmelting/gas-tungsten-hexafluoride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/gas-tungsten-hexafluoride-64.png rename to bobicons/graphics/icons/angelssmelting/gas-tungsten-hexafluoride-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/glass-mixture-128.png b/bobicons/graphics/icons/angelssmelting/glass-mixture-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/glass-mixture-128.png rename to bobicons/graphics/icons/angelssmelting/glass-mixture-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/induction-furnace-64.png b/bobicons/graphics/icons/angelssmelting/induction-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/induction-furnace-64.png rename to bobicons/graphics/icons/angelssmelting/induction-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/ingot-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-chrome-64.png b/bobicons/graphics/icons/angelssmelting/ingot-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-chrome-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-cobalt-64.png b/bobicons/graphics/icons/angelssmelting/ingot-cobalt-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-cobalt-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-cobalt-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-copper-64.png b/bobicons/graphics/icons/angelssmelting/ingot-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-copper-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-gold-64.png b/bobicons/graphics/icons/angelssmelting/ingot-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-gold-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-iron-64.png b/bobicons/graphics/icons/angelssmelting/ingot-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-iron-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-lead-64.png b/bobicons/graphics/icons/angelssmelting/ingot-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-lead-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-manganese-64.png b/bobicons/graphics/icons/angelssmelting/ingot-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-nickel-64.png b/bobicons/graphics/icons/angelssmelting/ingot-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-platinum-64.png b/bobicons/graphics/icons/angelssmelting/ingot-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silicon-64.png b/bobicons/graphics/icons/angelssmelting/ingot-silicon-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silicon-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-silicon-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silver-2-64.png b/bobicons/graphics/icons/angelssmelting/ingot-silver-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silver-2-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-silver-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silver-64.png b/bobicons/graphics/icons/angelssmelting/ingot-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-silver-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-steel-64.png b/bobicons/graphics/icons/angelssmelting/ingot-steel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-steel-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-steel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-tin-64.png b/bobicons/graphics/icons/angelssmelting/ingot-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-tin-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-titanium-64.png b/bobicons/graphics/icons/angelssmelting/ingot-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/ingot-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-unobtainium-64.png b/bobicons/graphics/icons/angelssmelting/ingot-unobtainium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-unobtainium-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-unobtainium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ingot-zinc-64.png b/bobicons/graphics/icons/angelssmelting/ingot-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ingot-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/ingot-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-chlorauric-acid-64.png b/bobicons/graphics/icons/angelssmelting/liquid-chlorauric-acid-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-chlorauric-acid-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-chlorauric-acid-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-64.png b/bobicons/graphics/icons/angelssmelting/liquid-coolant-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-coolant-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-clean-64.png b/bobicons/graphics/icons/angelssmelting/liquid-coolant-clean-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-clean-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-coolant-clean-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-used-64.png b/bobicons/graphics/icons/angelssmelting/liquid-coolant-used-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-coolant-used-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-coolant-used-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-hexachloroplatinic-acid-64.png b/bobicons/graphics/icons/angelssmelting/liquid-hexachloroplatinic-acid-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-hexachloroplatinic-acid-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-hexachloroplatinic-acid-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-hexafluorosilicic-acid-64.png b/bobicons/graphics/icons/angelssmelting/liquid-hexafluorosilicic-acid-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-hexafluorosilicic-acid-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-hexafluorosilicic-acid-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-titanium-tetrachloride-64.png b/bobicons/graphics/icons/angelssmelting/liquid-titanium-tetrachloride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-titanium-tetrachloride-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-titanium-tetrachloride-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-trichlorosilane-64.png b/bobicons/graphics/icons/angelssmelting/liquid-trichlorosilane-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-trichlorosilane-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-trichlorosilane-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/liquid-tungstic-acid-64.png b/bobicons/graphics/icons/angelssmelting/liquid-tungstic-acid-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/liquid-tungstic-acid-64.png rename to bobicons/graphics/icons/angelssmelting/liquid-tungstic-acid-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/non-expendable-mold-64.png b/bobicons/graphics/icons/angelssmelting/non-expendable-mold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/non-expendable-mold-64.png rename to bobicons/graphics/icons/angelssmelting/non-expendable-mold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/blast-furnace.png b/bobicons/graphics/icons/angelssmelting/old/blast-furnace.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/blast-furnace.png rename to bobicons/graphics/icons/angelssmelting/old/blast-furnace.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/casting-machine.png b/bobicons/graphics/icons/angelssmelting/old/casting-machine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/casting-machine.png rename to bobicons/graphics/icons/angelssmelting/old/casting-machine.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/chemical-furnace.png b/bobicons/graphics/icons/angelssmelting/old/chemical-furnace.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/chemical-furnace.png rename to bobicons/graphics/icons/angelssmelting/old/chemical-furnace.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/cooling-tower.png b/bobicons/graphics/icons/angelssmelting/old/cooling-tower.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/cooling-tower.png rename to bobicons/graphics/icons/angelssmelting/old/cooling-tower.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/expendable-mold.png b/bobicons/graphics/icons/angelssmelting/old/expendable-mold.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/expendable-mold.png rename to bobicons/graphics/icons/angelssmelting/old/expendable-mold.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/glass-mixture.png b/bobicons/graphics/icons/angelssmelting/old/glass-mixture.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/glass-mixture.png rename to bobicons/graphics/icons/angelssmelting/old/glass-mixture.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/induction-furnace.png b/bobicons/graphics/icons/angelssmelting/old/induction-furnace.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/induction-furnace.png rename to bobicons/graphics/icons/angelssmelting/old/induction-furnace.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/ore-processing-machine.png b/bobicons/graphics/icons/angelssmelting/old/ore-processing-machine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/ore-processing-machine.png rename to bobicons/graphics/icons/angelssmelting/old/ore-processing-machine.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/pellet-press.png b/bobicons/graphics/icons/angelssmelting/old/pellet-press.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/pellet-press.png rename to bobicons/graphics/icons/angelssmelting/old/pellet-press.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/powder-mixer-ico.png b/bobicons/graphics/icons/angelssmelting/old/powder-mixer-ico.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/powder-mixer-ico.png rename to bobicons/graphics/icons/angelssmelting/old/powder-mixer-ico.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/sintering-oven.png b/bobicons/graphics/icons/angelssmelting/old/sintering-oven.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/sintering-oven.png rename to bobicons/graphics/icons/angelssmelting/old/sintering-oven.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/old/strand-casting-machine.png b/bobicons/graphics/icons/angelssmelting/old/strand-casting-machine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/old/strand-casting-machine.png rename to bobicons/graphics/icons/angelssmelting/old/strand-casting-machine.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/ore-processing-machine-64.png b/bobicons/graphics/icons/angelssmelting/ore-processing-machine-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/ore-processing-machine-64.png rename to bobicons/graphics/icons/angelssmelting/ore-processing-machine-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/pellet-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-chrome-64.png b/bobicons/graphics/icons/angelssmelting/pellet-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-chrome-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-cobalt-64.png b/bobicons/graphics/icons/angelssmelting/pellet-cobalt-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-cobalt-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-cobalt-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-copper-64.png b/bobicons/graphics/icons/angelssmelting/pellet-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-copper-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-gold-64.png b/bobicons/graphics/icons/angelssmelting/pellet-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-gold-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-iron-64.png b/bobicons/graphics/icons/angelssmelting/pellet-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-iron-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-lead-64.png b/bobicons/graphics/icons/angelssmelting/pellet-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-lead-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-manganese-64.png b/bobicons/graphics/icons/angelssmelting/pellet-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-nickel-64.png b/bobicons/graphics/icons/angelssmelting/pellet-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-platinum-64.png b/bobicons/graphics/icons/angelssmelting/pellet-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-press-64.png b/bobicons/graphics/icons/angelssmelting/pellet-press-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-press-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-press-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silica-2-64.png b/bobicons/graphics/icons/angelssmelting/pellet-silica-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silica-2-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-silica-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silica-64.png b/bobicons/graphics/icons/angelssmelting/pellet-silica-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silica-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-silica-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silver-2-64.png b/bobicons/graphics/icons/angelssmelting/pellet-silver-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silver-2-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-silver-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silver-64.png b/bobicons/graphics/icons/angelssmelting/pellet-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-silver-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-tin-64.png b/bobicons/graphics/icons/angelssmelting/pellet-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-tin-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-titanium-64.png b/bobicons/graphics/icons/angelssmelting/pellet-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/pellet-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-wood-64.png b/bobicons/graphics/icons/angelssmelting/pellet-wood-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-wood-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-wood-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/pellet-zinc-64.png b/bobicons/graphics/icons/angelssmelting/pellet-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/pellet-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/pellet-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/powder-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/powder-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-chrome-64.png b/bobicons/graphics/icons/angelssmelting/powder-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-chrome-64.png rename to bobicons/graphics/icons/angelssmelting/powder-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-cobalt-64.png b/bobicons/graphics/icons/angelssmelting/powder-cobalt-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-cobalt-64.png rename to bobicons/graphics/icons/angelssmelting/powder-cobalt-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-coke-64.png b/bobicons/graphics/icons/angelssmelting/powder-coke-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-coke-64.png rename to bobicons/graphics/icons/angelssmelting/powder-coke-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-copper-64.png b/bobicons/graphics/icons/angelssmelting/powder-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-copper-64.png rename to bobicons/graphics/icons/angelssmelting/powder-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-gold-2-64.png b/bobicons/graphics/icons/angelssmelting/powder-gold-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-gold-2-64.png rename to bobicons/graphics/icons/angelssmelting/powder-gold-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-gold-64.png b/bobicons/graphics/icons/angelssmelting/powder-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-gold-64.png rename to bobicons/graphics/icons/angelssmelting/powder-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-iron-64.png b/bobicons/graphics/icons/angelssmelting/powder-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-iron-64.png rename to bobicons/graphics/icons/angelssmelting/powder-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-lead-64.png b/bobicons/graphics/icons/angelssmelting/powder-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-lead-64.png rename to bobicons/graphics/icons/angelssmelting/powder-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-manganese-64.png b/bobicons/graphics/icons/angelssmelting/powder-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/powder-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-mixer-ico-64.png b/bobicons/graphics/icons/angelssmelting/powder-mixer-ico-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-mixer-ico-64.png rename to bobicons/graphics/icons/angelssmelting/powder-mixer-ico-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-nickel-64.png b/bobicons/graphics/icons/angelssmelting/powder-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/powder-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-platinum-64.png b/bobicons/graphics/icons/angelssmelting/powder-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/powder-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-silica-64.png b/bobicons/graphics/icons/angelssmelting/powder-silica-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-silica-64.png rename to bobicons/graphics/icons/angelssmelting/powder-silica-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-silver-64.png b/bobicons/graphics/icons/angelssmelting/powder-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-silver-64.png rename to bobicons/graphics/icons/angelssmelting/powder-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-steel-64.png b/bobicons/graphics/icons/angelssmelting/powder-steel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-steel-64.png rename to bobicons/graphics/icons/angelssmelting/powder-steel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-tin-64.png b/bobicons/graphics/icons/angelssmelting/powder-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-tin-64.png rename to bobicons/graphics/icons/angelssmelting/powder-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-titanium-64.png b/bobicons/graphics/icons/angelssmelting/powder-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/powder-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten mixture-64.png b/bobicons/graphics/icons/angelssmelting/powder-tungsten mixture-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten mixture-64.png rename to bobicons/graphics/icons/angelssmelting/powder-tungsten mixture-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/powder-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/powder-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten-mixture-64.png b/bobicons/graphics/icons/angelssmelting/powder-tungsten-mixture-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-tungsten-mixture-64.png rename to bobicons/graphics/icons/angelssmelting/powder-tungsten-mixture-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/powder-zinc-64.png b/bobicons/graphics/icons/angelssmelting/powder-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/powder-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/powder-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/processed-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/processed-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-chrome-64.png b/bobicons/graphics/icons/angelssmelting/processed-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-chrome-64.png rename to bobicons/graphics/icons/angelssmelting/processed-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-cobalt-64.png b/bobicons/graphics/icons/angelssmelting/processed-cobalt-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-cobalt-64.png rename to bobicons/graphics/icons/angelssmelting/processed-cobalt-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-copper-64.png b/bobicons/graphics/icons/angelssmelting/processed-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-copper-64.png rename to bobicons/graphics/icons/angelssmelting/processed-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-gold-64.png b/bobicons/graphics/icons/angelssmelting/processed-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-gold-64.png rename to bobicons/graphics/icons/angelssmelting/processed-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-iron-64.png b/bobicons/graphics/icons/angelssmelting/processed-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-iron-64.png rename to bobicons/graphics/icons/angelssmelting/processed-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-lead-64.png b/bobicons/graphics/icons/angelssmelting/processed-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-lead-64.png rename to bobicons/graphics/icons/angelssmelting/processed-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-manganese-64.png b/bobicons/graphics/icons/angelssmelting/processed-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/processed-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-nickel-64.png b/bobicons/graphics/icons/angelssmelting/processed-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/processed-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-platinum-64.png b/bobicons/graphics/icons/angelssmelting/processed-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/processed-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-silica-64.png b/bobicons/graphics/icons/angelssmelting/processed-silica-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-silica-64.png rename to bobicons/graphics/icons/angelssmelting/processed-silica-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-silver-64.png b/bobicons/graphics/icons/angelssmelting/processed-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-silver-64.png rename to bobicons/graphics/icons/angelssmelting/processed-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-tin-64.png b/bobicons/graphics/icons/angelssmelting/processed-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-tin-64.png rename to bobicons/graphics/icons/angelssmelting/processed-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-titanium-64.png b/bobicons/graphics/icons/angelssmelting/processed-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/processed-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/processed-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/processed-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/processed-zinc-64.png b/bobicons/graphics/icons/angelssmelting/processed-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/processed-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/processed-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/rod-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/rod-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-iron-64.png b/bobicons/graphics/icons/angelssmelting/rod-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-iron-64.png rename to bobicons/graphics/icons/angelssmelting/rod-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/rod-stack-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/rod-stack-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-iron-64.png b/bobicons/graphics/icons/angelssmelting/rod-stack-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-iron-64.png rename to bobicons/graphics/icons/angelssmelting/rod-stack-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-steel-64.png b/bobicons/graphics/icons/angelssmelting/rod-stack-steel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-stack-steel-64.png rename to bobicons/graphics/icons/angelssmelting/rod-stack-steel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-steel-64.png b/bobicons/graphics/icons/angelssmelting/rod-steel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-steel-64.png rename to bobicons/graphics/icons/angelssmelting/rod-steel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-titanium-64.png b/bobicons/graphics/icons/angelssmelting/rod-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/rod-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/rod-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/rod-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/rod-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/rod-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-aluminium-64.png b/bobicons/graphics/icons/angelssmelting/roll-aluminium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-aluminium-64.png rename to bobicons/graphics/icons/angelssmelting/roll-aluminium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-chrome-64.png b/bobicons/graphics/icons/angelssmelting/roll-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-chrome-64.png rename to bobicons/graphics/icons/angelssmelting/roll-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-cobalt-64.png b/bobicons/graphics/icons/angelssmelting/roll-cobalt-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-cobalt-64.png rename to bobicons/graphics/icons/angelssmelting/roll-cobalt-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-copper-64.png b/bobicons/graphics/icons/angelssmelting/roll-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-copper-64.png rename to bobicons/graphics/icons/angelssmelting/roll-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-gold-64.png b/bobicons/graphics/icons/angelssmelting/roll-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-gold-64.png rename to bobicons/graphics/icons/angelssmelting/roll-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-iron-64.png b/bobicons/graphics/icons/angelssmelting/roll-iron-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-iron-64.png rename to bobicons/graphics/icons/angelssmelting/roll-iron-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-lead-64.png b/bobicons/graphics/icons/angelssmelting/roll-lead-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-lead-64.png rename to bobicons/graphics/icons/angelssmelting/roll-lead-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-manganese-64.png b/bobicons/graphics/icons/angelssmelting/roll-manganese-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-manganese-64.png rename to bobicons/graphics/icons/angelssmelting/roll-manganese-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-nickel-64.png b/bobicons/graphics/icons/angelssmelting/roll-nickel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-nickel-64.png rename to bobicons/graphics/icons/angelssmelting/roll-nickel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-platinum-64.png b/bobicons/graphics/icons/angelssmelting/roll-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/roll-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-silicon-64.png b/bobicons/graphics/icons/angelssmelting/roll-silicon-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-silicon-64.png rename to bobicons/graphics/icons/angelssmelting/roll-silicon-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-silver-64.png b/bobicons/graphics/icons/angelssmelting/roll-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-silver-64.png rename to bobicons/graphics/icons/angelssmelting/roll-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-solder-64.png b/bobicons/graphics/icons/angelssmelting/roll-solder-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-solder-64.png rename to bobicons/graphics/icons/angelssmelting/roll-solder-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-steel-64.png b/bobicons/graphics/icons/angelssmelting/roll-steel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-steel-64.png rename to bobicons/graphics/icons/angelssmelting/roll-steel-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-tin-64.png b/bobicons/graphics/icons/angelssmelting/roll-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-tin-64.png rename to bobicons/graphics/icons/angelssmelting/roll-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-titanium-64.png b/bobicons/graphics/icons/angelssmelting/roll-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/roll-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-tungsten-64.png b/bobicons/graphics/icons/angelssmelting/roll-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-tungsten-64.png rename to bobicons/graphics/icons/angelssmelting/roll-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/roll-zinc-64.png b/bobicons/graphics/icons/angelssmelting/roll-zinc-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/roll-zinc-64.png rename to bobicons/graphics/icons/angelssmelting/roll-zinc-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-crucible-2-64.png b/bobicons/graphics/icons/angelssmelting/silicon-crucible-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-crucible-2-64.png rename to bobicons/graphics/icons/angelssmelting/silicon-crucible-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-crucible-64.png b/bobicons/graphics/icons/angelssmelting/silicon-crucible-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-crucible-64.png rename to bobicons/graphics/icons/angelssmelting/silicon-crucible-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-mono-64.png b/bobicons/graphics/icons/angelssmelting/silicon-mono-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-mono-64.png rename to bobicons/graphics/icons/angelssmelting/silicon-mono-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-seed-64.png b/bobicons/graphics/icons/angelssmelting/silicon-seed-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-seed-64.png rename to bobicons/graphics/icons/angelssmelting/silicon-seed-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-wafer-128.png b/bobicons/graphics/icons/angelssmelting/silicon-wafer-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-wafer-128.png rename to bobicons/graphics/icons/angelssmelting/silicon-wafer-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/silicon-wafer-2-64.png b/bobicons/graphics/icons/angelssmelting/silicon-wafer-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/silicon-wafer-2-64.png rename to bobicons/graphics/icons/angelssmelting/silicon-wafer-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/sintering-oven-64.png b/bobicons/graphics/icons/angelssmelting/sintering-oven-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/sintering-oven-64.png rename to bobicons/graphics/icons/angelssmelting/sintering-oven-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solder-64.png b/bobicons/graphics/icons/angelssmelting/solder-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solder-64.png rename to bobicons/graphics/icons/angelssmelting/solder-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solder-mixture-128.png b/bobicons/graphics/icons/angelssmelting/solder-mixture-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solder-mixture-128.png rename to bobicons/graphics/icons/angelssmelting/solder-mixture-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-aluminium-hydroxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-aluminium-hydroxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-aluminium-hydroxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-aluminium-hydroxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-aluminium-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-aluminium-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-aluminium-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-aluminium-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-64.png b/bobicons/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-ammonium-chloroplatinate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-paratungstate-64.png b/bobicons/graphics/icons/angelssmelting/solid-ammonium-paratungstate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-ammonium-paratungstate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-ammonium-paratungstate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-cement-128.png b/bobicons/graphics/icons/angelssmelting/solid-cement-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-cement-128.png rename to bobicons/graphics/icons/angelssmelting/solid-cement-128.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-chromate-64.png b/bobicons/graphics/icons/angelssmelting/solid-chromate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-chromate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-chromate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-chrome-oxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-chrome-oxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-chrome-oxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-chrome-oxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-chrome-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-chrome-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-chrome-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-chrome-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-hydroxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-cobalt-hydroxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-hydroxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-cobalt-hydroxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-hydroxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-cobalt-hydroxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-hydroxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-cobalt-hydroxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-oxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-cobalt-oxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-oxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-cobalt-oxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-cobalt-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-cobalt-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-cobalt-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-dichromate-64.png b/bobicons/graphics/icons/angelssmelting/solid-dichromate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-dichromate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-dichromate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-iron-hydroxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-iron-hydroxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-iron-hydroxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-iron-hydroxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-iron-hydroxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-iron-hydroxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-iron-hydroxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-iron-hydroxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-lead-oxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-lead-oxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-lead-oxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-lead-oxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-lead-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-lead-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-lead-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-lead-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-lime-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-lime-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-lime-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-lime-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-lime-64.png b/bobicons/graphics/icons/angelssmelting/solid-lime-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-lime-64.png rename to bobicons/graphics/icons/angelssmelting/solid-lime-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-manganese-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-manganese-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-manganese-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-manganese-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-nickel-carbonyl-64.png b/bobicons/graphics/icons/angelssmelting/solid-nickel-carbonyl-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-nickel-carbonyl-64.png rename to bobicons/graphics/icons/angelssmelting/solid-nickel-carbonyl-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-nitrate-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-silver-nitrate-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-nitrate-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-silver-nitrate-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-nitrate-64.png b/bobicons/graphics/icons/angelssmelting/solid-silver-nitrate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-nitrate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-silver-nitrate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-silver-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-silver-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-silver-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-aluminate-64.png b/bobicons/graphics/icons/angelssmelting/solid-sodium-aluminate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-aluminate-64.png rename to bobicons/graphics/icons/angelssmelting/solid-sodium-aluminate-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-gold-cyanide-64.png b/bobicons/graphics/icons/angelssmelting/solid-sodium-gold-cyanide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-gold-cyanide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-sodium-gold-cyanide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-silver-cyanide-64.png b/bobicons/graphics/icons/angelssmelting/solid-sodium-silver-cyanide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-sodium-silver-cyanide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-sodium-silver-cyanide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-tungsten-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-tungsten-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-tungsten-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-tungsten-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-zinc-oxide-2-64.png b/bobicons/graphics/icons/angelssmelting/solid-zinc-oxide-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-zinc-oxide-2-64.png rename to bobicons/graphics/icons/angelssmelting/solid-zinc-oxide-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/solid-zinc-oxide-64.png b/bobicons/graphics/icons/angelssmelting/solid-zinc-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/solid-zinc-oxide-64.png rename to bobicons/graphics/icons/angelssmelting/solid-zinc-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/sponge-titanium-64.png b/bobicons/graphics/icons/angelssmelting/sponge-titanium-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/sponge-titanium-64.png rename to bobicons/graphics/icons/angelssmelting/sponge-titanium-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/strand-casting-machine-64.png b/bobicons/graphics/icons/angelssmelting/strand-casting-machine-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/strand-casting-machine-64.png rename to bobicons/graphics/icons/angelssmelting/strand-casting-machine-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-copper-2-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-copper-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-copper-2-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-copper-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-copper-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-copper-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-copper-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-copper-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-glass-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-glass-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-glass-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-glass-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-gold-2-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-gold-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-gold-2-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-gold-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-gold-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-gold-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-gold-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-gold-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-platinum-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-silver-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-silver-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-silver-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-silver-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-silver1-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-silver1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-silver1-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-silver1-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-tin-64.png b/bobicons/graphics/icons/angelssmelting/wire-coil-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-coil-tin-64.png rename to bobicons/graphics/icons/angelssmelting/wire-coil-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-platinum-64.png b/bobicons/graphics/icons/angelssmelting/wire-platinum-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-platinum-64.png rename to bobicons/graphics/icons/angelssmelting/wire-platinum-64.png diff --git a/bobicons_1.1.2/graphics/icons/angelssmelting/wire-tin-64.png b/bobicons/graphics/icons/angelssmelting/wire-tin-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/angelssmelting/wire-tin-64.png rename to bobicons/graphics/icons/angelssmelting/wire-tin-64.png diff --git a/bobicons_1.1.2/graphics/icons/base/accumulator-128.png b/bobicons/graphics/icons/base/accumulator-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/accumulator-128.png rename to bobicons/graphics/icons/base/accumulator-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/advanced-circuit-128.png b/bobicons/graphics/icons/base/advanced-circuit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/advanced-circuit-128.png rename to bobicons/graphics/icons/base/advanced-circuit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/arithmetic-combinator-128.png b/bobicons/graphics/icons/base/arithmetic-combinator-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/arithmetic-combinator-128.png rename to bobicons/graphics/icons/base/arithmetic-combinator-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/artillery-shell-128.png b/bobicons/graphics/icons/base/artillery-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/artillery-shell-128.png rename to bobicons/graphics/icons/base/artillery-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/artillery-turret-128.png b/bobicons/graphics/icons/base/artillery-turret-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/artillery-turret-128.png rename to bobicons/graphics/icons/base/artillery-turret-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/artillery-wagon-128.png b/bobicons/graphics/icons/base/artillery-wagon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/artillery-wagon-128.png rename to bobicons/graphics/icons/base/artillery-wagon-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/assembling-machine-1-128.png b/bobicons/graphics/icons/base/assembling-machine-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/assembling-machine-1-128.png rename to bobicons/graphics/icons/base/assembling-machine-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/assembling-machine-2-128.png b/bobicons/graphics/icons/base/assembling-machine-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/assembling-machine-2-128.png rename to bobicons/graphics/icons/base/assembling-machine-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/assembling-machine-3-128.png b/bobicons/graphics/icons/base/assembling-machine-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/assembling-machine-3-128.png rename to bobicons/graphics/icons/base/assembling-machine-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/atomic-bomb-128-2.png b/bobicons/graphics/icons/base/atomic-bomb-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/atomic-bomb-128-2.png rename to bobicons/graphics/icons/base/atomic-bomb-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/atomic-bomb-128.png b/bobicons/graphics/icons/base/atomic-bomb-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/atomic-bomb-128.png rename to bobicons/graphics/icons/base/atomic-bomb-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/automation-science-pack-128.png b/bobicons/graphics/icons/base/automation-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/automation-science-pack-128.png rename to bobicons/graphics/icons/base/automation-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-128-2.png b/bobicons/graphics/icons/base/battery-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-128-2.png rename to bobicons/graphics/icons/base/battery-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-128.png b/bobicons/graphics/icons/base/battery-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-128.png rename to bobicons/graphics/icons/base/battery-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-equipment-128-2.png b/bobicons/graphics/icons/base/battery-equipment-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-equipment-128-2.png rename to bobicons/graphics/icons/base/battery-equipment-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-equipment-128.png b/bobicons/graphics/icons/base/battery-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-equipment-128.png rename to bobicons/graphics/icons/base/battery-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-mk2-equipment-128-2.png b/bobicons/graphics/icons/base/battery-mk2-equipment-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-mk2-equipment-128-2.png rename to bobicons/graphics/icons/base/battery-mk2-equipment-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/battery-mk2-equipment-128.png b/bobicons/graphics/icons/base/battery-mk2-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/battery-mk2-equipment-128.png rename to bobicons/graphics/icons/base/battery-mk2-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/beacon-128.png b/bobicons/graphics/icons/base/beacon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/beacon-128.png rename to bobicons/graphics/icons/base/beacon-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/big-electric-pole-128.png b/bobicons/graphics/icons/base/big-electric-pole-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/big-electric-pole-128.png rename to bobicons/graphics/icons/base/big-electric-pole-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/boiler-128.png b/bobicons/graphics/icons/base/boiler-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/boiler-128.png rename to bobicons/graphics/icons/base/boiler-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/burner-inserter-128.png b/bobicons/graphics/icons/base/burner-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/burner-inserter-128.png rename to bobicons/graphics/icons/base/burner-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/burner-mining-drill-128.png b/bobicons/graphics/icons/base/burner-mining-drill-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/burner-mining-drill-128.png rename to bobicons/graphics/icons/base/burner-mining-drill-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/cannon-shell-128.png b/bobicons/graphics/icons/base/cannon-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/cannon-shell-128.png rename to bobicons/graphics/icons/base/cannon-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/car-128-2.png b/bobicons/graphics/icons/base/car-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/car-128-2.png rename to bobicons/graphics/icons/base/car-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/car-128.png b/bobicons/graphics/icons/base/car-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/car-128.png rename to bobicons/graphics/icons/base/car-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/cargo-wagon-128.png b/bobicons/graphics/icons/base/cargo-wagon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/cargo-wagon-128.png rename to bobicons/graphics/icons/base/cargo-wagon-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/centrifuge-128-2.png b/bobicons/graphics/icons/base/centrifuge-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/centrifuge-128-2.png rename to bobicons/graphics/icons/base/centrifuge-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/centrifuge-128-3.png b/bobicons/graphics/icons/base/centrifuge-128-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/centrifuge-128-3.png rename to bobicons/graphics/icons/base/centrifuge-128-3.png diff --git a/bobicons_1.1.2/graphics/icons/base/centrifuge-128.png b/bobicons/graphics/icons/base/centrifuge-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/centrifuge-128.png rename to bobicons/graphics/icons/base/centrifuge-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/chemical-plant-128.png b/bobicons/graphics/icons/base/chemical-plant-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/chemical-plant-128.png rename to bobicons/graphics/icons/base/chemical-plant-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/chemical-science-pack-128.png b/bobicons/graphics/icons/base/chemical-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/chemical-science-pack-128.png rename to bobicons/graphics/icons/base/chemical-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/cliff-explosives-128.png b/bobicons/graphics/icons/base/cliff-explosives-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/cliff-explosives-128.png rename to bobicons/graphics/icons/base/cliff-explosives-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/cluster-grenade-128.png b/bobicons/graphics/icons/base/cluster-grenade-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/cluster-grenade-128.png rename to bobicons/graphics/icons/base/cluster-grenade-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-128-1.png b/bobicons/graphics/icons/base/coal-128-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-128-1.png rename to bobicons/graphics/icons/base/coal-128-1.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-128-2.png b/bobicons/graphics/icons/base/coal-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-128-2.png rename to bobicons/graphics/icons/base/coal-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-128-3.png b/bobicons/graphics/icons/base/coal-128-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-128-3.png rename to bobicons/graphics/icons/base/coal-128-3.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-128-4.png b/bobicons/graphics/icons/base/coal-128-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-128-4.png rename to bobicons/graphics/icons/base/coal-128-4.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-128.png b/bobicons/graphics/icons/base/coal-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-128.png rename to bobicons/graphics/icons/base/coal-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/coal-dark-background-128.png b/bobicons/graphics/icons/base/coal-dark-background-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coal-dark-background-128.png rename to bobicons/graphics/icons/base/coal-dark-background-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/coin-128.png b/bobicons/graphics/icons/base/coin-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/coin-128.png rename to bobicons/graphics/icons/base/coin-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/combat-shotgun-128.png b/bobicons/graphics/icons/base/combat-shotgun-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/combat-shotgun-128.png rename to bobicons/graphics/icons/base/combat-shotgun-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/compilatron-128.png b/bobicons/graphics/icons/base/compilatron-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/compilatron-128.png rename to bobicons/graphics/icons/base/compilatron-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/concrete-128-2.png b/bobicons/graphics/icons/base/concrete-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/concrete-128-2.png rename to bobicons/graphics/icons/base/concrete-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/concrete-128.png b/bobicons/graphics/icons/base/concrete-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/concrete-128.png rename to bobicons/graphics/icons/base/concrete-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/constant-combinator-128.png b/bobicons/graphics/icons/base/constant-combinator-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/constant-combinator-128.png rename to bobicons/graphics/icons/base/constant-combinator-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/construction-robot-128.png b/bobicons/graphics/icons/base/construction-robot-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/construction-robot-128.png rename to bobicons/graphics/icons/base/construction-robot-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-cable-128.png b/bobicons/graphics/icons/base/copper-cable-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-cable-128.png rename to bobicons/graphics/icons/base/copper-cable-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-ore-1-128.png b/bobicons/graphics/icons/base/copper-ore-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-ore-1-128.png rename to bobicons/graphics/icons/base/copper-ore-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-ore-128.png b/bobicons/graphics/icons/base/copper-ore-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-ore-128.png rename to bobicons/graphics/icons/base/copper-ore-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-ore-2-128.png b/bobicons/graphics/icons/base/copper-ore-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-ore-2-128.png rename to bobicons/graphics/icons/base/copper-ore-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-ore-3-128.png b/bobicons/graphics/icons/base/copper-ore-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-ore-3-128.png rename to bobicons/graphics/icons/base/copper-ore-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-ore-4-128.png b/bobicons/graphics/icons/base/copper-ore-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-ore-4-128.png rename to bobicons/graphics/icons/base/copper-ore-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-plate-128-2.png b/bobicons/graphics/icons/base/copper-plate-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-plate-128-2.png rename to bobicons/graphics/icons/base/copper-plate-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/copper-plate-128.png b/bobicons/graphics/icons/base/copper-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/copper-plate-128.png rename to bobicons/graphics/icons/base/copper-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/crude-oil-128.png b/bobicons/graphics/icons/base/crude-oil-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/crude-oil-128.png rename to bobicons/graphics/icons/base/crude-oil-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/curved-rail-128.png b/bobicons/graphics/icons/base/curved-rail-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/curved-rail-128.png rename to bobicons/graphics/icons/base/curved-rail-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/decider-combinator-128.png b/bobicons/graphics/icons/base/decider-combinator-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/decider-combinator-128.png rename to bobicons/graphics/icons/base/decider-combinator-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/defender-capsule-128.png b/bobicons/graphics/icons/base/defender-capsule-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/defender-capsule-128.png rename to bobicons/graphics/icons/base/defender-capsule-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/destroyer-capsule-128.png b/bobicons/graphics/icons/base/destroyer-capsule-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/destroyer-capsule-128.png rename to bobicons/graphics/icons/base/destroyer-capsule-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/discharge-defense-equipment-128.png b/bobicons/graphics/icons/base/discharge-defense-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/discharge-defense-equipment-128.png rename to bobicons/graphics/icons/base/discharge-defense-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/discharge-defense-remote-128.png b/bobicons/graphics/icons/base/discharge-defense-remote-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/discharge-defense-remote-128.png rename to bobicons/graphics/icons/base/discharge-defense-remote-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/distractor-capsule-128.png b/bobicons/graphics/icons/base/distractor-capsule-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/distractor-capsule-128.png rename to bobicons/graphics/icons/base/distractor-capsule-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/effectivity-module-128.png b/bobicons/graphics/icons/base/effectivity-module-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/effectivity-module-128.png rename to bobicons/graphics/icons/base/effectivity-module-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/effectivity-module-2-128.png b/bobicons/graphics/icons/base/effectivity-module-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/effectivity-module-2-128.png rename to bobicons/graphics/icons/base/effectivity-module-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/effectivity-module-3-128.png b/bobicons/graphics/icons/base/effectivity-module-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/effectivity-module-3-128.png rename to bobicons/graphics/icons/base/effectivity-module-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/electric-engine-unit-128.png b/bobicons/graphics/icons/base/electric-engine-unit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/electric-engine-unit-128.png rename to bobicons/graphics/icons/base/electric-engine-unit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/electric-furnace-128.png b/bobicons/graphics/icons/base/electric-furnace-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/electric-furnace-128.png rename to bobicons/graphics/icons/base/electric-furnace-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/electric-mining-drill-128.png b/bobicons/graphics/icons/base/electric-mining-drill-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/electric-mining-drill-128.png rename to bobicons/graphics/icons/base/electric-mining-drill-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/electric-mining-drill-64-2.png b/bobicons/graphics/icons/base/electric-mining-drill-64-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/electric-mining-drill-64-2.png rename to bobicons/graphics/icons/base/electric-mining-drill-64-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/electronic-circuit-128.png b/bobicons/graphics/icons/base/electronic-circuit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/electronic-circuit-128.png rename to bobicons/graphics/icons/base/electronic-circuit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/energy-shield-equipment-128.png b/bobicons/graphics/icons/base/energy-shield-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/energy-shield-equipment-128.png rename to bobicons/graphics/icons/base/energy-shield-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/energy-shield-mk2-equipment-128.png b/bobicons/graphics/icons/base/energy-shield-mk2-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/energy-shield-mk2-equipment-128.png rename to bobicons/graphics/icons/base/energy-shield-mk2-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/engine-unit-128-2.png b/bobicons/graphics/icons/base/engine-unit-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/engine-unit-128-2.png rename to bobicons/graphics/icons/base/engine-unit-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/engine-unit-128.png b/bobicons/graphics/icons/base/engine-unit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/engine-unit-128.png rename to bobicons/graphics/icons/base/engine-unit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/exoskeleton-equipment-128.png b/bobicons/graphics/icons/base/exoskeleton-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/exoskeleton-equipment-128.png rename to bobicons/graphics/icons/base/exoskeleton-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/explosive-cannon-shell-128.png b/bobicons/graphics/icons/base/explosive-cannon-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/explosive-cannon-shell-128.png rename to bobicons/graphics/icons/base/explosive-cannon-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/explosive-rocket-128.png b/bobicons/graphics/icons/base/explosive-rocket-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/explosive-rocket-128.png rename to bobicons/graphics/icons/base/explosive-rocket-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/explosive-uranium-cannon-shell-128.png b/bobicons/graphics/icons/base/explosive-uranium-cannon-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/explosive-uranium-cannon-shell-128.png rename to bobicons/graphics/icons/base/explosive-uranium-cannon-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/explosives-128.png b/bobicons/graphics/icons/base/explosives-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/explosives-128.png rename to bobicons/graphics/icons/base/explosives-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-splitter-128-2.png b/bobicons/graphics/icons/base/express-splitter-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-splitter-128-2.png rename to bobicons/graphics/icons/base/express-splitter-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-splitter-128.png b/bobicons/graphics/icons/base/express-splitter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-splitter-128.png rename to bobicons/graphics/icons/base/express-splitter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-transport-belt-128-2.png b/bobicons/graphics/icons/base/express-transport-belt-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-transport-belt-128-2.png rename to bobicons/graphics/icons/base/express-transport-belt-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-transport-belt-128.png b/bobicons/graphics/icons/base/express-transport-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-transport-belt-128.png rename to bobicons/graphics/icons/base/express-transport-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-underground-belt-128-2.png b/bobicons/graphics/icons/base/express-underground-belt-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-underground-belt-128-2.png rename to bobicons/graphics/icons/base/express-underground-belt-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/express-underground-belt-128.png b/bobicons/graphics/icons/base/express-underground-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/express-underground-belt-128.png rename to bobicons/graphics/icons/base/express-underground-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-inserter-128.png b/bobicons/graphics/icons/base/fast-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-inserter-128.png rename to bobicons/graphics/icons/base/fast-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-splitter-128-2.png b/bobicons/graphics/icons/base/fast-splitter-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-splitter-128-2.png rename to bobicons/graphics/icons/base/fast-splitter-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-splitter-128.png b/bobicons/graphics/icons/base/fast-splitter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-splitter-128.png rename to bobicons/graphics/icons/base/fast-splitter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-transport-belt-128-2.png b/bobicons/graphics/icons/base/fast-transport-belt-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-transport-belt-128-2.png rename to bobicons/graphics/icons/base/fast-transport-belt-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-transport-belt-128.png b/bobicons/graphics/icons/base/fast-transport-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-transport-belt-128.png rename to bobicons/graphics/icons/base/fast-transport-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-underground-belt-128-2.png b/bobicons/graphics/icons/base/fast-underground-belt-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-underground-belt-128-2.png rename to bobicons/graphics/icons/base/fast-underground-belt-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/fast-underground-belt-128.png b/bobicons/graphics/icons/base/fast-underground-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fast-underground-belt-128.png rename to bobicons/graphics/icons/base/fast-underground-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/filter-inserter-128.png b/bobicons/graphics/icons/base/filter-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/filter-inserter-128.png rename to bobicons/graphics/icons/base/filter-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/firearm-magazine-128.png b/bobicons/graphics/icons/base/firearm-magazine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/firearm-magazine-128.png rename to bobicons/graphics/icons/base/firearm-magazine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/flamethrower-128.png b/bobicons/graphics/icons/base/flamethrower-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/flamethrower-128.png rename to bobicons/graphics/icons/base/flamethrower-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/flamethrower-ammo-128.png b/bobicons/graphics/icons/base/flamethrower-ammo-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/flamethrower-ammo-128.png rename to bobicons/graphics/icons/base/flamethrower-ammo-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/flamethrower-turret-128.png b/bobicons/graphics/icons/base/flamethrower-turret-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/flamethrower-turret-128.png rename to bobicons/graphics/icons/base/flamethrower-turret-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fluid-wagon-128.png b/bobicons/graphics/icons/base/fluid-wagon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fluid-wagon-128.png rename to bobicons/graphics/icons/base/fluid-wagon-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/flying-robot-frame-128.png b/bobicons/graphics/icons/base/flying-robot-frame-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/flying-robot-frame-128.png rename to bobicons/graphics/icons/base/flying-robot-frame-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/fusion-reactor-equipment-128.png b/bobicons/graphics/icons/base/fusion-reactor-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/fusion-reactor-equipment-128.png rename to bobicons/graphics/icons/base/fusion-reactor-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/gate-128.png b/bobicons/graphics/icons/base/gate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/gate-128.png rename to bobicons/graphics/icons/base/gate-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/green-wire-128.png b/bobicons/graphics/icons/base/green-wire-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/green-wire-128.png rename to bobicons/graphics/icons/base/green-wire-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/grenade-128.png b/bobicons/graphics/icons/base/grenade-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/grenade-128.png rename to bobicons/graphics/icons/base/grenade-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/gun-turret-128.png b/bobicons/graphics/icons/base/gun-turret-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/gun-turret-128.png rename to bobicons/graphics/icons/base/gun-turret-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/hazard-concrete-128.png b/bobicons/graphics/icons/base/hazard-concrete-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/hazard-concrete-128.png rename to bobicons/graphics/icons/base/hazard-concrete-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/heat-exchanger-128.png b/bobicons/graphics/icons/base/heat-exchanger-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/heat-exchanger-128.png rename to bobicons/graphics/icons/base/heat-exchanger-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/heat-pipe-128-2.png b/bobicons/graphics/icons/base/heat-pipe-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/heat-pipe-128-2.png rename to bobicons/graphics/icons/base/heat-pipe-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/heat-pipe-128.png b/bobicons/graphics/icons/base/heat-pipe-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/heat-pipe-128.png rename to bobicons/graphics/icons/base/heat-pipe-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/heavy-armor-128.png b/bobicons/graphics/icons/base/heavy-armor-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/heavy-armor-128.png rename to bobicons/graphics/icons/base/heavy-armor-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/heavy-oil-128.png b/bobicons/graphics/icons/base/heavy-oil-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/heavy-oil-128.png rename to bobicons/graphics/icons/base/heavy-oil-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/inserter-128.png b/bobicons/graphics/icons/base/inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/inserter-128.png rename to bobicons/graphics/icons/base/inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-chest-128.png b/bobicons/graphics/icons/base/iron-chest-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-chest-128.png rename to bobicons/graphics/icons/base/iron-chest-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-gear-wheel-128-2.png b/bobicons/graphics/icons/base/iron-gear-wheel-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-gear-wheel-128-2.png rename to bobicons/graphics/icons/base/iron-gear-wheel-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-gear-wheel-128.png b/bobicons/graphics/icons/base/iron-gear-wheel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-gear-wheel-128.png rename to bobicons/graphics/icons/base/iron-gear-wheel-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-1-128-2.png b/bobicons/graphics/icons/base/iron-ore-1-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-1-128-2.png rename to bobicons/graphics/icons/base/iron-ore-1-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-1-128.png b/bobicons/graphics/icons/base/iron-ore-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-1-128.png rename to bobicons/graphics/icons/base/iron-ore-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-128.png b/bobicons/graphics/icons/base/iron-ore-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-128.png rename to bobicons/graphics/icons/base/iron-ore-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-2-128-2.png b/bobicons/graphics/icons/base/iron-ore-2-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-2-128-2.png rename to bobicons/graphics/icons/base/iron-ore-2-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-2-128.png b/bobicons/graphics/icons/base/iron-ore-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-2-128.png rename to bobicons/graphics/icons/base/iron-ore-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-3-128-2.png b/bobicons/graphics/icons/base/iron-ore-3-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-3-128-2.png rename to bobicons/graphics/icons/base/iron-ore-3-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-3-128.png b/bobicons/graphics/icons/base/iron-ore-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-3-128.png rename to bobicons/graphics/icons/base/iron-ore-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-4-128-2.png b/bobicons/graphics/icons/base/iron-ore-4-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-4-128-2.png rename to bobicons/graphics/icons/base/iron-ore-4-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-ore-4-128.png b/bobicons/graphics/icons/base/iron-ore-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-ore-4-128.png rename to bobicons/graphics/icons/base/iron-ore-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-plate-128-2.png b/bobicons/graphics/icons/base/iron-plate-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-plate-128-2.png rename to bobicons/graphics/icons/base/iron-plate-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-plate-128.png b/bobicons/graphics/icons/base/iron-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-plate-128.png rename to bobicons/graphics/icons/base/iron-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-stick-128-2.png b/bobicons/graphics/icons/base/iron-stick-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-stick-128-2.png rename to bobicons/graphics/icons/base/iron-stick-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/iron-stick-128.png b/bobicons/graphics/icons/base/iron-stick-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/iron-stick-128.png rename to bobicons/graphics/icons/base/iron-stick-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/lab-128.png b/bobicons/graphics/icons/base/lab-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/lab-128.png rename to bobicons/graphics/icons/base/lab-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/land-mine-128.png b/bobicons/graphics/icons/base/land-mine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/land-mine-128.png rename to bobicons/graphics/icons/base/land-mine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/landfill-128.png b/bobicons/graphics/icons/base/landfill-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/landfill-128.png rename to bobicons/graphics/icons/base/landfill-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/laser-turret-128.png b/bobicons/graphics/icons/base/laser-turret-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/laser-turret-128.png rename to bobicons/graphics/icons/base/laser-turret-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/light-armor-128.png b/bobicons/graphics/icons/base/light-armor-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/light-armor-128.png rename to bobicons/graphics/icons/base/light-armor-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/light-oil-128.png b/bobicons/graphics/icons/base/light-oil-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/light-oil-128.png rename to bobicons/graphics/icons/base/light-oil-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/locomotive-128.png b/bobicons/graphics/icons/base/locomotive-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/locomotive-128.png rename to bobicons/graphics/icons/base/locomotive-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-chest-active-provider-128.png b/bobicons/graphics/icons/base/logistic-chest-active-provider-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-chest-active-provider-128.png rename to bobicons/graphics/icons/base/logistic-chest-active-provider-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-chest-buffer-128.png b/bobicons/graphics/icons/base/logistic-chest-buffer-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-chest-buffer-128.png rename to bobicons/graphics/icons/base/logistic-chest-buffer-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-chest-passive-provider-128.png b/bobicons/graphics/icons/base/logistic-chest-passive-provider-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-chest-passive-provider-128.png rename to bobicons/graphics/icons/base/logistic-chest-passive-provider-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-chest-requester-128.png b/bobicons/graphics/icons/base/logistic-chest-requester-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-chest-requester-128.png rename to bobicons/graphics/icons/base/logistic-chest-requester-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-chest-storage-128.png b/bobicons/graphics/icons/base/logistic-chest-storage-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-chest-storage-128.png rename to bobicons/graphics/icons/base/logistic-chest-storage-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-robot-128.png b/bobicons/graphics/icons/base/logistic-robot-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-robot-128.png rename to bobicons/graphics/icons/base/logistic-robot-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/logistic-science-pack-128.png b/bobicons/graphics/icons/base/logistic-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/logistic-science-pack-128.png rename to bobicons/graphics/icons/base/logistic-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/long-handed-inserter-128.png b/bobicons/graphics/icons/base/long-handed-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/long-handed-inserter-128.png rename to bobicons/graphics/icons/base/long-handed-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/low-density-structure-128-2.png b/bobicons/graphics/icons/base/low-density-structure-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/low-density-structure-128-2.png rename to bobicons/graphics/icons/base/low-density-structure-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/low-density-structure-128.png b/bobicons/graphics/icons/base/low-density-structure-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/low-density-structure-128.png rename to bobicons/graphics/icons/base/low-density-structure-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/lubricant-128.png b/bobicons/graphics/icons/base/lubricant-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/lubricant-128.png rename to bobicons/graphics/icons/base/lubricant-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/medium-electric-pole-128.png b/bobicons/graphics/icons/base/medium-electric-pole-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/medium-electric-pole-128.png rename to bobicons/graphics/icons/base/medium-electric-pole-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/military-science-pack-128.png b/bobicons/graphics/icons/base/military-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/military-science-pack-128.png rename to bobicons/graphics/icons/base/military-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/modular-armor-128.png b/bobicons/graphics/icons/base/modular-armor-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/modular-armor-128.png rename to bobicons/graphics/icons/base/modular-armor-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/night-vision-equipment-128.png b/bobicons/graphics/icons/base/night-vision-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/night-vision-equipment-128.png rename to bobicons/graphics/icons/base/night-vision-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/nuclear-fuel-128-2.png b/bobicons/graphics/icons/base/nuclear-fuel-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/nuclear-fuel-128-2.png rename to bobicons/graphics/icons/base/nuclear-fuel-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/nuclear-fuel-128.png b/bobicons/graphics/icons/base/nuclear-fuel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/nuclear-fuel-128.png rename to bobicons/graphics/icons/base/nuclear-fuel-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/nuclear-reactor-128.png b/bobicons/graphics/icons/base/nuclear-reactor-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/nuclear-reactor-128.png rename to bobicons/graphics/icons/base/nuclear-reactor-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/offshore-pump-128.png b/bobicons/graphics/icons/base/offshore-pump-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/offshore-pump-128.png rename to bobicons/graphics/icons/base/offshore-pump-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/oil-refinery-128.png b/bobicons/graphics/icons/base/oil-refinery-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/oil-refinery-128.png rename to bobicons/graphics/icons/base/oil-refinery-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/personal-laser-defense-equipment-128.png b/bobicons/graphics/icons/base/personal-laser-defense-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/personal-laser-defense-equipment-128.png rename to bobicons/graphics/icons/base/personal-laser-defense-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/personal-roboport-equipment-128.png b/bobicons/graphics/icons/base/personal-roboport-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/personal-roboport-equipment-128.png rename to bobicons/graphics/icons/base/personal-roboport-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/personal-roboport-mk2-equipment-128.png b/bobicons/graphics/icons/base/personal-roboport-mk2-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/personal-roboport-mk2-equipment-128.png rename to bobicons/graphics/icons/base/personal-roboport-mk2-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/petroleum-gas-128.png b/bobicons/graphics/icons/base/petroleum-gas-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/petroleum-gas-128.png rename to bobicons/graphics/icons/base/petroleum-gas-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/piercing-rounds-magazine-128.png b/bobicons/graphics/icons/base/piercing-rounds-magazine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/piercing-rounds-magazine-128.png rename to bobicons/graphics/icons/base/piercing-rounds-magazine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/piercing-shotgun-shell-128.png b/bobicons/graphics/icons/base/piercing-shotgun-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/piercing-shotgun-shell-128.png rename to bobicons/graphics/icons/base/piercing-shotgun-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/pipe-128.png b/bobicons/graphics/icons/base/pipe-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/pipe-128.png rename to bobicons/graphics/icons/base/pipe-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/pipe-to-ground-128.png b/bobicons/graphics/icons/base/pipe-to-ground-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/pipe-to-ground-128.png rename to bobicons/graphics/icons/base/pipe-to-ground-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/pistol-128.png b/bobicons/graphics/icons/base/pistol-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/pistol-128.png rename to bobicons/graphics/icons/base/pistol-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/plastic-bar-128.png b/bobicons/graphics/icons/base/plastic-bar-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/plastic-bar-128.png rename to bobicons/graphics/icons/base/plastic-bar-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/poison-capsule-128.png b/bobicons/graphics/icons/base/poison-capsule-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/poison-capsule-128.png rename to bobicons/graphics/icons/base/poison-capsule-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/power-armor-128.png b/bobicons/graphics/icons/base/power-armor-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/power-armor-128.png rename to bobicons/graphics/icons/base/power-armor-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/power-armor-mk2-128.png b/bobicons/graphics/icons/base/power-armor-mk2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/power-armor-mk2-128.png rename to bobicons/graphics/icons/base/power-armor-mk2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/power-switch-128.png b/bobicons/graphics/icons/base/power-switch-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/power-switch-128.png rename to bobicons/graphics/icons/base/power-switch-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/processing-unit-128.png b/bobicons/graphics/icons/base/processing-unit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/processing-unit-128.png rename to bobicons/graphics/icons/base/processing-unit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/production-science-pack-128.png b/bobicons/graphics/icons/base/production-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/production-science-pack-128.png rename to bobicons/graphics/icons/base/production-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/productivity-module-128.png b/bobicons/graphics/icons/base/productivity-module-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/productivity-module-128.png rename to bobicons/graphics/icons/base/productivity-module-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/productivity-module-2-128.png b/bobicons/graphics/icons/base/productivity-module-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/productivity-module-2-128.png rename to bobicons/graphics/icons/base/productivity-module-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/productivity-module-3-128.png b/bobicons/graphics/icons/base/productivity-module-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/productivity-module-3-128.png rename to bobicons/graphics/icons/base/productivity-module-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/programmable-speaker-128.png b/bobicons/graphics/icons/base/programmable-speaker-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/programmable-speaker-128.png rename to bobicons/graphics/icons/base/programmable-speaker-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/pump-128.png b/bobicons/graphics/icons/base/pump-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/pump-128.png rename to bobicons/graphics/icons/base/pump-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/pumpjack-128.png b/bobicons/graphics/icons/base/pumpjack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/pumpjack-128.png rename to bobicons/graphics/icons/base/pumpjack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/radar-128.png b/bobicons/graphics/icons/base/radar-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/radar-128.png rename to bobicons/graphics/icons/base/radar-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rail-128.png b/bobicons/graphics/icons/base/rail-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rail-128.png rename to bobicons/graphics/icons/base/rail-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rail-chain-signal-128.png b/bobicons/graphics/icons/base/rail-chain-signal-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rail-chain-signal-128.png rename to bobicons/graphics/icons/base/rail-chain-signal-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rail-signal-128.png b/bobicons/graphics/icons/base/rail-signal-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rail-signal-128.png rename to bobicons/graphics/icons/base/rail-signal-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/raw-fish-128.png b/bobicons/graphics/icons/base/raw-fish-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/raw-fish-128.png rename to bobicons/graphics/icons/base/raw-fish-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/red-wire-128.png b/bobicons/graphics/icons/base/red-wire-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/red-wire-128.png rename to bobicons/graphics/icons/base/red-wire-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/refined-concrete-128.png b/bobicons/graphics/icons/base/refined-concrete-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/refined-concrete-128.png rename to bobicons/graphics/icons/base/refined-concrete-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/refined-hazard-concrete-128.png b/bobicons/graphics/icons/base/refined-hazard-concrete-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/refined-hazard-concrete-128.png rename to bobicons/graphics/icons/base/refined-hazard-concrete-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/repair-pack-128-2.png b/bobicons/graphics/icons/base/repair-pack-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/repair-pack-128-2.png rename to bobicons/graphics/icons/base/repair-pack-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/repair-pack-128.png b/bobicons/graphics/icons/base/repair-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/repair-pack-128.png rename to bobicons/graphics/icons/base/repair-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/roboport-128.png b/bobicons/graphics/icons/base/roboport-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/roboport-128.png rename to bobicons/graphics/icons/base/roboport-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-128.png b/bobicons/graphics/icons/base/rocket-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-128.png rename to bobicons/graphics/icons/base/rocket-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-control-unit-128.png b/bobicons/graphics/icons/base/rocket-control-unit-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-control-unit-128.png rename to bobicons/graphics/icons/base/rocket-control-unit-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-fuel-128.png b/bobicons/graphics/icons/base/rocket-fuel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-fuel-128.png rename to bobicons/graphics/icons/base/rocket-fuel-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-launcher-128.png b/bobicons/graphics/icons/base/rocket-launcher-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-launcher-128.png rename to bobicons/graphics/icons/base/rocket-launcher-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-part-128.png b/bobicons/graphics/icons/base/rocket-part-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-part-128.png rename to bobicons/graphics/icons/base/rocket-part-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/rocket-silo-128.png b/bobicons/graphics/icons/base/rocket-silo-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/rocket-silo-128.png rename to bobicons/graphics/icons/base/rocket-silo-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/satellite-128.png b/bobicons/graphics/icons/base/satellite-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/satellite-128.png rename to bobicons/graphics/icons/base/satellite-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/shotgun-128.png b/bobicons/graphics/icons/base/shotgun-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/shotgun-128.png rename to bobicons/graphics/icons/base/shotgun-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/shotgun-shell-128.png b/bobicons/graphics/icons/base/shotgun-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/shotgun-shell-128.png rename to bobicons/graphics/icons/base/shotgun-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/slowdown-capsule-128.png b/bobicons/graphics/icons/base/slowdown-capsule-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/slowdown-capsule-128.png rename to bobicons/graphics/icons/base/slowdown-capsule-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/small-electric-pole-128.png b/bobicons/graphics/icons/base/small-electric-pole-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/small-electric-pole-128.png rename to bobicons/graphics/icons/base/small-electric-pole-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solar-panel-128.png b/bobicons/graphics/icons/base/solar-panel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solar-panel-128.png rename to bobicons/graphics/icons/base/solar-panel-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solar-panel-64-2.png b/bobicons/graphics/icons/base/solar-panel-64-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solar-panel-64-2.png rename to bobicons/graphics/icons/base/solar-panel-64-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/solar-panel-equipment-128.png b/bobicons/graphics/icons/base/solar-panel-equipment-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solar-panel-equipment-128.png rename to bobicons/graphics/icons/base/solar-panel-equipment-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solar-panel-equipment-64-2.png b/bobicons/graphics/icons/base/solar-panel-equipment-64-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solar-panel-equipment-64-2.png rename to bobicons/graphics/icons/base/solar-panel-equipment-64-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/solid-fuel-128.png b/bobicons/graphics/icons/base/solid-fuel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solid-fuel-128.png rename to bobicons/graphics/icons/base/solid-fuel-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solid-fuel-from-heavy-oil-128.png b/bobicons/graphics/icons/base/solid-fuel-from-heavy-oil-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solid-fuel-from-heavy-oil-128.png rename to bobicons/graphics/icons/base/solid-fuel-from-heavy-oil-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solid-fuel-from-light-oil-128.png b/bobicons/graphics/icons/base/solid-fuel-from-light-oil-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solid-fuel-from-light-oil-128.png rename to bobicons/graphics/icons/base/solid-fuel-from-light-oil-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/solid-fuel-from-petroleum-gas-128.png b/bobicons/graphics/icons/base/solid-fuel-from-petroleum-gas-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/solid-fuel-from-petroleum-gas-128.png rename to bobicons/graphics/icons/base/solid-fuel-from-petroleum-gas-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/space-science-pack-128.png b/bobicons/graphics/icons/base/space-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/space-science-pack-128.png rename to bobicons/graphics/icons/base/space-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/speed-module-128.png b/bobicons/graphics/icons/base/speed-module-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/speed-module-128.png rename to bobicons/graphics/icons/base/speed-module-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/speed-module-2-128.png b/bobicons/graphics/icons/base/speed-module-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/speed-module-2-128.png rename to bobicons/graphics/icons/base/speed-module-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/speed-module-3-128.png b/bobicons/graphics/icons/base/speed-module-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/speed-module-3-128.png rename to bobicons/graphics/icons/base/speed-module-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/splitter-128-2.png b/bobicons/graphics/icons/base/splitter-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/splitter-128-2.png rename to bobicons/graphics/icons/base/splitter-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/splitter-128.png b/bobicons/graphics/icons/base/splitter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/splitter-128.png rename to bobicons/graphics/icons/base/splitter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stack-filter-inserter-128.png b/bobicons/graphics/icons/base/stack-filter-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stack-filter-inserter-128.png rename to bobicons/graphics/icons/base/stack-filter-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stack-inserter-128.png b/bobicons/graphics/icons/base/stack-inserter-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stack-inserter-128.png rename to bobicons/graphics/icons/base/stack-inserter-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steam-128.png b/bobicons/graphics/icons/base/steam-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steam-128.png rename to bobicons/graphics/icons/base/steam-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steam-engine-128.png b/bobicons/graphics/icons/base/steam-engine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steam-engine-128.png rename to bobicons/graphics/icons/base/steam-engine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steam-turbine-128.png b/bobicons/graphics/icons/base/steam-turbine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steam-turbine-128.png rename to bobicons/graphics/icons/base/steam-turbine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steel-chest-128.png b/bobicons/graphics/icons/base/steel-chest-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steel-chest-128.png rename to bobicons/graphics/icons/base/steel-chest-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steel-furnace-128.png b/bobicons/graphics/icons/base/steel-furnace-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steel-furnace-128.png rename to bobicons/graphics/icons/base/steel-furnace-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/steel-plate-128-2.png b/bobicons/graphics/icons/base/steel-plate-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steel-plate-128-2.png rename to bobicons/graphics/icons/base/steel-plate-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/steel-plate-128-3.png b/bobicons/graphics/icons/base/steel-plate-128-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steel-plate-128-3.png rename to bobicons/graphics/icons/base/steel-plate-128-3.png diff --git a/bobicons_1.1.2/graphics/icons/base/steel-plate-128.png b/bobicons/graphics/icons/base/steel-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/steel-plate-128.png rename to bobicons/graphics/icons/base/steel-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-1-128.png b/bobicons/graphics/icons/base/stone-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-1-128.png rename to bobicons/graphics/icons/base/stone-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-128.png b/bobicons/graphics/icons/base/stone-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-128.png rename to bobicons/graphics/icons/base/stone-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-2-128.png b/bobicons/graphics/icons/base/stone-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-2-128.png rename to bobicons/graphics/icons/base/stone-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-3-128.png b/bobicons/graphics/icons/base/stone-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-3-128.png rename to bobicons/graphics/icons/base/stone-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-brick-128.png b/bobicons/graphics/icons/base/stone-brick-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-brick-128.png rename to bobicons/graphics/icons/base/stone-brick-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-furnace-128.png b/bobicons/graphics/icons/base/stone-furnace-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-furnace-128.png rename to bobicons/graphics/icons/base/stone-furnace-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/stone-wall-128.png b/bobicons/graphics/icons/base/stone-wall-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/stone-wall-128.png rename to bobicons/graphics/icons/base/stone-wall-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/storage-tank-128.png b/bobicons/graphics/icons/base/storage-tank-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/storage-tank-128.png rename to bobicons/graphics/icons/base/storage-tank-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/submachine-gun-128.png b/bobicons/graphics/icons/base/submachine-gun-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/submachine-gun-128.png rename to bobicons/graphics/icons/base/submachine-gun-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/substation-128.png b/bobicons/graphics/icons/base/substation-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/substation-128.png rename to bobicons/graphics/icons/base/substation-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/substation-64-2.png b/bobicons/graphics/icons/base/substation-64-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/substation-64-2.png rename to bobicons/graphics/icons/base/substation-64-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/sulfur-128.png b/bobicons/graphics/icons/base/sulfur-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/sulfur-128.png rename to bobicons/graphics/icons/base/sulfur-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/sulfuric-acid-128-2.png b/bobicons/graphics/icons/base/sulfuric-acid-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/sulfuric-acid-128-2.png rename to bobicons/graphics/icons/base/sulfuric-acid-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/sulfuric-acid-128.png b/bobicons/graphics/icons/base/sulfuric-acid-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/sulfuric-acid-128.png rename to bobicons/graphics/icons/base/sulfuric-acid-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/tank-128.png b/bobicons/graphics/icons/base/tank-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/tank-128.png rename to bobicons/graphics/icons/base/tank-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/tank-cannon-128.png b/bobicons/graphics/icons/base/tank-cannon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/tank-cannon-128.png rename to bobicons/graphics/icons/base/tank-cannon-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/train-stop-128.png b/bobicons/graphics/icons/base/train-stop-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/train-stop-128.png rename to bobicons/graphics/icons/base/train-stop-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/transport-belt-128-2.png b/bobicons/graphics/icons/base/transport-belt-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/transport-belt-128-2.png rename to bobicons/graphics/icons/base/transport-belt-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/transport-belt-128.png b/bobicons/graphics/icons/base/transport-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/transport-belt-128.png rename to bobicons/graphics/icons/base/transport-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/underground-belt-128.png b/bobicons/graphics/icons/base/underground-belt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/underground-belt-128.png rename to bobicons/graphics/icons/base/underground-belt-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-235-128.png b/bobicons/graphics/icons/base/uranium-235-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-235-128.png rename to bobicons/graphics/icons/base/uranium-235-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-238-128.png b/bobicons/graphics/icons/base/uranium-238-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-238-128.png rename to bobicons/graphics/icons/base/uranium-238-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-cannon-shell-128.png b/bobicons/graphics/icons/base/uranium-cannon-shell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-cannon-shell-128.png rename to bobicons/graphics/icons/base/uranium-cannon-shell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-fuel-cell-128.png b/bobicons/graphics/icons/base/uranium-fuel-cell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-fuel-cell-128.png rename to bobicons/graphics/icons/base/uranium-fuel-cell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-ore-1-128.png b/bobicons/graphics/icons/base/uranium-ore-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-ore-1-128.png rename to bobicons/graphics/icons/base/uranium-ore-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-ore-128.png b/bobicons/graphics/icons/base/uranium-ore-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-ore-128.png rename to bobicons/graphics/icons/base/uranium-ore-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-ore-2-128.png b/bobicons/graphics/icons/base/uranium-ore-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-ore-2-128.png rename to bobicons/graphics/icons/base/uranium-ore-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-ore-3-128.png b/bobicons/graphics/icons/base/uranium-ore-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-ore-3-128.png rename to bobicons/graphics/icons/base/uranium-ore-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/uranium-rounds-magazine-128.png b/bobicons/graphics/icons/base/uranium-rounds-magazine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/uranium-rounds-magazine-128.png rename to bobicons/graphics/icons/base/uranium-rounds-magazine-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/used-up-uranium-fuel-cell-128.png b/bobicons/graphics/icons/base/used-up-uranium-fuel-cell-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/used-up-uranium-fuel-cell-128.png rename to bobicons/graphics/icons/base/used-up-uranium-fuel-cell-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/utility-science-pack-128.png b/bobicons/graphics/icons/base/utility-science-pack-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/utility-science-pack-128.png rename to bobicons/graphics/icons/base/utility-science-pack-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/water-128.png b/bobicons/graphics/icons/base/water-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/water-128.png rename to bobicons/graphics/icons/base/water-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/wood-128-2.png b/bobicons/graphics/icons/base/wood-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/wood-128-2.png rename to bobicons/graphics/icons/base/wood-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/base/wood-128.png b/bobicons/graphics/icons/base/wood-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/wood-128.png rename to bobicons/graphics/icons/base/wood-128.png diff --git a/bobicons_1.1.2/graphics/icons/base/wooden-chest-128.png b/bobicons/graphics/icons/base/wooden-chest-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/base/wooden-chest-128.png rename to bobicons/graphics/icons/base/wooden-chest-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-2-128.png b/bobicons/graphics/icons/bobassembly/assembling-machine-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-2-128.png rename to bobicons/graphics/icons/bobassembly/assembling-machine-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-3-128.png b/bobicons/graphics/icons/bobassembly/assembling-machine-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-3-128.png rename to bobicons/graphics/icons/bobassembly/assembling-machine-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-4-128.png b/bobicons/graphics/icons/bobassembly/assembling-machine-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-4-128.png rename to bobicons/graphics/icons/bobassembly/assembling-machine-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-5-128.png b/bobicons/graphics/icons/bobassembly/assembling-machine-5-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-5-128.png rename to bobicons/graphics/icons/bobassembly/assembling-machine-5-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-6-128.png b/bobicons/graphics/icons/bobassembly/assembling-machine-6-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/assembling-machine-6-128.png rename to bobicons/graphics/icons/bobassembly/assembling-machine-6-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/chemical-furnace-64.png b/bobicons/graphics/icons/bobassembly/chemical-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/chemical-furnace-64.png rename to bobicons/graphics/icons/bobassembly/chemical-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-chemical-mixing-furnace-2-64.png b/bobicons/graphics/icons/bobassembly/electric-chemical-mixing-furnace-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-chemical-mixing-furnace-2-64.png rename to bobicons/graphics/icons/bobassembly/electric-chemical-mixing-furnace-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-chemical-mixing-furnace-64.png b/bobicons/graphics/icons/bobassembly/electric-chemical-mixing-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-chemical-mixing-furnace-64.png rename to bobicons/graphics/icons/bobassembly/electric-chemical-mixing-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-2-64.png b/bobicons/graphics/icons/bobassembly/electric-furnace-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-2-64.png rename to bobicons/graphics/icons/bobassembly/electric-furnace-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-3-64.png b/bobicons/graphics/icons/bobassembly/electric-furnace-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-3-64.png rename to bobicons/graphics/icons/bobassembly/electric-furnace-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-64.png b/bobicons/graphics/icons/bobassembly/electric-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-furnace-64.png rename to bobicons/graphics/icons/bobassembly/electric-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electric-mixing-furnace-64.png b/bobicons/graphics/icons/bobassembly/electric-mixing-furnace-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electric-mixing-furnace-64.png rename to bobicons/graphics/icons/bobassembly/electric-mixing-furnace-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-1-64.png b/bobicons/graphics/icons/bobassembly/electronics-machine-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-1-64.png rename to bobicons/graphics/icons/bobassembly/electronics-machine-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-2-64.png b/bobicons/graphics/icons/bobassembly/electronics-machine-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-2-64.png rename to bobicons/graphics/icons/bobassembly/electronics-machine-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-3-64.png b/bobicons/graphics/icons/bobassembly/electronics-machine-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/electronics-machine-3-64.png rename to bobicons/graphics/icons/bobassembly/electronics-machine-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-0-128.png b/bobicons/graphics/icons/bobassembly/oil-refinery-0-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-0-128.png rename to bobicons/graphics/icons/bobassembly/oil-refinery-0-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-1-128.png b/bobicons/graphics/icons/bobassembly/oil-refinery-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-1-128.png rename to bobicons/graphics/icons/bobassembly/oil-refinery-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-2-128.png b/bobicons/graphics/icons/bobassembly/oil-refinery-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-2-128.png rename to bobicons/graphics/icons/bobassembly/oil-refinery-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-3-128.png b/bobicons/graphics/icons/bobassembly/oil-refinery-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-3-128.png rename to bobicons/graphics/icons/bobassembly/oil-refinery-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-4-128.png b/bobicons/graphics/icons/bobassembly/oil-refinery-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/oil-refinery-4-128.png rename to bobicons/graphics/icons/bobassembly/oil-refinery-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobassembly/steam-assembling-machine-64.png b/bobicons/graphics/icons/bobassembly/steam-assembling-machine-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobassembly/steam-assembling-machine-64.png rename to bobicons/graphics/icons/bobassembly/steam-assembling-machine-64.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-2-128.png b/bobicons/graphics/icons/boblogistics/repair-pack-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-2-128.png rename to bobicons/graphics/icons/boblogistics/repair-pack-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-3-128.png b/bobicons/graphics/icons/boblogistics/repair-pack-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-3-128.png rename to bobicons/graphics/icons/boblogistics/repair-pack-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-4-128.png b/bobicons/graphics/icons/boblogistics/repair-pack-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-4-128.png rename to bobicons/graphics/icons/boblogistics/repair-pack-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-5-128.png b/bobicons/graphics/icons/boblogistics/repair-pack-5-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/repair-pack-5-128.png rename to bobicons/graphics/icons/boblogistics/repair-pack-5-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-1-128-2.png b/bobicons/graphics/icons/boblogistics/storage-tank-1-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-1-128-2.png rename to bobicons/graphics/icons/boblogistics/storage-tank-1-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-1-128.png b/bobicons/graphics/icons/boblogistics/storage-tank-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-1-128.png rename to bobicons/graphics/icons/boblogistics/storage-tank-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-2-128.png b/bobicons/graphics/icons/boblogistics/storage-tank-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-2-128.png rename to bobicons/graphics/icons/boblogistics/storage-tank-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-3-128.png b/bobicons/graphics/icons/boblogistics/storage-tank-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-3-128.png rename to bobicons/graphics/icons/boblogistics/storage-tank-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-4-128.png b/bobicons/graphics/icons/boblogistics/storage-tank-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/boblogistics/storage-tank-4-128.png rename to bobicons/graphics/icons/boblogistics/storage-tank-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-1-64.png b/bobicons/graphics/icons/bobmining/bob-area-mining-drill-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-1-64.png rename to bobicons/graphics/icons/bobmining/bob-area-mining-drill-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-2-64.png b/bobicons/graphics/icons/bobmining/bob-area-mining-drill-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-2-64.png rename to bobicons/graphics/icons/bobmining/bob-area-mining-drill-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-3-64.png b/bobicons/graphics/icons/bobmining/bob-area-mining-drill-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-3-64.png rename to bobicons/graphics/icons/bobmining/bob-area-mining-drill-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-4-64.png b/bobicons/graphics/icons/bobmining/bob-area-mining-drill-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-area-mining-drill-4-64.png rename to bobicons/graphics/icons/bobmining/bob-area-mining-drill-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-1-64.png b/bobicons/graphics/icons/bobmining/bob-mining-drill-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-1-64.png rename to bobicons/graphics/icons/bobmining/bob-mining-drill-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-2-64.png b/bobicons/graphics/icons/bobmining/bob-mining-drill-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-2-64.png rename to bobicons/graphics/icons/bobmining/bob-mining-drill-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-3-64.png b/bobicons/graphics/icons/bobmining/bob-mining-drill-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-3-64.png rename to bobicons/graphics/icons/bobmining/bob-mining-drill-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-4-64.png b/bobicons/graphics/icons/bobmining/bob-mining-drill-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmining/bob-mining-drill-4-64.png rename to bobicons/graphics/icons/bobmining/bob-mining-drill-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/beacon-1-64.png b/bobicons/graphics/icons/bobmodules/beacon-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/beacon-1-64.png rename to bobicons/graphics/icons/bobmodules/beacon-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/beacon-2-64.png b/bobicons/graphics/icons/bobmodules/beacon-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/beacon-2-64.png rename to bobicons/graphics/icons/bobmodules/beacon-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/beacon-3-64.png b/bobicons/graphics/icons/bobmodules/beacon-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/beacon-3-64.png rename to bobicons/graphics/icons/bobmodules/beacon-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/god-module-1-128.png b/bobicons/graphics/icons/bobmodules/god-module-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/god-module-1-128.png rename to bobicons/graphics/icons/bobmodules/god-module-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/god-module-2-128.png b/bobicons/graphics/icons/bobmodules/god-module-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/god-module-2-128.png rename to bobicons/graphics/icons/bobmodules/god-module-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/god-module-3-128.png b/bobicons/graphics/icons/bobmodules/god-module-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/god-module-3-128.png rename to bobicons/graphics/icons/bobmodules/god-module-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/god-module-4-128.png b/bobicons/graphics/icons/bobmodules/god-module-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/god-module-4-128.png rename to bobicons/graphics/icons/bobmodules/god-module-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobmodules/god-module-5-128.png b/bobicons/graphics/icons/bobmodules/god-module-5-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobmodules/god-module-5-128.png rename to bobicons/graphics/icons/bobmodules/god-module-5-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/brass-bearing-64.png b/bobicons/graphics/icons/bobplates/brass-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/brass-bearing-64.png rename to bobicons/graphics/icons/bobplates/brass-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/brass-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/brass-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/brass-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/brass-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/brass-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/brass-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/brass-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/brass-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/calcium-chloride-64.png b/bobicons/graphics/icons/bobplates/calcium-chloride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/calcium-chloride-64.png rename to bobicons/graphics/icons/bobplates/calcium-chloride-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/ceramic-bearing-64.png b/bobicons/graphics/icons/bobplates/ceramic-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/ceramic-bearing-64.png rename to bobicons/graphics/icons/bobplates/ceramic-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/ceramic-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/ceramic-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/ceramic-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/ceramic-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/cobalt-oxide-64.png b/bobicons/graphics/icons/bobplates/cobalt-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/cobalt-oxide-64.png rename to bobicons/graphics/icons/bobplates/cobalt-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-bearing-64.png b/bobicons/graphics/icons/bobplates/cobalt-steel-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-bearing-64.png rename to bobicons/graphics/icons/bobplates/cobalt-steel-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/cobalt-steel-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/cobalt-steel-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/cobalt-steel-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/cobalt-steel-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/cobalt-steel-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/empty-canister-64.png b/bobicons/graphics/icons/bobplates/empty-canister-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/empty-canister-64.png rename to bobicons/graphics/icons/bobplates/empty-canister-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/enriched-fuel-64.png b/bobicons/graphics/icons/bobplates/enriched-fuel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/enriched-fuel-64.png rename to bobicons/graphics/icons/bobplates/enriched-fuel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/ferric-chloride-solution-64.png b/bobicons/graphics/icons/bobplates/ferric-chloride-solution-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/ferric-chloride-solution-64.png rename to bobicons/graphics/icons/bobplates/ferric-chloride-solution-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gear2-128.png b/bobicons/graphics/icons/bobplates/gear2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gear2-128.png rename to bobicons/graphics/icons/bobplates/gear2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-3-64.png b/bobicons/graphics/icons/bobplates/gems/amethyst-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-3-64.png rename to bobicons/graphics/icons/bobplates/gems/amethyst-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-4-64.png b/bobicons/graphics/icons/bobplates/gems/amethyst-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-4-64.png rename to bobicons/graphics/icons/bobplates/gems/amethyst-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-5-64.png b/bobicons/graphics/icons/bobplates/gems/amethyst-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/amethyst-5-64.png rename to bobicons/graphics/icons/bobplates/gems/amethyst-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-3-64.png b/bobicons/graphics/icons/bobplates/gems/diamond-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-3-64.png rename to bobicons/graphics/icons/bobplates/gems/diamond-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-4-64.png b/bobicons/graphics/icons/bobplates/gems/diamond-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-4-64.png rename to bobicons/graphics/icons/bobplates/gems/diamond-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-5-64.png b/bobicons/graphics/icons/bobplates/gems/diamond-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/diamond-5-64.png rename to bobicons/graphics/icons/bobplates/gems/diamond-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-3-64.png b/bobicons/graphics/icons/bobplates/gems/emerald-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-3-64.png rename to bobicons/graphics/icons/bobplates/gems/emerald-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-4-64.png b/bobicons/graphics/icons/bobplates/gems/emerald-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-4-64.png rename to bobicons/graphics/icons/bobplates/gems/emerald-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-5-128.png b/bobicons/graphics/icons/bobplates/gems/emerald-5-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-5-128.png rename to bobicons/graphics/icons/bobplates/gems/emerald-5-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-5-64.png b/bobicons/graphics/icons/bobplates/gems/emerald-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/emerald-5-64.png rename to bobicons/graphics/icons/bobplates/gems/emerald-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-3.png b/bobicons/graphics/icons/bobplates/gems/old/amethyst-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-3.png rename to bobicons/graphics/icons/bobplates/gems/old/amethyst-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-4.png b/bobicons/graphics/icons/bobplates/gems/old/amethyst-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-4.png rename to bobicons/graphics/icons/bobplates/gems/old/amethyst-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-5.png b/bobicons/graphics/icons/bobplates/gems/old/amethyst-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/amethyst-5.png rename to bobicons/graphics/icons/bobplates/gems/old/amethyst-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-3.png b/bobicons/graphics/icons/bobplates/gems/old/diamond-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-3.png rename to bobicons/graphics/icons/bobplates/gems/old/diamond-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-4.png b/bobicons/graphics/icons/bobplates/gems/old/diamond-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-4.png rename to bobicons/graphics/icons/bobplates/gems/old/diamond-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-5.png b/bobicons/graphics/icons/bobplates/gems/old/diamond-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/diamond-5.png rename to bobicons/graphics/icons/bobplates/gems/old/diamond-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-3.png b/bobicons/graphics/icons/bobplates/gems/old/emerald-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-3.png rename to bobicons/graphics/icons/bobplates/gems/old/emerald-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-4.png b/bobicons/graphics/icons/bobplates/gems/old/emerald-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-4.png rename to bobicons/graphics/icons/bobplates/gems/old/emerald-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-5.png b/bobicons/graphics/icons/bobplates/gems/old/emerald-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/emerald-5.png rename to bobicons/graphics/icons/bobplates/gems/old/emerald-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-3.png b/bobicons/graphics/icons/bobplates/gems/old/ruby-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-3.png rename to bobicons/graphics/icons/bobplates/gems/old/ruby-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-4.png b/bobicons/graphics/icons/bobplates/gems/old/ruby-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-4.png rename to bobicons/graphics/icons/bobplates/gems/old/ruby-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-5.png b/bobicons/graphics/icons/bobplates/gems/old/ruby-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/ruby-5.png rename to bobicons/graphics/icons/bobplates/gems/old/ruby-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-3.png b/bobicons/graphics/icons/bobplates/gems/old/sapphire-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-3.png rename to bobicons/graphics/icons/bobplates/gems/old/sapphire-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-4.png b/bobicons/graphics/icons/bobplates/gems/old/sapphire-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-4.png rename to bobicons/graphics/icons/bobplates/gems/old/sapphire-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-5.png b/bobicons/graphics/icons/bobplates/gems/old/sapphire-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/sapphire-5.png rename to bobicons/graphics/icons/bobplates/gems/old/sapphire-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-3.png b/bobicons/graphics/icons/bobplates/gems/old/topaz-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-3.png rename to bobicons/graphics/icons/bobplates/gems/old/topaz-3.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-4.png b/bobicons/graphics/icons/bobplates/gems/old/topaz-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-4.png rename to bobicons/graphics/icons/bobplates/gems/old/topaz-4.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-5.png b/bobicons/graphics/icons/bobplates/gems/old/topaz-5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/old/topaz-5.png rename to bobicons/graphics/icons/bobplates/gems/old/topaz-5.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-3-64.png b/bobicons/graphics/icons/bobplates/gems/ruby-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-3-64.png rename to bobicons/graphics/icons/bobplates/gems/ruby-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-4-64.png b/bobicons/graphics/icons/bobplates/gems/ruby-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-4-64.png rename to bobicons/graphics/icons/bobplates/gems/ruby-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-5-64.png b/bobicons/graphics/icons/bobplates/gems/ruby-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/ruby-5-64.png rename to bobicons/graphics/icons/bobplates/gems/ruby-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-3-64.png b/bobicons/graphics/icons/bobplates/gems/sapphire-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-3-64.png rename to bobicons/graphics/icons/bobplates/gems/sapphire-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-4-64.png b/bobicons/graphics/icons/bobplates/gems/sapphire-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-4-64.png rename to bobicons/graphics/icons/bobplates/gems/sapphire-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-5-64.png b/bobicons/graphics/icons/bobplates/gems/sapphire-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/sapphire-5-64.png rename to bobicons/graphics/icons/bobplates/gems/sapphire-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-3-64.png b/bobicons/graphics/icons/bobplates/gems/topaz-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-3-64.png rename to bobicons/graphics/icons/bobplates/gems/topaz-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-4-64.png b/bobicons/graphics/icons/bobplates/gems/topaz-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-4-64.png rename to bobicons/graphics/icons/bobplates/gems/topaz-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-5-64.png b/bobicons/graphics/icons/bobplates/gems/topaz-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/gems/topaz-5-64.png rename to bobicons/graphics/icons/bobplates/gems/topaz-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/lead-oxide-64.png b/bobicons/graphics/icons/bobplates/lead-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/lead-oxide-64.png rename to bobicons/graphics/icons/bobplates/lead-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/liquid-fuel-64.png b/bobicons/graphics/icons/bobplates/liquid-fuel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/liquid-fuel-64.png rename to bobicons/graphics/icons/bobplates/liquid-fuel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/lithia-water-64.png b/bobicons/graphics/icons/bobplates/lithia-water-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/lithia-water-64.png rename to bobicons/graphics/icons/bobplates/lithia-water-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/lithium-chloride-64.png b/bobicons/graphics/icons/bobplates/lithium-chloride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/lithium-chloride-64.png rename to bobicons/graphics/icons/bobplates/lithium-chloride-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/lithium-cobalt-oxide-64.png b/bobicons/graphics/icons/bobplates/lithium-cobalt-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/lithium-cobalt-oxide-64.png rename to bobicons/graphics/icons/bobplates/lithium-cobalt-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/lithium-perchlorate-64.png b/bobicons/graphics/icons/bobplates/lithium-perchlorate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/lithium-perchlorate-64.png rename to bobicons/graphics/icons/bobplates/lithium-perchlorate-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/nitinol-bearing-64.png b/bobicons/graphics/icons/bobplates/nitinol-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/nitinol-bearing-64.png rename to bobicons/graphics/icons/bobplates/nitinol-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/nitinol-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/nitinol-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/nitinol-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/nitinol-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/nitinol-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/nitinol-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/nitinol-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/nitinol-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/rubber-64.png b/bobicons/graphics/icons/bobplates/rubber-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/rubber-64.png rename to bobicons/graphics/icons/bobplates/rubber-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/sodium-hydroxide-64.png b/bobicons/graphics/icons/bobplates/sodium-hydroxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/sodium-hydroxide-64.png rename to bobicons/graphics/icons/bobplates/sodium-hydroxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/steel-bearing-64.png b/bobicons/graphics/icons/bobplates/steel-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/steel-bearing-64.png rename to bobicons/graphics/icons/bobplates/steel-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/steel-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/steel-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/steel-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/steel-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/steel-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/steel-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/steel-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/steel-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/titanium-bearing-64.png b/bobicons/graphics/icons/bobplates/titanium-bearing-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/titanium-bearing-64.png rename to bobicons/graphics/icons/bobplates/titanium-bearing-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/titanium-bearing-ball-64.png b/bobicons/graphics/icons/bobplates/titanium-bearing-ball-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/titanium-bearing-ball-64.png rename to bobicons/graphics/icons/bobplates/titanium-bearing-ball-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/titanium-gear-wheel-128.png b/bobicons/graphics/icons/bobplates/titanium-gear-wheel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/titanium-gear-wheel-128.png rename to bobicons/graphics/icons/bobplates/titanium-gear-wheel-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/titanium-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/titanium-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/titanium-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/titanium-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/tungsten-gear-wheel-64.png b/bobicons/graphics/icons/bobplates/tungsten-gear-wheel-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/tungsten-gear-wheel-64.png rename to bobicons/graphics/icons/bobplates/tungsten-gear-wheel-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/tungsten-oxide-64.png b/bobicons/graphics/icons/bobplates/tungsten-oxide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/tungsten-oxide-64.png rename to bobicons/graphics/icons/bobplates/tungsten-oxide-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobplates/tungstic-acid-64.png b/bobicons/graphics/icons/bobplates/tungstic-acid-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobplates/tungstic-acid-64.png rename to bobicons/graphics/icons/bobplates/tungstic-acid-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-1-64.png b/bobicons/graphics/icons/bobpower/big-electric-pole-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-1-64.png rename to bobicons/graphics/icons/bobpower/big-electric-pole-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-2-64.png b/bobicons/graphics/icons/bobpower/big-electric-pole-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-2-64.png rename to bobicons/graphics/icons/bobpower/big-electric-pole-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-3-64.png b/bobicons/graphics/icons/bobpower/big-electric-pole-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-3-64.png rename to bobicons/graphics/icons/bobpower/big-electric-pole-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-4-64.png b/bobicons/graphics/icons/bobpower/big-electric-pole-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/big-electric-pole-4-64.png rename to bobicons/graphics/icons/bobpower/big-electric-pole-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/boiler-1-64.png b/bobicons/graphics/icons/bobpower/boiler-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/boiler-1-64.png rename to bobicons/graphics/icons/bobpower/boiler-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/boiler-2-64.png b/bobicons/graphics/icons/bobpower/boiler-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/boiler-2-64.png rename to bobicons/graphics/icons/bobpower/boiler-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/boiler-3-64.png b/bobicons/graphics/icons/bobpower/boiler-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/boiler-3-64.png rename to bobicons/graphics/icons/bobpower/boiler-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/boiler-4-64.png b/bobicons/graphics/icons/bobpower/boiler-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/boiler-4-64.png rename to bobicons/graphics/icons/bobpower/boiler-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/boiler-5-64.png b/bobicons/graphics/icons/bobpower/boiler-5-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/boiler-5-64.png rename to bobicons/graphics/icons/bobpower/boiler-5-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-1-64.png b/bobicons/graphics/icons/bobpower/heat-exchanger-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-1-64.png rename to bobicons/graphics/icons/bobpower/heat-exchanger-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-2-64.png b/bobicons/graphics/icons/bobpower/heat-exchanger-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-2-64.png rename to bobicons/graphics/icons/bobpower/heat-exchanger-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-3-64.png b/bobicons/graphics/icons/bobpower/heat-exchanger-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/heat-exchanger-3-64.png rename to bobicons/graphics/icons/bobpower/heat-exchanger-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-1-64.png b/bobicons/graphics/icons/bobpower/medium-electric-pole-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-1-64.png rename to bobicons/graphics/icons/bobpower/medium-electric-pole-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-2-64.png b/bobicons/graphics/icons/bobpower/medium-electric-pole-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-2-64.png rename to bobicons/graphics/icons/bobpower/medium-electric-pole-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-3-64.png b/bobicons/graphics/icons/bobpower/medium-electric-pole-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-3-64.png rename to bobicons/graphics/icons/bobpower/medium-electric-pole-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-4-64.png b/bobicons/graphics/icons/bobpower/medium-electric-pole-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/medium-electric-pole-4-64.png rename to bobicons/graphics/icons/bobpower/medium-electric-pole-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-engine-1-128.png b/bobicons/graphics/icons/bobpower/steam-engine-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-engine-1-128.png rename to bobicons/graphics/icons/bobpower/steam-engine-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-engine-2-128.png b/bobicons/graphics/icons/bobpower/steam-engine-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-engine-2-128.png rename to bobicons/graphics/icons/bobpower/steam-engine-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-engine-3-128.png b/bobicons/graphics/icons/bobpower/steam-engine-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-engine-3-128.png rename to bobicons/graphics/icons/bobpower/steam-engine-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-engine-4-128.png b/bobicons/graphics/icons/bobpower/steam-engine-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-engine-4-128.png rename to bobicons/graphics/icons/bobpower/steam-engine-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-engine-5-128.png b/bobicons/graphics/icons/bobpower/steam-engine-5-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-engine-5-128.png rename to bobicons/graphics/icons/bobpower/steam-engine-5-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-1-128.png b/bobicons/graphics/icons/bobpower/steam-turbine-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-1-128.png rename to bobicons/graphics/icons/bobpower/steam-turbine-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-2-128.png b/bobicons/graphics/icons/bobpower/steam-turbine-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-2-128.png rename to bobicons/graphics/icons/bobpower/steam-turbine-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-3-128.png b/bobicons/graphics/icons/bobpower/steam-turbine-3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-3-128.png rename to bobicons/graphics/icons/bobpower/steam-turbine-3-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-4-128.png b/bobicons/graphics/icons/bobpower/steam-turbine-4-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/steam-turbine-4-128.png rename to bobicons/graphics/icons/bobpower/steam-turbine-4-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/substation-1-64.png b/bobicons/graphics/icons/bobpower/substation-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/substation-1-64.png rename to bobicons/graphics/icons/bobpower/substation-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/substation-2-64.png b/bobicons/graphics/icons/bobpower/substation-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/substation-2-64.png rename to bobicons/graphics/icons/bobpower/substation-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/substation-3-64.png b/bobicons/graphics/icons/bobpower/substation-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/substation-3-64.png rename to bobicons/graphics/icons/bobpower/substation-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobpower/substation-4-64.png b/bobicons/graphics/icons/bobpower/substation-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobpower/substation-4-64.png rename to bobicons/graphics/icons/bobpower/substation-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/bobrevamp/heat-shield-tile-128.png b/bobicons/graphics/icons/bobrevamp/heat-shield-tile-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobrevamp/heat-shield-tile-128.png rename to bobicons/graphics/icons/bobrevamp/heat-shield-tile-128.png diff --git a/bobicons_1.1.2/graphics/icons/bobtech/lab-2.png b/bobicons/graphics/icons/bobtech/lab-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobtech/lab-2.png rename to bobicons/graphics/icons/bobtech/lab-2.png diff --git a/bobicons_1.1.2/graphics/icons/bobtech/lab-module.png b/bobicons/graphics/icons/bobtech/lab-module.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobtech/lab-module.png rename to bobicons/graphics/icons/bobtech/lab-module.png diff --git a/bobicons_1.1.2/graphics/icons/bobwarfare/rocket-engine-128.png b/bobicons/graphics/icons/bobwarfare/rocket-engine-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/bobwarfare/rocket-engine-128.png rename to bobicons/graphics/icons/bobwarfare/rocket-engine-128.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-noglow.png b/bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-noglow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-noglow.png rename to bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-noglow.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-purification.png b/bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-purification.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-purification.png rename to bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste-purification.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste.png b/bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste.png rename to bobicons/graphics/icons/clowns-angelbob-nuclear/water-radioactive-waste.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/apm_radioactive.png b/bobicons/graphics/icons/clowns-processing/apm_radioactive.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/apm_radioactive.png rename to bobicons/graphics/icons/clowns-processing/apm_radioactive.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/boric-acid.png b/bobicons/graphics/icons/clowns-processing/boric-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/boric-acid.png rename to bobicons/graphics/icons/clowns-processing/boric-acid.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/catalyst-metal-violet.png b/bobicons/graphics/icons/clowns-processing/catalyst-metal-violet.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/catalyst-metal-violet.png rename to bobicons/graphics/icons/clowns-processing/catalyst-metal-violet.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/fluorine.png b/bobicons/graphics/icons/clowns-processing/fluorine.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/fluorine.png rename to bobicons/graphics/icons/clowns-processing/fluorine.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/ingot-magnesium.png b/bobicons/graphics/icons/clowns-processing/ingot-magnesium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/ingot-magnesium.png rename to bobicons/graphics/icons/clowns-processing/ingot-magnesium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/liquid-dimethylmercury.png b/bobicons/graphics/icons/clowns-processing/liquid-dimethylmercury.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/liquid-dimethylmercury.png rename to bobicons/graphics/icons/clowns-processing/liquid-dimethylmercury.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/liquid-mercury.png b/bobicons/graphics/icons/clowns-processing/liquid-mercury.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/liquid-mercury.png rename to bobicons/graphics/icons/clowns-processing/liquid-mercury.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/magnesium-ore.png b/bobicons/graphics/icons/clowns-processing/magnesium-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/magnesium-ore.png rename to bobicons/graphics/icons/clowns-processing/magnesium-ore.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/molten-magnesium.png b/bobicons/graphics/icons/clowns-processing/molten-magnesium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/molten-magnesium.png rename to bobicons/graphics/icons/clowns-processing/molten-magnesium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/osmium-ore.png b/bobicons/graphics/icons/clowns-processing/osmium-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/osmium-ore.png rename to bobicons/graphics/icons/clowns-processing/osmium-ore.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/pellet-depleted-uranium.png b/bobicons/graphics/icons/clowns-processing/pellet-depleted-uranium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/pellet-depleted-uranium.png rename to bobicons/graphics/icons/clowns-processing/pellet-depleted-uranium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/pellet-magnesium.png b/bobicons/graphics/icons/clowns-processing/pellet-magnesium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/pellet-magnesium.png rename to bobicons/graphics/icons/clowns-processing/pellet-magnesium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/pellet-osmium.png b/bobicons/graphics/icons/clowns-processing/pellet-osmium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/pellet-osmium.png rename to bobicons/graphics/icons/clowns-processing/pellet-osmium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/phosphoric-acid.png b/bobicons/graphics/icons/clowns-processing/phosphoric-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/phosphoric-acid.png rename to bobicons/graphics/icons/clowns-processing/phosphoric-acid.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/phosphorus-ore.png b/bobicons/graphics/icons/clowns-processing/phosphorus-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/phosphorus-ore.png rename to bobicons/graphics/icons/clowns-processing/phosphorus-ore.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/plate-depleted-uranium.png b/bobicons/graphics/icons/clowns-processing/plate-depleted-uranium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/plate-depleted-uranium.png rename to bobicons/graphics/icons/clowns-processing/plate-depleted-uranium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/plate-magnesium.png b/bobicons/graphics/icons/clowns-processing/plate-magnesium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/plate-magnesium.png rename to bobicons/graphics/icons/clowns-processing/plate-magnesium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/plate-osmium.png b/bobicons/graphics/icons/clowns-processing/plate-osmium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/plate-osmium.png rename to bobicons/graphics/icons/clowns-processing/plate-osmium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/powder-depleted-uranium.png b/bobicons/graphics/icons/clowns-processing/powder-depleted-uranium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/powder-depleted-uranium.png rename to bobicons/graphics/icons/clowns-processing/powder-depleted-uranium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/powder-osmium.png b/bobicons/graphics/icons/clowns-processing/powder-osmium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/powder-osmium.png rename to bobicons/graphics/icons/clowns-processing/powder-osmium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/processed-depleted-uranium.png b/bobicons/graphics/icons/clowns-processing/processed-depleted-uranium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/processed-depleted-uranium.png rename to bobicons/graphics/icons/clowns-processing/processed-depleted-uranium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/processed-magnesium.png b/bobicons/graphics/icons/clowns-processing/processed-magnesium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/processed-magnesium.png rename to bobicons/graphics/icons/clowns-processing/processed-magnesium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/processed-osmium.png b/bobicons/graphics/icons/clowns-processing/processed-osmium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/processed-osmium.png rename to bobicons/graphics/icons/clowns-processing/processed-osmium.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/sluicer.png b/bobicons/graphics/icons/clowns-processing/sluicer.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/sluicer.png rename to bobicons/graphics/icons/clowns-processing/sluicer.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-ammonium-diuranate.png b/bobicons/graphics/icons/clowns-processing/solid-ammonium-diuranate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-ammonium-diuranate.png rename to bobicons/graphics/icons/clowns-processing/solid-ammonium-diuranate.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-hexafluoride.png b/bobicons/graphics/icons/clowns-processing/solid-uranium-hexafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-hexafluoride.png rename to bobicons/graphics/icons/clowns-processing/solid-uranium-hexafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-oxide.png b/bobicons/graphics/icons/clowns-processing/solid-uranium-oxide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-oxide.png rename to bobicons/graphics/icons/clowns-processing/solid-uranium-oxide.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-tetrafluoride.png b/bobicons/graphics/icons/clowns-processing/solid-uranium-tetrafluoride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranium-tetrafluoride.png rename to bobicons/graphics/icons/clowns-processing/solid-uranium-tetrafluoride.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranyl-nitrate.png b/bobicons/graphics/icons/clowns-processing/solid-uranyl-nitrate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-uranyl-nitrate.png rename to bobicons/graphics/icons/clowns-processing/solid-uranyl-nitrate.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/solid-white-phosphorus.png b/bobicons/graphics/icons/clowns-processing/solid-white-phosphorus.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/solid-white-phosphorus.png rename to bobicons/graphics/icons/clowns-processing/solid-white-phosphorus.png diff --git a/bobicons_1.1.2/graphics/icons/clowns-processing/sorting.png b/bobicons/graphics/icons/clowns-processing/sorting.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/clowns-processing/sorting.png rename to bobicons/graphics/icons/clowns-processing/sorting.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/advanced-io-128.png b/bobicons/graphics/icons/electronics/advanced-io-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/advanced-io-128.png rename to bobicons/graphics/icons/electronics/advanced-io-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/basic-circuit-board-64.png b/bobicons/graphics/icons/electronics/basic-circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/basic-circuit-board-64.png rename to bobicons/graphics/icons/electronics/basic-circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/basic-electronic-circuit-board-64.png b/bobicons/graphics/icons/electronics/basic-electronic-circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/basic-electronic-circuit-board-64.png rename to bobicons/graphics/icons/electronics/basic-electronic-circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/basic-electronic-components-64.png b/bobicons/graphics/icons/electronics/basic-electronic-components-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/basic-electronic-components-64.png rename to bobicons/graphics/icons/electronics/basic-electronic-components-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/circuit-board-64.png b/bobicons/graphics/icons/electronics/circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/circuit-board-64.png rename to bobicons/graphics/icons/electronics/circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/condensator-128.png b/bobicons/graphics/icons/electronics/condensator-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/condensator-128.png rename to bobicons/graphics/icons/electronics/condensator-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/condensator2-128.png b/bobicons/graphics/icons/electronics/condensator2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/condensator2-128.png rename to bobicons/graphics/icons/electronics/condensator2-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/condensator3-128.png b/bobicons/graphics/icons/electronics/condensator3-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/condensator3-128.png rename to bobicons/graphics/icons/electronics/condensator3-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/cpu-64.png b/bobicons/graphics/icons/electronics/cpu-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/cpu-64.png rename to bobicons/graphics/icons/electronics/cpu-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/electronic-circuit-board-64.png b/bobicons/graphics/icons/electronics/electronic-circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/electronic-circuit-board-64.png rename to bobicons/graphics/icons/electronics/electronic-circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/electronic-components-64.png b/bobicons/graphics/icons/electronics/electronic-components-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/electronic-components-64.png rename to bobicons/graphics/icons/electronics/electronic-components-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/electronic-logic-board-64.png b/bobicons/graphics/icons/electronics/electronic-logic-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/electronic-logic-board-64.png rename to bobicons/graphics/icons/electronics/electronic-logic-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/electronic-processing-board-64.png b/bobicons/graphics/icons/electronics/electronic-processing-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/electronic-processing-board-64.png rename to bobicons/graphics/icons/electronics/electronic-processing-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/fibreglass-board-64.png b/bobicons/graphics/icons/electronics/fibreglass-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/fibreglass-board-64.png rename to bobicons/graphics/icons/electronics/fibreglass-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/green-wire-128.png b/bobicons/graphics/icons/electronics/green-wire-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/green-wire-128.png rename to bobicons/graphics/icons/electronics/green-wire-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/integrated-electronics-64-64.png b/bobicons/graphics/icons/electronics/integrated-electronics-64-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/integrated-electronics-64-64.png rename to bobicons/graphics/icons/electronics/integrated-electronics-64-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/integrated-electronics-64.png b/bobicons/graphics/icons/electronics/integrated-electronics-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/integrated-electronics-64.png rename to bobicons/graphics/icons/electronics/integrated-electronics-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/intelligent-io-128.png b/bobicons/graphics/icons/electronics/intelligent-io-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/intelligent-io-128.png rename to bobicons/graphics/icons/electronics/intelligent-io-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/multi-layer-circuit-board-64.png b/bobicons/graphics/icons/electronics/multi-layer-circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/multi-layer-circuit-board-64.png rename to bobicons/graphics/icons/electronics/multi-layer-circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/basic-circuit-board.png b/bobicons/graphics/icons/electronics/old/basic-circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/basic-circuit-board.png rename to bobicons/graphics/icons/electronics/old/basic-circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/basic-electronic-circuit-board.png b/bobicons/graphics/icons/electronics/old/basic-electronic-circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/basic-electronic-circuit-board.png rename to bobicons/graphics/icons/electronics/old/basic-electronic-circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/basic-electronic-components.png b/bobicons/graphics/icons/electronics/old/basic-electronic-components.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/basic-electronic-components.png rename to bobicons/graphics/icons/electronics/old/basic-electronic-components.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/circuit-board.png b/bobicons/graphics/icons/electronics/old/circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/circuit-board.png rename to bobicons/graphics/icons/electronics/old/circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/condensator.png b/bobicons/graphics/icons/electronics/old/condensator.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/condensator.png rename to bobicons/graphics/icons/electronics/old/condensator.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/condensator2.png b/bobicons/graphics/icons/electronics/old/condensator2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/condensator2.png rename to bobicons/graphics/icons/electronics/old/condensator2.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/condensator3.png b/bobicons/graphics/icons/electronics/old/condensator3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/condensator3.png rename to bobicons/graphics/icons/electronics/old/condensator3.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/cpu.png b/bobicons/graphics/icons/electronics/old/cpu.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/cpu.png rename to bobicons/graphics/icons/electronics/old/cpu.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/electronic-circuit-board.png b/bobicons/graphics/icons/electronics/old/electronic-circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/electronic-circuit-board.png rename to bobicons/graphics/icons/electronics/old/electronic-circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/electronic-components.png b/bobicons/graphics/icons/electronics/old/electronic-components.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/electronic-components.png rename to bobicons/graphics/icons/electronics/old/electronic-components.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/electronic-logic-board.png b/bobicons/graphics/icons/electronics/old/electronic-logic-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/electronic-logic-board.png rename to bobicons/graphics/icons/electronics/old/electronic-logic-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/electronic-processing-board.png b/bobicons/graphics/icons/electronics/old/electronic-processing-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/electronic-processing-board.png rename to bobicons/graphics/icons/electronics/old/electronic-processing-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/fibreglass-board.png b/bobicons/graphics/icons/electronics/old/fibreglass-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/fibreglass-board.png rename to bobicons/graphics/icons/electronics/old/fibreglass-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/green-wire.png b/bobicons/graphics/icons/electronics/old/green-wire.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/green-wire.png rename to bobicons/graphics/icons/electronics/old/green-wire.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/integrated-electronics.png b/bobicons/graphics/icons/electronics/old/integrated-electronics.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/integrated-electronics.png rename to bobicons/graphics/icons/electronics/old/integrated-electronics.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/multi-layer-circuit-board.png b/bobicons/graphics/icons/electronics/old/multi-layer-circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/multi-layer-circuit-board.png rename to bobicons/graphics/icons/electronics/old/multi-layer-circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/phenolic-board.png b/bobicons/graphics/icons/electronics/old/phenolic-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/phenolic-board.png rename to bobicons/graphics/icons/electronics/old/phenolic-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/red-wire.png b/bobicons/graphics/icons/electronics/old/red-wire.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/red-wire.png rename to bobicons/graphics/icons/electronics/old/red-wire.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/superior-circuit-board.png b/bobicons/graphics/icons/electronics/old/superior-circuit-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/superior-circuit-board.png rename to bobicons/graphics/icons/electronics/old/superior-circuit-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/old/wooden-board.png b/bobicons/graphics/icons/electronics/old/wooden-board.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/old/wooden-board.png rename to bobicons/graphics/icons/electronics/old/wooden-board.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/phenolic-board-64.png b/bobicons/graphics/icons/electronics/phenolic-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/phenolic-board-64.png rename to bobicons/graphics/icons/electronics/phenolic-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/predictive-io-128.png b/bobicons/graphics/icons/electronics/predictive-io-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/predictive-io-128.png rename to bobicons/graphics/icons/electronics/predictive-io-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/red-wire-128.png b/bobicons/graphics/icons/electronics/red-wire-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/red-wire-128.png rename to bobicons/graphics/icons/electronics/red-wire-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/simple-io-128.png b/bobicons/graphics/icons/electronics/simple-io-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/simple-io-128.png rename to bobicons/graphics/icons/electronics/simple-io-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/standart-io-128.png b/bobicons/graphics/icons/electronics/standart-io-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/standart-io-128.png rename to bobicons/graphics/icons/electronics/standart-io-128.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/superior-circuit-board-64.png b/bobicons/graphics/icons/electronics/superior-circuit-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/superior-circuit-board-64.png rename to bobicons/graphics/icons/electronics/superior-circuit-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/electronics/wooden-board-64.png b/bobicons/graphics/icons/electronics/wooden-board-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/electronics/wooden-board-64.png rename to bobicons/graphics/icons/electronics/wooden-board-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/gas-argon-64.png b/bobicons/graphics/icons/extendedangels/gas-argon-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/gas-argon-64.png rename to bobicons/graphics/icons/extendedangels/gas-argon-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/gas-tungsten-hexachloride-64.png b/bobicons/graphics/icons/extendedangels/gas-tungsten-hexachloride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/gas-tungsten-hexachloride-64.png rename to bobicons/graphics/icons/extendedangels/gas-tungsten-hexachloride-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/liquid-molten-copper-tungsten-64.png b/bobicons/graphics/icons/extendedangels/liquid-molten-copper-tungsten-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/liquid-molten-copper-tungsten-64.png rename to bobicons/graphics/icons/extendedangels/liquid-molten-copper-tungsten-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/powder-tungsten-carbide-64.png b/bobicons/graphics/icons/extendedangels/powder-tungsten-carbide-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/powder-tungsten-carbide-64.png rename to bobicons/graphics/icons/extendedangels/powder-tungsten-carbide-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/solid-sodium-floride-64.png b/bobicons/graphics/icons/extendedangels/solid-sodium-floride-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/solid-sodium-floride-64.png rename to bobicons/graphics/icons/extendedangels/solid-sodium-floride-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/solid-sodium-tungstate-64.png b/bobicons/graphics/icons/extendedangels/solid-sodium-tungstate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/solid-sodium-tungstate-64.png rename to bobicons/graphics/icons/extendedangels/solid-sodium-tungstate-64.png diff --git a/bobicons_1.1.2/graphics/icons/extendedangels/titanium-concrete-brick-64.png b/bobicons/graphics/icons/extendedangels/titanium-concrete-brick-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/extendedangels/titanium-concrete-brick-64.png rename to bobicons/graphics/icons/extendedangels/titanium-concrete-brick-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/advancedSC-64.png b/bobicons/graphics/icons/intermediates/advancedSC-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/advancedSC-64.png rename to bobicons/graphics/icons/intermediates/advancedSC-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/anotherworldSC-64.png b/bobicons/graphics/icons/intermediates/anotherworldSC-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/anotherworldSC-64.png rename to bobicons/graphics/icons/intermediates/anotherworldSC-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/basicSC-64.png b/bobicons/graphics/icons/intermediates/basicSC-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/basicSC-64.png rename to bobicons/graphics/icons/intermediates/basicSC-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/battery-128.png b/bobicons/graphics/icons/intermediates/battery-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/battery-128.png rename to bobicons/graphics/icons/intermediates/battery-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/copper-cable-128.png b/bobicons/graphics/icons/intermediates/copper-cable-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/copper-cable-128.png rename to bobicons/graphics/icons/intermediates/copper-cable-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/gilded-copper-cable-128.png b/bobicons/graphics/icons/intermediates/gilded-copper-cable-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/gilded-copper-cable-128.png rename to bobicons/graphics/icons/intermediates/gilded-copper-cable-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/intermediateSC-64.png b/bobicons/graphics/icons/intermediates/intermediateSC-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/intermediateSC-64.png rename to bobicons/graphics/icons/intermediates/intermediateSC-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/iron-gear-wheel-128.png b/bobicons/graphics/icons/intermediates/iron-gear-wheel-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/iron-gear-wheel-128.png rename to bobicons/graphics/icons/intermediates/iron-gear-wheel-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/lithium-ion-battery-128.png b/bobicons/graphics/icons/intermediates/lithium-ion-battery-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/lithium-ion-battery-128.png rename to bobicons/graphics/icons/intermediates/lithium-ion-battery-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/battery-64.png b/bobicons/graphics/icons/intermediates/old/battery-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/battery-64.png rename to bobicons/graphics/icons/intermediates/old/battery-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/battery-old.png b/bobicons/graphics/icons/intermediates/old/battery-old.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/battery-old.png rename to bobicons/graphics/icons/intermediates/old/battery-old.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/copper-cable-64.png b/bobicons/graphics/icons/intermediates/old/copper-cable-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/copper-cable-64.png rename to bobicons/graphics/icons/intermediates/old/copper-cable-64.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/gilded-copper-cable.png b/bobicons/graphics/icons/intermediates/old/gilded-copper-cable.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/gilded-copper-cable.png rename to bobicons/graphics/icons/intermediates/old/gilded-copper-cable.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/lithium-ion-battery-old.png b/bobicons/graphics/icons/intermediates/old/lithium-ion-battery-old.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/lithium-ion-battery-old.png rename to bobicons/graphics/icons/intermediates/old/lithium-ion-battery-old.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/lithium-ion-battery.png b/bobicons/graphics/icons/intermediates/old/lithium-ion-battery.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/lithium-ion-battery.png rename to bobicons/graphics/icons/intermediates/old/lithium-ion-battery.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/resin.png b/bobicons/graphics/icons/intermediates/old/resin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/resin.png rename to bobicons/graphics/icons/intermediates/old/resin.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/silver-cable.png b/bobicons/graphics/icons/intermediates/old/silver-cable.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/silver-cable.png rename to bobicons/graphics/icons/intermediates/old/silver-cable.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/silver-zinc-battery-old.png b/bobicons/graphics/icons/intermediates/old/silver-zinc-battery-old.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/silver-zinc-battery-old.png rename to bobicons/graphics/icons/intermediates/old/silver-zinc-battery-old.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/old/silver-zinc-battery.png b/bobicons/graphics/icons/intermediates/old/silver-zinc-battery.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/old/silver-zinc-battery.png rename to bobicons/graphics/icons/intermediates/old/silver-zinc-battery.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/resin-128.png b/bobicons/graphics/icons/intermediates/resin-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/resin-128.png rename to bobicons/graphics/icons/intermediates/resin-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/silver-cable-128.png b/bobicons/graphics/icons/intermediates/silver-cable-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/silver-cable-128.png rename to bobicons/graphics/icons/intermediates/silver-cable-128.png diff --git a/bobicons_1.1.2/graphics/icons/intermediates/silver-zinc-battery-128.png b/bobicons/graphics/icons/intermediates/silver-zinc-battery-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/intermediates/silver-zinc-battery-128.png rename to bobicons/graphics/icons/intermediates/silver-zinc-battery-128.png diff --git a/bobicons_1.1.2/graphics/icons/molecules/ammonium-chloride.png b/bobicons/graphics/icons/molecules/ammonium-chloride.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/molecules/ammonium-chloride.png rename to bobicons/graphics/icons/molecules/ammonium-chloride.png diff --git a/bobicons_1.1.2/graphics/icons/molecules/sulfuric-acid-2.png b/bobicons/graphics/icons/molecules/sulfuric-acid-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/molecules/sulfuric-acid-2.png rename to bobicons/graphics/icons/molecules/sulfuric-acid-2.png diff --git a/bobicons_1.1.2/graphics/icons/molecules/sulfuric-acid.png b/bobicons/graphics/icons/molecules/sulfuric-acid.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/molecules/sulfuric-acid.png rename to bobicons/graphics/icons/molecules/sulfuric-acid.png diff --git a/bobicons_1.1.2/graphics/icons/ores/amethyst-ore-64.png b/bobicons/graphics/icons/ores/amethyst-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/amethyst-ore-64.png rename to bobicons/graphics/icons/ores/amethyst-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore2-64.png b/bobicons/graphics/icons/ores/angels-ore2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore2-64.png rename to bobicons/graphics/icons/ores/angels-ore2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-1.png b/bobicons/graphics/icons/ores/angels-ore2/angels-ore2-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-1.png rename to bobicons/graphics/icons/ores/angels-ore2/angels-ore2-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-2.png b/bobicons/graphics/icons/ores/angels-ore2/angels-ore2-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-2.png rename to bobicons/graphics/icons/ores/angels-ore2/angels-ore2-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-3.png b/bobicons/graphics/icons/ores/angels-ore2/angels-ore2-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-3.png rename to bobicons/graphics/icons/ores/angels-ore2/angels-ore2-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-4.png b/bobicons/graphics/icons/ores/angels-ore2/angels-ore2-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore2/angels-ore2-4.png rename to bobicons/graphics/icons/ores/angels-ore2/angels-ore2-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore4-64.png b/bobicons/graphics/icons/ores/angels-ore4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore4-64.png rename to bobicons/graphics/icons/ores/angels-ore4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-1.png b/bobicons/graphics/icons/ores/angels-ore4/angels-ore4-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-1.png rename to bobicons/graphics/icons/ores/angels-ore4/angels-ore4-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-2.png b/bobicons/graphics/icons/ores/angels-ore4/angels-ore4-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-2.png rename to bobicons/graphics/icons/ores/angels-ore4/angels-ore4-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-3.png b/bobicons/graphics/icons/ores/angels-ore4/angels-ore4-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-3.png rename to bobicons/graphics/icons/ores/angels-ore4/angels-ore4-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-4.png b/bobicons/graphics/icons/ores/angels-ore4/angels-ore4-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore4/angels-ore4-4.png rename to bobicons/graphics/icons/ores/angels-ore4/angels-ore4-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore6-64.png b/bobicons/graphics/icons/ores/angels-ore6-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore6-64.png rename to bobicons/graphics/icons/ores/angels-ore6-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-1.png b/bobicons/graphics/icons/ores/angels-ore6/angels-ore6-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-1.png rename to bobicons/graphics/icons/ores/angels-ore6/angels-ore6-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-2.png b/bobicons/graphics/icons/ores/angels-ore6/angels-ore6-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-2.png rename to bobicons/graphics/icons/ores/angels-ore6/angels-ore6-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-3.png b/bobicons/graphics/icons/ores/angels-ore6/angels-ore6-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-3.png rename to bobicons/graphics/icons/ores/angels-ore6/angels-ore6-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-4.png b/bobicons/graphics/icons/ores/angels-ore6/angels-ore6-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/angels-ore6/angels-ore6-4.png rename to bobicons/graphics/icons/ores/angels-ore6/angels-ore6-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/bauxite-ore-64.png b/bobicons/graphics/icons/ores/bauxite-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/bauxite-ore-64.png rename to bobicons/graphics/icons/ores/bauxite-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-1-64.png b/bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-1-64.png rename to bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-2-64.png b/bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-2-64.png rename to bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-3-64.png b/bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-3-64.png rename to bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-4-64.png b/bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/bauxite-ore/bauxite-ore-4-64.png rename to bobicons/graphics/icons/ores/bauxite-ore/bauxite-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-1.png b/bobicons/graphics/icons/ores/chrome-ore/chrome-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-1.png rename to bobicons/graphics/icons/ores/chrome-ore/chrome-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-2.png b/bobicons/graphics/icons/ores/chrome-ore/chrome-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-2.png rename to bobicons/graphics/icons/ores/chrome-ore/chrome-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-3.png b/bobicons/graphics/icons/ores/chrome-ore/chrome-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-3.png rename to bobicons/graphics/icons/ores/chrome-ore/chrome-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-4.png b/bobicons/graphics/icons/ores/chrome-ore/chrome-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/chrome-ore/chrome-ore-4.png rename to bobicons/graphics/icons/ores/chrome-ore/chrome-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/coal-64.png b/bobicons/graphics/icons/ores/coal-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/coal-64.png rename to bobicons/graphics/icons/ores/coal-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/cobalt-ore-64.png b/bobicons/graphics/icons/ores/cobalt-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/cobalt-ore-64.png rename to bobicons/graphics/icons/ores/cobalt-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-1-64.png b/bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-1-64.png rename to bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-2-64.png b/bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-2-64.png rename to bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-3-64.png b/bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-3-64.png rename to bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-4-64.png b/bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/cobalt-ore/cobalt-ore-4-64.png rename to bobicons/graphics/icons/ores/cobalt-ore/cobalt-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/diamond-ore-64.png b/bobicons/graphics/icons/ores/diamond-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/diamond-ore-64.png rename to bobicons/graphics/icons/ores/diamond-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/emerald-ore-64.png b/bobicons/graphics/icons/ores/emerald-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/emerald-ore-64.png rename to bobicons/graphics/icons/ores/emerald-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gem-ore-1-64.png b/bobicons/graphics/icons/ores/gem-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gem-ore-1-64.png rename to bobicons/graphics/icons/ores/gem-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gem-ore-64.png b/bobicons/graphics/icons/ores/gem-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gem-ore-64.png rename to bobicons/graphics/icons/ores/gem-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore-1-64.png b/bobicons/graphics/icons/ores/gold-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore-1-64.png rename to bobicons/graphics/icons/ores/gold-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore-64.png b/bobicons/graphics/icons/ores/gold-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore-64.png rename to bobicons/graphics/icons/ores/gold-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-1-64.png b/bobicons/graphics/icons/ores/gold-ore/gold-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-1-64.png rename to bobicons/graphics/icons/ores/gold-ore/gold-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-2-64.png b/bobicons/graphics/icons/ores/gold-ore/gold-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-2-64.png rename to bobicons/graphics/icons/ores/gold-ore/gold-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-3-64.png b/bobicons/graphics/icons/ores/gold-ore/gold-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-3-64.png rename to bobicons/graphics/icons/ores/gold-ore/gold-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-4-64.png b/bobicons/graphics/icons/ores/gold-ore/gold-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/gold-ore/gold-ore-4-64.png rename to bobicons/graphics/icons/ores/gold-ore/gold-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/lead-ore-64.png b/bobicons/graphics/icons/ores/lead-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/lead-ore-64.png rename to bobicons/graphics/icons/ores/lead-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-1-64.png b/bobicons/graphics/icons/ores/lead-ore/lead-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-1-64.png rename to bobicons/graphics/icons/ores/lead-ore/lead-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-2-64.png b/bobicons/graphics/icons/ores/lead-ore/lead-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-2-64.png rename to bobicons/graphics/icons/ores/lead-ore/lead-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-3-64.png b/bobicons/graphics/icons/ores/lead-ore/lead-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-3-64.png rename to bobicons/graphics/icons/ores/lead-ore/lead-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-4-64.png b/bobicons/graphics/icons/ores/lead-ore/lead-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/lead-ore/lead-ore-4-64.png rename to bobicons/graphics/icons/ores/lead-ore/lead-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-1.png b/bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-1.png rename to bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-2.png b/bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-2.png rename to bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-3.png b/bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-3.png rename to bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-4.png b/bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/magnesium-ore/magnesium-ore-4.png rename to bobicons/graphics/icons/ores/magnesium-ore/magnesium-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/manganese-ore-64.png b/bobicons/graphics/icons/ores/manganese-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/manganese-ore-64.png rename to bobicons/graphics/icons/ores/manganese-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-1.png b/bobicons/graphics/icons/ores/manganese-ore/manganese-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-1.png rename to bobicons/graphics/icons/ores/manganese-ore/manganese-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-2.png b/bobicons/graphics/icons/ores/manganese-ore/manganese-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-2.png rename to bobicons/graphics/icons/ores/manganese-ore/manganese-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-3.png b/bobicons/graphics/icons/ores/manganese-ore/manganese-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-3.png rename to bobicons/graphics/icons/ores/manganese-ore/manganese-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-4.png b/bobicons/graphics/icons/ores/manganese-ore/manganese-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/manganese-ore/manganese-ore-4.png rename to bobicons/graphics/icons/ores/manganese-ore/manganese-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/nickel-ore-64.png b/bobicons/graphics/icons/ores/nickel-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/nickel-ore-64.png rename to bobicons/graphics/icons/ores/nickel-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-1-64.png b/bobicons/graphics/icons/ores/nickel-ore/nickel-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-1-64.png rename to bobicons/graphics/icons/ores/nickel-ore/nickel-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-2-64.png b/bobicons/graphics/icons/ores/nickel-ore/nickel-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-2-64.png rename to bobicons/graphics/icons/ores/nickel-ore/nickel-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-3-64.png b/bobicons/graphics/icons/ores/nickel-ore/nickel-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-3-64.png rename to bobicons/graphics/icons/ores/nickel-ore/nickel-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-4-64.png b/bobicons/graphics/icons/ores/nickel-ore/nickel-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/nickel-ore/nickel-ore-4-64.png rename to bobicons/graphics/icons/ores/nickel-ore/nickel-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/amethyst-ore.png b/bobicons/graphics/icons/ores/old/amethyst-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/amethyst-ore.png rename to bobicons/graphics/icons/ores/old/amethyst-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/angels-ore2.png b/bobicons/graphics/icons/ores/old/angels-ore2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/angels-ore2.png rename to bobicons/graphics/icons/ores/old/angels-ore2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/angels-ore4.png b/bobicons/graphics/icons/ores/old/angels-ore4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/angels-ore4.png rename to bobicons/graphics/icons/ores/old/angels-ore4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/bauxite-ore.png b/bobicons/graphics/icons/ores/old/bauxite-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/bauxite-ore.png rename to bobicons/graphics/icons/ores/old/bauxite-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/coal-1.png b/bobicons/graphics/icons/ores/old/coal-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/coal-1.png rename to bobicons/graphics/icons/ores/old/coal-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/coal-2.png b/bobicons/graphics/icons/ores/old/coal-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/coal-2.png rename to bobicons/graphics/icons/ores/old/coal-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/coal.png b/bobicons/graphics/icons/ores/old/coal.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/coal.png rename to bobicons/graphics/icons/ores/old/coal.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/cobalt-ore-1.png b/bobicons/graphics/icons/ores/old/cobalt-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/cobalt-ore-1.png rename to bobicons/graphics/icons/ores/old/cobalt-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/cobalt-ore.png b/bobicons/graphics/icons/ores/old/cobalt-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/cobalt-ore.png rename to bobicons/graphics/icons/ores/old/cobalt-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/copper-ore-1.png b/bobicons/graphics/icons/ores/old/copper-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/copper-ore-1.png rename to bobicons/graphics/icons/ores/old/copper-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/copper-ore.png b/bobicons/graphics/icons/ores/old/copper-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/copper-ore.png rename to bobicons/graphics/icons/ores/old/copper-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/diamond-ore.png b/bobicons/graphics/icons/ores/old/diamond-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/diamond-ore.png rename to bobicons/graphics/icons/ores/old/diamond-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/emerald-ore.png b/bobicons/graphics/icons/ores/old/emerald-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/emerald-ore.png rename to bobicons/graphics/icons/ores/old/emerald-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/gem-ore-1.png b/bobicons/graphics/icons/ores/old/gem-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/gem-ore-1.png rename to bobicons/graphics/icons/ores/old/gem-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/gem-ore.png b/bobicons/graphics/icons/ores/old/gem-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/gem-ore.png rename to bobicons/graphics/icons/ores/old/gem-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/gold-ore-1.png b/bobicons/graphics/icons/ores/old/gold-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/gold-ore-1.png rename to bobicons/graphics/icons/ores/old/gold-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/gold-ore.png b/bobicons/graphics/icons/ores/old/gold-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/gold-ore.png rename to bobicons/graphics/icons/ores/old/gold-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/iron-ore-1.png b/bobicons/graphics/icons/ores/old/iron-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/iron-ore-1.png rename to bobicons/graphics/icons/ores/old/iron-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/iron-ore.png b/bobicons/graphics/icons/ores/old/iron-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/iron-ore.png rename to bobicons/graphics/icons/ores/old/iron-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/lead-ore-1.png b/bobicons/graphics/icons/ores/old/lead-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/lead-ore-1.png rename to bobicons/graphics/icons/ores/old/lead-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/lead-ore.png b/bobicons/graphics/icons/ores/old/lead-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/lead-ore.png rename to bobicons/graphics/icons/ores/old/lead-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/lithia-water.png b/bobicons/graphics/icons/ores/old/lithia-water.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/lithia-water.png rename to bobicons/graphics/icons/ores/old/lithia-water.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/nickel-ore-1.png b/bobicons/graphics/icons/ores/old/nickel-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/nickel-ore-1.png rename to bobicons/graphics/icons/ores/old/nickel-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/nickel-ore-64.png b/bobicons/graphics/icons/ores/old/nickel-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/nickel-ore-64.png rename to bobicons/graphics/icons/ores/old/nickel-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/nickel-ore.png b/bobicons/graphics/icons/ores/old/nickel-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/nickel-ore.png rename to bobicons/graphics/icons/ores/old/nickel-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-chrome.png b/bobicons/graphics/icons/ores/old/ore-chrome.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-chrome.png rename to bobicons/graphics/icons/ores/old/ore-chrome.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-manganese.png b/bobicons/graphics/icons/ores/old/ore-manganese.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-manganese.png rename to bobicons/graphics/icons/ores/old/ore-manganese.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-platinum.png b/bobicons/graphics/icons/ores/old/ore-platinum.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-platinum.png rename to bobicons/graphics/icons/ores/old/ore-platinum.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-rutile.png b/bobicons/graphics/icons/ores/old/ore-rutile.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-rutile.png rename to bobicons/graphics/icons/ores/old/ore-rutile.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-tin.png b/bobicons/graphics/icons/ores/old/ore-tin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-tin.png rename to bobicons/graphics/icons/ores/old/ore-tin.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ore-tungsten.png b/bobicons/graphics/icons/ores/old/ore-tungsten.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ore-tungsten.png rename to bobicons/graphics/icons/ores/old/ore-tungsten.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/osmium-ore.png b/bobicons/graphics/icons/ores/old/osmium-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/osmium-ore.png rename to bobicons/graphics/icons/ores/old/osmium-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/quartz-1.png b/bobicons/graphics/icons/ores/old/quartz-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/quartz-1.png rename to bobicons/graphics/icons/ores/old/quartz-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/quartz-2.png b/bobicons/graphics/icons/ores/old/quartz-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/quartz-2.png rename to bobicons/graphics/icons/ores/old/quartz-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/quartz.png b/bobicons/graphics/icons/ores/old/quartz.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/quartz.png rename to bobicons/graphics/icons/ores/old/quartz.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/re-copper-ore.png b/bobicons/graphics/icons/ores/old/re-copper-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/re-copper-ore.png rename to bobicons/graphics/icons/ores/old/re-copper-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/re-iron-ore.png b/bobicons/graphics/icons/ores/old/re-iron-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/re-iron-ore.png rename to bobicons/graphics/icons/ores/old/re-iron-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/ruby-ore.png b/bobicons/graphics/icons/ores/old/ruby-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/ruby-ore.png rename to bobicons/graphics/icons/ores/old/ruby-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/rutile-ore-1.png b/bobicons/graphics/icons/ores/old/rutile-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/rutile-ore-1.png rename to bobicons/graphics/icons/ores/old/rutile-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/rutile-ore.png b/bobicons/graphics/icons/ores/old/rutile-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/rutile-ore.png rename to bobicons/graphics/icons/ores/old/rutile-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/rutile-ore1.png b/bobicons/graphics/icons/ores/old/rutile-ore1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/rutile-ore1.png rename to bobicons/graphics/icons/ores/old/rutile-ore1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/sapphire-ore.png b/bobicons/graphics/icons/ores/old/sapphire-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/sapphire-ore.png rename to bobicons/graphics/icons/ores/old/sapphire-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/silver-ore-1.png b/bobicons/graphics/icons/ores/old/silver-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/silver-ore-1.png rename to bobicons/graphics/icons/ores/old/silver-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/silver-ore.png b/bobicons/graphics/icons/ores/old/silver-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/silver-ore.png rename to bobicons/graphics/icons/ores/old/silver-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/solid-sulfur.png b/bobicons/graphics/icons/ores/old/solid-sulfur.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/solid-sulfur.png rename to bobicons/graphics/icons/ores/old/solid-sulfur.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/stone-1.png b/bobicons/graphics/icons/ores/old/stone-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/stone-1.png rename to bobicons/graphics/icons/ores/old/stone-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/stone.png b/bobicons/graphics/icons/ores/old/stone.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/stone.png rename to bobicons/graphics/icons/ores/old/stone.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/thorium-ore.png b/bobicons/graphics/icons/ores/old/thorium-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/thorium-ore.png rename to bobicons/graphics/icons/ores/old/thorium-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/tin-ore-1.png b/bobicons/graphics/icons/ores/old/tin-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/tin-ore-1.png rename to bobicons/graphics/icons/ores/old/tin-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/tin-ore-2.png b/bobicons/graphics/icons/ores/old/tin-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/tin-ore-2.png rename to bobicons/graphics/icons/ores/old/tin-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/tin-ore.png b/bobicons/graphics/icons/ores/old/tin-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/tin-ore.png rename to bobicons/graphics/icons/ores/old/tin-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/topaz-ore.png b/bobicons/graphics/icons/ores/old/topaz-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/topaz-ore.png rename to bobicons/graphics/icons/ores/old/topaz-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/tungsten-ore-1.png b/bobicons/graphics/icons/ores/old/tungsten-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/tungsten-ore-1.png rename to bobicons/graphics/icons/ores/old/tungsten-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/tungsten-ore.png b/bobicons/graphics/icons/ores/old/tungsten-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/tungsten-ore.png rename to bobicons/graphics/icons/ores/old/tungsten-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/zinc-ore-1.png b/bobicons/graphics/icons/ores/old/zinc-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/zinc-ore-1.png rename to bobicons/graphics/icons/ores/old/zinc-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/old/zinc-ore.png b/bobicons/graphics/icons/ores/old/zinc-ore.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/old/zinc-ore.png rename to bobicons/graphics/icons/ores/old/zinc-ore.png diff --git a/bobicons_1.1.2/graphics/icons/ores/ore-chrome-64.png b/bobicons/graphics/icons/ores/ore-chrome-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/ore-chrome-64.png rename to bobicons/graphics/icons/ores/ore-chrome-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/ore-coal-2-64.png b/bobicons/graphics/icons/ores/ore-coal-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/ore-coal-2-64.png rename to bobicons/graphics/icons/ores/ore-coal-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/ore-stone-64.png b/bobicons/graphics/icons/ores/ore-stone-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/ore-stone-64.png rename to bobicons/graphics/icons/ores/ore-stone-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/ore-tungsten1-64.png b/bobicons/graphics/icons/ores/ore-tungsten1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/ore-tungsten1-64.png rename to bobicons/graphics/icons/ores/ore-tungsten1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-1.png b/bobicons/graphics/icons/ores/osmium-ore/osmium-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-1.png rename to bobicons/graphics/icons/ores/osmium-ore/osmium-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-2.png b/bobicons/graphics/icons/ores/osmium-ore/osmium-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-2.png rename to bobicons/graphics/icons/ores/osmium-ore/osmium-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-3.png b/bobicons/graphics/icons/ores/osmium-ore/osmium-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-3.png rename to bobicons/graphics/icons/ores/osmium-ore/osmium-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-4.png b/bobicons/graphics/icons/ores/osmium-ore/osmium-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/osmium-ore/osmium-ore-4.png rename to bobicons/graphics/icons/ores/osmium-ore/osmium-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/platinum-ore-64.png b/bobicons/graphics/icons/ores/platinum-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/platinum-ore-64.png rename to bobicons/graphics/icons/ores/platinum-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-1.png b/bobicons/graphics/icons/ores/platinum-ore/platinum-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-1.png rename to bobicons/graphics/icons/ores/platinum-ore/platinum-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-2.png b/bobicons/graphics/icons/ores/platinum-ore/platinum-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-2.png rename to bobicons/graphics/icons/ores/platinum-ore/platinum-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-3.png b/bobicons/graphics/icons/ores/platinum-ore/platinum-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-3.png rename to bobicons/graphics/icons/ores/platinum-ore/platinum-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-4.png b/bobicons/graphics/icons/ores/platinum-ore/platinum-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/platinum-ore/platinum-ore-4.png rename to bobicons/graphics/icons/ores/platinum-ore/platinum-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/quartz-64.png b/bobicons/graphics/icons/ores/quartz-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/quartz-64.png rename to bobicons/graphics/icons/ores/quartz-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/quartz/quartz-1-64.png b/bobicons/graphics/icons/ores/quartz/quartz-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/quartz/quartz-1-64.png rename to bobicons/graphics/icons/ores/quartz/quartz-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/quartz/quartz-2-64.png b/bobicons/graphics/icons/ores/quartz/quartz-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/quartz/quartz-2-64.png rename to bobicons/graphics/icons/ores/quartz/quartz-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/quartz/quartz-3-64.png b/bobicons/graphics/icons/ores/quartz/quartz-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/quartz/quartz-3-64.png rename to bobicons/graphics/icons/ores/quartz/quartz-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/quartz/quartz-4-64.png b/bobicons/graphics/icons/ores/quartz/quartz-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/quartz/quartz-4-64.png rename to bobicons/graphics/icons/ores/quartz/quartz-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/ruby-ore-64.png b/bobicons/graphics/icons/ores/ruby-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/ruby-ore-64.png rename to bobicons/graphics/icons/ores/ruby-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/rutile-ore-64.png b/bobicons/graphics/icons/ores/rutile-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/rutile-ore-64.png rename to bobicons/graphics/icons/ores/rutile-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-1-64.png b/bobicons/graphics/icons/ores/rutile-ore/rutile-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-1-64.png rename to bobicons/graphics/icons/ores/rutile-ore/rutile-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-2-64.png b/bobicons/graphics/icons/ores/rutile-ore/rutile-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-2-64.png rename to bobicons/graphics/icons/ores/rutile-ore/rutile-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-3-64.png b/bobicons/graphics/icons/ores/rutile-ore/rutile-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-3-64.png rename to bobicons/graphics/icons/ores/rutile-ore/rutile-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-4-64.png b/bobicons/graphics/icons/ores/rutile-ore/rutile-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/rutile-ore/rutile-ore-4-64.png rename to bobicons/graphics/icons/ores/rutile-ore/rutile-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/sapphire-ore-64.png b/bobicons/graphics/icons/ores/sapphire-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/sapphire-ore-64.png rename to bobicons/graphics/icons/ores/sapphire-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/silver-ore-64.png b/bobicons/graphics/icons/ores/silver-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/silver-ore-64.png rename to bobicons/graphics/icons/ores/silver-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-1-64.png b/bobicons/graphics/icons/ores/silver-ore/silver-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-1-64.png rename to bobicons/graphics/icons/ores/silver-ore/silver-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-2-64.png b/bobicons/graphics/icons/ores/silver-ore/silver-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-2-64.png rename to bobicons/graphics/icons/ores/silver-ore/silver-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-3-64.png b/bobicons/graphics/icons/ores/silver-ore/silver-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-3-64.png rename to bobicons/graphics/icons/ores/silver-ore/silver-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-4-64.png b/bobicons/graphics/icons/ores/silver-ore/silver-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/silver-ore/silver-ore-4-64.png rename to bobicons/graphics/icons/ores/silver-ore/silver-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/sulfur-64.png b/bobicons/graphics/icons/ores/sulfur-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/sulfur-64.png rename to bobicons/graphics/icons/ores/sulfur-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/thorium-ore-64.png b/bobicons/graphics/icons/ores/thorium-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/thorium-ore-64.png rename to bobicons/graphics/icons/ores/thorium-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-1.png b/bobicons/graphics/icons/ores/thorium-ore/thorium-ore-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-1.png rename to bobicons/graphics/icons/ores/thorium-ore/thorium-ore-1.png diff --git a/bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-2.png b/bobicons/graphics/icons/ores/thorium-ore/thorium-ore-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-2.png rename to bobicons/graphics/icons/ores/thorium-ore/thorium-ore-2.png diff --git a/bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-3.png b/bobicons/graphics/icons/ores/thorium-ore/thorium-ore-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-3.png rename to bobicons/graphics/icons/ores/thorium-ore/thorium-ore-3.png diff --git a/bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-4.png b/bobicons/graphics/icons/ores/thorium-ore/thorium-ore-4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/thorium-ore/thorium-ore-4.png rename to bobicons/graphics/icons/ores/thorium-ore/thorium-ore-4.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tin-ore-64.png b/bobicons/graphics/icons/ores/tin-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tin-ore-64.png rename to bobicons/graphics/icons/ores/tin-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-1-64.png b/bobicons/graphics/icons/ores/tin-ore/tin-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-1-64.png rename to bobicons/graphics/icons/ores/tin-ore/tin-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-2-64.png b/bobicons/graphics/icons/ores/tin-ore/tin-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-2-64.png rename to bobicons/graphics/icons/ores/tin-ore/tin-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-3-64.png b/bobicons/graphics/icons/ores/tin-ore/tin-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-3-64.png rename to bobicons/graphics/icons/ores/tin-ore/tin-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-4-64.png b/bobicons/graphics/icons/ores/tin-ore/tin-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tin-ore/tin-ore-4-64.png rename to bobicons/graphics/icons/ores/tin-ore/tin-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/topaz-ore-64.png b/bobicons/graphics/icons/ores/topaz-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/topaz-ore-64.png rename to bobicons/graphics/icons/ores/topaz-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tungsten-ore-64.png b/bobicons/graphics/icons/ores/tungsten-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tungsten-ore-64.png rename to bobicons/graphics/icons/ores/tungsten-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-1-64.png b/bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-1-64.png rename to bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-2-64.png b/bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-2-64.png rename to bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-3-64.png b/bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-3-64.png rename to bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-4-64.png b/bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/tungsten-ore/tungsten-ore-4-64.png rename to bobicons/graphics/icons/ores/tungsten-ore/tungsten-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/zinc-ore-64.png b/bobicons/graphics/icons/ores/zinc-ore-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/zinc-ore-64.png rename to bobicons/graphics/icons/ores/zinc-ore-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-1-64.png b/bobicons/graphics/icons/ores/zinc-ore/zinc-ore-1-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-1-64.png rename to bobicons/graphics/icons/ores/zinc-ore/zinc-ore-1-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-2-64.png b/bobicons/graphics/icons/ores/zinc-ore/zinc-ore-2-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-2-64.png rename to bobicons/graphics/icons/ores/zinc-ore/zinc-ore-2-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-3-64.png b/bobicons/graphics/icons/ores/zinc-ore/zinc-ore-3-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-3-64.png rename to bobicons/graphics/icons/ores/zinc-ore/zinc-ore-3-64.png diff --git a/bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-4-64.png b/bobicons/graphics/icons/ores/zinc-ore/zinc-ore-4-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/ores/zinc-ore/zinc-ore-4-64.png rename to bobicons/graphics/icons/ores/zinc-ore/zinc-ore-4-64.png diff --git a/bobicons_1.1.2/graphics/icons/other/advanced-oil-processing.png b/bobicons/graphics/icons/other/advanced-oil-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/advanced-oil-processing.png rename to bobicons/graphics/icons/other/advanced-oil-processing.png diff --git a/bobicons_1.1.2/graphics/icons/other/advancedSC.png b/bobicons/graphics/icons/other/advancedSC.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/advancedSC.png rename to bobicons/graphics/icons/other/advancedSC.png diff --git a/bobicons_1.1.2/graphics/icons/other/anotherworldSC.png b/bobicons/graphics/icons/other/anotherworldSC.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/anotherworldSC.png rename to bobicons/graphics/icons/other/anotherworldSC.png diff --git a/bobicons_1.1.2/graphics/icons/other/basic-oil-processing.png b/bobicons/graphics/icons/other/basic-oil-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/basic-oil-processing.png rename to bobicons/graphics/icons/other/basic-oil-processing.png diff --git a/bobicons_1.1.2/graphics/icons/other/basicSC.png b/bobicons/graphics/icons/other/basicSC.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/basicSC.png rename to bobicons/graphics/icons/other/basicSC.png diff --git a/bobicons_1.1.2/graphics/icons/other/basicSC1.png b/bobicons/graphics/icons/other/basicSC1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/basicSC1.png rename to bobicons/graphics/icons/other/basicSC1.png diff --git a/bobicons_1.1.2/graphics/icons/other/bob-oil-processing.png b/bobicons/graphics/icons/other/bob-oil-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/bob-oil-processing.png rename to bobicons/graphics/icons/other/bob-oil-processing.png diff --git a/bobicons_1.1.2/graphics/icons/other/coal-liquefaction.png b/bobicons/graphics/icons/other/coal-liquefaction.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/coal-liquefaction.png rename to bobicons/graphics/icons/other/coal-liquefaction.png diff --git a/bobicons_1.1.2/graphics/icons/other/intermediateSC.png b/bobicons/graphics/icons/other/intermediateSC.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/intermediateSC.png rename to bobicons/graphics/icons/other/intermediateSC.png diff --git a/bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-1.png b/bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-1.png rename to bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-1.png diff --git a/bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-2.png b/bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-2.png rename to bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-2.png diff --git a/bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-3.png b/bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur-dioxide-3.png rename to bobicons/graphics/icons/other/oil-processing-with-sulfur-dioxide-3.png diff --git a/bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur.png b/bobicons/graphics/icons/other/oil-processing-with-sulfur.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/oil-processing-with-sulfur.png rename to bobicons/graphics/icons/other/oil-processing-with-sulfur.png diff --git a/bobicons_1.1.2/graphics/icons/other/tech1.png b/bobicons/graphics/icons/other/tech1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/tech1.png rename to bobicons/graphics/icons/other/tech1.png diff --git a/bobicons_1.1.2/graphics/icons/other/tech2.png b/bobicons/graphics/icons/other/tech2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/tech2.png rename to bobicons/graphics/icons/other/tech2.png diff --git a/bobicons_1.1.2/graphics/icons/other/tech3.png b/bobicons/graphics/icons/other/tech3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/tech3.png rename to bobicons/graphics/icons/other/tech3.png diff --git a/bobicons_1.1.2/graphics/icons/other/tech4.png b/bobicons/graphics/icons/other/tech4.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/tech4.png rename to bobicons/graphics/icons/other/tech4.png diff --git a/bobicons_1.1.2/graphics/icons/other/tech5.png b/bobicons/graphics/icons/other/tech5.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/tech5.png rename to bobicons/graphics/icons/other/tech5.png diff --git a/bobicons_1.1.2/graphics/icons/other/techl.png b/bobicons/graphics/icons/other/techl.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/techl.png rename to bobicons/graphics/icons/other/techl.png diff --git a/bobicons_1.1.2/graphics/icons/other/techm.png b/bobicons/graphics/icons/other/techm.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/techm.png rename to bobicons/graphics/icons/other/techm.png diff --git a/bobicons_1.1.2/graphics/icons/other/techo.png b/bobicons/graphics/icons/other/techo.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/other/techo.png rename to bobicons/graphics/icons/other/techo.png diff --git a/bobicons_1.1.2/graphics/icons/plate/aluminium-plate-128.png b/bobicons/graphics/icons/plate/aluminium-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/aluminium-plate-128.png rename to bobicons/graphics/icons/plate/aluminium-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/brass-alloy-128-2.png b/bobicons/graphics/icons/plate/brass-alloy-128-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/brass-alloy-128-2.png rename to bobicons/graphics/icons/plate/brass-alloy-128-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/brass-alloy-128.png b/bobicons/graphics/icons/plate/brass-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/brass-alloy-128.png rename to bobicons/graphics/icons/plate/brass-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/brass-alloy-2-128.png b/bobicons/graphics/icons/plate/brass-alloy-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/brass-alloy-2-128.png rename to bobicons/graphics/icons/plate/brass-alloy-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/bronze-alloy--2-128.png b/bobicons/graphics/icons/plate/bronze-alloy--2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/bronze-alloy--2-128.png rename to bobicons/graphics/icons/plate/bronze-alloy--2-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/bronze-alloy-128.png b/bobicons/graphics/icons/plate/bronze-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/bronze-alloy-128.png rename to bobicons/graphics/icons/plate/bronze-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/bronze-alloy-2-128.png b/bobicons/graphics/icons/plate/bronze-alloy-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/bronze-alloy-2-128.png rename to bobicons/graphics/icons/plate/bronze-alloy-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/cobalt-plate-128.png b/bobicons/graphics/icons/plate/cobalt-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/cobalt-plate-128.png rename to bobicons/graphics/icons/plate/cobalt-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/cobalt-steel-alloy-128.png b/bobicons/graphics/icons/plate/cobalt-steel-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/cobalt-steel-alloy-128.png rename to bobicons/graphics/icons/plate/cobalt-steel-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/copper-tungsten-alloy-128.png b/bobicons/graphics/icons/plate/copper-tungsten-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/copper-tungsten-alloy-128.png rename to bobicons/graphics/icons/plate/copper-tungsten-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/electrum-alloy-128.png b/bobicons/graphics/icons/plate/electrum-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/electrum-alloy-128.png rename to bobicons/graphics/icons/plate/electrum-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/glass-1-128.png b/bobicons/graphics/icons/plate/glass-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/glass-1-128.png rename to bobicons/graphics/icons/plate/glass-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/glass-128.png b/bobicons/graphics/icons/plate/glass-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/glass-128.png rename to bobicons/graphics/icons/plate/glass-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/gold-plate-128.png b/bobicons/graphics/icons/plate/gold-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/gold-plate-128.png rename to bobicons/graphics/icons/plate/gold-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/gunmetal-alloy-128.png b/bobicons/graphics/icons/plate/gunmetal-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/gunmetal-alloy-128.png rename to bobicons/graphics/icons/plate/gunmetal-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/invar-alloy-1-128.png b/bobicons/graphics/icons/plate/invar-alloy-1-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/invar-alloy-1-128.png rename to bobicons/graphics/icons/plate/invar-alloy-1-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/invar-alloy-128.png b/bobicons/graphics/icons/plate/invar-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/invar-alloy-128.png rename to bobicons/graphics/icons/plate/invar-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/iron-plate-2-128.png b/bobicons/graphics/icons/plate/iron-plate-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/iron-plate-2-128.png rename to bobicons/graphics/icons/plate/iron-plate-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/lead-plate (2)-128.png b/bobicons/graphics/icons/plate/lead-plate (2)-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/lead-plate (2)-128.png rename to bobicons/graphics/icons/plate/lead-plate (2)-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/lead-plate-128.png b/bobicons/graphics/icons/plate/lead-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/lead-plate-128.png rename to bobicons/graphics/icons/plate/lead-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/lithium-128.png b/bobicons/graphics/icons/plate/lithium-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/lithium-128.png rename to bobicons/graphics/icons/plate/lithium-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/lithium-plate64.png b/bobicons/graphics/icons/plate/lithium-plate64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/lithium-plate64.png rename to bobicons/graphics/icons/plate/lithium-plate64.png diff --git a/bobicons_1.1.2/graphics/icons/plate/nickel-plate (2)-128.png b/bobicons/graphics/icons/plate/nickel-plate (2)-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/nickel-plate (2)-128.png rename to bobicons/graphics/icons/plate/nickel-plate (2)-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/nickel-plate-128.png b/bobicons/graphics/icons/plate/nickel-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/nickel-plate-128.png rename to bobicons/graphics/icons/plate/nickel-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/nitinol-alloy-128-gb.png b/bobicons/graphics/icons/plate/nitinol-alloy-128-gb.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/nitinol-alloy-128-gb.png rename to bobicons/graphics/icons/plate/nitinol-alloy-128-gb.png diff --git a/bobicons_1.1.2/graphics/icons/plate/nitinol-alloy-128.png b/bobicons/graphics/icons/plate/nitinol-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/nitinol-alloy-128.png rename to bobicons/graphics/icons/plate/nitinol-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/alien-blue-alloy1.png b/bobicons/graphics/icons/plate/old/alien-blue-alloy1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/alien-blue-alloy1.png rename to bobicons/graphics/icons/plate/old/alien-blue-alloy1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/alien-blue-alloy2.png b/bobicons/graphics/icons/plate/old/alien-blue-alloy2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/alien-blue-alloy2.png rename to bobicons/graphics/icons/plate/old/alien-blue-alloy2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/alien-orange-alloy1.png b/bobicons/graphics/icons/plate/old/alien-orange-alloy1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/alien-orange-alloy1.png rename to bobicons/graphics/icons/plate/old/alien-orange-alloy1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/alien-orange-alloy2.png b/bobicons/graphics/icons/plate/old/alien-orange-alloy2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/alien-orange-alloy2.png rename to bobicons/graphics/icons/plate/old/alien-orange-alloy2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/aluminium-plate1.png b/bobicons/graphics/icons/plate/old/aluminium-plate1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/aluminium-plate1.png rename to bobicons/graphics/icons/plate/old/aluminium-plate1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/aluminium-plate32.png b/bobicons/graphics/icons/plate/old/aluminium-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/aluminium-plate32.png rename to bobicons/graphics/icons/plate/old/aluminium-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/brass-alloy-1.png b/bobicons/graphics/icons/plate/old/brass-alloy-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/brass-alloy-1.png rename to bobicons/graphics/icons/plate/old/brass-alloy-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/brass-alloy.png b/bobicons/graphics/icons/plate/old/brass-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/brass-alloy.png rename to bobicons/graphics/icons/plate/old/brass-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/brass-alloy32-2.png b/bobicons/graphics/icons/plate/old/brass-alloy32-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/brass-alloy32-2.png rename to bobicons/graphics/icons/plate/old/brass-alloy32-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/brass-alloy32.png b/bobicons/graphics/icons/plate/old/brass-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/brass-alloy32.png rename to bobicons/graphics/icons/plate/old/brass-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy.png b/bobicons/graphics/icons/plate/old/bronze-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy.png rename to bobicons/graphics/icons/plate/old/bronze-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy32-2.png b/bobicons/graphics/icons/plate/old/bronze-alloy32-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy32-2.png rename to bobicons/graphics/icons/plate/old/bronze-alloy32-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy32.png b/bobicons/graphics/icons/plate/old/bronze-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/bronze-alloy32.png rename to bobicons/graphics/icons/plate/old/bronze-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/cobalt-plate32.png b/bobicons/graphics/icons/plate/old/cobalt-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/cobalt-plate32.png rename to bobicons/graphics/icons/plate/old/cobalt-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/cobalt-steel-alloy-1.png b/bobicons/graphics/icons/plate/old/cobalt-steel-alloy-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/cobalt-steel-alloy-1.png rename to bobicons/graphics/icons/plate/old/cobalt-steel-alloy-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/cobalt-steel-alloy-32.png b/bobicons/graphics/icons/plate/old/cobalt-steel-alloy-32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/cobalt-steel-alloy-32.png rename to bobicons/graphics/icons/plate/old/cobalt-steel-alloy-32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/copper-plate-1.png b/bobicons/graphics/icons/plate/old/copper-plate-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/copper-plate-1.png rename to bobicons/graphics/icons/plate/old/copper-plate-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/copper-plate-2.png b/bobicons/graphics/icons/plate/old/copper-plate-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/copper-plate-2.png rename to bobicons/graphics/icons/plate/old/copper-plate-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/copper-plate32.png b/bobicons/graphics/icons/plate/old/copper-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/copper-plate32.png rename to bobicons/graphics/icons/plate/old/copper-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/copper-tungsten-alloy.png b/bobicons/graphics/icons/plate/old/copper-tungsten-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/copper-tungsten-alloy.png rename to bobicons/graphics/icons/plate/old/copper-tungsten-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/copper-tungsten-alloy32.png b/bobicons/graphics/icons/plate/old/copper-tungsten-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/copper-tungsten-alloy32.png rename to bobicons/graphics/icons/plate/old/copper-tungsten-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/electrum-alloy-1.png b/bobicons/graphics/icons/plate/old/electrum-alloy-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/electrum-alloy-1.png rename to bobicons/graphics/icons/plate/old/electrum-alloy-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/electrum-alloy.png b/bobicons/graphics/icons/plate/old/electrum-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/electrum-alloy.png rename to bobicons/graphics/icons/plate/old/electrum-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/glass-1.png b/bobicons/graphics/icons/plate/old/glass-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/glass-1.png rename to bobicons/graphics/icons/plate/old/glass-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/glass-2.png b/bobicons/graphics/icons/plate/old/glass-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/glass-2.png rename to bobicons/graphics/icons/plate/old/glass-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/glass-3.png b/bobicons/graphics/icons/plate/old/glass-3.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/glass-3.png rename to bobicons/graphics/icons/plate/old/glass-3.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/glass-mixture.png b/bobicons/graphics/icons/plate/old/glass-mixture.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/glass-mixture.png rename to bobicons/graphics/icons/plate/old/glass-mixture.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/glass.png b/bobicons/graphics/icons/plate/old/glass.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/glass.png rename to bobicons/graphics/icons/plate/old/glass.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/gold-plate-2.png b/bobicons/graphics/icons/plate/old/gold-plate-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/gold-plate-2.png rename to bobicons/graphics/icons/plate/old/gold-plate-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/gold-plate.png b/bobicons/graphics/icons/plate/old/gold-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/gold-plate.png rename to bobicons/graphics/icons/plate/old/gold-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/gold-plate2.png b/bobicons/graphics/icons/plate/old/gold-plate2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/gold-plate2.png rename to bobicons/graphics/icons/plate/old/gold-plate2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/gunmetal-alloy.png b/bobicons/graphics/icons/plate/old/gunmetal-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/gunmetal-alloy.png rename to bobicons/graphics/icons/plate/old/gunmetal-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/gunmetal-alloy32.png b/bobicons/graphics/icons/plate/old/gunmetal-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/gunmetal-alloy32.png rename to bobicons/graphics/icons/plate/old/gunmetal-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/invar-alloy-1.png b/bobicons/graphics/icons/plate/old/invar-alloy-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/invar-alloy-1.png rename to bobicons/graphics/icons/plate/old/invar-alloy-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/invar-alloy.png b/bobicons/graphics/icons/plate/old/invar-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/invar-alloy.png rename to bobicons/graphics/icons/plate/old/invar-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/invar-alloy32.png b/bobicons/graphics/icons/plate/old/invar-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/invar-alloy32.png rename to bobicons/graphics/icons/plate/old/invar-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/iron-plate-1.png b/bobicons/graphics/icons/plate/old/iron-plate-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/iron-plate-1.png rename to bobicons/graphics/icons/plate/old/iron-plate-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/iron-plate-2.png b/bobicons/graphics/icons/plate/old/iron-plate-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/iron-plate-2.png rename to bobicons/graphics/icons/plate/old/iron-plate-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/iron-plate.png b/bobicons/graphics/icons/plate/old/iron-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/iron-plate.png rename to bobicons/graphics/icons/plate/old/iron-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/iron-plate32.png b/bobicons/graphics/icons/plate/old/iron-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/iron-plate32.png rename to bobicons/graphics/icons/plate/old/iron-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/lead-plate (2).png b/bobicons/graphics/icons/plate/old/lead-plate (2).png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/lead-plate (2).png rename to bobicons/graphics/icons/plate/old/lead-plate (2).png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/lead-plate-64.png b/bobicons/graphics/icons/plate/old/lead-plate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/lead-plate-64.png rename to bobicons/graphics/icons/plate/old/lead-plate-64.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/lead-plate32.png b/bobicons/graphics/icons/plate/old/lead-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/lead-plate32.png rename to bobicons/graphics/icons/plate/old/lead-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/lithium-plate-1.png b/bobicons/graphics/icons/plate/old/lithium-plate-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/lithium-plate-1.png rename to bobicons/graphics/icons/plate/old/lithium-plate-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/lithium32.png b/bobicons/graphics/icons/plate/old/lithium32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/lithium32.png rename to bobicons/graphics/icons/plate/old/lithium32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nickel-plate (2).png b/bobicons/graphics/icons/plate/old/nickel-plate (2).png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nickel-plate (2).png rename to bobicons/graphics/icons/plate/old/nickel-plate (2).png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nickel-plate.png b/bobicons/graphics/icons/plate/old/nickel-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nickel-plate.png rename to bobicons/graphics/icons/plate/old/nickel-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nickel-plate32.png b/bobicons/graphics/icons/plate/old/nickel-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nickel-plate32.png rename to bobicons/graphics/icons/plate/old/nickel-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy-1.png b/bobicons/graphics/icons/plate/old/nitinol-alloy-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy-1.png rename to bobicons/graphics/icons/plate/old/nitinol-alloy-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy.png b/bobicons/graphics/icons/plate/old/nitinol-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy.png rename to bobicons/graphics/icons/plate/old/nitinol-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy32.png b/bobicons/graphics/icons/plate/old/nitinol-alloy32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/nitinol-alloy32.png rename to bobicons/graphics/icons/plate/old/nitinol-alloy32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-aluminium.png b/bobicons/graphics/icons/plate/old/plate-aluminium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-aluminium.png rename to bobicons/graphics/icons/plate/old/plate-aluminium.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-chrome-2.png b/bobicons/graphics/icons/plate/old/plate-chrome-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-chrome-2.png rename to bobicons/graphics/icons/plate/old/plate-chrome-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-chrome.png b/bobicons/graphics/icons/plate/old/plate-chrome.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-chrome.png rename to bobicons/graphics/icons/plate/old/plate-chrome.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt-2.png b/bobicons/graphics/icons/plate/old/plate-cobalt-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt-2.png rename to bobicons/graphics/icons/plate/old/plate-cobalt-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt-steel.png b/bobicons/graphics/icons/plate/old/plate-cobalt-steel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt-steel.png rename to bobicons/graphics/icons/plate/old/plate-cobalt-steel.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt.png b/bobicons/graphics/icons/plate/old/plate-cobalt.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-cobalt.png rename to bobicons/graphics/icons/plate/old/plate-cobalt.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-electrum.png b/bobicons/graphics/icons/plate/old/plate-electrum.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-electrum.png rename to bobicons/graphics/icons/plate/old/plate-electrum.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-invar-1.png b/bobicons/graphics/icons/plate/old/plate-invar-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-invar-1.png rename to bobicons/graphics/icons/plate/old/plate-invar-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-invar.png b/bobicons/graphics/icons/plate/old/plate-invar.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-invar.png rename to bobicons/graphics/icons/plate/old/plate-invar.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-lead.png b/bobicons/graphics/icons/plate/old/plate-lead.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-lead.png rename to bobicons/graphics/icons/plate/old/plate-lead.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-manganese.png b/bobicons/graphics/icons/plate/old/plate-manganese.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-manganese.png rename to bobicons/graphics/icons/plate/old/plate-manganese.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-nickel.png b/bobicons/graphics/icons/plate/old/plate-nickel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-nickel.png rename to bobicons/graphics/icons/plate/old/plate-nickel.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-nitinol.png b/bobicons/graphics/icons/plate/old/plate-nitinol.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-nitinol.png rename to bobicons/graphics/icons/plate/old/plate-nitinol.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-platinum.png b/bobicons/graphics/icons/plate/old/plate-platinum.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-platinum.png rename to bobicons/graphics/icons/plate/old/plate-platinum.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-silver.png b/bobicons/graphics/icons/plate/old/plate-silver.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-silver.png rename to bobicons/graphics/icons/plate/old/plate-silver.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-steel.png b/bobicons/graphics/icons/plate/old/plate-steel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-steel.png rename to bobicons/graphics/icons/plate/old/plate-steel.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-tin.png b/bobicons/graphics/icons/plate/old/plate-tin.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-tin.png rename to bobicons/graphics/icons/plate/old/plate-tin.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-titanium.png b/bobicons/graphics/icons/plate/old/plate-titanium.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-titanium.png rename to bobicons/graphics/icons/plate/old/plate-titanium.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-tungsten.png b/bobicons/graphics/icons/plate/old/plate-tungsten.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-tungsten.png rename to bobicons/graphics/icons/plate/old/plate-tungsten.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/plate-zinc.png b/bobicons/graphics/icons/plate/old/plate-zinc.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/plate-zinc.png rename to bobicons/graphics/icons/plate/old/plate-zinc.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/silicon.png b/bobicons/graphics/icons/plate/old/silicon.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/silicon.png rename to bobicons/graphics/icons/plate/old/silicon.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/silicon1.png b/bobicons/graphics/icons/plate/old/silicon1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/silicon1.png rename to bobicons/graphics/icons/plate/old/silicon1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/silver-plate-64.png b/bobicons/graphics/icons/plate/old/silver-plate-64.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/silver-plate-64.png rename to bobicons/graphics/icons/plate/old/silver-plate-64.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/silver-plate.png b/bobicons/graphics/icons/plate/old/silver-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/silver-plate.png rename to bobicons/graphics/icons/plate/old/silver-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/solder-alloy.png b/bobicons/graphics/icons/plate/old/solder-alloy.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/solder-alloy.png rename to bobicons/graphics/icons/plate/old/solder-alloy.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/solder-plate1.png b/bobicons/graphics/icons/plate/old/solder-plate1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/solder-plate1.png rename to bobicons/graphics/icons/plate/old/solder-plate1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/solder-plate2.png b/bobicons/graphics/icons/plate/old/solder-plate2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/solder-plate2.png rename to bobicons/graphics/icons/plate/old/solder-plate2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/steel-plate32.png b/bobicons/graphics/icons/plate/old/steel-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/steel-plate32.png rename to bobicons/graphics/icons/plate/old/steel-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/super-steel.png b/bobicons/graphics/icons/plate/old/super-steel.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/super-steel.png rename to bobicons/graphics/icons/plate/old/super-steel.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/tin-plate.png b/bobicons/graphics/icons/plate/old/tin-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/tin-plate.png rename to bobicons/graphics/icons/plate/old/tin-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/titanium-plate-1.png b/bobicons/graphics/icons/plate/old/titanium-plate-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/titanium-plate-1.png rename to bobicons/graphics/icons/plate/old/titanium-plate-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/titanium-plate-2.png b/bobicons/graphics/icons/plate/old/titanium-plate-2.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/titanium-plate-2.png rename to bobicons/graphics/icons/plate/old/titanium-plate-2.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/titanium-plate.png b/bobicons/graphics/icons/plate/old/titanium-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/titanium-plate.png rename to bobicons/graphics/icons/plate/old/titanium-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/titanium-plate1.png b/bobicons/graphics/icons/plate/old/titanium-plate1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/titanium-plate1.png rename to bobicons/graphics/icons/plate/old/titanium-plate1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/tungsten-carbide.png b/bobicons/graphics/icons/plate/old/tungsten-carbide.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/tungsten-carbide.png rename to bobicons/graphics/icons/plate/old/tungsten-carbide.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/tungsten-carbide32.png b/bobicons/graphics/icons/plate/old/tungsten-carbide32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/tungsten-carbide32.png rename to bobicons/graphics/icons/plate/old/tungsten-carbide32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/tungsten-plate.png b/bobicons/graphics/icons/plate/old/tungsten-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/tungsten-plate.png rename to bobicons/graphics/icons/plate/old/tungsten-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/zinc-plate-1.png b/bobicons/graphics/icons/plate/old/zinc-plate-1.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/zinc-plate-1.png rename to bobicons/graphics/icons/plate/old/zinc-plate-1.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/zinc-plate.png b/bobicons/graphics/icons/plate/old/zinc-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/zinc-plate.png rename to bobicons/graphics/icons/plate/old/zinc-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/old/zinc-plate32.png b/bobicons/graphics/icons/plate/old/zinc-plate32.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/old/zinc-plate32.png rename to bobicons/graphics/icons/plate/old/zinc-plate32.png diff --git a/bobicons_1.1.2/graphics/icons/plate/plate-chrome-128.png b/bobicons/graphics/icons/plate/plate-chrome-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/plate-chrome-128.png rename to bobicons/graphics/icons/plate/plate-chrome-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/plate-cobalt-128.png b/bobicons/graphics/icons/plate/plate-cobalt-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/plate-cobalt-128.png rename to bobicons/graphics/icons/plate/plate-cobalt-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/plate-electrum-128.png b/bobicons/graphics/icons/plate/plate-electrum-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/plate-electrum-128.png rename to bobicons/graphics/icons/plate/plate-electrum-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/plate-manganese-128.png b/bobicons/graphics/icons/plate/plate-manganese-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/plate-manganese-128.png rename to bobicons/graphics/icons/plate/plate-manganese-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/plate-platinum-128.png b/bobicons/graphics/icons/plate/plate-platinum-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/plate-platinum-128.png rename to bobicons/graphics/icons/plate/plate-platinum-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/silicon-128.png b/bobicons/graphics/icons/plate/silicon-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/silicon-128.png rename to bobicons/graphics/icons/plate/silicon-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/silver-plate-128.png b/bobicons/graphics/icons/plate/silver-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/silver-plate-128.png rename to bobicons/graphics/icons/plate/silver-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/solder-alloy-128.png b/bobicons/graphics/icons/plate/solder-alloy-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/solder-alloy-128.png rename to bobicons/graphics/icons/plate/solder-alloy-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/steel-plate.png b/bobicons/graphics/icons/plate/steel-plate.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/steel-plate.png rename to bobicons/graphics/icons/plate/steel-plate.png diff --git a/bobicons_1.1.2/graphics/icons/plate/tin-plate-128.png b/bobicons/graphics/icons/plate/tin-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/tin-plate-128.png rename to bobicons/graphics/icons/plate/tin-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/titanium-plate-128.png b/bobicons/graphics/icons/plate/titanium-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/titanium-plate-128.png rename to bobicons/graphics/icons/plate/titanium-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/tungsten-carbide-128.png b/bobicons/graphics/icons/plate/tungsten-carbide-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/tungsten-carbide-128.png rename to bobicons/graphics/icons/plate/tungsten-carbide-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/tungsten-plate-128.png b/bobicons/graphics/icons/plate/tungsten-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/tungsten-plate-128.png rename to bobicons/graphics/icons/plate/tungsten-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/plate/zinc-plate-128.png b/bobicons/graphics/icons/plate/zinc-plate-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/plate/zinc-plate-128.png rename to bobicons/graphics/icons/plate/zinc-plate-128.png diff --git a/bobicons_1.1.2/graphics/icons/science/blue-128.png b/bobicons/graphics/icons/science/blue-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/science/blue-128.png rename to bobicons/graphics/icons/science/blue-128.png diff --git a/bobicons_1.1.2/graphics/icons/science/logistic-science-pack-2-128.png b/bobicons/graphics/icons/science/logistic-science-pack-2-128.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/science/logistic-science-pack-2-128.png rename to bobicons/graphics/icons/science/logistic-science-pack-2-128.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_black.png b/bobicons/graphics/icons/signals/signal_black.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_black.png rename to bobicons/graphics/icons/signals/signal_black.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_blue.png b/bobicons/graphics/icons/signals/signal_blue.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_blue.png rename to bobicons/graphics/icons/signals/signal_blue.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_cyan.png b/bobicons/graphics/icons/signals/signal_cyan.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_cyan.png rename to bobicons/graphics/icons/signals/signal_cyan.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_green.png b/bobicons/graphics/icons/signals/signal_green.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_green.png rename to bobicons/graphics/icons/signals/signal_green.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_grey.png b/bobicons/graphics/icons/signals/signal_grey.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_grey.png rename to bobicons/graphics/icons/signals/signal_grey.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_pink.png b/bobicons/graphics/icons/signals/signal_pink.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_pink.png rename to bobicons/graphics/icons/signals/signal_pink.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_red.png b/bobicons/graphics/icons/signals/signal_red.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_red.png rename to bobicons/graphics/icons/signals/signal_red.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_white.png b/bobicons/graphics/icons/signals/signal_white.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_white.png rename to bobicons/graphics/icons/signals/signal_white.png diff --git a/bobicons_1.1.2/graphics/icons/signals/signal_yellow.png b/bobicons/graphics/icons/signals/signal_yellow.png similarity index 100% rename from bobicons_1.1.2/graphics/icons/signals/signal_yellow.png rename to bobicons/graphics/icons/signals/signal_yellow.png diff --git a/bobicons_1.1.2/graphics/technology/aluminium-processing.png b/bobicons/graphics/technology/aluminium-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/aluminium-processing.png rename to bobicons/graphics/technology/aluminium-processing.png diff --git a/bobicons_1.1.2/graphics/technology/basic-chemistry.png b/bobicons/graphics/technology/basic-chemistry.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/basic-chemistry.png rename to bobicons/graphics/technology/basic-chemistry.png diff --git a/bobicons_1.1.2/graphics/technology/chemical-processing.png b/bobicons/graphics/technology/chemical-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/chemical-processing.png rename to bobicons/graphics/technology/chemical-processing.png diff --git a/bobicons_1.1.2/graphics/technology/chlorine-tech.png b/bobicons/graphics/technology/chlorine-tech.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/chlorine-tech.png rename to bobicons/graphics/technology/chlorine-tech.png diff --git a/bobicons_1.1.2/graphics/technology/coal-tech.png b/bobicons/graphics/technology/coal-tech.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/coal-tech.png rename to bobicons/graphics/technology/coal-tech.png diff --git a/bobicons_1.1.2/graphics/technology/cobalt-processing.png b/bobicons/graphics/technology/cobalt-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/cobalt-processing.png rename to bobicons/graphics/technology/cobalt-processing.png diff --git a/bobicons_1.1.2/graphics/technology/gold-processing.png b/bobicons/graphics/technology/gold-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/gold-processing.png rename to bobicons/graphics/technology/gold-processing.png diff --git a/bobicons_1.1.2/graphics/technology/heat-shield.png b/bobicons/graphics/technology/heat-shield.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/heat-shield.png rename to bobicons/graphics/technology/heat-shield.png diff --git a/bobicons_1.1.2/graphics/technology/invar-processing.png b/bobicons/graphics/technology/invar-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/invar-processing.png rename to bobicons/graphics/technology/invar-processing.png diff --git a/bobicons_1.1.2/graphics/technology/lead-processing.png b/bobicons/graphics/technology/lead-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/lead-processing.png rename to bobicons/graphics/technology/lead-processing.png diff --git a/bobicons_1.1.2/graphics/technology/lithium-processing.png b/bobicons/graphics/technology/lithium-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/lithium-processing.png rename to bobicons/graphics/technology/lithium-processing.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-1.png b/bobicons/graphics/technology/modules/cyan-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-1.png rename to bobicons/graphics/technology/modules/cyan-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-2.png b/bobicons/graphics/technology/modules/cyan-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-2.png rename to bobicons/graphics/technology/modules/cyan-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-3.png b/bobicons/graphics/technology/modules/cyan-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-3.png rename to bobicons/graphics/technology/modules/cyan-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-4.png b/bobicons/graphics/technology/modules/cyan-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-4.png rename to bobicons/graphics/technology/modules/cyan-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-5.png b/bobicons/graphics/technology/modules/cyan-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-5.png rename to bobicons/graphics/technology/modules/cyan-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-6.png b/bobicons/graphics/technology/modules/cyan-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-6.png rename to bobicons/graphics/technology/modules/cyan-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-7.png b/bobicons/graphics/technology/modules/cyan-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-7.png rename to bobicons/graphics/technology/modules/cyan-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/cyan-module-8.png b/bobicons/graphics/technology/modules/cyan-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/cyan-module-8.png rename to bobicons/graphics/technology/modules/cyan-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/god-module-1.png b/bobicons/graphics/technology/modules/god-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/god-module-1.png rename to bobicons/graphics/technology/modules/god-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/god-module-2.png b/bobicons/graphics/technology/modules/god-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/god-module-2.png rename to bobicons/graphics/technology/modules/god-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/god-module-3.png b/bobicons/graphics/technology/modules/god-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/god-module-3.png rename to bobicons/graphics/technology/modules/god-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/god-module-4.png b/bobicons/graphics/technology/modules/god-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/god-module-4.png rename to bobicons/graphics/technology/modules/god-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/god-module-5.png b/bobicons/graphics/technology/modules/god-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/god-module-5.png rename to bobicons/graphics/technology/modules/god-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-1.png b/bobicons/graphics/technology/modules/green-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-1.png rename to bobicons/graphics/technology/modules/green-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-2.png b/bobicons/graphics/technology/modules/green-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-2.png rename to bobicons/graphics/technology/modules/green-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-3.png b/bobicons/graphics/technology/modules/green-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-3.png rename to bobicons/graphics/technology/modules/green-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-4.png b/bobicons/graphics/technology/modules/green-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-4.png rename to bobicons/graphics/technology/modules/green-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-5.png b/bobicons/graphics/technology/modules/green-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-5.png rename to bobicons/graphics/technology/modules/green-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-6.png b/bobicons/graphics/technology/modules/green-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-6.png rename to bobicons/graphics/technology/modules/green-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-7.png b/bobicons/graphics/technology/modules/green-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-7.png rename to bobicons/graphics/technology/modules/green-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/green-module-8.png b/bobicons/graphics/technology/modules/green-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/green-module-8.png rename to bobicons/graphics/technology/modules/green-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-1.png b/bobicons/graphics/technology/modules/pollution-clean-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-1.png rename to bobicons/graphics/technology/modules/pollution-clean-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-2.png b/bobicons/graphics/technology/modules/pollution-clean-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-2.png rename to bobicons/graphics/technology/modules/pollution-clean-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-3.png b/bobicons/graphics/technology/modules/pollution-clean-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-3.png rename to bobicons/graphics/technology/modules/pollution-clean-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-4.png b/bobicons/graphics/technology/modules/pollution-clean-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-4.png rename to bobicons/graphics/technology/modules/pollution-clean-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-5.png b/bobicons/graphics/technology/modules/pollution-clean-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-5.png rename to bobicons/graphics/technology/modules/pollution-clean-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-6.png b/bobicons/graphics/technology/modules/pollution-clean-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-6.png rename to bobicons/graphics/technology/modules/pollution-clean-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-7.png b/bobicons/graphics/technology/modules/pollution-clean-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-7.png rename to bobicons/graphics/technology/modules/pollution-clean-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-8.png b/bobicons/graphics/technology/modules/pollution-clean-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-clean-module-8.png rename to bobicons/graphics/technology/modules/pollution-clean-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-1.png b/bobicons/graphics/technology/modules/pollution-create-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-1.png rename to bobicons/graphics/technology/modules/pollution-create-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-2.png b/bobicons/graphics/technology/modules/pollution-create-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-2.png rename to bobicons/graphics/technology/modules/pollution-create-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-3.png b/bobicons/graphics/technology/modules/pollution-create-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-3.png rename to bobicons/graphics/technology/modules/pollution-create-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-4.png b/bobicons/graphics/technology/modules/pollution-create-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-4.png rename to bobicons/graphics/technology/modules/pollution-create-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-5.png b/bobicons/graphics/technology/modules/pollution-create-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-5.png rename to bobicons/graphics/technology/modules/pollution-create-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-6.png b/bobicons/graphics/technology/modules/pollution-create-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-6.png rename to bobicons/graphics/technology/modules/pollution-create-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-7.png b/bobicons/graphics/technology/modules/pollution-create-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-7.png rename to bobicons/graphics/technology/modules/pollution-create-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/pollution-create-module-8.png b/bobicons/graphics/technology/modules/pollution-create-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/pollution-create-module-8.png rename to bobicons/graphics/technology/modules/pollution-create-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-1.png b/bobicons/graphics/technology/modules/productivity-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-1.png rename to bobicons/graphics/technology/modules/productivity-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-2.png b/bobicons/graphics/technology/modules/productivity-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-2.png rename to bobicons/graphics/technology/modules/productivity-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-3.png b/bobicons/graphics/technology/modules/productivity-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-3.png rename to bobicons/graphics/technology/modules/productivity-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-4.png b/bobicons/graphics/technology/modules/productivity-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-4.png rename to bobicons/graphics/technology/modules/productivity-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-5.png b/bobicons/graphics/technology/modules/productivity-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-5.png rename to bobicons/graphics/technology/modules/productivity-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-6.png b/bobicons/graphics/technology/modules/productivity-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-6.png rename to bobicons/graphics/technology/modules/productivity-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-7.png b/bobicons/graphics/technology/modules/productivity-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-7.png rename to bobicons/graphics/technology/modules/productivity-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/productivity-module-8.png b/bobicons/graphics/technology/modules/productivity-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/productivity-module-8.png rename to bobicons/graphics/technology/modules/productivity-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-1.png b/bobicons/graphics/technology/modules/red-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-1.png rename to bobicons/graphics/technology/modules/red-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-2.png b/bobicons/graphics/technology/modules/red-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-2.png rename to bobicons/graphics/technology/modules/red-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-3.png b/bobicons/graphics/technology/modules/red-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-3.png rename to bobicons/graphics/technology/modules/red-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-4.png b/bobicons/graphics/technology/modules/red-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-4.png rename to bobicons/graphics/technology/modules/red-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-5.png b/bobicons/graphics/technology/modules/red-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-5.png rename to bobicons/graphics/technology/modules/red-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-6.png b/bobicons/graphics/technology/modules/red-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-6.png rename to bobicons/graphics/technology/modules/red-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-7.png b/bobicons/graphics/technology/modules/red-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-7.png rename to bobicons/graphics/technology/modules/red-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/red-module-8.png b/bobicons/graphics/technology/modules/red-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/red-module-8.png rename to bobicons/graphics/technology/modules/red-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-1.png b/bobicons/graphics/technology/modules/speed-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-1.png rename to bobicons/graphics/technology/modules/speed-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-2.png b/bobicons/graphics/technology/modules/speed-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-2.png rename to bobicons/graphics/technology/modules/speed-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-3.png b/bobicons/graphics/technology/modules/speed-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-3.png rename to bobicons/graphics/technology/modules/speed-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-4.png b/bobicons/graphics/technology/modules/speed-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-4.png rename to bobicons/graphics/technology/modules/speed-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-5.png b/bobicons/graphics/technology/modules/speed-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-5.png rename to bobicons/graphics/technology/modules/speed-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-6.png b/bobicons/graphics/technology/modules/speed-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-6.png rename to bobicons/graphics/technology/modules/speed-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-7.png b/bobicons/graphics/technology/modules/speed-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-7.png rename to bobicons/graphics/technology/modules/speed-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/speed-module-8.png b/bobicons/graphics/technology/modules/speed-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/speed-module-8.png rename to bobicons/graphics/technology/modules/speed-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-1.png b/bobicons/graphics/technology/modules/yellow-module-1.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-1.png rename to bobicons/graphics/technology/modules/yellow-module-1.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-2.png b/bobicons/graphics/technology/modules/yellow-module-2.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-2.png rename to bobicons/graphics/technology/modules/yellow-module-2.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-3.png b/bobicons/graphics/technology/modules/yellow-module-3.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-3.png rename to bobicons/graphics/technology/modules/yellow-module-3.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-4.png b/bobicons/graphics/technology/modules/yellow-module-4.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-4.png rename to bobicons/graphics/technology/modules/yellow-module-4.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-5.png b/bobicons/graphics/technology/modules/yellow-module-5.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-5.png rename to bobicons/graphics/technology/modules/yellow-module-5.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-6.png b/bobicons/graphics/technology/modules/yellow-module-6.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-6.png rename to bobicons/graphics/technology/modules/yellow-module-6.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-7.png b/bobicons/graphics/technology/modules/yellow-module-7.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-7.png rename to bobicons/graphics/technology/modules/yellow-module-7.png diff --git a/bobicons_1.1.2/graphics/technology/modules/yellow-module-8.png b/bobicons/graphics/technology/modules/yellow-module-8.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/modules/yellow-module-8.png rename to bobicons/graphics/technology/modules/yellow-module-8.png diff --git a/bobicons_1.1.2/graphics/technology/nickel-processing.png b/bobicons/graphics/technology/nickel-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/nickel-processing.png rename to bobicons/graphics/technology/nickel-processing.png diff --git a/bobicons_1.1.2/graphics/technology/nitinol-processing.png b/bobicons/graphics/technology/nitinol-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/nitinol-processing.png rename to bobicons/graphics/technology/nitinol-processing.png diff --git a/bobicons_1.1.2/graphics/technology/nitrogen-tech.png b/bobicons/graphics/technology/nitrogen-tech.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/nitrogen-tech.png rename to bobicons/graphics/technology/nitrogen-tech.png diff --git a/bobicons_1.1.2/graphics/technology/silicon-processing.png b/bobicons/graphics/technology/silicon-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/silicon-processing.png rename to bobicons/graphics/technology/silicon-processing.png diff --git a/bobicons_1.1.2/graphics/technology/sodium-processing.png b/bobicons/graphics/technology/sodium-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/sodium-processing.png rename to bobicons/graphics/technology/sodium-processing.png diff --git a/bobicons_1.1.2/graphics/technology/sulfur-tech.png b/bobicons/graphics/technology/sulfur-tech.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/sulfur-tech.png rename to bobicons/graphics/technology/sulfur-tech.png diff --git a/bobicons_1.1.2/graphics/technology/titanium-processing.png b/bobicons/graphics/technology/titanium-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/titanium-processing.png rename to bobicons/graphics/technology/titanium-processing.png diff --git a/bobicons_1.1.2/graphics/technology/tungsten-alloy-processing.png b/bobicons/graphics/technology/tungsten-alloy-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/tungsten-alloy-processing.png rename to bobicons/graphics/technology/tungsten-alloy-processing.png diff --git a/bobicons_1.1.2/graphics/technology/tungsten-processing.png b/bobicons/graphics/technology/tungsten-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/tungsten-processing.png rename to bobicons/graphics/technology/tungsten-processing.png diff --git a/bobicons_1.1.2/graphics/technology/zinc-processing.png b/bobicons/graphics/technology/zinc-processing.png similarity index 100% rename from bobicons_1.1.2/graphics/technology/zinc-processing.png rename to bobicons/graphics/technology/zinc-processing.png diff --git a/bobicons_1.1.2/grinding-128.png b/bobicons/grinding-128.png similarity index 100% rename from bobicons_1.1.2/grinding-128.png rename to bobicons/grinding-128.png diff --git a/bobicons_1.1.2/info.json b/bobicons/info.json similarity index 100% rename from bobicons_1.1.2/info.json rename to bobicons/info.json diff --git a/bobicons_1.1.2/new/advanced-electronics-3.png b/bobicons/new/advanced-electronics-3.png similarity index 100% rename from bobicons_1.1.2/new/advanced-electronics-3.png rename to bobicons/new/advanced-electronics-3.png diff --git a/bobicons_1.1.2/new/advanced-electronics-4.png b/bobicons/new/advanced-electronics-4.png similarity index 100% rename from bobicons_1.1.2/new/advanced-electronics-4.png rename to bobicons/new/advanced-electronics-4.png diff --git a/bobicons_1.1.2/new/aluminium-plate.png b/bobicons/new/aluminium-plate.png similarity index 100% rename from bobicons_1.1.2/new/aluminium-plate.png rename to bobicons/new/aluminium-plate.png diff --git a/bobicons_1.1.2/new/aluminium-processing.png b/bobicons/new/aluminium-processing.png similarity index 100% rename from bobicons_1.1.2/new/aluminium-processing.png rename to bobicons/new/aluminium-processing.png diff --git a/bobicons_1.1.2/new/assembling-machine-4.png b/bobicons/new/assembling-machine-4.png similarity index 100% rename from bobicons_1.1.2/new/assembling-machine-4.png rename to bobicons/new/assembling-machine-4.png diff --git a/bobicons_1.1.2/new/brass-gear-wheel.png b/bobicons/new/brass-gear-wheel.png similarity index 100% rename from bobicons_1.1.2/new/brass-gear-wheel.png rename to bobicons/new/brass-gear-wheel.png diff --git a/bobicons_1.1.2/new/chemical-processing-1.png b/bobicons/new/chemical-processing-1.png similarity index 100% rename from bobicons_1.1.2/new/chemical-processing-1.png rename to bobicons/new/chemical-processing-1.png diff --git a/bobicons_1.1.2/new/copper-cable.png b/bobicons/new/copper-cable.png similarity index 100% rename from bobicons_1.1.2/new/copper-cable.png rename to bobicons/new/copper-cable.png diff --git a/bobicons_1.1.2/new/cpu-1.png b/bobicons/new/cpu-1.png similarity index 100% rename from bobicons_1.1.2/new/cpu-1.png rename to bobicons/new/cpu-1.png diff --git a/bobicons_1.1.2/new/cpu-2.png b/bobicons/new/cpu-2.png similarity index 100% rename from bobicons_1.1.2/new/cpu-2.png rename to bobicons/new/cpu-2.png diff --git a/bobicons_1.1.2/new/electrum-plate.png b/bobicons/new/electrum-plate.png similarity index 100% rename from bobicons_1.1.2/new/electrum-plate.png rename to bobicons/new/electrum-plate.png diff --git a/bobicons_1.1.2/new/gilded-copper-cable.png b/bobicons/new/gilded-copper-cable.png similarity index 100% rename from bobicons_1.1.2/new/gilded-copper-cable.png rename to bobicons/new/gilded-copper-cable.png diff --git a/bobicons_1.1.2/new/gold-plate.png b/bobicons/new/gold-plate.png similarity index 100% rename from bobicons_1.1.2/new/gold-plate.png rename to bobicons/new/gold-plate.png diff --git a/bobicons_1.1.2/new/gold-plate1.png b/bobicons/new/gold-plate1.png similarity index 100% rename from bobicons_1.1.2/new/gold-plate1.png rename to bobicons/new/gold-plate1.png diff --git a/bobicons_1.1.2/new/lead-plate.png b/bobicons/new/lead-plate.png similarity index 100% rename from bobicons_1.1.2/new/lead-plate.png rename to bobicons/new/lead-plate.png diff --git a/bobicons_1.1.2/new/lead-processing.png b/bobicons/new/lead-processing.png similarity index 100% rename from bobicons_1.1.2/new/lead-processing.png rename to bobicons/new/lead-processing.png diff --git a/bobicons_1.1.2/new/lithium-plate.png b/bobicons/new/lithium-plate.png similarity index 100% rename from bobicons_1.1.2/new/lithium-plate.png rename to bobicons/new/lithium-plate.png diff --git a/bobicons_1.1.2/new/lithium-plate1.png b/bobicons/new/lithium-plate1.png similarity index 100% rename from bobicons_1.1.2/new/lithium-plate1.png rename to bobicons/new/lithium-plate1.png diff --git a/bobicons_1.1.2/new/locomotive-2.png b/bobicons/new/locomotive-2.png similarity index 100% rename from bobicons_1.1.2/new/locomotive-2.png rename to bobicons/new/locomotive-2.png diff --git a/bobicons_1.1.2/new/locomotive-3.png b/bobicons/new/locomotive-3.png similarity index 100% rename from bobicons_1.1.2/new/locomotive-3.png rename to bobicons/new/locomotive-3.png diff --git a/bobicons_1.1.2/new/modules/effectivity-processor-2-64.png b/bobicons/new/modules/effectivity-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/effectivity-processor-2-64.png rename to bobicons/new/modules/effectivity-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/effectivity-processor-3-64.png b/bobicons/new/modules/effectivity-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/effectivity-processor-3-64.png rename to bobicons/new/modules/effectivity-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/effectivity-processor-64.png b/bobicons/new/modules/effectivity-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/effectivity-processor-64.png rename to bobicons/new/modules/effectivity-processor-64.png diff --git a/bobicons_1.1.2/new/modules/module-processor-board-2-64.png b/bobicons/new/modules/module-processor-board-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/module-processor-board-2-64.png rename to bobicons/new/modules/module-processor-board-2-64.png diff --git a/bobicons_1.1.2/new/modules/module-processor-board-3-64.png b/bobicons/new/modules/module-processor-board-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/module-processor-board-3-64.png rename to bobicons/new/modules/module-processor-board-3-64.png diff --git a/bobicons_1.1.2/new/modules/module-processor-board-64.png b/bobicons/new/modules/module-processor-board-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/module-processor-board-64.png rename to bobicons/new/modules/module-processor-board-64.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor (2).png b/bobicons/new/modules/old/effectivity-processor (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor (2).png rename to bobicons/new/modules/old/effectivity-processor (2).png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-2 (2).png b/bobicons/new/modules/old/effectivity-processor-2 (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-2 (2).png rename to bobicons/new/modules/old/effectivity-processor-2 (2).png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-2-64.png b/bobicons/new/modules/old/effectivity-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-2-64.png rename to bobicons/new/modules/old/effectivity-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-2.png b/bobicons/new/modules/old/effectivity-processor-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-2.png rename to bobicons/new/modules/old/effectivity-processor-2.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-3 (2).png b/bobicons/new/modules/old/effectivity-processor-3 (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-3 (2).png rename to bobicons/new/modules/old/effectivity-processor-3 (2).png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-3-64.png b/bobicons/new/modules/old/effectivity-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-3-64.png rename to bobicons/new/modules/old/effectivity-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-3.png b/bobicons/new/modules/old/effectivity-processor-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-3.png rename to bobicons/new/modules/old/effectivity-processor-3.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor-64.png b/bobicons/new/modules/old/effectivity-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor-64.png rename to bobicons/new/modules/old/effectivity-processor-64.png diff --git a/bobicons_1.1.2/new/modules/old/effectivity-processor.png b/bobicons/new/modules/old/effectivity-processor.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/effectivity-processor.png rename to bobicons/new/modules/old/effectivity-processor.png diff --git a/bobicons_1.1.2/new/modules/old/module-processor-board-2.png b/bobicons/new/modules/old/module-processor-board-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/module-processor-board-2.png rename to bobicons/new/modules/old/module-processor-board-2.png diff --git a/bobicons_1.1.2/new/modules/old/module-processor-board-3.png b/bobicons/new/modules/old/module-processor-board-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/module-processor-board-3.png rename to bobicons/new/modules/old/module-processor-board-3.png diff --git a/bobicons_1.1.2/new/modules/old/module-processor-board.png b/bobicons/new/modules/old/module-processor-board.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/module-processor-board.png rename to bobicons/new/modules/old/module-processor-board.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-clean-processor-2.png b/bobicons/new/modules/old/pollution-clean-processor-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-clean-processor-2.png rename to bobicons/new/modules/old/pollution-clean-processor-2.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-clean-processor-3.png b/bobicons/new/modules/old/pollution-clean-processor-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-clean-processor-3.png rename to bobicons/new/modules/old/pollution-clean-processor-3.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-clean-processor.png b/bobicons/new/modules/old/pollution-clean-processor.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-clean-processor.png rename to bobicons/new/modules/old/pollution-clean-processor.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-create-processor-2.png b/bobicons/new/modules/old/pollution-create-processor-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-create-processor-2.png rename to bobicons/new/modules/old/pollution-create-processor-2.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-create-processor-3.png b/bobicons/new/modules/old/pollution-create-processor-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-create-processor-3.png rename to bobicons/new/modules/old/pollution-create-processor-3.png diff --git a/bobicons_1.1.2/new/modules/old/pollution-create-processor.png b/bobicons/new/modules/old/pollution-create-processor.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/pollution-create-processor.png rename to bobicons/new/modules/old/pollution-create-processor.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor (2).png b/bobicons/new/modules/old/productivity-processor (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor (2).png rename to bobicons/new/modules/old/productivity-processor (2).png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-2 (2).png b/bobicons/new/modules/old/productivity-processor-2 (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-2 (2).png rename to bobicons/new/modules/old/productivity-processor-2 (2).png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-2-64.png b/bobicons/new/modules/old/productivity-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-2-64.png rename to bobicons/new/modules/old/productivity-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-2.png b/bobicons/new/modules/old/productivity-processor-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-2.png rename to bobicons/new/modules/old/productivity-processor-2.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-3 (2).png b/bobicons/new/modules/old/productivity-processor-3 (2).png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-3 (2).png rename to bobicons/new/modules/old/productivity-processor-3 (2).png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-3-64.png b/bobicons/new/modules/old/productivity-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-3-64.png rename to bobicons/new/modules/old/productivity-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-3.png b/bobicons/new/modules/old/productivity-processor-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-3.png rename to bobicons/new/modules/old/productivity-processor-3.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor-64.png b/bobicons/new/modules/old/productivity-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor-64.png rename to bobicons/new/modules/old/productivity-processor-64.png diff --git a/bobicons_1.1.2/new/modules/old/productivity-processor.png b/bobicons/new/modules/old/productivity-processor.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/productivity-processor.png rename to bobicons/new/modules/old/productivity-processor.png diff --git a/bobicons_1.1.2/new/modules/old/speed-processor-2.png b/bobicons/new/modules/old/speed-processor-2.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/speed-processor-2.png rename to bobicons/new/modules/old/speed-processor-2.png diff --git a/bobicons_1.1.2/new/modules/old/speed-processor-3.png b/bobicons/new/modules/old/speed-processor-3.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/speed-processor-3.png rename to bobicons/new/modules/old/speed-processor-3.png diff --git a/bobicons_1.1.2/new/modules/old/speed-processor.png b/bobicons/new/modules/old/speed-processor.png similarity index 100% rename from bobicons_1.1.2/new/modules/old/speed-processor.png rename to bobicons/new/modules/old/speed-processor.png diff --git a/bobicons_1.1.2/new/modules/pollution-clean-processor-2-64.png b/bobicons/new/modules/pollution-clean-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-clean-processor-2-64.png rename to bobicons/new/modules/pollution-clean-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/pollution-clean-processor-3-64.png b/bobicons/new/modules/pollution-clean-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-clean-processor-3-64.png rename to bobicons/new/modules/pollution-clean-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/pollution-clean-processor-64.png b/bobicons/new/modules/pollution-clean-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-clean-processor-64.png rename to bobicons/new/modules/pollution-clean-processor-64.png diff --git a/bobicons_1.1.2/new/modules/pollution-create-processor-2-64.png b/bobicons/new/modules/pollution-create-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-create-processor-2-64.png rename to bobicons/new/modules/pollution-create-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/pollution-create-processor-3-64.png b/bobicons/new/modules/pollution-create-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-create-processor-3-64.png rename to bobicons/new/modules/pollution-create-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/pollution-create-processor-64.png b/bobicons/new/modules/pollution-create-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/pollution-create-processor-64.png rename to bobicons/new/modules/pollution-create-processor-64.png diff --git a/bobicons_1.1.2/new/modules/productivity-processor-2-64.png b/bobicons/new/modules/productivity-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/productivity-processor-2-64.png rename to bobicons/new/modules/productivity-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/productivity-processor-3-64.png b/bobicons/new/modules/productivity-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/productivity-processor-3-64.png rename to bobicons/new/modules/productivity-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/productivity-processor-64.png b/bobicons/new/modules/productivity-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/productivity-processor-64.png rename to bobicons/new/modules/productivity-processor-64.png diff --git a/bobicons_1.1.2/new/modules/speed-processor-2-64.png b/bobicons/new/modules/speed-processor-2-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/speed-processor-2-64.png rename to bobicons/new/modules/speed-processor-2-64.png diff --git a/bobicons_1.1.2/new/modules/speed-processor-3-64.png b/bobicons/new/modules/speed-processor-3-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/speed-processor-3-64.png rename to bobicons/new/modules/speed-processor-3-64.png diff --git a/bobicons_1.1.2/new/modules/speed-processor-64.png b/bobicons/new/modules/speed-processor-64.png similarity index 100% rename from bobicons_1.1.2/new/modules/speed-processor-64.png rename to bobicons/new/modules/speed-processor-64.png diff --git a/bobicons_1.1.2/new/nickel-processing.png b/bobicons/new/nickel-processing.png similarity index 100% rename from bobicons_1.1.2/new/nickel-processing.png rename to bobicons/new/nickel-processing.png diff --git a/bobicons_1.1.2/new/nitinol-gear-wheel.png b/bobicons/new/nitinol-gear-wheel.png similarity index 100% rename from bobicons_1.1.2/new/nitinol-gear-wheel.png rename to bobicons/new/nitinol-gear-wheel.png diff --git a/bobicons_1.1.2/new/nitinol-plate.png b/bobicons/new/nitinol-plate.png similarity index 100% rename from bobicons_1.1.2/new/nitinol-plate.png rename to bobicons/new/nitinol-plate.png diff --git a/bobicons_1.1.2/new/pipe-to-ground.png b/bobicons/new/pipe-to-ground.png similarity index 100% rename from bobicons_1.1.2/new/pipe-to-ground.png rename to bobicons/new/pipe-to-ground.png diff --git a/bobicons_1.1.2/new/quartz.png b/bobicons/new/quartz.png similarity index 100% rename from bobicons_1.1.2/new/quartz.png rename to bobicons/new/quartz.png diff --git a/bobicons_1.1.2/new/science-pack-2.png b/bobicons/new/science-pack-2.png similarity index 100% rename from bobicons_1.1.2/new/science-pack-2.png rename to bobicons/new/science-pack-2.png diff --git a/bobicons_1.1.2/new/silicon-wafer.png b/bobicons/new/silicon-wafer.png similarity index 100% rename from bobicons_1.1.2/new/silicon-wafer.png rename to bobicons/new/silicon-wafer.png diff --git a/bobicons_1.1.2/new/silicon.png b/bobicons/new/silicon.png similarity index 100% rename from bobicons_1.1.2/new/silicon.png rename to bobicons/new/silicon.png diff --git a/bobicons_1.1.2/new/solar-cell.png b/bobicons/new/solar-cell.png similarity index 100% rename from bobicons_1.1.2/new/solar-cell.png rename to bobicons/new/solar-cell.png diff --git a/bobicons_1.1.2/new/solder-plate.png b/bobicons/new/solder-plate.png similarity index 100% rename from bobicons_1.1.2/new/solder-plate.png rename to bobicons/new/solder-plate.png diff --git a/bobicons_1.1.2/new/steel-gear.png b/bobicons/new/steel-gear.png similarity index 100% rename from bobicons_1.1.2/new/steel-gear.png rename to bobicons/new/steel-gear.png diff --git a/bobicons_1.1.2/new/tech1.png b/bobicons/new/tech1.png similarity index 100% rename from bobicons_1.1.2/new/tech1.png rename to bobicons/new/tech1.png diff --git a/bobicons_1.1.2/new/tech2.png b/bobicons/new/tech2.png similarity index 100% rename from bobicons_1.1.2/new/tech2.png rename to bobicons/new/tech2.png diff --git a/bobicons_1.1.2/new/tech3.png b/bobicons/new/tech3.png similarity index 100% rename from bobicons_1.1.2/new/tech3.png rename to bobicons/new/tech3.png diff --git a/bobicons_1.1.2/new/tin-plate.png b/bobicons/new/tin-plate.png similarity index 100% rename from bobicons_1.1.2/new/tin-plate.png rename to bobicons/new/tin-plate.png diff --git a/bobicons_1.1.2/new/titan-gear.png b/bobicons/new/titan-gear.png similarity index 100% rename from bobicons_1.1.2/new/titan-gear.png rename to bobicons/new/titan-gear.png diff --git a/bobicons_1.1.2/new/titan-processing.png b/bobicons/new/titan-processing.png similarity index 100% rename from bobicons_1.1.2/new/titan-processing.png rename to bobicons/new/titan-processing.png diff --git a/bobicons_1.1.2/new/titanium-bearing.png b/bobicons/new/titanium-bearing.png similarity index 100% rename from bobicons_1.1.2/new/titanium-bearing.png rename to bobicons/new/titanium-bearing.png diff --git a/bobicons_1.1.2/new/titanium-gear-wheel.png b/bobicons/new/titanium-gear-wheel.png similarity index 100% rename from bobicons_1.1.2/new/titanium-gear-wheel.png rename to bobicons/new/titanium-gear-wheel.png diff --git a/bobicons_1.1.2/new/titanium-plate.png b/bobicons/new/titanium-plate.png similarity index 100% rename from bobicons_1.1.2/new/titanium-plate.png rename to bobicons/new/titanium-plate.png diff --git a/bobicons_1.1.2/new/titanium-processing.png b/bobicons/new/titanium-processing.png similarity index 100% rename from bobicons_1.1.2/new/titanium-processing.png rename to bobicons/new/titanium-processing.png diff --git a/bobicons_1.1.2/new/tungsten-carbide-plate.png b/bobicons/new/tungsten-carbide-plate.png similarity index 100% rename from bobicons_1.1.2/new/tungsten-carbide-plate.png rename to bobicons/new/tungsten-carbide-plate.png diff --git a/bobicons_1.1.2/new/tungsten-gear-wheel.png b/bobicons/new/tungsten-gear-wheel.png similarity index 100% rename from bobicons_1.1.2/new/tungsten-gear-wheel.png rename to bobicons/new/tungsten-gear-wheel.png diff --git a/bobicons_1.1.2/new/xeno-gear.png b/bobicons/new/xeno-gear.png similarity index 100% rename from bobicons_1.1.2/new/xeno-gear.png rename to bobicons/new/xeno-gear.png diff --git a/bobicons_1.1.2/new/xeno-plate.png b/bobicons/new/xeno-plate.png similarity index 100% rename from bobicons_1.1.2/new/xeno-plate.png rename to bobicons/new/xeno-plate.png diff --git a/bobicons_1.1.2/new/xeno-processing.png b/bobicons/new/xeno-processing.png similarity index 100% rename from bobicons_1.1.2/new/xeno-processing.png rename to bobicons/new/xeno-processing.png diff --git a/bobicons_1.1.2/new/xeno-titan-gear.png b/bobicons/new/xeno-titan-gear.png similarity index 100% rename from bobicons_1.1.2/new/xeno-titan-gear.png rename to bobicons/new/xeno-titan-gear.png diff --git a/bobicons_1.1.2/new/xeno-titan-plate.png b/bobicons/new/xeno-titan-plate.png similarity index 100% rename from bobicons_1.1.2/new/xeno-titan-plate.png rename to bobicons/new/xeno-titan-plate.png diff --git a/bobicons_1.1.2/new/xeno-titan-processing.png b/bobicons/new/xeno-titan-processing.png similarity index 100% rename from bobicons_1.1.2/new/xeno-titan-processing.png rename to bobicons/new/xeno-titan-processing.png diff --git a/bobicons_1.1.2/new/zinc-plate.png b/bobicons/new/zinc-plate.png similarity index 100% rename from bobicons_1.1.2/new/zinc-plate.png rename to bobicons/new/zinc-plate.png diff --git a/bobicons_1.1.2/new/zinc-processing.png b/bobicons/new/zinc-processing.png similarity index 100% rename from bobicons_1.1.2/new/zinc-processing.png rename to bobicons/new/zinc-processing.png diff --git a/bobicons_1.1.2/polishing-128.png b/bobicons/polishing-128.png similarity index 100% rename from bobicons_1.1.2/polishing-128.png rename to bobicons/polishing-128.png diff --git a/bobicons_1.1.2/prototypes/items-icons.lua b/bobicons/prototypes/items-icons.lua similarity index 100% rename from bobicons_1.1.2/prototypes/items-icons.lua rename to bobicons/prototypes/items-icons.lua diff --git a/bobicons_1.1.2/prototypes/technology-icons.lua b/bobicons/prototypes/technology-icons.lua similarity index 100% rename from bobicons_1.1.2/prototypes/technology-icons.lua rename to bobicons/prototypes/technology-icons.lua diff --git a/bobicons_1.1.2/prototypes/update-to-hr.lua b/bobicons/prototypes/update-to-hr.lua similarity index 100% rename from bobicons_1.1.2/prototypes/update-to-hr.lua rename to bobicons/prototypes/update-to-hr.lua diff --git a/bobicons_1.1.2/repair-pack-120.png b/bobicons/repair-pack-120.png similarity index 100% rename from bobicons_1.1.2/repair-pack-120.png rename to bobicons/repair-pack-120.png diff --git a/bobicons_1.1.2/sulfur-processing.png b/bobicons/sulfur-processing.png similarity index 100% rename from bobicons_1.1.2/sulfur-processing.png rename to bobicons/sulfur-processing.png diff --git a/bobicons_1.1.2/tech_alpha/config-overrides.lua.txt b/bobicons/tech_alpha/config-overrides.lua.txt similarity index 100% rename from bobicons_1.1.2/tech_alpha/config-overrides.lua.txt rename to bobicons/tech_alpha/config-overrides.lua.txt diff --git a/bobicons_1.1.2/thumbnail.png b/bobicons/thumbnail.png similarity index 100% rename from bobicons_1.1.2/thumbnail.png rename to bobicons/thumbnail.png diff --git a/bobicons_1.1.2/titanium-sponge-128.png b/bobicons/titanium-sponge-128.png similarity index 100% rename from bobicons_1.1.2/titanium-sponge-128.png rename to bobicons/titanium-sponge-128.png diff --git a/bobicons_1.1.2/turbo-splitter-128.png b/bobicons/turbo-splitter-128.png similarity index 100% rename from bobicons_1.1.2/turbo-splitter-128.png rename to bobicons/turbo-splitter-128.png diff --git a/bobicons_1.1.2/ultra-splitter-128.png b/bobicons/ultra-splitter-128.png similarity index 100% rename from bobicons_1.1.2/ultra-splitter-128.png rename to bobicons/ultra-splitter-128.png diff --git a/bobicons_1.1.2/zirconium-sponge-128.png b/bobicons/zirconium-sponge-128.png similarity index 100% rename from bobicons_1.1.2/zirconium-sponge-128.png rename to bobicons/zirconium-sponge-128.png diff --git a/bobinserters/changelog.txt b/bobinserters/changelog.txt new file mode 100644 index 00000000..3233393d --- /dev/null +++ b/bobinserters/changelog.txt @@ -0,0 +1,220 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 22. 12. 2023 + Bugfixes: + - Fixed inserter configuration still showing when disabled #55 + Changes: + - Added support for "slim" inserters (arrow-inserter, Kux-SlimInserters and similar) #126 + - Added Russian locale (thanks Eldrinn-Elantey!) #147 +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 02. 01. 2023 + Bugfixes: + - Fixed mod compatibility issue related to long inserter fast replaceable group #105 +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 01. 01. 2023 + Bugfixes: + - Fixed destroying root GUI element error #34 + - Fixed mod compatibility issue with upgradable Long handed inserters #41 + - Fixed compatibility with non adjustable inserters #101 + Changes: + - Moved Long inserters 2 to blue science #51 + - Add Long inserters 1 setting #25 +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 06. 06. 2022 + Bugfixes: + - Fixed error that could occur when opening inserter gui #6 + - Fixed error that could occur with Editor Extensions #21 + - Fixed minor typo in setting description #26 + Changes: + - Allow long handed inserter to fast replace other inserter types #8 + - Tidied up technology prerequisites #12 + - Add setting to remove configuration button from top left #26 +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 25. 11. 2020 + Info: + - Updated to work with Factorio 1.1 + Changes: + - The Inserter customisation window now docks with the normal inserter window when you click on an inserter. You can choose which side in per player settings (Off is also an option) +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 13. 10. 2020 + Bugfixes: + - Fixed minor issue where offset could be lost when rotating drop position. (This includes pre-place options with a drop position not in the vertical center line) +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 17. 08. 2020 + Info: + - Updated to 1.0 with no changes +--------------------------------------------------------------------------------------------------- +Version: 0.18.4 +Date: 07. 06. 2020 + Changes: + - Updated header/button filler styles + - GUI Style update for 0.18.27 + - Added inserter preview window to the center GUI. + - Updated locale method to display inserter name correctly. + - Updated Locale entries to refer to the GUIs as Windows. + - Internal code restructure to make things easier to read. + Bugfixes: + - Fixed issue where the drop offset wouldn't be calculated correctly when using using the top menu in inserter configuration mode to place an inserter before researching near inserters. + Features: + - Added Drop position rotation key combination CTRL + Shift + R as default. (Made possible by the internal restructure) +--------------------------------------------------------------------------------------------------- +Version: 0.18.3 +Date: 30. 04. 2020 + Bugfixes: + - Fixed Factorio 0.18.21 start-up crash +--------------------------------------------------------------------------------------------------- +Version: 0.18.2 +Date: 27. 04. 2020 + Bugfixes: + - Fixed issue where hand overrides wouldn't be applied to the placed inserter if it was your last inserter (Hand became empty by placing it) +--------------------------------------------------------------------------------------------------- +Version: 0.18.1 +Date: 12. 03. 2020 + Changes: + - Updated the inserter hand position overrides to explicitly check for holding the item (or ghost) of the inserter being placed. (Still messes up if you press undo while holding the restored entity) +--------------------------------------------------------------------------------------------------- +Version: 0.18.0 +Date: 23. 01. 2020 + Info: + - Updated to work with Factorio 0.18 + Features: + - Added an event when inserter positions are changed, detailed here: https://forums.factorio.com/viewtopic.php?p=474709#p474709 +--------------------------------------------------------------------------------------------------- +Version: 0.17.10 +Date: 08. 08. 2019 + Features: + - The Center screen GUI is now movable. Requires Factorio 0.17.59. +--------------------------------------------------------------------------------------------------- +Version: 0.17.9 +Date: 15. 07. 2019 + Bugfixes: + - Fixed crash in even more GUI open/close situations. +--------------------------------------------------------------------------------------------------- +Version: 0.17.8 +Date: 15. 07. 2019 + Bugfixes: + - Fixed crash in certain GUI open/close situations. + Changes: + - Minor GUI update. +--------------------------------------------------------------------------------------------------- +Version: 0.17.7 +Date: 11. 07. 2019 + Changes: + - GUI style update to 0.17 standards (and HR too) + Bugfixes: + - Fixed GUI close event. (should be able to once again close the inserter GUI by pressing E or ESC) +--------------------------------------------------------------------------------------------------- +Version: 0.17.6 +Date: 03. 07. 2019 + Bugfixes: + - Minor change to improve compatabillity with miniloaders. +--------------------------------------------------------------------------------------------------- +Version: 0.17.5 +Date: 23. 04. 2019 + Bugfixes: + - Fixed some minor GUI errors that could cause a crash in specific situations. +--------------------------------------------------------------------------------------------------- +Version: 0.17.4 +Date: 22. 04. 2019 + Features: + - Removed the option, the GUI now just opens with Shift + E in the center and with the main GUI on the left. +--------------------------------------------------------------------------------------------------- +Version: 0.17.3 +Date: 22. 03. 2019 + Features: + - Added an option to choose if the Inserter configuration GUI opens with Shift + E as of 0.17.1 and older, or with the main GUI as of 0.17.2. Default will be old method. +--------------------------------------------------------------------------------------------------- +Version: 0.17.2 +Date: 21. 03. 2019 + Changes: + - GUI opens on left when you left click an inserter, opening together with base game inserter GUI instead of point to it and press Shift + E +--------------------------------------------------------------------------------------------------- +Version: 0.17.1 +Date: 26. 02. 2019 + Bugfixes: + - Fixed game breaking error when placing with a ghost inserter in hand. +--------------------------------------------------------------------------------------------------- +Version: 0.17.0 +Date: 26. 02. 2019 + Info: + - Updated to work with Factorio 0.17 without any changes +--------------------------------------------------------------------------------------------------- +Version: 0.16.8 +Date: 12. 04. 2018 + Changes: + - Changed technology unlocks to the following: + - Logistics -> Near/Long + - Logistics 2 -> More + - Logistics 3 -> Long2/More2 + Features: + - added remote.call("bobinserters", "blacklist_inserter", inserter_name) to prevent inserter configuration from being able to configure this inserter + - added remote.call("bobinserters", "blacklist_inserters", table_of_inserter_names) same as above for multiple entries at once. +--------------------------------------------------------------------------------------------------- +Version: 0.16.7 +Date: 25. 03. 2018 + Bugfixes: + - Added a check to not apply an inserter over-ride if an entity is revived. +--------------------------------------------------------------------------------------------------- +Version: 0.16.6 +Date: 11. 03. 2018 + Changes: + - Changed hotkey defaults: + - Pickup range (SHIFT + P) changes pickup tile range distance. + - Drop range (SHIFT + O) changes drop tile range distance. + - Drop offset (near) (SHIFT + N) changes drop tile offset distance. + - Long range (SHIFT + L) changes both the pickup and drop tile distance to toggle long handed inserter mode. +--------------------------------------------------------------------------------------------------- +Version: 0.16.5 +Date: 03. 02. 2018 + Changes: + - Changed the top-bar button to use the mod-gui standard. +--------------------------------------------------------------------------------------------------- +Version: 0.16.4 +Date: 21. 01. 2018 + Bugfixes: + - Fixed Inserter pre-place GUI not using the right offset location if near isn't researched. +--------------------------------------------------------------------------------------------------- +Version: 0.16.3 +Date: 01. 01. 2018 + Bugfixes: + - Added an extra check to avoid possible crashes in on_gui_checked_state_changed event +--------------------------------------------------------------------------------------------------- +Version: 0.16.2 +Date: 28. 12. 2017 + Changes: + - Added GUI locale entries from Logistics mod. + - Added support for close button to close the GUI +--------------------------------------------------------------------------------------------------- +Version: 0.16.1 +Date: 20. 12. 2017 + Bugfixes: + - Added missing function set_range + - Corrected an offset constant reference to bobmods.inserters.offset +--------------------------------------------------------------------------------------------------- +Version: 0.16.0 +Date: 19. 12. 2017 + Changes: + - replace colspan with column_count + - removed style = "button_style" from the okay button (it's the default, but for some reason setting it manually caused an error) + Features: + - Added pre-place button from Logistics mod. +--------------------------------------------------------------------------------------------------- +Version: 0.15.1 +Date: 01. 06. 2017 + Changes: + - Change rotate default from SHIFT + R to CTRL + R as the former is used for reverse rotate now + Bugfixes: + - Add fix for Factorio version 0.15.17 + Features: + - Added config options to turn off long2 and more2 research. +--------------------------------------------------------------------------------------------------- +Version: 0.15.0 +Date: 25. 04. 2017 + Info: + - Updated to work with Factorio 0.15 without any changes diff --git a/bobinserters/control.lua b/bobinserters/control.lua new file mode 100644 index 00000000..dd163300 --- /dev/null +++ b/bobinserters/control.lua @@ -0,0 +1,2055 @@ +local mod_gui = require("mod-gui") + +function gui_add_title(gui, title, button_name, drag_target) + gui.add({ type = "flow", name = "title_flow" }) + gui.title_flow.add({ type = "label", name = "title", style = "frame_title", caption = title }) + gui.title_flow.add({ type = "empty-widget", name = "filler", style = "bob_draggable_header" }) + gui.title_flow.add({ + type = "sprite-button", + name = button_name, + style = "frame_action_button", + sprite = "utility/close_white", + }) + if drag_target then + gui.title_flow.title.drag_target = gui + gui.title_flow.filler.drag_target = gui + end +end + +if not bobmods then + bobmods = {} +end +if not bobmods.inserters then + bobmods.inserters = {} +end +if not bobmods.logistics then + bobmods.logistics = {} +end +if not bobmods.logistics.inserters then + bobmods.logistics.inserters = {} +end +if not bobmods.math then + bobmods.math = {} +end + +function bobmods.math.mod(number, div) + if number < 0 then + local newnumber = 0 - number + local mod = newnumber % div + return 0 - mod + else + return number % div + end +end + +function bobmods.math.floor(number) + local num + if number < 0 then + num = number - 0.1 + else + num = number + 0.1 + end + return math.floor(num - bobmods.math.mod(num, 1)) +end + +function bobmods.math.round(number) + local num + if number < 0 then + num = number - 0.5 + else + num = number + 0.5 + end + return math.floor(num - bobmods.math.mod(num, 1)) +end + +function bobmods.math.offset(number) + local num = bobmods.math.mod(number, 1) + if num < 0 then + if num > -0.5 then + return num + else + return num + 1 + end + else + if num < 0.5 then + return num + else + return num - 1 + end + end +end + +bobmods.inserters.long_technology = "long-inserters-1" +bobmods.inserters.long2_technology = "long-inserters-2" +bobmods.inserters.near_technology = "near-inserters" +bobmods.inserters.more_technology = "more-inserters-1" +bobmods.inserters.more2_technology = "more-inserters-2" +bobmods.inserters.offset = 0.2 +changed_position_event = script.generate_event_name() + +bobmods.inserters.range1_4way = { + table = { + { x = 0, y = -1 }, + { x = 1, y = 0 }, + { x = 0, y = 1 }, + { x = -1, y = 0 }, + }, + steps = 4, +} + +bobmods.inserters.range1_8way = { + table = { + { x = 0, y = -1 }, + { x = 1, y = -1 }, + { x = 1, y = 0 }, + { x = 1, y = 1 }, + { x = 0, y = 1 }, + { x = -1, y = 1 }, + { x = -1, y = 0 }, + { x = -1, y = -1 }, + }, + steps = 8, +} + +bobmods.inserters.range2_4way = { + table = { + { x = 0, y = -2 }, + { x = 2, y = 0 }, + { x = 0, y = 2 }, + { x = -2, y = 0 }, + }, + steps = 4, +} + +bobmods.inserters.range2_8way = { + table = { + { x = 0, y = -2 }, + { x = 2, y = -2 }, + { x = 2, y = 0 }, + { x = 2, y = 2 }, + { x = 0, y = 2 }, + { x = -2, y = 2 }, + { x = -2, y = 0 }, + { x = -2, y = -2 }, + }, + steps = 8, +} + +bobmods.inserters.range2_16way = { + table = { + { x = 0, y = -2 }, + { x = 1, y = -2 }, + { x = 2, y = -2 }, + { x = 2, y = -1 }, + { x = 2, y = 0 }, + { x = 2, y = 1 }, + { x = 2, y = 2 }, + { x = 1, y = 2 }, + { x = 0, y = 2 }, + { x = -1, y = 2 }, + { x = -2, y = 2 }, + { x = -2, y = 1 }, + { x = -2, y = 0 }, + { x = -2, y = -1 }, + { x = -2, y = -2 }, + { x = -1, y = -2 }, + }, + steps = 16, +} + +bobmods.inserters.range3_4way = { + table = { + { x = 0, y = -3 }, + { x = 3, y = 0 }, + { x = 0, y = 3 }, + { x = -3, y = 0 }, + }, + steps = 4, +} + +bobmods.inserters.range3_8way = { + table = { + { x = 0, y = -3 }, + { x = 3, y = -3 }, + { x = 3, y = 0 }, + { x = 3, y = 3 }, + { x = 0, y = 3 }, + { x = -3, y = 3 }, + { x = -3, y = 0 }, + { x = -3, y = -3 }, + }, + steps = 8, +} + +bobmods.inserters.range3_24way = { + table = { + { x = 0, y = -3 }, + { x = 1, y = -3 }, + { x = 2, y = -3 }, + { x = 3, y = -3 }, + { x = 3, y = -2 }, + { x = 3, y = -1 }, + { x = 3, y = 0 }, + { x = 3, y = 1 }, + { x = 3, y = 2 }, + { x = 3, y = 3 }, + { x = 2, y = 3 }, + { x = 1, y = 3 }, + { x = 0, y = 3 }, + { x = -1, y = 3 }, + { x = -2, y = 3 }, + { x = -3, y = 3 }, + { x = -3, y = 2 }, + { x = -3, y = 1 }, + { x = -3, y = 0 }, + { x = -3, y = -1 }, + { x = -3, y = -2 }, + { x = -3, y = -3 }, + { x = -2, y = -3 }, + { x = -1, y = -3 }, + }, + steps = 24, +} + +bobmods.inserters.positions = { + { x = -2, y = -2 }, + { x = -1, y = -2 }, + { x = 0, y = -2 }, + { x = 1, y = -2 }, + { x = 2, y = -2 }, + + { x = -2, y = -1 }, + { x = -1, y = -1 }, + { x = 0, y = -1 }, + { x = 1, y = -1 }, + { x = 2, y = -1 }, + + { x = -2, y = 0 }, + { x = -1, y = 0 }, + { x = 0, y = 0 }, + { x = 1, y = 0 }, + { x = 2, y = 0 }, + + { x = -2, y = 1 }, + { x = -1, y = 1 }, + { x = 0, y = 1 }, + { x = 1, y = 1 }, + { x = 2, y = 1 }, + + { x = -2, y = 2 }, + { x = -1, y = 2 }, + { x = 0, y = 2 }, + { x = 1, y = 2 }, + { x = 2, y = 2 }, + + { x = -3, y = -3 }, + { x = -2, y = -3 }, + { x = -1, y = -3 }, + { x = 0, y = -3 }, + { x = 1, y = -3 }, + { x = 2, y = -3 }, + { x = 3, y = -3 }, + + { x = -3, y = -2 }, + { x = 3, y = -2 }, + + { x = -3, y = -1 }, + { x = 3, y = -1 }, + + { x = -3, y = 0 }, + { x = 3, y = 0 }, + + { x = -3, y = 1 }, + { x = 3, y = 1 }, + + { x = -3, y = 2 }, + { x = 3, y = 2 }, + + { x = -3, y = 3 }, + { x = -2, y = 3 }, + { x = -1, y = 3 }, + { x = 0, y = 3 }, + { x = 1, y = 3 }, + { x = 2, y = 3 }, + { x = 3, y = 3 }, +} + +bobmods.inserters.offset_positions = { + { x = -bobmods.inserters.offset, y = -bobmods.inserters.offset }, + { x = 0, y = -bobmods.inserters.offset }, + { x = bobmods.inserters.offset, y = -bobmods.inserters.offset }, + + { x = -bobmods.inserters.offset, y = 0 }, + { x = 0, y = 0 }, + { x = bobmods.inserters.offset, y = 0 }, + + { x = -bobmods.inserters.offset, y = bobmods.inserters.offset }, + { x = 0, y = bobmods.inserters.offset }, + { x = bobmods.inserters.offset, y = bobmods.inserters.offset }, +} + +bobmods.logistics.inserters.range1 = { + pickup = { + { x = 0, y = -1 }, + { x = 1, y = 0 }, + { x = 0, y = 1 }, + { x = -1, y = 0 }, + }, + drop = { + { x = 0, y = 1 }, + { x = -1, y = 0 }, + { x = 0, y = -1 }, + { x = 1, y = 0 }, + }, +} + +bobmods.logistics.inserters.range2 = { + pickup = { + { x = 0, y = -2 }, + { x = 2, y = 0 }, + { x = 0, y = 2 }, + { x = -2, y = 0 }, + }, + drop = { + { x = 0, y = 2 }, + { x = -2, y = 0 }, + { x = 0, y = -2 }, + { x = 2, y = 0 }, + }, +} + +bobmods.logistics.inserters.offset_positions = { + near = { + { x = 0, y = -bobmods.inserters.offset }, + { x = bobmods.inserters.offset, y = 0 }, + { x = 0, y = bobmods.inserters.offset }, + { x = -bobmods.inserters.offset, y = 0 }, + }, + far = { + { x = 0, y = bobmods.inserters.offset }, + { x = -bobmods.inserters.offset, y = 0 }, + { x = 0, y = -bobmods.inserters.offset }, + { x = bobmods.inserters.offset, y = 0 }, + }, +} + +function bobmods.inserters.create_global_table_basic() + if not global then + global = {} + end + if not global.bobmods then + global.bobmods = {} + end + if not global.bobmods.inserters then + global.bobmods.inserters = {} + end + if not global.bobmods.inserters.blacklist then + global.bobmods.inserters.blacklist = {} + end +end + +function bobmods.inserters.create_global_table(player_index) + bobmods.inserters.create_global_table_basic() + if not global.bobmods.inserters[player_index] then + global.bobmods.inserters[player_index] = {} + end + + if not global.bobmods.logistics then + global.bobmods.logistics = {} + end + if not global.bobmods.logistics[player_index] then + global.bobmods.logistics[player_index] = {} + end + + if not global.bobmods.logistics[player_index].enabled then + global.bobmods.logistics[player_index].enabled = false + end + if not global.bobmods.logistics[player_index].long_in then + global.bobmods.logistics[player_index].long_in = false + end + if not global.bobmods.logistics[player_index].long_out then + global.bobmods.logistics[player_index].long_out = false + end + if not global.bobmods.logistics[player_index].near then + global.bobmods.logistics[player_index].near = false + end + if not global.bobmods.logistics[player_index].show then + global.bobmods.logistics[player_index].show = false + end + + if not global.bobmods.logistics[player_index].enabled2 then + global.bobmods.logistics[player_index].enabled2 = false + end + if not global.bobmods.logistics[player_index].pickup then + global.bobmods.logistics[player_index].pickup = 18 + end + if not global.bobmods.logistics[player_index].drop then + global.bobmods.logistics[player_index].drop = 8 + end + if not global.bobmods.logistics[player_index].offset then + global.bobmods.logistics[player_index].offset = 2 + end +end + +script.on_event("bob-inserter-pickup-rotate", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.rotate_pickup(entity, player) + end +end) + +script.on_event("bob-inserter-drop-rotate", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.rotate_drop(entity, player) + end +end) + +script.on_event("bob-inserter-pickup-range", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.pickup_range(entity, player) + end +end) + +script.on_event("bob-inserter-drop-range", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.drop_range(entity, player) + end +end) + +script.on_event("bob-inserter-long", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.long_range(entity, player) + end +end) + +script.on_event("bob-inserter-near", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + bobmods.inserters.near_range(entity, player) + end +end) + +script.on_event("bob-inserter-open-gui", function(event) + local player = game.players[event.player_index] + local entity = player.selected + if + entity + and entity.type == "inserter" + and player.can_reach_entity(entity) + and not global.bobmods.inserters.blacklist[entity.name] + then + global.bobmods.inserters[event.player_index].position = "center" + bobmods.inserters.open_gui(entity, player) + else + bobmods.inserters.delete_gui(event.player_index) + end +end) + +script.on_event(defines.events.on_gui_opened, function(event) + local player = game.players[event.player_index] + if event.gui_type == defines.gui_type.entity and event.entity and event.entity.type == "inserter" then + if + event.entity.prototype.allow_custom_vectors + and not global.bobmods.inserters.blacklist[event.entity.name] + and settings.get_player_settings(player)["bobmods-inserters-gui-position"].value ~= "off" + then + global.bobmods.inserters[event.player_index].position = "left" + bobmods.inserters.open_gui(event.entity, player) + else + bobmods.inserters.delete_gui(event.player_index) + end + end +end) + +script.on_event(defines.events.on_gui_closed, function(event) + -- this is checking for what GUI was just told to close. as we want to delete only when closing my GUI, or when closing the inserters GUI IF not opening mine. + if + global.bobmods.inserters[event.player_index].position == "center" + and event.gui_type == defines.gui_type.custom + and event.element + and event.element.valid --the GUI actually exists. + and event.element.name == "bob_inserter_gui" + then + bobmods.inserters.delete_gui(event.player_index) + end +end) + +script.on_event(defines.events.on_gui_checked_state_changed, function(event) + local player = game.players[event.player_index] + local entity = global.bobmods.inserters[event.player_index].entity + + if event.element.valid then + if event.element.name == "bob_logistics_inserter_enabled" then + global.bobmods.logistics[event.player_index].enabled = event.element.state + if event.element.state then + global.bobmods.logistics[event.player_index].enabled2 = false + end + bobmods.logistics.create_gui(event.player_index) + elseif event.element.name == "bob_logistics_inserter_long_in" then + global.bobmods.logistics[event.player_index].long_in = event.element.state + elseif event.element.name == "bob_logistics_inserter_long_out" then + global.bobmods.logistics[event.player_index].long_out = event.element.state + elseif event.element.name == "bob_logistics_inserter_near" then + global.bobmods.logistics[event.player_index].near = event.element.state + elseif event.element.name == "bob_logistics_inserter_enabled2" then + global.bobmods.logistics[event.player_index].enabled2 = event.element.state + if event.element.state then + global.bobmods.logistics[event.player_index].enabled = false + end + bobmods.logistics.create_gui(event.player_index) + elseif string.sub(event.element.name, 1, 6) == "button" then + local i = string.gsub(event.element.name, "button", "") + 0 + + if event.element.parent.name == "bob_logistics_pickup" then + remote.call("bobinserters", "draw_button_position_check", { gui = event.element.parent, position = i }) + global.bobmods.logistics[event.player_index].pickup = i + elseif event.element.parent.name == "bob_logistics_drop" then + remote.call("bobinserters", "draw_button_position_check", { gui = event.element.parent, position = i }) + global.bobmods.logistics[event.player_index].drop = i + elseif event.element.parent.name == "bob_logistics_offset" then + remote.call("bobinserters", "draw_button_offset_check", { gui = event.element.parent, position = i }) + global.bobmods.logistics[event.player_index].offset = i + elseif entity and entity.valid and player.can_reach_entity(entity) then + if event.element.parent.name == "bob_inserter_gui_pickup" then + bobmods.inserters.gui_pickup_click(entity, event.element) + elseif event.element.parent.name == "bob_inserter_gui_drop" then + bobmods.inserters.gui_drop_click(entity, event.element) + elseif event.element.parent.name == "bob_inserter_gui_offset" then + bobmods.inserters.gui_offset_click(entity, event.element) + end + else + bobmods.inserters.delete_gui(event.player_index) + end + end + end +end) + +script.on_event(defines.events.on_gui_click, function(event) + local player = game.players[event.player_index] + local entity = global.bobmods.inserters[event.player_index].entity + if event.element.valid then + if entity and entity.valid and player.can_reach_entity(entity) then + if event.element.name == "bob_inserter_gui_close" then + bobmods.inserters.delete_gui(event.player_index) + end + else + bobmods.inserters.delete_gui(event.player_index) + end + end + + if event.element.valid and event.element.name == "bob_logistics_inserter_button" then + if global.bobmods.logistics[event.player_index].show then + global.bobmods.logistics[event.player_index].show = false + else + global.bobmods.logistics[event.player_index].show = true + end + bobmods.logistics.show_gui_options(event.player_index) + end +end) + +script.on_event(defines.events.on_player_rotated_entity, function(event) + local player = game.players[event.player_index] + local entity = global.bobmods.inserters[event.player_index].entity + if entity == event.entity and player.can_reach_entity(entity) then + if global.bobmods.inserters[player.index].gui and global.bobmods.inserters[player.index].gui.valid then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end + end +end) + +script.on_event(defines.events.on_tick, function(event) + if game.tick % 20 == 0 then + if global and global.bobmods and global.bobmods.inserters then + for i, player in pairs(game.connected_players) do + if global.bobmods.inserters[player.index] then + local entity = global.bobmods.inserters[player.index].entity + if entity and (not entity.valid or not player.can_reach_entity(entity)) then + bobmods.inserters.delete_gui(player.index) + end + else + bobmods.inserters.create_global_table(player.index) -- Create for this specific online player. + end + end + else + for index, player in pairs(game.players) do -- Create for all if there are none. + bobmods.inserters.create_global_table(index) + end + end + end +end) + +script.on_configuration_changed(function(event) + for i, player in pairs(game.players) do + bobmods.inserters.create_global_table(player.index) + if player.gui.center.bob_inserter_gui then + player.gui.center.bob_inserter_gui.destroy() + end + bobmods.inserters.delete_gui(player.index) + bobmods.logistics.create_gui_button(player.index) + player.gui.center.visible = true + end +end) + +script.on_init(function(event) + for i, player in pairs(game.players) do + bobmods.inserters.create_global_table(player.index) + bobmods.logistics.create_gui_button(player.index) + end +end) + +script.on_event(defines.events.on_player_created, function(event) + bobmods.inserters.create_global_table(event.player_index) + bobmods.logistics.create_gui_button(event.player_index) +end) + +script.on_event(defines.events.on_player_joined_game, function(event) + bobmods.inserters.create_global_table(event.player_index) + bobmods.logistics.create_gui_button(event.player_index) +end) + +script.on_event(defines.events.on_research_finished, function(event) + if + event.research.name == bobmods.inserters.long_technology + or event.research.name == bobmods.inserters.long2_technology + or event.research.name == bobmods.inserters.near_technology + or event.research.name == bobmods.inserters.more_technology + or event.research.name == bobmods.inserters.more2_technology + then + for i, player in pairs(event.research.force.players) do + local entity = global.bobmods.inserters[player.index].entity + if entity and entity.valid and player.can_reach_entity(entity) then + bobmods.inserters.open_gui(entity, player) + end + bobmods.logistics.show_gui_options(player.index) + end + end +end) + +script.on_event(defines.events.on_built_entity, function(event) + local player = game.players[event.player_index] + local entity = event.created_entity + + local entity_name = entity.name + if entity.type == "entity-ghost" then + entity_name = entity.ghost_name + end + + if + event.item + and event.item.place_result + and event.item.place_result.type == "inserter" + and (entity.type == "inserter" or (entity.type == "entity-ghost" and entity.ghost_type == "inserter")) + and event.item.place_result.name == entity_name --probably don't even need this line anymore. + and not global.bobmods.inserters.blacklist[entity_name] + then + bobmods.logistics.set_positions(entity, event.player_index) + end +end) + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + if event.setting == "bobmods-inserters-button-enable" then + bobmods.logistics.create_gui_button(event.player_index) + end +end) + +function tech_unlocked(force, tech) + if force.technologies[tech] then + return force.technologies[tech].researched + end +end + +---private function, used by slimDropOffset andslimPickupOffset +function _slimOffset(entity, l) + -- inserters have tile_height=1, tile_width=1 this normal form is assumed by bobinserters + -- for "slim" insertes we transform the position into this normal form and back. + -- this saves us from having to adjust all the calculations of bobinserters + + local o = { x = 0, y = 0 } + if entity.prototype.tile_height == 0 and entity.prototype.tile_width == 1 then + -- this calculation is tested with mod arrow-inserter and slim-inserters + if entity.direction == defines.direction.north then + o.y = -0.5 + l + elseif entity.direction == defines.direction.south then + o.y = 0.5 - l + elseif entity.direction == defines.direction.east then + o.x = 0.5 - l + elseif entity.direction == defines.direction.west then + o.x = -0.5 + l + end + end + return o +end + +function slimDropOffset(entity) + return _slimOffset(entity, 1) +end + +function slimPickupOffset(entity) + return _slimOffset(entity, 0) +end + +function get_pickup_position(entity) + local o = slimPickupOffset(entity) + return { + x = entity.pickup_position.x - entity.position.x + o.x, + y = entity.pickup_position.y - entity.position.y + o.y, + } +end + +function get_drop_position(entity) + local o = slimDropOffset(entity) + return { + x = entity.drop_position.x - entity.position.x + o.x, + y = entity.drop_position.y - entity.position.y + o.y, + } +end + +function split_drop_position(full_drop_position) + local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } + local drop_offset = { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } + return drop_position, drop_offset +end + +function get_split_drop_position(entity) + local full_drop_position = get_drop_position(entity) + local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } + local drop_offset = { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } + return drop_position, drop_offset +end + +function get_drop_tile_position(entity) + local full_drop_position = get_drop_position(entity) + return { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } +end + +function get_drop_offset_position(entity) + local full_drop_position = get_drop_position(entity) + return { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } +end + +function combine_drop_position(drop_position, drop_offset) + return { x = drop_position.x + drop_offset.x, y = drop_position.y + drop_offset.y } +end + +function set_pickup_position(entity, newpos) + local o = slimPickupOffset(entity) + local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } + local new_positions = { + drop_position = entity.drop_position, + pickup_position = { + x = entity.position.x + newpos.x - o.x, + y = entity.position.y + newpos.y - o.y, + }, + } + entity.pickup_position = new_positions.pickup_position + entity.direction = entity.direction -- set direction to force update + script.raise_event( + changed_position_event, + { entity = entity, new_positions = new_positions, original_positions = original_positions } + ) -- Raise positions changed event. +end + +function set_drop_position(entity, newpos) + local o = slimDropOffset(entity) + local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } + local new_positions = { + drop_position = { + x = entity.position.x + newpos.x - o.x, + y = entity.position.y + newpos.y - o.y, + }, + pickup_position = entity.pickup_position, + } + entity.drop_position = new_positions.drop_position + entity.direction = entity.direction -- set direction to force update + script.raise_event( + changed_position_event, + { entity = entity, new_positions = new_positions, original_positions = original_positions } + ) -- Raise positions changed event. +end + +function set_split_drop_position(entity, new_position, new_offset) + return set_drop_position(entity, combine_drop_position(new_position, new_offset)) +end + +function set_both_positions(entity, newpickup, newdrop) + local od = slimDropOffset(entity) + local op = slimPickupOffset(entity) + local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } + local new_positions = { + drop_position = { + x = entity.position.x + newdrop.x - od.x, + y = entity.position.y + newdrop.y - od.y, + }, + pickup_position = { + x = entity.position.x + newpickup.x - op.x, + y = entity.position.y + newpickup.y - op.y, + }, + } + entity.drop_position = new_positions.drop_position + entity.pickup_position = new_positions.pickup_position + entity.direction = entity.direction -- set direction to force update + script.raise_event( + changed_position_event, + { entity = entity, new_positions = new_positions, original_positions = original_positions } + ) -- Raise positions changed event. +end + +function check_position(pos1, pos2) + local pos = {} + pos.x = pos1.x - pos2.x + pos.y = pos1.y - pos2.y + if pos.x < 0 then + pos.x = 0 - pos.x + end + if pos.y < 0 then + pos.y = 0 - pos.y + end + if pos.x < 0.1 and pos.y < 0.1 then + return true + else + return false + end +end + +function bobmods.inserters.normalise_tile_offset(tile_offset) + local new_offset = { x = 0, y = 0 } + if tile_offset.x > 0.01 then + new_offset.x = bobmods.inserters.offset + end + if tile_offset.x < -0.01 then + new_offset.x = -bobmods.inserters.offset + end + if tile_offset.y > 0.01 then + new_offset.y = bobmods.inserters.offset + end + if tile_offset.y < -0.01 then + new_offset.y = -bobmods.inserters.offset + end + return new_offset +end + +function bobmods.logistics.set_range(position_in, range) + local position = { x = 0, y = 0 } + if position_in.x > 0.1 then + position.x = range + elseif position_in.x < -0.1 then + position.x = -range + else + position.x = 0 + end + if position_in.y > 0.1 then + position.y = range + elseif position_in.y < -0.1 then + position.y = -range + else + position.y = 0 + end + return position +end + +function calculate_new_drop_offset(drop_position, drop_offset, new_position) + local new_offset = { x = drop_offset.x, y = drop_offset.y } + + if (drop_position.x > 0 and new_position.x < 0) or (drop_position.x < 0 and new_position.x > 0) then + new_offset.x = 0 - drop_offset.x + elseif drop_position.x == 0 and new_position.x ~= 0 then + if (new_position.x > 0 and drop_position.y > 0) or (new_position.x < 0 and drop_position.y < 0) then + new_offset.x = drop_offset.y + else + new_offset.x = 0 - drop_offset.y + end + elseif drop_position.x ~= 0 and new_position.x == 0 then + new_offset.x = 0 + end + + if (drop_position.y > 0 and new_position.y < 0) or (drop_position.y < 0 and new_position.y > 0) then + new_offset.y = 0 - drop_offset.y + elseif drop_position.y == 0 and new_position.y ~= 0 then + if (new_position.y > 0 and drop_position.x > 0) or (new_position.y < 0 and drop_position.x < 0) then + new_offset.y = drop_offset.x + else + new_offset.y = 0 - drop_offset.x + end + elseif drop_position.y ~= 0 and new_position.y == 0 then + new_offset.y = 0 + end + + return bobmods.inserters.normalise_tile_offset(new_offset) +end + +function bobmods.logistics.set_positions(entity, player_index) + if global.bobmods.logistics[player_index].enabled then + local force = game.players[player_index].force + local direction = (entity.direction / 2) + 1 + + local long_unlocked = tech_unlocked(force, bobmods.inserters.long_technology) + local more_unlocked = tech_unlocked(force, bobmods.inserters.more_technology) + local near_unlocked = tech_unlocked(force, bobmods.inserters.near_technology) + + local long_in = global.bobmods.logistics[player_index].long_in + local long_out = global.bobmods.logistics[player_index].long_out + local near = global.bobmods.logistics[player_index].near + + local pickup_position = get_pickup_position(entity) + local drop_position, drop_offset = get_split_drop_position(entity) + + if long_unlocked then + if more_unlocked then + if long_in then + pickup_position = bobmods.logistics.set_range(pickup_position, 2) + else + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + end + if long_out then + drop_position = bobmods.logistics.set_range(drop_position, 2) + else + drop_position = bobmods.logistics.set_range(drop_position, 1) + end + else + if long_in then + pickup_position = bobmods.logistics.set_range(pickup_position, 2) + drop_position = bobmods.logistics.set_range(drop_position, 2) + else + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + drop_position = bobmods.logistics.set_range(drop_position, 1) + end + end + end + + if near_unlocked then + if near then + drop_offset = bobmods.logistics.set_range(drop_position, -bobmods.inserters.offset) + else + drop_offset = bobmods.logistics.set_range(drop_position, bobmods.inserters.offset) + end + end + local full_drop_position = combine_drop_position(drop_position, drop_offset) + set_both_positions(entity, pickup_position, full_drop_position) + end + + if global.bobmods.logistics[player_index].enabled2 and remote.interfaces.bobinserters then + local pickup_position = + remote.call("bobinserters", "get_position", { position = global.bobmods.logistics[player_index].pickup }) + local drop_position = + remote.call("bobinserters", "get_position", { position = global.bobmods.logistics[player_index].drop }) + local drop_offset = + remote.call("bobinserters", "get_offset", { position = global.bobmods.logistics[player_index].offset }) + + local direction = (entity.direction / 2) + if direction == 2 then -- 2 is up, because inserters are backwards. + pickup_position = pickup_position + drop_position = drop_position + drop_offset = drop_offset + elseif direction == 3 then -- right + pickup_position = { x = -pickup_position.y, y = pickup_position.x } + drop_position = { x = -drop_position.y, y = drop_position.x } + drop_offset = { x = -drop_offset.y, y = drop_offset.x } + elseif direction == 0 then -- down + pickup_position = { x = -pickup_position.x, y = -pickup_position.y } + drop_position = { x = -drop_position.x, y = -drop_position.y } + drop_offset = { x = -drop_offset.x, y = -drop_offset.y } + elseif direction == 1 then -- left + pickup_position = { x = pickup_position.y, y = -pickup_position.x } + drop_position = { x = drop_position.y, y = -drop_position.x } + drop_offset = { x = drop_offset.y, y = -drop_offset.x } + end + + local near_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.near_technology) + if not near_unlocked then + local old_drop_position, old_drop_offset = get_split_drop_position(entity) + drop_offset = calculate_new_drop_offset(old_drop_position, old_drop_offset, drop_position) + end + local full_drop_position = combine_drop_position(drop_position, drop_offset) + set_both_positions(entity, pickup_position, full_drop_position) + end +end + +function bobmods.inserters.gui_pickup_click(entity, element) + local pickup_position = get_pickup_position(entity) + local i = string.gsub(element.name, "button", "") + 0 + pickup_position = bobmods.inserters.positions[i] + set_pickup_position(entity, pickup_position) + entity.direction = entity.direction -- set direction to force update + bobmods.inserters.draw_button_position_check(element.parent, pickup_position) +end + +function bobmods.inserters.gui_drop_click(entity, element) + local i = string.gsub(element.name, "button", "") + 0 + local new_position = bobmods.inserters.positions[i] + local drop_position, drop_offset = get_split_drop_position(entity) + local new_offset = calculate_new_drop_offset(drop_position, drop_offset, new_position) + set_split_drop_position(entity, new_position, new_offset) + entity.direction = entity.direction -- set direction to force update + bobmods.inserters.refresh_position_checkboxes(entity, game.players[element.player_index]) +end + +function bobmods.inserters.gui_offset_click(entity, element) + local i = string.gsub(element.name, "button", "") + 0 + new_offset = bobmods.inserters.offset_positions[i] + set_split_drop_position(entity, get_drop_tile_position(entity), new_offset) + entity.direction = entity.direction -- set direction to force update + bobmods.inserters.draw_button_offset_check(element.parent, new_offset) +end + +function bobmods.inserters.rotate_position(force, pickup_position) + local more_unlocked = tech_unlocked(force, bobmods.inserters.more_technology) + local more2_unlocked = tech_unlocked(force, bobmods.inserters.more2_technology) + local rotation = 1 + local position = { table = {}, steps = 0 } + + -- Decide which position table to use + if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then + if more2_unlocked then + position = bobmods.inserters.range3_24way + elseif more_unlocked then + position = bobmods.inserters.range3_8way + else + position = bobmods.inserters.range3_4way + end + elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then + if more2_unlocked then + position = bobmods.inserters.range2_16way + elseif more_unlocked then + position = bobmods.inserters.range2_8way + else + position = bobmods.inserters.range2_4way + end + else + if more_unlocked then + position = bobmods.inserters.range1_8way + else + position = bobmods.inserters.range1_4way + end + end + + -- Find current rotation + for i, new_position in ipairs(position.table) do + if check_position(pickup_position, new_position) then + rotation = i + end + end + -- Rotate + rotation = rotation + 1 + if rotation > position.steps then + rotation = rotation - position.steps + end + + return position.table[rotation] +end + +function bobmods.inserters.rotate_pickup(entity, player) + local pickup_position = get_pickup_position(entity) + pickup_position = bobmods.inserters.rotate_position(player.force, pickup_position) + set_pickup_position(entity, pickup_position) + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end +end + +function bobmods.inserters.rotate_drop(entity, player) + local drop_position, drop_offset = get_split_drop_position(entity) + local new_position = bobmods.inserters.rotate_position(player.force, drop_position) + local new_offset = calculate_new_drop_offset(drop_position, drop_offset, new_position) + set_split_drop_position(entity, new_position, new_offset) + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end +end + +function bobmods.inserters.pickup_range(entity, player) + local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) + local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) + local pickup_position = get_pickup_position(entity) + local islong = false + local islong2 = false + + if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then + islong2 = true + elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then + islong = true + end + + if long_unlocked or long2_unlocked then + if islong2 then + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + elseif islong then + if long2_unlocked then + pickup_position = bobmods.logistics.set_range(pickup_position, 3) + else + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + end + else + pickup_position = bobmods.logistics.set_range(pickup_position, 2) + end + set_pickup_position(entity, pickup_position) + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end + end +end + +function bobmods.inserters.drop_range(entity, player) + local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) + local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) + local drop_position, drop_offset = get_split_drop_position(entity) + local islong = false + local islong2 = false + + if drop_position.x > 2.1 or drop_position.x < -2.1 or drop_position.y > 2.1 or drop_position.y < -2.1 then + islong2 = true + elseif drop_position.x > 1.1 or drop_position.x < -1.1 or drop_position.y > 1.1 or drop_position.y < -1.1 then + islong = true + end + + if long_unlocked or long2_unlocked then + if islong2 then + drop_position = bobmods.logistics.set_range(drop_position, 1) + elseif islong then + if long2_unlocked then + drop_position = bobmods.logistics.set_range(drop_position, 3) + else + drop_position = bobmods.logistics.set_range(drop_position, 1) + end + else + drop_position = bobmods.logistics.set_range(drop_position, 2) + end + end + + set_split_drop_position(entity, drop_position, drop_offset) + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end +end + +function bobmods.inserters.long_range(entity, player) + local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) + local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) + + local pickup_position = get_pickup_position(entity) + local drop_position, drop_offset = get_split_drop_position(entity) + + local islong = false + local islong2 = false + + if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then + islong2 = true + elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then + islong = true + end + + if long_unlocked or long2_unlocked then + if islong2 then + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + drop_position = bobmods.logistics.set_range(drop_position, 1) + elseif islong then + if long2_unlocked then + pickup_position = bobmods.logistics.set_range(pickup_position, 3) + drop_position = bobmods.logistics.set_range(drop_position, 3) + else + pickup_position = bobmods.logistics.set_range(pickup_position, 1) + drop_position = bobmods.logistics.set_range(drop_position, 1) + end + else + pickup_position = bobmods.logistics.set_range(pickup_position, 2) + drop_position = bobmods.logistics.set_range(drop_position, 2) + end + end + + local full_drop_position = combine_drop_position(drop_position, drop_offset) + set_both_positions(entity, pickup_position, full_drop_position) + + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end +end + +function bobmods.inserters.near_range(entity, player) + local near_unlocked = tech_unlocked(player.force, bobmods.inserters.near_technology) + + local drop_position, drop_offset = get_split_drop_position(entity) + + if near_unlocked then + if + (drop_offset.x == 0 and drop_offset.y == 0) + or (drop_offset.x == 0 and drop_position.x ~= 0) + or (drop_offset.y == 0 and drop_position.y ~= 0) + then + drop_offset = bobmods.inserters.normalise_tile_offset({ x = drop_position.x, y = drop_position.y }) + else + if drop_position.x ~= 0 then + drop_offset.x = 0 - drop_offset.x + end + if drop_position.y ~= 0 then + drop_offset.y = 0 - drop_offset.y + end + end + + if + (drop_position.y ~= 0 and drop_position.x ~= 0) + and ( + ( + ((drop_position.x > 0 and drop_offset.x < 0) or (drop_offset.x > 0 and drop_position.x < 0)) -- x near + and ((drop_position.y > 0 and drop_offset.y > 0) or (drop_offset.y < 0 and drop_position.y < 0)) + ) -- y far + or ( + ((drop_position.x > 0 and drop_offset.x > 0) or (drop_offset.x < 0 and drop_position.x < 0)) -- x far + and ((drop_position.y > 0 and drop_offset.y < 0) or (drop_offset.y > 0 and drop_position.y < 0)) + ) -- y near + ) + then + drop_offset = bobmods.inserters.normalise_tile_offset({ x = drop_position.x, y = drop_position.y }) + end + end + + set_split_drop_position(entity, drop_position, drop_offset) + if entity == global.bobmods.inserters[player.index].entity then + bobmods.inserters.refresh_position_checkboxes(entity, player) + end +end + +function bobmods.logistics.destroy_gui_button(player_index) + local player = game.players[player_index] + + -- remove legacy GUI + if player.gui.top.bob_logistics_inserter_gui then + player.gui.top.bob_logistics_inserter_gui.destroy() + end + + -- remove legacy button + if player.gui.top.bob_logistics_inserter_button then + player.gui.top.bob_logistics_inserter_button.destroy() + end + + local gui = player.gui.top + local flow = gui.mod_gui_button_flow or (gui.mod_gui_top_frame and gui.mod_gui_top_frame.mod_gui_inner_frame) + + if flow and flow.bob_logistics_inserter_button then + flow.bob_logistics_inserter_button.destroy() + -- Remove empty frame if we're the only thing there, remove the parent frame if we just removed the only child + if #flow.children_names == 0 then + local parent = flow.parent + flow.destroy() + if parent and parent.name ~= "top" and #parent.children_names == 0 then + parent.destroy() + end + end + end +end + +function bobmods.logistics.create_gui_button(player_index) + bobmods.logistics.destroy_gui_button(player_index) + + local player = game.players[player_index] + + if not settings.get_player_settings(player)["bobmods-inserters-button-enable"].value then + return + end + + mod_gui.get_button_flow(player).add({ + type = "sprite-button", + name = "bob_logistics_inserter_button", + tooltip = { "gui.bob-inserter-open-gui" }, + sprite = "item/fast-inserter", + style = "mod_gui_button", + visible = settings.get_player_settings(player)["bobmods-inserters-button-enable"].value, + }) +end + +function bobmods.logistics.show_gui_options(player_index) + local player = game.players[player_index] + + if player.gui.left.bob_logistics_inserter_gui then + player.gui.left.bob_logistics_inserter_gui.destroy() + end + + if global.bobmods.logistics[player_index].show then + bobmods.logistics.create_gui(player_index) + end +end + +function bobmods.logistics.create_gui(player_index) + local player = game.players[player_index] + local long_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.long_technology) + local more_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.more_technology) + local near_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.near_technology) + + if player.gui.left.bob_logistics_inserter_gui then + player.gui.left.bob_logistics_inserter_gui.destroy() + end + + if not settings.get_player_settings(player)["bobmods-inserters-button-enable"].value then + return + end + + local gui = player.gui.left.add({ type = "frame", name = "bob_logistics_inserter_gui", direction = "vertical" }) + gui.style.bottom_padding = 8 + gui.style.vertically_stretchable = false + gui.style.horizontally_stretchable = false + + gui.add({ type = "table", name = "table", column_count = 1, style = "bob_table" }) + + if long_unlocked or near_unlocked then + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_enabled", + state = global.bobmods.logistics[player_index].enabled, + caption = { "gui.bob-logistics-enabled" }, + }) + end + if global.bobmods.logistics[player_index].enabled then + if long_unlocked then + if more_unlocked then + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_long_in", + state = global.bobmods.logistics[player_index].long_in, + caption = { "gui.bob-logistics-pickup" }, + }) + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_long_out", + state = global.bobmods.logistics[player_index].long_out, + caption = { "gui.bob-logistics-drop" }, + }) + else + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_long_in", + state = global.bobmods.logistics[player_index].long_in, + caption = { "gui.bob-logistics-long" }, + }) + end + end + if near_unlocked then + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_near", + state = global.bobmods.logistics[player_index].near, + caption = { "gui.bob-logistics-near" }, + }) + end + end + + if remote.interfaces.bobinserters then + gui.table.add({ + type = "checkbox", + name = "bob_logistics_inserter_enabled2", + state = global.bobmods.logistics[player_index].enabled2, + caption = { "gui.bob-logistics-enabled2" }, + }) + if global.bobmods.logistics[player_index].enabled2 then + remote.call("bobinserters", "draw_gui", { + player_index = player_index, + gui = gui, + name = "bob_logistics", + pickup = global.bobmods.logistics[player_index].pickup, + drop = global.bobmods.logistics[player_index].drop, + offset = global.bobmods.logistics[player_index].offset, + }) + end + end +end + +function bobmods.inserters.delete_gui(player_index) + local globtable = global.bobmods.inserters[player_index] + if globtable then + if globtable.gui and globtable.gui.valid then + globtable.gui.destroy() + end + globtable.entity = nil + globtable.gui = nil + globtable.pickup = nil + globtable.drop = nil + globtable.offset = nil + end +end + +function bobmods.inserters.open_gui(entity, player) + bobmods.inserters.delete_gui(player.index) + + local globtable = global.bobmods.inserters[player.index] + globtable.entity = entity + + local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) + local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) + local more_unlocked = tech_unlocked(player.force, bobmods.inserters.more_technology) + local more2_unlocked = tech_unlocked(player.force, bobmods.inserters.more2_technology) + local near_unlocked = tech_unlocked(player.force, bobmods.inserters.near_technology) + + local pickup_position = get_pickup_position(entity) + local full_drop_position = get_drop_position(entity) + local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } + local offset_position = bobmods.inserters.normalise_tile_offset({ + x = bobmods.math.offset(full_drop_position.x), + y = bobmods.math.offset(full_drop_position.y), + }) + + local gui + local main_table + + if globtable.position == "left" then + gui = player.gui.relative.add({ + type = "frame", + name = "bob_inserter_gui", + direction = "vertical", + caption = { "gui.bob-named-inserter-gui", entity.prototype.localised_name }, + }) + gui.anchor = { + gui = defines.relative_gui_type.inserter_gui, + position = defines.relative_gui_position[settings.get_player_settings(player)["bobmods-inserters-gui-position"].value], + } + + globtable.pickup, globtable.drop, globtable.offset = bobmods.inserters.draw_inserter_gui_main_table( + gui, + "bob_inserter_gui", + pickup_position, + drop_position, + offset_position, + long_unlocked, + long2_unlocked, + more_unlocked, + more2_unlocked, + near_unlocked + ) + else + gui = player.gui.screen.add({ type = "frame", name = "bob_inserter_gui", direction = "vertical" }) + gui_add_title( + gui, + { "gui.bob-named-inserter-gui", entity.prototype.localised_name }, + "bob_inserter_gui_close", + true + ) + local main_table_target = gui + + if settings.get_player_settings(player)["bobmods-inserters-show-window"].value ~= "off" then + local entity_flow = gui + local frame_width = 400 + if settings.get_player_settings(player)["bobmods-inserters-show-window"].value == "left" then + gui.title_flow.title.caption = { "gui.bob-inserter-gui" } + main_table_target = gui.add({ type = "flow", name = "main_flow", style = "horizontal_flow" }) + gui.main_flow.style.horizontal_spacing = 12 + entity_flow = gui.main_flow.add({ type = "table", name = "entity_flow", style = "bob_table", column_count = 1 }) + entity_flow.add({ + type = "label", + name = "entity_name", + style = "heading_2_label", + caption = entity.prototype.localised_name, + }) + frame_width = 148 + end + + entity_flow.add({ type = "frame", name = "entity_frame", style = "inside_shallow_frame" }) + entity_flow.entity_frame.style.width = frame_width + entity_flow.entity_frame.style.height = 148 + entity_flow.entity_frame.style.horizontally_stretchable = "off" + entity_flow.entity_frame.add({ type = "entity-preview", name = "entity_preview", style = "entity_button_base" }) + entity_flow.entity_frame.entity_preview.style.width = frame_width + entity_flow.entity_frame.entity_preview.style.height = 148 + entity_flow.entity_frame.entity_preview.entity = entity + end + + globtable.pickup, globtable.drop, globtable.offset = bobmods.inserters.draw_inserter_gui_main_table( + main_table_target, + "bob_inserter_gui", + pickup_position, + drop_position, + offset_position, + long_unlocked, + long2_unlocked, + more_unlocked, + more2_unlocked, + near_unlocked + ) + + gui.auto_center = true + player.opened = gui + end + + globtable.gui = gui + gui.style.bottom_padding = 8 + gui.style.vertically_stretchable = false + gui.style.horizontally_stretchable = false +end + +function bobmods.inserters.draw_inserter_gui_main_table( + gui, + name, + pickup_position, + drop_position, + offset_position, + long_unlocked, + long2_unlocked, + more_unlocked, + more2_unlocked, + near_unlocked +) + local isshort = false + local islong = false + local islong2 = false + + if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then + islong2 = true + elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then + islong = true + else + isshort = true + end + if drop_position.x > 2.1 or drop_position.x < -2.1 or drop_position.y > 2.1 or drop_position.y < -2.1 then + islong2 = true + elseif drop_position.x > 1.1 or drop_position.x < -1.1 or drop_position.y > 1.1 or drop_position.y < -1.1 then + islong = true + else + isshort = true + end + + local main_table = gui.add({ type = "table", name = "main_table", column_count = 2, style = "bob_table" }) + main_table.style.horizontal_spacing = 12 + + main_table.add({ + type = "label", + name = "pickup_label", + style = "heading_2_label", + caption = { "gui.bob-inserter-pickup" }, + }) + main_table.add({ + type = "label", + name = "drop_label", + style = "heading_2_label", + caption = { "gui.bob-inserter-drop" }, + }) + + main_table.add({ type = "frame", name = "pickup", style = "inside_shallow_frame_with_padding" }) + main_table.add({ type = "frame", name = "drop", style = "inside_shallow_frame_with_padding" }) + main_table.drop.add({ type = "table", name = "table", column_count = 3, style = "bob_table" }) + + local column_count = 5 + + if long2_unlocked or islong2 then + column_count = 7 + elseif long_unlocked or islong then + column_count = 5 + else + column_count = 3 + end + + local gui_pickup = main_table.pickup.add({ + type = "table", + name = name .. "_pickup", + column_count = column_count, + style = "bob_table", + }) + local gui_drop = main_table.drop.table.add({ + type = "table", + name = name .. "_drop", + column_count = column_count, + style = "bob_table", + }) + local gui_offset = nil + + bobmods.inserters.draw_button_grid( + gui_pickup, + pickup_position, + "bob_inserter_checkbox_pickup", + long_unlocked, + more_unlocked, + islong, + long2_unlocked, + more2_unlocked, + islong2, + isshort + ) + bobmods.inserters.draw_button_grid( + gui_drop, + drop_position, + "bob_inserter_checkbox_drop", + long_unlocked, + more_unlocked, + islong, + long2_unlocked, + more2_unlocked, + islong2, + isshort + ) + + if near_unlocked then + main_table.drop.table.add({ type = "label", name = "spacer2", caption = " " }) + main_table.drop.table.add({ type = "table", name = "offset", column_count = 1, style = "bob_table" }) + main_table.drop.table.offset.add({ + type = "label", + name = "entity_name", + caption = { "gui.bob-inserter-offset" }, + style = "heading_2_label", + }) + gui_offset = main_table.drop.table.offset.add({ + type = "table", + name = name .. "_offset", + column_count = 3, + style = "bob_table", + }) + bobmods.inserters.draw_offset_grid(gui_offset, offset_position) + end + return gui_pickup, gui_drop, gui_offset +end + +function bobmods.inserters.draw_offset_grid(gui, position) + gui.add({ type = "checkbox", name = "button1", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button2", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button3", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button4", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button5", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button6", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button7", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button8", state = false, style = "bob_inserter_checkbox_small" }) + gui.add({ type = "checkbox", name = "button9", state = false, style = "bob_inserter_checkbox_small" }) + + bobmods.inserters.draw_button_offset_check(gui, position) +end + +function bobmods.inserters.draw_button_grid(gui, position, style, long, more, islong, long2, more2, islong2, isshort) + if long2 or islong2 then + if more then + gui.add({ type = "checkbox", name = "button26", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank26", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button27", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank27", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button28", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank28", state = false, style = "bob_inserter_blank" }) + end + gui.add({ type = "checkbox", name = "button29", state = false, style = style }) + if more2 then + gui.add({ type = "checkbox", name = "button30", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank30", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button31", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank31", state = false, style = "bob_inserter_blank" }) + end + if more then + gui.add({ type = "checkbox", name = "button32", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank32", state = false, style = "bob_inserter_blank" }) + end + end + + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button33", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank33", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 or long or islong then + if more and (long or islong) then + gui.add({ type = "checkbox", name = "button1", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank1", state = false, style = "bob_inserter_blank" }) + end + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button2", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank2", state = false, style = "bob_inserter_blank" }) + end + if long or islong then + gui.add({ type = "checkbox", name = "button3", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank3", state = false, style = "bob_inserter_blank" }) + end + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button4", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank4", state = false, style = "bob_inserter_blank" }) + end + if more and (long or islong) then + gui.add({ type = "checkbox", name = "button5", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank5", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button34", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank34", state = false, style = "bob_inserter_blank" }) + end + end + + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button35", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank35", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 or long or islong then + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button6", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank6", state = false, style = "bob_inserter_blank" }) + end + end + if more and (long or long2 or isshort) then + gui.add({ type = "checkbox", name = "button7", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank7", state = false, style = "bob_inserter_blank" }) + end + if long or long2 or isshort then + gui.add({ type = "checkbox", name = "button8", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank8", state = false, style = "bob_inserter_blank" }) + end + if more and (long or long2 or isshort) then + gui.add({ type = "checkbox", name = "button9", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank9", state = false, style = "bob_inserter_blank" }) + end + if long2 or islong2 or long or islong then + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button10", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank10", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button36", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank36", state = false, style = "bob_inserter_blank" }) + end + end + + if long2 or islong2 then + gui.add({ type = "checkbox", name = "button37", state = false, style = style }) + end + if long2 or islong2 or long or islong then + if long or islong then + gui.add({ type = "checkbox", name = "button11", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank11", state = false, style = "bob_inserter_blank" }) + end + end + if long or long2 or isshort then + gui.add({ type = "checkbox", name = "button12", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank12", state = false, style = "bob_inserter_blank" }) + end + gui.add({ type = "checkbox", name = "middle", state = false, style = "bob_inserter_middle" }) + if long or long2 or isshort then + gui.add({ type = "checkbox", name = "button14", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank14", state = false, style = "bob_inserter_blank" }) + end + if long2 or islong2 or long or islong then + if long or islong then + gui.add({ type = "checkbox", name = "button15", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank15", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 then + gui.add({ type = "checkbox", name = "button38", state = false, style = style }) + end + + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button39", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank39", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 or long or islong then + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button16", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank16", state = false, style = "bob_inserter_blank" }) + end + end + if more and (long or long2 or isshort) then + gui.add({ type = "checkbox", name = "button17", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank17", state = false, style = "bob_inserter_blank" }) + end + if long or long2 or isshort then + gui.add({ type = "checkbox", name = "button18", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank18", state = false, style = "bob_inserter_blank" }) + end + if more and (long or long2 or isshort) then + gui.add({ type = "checkbox", name = "button19", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank19", state = false, style = "bob_inserter_blank" }) + end + if long2 or islong2 or long or islong then + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button20", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank20", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button40", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank40", state = false, style = "bob_inserter_blank" }) + end + end + + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button41", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank41", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 or long or islong then + if more and (long or islong) then + gui.add({ type = "checkbox", name = "button21", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank21", state = false, style = "bob_inserter_blank" }) + end + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button22", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank22", state = false, style = "bob_inserter_blank" }) + end + if long or islong then + gui.add({ type = "checkbox", name = "button23", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank23", state = false, style = "bob_inserter_blank" }) + end + if more2 and (long or islong) then + gui.add({ type = "checkbox", name = "button24", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank24", state = false, style = "bob_inserter_blank" }) + end + if more and (long or islong) then + gui.add({ type = "checkbox", name = "button25", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank25", state = false, style = "bob_inserter_blank" }) + end + end + if long2 or islong2 then + if more2 then + gui.add({ type = "checkbox", name = "button42", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank42", state = false, style = "bob_inserter_blank" }) + end + end + + if long2 or islong2 then + if more then + gui.add({ type = "checkbox", name = "button43", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank43", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button44", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank44", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button45", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank45", state = false, style = "bob_inserter_blank" }) + end + gui.add({ type = "checkbox", name = "button46", state = false, style = style }) + if more2 then + gui.add({ type = "checkbox", name = "button47", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank47", state = false, style = "bob_inserter_blank" }) + end + if more2 then + gui.add({ type = "checkbox", name = "button48", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank48", state = false, style = "bob_inserter_blank" }) + end + if more then + gui.add({ type = "checkbox", name = "button49", state = false, style = style }) + else + gui.add({ type = "checkbox", name = "blank49", state = false, style = "bob_inserter_blank" }) + end + end + + bobmods.inserters.draw_button_position_check(gui, position) +end + +function bobmods.inserters.draw_button_position_check(gui, position) + for i, new_position in ipairs(bobmods.inserters.positions) do + if gui["button" .. i] then + gui["button" .. i].state = false + if check_position(position, new_position) then + gui["button" .. i].state = true + end + end + end +end + +function bobmods.inserters.draw_button_offset_check(gui, position) + for i, new_position in ipairs(bobmods.inserters.offset_positions) do + if gui["button" .. i] then + gui["button" .. i].state = false + if check_position(position, new_position) then + gui["button" .. i].state = true + end + end + end +end + +function bobmods.inserters.refresh_position_checkboxes(entity, player) + local pickup_position = get_pickup_position(entity) + local drop_position, drop_offset = get_split_drop_position(entity) + + if global.bobmods.inserters[player.index].pickup then + bobmods.inserters.draw_button_position_check(global.bobmods.inserters[player.index].pickup, pickup_position) + end + if global.bobmods.inserters[player.index].drop then + bobmods.inserters.draw_button_position_check(global.bobmods.inserters[player.index].drop, drop_position) + end + if global.bobmods.inserters[player.index].offset then + bobmods.inserters.draw_button_offset_check(global.bobmods.inserters[player.index].offset, drop_offset) + end +end + +remote.add_interface("bobinserters", { + --[[ +This function will draw the inserters grid GUI as used in the GUI added by this mod in any GUI you choose. This mod will not respond to those buttons being pressed. +This function takes the following variables: +gui: The GUI element to draw this GUI inside of. +name: The name prefix for the main 3 tables. +player_index: obvious +pickup: the index in table bobmods.inserters.positions to define the pickup location. +drop: the index in table bobmods.inserters.positions to define the drop location. +offset: the index in table bobmods.inserters.offset_positions to define the offset location within the drop tile. +]] + -- + draw_gui = function(data) + local force = game.players[data.player_index].force + bobmods.inserters.draw_inserter_gui_main_table( + data.gui, + data.name, + bobmods.inserters.positions[data.pickup], + bobmods.inserters.positions[data.drop], + bobmods.inserters.offset_positions[data.offset], + tech_unlocked(force, bobmods.inserters.long_technology), + tech_unlocked(force, bobmods.inserters.long2_technology), + tech_unlocked(force, bobmods.inserters.more_technology), + tech_unlocked(force, bobmods.inserters.more2_technology), + tech_unlocked(force, bobmods.inserters.near_technology) + ) + end, + + --[[ +This function will refresh the GUI checkboxes, designed to refresh a drawn GUI grid after you click one of it's buttons. +This function takes the following variables: +gui: the GUI table that the buttons are drawn inside of. +position: the index in table bobmods.inserters.positions to define the pickup/drop location. +]] + -- + draw_button_position_check = function(data) + bobmods.inserters.draw_button_position_check(data.gui, bobmods.inserters.positions[data.position]) + end, + + --[[ +This function will refresh the GUI checkboxes, designed to refresh a drawn GUI grid after you click one of it's buttons. +This function takes the following variables: +gui: the GUI table that the buttons are drawn inside of. +position: the index in table bobmods.inserters.offset_positions to define the offset location. +]] + -- + draw_button_offset_check = function(data) + bobmods.inserters.draw_button_offset_check(data.gui, bobmods.inserters.offset_positions[data.position]) + end, + + --[[ +This function will take the value position in the bobmods.inserters.positions table, and return the coordinates. +]] + -- + get_position = function(data) + return bobmods.inserters.positions[data.position] + end, + + --[[ +This function will take the value position in the bobmods.inserters.offset_positions table, and return the coordinates. +]] + -- + get_offset = function(data) + return bobmods.inserters.offset_positions[data.position] + end, + + --[[ +Pass this function the name of an inserter, and it will be ignored. +EG: remote.call("bobinserters", "blacklist_inserter", "burner-inserter") will blacklist the burner inserter. +]] + -- + blacklist_inserter = function(data) + bobmods.inserters.create_global_table_basic() + global.bobmods.inserters.blacklist[data] = true + end, + --[[ +Pass this function a table of names of inserters, and they will be ignored. +EG: remote.call("bobinserters", "blacklist_inserters", {"burner-inserter"}) will blacklist the burner inserter. +]] + -- + blacklist_inserters = function(data) + bobmods.inserters.create_global_table_basic() + for i, inserter in pairs(data) do + global.bobmods.inserters.blacklist[inserter] = true + end + end, + --[[ +Returns the ID number of the custom event +Triggered event returns the following table: {entity = entity, new_positions = {drop_position = {x,y}, pickup_position = {x,y}}, original_positions = {drop_position = {x,y}, pickup_position = {x,y}}} +]] + -- + get_changed_position_event_id = function() + return changed_position_event + end, +}) diff --git a/bobinserters_1.1.7/data-final-fixes.lua b/bobinserters/data-final-fixes.lua similarity index 100% rename from bobinserters_1.1.7/data-final-fixes.lua rename to bobinserters/data-final-fixes.lua diff --git a/bobinserters_1.1.7/data-updates.lua b/bobinserters/data-updates.lua similarity index 100% rename from bobinserters_1.1.7/data-updates.lua rename to bobinserters/data-updates.lua diff --git a/bobinserters_1.1.7/data.lua b/bobinserters/data.lua similarity index 100% rename from bobinserters_1.1.7/data.lua rename to bobinserters/data.lua diff --git a/bobinserters/graphics/gui/checkbox-big.png b/bobinserters/graphics/gui/checkbox-big.png new file mode 100644 index 00000000..a616e0d0 Binary files /dev/null and b/bobinserters/graphics/gui/checkbox-big.png differ diff --git a/bobinserters/graphics/gui/checkbox.png b/bobinserters/graphics/gui/checkbox.png new file mode 100644 index 00000000..9b0ddcd9 Binary files /dev/null and b/bobinserters/graphics/gui/checkbox.png differ diff --git a/bobinserters/graphics/gui/gui.png b/bobinserters/graphics/gui/gui.png new file mode 100644 index 00000000..28238f2b Binary files /dev/null and b/bobinserters/graphics/gui/gui.png differ diff --git a/bobinserters/graphics/gui/hr-gui.png b/bobinserters/graphics/gui/hr-gui.png new file mode 100644 index 00000000..c58fdc41 Binary files /dev/null and b/bobinserters/graphics/gui/hr-gui.png differ diff --git a/bobinserters/graphics/icons/technology/fast-inserter.png b/bobinserters/graphics/icons/technology/fast-inserter.png new file mode 100644 index 00000000..323aae8e Binary files /dev/null and b/bobinserters/graphics/icons/technology/fast-inserter.png differ diff --git a/bobinserters/graphics/icons/technology/long-inserters-2.png b/bobinserters/graphics/icons/technology/long-inserters-2.png new file mode 100644 index 00000000..72b58db0 Binary files /dev/null and b/bobinserters/graphics/icons/technology/long-inserters-2.png differ diff --git a/bobinserters/graphics/icons/technology/long-inserters.png b/bobinserters/graphics/icons/technology/long-inserters.png new file mode 100644 index 00000000..48fef8b9 Binary files /dev/null and b/bobinserters/graphics/icons/technology/long-inserters.png differ diff --git a/bobinserters/graphics/icons/technology/more-inserters.png b/bobinserters/graphics/icons/technology/more-inserters.png new file mode 100644 index 00000000..1dc78781 Binary files /dev/null and b/bobinserters/graphics/icons/technology/more-inserters.png differ diff --git a/bobinserters/graphics/icons/technology/near-inserters.png b/bobinserters/graphics/icons/technology/near-inserters.png new file mode 100644 index 00000000..c2e4146d Binary files /dev/null and b/bobinserters/graphics/icons/technology/near-inserters.png differ diff --git a/bobinserters/info.json b/bobinserters/info.json new file mode 100644 index 00000000..b3d72846 --- /dev/null +++ b/bobinserters/info.json @@ -0,0 +1,11 @@ +{ + "name": "bobinserters", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Adjustable Inserters mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": ["base >= 1.1.0"], + "description": "Adds a GUI for customising inserter pickup/drop positions.\n\nAlso adds hot-keys.\n\nSHIFT + P: Change pickup range (Long inserters technology will allow short/long toggle.)\nSHIFT + O: Change drop range (Long inserters technology will allow short/long toggle.)\nSHIFT + L: Long Inserter toggle (Long inserters technology will allow short/long toggle on both input and output.)\nSHIFT + N: Drop location offset toggle (Near inserters technology will allow near/far side of belt toggle)\nCTRL + R: Change pickup rotation (4 step rotation by default, More inserters technology will unlock additional directions)\nSHIFT + E: Open GUI\n\nAll hotkeys can be remapped, and an option exists to open the GUI at the same time as the standard inserter GUI instead of with a hotkey.\nThis mod also adds in researches to unlock the more adjustment options.\n\nTutorial: https://www.youtube.com/watch?v=Zu9LmpZaVPg" +} diff --git a/bobinserters_1.1.7/locale/en/bobinserters.cfg b/bobinserters/locale/en/bobinserters.cfg similarity index 100% rename from bobinserters_1.1.7/locale/en/bobinserters.cfg rename to bobinserters/locale/en/bobinserters.cfg diff --git a/bobinserters/locale/ru/bobinserters.cfg b/bobinserters/locale/ru/bobinserters.cfg new file mode 100644 index 00000000..9c095e23 --- /dev/null +++ b/bobinserters/locale/ru/bobinserters.cfg @@ -0,0 +1,56 @@ +[controls] +bob-inserter-drop-range=Π Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ части. +bob-inserter-pickup-range=Π Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΎΠΉ части. +bob-inserter-near=Π Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ смСщСниС +bob-inserter-long=Π Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΉ/ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΎΠΉ частСй (Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ) +bob-inserter-pickup-rotate=Π Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΎΠΉ части. +bob-inserter-drop-rotate=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мСсто сброса +bob-inserter-open-gui=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ настройки. + +[gui] +bob-inserter-pickup=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ. +bob-inserter-drop=Π’Ρ‹Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ. +bob-inserter-offset=Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅. +bob-logistics-enabled=Π’Ρ‹Π±ΠΎΡ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ манипулятора. +bob-logistics-long=Π”Π»ΠΈΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Π° манипулятора. +bob-logistics-pickup=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ дальшС. +bob-logistics-drop=Π’Ρ‹Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ дальшС. +bob-logistics-near=Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π±Π»ΠΈΠΆΠ΅. +bob-logistics-enabled2=ГрафичСская настройка манипулятора. +bob-inserter-open-gui=Настройка манипулятора. +bob-inserter-gui=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ настройки интСрфСйса +bob-named-inserter-gui=ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ __1__ + +[technology-name] +long-inserters=Π”Π»ΠΈΠ½Π° манипулятора. +near-inserters=Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ манипулятора. +more-inserters=ΠŸΠΎΠ»Π½Ρ‹ΠΉ манипулятор. + +[technology-description] +long-inserters=ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚Π° манипулятора. +near-inserters=ДобавляСт смСщСниС манипулятора. +more-inserters=ДобавляСт большС Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΎΠΊ манипулятора. + + +[mod-setting-name] +bobmods-inserters-long2=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ манипуляторы 2 +bobmods-inserters-more2=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ манипулятор 2. +bobmods-inserters-show-window=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки манипулятора +bobmods-inserters-gui-position=ПолоТСниС ΠΎΠΊΠ½Π° настройки манипулятора + +[mod-setting-description] +bobmods-inserters-long2=Если Π²ΠΊΠ»., Ρ‚ΠΎ добавляСт исслСдованиС Π΄Π»ΠΈΠ½Ρ‹ манипулятора. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‚Π° Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… манипуляторов. +bobmods-inserters-more2=Если Π²ΠΊΠ»., Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ исслСдованиС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ манипулятора. ДобавляСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ возмоТности Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ. +bobmods-inserters-show-window=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ настройки манипулятора. +bobmods-inserters-gui-position=Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΠΊΠ½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ манипуляторов ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ. + + +[string-mod-setting] +bobmods-inserters-show-window-off=Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ +bobmods-inserters-show-window-left=Π›Π΅Π²ΠΎ +bobmods-inserters-show-window-top=Π’Π΅Ρ€Ρ… +bobmods-inserters-gui-position-off=Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ +bobmods-inserters-gui-position-left=Π›Π΅Π²ΠΎ +bobmods-inserters-gui-position-right=ΠŸΡ€Π°Π²ΠΎ +bobmods-inserters-gui-position-top=Π’Π΅Ρ€Ρ… +bobmods-inserters-gui-position-bottom=Низ diff --git a/bobinserters_1.1.7/prototypes/styles.lua b/bobinserters/prototypes/styles.lua similarity index 100% rename from bobinserters_1.1.7/prototypes/styles.lua rename to bobinserters/prototypes/styles.lua diff --git a/bobinserters_1.1.7/prototypes/technology-inserter.lua b/bobinserters/prototypes/technology-inserter.lua similarity index 100% rename from bobinserters_1.1.7/prototypes/technology-inserter.lua rename to bobinserters/prototypes/technology-inserter.lua diff --git a/bobinserters_1.1.7/settings.lua b/bobinserters/settings.lua similarity index 100% rename from bobinserters_1.1.7/settings.lua rename to bobinserters/settings.lua diff --git a/bobinserters/thumbnail.png b/bobinserters/thumbnail.png new file mode 100644 index 00000000..cfcc6b13 Binary files /dev/null and b/bobinserters/thumbnail.png differ diff --git a/bobinserters_1.1.7/changelog.txt b/bobinserters_1.1.7/changelog.txt deleted file mode 100644 index 1fa7eede..00000000 --- a/bobinserters_1.1.7/changelog.txt +++ /dev/null @@ -1,212 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.7 -Date: 02. 01. 2023 - Bugfixes: - - Fixed mod compatibility issue related to long inserter fast replaceable group #105 ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 01. 01. 2023 - Bugfixes: - - Fixed destroying root GUI element error #34 - - Fixed mod compatibility issue with upgradable Long handed inserters #41 - - Fixed compatibility with non adjustable inserters #101 - Changes: - - Moved Long inserters 2 to blue science #51 - - Add Long inserters 1 setting #25 ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 06. 06. 2022 - Bugfixes: - - Fixed error that could occur when opening inserter gui #6 - - Fixed error that could occur with Editor Extensions #21 - - Fixed minor typo in setting description #26 - Changes: - - Allow long handed inserter to fast replace other inserter types #8 - - Tidied up technology prerequisites #12 - - Add setting to remove configuration button from top left #26 ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 25. 11. 2020 - Info: - - Updated to work with Factorio 1.1 - Changes: - - The Inserter customisation window now docks with the normal inserter window when you click on an inserter. You can choose which side in per player settings (Off is also an option) ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 13. 10. 2020 - Bugfixes: - - Fixed minor issue where offset could be lost when rotating drop position. (This includes pre-place options with a drop position not in the vertical center line) ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 17. 08. 2020 - Info: - - Updated to 1.0 with no changes ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 07. 06. 2020 - Changes: - - Updated header/button filler styles - - GUI Style update for 0.18.27 - - Added inserter preview window to the center GUI. - - Updated locale method to display inserter name correctly. - - Updated Locale entries to refer to the GUIs as Windows. - - Internal code restructure to make things easier to read. - Bugfixes: - - Fixed issue where the drop offset wouldn't be calculated correctly when using using the top menu in inserter configuration mode to place an inserter before researching near inserters. - Features: - - Added Drop position rotation key combination CTRL + Shift + R as default. (Made possible by the internal restructure) ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 30. 04. 2020 - Bugfixes: - - Fixed Factorio 0.18.21 start-up crash ---------------------------------------------------------------------------------------------------- -Version: 0.18.2 -Date: 27. 04. 2020 - Bugfixes: - - Fixed issue where hand overrides wouldn't be applied to the placed inserter if it was your last inserter (Hand became empty by placing it) ---------------------------------------------------------------------------------------------------- -Version: 0.18.1 -Date: 12. 03. 2020 - Changes: - - Updated the inserter hand position overrides to explicitly check for holding the item (or ghost) of the inserter being placed. (Still messes up if you press undo while holding the restored entity) ---------------------------------------------------------------------------------------------------- -Version: 0.18.0 -Date: 23. 01. 2020 - Info: - - Updated to work with Factorio 0.18 - Features: - - Added an event when inserter positions are changed, detailed here: https://forums.factorio.com/viewtopic.php?p=474709#p474709 ---------------------------------------------------------------------------------------------------- -Version: 0.17.10 -Date: 08. 08. 2019 - Features: - - The Center screen GUI is now movable. Requires Factorio 0.17.59. ---------------------------------------------------------------------------------------------------- -Version: 0.17.9 -Date: 15. 07. 2019 - Bugfixes: - - Fixed crash in even more GUI open/close situations. ---------------------------------------------------------------------------------------------------- -Version: 0.17.8 -Date: 15. 07. 2019 - Bugfixes: - - Fixed crash in certain GUI open/close situations. - Changes: - - Minor GUI update. ---------------------------------------------------------------------------------------------------- -Version: 0.17.7 -Date: 11. 07. 2019 - Changes: - - GUI style update to 0.17 standards (and HR too) - Bugfixes: - - Fixed GUI close event. (should be able to once again close the inserter GUI by pressing E or ESC) ---------------------------------------------------------------------------------------------------- -Version: 0.17.6 -Date: 03. 07. 2019 - Bugfixes: - - Minor change to improve compatabillity with miniloaders. ---------------------------------------------------------------------------------------------------- -Version: 0.17.5 -Date: 23. 04. 2019 - Bugfixes: - - Fixed some minor GUI errors that could cause a crash in specific situations. ---------------------------------------------------------------------------------------------------- -Version: 0.17.4 -Date: 22. 04. 2019 - Features: - - Removed the option, the GUI now just opens with Shift + E in the center and with the main GUI on the left. ---------------------------------------------------------------------------------------------------- -Version: 0.17.3 -Date: 22. 03. 2019 - Features: - - Added an option to choose if the Inserter configuration GUI opens with Shift + E as of 0.17.1 and older, or with the main GUI as of 0.17.2. Default will be old method. ---------------------------------------------------------------------------------------------------- -Version: 0.17.2 -Date: 21. 03. 2019 - Changes: - - GUI opens on left when you left click an inserter, opening together with base game inserter GUI instead of point to it and press Shift + E ---------------------------------------------------------------------------------------------------- -Version: 0.17.1 -Date: 26. 02. 2019 - Bugfixes: - - Fixed game breaking error when placing with a ghost inserter in hand. ---------------------------------------------------------------------------------------------------- -Version: 0.17.0 -Date: 26. 02. 2019 - Info: - - Updated to work with Factorio 0.17 without any changes ---------------------------------------------------------------------------------------------------- -Version: 0.16.8 -Date: 12. 04. 2018 - Changes: - - Changed technology unlocks to the following: - - Logistics -> Near/Long - - Logistics 2 -> More - - Logistics 3 -> Long2/More2 - Features: - - added remote.call("bobinserters", "blacklist_inserter", inserter_name) to prevent inserter configuration from being able to configure this inserter - - added remote.call("bobinserters", "blacklist_inserters", table_of_inserter_names) same as above for multiple entries at once. ---------------------------------------------------------------------------------------------------- -Version: 0.16.7 -Date: 25. 03. 2018 - Bugfixes: - - Added a check to not apply an inserter over-ride if an entity is revived. ---------------------------------------------------------------------------------------------------- -Version: 0.16.6 -Date: 11. 03. 2018 - Changes: - - Changed hotkey defaults: - - Pickup range (SHIFT + P) changes pickup tile range distance. - - Drop range (SHIFT + O) changes drop tile range distance. - - Drop offset (near) (SHIFT + N) changes drop tile offset distance. - - Long range (SHIFT + L) changes both the pickup and drop tile distance to toggle long handed inserter mode. ---------------------------------------------------------------------------------------------------- -Version: 0.16.5 -Date: 03. 02. 2018 - Changes: - - Changed the top-bar button to use the mod-gui standard. ---------------------------------------------------------------------------------------------------- -Version: 0.16.4 -Date: 21. 01. 2018 - Bugfixes: - - Fixed Inserter pre-place GUI not using the right offset location if near isn't researched. ---------------------------------------------------------------------------------------------------- -Version: 0.16.3 -Date: 01. 01. 2018 - Bugfixes: - - Added an extra check to avoid possible crashes in on_gui_checked_state_changed event ---------------------------------------------------------------------------------------------------- -Version: 0.16.2 -Date: 28. 12. 2017 - Changes: - - Added GUI locale entries from Logistics mod. - - Added support for close button to close the GUI ---------------------------------------------------------------------------------------------------- -Version: 0.16.1 -Date: 20. 12. 2017 - Bugfixes: - - Added missing function set_range - - Corrected an offset constant reference to bobmods.inserters.offset ---------------------------------------------------------------------------------------------------- -Version: 0.16.0 -Date: 19. 12. 2017 - Changes: - - replace colspan with column_count - - removed style = "button_style" from the okay button (it's the default, but for some reason setting it manually caused an error) - Features: - - Added pre-place button from Logistics mod. ---------------------------------------------------------------------------------------------------- -Version: 0.15.1 -Date: 01. 06. 2017 - Changes: - - Change rotate default from SHIFT + R to CTRL + R as the former is used for reverse rotate now - Bugfixes: - - Add fix for Factorio version 0.15.17 - Features: - - Added config options to turn off long2 and more2 research. ---------------------------------------------------------------------------------------------------- -Version: 0.15.0 -Date: 25. 04. 2017 - Info: - - Updated to work with Factorio 0.15 without any changes diff --git a/bobinserters_1.1.7/control.lua b/bobinserters_1.1.7/control.lua deleted file mode 100644 index b8d5b30e..00000000 --- a/bobinserters_1.1.7/control.lua +++ /dev/null @@ -1,2002 +0,0 @@ -local mod_gui = require("mod-gui") - -function gui_add_title(gui, title, button_name, drag_target) - gui.add({ type = "flow", name = "title_flow" }) - gui.title_flow.add({ type = "label", name = "title", style = "frame_title", caption = title }) - gui.title_flow.add({ type = "empty-widget", name = "filler", style = "bob_draggable_header" }) - gui.title_flow.add({ - type = "sprite-button", - name = button_name, - style = "frame_action_button", - sprite = "utility/close_white", - }) - if drag_target then - gui.title_flow.title.drag_target = gui - gui.title_flow.filler.drag_target = gui - end -end - -if not bobmods then - bobmods = {} -end -if not bobmods.inserters then - bobmods.inserters = {} -end -if not bobmods.logistics then - bobmods.logistics = {} -end -if not bobmods.logistics.inserters then - bobmods.logistics.inserters = {} -end -if not bobmods.math then - bobmods.math = {} -end - -function bobmods.math.mod(number, div) - if number < 0 then - local newnumber = 0 - number - local mod = newnumber % div - return 0 - mod - else - return number % div - end -end - -function bobmods.math.floor(number) - local num - if number < 0 then - num = number - 0.1 - else - num = number + 0.1 - end - return math.floor(num - bobmods.math.mod(num, 1)) -end - -function bobmods.math.round(number) - local num - if number < 0 then - num = number - 0.5 - else - num = number + 0.5 - end - return math.floor(num - bobmods.math.mod(num, 1)) -end - -function bobmods.math.offset(number) - local num = bobmods.math.mod(number, 1) - if num < 0 then - if num > -0.5 then - return num - else - return num + 1 - end - else - if num < 0.5 then - return num - else - return num - 1 - end - end -end - -bobmods.inserters.long_technology = "long-inserters-1" -bobmods.inserters.long2_technology = "long-inserters-2" -bobmods.inserters.near_technology = "near-inserters" -bobmods.inserters.more_technology = "more-inserters-1" -bobmods.inserters.more2_technology = "more-inserters-2" -bobmods.inserters.offset = 0.2 -changed_position_event = script.generate_event_name() - -bobmods.inserters.range1_4way = { - table = { - { x = 0, y = -1 }, - { x = 1, y = 0 }, - { x = 0, y = 1 }, - { x = -1, y = 0 }, - }, - steps = 4, -} - -bobmods.inserters.range1_8way = { - table = { - { x = 0, y = -1 }, - { x = 1, y = -1 }, - { x = 1, y = 0 }, - { x = 1, y = 1 }, - { x = 0, y = 1 }, - { x = -1, y = 1 }, - { x = -1, y = 0 }, - { x = -1, y = -1 }, - }, - steps = 8, -} - -bobmods.inserters.range2_4way = { - table = { - { x = 0, y = -2 }, - { x = 2, y = 0 }, - { x = 0, y = 2 }, - { x = -2, y = 0 }, - }, - steps = 4, -} - -bobmods.inserters.range2_8way = { - table = { - { x = 0, y = -2 }, - { x = 2, y = -2 }, - { x = 2, y = 0 }, - { x = 2, y = 2 }, - { x = 0, y = 2 }, - { x = -2, y = 2 }, - { x = -2, y = 0 }, - { x = -2, y = -2 }, - }, - steps = 8, -} - -bobmods.inserters.range2_16way = { - table = { - { x = 0, y = -2 }, - { x = 1, y = -2 }, - { x = 2, y = -2 }, - { x = 2, y = -1 }, - { x = 2, y = 0 }, - { x = 2, y = 1 }, - { x = 2, y = 2 }, - { x = 1, y = 2 }, - { x = 0, y = 2 }, - { x = -1, y = 2 }, - { x = -2, y = 2 }, - { x = -2, y = 1 }, - { x = -2, y = 0 }, - { x = -2, y = -1 }, - { x = -2, y = -2 }, - { x = -1, y = -2 }, - }, - steps = 16, -} - -bobmods.inserters.range3_4way = { - table = { - { x = 0, y = -3 }, - { x = 3, y = 0 }, - { x = 0, y = 3 }, - { x = -3, y = 0 }, - }, - steps = 4, -} - -bobmods.inserters.range3_8way = { - table = { - { x = 0, y = -3 }, - { x = 3, y = -3 }, - { x = 3, y = 0 }, - { x = 3, y = 3 }, - { x = 0, y = 3 }, - { x = -3, y = 3 }, - { x = -3, y = 0 }, - { x = -3, y = -3 }, - }, - steps = 8, -} - -bobmods.inserters.range3_24way = { - table = { - { x = 0, y = -3 }, - { x = 1, y = -3 }, - { x = 2, y = -3 }, - { x = 3, y = -3 }, - { x = 3, y = -2 }, - { x = 3, y = -1 }, - { x = 3, y = 0 }, - { x = 3, y = 1 }, - { x = 3, y = 2 }, - { x = 3, y = 3 }, - { x = 2, y = 3 }, - { x = 1, y = 3 }, - { x = 0, y = 3 }, - { x = -1, y = 3 }, - { x = -2, y = 3 }, - { x = -3, y = 3 }, - { x = -3, y = 2 }, - { x = -3, y = 1 }, - { x = -3, y = 0 }, - { x = -3, y = -1 }, - { x = -3, y = -2 }, - { x = -3, y = -3 }, - { x = -2, y = -3 }, - { x = -1, y = -3 }, - }, - steps = 24, -} - -bobmods.inserters.positions = { - { x = -2, y = -2 }, - { x = -1, y = -2 }, - { x = 0, y = -2 }, - { x = 1, y = -2 }, - { x = 2, y = -2 }, - - { x = -2, y = -1 }, - { x = -1, y = -1 }, - { x = 0, y = -1 }, - { x = 1, y = -1 }, - { x = 2, y = -1 }, - - { x = -2, y = 0 }, - { x = -1, y = 0 }, - { x = 0, y = 0 }, - { x = 1, y = 0 }, - { x = 2, y = 0 }, - - { x = -2, y = 1 }, - { x = -1, y = 1 }, - { x = 0, y = 1 }, - { x = 1, y = 1 }, - { x = 2, y = 1 }, - - { x = -2, y = 2 }, - { x = -1, y = 2 }, - { x = 0, y = 2 }, - { x = 1, y = 2 }, - { x = 2, y = 2 }, - - { x = -3, y = -3 }, - { x = -2, y = -3 }, - { x = -1, y = -3 }, - { x = 0, y = -3 }, - { x = 1, y = -3 }, - { x = 2, y = -3 }, - { x = 3, y = -3 }, - - { x = -3, y = -2 }, - { x = 3, y = -2 }, - - { x = -3, y = -1 }, - { x = 3, y = -1 }, - - { x = -3, y = 0 }, - { x = 3, y = 0 }, - - { x = -3, y = 1 }, - { x = 3, y = 1 }, - - { x = -3, y = 2 }, - { x = 3, y = 2 }, - - { x = -3, y = 3 }, - { x = -2, y = 3 }, - { x = -1, y = 3 }, - { x = 0, y = 3 }, - { x = 1, y = 3 }, - { x = 2, y = 3 }, - { x = 3, y = 3 }, -} - -bobmods.inserters.offset_positions = { - { x = -bobmods.inserters.offset, y = -bobmods.inserters.offset }, - { x = 0, y = -bobmods.inserters.offset }, - { x = bobmods.inserters.offset, y = -bobmods.inserters.offset }, - - { x = -bobmods.inserters.offset, y = 0 }, - { x = 0, y = 0 }, - { x = bobmods.inserters.offset, y = 0 }, - - { x = -bobmods.inserters.offset, y = bobmods.inserters.offset }, - { x = 0, y = bobmods.inserters.offset }, - { x = bobmods.inserters.offset, y = bobmods.inserters.offset }, -} - -bobmods.logistics.inserters.range1 = { - pickup = { - { x = 0, y = -1 }, - { x = 1, y = 0 }, - { x = 0, y = 1 }, - { x = -1, y = 0 }, - }, - drop = { - { x = 0, y = 1 }, - { x = -1, y = 0 }, - { x = 0, y = -1 }, - { x = 1, y = 0 }, - }, -} - -bobmods.logistics.inserters.range2 = { - pickup = { - { x = 0, y = -2 }, - { x = 2, y = 0 }, - { x = 0, y = 2 }, - { x = -2, y = 0 }, - }, - drop = { - { x = 0, y = 2 }, - { x = -2, y = 0 }, - { x = 0, y = -2 }, - { x = 2, y = 0 }, - }, -} - -bobmods.logistics.inserters.offset_positions = { - near = { - { x = 0, y = -bobmods.inserters.offset }, - { x = bobmods.inserters.offset, y = 0 }, - { x = 0, y = bobmods.inserters.offset }, - { x = -bobmods.inserters.offset, y = 0 }, - }, - far = { - { x = 0, y = bobmods.inserters.offset }, - { x = -bobmods.inserters.offset, y = 0 }, - { x = 0, y = -bobmods.inserters.offset }, - { x = bobmods.inserters.offset, y = 0 }, - }, -} - -function bobmods.inserters.create_global_table_basic() - if not global then - global = {} - end - if not global.bobmods then - global.bobmods = {} - end - if not global.bobmods.inserters then - global.bobmods.inserters = {} - end - if not global.bobmods.inserters.blacklist then - global.bobmods.inserters.blacklist = {} - end -end - -function bobmods.inserters.create_global_table(player_index) - bobmods.inserters.create_global_table_basic() - if not global.bobmods.inserters[player_index] then - global.bobmods.inserters[player_index] = {} - end - - if not global.bobmods.logistics then - global.bobmods.logistics = {} - end - if not global.bobmods.logistics[player_index] then - global.bobmods.logistics[player_index] = {} - end - - if not global.bobmods.logistics[player_index].enabled then - global.bobmods.logistics[player_index].enabled = false - end - if not global.bobmods.logistics[player_index].long_in then - global.bobmods.logistics[player_index].long_in = false - end - if not global.bobmods.logistics[player_index].long_out then - global.bobmods.logistics[player_index].long_out = false - end - if not global.bobmods.logistics[player_index].near then - global.bobmods.logistics[player_index].near = false - end - if not global.bobmods.logistics[player_index].show then - global.bobmods.logistics[player_index].show = false - end - - if not global.bobmods.logistics[player_index].enabled2 then - global.bobmods.logistics[player_index].enabled2 = false - end - if not global.bobmods.logistics[player_index].pickup then - global.bobmods.logistics[player_index].pickup = 18 - end - if not global.bobmods.logistics[player_index].drop then - global.bobmods.logistics[player_index].drop = 8 - end - if not global.bobmods.logistics[player_index].offset then - global.bobmods.logistics[player_index].offset = 2 - end -end - -script.on_event("bob-inserter-pickup-rotate", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.rotate_pickup(entity, player) - end -end) - -script.on_event("bob-inserter-drop-rotate", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.rotate_drop(entity, player) - end -end) - -script.on_event("bob-inserter-pickup-range", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.pickup_range(entity, player) - end -end) - -script.on_event("bob-inserter-drop-range", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.drop_range(entity, player) - end -end) - -script.on_event("bob-inserter-long", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.long_range(entity, player) - end -end) - -script.on_event("bob-inserter-near", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - bobmods.inserters.near_range(entity, player) - end -end) - -script.on_event("bob-inserter-open-gui", function(event) - local player = game.players[event.player_index] - local entity = player.selected - if - entity - and entity.type == "inserter" - and player.can_reach_entity(entity) - and not global.bobmods.inserters.blacklist[entity.name] - then - global.bobmods.inserters[event.player_index].position = "center" - bobmods.inserters.open_gui(entity, player) - else - bobmods.inserters.delete_gui(event.player_index) - end -end) - -script.on_event(defines.events.on_gui_opened, function(event) - local player = game.players[event.player_index] - if - event.gui_type == defines.gui_type.entity - and event.entity - and event.entity.type == "inserter" - and settings.get_player_settings(player)["bobmods-inserters-gui-position"].value ~= "off" - then - if event.entity.prototype.allow_custom_vectors and not global.bobmods.inserters.blacklist[event.entity.name] then - global.bobmods.inserters[event.player_index].position = "left" - bobmods.inserters.open_gui(event.entity, player) - else - bobmods.inserters.delete_gui(event.player_index) - end - end -end) - -script.on_event(defines.events.on_gui_closed, function(event) - -- this is checking for what GUI was just told to close. as we want to delete only when closing my GUI, or when closing the inserters GUI IF not opening mine. - if - global.bobmods.inserters[event.player_index].position == "center" - and event.gui_type == defines.gui_type.custom - and event.element - and event.element.valid --the GUI actually exists. - and event.element.name == "bob_inserter_gui" - then - bobmods.inserters.delete_gui(event.player_index) - end -end) - -script.on_event(defines.events.on_gui_checked_state_changed, function(event) - local player = game.players[event.player_index] - local entity = global.bobmods.inserters[event.player_index].entity - - if event.element.valid then - if event.element.name == "bob_logistics_inserter_enabled" then - global.bobmods.logistics[event.player_index].enabled = event.element.state - if event.element.state then - global.bobmods.logistics[event.player_index].enabled2 = false - end - bobmods.logistics.create_gui(event.player_index) - elseif event.element.name == "bob_logistics_inserter_long_in" then - global.bobmods.logistics[event.player_index].long_in = event.element.state - elseif event.element.name == "bob_logistics_inserter_long_out" then - global.bobmods.logistics[event.player_index].long_out = event.element.state - elseif event.element.name == "bob_logistics_inserter_near" then - global.bobmods.logistics[event.player_index].near = event.element.state - elseif event.element.name == "bob_logistics_inserter_enabled2" then - global.bobmods.logistics[event.player_index].enabled2 = event.element.state - if event.element.state then - global.bobmods.logistics[event.player_index].enabled = false - end - bobmods.logistics.create_gui(event.player_index) - elseif string.sub(event.element.name, 1, 6) == "button" then - local i = string.gsub(event.element.name, "button", "") + 0 - - if event.element.parent.name == "bob_logistics_pickup" then - remote.call("bobinserters", "draw_button_position_check", { gui = event.element.parent, position = i }) - global.bobmods.logistics[event.player_index].pickup = i - elseif event.element.parent.name == "bob_logistics_drop" then - remote.call("bobinserters", "draw_button_position_check", { gui = event.element.parent, position = i }) - global.bobmods.logistics[event.player_index].drop = i - elseif event.element.parent.name == "bob_logistics_offset" then - remote.call("bobinserters", "draw_button_offset_check", { gui = event.element.parent, position = i }) - global.bobmods.logistics[event.player_index].offset = i - elseif entity and entity.valid and player.can_reach_entity(entity) then - if event.element.parent.name == "bob_inserter_gui_pickup" then - bobmods.inserters.gui_pickup_click(entity, event.element) - elseif event.element.parent.name == "bob_inserter_gui_drop" then - bobmods.inserters.gui_drop_click(entity, event.element) - elseif event.element.parent.name == "bob_inserter_gui_offset" then - bobmods.inserters.gui_offset_click(entity, event.element) - end - else - bobmods.inserters.delete_gui(event.player_index) - end - end - end -end) - -script.on_event(defines.events.on_gui_click, function(event) - local player = game.players[event.player_index] - local entity = global.bobmods.inserters[event.player_index].entity - if event.element.valid then - if entity and entity.valid and player.can_reach_entity(entity) then - if event.element.name == "bob_inserter_gui_close" then - bobmods.inserters.delete_gui(event.player_index) - end - else - bobmods.inserters.delete_gui(event.player_index) - end - end - - if event.element.valid and event.element.name == "bob_logistics_inserter_button" then - if global.bobmods.logistics[event.player_index].show then - global.bobmods.logistics[event.player_index].show = false - else - global.bobmods.logistics[event.player_index].show = true - end - bobmods.logistics.show_gui_options(event.player_index) - end -end) - -script.on_event(defines.events.on_player_rotated_entity, function(event) - local player = game.players[event.player_index] - local entity = global.bobmods.inserters[event.player_index].entity - if entity == event.entity and player.can_reach_entity(entity) then - if global.bobmods.inserters[player.index].gui and global.bobmods.inserters[player.index].gui.valid then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end - end -end) - -script.on_event(defines.events.on_tick, function(event) - if game.tick % 20 == 0 then - if global and global.bobmods and global.bobmods.inserters then - for i, player in pairs(game.connected_players) do - if global.bobmods.inserters[player.index] then - local entity = global.bobmods.inserters[player.index].entity - if entity and (not entity.valid or not player.can_reach_entity(entity)) then - bobmods.inserters.delete_gui(player.index) - end - else - bobmods.inserters.create_global_table(player.index) -- Create for this specific online player. - end - end - else - for index, player in pairs(game.players) do -- Create for all if there are none. - bobmods.inserters.create_global_table(index) - end - end - end -end) - -script.on_configuration_changed(function(event) - for i, player in pairs(game.players) do - bobmods.inserters.create_global_table(player.index) - if player.gui.center.bob_inserter_gui then - player.gui.center.bob_inserter_gui.destroy() - end - bobmods.inserters.delete_gui(player.index) - bobmods.logistics.create_gui_button(player.index) - player.gui.center.visible = true - end -end) - -script.on_init(function(event) - for i, player in pairs(game.players) do - bobmods.inserters.create_global_table(player.index) - bobmods.logistics.create_gui_button(player.index) - end -end) - -script.on_event(defines.events.on_player_created, function(event) - bobmods.inserters.create_global_table(event.player_index) - bobmods.logistics.create_gui_button(event.player_index) -end) - -script.on_event(defines.events.on_player_joined_game, function(event) - bobmods.inserters.create_global_table(event.player_index) - bobmods.logistics.create_gui_button(event.player_index) -end) - -script.on_event(defines.events.on_research_finished, function(event) - if - event.research.name == bobmods.inserters.long_technology - or event.research.name == bobmods.inserters.long2_technology - or event.research.name == bobmods.inserters.near_technology - or event.research.name == bobmods.inserters.more_technology - or event.research.name == bobmods.inserters.more2_technology - then - for i, player in pairs(event.research.force.players) do - local entity = global.bobmods.inserters[player.index].entity - if entity and entity.valid and player.can_reach_entity(entity) then - bobmods.inserters.open_gui(entity, player) - end - bobmods.logistics.show_gui_options(player.index) - end - end -end) - -script.on_event(defines.events.on_built_entity, function(event) - local player = game.players[event.player_index] - local entity = event.created_entity - - local entity_name = entity.name - if entity.type == "entity-ghost" then - entity_name = entity.ghost_name - end - - if - event.item - and event.item.place_result - and event.item.place_result.type == "inserter" - and (entity.type == "inserter" or (entity.type == "entity-ghost" and entity.ghost_type == "inserter")) - and event.item.place_result.name == entity_name --probably don't even need this line anymore. - and not global.bobmods.inserters.blacklist[entity_name] - then - bobmods.logistics.set_positions(entity, event.player_index) - end -end) - -script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - if event.setting == "bobmods-inserters-button-enable" then - bobmods.logistics.create_gui_button(event.player_index) - end -end) - -function tech_unlocked(force, tech) - if force.technologies[tech] then - return force.technologies[tech].researched - end -end - -function get_pickup_position(entity) - return { x = entity.pickup_position.x - entity.position.x, y = entity.pickup_position.y - entity.position.y } -end - -function get_drop_position(entity) - return { x = entity.drop_position.x - entity.position.x, y = entity.drop_position.y - entity.position.y } -end - -function split_drop_position(full_drop_position) - local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } - local drop_offset = { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } - return drop_position, drop_offset -end - -function get_split_drop_position(entity) - local full_drop_position = get_drop_position(entity) - local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } - local drop_offset = { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } - return drop_position, drop_offset -end - -function get_drop_tile_position(entity) - local full_drop_position = get_drop_position(entity) - return { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } -end - -function get_drop_offset_position(entity) - local full_drop_position = get_drop_position(entity) - return { x = bobmods.math.offset(full_drop_position.x), y = bobmods.math.offset(full_drop_position.y) } -end - -function combine_drop_position(drop_position, drop_offset) - return { x = drop_position.x + drop_offset.x, y = drop_position.y + drop_offset.y } -end - -function set_pickup_position(entity, newpos) - local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } - local new_positions = { - drop_position = entity.drop_position, - pickup_position = { x = entity.position.x + newpos.x, y = entity.position.y + newpos.y }, - } - entity.pickup_position = new_positions.pickup_position - entity.direction = entity.direction -- set direction to force update - script.raise_event( - changed_position_event, - { entity = entity, new_positions = new_positions, original_positions = original_positions } - ) -- Raise positions changed event. -end - -function set_drop_position(entity, newpos) - local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } - local new_positions = { - drop_position = { x = entity.position.x + newpos.x, y = entity.position.y + newpos.y }, - pickup_position = entity.pickup_position, - } - entity.drop_position = new_positions.drop_position - entity.direction = entity.direction -- set direction to force update - script.raise_event( - changed_position_event, - { entity = entity, new_positions = new_positions, original_positions = original_positions } - ) -- Raise positions changed event. -end - -function set_split_drop_position(entity, new_position, new_offset) - return set_drop_position(entity, combine_drop_position(new_position, new_offset)) -end - -function set_both_positions(entity, newpickup, newdrop) - local original_positions = { drop_position = entity.drop_position, pickup_position = entity.pickup_position } - local new_positions = { - drop_position = { x = entity.position.x + newdrop.x, y = entity.position.y + newdrop.y }, - pickup_position = { x = entity.position.x + newpickup.x, y = entity.position.y + newpickup.y }, - } - entity.drop_position = new_positions.drop_position - entity.pickup_position = new_positions.pickup_position - entity.direction = entity.direction -- set direction to force update - script.raise_event( - changed_position_event, - { entity = entity, new_positions = new_positions, original_positions = original_positions } - ) -- Raise positions changed event. -end - -function check_position(pos1, pos2) - local pos = {} - pos.x = pos1.x - pos2.x - pos.y = pos1.y - pos2.y - if pos.x < 0 then - pos.x = 0 - pos.x - end - if pos.y < 0 then - pos.y = 0 - pos.y - end - if pos.x < 0.1 and pos.y < 0.1 then - return true - else - return false - end -end - -function bobmods.inserters.normalise_tile_offset(tile_offset) - local new_offset = { x = 0, y = 0 } - if tile_offset.x > 0.01 then - new_offset.x = bobmods.inserters.offset - end - if tile_offset.x < -0.01 then - new_offset.x = -bobmods.inserters.offset - end - if tile_offset.y > 0.01 then - new_offset.y = bobmods.inserters.offset - end - if tile_offset.y < -0.01 then - new_offset.y = -bobmods.inserters.offset - end - return new_offset -end - -function bobmods.logistics.set_range(position_in, range) - local position = { x = 0, y = 0 } - if position_in.x > 0.1 then - position.x = range - elseif position_in.x < -0.1 then - position.x = -range - else - position.x = 0 - end - if position_in.y > 0.1 then - position.y = range - elseif position_in.y < -0.1 then - position.y = -range - else - position.y = 0 - end - return position -end - -function calculate_new_drop_offset(drop_position, drop_offset, new_position) - local new_offset = { x = drop_offset.x, y = drop_offset.y } - - if (drop_position.x > 0 and new_position.x < 0) or (drop_position.x < 0 and new_position.x > 0) then - new_offset.x = 0 - drop_offset.x - elseif drop_position.x == 0 and new_position.x ~= 0 then - if (new_position.x > 0 and drop_position.y > 0) or (new_position.x < 0 and drop_position.y < 0) then - new_offset.x = drop_offset.y - else - new_offset.x = 0 - drop_offset.y - end - elseif drop_position.x ~= 0 and new_position.x == 0 then - new_offset.x = 0 - end - - if (drop_position.y > 0 and new_position.y < 0) or (drop_position.y < 0 and new_position.y > 0) then - new_offset.y = 0 - drop_offset.y - elseif drop_position.y == 0 and new_position.y ~= 0 then - if (new_position.y > 0 and drop_position.x > 0) or (new_position.y < 0 and drop_position.x < 0) then - new_offset.y = drop_offset.x - else - new_offset.y = 0 - drop_offset.x - end - elseif drop_position.y ~= 0 and new_position.y == 0 then - new_offset.y = 0 - end - - return bobmods.inserters.normalise_tile_offset(new_offset) -end - -function bobmods.logistics.set_positions(entity, player_index) - if global.bobmods.logistics[player_index].enabled then - local force = game.players[player_index].force - local direction = (entity.direction / 2) + 1 - - local long_unlocked = tech_unlocked(force, bobmods.inserters.long_technology) - local more_unlocked = tech_unlocked(force, bobmods.inserters.more_technology) - local near_unlocked = tech_unlocked(force, bobmods.inserters.near_technology) - - local long_in = global.bobmods.logistics[player_index].long_in - local long_out = global.bobmods.logistics[player_index].long_out - local near = global.bobmods.logistics[player_index].near - - local pickup_position = get_pickup_position(entity) - local drop_position, drop_offset = get_split_drop_position(entity) - - if long_unlocked then - if more_unlocked then - if long_in then - pickup_position = bobmods.logistics.set_range(pickup_position, 2) - else - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - end - if long_out then - drop_position = bobmods.logistics.set_range(drop_position, 2) - else - drop_position = bobmods.logistics.set_range(drop_position, 1) - end - else - if long_in then - pickup_position = bobmods.logistics.set_range(pickup_position, 2) - drop_position = bobmods.logistics.set_range(drop_position, 2) - else - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - drop_position = bobmods.logistics.set_range(drop_position, 1) - end - end - end - - if near_unlocked then - if near then - drop_offset = bobmods.logistics.set_range(drop_position, -bobmods.inserters.offset) - else - drop_offset = bobmods.logistics.set_range(drop_position, bobmods.inserters.offset) - end - end - local full_drop_position = combine_drop_position(drop_position, drop_offset) - set_both_positions(entity, pickup_position, full_drop_position) - end - - if global.bobmods.logistics[player_index].enabled2 and remote.interfaces.bobinserters then - local pickup_position = - remote.call("bobinserters", "get_position", { position = global.bobmods.logistics[player_index].pickup }) - local drop_position = - remote.call("bobinserters", "get_position", { position = global.bobmods.logistics[player_index].drop }) - local drop_offset = - remote.call("bobinserters", "get_offset", { position = global.bobmods.logistics[player_index].offset }) - - local direction = (entity.direction / 2) - if direction == 2 then -- 2 is up, because inserters are backwards. - pickup_position = pickup_position - drop_position = drop_position - drop_offset = drop_offset - elseif direction == 3 then -- right - pickup_position = { x = -pickup_position.y, y = pickup_position.x } - drop_position = { x = -drop_position.y, y = drop_position.x } - drop_offset = { x = -drop_offset.y, y = drop_offset.x } - elseif direction == 0 then -- down - pickup_position = { x = -pickup_position.x, y = -pickup_position.y } - drop_position = { x = -drop_position.x, y = -drop_position.y } - drop_offset = { x = -drop_offset.x, y = -drop_offset.y } - elseif direction == 1 then -- left - pickup_position = { x = pickup_position.y, y = -pickup_position.x } - drop_position = { x = drop_position.y, y = -drop_position.x } - drop_offset = { x = drop_offset.y, y = -drop_offset.x } - end - - local near_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.near_technology) - if not near_unlocked then - local old_drop_position, old_drop_offset = get_split_drop_position(entity) - drop_offset = calculate_new_drop_offset(old_drop_position, old_drop_offset, drop_position) - end - local full_drop_position = combine_drop_position(drop_position, drop_offset) - set_both_positions(entity, pickup_position, full_drop_position) - end -end - -function bobmods.inserters.gui_pickup_click(entity, element) - local pickup_position = get_pickup_position(entity) - local i = string.gsub(element.name, "button", "") + 0 - pickup_position = bobmods.inserters.positions[i] - set_pickup_position(entity, pickup_position) - entity.direction = entity.direction -- set direction to force update - bobmods.inserters.draw_button_position_check(element.parent, pickup_position) -end - -function bobmods.inserters.gui_drop_click(entity, element) - local i = string.gsub(element.name, "button", "") + 0 - local new_position = bobmods.inserters.positions[i] - local drop_position, drop_offset = get_split_drop_position(entity) - local new_offset = calculate_new_drop_offset(drop_position, drop_offset, new_position) - set_split_drop_position(entity, new_position, new_offset) - entity.direction = entity.direction -- set direction to force update - bobmods.inserters.refresh_position_checkboxes(entity, game.players[element.player_index]) -end - -function bobmods.inserters.gui_offset_click(entity, element) - local i = string.gsub(element.name, "button", "") + 0 - new_offset = bobmods.inserters.offset_positions[i] - set_split_drop_position(entity, get_drop_tile_position(entity), new_offset) - entity.direction = entity.direction -- set direction to force update - bobmods.inserters.draw_button_offset_check(element.parent, new_offset) -end - -function bobmods.inserters.rotate_position(force, pickup_position) - local more_unlocked = tech_unlocked(force, bobmods.inserters.more_technology) - local more2_unlocked = tech_unlocked(force, bobmods.inserters.more2_technology) - local rotation = 1 - local position = { table = {}, steps = 0 } - - -- Decide which position table to use - if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then - if more2_unlocked then - position = bobmods.inserters.range3_24way - elseif more_unlocked then - position = bobmods.inserters.range3_8way - else - position = bobmods.inserters.range3_4way - end - elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then - if more2_unlocked then - position = bobmods.inserters.range2_16way - elseif more_unlocked then - position = bobmods.inserters.range2_8way - else - position = bobmods.inserters.range2_4way - end - else - if more_unlocked then - position = bobmods.inserters.range1_8way - else - position = bobmods.inserters.range1_4way - end - end - - -- Find current rotation - for i, new_position in ipairs(position.table) do - if check_position(pickup_position, new_position) then - rotation = i - end - end - -- Rotate - rotation = rotation + 1 - if rotation > position.steps then - rotation = rotation - position.steps - end - - return position.table[rotation] -end - -function bobmods.inserters.rotate_pickup(entity, player) - local pickup_position = get_pickup_position(entity) - pickup_position = bobmods.inserters.rotate_position(player.force, pickup_position) - set_pickup_position(entity, pickup_position) - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end -end - -function bobmods.inserters.rotate_drop(entity, player) - local drop_position, drop_offset = get_split_drop_position(entity) - local new_position = bobmods.inserters.rotate_position(player.force, drop_position) - local new_offset = calculate_new_drop_offset(drop_position, drop_offset, new_position) - set_split_drop_position(entity, new_position, new_offset) - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end -end - -function bobmods.inserters.pickup_range(entity, player) - local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) - local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) - local pickup_position = get_pickup_position(entity) - local islong = false - local islong2 = false - - if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then - islong2 = true - elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then - islong = true - end - - if long_unlocked or long2_unlocked then - if islong2 then - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - elseif islong then - if long2_unlocked then - pickup_position = bobmods.logistics.set_range(pickup_position, 3) - else - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - end - else - pickup_position = bobmods.logistics.set_range(pickup_position, 2) - end - set_pickup_position(entity, pickup_position) - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end - end -end - -function bobmods.inserters.drop_range(entity, player) - local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) - local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) - local drop_position, drop_offset = get_split_drop_position(entity) - local islong = false - local islong2 = false - - if drop_position.x > 2.1 or drop_position.x < -2.1 or drop_position.y > 2.1 or drop_position.y < -2.1 then - islong2 = true - elseif drop_position.x > 1.1 or drop_position.x < -1.1 or drop_position.y > 1.1 or drop_position.y < -1.1 then - islong = true - end - - if long_unlocked or long2_unlocked then - if islong2 then - drop_position = bobmods.logistics.set_range(drop_position, 1) - elseif islong then - if long2_unlocked then - drop_position = bobmods.logistics.set_range(drop_position, 3) - else - drop_position = bobmods.logistics.set_range(drop_position, 1) - end - else - drop_position = bobmods.logistics.set_range(drop_position, 2) - end - end - - set_split_drop_position(entity, drop_position, drop_offset) - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end -end - -function bobmods.inserters.long_range(entity, player) - local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) - local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) - - local pickup_position = get_pickup_position(entity) - local drop_position, drop_offset = get_split_drop_position(entity) - - local islong = false - local islong2 = false - - if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then - islong2 = true - elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then - islong = true - end - - if long_unlocked or long2_unlocked then - if islong2 then - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - drop_position = bobmods.logistics.set_range(drop_position, 1) - elseif islong then - if long2_unlocked then - pickup_position = bobmods.logistics.set_range(pickup_position, 3) - drop_position = bobmods.logistics.set_range(drop_position, 3) - else - pickup_position = bobmods.logistics.set_range(pickup_position, 1) - drop_position = bobmods.logistics.set_range(drop_position, 1) - end - else - pickup_position = bobmods.logistics.set_range(pickup_position, 2) - drop_position = bobmods.logistics.set_range(drop_position, 2) - end - end - - local full_drop_position = combine_drop_position(drop_position, drop_offset) - set_both_positions(entity, pickup_position, full_drop_position) - - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end -end - -function bobmods.inserters.near_range(entity, player) - local near_unlocked = tech_unlocked(player.force, bobmods.inserters.near_technology) - - local drop_position, drop_offset = get_split_drop_position(entity) - - if near_unlocked then - if - (drop_offset.x == 0 and drop_offset.y == 0) - or (drop_offset.x == 0 and drop_position.x ~= 0) - or (drop_offset.y == 0 and drop_position.y ~= 0) - then - drop_offset = bobmods.inserters.normalise_tile_offset({ x = drop_position.x, y = drop_position.y }) - else - if drop_position.x ~= 0 then - drop_offset.x = 0 - drop_offset.x - end - if drop_position.y ~= 0 then - drop_offset.y = 0 - drop_offset.y - end - end - - if - (drop_position.y ~= 0 and drop_position.x ~= 0) - and ( - ( - ((drop_position.x > 0 and drop_offset.x < 0) or (drop_offset.x > 0 and drop_position.x < 0)) -- x near - and ((drop_position.y > 0 and drop_offset.y > 0) or (drop_offset.y < 0 and drop_position.y < 0)) - ) -- y far - or ( - ((drop_position.x > 0 and drop_offset.x > 0) or (drop_offset.x < 0 and drop_position.x < 0)) -- x far - and ((drop_position.y > 0 and drop_offset.y < 0) or (drop_offset.y > 0 and drop_position.y < 0)) - ) -- y near - ) - then - drop_offset = bobmods.inserters.normalise_tile_offset({ x = drop_position.x, y = drop_position.y }) - end - end - - set_split_drop_position(entity, drop_position, drop_offset) - if entity == global.bobmods.inserters[player.index].entity then - bobmods.inserters.refresh_position_checkboxes(entity, player) - end -end - -function bobmods.logistics.destroy_gui_button(player_index) - local player = game.players[player_index] - - -- remove legacy GUI - if player.gui.top.bob_logistics_inserter_gui then - player.gui.top.bob_logistics_inserter_gui.destroy() - end - - -- remove legacy button - if player.gui.top.bob_logistics_inserter_button then - player.gui.top.bob_logistics_inserter_button.destroy() - end - - local gui = player.gui.top - local flow = gui.mod_gui_button_flow or (gui.mod_gui_top_frame and gui.mod_gui_top_frame.mod_gui_inner_frame) - - if flow and flow.bob_logistics_inserter_button then - flow.bob_logistics_inserter_button.destroy() - -- Remove empty frame if we're the only thing there, remove the parent frame if we just removed the only child - if #flow.children_names == 0 then - local parent = flow.parent - flow.destroy() - if parent and parent.name ~= "top" and #parent.children_names == 0 then - parent.destroy() - end - end - end -end - -function bobmods.logistics.create_gui_button(player_index) - bobmods.logistics.destroy_gui_button(player_index) - - local player = game.players[player_index] - - if not settings.get_player_settings(player)["bobmods-inserters-button-enable"].value then - return - end - - mod_gui.get_button_flow(player).add({ - type = "sprite-button", - name = "bob_logistics_inserter_button", - tooltip = { "gui.bob-inserter-open-gui" }, - sprite = "item/fast-inserter", - style = "mod_gui_button", - visible = settings.get_player_settings(player)["bobmods-inserters-button-enable"].value, - }) -end - -function bobmods.logistics.show_gui_options(player_index) - local player = game.players[player_index] - - if player.gui.left.bob_logistics_inserter_gui then - player.gui.left.bob_logistics_inserter_gui.destroy() - end - - if global.bobmods.logistics[player_index].show then - bobmods.logistics.create_gui(player_index) - end -end - -function bobmods.logistics.create_gui(player_index) - local player = game.players[player_index] - local long_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.long_technology) - local more_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.more_technology) - local near_unlocked = tech_unlocked(game.players[player_index].force, bobmods.inserters.near_technology) - - if player.gui.left.bob_logistics_inserter_gui then - player.gui.left.bob_logistics_inserter_gui.destroy() - end - - if not settings.get_player_settings(player)["bobmods-inserters-button-enable"].value then - return - end - - local gui = player.gui.left.add({ type = "frame", name = "bob_logistics_inserter_gui", direction = "vertical" }) - gui.style.bottom_padding = 8 - gui.style.vertically_stretchable = false - gui.style.horizontally_stretchable = false - - gui.add({ type = "table", name = "table", column_count = 1, style = "bob_table" }) - - if long_unlocked or near_unlocked then - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_enabled", - state = global.bobmods.logistics[player_index].enabled, - caption = { "gui.bob-logistics-enabled" }, - }) - end - if global.bobmods.logistics[player_index].enabled then - if long_unlocked then - if more_unlocked then - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_long_in", - state = global.bobmods.logistics[player_index].long_in, - caption = { "gui.bob-logistics-pickup" }, - }) - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_long_out", - state = global.bobmods.logistics[player_index].long_out, - caption = { "gui.bob-logistics-drop" }, - }) - else - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_long_in", - state = global.bobmods.logistics[player_index].long_in, - caption = { "gui.bob-logistics-long" }, - }) - end - end - if near_unlocked then - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_near", - state = global.bobmods.logistics[player_index].near, - caption = { "gui.bob-logistics-near" }, - }) - end - end - - if remote.interfaces.bobinserters then - gui.table.add({ - type = "checkbox", - name = "bob_logistics_inserter_enabled2", - state = global.bobmods.logistics[player_index].enabled2, - caption = { "gui.bob-logistics-enabled2" }, - }) - if global.bobmods.logistics[player_index].enabled2 then - remote.call("bobinserters", "draw_gui", { - player_index = player_index, - gui = gui, - name = "bob_logistics", - pickup = global.bobmods.logistics[player_index].pickup, - drop = global.bobmods.logistics[player_index].drop, - offset = global.bobmods.logistics[player_index].offset, - }) - end - end -end - -function bobmods.inserters.delete_gui(player_index) - local globtable = global.bobmods.inserters[player_index] - if globtable then - if globtable.gui and globtable.gui.valid then - globtable.gui.destroy() - end - globtable.entity = nil - globtable.gui = nil - globtable.pickup = nil - globtable.drop = nil - globtable.offset = nil - end -end - -function bobmods.inserters.open_gui(entity, player) - bobmods.inserters.delete_gui(player.index) - - local globtable = global.bobmods.inserters[player.index] - globtable.entity = entity - - local long_unlocked = tech_unlocked(player.force, bobmods.inserters.long_technology) - local long2_unlocked = tech_unlocked(player.force, bobmods.inserters.long2_technology) - local more_unlocked = tech_unlocked(player.force, bobmods.inserters.more_technology) - local more2_unlocked = tech_unlocked(player.force, bobmods.inserters.more2_technology) - local near_unlocked = tech_unlocked(player.force, bobmods.inserters.near_technology) - - local pickup_position = get_pickup_position(entity) - local full_drop_position = get_drop_position(entity) - local drop_position = { x = bobmods.math.round(full_drop_position.x), y = bobmods.math.round(full_drop_position.y) } - local offset_position = bobmods.inserters.normalise_tile_offset({ - x = bobmods.math.offset(full_drop_position.x), - y = bobmods.math.offset(full_drop_position.y), - }) - - local gui - local main_table - - if globtable.position == "left" then - gui = player.gui.relative.add({ - type = "frame", - name = "bob_inserter_gui", - direction = "vertical", - caption = { "gui.bob-named-inserter-gui", entity.prototype.localised_name }, - }) - gui.anchor = { - gui = defines.relative_gui_type.inserter_gui, - position = defines.relative_gui_position[settings.get_player_settings(player)["bobmods-inserters-gui-position"].value], - } - - globtable.pickup, globtable.drop, globtable.offset = bobmods.inserters.draw_inserter_gui_main_table( - gui, - "bob_inserter_gui", - pickup_position, - drop_position, - offset_position, - long_unlocked, - long2_unlocked, - more_unlocked, - more2_unlocked, - near_unlocked - ) - else - gui = player.gui.screen.add({ type = "frame", name = "bob_inserter_gui", direction = "vertical" }) - gui_add_title( - gui, - { "gui.bob-named-inserter-gui", entity.prototype.localised_name }, - "bob_inserter_gui_close", - true - ) - local main_table_target = gui - - if settings.get_player_settings(player)["bobmods-inserters-show-window"].value ~= "off" then - local entity_flow = gui - local frame_width = 400 - if settings.get_player_settings(player)["bobmods-inserters-show-window"].value == "left" then - gui.title_flow.title.caption = { "gui.bob-inserter-gui" } - main_table_target = gui.add({ type = "flow", name = "main_flow", style = "horizontal_flow" }) - gui.main_flow.style.horizontal_spacing = 12 - entity_flow = gui.main_flow.add({ type = "table", name = "entity_flow", style = "bob_table", column_count = 1 }) - entity_flow.add({ - type = "label", - name = "entity_name", - style = "heading_2_label", - caption = entity.prototype.localised_name, - }) - frame_width = 148 - end - - entity_flow.add({ type = "frame", name = "entity_frame", style = "inside_shallow_frame" }) - entity_flow.entity_frame.style.width = frame_width - entity_flow.entity_frame.style.height = 148 - entity_flow.entity_frame.style.horizontally_stretchable = "off" - entity_flow.entity_frame.add({ type = "entity-preview", name = "entity_preview", style = "entity_button_base" }) - entity_flow.entity_frame.entity_preview.style.width = frame_width - entity_flow.entity_frame.entity_preview.style.height = 148 - entity_flow.entity_frame.entity_preview.entity = entity - end - - globtable.pickup, globtable.drop, globtable.offset = bobmods.inserters.draw_inserter_gui_main_table( - main_table_target, - "bob_inserter_gui", - pickup_position, - drop_position, - offset_position, - long_unlocked, - long2_unlocked, - more_unlocked, - more2_unlocked, - near_unlocked - ) - - gui.auto_center = true - player.opened = gui - end - - globtable.gui = gui - gui.style.bottom_padding = 8 - gui.style.vertically_stretchable = false - gui.style.horizontally_stretchable = false -end - -function bobmods.inserters.draw_inserter_gui_main_table( - gui, - name, - pickup_position, - drop_position, - offset_position, - long_unlocked, - long2_unlocked, - more_unlocked, - more2_unlocked, - near_unlocked -) - local isshort = false - local islong = false - local islong2 = false - - if pickup_position.x > 2.1 or pickup_position.x < -2.1 or pickup_position.y > 2.1 or pickup_position.y < -2.1 then - islong2 = true - elseif pickup_position.x > 1.1 or pickup_position.x < -1.1 or pickup_position.y > 1.1 or pickup_position.y < -1.1 then - islong = true - else - isshort = true - end - if drop_position.x > 2.1 or drop_position.x < -2.1 or drop_position.y > 2.1 or drop_position.y < -2.1 then - islong2 = true - elseif drop_position.x > 1.1 or drop_position.x < -1.1 or drop_position.y > 1.1 or drop_position.y < -1.1 then - islong = true - else - isshort = true - end - - local main_table = gui.add({ type = "table", name = "main_table", column_count = 2, style = "bob_table" }) - main_table.style.horizontal_spacing = 12 - - main_table.add({ - type = "label", - name = "pickup_label", - style = "heading_2_label", - caption = { "gui.bob-inserter-pickup" }, - }) - main_table.add({ - type = "label", - name = "drop_label", - style = "heading_2_label", - caption = { "gui.bob-inserter-drop" }, - }) - - main_table.add({ type = "frame", name = "pickup", style = "inside_shallow_frame_with_padding" }) - main_table.add({ type = "frame", name = "drop", style = "inside_shallow_frame_with_padding" }) - main_table.drop.add({ type = "table", name = "table", column_count = 3, style = "bob_table" }) - - local column_count = 5 - - if long2_unlocked or islong2 then - column_count = 7 - elseif long_unlocked or islong then - column_count = 5 - else - column_count = 3 - end - - local gui_pickup = main_table.pickup.add({ - type = "table", - name = name .. "_pickup", - column_count = column_count, - style = "bob_table", - }) - local gui_drop = main_table.drop.table.add({ - type = "table", - name = name .. "_drop", - column_count = column_count, - style = "bob_table", - }) - local gui_offset = nil - - bobmods.inserters.draw_button_grid( - gui_pickup, - pickup_position, - "bob_inserter_checkbox_pickup", - long_unlocked, - more_unlocked, - islong, - long2_unlocked, - more2_unlocked, - islong2, - isshort - ) - bobmods.inserters.draw_button_grid( - gui_drop, - drop_position, - "bob_inserter_checkbox_drop", - long_unlocked, - more_unlocked, - islong, - long2_unlocked, - more2_unlocked, - islong2, - isshort - ) - - if near_unlocked then - main_table.drop.table.add({ type = "label", name = "spacer2", caption = " " }) - main_table.drop.table.add({ type = "table", name = "offset", column_count = 1, style = "bob_table" }) - main_table.drop.table.offset.add({ - type = "label", - name = "entity_name", - caption = { "gui.bob-inserter-offset" }, - style = "heading_2_label", - }) - gui_offset = main_table.drop.table.offset.add({ - type = "table", - name = name .. "_offset", - column_count = 3, - style = "bob_table", - }) - bobmods.inserters.draw_offset_grid(gui_offset, offset_position) - end - return gui_pickup, gui_drop, gui_offset -end - -function bobmods.inserters.draw_offset_grid(gui, position) - gui.add({ type = "checkbox", name = "button1", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button2", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button3", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button4", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button5", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button6", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button7", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button8", state = false, style = "bob_inserter_checkbox_small" }) - gui.add({ type = "checkbox", name = "button9", state = false, style = "bob_inserter_checkbox_small" }) - - bobmods.inserters.draw_button_offset_check(gui, position) -end - -function bobmods.inserters.draw_button_grid(gui, position, style, long, more, islong, long2, more2, islong2, isshort) - if long2 or islong2 then - if more then - gui.add({ type = "checkbox", name = "button26", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank26", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button27", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank27", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button28", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank28", state = false, style = "bob_inserter_blank" }) - end - gui.add({ type = "checkbox", name = "button29", state = false, style = style }) - if more2 then - gui.add({ type = "checkbox", name = "button30", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank30", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button31", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank31", state = false, style = "bob_inserter_blank" }) - end - if more then - gui.add({ type = "checkbox", name = "button32", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank32", state = false, style = "bob_inserter_blank" }) - end - end - - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button33", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank33", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 or long or islong then - if more and (long or islong) then - gui.add({ type = "checkbox", name = "button1", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank1", state = false, style = "bob_inserter_blank" }) - end - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button2", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank2", state = false, style = "bob_inserter_blank" }) - end - if long or islong then - gui.add({ type = "checkbox", name = "button3", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank3", state = false, style = "bob_inserter_blank" }) - end - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button4", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank4", state = false, style = "bob_inserter_blank" }) - end - if more and (long or islong) then - gui.add({ type = "checkbox", name = "button5", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank5", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button34", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank34", state = false, style = "bob_inserter_blank" }) - end - end - - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button35", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank35", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 or long or islong then - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button6", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank6", state = false, style = "bob_inserter_blank" }) - end - end - if more and (long or long2 or isshort) then - gui.add({ type = "checkbox", name = "button7", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank7", state = false, style = "bob_inserter_blank" }) - end - if long or long2 or isshort then - gui.add({ type = "checkbox", name = "button8", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank8", state = false, style = "bob_inserter_blank" }) - end - if more and (long or long2 or isshort) then - gui.add({ type = "checkbox", name = "button9", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank9", state = false, style = "bob_inserter_blank" }) - end - if long2 or islong2 or long or islong then - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button10", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank10", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button36", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank36", state = false, style = "bob_inserter_blank" }) - end - end - - if long2 or islong2 then - gui.add({ type = "checkbox", name = "button37", state = false, style = style }) - end - if long2 or islong2 or long or islong then - if long or islong then - gui.add({ type = "checkbox", name = "button11", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank11", state = false, style = "bob_inserter_blank" }) - end - end - if long or long2 or isshort then - gui.add({ type = "checkbox", name = "button12", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank12", state = false, style = "bob_inserter_blank" }) - end - gui.add({ type = "checkbox", name = "middle", state = false, style = "bob_inserter_middle" }) - if long or long2 or isshort then - gui.add({ type = "checkbox", name = "button14", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank14", state = false, style = "bob_inserter_blank" }) - end - if long2 or islong2 or long or islong then - if long or islong then - gui.add({ type = "checkbox", name = "button15", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank15", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 then - gui.add({ type = "checkbox", name = "button38", state = false, style = style }) - end - - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button39", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank39", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 or long or islong then - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button16", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank16", state = false, style = "bob_inserter_blank" }) - end - end - if more and (long or long2 or isshort) then - gui.add({ type = "checkbox", name = "button17", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank17", state = false, style = "bob_inserter_blank" }) - end - if long or long2 or isshort then - gui.add({ type = "checkbox", name = "button18", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank18", state = false, style = "bob_inserter_blank" }) - end - if more and (long or long2 or isshort) then - gui.add({ type = "checkbox", name = "button19", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank19", state = false, style = "bob_inserter_blank" }) - end - if long2 or islong2 or long or islong then - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button20", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank20", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button40", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank40", state = false, style = "bob_inserter_blank" }) - end - end - - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button41", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank41", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 or long or islong then - if more and (long or islong) then - gui.add({ type = "checkbox", name = "button21", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank21", state = false, style = "bob_inserter_blank" }) - end - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button22", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank22", state = false, style = "bob_inserter_blank" }) - end - if long or islong then - gui.add({ type = "checkbox", name = "button23", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank23", state = false, style = "bob_inserter_blank" }) - end - if more2 and (long or islong) then - gui.add({ type = "checkbox", name = "button24", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank24", state = false, style = "bob_inserter_blank" }) - end - if more and (long or islong) then - gui.add({ type = "checkbox", name = "button25", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank25", state = false, style = "bob_inserter_blank" }) - end - end - if long2 or islong2 then - if more2 then - gui.add({ type = "checkbox", name = "button42", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank42", state = false, style = "bob_inserter_blank" }) - end - end - - if long2 or islong2 then - if more then - gui.add({ type = "checkbox", name = "button43", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank43", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button44", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank44", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button45", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank45", state = false, style = "bob_inserter_blank" }) - end - gui.add({ type = "checkbox", name = "button46", state = false, style = style }) - if more2 then - gui.add({ type = "checkbox", name = "button47", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank47", state = false, style = "bob_inserter_blank" }) - end - if more2 then - gui.add({ type = "checkbox", name = "button48", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank48", state = false, style = "bob_inserter_blank" }) - end - if more then - gui.add({ type = "checkbox", name = "button49", state = false, style = style }) - else - gui.add({ type = "checkbox", name = "blank49", state = false, style = "bob_inserter_blank" }) - end - end - - bobmods.inserters.draw_button_position_check(gui, position) -end - -function bobmods.inserters.draw_button_position_check(gui, position) - for i, new_position in ipairs(bobmods.inserters.positions) do - if gui["button" .. i] then - gui["button" .. i].state = false - if check_position(position, new_position) then - gui["button" .. i].state = true - end - end - end -end - -function bobmods.inserters.draw_button_offset_check(gui, position) - for i, new_position in ipairs(bobmods.inserters.offset_positions) do - if gui["button" .. i] then - gui["button" .. i].state = false - if check_position(position, new_position) then - gui["button" .. i].state = true - end - end - end -end - -function bobmods.inserters.refresh_position_checkboxes(entity, player) - local pickup_position = get_pickup_position(entity) - local drop_position, drop_offset = get_split_drop_position(entity) - - if global.bobmods.inserters[player.index].pickup then - bobmods.inserters.draw_button_position_check(global.bobmods.inserters[player.index].pickup, pickup_position) - end - if global.bobmods.inserters[player.index].drop then - bobmods.inserters.draw_button_position_check(global.bobmods.inserters[player.index].drop, drop_position) - end - if global.bobmods.inserters[player.index].offset then - bobmods.inserters.draw_button_offset_check(global.bobmods.inserters[player.index].offset, drop_offset) - end -end - -remote.add_interface("bobinserters", { - --[[ -This function will draw the inserters grid GUI as used in the GUI added by this mod in any GUI you choose. This mod will not respond to those buttons being pressed. -This function takes the following variables: -gui: The GUI element to draw this GUI inside of. -name: The name prefix for the main 3 tables. -player_index: obvious -pickup: the index in table bobmods.inserters.positions to define the pickup location. -drop: the index in table bobmods.inserters.positions to define the drop location. -offset: the index in table bobmods.inserters.offset_positions to define the offset location within the drop tile. -]] - -- - draw_gui = function(data) - local force = game.players[data.player_index].force - bobmods.inserters.draw_inserter_gui_main_table( - data.gui, - data.name, - bobmods.inserters.positions[data.pickup], - bobmods.inserters.positions[data.drop], - bobmods.inserters.offset_positions[data.offset], - tech_unlocked(force, bobmods.inserters.long_technology), - tech_unlocked(force, bobmods.inserters.long2_technology), - tech_unlocked(force, bobmods.inserters.more_technology), - tech_unlocked(force, bobmods.inserters.more2_technology), - tech_unlocked(force, bobmods.inserters.near_technology) - ) - end, - - --[[ -This function will refresh the GUI checkboxes, designed to refresh a drawn GUI grid after you click one of it's buttons. -This function takes the following variables: -gui: the GUI table that the buttons are drawn inside of. -position: the index in table bobmods.inserters.positions to define the pickup/drop location. -]] - -- - draw_button_position_check = function(data) - bobmods.inserters.draw_button_position_check(data.gui, bobmods.inserters.positions[data.position]) - end, - - --[[ -This function will refresh the GUI checkboxes, designed to refresh a drawn GUI grid after you click one of it's buttons. -This function takes the following variables: -gui: the GUI table that the buttons are drawn inside of. -position: the index in table bobmods.inserters.offset_positions to define the offset location. -]] - -- - draw_button_offset_check = function(data) - bobmods.inserters.draw_button_offset_check(data.gui, bobmods.inserters.offset_positions[data.position]) - end, - - --[[ -This function will take the value position in the bobmods.inserters.positions table, and return the coordinates. -]] - -- - get_position = function(data) - return bobmods.inserters.positions[data.position] - end, - - --[[ -This function will take the value position in the bobmods.inserters.offset_positions table, and return the coordinates. -]] - -- - get_offset = function(data) - return bobmods.inserters.offset_positions[data.position] - end, - - --[[ -Pass this function the name of an inserter, and it will be ignored. -EG: remote.call("bobinserters", "blacklist_inserter", "burner-inserter") will blacklist the burner inserter. -]] - -- - blacklist_inserter = function(data) - bobmods.inserters.create_global_table_basic() - global.bobmods.inserters.blacklist[data] = true - end, - --[[ -Pass this function a table of names of inserters, and they will be ignored. -EG: remote.call("bobinserters", "blacklist_inserters", {"burner-inserter"}) will blacklist the burner inserter. -]] - -- - blacklist_inserters = function(data) - bobmods.inserters.create_global_table_basic() - for i, inserter in pairs(data) do - global.bobmods.inserters.blacklist[inserter] = true - end - end, - --[[ -Returns the ID number of the custom event -Triggered event returns the following table: {entity = entity, new_positions = {drop_position = {x,y}, pickup_position = {x,y}}, original_positions = {drop_position = {x,y}, pickup_position = {x,y}}} -]] - -- - get_changed_position_event_id = function() - return changed_position_event - end, -}) diff --git a/bobinserters_1.1.7/graphics/gui/checkbox-big.png b/bobinserters_1.1.7/graphics/gui/checkbox-big.png deleted file mode 100644 index 5a10af92..00000000 Binary files a/bobinserters_1.1.7/graphics/gui/checkbox-big.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/gui/checkbox.png b/bobinserters_1.1.7/graphics/gui/checkbox.png deleted file mode 100644 index 5a027b2d..00000000 Binary files a/bobinserters_1.1.7/graphics/gui/checkbox.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/gui/gui.png b/bobinserters_1.1.7/graphics/gui/gui.png deleted file mode 100644 index a1f61a7f..00000000 Binary files a/bobinserters_1.1.7/graphics/gui/gui.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/gui/hr-gui.png b/bobinserters_1.1.7/graphics/gui/hr-gui.png deleted file mode 100644 index 767d130e..00000000 Binary files a/bobinserters_1.1.7/graphics/gui/hr-gui.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/icons/technology/fast-inserter.png b/bobinserters_1.1.7/graphics/icons/technology/fast-inserter.png deleted file mode 100644 index 8d6a436a..00000000 Binary files a/bobinserters_1.1.7/graphics/icons/technology/fast-inserter.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/icons/technology/long-inserters-2.png b/bobinserters_1.1.7/graphics/icons/technology/long-inserters-2.png deleted file mode 100644 index 289cc6e9..00000000 Binary files a/bobinserters_1.1.7/graphics/icons/technology/long-inserters-2.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/icons/technology/long-inserters.png b/bobinserters_1.1.7/graphics/icons/technology/long-inserters.png deleted file mode 100644 index a56019e3..00000000 Binary files a/bobinserters_1.1.7/graphics/icons/technology/long-inserters.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/icons/technology/more-inserters.png b/bobinserters_1.1.7/graphics/icons/technology/more-inserters.png deleted file mode 100644 index 69801392..00000000 Binary files a/bobinserters_1.1.7/graphics/icons/technology/more-inserters.png and /dev/null differ diff --git a/bobinserters_1.1.7/graphics/icons/technology/near-inserters.png b/bobinserters_1.1.7/graphics/icons/technology/near-inserters.png deleted file mode 100644 index db906d38..00000000 Binary files a/bobinserters_1.1.7/graphics/icons/technology/near-inserters.png and /dev/null differ diff --git a/bobinserters_1.1.7/info.json b/bobinserters_1.1.7/info.json deleted file mode 100644 index 18b8ca74..00000000 --- a/bobinserters_1.1.7/info.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "bobinserters", - "version": "1.1.7", - "factorio_version": "1.1", - "title": "Bob's Adjustable Inserters mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": ["base >= 1.1.0"], - "description": "Adds a GUI for customising inserter pickup/drop positions.\n\nAlso adds hot-keys.\n\nSHIFT + P: Change pickup range (Long inserters technology will allow short/long toggle.)\nSHIFT + O: Change drop range (Long inserters technology will allow short/long toggle.)\nSHIFT + L: Long Inserter toggle (Long inserters technology will allow short/long toggle on both input and output.)\nSHIFT + N: Drop location offset toggle (Near inserters technology will allow near/far side of belt toggle)\nCTRL + R: Change pickup rotation (4 step rotation by default, More inserters technology will unlock additional directions)\nSHIFT + E: Open GUI\n\nAll hotkeys can be remapped, and an option exists to open the GUI at the same time as the standard inserter GUI instead of with a hotkey.\nThis mod also adds in researches to unlock the more adjustment options.\n\nTutorial: https://www.youtube.com/watch?v=Zu9LmpZaVPg" -} diff --git a/bobinserters_1.1.7/thumbnail.png b/bobinserters_1.1.7/thumbnail.png deleted file mode 100644 index a1d7f78b..00000000 Binary files a/bobinserters_1.1.7/thumbnail.png and /dev/null differ diff --git a/boblibrary_1.1.6/auto-bottle.lua b/boblibrary/auto-bottle.lua similarity index 100% rename from boblibrary_1.1.6/auto-bottle.lua rename to boblibrary/auto-bottle.lua diff --git a/boblibrary_1.1.6/category-functions.lua b/boblibrary/category-functions.lua similarity index 100% rename from boblibrary_1.1.6/category-functions.lua rename to boblibrary/category-functions.lua diff --git a/boblibrary_1.1.6/changelog.txt b/boblibrary/changelog.txt similarity index 100% rename from boblibrary_1.1.6/changelog.txt rename to boblibrary/changelog.txt diff --git a/boblibrary_1.1.6/data-final-fixes.lua b/boblibrary/data-final-fixes.lua similarity index 100% rename from boblibrary_1.1.6/data-final-fixes.lua rename to boblibrary/data-final-fixes.lua diff --git a/boblibrary_1.1.6/data.lua b/boblibrary/data.lua similarity index 100% rename from boblibrary_1.1.6/data.lua rename to boblibrary/data.lua diff --git a/boblibrary_1.1.6/error-functions.lua b/boblibrary/error-functions.lua similarity index 100% rename from boblibrary_1.1.6/error-functions.lua rename to boblibrary/error-functions.lua diff --git a/boblibrary_1.1.6/functions.lua b/boblibrary/functions.lua similarity index 100% rename from boblibrary_1.1.6/functions.lua rename to boblibrary/functions.lua diff --git a/boblibrary_1.1.6/graphics/entity/liquid.png b/boblibrary/graphics/entity/liquid.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/liquid.png rename to boblibrary/graphics/entity/liquid.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-1.png b/boblibrary/graphics/entity/ores/hr-ore-1.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-1.png rename to boblibrary/graphics/entity/ores/hr-ore-1.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-2.png b/boblibrary/graphics/entity/ores/hr-ore-2.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-2.png rename to boblibrary/graphics/entity/ores/hr-ore-2.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-3.png b/boblibrary/graphics/entity/ores/hr-ore-3.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-3.png rename to boblibrary/graphics/entity/ores/hr-ore-3.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-4.png b/boblibrary/graphics/entity/ores/hr-ore-4.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-4.png rename to boblibrary/graphics/entity/ores/hr-ore-4.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-5-glow.png b/boblibrary/graphics/entity/ores/hr-ore-5-glow.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-5-glow.png rename to boblibrary/graphics/entity/ores/hr-ore-5-glow.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/hr-ore-5.png b/boblibrary/graphics/entity/ores/hr-ore-5.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/hr-ore-5.png rename to boblibrary/graphics/entity/ores/hr-ore-5.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-1.png b/boblibrary/graphics/entity/ores/ore-1.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-1.png rename to boblibrary/graphics/entity/ores/ore-1.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-2.png b/boblibrary/graphics/entity/ores/ore-2.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-2.png rename to boblibrary/graphics/entity/ores/ore-2.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-3.png b/boblibrary/graphics/entity/ores/ore-3.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-3.png rename to boblibrary/graphics/entity/ores/ore-3.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-4.png b/boblibrary/graphics/entity/ores/ore-4.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-4.png rename to boblibrary/graphics/entity/ores/ore-4.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-5-glow.png b/boblibrary/graphics/entity/ores/ore-5-glow.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-5-glow.png rename to boblibrary/graphics/entity/ores/ore-5-glow.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-5.png b/boblibrary/graphics/entity/ores/ore-5.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-5.png rename to boblibrary/graphics/entity/ores/ore-5.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-1.png b/boblibrary/graphics/entity/ores/ore-particle-1.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-1.png rename to boblibrary/graphics/entity/ores/ore-particle-1.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-2.png b/boblibrary/graphics/entity/ores/ore-particle-2.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-2.png rename to boblibrary/graphics/entity/ores/ore-particle-2.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-3.png b/boblibrary/graphics/entity/ores/ore-particle-3.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-3.png rename to boblibrary/graphics/entity/ores/ore-particle-3.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-4.png b/boblibrary/graphics/entity/ores/ore-particle-4.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-4.png rename to boblibrary/graphics/entity/ores/ore-particle-4.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-5.png b/boblibrary/graphics/entity/ores/ore-particle-5.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-5.png rename to boblibrary/graphics/entity/ores/ore-particle-5.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-6.png b/boblibrary/graphics/entity/ores/ore-particle-6.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-6.png rename to boblibrary/graphics/entity/ores/ore-particle-6.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-7.png b/boblibrary/graphics/entity/ores/ore-particle-7.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-7.png rename to boblibrary/graphics/entity/ores/ore-particle-7.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-8.png b/boblibrary/graphics/entity/ores/ore-particle-8.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-8.png rename to boblibrary/graphics/entity/ores/ore-particle-8.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-1.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-1.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-1.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-1.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-2.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-2.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-2.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-2.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-3.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-3.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-3.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-3.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-4.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-4.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-4.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-4.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-5.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-5.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-5.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-5.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-6.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-6.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-6.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-6.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-7.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-7.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-7.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-7.png diff --git a/boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-8.png b/boblibrary/graphics/entity/ores/ore-particle-shadow-8.png similarity index 100% rename from boblibrary_1.1.6/graphics/entity/ores/ore-particle-shadow-8.png rename to boblibrary/graphics/entity/ores/ore-particle-shadow-8.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/canister-bottom.png b/boblibrary/graphics/icons/cylinder/canister-bottom.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/canister-bottom.png rename to boblibrary/graphics/icons/cylinder/canister-bottom.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/canister-top.png b/boblibrary/graphics/icons/cylinder/canister-top.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/canister-top.png rename to boblibrary/graphics/icons/cylinder/canister-top.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/cylinder-mid.png b/boblibrary/graphics/icons/cylinder/cylinder-mid.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/cylinder-mid.png rename to boblibrary/graphics/icons/cylinder/cylinder-mid.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/cylinder-top.png b/boblibrary/graphics/icons/cylinder/cylinder-top.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/cylinder-top.png rename to boblibrary/graphics/icons/cylinder/cylinder-top.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/empty-canister.png b/boblibrary/graphics/icons/cylinder/empty-canister.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/empty-canister.png rename to boblibrary/graphics/icons/cylinder/empty-canister.png diff --git a/boblibrary_1.1.6/graphics/icons/cylinder/gas-canister.png b/boblibrary/graphics/icons/cylinder/gas-canister.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/cylinder/gas-canister.png rename to boblibrary/graphics/icons/cylinder/gas-canister.png diff --git a/boblibrary_1.1.6/graphics/icons/liquid.png b/boblibrary/graphics/icons/liquid.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/liquid.png rename to boblibrary/graphics/icons/liquid.png diff --git a/boblibrary_1.1.6/graphics/icons/ore-1.png b/boblibrary/graphics/icons/ore-1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore-1.png rename to boblibrary/graphics/icons/ore-1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore-2.png b/boblibrary/graphics/icons/ore-2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore-2.png rename to boblibrary/graphics/icons/ore-2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore-3.png b/boblibrary/graphics/icons/ore-3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore-3.png rename to boblibrary/graphics/icons/ore-3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore-4.png b/boblibrary/graphics/icons/ore-4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore-4.png rename to boblibrary/graphics/icons/ore-4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore-5.png b/boblibrary/graphics/icons/ore-5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore-5.png rename to boblibrary/graphics/icons/ore-5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/1.png b/boblibrary/graphics/icons/ore/1/1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/1.png rename to boblibrary/graphics/icons/ore/1/1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/10.png b/boblibrary/graphics/icons/ore/1/10.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/10.png rename to boblibrary/graphics/icons/ore/1/10.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/11.png b/boblibrary/graphics/icons/ore/1/11.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/11.png rename to boblibrary/graphics/icons/ore/1/11.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/12.png b/boblibrary/graphics/icons/ore/1/12.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/12.png rename to boblibrary/graphics/icons/ore/1/12.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/13.png b/boblibrary/graphics/icons/ore/1/13.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/13.png rename to boblibrary/graphics/icons/ore/1/13.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/14.png b/boblibrary/graphics/icons/ore/1/14.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/14.png rename to boblibrary/graphics/icons/ore/1/14.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/15.png b/boblibrary/graphics/icons/ore/1/15.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/15.png rename to boblibrary/graphics/icons/ore/1/15.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/2.png b/boblibrary/graphics/icons/ore/1/2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/2.png rename to boblibrary/graphics/icons/ore/1/2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/3.png b/boblibrary/graphics/icons/ore/1/3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/3.png rename to boblibrary/graphics/icons/ore/1/3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/4.png b/boblibrary/graphics/icons/ore/1/4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/4.png rename to boblibrary/graphics/icons/ore/1/4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/5.png b/boblibrary/graphics/icons/ore/1/5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/5.png rename to boblibrary/graphics/icons/ore/1/5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/6.png b/boblibrary/graphics/icons/ore/1/6.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/6.png rename to boblibrary/graphics/icons/ore/1/6.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/7.png b/boblibrary/graphics/icons/ore/1/7.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/7.png rename to boblibrary/graphics/icons/ore/1/7.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/8.png b/boblibrary/graphics/icons/ore/1/8.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/8.png rename to boblibrary/graphics/icons/ore/1/8.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/1/9.png b/boblibrary/graphics/icons/ore/1/9.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/1/9.png rename to boblibrary/graphics/icons/ore/1/9.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/1.png b/boblibrary/graphics/icons/ore/2/1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/1.png rename to boblibrary/graphics/icons/ore/2/1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/10.png b/boblibrary/graphics/icons/ore/2/10.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/10.png rename to boblibrary/graphics/icons/ore/2/10.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/11.png b/boblibrary/graphics/icons/ore/2/11.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/11.png rename to boblibrary/graphics/icons/ore/2/11.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/12.png b/boblibrary/graphics/icons/ore/2/12.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/12.png rename to boblibrary/graphics/icons/ore/2/12.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/13.png b/boblibrary/graphics/icons/ore/2/13.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/13.png rename to boblibrary/graphics/icons/ore/2/13.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/14.png b/boblibrary/graphics/icons/ore/2/14.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/14.png rename to boblibrary/graphics/icons/ore/2/14.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/15.png b/boblibrary/graphics/icons/ore/2/15.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/15.png rename to boblibrary/graphics/icons/ore/2/15.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/16.png b/boblibrary/graphics/icons/ore/2/16.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/16.png rename to boblibrary/graphics/icons/ore/2/16.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/17.png b/boblibrary/graphics/icons/ore/2/17.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/17.png rename to boblibrary/graphics/icons/ore/2/17.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/18.png b/boblibrary/graphics/icons/ore/2/18.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/18.png rename to boblibrary/graphics/icons/ore/2/18.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/2.png b/boblibrary/graphics/icons/ore/2/2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/2.png rename to boblibrary/graphics/icons/ore/2/2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/3.png b/boblibrary/graphics/icons/ore/2/3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/3.png rename to boblibrary/graphics/icons/ore/2/3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/4.png b/boblibrary/graphics/icons/ore/2/4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/4.png rename to boblibrary/graphics/icons/ore/2/4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/5.png b/boblibrary/graphics/icons/ore/2/5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/5.png rename to boblibrary/graphics/icons/ore/2/5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/6.png b/boblibrary/graphics/icons/ore/2/6.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/6.png rename to boblibrary/graphics/icons/ore/2/6.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/7.png b/boblibrary/graphics/icons/ore/2/7.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/7.png rename to boblibrary/graphics/icons/ore/2/7.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/8.png b/boblibrary/graphics/icons/ore/2/8.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/8.png rename to boblibrary/graphics/icons/ore/2/8.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/2/9.png b/boblibrary/graphics/icons/ore/2/9.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/2/9.png rename to boblibrary/graphics/icons/ore/2/9.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/1.png b/boblibrary/graphics/icons/ore/3/1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/1.png rename to boblibrary/graphics/icons/ore/3/1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/10.png b/boblibrary/graphics/icons/ore/3/10.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/10.png rename to boblibrary/graphics/icons/ore/3/10.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/11.png b/boblibrary/graphics/icons/ore/3/11.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/11.png rename to boblibrary/graphics/icons/ore/3/11.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/12.png b/boblibrary/graphics/icons/ore/3/12.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/12.png rename to boblibrary/graphics/icons/ore/3/12.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/13.png b/boblibrary/graphics/icons/ore/3/13.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/13.png rename to boblibrary/graphics/icons/ore/3/13.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/2.png b/boblibrary/graphics/icons/ore/3/2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/2.png rename to boblibrary/graphics/icons/ore/3/2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/3.png b/boblibrary/graphics/icons/ore/3/3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/3.png rename to boblibrary/graphics/icons/ore/3/3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/4.png b/boblibrary/graphics/icons/ore/3/4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/4.png rename to boblibrary/graphics/icons/ore/3/4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/5.png b/boblibrary/graphics/icons/ore/3/5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/5.png rename to boblibrary/graphics/icons/ore/3/5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/6.png b/boblibrary/graphics/icons/ore/3/6.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/6.png rename to boblibrary/graphics/icons/ore/3/6.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/7.png b/boblibrary/graphics/icons/ore/3/7.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/7.png rename to boblibrary/graphics/icons/ore/3/7.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/8.png b/boblibrary/graphics/icons/ore/3/8.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/8.png rename to boblibrary/graphics/icons/ore/3/8.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/3/9.png b/boblibrary/graphics/icons/ore/3/9.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/3/9.png rename to boblibrary/graphics/icons/ore/3/9.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/1.png b/boblibrary/graphics/icons/ore/4/1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/1.png rename to boblibrary/graphics/icons/ore/4/1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/10.png b/boblibrary/graphics/icons/ore/4/10.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/10.png rename to boblibrary/graphics/icons/ore/4/10.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/11.png b/boblibrary/graphics/icons/ore/4/11.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/11.png rename to boblibrary/graphics/icons/ore/4/11.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/12.png b/boblibrary/graphics/icons/ore/4/12.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/12.png rename to boblibrary/graphics/icons/ore/4/12.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/13.png b/boblibrary/graphics/icons/ore/4/13.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/13.png rename to boblibrary/graphics/icons/ore/4/13.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/14.png b/boblibrary/graphics/icons/ore/4/14.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/14.png rename to boblibrary/graphics/icons/ore/4/14.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/15.png b/boblibrary/graphics/icons/ore/4/15.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/15.png rename to boblibrary/graphics/icons/ore/4/15.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/16.png b/boblibrary/graphics/icons/ore/4/16.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/16.png rename to boblibrary/graphics/icons/ore/4/16.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/17.png b/boblibrary/graphics/icons/ore/4/17.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/17.png rename to boblibrary/graphics/icons/ore/4/17.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/18.png b/boblibrary/graphics/icons/ore/4/18.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/18.png rename to boblibrary/graphics/icons/ore/4/18.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/19.png b/boblibrary/graphics/icons/ore/4/19.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/19.png rename to boblibrary/graphics/icons/ore/4/19.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/2.png b/boblibrary/graphics/icons/ore/4/2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/2.png rename to boblibrary/graphics/icons/ore/4/2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/20.png b/boblibrary/graphics/icons/ore/4/20.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/20.png rename to boblibrary/graphics/icons/ore/4/20.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/3.png b/boblibrary/graphics/icons/ore/4/3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/3.png rename to boblibrary/graphics/icons/ore/4/3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/4.png b/boblibrary/graphics/icons/ore/4/4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/4.png rename to boblibrary/graphics/icons/ore/4/4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/5.png b/boblibrary/graphics/icons/ore/4/5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/5.png rename to boblibrary/graphics/icons/ore/4/5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/6.png b/boblibrary/graphics/icons/ore/4/6.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/6.png rename to boblibrary/graphics/icons/ore/4/6.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/7.png b/boblibrary/graphics/icons/ore/4/7.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/7.png rename to boblibrary/graphics/icons/ore/4/7.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/8.png b/boblibrary/graphics/icons/ore/4/8.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/8.png rename to boblibrary/graphics/icons/ore/4/8.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/4/9.png b/boblibrary/graphics/icons/ore/4/9.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/4/9.png rename to boblibrary/graphics/icons/ore/4/9.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/1.png b/boblibrary/graphics/icons/ore/5/1.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/1.png rename to boblibrary/graphics/icons/ore/5/1.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/10.png b/boblibrary/graphics/icons/ore/5/10.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/10.png rename to boblibrary/graphics/icons/ore/5/10.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/11.png b/boblibrary/graphics/icons/ore/5/11.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/11.png rename to boblibrary/graphics/icons/ore/5/11.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/12.png b/boblibrary/graphics/icons/ore/5/12.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/12.png rename to boblibrary/graphics/icons/ore/5/12.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/13.png b/boblibrary/graphics/icons/ore/5/13.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/13.png rename to boblibrary/graphics/icons/ore/5/13.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/14.png b/boblibrary/graphics/icons/ore/5/14.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/14.png rename to boblibrary/graphics/icons/ore/5/14.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/15.png b/boblibrary/graphics/icons/ore/5/15.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/15.png rename to boblibrary/graphics/icons/ore/5/15.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/16.png b/boblibrary/graphics/icons/ore/5/16.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/16.png rename to boblibrary/graphics/icons/ore/5/16.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/2.png b/boblibrary/graphics/icons/ore/5/2.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/2.png rename to boblibrary/graphics/icons/ore/5/2.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/3.png b/boblibrary/graphics/icons/ore/5/3.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/3.png rename to boblibrary/graphics/icons/ore/5/3.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/4.png b/boblibrary/graphics/icons/ore/5/4.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/4.png rename to boblibrary/graphics/icons/ore/5/4.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/5.png b/boblibrary/graphics/icons/ore/5/5.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/5.png rename to boblibrary/graphics/icons/ore/5/5.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/6.png b/boblibrary/graphics/icons/ore/5/6.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/6.png rename to boblibrary/graphics/icons/ore/5/6.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/7.png b/boblibrary/graphics/icons/ore/5/7.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/7.png rename to boblibrary/graphics/icons/ore/5/7.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/8.png b/boblibrary/graphics/icons/ore/5/8.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/8.png rename to boblibrary/graphics/icons/ore/5/8.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/5/9.png b/boblibrary/graphics/icons/ore/5/9.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/5/9.png rename to boblibrary/graphics/icons/ore/5/9.png diff --git a/boblibrary_1.1.6/graphics/icons/ore/blank.png b/boblibrary/graphics/icons/ore/blank.png similarity index 100% rename from boblibrary_1.1.6/graphics/icons/ore/blank.png rename to boblibrary/graphics/icons/ore/blank.png diff --git a/boblibrary/info.json b/boblibrary/info.json new file mode 100644 index 00000000..4883de9a --- /dev/null +++ b/boblibrary/info.json @@ -0,0 +1,13 @@ +{ + "name": "boblibrary", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Functions Library mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0" + ], + "description": "Adds a series of useful functions used by Bob's Mods. These can easilly be used by other mods too." +} diff --git a/boblibrary_1.1.6/item-functions.lua b/boblibrary/item-functions.lua similarity index 100% rename from boblibrary_1.1.6/item-functions.lua rename to boblibrary/item-functions.lua diff --git a/boblibrary_1.1.6/locale/en/boblibrary.cfg b/boblibrary/locale/en/boblibrary.cfg similarity index 100% rename from boblibrary_1.1.6/locale/en/boblibrary.cfg rename to boblibrary/locale/en/boblibrary.cfg diff --git a/boblibrary/locale/ru/boblibrary.cfg b/boblibrary/locale/ru/boblibrary.cfg new file mode 100644 index 00000000..98d63318 --- /dev/null +++ b/boblibrary/locale/ru/boblibrary.cfg @@ -0,0 +1,13 @@ +[mod-setting-name] +bobmods-lib-resource-generator=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ рСсурсов Π‘ΠΎΠ±Π° +bobmods-library-technology-cleanup=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ очистку ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +bobmods-library-recipe-cleanup=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ очистку ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° + + +[mod-setting-description] +bobmods-lib-resource-generator=Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ рСсурсов для 0.17, основанный Π½Π° систСмС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° рСсурсов 0.17. Π‘ вСрсии 0.17.51 Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ‚ Π±Π°Π³ΠΎΠ².\nΠ‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° провСряСт, доступСн Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ автоматичСски, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ кастомный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Ссли Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π½Π΅ установлСн. Π­Ρ‚Π° опция ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ кастомный Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½ΠΎΠ²Π΅ΠΉΡˆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Factorio. +bobmods-library-technology-cleanup=Если эта функция Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Π½Π° этапС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… исправлСний ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ, нСдопустимых ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. +bobmods-library-recipe-cleanup=Если этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, Π½Π° этапС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… исправлСний ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΡΡ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΈ нСдопустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. + + + diff --git a/boblibrary_1.1.6/module-functions.lua b/boblibrary/module-functions.lua similarity index 76% rename from boblibrary_1.1.6/module-functions.lua rename to boblibrary/module-functions.lua index 8f87d097..2afdf916 100644 --- a/boblibrary_1.1.6/module-functions.lua +++ b/boblibrary/module-functions.lua @@ -1,11 +1,26 @@ if not bobmods.lib.module then bobmods.lib.module = {} + bobmods.lib.module.excluded_prod_modules = {} +end + +function bobmods.lib.module.exclude_productivity_module(module_name) + if type(module_name) == "string" then + if data.raw.module[module_name] then + bobmods.lib.module.excluded_prod_modules[module_name] = true + end + else + log(debug.traceback()) + end end function bobmods.lib.module.add_productivity_limitation(recipe) if type(recipe) == "string" and data.raw.recipe[recipe] then for i, module in pairs(data.raw.module) do - if module.limitation and module.effect.productivity then + if + not bobmods.lib.module.excluded_prod_modules[module.name] + and module.limitation + and module.effect.productivity + then table.insert(module.limitation, recipe) end end diff --git a/boblibrary_1.1.6/ore-functions.lua b/boblibrary/ore-functions.lua similarity index 99% rename from boblibrary_1.1.6/ore-functions.lua rename to boblibrary/ore-functions.lua index bb4949c5..08665cdf 100644 --- a/boblibrary_1.1.6/ore-functions.lua +++ b/boblibrary/ore-functions.lua @@ -474,7 +474,6 @@ function bobmods.lib.resource.create_particle(inputs) { type = "optimized-particle", name = inputs.name, - flags = { "not-on-map" }, life_time = 180, pictures = { { diff --git a/boblibrary_1.1.6/ore-icon-variations.lua b/boblibrary/ore-icon-variations.lua similarity index 100% rename from boblibrary_1.1.6/ore-icon-variations.lua rename to boblibrary/ore-icon-variations.lua diff --git a/boblibrary_1.1.6/recipe-functions.lua b/boblibrary/recipe-functions.lua similarity index 98% rename from boblibrary_1.1.6/recipe-functions.lua rename to boblibrary/recipe-functions.lua index 16aee75f..8e70464a 100644 --- a/boblibrary_1.1.6/recipe-functions.lua +++ b/boblibrary/recipe-functions.lua @@ -309,6 +309,7 @@ local function split_line(recipe, tag) if not data.raw.recipe[recipe].expensive[tag] then data.raw.recipe[recipe].expensive[tag] = table.deepcopy(data.raw.recipe[recipe][tag]) end + data.raw.recipe[recipe][tag] = nil end end @@ -654,3 +655,15 @@ function bobmods.lib.recipe.set_subgroup(recipe_name, subgroup) bobmods.lib.error.recipe(recipe_name) end end + +function bobmods.lib.recipe.set_category(recipe_name, category) + if type(recipe_name) == "string" and type(category) == "string" then + local recipe = data.raw.recipe[recipe_name] + if recipe then + recipe.category = category + end + else + log(debug.traceback()) + bobmods.lib.error.recipe(recipe_name) + end +end diff --git a/boblibrary_1.1.6/settings.lua b/boblibrary/settings.lua similarity index 100% rename from boblibrary_1.1.6/settings.lua rename to boblibrary/settings.lua diff --git a/boblibrary_1.1.6/technology-functions.lua b/boblibrary/technology-functions.lua similarity index 100% rename from boblibrary_1.1.6/technology-functions.lua rename to boblibrary/technology-functions.lua diff --git a/boblibrary_1.1.6/thumbnail.png b/boblibrary/thumbnail.png similarity index 100% rename from boblibrary_1.1.6/thumbnail.png rename to boblibrary/thumbnail.png diff --git a/boblibrary_1.1.6/info.json b/boblibrary_1.1.6/info.json deleted file mode 100644 index 867ae307..00000000 --- a/boblibrary_1.1.6/info.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "boblibrary", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Functions Library mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0" - ], - "description": "Adds a series of useful functions used by Bob's Mods. These can easilly be used by other mods too." -} diff --git a/boblogistics_1.1.6/changelog.txt b/boblogistics/changelog.txt similarity index 100% rename from boblogistics_1.1.6/changelog.txt rename to boblogistics/changelog.txt diff --git a/boblogistics_1.1.6/control.lua b/boblogistics/control.lua similarity index 100% rename from boblogistics_1.1.6/control.lua rename to boblogistics/control.lua diff --git a/boblogistics_1.1.6/data-updates.lua b/boblogistics/data-updates.lua similarity index 100% rename from boblogistics_1.1.6/data-updates.lua rename to boblogistics/data-updates.lua diff --git a/boblogistics_1.1.6/data.lua b/boblogistics/data.lua similarity index 100% rename from boblogistics_1.1.6/data.lua rename to boblogistics/data.lua diff --git a/boblogistics_1.1.6/graphics/entity/chest/brass-chest.png b/boblogistics/graphics/entity/chest/brass-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/chest/brass-chest.png rename to boblogistics/graphics/entity/chest/brass-chest.png diff --git a/boblogistics_1.1.6/graphics/entity/chest/green-chest.png b/boblogistics/graphics/entity/chest/green-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/chest/green-chest.png rename to boblogistics/graphics/entity/chest/green-chest.png diff --git a/boblogistics_1.1.6/graphics/entity/chest/hr-titanium-chest-shadow.png b/boblogistics/graphics/entity/chest/hr-titanium-chest-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/chest/hr-titanium-chest-shadow.png rename to boblogistics/graphics/entity/chest/hr-titanium-chest-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/chest/hr-titanium-chest.png b/boblogistics/graphics/entity/chest/hr-titanium-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/chest/hr-titanium-chest.png rename to boblogistics/graphics/entity/chest/hr-titanium-chest.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/blue-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/blue-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/blue-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/blue-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/blue-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/blue-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-platform.png b/boblogistics/graphics/entity/inserter/blue-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-inserter-platform.png rename to boblogistics/graphics/entity/inserter/blue-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/blue-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/blue-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/blue-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/blue-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/blue-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/blue-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/cyan-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/cyan-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/cyan-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/cyan-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/cyan-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/cyan-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-platform.png b/boblogistics/graphics/entity/inserter/cyan-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/cyan-inserter-platform.png rename to boblogistics/graphics/entity/inserter/cyan-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-big-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/dark-green-big-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-big-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/dark-green-big-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-big-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/dark-green-big-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-big-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/dark-green-big-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/dark-green-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/dark-green-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/dark-green-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/dark-green-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/dark-green-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/dark-green-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-platform.png b/boblogistics/graphics/entity/inserter/dark-green-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/dark-green-inserter-platform.png rename to boblogistics/graphics/entity/inserter/dark-green-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-base-overlay.png b/boblogistics/graphics/entity/inserter/filter-inserter-hand-base-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-base-overlay.png rename to boblogistics/graphics/entity/inserter/filter-inserter-hand-base-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-closed-overlay.png b/boblogistics/graphics/entity/inserter/filter-inserter-hand-closed-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-closed-overlay.png rename to boblogistics/graphics/entity/inserter/filter-inserter-hand-closed-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-open-overlay.png b/boblogistics/graphics/entity/inserter/filter-inserter-hand-open-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/filter-inserter-hand-open-overlay.png rename to boblogistics/graphics/entity/inserter/filter-inserter-hand-open-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/green-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/green-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/green-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/green-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/green-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/green-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-inserter-platform.png b/boblogistics/graphics/entity/inserter/green-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-inserter-platform.png rename to boblogistics/graphics/entity/inserter/green-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/green-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/green-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/green-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/green-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/green-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/green-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-blue-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-blue-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-blue-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-blue-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-blue-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-blue-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-blue-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-blue-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-blue-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-cyan-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-cyan-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-cyan-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-cyan-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-big-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-dark-green-big-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-big-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-dark-green-big-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-big-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-dark-green-big-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-big-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-dark-green-big-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-dark-green-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-dark-green-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-dark-green-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-dark-green-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-dark-green-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-base-overlay.png b/boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-base-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-base-overlay.png rename to boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-base-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-closed-overlay.png b/boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-closed-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-closed-overlay.png rename to boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-closed-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-open-overlay.png b/boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-open-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-filter-inserter-hand-open-overlay.png rename to boblogistics/graphics/entity/inserter/hr-filter-inserter-hand-open-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-green-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-green-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-green-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-green-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-green-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-green-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-green-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-green-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-green-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-green-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-green-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-green-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-green-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-green-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-base-shadow.png b/boblogistics/graphics/entity/inserter/hr-inserter-hand-base-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-base-shadow.png rename to boblogistics/graphics/entity/inserter/hr-inserter-hand-base-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-closed-shadow.png b/boblogistics/graphics/entity/inserter/hr-inserter-hand-closed-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-closed-shadow.png rename to boblogistics/graphics/entity/inserter/hr-inserter-hand-closed-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-open-shadow.png b/boblogistics/graphics/entity/inserter/hr-inserter-hand-open-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-inserter-hand-open-shadow.png rename to boblogistics/graphics/entity/inserter/hr-inserter-hand-open-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-magenta-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-magenta-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-magenta-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-magenta-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-purple-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-purple-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-purple-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-purple-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-purple-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-purple-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-purple-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-purple-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-purple-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-red-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-red-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-red-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-red-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-red-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-red-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-red-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-red-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-red-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-red-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-red-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-red-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-red-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-red-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stack-filter-inserter-hand-closed-overlay.png b/boblogistics/graphics/entity/inserter/hr-stack-filter-inserter-hand-closed-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stack-filter-inserter-hand-closed-overlay.png rename to boblogistics/graphics/entity/inserter/hr-stack-filter-inserter-hand-closed-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stack-filter-inserter-hand-open-overlay.png b/boblogistics/graphics/entity/inserter/hr-stack-filter-inserter-hand-open-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stack-filter-inserter-hand-open-overlay.png rename to boblogistics/graphics/entity/inserter/hr-stack-filter-inserter-hand-open-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stack-inserter-hand-closed-shadow.png b/boblogistics/graphics/entity/inserter/hr-stack-inserter-hand-closed-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stack-inserter-hand-closed-shadow.png rename to boblogistics/graphics/entity/inserter/hr-stack-inserter-hand-closed-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stack-inserter-hand-open-shadow.png b/boblogistics/graphics/entity/inserter/hr-stack-inserter-hand-open-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stack-inserter-hand-open-shadow.png rename to boblogistics/graphics/entity/inserter/hr-stack-inserter-hand-open-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-stripe-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-stripe-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-stripe-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-stripe-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/hr-white-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/hr-white-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/hr-white-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/hr-white-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/hr-white-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/hr-white-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-platform.png b/boblogistics/graphics/entity/inserter/hr-white-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/hr-white-inserter-platform.png rename to boblogistics/graphics/entity/inserter/hr-white-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-base-shadow.png b/boblogistics/graphics/entity/inserter/inserter-hand-base-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-base-shadow.png rename to boblogistics/graphics/entity/inserter/inserter-hand-base-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-closed-shadow.png b/boblogistics/graphics/entity/inserter/inserter-hand-closed-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-closed-shadow.png rename to boblogistics/graphics/entity/inserter/inserter-hand-closed-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-open-shadow.png b/boblogistics/graphics/entity/inserter/inserter-hand-open-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/inserter-hand-open-shadow.png rename to boblogistics/graphics/entity/inserter/inserter-hand-open-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/magenta-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/magenta-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/magenta-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/magenta-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/magenta-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/magenta-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-platform.png b/boblogistics/graphics/entity/inserter/magenta-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/magenta-inserter-platform.png rename to boblogistics/graphics/entity/inserter/magenta-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/purple-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/purple-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/purple-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/purple-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/purple-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/purple-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-platform.png b/boblogistics/graphics/entity/inserter/purple-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-inserter-platform.png rename to boblogistics/graphics/entity/inserter/purple-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/purple-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/purple-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/purple-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/purple-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/purple-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/purple-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/red-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/red-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/red-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/red-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/red-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/red-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-inserter-platform.png b/boblogistics/graphics/entity/inserter/red-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-inserter-platform.png rename to boblogistics/graphics/entity/inserter/red-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-stack-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/red-stack-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-stack-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/red-stack-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/red-stack-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/red-stack-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/red-stack-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/red-stack-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stack-filter-inserter-hand-closed-overlay.png b/boblogistics/graphics/entity/inserter/stack-filter-inserter-hand-closed-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stack-filter-inserter-hand-closed-overlay.png rename to boblogistics/graphics/entity/inserter/stack-filter-inserter-hand-closed-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stack-filter-inserter-hand-open-overlay.png b/boblogistics/graphics/entity/inserter/stack-filter-inserter-hand-open-overlay.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stack-filter-inserter-hand-open-overlay.png rename to boblogistics/graphics/entity/inserter/stack-filter-inserter-hand-open-overlay.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stack-inserter-hand-closed-shadow.png b/boblogistics/graphics/entity/inserter/stack-inserter-hand-closed-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stack-inserter-hand-closed-shadow.png rename to boblogistics/graphics/entity/inserter/stack-inserter-hand-closed-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stack-inserter-hand-open-shadow.png b/boblogistics/graphics/entity/inserter/stack-inserter-hand-open-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stack-inserter-hand-open-shadow.png rename to boblogistics/graphics/entity/inserter/stack-inserter-hand-open-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/stripe-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/stripe-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/stripe-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/stripe-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/stripe-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/stripe-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-platform.png b/boblogistics/graphics/entity/inserter/stripe-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/stripe-inserter-platform.png rename to boblogistics/graphics/entity/inserter/stripe-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-base.png b/boblogistics/graphics/entity/inserter/white-inserter-hand-base.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-base.png rename to boblogistics/graphics/entity/inserter/white-inserter-hand-base.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-closed.png b/boblogistics/graphics/entity/inserter/white-inserter-hand-closed.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-closed.png rename to boblogistics/graphics/entity/inserter/white-inserter-hand-closed.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-open.png b/boblogistics/graphics/entity/inserter/white-inserter-hand-open.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/white-inserter-hand-open.png rename to boblogistics/graphics/entity/inserter/white-inserter-hand-open.png diff --git a/boblogistics_1.1.6/graphics/entity/inserter/white-inserter-platform.png b/boblogistics/graphics/entity/inserter/white-inserter-platform.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/inserter/white-inserter-platform.png rename to boblogistics/graphics/entity/inserter/white-inserter-platform.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest-mask.png b/boblogistics/graphics/entity/logistic-chest/logistic-chest-mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest-mask.png rename to boblogistics/graphics/entity/logistic-chest/logistic-chest-mask.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest-port-back.png b/boblogistics/graphics/entity/logistic-chest/logistic-chest-port-back.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest-port-back.png rename to boblogistics/graphics/entity/logistic-chest/logistic-chest-port-back.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest.png b/boblogistics/graphics/entity/logistic-chest/logistic-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/logistic-chest.png rename to boblogistics/graphics/entity/logistic-chest/logistic-chest.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-2.png b/boblogistics/graphics/entity/logistic-chest/roboport-door-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-2.png rename to boblogistics/graphics/entity/logistic-chest/roboport-door-2.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-3.png b/boblogistics/graphics/entity/logistic-chest/roboport-door-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-3.png rename to boblogistics/graphics/entity/logistic-chest/roboport-door-3.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-4.png b/boblogistics/graphics/entity/logistic-chest/roboport-door-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door-4.png rename to boblogistics/graphics/entity/logistic-chest/roboport-door-4.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door.png b/boblogistics/graphics/entity/logistic-chest/roboport-door.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/roboport-door.png rename to boblogistics/graphics/entity/logistic-chest/roboport-door.png diff --git a/boblogistics_1.1.6/graphics/entity/logistic-chest/titanium-chest.png b/boblogistics/graphics/entity/logistic-chest/titanium-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/logistic-chest/titanium-chest.png rename to boblogistics/graphics/entity/logistic-chest/titanium-chest.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/brass/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/brass/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/brass/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/brass/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/brass/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/brass/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/brass/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/brass/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/brass/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/brass/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/brass/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/brass/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/brass/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/brass/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/brass/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/brass/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/brass/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/brass/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cross.png b/boblogistics/graphics/entity/pipe/brass/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-cross.png rename to boblogistics/graphics/entity/pipe/brass/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/brass/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/brass/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/brass/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/brass/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/brass/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/brass/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/brass/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/brass/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/brass/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/brass/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/brass/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-down.png b/boblogistics/graphics/entity/pipe/brass/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/brass/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-left.png b/boblogistics/graphics/entity/pipe/brass/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/brass/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-right.png b/boblogistics/graphics/entity/pipe/brass/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/brass/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-up.png b/boblogistics/graphics/entity/pipe/brass/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/brass/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/brass/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/brass/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/brass/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/brass/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/brass/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/brass/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/brass/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/brass/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/brass/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/brass/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/brass/pipe.png b/boblogistics/graphics/entity/pipe/brass/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/brass/pipe.png rename to boblogistics/graphics/entity/pipe/brass/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/bronze/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/bronze/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/bronze/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/bronze/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/bronze/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/bronze/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/bronze/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/bronze/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/bronze/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/bronze/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cross.png b/boblogistics/graphics/entity/pipe/bronze/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-cross.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/bronze/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/bronze/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/bronze/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/bronze/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/bronze/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-down.png b/boblogistics/graphics/entity/pipe/bronze/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-left.png b/boblogistics/graphics/entity/pipe/bronze/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-right.png b/boblogistics/graphics/entity/pipe/bronze/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-up.png b/boblogistics/graphics/entity/pipe/bronze/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/bronze/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/bronze/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe.png b/boblogistics/graphics/entity/pipe/bronze/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/bronze/pipe.png rename to boblogistics/graphics/entity/pipe/bronze/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/ceramic/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/ceramic/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cross.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-cross.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-down.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-left.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-right.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-up.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/ceramic/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe.png b/boblogistics/graphics/entity/pipe/ceramic/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/ceramic/pipe.png rename to boblogistics/graphics/entity/pipe/ceramic/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cross.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-cross.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe.png b/boblogistics/graphics/entity/pipe/copper-tungsten/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper-tungsten/pipe.png rename to boblogistics/graphics/entity/pipe/copper-tungsten/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/copper/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/copper/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/copper/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/copper/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/copper/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/copper/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/copper/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/copper/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/copper/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/copper/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/copper/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/copper/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/copper/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/copper/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/copper/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/copper/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/copper/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/copper/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cross.png b/boblogistics/graphics/entity/pipe/copper/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-cross.png rename to boblogistics/graphics/entity/pipe/copper/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/copper/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/copper/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/copper/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/copper/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/copper/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/copper/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/copper/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/copper/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/copper/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/copper/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/copper/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-down.png b/boblogistics/graphics/entity/pipe/copper/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/copper/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-left.png b/boblogistics/graphics/entity/pipe/copper/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/copper/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-right.png b/boblogistics/graphics/entity/pipe/copper/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/copper/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-up.png b/boblogistics/graphics/entity/pipe/copper/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/copper/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/copper/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/copper/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/copper/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/copper/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/copper/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/copper/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/copper/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/copper/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/copper/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/copper/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/copper/pipe.png b/boblogistics/graphics/entity/pipe/copper/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/copper/pipe.png rename to boblogistics/graphics/entity/pipe/copper/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/iron/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/iron/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/iron/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/iron/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/iron/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/iron/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/iron/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/iron/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/iron/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/iron/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/iron/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/iron/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/iron/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/iron/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/iron/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/iron/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/iron/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/iron/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cross.png b/boblogistics/graphics/entity/pipe/iron/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-cross.png rename to boblogistics/graphics/entity/pipe/iron/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/iron/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/iron/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/iron/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/iron/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/iron/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/iron/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/iron/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/iron/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/iron/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/iron/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/iron/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-down.png b/boblogistics/graphics/entity/pipe/iron/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/iron/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-left.png b/boblogistics/graphics/entity/pipe/iron/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/iron/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-right.png b/boblogistics/graphics/entity/pipe/iron/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/iron/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-up.png b/boblogistics/graphics/entity/pipe/iron/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/iron/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/iron/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/iron/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/iron/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/iron/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/iron/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/iron/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/iron/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/iron/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/iron/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/iron/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/iron/pipe.png b/boblogistics/graphics/entity/pipe/iron/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/iron/pipe.png rename to boblogistics/graphics/entity/pipe/iron/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/nitinol/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/nitinol/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cross.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-cross.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-down.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-left.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-right.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-up.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/nitinol/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe.png b/boblogistics/graphics/entity/pipe/nitinol/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/nitinol/pipe.png rename to boblogistics/graphics/entity/pipe/nitinol/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-down-mask.png b/boblogistics/graphics/entity/pipe/pipe-arrow-down-mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-down-mask.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-down-mask.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-down.png b/boblogistics/graphics/entity/pipe/pipe-arrow-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-down.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-left-mask.png b/boblogistics/graphics/entity/pipe/pipe-arrow-left-mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-left-mask.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-left-mask.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-left.png b/boblogistics/graphics/entity/pipe/pipe-arrow-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-left.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-right-mask.png b/boblogistics/graphics/entity/pipe/pipe-arrow-right-mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-right-mask.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-right-mask.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-right.png b/boblogistics/graphics/entity/pipe/pipe-arrow-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-right.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-up-mask.png b/boblogistics/graphics/entity/pipe/pipe-arrow-up-mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-up-mask.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-up-mask.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-up.png b/boblogistics/graphics/entity/pipe/pipe-arrow-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/pipe-arrow-up.png rename to boblogistics/graphics/entity/pipe/pipe-arrow-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/plastic/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/plastic/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/plastic/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/plastic/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/plastic/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/plastic/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/plastic/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/plastic/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/plastic/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/plastic/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cross.png b/boblogistics/graphics/entity/pipe/plastic/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-cross.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/plastic/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/plastic/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/plastic/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/plastic/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/plastic/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-down.png b/boblogistics/graphics/entity/pipe/plastic/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-left.png b/boblogistics/graphics/entity/pipe/plastic/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-right.png b/boblogistics/graphics/entity/pipe/plastic/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-up.png b/boblogistics/graphics/entity/pipe/plastic/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/plastic/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/plastic/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe.png b/boblogistics/graphics/entity/pipe/plastic/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/plastic/pipe.png rename to boblogistics/graphics/entity/pipe/plastic/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/steel/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/steel/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/steel/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/steel/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/steel/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/steel/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/steel/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/steel/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/steel/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/steel/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/steel/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/steel/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/steel/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/steel/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/steel/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/steel/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/steel/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/steel/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cross.png b/boblogistics/graphics/entity/pipe/steel/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-cross.png rename to boblogistics/graphics/entity/pipe/steel/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/steel/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/steel/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/steel/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/steel/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/steel/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/steel/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/steel/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/steel/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/steel/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/steel/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/steel/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-down.png b/boblogistics/graphics/entity/pipe/steel/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/steel/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-left.png b/boblogistics/graphics/entity/pipe/steel/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/steel/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-right.png b/boblogistics/graphics/entity/pipe/steel/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/steel/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-up.png b/boblogistics/graphics/entity/pipe/steel/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/steel/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/steel/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/steel/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/steel/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/steel/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/steel/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/steel/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/steel/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/steel/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/steel/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/steel/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/steel/pipe.png b/boblogistics/graphics/entity/pipe/steel/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/steel/pipe.png rename to boblogistics/graphics/entity/pipe/steel/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/stone/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/stone/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/stone/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/stone/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/stone/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/stone/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/stone/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/stone/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/stone/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/stone/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/stone/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/stone/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/stone/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/stone/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/stone/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/stone/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/stone/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/stone/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cross.png b/boblogistics/graphics/entity/pipe/stone/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-cross.png rename to boblogistics/graphics/entity/pipe/stone/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/stone/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/stone/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/stone/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/stone/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/stone/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/stone/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/stone/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/stone/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/stone/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/stone/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/stone/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-down.png b/boblogistics/graphics/entity/pipe/stone/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/stone/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-left.png b/boblogistics/graphics/entity/pipe/stone/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/stone/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-right.png b/boblogistics/graphics/entity/pipe/stone/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/stone/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-up.png b/boblogistics/graphics/entity/pipe/stone/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/stone/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/stone/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/stone/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/stone/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/stone/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/stone/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/stone/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/stone/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/stone/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/stone/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/stone/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/stone/pipe.png b/boblogistics/graphics/entity/pipe/stone/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/stone/pipe.png rename to boblogistics/graphics/entity/pipe/stone/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/titanium/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/titanium/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/titanium/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/titanium/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/titanium/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/titanium/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/titanium/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/titanium/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/titanium/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/titanium/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cross.png b/boblogistics/graphics/entity/pipe/titanium/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-cross.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/titanium/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/titanium/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/titanium/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/titanium/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/titanium/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-down.png b/boblogistics/graphics/entity/pipe/titanium/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-left.png b/boblogistics/graphics/entity/pipe/titanium/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-right.png b/boblogistics/graphics/entity/pipe/titanium/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-up.png b/boblogistics/graphics/entity/pipe/titanium/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/titanium/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/titanium/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe.png b/boblogistics/graphics/entity/pipe/titanium/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/titanium/pipe.png rename to boblogistics/graphics/entity/pipe/titanium/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-east.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-north.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-south.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-west.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cross.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-cross.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-down.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-left.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-right.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-up.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-down.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-down.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-left.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-left.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-right.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-right.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-up.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-t-up.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/tungsten/hr-pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/hr-pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/tungsten/hr-pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-down-left.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-corner-down-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-down-left.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-corner-down-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-down-right.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-corner-down-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-down-right.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-corner-down-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-up-left.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-corner-up-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-up-left.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-corner-up-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-up-right.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-corner-up-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-corner-up-right.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-corner-up-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-east.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-cover-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-east.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-cover-east.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-north.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-cover-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-north.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-cover-north.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-south.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-cover-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-south.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-cover-south.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-west.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-cover-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cover-west.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-cover-west.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cross.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-cross.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-cross.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-cross.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-down.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-ending-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-down.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-ending-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-left.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-ending-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-left.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-ending-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-right.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-ending-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-right.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-ending-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-up.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-ending-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-ending-up.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-ending-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-horizontal-window-background.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-horizontal-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-horizontal-window-background.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-horizontal-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal-single.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal-single.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal-window.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal-window.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-horizontal.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-horizontal.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical-single.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical-single.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical-single.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical-single.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical-window.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical-window.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical-window.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical-window.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-straight-vertical.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-straight-vertical.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-down.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-t-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-down.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-t-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-left.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-t-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-left.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-t-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-right.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-t-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-right.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-t-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-up.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-t-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-t-up.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-t-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-down.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-down.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-down.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-left.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-left.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-left.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-left.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-right.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-right.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-right.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-right.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-up.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-to-ground-up.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-to-ground-up.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-vertical-window-background.png b/boblogistics/graphics/entity/pipe/tungsten/pipe-vertical-window-background.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe-vertical-window-background.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe-vertical-window-background.png diff --git a/boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe.png b/boblogistics/graphics/entity/pipe/tungsten/pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/pipe/tungsten/pipe.png rename to boblogistics/graphics/entity/pipe/tungsten/pipe.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/blank.png b/boblogistics/graphics/entity/roboport/blank.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/blank.png rename to boblogistics/graphics/entity/roboport/blank.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-1.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-1.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-1.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-2.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-2.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-3.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-3.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-4.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-4.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-2.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-animation-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-2.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-animation-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-3.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-animation-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-3.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-animation-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-4.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-animation-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation-4.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-animation-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-animation.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-animation.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-animation.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-1.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-patch-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-1.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-patch-1.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-2.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-patch-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-2.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-patch-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-3.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-patch-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-3.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-patch-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-4.png b/boblogistics/graphics/entity/roboport/hr-roboport-base-patch-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-base-patch-4.png rename to boblogistics/graphics/entity/roboport/hr-roboport-base-patch-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-2.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-down-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-2.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-down-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-3.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-down-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-3.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-down-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-4.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-down-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down-4.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-down-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-down.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-down.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-2.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-up-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-2.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-up-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-3.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-up-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-3.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-up-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-4.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-up-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up-4.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-up-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up.png b/boblogistics/graphics/entity/roboport/hr-roboport-door-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-door-up.png rename to boblogistics/graphics/entity/roboport/hr-roboport-door-up.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-shadow.png b/boblogistics/graphics/entity/roboport/hr-roboport-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/hr-roboport-shadow.png rename to boblogistics/graphics/entity/roboport/hr-roboport-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-2.png b/boblogistics/graphics/entity/roboport/logistic-zone-expander-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-2.png rename to boblogistics/graphics/entity/roboport/logistic-zone-expander-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-3.png b/boblogistics/graphics/entity/roboport/logistic-zone-expander-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-3.png rename to boblogistics/graphics/entity/roboport/logistic-zone-expander-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-4.png b/boblogistics/graphics/entity/roboport/logistic-zone-expander-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander-4.png rename to boblogistics/graphics/entity/roboport/logistic-zone-expander-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander.png b/boblogistics/graphics/entity/roboport/logistic-zone-expander.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-expander.png rename to boblogistics/graphics/entity/roboport/logistic-zone-expander.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-interface.png b/boblogistics/graphics/entity/roboport/logistic-zone-interface.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/logistic-zone-interface.png rename to boblogistics/graphics/entity/roboport/logistic-zone-interface.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/robochest-2.png b/boblogistics/graphics/entity/roboport/robochest-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/robochest-2.png rename to boblogistics/graphics/entity/roboport/robochest-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/robochest-3.png b/boblogistics/graphics/entity/roboport/robochest-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/robochest-3.png rename to boblogistics/graphics/entity/roboport/robochest-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/robochest-4.png b/boblogistics/graphics/entity/roboport/robochest-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/robochest-4.png rename to boblogistics/graphics/entity/roboport/robochest-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/robochest.png b/boblogistics/graphics/entity/roboport/robochest.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/robochest.png rename to boblogistics/graphics/entity/roboport/robochest.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-1.png b/boblogistics/graphics/entity/roboport/roboport-base-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-1.png rename to boblogistics/graphics/entity/roboport/roboport-base-1.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-2.png b/boblogistics/graphics/entity/roboport/roboport-base-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-2.png rename to boblogistics/graphics/entity/roboport/roboport-base-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-3.png b/boblogistics/graphics/entity/roboport/roboport-base-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-3.png rename to boblogistics/graphics/entity/roboport/roboport-base-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-4.png b/boblogistics/graphics/entity/roboport/roboport-base-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-4.png rename to boblogistics/graphics/entity/roboport/roboport-base-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-2.png b/boblogistics/graphics/entity/roboport/roboport-base-animation-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-2.png rename to boblogistics/graphics/entity/roboport/roboport-base-animation-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-3.png b/boblogistics/graphics/entity/roboport/roboport-base-animation-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-3.png rename to boblogistics/graphics/entity/roboport/roboport-base-animation-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-4.png b/boblogistics/graphics/entity/roboport/roboport-base-animation-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation-4.png rename to boblogistics/graphics/entity/roboport/roboport-base-animation-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation.png b/boblogistics/graphics/entity/roboport/roboport-base-animation.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-animation.png rename to boblogistics/graphics/entity/roboport/roboport-base-animation.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-1.png b/boblogistics/graphics/entity/roboport/roboport-base-patch-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-1.png rename to boblogistics/graphics/entity/roboport/roboport-base-patch-1.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-2.png b/boblogistics/graphics/entity/roboport/roboport-base-patch-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-2.png rename to boblogistics/graphics/entity/roboport/roboport-base-patch-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-3.png b/boblogistics/graphics/entity/roboport/roboport-base-patch-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-3.png rename to boblogistics/graphics/entity/roboport/roboport-base-patch-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-4.png b/boblogistics/graphics/entity/roboport/roboport-base-patch-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-base-patch-4.png rename to boblogistics/graphics/entity/roboport/roboport-base-patch-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-2.png b/boblogistics/graphics/entity/roboport/roboport-chargepad-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-2.png rename to boblogistics/graphics/entity/roboport/roboport-chargepad-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-3.png b/boblogistics/graphics/entity/roboport/roboport-chargepad-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-3.png rename to boblogistics/graphics/entity/roboport/roboport-chargepad-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-4.png b/boblogistics/graphics/entity/roboport/roboport-chargepad-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad-4.png rename to boblogistics/graphics/entity/roboport/roboport-chargepad-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad.png b/boblogistics/graphics/entity/roboport/roboport-chargepad.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-chargepad.png rename to boblogistics/graphics/entity/roboport/roboport-chargepad.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-construction-radius-visualization.png b/boblogistics/graphics/entity/roboport/roboport-construction-radius-visualization.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-construction-radius-visualization.png rename to boblogistics/graphics/entity/roboport/roboport-construction-radius-visualization.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-2.png b/boblogistics/graphics/entity/roboport/roboport-door-down-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-2.png rename to boblogistics/graphics/entity/roboport/roboport-door-down-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-3.png b/boblogistics/graphics/entity/roboport/roboport-door-down-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-3.png rename to boblogistics/graphics/entity/roboport/roboport-door-down-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-4.png b/boblogistics/graphics/entity/roboport/roboport-door-down-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down-4.png rename to boblogistics/graphics/entity/roboport/roboport-door-down-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down.png b/boblogistics/graphics/entity/roboport/roboport-door-down.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-down.png rename to boblogistics/graphics/entity/roboport/roboport-door-down.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-2.png b/boblogistics/graphics/entity/roboport/roboport-door-up-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-2.png rename to boblogistics/graphics/entity/roboport/roboport-door-up-2.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-3.png b/boblogistics/graphics/entity/roboport/roboport-door-up-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-3.png rename to boblogistics/graphics/entity/roboport/roboport-door-up-3.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-4.png b/boblogistics/graphics/entity/roboport/roboport-door-up-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up-4.png rename to boblogistics/graphics/entity/roboport/roboport-door-up-4.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up.png b/boblogistics/graphics/entity/roboport/roboport-door-up.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-door-up.png rename to boblogistics/graphics/entity/roboport/roboport-door-up.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-radius-visualization.png b/boblogistics/graphics/entity/roboport/roboport-radius-visualization.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-radius-visualization.png rename to boblogistics/graphics/entity/roboport/roboport-radius-visualization.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-recharging.png b/boblogistics/graphics/entity/roboport/roboport-recharging.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-recharging.png rename to boblogistics/graphics/entity/roboport/roboport-recharging.png diff --git a/boblogistics_1.1.6/graphics/entity/roboport/roboport-shadow.png b/boblogistics/graphics/entity/roboport/roboport-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/roboport/roboport-shadow.png rename to boblogistics/graphics/entity/roboport/roboport-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/Graphics by Zombiee b/boblogistics/graphics/entity/robots/Graphics by Zombiee similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/Graphics by Zombiee rename to boblogistics/graphics/entity/robots/Graphics by Zombiee diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-1.png b/boblogistics/graphics/entity/robots/construction-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-1.png rename to boblogistics/graphics/entity/robots/construction-robot-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-2.png b/boblogistics/graphics/entity/robots/construction-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-2.png rename to boblogistics/graphics/entity/robots/construction-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-3.png b/boblogistics/graphics/entity/robots/construction-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-3.png rename to boblogistics/graphics/entity/robots/construction-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-4.png b/boblogistics/graphics/entity/robots/construction-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-4.png rename to boblogistics/graphics/entity/robots/construction-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-5.png b/boblogistics/graphics/entity/robots/construction-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-5.png rename to boblogistics/graphics/entity/robots/construction-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-shadow.png b/boblogistics/graphics/entity/robots/construction-robot-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-shadow.png rename to boblogistics/graphics/entity/robots/construction-robot-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-1.png b/boblogistics/graphics/entity/robots/construction-robot-working-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-1.png rename to boblogistics/graphics/entity/robots/construction-robot-working-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-2.png b/boblogistics/graphics/entity/robots/construction-robot-working-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-2.png rename to boblogistics/graphics/entity/robots/construction-robot-working-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-3.png b/boblogistics/graphics/entity/robots/construction-robot-working-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-3.png rename to boblogistics/graphics/entity/robots/construction-robot-working-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-4.png b/boblogistics/graphics/entity/robots/construction-robot-working-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-4.png rename to boblogistics/graphics/entity/robots/construction-robot-working-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-5.png b/boblogistics/graphics/entity/robots/construction-robot-working-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/construction-robot-working-5.png rename to boblogistics/graphics/entity/robots/construction-robot-working-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-1.png b/boblogistics/graphics/entity/robots/hr-construction-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-1.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-2.png b/boblogistics/graphics/entity/robots/hr-construction-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-2.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-3.png b/boblogistics/graphics/entity/robots/hr-construction-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-3.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-4.png b/boblogistics/graphics/entity/robots/hr-construction-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-4.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-5.png b/boblogistics/graphics/entity/robots/hr-construction-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-5.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-shadow.png b/boblogistics/graphics/entity/robots/hr-construction-robot-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-shadow.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-1.png b/boblogistics/graphics/entity/robots/hr-construction-robot-working-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-1.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-working-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-2.png b/boblogistics/graphics/entity/robots/hr-construction-robot-working-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-2.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-working-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-3.png b/boblogistics/graphics/entity/robots/hr-construction-robot-working-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-3.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-working-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-4.png b/boblogistics/graphics/entity/robots/hr-construction-robot-working-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-4.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-working-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-5.png b/boblogistics/graphics/entity/robots/hr-construction-robot-working-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-construction-robot-working-5.png rename to boblogistics/graphics/entity/robots/hr-construction-robot-working-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-1.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-1.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-2.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-2.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-3.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-3.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-4.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-4.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-5.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-5.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-shadow.png b/boblogistics/graphics/entity/robots/hr-logistic-robot-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/hr-logistic-robot-shadow.png rename to boblogistics/graphics/entity/robots/hr-logistic-robot-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-1.png b/boblogistics/graphics/entity/robots/logistic-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-1.png rename to boblogistics/graphics/entity/robots/logistic-robot-1.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-2.png b/boblogistics/graphics/entity/robots/logistic-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-2.png rename to boblogistics/graphics/entity/robots/logistic-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-3.png b/boblogistics/graphics/entity/robots/logistic-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-3.png rename to boblogistics/graphics/entity/robots/logistic-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-4.png b/boblogistics/graphics/entity/robots/logistic-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-4.png rename to boblogistics/graphics/entity/robots/logistic-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-5.png b/boblogistics/graphics/entity/robots/logistic-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-5.png rename to boblogistics/graphics/entity/robots/logistic-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/logistic-robot-shadow.png b/boblogistics/graphics/entity/robots/logistic-robot-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/logistic-robot-shadow.png rename to boblogistics/graphics/entity/robots/logistic-robot-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-2.png b/boblogistics/graphics/entity/robots/old/construction-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-2.png rename to boblogistics/graphics/entity/robots/old/construction-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-3.png b/boblogistics/graphics/entity/robots/old/construction-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-3.png rename to boblogistics/graphics/entity/robots/old/construction-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-4.png b/boblogistics/graphics/entity/robots/old/construction-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-4.png rename to boblogistics/graphics/entity/robots/old/construction-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-5.png b/boblogistics/graphics/entity/robots/old/construction-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/construction-robot-5.png rename to boblogistics/graphics/entity/robots/old/construction-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/construction-robot.png b/boblogistics/graphics/entity/robots/old/construction-robot.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/construction-robot.png rename to boblogistics/graphics/entity/robots/old/construction-robot.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-2.png b/boblogistics/graphics/entity/robots/old/logistic-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-2.png rename to boblogistics/graphics/entity/robots/old/logistic-robot-2.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-3.png b/boblogistics/graphics/entity/robots/old/logistic-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-3.png rename to boblogistics/graphics/entity/robots/old/logistic-robot-3.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-4.png b/boblogistics/graphics/entity/robots/old/logistic-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-4.png rename to boblogistics/graphics/entity/robots/old/logistic-robot-4.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-5.png b/boblogistics/graphics/entity/robots/old/logistic-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot-5.png rename to boblogistics/graphics/entity/robots/old/logistic-robot-5.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot.png b/boblogistics/graphics/entity/robots/old/logistic-robot.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/logistic-robot.png rename to boblogistics/graphics/entity/robots/old/logistic-robot.png diff --git a/boblogistics_1.1.6/graphics/entity/robots/old/robot-shadow.png b/boblogistics/graphics/entity/robots/old/robot-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/robots/old/robot-shadow.png rename to boblogistics/graphics/entity/robots/old/robot-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/storage-tank/hr-storage-tank-shadow.png b/boblogistics/graphics/entity/storage-tank/hr-storage-tank-shadow.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/storage-tank/hr-storage-tank-shadow.png rename to boblogistics/graphics/entity/storage-tank/hr-storage-tank-shadow.png diff --git a/boblogistics_1.1.6/graphics/entity/storage-tank/hr-storage-tank.png b/boblogistics/graphics/entity/storage-tank/hr-storage-tank.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/storage-tank/hr-storage-tank.png rename to boblogistics/graphics/entity/storage-tank/hr-storage-tank.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-east.png b/boblogistics/graphics/entity/transport-belt/black-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/black-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-north.png b/boblogistics/graphics/entity/transport-belt/black-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/black-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-south.png b/boblogistics/graphics/entity/transport-belt/black-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/black-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-west.png b/boblogistics/graphics/entity/transport-belt/black-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/black-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-transport-belt.png b/boblogistics/graphics/entity/transport-belt/black-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/black-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/black-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/black-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/black-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/black-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-east.png b/boblogistics/graphics/entity/transport-belt/green-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/green-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-north.png b/boblogistics/graphics/entity/transport-belt/green-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/green-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-south.png b/boblogistics/graphics/entity/transport-belt/green-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/green-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-west.png b/boblogistics/graphics/entity/transport-belt/green-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/green-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-transport-belt.png b/boblogistics/graphics/entity/transport-belt/green-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/green-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/green-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/green-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/green-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/green-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-east.png b/boblogistics/graphics/entity/transport-belt/hr-black-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/hr-black-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-north.png b/boblogistics/graphics/entity/transport-belt/hr-black-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/hr-black-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-south.png b/boblogistics/graphics/entity/transport-belt/hr-black-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/hr-black-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-west.png b/boblogistics/graphics/entity/transport-belt/hr-black-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/hr-black-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-transport-belt.png b/boblogistics/graphics/entity/transport-belt/hr-black-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/hr-black-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/hr-black-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-black-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/hr-black-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-east.png b/boblogistics/graphics/entity/transport-belt/hr-green-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/hr-green-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-north.png b/boblogistics/graphics/entity/transport-belt/hr-green-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/hr-green-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-south.png b/boblogistics/graphics/entity/transport-belt/hr-green-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/hr-green-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-west.png b/boblogistics/graphics/entity/transport-belt/hr-green-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/hr-green-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-transport-belt.png b/boblogistics/graphics/entity/transport-belt/hr-green-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/hr-green-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/hr-green-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-green-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/hr-green-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-east.png b/boblogistics/graphics/entity/transport-belt/hr-purple-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-north.png b/boblogistics/graphics/entity/transport-belt/hr-purple-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-south.png b/boblogistics/graphics/entity/transport-belt/hr-purple-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-west.png b/boblogistics/graphics/entity/transport-belt/hr-purple-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-transport-belt.png b/boblogistics/graphics/entity/transport-belt/hr-purple-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/hr-purple-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/hr-purple-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/hr-purple-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-fast-transport-belt mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-fast-transport-belt mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-fast-transport-belt mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-fast-transport-belt mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-east mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-splitter-east mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-east mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-splitter-east mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-north mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-splitter-north mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-north mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-splitter-north mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-south mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-splitter-south mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-south mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-splitter-south mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-west mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-splitter-west mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-splitter-west mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-splitter-west mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-transport-belt mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-transport-belt mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-transport-belt mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-transport-belt mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-underground-belt-structure mask.png b/boblogistics/graphics/entity/transport-belt/masks/hr-underground-belt-structure mask.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/masks/hr-underground-belt-structure mask.png rename to boblogistics/graphics/entity/transport-belt/masks/hr-underground-belt-structure mask.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-east.png b/boblogistics/graphics/entity/transport-belt/purple-splitter-east.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-east.png rename to boblogistics/graphics/entity/transport-belt/purple-splitter-east.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-north.png b/boblogistics/graphics/entity/transport-belt/purple-splitter-north.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-north.png rename to boblogistics/graphics/entity/transport-belt/purple-splitter-north.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-south.png b/boblogistics/graphics/entity/transport-belt/purple-splitter-south.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-south.png rename to boblogistics/graphics/entity/transport-belt/purple-splitter-south.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-west.png b/boblogistics/graphics/entity/transport-belt/purple-splitter-west.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-splitter-west.png rename to boblogistics/graphics/entity/transport-belt/purple-splitter-west.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-transport-belt.png b/boblogistics/graphics/entity/transport-belt/purple-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-transport-belt.png rename to boblogistics/graphics/entity/transport-belt/purple-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/entity/transport-belt/purple-underground-belt-structure.png b/boblogistics/graphics/entity/transport-belt/purple-underground-belt-structure.png similarity index 100% rename from boblogistics_1.1.6/graphics/entity/transport-belt/purple-underground-belt-structure.png rename to boblogistics/graphics/entity/transport-belt/purple-underground-belt-structure.png diff --git a/boblogistics_1.1.6/graphics/gui/checkbox.png b/boblogistics/graphics/gui/checkbox.png similarity index 100% rename from boblogistics_1.1.6/graphics/gui/checkbox.png rename to boblogistics/graphics/gui/checkbox.png diff --git a/boblogistics_1.1.6/graphics/icons/black-splitter.png b/boblogistics/graphics/icons/black-splitter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/black-splitter.png rename to boblogistics/graphics/icons/black-splitter.png diff --git a/boblogistics_1.1.6/graphics/icons/black-transport-belt.png b/boblogistics/graphics/icons/black-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/black-transport-belt.png rename to boblogistics/graphics/icons/black-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/icons/black-underground-belt.png b/boblogistics/graphics/icons/black-underground-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/black-underground-belt.png rename to boblogistics/graphics/icons/black-underground-belt.png diff --git a/boblogistics_1.1.6/graphics/icons/brass-chest.png b/boblogistics/graphics/icons/brass-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/brass-chest.png rename to boblogistics/graphics/icons/brass-chest.png diff --git a/boblogistics_1.1.6/graphics/icons/flying-robot-frame-2.png b/boblogistics/graphics/icons/flying-robot-frame-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/flying-robot-frame-2.png rename to boblogistics/graphics/icons/flying-robot-frame-2.png diff --git a/boblogistics_1.1.6/graphics/icons/flying-robot-frame-3.png b/boblogistics/graphics/icons/flying-robot-frame-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/flying-robot-frame-3.png rename to boblogistics/graphics/icons/flying-robot-frame-3.png diff --git a/boblogistics_1.1.6/graphics/icons/flying-robot-frame-4.png b/boblogistics/graphics/icons/flying-robot-frame-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/flying-robot-frame-4.png rename to boblogistics/graphics/icons/flying-robot-frame-4.png diff --git a/boblogistics_1.1.6/graphics/icons/flying-robot-frame.png b/boblogistics/graphics/icons/flying-robot-frame.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/flying-robot-frame.png rename to boblogistics/graphics/icons/flying-robot-frame.png diff --git a/boblogistics_1.1.6/graphics/icons/green-splitter.png b/boblogistics/graphics/icons/green-splitter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/green-splitter.png rename to boblogistics/graphics/icons/green-splitter.png diff --git a/boblogistics_1.1.6/graphics/icons/green-transport-belt-to-ground.png b/boblogistics/graphics/icons/green-transport-belt-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/green-transport-belt-to-ground.png rename to boblogistics/graphics/icons/green-transport-belt-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/green-transport-belt.png b/boblogistics/graphics/icons/green-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/green-transport-belt.png rename to boblogistics/graphics/icons/green-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/blue-filter-inserter.png b/boblogistics/graphics/icons/inserter/blue-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/blue-filter-inserter.png rename to boblogistics/graphics/icons/inserter/blue-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/blue-inserter.png b/boblogistics/graphics/icons/inserter/blue-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/blue-inserter.png rename to boblogistics/graphics/icons/inserter/blue-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/blue-stack-filter-inserter.png b/boblogistics/graphics/icons/inserter/blue-stack-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/blue-stack-filter-inserter.png rename to boblogistics/graphics/icons/inserter/blue-stack-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/blue-stack-inserter.png b/boblogistics/graphics/icons/inserter/blue-stack-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/blue-stack-inserter.png rename to boblogistics/graphics/icons/inserter/blue-stack-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/cyan-inserter.png b/boblogistics/graphics/icons/inserter/cyan-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/cyan-inserter.png rename to boblogistics/graphics/icons/inserter/cyan-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/dark-green-inserter.png b/boblogistics/graphics/icons/inserter/dark-green-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/dark-green-inserter.png rename to boblogistics/graphics/icons/inserter/dark-green-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/green-filter-inserter.png b/boblogistics/graphics/icons/inserter/green-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/green-filter-inserter.png rename to boblogistics/graphics/icons/inserter/green-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/green-inserter.png b/boblogistics/graphics/icons/inserter/green-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/green-inserter.png rename to boblogistics/graphics/icons/inserter/green-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/green-stack-filter-inserter.png b/boblogistics/graphics/icons/inserter/green-stack-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/green-stack-filter-inserter.png rename to boblogistics/graphics/icons/inserter/green-stack-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/green-stack-inserter.png b/boblogistics/graphics/icons/inserter/green-stack-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/green-stack-inserter.png rename to boblogistics/graphics/icons/inserter/green-stack-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/magenta-inserter.png b/boblogistics/graphics/icons/inserter/magenta-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/magenta-inserter.png rename to boblogistics/graphics/icons/inserter/magenta-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/purple-filter-inserter.png b/boblogistics/graphics/icons/inserter/purple-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/purple-filter-inserter.png rename to boblogistics/graphics/icons/inserter/purple-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/purple-inserter.png b/boblogistics/graphics/icons/inserter/purple-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/purple-inserter.png rename to boblogistics/graphics/icons/inserter/purple-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/purple-stack-filter-inserter.png b/boblogistics/graphics/icons/inserter/purple-stack-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/purple-stack-filter-inserter.png rename to boblogistics/graphics/icons/inserter/purple-stack-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/purple-stack-inserter.png b/boblogistics/graphics/icons/inserter/purple-stack-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/purple-stack-inserter.png rename to boblogistics/graphics/icons/inserter/purple-stack-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/red-filter-inserter.png b/boblogistics/graphics/icons/inserter/red-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/red-filter-inserter.png rename to boblogistics/graphics/icons/inserter/red-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/red-inserter.png b/boblogistics/graphics/icons/inserter/red-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/red-inserter.png rename to boblogistics/graphics/icons/inserter/red-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/red-stack-filter-inserter.png b/boblogistics/graphics/icons/inserter/red-stack-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/red-stack-filter-inserter.png rename to boblogistics/graphics/icons/inserter/red-stack-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/red-stack-inserter.png b/boblogistics/graphics/icons/inserter/red-stack-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/red-stack-inserter.png rename to boblogistics/graphics/icons/inserter/red-stack-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/stripe-inserter.png b/boblogistics/graphics/icons/inserter/stripe-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/stripe-inserter.png rename to boblogistics/graphics/icons/inserter/stripe-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/white-inserter.png b/boblogistics/graphics/icons/inserter/white-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/white-inserter.png rename to boblogistics/graphics/icons/inserter/white-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/yellow-filter-inserter.png b/boblogistics/graphics/icons/inserter/yellow-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/yellow-filter-inserter.png rename to boblogistics/graphics/icons/inserter/yellow-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/yellow-inserter.png b/boblogistics/graphics/icons/inserter/yellow-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/yellow-inserter.png rename to boblogistics/graphics/icons/inserter/yellow-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/yellow-stack-filter-inserter.png b/boblogistics/graphics/icons/inserter/yellow-stack-filter-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/yellow-stack-filter-inserter.png rename to boblogistics/graphics/icons/inserter/yellow-stack-filter-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/inserter/yellow-stack-inserter.png b/boblogistics/graphics/icons/inserter/yellow-stack-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/inserter/yellow-stack-inserter.png rename to boblogistics/graphics/icons/inserter/yellow-stack-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-chest-port.png b/boblogistics/graphics/icons/logistic-chest-port.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-chest-port.png rename to boblogistics/graphics/icons/logistic-chest-port.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-zone-expander-2.png b/boblogistics/graphics/icons/logistic-zone-expander-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-zone-expander-2.png rename to boblogistics/graphics/icons/logistic-zone-expander-2.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-zone-expander-3.png b/boblogistics/graphics/icons/logistic-zone-expander-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-zone-expander-3.png rename to boblogistics/graphics/icons/logistic-zone-expander-3.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-zone-expander-4.png b/boblogistics/graphics/icons/logistic-zone-expander-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-zone-expander-4.png rename to boblogistics/graphics/icons/logistic-zone-expander-4.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-zone-expander.png b/boblogistics/graphics/icons/logistic-zone-expander.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-zone-expander.png rename to boblogistics/graphics/icons/logistic-zone-expander.png diff --git a/boblogistics_1.1.6/graphics/icons/logistic-zone-interface.png b/boblogistics/graphics/icons/logistic-zone-interface.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/logistic-zone-interface.png rename to boblogistics/graphics/icons/logistic-zone-interface.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/brass-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/brass-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/brass-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/brass-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/brass-pipe.png b/boblogistics/graphics/icons/pipe/brass-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/brass-pipe.png rename to boblogistics/graphics/icons/pipe/brass-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/bronze-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/bronze-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/bronze-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/bronze-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/bronze-pipe.png b/boblogistics/graphics/icons/pipe/bronze-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/bronze-pipe.png rename to boblogistics/graphics/icons/pipe/bronze-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/ceramic-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/ceramic-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/ceramic-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/ceramic-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/ceramic-pipe.png b/boblogistics/graphics/icons/pipe/ceramic-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/ceramic-pipe.png rename to boblogistics/graphics/icons/pipe/ceramic-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/copper-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/copper-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/copper-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/copper-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/copper-pipe.png b/boblogistics/graphics/icons/pipe/copper-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/copper-pipe.png rename to boblogistics/graphics/icons/pipe/copper-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/copper-tungsten-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/copper-tungsten-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/copper-tungsten-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/copper-tungsten-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/copper-tungsten-pipe.png b/boblogistics/graphics/icons/pipe/copper-tungsten-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/copper-tungsten-pipe.png rename to boblogistics/graphics/icons/pipe/copper-tungsten-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/nitinol-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/nitinol-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/nitinol-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/nitinol-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/nitinol-pipe.png b/boblogistics/graphics/icons/pipe/nitinol-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/nitinol-pipe.png rename to boblogistics/graphics/icons/pipe/nitinol-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/overflow-valve.png b/boblogistics/graphics/icons/pipe/overflow-valve.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/overflow-valve.png rename to boblogistics/graphics/icons/pipe/overflow-valve.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/plastic-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/plastic-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/plastic-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/plastic-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/plastic-pipe.png b/boblogistics/graphics/icons/pipe/plastic-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/plastic-pipe.png rename to boblogistics/graphics/icons/pipe/plastic-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/steel-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/steel-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/steel-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/steel-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/steel-pipe.png b/boblogistics/graphics/icons/pipe/steel-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/steel-pipe.png rename to boblogistics/graphics/icons/pipe/steel-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/stone-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/stone-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/stone-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/stone-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/stone-pipe.png b/boblogistics/graphics/icons/pipe/stone-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/stone-pipe.png rename to boblogistics/graphics/icons/pipe/stone-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/titanium-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/titanium-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/titanium-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/titanium-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/titanium-pipe.png b/boblogistics/graphics/icons/pipe/titanium-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/titanium-pipe.png rename to boblogistics/graphics/icons/pipe/titanium-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/topup-valve.png b/boblogistics/graphics/icons/pipe/topup-valve.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/topup-valve.png rename to boblogistics/graphics/icons/pipe/topup-valve.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/tungsten-pipe-to-ground.png b/boblogistics/graphics/icons/pipe/tungsten-pipe-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/tungsten-pipe-to-ground.png rename to boblogistics/graphics/icons/pipe/tungsten-pipe-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/tungsten-pipe.png b/boblogistics/graphics/icons/pipe/tungsten-pipe.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/tungsten-pipe.png rename to boblogistics/graphics/icons/pipe/tungsten-pipe.png diff --git a/boblogistics_1.1.6/graphics/icons/pipe/valve.png b/boblogistics/graphics/icons/pipe/valve.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/pipe/valve.png rename to boblogistics/graphics/icons/pipe/valve.png diff --git a/boblogistics_1.1.6/graphics/icons/purple-splitter.png b/boblogistics/graphics/icons/purple-splitter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/purple-splitter.png rename to boblogistics/graphics/icons/purple-splitter.png diff --git a/boblogistics_1.1.6/graphics/icons/purple-transport-belt-to-ground.png b/boblogistics/graphics/icons/purple-transport-belt-to-ground.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/purple-transport-belt-to-ground.png rename to boblogistics/graphics/icons/purple-transport-belt-to-ground.png diff --git a/boblogistics_1.1.6/graphics/icons/purple-transport-belt.png b/boblogistics/graphics/icons/purple-transport-belt.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/purple-transport-belt.png rename to boblogistics/graphics/icons/purple-transport-belt.png diff --git a/boblogistics_1.1.6/graphics/icons/repair-pack-2.png b/boblogistics/graphics/icons/repair-pack-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/repair-pack-2.png rename to boblogistics/graphics/icons/repair-pack-2.png diff --git a/boblogistics_1.1.6/graphics/icons/repair-pack-3.png b/boblogistics/graphics/icons/repair-pack-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/repair-pack-3.png rename to boblogistics/graphics/icons/repair-pack-3.png diff --git a/boblogistics_1.1.6/graphics/icons/repair-pack-4.png b/boblogistics/graphics/icons/repair-pack-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/repair-pack-4.png rename to boblogistics/graphics/icons/repair-pack-4.png diff --git a/boblogistics_1.1.6/graphics/icons/repair-pack-5.png b/boblogistics/graphics/icons/repair-pack-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/repair-pack-5.png rename to boblogistics/graphics/icons/repair-pack-5.png diff --git a/boblogistics_1.1.6/graphics/icons/repair-pack.png b/boblogistics/graphics/icons/repair-pack.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/repair-pack.png rename to boblogistics/graphics/icons/repair-pack.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-2.png b/boblogistics/graphics/icons/robo-charge-port-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-2.png rename to boblogistics/graphics/icons/robo-charge-port-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-3.png b/boblogistics/graphics/icons/robo-charge-port-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-3.png rename to boblogistics/graphics/icons/robo-charge-port-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-4.png b/boblogistics/graphics/icons/robo-charge-port-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-4.png rename to boblogistics/graphics/icons/robo-charge-port-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-large-2.png b/boblogistics/graphics/icons/robo-charge-port-large-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-large-2.png rename to boblogistics/graphics/icons/robo-charge-port-large-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-large-3.png b/boblogistics/graphics/icons/robo-charge-port-large-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-large-3.png rename to boblogistics/graphics/icons/robo-charge-port-large-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-large-4.png b/boblogistics/graphics/icons/robo-charge-port-large-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-large-4.png rename to boblogistics/graphics/icons/robo-charge-port-large-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port-large.png b/boblogistics/graphics/icons/robo-charge-port-large.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port-large.png rename to boblogistics/graphics/icons/robo-charge-port-large.png diff --git a/boblogistics_1.1.6/graphics/icons/robo-charge-port.png b/boblogistics/graphics/icons/robo-charge-port.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robo-charge-port.png rename to boblogistics/graphics/icons/robo-charge-port.png diff --git a/boblogistics_1.1.6/graphics/icons/robochest-2.png b/boblogistics/graphics/icons/robochest-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robochest-2.png rename to boblogistics/graphics/icons/robochest-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robochest-3.png b/boblogistics/graphics/icons/robochest-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robochest-3.png rename to boblogistics/graphics/icons/robochest-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robochest-4.png b/boblogistics/graphics/icons/robochest-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robochest-4.png rename to boblogistics/graphics/icons/robochest-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robochest.png b/boblogistics/graphics/icons/robochest.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robochest.png rename to boblogistics/graphics/icons/robochest.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-2.png b/boblogistics/graphics/icons/roboport-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-2.png rename to boblogistics/graphics/icons/roboport-2.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-3.png b/boblogistics/graphics/icons/roboport-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-3.png rename to boblogistics/graphics/icons/roboport-3.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-4.png b/boblogistics/graphics/icons/roboport-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-4.png rename to boblogistics/graphics/icons/roboport-4.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-antenna-2.png b/boblogistics/graphics/icons/roboport-antenna-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-antenna-2.png rename to boblogistics/graphics/icons/roboport-antenna-2.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-antenna-3.png b/boblogistics/graphics/icons/roboport-antenna-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-antenna-3.png rename to boblogistics/graphics/icons/roboport-antenna-3.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-antenna-4.png b/boblogistics/graphics/icons/roboport-antenna-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-antenna-4.png rename to boblogistics/graphics/icons/roboport-antenna-4.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-antenna.png b/boblogistics/graphics/icons/roboport-antenna.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-antenna.png rename to boblogistics/graphics/icons/roboport-antenna.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-chargepad-2.png b/boblogistics/graphics/icons/roboport-chargepad-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-chargepad-2.png rename to boblogistics/graphics/icons/roboport-chargepad-2.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-chargepad-3.png b/boblogistics/graphics/icons/roboport-chargepad-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-chargepad-3.png rename to boblogistics/graphics/icons/roboport-chargepad-3.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-chargepad-4.png b/boblogistics/graphics/icons/roboport-chargepad-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-chargepad-4.png rename to boblogistics/graphics/icons/roboport-chargepad-4.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-chargepad.png b/boblogistics/graphics/icons/roboport-chargepad.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-chargepad.png rename to boblogistics/graphics/icons/roboport-chargepad.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-door-2.png b/boblogistics/graphics/icons/roboport-door-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-door-2.png rename to boblogistics/graphics/icons/roboport-door-2.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-door-3.png b/boblogistics/graphics/icons/roboport-door-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-door-3.png rename to boblogistics/graphics/icons/roboport-door-3.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-door-4.png b/boblogistics/graphics/icons/roboport-door-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-door-4.png rename to boblogistics/graphics/icons/roboport-door-4.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport-door.png b/boblogistics/graphics/icons/roboport-door.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport-door.png rename to boblogistics/graphics/icons/roboport-door.png diff --git a/boblogistics_1.1.6/graphics/icons/roboport.png b/boblogistics/graphics/icons/roboport.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/roboport.png rename to boblogistics/graphics/icons/roboport.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-construction-2.png b/boblogistics/graphics/icons/robot-brain-construction-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-construction-2.png rename to boblogistics/graphics/icons/robot-brain-construction-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-construction-3.png b/boblogistics/graphics/icons/robot-brain-construction-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-construction-3.png rename to boblogistics/graphics/icons/robot-brain-construction-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-construction-4.png b/boblogistics/graphics/icons/robot-brain-construction-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-construction-4.png rename to boblogistics/graphics/icons/robot-brain-construction-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-construction.png b/boblogistics/graphics/icons/robot-brain-construction.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-construction.png rename to boblogistics/graphics/icons/robot-brain-construction.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-logistic-2.png b/boblogistics/graphics/icons/robot-brain-logistic-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-logistic-2.png rename to boblogistics/graphics/icons/robot-brain-logistic-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-logistic-3.png b/boblogistics/graphics/icons/robot-brain-logistic-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-logistic-3.png rename to boblogistics/graphics/icons/robot-brain-logistic-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-logistic-4.png b/boblogistics/graphics/icons/robot-brain-logistic-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-logistic-4.png rename to boblogistics/graphics/icons/robot-brain-logistic-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-brain-logistic.png b/boblogistics/graphics/icons/robot-brain-logistic.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-brain-logistic.png rename to boblogistics/graphics/icons/robot-brain-logistic.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-tool-construction.png b/boblogistics/graphics/icons/robot-tool-construction.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-tool-construction.png rename to boblogistics/graphics/icons/robot-tool-construction.png diff --git a/boblogistics_1.1.6/graphics/icons/robot-tool-logistic.png b/boblogistics/graphics/icons/robot-tool-logistic.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robot-tool-logistic.png rename to boblogistics/graphics/icons/robot-tool-logistic.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/construction-robot-1.png b/boblogistics/graphics/icons/robots/construction-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/construction-robot-1.png rename to boblogistics/graphics/icons/robots/construction-robot-1.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/construction-robot-2.png b/boblogistics/graphics/icons/robots/construction-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/construction-robot-2.png rename to boblogistics/graphics/icons/robots/construction-robot-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/construction-robot-3.png b/boblogistics/graphics/icons/robots/construction-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/construction-robot-3.png rename to boblogistics/graphics/icons/robots/construction-robot-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/construction-robot-4.png b/boblogistics/graphics/icons/robots/construction-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/construction-robot-4.png rename to boblogistics/graphics/icons/robots/construction-robot-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/construction-robot-5.png b/boblogistics/graphics/icons/robots/construction-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/construction-robot-5.png rename to boblogistics/graphics/icons/robots/construction-robot-5.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/logistic-robot-1.png b/boblogistics/graphics/icons/robots/logistic-robot-1.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/logistic-robot-1.png rename to boblogistics/graphics/icons/robots/logistic-robot-1.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/logistic-robot-2.png b/boblogistics/graphics/icons/robots/logistic-robot-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/logistic-robot-2.png rename to boblogistics/graphics/icons/robots/logistic-robot-2.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/logistic-robot-3.png b/boblogistics/graphics/icons/robots/logistic-robot-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/logistic-robot-3.png rename to boblogistics/graphics/icons/robots/logistic-robot-3.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/logistic-robot-4.png b/boblogistics/graphics/icons/robots/logistic-robot-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/logistic-robot-4.png rename to boblogistics/graphics/icons/robots/logistic-robot-4.png diff --git a/boblogistics_1.1.6/graphics/icons/robots/logistic-robot-5.png b/boblogistics/graphics/icons/robots/logistic-robot-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/robots/logistic-robot-5.png rename to boblogistics/graphics/icons/robots/logistic-robot-5.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/blue-inserter.png b/boblogistics/graphics/icons/technology/blue-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/blue-inserter.png rename to boblogistics/graphics/icons/technology/blue-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/character-auto-logistic-trash-slots.png b/boblogistics/graphics/icons/technology/character-auto-logistic-trash-slots.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/character-auto-logistic-trash-slots.png rename to boblogistics/graphics/icons/technology/character-auto-logistic-trash-slots.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/character-inventory-slots.png b/boblogistics/graphics/icons/technology/character-inventory-slots.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/character-inventory-slots.png rename to boblogistics/graphics/icons/technology/character-inventory-slots.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/character-logistic-slots.png b/boblogistics/graphics/icons/technology/character-logistic-slots.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/character-logistic-slots.png rename to boblogistics/graphics/icons/technology/character-logistic-slots.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/character-logistic-trash-slots.png b/boblogistics/graphics/icons/technology/character-logistic-trash-slots.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/character-logistic-trash-slots.png rename to boblogistics/graphics/icons/technology/character-logistic-trash-slots.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/express-inserter.png b/boblogistics/graphics/icons/technology/express-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/express-inserter.png rename to boblogistics/graphics/icons/technology/express-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/green-inserter.png b/boblogistics/graphics/icons/technology/green-inserter.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/green-inserter.png rename to boblogistics/graphics/icons/technology/green-inserter.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/logistics-0.png b/boblogistics/graphics/icons/technology/logistics-0.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/logistics-0.png rename to boblogistics/graphics/icons/technology/logistics-0.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/logistics-4.png b/boblogistics/graphics/icons/technology/logistics-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/logistics-4.png rename to boblogistics/graphics/icons/technology/logistics-4.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/logistics-5.png b/boblogistics/graphics/icons/technology/logistics-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/logistics-5.png rename to boblogistics/graphics/icons/technology/logistics-5.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/logistics.png b/boblogistics/graphics/icons/technology/logistics.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/logistics.png rename to boblogistics/graphics/icons/technology/logistics.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/long-inserters.png b/boblogistics/graphics/icons/technology/long-inserters.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/long-inserters.png rename to boblogistics/graphics/icons/technology/long-inserters.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/magenta-inserters.png b/boblogistics/graphics/icons/technology/magenta-inserters.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/magenta-inserters.png rename to boblogistics/graphics/icons/technology/magenta-inserters.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/modular-roboport-2.png b/boblogistics/graphics/icons/technology/modular-roboport-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/modular-roboport-2.png rename to boblogistics/graphics/icons/technology/modular-roboport-2.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/modular-roboport-3.png b/boblogistics/graphics/icons/technology/modular-roboport-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/modular-roboport-3.png rename to boblogistics/graphics/icons/technology/modular-roboport-3.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/modular-roboport-4.png b/boblogistics/graphics/icons/technology/modular-roboport-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/modular-roboport-4.png rename to boblogistics/graphics/icons/technology/modular-roboport-4.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/modular-roboport.png b/boblogistics/graphics/icons/technology/modular-roboport.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/modular-roboport.png rename to boblogistics/graphics/icons/technology/modular-roboport.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/repair-pack.png b/boblogistics/graphics/icons/technology/repair-pack.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/repair-pack.png rename to boblogistics/graphics/icons/technology/repair-pack.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/robotics-2.png b/boblogistics/graphics/icons/technology/robotics-2.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/robotics-2.png rename to boblogistics/graphics/icons/technology/robotics-2.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/robotics-3.png b/boblogistics/graphics/icons/technology/robotics-3.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/robotics-3.png rename to boblogistics/graphics/icons/technology/robotics-3.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/robotics-4.png b/boblogistics/graphics/icons/technology/robotics-4.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/robotics-4.png rename to boblogistics/graphics/icons/technology/robotics-4.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/robotics-5.png b/boblogistics/graphics/icons/technology/robotics-5.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/robotics-5.png rename to boblogistics/graphics/icons/technology/robotics-5.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/robotics.png b/boblogistics/graphics/icons/technology/robotics.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/robotics.png rename to boblogistics/graphics/icons/technology/robotics.png diff --git a/boblogistics_1.1.6/graphics/icons/technology/stack-inserter-capacity.png b/boblogistics/graphics/icons/technology/stack-inserter-capacity.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/technology/stack-inserter-capacity.png rename to boblogistics/graphics/icons/technology/stack-inserter-capacity.png diff --git a/boblogistics_1.1.6/graphics/icons/titanium-chest.png b/boblogistics/graphics/icons/titanium-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/titanium-chest.png rename to boblogistics/graphics/icons/titanium-chest.png diff --git a/boblogistics_1.1.6/graphics/icons/titanium-logistic-chest.png b/boblogistics/graphics/icons/titanium-logistic-chest.png similarity index 100% rename from boblogistics_1.1.6/graphics/icons/titanium-logistic-chest.png rename to boblogistics/graphics/icons/titanium-logistic-chest.png diff --git a/boblogistics/info.json b/boblogistics/info.json new file mode 100644 index 00000000..ff4efb54 --- /dev/null +++ b/boblogistics/info.json @@ -0,0 +1,18 @@ +{ + "name": "boblogistics", + "version": "1.2.2", + "factorio_version": "1.1", + "title": "Bob's Logistics mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0", + "? bobinserters >= 1.2.0", + "(?) Krastorio2", + "(?) aai-loaders" + ], + "description": "Requires Bob's functions library mod.\n\nAdds lots logistic related things in all areas.\nAdds 2 higher tiers of belt and related entities.\nBelt overhaul will change all recipes to make better use of Bob mod resources, and add a Tier 0.\nAdds a higher tier of inserters.\nInserter overhaul will add more tiers of inserter, replace long handed inserter with a menu to make other inserters long handed, and change all recipes to make better use of Bob mod resources.\nIf suitable materials are available, it will add 2 higher tiers of chest, and logistic chests\nAdds 2 higher tiers of train set (Locomotive, Cargo wagon and Fluid wagon) that will have higher speed and storage. Also adds an armored train set, and Tier 2 version of it.\nAdds tier 2 to 4 pumps, and reduces the flow to make the progression work\nAdds tier 2 to 4 of Logistic and Construction robots.\nAdds tier 2 to 4 roboports, roboport parts (intermediates), and smaller specialised entities, such as the Logistic Zone Expander and Robochest.\nAdds tier 2 to 4 of storage tank.\nAdds many new pipes made from many different materials, spanning 5 tiers.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/boblogistics_1.1.6/locale/en/boblogistics.cfg b/boblogistics/locale/en/boblogistics.cfg similarity index 100% rename from boblogistics_1.1.6/locale/en/boblogistics.cfg rename to boblogistics/locale/en/boblogistics.cfg diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.15.0.json b/boblogistics/migrations/boblogistics_0.15.0.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.15.0.json rename to boblogistics/migrations/boblogistics_0.15.0.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.15.2.json b/boblogistics/migrations/boblogistics_0.15.2.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.15.2.json rename to boblogistics/migrations/boblogistics_0.15.2.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.16.10.json b/boblogistics/migrations/boblogistics_0.16.10.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.16.10.json rename to boblogistics/migrations/boblogistics_0.16.10.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.16.16.json b/boblogistics/migrations/boblogistics_0.16.16.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.16.16.json rename to boblogistics/migrations/boblogistics_0.16.16.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.0.json b/boblogistics/migrations/boblogistics_0.17.0.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.0.json rename to boblogistics/migrations/boblogistics_0.17.0.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.0.lua b/boblogistics/migrations/boblogistics_0.17.0.lua similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.0.lua rename to boblogistics/migrations/boblogistics_0.17.0.lua diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.14.json b/boblogistics/migrations/boblogistics_0.17.14.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.14.json rename to boblogistics/migrations/boblogistics_0.17.14.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.2.json b/boblogistics/migrations/boblogistics_0.17.2.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.2.json rename to boblogistics/migrations/boblogistics_0.17.2.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.5.json b/boblogistics/migrations/boblogistics_0.17.5.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.5.json rename to boblogistics/migrations/boblogistics_0.17.5.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.6.json b/boblogistics/migrations/boblogistics_0.17.6.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.6.json rename to boblogistics/migrations/boblogistics_0.17.6.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_0.17.7.json b/boblogistics/migrations/boblogistics_0.17.7.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_0.17.7.json rename to boblogistics/migrations/boblogistics_0.17.7.json diff --git a/boblogistics_1.1.6/migrations/boblogistics_1.1.6.json b/boblogistics/migrations/boblogistics_1.1.6.json similarity index 100% rename from boblogistics_1.1.6/migrations/boblogistics_1.1.6.json rename to boblogistics/migrations/boblogistics_1.1.6.json diff --git a/boblogistics_1.1.6/prototypes/category.lua b/boblogistics/prototypes/category.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/category.lua rename to boblogistics/prototypes/category.lua diff --git a/boblogistics_1.1.6/prototypes/chests.lua b/boblogistics/prototypes/chests.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/chests.lua rename to boblogistics/prototypes/chests.lua diff --git a/boblogistics_1.1.6/prototypes/entity/belt.lua b/boblogistics/prototypes/entity/belt.lua similarity index 99% rename from boblogistics_1.1.6/prototypes/entity/belt.lua rename to boblogistics/prototypes/entity/belt.lua index e9fec4be..8ed65c7d 100644 --- a/boblogistics_1.1.6/prototypes/entity/belt.lua +++ b/boblogistics/prototypes/entity/belt.lua @@ -107,7 +107,6 @@ if settings.startup["bobmods-logistics-beltoverhaul"].value == true then }, collision_box = { { -0.4, -0.4 }, { 0.4, 0.4 } }, selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - distance_to_enter = 0.5, animation_speed_coefficient = 32, belt_animation_set = bobmods.logistics.black_belt_animation_set, fast_replaceable_group = "transport-belt", @@ -394,7 +393,6 @@ data:extend({ }, collision_box = { { -0.4, -0.4 }, { 0.4, 0.4 } }, selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - distance_to_enter = 0.5, animation_speed_coefficient = 32, belt_animation_set = bobmods.logistics.purple_belt_animation_set, fast_replaceable_group = "transport-belt", @@ -679,7 +677,6 @@ data:extend({ }, collision_box = { { -0.4, -0.4 }, { 0.4, 0.4 } }, selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - distance_to_enter = 0.5, animation_speed_coefficient = 32, belt_animation_set = bobmods.logistics.green_belt_animation_set, fast_replaceable_group = "transport-belt", diff --git a/boblogistics_1.1.6/prototypes/entity/inserter-graphics.lua b/boblogistics/prototypes/entity/inserter-graphics.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/inserter-graphics.lua rename to boblogistics/prototypes/entity/inserter-graphics.lua diff --git a/boblogistics_1.1.6/prototypes/entity/inserter.lua b/boblogistics/prototypes/entity/inserter.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/inserter.lua rename to boblogistics/prototypes/entity/inserter.lua diff --git a/boblogistics_1.1.6/prototypes/entity/logistic-container.lua b/boblogistics/prototypes/entity/logistic-container.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/logistic-container.lua rename to boblogistics/prototypes/entity/logistic-container.lua diff --git a/boblogistics_1.1.6/prototypes/entity/pipes.lua b/boblogistics/prototypes/entity/pipes.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/pipes.lua rename to boblogistics/prototypes/entity/pipes.lua diff --git a/boblogistics_1.1.6/prototypes/entity/pump.lua b/boblogistics/prototypes/entity/pump.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/pump.lua rename to boblogistics/prototypes/entity/pump.lua diff --git a/boblogistics_1.1.6/prototypes/entity/roboport.lua b/boblogistics/prototypes/entity/roboport.lua similarity index 92% rename from boblogistics_1.1.6/prototypes/entity/roboport.lua rename to boblogistics/prototypes/entity/roboport.lua index b8cb8660..586d059d 100644 --- a/boblogistics_1.1.6/prototypes/entity/roboport.lua +++ b/boblogistics/prototypes/entity/roboport.lua @@ -219,16 +219,6 @@ if settings.startup["bobmods-logistics-disableroboports"].value == false then recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = -0.1, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, open_door_trigger_effect = sounds.roboport_door_open, close_door_trigger_effect = sounds.roboport_door_close, circuit_wire_connection_point = circuit_connector_definitions["roboport"].points, @@ -406,16 +396,6 @@ if settings.startup["bobmods-logistics-disableroboports"].value == false then recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = -0.1, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, open_door_trigger_effect = sounds.roboport_door_open, close_door_trigger_effect = sounds.roboport_door_close, circuit_wire_connection_point = circuit_connector_definitions["roboport"].points, @@ -593,16 +573,6 @@ if settings.startup["bobmods-logistics-disableroboports"].value == false then recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = -0.1, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, open_door_trigger_effect = sounds.roboport_door_open, close_door_trigger_effect = sounds.roboport_door_close, circuit_wire_connection_point = circuit_connector_definitions["roboport"].points, @@ -715,16 +685,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.25, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, open_sound = sounds.machine_open, close_sound = sounds.machine_close, @@ -830,16 +790,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.25, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, open_sound = sounds.machine_open, close_sound = sounds.machine_close, @@ -944,16 +894,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.25, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, open_sound = sounds.machine_open, close_sound = sounds.machine_close, @@ -1057,16 +997,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.25, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, open_sound = sounds.machine_open, close_sound = sounds.machine_close, @@ -1161,16 +1091,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 1.75, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1264,16 +1184,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 1.75, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1367,16 +1277,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 1.75, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1470,16 +1370,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 1.75, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-radius-visualization.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/roboport-construction-radius-visualization.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1601,16 +1491,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1730,16 +1610,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1859,16 +1729,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -1987,16 +1847,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -2166,16 +2016,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -2345,16 +2185,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -2524,16 +2354,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -2702,16 +2522,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, vehicle_impact_sound = sounds.generic_impact, working_sound = { sound = { filename = "__base__/sound/roboport-working.ogg", volume = 0.4 }, @@ -2815,16 +2625,6 @@ data:extend({ recharging_light = { intensity = 0.4, size = 5 }, request_to_open_door_timeout = 15, spawn_and_station_height = 0.33, - radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, - construction_radius_visualisation_picture = { - filename = "__boblogistics__/graphics/entity/roboport/blank.png", - width = 12, - height = 12, - }, open_door_trigger_effect = { { type = "play-sound", diff --git a/boblogistics_1.1.6/prototypes/entity/robots.lua b/boblogistics/prototypes/entity/robots.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/robots.lua rename to boblogistics/prototypes/entity/robots.lua diff --git a/boblogistics_1.1.6/prototypes/entity/storage-tank.lua b/boblogistics/prototypes/entity/storage-tank.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/storage-tank.lua rename to boblogistics/prototypes/entity/storage-tank.lua diff --git a/boblogistics_1.1.6/prototypes/entity/train.lua b/boblogistics/prototypes/entity/train.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/entity/train.lua rename to boblogistics/prototypes/entity/train.lua diff --git a/boblogistics_1.1.6/prototypes/item/belt.lua b/boblogistics/prototypes/item/belt.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/belt.lua rename to boblogistics/prototypes/item/belt.lua diff --git a/boblogistics_1.1.6/prototypes/item/inserter.lua b/boblogistics/prototypes/item/inserter.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/inserter.lua rename to boblogistics/prototypes/item/inserter.lua diff --git a/boblogistics_1.1.6/prototypes/item/logistic-container.lua b/boblogistics/prototypes/item/logistic-container.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/logistic-container.lua rename to boblogistics/prototypes/item/logistic-container.lua diff --git a/boblogistics_1.1.6/prototypes/item/pipes.lua b/boblogistics/prototypes/item/pipes.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/pipes.lua rename to boblogistics/prototypes/item/pipes.lua diff --git a/boblogistics_1.1.6/prototypes/item/pump.lua b/boblogistics/prototypes/item/pump.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/pump.lua rename to boblogistics/prototypes/item/pump.lua diff --git a/boblogistics_1.1.6/prototypes/item/roboport-parts.lua b/boblogistics/prototypes/item/roboport-parts.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/roboport-parts.lua rename to boblogistics/prototypes/item/roboport-parts.lua diff --git a/boblogistics_1.1.6/prototypes/item/roboport.lua b/boblogistics/prototypes/item/roboport.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/roboport.lua rename to boblogistics/prototypes/item/roboport.lua diff --git a/boblogistics_1.1.6/prototypes/item/robots.lua b/boblogistics/prototypes/item/robots.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/robots.lua rename to boblogistics/prototypes/item/robots.lua diff --git a/boblogistics_1.1.6/prototypes/item/storage-tank.lua b/boblogistics/prototypes/item/storage-tank.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/storage-tank.lua rename to boblogistics/prototypes/item/storage-tank.lua diff --git a/boblogistics_1.1.6/prototypes/item/train.lua b/boblogistics/prototypes/item/train.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/item/train.lua rename to boblogistics/prototypes/item/train.lua diff --git a/boblogistics_1.1.6/prototypes/productivity-limitations.lua b/boblogistics/prototypes/productivity-limitations.lua similarity index 97% rename from boblogistics_1.1.6/prototypes/productivity-limitations.lua rename to boblogistics/prototypes/productivity-limitations.lua index 6343c93e..a70d9a86 100644 --- a/boblogistics_1.1.6/prototypes/productivity-limitations.lua +++ b/boblogistics/prototypes/productivity-limitations.lua @@ -76,3 +76,5 @@ end if data.raw.recipe["robot-tool-construction-4"] then bobmods.lib.module.add_productivity_limitation("robot-tool-construction-4") end + +bobmods.lib.module.add_productivity_limitation("bob-oil-processing") \ No newline at end of file diff --git a/boblogistics_1.1.6/prototypes/recipe/belt-recipe-updates.lua b/boblogistics/prototypes/recipe/belt-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/belt-recipe-updates.lua rename to boblogistics/prototypes/recipe/belt-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/belt-recipe.lua b/boblogistics/prototypes/recipe/belt-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/belt-recipe.lua rename to boblogistics/prototypes/recipe/belt-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/inserter-recipe-updates.lua b/boblogistics/prototypes/recipe/inserter-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/inserter-recipe-updates.lua rename to boblogistics/prototypes/recipe/inserter-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/inserter-recipe.lua b/boblogistics/prototypes/recipe/inserter-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/inserter-recipe.lua rename to boblogistics/prototypes/recipe/inserter-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/logistic-container-recipe-updates.lua b/boblogistics/prototypes/recipe/logistic-container-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/logistic-container-recipe-updates.lua rename to boblogistics/prototypes/recipe/logistic-container-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/logistic-container-recipe.lua b/boblogistics/prototypes/recipe/logistic-container-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/logistic-container-recipe.lua rename to boblogistics/prototypes/recipe/logistic-container-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/pipes-recipe.lua b/boblogistics/prototypes/recipe/pipes-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/pipes-recipe.lua rename to boblogistics/prototypes/recipe/pipes-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/pump-recipe-updates.lua b/boblogistics/prototypes/recipe/pump-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/pump-recipe-updates.lua rename to boblogistics/prototypes/recipe/pump-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/pump-recipe.lua b/boblogistics/prototypes/recipe/pump-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/pump-recipe.lua rename to boblogistics/prototypes/recipe/pump-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/roboport-parts-recipe.lua b/boblogistics/prototypes/recipe/roboport-parts-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/roboport-parts-recipe.lua rename to boblogistics/prototypes/recipe/roboport-parts-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/roboport-recipe-updates.lua b/boblogistics/prototypes/recipe/roboport-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/roboport-recipe-updates.lua rename to boblogistics/prototypes/recipe/roboport-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/roboport-recipe.lua b/boblogistics/prototypes/recipe/roboport-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/roboport-recipe.lua rename to boblogistics/prototypes/recipe/roboport-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/robots-recipe-updates.lua b/boblogistics/prototypes/recipe/robots-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/robots-recipe-updates.lua rename to boblogistics/prototypes/recipe/robots-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/robots-recipe.lua b/boblogistics/prototypes/recipe/robots-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/robots-recipe.lua rename to boblogistics/prototypes/recipe/robots-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/storage-tank-recipe-updates.lua b/boblogistics/prototypes/recipe/storage-tank-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/storage-tank-recipe-updates.lua rename to boblogistics/prototypes/recipe/storage-tank-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/storage-tank-recipe.lua b/boblogistics/prototypes/recipe/storage-tank-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/storage-tank-recipe.lua rename to boblogistics/prototypes/recipe/storage-tank-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/train-recipe-updates.lua b/boblogistics/prototypes/recipe/train-recipe-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/train-recipe-updates.lua rename to boblogistics/prototypes/recipe/train-recipe-updates.lua diff --git a/boblogistics_1.1.6/prototypes/recipe/train-recipe.lua b/boblogistics/prototypes/recipe/train-recipe.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/recipe/train-recipe.lua rename to boblogistics/prototypes/recipe/train-recipe.lua diff --git a/boblogistics_1.1.6/prototypes/repair-pack-updates.lua b/boblogistics/prototypes/repair-pack-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/repair-pack-updates.lua rename to boblogistics/prototypes/repair-pack-updates.lua diff --git a/boblogistics_1.1.6/prototypes/repair-pack.lua b/boblogistics/prototypes/repair-pack.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/repair-pack.lua rename to boblogistics/prototypes/repair-pack.lua diff --git a/boblogistics_1.1.6/prototypes/robot-parts.lua b/boblogistics/prototypes/robot-parts.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/robot-parts.lua rename to boblogistics/prototypes/robot-parts.lua diff --git a/boblogistics_1.1.6/prototypes/technology-inserter.lua b/boblogistics/prototypes/technology-inserter.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/technology-inserter.lua rename to boblogistics/prototypes/technology-inserter.lua diff --git a/boblogistics_1.1.6/prototypes/technology-logistics.lua b/boblogistics/prototypes/technology-logistics.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/technology-logistics.lua rename to boblogistics/prototypes/technology-logistics.lua diff --git a/boblogistics_1.1.6/prototypes/technology-updates.lua b/boblogistics/prototypes/technology-updates.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/technology-updates.lua rename to boblogistics/prototypes/technology-updates.lua diff --git a/boblogistics_1.1.6/prototypes/technology.lua b/boblogistics/prototypes/technology.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/technology.lua rename to boblogistics/prototypes/technology.lua diff --git a/boblogistics_1.1.6/prototypes/transport-belt-pictures.lua b/boblogistics/prototypes/transport-belt-pictures.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/transport-belt-pictures.lua rename to boblogistics/prototypes/transport-belt-pictures.lua diff --git a/boblogistics_1.1.6/prototypes/valves.lua b/boblogistics/prototypes/valves.lua similarity index 100% rename from boblogistics_1.1.6/prototypes/valves.lua rename to boblogistics/prototypes/valves.lua diff --git a/boblogistics_1.1.6/settings.lua b/boblogistics/settings.lua similarity index 100% rename from boblogistics_1.1.6/settings.lua rename to boblogistics/settings.lua diff --git a/boblogistics_1.1.6/thumbnail.png b/boblogistics/thumbnail.png similarity index 100% rename from boblogistics_1.1.6/thumbnail.png rename to boblogistics/thumbnail.png diff --git a/boblogistics_1.1.6/info.json b/boblogistics_1.1.6/info.json deleted file mode 100644 index 2ef275f3..00000000 --- a/boblogistics_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "boblogistics", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Logistics mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6", - "? bobinserters >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nAdds lots logistic related things in all areas.\nAdds 2 higher tiers of belt and related entities.\nBelt overhaul will change all recipes to make better use of Bob mod resources, and add a Tier 0.\nAdds a higher tier of inserters.\nInserter overhaul will add more tiers of inserter, replace long handed inserter with a menu to make other inserters long handed, and change all recipes to make better use of Bob mod resources.\nIf suitable materials are available, it will add 2 higher tiers of chest, and logistic chests\nAdds 2 higher tiers of train set (Locomotive, Cargo wagon and Fluid wagon) that will have higher speed and storage. Also adds an armored train set, and Tier 2 version of it.\nAdds tier 2 to 4 pumps, and reduces the flow to make the progression work\nAdds tier 2 to 4 of Logistic and Construction robots.\nAdds tier 2 to 4 roboports, roboport parts (intermediates), and smaller specialised entities, such as the Logistic Zone Expander and Robochest.\nAdds tier 2 to 4 of storage tank.\nAdds many new pipes made from many different materials, spanning 5 tiers.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobmining_1.1.6/changelog.txt b/bobmining/changelog.txt similarity index 100% rename from bobmining_1.1.6/changelog.txt rename to bobmining/changelog.txt diff --git a/bobmining/data-updates.lua b/bobmining/data-updates.lua new file mode 100644 index 00000000..c282d096 --- /dev/null +++ b/bobmining/data-updates.lua @@ -0,0 +1,4 @@ +require("prototypes.drill-updates") +require("prototypes.areadrill-updates") +require("prototypes.pumpjack-updates") +require("prototypes.water-miner-updates") diff --git a/bobmining_1.1.6/data.lua b/bobmining/data.lua similarity index 100% rename from bobmining_1.1.6/data.lua rename to bobmining/data.lua diff --git a/bobmining_1.1.6/graphics/entity/water-miner/water-miner-animation.png b/bobmining/graphics/entity/water-miner/water-miner-animation.png similarity index 100% rename from bobmining_1.1.6/graphics/entity/water-miner/water-miner-animation.png rename to bobmining/graphics/entity/water-miner/water-miner-animation.png diff --git a/bobmining_1.1.6/graphics/entity/water-miner/water-miner-base.png b/bobmining/graphics/entity/water-miner/water-miner-base.png similarity index 100% rename from bobmining_1.1.6/graphics/entity/water-miner/water-miner-base.png rename to bobmining/graphics/entity/water-miner/water-miner-base.png diff --git a/bobmining_1.1.6/graphics/entity/water-miner/water-miner-radius-visualization.png b/bobmining/graphics/entity/water-miner/water-miner-radius-visualization.png similarity index 100% rename from bobmining_1.1.6/graphics/entity/water-miner/water-miner-radius-visualization.png rename to bobmining/graphics/entity/water-miner/water-miner-radius-visualization.png diff --git a/bobmining_1.1.6/graphics/icons/brass-axe.png b/bobmining/graphics/icons/brass-axe.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/brass-axe.png rename to bobmining/graphics/icons/brass-axe.png diff --git a/bobmining_1.1.6/graphics/icons/cobalt-axe.png b/bobmining/graphics/icons/cobalt-axe.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/cobalt-axe.png rename to bobmining/graphics/icons/cobalt-axe.png diff --git a/bobmining_1.1.6/graphics/icons/diamond-axe.png b/bobmining/graphics/icons/diamond-axe.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/diamond-axe.png rename to bobmining/graphics/icons/diamond-axe.png diff --git a/bobmining_1.1.6/graphics/icons/titanium-axe.png b/bobmining/graphics/icons/titanium-axe.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/titanium-axe.png rename to bobmining/graphics/icons/titanium-axe.png diff --git a/bobmining_1.1.6/graphics/icons/tungsten-axe.png b/bobmining/graphics/icons/tungsten-axe.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/tungsten-axe.png rename to bobmining/graphics/icons/tungsten-axe.png diff --git a/bobmining_1.1.6/graphics/icons/waterdrill.png b/bobmining/graphics/icons/waterdrill.png similarity index 100% rename from bobmining_1.1.6/graphics/icons/waterdrill.png rename to bobmining/graphics/icons/waterdrill.png diff --git a/bobmining/info.json b/bobmining/info.json new file mode 100644 index 00000000..bd9a66d4 --- /dev/null +++ b/bobmining/info.json @@ -0,0 +1,16 @@ +{ + "name": "bobmining", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Mining mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobores >= 1.2.0", + "? bobplates >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nAdds higher tiers of electric mining drill that increase mining speed.\nAdds an additional branch of electric mining drills that increase the mining area.\nAdds higher tiers of Pumpjacks\nAdds a full set of water mining drills, for use with the water patches added by Bob's Ores mod.\nAdds several tiers of steel-axe technology to further increase personal mining speed.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobmining_1.1.6/locale/en/bobmining.cfg b/bobmining/locale/en/bobmining.cfg similarity index 100% rename from bobmining_1.1.6/locale/en/bobmining.cfg rename to bobmining/locale/en/bobmining.cfg diff --git a/bobmining_1.1.6/prototypes/areadrill-updates.lua b/bobmining/prototypes/areadrill-updates.lua similarity index 100% rename from bobmining_1.1.6/prototypes/areadrill-updates.lua rename to bobmining/prototypes/areadrill-updates.lua diff --git a/bobmining_1.1.6/prototypes/areadrills.lua b/bobmining/prototypes/areadrills.lua similarity index 100% rename from bobmining_1.1.6/prototypes/areadrills.lua rename to bobmining/prototypes/areadrills.lua diff --git a/bobmining_1.1.6/prototypes/axes.lua b/bobmining/prototypes/axes.lua similarity index 100% rename from bobmining_1.1.6/prototypes/axes.lua rename to bobmining/prototypes/axes.lua diff --git a/bobmining_1.1.6/prototypes/drill-functions.lua b/bobmining/prototypes/drill-functions.lua similarity index 98% rename from bobmining_1.1.6/prototypes/drill-functions.lua rename to bobmining/prototypes/drill-functions.lua index d790fa13..7eecebc6 100644 --- a/bobmining_1.1.6/prototypes/drill-functions.lua +++ b/bobmining/prototypes/drill-functions.lua @@ -30,7 +30,6 @@ function bobmods.mining.electric_mining_drill(inputs) mining_drill.circuit_wire_max_distance = inputs.circuit_wire_max_distance or default_circuit_wire_max_distance mining_drill.energy_source.emissions_per_minute = inputs.emissions_per_minute or 10 - mining_drill.storage_slots = 6 set_electric_mining_drill_animation_speed(mining_drill, inputs.animation_speed * 0.8) diff --git a/bobmining_1.1.6/prototypes/drill-updates.lua b/bobmining/prototypes/drill-updates.lua similarity index 100% rename from bobmining_1.1.6/prototypes/drill-updates.lua rename to bobmining/prototypes/drill-updates.lua diff --git a/bobmining_1.1.6/prototypes/drills.lua b/bobmining/prototypes/drills.lua similarity index 100% rename from bobmining_1.1.6/prototypes/drills.lua rename to bobmining/prototypes/drills.lua diff --git a/bobmining_1.1.6/prototypes/pumpjack-updates.lua b/bobmining/prototypes/pumpjack-updates.lua similarity index 100% rename from bobmining_1.1.6/prototypes/pumpjack-updates.lua rename to bobmining/prototypes/pumpjack-updates.lua diff --git a/bobmining_1.1.6/prototypes/pumpjacks.lua b/bobmining/prototypes/pumpjacks.lua similarity index 100% rename from bobmining_1.1.6/prototypes/pumpjacks.lua rename to bobmining/prototypes/pumpjacks.lua diff --git a/bobmining_1.1.6/prototypes/steam-drills.lua b/bobmining/prototypes/steam-drills.lua similarity index 100% rename from bobmining_1.1.6/prototypes/steam-drills.lua rename to bobmining/prototypes/steam-drills.lua diff --git a/bobmining_1.1.6/prototypes/water-miner-updates.lua b/bobmining/prototypes/water-miner-updates.lua similarity index 100% rename from bobmining_1.1.6/prototypes/water-miner-updates.lua rename to bobmining/prototypes/water-miner-updates.lua diff --git a/bobmining_1.1.6/prototypes/water-miner.lua b/bobmining/prototypes/water-miner.lua similarity index 100% rename from bobmining_1.1.6/prototypes/water-miner.lua rename to bobmining/prototypes/water-miner.lua diff --git a/bobmining_1.1.6/settings.lua b/bobmining/settings.lua similarity index 100% rename from bobmining_1.1.6/settings.lua rename to bobmining/settings.lua diff --git a/bobmining_1.1.6/thumbnail.png b/bobmining/thumbnail.png similarity index 100% rename from bobmining_1.1.6/thumbnail.png rename to bobmining/thumbnail.png diff --git a/bobmining_1.1.6/data-updates.lua b/bobmining_1.1.6/data-updates.lua deleted file mode 100644 index 3007ad5f..00000000 --- a/bobmining_1.1.6/data-updates.lua +++ /dev/null @@ -1,10 +0,0 @@ -for i, drill in pairs(data.raw["mining-drill"]) do - if not drill.storage_slots then - drill.storage_slots = 6 - end -end - -require("prototypes.drill-updates") -require("prototypes.areadrill-updates") -require("prototypes.pumpjack-updates") -require("prototypes.water-miner-updates") diff --git a/bobmining_1.1.6/info.json b/bobmining_1.1.6/info.json deleted file mode 100644 index 6533f6d1..00000000 --- a/bobmining_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "bobmining", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Mining mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobores >= 1.1.6", - "? bobplates >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nAdds higher tiers of electric mining drill that increase mining speed.\nAdds an additional branch of electric mining drills that increase the mining area.\nAdds higher tiers of Pumpjacks\nAdds a full set of water mining drills, for use with the water patches added by Bob's Ores mod.\nAdds several tiers of steel-axe technology to further increase personal mining speed.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobmodules_1.1.6/changelog.txt b/bobmodules/changelog.txt similarity index 100% rename from bobmodules_1.1.6/changelog.txt rename to bobmodules/changelog.txt diff --git a/bobmodules_1.1.6/control.lua b/bobmodules/control.lua similarity index 100% rename from bobmodules_1.1.6/control.lua rename to bobmodules/control.lua diff --git a/bobmodules_1.1.6/data-updates.lua b/bobmodules/data-updates.lua similarity index 100% rename from bobmodules_1.1.6/data-updates.lua rename to bobmodules/data-updates.lua diff --git a/bobmodules_1.1.6/data.lua b/bobmodules/data.lua similarity index 100% rename from bobmodules_1.1.6/data.lua rename to bobmodules/data.lua diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-1.png b/bobmodules/graphics/icons/cyan-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-1.png rename to bobmodules/graphics/icons/cyan-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-2.png b/bobmodules/graphics/icons/cyan-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-2.png rename to bobmodules/graphics/icons/cyan-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-3.png b/bobmodules/graphics/icons/cyan-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-3.png rename to bobmodules/graphics/icons/cyan-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-4.png b/bobmodules/graphics/icons/cyan-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-4.png rename to bobmodules/graphics/icons/cyan-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-5.png b/bobmodules/graphics/icons/cyan-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-5.png rename to bobmodules/graphics/icons/cyan-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-6.png b/bobmodules/graphics/icons/cyan-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-6.png rename to bobmodules/graphics/icons/cyan-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-7.png b/bobmodules/graphics/icons/cyan-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-7.png rename to bobmodules/graphics/icons/cyan-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module-8.png b/bobmodules/graphics/icons/cyan-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module-8.png rename to bobmodules/graphics/icons/cyan-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/cyan-module.png b/bobmodules/graphics/icons/cyan-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/cyan-module.png rename to bobmodules/graphics/icons/cyan-module.png diff --git a/bobmodules_1.1.6/graphics/icons/effectivity-processor-2.png b/bobmodules/graphics/icons/effectivity-processor-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/effectivity-processor-2.png rename to bobmodules/graphics/icons/effectivity-processor-2.png diff --git a/bobmodules_1.1.6/graphics/icons/effectivity-processor-3.png b/bobmodules/graphics/icons/effectivity-processor-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/effectivity-processor-3.png rename to bobmodules/graphics/icons/effectivity-processor-3.png diff --git a/bobmodules_1.1.6/graphics/icons/effectivity-processor.png b/bobmodules/graphics/icons/effectivity-processor.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/effectivity-processor.png rename to bobmodules/graphics/icons/effectivity-processor.png diff --git a/bobmodules_1.1.6/graphics/icons/god-module-1.png b/bobmodules/graphics/icons/god-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/god-module-1.png rename to bobmodules/graphics/icons/god-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/god-module-2.png b/bobmodules/graphics/icons/god-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/god-module-2.png rename to bobmodules/graphics/icons/god-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/god-module-3.png b/bobmodules/graphics/icons/god-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/god-module-3.png rename to bobmodules/graphics/icons/god-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/god-module-4.png b/bobmodules/graphics/icons/god-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/god-module-4.png rename to bobmodules/graphics/icons/god-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/god-module.png b/bobmodules/graphics/icons/god-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/god-module.png rename to bobmodules/graphics/icons/god-module.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-1.png b/bobmodules/graphics/icons/green-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-1.png rename to bobmodules/graphics/icons/green-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-2.png b/bobmodules/graphics/icons/green-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-2.png rename to bobmodules/graphics/icons/green-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-3.png b/bobmodules/graphics/icons/green-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-3.png rename to bobmodules/graphics/icons/green-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-4.png b/bobmodules/graphics/icons/green-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-4.png rename to bobmodules/graphics/icons/green-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-5.png b/bobmodules/graphics/icons/green-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-5.png rename to bobmodules/graphics/icons/green-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-6.png b/bobmodules/graphics/icons/green-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-6.png rename to bobmodules/graphics/icons/green-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-7.png b/bobmodules/graphics/icons/green-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-7.png rename to bobmodules/graphics/icons/green-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module-8.png b/bobmodules/graphics/icons/green-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module-8.png rename to bobmodules/graphics/icons/green-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/green-module.png b/bobmodules/graphics/icons/green-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/green-module.png rename to bobmodules/graphics/icons/green-module.png diff --git a/bobmodules_1.1.6/graphics/icons/module-case.png b/bobmodules/graphics/icons/module-case.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-case.png rename to bobmodules/graphics/icons/module-case.png diff --git a/bobmodules_1.1.6/graphics/icons/module-circuit-board.png b/bobmodules/graphics/icons/module-circuit-board.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-circuit-board.png rename to bobmodules/graphics/icons/module-circuit-board.png diff --git a/bobmodules_1.1.6/graphics/icons/module-contact.png b/bobmodules/graphics/icons/module-contact.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-contact.png rename to bobmodules/graphics/icons/module-contact.png diff --git a/bobmodules_1.1.6/graphics/icons/module-processor-board-2.png b/bobmodules/graphics/icons/module-processor-board-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-processor-board-2.png rename to bobmodules/graphics/icons/module-processor-board-2.png diff --git a/bobmodules_1.1.6/graphics/icons/module-processor-board-3.png b/bobmodules/graphics/icons/module-processor-board-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-processor-board-3.png rename to bobmodules/graphics/icons/module-processor-board-3.png diff --git a/bobmodules_1.1.6/graphics/icons/module-processor-board.png b/bobmodules/graphics/icons/module-processor-board.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/module-processor-board.png rename to bobmodules/graphics/icons/module-processor-board.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-1.png b/bobmodules/graphics/icons/pollution-clean-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-1.png rename to bobmodules/graphics/icons/pollution-clean-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-2.png b/bobmodules/graphics/icons/pollution-clean-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-2.png rename to bobmodules/graphics/icons/pollution-clean-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-3.png b/bobmodules/graphics/icons/pollution-clean-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-3.png rename to bobmodules/graphics/icons/pollution-clean-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-4.png b/bobmodules/graphics/icons/pollution-clean-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-4.png rename to bobmodules/graphics/icons/pollution-clean-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-5.png b/bobmodules/graphics/icons/pollution-clean-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-5.png rename to bobmodules/graphics/icons/pollution-clean-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-6.png b/bobmodules/graphics/icons/pollution-clean-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-6.png rename to bobmodules/graphics/icons/pollution-clean-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-7.png b/bobmodules/graphics/icons/pollution-clean-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-7.png rename to bobmodules/graphics/icons/pollution-clean-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module-8.png b/bobmodules/graphics/icons/pollution-clean-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module-8.png rename to bobmodules/graphics/icons/pollution-clean-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-module.png b/bobmodules/graphics/icons/pollution-clean-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-module.png rename to bobmodules/graphics/icons/pollution-clean-module.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-processor-2.png b/bobmodules/graphics/icons/pollution-clean-processor-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-processor-2.png rename to bobmodules/graphics/icons/pollution-clean-processor-2.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-processor-3.png b/bobmodules/graphics/icons/pollution-clean-processor-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-processor-3.png rename to bobmodules/graphics/icons/pollution-clean-processor-3.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-clean-processor.png b/bobmodules/graphics/icons/pollution-clean-processor.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-clean-processor.png rename to bobmodules/graphics/icons/pollution-clean-processor.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-1.png b/bobmodules/graphics/icons/pollution-create-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-1.png rename to bobmodules/graphics/icons/pollution-create-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-2.png b/bobmodules/graphics/icons/pollution-create-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-2.png rename to bobmodules/graphics/icons/pollution-create-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-3.png b/bobmodules/graphics/icons/pollution-create-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-3.png rename to bobmodules/graphics/icons/pollution-create-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-4.png b/bobmodules/graphics/icons/pollution-create-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-4.png rename to bobmodules/graphics/icons/pollution-create-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-5.png b/bobmodules/graphics/icons/pollution-create-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-5.png rename to bobmodules/graphics/icons/pollution-create-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-6.png b/bobmodules/graphics/icons/pollution-create-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-6.png rename to bobmodules/graphics/icons/pollution-create-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-7.png b/bobmodules/graphics/icons/pollution-create-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-7.png rename to bobmodules/graphics/icons/pollution-create-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module-8.png b/bobmodules/graphics/icons/pollution-create-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module-8.png rename to bobmodules/graphics/icons/pollution-create-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-module.png b/bobmodules/graphics/icons/pollution-create-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-module.png rename to bobmodules/graphics/icons/pollution-create-module.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-processor-2.png b/bobmodules/graphics/icons/pollution-create-processor-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-processor-2.png rename to bobmodules/graphics/icons/pollution-create-processor-2.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-processor-3.png b/bobmodules/graphics/icons/pollution-create-processor-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-processor-3.png rename to bobmodules/graphics/icons/pollution-create-processor-3.png diff --git a/bobmodules_1.1.6/graphics/icons/pollution-create-processor.png b/bobmodules/graphics/icons/pollution-create-processor.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/pollution-create-processor.png rename to bobmodules/graphics/icons/pollution-create-processor.png diff --git a/bobmodules_1.1.6/graphics/icons/productivity-processor-2.png b/bobmodules/graphics/icons/productivity-processor-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/productivity-processor-2.png rename to bobmodules/graphics/icons/productivity-processor-2.png diff --git a/bobmodules_1.1.6/graphics/icons/productivity-processor-3.png b/bobmodules/graphics/icons/productivity-processor-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/productivity-processor-3.png rename to bobmodules/graphics/icons/productivity-processor-3.png diff --git a/bobmodules_1.1.6/graphics/icons/productivity-processor.png b/bobmodules/graphics/icons/productivity-processor.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/productivity-processor.png rename to bobmodules/graphics/icons/productivity-processor.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-1.png b/bobmodules/graphics/icons/purple-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-1.png rename to bobmodules/graphics/icons/purple-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-2.png b/bobmodules/graphics/icons/purple-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-2.png rename to bobmodules/graphics/icons/purple-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-3.png b/bobmodules/graphics/icons/purple-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-3.png rename to bobmodules/graphics/icons/purple-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-4.png b/bobmodules/graphics/icons/purple-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-4.png rename to bobmodules/graphics/icons/purple-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-5.png b/bobmodules/graphics/icons/purple-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-5.png rename to bobmodules/graphics/icons/purple-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-6.png b/bobmodules/graphics/icons/purple-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-6.png rename to bobmodules/graphics/icons/purple-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-7.png b/bobmodules/graphics/icons/purple-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-7.png rename to bobmodules/graphics/icons/purple-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module-8.png b/bobmodules/graphics/icons/purple-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module-8.png rename to bobmodules/graphics/icons/purple-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/purple-module.png b/bobmodules/graphics/icons/purple-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/purple-module.png rename to bobmodules/graphics/icons/purple-module.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-1.png b/bobmodules/graphics/icons/red-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-1.png rename to bobmodules/graphics/icons/red-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-2.png b/bobmodules/graphics/icons/red-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-2.png rename to bobmodules/graphics/icons/red-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-3.png b/bobmodules/graphics/icons/red-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-3.png rename to bobmodules/graphics/icons/red-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-4.png b/bobmodules/graphics/icons/red-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-4.png rename to bobmodules/graphics/icons/red-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-5.png b/bobmodules/graphics/icons/red-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-5.png rename to bobmodules/graphics/icons/red-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-6.png b/bobmodules/graphics/icons/red-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-6.png rename to bobmodules/graphics/icons/red-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-7.png b/bobmodules/graphics/icons/red-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-7.png rename to bobmodules/graphics/icons/red-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module-8.png b/bobmodules/graphics/icons/red-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module-8.png rename to bobmodules/graphics/icons/red-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/red-module.png b/bobmodules/graphics/icons/red-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/red-module.png rename to bobmodules/graphics/icons/red-module.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-1.png b/bobmodules/graphics/icons/speed-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-1.png rename to bobmodules/graphics/icons/speed-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-2.png b/bobmodules/graphics/icons/speed-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-2.png rename to bobmodules/graphics/icons/speed-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-3.png b/bobmodules/graphics/icons/speed-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-3.png rename to bobmodules/graphics/icons/speed-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-4.png b/bobmodules/graphics/icons/speed-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-4.png rename to bobmodules/graphics/icons/speed-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-5.png b/bobmodules/graphics/icons/speed-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-5.png rename to bobmodules/graphics/icons/speed-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-6.png b/bobmodules/graphics/icons/speed-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-6.png rename to bobmodules/graphics/icons/speed-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-7.png b/bobmodules/graphics/icons/speed-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-7.png rename to bobmodules/graphics/icons/speed-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module-8.png b/bobmodules/graphics/icons/speed-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module-8.png rename to bobmodules/graphics/icons/speed-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-module.png b/bobmodules/graphics/icons/speed-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-module.png rename to bobmodules/graphics/icons/speed-module.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-processor-2.png b/bobmodules/graphics/icons/speed-processor-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-processor-2.png rename to bobmodules/graphics/icons/speed-processor-2.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-processor-3.png b/bobmodules/graphics/icons/speed-processor-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-processor-3.png rename to bobmodules/graphics/icons/speed-processor-3.png diff --git a/bobmodules_1.1.6/graphics/icons/speed-processor.png b/bobmodules/graphics/icons/speed-processor.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/speed-processor.png rename to bobmodules/graphics/icons/speed-processor.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-1.png b/bobmodules/graphics/icons/yellow-module-1.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-1.png rename to bobmodules/graphics/icons/yellow-module-1.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-2.png b/bobmodules/graphics/icons/yellow-module-2.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-2.png rename to bobmodules/graphics/icons/yellow-module-2.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-3.png b/bobmodules/graphics/icons/yellow-module-3.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-3.png rename to bobmodules/graphics/icons/yellow-module-3.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-4.png b/bobmodules/graphics/icons/yellow-module-4.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-4.png rename to bobmodules/graphics/icons/yellow-module-4.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-5.png b/bobmodules/graphics/icons/yellow-module-5.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-5.png rename to bobmodules/graphics/icons/yellow-module-5.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-6.png b/bobmodules/graphics/icons/yellow-module-6.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-6.png rename to bobmodules/graphics/icons/yellow-module-6.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-7.png b/bobmodules/graphics/icons/yellow-module-7.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-7.png rename to bobmodules/graphics/icons/yellow-module-7.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module-8.png b/bobmodules/graphics/icons/yellow-module-8.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module-8.png rename to bobmodules/graphics/icons/yellow-module-8.png diff --git a/bobmodules_1.1.6/graphics/icons/yellow-module.png b/bobmodules/graphics/icons/yellow-module.png similarity index 100% rename from bobmodules_1.1.6/graphics/icons/yellow-module.png rename to bobmodules/graphics/icons/yellow-module.png diff --git a/bobmodules/info.json b/bobmodules/info.json new file mode 100644 index 00000000..4f98645e --- /dev/null +++ b/bobmodules/info.json @@ -0,0 +1,17 @@ +{ + "name": "bobmodules", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Modules mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0", + "? bobelectronics >= 1.2.0", + "? DiscoScience" + ], + "description": "Requires Bob's functions library mod.\n\nExpansion to the Modules system.\nExpands the 3 types of base game module to be 8 tiers, not just 3\nAdjusts the bonuses each module gives, and allows you to customise them in mod settings.\nAdds Pollution creating and Pollution cleaning modules, 8 tiers.\nAdds Merged modules as follows:\n - Green modules offer combined Efficiency and Pollution cleaning bonuses, 8 tiers\n - Raw Speed module offers speed bonus with no negative effects, 8 tiers\n - Raw Productivity modules offer productivity bonus with no negative effects, 8 tiers\n - God modules offer all the bonuses with no negative effects, only 5 tiers.\nAll recipes are completely reworked, Makes use of electronic components from Bob's Electronics mod.\nResearch uses a unique Modules lab, and costs module parts to unlock module technology.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobmodules_1.1.6/locale/en/bobmodules.cfg b/bobmodules/locale/en/bobmodules.cfg similarity index 100% rename from bobmodules_1.1.6/locale/en/bobmodules.cfg rename to bobmodules/locale/en/bobmodules.cfg diff --git a/bobmodules_1.1.6/prototypes/beacon.lua b/bobmodules/prototypes/beacon.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/beacon.lua rename to bobmodules/prototypes/beacon.lua diff --git a/bobmodules_1.1.6/prototypes/category.lua b/bobmodules/prototypes/category.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/category.lua rename to bobmodules/prototypes/category.lua diff --git a/bobmodules_1.1.6/prototypes/item/electronics.lua b/bobmodules/prototypes/item/electronics.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/item/electronics.lua rename to bobmodules/prototypes/item/electronics.lua diff --git a/bobmodules_1.1.6/prototypes/item/module-merged.lua b/bobmodules/prototypes/item/module-merged.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/item/module-merged.lua rename to bobmodules/prototypes/item/module-merged.lua diff --git a/bobmodules_1.1.6/prototypes/item/module.lua b/bobmodules/prototypes/item/module.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/item/module.lua rename to bobmodules/prototypes/item/module.lua diff --git a/bobmodules_1.1.6/prototypes/lab.lua b/bobmodules/prototypes/lab.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/lab.lua rename to bobmodules/prototypes/lab.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/beacon-updates.lua b/bobmodules/prototypes/recipe/beacon-updates.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/beacon-updates.lua rename to bobmodules/prototypes/recipe/beacon-updates.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/electronics-updates.lua b/bobmodules/prototypes/recipe/electronics-updates.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/electronics-updates.lua rename to bobmodules/prototypes/recipe/electronics-updates.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/electronics.lua b/bobmodules/prototypes/recipe/electronics.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/electronics.lua rename to bobmodules/prototypes/recipe/electronics.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/module-merged-updates.lua b/bobmodules/prototypes/recipe/module-merged-updates.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/module-merged-updates.lua rename to bobmodules/prototypes/recipe/module-merged-updates.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/module-merged.lua b/bobmodules/prototypes/recipe/module-merged.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/module-merged.lua rename to bobmodules/prototypes/recipe/module-merged.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/module-updates.lua b/bobmodules/prototypes/recipe/module-updates.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/module-updates.lua rename to bobmodules/prototypes/recipe/module-updates.lua diff --git a/bobmodules_1.1.6/prototypes/recipe/module.lua b/bobmodules/prototypes/recipe/module.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/recipe/module.lua rename to bobmodules/prototypes/recipe/module.lua diff --git a/bobmodules_1.1.6/prototypes/technology/module-merged.lua b/bobmodules/prototypes/technology/module-merged.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/technology/module-merged.lua rename to bobmodules/prototypes/technology/module-merged.lua diff --git a/bobmodules_1.1.6/prototypes/technology/module-updates.lua b/bobmodules/prototypes/technology/module-updates.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/technology/module-updates.lua rename to bobmodules/prototypes/technology/module-updates.lua diff --git a/bobmodules_1.1.6/prototypes/technology/module.lua b/bobmodules/prototypes/technology/module.lua similarity index 100% rename from bobmodules_1.1.6/prototypes/technology/module.lua rename to bobmodules/prototypes/technology/module.lua diff --git a/bobmodules_1.1.6/settings-updates.lua b/bobmodules/settings-updates.lua similarity index 100% rename from bobmodules_1.1.6/settings-updates.lua rename to bobmodules/settings-updates.lua diff --git a/bobmodules_1.1.6/settings.lua b/bobmodules/settings.lua similarity index 100% rename from bobmodules_1.1.6/settings.lua rename to bobmodules/settings.lua diff --git a/bobmodules_1.1.6/thumbnail.png b/bobmodules/thumbnail.png similarity index 100% rename from bobmodules_1.1.6/thumbnail.png rename to bobmodules/thumbnail.png diff --git a/bobmodules_1.1.6/info.json b/bobmodules_1.1.6/info.json deleted file mode 100644 index 0856915a..00000000 --- a/bobmodules_1.1.6/info.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "bobmodules", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Modules mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6", - "? bobelectronics >= 1.1.6", - "? DiscoScience" - ], - "description": "Requires Bob's functions library mod.\n\nExpansion to the Modules system.\nExpands the 3 types of base game module to be 8 tiers, not just 3\nAdjusts the bonuses each module gives, and allows you to customise them in mod settings.\nAdds Pollution creating and Pollution cleaning modules, 8 tiers.\nAdds Merged modules as follows:\n - Green modules offer combined Efficiency and Pollution cleaning bonuses, 8 tiers\n - Raw Speed module offers speed bonus with no negative effects, 8 tiers\n - Raw Productivity modules offer productivity bonus with no negative effects, 8 tiers\n - God modules offer all the bonuses with no negative effects, only 5 tiers.\nAll recipes are completely reworked, Makes use of electronic components from Bob's Electronics mod.\nResearch uses a unique Modules lab, and costs module parts to unlock module technology.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobores_1.1.6/changelog.txt b/bobores/changelog.txt similarity index 100% rename from bobores_1.1.6/changelog.txt rename to bobores/changelog.txt diff --git a/bobores_1.1.6/control.lua b/bobores/control.lua similarity index 100% rename from bobores_1.1.6/control.lua rename to bobores/control.lua diff --git a/bobores_1.1.6/data-updates.lua b/bobores/data-updates.lua similarity index 100% rename from bobores_1.1.6/data-updates.lua rename to bobores/data-updates.lua diff --git a/bobores/data.lua b/bobores/data.lua new file mode 100644 index 00000000..94fdc793 --- /dev/null +++ b/bobores/data.lua @@ -0,0 +1,119 @@ +if not bobmods then + bobmods = {} +end +if not bobmods.ores then + bobmods.ores = {} +end +if not bobmods.gems then + bobmods.gems = {} +end +if not bobmods.ores.settings then + bobmods.ores.settings = {} +end + +data:extend({ + { + type = "item-subgroup", + name = "bob-ores", + group = "intermediate-products", + order = "b-a", + }, + { + type = "resource-category", + name = "water", + }, +}) + +bobmods.ores.settings.UnsortedGemOre = settings.startup["bobmods-ores-unsortedgemore"].value +bobmods.ores.settings.GemsFromOtherOres = settings.startup["bobmods-ores-gemsfromotherores"].value +bobmods.ores.settings.GemProbability = settings.startup["bobmods-ores-gemprobability"].value + +bobmods.ores.settings.LeadGivesNickel = settings.startup["bobmods-ores-leadgivesnickel"].value +bobmods.ores.settings.LeadNickelRatio = settings.startup["bobmods-ores-leadnickelratio"].value + +bobmods.ores.settings.NickelGivesCobalt = settings.startup["bobmods-ores-nickelgivescobalt"].value +bobmods.ores.settings.NickelCobaltRatio = settings.startup["bobmods-ores-nickelcobaltratio"].value + +bobmods.gems.RubyRatio = settings.startup["bobmods-gems-rubyratio"].value +bobmods.gems.SapphireRatio = settings.startup["bobmods-gems-sapphireratio"].value +bobmods.gems.EmeraldRatio = settings.startup["bobmods-gems-emeraldratio"].value +bobmods.gems.AmethystRatio = settings.startup["bobmods-gems-amethystratio"].value +bobmods.gems.TopazRatio = settings.startup["bobmods-gems-topazratio"].value +bobmods.gems.DiamondRatio = settings.startup["bobmods-gems-diamondratio"].value + +require("prototypes.gems") -- must be after gem changes are defined. +require("prototypes.tin-ore") +require("prototypes.lead-ore") +require("prototypes.quartz") +require("prototypes.silver-ore") +require("prototypes.zinc-ore") +require("prototypes.gold-ore") +require("prototypes.bauxite") +require("prototypes.rutile") +require("prototypes.tungsten-ore") +require("prototypes.thorium-ore") + +require("prototypes.nickel-ore") +require("prototypes.cobalt-ore") +require("prototypes.sulfur") +require("prototypes.gem-ore") + +require("prototypes.fluids") + +for i, ore in pairs(bobmods.ores) do + bobmods.lib.resource.generate_data_stage(ore) +end + +if settings.startup["bobmods-ores-enablebauxite"].value == true then + bobmods.ores.bauxite.create_autoplace() +end +if settings.startup["bobmods-ores-enablecobaltore"].value == true then + bobmods.ores.cobalt.create_autoplace() +end +if settings.startup["bobmods-ores-enablegemsore"].value == true then + bobmods.ores.gems.create_autoplace() +end +if settings.startup["bobmods-ores-enablegoldore"].value == true then + bobmods.ores.gold.create_autoplace() +end +if settings.startup["bobmods-ores-enableleadore"].value == true then + bobmods.ores.lead.create_autoplace() +end +if settings.startup["bobmods-ores-enablenickelore"].value == true then + bobmods.ores.nickel.create_autoplace() +end +if settings.startup["bobmods-ores-enablequartz"].value == true then + bobmods.ores.quartz.create_autoplace() +end +if settings.startup["bobmods-ores-enablerutile"].value == true then + bobmods.ores.rutile.create_autoplace() +end +if settings.startup["bobmods-ores-enablesilverore"].value == true then + bobmods.ores.silver.create_autoplace() +end +if settings.startup["bobmods-ores-enablesulfur"].value == true then + bobmods.ores.sulfur.create_autoplace() +end +if settings.startup["bobmods-ores-enabletinore"].value == true then + bobmods.ores.tin.create_autoplace() +end +if settings.startup["bobmods-ores-enabletungstenore"].value == true then + bobmods.ores.tungsten.create_autoplace() +end +if settings.startup["bobmods-ores-enablezincore"].value == true then + bobmods.ores.zinc.create_autoplace() +end +if settings.startup["bobmods-ores-enablewaterores"].value == true then + bobmods.ores.water.create_autoplace() + bobmods.ores.lithia_water.create_autoplace() +end +if settings.startup["bobmods-ores-enablethoriumore"].value == true then + bobmods.ores.thorium.create_autoplace() +end + +data.raw.item["copper-ore"].stack_size = 200 +data.raw.item["iron-ore"].stack_size = 200 +data.raw.item["stone"].stack_size = 200 +data.raw.item["coal"].stack_size = 200 +data.raw.item["uranium-ore"].stack_size = 200 +data.raw.item["sulfur"].stack_size = 200 diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-1.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-1.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-1.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-1.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-2.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-2.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-2.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-2.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-3.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-3.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-3.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-3.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-4.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-4.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-4.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-4.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-1.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-1.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-1.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-1.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-2.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-2.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-2.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-2.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-3.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-3.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-3.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-3.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-4.png b/bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-4.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore-particle-shadow-4.png rename to bobores/graphics/entity/gem-ore/gem-ore-particle-shadow-4.png diff --git a/bobores_1.1.6/graphics/entity/gem-ore/gem-ore.png b/bobores/graphics/entity/gem-ore/gem-ore.png similarity index 100% rename from bobores_1.1.6/graphics/entity/gem-ore/gem-ore.png rename to bobores/graphics/entity/gem-ore/gem-ore.png diff --git a/bobores_1.1.6/graphics/icons/amethyst-ore.png b/bobores/graphics/icons/amethyst-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/amethyst-ore.png rename to bobores/graphics/icons/amethyst-ore.png diff --git a/bobores_1.1.6/graphics/icons/bauxite-ore.png b/bobores/graphics/icons/bauxite-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/bauxite-ore.png rename to bobores/graphics/icons/bauxite-ore.png diff --git a/bobores_1.1.6/graphics/icons/coal.png b/bobores/graphics/icons/coal.png similarity index 100% rename from bobores_1.1.6/graphics/icons/coal.png rename to bobores/graphics/icons/coal.png diff --git a/bobores_1.1.6/graphics/icons/cobalt-ore.png b/bobores/graphics/icons/cobalt-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/cobalt-ore.png rename to bobores/graphics/icons/cobalt-ore.png diff --git a/bobores_1.1.6/graphics/icons/copper-ore.png b/bobores/graphics/icons/copper-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/copper-ore.png rename to bobores/graphics/icons/copper-ore.png diff --git a/bobores_1.1.6/graphics/icons/diamond-ore.png b/bobores/graphics/icons/diamond-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/diamond-ore.png rename to bobores/graphics/icons/diamond-ore.png diff --git a/bobores_1.1.6/graphics/icons/emerald-ore.png b/bobores/graphics/icons/emerald-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/emerald-ore.png rename to bobores/graphics/icons/emerald-ore.png diff --git a/bobores_1.1.6/graphics/icons/gem-ore.png b/bobores/graphics/icons/gem-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/gem-ore.png rename to bobores/graphics/icons/gem-ore.png diff --git a/bobores_1.1.6/graphics/icons/gold-ore.png b/bobores/graphics/icons/gold-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/gold-ore.png rename to bobores/graphics/icons/gold-ore.png diff --git a/bobores_1.1.6/graphics/icons/iron-ore.png b/bobores/graphics/icons/iron-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/iron-ore.png rename to bobores/graphics/icons/iron-ore.png diff --git a/bobores_1.1.6/graphics/icons/lead-ore.png b/bobores/graphics/icons/lead-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/lead-ore.png rename to bobores/graphics/icons/lead-ore.png diff --git a/bobores_1.1.6/graphics/icons/lithia-water.png b/bobores/graphics/icons/lithia-water.png similarity index 100% rename from bobores_1.1.6/graphics/icons/lithia-water.png rename to bobores/graphics/icons/lithia-water.png diff --git a/bobores_1.1.6/graphics/icons/nickel-ore.png b/bobores/graphics/icons/nickel-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/nickel-ore.png rename to bobores/graphics/icons/nickel-ore.png diff --git a/bobores_1.1.6/graphics/icons/quartz.png b/bobores/graphics/icons/quartz.png similarity index 100% rename from bobores_1.1.6/graphics/icons/quartz.png rename to bobores/graphics/icons/quartz.png diff --git a/bobores_1.1.6/graphics/icons/ruby-ore.png b/bobores/graphics/icons/ruby-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/ruby-ore.png rename to bobores/graphics/icons/ruby-ore.png diff --git a/bobores_1.1.6/graphics/icons/rutile-ore.png b/bobores/graphics/icons/rutile-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/rutile-ore.png rename to bobores/graphics/icons/rutile-ore.png diff --git a/bobores_1.1.6/graphics/icons/sapphire-ore.png b/bobores/graphics/icons/sapphire-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/sapphire-ore.png rename to bobores/graphics/icons/sapphire-ore.png diff --git a/bobores_1.1.6/graphics/icons/silver-ore.png b/bobores/graphics/icons/silver-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/silver-ore.png rename to bobores/graphics/icons/silver-ore.png diff --git a/bobores_1.1.6/graphics/icons/stone.png b/bobores/graphics/icons/stone.png similarity index 100% rename from bobores_1.1.6/graphics/icons/stone.png rename to bobores/graphics/icons/stone.png diff --git a/bobores_1.1.6/graphics/icons/tin-ore.png b/bobores/graphics/icons/tin-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/tin-ore.png rename to bobores/graphics/icons/tin-ore.png diff --git a/bobores_1.1.6/graphics/icons/topaz-ore.png b/bobores/graphics/icons/topaz-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/topaz-ore.png rename to bobores/graphics/icons/topaz-ore.png diff --git a/bobores_1.1.6/graphics/icons/tungsten-ore.png b/bobores/graphics/icons/tungsten-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/tungsten-ore.png rename to bobores/graphics/icons/tungsten-ore.png diff --git a/bobores_1.1.6/graphics/icons/zinc-ore.png b/bobores/graphics/icons/zinc-ore.png similarity index 100% rename from bobores_1.1.6/graphics/icons/zinc-ore.png rename to bobores/graphics/icons/zinc-ore.png diff --git a/bobores/info.json b/bobores/info.json new file mode 100644 index 00000000..2cb0496d --- /dev/null +++ b/bobores/info.json @@ -0,0 +1,14 @@ +{ + "name": "bobores", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Ores mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nAdds some useful ores, designed for use by Bob's Metals, Chemicals and Intermediates mod (MCI).\nAll ores are disabled by default, MCI will turn on the minimum required ores.\nOther mods may make use of these ores.\n\nOres include, Bauxite(Aluminium), Cobalt, Gems, Gold, Galena(Lead), Nickel, Quartz(Glass, Silicon), Rutile(Titanium), Silver, Sulfur, Thorium, Tin, Tungsten and Zinc.\nAlso includes Ground water and Lithia water mining fluid nodes, which function similar to Oil." +} diff --git a/bobores_1.1.6/locale/en/bobores.cfg b/bobores/locale/en/bobores.cfg similarity index 100% rename from bobores_1.1.6/locale/en/bobores.cfg rename to bobores/locale/en/bobores.cfg diff --git a/bobores_1.1.6/prototypes/bauxite.lua b/bobores/prototypes/bauxite.lua similarity index 100% rename from bobores_1.1.6/prototypes/bauxite.lua rename to bobores/prototypes/bauxite.lua diff --git a/bobores_1.1.6/prototypes/cobalt-ore.lua b/bobores/prototypes/cobalt-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/cobalt-ore.lua rename to bobores/prototypes/cobalt-ore.lua diff --git a/bobores_1.1.6/prototypes/fluids.lua b/bobores/prototypes/fluids.lua similarity index 100% rename from bobores_1.1.6/prototypes/fluids.lua rename to bobores/prototypes/fluids.lua diff --git a/bobores_1.1.6/prototypes/gem-ore.lua b/bobores/prototypes/gem-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/gem-ore.lua rename to bobores/prototypes/gem-ore.lua diff --git a/bobores_1.1.6/prototypes/gems.lua b/bobores/prototypes/gems.lua similarity index 100% rename from bobores_1.1.6/prototypes/gems.lua rename to bobores/prototypes/gems.lua diff --git a/bobores_1.1.6/prototypes/gold-ore.lua b/bobores/prototypes/gold-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/gold-ore.lua rename to bobores/prototypes/gold-ore.lua diff --git a/bobores_1.1.6/prototypes/lead-ore.lua b/bobores/prototypes/lead-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/lead-ore.lua rename to bobores/prototypes/lead-ore.lua diff --git a/bobores_1.1.6/prototypes/nickel-ore.lua b/bobores/prototypes/nickel-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/nickel-ore.lua rename to bobores/prototypes/nickel-ore.lua diff --git a/bobores_1.1.6/prototypes/quartz.lua b/bobores/prototypes/quartz.lua similarity index 100% rename from bobores_1.1.6/prototypes/quartz.lua rename to bobores/prototypes/quartz.lua diff --git a/bobores_1.1.6/prototypes/rutile.lua b/bobores/prototypes/rutile.lua similarity index 100% rename from bobores_1.1.6/prototypes/rutile.lua rename to bobores/prototypes/rutile.lua diff --git a/bobores_1.1.6/prototypes/silver-ore.lua b/bobores/prototypes/silver-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/silver-ore.lua rename to bobores/prototypes/silver-ore.lua diff --git a/bobores_1.1.6/prototypes/sulfur.lua b/bobores/prototypes/sulfur.lua similarity index 100% rename from bobores_1.1.6/prototypes/sulfur.lua rename to bobores/prototypes/sulfur.lua diff --git a/bobores_1.1.6/prototypes/thorium-ore.lua b/bobores/prototypes/thorium-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/thorium-ore.lua rename to bobores/prototypes/thorium-ore.lua diff --git a/bobores_1.1.6/prototypes/tin-ore.lua b/bobores/prototypes/tin-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/tin-ore.lua rename to bobores/prototypes/tin-ore.lua diff --git a/bobores_1.1.6/prototypes/tungsten-ore.lua b/bobores/prototypes/tungsten-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/tungsten-ore.lua rename to bobores/prototypes/tungsten-ore.lua diff --git a/bobores_1.1.6/prototypes/zinc-ore.lua b/bobores/prototypes/zinc-ore.lua similarity index 100% rename from bobores_1.1.6/prototypes/zinc-ore.lua rename to bobores/prototypes/zinc-ore.lua diff --git a/bobores_1.1.6/settings.lua b/bobores/settings.lua similarity index 100% rename from bobores_1.1.6/settings.lua rename to bobores/settings.lua diff --git a/bobores_1.1.6/thumbnail.png b/bobores/thumbnail.png similarity index 100% rename from bobores_1.1.6/thumbnail.png rename to bobores/thumbnail.png diff --git a/bobores_1.1.6/data.lua b/bobores_1.1.6/data.lua deleted file mode 100644 index 3485b933..00000000 --- a/bobores_1.1.6/data.lua +++ /dev/null @@ -1,119 +0,0 @@ -if not bobmods then - bobmods = {} -end -if not bobmods.ores then - bobmods.ores = {} -end -if not bobmods.gems then - bobmods.gems = {} -end -if not bobmods.ores.settings then - bobmods.ores.settings = {} -end - -data:extend({ - { - type = "item-subgroup", - name = "bob-ores", - group = "intermediate-products", - order = "b-a", - }, - { - type = "resource-category", - name = "water", - }, -}) - -bobmods.ores.settings.UnsortedGemOre = settings.startup["bobmods-ores-unsortedgemore"].value -bobmods.ores.settings.GemsFromOtherOres = settings.startup["bobmods-ores-gemsfromotherores"].value -bobmods.ores.settings.GemProbability = settings.startup["bobmods-ores-gemprobability"].value - -bobmods.ores.settings.LeadGivesNickel = settings.startup["bobmods-ores-leadgivesnickel"].value -bobmods.ores.settings.LeadNickelRatio = settings.startup["bobmods-ores-leadnickelratio"].value - -bobmods.ores.settings.NickelGivesCobalt = settings.startup["bobmods-ores-nickelgivescobalt"].value -bobmods.ores.settings.NickelCobaltRatio = settings.startup["bobmods-ores-nickelcobaltratio"].value - -bobmods.gems.RubyRatio = settings.startup["bobmods-gems-rubyratio"].value -bobmods.gems.SapphireRatio = settings.startup["bobmods-gems-sapphireratio"].value -bobmods.gems.EmeraldRatio = settings.startup["bobmods-gems-emeraldratio"].value -bobmods.gems.AmethystRatio = settings.startup["bobmods-gems-amethystratio"].value -bobmods.gems.TopazRatio = settings.startup["bobmods-gems-topazratio"].value -bobmods.gems.DiamondRatio = settings.startup["bobmods-gems-diamondratio"].value - -require("prototypes.gems") -- must be after gem changes are defined. -require("prototypes.tin-ore") -require("prototypes.lead-ore") -require("prototypes.quartz") -require("prototypes.silver-ore") -require("prototypes.zinc-ore") -require("prototypes.gold-ore") -require("prototypes.bauxite") -require("prototypes.rutile") -require("prototypes.tungsten-ore") -require("prototypes.thorium-ore") - -require("prototypes.nickel-ore") -require("prototypes.cobalt-ore") -require("prototypes.sulfur") -require("prototypes.gem-ore") - -require("prototypes.fluids") - -for i, ore in pairs(bobmods.ores) do - bobmods.lib.resource.generate_data_stage(ore) -end - -if settings.startup["bobmods-ores-enablebauxite"].value == true then - bobmods.ores.bauxite.create_autoplace() -end -if settings.startup["bobmods-ores-enablecobaltore"].value == true then - bobmods.ores.cobalt.create_autoplace() -end -if settings.startup["bobmods-ores-enablegemsore"].value == true then - bobmods.ores.gems.create_autoplace() -end -if settings.startup["bobmods-ores-enablegoldore"].value == true then - bobmods.ores.gold.create_autoplace() -end -if settings.startup["bobmods-ores-enableleadore"].value == true then - bobmods.ores.lead.create_autoplace() -end -if settings.startup["bobmods-ores-enablenickelore"].value == true then - bobmods.ores.nickel.create_autoplace() -end -if settings.startup["bobmods-ores-enablequartz"].value == true then - bobmods.ores.quartz.create_autoplace() -end -if settings.startup["bobmods-ores-enablerutile"].value == true then - bobmods.ores.rutile.create_autoplace() -end -if settings.startup["bobmods-ores-enablesilverore"].value == true then - bobmods.ores.silver.create_autoplace() -end -if settings.startup["bobmods-ores-enablesulfur"].value == true then - bobmods.ores.sulfur.create_autoplace() -end -if settings.startup["bobmods-ores-enabletinore"].value == true then - bobmods.ores.tin.create_autoplace() -end -if settings.startup["bobmods-ores-enabletungstenore"].value == true then - bobmods.ores.tungsten.create_autoplace() -end -if settings.startup["bobmods-ores-enablezincore"].value == true then - bobmods.ores.zinc.create_autoplace() -end -if settings.startup["bobmods-ores-enablewaterores"].value == true then - bobmods.ores.water.create_autoplace() - bobmods.ores.lithia_water.create_autoplace() -end -if settings.startup["bobmods-ores-enablethoriumore"].value == true then - bobmods.ores.thorium.create_autoplace() -end - -data.raw.item["copper-ore"].stack_size = 200 -data.raw.item["iron-ore"].stack_size = 200 -data.raw.item["stone"].stack_size = 2000 -data.raw.item["coal"].stack_size = 200 -data.raw.item["uranium-ore"].stack_size = 2000 -data.raw.item["sulfur"].stack_size = 2000 diff --git a/bobores_1.1.6/info.json b/bobores_1.1.6/info.json deleted file mode 100644 index cde8efcb..00000000 --- a/bobores_1.1.6/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "bobores", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Ores mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nAdds some useful ores, designed for use by Bob's Metals, Chemicals and Intermediates mod (MCI).\nAll ores are disabled by default, MCI will turn on the minimum required ores.\nOther mods may make use of these ores.\n\nOres include, Bauxite(Aluminium), Cobalt, Gems, Gold, Galena(Lead), Nickel, Quartz(Glass, Silicon), Rutile(Titanium), Silver, Sulfur, Thorium, Tin, Tungsten and Zinc.\nAlso includes Ground water and Lithia water mining fluid nodes, which function similar to Oil." -} diff --git a/bobplates_1.1.6/changelog.txt b/bobplates/changelog.txt similarity index 100% rename from bobplates_1.1.6/changelog.txt rename to bobplates/changelog.txt diff --git a/bobplates_1.1.6/control.lua b/bobplates/control.lua similarity index 100% rename from bobplates_1.1.6/control.lua rename to bobplates/control.lua diff --git a/bobplates_1.1.6/data-final-fixes.lua b/bobplates/data-final-fixes.lua similarity index 100% rename from bobplates_1.1.6/data-final-fixes.lua rename to bobplates/data-final-fixes.lua diff --git a/bobplates_1.1.6/data-updates.lua b/bobplates/data-updates.lua similarity index 100% rename from bobplates_1.1.6/data-updates.lua rename to bobplates/data-updates.lua diff --git a/bobplates_1.1.6/data.lua b/bobplates/data.lua similarity index 100% rename from bobplates_1.1.6/data.lua rename to bobplates/data.lua diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-A-light.png b/bobplates/graphics/entity/centrifuge/centrifuge-A-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-A-light.png rename to bobplates/graphics/entity/centrifuge/centrifuge-A-light.png diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-B-light.png b/bobplates/graphics/entity/centrifuge/centrifuge-B-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-B-light.png rename to bobplates/graphics/entity/centrifuge/centrifuge-B-light.png diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-C-light.png b/bobplates/graphics/entity/centrifuge/centrifuge-C-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/centrifuge-C-light.png rename to bobplates/graphics/entity/centrifuge/centrifuge-C-light.png diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-A-light.png b/bobplates/graphics/entity/centrifuge/hr-centrifuge-A-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-A-light.png rename to bobplates/graphics/entity/centrifuge/hr-centrifuge-A-light.png diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-B-light.png b/bobplates/graphics/entity/centrifuge/hr-centrifuge-B-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-B-light.png rename to bobplates/graphics/entity/centrifuge/hr-centrifuge-B-light.png diff --git a/bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-C-light.png b/bobplates/graphics/entity/centrifuge/hr-centrifuge-C-light.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/centrifuge/hr-centrifuge-C-light.png rename to bobplates/graphics/entity/centrifuge/hr-centrifuge-C-light.png diff --git a/bobplates_1.1.6/graphics/entity/chemical-plant/chemical-plant-mask.png b/bobplates/graphics/entity/chemical-plant/chemical-plant-mask.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/chemical-plant/chemical-plant-mask.png rename to bobplates/graphics/entity/chemical-plant/chemical-plant-mask.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-anim-e.png b/bobplates/graphics/entity/distillery/distillery-anim-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-anim-e.png rename to bobplates/graphics/entity/distillery/distillery-anim-e.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-anim-n.png b/bobplates/graphics/entity/distillery/distillery-anim-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-anim-n.png rename to bobplates/graphics/entity/distillery/distillery-anim-n.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-anim-s.png b/bobplates/graphics/entity/distillery/distillery-anim-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-anim-s.png rename to bobplates/graphics/entity/distillery/distillery-anim-s.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-anim-w.png b/bobplates/graphics/entity/distillery/distillery-anim-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-anim-w.png rename to bobplates/graphics/entity/distillery/distillery-anim-w.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-mask.png b/bobplates/graphics/entity/distillery/distillery-mask.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-mask.png rename to bobplates/graphics/entity/distillery/distillery-mask.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-e.png b/bobplates/graphics/entity/distillery/distillery-shadow-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-e.png rename to bobplates/graphics/entity/distillery/distillery-shadow-e.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-n.png b/bobplates/graphics/entity/distillery/distillery-shadow-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-n.png rename to bobplates/graphics/entity/distillery/distillery-shadow-n.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-s.png b/bobplates/graphics/entity/distillery/distillery-shadow-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-s.png rename to bobplates/graphics/entity/distillery/distillery-shadow-s.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-w.png b/bobplates/graphics/entity/distillery/distillery-shadow-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery-shadow-w.png rename to bobplates/graphics/entity/distillery/distillery-shadow-w.png diff --git a/bobplates_1.1.6/graphics/entity/distillery/distillery.png b/bobplates/graphics/entity/distillery/distillery.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/distillery/distillery.png rename to bobplates/graphics/entity/distillery/distillery.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-chemical-furnace.png b/bobplates/graphics/entity/electric-furnace/electric-chemical-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-chemical-furnace.png rename to bobplates/graphics/entity/electric-furnace/electric-chemical-furnace.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-heater.png b/bobplates/graphics/entity/electric-furnace/electric-furnace-heater.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-heater.png rename to bobplates/graphics/entity/electric-furnace/electric-furnace-heater.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-mask.png b/bobplates/graphics/entity/electric-furnace/electric-furnace-mask.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-mask.png rename to bobplates/graphics/entity/electric-furnace/electric-furnace-mask.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-1.png b/bobplates/graphics/entity/electric-furnace/electric-furnace-propeller-1.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-1.png rename to bobplates/graphics/entity/electric-furnace/electric-furnace-propeller-1.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-2.png b/bobplates/graphics/entity/electric-furnace/electric-furnace-propeller-2.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-furnace-propeller-2.png rename to bobplates/graphics/entity/electric-furnace/electric-furnace-propeller-2.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/electric-mixing-furnace.png b/bobplates/graphics/entity/electric-furnace/electric-mixing-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/electric-mixing-furnace.png rename to bobplates/graphics/entity/electric-furnace/electric-mixing-furnace.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-heater.png b/bobplates/graphics/entity/electric-furnace/hr-electric-furnace-heater.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-heater.png rename to bobplates/graphics/entity/electric-furnace/hr-electric-furnace-heater.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png b/bobplates/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png rename to bobplates/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png diff --git a/bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png b/bobplates/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png rename to bobplates/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-base.png b/bobplates/graphics/entity/electrolyser/electrolyser-1-base.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-base.png rename to bobplates/graphics/entity/electrolyser/electrolyser-1-base.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-highlights.png b/bobplates/graphics/entity/electrolyser/electrolyser-1-highlights.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-highlights.png rename to bobplates/graphics/entity/electrolyser/electrolyser-1-highlights.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-mask.png b/bobplates/graphics/entity/electrolyser/electrolyser-1-mask.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-mask.png rename to bobplates/graphics/entity/electrolyser/electrolyser-1-mask.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-shadow.png b/bobplates/graphics/entity/electrolyser/electrolyser-1-shadow.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/electrolyser-1-shadow.png rename to bobplates/graphics/entity/electrolyser/electrolyser-1-shadow.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-base.png b/bobplates/graphics/entity/electrolyser/hr-electrolyser-1-base.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-base.png rename to bobplates/graphics/entity/electrolyser/hr-electrolyser-1-base.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-highlights.png b/bobplates/graphics/entity/electrolyser/hr-electrolyser-1-highlights.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-highlights.png rename to bobplates/graphics/entity/electrolyser/hr-electrolyser-1-highlights.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-mask.png b/bobplates/graphics/entity/electrolyser/hr-electrolyser-1-mask.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-mask.png rename to bobplates/graphics/entity/electrolyser/hr-electrolyser-1-mask.png diff --git a/bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-shadow.png b/bobplates/graphics/entity/electrolyser/hr-electrolyser-1-shadow.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/electrolyser/hr-electrolyser-1-shadow.png rename to bobplates/graphics/entity/electrolyser/hr-electrolyser-1-shadow.png diff --git a/bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_0_0.png b/bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_0_0.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_0_0.png rename to bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_0_0.png diff --git a/bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_1_0.png b/bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_1_0.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_1_0.png rename to bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_1_0.png diff --git a/bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_2_0.png b/bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_2_0.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_2_0.png rename to bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_2_0.png diff --git a/bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_3_0.png b/bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_3_0.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/PumpShadow_NoAnim_Rot_3_0.png rename to bobplates/graphics/entity/pump/PumpShadow_NoAnim_Rot_3_0.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-anim-e.png b/bobplates/graphics/entity/pump/pump-anim-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-anim-e.png rename to bobplates/graphics/entity/pump/pump-anim-e.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-anim-n.png b/bobplates/graphics/entity/pump/pump-anim-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-anim-n.png rename to bobplates/graphics/entity/pump/pump-anim-n.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-anim-s.png b/bobplates/graphics/entity/pump/pump-anim-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-anim-s.png rename to bobplates/graphics/entity/pump/pump-anim-s.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-anim-w.png b/bobplates/graphics/entity/pump/pump-anim-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-anim-w.png rename to bobplates/graphics/entity/pump/pump-anim-w.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-e.png b/bobplates/graphics/entity/pump/pump-base-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-e.png rename to bobplates/graphics/entity/pump/pump-base-e.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-mask-e.png b/bobplates/graphics/entity/pump/pump-base-mask-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-mask-e.png rename to bobplates/graphics/entity/pump/pump-base-mask-e.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-mask-n.png b/bobplates/graphics/entity/pump/pump-base-mask-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-mask-n.png rename to bobplates/graphics/entity/pump/pump-base-mask-n.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-mask-s.png b/bobplates/graphics/entity/pump/pump-base-mask-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-mask-s.png rename to bobplates/graphics/entity/pump/pump-base-mask-s.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-mask-w.png b/bobplates/graphics/entity/pump/pump-base-mask-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-mask-w.png rename to bobplates/graphics/entity/pump/pump-base-mask-w.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-n.png b/bobplates/graphics/entity/pump/pump-base-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-n.png rename to bobplates/graphics/entity/pump/pump-base-n.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-s.png b/bobplates/graphics/entity/pump/pump-base-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-s.png rename to bobplates/graphics/entity/pump/pump-base-s.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-base-w.png b/bobplates/graphics/entity/pump/pump-base-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-base-w.png rename to bobplates/graphics/entity/pump/pump-base-w.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-liquid-e.png b/bobplates/graphics/entity/pump/pump-liquid-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-liquid-e.png rename to bobplates/graphics/entity/pump/pump-liquid-e.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-liquid-n.png b/bobplates/graphics/entity/pump/pump-liquid-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-liquid-n.png rename to bobplates/graphics/entity/pump/pump-liquid-n.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-liquid-s.png b/bobplates/graphics/entity/pump/pump-liquid-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-liquid-s.png rename to bobplates/graphics/entity/pump/pump-liquid-s.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-liquid-w.png b/bobplates/graphics/entity/pump/pump-liquid-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-liquid-w.png rename to bobplates/graphics/entity/pump/pump-liquid-w.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-window-e.png b/bobplates/graphics/entity/pump/pump-window-e.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-window-e.png rename to bobplates/graphics/entity/pump/pump-window-e.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-window-n.png b/bobplates/graphics/entity/pump/pump-window-n.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-window-n.png rename to bobplates/graphics/entity/pump/pump-window-n.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-window-s.png b/bobplates/graphics/entity/pump/pump-window-s.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-window-s.png rename to bobplates/graphics/entity/pump/pump-window-s.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump-window-w.png b/bobplates/graphics/entity/pump/pump-window-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump-window-w.png rename to bobplates/graphics/entity/pump/pump-window-w.png diff --git a/bobplates_1.1.6/graphics/entity/pump/pump.png b/bobplates/graphics/entity/pump/pump.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/pump/pump.png rename to bobplates/graphics/entity/pump/pump.png diff --git a/bobplates_1.1.6/graphics/entity/small-pump/small-pump-down.png b/bobplates/graphics/entity/small-pump/small-pump-down.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-pump/small-pump-down.png rename to bobplates/graphics/entity/small-pump/small-pump-down.png diff --git a/bobplates_1.1.6/graphics/entity/small-pump/small-pump-left.png b/bobplates/graphics/entity/small-pump/small-pump-left.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-pump/small-pump-left.png rename to bobplates/graphics/entity/small-pump/small-pump-left.png diff --git a/bobplates_1.1.6/graphics/entity/small-pump/small-pump-right.png b/bobplates/graphics/entity/small-pump/small-pump-right.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-pump/small-pump-right.png rename to bobplates/graphics/entity/small-pump/small-pump-right.png diff --git a/bobplates_1.1.6/graphics/entity/small-pump/small-pump-up.png b/bobplates/graphics/entity/small-pump/small-pump-up.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-pump/small-pump-up.png rename to bobplates/graphics/entity/small-pump/small-pump-up.png diff --git a/bobplates_1.1.6/graphics/entity/small-storage-tank-all.png b/bobplates/graphics/entity/small-storage-tank-all.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-storage-tank-all.png rename to bobplates/graphics/entity/small-storage-tank-all.png diff --git a/bobplates_1.1.6/graphics/entity/small-storage-tank-shadow.png b/bobplates/graphics/entity/small-storage-tank-shadow.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-storage-tank-shadow.png rename to bobplates/graphics/entity/small-storage-tank-shadow.png diff --git a/bobplates_1.1.6/graphics/entity/small-storage-tank-w.png b/bobplates/graphics/entity/small-storage-tank-w.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/small-storage-tank-w.png rename to bobplates/graphics/entity/small-storage-tank-w.png diff --git a/bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-down.png b/bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-down.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-down.png rename to bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-down.png diff --git a/bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-left.png b/bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-left.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-left.png rename to bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-left.png diff --git a/bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-right.png b/bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-right.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-chemical-furnace/boiler-fire-right.png rename to bobplates/graphics/entity/stone-chemical-furnace/boiler-fire-right.png diff --git a/bobplates_1.1.6/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png b/bobplates/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png rename to bobplates/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png diff --git a/bobplates_1.1.6/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png b/bobplates/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png rename to bobplates/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png diff --git a/bobplates_1.1.6/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png b/bobplates/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png rename to bobplates/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png diff --git a/bobplates_1.1.6/graphics/icons/advanced-processing-unit.png b/bobplates/graphics/icons/advanced-processing-unit.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/advanced-processing-unit.png rename to bobplates/graphics/icons/advanced-processing-unit.png diff --git a/bobplates_1.1.6/graphics/icons/air-pump-1.png b/bobplates/graphics/icons/air-pump-1.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/air-pump-1.png rename to bobplates/graphics/icons/air-pump-1.png diff --git a/bobplates_1.1.6/graphics/icons/air-pump-2.png b/bobplates/graphics/icons/air-pump-2.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/air-pump-2.png rename to bobplates/graphics/icons/air-pump-2.png diff --git a/bobplates_1.1.6/graphics/icons/air-pump-3.png b/bobplates/graphics/icons/air-pump-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/air-pump-3.png rename to bobplates/graphics/icons/air-pump-3.png diff --git a/bobplates_1.1.6/graphics/icons/air-pump-4.png b/bobplates/graphics/icons/air-pump-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/air-pump-4.png rename to bobplates/graphics/icons/air-pump-4.png diff --git a/bobplates_1.1.6/graphics/icons/air-pump.png b/bobplates/graphics/icons/air-pump.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/air-pump.png rename to bobplates/graphics/icons/air-pump.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-acid.png b/bobplates/graphics/icons/alien/alien-acid.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-acid.png rename to bobplates/graphics/icons/alien/alien-acid.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-blue-alloy.png b/bobplates/graphics/icons/alien/alien-blue-alloy.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-blue-alloy.png rename to bobplates/graphics/icons/alien/alien-blue-alloy.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-explosive.png b/bobplates/graphics/icons/alien/alien-explosive.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-explosive.png rename to bobplates/graphics/icons/alien/alien-explosive.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-fire.png b/bobplates/graphics/icons/alien/alien-fire.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-fire.png rename to bobplates/graphics/icons/alien/alien-fire.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-orange-alloy.png b/bobplates/graphics/icons/alien/alien-orange-alloy.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-orange-alloy.png rename to bobplates/graphics/icons/alien/alien-orange-alloy.png diff --git a/bobplates_1.1.6/graphics/icons/alien/alien-poison.png b/bobplates/graphics/icons/alien/alien-poison.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/alien/alien-poison.png rename to bobplates/graphics/icons/alien/alien-poison.png diff --git a/bobplates_1.1.6/graphics/icons/battery-blue.png b/bobplates/graphics/icons/battery-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/battery-blue.png rename to bobplates/graphics/icons/battery-blue.png diff --git a/bobplates_1.1.6/graphics/icons/battery-purple.png b/bobplates/graphics/icons/battery-purple.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/battery-purple.png rename to bobplates/graphics/icons/battery-purple.png diff --git a/bobplates_1.1.6/graphics/icons/battery-red.png b/bobplates/graphics/icons/battery-red.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/battery-red.png rename to bobplates/graphics/icons/battery-red.png diff --git a/bobplates_1.1.6/graphics/icons/battery.png b/bobplates/graphics/icons/battery.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/battery.png rename to bobplates/graphics/icons/battery.png diff --git a/bobplates_1.1.6/graphics/icons/bob-oil-processing.png b/bobplates/graphics/icons/bob-oil-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/bob-oil-processing.png rename to bobplates/graphics/icons/bob-oil-processing.png diff --git a/bobplates_1.1.6/graphics/icons/brass-bearing-ball.png b/bobplates/graphics/icons/brass-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/brass-bearing-ball.png rename to bobplates/graphics/icons/brass-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/brass-bearing.png b/bobplates/graphics/icons/brass-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/brass-bearing.png rename to bobplates/graphics/icons/brass-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/brass-gear-wheel.png b/bobplates/graphics/icons/brass-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/brass-gear-wheel.png rename to bobplates/graphics/icons/brass-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/calcium-chloride.png b/bobplates/graphics/icons/calcium-chloride.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/calcium-chloride.png rename to bobplates/graphics/icons/calcium-chloride.png diff --git a/bobplates_1.1.6/graphics/icons/carbon.png b/bobplates/graphics/icons/carbon.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/carbon.png rename to bobplates/graphics/icons/carbon.png diff --git a/bobplates_1.1.6/graphics/icons/ceramic-bearing-ball.png b/bobplates/graphics/icons/ceramic-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ceramic-bearing-ball.png rename to bobplates/graphics/icons/ceramic-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/ceramic-bearing.png b/bobplates/graphics/icons/ceramic-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ceramic-bearing.png rename to bobplates/graphics/icons/ceramic-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/chemical-furnace.png b/bobplates/graphics/icons/chemical-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/chemical-furnace.png rename to bobplates/graphics/icons/chemical-furnace.png diff --git a/bobplates_1.1.6/graphics/icons/chlorine.png b/bobplates/graphics/icons/chlorine.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/chlorine.png rename to bobplates/graphics/icons/chlorine.png diff --git a/bobplates_1.1.6/graphics/icons/coal-cracking.png b/bobplates/graphics/icons/coal-cracking.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/coal-cracking.png rename to bobplates/graphics/icons/coal-cracking.png diff --git a/bobplates_1.1.6/graphics/icons/cobalt-oxide.png b/bobplates/graphics/icons/cobalt-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/cobalt-oxide.png rename to bobplates/graphics/icons/cobalt-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/cobalt-steel-bearing-ball.png b/bobplates/graphics/icons/cobalt-steel-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/cobalt-steel-bearing-ball.png rename to bobplates/graphics/icons/cobalt-steel-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/cobalt-steel-bearing.png b/bobplates/graphics/icons/cobalt-steel-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/cobalt-steel-bearing.png rename to bobplates/graphics/icons/cobalt-steel-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/cobalt-steel-gear-wheel.png b/bobplates/graphics/icons/cobalt-steel-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/cobalt-steel-gear-wheel.png rename to bobplates/graphics/icons/cobalt-steel-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/copper-cobalt-oxide.png b/bobplates/graphics/icons/copper-cobalt-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/copper-cobalt-oxide.png rename to bobplates/graphics/icons/copper-cobalt-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/corundum.png b/bobplates/graphics/icons/corundum.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/corundum.png rename to bobplates/graphics/icons/corundum.png diff --git a/bobplates_1.1.6/graphics/icons/deuterium.png b/bobplates/graphics/icons/deuterium.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/deuterium.png rename to bobplates/graphics/icons/deuterium.png diff --git a/bobplates_1.1.6/graphics/icons/distillery.png b/bobplates/graphics/icons/distillery.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/distillery.png rename to bobplates/graphics/icons/distillery.png diff --git a/bobplates_1.1.6/graphics/icons/electric-mixing-furnace.png b/bobplates/graphics/icons/electric-mixing-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/electric-mixing-furnace.png rename to bobplates/graphics/icons/electric-mixing-furnace.png diff --git a/bobplates_1.1.6/graphics/icons/electrolyser.png b/bobplates/graphics/icons/electrolyser.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/electrolyser.png rename to bobplates/graphics/icons/electrolyser.png diff --git a/bobplates_1.1.6/graphics/icons/empty-canister.png b/bobplates/graphics/icons/empty-canister.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/empty-canister.png rename to bobplates/graphics/icons/empty-canister.png diff --git a/bobplates_1.1.6/graphics/icons/enriched-fuel.png b/bobplates/graphics/icons/enriched-fuel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/enriched-fuel.png rename to bobplates/graphics/icons/enriched-fuel.png diff --git a/bobplates_1.1.6/graphics/icons/ferric-chloride-solution.png b/bobplates/graphics/icons/ferric-chloride-solution.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ferric-chloride-solution.png rename to bobplates/graphics/icons/ferric-chloride-solution.png diff --git a/bobplates_1.1.6/graphics/icons/gas-canister.png b/bobplates/graphics/icons/gas-canister.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gas-canister.png rename to bobplates/graphics/icons/gas-canister.png diff --git a/bobplates_1.1.6/graphics/icons/gems/amethyst-3.png b/bobplates/graphics/icons/gems/amethyst-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/amethyst-3.png rename to bobplates/graphics/icons/gems/amethyst-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/amethyst-4.png b/bobplates/graphics/icons/gems/amethyst-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/amethyst-4.png rename to bobplates/graphics/icons/gems/amethyst-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/amethyst-5.png b/bobplates/graphics/icons/gems/amethyst-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/amethyst-5.png rename to bobplates/graphics/icons/gems/amethyst-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/amethyst-ore.png b/bobplates/graphics/icons/gems/amethyst-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/amethyst-ore.png rename to bobplates/graphics/icons/gems/amethyst-ore.png diff --git a/bobplates_1.1.6/graphics/icons/gems/diamond-3.png b/bobplates/graphics/icons/gems/diamond-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/diamond-3.png rename to bobplates/graphics/icons/gems/diamond-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/diamond-4.png b/bobplates/graphics/icons/gems/diamond-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/diamond-4.png rename to bobplates/graphics/icons/gems/diamond-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/diamond-5.png b/bobplates/graphics/icons/gems/diamond-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/diamond-5.png rename to bobplates/graphics/icons/gems/diamond-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/diamond-ore.png b/bobplates/graphics/icons/gems/diamond-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/diamond-ore.png rename to bobplates/graphics/icons/gems/diamond-ore.png diff --git a/bobplates_1.1.6/graphics/icons/gems/emerald-3.png b/bobplates/graphics/icons/gems/emerald-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/emerald-3.png rename to bobplates/graphics/icons/gems/emerald-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/emerald-4.png b/bobplates/graphics/icons/gems/emerald-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/emerald-4.png rename to bobplates/graphics/icons/gems/emerald-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/emerald-5.png b/bobplates/graphics/icons/gems/emerald-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/emerald-5.png rename to bobplates/graphics/icons/gems/emerald-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/emerald-ore.png b/bobplates/graphics/icons/gems/emerald-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/emerald-ore.png rename to bobplates/graphics/icons/gems/emerald-ore.png diff --git a/bobplates_1.1.6/graphics/icons/gems/ruby-3.png b/bobplates/graphics/icons/gems/ruby-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/ruby-3.png rename to bobplates/graphics/icons/gems/ruby-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/ruby-4.png b/bobplates/graphics/icons/gems/ruby-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/ruby-4.png rename to bobplates/graphics/icons/gems/ruby-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/ruby-5.png b/bobplates/graphics/icons/gems/ruby-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/ruby-5.png rename to bobplates/graphics/icons/gems/ruby-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/ruby-ore.png b/bobplates/graphics/icons/gems/ruby-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/ruby-ore.png rename to bobplates/graphics/icons/gems/ruby-ore.png diff --git a/bobplates_1.1.6/graphics/icons/gems/sapphire-3.png b/bobplates/graphics/icons/gems/sapphire-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/sapphire-3.png rename to bobplates/graphics/icons/gems/sapphire-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/sapphire-4.png b/bobplates/graphics/icons/gems/sapphire-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/sapphire-4.png rename to bobplates/graphics/icons/gems/sapphire-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/sapphire-5.png b/bobplates/graphics/icons/gems/sapphire-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/sapphire-5.png rename to bobplates/graphics/icons/gems/sapphire-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/sapphire-ore.png b/bobplates/graphics/icons/gems/sapphire-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/sapphire-ore.png rename to bobplates/graphics/icons/gems/sapphire-ore.png diff --git a/bobplates_1.1.6/graphics/icons/gems/topaz-3.png b/bobplates/graphics/icons/gems/topaz-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/topaz-3.png rename to bobplates/graphics/icons/gems/topaz-3.png diff --git a/bobplates_1.1.6/graphics/icons/gems/topaz-4.png b/bobplates/graphics/icons/gems/topaz-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/topaz-4.png rename to bobplates/graphics/icons/gems/topaz-4.png diff --git a/bobplates_1.1.6/graphics/icons/gems/topaz-5.png b/bobplates/graphics/icons/gems/topaz-5.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/topaz-5.png rename to bobplates/graphics/icons/gems/topaz-5.png diff --git a/bobplates_1.1.6/graphics/icons/gems/topaz-ore.png b/bobplates/graphics/icons/gems/topaz-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/gems/topaz-ore.png rename to bobplates/graphics/icons/gems/topaz-ore.png diff --git a/bobplates_1.1.6/graphics/icons/glass.png b/bobplates/graphics/icons/glass.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/glass.png rename to bobplates/graphics/icons/glass.png diff --git a/bobplates_1.1.6/graphics/icons/grinding-wheel.png b/bobplates/graphics/icons/grinding-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/grinding-wheel.png rename to bobplates/graphics/icons/grinding-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/heavy-water-electrolysis.png b/bobplates/graphics/icons/heavy-water-electrolysis.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/heavy-water-electrolysis.png rename to bobplates/graphics/icons/heavy-water-electrolysis.png diff --git a/bobplates_1.1.6/graphics/icons/heavy-water.png b/bobplates/graphics/icons/heavy-water.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/heavy-water.png rename to bobplates/graphics/icons/heavy-water.png diff --git a/bobplates_1.1.6/graphics/icons/hydrogen-chloride.png b/bobplates/graphics/icons/hydrogen-chloride.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/hydrogen-chloride.png rename to bobplates/graphics/icons/hydrogen-chloride.png diff --git a/bobplates_1.1.6/graphics/icons/hydrogen-sulfide.png b/bobplates/graphics/icons/hydrogen-sulfide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/hydrogen-sulfide.png rename to bobplates/graphics/icons/hydrogen-sulfide.png diff --git a/bobplates_1.1.6/graphics/icons/hydrogen.png b/bobplates/graphics/icons/hydrogen.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/hydrogen.png rename to bobplates/graphics/icons/hydrogen.png diff --git a/bobplates_1.1.6/graphics/icons/lead-oxide.png b/bobplates/graphics/icons/lead-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lead-oxide.png rename to bobplates/graphics/icons/lead-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/lead-silver.png b/bobplates/graphics/icons/lead-silver.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lead-silver.png rename to bobplates/graphics/icons/lead-silver.png diff --git a/bobplates_1.1.6/graphics/icons/liquid-air.png b/bobplates/graphics/icons/liquid-air.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/liquid-air.png rename to bobplates/graphics/icons/liquid-air.png diff --git a/bobplates_1.1.6/graphics/icons/liquid-fuel.png b/bobplates/graphics/icons/liquid-fuel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/liquid-fuel.png rename to bobplates/graphics/icons/liquid-fuel.png diff --git a/bobplates_1.1.6/graphics/icons/lithia-water.png b/bobplates/graphics/icons/lithia-water.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lithia-water.png rename to bobplates/graphics/icons/lithia-water.png diff --git a/bobplates_1.1.6/graphics/icons/lithium-chloride.png b/bobplates/graphics/icons/lithium-chloride.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lithium-chloride.png rename to bobplates/graphics/icons/lithium-chloride.png diff --git a/bobplates_1.1.6/graphics/icons/lithium-cobalt-oxide.png b/bobplates/graphics/icons/lithium-cobalt-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lithium-cobalt-oxide.png rename to bobplates/graphics/icons/lithium-cobalt-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/lithium-ion-battery.png b/bobplates/graphics/icons/lithium-ion-battery.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lithium-ion-battery.png rename to bobplates/graphics/icons/lithium-ion-battery.png diff --git a/bobplates_1.1.6/graphics/icons/lithium-perchlorate.png b/bobplates/graphics/icons/lithium-perchlorate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/lithium-perchlorate.png rename to bobplates/graphics/icons/lithium-perchlorate.png diff --git a/bobplates_1.1.6/graphics/icons/nitinol-bearing-ball.png b/bobplates/graphics/icons/nitinol-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitinol-bearing-ball.png rename to bobplates/graphics/icons/nitinol-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/nitinol-bearing.png b/bobplates/graphics/icons/nitinol-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitinol-bearing.png rename to bobplates/graphics/icons/nitinol-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/nitinol-gear-wheel.png b/bobplates/graphics/icons/nitinol-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitinol-gear-wheel.png rename to bobplates/graphics/icons/nitinol-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/nitric-acid.png b/bobplates/graphics/icons/nitric-acid.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitric-acid.png rename to bobplates/graphics/icons/nitric-acid.png diff --git a/bobplates_1.1.6/graphics/icons/nitrogen-dioxide.png b/bobplates/graphics/icons/nitrogen-dioxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitrogen-dioxide.png rename to bobplates/graphics/icons/nitrogen-dioxide.png diff --git a/bobplates_1.1.6/graphics/icons/nitrogen.png b/bobplates/graphics/icons/nitrogen.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nitrogen.png rename to bobplates/graphics/icons/nitrogen.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/bobingabout-enrichment-process.png b/bobplates/graphics/icons/nuclear/bobingabout-enrichment-process.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/bobingabout-enrichment-process.png rename to bobplates/graphics/icons/nuclear/bobingabout-enrichment-process.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-2-blue.png b/bobplates/graphics/icons/nuclear/deuterium-fuel-cell-2-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-2-blue.png rename to bobplates/graphics/icons/nuclear/deuterium-fuel-cell-2-blue.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-2.png b/bobplates/graphics/icons/nuclear/deuterium-fuel-cell-2.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-2.png rename to bobplates/graphics/icons/nuclear/deuterium-fuel-cell-2.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-blue.png b/bobplates/graphics/icons/nuclear/deuterium-fuel-cell-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell-blue.png rename to bobplates/graphics/icons/nuclear/deuterium-fuel-cell-blue.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell.png b/bobplates/graphics/icons/nuclear/deuterium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/deuterium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue-new.png b/bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue-new.png rename to bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue-new.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue.png b/bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue.png rename to bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-blue.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-new.png b/bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-new.png rename to bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing-new.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing.png b/bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing.png rename to bobplates/graphics/icons/nuclear/deuterium-nuclear-fuel-reprocessing.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/empty-nuclear-fuel-cell.png b/bobplates/graphics/icons/nuclear/empty-nuclear-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/empty-nuclear-fuel-cell.png rename to bobplates/graphics/icons/nuclear/empty-nuclear-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/fusion-catalyst.png b/bobplates/graphics/icons/nuclear/fusion-catalyst.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/fusion-catalyst.png rename to bobplates/graphics/icons/nuclear/fusion-catalyst.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/nuclear-fuel-reprocessing.png b/bobplates/graphics/icons/nuclear/nuclear-fuel-reprocessing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/nuclear-fuel-reprocessing.png rename to bobplates/graphics/icons/nuclear/nuclear-fuel-reprocessing.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/plutonium-239.png b/bobplates/graphics/icons/nuclear/plutonium-239.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/plutonium-239.png rename to bobplates/graphics/icons/nuclear/plutonium-239.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/plutonium-fuel-cell.png b/bobplates/graphics/icons/nuclear/plutonium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/plutonium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/plutonium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-232.png b/bobplates/graphics/icons/nuclear/thorium-232.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-232.png rename to bobplates/graphics/icons/nuclear/thorium-232.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-fuel-cell.png b/bobplates/graphics/icons/nuclear/thorium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/thorium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing-old.png b/bobplates/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing-old.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing-old.png rename to bobplates/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing-old.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing.png b/bobplates/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing.png rename to bobplates/graphics/icons/nuclear/thorium-nuclear-fuel-reprocessing.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-plutonium-fuel-cell.png b/bobplates/graphics/icons/nuclear/thorium-plutonium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-plutonium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/thorium-plutonium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/thorium-processing.png b/bobplates/graphics/icons/nuclear/thorium-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/thorium-processing.png rename to bobplates/graphics/icons/nuclear/thorium-processing.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/uranium-fuel-cell (2).png b/bobplates/graphics/icons/nuclear/uranium-fuel-cell (2).png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/uranium-fuel-cell (2).png rename to bobplates/graphics/icons/nuclear/uranium-fuel-cell (2).png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/uranium-fuel-cell.png b/bobplates/graphics/icons/nuclear/uranium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/uranium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/uranium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/used-up-deuterium-fuel-cell-blue.png b/bobplates/graphics/icons/nuclear/used-up-deuterium-fuel-cell-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/used-up-deuterium-fuel-cell-blue.png rename to bobplates/graphics/icons/nuclear/used-up-deuterium-fuel-cell-blue.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/used-up-deuterium-fuel-cell.png b/bobplates/graphics/icons/nuclear/used-up-deuterium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/used-up-deuterium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/used-up-deuterium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/used-up-thorium-fuel-cell.png b/bobplates/graphics/icons/nuclear/used-up-thorium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/used-up-thorium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/used-up-thorium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/nuclear/used-up-uranium-fuel-cell.png b/bobplates/graphics/icons/nuclear/used-up-uranium-fuel-cell.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/nuclear/used-up-uranium-fuel-cell.png rename to bobplates/graphics/icons/nuclear/used-up-uranium-fuel-cell.png diff --git a/bobplates_1.1.6/graphics/icons/ore/bauxite-ore.png b/bobplates/graphics/icons/ore/bauxite-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/bauxite-ore.png rename to bobplates/graphics/icons/ore/bauxite-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/coal.png b/bobplates/graphics/icons/ore/coal.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/coal.png rename to bobplates/graphics/icons/ore/coal.png diff --git a/bobplates_1.1.6/graphics/icons/ore/cobalt-ore.png b/bobplates/graphics/icons/ore/cobalt-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/cobalt-ore.png rename to bobplates/graphics/icons/ore/cobalt-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/copper-ore.png b/bobplates/graphics/icons/ore/copper-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/copper-ore.png rename to bobplates/graphics/icons/ore/copper-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/gem-ore.png b/bobplates/graphics/icons/ore/gem-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/gem-ore.png rename to bobplates/graphics/icons/ore/gem-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/gold-ore.png b/bobplates/graphics/icons/ore/gold-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/gold-ore.png rename to bobplates/graphics/icons/ore/gold-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/iron-ore.png b/bobplates/graphics/icons/ore/iron-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/iron-ore.png rename to bobplates/graphics/icons/ore/iron-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/lead-ore.png b/bobplates/graphics/icons/ore/lead-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/lead-ore.png rename to bobplates/graphics/icons/ore/lead-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/nickel-ore.png b/bobplates/graphics/icons/ore/nickel-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/nickel-ore.png rename to bobplates/graphics/icons/ore/nickel-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/quartz.png b/bobplates/graphics/icons/ore/quartz.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/quartz.png rename to bobplates/graphics/icons/ore/quartz.png diff --git a/bobplates_1.1.6/graphics/icons/ore/rutile-ore.png b/bobplates/graphics/icons/ore/rutile-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/rutile-ore.png rename to bobplates/graphics/icons/ore/rutile-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/silver-ore.png b/bobplates/graphics/icons/ore/silver-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/silver-ore.png rename to bobplates/graphics/icons/ore/silver-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/stone.png b/bobplates/graphics/icons/ore/stone.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/stone.png rename to bobplates/graphics/icons/ore/stone.png diff --git a/bobplates_1.1.6/graphics/icons/ore/tin-ore.png b/bobplates/graphics/icons/ore/tin-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/tin-ore.png rename to bobplates/graphics/icons/ore/tin-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/tungsten-ore.png b/bobplates/graphics/icons/ore/tungsten-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/tungsten-ore.png rename to bobplates/graphics/icons/ore/tungsten-ore.png diff --git a/bobplates_1.1.6/graphics/icons/ore/zinc-ore.png b/bobplates/graphics/icons/ore/zinc-ore.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/ore/zinc-ore.png rename to bobplates/graphics/icons/ore/zinc-ore.png diff --git a/bobplates_1.1.6/graphics/icons/oxygen.png b/bobplates/graphics/icons/oxygen.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/oxygen.png rename to bobplates/graphics/icons/oxygen.png diff --git a/bobplates_1.1.6/graphics/icons/petrolium-gas-cracking.png b/bobplates/graphics/icons/petrolium-gas-cracking.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/petrolium-gas-cracking.png rename to bobplates/graphics/icons/petrolium-gas-cracking.png diff --git a/bobplates_1.1.6/graphics/icons/plate/aluminium-plate.png b/bobplates/graphics/icons/plate/aluminium-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/aluminium-plate.png rename to bobplates/graphics/icons/plate/aluminium-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/brass-plate.png b/bobplates/graphics/icons/plate/brass-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/brass-plate.png rename to bobplates/graphics/icons/plate/brass-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/bronze-plate.png b/bobplates/graphics/icons/plate/bronze-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/bronze-plate.png rename to bobplates/graphics/icons/plate/bronze-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/cobalt-plate.png b/bobplates/graphics/icons/plate/cobalt-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/cobalt-plate.png rename to bobplates/graphics/icons/plate/cobalt-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/cobalt-steel-plate.png b/bobplates/graphics/icons/plate/cobalt-steel-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/cobalt-steel-plate.png rename to bobplates/graphics/icons/plate/cobalt-steel-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/copper-plate.png b/bobplates/graphics/icons/plate/copper-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/copper-plate.png rename to bobplates/graphics/icons/plate/copper-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/copper-tungsten-plate.png b/bobplates/graphics/icons/plate/copper-tungsten-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/copper-tungsten-plate.png rename to bobplates/graphics/icons/plate/copper-tungsten-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/gold-plate.png b/bobplates/graphics/icons/plate/gold-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/gold-plate.png rename to bobplates/graphics/icons/plate/gold-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/gunmetal-plate.png b/bobplates/graphics/icons/plate/gunmetal-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/gunmetal-plate.png rename to bobplates/graphics/icons/plate/gunmetal-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/invar-plate.png b/bobplates/graphics/icons/plate/invar-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/invar-plate.png rename to bobplates/graphics/icons/plate/invar-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/iron-plate.png b/bobplates/graphics/icons/plate/iron-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/iron-plate.png rename to bobplates/graphics/icons/plate/iron-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/lead-plate.png b/bobplates/graphics/icons/plate/lead-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/lead-plate.png rename to bobplates/graphics/icons/plate/lead-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/lithium-plate.png b/bobplates/graphics/icons/plate/lithium-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/lithium-plate.png rename to bobplates/graphics/icons/plate/lithium-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/nickel-plate.png b/bobplates/graphics/icons/plate/nickel-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/nickel-plate.png rename to bobplates/graphics/icons/plate/nickel-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/nitinol-plate.png b/bobplates/graphics/icons/plate/nitinol-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/nitinol-plate.png rename to bobplates/graphics/icons/plate/nitinol-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/silicon-plate.png b/bobplates/graphics/icons/plate/silicon-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/silicon-plate.png rename to bobplates/graphics/icons/plate/silicon-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/silver-plate.png b/bobplates/graphics/icons/plate/silver-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/silver-plate.png rename to bobplates/graphics/icons/plate/silver-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/solder-plate.png b/bobplates/graphics/icons/plate/solder-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/solder-plate.png rename to bobplates/graphics/icons/plate/solder-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/steel-plate.png b/bobplates/graphics/icons/plate/steel-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/steel-plate.png rename to bobplates/graphics/icons/plate/steel-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/tin-plate.png b/bobplates/graphics/icons/plate/tin-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/tin-plate.png rename to bobplates/graphics/icons/plate/tin-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/titanium-plate.png b/bobplates/graphics/icons/plate/titanium-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/titanium-plate.png rename to bobplates/graphics/icons/plate/titanium-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/tungsten-carbide-plate.png b/bobplates/graphics/icons/plate/tungsten-carbide-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/tungsten-carbide-plate.png rename to bobplates/graphics/icons/plate/tungsten-carbide-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/tungsten-plate.png b/bobplates/graphics/icons/plate/tungsten-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/tungsten-plate.png rename to bobplates/graphics/icons/plate/tungsten-plate.png diff --git a/bobplates_1.1.6/graphics/icons/plate/zinc-plate.png b/bobplates/graphics/icons/plate/zinc-plate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/plate/zinc-plate.png rename to bobplates/graphics/icons/plate/zinc-plate.png diff --git a/bobplates_1.1.6/graphics/icons/polishing-compound.png b/bobplates/graphics/icons/polishing-compound.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/polishing-compound.png rename to bobplates/graphics/icons/polishing-compound.png diff --git a/bobplates_1.1.6/graphics/icons/polishing-wheel.png b/bobplates/graphics/icons/polishing-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/polishing-wheel.png rename to bobplates/graphics/icons/polishing-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/powdered-silicon.png b/bobplates/graphics/icons/powdered-silicon.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/powdered-silicon.png rename to bobplates/graphics/icons/powdered-silicon.png diff --git a/bobplates_1.1.6/graphics/icons/powdered-tungsten.png b/bobplates/graphics/icons/powdered-tungsten.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/powdered-tungsten.png rename to bobplates/graphics/icons/powdered-tungsten.png diff --git a/bobplates_1.1.6/graphics/icons/pure-water.png b/bobplates/graphics/icons/pure-water.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/pure-water.png rename to bobplates/graphics/icons/pure-water.png diff --git a/bobplates_1.1.6/graphics/icons/resin.png b/bobplates/graphics/icons/resin.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/resin.png rename to bobplates/graphics/icons/resin.png diff --git a/bobplates_1.1.6/graphics/icons/rubber.png b/bobplates/graphics/icons/rubber.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/rubber.png rename to bobplates/graphics/icons/rubber.png diff --git a/bobplates_1.1.6/graphics/icons/salt-water-electrolysis.png b/bobplates/graphics/icons/salt-water-electrolysis.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/salt-water-electrolysis.png rename to bobplates/graphics/icons/salt-water-electrolysis.png diff --git a/bobplates_1.1.6/graphics/icons/salt.png b/bobplates/graphics/icons/salt.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/salt.png rename to bobplates/graphics/icons/salt.png diff --git a/bobplates_1.1.6/graphics/icons/silicon-carbide.png b/bobplates/graphics/icons/silicon-carbide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silicon-carbide.png rename to bobplates/graphics/icons/silicon-carbide.png diff --git a/bobplates_1.1.6/graphics/icons/silicon-nitride.png b/bobplates/graphics/icons/silicon-nitride.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silicon-nitride.png rename to bobplates/graphics/icons/silicon-nitride.png diff --git a/bobplates_1.1.6/graphics/icons/silicon-wafer.png b/bobplates/graphics/icons/silicon-wafer.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silicon-wafer.png rename to bobplates/graphics/icons/silicon-wafer.png diff --git a/bobplates_1.1.6/graphics/icons/silver-nitrate.png b/bobplates/graphics/icons/silver-nitrate.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silver-nitrate.png rename to bobplates/graphics/icons/silver-nitrate.png diff --git a/bobplates_1.1.6/graphics/icons/silver-oxide.png b/bobplates/graphics/icons/silver-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silver-oxide.png rename to bobplates/graphics/icons/silver-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/silver-zinc-battery.png b/bobplates/graphics/icons/silver-zinc-battery.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/silver-zinc-battery.png rename to bobplates/graphics/icons/silver-zinc-battery.png diff --git a/bobplates_1.1.6/graphics/icons/small-storage-tank.png b/bobplates/graphics/icons/small-storage-tank.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/small-storage-tank.png rename to bobplates/graphics/icons/small-storage-tank.png diff --git a/bobplates_1.1.6/graphics/icons/sodium-hydroxide.png b/bobplates/graphics/icons/sodium-hydroxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/sodium-hydroxide.png rename to bobplates/graphics/icons/sodium-hydroxide.png diff --git a/bobplates_1.1.6/graphics/icons/solid-fuel-from-hydrogen.png b/bobplates/graphics/icons/solid-fuel-from-hydrogen.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/solid-fuel-from-hydrogen.png rename to bobplates/graphics/icons/solid-fuel-from-hydrogen.png diff --git a/bobplates_1.1.6/graphics/icons/steel-bearing-ball.png b/bobplates/graphics/icons/steel-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/steel-bearing-ball.png rename to bobplates/graphics/icons/steel-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/steel-bearing.png b/bobplates/graphics/icons/steel-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/steel-bearing.png rename to bobplates/graphics/icons/steel-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/steel-gear-wheel.png b/bobplates/graphics/icons/steel-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/steel-gear-wheel.png rename to bobplates/graphics/icons/steel-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/stone-chemical-furnace.png b/bobplates/graphics/icons/stone-chemical-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/stone-chemical-furnace.png rename to bobplates/graphics/icons/stone-chemical-furnace.png diff --git a/bobplates_1.1.6/graphics/icons/stone-mixing-furnace.png b/bobplates/graphics/icons/stone-mixing-furnace.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/stone-mixing-furnace.png rename to bobplates/graphics/icons/stone-mixing-furnace.png diff --git a/bobplates_1.1.6/graphics/icons/sulfur-dioxide.png b/bobplates/graphics/icons/sulfur-dioxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/sulfur-dioxide.png rename to bobplates/graphics/icons/sulfur-dioxide.png diff --git a/bobplates_1.1.6/graphics/icons/synthetic-wood.png b/bobplates/graphics/icons/synthetic-wood.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/synthetic-wood.png rename to bobplates/graphics/icons/synthetic-wood.png diff --git a/bobplates_1.1.6/graphics/icons/technology/advanced-electronics-3.png b/bobplates/graphics/icons/technology/advanced-electronics-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/advanced-electronics-3.png rename to bobplates/graphics/icons/technology/advanced-electronics-3.png diff --git a/bobplates_1.1.6/graphics/icons/technology/alien-blue-alloy.png b/bobplates/graphics/icons/technology/alien-blue-alloy.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/alien-blue-alloy.png rename to bobplates/graphics/icons/technology/alien-blue-alloy.png diff --git a/bobplates_1.1.6/graphics/icons/technology/alien-orange-alloy.png b/bobplates/graphics/icons/technology/alien-orange-alloy.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/alien-orange-alloy.png rename to bobplates/graphics/icons/technology/alien-orange-alloy.png diff --git a/bobplates_1.1.6/graphics/icons/technology/alloy-processing.png b/bobplates/graphics/icons/technology/alloy-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/alloy-processing.png rename to bobplates/graphics/icons/technology/alloy-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/aluminium-processing.png b/bobplates/graphics/icons/technology/aluminium-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/aluminium-processing.png rename to bobplates/graphics/icons/technology/aluminium-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/bobingabout-enrichment-process.png b/bobplates/graphics/icons/technology/bobingabout-enrichment-process.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/bobingabout-enrichment-process.png rename to bobplates/graphics/icons/technology/bobingabout-enrichment-process.png diff --git a/bobplates_1.1.6/graphics/icons/technology/ceramics.png b/bobplates/graphics/icons/technology/ceramics.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/ceramics.png rename to bobplates/graphics/icons/technology/ceramics.png diff --git a/bobplates_1.1.6/graphics/icons/technology/chemical-processing.png b/bobplates/graphics/icons/technology/chemical-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/chemical-processing.png rename to bobplates/graphics/icons/technology/chemical-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/chemistry.png b/bobplates/graphics/icons/technology/chemistry.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/chemistry.png rename to bobplates/graphics/icons/technology/chemistry.png diff --git a/bobplates_1.1.6/graphics/icons/technology/cobalt-processing.png b/bobplates/graphics/icons/technology/cobalt-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/cobalt-processing.png rename to bobplates/graphics/icons/technology/cobalt-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue-new.png b/bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue-new.png rename to bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue-new.png diff --git a/bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue.png b/bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue.png rename to bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-blue.png diff --git a/bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-new.png b/bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-new.png rename to bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing-new.png diff --git a/bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing.png b/bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing.png rename to bobplates/graphics/icons/technology/deuterium-nuclear-fuel-reprocessing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/deuterium.png b/bobplates/graphics/icons/technology/deuterium.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/deuterium.png rename to bobplates/graphics/icons/technology/deuterium.png diff --git a/bobplates_1.1.6/graphics/icons/technology/electrolysis-old.png b/bobplates/graphics/icons/technology/electrolysis-old.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/electrolysis-old.png rename to bobplates/graphics/icons/technology/electrolysis-old.png diff --git a/bobplates_1.1.6/graphics/icons/technology/electrolysis.png b/bobplates/graphics/icons/technology/electrolysis.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/electrolysis.png rename to bobplates/graphics/icons/technology/electrolysis.png diff --git a/bobplates_1.1.6/graphics/icons/technology/fluid-canister.png b/bobplates/graphics/icons/technology/fluid-canister.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/fluid-canister.png rename to bobplates/graphics/icons/technology/fluid-canister.png diff --git a/bobplates_1.1.6/graphics/icons/technology/fluids.png b/bobplates/graphics/icons/technology/fluids.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/fluids.png rename to bobplates/graphics/icons/technology/fluids.png diff --git a/bobplates_1.1.6/graphics/icons/technology/gas-canister.png b/bobplates/graphics/icons/technology/gas-canister.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/gas-canister.png rename to bobplates/graphics/icons/technology/gas-canister.png diff --git a/bobplates_1.1.6/graphics/icons/technology/gems.png b/bobplates/graphics/icons/technology/gems.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/gems.png rename to bobplates/graphics/icons/technology/gems.png diff --git a/bobplates_1.1.6/graphics/icons/technology/gold-processing.png b/bobplates/graphics/icons/technology/gold-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/gold-processing.png rename to bobplates/graphics/icons/technology/gold-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/grinding.png b/bobplates/graphics/icons/technology/grinding.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/grinding.png rename to bobplates/graphics/icons/technology/grinding.png diff --git a/bobplates_1.1.6/graphics/icons/technology/heavy-water.png b/bobplates/graphics/icons/technology/heavy-water.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/heavy-water.png rename to bobplates/graphics/icons/technology/heavy-water.png diff --git a/bobplates_1.1.6/graphics/icons/technology/intermediates.png b/bobplates/graphics/icons/technology/intermediates.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/intermediates.png rename to bobplates/graphics/icons/technology/intermediates.png diff --git a/bobplates_1.1.6/graphics/icons/technology/invar-processing.png b/bobplates/graphics/icons/technology/invar-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/invar-processing.png rename to bobplates/graphics/icons/technology/invar-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/lead-processing.png b/bobplates/graphics/icons/technology/lead-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/lead-processing.png rename to bobplates/graphics/icons/technology/lead-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/lithium-processing.png b/bobplates/graphics/icons/technology/lithium-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/lithium-processing.png rename to bobplates/graphics/icons/technology/lithium-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/logistics.png b/bobplates/graphics/icons/technology/logistics.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/logistics.png rename to bobplates/graphics/icons/technology/logistics.png diff --git a/bobplates_1.1.6/graphics/icons/technology/nickel-processing.png b/bobplates/graphics/icons/technology/nickel-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/nickel-processing.png rename to bobplates/graphics/icons/technology/nickel-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/nitrogen-processing.png b/bobplates/graphics/icons/technology/nitrogen-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/nitrogen-processing.png rename to bobplates/graphics/icons/technology/nitrogen-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/plutonium-nucleosynthesis.png b/bobplates/graphics/icons/technology/plutonium-nucleosynthesis.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/plutonium-nucleosynthesis.png rename to bobplates/graphics/icons/technology/plutonium-nucleosynthesis.png diff --git a/bobplates_1.1.6/graphics/icons/technology/polishing.png b/bobplates/graphics/icons/technology/polishing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/polishing.png rename to bobplates/graphics/icons/technology/polishing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/resource-editor.png b/bobplates/graphics/icons/technology/resource-editor.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/resource-editor.png rename to bobplates/graphics/icons/technology/resource-editor.png diff --git a/bobplates_1.1.6/graphics/icons/technology/resources.png b/bobplates/graphics/icons/technology/resources.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/resources.png rename to bobplates/graphics/icons/technology/resources.png diff --git a/bobplates_1.1.6/graphics/icons/technology/thorium-nuclear-fuel-reprocessing-new.png b/bobplates/graphics/icons/technology/thorium-nuclear-fuel-reprocessing-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/thorium-nuclear-fuel-reprocessing-new.png rename to bobplates/graphics/icons/technology/thorium-nuclear-fuel-reprocessing-new.png diff --git a/bobplates_1.1.6/graphics/icons/technology/thorium-nuclear-fuel-reprocessing.png b/bobplates/graphics/icons/technology/thorium-nuclear-fuel-reprocessing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/thorium-nuclear-fuel-reprocessing.png rename to bobplates/graphics/icons/technology/thorium-nuclear-fuel-reprocessing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/thorium-processing.png b/bobplates/graphics/icons/technology/thorium-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/thorium-processing.png rename to bobplates/graphics/icons/technology/thorium-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/titanium-processing.png b/bobplates/graphics/icons/technology/titanium-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/titanium-processing.png rename to bobplates/graphics/icons/technology/titanium-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/tungsten-processing.png b/bobplates/graphics/icons/technology/tungsten-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/tungsten-processing.png rename to bobplates/graphics/icons/technology/tungsten-processing.png diff --git a/bobplates_1.1.6/graphics/icons/technology/uranium-nuclear-fuel-reprocessing-new.png b/bobplates/graphics/icons/technology/uranium-nuclear-fuel-reprocessing-new.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/uranium-nuclear-fuel-reprocessing-new.png rename to bobplates/graphics/icons/technology/uranium-nuclear-fuel-reprocessing-new.png diff --git a/bobplates_1.1.6/graphics/icons/technology/void.png b/bobplates/graphics/icons/technology/void.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/void.png rename to bobplates/graphics/icons/technology/void.png diff --git a/bobplates_1.1.6/graphics/icons/technology/zinc-processing.png b/bobplates/graphics/icons/technology/zinc-processing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/technology/zinc-processing.png rename to bobplates/graphics/icons/technology/zinc-processing.png diff --git a/bobplates_1.1.6/graphics/icons/titanium-bearing-ball.png b/bobplates/graphics/icons/titanium-bearing-ball.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/titanium-bearing-ball.png rename to bobplates/graphics/icons/titanium-bearing-ball.png diff --git a/bobplates_1.1.6/graphics/icons/titanium-bearing.png b/bobplates/graphics/icons/titanium-bearing.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/titanium-bearing.png rename to bobplates/graphics/icons/titanium-bearing.png diff --git a/bobplates_1.1.6/graphics/icons/titanium-gear-wheel.png b/bobplates/graphics/icons/titanium-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/titanium-gear-wheel.png rename to bobplates/graphics/icons/titanium-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/tungsten-gear-wheel.png b/bobplates/graphics/icons/tungsten-gear-wheel.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/tungsten-gear-wheel.png rename to bobplates/graphics/icons/tungsten-gear-wheel.png diff --git a/bobplates_1.1.6/graphics/icons/tungsten-oxide.png b/bobplates/graphics/icons/tungsten-oxide.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/tungsten-oxide.png rename to bobplates/graphics/icons/tungsten-oxide.png diff --git a/bobplates_1.1.6/graphics/icons/tungstic-acid.png b/bobplates/graphics/icons/tungstic-acid.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/tungstic-acid.png rename to bobplates/graphics/icons/tungstic-acid.png diff --git a/bobplates_1.1.6/graphics/icons/void-pump.png b/bobplates/graphics/icons/void-pump.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/void-pump.png rename to bobplates/graphics/icons/void-pump.png diff --git a/bobplates_1.1.6/graphics/icons/void.png b/bobplates/graphics/icons/void.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/void.png rename to bobplates/graphics/icons/void.png diff --git a/bobplates_1.1.6/graphics/icons/water-electrolysis.png b/bobplates/graphics/icons/water-electrolysis.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-electrolysis.png rename to bobplates/graphics/icons/water-electrolysis.png diff --git a/bobplates_1.1.6/graphics/icons/water-pump-1.png b/bobplates/graphics/icons/water-pump-1.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-pump-1.png rename to bobplates/graphics/icons/water-pump-1.png diff --git a/bobplates_1.1.6/graphics/icons/water-pump-2.png b/bobplates/graphics/icons/water-pump-2.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-pump-2.png rename to bobplates/graphics/icons/water-pump-2.png diff --git a/bobplates_1.1.6/graphics/icons/water-pump-3.png b/bobplates/graphics/icons/water-pump-3.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-pump-3.png rename to bobplates/graphics/icons/water-pump-3.png diff --git a/bobplates_1.1.6/graphics/icons/water-pump-4.png b/bobplates/graphics/icons/water-pump-4.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-pump-4.png rename to bobplates/graphics/icons/water-pump-4.png diff --git a/bobplates_1.1.6/graphics/icons/water-pump.png b/bobplates/graphics/icons/water-pump.png similarity index 100% rename from bobplates_1.1.6/graphics/icons/water-pump.png rename to bobplates/graphics/icons/water-pump.png diff --git a/bobplates/info.json b/bobplates/info.json new file mode 100644 index 00000000..406be718 --- /dev/null +++ b/bobplates/info.json @@ -0,0 +1,16 @@ +{ + "name": "bobplates", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Metals, Chemicals and Intermediates mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "bobores >= 1.2.0", + "? bobenemies >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\nDesigned to make use of resources provided by Bob's Ores mod to function as intended\nOther mods may provide an alternate method to obtain the required resources.\n\nThis mod is designed as a base to be used with the full Bob's Mods set.\n\nThis mod adds new production processes including:\n Electrolysis: Seperation of a liquid using electricity.\n Chemical furnace: Heat and a Fluid.\n Mixing furnace: Heat with more than 1 ingredient.\n Liquid pump: Mostly used for Barrelling.\n Gas pump: Used for Bottling, a Barrelling alternative, but also produces the resource Compressed air.\n Gas vent: Disposes of unwanted gasses into the void.\n\nThis mod adds a method to produce a metals from resource of the following:\nAluminium, Cobalt, Gold, Lead, Nickel, Glass, Silicon, Titanium, Silver, Tin, Tungsten, Lithium and Zinc.\nAlloys of the following:\nBronze, Brass, Gunmetal, Copper-tungsten, Tungsten carbide, Invar, Nitinol and Cobalt-steel.\nAlso adds a wide array of other materials including Ceramics, Gem processing, and a large array of Liquid and Gas chemicals.\nThis mod also provides intermediate products including Gear wheels and bearings of multiple materials, Advanced processing units, and 2 tiers of batteries." +} diff --git a/bobplates_1.1.6/locale/en/bobplates.cfg b/bobplates/locale/en/bobplates.cfg similarity index 100% rename from bobplates_1.1.6/locale/en/bobplates.cfg rename to bobplates/locale/en/bobplates.cfg diff --git a/bobplates_1.1.6/migrations/bobplates_0.18.8.json b/bobplates/migrations/bobplates_0.18.8.json similarity index 100% rename from bobplates_1.1.6/migrations/bobplates_0.18.8.json rename to bobplates/migrations/bobplates_0.18.8.json diff --git a/bobplates_1.1.6/migrations/bobplates_0.18.8.lua b/bobplates/migrations/bobplates_0.18.8.lua similarity index 100% rename from bobplates_1.1.6/migrations/bobplates_0.18.8.lua rename to bobplates/migrations/bobplates_0.18.8.lua diff --git a/bobplates_1.1.6/migrations/bobplates_0.18.9.json b/bobplates/migrations/bobplates_0.18.9.json similarity index 100% rename from bobplates_1.1.6/migrations/bobplates_0.18.9.json rename to bobplates/migrations/bobplates_0.18.9.json diff --git a/bobplates_1.1.6/migrations/bobplates_1.1.1.json b/bobplates/migrations/bobplates_1.1.1.json similarity index 100% rename from bobplates_1.1.6/migrations/bobplates_1.1.1.json rename to bobplates/migrations/bobplates_1.1.1.json diff --git a/bobplates_1.1.6/prototypes/category.lua b/bobplates/prototypes/category.lua similarity index 100% rename from bobplates_1.1.6/prototypes/category.lua rename to bobplates/prototypes/category.lua diff --git a/bobplates_1.1.6/prototypes/distillery.lua b/bobplates/prototypes/distillery.lua similarity index 100% rename from bobplates_1.1.6/prototypes/distillery.lua rename to bobplates/prototypes/distillery.lua diff --git a/bobplates/prototypes/entity/entities.lua b/bobplates/prototypes/entity/entities.lua new file mode 100644 index 00000000..8f60282a --- /dev/null +++ b/bobplates/prototypes/entity/entities.lua @@ -0,0 +1,1018 @@ +local function bob_electrolyser_animation_facing(directory, tier, tint, facing) + return + { + layers = { + -- Base + { + filename = directory .. "/electrolyser-" .. tier .. "-base.png", + x = 136 * facing, + width = 136, + height = 130, + frame_count = 1, + shift = util.by_pixel(17, 0), + hr_version = { + filename = directory .. "/hr-electrolyser-" .. tier .. "-base.png", + x = 272 * facing, + width = 272, + height = 260, + frame_count = 1, + shift = util.by_pixel(17, 0), + scale = 0.5, + }, + }, + -- Mask + { + filename = directory .. "/electrolyser-" .. tier .. "-mask.png", + x = 136 * facing, + width = 136, + height = 130, + frame_count = 1, + shift = util.by_pixel(17, 0), + tint = tint, + hr_version = { + filename = directory .. "/hr-electrolyser-" .. tier .. "-mask.png", + x = 272 * facing, + width = 272, + height = 260, + frame_count = 1, + shift = util.by_pixel(17, 0), + tint = tint, + scale = 0.5, + }, + }, + -- Highlights + { + filename = directory .. "/electrolyser-" .. tier .. "-highlights.png", + x = 136 * facing, + width = 136, + height = 130, + frame_count = 1, + shift = util.by_pixel(17, 0), + blend_mode = "additive", + hr_version = { + filename = directory .. "/hr-electrolyser-" .. tier .. "-highlights.png", + x = 272 * facing, + width = 272, + height = 260, + frame_count = 1, + shift = util.by_pixel(17, 0), + blend_mode = "additive", + scale = 0.5, + }, + }, + -- Shadow + { + filename = directory .. "/electrolyser-" .. tier .. "-shadow.png", + x = 136 * facing, + width = 136, + height = 130, + frame_count = 1, + shift = util.by_pixel(17, 0), + draw_as_shadow = true, + hr_version = { + filename = directory .. "/hr-electrolyser-" .. tier .. "-shadow.png", + x = 272 * facing, + width = 272, + height = 260, + frame_count = 1, + draw_as_shadow = true, + shift = util.by_pixel(17, 0), + scale = 0.5, + }, + }, + }, + } +end + +local function bob_electrolyser_animation(directory, tier, tint) + return { + north = bob_electrolyser_animation_facing(directory, tier, tint, 0), + east = bob_electrolyser_animation_facing(directory, tier, tint, 1), + south = bob_electrolyser_animation_facing(directory, tier, tint, 2), + west = bob_electrolyser_animation_facing(directory, tier, tint, 3), + } +end + +data:extend({ + { + type = "assembling-machine", + name = "electrolyser", + icon = "__bobplates__/graphics/icons/electrolyser.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.5, result = "electrolyser" }, + fast_replaceable_group = "electrolyser", + corpse = "big-remnants", + collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + max_health = 150, + crafting_categories = { "electrolysis" }, + allowed_effects = { "consumption", "speed", "productivity", "pollution" }, + module_specification = { + module_slots = 1, + }, + crafting_speed = 0.75, + energy_usage = "420kW", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 4, + }, + fluid_boxes = { + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = { { type = "input", position = { -1, -2 } } }, + }, + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = { { type = "input", position = { 1, -2 } } }, + }, + { + production_type = "output", + pipe_covers = pipecoverspictures(), + base_level = 1, + pipe_connections = { { type = "output", position = { -1, 2 } } }, + }, + { + production_type = "output", + pipe_covers = pipecoverspictures(), + base_level = 1, + pipe_connections = { { type = "output", position = { 1, 2 } } }, + }, + }, + animation = bob_electrolyser_animation( + "__bobplates__/graphics/entity/electrolyser", + 1, + { r = 0.5, g = 0.5, b = 0 } + ), + working_sound = data.raw["assembling-machine"]["chemical-plant"].working_sound, + }, + + { + type = "assembling-machine", + name = "stone-chemical-furnace", + icon = "__bobplates__/graphics/icons/stone-chemical-furnace.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "stone-chemical-furnace" }, + max_health = 200, + crafting_speed = 1, + corpse = "medium-remnants", + repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + working_sound = { + sound = { filename = "__base__/sound/furnace.ogg" }, + }, + resistances = { + { + type = "fire", + percent = 80, + }, + { + type = "explosion", + percent = 30, + }, + }, + fluid_boxes = { + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = { { type = "input", position = { 0.5, -1.5 } } }, + }, + }, + collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, + selection_box = { { -1, -1 }, { 1, 1 } }, + crafting_categories = { "chemical-furnace" }, + energy_usage = "90kW", + energy_source = { + type = "burner", + fuel_category = "chemical", + effectivity = 1, + fuel_inventory_size = 1, + emissions_per_minute = 2, + smoke = { + { + name = "smoke", + deviation = { 0.1, 0.1 }, + frequency = 5, + north_position = { 0.0, -0.8 }, + east_position = { 0.0, -0.8 }, + south_position = { 0.0, -0.8 }, + west_position = { 0.0, -0.8 }, + starting_vertical_speed = 0.08, + starting_frame_deviation = 60, + }, + }, + }, + animation = { + north = { + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", + priority = "extra-high", + width = 94, + height = 80, + frame_count = 1, + shift = { 0.25, 0 }, + }, + west = { + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", + x = 94, + priority = "extra-high", + width = 94, + height = 80, + frame_count = 1, + shift = { 0.25, 0 }, + }, + south = { + x = 188, + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", + priority = "extra-high", + width = 94, + height = 80, + frame_count = 1, + shift = { 0.25, 0 }, + }, + east = { + x = 282, + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", + priority = "extra-high", + width = 94, + height = 80, + frame_count = 1, + shift = { 0.25, 0 }, + }, + }, + working_visualisations = { + { + north_position = { 0.96875, -0.53125 }, + west_position = { 0, 0 }, + south_position = { -0.9375, 0.40625 }, + east_position = { 0.53125, 0.78125 }, + east_animation = { + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-down.png", + width = 9, + height = 8, + frame_count = 14, + }, + south_animation = { + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-left.png", + width = 5, + height = 7, + frame_count = 14, + }, + north_animation = { + filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-right.png", + width = 6, + height = 9, + frame_count = 14, + }, + }, + }, + fast_replaceable_group = "furnace", + next_upgrade = "steel-chemical-furnace", + }, + + { + type = "assembling-machine", + name = "steel-chemical-furnace", + icon = "__base__/graphics/icons/steel-furnace.png", + icon_size = 64, + icon_mipmaps = 4, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "steel-chemical-furnace" }, + max_health = 300, + crafting_speed = 2, + corpse = "medium-remnants", + repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, + mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + working_sound = { + sound = { filename = "__base__/sound/furnace.ogg" }, + }, + resistances = { + { + type = "fire", + percent = 80, + }, + { + type = "explosion", + percent = 30, + }, + }, + fluid_boxes = { + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = { { type = "input", position = { 0.5, -1.5 } } }, + }, + }, + collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, + selection_box = { { -1, -1 }, { 1, 1 } }, + crafting_categories = { "chemical-furnace" }, + energy_usage = "90kW", + energy_source = { + type = "burner", + fuel_category = "chemical", + effectivity = 1, + fuel_inventory_size = 1, + emissions_per_minute = 4, + smoke = { + { + name = "smoke", + frequency = 10, + north_position = { 0.7, -1.2 }, + east_position = { 0.7, -1.2 }, + south_position = { 0.7, -1.2 }, + west_position = { 0.7, -1.2 }, + starting_vertical_speed = 0.08, + starting_frame_deviation = 60, + }, + }, + }, + animation = util.table.deepcopy(data.raw.furnace["steel-furnace"].animation), + working_visualisations = util.table.deepcopy(data.raw.furnace["steel-furnace"].working_visualisations), + fast_replaceable_group = "furnace", + }, + + { + type = "assembling-machine", + name = "electric-chemical-furnace", + icon = "__bobplates__/graphics/icons/chemical-furnace.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "electric-chemical-furnace" }, + max_health = 350, + corpse = "big-remnants", + resistances = { + { + type = "fire", + percent = 80, + }, + }, + fluid_boxes = { + { + production_type = "input", + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + base_area = 10, + base_level = -1, + pipe_connections = { { type = "input", position = { 0, -2 } } }, + }, + off_when_no_fluid_recipe = true, + }, + collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + + module_specification = { + module_slots = 2, + module_info_icon_shift = { 0, 0.5 }, + module_info_multi_row_initial_height_modifier = -0.3, + }, + crafting_speed = 2, + crafting_categories = { "smelting", "chemical-furnace" }, + energy_usage = "180kW", + energy_source = { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 1, + }, + working_sound = { + sound = { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.7, + }, + apparent_volume = 1.5, + }, + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-chemical-furnace.png", + priority = "high", + width = 129, + height = 100, + frame_count = 1, + shift = { 0.46875, 0 }, + }, + working_visualisations = { + { + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-heater.png", + priority = "high", + width = 25, + height = 15, + frame_count = 12, + animation_speed = 0.5, + shift = { 0.015625, 0.890625 }, + hr_version = { + filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-heater.png", + priority = "high", + width = 60, + height = 56, + frame_count = 12, + animation_speed = 0.5, + shift = util.by_pixel(1.75, 32.75), + scale = 0.5, + }, + }, + light = { intensity = 0.4, size = 6, shift = { 0.0, 1.0 }, color = { r = 1.0, g = 1.0, b = 1.0 } }, + }, + { + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-1.png", + priority = "high", + width = 19, + height = 13, + frame_count = 4, + animation_speed = 0.5, + shift = { -0.671875, -0.640625 }, + hr_version = { + filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png", + priority = "high", + width = 37, + height = 25, + frame_count = 4, + animation_speed = 0.5, + shift = util.by_pixel(-20.5, -18.5), + scale = 0.5, + }, + }, + }, + }, + fast_replaceable_group = "furnace", + allowed_effects = { "consumption", "speed", "productivity", "pollution" }, + }, + + { + type = "assembling-machine", + name = "stone-mixing-furnace", + icon = "__bobplates__/graphics/icons/stone-mixing-furnace.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "stone-mixing-furnace" }, + max_health = 200, + corpse = "medium-remnants", + working_sound = { + sound = { filename = "__base__/sound/furnace.ogg" }, + }, + resistances = { + { + type = "fire", + percent = 100, + }, + }, + collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, + selection_box = { { -0.8, -1 }, { 0.8, 1 } }, + crafting_categories = { "smelting", "mixing-furnace" }, + energy_usage = "90kW", + crafting_speed = 1, + energy_source = { + type = "burner", + fuel_category = "chemical", + effectivity = 1, + fuel_inventory_size = 1, + emissions_per_minute = 2, + smoke = { + { + name = "smoke", + deviation = { 0.1, 0.1 }, + frequency = 5, + position = { 0.0, -0.8 }, + starting_vertical_speed = 0.08, + starting_frame_deviation = 60, + }, + }, + }, + + animation = { + filename = "__bobplates__/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png", + priority = "extra-high", + width = 81, + height = 64, + frame_count = 1, + shift = { 0.5, 0.05 }, + }, + working_visualisations = { + { + north_position = { 0.078125, 0.5234375 }, + west_position = { 0.078125, 0.5234375 }, + south_position = { 0.078125, 0.5234375 }, + east_position = { 0.078125, 0.5234375 }, + animation = { + filename = "__bobplates__/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png", + width = 23, + height = 27, + frame_count = 12, + }, + }, + }, + fast_replaceable_group = "furnace", + next_upgrade = "steel-mixing-furnace", + }, + + { + type = "assembling-machine", + name = "steel-mixing-furnace", + icon = "__base__/graphics/icons/steel-furnace.png", + icon_size = 64, + icon_mipmaps = 4, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "steel-mixing-furnace" }, + max_health = 300, + corpse = "medium-remnants", + working_sound = { + sound = { filename = "__base__/sound/furnace.ogg" }, + }, + resistances = { + { + type = "fire", + percent = 100, + }, + }, + collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, + selection_box = { { -0.8, -1 }, { 0.8, 1 } }, + crafting_categories = { "smelting", "mixing-furnace" }, + energy_usage = "90kW", + crafting_speed = 2, + energy_source = { + type = "burner", + fuel_category = "chemical", + effectivity = 1, + fuel_inventory_size = 1, + emissions_per_minute = 4, + smoke = { + { + name = "smoke", + frequency = 10, + position = { 0.7, -1.2 }, + starting_vertical_speed = 0.08, + starting_frame_deviation = 60, + }, + }, + }, + animation = util.table.deepcopy(data.raw.furnace["steel-furnace"].animation), + working_visualisations = util.table.deepcopy(data.raw.furnace["steel-furnace"].working_visualisations), + fast_replaceable_group = "furnace", + }, + + { + type = "assembling-machine", + name = "electric-mixing-furnace", + icon = "__bobplates__/graphics/icons/electric-mixing-furnace.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 1, result = "electric-mixing-furnace" }, + max_health = 350, + corpse = "big-remnants", + resistances = { + { + type = "fire", + percent = 80, + }, + }, + collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + + module_specification = { + module_slots = 2, + module_info_icon_shift = { 0, 0.5 }, + module_info_multi_row_initial_height_modifier = -0.3, + }, + crafting_speed = 2, + crafting_categories = { "smelting", "mixing-furnace" }, + energy_usage = "180kW", + + energy_source = { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 1, + }, + working_sound = { + sound = { + filename = "__base__/sound/electric-furnace.ogg", + volume = 0.7, + }, + apparent_volume = 1.5, + }, + + animation = { + layers = { + { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-mixing-furnace.png", + priority = "high", + width = 129, + height = 100, + frame_count = 1, + shift = { 0.46875, 0 }, + }, + { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-mask.png", + tint = { r = 0.2, g = 0.6, b = 0.8 }, + priority = "high", + width = 69, + height = 68, + frame_count = 1, + shift = util.by_pixel(7.5, 12), + }, + }, + }, + working_visualisations = { + { + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-heater.png", + priority = "high", + width = 25, + height = 15, + frame_count = 12, + animation_speed = 0.5, + shift = { 0.015625, 0.890625 }, + hr_version = { + filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-heater.png", + priority = "high", + width = 60, + height = 56, + frame_count = 12, + animation_speed = 0.5, + shift = util.by_pixel(1.75, 32.75), + scale = 0.5, + }, + }, + light = { intensity = 0.4, size = 6, shift = { 0.0, 1.0 }, color = { r = 1.0, g = 1.0, b = 1.0 } }, + }, + { + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-1.png", + priority = "high", + width = 19, + height = 13, + frame_count = 4, + animation_speed = 0.5, + shift = { -0.671875, -0.640625 }, + hr_version = { + filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png", + priority = "high", + width = 37, + height = 25, + frame_count = 4, + animation_speed = 0.5, + shift = util.by_pixel(-20.5, -18.5), + scale = 0.5, + }, + }, + }, + { + animation = { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-2.png", + priority = "high", + width = 12, + height = 9, + frame_count = 4, + animation_speed = 0.5, + shift = { 0.0625, -1.234375 }, + hr_version = { + filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png", + priority = "high", + width = 23, + height = 15, + frame_count = 4, + animation_speed = 0.5, + shift = util.by_pixel(3.5, -38), + scale = 0.5, + }, + }, + }, + }, + fast_replaceable_group = "furnace", + allowed_effects = { "consumption", "speed", "productivity", "pollution" }, + }, +}) + +table.insert(data.raw.furnace["electric-furnace"].animation.layers, 2, { + filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-mask.png", + tint = { r = 0.8, g = 0.8, b = 0.2 }, + priority = "high", + width = 69, + height = 68, + frame_count = 1, + shift = util.by_pixel(7.5, 12), +}) + +circuit_connector_definitions["bob-small-storage-tank"] = + circuit_connector_definitions.create(universal_connector_template, { + { + variation = 27, + main_offset = util.by_pixel(10, -18), + shadow_offset = util.by_pixel(6, -16), + show_shadow = false, + }, + { + variation = 25, + main_offset = util.by_pixel(-10, -18), + shadow_offset = util.by_pixel(-6, -16), + show_shadow = false, + }, + { + variation = 27, + main_offset = util.by_pixel(10, -18), + shadow_offset = util.by_pixel(6, -16), + show_shadow = false, + }, + { + variation = 25, + main_offset = util.by_pixel(-10, -18), + shadow_offset = util.by_pixel(-6, -16), + show_shadow = false, + }, + }) + +data:extend({ + { + type = "storage-tank", + name = "bob-small-inline-storage-tank", + icon = "__bobplates__/graphics/icons/small-storage-tank.png", + icon_size = 32, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "bob-small-inline-storage-tank" }, + max_health = 200, + corpse = "small-remnants", + collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } }, + selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + fluid_box = { + base_area = 25, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = { + { position = { 0, -1 } }, + { position = { 0, 1 } }, + }, + secondary_draw_orders = { north = -1, east = -1, south = 1, west = -1 }, + }, + two_direction_only = true, + fast_replaceable_group = "pipe", + window_bounding_box = { util.by_pixel(-3, -5), util.by_pixel(3, 11) }, + pictures = { + picture = { + sheets = { + { + filename = "__bobplates__/graphics/entity/small-storage-tank-w.png", + priority = "extra-high", + frames = 2, + width = 32, + height = 62, + shift = util.by_pixel(0, -15), + }, + { + filename = "__bobplates__/graphics/entity/small-storage-tank-shadow.png", + priority = "extra-high", + frames = 1, + width = 52, + height = 32, + shift = util.by_pixel(30, 0), + draw_as_shadow = true, + }, + }, + }, + fluid_background = { + filename = "__base__/graphics/entity/storage-tank/fluid-background.png", + priority = "extra-high", + width = 32, + height = 15, + }, + window_background = { + filename = "__base__/graphics/entity/storage-tank/window-background.png", + priority = "extra-high", + width = 17, + height = 24, + hr_version = { + filename = "__base__/graphics/entity/storage-tank/hr-window-background.png", + priority = "extra-high", + width = 34, + height = 48, + scale = 0.5, + }, + }, + flow_sprite = { + filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", + priority = "extra-high", + width = 160, + height = 20, + }, + gas_flow = { + filename = "__base__/graphics/entity/pipe/steam.png", + priority = "extra-high", + line_length = 10, + width = 24, + height = 15, + frame_count = 60, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + hr_version = { + filename = "__base__/graphics/entity/pipe/hr-steam.png", + priority = "extra-high", + line_length = 10, + width = 48, + height = 30, + frame_count = 60, + axially_symmetrical = false, + animation_speed = 0.25, + direction_count = 1, + scale = 0.5, + }, + }, + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8, + }, + match_volume_to_activity = true, + apparent_volume = 1.5, + max_sounds_per_type = 3, + }, + circuit_wire_connection_points = circuit_connector_definitions["bob-small-storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["bob-small-storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + + { + type = "storage-tank", + name = "bob-small-storage-tank", + icon = "__bobplates__/graphics/icons/small-storage-tank.png", + icon_size = 32, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "bob-small-storage-tank" }, + max_health = 200, + corpse = "small-remnants", + collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } }, + selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + fluid_box = { + base_area = 25, + pipe_picture = assembler3pipepictures(), + pipe_covers = pipecoverspictures(), + pipe_connections = { + { position = { 0, -1 } }, + { position = { 0, 1 } }, + { position = { -1, 0 } }, + { position = { 1, 0 } }, + }, + }, + fast_replaceable_group = "pipe", + window_bounding_box = { util.by_pixel(-3, -5), util.by_pixel(3, 11) }, + pictures = { + picture = { + sheets = { + { + filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", + priority = "extra-high", + frames = 1, + width = 32, + height = 62, + shift = util.by_pixel(0, -15), + }, + { + filename = "__bobplates__/graphics/entity/small-storage-tank-shadow.png", + priority = "extra-high", + frames = 1, + width = 52, + height = 32, + shift = util.by_pixel(30, 0), + draw_as_shadow = true, + }, + }, + }, + fluid_background = { + filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", + priority = "extra-high", + width = 1, + height = 1, + }, + window_background = { + filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", + priority = "extra-high", + width = 1, + height = 1, + }, + flow_sprite = { + filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", + priority = "extra-high", + width = 1, + height = 1, + }, + gas_flow = { + filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", + priority = "extra-high", + line_length = 1, + width = 1, + height = 1, + frame_count = 1, + axially_symmetrical = false, + direction_count = 1, + animation_speed = 0.25, + }, + }, + flow_length_in_ticks = 360, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + working_sound = { + sound = { + filename = "__base__/sound/storage-tank.ogg", + volume = 0.8, + }, + match_volume_to_activity = true, + apparent_volume = 1.5, + max_sounds_per_type = 3, + }, + circuit_wire_connection_points = circuit_connector_definitions["bob-small-storage-tank"].points, + circuit_connector_sprites = circuit_connector_definitions["bob-small-storage-tank"].sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + }, + + { + type = "furnace", + name = "void-pump", + icon = "__bobplates__/graphics/icons/void-pump.png", + icon_size = 32, + flags = { "placeable-neutral", "placeable-player", "player-creation" }, + minable = { mining_time = 1, result = "void-pump" }, + allowed_effects = { "consumption", "speed", "pollution" }, + max_health = 100, + fast_replaceable_group = "pipe", + corpse = "small-remnants", + resistances = { + { + type = "fire", + percent = 80, + }, + { + type = "explosion", + percent = 30, + }, + }, + fluid_boxes = { + { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_area = 1, + base_level = -1, + pipe_connections = { { type = "input", position = { 0, 1 } } }, + }, + }, + energy_source = { + type = "electric", + usage_priority = "secondary-input", + emissions_per_minute = 0.15, + }, + energy_usage = "30kW", + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, + open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, + collision_box = { { -0.29, -0.29 }, { 0.29, 0.29 } }, + selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, + crafting_categories = { "void-fluid" }, + crafting_speed = 5, + result_inventory_size = 0, + source_inventory_size = 0, + animation = { + north = { + filename = "__bobplates__/graphics/entity/small-pump/small-pump-up.png", + width = 46, + height = 52, + frame_count = 8, + shift = { 0.09375, 0.03125 + 0.0625 }, + animation_speed = 0.5, + }, + east = { + filename = "__bobplates__/graphics/entity/small-pump/small-pump-right.png", + width = 51, + height = 56, + frame_count = 8, + shift = { 0.265625, -0.21875 }, + animation_speed = 0.5, + }, + south = { + filename = "__bobplates__/graphics/entity/small-pump/small-pump-down.png", + width = 61, + height = 58, + frame_count = 8, + shift = { 0.421875, -0.125 }, + animation_speed = 0.5, + }, + west = { + filename = "__bobplates__/graphics/entity/small-pump/small-pump-left.png", + width = 56, + height = 44, + frame_count = 8, + shift = { 0.3125, 0.0625 }, + animation_speed = 0.5, + }, + }, + }, +}) diff --git a/bobplates_1.1.6/prototypes/entity/nuclear.lua b/bobplates/prototypes/entity/nuclear.lua similarity index 100% rename from bobplates_1.1.6/prototypes/entity/nuclear.lua rename to bobplates/prototypes/entity/nuclear.lua diff --git a/bobplates_1.1.6/prototypes/entity/pumps.lua b/bobplates/prototypes/entity/pumps.lua similarity index 100% rename from bobplates_1.1.6/prototypes/entity/pumps.lua rename to bobplates/prototypes/entity/pumps.lua diff --git a/bobplates_1.1.6/prototypes/item/alien.lua b/bobplates/prototypes/item/alien.lua similarity index 90% rename from bobplates_1.1.6/prototypes/item/alien.lua rename to bobplates/prototypes/item/alien.lua index eeca0560..19caccfb 100644 --- a/bobplates_1.1.6/prototypes/item/alien.lua +++ b/bobplates/prototypes/item/alien.lua @@ -39,8 +39,6 @@ then heat_capacity = "1KJ", base_color = { r = 0.4, g = 0.0, b = 0.8 }, flow_color = { r = 0.6, g = 0.5, b = 1.0 }, - pressure_to_speed_ratio = 0.2, - flow_to_energy_ratio = 0.3, }, { @@ -55,8 +53,6 @@ then heat_capacity = "1KJ", base_color = { r = 0.8, g = 0.8, b = 0.0 }, flow_color = { r = 1.0, g = 1.0, b = 0.5 }, - pressure_to_speed_ratio = 0.2, - flow_to_energy_ratio = 0.3, }, { @@ -71,8 +67,6 @@ then base_color = { r = 0.0, g = 0.8, b = 0.0 }, flow_color = { r = 0.5, g = 1.0, b = 0.5 }, max_temperature = 100, - pressure_to_speed_ratio = 0.2, - flow_to_energy_ratio = 0.3, }, { @@ -87,8 +81,6 @@ then base_color = { r = 0.8, g = 0, b = 0 }, flow_color = { r = 1.0, g = 0.5, b = 0.5 }, max_temperature = 100, - pressure_to_speed_ratio = 0.2, - flow_to_energy_ratio = 0.3, fuel_value = "2.6MJ", }, }) diff --git a/bobplates_1.1.6/prototypes/item/alloys.lua b/bobplates/prototypes/item/alloys.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/alloys.lua rename to bobplates/prototypes/item/alloys.lua diff --git a/bobplates_1.1.6/prototypes/item/chemicals.lua b/bobplates/prototypes/item/chemicals.lua similarity index 94% rename from bobplates_1.1.6/prototypes/item/chemicals.lua rename to bobplates/prototypes/item/chemicals.lua index 4b176a30..4b0f2cc7 100644 --- a/bobplates_1.1.6/prototypes/item/chemicals.lua +++ b/bobplates/prototypes/item/chemicals.lua @@ -85,8 +85,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/nitrogen.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[nitrogen]", gas_temperature = -210, }, @@ -101,8 +99,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/chlorine.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[chlorine]", gas_temperature = -102, }, @@ -117,8 +113,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/hydrogen-chloride.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[hydrogen-chloride]", gas_temperature = -115, }, @@ -133,8 +127,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/nitrogen-dioxide.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[nitrogen-dioxide]", gas_temperature = -12, }, @@ -149,8 +141,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/sulfur-dioxide.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[sulfur-dioxide]", gas_temperature = -72, }, @@ -165,8 +155,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/nitric-acid.png", icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[nitric-acid]", }, @@ -180,8 +168,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/tungstic-acid.png", icon_size = 32, - pressure_to_speed_ratio = 0.2, - flow_to_energy_ratio = 0.3, order = "a[fluid]-g[tungstic-acid]", }, @@ -195,8 +181,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/ferric-chloride-solution.png", icon_size = 32, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[ferric-chloride-solution]", }, @@ -210,8 +194,6 @@ data:extend({ max_temperature = 100, icon = "__bobplates__/graphics/icons/liquid-fuel.png", icon_size = 32, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, order = "a[fluid]-g[liquid-fuel]", emissions_multiplier = 0.8, fuel_value = "2.3MJ", --"4MJ" diff --git a/bobplates_1.1.6/prototypes/item/electronics.lua b/bobplates/prototypes/item/electronics.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/electronics.lua rename to bobplates/prototypes/item/electronics.lua diff --git a/bobplates_1.1.6/prototypes/item/entities.lua b/bobplates/prototypes/item/entities.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/entities.lua rename to bobplates/prototypes/item/entities.lua diff --git a/bobplates_1.1.6/prototypes/item/gems.lua b/bobplates/prototypes/item/gems.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/gems.lua rename to bobplates/prototypes/item/gems.lua diff --git a/bobplates_1.1.6/prototypes/item/nuclear.lua b/bobplates/prototypes/item/nuclear.lua similarity index 92% rename from bobplates_1.1.6/prototypes/item/nuclear.lua rename to bobplates/prototypes/item/nuclear.lua index c7a293f1..0e273dee 100644 --- a/bobplates_1.1.6/prototypes/item/nuclear.lua +++ b/bobplates/prototypes/item/nuclear.lua @@ -23,8 +23,6 @@ if settings.startup["bobmods-plates-nuclearupdate"].value == true then fuel_category = "nuclear", burnt_result = "used-up-uranium-fuel-cell", fuel_value = "40GJ", - fuel_acceleration_multiplier = 1.6, - fuel_top_speed_multiplier = 1.3, fuel_glow_color = { r = 0.7, g = 1, b = 0 }, stack_size = 50, }, @@ -64,8 +62,6 @@ if data.raw.item["thorium-ore"] then burnt_result = "used-up-thorium-fuel-cell", fuel_value = "6GJ", fuel_glow_color = { r = 1, g = 1, b = 0 }, - fuel_acceleration_multiplier = 1.1, - fuel_top_speed_multiplier = 1.05, stack_size = 50, }, { @@ -79,8 +75,6 @@ if data.raw.item["thorium-ore"] then fuel_category = "nuclear", burnt_result = "used-up-thorium-fuel-cell", fuel_value = "40GJ", - fuel_acceleration_multiplier = 1.8, - fuel_top_speed_multiplier = 1.4, fuel_glow_color = { r = 1, g = 0.7, b = 0 }, stack_size = 50, }, @@ -114,8 +108,6 @@ data:extend({ fuel_category = "nuclear", burnt_result = "used-up-deuterium-fuel-cell", fuel_value = "100GJ", - fuel_acceleration_multiplier = 1.2, - fuel_top_speed_multiplier = 1.1, fuel_glow_color = { r = 1, g = 0, b = 0.57 }, stack_size = 50, }, @@ -145,8 +137,6 @@ if settings.startup["bobmods-plates-nuclearupdate"].value == true then fuel_category = "nuclear", burnt_result = "used-up-deuterium-fuel-cell", fuel_value = "120GJ", - fuel_acceleration_multiplier = 2, - fuel_top_speed_multiplier = 1.5, fuel_glow_color = { r = 1, g = 0, b = 0.9 }, stack_size = 50, }, diff --git a/bobplates_1.1.6/prototypes/item/ores.lua b/bobplates/prototypes/item/ores.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/ores.lua rename to bobplates/prototypes/item/ores.lua diff --git a/bobplates_1.1.6/prototypes/item/parts.lua b/bobplates/prototypes/item/parts.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/parts.lua rename to bobplates/prototypes/item/parts.lua diff --git a/bobplates_1.1.6/prototypes/item/plates.lua b/bobplates/prototypes/item/plates.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/plates.lua rename to bobplates/prototypes/item/plates.lua diff --git a/bobplates_1.1.6/prototypes/item/resource.lua b/bobplates/prototypes/item/resource.lua similarity index 100% rename from bobplates_1.1.6/prototypes/item/resource.lua rename to bobplates/prototypes/item/resource.lua diff --git a/bobplates_1.1.6/prototypes/productivity-limitations.lua b/bobplates/prototypes/productivity-limitations.lua similarity index 100% rename from bobplates_1.1.6/prototypes/productivity-limitations.lua rename to bobplates/prototypes/productivity-limitations.lua diff --git a/bobplates_1.1.6/prototypes/recipe/alien-recipe.lua b/bobplates/prototypes/recipe/alien-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/alien-recipe.lua rename to bobplates/prototypes/recipe/alien-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/alloy-recipe.lua b/bobplates/prototypes/recipe/alloy-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/alloy-recipe.lua rename to bobplates/prototypes/recipe/alloy-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/chemistry-recipe.lua b/bobplates/prototypes/recipe/chemistry-recipe.lua similarity index 99% rename from bobplates_1.1.6/prototypes/recipe/chemistry-recipe.lua rename to bobplates/prototypes/recipe/chemistry-recipe.lua index aa1a91db..0336cc97 100644 --- a/bobplates_1.1.6/prototypes/recipe/chemistry-recipe.lua +++ b/bobplates/prototypes/recipe/chemistry-recipe.lua @@ -586,7 +586,7 @@ data:extend({ { type = "fluid", name = "sulfur-dioxide", amount = 10 }, }, main_product = "lead-oxide", - { + crafting_machine_tint = { primary = { r = 0.1, g = 0.1, b = 0.1, a = 0.000 }, secondary = { r = 0.7, g = 0.0, b = 0.0, a = 0.000 }, tertiary = { r = 0.1, g = 0.01, b = 0.1, a = 0.000 }, @@ -606,7 +606,7 @@ data:extend({ { type = "fluid", name = "nitrogen-dioxide", amount = 10 }, }, result = "silver-nitrate", - { + crafting_machine_tint = { primary = { r = 0.0, g = 0.0, b = 1.0, a = 0.000 }, secondary = { r = 0.7, g = 0.7, b = 0.7, a = 0.000 }, tertiary = { r = 0.3, g = 0.03, b = 0.3, a = 0.000 }, @@ -626,7 +626,7 @@ data:extend({ { "sodium-hydroxide", 1 }, }, result = "silver-oxide", - { + crafting_machine_tint = { primary = { r = 0.3, g = 0.3, b = 0.3, a = 0.000 }, secondary = { r = 0.7, g = 0.7, b = 0.7, a = 0.000 }, tertiary = { r = 0.3, g = 0.03, b = 0.3, a = 0.000 }, @@ -757,7 +757,7 @@ data:extend({ { type = "fluid", name = "hydrogen-sulfide", amount = 10 }, }, main_product = "lead-oxide", - { + crafting_machine_tint = { primary = { r = 0.1, g = 0.1, b = 0.1, a = 0.000 }, secondary = { r = 0, g = 0.3, b = 0.7, a = 0.000 }, tertiary = { r = 0.5, g = 0.5, b = 0, a = 0.000 }, @@ -782,7 +782,7 @@ data:extend({ results = { { type = "fluid", name = "hydrogen-sulfide", amount = 50 }, }, - { + crafting_machine_tint = { primary = { r = 0.7, g = 0.7, b = 0.0, a = 0.000 }, secondary = { r = 1.0, g = 1.0, b = 1.0, a = 0.000 }, tertiary = { r = 0.9, g = 0.9, b = 0.45, a = 0.000 }, diff --git a/bobplates_1.1.6/prototypes/recipe/electronics-recipe.lua b/bobplates/prototypes/recipe/electronics-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/electronics-recipe.lua rename to bobplates/prototypes/recipe/electronics-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/entity-recipe-updates.lua b/bobplates/prototypes/recipe/entity-recipe-updates.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/entity-recipe-updates.lua rename to bobplates/prototypes/recipe/entity-recipe-updates.lua diff --git a/bobplates_1.1.6/prototypes/recipe/entity-recipe.lua b/bobplates/prototypes/recipe/entity-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/entity-recipe.lua rename to bobplates/prototypes/recipe/entity-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/gems-recipe.lua b/bobplates/prototypes/recipe/gems-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/gems-recipe.lua rename to bobplates/prototypes/recipe/gems-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/nuclear-recipe.lua b/bobplates/prototypes/recipe/nuclear-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/nuclear-recipe.lua rename to bobplates/prototypes/recipe/nuclear-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/parts-recipe.lua b/bobplates/prototypes/recipe/parts-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/parts-recipe.lua rename to bobplates/prototypes/recipe/parts-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/plates-recipe.lua b/bobplates/prototypes/recipe/plates-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/plates-recipe.lua rename to bobplates/prototypes/recipe/plates-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/resource-recipe.lua b/bobplates/prototypes/recipe/resource-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/resource-recipe.lua rename to bobplates/prototypes/recipe/resource-recipe.lua diff --git a/bobplates_1.1.6/prototypes/recipe/void-recipe.lua b/bobplates/prototypes/recipe/void-recipe.lua similarity index 100% rename from bobplates_1.1.6/prototypes/recipe/void-recipe.lua rename to bobplates/prototypes/recipe/void-recipe.lua diff --git a/bobplates_1.1.6/prototypes/technology-alien.lua b/bobplates/prototypes/technology-alien.lua similarity index 100% rename from bobplates_1.1.6/prototypes/technology-alien.lua rename to bobplates/prototypes/technology-alien.lua diff --git a/bobplates_1.1.6/prototypes/technology-metal.lua b/bobplates/prototypes/technology-metal.lua similarity index 100% rename from bobplates_1.1.6/prototypes/technology-metal.lua rename to bobplates/prototypes/technology-metal.lua diff --git a/bobplates_1.1.6/prototypes/technology-nuclear.lua b/bobplates/prototypes/technology-nuclear.lua similarity index 100% rename from bobplates_1.1.6/prototypes/technology-nuclear.lua rename to bobplates/prototypes/technology-nuclear.lua diff --git a/bobplates_1.1.6/prototypes/technology-updates.lua b/bobplates/prototypes/technology-updates.lua similarity index 100% rename from bobplates_1.1.6/prototypes/technology-updates.lua rename to bobplates/prototypes/technology-updates.lua diff --git a/bobplates_1.1.6/prototypes/technology.lua b/bobplates/prototypes/technology.lua similarity index 100% rename from bobplates_1.1.6/prototypes/technology.lua rename to bobplates/prototypes/technology.lua diff --git a/bobplates_1.1.6/settings-updates.lua b/bobplates/settings-updates.lua similarity index 100% rename from bobplates_1.1.6/settings-updates.lua rename to bobplates/settings-updates.lua diff --git a/bobplates/settings.lua b/bobplates/settings.lua new file mode 100644 index 00000000..95cdcf6a --- /dev/null +++ b/bobplates/settings.lua @@ -0,0 +1,77 @@ +data:extend({ + { + type = "bool-setting", + name = "bobmods-plates-cheapersteel", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "bobmods-plates-batteryupdate", + setting_type = "startup", + default_value = true, + }, + + { + type = "int-setting", + name = "bobmods-plates-inventorysize", + setting_type = "startup", + default_value = 80, + maximum_value = 250, + minimum_value = 10, + }, + + { + type = "bool-setting", + name = "bobmods-plates-purewater", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "bobmods-plates-groundwater", + setting_type = "startup", + default_value = false, + }, + + { + type = "bool-setting", + name = "bobmods-plates-vanillabarrelling", + setting_type = "startup", + default_value = false, + }, + + { + type = "bool-setting", + name = "bobmods-colorupdate", + setting_type = "startup", + default_value = true, + }, + { + type = "bool-setting", + name = "bobmods-plates-bluedeuterium", + setting_type = "startup", + default_value = false, + }, + { + type = "bool-setting", + name = "bobmods-plates-nuclearupdate", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "bobmods-plates-convert-recipes", + setting_type = "startup", + default_value = true, + }, + { + type = "bool-setting", + name = "bobmods-plates-expensive-electrolysis", + setting_type = "startup", + default_value = false, + }, +}) diff --git a/bobplates_1.1.6/thumbnail.png b/bobplates/thumbnail.png similarity index 100% rename from bobplates_1.1.6/thumbnail.png rename to bobplates/thumbnail.png diff --git a/bobplates_1.1.6/info.json b/bobplates_1.1.6/info.json deleted file mode 100644 index 99dbbfc2..00000000 --- a/bobplates_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "bobplates", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Metals, Chemicals and Intermediates mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "bobores >= 1.1.6", - "? bobenemies >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\nDesigned to make use of resources provided by Bob's Ores mod to function as intended\nOther mods may provide an alternate method to obtain the required resources.\n\nThis mod is designed as a base to be used with the full Bob's Mods set.\n\nThis mod adds new production processes including:\n Electrolysis: Seperation of a liquid using electricity.\n Chemical furnace: Heat and a Fluid.\n Mixing furnace: Heat with more than 1 ingredient.\n Liquid pump: Mostly used for Barrelling.\n Gas pump: Used for Bottling, a Barrelling alternative, but also produces the resource Compressed air.\n Gas vent: Disposes of unwanted gasses into the void.\n\nThis mod adds a method to produce a metals from resource of the following:\nAluminium, Cobalt, Gold, Lead, Nickel, Glass, Silicon, Titanium, Silver, Tin, Tungsten, Lithium and Zinc.\nAlloys of the following:\nBronze, Brass, Gunmetal, Copper-tungsten, Tungsten carbide, Invar, Nitinol and Cobalt-steel.\nAlso adds a wide array of other materials including Ceramics, Gem processing, and a large array of Liquid and Gas chemicals.\nThis mod also provides intermediate products including Gear wheels and bearings of multiple materials, Advanced processing units, and 2 tiers of batteries." -} diff --git a/bobplates_1.1.6/prototypes/entity/entities.lua b/bobplates_1.1.6/prototypes/entity/entities.lua deleted file mode 100644 index cd6972a7..00000000 --- a/bobplates_1.1.6/prototypes/entity/entities.lua +++ /dev/null @@ -1,1017 +0,0 @@ -local function bob_electrolyser_animation_facing(directory, tier, tint, facing) - return - { - layers = { - -- Base - { - filename = directory .. "/electrolyser-" .. tier .. "-base.png", - x = 136 * facing, - width = 136, - height = 130, - frame_count = 1, - shift = util.by_pixel(17, 0), - hr_version = { - filename = directory .. "/hr-electrolyser-" .. tier .. "-base.png", - x = 272 * facing, - width = 272, - height = 260, - frame_count = 1, - shift = util.by_pixel(17, 0), - scale = 0.5, - }, - }, - -- Mask - { - filename = directory .. "/electrolyser-" .. tier .. "-mask.png", - x = 136 * facing, - width = 136, - height = 130, - frame_count = 1, - shift = util.by_pixel(17, 0), - tint = tint, - hr_version = { - filename = directory .. "/hr-electrolyser-" .. tier .. "-mask.png", - x = 272 * facing, - width = 272, - height = 260, - frame_count = 1, - shift = util.by_pixel(17, 0), - tint = tint, - scale = 0.5, - }, - }, - -- Highlights - { - filename = directory .. "/electrolyser-" .. tier .. "-highlights.png", - x = 136 * facing, - width = 136, - height = 130, - frame_count = 1, - shift = util.by_pixel(17, 0), - blend_mode = "additive", - hr_version = { - filename = directory .. "/hr-electrolyser-" .. tier .. "-highlights.png", - x = 272 * facing, - width = 272, - height = 260, - frame_count = 1, - shift = util.by_pixel(17, 0), - blend_mode = "additive", - scale = 0.5, - }, - }, - -- Shadow - { - filename = directory .. "/electrolyser-" .. tier .. "-shadow.png", - x = 136 * facing, - width = 136, - height = 130, - frame_count = 1, - shift = util.by_pixel(17, 0), - draw_as_shadow = true, - hr_version = { - filename = directory .. "/hr-electrolyser-" .. tier .. "-shadow.png", - x = 272 * facing, - width = 272, - height = 260, - frame_count = 1, - draw_as_shadow = true, - shift = util.by_pixel(17, 0), - scale = 0.5, - }, - }, - }, - } -end - -local function bob_electrolyser_animation(directory, tier, tint) - return { - north = bob_electrolyser_animation_facing(directory, tier, tint, 0), - east = bob_electrolyser_animation_facing(directory, tier, tint, 1), - south = bob_electrolyser_animation_facing(directory, tier, tint, 2), - west = bob_electrolyser_animation_facing(directory, tier, tint, 3), - } -end - -data:extend({ - { - type = "assembling-machine", - name = "electrolyser", - icon = "__bobplates__/graphics/icons/electrolyser.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.5, result = "electrolyser" }, - fast_replaceable_group = "electrolyser", - corpse = "big-remnants", - collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, - selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, - max_health = 150, - crafting_categories = { "electrolysis" }, - allowed_effects = { "consumption", "speed", "productivity", "pollution" }, - module_specification = { - module_slots = 1, - }, - crafting_speed = 0.75, - energy_usage = "420kW", - energy_source = { - type = "electric", - usage_priority = "secondary-input", - emissions_per_minute = 4, - }, - fluid_boxes = { - { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, - pipe_connections = { { type = "input", position = { -1, -2 } } }, - }, - { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, - pipe_connections = { { type = "input", position = { 1, -2 } } }, - }, - { - production_type = "output", - pipe_covers = pipecoverspictures(), - base_level = 1, - pipe_connections = { { type = "output", position = { -1, 2 } } }, - }, - { - production_type = "output", - pipe_covers = pipecoverspictures(), - base_level = 1, - pipe_connections = { { type = "output", position = { 1, 2 } } }, - }, - }, - animation = bob_electrolyser_animation( - "__bobplates__/graphics/entity/electrolyser", - 1, - { r = 0.5, g = 0.5, b = 0 } - ), - working_sound = data.raw["assembling-machine"]["chemical-plant"].working_sound, - }, - - { - type = "assembling-machine", - name = "stone-chemical-furnace", - icon = "__bobplates__/graphics/icons/stone-chemical-furnace.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "stone-chemical-furnace" }, - max_health = 200, - crafting_speed = 1, - corpse = "medium-remnants", - repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, - mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, - working_sound = { - sound = { filename = "__base__/sound/furnace.ogg" }, - }, - resistances = { - { - type = "fire", - percent = 80, - }, - { - type = "explosion", - percent = 30, - }, - }, - fluid_boxes = { - { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, - pipe_connections = { { type = "input", position = { 0.5, -1.5 } } }, - }, - }, - collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, - selection_box = { { -1, -1 }, { 1, 1 } }, - crafting_categories = { "chemical-furnace" }, - energy_usage = "90kW", - energy_source = { - type = "burner", - fuel_category = "chemical", - effectivity = 1, - fuel_inventory_size = 1, - emissions_per_minute = 2, - smoke = { - { - name = "smoke", - deviation = { 0.1, 0.1 }, - frequency = 5, - north_position = { 0.0, -0.8 }, - east_position = { 0.0, -0.8 }, - south_position = { 0.0, -0.8 }, - west_position = { 0.0, -0.8 }, - starting_vertical_speed = 0.08, - starting_frame_deviation = 60, - }, - }, - }, - animation = { - north = { - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", - priority = "extra-high", - width = 94, - height = 80, - frame_count = 1, - shift = { 0.25, 0 }, - }, - west = { - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", - x = 94, - priority = "extra-high", - width = 94, - height = 80, - frame_count = 1, - shift = { 0.25, 0 }, - }, - south = { - x = 188, - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", - priority = "extra-high", - width = 94, - height = 80, - frame_count = 1, - shift = { 0.25, 0 }, - }, - east = { - x = 282, - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/stone-chemical-furnace.png", - priority = "extra-high", - width = 94, - height = 80, - frame_count = 1, - shift = { 0.25, 0 }, - }, - }, - working_visualisations = { - { - north_position = { 0.96875, -0.53125 }, - west_position = { 0, 0 }, - south_position = { -0.9375, 0.40625 }, - east_position = { 0.53125, 0.78125 }, - east_animation = { - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-down.png", - width = 9, - height = 8, - frame_count = 14, - }, - south_animation = { - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-left.png", - width = 5, - height = 7, - frame_count = 14, - }, - north_animation = { - filename = "__bobplates__/graphics/entity/stone-chemical-furnace/boiler-fire-right.png", - width = 6, - height = 9, - frame_count = 14, - }, - }, - }, - fast_replaceable_group = "furnace", - next_upgrade = "steel-chemical-furnace", - }, - - { - type = "assembling-machine", - name = "steel-chemical-furnace", - icon = "__base__/graphics/icons/steel-furnace.png", - icon_size = 64, - icon_mipmaps = 4, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "steel-chemical-furnace" }, - max_health = 300, - crafting_speed = 2, - corpse = "medium-remnants", - repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, - mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, - working_sound = { - sound = { filename = "__base__/sound/furnace.ogg" }, - }, - resistances = { - { - type = "fire", - percent = 80, - }, - { - type = "explosion", - percent = 30, - }, - }, - fluid_boxes = { - { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, - pipe_connections = { { type = "input", position = { 0.5, -1.5 } } }, - }, - }, - collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, - selection_box = { { -1, -1 }, { 1, 1 } }, - crafting_categories = { "chemical-furnace" }, - energy_usage = "90kW", - energy_source = { - type = "burner", - fuel_category = "chemical", - effectivity = 1, - fuel_inventory_size = 1, - emissions_per_minute = 4, - smoke = { - { - name = "smoke", - frequency = 10, - north_position = { 0.7, -1.2 }, - east_position = { 0.7, -1.2 }, - south_position = { 0.7, -1.2 }, - west_position = { 0.7, -1.2 }, - starting_vertical_speed = 0.08, - starting_frame_deviation = 60, - }, - }, - }, - animation = util.table.deepcopy(data.raw.furnace["steel-furnace"].animation), - working_visualisations = util.table.deepcopy(data.raw.furnace["steel-furnace"].working_visualisations), - fast_replaceable_group = "furnace", - }, - - { - type = "assembling-machine", - name = "electric-chemical-furnace", - icon = "__bobplates__/graphics/icons/chemical-furnace.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "electric-chemical-furnace" }, - max_health = 350, - corpse = "big-remnants", - resistances = { - { - type = "fire", - percent = 80, - }, - }, - fluid_boxes = { - { - production_type = "input", - pipe_picture = assembler3pipepictures(), - pipe_covers = pipecoverspictures(), - base_area = 10, - base_level = -1, - pipe_connections = { { type = "input", position = { 0, -2 } } }, - }, - off_when_no_fluid_recipe = true, - }, - collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, - selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, - - module_specification = { - module_slots = 2, - module_info_icon_shift = { 0, 0.5 }, - module_info_multi_row_initial_height_modifier = -0.3, - }, - crafting_speed = 2, - crafting_categories = { "smelting", "chemical-furnace" }, - energy_usage = "180kW", - energy_source = { - type = "electric", - usage_priority = "secondary-input", - emissions_per_minute = 1, - }, - working_sound = { - sound = { - filename = "__base__/sound/electric-furnace.ogg", - volume = 0.7, - }, - apparent_volume = 1.5, - }, - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-chemical-furnace.png", - priority = "high", - width = 129, - height = 100, - frame_count = 1, - shift = { 0.46875, 0 }, - }, - working_visualisations = { - { - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-heater.png", - priority = "high", - width = 25, - height = 15, - frame_count = 12, - animation_speed = 0.5, - shift = { 0.015625, 0.890625 }, - hr_version = { - filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-heater.png", - priority = "high", - width = 60, - height = 56, - frame_count = 12, - animation_speed = 0.5, - shift = util.by_pixel(1.75, 32.75), - scale = 0.5, - }, - }, - light = { intensity = 0.4, size = 6, shift = { 0.0, 1.0 }, color = { r = 1.0, g = 1.0, b = 1.0 } }, - }, - { - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-1.png", - priority = "high", - width = 19, - height = 13, - frame_count = 4, - animation_speed = 0.5, - shift = { -0.671875, -0.640625 }, - hr_version = { - filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png", - priority = "high", - width = 37, - height = 25, - frame_count = 4, - animation_speed = 0.5, - shift = util.by_pixel(-20.5, -18.5), - scale = 0.5, - }, - }, - }, - }, - fast_replaceable_group = "furnace", - allowed_effects = { "consumption", "speed", "productivity", "pollution" }, - }, - - { - type = "assembling-machine", - name = "stone-mixing-furnace", - icon = "__bobplates__/graphics/icons/stone-mixing-furnace.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "stone-mixing-furnace" }, - max_health = 200, - corpse = "medium-remnants", - working_sound = { - sound = { filename = "__base__/sound/furnace.ogg" }, - }, - resistances = { - { - type = "fire", - percent = 100, - }, - }, - collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, - selection_box = { { -0.8, -1 }, { 0.8, 1 } }, - crafting_categories = { "smelting", "mixing-furnace" }, - energy_usage = "90kW", - crafting_speed = 1, - energy_source = { - type = "burner", - fuel_category = "chemical", - effectivity = 1, - fuel_inventory_size = 1, - emissions_per_minute = 2, - smoke = { - { - name = "smoke", - deviation = { 0.1, 0.1 }, - frequency = 5, - position = { 0.0, -0.8 }, - starting_vertical_speed = 0.08, - starting_frame_deviation = 60, - }, - }, - }, - - animation = { - filename = "__bobplates__/graphics/entity/stone-mixing-furnace/stone-mixing-furnace.png", - priority = "extra-high", - width = 81, - height = 64, - frame_count = 1, - shift = { 0.5, 0.05 }, - }, - working_visualisations = { - { - north_position = { 0.078125, 0.5234375 }, - west_position = { 0.078125, 0.5234375 }, - south_position = { 0.078125, 0.5234375 }, - east_position = { 0.078125, 0.5234375 }, - animation = { - filename = "__bobplates__/graphics/entity/stone-mixing-furnace/stone-mixing-furnace-fire.png", - width = 23, - height = 27, - frame_count = 12, - }, - }, - }, - fast_replaceable_group = "furnace", - next_upgrade = "steel-mixing-furnace", - }, - - { - type = "assembling-machine", - name = "steel-mixing-furnace", - icon = "__base__/graphics/icons/steel-furnace.png", - icon_size = 64, - icon_mipmaps = 4, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "steel-mixing-furnace" }, - max_health = 300, - corpse = "medium-remnants", - working_sound = { - sound = { filename = "__base__/sound/furnace.ogg" }, - }, - resistances = { - { - type = "fire", - percent = 100, - }, - }, - collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, - selection_box = { { -0.8, -1 }, { 0.8, 1 } }, - crafting_categories = { "smelting", "mixing-furnace" }, - energy_usage = "90kW", - crafting_speed = 2, - energy_source = { - type = "burner", - fuel_category = "chemical", - effectivity = 1, - fuel_inventory_size = 1, - emissions_per_minute = 4, - smoke = { - { - name = "smoke", - frequency = 10, - position = { 0.7, -1.2 }, - starting_vertical_speed = 0.08, - starting_frame_deviation = 60, - }, - }, - }, - animation = util.table.deepcopy(data.raw.furnace["steel-furnace"].animation), - working_visualisations = util.table.deepcopy(data.raw.furnace["steel-furnace"].working_visualisations), - fast_replaceable_group = "furnace", - }, - - { - type = "assembling-machine", - name = "electric-mixing-furnace", - icon = "__bobplates__/graphics/icons/electric-mixing-furnace.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 1, result = "electric-mixing-furnace" }, - max_health = 350, - corpse = "big-remnants", - resistances = { - { - type = "fire", - percent = 80, - }, - }, - collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, - selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, - - module_specification = { - module_slots = 2, - module_info_icon_shift = { 0, 0.5 }, - module_info_multi_row_initial_height_modifier = -0.3, - }, - crafting_speed = 2, - crafting_categories = { "smelting", "mixing-furnace" }, - energy_usage = "180kW", - - energy_source = { - type = "electric", - usage_priority = "secondary-input", - emissions_per_minute = 1, - }, - working_sound = { - sound = { - filename = "__base__/sound/electric-furnace.ogg", - volume = 0.7, - }, - apparent_volume = 1.5, - }, - - animation = { - layers = { - { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-mixing-furnace.png", - priority = "high", - width = 129, - height = 100, - frame_count = 1, - shift = { 0.46875, 0 }, - }, - { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-mask.png", - tint = { r = 0.2, g = 0.6, b = 0.8 }, - priority = "high", - width = 69, - height = 68, - frame_count = 1, - shift = util.by_pixel(7.5, 12), - }, - }, - }, - working_visualisations = { - { - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-heater.png", - priority = "high", - width = 25, - height = 15, - frame_count = 12, - animation_speed = 0.5, - shift = { 0.015625, 0.890625 }, - hr_version = { - filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-heater.png", - priority = "high", - width = 60, - height = 56, - frame_count = 12, - animation_speed = 0.5, - shift = util.by_pixel(1.75, 32.75), - scale = 0.5, - }, - }, - light = { intensity = 0.4, size = 6, shift = { 0.0, 1.0 }, color = { r = 1.0, g = 1.0, b = 1.0 } }, - }, - { - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-1.png", - priority = "high", - width = 19, - height = 13, - frame_count = 4, - animation_speed = 0.5, - shift = { -0.671875, -0.640625 }, - hr_version = { - filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-1.png", - priority = "high", - width = 37, - height = 25, - frame_count = 4, - animation_speed = 0.5, - shift = util.by_pixel(-20.5, -18.5), - scale = 0.5, - }, - }, - }, - { - animation = { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-propeller-2.png", - priority = "high", - width = 12, - height = 9, - frame_count = 4, - animation_speed = 0.5, - shift = { 0.0625, -1.234375 }, - hr_version = { - filename = "__bobplates__/graphics/entity/electric-furnace/hr-electric-furnace-propeller-2.png", - priority = "high", - width = 23, - height = 15, - frame_count = 4, - animation_speed = 0.5, - shift = util.by_pixel(3.5, -38), - scale = 0.5, - }, - }, - }, - }, - fast_replaceable_group = "furnace", - allowed_effects = { "consumption", "speed", "productivity", "pollution" }, - }, -}) - -table.insert(data.raw.furnace["electric-furnace"].animation.layers, 2, { - filename = "__bobplates__/graphics/entity/electric-furnace/electric-furnace-mask.png", - tint = { r = 0.8, g = 0.8, b = 0.2 }, - priority = "high", - width = 69, - height = 68, - frame_count = 1, - shift = util.by_pixel(7.5, 12), -}) - -circuit_connector_definitions["bob-small-storage-tank"] = - circuit_connector_definitions.create(universal_connector_template, { - { - variation = 27, - main_offset = util.by_pixel(10, -18), - shadow_offset = util.by_pixel(6, -16), - show_shadow = false, - }, - { - variation = 25, - main_offset = util.by_pixel(-10, -18), - shadow_offset = util.by_pixel(-6, -16), - show_shadow = false, - }, - { - variation = 27, - main_offset = util.by_pixel(10, -18), - shadow_offset = util.by_pixel(6, -16), - show_shadow = false, - }, - { - variation = 25, - main_offset = util.by_pixel(-10, -18), - shadow_offset = util.by_pixel(-6, -16), - show_shadow = false, - }, - }) - -data:extend({ - { - type = "storage-tank", - name = "bob-small-inline-storage-tank", - icon = "__bobplates__/graphics/icons/small-storage-tank.png", - icon_size = 32, - flags = { "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "bob-small-inline-storage-tank" }, - max_health = 200, - corpse = "small-remnants", - collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } }, - selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - fluid_box = { - base_area = 25, - pipe_picture = assembler3pipepictures(), - pipe_covers = pipecoverspictures(), - pipe_connections = { - { position = { 0, -1 } }, - { position = { 0, 1 } }, - }, - }, - two_direction_only = true, - fast_replaceable_group = "pipe", - window_bounding_box = { util.by_pixel(-3, -5), util.by_pixel(3, 11) }, - pictures = { - picture = { - sheets = { - { - filename = "__bobplates__/graphics/entity/small-storage-tank-w.png", - priority = "extra-high", - frames = 2, - width = 32, - height = 62, - shift = util.by_pixel(0, -15), - }, - { - filename = "__bobplates__/graphics/entity/small-storage-tank-shadow.png", - priority = "extra-high", - frames = 1, - width = 52, - height = 32, - shift = util.by_pixel(30, 0), - draw_as_shadow = true, - }, - }, - }, - fluid_background = { - filename = "__base__/graphics/entity/storage-tank/fluid-background.png", - priority = "extra-high", - width = 32, - height = 15, - }, - window_background = { - filename = "__base__/graphics/entity/storage-tank/window-background.png", - priority = "extra-high", - width = 17, - height = 24, - hr_version = { - filename = "__base__/graphics/entity/storage-tank/hr-window-background.png", - priority = "extra-high", - width = 34, - height = 48, - scale = 0.5, - }, - }, - flow_sprite = { - filename = "__base__/graphics/entity/pipe/fluid-flow-low-temperature.png", - priority = "extra-high", - width = 160, - height = 20, - }, - gas_flow = { - filename = "__base__/graphics/entity/pipe/steam.png", - priority = "extra-high", - line_length = 10, - width = 24, - height = 15, - frame_count = 60, - axially_symmetrical = false, - direction_count = 1, - animation_speed = 0.25, - hr_version = { - filename = "__base__/graphics/entity/pipe/hr-steam.png", - priority = "extra-high", - line_length = 10, - width = 48, - height = 30, - frame_count = 60, - axially_symmetrical = false, - animation_speed = 0.25, - direction_count = 1, - scale = 0.5, - }, - }, - }, - flow_length_in_ticks = 360, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - working_sound = { - sound = { - filename = "__base__/sound/storage-tank.ogg", - volume = 0.8, - }, - match_volume_to_activity = true, - apparent_volume = 1.5, - max_sounds_per_type = 3, - }, - circuit_wire_connection_points = circuit_connector_definitions["bob-small-storage-tank"].points, - circuit_connector_sprites = circuit_connector_definitions["bob-small-storage-tank"].sprites, - circuit_wire_max_distance = default_circuit_wire_max_distance, - }, - - { - type = "storage-tank", - name = "bob-small-storage-tank", - icon = "__bobplates__/graphics/icons/small-storage-tank.png", - icon_size = 32, - flags = { "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "bob-small-storage-tank" }, - max_health = 200, - corpse = "small-remnants", - collision_box = { { -0.3, -0.3 }, { 0.3, 0.3 } }, - selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - fluid_box = { - base_area = 25, - pipe_picture = assembler3pipepictures(), - pipe_covers = pipecoverspictures(), - pipe_connections = { - { position = { 0, -1 } }, - { position = { 0, 1 } }, - { position = { -1, 0 } }, - { position = { 1, 0 } }, - }, - }, - fast_replaceable_group = "pipe", - window_bounding_box = { util.by_pixel(-3, -5), util.by_pixel(3, 11) }, - pictures = { - picture = { - sheets = { - { - filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", - priority = "extra-high", - frames = 1, - width = 32, - height = 62, - shift = util.by_pixel(0, -15), - }, - { - filename = "__bobplates__/graphics/entity/small-storage-tank-shadow.png", - priority = "extra-high", - frames = 1, - width = 52, - height = 32, - shift = util.by_pixel(30, 0), - draw_as_shadow = true, - }, - }, - }, - fluid_background = { - filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", - priority = "extra-high", - width = 1, - height = 1, - }, - window_background = { - filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", - priority = "extra-high", - width = 1, - height = 1, - }, - flow_sprite = { - filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", - priority = "extra-high", - width = 1, - height = 1, - }, - gas_flow = { - filename = "__bobplates__/graphics/entity/small-storage-tank-all.png", - priority = "extra-high", - line_length = 1, - width = 1, - height = 1, - frame_count = 1, - axially_symmetrical = false, - direction_count = 1, - animation_speed = 0.25, - }, - }, - flow_length_in_ticks = 360, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - working_sound = { - sound = { - filename = "__base__/sound/storage-tank.ogg", - volume = 0.8, - }, - match_volume_to_activity = true, - apparent_volume = 1.5, - max_sounds_per_type = 3, - }, - circuit_wire_connection_points = circuit_connector_definitions["bob-small-storage-tank"].points, - circuit_connector_sprites = circuit_connector_definitions["bob-small-storage-tank"].sprites, - circuit_wire_max_distance = default_circuit_wire_max_distance, - }, - - { - type = "furnace", - name = "void-pump", - icon = "__bobplates__/graphics/icons/void-pump.png", - icon_size = 32, - flags = { "placeable-neutral", "placeable-player", "player-creation" }, - minable = { mining_time = 1, result = "void-pump" }, - allowed_effects = { "consumption", "speed", "pollution" }, - max_health = 100, - fast_replaceable_group = "pipe", - corpse = "small-remnants", - resistances = { - { - type = "fire", - percent = 80, - }, - { - type = "explosion", - percent = 30, - }, - }, - fluid_boxes = { - { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_area = 1, - base_level = -1, - pipe_connections = { { type = "input", position = { 0, 1 } } }, - }, - }, - energy_source = { - type = "electric", - usage_priority = "secondary-input", - emissions_per_minute = 0.15, - }, - energy_usage = "30kW", - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, - open_sound = { filename = "__base__/sound/machine-open.ogg", volume = 0.85 }, - close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.75 }, - collision_box = { { -0.29, -0.29 }, { 0.29, 0.29 } }, - selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - crafting_categories = { "void-fluid" }, - crafting_speed = 5, - result_inventory_size = 0, - source_inventory_size = 0, - animation = { - north = { - filename = "__bobplates__/graphics/entity/small-pump/small-pump-up.png", - width = 46, - height = 52, - frame_count = 8, - shift = { 0.09375, 0.03125 + 0.0625 }, - animation_speed = 0.5, - }, - east = { - filename = "__bobplates__/graphics/entity/small-pump/small-pump-right.png", - width = 51, - height = 56, - frame_count = 8, - shift = { 0.265625, -0.21875 }, - animation_speed = 0.5, - }, - south = { - filename = "__bobplates__/graphics/entity/small-pump/small-pump-down.png", - width = 61, - height = 58, - frame_count = 8, - shift = { 0.421875, -0.125 }, - animation_speed = 0.5, - }, - west = { - filename = "__bobplates__/graphics/entity/small-pump/small-pump-left.png", - width = 56, - height = 44, - frame_count = 8, - shift = { 0.3125, 0.0625 }, - animation_speed = 0.5, - }, - }, - }, -}) diff --git a/bobplates_1.1.6/settings.lua b/bobplates_1.1.6/settings.lua deleted file mode 100644 index 7b55210f..00000000 --- a/bobplates_1.1.6/settings.lua +++ /dev/null @@ -1,77 +0,0 @@ -data:extend({ - { - type = "bool-setting", - name = "bobmods-plates-cheapersteel", - setting_type = "startup", - default_value = true, - }, - - { - type = "bool-setting", - name = "bobmods-plates-batteryupdate", - setting_type = "startup", - default_value = true, - }, - - { - type = "int-setting", - name = "bobmods-plates-inventorysize", - setting_type = "startup", - default_value = 80, - maximum_value = 250, - minimum_value = 30, - }, - - { - type = "bool-setting", - name = "bobmods-plates-purewater", - setting_type = "startup", - default_value = true, - }, - - { - type = "bool-setting", - name = "bobmods-plates-groundwater", - setting_type = "startup", - default_value = false, - }, - - { - type = "bool-setting", - name = "bobmods-plates-vanillabarrelling", - setting_type = "startup", - default_value = false, - }, - - { - type = "bool-setting", - name = "bobmods-colorupdate", - setting_type = "startup", - default_value = true, - }, - { - type = "bool-setting", - name = "bobmods-plates-bluedeuterium", - setting_type = "startup", - default_value = false, - }, - { - type = "bool-setting", - name = "bobmods-plates-nuclearupdate", - setting_type = "startup", - default_value = true, - }, - - { - type = "bool-setting", - name = "bobmods-plates-convert-recipes", - setting_type = "startup", - default_value = true, - }, - { - type = "bool-setting", - name = "bobmods-plates-expensive-electrolysis", - setting_type = "startup", - default_value = false, - }, -}) diff --git a/bobpower_1.1.7/changelog.txt b/bobpower/changelog.txt similarity index 100% rename from bobpower_1.1.7/changelog.txt rename to bobpower/changelog.txt diff --git a/bobpower_1.1.7/data-updates.lua b/bobpower/data-updates.lua similarity index 100% rename from bobpower_1.1.7/data-updates.lua rename to bobpower/data-updates.lua diff --git a/bobpower_1.1.7/data.lua b/bobpower/data.lua similarity index 100% rename from bobpower_1.1.7/data.lua rename to bobpower/data.lua diff --git a/bobpower_1.1.7/graphics/accumulator/hr-large-accumulator-shadow.png b/bobpower/graphics/accumulator/hr-large-accumulator-shadow.png similarity index 100% rename from bobpower_1.1.7/graphics/accumulator/hr-large-accumulator-shadow.png rename to bobpower/graphics/accumulator/hr-large-accumulator-shadow.png diff --git a/bobpower_1.1.7/graphics/accumulator/hr-large-accumulator.png b/bobpower/graphics/accumulator/hr-large-accumulator.png similarity index 100% rename from bobpower_1.1.7/graphics/accumulator/hr-large-accumulator.png rename to bobpower/graphics/accumulator/hr-large-accumulator.png diff --git a/bobpower_1.1.7/graphics/accumulator/large-accumulator-shadow.png b/bobpower/graphics/accumulator/large-accumulator-shadow.png similarity index 100% rename from bobpower_1.1.7/graphics/accumulator/large-accumulator-shadow.png rename to bobpower/graphics/accumulator/large-accumulator-shadow.png diff --git a/bobpower_1.1.7/graphics/accumulator/large-accumulator.png b/bobpower/graphics/accumulator/large-accumulator.png similarity index 100% rename from bobpower_1.1.7/graphics/accumulator/large-accumulator.png rename to bobpower/graphics/accumulator/large-accumulator.png diff --git a/bobpower_1.1.7/graphics/burner-generator/burner-generator-fire.png b/bobpower/graphics/burner-generator/burner-generator-fire.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-generator/burner-generator-fire.png rename to bobpower/graphics/burner-generator/burner-generator-fire.png diff --git a/bobpower_1.1.7/graphics/burner-generator/burner-generator.png b/bobpower/graphics/burner-generator/burner-generator.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-generator/burner-generator.png rename to bobpower/graphics/burner-generator/burner-generator.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches-2.png b/bobpower/graphics/burner-reactor/hr-reactor-connect-patches-2.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches-2.png rename to bobpower/graphics/burner-reactor/hr-reactor-connect-patches-2.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches-3.png b/bobpower/graphics/burner-reactor/hr-reactor-connect-patches-3.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches-3.png rename to bobpower/graphics/burner-reactor/hr-reactor-connect-patches-3.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches.png b/bobpower/graphics/burner-reactor/hr-reactor-connect-patches.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-connect-patches.png rename to bobpower/graphics/burner-reactor/hr-reactor-connect-patches.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes-2.png b/bobpower/graphics/burner-reactor/hr-reactor-pipes-2.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes-2.png rename to bobpower/graphics/burner-reactor/hr-reactor-pipes-2.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes-3.png b/bobpower/graphics/burner-reactor/hr-reactor-pipes-3.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes-3.png rename to bobpower/graphics/burner-reactor/hr-reactor-pipes-3.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes.png b/bobpower/graphics/burner-reactor/hr-reactor-pipes.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/hr-reactor-pipes.png rename to bobpower/graphics/burner-reactor/hr-reactor-pipes.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches-2.png b/bobpower/graphics/burner-reactor/reactor-connect-patches-2.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches-2.png rename to bobpower/graphics/burner-reactor/reactor-connect-patches-2.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches-3.png b/bobpower/graphics/burner-reactor/reactor-connect-patches-3.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches-3.png rename to bobpower/graphics/burner-reactor/reactor-connect-patches-3.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches.png b/bobpower/graphics/burner-reactor/reactor-connect-patches.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-connect-patches.png rename to bobpower/graphics/burner-reactor/reactor-connect-patches.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-fire.png b/bobpower/graphics/burner-reactor/reactor-fire.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-fire.png rename to bobpower/graphics/burner-reactor/reactor-fire.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-pipes-2.png b/bobpower/graphics/burner-reactor/reactor-pipes-2.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-pipes-2.png rename to bobpower/graphics/burner-reactor/reactor-pipes-2.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-pipes-3.png b/bobpower/graphics/burner-reactor/reactor-pipes-3.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-pipes-3.png rename to bobpower/graphics/burner-reactor/reactor-pipes-3.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor-pipes.png b/bobpower/graphics/burner-reactor/reactor-pipes.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor-pipes.png rename to bobpower/graphics/burner-reactor/reactor-pipes.png diff --git a/bobpower_1.1.7/graphics/burner-reactor/reactor.png b/bobpower/graphics/burner-reactor/reactor.png similarity index 100% rename from bobpower_1.1.7/graphics/burner-reactor/reactor.png rename to bobpower/graphics/burner-reactor/reactor.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-boiler-N-fire.png b/bobpower/graphics/fluid-generator/hr-boiler-N-fire.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-boiler-N-fire.png rename to bobpower/graphics/fluid-generator/hr-boiler-N-fire.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-boiler-S-fire.png b/bobpower/graphics/fluid-generator/hr-boiler-S-fire.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-boiler-S-fire.png rename to bobpower/graphics/fluid-generator/hr-boiler-S-fire.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-fan-spin.png b/bobpower/graphics/fluid-generator/hr-fluid-generator-fan-spin.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-fan-spin.png rename to bobpower/graphics/fluid-generator/hr-fluid-generator-fan-spin.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-fan.png b/bobpower/graphics/fluid-generator/hr-fluid-generator-fan.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-fan.png rename to bobpower/graphics/fluid-generator/hr-fluid-generator-fan.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-light.png b/bobpower/graphics/fluid-generator/hr-fluid-generator-light.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-light.png rename to bobpower/graphics/fluid-generator/hr-fluid-generator-light.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-shadow.png b/bobpower/graphics/fluid-generator/hr-fluid-generator-shadow.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator-shadow.png rename to bobpower/graphics/fluid-generator/hr-fluid-generator-shadow.png diff --git a/bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator.png b/bobpower/graphics/fluid-generator/hr-fluid-generator.png similarity index 100% rename from bobpower_1.1.7/graphics/fluid-generator/hr-fluid-generator.png rename to bobpower/graphics/fluid-generator/hr-fluid-generator.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-single.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-horizontal-single.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-horizontal-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-2/heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-2/heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-single.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-single.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-horizontal-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-2/hr-heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-2/hr-heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-single.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-horizontal-single.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-horizontal-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-3/heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-3/heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-single.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-single.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-horizontal-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-3/hr-heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-3/hr-heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-4/heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-4/heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-down-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-left-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-corner-up-right-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-down-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-down-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-left-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-left-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-right-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-right-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-up-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-ending-up-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-ending-up-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-horizontal-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-2.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-2.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-2.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-3.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-3.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-3.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-4.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-4.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-4.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-5.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-5.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-5.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-6.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-6.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-6.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-single.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-single.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-straight-vertical-single.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-down-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-down-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-down-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-down-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-left-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-left-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-left-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-left-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-right-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-right-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-right-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-right-1.png diff --git a/bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-up-1.png b/bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-up-1.png similarity index 100% rename from bobpower_1.1.7/graphics/heat-pipe-4/hr-heat-pipe-t-up-1.png rename to bobpower/graphics/heat-pipe-4/hr-heat-pipe-t-up-1.png diff --git a/bobpower_1.1.7/graphics/icons/burner-generator.png b/bobpower/graphics/icons/burner-generator.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/burner-generator.png rename to bobpower/graphics/icons/burner-generator.png diff --git a/bobpower_1.1.7/graphics/icons/burner-reactor.png b/bobpower/graphics/icons/burner-reactor.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/burner-reactor.png rename to bobpower/graphics/icons/burner-reactor.png diff --git a/bobpower_1.1.7/graphics/icons/fluid-generator.png b/bobpower/graphics/icons/fluid-generator.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/fluid-generator.png rename to bobpower/graphics/icons/fluid-generator.png diff --git a/bobpower_1.1.7/graphics/icons/heat-pipe-2.png b/bobpower/graphics/icons/heat-pipe-2.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/heat-pipe-2.png rename to bobpower/graphics/icons/heat-pipe-2.png diff --git a/bobpower_1.1.7/graphics/icons/heat-pipe-3.png b/bobpower/graphics/icons/heat-pipe-3.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/heat-pipe-3.png rename to bobpower/graphics/icons/heat-pipe-3.png diff --git a/bobpower_1.1.7/graphics/icons/heat-pipe-4.png b/bobpower/graphics/icons/heat-pipe-4.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/heat-pipe-4.png rename to bobpower/graphics/icons/heat-pipe-4.png diff --git a/bobpower_1.1.7/graphics/icons/oil-boiler.png b/bobpower/graphics/icons/oil-boiler.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/oil-boiler.png rename to bobpower/graphics/icons/oil-boiler.png diff --git a/bobpower_1.1.7/graphics/icons/technology/boiler.png b/bobpower/graphics/icons/technology/boiler.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/boiler.png rename to bobpower/graphics/icons/technology/boiler.png diff --git a/bobpower_1.1.7/graphics/icons/technology/fluid-generator.png b/bobpower/graphics/icons/technology/fluid-generator.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/fluid-generator.png rename to bobpower/graphics/icons/technology/fluid-generator.png diff --git a/bobpower_1.1.7/graphics/icons/technology/heat-exchanger.png b/bobpower/graphics/icons/technology/heat-exchanger.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/heat-exchanger.png rename to bobpower/graphics/icons/technology/heat-exchanger.png diff --git a/bobpower_1.1.7/graphics/icons/technology/heat-pipe.png b/bobpower/graphics/icons/technology/heat-pipe.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/heat-pipe.png rename to bobpower/graphics/icons/technology/heat-pipe.png diff --git a/bobpower_1.1.7/graphics/icons/technology/heat-power.png b/bobpower/graphics/icons/technology/heat-power.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/heat-power.png rename to bobpower/graphics/icons/technology/heat-power.png diff --git a/bobpower_1.1.7/graphics/icons/technology/nuclear-power.png b/bobpower/graphics/icons/technology/nuclear-power.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/nuclear-power.png rename to bobpower/graphics/icons/technology/nuclear-power.png diff --git a/bobpower_1.1.7/graphics/icons/technology/oil-boiler.png b/bobpower/graphics/icons/technology/oil-boiler.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/oil-boiler.png rename to bobpower/graphics/icons/technology/oil-boiler.png diff --git a/bobpower_1.1.7/graphics/icons/technology/steam-engine.png b/bobpower/graphics/icons/technology/steam-engine.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/steam-engine.png rename to bobpower/graphics/icons/technology/steam-engine.png diff --git a/bobpower_1.1.7/graphics/icons/technology/steam-turbine.png b/bobpower/graphics/icons/technology/steam-turbine.png similarity index 100% rename from bobpower_1.1.7/graphics/icons/technology/steam-turbine.png rename to bobpower/graphics/icons/technology/steam-turbine.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-connect-patches-2.png b/bobpower/graphics/nuclear-reactor/hr-reactor-connect-patches-2.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-connect-patches-2.png rename to bobpower/graphics/nuclear-reactor/hr-reactor-connect-patches-2.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-connect-patches-3.png b/bobpower/graphics/nuclear-reactor/hr-reactor-connect-patches-3.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-connect-patches-3.png rename to bobpower/graphics/nuclear-reactor/hr-reactor-connect-patches-3.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-lights.png b/bobpower/graphics/nuclear-reactor/hr-reactor-lights.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-lights.png rename to bobpower/graphics/nuclear-reactor/hr-reactor-lights.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-pipes-2.png b/bobpower/graphics/nuclear-reactor/hr-reactor-pipes-2.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-pipes-2.png rename to bobpower/graphics/nuclear-reactor/hr-reactor-pipes-2.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-pipes-3.png b/bobpower/graphics/nuclear-reactor/hr-reactor-pipes-3.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/hr-reactor-pipes-3.png rename to bobpower/graphics/nuclear-reactor/hr-reactor-pipes-3.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/reactor-connect-patches-2.png b/bobpower/graphics/nuclear-reactor/reactor-connect-patches-2.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/reactor-connect-patches-2.png rename to bobpower/graphics/nuclear-reactor/reactor-connect-patches-2.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/reactor-connect-patches-3.png b/bobpower/graphics/nuclear-reactor/reactor-connect-patches-3.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/reactor-connect-patches-3.png rename to bobpower/graphics/nuclear-reactor/reactor-connect-patches-3.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/reactor-lights.png b/bobpower/graphics/nuclear-reactor/reactor-lights.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/reactor-lights.png rename to bobpower/graphics/nuclear-reactor/reactor-lights.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/reactor-pipes-2.png b/bobpower/graphics/nuclear-reactor/reactor-pipes-2.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/reactor-pipes-2.png rename to bobpower/graphics/nuclear-reactor/reactor-pipes-2.png diff --git a/bobpower_1.1.7/graphics/nuclear-reactor/reactor-pipes-3.png b/bobpower/graphics/nuclear-reactor/reactor-pipes-3.png similarity index 100% rename from bobpower_1.1.7/graphics/nuclear-reactor/reactor-pipes-3.png rename to bobpower/graphics/nuclear-reactor/reactor-pipes-3.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel-2.png b/bobpower/graphics/solar-panel/solar-panel-2.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel-2.png rename to bobpower/graphics/solar-panel/solar-panel-2.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel-l.png b/bobpower/graphics/solar-panel/solar-panel-l.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel-l.png rename to bobpower/graphics/solar-panel/solar-panel-l.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel-l2.png b/bobpower/graphics/solar-panel/solar-panel-l2.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel-l2.png rename to bobpower/graphics/solar-panel/solar-panel-l2.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel-s.png b/bobpower/graphics/solar-panel/solar-panel-s.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel-s.png rename to bobpower/graphics/solar-panel/solar-panel-s.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel-s2.png b/bobpower/graphics/solar-panel/solar-panel-s2.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel-s2.png rename to bobpower/graphics/solar-panel/solar-panel-s2.png diff --git a/bobpower_1.1.7/graphics/solar-panel/solar-panel.png b/bobpower/graphics/solar-panel/solar-panel.png similarity index 100% rename from bobpower_1.1.7/graphics/solar-panel/solar-panel.png rename to bobpower/graphics/solar-panel/solar-panel.png diff --git a/bobpower/info.json b/bobpower/info.json new file mode 100644 index 00000000..65bbc3a3 --- /dev/null +++ b/bobpower/info.json @@ -0,0 +1,15 @@ +{ + "name": "bobpower", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Power mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nAdds a wide range of power objects, including, but not limited to:\n3 sizes and 3 tiers of solar panel.\nA full steam power rework so tier 1 of nuclear steam matches tier 3 of regular steam.\n5 tiers of steam power.\nOil (burning) boilers added which start at tier 2, and will power 3 steam engines.\nnuclear steam power starts at tier 3.\nAll boiler:steam engine ratios are 2:1 (1 boiler will power 2 steam engines, 1 heat exchanger will power 2 steam turbines)\nNuclear:regular ratios are 2:1. (1 heat exchanger will power 4 steam engines, or 1 boiler will power 1 steam turbine)\n4 tiers of medium and large power poles, and substations.\n3 tiers, and different types (fast, high capacity, and slow) of Accumulator.\nNew fluid burning generators that turn oils directly into Electricity.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobpower_1.1.7/locale/en/bobpower.cfg b/bobpower/locale/en/bobpower.cfg similarity index 100% rename from bobpower_1.1.7/locale/en/bobpower.cfg rename to bobpower/locale/en/bobpower.cfg diff --git a/bobpower_1.1.7/migrations/bobpower_0.18.0.json b/bobpower/migrations/bobpower_0.18.0.json similarity index 100% rename from bobpower_1.1.7/migrations/bobpower_0.18.0.json rename to bobpower/migrations/bobpower_0.18.0.json diff --git a/bobpower_1.1.7/migrations/bobpower_0.18.7.json b/bobpower/migrations/bobpower_0.18.7.json similarity index 100% rename from bobpower_1.1.7/migrations/bobpower_0.18.7.json rename to bobpower/migrations/bobpower_0.18.7.json diff --git a/bobpower_1.1.7/migrations/bobpower_1.1.6.json b/bobpower/migrations/bobpower_1.1.6.json similarity index 100% rename from bobpower_1.1.7/migrations/bobpower_1.1.6.json rename to bobpower/migrations/bobpower_1.1.6.json diff --git a/bobpower_1.1.7/prototypes/burner-generator.lua b/bobpower/prototypes/burner-generator.lua similarity index 100% rename from bobpower_1.1.7/prototypes/burner-generator.lua rename to bobpower/prototypes/burner-generator.lua diff --git a/bobpower_1.1.7/prototypes/burner-reactor-updates.lua b/bobpower/prototypes/burner-reactor-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/burner-reactor-updates.lua rename to bobpower/prototypes/burner-reactor-updates.lua diff --git a/bobpower_1.1.7/prototypes/burner-reactor.lua b/bobpower/prototypes/burner-reactor.lua similarity index 100% rename from bobpower_1.1.7/prototypes/burner-reactor.lua rename to bobpower/prototypes/burner-reactor.lua diff --git a/bobpower_1.1.7/prototypes/category.lua b/bobpower/prototypes/category.lua similarity index 100% rename from bobpower_1.1.7/prototypes/category.lua rename to bobpower/prototypes/category.lua diff --git a/bobpower_1.1.7/prototypes/entity/accumulators.lua b/bobpower/prototypes/entity/accumulators.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/accumulators.lua rename to bobpower/prototypes/entity/accumulators.lua diff --git a/bobpower_1.1.7/prototypes/entity/boilers.lua b/bobpower/prototypes/entity/boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/boilers.lua rename to bobpower/prototypes/entity/boilers.lua diff --git a/bobpower_1.1.7/prototypes/entity/fluid-generator.lua b/bobpower/prototypes/entity/fluid-generator.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/fluid-generator.lua rename to bobpower/prototypes/entity/fluid-generator.lua diff --git a/bobpower_1.1.7/prototypes/entity/heat-exchangers.lua b/bobpower/prototypes/entity/heat-exchangers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/heat-exchangers.lua rename to bobpower/prototypes/entity/heat-exchangers.lua diff --git a/bobpower_1.1.7/prototypes/entity/nuclear.lua b/bobpower/prototypes/entity/nuclear.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/nuclear.lua rename to bobpower/prototypes/entity/nuclear.lua diff --git a/bobpower_1.1.7/prototypes/entity/oil-boilers.lua b/bobpower/prototypes/entity/oil-boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/oil-boilers.lua rename to bobpower/prototypes/entity/oil-boilers.lua diff --git a/bobpower_1.1.7/prototypes/entity/poles.lua b/bobpower/prototypes/entity/poles.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/poles.lua rename to bobpower/prototypes/entity/poles.lua diff --git a/bobpower_1.1.7/prototypes/entity/solar-panels.lua b/bobpower/prototypes/entity/solar-panels.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/solar-panels.lua rename to bobpower/prototypes/entity/solar-panels.lua diff --git a/bobpower_1.1.7/prototypes/entity/steam-engines.lua b/bobpower/prototypes/entity/steam-engines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/steam-engines.lua rename to bobpower/prototypes/entity/steam-engines.lua diff --git a/bobpower_1.1.7/prototypes/entity/steam-turbines.lua b/bobpower/prototypes/entity/steam-turbines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/entity/steam-turbines.lua rename to bobpower/prototypes/entity/steam-turbines.lua diff --git a/bobpower_1.1.7/prototypes/heat-pipes-updates.lua b/bobpower/prototypes/heat-pipes-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/heat-pipes-updates.lua rename to bobpower/prototypes/heat-pipes-updates.lua diff --git a/bobpower_1.1.7/prototypes/heat-pipes.lua b/bobpower/prototypes/heat-pipes.lua similarity index 100% rename from bobpower_1.1.7/prototypes/heat-pipes.lua rename to bobpower/prototypes/heat-pipes.lua diff --git a/bobpower_1.1.7/prototypes/item/accumulators.lua b/bobpower/prototypes/item/accumulators.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/accumulators.lua rename to bobpower/prototypes/item/accumulators.lua diff --git a/bobpower_1.1.7/prototypes/item/boilers.lua b/bobpower/prototypes/item/boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/boilers.lua rename to bobpower/prototypes/item/boilers.lua diff --git a/bobpower_1.1.7/prototypes/item/fluid-generator.lua b/bobpower/prototypes/item/fluid-generator.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/fluid-generator.lua rename to bobpower/prototypes/item/fluid-generator.lua diff --git a/bobpower_1.1.7/prototypes/item/heat-exchangers.lua b/bobpower/prototypes/item/heat-exchangers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/heat-exchangers.lua rename to bobpower/prototypes/item/heat-exchangers.lua diff --git a/bobpower_1.1.7/prototypes/item/nuclear.lua b/bobpower/prototypes/item/nuclear.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/nuclear.lua rename to bobpower/prototypes/item/nuclear.lua diff --git a/bobpower_1.1.7/prototypes/item/oil-boilers.lua b/bobpower/prototypes/item/oil-boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/oil-boilers.lua rename to bobpower/prototypes/item/oil-boilers.lua diff --git a/bobpower_1.1.7/prototypes/item/poles.lua b/bobpower/prototypes/item/poles.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/poles.lua rename to bobpower/prototypes/item/poles.lua diff --git a/bobpower_1.1.7/prototypes/item/solar-panels.lua b/bobpower/prototypes/item/solar-panels.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/solar-panels.lua rename to bobpower/prototypes/item/solar-panels.lua diff --git a/bobpower_1.1.7/prototypes/item/steam-engines.lua b/bobpower/prototypes/item/steam-engines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/steam-engines.lua rename to bobpower/prototypes/item/steam-engines.lua diff --git a/bobpower_1.1.7/prototypes/item/steam-turbines.lua b/bobpower/prototypes/item/steam-turbines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/item/steam-turbines.lua rename to bobpower/prototypes/item/steam-turbines.lua diff --git a/bobpower_1.1.7/prototypes/recipe/accumulators-updates.lua b/bobpower/prototypes/recipe/accumulators-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/accumulators-updates.lua rename to bobpower/prototypes/recipe/accumulators-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/accumulators.lua b/bobpower/prototypes/recipe/accumulators.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/accumulators.lua rename to bobpower/prototypes/recipe/accumulators.lua diff --git a/bobpower_1.1.7/prototypes/recipe/boilers-updates.lua b/bobpower/prototypes/recipe/boilers-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/boilers-updates.lua rename to bobpower/prototypes/recipe/boilers-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/boilers.lua b/bobpower/prototypes/recipe/boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/boilers.lua rename to bobpower/prototypes/recipe/boilers.lua diff --git a/bobpower_1.1.7/prototypes/recipe/fluid-generator-updates.lua b/bobpower/prototypes/recipe/fluid-generator-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/fluid-generator-updates.lua rename to bobpower/prototypes/recipe/fluid-generator-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/fluid-generator.lua b/bobpower/prototypes/recipe/fluid-generator.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/fluid-generator.lua rename to bobpower/prototypes/recipe/fluid-generator.lua diff --git a/bobpower_1.1.7/prototypes/recipe/heat-exchangers-updates.lua b/bobpower/prototypes/recipe/heat-exchangers-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/heat-exchangers-updates.lua rename to bobpower/prototypes/recipe/heat-exchangers-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/heat-exchangers.lua b/bobpower/prototypes/recipe/heat-exchangers.lua similarity index 92% rename from bobpower_1.1.7/prototypes/recipe/heat-exchangers.lua rename to bobpower/prototypes/recipe/heat-exchangers.lua index 4dd6f262..467fa9d0 100644 --- a/bobpower_1.1.7/prototypes/recipe/heat-exchangers.lua +++ b/bobpower/prototypes/recipe/heat-exchangers.lua @@ -19,6 +19,7 @@ if settings.startup["bobmods-power-steam"].value == true then ingredients = { { "heat-exchanger", 1 }, { "steel-plate", 10 }, + { "heat-pipe-2", 4 }, }, result = "heat-exchanger-2", }, @@ -30,6 +31,7 @@ if settings.startup["bobmods-power-steam"].value == true then ingredients = { { "heat-exchanger-2", 1 }, { "steel-plate", 10 }, + { "heat-pipe-3", 4 }, }, result = "heat-exchanger-3", }, @@ -40,6 +42,7 @@ if settings.startup["bobmods-power-steam"].value == true then ingredients = { { "heat-exchanger-3", 1 }, { "steel-plate", 10 }, + { "heat-pipe-4", 4 }, }, result = "heat-exchanger-4", }, @@ -57,7 +60,7 @@ if settings.startup["bobmods-power-steam"].value == true then enabled = false, ingredients = { { "boiler-3", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-2", 4 }, }, result = "heat-exchanger-2", allow_as_intermediate = false, @@ -69,7 +72,7 @@ if settings.startup["bobmods-power-steam"].value == true then enabled = false, ingredients = { { "boiler-4", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-3", 4 }, }, result = "heat-exchanger-3", allow_as_intermediate = false, @@ -82,7 +85,7 @@ if settings.startup["bobmods-power-steam"].value == true then enabled = false, ingredients = { { "boiler-5", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-4", 4 }, }, result = "heat-exchanger-4", allow_as_intermediate = false, @@ -117,7 +120,7 @@ if settings.startup["bobmods-power-steam"].value == true then }, results = { { "boiler-3", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-2", 4 }, }, main_product = "boiler-3", allow_as_intermediate = false, @@ -133,7 +136,7 @@ if settings.startup["bobmods-power-steam"].value == true then }, results = { { "boiler-4", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-3", 4 }, }, main_product = "boiler-4", allow_as_intermediate = false, @@ -149,7 +152,7 @@ if settings.startup["bobmods-power-steam"].value == true then }, results = { { "boiler-5", 1 }, - { "heat-pipe", 4 }, + { "heat-pipe-4", 4 }, }, main_product = "boiler-5", allow_as_intermediate = false, diff --git a/bobpower_1.1.7/prototypes/recipe/nuclear-updates.lua b/bobpower/prototypes/recipe/nuclear-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/nuclear-updates.lua rename to bobpower/prototypes/recipe/nuclear-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/nuclear.lua b/bobpower/prototypes/recipe/nuclear.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/nuclear.lua rename to bobpower/prototypes/recipe/nuclear.lua diff --git a/bobpower_1.1.7/prototypes/recipe/oil-boilers-updates.lua b/bobpower/prototypes/recipe/oil-boilers-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/oil-boilers-updates.lua rename to bobpower/prototypes/recipe/oil-boilers-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/oil-boilers.lua b/bobpower/prototypes/recipe/oil-boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/oil-boilers.lua rename to bobpower/prototypes/recipe/oil-boilers.lua diff --git a/bobpower_1.1.7/prototypes/recipe/poles-updates.lua b/bobpower/prototypes/recipe/poles-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/poles-updates.lua rename to bobpower/prototypes/recipe/poles-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/poles.lua b/bobpower/prototypes/recipe/poles.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/poles.lua rename to bobpower/prototypes/recipe/poles.lua diff --git a/bobpower_1.1.7/prototypes/recipe/solar-panels-updates.lua b/bobpower/prototypes/recipe/solar-panels-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/solar-panels-updates.lua rename to bobpower/prototypes/recipe/solar-panels-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/solar-panels.lua b/bobpower/prototypes/recipe/solar-panels.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/solar-panels.lua rename to bobpower/prototypes/recipe/solar-panels.lua diff --git a/bobpower_1.1.7/prototypes/recipe/steam-engines-updates.lua b/bobpower/prototypes/recipe/steam-engines-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/steam-engines-updates.lua rename to bobpower/prototypes/recipe/steam-engines-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/steam-engines.lua b/bobpower/prototypes/recipe/steam-engines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/steam-engines.lua rename to bobpower/prototypes/recipe/steam-engines.lua diff --git a/bobpower_1.1.7/prototypes/recipe/steam-turbines-updates.lua b/bobpower/prototypes/recipe/steam-turbines-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/steam-turbines-updates.lua rename to bobpower/prototypes/recipe/steam-turbines-updates.lua diff --git a/bobpower_1.1.7/prototypes/recipe/steam-turbines.lua b/bobpower/prototypes/recipe/steam-turbines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/recipe/steam-turbines.lua rename to bobpower/prototypes/recipe/steam-turbines.lua diff --git a/bobpower_1.1.7/prototypes/technology/accumulators.lua b/bobpower/prototypes/technology/accumulators.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/accumulators.lua rename to bobpower/prototypes/technology/accumulators.lua diff --git a/bobpower_1.1.7/prototypes/technology/boilers.lua b/bobpower/prototypes/technology/boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/boilers.lua rename to bobpower/prototypes/technology/boilers.lua diff --git a/bobpower_1.1.7/prototypes/technology/fluid-generator.lua b/bobpower/prototypes/technology/fluid-generator.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/fluid-generator.lua rename to bobpower/prototypes/technology/fluid-generator.lua diff --git a/bobpower_1.1.7/prototypes/technology/heat-exchangers.lua b/bobpower/prototypes/technology/heat-exchangers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/heat-exchangers.lua rename to bobpower/prototypes/technology/heat-exchangers.lua diff --git a/bobpower_1.1.7/prototypes/technology/nuclear.lua b/bobpower/prototypes/technology/nuclear.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/nuclear.lua rename to bobpower/prototypes/technology/nuclear.lua diff --git a/bobpower_1.1.7/prototypes/technology/oil-boilers.lua b/bobpower/prototypes/technology/oil-boilers.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/oil-boilers.lua rename to bobpower/prototypes/technology/oil-boilers.lua diff --git a/bobpower_1.1.7/prototypes/technology/poles.lua b/bobpower/prototypes/technology/poles.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/poles.lua rename to bobpower/prototypes/technology/poles.lua diff --git a/bobpower_1.1.7/prototypes/technology/solar-panels.lua b/bobpower/prototypes/technology/solar-panels.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/solar-panels.lua rename to bobpower/prototypes/technology/solar-panels.lua diff --git a/bobpower_1.1.7/prototypes/technology/steam-engines.lua b/bobpower/prototypes/technology/steam-engines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/steam-engines.lua rename to bobpower/prototypes/technology/steam-engines.lua diff --git a/bobpower_1.1.7/prototypes/technology/steam-power.lua b/bobpower/prototypes/technology/steam-power.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/steam-power.lua rename to bobpower/prototypes/technology/steam-power.lua diff --git a/bobpower_1.1.7/prototypes/technology/steam-turbines.lua b/bobpower/prototypes/technology/steam-turbines.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/steam-turbines.lua rename to bobpower/prototypes/technology/steam-turbines.lua diff --git a/bobpower_1.1.7/prototypes/technology/technology-updates.lua b/bobpower/prototypes/technology/technology-updates.lua similarity index 100% rename from bobpower_1.1.7/prototypes/technology/technology-updates.lua rename to bobpower/prototypes/technology/technology-updates.lua diff --git a/bobpower_1.1.7/settings.lua b/bobpower/settings.lua similarity index 100% rename from bobpower_1.1.7/settings.lua rename to bobpower/settings.lua diff --git a/bobpower_1.1.7/thumbnail.png b/bobpower/thumbnail.png similarity index 100% rename from bobpower_1.1.7/thumbnail.png rename to bobpower/thumbnail.png diff --git a/bobpower_1.1.7/info.json b/bobpower_1.1.7/info.json deleted file mode 100644 index 0a3c05cd..00000000 --- a/bobpower_1.1.7/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bobpower", - "version": "1.1.7", - "factorio_version": "1.1", - "title": "Bob's Power mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nAdds a wide range of power objects, including, but not limited to:\n3 sizes and 3 tiers of solar panel.\nA full steam power rework so tier 1 of nuclear steam matches tier 3 of regular steam.\n5 tiers of steam power.\nOil (burning) boilers added which start at tier 2, and will power 3 steam engines.\nnuclear steam power starts at tier 3.\nAll boiler:steam engine ratios are 2:1 (1 boiler will power 2 steam engines, 1 heat exchanger will power 2 steam turbines)\nNuclear:regular ratios are 2:1. (1 hear exchanger will power 4 steam engines, or 1 boiler will power 1 steam turbine)\n4 tiers of medium and large power poles, and substations.\n3 tiers, and different types (fast, high capacity, and slow) of Accumulator.\nNew fluid burning generators that turn oils directly into Electricity.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobrevamp_1.1.6/changelog.txt b/bobrevamp/changelog.txt similarity index 100% rename from bobrevamp_1.1.6/changelog.txt rename to bobrevamp/changelog.txt diff --git a/bobrevamp_1.1.6/data-updates.lua b/bobrevamp/data-updates.lua similarity index 100% rename from bobrevamp_1.1.6/data-updates.lua rename to bobrevamp/data-updates.lua diff --git a/bobrevamp_1.1.6/data.lua b/bobrevamp/data.lua similarity index 100% rename from bobrevamp_1.1.6/data.lua rename to bobrevamp/data.lua diff --git a/bobrevamp_1.1.6/graphics/icons/ammonia.png b/bobrevamp/graphics/icons/ammonia.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/ammonia.png rename to bobrevamp/graphics/icons/ammonia.png diff --git a/bobrevamp_1.1.6/graphics/icons/ammonium-chloride-recycling.png b/bobrevamp/graphics/icons/ammonium-chloride-recycling.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/ammonium-chloride-recycling.png rename to bobrevamp/graphics/icons/ammonium-chloride-recycling.png diff --git a/bobrevamp_1.1.6/graphics/icons/ammonium-chloride.png b/bobrevamp/graphics/icons/ammonium-chloride.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/ammonium-chloride.png rename to bobrevamp/graphics/icons/ammonium-chloride.png diff --git a/bobrevamp_1.1.6/graphics/icons/bob-oil-processing.png b/bobrevamp/graphics/icons/bob-oil-processing.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/bob-oil-processing.png rename to bobrevamp/graphics/icons/bob-oil-processing.png diff --git a/bobrevamp_1.1.6/graphics/icons/brine-electrolysis.png b/bobrevamp/graphics/icons/brine-electrolysis.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/brine-electrolysis.png rename to bobrevamp/graphics/icons/brine-electrolysis.png diff --git a/bobrevamp_1.1.6/graphics/icons/brine.png b/bobrevamp/graphics/icons/brine.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/brine.png rename to bobrevamp/graphics/icons/brine.png diff --git a/bobrevamp_1.1.6/graphics/icons/carbon-dioxide-oil-processing.png b/bobrevamp/graphics/icons/carbon-dioxide-oil-processing.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/carbon-dioxide-oil-processing.png rename to bobrevamp/graphics/icons/carbon-dioxide-oil-processing.png diff --git a/bobrevamp_1.1.6/graphics/icons/carbon-dioxide.png b/bobrevamp/graphics/icons/carbon-dioxide.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/carbon-dioxide.png rename to bobrevamp/graphics/icons/carbon-dioxide.png diff --git a/bobrevamp_1.1.6/graphics/icons/deuterium-reactor-blue.png b/bobrevamp/graphics/icons/deuterium-reactor-blue.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/deuterium-reactor-blue.png rename to bobrevamp/graphics/icons/deuterium-reactor-blue.png diff --git a/bobrevamp_1.1.6/graphics/icons/deuterium-reactor.png b/bobrevamp/graphics/icons/deuterium-reactor.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/deuterium-reactor.png rename to bobrevamp/graphics/icons/deuterium-reactor.png diff --git a/bobrevamp_1.1.6/graphics/icons/dinitrogen-tetroxide.png b/bobrevamp/graphics/icons/dinitrogen-tetroxide.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/dinitrogen-tetroxide.png rename to bobrevamp/graphics/icons/dinitrogen-tetroxide.png diff --git a/bobrevamp_1.1.6/graphics/icons/heat-shield-tile.png b/bobrevamp/graphics/icons/heat-shield-tile.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/heat-shield-tile.png rename to bobrevamp/graphics/icons/heat-shield-tile.png diff --git a/bobrevamp_1.1.6/graphics/icons/hydrazine.png b/bobrevamp/graphics/icons/hydrazine.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/hydrazine.png rename to bobrevamp/graphics/icons/hydrazine.png diff --git a/bobrevamp_1.1.6/graphics/icons/hydrogen-peroxide.png b/bobrevamp/graphics/icons/hydrogen-peroxide.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/hydrogen-peroxide.png rename to bobrevamp/graphics/icons/hydrogen-peroxide.png diff --git a/bobrevamp_1.1.6/graphics/icons/limestone.png b/bobrevamp/graphics/icons/limestone.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/limestone.png rename to bobrevamp/graphics/icons/limestone.png diff --git a/bobrevamp_1.1.6/graphics/icons/nitric-oxide.png b/bobrevamp/graphics/icons/nitric-oxide.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/nitric-oxide.png rename to bobrevamp/graphics/icons/nitric-oxide.png diff --git a/bobrevamp_1.1.6/graphics/icons/nitrogen-dioxide.png b/bobrevamp/graphics/icons/nitrogen-dioxide.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/nitrogen-dioxide.png rename to bobrevamp/graphics/icons/nitrogen-dioxide.png diff --git a/bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-1.png b/bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-1.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-1.png rename to bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-1.png diff --git a/bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-2.png b/bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-2.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-2.png rename to bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-2.png diff --git a/bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-3.png b/bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-3.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur-dioxide-3.png rename to bobrevamp/graphics/icons/oil-processing-with-sulfur-dioxide-3.png diff --git a/bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur.png b/bobrevamp/graphics/icons/oil-processing-with-sulfur.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/oil-processing-with-sulfur.png rename to bobrevamp/graphics/icons/oil-processing-with-sulfur.png diff --git a/bobrevamp_1.1.6/graphics/icons/petroleum-gas.png b/bobrevamp/graphics/icons/petroleum-gas.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/petroleum-gas.png rename to bobrevamp/graphics/icons/petroleum-gas.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-bicarbonate.png b/bobrevamp/graphics/icons/sodium-bicarbonate.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-bicarbonate.png rename to bobrevamp/graphics/icons/sodium-bicarbonate.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-carbonate.png b/bobrevamp/graphics/icons/sodium-carbonate.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-carbonate.png rename to bobrevamp/graphics/icons/sodium-carbonate.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-chlorate.png b/bobrevamp/graphics/icons/sodium-chlorate.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-chlorate.png rename to bobrevamp/graphics/icons/sodium-chlorate.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-cobaltate.png b/bobrevamp/graphics/icons/sodium-cobaltate.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-cobaltate.png rename to bobrevamp/graphics/icons/sodium-cobaltate.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-cobaltate2.png b/bobrevamp/graphics/icons/sodium-cobaltate2.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-cobaltate2.png rename to bobrevamp/graphics/icons/sodium-cobaltate2.png diff --git a/bobrevamp_1.1.6/graphics/icons/sodium-perchlorate.png b/bobrevamp/graphics/icons/sodium-perchlorate.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sodium-perchlorate.png rename to bobrevamp/graphics/icons/sodium-perchlorate.png diff --git a/bobrevamp_1.1.6/graphics/icons/solid-fuel-from-sour-gas.png b/bobrevamp/graphics/icons/solid-fuel-from-sour-gas.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/solid-fuel-from-sour-gas.png rename to bobrevamp/graphics/icons/solid-fuel-from-sour-gas.png diff --git a/bobrevamp_1.1.6/graphics/icons/sour-gas.png b/bobrevamp/graphics/icons/sour-gas.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/sour-gas.png rename to bobrevamp/graphics/icons/sour-gas.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/chemical-plant-old.png b/bobrevamp/graphics/icons/technology/chemical-plant-old.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/chemical-plant-old.png rename to bobrevamp/graphics/icons/technology/chemical-plant-old.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/chemical-plant.png b/bobrevamp/graphics/icons/technology/chemical-plant.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/chemical-plant.png rename to bobrevamp/graphics/icons/technology/chemical-plant.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/deuterium-nuclear-power-blue.png b/bobrevamp/graphics/icons/technology/deuterium-nuclear-power-blue.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/deuterium-nuclear-power-blue.png rename to bobrevamp/graphics/icons/technology/deuterium-nuclear-power-blue.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/deuterium-nuclear-power.png b/bobrevamp/graphics/icons/technology/deuterium-nuclear-power.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/deuterium-nuclear-power.png rename to bobrevamp/graphics/icons/technology/deuterium-nuclear-power.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/heat-shield.png b/bobrevamp/graphics/icons/technology/heat-shield.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/heat-shield.png rename to bobrevamp/graphics/icons/technology/heat-shield.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/hydrazine.png b/bobrevamp/graphics/icons/technology/hydrazine.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/hydrazine.png rename to bobrevamp/graphics/icons/technology/hydrazine.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/nuclear-power.png b/bobrevamp/graphics/icons/technology/nuclear-power.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/nuclear-power.png rename to bobrevamp/graphics/icons/technology/nuclear-power.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/rtg.png b/bobrevamp/graphics/icons/technology/rtg.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/rtg.png rename to bobrevamp/graphics/icons/technology/rtg.png diff --git a/bobrevamp_1.1.6/graphics/icons/technology/thorium-nuclear-power.png b/bobrevamp/graphics/icons/technology/thorium-nuclear-power.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/technology/thorium-nuclear-power.png rename to bobrevamp/graphics/icons/technology/thorium-nuclear-power.png diff --git a/bobrevamp_1.1.6/graphics/icons/thorium-reactor.png b/bobrevamp/graphics/icons/thorium-reactor.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/thorium-reactor.png rename to bobrevamp/graphics/icons/thorium-reactor.png diff --git a/bobrevamp_1.1.6/graphics/icons/void.png b/bobrevamp/graphics/icons/void.png similarity index 100% rename from bobrevamp_1.1.6/graphics/icons/void.png rename to bobrevamp/graphics/icons/void.png diff --git a/bobrevamp/info.json b/bobrevamp/info.json new file mode 100644 index 00000000..b17fa1df --- /dev/null +++ b/bobrevamp/info.json @@ -0,0 +1,15 @@ +{ + "name": "bobrevamp", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Revamp mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nThis mod changes some base game areas to better fit with Bob's Mods.\nRocket fuel has been changed to be based on Hydrazine.\nReworked all the rocket based recipes\nA rework to how you get Sulfur and Sulfuric acid.\nSplits up the oil chain a little, Pumpjack, Chemical plant and Oil refinery are on their own technologies, instead of all in one go.\n\nIntended to be used with the full Bob's Mods set." +} diff --git a/bobrevamp_1.1.6/locale/en/bobrevamp.cfg b/bobrevamp/locale/en/bobrevamp.cfg similarity index 100% rename from bobrevamp_1.1.6/locale/en/bobrevamp.cfg rename to bobrevamp/locale/en/bobrevamp.cfg diff --git a/bobrevamp_1.1.6/migrations/bobrevamp_0.15.1-rocket-fuel.lua b/bobrevamp/migrations/bobrevamp_0.15.1-rocket-fuel.lua similarity index 100% rename from bobrevamp_1.1.6/migrations/bobrevamp_0.15.1-rocket-fuel.lua rename to bobrevamp/migrations/bobrevamp_0.15.1-rocket-fuel.lua diff --git a/bobrevamp_1.1.6/migrations/bobrevamp_0.15.2-rocket-fuel.lua b/bobrevamp/migrations/bobrevamp_0.15.2-rocket-fuel.lua similarity index 100% rename from bobrevamp_1.1.6/migrations/bobrevamp_0.15.2-rocket-fuel.lua rename to bobrevamp/migrations/bobrevamp_0.15.2-rocket-fuel.lua diff --git a/bobrevamp_1.1.6/prototypes/hard-mode-updates.lua b/bobrevamp/prototypes/hard-mode-updates.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/hard-mode-updates.lua rename to bobrevamp/prototypes/hard-mode-updates.lua diff --git a/bobrevamp_1.1.6/prototypes/hard-mode.lua b/bobrevamp/prototypes/hard-mode.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/hard-mode.lua rename to bobrevamp/prototypes/hard-mode.lua diff --git a/bobrevamp_1.1.6/prototypes/rocket-fuel-updates.lua b/bobrevamp/prototypes/rocket-fuel-updates.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/rocket-fuel-updates.lua rename to bobrevamp/prototypes/rocket-fuel-updates.lua diff --git a/bobrevamp_1.1.6/prototypes/rocket-fuel.lua b/bobrevamp/prototypes/rocket-fuel.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/rocket-fuel.lua rename to bobrevamp/prototypes/rocket-fuel.lua diff --git a/bobrevamp_1.1.6/prototypes/rocket-parts-updates.lua b/bobrevamp/prototypes/rocket-parts-updates.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/rocket-parts-updates.lua rename to bobrevamp/prototypes/rocket-parts-updates.lua diff --git a/bobrevamp_1.1.6/prototypes/rocket-parts.lua b/bobrevamp/prototypes/rocket-parts.lua similarity index 97% rename from bobrevamp_1.1.6/prototypes/rocket-parts.lua rename to bobrevamp/prototypes/rocket-parts.lua index 819a0347..f48de063 100644 --- a/bobrevamp_1.1.6/prototypes/rocket-parts.lua +++ b/bobrevamp/prototypes/rocket-parts.lua @@ -40,6 +40,7 @@ data:extend({ prerequisites = { "steel-processing", "plastics", + "production-science-pack", }, unit = { count = 200, diff --git a/bobrevamp_1.1.6/prototypes/rtg-updates.lua b/bobrevamp/prototypes/rtg-updates.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/rtg-updates.lua rename to bobrevamp/prototypes/rtg-updates.lua diff --git a/bobrevamp_1.1.6/prototypes/rtg.lua b/bobrevamp/prototypes/rtg.lua similarity index 100% rename from bobrevamp_1.1.6/prototypes/rtg.lua rename to bobrevamp/prototypes/rtg.lua diff --git a/bobrevamp_1.1.6/settings.lua b/bobrevamp/settings.lua similarity index 100% rename from bobrevamp_1.1.6/settings.lua rename to bobrevamp/settings.lua diff --git a/bobrevamp_1.1.6/thumbnail.png b/bobrevamp/thumbnail.png similarity index 100% rename from bobrevamp_1.1.6/thumbnail.png rename to bobrevamp/thumbnail.png diff --git a/bobrevamp_1.1.6/info.json b/bobrevamp_1.1.6/info.json deleted file mode 100644 index 56622283..00000000 --- a/bobrevamp_1.1.6/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bobrevamp", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Revamp mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nThis mod changes some base game areas to better fit with Bob's Mods.\nRocket fuel has been changed to be based on Hydrazine.\nReworked all the rocket based recipes\nA rework to how you get Sulfur and Sulfuric acid.\nSplits up the oil chain a little, Pumpjack, Chemical plant and Oil refinery are on their own technologies, instead of all in one go.\n\nIntended to be used with the full Bob's Mods set." -} diff --git a/bobtech_1.1.6/changelog.txt b/bobtech/changelog.txt similarity index 100% rename from bobtech_1.1.6/changelog.txt rename to bobtech/changelog.txt diff --git a/bobtech_1.1.6/control.lua b/bobtech/control.lua similarity index 100% rename from bobtech_1.1.6/control.lua rename to bobtech/control.lua diff --git a/bobtech_1.1.6/data-final-fixes.lua b/bobtech/data-final-fixes.lua similarity index 100% rename from bobtech_1.1.6/data-final-fixes.lua rename to bobtech/data-final-fixes.lua diff --git a/bobtech_1.1.6/data-updates.lua b/bobtech/data-updates.lua similarity index 100% rename from bobtech_1.1.6/data-updates.lua rename to bobtech/data-updates.lua diff --git a/bobtech_1.1.6/data.lua b/bobtech/data.lua similarity index 100% rename from bobtech_1.1.6/data.lua rename to bobtech/data.lua diff --git a/bobtech_1.1.6/graphics/entity/lab/hr-lab-alien.png b/bobtech/graphics/entity/lab/hr-lab-alien.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/hr-lab-alien.png rename to bobtech/graphics/entity/lab/hr-lab-alien.png diff --git a/bobtech_1.1.6/graphics/entity/lab/hr-lab-integration.png b/bobtech/graphics/entity/lab/hr-lab-integration.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/hr-lab-integration.png rename to bobtech/graphics/entity/lab/hr-lab-integration.png diff --git a/bobtech_1.1.6/graphics/entity/lab/hr-lab-red.png b/bobtech/graphics/entity/lab/hr-lab-red.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/hr-lab-red.png rename to bobtech/graphics/entity/lab/hr-lab-red.png diff --git a/bobtech_1.1.6/graphics/entity/lab/hr-lab-shadow.png b/bobtech/graphics/entity/lab/hr-lab-shadow.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/hr-lab-shadow.png rename to bobtech/graphics/entity/lab/hr-lab-shadow.png diff --git a/bobtech_1.1.6/graphics/entity/lab/hr-lab2.png b/bobtech/graphics/entity/lab/hr-lab2.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/hr-lab2.png rename to bobtech/graphics/entity/lab/hr-lab2.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab-alien-old.png b/bobtech/graphics/entity/lab/lab-alien-old.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab-alien-old.png rename to bobtech/graphics/entity/lab/lab-alien-old.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab-alien.png b/bobtech/graphics/entity/lab/lab-alien.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab-alien.png rename to bobtech/graphics/entity/lab/lab-alien.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab-integration.png b/bobtech/graphics/entity/lab/lab-integration.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab-integration.png rename to bobtech/graphics/entity/lab/lab-integration.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab-red.png b/bobtech/graphics/entity/lab/lab-red.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab-red.png rename to bobtech/graphics/entity/lab/lab-red.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab-shadow.png b/bobtech/graphics/entity/lab/lab-shadow.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab-shadow.png rename to bobtech/graphics/entity/lab/lab-shadow.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab2-old.png b/bobtech/graphics/entity/lab/lab2-old.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab2-old.png rename to bobtech/graphics/entity/lab/lab2-old.png diff --git a/bobtech_1.1.6/graphics/entity/lab/lab2.png b/bobtech/graphics/entity/lab/lab2.png similarity index 100% rename from bobtech_1.1.6/graphics/entity/lab/lab2.png rename to bobtech/graphics/entity/lab/lab2.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-blue.png b/bobtech/graphics/icons/alien-science-pack-blue.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-blue.png rename to bobtech/graphics/icons/alien-science-pack-blue.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-green.png b/bobtech/graphics/icons/alien-science-pack-green.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-green.png rename to bobtech/graphics/icons/alien-science-pack-green.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-orange.png b/bobtech/graphics/icons/alien-science-pack-orange.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-orange.png rename to bobtech/graphics/icons/alien-science-pack-orange.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-purple.png b/bobtech/graphics/icons/alien-science-pack-purple.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-purple.png rename to bobtech/graphics/icons/alien-science-pack-purple.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-red.png b/bobtech/graphics/icons/alien-science-pack-red.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-red.png rename to bobtech/graphics/icons/alien-science-pack-red.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack-yellow.png b/bobtech/graphics/icons/alien-science-pack-yellow.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack-yellow.png rename to bobtech/graphics/icons/alien-science-pack-yellow.png diff --git a/bobtech_1.1.6/graphics/icons/alien-science-pack.png b/bobtech/graphics/icons/alien-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-science-pack.png rename to bobtech/graphics/icons/alien-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/alien-technology.png b/bobtech/graphics/icons/alien-technology.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/alien-technology.png rename to bobtech/graphics/icons/alien-technology.png diff --git a/bobtech_1.1.6/graphics/icons/high-tech-science-pack.png b/bobtech/graphics/icons/high-tech-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/high-tech-science-pack.png rename to bobtech/graphics/icons/high-tech-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/lab-alien.png b/bobtech/graphics/icons/lab-alien.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/lab-alien.png rename to bobtech/graphics/icons/lab-alien.png diff --git a/bobtech_1.1.6/graphics/icons/lab-red.png b/bobtech/graphics/icons/lab-red.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/lab-red.png rename to bobtech/graphics/icons/lab-red.png diff --git a/bobtech_1.1.6/graphics/icons/lab-technology.png b/bobtech/graphics/icons/lab-technology.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/lab-technology.png rename to bobtech/graphics/icons/lab-technology.png diff --git a/bobtech_1.1.6/graphics/icons/lab2-technology.png b/bobtech/graphics/icons/lab2-technology.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/lab2-technology.png rename to bobtech/graphics/icons/lab2-technology.png diff --git a/bobtech_1.1.6/graphics/icons/lab2.png b/bobtech/graphics/icons/lab2.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/lab2.png rename to bobtech/graphics/icons/lab2.png diff --git a/bobtech_1.1.6/graphics/icons/logistic-science-pack-technology.png b/bobtech/graphics/icons/logistic-science-pack-technology.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/logistic-science-pack-technology.png rename to bobtech/graphics/icons/logistic-science-pack-technology.png diff --git a/bobtech_1.1.6/graphics/icons/logistic-science-pack.png b/bobtech/graphics/icons/logistic-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/logistic-science-pack.png rename to bobtech/graphics/icons/logistic-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/military-science-pack.png b/bobtech/graphics/icons/military-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/military-science-pack.png rename to bobtech/graphics/icons/military-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/production-science-pack.png b/bobtech/graphics/icons/production-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/production-science-pack.png rename to bobtech/graphics/icons/production-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/red-science-pack-technology.png b/bobtech/graphics/icons/red-science-pack-technology.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/red-science-pack-technology.png rename to bobtech/graphics/icons/red-science-pack-technology.png diff --git a/bobtech_1.1.6/graphics/icons/science-pack-1.png b/bobtech/graphics/icons/science-pack-1.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/science-pack-1.png rename to bobtech/graphics/icons/science-pack-1.png diff --git a/bobtech_1.1.6/graphics/icons/science-pack-2.png b/bobtech/graphics/icons/science-pack-2.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/science-pack-2.png rename to bobtech/graphics/icons/science-pack-2.png diff --git a/bobtech_1.1.6/graphics/icons/science-pack-3.png b/bobtech/graphics/icons/science-pack-3.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/science-pack-3.png rename to bobtech/graphics/icons/science-pack-3.png diff --git a/bobtech_1.1.6/graphics/icons/science-pack-4.png b/bobtech/graphics/icons/science-pack-4.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/science-pack-4.png rename to bobtech/graphics/icons/science-pack-4.png diff --git a/bobtech_1.1.6/graphics/icons/science-pack-gold.png b/bobtech/graphics/icons/science-pack-gold.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/science-pack-gold.png rename to bobtech/graphics/icons/science-pack-gold.png diff --git a/bobtech_1.1.6/graphics/icons/space-science-pack.png b/bobtech/graphics/icons/space-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/space-science-pack.png rename to bobtech/graphics/icons/space-science-pack.png diff --git a/bobtech_1.1.6/graphics/icons/steam-science-pack.png b/bobtech/graphics/icons/steam-science-pack.png similarity index 100% rename from bobtech_1.1.6/graphics/icons/steam-science-pack.png rename to bobtech/graphics/icons/steam-science-pack.png diff --git a/bobtech/info.json b/bobtech/info.json new file mode 100644 index 00000000..25429f95 --- /dev/null +++ b/bobtech/info.json @@ -0,0 +1,16 @@ +{ + "name": "bobtech", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Technology mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobenemies >= 1.2.0", + "? DiscoScience" + ], + "description": "Requires Bob's functions library mod.\n\nAdds a Lab MK2\nAdds Logistic science pack, and changes logistic based technologies to cost this new science pack.\nIf Alien artifacts are enabled from Bob's Enemies mod, an Alien lab and alien science packs are added, plus Science pack Gold made from Science packs 1, 2, 3 and Military.\nScience pack ingredients are also changed around, to include some more Bob's Mods resources.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobtech_1.1.6/locale/en/bobtech.cfg b/bobtech/locale/en/bobtech.cfg similarity index 100% rename from bobtech_1.1.6/locale/en/bobtech.cfg rename to bobtech/locale/en/bobtech.cfg diff --git a/bobtech_1.1.6/migrations/bobtech_0.17.6.json b/bobtech/migrations/bobtech_0.17.6.json similarity index 100% rename from bobtech_1.1.6/migrations/bobtech_0.17.6.json rename to bobtech/migrations/bobtech_0.17.6.json diff --git a/bobtech_1.1.6/prototypes/entity/entity-alien.lua b/bobtech/prototypes/entity/entity-alien.lua similarity index 98% rename from bobtech_1.1.6/prototypes/entity/entity-alien.lua rename to bobtech/prototypes/entity/entity-alien.lua index 1b453517..33515a12 100644 --- a/bobtech_1.1.6/prototypes/entity/entity-alien.lua +++ b/bobtech/prototypes/entity/entity-alien.lua @@ -164,8 +164,6 @@ then }, module_specification = { module_slots = 3, - max_entity_info_module_icons_per_row = 3, - max_entity_info_module_icon_rows = 1, module_info_icon_shift = { 0, 0.9 }, }, fast_replaceable_group = "lab", diff --git a/bobtech/prototypes/entity/entity.lua b/bobtech/prototypes/entity/entity.lua new file mode 100644 index 00000000..bd09912a --- /dev/null +++ b/bobtech/prototypes/entity/entity.lua @@ -0,0 +1,334 @@ +data.raw["lab"]["lab"].fast_replaceable_group = "lab" + +data:extend({ + { + type = "lab", + name = "lab-2", + icon = "__bobtech__/graphics/icons/lab2.png", + icon_size = 32, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 0.2, result = "lab-2" }, + max_health = 250, + corpse = "lab-remnants", + dying_explosion = "medium-explosion", + collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + light = { intensity = 0.75, size = 8 }, + on_animation = { + layers = { + { + filename = "__bobtech__/graphics/entity/lab/lab2.png", + width = 98, + height = 87, + frame_count = 33, + line_length = 11, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 1.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab2.png", + width = 194, + height = 174, + frame_count = 33, + line_length = 11, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 1.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-integration.png", + width = 122, + height = 81, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 15.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", + width = 242, + height = 162, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 15.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", + width = 122, + height = 68, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", + width = 242, + height = 136, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(13, 11), + scale = 0.5, + draw_as_shadow = true, + }, + }, + }, + }, + off_animation = { + layers = { + { + filename = "__bobtech__/graphics/entity/lab/lab2.png", + width = 98, + height = 87, + frame_count = 1, + shift = util.by_pixel(0, 1.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab2.png", + width = 194, + height = 174, + frame_count = 1, + shift = util.by_pixel(0, 1.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-integration.png", + width = 122, + height = 81, + frame_count = 1, + shift = util.by_pixel(0, 15.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", + width = 242, + height = 162, + frame_count = 1, + shift = util.by_pixel(0, 15.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", + width = 122, + height = 68, + frame_count = 1, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", + width = 242, + height = 136, + frame_count = 1, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + scale = 0.5, + }, + }, + }, + }, + working_sound = { + sound = { + filename = "__base__/sound/lab.ogg", + volume = 0.7, + }, + apparent_volume = 1, + }, + energy_source = { + type = "electric", + usage_priority = "secondary-input", + }, + energy_usage = "75kW", + researching_speed = 2, + inputs = { + "automation-science-pack", + "logistic-science-pack", + "chemical-science-pack", + "military-science-pack", + "production-science-pack", + "utility-science-pack", + "space-science-pack", + }, + module_specification = { + module_slots = 4, + module_info_icon_shift = { 0, 0.9 }, + }, + fast_replaceable_group = "lab", + }, +}) + +if DiscoScience and DiscoScience.prepareLab then + DiscoScience.prepareLab(data.raw["lab"]["lab-2"]) +end + +if settings.startup["bobmods-burnerphase"].value == true then + data:extend({ + { + type = "lab", + name = "burner-lab", + icon = "__bobtech__/graphics/icons/lab-red.png", + icon_size = 32, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 0.1, result = "burner-lab" }, + max_health = 100, + corpse = "lab-remnants", + dying_explosion = "medium-explosion", + collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, + selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, + light = { intensity = 0.75, size = 8, color = { r = 1.0, g = 1.0, b = 1.0 } }, + on_animation = { + layers = { + { + filename = "__bobtech__/graphics/entity/lab/lab-red.png", + width = 98, + height = 87, + frame_count = 33, + line_length = 11, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 1.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-red.png", + width = 194, + height = 174, + frame_count = 33, + line_length = 11, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 1.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-integration.png", + width = 122, + height = 81, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 15.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", + width = 242, + height = 162, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(0, 15.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", + width = 122, + height = 68, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", + width = 242, + height = 136, + frame_count = 1, + line_length = 1, + repeat_count = 33, + animation_speed = 1 / 3, + shift = util.by_pixel(13, 11), + scale = 0.5, + draw_as_shadow = true, + }, + }, + }, + }, + off_animation = { + layers = { + { + filename = "__bobtech__/graphics/entity/lab/lab-red.png", + width = 98, + height = 87, + frame_count = 1, + shift = util.by_pixel(0, 1.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-red.png", + width = 194, + height = 174, + frame_count = 1, + shift = util.by_pixel(0, 1.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-integration.png", + width = 122, + height = 81, + frame_count = 1, + shift = util.by_pixel(0, 15.5), + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", + width = 242, + height = 162, + frame_count = 1, + shift = util.by_pixel(0, 15.5), + scale = 0.5, + }, + }, + { + filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", + width = 122, + height = 68, + frame_count = 1, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + hr_version = { + filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", + width = 242, + height = 136, + frame_count = 1, + shift = util.by_pixel(13, 11), + draw_as_shadow = true, + scale = 0.5, + }, + }, + }, + }, + working_sound = { + sound = { + filename = "__base__/sound/lab.ogg", + volume = 0.7, + }, + apparent_volume = 1, + }, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + energy_source = { + type = "burner", + fuel_category = "chemical", + effectivity = 1, + fuel_inventory_size = 1, + emissions_per_minute = 10, + smoke = { + { + name = "smoke", + deviation = { 0.1, 0.1 }, + frequency = 3, + }, + }, + }, + energy_usage = "90kW", + researching_speed = 0.75, + inputs = {}, + fast_replaceable_group = "lab", + }, + }) + + if DiscoScience and DiscoScience.prepareLab then + DiscoScience.prepareLab(data.raw["lab"]["burner-lab"]) + end +end diff --git a/bobtech_1.1.6/prototypes/item/item-alien.lua b/bobtech/prototypes/item/item-alien.lua similarity index 100% rename from bobtech_1.1.6/prototypes/item/item-alien.lua rename to bobtech/prototypes/item/item-alien.lua diff --git a/bobtech_1.1.6/prototypes/item/item-updates.lua b/bobtech/prototypes/item/item-updates.lua similarity index 100% rename from bobtech_1.1.6/prototypes/item/item-updates.lua rename to bobtech/prototypes/item/item-updates.lua diff --git a/bobtech_1.1.6/prototypes/item/item.lua b/bobtech/prototypes/item/item.lua similarity index 100% rename from bobtech_1.1.6/prototypes/item/item.lua rename to bobtech/prototypes/item/item.lua diff --git a/bobtech_1.1.6/prototypes/productivity-limitations.lua b/bobtech/prototypes/productivity-limitations.lua similarity index 100% rename from bobtech_1.1.6/prototypes/productivity-limitations.lua rename to bobtech/prototypes/productivity-limitations.lua diff --git a/bobtech_1.1.6/prototypes/recipe/recipe-alien.lua b/bobtech/prototypes/recipe/recipe-alien.lua similarity index 100% rename from bobtech_1.1.6/prototypes/recipe/recipe-alien.lua rename to bobtech/prototypes/recipe/recipe-alien.lua diff --git a/bobtech_1.1.6/prototypes/recipe/recipe-updates.lua b/bobtech/prototypes/recipe/recipe-updates.lua similarity index 100% rename from bobtech_1.1.6/prototypes/recipe/recipe-updates.lua rename to bobtech/prototypes/recipe/recipe-updates.lua diff --git a/bobtech_1.1.6/prototypes/recipe/recipe.lua b/bobtech/prototypes/recipe/recipe.lua similarity index 100% rename from bobtech_1.1.6/prototypes/recipe/recipe.lua rename to bobtech/prototypes/recipe/recipe.lua diff --git a/bobtech_1.1.6/prototypes/technology/technology-alien.lua b/bobtech/prototypes/technology/technology-alien.lua similarity index 100% rename from bobtech_1.1.6/prototypes/technology/technology-alien.lua rename to bobtech/prototypes/technology/technology-alien.lua diff --git a/bobtech_1.1.6/prototypes/technology/technology-updates.lua b/bobtech/prototypes/technology/technology-updates.lua similarity index 100% rename from bobtech_1.1.6/prototypes/technology/technology-updates.lua rename to bobtech/prototypes/technology/technology-updates.lua diff --git a/bobtech_1.1.6/prototypes/technology/technology.lua b/bobtech/prototypes/technology/technology.lua similarity index 100% rename from bobtech_1.1.6/prototypes/technology/technology.lua rename to bobtech/prototypes/technology/technology.lua diff --git a/bobtech_1.1.6/settings.lua b/bobtech/settings.lua similarity index 100% rename from bobtech_1.1.6/settings.lua rename to bobtech/settings.lua diff --git a/bobtech_1.1.6/thumbnail.png b/bobtech/thumbnail.png similarity index 100% rename from bobtech_1.1.6/thumbnail.png rename to bobtech/thumbnail.png diff --git a/bobtech_1.1.6/info.json b/bobtech_1.1.6/info.json deleted file mode 100644 index 0673e89f..00000000 --- a/bobtech_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "bobtech", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Technology mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobenemies >= 1.1.6", - "? DiscoScience" - ], - "description": "Requires Bob's functions library mod.\n\nAdds a Lab MK2\nAdds Logistic science pack, and changes logistic based technologies to cost this new science pack.\nIf Alien artifacts are enabled from Bob's Enemies mod, an Alien lab and alien science packs are added, plus Science pack Gold made from Science packs 1, 2, 3 and Military.\nScience pack ingredients are also changed around, to include some more Bob's Mods resources.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobtech_1.1.6/prototypes/entity/entity.lua b/bobtech_1.1.6/prototypes/entity/entity.lua deleted file mode 100644 index 8c648cb4..00000000 --- a/bobtech_1.1.6/prototypes/entity/entity.lua +++ /dev/null @@ -1,336 +0,0 @@ -data.raw["lab"]["lab"].fast_replaceable_group = "lab" - -data:extend({ - { - type = "lab", - name = "lab-2", - icon = "__bobtech__/graphics/icons/lab2.png", - icon_size = 32, - flags = { "placeable-player", "player-creation" }, - minable = { mining_time = 0.2, result = "lab-2" }, - max_health = 250, - corpse = "lab-remnants", - dying_explosion = "medium-explosion", - collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, - selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, - light = { intensity = 0.75, size = 8 }, - on_animation = { - layers = { - { - filename = "__bobtech__/graphics/entity/lab/lab2.png", - width = 98, - height = 87, - frame_count = 33, - line_length = 11, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 1.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab2.png", - width = 194, - height = 174, - frame_count = 33, - line_length = 11, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 1.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-integration.png", - width = 122, - height = 81, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 15.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", - width = 242, - height = 162, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 15.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", - width = 122, - height = 68, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", - width = 242, - height = 136, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(13, 11), - scale = 0.5, - draw_as_shadow = true, - }, - }, - }, - }, - off_animation = { - layers = { - { - filename = "__bobtech__/graphics/entity/lab/lab2.png", - width = 98, - height = 87, - frame_count = 1, - shift = util.by_pixel(0, 1.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab2.png", - width = 194, - height = 174, - frame_count = 1, - shift = util.by_pixel(0, 1.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-integration.png", - width = 122, - height = 81, - frame_count = 1, - shift = util.by_pixel(0, 15.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", - width = 242, - height = 162, - frame_count = 1, - shift = util.by_pixel(0, 15.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", - width = 122, - height = 68, - frame_count = 1, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", - width = 242, - height = 136, - frame_count = 1, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - scale = 0.5, - }, - }, - }, - }, - working_sound = { - sound = { - filename = "__base__/sound/lab.ogg", - volume = 0.7, - }, - apparent_volume = 1, - }, - energy_source = { - type = "electric", - usage_priority = "secondary-input", - }, - energy_usage = "75kW", - researching_speed = 2, - inputs = { - "automation-science-pack", - "logistic-science-pack", - "chemical-science-pack", - "military-science-pack", - "production-science-pack", - "utility-science-pack", - "space-science-pack", - }, - module_specification = { - module_slots = 4, - max_entity_info_module_icons_per_row = 4, - max_entity_info_module_icon_rows = 1, - module_info_icon_shift = { 0, 0.9 }, - }, - fast_replaceable_group = "lab", - }, -}) - -if DiscoScience and DiscoScience.prepareLab then - DiscoScience.prepareLab(data.raw["lab"]["lab-2"]) -end - -if settings.startup["bobmods-burnerphase"].value == true then - data:extend({ - { - type = "lab", - name = "burner-lab", - icon = "__bobtech__/graphics/icons/lab-red.png", - icon_size = 32, - flags = { "placeable-player", "player-creation" }, - minable = { mining_time = 0.1, result = "burner-lab" }, - max_health = 100, - corpse = "lab-remnants", - dying_explosion = "medium-explosion", - collision_box = { { -1.2, -1.2 }, { 1.2, 1.2 } }, - selection_box = { { -1.5, -1.5 }, { 1.5, 1.5 } }, - light = { intensity = 0.75, size = 8, color = { r = 1.0, g = 1.0, b = 1.0 } }, - on_animation = { - layers = { - { - filename = "__bobtech__/graphics/entity/lab/lab-red.png", - width = 98, - height = 87, - frame_count = 33, - line_length = 11, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 1.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-red.png", - width = 194, - height = 174, - frame_count = 33, - line_length = 11, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 1.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-integration.png", - width = 122, - height = 81, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 15.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", - width = 242, - height = 162, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(0, 15.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", - width = 122, - height = 68, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", - width = 242, - height = 136, - frame_count = 1, - line_length = 1, - repeat_count = 33, - animation_speed = 1 / 3, - shift = util.by_pixel(13, 11), - scale = 0.5, - draw_as_shadow = true, - }, - }, - }, - }, - off_animation = { - layers = { - { - filename = "__bobtech__/graphics/entity/lab/lab-red.png", - width = 98, - height = 87, - frame_count = 1, - shift = util.by_pixel(0, 1.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-red.png", - width = 194, - height = 174, - frame_count = 1, - shift = util.by_pixel(0, 1.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-integration.png", - width = 122, - height = 81, - frame_count = 1, - shift = util.by_pixel(0, 15.5), - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-integration.png", - width = 242, - height = 162, - frame_count = 1, - shift = util.by_pixel(0, 15.5), - scale = 0.5, - }, - }, - { - filename = "__bobtech__/graphics/entity/lab/lab-shadow.png", - width = 122, - height = 68, - frame_count = 1, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - hr_version = { - filename = "__bobtech__/graphics/entity/lab/hr-lab-shadow.png", - width = 242, - height = 136, - frame_count = 1, - shift = util.by_pixel(13, 11), - draw_as_shadow = true, - scale = 0.5, - }, - }, - }, - }, - working_sound = { - sound = { - filename = "__base__/sound/lab.ogg", - volume = 0.7, - }, - apparent_volume = 1, - }, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - energy_source = { - type = "burner", - fuel_category = "chemical", - effectivity = 1, - fuel_inventory_size = 1, - emissions_per_minute = 10, - smoke = { - { - name = "smoke", - deviation = { 0.1, 0.1 }, - frequency = 3, - }, - }, - }, - energy_usage = "90kW", - researching_speed = 0.75, - inputs = {}, - fast_replaceable_group = "lab", - }, - }) - - if DiscoScience and DiscoScience.prepareLab then - DiscoScience.prepareLab(data.raw["lab"]["burner-lab"]) - end -end diff --git a/bobvehicleequipment_1.1.6/changelog.txt b/bobvehicleequipment/changelog.txt similarity index 100% rename from bobvehicleequipment_1.1.6/changelog.txt rename to bobvehicleequipment/changelog.txt diff --git a/bobvehicleequipment_1.1.6/data-updates.lua b/bobvehicleequipment/data-updates.lua similarity index 100% rename from bobvehicleequipment_1.1.6/data-updates.lua rename to bobvehicleequipment/data-updates.lua diff --git a/bobvehicleequipment_1.1.6/data.lua b/bobvehicleequipment/data.lua similarity index 100% rename from bobvehicleequipment_1.1.6/data.lua rename to bobvehicleequipment/data.lua diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-body-amethyst.png b/bobvehicleequipment/graphics/beam/laser-body-amethyst.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-body-amethyst.png rename to bobvehicleequipment/graphics/beam/laser-body-amethyst.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-body-emerald.png b/bobvehicleequipment/graphics/beam/laser-body-emerald.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-body-emerald.png rename to bobvehicleequipment/graphics/beam/laser-body-emerald.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-body-sapphire.png b/bobvehicleequipment/graphics/beam/laser-body-sapphire.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-body-sapphire.png rename to bobvehicleequipment/graphics/beam/laser-body-sapphire.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-body-topaz.png b/bobvehicleequipment/graphics/beam/laser-body-topaz.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-body-topaz.png rename to bobvehicleequipment/graphics/beam/laser-body-topaz.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-body.png b/bobvehicleequipment/graphics/beam/laser-body.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-body.png rename to bobvehicleequipment/graphics/beam/laser-body.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-end-amethyst.png b/bobvehicleequipment/graphics/beam/laser-end-amethyst.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-end-amethyst.png rename to bobvehicleequipment/graphics/beam/laser-end-amethyst.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-end-emerald.png b/bobvehicleequipment/graphics/beam/laser-end-emerald.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-end-emerald.png rename to bobvehicleequipment/graphics/beam/laser-end-emerald.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-end-sapphire.png b/bobvehicleequipment/graphics/beam/laser-end-sapphire.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-end-sapphire.png rename to bobvehicleequipment/graphics/beam/laser-end-sapphire.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-end-topaz.png b/bobvehicleequipment/graphics/beam/laser-end-topaz.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-end-topaz.png rename to bobvehicleequipment/graphics/beam/laser-end-topaz.png diff --git a/bobvehicleequipment_1.1.6/graphics/beam/laser-end.png b/bobvehicleequipment/graphics/beam/laser-end.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/beam/laser-end.png rename to bobvehicleequipment/graphics/beam/laser-end.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-1.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-2.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-3.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-4.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-5.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-6.png b/bobvehicleequipment/graphics/equipment/vehicle-battery-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-battery-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-battery-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-1.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-2.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-3.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-4.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-5.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-6.png b/bobvehicleequipment/graphics/equipment/vehicle-big-turret-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-big-turret-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-big-turret-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-engine.png b/bobvehicleequipment/graphics/equipment/vehicle-engine.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-engine.png rename to bobvehicleequipment/graphics/equipment/vehicle-engine.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-1.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-2.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-3.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-4.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-5.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-6.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-cell-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-cell-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-1.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-2.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-3.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-4.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-5.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-6.png b/bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-fusion-reactor-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-fusion-reactor-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-1.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-2.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-3.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-4.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-5.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-6.png b/bobvehicleequipment/graphics/equipment/vehicle-laser-defense-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-laser-defense-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-laser-defense-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-motor.png b/bobvehicleequipment/graphics/equipment/vehicle-motor.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-motor.png rename to bobvehicleequipment/graphics/equipment/vehicle-motor.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-2.png b/bobvehicleequipment/graphics/equipment/vehicle-roboport-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-roboport-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-3.png b/bobvehicleequipment/graphics/equipment/vehicle-roboport-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-roboport-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-4.png b/bobvehicleequipment/graphics/equipment/vehicle-roboport-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-roboport-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport.png b/bobvehicleequipment/graphics/equipment/vehicle-roboport.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-roboport.png rename to bobvehicleequipment/graphics/equipment/vehicle-roboport.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-1.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-2.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-3.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-4.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-5.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-6.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-7.png b/bobvehicleequipment/graphics/equipment/vehicle-shield-7.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-shield-7.png rename to bobvehicleequipment/graphics/equipment/vehicle-shield-7.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-1.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-1.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-2.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-2.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-3.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-3.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-4.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-4.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-5.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-5.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-6.png b/bobvehicleequipment/graphics/equipment/vehicle-solar-panel-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/equipment/vehicle-solar-panel-6.png rename to bobvehicleequipment/graphics/equipment/vehicle-solar-panel-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/construction-robot-1.png b/bobvehicleequipment/graphics/icons/construction-robot-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/construction-robot-1.png rename to bobvehicleequipment/graphics/icons/construction-robot-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/construction-robot-2.png b/bobvehicleequipment/graphics/icons/construction-robot-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/construction-robot-2.png rename to bobvehicleequipment/graphics/icons/construction-robot-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/construction-robot-3.png b/bobvehicleequipment/graphics/icons/construction-robot-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/construction-robot-3.png rename to bobvehicleequipment/graphics/icons/construction-robot-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/construction-robot-4.png b/bobvehicleequipment/graphics/icons/construction-robot-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/construction-robot-4.png rename to bobvehicleequipment/graphics/icons/construction-robot-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/construction-robot-5.png b/bobvehicleequipment/graphics/icons/construction-robot-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/construction-robot-5.png rename to bobvehicleequipment/graphics/icons/construction-robot-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-2.png b/bobvehicleequipment/graphics/icons/roboport-antenna-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-2.png rename to bobvehicleequipment/graphics/icons/roboport-antenna-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-3.png b/bobvehicleequipment/graphics/icons/roboport-antenna-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-3.png rename to bobvehicleequipment/graphics/icons/roboport-antenna-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-4.png b/bobvehicleequipment/graphics/icons/roboport-antenna-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna-4.png rename to bobvehicleequipment/graphics/icons/roboport-antenna-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna.png b/bobvehicleequipment/graphics/icons/roboport-antenna.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-antenna.png rename to bobvehicleequipment/graphics/icons/roboport-antenna.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-2.png b/bobvehicleequipment/graphics/icons/roboport-chargepad-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-2.png rename to bobvehicleequipment/graphics/icons/roboport-chargepad-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-3.png b/bobvehicleequipment/graphics/icons/roboport-chargepad-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-3.png rename to bobvehicleequipment/graphics/icons/roboport-chargepad-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-4.png b/bobvehicleequipment/graphics/icons/roboport-chargepad-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad-4.png rename to bobvehicleequipment/graphics/icons/roboport-chargepad-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad.png b/bobvehicleequipment/graphics/icons/roboport-chargepad.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/roboport-chargepad.png rename to bobvehicleequipment/graphics/icons/roboport-chargepad.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-1.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-1.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-2.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-2.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-3.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-3.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-4.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-4.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-5.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-5.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-6.png b/bobvehicleequipment/graphics/icons/vehicle-big-turret-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-big-turret-6.png rename to bobvehicleequipment/graphics/icons/vehicle-big-turret-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-1.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-1.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-2.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-2.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-3.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-3.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-4.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-4.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-5.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-5.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-6.png b/bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-fusion-reactor-6.png rename to bobvehicleequipment/graphics/icons/vehicle-fusion-reactor-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-roboport-equipment-base.png b/bobvehicleequipment/graphics/icons/vehicle-roboport-equipment-base.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-roboport-equipment-base.png rename to bobvehicleequipment/graphics/icons/vehicle-roboport-equipment-base.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-1.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-1.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-1.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-1.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-2.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-2.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-2.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-3.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-3.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-3.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-3.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-4.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-4.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-4.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-4.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-5.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-5.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-5.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-5.png diff --git a/bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-6.png b/bobvehicleequipment/graphics/icons/vehicle-solar-panel-6.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/icons/vehicle-solar-panel-6.png rename to bobvehicleequipment/graphics/icons/vehicle-solar-panel-6.png diff --git a/bobvehicleequipment_1.1.6/graphics/particles2.png b/bobvehicleequipment/graphics/particles2.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/particles2.png rename to bobvehicleequipment/graphics/particles2.png diff --git a/bobvehicleequipment_1.1.6/graphics/plasma-explosion.png b/bobvehicleequipment/graphics/plasma-explosion.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/plasma-explosion.png rename to bobvehicleequipment/graphics/plasma-explosion.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/constant-vehicle-equipment.png b/bobvehicleequipment/graphics/technology/constant-vehicle-equipment.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/constant-vehicle-equipment.png rename to bobvehicleequipment/graphics/technology/constant-vehicle-equipment.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-battery.png b/bobvehicleequipment/graphics/technology/vehicle-battery.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-battery.png rename to bobvehicleequipment/graphics/technology/vehicle-battery.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-big-turret.png b/bobvehicleequipment/graphics/technology/vehicle-big-turret.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-big-turret.png rename to bobvehicleequipment/graphics/technology/vehicle-big-turret.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-engine.png b/bobvehicleequipment/graphics/technology/vehicle-engine.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-engine.png rename to bobvehicleequipment/graphics/technology/vehicle-engine.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-fusion-cell.png b/bobvehicleequipment/graphics/technology/vehicle-fusion-cell.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-fusion-cell.png rename to bobvehicleequipment/graphics/technology/vehicle-fusion-cell.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-fusion-reactor.png b/bobvehicleequipment/graphics/technology/vehicle-fusion-reactor.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-fusion-reactor.png rename to bobvehicleequipment/graphics/technology/vehicle-fusion-reactor.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-laser-defense.png b/bobvehicleequipment/graphics/technology/vehicle-laser-defense.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-laser-defense.png rename to bobvehicleequipment/graphics/technology/vehicle-laser-defense.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-motor.png b/bobvehicleequipment/graphics/technology/vehicle-motor.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-motor.png rename to bobvehicleequipment/graphics/technology/vehicle-motor.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-roboport.png b/bobvehicleequipment/graphics/technology/vehicle-roboport.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-roboport.png rename to bobvehicleequipment/graphics/technology/vehicle-roboport.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-shield.png b/bobvehicleequipment/graphics/technology/vehicle-shield.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-shield.png rename to bobvehicleequipment/graphics/technology/vehicle-shield.png diff --git a/bobvehicleequipment_1.1.6/graphics/technology/vehicle-solar-panel.png b/bobvehicleequipment/graphics/technology/vehicle-solar-panel.png similarity index 100% rename from bobvehicleequipment_1.1.6/graphics/technology/vehicle-solar-panel.png rename to bobvehicleequipment/graphics/technology/vehicle-solar-panel.png diff --git a/bobvehicleequipment/info.json b/bobvehicleequipment/info.json new file mode 100644 index 00000000..1e30944d --- /dev/null +++ b/bobvehicleequipment/info.json @@ -0,0 +1,16 @@ +{ + "name": "bobvehicleequipment", + "version": "1.2.0", + "factorio_version": "1.1", + "title": "Bob's Vehicle Equipment mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? boblogistics >= 1.2.0", + "? bobwarfare >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nA range of equipment based on all the modular armor equipment available in base mod.\nUp to 6 tiers on most items.\nEquipment can be used on the Tank, Locomotive, Cargo and Fluid wagons, and the Artillery wagon.\nIf Bob's Logistics mod is installed, the equipment can be used on all train vehicles added by it.\nIf Bob's Warfare mod is installed, the equipment can be used on all tanks and Artillery wagons added by it.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." +} diff --git a/bobvehicleequipment_1.1.6/locale/en/bobvehicleequipment.cfg b/bobvehicleequipment/locale/en/bobvehicleequipment.cfg similarity index 100% rename from bobvehicleequipment_1.1.6/locale/en/bobvehicleequipment.cfg rename to bobvehicleequipment/locale/en/bobvehicleequipment.cfg diff --git a/bobvehicleequipment_1.1.6/prototypes/battery.lua b/bobvehicleequipment/prototypes/battery.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/battery.lua rename to bobvehicleequipment/prototypes/battery.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/beams.lua b/bobvehicleequipment/prototypes/beams.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/beams.lua rename to bobvehicleequipment/prototypes/beams.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/belt-immunity.lua b/bobvehicleequipment/prototypes/belt-immunity.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/belt-immunity.lua rename to bobvehicleequipment/prototypes/belt-immunity.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/category.lua b/bobvehicleequipment/prototypes/category.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/category.lua rename to bobvehicleequipment/prototypes/category.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/entities.lua b/bobvehicleequipment/prototypes/entities.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/entities.lua rename to bobvehicleequipment/prototypes/entities.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/equipment-grid.lua b/bobvehicleequipment/prototypes/equipment-grid.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/equipment-grid.lua rename to bobvehicleequipment/prototypes/equipment-grid.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/fusion-cell.lua b/bobvehicleequipment/prototypes/fusion-cell.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/fusion-cell.lua rename to bobvehicleequipment/prototypes/fusion-cell.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/generator.lua b/bobvehicleequipment/prototypes/generator.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/generator.lua rename to bobvehicleequipment/prototypes/generator.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/laser-defense.lua b/bobvehicleequipment/prototypes/laser-defense.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/laser-defense.lua rename to bobvehicleequipment/prototypes/laser-defense.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/plasma-defense.lua b/bobvehicleequipment/prototypes/plasma-defense.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/plasma-defense.lua rename to bobvehicleequipment/prototypes/plasma-defense.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/projectiles.lua b/bobvehicleequipment/prototypes/projectiles.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/projectiles.lua rename to bobvehicleequipment/prototypes/projectiles.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/recipe-updates.lua b/bobvehicleequipment/prototypes/recipe-updates.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/recipe-updates.lua rename to bobvehicleequipment/prototypes/recipe-updates.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/roboport.lua b/bobvehicleequipment/prototypes/roboport.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/roboport.lua rename to bobvehicleequipment/prototypes/roboport.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/shield.lua b/bobvehicleequipment/prototypes/shield.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/shield.lua rename to bobvehicleequipment/prototypes/shield.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/solar-panel.lua b/bobvehicleequipment/prototypes/solar-panel.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/solar-panel.lua rename to bobvehicleequipment/prototypes/solar-panel.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/speed.lua b/bobvehicleequipment/prototypes/speed.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/speed.lua rename to bobvehicleequipment/prototypes/speed.lua diff --git a/bobvehicleequipment_1.1.6/prototypes/technology-updates.lua b/bobvehicleequipment/prototypes/technology-updates.lua similarity index 100% rename from bobvehicleequipment_1.1.6/prototypes/technology-updates.lua rename to bobvehicleequipment/prototypes/technology-updates.lua diff --git a/bobvehicleequipment_1.1.6/settings.lua b/bobvehicleequipment/settings.lua similarity index 100% rename from bobvehicleequipment_1.1.6/settings.lua rename to bobvehicleequipment/settings.lua diff --git a/bobvehicleequipment_1.1.6/thumbnail.png b/bobvehicleequipment/thumbnail.png similarity index 100% rename from bobvehicleequipment_1.1.6/thumbnail.png rename to bobvehicleequipment/thumbnail.png diff --git a/bobvehicleequipment_1.1.6/info.json b/bobvehicleequipment_1.1.6/info.json deleted file mode 100644 index 94c08d52..00000000 --- a/bobvehicleequipment_1.1.6/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "bobvehicleequipment", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Vehicle Equipment mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? boblogistics >= 1.1.6", - "? bobwarfare >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nA range of equipment based on all the modular armor equipment available in base mod.\nUp to 6 tiers on most items.\nEquipment can be used on the Tank, Locomotive, Cargo and Fluid wagons, and the Artillery wagon.\nIf Bob's Logistics mod is installed, the equipment can be used on all train vehicles added by it.\nIf Bob's Warfare mod is installed, the equipment can be used on all tanks and Artillery wagons added by it.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set." -} diff --git a/bobwarfare_1.1.6/changelog.txt b/bobwarfare/changelog.txt similarity index 100% rename from bobwarfare_1.1.6/changelog.txt rename to bobwarfare/changelog.txt diff --git a/bobwarfare/data-updates.lua b/bobwarfare/data-updates.lua new file mode 100644 index 00000000..04bc7f3d --- /dev/null +++ b/bobwarfare/data-updates.lua @@ -0,0 +1,49 @@ +require("prototypes.overides") +require("prototypes.recipe.recipe-updates") +require("prototypes.technology.technology-updates") +require("prototypes.productivity-limitations") + +require("prototypes.robots-updates") +require("prototypes.train-updates") +require("prototypes.recipe.drone-updates") +require("prototypes.spidertron-updates") + +if settings.startup["bobmods-warfare-drainlesslaserturrets"].value == true then + for index, turret in pairs(data.raw["electric-turret"]) do + turret.energy_source.drain = "0W" + end +end + +table.insert(data.raw.car.tank.resistances, { type = "plasma", decrease = 15, percent = 50 }) + +if settings.startup["bobmods-warfare-vehicleflamethrowerstartsfires"].value == true then + data.raw.ammo["flamethrower-ammo"].ammo_type = { + { + category = "flamethrower", + clamp_position = true, + source_type = "default", + target_type = "position", + action = { + type = "direct", + action_delivery = { + type = "stream", + stream = "handheld-flamethrower-fire-stream", + }, + }, + }, + { + category = "flamethrower", + clamp_position = true, + source_type = "vehicle", + target_type = "position", + consumption_modifier = 1.125, + action = { + type = "direct", + action_delivery = { + type = "stream", + stream = "flamethrower-fire-stream", + }, + }, + }, + } +end diff --git a/bobwarfare_1.1.6/data.lua b/bobwarfare/data.lua similarity index 100% rename from bobwarfare_1.1.6/data.lua rename to bobwarfare/data.lua diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-body-amethyst.png b/bobwarfare/graphics/entities/beam/laser-body-amethyst.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-body-amethyst.png rename to bobwarfare/graphics/entities/beam/laser-body-amethyst.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-body-emerald.png b/bobwarfare/graphics/entities/beam/laser-body-emerald.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-body-emerald.png rename to bobwarfare/graphics/entities/beam/laser-body-emerald.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-body-sapphire.png b/bobwarfare/graphics/entities/beam/laser-body-sapphire.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-body-sapphire.png rename to bobwarfare/graphics/entities/beam/laser-body-sapphire.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-body-topaz.png b/bobwarfare/graphics/entities/beam/laser-body-topaz.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-body-topaz.png rename to bobwarfare/graphics/entities/beam/laser-body-topaz.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-body.png b/bobwarfare/graphics/entities/beam/laser-body.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-body.png rename to bobwarfare/graphics/entities/beam/laser-body.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-end-amethyst.png b/bobwarfare/graphics/entities/beam/laser-end-amethyst.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-end-amethyst.png rename to bobwarfare/graphics/entities/beam/laser-end-amethyst.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-end-emerald.png b/bobwarfare/graphics/entities/beam/laser-end-emerald.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-end-emerald.png rename to bobwarfare/graphics/entities/beam/laser-end-emerald.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-end-sapphire.png b/bobwarfare/graphics/entities/beam/laser-end-sapphire.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-end-sapphire.png rename to bobwarfare/graphics/entities/beam/laser-end-sapphire.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-end-topaz.png b/bobwarfare/graphics/entities/beam/laser-end-topaz.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-end-topaz.png rename to bobwarfare/graphics/entities/beam/laser-end-topaz.png diff --git a/bobwarfare_1.1.6/graphics/entities/beam/laser-end.png b/bobwarfare/graphics/entities/beam/laser-end.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/beam/laser-end.png rename to bobwarfare/graphics/entities/beam/laser-end.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-bubble.png b/bobwarfare/graphics/entities/laser-bubble.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-bubble.png rename to bobwarfare/graphics/entities/laser-bubble.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-8.png b/bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-8.png rename to bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-mask-8.png b/bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-mask-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-mask-8.png rename to bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-mask-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-shadow-8.png b/bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-shadow-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/hr-laser-turret-folded-shadow-8.png rename to bobwarfare/graphics/entities/laser-turret/hr-laser-turret-folded-shadow-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-8.png b/bobwarfare/graphics/entities/laser-turret/laser-turret-folded-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-8.png rename to bobwarfare/graphics/entities/laser-turret/laser-turret-folded-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-mask-8.png b/bobwarfare/graphics/entities/laser-turret/laser-turret-folded-mask-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-mask-8.png rename to bobwarfare/graphics/entities/laser-turret/laser-turret-folded-mask-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-shadow-8.png b/bobwarfare/graphics/entities/laser-turret/laser-turret-folded-shadow-8.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/laser-turret/laser-turret-folded-shadow-8.png rename to bobwarfare/graphics/entities/laser-turret/laser-turret-folded-shadow-8.png diff --git a/bobwarfare_1.1.6/graphics/entities/particles2.png b/bobwarfare/graphics/entities/particles2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/particles2.png rename to bobwarfare/graphics/entities/particles2.png diff --git a/bobwarfare_1.1.6/graphics/entities/plasma-explosion.png b/bobwarfare/graphics/entities/plasma-explosion.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/plasma-explosion.png rename to bobwarfare/graphics/entities/plasma-explosion.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-green.png b/bobwarfare/graphics/entities/projectiles/acid-projectile-green.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-green.png rename to bobwarfare/graphics/entities/projectiles/acid-projectile-green.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-purple.png b/bobwarfare/graphics/entities/projectiles/acid-projectile-purple.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-purple.png rename to bobwarfare/graphics/entities/projectiles/acid-projectile-purple.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-red.png b/bobwarfare/graphics/entities/projectiles/acid-projectile-red.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-red.png rename to bobwarfare/graphics/entities/projectiles/acid-projectile-red.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-shadow.png b/bobwarfare/graphics/entities/projectiles/acid-projectile-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-shadow.png rename to bobwarfare/graphics/entities/projectiles/acid-projectile-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-yellow.png b/bobwarfare/graphics/entities/projectiles/acid-projectile-yellow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-projectile-yellow.png rename to bobwarfare/graphics/entities/projectiles/acid-projectile-yellow.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/acid-rocket.png b/bobwarfare/graphics/entities/projectiles/acid-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/acid-rocket.png rename to bobwarfare/graphics/entities/projectiles/acid-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/electric-rocket.png b/bobwarfare/graphics/entities/projectiles/electric-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/electric-rocket.png rename to bobwarfare/graphics/entities/projectiles/electric-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/explosive-rocket.png b/bobwarfare/graphics/entities/projectiles/explosive-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/explosive-rocket.png rename to bobwarfare/graphics/entities/projectiles/explosive-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/flame-rocket.png b/bobwarfare/graphics/entities/projectiles/flame-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/flame-rocket.png rename to bobwarfare/graphics/entities/projectiles/flame-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/laser.png b/bobwarfare/graphics/entities/projectiles/laser.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/laser.png rename to bobwarfare/graphics/entities/projectiles/laser.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/piercing-rocket.png b/bobwarfare/graphics/entities/projectiles/piercing-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/piercing-rocket.png rename to bobwarfare/graphics/entities/projectiles/piercing-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/plasma-rocket.png b/bobwarfare/graphics/entities/projectiles/plasma-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/plasma-rocket.png rename to bobwarfare/graphics/entities/projectiles/plasma-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/poison-rocket.png b/bobwarfare/graphics/entities/projectiles/poison-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/poison-rocket.png rename to bobwarfare/graphics/entities/projectiles/poison-rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/rocket-shadow.png b/bobwarfare/graphics/entities/projectiles/rocket-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/rocket-shadow.png rename to bobwarfare/graphics/entities/projectiles/rocket-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/rocket.png b/bobwarfare/graphics/entities/projectiles/rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/rocket.png rename to bobwarfare/graphics/entities/projectiles/rocket.png diff --git a/bobwarfare_1.1.6/graphics/entities/projectiles/shotgun-shot.png b/bobwarfare/graphics/entities/projectiles/shotgun-shot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/projectiles/shotgun-shot.png rename to bobwarfare/graphics/entities/projectiles/shotgun-shot.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-left-down-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-corner-left-down-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-left-down-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-corner-left-down-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-left-down.png b/bobwarfare/graphics/entities/reinforced-wall/wall-corner-left-down.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-left-down.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-corner-left-down.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-right-down-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-corner-right-down-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-right-down-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-corner-right-down-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-right-down.png b/bobwarfare/graphics/entities/reinforced-wall/wall-corner-right-down.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-corner-right-down.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-corner-right-down.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-left-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-ending-left-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-left-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-ending-left-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-left.png b/bobwarfare/graphics/entities/reinforced-wall/wall-ending-left.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-left.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-ending-left.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-right-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-ending-right-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-right-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-ending-right-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-right.png b/bobwarfare/graphics/entities/reinforced-wall/wall-ending-right.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-ending-right.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-ending-right.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-single-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-single-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-single-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-single-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-single.png b/bobwarfare/graphics/entities/reinforced-wall/wall-single.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-single.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-single.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-1.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-1.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-1.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-1.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-2.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-2.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-2.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-3.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-3.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-3.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-horizontal-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-horizontal-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-1.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-1.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-1.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-1.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-2.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-2.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-2.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-3.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-3.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-3.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-straight-vertical-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-straight-vertical-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-t-down-shadow.png b/bobwarfare/graphics/entities/reinforced-wall/wall-t-down-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-t-down-shadow.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-t-down-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-t-down.png b/bobwarfare/graphics/entities/reinforced-wall/wall-t-down.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/reinforced-wall/wall-t-down.png rename to bobwarfare/graphics/entities/reinforced-wall/wall-t-down.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/combat-robot-capsule-shadow.png b/bobwarfare/graphics/entities/robots/combat-robot-capsule-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/combat-robot-capsule-shadow.png rename to bobwarfare/graphics/entities/robots/combat-robot-capsule-shadow.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/construction-robot-2.png b/bobwarfare/graphics/entities/robots/construction-robot-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/construction-robot-2.png rename to bobwarfare/graphics/entities/robots/construction-robot-2.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/construction-robot-3.png b/bobwarfare/graphics/entities/robots/construction-robot-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/construction-robot-3.png rename to bobwarfare/graphics/entities/robots/construction-robot-3.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/construction-robot-4.png b/bobwarfare/graphics/entities/robots/construction-robot-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/construction-robot-4.png rename to bobwarfare/graphics/entities/robots/construction-robot-4.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/construction-robot.png b/bobwarfare/graphics/entities/robots/construction-robot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/construction-robot.png rename to bobwarfare/graphics/entities/robots/construction-robot.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/defender-capsule.png b/bobwarfare/graphics/entities/robots/defender-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/defender-capsule.png rename to bobwarfare/graphics/entities/robots/defender-capsule.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/defender.png b/bobwarfare/graphics/entities/robots/defender.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/defender.png rename to bobwarfare/graphics/entities/robots/defender.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/destroyer-capsule.png b/bobwarfare/graphics/entities/robots/destroyer-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/destroyer-capsule.png rename to bobwarfare/graphics/entities/robots/destroyer-capsule.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/destroyer.png b/bobwarfare/graphics/entities/robots/destroyer.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/destroyer.png rename to bobwarfare/graphics/entities/robots/destroyer.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/distractor-capsule.png b/bobwarfare/graphics/entities/robots/distractor-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/distractor-capsule.png rename to bobwarfare/graphics/entities/robots/distractor-capsule.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/distractor.png b/bobwarfare/graphics/entities/robots/distractor.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/distractor.png rename to bobwarfare/graphics/entities/robots/distractor.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/laser-robot-capsule.png b/bobwarfare/graphics/entities/robots/laser-robot-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/laser-robot-capsule.png rename to bobwarfare/graphics/entities/robots/laser-robot-capsule.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/laser-robot.png b/bobwarfare/graphics/entities/robots/laser-robot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/laser-robot.png rename to bobwarfare/graphics/entities/robots/laser-robot.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-2.png b/bobwarfare/graphics/entities/robots/logistic-robot-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-2.png rename to bobwarfare/graphics/entities/robots/logistic-robot-2.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-3.png b/bobwarfare/graphics/entities/robots/logistic-robot-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-3.png rename to bobwarfare/graphics/entities/robots/logistic-robot-3.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-4.png b/bobwarfare/graphics/entities/robots/logistic-robot-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/logistic-robot-4.png rename to bobwarfare/graphics/entities/robots/logistic-robot-4.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/logistic-robot.png b/bobwarfare/graphics/entities/robots/logistic-robot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/logistic-robot.png rename to bobwarfare/graphics/entities/robots/logistic-robot.png diff --git a/bobwarfare_1.1.6/graphics/entities/robots/robot-shadow.png b/bobwarfare/graphics/entities/robots/robot-shadow.png similarity index 100% rename from bobwarfare_1.1.6/graphics/entities/robots/robot-shadow.png rename to bobwarfare/graphics/entities/robots/robot-shadow.png diff --git a/bobwarfare_1.1.6/graphics/icons/acid-bullet-magazine.png b/bobwarfare/graphics/icons/acid-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/acid-bullet-magazine.png rename to bobwarfare/graphics/icons/acid-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/acid-bullet-projectile.png b/bobwarfare/graphics/icons/acid-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/acid-bullet-projectile.png rename to bobwarfare/graphics/icons/acid-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/acid-bullet.png b/bobwarfare/graphics/icons/acid-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/acid-bullet.png rename to bobwarfare/graphics/icons/acid-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/acid-rocket.png b/bobwarfare/graphics/icons/acid-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/acid-rocket.png rename to bobwarfare/graphics/icons/acid-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/ap-bullet-magazine.png b/bobwarfare/graphics/icons/ap-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/ap-bullet-magazine.png rename to bobwarfare/graphics/icons/ap-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/ap-bullet-projectile.png b/bobwarfare/graphics/icons/ap-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/ap-bullet-projectile.png rename to bobwarfare/graphics/icons/ap-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/ap-bullet.png b/bobwarfare/graphics/icons/ap-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/ap-bullet.png rename to bobwarfare/graphics/icons/ap-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/artillery-shell.png b/bobwarfare/graphics/icons/artillery-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/artillery-shell.png rename to bobwarfare/graphics/icons/artillery-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/bullet-casing.png b/bobwarfare/graphics/icons/bullet-casing.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/bullet-casing.png rename to bobwarfare/graphics/icons/bullet-casing.png diff --git a/bobwarfare_1.1.6/graphics/icons/bullet-magazine.png b/bobwarfare/graphics/icons/bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/bullet-magazine.png rename to bobwarfare/graphics/icons/bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/bullet-projectile.png b/bobwarfare/graphics/icons/bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/bullet-projectile.png rename to bobwarfare/graphics/icons/bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/bullet.png b/bobwarfare/graphics/icons/bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/bullet.png rename to bobwarfare/graphics/icons/bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/cordite.png b/bobwarfare/graphics/icons/cordite.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/cordite.png rename to bobwarfare/graphics/icons/cordite.png diff --git a/bobwarfare_1.1.6/graphics/icons/defender-capsule.png b/bobwarfare/graphics/icons/defender-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/defender-capsule.png rename to bobwarfare/graphics/icons/defender-capsule.png diff --git a/bobwarfare_1.1.6/graphics/icons/defender.png b/bobwarfare/graphics/icons/defender.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/defender.png rename to bobwarfare/graphics/icons/defender.png diff --git a/bobwarfare_1.1.6/graphics/icons/destroyer-capsule.png b/bobwarfare/graphics/icons/destroyer-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/destroyer-capsule.png rename to bobwarfare/graphics/icons/destroyer-capsule.png diff --git a/bobwarfare_1.1.6/graphics/icons/destroyer.png b/bobwarfare/graphics/icons/destroyer.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/destroyer.png rename to bobwarfare/graphics/icons/destroyer.png diff --git a/bobwarfare_1.1.6/graphics/icons/distractor-capsule.png b/bobwarfare/graphics/icons/distractor-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/distractor-capsule.png rename to bobwarfare/graphics/icons/distractor-capsule.png diff --git a/bobwarfare_1.1.6/graphics/icons/distractor.png b/bobwarfare/graphics/icons/distractor.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/distractor.png rename to bobwarfare/graphics/icons/distractor.png diff --git a/bobwarfare_1.1.6/graphics/icons/drone-frame.png b/bobwarfare/graphics/icons/drone-frame.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/drone-frame.png rename to bobwarfare/graphics/icons/drone-frame.png diff --git a/bobwarfare_1.1.6/graphics/icons/electric-bullet-magazine.png b/bobwarfare/graphics/icons/electric-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/electric-bullet-magazine.png rename to bobwarfare/graphics/icons/electric-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/electric-bullet-projectile.png b/bobwarfare/graphics/icons/electric-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/electric-bullet-projectile.png rename to bobwarfare/graphics/icons/electric-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/electric-bullet.png b/bobwarfare/graphics/icons/electric-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/electric-bullet.png rename to bobwarfare/graphics/icons/electric-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/electric-rocket.png b/bobwarfare/graphics/icons/electric-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/electric-rocket.png rename to bobwarfare/graphics/icons/electric-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/explosive-rocket.png b/bobwarfare/graphics/icons/explosive-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/explosive-rocket.png rename to bobwarfare/graphics/icons/explosive-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/fire-capsule.png b/bobwarfare/graphics/icons/fire-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/fire-capsule.png rename to bobwarfare/graphics/icons/fire-capsule.png diff --git a/bobwarfare_1.1.6/graphics/icons/flame-bullet-magazine.png b/bobwarfare/graphics/icons/flame-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flame-bullet-magazine.png rename to bobwarfare/graphics/icons/flame-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/flame-bullet-projectile.png b/bobwarfare/graphics/icons/flame-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flame-bullet-projectile.png rename to bobwarfare/graphics/icons/flame-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/flame-bullet.png b/bobwarfare/graphics/icons/flame-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flame-bullet.png rename to bobwarfare/graphics/icons/flame-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/flame-rocket.png b/bobwarfare/graphics/icons/flame-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flame-rocket.png rename to bobwarfare/graphics/icons/flame-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/flamethrower-drone-2.png b/bobwarfare/graphics/icons/flamethrower-drone-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flamethrower-drone-2.png rename to bobwarfare/graphics/icons/flamethrower-drone-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/flamethrower-drone-3.png b/bobwarfare/graphics/icons/flamethrower-drone-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flamethrower-drone-3.png rename to bobwarfare/graphics/icons/flamethrower-drone-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/flamethrower-drone-4.png b/bobwarfare/graphics/icons/flamethrower-drone-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flamethrower-drone-4.png rename to bobwarfare/graphics/icons/flamethrower-drone-4.png diff --git a/bobwarfare_1.1.6/graphics/icons/flamethrower-drone.png b/bobwarfare/graphics/icons/flamethrower-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/flamethrower-drone.png rename to bobwarfare/graphics/icons/flamethrower-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/gatling-gun.png b/bobwarfare/graphics/icons/gatling-gun.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gatling-gun.png rename to bobwarfare/graphics/icons/gatling-gun.png diff --git a/bobwarfare_1.1.6/graphics/icons/glycerol.png b/bobwarfare/graphics/icons/glycerol.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/glycerol.png rename to bobwarfare/graphics/icons/glycerol.png diff --git a/bobwarfare_1.1.6/graphics/icons/gun-cotton.png b/bobwarfare/graphics/icons/gun-cotton.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gun-cotton.png rename to bobwarfare/graphics/icons/gun-cotton.png diff --git a/bobwarfare_1.1.6/graphics/icons/gun-drone-2.png b/bobwarfare/graphics/icons/gun-drone-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gun-drone-2.png rename to bobwarfare/graphics/icons/gun-drone-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/gun-drone-3.png b/bobwarfare/graphics/icons/gun-drone-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gun-drone-3.png rename to bobwarfare/graphics/icons/gun-drone-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/gun-drone-4.png b/bobwarfare/graphics/icons/gun-drone-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gun-drone-4.png rename to bobwarfare/graphics/icons/gun-drone-4.png diff --git a/bobwarfare_1.1.6/graphics/icons/gun-drone.png b/bobwarfare/graphics/icons/gun-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/gun-drone.png rename to bobwarfare/graphics/icons/gun-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/he-bullet-magazine.png b/bobwarfare/graphics/icons/he-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/he-bullet-magazine.png rename to bobwarfare/graphics/icons/he-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/he-bullet-projectile.png b/bobwarfare/graphics/icons/he-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/he-bullet-projectile.png rename to bobwarfare/graphics/icons/he-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/he-bullet.png b/bobwarfare/graphics/icons/he-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/he-bullet.png rename to bobwarfare/graphics/icons/he-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/heavy-armor-2.png b/bobwarfare/graphics/icons/heavy-armor-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/heavy-armor-2.png rename to bobwarfare/graphics/icons/heavy-armor-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/heavy-armor-3.png b/bobwarfare/graphics/icons/heavy-armor-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/heavy-armor-3.png rename to bobwarfare/graphics/icons/heavy-armor-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-drone-2.png b/bobwarfare/graphics/icons/laser-drone-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-drone-2.png rename to bobwarfare/graphics/icons/laser-drone-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-drone-3.png b/bobwarfare/graphics/icons/laser-drone-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-drone-3.png rename to bobwarfare/graphics/icons/laser-drone-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-drone-4.png b/bobwarfare/graphics/icons/laser-drone-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-drone-4.png rename to bobwarfare/graphics/icons/laser-drone-4.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-drone.png b/bobwarfare/graphics/icons/laser-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-drone.png rename to bobwarfare/graphics/icons/laser-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-amethyst.png b/bobwarfare/graphics/icons/laser-rifle-battery-amethyst.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-amethyst.png rename to bobwarfare/graphics/icons/laser-rifle-battery-amethyst.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-case.png b/bobwarfare/graphics/icons/laser-rifle-battery-case.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-case.png rename to bobwarfare/graphics/icons/laser-rifle-battery-case.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-diamond.png b/bobwarfare/graphics/icons/laser-rifle-battery-diamond.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-diamond.png rename to bobwarfare/graphics/icons/laser-rifle-battery-diamond.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-emerald.png b/bobwarfare/graphics/icons/laser-rifle-battery-emerald.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-emerald.png rename to bobwarfare/graphics/icons/laser-rifle-battery-emerald.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-glass.png b/bobwarfare/graphics/icons/laser-rifle-battery-glass.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-glass.png rename to bobwarfare/graphics/icons/laser-rifle-battery-glass.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-ruby.png b/bobwarfare/graphics/icons/laser-rifle-battery-ruby.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-ruby.png rename to bobwarfare/graphics/icons/laser-rifle-battery-ruby.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-sapphire.png b/bobwarfare/graphics/icons/laser-rifle-battery-sapphire.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-sapphire.png rename to bobwarfare/graphics/icons/laser-rifle-battery-sapphire.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-topaz.png b/bobwarfare/graphics/icons/laser-rifle-battery-topaz.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle-battery-topaz.png rename to bobwarfare/graphics/icons/laser-rifle-battery-topaz.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-rifle.png b/bobwarfare/graphics/icons/laser-rifle.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-rifle.png rename to bobwarfare/graphics/icons/laser-rifle.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-robot-capsule.png b/bobwarfare/graphics/icons/laser-robot-capsule.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-robot-capsule.png rename to bobwarfare/graphics/icons/laser-robot-capsule.png diff --git a/bobwarfare_1.1.6/graphics/icons/laser-robot.png b/bobwarfare/graphics/icons/laser-robot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/laser-robot.png rename to bobwarfare/graphics/icons/laser-robot.png diff --git a/bobwarfare_1.1.6/graphics/icons/magazine.png b/bobwarfare/graphics/icons/magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/magazine.png rename to bobwarfare/graphics/icons/magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-acid.png b/bobwarfare/graphics/icons/missile-warhead-acid.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-acid.png rename to bobwarfare/graphics/icons/missile-warhead-acid.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-electric.png b/bobwarfare/graphics/icons/missile-warhead-electric.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-electric.png rename to bobwarfare/graphics/icons/missile-warhead-electric.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-explosive.png b/bobwarfare/graphics/icons/missile-warhead-explosive.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-explosive.png rename to bobwarfare/graphics/icons/missile-warhead-explosive.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-fire.png b/bobwarfare/graphics/icons/missile-warhead-fire.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-fire.png rename to bobwarfare/graphics/icons/missile-warhead-fire.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-pierce.png b/bobwarfare/graphics/icons/missile-warhead-pierce.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-pierce.png rename to bobwarfare/graphics/icons/missile-warhead-pierce.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-plasma.png b/bobwarfare/graphics/icons/missile-warhead-plasma.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-plasma.png rename to bobwarfare/graphics/icons/missile-warhead-plasma.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead-poison.png b/bobwarfare/graphics/icons/missile-warhead-poison.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead-poison.png rename to bobwarfare/graphics/icons/missile-warhead-poison.png diff --git a/bobwarfare_1.1.6/graphics/icons/missile-warhead.png b/bobwarfare/graphics/icons/missile-warhead.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/missile-warhead.png rename to bobwarfare/graphics/icons/missile-warhead.png diff --git a/bobwarfare_1.1.6/graphics/icons/nitroglycerin.png b/bobwarfare/graphics/icons/nitroglycerin.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/nitroglycerin.png rename to bobwarfare/graphics/icons/nitroglycerin.png diff --git a/bobwarfare_1.1.6/graphics/icons/petroleum-jelly.png b/bobwarfare/graphics/icons/petroleum-jelly.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/petroleum-jelly.png rename to bobwarfare/graphics/icons/petroleum-jelly.png diff --git a/bobwarfare_1.1.6/graphics/icons/piercing-rocket.png b/bobwarfare/graphics/icons/piercing-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/piercing-rocket.png rename to bobwarfare/graphics/icons/piercing-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-bullet-magazine.png b/bobwarfare/graphics/icons/plasma-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-bullet-magazine.png rename to bobwarfare/graphics/icons/plasma-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-bullet-projectile.png b/bobwarfare/graphics/icons/plasma-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-bullet-projectile.png rename to bobwarfare/graphics/icons/plasma-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-bullet.png b/bobwarfare/graphics/icons/plasma-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-bullet.png rename to bobwarfare/graphics/icons/plasma-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-drone-2.png b/bobwarfare/graphics/icons/plasma-drone-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-drone-2.png rename to bobwarfare/graphics/icons/plasma-drone-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-drone-3.png b/bobwarfare/graphics/icons/plasma-drone-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-drone-3.png rename to bobwarfare/graphics/icons/plasma-drone-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-drone-4.png b/bobwarfare/graphics/icons/plasma-drone-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-drone-4.png rename to bobwarfare/graphics/icons/plasma-drone-4.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-drone.png b/bobwarfare/graphics/icons/plasma-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-drone.png rename to bobwarfare/graphics/icons/plasma-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma-rocket.png b/bobwarfare/graphics/icons/plasma-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma-rocket.png rename to bobwarfare/graphics/icons/plasma-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/plasma.png b/bobwarfare/graphics/icons/plasma.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/plasma.png rename to bobwarfare/graphics/icons/plasma.png diff --git a/bobwarfare_1.1.6/graphics/icons/poison-bullet-magazine.png b/bobwarfare/graphics/icons/poison-bullet-magazine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/poison-bullet-magazine.png rename to bobwarfare/graphics/icons/poison-bullet-magazine.png diff --git a/bobwarfare_1.1.6/graphics/icons/poison-bullet-projectile.png b/bobwarfare/graphics/icons/poison-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/poison-bullet-projectile.png rename to bobwarfare/graphics/icons/poison-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/poison-bullet.png b/bobwarfare/graphics/icons/poison-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/poison-bullet.png rename to bobwarfare/graphics/icons/poison-bullet.png diff --git a/bobwarfare_1.1.6/graphics/icons/poison-rocket.png b/bobwarfare/graphics/icons/poison-rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/poison-rocket.png rename to bobwarfare/graphics/icons/poison-rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/power-armor-mk3.png b/bobwarfare/graphics/icons/power-armor-mk3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/power-armor-mk3.png rename to bobwarfare/graphics/icons/power-armor-mk3.png diff --git a/bobwarfare_1.1.6/graphics/icons/power-armor-mk4.png b/bobwarfare/graphics/icons/power-armor-mk4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/power-armor-mk4.png rename to bobwarfare/graphics/icons/power-armor-mk4.png diff --git a/bobwarfare_1.1.6/graphics/icons/power-armor-mk5.png b/bobwarfare/graphics/icons/power-armor-mk5.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/power-armor-mk5.png rename to bobwarfare/graphics/icons/power-armor-mk5.png diff --git a/bobwarfare_1.1.6/graphics/icons/reinforced-wall.png b/bobwarfare/graphics/icons/reinforced-wall.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/reinforced-wall.png rename to bobwarfare/graphics/icons/reinforced-wall.png diff --git a/bobwarfare_1.1.6/graphics/icons/rifle.png b/bobwarfare/graphics/icons/rifle.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/rifle.png rename to bobwarfare/graphics/icons/rifle.png diff --git a/bobwarfare_1.1.6/graphics/icons/robot-brain-combat-2.png b/bobwarfare/graphics/icons/robot-brain-combat-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/robot-brain-combat-2.png rename to bobwarfare/graphics/icons/robot-brain-combat-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/robot-brain-combat-3.png b/bobwarfare/graphics/icons/robot-brain-combat-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/robot-brain-combat-3.png rename to bobwarfare/graphics/icons/robot-brain-combat-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/robot-brain-combat-4.png b/bobwarfare/graphics/icons/robot-brain-combat-4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/robot-brain-combat-4.png rename to bobwarfare/graphics/icons/robot-brain-combat-4.png diff --git a/bobwarfare_1.1.6/graphics/icons/robot-brain-combat.png b/bobwarfare/graphics/icons/robot-brain-combat.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/robot-brain-combat.png rename to bobwarfare/graphics/icons/robot-brain-combat.png diff --git a/bobwarfare_1.1.6/graphics/icons/robot-tool-combat.png b/bobwarfare/graphics/icons/robot-tool-combat.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/robot-tool-combat.png rename to bobwarfare/graphics/icons/robot-tool-combat.png diff --git a/bobwarfare_1.1.6/graphics/icons/rocket-body.png b/bobwarfare/graphics/icons/rocket-body.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/rocket-body.png rename to bobwarfare/graphics/icons/rocket-body.png diff --git a/bobwarfare_1.1.6/graphics/icons/rocket-engine.png b/bobwarfare/graphics/icons/rocket-engine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/rocket-engine.png rename to bobwarfare/graphics/icons/rocket-engine.png diff --git a/bobwarfare_1.1.6/graphics/icons/rocket.png b/bobwarfare/graphics/icons/rocket.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/rocket.png rename to bobwarfare/graphics/icons/rocket.png diff --git a/bobwarfare_1.1.6/graphics/icons/shot.png b/bobwarfare/graphics/icons/shot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shot.png rename to bobwarfare/graphics/icons/shot.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-acid-shell.png b/bobwarfare/graphics/icons/shotgun-acid-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-acid-shell.png rename to bobwarfare/graphics/icons/shotgun-acid-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-ap-shell.png b/bobwarfare/graphics/icons/shotgun-ap-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-ap-shell.png rename to bobwarfare/graphics/icons/shotgun-ap-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-electric-shell.png b/bobwarfare/graphics/icons/shotgun-electric-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-electric-shell.png rename to bobwarfare/graphics/icons/shotgun-electric-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-explosive-shell.png b/bobwarfare/graphics/icons/shotgun-explosive-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-explosive-shell.png rename to bobwarfare/graphics/icons/shotgun-explosive-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-flame-shell.png b/bobwarfare/graphics/icons/shotgun-flame-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-flame-shell.png rename to bobwarfare/graphics/icons/shotgun-flame-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-plasma-shell.png b/bobwarfare/graphics/icons/shotgun-plasma-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-plasma-shell.png rename to bobwarfare/graphics/icons/shotgun-plasma-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-poison-shell.png b/bobwarfare/graphics/icons/shotgun-poison-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-poison-shell.png rename to bobwarfare/graphics/icons/shotgun-poison-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-shell-casing.png b/bobwarfare/graphics/icons/shotgun-shell-casing.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-shell-casing.png rename to bobwarfare/graphics/icons/shotgun-shell-casing.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-shell.png b/bobwarfare/graphics/icons/shotgun-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-shell.png rename to bobwarfare/graphics/icons/shotgun-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/shotgun-uranium-shell.png b/bobwarfare/graphics/icons/shotgun-uranium-shell.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/shotgun-uranium-shell.png rename to bobwarfare/graphics/icons/shotgun-uranium-shell.png diff --git a/bobwarfare_1.1.6/graphics/icons/sniper-rifle.png b/bobwarfare/graphics/icons/sniper-rifle.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/sniper-rifle.png rename to bobwarfare/graphics/icons/sniper-rifle.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-armor-plate.png b/bobwarfare/graphics/icons/spidertron/mech-armor-plate.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-armor-plate.png rename to bobwarfare/graphics/icons/spidertron/mech-armor-plate.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-body.png b/bobwarfare/graphics/icons/spidertron/mech-body.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-body.png rename to bobwarfare/graphics/icons/spidertron/mech-body.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-brain.png b/bobwarfare/graphics/icons/spidertron/mech-brain.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-brain.png rename to bobwarfare/graphics/icons/spidertron/mech-brain.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-foot.png b/bobwarfare/graphics/icons/spidertron/mech-foot.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-foot.png rename to bobwarfare/graphics/icons/spidertron/mech-foot.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-hip.png b/bobwarfare/graphics/icons/spidertron/mech-hip.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-hip.png rename to bobwarfare/graphics/icons/spidertron/mech-hip.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-knee.png b/bobwarfare/graphics/icons/spidertron/mech-knee.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-knee.png rename to bobwarfare/graphics/icons/spidertron/mech-knee.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-leg-segment.png b/bobwarfare/graphics/icons/spidertron/mech-leg-segment.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-leg-segment.png rename to bobwarfare/graphics/icons/spidertron/mech-leg-segment.png diff --git a/bobwarfare_1.1.6/graphics/icons/spidertron/mech-leg.png b/bobwarfare/graphics/icons/spidertron/mech-leg.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/spidertron/mech-leg.png rename to bobwarfare/graphics/icons/spidertron/mech-leg.png diff --git a/bobwarfare_1.1.6/graphics/icons/sulfuric-nitric-acid.png b/bobwarfare/graphics/icons/sulfuric-nitric-acid.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/sulfuric-nitric-acid.png rename to bobwarfare/graphics/icons/sulfuric-nitric-acid.png diff --git a/bobwarfare_1.1.6/graphics/icons/tank-2.png b/bobwarfare/graphics/icons/tank-2.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/tank-2.png rename to bobwarfare/graphics/icons/tank-2.png diff --git a/bobwarfare_1.1.6/graphics/icons/tank-3.png b/bobwarfare/graphics/icons/tank-3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/tank-3.png rename to bobwarfare/graphics/icons/tank-3.png diff --git a/bobwarfare_1.1.6/graphics/icons/tank-artillery.png b/bobwarfare/graphics/icons/tank-artillery.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/tank-artillery.png rename to bobwarfare/graphics/icons/tank-artillery.png diff --git a/bobwarfare_1.1.6/graphics/icons/tank-laser.png b/bobwarfare/graphics/icons/tank-laser.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/tank-laser.png rename to bobwarfare/graphics/icons/tank-laser.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/cordite.png b/bobwarfare/graphics/icons/technology/cordite.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/cordite.png rename to bobwarfare/graphics/icons/technology/cordite.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/damage.png b/bobwarfare/graphics/icons/technology/damage.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/damage.png rename to bobwarfare/graphics/icons/technology/damage.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/flamethrower-drone.png b/bobwarfare/graphics/icons/technology/flamethrower-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/flamethrower-drone.png rename to bobwarfare/graphics/icons/technology/flamethrower-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/gun-drone.png b/bobwarfare/graphics/icons/technology/gun-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/gun-drone.png rename to bobwarfare/graphics/icons/technology/gun-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/laser-drone.png b/bobwarfare/graphics/icons/technology/laser-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/laser-drone.png rename to bobwarfare/graphics/icons/technology/laser-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/laser-rifle-damage.png b/bobwarfare/graphics/icons/technology/laser-rifle-damage.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/laser-rifle-damage.png rename to bobwarfare/graphics/icons/technology/laser-rifle-damage.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/laser-rifle.png b/bobwarfare/graphics/icons/technology/laser-rifle.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/laser-rifle.png rename to bobwarfare/graphics/icons/technology/laser-rifle.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/nitroglycerin.png b/bobwarfare/graphics/icons/technology/nitroglycerin.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/nitroglycerin.png rename to bobwarfare/graphics/icons/technology/nitroglycerin.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/plasma-drone.png b/bobwarfare/graphics/icons/technology/plasma-drone.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/plasma-drone.png rename to bobwarfare/graphics/icons/technology/plasma-drone.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/plasma-turrets.png b/bobwarfare/graphics/icons/technology/plasma-turrets.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/plasma-turrets.png rename to bobwarfare/graphics/icons/technology/plasma-turrets.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk3.png b/bobwarfare/graphics/icons/technology/power-armor-mk3.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk3.png rename to bobwarfare/graphics/icons/technology/power-armor-mk3.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk4.png b/bobwarfare/graphics/icons/technology/power-armor-mk4.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk4.png rename to bobwarfare/graphics/icons/technology/power-armor-mk4.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk5.png b/bobwarfare/graphics/icons/technology/power-armor-mk5.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/power-armor-mk5.png rename to bobwarfare/graphics/icons/technology/power-armor-mk5.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/radars.png b/bobwarfare/graphics/icons/technology/radars.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/radars.png rename to bobwarfare/graphics/icons/technology/radars.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/rocket-engine.png b/bobwarfare/graphics/icons/technology/rocket-engine.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/rocket-engine.png rename to bobwarfare/graphics/icons/technology/rocket-engine.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/tank-cannon-damage.png b/bobwarfare/graphics/icons/technology/tank-cannon-damage.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/tank-cannon-damage.png rename to bobwarfare/graphics/icons/technology/tank-cannon-damage.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/tank-cannon.png b/bobwarfare/graphics/icons/technology/tank-cannon.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/tank-cannon.png rename to bobwarfare/graphics/icons/technology/tank-cannon.png diff --git a/bobwarfare_1.1.6/graphics/icons/technology/tanks.png b/bobwarfare/graphics/icons/technology/tanks.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/technology/tanks.png rename to bobwarfare/graphics/icons/technology/tanks.png diff --git a/bobwarfare_1.1.6/graphics/icons/uranium-bullet-projectile.png b/bobwarfare/graphics/icons/uranium-bullet-projectile.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/uranium-bullet-projectile.png rename to bobwarfare/graphics/icons/uranium-bullet-projectile.png diff --git a/bobwarfare_1.1.6/graphics/icons/uranium-bullet.png b/bobwarfare/graphics/icons/uranium-bullet.png similarity index 100% rename from bobwarfare_1.1.6/graphics/icons/uranium-bullet.png rename to bobwarfare/graphics/icons/uranium-bullet.png diff --git a/bobwarfare/info.json b/bobwarfare/info.json new file mode 100644 index 00000000..85c359bc --- /dev/null +++ b/bobwarfare/info.json @@ -0,0 +1,15 @@ +{ + "name": "bobwarfare", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Bob's Warfare mod", + "author": "Bobingabout", + "contact": "robertagius@hotmail.com", + "homepage": "https://forums.factorio.com/viewforum.php?f=51", + "dependencies": [ + "base >= 1.1.0", + "boblibrary >= 1.2.0", + "? bobplates >= 1.2.0", + "? bobenemies >= 1.2.0" + ], + "description": "Requires Bob's functions library mod.\n\nThis mod adds a lot of things for warfare.\nAdds Nitroglycerine production chain, which is used to make intermediates for new ammo.\nAdds 7 new gun ammos, shotgun ammos, and rockets based on an improved normal, and 6 elemental ammos.\nAdds a laser rifle and 7 tiers of laser ammo using glass and the 6 gems.\nAdds Tanks to tier 3, and artillery wagons to tier 3.\nChanges the way you make combat robots, and adds a 4th combat robot capsule.\nAdds a Robot laser drone.\nAdds a higher tier wall and gate\nAdds a couple new mines.\nAdds Scatter tank ammo\nAdds a few new types of artillery ammo.\nAdds more tiers of Radar.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set."} diff --git a/bobwarfare_1.1.6/locale/en/bobwarfare.cfg b/bobwarfare/locale/en/bobwarfare.cfg similarity index 100% rename from bobwarfare_1.1.6/locale/en/bobwarfare.cfg rename to bobwarfare/locale/en/bobwarfare.cfg diff --git a/bobwarfare_1.1.6/migrations/bobwarfare_1.1.2.json b/bobwarfare/migrations/bobwarfare_1.1.2.json similarity index 100% rename from bobwarfare_1.1.6/migrations/bobwarfare_1.1.2.json rename to bobwarfare/migrations/bobwarfare_1.1.2.json diff --git a/bobwarfare_1.1.6/migrations/bobwarfare_1.1.6.json b/bobwarfare/migrations/bobwarfare_1.1.6.json similarity index 100% rename from bobwarfare_1.1.6/migrations/bobwarfare_1.1.6.json rename to bobwarfare/migrations/bobwarfare_1.1.6.json diff --git a/bobwarfare_1.1.6/migrations/bobwarfare_1.1.6.lua b/bobwarfare/migrations/bobwarfare_1.1.6.lua similarity index 100% rename from bobwarfare_1.1.6/migrations/bobwarfare_1.1.6.lua rename to bobwarfare/migrations/bobwarfare_1.1.6.lua diff --git a/bobwarfare_1.1.6/prototypes/category.lua b/bobwarfare/prototypes/category.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/category.lua rename to bobwarfare/prototypes/category.lua diff --git a/bobwarfare_1.1.6/prototypes/damage-type.lua b/bobwarfare/prototypes/damage-type.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/damage-type.lua rename to bobwarfare/prototypes/damage-type.lua diff --git a/bobwarfare_1.1.6/prototypes/entity/beams.lua b/bobwarfare/prototypes/entity/beams.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/entity/beams.lua rename to bobwarfare/prototypes/entity/beams.lua diff --git a/bobwarfare/prototypes/entity/drone.lua b/bobwarfare/prototypes/entity/drone.lua new file mode 100644 index 00000000..478674e3 --- /dev/null +++ b/bobwarfare/prototypes/entity/drone.lua @@ -0,0 +1,557 @@ +local sounds = require("__base__.prototypes.entity.sounds") + +function bobmods.warfare.tank_drone_animation(scale, tint1, tint2) + if tint1 == nil then + tint1 = { r = 1, g = 1, b = 1 } + end + if tint2 == nil then + tint2 = { r = 1, g = 1, b = 1 } + end + return { + layers = { + { + priority = "low", + width = 136, + height = 106, + frame_count = 2, + tint = tint1, + direction_count = 64, + shift = util.by_pixel(scale * 0, scale * -10), + animation_speed = 8, + max_advance = 1, + stripes = { + { + filename = "__base__/graphics/entity/tank/tank-base-1.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-2.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-3.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-4.png", + width_in_frames = 2, + height_in_frames = 16, + }, + }, + scale = scale, + hr_version = { + priority = "low", + width = 270, + height = 212, + frame_count = 2, + tint = tint1, + direction_count = 64, + shift = util.by_pixel(scale * 0, scale * -10), + animation_speed = 8, + max_advance = 1, + stripes = { + { + filename = "__base__/graphics/entity/tank/hr-tank-base-1.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-2.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-3.png", + width_in_frames = 2, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-4.png", + width_in_frames = 2, + height_in_frames = 16, + }, + }, + scale = scale * 0.5, + }, + }, + { + priority = "low", + width = 104, + height = 83, + frame_count = 2, + tint = tint2, + direction_count = 64, + shift = util.by_pixel(scale * 0, scale * -21.5), + max_advance = 1, + line_length = 2, + stripes = util.multiplystripes(2, { + { + filename = "__base__/graphics/entity/tank/tank-base-mask-1.png", + width_in_frames = 1, + height_in_frames = 22, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-mask-2.png", + width_in_frames = 1, + height_in_frames = 22, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-mask-3.png", + width_in_frames = 1, + height_in_frames = 20, + }, + }), + scale = scale, + hr_version = { + priority = "low", + width = 208, + height = 166, + frame_count = 2, + tint = tint2, + direction_count = 64, + shift = util.by_pixel(scale * 0, scale * -21.5), + max_advance = 1, + line_length = 2, + stripes = util.multiplystripes(2, { + { + filename = "__base__/graphics/entity/tank/hr-tank-base-mask-1.png", + width_in_frames = 1, + height_in_frames = 22, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-mask-2.png", + width_in_frames = 1, + height_in_frames = 22, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-mask-3.png", + width_in_frames = 1, + height_in_frames = 20, + }, + }), + scale = scale * 0.5, + }, + }, + { + priority = "low", + width = 151, + height = 98, + frame_count = 2, + draw_as_shadow = true, + direction_count = 64, + shift = util.by_pixel(scale * 22.5, scale * 7), + max_advance = 1, + stripes = util.multiplystripes(2, { + { + filename = "__base__/graphics/entity/tank/tank-base-shadow-1.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-shadow-2.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-shadow-3.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/tank-base-shadow-4.png", + width_in_frames = 1, + height_in_frames = 16, + }, + }), + scale = scale, + hr_version = { + priority = "low", + width = 302, + height = 194, + frame_count = 2, + draw_as_shadow = true, + direction_count = 64, + shift = util.by_pixel(scale * 22.5, scale * 7), + max_advance = 1, + stripes = util.multiplystripes(2, { + { + filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-1.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-2.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-3.png", + width_in_frames = 1, + height_in_frames = 16, + }, + { + filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-4.png", + width_in_frames = 1, + height_in_frames = 16, + }, + }), + scale = scale * 0.5, + }, + }, + }, + } +end + +local tint_drone_1 = { r = 1.0, g = 0.2, b = 0.0 } -- hue 4 +local tint_drone_2 = { r = 0.0, g = 0.5, b = 1.0 } -- hue 148 +local tint_drone_3 = { r = 0.7, g = 0.0, b = 1.0 } -- hue 200 +local tint_drone_4 = { r = 0.0, g = 1.0, b = 0.0 } -- hue 85 + +local tint_drone_gun = { r = 1, g = 1, b = 0.5 } +local tint_drone_laser = { r = 0.9, g = 0.9, b = 0.9 } +local tint_drone_flamethrower = { r = 1, g = 0.6, b = 0.5 } +local tint_drone_plasma = { r = 0.5, g = 0.8, b = 1 } + +data:extend({ + { + type = "unit", + name = "bob-robot-gun-drone", + icon = "__bobwarfare__/graphics/icons/gun-drone.png", + icon_size = 64, + flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, + minable = { mining_time = 1, result = "bob-robot-gun-drone" }, + max_health = 500, + corpse = "small-remnants", + dying_explosion = "medium-explosion", + resistances = { + { + type = "fire", + percent = 50, + }, + { + type = "poison", + percent = 50, + }, + { + type = "physical", + percent = 30, + }, + { + type = "impact", + percent = 50, + }, + { + type = "explosion", + percent = 50, + }, + { + type = "acid", + percent = 40, + }, + }, + collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, + distraction_cooldown = 300, + + attack_parameters = { + type = "projectile", + cooldown = 6, + range = 18, + projectile_creation_distance = 1, + projectile_center = { 0, 0.6 }, -- same as gun_turret_attack shift + animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_gun, tint_drone_1), + shell_particle = { + name = "shell-particle", + direction_deviation = 0.1, + speed = 0.1, + speed_deviation = 0.03, + center = { 0, 0.6 }, + creation_distance = 1, + starting_frame_speed = 0.2, + starting_frame_speed_deviation = 0.1, + }, + sound = sounds.heavy_gunshot, + ammo_type = { + category = "bullet", + action = { + type = "direct", + action_delivery = { + type = "instant", + source_effects = { + type = "create-explosion", + entity_name = "explosion-gunshot", + }, + target_effects = { + { + type = "create-entity", + entity_name = "explosion-hit", + }, + { + type = "damage", + damage = { amount = 16, type = "physical" }, + }, + }, + }, + }, + }, + }, + + vision_distance = 30, + movement_speed = 0.16, + distance_per_frame = 0.15, + pollution_to_join_attack = 10, + run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_gun, tint_drone_1), + }, +}) + +data:extend({ + { + type = "unit", + name = "bob-robot-laser-drone", + icon = "__bobwarfare__/graphics/icons/laser-drone.png", + icon_size = 64, + flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, + minable = { mining_time = 1, result = "bob-robot-laser-drone" }, + max_health = 1000, + corpse = "small-remnants", + dying_explosion = "medium-explosion", + resistances = { + { + type = "fire", + percent = 50, + }, + { + type = "poison", + percent = 50, + }, + { + type = "physical", + percent = 30, + }, + { + type = "impact", + percent = 50, + }, + { + type = "explosion", + percent = 50, + }, + { + type = "acid", + percent = 40, + }, + }, + collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, + distraction_cooldown = 300, + + attack_parameters = { + type = "beam", + cooldown = 20, + range = 25, + source_direction_count = 64, + source_offset = { 0, -0.5 }, + damage_modifier = 5, + animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_laser, tint_drone_1), + sound = make_laser_sounds(), + ammo_type = { + category = "laser", + action = { + type = "direct", + action_delivery = { + type = "beam", + beam = "laser-beam", + max_length = 27, --slightly more than range, to stop errors. + duration = 20, + source_offset = { 0, -0.5 }, + }, + }, + }, + }, + + vision_distance = 35, + movement_speed = 0.16, + distance_per_frame = 0.15, + pollution_to_join_attack = 15, + run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_laser, tint_drone_1), + }, +}) + +data:extend({ + { + type = "unit", + name = "bob-robot-flamethrower-drone", + icon = "__bobwarfare__/graphics/icons/flamethrower-drone.png", + icon_size = 64, + flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, + minable = { mining_time = 1, result = "bob-robot-flamethrower-drone" }, + max_health = 1500, + corpse = "small-remnants", + dying_explosion = "medium-explosion", + resistances = { + { + type = "fire", + percent = 100, + }, + { + type = "poison", + percent = 50, + }, + { + type = "physical", + percent = 30, + }, + { + type = "impact", + percent = 50, + }, + { + type = "explosion", + percent = 50, + }, + { + type = "acid", + percent = 40, + }, + }, + collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, + drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, + distraction_cooldown = 300, + + attack_parameters = { + type = "stream", + cooldown = 4, + range = 30, + min_range = 6, + animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_flamethrower, tint_drone_1), + damage_modifier = 2.5, + lead_target_for_projectile_speed = 0.2 * 0.75 * 1.5, -- this is same as particle horizontal speed of flamethrower fire stream + + ammo_type = { + category = "flamethrower", + action = { + type = "direct", + action_delivery = { + type = "stream", + stream = "flamethrower-fire-stream", + source_offset = { 0, -0.5 }, + }, + }, + }, + cyclic_sound = { + begin_sound = { + { + filename = "__base__/sound/fight/flamethrower-start.ogg", + volume = 0.7, + }, + }, + middle_sound = { + { + filename = "__base__/sound/fight/flamethrower-mid.ogg", + volume = 0.7, + }, + }, + end_sound = { + { + filename = "__base__/sound/fight/flamethrower-end.ogg", + volume = 0.7, + }, + }, + }, + }, + vision_distance = 40, + movement_speed = 0.16, + distance_per_frame = 0.15, + pollution_to_join_attack = 20, + run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_flamethrower, tint_drone_1), + }, +}) + +data:extend({ + { + type = "unit", + name = "bob-robot-plasma-drone", + icon = "__bobwarfare__/graphics/icons/plasma-drone.png", + icon_size = 64, + flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, + minable = { mining_time = 1, result = "bob-robot-plasma-drone" }, + max_health = 1250, + corpse = "medium-remnants", + dying_explosion = "medium-explosion", + resistances = { + { + type = "fire", + percent = 50, + }, + { + type = "poison", + percent = 50, + }, + { + type = "physical", + percent = 30, + }, + { + type = "impact", + percent = 50, + }, + { + type = "explosion", + percent = 50, + }, + { + type = "acid", + percent = 40, + }, + }, + collision_box = { { -0.45 * 1.5, -0.65 * 1.5 }, { 0.45 * 1.5, 0.65 * 1.5 } }, + selection_box = { { -0.45 * 1.5, -0.65 * 1.5 }, { 0.45 * 1.5, 0.65 * 1.5 } }, + drawing_box = { { -0.9 * 1.5, -0.9 * 1.5 }, { 0.9 * 1.5, 0.75 * 1.5 } }, + distraction_cooldown = 300, + + attack_parameters = { + type = "projectile", + cooldown = 200, + damage_modifier = 15, + lead_target_for_projectile_speed = 1, + projectile_center = { 0, -0.5 * 1.5 }, + projectile_creation_distance = 1 * 1.5, + range = 60, + sound = { { filename = "__base__/sound/fight/electric-beam.ogg", volume = 0.7 } }, + min_range = 30, + animation = bobmods.warfare.tank_drone_animation(0.5 * 1.5, tint_drone_plasma, tint_drone_1), + ammo_type = { + type = "projectile", + category = "laser", + target_type = "position", + clamp_position = true, + action = { + { + type = "direct", + action_delivery = { + { + type = "projectile", + projectile = "bob-plasma-projectile", + starting_speed = 1, + direction_deviation = 0, + range_deviation = 0, + max_range = 120, + }, + }, + }, + }, + }, + }, + vision_distance = 70, + movement_speed = 0.1, + distance_per_frame = 0.1, + pollution_to_join_attack = 30, + run_animation = bobmods.warfare.tank_drone_animation(0.5 * 1.5, tint_drone_plasma, tint_drone_1), + }, +}) diff --git a/bobwarfare_1.1.6/prototypes/entity/effects.lua b/bobwarfare/prototypes/entity/effects.lua similarity index 97% rename from bobwarfare_1.1.6/prototypes/entity/effects.lua rename to bobwarfare/prototypes/entity/effects.lua index ac5dc874..6b79305c 100644 --- a/bobwarfare_1.1.6/prototypes/entity/effects.lua +++ b/bobwarfare/prototypes/entity/effects.lua @@ -31,7 +31,6 @@ data:extend({ filename = "__base__/graphics/entity/smoke/smoke.png", flags = { "smoke" }, }, - slow_down_factor = 0, affected_by_wind = false, cyclic = true, duration = 60 * 10, @@ -84,7 +83,7 @@ data:extend({ }, }, }, - action_frequency = 5, + action_cooldown = 30, }, { @@ -179,7 +178,6 @@ data:extend({ }, }, }, - action_frequency = 5, action_cooldown = 30, }, @@ -211,7 +209,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-glass", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 0.8, g = 0.8, b = 0.8, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -223,7 +220,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-ruby", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 1, g = 0.2, b = 0.2, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -235,7 +231,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-sapphire", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 0.2, g = 0.6, b = 1, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -247,7 +242,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-emerald", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 0.3, g = 1, b = 0.3, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -259,7 +253,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-amethyst", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 1, g = 0.2, b = 1, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -271,7 +264,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-topaz", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 1, g = 0.6, b = 0.2, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", @@ -283,7 +275,6 @@ data:extend({ type = "explosion", name = "bob-laser-bubble-diamond", flags = { "not-on-map" }, - animation_speed = 1, animations = boblaserbubbleanimation(1, { r = 1, g = 1, b = 1, a = 1 }), light = { intensity = 1, size = 10 }, smoke = "smoke-fast", diff --git a/bobwarfare_1.1.6/prototypes/entity/mine.lua b/bobwarfare/prototypes/entity/mine.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/entity/mine.lua rename to bobwarfare/prototypes/entity/mine.lua diff --git a/bobwarfare/prototypes/entity/projectiles.lua b/bobwarfare/prototypes/entity/projectiles.lua new file mode 100644 index 00000000..497bfa11 --- /dev/null +++ b/bobwarfare/prototypes/entity/projectiles.lua @@ -0,0 +1,1665 @@ +local sounds = require("__base__.prototypes.entity.sounds") +local nuke_shockwave_starting_speed_deviation = 0.075 + +data:extend({ + { + type = "projectile", + name = "better-shotgun-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.05, -1 }, { 0.05, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "damage", + damage = { amount = 12, type = "physical" }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", + tint = { r = 1, g = 1, b = 1, a = 1 }, + frame_count = 1, + width = 3, + height = 50, + priority = "high", + }, + }, + + { + type = "projectile", + name = "shotgun-ap-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.05, -1 }, { 0.05, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "damage", + damage = { amount = 12, type = "bob-pierce" }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", + tint = { r = 0.3, g = 0.5, b = 1.0, a = 1 }, + frame_count = 1, + width = 3, + height = 50, + priority = "high", + }, + }, + + { + type = "projectile", + name = "shotgun-electric-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.05, -1 }, { 0.05, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "damage", + damage = { amount = 12, type = "electric" }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", + tint = { r = 1, g = 0.6, b = 0.3, a = 1 }, + frame_count = 1, + width = 3, + height = 50, + priority = "high", + }, + }, + + { + type = "projectile", + name = "shotgun-explosive-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.5, -1 }, { 0.5, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "nested-result", + action = { + type = "area", + radius = 1, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 12, type = "explosion" }, + }, + }, + }, + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-yellow.png", + line_length = 5, + width = 16, + height = 18, + frame_count = 33, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", + line_length = 5, + width = 28, + height = 16, + frame_count = 33, + priority = "high", + shift = { -0.09, 0.395 }, + }, + rotatable = false, + }, + + { + type = "projectile", + name = "shotgun-flame-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.5, -1 }, { 0.5, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 1, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 12, type = "fire" }, + }, + { + type = "create-sticker", + sticker = "fire-sticker", + }, + }, + }, + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-red.png", + line_length = 5, + width = 16, + height = 18, + frame_count = 33, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", + line_length = 5, + width = 28, + height = 16, + frame_count = 33, + priority = "high", + shift = { -0.09, 0.395 }, + }, + rotatable = false, + }, + + { + type = "projectile", + name = "shotgun-acid-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.5, -1 }, { 0.5, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 1, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 12, type = "acid" }, + }, + }, + }, + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-purple.png", + line_length = 5, + width = 16, + height = 18, + frame_count = 33, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", + line_length = 5, + width = 28, + height = 16, + frame_count = 33, + priority = "high", + shift = { -0.09, 0.395 }, + }, + rotatable = false, + }, + + { + type = "projectile", + name = "shotgun-poison-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.5, -1 }, { 0.5, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 1, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 12, type = "poison" }, + }, + { + type = "create-sticker", + sticker = "poison-sticker", + }, + }, + }, + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-green.png", + line_length = 5, + width = 16, + height = 18, + frame_count = 33, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", + line_length = 5, + width = 28, + height = 16, + frame_count = 33, + priority = "high", + shift = { -0.09, 0.395 }, + }, + rotatable = false, + }, + + { + type = "projectile", + name = "shotgun-uranium-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.05, -1 }, { 0.05, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "damage", + damage = { amount = 16, type = "physical" }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", + tint = { r = 0.3, g = 1.0, b = 0.3, a = 1 }, + frame_count = 1, + width = 3, + height = 50, + priority = "high", + }, + }, + + { + type = "projectile", + name = "bob-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "damage", + damage = { amount = 240, type = "physical" }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-piercing-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "damage", + damage = { amount = 240, type = "bob-pierce" }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/piercing-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-electric-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "damage", + damage = { amount = 240, type = "electric" }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/electric-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-explosive-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "nested-result", + action = { + type = "area", + radius = 6.5, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 180, type = "explosion" }, + }, + }, + }, + }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/explosive-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-flame-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "create-fire", + entity_name = "fire-flame", + }, + { + type = "nested-result", + action = { + type = "area", + radius = 6.5, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 180, type = "fire" }, + }, + { + type = "create-sticker", + sticker = "fire-sticker", + }, + }, + }, + }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/flame-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-poison-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "create-entity", + entity_name = "small-poison-cloud", + }, + { + type = "nested-result", + action = { + type = "area", + radius = 6.5, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 180, type = "poison" }, + }, + { + type = "create-sticker", + sticker = "poison-sticker", + }, + }, + }, + }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/poison-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, + + { + type = "projectile", + name = "bob-acid-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "explosion" }, + }, + { + type = "nested-result", + action = { + type = "area", + radius = 6.5, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 180, type = "acid" }, + }, + }, + }, + }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/acid-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, +}) + +data:extend({ + { + type = "projectile", + name = "cannon-projectile-pellet", + flags = { "not-on-map" }, + collision_box = { { -0.05, -0.25 }, { 0.05, 0.25 } }, + acceleration = 0, + direction_only = true, + piercing_damage = 30, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 20, type = "physical" }, + }, + { + type = "damage", + damage = { amount = 10, type = "bob-pierce" }, + }, + { + type = "damage", + damage = { amount = 10, type = "explosion" }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", + tint = { r = 1, g = 1, b = 1, a = 0.8 }, + frame_count = 1, + width = 3, + height = 50, + priority = "high", + }, + }, +}) + +data:extend({ + { + type = "projectile", + name = "fire-capsule", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + { + type = "cluster", + cluster_count = 7, + distance = 4, + distance_deviation = 3, + action_delivery = { + type = "instant", + target_effects = { + type = "create-fire", + entity_name = "fire-flame", + }, + }, + }, + { + type = "area", + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 15, type = "fire" }, + apply_damage_to_trees = false, + }, + { + type = "create-sticker", + sticker = "fire-sticker", + }, + { + type = "create-fire", + entity_name = "fire-flame-on-tree", + }, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/icons/fire-capsule.png", + frame_count = 1, + width = 32, + height = 32, + priority = "high", + }, + shadow = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", + frame_count = 1, + width = 32, + height = 32, + priority = "high", + }, + smoke = capsule_smoke, + }, +}) + +data.raw.projectile["poison-capsule"].action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + type = "create-entity", + show_in_tooltip = true, + entity_name = "poison-cloud", + }, + }, + }, + { + type = "area", + radius = 11, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 10, type = "poison" }, + }, + { + type = "create-sticker", + sticker = "poison-sticker", + }, + }, + }, + }, +} + +data:extend({ + { + type = "artillery-projectile", + name = "poison-artillery-projectile", + flags = { "not-on-map" }, + reveal_map = true, + map_color = { r = 0, g = 1, b = 0 }, + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "poison-artillery-cloud", + }, + }, + }, + }, + { + type = "area", + radius = 11, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 750, type = "poison" }, + }, + { + type = "damage", + damage = { amount = 250, type = "explosion" }, + }, + { + type = "create-sticker", + sticker = "poison-sticker", + }, + }, + }, + }, + }, + picture = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule.png", + width = 32, + height = 32, + priority = "high", + }, + shadow = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", + width = 32, + height = 32, + priority = "high", + }, + chart_picture = { + filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", + flags = { "icon" }, + frame_count = 1, + width = 64, + height = 64, + priority = "high", + scale = 0.25, + }, + height_from_ground = 280 / 64, + }, + + { + type = "artillery-projectile", + name = "fire-artillery-projectile", + flags = { "not-on-map" }, + reveal_map = true, + map_color = { r = 1, g = 0, b = 0 }, + action = { + { + type = "cluster", + cluster_count = 12, + distance = 6, + distance_deviation = 6, + action_delivery = { + type = "instant", + target_effects = { + type = "create-fire", + entity_name = "fire-flame", + }, + }, + }, + { + type = "area", + radius = 11, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 750, type = "fire" }, + apply_damage_to_trees = false, + }, + { + type = "damage", + damage = { amount = 250, type = "explosion" }, + apply_damage_to_trees = false, + }, + { + type = "create-sticker", + sticker = "fire-sticker", + }, + { + type = "create-fire", + entity_name = "fire-flame-on-tree", + }, + }, + }, + }, + }, + picture = { + filename = "__bobwarfare__/graphics/icons/fire-capsule.png", + width = 32, + height = 32, + priority = "high", + }, + shadow = { + filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", + width = 32, + height = 32, + priority = "high", + }, + chart_picture = { + filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", + flags = { "icon" }, + frame_count = 1, + width = 64, + height = 64, + priority = "high", + scale = 0.25, + }, + height_from_ground = 280 / 64, + }, + + { + type = "artillery-projectile", + name = "explosive-artillery-projectile", + flags = { "not-on-map" }, + reveal_map = true, + map_color = { r = 0.2, g = 0.2, b = 0.2 }, + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + { + type = "create-trivial-smoke", + smoke_name = "artillery-smoke", + initial_height = 0, + speed_from_center = 0.05, + speed_from_center_deviation = 0.005, + offset_deviation = { { -4, -4 }, { 4, 4 } }, + max_radius = 3.5, + repeat_count = 4 * 4 * 15, + }, + { + type = "create-entity", + entity_name = "big-artillery-explosion", + }, + { + type = "show-explosion-on-chart", + scale = 8 / 32, + }, + }, + }, + }, + { + type = "area", + radius = 11, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 1000, type = "explosion" }, + }, + { + type = "create-entity", + entity_name = "explosion", + }, + }, + }, + }, + }, + picture = { + filename = "__base__/graphics/entity/artillery-projectile/hr-shell.png", + width = 64, + height = 64, + scale = 0.5, + }, + chart_picture = { + filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", + flags = { "icon" }, + frame_count = 1, + width = 64, + height = 64, + priority = "high", + scale = 0.25, + }, + height_from_ground = 280 / 64, + }, + + { + type = "artillery-projectile", + name = "distractor-artillery-projectile", + flags = { "not-on-map" }, + reveal_map = true, + map_color = { r = 0, g = 0.5, b = 1 }, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + show_in_tooltip = true, + entity_name = "distractor", + offsets = { + { 0.6, -0.8 }, + { -0.6, -0.8 }, + { 0.6, 0.8 }, + { -0.6, 0.8 }, + { 1, 0 }, + { -1, 0 }, + { -1.6, -2.4 }, + { 1.6, -2.4 }, + { -1.6, 2.4 }, + { 1.6, 2.4 }, + { -2.4, -1.6 }, + { 2.4, -1.6 }, + { -2.4, 1.6 }, + { 2.4, 1.6 }, + { 0, 0 }, + }, + }, + }, + }, + }, + picture = { + filename = "__base__/graphics/entity/combat-robot-capsule/distractor-capsule.png", + frame_count = 1, + width = 36, + height = 30, + priority = "high", + }, + shadow = { + filename = "__base__/graphics/entity/combat-robot-capsule/distractor-capsule-shadow.png", + frame_count = 1, + width = 40, + height = 26, + priority = "high", + }, + chart_picture = { + filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", + flags = { "icon" }, + frame_count = 1, + width = 64, + height = 64, + priority = "high", + scale = 0.25, + }, + height_from_ground = 280 / 64, + }, + { + type = "artillery-projectile", + name = "atomic-artillery-projectile", + flags = { "not-on-map" }, + reveal_map = true, + map_color = { r = 0, g = 1, b = 0 }, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "set-tile", + tile_name = "nuclear-ground", + radius = 12, + apply_projection = true, + tile_collision_mask = { "water-tile" }, + }, + { + type = "destroy-cliffs", + radius = 9, + explosion = "explosion", + }, + { + type = "create-entity", + entity_name = "nuke-explosion", + }, + { + type = "camera-effect", + effect = "screen-burn", + duration = 60, + ease_in_duration = 5, + ease_out_duration = 60, + delay = 0, + strength = 6, + full_strength_max_distance = 200, + max_distance = 800, + }, + { + type = "play-sound", + sound = sounds.nuclear_explosion(0.9), + play_on_target_position = false, + -- min_distance = 200, + max_distance = 1000, + -- volume_modifier = 1, + audible_distance_modifier = 3, + }, + { + type = "play-sound", + sound = sounds.nuclear_explosion_aftershock(0.4), + play_on_target_position = false, + -- min_distance = 200, + max_distance = 1000, + -- volume_modifier = 1, + audible_distance_modifier = 3, + }, + { + type = "damage", + damage = { amount = 400, type = "explosion" }, + }, + { + type = "create-entity", + entity_name = "huge-scorchmark", + offsets = { { 0, -0.5 } }, + check_buildability = true, + }, + { + type = "invoke-tile-trigger", + repeat_count = 1, + }, + { + type = "destroy-decoratives", + include_soft_decoratives = true, -- soft decoratives are decoratives with grows_through_rail_path = true + include_decals = true, + invoke_decorative_trigger = true, + decoratives_with_trigger_only = false, -- if true, destroys only decoratives that have trigger_effect set + radius = 14, -- large radius for demostrative purposes + }, + { + type = "create-decorative", + decorative = "nuclear-ground-patch", + spawn_min_radius = 11.5, + spawn_max_radius = 12.5, + spawn_min = 30, + spawn_max = 40, + apply_projection = true, + spread_evenly = true, + }, + { + type = "nested-result", + action = { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 2000, + radius = 7, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-ground-zero-projectile", + starting_speed = 0.6 * 0.8, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + target_entities = false, + trigger_from_target = true, + repeat_count = 1000, + radius = 35, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-wave", + starting_speed = 0.5 * 0.7, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 1000, + radius = 26, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-cluster-nuke-explosion", + starting_speed = 0.5 * 0.7, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 700, + radius = 4, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-fire-smoke-explosion", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 1000, + radius = 8, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-nuke-shockwave-explosion", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 300, + radius = 26, + action_delivery = { + type = "projectile", + projectile = "atomic-bomb-wave-spawns-nuclear-smoke", + starting_speed = 0.5 * 0.65, + starting_speed_deviation = nuke_shockwave_starting_speed_deviation, + }, + }, + }, + { + type = "nested-result", + action = { + type = "area", + show_in_tooltip = false, + target_entities = false, + trigger_from_target = true, + repeat_count = 10, + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "nuclear-smouldering-smoke-source", + tile_collision_mask = { "water-tile" }, + }, + }, + }, + }, + }, + { + type = "create-trivial-smoke", + smoke_name = "artillery-smoke", + initial_height = 0, + speed_from_center = 0.05, + speed_from_center_deviation = 0.005, + offset_deviation = { { -4, -4 }, { 4, 4 } }, + max_radius = 3.5, + repeat_count = 4 * 4 * 15, + }, + }, + }, + }, + picture = { + filename = "__base__/graphics/entity/rocket/rocket.png", + draw_as_glow = true, + width = 9, + height = 35, + shift = { 0, 0 }, + priority = "high", + }, + shadow = { + filename = "__base__/graphics/entity/rocket/rocket-shadow.png", + frame_count = 1, + width = 7, + height = 24, + priority = "high", + shift = { 0, 0 }, + }, + chart_picture = { + filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", + flags = { "icon" }, + frame_count = 1, + width = 64, + height = 64, + priority = "high", + scale = 0.25, + }, + height_from_ground = 280 / 64, + }, +}) + +data:extend({ + { + type = "projectile", + name = "bob-plasma-projectile", + flags = { "not-on-map" }, + acceleration = 0, + -- direction_only = true, + action = { + { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "plasma-explosion", + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + { + type = "area", + radius = 8, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 25, type = "plasma" }, + }, + { + type = "damage", + damage = { amount = 15, type = "electric" }, + }, + { + type = "damage", + damage = { amount = 10, type = "explosion" }, + }, + { + type = "create-sticker", + sticker = "plasma-sticker", + }, + { + type = "create-entity", + entity_name = "explosion", + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/particles2.png", + tint = { r = 0.4, g = 0.7, b = 1, a = 1 }, + frame_count = 32, + line_length = 8, + x = 512, + y = 0, + width = 64, + height = 64, + priority = "high", + }, + }, +}) + +data:extend({ + { + type = "projectile", + name = "shotgun-plasma-projectile", + flags = { "not-on-map" }, + collision_box = { { -0.5, -1 }, { 0.5, 1 } }, + acceleration = 0, + direction_only = true, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "nested-result", + action = { + type = "area", + radius = 1, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 25, type = "plasma" }, + }, + { + type = "create-sticker", + sticker = "plasma-sticker", + }, + }, + }, + }, + }, + }, + }, + }, + animation = { + filename = "__bobwarfare__/graphics/entities/particles2.png", + tint = { r = 0.4, g = 0.7, b = 1, a = 1 }, + frame_count = 32, + line_length = 8, + x = 512, + y = 0, + width = 64, + height = 64, + scale = 0.3, + priority = "high", + }, + rotatable = false, + }, + { + type = "projectile", + name = "bob-plasma-rocket", + flags = { "not-on-map" }, + acceleration = 0.005, + action = { + type = "direct", + action_delivery = { + type = "instant", + target_effects = { + { + type = "create-entity", + entity_name = "plasma-explosion", + }, + { + type = "damage", + damage = { amount = 120, type = "plasma" }, + }, + { + type = "nested-result", + action = { + type = "area", + radius = 6.5, + action_delivery = { + type = "instant", + target_effects = { + { + type = "damage", + damage = { amount = 180, type = "plasma" }, + }, + { + type = "create-sticker", + sticker = "plasma-sticker", + }, + }, + }, + }, + }, + { + type = "create-entity", + entity_name = "small-scorchmark", + check_buildability = true, + }, + }, + }, + }, + light = { intensity = 0.5, size = 4 }, + animation = { + filename = "__bobwarfare__/graphics/entities/projectiles/plasma-rocket.png", + frame_count = 1, + width = 18, + height = 39, + priority = "high", + }, + shadow = { + filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", + frame_count = 1, + width = 18, + height = 32, + priority = "high", + }, + smoke = { + { + name = "smoke-fast", + deviation = { 0.15, 0.15 }, + frequency = 1, + position = { 0, 0 }, + slow_down_factor = 1, + starting_frame = 3, + starting_frame_deviation = 5, + starting_frame_speed = 0, + starting_frame_speed_deviation = 5, + }, + }, + }, +}) diff --git a/bobwarfare_1.1.6/prototypes/entity/radar.lua b/bobwarfare/prototypes/entity/radar.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/entity/radar.lua rename to bobwarfare/prototypes/entity/radar.lua diff --git a/bobwarfare/prototypes/entity/sounds.lua b/bobwarfare/prototypes/entity/sounds.lua new file mode 100644 index 00000000..0eaf4454 --- /dev/null +++ b/bobwarfare/prototypes/entity/sounds.lua @@ -0,0 +1,114 @@ +local sounds = {} +sounds.laser = { + begin_sound = { + { + filename = "__bobwarfare__/sound/laser-beam-01.ogg", + volume = 0.6, + }, + }, + middle_sound = { + { + filename = "__bobwarfare__/sound/laser-beam-02.ogg", + volume = 0.6, + }, + }, + end_sound = { + { + filename = "__bobwarfare__/sound/laser-beam-03.ogg", + volume = 0.6, + }, + }, +} + +sounds.plasmaTurret = function(volume) + return { + { + filename = "__bobwarfare__/sound/plasma-turret-01.ogg", + volume = volume, + }, + } +end + +sounds.turretFire = { + { + filename = "__bobwarfare__/sound/turret_fire.ogg", + volume = 0.5, + }, +} + +sounds.rifle = { + { + filename = "__bobwarfare__/sound/Rifle1.ogg", + volume = 0.35, + }, + { + filename = "__bobwarfare__/sound/Rifle2.ogg", + volume = 0.35, + }, + { + filename = "__bobwarfare__/sound/Rifle3.ogg", + volume = 0.35, + }, +} + +sounds.sniperRifle = { + { + filename = "__bobwarfare__/sound/Sniper_Rifle1.ogg", + volume = 1, + }, + { + filename = "__bobwarfare__/sound/Sniper_Rifle2.ogg", + volume = 1, + }, + { + filename = "__bobwarfare__/sound/Sniper_Rifle3.ogg", + volume = 1, + }, + { + filename = "__bobwarfare__/sound/Sniper_Rifle4.ogg", + volume = 1, + }, + { + filename = "__bobwarfare__/sound/Sniper_Rifle5.ogg", + volume = 1, + }, +} + +sounds.tankTurret = { + { filename = "__bobwarfare__/sound/Tank_Turret1.ogg", volume = 0.6 }, + { + filename = "__bobwarfare__/sound/Tank_Turret2.ogg", + volume = 0.6, + }, + { + filename = "__bobwarfare__/sound/Tank_Turret3.ogg", + volume = 0.6, + }, +} + +sounds.gunTurret = { + { + filename = "__bobwarfare__/sound/Gun_Turret1.ogg", + volume = 0.6, + }, + { + filename = "__bobwarfare__/sound/Gun_Turret2.ogg", + volume = 0.6, + }, + { + filename = "__bobwarfare__/sound/Gun_Turret3.ogg", + volume = 0.6, + }, +} + +sounds.plasmaExplosion = { + { + filename = "__bobwarfare__/sound/plasma-explosion-01.ogg", + volume = 1.0, + }, + { + filename = "__bobwarfare__/sound/plasma-explosion-02.ogg", + volume = 1.0, + }, +} +return sounds diff --git a/bobwarfare_1.1.6/prototypes/entity/tank.lua b/bobwarfare/prototypes/entity/tank.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/entity/tank.lua rename to bobwarfare/prototypes/entity/tank.lua diff --git a/bobwarfare_1.1.6/prototypes/entity/turrets.lua b/bobwarfare/prototypes/entity/turrets.lua similarity index 91% rename from bobwarfare_1.1.6/prototypes/entity/turrets.lua rename to bobwarfare/prototypes/entity/turrets.lua index 9e344754..e772bf5c 100644 --- a/bobwarfare_1.1.6/prototypes/entity/turrets.lua +++ b/bobwarfare/prototypes/entity/turrets.lua @@ -393,7 +393,7 @@ local function bob_laser_turret_extension(inputs) } end -function bob_laser_turret_extension_eight(inputs) +local function bob_laser_turret_extension_eight(inputs) local size = inputs.size or 1 return { layers = { @@ -700,65 +700,69 @@ local function bob_turret_extension(inputs) end local function bob_gun_turret(inputs) - return - { - type = "ammo-turret", - name = inputs.name, - icon = "__base__/graphics/icons/gun-turret.png", - icon_size = 64, - icon_mipmaps = 4, - flags = { "placeable-player", "player-creation" }, - minable = { mining_time = 0.5, result = inputs.name }, - max_health = inputs.health, - corpse = "gun-turret-remnants", - collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, - selection_box = { { -1, -1 }, { 1, 1 } }, - rotation_speed = 0.015, - preparing_speed = 0.08, - folding_speed = 0.08, - dying_explosion = "medium-explosion", - inventory_size = inputs.inventory_size or 1, - automated_ammo_count = inputs.automated_ammo_count or 10, - fast_replaceable_group = "turret", - attacking_speed = 0.5, - folded_animation = bob_turret_extension({ - frame_count = 1, - line_length = 1, - type = inputs.gun_type, - tint = inputs.tint, - }), - preparing_animation = bob_turret_extension({ type = inputs.gun_type, tint = inputs.tint }), - folding_animation = bob_turret_extension({ run_mode = "backward", type = inputs.gun_type, tint = inputs.tint }), - prepared_animation = bob_turret_attack({ frame_count = 1, type = inputs.gun_type, tint = inputs.tint }), - attacking_animation = bob_turret_attack({ type = inputs.gun_type, tint = inputs.tint }), - base_picture = inputs.base, - vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, - attack_parameters = { - type = "projectile", - ammo_category = inputs.ammo_category or "bullet", - cooldown = inputs.cooldown or 6, - projectile_creation_distance = 1.39375, - projectile_center = { 0.0625, -0.0875 }, -- same as gun_turret_attack shift - damage_modifier = inputs.damage_modifier or 2, - range = inputs.range or 17, - shell_particle = { - name = "shell-particle", - direction_deviation = 0.1, - speed = 0.1, - speed_deviation = 0.03, - center = { 0, 0 }, - creation_distance = -1.925, - starting_frame_speed = 0.2, - starting_frame_speed_deviation = 0.1, - }, - sound = sounds.heavy_gunshot, + local preparerange = inputs.range or 17 + preparerange = preparerange + 1 + return { + type = "ammo-turret", + name = inputs.name, + icon = "__base__/graphics/icons/gun-turret.png", + icon_size = 64, + icon_mipmaps = 4, + flags = { "placeable-player", "player-creation" }, + minable = { mining_time = 0.5, result = inputs.name }, + max_health = inputs.health, + corpse = "gun-turret-remnants", + collision_box = { { -0.7, -0.7 }, { 0.7, 0.7 } }, + selection_box = { { -1, -1 }, { 1, 1 } }, + rotation_speed = inputs.rotation_speed or 0.015, + preparing_speed = 0.08, + folding_speed = 0.08, + dying_explosion = "medium-explosion", + inventory_size = inputs.inventory_size or 1, + automated_ammo_count = inputs.automated_ammo_count or 10, + fast_replaceable_group = "turret", + attacking_speed = 0.5, + folded_animation = bob_turret_extension({ + frame_count = 1, + line_length = 1, + type = inputs.gun_type, + tint = inputs.tint, + }), + preparing_animation = bob_turret_extension({ type = inputs.gun_type, tint = inputs.tint }), + folding_animation = bob_turret_extension({ run_mode = "backward", type = inputs.gun_type, tint = inputs.tint }), + prepared_animation = bob_turret_attack({ frame_count = 1, type = inputs.gun_type, tint = inputs.tint }), + attacking_animation = bob_turret_attack({ type = inputs.gun_type, tint = inputs.tint }), + base_picture = inputs.base, + vehicle_impact_sound = { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 }, + attack_parameters = { + type = "projectile", + ammo_category = inputs.ammo_category or "bullet", + cooldown = inputs.cooldown or 6, + projectile_creation_distance = 1.39375, + projectile_center = { 0.0625, -0.0875 }, -- same as gun_turret_attack shift + damage_modifier = inputs.damage_modifier or 2, + range = inputs.range or 17, + shell_particle = { + name = "shell-particle", + direction_deviation = 0.1, + speed = 0.1, + speed_deviation = 0.03, + center = { 0, 0 }, + creation_distance = -1.925, + starting_frame_speed = 0.2, + starting_frame_speed_deviation = 0.1, }, - call_for_help_radius = 40, - } + sound = sounds.heavy_gunshot, + }, + call_for_help_radius = 40, + prepare_range = inputs.prepare_range or preparerange, + } end local function bob_laser_turret(inputs) local size = inputs.size or 1 + local preparerange = inputs.range or 25 + preparerange = preparerange + 1 local turret = { type = "electric-turret", name = inputs.name, @@ -771,7 +775,7 @@ local function bob_laser_turret(inputs) collision_box = { { -0.7 * size, -0.7 * size }, { 0.7 * size, 0.7 * size } }, selection_box = { { -1 * size, -1 * size }, { 1 * size, 1 * size } }, dying_explosion = "medium-explosion", - rotation_speed = 0.01, + rotation_speed = inputs.rotation_speed or 0.01, preparing_speed = 0.05, folding_speed = 0.05, fast_replaceable_group = "turret", @@ -816,7 +820,6 @@ local function bob_laser_turret(inputs) category = "laser", target_type = inputs.target_type or nil, energy_consumption = inputs.energy_consumption or "800kJ", - speed = 1, clamp_position = inputs.clamp_position or nil, action = { { @@ -837,6 +840,7 @@ local function bob_laser_turret(inputs) }, }, } + turret.prepare_range = inputs.prepare_range or preparerange else turret.attack_parameters = { type = "beam", @@ -861,6 +865,7 @@ local function bob_laser_turret(inputs) }, }, } + turret.prepare_range = inputs.prepare_range or preparerange end return turret end @@ -869,52 +874,60 @@ data:extend({ -- bob_gun_turret{name = "gun-turret", health = 400, inventory_size = 1, automated_ammo_count = 10, ammo_category = "bullet", damage_modifier = 1, cooldown = 6, range = 18, tint = white, , base_tint = white}, bob_gun_turret({ name = "bob-gun-turret-2", - health = 500, + health = 800, inventory_size = 1, automated_ammo_count = 10, ammo_category = "bullet", damage_modifier = 1.25, cooldown = 6, range = 19, + prepare_range = 19.5, + rotation_speed = 0.017, tint = red, gun_type = "gun", base = bob_turret_base({ type = "gun", tint = blue }), }), bob_gun_turret({ name = "bob-gun-turret-3", - health = 600, + health = 1200, inventory_size = 2, automated_ammo_count = 20, ammo_category = "bullet", damage_modifier = 1.5, cooldown = 6, range = 20, + prepare_range = 21, + rotation_speed = 0.019, tint = blue, gun_type = "gun", base = bob_turret_base({ type = "gun", tint = blue }), }), bob_gun_turret({ name = "bob-gun-turret-4", - health = 700, + health = 1600, inventory_size = 2, automated_ammo_count = 20, ammo_category = "bullet", damage_modifier = 1.75, cooldown = 6, range = 21, + prepare_range = 22.5, + rotation_speed = 0.021, tint = purple, gun_type = "gun", base = bob_turret_base({ type = "gun", tint = blue }), }), bob_gun_turret({ name = "bob-gun-turret-5", - health = 800, + health = 2000, inventory_size = 3, automated_ammo_count = 30, ammo_category = "bullet", damage_modifier = 2, cooldown = 6, range = 22, + prepare_range = 24, + rotation_speed = 0.023, tint = green, gun_type = "gun", base = bob_turret_base({ type = "gun", tint = blue }), @@ -929,6 +942,7 @@ data:extend({ damage_modifier = 15, cooldown = 150, range = 30, + prepare_range = 32, tint = yellow, gun_type = "gun", base = bob_turret_base({ type = "laser", tint = red }), @@ -942,6 +956,7 @@ data:extend({ damage_modifier = 20, cooldown = 120, range = 35, + prepare_range = 37, tint = blue, gun_type = "gun", base = bob_turret_base({ type = "laser", tint = red }), @@ -955,6 +970,7 @@ data:extend({ damage_modifier = 25, cooldown = 105, range = 40, + prepare_range = 42, tint = green, gun_type = "gun", base = bob_turret_base({ type = "laser", tint = red }), @@ -973,6 +989,8 @@ data:extend({ damage_modifier = 3, cooldown = 35, range = 26, + prepare_range = 26.5, + rotation_speed = 0.011, tint = red, base = bob_turret_base({ type = "laser", tint = yellow }), }), @@ -988,6 +1006,8 @@ data:extend({ damage_modifier = 4.2, cooldown = 30, range = 28, + prepare_range = 29, + rotation_speed = 0.012, tint = blue, base = bob_turret_base({ type = "laser", tint = yellow }), }), @@ -1003,6 +1023,8 @@ data:extend({ damage_modifier = 5.6, cooldown = 25, range = 30, + prepare_range = 31.5, + rotation_speed = 0.013, tint = purple, base = bob_turret_base({ type = "laser", tint = yellow }), }), @@ -1018,6 +1040,8 @@ data:extend({ damage_modifier = 7.2, cooldown = 20, range = 32, + prepare_range = 34, + rotation_speed = 0.014, tint = green, base = bob_turret_base({ type = "laser", tint = yellow }), }), @@ -1042,6 +1066,7 @@ data:extend({ damage_modifier = 12 * 1, cooldown = 200, range = 60, + prepare_range = 62, sound = warefareSounds.plasmaTurret(0.7), min_range = 30, direction_deviation = 0, @@ -1073,6 +1098,7 @@ data:extend({ damage_modifier = 12 * 1.5, cooldown = 150, range = 65, + prepare_range = 67, sound = warefareSounds.plasmaTurret(0.75), min_range = 30, direction_deviation = 0, @@ -1104,6 +1130,7 @@ data:extend({ damage_modifier = 12 * 2.1, cooldown = 120, range = 70, + prepare_range = 72, sound = warefareSounds.plasmaTurret(0.8), min_range = 30, direction_deviation = 0, @@ -1135,6 +1162,7 @@ data:extend({ damage_modifier = 12 * 2.8, cooldown = 100, range = 75, + prepare_range = 77, sound = warefareSounds.plasmaTurret(0.9), min_range = 30, direction_deviation = 0, @@ -1166,6 +1194,7 @@ data:extend({ damage_modifier = 12 * 3.6, cooldown = 85, range = 80, + prepare_range = 82, sound = warefareSounds.plasmaTurret(1), min_range = 30, direction_deviation = 0, diff --git a/bobwarfare_1.1.6/prototypes/entity/wall.lua b/bobwarfare/prototypes/entity/wall.lua similarity index 85% rename from bobwarfare_1.1.6/prototypes/entity/wall.lua rename to bobwarfare/prototypes/entity/wall.lua index e0543f07..71c86727 100644 --- a/bobwarfare_1.1.6/prototypes/entity/wall.lua +++ b/bobwarfare/prototypes/entity/wall.lua @@ -1,3 +1,5 @@ +local hit_effects = require("__base__/prototypes/entity/hit-effects") + local reinforced_wall_resistances = { { type = "physical", @@ -56,13 +58,17 @@ data:extend({ flags = { "placeable-neutral", "player-creation" }, collision_box = { { -0.29, -0.29 }, { 0.29, 0.29 } }, selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - minable = { mining_time = 1, result = "reinforced-wall" }, + damaged_trigger_effect = hit_effects.wall(), + minable = { mining_time = 0.2, result = "reinforced-wall" }, fast_replaceable_group = "wall", max_health = 750, repair_speed_modifier = 2, corpse = "wall-remnants", + dying_explosion = "wall-explosion", repair_sound = { filename = "__base__/sound/manual-repair-simple.ogg" }, mined_sound = { filename = "__base__/sound/deconstruct-bricks.ogg" }, + open_sound = { filename = "__base__/sound/machine-open.ogg" }, + close_sound = { filename = "__base__/sound/machine-close.ogg", volume = 0.5 }, vehicle_impact_sound = { filename = "__base__/sound/car-stone-impact.ogg", volume = 1.0 }, -- this kind of code can be used for having walls mirror the effect -- there can be multiple reaction items @@ -100,6 +106,7 @@ data:extend({ scale = 0.5, }, resistances = reinforced_wall_resistances, + visual_merge_group = 0, -- different walls will visually connect to each other if their merge group is same (defaults to 0) pictures = { single = { layers = { @@ -373,13 +380,50 @@ data:extend({ }, }, }, + gate_connection_patch = { + sheets = { + { + filename = "__base__/graphics/entity/wall/wall-gate.png", + priority = "extra-high", + width = 42, + height = 56, + shift = util.by_pixel(0, -8), + hr_version = { + filename = "__base__/graphics/entity/wall/hr-wall-gate.png", + priority = "extra-high", + width = 82, + height = 108, + shift = util.by_pixel(0, -7), + scale = 0.5, + }, + }, + { + filename = "__base__/graphics/entity/wall/wall-gate-shadow.png", + priority = "extra-high", + width = 66, + height = 40, + shift = util.by_pixel(14, 18), + draw_as_shadow = true, + hr_version = { + filename = "__base__/graphics/entity/wall/hr-wall-gate-shadow.png", + priority = "extra-high", + width = 130, + height = 78, + shift = util.by_pixel(14, 18), + draw_as_shadow = true, + scale = 0.5, + }, + }, + }, + }, }, - wall_diode_green = util.conditional_return(not data.is_demo, { + wall_diode_green = { sheet = { filename = "__base__/graphics/entity/wall/wall-diode-green.png", priority = "extra-high", width = 38, height = 24, + draw_as_glow = true, --frames = 4, -- this is optional, it will default to 4 for Sprite4Way line_length = 4, shift = util.by_pixel(-2, -24), @@ -388,48 +432,50 @@ data:extend({ priority = "extra-high", width = 72, height = 44, + draw_as_glow = true, --frames = 4, line_length = 4, shift = util.by_pixel(-1, -23), scale = 0.5, }, }, - }), - wall_diode_green_light_top = util.conditional_return(not data.is_demo, { + }, + wall_diode_green_light_top = { minimum_darkness = 0.3, color = { g = 1 }, shift = util.by_pixel(0, -30), size = 1, intensity = 0.3, - }), - wall_diode_green_light_right = util.conditional_return(not data.is_demo, { + }, + wall_diode_green_light_right = { minimum_darkness = 0.3, color = { g = 1 }, shift = util.by_pixel(12, -23), size = 1, intensity = 0.3, - }), - wall_diode_green_light_bottom = util.conditional_return(not data.is_demo, { + }, + wall_diode_green_light_bottom = { minimum_darkness = 0.3, color = { g = 1 }, shift = util.by_pixel(0, -17), size = 1, intensity = 0.3, - }), - wall_diode_green_light_left = util.conditional_return(not data.is_demo, { + }, + wall_diode_green_light_left = { minimum_darkness = 0.3, color = { g = 1 }, shift = util.by_pixel(-12, -23), size = 1, intensity = 0.3, - }), + }, - wall_diode_red = util.conditional_return(not data.is_demo, { + wall_diode_red = { sheet = { filename = "__base__/graphics/entity/wall/wall-diode-red.png", priority = "extra-high", width = 38, height = 24, + draw_as_glow = true, --frames = 4, -- this is optional, it will default to 4 for Sprite4Way line_length = 4, shift = util.by_pixel(-2, -24), @@ -438,45 +484,46 @@ data:extend({ priority = "extra-high", width = 72, height = 44, + draw_as_glow = true, --frames = 4, line_length = 4, shift = util.by_pixel(-1, -23), scale = 0.5, }, }, - }), - wall_diode_red_light_top = util.conditional_return(not data.is_demo, { + }, + wall_diode_red_light_top = { minimum_darkness = 0.3, color = { r = 1 }, shift = util.by_pixel(0, -30), size = 1, intensity = 0.3, - }), - wall_diode_red_light_right = util.conditional_return(not data.is_demo, { + }, + wall_diode_red_light_right = { minimum_darkness = 0.3, color = { r = 1 }, shift = util.by_pixel(12, -23), size = 1, intensity = 0.3, - }), - wall_diode_red_light_bottom = util.conditional_return(not data.is_demo, { + }, + wall_diode_red_light_bottom = { minimum_darkness = 0.3, color = { r = 1 }, shift = util.by_pixel(0, -17), size = 1, intensity = 0.3, - }), - wall_diode_red_light_left = util.conditional_return(not data.is_demo, { + }, + wall_diode_red_light_left = { minimum_darkness = 0.3, color = { r = 1 }, shift = util.by_pixel(-12, -23), size = 1, intensity = 0.3, - }), + }, circuit_wire_connection_point = circuit_connector_definitions["gate"].points, circuit_connector_sprites = circuit_connector_definitions["gate"].sprites, - circuit_wire_max_distance = 7.5, + circuit_wire_max_distance = 9, default_output_signal = { type = "virtual", name = "signal-G" }, }, @@ -484,7 +531,7 @@ data:extend({ data.raw.gate.gate, { name = "reinforced-gate", - minable = { mining_time = 1, result = "reinforced-gate" }, + minable = { mining_time = 0.1, result = "reinforced-gate" }, max_health = 750, opening_speed = 0.1, }, diff --git a/bobwarfare_1.1.6/prototypes/equipment-grid.lua b/bobwarfare/prototypes/equipment-grid.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/equipment-grid.lua rename to bobwarfare/prototypes/equipment-grid.lua diff --git a/bobwarfare_1.1.6/prototypes/item/ammo.lua b/bobwarfare/prototypes/item/ammo.lua similarity index 95% rename from bobwarfare_1.1.6/prototypes/item/ammo.lua rename to bobwarfare/prototypes/item/ammo.lua index c9576d6f..5b2a47cd 100644 --- a/bobwarfare_1.1.6/prototypes/item/ammo.lua +++ b/bobwarfare/prototypes/item/ammo.lua @@ -361,10 +361,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 20, @@ -375,6 +371,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -392,10 +392,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 20, @@ -406,6 +402,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -423,10 +423,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 20, @@ -437,6 +433,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -454,10 +454,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 10, @@ -468,6 +464,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -485,10 +485,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 10, @@ -499,6 +495,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -516,10 +516,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 10, @@ -530,6 +526,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -547,10 +547,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 10, @@ -561,6 +557,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -578,10 +578,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 20, @@ -592,6 +588,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -817,10 +817,6 @@ data:extend({ ammo_type = { category = "cannon-shell", target_type = "direction", - source_effects = { - type = "create-explosion", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 20, @@ -831,6 +827,10 @@ data:extend({ direction_deviation = 0.5, range_deviation = 0.3, max_range = 20, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, @@ -1142,10 +1142,6 @@ data:extend({ ammo_type = { category = "shotgun-shell", target_type = "direction", - source_effects = { - type = "create-entity", - entity_name = "explosion-gunshot", - }, action = { type = "direct", repeat_count = 10, @@ -1156,6 +1152,10 @@ data:extend({ direction_deviation = 0.4, range_deviation = 0.4, max_range = 15, + source_effects = { + type = "create-entity", + entity_name = "explosion-gunshot", + }, }, }, }, diff --git a/bobwarfare_1.1.6/prototypes/item/armor.lua b/bobwarfare/prototypes/item/armor.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/armor.lua rename to bobwarfare/prototypes/item/armor.lua diff --git a/bobwarfare_1.1.6/prototypes/item/drone.lua b/bobwarfare/prototypes/item/drone.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/drone.lua rename to bobwarfare/prototypes/item/drone.lua diff --git a/bobwarfare/prototypes/item/fluid.lua b/bobwarfare/prototypes/item/fluid.lua new file mode 100644 index 00000000..60743cf2 --- /dev/null +++ b/bobwarfare/prototypes/item/fluid.lua @@ -0,0 +1,45 @@ +if data.raw.fluid["nitric-acid"] then + data:extend({ + { + type = "fluid", + name = "sulfuric-nitric-acid", + default_temperature = 25, + heat_capacity = "1KJ", + base_color = { r = 0.0, g = 0.0, b = 1.0 }, + flow_color = { r = 1.0, g = 1.0, b = 0.0 }, + max_temperature = 100, + icon = "__bobwarfare__/graphics/icons/sulfuric-nitric-acid.png", + icon_size = 32, + order = "a[fluid]-g[sulfuric-nitric-acid]", + }, + }) +end + +data:extend({ + { + type = "fluid", + name = "nitroglycerin", + default_temperature = 25, + heat_capacity = "1KJ", + base_color = { r = 0.3, g = 0.3, b = 1.0 }, + flow_color = { r = 1.0, g = 0.3, b = 0.3 }, + max_temperature = 100, + icon = "__bobwarfare__/graphics/icons/nitroglycerin.png", + icon_size = 64, + order = "a[fluid]-g[nitroglycerin]", + }, + + { + type = "fluid", + name = "glycerol", + default_temperature = 25, + heat_capacity = "1KJ", + base_color = { r = 1.0, g = 1.0, b = 0.5 }, + flow_color = { r = 0.5, g = 0.5, b = 0.5 }, + max_temperature = 100, + icon = "__bobwarfare__/graphics/icons/glycerol.png", + icon_size = 64, + order = "a[fluid]-g[glycerol]", + fuel_value = "730kJ", --"1.46MJ" + }, +}) diff --git a/bobwarfare_1.1.6/prototypes/item/gun.lua b/bobwarfare/prototypes/item/gun.lua similarity index 97% rename from bobwarfare_1.1.6/prototypes/item/gun.lua rename to bobwarfare/prototypes/item/gun.lua index 1b63ff7c..6ddf6e91 100644 --- a/bobwarfare_1.1.6/prototypes/item/gun.lua +++ b/bobwarfare/prototypes/item/gun.lua @@ -76,8 +76,6 @@ data:extend({ cooldown = 20, movement_slow_down_factor = 0.5, damage_modifier = 1.2, - projectile_center = { 0, 0 }, - projectile_creation_distance = 0.6, range = 20, }, }, @@ -223,8 +221,6 @@ data:extend({ cooldown = 20, movement_slow_down_factor = 0, damage_modifier = 2, - projectile_creation_distance = 1.6, - projectile_center = { -0.15625, -0.07812 }, range = 25, }, }, @@ -243,7 +239,6 @@ data:extend({ type = "stream", ammo_category = "flamethrower", cooldown = 1, - projectile_creation_distance = 0.6, gun_barrel_length = 1.4, gun_center_shift = { -0.17, -1.15 }, range = 11, @@ -286,7 +281,6 @@ data:extend({ type = "stream", ammo_category = "flamethrower", cooldown = 1, - projectile_creation_distance = 0.6, gun_barrel_length = 1.4, gun_center_shift = { -0.17, -1.15 }, range = 13, diff --git a/bobwarfare_1.1.6/prototypes/item/mine.lua b/bobwarfare/prototypes/item/mine.lua similarity index 85% rename from bobwarfare_1.1.6/prototypes/item/mine.lua rename to bobwarfare/prototypes/item/mine.lua index d7e5646f..886722db 100644 --- a/bobwarfare_1.1.6/prototypes/item/mine.lua +++ b/bobwarfare/prototypes/item/mine.lua @@ -5,12 +5,10 @@ data:extend({ icon = "__base__/graphics/icons/land-mine.png", icon_size = 64, icon_mipmaps = 4, - damage_radius = 5, subgroup = "gun", order = "f[poison-mine]", place_result = "poison-mine", stack_size = 20, - trigger_radius = 1, }, { @@ -19,12 +17,10 @@ data:extend({ icon = "__base__/graphics/icons/land-mine.png", icon_size = 64, icon_mipmaps = 4, - damage_radius = 5, subgroup = "gun", order = "f[distractor-mine]", place_result = "distractor-mine", stack_size = 20, - trigger_radius = 1, }, { @@ -33,11 +29,9 @@ data:extend({ icon = "__base__/graphics/icons/land-mine.png", icon_size = 64, icon_mipmaps = 4, - damage_radius = 5, subgroup = "gun", order = "f[slowdown-mine]", place_result = "slowdown-mine", stack_size = 20, - trigger_radius = 1, }, }) diff --git a/bobwarfare_1.1.6/prototypes/item/parts.lua b/bobwarfare/prototypes/item/parts.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/parts.lua rename to bobwarfare/prototypes/item/parts.lua diff --git a/bobwarfare_1.1.6/prototypes/item/radar.lua b/bobwarfare/prototypes/item/radar.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/radar.lua rename to bobwarfare/prototypes/item/radar.lua diff --git a/bobwarfare_1.1.6/prototypes/item/tank.lua b/bobwarfare/prototypes/item/tank.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/tank.lua rename to bobwarfare/prototypes/item/tank.lua diff --git a/bobwarfare_1.1.6/prototypes/item/turrets.lua b/bobwarfare/prototypes/item/turrets.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/turrets.lua rename to bobwarfare/prototypes/item/turrets.lua diff --git a/bobwarfare_1.1.6/prototypes/item/wall.lua b/bobwarfare/prototypes/item/wall.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/item/wall.lua rename to bobwarfare/prototypes/item/wall.lua diff --git a/bobwarfare_1.1.6/prototypes/overides.lua b/bobwarfare/prototypes/overides.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/overides.lua rename to bobwarfare/prototypes/overides.lua diff --git a/bobwarfare_1.1.6/prototypes/productivity-limitations.lua b/bobwarfare/prototypes/productivity-limitations.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/productivity-limitations.lua rename to bobwarfare/prototypes/productivity-limitations.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/ammo-recipe.lua b/bobwarfare/prototypes/recipe/ammo-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/ammo-recipe.lua rename to bobwarfare/prototypes/recipe/ammo-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/armor-recipe.lua b/bobwarfare/prototypes/recipe/armor-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/armor-recipe.lua rename to bobwarfare/prototypes/recipe/armor-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/drone-updates.lua b/bobwarfare/prototypes/recipe/drone-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/drone-updates.lua rename to bobwarfare/prototypes/recipe/drone-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/drone.lua b/bobwarfare/prototypes/recipe/drone.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/drone.lua rename to bobwarfare/prototypes/recipe/drone.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/fluid-recipe.lua b/bobwarfare/prototypes/recipe/fluid-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/fluid-recipe.lua rename to bobwarfare/prototypes/recipe/fluid-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/gun-recipe.lua b/bobwarfare/prototypes/recipe/gun-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/gun-recipe.lua rename to bobwarfare/prototypes/recipe/gun-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/mine-recipe.lua b/bobwarfare/prototypes/recipe/mine-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/mine-recipe.lua rename to bobwarfare/prototypes/recipe/mine-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/parts-recipe.lua b/bobwarfare/prototypes/recipe/parts-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/parts-recipe.lua rename to bobwarfare/prototypes/recipe/parts-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/radar-recipe.lua b/bobwarfare/prototypes/recipe/radar-recipe.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/radar-recipe.lua rename to bobwarfare/prototypes/recipe/radar-recipe.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/recipe-updates.lua b/bobwarfare/prototypes/recipe/recipe-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/recipe-updates.lua rename to bobwarfare/prototypes/recipe/recipe-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/tank.lua b/bobwarfare/prototypes/recipe/tank.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/tank.lua rename to bobwarfare/prototypes/recipe/tank.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/turrets.lua b/bobwarfare/prototypes/recipe/turrets.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/turrets.lua rename to bobwarfare/prototypes/recipe/turrets.lua diff --git a/bobwarfare_1.1.6/prototypes/recipe/wall.lua b/bobwarfare/prototypes/recipe/wall.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/recipe/wall.lua rename to bobwarfare/prototypes/recipe/wall.lua diff --git a/bobwarfare_1.1.6/prototypes/robot-parts.lua b/bobwarfare/prototypes/robot-parts.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/robot-parts.lua rename to bobwarfare/prototypes/robot-parts.lua diff --git a/bobwarfare_1.1.6/prototypes/robots-updates.lua b/bobwarfare/prototypes/robots-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/robots-updates.lua rename to bobwarfare/prototypes/robots-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/robots.lua b/bobwarfare/prototypes/robots.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/robots.lua rename to bobwarfare/prototypes/robots.lua diff --git a/bobwarfare_1.1.6/prototypes/spidertron-updates.lua b/bobwarfare/prototypes/spidertron-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/spidertron-updates.lua rename to bobwarfare/prototypes/spidertron-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/spidertron.lua b/bobwarfare/prototypes/spidertron.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/spidertron.lua rename to bobwarfare/prototypes/spidertron.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/ammo.lua b/bobwarfare/prototypes/technology/ammo.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/ammo.lua rename to bobwarfare/prototypes/technology/ammo.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/armor.lua b/bobwarfare/prototypes/technology/armor.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/armor.lua rename to bobwarfare/prototypes/technology/armor.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/drone.lua b/bobwarfare/prototypes/technology/drone.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/drone.lua rename to bobwarfare/prototypes/technology/drone.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/gun.lua b/bobwarfare/prototypes/technology/gun.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/gun.lua rename to bobwarfare/prototypes/technology/gun.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/mine.lua b/bobwarfare/prototypes/technology/mine.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/mine.lua rename to bobwarfare/prototypes/technology/mine.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/radar.lua b/bobwarfare/prototypes/technology/radar.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/radar.lua rename to bobwarfare/prototypes/technology/radar.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/tank.lua b/bobwarfare/prototypes/technology/tank.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/tank.lua rename to bobwarfare/prototypes/technology/tank.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/technology-updates.lua b/bobwarfare/prototypes/technology/technology-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/technology-updates.lua rename to bobwarfare/prototypes/technology/technology-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/technology.lua b/bobwarfare/prototypes/technology/technology.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/technology.lua rename to bobwarfare/prototypes/technology/technology.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/turrets.lua b/bobwarfare/prototypes/technology/turrets.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/turrets.lua rename to bobwarfare/prototypes/technology/turrets.lua diff --git a/bobwarfare_1.1.6/prototypes/technology/wall.lua b/bobwarfare/prototypes/technology/wall.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/technology/wall.lua rename to bobwarfare/prototypes/technology/wall.lua diff --git a/bobwarfare_1.1.6/prototypes/train-updates.lua b/bobwarfare/prototypes/train-updates.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/train-updates.lua rename to bobwarfare/prototypes/train-updates.lua diff --git a/bobwarfare_1.1.6/prototypes/train.lua b/bobwarfare/prototypes/train.lua similarity index 100% rename from bobwarfare_1.1.6/prototypes/train.lua rename to bobwarfare/prototypes/train.lua diff --git a/bobwarfare_1.1.6/settings.lua b/bobwarfare/settings.lua similarity index 100% rename from bobwarfare_1.1.6/settings.lua rename to bobwarfare/settings.lua diff --git a/bobwarfare_1.1.6/sound/Gun_Turret1.ogg b/bobwarfare/sound/Gun_Turret1.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Gun_Turret1.ogg rename to bobwarfare/sound/Gun_Turret1.ogg diff --git a/bobwarfare_1.1.6/sound/Gun_Turret2.ogg b/bobwarfare/sound/Gun_Turret2.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Gun_Turret2.ogg rename to bobwarfare/sound/Gun_Turret2.ogg diff --git a/bobwarfare_1.1.6/sound/Gun_Turret3.ogg b/bobwarfare/sound/Gun_Turret3.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Gun_Turret3.ogg rename to bobwarfare/sound/Gun_Turret3.ogg diff --git a/bobwarfare_1.1.6/sound/Rifle1.ogg b/bobwarfare/sound/Rifle1.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Rifle1.ogg rename to bobwarfare/sound/Rifle1.ogg diff --git a/bobwarfare_1.1.6/sound/Rifle2.ogg b/bobwarfare/sound/Rifle2.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Rifle2.ogg rename to bobwarfare/sound/Rifle2.ogg diff --git a/bobwarfare_1.1.6/sound/Rifle3.ogg b/bobwarfare/sound/Rifle3.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Rifle3.ogg rename to bobwarfare/sound/Rifle3.ogg diff --git a/bobwarfare_1.1.6/sound/Sniper_Rifle1.ogg b/bobwarfare/sound/Sniper_Rifle1.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Sniper_Rifle1.ogg rename to bobwarfare/sound/Sniper_Rifle1.ogg diff --git a/bobwarfare_1.1.6/sound/Sniper_Rifle2.ogg b/bobwarfare/sound/Sniper_Rifle2.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Sniper_Rifle2.ogg rename to bobwarfare/sound/Sniper_Rifle2.ogg diff --git a/bobwarfare_1.1.6/sound/Sniper_Rifle3.ogg b/bobwarfare/sound/Sniper_Rifle3.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Sniper_Rifle3.ogg rename to bobwarfare/sound/Sniper_Rifle3.ogg diff --git a/bobwarfare_1.1.6/sound/Sniper_Rifle4.ogg b/bobwarfare/sound/Sniper_Rifle4.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Sniper_Rifle4.ogg rename to bobwarfare/sound/Sniper_Rifle4.ogg diff --git a/bobwarfare_1.1.6/sound/Sniper_Rifle5.ogg b/bobwarfare/sound/Sniper_Rifle5.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Sniper_Rifle5.ogg rename to bobwarfare/sound/Sniper_Rifle5.ogg diff --git a/bobwarfare_1.1.6/sound/Tank_Turret1.ogg b/bobwarfare/sound/Tank_Turret1.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Tank_Turret1.ogg rename to bobwarfare/sound/Tank_Turret1.ogg diff --git a/bobwarfare_1.1.6/sound/Tank_Turret2.ogg b/bobwarfare/sound/Tank_Turret2.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Tank_Turret2.ogg rename to bobwarfare/sound/Tank_Turret2.ogg diff --git a/bobwarfare_1.1.6/sound/Tank_Turret3.ogg b/bobwarfare/sound/Tank_Turret3.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/Tank_Turret3.ogg rename to bobwarfare/sound/Tank_Turret3.ogg diff --git a/bobwarfare_1.1.6/sound/laser-beam-01.ogg b/bobwarfare/sound/laser-beam-01.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/laser-beam-01.ogg rename to bobwarfare/sound/laser-beam-01.ogg diff --git a/bobwarfare_1.1.6/sound/laser-beam-02.ogg b/bobwarfare/sound/laser-beam-02.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/laser-beam-02.ogg rename to bobwarfare/sound/laser-beam-02.ogg diff --git a/bobwarfare_1.1.6/sound/laser-beam-03.ogg b/bobwarfare/sound/laser-beam-03.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/laser-beam-03.ogg rename to bobwarfare/sound/laser-beam-03.ogg diff --git a/bobwarfare_1.1.6/sound/plasma-explosion-01.ogg b/bobwarfare/sound/plasma-explosion-01.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/plasma-explosion-01.ogg rename to bobwarfare/sound/plasma-explosion-01.ogg diff --git a/bobwarfare_1.1.6/sound/plasma-explosion-02.ogg b/bobwarfare/sound/plasma-explosion-02.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/plasma-explosion-02.ogg rename to bobwarfare/sound/plasma-explosion-02.ogg diff --git a/bobwarfare_1.1.6/sound/plasma-turret-01.ogg b/bobwarfare/sound/plasma-turret-01.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/plasma-turret-01.ogg rename to bobwarfare/sound/plasma-turret-01.ogg diff --git a/bobwarfare_1.1.6/sound/turret_fire.ogg b/bobwarfare/sound/turret_fire.ogg similarity index 100% rename from bobwarfare_1.1.6/sound/turret_fire.ogg rename to bobwarfare/sound/turret_fire.ogg diff --git a/bobwarfare_1.1.6/thumbnail.png b/bobwarfare/thumbnail.png similarity index 100% rename from bobwarfare_1.1.6/thumbnail.png rename to bobwarfare/thumbnail.png diff --git a/bobwarfare_1.1.6/data-updates.lua b/bobwarfare_1.1.6/data-updates.lua deleted file mode 100644 index 3c4b5f28..00000000 --- a/bobwarfare_1.1.6/data-updates.lua +++ /dev/null @@ -1,21 +0,0 @@ -require("prototypes.overides") -require("prototypes.recipe.recipe-updates") -require("prototypes.technology.technology-updates") -require("prototypes.productivity-limitations") - -require("prototypes.robots-updates") -require("prototypes.train-updates") -require("prototypes.recipe.drone-updates") -require("prototypes.spidertron-updates") - -if settings.startup["bobmods-warfare-drainlesslaserturrets"].value == true then - for index, turret in pairs(data.raw["electric-turret"]) do - turret.energy_source.drain = "0W" - end -end - -table.insert(data.raw.car.tank.resistances, { type = "plasma", decrease = 15, percent = 50 }) - -if settings.startup["bobmods-warfare-vehicleflamethrowerstartsfires"].value == true then - data.raw.ammo["flamethrower-ammo"].ammo_type[2].action.action_delivery.stream = "flamethrower-fire-stream" -end diff --git a/bobwarfare_1.1.6/info.json b/bobwarfare_1.1.6/info.json deleted file mode 100644 index ef23aa34..00000000 --- a/bobwarfare_1.1.6/info.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bobwarfare", - "version": "1.1.6", - "factorio_version": "1.1", - "title": "Bob's Warfare mod", - "author": "Bobingabout", - "contact": "robertagius@hotmail.com", - "homepage": "https://forums.factorio.com/viewforum.php?f=51", - "dependencies": [ - "base >= 1.1.0", - "boblibrary >= 1.1.6", - "? bobplates >= 1.1.6", - "? bobenemies >= 1.1.6" - ], - "description": "Requires Bob's functions library mod.\n\nThis mod adds a lot of things for warfare.\nAdds Nitroglycerine production chain, which is used to make intermediates for new ammo.\nAdds 7 new gun ammos, shotgun ammos, and rockets based on an improved normal, and 6 elemental ammos.\nAdds a laser rifle and 7 tiers of laser ammo using glass and the 6 gems.\nAdds Tanks to tier 3, and artillery wagons to tier 3.\nChanges the way you make combat robots, and adds a 4th combat robot capsule.\nAdds a Robot laser drone.\nAdds a higher tier wall and gate\nAdds a couple new mines.\nAdds Scatter tank ammo\nAdds a few new types of artillery ammo.\nAdds more tiers of Radar.\n\nAlthough it can function as a stand alone mod, it is intended to be used with the full Bob's Mods set."} diff --git a/bobwarfare_1.1.6/prototypes/entity/drone.lua b/bobwarfare_1.1.6/prototypes/entity/drone.lua deleted file mode 100644 index e815e653..00000000 --- a/bobwarfare_1.1.6/prototypes/entity/drone.lua +++ /dev/null @@ -1,558 +0,0 @@ -local sounds = require("__base__.prototypes.entity.sounds") - -function bobmods.warfare.tank_drone_animation(scale, tint1, tint2) - if tint1 == nil then - tint1 = { r = 1, g = 1, b = 1 } - end - if tint2 == nil then - tint2 = { r = 1, g = 1, b = 1 } - end - return { - layers = { - { - priority = "low", - width = 136, - height = 106, - frame_count = 2, - tint = tint1, - direction_count = 64, - shift = util.by_pixel(scale * 0, scale * -10), - animation_speed = 8, - max_advance = 1, - stripes = { - { - filename = "__base__/graphics/entity/tank/tank-base-1.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-2.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-3.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-4.png", - width_in_frames = 2, - height_in_frames = 16, - }, - }, - scale = scale, - hr_version = { - priority = "low", - width = 270, - height = 212, - frame_count = 2, - tint = tint1, - direction_count = 64, - shift = util.by_pixel(scale * 0, scale * -10), - animation_speed = 8, - max_advance = 1, - stripes = { - { - filename = "__base__/graphics/entity/tank/hr-tank-base-1.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-2.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-3.png", - width_in_frames = 2, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-4.png", - width_in_frames = 2, - height_in_frames = 16, - }, - }, - scale = scale * 0.5, - }, - }, - { - priority = "low", - width = 104, - height = 83, - frame_count = 2, - tint = tint2, - direction_count = 64, - shift = util.by_pixel(scale * 0, scale * -21.5), - max_advance = 1, - line_length = 2, - stripes = util.multiplystripes(2, { - { - filename = "__base__/graphics/entity/tank/tank-base-mask-1.png", - width_in_frames = 1, - height_in_frames = 22, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-mask-2.png", - width_in_frames = 1, - height_in_frames = 22, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-mask-3.png", - width_in_frames = 1, - height_in_frames = 20, - }, - }), - scale = scale, - hr_version = { - priority = "low", - width = 208, - height = 166, - frame_count = 2, - tint = tint2, - direction_count = 64, - shift = util.by_pixel(scale * 0, scale * -21.5), - max_advance = 1, - line_length = 2, - stripes = util.multiplystripes(2, { - { - filename = "__base__/graphics/entity/tank/hr-tank-base-mask-1.png", - width_in_frames = 1, - height_in_frames = 22, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-mask-2.png", - width_in_frames = 1, - height_in_frames = 22, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-mask-3.png", - width_in_frames = 1, - height_in_frames = 20, - }, - }), - scale = scale * 0.5, - }, - }, - { - priority = "low", - width = 151, - height = 98, - frame_count = 2, - draw_as_shadow = true, - direction_count = 64, - shift = util.by_pixel(scale * 22.5, scale * 7), - max_advance = 1, - stripes = util.multiplystripes(2, { - { - filename = "__base__/graphics/entity/tank/tank-base-shadow-1.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-shadow-2.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-shadow-3.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/tank-base-shadow-4.png", - width_in_frames = 1, - height_in_frames = 16, - }, - }), - scale = scale, - hr_version = { - priority = "low", - width = 302, - height = 194, - frame_count = 2, - draw_as_shadow = true, - direction_count = 64, - shift = util.by_pixel(scale * 22.5, scale * 7), - max_advance = 1, - stripes = util.multiplystripes(2, { - { - filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-1.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-2.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-3.png", - width_in_frames = 1, - height_in_frames = 16, - }, - { - filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-4.png", - width_in_frames = 1, - height_in_frames = 16, - }, - }), - scale = scale * 0.5, - }, - }, - }, - } -end - -local tint_drone_1 = { r = 1.0, g = 0.2, b = 0.0 } -- hue 4 -local tint_drone_2 = { r = 0.0, g = 0.5, b = 1.0 } -- hue 148 -local tint_drone_3 = { r = 0.7, g = 0.0, b = 1.0 } -- hue 200 -local tint_drone_4 = { r = 0.0, g = 1.0, b = 0.0 } -- hue 85 - -local tint_drone_gun = { r = 1, g = 1, b = 0.5 } -local tint_drone_laser = { r = 0.9, g = 0.9, b = 0.9 } -local tint_drone_flamethrower = { r = 1, g = 0.6, b = 0.5 } -local tint_drone_plasma = { r = 0.5, g = 0.8, b = 1 } - -data:extend({ - { - type = "unit", - name = "bob-robot-gun-drone", - icon = "__bobwarfare__/graphics/icons/gun-drone.png", - icon_size = 64, - flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, - minable = { mining_time = 1, result = "bob-robot-gun-drone" }, - max_health = 500, - corpse = "small-remnants", - dying_explosion = "medium-explosion", - resistances = { - { - type = "fire", - percent = 50, - }, - { - type = "poison", - percent = 50, - }, - { - type = "physical", - percent = 30, - }, - { - type = "impact", - percent = 50, - }, - { - type = "explosion", - percent = 50, - }, - { - type = "acid", - percent = 40, - }, - }, - collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, - distraction_cooldown = 300, - - attack_parameters = { - type = "projectile", - cooldown = 6, - range = 18, - projectile_creation_distance = 1, - projectile_center = { 0, 0.6 }, -- same as gun_turret_attack shift - animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_gun, tint_drone_1), - shell_particle = { - name = "shell-particle", - direction_deviation = 0.1, - speed = 0.1, - speed_deviation = 0.03, - center = { 0, 0.6 }, - creation_distance = 1, - starting_frame_speed = 0.2, - starting_frame_speed_deviation = 0.1, - }, - sound = sounds.heavy_gunshot, - ammo_type = { - category = "bullet", - action = { - type = "direct", - action_delivery = { - type = "instant", - source_effects = { - type = "create-explosion", - entity_name = "explosion-gunshot", - }, - target_effects = { - { - type = "create-entity", - entity_name = "explosion-hit", - }, - { - type = "damage", - damage = { amount = 16, type = "physical" }, - }, - }, - }, - }, - }, - }, - - vision_distance = 30, - movement_speed = 0.16, - distance_per_frame = 0.15, - pollution_to_join_attack = 10, - run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_gun, tint_drone_1), - }, -}) - -data:extend({ - { - type = "unit", - name = "bob-robot-laser-drone", - icon = "__bobwarfare__/graphics/icons/laser-drone.png", - icon_size = 64, - flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, - minable = { mining_time = 1, result = "bob-robot-laser-drone" }, - max_health = 1000, - corpse = "small-remnants", - dying_explosion = "medium-explosion", - resistances = { - { - type = "fire", - percent = 50, - }, - { - type = "poison", - percent = 50, - }, - { - type = "physical", - percent = 30, - }, - { - type = "impact", - percent = 50, - }, - { - type = "explosion", - percent = 50, - }, - { - type = "acid", - percent = 40, - }, - }, - collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, - distraction_cooldown = 300, - - attack_parameters = { - type = "beam", - cooldown = 20, - range = 25, - source_direction_count = 64, - source_offset = { 0, -0.5 }, - damage_modifier = 5, - animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_laser, tint_drone_1), - sound = make_laser_sounds(), - ammo_type = { - category = "laser", - action = { - type = "direct", - action_delivery = { - type = "beam", - beam = "laser-beam", - max_length = 27, --slightly more than range, to stop errors. - duration = 20, - source_offset = { 0, -0.5 }, - }, - }, - }, - }, - - vision_distance = 35, - movement_speed = 0.16, - distance_per_frame = 0.15, - pollution_to_join_attack = 15, - run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_laser, tint_drone_1), - }, -}) - -data:extend({ - { - type = "unit", - name = "bob-robot-flamethrower-drone", - icon = "__bobwarfare__/graphics/icons/flamethrower-drone.png", - icon_size = 64, - flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, - minable = { mining_time = 1, result = "bob-robot-flamethrower-drone" }, - max_health = 1500, - corpse = "small-remnants", - dying_explosion = "medium-explosion", - resistances = { - { - type = "fire", - percent = 100, - }, - { - type = "poison", - percent = 50, - }, - { - type = "physical", - percent = 30, - }, - { - type = "impact", - percent = 50, - }, - { - type = "explosion", - percent = 50, - }, - { - type = "acid", - percent = 40, - }, - }, - collision_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - selection_box = { { -0.45, -0.65 }, { 0.45, 0.65 } }, - drawing_box = { { -0.9, -0.9 }, { 0.9, 0.75 } }, - distraction_cooldown = 300, - - attack_parameters = { - type = "stream", - cooldown = 4, - range = 30, - min_range = 6, - animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_flamethrower, tint_drone_1), - source_offset = { 0, -0.5 }, - damage_modifier = 2.5, - lead_target_for_projectile_speed = 0.2 * 0.75 * 1.5, -- this is same as particle horizontal speed of flamethrower fire stream - - ammo_type = { - category = "flamethrower", - action = { - type = "direct", - action_delivery = { - type = "stream", - stream = "flamethrower-fire-stream", - source_offset = { 0, -0.5 }, - }, - }, - }, - cyclic_sound = { - begin_sound = { - { - filename = "__base__/sound/fight/flamethrower-start.ogg", - volume = 0.7, - }, - }, - middle_sound = { - { - filename = "__base__/sound/fight/flamethrower-mid.ogg", - volume = 0.7, - }, - }, - end_sound = { - { - filename = "__base__/sound/fight/flamethrower-end.ogg", - volume = 0.7, - }, - }, - }, - }, - vision_distance = 40, - movement_speed = 0.16, - distance_per_frame = 0.15, - pollution_to_join_attack = 20, - run_animation = bobmods.warfare.tank_drone_animation(0.5, tint_drone_flamethrower, tint_drone_1), - }, -}) - -data:extend({ - { - type = "unit", - name = "bob-robot-plasma-drone", - icon = "__bobwarfare__/graphics/icons/plasma-drone.png", - icon_size = 64, - flags = { "placeable-player", "placeable-enemy", "placeable-off-grid", "player-creation" }, - minable = { mining_time = 1, result = "bob-robot-plasma-drone" }, - max_health = 1250, - corpse = "medium-remnants", - dying_explosion = "medium-explosion", - resistances = { - { - type = "fire", - percent = 50, - }, - { - type = "poison", - percent = 50, - }, - { - type = "physical", - percent = 30, - }, - { - type = "impact", - percent = 50, - }, - { - type = "explosion", - percent = 50, - }, - { - type = "acid", - percent = 40, - }, - }, - collision_box = { { -0.45 * 1.5, -0.65 * 1.5 }, { 0.45 * 1.5, 0.65 * 1.5 } }, - selection_box = { { -0.45 * 1.5, -0.65 * 1.5 }, { 0.45 * 1.5, 0.65 * 1.5 } }, - drawing_box = { { -0.9 * 1.5, -0.9 * 1.5 }, { 0.9 * 1.5, 0.75 * 1.5 } }, - distraction_cooldown = 300, - - attack_parameters = { - type = "projectile", - cooldown = 200, - damage_modifier = 15, - lead_target_for_projectile_speed = 1, - projectile_center = { 0, -0.5 * 1.5 }, - projectile_creation_distance = 1 * 1.5, - range = 60, - sound = { { filename = "__base__/sound/fight/electric-beam.ogg", volume = 0.7 } }, - min_range = 30, - animation = bobmods.warfare.tank_drone_animation(0.5 * 1.5, tint_drone_plasma, tint_drone_1), - ammo_type = { - type = "projectile", - category = "laser", - target_type = "position", - clamp_position = true, - action = { - { - type = "direct", - action_delivery = { - { - type = "projectile", - projectile = "bob-plasma-projectile", - starting_speed = 1, - direction_deviation = 0, - range_deviation = 0, - max_range = 120, - }, - }, - }, - }, - }, - }, - vision_distance = 70, - movement_speed = 0.1, - distance_per_frame = 0.1, - pollution_to_join_attack = 30, - run_animation = bobmods.warfare.tank_drone_animation(0.5 * 1.5, tint_drone_plasma, tint_drone_1), - }, -}) diff --git a/bobwarfare_1.1.6/prototypes/entity/projectiles.lua b/bobwarfare_1.1.6/prototypes/entity/projectiles.lua deleted file mode 100644 index badd338f..00000000 --- a/bobwarfare_1.1.6/prototypes/entity/projectiles.lua +++ /dev/null @@ -1,1695 +0,0 @@ -local sounds = require("__base__.prototypes.entity.sounds") -local nuke_shockwave_starting_speed_deviation = 0.075 - -data:extend({ - { - type = "projectile", - name = "better-shotgun-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.05, -1 }, { 0.05, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type = "damage", - damage = { amount = 12, type = "physical" }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", - tint = { r = 1, g = 1, b = 1, a = 1 }, - frame_count = 1, - width = 3, - height = 50, - priority = "high", - }, - }, - - { - type = "projectile", - name = "shotgun-ap-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.05, -1 }, { 0.05, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type = "damage", - damage = { amount = 12, type = "bob-pierce" }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", - tint = { r = 0.3, g = 0.5, b = 1.0, a = 1 }, - frame_count = 1, - width = 3, - height = 50, - priority = "high", - }, - }, - - { - type = "projectile", - name = "shotgun-electric-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.05, -1 }, { 0.05, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type = "damage", - damage = { amount = 12, type = "electric" }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", - tint = { r = 1, g = 0.6, b = 0.3, a = 1 }, - frame_count = 1, - width = 3, - height = 50, - priority = "high", - }, - }, - - { - type = "projectile", - name = "shotgun-explosive-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.5, -1 }, { 0.5, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "nested-result", - action = { - type = "area", - radius = 1, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 12, type = "explosion" }, - }, - }, - }, - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-yellow.png", - line_length = 5, - width = 16, - height = 18, - frame_count = 33, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", - line_length = 5, - width = 28, - height = 16, - frame_count = 33, - priority = "high", - shift = { -0.09, 0.395 }, - }, - rotatable = false, - }, - - { - type = "projectile", - name = "shotgun-flame-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.5, -1 }, { 0.5, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "nested-result", - action = { - type = "area", - radius = 1, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 12, type = "fire" }, - }, - { - type = "create-sticker", - sticker = "fire-sticker", - }, - }, - }, - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-red.png", - line_length = 5, - width = 16, - height = 18, - frame_count = 33, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", - line_length = 5, - width = 28, - height = 16, - frame_count = 33, - priority = "high", - shift = { -0.09, 0.395 }, - }, - rotatable = false, - }, - - { - type = "projectile", - name = "shotgun-acid-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.5, -1 }, { 0.5, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "nested-result", - action = { - type = "area", - radius = 1, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 12, type = "acid" }, - }, - }, - }, - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-purple.png", - line_length = 5, - width = 16, - height = 18, - frame_count = 33, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", - line_length = 5, - width = 28, - height = 16, - frame_count = 33, - priority = "high", - shift = { -0.09, 0.395 }, - }, - rotatable = false, - }, - - { - type = "projectile", - name = "shotgun-poison-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.5, -1 }, { 0.5, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "nested-result", - action = { - type = "area", - radius = 1, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 12, type = "poison" }, - }, - { - type = "create-sticker", - sticker = "poison-sticker", - }, - }, - }, - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-green.png", - line_length = 5, - width = 16, - height = 18, - frame_count = 33, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-projectile-shadow.png", - line_length = 5, - width = 28, - height = 16, - frame_count = 33, - priority = "high", - shift = { -0.09, 0.395 }, - }, - rotatable = false, - }, - - { - type = "projectile", - name = "shotgun-uranium-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.05, -1 }, { 0.05, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type = "damage", - damage = { amount = 16, type = "physical" }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", - tint = { r = 0.3, g = 1.0, b = 0.3, a = 1 }, - frame_count = 1, - width = 3, - height = 50, - priority = "high", - }, - }, - - { - type = "projectile", - name = "bob-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "damage", - damage = { amount = 240, type = "physical" }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-piercing-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "damage", - damage = { amount = 240, type = "bob-pierce" }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/piercing-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-electric-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "damage", - damage = { amount = 240, type = "electric" }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/electric-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-explosive-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "nested-result", - action = { - type = "area", - radius = 6.5, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 180, type = "explosion" }, - }, - }, - }, - }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/explosive-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-flame-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "create-fire", - entity_name = "fire-flame", - }, - { - type = "nested-result", - action = { - type = "area", - radius = 6.5, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 180, type = "fire" }, - }, - { - type = "create-sticker", - sticker = "fire-sticker", - }, - }, - }, - }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/flame-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-poison-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "create-entity", - entity_name = "small-poison-cloud", - }, - { - type = "nested-result", - action = { - type = "area", - radius = 6.5, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 180, type = "poison" }, - }, - { - type = "create-sticker", - sticker = "poison-sticker", - }, - }, - }, - }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/poison-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, - - { - type = "projectile", - name = "bob-acid-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "explosion" }, - }, - { - type = "nested-result", - action = { - type = "area", - radius = 6.5, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 180, type = "acid" }, - }, - }, - }, - }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/acid-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, -}) - -data:extend({ - { - type = "projectile", - name = "cannon-projectile-pellet", - flags = { "not-on-map" }, - collision_box = { { -0.05, -0.25 }, { 0.05, 0.25 } }, - acceleration = 0, - direction_only = true, - piercing_damage = 30, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 20, type = "physical" }, - }, - { - type = "damage", - damage = { amount = 10, type = "bob-pierce" }, - }, - { - type = "damage", - damage = { amount = 10, type = "explosion" }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/shotgun-shot.png", - tint = { r = 1, g = 1, b = 1, a = 0.8 }, - frame_count = 1, - width = 3, - height = 50, - priority = "high", - }, - }, -}) - -data:extend({ - { - type = "projectile", - name = "fire-capsule", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - { - type = "cluster", - cluster_count = 7, - distance = 4, - distance_deviation = 3, - action_delivery = { - type = "instant", - target_effects = { - type = "create-fire", - entity_name = "fire-flame", - }, - }, - }, - { - type = "area", - radius = 8, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 15, type = "fire" }, - apply_damage_to_trees = false, - }, - { - type = "create-sticker", - sticker = "fire-sticker", - }, - { - type = "create-fire", - entity_name = "fire-flame-on-tree", - }, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/icons/fire-capsule.png", - frame_count = 1, - width = 32, - height = 32, - priority = "high", - }, - shadow = { - filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", - frame_count = 1, - width = 32, - height = 32, - priority = "high", - }, - smoke = capsule_smoke, - }, -}) - -data.raw.projectile["poison-capsule"].action = { - { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - type = "create-entity", - show_in_tooltip = true, - entity_name = "poison-cloud", - }, - }, - }, - { - type = "area", - radius = 11, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 10, type = "poison" }, - }, - { - type = "create-sticker", - sticker = "poison-sticker", - }, - }, - }, - }, -} - -data:extend({ - { - type = "artillery-projectile", - name = "poison-artillery-projectile", - flags = { "not-on-map" }, - acceleration = 0, - direction_only = true, - reveal_map = true, - map_color = { r = 0, g = 1, b = 0 }, - action = { - { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "poison-artillery-cloud", - }, - }, - }, - }, - { - type = "area", - radius = 11, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 750, type = "poison" }, - }, - { - type = "damage", - damage = { amount = 250, type = "explosion" }, - }, - { - type = "create-sticker", - sticker = "poison-sticker", - }, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - picture = { - filename = "__base__/graphics/entity/poison-capsule/poison-capsule.png", - width = 32, - height = 32, - priority = "high", - }, - shadow = { - filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", - width = 32, - height = 32, - priority = "high", - }, - chart_picture = { - filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", - flags = { "icon" }, - frame_count = 1, - width = 64, - height = 64, - priority = "high", - scale = 0.25, - }, - height_from_ground = 280 / 64, - }, - - { - type = "artillery-projectile", - name = "fire-artillery-projectile", - flags = { "not-on-map" }, - acceleration = 0, - direction_only = true, - reveal_map = true, - map_color = { r = 1, g = 0, b = 0 }, - action = { - { - type = "cluster", - cluster_count = 12, - distance = 6, - distance_deviation = 6, - action_delivery = { - type = "instant", - target_effects = { - type = "create-fire", - entity_name = "fire-flame", - }, - }, - }, - { - type = "area", - radius = 11, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 750, type = "fire" }, - apply_damage_to_trees = false, - }, - { - type = "damage", - damage = { amount = 250, type = "explosion" }, - apply_damage_to_trees = false, - }, - { - type = "create-sticker", - sticker = "fire-sticker", - }, - { - type = "create-fire", - entity_name = "fire-flame-on-tree", - }, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - picture = { - filename = "__bobwarfare__/graphics/icons/fire-capsule.png", - width = 32, - height = 32, - priority = "high", - }, - shadow = { - filename = "__base__/graphics/entity/poison-capsule/poison-capsule-shadow.png", - width = 32, - height = 32, - priority = "high", - }, - chart_picture = { - filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", - flags = { "icon" }, - frame_count = 1, - width = 64, - height = 64, - priority = "high", - scale = 0.25, - }, - height_from_ground = 280 / 64, - }, - - { - type = "artillery-projectile", - name = "explosive-artillery-projectile", - flags = { "not-on-map" }, - acceleration = 0, - direction_only = true, - reveal_map = true, - map_color = { r = 0.2, g = 0.2, b = 0.2 }, - action = { - { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - { - type = "create-trivial-smoke", - smoke_name = "artillery-smoke", - initial_height = 0, - speed_from_center = 0.05, - speed_from_center_deviation = 0.005, - offset_deviation = { { -4, -4 }, { 4, 4 } }, - max_radius = 3.5, - repeat_count = 4 * 4 * 15, - }, - { - type = "create-entity", - entity_name = "big-artillery-explosion", - }, - { - type = "show-explosion-on-chart", - scale = 8 / 32, - }, - }, - }, - }, - { - type = "area", - radius = 11, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 1000, type = "explosion" }, - }, - { - type = "create-entity", - entity_name = "explosion", - }, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - picture = { - filename = "__base__/graphics/entity/artillery-projectile/hr-shell.png", - width = 64, - height = 64, - scale = 0.5, - }, - chart_picture = { - filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", - flags = { "icon" }, - frame_count = 1, - width = 64, - height = 64, - priority = "high", - scale = 0.25, - }, - height_from_ground = 280 / 64, - }, - - { - type = "artillery-projectile", - name = "distractor-artillery-projectile", - flags = { "not-on-map" }, - acceleration = 0, - direction_only = true, - reveal_map = true, - map_color = { r = 0, g = 0.5, b = 1 }, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - show_in_tooltip = true, - entity_name = "distractor", - offsets = { - { 0.6, -0.8 }, - { -0.6, -0.8 }, - { 0.6, 0.8 }, - { -0.6, 0.8 }, - { 1, 0 }, - { -1, 0 }, - { -1.6, -2.4 }, - { 1.6, -2.4 }, - { -1.6, 2.4 }, - { 1.6, 2.4 }, - { -2.4, -1.6 }, - { 2.4, -1.6 }, - { -2.4, 1.6 }, - { 2.4, 1.6 }, - { 0, 0 }, - }, - }, - }, - }, - { - type = "area", - radius = 11, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 50, type = "explosion" }, - }, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - picture = { - filename = "__base__/graphics/entity/combat-robot-capsule/distractor-capsule.png", - frame_count = 1, - width = 36, - height = 30, - priority = "high", - }, - shadow = { - filename = "__base__/graphics/entity/combat-robot-capsule/distractor-capsule-shadow.png", - frame_count = 1, - width = 40, - height = 26, - priority = "high", - }, - chart_picture = { - filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", - flags = { "icon" }, - frame_count = 1, - width = 64, - height = 64, - priority = "high", - scale = 0.25, - }, - height_from_ground = 280 / 64, - }, - { - type = "artillery-projectile", - name = "atomic-artillery-projectile", - flags = { "not-on-map" }, - acceleration = 0, - direction_only = true, - reveal_map = true, - map_color = { r = 0, g = 1, b = 0 }, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "set-tile", - tile_name = "nuclear-ground", - radius = 12, - apply_projection = true, - tile_collision_mask = { "water-tile" }, - }, - { - type = "destroy-cliffs", - radius = 9, - explosion = "explosion", - }, - { - type = "create-entity", - entity_name = "nuke-explosion", - }, - { - type = "camera-effect", - effect = "screen-burn", - duration = 60, - ease_in_duration = 5, - ease_out_duration = 60, - delay = 0, - strength = 6, - full_strength_max_distance = 200, - max_distance = 800, - }, - { - type = "play-sound", - sound = sounds.nuclear_explosion(0.9), - play_on_target_position = false, - -- min_distance = 200, - max_distance = 1000, - -- volume_modifier = 1, - audible_distance_modifier = 3, - }, - { - type = "play-sound", - sound = sounds.nuclear_explosion_aftershock(0.4), - play_on_target_position = false, - -- min_distance = 200, - max_distance = 1000, - -- volume_modifier = 1, - audible_distance_modifier = 3, - }, - { - type = "damage", - damage = { amount = 400, type = "explosion" }, - }, - { - type = "create-entity", - entity_name = "huge-scorchmark", - offsets = { { 0, -0.5 } }, - check_buildability = true, - }, - { - type = "invoke-tile-trigger", - repeat_count = 1, - }, - { - type = "destroy-decoratives", - include_soft_decoratives = true, -- soft decoratives are decoratives with grows_through_rail_path = true - include_decals = true, - invoke_decorative_trigger = true, - decoratives_with_trigger_only = false, -- if true, destroys only decoratives that have trigger_effect set - radius = 14, -- large radius for demostrative purposes - }, - { - type = "create-decorative", - decorative = "nuclear-ground-patch", - spawn_min_radius = 11.5, - spawn_max_radius = 12.5, - spawn_min = 30, - spawn_max = 40, - apply_projection = true, - spread_evenly = true, - }, - { - type = "nested-result", - action = { - type = "area", - target_entities = false, - trigger_from_target = true, - repeat_count = 2000, - radius = 7, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-ground-zero-projectile", - starting_speed = 0.6 * 0.8, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - target_entities = false, - trigger_from_target = true, - repeat_count = 1000, - radius = 35, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-wave", - starting_speed = 0.5 * 0.7, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 1000, - radius = 26, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-cluster-nuke-explosion", - starting_speed = 0.5 * 0.7, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 700, - radius = 4, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-fire-smoke-explosion", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 1000, - radius = 8, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-nuke-shockwave-explosion", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 300, - radius = 26, - action_delivery = { - type = "projectile", - projectile = "atomic-bomb-wave-spawns-nuclear-smoke", - starting_speed = 0.5 * 0.65, - starting_speed_deviation = nuke_shockwave_starting_speed_deviation, - }, - }, - }, - { - type = "nested-result", - action = { - type = "area", - show_in_tooltip = false, - target_entities = false, - trigger_from_target = true, - repeat_count = 10, - radius = 8, - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "nuclear-smouldering-smoke-source", - tile_collision_mask = { "water-tile" }, - }, - }, - }, - }, - }, - }, - }, - }, - picture = { - filename = "__base__/graphics/entity/rocket/rocket.png", - draw_as_glow = true, - width = 9, - height = 35, - shift = { 0, 0 }, - priority = "high", - }, - shadow = { - filename = "__base__/graphics/entity/rocket/rocket-shadow.png", - frame_count = 1, - width = 7, - height = 24, - priority = "high", - shift = { 0, 0 }, - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 1 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - chart_picture = { - filename = "__base__/graphics/entity/artillery-projectile/artillery-shoot-map-visualization.png", - flags = { "icon" }, - frame_count = 1, - width = 64, - height = 64, - priority = "high", - scale = 0.25, - }, - height_from_ground = 280 / 64, - }, -}) - -data:extend({ - { - type = "projectile", - name = "bob-plasma-projectile", - flags = { "not-on-map" }, - acceleration = 0, - -- direction_only = true, - action = { - { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "plasma-explosion", - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - { - type = "area", - radius = 8, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 25, type = "plasma" }, - }, - { - type = "damage", - damage = { amount = 15, type = "electric" }, - }, - { - type = "damage", - damage = { amount = 10, type = "explosion" }, - }, - { - type = "create-sticker", - sticker = "plasma-sticker", - }, - { - type = "create-entity", - entity_name = "explosion", - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/particles2.png", - tint = { r = 0.4, g = 0.7, b = 1, a = 1 }, - frame_count = 32, - line_length = 8, - x = 512, - y = 0, - width = 64, - height = 64, - priority = "high", - }, - }, -}) - -data:extend({ - { - type = "projectile", - name = "shotgun-plasma-projectile", - flags = { "not-on-map" }, - collision_box = { { -0.5, -1 }, { 0.5, 1 } }, - acceleration = 0, - direction_only = true, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "nested-result", - action = { - type = "area", - radius = 1, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 25, type = "plasma" }, - }, - { - type = "create-sticker", - sticker = "plasma-sticker", - }, - }, - }, - }, - }, - }, - }, - }, - animation = { - filename = "__bobwarfare__/graphics/entities/particles2.png", - tint = { r = 0.4, g = 0.7, b = 1, a = 1 }, - frame_count = 32, - line_length = 8, - x = 512, - y = 0, - width = 64, - height = 64, - scale = 0.3, - priority = "high", - }, - rotatable = false, - }, - { - type = "projectile", - name = "bob-plasma-rocket", - flags = { "not-on-map" }, - acceleration = 0.005, - action = { - type = "direct", - action_delivery = { - type = "instant", - target_effects = { - { - type = "create-entity", - entity_name = "plasma-explosion", - }, - { - type = "damage", - damage = { amount = 120, type = "plasma" }, - }, - { - type = "nested-result", - action = { - type = "area", - radius = 6.5, - action_delivery = { - type = "instant", - target_effects = { - { - type = "damage", - damage = { amount = 180, type = "plasma" }, - }, - { - type = "create-sticker", - sticker = "plasma-sticker", - }, - }, - }, - }, - }, - { - type = "create-entity", - entity_name = "small-scorchmark", - check_buildability = true, - }, - }, - }, - }, - light = { intensity = 0.5, size = 4 }, - animation = { - filename = "__bobwarfare__/graphics/entities/projectiles/plasma-rocket.png", - frame_count = 1, - width = 18, - height = 39, - priority = "high", - }, - shadow = { - filename = "__bobwarfare__/graphics/entities/projectiles/rocket-shadow.png", - frame_count = 1, - width = 18, - height = 32, - priority = "high", - }, - smoke = { - { - name = "smoke-fast", - deviation = { 0.15, 0.15 }, - frequency = 1, - position = { 0, 0 }, - slow_down_factor = 1, - starting_frame = 3, - starting_frame_deviation = 5, - starting_frame_speed = 0, - starting_frame_speed_deviation = 5, - }, - }, - }, -}) diff --git a/bobwarfare_1.1.6/prototypes/entity/sounds.lua b/bobwarfare_1.1.6/prototypes/entity/sounds.lua deleted file mode 100644 index 21dfb9e5..00000000 --- a/bobwarfare_1.1.6/prototypes/entity/sounds.lua +++ /dev/null @@ -1,115 +0,0 @@ -local sounds = {} -sounds.laser = { - begin_sound = { - { - filename = "__bobwarfare__/sound/laser-beam-01.ogg", - volume = 0.6, - }, - }, - middle_sound = { - { - filename = "__bobwarfare__/sound/laser-beam-02.ogg", - volume = 0.6, - }, - }, - end_sound = { - { - filename = "__bobwarfare__/sound/laser-beam-03.ogg", - volume = 0.6, - }, - }, -} - -sounds.plasmaTurret = function(volume) - return { - { - filename = "__bobwarfare__/sound/plasma-turret-01.ogg", - volume = volume, - max_sounds_per_type = 2, - }, - } -end - -sounds.turretFire = { - { - filename = "__bobwarfare__/sound/turret_fire.ogg", - volume = 0.5, - }, -} - -sounds.rifle = { - { - filename = "__bobwarfare__/sound/Rifle1.ogg", - volume = 0.35, - }, - { - filename = "__bobwarfare__/sound/Rifle2.ogg", - volume = 0.35, - }, - { - filename = "__bobwarfare__/sound/Rifle3.ogg", - volume = 0.35, - }, -} - -sounds.sniperRifle = { - { - filename = "__bobwarfare__/sound/Sniper_Rifle1.ogg", - volume = 1, - }, - { - filename = "__bobwarfare__/sound/Sniper_Rifle2.ogg", - volume = 1, - }, - { - filename = "__bobwarfare__/sound/Sniper_Rifle3.ogg", - volume = 1, - }, - { - filename = "__bobwarfare__/sound/Sniper_Rifle4.ogg", - volume = 1, - }, - { - filename = "__bobwarfare__/sound/Sniper_Rifle5.ogg", - volume = 1, - }, -} - -sounds.tankTurret = { - { filename = "__bobwarfare__/sound/Tank_Turret1.ogg", volume = 0.6 }, - { - filename = "__bobwarfare__/sound/Tank_Turret2.ogg", - volume = 0.6, - }, - { - filename = "__bobwarfare__/sound/Tank_Turret3.ogg", - volume = 0.6, - }, -} - -sounds.gunTurret = { - { - filename = "__bobwarfare__/sound/Gun_Turret1.ogg", - volume = 0.6, - }, - { - filename = "__bobwarfare__/sound/Gun_Turret2.ogg", - volume = 0.6, - }, - { - filename = "__bobwarfare__/sound/Gun_Turret3.ogg", - volume = 0.6, - }, -} - -sounds.plasmaExplosion = { - { - filename = "__bobwarfare__/sound/plasma-explosion-01.ogg", - volume = 1.0, - }, - { - filename = "__bobwarfare__/sound/plasma-explosion-02.ogg", - volume = 1.0, - }, -} -return sounds diff --git a/bobwarfare_1.1.6/prototypes/item/fluid.lua b/bobwarfare_1.1.6/prototypes/item/fluid.lua deleted file mode 100644 index f9d2949d..00000000 --- a/bobwarfare_1.1.6/prototypes/item/fluid.lua +++ /dev/null @@ -1,51 +0,0 @@ -if data.raw.fluid["nitric-acid"] then - data:extend({ - { - type = "fluid", - name = "sulfuric-nitric-acid", - default_temperature = 25, - heat_capacity = "1KJ", - base_color = { r = 0.0, g = 0.0, b = 1.0 }, - flow_color = { r = 1.0, g = 1.0, b = 0.0 }, - max_temperature = 100, - icon = "__bobwarfare__/graphics/icons/sulfuric-nitric-acid.png", - icon_size = 32, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - order = "a[fluid]-g[sulfuric-nitric-acid]", - }, - }) -end - -data:extend({ - { - type = "fluid", - name = "nitroglycerin", - default_temperature = 25, - heat_capacity = "1KJ", - base_color = { r = 0.3, g = 0.3, b = 1.0 }, - flow_color = { r = 1.0, g = 0.3, b = 0.3 }, - max_temperature = 100, - icon = "__bobwarfare__/graphics/icons/nitroglycerin.png", - icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - order = "a[fluid]-g[nitroglycerin]", - }, - - { - type = "fluid", - name = "glycerol", - default_temperature = 25, - heat_capacity = "1KJ", - base_color = { r = 1.0, g = 1.0, b = 0.5 }, - flow_color = { r = 0.5, g = 0.5, b = 0.5 }, - max_temperature = 100, - icon = "__bobwarfare__/graphics/icons/glycerol.png", - icon_size = 64, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - order = "a[fluid]-g[glycerol]", - fuel_value = "730kJ", --"1.46MJ" - }, -}) diff --git a/bullet-trails/changelog.txt b/bullet-trails/changelog.txt new file mode 100644 index 00000000..5ccb321d --- /dev/null +++ b/bullet-trails/changelog.txt @@ -0,0 +1,57 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.6.2 +Date: 10. 03. 2022 + Bugfixes: + - Fixed problem loading with a certain ammo strcture from other mods. + +--------------------------------------------------------------------------------------------------- +Version: 0.6.1 +Date: 23. 11. 2020 + Info: + - Updated for Factorio 1.1. + +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 27. 01. 2020 + Info: + - Updated for Factorio 0.18. + +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 + Info: + - Update for Factorio 0.17. + +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 + Info: + - Update for Factorio 0.16. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.5 + Info: + - Updated for 0.15.22+ + +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 + Changes: + - Added specific trails to bobs ammo. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 + Changes: + - Uranium rounds magazine now shoots with green trails! Also a number of other trail colours have been added for other mods to use: bullet-beam-blue, bullet-beam-blue-faint, bullet-beam-cyan, bullet-beam-cyan-faint, bullet-beam-green, bullet-beam-green-faint, bullet-beam-magenta, bullet-beam-magenta-faint, bullet-beam-olive, bullet-beam-olive-faint, bullet-beam-orange, bullet-beam-orange-faint, bullet-beam-purple, bullet-beam-purple-faint, bullet-beam-red, bullet-beam-red-faint, bullet-beam-teal, bullet-beam-teal-faint, bullet-beam-white, bullet-beam-white-faint, bullet-beam-yellow, bullet-beam-yellow-faint. + +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 + Info: + - Updated for Factorio v0.15. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 + Changes: + - Now works with Bobs. + +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 + Info: + - First release. diff --git a/bullet-trails/data-updates.lua b/bullet-trails/data-updates.lua new file mode 100644 index 00000000..372afa2b --- /dev/null +++ b/bullet-trails/data-updates.lua @@ -0,0 +1,39 @@ +function add_trail_to_ammo(ammo_name, trail_name) + local ammo = data.raw.ammo[ammo_name] + if not (ammo and ammo.ammo_type) then return end + local action1 = ammo.ammo_type.action[1] or ammo.ammo_type.action + if not action1 then return end + local action_delivery1 = action1.action_delivery[1] or action1.action_delivery + if not action_delivery1 then return end + if not action_delivery1.target_effects then action_delivery1.target_effects = {} end + if (not action_delivery1.target_effects[1]) and action_delivery1.target_effects.type then + action_delivery1.target_effects = {action_delivery1.target_effects} + end + local target_effects = action_delivery1.target_effects + if #target_effects > 0 and target_effects[#target_effects].entity_name + and string.find(target_effects[#target_effects].entity_name, "bullet-beam-", 1, true) then + target_effects[#target_effects].entity_name = trail_name + else + table.insert(action_delivery1.target_effects, { type = "create-explosion", entity_name = trail_name }) + end +end + +for ammo_name, ammo in pairs(data.raw.ammo) do + if ammo.ammo_type and ammo.ammo_type.category and ammo.ammo_type.category == "bullet" then + add_trail_to_ammo(ammo_name, "bullet-beam-white-faint") + end +end + +-- vanilla +add_trail_to_ammo('firearm-magazine', "bullet-beam-yellow-faint") +add_trail_to_ammo('piercing-rounds-magazine', "bullet-beam-red-faint") +add_trail_to_ammo('uranium-rounds-magazine', "bullet-beam-olive") + +-- bobs +add_trail_to_ammo('bullet-magazine', "bullet-beam-white-faint") +add_trail_to_ammo('ap-bullet-magazine', "bullet-beam-white") +add_trail_to_ammo('he-bullet-magazine', "bullet-beam-yellow") +add_trail_to_ammo('flame-bullet-magazine', "bullet-beam-red") +add_trail_to_ammo('acid-bullet-magazine', "bullet-beam-purple") +add_trail_to_ammo('poison-bullet-magazine', "bullet-beam-green-faint") +add_trail_to_ammo('electric-bullet-magazine', "bullet-beam-cyan") diff --git a/bullet-trails/data.lua b/bullet-trails/data.lua new file mode 100644 index 00000000..b8c51d6f --- /dev/null +++ b/bullet-trails/data.lua @@ -0,0 +1,53 @@ +local beams = { + "bullet-beam-basic", + "bullet-beam-blue", + "bullet-beam-blue-faint", + "bullet-beam-cyan", + "bullet-beam-cyan-faint", + "bullet-beam-green", + "bullet-beam-green-faint", + "bullet-beam-magenta", + "bullet-beam-magenta-faint", + "bullet-beam-olive", + "bullet-beam-olive-faint", + "bullet-beam-orange", + "bullet-beam-orange-faint", + "bullet-beam-piercing", + "bullet-beam-purple", + "bullet-beam-purple-faint", + "bullet-beam-red", + "bullet-beam-red-faint", + "bullet-beam-teal", + "bullet-beam-teal-faint", + "bullet-beam-white", + "bullet-beam-white-faint", + "bullet-beam-yellow", + "bullet-beam-yellow-faint", +} +for _, beam in pairs(beams) do + data:extend({ + { + type = "explosion", + name = beam, + flags = {"not-on-map", "placeable-off-grid"}, + random_target_offset = true, + target_offset_y = -0.3, + animation_speed = 1, + rotate = true, + beam = true, + animations = + { + { + filename = "__bullet-trails__/graphics/entity/projectile/"..beam..".png", + priority = "extra-high", + width = 7, + height = 90, + frame_count = 5, + } + }, + light = {intensity = 0.1, size = 2}, + smoke = "smoke-fast", + smoke_count = 1, + smoke_slow_down_factor = 1 + }}) +end diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-basic.png b/bullet-trails/graphics/entity/projectile/bullet-beam-basic.png new file mode 100644 index 00000000..cd6ffd72 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-basic.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-blue-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-blue-faint.png new file mode 100644 index 00000000..39753043 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-blue-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-blue.png b/bullet-trails/graphics/entity/projectile/bullet-beam-blue.png new file mode 100644 index 00000000..6e32838c Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-blue.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-cyan-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-cyan-faint.png new file mode 100644 index 00000000..15b7486a Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-cyan-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-cyan.png b/bullet-trails/graphics/entity/projectile/bullet-beam-cyan.png new file mode 100644 index 00000000..18bb7258 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-cyan.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-green-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-green-faint.png new file mode 100644 index 00000000..42cb7e55 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-green-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-green.png b/bullet-trails/graphics/entity/projectile/bullet-beam-green.png new file mode 100644 index 00000000..95bf2652 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-green.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-magenta-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-magenta-faint.png new file mode 100644 index 00000000..185c0b25 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-magenta-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-magenta.png b/bullet-trails/graphics/entity/projectile/bullet-beam-magenta.png new file mode 100644 index 00000000..c9b54959 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-magenta.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-olive-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-olive-faint.png new file mode 100644 index 00000000..b735edff Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-olive-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-olive.png b/bullet-trails/graphics/entity/projectile/bullet-beam-olive.png new file mode 100644 index 00000000..3c95f12a Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-olive.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-orange-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-orange-faint.png new file mode 100644 index 00000000..a29f3db6 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-orange-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-orange.png b/bullet-trails/graphics/entity/projectile/bullet-beam-orange.png new file mode 100644 index 00000000..0a342934 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-orange.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-piercing.png b/bullet-trails/graphics/entity/projectile/bullet-beam-piercing.png new file mode 100644 index 00000000..1187d73a Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-piercing.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-purple-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-purple-faint.png new file mode 100644 index 00000000..35c702b4 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-purple-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-purple.png b/bullet-trails/graphics/entity/projectile/bullet-beam-purple.png new file mode 100644 index 00000000..d5625c31 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-purple.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-red-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-red-faint.png new file mode 100644 index 00000000..ac197ba4 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-red-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-red.png b/bullet-trails/graphics/entity/projectile/bullet-beam-red.png new file mode 100644 index 00000000..d2406631 Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-red.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-teal-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-teal-faint.png new file mode 100644 index 00000000..b5ac7ada Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-teal-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-teal.png b/bullet-trails/graphics/entity/projectile/bullet-beam-teal.png new file mode 100644 index 00000000..fec8e65e Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-teal.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-white-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-white-faint.png new file mode 100644 index 00000000..3bbcf95d Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-white-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-white.png b/bullet-trails/graphics/entity/projectile/bullet-beam-white.png new file mode 100644 index 00000000..1da435be Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-white.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-yellow-faint.png b/bullet-trails/graphics/entity/projectile/bullet-beam-yellow-faint.png new file mode 100644 index 00000000..aa7301ad Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-yellow-faint.png differ diff --git a/bullet-trails/graphics/entity/projectile/bullet-beam-yellow.png b/bullet-trails/graphics/entity/projectile/bullet-beam-yellow.png new file mode 100644 index 00000000..935d8c4d Binary files /dev/null and b/bullet-trails/graphics/entity/projectile/bullet-beam-yellow.png differ diff --git a/bullet-trails/info.json b/bullet-trails/info.json new file mode 100644 index 00000000..8010d781 --- /dev/null +++ b/bullet-trails/info.json @@ -0,0 +1,9 @@ +{ + "name": "bullet-trails", + "version": "0.6.2", + "title": "Bullet Trails", + "author": "Earendel", + "dependencies": ["base >= 1.1.0"], + "description": "Adds bullet trails to machine gun type bullets. Works with gun turrets, guns, vehicle-mounted guns, and anything else that uses that type of ammo.", + "factorio_version": "1.1" +} diff --git a/robot_attrition_0.5.15/licence.txt b/bullet-trails/licence.txt similarity index 100% rename from robot_attrition_0.5.15/licence.txt rename to bullet-trails/licence.txt diff --git a/bullet-trails/thumbnail.png b/bullet-trails/thumbnail.png new file mode 100644 index 00000000..0854eb08 Binary files /dev/null and b/bullet-trails/thumbnail.png differ diff --git a/bullet-trails_0.6.2.zip b/bullet-trails_0.6.2.zip deleted file mode 100644 index 3d40f81c..00000000 Binary files a/bullet-trails_0.6.2.zip and /dev/null differ diff --git a/comb_0.1.2/changelog.txt b/comb/changelog.txt similarity index 100% rename from comb_0.1.2/changelog.txt rename to comb/changelog.txt diff --git a/comb_0.1.2/data-updates.lua b/comb/data-updates.lua similarity index 100% rename from comb_0.1.2/data-updates.lua rename to comb/data-updates.lua diff --git a/comb_0.1.2/graphics/entity/arithmetic_combinator.png b/comb/graphics/entity/arithmetic_combinator.png similarity index 100% rename from comb_0.1.2/graphics/entity/arithmetic_combinator.png rename to comb/graphics/entity/arithmetic_combinator.png diff --git a/comb_0.1.2/graphics/entity/arithmetic_combinator_shadow.png b/comb/graphics/entity/arithmetic_combinator_shadow.png similarity index 100% rename from comb_0.1.2/graphics/entity/arithmetic_combinator_shadow.png rename to comb/graphics/entity/arithmetic_combinator_shadow.png diff --git a/comb_0.1.2/graphics/entity/combinator-displays.png b/comb/graphics/entity/combinator-displays.png similarity index 100% rename from comb_0.1.2/graphics/entity/combinator-displays.png rename to comb/graphics/entity/combinator-displays.png diff --git a/comb_0.1.2/graphics/entity/constant_combinator.png b/comb/graphics/entity/constant_combinator.png similarity index 100% rename from comb_0.1.2/graphics/entity/constant_combinator.png rename to comb/graphics/entity/constant_combinator.png diff --git a/comb_0.1.2/graphics/entity/constant_combinator_shadow.png b/comb/graphics/entity/constant_combinator_shadow.png similarity index 100% rename from comb_0.1.2/graphics/entity/constant_combinator_shadow.png rename to comb/graphics/entity/constant_combinator_shadow.png diff --git a/comb_0.1.2/graphics/entity/decider_combinator.png b/comb/graphics/entity/decider_combinator.png similarity index 100% rename from comb_0.1.2/graphics/entity/decider_combinator.png rename to comb/graphics/entity/decider_combinator.png diff --git a/comb_0.1.2/graphics/entity/decider_combinator_shadow.png b/comb/graphics/entity/decider_combinator_shadow.png similarity index 100% rename from comb_0.1.2/graphics/entity/decider_combinator_shadow.png rename to comb/graphics/entity/decider_combinator_shadow.png diff --git a/comb_0.1.2/graphics/icons/arithmetic_combinator_icon_64.png b/comb/graphics/icons/arithmetic_combinator_icon_64.png similarity index 100% rename from comb_0.1.2/graphics/icons/arithmetic_combinator_icon_64.png rename to comb/graphics/icons/arithmetic_combinator_icon_64.png diff --git a/comb_0.1.2/graphics/icons/constant_combinator_icon_64.png b/comb/graphics/icons/constant_combinator_icon_64.png similarity index 100% rename from comb_0.1.2/graphics/icons/constant_combinator_icon_64.png rename to comb/graphics/icons/constant_combinator_icon_64.png diff --git a/comb_0.1.2/graphics/icons/decider_combinator_icon_64.png b/comb/graphics/icons/decider_combinator_icon_64.png similarity index 100% rename from comb_0.1.2/graphics/icons/decider_combinator_icon_64.png rename to comb/graphics/icons/decider_combinator_icon_64.png diff --git a/comb_0.1.2/graphics/icons/thumbnail_issled_128.png b/comb/graphics/icons/thumbnail_issled_128.png similarity index 100% rename from comb_0.1.2/graphics/icons/thumbnail_issled_128.png rename to comb/graphics/icons/thumbnail_issled_128.png diff --git a/comb_0.1.2/graphics/icons/thumbnail_issled_256.png b/comb/graphics/icons/thumbnail_issled_256.png similarity index 100% rename from comb_0.1.2/graphics/icons/thumbnail_issled_256.png rename to comb/graphics/icons/thumbnail_issled_256.png diff --git a/comb_0.1.2/info.json b/comb/info.json similarity index 100% rename from comb_0.1.2/info.json rename to comb/info.json diff --git a/comb_0.1.2/locale/ru/locale.cfg b/comb/locale/ru/locale.cfg similarity index 100% rename from comb_0.1.2/locale/ru/locale.cfg rename to comb/locale/ru/locale.cfg diff --git a/comb_0.1.2/thumbnail.png b/comb/thumbnail.png similarity index 100% rename from comb_0.1.2/thumbnail.png rename to comb/thumbnail.png diff --git a/combat-mechanics-overhaul_0.6.24/README.md b/combat-mechanics-overhaul_0.6.24/README.md deleted file mode 100644 index dd1e1c51..00000000 --- a/combat-mechanics-overhaul_0.6.24/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# combat-mechanics-overhaul -Combat Mechanics Overhaul - - -This is **NOT** an open source project, please check the licence file. - -If you would like to contribute please contact Earendel on Discord first: https://discord.gg/ymjUVMv diff --git a/combat-mechanics-overhaul_0.6.24/changelog.txt b/combat-mechanics-overhaul_0.6.24/changelog.txt deleted file mode 100644 index bf18f447..00000000 --- a/combat-mechanics-overhaul_0.6.24/changelog.txt +++ /dev/null @@ -1,251 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.6.24 -Date: 12. 02. 2023 - Bugfixes: - - Fixed the `cmo_ignore` option disabling unintended parts of CMO. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.23 -Date: 12. 02. 2023 - Compatibility: - - Mods can now add a `cmo_ignore = true` attribute on projectile prototypes to prevent CMO from modifying their collision. - - Locale: - - Added Brazilian Portuguese translation thanks to 123499. - - Added Spanish translation thanks to Spiderlove. - - Added Japanese translation thanks to YAMATO_Hajime. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.22 -Date: 18. 06. 2022 - Changes: - - New mod settings for enemy speed, health, and range bonuses. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.21 -Date: 31. 05. 2022 - Compatibility: - - Performance optimisations for K2's antimatter bombs. - - Support for mods that allow resources to spawn in water. - - Locale: - - Korean translation thanks to x2605. - - Russian translation thanks to Shadow_Man. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.20 -Date: 17. 04. 2021 - Compatibility: - - If something is detected as flying, most of the original collision mask is preserved. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.19 -Date: 05. 04. 2021 - Changes: - - The default setting for acid pools affecting flying entities is now to not affect them. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.18 -Date: 16. 04. 2021 - Bugfixes: - - Fixed missing setting string. - - Fixed spidertron couldn't walk in shallow water. - - Fixed that flying characters would be affected by acid pools with the option disabled. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.17 -Date: 13. 04. 2021 - Changes: - - Walls block spitters function is optional. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.16 -Date: 04. 04. 2021 - Bugfixes: - - Fixed that artillery shots could be blocked by enemy walls (they're not that tall). - - Optimisation for atomic bomb projectiles (Note: This may cause entities with unusual collision settings to not be hit by the projectiles so please report a bug if something becomes immune to nukes that shouldn't). - ---------------------------------------------------------------------------------------------------- -Version: 0.6.15 -Date: 30. 01. 2021 - Bugfixes: - - Fixed a bullet vs tree interaction. - - Changes: - - Added a setting to allow shotguns to hit friendly entities, such as wooden chests. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.14 -Date: 21. 01. 2021 - Compatibility: - - Spider leg fix for Klonan. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.13 -Date: 01. 01. 2021 - Bugfixes: - - Fixed loading issue if a projectile has no action. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.12 -Date: 25. 12. 2020 - Changes: - - There are now trigger target types specifically for trees and rocks. - - Bugfixes: - - Fixed spitters unable to damage rocks. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.11 -Date: 13. 12. 2020 - Compatibility: - - Excludes for "farl_player" and "yarm-remote-viewer". - ---------------------------------------------------------------------------------------------------- -Version: 0.6.10 -Date: 11. 12. 2020 - Compatibility: - - Excludes entities with "proxy" in the name (Klonan's mods). - ---------------------------------------------------------------------------------------------------- -Version: 0.6.9 -Date: 09. 12. 2020 - Bugfixes: - - Fix for default projectile collisions. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.8 -Date: 07. 12. 2020 - Compatibility: - - Support for more mods that add projectiles from guns instead of hitscan attacks. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.7 -Date: 06. 12. 2020 - Compatibility: - - Support for transport drones. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.6 -Date: 05. 12. 2020 - Bugfixes: - - Discovered that the base game collision deafults utility returns the wrong settings for units and causes units to collide with rails if used. I've added a temporary bypass until it is fixed in the base game. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.5 -Date: 04. 12. 2020 - Changes: - - Made more projectiles not to friendly fire collision. - - Better support for flying vehicles and non-land trains. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.4 -Date: 04. 12. 2020 - Changes: - - Collision util update: Added a new named collision mask for car-type vehicles and shuffled more collision mask layers around. This hopefully avoids some oversized train wagon issues. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.3 -Date: 03. 12. 2020 - Changes: - - Shuffled some collision masks around to better support mods that change character collisions. - - Increased tree collision boxes but the player won't collide with them. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.2 -Date: 24. 11. 2020 - Info: - - Renamed from "Walls Block Spitters" to "Combat mechanics overhaul". - - Changes: - - Now affects shotgun shells and some other projectiles (shotgun can now shoot over you own walls). - - Mod option for: Flying units are not affected by acid pools. - - Introduces new named collision layer utilities. - - Assigns most things to organic/mechanical and flying/ground-unit/ground-static trigger masks. - - Bugfixes: - - Fixed aircraft colliding with walls. - ---------------------------------------------------------------------------------------------------- -Version: 0.6.1 -Date: 24. 11. 2020 - Info: - - Updated for Factorio 1.1. - ---------------------------------------------------------------------------------------------------- -Version: 0.5.2 -Date: 27. 01. 2020 - Bugfixes: - - Fixed collision settings not being applied to non-worm powerless ammoless fluidless turrets. - ---------------------------------------------------------------------------------------------------- -Version: 0.5.1 -Date: 27. 01. 2020 - Info: - - Updated for Factorio 0.18. - ---------------------------------------------------------------------------------------------------- -Version: 0.4.5 - Bugfixes: - - Fixed issue where some projectiles could have extended ranges. - ---------------------------------------------------------------------------------------------------- -Version: 0.4.4 - Changes: - - Now affects bobs spitters. - ---------------------------------------------------------------------------------------------------- -Version: 0.4.3 - Bugfixes: - - Removed debug logging. - ---------------------------------------------------------------------------------------------------- -Version: 0.4.2 - Bugfixes: - - Fixed conflict where starting_speed was missing. - ---------------------------------------------------------------------------------------------------- -Version: 0.4.1 - Info: - - Updated for Factorio 0.17. - - In vanilla 0.17 all spitter projectiles were changed to streams instead of true projectiles making collision impossible, so that all have to be dynamically changed back to real projectiles. Changes to turret ranges have been removed. Biter health increased. - ---------------------------------------------------------------------------------------------------- -Version: 0.3.1 - Bugfixes: - - Updated for Factorio 0.16 - ---------------------------------------------------------------------------------------------------- -Version: 0.2.3 - Bugfixes: - - Fixed rare bug caused by other mods adding entities without a max health property. - ---------------------------------------------------------------------------------------------------- -Version: 0.2.2 - Bugfixes: - - Changes should apply to Spitters from other mods (probably). - ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 - Bugfixes: - - Updated for Factorio 0.15 - ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 - Bugfixes: - - Fixed issue with other mods adding biters with different attack formats. - ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 - Bugfixes: - - Fixed Shotgun not affecting Biters - ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 - Bugfixes: - - No longer affects spitters from other mods that have special attacks because it would disable the special properties. Special support for those may be added at a later date. - ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 - Bugfixes: - - Fixed biters able to walk on water. diff --git a/combat-mechanics-overhaul_0.6.24/control.lua b/combat-mechanics-overhaul_0.6.24/control.lua deleted file mode 100644 index 3340e128..00000000 --- a/combat-mechanics-overhaul_0.6.24/control.lua +++ /dev/null @@ -1,50 +0,0 @@ -local collision_mask_util = require("__combat-mechanics-overhaul__/collision-mask-util-extended/control/collision-mask-util-control") -local Util = require("scripts/util") - -local exclude_names = { - "farl_player", - "yarm-remote-viewer", -} - -function prototype_check_collision_layers(prototype) - if not ( - prototype.collision_mask_with_flags ["colliding-with-tiles-only"] - or global.collision_layers.flying_layer - or global.collision_layers.projectile_layer - or global.collision_layers.player_layer - or global.collision_layers.train_layer) then - for _, exclude_name in pairs(exclude_names) do - if string.find(prototype.name, exclude_name, 1, true) then return end - end - if not Util.table_contains(exclude_names, prototype.name) then - error(prototype.type.." "..prototype.name.." must have at least 1 of the following collision masks: player-layer, train-layer, flying-layer or projectile-layer.\n"..serpent.block(prototype.collision_mask)) - end - end -end - -function check_collision_layers() - - -- general check - collision_mask_util.named_collision_mask_integrity_check() - - global.collision_layers = {} - global.collision_layers.flying_layer = collision_mask_util.get_named_collision_mask("flying-layer") - global.collision_layers.projectile_layer = collision_mask_util.get_named_collision_mask("projectile-layer") - global.collision_layers.player_layer = "player-layer" - global.collision_layers.train_layer = "train-layer" - - -- make sure that projectiles can actually hit what they are shooting at - local prototypes = game.get_filtered_entity_prototypes({ - {filter = "type", type = "car"}, - {filter = "type", type = "spider-vehicle"}, - {filter = "type", type = "character"}, - {filter = "type", type = "unit"}, - {filter = "type", type = "combat-robot"} - }) - for _, prototype in pairs(prototypes) do - prototype_check_collision_layers(prototype) - end -end - -script.on_init(check_collision_layers) -script.on_configuration_changed(check_collision_layers) diff --git a/combat-mechanics-overhaul_0.6.24/data-final-fixes.lua b/combat-mechanics-overhaul_0.6.24/data-final-fixes.lua deleted file mode 100644 index 03e1dd32..00000000 --- a/combat-mechanics-overhaul_0.6.24/data-final-fixes.lua +++ /dev/null @@ -1,4 +0,0 @@ -collision_mask_util_extended = require("__combat-mechanics-overhaul__/collision-mask-util-extended/data/collision-mask-util-extended") -require("prototypes/phase-3/collision-common") -require("prototypes/phase-3/collision-trigger-types") -require("prototypes/phase-3/gameplay") diff --git a/combat-mechanics-overhaul_0.6.24/data.lua b/combat-mechanics-overhaul_0.6.24/data.lua deleted file mode 100644 index c19ae0bb..00000000 --- a/combat-mechanics-overhaul_0.6.24/data.lua +++ /dev/null @@ -1,3 +0,0 @@ -collision_mask_util_extended = require("__combat-mechanics-overhaul__/collision-mask-util-extended/data/collision-mask-util-extended") -require("prototypes/phase-1/init-trigger-types") -require("prototypes/phase-1/init-named-collision-layers") diff --git a/combat-mechanics-overhaul_0.6.24/info.json b/combat-mechanics-overhaul_0.6.24/info.json deleted file mode 100644 index 62bfe853..00000000 --- a/combat-mechanics-overhaul_0.6.24/info.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "combat-mechanics-overhaul", - "version": "0.6.24", - "title": "Combat Mechanics Overhaul", - "author": "Earendel", - "dependencies": [ - "base >= 1.1.0", - "(?) jetpack" - ], - "description": "Overhauls certain combat mechanics and collision settings. Walls block most enemy projectiles from shooting over them such as spitters and enemy shotgun shells. Your projectiles can still go over your own walls without problems. Flying units vehicles can fly over walls, but can still be hit by projectiles. Units and structures are assigned the appropriate biological/mechanical and flying/ground-unit/ground-static tags so that can be affected by or immune to certain effects. Has multiple mod options including things like flying units and vehicles to not be affected by acid pools on the ground. Also provides some collision utilities to for other mods.", - "factorio_version": "1.1", - "homepage": "https://discord.gg/ymjUVMv", - "package": { - "ignore": ["**"], - "extra": [ - { - "root": ".build" - } - ], - "scripts": { - "datestamp": "sh ./build-scripts/datestamp.sh", - "prepackage": "sh ./build-scripts/prepackage.sh" - } - } -} diff --git a/combat-mechanics-overhaul_0.6.24/locale/cs/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/cs/strings.cfg deleted file mode 100644 index 1828f8e6..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/cs/strings.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[mod-setting-name] -walls-block-compensation=Kompenzace bojovΓ© bilance - -[mod-setting-description] -walls-block-compensation=UdΔ›lΓ‘ plivače o nΔ›co silnΔ›jΕ‘Γ­mi, jakoΕΎto kompenzaci za to, ΕΎe jejich ΓΊtok lze blokovat zdΓ­. diff --git a/combat-mechanics-overhaul_0.6.24/locale/en/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/en/strings.cfg deleted file mode 100644 index 73f9bc27..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/en/strings.cfg +++ /dev/null @@ -1,33 +0,0 @@ -[mod-name] -combat-mechanics-overhaul=Combat Mechanics Overhaul - -[mod-description] -combat-mechanics-overhaul=Overhauls certain combat mechanics and collision settings. Walls block most enemy projectiles from shooting over them such as spitters and enemy shotgun shells. Your projectiles can still go over your own walls without problems. Flying units vehicles can fly over walls, but can still be hit by projectiles. Units and structures are assigned the appropriate biological/mechanical and flying/ground-unit/ground-static tags so that can be affected by or immune to certain effects. Has multiple mod options including things like flying units and vehicles to not be affected by acid pools on the ground. Also provides some collision utilities to for other mods. - -[mod-setting-name] -spitter-spit-blockable=Spitter spit blockable -worm-spit-blockable=Worm spit blockable -rockets-blockable=Rockets blockable -pools-affect-structures=Pools affect structures -pools-affect-flying=Pools affect flying -shotguns-hit-friendly=Shotguns Hit Friendly -unit-speed=Unit speed % -unit-health=Unit health % -unit-range=Unit range % -worm-health=Worm health % -worm-range=Worm range % -spawner-health=Spawner health % - -[mod-setting-description] -spitter-spit-blockable=Spitter spit can be blocked by walls. Makes spitters spit into blockable projectiles. If disabled then spitters spit is a stream that arcs over walls. -worm-spit-blockable=Worm spit can be blocked by walls. Makes worm spit into blockable projectiles. If disabled then worm spit is a stream that arcs over walls. -rockets-blockable=Rockets can collide with trees and enemy walls. Good for PvP. -pools-affect-structures=Pools, such as worm acid pools, affect structures. -pools-affect-flying=Pools, such as worm acid pools, affect flying units (corrosive vapours). -shotguns-hit-friendly=If enabled, shutgun pellets can hit friendly structures, like wooden chests. -unit-speed=Biter and spitter speed, 100 means no change. -unit-health=Biter and spitter health, 100 means no change. -unit-range=Spitter range, 100 means no change. -worm-health=Worm health, 100 means no change. -worm-range=Worm range, 100 means no change. -spawner-health=Biter spawner and spitter spawner health, 100 means no change. diff --git a/combat-mechanics-overhaul_0.6.24/locale/es-ES/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/es-ES/strings.cfg deleted file mode 100644 index ce8b0f27..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/es-ES/strings.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[mod-name] -combat-mechanics-overhaul=Combat Mechanics Overhaul - -[mod-description] -combat-mechanics-overhaul=(RevisiΓ³n de la mecΓ‘nica de combate) Revisa ciertas mecΓ‘nicas de combate y ajustes de colisiΓ³n. Los muros impiden que la mayorΓ­a de los proyectiles enemigos disparen sobre ellos, como los spitters y proyectiles de escopeta enemigos. Tus proyectiles aΓΊn pueden atravesar tus propios muros sin problemas. Las unidades voladoras pueden volar por encima de las paredes, pero aΓΊn pueden ser alcanzados por proyectiles. A las unidades y estructuras se les asignan las etiquetas biolΓ³gicas/mecΓ‘nicas y voladoras/unidades terrestres/estΓ‘ticas terrestres adecuadas para que puedan verse afectadas o inmunes a determinados efectos. El mod tiene mΓΊltiples opciones que incluyen cosas como para que las unidades voladoras y vehΓ­culos no se vean afectados por los charcos de Γ‘cido en el suelo. TambiΓ©n proporciona algunas utilidades de colisiΓ³n para otros mods. - -[mod-setting-name] -walls-block-compensation=CompensaciΓ³n del balance de combate -spitter-spit-blockable=Saliva de spitter bloqueable -worm-spit-blockable=Saliva de gusano bloqueable -rockets-blockable=Cohetes bloqueables -pools-affect-structures=Los charcos afectan a las estructuras -pools-affect-flying=Los charcos afectan al vuelo -shotguns-hit-friendly=Fuego amigo - -[mod-setting-description] -walls-block-compensation=Otorga a los spitters algunos beneficios menores para compensar el bloqueo de sus proyectiles. -spitter-spit-blockable=Los muros pueden bloquear la saliva de los spitters. Hace que la saliva de los spitters se conviertan en proyectiles bloqueables. Si estΓ‘ desactivado, la saliva de los spitters pasarΓ‘ por encima de los muros. -worm-spit-blockable=Los muros pueden bloquear la saliva de los gusanos. Hace que la saliva de los gusanos se conviertan en proyectiles bloqueables. Si estΓ‘ desactivado, la saliva de los gusanos pasarΓ‘ por encima de los muros. -rockets-blockable=Los cohetes pueden chocar con Γ‘rboles y muros enemigos. Bueno para PvP. -pools-affect-structures=Los charcos, como los charcos de Γ‘cido de los gusanos, afectan a las estructuras. -pools-affect-flying=Los charcos, como los charcos de Γ‘cido de los gusanos, afectan a las unidades voladoras (vapores corrosivos). -shotguns-hit-friendly=Si estΓ‘ habilitado, los perdigones de la escopeta pueden daΓ±ar estructuras amigas, como cofres de madera. diff --git a/combat-mechanics-overhaul_0.6.24/locale/ja/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/ja/strings.cfg deleted file mode 100644 index db22fe90..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/ja/strings.cfg +++ /dev/null @@ -1,33 +0,0 @@ - - - -[mod-description] -combat-mechanics-overhaul=ζˆ¦ι—˜γδ»•硄みと葝ηͺγθ¨­εšγŒθ¦‹η›΄γ•γ‚ŒγΎγ—γŸγ€‚γ‚Ήγƒ”γƒƒγ‚ΏγƒΌγ‚„γ‚·γƒ§γƒƒγƒˆγ‚¬γƒ³γεΌΎγͺど、ほとんどγζ•΅γεΌΎδΈΈγŒε£γ‚’θΆŠγˆγ¦η™Ίε°„γ•γ‚Œγ‚‹γγ‚’ι˜»ζ­’します。θ‡ͺεˆ†γεΌΎδΈΈγ―ε£γ‚’θΆŠγˆγ¦γ‚‚ε•ι‘Œγͺγι£›γΉγΎγ™γ€‚ι£›θ‘Œγƒ¦γƒ‹γƒƒγƒˆγ―ε£γδΈŠγ‚‚ι£›γΉγΎγ™γŒγ€ι£›ηΏ”δ½“γ«γ―ε½“γŸγ‚ŠγΎγ™γ€‚γƒ¦γƒ‹γƒƒγƒˆγ‚„ζ§‹ι€ η‰©γ«γ―γ€ι©εˆ‡γͺη”Ÿη‰©ηš„/ζ©Ÿζ’°ηš„γ€ι£›θ‘Œ/εœ°δΈŠγƒ¦γƒ‹γƒƒγƒˆ/εœ°δΈŠι™ζ­’γ‚Ώγ‚°γŒε‰²γ‚Šε½“γ¦γ‚‰γ‚Œγ€η‰ΉεšγεŠΉζžœγε½±ιŸΏγ‚’ε—γ‘γŸγ‚Šε—γ‘γͺγ‹γ£γŸγ‚Šγ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚ι£›θ‘Œγƒ¦γƒ‹γƒƒγƒˆγ‚„θ»ŠδΈ‘γŒεœ°δΈŠγι…Έγγƒ—ールγε½±ιŸΏγ‚’受けγͺγ„γ‚ˆγ†γ«γ™γ‚‹γͺどγθ€‡ζ•°γε€‰ζ›΄γ‚ͺγƒ—γ‚·γƒ§γƒ³γŒγ‚γ‚ŠγΎγ™γ€‚γΎγŸγ€δ»–γMODγγŸγ‚γ«γ„く぀かγθ‘ηͺι–’ι€£γζ©Ÿθƒ½γ‚’提供します。 - -[mod-setting-name] -spitter-spit-blockable=スピッターγι£›ηΏ”δ½“γ‚’ι˜²θ­·ε―能にする -worm-spit-blockable=γƒ―γƒΌγƒ γι£›ηΏ”δ½“γ‚’ι˜²θ­·ε―能にする -rockets-blockable=γƒ­γ‚±γƒƒγƒˆεΌΎγ‚’γƒ–γƒ­γƒƒγ‚―ε―θƒ½γ«γ™γ‚‹ -pools-affect-structures=γƒ—γƒΌγƒ«γ―ζ§‹ι€ η‰©γ«ε½±ιŸΏγ‚’δΈŽγˆγΎγ™ -pools-affect-flying=γƒ—γƒΌγƒ«γ―ι£›θ‘Œγ«ε½±ιŸΏγ‚’δΈŽγˆγΎγ™ -shotguns-hit-friendly=γ‚·γƒ§γƒƒγƒˆγ‚¬γƒ³γγƒ•レンドγƒͺーフゑむを -unit-speed=γƒ¦γƒ‹γƒƒγƒˆγι€ŸεΊ¦ % -unit-health=γƒ¦γƒ‹γƒƒγƒˆγθ€δΉ…εŠ› % -unit-range=γƒ¦γƒ‹γƒƒγƒˆγη―„ε›² % -worm-health=γƒ―γƒΌγƒ γθ€δΉ…εŠ› % -worm-range=γƒ―γƒΌγƒ γη―„ε›² % -spawner-health=バむターγε·£γθ€δΉ…εŠ› % - -[mod-setting-description] -spitter-spit-blockable=スピッターγι£›ηΏ”δ½“γ‚’ε£γ§γƒ–γƒ­γƒƒγ‚―γ™γ‚‹γ“γ¨γŒγ§γγ‚‹γ‚ˆγ†γ«γͺγ‚ŠγΎγ—γŸγ€‚ι£›ηΏ”δ½“γ‚’γƒ–γƒ­γƒƒγ‚―ε―θƒ½γͺεΌΎδΈΈγ«γ—γΎγ™γ€‚η„‘εŠΉγε ΄εˆγ€ε£γδΈŠγ‚’εΌ§γ‚’ζγγ‚ˆγ†γ«ι£›γ³γΎγ™γ€‚ -worm-spit-blockable=γƒ―γƒΌγƒ γι£›ηΏ”δ½“γ‚’ε£γ§γƒ–γƒ­γƒƒγ‚―γ§γγ‚‹γ‚ˆγ†γ«γͺγ‚ŠγΎγ—γŸγ€‚γƒ―γƒΌγƒ γι£›ηΏ”体をブロック可能γͺεΌΎδΈΈγ«γ—γΎγ™γ€‚η„‘εŠΉγε ΄εˆγ€γƒ―γƒΌγƒ γι£›ηΏ”体は壁γδΈŠγ‚’εΌ§γ‚’ζγγ‚ˆγ†γ«ι£›γ³γΎγ™γ€‚ -rockets-blockable=γƒ­γ‚±γƒƒγƒˆεΌΎγ―ζœ¨γ‚„ζ•΅γε£γ«θ‘ηͺγ™γ‚‹γ“γ¨γŒε‡Ίζ₯ます。PvPに向きます。 -pools-affect-structures=ワーム酸プールγͺどγγƒ—γƒΌγƒ«γ―γ€ζ§‹ι€ η‰©γ«ε½±ιŸΏγ‚’δΈŽγˆγΎγ™γ€‚ -pools-affect-flying=ワーム酸プールγͺどγγƒ—γƒΌγƒ«γ―γ€ι£›θ‘Œγƒ¦γƒ‹γƒƒγƒˆγ«ε½±ιŸΏγ‚’δΈŽγˆγΎγ™οΌˆθ…ι£Ÿζ€§γθ’Έζ°—)。 -shotguns-hit-friendly=ζœ‰εŠΉεŒ–γ™γ‚‹γ¨γ€γ‚·γƒ£γƒƒγƒˆγ‚¬γƒ³γεΌΎγŒζœ¨η±γͺど味方γζ§‹ι€ η‰©γ«ε½“γŸγ‚‹γ‚ˆγ†γ«γͺγ‚ŠγΎγ™γ€‚ -unit-speed=バむターとスピッターγη§»ε‹•ι€ŸεΊ¦γ€100γ―ε€‰εŒ–γͺしを意味します。 -unit-health=バむターとスピッターγδ½“εŠ›γ€100γ―ε€‰εŒ–γͺしを意味します。 -unit-range=スピッターγη―„囲、100γ―ε€‰εŒ–γͺしを意味します。 -worm-health=γƒ―γƒΌγƒ γθ€δΉ…εŠ›γ€100γ―ε€‰εŒ–γͺしを意味します。 -worm-range=γƒ―γƒΌγƒ γη―„囲、100γ―ε€‰εŒ–γͺしを意味します。 -spawner-health=バむターγε·£γ¨γ‚Ήγƒ”ッターγε·£γθ€δΉ…εŠ›γ€100γ―ε€‰εŒ–γͺしを意味します。 diff --git a/combat-mechanics-overhaul_0.6.24/locale/ko/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/ko/strings.cfg deleted file mode 100644 index a2755e32..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/ko/strings.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[mod-name] -combat-mechanics-overhaul=μ „νˆ¬ μ—­ν•™ μ˜€λ²„ν™€ - -[mod-description] -combat-mechanics-overhaul=νŠΉμ • μ „νˆ¬ μ—­ν•™κ³Ό 좩돌 섀정을 μ˜€λ²„ν™€ν•©λ‹ˆλ‹€. 벽은 μŠ€ν”Όν„°λ‚˜ 적의 산탄총 포탄과 같은 λŒ€λΆ€λΆ„μ˜ 적 λ°œμ‚¬μ²΄κ°€ 벽을 ν†΅κ³Όν•˜μ—¬ λ°œμ‚¬λ˜λŠ” 것을 λ§‰μŠ΅λ‹ˆλ‹€. λ‹Ήμ‹ μ˜ λ°œμ‚¬μ²΄λŠ” μ—¬μ „νžˆ λ¬Έμ œμ—†μ΄ λ‹Ήμ‹ μ˜ 벽을 λ„˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λΉ„ν–‰ μœ λ‹› μ°¨λŸ‰μ€ λ²½ μœ„λ₯Ό λ‚  수 μžˆμ§€λ§Œ, μ—¬μ „νžˆ λ°œμ‚¬μ²΄μ— λ§žμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μœ λ‹›κ³Ό κ΅¬μ‘°λ¬Όμ—λŠ” νŠΉμ • νš¨κ³Όμ— 영ν–₯을 λ°›κ±°λ‚˜ 면역이 될 수 μžˆλ„λ‘ μ μ ˆν•œ 생물학적/기계적 및 λΉ„ν–‰/지상/지상 정적 νƒœκ·Έκ°€ ν• λ‹Ήλ©λ‹ˆλ‹€. μ§€μƒμ˜ μ‚°μ„± μ›…λ©μ΄μ˜ 영ν–₯을 λ°›μ§€ μ•ŠλŠ” λΉ„ν–‰ μœ λ‹› 및 μ°¨λŸ‰κ³Ό 같은 μ—¬λŸ¬ κ°€μ§€ λͺ¨λ“œ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ‹€λ₯Έ λͺ¨λ“œμ— λŒ€ν•œ 일뢀 좩돌 μœ ν‹Έλ¦¬ν‹°λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. - -[mod-setting-name] -walls-block-compensation=μ „νˆ¬ 밸런슀 보상 -spitter-spit-blockable=μŠ€ν”Όν„° μΉ¨ 차단 κ°€λŠ₯ -worm-spit-blockable=λ•…λ²Œλ ˆ μΉ¨ 차단 κ°€λŠ₯ -rockets-blockable=λ‘œμΌ“ 차단 κ°€λŠ₯ -pools-affect-structures=ꡬ쑰물에 영ν–₯을 μ£ΌλŠ” μ—°λͺ» μž₯판 -pools-affect-flying=비행에 영ν–₯을 μ£ΌλŠ” μ—°λͺ» μž₯판 -shotguns-hit-friendly=샷건이 μ•„κ΅°μ—κ²Œ ν”Όν•΄λ₯Ό 쀌 - -[mod-setting-description] -walls-block-compensation=μŠ€ν”Όν„°μ—κ²Œ μ•½κ°„μ˜ 버프λ₯Ό μ£Όμ–΄ κ·Έλ“€μ˜ λ°œμ‚¬μ²΄κ°€ μ°¨λ‹¨λ˜λŠ” 것을 λ³΄μ™„ν•΄μ€λ‹ˆλ‹€. -spitter-spit-blockable=μŠ€ν”Όν„° 침은 벽에 μ˜ν•΄ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν”Όν„°κ°€ λ°œμ‚¬μ²΄λ₯Ό 차단할 수 μžˆλŠ” 것에 침을 λ±‰κ²Œ λ§Œλ“­λ‹ˆλ‹€. λ§Œμ•½ ν•΄μ œν•˜λ©΄, μŠ€ν”Όν„°λ“€μ˜ 침은 λ²½ μœ„μ— 호λ₯Ό 그리며 λ„˜μ–΄κ°€λŠ” 흐름이 λ©λ‹ˆλ‹€. -worm-spit-blockable=λ•…λ²Œλ ˆ 침은 벽에 μ˜ν•΄ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€. λ•…λ²Œλ ˆκ°€ λ°œμ‚¬μ²΄λ₯Ό 차단할 수 μžˆλŠ” 것에 침을 λ±‰κ²Œ λ§Œλ“­λ‹ˆλ‹€. λ§Œμ•½ ν•΄μ œν•˜λ©΄, λ•…λ²Œλ ˆλ“€μ˜ 침은 λ²½ μœ„μ— 호λ₯Ό 그리며 λ„˜μ–΄κ°€λŠ” 흐름이 λ©λ‹ˆλ‹€. -rockets-blockable=λ‘œμΌ“μ΄ λ‚˜λ¬΄ 및 적의 λ²½κ³Ό μΆ©λŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. PvP에 μœ μš©ν•©λ‹ˆλ‹€. -pools-affect-structures=λ•…λ²Œλ ˆμ˜ μ‚°μ„± μž₯판과 같은 μ—°λͺ» μž₯판이 ꡬ쑰물에 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. -pools-affect-flying=λ•…λ²Œλ ˆμ˜ μ‚°μ„± μž₯판과 같은 μ—°λͺ» μž₯판이 λΉ„ν–‰ μœ λ‹›μ— 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€(뢀식성 증기). -shotguns-hit-friendly=ν™œμ„±ν™”λ  경우, 샷건 펠릿이 λ‚˜λ¬΄ μƒμžμ™€ 같은 μ•„κ΅° ꡬ쑰물에 λ§žμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. diff --git a/combat-mechanics-overhaul_0.6.24/locale/pt-BR/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/pt-BR/strings.cfg deleted file mode 100644 index 3ea36d9e..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/pt-BR/strings.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[mod-name] -combat-mechanics-overhaul=RevisΓ£o da MecΓ’nica de Combate - -[mod-description] -combat-mechanics-overhaul=Revisa certas mecΓ’nicas de combate e configuraΓ§Γ΅es de colisΓ£o. As paredes impedem que a maioria dos projΓ©teis inimigos atire sobre eles, como cuspidores e cartuchos de espingarda inimigos. Seus projΓ©teis ainda podem ultrapassar suas prΓ³prias paredes sem problemas. VeΓ­culos de unidades voadoras podem voar sobre paredes, mas ainda podem ser atingidos por projΓ©teis. As unidades e estruturas sΓ£o atribuΓ­das Γ s marcaΓ§Γ΅es biolΓ³gicas/mecΓ’nicas e de vΓ΄o/unidade terrestre/estΓ‘ticas do solo apropriadas para que possam ser afetadas ou imunes a certos efeitos. Tem vΓ‘rias opΓ§Γ΅es de mod, incluindo coisas como unidades voadoras e veΓ­culos para nΓ£o serem afetados por poΓ§as de Γ‘cido no solo. TambΓ©m fornece alguns utilitΓ‘rios de colisΓ£o para outros mods. - -[mod-setting-name] -walls-block-compensation=CompensaΓ§Γ£o de equilΓ­brio de combate -spitter-spit-blockable=Cuspe do cuspidor bloqueΓ‘vel -worm-spit-blockable=Cuspe do verme bloqueΓ‘vel -rockets-blockable=Foguetes bloqueΓ‘veis -pools-affect-structures=PoΓ§as afetam estruturas -pools-affect-flying=PoΓ§as afetam voadores -shotguns-hit-friendly=Acerto de Espingardas AmigΓ‘vel - -[mod-setting-description] -walls-block-compensation=DΓ‘ aos cuspidores alguns benefΓ­cios menores para compensar o bloqueio dos projΓ©teis. -spitter-spit-blockable=O cuspe de cuspidores pode ser bloqueado por paredes. Faz cuspidores cuspirem em projΓ©teis bloqueΓ‘veis. Se desativado, o cuspe de cuspidores Γ© um riacho que forma um arco sobre as paredes. -worm-spit-blockable=O cuspe de vermes pode ser bloqueado por paredes. Faz vermes cuspirem em projΓ©teis bloqueΓ‘veis. Se desativado, o cuspe de vermes Γ© um riacho que forma um arco sobre as paredes. -rockets-blockable=Foguetes podem colidir com Γ‘rvores e paredes inimigas. Bom para PvP. -pools-affect-structures=PoΓ§as, como poΓ§as de Γ‘cido de vermes, afetam as estruturas. -pools-affect-flying=PoΓ§as, como poΓ§as de Γ‘cido de vermes, afetam as unidades voadoras (vapores corrosivos). -shotguns-hit-friendly=Se habilitado, os projΓ©teis da espingarda podem atingir estruturas amigΓ‘veis, como baΓΊs de madeira. diff --git a/combat-mechanics-overhaul_0.6.24/locale/ru/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/ru/strings.cfg deleted file mode 100644 index 7d6755d8..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/ru/strings.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[mod-name] -combat-mechanics-overhaul=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ - -[mod-description] -combat-mechanics-overhaul=ΠŸΠ΅Ρ€Π΅ΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΎΠ΅Π²Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΈ настройки столкновСний. Π‘Ρ‚Π΅Π½Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎ Π½ΠΈΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° враТСских снарядов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ»Π΅Π²ΠΊΠΈ ΠΈ враТСскиС ΠΏΠ°Ρ‚Ρ€ΠΎΠ½Ρ‹ для Π΄Ρ€ΠΎΠ±ΠΎΠ²ΠΈΠΊΠ°. Π’Π°ΡˆΠΈ снаряды ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π²Π°Ρ‚ΡŒ собствСнныС стСны. Π›Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ транспортныС срСдства ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π°Π΄ стСнами, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€Π°ΠΆΠ΅Π½Ρ‹ снарядами. ΠΠ½ΠΈΡ‚Π°ΠΌ ΠΈ строСниям Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ биологичСскиС/мСханичСскиС ΠΈ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠ΅/Π½Π°Π·Π΅ΠΌΠ½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ эффСктами ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ нСвосприимчивы ΠΊ Π½ΠΈΠΌ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² настроСк, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ Π½Π΅Π²ΠΎΡΠΏΡ€ΠΈΠΈΠΌΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΡ… ΡŽΠ½ΠΈΡ‚ΠΎΠ² ΠΈ транспортных срСдств ΠΊ кислотным Π»ΡƒΠΆΠ°ΠΌ Π½Π° Π·Π΅ΠΌΠ»Π΅. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ΄ прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ². - -[mod-setting-name] -walls-block-compensation=ΠšΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡ Π±ΠΎΠ΅Π²ΠΎΠ³ΠΎ баланса -spitter-spit-blockable=Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ»Π΅Π²ΠΊΠΈ ΠΏΠ»Π΅Π²Π°ΠΊ -worm-spit-blockable=Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ»Π΅Π²ΠΊΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ -rockets-blockable=Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ -pools-affect-structures=Π›ΡƒΠΆΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° структуры -pools-affect-flying=Π›ΡƒΠΆΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΡ… -shotguns-hit-friendly=Π”Ρ€ΠΎΠ±ΠΎΠ²ΠΈΠΊ Π±ΡŒΡ‘Ρ‚ ΠΏΠΎ своим - -[mod-setting-description] -walls-block-compensation=Π”Π°Ρ‘Ρ‚ ΠΏΠ»Π΅Π²Π°ΠΊΠ°ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ усилСниС для компСнсации блокирования ΠΏΠ»Π΅Π²ΠΊΠΎΠ² стСнами. -spitter-spit-blockable=ПлСвок ΠΏΠ»Π΅Π²Π°ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ стСнами. ПлСвок ΠΏΠ»Π΅Π²Π°ΠΊΠΈ считаСтся Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ снарядом. Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΠ»Π΅Π²ΠΎΠΊ прСдставляСт собой ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π»Π΅Ρ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· стСны. -worm-spit-blockable=ПлСвок чСрвя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ стСнами. ПлСвок чСрвя считаСтся Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ снарядом. Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΠ»Π΅Π²ΠΎΠΊ прСдставляСт собой ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΡƒΠ³ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π»Π΅Ρ‚Π°Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· стСны. -rockets-blockable=Π Π°ΠΊΠ΅Ρ‚Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ ΠΈ враТСскими стСнами. Π₯ΠΎΡ€ΠΎΡˆΠΎ для PvP. -pools-affect-structures=Π›ΡƒΠΆΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ кислотныС Π»ΡƒΠΆΠΈ ΠΎΡ‚ Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° структуры. -pools-affect-flying=Π›ΡƒΠΆΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ кислотныС Π»ΡƒΠΆΠΈ ΠΎΡ‚ Ρ‡Π΅Ρ€Π²Π΅ΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° Π»Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ ΡŽΠ½ΠΈΡ‚Ρ‹ (Ρ€Π°Π·ΡŠΠ΅Π΄Π°ΡŽΡ‰Π΅Π΅ ΠΎΠ±Π»Π°ΠΊΠΎ). -shotguns-hit-friendly=Если Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, выстрСлы Π΄Ρ€ΠΎΠ±ΠΎΠ²ΠΈΠΊΠ° ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°ΡŽΡ‚ друТСствСнныС структуры, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, дСрСвянныС сундуки. diff --git a/combat-mechanics-overhaul_0.6.24/locale/zh-CN/strings.cfg b/combat-mechanics-overhaul_0.6.24/locale/zh-CN/strings.cfg deleted file mode 100644 index 2c253e44..00000000 --- a/combat-mechanics-overhaul_0.6.24/locale/zh-CN/strings.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[mod-setting-name] -walls-block-compensation=ζˆ˜ζ–—εΉ³θ‘‘θ‘₯偿 -worm-spit-blockable=θ™«ε­ε–·ει˜»ζŒ‘ -rockets-blockable=火η­ι˜»ζŒ‘ -pools-affect-structures=ζ± ε‘˜ε½±ε“η»“ζž„ -pools-affect-flying=ζ± ε‘˜ε½±ε“ι£žθ‘Œ - -[mod-setting-description] -walls-block-compensation=η»™δΊˆε–·εθ™«δΈ€δΊ›ε° Buff,δ»₯εΌ₯θ‘₯δ»–δ»¬ηš„εΌΉι“ε―δ»₯θ’«ι˜»ζŒ‘γ€‚ -worm-spit-blockable=θ™«ε­ηš„ε–·εε―δ»₯θ’«ε’™ε£ζŒ‘δ½γ€‚δ½Ώθ™«ε­ε–·εε˜ζˆε―ι˜»ζŒ‘ηš„εΌΉδΈΈγ€‚ε¦‚ζžœη¦η”¨ηš„θ―οΌŒι‚£δΉˆθ™«ε­ηš„ε–·εε°±δΌšε˜ζˆεΌ§ε½’ηš„θΆŠθΏ‡ε’™ε£γ€‚ -rockets-blockable=火η­ε―δ»₯δΈŽζ ‘ζœ¨ε’Œζ•ŒδΊΊηš„ε’™ε£η›Έζ’žγ€‚εΎˆι€‚εˆPvP。 -pools-affect-structures=ζ± ε‘˜οΌŒε¦‚θ™«ε­ε–·εη•™δΈ‹ηš„ι…ΈζΆ²ζ± οΌŒε½±ε“η»“ζž„γ€‚ -pools-affect-flying=ζ± ε‘˜οΌŒε¦‚θ™«ε­ε–·εη•™δΈ‹ηš„ι…ΈζΆ²ζ± οΌŒε½±ε“ι£žθ‘Œε•δ½οΌˆθ…θš€ζ€§ζ°”δ½“οΌ‰γ€‚ diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/data-util.lua b/combat-mechanics-overhaul_0.6.24/prototypes/data-util.lua deleted file mode 100644 index a0640912..00000000 --- a/combat-mechanics-overhaul_0.6.24/prototypes/data-util.lua +++ /dev/null @@ -1,8 +0,0 @@ -local data_util = {} - -function data_util.table_contains(table, check) - for k,v in pairs(table) do if v == check then return true end end - return false -end - -return data_util diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-named-collision-layers.lua b/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-named-collision-layers.lua deleted file mode 100644 index 96b98c3d..00000000 --- a/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-named-collision-layers.lua +++ /dev/null @@ -1,7 +0,0 @@ -local collision_mask_util_extended = require("__combat-mechanics-overhaul__/collision-mask-util-extended/data/collision-mask-util-extended") - -local flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") - -local projectile_layer = collision_mask_util_extended.get_make_named_collision_mask("projectile-layer") - -local vehicle_layer = collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer") diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-trigger-types.lua b/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-trigger-types.lua deleted file mode 100644 index a5f180a0..00000000 --- a/combat-mechanics-overhaul_0.6.24/prototypes/phase-1/init-trigger-types.lua +++ /dev/null @@ -1,88 +0,0 @@ -local data_util = require("prototypes/data-util") - -data:extend({ - { - type = "trigger-target-type", - name = "common", -- exists in base - }, - { - type = "trigger-target-type", - name = "ground-unit", -- exists in base, opposite of flying but can move, cars, player, etc. - }, - { - type = "trigger-target-type", - name = "ground-static", -- opposite of flying but can't move, turrets, walls, etc. - }, - { - type = "trigger-target-type", - name = "rock", -- rocks - }, - { - type = "trigger-target-type", - name = "tree", -- trees - }, - { - type = "trigger-target-type", - name = "flying", -- flying vehicles, units, characters, combat robots, logistic robots, - }, - { - type = "trigger-target-type", - name = "biological", -- trees, characters, biters, spawners, worms, cyborgs - }, - { - type = "trigger-target-type", - name = "mechanical", -- vehicles, turrets, robots, etc - } -}) - -for _, prototype in pairs(data.raw.unit) do - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if string.find(prototype.name, "biter", 1, true) or string.find(prototype.name, "spitter", 1, true) then - if not data_util.table_contains(prototype.trigger_target_mask, "biological") then - table.insert(prototype.trigger_target_mask, "biological") - end - else - if not data_util.table_contains(prototype.trigger_target_mask, "biological") then - table.insert(prototype.trigger_target_mask, "mechanical") - end - end -end - -for _, prototype in pairs(data.raw.fire) do - if string.find(prototype.name, "acid-splash", 1, true) then - prototype.trigger_target_mask = {"ground-unit", "rock", "tree"} - if settings.startup["pools-affect-structures"].value then - table.insert(prototype.trigger_target_mask, "ground-static") - end - if settings.startup["pools-affect-flying"].value then - table.insert(prototype.on_damage_tick_effect.trigger_target_mask, "flying") - log("Pools affect flying " .._) - end - prototype.force_condition = "not-same" -- affect rocks trees - end -end - -local function trigger_target_defaults_add(type_name, additions) - additions = type(additions) == "table" and additions or {additions} - data.raw["utility-constants"].default.default_trigger_target_mask_by_type[type_name] = - data.raw["utility-constants"].default.default_trigger_target_mask_by_type[type_name] or {} - local defaults = data.raw["utility-constants"].default.default_trigger_target_mask_by_type[type_name] - for _, addition in pairs(additions) do - if not data_util.table_contains(defaults, addition) then - table.insert(defaults, addition) - end - end -end - -trigger_target_defaults_add("character", {"common", "ground-unit", "biological"}) -trigger_target_defaults_add("car", {"common", "ground-unit", "mechanical"}) -trigger_target_defaults_add("unit", {"common", "ground-unit", "mechanical"}) -trigger_target_defaults_add("combat-robot", {"common", "flying", "mechanical"}) -trigger_target_defaults_add("logistic-robot", {"common", "flying", "mechanical"}) -trigger_target_defaults_add("construction-robot", {"common", "flying", "mechanical"}) -trigger_target_defaults_add("turret", {"common", "ground-static", "biological"}) -trigger_target_defaults_add("ammo-turret", {"common", "ground-static", "mechanical"}) -trigger_target_defaults_add("electric-turret", {"common", "ground-static", "mechanical"}) -trigger_target_defaults_add("fluid-turret", {"common", "ground-static", "mechanical"}) -trigger_target_defaults_add("artillery-turret", {"common", "ground-static", "mechanical"}) -trigger_target_defaults_add("wall", {"common", "ground-static"}) diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-trigger-types.lua b/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-trigger-types.lua deleted file mode 100644 index 1c14e1c5..00000000 --- a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/collision-trigger-types.lua +++ /dev/null @@ -1,279 +0,0 @@ ---[[ -TODO: can't seem to make spider-vehicle collide with projectiles. -]] - --- This layer is used to make certain projectiles collide with not-friend walls. --- If you have a mod with similar functionality you are encoureaged to use the same layer. ---use force_condition = "not-friend" or "not-same" on the projectile. -local data_util = require("prototypes/data-util") - --- get a collision layer by name, if the name is not assigned to a layer it will assign one -local flying_layer = collision_mask_util_extended.get_make_named_collision_mask("flying-layer") -local projectile_layer = collision_mask_util_extended.get_make_named_collision_mask("projectile-layer") -local vehicle_layer = collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer") - -local suffix = "-blockable" - -local function add_collision_to_entity(prototype, projectile_layer) - prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) - collision_mask_util_extended.add_layer(prototype.collision_mask, projectile_layer) -end - -local function make_unit_projectile_blockable (unit) - if unit.attack_parameters.ammo_type - and unit.attack_parameters.ammo_type.action - and unit.attack_parameters.ammo_type.action.action_delivery - and unit.attack_parameters.ammo_type.action.action_delivery.type - and unit.attack_parameters.ammo_type.action.action_delivery.type == "projectile" then - - unit.attack_parameters.ammo_type.target_type = "position" - local projectile_name = unit.attack_parameters.ammo_type.action.action_delivery.projectile - local projectile = data.raw.projectile[projectile_name] - if projectile then - projectile.collision_box = projectile.collision_box or { { -0.05, -0.25 }, { 0.05, 0.25 } } - projectile.hit_collision_mask = {projectile_layer, flying_layer, "player-layer", "train-layer", "not-colliding-with-itself"} - projectile.force_condition = "not-friend" - end - end -end - -local function make_unit_projectile_from_stream (unit) - if unit.attack_parameters.ammo_type - and unit.attack_parameters.ammo_type.action - and unit.attack_parameters.ammo_type.action.action_delivery - and unit.attack_parameters.ammo_type.action.action_delivery.type - and unit.attack_parameters.ammo_type.action.action_delivery.type == "stream" then - - unit.attack_parameters.type = "projectile" - unit.attack_parameters.ammo_type.target_type = "position" - - -- do the stuff - local stream_name = unit.attack_parameters.ammo_type.action.action_delivery.stream - local projectile_name = stream_name .. "-blockable" - unit.attack_parameters.ammo_type.action.action_delivery = { - max_range = unit.attack_parameters.ammo_type.action.action_delivery.max_range or ((unit.attack_parameters.range or 16 ) * 1.5), - projectile = projectile_name, - starting_speed = unit.attack_parameters.ammo_type.action.action_delivery.starting_speed or 0.5, - type = "projectile" - } - - local stream_prototype = data.raw.stream[stream_name] - local projectile = { - acceleration = 0.005, - action = table.deepcopy(stream_prototype.initial_action), - animation = stream_prototype.particle, - collision_box = { { -0.05, -0.25 }, { 0.05, 0.25 } }, - hit_collision_mask = {projectile_layer, flying_layer, "player-layer", "train-layer", "not-colliding-with-itself"}, - force_condition = "not-friend", --don't hit trees, trees are like the biters walls "not-same", - direction_only = false, - flags = { "not-on-map" }, - name = projectile_name, - rotatable = true, - shadow = stream_prototype.shadow, - type = "projectile" - } - if projectile.action then - for _, action in pairs(projectile.action) do - if action.force == "enemy" then - action.force = "not-same" -- allow damage to rocks and trees if they are the direct target - end - end - end - - data:extend({projectile}) - end - -end - -for _, prototype in pairs(data.raw.projectile) do - if not prototype.cmo_ignore then - if (not prototype.collision_box) and ( - not ( - string.find(prototype.name, "atomic-bomb", 1, true) - or string.find(prototype.name, "antimatter-bomb", 1, true) -- Krastorio 2 compatibility - or string.find(prototype.name, "artillery", 1, true) - ) - ) and ( - (settings.startup["rockets-blockable"].value and string.find(prototype.name, "rocket", 1, true)) - or string.find(prototype.name, "bomb", 1, true) - or string.find(prototype.name, "shell", 1, true) - ) then - prototype.collision_box = { { -0.05, -0.25 }, { 0.05, 0.25 } } - end - if prototype.collision_box and not prototype.hit_collision_mask then - prototype.hit_collision_mask = collision_mask_util_extended.get_default_hit_mask("projectile") - end - if prototype.hit_collision_mask then - if ( string.find(prototype.name, "bomb", 1, true) - or string.find(prototype.name, "rocket", 1, true) - --or string.find(prototype.name, "pellet", 1, true) - or string.find(prototype.name, "shell", 1, true) - or string.find(prototype.name, "bullet", 1, true) - or string.find(prototype.name, "round", 1, true) - or string.find(prototype.name, "-ammo", 1, true) - or string.find(prototype.name, "magazine", 1, true) - or string.find(prototype.name, "cannon", 1, true) - ) and (not string.find(prototype.name, "shockwave", 1, true)) then - prototype.force_condition = "not-same" -- allow to hit rocks - end - - if not settings.startup["shotguns-hit-friendly"].value - and string.find(prototype.name, "pellet", 1, true) then - prototype.force_condition = "not-same" -- allow to hit rocks - end - - if data_util.table_contains(prototype.hit_collision_mask, "player-layer") then -- allow hitting trees too - table.insert(prototype.hit_collision_mask, vehicle_layer) - end - - if not data_util.table_contains(prototype.hit_collision_mask, projectile_layer) then - table.insert(prototype.hit_collision_mask, projectile_layer) - end - if not data_util.table_contains(prototype.hit_collision_mask, flying_layer) then - table.insert(prototype.hit_collision_mask, flying_layer) - end - if not data_util.table_contains(prototype.hit_collision_mask, "not-colliding-with-itself") then - table.insert(prototype.hit_collision_mask, "not-colliding-with-itself") - end - end - end -end - --- setup trigger type -for _, type in pairs({"accumulator", "arithmetic-combinator", "turret", "electric-turret", "fluid-turret", "unit-spawner", "artillery-turret", "assembling-machine", - "beacon", "boiler", "burner-generator","constant-combinator","container","curved-rail","decider-combinator","electric-energy-interface","electric-pole", - "furnace","gate","generator","heat-interface","heat-pipe", "infinity-container","infinity-pipe","inserter", "lab", "lamp", "land-mine", "loader", "loader-1x1", - "logistic-container", "market", "mining-drill", "offshore-pump", "pipe", "pipe-to-ground", "player-port", "power-switch", "programmable-speaker", "pump", - "rail-chain-signal", "rail-signal", "reactor", "roboport", "rocket-silo", "simple-entity", "simple-entity-with-force", "simple-entity-with-owner", "solar-panel", - "splitter", "storage-tank", "straight-rail", "train-stop", "transport-belt", "tree", "underground-belt", "wall" -}) do - for _, prototype in pairs(data.raw[type]) do - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "ground-static") then - table.insert(prototype.trigger_target_mask, "ground-static") - end - end -end - --- make vehicles collide with trees and pipes (train-layer) --- stop characters colliding with pipes (player-layer) -for _, type in pairs({"pipe", "pipe-to-ground"}) do - for _, prototype in pairs(data.raw[type]) do - prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) - collision_mask_util_extended.remove_layer(prototype.collision_mask, "player-layer") - collision_mask_util_extended.add_layer(prototype.collision_mask, collision_mask_util_extended.get_make_named_collision_mask("vehicle-layer")) - end -end - --- make projectiles hit -for _, type in pairs({"wall", "ammo-turret", "turret", "electric-turret", "fluid-turret", "unit-spawner", "artillery-turret", - }) do - for _, prototype in pairs(data.raw[type]) do - add_collision_to_entity(prototype, projectile_layer) - end -end - -for _, prototype in pairs(data.raw.tree) do - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "ground-static") then - table.insert(prototype.trigger_target_mask, "ground-static") - end - if string.find(prototype.name, "tree", 1, true) then - add_collision_to_entity(prototype, projectile_layer) - if not data_util.table_contains(prototype.trigger_target_mask, "tree") then - table.insert(prototype.trigger_target_mask, "tree") - end - end -end -for _, prototype in pairs(data.raw["simple-entity"]) do - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "ground-static") then - table.insert(prototype.trigger_target_mask, "ground-static") - end - if string.find(prototype.name, "rock", 1, true) then - add_collision_to_entity(prototype, projectile_layer) - if not data_util.table_contains(prototype.trigger_target_mask, "rock") then - table.insert(prototype.trigger_target_mask, "rock") - end - end -end - --- also assign corect trigger-target type - -for _, type in pairs({"car", "character", "unit", "spider-vehicle", "combat-robot", "logistic-robot", "construction-robot", - "artillery-wagon", "cargo-wagon", "fluid-wagon", "locomotive", "fish"}) do - for _, prototype in pairs(data.raw[type]) do - prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) - if collision_mask_util_extended.is_mask_empty(prototype.collision_mask) or data_util.table_contains(prototype.collision_mask, flying_layer) then - -- this appears to be a flying thing - prototype.collision_mask = prototype.collision_mask or {flying_layer} - table.insert(prototype.collision_mask, "not-colliding-with-itself") - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if type == "spider-vehicle" then - if not data_util.table_contains(prototype.trigger_target_mask, "ground-unit") then - table.insert(prototype.trigger_target_mask, "ground-unit") - end - else - if not data_util.table_contains(prototype.trigger_target_mask, "flying") then - table.insert(prototype.trigger_target_mask, "flying") - end - end - else - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "ground-unit") then - table.insert(prototype.trigger_target_mask, "ground-unit") - end - end - end -end - -for _, type in pairs({"character", "unit"}) do - for _, prototype in pairs(data.raw[type]) do - if not string.find(prototype.name, "proxy", 1, true) then -- proxy = fake player? - prototype.collision_mask = collision_mask_util_extended.get_mask(prototype) - if collision_mask_util_extended.is_mask_empty(prototype.collision_mask) or data_util.table_contains(prototype.collision_mask, flying_layer) then - -- this appears to be a flying thing - prototype.collision_mask = {flying_layer, "not-colliding-with-itself"} - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "flying") then - table.insert(prototype.trigger_target_mask, "flying") - end - else - --add_collision_to_entity(prototype, "player-layer") -- not relaly needed? - prototype.trigger_target_mask = prototype.trigger_target_mask or {} - if not data_util.table_contains(prototype.trigger_target_mask, "ground-unit") then - table.insert(prototype.trigger_target_mask, "ground-unit") - end - end - end - end -end - --- biters -for _, unit in pairs(data.raw.unit) do - if string.find(unit.name, "spitter", 1, true) then - if unit.attack_parameters and settings.startup["spitter-spit-blockable"].value then - unit.attack_parameters.min_attack_distance = nil - if unit.attack_parameters.cooldown then - unit.attack_parameters.cooldown = unit.attack_parameters.cooldown * 0.75 - end - if unit.attack_parameters.warmup then - unit.attack_parameters.warmup = unit.attack_parameters.warmup * 0.75 - end - make_unit_projectile_blockable(unit) - make_unit_projectile_from_stream(unit) - end - end -end - --- turrets -for _, turret in pairs(data.raw.turret) do - if string.find(turret.name, "worm", 1, true) then - if settings.startup["worm-spit-blockable"].value then - make_unit_projectile_blockable(turret) - make_unit_projectile_from_stream(turret) - end - end -end - -collision_mask_util_extended.named_collision_mask_integrity_check() diff --git a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/gameplay.lua b/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/gameplay.lua deleted file mode 100644 index 1679d963..00000000 --- a/combat-mechanics-overhaul_0.6.24/prototypes/phase-3/gameplay.lua +++ /dev/null @@ -1,53 +0,0 @@ -local unit_speed = settings.startup["unit-speed"].value / 100 -local unit_health = settings.startup["unit-health"].value / 100 -local unit_range = settings.startup["unit-range"].value / 100 -local worm_health = settings.startup["worm-health"].value / 100 -local worm_range = settings.startup["worm-range"].value / 100 -local spawner_health = settings.startup["spawner-health"].value / 100 - --- biters -for _, unit in pairs(data.raw.unit) do - if string.find(unit.name, "biter", 1, true) then - if unit.movement_speed then - unit.movement_speed = unit.movement_speed * unit_speed - end - if unit.max_health and unit.max_health > 0 then - unit.max_health = math.ceil(unit.max_health * unit_health) - end - elseif string.find(unit.name, "spitter", 1, true) then - if unit.movement_speed then - unit.movement_speed = unit.movement_speed * unit_speed - end - if unit.max_health and unit.max_health > 0 then - unit.max_health = math.ceil(unit.max_health * unit_health) - end - if unit.attack_parameters then - unit.attack_parameters.range = unit.attack_parameters.range * unit_range - end - end -end - --- turrets -for _, turret in pairs(data.raw.turret) do - if string.find(turret.name, "worm", 1, true) then - if turret.max_health and turret.max_health > 0 then - turret.max_health = math.ceil(turret.max_health * worm_health) - end - if turret.attack_parameters and turret.attack_parameters.range then - turret.attack_parameters.range = turret.attack_parameters.range * worm_range - turret.attack_parameters.prepare_range = math.max( - (turret.attack_parameters.prepare_range or 0) * worm_range, - turret.attack_parameters.range * 1.1 + 5 - ) - end - end -end - --- spawners -for _, spawner in pairs(data.raw["unit-spawner"]) do - if string.find(spawner.name, "spawner", 1, true) then - if spawner.max_health and spawner.max_health > 0 then - spawner.max_health = math.ceil(spawner.max_health * spawner_health) - end - end -end diff --git a/combat-mechanics-overhaul_0.6.24/scripts/util.lua b/combat-mechanics-overhaul_0.6.24/scripts/util.lua deleted file mode 100644 index 875186f3..00000000 --- a/combat-mechanics-overhaul_0.6.24/scripts/util.lua +++ /dev/null @@ -1,630 +0,0 @@ -local util = {} - -util.min = math.min -util.max = math.max -util.floor = math.floor -util.abs = math.abs -util.sqrt = math.sqrt -util.sin = math.sin -util.cos = math.cos -util.atan = math.atan -util.atan2 = math.atan2 -util.pi = math.pi -util.remove = table.remove -util.insert = table.insert -util.str_gsub = string.gsub - - -function util.deep_copy (t) - return table.deepcopy(t) -end - -function util.shallow_copy (t) -- shallow-copy a table - if type(t) ~= "table" then return t end - local meta = getmetatable(t) - local target = {} - for k, v in pairs(t) do target[k] = v end - setmetatable(target, meta) - return target -end - -function util.remove_from_table(list, item) - local index = 0 - for _,_item in ipairs(list) do - if item == _item then - index = _ - break - end - end - if index > 0 then - util.remove(list, index) - end -end - -function util.shuffle (tbl) - size = #tbl - for i = size, 1, -1 do - --local rand = 1 + math.floor(size * (math.random() - 0.0000001)) - local rand = math.random(size) - tbl[i], tbl[rand] = tbl[rand], tbl[i] - end - return tbl -end - -function util.random_from_array (tbl) - --return tbl[1 + math.floor(#tbl * (math.random() - 0.0000001))] - return tbl[math.random(#tbl)] -end - -function util.area_add_position(area, position) - local area2 = table.deepcopy(area) - for k1, v1 in pairs(area2) do - for k2, v2 in pairs(v1) do - if k2 == 1 or k2 == "x" then - v1[k2] = v2 + (position.x or position[1]) - elseif k2 == 2 or k2 == "y" then - v1[k2] = v2 + (position.y or position[2]) - end - end - end - return area2 -end - -function util.area_extend(area, range) - local area2 = table.deepcopy(area) - for k1, v1 in pairs(area2) do - local m = 1 - if k1 == 1 or k1 == "left_top" then - m = -1 - end - for k2, v2 in pairs(v1) do - v1[k2] = v2 + range * m - end - end - return area2 -end - -function util.position_to_area(position, radius) - return {{x = position.x - radius, y = position.y - radius}, - {x = position.x + radius, y = position.y + radius}} -end - -function util.position_to_tile(position) - return {x = math.floor(position.x or position[1]), y = math.floor(position.y or position[2])} -end - -function util.tile_to_position(tile_position) - return {x = math.floor(tile_position.x)+0.5, y = math.floor(tile_position.y)+0.5} -end - -function util.tile_to_area(tile_position, margin) - tile_position = {x = math.floor(tile_position.x or tile_position[1]), y = math.floor(tile_position.y or tile_position[2])} - margin = margin or 0.01 - return { - {tile_position.x+margin, tile_position.y+margin}, - {tile_position.x+1-margin, tile_position.y+1-margin} - } -end - -function util.position_to_xy_string(position) - return util.xy_to_string(position.x, position.y) -end - -function util.xy_to_string(x, y) - return util.floor(x) .. "_" .. util.floor(y) -end - -function util.lerp(a, b, alpha) - return a + (b - a) * alpha -end - -function util.lerp_angles(a, b, alpha) - local da = b - a - - if da < -0.5 then - da = da + 1 - elseif da > 0.5 then - da = da - 1 - end - local na = a + da * alpha - if na < 0 then - na = na + 1 - elseif na > 1 then - na = na - 1 - end - return na -end - -function util.array_to_vector(array) - return {x = array[1], y = array[2]} -end - -function util.vectors_delta(a, b) -- from a to b - if not a and b then return 0 end - return {x = b.x - a.x, y = b.y - a.y} -end - -function util.vectors_delta_length(a, b) - return util.vector_length_xy(b.x - a.x, b.y - a.y) -end - -function util.vector_length(a) - return util.sqrt(a.x * a.x + a.y * a.y) -end - -function util.vector_length_xy(x, y) - return util.sqrt(x * x + y * y) -end - -function util.vector_dot(a, b) - return a.x * b.x + a.y * b.y -end - -function util.vector_multiply(a, multiplier) - return {x = a.x * multiplier, y = a.y * multiplier} -end - -function util.vector_dot_projection(a, b) - local n = util.vector_normalise(a) - local d = util.vector_dot(n, b) - return {x = n.x * d, y = n.y * d} -end - -function util.vector_normalise(a) - local length = util.vector_length(a) - return {x = a.x/length, y = a.y/length} -end - -function util.vector_set_length(a, length) - local old_length = util.vector_length(a) - if old_length == 0 then return {x = 0, y = -length} end - return {x = a.x/old_length*length, y = a.y/old_length*length} -end - -function util.vector_cross(a, b) - -- N = i(a2b3 - a3b2) + j(a3b1 - a1b3) + k(a1b2 - a2b1) - return { - x = (a.y or a[2]) * (b.z or b[3]) - (a.z or a[3]) * (b.y or b[2]), - y = (a.z or a[3]) * (b.x or b[1]) - (a.x or a[1]) * (b.z or b[3]), - z = (a.x or a[1]) * (b.y or b[2]) - (a.y or a[2]) * (b.x or b[1]), - } -end - -function util.orientation_from_to(a, b) - return util.vector_to_orientation_xy(b.x - a.x, b.y - a.y) -end - -function util.orientation_to_vector(orientation, length) - return {x = length * util.sin(orientation * 2 * util.pi), y = -length * util.cos(orientation * 2 * util.pi)} -end - -function util.rotate_vector(orientation, a) - if orientation == 0 then - return {x = a.x, y = a.y} - else - return { - x = -a.y * util.sin(orientation * 2 * util.pi) + a.x * util.sin((orientation + 0.25) * 2 * util.pi), - y = a.y * util.cos(orientation * 2 * util.pi) -a.x * util.cos((orientation + 0.25) * 2 * util.pi)} - - end -end - -function util.vectors_add(a, b) - return {x = a.x + b.x, y = a.y + b.y} -end - -function util.vectors_add3(a, b, c) - return {x = a.x + b.x + c.x, y = a.y + b.y + c.y} -end - -function util.lerp_vectors(a, b, alpha) - return {x = a.x + (b.x - a.x) * alpha, y = a.y + (b.y - a.y) * alpha} -end - -function util.move_to(a, b, max_distance, eliptical) - -- move from a to b with max_distance. - -- if eliptical, reduce y change (i.e. turret muzzle flash offset) - local eliptical_scale = 0.9 - local delta = util.vectors_delta(a, b) - if eliptical then - delta.y = delta.y / eliptical_scale - end - local length = util.vector_length(delta) - if (length > max_distance) then - local partial = max_distance / length - delta = {x = delta.x * partial, y = delta.y * partial} - end - if eliptical then - delta.y = delta.y * eliptical_scale - end - return {x = a.x + delta.x, y = a.y + delta.y} -end - -function util.vector_to_orientation(v) - return util.vector_to_orientation_xy(v.x, v.y) -end - -function util.vector_to_orientation_xy(x, y) - return util.atan2(y, x) / util.pi / 2 -end - -function util.direction_to_orientation(direction) - if direction == defines.direction.north then - return 0 - elseif direction == defines.direction.northeast then - return 0.125 - elseif direction == defines.direction.east then - return 0.25 - elseif direction == defines.direction.southeast then - return 0.375 - elseif direction == defines.direction.south then - return 0.5 - elseif direction == defines.direction.southwest then - return 0.625 - elseif direction == defines.direction.west then - return 0.75 - elseif direction == defines.direction.northwest then - return 0.875 - end - return 0 -end - -function util.direction_to_string(direction) - if direction == defines.direction.north then - return "north" - elseif direction == defines.direction.northeast then - return "northeast" - elseif direction == defines.direction.east then - return "east" - elseif direction == defines.direction.southeast then - return "southeast" - elseif direction == defines.direction.south then - return "south" - elseif direction == defines.direction.southwest then - return "southwest" - elseif direction == defines.direction.west then - return "west" - elseif direction == defines.direction.northwest then - return "northwest" - end - return 0 -end - -function util.signal_to_string(signal) - return signal.type .. "__" .. signal.name -end - -function util.signal_container_add(container, signal, count) - if signal then - if not container[signal.type] then - container[signal.type] = {} - end - if container[signal.type][signal.name] then - container[signal.type][signal.name].count = container[signal.type][signal.name].count + count - else - container[signal.type][signal.name] = {signal = signal, count = count} - end - end -end - -function util.signal_container_add_inventory(container, entity, inventory) - local inv = entity.get_inventory(inventory) - if inv then - local contents = inv.get_contents() - for item_type, item_count in pairs(contents) do - util.signal_container_add(container, {type="item", name=item_type}, item_count) - end - end -end - -function util.signal_container_get(container, signal) - if container[signal.type] and container[signal.type][signal.name] then - return container[signal.type][signal.name] - end -end - -function util.signal_from_wires(red, green, signal) - local value = 0 - if red then value = value + red.get_signal(signal) or 0 end - if green then value = value + green.get_signal(signal) or 0 end - return value -end - -util.char_to_multiplier = { - m = 0.001, - c = 0.01, - d = 0.1, - h = 100, - k = 1000, - M = 1000000, - G = 1000000000, - T = 1000000000000, - P = 1000000000000000, -} - -function util.string_to_number(str) - str = ""..str - local number_string = "" - local last_char = nil - for i = 1, #str do - local c = str:sub(i,i) - if c == "." or (c == "-" and i == 1) or tonumber(c) ~= nil then - number_string = number_string .. c - else - last_char = c - break - end - end - if last_char and util.char_to_multiplier[last_char] then - return tonumber(number_string) * util.char_to_multiplier[last_char] - end - return tonumber(number_string) -end - -function util.replace(str, what, with) - what = util.str_gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern - with = util.str_gsub(with, "[%%]", "%%%%") -- escape replacement - str = util.str_gsub(str, what, with) - return str --only return the first variable from str_gsub -end - -function util.split(s, delimiter) - result = {}; - for match in (s..delimiter):gmatch("(.-)"..delimiter) do - table.insert(result, match); - end - return result; -end - -function util.parse_with_prefix(s, prefix) - if string.sub(s, 1, string.len(prefix)) == prefix then - return string.sub(s, string.len(prefix)+1) - end -end - -function util.overwrite_table(table_weak, table_strong) - for k,v in pairs(table_strong) do table_weak[k] = v end - return table_weak -end - -function util.table_contains(table, check) - for k,v in pairs(table) do if v == check then return true end end - return false -end - -function util.table_to_string(table) - return serpent.block( table, {comment = false, numformat = '%1.8g' } ) -end - -function util.values_to_string(table) - local string = "" - for _, value in pairs(table) do - string = ((string == "") and "" or ", ") .. string .. value - end - return string -end - -function util.math_log(value, base) - --logb(a) = logc(a) / logc(b) - return math.log(value)/math.log(base) -end - -function util.seconds_to_clock(seconds, use_days) - local seconds = tonumber(seconds) - - if seconds <= 0 then - return "0"; - else - local days = 0 - if use_days then days = math.floor(seconds/3600/24) end - local hours = math.floor(seconds/3600 - days*24) - local mins = math.floor(seconds/60 - hours*60 - days*1440) - local secs = math.floor(seconds - mins *60 - hours*3600 - days*86400) - local s_hours = string.format("%02.f",hours); - local s_mins = string.format("%02.f", mins); - local s_secs = string.format("%02.f", secs); - if days > 0 then - return days.."d:"..s_hours..":"..s_mins..":"..s_secs - end - if hours > 0 then - return s_hours..":"..s_mins..":"..s_secs - end - if mins > 0 then - return s_mins..":"..s_secs - end - if secs == 0 then - return "0" - end - return s_secs - end -end - -function util.to_rail_grid(number_or_position) - if type(number_or_position) == "table" then - return {x = util.to_rail_grid(number_or_position.x), y = util.to_rail_grid(number_or_position.y)} - end - return math.floor(number_or_position / 2) * 2 -end - -function util.format_fuel(fuel, ceil) - return string.format("%.2f",(fuel or 0) / 1000).."k" -end - -function util.format_energy(fuel, ceil) - if ceil then - return math.ceil((fuel or 0) / 1000000000).."GJ" - else - return math.floor((fuel or 0) / 1000000000).."GJ" - end -end - -function util.direction_to_vector (direction) - if direction == defines.direction.east then return {x=1,y=0} end - if direction == defines.direction.north then return {x=0,y=-1} end - if direction == defines.direction.northeast then return {x=1,y=-1} end - if direction == defines.direction.northwest then return {x=-1,y=-1} end - if direction == defines.direction.south then return {x=0,y=1} end - if direction == defines.direction.southeast then return {x=1,y=1} end - if direction == defines.direction.southwest then return {x=-1,y=1} end - if direction == defines.direction.west then return {x=-1,y=0} end -end - -function util.sign(x) - if x<0 then - return -1 - elseif x>0 then - return 1 - else - return 0 - end -end - -function util.find_first_descendant_by_name(gui_element, name) - for _, child in pairs(gui_element.children) do - if child.name == name then - return child - end - local found = util.find_first_descendant_by_name(child, name) - if found then return found end - end -end - -function util.find_descendants_by_name(gui_element, name, all_found) - local found = all_found or {} - for _, child in pairs(gui_element.children)do - if child.name == name then - table.insert(found, child) - end - util.find_descendants_by_name(child, name, found) - end - return found -end - -function util.find_damage_types_from_trigger_items(trigger_items) - local damage_types = {} - for _, trigger_item in pairs(trigger_items) do - if trigger_item.action_delivery then - for _, action_delivery in pairs(trigger_item.action_delivery) do - if action_delivery.target_effects then --action_delivery.type == "instant" - for _, target_effect in pairs(action_delivery.target_effects) do - if target_effect.type == "damage" and target_effect.damage and target_effect.damage.type then - damage_types[target_effect.damage.type] = true - end - end - end - --"instant", "projectile", "flame-thrower", "beam", "stream", "artillery". - local beam_or_projectile - if action_delivery.beam then - beam_or_projectile = game.entity_prototypes[action_delivery.beam] - end - if action_delivery.projectile then - beam_or_projectile = game.entity_prototypes[action_delivery.projectile] - end - if beam_or_projectile then - if beam_or_projectile.attack_result then - local damage_types_2 = util.find_damage_types_from_trigger_items(beam_or_projectile.attack_result) - for damage_type, b in pairs(damage_types_2) do - damage_types[damage_type] = true - end - end - if beam_or_projectile.final_attack_result then - local damage_types_2 = util.find_damage_types_from_trigger_items(beam_or_projectile.final_attack_result) - for damage_type, b in pairs(damage_types_2) do - damage_types[damage_type] = true - end - end - end - end - end - end - return damage_types -end - -function util.separate_points(positions, separation, max_iterations) - positions = table.deepcopy(positions) - --if true then return positions end - if not max_iterations then max_iterations = 20 end - local overshoot = 1.05 -- increse slightly to allow early finish - local i = 1 - local continue = true - while i <= max_iterations and continue do - i = i + 1 - continue = false - local forces = {} - for a, pos_a in pairs(positions) do - for b, pos_b in pairs(positions) do - if a ~= b then - local delta = Util.vectors_delta(pos_a, pos_b) - local length = Util.vector_length(delta) - if length < separation then - local force = Util.vector_set_length(delta, (separation - length) / 2) - if forces[a] then - forces[a].x = forces[a].x + force.x - forces[a].y = forces[a].y + force.y - else - forces[a] = force - end - end - end - end - end - for a, pos_a in pairs(positions) do - local force = forces[a] - if force then - local length = Util.vector_length(force) - if length > separation / 2 then - force = Util.vector_set_length(force, separation / 2) - end - pos_a.x = pos_a.x - force.x * overshoot - pos_a.y = pos_a.y - force.y * overshoot - continue = true - end - end - end - return positions -end - -function util.safe_destroy(entity) - if not entity.valid then return end - if entity.type == "linked-container" then - entity.link_id = 0 - entity.destroy() - else - entity.destroy() - end -end - -function util.HSVToRGB( hue, saturation, value ) - --https://gist.github.com/GigsD4X/8513963 - -- Returns the RGB equivalent of the given HSV-defined color - -- (adapted from some code found around the web) - - -- If it's achromatic, just return the value - if saturation == 0 then - return value; - end; - - -- Get the hue sector - local hue_sector = math.floor( hue / 60 ); - local hue_sector_offset = ( hue / 60 ) - hue_sector; - - local p = value * ( 1 - saturation ); - local q = value * ( 1 - saturation * hue_sector_offset ); - local t = value * ( 1 - saturation * ( 1 - hue_sector_offset ) ); - - if hue_sector == 0 then - return value, t, p; - elseif hue_sector == 1 then - return q, value, p; - elseif hue_sector == 2 then - return p, value, t; - elseif hue_sector == 3 then - return p, q, value; - elseif hue_sector == 4 then - return t, p, value; - elseif hue_sector == 5 then - return value, p, q; - end; -end; - -return util diff --git a/combat-mechanics-overhaul_0.6.24/settings.lua b/combat-mechanics-overhaul_0.6.24/settings.lua deleted file mode 100644 index ea3d1d3f..00000000 --- a/combat-mechanics-overhaul_0.6.24/settings.lua +++ /dev/null @@ -1,92 +0,0 @@ -data:extend{ - { - type = "bool-setting", - name = "spitter-spit-blockable", - setting_type = "startup", - default_value = true, - order = "a" - }, - { - type = "bool-setting", - name = "worm-spit-blockable", - setting_type = "startup", - default_value = true, - order = "b" - }, - { - type = "bool-setting", - name = "rockets-blockable", - setting_type = "startup", - default_value = true, - order = "c" - }, - { - type = "bool-setting", - name = "pools-affect-structures", - setting_type = "startup", - default_value = false, - order = "d" - }, - { - type = "bool-setting", - name = "pools-affect-flying", - setting_type = "startup", - default_value = false, - order = "e" - }, - { - type = "bool-setting", - name = "shotguns-hit-friendly", - setting_type = "startup", - default_value = false, - order = "f" - }, - { - type = "int-setting", - name = "unit-speed", - setting_type = "startup", - default_value = 120, - minimum_value = 50, - order = "g" - }, - { - type = "int-setting", - name = "unit-health", - setting_type = "startup", - default_value = 150, - minimum_value = 50, - order = "h" - }, - { - type = "int-setting", - name = "unit-range", - setting_type = "startup", - default_value = 105, - minimum_value = 100, - order = "i" - }, - { - type = "int-setting", - name = "worm-health", - setting_type = "startup", - default_value = 150, - minimum_value = 50, - order = "j" - }, - { - type = "int-setting", - name = "worm-range", - setting_type = "startup", - default_value = 110, - minimum_value = 50, - order = "k" - }, - { - type = "int-setting", - name = "spawner-health", - setting_type = "startup", - default_value = 100, - minimum_value = 50, - order = "l" - }, -} diff --git a/combat-mechanics-overhaul_0.6.24/thumbnail.png b/combat-mechanics-overhaul_0.6.24/thumbnail.png deleted file mode 100644 index 07c0eceb..00000000 Binary files a/combat-mechanics-overhaul_0.6.24/thumbnail.png and /dev/null differ diff --git a/crafting_combinator/changelog.txt b/crafting_combinator/changelog.txt new file mode 100644 index 00000000..402a3abf --- /dev/null +++ b/crafting_combinator/changelog.txt @@ -0,0 +1,470 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.16.3 +Date: 11. 12. 2021 + Changes: + - Added custom symbol sprite for recipe combinator, courtesy of sticklord (https://forums.factorio.com/viewtopic.php?p=555453#p555453) +--------------------------------------------------------------------------------------------------- +Version: 0.16.2 +Date: 11. 12. 2021 + Bugfixes: + - Added a missing nil check in 0.15.0 migration (https://github.com/theRustyKnife/CraftingCombinator/issues/65) + - Removed compress- and uncompress- recipes from ignored recipes (https://mods.factorio.com/mod/crafting_combinator/discussion/60ba6570e68acfeb9e94800b, https://mods.factorio.com/mod/crafting_combinator/discussion/618f5a790a659cc2d1677ba2) + Features: + - Added an option to wait until the output inventory is empty (https://mods.factorio.com/mod/crafting_combinator/discussion/603a569520a18b2fb3442ecc) +--------------------------------------------------------------------------------------------------- +Version: 0.16.1 +Date: 05. 12. 2020 + Changes: + - Updated for Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.16.0 +Date: 15. 10. 2020 + Features: + - Added an option to keep crafting the same thing until the signal reaches 0 (https://mods.factorio.com/mod/crafting_combinator/discussion/5f4b7d64a4c4c962d8ae1ab8) + Changes: + - Added additional overflow chest positions so it can now be placed diagonally behind the combinator (https://github.com/theRustyKnife/CraftingCombinator/issues/63) +--------------------------------------------------------------------------------------------------- +Version: 0.15.3 +Date: 21. 04. 2020 + Bugfixes: + - Fixed a crash caused by factorio considering "false" to be false in some cases (https://mods.factorio.com/mod/crafting_combinator/discussion/5e9ca2a64ed777000b234cc3) + - Fixed a possible crash while migrating from 0.14 to 0.15 (https://mods.factorio.com/mod/crafting_combinator/discussion/5e9f19f2c60fdc000ee64c82) +--------------------------------------------------------------------------------------------------- +Version: 0.15.2 +Date: 27. 03. 2020 + Bugfixes: + - Fixed crash caused by wrong signal cache initialization (https://mods.factorio.com/mod/crafting_combinator/discussion/5e7e24f6f2e203000b7e420b) +--------------------------------------------------------------------------------------------------- +Version: 0.15.1 +Date: 21. 03. 2020 + Bugfixes: + - Added a workaround for certain mods making recipes without proper icon definition (https://mods.factorio.com/mod/crafting_combinator/discussion/5e746463de88d4000bf619b2) +--------------------------------------------------------------------------------------------------- +Version: 0.15.0 +Date: 07. 03. 2020 + Changes: + - Made crafting combinator modes exclusive to make some optimization possible + - Changed recipe selection logic to not ignore non-recipe signals - if the highest signal is not a recipe, it's as if there was no signal at all + - Heavily optimized a lot of things, particularly recipe combinator which could now feasibly be updated every tick + Bugfixes: + - Fixed a crash when removing an assembler after a recipe change with inserter clearing enabled (https://mods.factorio.com/mod/crafting_combinator/discussion/5e335d7032d7fc000dd540cc) + - Fixed that crafting combinators couldn't clear the recipe + - Module chest limits are now transfered when copypasting crafting combinator settings (https://mods.factorio.com/mod/crafting_combinator/discussion/5e589da29b6ee4000e568623) + - Fix combinators built by Klonan's Construction Drones were broken (https://mods.factorio.com/mod/crafting_combinator/discussion/5e637a52c57759000e9f62d1) +--------------------------------------------------------------------------------------------------- +Version: 0.14.0 +Date: 25. 01. 2020 + Changes: + - Replaced Bottleneck readout with a custom implementation that should behave like old Bottleneck (https://mods.factorio.com/mod/crafting_combinator/discussion/5e2be80927e828000b01db25) + - Removed Bottleneck dependency (https://mods.factorio.com/mod/Bottleneck) +--------------------------------------------------------------------------------------------------- +Version: 0.13.5 +Date: 22. 01. 2020 + Changes: + - Support Factorio 0.18 + - Virtual signal locale is now generated using the Rusty Locale library (https://mods.factorio.com/mod/rusty-locale) + Bugfixes: + - Fixed several bugs in the crafting combinator's logic (https://mods.factorio.com/mod/crafting_combinator/discussion/5ded0c7ef2d7c1000c364f31) +--------------------------------------------------------------------------------------------------- +Version: 0.13.4 +Date: 18. 08. 2019 + Bugfixes: + - Fixed a crash in the 0.13.3 migration script (https://mods.factorio.com/mod/crafting_combinator/discussion/5d50e75539d900000d1c2100) +--------------------------------------------------------------------------------------------------- +Version: 0.13.3 +Date: 11. 08. 2019 + Bugfixes: + - Fixed that old combinators in blueprints didn't get their settings updated, which caused crashes (https://mods.factorio.com/mod/crafting_combinator/discussion/5d4f0c0d70bc67000ca3e6b5) +--------------------------------------------------------------------------------------------------- +Version: 0.13.2 +Date: 10. 08. 2019 + Bugfixes: + - Fixed a couple issues with migrations, including a crash (https://mods.factorio.com/mod/crafting_combinator/discussion/5d4e12ca7e079e000c127036) +--------------------------------------------------------------------------------------------------- +Version: 0.13.1 +Date: 01. 08. 2019 + Bugfixes: + - Fixed a crash when the time in recipe combinator overflowed (https://github.com/theRustyKnife/CraftingCombinator/issues/60) + Features: + - Added an option to change the position of the overflow chest for crafting combinators (https://github.com/theRustyKnife/CraftingCombinator/issues/58) +--------------------------------------------------------------------------------------------------- +Version: 0.13.0 +Date: 25. 07. 2019 + Bugfixes: + - Fixed a crash when other mods added recipes with no subgroup (https://mods.factorio.com/mod/crafting_combinator/discussion/5d39d919b007eb000b2178d3) + Changes: + - Used new features of 0.17.59 to make guis draggable +--------------------------------------------------------------------------------------------------- +Version: 0.12.2 +Date: 25. 07. 2019 + Bugfixes: + - Fixed a crash when other mods added recipes before their subgroups existed (https://mods.factorio.com/mod/crafting_combinator/discussion/5d39d919b007eb000b2178d3) + Changes: + - Time multiplier input now only accepts numbers +--------------------------------------------------------------------------------------------------- +Version: 0.12.1 +Date: 25. 07. 2019 + Bugfixes: + - Fixed a crash when other mods removed recipes (https://mods.factorio.com/mod/crafting_combinator/discussion/5d3971180f01ac002dc97be3) + - Fixed that recipe combinator wouldn't output everything if there was a lot of results (https://github.com/theRustyKnife/CraftingCombinator/issues/59) +--------------------------------------------------------------------------------------------------- +Version: 0.12.0 +Date: 21. 07. 2019 + Features: + - Added usage mode to recipe combinator (https://github.com/theRustyKnife/CraftingCombinator/pull/55/) + Bugfixes: + - Fixed missing names and icons of generated signals (https://github.com/theRustyKnife/CraftingCombinator/pull/57) + - Fixed that mods adding recipes in data-final-fixes.lua could cause a crash (https://github.com/theRustyKnife/CraftingCombinator/pull/56) + - Disguised the module chest as the crafting combinator, so it looks right in deconstruction planner filters (https://github.com/theRustyKnife/CraftingCombinator/issues/54) +--------------------------------------------------------------------------------------------------- +Version: 0.11.2 +Date: 04. 07. 2019 + Bugfixes: + - Fixed that crafting combinators could change recipes of assemblers with a fixed recipe (https://mods.factorio.com/mod/crafting_combinator/discussion/5d1d3623cde101000dd8b0b2) +--------------------------------------------------------------------------------------------------- +Version: 0.11.1 +Date: 20. 06. 2019 + Bugfixes: + - Fixed inconsistent vary signal strengths in machine mode (https://github.com/theRustyKnife/CraftingCombinator/pull/51) + Changes: + - Added missing German locale (https://github.com/theRustyKnife/CraftingCombinator/pull/50) +--------------------------------------------------------------------------------------------------- +Version: 0.11.0 +Date: 18. 06. 2019 + Features: + - Added German locale (https://github.com/theRustyKnife/CraftingCombinator/pull/46) + - Added an option to divide by product count to recipe mode (https://github.com/theRustyKnife/CraftingCombinator/pull/47) + - Added find machines mode to recipe combinator (https://github.com/theRustyKnife/CraftingCombinator/pull/49/) + - Added an option to vary output by counting up to recipe combinator (https://github.com/theRustyKnife/CraftingCombinator/pull/49/) + - Added tooltips to some options in the gui + Bugfixes: + - Fixed a crash when Bottleneck was enabled mid game + - Fixed a crash when creating new game with Bottleneck enabled + - Fixed potential crash with recipes with no results +--------------------------------------------------------------------------------------------------- +Version: 0.10.16 +Date: 05. 06. 2019 + Bugfixes: + - Fixed several issues with combinators moved using Picker Dollies (https://mods.factorio.com/mod/PickerDollies) (https://mods.factorio.com/mod/crafting_combinator/discussion/5cf3fd85c2846d000bce5896) +--------------------------------------------------------------------------------------------------- +Version: 0.10.15 +Date: 02. 06. 2019 + Bugfixes: + - Fixed crash when recipe combinator output got too large (https://mods.factorio.com/mod/crafting_combinator/discussion/5cf3a425c2846d000c2477d1) +--------------------------------------------------------------------------------------------------- +Version: 0.10.14 +Date: 27. 05. 2019 + Bugfixes: + - Fixed that icons and locale for virtual recipes were completely broken + - Fixed the no-icon icon scale +--------------------------------------------------------------------------------------------------- +Version: 0.10.13 +Date: 18. 05. 2019 + Bugfixes: + - Fixed a crash when the overflow chest became invalid without an event (https://mods.factorio.com/mod/crafting_combinator/discussion/5cced07bbdcf51000b5c6a82) +--------------------------------------------------------------------------------------------------- +Version: 0.10.12 +Date: 06. 05. 2019 + Bugfixes: + - Fixed crash after removing a combinator that was used as overflow by another combinator (https://mods.factorio.com/mod/crafting_combinator/discussion/5cced07bbdcf51000b5c6a82) +--------------------------------------------------------------------------------------------------- +Version: 0.10.11 +Date: 02. 05. 2019 + Changes: + - Change names as required by Factorio 0.17.35 +--------------------------------------------------------------------------------------------------- +Version: 0.10.10 +Date: 02. 05. 2019 + Bugfixes: + - Fixed that some recipes wouldn't get a signal, even if they needed it + - Added compatibility for Omnipermute (https://mods.factorio.com/mod/omnimatter_permutation) +--------------------------------------------------------------------------------------------------- +Version: 0.10.9 +Date: 28. 04. 2019 + Bugfixes: + - Fixed that undoing contruction of crafting combinator wouldn't deconstruct the combinator properly (https://mods.factorio.com/mod/crafting_combinator/discussion/5cc5ed2a40ecdc000d919fba) +--------------------------------------------------------------------------------------------------- +Version: 0.10.8 +Date: 28. 04. 2019 + Bugfixes: + - Fixed crash when insta-deconstructing combinators with Creative Mod (https://mods.factorio.com/mod/creative-mod) (https://mods.factorio.com/mod/crafting_combinator/discussion/5cbd74eb2b2f55000be9856a) + - Fixed that crafting combinators wouldn't use each other's module chests for overflow sometimes +--------------------------------------------------------------------------------------------------- +Version: 0.10.7 +Date: 20. 04. 2019 + Bugfixes: + - Fixed compatibility with Creative Mod (https://mods.factorio.com/mod/creative-mod) (https://forums.factorio.com/viewtopic.php?f=190&t=34405&start=120#p424003) + Features: + - Add option to clear fluidboxes on recipe change (https://forums.factorio.com/viewtopic.php?f=190&t=34405&start=120#p423990) +--------------------------------------------------------------------------------------------------- +Version: 0.10.6 +Date: 18. 04. 2019 + Changes: + - Crafting combinator will set the machine to no recipe if the fluid inputs/outputs aren't compatible (https://forums.factorio.com/viewtopic.php?f=190&t=34405&start=120#p422961) + - Assembler speed reading mode now accounts for modules and beacons (https://forums.factorio.com/viewtopic.php?f=190&t=34405&start=120#p422961) +--------------------------------------------------------------------------------------------------- +Version: 0.10.5 +Date: 13. 04. 2019 + Changes: + - An ultimately small tweak to the gui + Bugfixes: + - Fixed wrong locale key for read recipe checkbox +--------------------------------------------------------------------------------------------------- +Version: 0.10.4 +Date: 11. 04. 2019 + Changes: + - New nicer gui +--------------------------------------------------------------------------------------------------- +Version: 0.10.3 +Date: 09. 04. 2019 + Bugfixes: + - Fixed a crash when removing recipe combinator + - Fixed that crafting combinator wouldn't recognize a chest that existed before it was built in some cases + - Fixed a crash after removing an overflow chest + - Fixed recipes not being enabled if circuit network tech was researched before the mod was added +--------------------------------------------------------------------------------------------------- +Version: 0.10.2 +Date: 09. 04. 2019 + Changes: + - Added a thumbnail +--------------------------------------------------------------------------------------------------- +Version: 0.10.1 +Date: 09. 04. 2019 + Changes: + - Updated for Factorio 0.17 + - Recipe combinator is now a proper two-tile entity + - Crafting combinator now uses adjacent chest for item overflow + - Also a bunch of things that I don't remember + Bugfixes: + - Blueprinting should work now + - Again, other things that I don't remember / am too lazy to list here :P +--------------------------------------------------------------------------------------------------- +Version: 0.9.12 +Date: 13. 08. 2018 + Changes: + - Added compatibility for recipes from Whistle Stop Factories (https://mods.factorio.com/mod/WhistleStopFactories) +--------------------------------------------------------------------------------------------------- +Version: 0.9.11 +Date: 05. 08. 2018 + Bugfixes: + - Possibly fixed a crash caused by combinators with no assembler (https://mods.factorio.com/mod/crafting_combinator/discussion/5b657d8c949d790009898aae) +--------------------------------------------------------------------------------------------------- +Version: 0.9.10 +Date: 23. 07. 2018 + Bugfixes: + - Fixed a typo that could cause crashes in some cases (https://github.com/theRustyKnife/CraftingCombinator/issues/41) +--------------------------------------------------------------------------------------------------- +Version: 0.9.9 +Date: 13. 12. 2017 + Bugfixes: + - Fixed occasional jamming of inserters with stack size > 1 (by Marek-Arnold: https://github.com/theRustyKnife/CraftingCombinator/pull/40) + - Fixed module requests not working correctly because of API changes (https://mods.factorio.com/mod/crafting_combinator/discussion/5add7924a5e370000943332a) +--------------------------------------------------------------------------------------------------- +Version: 0.9.8 +Date: 13. 12. 2017 + Changes: + - Added compatibility for base game version 0.16 +--------------------------------------------------------------------------------------------------- +Version: 0.9.7 +Date: 13. 12. 2017 + Changes: + - Added compatibility for Quarry (https://mods.factorio.com/mods/FuzzCat927/quarry) +--------------------------------------------------------------------------------------------------- +Version: 0.9.6 +Date: 04. 11. 2017 + Bugfixes: + - Fixed crash with Bottleneck (https://mods.factorio.com/mods/trold/Bottleneck) +--------------------------------------------------------------------------------------------------- +Version: 0.9.5 +Date: 04. 11. 2017 + Changes: + - Added compatibility for Omnicompression (https://mods.factorio.com/mods/EmperorZelos/omnimatter_compression) and Compressed Materials (https://mods.factorio.com/mods/Nexela/compressor) (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/18161) + - Removed the flashing logistic network warning (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/17387) + - Added compatibility for New Game+ (https://mods.factorio.com/mods/Bilka/NewGamePlus) +--------------------------------------------------------------------------------------------------- +Version: 0.9.4 +Date: 11. 06. 2017 + Bugfixes: + - Fixed that Bottleneck read mode would get disabled when not appropriate (https://github.com/theRustyKnife/CraftingCombinator/issues/34) +--------------------------------------------------------------------------------------------------- +Version: 0.9.3 +Date: 05. 06. 2017 + Bugfixes: + - Fixed settings being lost when reviving combinators using Picker Extended (https://mods.factorio.com/mods/Nexela/PickerExtended) + - Fixed that the data entities could get placed in large numbers when dragging a blueprint while placing it (https://github.com/theRustyKnife/CraftingCombinator/issues/31) +--------------------------------------------------------------------------------------------------- +Version: 0.9.2 +Date: 28. 05. 2017 + Bugfixes: + - Fixed a crash in the migration script +--------------------------------------------------------------------------------------------------- +Version: 0.9.1 +Date: 28. 05. 2017 + Changes: + - Added Omnimatter (https://mods.factorio.com/mods/EmperorZelos/omnimatter) compatibility (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/14039) + Bugfixes: + - Fixed crash when loading without Bottleneck installed (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/14118, https://github.com/theRustyKnife/CraftingCombinator/issues/28) +--------------------------------------------------------------------------------------------------- +Version: 0.9.0 +Date: 27. 05. 2017 + Features: + - Crafting combinator can read Bottleneck status (requires Bottleneck (https://mods.factorio.com/mods/trold/Bottleneck) 0.7.3 or higher) +--------------------------------------------------------------------------------------------------- +Version: 0.8.1 +Date: 17. 05. 2017 + Changes: + - Multiply by input count can now be used with find recipes + - Negative values are handled properly (not ignored as before) +--------------------------------------------------------------------------------------------------- +Version: 0.8.0 +Date: 16. 05. 2017 + Features: + - Added an option to read crafting speed to crafting combinator + - Added an option to multiply results by input count to recipe combinator + - Added a mode to recipe combinator for finding recipes that produce a given item + Bugfixes: + - Fixed modules being carried back to storage in certain cases +--------------------------------------------------------------------------------------------------- +Version: 0.7.2 +Date: 08. 05. 2017 + Changes: + - Moved the refresh rate configuration to mod settings +--------------------------------------------------------------------------------------------------- +Version: 0.7.1 +Date: 08. 05. 2017 + Changes: + - Enabled sorting virtual recipes into groups + Bugfixes: + - Fixed wrong icon scale for virtual recipe group + - Fixed recipes that defined complexities would get a virtual signal even if not necessary (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/11640) + - Fixed broken localization +--------------------------------------------------------------------------------------------------- +Version: 0.7.0 +Date: 24. 04. 2017 + Changes: + - Updated for Factorio 0.15 +--------------------------------------------------------------------------------------------------- +Version: 0.6.2 +Date: 01. 04. 2017 + Bugfixes: + - Fixed a crash when the root GUI element was clicked (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/9454) +--------------------------------------------------------------------------------------------------- +Version: 0.6.1 + Bugfixes: + - Fixed recipes not being enabled again (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/4438) +--------------------------------------------------------------------------------------------------- +Version: 0.6.0 +Date: 01. 04. 2017 + Features: + - Settings are saved in blueprints + - Modules that have been removed due to recipe change can now be requested back into the assembler + - The multiplier for time in recipe combinator can now be changed to any number + - Refresh rate is now configurable from in-game, individually for crafting and recipe combinators +--------------------------------------------------------------------------------------------------- +Version: 0.5.2 +Date: 26. 03. 2017 + Bugfixes: + - Removed rocket part signal and made the rocket part item not hidden to fix https://forums.factorio.com/viewtopic.php?f=93&t=34405&start=40#p251643 and prevent flickering issues +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 26. 03. 2017 + Bugfixes: + - Fixed that module would be moved even when not necessary which caused duplication (https://forums.factorio.com/viewtopic.php?f=93&t=34405&start=20#p251542) +--------------------------------------------------------------------------------------------------- +Version: 0.5.0 +Date: 25. 03. 2017 + Features: + - Added configuration GUIs for combinators + - Added product mode to recipe combinator + - Added an option to crafting combinator to read recipes from assemblers + - Added settings copy/paste + - Added an option to crafting combinator to empty inserters' hands to prevent jamming + - Added a way to specify what type of chest to use for overflow items and modules + - Modules are now moved to overflow if they can't be used with the new recipe + Changes: + - Half-finished crafting should now return the ingredients into overflow + - Crafting and recipe combinators now have seperate refresh rates specifiable in config (GUI coming later) + - Many minor changes +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 10. 03. 2017 + Changes: + - Added Recycling Machines (https://mods.factorio.com/mods/DRY411S/ZRecycling) compatibility +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 07. 03. 2017 + Bugfixes: + - Fixed a crash when loading with AAI Programmable Vehicles + - Fixed some virtual recipes would get the default icon when not necessary +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 17. 02. 2017 + Changes: + - Changed the way virtual recipes are generated which should increase compatibilty (thanks to Nexela (https://github.com/theRustyKnife/CraftingCombinator/pull/4)) + - Combinators are color coded now (by Nexela (https://github.com/theRustyKnife/CraftingCombinator/pull/4)) + Features: + - Added automatic locale generation (thanks to Nexela (https://github.com/theRustyKnife/CraftingCombinator/pull/4) again) + - Added a subgroup for virtual recipes (once more by Nexela (https://github.com/theRustyKnife/CraftingCombinator/pull/4)) +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 25. 12. 2016 + Bugfixes: + - Fixed a crash caused by a rounding error in recipe combinator +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 04. 12. 2016 + Bugfixes: + - Fixed crash when placing a combinator after reloading a game (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/5908) +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 01. 12. 2016 + Bugfixes: + - Fixed wrong path for no-icon icon and an error in migration script (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/5869) +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: 01. 12. 2016 + Features: + - Added support for external special case and icon definitions + - Added an invisible active provider chest where the items from the assembler are put when recipe changes + Changes: + - Completely rewritten code + - Moved special cases to the locale mod +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: 19. 10. 2016 + Features: + - Added crafting time to recipe combinator output (thanks to LuziferSenpai (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/4654)) +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: 16. 10. 2016 + Bugfixes: + - Fixed a crash when removing a recipe combinator in a new game (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/4644) +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: 16. 10. 2016 + Features: + - Added recipe combinator (thanks to Igie (https://mods.factorio.com/mods/theRustyKnife/crafting_combinator/discussion/4421)) + Changes: + - Moved localisation into another mod +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 11. 10. 2016 + Changes: + - Changed to work with any and all (hopefully) crafting machine (chemplants, refineries too) + - Added locale for some mods +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 09. 10. 2016 + Changes: + - Recipe for combinator is enabled when the mod is added to the game +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 09. 10.2016 + Changes: + - Added a special case system to solve a recipe naming problem + - Translations for vanilla virtual recipes +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 09. 10. 2016 + Other: + - Initial release diff --git a/crafting_combinator/config.lua b/crafting_combinator/config.lua new file mode 100644 index 00000000..9512f342 --- /dev/null +++ b/crafting_combinator/config.lua @@ -0,0 +1,69 @@ +return { + CC_NAME = 'crafting_combinator:crafting-combinator', + RC_NAME = 'crafting_combinator:recipe-combinator', + MODULE_CHEST_NAME = 'crafting_combinator:module-chest', + SETTINGS_ENTITY_NAME = 'crafting_combinator:settings-entity', + REFRESH_RATE_CC_NAME = 'crafting_combinator:refresh-rate-cc', + REFRESH_RATE_RC_NAME = 'crafting_combinator:refresh-rate-rc', + RC_PROXY_NAME = 'crafting_combinator:rc-proxy', + SIGNAL_CACHE_NAME = 'crafting_combinator:signal-cache', + TIME_SIGNAL_NAME = 'crafting_combinator:recipe-time', + SPEED_SIGNAL_NAME = 'crafting_combinator:crafting-speed', + GROUP_NAME = 'crafting_combinator:virtual-recipes', + RECIPE_SUBGROUP_PREFIX = 'crafting_combinator:virtual-recipe-subgroup:', + UNSORTED_RECIPE_SUBGROUP = 'crafting_combinator:virtual-recipe-subgroup:unsorted', + + CC_DEFAULT_SETTINGS = { + chest_position = 1, -- 1 = Behind, 2 = Left, 3 = Right + mode = 'w', + discard_items = false, + discard_fluids = true, + empty_inserters = true, + craft_until_zero = false, + read_recipe = true, + read_speed = false, + read_bottleneck = false, + }, + RC_DEFAULT_SETTINGS = { + mode = 'ing', + multiply_by_input = false, + divide_by_output = false, + differ_output = false, + time_multiplier = 10, + }, + + ASSEMBLER_DISTANCE = 1, + ASSEMBLER_SEARCH_DISTANCE = 2, + CHEST_DISTANCE = 1, + CHEST_SEARCH_DISTANCE = 2, + INSERTER_SEARCH_RADIUS = 3, + + REFRESH_RATE_CC = 60, + REFRESH_RATE_RC = 60, + + INSERTER_EMPTY_DELAY = 60, + + MODULE_CHEST_SIZE = 100, + + RC_SLOT_COUNT = 40, + -- This is the number of extra slots on top of the max ingredient count + RC_SLOT_RESERVE = 5, -- 5 is arbitrary, but large enough + + -- Recipes matching any of these strings will not get a virtual recipe + RECIPES_TO_IGNORE = { + 'angels%-void', + }, + + FLYING_TEXT_INTERVAL = 180, + + MACHINE_STATUS_SIGNALS = { + working = 'signal-green', + no_power = 'signal-red', + no_fuel = 'signal-red', + low_power = 'signal-yellow', + fluid_ingredient_shortage = 'signal-red', + fluid_production_overload = 'signal-yellow', + item_ingredient_shortage = 'signal-red', + item_production_overload = 'signal-yellow', + }, +} diff --git a/crafting_combinator/control.lua b/crafting_combinator/control.lua new file mode 100644 index 00000000..e5dafae3 --- /dev/null +++ b/crafting_combinator/control.lua @@ -0,0 +1,221 @@ +require 'script.bootstrap' + +local config = require 'config' +local cc_control = require 'script.cc' +local rc_control = require 'script.rc' +local signals = require 'script.signals' +local util = require 'script.util' +local gui = require 'script.gui' +local settings_parser = require 'script.settings-parser' + + +local cc_rate, rc_rate = 1, 1 + +local function enable_recipes() + for _, force in pairs(game.forces) do + if force.technologies['circuit-network'].researched then + force.recipes[config.CC_NAME].enabled = true + force.recipes[config.RC_NAME].enabled = true + end + end +end + +local function on_load(forced) + if not forced and next(late_migrations.__migrations) ~= nil then return; end + + cc_control.on_load() + rc_control.on_load() + signals.on_load() + cc_rate = settings.global[config.REFRESH_RATE_CC_NAME].value + rc_rate = settings.global[config.REFRESH_RATE_RC_NAME].value + + if remote.interfaces['PickerDollies'] then + script.on_event(remote.call('PickerDollies', 'dolly_moved_entity_id'), function(event) + local entity = event.moved_entity + local combinator + if entity.name == config.CC_NAME then combinator = global.cc.data[entity.unit_number] + elseif entity.name == config.RC_NAME then combinator = global.rc.data[entity.unit_number]; end + if combinator then combinator:update_inner_positions(); end + end) + end +end + +script.on_init(function() + cc_control.init_global() + rc_control.init_global() + signals.init_global() + on_load(true) +end) +script.on_load(on_load) + +script.on_configuration_changed(function(changes) + late_migrations(changes) + on_load(true) + enable_recipes() +end) + + +local function count_entities_at(entity, name) + return #(entity.surface.find_entities_filtered { + name = name or entity.name, + position = entity.position, + }) +end + +local function on_built(event) + local entity = event.created_entity or event.entity + if entity.name == config.CC_NAME then cc_control.create(entity); end + if entity.name == config.RC_NAME then rc_control.create(entity); end + if entity.type == 'assembling-machine' then cc_control.update_assemblers(entity.surface, entity); end + if util.CONTAINER_TYPES[entity.type] then cc_control.update_chests(entity.surface, entity); end + + if entity.type == 'entity-ghost' and entity.ghost_name == config.SETTINGS_ENTITY_NAME then + if count_entities_at(entity, config.SETTINGS_ENTITY_NAME) > 0 then entity.destroy() + else entity.silent_revive(); end + return + end + if entity.name == config.SETTINGS_ENTITY_NAME then + if count_entities_at(entity) > 1 then + entity.destroy() + return + end + end +end + +local function on_destroyed(event) + local entity = event.entity + if entity.name == config.CC_NAME then + if cc_control.destroy(entity, event.player_index) then return; end -- Return if the entity was coppied + end + if entity.name == config.MODULE_CHEST_NAME then return cc_control.destroy_by_robot(entity); end + if entity.name == config.RC_NAME then rc_control.destroy(entity); end + if entity.type == 'assembling-machine' then cc_control.update_assemblers(entity.surface, entity, true); end + if util.CONTAINER_TYPES[entity.type] then cc_control.update_chests(entity.surface, entity, true); end + + if entity.type == 'entity-ghost' and (entity.ghost_name == config.CC_NAME or entity.ghost_name == config.RC_NAME) then + settings_parser.destroy(entity) + end +end + + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + cc_rate = settings.global[config.REFRESH_RATE_CC_NAME].value + rc_rate = settings.global[config.REFRESH_RATE_RC_NAME].value +end) + +local function run_update(tab, tick, rate) + for i = tick % (rate + 1) + 1, #tab, (rate + 1) do tab[i]:update(); end +end +script.on_event(defines.events.on_tick, function(event) + if global.cc.inserter_empty_queue[event.tick] then + for _, e in pairs(global.cc.inserter_empty_queue[event.tick]) do + if e.entity.valid and e.assembler and e.assembler.valid then e:empty_inserters(); end + end + global.cc.inserter_empty_queue[event.tick] = nil + end + + run_update(global.cc.ordered, event.tick, cc_rate) + run_update(global.rc.ordered, event.tick, rc_rate) +end) + + +script.on_event(defines.events.on_player_rotated_entity, function(event) + if event.entity.name == config.CC_NAME then + local combinator = global.cc.data[event.entity.unit_number] + combinator:find_assembler() + combinator:find_chest() + end +end) + +script.on_event(defines.events.on_entity_settings_pasted, function(event) + local source, destination + if event.source.name == config.CC_NAME and event.destination.name == config.CC_NAME then + source, destination = global.cc.data[event.source.unit_number], global.cc.data[event.destination.unit_number] + elseif event.source.name == config.RC_NAME and event.destination.name == config.RC_NAME then + source, destination = global.rc.data[event.source.unit_number], global.rc.data[event.destination.unit_number] + else return; end + + destination.settings = util.deepcopy(source.settings) + destination.settings_parser:update(destination.entity, destination.settings) + if destination.entity.name == config.RC_NAME then destination:update(true) + elseif destination.entity.name == config.CC_NAME then destination:copy(source); end +end) + + +script.on_event(defines.events.on_gui_opened, function(event) + local entity = event.entity + if entity then + if entity.name == config.CC_NAME then global.cc.data[entity.unit_number]:open(event.player_index); end + if entity.name == config.RC_NAME then global.rc.data[entity.unit_number]:open(event.player_index); end + end +end) +script.on_event(defines.events.on_gui_closed, function(event) + local element = event.element + if element and element.valid and element.name and element.name:match('^crafting_combinator:') then + element.destroy() + end +end) +script.on_event(defines.events.on_gui_checked_state_changed, function(event) + local element = event.element + if element and element.valid and element.name and element.name:match('^crafting_combinator:') then + local gui_name, unit_number, element_name = gui.parse_entity_gui_name(element.name) + + if gui_name == 'crafting-combinator' then + global.cc.data[unit_number]:on_checked_changed(element_name, element.state, element) + end + if gui_name == 'recipe-combinator' then + global.rc.data[unit_number]:on_checked_changed(element_name, element.state, element) + end + end +end) +script.on_event(defines.events.on_gui_selection_state_changed, function(event) + local element = event.element + if element and element.valid and element.name and element.name:match('^crafting_combinator:') then + local gui_name, unit_number, element_name = gui.parse_entity_gui_name(element.name) + if gui_name == 'crafting-combinator' then + global.cc.data[unit_number]:on_selection_changed(element_name, element.selected_index) + end + end +end) +script.on_event(defines.events.on_gui_text_changed, function(event) + local element = event.element + if element and element.valid and element.name and element.name:match('^crafting_combinator:') then + local gui_name, unit_number, element_name = gui.parse_entity_gui_name(element.name) + if gui_name == 'recipe-combinator' then + global.rc.data[unit_number]:on_text_changed(element_name, element.text) + end + end +end) +script.on_event(defines.events.on_gui_click, function(event) + local element = event.element + if element and element.valid and element.name and element.name:match('^crafting_combinator:') then + local gui_name, unit_number, element_name = gui.parse_entity_gui_name(element.name) + if gui_name == 'crafting-combinator' then + global.cc.data[unit_number]:on_click(element_name, element) + end + end +end) + + +script.on_event(defines.events.on_built_entity, on_built) +script.on_event(defines.events.on_robot_built_entity, on_built) +script.on_event(defines.events.script_raised_built, on_built) +script.on_event(defines.events.script_raised_revive, on_built) + +script.on_event(defines.events.on_pre_player_mined_item, on_destroyed) +script.on_event(defines.events.on_robot_pre_mined, on_destroyed) +script.on_event(defines.events.on_entity_died, on_destroyed) +script.on_event(defines.events.script_raised_destroy, on_destroyed) + +script.on_event(defines.events.on_pre_ghost_deconstructed, function(event) + event.entity = event.ghost + on_destroyed(event) +end) + +script.on_event(defines.events.on_marked_for_deconstruction, function(event) + if event.entity.name == config.CC_NAME then cc_control.fix_undo_deconstruction(event.entity, event.player_index); end + if event.entity.name == config.MODULE_CHEST_NAME then cc_control.mark_for_deconstruction(event.entity); end +end) +script.on_event(defines.events.on_cancelled_deconstruction, function(event) + if event.entity.name == config.MODULE_CHEST_NAME then cc_control.cancel_deconstruction(event.entity); end +end) diff --git a/crafting_combinator/data-final-fixes.lua b/crafting_combinator/data-final-fixes.lua new file mode 100644 index 00000000..bdf5c2fd --- /dev/null +++ b/crafting_combinator/data-final-fixes.lua @@ -0,0 +1,214 @@ +local locale = require '__rusty-locale__.locale' +local icons = require '__rusty-locale__.icons' + +local config = require 'config' + + +local function hook_newindex(table, hook) + local raw_mt = getmetatable(table) or {} + setmetatable(table, raw_mt) + local super_newindex = raw_mt.__newindex or rawset + function raw_mt.__newindex(self, key, value) + hook(self, key, value, function() return super_newindex(self, key, value); end) + end +end + + +local function _is_result(item, result, results) + if item == result then return true; end + for _, result in pairs(results or {}) do + if result.name == item then return true; end + end + return false +end +local function is_result(recipe, item) + if _is_result(item, recipe.result, recipe.results) then return true; end + if recipe.normal and _is_result(item, recipe.normal.result, recipe.normal.results) then return true; end + if recipe.expensive and _is_result(item, recipe.expensive.result, recipe.expensive.results) then return true; end + return false +end + +local function is_ignored(name) + for _, ignore_name in pairs(config.RECIPES_TO_IGNORE) do + if name:find(ignore_name) then return true; end + end + return false +end + +local function is_hidden(recipe) -- Just end me please. + local function is_true(hidden) return hidden == true or hidden == 'true'; end + if recipe.normal then return is_true(recipe.normal.hidden) + else return is_true(recipe.hidden); end +end + +local function needs_signal(recipe) + if type(recipe) == 'string' then recipe = data.raw['recipe'][recipe]; end + local name = recipe.name + return not ( + is_hidden(recipe) + or is_ignored(name) + or is_result(recipe, name) + or data.raw['virtual-signal'][name] + ) +end + +local function get_result_name(result) return result.name or result[1]; end + +local function get_possible_results(recipe) + local res = {} + local function _get_results(tab) + if tab.result then table.insert(res, tab.result); end + if tab.results then + for _, result in pairs(tab.results) do table.insert(res, get_result_name(result)); end + end + end + + _get_results(recipe) + if recipe.expensive then _get_results(recipe.expensive); end + if recipe.normal then _get_results(recipe.normal); end + + return res +end + +local function get_possible_ingredients(recipe) + local res = {} + local function _get_ingredients(tab) + if tab.ingredients then + for _, ingredient in pairs(tab.ingredients) do table.insert(res, get_result_name(ingredient)); end + end + end + + _get_ingredients(recipe) + if recipe.expensive then _get_ingredients(recipe.expensive); end + if recipe.normal then _get_ingredients(recipe.normal); end + + return res +end + +local function get_max_ingredient_count(recipe) + local max = 0 + local function check(tab) + local size = type(tab.ingredients) == 'table' and table_size(tab.ingredients) or 0 + if size > max then max = size; end + end + + check(recipe) + if recipe.expensive then check(recipe.expensive); end + if recipe.normal then check(recipe.normal); end + + return max +end + +local function get_order(recipe) + local subgroup_order = (data.raw['item-subgroup'][recipe.subgroup] or {}).order or 'zzz' + local recipe_order = recipe.order or 'zzz' + return subgroup_order..'-'..recipe_order..'['..recipe.name..']' +end + + +local recipes_waiting_for_groups = {} + +local function make_signal_for_recipe(name, recipe) + if needs_signal(recipe) then + if recipe.subgroup and data.raw['item-subgroup'][recipe.subgroup] == nil then + print("Recipe `"..tostring(name).."` needs subgroup `"..tostring(recipe.subgroup).."` which doesn't exist yet - waiting for it to be created...") + recipes_waiting_for_groups[recipe.subgroup] = recipes_waiting_for_groups[recipe.subgroup] or {} + table.insert(recipes_waiting_for_groups[recipe.subgroup], recipe) + return + end + + local recipe_icons = icons.of(recipe, true) + if not recipe_icons then + local message = "Recipe `%s` doesn't specify valid icons." + if mods['omnilib'] then message = message.." Please ask the author of said recipe to kindly fix their shit, instead of resorting to lazy cop-outs."; end + log(message:format(name)) + hook_newindex(recipe, function(self, key, value, super) + super() + if key == 'icon_size' then make_signal_for_recipe(self.name, self); end + end) + return + end + + print("Generating virtual signal for recipe `"..tostring(name).."`") + local subgroup = config.UNSORTED_RECIPE_SUBGROUP + if recipe.subgroup then + local group = data.raw['item-group'][data.raw['item-subgroup'][recipe.subgroup].group] + subgroup = config.RECIPE_SUBGROUP_PREFIX..group.name + if not data.raw['item-subgroup'][subgroup] then + data:extend{{ + type = 'item-subgroup', + name = subgroup, + group = config.GROUP_NAME, + order = group.order..'['..group.name..']', + }} + end + end + + local locale = locale.of(recipe) + data:extend{{ + type = 'virtual-signal', + name = name, + localised_name = {'crafting_combinator.recipe-locale', locale.name}, + localised_description = locale.description, + icons = recipe_icons, + subgroup = subgroup, + order = get_order(recipe), + }} + end +end + + +local rc = data.raw['constant-combinator'][config.RC_PROXY_NAME] +local result_counts = {recipes = {}, uses = {}} + +local function process_recipe(name, recipe) + make_signal_for_recipe(name, recipe) + + -- Expand the rc slots, just in case there is some insane recipe with a hundred ingredients or something... + local required_slots = get_max_ingredient_count(recipe) + config.RC_SLOT_RESERVE + if required_slots > rc.item_slot_count then + print(("Expanding rc slots to %d"):format(required_slots)) + rc.item_slot_count = required_slots + end + --TODO: Do the same for products? + + for _, result in pairs(get_possible_results(recipe)) do + local count = (result_counts.recipes[result] or 0) + 1 + result_counts.recipes[result] = count + if count + config.RC_SLOT_RESERVE > rc.item_slot_count then + print("Expanding rc slots to fit recipes for "..tostring(result).." ("..tostring(count)..")") + rc.item_slot_count = count + config.RC_SLOT_RESERVE + end + end + + for _, ingredient in pairs(get_possible_ingredients(recipe)) do + local count = (result_counts.uses[ingredient] or 0) + 1 + result_counts.uses[ingredient] = count + if count + config.RC_SLOT_RESERVE > rc.item_slot_count then + print("Expanding rc slots to fit uses of "..tostring(ingredient).." ("..tostring(count)..")") + rc.item_slot_count = count + config.RC_SLOT_RESERVE + end + end +end + + +-- Generate signals for all existing recipes that need it +for name, recipe in pairs(data.raw['recipe']) do process_recipe(name, recipe); end + + +-- Listen for other mods adding recipes beyond this point and make signals for them if necessary +hook_newindex(data.raw['recipe'], function(self, key, value, super) + if value ~= nil then process_recipe(key, value); end --TODO: Remove signals for recipes that get removed + super() +end) + +--Listen for other mods adding subgroups, so we can finish processing recipes that need them +hook_newindex(data.raw['item-subgroup'], function(self, key, value, super) + super() + + local recipes = recipes_waiting_for_groups[key] + if recipes ~= nil then + recipes_waiting_for_groups[key] = nil + for _, recipe in pairs(recipes) do make_signal_for_recipe(recipe.name, recipe); end + end +end) diff --git a/crafting_combinator/data.lua b/crafting_combinator/data.lua new file mode 100644 index 00000000..344ed712 --- /dev/null +++ b/crafting_combinator/data.lua @@ -0,0 +1,203 @@ +local icons = require '__rusty-locale__.icons' + +local config = require 'config' + + +-- Crafting Combinator +local cc = table.deepcopy(data.raw['constant-combinator']['constant-combinator']) +cc.name = config.CC_NAME +cc.icon = '__crafting_combinator__/graphics/icon-crafting-combinator.png' +cc.icon_size = 32 +cc.item_slot_count = 3 +cc.minable.result = cc.name +table.insert(cc.flags, 'not-deconstructable') + +for _, image in pairs(cc.sprites) do + local im = image.layers[1] + im.filename = '__crafting_combinator__/graphics/entities.png' + im.y = 0 + im.hr_version = nil +end + +local cc_item = table.deepcopy(data.raw['item']['constant-combinator']) +cc_item.name = cc.name +cc_item.place_result = cc.name +cc_item.icons = icons.of(cc) +cc_item.subgroup = 'circuit-network' +cc_item.order = 'c[combinators]-m[crafting-combinator]' + +local cc_recipe = table.deepcopy(data.raw['recipe']['constant-combinator']) +cc_recipe.name = cc.name +cc_recipe.result = cc.name +table.insert(data.raw['technology']['circuit-network'].effects, {type = 'unlock-recipe', recipe = cc.name}) + + +local rc = table.deepcopy(data.raw['arithmetic-combinator']['arithmetic-combinator']) +rc.name = config.RC_NAME +rc.minable.result = rc.name +rc.energy_source = { type = 'void' } +rc.energy_usage_per_tick = '1W' +for direction, definition in pairs(rc.multiply_symbol_sprites) do + definition.hr_version.filename = '__crafting_combinator__/graphics/hr-combinator-displays.png' + rc.multiply_symbol_sprites[direction] = definition.hr_version +end + +local rc_item = table.deepcopy(data.raw['item']['arithmetic-combinator']) +rc_item.name = rc.name +rc_item.place_result = rc.name +rc_item.icons = icons.of(rc) +rc_item.subgroup = 'circuit-network' +rc_item.order = 'c[combinators]-m[recipe-combinator]' + +local rc_recipe = table.deepcopy(data.raw['recipe']['arithmetic-combinator']) +rc_recipe.name = rc.name +rc_recipe.result = rc.name +table.insert(data.raw['technology']['circuit-network'].effects, {type = 'unlock-recipe', recipe = rc.name}) + + +local trans = { + filename = '__crafting_combinator__/graphics/trans.png', + width = 1, + height = 1, +} +local con_point = { + wire = { + red = {0, 0}, + green = {0, 0}, + }, + shadow = { + red = {0, 0}, + green = {0, 0}, + }, +} + + +data:extend { + cc, cc_item, cc_recipe, + rc, rc_item, rc_recipe, + { + type = 'item', + name = config.MODULE_CHEST_NAME, + flags = {'hidden'}, + stack_size = 1, + place_result = config.MODULE_CHEST_NAME, + icons = icons.of(cc), + }, + { + type = 'container', + name = config.MODULE_CHEST_NAME, + flags = {'placeable-off-grid', 'not-blueprintable', 'not-upgradable', 'player-creation'}, + collision_mask = {}, + collision_box = cc.collision_box, + selection_box = cc.selection_box, + inventory_size = config.MODULE_CHEST_SIZE, + picture = trans, + minable = {mining_time = 0.2, result = cc.name}, + + -- Disguise the chest as the combinator itself, so it looks right in deconstruction planner filters + localised_name = {'entity-name.crafting_combinator:crafting-combinator'}, + icons = icons.of(cc), + subgroup = cc_item.subgroup, + order = 'z-'..cc_item.order, -- For some reason the z- prefix is added to auto-generated order strings + }, + { + type = 'item', + name = config.SETTINGS_ENTITY_NAME, + flags = {'hidden'}, + stack_size = 1, + place_result = config.SETTINGS_ENTITY_NAME, + icon = '__base__/graphics/icons/blueprint.png', + icon_size = 32, + }, + { + type = 'programmable-speaker', + name = config.SETTINGS_ENTITY_NAME, + flags = {'placeable-off-grid', 'placeable-neutral', 'player-creation', 'not-deconstructable', 'not-upgradable'}, + collision_mask = {}, + collision_box = cc.collision_box, + selection_box = {{0, 0}, {0, 0}}, + sprite = trans, + icon = '__base__/graphics/icons/blueprint.png', + icon_size = 32, + + minable = { + result = config.SETTINGS_ENTITY_NAME, + mining_time = 0, + }, + + energy_source = { type = 'void' }, + energy_usage_per_tick = '1W', + + instruments = {}, + maximum_polyphony = 0, + }, + { + type = 'constant-combinator', + name = config.RC_PROXY_NAME, + flags = {'placeable-off-grid'}, + collision_mask = {}, + item_slot_count = config.RC_SLOT_COUNT, + circuit_wire_max_distance = 3, + sprites = { + north = trans, + east = trans, + south = trans, + west = trans, + }, + activity_led_sprites = trans, + activity_led_light_offsets = {{0, 0}, {0, 0}, {0, 0}, {0, 0}}, + + circuit_wire_connection_points = {con_point, con_point, con_point, con_point}, + draw_circuit_wires = false, + }, + { + type = 'lamp', + name = config.SIGNAL_CACHE_NAME, + flags = {'placeable-off-grid'}, + collision_mask = {}, + circuit_wire_max_distance = 3, + circuit_wire_connection_points = {con_point, con_point, con_point, con_point}, + draw_circuit_wires = false, + + picture_on = trans, + picture_off = trans, + energy_source = {type = 'void'}, + energy_usage_per_tick = '1W', + }, + + { + type = 'item-group', + name = config.GROUP_NAME, + order = 'fb', + icon = '__crafting_combinator__/graphics/recipe-book.png', + icon_size = 64, + }, + { + type = 'item-subgroup', + name = 'crafting_combinator:signals', + group = config.GROUP_NAME, + order = '___', + }, + { + type = 'item-subgroup', + name = config.UNSORTED_RECIPE_SUBGROUP, + group = config.GROUP_NAME, + order = 'zzz[unsorted]', + }, + { + type = 'virtual-signal', + name = config.TIME_SIGNAL_NAME, + icon = '__core__/graphics/clock-icon.png', + subgroup = 'crafting_combinator:signals', + order = 'a[recipe-time]', + icon_size = 32, + }, + { + type = 'virtual-signal', + name = config.SPEED_SIGNAL_NAME, + icon = '__crafting_combinator__/graphics/speed-icon.png', + subgroup = 'crafting_combinator:signals', + order = 'b[crafting-speed]', + icon_size = 32, + }, +} diff --git a/crafting_combinator/graphics/entities.png b/crafting_combinator/graphics/entities.png new file mode 100644 index 00000000..2da9d864 Binary files /dev/null and b/crafting_combinator/graphics/entities.png differ diff --git a/crafting_combinator/graphics/hr-combinator-displays.png b/crafting_combinator/graphics/hr-combinator-displays.png new file mode 100644 index 00000000..65d2ab57 Binary files /dev/null and b/crafting_combinator/graphics/hr-combinator-displays.png differ diff --git a/crafting_combinator/graphics/icon-crafting-combinator.png b/crafting_combinator/graphics/icon-crafting-combinator.png new file mode 100644 index 00000000..a0bf788e Binary files /dev/null and b/crafting_combinator/graphics/icon-crafting-combinator.png differ diff --git a/crafting_combinator/graphics/recipe-book.png b/crafting_combinator/graphics/recipe-book.png new file mode 100644 index 00000000..5e4f96d7 Binary files /dev/null and b/crafting_combinator/graphics/recipe-book.png differ diff --git a/crafting_combinator/graphics/speed-icon.png b/crafting_combinator/graphics/speed-icon.png new file mode 100644 index 00000000..beb9928c Binary files /dev/null and b/crafting_combinator/graphics/speed-icon.png differ diff --git a/crafting_combinator/graphics/trans.png b/crafting_combinator/graphics/trans.png new file mode 100644 index 00000000..4bdd8970 Binary files /dev/null and b/crafting_combinator/graphics/trans.png differ diff --git a/crafting_combinator/info.json b/crafting_combinator/info.json new file mode 100644 index 00000000..63a9ce30 --- /dev/null +++ b/crafting_combinator/info.json @@ -0,0 +1,9 @@ +{ + "name": "crafting_combinator", + "version": "0.16.3", + "factorio_version": "1.1", + "title": "Crafting Combinator", + "author": "LuziferSenpai and TheRustyKnife", + "description": "Includes combinators that allow you to set or read the recipe of any crafting machine, get ingredients or products of a recipe and more!", + "dependencies": ["base", "rusty-locale"] +} diff --git a/crafting_combinator/locale/en/en.cfg b/crafting_combinator/locale/en/en.cfg new file mode 100644 index 00000000..5926cd49 --- /dev/null +++ b/crafting_combinator/locale/en/en.cfg @@ -0,0 +1,78 @@ +[entity-name] +crafting_combinator:crafting-combinator=Crafting combinator +crafting_combinator:recipe-combinator=Recipe combinator +crafting_combinator:settings-entity=Crafting combinator blueprint settings +crafting_combinator:module-chest=Crafting combinator module chest + +[entity-description] +crafting_combinator:crafting-combinator=Sets or reads the recipe of an assembler +crafting_combinator:recipe-combinator=Outputs the ingredients or products of a recipe + +[item-group-name] +crafting_combinator:virtual-recipes=Crafting combinator recipes + +[virtual-signal-name] +crafting_combinator:recipe-time=Crafting time +crafting_combinator:crafting-speed=Crafting speed + +[mod-setting-name] +crafting_combinator:refresh-rate-cc=Crafting Combinator refresh rate +crafting_combinator:refresh-rate-rc=Recipe Combinator refresh rate + +[mod-setting-description] +crafting_combinator:refresh-rate-cc=How many ticks there will be between updates (min 0) +crafting_combinator:refresh-rate-rc=How many ticks there will be between updates (min 0) + +[crafting_combinator] +recipe-locale=Recipe __1__ +chat-message=[Crafting Combinator] __1__ +0-11-2-assembler-warning=Some fixed recipe assemblers have had their recipes reset by a bug in the previous version, please pick them up and place them again to fix this. The list of known instances of this follows, though it may not be complete. +0-11-2-bad-assembler-list-item=[entity=__1__] at [gps=__2__,__3__]__4__ +0-11-2-bad-assembler-list-item-surface= on __1__ +0-15-0-compatibility-warning=This save uses Crafting Combinator __1__ but you have __2__ installed. This may cause issues as version 0.15.0 changed a lot (see changelog). To load this save safely, downgrade to a version prior to 0.15.0, otherwise continue at your own risk. + +[crafting_combinator_gui] +mode=Mode +mode-write=Write +mode-write:tooltip=Set the recipe of the machine based on input signals. +mode-read=Read +mode-read:tooltip=Read various information about the machine and output it as signals. +mode-ing=Find ingredients +mode-ing:tooltip=Output all the ingredients the given recipe requires +mode-prod=Find products +mode-prod:tooltip=Output all the products of the given recipe +mode-use=Find uses +mode-use:tooltip=Output all the recipes that consume the given item or fluid +mode-rec=Find recipes +mode-rec:tooltip=Output all the recipes that produce the given item or fluid +mode-mac=Find machines +mode-mac:tooltip=Output all the machines that the given recipe can be crafted in +misc=Misc +wait-for-output-to-clear=Wait for output to clear +wait-for-output-to-clear:tooltip=When the combinator decides the recipe needs to be switched, it will wait until the assembler's output inventory is empty before taking any action. No more items will be crafted, but the inputs will not be moved to the overflow chest/discarded either. +discard-items=Discard items +discard-fluids=Discard fluids +empty-inserters=Empty inserters' hands (prevents jamming) +read-recipe=Read the current recipe +read-speed=Read the machine's crafting speed +read-machine-status=Read machine status +multiply-by-input=Multiply results by input count +multiply-by-input:tooltip=Take each resulting signal and multiply it by the strength of the chosen input signal before outputting it +divide-by-output=Divide results by product/ingredient count +divide-by-output:tooltip=Take the resulting recipe signals and divide their strength by how much of the searched-for item or fluid it produces or consumes, effectively outputting how many times the recipe needs to be crafted to obtain or process the given number of an item. This only works in usage and recipe mode with 'Multiply results by input count' enabled +time-multiplier=Time multiplier: +differ-output=Vary the strength of output signals +differ-output:tooltip=Set the strengths of the output signals to be each a different number. This can not be used with either of 'Multiply results by input count' and 'Divide results by product count' +open-module-chest=Open module chest +switching-stuck:chest-full=Not enough space in chest +switching-stuck:no-chest=No overflow chest +switching-stuck:waiting-for-output=Waiting for output to clear +chest-position=Overflow chest position: +chest-position:tooltip=Where the combinator should look for the overflow chest, relative to it's own orientation +chest-position:behind=Behind +chest-position:right=Right +chest-position:left=Left +chest-position:behind-right=Behind right +chest-position:behind-left=Behind left +craft-until-zero=Keep crafting until zero +craft-until-zero:tooltip=Once a signal is selected, the combinator will not change the recipe again until that signal reaches zero. diff --git a/crafting_combinator/migrations/0.10.12.lua b/crafting_combinator/migrations/0.10.12.lua new file mode 100644 index 00000000..c956b5fe --- /dev/null +++ b/crafting_combinator/migrations/0.10.12.lua @@ -0,0 +1,7 @@ +if not late_migrations then return end + +late_migrations["Remove invalid overflow chests"] = function() + local cc_control = require 'script.cc' + cc_control.on_load() + for _, combinator in pairs(global.cc.data) do combinator:find_chest(); end +end diff --git a/crafting_combinator/migrations/0.10.16.lua b/crafting_combinator/migrations/0.10.16.lua new file mode 100644 index 00000000..df7a9fc0 --- /dev/null +++ b/crafting_combinator/migrations/0.10.16.lua @@ -0,0 +1,35 @@ +if not late_migrations then return end + +late_migrations['0.10.16'] = function() + local config = require 'config' + local cc_control = require 'script.cc' + local rc_control = require 'script.rc' + + cc_control.on_load() + rc_control.on_load() + + log("Fixing moved combinators...") + for _, combinator in pairs(global.cc.data) do combinator:update_inner_positions(); end + for _, combinator in pairs(global.rc.data) do combinator:update_inner_positions(); end + + log("Removing duplicate and orphan settings entities...") + for _, surface in pairs(game.surfaces) do + print("\t- Scanning surface: "..surface.name) + for _, entity in pairs(surface.find_entities_filtered{name = config.SETTINGS_ENTITY_NAME}) do + local owners = surface.find_entities_filtered{name = {config.CC_NAME, config.RC_NAME}, position = entity.position} + local duplicates = surface.find_entities_filtered{name = config.SETTINGS_ENTITY_NAME, position = entity.position} + if next(owners) == nil then + print("\t\t- Removing orphan at "..serpent.line(entity.position)) + entity.destroy() + elseif table_size(duplicates) > 1 then + for _, duplicate in pairs(duplicates) do + if duplicate.unit_number > entity.unit_number then + print("\t\t- Removing duplicate at "..serpent.line(entity.position)..", newer unit number: "..tostring(duplicate.unit_number)) + entity.destroy() + break + end + end + end + end + end +end diff --git a/crafting_combinator/migrations/0.10.8.lua b/crafting_combinator/migrations/0.10.8.lua new file mode 100644 index 00000000..4d820307 --- /dev/null +++ b/crafting_combinator/migrations/0.10.8.lua @@ -0,0 +1,7 @@ +if not late_migrations then return end + +late_migrations["Use module chests as overflow"] = function() + local cc_control = require 'script.cc' + cc_control.on_load() + for _, combinator in pairs(global.cc.data) do combinator:find_chest(); end +end diff --git a/crafting_combinator/migrations/0.11.2.lua b/crafting_combinator/migrations/0.11.2.lua new file mode 100644 index 00000000..e5f4060f --- /dev/null +++ b/crafting_combinator/migrations/0.11.2.lua @@ -0,0 +1,30 @@ +if not late_migrations then return end + +late_migrations['0.11.2'] = function() + local config = require 'config' + local cc_control = require 'script.cc' + + + cc_control.on_load() + + log("Removing fixed recipe assemblers from combinators...") + local bad_assemblers = {} + for _, combinator in pairs(global.cc.data) do + if combinator.assembler and combinator.assembler.prototype.fixed_recipe then + print(("\t- Found bad assembler for combinator at %s"):format(serpent.line(combinator.entity.position))) + table.insert(bad_assemblers, combinator.assembler) + combinator:find_assembler() + end + end + + if table_size(bad_assemblers) > 0 then + game.print{'crafting_combinator.chat-message', {'crafting_combinator.0-11-2-assembler-warning'}} + local print_surface = table_size(game.surfaces) > 1 + for _, assembler in pairs(bad_assemblers) do + game.print{'crafting_combinator.0-11-2-bad-assembler-list-item', + assembler.name, assembler.position.x, assembler.position.y, + print_surface and {'crafting_combinator.0-11-2-bad-assembler-list-item-surface', assembler.surface.name} or "" + } + end + end +end diff --git a/crafting_combinator/migrations/0.13.1.lua b/crafting_combinator/migrations/0.13.1.lua new file mode 100644 index 00000000..4db5d32e --- /dev/null +++ b/crafting_combinator/migrations/0.13.1.lua @@ -0,0 +1,11 @@ +if not late_migrations then return end + +local config = require 'config' +local cc_control = require 'script.cc' + + +cc_control.on_load() +log("Adding missing chest settings to combinators...") +for _, combinator in pairs(global.cc.data) do + combinator.settings.chest_position = combinator.settings.chest_position or config.CC_DEFAULT_SETTINGS.chest_position +end diff --git a/crafting_combinator/migrations/0.13.3.lua b/crafting_combinator/migrations/0.13.3.lua new file mode 100644 index 00000000..23ddfa91 --- /dev/null +++ b/crafting_combinator/migrations/0.13.3.lua @@ -0,0 +1,11 @@ +if not late_migrations then return end + +local config = require 'config' +local cc_control = require 'script.cc' +local settings_parser = require 'script.settings-parser' + + +log("Adding missing settings to combinators...") +for _, combinator in pairs(global.cc.data) do + settings_parser.fill_defaults(combinator.settings, config.CC_DEFAULT_SETTINGS) +end diff --git a/crafting_combinator/migrations/0.15.0.lua b/crafting_combinator/migrations/0.15.0.lua new file mode 100644 index 00000000..c60c94b7 --- /dev/null +++ b/crafting_combinator/migrations/0.15.0.lua @@ -0,0 +1,40 @@ +if not late_migrations then return end + +late_migrations['0.15.0'] = function(changes) + local cc_control = require 'script.cc' + local rc_control = require 'script.rc' + local signals = require 'script.signals' + + + local change = changes.mod_changes['crafting_combinator'] + if not change or not change.old_version then return; end + + local message = {'crafting_combinator.0-15-0-compatibility-warning', change.old_version, change.new_version} + log(message) + game.show_message_dialog{text = message} + + + log "Initializing new globals..." + signals.init_global() + + + cc_control.on_load() + rc_control.on_load() + + + log(("Updating %d crafting combinators..."):format(table_size(global.cc.data))) + for _, combinator in pairs(global.cc.data) do + combinator.last_recipe = false + combinator.settings.read_recipe = true + combinator.settings.mode = combinator.settings.mode.set and 'w' or 'r' + combinator.settings_parser:update(combinator.entity, combinator.settings) + end + + + log(("Updating %d recipe combinators..."):format(table_size(global.rc.data))) + for _, combinator in pairs(global.rc.data) do + combinator.last_recipe = false + combinator.last_name = false + combinator.last_count = false + end +end diff --git a/crafting_combinator/migrations/0.15.2.lua b/crafting_combinator/migrations/0.15.2.lua new file mode 100644 index 00000000..25ce8516 --- /dev/null +++ b/crafting_combinator/migrations/0.15.2.lua @@ -0,0 +1,9 @@ +if not late_migrations then return end + +late_migrations['0.15.2'] = function() + local signals = require 'script.signals' + + for _, cache in pairs(global.signals.cache) do signals.cache.drop(cache.__entity); end + global.signals = nil + signals.init_global() +end diff --git a/crafting_combinator/script/bootstrap.lua b/crafting_combinator/script/bootstrap.lua new file mode 100644 index 00000000..f44236a0 --- /dev/null +++ b/crafting_combinator/script/bootstrap.lua @@ -0,0 +1,57 @@ +-- Fix that require raises an error when called after control.lua has finished executing, even if it doesn't actually +-- need to load anything... This was changed in 0.17.57 I think. +local _require = _G.require +_G.require = function(what, ...) + if package.loaded[what] ~= nil then return package.loaded[what]; end + return _require(what, ...) +end + + +local semver = require 'script.semver' + +local function parse_version(version) + if not version:match('^%d+%.%d+%.%d+$') then return nil; end + return semver(version) +end + +local function migration_tostring(migration) + if not migration.version then return tostring(migration.name); end + return tostring(migration.name).." (for version "..tostring(migration.version)..")" +end + +-- A nice alternative to stuffing everything into on_configuration_changed with seven hundred ifs +_G.late_migrations = setmetatable({__migrations = {}, __ordered = {}, __versioned = {}}, { + __newindex = function(self, name, migration) + if type(name) == 'table' then + assert(type(migration) == 'function') + name.apply = migration + migration = name + else + if type(migration) == 'function' then migration = {apply=migration}; end + migration.name = name + migration.version = migration.version or parse_version(migration.name) + end + + local _apply = migration.apply + function migration:apply(changes) + log("Applying late migration "..migration_tostring(self)) + _apply(changes) + end + + assert(self.__migrations[migration.name] == nil, "Late migration with name "..tostring(migration.name).." already exists") + + self.__migrations[migration.name] = migration + if migration.version then table.insert(self.__versioned, migration) + else table.insert(self.__ordered, migration); end + + print("Registered late migration "..migration_tostring(migration)) + end, + + __call = function(self, changes) + table.sort(self.__versioned, function(m1, m2) return m1.version <= m2.version; end) + for _, migration in ipairs(self.__versioned) do migration:apply(changes); end + for _, migration in ipairs(self.__ordered) do migration:apply(changes); end + end, + + __index = function(self, key) return self.__migrations[key]; end, +}) diff --git a/crafting_combinator/script/cc.lua b/crafting_combinator/script/cc.lua new file mode 100644 index 00000000..3319a1cd --- /dev/null +++ b/crafting_combinator/script/cc.lua @@ -0,0 +1,543 @@ +local util = require 'script.util' +local gui = require 'script.gui' +local settings_parser = require 'script.settings-parser' +local recipe_selector = require 'script.recipe-selector' +local config = require 'config' +local signals = require 'script.signals' + + +local _M = {} +local combinator_mt = {__index = _M} + + +local CHEST_POSITION_NAMES = {'behind', 'left', 'right', 'behind-left', 'behind-right'} +local CHEST_POSITIONS = {}; for key, name in pairs(CHEST_POSITION_NAMES) do CHEST_POSITIONS[name] = key; end +local CHEST_DIRECTIONS = { + [CHEST_POSITIONS.behind] = 180, + [CHEST_POSITIONS.right] = 90, + [CHEST_POSITIONS.left] = -90, + [CHEST_POSITIONS['behind-right']] = 135, + [CHEST_POSITIONS['behind-left']] = -135, +} + +local STATUS_SIGNALS = {} +for name, signal in pairs(config.MACHINE_STATUS_SIGNALS) do + if defines.entity_status[name] then + STATUS_SIGNALS[defines.entity_status[name]] = signal + end +end + + +_M.settings_parser = settings_parser { + chest_position = {'c', 'int'}, + mode = {'m', 'string'}, + discard_items = {'d', 'bool'}, + discard_fluids = {'f', 'bool'}, + empty_inserters = {'i', 'bool'}, + craft_until_zero = {'z', 'bool'}, + read_recipe = {'r', 'bool'}, + read_speed = {'s', 'bool'}, + read_machine_status = {'st', 'bool'}, + wait_for_output_to_clear = {'wo', 'bool'}, +} + + +-- General housekeeping + +function _M.init_global() + global.cc = global.cc or {} + global.cc.data = global.cc.data or {} + global.cc.ordered = global.cc.ordered or {} + global.cc.inserter_empty_queue = {} +end + +function _M.on_load() + for _, combinator in pairs(global.cc.data) do setmetatable(combinator, combinator_mt); end +end + + +-- Lifecycle events + +function _M.create(entity) + local combinator = setmetatable({ + entity = entity, + control_behavior = entity.get_or_create_control_behavior(), + module_chest = entity.surface.create_entity { + name = config.MODULE_CHEST_NAME, + position = entity.position, + force = entity.force, + create_build_effect_smoke = false, + }, + settings = _M.settings_parser:read_or_default(entity, util.deepcopy(config.CC_DEFAULT_SETTINGS)), + inventories = {}, + items_to_ignore = {}, + last_flying_text_tick = -config.FLYING_TEXT_INTERVAL, + enabled = true, + last_recipe = false, + }, combinator_mt) + + combinator.module_chest.destructible = false + combinator.inventories.module_chest = combinator.module_chest.get_inventory(defines.inventory.chest) + + global.cc.data[entity.unit_number] = combinator + table.insert(global.cc.ordered, combinator) + combinator:find_assembler() + combinator:find_chest() + + -- Other combinators can use the module chest as overflow output, so let them know it's there + _M.update_chests(entity.surface, combinator.module_chest) +end + +function _M.mark_for_deconstruction(entity) + local combinator = global.cc.data[entity.surface.find_entity(config.CC_NAME, entity.position).unit_number] + combinator.enabled = false + combinator:update() +end +function _M.cancel_deconstruction(entity) + local combinator = global.cc.data[entity.surface.find_entity(config.CC_NAME, entity.position).unit_number] + combinator.enabled = true + combinator:update() +end +function _M.fix_undo_deconstruction(entity, player_index) + local combinator = global.cc.data[entity.unit_number] + local player = player_index and game.get_player(player_index) + local force = player and player.force or entity.force + entity.cancel_deconstruction(force, player) + combinator.module_chest.order_deconstruction(force, player) +end + +function _M.destroy_by_robot(entity) + local combinator_entity = entity.surface.find_entity(config.CC_NAME, entity.position) + if not combinator_entity then return; end + _M.destroy(combinator_entity) + combinator_entity.destroy() +end + +function _M.destroy(entity, player_index) + local unit_number = entity.unit_number + local combinator = global.cc.data[unit_number] + + if player_index then + local inventory = combinator.inventories.module_chest + if not inventory.is_empty() then + local target = player_index and game.get_player(player_index).get_inventory(defines.inventory.character_main) + for i = 1, #inventory do + local stack = inventory[i] + if stack.valid_for_read then + local r = target and target.insert(stack) or 0 + if r < stack.count then + stack.count = stack.count - r + -- Clone the entity as replacement and tell the player the inventory is full + game.get_player(player_index).print{'inventory-restriction.player-inventory-full', stack.prototype.localised_name} + + -- Replace the entity if a player was trying to pick it up + local old_entity = combinator.entity + local old_cb = combinator.control_behavior + combinator.entity = old_entity.clone{position = old_entity.position} + combinator.control_behavior = combinator.entity.get_or_create_control_behavior() + + global.cc.data[unit_number] = nil + global.cc.data[combinator.entity.unit_number] = combinator + + for _, connection in pairs(old_entity.circuit_connection_definitions) do + combinator.entity.connect_neighbour(connection) + end + + old_entity.destroy() + return true -- Inidcate that the original entity was destroyed + else stack.clear(); end + end + end + end + end + + -- Notify other combinators that the chest was destroyed + _M.update_chests(entity.surface, combinator.module_chest, true) + if player_index then combinator.module_chest.destroy(); end + settings_parser.destroy(entity) + signals.cache.drop(entity) + + global.cc.data[unit_number] = nil + for k, v in pairs(global.cc.ordered) do + if v.entity.unit_number == unit_number then + table.remove(global.cc.ordered, k) + break + end + end +end + +function _M.update_assemblers(surface, assembler, ignore) + local combinators = surface.find_entities_filtered { + area = util.area(assembler.prototype.selection_box):expand(config.ASSEMBLER_SEARCH_DISTANCE) + assembler.position, + name = config.CC_NAME, + } + for _, entity in pairs(combinators) do global.cc.data[entity.unit_number]:find_assembler(ignore and assembler or nil); end +end + +function _M.update_chests(surface, chest, ignore) + local combinators = surface.find_entities_filtered { + area = util.area(chest.prototype.selection_box):expand(config.CHEST_SEARCH_DISTANCE) + chest.position, + name = config.CC_NAME, + } + for _, entity in pairs(combinators) do global.cc.data[entity.unit_number]:find_chest(ignore and chest or nil); end +end + +function _M:update() + local params = {} + if self.enabled and self.assembler and self.assembler.valid then + self.assembler.active = true + + if self.settings.mode == 'w' then + self:set_recipe() + end + if self.settings.mode == 'r' then + if self.settings.read_recipe then self:read_recipe(params); end + if self.settings.read_speed then self:read_speed(params); end + if self.settings.read_machine_status then self:read_machine_status(params); end + end + end + + self.control_behavior.parameters = params +end + + +function _M:open(player_index) + local root = gui.entity(self.entity, { + title_elements = { + gui.button('open-module-chest'), + gui.dropdown('chest-position', CHEST_POSITION_NAMES, self.settings.chest_position, {tooltip=true}), + }, + + gui.section { + name = 'mode', + gui.radio('w', self.settings.mode, {locale='mode-write', tooltip=true}), + gui.radio('r', self.settings.mode, {locale='mode-read', tooltip=true}), + }, + gui.section { + name = 'misc', + gui.checkbox('wait-for-output-to-clear', self.settings.wait_for_output_to_clear, {tooltip = true}), + gui.checkbox('discard-items', self.settings.discard_items), + gui.checkbox('discard-fluids', self.settings.discard_fluids), + gui.checkbox('empty-inserters', self.settings.empty_inserters), + gui.checkbox('craft-until-zero', self.settings.craft_until_zero, {tooltip = true}), + gui.checkbox('read-recipe', self.settings.read_recipe), + gui.checkbox('read-speed', self.settings.read_speed), + gui.checkbox('read-machine-status', self.settings.read_machine_status), + } + }):open(player_index) + + self:update_disabled_checkboxes(root) +end + +function _M:on_checked_changed(name, state, element) + local category, name = name:gsub(':.*$', ''), name:gsub('^.-:', ''):gsub('-', '_') + if category == 'mode' then + self.settings.mode = name + for _, el in pairs(element.parent.children) do + if el.type == 'radiobutton' then + local _, _, el_name = gui.parse_entity_gui_name(el.name) + el.state = el_name == 'mode:'..name + end + end + end + if category == 'misc' then self.settings[name] = state; end + if name == 'craft_until_zero' and self.settings.craft_until_zero then + self.last_recipe = nil + end + + self:update_disabled_checkboxes(gui.get_root(element)) + + self.settings_parser:update(self.entity, self.settings) +end + +function _M:update_disabled_checkboxes(root) + self:disable_checkbox(root, 'misc:discard-items', 'w') + self:disable_checkbox(root, 'misc:discard-fluids', 'w') + self:disable_checkbox(root, 'misc:empty-inserters', 'w') + self:disable_checkbox(root, 'misc:craft-until-zero', 'w') + self:disable_checkbox(root, 'misc:wait-for-output-to-clear', 'w') + self:disable_checkbox(root, 'misc:read-recipe', 'r') + self:disable_checkbox(root, 'misc:read-speed', 'r') + self:disable_checkbox(root, 'misc:read-machine-status', 'r') +end + +function _M:disable_checkbox(root, name, mode) + local checkbox = gui.find_element(root, gui.name(self.entity, name)) + checkbox.enabled = self.settings.mode == mode +end + +function _M:on_selection_changed(name, selected) + if name == 'title:chest-position:value' then + self.settings.chest_position = selected + self.settings_parser:update(self.entity, self.settings) + self:find_chest() + end +end + +function _M:on_click(name, element) + if name == 'title:open-module-chest' then + game.get_player(element.player_index).opened = self.module_chest + end +end + + +-- Other stuff + +function _M:read_recipe(params) + local recipe = self.assembler.get_recipe() + if recipe then + table.insert(params, { + signal = recipe_selector.get_signal(recipe.name), + count = 1, + index = 1, + }) + end +end + +function _M:read_speed(params) + local count = self.assembler.crafting_speed * 100 + table.insert(params, { + signal = {type = 'virtual', name = config.SPEED_SIGNAL_NAME}, + count = count, + index = 2, + }) +end + +function _M:read_machine_status(params) + local signal = STATUS_SIGNALS[self.assembler.status or "A dummy string to avoid indexing by nil"] + if signal == nil then return end + table.insert(params, { + signal = {type = 'virtual', name = signal}, + count = 1, + index = 3, + }) +end + +function _M:set_recipe() + local changed, recipe + if self.settings.craft_until_zero then + if not self.last_recipe or not signals.signal_present(self.entity) then + local highest = signals.watch_highest_presence(self.entity) + if highest then recipe = self.entity.force.recipes[highest.signal.name] + else recipe = nil; end + self.last_recipe = recipe + else recipe = self.last_recipe; end + else + changed, recipe = recipe_selector.get_recipe(self.entity, nil, self.last_recipe and self.last_recipe.name) + if changed then self.last_recipe = recipe + else recipe = self.last_recipe; end + end + + if recipe and (recipe.hidden or not recipe.enabled) then recipe = nil; end + + local a_recipe = self.assembler.get_recipe() + + -- Move items if necessary + if a_recipe and ((not recipe) or recipe ~= a_recipe) then + local success, error = self:move_items() + if not success then return self:on_chest_full(error); end + if self.settings.empty_inserters then + success, error = self:empty_inserters() + if not success then return self:on_chest_full(error); end + + local tick = game.tick + config.INSERTER_EMPTY_DELAY + global.cc.inserter_empty_queue[tick] = global.cc.inserter_empty_queue[tick] or {} + table.insert(global.cc.inserter_empty_queue[tick], self) + end + + -- Clear fluidboxes + if self.settings.discard_fluids then + for i=1, #self.assembler.fluidbox do self.assembler.fluidbox[i] = nil; end + end + end + + if recipe ~= a_recipe then + -- Move modules if necessary + if recipe then self:move_modules(recipe); end + + -- Finally attempt to switch the recipe + self.assembler.set_recipe(recipe) + local new_recipe = self.assembler.get_recipe() + if new_recipe and new_recipe ~= recipe then self.assembler.set_recipe(nil); end --TODO: Some notification? + end + + -- Move modules and items back into the machine + self:insert_modules() + self:insert_items() + + return true +end + +function _M:move_modules(recipe) + local target = self.inventories.module_chest + local inventory = self.inventories.assembler.modules + for i = 1, #inventory do + local stack = inventory[i] + if stack.valid_for_read then + local limitations = util.module_limitations()[stack.name] + --TODO: Deal with not enough space in the chest + if limitations and not limitations[recipe.name] then target.insert(stack); end + end + end +end + +function _M:insert_modules() + local inventory = self.inventories.module_chest + if inventory.is_empty() then return; end + local target = self.inventories.assembler.modules + + for i = 1, #inventory do + local stack = inventory[i] + if stack.valid_for_read then + local r = target.insert(stack) + if r < stack.count then stack.count = stack.count - r + else stack.clear(); end + end + end +end + +function _M:insert_items() + local inventory = self.inventories.chest + if not inventory or not inventory.valid or inventory.is_empty() then return; end + local target = self.inventories.assembler.input + + for i = 1, #inventory do + local stack = inventory[i] + if stack.valid_for_read then + local r = target.insert(stack) + if r < stack.count then stack.count = stack.count - r + else stack.clear(); end + end + end +end + +function _M:move_items() + if self.settings.wait_for_output_to_clear and not self.inventories.assembler.output.is_empty() then + return false, 'waiting-for-output' + end + + if self.settings.discard_items then return true; end + + local target = self:get_chest_inventory() + + -- Compensate for half-finished crafts + -- Do this first to avoid losing a lot of items + if self.assembler.crafting_progress > 0 then + local success = true + for _, ing in pairs(self.assembler.get_recipe().ingredients) do + if ing.type == 'item' then + if not target then return false, 'no-chest'; end + local r = target.insert{name = ing.name, count = ing.amount} + if r < ing.amount then success = false; end + end + end + self.assembler.crafting_progress = 0 + if not success then return false, 'chest-full'; end + end + + -- Clear the assembler inventories + -- This may become somewhat problematic if the input items can be moved, but the output can't, since inserters will + -- continue to replace the items that were removed. I guess that's up to the player to deal with tho... + for _, inventory in pairs{self.inventories.assembler.input, self.inventories.assembler.output} do + for i=1, #inventory do + local stack = inventory[i] + if stack.valid_for_read then + if not target then return false, 'no-chest'; end + local r = target.insert(stack) + if r < stack.count then + stack.count = stack.count - r -- Make sure the items don't get duplicated + return false, 'chest-full' + end + inventory[i].clear() + end + end + end + + return true +end + +function _M:on_chest_full(error) + -- Prevent the assembler from crafting any more shit + self.assembler.active = false + if game.tick - self.last_flying_text_tick >= config.FLYING_TEXT_INTERVAL then + self.last_flying_text_tick = game.tick + self.entity.surface.create_entity { + name = 'flying-text', + position = self.entity.position, + text = {'crafting_combinator_gui.switching-stuck:'..(error or 'chest-full')}, + color = {255, 0, 0}, + } + end +end + +function _M:empty_inserters() + local target = self:get_chest_inventory() + + for _, inserter in pairs(self.assembler.surface.find_entities_filtered { + area = util.area(self.assembler.prototype.selection_box):expand(config.INSERTER_SEARCH_RADIUS) + self.assembler.position, + type = 'inserter', + }) do + if inserter.drop_target == self.assembler then + local stack = inserter.held_stack + if stack.valid_for_read and not self.settings.discard_items then + if not target then return false, 'no-chest'; end + local r = target.insert(stack) + if r < stack.count then + stack.count = stack.count - r + return false, 'chest-full' + end + stack.clear() + else stack.clear(); end + end + end + return true +end + +function _M:find_assembler(assembler_to_ignore) + self.assembler = self.entity.surface.find_entities_filtered { + position = util.position(self.entity.position):shift(self.entity.direction, config.ASSEMBLER_DISTANCE), + type = 'assembling-machine', + }[1] + if self.assembler and (self.assembler == assembler_to_ignore or self.assembler.prototype.fixed_recipe) then + self.assembler = nil + end + + if self.assembler then + self.inventories.assembler = { + output = self.assembler.get_inventory(defines.inventory.assembling_machine_output), + input = self.assembler.get_inventory(defines.inventory.assembling_machine_input), + modules = self.assembler.get_inventory(defines.inventory.assembling_machine_modules), + } + else self.inventories.assembler = {}; end +end + +function _M:find_chest(chest_to_ignore) + local direction = util.direction(self.entity.direction):rotate(CHEST_DIRECTIONS[self.settings.chest_position]) + self.chest = self.entity.surface.find_entities_filtered { + position = util.position(self.entity.position):shift(direction, config.CHEST_DISTANCE), + type = {'container', 'logistic-container'}, + }[1] + if self.chest == chest_to_ignore then self.chest = nil; end + self.inventories.chest = self.chest and self.chest.get_inventory(defines.inventory.chest) +end + +function _M:get_chest_inventory() + local inventory = self.inventories.chest + if not inventory or inventory.valid then return inventory; end + self:find_chest() + return self.inventories.chest +end + + +function _M:update_inner_positions() + settings_parser.move_entity(self.entity, self.module_chest.position) + self.module_chest.teleport(self.entity.position) +end + + +function _M:copy(source) + self.inventories.module_chest.set_bar(source.inventories.module_chest.get_bar()) +end + + +return _M diff --git a/crafting_combinator/script/gui.lua b/crafting_combinator/script/gui.lua new file mode 100644 index 00000000..b83c4d06 --- /dev/null +++ b/crafting_combinator/script/gui.lua @@ -0,0 +1,266 @@ +local _M = {} + + +local MOD_NAME = 'crafting_combinator' +local LOCALE_CATEGORY = MOD_NAME..'_gui' + + +local function build_list(specs, root) + for _, spec in ipairs(specs) do + if type(spec) == 'table' then spec:build(root); end + end + return root +end + +local function find_parent_name(parent) + if not parent then return nil; end + if parent.name ~= '' then return parent.name; end + return parent.parent and find_parent_name(parent.parent) +end +local function elem_name(parent, name) + local parent_name = find_parent_name(parent) + if parent_name and parent_name:match('^'..MOD_NAME) then return parent_name..':'..name + else return MOD_NAME..':'..name; end +end +local function locale(key) return {LOCALE_CATEGORY..'.'..key}; end + +local function parse_common_options(options, name) + if type(options) == 'string' then options = {locale = options}; end + options = options or {} + + options.locale_key = options.locale or name + options.locale = locale(options.locale_key) + if options.tooltip == true then options.tooltip = options.locale_key..':tooltip'; end + options.tooltip = options.tooltip and locale(options.tooltip) + + return options +end + + +function _M.find_element(root, name) + for _, child in pairs(root.children) do + if child.name == '' then + local subresult = _M.find_element(child, name) + if subresult ~= nil then return subresult; end + elseif child.name == name then return child + elseif name:sub(1, #child.name) == child.name then return _M.find_element(child, name); end + end + return nil +end + +function _M.entity_name(entity) return entity.name:match('[^:]*$')..':'..tostring(entity.unit_number); end + +function _M.name(...) + local args = table.pack(...) + local name = MOD_NAME + for i=1, args.n do + local step = args[i] + if type(step) == 'string' then name = name..':'..step + elseif type(step) == 'table' then + if type(step.__self) == 'userdata' then name = name..':'.._M.entity_name(step); end + end + end + return name +end + + +function _M.get_root(element) return game.get_player(element.player_index).gui.screen; end + + +function _M.parse_entity_gui_name(name) + local gui_name = name:gsub('^'..MOD_NAME..':', '') + local unit_number = gui_name:gsub('^.-:', '') + local element_name = unit_number:gsub('^.-:', '') + return gui_name:gsub(':.*$', ''), tonumber((unit_number:gsub(':.*$', ''))), element_name +end + + +function _M.open(spec, player_index, root) + local player = game.get_player(player_index) + local root = root or player.gui.screen + local element = spec:build(root) + player.opened = element + return element +end + + +function _M.entity(entity, specs) + specs.open = _M.open + + local entity_name = entity.name:match('[^:]*$') + local unit_number = entity.unit_number + local entity_locale = entity.prototype.localised_name + + function specs:build(root) + local main = root.add { + type = 'frame', + name = elem_name(root, entity_name..':'..tostring(unit_number)), + direction = 'vertical', + style = 'outer_frame', + } + main.auto_center = true + + local title = main.add { + type = 'frame', + name = elem_name(main, 'title'), + caption = entity_locale, + direction = 'horizontal', + style = 'inner_frame_in_outer_frame', + } + local preview = title.add { + type = 'entity-preview', + name = elem_name(title, 'preview'), + style = 'entity_button_base', + } + preview.entity = entity + + title.drag_target = main + + if self.title_elements then + local title_container = title.add { + type = 'flow', + direction = 'vertical', + } + title_container.style.horizontal_align = 'right' + build_list(self.title_elements, title_container) + end + + build_list(self, main) + + return main + end + return specs +end + +function _M.section(specs) + function specs:build(root) + local frame = root.add { + type = 'frame', + name = elem_name(root, specs.name), + caption = specs.caption or locale(specs.name), + direction = 'vertical', + } + if root.parent and root.parent == _M.get_root(root) and root.type == 'frame' then + frame.drag_target = root + end + + build_list(self, frame) + + return frame + end + return specs +end + +function _M.spacer() + local specs = {} + function specs:build(root) + local res = root.add { type = 'flow' } + res.style.horizontally_stretchable = true + return res + end + return specs +end + +function _M.checkbox(name, state, options) + options = parse_common_options(options, name) + local specs = {} + function specs:build(root) + return root.add { + type = 'checkbox', + name = elem_name(root, name), + caption = options.locale, + tooltip = options.tooltip, + state = state and true or false, + } + end + return specs +end + +function _M.radio(name, selected, options) + options = parse_common_options(options, name) + local specs = {} + function specs:build(root) + return root.add { + type = 'radiobutton', + name = elem_name(root, name), + caption = options.locale, + tooltip = options.tooltip, + state = selected == name, + } + end + return specs +end + +function _M.dropdown(name, items, selected, options) + options = parse_common_options(options, name) + local item_names = {} + for k, item in pairs(items) do item_names[k] = locale(options.locale_key..':'..item); end + + local specs = {} + function specs:build(root) + local container = root.add { + type = 'flow', + name = elem_name(root, name), + direction = 'horizontal', + } + container.style.vertical_align = 'center' + container.add { + type = 'label', + name = elem_name(container, 'caption'), + caption = options.locale, + tooltip = options.tooltip, + } + container.add { + type = 'drop-down', + name = elem_name(container, 'value'), + items = item_names, + selected_index = selected, + } + return container + end + return specs +end + +function _M.button(name) + local specs = {} + function specs:build(root) + return root.add { + type = 'button', + name = elem_name(root, name), + caption = locale(name), + mouse_button_filter = {'left'}, + } + end + return specs +end + +function _M.number_picker(name, value) + local specs = {} + function specs:build(root) + local container = root.add { + type = 'flow', + name = elem_name(root, name), + direction = 'horizontal', + } + container.style.vertical_align = 'center' + container.add { + type = 'label', + name = elem_name(container, 'caption'), + caption = locale(name), + } + local text_field = container.add { + type = 'textfield', + name = elem_name(container, 'value'), + text = tostring(value or 0), + numeric = true, + allow_negative = true, + allow_decimal = true, + } + text_field.style.width = 100 + return container + end + return specs +end + + +return _M diff --git a/crafting_combinator/script/rc.lua b/crafting_combinator/script/rc.lua new file mode 100644 index 00000000..e392aabe --- /dev/null +++ b/crafting_combinator/script/rc.lua @@ -0,0 +1,338 @@ +local config = require 'config' +local util = require 'script.util' +local gui = require 'script.gui' +local settings_parser = require 'script.settings-parser' +local recipe_selector = require 'script.recipe-selector' +local signals = require 'script.signals' + + +local _M = {} +local combinator_mt = {__index = _M} + + +_M.settings_parser = settings_parser { + mode = {'m', 'string'}, + multiply_by_input = {'i', 'bool'}, + divide_by_output = {'o', 'bool'}, + differ_output = {'d', 'bool'}, + time_multiplier = {'t', 'number'}, +} + + +-- General housekeeping + +function _M.init_global() + global.rc = global.rc or {} + global.rc.data = global.rc.data or {} + global.rc.ordered = global.rc.ordered or {} +end + +function _M.build_machine_cache() + _M.item_map = {} + _M.category_map = {} + for name, prototype in pairs(game.entity_prototypes) do + if prototype.crafting_categories and prototype.items_to_place_this then + for category in pairs(prototype.crafting_categories) do + _M.category_map[category] = _M.category_map[category] or {} + for _, item in pairs(prototype.items_to_place_this) do + _M.item_map[item.name] = {} + table.insert(_M.category_map[category], item.name) + end + end + end + end + for _, recipe in pairs(game.recipe_prototypes) do + for _, product in pairs(recipe.products) do + if _M.item_map[product.name] ~= nil then + table.insert(_M.item_map[product.name], recipe.name) + end + end + end +end + +local _rc_slot_count = nil +function _M.get_rc_slot_count() + if _rc_slot_count == nil then _rc_slot_count = game.entity_prototypes[config.RC_PROXY_NAME].item_slot_count; end + return _rc_slot_count +end + +function _M.on_load() + for _, combinator in pairs(global.rc.data) do setmetatable(combinator, combinator_mt); end +end + + +-- Lifecycle events + +function _M.create(entity) + local combinator = setmetatable({ + entity = entity, + output_proxy = entity.surface.create_entity { + name = config.RC_PROXY_NAME, + position = entity.position, + force = entity.force, + create_build_effect_smoke = false, + }, + input_control_behavior = entity.get_or_create_control_behavior(), + settings = _M.settings_parser:read_or_default(entity, util.deepcopy(config.RC_DEFAULT_SETTINGS)), + last_signal = false, + last_name = false, + last_count = false, + }, combinator_mt) + + entity.connect_neighbour { + wire = defines.wire_type.red, + target_entity = combinator.output_proxy, + source_circuit_id = defines.circuit_connector_id.combinator_output, + } + entity.connect_neighbour { + wire = defines.wire_type.green, + target_entity = combinator.output_proxy, + source_circuit_id = defines.circuit_connector_id.combinator_output, + } + combinator.output_proxy.destructible = false + combinator.control_behavior = combinator.output_proxy.get_or_create_control_behavior() + + global.rc.data[entity.unit_number] = combinator + table.insert(global.rc.ordered, combinator) +end + +function _M.destroy(entity) + local unit_number = entity.unit_number + local combinator = global.rc.data[unit_number] + + combinator.output_proxy.destroy() + settings_parser.destroy(entity) + signals.cache.drop(entity) + + global.rc.data[unit_number] = nil + for k, v in pairs(global.rc.ordered) do + if v.entity.unit_number == unit_number then + table.remove(global.rc.ordered, k) + break + end + end +end + +function _M:update(forced) + if forced then + self.last_signal = false + self.last_name = false + self.last_count = false + end + + if self.settings.mode == 'rec' or self.settings.mode == 'use' then self:find_recipe() + elseif self.settings.mode == 'mac' then self:find_machines(forced) + else self:find_ingredients_and_products(forced); end +end + + +local DUMMY_SIGNAL = {type = 'virtual', name = config.TIME_SIGNAL_NAME} +local param_cache = {} +local function make_params(size) + local params = param_cache[size] + if not params then + params = {} + for i = 1, size do params[i] = {index = i}; end + param_cache[size] = params + end + return params +end + +function _M:find_recipe() + local changed, recipes, count, signal = recipe_selector.get_recipes( + self.entity, defines.circuit_connector_id.combinator_input, + self.settings.mode == 'rec' and 'products' or 'ingredients', + self.last_signal, self.settings.multiply_by_input and self.last_count or nil + ) + + if not changed then return; end + self.last_signal = signal + self.last_count = count + + local params = make_params(table_size(recipes)) + local index = 1 + local slots = _M.get_rc_slot_count() + + count = self.settings.multiply_by_input and count or 1 + local round = self.settings.mode == 'use' and math.floor or math.ceil + for i, recipe in pairs(recipes) do + local param = params[i] + if not recipe.recipe.hidden and recipe.recipe.enabled then + param.signal = recipe_selector.get_signal(recipe.recipe.name) + param.count = self.settings.differ_output and index or (self.settings.divide_by_output and round(count/recipe.amount) or count) + param.index = index + index = index + 1 + elseif slots > index then + param.signal = DUMMY_SIGNAL + param.count = 0 + param.index = slots + slots = slots - 1 + end + end + + self.control_behavior.parameters = params +end + +function _M:find_ingredients_and_products() + local changed, recipe, input_count = recipe_selector.get_recipe( + self.entity, + defines.circuit_connector_id.combinator_input, + self.last_name, + self.settings.multiply_by_input and self.last_count or nil + ) + + if not changed then return; end + + self.last_name = recipe and recipe.name + self.last_count = input_count + + if recipe and (recipe.hidden or not recipe.enabled) then recipe = nil; end + + local params = {} + + if recipe then + local crafting_multiplier = self.settings.multiply_by_input and input_count or 1 + for i, ing in pairs( + self.settings.mode == 'prod' and recipe.products or + self.settings.mode == 'ing' and recipe.ingredients or {} + ) do + local amount = math.ceil( + tonumber(ing.amount or ing.amount_min or ing.amount_max) * crafting_multiplier + * (tonumber(ing.probability) or 1) + ) + + params[i] = { + signal = {type = ing.type, name = ing.name}, + count = self.settings.differ_output and i or util.simulate_overflow(amount), + index = i, + } + end + + table.insert(params, { + signal = {type = 'virtual', name = config.TIME_SIGNAL_NAME}, + count = util.simulate_overflow(math.floor(tonumber(recipe.energy) * self.settings.time_multiplier * crafting_multiplier)), + index = _M.get_rc_slot_count(), + }) + end + + self.control_behavior.parameters = params +end + + +function _M:find_machines() + local changed, recipe, input_count = recipe_selector.get_recipe( + self.entity, + defines.circuit_connector_id.combinator_input, + self.last_name, + self.settings.multiply_by_input and self.last_count or nil + ) + + if not changed then return; end + + self.last_name = recipe and recipe.name + self.last_count = input_count + + if recipe and (recipe.hidden or not recipe.enabled) then recipe = nil; end + + if _M.item_map == nil then _M.build_machine_cache(); end + + local params = {} + local index = 1 + if recipe and recipe.category then + for _, item in pairs(_M.category_map[recipe.category] or {}) do + for _, recipe in pairs(_M.item_map[item]) do + local mac_res = self.entity.force.recipes[recipe] + if mac_res and not mac_res.hidden and mac_res.enabled then + table.insert(params, { + signal = recipe_selector.get_signal(item), + count = self.settings.multiply_by_input and input_count or + self.settings.differ_output and index or 1, + index = index, + }) + index = index + 1 + break + end + end + end + end + self.control_behavior.parameters = params +end + + +function _M:open(player_index) + local root = gui.entity(self.entity, { + gui.section { + name = 'mode', + gui.radio('ing', self.settings.mode, {locale='mode-ing', tooltip=true}), + gui.radio('prod', self.settings.mode, {locale='mode-prod', tooltip=true}), + gui.radio('use', self.settings.mode, {locale='mode-use', tooltip=true}), + gui.radio('rec', self.settings.mode, {locale='mode-rec', tooltip=true}), + gui.radio('mac', self.settings.mode, {locale='mode-mac', tooltip=true}), + }, + gui.section { + name = 'misc', + gui.checkbox('multiply-by-input', self.settings.multiply_by_input, {tooltip=true}), + gui.checkbox('divide-by-output', self.settings.divide_by_output, {tooltip=true}), + gui.checkbox('differ-output', self.settings.differ_output, {tooltip=true}), + gui.number_picker('time-multiplier', self.settings.time_multiplier), + } + }):open(player_index) + + self:update_disabled_checkboxes(root) +end + +function _M:on_checked_changed(name, state, element) + local category, name = name:gsub(':.*$', ''), name:gsub('^.-:', ''):gsub('-', '_') + if category == 'mode' then + self.settings.mode = name + for _, el in pairs(element.parent.children) do + if el.type == 'radiobutton' then + local _, _, el_name = gui.parse_entity_gui_name(el.name) + el.state = el_name == 'mode:'..name + end + end + end + if category == 'misc' then self.settings[name] = state; end + + self:update_disabled_checkboxes(gui.get_root(element)) + + self.settings_parser:update(self.entity, self.settings) + self:update(true) +end + +function _M:update_disabled_checkboxes(root) + self:disable_checkbox(root, 'misc:divide-by-output', 'divide_by_output', + (self.settings.mode == 'rec' or self.settings.mode == 'use') and not self.settings.differ_output) + self:disable_checkbox(root, 'misc:multiply-by-input', 'multiply_by_input', + not self.settings.divide_by_output and not self.settings.differ_output, + self.settings.divide_by_output or self.settings.multiply_by_input) + self:disable_checkbox(root, 'misc:differ-output', 'differ_output', + not self.settings.multiply_by_input) +end + +function _M:disable_checkbox(root, name, setting_name, enable, set_state) + set_state = set_state or false + local checkbox = gui.find_element(root, gui.name(self.entity, name)) + if checkbox.enabled ~= enable then + checkbox.enabled = enable + checkbox.state = set_state + self.settings[setting_name] = set_state + end +end + +function _M:on_text_changed(name, text) + if name == 'misc:time-multiplier:value' then + self.settings.time_multiplier = tonumber(text) or self.settings.time_multiplier + self.settings_parser:update(self.entity, self.settings) + self:update(true) + end +end + + +function _M:update_inner_positions() + settings_parser.move_entity(self.entity, self.output_proxy.position) + self.output_proxy.teleport(self.entity.position) +end + + +return _M diff --git a/crafting_combinator/script/recipe-selector.lua b/crafting_combinator/script/recipe-selector.lua new file mode 100644 index 00000000..1ac63516 --- /dev/null +++ b/crafting_combinator/script/recipe-selector.lua @@ -0,0 +1,82 @@ +local signals = require 'script.signals' + + +local _M = {} + + +function _M.get_recipe(entity, circuit_id, last_name, last_count) + local highest = signals.get_highest(entity, circuit_id, last_count ~= nil) + + if not highest then + if last_name == nil then return false; end + return true, nil, 0 + end + + if last_name == highest.signal.name and (last_count == nil or last_count == highest.count) then return false; end + return true, entity.force.recipes[highest.signal.name], highest.count +end + + +local get_recipes_cache = { + ingredients = { + item = {}, + fluid = {}, + }, + products = { + item = {}, + fluid = {}, + }, +} +function _M.get_recipes(entity, circuit_id, mode, last_signal, last_count) + local highest = signals.get_highest(entity, circuit_id, last_count ~= nil) + + if not highest or highest.signal.type == 'virtual' then + if last_signal == nil then return false; end + return true, {}, 0, nil + end + + if last_signal + and last_signal.name == highest.signal.name + and last_signal.type == highest.signal.type + and (last_count == nil or last_count == highest.count) + then return false; end + + local cache = get_recipes_cache[mode][highest.signal.type] + local force_index = entity.force.index + cache[force_index] = cache[force_index] or {} + if cache[force_index][highest.signal.name] then + return true, cache[force_index][highest.signal.name], highest.count, highest.signal + end + + local results = {} + for name, recipe in pairs(entity.force.recipes) do + for _, product in pairs(recipe[mode]) do + if product.name == highest.signal.name and product.type == highest.signal.type then + local amount = tonumber(product.amount or product.amount_min or product.amount_max) or 1 + amount = amount * (tonumber(product.probability) or 1) + table.insert(results, {recipe = recipe, amount = amount}) + break + end + end + end + + cache[force_index][highest.signal.name] = results + return true, results, highest.count, highest.signal +end + + +local signal_cache = {} +function _M.get_signal(recipe) + local signal = signal_cache[recipe] + if not signal then + signal = { + name = recipe, + type = (game.item_prototypes[recipe] and 'item') or (game.fluid_prototypes[recipe] and 'fluid') or 'virtual' + } + signal_cache[recipe] = signal + end + return signal +end + + +return _M diff --git a/crafting_combinator/script/semver.lua b/crafting_combinator/script/semver.lua new file mode 100644 index 00000000..747d2b12 --- /dev/null +++ b/crafting_combinator/script/semver.lua @@ -0,0 +1,210 @@ +local semver = { + _VERSION = '1.2.1', + _DESCRIPTION = 'semver for Lua', + _URL = 'https://github.com/kikito/semver.lua', + _LICENSE = [[ + MIT LICENSE + + Copyright (c) 2015 Enrique GarcΓ­a Cota + + Permission is hereby granted, free of charge, to any person obtaining a + copy of tother software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and tother permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ]] + } + + local function checkPositiveInteger(number, name) + assert(number >= 0, name .. ' must be a valid positive number') + assert(math.floor(number) == number, name .. ' must be an integer') + end + + local function present(value) + return value and value ~= '' + end + + -- splitByDot("a.bbc.d") == {"a", "bbc", "d"} + local function splitByDot(str) + str = str or "" + local t, count = {}, 0 + str:gsub("([^%.]+)", function(c) + count = count + 1 + t[count] = c + end) + return t + end + + local function parsePrereleaseAndBuildWithSign(str) + local prereleaseWithSign, buildWithSign = str:match("^(-[^+]+)(+.+)$") + if not (prereleaseWithSign and buildWithSign) then + prereleaseWithSign = str:match("^(-.+)$") + buildWithSign = str:match("^(+.+)$") + end + assert(prereleaseWithSign or buildWithSign, ("The parameter %q must begin with + or - to denote a prerelease or a build"):format(str)) + return prereleaseWithSign, buildWithSign + end + + local function parsePrerelease(prereleaseWithSign) + if prereleaseWithSign then + local prerelease = prereleaseWithSign:match("^-(%w[%.%w-]*)$") + assert(prerelease, ("The prerelease %q is not a slash followed by alphanumerics, dots and slashes"):format(prereleaseWithSign)) + return prerelease + end + end + + local function parseBuild(buildWithSign) + if buildWithSign then + local build = buildWithSign:match("^%+(%w[%.%w-]*)$") + assert(build, ("The build %q is not a + sign followed by alphanumerics, dots and slashes"):format(buildWithSign)) + return build + end + end + + local function parsePrereleaseAndBuild(str) + if not present(str) then return nil, nil end + + local prereleaseWithSign, buildWithSign = parsePrereleaseAndBuildWithSign(str) + + local prerelease = parsePrerelease(prereleaseWithSign) + local build = parseBuild(buildWithSign) + + return prerelease, build + end + + local function parseVersion(str) + local sMajor, sMinor, sPatch, sPrereleaseAndBuild = str:match("^(%d+)%.?(%d*)%.?(%d*)(.-)$") + assert(type(sMajor) == 'string', ("Could not extract version number(s) from %q"):format(str)) + local major, minor, patch = tonumber(sMajor), tonumber(sMinor), tonumber(sPatch) + local prerelease, build = parsePrereleaseAndBuild(sPrereleaseAndBuild) + return major, minor, patch, prerelease, build + end + + + -- return 0 if a == b, -1 if a < b, and 1 if a > b + local function compare(a,b) + return a == b and 0 or a < b and -1 or 1 + end + + local function compareIds(myId, otherId) + if myId == otherId then return 0 + elseif not myId then return -1 + elseif not otherId then return 1 + end + + local selfNumber, otherNumber = tonumber(myId), tonumber(otherId) + + if selfNumber and otherNumber then -- numerical comparison + return compare(selfNumber, otherNumber) + -- numericals are always smaller than alphanums + elseif selfNumber then + return -1 + elseif otherNumber then + return 1 + else + return compare(myId, otherId) -- alphanumerical comparison + end + end + + local function smallerIdList(myIds, otherIds) + local myLength = #myIds + local comparison + + for i=1, myLength do + comparison = compareIds(myIds[i], otherIds[i]) + if comparison ~= 0 then + return comparison == -1 + end + -- if comparison == 0, continue loop + end + + return myLength < #otherIds + end + + local function smallerPrerelease(mine, other) + if mine == other or not mine then return false + elseif not other then return true + end + + return smallerIdList(splitByDot(mine), splitByDot(other)) + end + + local methods = {} + + function methods:nextMajor() + return semver(self.major + 1, 0, 0) + end + function methods:nextMinor() + return semver(self.major, self.minor + 1, 0) + end + function methods:nextPatch() + return semver(self.major, self.minor, self.patch + 1) + end + + local mt = { __index = methods } + function mt:__eq(other) + return self.major == other.major and + self.minor == other.minor and + self.patch == other.patch and + self.prerelease == other.prerelease + -- notice that build is ignored for precedence in semver 2.0.0 + end + function mt:__lt(other) + if self.major ~= other.major then return self.major < other.major end + if self.minor ~= other.minor then return self.minor < other.minor end + if self.patch ~= other.patch then return self.patch < other.patch end + return smallerPrerelease(self.prerelease, other.prerelease) + -- notice that build is ignored for precedence in semver 2.0.0 + end + -- This works like the "pessimisstic operator" in Rubygems. + -- if a and b are versions, a ^ b means "b is backwards-compatible with a" + -- in other words, "it's safe to upgrade from a to b" + function mt:__pow(other) + if self.major == 0 then + return self == other + end + return self.major == other.major and + self.minor <= other.minor + end + function mt:__tostring() + local buffer = { ("%d.%d.%d"):format(self.major, self.minor, self.patch) } + if self.prerelease then table.insert(buffer, "-" .. self.prerelease) end + if self.build then table.insert(buffer, "+" .. self.build) end + return table.concat(buffer) + end + + local function new(major, minor, patch, prerelease, build) + assert(major, "At least one parameter is needed") + + if type(major) == 'string' then + major,minor,patch,prerelease,build = parseVersion(major) + end + patch = patch or 0 + minor = minor or 0 + + checkPositiveInteger(major, "major") + checkPositiveInteger(minor, "minor") + checkPositiveInteger(patch, "patch") + + local result = {major=major, minor=minor, patch=patch, prerelease=prerelease, build=build} + return setmetatable(result, mt) + end + + setmetatable(semver, { __call = function(_, ...) return new(...) end }) + semver._VERSION= semver(semver._VERSION) + + return semver + \ No newline at end of file diff --git a/crafting_combinator/script/settings-parser.lua b/crafting_combinator/script/settings-parser.lua new file mode 100644 index 00000000..a6c5b55c --- /dev/null +++ b/crafting_combinator/script/settings-parser.lua @@ -0,0 +1,116 @@ +local config = require 'config' + + +local _M = {} + + +local function get_entity(entity, position) + return entity.surface.find_entity(config.SETTINGS_ENTITY_NAME, position or entity.position) +end +local function get_or_create_entity(entity) + return get_entity(entity) or entity.surface.create_entity { + name = config.SETTINGS_ENTITY_NAME, + position = entity.position, + force = entity.force, + create_build_effect_smoke = false, + alert_parameters = {alert_message = 'nil'}, + } +end + + +function _M.def(defs) + local res = {by_key = {}, by_name = {}} + for name, def in pairs(defs) do + if type(name) == 'string' then + if type(def) ~= 'table' then def = {def, 'raw'}; end + local key, typ = def[1], def[2] + local tdef = {name = name, key = key, type = typ} + res.by_key[key] = tdef; res.by_name[name] = tdef + if not typ then + tdef.type = 'table' + tdef.defs = _M.def(def) + end + end + end + return res +end + + +local function _dump(defs, tab) + if type(tab) ~= 'table' then return tab; end + local res = {} + for name, value in pairs(tab) do + local def = defs.by_name[name] + if def then + if def.type == 'table' then res[def.key] = _dump(def.defs, value) + elseif def.type == 'bool' then res[def.key] = (value and 1) or 0 + else res[def.key] = value; end + end + end + return res +end +function _M.dump(defs, tab) return serpent.line(_dump(defs, tab), {compact = true}); end + + +local function _parse(defs, raw) + if type(raw) ~= 'table' then return raw; end + local res = {} + for key, value in pairs(raw) do + local def = defs.by_key[key] + if def then + if def.type == 'table' then res[def.name] = _parse(def.defs, value) + elseif def.type == 'bool' then res[def.name] = value == 1 + else res[def.name] = value; end + end + end + return res +end +function _M.parse(defs, str) return _parse(defs, load('return '..str)()); end + + +function _M.read(defs, entity, default) + local e = get_or_create_entity(entity) + local res = _M.parse(defs, e.alert_parameters.alert_message) + if not res and default ~= nil then _M.update(defs, entity, default); end + return res or default +end + +function _M.update(defs, entity, settings) + local e = get_or_create_entity(entity) + e.alert_parameters = {alert_message = _M.dump(defs, settings)} +end + +function _M.move_entity(entity, original_position) + local e = get_entity(entity, original_position) + if e then e.teleport(entity.position); end +end + +function _M.destroy(entity) + local e = get_entity(entity) + if e then e.destroy(); end +end + + +function _M.fill_defaults(target, defaults) + for key, value in pairs(defaults) do + if target[key] == nil then target[key] = value + elseif type(value) == 'table' then _M.fill_defaults(target[key], value); end + end +end + + +return setmetatable(_M, {__call=function(cls, defs) + return { + defs = _M.def(defs), + parse = function(self, str) return _M.parse(self.defs, str); end, + dump = function(self, tab) return _M.dump(self.defs, tab); end, + read = function(self, entity, default) return _M.read(self.defs, entity, default); end, + update = function(self, entity, settings) return _M.update(self.defs, entity, settings); end, + + read_or_default = function(self, entity, default) + local res = self:read(entity, default) + _M.fill_defaults(res, default) + return res + end, + } +end}) diff --git a/crafting_combinator/script/signals.lua b/crafting_combinator/script/signals.lua new file mode 100644 index 00000000..f4afeaf7 --- /dev/null +++ b/crafting_combinator/script/signals.lua @@ -0,0 +1,182 @@ +local config = require 'config' + + +local _M = {} + + +_M.EVERYTHING = {type = 'virtual', name = 'signal-everything'} + + +local cache_mt = { + __index = function(self, key) + local entity = self.__entity.surface.create_entity { + name = config.SIGNAL_CACHE_NAME, + position = self.__entity.position, + force = self.__entity.force, + create_build_effect_smoke = false, + } + self.__cache_entities[key] = entity + entity.destructible = false + + self.__entity.connect_neighbour { + wire = defines.wire_type.red, + target_entity = entity, + source_circuit_id = self.__circuit_id or nil, + } + self.__entity.connect_neighbour { + wire = defines.wire_type.green, + target_entity = entity, + source_circuit_id = self.__circuit_id or nil, + } + + self[key] = { + __cb = entity.get_or_create_control_behavior(), + } + + return self[key] + end, +} + + +function _M.init_global() + global.signals = global.signals or {} + global.signals.cache = global.signals.cache or {} +end + +function _M.on_load() + for _, cache in pairs(global.signals.cache) do setmetatable(cache, cache_mt); end +end + + +_M.cache = {} + +function _M.cache.get(entity, circuit_id) + local cache = global.signals.cache[entity.unit_number] + if not cache then + cache = setmetatable({ + __entity = entity, + __circuit_id = circuit_id or false, -- Avoid calling __index when the id is nil + __cache_entities = {}, + }, cache_mt) + global.signals.cache[entity.unit_number] = cache + end + return cache +end + +function _M.cache.reset(entity, name) + local cache = global.signals.cache[entity.unit_number] + if cache and rawget(cache, name) then + global.signals.cache[entity.unit_number][name] = { + control_behavior = entity.get_or_create_control_behavior(), + } + end +end + +function _M.cache.drop(entity) + local cache = global.signals.cache[entity.unit_number] + if cache then + for key, e in pairs(cache.__cache_entities) do e.destroy(); end + global.signals.cache[entity.unit_number] = nil + end +end + +function _M.cache.move(entity) + local cache = global.signals.cache[entity.unit_number] + if cache then + for _, e in pairs(cache.__cache_entities) do e.teleport(entity); end + end +end + + +function _M.get_merged_signals(entity, circuit_id) + return circuit_id and (entity.get_merged_signals(circuit_id) or {}) or entity.get_merged_signals() or {} +end +function _M.get_merged_signal(entity, signal, circuit_id) + if circuit_id then return entity.get_merged_signal(signal, circuit_id) + else return entity.get_merged_signal(signal); end +end + + +function _M.get_highest(entity, circuit_id, update_count) + local cache = _M.cache.get(entity, circuit_id) + + if cache.highest.valid + and not cache.highest.__cb.disabled + and (not cache.highest.value or not cache.highest_present.__cb.disabled) + then + if update_count and cache.highest.value and cache.highest_count.__cb.disabled then + local count = _M.get_merged_signal(entity, cache.highest.value.signal, circuit_id) + + cache.highest.value.count = count + cache.highest_count.__cb.circuit_condition = {condition = { + comparator = '=', + first_signal = cache.highest.value.signal, + constant = count, + }} + end + return cache.highest.value + end + + local highest = nil + for _, signal in pairs(_M.get_merged_signals(entity, circuit_id)) do + if highest == nil or signal.count > highest.count then highest = signal; end + end + + cache.highest.valid = true + + if highest then + cache.highest.value = highest + cache.highest.__cb.circuit_condition = {condition = { + comparator = '≀', + first_signal = _M.EVERYTHING, + second_signal = highest.signal, + }} + + cache.highest_present.__cb.circuit_condition = {condition = { + comparator = 'β‰ ', + first_signal = highest.signal, + constant = 0, + }} + + cache.highest_count.__cb.circuit_condition = {condition = { + comparator = '=', + first_signal = highest.signal, + constant = highest.count, + }} + else + cache.highest.value = nil + cache.highest.__cb.circuit_condition = {condition = { + comparator = '=', + first_signal = _M.EVERYTHING, + constant = 0, + }} + end + + return highest +end + + +function _M.watch_highest_presence(entity, circuit_id) + local highest = _M.get_highest(entity, circuit_id) + local cache = _M.cache.get(entity, circuit_id) + + if not highest then + cache.signal_present.valid = false + else + cache.signal_present.valid = true + cache.signal_present.__cb.circuit_condition = {condition = { + comparator = '>', + first_signal = highest.signal, + constant = 0, + }} + end + + return highest +end +function _M.signal_present(entity, circuit_id) + local cache = _M.cache.get(entity, circuit_id) + return cache.signal_present.valid and not cache.signal_present.__cb.disabled +end + + +return _M diff --git a/crafting_combinator/script/util.lua b/crafting_combinator/script/util.lua new file mode 100644 index 00000000..21056708 --- /dev/null +++ b/crafting_combinator/script/util.lua @@ -0,0 +1,141 @@ +local _M = {} + + +_M.CONTAINER_TYPES = { + ['container'] = true, + ['logistic-container'] = true, +} + + +-- Coppied from __core__/lualib/util.lua +function _M.deepcopy(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + -- don't copy factorio rich objects + elseif object.__self then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + return _copy(object) +end + + +local _module_limitations +function _M.module_limitations() + if not _module_limitations then + _module_limitations = {} + for _, item in pairs(game.item_prototypes) do + if item.type == 'module' and next(item.limitations) then + _module_limitations[item.name] = {} + for _, limitation in pairs(item.limitations) do _module_limitations[item.name][limitation] = true; end + end + end + end + return _module_limitations +end + + +function _M.simulate_overflow(number) return (number + 2147483648) % 4294967296 - 2147483648; end + + +function _M.class(tab) + tab = tab or {} + tab.__mt = {__index = tab} + tab.__class = tab + function tab.__new() end + function tab.new(...) + local res = setmetatable({}, tab.__mt) + return res:__new(...) or res + end + return setmetatable(tab, {__call = function(class, ...) return class.new(...); end}) +end + + +_M.direction = _M.class() +function _M.direction:__new(direction) + if type(direction) == 'table' then return direction; end + self.direction = (direction or 0) % 8 +end + +_M.direction.VECTOR_MAP = { + [defines.direction.north] = { 0, -1}, + [defines.direction.northeast] = { 1, -1}, + [defines.direction.east] = { 1, 0}, + [defines.direction.southeast] = { 1, 1}, + [defines.direction.south] = { 0, 1}, + [defines.direction.southwest] = {-1, 1}, + [defines.direction.west] = {-1, 0}, + [defines.direction.northwest] = {-1, -1}, +} + +function _M.direction:get() return self.direction; end + +function _M.direction:vector() return _M.position(table.unpack(_M.direction.VECTOR_MAP[self:get()])); end + +function _M.direction:rotate(degrees) + local round = degrees > 0 and math.floor or math.ceil + local steps = round((degrees % 360) / 45) + return _M.direction(self.direction + steps) +end + + +_M.position = _M.class() +function _M.position:__new(x, y) + if x and not y then + self.x = x.x or x[1] + self.y = x.y or x[2] + else + self.x = x or 0 + self.y = y or 0 + end +end + +function _M.position.__mt:__unm() return _M.position(-self.x, -self.y); end +function _M.position.__mt:__add(other) return _M.position(self.x + other.x, self.y + other.y); end +function _M.position.__mt:__sub(other) return _M.position(self.x - other.x, self.y - other.y); end +function _M.position.__mt:__mul(q) + if type(q) ~= 'number' then self, q = q, self; end + return _M.position(self.x * q, self.y * q) +end + +function _M.position.direction_vector(direction) return _M.direction(direction):vector(); end + +function _M.position:shift(direction, distance) + return self + (_M.direction(direction):vector() * distance) +end + +function _M.position:expand(x, y) return _M.area(self):expand(x, y); end + + +_M.area = _M.class() +function _M.area:__new(left_top, right_bottom) + if left_top.left_top then left_top, right_bottom = left_top.left_top, left_top.right_bottom; end + self.left_top = _M.position(left_top) + self.right_bottom = _M.position(right_bottom or left_top) +end + +function _M.area:expand(x, y) + y = y or x + return _M.area({self.left_top.x - x, self.left_top.y - y}, {self.right_bottom.x + x, self.right_bottom.y + y}) +end + +function _M.area.__mt:__add(other) + if self.__class ~= _M.area then return other + self; end + return _M.area(self.left_top + other, self.right_bottom + other) +end +function _M.area.__mt:__sub(other) + if self.__class ~= _M.area then return other - self; end + return self + (-other) +end + +return _M diff --git a/crafting_combinator/settings.lua b/crafting_combinator/settings.lua new file mode 100644 index 00000000..5c933c31 --- /dev/null +++ b/crafting_combinator/settings.lua @@ -0,0 +1,19 @@ +local config = require "config" + + +data:extend{ + { + type = "int-setting", + name = config.REFRESH_RATE_CC_NAME, + setting_type = "runtime-global", + default_value = config.REFRESH_RATE_CC, + minimum_value = 0, + }, + { + type = "int-setting", + name = config.REFRESH_RATE_RC_NAME, + setting_type = "runtime-global", + default_value = config.REFRESH_RATE_RC, + minimum_value = 0, + }, +} diff --git a/crafting_combinator/thumbnail.png b/crafting_combinator/thumbnail.png new file mode 100644 index 00000000..2b26b945 Binary files /dev/null and b/crafting_combinator/thumbnail.png differ diff --git a/deep-storage-unit/changelog.txt b/deep-storage-unit/changelog.txt new file mode 100644 index 00000000..72e66e95 --- /dev/null +++ b/deep-storage-unit/changelog.txt @@ -0,0 +1,226 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.3.4 +Date: 2023.1.17 + Features: + - Fix crash with interstellar map +--------------------------------------------------------------------------------------------------- +Version: 1.3.3 +Date: 11.21.2022 + Features: + - Changed text of center panel blank-gui-item +--------------------------------------------------------------------------------------------------- +Version: 1.3.2 +Date: 11.21.2022 + Features: + - https://mods.factorio.com/mod/deep-storage-unit/discussion/637c08dc963feacd858ce67f +--------------------------------------------------------------------------------------------------- +Version: 1.3.1 +Date: 11.19.2022 + Features: + - Fixed a crash when another mod updates and deletes an item contained in a unit + - Fixed a crash when blueprinting the memory unit combinator + - Fixed that a blueprint ghost of a MU combinator could still output signals + - Fixed that the power gui was displaying a lower number than normal +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 11.19.2022 + Features: + - Memory units now have a custom gui + - Memory units no longer give memory elements when destroyed. Instead, the items are saved directly to the unit's item + - Removed memory elements and memory communicators + - se_allow_in_space = true + - Fixed entity.clone() not working + - Reduced power usage + - Changed recipe and technology + - Fixed an issue with the packing tape mod. + - Changed fmu item subgroup to "storage" (with the rest of the chests) + - Items with additional data, such as blueprints or items-with-tags can no longer be stored + - Fixed an bug that would freeze units whenever an item's stack size was changed +--------------------------------------------------------------------------------------------------- +Version: 1.2.15 +Date: 7.11.2022 + Features: + - Fixed memory units going into "dumb chest mode" when they were placed + - Fixed a crash involving empty memory elements + - Fixed circuit signals still being sent out after being blueprinted + - Removed k2 warehouses setting + - Massive performance optimizations + - You can now place multiple empty elements in a memory unit to extract an even amount into all elements +--------------------------------------------------------------------------------------------------- +Version: 1.2.14 +Date: 3.25.2021 + Features: + - performance optimizations +--------------------------------------------------------------------------------------------------- +Version: 1.2.10 +Date: 10.10.2020 + Features: + - Added compatiblity with Picker Dollies + - Moved all items into a seperate subgroup +--------------------------------------------------------------------------------------------------- +Version: 1.2.9 +Date: 10.9.2020 + Features: + - Fixed a bug that was causing power usage to be lower than intended +--------------------------------------------------------------------------------------------------- +Version: 1.2.8 +Date: 10.9.2020 + Features: + - Fixed a bug +--------------------------------------------------------------------------------------------------- +Version: 1.2.7 +Date: 10.9.2020 + Features: + - Added memory unit communicators. These can disable map icons and alerts for specfic units. + - Added a library module. This will make it easier for me to apply changes to this and the main mod +--------------------------------------------------------------------------------------------------- +Version: 1.2.6 +Date: 10.7.2020 + Features: + - Fixed a bug that caused units to waste FPS when they were empty + - Fluid units will now work if they are above 90% power, instead of having to be 100% + - Fixed empty memory element cycling + - Fixed a crash when you removed a mod that added a fluid that was stored in a unit +--------------------------------------------------------------------------------------------------- +Version: 1.2.5 +Date: 10.4.2020 + Features: + - Compatible with space exploration +--------------------------------------------------------------------------------------------------- +Version: 1.2.4 +Date: 9.17.2020 + Features: + - You can now store circuit connections in blueprints + - Compatible with space exploration +--------------------------------------------------------------------------------------------------- +Version: 1.2.3 +Date: 9.16.2020 + Features: + - Improved error handling when a unit is corrupted +--------------------------------------------------------------------------------------------------- +Version: 1.2.2 +Date: 9.16.2020 + Features: + - Changed recipe for empty element +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 9.15.2020 + Features: + - Increased update rate from 4 sec to 1 sec +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 9.12.2020 + Features: + - Added empty memory elements + - Fixed a crash whenever you tried to start a tutorial + - Added map tags + - Added an icon when the unit is on low power + - New thumbnail +--------------------------------------------------------------------------------------------------- +Version: 1.1.13 +Date: 9.11.2020 + Features: + - Added support for cloning the unit. A stepping stone to full space exploration compatiblity + - Added a setting to remove warehouses in krastorio +--------------------------------------------------------------------------------------------------- +Version: 1.1.12 +Date: 9.10.2020 + Features: + - Removed log spam +--------------------------------------------------------------------------------------------------- +Version: 1.1.11 +Date: 9.10.2020 + Features: + - Fix issue with space exploration + - Added setting for 0 power usage + - Changed some descriptions + - Allowed fluid tempatures in the future +--------------------------------------------------------------------------------------------------- +Version: 1.1.10 +Date: 9.10.2020 + Features: + - Fix that units sometimes went inactive +--------------------------------------------------------------------------------------------------- +Version: 1.1.9 +Date: 9.9.2020 + Features: + - No power icon now renders in the center of objects. + - Added a setting to change power usage +--------------------------------------------------------------------------------------------------- +Version: 1.1.8 +Date: 9.5.2020 + Features: + - Fixed a killer bug. +--------------------------------------------------------------------------------------------------- +Version: 1.1.7 +Date: 9.5.2020 + Features: + - Made a new addon for fluids + - Increased power usage + - Fixed an issue with the item count display +--------------------------------------------------------------------------------------------------- +Version: 1.1.6 +Date: 9.2.2020 + Features: + - Fixed a corruption +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 9.2.2020 + Features: + - Better support for deconstruction planner + - Fixed the crash that I thought I fixed last update but I actually didn't +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 9.2.2020 + Features: + - Fixed a rare crash + - Breaking a memory unit will no longer spill 6 rows of item into your inventory +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 9.1.2020 + Features: + - Added numbers up to 999.9 nongennovemnonagintillion +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 9.1.2020 + Features: + - Changed the sprite for the memory unit + - Improve UPS +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 8.30.2020 + Features: + - Changed tech icon + - Changed memory element icon + - Added an API for other mods to change stuff in the memory unit +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 8.30.2020 + Features: + - Renamed deep storage units to memory units + - Renamed storage data to memory elements + - Improved the item icon for the memory unit + - Memory unit can now connect to the cirucit network + - Fixed a crash when you used explosive rockets on the memory unit + - Increased the base power drain from 60W to 60kW +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 8.28.2020 + Features: + - Added a command to give a storage data +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 8.27.2020 + Features: + - Added names for numbers up to 999 vigintillion + - Fixed spelling of undecillion +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 8.27.2020 + Features: + - New thumbnail +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 8.27.2020 + Features: + - Initial release diff --git a/deep-storage-unit_1.3.5/control.lua b/deep-storage-unit/control.lua similarity index 100% rename from deep-storage-unit_1.3.5/control.lua rename to deep-storage-unit/control.lua diff --git a/deep-storage-unit_1.3.5/data.lua b/deep-storage-unit/data.lua similarity index 100% rename from deep-storage-unit_1.3.5/data.lua rename to deep-storage-unit/data.lua diff --git a/deep-storage-unit_1.3.5/graphics/entity/hr-memory-unit.png b/deep-storage-unit/graphics/entity/hr-memory-unit.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/entity/hr-memory-unit.png rename to deep-storage-unit/graphics/entity/hr-memory-unit.png diff --git a/deep-storage-unit_1.3.5/graphics/entity/memory-unit.png b/deep-storage-unit/graphics/entity/memory-unit.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/entity/memory-unit.png rename to deep-storage-unit/graphics/entity/memory-unit.png diff --git a/deep-storage-unit_1.3.5/graphics/entity/nothing.png b/deep-storage-unit/graphics/entity/nothing.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/entity/nothing.png rename to deep-storage-unit/graphics/entity/nothing.png diff --git a/deep-storage-unit_1.3.5/graphics/icon/extract.png b/deep-storage-unit/graphics/icon/extract.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/icon/extract.png rename to deep-storage-unit/graphics/icon/extract.png diff --git a/deep-storage-unit_1.3.5/graphics/icon/insert.png b/deep-storage-unit/graphics/icon/insert.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/icon/insert.png rename to deep-storage-unit/graphics/icon/insert.png diff --git a/deep-storage-unit_1.3.5/graphics/icon/memory-unit.png b/deep-storage-unit/graphics/icon/memory-unit.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/icon/memory-unit.png rename to deep-storage-unit/graphics/icon/memory-unit.png diff --git a/deep-storage-unit_1.3.5/graphics/icon/packing-tape-50.png b/deep-storage-unit/graphics/icon/packing-tape-50.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/icon/packing-tape-50.png rename to deep-storage-unit/graphics/icon/packing-tape-50.png diff --git a/deep-storage-unit_1.3.5/graphics/technology/memory-unit.png b/deep-storage-unit/graphics/technology/memory-unit.png similarity index 100% rename from deep-storage-unit_1.3.5/graphics/technology/memory-unit.png rename to deep-storage-unit/graphics/technology/memory-unit.png diff --git a/deep-storage-unit_1.3.5/gui-styles.lua b/deep-storage-unit/gui-styles.lua similarity index 100% rename from deep-storage-unit_1.3.5/gui-styles.lua rename to deep-storage-unit/gui-styles.lua diff --git a/deep-storage-unit_1.3.5/gui.lua b/deep-storage-unit/gui.lua similarity index 100% rename from deep-storage-unit_1.3.5/gui.lua rename to deep-storage-unit/gui.lua diff --git a/deep-storage-unit_1.3.5/info.json b/deep-storage-unit/info.json similarity index 100% rename from deep-storage-unit_1.3.5/info.json rename to deep-storage-unit/info.json diff --git a/deep-storage-unit_1.3.5/locale/en/config.cfg b/deep-storage-unit/locale/en/config.cfg similarity index 100% rename from deep-storage-unit_1.3.5/locale/en/config.cfg rename to deep-storage-unit/locale/en/config.cfg diff --git a/deep-storage-unit_1.3.5/migrations/1.2.15.lua b/deep-storage-unit/migrations/1.2.15.lua similarity index 100% rename from deep-storage-unit_1.3.5/migrations/1.2.15.lua rename to deep-storage-unit/migrations/1.2.15.lua diff --git a/deep-storage-unit_1.3.5/settings.lua b/deep-storage-unit/settings.lua similarity index 100% rename from deep-storage-unit_1.3.5/settings.lua rename to deep-storage-unit/settings.lua diff --git a/fluid-memory-storage_1.4.6/shared.lua b/deep-storage-unit/shared.lua similarity index 100% rename from fluid-memory-storage_1.4.6/shared.lua rename to deep-storage-unit/shared.lua diff --git a/deep-storage-unit_1.3.5/thumbnail.png b/deep-storage-unit/thumbnail.png similarity index 100% rename from deep-storage-unit_1.3.5/thumbnail.png rename to deep-storage-unit/thumbnail.png diff --git a/deep-storage-unit_1.3.5/changelog.txt b/deep-storage-unit_1.3.5/changelog.txt deleted file mode 100644 index b39af9cf..00000000 --- a/deep-storage-unit_1.3.5/changelog.txt +++ /dev/null @@ -1,231 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 -Date: 2023.8.17 - Features: - - Increase hidden inventory size 60->300 ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 -Date: 2023.1.17 - Features: - - Fix crash with interstellar map ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 -Date: 11.21.2022 - Features: - - Changed text of center panel blank-gui-item ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 11.21.2022 - Features: - - https://mods.factorio.com/mod/deep-storage-unit/discussion/637c08dc963feacd858ce67f ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 11.19.2022 - Features: - - Fixed a crash when another mod updates and deletes an item contained in a unit - - Fixed a crash when blueprinting the memory unit combinator - - Fixed that a blueprint ghost of a MU combinator could still output signals - - Fixed that the power gui was displaying a lower number than normal ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 11.19.2022 - Features: - - Memory units now have a custom gui - - Memory units no longer give memory elements when destroyed. Instead, the items are saved directly to the unit's item - - Removed memory elements and memory communicators - - se_allow_in_space = true - - Fixed entity.clone() not working - - Reduced power usage - - Changed recipe and technology - - Fixed an issue with the packing tape mod. - - Changed fmu item subgroup to "storage" (with the rest of the chests) - - Items with additional data, such as blueprints or items-with-tags can no longer be stored - - Fixed an bug that would freeze units whenever an item's stack size was changed ---------------------------------------------------------------------------------------------------- -Version: 1.2.15 -Date: 7.11.2022 - Features: - - Fixed memory units going into "dumb chest mode" when they were placed - - Fixed a crash involving empty memory elements - - Fixed circuit signals still being sent out after being blueprinted - - Removed k2 warehouses setting - - Massive performance optimizations - - You can now place multiple empty elements in a memory unit to extract an even amount into all elements ---------------------------------------------------------------------------------------------------- -Version: 1.2.14 -Date: 3.25.2021 - Features: - - performance optimizations ---------------------------------------------------------------------------------------------------- -Version: 1.2.10 -Date: 10.10.2020 - Features: - - Added compatiblity with Picker Dollies - - Moved all items into a seperate subgroup ---------------------------------------------------------------------------------------------------- -Version: 1.2.9 -Date: 10.9.2020 - Features: - - Fixed a bug that was causing power usage to be lower than intended ---------------------------------------------------------------------------------------------------- -Version: 1.2.8 -Date: 10.9.2020 - Features: - - Fixed a bug ---------------------------------------------------------------------------------------------------- -Version: 1.2.7 -Date: 10.9.2020 - Features: - - Added memory unit communicators. These can disable map icons and alerts for specfic units. - - Added a library module. This will make it easier for me to apply changes to this and the main mod ---------------------------------------------------------------------------------------------------- -Version: 1.2.6 -Date: 10.7.2020 - Features: - - Fixed a bug that caused units to waste FPS when they were empty - - Fluid units will now work if they are above 90% power, instead of having to be 100% - - Fixed empty memory element cycling - - Fixed a crash when you removed a mod that added a fluid that was stored in a unit ---------------------------------------------------------------------------------------------------- -Version: 1.2.5 -Date: 10.4.2020 - Features: - - Compatible with space exploration ---------------------------------------------------------------------------------------------------- -Version: 1.2.4 -Date: 9.17.2020 - Features: - - You can now store circuit connections in blueprints - - Compatible with space exploration ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 9.16.2020 - Features: - - Improved error handling when a unit is corrupted ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 9.16.2020 - Features: - - Changed recipe for empty element ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 9.15.2020 - Features: - - Increased update rate from 4 sec to 1 sec ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 9.12.2020 - Features: - - Added empty memory elements - - Fixed a crash whenever you tried to start a tutorial - - Added map tags - - Added an icon when the unit is on low power - - New thumbnail ---------------------------------------------------------------------------------------------------- -Version: 1.1.13 -Date: 9.11.2020 - Features: - - Added support for cloning the unit. A stepping stone to full space exploration compatiblity - - Added a setting to remove warehouses in krastorio ---------------------------------------------------------------------------------------------------- -Version: 1.1.12 -Date: 9.10.2020 - Features: - - Removed log spam ---------------------------------------------------------------------------------------------------- -Version: 1.1.11 -Date: 9.10.2020 - Features: - - Fix issue with space exploration - - Added setting for 0 power usage - - Changed some descriptions - - Allowed fluid tempatures in the future ---------------------------------------------------------------------------------------------------- -Version: 1.1.10 -Date: 9.10.2020 - Features: - - Fix that units sometimes went inactive ---------------------------------------------------------------------------------------------------- -Version: 1.1.9 -Date: 9.9.2020 - Features: - - No power icon now renders in the center of objects. - - Added a setting to change power usage ---------------------------------------------------------------------------------------------------- -Version: 1.1.8 -Date: 9.5.2020 - Features: - - Fixed a killer bug. ---------------------------------------------------------------------------------------------------- -Version: 1.1.7 -Date: 9.5.2020 - Features: - - Made a new addon for fluids - - Increased power usage - - Fixed an issue with the item count display ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 9.2.2020 - Features: - - Fixed a corruption ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 9.2.2020 - Features: - - Better support for deconstruction planner - - Fixed the crash that I thought I fixed last update but I actually didn't ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 9.2.2020 - Features: - - Fixed a rare crash - - Breaking a memory unit will no longer spill 6 rows of item into your inventory ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 9.1.2020 - Features: - - Added numbers up to 999.9 nongennovemnonagintillion ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 9.1.2020 - Features: - - Changed the sprite for the memory unit - - Improve UPS ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 8.30.2020 - Features: - - Changed tech icon - - Changed memory element icon - - Added an API for other mods to change stuff in the memory unit ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 8.30.2020 - Features: - - Renamed deep storage units to memory units - - Renamed storage data to memory elements - - Improved the item icon for the memory unit - - Memory unit can now connect to the cirucit network - - Fixed a crash when you used explosive rockets on the memory unit - - Increased the base power drain from 60W to 60kW ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 8.28.2020 - Features: - - Added a command to give a storage data ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 8.27.2020 - Features: - - Added names for numbers up to 999 vigintillion - - Fixed spelling of undecillion ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 8.27.2020 - Features: - - New thumbnail ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 8.27.2020 - Features: - - Initial release diff --git a/efficient-research_0.0.3/data.lua b/efficient-research/data.lua similarity index 100% rename from efficient-research_0.0.3/data.lua rename to efficient-research/data.lua diff --git a/efficient-research_0.0.3/gfx/research-prod.png b/efficient-research/gfx/research-prod.png similarity index 100% rename from efficient-research_0.0.3/gfx/research-prod.png rename to efficient-research/gfx/research-prod.png diff --git a/efficient-research_0.0.3/info.json b/efficient-research/info.json similarity index 100% rename from efficient-research_0.0.3/info.json rename to efficient-research/info.json diff --git a/efficient-research_0.0.3/locale/en/stuff.cfg b/efficient-research/locale/en/stuff.cfg similarity index 100% rename from efficient-research_0.0.3/locale/en/stuff.cfg rename to efficient-research/locale/en/stuff.cfg diff --git a/efficient-research_0.0.3/thumbnail.png b/efficient-research/thumbnail.png similarity index 100% rename from efficient-research_0.0.3/thumbnail.png rename to efficient-research/thumbnail.png diff --git a/erm_libs_1.0.5/changelog.txt b/erm_libs/changelog.txt similarity index 100% rename from erm_libs_1.0.5/changelog.txt rename to erm_libs/changelog.txt diff --git a/erm_libs_1.0.5/info.json b/erm_libs/info.json similarity index 100% rename from erm_libs_1.0.5/info.json rename to erm_libs/info.json diff --git a/erm_libs_1.0.5/prototypes/animation_db.lua b/erm_libs/prototypes/animation_db.lua similarity index 100% rename from erm_libs_1.0.5/prototypes/animation_db.lua rename to erm_libs/prototypes/animation_db.lua diff --git a/erm_libs_1.0.5/prototypes/teamcolor_manager.lua b/erm_libs/prototypes/teamcolor_manager.lua similarity index 100% rename from erm_libs_1.0.5/prototypes/teamcolor_manager.lua rename to erm_libs/prototypes/teamcolor_manager.lua diff --git a/erm_zerg_hd_assets/QA.md b/erm_zerg_hd_assets/QA.md new file mode 100644 index 00000000..d58444f4 --- /dev/null +++ b/erm_zerg_hd_assets/QA.md @@ -0,0 +1,3 @@ +Must QA against the following mods +- all EMR - Zerg variants +- Latest version of Natural_Evolution_Enemies (TheSAGuys version) \ No newline at end of file diff --git a/erm_zerg_hd_assets/README.md b/erm_zerg_hd_assets/README.md new file mode 100644 index 00000000..e4ca9dc0 --- /dev/null +++ b/erm_zerg_hd_assets/README.md @@ -0,0 +1,119 @@ +# ERM Zerg HD +ERM Zerg HD graphic assets. + +#### PLEASE DO NOT COPY THESE ASSETS TO YOUR OWN MODS. Please use mod dependencies if you plan to use these assets. HD asset duplication is bad for game performance! + +##### Licenses +Lua code files are licensed under GNU LGPLv3 + +However, Starcraft graphic and sound assets are properties of Blizzard Entertainment Inc. They are used for educational purposes. The original game is now free to play. + +##### Credits +- Code by SHlNZ0U & heyqule +- Graphic extraction by SHlNZ0U + + +### How to use? +##### 1. Add erm_zerg_hd_assets as your mod dependency in info.json +```json +{ + "factorio_version": "1.1", + "dependencies": [ + "erm_zerg_hd_assets >= 1.0.0" + ] +} +``` +##### 2. Using assets within your mod, Here is a list of possible animations [animation_api_calls.lua](https://github.com/heyqule/erm_zerg_hd_assets/blob/main/animation_api_calls.lua) +```lua +--- Include graphics in your mods file +local ZergAnimation = require('__erm_zerg_hd_assets__/animation_db') +``` + +##### 3. Assign entity animation that has multiple layers +``` +--- Entity_Type, Name, Animation_Type, Unit_Scale(optional) +unit['animations'] = ZergAnimation.get_layer_animation('unit','zergling','run') +``` + +##### 4. Assign entity animation that has single layer +``` +-- Single layer animation +projectile['animation'] = ZergAnimation.get_single_animation('projectiles','spore1','projectile') +``` + + +##### 5. What if you want to change the properties of the animation? +``` +local animation = ZergAnimation.get_single_animation('projectile','spore1') +animation['unit_scale'] = 5 +projectile['animation'] = animation +``` + +##### 6. What if you want to change the properties of the multi layer animation? Run it through a loop :) +``` +local animation = ZergAnimation.get_layer_animation('unit','zergling','run') +for index, _ in pairs(animation['layers']) do + animation['layer'][index]['unit_scale'] = 5 +end +projectile['animation'] = animation +``` + +##### Include Sound, see the class for details +``` +local ZergSound = require('__erm_zerg_hd_assets__/sound') +unit['dying_sound'] = ZergSound.enemy_death('zergling', 1.0) +``` + +##### What if you don't like my animation setup. +you can link the assets directly to your animation and then define your own parameters. +``` +{ + filename = '__erm_zerg_hd_assets__/graphics/entity/units/broodling/broodling-attack.png' +} +``` + +##### Use the creep on other buildings +``` +building['spawn_decoration'] = { + { + decorative = "creep-decal", + spawn_min = 3, + spawn_max = 5, + spawn_min_radius = 2, + spawn_max_radius = 7 + }, + { + decorative = "creep-decal-transparent", + spawn_min = 4, + spawn_max = 20, + spawn_min_radius = 2, + spawn_max_radius = 14, + radius_curve = 0.9 + } +} +``` + +##### Linking icons +``` +{ + icon = "__erm_zerg_hd_assets__/graphics/entity/icons/units/zergling.png", + icon_size = 64, +} +``` + +##### Changing Animation Speed +```lua +local animations = ZergAnimation.get_layer_animation('unit','zergling','run') +for index, animation in pairs(animations['layers']) do + -- 1 = 60fps, 0.5 = 30fps and etc + -- Animation DB mostly use 0.5 and 0.2 animation speed. + ZergAnimation.change_animation_speed(animation, 0.5) +end +unit['run_animation'] = animations +``` + +##### Updating team color (Please see https://github.com/heyqule/erm_zerg_hd for complete example.) +1. copy settings.sample.lua and update-teamcolour.sample.lua to your mod +2. add require('update-teamcolour') to the end of your data.lua +3. make neccessary changes for update-teamcolour code +4. Test and repeat #3 until you are happy with the results. diff --git a/erm_zerg_hd_assets/animation_api_calls.lua b/erm_zerg_hd_assets/animation_api_calls.lua new file mode 100644 index 00000000..0d443cbe --- /dev/null +++ b/erm_zerg_hd_assets/animation_api_calls.lua @@ -0,0 +1,113 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/26/2023 11:37 PM +--- +--- This file lists all callable animation functions. + +local AnimationDB = require('animation_db') + +--- Passing scale into layered animation, the following example double the scale +--- AnimationDB.get_layered_animations('death', 'small_rubble', 'run', 2) + +--- Subtype for corpse animation are usually "main". when you use scale, you can do one of the following +--- AnimationDB.get_single_animation('units', 'broodling', 'corpse', 'main', 2) +--- AnimationDB.get_single_animation('units', 'broodling', 'corpse', nil, 2) + +--- Some units use run animation for its attack animations + +--- Death animations +AnimationDB.get_layered_animations('death', 'small_rubble', 'run') +AnimationDB.get_layered_animations('death', 'large_rubble', 'run') +AnimationDB.get_layered_animations('death', 'small_building', 'explosion') +AnimationDB.get_layered_animations('death', 'large_building', 'explosion') +AnimationDB.get_layered_animations('death', 'terran_cmd', 'explosion') + + +---- Projectile and Explosions +AnimationDB.get_single_animation('projectiles','mutalisk','projectile') +AnimationDB.get_single_animation('projectiles','hydralisk','projectile') +AnimationDB.get_single_animation('projectiles','guardian','projectile') +AnimationDB.get_single_animation('projectiles','parasite','projectile') +AnimationDB.get_single_animation('projectiles','lurker','explosion') +AnimationDB.get_layered_animations('projectiles','colony','explosion') +AnimationDB.get_layered_animations('projectiles','mutalisk','explosion') +AnimationDB.get_layered_animations('projectiles','hydralisk','explosion') +AnimationDB.get_layered_animations('projectiles','blood_cloud','explosion') +AnimationDB.get_layered_animations('projectiles','dark_swam_80','explosion') +AnimationDB.get_layered_animations('projectiles','dark_swam','explosion') +AnimationDB.get_layered_animations('projectiles','acid_cloud','explosion') +AnimationDB.get_layered_animations('projectiles','devourer_cloud','explosion') +AnimationDB.get_layered_animations('projectiles','scourge_explosion','explosion') + +--- Buildings +AnimationDB.get_layered_animations('buildings', 'overmind', 'run') +AnimationDB.get_layered_animations('buildings', 'chamber', 'run') +AnimationDB.get_layered_animations('buildings', 'defiler_mound', 'run') +AnimationDB.get_layered_animations('buildings', 'greater_spire', 'run') +AnimationDB.get_layered_animations('buildings', 'hatchery', 'run') +AnimationDB.get_layered_animations('buildings', 'hive', 'run') +AnimationDB.get_layered_animations('buildings', 'hydraden', 'run') +AnimationDB.get_layered_animations('buildings', 'infested_cmd', 'run') +AnimationDB.get_layered_animations('buildings', 'lair', 'run') +AnimationDB.get_layered_animations('buildings', 'nyduspit', 'run') +AnimationDB.get_layered_animations('buildings', 'queen_nest', 'run') +AnimationDB.get_layered_animations('buildings', 'spawning_pool', 'run') +AnimationDB.get_layered_animations('buildings', 'spire', 'run') +AnimationDB.get_layered_animations('buildings', 'spore_colony', 'folded') +AnimationDB.get_layered_animations('buildings', 'sunken_colony', 'folded') +AnimationDB.get_layered_animations('buildings', 'sunken_colony', 'attack') +AnimationDB.get_layered_animations('buildings', 'ultralisk_cavern', 'run') + + +--- Units +AnimationDB.get_layered_animations('units', 'broodling', 'run') +AnimationDB.get_layered_animations('units', 'broodling', 'attack') +AnimationDB.get_single_animation('units', 'broodling', 'corpse') + +AnimationDB.get_layered_animations('units', 'defiler', 'run') +AnimationDB.get_single_animation('units', 'defiler', 'corpse') + +AnimationDB.get_layered_animations('units', 'devourer', 'run') +AnimationDB.get_layered_animations('units', 'devourer', 'attack') +AnimationDB.get_single_animation('units', 'devourer', 'corpse') + +AnimationDB.get_layered_animations('units', 'drone', 'run') +AnimationDB.get_layered_animations('units', 'drone', 'attack') +AnimationDB.get_single_animation('units', 'drone', 'corpse') + +AnimationDB.get_layered_animations('units', 'guardian', 'run') +AnimationDB.get_single_animation('units', 'guardian', 'corpse') + +AnimationDB.get_layered_animations('units', 'hydralisk', 'run') +AnimationDB.get_layered_animations('units', 'hydralisk', 'attack') +AnimationDB.get_single_animation('projectiles', 'hydralisk','attack_attachment') +AnimationDB.get_single_animation('units', 'hydralisk', 'corpse') + +AnimationDB.get_layered_animations('units', 'infested', 'run') +AnimationDB.get_single_animation('units', 'infested', 'corpse') + +AnimationDB.get_layered_animations('units', 'lurker', 'run') +AnimationDB.get_layered_animations('units', 'lurker', 'attack') +AnimationDB.get_single_animation('units', 'lurker', 'corpse') + +AnimationDB.get_layered_animations('units', 'mutalisk', 'run') +AnimationDB.get_single_animation('units', 'mutalisk', 'corpse') + +AnimationDB.get_layered_animations('units', 'overlord', 'run') +AnimationDB.get_single_animation('units', 'overlord', 'corpse') + +AnimationDB.get_layered_animations('units', 'queen', 'run') +AnimationDB.get_layered_animations('units', 'queen', 'attack') +AnimationDB.get_single_animation('units', 'queen', 'corpse') + +AnimationDB.get_layered_animations('units', 'scourge', 'run') +AnimationDB.get_single_animation('units', 'scourge', 'corpse') + +AnimationDB.get_layered_animations('units', 'ultralisk', 'run') +AnimationDB.get_layered_animations('units', 'ultralisk', 'attack') +AnimationDB.get_single_animation('units', 'ultralisk', 'corpse') + +AnimationDB.get_layered_animations('units', 'zergling', 'run') +AnimationDB.get_layered_animations('units', 'zergling', 'attack') +AnimationDB.get_single_animation('units', 'zergling', 'corpse') diff --git a/erm_zerg_hd_assets/animation_db.lua b/erm_zerg_hd_assets/animation_db.lua new file mode 100644 index 00000000..73961c5b --- /dev/null +++ b/erm_zerg_hd_assets/animation_db.lua @@ -0,0 +1,55 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 2:09 AM +--- + +local AnimationDB = require('__erm_libs__/prototypes/animation_db') + +--- Naming convention EntityType_Name. EntityType follows the graphics folder structure. +--- e.g [unit][zergling], [building][hive], [projectiles][spore], etc +--- +--- death and projectile are handled differently because they are mostly single layer animation. +AnimationDB.data = { + buildings = { + overmind = require('__erm_zerg_hd_assets__/db/buildings/boss_overmind'), + chamber = require('__erm_zerg_hd_assets__/db/buildings/chamber'), + defiler_mound = require('__erm_zerg_hd_assets__/db/buildings/defiler_mound'), + greater_spire = require('__erm_zerg_hd_assets__/db/buildings/greater_spire'), + hatchery = require('__erm_zerg_hd_assets__/db/buildings/hatchery'), + hive = require('__erm_zerg_hd_assets__/db/buildings/hive'), + hydraden = require('__erm_zerg_hd_assets__/db/buildings/hydraden'), + infested_cmd = require('__erm_zerg_hd_assets__/db/buildings/infested_cmd'), + infested_cmd_infestor = require('__erm_zerg_hd_assets__/db/buildings/infested_cmd_infestor'), + lair = require('__erm_zerg_hd_assets__/db/buildings/lair'), + nyduspit = require('__erm_zerg_hd_assets__/db/buildings/nyduspit'), + queen_nest = require('__erm_zerg_hd_assets__/db/buildings/queen_nest'), + spawning_pool = require('__erm_zerg_hd_assets__/db/buildings/spawning_pool'), + spire = require('__erm_zerg_hd_assets__/db/buildings/spire'), + spore_colony = require('__erm_zerg_hd_assets__/db/buildings/spore_colony'), + sunken_colony = require('__erm_zerg_hd_assets__/db/buildings/sunken_colony'), + ultralisk_cavern = require('__erm_zerg_hd_assets__/db/buildings/ultralisk_cavern'), + }, + death = require('__erm_zerg_hd_assets__/db/death'), + projectiles = require('__erm_zerg_hd_assets__/db/projectiles'), + units = { + broodling = require('__erm_zerg_hd_assets__/db/units/broodling'), + defiler = require('__erm_zerg_hd_assets__/db/units/defiler'), + devourer = require('__erm_zerg_hd_assets__/db/units/devourer'), + drone = require('__erm_zerg_hd_assets__/db/units/drone'), + guardian = require('__erm_zerg_hd_assets__/db/units/guardian'), + hydralisk = require('__erm_zerg_hd_assets__/db/units/hydralisk'), + infested = require('__erm_zerg_hd_assets__/db/units/infested'), + lurker = require('__erm_zerg_hd_assets__/db/units/lurker'), + mutalisk = require('__erm_zerg_hd_assets__/db/units/mutalisk'), + overlord = require('__erm_zerg_hd_assets__/db/units/overlord'), + queen = require('__erm_zerg_hd_assets__/db/units/queen'), + scourge = require('__erm_zerg_hd_assets__/db/units/scourge'), + ultralisk = require('__erm_zerg_hd_assets__/db/units/ultralisk'), + zergling = require('__erm_zerg_hd_assets__/db/units/zergling'), + }, + default_team_color = {r=96, g=48, b=0, a=166} + --default_team_color = {r=128, g=64, b=0, a=0} +} + +return AnimationDB \ No newline at end of file diff --git a/erm_zerg_hd_assets/changelog.txt b/erm_zerg_hd_assets/changelog.txt new file mode 100644 index 00000000..fc702e60 --- /dev/null +++ b/erm_zerg_hd_assets/changelog.txt @@ -0,0 +1,53 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.2.1 +Date: 2023-08-26 + + Changes: + - Fixed missing sunken colony attack shadow in AnimationDB + - Update sound class + +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2023-08-19 + + Changes: + - Removed all deprecated graphics to reduce size. + - Consolidated all death animation to be 24 frame / s + + Bugfixes: + - Fix a crash from a typo in info.json + +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2023-08-11 + + Features: + - Team color support + + Changes: + - Fixed entity from sunker-colony to sunken-colony. + - Change decal's render_layer, so they are not hidden under Alien Biomes + - AnimationDB code clean up + - AnimationDB now use 24f/s for most animations and 12f/s frames for a few. + + Graphics: + - Various changes on entity resolution, some animations utilize file splits. + - Some old files are now marked deprecated, will be removed soon to reduce package size. + +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 2023-07-29 + + Bugfixes: + - Fix mutalisk animation is using hydralisk's. + +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 2023-07-26 + + Features: + - Added SC Remaster Graphics Asset Pack + - Provide re-usable integration for other mods. + - Sound class, allows easy integration of Zerg sounds + - AnimationDB class, allows easy integration of Zerg animations + - Detailed tutorials will be provided on github later. \ No newline at end of file diff --git a/erm_zerg_hd_assets/data.lua b/erm_zerg_hd_assets/data.lua new file mode 100644 index 00000000..04532cbd --- /dev/null +++ b/erm_zerg_hd_assets/data.lua @@ -0,0 +1,6 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 2:11 AM +--- +require('decoratives') \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/boss_overmind.lua b/erm_zerg_hd_assets/db/buildings/boss_overmind.lua new file mode 100644 index 00000000..9f78859a --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/boss_overmind.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:37 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/overmind/overmind_shell.png", + width = 909, + height = 664, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/overmind/overmind_shell_teamcolour.png", + width = 909, + height = 664, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/chamber.lua b/erm_zerg_hd_assets/db/buildings/chamber.lua new file mode 100644 index 00000000..b6bc0027 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/chamber.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/chamber/chamber.png", + width = 392, + height = 524, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/chamber/chamber_teamcolour.png", + width = 392, + height = 524, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/defiler_mound.lua b/erm_zerg_hd_assets/db/buildings/defiler_mound.lua new file mode 100644 index 00000000..d108150b --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/defiler_mound.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/defiler_mound/defiler_mound.png", + width = 523, + height = 518, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/defiler_mound/defiler_mound_teamcolour.png", + width = 523, + height = 518, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/greater_spire.lua b/erm_zerg_hd_assets/db/buildings/greater_spire.lua new file mode 100644 index 00000000..ad9c2601 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/greater_spire.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/greater_spire/greater_spire.png", + width = 519, + height = 784, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/greater_spire/greater_spire_teamcolour.png", + width = 519, + height = 784, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/hatchery.lua b/erm_zerg_hd_assets/db/buildings/hatchery.lua new file mode 100644 index 00000000..76297989 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/hatchery.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hatchery/hatchery.png", + width = 790, + height = 640, + frame_count = 6, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hatchery/hatchery_teamcolour.png", + width = 790, + height = 640, + frame_count = 6, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/hive.lua b/erm_zerg_hd_assets/db/buildings/hive.lua new file mode 100644 index 00000000..a798cd6c --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/hive.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hive/hive.png", + width = 774, + height = 913, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hive/hive_teamcolour.png", + width = 774, + height = 913, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/hydraden.lua b/erm_zerg_hd_assets/db/buildings/hydraden.lua new file mode 100644 index 00000000..419ff96f --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/hydraden.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hydraden/hydraden.png", + width = 710, + height = 512, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/hydraden/hydraden_teamcolour.png", + width = 710, + height = 512, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/infested_cmd.lua b/erm_zerg_hd_assets/db/buildings/infested_cmd.lua new file mode 100644 index 00000000..60d93565 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/infested_cmd.lua @@ -0,0 +1,43 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/infested_cmd/command_centre.png", + width = 524, + height = 646, + frame_count = 6, + direction_count = 1, + animation_speed = 0.2, + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + light = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/infested_cmd/command_centre_mask.png", + width = 524, + height = 646, + frame_count = 6, + direction_count = 1, + animation_speed = 0.2, + scale = 0.5, + shift = {0.0, -0.05} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/infested_cmd/command_centre_teamcolour.png", + flags = { "mask" }, + width = 524, + height = 646, + frame_count = 1, + repeat_count = 6, + direction_count = 1, + animation_speed = 0.2, + scale = 0.5, + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/infested_cmd_infestor.lua b/erm_zerg_hd_assets/db/buildings/infested_cmd_infestor.lua new file mode 100644 index 00000000..5011ce8d --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/infested_cmd_infestor.lua @@ -0,0 +1,29 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/infested_cmd/infestor.png", + width = 524, + height = 646, + frame_count = 6, + direction_count = 1, + animation_speed = 0.2, + scale = 0.5 + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/infested_cmd/infestor_teamcolour.png", + flags = { "mask" }, + width = 524, + height = 646, + frame_count = 6, + direction_count = 1, + animation_speed = 0.2, + scale = 0.5, + } + } +} diff --git a/erm_zerg_hd_assets/db/buildings/lair.lua b/erm_zerg_hd_assets/db/buildings/lair.lua new file mode 100644 index 00000000..4c986e99 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/lair.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/lair/lair.png", + width = 786, + height = 655, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/lair/lair_teamcolour.png", + width = 786, + height = 655, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/nyduspit.lua b/erm_zerg_hd_assets/db/buildings/nyduspit.lua new file mode 100644 index 00000000..fdd774d9 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/nyduspit.lua @@ -0,0 +1,44 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/nyduspit/nyduspit.png", + width = 515, + height = 512, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/nyduspit/nyduspit_teamcolour.png", + width = 515, + height = 512, + frame_count = 1, + repeat_count = 10, + animation_speed = 0.2, + direction_count = 1, + scale = 0.5 + }, + glow = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/nyduspit/nyduspit_mask.png", + width = 515, + height = 512, + frame_count = 5, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + shift = { 0.0, -0.05 }, + scale = 0.5 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/queen_nest.lua b/erm_zerg_hd_assets/db/buildings/queen_nest.lua new file mode 100644 index 00000000..217d5dd9 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/queen_nest.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/queen_nest/queen_nest.png", + width = 388, + height = 515, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/queen_nest/queen_nest_teamcolour.png", + width = 388, + height = 515, + frame_count = 1, + repeat_count = 8, + animation_speed = 0.2, + direction_count = 1, + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/spawning_pool.lua b/erm_zerg_hd_assets/db/buildings/spawning_pool.lua new file mode 100644 index 00000000..cf742dfa --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/spawning_pool.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spawning_pool/spawning_pool.png", + width = 386, + height = 531, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spawning_pool/spawning_pool_teamcolour.png", + width = 386, + height = 531, + frame_count = 1, + repeat_count = 8, + animation_speed = 0.2, + direction_count = 1, + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/spire.lua b/erm_zerg_hd_assets/db/buildings/spire.lua new file mode 100644 index 00000000..e2c9de63 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/spire.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spire/spire.png", + width = 515, + height = 520, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spire/spire_teamcolour.png", + width = 515, + height = 520, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/spore_colony.lua b/erm_zerg_hd_assets/db/buildings/spore_colony.lua new file mode 100644 index 00000000..dade8546 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/spore_colony.lua @@ -0,0 +1,55 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + folded = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spore_colony/spore_colony.png", + run_mode = "forward", + width = 508, + height = 515, + frame_count = 1, + direction_count = 1, + scale = 0.5, + }, + shadow = { + shift = { 0.25, 0.1 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spore_colony/spore_colony_teamcolour.png", + flags = { "mask" }, + width = 508, + height = 515, + frame_count = 1, + direction_count = 1, + scale = 0.5, + } + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spore_colony/spore_colony_attack.png", + width = 508, + height = 515, + frame_count = 4, + animation_speed = 0.2, + direction_count = 1, + scale = 0.5 + }, + shadow = { + shift = { 0.25, 0.1 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/spore_colony/spore_colony_teamcolour.png", + width = 508, + height = 515, + frame_count = 1, + repeat_count = 4, + animation_speed = 0.2, + direction_count = 1, + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/sunken_colony.lua b/erm_zerg_hd_assets/db/buildings/sunken_colony.lua new file mode 100644 index 00000000..3e298ec9 --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/sunken_colony.lua @@ -0,0 +1,52 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + folded = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/sunken_colony/sunken_colony.png", + width = 521, + height = 503, + frame_count = 1, + direction_count = 1, + scale = 0.5, + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/sunken_colony/sunken_colony_teamcolour.png", + width = 521, + height = 503, + frame_count = 1, + direction_count = 1, + scale = 0.5, + }, + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/sunken_colony/sunken_colony_attack.png", + width = 521, + height = 503, + frame_count = 11, + direction_count = 3, + scale = 0.5, + run_mode = "forward-then-backward", + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/sunken_colony/sunken_colony_attack_teamcolour.png", + width = 521, + height = 503, + frame_count = 11, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5, + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/buildings/ultralisk_cavern.lua b/erm_zerg_hd_assets/db/buildings/ultralisk_cavern.lua new file mode 100644 index 00000000..0a42116f --- /dev/null +++ b/erm_zerg_hd_assets/db/buildings/ultralisk_cavern.lua @@ -0,0 +1,33 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:38 PM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern.png", + width = 640, + height = 512, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + shadow = { + shift = {0.2, 0} + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern_teamcolour.png", + width = 640, + height = 512, + frame_count = 3, + animation_speed = 0.2, + direction_count = 1, + run_mode = "forward-then-backward", + scale = 0.5 + }, + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/death.lua b/erm_zerg_hd_assets/db/death.lua new file mode 100644 index 00000000..4b42ebad --- /dev/null +++ b/erm_zerg_hd_assets/db/death.lua @@ -0,0 +1,75 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 9:07 PM +--- + + +return { + small_rubble = { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/death/zerg_small_rubble.png", + variation_count = 4, + width = 386, + height = 377, + frame_count = 1, + direction_count = 1, + scale = 0.5 + } + } + }, + large_rubble = { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/death/zerg_large_rubble.png", + width = 509, + height = 505, + variation_count = 4, + frame_count = 1, + direction_count = 1, + scale = 0.5 + } + } + }, + large_building = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/death/zerg_building_blood_large.png", + width = 550, + height = 656, + frame_count = 8, + animation_speed = 0.4, + direction_count = 1, + scale = 0.7 + } + } + }, + small_building = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/death/zerg_building_blood_small.png", + width = 344, + height = 342, + frame_count = 8, + animation_speed = 0.4, + direction_count = 1, + scale = 0.7 + } + } + }, + terran_cmd = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/buildings/death/terran_building_explosion_large.png", + width = 819, + height = 661, + frame_count = 10, + animation_speed = 0.4, + direction_count = 1, + scale = 0.7, + draw_as_glow = true, + } + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/projectiles.lua b/erm_zerg_hd_assets/db/projectiles.lua new file mode 100644 index 00000000..85ddb036 --- /dev/null +++ b/erm_zerg_hd_assets/db/projectiles.lua @@ -0,0 +1,217 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 11:18 AM +--- + +return { + hydralisk = { + attack_attachment = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/hydra_split.png", + width = 257, + height = 198, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + } + }, + projectile = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/hydra_pr.png", + frame_count = 1, + width = 78, + height = 148, + animation_speed = 0.4, + scale = 0.4 + } + }, + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/hydra_acid.png", + width = 170, + height = 171, + line_length = 8, + frame_count = 8, + animation_speed = 0.4, + scale = 0.4 + } + } + }, + mutalisk = { + projectile = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/spores_1.png", + frame_count = 10, + width = 168, + height = 146, + scale = 0.5, + animation_speed = 0.4, + run_mode = 'forward-then-backward' + } + }, + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/mutalisk_explosion.png", + width = 158, + height = 263, + frame_count = 10, + animation_speed = 0.4, + scale = 1 + } + } + }, + guardian = { + projectile = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/spores_2.png", + width = 107, + height = 108, + frame_count = 4, + animation_speed = 0.4, + scale = 0.5 + } + } + }, + parasite = { + projectile = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/parasite/parasite-run.png", + width = 89, + height = 81, + frame_count = 1, + axially_symmetrical = false, + direction_count = 16, + scale = 0.5, + animation_speed = 0.4 + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/parasite/parasite-run_teamcolour.png", + width = 89, + height = 81, + frame_count = 1, + axially_symmetrical = false, + direction_count = 16, + scale = 0.5, + animation_speed = 0.4 + } + } + }, + lurker = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/lurker_spike.png", + width = 674, + height = 556, + frame_count = 7, + animation_speed = 0.4, + scale = 0.75, + run_mode = "forward-then-backward", + } + } + }, + colony = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/colony_spike.png", + width = 736, + height = 537, + frame_count = 6, + animation_speed = 0.4, + scale = 0.5, + run_mode = "forward-then-backward", + }, + shadow = { + shift = { 0.15, 0.1 } + } + } + }, + blood_cloud = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/defiler_blood.png", + width = 682, + height = 594, + frame_count = 12, + animation_speed = 0.4, + scale = 0.5 + } + } + }, + dark_swam_80 = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/darkswarm-80.png", + width = 256, + height = 256, + frame_count = 35, + frame_sequence = {1,2,3,4,5,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,5,4,3,2,1}, + animation_speed = 0.4, + scale = 2 + } + } + }, + dark_swam = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/darkswarm.png", + width = 1060, + height = 832, + line_length = 5, + frame_count = 60, + frame_sequence = {1,2,3,4,5,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,7,8,9,10,9,8,7,6,5,4,3,2,1}, + animation_speed = 0.4, + scale = 0.5 + } + } + }, + acid_cloud = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/snare.png", + width = 596, + height = 743, + frame_count = 13, + animation_speed = 0.4, + scale = 0.5 + } + } + }, + devourer_cloud = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/devourer_puke_hit.png", + width = 462, + height = 475, + frame_count = 10, + animation_speed = 0.4, + scale = 0.375 + } + } + }, + scourge_explosion = { + explosion = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/scourge_explosion.png", + width = 200, + height = 202, + frame_count = 9, + animation_speed = 0.4, + scale = 0.4 + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/projectiles/scourge_explosion_teamcolour.png", + width = 200, + height = 202, + frame_count = 9, + animation_speed = 0.4, + scale = 0.4 + } + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/broodling.lua b/erm_zerg_hd_assets/db/units/broodling.lua new file mode 100644 index 00000000..80ffd1b5 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/broodling.lua @@ -0,0 +1,60 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/broodling/broodling-run.png", + width = 240, + height = 220, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.3, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/broodling/broodling-run_teamcolour.png", + width = 240, + height = 220, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.3, + animation_speed = 0.4, + } + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/broodling/broodling-attack.png", + width = 240, + height = 220, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.3, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/broodling/broodling-death.png", + width = 242, + height = 222, + frame_count = 2, + direction_count = 1, + axially_symmetrical = false, + scale = 0.3, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/defiler.lua b/erm_zerg_hd_assets/db/units/defiler.lua new file mode 100644 index 00000000..72fbd107 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/defiler.lua @@ -0,0 +1,45 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/defiler/defiler-run.png", + width = 297, + height = 309, + frame_count = 8, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/defiler/defiler-run_teamcolour.png", + width = 297, + height = 309, + frame_count = 8, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/defiler/defiler-death.png", + width = 299, + height = 311, + frame_count = 4, + direction_count = 1, + axially_symmetrical = false, + scale = 0.375, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/devourer.lua b/erm_zerg_hd_assets/db/units/devourer.lua new file mode 100644 index 00000000..4cf3e7c2 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/devourer.lua @@ -0,0 +1,74 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/devourer/devourer-run.png", + width = 376, + height = 401, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + run_mode = 'forward-then-backward' + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/devourer/devourer-run_teamcolour.png", + width = 376, + height = 401, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + run_mode = 'forward-then-backward' + }, + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/devourer/devourer-attack.png", + width = 376, + height = 401, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.2, + run_mode = 'forward-then-backward' + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/devourer/devourer-attack_teamcolour.png", + width = 376, + height = 401, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + run_mode = 'forward-then-backward' + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/devourer/devourer-death.png", + width = 552, + height = 658, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.375, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/drone.lua b/erm_zerg_hd_assets/db/units/drone.lua new file mode 100644 index 00000000..d3da2105 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/drone.lua @@ -0,0 +1,75 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = + { + "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-run-1.png", + }, + width = 525, + height = 536, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + slice = 5, + lines_per_file = 8, + line_length = 5, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = + { + "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-run_teamcolour-1.png", + }, + width = 525, + height = 536, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + slice = 5, + lines_per_file = 8, + line_length = 5, + } + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-construction.png", + width = 706, + height = 756, + frame_count = 7, + axially_symmetrical = false, + direction_count = 1, + scale = 0.4, + animation_speed = 0.2, + repeat_count = 12, + }, + shadow = { + shift = { 0.2, 0 } + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/drone/drone-death.png", + width = 525, + height = 536, + frame_count = 7, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/guardian.lua b/erm_zerg_hd_assets/db/units/guardian.lua new file mode 100644 index 00000000..f50f4eb4 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/guardian.lua @@ -0,0 +1,57 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/guardian/guardian-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/guardian/guardian-run-1.png" + }, + width = 421, + height = 420, + frame_count = 7, + slice = 7, + lines_per_file = 8, + line_length = 7, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/guardian/guardian-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/guardian/guardian-run_teamcolour-1.png" + }, + width = 421, + height = 420, + frame_count = 7, + slice = 7, + lines_per_file = 8, + line_length = 7, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/guardian/guardian-death.png", + width = 552, + height = 658, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.375, + animation_speed = 0.4 + } + } +} diff --git a/erm_zerg_hd_assets/db/units/hydralisk.lua b/erm_zerg_hd_assets/db/units/hydralisk.lua new file mode 100644 index 00000000..84b12d49 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/hydralisk.lua @@ -0,0 +1,94 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-run-1.png", + }, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + width = 549, + height = 528, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-1.png", + }, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + width = 549, + height = 528, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + }, + attack = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-attack-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-attack-1.png", + }, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + width = 549, + height = 528, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-1.png", + }, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + width = 549, + height = 528, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/hydralisk/hydralisk-death.png", + width = 549, + height = 528, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/infested.lua b/erm_zerg_hd_assets/db/units/infested.lua new file mode 100644 index 00000000..718180ab --- /dev/null +++ b/erm_zerg_hd_assets/db/units/infested.lua @@ -0,0 +1,57 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/infested/infested-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/infested/infested-run-1.png", + }, + width = 298, + height = 271, + frame_count = 8, + slice = 8, + lines_per_file = 8, + line_length = 8, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/infested/infested-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/infested/infested-run_teamcolour-1.png", + }, + width = 298, + height = 271, + frame_count = 8, + slice = 8, + lines_per_file = 8, + line_length = 8, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/infested/infested-death.png", + width = 300, + height = 273, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/lurker.lua b/erm_zerg_hd_assets/db/units/lurker.lua new file mode 100644 index 00000000..a68286c3 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/lurker.lua @@ -0,0 +1,70 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/lurker/lurker-run.png", + width = 512, + height = 485, + frame_count = 7, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/lurker/lurker-run_teamcolour.png", + width = 512, + height = 485, + frame_count = 7, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/lurker/lurker-attack.png", + width = 512, + height = 485, + frame_count = 23, + frame_sequence = {1,2,3,4,5,6,7,7,7,7,7,7,7,7,7,7,7,7,7,8,9,10,11}, + direction_count = 1, + scale = 0.4, + animation_speed = 0.4 + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/lurker/lurker-attack_teamcolour.png", + width = 512, + height = 485, + frame_count = 23, + frame_sequence = {1,2,3,4,5,6,7,7,7,7,7,7,7,7,7,7,7,7,7,8,9,10,11}, + direction_count = 1, + scale = 0.4, + animation_speed = 0.4 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/lurker/lurker-death.png", + width = 514, + height = 487, + frame_count = 7, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/mutalisk.lua b/erm_zerg_hd_assets/db/units/mutalisk.lua new file mode 100644 index 00000000..a35df38e --- /dev/null +++ b/erm_zerg_hd_assets/db/units/mutalisk.lua @@ -0,0 +1,57 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/mutalisk/mutalisk-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/mutalisk/mutalisk-run-1.png" + }, + width = 520, + height = 512, + frame_count = 5, + slice = 5, + lines_per_file = 8, + line_length = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-1.png" + }, + width = 520, + height = 512, + frame_count = 5, + slice = 5, + lines_per_file = 8, + line_length = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/mutalisk/mutalisk-death.png", + width = 346, + height = 344, + frame_count = 7, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/overlord.lua b/erm_zerg_hd_assets/db/units/overlord.lua new file mode 100644 index 00000000..afdac07c --- /dev/null +++ b/erm_zerg_hd_assets/db/units/overlord.lua @@ -0,0 +1,47 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/overlord/overlord-run.png", + width = 331, + height = 364, + frame_count = 4, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + run_mode = "forward-then-backward", + animation_speed = 0.4 + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/overlord/overlord-run_teamcolour.png", + width = 331, + height = 364, + frame_count = 4, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + run_mode = "forward-then-backward", + animation_speed = 0.4 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/overlord/overlord-death.png", + width = 552, + height = 658, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.375, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/queen.lua b/erm_zerg_hd_assets/db/units/queen.lua new file mode 100644 index 00000000..8ba8b76c --- /dev/null +++ b/erm_zerg_hd_assets/db/units/queen.lua @@ -0,0 +1,70 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/queen/queen-run.png", + width = 538, + height = 512, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/queen/queen-run_teamcolour.png", + width = 538, + height = 512, + frame_count = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4, + }, + }, + attack = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/queen/queen-attack.png", + width = 538, + height = 512, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4 + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/queen/queen-attack_teamcolour.png", + width = 538, + height = 512, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.375, + animation_speed = 0.4 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/queen/queen-death.png", + width = 552, + height = 650, + frame_count = 8, + direction_count = 1, + axially_symmetrical = false, + scale = 0.375, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/scourge.lua b/erm_zerg_hd_assets/db/units/scourge.lua new file mode 100644 index 00000000..f87264d3 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/scourge.lua @@ -0,0 +1,45 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/scourge/scourge-run.png", + width = 196, + height = 182, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + shadow = { + shift = { 4, 0 } + }, + team = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/scourge/scourge-run_teamcolour.png", + width = 196, + height = 182, + frame_count = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/scourge/scourge-death.png", + width = 682, + height = 594, + frame_count = 12, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/ultralisk.lua b/erm_zerg_hd_assets/db/units/ultralisk.lua new file mode 100644 index 00000000..656b6ac3 --- /dev/null +++ b/erm_zerg_hd_assets/db/units/ultralisk.lua @@ -0,0 +1,94 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-run-1.png" + }, + width = 542, + height = 564, + frame_count = 10, + slice = 10, + lines_per_file = 8, + line_length = 10, + axially_symmetrical = false, + direction_count = 16, + scale = 0.54, + animation_speed = 0.2, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-1.png" + }, + width = 542, + height = 564, + frame_count = 10, + slice = 10, + lines_per_file = 8, + line_length = 10, + axially_symmetrical = false, + direction_count = 16, + scale = 0.54, + animation_speed = 0.2, + }, + }, + attack = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-attack-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-attack-1.png" + }, + width = 542, + height = 564, + frame_count = 5, + slice = 5, + lines_per_file = 8, + line_length = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.54, + animation_speed = 0.2 + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-1.png" + }, + width = 542, + height = 564, + frame_count = 5, + slice = 5, + lines_per_file = 8, + line_length = 5, + axially_symmetrical = false, + direction_count = 16, + scale = 0.54, + animation_speed = 0.2 + }, + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/ultralisk/ultralisk-death.png", + width = 542, + height = 564, + frame_count = 11, + direction_count = 1, + axially_symmetrical = false, + scale = 0.54, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/db/units/zergling.lua b/erm_zerg_hd_assets/db/units/zergling.lua new file mode 100644 index 00000000..01067bba --- /dev/null +++ b/erm_zerg_hd_assets/db/units/zergling.lua @@ -0,0 +1,94 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 7/18/2023 8:15 AM +--- + +return { + run = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-run-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-run-1.png" + }, + width = 548, + height = 650, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-run_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-run_teamcolour-1.png" + }, + width = 548, + height = 650, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4, + } + }, + attack = { + main = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-attack-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-attack-1.png" + }, + width = 548, + height = 650, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + }, + shadow = { + shift = { 0.2, 0 } + }, + team = { + filenames = { + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-attack_teamcolour-0.png", + "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-attack_teamcolour-1.png" + }, + width = 548, + height = 650, + frame_count = 6, + slice = 6, + lines_per_file = 8, + line_length = 6, + axially_symmetrical = false, + direction_count = 16, + scale = 0.4, + animation_speed = 0.4 + } + }, + corpse = { + main = { + filename = "__erm_zerg_hd_assets__/graphics/entity/units/zergling/zergling-death.png", + width = 550, + height = 652, + frame_count = 7, + direction_count = 1, + axially_symmetrical = false, + scale = 0.4, + animation_speed = 0.4 + } + } +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/decoratives.lua b/erm_zerg_hd_assets/decoratives.lua new file mode 100644 index 00000000..8a54ae1a --- /dev/null +++ b/erm_zerg_hd_assets/decoratives.lua @@ -0,0 +1,164 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by SHlNZ0U. +--- DateTime: 17/07/2023 2:48 PM +--- + +local final_render_layer = 'decals' +if mods['alien-biomes'] then + final_render_layer = "lower-radius-visualization" +end + +data:extend({ + --- Creep + { + name = "creep-decal", + type = "optimized-decorative", + order = "b[decorative]-b[creep-decal]", + collision_box = { { -6, -4 }, { 6, 4 } }, + collision_mask = { "water-tile", "colliding-with-tiles-only" }, + render_layer = final_render_layer, + tile_layer = 58, + pictures = { + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-00.png", + width = 1118, + height = 799, + draw_as_glow = true, + shift = util.by_pixel(0, 0), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-01.png", + width = 998, + height = 722, + draw_as_glow = true, + shift = util.by_pixel(-4, 1), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-02.png", + width = 1014, + height = 718, + draw_as_glow = true, + shift = util.by_pixel(0, 0), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-03.png", + width = 1010, + height = 718, + draw_as_glow = true, + shift = util.by_pixel(1, 0), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-04.png", + width = 862, + height = 722, + draw_as_glow = true, + shift = util.by_pixel(4, 0), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-05.png", + width = 920, + height = 578, + draw_as_glow = true, + shift = util.by_pixel(14, -1), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-06.png", + width = 968, + height = 708, + draw_as_glow = true, + shift = util.by_pixel(3, -2), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-07.png", + width = 1016, + height = 722, + draw_as_glow = true, + shift = util.by_pixel(0, -1), + scale = 0.75 + } + } + }, + { + name = "creep-decal-transparent", + type = "optimized-decorative", + order = "b[decorative]-b[creep-decal]", + collision_box = { { -6, -4 }, { 6, 4 } }, + collision_mask = { "water-tile", "colliding-with-tiles-only" }, + render_layer = final_render_layer, + tile_layer = 57, + pictures = { + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-00.png", + width = 1118, + height = 792, + draw_as_glow = true, + shift = util.by_pixel(0, -2), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-01.png", + width = 936, + height = 570, + draw_as_glow = true, + shift = util.by_pixel(-3, 23), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-02.png", + width = 848, + height = 540, + draw_as_glow = true, + shift = util.by_pixel(-4, 23), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-03.png", + width = 968, + height = 690, + draw_as_glow = true, + shift = util.by_pixel(4, -7), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-04.png", + width = 800, + height = 720, + draw_as_glow = true, + shift = util.by_pixel(7, -2), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-05.png", + width = 888, + height = 521, + draw_as_glow = true, + shift = util.by_pixel(17, 3), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-06.png", + width = 916, + height = 602, + draw_as_glow = true, + shift = util.by_pixel(6, 9), + scale = 0.75 + }, + { + filename = "__erm_zerg_hd_assets__/graphics/decorative/creep-decal/creep-decal-t-07.png", + width = 1004, + height = 710, + draw_as_glow = true, + shift = util.by_pixel(3, -3), + scale = 0.75 + } + } + } +}) \ No newline at end of file diff --git a/erm_zerg_hd_assets/deprecated-files.md b/erm_zerg_hd_assets/deprecated-files.md new file mode 100644 index 00000000..60b930b4 --- /dev/null +++ b/erm_zerg_hd_assets/deprecated-files.md @@ -0,0 +1,20 @@ +OLD FILES +- infested_cmd.png - ok +- sunken_colony.png - ok (REPLACED with new) +- spore_colony.png - ok (REPLACED with new) +- drone-run.png - ok +- guardian-run.png - ok +- hydralisk-run.png +- hydralisk-attack.png +- infested-run.png +- lurker-burrow-combined.png +- lurker-burrow.png +- lurker-unburrow.png +- mutalisk-run.png +- ultralisk-attack.png +- ultralisk-run.png +- zerling-attack.png +- zerling-run.png +- overmind.png + +Older files will be remove once other mods have updated its code. \ No newline at end of file diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-00.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-00.png new file mode 100644 index 00000000..390bc8af Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-00.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-01.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-01.png new file mode 100644 index 00000000..6acfa929 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-01.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-02.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-02.png new file mode 100644 index 00000000..a17425ee Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-02.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-03.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-03.png new file mode 100644 index 00000000..98235cb4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-03.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-04.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-04.png new file mode 100644 index 00000000..2a7ea8b0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-04.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-05.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-05.png new file mode 100644 index 00000000..e0cbced9 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-05.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-06.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-06.png new file mode 100644 index 00000000..bcaf25b0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-06.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-07.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-07.png new file mode 100644 index 00000000..635f4472 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-07.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-00.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-00.png new file mode 100644 index 00000000..dea9cd5e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-00.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-01.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-01.png new file mode 100644 index 00000000..db087422 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-01.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-02.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-02.png new file mode 100644 index 00000000..58f7c02e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-02.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-03.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-03.png new file mode 100644 index 00000000..8b4e4b77 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-03.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-04.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-04.png new file mode 100644 index 00000000..8cd5920f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-04.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-05.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-05.png new file mode 100644 index 00000000..98c61e97 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-05.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-06.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-06.png new file mode 100644 index 00000000..b3fac811 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-06.png differ diff --git a/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-07.png b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-07.png new file mode 100644 index 00000000..c11a8d69 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/decorative/creep-decal/creep-decal-t-07.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber.png b/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber.png new file mode 100644 index 00000000..ba4c26e5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber_teamcolour.png new file mode 100644 index 00000000..d0b90338 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/chamber/chamber_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_building_explosion_large.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_building_explosion_large.png new file mode 100644 index 00000000..0bc0042f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_building_explosion_large.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_large_rubble.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_large_rubble.png new file mode 100644 index 00000000..b7acb41c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/terran_large_rubble.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_large.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_large.png new file mode 100644 index 00000000..fabbcc6a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_large.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_small.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_small.png new file mode 100644 index 00000000..952b547e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_building_blood_small.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_large_rubble.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_large_rubble.png new file mode 100644 index 00000000..4e6f880e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_large_rubble.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_small_rubble.png b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_small_rubble.png new file mode 100644 index 00000000..5e4283f3 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/death/zerg_small_rubble.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound.png b/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound.png new file mode 100644 index 00000000..18adea15 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound_teamcolour.png new file mode 100644 index 00000000..814a62d5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/defiler_mound/defiler_mound_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire.png b/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire.png new file mode 100644 index 00000000..86d07dd8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire_teamcolour.png new file mode 100644 index 00000000..61ef7487 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/greater_spire/greater_spire_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery.png b/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery.png new file mode 100644 index 00000000..c47c2911 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery_teamcolour.png new file mode 100644 index 00000000..0b6393e8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hatchery/hatchery_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive.png b/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive.png new file mode 100644 index 00000000..fa145d9d Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive_teamcolour.png new file mode 100644 index 00000000..3a0939b0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hive/hive_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden.png b/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden.png new file mode 100644 index 00000000..eb55226a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden_teamcolour.png new file mode 100644 index 00000000..4ae11a29 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/hydraden/hydraden_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre.png b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre.png new file mode 100644 index 00000000..7f33f90e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_mask.png b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_mask.png new file mode 100644 index 00000000..02283def Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_mask.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_teamcolour.png new file mode 100644 index 00000000..9fa69627 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/command_centre_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor.png b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor.png new file mode 100644 index 00000000..b7b12be1 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor_teamcolour.png new file mode 100644 index 00000000..4158868e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/infested_cmd/infestor_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair.png b/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair.png new file mode 100644 index 00000000..56beb5f5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair_teamcolour.png new file mode 100644 index 00000000..54033c69 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/lair/lair_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit.png b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit.png new file mode 100644 index 00000000..606f50e6 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_mask.png b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_mask.png new file mode 100644 index 00000000..36e51e1f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_mask.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_teamcolour.png new file mode 100644 index 00000000..9bc3afaf Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/nyduspit/nyduspit_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell.png b/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell.png new file mode 100644 index 00000000..57711d5f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell_teamcolour.png new file mode 100644 index 00000000..21348627 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/overmind/overmind_shell_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest.png b/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest.png new file mode 100644 index 00000000..df4d463c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest_teamcolour.png new file mode 100644 index 00000000..2d9298ed Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/queen_nest/queen_nest_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool.png b/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool.png new file mode 100644 index 00000000..4309b77f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool_teamcolour.png new file mode 100644 index 00000000..fe0fcb7b Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spawning_pool/spawning_pool_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire.png b/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire.png new file mode 100644 index 00000000..94ac4f6d Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire_teamcolour.png new file mode 100644 index 00000000..0d472693 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spire/spire_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony.png b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony.png new file mode 100644 index 00000000..202cb8e9 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_attack.png b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_attack.png new file mode 100644 index 00000000..32c6912c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_teamcolour.png new file mode 100644 index 00000000..ba5840e4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/spore_colony/spore_colony_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony.png b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony.png new file mode 100644 index 00000000..68a6e9c1 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack.png b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack.png new file mode 100644 index 00000000..db31aada Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack_teamcolour.png new file mode 100644 index 00000000..6db5be20 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_attack_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_teamcolour.png new file mode 100644 index 00000000..294fb601 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/sunken_colony/sunken_colony_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern.png b/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern.png new file mode 100644 index 00000000..7befedca Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern_teamcolour.png new file mode 100644 index 00000000..3731bcc4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/buildings/ultralisk_cavern/ultralisk_cavern_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/buildings/advisor.png b/erm_zerg_hd_assets/graphics/entity/icons/buildings/advisor.png new file mode 100644 index 00000000..e4480c5b Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/buildings/advisor.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/broodling.png b/erm_zerg_hd_assets/graphics/entity/icons/units/broodling.png new file mode 100644 index 00000000..6c261f63 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/broodling.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/defiler.png b/erm_zerg_hd_assets/graphics/entity/icons/units/defiler.png new file mode 100644 index 00000000..4299a97a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/defiler.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/devourer.png b/erm_zerg_hd_assets/graphics/entity/icons/units/devourer.png new file mode 100644 index 00000000..17a9e3b9 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/devourer.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/drone.png b/erm_zerg_hd_assets/graphics/entity/icons/units/drone.png new file mode 100644 index 00000000..8c5936c2 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/drone.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/guardian.png b/erm_zerg_hd_assets/graphics/entity/icons/units/guardian.png new file mode 100644 index 00000000..bbd50913 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/guardian.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/hydralisk.png b/erm_zerg_hd_assets/graphics/entity/icons/units/hydralisk.png new file mode 100644 index 00000000..7c363c91 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/hydralisk.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/infested.png b/erm_zerg_hd_assets/graphics/entity/icons/units/infested.png new file mode 100644 index 00000000..9a4a9b27 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/infested.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/lurker.png b/erm_zerg_hd_assets/graphics/entity/icons/units/lurker.png new file mode 100644 index 00000000..1e2b4f69 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/lurker.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/mutalisk.png b/erm_zerg_hd_assets/graphics/entity/icons/units/mutalisk.png new file mode 100644 index 00000000..24565c82 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/mutalisk.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/overlord.png b/erm_zerg_hd_assets/graphics/entity/icons/units/overlord.png new file mode 100644 index 00000000..8480120e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/overlord.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/parasite.png b/erm_zerg_hd_assets/graphics/entity/icons/units/parasite.png new file mode 100644 index 00000000..a8314817 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/parasite.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/queen.png b/erm_zerg_hd_assets/graphics/entity/icons/units/queen.png new file mode 100644 index 00000000..b90b173f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/queen.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/scourge.png b/erm_zerg_hd_assets/graphics/entity/icons/units/scourge.png new file mode 100644 index 00000000..755004d4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/scourge.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/ultralisk.png b/erm_zerg_hd_assets/graphics/entity/icons/units/ultralisk.png new file mode 100644 index 00000000..8fe15070 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/ultralisk.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/icons/units/zergling.png b/erm_zerg_hd_assets/graphics/entity/icons/units/zergling.png new file mode 100644 index 00000000..01a3aaa1 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/icons/units/zergling.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/colony_spike.png b/erm_zerg_hd_assets/graphics/entity/projectiles/colony_spike.png new file mode 100644 index 00000000..54afbc06 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/colony_spike.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm-80.png b/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm-80.png new file mode 100644 index 00000000..4e3e562a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm-80.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm.png b/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm.png new file mode 100644 index 00000000..d9b08941 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/darkswarm.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/defiler_blood.png b/erm_zerg_hd_assets/graphics/entity/projectiles/defiler_blood.png new file mode 100644 index 00000000..810b3999 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/defiler_blood.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke.png b/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke.png new file mode 100644 index 00000000..1956d24f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke_hit.png b/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke_hit.png new file mode 100644 index 00000000..10cbbb01 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/devourer_puke_hit.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_acid.png b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_acid.png new file mode 100644 index 00000000..f3a0172c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_acid.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_pr.png b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_pr.png new file mode 100644 index 00000000..4847698a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_pr.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_split.png b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_split.png new file mode 100644 index 00000000..320495c8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/hydra_split.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/lurker_spike.png b/erm_zerg_hd_assets/graphics/entity/projectiles/lurker_spike.png new file mode 100644 index 00000000..ecd880af Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/lurker_spike.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/mutalisk_explosion.png b/erm_zerg_hd_assets/graphics/entity/projectiles/mutalisk_explosion.png new file mode 100644 index 00000000..018bf5cf Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/mutalisk_explosion.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/parasite_explosion.png b/erm_zerg_hd_assets/graphics/entity/projectiles/parasite_explosion.png new file mode 100644 index 00000000..018bf5cf Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/parasite_explosion.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/queen_heal.png b/erm_zerg_hd_assets/graphics/entity/projectiles/queen_heal.png new file mode 100644 index 00000000..d9d9c646 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/queen_heal.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion.png b/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion.png new file mode 100644 index 00000000..ca6e915d Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion_teamcolour.png new file mode 100644 index 00000000..b2f7330e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/scourge_explosion_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/snare.png b/erm_zerg_hd_assets/graphics/entity/projectiles/snare.png new file mode 100644 index 00000000..cdc7dabc Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/snare.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/spores_1.png b/erm_zerg_hd_assets/graphics/entity/projectiles/spores_1.png new file mode 100644 index 00000000..0c33fcb5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/spores_1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/projectiles/spores_2.png b/erm_zerg_hd_assets/graphics/entity/projectiles/spores_2.png new file mode 100644 index 00000000..01dcfaca Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/projectiles/spores_2.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack.png b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack.png new file mode 100644 index 00000000..5da81a44 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack_teamcolour.png new file mode 100644 index 00000000..4e2d142c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-attack_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-death.png b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-death.png new file mode 100644 index 00000000..641a0bd8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run.png b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run.png new file mode 100644 index 00000000..462b2a0f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run_teamcolour.png new file mode 100644 index 00000000..ca9217fb Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/broodling/broodling-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/death/zerg_unit_blood.png b/erm_zerg_hd_assets/graphics/entity/units/death/zerg_unit_blood.png new file mode 100644 index 00000000..810b3999 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/death/zerg_unit_blood.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-death.png b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-death.png new file mode 100644 index 00000000..3c3a7e59 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run.png b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run.png new file mode 100644 index 00000000..0a8786bf Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run_teamcolour.png new file mode 100644 index 00000000..42ed15a8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/defiler/defiler-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack.png b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack.png new file mode 100644 index 00000000..b6fe96a5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack_teamcolour.png new file mode 100644 index 00000000..8840143d Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-attack_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-death.png b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-death.png new file mode 100644 index 00000000..0da14643 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run.png b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run.png new file mode 100644 index 00000000..3762a73a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run_teamcolour.png new file mode 100644 index 00000000..fdc14aa3 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/devourer/devourer-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-construction.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-construction.png new file mode 100644 index 00000000..1fd0b27b Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-construction.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-death.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-death.png new file mode 100644 index 00000000..75855208 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-0.png new file mode 100644 index 00000000..468964d7 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-1.png new file mode 100644 index 00000000..85fce660 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-0.png new file mode 100644 index 00000000..5fdbeedd Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-1.png new file mode 100644 index 00000000..7d197c0a Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/drone/drone-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-death.png b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-death.png new file mode 100644 index 00000000..76c6ad65 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-0.png new file mode 100644 index 00000000..720f9899 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-1.png new file mode 100644 index 00000000..44dc4cb2 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-0.png new file mode 100644 index 00000000..02740947 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-1.png new file mode 100644 index 00000000..5201fb5c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/guardian/guardian-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-0.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-0.png new file mode 100644 index 00000000..c592445f Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-1.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-1.png new file mode 100644 index 00000000..d5697afd Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-0.png new file mode 100644 index 00000000..81527c24 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-1.png new file mode 100644 index 00000000..0fdd9394 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-attack_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-death.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-death.png new file mode 100644 index 00000000..4642f5e3 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-0.png new file mode 100644 index 00000000..51d71930 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-1.png new file mode 100644 index 00000000..6884d302 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-0.png new file mode 100644 index 00000000..a8f920a5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-1.png new file mode 100644 index 00000000..13ce10de Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/hydralisk/hydralisk-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/infested/infested-death.png b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-death.png new file mode 100644 index 00000000..485d5f14 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-0.png new file mode 100644 index 00000000..e43765c0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-1.png new file mode 100644 index 00000000..af50e1fb Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-0.png new file mode 100644 index 00000000..5660db14 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-1.png new file mode 100644 index 00000000..2d40fcc1 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/infested/infested-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack.png b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack.png new file mode 100644 index 00000000..514e1a72 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack_teamcolour.png new file mode 100644 index 00000000..f62a333b Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-attack_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-death.png b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-death.png new file mode 100644 index 00000000..326e65dc Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run.png b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run.png new file mode 100644 index 00000000..9abea509 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run_teamcolour.png new file mode 100644 index 00000000..45bde8df Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/lurker/lurker-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-death.png b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-death.png new file mode 100644 index 00000000..b2551db2 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-0.png new file mode 100644 index 00000000..7c2051e6 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-1.png new file mode 100644 index 00000000..eae4743c Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-0.png new file mode 100644 index 00000000..d4604379 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-1.png new file mode 100644 index 00000000..7624b110 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/mutalisk/mutalisk-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-death.png b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-death.png new file mode 100644 index 00000000..918f4064 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run.png b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run.png new file mode 100644 index 00000000..1c6e307d Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run_teamcolour.png new file mode 100644 index 00000000..16fe05c9 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/overlord/overlord-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-death.png b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-death.png new file mode 100644 index 00000000..810b3999 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run.png b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run.png new file mode 100644 index 00000000..4123762e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run_teamcolour.png new file mode 100644 index 00000000..2c67c783 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/parasite/parasite-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack.png b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack.png new file mode 100644 index 00000000..f1254ab2 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack_teamcolour.png new file mode 100644 index 00000000..cdf9dfbb Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-attack_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/queen/queen-death.png b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-death.png new file mode 100644 index 00000000..2151cf56 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run.png b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run.png new file mode 100644 index 00000000..e9fc3aed Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run_teamcolour.png new file mode 100644 index 00000000..e3323527 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/queen/queen-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-death.png b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-death.png new file mode 100644 index 00000000..cdda1f24 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run.png b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run.png new file mode 100644 index 00000000..b89032b8 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run_teamcolour.png b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run_teamcolour.png new file mode 100644 index 00000000..3f2d92b0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/scourge/scourge-run_teamcolour.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-0.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-0.png new file mode 100644 index 00000000..b8131759 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-1.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-1.png new file mode 100644 index 00000000..550527a4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-0.png new file mode 100644 index 00000000..1b658cb9 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-1.png new file mode 100644 index 00000000..73060c88 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-attack_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-death.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-death.png new file mode 100644 index 00000000..76004eb4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-0.png new file mode 100644 index 00000000..5935ade0 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-1.png new file mode 100644 index 00000000..0394015e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-0.png new file mode 100644 index 00000000..a1f67e50 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-1.png new file mode 100644 index 00000000..53ff8ab3 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/ultralisk/ultralisk-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-0.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-0.png new file mode 100644 index 00000000..e2a16eb5 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-1.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-1.png new file mode 100644 index 00000000..08294744 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-0.png new file mode 100644 index 00000000..5162e040 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-1.png new file mode 100644 index 00000000..a213798e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-attack_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-death.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-death.png new file mode 100644 index 00000000..aa381249 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-death.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-0.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-0.png new file mode 100644 index 00000000..285d5428 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-1.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-1.png new file mode 100644 index 00000000..3cf4764e Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run-1.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-0.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-0.png new file mode 100644 index 00000000..49d46d25 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-0.png differ diff --git a/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-1.png b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-1.png new file mode 100644 index 00000000..cf2a7df4 Binary files /dev/null and b/erm_zerg_hd_assets/graphics/entity/units/zergling/zergling-run_teamcolour-1.png differ diff --git a/erm_zerg_hd_assets/info.json b/erm_zerg_hd_assets/info.json new file mode 100644 index 00000000..9a4fb381 --- /dev/null +++ b/erm_zerg_hd_assets/info.json @@ -0,0 +1,12 @@ +{ + "name": "erm_zerg_hd_assets", + "version": "1.2.1", + "date": "2023-07-15", + "title": "ERM - Zerg HD Graphic Assets", + "author": "SHlNZ0U, heyqule", + "description": "ERM - Zerg Official HD Graphic Assets", + "factorio_version": "1.1", + "dependencies": [ + "erm_libs >= 1.0.0" + ] +} \ No newline at end of file diff --git a/erm_zerg_hd_assets/settings.sample.lua b/erm_zerg_hd_assets/settings.sample.lua new file mode 100644 index 00000000..3afa308a --- /dev/null +++ b/erm_zerg_hd_assets/settings.sample.lua @@ -0,0 +1,27 @@ + + data:extend { + { + type = "bool-setting", + name = "erm_zerg-team_color_enable", + description = "erm_zerg-team_color_enable", + setting_type = "startup", + default_value = true, + order = "erm_zerg-110", + }, + { + type = "color-setting", + name = "erm_zerg-team_color", + description = "erm_zerg-team_color", + setting_type = "startup", + default_value = { a=255,b=255,g=255,r=255 }, + order = "erm_zerg-111", + }, + { + type = "bool-setting", + name = "erm_zerg-team_color_preserve_gloss", + description = "erm_zerg-team_color_preserve_gloss", + setting_type = "startup", + default_value = false, + order = "erm_zerg-113", + }, + } \ No newline at end of file diff --git a/erm_zerg_hd_assets/sound.lua b/erm_zerg_hd_assets/sound.lua new file mode 100644 index 00000000..f16a20bc --- /dev/null +++ b/erm_zerg_hd_assets/sound.lua @@ -0,0 +1,375 @@ +-- +-- Created by IntelliJ IDEA. +-- User: heyqule +-- Date: 12/17/2020 +-- Time: 1:04 AM +-- To change this template use File | Settings | File Templates. +-- +local ZergSound = {} + +function ZergSound.enemy_death(name, volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + filename = "__erm_zerg_hd_assets__/sound/enemies/" .. name .. "/death.ogg", + volume = volume + } +end + +function ZergSound.meele_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/zergling/attack.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/ultralisk/attack.ogg", + volume = volume + } + } + } +end + +function ZergSound.zergling_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + filename = "__erm_zerg_hd_assets__/sound/enemies/zergling/attack.ogg", + volume = volume + } +end + +function ZergSound.ultralisk_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/ultralisk/attack0.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/ultralisk/attack1.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/ultralisk/attack2.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/ultralisk/attack3.ogg", + volume = volume + } + } + } +end + +function ZergSound.broodling_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/broodling/attack.ogg", + volume = volume + } +end + +function ZergSound.mutalisk_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/mutalisk/attack.ogg", + volume = volume + } +end + +function ZergSound.guardian_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/guardian/attack.ogg", + volume = volume + } +end + +function ZergSound.hydralisk_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/hydralisk/attack.ogg", + volume = volume + } +end + +function ZergSound.devourer_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/devourer/attack.ogg", + volume = volume + } +end + +function ZergSound.building_working_sound(name, volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + max_sounds_per_type = 2, + sound = { + filename = "__erm_zerg_hd_assets__/sound/buildings/" .. name .. ".ogg", + volume = volume + }, + probability = 1 / (15 * 60) + } +end + +function ZergSound.building_dying_sound(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + filename = "__erm_zerg_hd_assets__/sound/buildings/building_death.ogg", + volume = volume + } +end + +function ZergSound.cmd_building_dying_sound(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + filename = "__erm_zerg_hd_assets__/sound/buildings/infested_building_death.ogg", + volume = volume + } +end + +function ZergSound.devourer_hit(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/devourer/goohit.ogg", + volume = volume + } +end + +function ZergSound.overlord_drop(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/overlord/attack.ogg", + volume = volume + } +end + +function ZergSound.lurker_hit(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/lurker/hit-1.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/lurker/hit-2.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/lurker/hit-3.ogg", + volume = volume + } + } + } +end + +function ZergSound.lurker_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/lurker/attack-1.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/lurker/attack-2.ogg", + volume = volume + } + } + } +end + +function ZergSound.sunken_idle(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + sound = { + { + filename = "__erm_zerg_hd_assets__/sound/buildings/sunken_colony.ogg", + volume = volume + }, + }, + probability = 1 / (15 * 60), + max_sounds_per_type = 3, + } +end + +function ZergSound.sunken_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + filename = "__erm_zerg_hd_assets__/sound/buildings/sunken_attack.ogg", + volume = volume + } +end + +function ZergSound.sunken_hit(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/buildings/sunken_hit.ogg", + volume = volume + } +end + +function ZergSound.spore_idle(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + sound = { + { + filename = "__erm_zerg_hd_assets__/sound/buildings/spore_colony.ogg", + volume = volume + }, + }, + max_sounds_per_type = 2, + probability = 1 / (15 * 60), + } +end + +function ZergSound.infested_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/infested/attack.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/infested/attack-2.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/infested/attack-3.ogg", + volume = volume + }, + } + } +end + +function ZergSound.infested_death(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/infested/death.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/infested/death-1.ogg", + volume = volume + } + } + } +end + +function ZergSound.defiler_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/defiler/attack.ogg", + volume = volume + } +end + +function ZergSound.scourge_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/scourge/attack.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/scourge/attack-2.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/scourge/attack-3.ogg", + volume = volume + }, + } + } +end + +function ZergSound.scourge_death(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + variations = { + { + filename = "__erm_zerg_hd_assets__/sound/enemies/scourge/death.ogg", + volume = volume + }, + { + filename = "__erm_zerg_hd_assets__/sound/enemies/scourge/death-1.ogg", + volume = volume + } + } + } +end + +function ZergSound.queen_snare(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/queen/snare.ogg", + volume = volume + } +end + +function ZergSound.queen_attack(volume, distance) + distance = distance or 1 + return { + audible_distance_modifier = distance, + + filename = "__erm_zerg_hd_assets__/sound/enemies/queen/attack.ogg", + volume = volume + } +end + +return ZergSound diff --git a/erm_zerg_hd_assets/sound/buildings/building_death.ogg b/erm_zerg_hd_assets/sound/buildings/building_death.ogg new file mode 100644 index 00000000..00ac46ec Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/building_death.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/chamber.ogg b/erm_zerg_hd_assets/sound/buildings/chamber.ogg new file mode 100644 index 00000000..39313f7e Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/chamber.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/defiler_mound.ogg b/erm_zerg_hd_assets/sound/buildings/defiler_mound.ogg new file mode 100644 index 00000000..3e61a0b2 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/defiler_mound.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/greater_spire.ogg b/erm_zerg_hd_assets/sound/buildings/greater_spire.ogg new file mode 100644 index 00000000..05f4d99f Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/greater_spire.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/hatchery.ogg b/erm_zerg_hd_assets/sound/buildings/hatchery.ogg new file mode 100644 index 00000000..73aa9112 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/hatchery.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/hive.ogg b/erm_zerg_hd_assets/sound/buildings/hive.ogg new file mode 100644 index 00000000..203e8425 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/hive.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/hydraden.ogg b/erm_zerg_hd_assets/sound/buildings/hydraden.ogg new file mode 100644 index 00000000..d5baad1b Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/hydraden.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/infested_building_death.ogg b/erm_zerg_hd_assets/sound/buildings/infested_building_death.ogg new file mode 100644 index 00000000..e64087f9 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/infested_building_death.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/infested_cmd.ogg b/erm_zerg_hd_assets/sound/buildings/infested_cmd.ogg new file mode 100644 index 00000000..7fd734f0 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/infested_cmd.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/lair.ogg b/erm_zerg_hd_assets/sound/buildings/lair.ogg new file mode 100644 index 00000000..701d33db Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/lair.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/nyduspit.ogg b/erm_zerg_hd_assets/sound/buildings/nyduspit.ogg new file mode 100644 index 00000000..8e279477 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/nyduspit.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/queen_nest.ogg b/erm_zerg_hd_assets/sound/buildings/queen_nest.ogg new file mode 100644 index 00000000..ce8af3ff Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/queen_nest.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/spawning_pool.ogg b/erm_zerg_hd_assets/sound/buildings/spawning_pool.ogg new file mode 100644 index 00000000..bfd73ff1 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/spawning_pool.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/spire.ogg b/erm_zerg_hd_assets/sound/buildings/spire.ogg new file mode 100644 index 00000000..82534b51 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/spire.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/spore_attack.ogg b/erm_zerg_hd_assets/sound/buildings/spore_attack.ogg new file mode 100644 index 00000000..0c75c9cb Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/spore_attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/spore_colony.ogg b/erm_zerg_hd_assets/sound/buildings/spore_colony.ogg new file mode 100644 index 00000000..df431630 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/spore_colony.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/sunken_attack.ogg b/erm_zerg_hd_assets/sound/buildings/sunken_attack.ogg new file mode 100644 index 00000000..dc74fe1f Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/sunken_attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/sunken_colony.ogg b/erm_zerg_hd_assets/sound/buildings/sunken_colony.ogg new file mode 100644 index 00000000..cc79a69b Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/sunken_colony.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/sunken_hit.ogg b/erm_zerg_hd_assets/sound/buildings/sunken_hit.ogg new file mode 100644 index 00000000..e095d3e5 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/sunken_hit.ogg differ diff --git a/erm_zerg_hd_assets/sound/buildings/ultralisk_cavern.ogg b/erm_zerg_hd_assets/sound/buildings/ultralisk_cavern.ogg new file mode 100644 index 00000000..d3f92827 Binary files /dev/null and b/erm_zerg_hd_assets/sound/buildings/ultralisk_cavern.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/broodling/attack.ogg b/erm_zerg_hd_assets/sound/enemies/broodling/attack.ogg new file mode 100644 index 00000000..e357751b Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/broodling/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/broodling/death.ogg b/erm_zerg_hd_assets/sound/enemies/broodling/death.ogg new file mode 100644 index 00000000..7440be33 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/broodling/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/defiler/attack.ogg b/erm_zerg_hd_assets/sound/enemies/defiler/attack.ogg new file mode 100644 index 00000000..f906feaf Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/defiler/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/defiler/darkswarm.ogg b/erm_zerg_hd_assets/sound/enemies/defiler/darkswarm.ogg new file mode 100644 index 00000000..64531c1c Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/defiler/darkswarm.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/defiler/death.ogg b/erm_zerg_hd_assets/sound/enemies/defiler/death.ogg new file mode 100644 index 00000000..3db6c189 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/defiler/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/devourer/attack.ogg b/erm_zerg_hd_assets/sound/enemies/devourer/attack.ogg new file mode 100644 index 00000000..ecc022c0 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/devourer/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/devourer/death.ogg b/erm_zerg_hd_assets/sound/enemies/devourer/death.ogg new file mode 100644 index 00000000..89a83b15 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/devourer/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/devourer/goohit.ogg b/erm_zerg_hd_assets/sound/enemies/devourer/goohit.ogg new file mode 100644 index 00000000..3b280f1a Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/devourer/goohit.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/drone/attack.ogg b/erm_zerg_hd_assets/sound/enemies/drone/attack.ogg new file mode 100644 index 00000000..61b1593f Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/drone/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/drone/death.ogg b/erm_zerg_hd_assets/sound/enemies/drone/death.ogg new file mode 100644 index 00000000..600b8294 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/drone/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/guardian/attack.ogg b/erm_zerg_hd_assets/sound/enemies/guardian/attack.ogg new file mode 100644 index 00000000..21f28808 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/guardian/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/guardian/death.ogg b/erm_zerg_hd_assets/sound/enemies/guardian/death.ogg new file mode 100644 index 00000000..8c287064 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/guardian/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/hydralisk/attack.ogg b/erm_zerg_hd_assets/sound/enemies/hydralisk/attack.ogg new file mode 100644 index 00000000..8d2edc5d Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/hydralisk/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/hydralisk/death.ogg b/erm_zerg_hd_assets/sound/enemies/hydralisk/death.ogg new file mode 100644 index 00000000..94067cb1 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/hydralisk/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/infested/attack-2.ogg b/erm_zerg_hd_assets/sound/enemies/infested/attack-2.ogg new file mode 100644 index 00000000..3e65fdc0 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/infested/attack-2.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/infested/attack-3.ogg b/erm_zerg_hd_assets/sound/enemies/infested/attack-3.ogg new file mode 100644 index 00000000..1fa6ff24 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/infested/attack-3.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/infested/attack.ogg b/erm_zerg_hd_assets/sound/enemies/infested/attack.ogg new file mode 100644 index 00000000..0e2f902c Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/infested/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/infested/death-1.ogg b/erm_zerg_hd_assets/sound/enemies/infested/death-1.ogg new file mode 100644 index 00000000..8bae1def Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/infested/death-1.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/infested/death.ogg b/erm_zerg_hd_assets/sound/enemies/infested/death.ogg new file mode 100644 index 00000000..ff719aac Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/infested/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/attack-1.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/attack-1.ogg new file mode 100644 index 00000000..3efaea32 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/attack-1.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/attack-2.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/attack-2.ogg new file mode 100644 index 00000000..9d145650 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/attack-2.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/burrow.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/burrow.ogg new file mode 100644 index 00000000..3270e256 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/burrow.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/death.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/death.ogg new file mode 100644 index 00000000..e18137a9 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/hit-1.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/hit-1.ogg new file mode 100644 index 00000000..6da9bb41 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/hit-1.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/hit-2.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/hit-2.ogg new file mode 100644 index 00000000..383f5510 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/hit-2.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/lurker/hit-3.ogg b/erm_zerg_hd_assets/sound/enemies/lurker/hit-3.ogg new file mode 100644 index 00000000..e095d3e5 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/lurker/hit-3.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/mutalisk/attack.ogg b/erm_zerg_hd_assets/sound/enemies/mutalisk/attack.ogg new file mode 100644 index 00000000..ceceeadb Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/mutalisk/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/mutalisk/death.ogg b/erm_zerg_hd_assets/sound/enemies/mutalisk/death.ogg new file mode 100644 index 00000000..bb14c68c Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/mutalisk/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/overlord/attack.ogg b/erm_zerg_hd_assets/sound/enemies/overlord/attack.ogg new file mode 100644 index 00000000..5f25c657 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/overlord/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/overlord/death.ogg b/erm_zerg_hd_assets/sound/enemies/overlord/death.ogg new file mode 100644 index 00000000..557b656a Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/overlord/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/parasite/death.ogg b/erm_zerg_hd_assets/sound/enemies/parasite/death.ogg new file mode 100644 index 00000000..6d290200 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/parasite/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/queen/attack.ogg b/erm_zerg_hd_assets/sound/enemies/queen/attack.ogg new file mode 100644 index 00000000..3d3f9959 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/queen/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/queen/death.ogg b/erm_zerg_hd_assets/sound/enemies/queen/death.ogg new file mode 100644 index 00000000..283c597a Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/queen/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/queen/snare.ogg b/erm_zerg_hd_assets/sound/enemies/queen/snare.ogg new file mode 100644 index 00000000..05494d32 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/queen/snare.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/scourge/attack-2.ogg b/erm_zerg_hd_assets/sound/enemies/scourge/attack-2.ogg new file mode 100644 index 00000000..83b85ec7 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/scourge/attack-2.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/scourge/attack-3.ogg b/erm_zerg_hd_assets/sound/enemies/scourge/attack-3.ogg new file mode 100644 index 00000000..5164415e Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/scourge/attack-3.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/scourge/attack.ogg b/erm_zerg_hd_assets/sound/enemies/scourge/attack.ogg new file mode 100644 index 00000000..fa329608 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/scourge/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/scourge/death-1.ogg b/erm_zerg_hd_assets/sound/enemies/scourge/death-1.ogg new file mode 100644 index 00000000..2c5405f8 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/scourge/death-1.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/scourge/death.ogg b/erm_zerg_hd_assets/sound/enemies/scourge/death.ogg new file mode 100644 index 00000000..58cbb91f Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/scourge/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/attack.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack.ogg new file mode 100644 index 00000000..ffba15ce Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/attack0.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack0.ogg new file mode 100644 index 00000000..ffba15ce Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack0.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/attack1.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack1.ogg new file mode 100644 index 00000000..2e7240e7 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack1.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/attack2.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack2.ogg new file mode 100644 index 00000000..2fb42d02 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack2.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/attack3.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack3.ogg new file mode 100644 index 00000000..95c6fd36 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/attack3.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/ultralisk/death.ogg b/erm_zerg_hd_assets/sound/enemies/ultralisk/death.ogg new file mode 100644 index 00000000..0197dc35 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/ultralisk/death.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/zergling/attack.ogg b/erm_zerg_hd_assets/sound/enemies/zergling/attack.ogg new file mode 100644 index 00000000..c54de7f7 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/zergling/attack.ogg differ diff --git a/erm_zerg_hd_assets/sound/enemies/zergling/death.ogg b/erm_zerg_hd_assets/sound/enemies/zergling/death.ogg new file mode 100644 index 00000000..d9c229c8 Binary files /dev/null and b/erm_zerg_hd_assets/sound/enemies/zergling/death.ogg differ diff --git a/erm_zerg_hd_assets/thumbnail.png b/erm_zerg_hd_assets/thumbnail.png new file mode 100644 index 00000000..f7711bf1 Binary files /dev/null and b/erm_zerg_hd_assets/thumbnail.png differ diff --git a/erm_zerg_hd_assets/update-teamcolour.sample.lua b/erm_zerg_hd_assets/update-teamcolour.sample.lua new file mode 100644 index 00000000..d2467197 --- /dev/null +++ b/erm_zerg_hd_assets/update-teamcolour.sample.lua @@ -0,0 +1,73 @@ +--- +--- Generated by EmmyLua(https://github.com/EmmyLua) +--- Created by heyqule. +--- DateTime: 8/7/2022 7:42 PM +--- +--- This files serve as an example on how to update team color, this required ERM core mods. +--- +--- add this file with require('update-teamcolour') in your mod +--- +local AnimationDB = require('__erm_zerg_hd_assets__/animation_db') +local ERM_UnitHelper = require('__enemyracemanager__/lib/rig/unit_helper') +local String = require('__stdlib__/stdlib/utils/string') + +--- Grab all applicable types +local entity_types = {'unit','unit-spawner', 'turret', 'explosion', 'corpse'} + +--- You can code your own team color format function +local color = ERM_UnitHelper.format_team_color(settings.startup['erm_zerg-team_color'].value) + +--- Disable team mask +local disable_mask = true +if settings.startup['erm_zerg-team_color_enable'].value then + disable_mask = false +end + +--- Use blend mode: additive-soft to preserve glossy look. +local preserve_gloss = false +if settings.startup['erm_zerg-team_color_preserve_gloss'].value then + preserve_gloss = true + + local strength_multipler = 0.8 + color.r = color.r * strength_multipler + color.g = color.g * strength_multipler + color.b = color.b * strength_multipler +else + -- Lower color strength to prevent neon colors. + local strength_multipler = 0.5 + color.r = color.r * strength_multipler + color.g = color.g * strength_multipler + color.b = color.b * strength_multipler +end + +--- Make sure entity match the name pattern of your entities +local name_check = function(name) + local nameToken = String.split(name, '/') + return nameToken[1] == 'erm_zerg' +end + +for _, entity_type in pairs(entity_types) do + for _, entity in pairs(data.raw[entity_type]) do + if name_check(entity.name) == true then + --- You may add addition + if entity['animation'] then + entity['animations'] = AnimationDB.alter_team_color(entity['animation'], color, disable_mask, preserve_gloss) + end + if entity['animations'] then + entity['animations'] = AnimationDB.alter_team_color(entity['animations'], color, disable_mask, preserve_gloss) + end + if entity['run_animation'] then + entity['run_animation'] = AnimationDB.alter_team_color(entity['run_animation'], color, disable_mask, preserve_gloss) + end + if entity['attack_parameters'] and entity['attack_parameters']['animation'] then + entity['attack_parameters']['animation'] = AnimationDB.alter_team_color(entity['attack_parameters']['animation'], color, disable_mask, preserve_gloss) + end + if entity['folded_animation'] then + entity['folded_animation'] = AnimationDB.alter_team_color(entity['folded_animation'], color, disable_mask, preserve_gloss) + end + if entity['starting_attack_animation'] then + entity['starting_attack_animation'] = AnimationDB.alter_team_color(entity['starting_attack_animation'], color, disable_mask, preserve_gloss) + end + end + end +end \ No newline at end of file diff --git a/erm_zerg_hd_assets_1.2.1.zip b/erm_zerg_hd_assets_1.2.1.zip deleted file mode 100644 index eb41ce74..00000000 Binary files a/erm_zerg_hd_assets_1.2.1.zip and /dev/null differ diff --git a/even-distribution_1.0.10/changelog.txt b/even-distribution/changelog.txt similarity index 100% rename from even-distribution_1.0.10/changelog.txt rename to even-distribution/changelog.txt diff --git a/even-distribution_1.0.10/config.lua b/even-distribution/config.lua similarity index 100% rename from even-distribution_1.0.10/config.lua rename to even-distribution/config.lua diff --git a/even-distribution_1.0.10/control.lua b/even-distribution/control.lua similarity index 100% rename from even-distribution_1.0.10/control.lua rename to even-distribution/control.lua diff --git a/even-distribution_1.0.10/data.lua b/even-distribution/data.lua similarity index 100% rename from even-distribution_1.0.10/data.lua rename to even-distribution/data.lua diff --git a/even-distribution_1.0.10/default-trash.lua b/even-distribution/default-trash.lua similarity index 100% rename from even-distribution_1.0.10/default-trash.lua rename to even-distribution/default-trash.lua diff --git a/even-distribution_1.0.10/framework.lua b/even-distribution/framework.lua similarity index 100% rename from even-distribution_1.0.10/framework.lua rename to even-distribution/framework.lua diff --git a/even-distribution_1.0.10/graphics/autotrash.png b/even-distribution/graphics/autotrash.png similarity index 100% rename from even-distribution_1.0.10/graphics/autotrash.png rename to even-distribution/graphics/autotrash.png diff --git a/even-distribution_1.0.10/graphics/distribution-marker.png b/even-distribution/graphics/distribution-marker.png similarity index 100% rename from even-distribution_1.0.10/graphics/distribution-marker.png rename to even-distribution/graphics/distribution-marker.png diff --git a/even-distribution_1.0.10/graphics/icon.png b/even-distribution/graphics/icon.png similarity index 100% rename from even-distribution_1.0.10/graphics/icon.png rename to even-distribution/graphics/icon.png diff --git a/even-distribution_1.0.10/graphics/old/automation-3.png b/even-distribution/graphics/old/automation-3.png similarity index 100% rename from even-distribution_1.0.10/graphics/old/automation-3.png rename to even-distribution/graphics/old/automation-3.png diff --git a/even-distribution_1.0.10/graphics/old/belt-immunity-equipment.png b/even-distribution/graphics/old/belt-immunity-equipment.png similarity index 100% rename from even-distribution_1.0.10/graphics/old/belt-immunity-equipment.png rename to even-distribution/graphics/old/belt-immunity-equipment.png diff --git a/even-distribution_1.0.10/graphics/old/logo2.png b/even-distribution/graphics/old/logo2.png similarity index 100% rename from even-distribution_1.0.10/graphics/old/logo2.png rename to even-distribution/graphics/old/logo2.png diff --git a/even-distribution_1.0.10/graphics/old/logo3.png b/even-distribution/graphics/old/logo3.png similarity index 100% rename from even-distribution_1.0.10/graphics/old/logo3.png rename to even-distribution/graphics/old/logo3.png diff --git a/even-distribution_1.0.10/graphics/overflow.png b/even-distribution/graphics/overflow.png similarity index 100% rename from even-distribution_1.0.10/graphics/overflow.png rename to even-distribution/graphics/overflow.png diff --git a/even-distribution_1.0.10/graphics/tech.png b/even-distribution/graphics/tech.png similarity index 100% rename from even-distribution_1.0.10/graphics/tech.png rename to even-distribution/graphics/tech.png diff --git a/even-distribution_1.0.10/graphics/trash.png b/even-distribution/graphics/trash.png similarity index 100% rename from even-distribution_1.0.10/graphics/trash.png rename to even-distribution/graphics/trash.png diff --git a/even-distribution_1.0.10/info.json b/even-distribution/info.json similarity index 100% rename from even-distribution_1.0.10/info.json rename to even-distribution/info.json diff --git a/even-distribution_1.0.10/locale/en/even-distribution.cfg b/even-distribution/locale/en/even-distribution.cfg similarity index 100% rename from even-distribution_1.0.10/locale/en/even-distribution.cfg rename to even-distribution/locale/en/even-distribution.cfg diff --git a/even-distribution_1.0.10/locale/ru/even-distribution.cfg b/even-distribution/locale/ru/even-distribution.cfg similarity index 100% rename from even-distribution_1.0.10/locale/ru/even-distribution.cfg rename to even-distribution/locale/ru/even-distribution.cfg diff --git a/even-distribution_1.0.10/migrations/even-distribution_0.1.1.lua b/even-distribution/migrations/even-distribution_0.1.1.lua similarity index 100% rename from even-distribution_1.0.10/migrations/even-distribution_0.1.1.lua rename to even-distribution/migrations/even-distribution_0.1.1.lua diff --git a/even-distribution_1.0.10/migrations/even-distribution_0.3.6.lua b/even-distribution/migrations/even-distribution_0.3.6.lua similarity index 100% rename from even-distribution_1.0.10/migrations/even-distribution_0.3.6.lua rename to even-distribution/migrations/even-distribution_0.3.6.lua diff --git a/even-distribution_1.0.10/migrations/even-distribution_1.0.0.lua b/even-distribution/migrations/even-distribution_1.0.0.lua similarity index 100% rename from even-distribution_1.0.10/migrations/even-distribution_1.0.0.lua rename to even-distribution/migrations/even-distribution_1.0.0.lua diff --git a/even-distribution_1.0.10/migrations/even-distribution_1.0.1.lua b/even-distribution/migrations/even-distribution_1.0.1.lua similarity index 100% rename from even-distribution_1.0.10/migrations/even-distribution_1.0.1.lua rename to even-distribution/migrations/even-distribution_1.0.1.lua diff --git a/even-distribution_1.0.10/prototypes/entities.lua b/even-distribution/prototypes/entities.lua similarity index 100% rename from even-distribution_1.0.10/prototypes/entities.lua rename to even-distribution/prototypes/entities.lua diff --git a/even-distribution_1.0.10/prototypes/icons.lua b/even-distribution/prototypes/icons.lua similarity index 100% rename from even-distribution_1.0.10/prototypes/icons.lua rename to even-distribution/prototypes/icons.lua diff --git a/even-distribution_1.0.10/prototypes/input.lua b/even-distribution/prototypes/input.lua similarity index 100% rename from even-distribution_1.0.10/prototypes/input.lua rename to even-distribution/prototypes/input.lua diff --git a/even-distribution_1.0.10/prototypes/styles.lua b/even-distribution/prototypes/styles.lua similarity index 100% rename from even-distribution_1.0.10/prototypes/styles.lua rename to even-distribution/prototypes/styles.lua diff --git a/even-distribution_1.0.10/prototypes/technologies.lua b/even-distribution/prototypes/technologies.lua similarity index 100% rename from even-distribution_1.0.10/prototypes/technologies.lua rename to even-distribution/prototypes/technologies.lua diff --git a/even-distribution_1.0.10/scripts/cleanup.lua b/even-distribution/scripts/cleanup.lua similarity index 100% rename from even-distribution_1.0.10/scripts/cleanup.lua rename to even-distribution/scripts/cleanup.lua diff --git a/even-distribution_1.0.10/scripts/drag.lua b/even-distribution/scripts/drag.lua similarity index 100% rename from even-distribution_1.0.10/scripts/drag.lua rename to even-distribution/scripts/drag.lua diff --git a/even-distribution_1.0.10/scripts/gui-tools.lua b/even-distribution/scripts/gui-tools.lua similarity index 100% rename from even-distribution_1.0.10/scripts/gui-tools.lua rename to even-distribution/scripts/gui-tools.lua diff --git a/even-distribution_1.0.10/scripts/helpers.lua b/even-distribution/scripts/helpers.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers.lua rename to even-distribution/scripts/helpers.lua diff --git a/even-distribution_1.0.10/scripts/helpers/BoundingBox.lua b/even-distribution/scripts/helpers/BoundingBox.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/BoundingBox.lua rename to even-distribution/scripts/helpers/BoundingBox.lua diff --git a/even-distribution_1.0.10/scripts/helpers/LuaControl.lua b/even-distribution/scripts/helpers/LuaControl.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/LuaControl.lua rename to even-distribution/scripts/helpers/LuaControl.lua diff --git a/even-distribution_1.0.10/scripts/helpers/LuaEntity.lua b/even-distribution/scripts/helpers/LuaEntity.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/LuaEntity.lua rename to even-distribution/scripts/helpers/LuaEntity.lua diff --git a/even-distribution_1.0.10/scripts/helpers/LuaItemPrototype.lua b/even-distribution/scripts/helpers/LuaItemPrototype.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/LuaItemPrototype.lua rename to even-distribution/scripts/helpers/LuaItemPrototype.lua diff --git a/even-distribution_1.0.10/scripts/helpers/LuaPlayer.lua b/even-distribution/scripts/helpers/LuaPlayer.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/LuaPlayer.lua rename to even-distribution/scripts/helpers/LuaPlayer.lua diff --git a/even-distribution_1.0.10/scripts/helpers/LuaRecipe.lua b/even-distribution/scripts/helpers/LuaRecipe.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/LuaRecipe.lua rename to even-distribution/scripts/helpers/LuaRecipe.lua diff --git a/even-distribution_1.0.10/scripts/helpers/Position.lua b/even-distribution/scripts/helpers/Position.lua similarity index 100% rename from even-distribution_1.0.10/scripts/helpers/Position.lua rename to even-distribution/scripts/helpers/Position.lua diff --git a/even-distribution_1.0.10/scripts/metatables.lua b/even-distribution/scripts/metatables.lua similarity index 100% rename from even-distribution_1.0.10/scripts/metatables.lua rename to even-distribution/scripts/metatables.lua diff --git a/even-distribution_1.0.10/scripts/remote.lua b/even-distribution/scripts/remote.lua similarity index 100% rename from even-distribution_1.0.10/scripts/remote.lua rename to even-distribution/scripts/remote.lua diff --git a/even-distribution_1.0.10/scripts/settings-gui/controller.lua b/even-distribution/scripts/settings-gui/controller.lua similarity index 100% rename from even-distribution_1.0.10/scripts/settings-gui/controller.lua rename to even-distribution/scripts/settings-gui/controller.lua diff --git a/even-distribution_1.0.10/scripts/settings-gui/gui-templates.lua b/even-distribution/scripts/settings-gui/gui-templates.lua similarity index 100% rename from even-distribution_1.0.10/scripts/settings-gui/gui-templates.lua rename to even-distribution/scripts/settings-gui/gui-templates.lua diff --git a/even-distribution_1.0.10/scripts/setup.lua b/even-distribution/scripts/setup.lua similarity index 100% rename from even-distribution_1.0.10/scripts/setup.lua rename to even-distribution/scripts/setup.lua diff --git a/even-distribution_1.0.10/scripts/util.lua b/even-distribution/scripts/util.lua similarity index 100% rename from even-distribution_1.0.10/scripts/util.lua rename to even-distribution/scripts/util.lua diff --git a/even-distribution_1.0.10/scripts/visuals.lua b/even-distribution/scripts/visuals.lua similarity index 100% rename from even-distribution_1.0.10/scripts/visuals.lua rename to even-distribution/scripts/visuals.lua diff --git a/even-distribution_1.0.10/settings.lua b/even-distribution/settings.lua similarity index 100% rename from even-distribution_1.0.10/settings.lua rename to even-distribution/settings.lua diff --git a/even-distribution_1.0.10/thumbnail.png b/even-distribution/thumbnail.png similarity index 100% rename from even-distribution_1.0.10/thumbnail.png rename to even-distribution/thumbnail.png diff --git a/expanded-rocket-payloads_0.17.1/Readme.txt b/expanded-rocket-payloads/Readme.txt similarity index 100% rename from expanded-rocket-payloads_0.17.1/Readme.txt rename to expanded-rocket-payloads/Readme.txt diff --git a/expanded-rocket-payloads_0.17.1/changelog.txt b/expanded-rocket-payloads/changelog.txt similarity index 100% rename from expanded-rocket-payloads_0.17.1/changelog.txt rename to expanded-rocket-payloads/changelog.txt diff --git a/expanded-rocket-payloads_0.17.1/control.lua b/expanded-rocket-payloads/control.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/control.lua rename to expanded-rocket-payloads/control.lua diff --git a/expanded-rocket-payloads_0.17.1/data.lua b/expanded-rocket-payloads/data.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/data.lua rename to expanded-rocket-payloads/data.lua diff --git a/expanded-rocket-payloads_0.17.1/graphic/Andromeda128.png b/expanded-rocket-payloads/graphic/Andromeda128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/Andromeda128.png rename to expanded-rocket-payloads/graphic/Andromeda128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/RTG-32.png b/expanded-rocket-payloads/graphic/RTG-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/RTG-32.png rename to expanded-rocket-payloads/graphic/RTG-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/SpaceLab32.png b/expanded-rocket-payloads/graphic/SpaceLab32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/SpaceLab32.png rename to expanded-rocket-payloads/graphic/SpaceLab32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-assembler 210-140.png b/expanded-rocket-payloads/graphic/advanced-assembler 210-140.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-assembler 210-140.png rename to expanded-rocket-payloads/graphic/advanced-assembler 210-140.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-assembler-128.png b/expanded-rocket-payloads/graphic/advanced-assembler-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-assembler-128.png rename to expanded-rocket-payloads/graphic/advanced-assembler-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-assembler-32.png b/expanded-rocket-payloads/graphic/advanced-assembler-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-assembler-32.png rename to expanded-rocket-payloads/graphic/advanced-assembler-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-chemistry.png b/expanded-rocket-payloads/graphic/advanced-chemistry.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-chemistry.png rename to expanded-rocket-payloads/graphic/advanced-chemistry.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-probe-128.png b/expanded-rocket-payloads/graphic/advanced-probe-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-probe-128.png rename to expanded-rocket-payloads/graphic/advanced-probe-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/advanced-probe.png b/expanded-rocket-payloads/graphic/advanced-probe.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/advanced-probe.png rename to expanded-rocket-payloads/graphic/advanced-probe.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ai-lab-128.png b/expanded-rocket-payloads/graphic/ai-lab-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ai-lab-128.png rename to expanded-rocket-payloads/graphic/ai-lab-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/auto-fabricator-32.png b/expanded-rocket-payloads/graphic/auto-fabricator-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/auto-fabricator-32.png rename to expanded-rocket-payloads/graphic/auto-fabricator-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/auto_fabricator-ground-station-220-220.png b/expanded-rocket-payloads/graphic/auto_fabricator-ground-station-220-220.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/auto_fabricator-ground-station-220-220.png rename to expanded-rocket-payloads/graphic/auto_fabricator-ground-station-220-220.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/automated-construction.png b/expanded-rocket-payloads/graphic/automated-construction.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/automated-construction.png rename to expanded-rocket-payloads/graphic/automated-construction.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/copper-dropship-32.png b/expanded-rocket-payloads/graphic/copper-dropship-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/copper-dropship-32.png rename to expanded-rocket-payloads/graphic/copper-dropship-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/data.png b/expanded-rocket-payloads/graphic/data.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/data.png rename to expanded-rocket-payloads/graphic/data.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/dreamchaser-128.png b/expanded-rocket-payloads/graphic/dreamchaser-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/dreamchaser-128.png rename to expanded-rocket-payloads/graphic/dreamchaser-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/dreamchaser-32.png b/expanded-rocket-payloads/graphic/dreamchaser-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/dreamchaser-32.png rename to expanded-rocket-payloads/graphic/dreamchaser-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/dreamchaser-hull-32.png b/expanded-rocket-payloads/graphic/dreamchaser-hull-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/dreamchaser-hull-32.png rename to expanded-rocket-payloads/graphic/dreamchaser-hull-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/fabricator-shuttle-32.png b/expanded-rocket-payloads/graphic/fabricator-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/fabricator-shuttle-32.png rename to expanded-rocket-payloads/graphic/fabricator-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/flight-computer-32.png b/expanded-rocket-payloads/graphic/flight-computer-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/flight-computer-32.png rename to expanded-rocket-payloads/graphic/flight-computer-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/gps.png b/expanded-rocket-payloads/graphic/gps.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/gps.png rename to expanded-rocket-payloads/graphic/gps.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-fabricator-component-32.png b/expanded-rocket-payloads/graphic/ground-fabricator-component-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-fabricator-component-32.png rename to expanded-rocket-payloads/graphic/ground-fabricator-component-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-reciver-32.png b/expanded-rocket-payloads/graphic/ground-reciver-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-reciver-32.png rename to expanded-rocket-payloads/graphic/ground-reciver-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-reciver.png b/expanded-rocket-payloads/graphic/ground-reciver.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-reciver.png rename to expanded-rocket-payloads/graphic/ground-reciver.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-telescope-128.png b/expanded-rocket-payloads/graphic/ground-telescope-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-telescope-128.png rename to expanded-rocket-payloads/graphic/ground-telescope-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-telescope-32.png b/expanded-rocket-payloads/graphic/ground-telescope-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-telescope-32.png rename to expanded-rocket-payloads/graphic/ground-telescope-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ground-telescope-400-400.png b/expanded-rocket-payloads/graphic/ground-telescope-400-400.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ground-telescope-400-400.png rename to expanded-rocket-payloads/graphic/ground-telescope-400-400.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/ion-thruster-32.png b/expanded-rocket-payloads/graphic/ion-thruster-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/ion-thruster-32.png rename to expanded-rocket-payloads/graphic/ion-thruster-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/iron-dropship-32.png b/expanded-rocket-payloads/graphic/iron-dropship-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/iron-dropship-32.png rename to expanded-rocket-payloads/graphic/iron-dropship-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/iss-128.png b/expanded-rocket-payloads/graphic/iss-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/iss-128.png rename to expanded-rocket-payloads/graphic/iss-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/landed-fabricator-shuttle-32.png b/expanded-rocket-payloads/graphic/landed-fabricator-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/landed-fabricator-shuttle-32.png rename to expanded-rocket-payloads/graphic/landed-fabricator-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/landed-mining-shuttle-32.png b/expanded-rocket-payloads/graphic/landed-mining-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/landed-mining-shuttle-32.png rename to expanded-rocket-payloads/graphic/landed-mining-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/landed-shuttle-32.png b/expanded-rocket-payloads/graphic/landed-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/landed-shuttle-32.png rename to expanded-rocket-payloads/graphic/landed-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/landed-spy-shuttle-32.png b/expanded-rocket-payloads/graphic/landed-spy-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/landed-spy-shuttle-32.png rename to expanded-rocket-payloads/graphic/landed-spy-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/logistics.png b/expanded-rocket-payloads/graphic/logistics.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/logistics.png rename to expanded-rocket-payloads/graphic/logistics.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/mining-drone-32.png b/expanded-rocket-payloads/graphic/mining-drone-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/mining-drone-32.png rename to expanded-rocket-payloads/graphic/mining-drone-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/mining-drones-128.png b/expanded-rocket-payloads/graphic/mining-drones-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/mining-drones-128.png rename to expanded-rocket-payloads/graphic/mining-drones-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/mining-shuttle-32.png b/expanded-rocket-payloads/graphic/mining-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/mining-shuttle-32.png rename to expanded-rocket-payloads/graphic/mining-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/mir-128.png b/expanded-rocket-payloads/graphic/mir-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/mir-128.png rename to expanded-rocket-payloads/graphic/mir-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/observation-sat-128.png b/expanded-rocket-payloads/graphic/observation-sat-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/observation-sat-128.png rename to expanded-rocket-payloads/graphic/observation-sat-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/observation-sat-32.png b/expanded-rocket-payloads/graphic/observation-sat-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/observation-sat-32.png rename to expanded-rocket-payloads/graphic/observation-sat-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/orbital-artillery-rangefinding.png b/expanded-rocket-payloads/graphic/orbital-artillery-rangefinding.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/orbital-artillery-rangefinding.png rename to expanded-rocket-payloads/graphic/orbital-artillery-rangefinding.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/orbital-prospecting.png b/expanded-rocket-payloads/graphic/orbital-prospecting.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/orbital-prospecting.png rename to expanded-rocket-payloads/graphic/orbital-prospecting.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/orbital-solar-collector-128.png b/expanded-rocket-payloads/graphic/orbital-solar-collector-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/orbital-solar-collector-128.png rename to expanded-rocket-payloads/graphic/orbital-solar-collector-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/planet32.png b/expanded-rocket-payloads/graphic/planet32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/planet32.png rename to expanded-rocket-payloads/graphic/planet32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/pluto-heart-32.png b/expanded-rocket-payloads/graphic/pluto-heart-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/pluto-heart-32.png rename to expanded-rocket-payloads/graphic/pluto-heart-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/power-problem-128.png b/expanded-rocket-payloads/graphic/power-problem-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/power-problem-128.png rename to expanded-rocket-payloads/graphic/power-problem-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/repurpose-fabricator-shuttle-32.png b/expanded-rocket-payloads/graphic/repurpose-fabricator-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/repurpose-fabricator-shuttle-32.png rename to expanded-rocket-payloads/graphic/repurpose-fabricator-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/repurpose-mining-shuttle-32.png b/expanded-rocket-payloads/graphic/repurpose-mining-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/repurpose-mining-shuttle-32.png rename to expanded-rocket-payloads/graphic/repurpose-mining-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/repurpose-space-shuttle-32.png b/expanded-rocket-payloads/graphic/repurpose-space-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/repurpose-space-shuttle-32.png rename to expanded-rocket-payloads/graphic/repurpose-space-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/repurpose-spy-shuttle-32.png b/expanded-rocket-payloads/graphic/repurpose-spy-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/repurpose-spy-shuttle-32.png rename to expanded-rocket-payloads/graphic/repurpose-spy-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/satellite-bus-32.png b/expanded-rocket-payloads/graphic/satellite-bus-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/satellite-bus-32.png rename to expanded-rocket-payloads/graphic/satellite-bus-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/satellite-coms-32.png b/expanded-rocket-payloads/graphic/satellite-coms-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/satellite-coms-32.png rename to expanded-rocket-payloads/graphic/satellite-coms-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/satellite-radar-32.png b/expanded-rocket-payloads/graphic/satellite-radar-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/satellite-radar-32.png rename to expanded-rocket-payloads/graphic/satellite-radar-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/shuttle-refurbishment-32.png b/expanded-rocket-payloads/graphic/shuttle-refurbishment-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/shuttle-refurbishment-32.png rename to expanded-rocket-payloads/graphic/shuttle-refurbishment-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/shuttle-repurposeing-128.png b/expanded-rocket-payloads/graphic/shuttle-repurposeing-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/shuttle-repurposeing-128.png rename to expanded-rocket-payloads/graphic/shuttle-repurposeing-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/shuttle-telescope-128.png b/expanded-rocket-payloads/graphic/shuttle-telescope-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/shuttle-telescope-128.png rename to expanded-rocket-payloads/graphic/shuttle-telescope-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/skylab-128.png b/expanded-rocket-payloads/graphic/skylab-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/skylab-128.png rename to expanded-rocket-payloads/graphic/skylab-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/skylab-32.png b/expanded-rocket-payloads/graphic/skylab-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/skylab-32.png rename to expanded-rocket-payloads/graphic/skylab-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/solar-collector-32.png b/expanded-rocket-payloads/graphic/solar-collector-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/solar-collector-32.png rename to expanded-rocket-payloads/graphic/solar-collector-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-fabricator-32.png b/expanded-rocket-payloads/graphic/space-fabricator-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-fabricator-32.png rename to expanded-rocket-payloads/graphic/space-fabricator-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-fabricator-advanced-128.png b/expanded-rocket-payloads/graphic/space-fabricator-advanced-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-fabricator-advanced-128.png rename to expanded-rocket-payloads/graphic/space-fabricator-advanced-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-fabricator-basic-128.png b/expanded-rocket-payloads/graphic/space-fabricator-basic-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-fabricator-basic-128.png rename to expanded-rocket-payloads/graphic/space-fabricator-basic-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-lab-128.png b/expanded-rocket-payloads/graphic/space-lab-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-lab-128.png rename to expanded-rocket-payloads/graphic/space-lab-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-lab-component-32.png b/expanded-rocket-payloads/graphic/space-lab-component-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-lab-component-32.png rename to expanded-rocket-payloads/graphic/space-lab-component-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-mining-128.png b/expanded-rocket-payloads/graphic/space-mining-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-mining-128.png rename to expanded-rocket-payloads/graphic/space-mining-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-mining-theory-128.png b/expanded-rocket-payloads/graphic/space-mining-theory-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-mining-theory-128.png rename to expanded-rocket-payloads/graphic/space-mining-theory-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-smelting.png b/expanded-rocket-payloads/graphic/space-smelting.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-smelting.png rename to expanded-rocket-payloads/graphic/space-smelting.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-telescope-uplink-station-200.png b/expanded-rocket-payloads/graphic/space-telescope-uplink-station-200.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-telescope-uplink-station-200.png rename to expanded-rocket-payloads/graphic/space-telescope-uplink-station-200.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/space-telescope-uplink-station-32.png b/expanded-rocket-payloads/graphic/space-telescope-uplink-station-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/space-telescope-uplink-station-32.png rename to expanded-rocket-payloads/graphic/space-telescope-uplink-station-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/spacelab128.png b/expanded-rocket-payloads/graphic/spacelab128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/spacelab128.png rename to expanded-rocket-payloads/graphic/spacelab128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/spy-shuttle-32.png b/expanded-rocket-payloads/graphic/spy-shuttle-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/spy-shuttle-32.png rename to expanded-rocket-payloads/graphic/spy-shuttle-32.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/telescope-components.png b/expanded-rocket-payloads/graphic/telescope-components.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/telescope-components.png rename to expanded-rocket-payloads/graphic/telescope-components.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/tess-128.png b/expanded-rocket-payloads/graphic/tess-128.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/tess-128.png rename to expanded-rocket-payloads/graphic/tess-128.png diff --git a/expanded-rocket-payloads_0.17.1/graphic/tess-32.png b/expanded-rocket-payloads/graphic/tess-32.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/graphic/tess-32.png rename to expanded-rocket-payloads/graphic/tess-32.png diff --git a/expanded-rocket-payloads_0.17.1/info.json b/expanded-rocket-payloads/info.json similarity index 100% rename from expanded-rocket-payloads_0.17.1/info.json rename to expanded-rocket-payloads/info.json diff --git a/expanded-rocket-payloads_0.17.1/locale/en/config.cfg b/expanded-rocket-payloads/locale/en/config.cfg similarity index 100% rename from expanded-rocket-payloads_0.17.1/locale/en/config.cfg rename to expanded-rocket-payloads/locale/en/config.cfg diff --git a/expanded-rocket-payloads_0.17.1/prototypes/category.lua b/expanded-rocket-payloads/prototypes/category.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/category.lua rename to expanded-rocket-payloads/prototypes/category.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/advanced-assembler-entity.lua b/expanded-rocket-payloads/prototypes/entity/advanced-assembler-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/advanced-assembler-entity.lua rename to expanded-rocket-payloads/prototypes/entity/advanced-assembler-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/erp-lab-entity.lua b/expanded-rocket-payloads/prototypes/entity/erp-lab-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/erp-lab-entity.lua rename to expanded-rocket-payloads/prototypes/entity/erp-lab-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/ground-telescope-entity.lua b/expanded-rocket-payloads/prototypes/entity/ground-telescope-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/ground-telescope-entity.lua rename to expanded-rocket-payloads/prototypes/entity/ground-telescope-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/orbital-fabricator-ground-entity.lua b/expanded-rocket-payloads/prototypes/entity/orbital-fabricator-ground-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/orbital-fabricator-ground-entity.lua rename to expanded-rocket-payloads/prototypes/entity/orbital-fabricator-ground-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/orbital-power-reciver-entity.lua b/expanded-rocket-payloads/prototypes/entity/orbital-power-reciver-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/orbital-power-reciver-entity.lua rename to expanded-rocket-payloads/prototypes/entity/orbital-power-reciver-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/entity/space-telescope-uplink-station-entity.lua b/expanded-rocket-payloads/prototypes/entity/space-telescope-uplink-station-entity.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/entity/space-telescope-uplink-station-entity.lua rename to expanded-rocket-payloads/prototypes/entity/space-telescope-uplink-station-entity.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/advanced-assembler-item.lua b/expanded-rocket-payloads/prototypes/item/advanced-assembler-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/advanced-assembler-item.lua rename to expanded-rocket-payloads/prototypes/item/advanced-assembler-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/advanced-probe.lua b/expanded-rocket-payloads/prototypes/item/advanced-probe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/advanced-probe.lua rename to expanded-rocket-payloads/prototypes/item/advanced-probe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/erp-lab-item.lua b/expanded-rocket-payloads/prototypes/item/erp-lab-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/erp-lab-item.lua rename to expanded-rocket-payloads/prototypes/item/erp-lab-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/ground-telescope-item.lua b/expanded-rocket-payloads/prototypes/item/ground-telescope-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/ground-telescope-item.lua rename to expanded-rocket-payloads/prototypes/item/ground-telescope-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/autonomous-space-mining-drone-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/autonomous-space-mining-drone-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/autonomous-space-mining-drone-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/autonomous-space-mining-drone-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/copper-dropship-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/copper-dropship-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/copper-dropship-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/copper-dropship-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/iron-dropship-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/iron-dropship-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/iron-dropship-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/iron-dropship-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/landed-mining-shuttle-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/landed-mining-shuttle-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/landed-mining-shuttle-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/landed-mining-shuttle-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/landed-shuttle-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/landed-shuttle-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/landed-shuttle-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/landed-shuttle-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/probe-data-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/probe-data-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/probe-data-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/probe-data-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/radioisotope-thermoelectric-generator-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/radioisotope-thermoelectric-generator-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/radioisotope-thermoelectric-generator-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/radioisotope-thermoelectric-generator-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-battery-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-battery-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-battery-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-battery-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-bus-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-bus-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-bus-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-bus-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-communications-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-communications-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-communications-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-communications-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-flight-computer-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-flight-computer-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-flight-computer-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-flight-computer-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-radar-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-radar-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-radar-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-radar-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-solar-array-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-solar-array-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-solar-array-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-solar-array-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-thruster-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/satellite-thruster-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/satellite-thruster-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/satellite-thruster-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/shuttle-hull-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/shuttle-hull-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/shuttle-hull-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/shuttle-hull-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/space-lab-payload-item.lua b/expanded-rocket-payloads/prototypes/item/intermediates/space-lab-payload-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/space-lab-payload-item.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/space-lab-payload-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/telescope-components.lua b/expanded-rocket-payloads/prototypes/item/intermediates/telescope-components.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/intermediates/telescope-components.lua rename to expanded-rocket-payloads/prototypes/item/intermediates/telescope-components.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/mining-shuttle-item.lua b/expanded-rocket-payloads/prototypes/item/mining-shuttle-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/mining-shuttle-item.lua rename to expanded-rocket-payloads/prototypes/item/mining-shuttle-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/observation-satellite.lua b/expanded-rocket-payloads/prototypes/item/observation-satellite.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/observation-satellite.lua rename to expanded-rocket-payloads/prototypes/item/observation-satellite.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/orbital-fabricator-items.lua b/expanded-rocket-payloads/prototypes/item/orbital-fabricator-items.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/orbital-fabricator-items.lua rename to expanded-rocket-payloads/prototypes/item/orbital-fabricator-items.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/orbital-power-reciver-item.lua b/expanded-rocket-payloads/prototypes/item/orbital-power-reciver-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/orbital-power-reciver-item.lua rename to expanded-rocket-payloads/prototypes/item/orbital-power-reciver-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/orbital-solar-collector-item.lua b/expanded-rocket-payloads/prototypes/item/orbital-solar-collector-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/orbital-solar-collector-item.lua rename to expanded-rocket-payloads/prototypes/item/orbital-solar-collector-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/planetary-data.lua b/expanded-rocket-payloads/prototypes/item/planetary-data.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/planetary-data.lua rename to expanded-rocket-payloads/prototypes/item/planetary-data.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/space-lab.lua b/expanded-rocket-payloads/prototypes/item/space-lab.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/space-lab.lua rename to expanded-rocket-payloads/prototypes/item/space-lab.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/space-shuttle-item.lua b/expanded-rocket-payloads/prototypes/item/space-shuttle-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/space-shuttle-item.lua rename to expanded-rocket-payloads/prototypes/item/space-shuttle-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/space-telescope-uplink-station-item.lua b/expanded-rocket-payloads/prototypes/item/space-telescope-uplink-station-item.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/space-telescope-uplink-station-item.lua rename to expanded-rocket-payloads/prototypes/item/space-telescope-uplink-station-item.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/space-telescope.lua b/expanded-rocket-payloads/prototypes/item/space-telescope.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/space-telescope.lua rename to expanded-rocket-payloads/prototypes/item/space-telescope.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/item/station-science.lua b/expanded-rocket-payloads/prototypes/item/station-science.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/item/station-science.lua rename to expanded-rocket-payloads/prototypes/item/station-science.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/advanced-assembler-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/advanced-assembler-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/advanced-assembler-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/advanced-assembler-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/advanced-probe-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/advanced-probe-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/advanced-probe-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/advanced-probe-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/autonomous-fabricator-recipies-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/autonomous-fabricator-recipies-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/autonomous-fabricator-recipies-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/autonomous-fabricator-recipies-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/erp-lab-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/erp-lab-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/erp-lab-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/erp-lab-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/ground-telescope-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/ground-telescope-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/ground-telescope-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/ground-telescope-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/autonomous-space-mining-drone-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/autonomous-space-mining-drone-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/autonomous-space-mining-drone-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/autonomous-space-mining-drone-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/copper-dropship-unboxing-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/copper-dropship-unboxing-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/copper-dropship-unboxing-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/copper-dropship-unboxing-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/iron-dropship-unboxing-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/iron-dropship-unboxing-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/iron-dropship-unboxing-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/iron-dropship-unboxing-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/landed-mining-shuttle-refurbishment-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/landed-mining-shuttle-refurbishment-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/landed-mining-shuttle-refurbishment-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/landed-mining-shuttle-refurbishment-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/probe-data-processing-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/probe-data-processing-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/probe-data-processing-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/probe-data-processing-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/radioisotope thermoelectric generator-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/radioisotope thermoelectric generator-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/radioisotope thermoelectric generator-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/radioisotope thermoelectric generator-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/refurbish-shuttle-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/refurbish-shuttle-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/refurbish-shuttle-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/refurbish-shuttle-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-battery-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-battery-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-battery-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-battery-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-bus-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-bus-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-bus-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-bus-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-communications-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-communications-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-communications-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-communications-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-flight-computer-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-flight-computer-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-flight-computer-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-flight-computer-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-radar-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-radar-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-radar-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-radar-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-solar-array-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-solar-array-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-solar-array-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-solar-array-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-thruster-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-thruster-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/satellite-thruster-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/satellite-thruster-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/shuttle-hull-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/shuttle-hull-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/shuttle-hull-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/shuttle-hull-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/space-lab-payload-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/space-lab-payload-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/space-lab-payload-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/space-lab-payload-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/space-shuttle-repurposing-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/space-shuttle-repurposing-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/space-shuttle-repurposing-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/space-shuttle-repurposing-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/telescope-components-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/intermediates/telescope-components-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/intermediates/telescope-components-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/intermediates/telescope-components-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/mining-shuttle-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/mining-shuttle-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/mining-shuttle-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/mining-shuttle-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/observation-satellite-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/observation-satellite-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/observation-satellite-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/observation-satellite-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/orbital-solar-collector-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/orbital-solar-collector-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/orbital-solar-collector-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/orbital-solar-collector-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/space-lab-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/space-lab-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/space-lab-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/space-lab-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/space-shuttle-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/space-shuttle-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/space-shuttle-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/space-shuttle-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/space-telescope-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/space-telescope-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/space-telescope-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/space-telescope-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/recipe/study-the-stars-recipe.lua b/expanded-rocket-payloads/prototypes/recipe/study-the-stars-recipe.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/recipe/study-the-stars-recipe.lua rename to expanded-rocket-payloads/prototypes/recipe/study-the-stars-recipe.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-battery-research-tech.lua b/expanded-rocket-payloads/prototypes/technology/advanced-battery-research-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-battery-research-tech.lua rename to expanded-rocket-payloads/prototypes/technology/advanced-battery-research-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-fan-research-tech.lua b/expanded-rocket-payloads/prototypes/technology/advanced-fan-research-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-fan-research-tech.lua rename to expanded-rocket-payloads/prototypes/technology/advanced-fan-research-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-machining-tech.lua b/expanded-rocket-payloads/prototypes/technology/advanced-machining-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-machining-tech.lua rename to expanded-rocket-payloads/prototypes/technology/advanced-machining-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-probe-tech.lua b/expanded-rocket-payloads/prototypes/technology/advanced-probe-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/advanced-probe-tech.lua rename to expanded-rocket-payloads/prototypes/technology/advanced-probe-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/drone-gps-tech.lua b/expanded-rocket-payloads/prototypes/technology/drone-gps-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/drone-gps-tech.lua rename to expanded-rocket-payloads/prototypes/technology/drone-gps-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/erp-lab-tech.lua b/expanded-rocket-payloads/prototypes/technology/erp-lab-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/erp-lab-tech.lua rename to expanded-rocket-payloads/prototypes/technology/erp-lab-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/extremely-advanced-material-processing-tech.lua b/expanded-rocket-payloads/prototypes/technology/extremely-advanced-material-processing-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/extremely-advanced-material-processing-tech.lua rename to expanded-rocket-payloads/prototypes/technology/extremely-advanced-material-processing-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/extremely-advanced-rocket-payloads-tech.lua b/expanded-rocket-payloads/prototypes/technology/extremely-advanced-rocket-payloads-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/extremely-advanced-rocket-payloads-tech.lua rename to expanded-rocket-payloads/prototypes/technology/extremely-advanced-rocket-payloads-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/ground-telescope-tech.lua b/expanded-rocket-payloads/prototypes/technology/ground-telescope-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/ground-telescope-tech.lua rename to expanded-rocket-payloads/prototypes/technology/ground-telescope-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/improved-space-program-theory-tech.lua b/expanded-rocket-payloads/prototypes/technology/improved-space-program-theory-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/improved-space-program-theory-tech.lua rename to expanded-rocket-payloads/prototypes/technology/improved-space-program-theory-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/observation-satellite-tech.lua b/expanded-rocket-payloads/prototypes/technology/observation-satellite-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/observation-satellite-tech.lua rename to expanded-rocket-payloads/prototypes/technology/observation-satellite-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/orbital-fabricators-tech.lua b/expanded-rocket-payloads/prototypes/technology/orbital-fabricators-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/orbital-fabricators-tech.lua rename to expanded-rocket-payloads/prototypes/technology/orbital-fabricators-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/orbital-solar-collector-tech.lua b/expanded-rocket-payloads/prototypes/technology/orbital-solar-collector-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/orbital-solar-collector-tech.lua rename to expanded-rocket-payloads/prototypes/technology/orbital-solar-collector-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/satellite-tracking-tech.lua b/expanded-rocket-payloads/prototypes/technology/satellite-tracking-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/satellite-tracking-tech.lua rename to expanded-rocket-payloads/prototypes/technology/satellite-tracking-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/shuttle-repurposing-tech.lua b/expanded-rocket-payloads/prototypes/technology/shuttle-repurposing-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/shuttle-repurposing-tech.lua rename to expanded-rocket-payloads/prototypes/technology/shuttle-repurposing-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-lab-research-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-lab-research-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-lab-research-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-lab-research-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-lab-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-lab-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-lab-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-lab-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-mining-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-mining-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-mining-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-mining-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-mining-theory-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-mining-theory-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-mining-theory-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-mining-theory-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-shuttle-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-shuttle-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-shuttle-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-shuttle-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-station-assembly-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-station-assembly-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-station-assembly-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-station-assembly-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-telescope-research-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-telescope-research-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-telescope-research-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-telescope-research-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/space-telescope-tech.lua b/expanded-rocket-payloads/prototypes/technology/space-telescope-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/space-telescope-tech.lua rename to expanded-rocket-payloads/prototypes/technology/space-telescope-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/prototypes/technology/stack-inserter-research-tech.lua b/expanded-rocket-payloads/prototypes/technology/stack-inserter-research-tech.lua similarity index 100% rename from expanded-rocket-payloads_0.17.1/prototypes/technology/stack-inserter-research-tech.lua rename to expanded-rocket-payloads/prototypes/technology/stack-inserter-research-tech.lua diff --git a/expanded-rocket-payloads_0.17.1/thumbnail.png b/expanded-rocket-payloads/thumbnail.png similarity index 100% rename from expanded-rocket-payloads_0.17.1/thumbnail.png rename to expanded-rocket-payloads/thumbnail.png diff --git a/extended-descriptions_1.2.1/changelog.txt b/extended-descriptions/changelog.txt similarity index 100% rename from extended-descriptions_1.2.1/changelog.txt rename to extended-descriptions/changelog.txt diff --git a/extended-descriptions/data-final-fixes.lua b/extended-descriptions/data-final-fixes.lua new file mode 100644 index 00000000..e8f2c77a --- /dev/null +++ b/extended-descriptions/data-final-fixes.lua @@ -0,0 +1,517 @@ +local floor = math.floor + +local function add_to_description(type, prototype, localised_string) + if prototype.localised_description and prototype.localised_description ~= '' then + prototype.localised_description = {'', prototype.localised_description, '\n', localised_string} + return + end + + local place_result = prototype.place_result or prototype.placed_as_equipment_result + if type == 'item' and place_result then + for _, machine in pairs(data.raw) do + machine = machine[place_result] + if machine and machine.localised_description then + prototype.localised_description = { + '?', + {'', machine.localised_description, '\n', localised_string}, + localised_string + } + return + end + end + + local entity_type = prototype.place_result and 'entity' or 'equipment' + prototype.localised_description = { + '?', + {'', {entity_type .. '-description.' .. place_result}, '\n', localised_string}, + {'', {type .. '-description.' .. prototype.name}, '\n', localised_string}, + localised_string + } + else + prototype.localised_description = { + '?', + {'', {type .. '-description.' .. prototype.name}, '\n', localised_string}, + localised_string + } + end +end + +local function contains(tbl, goal, f) + for _, v in pairs(tbl) do + if f then + if f(v) == goal then return true end + else + if v == goal then return true end + end + end + return false +end + +local function localised_string_contains(localised_string, key) + if type(localised_string) ~= 'table' then + return false + end + if localised_string[1] == key then + return localised_string[1] + end + for k, v in ipairs(localised_string) do + if k ~= 1 then + local result = localised_string_contains(v, key) + if result then return result end + end + end + return false +end + +local prefixes = { + [''] = 1, + k = 1000, + K = 1000, + M = 1000000, + G = 1000000000, + T = 1000000000000, + P = 1000000000000000, + E = 1000000000000000000, + Z = 1000000000000000000000, + Y = 1000000000000000000000000 +} +local function energy_to_number(energy) + local amount, unit, _ = string.match(energy, '(%d+)(%a-)[JW]') + return tonumber(amount) * prefixes[unit] +end + +local function map(tbl, f) + local result = {} + for k, v in pairs(tbl) do + result[k] = f(v, k, tbl) + end + return result +end + +local function localised_string_depth(localised_string) + if type(localised_string) ~= 'table' then + return 0 + end + local result = 0 + for k, v in pairs(localised_string) do + if k ~= 1 then + local depth = localised_string_depth(v) + if depth > result then + result = depth + end + end + end + return result + 1 +end + +-- productivity + +local recipes = {} +for module_name, mod in pairs(data.raw.module) do + if mod.limitation and mod.effect.productivity and module_name:find('pyveganism') == nil then + for recipe_name, recipe in pairs(data.raw.recipe) do + if not recipes[recipe_name] and contains(mod.limitation, recipe_name) then + add_to_description('recipe', recipe, {'description.productivity-message'}) + recipes[recipe_name] = true + end + end + end +end + +-- allowed modules + +if settings.startup['ed-allowed-modules'].value then + for _, prototype in ipairs{'lab', 'assembling-machine', 'furnace', 'rocket-silo', 'beacon', 'mining-drill'} do + for _, machine in pairs(data.raw[prototype]) do + if (prototype == 'lab' or prototype == 'mining-drill') and machine.allowed_effects == nil then + machine.allowed_effects = {'speed', 'productivity', 'consumption', 'pollution'} + end + + local modules = machine.module_specification + if modules and tonumber(modules.module_slots) and tonumber(modules.module_slots) > 0 and machine.allowed_effects and machine.allowed_effects ~= {} then + add_to_description('entity', machine, {'description.module-slots', tostring(machine.module_specification.module_slots)}) + + local allowed + if type(machine.allowed_effects) == 'string' then + allowed = {machine.allowed_effects} + elseif type(machine.allowed_effects) == 'table' then + allowed = machine.allowed_effects + end + + if not contains(allowed, 'speed') then + add_to_description('entity', machine, {'description.speed-module-limitation'}) + end + if not contains(allowed, 'productivity') then + add_to_description('entity', machine, {'description.productivity-module-limitation'}) + end + if not contains(allowed, 'consumption') then + add_to_description('entity', machine, {'description.consumption-module-limitation'}) + end + end + end + end +end + +-- building size + +if settings.startup['ed-building-size'].value then + for _, prototype in pairs(data.raw) do + for item_name, item in pairs(prototype) do + if item.stack_size then + if item.place_result then + for _, entity in pairs(data.raw) do + for _, entity in pairs(entity) do + if entity.minable and entity.minable.result == item_name and (entity.flags == nil or contains(entity.flags, 'placeable-off-grid') == false) then + local box = entity.collision_box + if box then + local x = math.ceil(box[2][2] * 2) / 2 - math.floor(box[1][2] * 2) / 2 + local y = math.ceil(box[2][1] * 2) / 2 - math.floor(box[1][1] * 2) / 2 + if x > 1 or y > 1 then + if y > x then x, y = y, x end + add_to_description('entity', entity, {'description.building-size', tostring(x), tostring(y)}) + end + end + goto done + end + end + end + ::done:: + end + else break end + end + end +end + +-- resistances for military entities + +if settings.startup['ed-military-resistances'].value then + for _, prototype in pairs(data.raw) do + for _, entity in pairs(prototype) do + if entity.stack_size then break end + if entity.attack_parameters or (entity.flags and contains(entity.flags, 'placeable-enemy')) then + entity.hide_resistances = false + end + end + end + + for _, prototype in ipairs{'wall', 'gate', 'car', 'artillery-wagon'} do + for _, entity in pairs(data.raw[prototype]) do + entity.hide_resistances = false + end + end +end + +-- heat + +if settings.startup['ed-heat'].value then + for _, name in ipairs{'reactor', 'heat-pipe'} do + for _, prototype in pairs(data.raw[name]) do + local buffer = prototype.heat_buffer + add_to_description('entity', prototype, {'description.max-heat', buffer.max_temperature}) + add_to_description('entity', prototype, {(name == 'reactor') and 'description.heat-loss-reactor' or 'description.heat-loss-pipe', buffer.min_temperature_gradient or 1}) + end + end +end + +-- solar ratios + +if settings.startup['ed-solar-ratios'].value then + for _, prototype in ipairs{'accumulator', 'solar-panel'} do + for name, machine in pairs(data.raw[prototype]) do + for _, item in pairs(data.raw.item) do + if item.place_result == name then + item.localised_description = item.localised_description or machine.localised_description or '' + end + end + end + end + + local empty_table = function() return {} end + local accumulators_perfect = map(data.raw.accumulator, empty_table) + local accumulators_imperfect = map(data.raw.accumulator, empty_table) + local solar_panels_perfect = map(data.raw['solar-panel'], empty_table) + local solar_panels_imperfect = map(data.raw['solar-panel'], empty_table) + + local accumulator_count = 0 + local solar_count = 0 + + for _, _ in pairs(data.raw['solar-panel']) do + solar_count = solar_count + 1 + end + + for accumulator_name, accumulator in pairs(data.raw.accumulator) do + accumulator_count = accumulator_count + 1 + local accumulator_localised_name = accumulator.localised_name or {'entity-name.' .. accumulator_name} + local accumulator_size = accumulator.energy_source.buffer_capacity + + if accumulator_size == '1J' then goto a end + + for solar_name, solar in pairs(data.raw['solar-panel']) do + local solar_localised_name = solar.localised_name or {'entity-name.' .. solar_name} + local panel_production = solar.production + + if panel_production == '1W' then goto s end + + local ratio = energy_to_number(panel_production) / energy_to_number(accumulator_size) * 70 + + local integer = math.floor(ratio) + local decimal = ratio - integer + local pn, n, N = 0, 1 + local pd, d, D = 1, 0 + local x, perfect, q, Q + repeat + x = x and 1 / (x - q) or decimal + q, Q = math.floor(x), math.floor(x + 0.5) + pn, n, N = n, q * n + pn, Q * n + pn + pd, d, D = d, q * d + pd, Q * d + pd + perfect = decimal - N/D + until math.abs(perfect) < 0.00000001 + perfect = perfect == 0 + + if perfect then + local accumulator_ratio = N + D * integer + local solar_ratio = D + table.insert(accumulators_perfect[accumulator_name], {'description.solar-ratio', solar_localised_name, accumulator_ratio, solar_ratio}) + table.insert(solar_panels_perfect[solar_name], {'description.solar-ratio', accumulator_localised_name, solar_ratio, accumulator_ratio}) + else + table.insert(accumulators_imperfect[accumulator_name], {'description.solar-ratio-imperfect', solar_localised_name , math.floor(0.5 + ratio * 1000) / 1000}) + table.insert(solar_panels_imperfect[solar_name], {'description.solar-ratio-imperfect', accumulator_localised_name, math.floor(0.5 + 1 / ratio * 1000) / 1000}) + end + ::s:: + end + ::a:: + end + + for name, accumulator in pairs(data.raw.accumulator) do + if solar_count + localised_string_depth(accumulator.localised_description) > 18 then goto next end + for _, perfect in pairs(accumulators_perfect[name]) do + add_to_description('entity', accumulator, perfect) + end + for _, perfect in pairs(accumulators_imperfect[name]) do + add_to_description('entity', accumulator, perfect) + end + ::next:: + end + + for name, solar in pairs(data.raw['solar-panel']) do + if accumulator_count + localised_string_depth(solar.localised_description) > 18 then goto next end + for _, perfect in pairs(solar_panels_perfect[name]) do + add_to_description('entity', solar, perfect) + end + for _, perfect in pairs(solar_panels_imperfect[name]) do + add_to_description('entity', solar, perfect) + end + ::next:: + end +end + +-- radar range + +if settings.startup['ed-radar-stats'].value then + for _, radar in pairs(data.raw.radar) do + add_to_description('entity', radar, {'description.radar-primary-range', radar.max_distance_of_nearby_sector_revealed}) + add_to_description('entity', radar, {'description.radar-secondary-range', radar.max_distance_of_sector_revealed}) + add_to_description('entity', radar, {'description.radar-scan-time', math.floor(0.5 + energy_to_number(radar.energy_per_sector) / energy_to_number(radar.energy_usage) * 100) / 100}) + end +end + +-- inserters + +if settings.startup['ed-inserter-stats'].value then + local inserter_stack_size = 1 + local stack_inserter_stack_size = 1 + + for _, technology in pairs(data.raw.technology) do + if technology.hidden ~= true and technology.enabled ~= false and technology.effects then + for _, effect in ipairs(technology.effects) do + if effect.type == 'inserter-stack-size-bonus' then + inserter_stack_size = inserter_stack_size + effect.modifier + elseif effect.type == 'stack-inserter-capacity-bonus' then + stack_inserter_stack_size = stack_inserter_stack_size + effect.modifier + end + end + end + end + + local fastest_belt + local slowest_belt + for _, belt in pairs(data.raw['transport-belt']) do + local speed = belt.speed * 480 + if 0 < speed and speed < 200 then + if fastest_belt == nil or speed > fastest_belt then + fastest_belt = speed + end + if slowest_belt == nil or speed < slowest_belt then + slowest_belt = speed + end + end + end + + for inserter_name, inserter in pairs(data.raw.inserter) do + local multiplier_1 = inserter.stack and 2 or 1 + local multiplier_2 = inserter.stack and stack_inserter_stack_size or inserter_stack_size + local hand_speed = inserter.rotation_speed * 57.75 + for _, item in pairs(data.raw.item) do + if item.place_result == inserter_name then + item.localised_description = item.localised_description or inserter.localised_description or '' + end + end + add_to_description('entity', inserter, { + '', + {'description.inserter-speed'}, + {'description.inserter-speed-chest-to-chest'}, + {'description.inserter-stack-size', multiplier_1, math.floor(0.5 + hand_speed * multiplier_1 * 100) / 100}, + {'description.inserter-stack-size', multiplier_2, math.floor(0.5 + hand_speed * multiplier_2 * 100) / 100}, + {'description.inserter-speed-chest-to-belt'}, + {'description.inserter-stack-size', multiplier_1, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_1 + 0.0445272463 * multiplier_1 / slowest_belt) * 100) / 100}, + {'description.inserter-belt-speed', slowest_belt}, + '\n', + {'description.inserter-stack-size', multiplier_2, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_2 + 0.0445272463 * multiplier_2 / fastest_belt) * 100) / 100}, + {'description.inserter-belt-speed', fastest_belt}, + '\n', + {'description.inserter-speed-belt-to-chest'}, + {'description.inserter-stack-size-guess', multiplier_1, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_1 + 0.055 * multiplier_1 / slowest_belt) * 10) / 10}, + {'description.inserter-belt-speed', slowest_belt}, + '\n', + {'description.inserter-stack-size-guess', multiplier_2, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_2 + 0.055 * multiplier_2 / fastest_belt) * 10) / 10}, + {'description.inserter-belt-speed', fastest_belt}, + }) + end +end + +-- SE build restrictions + +if mods['space-exploration'] then + for _, building in pairs(data.raw) do + for _, building in pairs(building) do + if building.localised_description then + local placement = localised_string_contains(building.localised_description, 'placement_restriction_line') + if placement then + add_to_description('entity', building, placement) + end + end + end + end +end + +-- tank size and pressure + +if settings.startup['ed-tank-size'].value then + for prototype_name, tank in pairs(data.raw) do + for tank_name, tank in pairs(tank) do + local box = tank.fluid_box + if box then + if tank.minable then + local size = (box.height or 1) * (box.base_area or 1) + local pressure = (box.height or 1) + (box.base_level or 0) + + if prototype_name ~= 'storage-tank' or pressure ~= 1 then + add_to_description('entity', tank, {'description.tank-size', size * 100}) + add_to_description('entity', tank, {'description.pressure', pressure * 100}) + end + end + else break end + end + end +end + +-- fluid colors + +if settings.startup['ed-fluid-colors'].value then + local function interpret_color(color) + local r = color.r or color[1] or 0 + local g = color.g or color[2] or 0 + local b = color.b or color[3] or 0 + local a = color.a or color[4] or 1 + + if r <= 1 and g <= 1 and b <= 1 and a <= 1 then + r = r * 255 + g = g * 255 + b = b * 255 + end + + return '[color=' .. tostring(floor(r)) .. ',' .. tostring(floor(g)) .. ',' .. tostring(floor(b)) .. '] β– [/color]' + end + + for _, fluid in pairs(data.raw.fluid) do + if fluid.localised_name and fluid.localised_name ~= '' then + fluid.localised_name = {'', fluid.localised_name, interpret_color(fluid.base_color)} + else + fluid.localised_name = {'', {'fluid-name.' .. fluid.name}, interpret_color(fluid.base_color)} + end + end +end + +-- deadlock stacking & item stack sizes + +for _, prototype in pairs(data.raw) do + for item_name, item in pairs(prototype) do + if item.stack_size and not item_name:find('^big%-data%-') then + add_to_description('item', item, {'description.stack-size', tostring(item.stack_size)}) + + if mods['deadlock-beltboxes-loaders'] and data.raw.item['deadlock-stack-' .. item_name] then + add_to_description('item', item, {'description.stackable'}) + end + else break end + end +end + +-- voiding + +if settings.startup['ed-voiding'].value then + local void_categories = { + ['incineration'] = {'incinerator', 'electric-incinerator'}, + ['fuel-incineration'] = {'electric-incinerator'}, + ['flaring'] = {'vent-stack', 'flare-stack'}, + ['py-incineration'] = {'py-burner'}, + ['py-venting'] = {'py-gas-vent'}, + ['py-runoff'] = {'py-sinkhole'}, + ['angels-chemical-void'] = {'angels-flare-stack'}, + ['angels-water-void'] = {'clarifier'} + } + + for _, recipe in pairs(data.raw.recipe) do + if recipe.category and void_categories[recipe.category] then + recipe.always_show_products = true + + local difficulty = recipe.normal or recipe.expensive or recipe + local ingredient = difficulty.ingredients[1] + + if ingredient == nil then break end + + if ingredient[1] then + ingredient = {type = 'item', name = ingredient[1], amount = ingredient[2]} + end + + local target + local target_type = 'item' + if ingredient.type == 'item' then + for _, prototype in pairs(data.raw) do + for _, item in pairs(prototype) do + if item.stack_size and prototype[ingredient.name] then + target = prototype[ingredient.name] + goto done + end + break + end + end + ::done:: + elseif ingredient.type == 'fluid' then + target = data.raw.fluid[ingredient.name] + target_type = 'fluid' + end + + for _, machine in ipairs(void_categories[recipe.category]) do + machine = data.raw.furnace[machine] or data.raw['assembling-machine'][machine] + if machine then + add_to_description(target_type, target, { + 'description.voidable', + machine.localised_name or {'entity-name.' .. machine.name}, + math.floor(0.5 + ingredient.amount / (difficulty.energy_required or 0.5) * 100) / 100 + }) + end + end + end + end +end + diff --git a/extended-descriptions/info.json b/extended-descriptions/info.json new file mode 100644 index 00000000..472a37e2 --- /dev/null +++ b/extended-descriptions/info.json @@ -0,0 +1,19 @@ +{ + "name": "extended-descriptions", + "version": "1.2.1", + "factorio_version": "1.1", + "title": "Extended Descriptions", + "author": "notnotmelon", + "description": "Adds critical information onto the tooltip of items, recipes, and entites", + "dependencies": [ + "base >= 1.1.74", + "(?) pypostprocessing", + "(?) deadlock-beltboxes-loaders", + "(?) angelsrefining", + "(?) angelspetrochem", + "(?) pyindustry", + "(?) Flare Stack", + "(?) space-exploration", + "(?) nullius", + "(?) zzzparanoidal"] +} diff --git a/extended-descriptions_1.2.1/locale/en/en.cfg b/extended-descriptions/locale/en/en.cfg similarity index 100% rename from extended-descriptions_1.2.1/locale/en/en.cfg rename to extended-descriptions/locale/en/en.cfg diff --git a/extended-descriptions_1.2.1/settings.lua b/extended-descriptions/settings.lua similarity index 100% rename from extended-descriptions_1.2.1/settings.lua rename to extended-descriptions/settings.lua diff --git a/extended-descriptions_1.2.1/thumbnail.png b/extended-descriptions/thumbnail.png similarity index 100% rename from extended-descriptions_1.2.1/thumbnail.png rename to extended-descriptions/thumbnail.png diff --git a/extended-descriptions_1.2.1/data-final-fixes.lua b/extended-descriptions_1.2.1/data-final-fixes.lua deleted file mode 100644 index 34f1e887..00000000 --- a/extended-descriptions_1.2.1/data-final-fixes.lua +++ /dev/null @@ -1,517 +0,0 @@ -local floor = math.floor - -local function add_to_description(type, prototype, localised_string) - if prototype.localised_description and prototype.localised_description ~= '' then - prototype.localised_description = {'', prototype.localised_description, '\n', localised_string} - return - end - - local place_result = prototype.place_result or prototype.placed_as_equipment_result - if type == 'item' and place_result then - for _, machine in pairs(data.raw) do - machine = machine[place_result] - if machine and machine.localised_description then - prototype.localised_description = { - '?', - {'', machine.localised_description, '\n', localised_string}, - localised_string - } - return - end - end - - local entity_type = prototype.place_result and 'entity' or 'equipment' - prototype.localised_description = { - '?', - {'', {entity_type .. '-description.' .. place_result}, '\n', localised_string}, - {'', {type .. '-description.' .. prototype.name}, '\n', localised_string}, - localised_string - } - else - prototype.localised_description = { - '?', - {'', {type .. '-description.' .. prototype.name}, '\n', localised_string}, - localised_string - } - end -end - -local function contains(tbl, goal, f) - for _, v in pairs(tbl) do - if f then - if f(v) == goal then return true end - else - if v == goal then return true end - end - end - return false -end - -local function localised_string_contains(localised_string, key) - if type(localised_string) ~= 'table' then - return false - end - if localised_string[1] == key then - return localised_string[1] - end - for k, v in ipairs(localised_string) do - if k ~= 1 then - local result = localised_string_contains(v, key) - if result then return result end - end - end - return false -end - -local prefixes = { - [''] = 1, - k = 1000, - K = 1000, - M = 1000000, - G = 1000000000, - T = 1000000000000, - P = 1000000000000000, - E = 1000000000000000000, - Z = 1000000000000000000000, - Y = 1000000000000000000000000 -} -local function energy_to_number(energy) - local amount, unit, _ = string.match(energy, '(%d+)(%a-)[JW]') - return tonumber(amount) * prefixes[unit] -end - -local function map(tbl, f) - local result = {} - for k, v in pairs(tbl) do - result[k] = f(v, k, tbl) - end - return result -end - -local function localised_string_depth(localised_string) - if type(localised_string) ~= 'table' then - return 0 - end - local result = 0 - for k, v in pairs(localised_string) do - if k ~= 1 then - local depth = localised_string_depth(v) - if depth > result then - result = depth - end - end - end - return result + 1 -end - --- productivity - -local recipes = {} -for module_name, mod in pairs(data.raw.module) do - if mod.limitation and mod.effect.productivity and module_name:find('pyveganism') == nil then - for recipe_name, recipe in pairs(data.raw.recipe) do - if not recipes[recipe_name] and contains(mod.limitation, recipe_name) then - add_to_description('recipe', recipe, {'description.productivity-message'}) - recipes[recipe_name] = true - end - end - end -end - --- allowed modules - -if settings.startup['ed-allowed-modules'].value then - for _, prototype in ipairs{'lab', 'assembling-machine', 'furnace', 'rocket-silo', 'beacon', 'mining-drill'} do - for _, machine in pairs(data.raw[prototype]) do - if (prototype == 'lab' or prototype == 'mining-drill') and machine.allowed_effects == nil then - machine.allowed_effects = {'speed', 'productivity', 'consumption', 'pollution'} - end - - local modules = machine.module_specification - if modules and tonumber(modules.module_slots) and tonumber(modules.module_slots) > 0 and machine.allowed_effects and machine.allowed_effects ~= {} then - add_to_description('entity', machine, {'description.module-slots', tostring(machine.module_specification.module_slots)}) - - local allowed - if type(machine.allowed_effects) == 'string' then - allowed = {machine.allowed_effects} - elseif type(machine.allowed_effects) == 'table' then - allowed = machine.allowed_effects - end - - if not contains(allowed, 'speed') then - add_to_description('entity', machine, {'description.speed-module-limitation'}) - end - if not contains(allowed, 'productivity') then - add_to_description('entity', machine, {'description.productivity-module-limitation'}) - end - if not contains(allowed, 'consumption') then - add_to_description('entity', machine, {'description.consumption-module-limitation'}) - end - end - end - end -end - --- building size - -if settings.startup['ed-building-size'].value then - for _, prototype in pairs(data.raw) do - for item_name, item in pairs(prototype) do - if item.stack_size then - if item.place_result then - for _, entity in pairs(data.raw) do - for _, entity in pairs(entity) do - if entity.minable and entity.minable.result == item_name and (entity.flags == nil or contains(entity.flags, 'placeable-off-grid') == false) then - local box = entity.collision_box - if box then - local x = math.ceil(box[2][2] * 2) / 2 - math.floor(box[1][2] * 2) / 2 - local y = math.ceil(box[2][1] * 2) / 2 - math.floor(box[1][1] * 2) / 2 - if x > 1 or y > 1 then - if y > x then x, y = y, x end - add_to_description('entity', entity, {'description.building-size', tostring(x), tostring(y)}) - end - end - goto done - end - end - end - ::done:: - end - else break end - end - end -end - --- resistances for military entities - -if settings.startup['ed-military-resistances'].value then - for _, prototype in pairs(data.raw) do - for _, entity in pairs(prototype) do - if entity.stack_size then break end - if entity.attack_parameters or (entity.flags and contains(entity.flags, 'placeable-enemy')) then - entity.hide_resistances = false - end - end - end - - for _, prototype in ipairs{'wall', 'gate', 'car', 'artillery-wagon'} do - for _, entity in pairs(data.raw[prototype]) do - entity.hide_resistances = false - end - end -end - --- heat - -if settings.startup['ed-heat'].value then - for _, name in ipairs{'reactor', 'heat-pipe'} do - for _, prototype in pairs(data.raw[name]) do - local buffer = prototype.heat_buffer - add_to_description('entity', prototype, {'description.max-heat', buffer.max_temperature}) - add_to_description('entity', prototype, {(name == 'reactor') and 'description.heat-loss-reactor' or 'description.heat-loss-pipe', buffer.min_temperature_gradient or 1}) - end - end -end - --- solar ratios - -if settings.startup['ed-solar-ratios'].value then - for _, prototype in ipairs{'accumulator', 'solar-panel'} do - for name, machine in pairs(data.raw[prototype]) do - for _, item in pairs(data.raw.item) do - if item.place_result == name then - item.localised_description = item.localised_description or machine.localised_description or '' - end - end - end - end - - local empty_table = function() return {} end - local accumulators_perfect = map(data.raw.accumulator, empty_table) - local accumulators_imperfect = map(data.raw.accumulator, empty_table) - local solar_panels_perfect = map(data.raw['solar-panel'], empty_table) - local solar_panels_imperfect = map(data.raw['solar-panel'], empty_table) - - local accumulator_count = 0 - local solar_count = 0 - - for _, _ in pairs(data.raw['solar-panel']) do - solar_count = solar_count + 1 - end - - for accumulator_name, accumulator in pairs(data.raw.accumulator) do - accumulator_count = accumulator_count + 1 - local accumulator_localised_name = accumulator.localised_name or {'entity-name.' .. accumulator_name} - local accumulator_size = accumulator.energy_source.buffer_capacity - - if accumulator_size == '1J' then goto a end - - for solar_name, solar in pairs(data.raw['solar-panel']) do - local solar_localised_name = solar.localised_name or {'entity-name.' .. solar_name} - local panel_production = solar.production - - if panel_production == '1W' then goto s end - - local ratio = energy_to_number(panel_production) / energy_to_number(accumulator_size) * 70 - - local integer = math.floor(ratio) - local decimal = ratio - integer - local pn, n, N = 0, 1 - local pd, d, D = 1, 0 - local x, perfect, q, Q - repeat - x = x and 1 / (x - q) or decimal - q, Q = math.floor(x), math.floor(x + 0.5) - pn, n, N = n, q * n + pn, Q * n + pn - pd, d, D = d, q * d + pd, Q * d + pd - perfect = decimal - N/D - until math.abs(perfect) < 0.00000001 - perfect = perfect == 0 - - if perfect then - local accumulator_ratio = N + D * integer - local solar_ratio = D - table.insert(accumulators_perfect[accumulator_name], {'description.solar-ratio', solar_localised_name, accumulator_ratio, solar_ratio}) - table.insert(solar_panels_perfect[solar_name], {'description.solar-ratio', accumulator_localised_name, solar_ratio, accumulator_ratio}) - else - table.insert(accumulators_imperfect[accumulator_name], {'description.solar-ratio-imperfect', solar_localised_name , math.floor(0.5 + ratio * 1000) / 1000}) - table.insert(solar_panels_imperfect[solar_name], {'description.solar-ratio-imperfect', accumulator_localised_name, math.floor(0.5 + 1 / ratio * 1000) / 1000}) - end - ::s:: - end - ::a:: - end - - for name, accumulator in pairs(data.raw.accumulator) do - if solar_count + localised_string_depth(accumulator.localised_description) > 18 then goto next end - for _, perfect in pairs(accumulators_perfect[name]) do - add_to_description('entity', accumulator, perfect) - end - for _, perfect in pairs(accumulators_imperfect[name]) do - add_to_description('entity', accumulator, perfect) - end - ::next:: - end - - for name, solar in pairs(data.raw['solar-panel']) do - if accumulator_count + localised_string_depth(solar.localised_description) > 18 then goto next end - for _, perfect in pairs(solar_panels_perfect[name]) do - add_to_description('entity', solar, perfect) - end - for _, perfect in pairs(solar_panels_imperfect[name]) do - add_to_description('entity', solar, perfect) - end - ::next:: - end -end - --- radar range - -if settings.startup['ed-radar-stats'].value then - for _, radar in pairs(data.raw.radar) do - add_to_description('entity', radar, {'description.radar-primary-range', radar.max_distance_of_nearby_sector_revealed}) - add_to_description('entity', radar, {'description.radar-secondary-range', radar.max_distance_of_sector_revealed}) - add_to_description('entity', radar, {'description.radar-scan-time', math.floor(0.5 + energy_to_number(radar.energy_per_sector) / energy_to_number(radar.energy_usage) * 100) / 100}) - end -end - --- inserters - -if settings.startup['ed-inserter-stats'].value then - local inserter_stack_size = 1 - local stack_inserter_stack_size = 1 - - for _, technology in pairs(data.raw.technology) do - if technology.hidden ~= true and technology.enabled ~= false and technology.effects then - for _, effect in ipairs(technology.effects) do - if effect.type == 'inserter-stack-size-bonus' then - inserter_stack_size = inserter_stack_size + effect.modifier - elseif effect.type == 'stack-inserter-capacity-bonus' then - stack_inserter_stack_size = stack_inserter_stack_size + effect.modifier - end - end - end - end - - local fastest_belt - local slowest_belt - for _, belt in pairs(data.raw['transport-belt']) do - local speed = belt.speed * 480 - if 0 < speed and speed < 200 then - if fastest_belt == nil or speed > fastest_belt then - fastest_belt = speed - end - if slowest_belt == nil or speed < slowest_belt then - slowest_belt = speed - end - end - end - - for inserter_name, inserter in pairs(data.raw.inserter) do - local multiplier_1 = inserter.stack and 2 or 1 - local multiplier_2 = inserter.stack and stack_inserter_stack_size or inserter_stack_size - local hand_speed = inserter.rotation_speed * 57.75 - for _, item in pairs(data.raw.item) do - if item.place_result == inserter_name then - item.localised_description = item.localised_description or inserter.localised_description or '' - end - end - add_to_description('entity', inserter, { - '', - {'description.inserter-speed'}, - {'description.inserter-speed-chest-to-chest'}, - {'description.inserter-stack-size', multiplier_1, math.floor(0.5 + hand_speed * multiplier_1 * 100) / 100}, - {'description.inserter-stack-size', multiplier_2, math.floor(0.5 + hand_speed * multiplier_2 * 100) / 100}, - {'description.inserter-speed-chest-to-belt'}, - {'description.inserter-stack-size', multiplier_1, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_1 + 0.0445272463 * multiplier_1 / slowest_belt) * 100) / 100}, - {'description.inserter-belt-speed', slowest_belt}, - '\n', - {'description.inserter-stack-size', multiplier_2, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_2 + 0.0445272463 * multiplier_2 / fastest_belt) * 100) / 100}, - {'description.inserter-belt-speed', fastest_belt}, - '\n', - {'description.inserter-speed-belt-to-chest'}, - {'description.inserter-stack-size-guess', multiplier_1, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_1 + 0.055 * multiplier_1 / slowest_belt) * 10) / 10}, - {'description.inserter-belt-speed', slowest_belt}, - '\n', - {'description.inserter-stack-size-guess', multiplier_2, math.floor(0.5 + 1 / (1 / hand_speed / multiplier_2 + 0.055 * multiplier_2 / fastest_belt) * 10) / 10}, - {'description.inserter-belt-speed', fastest_belt}, - }) - end -end - --- SE build restrictions - -if mods['space-exploration'] then - for _, building in pairs(data.raw) do - for _, building in pairs(building) do - if building.localised_description then - local placement = localised_string_contains(building.localised_description, 'placement_restriction_line') - if placement then - add_to_description('entity', building, placement) - end - end - end - end -end - --- tank size and pressure - -if settings.startup['ed-tank-size'].value then - for prototype_name, tank in pairs(data.raw) do - for tank_name, tank in pairs(tank) do - local box = tank.fluid_box - if box then - if tank.minable then - local size = (box.height or 1) * (box.base_area or 1) - local pressure = (box.height or 1) + (box.base_level or 0) - - if prototype_name ~= 'storage-tank' or pressure ~= 1 then - add_to_description('entity', tank, {'description.tank-size', size * 100}) - add_to_description('entity', tank, {'description.pressure', pressure * 100}) - end - end - else break end - end - end -end - --- fluid colors - -if settings.startup['ed-fluid-colors'].value then - local function interpret_color(color) - local r = color.r or color[1] or 0 - local g = color.g or color[2] or 0 - local b = color.b or color[3] or 0 - local a = color.a or color[4] or 1 - - if r <= 1 and g <= 1 and b <= 1 and a <= 1 then - r = r * 255 - g = g * 255 - b = b * 255 - end - - return '[color=' .. tostring(floor(r)) .. ',' .. tostring(floor(g)) .. ',' .. tostring(floor(b)) .. '] β– [/color]' - end - - for _, fluid in pairs(data.raw.fluid) do - if fluid.localised_name and fluid.localised_name ~= '' then - fluid.localised_name = {'', fluid.localised_name, interpret_color(fluid.base_color)} - else - fluid.localised_name = {'', {'fluid-name.' .. fluid.name}, interpret_color(fluid.base_color)} - end - end -end - --- deadlock stacking & item stack sizes - -for _, prototype in pairs(data.raw) do - for item_name, item in pairs(prototype) do - if item.stack_size and not item_name:find('^big%-data%-') then - add_to_description('item', item, {'description.stack-size', tostring(item.stack_size)}) - - if mods['deadlock-beltboxes-loaders'] and data.raw.item['deadlock-stack-' .. item_name] then - add_to_description('item', item, {'description.stackable'}) - end - else break end - end -end - --- voiding - -if settings.startup['ed-voiding'].value then - local void_categories = { - ['incineration'] = {'incinerator', 'electric-incinerator'}, - ['fuel-incineration'] = {'electric-incinerator'}, - ['flaring'] = {'vent-stack', 'flare-stack'}, - ['py-incineration'] = {'py-burner'}, - ['py-venting'] = {'py-gas-vent'}, - ['py-runoff'] = {'py-sinkhole'}, - ['angels-chemical-void'] = {'angels-flare-stack'}, - ['angels-water-void'] = {'clarifier'} - } - - for _, recipe in pairs(data.raw.recipe) do - if recipe.category and void_categories[recipe.category] then - recipe.always_show_products = true - - local difficulty = recipe.normal or recipe.expensive or recipe - local ingredient = difficulty.ingredients[1] - - if ingredient == nil then break end - - if ingredient[1] then - ingredient = {type = 'item', name = ingredient[1], amount = ingredient[2]} - end - - local target - local target_type = 'item' - if ingredient.type == 'item' then - for _, prototype in pairs(data.raw) do - for _, item in pairs(prototype) do - if item.stack_size and prototype[ingredient.name] then - target = prototype[ingredient.name] - goto done - end - break - end - end - ::done:: - elseif ingredient.type == 'fluid' then - target = data.raw.fluid[ingredient.name] - target_type = 'fluid' - end - - for _, machine in ipairs(void_categories[recipe.category]) do - machine = data.raw.furnace[machine] or data.raw['assembling-machine'][machine] - if machine then - add_to_description(target_type, target, { - 'description.voidable', - machine.localised_name or {'entity-name.' .. machine.name}, - math.floor(0.5 + ingredient.amount / (difficulty.energy_required or 0.5) * 100) / 100 - }) - end - end - end - end -end - diff --git a/extended-descriptions_1.2.1/info.json b/extended-descriptions_1.2.1/info.json deleted file mode 100644 index 2e2909d9..00000000 --- a/extended-descriptions_1.2.1/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "extended-descriptions", - "version": "1.2.1", - "factorio_version": "1.1", - "title": "Extended Descriptions", - "author": "notnotmelon", - "description": "Adds critical information onto the tooltip of items, recipes, and entites", - "dependencies": ["base >= 1.1.74", "(?) pypostprocessing", "(?) deadlock-beltboxes-loaders", "(?) angelsrefining", "(?) angelspetrochem", "(?) pyindustry", "(?) Flare Stack", "(?) space-exploration", "(?) nullius"] -} diff --git a/extended-descriptions_1.2.1/locale/ru/ru.cfg b/extended-descriptions_1.2.1/locale/ru/ru.cfg deleted file mode 100644 index 8187dff0..00000000 --- a/extended-descriptions_1.2.1/locale/ru/ru.cfg +++ /dev/null @@ -1,60 +0,0 @@ -[mod-setting-name] -ed-fluid-colors=Fluid colors in name -ed-voiding=Voiding info -ed-inserter-stats=Inserter throughput stats -ed-solar-ratios=Solar/accumulator ratios -ed-tank-size=Fluid tank size/pressure -ed-radar-stats=Radar stats -ed-heat=Heat -ed-military-resistances=Military resistances -ed-building-size=Building sizes -ed-allowed-modules=Allowed modules - -[mod-setting-description] -ed-fluid-colors=Fluids have a color in the game world, visible in the windows on pipes, tanks and pumps. This adds a small square in this color to the name of the fluid. -ed-voiding=For some mods that have ways to get rid of items and fluids in an automated way, this includes a note how to void them in the description. -ed-inserter-stats=Calculates throughput for belt/inserter and chest/inserter interactions and puts it in the built inserter entity description (not the item). -ed-solar-ratios=Tries to calculate a nice ratio table, if need be falling back to floating point ratios, of how much storage you need to buffer a standard Nauvis night, and puts it in the description of the accumulators and solar panels. -ed-tank-size=Shows the tank size and pressure for fluid storages. The pressure is calculated as tank.height + tank.base_level -ed-radar-stats=Displays various radar stats including view range, scan range, and scan time. -ed-heat=Displays the max heat capacity and heat loss per tile of reactors and heat pipes. -ed-military-resistances=Displays elemental resistances for all military entities such as walls, turrets, biters, and worms. The format is A/B% where A is a flat damage decrease and B is the percentage damage decrease. final damage = (original damage - A) * (1 - B) -ed-building-size=Shows the size of buildings in tiles. 1x1 buildings are not shown. -ed-allowed-modules=Shows the disallowed modules for machines such as assembling machines, furnaces, and labs. For example beacons block productivity modules. - -[description] -productivity-message=[font=default-semibold][color=255,230,192]Affected by productivity[/color][/font] - -voidable=[font=default-semibold][color=255,230,192]Voidable in: [/color][/font]__1__ (__2__/s) -stackable=[font=default-semibold][color=255,230,192]Beltbox stackable[/color][/font] -stack-size=[font=default-semibold][color=255,230,192]Stack size: [/color][/font]__1__ - -tank-size=[font=default-semibold][color=255,230,192]ΠžΠ±ΡŠΡ‘ΠΌ: [/color][/font]__1__ -pressure=[font=default-semibold][color=255,230,192]Π”Π°Π²Π»Π΅Π½ΠΈΠ΅: [/color][/font]__1__ - -building-size=[font=default-semibold][color=255,230,192]Π Π°Π·ΠΌΠ΅Ρ€: [/color][/font]__1__x__2__ - -max-heat=[font=default-semibold][color=255,230,192]Макс. Π½Π°Π³Ρ€Π΅Π²: [/color][/font]__1__ Β°C -heat-loss-reactor=[font=default-semibold][color=255,230,192]Heat decay per reactor: [/color][/font]__1__ Β°C -heat-loss-pipe=[font=default-semibold][color=255,230,192]Heat decay per tile: [/color][/font]__1__ Β°C - -solar-ratio=[font=default-semibold][color=255,230,192]Ratio per __1__: [/color][/font]__2__/__3__ -solar-ratio-imperfect=[font=default-semibold][color=255,230,192]Ratio per __1__: [/color][/font]__2__ - -radar-primary-range=[font=default-semibold][color=255,230,192]Радиус ΠΎΠ±Π·ΠΎΡ€Π°: [/color][/font]__1__ chunks -radar-secondary-range=[font=default-semibold][color=255,230,192]Радиус скана: [/color][/font]__1__ chunks -radar-scan-time=[font=default-semibold][color=255,230,192]ВрСмя скана: [/color][/font]__1__s - -module-slots=[font=default-semibold][color=255,230,192]Module slots: [/color][/font]__1__ -speed-module-limitation=[font=default-semibold][color=255,230,192] β€’ Rejects speed modules[/color][/font] -productivity-module-limitation=[font=default-semibold][color=255,230,192] β€’ Rejects productivity modules[/color][/font] -consumption-module-limitation=[font=default-semibold][color=255,230,192] β€’ Rejects effectivity modules[/color][/font] -pollution-module-limitation=[font=default-semibold][color=255,230,192] β€’ Rejects pollution modules[/color][/font] - -inserter-speed=[font=default-semibold][color=255,230,192]Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:[/color][/font]\n -inserter-speed-chest-to-chest=[font=default-semibold][color=255,230,192] β€’ Π‘ΡƒΠ½Π΄ΡƒΠΊ Π² сундук:[/color][/font]\n -inserter-speed-chest-to-belt=[font=default-semibold][color=255,230,192] β€’ Π‘ΡƒΠ½Π΄ΡƒΠΊ Π² пояс:[/color][/font]\n -inserter-speed-belt-to-chest=[font=default-semibold][color=255,230,192] β€’ Пояс Π² сундук:[/color][/font]\n -inserter-stack-size=[font=default-semibold][color=255,230,192] β€’ Stack size __1__: [/color][/font]__2__/s\n -inserter-stack-size-guess=[font=default-semibold][color=255,230,192] β€’ Stack size __1__: [/color][/font]~__2__/s\n -inserter-belt-speed=[font=default-semibold][color=255,230,192] β€’ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: [/color][/font]__1__ Items/s diff --git a/extendedangels_0.5.9/README.md b/extendedangels/README.md similarity index 100% rename from extendedangels_0.5.9/README.md rename to extendedangels/README.md diff --git a/extendedangels/changelog.txt b/extendedangels/changelog.txt new file mode 100644 index 00000000..3b5fb905 --- /dev/null +++ b/extendedangels/changelog.txt @@ -0,0 +1,325 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.5.8 +Date: 2023-01-01 + Changes: + - Adjusted the ingredients tiers for the following structures to align with changes to Angel's Bioprocessing in version 0.7.23 + - Oil press 2/3 ingredients increased from tiers 2/3 to tiers 3/4 + - Butchery 2/3 ingredients increased from tiers 2/3 to tiers 3/4 + - Basic farm 2/3 ingredients increased from tiers 1/2 to tiers 2/3 + - Desert, Swamp, and Temperate farm 2/3 ingredients increased from tiers 3/4 to tiers 4/5 + - Hatchery 2/3 ingredients increased from tiers 2/3 to tiers 4/5 + - Nutrient extractor 2/3 ingredients increased from tiers 2/3 to tiers 3/4 + - Fish tank 2/3 ingredients increased from tiers 2/3 to tiers 3/4 + - Moved Seed extractor 2 and 3 unlocks into technologies Garden Processing 2 and 3 respectively + - Moved Desert, Swamp, and Temperate farm 2 unlocks into their respective Farming 2 technologies + - Removed technology "Advanced farm upgrades 2", and moved Desert, Swamp and Temperate farm 3 unlocks into "Advanced farm upgrades" + - Minimum version of Angel's Bioprocessing has been incremented to version 0.7.23 + - Removed Air filter 3, Crystallizer 3 and Filtration Unit 3 as added by this mod; buildings are now native to Angel's Petrochem and Angel's Refining + - Minimum version of Angel's Smelting has been incremented to version 0.6.20 + Locale: + - Added partial localization for Korean +--------------------------------------------------------------------------------------------------- +Version: 0.5.7 +Date: 2022-04-03 + Locale: + - Updated localization for Ukrainian +--------------------------------------------------------------------------------------------------- +Version: 0.5.6 +Date: 2022-03-30 + Locale: + - Updated localization for Ukrainian +--------------------------------------------------------------------------------------------------- +Version: 0.5.5 +Date: 2022-03-19 + Locale: + - Added partial localization for Ukrainian + - Updated localization for French +--------------------------------------------------------------------------------------------------- +Version: 0.5.4 +Date: 2022-01-04 + Bugfixes: + - Fixed that several technology icons were not sized correctly when playing with the latest versions of Angel's mods +--------------------------------------------------------------------------------------------------- +Version: 0.5.3 +Date: 2021-12-19 + Changes: + - Minimum versions of Angel's Bioprocessing and Angel's Smelting have been incremented to the latest versions + Bugfixes: + - Fixed startup errors related to changed icon definitions for several buildings to account for graphics changes in Angel's Refinings 0.12.1 +--------------------------------------------------------------------------------------------------- +Version: 0.5.2 +Date: 2021-10-16 + Bugfixes: + - Fixed that tint assignment for Angel's Refining structures did not validate the existence of the field being called leading to a startup error when Artisanal Reskins: Angel's mods is enabled + Locale: + - Updated Russian localization +--------------------------------------------------------------------------------------------------- +Version: 0.5.1 +Date: 2021-09-14 + Changes: + - Changed icon for Oil refinery 3 to align with changes in Angel's Refining + Locale: + - Fixed that Flotation cell 4 was spelled incorrectly + - Added partial localization for Brazilian Portuguese +--------------------------------------------------------------------------------------------------- +Version: 0.5.0 +Date: 2021-08-13 + Features: + - Recipes have been reworked to be in-line with current Angel's recipes, and make use of higher tier materials where appropriate + - Technologies have had their time requirements updated to be more in-line with current Angel's technologies (15s -> 30s) + - Angel's Bioprocessing minimum required version now 0.7.20 + Changes: + - Angel's Bioprocessing 0.7.20 adds an Algae farm 4; as such the Algae farm 4 added by this mod has been changed to the Algae farm 5 + - No migration of existing algae farm 4s will be attempted to avoid collisions with Angel's Bioprocessing + Bugfixes: + - Updated the API call to Angel's Industries for `add_minable_results`, fixing a startup error + Locale: + - Added localization for Russian +--------------------------------------------------------------------------------------------------- +Version: 0.4.8 +Date: 2021-06-13 + Changes: + - Angel's Smelting minimum version set to 0.6.15 + - Angel's Bioprocessing minimum version set to 0.7.18 + - Removed now-redundant code bits related to supporting older versions of Angel's Smelting and Angel's Bioprocessing + Locale: + - Renamed Press 2 and Press 3 to Oil press 2 and Oil press 3 reflecting changes in Angel's Bioprocessing + - Updated German localization +--------------------------------------------------------------------------------------------------- +Version: 0.4.7 +Date: 2021-05-28 + Bugfixes: + - Fixed that Filtration unit 3 was missing a crafting category available in Filtration unit 2 +--------------------------------------------------------------------------------------------------- +Version: 0.4.6 +Date: 2021-05-28 + Bugfixes: + - Fixed inconsistent sorting of Warehouses in interface + - Fixed overwrite clash in Puffer refugium 3 technology with Angel's Bioprocessing + Locale: + - Added localization for German, partial localization for Vietnamese +--------------------------------------------------------------------------------------------------- +Version: 0.4.5 +Date: 2021-04-04 + Changes: + - Doubled the Tungsten carbide powder mixture output from 12 to 24 units, of the second tier of tungsten carbide powder mixture recipe, and increased the processing time from 8 to 16 seconds to bring it into line with the first and third tier recipes; also added tier numerals + - Adjusted item and recipe sorting to correct a few issues with tungsten carbide, copper tungsten and a few miscellaneous items + - Added an input fluid port on induction furnaces, and moved the recipes for molten copper-tungsten from the chemical furnace to the induction furnace + - Added high-res versions of copper tungsten and tungsten carbide items, recipes, and technologies, active when using the upcoming release of Angel's mods + Bugfixes: + - Fixed that the recipe for zinc powder did not have ingredients; it is now properly crafted from 1 zinc ingot +--------------------------------------------------------------------------------------------------- +Version: 0.4.4 +Date: 2021-03-26 + Bugfixes: + - Fixed that structures were not returning the correct item when deconstructed + Locale: + - Fixed several typos +--------------------------------------------------------------------------------------------------- +Version: 0.4.3 +Date: 2021-03-23 + Features: + - Added the setting "Legacy inventory sizes" to enable legacy inventory slot counts for warehouses + - Now dependent on Factorio Library + Changes: + - Adjusted the check for Angel's component mode to use the Angel's component mode trigger + - Adjusted the warehouse inventory size defaults for performance reasons; new defaults correspond to a 15%, 30%, and 45% increase for each tier over the defaults from Angel's Addons - Storage Options, down from 147%, 340%, 532%, and 725% +--------------------------------------------------------------------------------------------------- +Version: 0.4.2 +Date: 2021-03-21 + Bugfixes: + - Fixed startup error when no Angel's Addons mods are present. +--------------------------------------------------------------------------------------------------- +Version: 0.4.1 +Date: 2021-03-21 + Bugfixes: + - Fixed startup errors related to disabling warehouses while using Angel's Addons - Storage Options +--------------------------------------------------------------------------------------------------- +Version: 0.4.0 +Date: 2021-03-20 + Features: + - Added setting "Adjust icon ordering" to improve sort order of buildings in Angel's Petrochemical Processing and Angel's Bioprocessing mods, default on + Changes: + - Substantial code cleanup and rework of entity creation + - Updated how Angel numerals are handled; supports upcoming numeral rework in Angel's mods + - Technology `bio-pressing-2` now handles upcoming changes in Angel's Bioprocessing + - Locale updates to conform to upcoming locale changes in Angel's mods + - Adjusted pollution for several refining, petrochemical and bioprocessing buildings added by this mod to be in-line with Angel's pollution values + - Addjusted energy usage for several refining, petrochemical buildings to correct some inconsistencies with scaling + - Adjusted module slot count for bioprocessing buildings added by this mod to 2 (inherited) to be in line with changes to Angel's Bioprocessing regarding modules + - Corrected tier color progression for refining structures + - Removed version numbers from dependency +--------------------------------------------------------------------------------------------------- +Version: 0.3.13 +Date: 2021-03-20 + Changes: + - Patched for factorio 1.1 + - Updated to work with Angels Storage Options instead of the deprecated Warehouse mod + - Removed conditional requires +--------------------------------------------------------------------------------------------------- +Version: 0.3.12 +Date: 2020-06-07 + Changes: + - Changed Hatchery to have 3 output slots to match angels changes +--------------------------------------------------------------------------------------------------- +Version: 0.3.11 +Date: 2020-06-07 + Changes: + - Fixed crash when loading without Madclowns processing loaded +--------------------------------------------------------------------------------------------------- +Version: 0.3.10 +Date: 2020-05-31 + Changes: + - Fixed error on loading save game without Angel's Bioprocessing + - Fixed error with tech name change in bio proessiong 0.7.9 +--------------------------------------------------------------------------------------------------- +Version: 0.3.9 +Date: 2020-05-10 + Changes: + - Fixed crafting speed on bio buildings being wrong +--------------------------------------------------------------------------------------------------- +Version: 0.3.8 +Date: 2020-05-09 + Changes: + - Fixed locale for Tungsten Hexachloride Gas + - Added stone brick to Titanium Concrete Brick + - Fixed Crafting speed on Fish & Biter Refugium + - Fixed missing mk icons on arboretum and seed generators + - Added Seed Extractor MK2 & MK3 +--------------------------------------------------------------------------------------------------- +Version: 0.3.7 +Date: 2020-04-26 + Changes: + - Fixed Icon Ordering issues with Angels Bio Buildings + - Added Hatchery MK2 & MK3 + - Added Nutrient Extractor MK2 & MK3 + - Added Biter and Puffer Refugiume MK2 & MK3 + - Added Mk Icons to Warehouses +--------------------------------------------------------------------------------------------------- +Version: 0.3.6 +Date: 2020-04-26 + Changes: + - Fixed buildings not generation pollution + - Added Press MK2 & MK3 + - Added Bio Processor MK2 & MK3 + - Added Butchery MK2 & MK3 + - Added Composter MK2 & MK3 + - Added Crop, Desert, Swamp & Temperate Farms MK2 & MK3 +--------------------------------------------------------------------------------------------------- +Version: 0.3.5 +Date: 2020-04-20 + Changes: + - Fixed Titanium Brick not working +--------------------------------------------------------------------------------------------------- +Version: 0.3.4 +Date: 2020-04-19 + Changes: + - Removed logging for Angels Components support + - Fixed missing Bob's Logistics pack missing from Logistics warehoue 3 & 4 + - Added tress to Mk2 & Mk3 Seed Generators +--------------------------------------------------------------------------------------------------- +Version: 0.3.3 +Date: 2020-04-05 + Changes: + - The ingredient return on mining was being called no matter the setting thanks to Pezzawinkle + - Fixed dependecny checking for angels warehouse to work if no angels addon mods are loaded +--------------------------------------------------------------------------------------------------- +Version: 0.3.2 +Date: 2020-04-04 + Changes: + - Fixed bounding box issues with Warehouse forget to do this +--------------------------------------------------------------------------------------------------- +Version: 0.3.1 +Date: 2020-04-04 + Changes: + - Added Support for Angels Componets in Angels Industiries tanks to Pezzawinkle + - Fixed icons issues from lastest angel's update thanks to Pezzawinkle + - Fixed Angel's Liquifying recipes not showing up in Adv Chem Plant Mk3 + - Fixed Warehouse icorn sorting when Angel's Industries present thanks to triktor + - Fixed Buffer Mk2-4 appearing before requester when it should be after + - Fixed fast replace on some warehouses being container instead of angels-warhouses + - Removed Alage Farm Mk3 as Angels has added it + - Fixed squeakthrough not working on buildings + - Alage Farm mk4 now haves the number 4 icon on it instead of 3 + - Added upgrade planner support for all buildings +--------------------------------------------------------------------------------------------------- +Version: 0.3.0 +Date: N/A + Changes: + - Update to 0.18 + - Fixed overwrting Madclown's Processing Water Treament 5 Tech +--------------------------------------------------------------------------------------------------- +Version: 0.2.3 +Date: N/A + Changes: + - Fixed Aboretum missing from tech tree since Bio-Processing 0.6.2 changed the tech name +--------------------------------------------------------------------------------------------------- +Version: 0.2.2 +Date: N/A + Changes: + - Removed Hydro Plank Mk3 as angels added it + - Added Aboretum & Seed Generators Mk2 & Mk3 +--------------------------------------------------------------------------------------------------- +Version: 0.2.1 +Date: N/A + Changes: + - Fixed floatation Cell mk4 requring itself to make in expensive mode +--------------------------------------------------------------------------------------------------- +Version: 0.2.0 +Date: N/A + Changes: + - Updated to 0.17 + - Added Buffer Warehouse Mk2-4 +--------------------------------------------------------------------------------------------------- +Version: 0.1.6 +Date: N/A + Changes: + - Fixed warehouse icons being the same in the quickbar +--------------------------------------------------------------------------------------------------- +Version: 0.1.5 +Date: N/A + Changes: + - Fixed some more optinal depenecy issues +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: N/A + Changes: + - Updated some building recipes to use Titanium Reinforced Brick + - Fixed a typo + - Fixed some issues with adding the mod to an exisiting playthoourgh with recipes not being updated + - Reblanced Tungsten Smelting 3 + - Adjusted Tungsten Powder to use 1 solid and 2 fluids instead of 3 fluids as the chemical furnace has only 2 fluid inputs + - Fixed angels warehouse optinal dependecy not working +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: N/A + Changes: + - Changed Tungsten Hexachloride to use Tungsten Trioxide +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: N/A + Changes: + - Made it so if you set the icon scaling for Angel's Warehouse in the Mod Settings it works on mk2-mk4 warehouses +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: N/A + Changes: + - Fixed incorrect recipe with Hydro Plant MK4 +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: N/A + Changes: + - Initial Release + - Includes Copper Tungsten and Tungsten Carbide smelting using Angels Smelting + - Redone Tungsten Smelting 3 + - Adds Tetrasodium Pyrophosphate to Tungsten Smelting 3 if MadClown01's processing is present + - Added Titanium Reinforced Brick + - Added Advanced Chemical Plant MK3 + - Added Adv Gas Refineray MK4 + - Added Agle Farm Mk3 & MK4 + - Added Hydro Plant MK2 & MK3 + - Added Salation Plant MK3 + - Added Ore Washing Plant MK3 & MK4 + - Added Ore Crusher MK4, Floation Cell MK4, Leaching Plant MK4 & Ore Refineray MK3 + - Added Crystallizer and Filitration Unit MK3 + - Ported the Warehouse Addon Mod and added MK2-MK4 normal warhouses and tech changes diff --git a/extendedangels/control.lua b/extendedangels/control.lua new file mode 100644 index 00000000..f2a1e332 --- /dev/null +++ b/extendedangels/control.lua @@ -0,0 +1,94 @@ +local migration = require("__flib__.migration") + +script.on_configuration_changed(function(config) + -- Check recipe and technology states and make corrections as needed + for _, force in pairs(game.forces) do + local technologies = force.technologies + local recipes = force.recipes + + recipes["washing-plant-3"].enabled = technologies["water-washing-3"].researched + recipes["advanced-chemical-plant-3"].enabled = technologies["angels-advanced-chemistry-4"].researched + recipes["powder-zinc"].enabled = technologies["angels-zinc-smelting-2"].researched + recipes["gas-argon"].enabled = technologies["angels-nitrogen-processing-1"].researched + -- recipes["angels-air-filter-3"].enabled = technologies["angels-nitrogen-processing-3"].researched + recipes["angels-air-filter-4"].enabled = technologies["angels-nitrogen-processing-4"].researched + + if game.active_mods["Clowns-Processing"] then + if technologies["phosphorus-processing-2"].researched then + recipes["solid-disodium-phosphate"].enabled = true + recipes["solid-tetrasodium-pyrophosphate"].enabled = true + end + end + + if technologies["water-treatment-5"].researched then + recipes["hydro-plant-4"].enabled = true + recipes["salination-plant-3"].enabled = true + end + + if technologies["angels-tungsten-smelting-3"].researched then + recipes["solid-tungsten-trioxide-smelting"].enabled = true + recipes["pellet-tungsten-smelting-2"].enabled = true + recipes["solid-sodium-tungstate-smelting"].enabled = true + recipes["casting-powder-tungsten-3"].enabled = true + end + + if game.active_mods["angelsbioprocessing"] then + if technologies["bio-arboretum-2"].researched then + recipes["bio-generator-temperate-2"].enabled = true + recipes["bio-generator-swamp-2"].enabled = true + recipes["bio-generator-desert-2"].enabled = true + recipes["bio-arboretum-2"].enabled = true + end + + if technologies["bio-arboretum-3"].researched then + recipes["bio-generator-temperate-3"].enabled = true + recipes["bio-generator-swamp-3"].enabled = true + recipes["bio-generator-desert-3"].enabled = true + recipes["bio-arboretum-3"].enabled = true + end + + if technologies["bio-refugium-butchery-2"].researched then + recipes["bio-butchery-2"].enabled = true + end + + if technologies["bio-refugium-fish-2"].researched then + recipes["bio-refugium-fish-2"].enabled = true + end + + if technologies["bio-refugium-puffer-2"].researched then + recipes["bio-refugium-puffer-2"].enabled = true + end + + if technologies["bio-refugium-puffer-3"].researched then + recipes["bio-refugium-puffer-3"].enabled = true + end + + if technologies["bio-refugium-biter-2"].researched then + recipes["bio-refugium-biter-2"].enabled = true + end + + if technologies["bio-refugium-biter-3"].researched then + recipes["bio-refugium-biter-3"].enabled = true + end + + if technologies["bio-refugium-biter-3"].researched then + recipes["crop-farm-2"].enabled = true + recipes["composter-2"].enabled = true + recipes["bio-processor-2"].enabled = true + end + + if technologies["bio-pressing-2"].researched then + recipes["bio-press-2"].enabled = true + recipes["bio-press-3"].enabled = true + end + end + end + + -- Notify about inventory change if migrating from a version prior to the change + if config.mod_changes and config.mod_changes["extendedangels"] and config.mod_changes["extendedangels"].old_version then + -- 0.4.3 update + if not migration.is_newer_version("0.4.2", config.mod_changes["extendedangels"].old_version) then + game.print({"", "[", {"mod-name.extendedangels"}, "] ", {"extendedangels-notifications.legacy-inventory-sizes", {"mod-setting-name.extangels-legacy-inventory-sizes"}}}) + end + end +end) \ No newline at end of file diff --git a/extendedangels/data-final-fixes.lua b/extendedangels/data-final-fixes.lua new file mode 100644 index 00000000..0313f60b --- /dev/null +++ b/extendedangels/data-final-fixes.lua @@ -0,0 +1,102 @@ +-- Remove recipes and clear module limitations +local recipe_list = { + "pellet-tungsten-smelting", + "tungsten-carbide", + "tungsten-carbide-2", + "copper-tungsten-alloy" +} + +for _, recipe in pairs(recipe_list) do + data.raw.recipe[recipe] = nil + + for _, module in pairs(data.raw.module) do + if module.limitation then + for j,limit in pairs(module.limitation) do + if limit == recipe then + table.remove(module.limitation,j) + break + end + end + end + end +end + +-- Component/Tech overhaul recipe corrections +local previous_building = { + "algae-farm-5", + "bio-generator-temperate-2", + "bio-generator-temperate-3", + "bio-generator-swamp-2", + "bio-generator-swamp-3", + "bio-generator-desert-2", + "bio-generator-desert-3", + "bio-arboretum-2", + "bio-arboretum-3", + "gas-refinery-4", + "advanced-chemical-plant-3", + -- "angels-air-filter-3", + "angels-air-filter-4", + "hydro-plant-4", + "salination-plant-3", + "washing-plant-3", + "washing-plant-4", + "ore-crusher-4", + "ore-floatation-cell-4", + "ore-leaching-plant-4", + "ore-refinery-3", + -- "crystallizer-3", + -- "filtration-unit-3", + "bio-press-2", + "bio-press-3", + "bio-processor-2", + "bio-processor-3", + "bio-butchery-2", + "bio-butchery-3", + "composter-2", + "composter-3", + "crop-farm-2", + "crop-farm-3", + "temperate-farm-2", + "temperate-farm-3", + "desert-farm-2", + "desert-farm-3", + "swamp-farm-2", + "swamp-farm-3", + "bio-hatchery-2", + "bio-hatchery-3", + "nutrient-extractor-2", + "nutrient-extractor-3", + "bio-refugium-fish-2", + "bio-refugium-fish-3", + "bio-refugium-puffer-2", + "bio-refugium-puffer-3", + "bio-refugium-biter-2", + "bio-refugium-biter-3", + "seed-extractor-2", + "seed-extractor-3" +} + +require("prototypes.recipes.angels-components") + +if mods["angelsindustries"] then + if angelsmods.industries.components then + local OV = angelsmods.functions.OV + + extangels.replace_construction_materials() + OV.execute() + + for _, n in pairs(previous_building) do + table.remove(data.raw["recipe"][n]["normal"].ingredients, 1); + table.remove(data.raw["recipe"][n]["expensive"].ingredients, 1); + end + + if settings.startup["angels-return-ingredients"].value then + if not extangels.migration.is_newer_version("0.14.13", mods["angelsindustries"]) then + angelsmods.functions.AI.add_minable_results() + else + add_minable_results() + end + OV.execute() + end + end +end diff --git a/extendedangels/data-updates.lua b/extendedangels/data-updates.lua new file mode 100644 index 00000000..d4876e62 --- /dev/null +++ b/extendedangels/data-updates.lua @@ -0,0 +1,47 @@ +-- Fallbacks +require("prototypes.recipe-builder-fallbacks") + +-- Recipes +require("prototypes.recipes.bioprocessing") +require("prototypes.recipes.petrochem") +require("prototypes.recipes.refining") +require("prototypes.recipes.warehouses") + +-- Overrides +require("prototypes.overrides.bioprocessing") +require("prototypes.overrides.next-upgrades") +require("prototypes.overrides.petrochem") +require("prototypes.overrides.recipes") +require("prototypes.overrides.smelting") +require("prototypes.overrides.technology") +require("prototypes.overrides.warehouses") + +-- Tungsten carbide powder +data.raw.item["powder-tungsten-carbide"].icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png" +data.raw.item["powder-tungsten-carbide"].icon_size = 64 +data.raw.item["powder-tungsten-carbide"].icon_mipmaps = 4 +data.raw.recipe["tungsten-carbide-smelting-1"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4}, 1, angelsmods.smelting.number_tint) +data.raw.recipe["tungsten-carbide-smelting-2"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4}, 2, angelsmods.smelting.number_tint) +data.raw.recipe["tungsten-carbide-smelting-3"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.smelting.number_tint) +data.raw.technology["angels-tungsten-carbide-smelting-1"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" +data.raw.technology["angels-tungsten-carbide-smelting-1"].icon_size = 256 +data.raw.technology["angels-tungsten-carbide-smelting-1"].icon_mipmaps = 4 +data.raw.technology["angels-tungsten-carbide-smelting-2"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" +data.raw.technology["angels-tungsten-carbide-smelting-2"].icon_size = 256 +data.raw.technology["angels-tungsten-carbide-smelting-2"].icon_mipmaps = 4 +data.raw.technology["angels-tungsten-carbide-smelting-3"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" +data.raw.technology["angels-tungsten-carbide-smelting-3"].icon_size = 256 +data.raw.technology["angels-tungsten-carbide-smelting-3"].icon_mipmaps = 4 + +-- Molten copper tungsten +data.raw.fluid["liquid-molten-copper-tungsten"].icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png" +data.raw.fluid["liquid-molten-copper-tungsten"].icon_size = 64 +data.raw.fluid["liquid-molten-copper-tungsten"].icon_mipmaps = 4 +data.raw.recipe["copper-tungsten-smelting-1"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png", icon_size = 64, icon_mipmaps = 4}, 1, angelsmods.smelting.number_tint) +data.raw.recipe["copper-tungsten-smelting-2"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png", icon_size = 64, icon_mipmaps = 4}, 2, angelsmods.smelting.number_tint) +data.raw.technology["angels-copper-tungsten-smelting-1"].icon = "__extendedangels__/graphics/technology/copper-tungsten-smelting-and-casting.png" +data.raw.technology["angels-copper-tungsten-smelting-1"].icon_size = 256 +data.raw.technology["angels-copper-tungsten-smelting-1"].icon_mipmaps = 4 +data.raw.technology["angels-copper-tungsten-smelting-2"].icon = "__extendedangels__/graphics/technology/copper-tungsten-smelting-and-casting.png" +data.raw.technology["angels-copper-tungsten-smelting-2"].icon_size = 256 +data.raw.technology["angels-copper-tungsten-smelting-2"].icon_mipmaps = 4 \ No newline at end of file diff --git a/extendedangels/data.lua b/extendedangels/data.lua new file mode 100644 index 00000000..bfdf59f1 --- /dev/null +++ b/extendedangels/data.lua @@ -0,0 +1,30 @@ +-- Initial requires +require("prototypes.functions") +require("prototypes.subgroups") + +-- Setup numeral tint for Angel's warehouses if not already available +if mods["angelsaddons-storage"] then + if not angelsmods.addons.storage.number_tint then + angelsmods.addons.storage.number_tint = {r = 0.95, g = 0.65, b = 0.25, a = 1} + end +end + +-- Buildings +require("prototypes.buildings.petrochem") +require("prototypes.buildings.bioprocessing") +require("prototypes.buildings.refining") +require("prototypes.buildings.warehouses") + +-- Items +require("prototypes.items.petrochem") +require("prototypes.items.smelting") + +-- Recipes +require("prototypes.recipes.smelting") + +-- Technologies +require("prototypes.technology.petrochem") +require("prototypes.technology.smelting") +require("prototypes.technology.bioprocessing") +require("prototypes.technology.refining") +require("prototypes.technology.warehouses") \ No newline at end of file diff --git a/extendedangels_0.5.9/graphics/icons/brick-titanium.png b/extendedangels/graphics/icons/brick-titanium.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/brick-titanium.png rename to extendedangels/graphics/icons/brick-titanium.png diff --git a/extendedangels_0.5.9/graphics/icons/gas-argon.png b/extendedangels/graphics/icons/gas-argon.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/gas-argon.png rename to extendedangels/graphics/icons/gas-argon.png diff --git a/extendedangels_0.5.9/graphics/icons/gas-tungsten-hexachloride.png b/extendedangels/graphics/icons/gas-tungsten-hexachloride.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/gas-tungsten-hexachloride.png rename to extendedangels/graphics/icons/gas-tungsten-hexachloride.png diff --git a/extendedangels_0.5.9/graphics/icons/liquid-molten-copper-tungsten.png b/extendedangels/graphics/icons/liquid-molten-copper-tungsten.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/liquid-molten-copper-tungsten.png rename to extendedangels/graphics/icons/liquid-molten-copper-tungsten.png diff --git a/extendedangels_0.5.9/graphics/icons/molten-copper-tungsten.png b/extendedangels/graphics/icons/molten-copper-tungsten.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/molten-copper-tungsten.png rename to extendedangels/graphics/icons/molten-copper-tungsten.png diff --git a/extendedangels_0.5.9/graphics/icons/ore-leaching-plant-4.png b/extendedangels/graphics/icons/ore-leaching-plant-4.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/ore-leaching-plant-4.png rename to extendedangels/graphics/icons/ore-leaching-plant-4.png diff --git a/extendedangels_0.5.9/graphics/icons/powder-tungsten-carbide-hr.png b/extendedangels/graphics/icons/powder-tungsten-carbide-hr.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/powder-tungsten-carbide-hr.png rename to extendedangels/graphics/icons/powder-tungsten-carbide-hr.png diff --git a/extendedangels_0.5.9/graphics/icons/powder-tungsten-carbide.png b/extendedangels/graphics/icons/powder-tungsten-carbide.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/powder-tungsten-carbide.png rename to extendedangels/graphics/icons/powder-tungsten-carbide.png diff --git a/extendedangels_0.5.9/graphics/icons/solid-sodium-floride.png b/extendedangels/graphics/icons/solid-sodium-floride.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/solid-sodium-floride.png rename to extendedangels/graphics/icons/solid-sodium-floride.png diff --git a/extendedangels_0.5.9/graphics/icons/solid-sodium-tungstate.png b/extendedangels/graphics/icons/solid-sodium-tungstate.png similarity index 100% rename from extendedangels_0.5.9/graphics/icons/solid-sodium-tungstate.png rename to extendedangels/graphics/icons/solid-sodium-tungstate.png diff --git a/extendedangels_0.5.9/graphics/technology/copper-tungsten-smelting-and-casting.png b/extendedangels/graphics/technology/copper-tungsten-smelting-and-casting.png similarity index 100% rename from extendedangels_0.5.9/graphics/technology/copper-tungsten-smelting-and-casting.png rename to extendedangels/graphics/technology/copper-tungsten-smelting-and-casting.png diff --git a/extendedangels_0.5.9/graphics/technology/smelting-copper-tungsten.png b/extendedangels/graphics/technology/smelting-copper-tungsten.png similarity index 100% rename from extendedangels_0.5.9/graphics/technology/smelting-copper-tungsten.png rename to extendedangels/graphics/technology/smelting-copper-tungsten.png diff --git a/extendedangels_0.5.9/graphics/technology/smelting-tungsten-carbide.png b/extendedangels/graphics/technology/smelting-tungsten-carbide.png similarity index 100% rename from extendedangels_0.5.9/graphics/technology/smelting-tungsten-carbide.png rename to extendedangels/graphics/technology/smelting-tungsten-carbide.png diff --git a/extendedangels_0.5.9/graphics/technology/tungsten-carbide-smelting-and-casting.png b/extendedangels/graphics/technology/tungsten-carbide-smelting-and-casting.png similarity index 100% rename from extendedangels_0.5.9/graphics/technology/tungsten-carbide-smelting-and-casting.png rename to extendedangels/graphics/technology/tungsten-carbide-smelting-and-casting.png diff --git a/extendedangels/info.json b/extendedangels/info.json new file mode 100644 index 00000000..db47cbd7 --- /dev/null +++ b/extendedangels/info.json @@ -0,0 +1,16 @@ +{ + "name": "extendedangels", + "version": "0.5.10", + "factorio_version": "1.1", + "title": "Extended Angels", + "author": "AdamCirillo", + "dependencies":[ + "angelssmelting >= 0.6.22", + "bobplates", + "flib", + "? angelsaddons-storage", + "? bobtech", + "? angelsbioprocessing >= 0.7.25", + "? Clowns-Processing" + ] +} \ No newline at end of file diff --git a/extendedangels_0.5.9/locale/en/ext-ang-bioprocessing.cfg b/extendedangels/locale/en/ext-ang-bioprocessing.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-bioprocessing.cfg rename to extendedangels/locale/en/ext-ang-bioprocessing.cfg diff --git a/extendedangels_0.5.9/locale/en/ext-ang-main.cfg b/extendedangels/locale/en/ext-ang-main.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-main.cfg rename to extendedangels/locale/en/ext-ang-main.cfg diff --git a/extendedangels_0.5.9/locale/en/ext-ang-petrochem.cfg b/extendedangels/locale/en/ext-ang-petrochem.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-petrochem.cfg rename to extendedangels/locale/en/ext-ang-petrochem.cfg diff --git a/extendedangels_0.5.9/locale/en/ext-ang-refining.cfg b/extendedangels/locale/en/ext-ang-refining.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-refining.cfg rename to extendedangels/locale/en/ext-ang-refining.cfg diff --git a/extendedangels_0.5.9/locale/en/ext-ang-smelting.cfg b/extendedangels/locale/en/ext-ang-smelting.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-smelting.cfg rename to extendedangels/locale/en/ext-ang-smelting.cfg diff --git a/extendedangels_0.5.9/locale/en/ext-ang-storage.cfg b/extendedangels/locale/en/ext-ang-storage.cfg similarity index 100% rename from extendedangels_0.5.9/locale/en/ext-ang-storage.cfg rename to extendedangels/locale/en/ext-ang-storage.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-bioprocessing.cfg b/extendedangels/locale/ru/ext-ang-bioprocessing.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-bioprocessing.cfg rename to extendedangels/locale/ru/ext-ang-bioprocessing.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-main.cfg b/extendedangels/locale/ru/ext-ang-main.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-main.cfg rename to extendedangels/locale/ru/ext-ang-main.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-petrochem.cfg b/extendedangels/locale/ru/ext-ang-petrochem.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-petrochem.cfg rename to extendedangels/locale/ru/ext-ang-petrochem.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-refining.cfg b/extendedangels/locale/ru/ext-ang-refining.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-refining.cfg rename to extendedangels/locale/ru/ext-ang-refining.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-smelting.cfg b/extendedangels/locale/ru/ext-ang-smelting.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-smelting.cfg rename to extendedangels/locale/ru/ext-ang-smelting.cfg diff --git a/extendedangels_0.5.9/locale/ru/ext-ang-storage.cfg b/extendedangels/locale/ru/ext-ang-storage.cfg similarity index 100% rename from extendedangels_0.5.9/locale/ru/ext-ang-storage.cfg rename to extendedangels/locale/ru/ext-ang-storage.cfg diff --git a/extendedangels/migrations/extendedangels_0.5.8.json b/extendedangels/migrations/extendedangels_0.5.8.json new file mode 100644 index 00000000..7913c979 --- /dev/null +++ b/extendedangels/migrations/extendedangels_0.5.8.json @@ -0,0 +1,6 @@ +{ + "technology": + [ + ["bio-farm-advanced-upgrade-2", "bio-farm-advanced-upgrade"] + ] +} \ No newline at end of file diff --git a/extendedangels_0.5.9/migrations/extendedangels_0.5.8.lua b/extendedangels/migrations/extendedangels_0.5.8.lua similarity index 100% rename from extendedangels_0.5.9/migrations/extendedangels_0.5.8.lua rename to extendedangels/migrations/extendedangels_0.5.8.lua diff --git a/extendedangels/prototypes/buildings/bioprocessing.lua b/extendedangels/prototypes/buildings/bioprocessing.lua new file mode 100644 index 00000000..0460348c --- /dev/null +++ b/extendedangels/prototypes/buildings/bioprocessing.lua @@ -0,0 +1,587 @@ +if not angelsmods.bioprocessing then return end + +-- Set common parameters +local tint = angelsmods.bioprocessing.number_tint + +-- Create list of buildings with parameters different from source entity +local bioprocessing_buildings = { + -- Algae farms + ["algae-farm-5"] = { + source = "algae-farm-4", + icon = "__angelsbioprocessing__/graphics/icons/algae-farm.png", + tier = 5, + order = "a[algae]-e", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + crafting_speed = 3, + emissions_per_minute = -100/3 * 3, + energy_usage = "225kW", + }, + + -- Arboretums + ["bio-arboretum-2"] = { + source = "bio-arboretum-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-arboretum.png", + tier = 2, + order = "c[arboretum]-ab", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + next_upgrade = "bio-arboretum-3", + crafting_speed = 1, + emissions_per_minute = -200, + energy_usage = "200kW", + }, + + ["bio-arboretum-3"] = { + source = "bio-arboretum-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-arboretum.png", + tier = 3, + order = "c[arboretum]-ac", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 6, + crafting_speed = 2, + emissions_per_minute = -400, + energy_usage = "400kW", + }, + + -- Seed generators + ["bio-generator-temperate-2"] = { + source = "bio-generator-temperate-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-temperate-generator.png", + tier = 2, + order = "b[generator]-aa", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + next_upgrade = "bio-generator-temperate-3", + crafting_speed = 1, + emissions_per_minute = -150, + energy_usage = "200kW", + }, + + ["bio-generator-temperate-3"] = { + source = "bio-generator-temperate-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-temperate-generator.png", + tier = 3, + order = "b[generator]-ab", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 6, + crafting_speed = 2, + emissions_per_minute = -300, + energy_usage = "400kW", + }, + + ["bio-generator-swamp-2"] = { + source = "bio-generator-swamp-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-swamp-generator.png", + tier = 2, + order = "b[generator]-ba", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + next_upgrade = "bio-generator-swamp-3", + crafting_speed = 1, + emissions_per_minute = -150, + energy_usage = "200kW", + }, + + ["bio-generator-swamp-3"] = { + source = "bio-generator-swamp-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-swamp-generator.png", + tier = 3, + order = "b[generator]-bb", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 6, + crafting_speed = 2, + emissions_per_minute = -300, + energy_usage = "400kW", + }, + + ["bio-generator-desert-2"] = { + source = "bio-generator-desert-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-desert-generator.png", + tier = 2, + order = "b[generator]-ca", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + next_upgrade = "bio-generator-desert-3", + crafting_speed = 1, + emissions_per_minute = -150, + energy_usage = "200kW", + }, + + ["bio-generator-desert-3"] = { + source = "bio-generator-desert-1", + icon = "__angelsbioprocessing__/graphics/icons/bio-desert-generator.png", + tier = 3, + order = "b[generator]-cb", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 6, + crafting_speed = 2, + emissions_per_minute = -300, + energy_usage = "400kW", + }, + + -- Presses + ["bio-press-2"] = { + source = "bio-press", + icon = "__angelsbioprocessing__/graphics/icons/bio-press.png", + tier = 2, + order = "d[bio-press]-b[mk2]", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 3, + next_upgrade = "bio-press-3", + crafting_speed = 1.5, + emissions_per_minute = 0.04 * 60, + energy_usage = "190kW", + }, + + ["bio-press-3"] = { + source = "bio-press", + icon = "__angelsbioprocessing__/graphics/icons/bio-press.png", + tier = 3, + order = "d[bio-press]-c[mk3]", + subgroup = "bio-processing-buildings-nauvis-a", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = 0.05 * 60, + energy_usage = "225kW", + }, + + -- Processors + ["bio-processor-2"] = { + source = "bio-processor", + icon = "__angelsbioprocessing__/graphics/icons/bio-processor.png", + tier = 2, + order = "ca", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 3, + next_upgrade = "bio-processor-3", + crafting_speed = 1.5, + emissions_per_minute = 0.04 * 60, + energy_usage = "190kW", + }, + + ["bio-processor-3"] = { + source = "bio-processor", + icon = "__angelsbioprocessing__/graphics/icons/bio-processor.png", + tier = 3, + order = "cb", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = 0.05 * 60, + energy_usage = "225kW", + }, + + -- Butcheries + ["bio-butchery-2"] = { + source = "bio-butchery", + type = "furnace", + icon = "__angelsbioprocessing__/graphics/icons/bio-butchery.png", + tier = 2, + order = "ba", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 3, + next_upgrade = "bio-butchery-3", + crafting_speed = 3, + emissions_per_minute = 0.02 * 60, + energy_usage = "190kW", + }, + + ["bio-butchery-3"] = { + source = "bio-butchery", + type = "furnace", + icon = "__angelsbioprocessing__/graphics/icons/bio-butchery.png", + tier = 3, + order = "bb", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = 0.03 * 60, + energy_usage = "225kW", + }, + + -- Composters + ["composter-2"] = { + source = "composter", + type = "furnace", + icon = "__angelsbioprocessing__/graphics/icons/composter.png", + tier = 2, + order = "ba", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 3, + next_upgrade = "composter-3", + crafting_speed = 3, + emissions_per_minute = 0.02 * 60, + energy_usage = "40kW", + }, + + ["composter-3"] = { + source = "composter", + type = "furnace", + icon = "__angelsbioprocessing__/graphics/icons/composter.png", + tier = 3, + order = "bb", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = 0.03 * 60, + energy_usage = "45kW", + }, + + -- Crop farms + ["crop-farm-2"] = { + source = "crop-farm", + icon = "__angelsbioprocessing__/graphics/icons/basic-farm.png", + tier = 2, + order = "aa", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 3, + next_upgrade = "crop-farm-3", + crafting_speed = 1.5, + emissions_per_minute = -60, + energy_usage = "125kW", + }, + + ["crop-farm-3"] = { + source = "crop-farm", + icon = "__angelsbioprocessing__/graphics/icons/basic-farm.png", + tier = 3, + order = "ab", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = -80, + energy_usage = "150kW", + }, + + ["temperate-farm-2"] = { + source = "temperate-farm", + icon = "__angelsbioprocessing__/graphics/icons/temperate-farm.png", + tier = 2, + order = "baa", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 3, + next_upgrade = "temperate-farm-3", + crafting_speed = 3, + emissions_per_minute = -120, + energy_usage = "155kW", + }, + + ["temperate-farm-3"] = { + source = "temperate-farm", + icon = "__angelsbioprocessing__/graphics/icons/temperate-farm.png", + tier = 3, + order = "bab", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = -160, + energy_usage = "190kW", + }, + + ["swamp-farm-2"] = { + source = "swamp-farm", + icon = "__angelsbioprocessing__/graphics/icons/swamp-farm.png", + tier = 2, + order = "bba", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 3, + next_upgrade = "swamp-farm-3", + crafting_speed = 3, + emissions_per_minute = -120, + energy_usage = "155kW", + }, + + ["swamp-farm-3"] = { + source = "swamp-farm", + icon = "__angelsbioprocessing__/graphics/icons/swamp-farm.png", + tier = 3, + order = "bbc", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = -160, + energy_usage = "190kW", + }, + + ["desert-farm-2"] = { + source = "desert-farm", + icon = "__angelsbioprocessing__/graphics/icons/desert-farm.png", + tier = 2, + order = "bca", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 3, + next_upgrade = "desert-farm-3", + crafting_speed = 3, + emissions_per_minute = -120, + energy_usage = "155kW", + }, + + ["desert-farm-3"] = { + source = "desert-farm", + icon = "__angelsbioprocessing__/graphics/icons/desert-farm.png", + tier = 3, + order = "bcb", + subgroup = "bio-processing-buildings-vegetabilis-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = -160, + energy_usage = "190kW", + }, + + -- Hatcheries + ["bio-hatchery-2"] = { + type = "furnace", + source = "bio-hatchery", + icon = "__angelsbioprocessing__/graphics/icons/bio-hatchery.png", + tier = 2, + order = "ca", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 3, + next_upgrade = "bio-hatchery-3", + crafting_speed = 3, + emissions_per_minute = 0.02 * 60, + energy_usage = "190kW", + }, + + ["bio-hatchery-3"] = { + type = "furnace", + source = "bio-hatchery", + icon = "__angelsbioprocessing__/graphics/icons/bio-hatchery.png", + tier = 3, + order = "cb", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = 0.03 * 60, + energy_usage = "225kW", + }, + + -- Nutrient extractors + ["nutrient-extractor-2"] = { + source = "nutrient-extractor", + icon = "__angelsbioprocessing__/graphics/icons/nutrient-extractor.png", + tier = 2, + order = "d[nutrient-extractor]-b[mk2]", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 3, + next_upgrade = "nutrient-extractor-3", + crafting_speed = 1.5, + emissions_per_minute = 0.04 * 60, + energy_usage = "190kW", + }, + + ["nutrient-extractor-3"] = { + source = "nutrient-extractor", + icon = "__angelsbioprocessing__/graphics/icons/nutrient-extractor.png", + tier = 3, + order = "d[nutrient-extractor]-c[mk3]", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = 0.05 * 60, + energy_usage = "225kW", + }, + + -- Refugiums + ["bio-refugium-fish-2"] = { + source = "bio-refugium-fish", + icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-fish.png", + tier = 2, + order = "aa", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 3, + next_upgrade = "bio-refugium-fish-3", + crafting_speed = 1.25, + emissions_per_minute = -60, + energy_usage = "190kW", + }, + + ["bio-refugium-fish-3"] = { + source = "bio-refugium-fish", + icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-fish.png", + tier = 3, + order = "ab", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = -100, + energy_usage = "225kW", + }, + + ["bio-refugium-puffer-2"] = { + source = "bio-refugium-puffer", + icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-puffer.png", + tier = 2, + order = "da", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 3, + next_upgrade = "bio-refugium-puffer-3", + crafting_speed = 1.25, + emissions_per_minute = -60, + energy_usage = "190kW", + }, + + ["bio-refugium-puffer-3"] = { + source = "bio-refugium-puffer", + icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-puffer.png", + tier = 3, + order = "db", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = -100, + energy_usage = "225kW", + }, + + ["bio-refugium-biter-2"] = { + source = "bio-refugium-biter", + icon = "__angelsbioprocessing__/graphics/icons/alien-farm.png", + tier = 2, + order = "ea", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 3, + next_upgrade = "bio-refugium-biter-3", + crafting_speed = 3, + emissions_per_minute = -40, + energy_usage = "190kW", + }, + + ["bio-refugium-biter-3"] = { + source = "bio-refugium-biter", + icon = "__angelsbioprocessing__/graphics/icons/alien-farm.png", + tier = 3, + order = "eb", + subgroup = "bio-processing-buildings-alien-a", + -- module_slots = 4, + crafting_speed = 4, + emissions_per_minute = -60, + energy_usage = "225kW", + }, + + -- Seed extractors + ["seed-extractor-2"] = { + source = "seed-extractor", + icon = "__angelsbioprocessing__/graphics/icons/seed-extractor.png", + tier = 2, + order = "aa", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 3, + next_upgrade = "seed-extractor-3", + crafting_speed = 1.25, + emissions_per_minute = 0.04 * 60, + energy_usage = "180kW", + }, + + ["seed-extractor-3"] = { + source = "seed-extractor", + icon = "__angelsbioprocessing__/graphics/icons/seed-extractor.png", + tier = 3, + order = "ab", + subgroup = "bio-processing-buildings-vegetabilis-b", + -- module_slots = 4, + crafting_speed = 2, + emissions_per_minute = 0.05 * 60, + energy_usage = "220kW", + }, +} + +for name, params in pairs(bioprocessing_buildings) do + -- Check for source entity + local source_entity = data.raw[params.type and params.type or "assembling-machine"][params.source] + if not source_entity then goto continue end + + -- Fetch the icon with numeral overlay + local icons = extangels.numeral_tier({icon = params.icon, icon_size = params.icon_size or 32}, params.tier, params.tint or tint) + + data:extend({ + -- Create the item + { + type = "item", + name = name, + icons = icons, + subgroup = params.subgroup or nil, + order = params.order, + place_result = name, + stack_size = params.stack_size or 10, + }, + + -- Create the entity + util.merge{source_entity, { + name = name, + minable = {result = name}, + next_upgrade = params.next_upgrade or nil, + module_specification = params.module_slots and {module_slots = params.module_slots} or nil, + crafting_speed = params.crafting_speed or nil, + energy_source = params.emissions_per_minute and {emissions_per_minute = params.emissions_per_minute} or nil, + energy_usage = params.energy_usage or nil, + }}, + }) + + -- Set entity icon + data.raw[params.type and params.type or "assembling-machine"][name].icons = icons + + -- Continue + ::continue:: +end + +-- Fix properties for Angel buildings +local buildings = { + ["algae-farm"] = {prototype = "assembling-machine", tier = 1}, + ["algae-farm-2"] = {prototype = "assembling-machine", tier = 2}, + ["algae-farm-3"] = {prototype = "assembling-machine", tier = 3}, + ["algae-farm-4"] = {prototype = "assembling-machine", tier = 4}, + ["bio-arboretum-1"] = {prototype = "assembling-machine", tier = 1}, + ["bio-generator-temperate-1"] = {prototype = "assembling-machine", tier = 1}, + ["bio-generator-swamp-1"] = {prototype = "assembling-machine", tier = 1}, + ["bio-generator-desert-1"] = {prototype = "assembling-machine", tier = 1}, + ["bio-press"] = {prototype = "assembling-machine", tier = 1, order = "d[bio-press]-a[mk1]"}, + ["bio-processor"] = {prototype = "assembling-machine", tier = 1}, + ["bio-butchery"] = {prototype = "furnace", tier = 1}, + ["composter"] = {prototype = "furnace", tier = 1}, + ["crop-farm"] = {prototype = "assembling-machine", tier = 1}, + ["temperate-farm"] = {prototype = "assembling-machine", tier = 1}, + ["swamp-farm"] = {prototype = "assembling-machine", tier = 1}, + ["desert-farm"] = {prototype = "assembling-machine", tier = 1}, + ["bio-hatchery"] = {prototype = "furnace", tier = 1}, + ["nutrient-extractor"] = {prototype = "assembling-machine", tier = 1, order = "d[nutrient-extractor]-a[mk1]"}, + ["bio-refugium-fish"] = {prototype = "assembling-machine", tier = 1}, + ["bio-refugium-puffer"] = {prototype = "assembling-machine", tier = 1}, + ["bio-refugium-biter"] = {prototype = "assembling-machine", tier = 1}, + ["seed-extractor"] = {prototype = "assembling-machine", tier = 1}, +} + +for name, params in pairs(buildings) do + local item = data.raw.item[name] + local entity = data.raw[params.prototype][name] + + if item and (item.icons or item.icon) then + local item_icon, item_icon_size + if item.icons then + item_icon = item.icons[1].icon + item_icon_size = item.icons[1].icon_size or item.icon_size or 32 + elseif item.icon then + item_icon = item.icon + item_icon_size = item.icon_size or 32 + end + + item.icons = extangels.numeral_tier({icon = item_icon, icon_size = item_icon_size}, params.tier, tint) + end + + if entity and (entity.icons or entity.icon) then + local entity_icon, entity_icon_size + if entity.icons then + entity_icon = entity.icons[1].icon + entity_icon_size = entity.icons[1].icon_size or entity.icon_size or 32 + elseif entity.icon then + entity_icon = entity.icon + entity_icon_size = entity.icon_size or 32 + end + + entity.icons = extangels.numeral_tier({icon = entity_icon, icon_size = entity_icon_size}, params.tier, tint) + end + + if item and params.order then + item.order = params.order + end +end \ No newline at end of file diff --git a/extendedangels/prototypes/buildings/petrochem.lua b/extendedangels/prototypes/buildings/petrochem.lua new file mode 100644 index 00000000..dd7d25f5 --- /dev/null +++ b/extendedangels/prototypes/buildings/petrochem.lua @@ -0,0 +1,67 @@ +data:extend({ + -- Advanced Chemical Plant + { + type = "item", + name = "advanced-chemical-plant-3", + icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/advanced-chemical-plant.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint), + subgroup = "petrochem-buildings-chemical-plant", + order = "b[advanced]-c", + place_result = "advanced-chemical-plant-3", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["advanced-chemical-plant"], { + name = "advanced-chemical-plant-3", + minable = {result = "advanced-chemical-plant-3"}, + module_specification = {module_slots = 4}, + crafting_speed = 3.5, + energy_source = {emissions_per_minute = 0.1 * 60}, + energy_usage = "500kW", + }}, + + -- -- Air filter 3 + -- { + -- type = "item", + -- name = "angels-air-filter-3", + -- icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint), + -- subgroup = "petrochem-buildings-electrolyser", + -- order = "b[angels-air-filter]-c", + -- place_result = "angels-air-filter-3", + -- stack_size = 10, + -- }, + + -- util.merge{data.raw["assembling-machine"]["angels-air-filter"], { + -- name = "angels-air-filter-3", + -- minable = {result = "angels-air-filter-3"}, + -- next_upgrade = "angels-air-filter-4", + -- module_specification = {module_slots = 3}, + -- crafting_speed = 3, + -- energy_source = {emissions_per_minute = -0.14 * 60}, + -- energy_usage = "250kW", + -- }}, + + -- Air filter 4 + { + type = "item", + name = "angels-air-filter-4", + icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 4, angelsmods.petrochem.number_tint), + subgroup = "petrochem-buildings-electrolyser", + order = "b[angels-air-filter]-d", + place_result = "angels-air-filter-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["angels-air-filter"], { + name = "angels-air-filter-4", + minable = {result = "angels-air-filter-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 4, + energy_source = {emissions_per_minute = -0.16 * 60}, + energy_usage = "300kW", + }}, +}) + +-- Entity icon adjustments +data.raw["assembling-machine"]["advanced-chemical-plant-3"].icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/advanced-chemical-plant.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint) +-- data.raw["assembling-machine"]["angels-air-filter-3"].icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint) +data.raw["assembling-machine"]["angels-air-filter-4"].icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 4, angelsmods.petrochem.number_tint) \ No newline at end of file diff --git a/extendedangels/prototypes/buildings/refining.lua b/extendedangels/prototypes/buildings/refining.lua new file mode 100644 index 00000000..0b453b55 --- /dev/null +++ b/extendedangels/prototypes/buildings/refining.lua @@ -0,0 +1,222 @@ +data:extend({ + -- Hydro plant 4 + { + type = "item", + name = "hydro-plant-4", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/hydro-plant.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint), + subgroup = "water-treatment-building", + order = "a[hydro-plant]-d[mk4]", + place_result = "hydro-plant-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["hydro-plant"], { + name = "hydro-plant-4", + minable = {result = "hydro-plant-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 4, + energy_source = {emissions_per_minute = 0.06 * 60}, + energy_usage = "300kW", + }}, + + -- Salination plant 3 + { + type = "item", + name = "salination-plant-3", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/salination-plant.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint), + subgroup = "water-treatment-building", + order = "f[salination-plant3]", + place_result = "salination-plant-3", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["salination-plant"], { + name = "salination-plant-3", + minable = {result = "salination-plant-3"}, + module_specification = {module_slots = 3}, + crafting_speed = 3, + energy_source = {emissions_per_minute = 0.05 * 60}, + energy_usage = "300kW", + }}, + + -- Washing plant 3 + { + type = "item", + name = "washing-plant-3", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32}, 3, angelsmods.refining.number_tint), + subgroup = "washing-building", + order = "b[washing-plant]-c[mk3]", + place_result = "washing-plant-3", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["washing-plant"], { + name = "washing-plant-3", + minable = {result = "washing-plant-3"}, + next_upgrade = "washing-plant-4", + module_specification = {module_slots = 3}, + crafting_speed = 3, + energy_source = {emissions_per_minute = 0.05 * 60}, + energy_usage = "200kW", + }}, + + -- Washing plant 4 + { + type = "item", + name = "washing-plant-4", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32}, 4, angelsmods.refining.number_tint), + subgroup = "washing-building", + order = "b[washing-plant]-d[mk4]", + place_result = "washing-plant-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["washing-plant"], { + name = "washing-plant-4", + minable = {result = "washing-plant-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 4, + energy_source = {emissions_per_minute = 0.06 * 60}, + energy_usage = "250kW", + }}, + + -- Ore crusher 4 + { + type = "item", + name = "ore-crusher-4", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-crusher.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint), + subgroup = "ore-crusher", + order = "e[ore-crusher-4]", + place_result = "ore-crusher-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["ore-crusher-3"], { + name = "ore-crusher-4", + minable = {result = "ore-crusher-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 4, + energy_source = {emissions_per_minute = 0.06 * 60}, + energy_usage = "175kW", + }}, + + -- Ore floatation cell 4 + { + type = "item", + name = "ore-floatation-cell-4", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-floatation-cell.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint), + subgroup = "ore-floatation", + order = "d[ore-floatation-cell-4]", + place_result = "ore-floatation-cell-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["ore-floatation-cell-3"], { + name = "ore-floatation-cell-4", + minable = {result = "ore-floatation-cell-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 2, + energy_source = {emissions_per_minute = 0.05 * 60}, + energy_usage = "350kW", + }}, + + -- Ore leaching plant 4 + { + type = "item", + name = "ore-leaching-plant-4", + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/ore-leaching-plant-4.png", icon_size = 32}, 4, angelsmods.refining.number_tint), + subgroup = "ore-leaching", + order = "d[ore-leaching-plant-4]", + place_result = "ore-leaching-plant-4", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["ore-leaching-plant-3"], { + name = "ore-leaching-plant-4", + minable = {result = "ore-leaching-plant-4"}, + module_specification = {module_slots = 4}, + crafting_speed = 2, + energy_source = {emissions_per_minute = 0.07 * 60}, + energy_usage = "350kW", + }}, + + -- Ore refinery 3 + { + type = "item", + name = "ore-refinery-3", + icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-refinery.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint), + subgroup = "ore-refining", + order = "c[ore-refinery-3]", + place_result = "ore-refinery-3", + stack_size = 10, + }, + + util.merge{data.raw["assembling-machine"]["ore-refinery-2"], { + name = "ore-refinery-3", + minable = {result = "ore-refinery-3"}, + module_specification = {module_slots = 3}, + crafting_speed = 2, + energy_source = {emissions_per_minute = 0.04 * 60}, + energy_usage = "400kW", + }}, + + -- -- Crystallizer 3 + -- { + -- type = "item", + -- name = "crystallizer-3", + -- icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/crystallizer.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint), + -- subgroup = "refining-buildings", + -- order = "c[crystallizer]-c[mk3]", + -- place_result = "crystallizer-3", + -- stack_size = 10, + -- }, + + -- util.merge{data.raw["assembling-machine"]["crystallizer"], { + -- name = "crystallizer-3", + -- minable = {result = "crystallizer-3"}, + -- module_specification = {module_slots = 3}, + -- crafting_speed = 3, + -- energy_source = {emissions_per_minute = 0.05 * 60}, + -- energy_usage = "350kW", + -- }}, + + -- -- Filtration unit 3 + -- { + -- type = "item", + -- name = "filtration-unit-3", + -- icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/filtration-unit.png", icon_size = 32}, 3, angelsmods.refining.number_tint), + -- subgroup = "refining-buildings", + -- order = "b[filtration-unit]-c[mk3]", + -- place_result = "filtration-unit-3", + -- stack_size = 10, + -- }, + + -- util.merge{data.raw["assembling-machine"]["filtration-unit-2"], { + -- name = "filtration-unit-3", + -- minable = {result = "filtration-unit-3"}, + -- module_specification = {module_slots = 3}, + -- crafting_speed = 3, + -- energy_source = {emissions_per_minute = 0.05 * 60}, + -- energy_usage = "200kW", + -- }}, +}) + +-- Item order fixes +data.raw.item["hydro-plant"].order = "a[hydro-plant]-a[mk1]" +data.raw.item["hydro-plant-2"].order = "a[hydro-plant]-b[mk2]" +data.raw.item["hydro-plant-3"].order = "a[hydro-plant]-c[mk3]" +data.raw.item["washing-plant"].order = "b[washing-plant]-a[mk1]" +data.raw.item["washing-plant-2"].order = "b[washing-plant]-b[mk2]" + + +-- Entity icon adjustments +data.raw["assembling-machine"]["hydro-plant-4"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/hydro-plant.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["salination-plant-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/salination-plant.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["washing-plant-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32}, 3, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["washing-plant-4"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32}, 4, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["ore-crusher-4"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-crusher.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["ore-floatation-cell-4"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-floatation-cell.png", icon_size = 64, icon_mipmaps = 4}, 4, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["ore-leaching-plant-4"].icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/ore-leaching-plant-4.png", icon_size = 32}, 4, angelsmods.refining.number_tint) +data.raw["assembling-machine"]["ore-refinery-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/ore-refinery.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint) +-- data.raw["assembling-machine"]["crystallizer-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/crystallizer.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint) +-- data.raw["assembling-machine"]["filtration-unit-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/filtration-unit.png", icon_size = 32}, 3, angelsmods.refining.number_tint) \ No newline at end of file diff --git a/extendedangels/prototypes/buildings/warehouses.lua b/extendedangels/prototypes/buildings/warehouses.lua new file mode 100644 index 00000000..ded23ea2 --- /dev/null +++ b/extendedangels/prototypes/buildings/warehouses.lua @@ -0,0 +1,348 @@ +if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end + +-- Check whether we're using legacy inventories +local legacy = settings.startup["extangels-legacy-inventory-sizes"].value + +-- Inventory size adjustments +local inventory_sizes = { + [1] = { + warehouse = legacy and 1728 or 768, + passive_provider = legacy and 1900 or 418, + active_provider = legacy and 1900 or 512, + storage = legacy and 1900 or 768, + buffer = legacy and 1900 or 512, + requester = legacy and 1900 or 418, + }, + [2] = { + warehouse = legacy and 3072 or 884, + passive_provider = legacy and 3378 or 480, + active_provider = legacy and 3378 or 588, + storage = legacy and 3378 or 884, + buffer = legacy and 3378 or 588, + requester = legacy and 3378 or 480, + }, + [3] = { + warehouse = legacy and 4416 or 1148, + passive_provider = legacy and 4856 or 624, + active_provider = legacy and 4856 or 766, + storage = legacy and 4856 or 1148, + buffer = legacy and 4856 or 766, + requester = legacy and 4856 or 624, + }, + [4] = { + warehouse = legacy and 6035 or 1664, + passive_provider = legacy and 6336 or 906, + active_provider = legacy and 6336 or 1110, + storage = legacy and 6336 or 1664, + buffer = legacy and 6336 or 1110, + requester = legacy and 6336 or 906, + } +} + +-- Override the inventory size of the standard warehouses +if data.raw["container"]["angels-warehouse"] then + data.raw["container"]["angels-warehouse"].inventory_size = inventory_sizes[1].warehouse +end + +if data.raw["logistic-container"]["angels-warehouse-passive-provider"] then + data.raw["logistic-container"]["angels-warehouse-passive-provider"].inventory_size = inventory_sizes[1].passive_provider +end + +if data.raw["logistic-container"]["angels-warehouse-active-provider"] then + data.raw["logistic-container"]["angels-warehouse-active-provider"].inventory_size = inventory_sizes[1].active_provider +end + +if data.raw["logistic-container"]["angels-warehouse-storage"] then + data.raw["logistic-container"]["angels-warehouse-storage"].inventory_size = inventory_sizes[1].storage +end + +if data.raw["logistic-container"]["angels-warehouse-requester"] then + data.raw["logistic-container"]["angels-warehouse-requester"].inventory_size = inventory_sizes[1].requester +end + +if data.raw["logistic-container"]["angels-warehouse-buffer"] then + data.raw["logistic-container"]["angels-warehouse-buffer"].inventory_size = inventory_sizes[1].buffer +end + +local tint = angelsmods.addons.storage.number_tint + +local warehouse_buildings = { + -- STANDARD WAREHOUSES + -- Warehouse 2 + ["warehouse-mk2"] = { + source = "angels-warehouse", + type = "container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", + tier = 2, + order = "a[warehouse-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-mk3", + inventory_size = inventory_sizes[2].warehouse, + }, + + -- Warehouse 3 + ["warehouse-mk3"] = { + source = "angels-warehouse", + type = "container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", + tier = 3, + order = "a[warehouse-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-mk4", + inventory_size = inventory_sizes[3].warehouse, + }, + + -- Warehouse 4 + ["warehouse-mk4"] = { + source = "angels-warehouse", + type = "container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", + tier = 4, + order = "a[warehouse-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].warehouse, + }, + + -- LOGISTIC WAREHOUSES + -- Warehouse passive provider 2 + ["warehouse-passive-provider-mk2"] = { + source = "angels-warehouse-passive-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", + tier = 2, + order = "b[warehouse-passive-provider-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-passive-provider-mk3", + inventory_size = inventory_sizes[2].passive_provider, + }, + + -- Warehouse passive provider 3 + ["warehouse-passive-provider-mk3"] = { + source = "angels-warehouse-passive-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", + tier = 3, + order = "b[warehouse-passive-provider-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-passive-provider-mk4", + inventory_size = inventory_sizes[3].passive_provider, + }, + + -- Warehouse passive provider 4 + ["warehouse-passive-provider-mk4"] = { + source = "angels-warehouse-passive-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", + tier = 4, + order = "b[warehouse-passive-provider-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].passive_provider, + }, + + -- Warehouse active provider 2 + ["warehouse-active-provider-mk2"] = { + source = "angels-warehouse-active-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", + tier = 2, + order = "c[warehouse-active-provider-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-active-provider-mk3", + inventory_size = inventory_sizes[2].active_provider, + }, + + -- Warehouse active provider 3 + ["warehouse-active-provider-mk3"] = { + source = "angels-warehouse-active-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", + tier = 3, + order = "c[warehouse-active-provider-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-active-provider-mk4", + inventory_size = inventory_sizes[3].active_provider, + }, + + -- Warehouse active provider 4 + ["warehouse-active-provider-mk4"] = { + source = "angels-warehouse-active-provider", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", + tier = 4, + order = "c[warehouse-active-provider-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].active_provider, + }, + + -- Warehouse storage 2 + ["warehouse-storage-mk2"] = { + source = "angels-warehouse-storage", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", + tier = 2, + order = "d[warehouse-storage-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-storage-mk3", + inventory_size = inventory_sizes[2].storage, + }, + + -- Warehouse storage 3 + ["warehouse-storage-mk3"] = { + source = "angels-warehouse-storage", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", + tier = 3, + order = "d[warehouse-storage-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-storage-mk4", + inventory_size = inventory_sizes[3].storage, + }, + + -- Warehouse storage 4 + ["warehouse-storage-mk4"] = { + source = "angels-warehouse-storage", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", + tier = 4, + order = "d[warehouse-storage-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].storage, + }, + + -- Warehouse requester 2 + ["warehouse-requester-mk2"] = { + source = "angels-warehouse-requester", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", + tier = 2, + order = "f[warehouse-requester-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-requester-mk3", + inventory_size = inventory_sizes[2].requester, + }, + + -- Warehouse requester 3 + ["warehouse-requester-mk3"] = { + source = "angels-warehouse-requester", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", + tier = 3, + order = "f[warehouse-requester-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-requester-mk4", + inventory_size = inventory_sizes[3].requester, + }, + + -- Warehouse requester 4 + ["warehouse-requester-mk4"] = { + source = "angels-warehouse-requester", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", + tier = 4, + order = "f[warehouse-requester-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].requester, + }, + + -- Warehouse buffer 2 + ["warehouse-buffer-mk2"] = { + source = "angels-warehouse-buffer", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", + tier = 2, + order = "e[warehouse-buffer-mk2]", + subgroup = "angels-warehouses-2", + next_upgrade = "warehouse-buffer-mk3", + inventory_size = inventory_sizes[2].buffer, + }, + + -- Warehouse buffer 3 + ["warehouse-buffer-mk3"] = { + source = "angels-warehouse-buffer", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", + tier = 3, + order = "e[warehouse-buffer-mk3]", + subgroup = "angels-warehouses-3", + next_upgrade = "warehouse-buffer-mk4", + inventory_size = inventory_sizes[3].buffer, + }, + + -- Warehouse buffer 4 + ["warehouse-buffer-mk4"] = { + source = "angels-warehouse-buffer", + type = "logistic-container", + icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", + tier = 4, + order = "e[warehouse-buffer-mk4]", + subgroup = "angels-warehouses-4", + inventory_size = inventory_sizes[4].buffer, + }, +} + +for name, params in pairs(warehouse_buildings) do + -- Check for source entity + local source_entity = data.raw[params.type][params.source] + if not source_entity then goto continue end + + -- Fetch the icon with numeral overlay + local icons = extangels.numeral_tier({icon = params.icon, icon_size = params.icon_size or 32}, params.tier, params.tint or tint) + + data:extend({ + -- Create the item + { + type = "item", + name = name, + icons = icons, + subgroup = params.subgroup or nil, + order = params.order, + place_result = name, + stack_size = params.stack_size or 10, + }, + + -- Create the entity + util.merge{source_entity, { + name = name, + minable = {result = name}, + next_upgrade = params.next_upgrade or nil, + inventory_size = params.inventory_size, + subgroup = params.subgroup, + }}, + }) + + -- Set entity icon + data.raw[params.type][name].icons = icons + + -- Continue + ::continue:: +end + +-- ANGEL FIXES +local base_warehouses = { + ["angels-warehouse"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", type = "container"}, + ["angels-warehouse-passive-provider"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", type = "logistic-container"}, + ["angels-warehouse-active-provider"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", type = "logistic-container"}, + ["angels-warehouse-storage"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", type = "logistic-container"}, + ["angels-warehouse-requester"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", type = "logistic-container"}, + ["angels-warehouse-buffer"] = {icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", type = "logistic-container"}, +} + +for name, params in pairs(base_warehouses) do + local item = data.raw.item[name] + local entity = data.raw[params.type][name] + + if item then + item.icons = extangels.numeral_tier({icon = params.icon, icon_size = 32}, 1, tint) + end + + if entity then + entity.icons = extangels.numeral_tier({icon = params.icon, icon_size = 32}, 1, tint) + end +end + + + + + + + diff --git a/extendedangels/prototypes/functions.lua b/extendedangels/prototypes/functions.lua new file mode 100644 index 00000000..df70e642 --- /dev/null +++ b/extendedangels/prototypes/functions.lua @@ -0,0 +1,12 @@ +-- Setup function host +extangels = {} +extangels.triggers = {} + +-- Import migration module from flib +extangels.migration = require("__flib__.migration") + +-- Append angel numerals and return an icons definition +function extangels.numeral_tier(icon_data, tier, tint) + local icons = angelsmods.functions.add_number_icon_layer({icon_data}, tier, tint) + return icons +end \ No newline at end of file diff --git a/extendedangels/prototypes/items/petrochem.lua b/extendedangels/prototypes/items/petrochem.lua new file mode 100644 index 00000000..37dec0c9 --- /dev/null +++ b/extendedangels/prototypes/items/petrochem.lua @@ -0,0 +1,54 @@ +data:extend({ + -- Sodium flouride + { + type = "item", + name = "solid-sodium-floride", + icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", + icon_size = 32, + subgroup = "petrochem-sodium", + order = "j", + stack_size = 200 + }, + + -- Argon + { + type = "fluid", + name = "gas-argon", + icon = "__extendedangels__/graphics/icons/gas-argon.png", + icon_size = 32, + default_temperature = 100, + heat_capacity = "0KJ", + base_color = {r = 0/255, g = 0/255, b = 0/255}, + flow_color = {r = 30/255, g = 143/255, b = 216/255}, + max_temperature = 100, + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + }, +}) + + +if mods["Clowns-Processing"] then + data:extend({ + -- Disodium phosphate + { + type = "item", + name = "solid-disodium-phosphate", + icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", + icon_size = 32, + subgroup = "petrochem-sodium", + order = "k", + stack_size = 200 + }, + + -- Tetrasodium pyrophosphate + { + type = "item", + name = "solid-tetrasodium-pyrophosphate", + icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", + icon_size = 32, + subgroup = "petrochem-sodium", + order = "l", + stack_size = 200 + }, + }) +end \ No newline at end of file diff --git a/extendedangels/prototypes/items/smelting.lua b/extendedangels/prototypes/items/smelting.lua new file mode 100644 index 00000000..8a32d922 --- /dev/null +++ b/extendedangels/prototypes/items/smelting.lua @@ -0,0 +1,82 @@ +data:extend({ + -- Molten copper tungsten + { + type = "fluid", + name = "liquid-molten-copper-tungsten", + icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", + icon_size = 32, + default_temperature = 100, + heat_capacity = "0KJ", + base_color = {r = 152/255, g = 74/255, b = 58/255}, + flow_color = {r = 152/255, g = 74/255, b = 58/255}, + max_temperature = 100, + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + auto_barrel = false + }, + + -- Tungsten trioxide + { + type = "item", + name = "solid-tungsten-trioxide", + icon = "__angelssmelting__/graphics/icons/solid-tungsten-oxide.png", + icon_size = 32, + subgroup = "angels-tungsten", + order = "e", + stack_size = 200 + }, + + -- Tungsten hexachloride + { + type = "fluid", + name = "gas-tungsten-hexachloride", + icon = "__extendedangels__/graphics/icons/gas-tungsten-hexachloride.png", + icon_size = 32, + default_temperature = 100, + heat_capacity = "0KJ", + base_color = {r = 138/255, g = 20/255, b = 230/255}, + flow_color = {r = 138/255, g = 20/255, b = 230/255}, + max_temperature = 100, + pressure_to_speed_ratio = 0.4, + flow_to_energy_ratio = 0.59, + }, + + -- Sodium tungstate + { + type = "item", + name = "solid-sodium-tungstate", + icon = "__extendedangels__/graphics/icons/solid-sodium-tungstate.png", + icon_size = 32, + subgroup = "angels-tungsten", + order = "f", + stack_size = 200 + }, + + -- Tungsten carbide powder mixture + { + type = "item", + name = "powder-tungsten-carbide", + icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", + icon_size = 32, + subgroup = "angels-tungsten-carbide", + order = "a", + stack_size = 200 + }, + + -- Titanium concrete brick + { + type = "item", + name = "titanium-concrete-brick", + icon = "__extendedangels__/graphics/icons/brick-titanium.png", + icon_size = 32, + subgroup = "angels-stone", + order = "k", + stack_size = 1000, + place_as_tile = + { + result = "concrete", + condition_size = 4, + condition = { "water-tile" } + } + }, +}) diff --git a/extendedangels/prototypes/overrides/bioprocessing.lua b/extendedangels/prototypes/overrides/bioprocessing.lua new file mode 100644 index 00000000..5d3ef2fc --- /dev/null +++ b/extendedangels/prototypes/overrides/bioprocessing.lua @@ -0,0 +1,58 @@ +-- Sort bioprocessing buildings into more rows +local bioprocessing_buildings = { + -- Nauvis + ["bio-generator-temperate-1"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-temperate-2"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-temperate-3"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-swamp-1"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-swamp-2"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-swamp-3"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-desert-1"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-desert-2"] = "bio-processing-buildings-nauvis-b", + ["bio-generator-desert-3"] = "bio-processing-buildings-nauvis-b", + + -- Vegetabilis + ["desert-farm"] = "bio-processing-buildings-vegetabilis-b", + ["desert-farm-2"] = "bio-processing-buildings-vegetabilis-b", + ["desert-farm-3"] = "bio-processing-buildings-vegetabilis-b", + ["swamp-farm"] = "bio-processing-buildings-vegetabilis-b", + ["swamp-farm-2"] = "bio-processing-buildings-vegetabilis-b", + ["swamp-farm-3"] = "bio-processing-buildings-vegetabilis-b", + ["seed-extractor"] = "bio-processing-buildings-vegetabilis-c", + ["seed-extractor-2"] = "bio-processing-buildings-vegetabilis-c", + ["seed-extractor-3"] = "bio-processing-buildings-vegetabilis-c", + ["composter"] = "bio-processing-buildings-vegetabilis-c", + ["composter-2"] = "bio-processing-buildings-vegetabilis-c", + ["composter-3"] = "bio-processing-buildings-vegetabilis-c", + ["bio-press"] = "bio-processing-buildings-vegetabilis-d", + ["bio-press-2"] = "bio-processing-buildings-vegetabilis-d", + ["bio-press-3"] = "bio-processing-buildings-vegetabilis-d", + ["nutrient-extractor"] = "bio-processing-buildings-vegetabilis-d", + ["nutrient-extractor-2"] = "bio-processing-buildings-vegetabilis-d", + ["nutrient-extractor-3"] = "bio-processing-buildings-vegetabilis-d", + ["bio-processor"] = "bio-processing-buildings-vegetabilis-e", + ["bio-processor-2"] = "bio-processing-buildings-vegetabilis-e", + ["bio-processor-3"] = "bio-processing-buildings-vegetabilis-e", + + -- Animalis + ["bio-refugium-biter"] = "bio-processing-buildings-alien-b", + ["bio-refugium-biter-2"] = "bio-processing-buildings-alien-b", + ["bio-refugium-biter-3"] = "bio-processing-buildings-alien-b", + ["bio-refugium-puffer"] = "bio-processing-buildings-alien-b", + ["bio-refugium-puffer-2"] = "bio-processing-buildings-alien-b", + ["bio-refugium-puffer-3"] = "bio-processing-buildings-alien-b", +} + +if settings.startup["extangels-adjust-ordering"].value then + for name, subgroup in pairs(bioprocessing_buildings) do + local item = data.raw.item[name] + local entity = data.raw["assembling-machine"][name] + local recipe = data.raw.recipe[name] + + if item then item.subgroup = subgroup end + + -- Clear entity/recipe subgroups for proper inheritance from item + if entity then entity.subgroup = nil end + if recipe then recipe.subgroup = nil end + end +end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/overrides/next-upgrades.lua b/extendedangels/prototypes/overrides/next-upgrades.lua similarity index 100% rename from extendedangels_0.5.9/prototypes/overrides/next-upgrades.lua rename to extendedangels/prototypes/overrides/next-upgrades.lua diff --git a/extendedangels_0.5.9/prototypes/overrides/petrochem.lua b/extendedangels/prototypes/overrides/petrochem.lua similarity index 100% rename from extendedangels_0.5.9/prototypes/overrides/petrochem.lua rename to extendedangels/prototypes/overrides/petrochem.lua diff --git a/extendedangels_0.5.9/prototypes/overrides/recipes.lua b/extendedangels/prototypes/overrides/recipes.lua similarity index 100% rename from extendedangels_0.5.9/prototypes/overrides/recipes.lua rename to extendedangels/prototypes/overrides/recipes.lua diff --git a/extendedangels/prototypes/overrides/smelting.lua b/extendedangels/prototypes/overrides/smelting.lua new file mode 100644 index 00000000..eafa9e7e --- /dev/null +++ b/extendedangels/prototypes/overrides/smelting.lua @@ -0,0 +1,16 @@ +-- Add input fluid_box to Induction Furnace +for n = 1, 4 do + local name = (n > 1) and "induction-furnace-"..n or "induction-furnace" + local entity = data.raw["assembling-machine"][name] + + if not entity then goto continue end + + table.insert(entity.fluid_boxes, { + production_type = "input", + pipe_covers = pipecoverspictures(), + base_level = -1, + pipe_connections = {{ position = {-2, 3} }}, + }) + + ::continue:: +end \ No newline at end of file diff --git a/extendedangels/prototypes/overrides/technology.lua b/extendedangels/prototypes/overrides/technology.lua new file mode 100644 index 00000000..f445bb83 --- /dev/null +++ b/extendedangels/prototypes/overrides/technology.lua @@ -0,0 +1,63 @@ +local OV = angelsmods.functions.OV + +OV.add_prereq("tungsten-alloy-processing", "angels-copper-tungsten-smelting-1") +OV.disable_recipe({"copper-tungsten-alloy"}) +OV.disable_recipe({"tungsten-carbide"}) +OV.disable_recipe({"tungsten-carbide-2"}) +OV.disable_recipe({"pellet-tungsten-smelting"}) + +OV.add_unlock("angels-advanced-chemistry-4", "advanced-chemical-plant-3") +OV.add_unlock("angels-tungsten-smelting-3", "solid-tungsten-trioxide-smelting") +OV.add_unlock("angels-tungsten-smelting-3", "pellet-tungsten-smelting-2") +OV.add_unlock("angels-tungsten-smelting-3", "solid-sodium-tungstate-smelting") +OV.add_unlock("angels-tungsten-smelting-3", "casting-powder-tungsten-3") +OV.add_unlock("angels-zinc-smelting-2", "powder-zinc") +OV.add_unlock("angels-nitrogen-processing-1", "gas-argon") +OV.add_unlock("angels-nitrogen-processing-3", "angels-air-filter-3") +OV.add_unlock("angels-nitrogen-processing-4","angels-air-filter-4") + +if mods["Clowns-Extended-Minerals"] then + OV.add_unlock("water-washing-3", "washing-plant-3") +end + +if mods["Clowns-Processing"] then + OV.add_unlock("phosphorus-processing-2", "solid-disodium-phosphate") + OV.add_unlock("phosphorus-processing-2", "solid-tetrasodium-pyrophosphate") + OV.add_unlock("water-treatment-5", "hydro-plant-4") + OV.add_unlock("water-treatment-5", "salination-plant-3") +end + +if angelsmods.bioprocessing then + OV.add_unlock("bio-arboretum-2", "bio-generator-temperate-2") + OV.add_unlock("bio-arboretum-2", "bio-generator-swamp-2") + OV.add_unlock("bio-arboretum-2", "bio-generator-desert-2") + OV.add_unlock("bio-arboretum-2", "bio-arboretum-2") + OV.add_unlock("bio-arboretum-3", "bio-generator-temperate-3") + OV.add_unlock("bio-arboretum-3", "bio-generator-swamp-3") + OV.add_unlock("bio-arboretum-3", "bio-generator-desert-3") + OV.add_unlock("bio-arboretum-3", "bio-arboretum-3") + OV.add_unlock("bio-refugium-butchery-2", "bio-butchery-2") + OV.add_unlock("bio-refugium-fish-2", "bio-refugium-fish-2") + OV.add_unlock("bio-refugium-puffer-2", "bio-refugium-puffer-2") + OV.add_unlock("bio-refugium-puffer-3", "bio-refugium-puffer-3") + OV.add_unlock("bio-refugium-biter-2", "bio-refugium-biter-2") + OV.add_unlock("bio-refugium-biter-3", "bio-refugium-biter-3") + OV.add_unlock("bio-farm-2", "crop-farm-2") + OV.add_unlock("bio-farm-2", "composter-2") + OV.add_unlock("bio-farm-2", "bio-processor-2") + OV.add_unlock("bio-pressing-2", "bio-press-2") + OV.add_unlock("bio-pressing-2", "bio-press-3") + OV.add_unlock("bio-desert-farming-2", "desert-farm-2") + OV.add_unlock("bio-swamp-farming-2", "swamp-farm-2") + OV.add_unlock("bio-temperate-farming-2", "temperate-farm-2") + OV.add_unlock("gardens-2","seed-extractor-2") + OV.add_unlock("gardens-3","seed-extractor-3") +end + +if mods["angelsaddons-storage"] then + if data.raw.tool["advanced-logistic-science-pack"] then + bobmods.lib.tech.replace_science_pack("logistic-warehouses-3", "production-science-pack", "advanced-logistic-science-pack") + bobmods.lib.tech.replace_science_pack("logistic-warehouses-4", "production-science-pack", "advanced-logistic-science-pack") + bobmods.lib.tech.replace_science_pack("warehouses-4", "production-science-pack", "advanced-logistic-science-pack") + end +end diff --git a/extendedangels/prototypes/overrides/warehouses.lua b/extendedangels/prototypes/overrides/warehouses.lua new file mode 100644 index 00000000..9823dfce --- /dev/null +++ b/extendedangels/prototypes/overrides/warehouses.lua @@ -0,0 +1,43 @@ +if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end + +-- Tech overhaul recipe adjustments +if angelsmods.industries and settings.startup["angels-enable-tech"].value==true then + bobmods.lib.recipe.replace_ingredient_in_all("brass-gear-wheel","angels-roller-chain") + bobmods.lib.recipe.replace_ingredient_in_all("advanced-processing-unit","circuit-yellow-loaded") +end + +-- Group with Industries logistics tab +if angelsmods.industries then + data.raw["item-subgroup"]["angels-warehouses-2"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-warehouses-3"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-warehouses-4"].group = "angels-logistics" + data.raw["item-subgroup"]["angels-warehouses-2"].order = "ad[chests-warehouse]" + data.raw["item-subgroup"]["angels-warehouses-3"].order = "ad[chests-warehouse]" + data.raw["item-subgroup"]["angels-warehouses-4"].order = "ad[chests-warehouse]" +end + +-- Icon scaling +if angelsmods.addons.storage.icon_scaling then + if (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then + data.raw["container"]["warehouse-mk2"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-passive-provider-mk2"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-active-provider-mk2"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-storage-mk2"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-requester-mk2"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-buffer-mk2"].scale_info_icons = true + + data.raw["container"]["warehouse-mk3"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-passive-provider-mk3"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-active-provider-mk3"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-storage-mk3"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-requester-mk3"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-buffer-mk3"].scale_info_icons = true + + data.raw["container"]["warehouse-mk4"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-passive-provider-mk4"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-active-provider-mk4"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-storage-mk4"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-requester-mk4"].scale_info_icons = true + data.raw["logistic-container"]["warehouse-buffer-mk4"].scale_info_icons = true + end +end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/recipe-builder-fallbacks.lua b/extendedangels/prototypes/recipe-builder-fallbacks.lua similarity index 100% rename from extendedangels_0.5.9/prototypes/recipe-builder-fallbacks.lua rename to extendedangels/prototypes/recipe-builder-fallbacks.lua diff --git a/extendedangels_0.5.9/prototypes/recipes/angels-components.lua b/extendedangels/prototypes/recipes/angels-components.lua similarity index 83% rename from extendedangels_0.5.9/prototypes/recipes/angels-components.lua rename to extendedangels/prototypes/recipes/angels-components.lua index f7781f95..d4037d7f 100644 --- a/extendedangels_0.5.9/prototypes/recipes/angels-components.lua +++ b/extendedangels/prototypes/recipes/angels-components.lua @@ -24,13 +24,13 @@ if mods["angelsindustries"] then "gate" } - local block_ingredients = { - ["block-construction-0"] = { new = "stone", old = "stone" }, - ["block-construction-1"] = { new = "stone-brick", old = "stone" }, - ["block-construction-2"] = { new = "clay-brick", old = "stone-brick" }, - ["block-construction-3"] = { new = "concrete-brick", old = "clay-brick" }, - ["block-construction-4"] = { new = "reinforced-concrete-brick", old = "concrete-brick" }, - ["block-construction-5"] = { new = "titanium-concrete-brick", old = "reinforced-concrete-brick" } + local block_ingredients={ + ["block-construction-0"] = {new = "stone", old = "stone"}, + ["block-construction-1"] = {new = "stone-brick", old = "stone"}, + ["block-construction-2"] = {new = "clay-brick", old = "stone-brick"}, + ["block-construction-3"] = {new = "concrete-brick", old = "clay-brick"}, + ["block-construction-4"] = {new = "reinforced-concrete-brick", old = "concrete-brick"}, + ["block-construction-5"] = {new = "titanium-concrete-brick", old = "reinforced-concrete-brick"} } -- Add a 0th tier construction block @@ -52,11 +52,11 @@ if mods["angelsindustries"] then category = "crafting", energy_required = 5, ingredients = { - { type = "item", name = "construction-frame-1", amount = 1 }, - { type = "item", name = "stone", amount = 3 }, + {type="item", name = "construction-frame-1", amount = 1}, + {type="item", name = "stone", amount = 3}, }, - results = { - { type = "item", name = "block-construction-0", amount = 1 }, + results= { + {type="item", name="block-construction-0", amount=1}, }, }, }) diff --git a/extendedangels/prototypes/recipes/bioprocessing.lua b/extendedangels/prototypes/recipes/bioprocessing.lua new file mode 100644 index 00000000..69eace15 --- /dev/null +++ b/extendedangels/prototypes/recipes/bioprocessing.lua @@ -0,0 +1,1145 @@ +if not angelsmods.bioprocessing then return end + +-- Fetch marathon mode settings +local buildingmulti = angelsmods.marathon.buildingmulti +local buildingtime = angelsmods.marathon.buildingtime + +angelsmods.functions.RB.build({ + -- Algae farm 5 + { + type = "recipe", + name = "algae-farm-5", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"algae-farm-4", 1}, + {"t5-plate", 11}, + {"t5-circuit", 4}, + {"t5-brick", 11}, + {"t5-pipe", 18}, + }, + result = "algae-farm-5", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"algae-farm-4", 1}, + {"t5-plate", 11 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t5-brick", 11 * buildingmulti}, + {"t5-pipe", 18 * buildingmulti}, + }, + result = "algae-farm-5", + }, + }, + + -- Temperate tree seed generator 2 + { + type = "recipe", + name = "bio-generator-temperate-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-temperate-1", 1}, + {"temperate-tree", 1}, + {"t2-plate", 2}, + {"t2-circuit", 2}, + {"t2-brick", 1}, + {"t2-pipe", 3}, + }, + result = "bio-generator-temperate-2", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-temperate-1", 1}, + {"temperate-tree", 1 * buildingmulti}, + {"t2-plate", 2 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 1 * buildingmulti}, + {"t2-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-temperate-2", + }, + }, + + -- Swamp tree seed generator 2 + { + type = "recipe", + name = "bio-generator-swamp-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-swamp-1", 1}, + {"swamp-tree", 1}, + {"t2-plate", 2}, + {"t2-circuit", 2}, + {"t2-brick", 1}, + {"t2-pipe", 3}, + }, + result = "bio-generator-swamp-2", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-swamp-1", 2}, + {"swamp-tree", 1 * buildingmulti}, + {"t2-plate", 2 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 1 * buildingmulti}, + {"t2-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-swamp-2", + }, + }, + + -- Desert tree seed generator 2 + { + type = "recipe", + name = "bio-generator-desert-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-desert-1", 1}, + {"desert-tree", 1}, + {"t2-plate", 2}, + {"t2-circuit", 2}, + {"t2-brick", 1}, + {"t2-pipe", 3}, + }, + result = "bio-generator-desert-2", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-desert-1", 1}, + {"desert-tree", 1 * buildingmulti}, + {"t2-plate", 2 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 1 * buildingmulti}, + {"t2-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-desert-2", + }, + }, + + -- Arboretum 2 + { + type = "recipe", + name = "bio-arboretum-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-arboretum-1", 1}, + {"t2-plate", 6}, + {"t2-circuit", 2}, + {"t2-brick", 6}, + {"t2-pipe", 8}, + }, + result = "bio-arboretum-2", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-arboretum-1", 1}, + {"t2-plate", 6 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 6 * buildingmulti}, + {"t2-pipe", 8 * buildingmulti}, + }, + result = "bio-arboretum-2", + }, + }, + + -- Temperate tree seed generator 3 + { + type = "recipe", + name = "bio-generator-temperate-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-temperate-2", 1}, + {"temperate-tree", 1}, + {"t3-plate", 2}, + {"t3-circuit", 2}, + {"t3-brick", 1}, + {"t3-pipe", 3}, + }, + result = "bio-generator-temperate-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-temperate-2", 1}, + {"temperate-tree", 1 * buildingmulti}, + {"t3-plate", 2 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-temperate-3", + }, + }, + + -- Swamp tree seed generator 3 + { + type = "recipe", + name = "bio-generator-swamp-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-swamp-2", 1}, + {"swamp-tree", 1}, + {"t3-plate", 2}, + {"t3-circuit", 2}, + {"t3-brick", 1}, + {"t3-pipe", 3}, + }, + result = "bio-generator-swamp-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-swamp-2", 1}, + {"swamp-tree", 1 * buildingmulti}, + {"t3-plate", 2 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-swamp-3", + }, + }, + + -- Desert tree seed generator 3 + { + type = "recipe", + name = "bio-generator-desert-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-generator-desert-2", 1}, + {"desert-tree", 1}, + {"t3-plate", 2}, + {"t3-circuit", 2}, + {"t3-brick", 1}, + {"t3-pipe", 3}, + }, + result = "bio-generator-desert-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-generator-desert-2", 1}, + {"desert-tree", 1 * buildingmulti}, + {"t3-plate", 2 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-pipe", 3 * buildingmulti}, + }, + result = "bio-generator-desert-3", + }, + }, + + --Arboretum 3 + { + type = "recipe", + name = "bio-arboretum-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-arboretum-2", 1}, + {"t3-plate", 6}, + {"t3-circuit", 2}, + {"t3-brick", 6}, + {"t3-pipe", 8}, + }, + result = "bio-arboretum-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-arboretum-2", 1}, + {"t3-plate", 6 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 6 * buildingmulti}, + {"t3-pipe", 8 * buildingmulti}, + }, + result = "bio-arboretum-3", + }, + }, + + --Bio press 2 + { + type = "recipe", + name = "bio-press-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-press", 1}, + {"t3-plate", 2}, + {"t3-circuit", 2}, + {"t3-brick", 1}, + {"t3-pipe", 1}, + {"t3-gears", 2} + }, + result = "bio-press-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-press", 1}, + {"t3-plate", 2 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-pipe", 1 * buildingmulti}, + {"t3-gears", 2 * buildingmulti} + }, + result = "bio-press-2" + } + }, + + -- Bio press 3 + { + type = "recipe", + name = "bio-press-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-press-2", 1}, + {"t4-plate", 2}, + {"t4-circuit", 2}, + {"t4-brick", 1}, + {"t4-pipe", 1}, + {"t4-gears", 2} + }, + result = "bio-press-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-press-2", 1}, + {"t4-plate", 2 * buildingmulti}, + {"t4-circuit", 2 * buildingmulti}, + {"t4-brick", 1 * buildingmulti}, + {"t4-pipe", 1 * buildingmulti}, + {"t4-gears", 2 * buildingmulti} + }, + result = "bio-press-3" + } + }, + + -- Bio processor 2 + { + type = "recipe", + name = "bio-processor-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-processor", 1}, + {"t2-plate", 5}, + {"t2-circuit", 8}, + {"t2-brick", 5}, + {"t2-gears", 4} + }, + result = "bio-processor-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-processor", 1}, + {"t2-plate", 5 * buildingmulti}, + {"t2-circuit", 8 * buildingmulti}, + {"t2-brick", 5 * buildingmulti}, + {"t2-gears", 4 * buildingmulti} + }, + result = "bio-processor-2" + } + }, + + -- Bio processor 3 + { + type = "recipe", + name = "bio-processor-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-processor-2", 1}, + {"t3-plate", 5}, + {"t3-circuit", 8}, + {"t3-brick", 5}, + {"t3-gears", 4} + }, + result = "bio-processor-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-processor-2", 1}, + {"t3-plate", 5 * buildingmulti}, + {"t3-circuit", 8 * buildingmulti}, + {"t3-brick", 5 * buildingmulti}, + {"t3-gears", 4 * buildingmulti} + }, + result = "bio-processor-3" + } + }, + + -- Butchery 2 + { + type = "recipe", + name = "bio-butchery-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-butchery", 1}, + {"t3-plate", 3}, + {"t3-circuit", 1}, + {"t3-brick", 2}, + {"t3-gears", 2} + }, + result = "bio-butchery-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-butchery", 1}, + {"t3-plate", 3 * buildingmulti}, + {"t3-circuit", 1 * buildingmulti}, + {"t3-brick", 2 * buildingmulti}, + {"t3-gears", 2 * buildingmulti} + }, + result = "bio-butchery-2" + } + }, + + -- Butcher 3 + { + type = "recipe", + name = "bio-butchery-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-butchery-2", 1}, + {"t4-plate", 3}, + {"t4-circuit", 1}, + {"t4-brick", 2}, + {"t4-gears", 2} + }, + result = "bio-butchery-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-butchery-2", 1}, + {"t4-plate", 3 * buildingmulti}, + {"t4-circuit", 1 * buildingmulti}, + {"t4-brick", 2 * buildingmulti}, + {"t4-gears", 2 * buildingmulti} + }, + result = "bio-butchery-3" + } + }, + + -- Composter 2 + { + type = "recipe", + name = "composter-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"composter", 1}, + {"t2-plate", 2}, + {"t2-circuit", 2}, + {"t2-brick", 2}, + {"t2-gears", 2} + }, + result = "composter-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"composter", 1}, + {"t2-plate", 2 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 2 * buildingmulti}, + {"t2-gears", 2 * buildingmulti} + }, + result = "composter-2" + } + }, + + -- Composter 3 + { + type = "recipe", + name = "composter-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"composter-2", 1}, + {"t3-plate", 2}, + {"t3-circuit", 2}, + {"t3-brick", 2}, + {"t3-gears", 2} + }, + result = "composter-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"composter-2", 1}, + {"t3-plate", 2 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 2 * buildingmulti}, + {"t3-gears", 2 * buildingmulti} + }, + result = "composter-3" + } + }, + + -- Basic farm 2 + { + type = "recipe", + name = "crop-farm-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"crop-farm", 1}, + {"t2-plate", 8}, + {"t2-circuit", 2}, + {"t2-brick", 9}, + {"t2-pipe", 3} + }, + result = "crop-farm-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"crop-farm", 1}, + {"t2-plate", 8 * buildingmulti}, + {"t2-circuit", 2 * buildingmulti}, + {"t2-brick", 9 * buildingmulti}, + {"t2-pipe", 3 * buildingmulti} + }, + result = "crop-farm-2" + } + }, + + -- Basic farm 3 + { + type = "recipe", + name = "crop-farm-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"crop-farm-2", 1}, + {"t3-plate", 8}, + {"t3-circuit", 2}, + {"t3-brick", 9}, + {"t3-pipe", 3} + }, + result = "crop-farm-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"crop-farm-2", 1}, + {"t3-plate", 8 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 9 * buildingmulti}, + {"t3-pipe", 3 * buildingmulti} + }, + result = "crop-farm-3" + } + }, + + -- Temperate-environment farm 2 + { + type = "recipe", + name = "temperate-farm-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"temperate-farm", 1}, + {"temperate-upgrade", 1}, + {"t4-plate", 8}, + {"t4-circuit", 2}, + {"t4-brick", 9}, + {"t4-pipe", 3} + }, + result = "temperate-farm-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"temperate-farm", 1}, + {"temperate-upgrade", 1}, + {"t4-plate", 8 * buildingmulti}, + {"t4-circuit", 2 * buildingmulti}, + {"t4-brick", 9 * buildingmulti}, + {"t4-pipe", 3 * buildingmulti} + }, + result = "temperate-farm-2" + } + }, + + -- Temperate-environment farm 3 + { + type = "recipe", + name = "temperate-farm-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"temperate-farm-2", 1}, + {"temperate-upgrade", 1}, + {"t5-plate", 8}, + {"t5-circuit", 2}, + {"t5-brick", 9}, + {"t5-pipe", 3} + }, + result = "temperate-farm-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"temperate-farm-2", 1}, + {"temperate-upgrade", 1}, + {"t5-plate", 8 * buildingmulti}, + {"t5-circuit", 2 * buildingmulti}, + {"t5-brick", 9 * buildingmulti}, + {"t5-pipe", 3 * buildingmulti} + }, + result = "temperate-farm-3" + } + }, + + -- Desert-environment farm 2 + { + type = "recipe", + name = "desert-farm-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"desert-farm", 1}, + {"desert-upgrade", 1}, + {"t4-plate", 8}, + {"t4-circuit", 2}, + {"t4-brick", 9}, + {"t4-pipe", 3} + }, + result = "desert-farm-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"desert-farm", 1}, + {"desert-upgrade", 1}, + {"t4-plate", 8 * buildingmulti}, + {"t4-circuit", 2 * buildingmulti}, + {"t4-brick", 9 * buildingmulti}, + {"t4-pipe", 3 * buildingmulti} + }, + result = "desert-farm-2" + } + }, + + -- Desert-environment farm 3 + { + type = "recipe", + name = "desert-farm-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"desert-farm-2", 1}, + {"desert-upgrade", 1}, + {"t5-plate", 8}, + {"t5-circuit", 2}, + {"t5-brick", 9}, + {"t5-pipe", 3} + }, + result = "desert-farm-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"desert-farm-2", 1}, + {"desert-upgrade", 1}, + {"t5-plate", 8 * buildingmulti}, + {"t5-circuit", 2 * buildingmulti}, + {"t5-brick", 9 * buildingmulti}, + {"t5-pipe", 3 * buildingmulti} + }, + result = "desert-farm-3" + } + }, + + -- Swamp-environment farm 2 + { + type = "recipe", + name = "swamp-farm-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"swamp-farm", 1}, + {"swamp-upgrade", 1}, + {"t4-plate", 8}, + {"t4-circuit", 2}, + {"t4-brick", 9}, + {"t4-pipe", 3} + }, + result = "swamp-farm-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"swamp-farm", 1}, + {"swamp-upgrade", 1}, + {"t4-plate", 8 * buildingmulti}, + {"t4-circuit", 2 * buildingmulti}, + {"t4-brick", 9 * buildingmulti}, + {"t4-pipe", 3 * buildingmulti} + }, + result = "swamp-farm-2" + } + }, + + -- Swamp-environment farm 3 + { + type = "recipe", + name = "swamp-farm-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"swamp-farm-2", 1}, + {"swamp-upgrade", 1}, + {"t5-plate", 8}, + {"t5-circuit", 2}, + {"t5-brick", 9}, + {"t5-pipe", 3} + }, + result = "swamp-farm-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"swamp-farm-2", 1}, + {"swamp-upgrade", 1}, + {"t5-plate", 8 * buildingmulti}, + {"t5-circuit", 2 * buildingmulti}, + {"t5-brick", 9 * buildingmulti}, + {"t5-pipe", 3 * buildingmulti} + }, + result = "swamp-farm-3" + } + }, + + -- Hatchery 2 + { + type = "recipe", + name = "bio-hatchery-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-hatchery", 1}, + {"t4-plate", 2}, + {"t4-circuit", 4}, + {"t4-brick", 2} + }, + result = "bio-hatchery-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-hatchery", 1}, + {"t4-plate", 2 * buildingmulti}, + {"t4-circuit", 4 * buildingmulti}, + {"t4-brick", 2 * buildingmulti} + }, + result = "bio-hatchery-2" + } + }, + + -- Hatchery 3 + { + type = "recipe", + name = "bio-hatchery-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-hatchery-2", 1}, + {"t5-plate", 2}, + {"t5-circuit", 4}, + {"t5-brick", 2} + }, + result = "bio-hatchery-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-hatchery-2", 1}, + {"t5-plate", 2 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t5-brick", 2 * buildingmulti} + }, + result = "bio-hatchery-3" + } + }, + + -- Nutrient extractor 2 + { + type = "recipe", + name = "nutrient-extractor-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"nutrient-extractor", 1}, + {"t3-plate", 1}, + {"t3-circuit", 2}, + {"t3-brick", 1}, + {"t3-pipe", 2}, + {"t3-gears", 2} + }, + result = "nutrient-extractor-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"nutrient-extractor", 1}, + {"t3-plate", 1 * buildingmulti}, + {"t3-circuit", 2 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-pipe", 2 * buildingmulti}, + {"t3-gears", 2 * buildingmulti} + }, + result = "nutrient-extractor-2" + } + }, + + -- Nutrient extractor 3 + { + type = "recipe", + name = "nutrient-extractor-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"nutrient-extractor-2", 1}, + {"t4-plate", 1}, + {"t4-circuit", 2}, + {"t4-brick", 1}, + {"t4-pipe", 2}, + {"t4-gears", 2} + }, + result = "nutrient-extractor-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"nutrient-extractor-2", 1}, + {"t4-plate", 1 * buildingmulti}, + {"t4-circuit", 2 * buildingmulti}, + {"t4-brick", 1 * buildingmulti}, + {"t4-pipe", 2 * buildingmulti}, + {"t4-gears", 2 * buildingmulti} + }, + result = "nutrient-extractor-3" + } + }, + + -- Fish tank 2 + { + type = "recipe", + name = "bio-refugium-fish-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-fish", 1}, + {"t3-plate", 2}, + {"t3-circuit", 5}, + {"t3-brick", 4}, + {"t3-pipe", 25} + }, + result = "bio-refugium-fish-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-fish", 1}, + {"t3-plate", 10 * buildingmulti}, + {"t3-circuit", 5 * buildingmulti}, + {"t3-brick", 4 * buildingmulti}, + {"t3-pipe", 25 * buildingmulti} + }, + result = "bio-refugium-fish-2" + } + }, + + -- Fish tank 3 + { + type = "recipe", + name = "bio-refugium-fish-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-fish-2", 1}, + {"t4-plate", 2}, + {"t4-circuit", 5}, + {"t4-brick", 4}, + {"t4-pipe", 25} + }, + result = "bio-refugium-fish-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-fish", 1}, + {"t4-plate", 10 * buildingmulti}, + {"t4-circuit", 5 * buildingmulti}, + {"t4-brick", 4 * buildingmulti}, + {"t4-pipe", 25 * buildingmulti} + }, + result = "bio-refugium-fish-3" + } + }, + + -- Puffer refugium 2 + { + type = "recipe", + name = "bio-refugium-puffer-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-puffer", 1}, + {"t4-plate", 4}, + {"t4-circuit", 4}, + {"t4-brick", 3}, + {"t4-pipe", 11} + }, + result = "bio-refugium-puffer-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-puffer", 1}, + {"t4-plate", 4 * buildingmulti}, + {"t4-circuit", 4 * buildingmulti}, + {"t4-brick", 3 * buildingmulti}, + {"t4-pipe", 11 * buildingmulti} + }, + result = "bio-refugium-puffer-2" + } + }, + + -- Puffer refugium 3 + { + type = "recipe", + name = "bio-refugium-puffer-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-puffer-2", 1}, + {"t5-plate", 4}, + {"t5-circuit", 4}, + {"t5-brick", 3}, + {"t5-pipe", 11} + }, + result = "bio-refugium-puffer-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-puffer-2", 1}, + {"t5-plate", 4 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t5-brick", 3 * buildingmulti}, + {"t5-pipe", 11 * buildingmulti} + }, + result = "bio-refugium-puffer-3" + } + }, + + -- Biter refugium 2 + { + type = "recipe", + name = "bio-refugium-biter-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-biter", 1}, + {"t5-plate", 10}, + {"t5-circuit", 4}, + {"t5-brick", 19}, + {"t5-pipe", 11} + }, + result = "bio-refugium-biter-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-biter", 1}, + {"t5-plate", 10 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t5-brick", 19 * buildingmulti}, + {"t5-pipe", 11 * buildingmulti} + }, + result = "bio-refugium-biter-2" + } + }, + + -- Biter refugium 3 + { + type = "recipe", + name = "bio-refugium-biter-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"bio-refugium-biter-2", 1}, + {"t6-plate", 10}, + {"t5-circuit", 4}, + {"t6-brick", 19}, + {"t6-pipe", 11} + }, + result = "bio-refugium-biter-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"bio-refugium-biter-2", 1}, + {"t6-plate", 10 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t6-brick", 19 * buildingmulti}, + {"t6-pipe", 11 * buildingmulti} + }, + result = "bio-refugium-biter-3" + } + }, + + -- Seed extractor 2 + { + type = "recipe", + name = "seed-extractor-2", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"seed-extractor", 1}, + {"t2-plate", 1}, + {"t2-circuit", 4}, + {"t2-brick", 1}, + {"t2-gears", 2} + }, + result = "seed-extractor-2" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"seed-extractor", 1}, + {"t2-plate", 1 * buildingmulti}, + {"t2-circuit", 4 * buildingmulti}, + {"t2-brick", 1 * buildingmulti}, + {"t2-gears", 2 * buildingmulti} + }, + result = "seed-extractor-2" + } + }, + + -- Seed extractor 3 + { + type = "recipe", + name = "seed-extractor-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"seed-extractor-2", 1}, + {"t3-plate", 1}, + {"t3-circuit", 4}, + {"t3-brick", 1}, + {"t3-gears", 2} + }, + result = "seed-extractor-3" + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"seed-extractor-2", 1}, + {"t3-plate", 1 * buildingmulti}, + {"t3-circuit", 4 * buildingmulti}, + {"t3-brick", 1 * buildingmulti}, + {"t3-gears", 2 * buildingmulti} + }, + result = "seed-extractor-3" + } + }, +}) \ No newline at end of file diff --git a/extendedangels/prototypes/recipes/petrochem.lua b/extendedangels/prototypes/recipes/petrochem.lua new file mode 100644 index 00000000..ad0c27e8 --- /dev/null +++ b/extendedangels/prototypes/recipes/petrochem.lua @@ -0,0 +1,227 @@ +-- Fetch marathon mode settings +local buildingmulti = angelsmods.marathon.buildingmulti +local buildingtime = angelsmods.marathon.buildingtime + +angelsmods.functions.RB.build({ + -- Advanced gas refinery 4 + { + type = "recipe", + name = "gas-refinery-4", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"gas-refinery-3", 1}, + {"t6-plate", 10}, + {"t5-circuit", 5}, + {"t6-brick", 10}, + {"t6-pipe", 19}, + }, + result= "gas-refinery-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"gas-refinery-3", 1}, + {"t6-plate", 10 * buildingmulti}, + {"t5-circuit", 5 * buildingmulti}, + {"t6-brick", 10 * buildingmulti}, + {"t6-pipe", 19 * buildingmulti}, + }, + result= "gas-refinery-4", + }, + }, + + -- Advanced chemical plant 3 + { + type = "recipe", + name = "advanced-chemical-plant-3", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"advanced-chemical-plant-2", 1}, + {"t5-plate", 2}, + {"t5-circuit", 4}, + {"t6-brick", 4}, + {"t5-pipe", 12}, + }, + result= "advanced-chemical-plant-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"advanced-chemical-plant-2", 1}, + {"t5-plate", 2 * buildingmulti}, + {"t5-circuit", 4 * buildingmulti}, + {"t6-brick", 4 * buildingmulti}, + {"t5-pipe", 12 * buildingmulti}, + }, + result= "advanced-chemical-plant-3", + }, + }, + + -- -- Air filter 3 + -- { + -- type = "recipe", + -- name = "angels-air-filter-3", + -- normal = { + -- energy_required = 5, + -- enabled = false, + -- ingredients = { + -- {"angels-air-filter-2", 1}, + -- {"t3-plate", 4}, + -- {"t3-circuit", 5}, + -- {"t3-brick", 5}, + -- {"t3-pipe", 8}, + -- }, + -- result= "angels-air-filter-3", + -- }, + -- expensive = { + -- energy_required = 5 * buildingtime, + -- enabled = false, + -- ingredients = { + -- {"angels-air-filter-2", 1}, + -- {"t3-plate", 4 * buildingmulti}, + -- {"t3-circuit", 5 * buildingmulti}, + -- {"t3-brick", 5 * buildingmulti}, + -- {"t3-pipe", 8 * buildingmulti}, + -- }, + -- result= "angels-air-filter-3", + -- }, + -- }, + + -- Air filter 4 + { + type = "recipe", + name = "angels-air-filter-4", + normal = { + energy_required = 5, + enabled = false, + ingredients = { + {"angels-air-filter-3", 1}, + {"t4-plate", 4}, + {"t4-circuit", 5}, + {"t4-brick", 5}, + {"t4-pipe", 8}, + }, + result= "angels-air-filter-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = false, + ingredients = { + {"angels-air-filter-3", 1}, + {"t4-plate", 4 * buildingmulti}, + {"t4-circuit", 5 * buildingmulti}, + {"t4-brick", 5 * buildingmulti}, + {"t4-pipe", 8 * buildingmulti}, + }, + result= "angels-air-filter-4", + }, + }, +}) + +data:extend({ + -- Sodium flouride 1 + { + type = "recipe", + name = "solid-sodium-floride-1", + category = "chemistry", + subgroup = "petrochem-sodium", + energy_required = 2, + enabled = "false", + ingredients = { + {type = "item", name = "solid-sodium-hydroxide", amount = 5}, + {type = "fluid", name = "liquid-hydrofluoric-acid", amount = 50}, + }, + results = { + {type = "item", name = "solid-sodium-floride", amount = 5}, + {type = "fluid", name = "water-purified", amount = 50}, + }, + icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", + icon_size = 32, + order = "k", + }, + + -- Sodium flouride 2 + { + type = "recipe", + name = "solid-sodium-floride-2", + category = "chemistry", + subgroup = "petrochem-sodium", + energy_required = 2, + enabled = "false", + ingredients = { + {type = "item", name = "solid-sodium-carbonate", amount = 5}, + {type = "fluid", name = "liquid-hexafluorosilicic-acid", amount = 25}, + }, + results = { + {type = "item", name = "solid-sodium-floride", amount = 5}, + {type = "fluid", name = "water-purified", amount = 25}, + }, + icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", + icon_size = 32, + order = "l", + }, + + -- Argon + { + type = "recipe", + name = "gas-argon", + category = "chemistry", + subgroup = "petrochem-argon", + energy_required = 2, + enabled = "false", + ingredients = { + {type = "fluid", name = "gas-compressed-air", amount=100} + }, + results = { + {type = "fluid", name = "gas-argon", amount = 50}, + }, + icon = "__extendedangels__/graphics/icons/gas-argon.png", + icon_size = 32, + order = "a", + }, +}) + + +if mods["Clowns-Processing"] then + data:extend({ + -- Disodium phosphate + { + type = "recipe", + name = "solid-disodium-phosphate", + category = "chemistry", + subgroup = "petrochem-sodium", + energy_required = 2, + enabled = "false", + ingredients = { + {type = "item", name = "solid-sodium-carbonate", amount = 5}, + {type = "fluid", name = "liquid-phosphoric-acid", amount = 50}, + }, + results = { + {type = "item", name = "solid-disodium-phosphate", amount = 5}, + }, + icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", + icon_size = 32, + order = "m", + }, + + -- Tetrasodium pyrophosphate + { + type = "recipe", + name = "solid-tetrasodium-pyrophosphate", + category = "smelting", + subgroup = "petrochem-sodium", + energy_required = 3.5, + ingredients = { + {"solid-disodium-phosphate", 1} + }, + result = "solid-tetrasodium-pyrophosphate", + order = "n", + }, + }) +end diff --git a/extendedangels/prototypes/recipes/refining.lua b/extendedangels/prototypes/recipes/refining.lua new file mode 100644 index 00000000..09763dcb --- /dev/null +++ b/extendedangels/prototypes/recipes/refining.lua @@ -0,0 +1,308 @@ +-- Fetch marathon mode settings +local buildingmulti = angelsmods.marathon.buildingmulti +local buildingtime = angelsmods.marathon.buildingtime + +angelsmods.functions.RB.build({ + -- Hydro plant 4 + { + type = "recipe", + name = "hydro-plant-4", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"hydro-plant-3", 1}, + {"t5-plate", 4}, + {"t5-circuit", 12}, + {"t5-pipe", 16}, + {"t6-brick", 12}, + }, + result = "hydro-plant-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"hydro-plant-3", 1}, + {"t5-plate", 4 * buildingmulti}, + {"t5-circuit", 12 * buildingmulti}, + {"t5-pipe", 16 * buildingmulti}, + {"t6-brick", 12 * buildingmulti}, + }, + result = "hydro-plant-4", + }, + }, + + -- Salination plant 3 + { + type = "recipe", + name = "salination-plant-3", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"salination-plant-2", 1}, + {"t5-plate", 14}, + {"t5-circuit", 12}, + {"t5-pipe", 8}, + {"t6-brick", 15}, + }, + result = "salination-plant-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"salination-plant-2", 1}, + {"t5-plate", 14 * buildingmulti}, + {"t5-circuit", 12 * buildingmulti}, + {"t5-pipe", 8 * buildingmulti}, + {"t6-brick", 15 * buildingmulti}, + }, + result = "salination-plant-3", + }, + }, + + -- Washing plant 3 + { + type = "recipe", + name = "washing-plant-3", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"washing-plant-2", 1}, + {"t3-plate", 4}, + {"t3-circuit", 4}, + {"t3-pipe", 9}, + {"t3-brick", 5}, + }, + result = "washing-plant-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"washing-plant-2", 1}, + {"t3-plate", 4 * buildingmulti}, + {"t3-circuit", 4 * buildingmulti}, + {"t3-pipe", 9 * buildingmulti}, + {"t3-brick", 5 * buildingmulti}, + }, + result = "washing-plant-3", + }, + }, + + -- Washing plant 4 + { + type = "recipe", + name = "washing-plant-4", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"washing-plant-3", 1}, + {"t4-plate", 4}, + {"t4-circuit", 4}, + {"t4-pipe", 9}, + {"t4-brick", 5}, + }, + result = "washing-plant-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"washing-plant-2", 1}, + {"t4-plate", 4 * buildingmulti}, + {"t4-circuit", 4 * buildingmulti}, + {"t4-pipe", 9 * buildingmulti}, + {"t4-brick", 5 * buildingmulti}, + }, + result = "washing-plant-4", + }, + }, + +-- Ore crusher 4 + { + type = "recipe", + name = "ore-crusher-4", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"ore-crusher-3", 1}, + {"t4-plate", 3}, + {"t4-brick", 3}, + {"t4-gears", 2}, + }, + result = "ore-crusher-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"ore-crusher-3", 1}, + {"t4-plate", 3 * buildingmulti}, + {"t4-brick", 3 * buildingmulti}, + {"t4-gears", 2 * buildingmulti}, + }, + result = "ore-crusher-4", + }, + subgroup = "ore-crusher", + }, + + -- Ore floatation cell 4 + { + type = "recipe", + name = "ore-floatation-cell-4", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"ore-floatation-cell-3", 1}, + {"t5-plate", 4}, + {"t5-circuit", 8}, + {"t5-pipe", 4}, + {"t6-brick", 8}, + }, + result = "ore-floatation-cell-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"ore-floatation-cell-3", 1}, + {"t5-plate", 4 * buildingmulti}, + {"t5-circuit", 8 * buildingmulti}, + {"t5-pipe", 4 * buildingmulti}, + {"t6-brick", 8 * buildingmulti}, + }, + result = "ore-floatation-cell-4", + }, + subgroup = "ore-floatation", + }, + + -- Ore leaching plant 4 + { + type = "recipe", + name = "ore-leaching-plant-4", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"ore-leaching-plant-3", 1}, + {"t6-plate", 4}, + {"t5-circuit", 8}, + {"t6-pipe", 4}, + {"t6-brick", 8}, + }, + result = "ore-leaching-plant-4", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"ore-leaching-plant-3", 1}, + {"t6-plate", 4 * buildingmulti}, + {"t5-circuit", 8 * buildingmulti}, + {"t6-pipe", 4 * buildingmulti}, + {"t6-brick", 8 * buildingmulti}, + }, + result = "ore-leaching-plant-4", + }, + subgroup = "ore-leaching", + }, + + + -- Ore refinery 3 + { + type = "recipe", + name = "ore-refinery-3", + normal = { + energy_required = 5, + enabled = "false", + ingredients = { + {"ore-refinery-2", 1}, + {"t6-plate", 12}, + {"t5-circuit", 12}, + {"t6-brick", 20}, + }, + result = "ore-refinery-3", + }, + expensive = { + energy_required = 5 * buildingtime, + enabled = "false", + ingredients = { + {"ore-refinery-2", 1}, + {"t6-plate", 12 * buildingmulti}, + {"t5-circuit", 12 * buildingmulti}, + {"t6-brick", 20 * buildingmulti}, + }, + result = "ore-refinery-3", + }, + subgroup = "ore-refining", + }, + + -- -- Crystallizer 3 + -- { + -- type = "recipe", + -- name = "crystallizer-3", + -- normal = { + -- energy_required = 5, + -- enabled = "false", + -- ingredients = { + -- {"crystallizer-2", 1}, + -- {"t5-plate", 10}, + -- {"t5-circuit", 5}, + -- {"t5-pipe", 5}, + -- {"t6-brick", 10}, + -- }, + -- result = "crystallizer-3", + -- }, + -- expensive = { + -- energy_required = 5 * buildingtime, + -- enabled = "false", + -- ingredients = { + -- {"crystallizer-2", 1}, + -- {"t5-plate", 10 * buildingmulti}, + -- {"t5-circuit", 5 * buildingmulti}, + -- {"t5-pipe", 5 * buildingmulti}, + -- {"t6-brick", 10 * buildingmulti}, + -- }, + -- result = "crystallizer-3", + -- }, + -- }, + + -- -- Filtration unit 3 + -- { + -- type = "recipe", + -- name = "filtration-unit-3", + -- normal = { + -- energy_required = 5, + -- enabled = "false", + -- ingredients = { + -- {"filtration-unit-2", 1}, + -- {"t5-plate", 2}, + -- {"t5-circuit", 5}, + -- {"t5-pipe", 8}, + -- {"t6-brick", 5}, + -- }, + -- result = "filtration-unit-3", + -- }, + -- expensive = { + -- energy_required = 5 * buildingtime, + -- enabled = "false", + -- ingredients = { + -- {"filtration-unit-2", 1}, + -- {"t5-plate", 2 * buildingmulti}, + -- {"t5-circuit", 5 * buildingmulti}, + -- {"t5-pipe", 8 * buildingmulti}, + -- {"t6-brick", 5 * buildingmulti}, + -- }, + -- result = "filtration-unit-3", + -- }, + -- }, +}) + +-- Order fixes diff --git a/extendedangels/prototypes/recipes/smelting.lua b/extendedangels/prototypes/recipes/smelting.lua new file mode 100644 index 00000000..f96cc979 --- /dev/null +++ b/extendedangels/prototypes/recipes/smelting.lua @@ -0,0 +1,286 @@ +-- Fetch marathon mode settings +local intermediatemulti = angelsmods.marathon.intermediatemulti + +data:extend({ + -- Tungsten trioxide + { + type = "recipe", + name = "solid-tungsten-trioxide-smelting", + category = "chemical-smelting", + subgroup = "angels-tungsten", + energy_required = 4, + enabled = "false", + ingredients = { + {type = "item", name = "pellet-tungsten", amount = 4}, + {type = "fluid", name = "gas-oxygen", amount = 60}, + }, + results = { + {type = "item", name = "solid-tungsten-trioxide", amount = 12}, + }, + order = "i", + }, + + -- Sodium tungstate + { + type = "recipe", + name = "pellet-tungsten-smelting-2", + category = "chemical-smelting", + subgroup = "angels-tungsten", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "item", name = "solid-salt", amount = 50}, + {type = "item", name = "solid-tungsten-trioxide", amount = 12}, + {type = "item", name = "solid-sodium-floride", amount = 6}, + }, + results = { + {type = "item", name = "solid-sodium-tungstate", amount = 12}, + }, + order = "j", + }, + + -- Tunsgten powder + { + type = "recipe", + name = "solid-sodium-tungstate-smelting", + category = "blast-smelting", + subgroup = "angels-tungsten", + energy_required = 4, + enabled = "false", + ingredients = { + {type = "item", name = "solid-sodium-tungstate", amount = 16}, + {type = "item", name = "pellet-manganese", amount = 4}, + }, + results = { + {type = "item", name = "powder-tungsten", amount = 30}, + }, + icons = extangels.numeral_tier({icon = data.raw.item["powder-tungsten"].icon, icon_size = data.raw.item["powder-tungsten"].icon_size, icon_mipmaps = data.raw.item["powder-tungsten"].icon_mipmaps}, 3, angelsmods.smelting.number_tint), + order = "h[powder-tungsten]-c" + }, + + -- Zinc powder + { + type = "recipe", + name = "powder-zinc", + category = "advanced-crafting", + subgroup = "angels-zinc-casting", + energy_required = 0.5, + enabled = "false", + ingredients = { + {type = "item", name = "ingot-zinc", amount = 1} + }, + results = { + {type = "item", name = "powder-zinc", amount = 1}, + }, + order = "b", + }, + + -- Tungsten powder mixture + { + type = "recipe", + name = "casting-powder-tungsten-3", + category = "powder-mixing", + subgroup = "angels-tungsten-casting", + energy_required = 4, + enabled = "false", + ingredients = { + {type = "item", name = "powder-tungsten", amount = 12}, + {type = "item", name = "powder-zinc", amount = 12}, + }, + results = { + {type = "item", name = "casting-powder-tungsten", amount = 24}, + }, + icons = extangels.numeral_tier({icon = data.raw.item["casting-powder-tungsten"].icon, icon_size = data.raw.item["casting-powder-tungsten"].icon_size, icon_mipmaps = data.raw.item["casting-powder-tungsten"].icon_mipmaps}, 3, angelsmods.smelting.number_tint), + order = "i[casting-powder-tungsten]-c", + }, + + -- Molten copper tungsten 1 + { + type = "recipe", + name = "copper-tungsten-smelting-1", + category = "induction-smelting", + subgroup = "angels-alloys-casting", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "item", name = "ingot-copper", amount = 16}, + {type = "item", name = "powder-tungsten", amount = 12}, + {type = "fluid", name = "gas-hydrogen", amount = 60}, + }, + results = { + {type = "fluid", name = "liquid-molten-copper-tungsten", amount = 120}, + }, + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", icon_size = 32}, 1, angelsmods.smelting.number_tint), + order = "g[copper-tungsten]-a[liquid-molten-copper-tungsten]", + }, + + -- Molten copper tungsten 2 + { + type = "recipe", + name = "copper-tungsten-smelting-2", + category = "induction-smelting-2", + subgroup = "angels-alloys-casting", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "item", name = "ingot-copper", amount = 8}, + {type = "item", name = "ingot-silver", amount = 8}, + {type = "item", name = "powder-tungsten", amount = 12}, + {type = "fluid", name = "gas-hydrogen", amount = 60}, + }, + results = { + {type = "fluid", name = "liquid-molten-copper-tungsten", amount = 120}, + }, + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", icon_size = 32}, 2, angelsmods.smelting.number_tint), + order = "g[copper-tungsten]-a[liquid-molten-copper-tungsten]", + }, + + -- Copper tungsten + { + type = "recipe", + name = "molten-copper-tungsten-smelting-1", + category = "casting", + subgroup = "angels-alloys-casting", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "fluid", name = "liquid-molten-copper-tungsten", amount = 40}, + }, + results = { + {type = "item", name = "copper-tungsten-alloy", amount = 4}, + }, + order = "g[copper-tungsten]-b[copper-tungsten-alloy]", + }, + + -- Tungsten hexachloride + { + type = "recipe", + name = "solid-tungsten-oxide-smelting-2", + category = "liquifying", + subgroup = "angels-tungsten-carbide", + energy_required = 6, + enabled = "false", + ingredients = { + {type = "item", name = "solid-tungsten-trioxide", amount = 12}, + {type = "fluid", name = "gas-hydrogen-chloride", amount = 30}, + }, + results = { + {type = "fluid", name = "gas-tungsten-hexachloride", amount = 60}, + }, + }, + + -- Tungsten carbide powder mixture 1 + { + type = "recipe", + name = "tungsten-carbide-smelting-1", + category = "chemical-smelting", + subgroup = "angels-tungsten-carbide", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "item", name = "solid-tungsten-oxide", amount = 12}, + {type = "fluid", name = "gas-hydrogen", amount = 60}, + {type = "fluid", name = "gas-argon", amount = 30}, + }, + results = { + {type = "item", name = "powder-tungsten-carbide", amount = 12}, + }, + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32}, 1, angelsmods.smelting.number_tint), + order = "aa", + }, + + -- Tungsten carbide powder mixture 2 + { + type = "recipe", + name = "tungsten-carbide-smelting-2", + category = "chemical-smelting", + subgroup = "angels-tungsten-carbide", + energy_required = 16, + enabled = "false", + ingredients = { + {type = "fluid", name = "gas-tungsten-hexafluoride", amount = 80}, + {type = "fluid", name = "gas-hydrogen", amount = 60}, + {type = "item", name = "solid-carbon", amount = 5}, + }, + results = { + {type = "item", name = "powder-tungsten-carbide", amount = 24}, + {type = "fluid", name = "liquid-hydrofluoric-acid", amount = 60}, + {type = "fluid", name = "water-purified", amount = 20}, + }, + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32}, 2, angelsmods.smelting.number_tint), + order = "ab", + }, + + -- Tungsten carbide powder mixture 3 + { + type = "recipe", + name = "tungsten-carbide-smelting-3", + category = "chemical-smelting", + subgroup = "angels-tungsten-carbide", + energy_required = 8, + enabled = "false", + ingredients = { + {type = "fluid", name = "gas-tungsten-hexachloride", amount = 60}, + {type = "fluid", name = "gas-hydrogen", amount = 50}, + {type = "item", name = "solid-carbon", amount = 5}, + }, + results = { + {type = "item", name = "powder-tungsten-carbide", amount = 12}, + {type = "fluid", name = "gas-hydrogen-chloride", amount = 40}, + }, + icons = extangels.numeral_tier({icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32}, 3, angelsmods.smelting.number_tint), + order = "ac", + }, + + -- Tungsten carbide + { + type = "recipe", + name = "angels-plate-tungsten-carbide", + category = "sintering", + subgroup = "angels-tungsten-carbide-casting", + normal = { + enabled = "false", + energy_required = 4, + ingredients = { + {type = "item", name = "powder-tungsten-carbide", amount = 12}, + }, + results = { + {type = "item", name = "tungsten-carbide", amount = 12}, + }, + }, + expensive = { + enabled = "false", + energy_required = 4, + ingredients = { + {type = "item", name = "powder-tungsten-carbide", amount = 15*intermediatemulti}, + }, + results={ + {type = "item", name = "tungsten-carbide", amount = 12}, + }, + }, + order = "ad", + }, + + -- Titanium concrete brick + { + type = "recipe", + name = "angels-titanium-concrete-brick", + category = "crafting-with-fluid", + subgroup = "angels-stone-casting", + energy_required = 4, + enabled = "false", + ingredients = { + {type = "item", name = "stone-brick", amount = 4}, + {type = "item", name = "angels-plate-titanium", amount = 4}, + {type = "fluid", name = "liquid-concrete", amount = 40}, + }, + results = { + {type = "item", name = "titanium-concrete-brick", amount = 4}, + }, + order = "k[titanium-concrete-brick]", + }, +}) + +if mods["Clowns-Processing"] then + bobmods.lib.recipe.add_ingredient("pellet-tungsten-smelting-2", {"solid-tetrasodium-pyrophosphate", 1}) +end \ No newline at end of file diff --git a/extendedangels/prototypes/recipes/warehouses.lua b/extendedangels/prototypes/recipes/warehouses.lua new file mode 100644 index 00000000..86c53cae --- /dev/null +++ b/extendedangels/prototypes/recipes/warehouses.lua @@ -0,0 +1,122 @@ +if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end + +local logistic_warehouses = { + "warehouse-passive-provider", + "warehouse-active-provider", + "warehouse-buffer", + "warehouse-storage", + "warehouse-requester", +} + +local prerequisite_map = { + ["angels-warehouse-passive-provider"] = "angels-warehouse", + ["angels-warehouse-active-provider"] = "angels-warehouse", + ["angels-warehouse-buffer"] = "angels-warehouse", + ["angels-warehouse-storage"] = "angels-warehouse", + ["angels-warehouse-requester"] = "angels-warehouse", + + ["warehouse-mk2"] = "angels-warehouse", + ["warehouse-passive-provider-mk2"] = "angels-warehouse-passive-provider", + ["warehouse-active-provider-mk2"] = "angels-warehouse-active-provider", + ["warehouse-buffer-mk2"] = "angels-warehouse-buffer", + ["warehouse-storage-mk2"] = "angels-warehouse-storage", + ["warehouse-requester-mk2"] = "angels-warehouse-requester", + + ["warehouse-mk3"] = "warehouse-mk2", + ["warehouse-passive-provider-mk3"] = "warehouse-passive-provider-mk2", + ["warehouse-active-provider-mk3"] = "warehouse-active-provider-mk2", + ["warehouse-buffer-mk3"] = "warehouse-buffer-mk2", + ["warehouse-storage-mk3"] = "warehouse-storage-mk2", + ["warehouse-requester-mk3"] = "warehouse-requester-mk2", + + ["warehouse-mk4"] = "warehouse-mk3", + ["warehouse-passive-provider-mk4"] = "warehouse-passive-provider-mk3", + ["warehouse-active-provider-mk4"] = "warehouse-active-provider-mk3", + ["warehouse-buffer-mk4"] = "warehouse-buffer-mk3", + ["warehouse-storage-mk4"] = "warehouse-storage-mk3", + ["warehouse-requester-mk4"] = "warehouse-requester-mk3", +} + +local standard_ingredients = { + [1] = { + {type = "item", name = "iron-plate", amount = 500}, + {type = "item", name = "stone-brick", amount = 100}, + }, + [2] = { + {type = "item", name = "invar-alloy", amount = 400}, + {type = "item", name = "brass-gear-wheel", amount = 150}, + {type = "item", name = "steel-bearing", amount = 100}, + }, + [3] = { + {type = "item", name = "titanium-plate", amount = 800}, + {type = "item", name = "ceramic-bearing", amount = 200}, + }, + [4] = { + {type = "item", name = "tungsten-plate", amount = 1000}, + {type = "item", name = "nitinol-bearing", amount = 250}, + } +} + +local logistic_ingredients = { + [1] = { + {type = "item", name = "steel-plate", amount = 250}, + {type = "item", name = "electronic-circuit", amount = 100}, + {type = "item", name = "advanced-circuit", amount = 40}, + }, + [2] = { + {type = "item", name = "invar-alloy", amount = 400}, + {type = "item", name = "brass-gear-wheel", amount = 150}, + {type = "item", name = "steel-bearing", amount = 100}, + }, + [3] = { + {type = "item", name = "titanium-plate", amount = 800}, + {type = "item", name = "ceramic-bearing", amount = 200}, + {type = "item", name = "processing-unit", amount = 200}, + }, + [4] = { + {type = "item", name = "tungsten-plate", amount = 1000}, + {type = "item", name = "nitinol-bearing", amount = 250}, + {type = "item", name = "advanced-processing-unit", amount = 200}, + } +} + +-- Revise Angel's warehouses +data.raw.recipe["angels-warehouse"].energy_required = 20 +data.raw.recipe["angels-warehouse"].ingredients = util.copy(standard_ingredients[1]) + +for _, warehouse in pairs(logistic_warehouses)do + data.raw.recipe["angels-"..warehouse].energy_required = 20 + data.raw.recipe["angels-"..warehouse].ingredients = util.copy(logistic_ingredients[1]) +end + +-- Iterate through warehouse types and make all the requisite recipes +for n = 2, 4 do + -- Setup standard warehouse subtype + data:extend({ + util.merge{data.raw.recipe["angels-warehouse"], { + name = "warehouse-mk"..n, + result = "warehouse-mk"..n, + subgroup = "angels-warehouses-"..n, + }} + }) + + data.raw.recipe["warehouse-mk"..n].ingredients = util.copy(standard_ingredients[n]) + + -- Setup logistics warehouse subtypes + for _, prefix in pairs(logistic_warehouses) do + data:extend({ + util.merge{data.raw.recipe["angels-"..prefix], { + name = prefix.."-mk"..n, + result = prefix.."-mk"..n, + subgroup = "angels-warehouses-"..n, + }} + }) + + data.raw.recipe[prefix.."-mk"..n].ingredients = util.copy(logistic_ingredients[n]) + end +end + +-- Add all the prerequisites +for name, prerequisite in pairs(prerequisite_map) do + bobmods.lib.recipe.add_ingredient(name, prerequisite) +end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/subgroups.lua b/extendedangels/prototypes/subgroups.lua similarity index 100% rename from extendedangels_0.5.9/prototypes/subgroups.lua rename to extendedangels/prototypes/subgroups.lua diff --git a/extendedangels/prototypes/technology/bioprocessing.lua b/extendedangels/prototypes/technology/bioprocessing.lua new file mode 100644 index 00000000..3a27fa9a --- /dev/null +++ b/extendedangels/prototypes/technology/bioprocessing.lua @@ -0,0 +1,221 @@ +if not angelsmods.bioprocessing then return end + +data:extend({ + -- Advanced angel's bioprocessing + { + type = "technology", + name = "angels-advanced-bio-processing", + icon = "__angelsbioprocessing__/graphics/technology/algae-farm-tech.png", + icon_size = 128, + prerequisites = { + "bio-processing-blue", + }, + effects = { + { + type = "unlock-recipe", + recipe = "algae-farm-5" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 30 + }, + }, + + -- Bio farm 3 + { + type = "technology", + name = "bio-farm-3", + icon = "__angelsbioprocessing__/graphics/technology/base-farm-tech.png", + icon_size = 128, + prerequisites = { + "bio-farm-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "crop-farm-3" + }, + { + type = "unlock-recipe", + recipe = "composter-3" + }, + { + type = "unlock-recipe", + recipe = "bio-processor-3" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + }, + time = 30 + }, + }, + + -- Bio refugium butchery 3 + { + type = "technology", + name = "bio-refugium-butchery-3", + icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-butchery-tech.png", + icon_size = 160, + order = "c-a", + prerequisites = { + "bio-refugium-butchery-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "bio-butchery-3" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + }, + time = 30 + }, + }, + + -- Bio farm advanced upgrade + { + type = "technology", + name = "bio-farm-advanced-upgrade", + icon = "__angelsbioprocessing__/graphics/technology/base-farm-tech.png", + icon_size = 128, + order = "c-a", + prerequisites = { + "bio-temperate-farming-2", + "bio-desert-farming-2", + "bio-swamp-farming-2" + }, + effects = { + { + type = "unlock-recipe", + recipe = "temperate-farm-3" + }, + { + type = "unlock-recipe", + recipe = "desert-farm-3" + }, + { + type = "unlock-recipe", + recipe = "swamp-farm-3" + }, + }, + unit = { + count = 256, + ingredients = { + {"automation-science-pack", 4}, + {"logistic-science-pack", 4}, + {"chemical-science-pack", 4}, + {"production-science-pack", 4}, + {"token-bio", 1} + }, + time = 30 + } + }, + + -- Bio refugium hatchery 2 + { + type = "technology", + name = "bio-refugium-hatchery-2", + icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-puffer-hatchery-tech.png", + icon_size = 160, + order = "c-a", + prerequisites = { + "bio-refugium-hatchery" + }, + effects = { + { + type = "unlock-recipe", + recipe = "bio-hatchery-2" + }, + { + type = "unlock-recipe", + recipe = "bio-hatchery-3" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"token-bio", 1} + }, + time = 30 + }, + }, + + -- Bio nutrient paste 2 + { + type = "technology", + name = "bio-nutrient-paste-2", + icon = "__angelsbioprocessing__/graphics/technology/nutrient-extractor-tech.png", + icon_size = 128, + order = "c-a", + prerequisites = { + "bio-nutrient-paste" + }, + effects = { + { + type = "unlock-recipe", + recipe = "nutrient-extractor-2" + }, + { + type = "unlock-recipe", + recipe = "nutrient-extractor-3" + } + }, + unit = { + count = 80, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1} + }, + time = 30 + } + }, + + -- Bio refugium fish 3 + { + type = "technology", + name = "bio-refugium-fish-3", + icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-fish-tech.png", + icon_size = 128, + order = "c-a", + prerequisites = { + "bio-refugium-fish-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "bio-refugium-fish-3" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1} + }, + time = 30 + }, + }, +}) \ No newline at end of file diff --git a/extendedangels/prototypes/technology/petrochem.lua b/extendedangels/prototypes/technology/petrochem.lua new file mode 100644 index 00000000..2383de56 --- /dev/null +++ b/extendedangels/prototypes/technology/petrochem.lua @@ -0,0 +1,64 @@ +data:extend({ + -- Angels advanced gas processing 2 + { + type = "technology", + name = "angels-advanced-gas-processing-2", + icon = "__angelspetrochem__/graphics/technology/gas-refinery-tech.png", + icon_size = 128, + prerequisites = { + "angels-advanced-gas-processing", + "angels-advanced-chemistry-4" + }, + effects = { + { + type = "unlock-recipe", + recipe = "gas-refinery-4" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, + + -- Sodium processing 2 + { + type = "technology", + name = "sodium-processing-2", + icon = "__angelspetrochem__/graphics/technology/sodium-tech.png", + icon_size = 128, + prerequisites = { + "sodium-processing", + }, + effects = { + { + type = "unlock-recipe", + recipe = "solid-sodium-floride-1" + }, + { + type = "unlock-recipe", + recipe = "solid-sodium-floride-2" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, +}) \ No newline at end of file diff --git a/extendedangels/prototypes/technology/refining.lua b/extendedangels/prototypes/technology/refining.lua new file mode 100644 index 00000000..ced511d5 --- /dev/null +++ b/extendedangels/prototypes/technology/refining.lua @@ -0,0 +1,162 @@ +if not mods["Clowns-Extended-Minerals"] then + local prerequisite = data.raw.technology["water-washing-2"] + if prerequisite then + data:extend({ + -- Water washing 3 + { + type = "technology", + name = "water-washing-3", + icons = util.copy(prerequisite.icons), + icon = util.copy(prerequisite.icon), + icon_size = util.copy(prerequisite.icon_size), + icon_mipmaps = util.copy(prerequisite.icon_mipmaps), + prerequisites = { + "water-washing-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "washing-plant-3" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, + }) + end +end + +if not mods["Clowns-Processing"] then + local prerequisite = data.raw.technology["water-treatment-4"] + if prerequisite then + data:extend({ + { + type = "technology", + name = "water-treatment-5", + icons = util.copy(prerequisite.icons), + icon = util.copy(prerequisite.icon), + icon_size = util.copy(prerequisite.icon_size), + icon_mipmaps = util.copy(prerequisite.icon_mipmaps), + prerequisites = { + "water-treatment-4", + }, + effects = { + { + type = "unlock-recipe", + recipe = "hydro-plant-4" + }, + { + type = "unlock-recipe", + recipe = "salination-plant-3" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, + }) + end +end + + +local prerequisite = data.raw.technology["water-washing-3"] +if prerequisite then + data:extend({ + -- Water washing 4 + { + type = "technology", + name = "water-washing-4", + icons = util.copy(prerequisite.icons), + icon = util.copy(prerequisite.icon), + icon_size = util.copy(prerequisite.icon_size), + icon_mipmaps = util.copy(prerequisite.icon_mipmaps), + prerequisites = { + "water-washing-3", + }, + effects = { + { + type = "unlock-recipe", + recipe = "washing-plant-4" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, + }) +end + +local prerequisite = data.raw.technology["advanced-ore-refining-4"] +if prerequisite then + data:extend({ + -- Advanced ore refining 5 + { + type = "technology", + name = "advanced-ore-refining-5", + icons = util.copy(prerequisite.icons), + icon = util.copy(prerequisite.icon), + icon_size = util.copy(prerequisite.icon_size), + icon_mipmaps = util.copy(prerequisite.icon_mipmaps), + prerequisites = { + "advanced-ore-refining-4", + }, + effects = { + { + type = "unlock-recipe", + recipe = "ore-crusher-4" + }, + { + type = "unlock-recipe", + recipe = "ore-floatation-cell-4" + }, + { + type = "unlock-recipe", + recipe = "ore-leaching-plant-4" + }, + { + type = "unlock-recipe", + recipe = "ore-refinery-3" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 15 + }, + order = "c-a" + }, + }) +end \ No newline at end of file diff --git a/extendedangels/prototypes/technology/smelting.lua b/extendedangels/prototypes/technology/smelting.lua new file mode 100644 index 00000000..e662bda6 --- /dev/null +++ b/extendedangels/prototypes/technology/smelting.lua @@ -0,0 +1,221 @@ +data:extend({ + -- Angels copper tungsten smelting 1 + { + type = "technology", + name = "angels-copper-tungsten-smelting-1", + icon = "__extendedangels__/graphics/technology/smelting-copper-tungsten.png", + icon_size = 128, + prerequisites = { + "angels-copper-smelting-1", + "angels-tungsten-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "copper-tungsten-smelting-1" + }, + { + type = "unlock-recipe", + recipe = "molten-copper-tungsten-smelting-1" + }, + }, + unit = { + count = 75, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, + + -- Angels copper tungsten smelting 2 + { + type = "technology", + name = "angels-copper-tungsten-smelting-2", + icon = "__extendedangels__/graphics/technology/smelting-copper-tungsten.png", + icon_size = 128, + prerequisites = { + "angels-copper-tungsten-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "copper-tungsten-smelting-2" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, + + -- Angels stone smelting 4 + { + type = "technology", + name = "angels-stone-smelting-4", + icon = "__angelssmelting__/graphics/technology/cement-tech.png", + icon_size = 128, + upgrade = true, + prerequisites = { + "angels-stone-smelting-3", + }, + effects = { + { + type = "unlock-recipe", + recipe = "angels-titanium-concrete-brick" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, + + -- -- Slag processing 3 + -- { + -- type = "technology", + -- name = "slag-processing-3", + -- icon = "__angelsrefining__/graphics/technology/slag-processing.png", + -- icon_size = 64, + -- prerequisites = { + -- "slag-processing-2", + -- }, + -- effects = { + -- { + -- type = "unlock-recipe", + -- recipe = "filtration-unit-3" + -- }, + -- { + -- type = "unlock-recipe", + -- recipe = "crystallizer-3" + -- }, + -- }, + -- unit = { + -- count = 100, + -- ingredients = { + -- {"automation-science-pack", 1}, + -- {"logistic-science-pack", 1}, + -- {"chemical-science-pack", 1}, + -- {"production-science-pack", 1}, + -- {"utility-science-pack", 1}, + -- }, + -- time = 30 + -- }, + -- order = "a-a-a1" + -- }, + + -- Angels tungsten carbide smelting 1 + { + type = "technology", + name = "angels-tungsten-carbide-smelting-1", + icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", + icon_size = 128, + prerequisites = { + "angels-tungsten-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "tungsten-carbide-smelting-1" + }, + { + type = "unlock-recipe", + recipe = "angels-plate-tungsten-carbide" + }, + }, + unit = { + count = 75, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, + + -- Angels tungsten carbide smelting 2 + { + type = "technology", + name = "angels-tungsten-carbide-smelting-2", + icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", + icon_size = 128, + prerequisites = { + "angels-tungsten-smelting-2", + "angels-tungsten-carbide-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "tungsten-carbide-smelting-2" + }, + }, + unit = { + count = 100, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, + + -- Angels tungsten carbide smelting 3 + { + type = "technology", + name = "angels-tungsten-carbide-smelting-3", + icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", + icon_size = 128, + prerequisites = { + "angels-tungsten-smelting-3", + "angels-tungsten-carbide-smelting-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "tungsten-carbide-smelting-3" + }, + { + type = "unlock-recipe", + recipe = "solid-tungsten-oxide-smelting-2" + }, + }, + unit = { + count = 150, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + }, +}) \ No newline at end of file diff --git a/extendedangels/prototypes/technology/warehouses.lua b/extendedangels/prototypes/technology/warehouses.lua new file mode 100644 index 00000000..069d3d32 --- /dev/null +++ b/extendedangels/prototypes/technology/warehouses.lua @@ -0,0 +1,233 @@ +if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end + +data:extend({ + -- Warehouses 2 + { + type = "technology", + name = "warehouses-2", + icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", + icon_size = 128, + prerequisites = { + "angels-warehouses", + "zinc-processing", + "angels-invar-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-mk2" + }, + }, + unit = { + count = 125, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + }, + time = 20 + }, + order = "c-a" + }, + + -- Warehouses 3 + { + type = "technology", + name = "warehouses-3", + icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", + icon_size = 128, + prerequisites = { + "warehouses-2", + "angels-titanium-smelting-1", + "ceramics", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-mk3" + }, + }, + unit = { + count = 200, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + }, + time = 20 + }, + order = "c-a" + }, + + -- Warehouses 4 + { + type = "technology", + name = "warehouses-4", + icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", + icon_size = 128, + prerequisites = { + "warehouses-3", + "angels-tungsten-smelting-1", + "nitinol-processing", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-mk4" + }, + }, + unit = { + count = 200, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 20 + }, + order = "c-a" + }, + + -- Logisitic warehouses 2 + { + type = "technology", + name = "logistic-warehouses-2", + icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", + icon_size = 128, + prerequisites = { + "angels-logistic-warehouses", + "warehouses-2", + "zinc-processing", + "angels-invar-smelting-1", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-passive-provider-mk2" + }, + { + type = "unlock-recipe", + recipe = "warehouse-active-provider-mk2" + }, + { + type = "unlock-recipe", + recipe = "warehouse-storage-mk2" + }, + { + type = "unlock-recipe", + recipe = "warehouse-requester-mk2" + }, + { + type = "unlock-recipe", + recipe = "warehouse-buffer-mk2" + }, + }, + unit = { + count = 125, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + }, + time = 20 + }, + order = "c-a" + }, + + -- Logistic warehouses 3 + { + type = "technology", + name = "logistic-warehouses-3", + icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", + icon_size = 128, + prerequisites = { + "logistic-warehouses-2", + "warehouses-3", + "angels-titanium-smelting-1", + "ceramics", + "advanced-electronics-2", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-passive-provider-mk3" + }, + { + type = "unlock-recipe", + recipe = "warehouse-active-provider-mk3" + }, + { + type = "unlock-recipe", + recipe = "warehouse-storage-mk3" + }, + { + type = "unlock-recipe", + recipe = "warehouse-requester-mk3" + }, + { + type = "unlock-recipe", + recipe = "warehouse-buffer-mk3" + }, + }, + unit = { + count = 200, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + }, + time = 25 + }, + order = "c-a" + }, + + -- Logistic warehouses 4 + { + type = "technology", + name = "logistic-warehouses-4", + icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", + icon_size = 128, + prerequisites = { + "logistic-warehouses-3", + "warehouses-4", + "angels-tungsten-smelting-1", + "nitinol-processing", + "advanced-electronics-3", + }, + effects = { + { + type = "unlock-recipe", + recipe = "warehouse-passive-provider-mk4" + }, + { + type = "unlock-recipe", + recipe = "warehouse-active-provider-mk4" + }, + { + type = "unlock-recipe", + recipe = "warehouse-storage-mk4" + }, + { + type = "unlock-recipe", + recipe = "warehouse-requester-mk4" + }, + { + type = "unlock-recipe", + recipe = "warehouse-buffer-mk4" + }, + }, + unit = { + count = 300, + ingredients = { + {"automation-science-pack", 1}, + {"logistic-science-pack", 1}, + {"chemical-science-pack", 1}, + {"production-science-pack", 1}, + {"utility-science-pack", 1}, + }, + time = 30 + }, + order = "c-a" + } +}) \ No newline at end of file diff --git a/extendedangels_0.5.9/settings.lua b/extendedangels/settings.lua similarity index 100% rename from extendedangels_0.5.9/settings.lua rename to extendedangels/settings.lua diff --git a/extendedangels_0.5.9/thumbnail.png b/extendedangels/thumbnail.png similarity index 100% rename from extendedangels_0.5.9/thumbnail.png rename to extendedangels/thumbnail.png diff --git a/extendedangels_0.5.9/changelog.txt b/extendedangels_0.5.9/changelog.txt deleted file mode 100644 index de69c791..00000000 --- a/extendedangels_0.5.9/changelog.txt +++ /dev/null @@ -1,333 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 0.5.9 -Date: 2023-04-06 - Bugfixes: - - Fixed that in expensive recipe mode, Washing plant 2 was an ingredient in Washing plant 4 - - Fixed that the upgrade planner would downgrade Salination plant 3, Advanced chemical plant 3, Air filter 4, Washing plant 4, and Hydro plant 4 to a previous tier - Locale: - - Added localization for Japanese ---------------------------------------------------------------------------------------------------- -Version: 0.5.8 -Date: 2023-01-01 - Changes: - - Adjusted the ingredients tiers for the following structures to align with changes to Angel's Bioprocessing in version 0.7.23 - - Oil press 2/3 ingredients increased from tiers 2/3 to tiers 3/4 - - Butchery 2/3 ingredients increased from tiers 2/3 to tiers 3/4 - - Basic farm 2/3 ingredients increased from tiers 1/2 to tiers 2/3 - - Desert, Swamp, and Temperate farm 2/3 ingredients increased from tiers 3/4 to tiers 4/5 - - Hatchery 2/3 ingredients increased from tiers 2/3 to tiers 4/5 - - Nutrient extractor 2/3 ingredients increased from tiers 2/3 to tiers 3/4 - - Fish tank 2/3 ingredients increased from tiers 2/3 to tiers 3/4 - - Moved Seed extractor 2 and 3 unlocks into technologies Garden Processing 2 and 3 respectively - - Moved Desert, Swamp, and Temperate farm 2 unlocks into their respective Farming 2 technologies - - Removed technology "Advanced farm upgrades 2", and moved Desert, Swamp and Temperate farm 3 unlocks into "Advanced farm upgrades" - - Minimum version of Angel's Bioprocessing has been incremented to version 0.7.23 - - Removed Air filter 3, Crystallizer 3 and Filtration Unit 3 as added by this mod; buildings are now native to Angel's Petrochem and Angel's Refining - - Minimum version of Angel's Smelting has been incremented to version 0.6.20 - Locale: - - Added partial localization for Korean ---------------------------------------------------------------------------------------------------- -Version: 0.5.7 -Date: 2022-04-03 - Locale: - - Updated localization for Ukrainian ---------------------------------------------------------------------------------------------------- -Version: 0.5.6 -Date: 2022-03-30 - Locale: - - Updated localization for Ukrainian ---------------------------------------------------------------------------------------------------- -Version: 0.5.5 -Date: 2022-03-19 - Locale: - - Added partial localization for Ukrainian - - Updated localization for French ---------------------------------------------------------------------------------------------------- -Version: 0.5.4 -Date: 2022-01-04 - Bugfixes: - - Fixed that several technology icons were not sized correctly when playing with the latest versions of Angel's mods ---------------------------------------------------------------------------------------------------- -Version: 0.5.3 -Date: 2021-12-19 - Changes: - - Minimum versions of Angel's Bioprocessing and Angel's Smelting have been incremented to the latest versions - Bugfixes: - - Fixed startup errors related to changed icon definitions for several buildings to account for graphics changes in Angel's Refinings 0.12.1 ---------------------------------------------------------------------------------------------------- -Version: 0.5.2 -Date: 2021-10-16 - Bugfixes: - - Fixed that tint assignment for Angel's Refining structures did not validate the existence of the field being called leading to a startup error when Artisanal Reskins: Angel's mods is enabled - Locale: - - Updated Russian localization ---------------------------------------------------------------------------------------------------- -Version: 0.5.1 -Date: 2021-09-14 - Changes: - - Changed icon for Oil refinery 3 to align with changes in Angel's Refining - Locale: - - Fixed that Flotation cell 4 was spelled incorrectly - - Added partial localization for Brazilian Portuguese ---------------------------------------------------------------------------------------------------- -Version: 0.5.0 -Date: 2021-08-13 - Features: - - Recipes have been reworked to be in-line with current Angel's recipes, and make use of higher tier materials where appropriate - - Technologies have had their time requirements updated to be more in-line with current Angel's technologies (15s -> 30s) - - Angel's Bioprocessing minimum required version now 0.7.20 - Changes: - - Angel's Bioprocessing 0.7.20 adds an Algae farm 4; as such the Algae farm 4 added by this mod has been changed to the Algae farm 5 - - No migration of existing algae farm 4s will be attempted to avoid collisions with Angel's Bioprocessing - Bugfixes: - - Updated the API call to Angel's Industries for `add_minable_results`, fixing a startup error - Locale: - - Added localization for Russian ---------------------------------------------------------------------------------------------------- -Version: 0.4.8 -Date: 2021-06-13 - Changes: - - Angel's Smelting minimum version set to 0.6.15 - - Angel's Bioprocessing minimum version set to 0.7.18 - - Removed now-redundant code bits related to supporting older versions of Angel's Smelting and Angel's Bioprocessing - Locale: - - Renamed Press 2 and Press 3 to Oil press 2 and Oil press 3 reflecting changes in Angel's Bioprocessing - - Updated German localization ---------------------------------------------------------------------------------------------------- -Version: 0.4.7 -Date: 2021-05-28 - Bugfixes: - - Fixed that Filtration unit 3 was missing a crafting category available in Filtration unit 2 ---------------------------------------------------------------------------------------------------- -Version: 0.4.6 -Date: 2021-05-28 - Bugfixes: - - Fixed inconsistent sorting of Warehouses in interface - - Fixed overwrite clash in Puffer refugium 3 technology with Angel's Bioprocessing - Locale: - - Added localization for German, partial localization for Vietnamese ---------------------------------------------------------------------------------------------------- -Version: 0.4.5 -Date: 2021-04-04 - Changes: - - Doubled the Tungsten carbide powder mixture output from 12 to 24 units, of the second tier of tungsten carbide powder mixture recipe, and increased the processing time from 8 to 16 seconds to bring it into line with the first and third tier recipes; also added tier numerals - - Adjusted item and recipe sorting to correct a few issues with tungsten carbide, copper tungsten and a few miscellaneous items - - Added an input fluid port on induction furnaces, and moved the recipes for molten copper-tungsten from the chemical furnace to the induction furnace - - Added high-res versions of copper tungsten and tungsten carbide items, recipes, and technologies, active when using the upcoming release of Angel's mods - Bugfixes: - - Fixed that the recipe for zinc powder did not have ingredients; it is now properly crafted from 1 zinc ingot ---------------------------------------------------------------------------------------------------- -Version: 0.4.4 -Date: 2021-03-26 - Bugfixes: - - Fixed that structures were not returning the correct item when deconstructed - Locale: - - Fixed several typos ---------------------------------------------------------------------------------------------------- -Version: 0.4.3 -Date: 2021-03-23 - Features: - - Added the setting "Legacy inventory sizes" to enable legacy inventory slot counts for warehouses - - Now dependent on Factorio Library - Changes: - - Adjusted the check for Angel's component mode to use the Angel's component mode trigger - - Adjusted the warehouse inventory size defaults for performance reasons; new defaults correspond to a 15%, 30%, and 45% increase for each tier over the defaults from Angel's Addons - Storage Options, down from 147%, 340%, 532%, and 725% ---------------------------------------------------------------------------------------------------- -Version: 0.4.2 -Date: 2021-03-21 - Bugfixes: - - Fixed startup error when no Angel's Addons mods are present. ---------------------------------------------------------------------------------------------------- -Version: 0.4.1 -Date: 2021-03-21 - Bugfixes: - - Fixed startup errors related to disabling warehouses while using Angel's Addons - Storage Options ---------------------------------------------------------------------------------------------------- -Version: 0.4.0 -Date: 2021-03-20 - Features: - - Added setting "Adjust icon ordering" to improve sort order of buildings in Angel's Petrochemical Processing and Angel's Bioprocessing mods, default on - Changes: - - Substantial code cleanup and rework of entity creation - - Updated how Angel numerals are handled; supports upcoming numeral rework in Angel's mods - - Technology `bio-pressing-2` now handles upcoming changes in Angel's Bioprocessing - - Locale updates to conform to upcoming locale changes in Angel's mods - - Adjusted pollution for several refining, petrochemical and bioprocessing buildings added by this mod to be in-line with Angel's pollution values - - Addjusted energy usage for several refining, petrochemical buildings to correct some inconsistencies with scaling - - Adjusted module slot count for bioprocessing buildings added by this mod to 2 (inherited) to be in line with changes to Angel's Bioprocessing regarding modules - - Corrected tier color progression for refining structures - - Removed version numbers from dependency ---------------------------------------------------------------------------------------------------- -Version: 0.3.13 -Date: 2021-03-20 - Changes: - - Patched for factorio 1.1 - - Updated to work with Angels Storage Options instead of the deprecated Warehouse mod - - Removed conditional requires ---------------------------------------------------------------------------------------------------- -Version: 0.3.12 -Date: 2020-06-07 - Changes: - - Changed Hatchery to have 3 output slots to match angels changes ---------------------------------------------------------------------------------------------------- -Version: 0.3.11 -Date: 2020-06-07 - Changes: - - Fixed crash when loading without Madclowns processing loaded ---------------------------------------------------------------------------------------------------- -Version: 0.3.10 -Date: 2020-05-31 - Changes: - - Fixed error on loading save game without Angel's Bioprocessing - - Fixed error with tech name change in bio proessiong 0.7.9 ---------------------------------------------------------------------------------------------------- -Version: 0.3.9 -Date: 2020-05-10 - Changes: - - Fixed crafting speed on bio buildings being wrong ---------------------------------------------------------------------------------------------------- -Version: 0.3.8 -Date: 2020-05-09 - Changes: - - Fixed locale for Tungsten Hexachloride Gas - - Added stone brick to Titanium Concrete Brick - - Fixed Crafting speed on Fish & Biter Refugium - - Fixed missing mk icons on arboretum and seed generators - - Added Seed Extractor MK2 & MK3 ---------------------------------------------------------------------------------------------------- -Version: 0.3.7 -Date: 2020-04-26 - Changes: - - Fixed Icon Ordering issues with Angels Bio Buildings - - Added Hatchery MK2 & MK3 - - Added Nutrient Extractor MK2 & MK3 - - Added Biter and Puffer Refugiume MK2 & MK3 - - Added Mk Icons to Warehouses ---------------------------------------------------------------------------------------------------- -Version: 0.3.6 -Date: 2020-04-26 - Changes: - - Fixed buildings not generation pollution - - Added Press MK2 & MK3 - - Added Bio Processor MK2 & MK3 - - Added Butchery MK2 & MK3 - - Added Composter MK2 & MK3 - - Added Crop, Desert, Swamp & Temperate Farms MK2 & MK3 ---------------------------------------------------------------------------------------------------- -Version: 0.3.5 -Date: 2020-04-20 - Changes: - - Fixed Titanium Brick not working ---------------------------------------------------------------------------------------------------- -Version: 0.3.4 -Date: 2020-04-19 - Changes: - - Removed logging for Angels Components support - - Fixed missing Bob's Logistics pack missing from Logistics warehoue 3 & 4 - - Added tress to Mk2 & Mk3 Seed Generators ---------------------------------------------------------------------------------------------------- -Version: 0.3.3 -Date: 2020-04-05 - Changes: - - The ingredient return on mining was being called no matter the setting thanks to Pezzawinkle - - Fixed dependecny checking for angels warehouse to work if no angels addon mods are loaded ---------------------------------------------------------------------------------------------------- -Version: 0.3.2 -Date: 2020-04-04 - Changes: - - Fixed bounding box issues with Warehouse forget to do this ---------------------------------------------------------------------------------------------------- -Version: 0.3.1 -Date: 2020-04-04 - Changes: - - Added Support for Angels Componets in Angels Industiries tanks to Pezzawinkle - - Fixed icons issues from lastest angel's update thanks to Pezzawinkle - - Fixed Angel's Liquifying recipes not showing up in Adv Chem Plant Mk3 - - Fixed Warehouse icorn sorting when Angel's Industries present thanks to triktor - - Fixed Buffer Mk2-4 appearing before requester when it should be after - - Fixed fast replace on some warehouses being container instead of angels-warhouses - - Removed Alage Farm Mk3 as Angels has added it - - Fixed squeakthrough not working on buildings - - Alage Farm mk4 now haves the number 4 icon on it instead of 3 - - Added upgrade planner support for all buildings ---------------------------------------------------------------------------------------------------- -Version: 0.3.0 -Date: N/A - Changes: - - Update to 0.18 - - Fixed overwrting Madclown's Processing Water Treament 5 Tech ---------------------------------------------------------------------------------------------------- -Version: 0.2.3 -Date: N/A - Changes: - - Fixed Aboretum missing from tech tree since Bio-Processing 0.6.2 changed the tech name ---------------------------------------------------------------------------------------------------- -Version: 0.2.2 -Date: N/A - Changes: - - Removed Hydro Plank Mk3 as angels added it - - Added Aboretum & Seed Generators Mk2 & Mk3 ---------------------------------------------------------------------------------------------------- -Version: 0.2.1 -Date: N/A - Changes: - - Fixed floatation Cell mk4 requring itself to make in expensive mode ---------------------------------------------------------------------------------------------------- -Version: 0.2.0 -Date: N/A - Changes: - - Updated to 0.17 - - Added Buffer Warehouse Mk2-4 ---------------------------------------------------------------------------------------------------- -Version: 0.1.6 -Date: N/A - Changes: - - Fixed warehouse icons being the same in the quickbar ---------------------------------------------------------------------------------------------------- -Version: 0.1.5 -Date: N/A - Changes: - - Fixed some more optinal depenecy issues ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 -Date: N/A - Changes: - - Updated some building recipes to use Titanium Reinforced Brick - - Fixed a typo - - Fixed some issues with adding the mod to an exisiting playthoourgh with recipes not being updated - - Reblanced Tungsten Smelting 3 - - Adjusted Tungsten Powder to use 1 solid and 2 fluids instead of 3 fluids as the chemical furnace has only 2 fluid inputs - - Fixed angels warehouse optinal dependecy not working ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 -Date: N/A - Changes: - - Changed Tungsten Hexachloride to use Tungsten Trioxide ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 -Date: N/A - Changes: - - Made it so if you set the icon scaling for Angel's Warehouse in the Mod Settings it works on mk2-mk4 warehouses ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: N/A - Changes: - - Fixed incorrect recipe with Hydro Plant MK4 ---------------------------------------------------------------------------------------------------- -Version: 0.1.0 -Date: N/A - Changes: - - Initial Release - - Includes Copper Tungsten and Tungsten Carbide smelting using Angels Smelting - - Redone Tungsten Smelting 3 - - Adds Tetrasodium Pyrophosphate to Tungsten Smelting 3 if MadClown01's processing is present - - Added Titanium Reinforced Brick - - Added Advanced Chemical Plant MK3 - - Added Adv Gas Refineray MK4 - - Added Agle Farm Mk3 & MK4 - - Added Hydro Plant MK2 & MK3 - - Added Salation Plant MK3 - - Added Ore Washing Plant MK3 & MK4 - - Added Ore Crusher MK4, Floation Cell MK4, Leaching Plant MK4 & Ore Refineray MK3 - - Added Crystallizer and Filitration Unit MK3 - - Ported the Warehouse Addon Mod and added MK2-MK4 normal warhouses and tech changes diff --git a/extendedangels_0.5.9/control.lua b/extendedangels_0.5.9/control.lua deleted file mode 100644 index d13705b8..00000000 --- a/extendedangels_0.5.9/control.lua +++ /dev/null @@ -1,94 +0,0 @@ -local migration = require("__flib__.migration") - -script.on_configuration_changed(function(config) - -- Check recipe and technology states and make corrections as needed - for _, force in pairs(game.forces) do - local technologies = force.technologies - local recipes = force.recipes - - recipes["washing-plant-3"].enabled = technologies["water-washing-3"].researched - recipes["advanced-chemical-plant-3"].enabled = technologies["angels-advanced-chemistry-4"].researched - recipes["powder-zinc"].enabled = technologies["angels-zinc-smelting-2"].researched - recipes["gas-argon"].enabled = technologies["angels-nitrogen-processing-1"].researched - -- recipes["angels-air-filter-3"].enabled = technologies["angels-nitrogen-processing-3"].researched - recipes["angels-air-filter-4"].enabled = technologies["angels-nitrogen-processing-4"].researched - - if game.active_mods["Clowns-Processing"] then - if technologies["phosphorus-processing-2"].researched then - recipes["solid-disodium-phosphate"].enabled = true - recipes["solid-tetrasodium-pyrophosphate"].enabled = true - end - end - - if technologies["water-treatment-5"].researched then - recipes["hydro-plant-4"].enabled = true - recipes["salination-plant-3"].enabled = true - end - - if technologies["angels-tungsten-smelting-3"].researched then - recipes["solid-tungsten-trioxide-smelting"].enabled = true - recipes["pellet-tungsten-smelting-2"].enabled = true - recipes["solid-sodium-tungstate-smelting"].enabled = true - recipes["casting-powder-tungsten-3"].enabled = true - end - - if game.active_mods["angelsbioprocessing"] then - if technologies["bio-arboretum-2"].researched then - recipes["bio-generator-temperate-2"].enabled = true - recipes["bio-generator-swamp-2"].enabled = true - recipes["bio-generator-desert-2"].enabled = true - recipes["bio-arboretum-2"].enabled = true - end - - if technologies["bio-arboretum-3"].researched then - recipes["bio-generator-temperate-3"].enabled = true - recipes["bio-generator-swamp-3"].enabled = true - recipes["bio-generator-desert-3"].enabled = true - recipes["bio-arboretum-3"].enabled = true - end - - if technologies["bio-refugium-butchery-2"].researched then - recipes["bio-butchery-2"].enabled = true - end - - if technologies["bio-refugium-fish-2"].researched then - recipes["bio-refugium-fish-2"].enabled = true - end - - if technologies["bio-refugium-puffer-2"].researched then - recipes["bio-refugium-puffer-2"].enabled = true - end - - if technologies["bio-refugium-puffer-3"].researched then - recipes["bio-refugium-puffer-3"].enabled = true - end - - if technologies["bio-refugium-biter-2"].researched then - recipes["bio-refugium-biter-2"].enabled = true - end - - if technologies["bio-refugium-biter-3"].researched then - recipes["bio-refugium-biter-3"].enabled = true - end - - if technologies["bio-refugium-biter-3"].researched then - recipes["crop-farm-2"].enabled = true - recipes["composter-2"].enabled = true - recipes["bio-processor-2"].enabled = true - end - - if technologies["bio-pressing-2"].researched then - recipes["bio-press-2"].enabled = true - recipes["bio-press-3"].enabled = true - end - end - end - - -- Notify about inventory change if migrating from a version prior to the change - if config.mod_changes and config.mod_changes["extendedangels"] and config.mod_changes["extendedangels"].old_version then - -- 0.4.3 update - if not migration.is_newer_version("0.4.2", config.mod_changes["extendedangels"].old_version) then - game.print({ "", "[", { "mod-name.extendedangels" }, "] ", { "extendedangels-notifications.legacy-inventory-sizes", { "mod-setting-name.extangels-legacy-inventory-sizes" } } }) - end - end -end) \ No newline at end of file diff --git a/extendedangels_0.5.9/data-final-fixes.lua b/extendedangels_0.5.9/data-final-fixes.lua deleted file mode 100644 index 49d172b6..00000000 --- a/extendedangels_0.5.9/data-final-fixes.lua +++ /dev/null @@ -1,102 +0,0 @@ --- Remove recipes and clear module limitations -local recipe_list = { - "pellet-tungsten-smelting", - "tungsten-carbide", - "tungsten-carbide-2", - "copper-tungsten-alloy" -} - -for _, recipe in pairs(recipe_list) do - data.raw.recipe[recipe] = nil - - for _, module in pairs(data.raw.module) do - if module.limitation then - for j, limit in pairs(module.limitation) do - if limit == recipe then - table.remove(module.limitation, j) - break - end - end - end - end -end - --- Component/Tech overhaul recipe corrections -local previous_building = { - "algae-farm-5", - "bio-generator-temperate-2", - "bio-generator-temperate-3", - "bio-generator-swamp-2", - "bio-generator-swamp-3", - "bio-generator-desert-2", - "bio-generator-desert-3", - "bio-arboretum-2", - "bio-arboretum-3", - "gas-refinery-4", - "advanced-chemical-plant-3", - -- "angels-air-filter-3", - "angels-air-filter-4", - "hydro-plant-4", - "salination-plant-3", - "washing-plant-3", - "washing-plant-4", - "ore-crusher-4", - "ore-floatation-cell-4", - "ore-leaching-plant-4", - "ore-refinery-3", - -- "crystallizer-3", - -- "filtration-unit-3", - "bio-press-2", - "bio-press-3", - "bio-processor-2", - "bio-processor-3", - "bio-butchery-2", - "bio-butchery-3", - "composter-2", - "composter-3", - "crop-farm-2", - "crop-farm-3", - "temperate-farm-2", - "temperate-farm-3", - "desert-farm-2", - "desert-farm-3", - "swamp-farm-2", - "swamp-farm-3", - "bio-hatchery-2", - "bio-hatchery-3", - "nutrient-extractor-2", - "nutrient-extractor-3", - "bio-refugium-fish-2", - "bio-refugium-fish-3", - "bio-refugium-puffer-2", - "bio-refugium-puffer-3", - "bio-refugium-biter-2", - "bio-refugium-biter-3", - "seed-extractor-2", - "seed-extractor-3" -} - -require("prototypes.recipes.angels-components") - -if mods["angelsindustries"] then - if angelsmods.industries.components then - local OV = angelsmods.functions.OV - - extangels.replace_construction_materials() - OV.execute() - - for _, n in pairs(previous_building) do - table.remove(data.raw["recipe"][n]["normal"].ingredients, 1); - table.remove(data.raw["recipe"][n]["expensive"].ingredients, 1); - end - - if settings.startup["angels-return-ingredients"].value then - if not extangels.migration.is_newer_version("0.14.13", mods["angelsindustries"]) then - angelsmods.functions.AI.add_minable_results() - else - add_minable_results() - end - OV.execute() - end - end -end diff --git a/extendedangels_0.5.9/data-updates.lua b/extendedangels_0.5.9/data-updates.lua deleted file mode 100644 index a839e0d1..00000000 --- a/extendedangels_0.5.9/data-updates.lua +++ /dev/null @@ -1,47 +0,0 @@ --- Fallbacks -require("prototypes.recipe-builder-fallbacks") - --- Recipes -require("prototypes.recipes.bioprocessing") -require("prototypes.recipes.petrochem") -require("prototypes.recipes.refining") -require("prototypes.recipes.warehouses") - --- Overrides -require("prototypes.overrides.bioprocessing") -require("prototypes.overrides.next-upgrades") -require("prototypes.overrides.petrochem") -require("prototypes.overrides.recipes") -require("prototypes.overrides.smelting") -require("prototypes.overrides.technology") -require("prototypes.overrides.warehouses") - --- Tungsten carbide powder -data.raw.item["powder-tungsten-carbide"].icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png" -data.raw.item["powder-tungsten-carbide"].icon_size = 64 -data.raw.item["powder-tungsten-carbide"].icon_mipmaps = 4 -data.raw.recipe["tungsten-carbide-smelting-1"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4 }, 1, angelsmods.smelting.number_tint) -data.raw.recipe["tungsten-carbide-smelting-2"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4 }, 2, angelsmods.smelting.number_tint) -data.raw.recipe["tungsten-carbide-smelting-3"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide-hr.png", icon_size = 64, icon_mipmaps = 4 }, 3, angelsmods.smelting.number_tint) -data.raw.technology["angels-tungsten-carbide-smelting-1"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" -data.raw.technology["angels-tungsten-carbide-smelting-1"].icon_size = 256 -data.raw.technology["angels-tungsten-carbide-smelting-1"].icon_mipmaps = 4 -data.raw.technology["angels-tungsten-carbide-smelting-2"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" -data.raw.technology["angels-tungsten-carbide-smelting-2"].icon_size = 256 -data.raw.technology["angels-tungsten-carbide-smelting-2"].icon_mipmaps = 4 -data.raw.technology["angels-tungsten-carbide-smelting-3"].icon = "__extendedangels__/graphics/technology/tungsten-carbide-smelting-and-casting.png" -data.raw.technology["angels-tungsten-carbide-smelting-3"].icon_size = 256 -data.raw.technology["angels-tungsten-carbide-smelting-3"].icon_mipmaps = 4 - --- Molten copper tungsten -data.raw.fluid["liquid-molten-copper-tungsten"].icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png" -data.raw.fluid["liquid-molten-copper-tungsten"].icon_size = 64 -data.raw.fluid["liquid-molten-copper-tungsten"].icon_mipmaps = 4 -data.raw.recipe["copper-tungsten-smelting-1"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png", icon_size = 64, icon_mipmaps = 4 }, 1, angelsmods.smelting.number_tint) -data.raw.recipe["copper-tungsten-smelting-2"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/liquid-molten-copper-tungsten.png", icon_size = 64, icon_mipmaps = 4 }, 2, angelsmods.smelting.number_tint) -data.raw.technology["angels-copper-tungsten-smelting-1"].icon = "__extendedangels__/graphics/technology/copper-tungsten-smelting-and-casting.png" -data.raw.technology["angels-copper-tungsten-smelting-1"].icon_size = 256 -data.raw.technology["angels-copper-tungsten-smelting-1"].icon_mipmaps = 4 -data.raw.technology["angels-copper-tungsten-smelting-2"].icon = "__extendedangels__/graphics/technology/copper-tungsten-smelting-and-casting.png" -data.raw.technology["angels-copper-tungsten-smelting-2"].icon_size = 256 -data.raw.technology["angels-copper-tungsten-smelting-2"].icon_mipmaps = 4 \ No newline at end of file diff --git a/extendedangels_0.5.9/data.lua b/extendedangels_0.5.9/data.lua deleted file mode 100644 index bcb1e0b0..00000000 --- a/extendedangels_0.5.9/data.lua +++ /dev/null @@ -1,30 +0,0 @@ --- Initial requires -require("prototypes.functions") -require("prototypes.subgroups") - --- Setup numeral tint for Angel's warehouses if not already available -if mods["angelsaddons-storage"] then - if not angelsmods.addons.storage.number_tint then - angelsmods.addons.storage.number_tint = { r = 0.95, g = 0.65, b = 0.25, a = 1 } - end -end - --- Buildings -require("prototypes.buildings.petrochem") -require("prototypes.buildings.bioprocessing") -require("prototypes.buildings.refining") -require("prototypes.buildings.warehouses") - --- Items -require("prototypes.items.petrochem") -require("prototypes.items.smelting") - --- Recipes -require("prototypes.recipes.smelting") - --- Technologies -require("prototypes.technology.petrochem") -require("prototypes.technology.smelting") -require("prototypes.technology.bioprocessing") -require("prototypes.technology.refining") -require("prototypes.technology.warehouses") \ No newline at end of file diff --git a/extendedangels_0.5.9/info.json b/extendedangels_0.5.9/info.json deleted file mode 100644 index 79fd9afe..00000000 --- a/extendedangels_0.5.9/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "extendedangels", - "version": "0.5.9", - "factorio_version": "1.1", - "title": "Extended Angels", - "author": "AdamCirillo", - "dependencies":[ - "angelssmelting >= 0.6.20", - "bobplates", - "flib", - "? angelsaddons-storage", - "? bobtech", - "? angelsbioprocessing >= 0.7.23", - "? Clowns-Processing" - ] -} \ No newline at end of file diff --git a/extendedangels_0.5.9/migrations/extendedangels_0.5.8.json b/extendedangels_0.5.9/migrations/extendedangels_0.5.8.json deleted file mode 100644 index c192585f..00000000 --- a/extendedangels_0.5.9/migrations/extendedangels_0.5.8.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "technology": [ - [ - "bio-farm-advanced-upgrade-2", - "bio-farm-advanced-upgrade" - ] - ] -} \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/buildings/bioprocessing.lua b/extendedangels_0.5.9/prototypes/buildings/bioprocessing.lua deleted file mode 100644 index c447efab..00000000 --- a/extendedangels_0.5.9/prototypes/buildings/bioprocessing.lua +++ /dev/null @@ -1,551 +0,0 @@ -if not angelsmods.bioprocessing then return end - --- Set common parameters -local tint = angelsmods.bioprocessing.number_tint - --- Create list of buildings with parameters different from source entity -local bioprocessing_buildings = { - -- Algae farms - ["algae-farm-5"] = { - source = "algae-farm-4", - icon = "__angelsbioprocessing__/graphics/icons/algae-farm.png", - tier = 5, - order = "a[algae]-e", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - crafting_speed = 3, - emissions_per_minute = -100 / 3 * 3, - energy_usage = "225kW", - }, - -- Arboretums - ["bio-arboretum-2"] = { - source = "bio-arboretum-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-arboretum.png", - tier = 2, - order = "c[arboretum]-ab", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - next_upgrade = "bio-arboretum-3", - crafting_speed = 1, - emissions_per_minute = -200, - energy_usage = "200kW", - }, - ["bio-arboretum-3"] = { - source = "bio-arboretum-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-arboretum.png", - tier = 3, - order = "c[arboretum]-ac", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 6, - crafting_speed = 2, - emissions_per_minute = -400, - energy_usage = "400kW", - }, - -- Seed generators - ["bio-generator-temperate-2"] = { - source = "bio-generator-temperate-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-temperate-generator.png", - tier = 2, - order = "b[generator]-aa", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - next_upgrade = "bio-generator-temperate-3", - crafting_speed = 1, - emissions_per_minute = -150, - energy_usage = "200kW", - }, - ["bio-generator-temperate-3"] = { - source = "bio-generator-temperate-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-temperate-generator.png", - tier = 3, - order = "b[generator]-ab", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 6, - crafting_speed = 2, - emissions_per_minute = -300, - energy_usage = "400kW", - }, - ["bio-generator-swamp-2"] = { - source = "bio-generator-swamp-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-swamp-generator.png", - tier = 2, - order = "b[generator]-ba", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - next_upgrade = "bio-generator-swamp-3", - crafting_speed = 1, - emissions_per_minute = -150, - energy_usage = "200kW", - }, - ["bio-generator-swamp-3"] = { - source = "bio-generator-swamp-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-swamp-generator.png", - tier = 3, - order = "b[generator]-bb", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 6, - crafting_speed = 2, - emissions_per_minute = -300, - energy_usage = "400kW", - }, - ["bio-generator-desert-2"] = { - source = "bio-generator-desert-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-desert-generator.png", - tier = 2, - order = "b[generator]-ca", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - next_upgrade = "bio-generator-desert-3", - crafting_speed = 1, - emissions_per_minute = -150, - energy_usage = "200kW", - }, - ["bio-generator-desert-3"] = { - source = "bio-generator-desert-1", - icon = "__angelsbioprocessing__/graphics/icons/bio-desert-generator.png", - tier = 3, - order = "b[generator]-cb", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 6, - crafting_speed = 2, - emissions_per_minute = -300, - energy_usage = "400kW", - }, - -- Presses - ["bio-press-2"] = { - source = "bio-press", - icon = "__angelsbioprocessing__/graphics/icons/bio-press.png", - tier = 2, - order = "d[bio-press]-b[mk2]", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 3, - next_upgrade = "bio-press-3", - crafting_speed = 1.5, - emissions_per_minute = 0.04 * 60, - energy_usage = "190kW", - }, - ["bio-press-3"] = { - source = "bio-press", - icon = "__angelsbioprocessing__/graphics/icons/bio-press.png", - tier = 3, - order = "d[bio-press]-c[mk3]", - subgroup = "bio-processing-buildings-nauvis-a", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = 0.05 * 60, - energy_usage = "225kW", - }, - -- Processors - ["bio-processor-2"] = { - source = "bio-processor", - icon = "__angelsbioprocessing__/graphics/icons/bio-processor.png", - tier = 2, - order = "ca", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 3, - next_upgrade = "bio-processor-3", - crafting_speed = 1.5, - emissions_per_minute = 0.04 * 60, - energy_usage = "190kW", - }, - ["bio-processor-3"] = { - source = "bio-processor", - icon = "__angelsbioprocessing__/graphics/icons/bio-processor.png", - tier = 3, - order = "cb", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = 0.05 * 60, - energy_usage = "225kW", - }, - -- Butcheries - ["bio-butchery-2"] = { - source = "bio-butchery", - type = "furnace", - icon = "__angelsbioprocessing__/graphics/icons/bio-butchery.png", - tier = 2, - order = "ba", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 3, - next_upgrade = "bio-butchery-3", - crafting_speed = 3, - emissions_per_minute = 0.02 * 60, - energy_usage = "190kW", - }, - ["bio-butchery-3"] = { - source = "bio-butchery", - type = "furnace", - icon = "__angelsbioprocessing__/graphics/icons/bio-butchery.png", - tier = 3, - order = "bb", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = 0.03 * 60, - energy_usage = "225kW", - }, - -- Composters - ["composter-2"] = { - source = "composter", - type = "furnace", - icon = "__angelsbioprocessing__/graphics/icons/composter.png", - tier = 2, - order = "ba", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 3, - next_upgrade = "composter-3", - crafting_speed = 3, - emissions_per_minute = 0.02 * 60, - energy_usage = "40kW", - }, - ["composter-3"] = { - source = "composter", - type = "furnace", - icon = "__angelsbioprocessing__/graphics/icons/composter.png", - tier = 3, - order = "bb", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = 0.03 * 60, - energy_usage = "45kW", - }, - -- Crop farms - ["crop-farm-2"] = { - source = "crop-farm", - icon = "__angelsbioprocessing__/graphics/icons/basic-farm.png", - tier = 2, - order = "aa", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 3, - next_upgrade = "crop-farm-3", - crafting_speed = 1.5, - emissions_per_minute = -60, - energy_usage = "125kW", - }, - ["crop-farm-3"] = { - source = "crop-farm", - icon = "__angelsbioprocessing__/graphics/icons/basic-farm.png", - tier = 3, - order = "ab", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = -80, - energy_usage = "150kW", - }, - ["temperate-farm-2"] = { - source = "temperate-farm", - icon = "__angelsbioprocessing__/graphics/icons/temperate-farm.png", - tier = 2, - order = "baa", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 3, - next_upgrade = "temperate-farm-3", - crafting_speed = 3, - emissions_per_minute = -120, - energy_usage = "155kW", - }, - ["temperate-farm-3"] = { - source = "temperate-farm", - icon = "__angelsbioprocessing__/graphics/icons/temperate-farm.png", - tier = 3, - order = "bab", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = -160, - energy_usage = "190kW", - }, - ["swamp-farm-2"] = { - source = "swamp-farm", - icon = "__angelsbioprocessing__/graphics/icons/swamp-farm.png", - tier = 2, - order = "bba", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 3, - next_upgrade = "swamp-farm-3", - crafting_speed = 3, - emissions_per_minute = -120, - energy_usage = "155kW", - }, - ["swamp-farm-3"] = { - source = "swamp-farm", - icon = "__angelsbioprocessing__/graphics/icons/swamp-farm.png", - tier = 3, - order = "bbc", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = -160, - energy_usage = "190kW", - }, - ["desert-farm-2"] = { - source = "desert-farm", - icon = "__angelsbioprocessing__/graphics/icons/desert-farm.png", - tier = 2, - order = "bca", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 3, - next_upgrade = "desert-farm-3", - crafting_speed = 3, - emissions_per_minute = -120, - energy_usage = "155kW", - }, - ["desert-farm-3"] = { - source = "desert-farm", - icon = "__angelsbioprocessing__/graphics/icons/desert-farm.png", - tier = 3, - order = "bcb", - subgroup = "bio-processing-buildings-vegetabilis-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = -160, - energy_usage = "190kW", - }, - -- Hatcheries - ["bio-hatchery-2"] = { - type = "furnace", - source = "bio-hatchery", - icon = "__angelsbioprocessing__/graphics/icons/bio-hatchery.png", - tier = 2, - order = "ca", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 3, - next_upgrade = "bio-hatchery-3", - crafting_speed = 3, - emissions_per_minute = 0.02 * 60, - energy_usage = "190kW", - }, - ["bio-hatchery-3"] = { - type = "furnace", - source = "bio-hatchery", - icon = "__angelsbioprocessing__/graphics/icons/bio-hatchery.png", - tier = 3, - order = "cb", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = 0.03 * 60, - energy_usage = "225kW", - }, - -- Nutrient extractors - ["nutrient-extractor-2"] = { - source = "nutrient-extractor", - icon = "__angelsbioprocessing__/graphics/icons/nutrient-extractor.png", - tier = 2, - order = "d[nutrient-extractor]-b[mk2]", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 3, - next_upgrade = "nutrient-extractor-3", - crafting_speed = 1.5, - emissions_per_minute = 0.04 * 60, - energy_usage = "190kW", - }, - ["nutrient-extractor-3"] = { - source = "nutrient-extractor", - icon = "__angelsbioprocessing__/graphics/icons/nutrient-extractor.png", - tier = 3, - order = "d[nutrient-extractor]-c[mk3]", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = 0.05 * 60, - energy_usage = "225kW", - }, - -- Refugiums - ["bio-refugium-fish-2"] = { - source = "bio-refugium-fish", - icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-fish.png", - tier = 2, - order = "aa", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 3, - next_upgrade = "bio-refugium-fish-3", - crafting_speed = 1.25, - emissions_per_minute = -60, - energy_usage = "190kW", - }, - ["bio-refugium-fish-3"] = { - source = "bio-refugium-fish", - icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-fish.png", - tier = 3, - order = "ab", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = -100, - energy_usage = "225kW", - }, - ["bio-refugium-puffer-2"] = { - source = "bio-refugium-puffer", - icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-puffer.png", - tier = 2, - order = "da", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 3, - next_upgrade = "bio-refugium-puffer-3", - crafting_speed = 1.25, - emissions_per_minute = -60, - energy_usage = "190kW", - }, - ["bio-refugium-puffer-3"] = { - source = "bio-refugium-puffer", - icon = "__angelsbioprocessing__/graphics/icons/bio-refugium-puffer.png", - tier = 3, - order = "db", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = -100, - energy_usage = "225kW", - }, - ["bio-refugium-biter-2"] = { - source = "bio-refugium-biter", - icon = "__angelsbioprocessing__/graphics/icons/alien-farm.png", - tier = 2, - order = "ea", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 3, - next_upgrade = "bio-refugium-biter-3", - crafting_speed = 3, - emissions_per_minute = -40, - energy_usage = "190kW", - }, - ["bio-refugium-biter-3"] = { - source = "bio-refugium-biter", - icon = "__angelsbioprocessing__/graphics/icons/alien-farm.png", - tier = 3, - order = "eb", - subgroup = "bio-processing-buildings-alien-a", - -- module_slots = 4, - crafting_speed = 4, - emissions_per_minute = -60, - energy_usage = "225kW", - }, - -- Seed extractors - ["seed-extractor-2"] = { - source = "seed-extractor", - icon = "__angelsbioprocessing__/graphics/icons/seed-extractor.png", - tier = 2, - order = "aa", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 3, - next_upgrade = "seed-extractor-3", - crafting_speed = 1.25, - emissions_per_minute = 0.04 * 60, - energy_usage = "180kW", - }, - ["seed-extractor-3"] = { - source = "seed-extractor", - icon = "__angelsbioprocessing__/graphics/icons/seed-extractor.png", - tier = 3, - order = "ab", - subgroup = "bio-processing-buildings-vegetabilis-b", - -- module_slots = 4, - crafting_speed = 2, - emissions_per_minute = 0.05 * 60, - energy_usage = "220kW", - }, -} - -for name, params in pairs(bioprocessing_buildings) do - -- Check for source entity - local source_entity = data.raw[params.type and params.type or "assembling-machine"][params.source] - if not source_entity then goto continue end - - -- Fetch the icon with numeral overlay - local icons = extangels.numeral_tier({ icon = params.icon, icon_size = params.icon_size or 32 }, params.tier, params.tint or tint) - - data:extend({ - -- Create the item - { - type = "item", - name = name, - icons = icons, - subgroup = params.subgroup or nil, - order = params.order, - place_result = name, - stack_size = params.stack_size or 10, - }, - - -- Create the entity - util.merge { source_entity, { - name = name, - minable = { result = name }, - next_upgrade = params.next_upgrade or nil, - module_specification = params.module_slots and { module_slots = params.module_slots } or nil, - crafting_speed = params.crafting_speed or nil, - energy_source = params.emissions_per_minute and { emissions_per_minute = params.emissions_per_minute } or nil, - energy_usage = params.energy_usage or nil, - } }, - }) - - -- Set entity icon - data.raw[params.type and params.type or "assembling-machine"][name].icons = icons - - -- Continue - ::continue:: -end - --- Fix properties for Angel buildings -local buildings = { - ["algae-farm"] = { prototype = "assembling-machine", tier = 1 }, - ["algae-farm-2"] = { prototype = "assembling-machine", tier = 2 }, - ["algae-farm-3"] = { prototype = "assembling-machine", tier = 3 }, - ["algae-farm-4"] = { prototype = "assembling-machine", tier = 4 }, - ["bio-arboretum-1"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-generator-temperate-1"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-generator-swamp-1"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-generator-desert-1"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-press"] = { prototype = "assembling-machine", tier = 1, order = "d[bio-press]-a[mk1]" }, - ["bio-processor"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-butchery"] = { prototype = "furnace", tier = 1 }, - ["composter"] = { prototype = "furnace", tier = 1 }, - ["crop-farm"] = { prototype = "assembling-machine", tier = 1 }, - ["temperate-farm"] = { prototype = "assembling-machine", tier = 1 }, - ["swamp-farm"] = { prototype = "assembling-machine", tier = 1 }, - ["desert-farm"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-hatchery"] = { prototype = "furnace", tier = 1 }, - ["nutrient-extractor"] = { prototype = "assembling-machine", tier = 1, order = "d[nutrient-extractor]-a[mk1]" }, - ["bio-refugium-fish"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-refugium-puffer"] = { prototype = "assembling-machine", tier = 1 }, - ["bio-refugium-biter"] = { prototype = "assembling-machine", tier = 1 }, - ["seed-extractor"] = { prototype = "assembling-machine", tier = 1 }, -} - -for name, params in pairs(buildings) do - local item = data.raw.item[name] - local entity = data.raw[params.prototype][name] - - if item and (item.icons or item.icon) then - local item_icon, item_icon_size - if item.icons then - item_icon = item.icons[1].icon - item_icon_size = item.icons[1].icon_size or item.icon_size or 32 - elseif item.icon then - item_icon = item.icon - item_icon_size = item.icon_size or 32 - end - - item.icons = extangels.numeral_tier({ icon = item_icon, icon_size = item_icon_size }, params.tier, tint) - end - - if entity and (entity.icons or entity.icon) then - local entity_icon, entity_icon_size - if entity.icons then - entity_icon = entity.icons[1].icon - entity_icon_size = entity.icons[1].icon_size or entity.icon_size or 32 - elseif entity.icon then - entity_icon = entity.icon - entity_icon_size = entity.icon_size or 32 - end - - entity.icons = extangels.numeral_tier({ icon = entity_icon, icon_size = entity_icon_size }, params.tier, tint) - end - - if item and params.order then - item.order = params.order - end -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/buildings/petrochem.lua b/extendedangels_0.5.9/prototypes/buildings/petrochem.lua deleted file mode 100644 index 728dd7ad..00000000 --- a/extendedangels_0.5.9/prototypes/buildings/petrochem.lua +++ /dev/null @@ -1,71 +0,0 @@ -data:extend({ - -- Advanced Chemical Plant - { - type = "item", - name = "advanced-chemical-plant-3", - icons = extangels.numeral_tier({ icon = "__angelspetrochem__/graphics/icons/advanced-chemical-plant.png", icon_size = 32 }, 3, angelsmods.petrochem.number_tint), - subgroup = "petrochem-buildings-chemical-plant", - order = "b[advanced]-c", - place_result = "advanced-chemical-plant-3", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["advanced-chemical-plant"], { - name = "advanced-chemical-plant-3", - minable = { result = "advanced-chemical-plant-3" }, - module_specification = { module_slots = 4 }, - crafting_speed = 3.5, - energy_source = { emissions_per_minute = 0.1 * 60 }, - energy_usage = "500kW", - } }, - - -- -- Air filter 3 - -- { - -- type = "item", - -- name = "angels-air-filter-3", - -- icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint), - -- subgroup = "petrochem-buildings-electrolyser", - -- order = "b[angels-air-filter]-c", - -- place_result = "angels-air-filter-3", - -- stack_size = 10, - -- }, - - -- util.merge{data.raw["assembling-machine"]["angels-air-filter"], { - -- name = "angels-air-filter-3", - -- minable = {result = "angels-air-filter-3"}, - -- next_upgrade = "angels-air-filter-4", - -- module_specification = {module_slots = 3}, - -- crafting_speed = 3, - -- energy_source = {emissions_per_minute = -0.14 * 60}, - -- energy_usage = "250kW", - -- }}, - - -- Air filter 4 - { - type = "item", - name = "angels-air-filter-4", - icons = extangels.numeral_tier({ icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32 }, 4, angelsmods.petrochem.number_tint), - subgroup = "petrochem-buildings-electrolyser", - order = "b[angels-air-filter]-d", - place_result = "angels-air-filter-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["angels-air-filter"], { - name = "angels-air-filter-4", - minable = { result = "angels-air-filter-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 4, - energy_source = { emissions_per_minute = -0.16 * 60 }, - energy_usage = "300kW", - } }, -}) - --- Next upgrade fixes, due to util.merge usage -data.raw["assembling-machine"]["advanced-chemical-plant-3"].next_upgrade = nil -data.raw["assembling-machine"]["angels-air-filter-4"].next_upgrade = nil - --- Entity icon adjustments -data.raw["assembling-machine"]["advanced-chemical-plant-3"].icons = extangels.numeral_tier({ icon = "__angelspetrochem__/graphics/icons/advanced-chemical-plant.png", icon_size = 32 }, 3, angelsmods.petrochem.number_tint) --- data.raw["assembling-machine"]["angels-air-filter-3"].icons = extangels.numeral_tier({icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32}, 3, angelsmods.petrochem.number_tint) -data.raw["assembling-machine"]["angels-air-filter-4"].icons = extangels.numeral_tier({ icon = "__angelspetrochem__/graphics/icons/air-filter.png", icon_size = 32 }, 4, angelsmods.petrochem.number_tint) diff --git a/extendedangels_0.5.9/prototypes/buildings/refining.lua b/extendedangels_0.5.9/prototypes/buildings/refining.lua deleted file mode 100644 index b95eace5..00000000 --- a/extendedangels_0.5.9/prototypes/buildings/refining.lua +++ /dev/null @@ -1,227 +0,0 @@ -data:extend({ - -- Hydro plant 4 - { - type = "item", - name = "hydro-plant-4", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/hydro-plant.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint), - subgroup = "water-treatment-building", - order = "a[hydro-plant]-d[mk4]", - place_result = "hydro-plant-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["hydro-plant"], { - name = "hydro-plant-4", - minable = { result = "hydro-plant-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 4, - energy_source = { emissions_per_minute = 0.06 * 60 }, - energy_usage = "300kW", - } }, - - -- Salination plant 3 - { - type = "item", - name = "salination-plant-3", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/salination-plant.png", icon_size = 64, icon_mipmaps = 4 }, 3, angelsmods.refining.number_tint), - subgroup = "water-treatment-building", - order = "f[salination-plant3]", - place_result = "salination-plant-3", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["salination-plant"], { - name = "salination-plant-3", - minable = { result = "salination-plant-3" }, - module_specification = { module_slots = 3 }, - crafting_speed = 3, - energy_source = { emissions_per_minute = 0.05 * 60 }, - energy_usage = "300kW", - } }, - - -- Washing plant 3 - { - type = "item", - name = "washing-plant-3", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32 }, 3, angelsmods.refining.number_tint), - subgroup = "washing-building", - order = "b[washing-plant]-c[mk3]", - place_result = "washing-plant-3", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["washing-plant"], { - name = "washing-plant-3", - minable = { result = "washing-plant-3" }, - next_upgrade = "washing-plant-4", - module_specification = { module_slots = 3 }, - crafting_speed = 3, - energy_source = { emissions_per_minute = 0.05 * 60 }, - energy_usage = "200kW", - } }, - - -- Washing plant 4 - { - type = "item", - name = "washing-plant-4", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32 }, 4, angelsmods.refining.number_tint), - subgroup = "washing-building", - order = "b[washing-plant]-d[mk4]", - place_result = "washing-plant-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["washing-plant"], { - name = "washing-plant-4", - minable = { result = "washing-plant-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 4, - energy_source = { emissions_per_minute = 0.06 * 60 }, - energy_usage = "250kW", - } }, - - -- Ore crusher 4 - { - type = "item", - name = "ore-crusher-4", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-crusher.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint), - subgroup = "ore-crusher", - order = "e[ore-crusher-4]", - place_result = "ore-crusher-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["ore-crusher-3"], { - name = "ore-crusher-4", - minable = { result = "ore-crusher-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 4, - energy_source = { emissions_per_minute = 0.06 * 60 }, - energy_usage = "175kW", - } }, - - -- Ore floatation cell 4 - { - type = "item", - name = "ore-floatation-cell-4", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-floatation-cell.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint), - subgroup = "ore-floatation", - order = "d[ore-floatation-cell-4]", - place_result = "ore-floatation-cell-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["ore-floatation-cell-3"], { - name = "ore-floatation-cell-4", - minable = { result = "ore-floatation-cell-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 2, - energy_source = { emissions_per_minute = 0.05 * 60 }, - energy_usage = "350kW", - } }, - - -- Ore leaching plant 4 - { - type = "item", - name = "ore-leaching-plant-4", - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/ore-leaching-plant-4.png", icon_size = 32 }, 4, angelsmods.refining.number_tint), - subgroup = "ore-leaching", - order = "d[ore-leaching-plant-4]", - place_result = "ore-leaching-plant-4", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["ore-leaching-plant-3"], { - name = "ore-leaching-plant-4", - minable = { result = "ore-leaching-plant-4" }, - module_specification = { module_slots = 4 }, - crafting_speed = 2, - energy_source = { emissions_per_minute = 0.07 * 60 }, - energy_usage = "350kW", - } }, - - -- Ore refinery 3 - { - type = "item", - name = "ore-refinery-3", - icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-refinery.png", icon_size = 64, icon_mipmaps = 4 }, 3, angelsmods.refining.number_tint), - subgroup = "ore-refining", - order = "c[ore-refinery-3]", - place_result = "ore-refinery-3", - stack_size = 10, - }, - - util.merge { data.raw["assembling-machine"]["ore-refinery-2"], { - name = "ore-refinery-3", - minable = { result = "ore-refinery-3" }, - module_specification = { module_slots = 3 }, - crafting_speed = 2, - energy_source = { emissions_per_minute = 0.04 * 60 }, - energy_usage = "400kW", - } }, - - -- -- Crystallizer 3 - -- { - -- type = "item", - -- name = "crystallizer-3", - -- icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/crystallizer.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint), - -- subgroup = "refining-buildings", - -- order = "c[crystallizer]-c[mk3]", - -- place_result = "crystallizer-3", - -- stack_size = 10, - -- }, - - -- util.merge{data.raw["assembling-machine"]["crystallizer"], { - -- name = "crystallizer-3", - -- minable = {result = "crystallizer-3"}, - -- module_specification = {module_slots = 3}, - -- crafting_speed = 3, - -- energy_source = {emissions_per_minute = 0.05 * 60}, - -- energy_usage = "350kW", - -- }}, - - -- -- Filtration unit 3 - -- { - -- type = "item", - -- name = "filtration-unit-3", - -- icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/filtration-unit.png", icon_size = 32}, 3, angelsmods.refining.number_tint), - -- subgroup = "refining-buildings", - -- order = "b[filtration-unit]-c[mk3]", - -- place_result = "filtration-unit-3", - -- stack_size = 10, - -- }, - - -- util.merge{data.raw["assembling-machine"]["filtration-unit-2"], { - -- name = "filtration-unit-3", - -- minable = {result = "filtration-unit-3"}, - -- module_specification = {module_slots = 3}, - -- crafting_speed = 3, - -- energy_source = {emissions_per_minute = 0.05 * 60}, - -- energy_usage = "200kW", - -- }}, -}) - --- Item order fixes -data.raw.item["hydro-plant"].order = "a[hydro-plant]-a[mk1]" -data.raw.item["hydro-plant-2"].order = "a[hydro-plant]-b[mk2]" -data.raw.item["hydro-plant-3"].order = "a[hydro-plant]-c[mk3]" -data.raw.item["washing-plant"].order = "b[washing-plant]-a[mk1]" -data.raw.item["washing-plant-2"].order = "b[washing-plant]-b[mk2]" - --- Next upgrade fixes, due to util.merge usage -data.raw["assembling-machine"]["washing-plant-4"].next_upgrade = nil -data.raw["assembling-machine"]["hydro-plant-4"].next_upgrade = nil -data.raw["assembling-machine"]["salination-plant-3"].next_upgrade = nil - - --- Entity icon adjustments -data.raw["assembling-machine"]["hydro-plant-4"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/hydro-plant.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["salination-plant-3"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/salination-plant.png", icon_size = 64, icon_mipmaps = 4 }, 3, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["washing-plant-3"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32 }, 3, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["washing-plant-4"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/washing-plant-ico.png", icon_size = 32 }, 4, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["ore-crusher-4"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-crusher.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["ore-floatation-cell-4"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-floatation-cell.png", icon_size = 64, icon_mipmaps = 4 }, 4, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["ore-leaching-plant-4"].icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/ore-leaching-plant-4.png", icon_size = 32 }, 4, angelsmods.refining.number_tint) -data.raw["assembling-machine"]["ore-refinery-3"].icons = extangels.numeral_tier({ icon = "__angelsrefining__/graphics/icons/ore-refinery.png", icon_size = 64, icon_mipmaps = 4 }, 3, angelsmods.refining.number_tint) --- data.raw["assembling-machine"]["crystallizer-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/crystallizer.png", icon_size = 64, icon_mipmaps = 4}, 3, angelsmods.refining.number_tint) --- data.raw["assembling-machine"]["filtration-unit-3"].icons = extangels.numeral_tier({icon = "__angelsrefining__/graphics/icons/filtration-unit.png", icon_size = 32}, 3, angelsmods.refining.number_tint) \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/buildings/warehouses.lua b/extendedangels_0.5.9/prototypes/buildings/warehouses.lua deleted file mode 100644 index 098a061e..00000000 --- a/extendedangels_0.5.9/prototypes/buildings/warehouses.lua +++ /dev/null @@ -1,324 +0,0 @@ -if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end - --- Check whether we're using legacy inventories -local legacy = settings.startup["extangels-legacy-inventory-sizes"].value - --- Inventory size adjustments -local inventory_sizes = { - [1] = { - warehouse = legacy and 1728 or 768, - passive_provider = legacy and 1900 or 418, - active_provider = legacy and 1900 or 512, - storage = legacy and 1900 or 768, - buffer = legacy and 1900 or 512, - requester = legacy and 1900 or 418, - }, - [2] = { - warehouse = legacy and 3072 or 884, - passive_provider = legacy and 3378 or 480, - active_provider = legacy and 3378 or 588, - storage = legacy and 3378 or 884, - buffer = legacy and 3378 or 588, - requester = legacy and 3378 or 480, - }, - [3] = { - warehouse = legacy and 4416 or 1148, - passive_provider = legacy and 4856 or 624, - active_provider = legacy and 4856 or 766, - storage = legacy and 4856 or 1148, - buffer = legacy and 4856 or 766, - requester = legacy and 4856 or 624, - }, - [4] = { - warehouse = legacy and 6035 or 1664, - passive_provider = legacy and 6336 or 906, - active_provider = legacy and 6336 or 1110, - storage = legacy and 6336 or 1664, - buffer = legacy and 6336 or 1110, - requester = legacy and 6336 or 906, - } -} - --- Override the inventory size of the standard warehouses -if data.raw["container"]["angels-warehouse"] then - data.raw["container"]["angels-warehouse"].inventory_size = inventory_sizes[1].warehouse -end - -if data.raw["logistic-container"]["angels-warehouse-passive-provider"] then - data.raw["logistic-container"]["angels-warehouse-passive-provider"].inventory_size = inventory_sizes[1].passive_provider -end - -if data.raw["logistic-container"]["angels-warehouse-active-provider"] then - data.raw["logistic-container"]["angels-warehouse-active-provider"].inventory_size = inventory_sizes[1].active_provider -end - -if data.raw["logistic-container"]["angels-warehouse-storage"] then - data.raw["logistic-container"]["angels-warehouse-storage"].inventory_size = inventory_sizes[1].storage -end - -if data.raw["logistic-container"]["angels-warehouse-requester"] then - data.raw["logistic-container"]["angels-warehouse-requester"].inventory_size = inventory_sizes[1].requester -end - -if data.raw["logistic-container"]["angels-warehouse-buffer"] then - data.raw["logistic-container"]["angels-warehouse-buffer"].inventory_size = inventory_sizes[1].buffer -end - -local tint = angelsmods.addons.storage.number_tint - -local warehouse_buildings = { - -- STANDARD WAREHOUSES - -- Warehouse 2 - ["warehouse-mk2"] = { - source = "angels-warehouse", - type = "container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", - tier = 2, - order = "a[warehouse-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-mk3", - inventory_size = inventory_sizes[2].warehouse, - }, - -- Warehouse 3 - ["warehouse-mk3"] = { - source = "angels-warehouse", - type = "container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", - tier = 3, - order = "a[warehouse-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-mk4", - inventory_size = inventory_sizes[3].warehouse, - }, - -- Warehouse 4 - ["warehouse-mk4"] = { - source = "angels-warehouse", - type = "container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", - tier = 4, - order = "a[warehouse-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].warehouse, - }, - -- LOGISTIC WAREHOUSES - -- Warehouse passive provider 2 - ["warehouse-passive-provider-mk2"] = { - source = "angels-warehouse-passive-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", - tier = 2, - order = "b[warehouse-passive-provider-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-passive-provider-mk3", - inventory_size = inventory_sizes[2].passive_provider, - }, - -- Warehouse passive provider 3 - ["warehouse-passive-provider-mk3"] = { - source = "angels-warehouse-passive-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", - tier = 3, - order = "b[warehouse-passive-provider-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-passive-provider-mk4", - inventory_size = inventory_sizes[3].passive_provider, - }, - -- Warehouse passive provider 4 - ["warehouse-passive-provider-mk4"] = { - source = "angels-warehouse-passive-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", - tier = 4, - order = "b[warehouse-passive-provider-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].passive_provider, - }, - -- Warehouse active provider 2 - ["warehouse-active-provider-mk2"] = { - source = "angels-warehouse-active-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", - tier = 2, - order = "c[warehouse-active-provider-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-active-provider-mk3", - inventory_size = inventory_sizes[2].active_provider, - }, - -- Warehouse active provider 3 - ["warehouse-active-provider-mk3"] = { - source = "angels-warehouse-active-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", - tier = 3, - order = "c[warehouse-active-provider-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-active-provider-mk4", - inventory_size = inventory_sizes[3].active_provider, - }, - -- Warehouse active provider 4 - ["warehouse-active-provider-mk4"] = { - source = "angels-warehouse-active-provider", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", - tier = 4, - order = "c[warehouse-active-provider-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].active_provider, - }, - -- Warehouse storage 2 - ["warehouse-storage-mk2"] = { - source = "angels-warehouse-storage", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", - tier = 2, - order = "d[warehouse-storage-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-storage-mk3", - inventory_size = inventory_sizes[2].storage, - }, - -- Warehouse storage 3 - ["warehouse-storage-mk3"] = { - source = "angels-warehouse-storage", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", - tier = 3, - order = "d[warehouse-storage-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-storage-mk4", - inventory_size = inventory_sizes[3].storage, - }, - -- Warehouse storage 4 - ["warehouse-storage-mk4"] = { - source = "angels-warehouse-storage", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", - tier = 4, - order = "d[warehouse-storage-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].storage, - }, - -- Warehouse requester 2 - ["warehouse-requester-mk2"] = { - source = "angels-warehouse-requester", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", - tier = 2, - order = "f[warehouse-requester-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-requester-mk3", - inventory_size = inventory_sizes[2].requester, - }, - -- Warehouse requester 3 - ["warehouse-requester-mk3"] = { - source = "angels-warehouse-requester", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", - tier = 3, - order = "f[warehouse-requester-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-requester-mk4", - inventory_size = inventory_sizes[3].requester, - }, - -- Warehouse requester 4 - ["warehouse-requester-mk4"] = { - source = "angels-warehouse-requester", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", - tier = 4, - order = "f[warehouse-requester-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].requester, - }, - -- Warehouse buffer 2 - ["warehouse-buffer-mk2"] = { - source = "angels-warehouse-buffer", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", - tier = 2, - order = "e[warehouse-buffer-mk2]", - subgroup = "angels-warehouses-2", - next_upgrade = "warehouse-buffer-mk3", - inventory_size = inventory_sizes[2].buffer, - }, - -- Warehouse buffer 3 - ["warehouse-buffer-mk3"] = { - source = "angels-warehouse-buffer", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", - tier = 3, - order = "e[warehouse-buffer-mk3]", - subgroup = "angels-warehouses-3", - next_upgrade = "warehouse-buffer-mk4", - inventory_size = inventory_sizes[3].buffer, - }, - -- Warehouse buffer 4 - ["warehouse-buffer-mk4"] = { - source = "angels-warehouse-buffer", - type = "logistic-container", - icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", - tier = 4, - order = "e[warehouse-buffer-mk4]", - subgroup = "angels-warehouses-4", - inventory_size = inventory_sizes[4].buffer, - }, -} - -for name, params in pairs(warehouse_buildings) do - -- Check for source entity - local source_entity = data.raw[params.type][params.source] - if not source_entity then goto continue end - - -- Fetch the icon with numeral overlay - local icons = extangels.numeral_tier({ icon = params.icon, icon_size = params.icon_size or 32 }, params.tier, params.tint or tint) - - data:extend({ - -- Create the item - { - type = "item", - name = name, - icons = icons, - subgroup = params.subgroup or nil, - order = params.order, - place_result = name, - stack_size = params.stack_size or 10, - }, - - -- Create the entity - util.merge { source_entity, { - name = name, - minable = { result = name }, - next_upgrade = params.next_upgrade or nil, - inventory_size = params.inventory_size, - subgroup = params.subgroup, - } }, - }) - - -- Set entity icon - data.raw[params.type][name].icons = icons - - -- Continue - ::continue:: -end - --- ANGEL FIXES -local base_warehouses = { - ["angels-warehouse"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse.png", type = "container" }, - ["angels-warehouse-passive-provider"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-pprovider.png", type = "logistic-container" }, - ["angels-warehouse-active-provider"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-aprovider.png", type = "logistic-container" }, - ["angels-warehouse-storage"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-storage.png", type = "logistic-container" }, - ["angels-warehouse-requester"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-requester.png", type = "logistic-container" }, - ["angels-warehouse-buffer"] = { icon = "__angelsaddons-storage__/graphics/icons/warehouse-log-buffer.png", type = "logistic-container" }, -} - -for name, params in pairs(base_warehouses) do - local item = data.raw.item[name] - local entity = data.raw[params.type][name] - - if item then - item.icons = extangels.numeral_tier({ icon = params.icon, icon_size = 32 }, 1, tint) - end - - if entity then - entity.icons = extangels.numeral_tier({ icon = params.icon, icon_size = 32 }, 1, tint) - end -end diff --git a/extendedangels_0.5.9/prototypes/functions.lua b/extendedangels_0.5.9/prototypes/functions.lua deleted file mode 100644 index 67c647c8..00000000 --- a/extendedangels_0.5.9/prototypes/functions.lua +++ /dev/null @@ -1,12 +0,0 @@ --- Setup function host -extangels = {} -extangels.triggers = {} - --- Import migration module from flib -extangels.migration = require("__flib__.migration") - --- Append angel numerals and return an icons definition -function extangels.numeral_tier(icon_data, tier, tint) - local icons = angelsmods.functions.add_number_icon_layer({ icon_data }, tier, tint) - return icons -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/items/petrochem.lua b/extendedangels_0.5.9/prototypes/items/petrochem.lua deleted file mode 100644 index 3433fc2d..00000000 --- a/extendedangels_0.5.9/prototypes/items/petrochem.lua +++ /dev/null @@ -1,54 +0,0 @@ -data:extend({ - -- Sodium flouride - { - type = "item", - name = "solid-sodium-floride", - icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", - icon_size = 32, - subgroup = "petrochem-sodium", - order = "j", - stack_size = 200 - }, - - -- Argon - { - type = "fluid", - name = "gas-argon", - icon = "__extendedangels__/graphics/icons/gas-argon.png", - icon_size = 32, - default_temperature = 100, - heat_capacity = "0KJ", - base_color = { r = 0 / 255, g = 0 / 255, b = 0 / 255 }, - flow_color = { r = 30 / 255, g = 143 / 255, b = 216 / 255 }, - max_temperature = 100, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - }, -}) - - -if mods["Clowns-Processing"] then - data:extend({ - -- Disodium phosphate - { - type = "item", - name = "solid-disodium-phosphate", - icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", - icon_size = 32, - subgroup = "petrochem-sodium", - order = "k", - stack_size = 200 - }, - - -- Tetrasodium pyrophosphate - { - type = "item", - name = "solid-tetrasodium-pyrophosphate", - icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", - icon_size = 32, - subgroup = "petrochem-sodium", - order = "l", - stack_size = 200 - }, - }) -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/items/smelting.lua b/extendedangels_0.5.9/prototypes/items/smelting.lua deleted file mode 100644 index 38651f0a..00000000 --- a/extendedangels_0.5.9/prototypes/items/smelting.lua +++ /dev/null @@ -1,82 +0,0 @@ -data:extend({ - -- Molten copper tungsten - { - type = "fluid", - name = "liquid-molten-copper-tungsten", - icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", - icon_size = 32, - default_temperature = 100, - heat_capacity = "0KJ", - base_color = { r = 152 / 255, g = 74 / 255, b = 58 / 255 }, - flow_color = { r = 152 / 255, g = 74 / 255, b = 58 / 255 }, - max_temperature = 100, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - auto_barrel = false - }, - - -- Tungsten trioxide - { - type = "item", - name = "solid-tungsten-trioxide", - icon = "__angelssmelting__/graphics/icons/solid-tungsten-oxide.png", - icon_size = 32, - subgroup = "angels-tungsten", - order = "e", - stack_size = 200 - }, - - -- Tungsten hexachloride - { - type = "fluid", - name = "gas-tungsten-hexachloride", - icon = "__extendedangels__/graphics/icons/gas-tungsten-hexachloride.png", - icon_size = 32, - default_temperature = 100, - heat_capacity = "0KJ", - base_color = { r = 138 / 255, g = 20 / 255, b = 230 / 255 }, - flow_color = { r = 138 / 255, g = 20 / 255, b = 230 / 255 }, - max_temperature = 100, - pressure_to_speed_ratio = 0.4, - flow_to_energy_ratio = 0.59, - }, - - -- Sodium tungstate - { - type = "item", - name = "solid-sodium-tungstate", - icon = "__extendedangels__/graphics/icons/solid-sodium-tungstate.png", - icon_size = 32, - subgroup = "angels-tungsten", - order = "f", - stack_size = 200 - }, - - -- Tungsten carbide powder mixture - { - type = "item", - name = "powder-tungsten-carbide", - icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", - icon_size = 32, - subgroup = "angels-tungsten-carbide", - order = "a", - stack_size = 200 - }, - - -- Titanium concrete brick - { - type = "item", - name = "titanium-concrete-brick", - icon = "__extendedangels__/graphics/icons/brick-titanium.png", - icon_size = 32, - subgroup = "angels-stone", - order = "k", - stack_size = 1000, - place_as_tile = - { - result = "concrete", - condition_size = 4, - condition = { "water-tile" } - } - }, -}) diff --git a/extendedangels_0.5.9/prototypes/overrides/bioprocessing.lua b/extendedangels_0.5.9/prototypes/overrides/bioprocessing.lua deleted file mode 100644 index ebdf3f45..00000000 --- a/extendedangels_0.5.9/prototypes/overrides/bioprocessing.lua +++ /dev/null @@ -1,56 +0,0 @@ --- Sort bioprocessing buildings into more rows -local bioprocessing_buildings = { - -- Nauvis - ["bio-generator-temperate-1"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-temperate-2"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-temperate-3"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-swamp-1"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-swamp-2"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-swamp-3"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-desert-1"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-desert-2"] = "bio-processing-buildings-nauvis-b", - ["bio-generator-desert-3"] = "bio-processing-buildings-nauvis-b", - -- Vegetabilis - ["desert-farm"] = "bio-processing-buildings-vegetabilis-b", - ["desert-farm-2"] = "bio-processing-buildings-vegetabilis-b", - ["desert-farm-3"] = "bio-processing-buildings-vegetabilis-b", - ["swamp-farm"] = "bio-processing-buildings-vegetabilis-b", - ["swamp-farm-2"] = "bio-processing-buildings-vegetabilis-b", - ["swamp-farm-3"] = "bio-processing-buildings-vegetabilis-b", - ["seed-extractor"] = "bio-processing-buildings-vegetabilis-c", - ["seed-extractor-2"] = "bio-processing-buildings-vegetabilis-c", - ["seed-extractor-3"] = "bio-processing-buildings-vegetabilis-c", - ["composter"] = "bio-processing-buildings-vegetabilis-c", - ["composter-2"] = "bio-processing-buildings-vegetabilis-c", - ["composter-3"] = "bio-processing-buildings-vegetabilis-c", - ["bio-press"] = "bio-processing-buildings-vegetabilis-d", - ["bio-press-2"] = "bio-processing-buildings-vegetabilis-d", - ["bio-press-3"] = "bio-processing-buildings-vegetabilis-d", - ["nutrient-extractor"] = "bio-processing-buildings-vegetabilis-d", - ["nutrient-extractor-2"] = "bio-processing-buildings-vegetabilis-d", - ["nutrient-extractor-3"] = "bio-processing-buildings-vegetabilis-d", - ["bio-processor"] = "bio-processing-buildings-vegetabilis-e", - ["bio-processor-2"] = "bio-processing-buildings-vegetabilis-e", - ["bio-processor-3"] = "bio-processing-buildings-vegetabilis-e", - -- Animalis - ["bio-refugium-biter"] = "bio-processing-buildings-alien-b", - ["bio-refugium-biter-2"] = "bio-processing-buildings-alien-b", - ["bio-refugium-biter-3"] = "bio-processing-buildings-alien-b", - ["bio-refugium-puffer"] = "bio-processing-buildings-alien-b", - ["bio-refugium-puffer-2"] = "bio-processing-buildings-alien-b", - ["bio-refugium-puffer-3"] = "bio-processing-buildings-alien-b", -} - -if settings.startup["extangels-adjust-ordering"].value then - for name, subgroup in pairs(bioprocessing_buildings) do - local item = data.raw.item[name] - local entity = data.raw["assembling-machine"][name] - local recipe = data.raw.recipe[name] - - if item then item.subgroup = subgroup end - - -- Clear entity/recipe subgroups for proper inheritance from item - if entity then entity.subgroup = nil end - if recipe then recipe.subgroup = nil end - end -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/overrides/smelting.lua b/extendedangels_0.5.9/prototypes/overrides/smelting.lua deleted file mode 100644 index b50e94e9..00000000 --- a/extendedangels_0.5.9/prototypes/overrides/smelting.lua +++ /dev/null @@ -1,16 +0,0 @@ --- Add input fluid_box to Induction Furnace -for n = 1, 4 do - local name = (n > 1) and "induction-furnace-" .. n or "induction-furnace" - local entity = data.raw["assembling-machine"][name] - - if not entity then goto continue end - - table.insert(entity.fluid_boxes, { - production_type = "input", - pipe_covers = pipecoverspictures(), - base_level = -1, - pipe_connections = { { position = { -2, 3 } } }, - }) - - ::continue:: -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/overrides/technology.lua b/extendedangels_0.5.9/prototypes/overrides/technology.lua deleted file mode 100644 index 5b115e13..00000000 --- a/extendedangels_0.5.9/prototypes/overrides/technology.lua +++ /dev/null @@ -1,63 +0,0 @@ -local OV = angelsmods.functions.OV - -OV.add_prereq("tungsten-alloy-processing", "angels-copper-tungsten-smelting-1") -OV.disable_recipe({ "copper-tungsten-alloy" }) -OV.disable_recipe({ "tungsten-carbide" }) -OV.disable_recipe({ "tungsten-carbide-2" }) -OV.disable_recipe({ "pellet-tungsten-smelting" }) - -OV.add_unlock("angels-advanced-chemistry-4", "advanced-chemical-plant-3") -OV.add_unlock("angels-tungsten-smelting-3", "solid-tungsten-trioxide-smelting") -OV.add_unlock("angels-tungsten-smelting-3", "pellet-tungsten-smelting-2") -OV.add_unlock("angels-tungsten-smelting-3", "solid-sodium-tungstate-smelting") -OV.add_unlock("angels-tungsten-smelting-3", "casting-powder-tungsten-3") -OV.add_unlock("angels-zinc-smelting-2", "powder-zinc") -OV.add_unlock("angels-nitrogen-processing-1", "gas-argon") -OV.add_unlock("angels-nitrogen-processing-3", "angels-air-filter-3") -OV.add_unlock("angels-nitrogen-processing-4", "angels-air-filter-4") - -if mods["Clowns-Extended-Minerals"] then - OV.add_unlock("water-washing-3", "washing-plant-3") -end - -if mods["Clowns-Processing"] then - OV.add_unlock("phosphorus-processing-2", "solid-disodium-phosphate") - OV.add_unlock("phosphorus-processing-2", "solid-tetrasodium-pyrophosphate") - OV.add_unlock("water-treatment-5", "hydro-plant-4") - OV.add_unlock("water-treatment-5", "salination-plant-3") -end - -if angelsmods.bioprocessing then - OV.add_unlock("bio-arboretum-2", "bio-generator-temperate-2") - OV.add_unlock("bio-arboretum-2", "bio-generator-swamp-2") - OV.add_unlock("bio-arboretum-2", "bio-generator-desert-2") - OV.add_unlock("bio-arboretum-2", "bio-arboretum-2") - OV.add_unlock("bio-arboretum-3", "bio-generator-temperate-3") - OV.add_unlock("bio-arboretum-3", "bio-generator-swamp-3") - OV.add_unlock("bio-arboretum-3", "bio-generator-desert-3") - OV.add_unlock("bio-arboretum-3", "bio-arboretum-3") - OV.add_unlock("bio-refugium-butchery-2", "bio-butchery-2") - OV.add_unlock("bio-refugium-fish-2", "bio-refugium-fish-2") - OV.add_unlock("bio-refugium-puffer-2", "bio-refugium-puffer-2") - OV.add_unlock("bio-refugium-puffer-3", "bio-refugium-puffer-3") - OV.add_unlock("bio-refugium-biter-2", "bio-refugium-biter-2") - OV.add_unlock("bio-refugium-biter-3", "bio-refugium-biter-3") - OV.add_unlock("bio-farm-2", "crop-farm-2") - OV.add_unlock("bio-farm-2", "composter-2") - OV.add_unlock("bio-farm-2", "bio-processor-2") - OV.add_unlock("bio-pressing-2", "bio-press-2") - OV.add_unlock("bio-pressing-2", "bio-press-3") - OV.add_unlock("bio-desert-farming-2", "desert-farm-2") - OV.add_unlock("bio-swamp-farming-2", "swamp-farm-2") - OV.add_unlock("bio-temperate-farming-2", "temperate-farm-2") - OV.add_unlock("gardens-2", "seed-extractor-2") - OV.add_unlock("gardens-3", "seed-extractor-3") -end - -if mods["angelsaddons-storage"] then - if data.raw.tool["advanced-logistic-science-pack"] then - bobmods.lib.tech.replace_science_pack("logistic-warehouses-3", "production-science-pack", "advanced-logistic-science-pack") - bobmods.lib.tech.replace_science_pack("logistic-warehouses-4", "production-science-pack", "advanced-logistic-science-pack") - bobmods.lib.tech.replace_science_pack("warehouses-4", "production-science-pack", "advanced-logistic-science-pack") - end -end diff --git a/extendedangels_0.5.9/prototypes/overrides/warehouses.lua b/extendedangels_0.5.9/prototypes/overrides/warehouses.lua deleted file mode 100644 index a8f35a25..00000000 --- a/extendedangels_0.5.9/prototypes/overrides/warehouses.lua +++ /dev/null @@ -1,43 +0,0 @@ -if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end - --- Tech overhaul recipe adjustments -if angelsmods.industries and settings.startup["angels-enable-tech"].value == true then - bobmods.lib.recipe.replace_ingredient_in_all("brass-gear-wheel", "angels-roller-chain") - bobmods.lib.recipe.replace_ingredient_in_all("advanced-processing-unit", "circuit-yellow-loaded") -end - --- Group with Industries logistics tab -if angelsmods.industries then - data.raw["item-subgroup"]["angels-warehouses-2"].group = "angels-logistics" - data.raw["item-subgroup"]["angels-warehouses-3"].group = "angels-logistics" - data.raw["item-subgroup"]["angels-warehouses-4"].group = "angels-logistics" - data.raw["item-subgroup"]["angels-warehouses-2"].order = "ad[chests-warehouse]" - data.raw["item-subgroup"]["angels-warehouses-3"].order = "ad[chests-warehouse]" - data.raw["item-subgroup"]["angels-warehouses-4"].order = "ad[chests-warehouse]" -end - --- Icon scaling -if angelsmods.addons.storage.icon_scaling then - if (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then - data.raw["container"]["warehouse-mk2"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-passive-provider-mk2"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-active-provider-mk2"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-storage-mk2"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-requester-mk2"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-buffer-mk2"].scale_info_icons = true - - data.raw["container"]["warehouse-mk3"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-passive-provider-mk3"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-active-provider-mk3"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-storage-mk3"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-requester-mk3"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-buffer-mk3"].scale_info_icons = true - - data.raw["container"]["warehouse-mk4"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-passive-provider-mk4"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-active-provider-mk4"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-storage-mk4"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-requester-mk4"].scale_info_icons = true - data.raw["logistic-container"]["warehouse-buffer-mk4"].scale_info_icons = true - end -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/recipes/bioprocessing.lua b/extendedangels_0.5.9/prototypes/recipes/bioprocessing.lua deleted file mode 100644 index bc837359..00000000 --- a/extendedangels_0.5.9/prototypes/recipes/bioprocessing.lua +++ /dev/null @@ -1,1145 +0,0 @@ -if not angelsmods.bioprocessing then return end - --- Fetch marathon mode settings -local buildingmulti = angelsmods.marathon.buildingmulti -local buildingtime = angelsmods.marathon.buildingtime - -angelsmods.functions.RB.build({ - -- Algae farm 5 - { - type = "recipe", - name = "algae-farm-5", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "algae-farm-4", 1 }, - { "t5-plate", 11 }, - { "t5-circuit", 4 }, - { "t5-brick", 11 }, - { "t5-pipe", 18 }, - }, - result = "algae-farm-5", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "algae-farm-4", 1 }, - { "t5-plate", 11 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t5-brick", 11 * buildingmulti }, - { "t5-pipe", 18 * buildingmulti }, - }, - result = "algae-farm-5", - }, - }, - - -- Temperate tree seed generator 2 - { - type = "recipe", - name = "bio-generator-temperate-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-temperate-1", 1 }, - { "temperate-tree", 1 }, - { "t2-plate", 2 }, - { "t2-circuit", 2 }, - { "t2-brick", 1 }, - { "t2-pipe", 3 }, - }, - result = "bio-generator-temperate-2", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-temperate-1", 1 }, - { "temperate-tree", 1 * buildingmulti }, - { "t2-plate", 2 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 1 * buildingmulti }, - { "t2-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-temperate-2", - }, - }, - - -- Swamp tree seed generator 2 - { - type = "recipe", - name = "bio-generator-swamp-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-swamp-1", 1 }, - { "swamp-tree", 1 }, - { "t2-plate", 2 }, - { "t2-circuit", 2 }, - { "t2-brick", 1 }, - { "t2-pipe", 3 }, - }, - result = "bio-generator-swamp-2", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-swamp-1", 2 }, - { "swamp-tree", 1 * buildingmulti }, - { "t2-plate", 2 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 1 * buildingmulti }, - { "t2-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-swamp-2", - }, - }, - - -- Desert tree seed generator 2 - { - type = "recipe", - name = "bio-generator-desert-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-desert-1", 1 }, - { "desert-tree", 1 }, - { "t2-plate", 2 }, - { "t2-circuit", 2 }, - { "t2-brick", 1 }, - { "t2-pipe", 3 }, - }, - result = "bio-generator-desert-2", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-desert-1", 1 }, - { "desert-tree", 1 * buildingmulti }, - { "t2-plate", 2 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 1 * buildingmulti }, - { "t2-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-desert-2", - }, - }, - - -- Arboretum 2 - { - type = "recipe", - name = "bio-arboretum-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-arboretum-1", 1 }, - { "t2-plate", 6 }, - { "t2-circuit", 2 }, - { "t2-brick", 6 }, - { "t2-pipe", 8 }, - }, - result = "bio-arboretum-2", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-arboretum-1", 1 }, - { "t2-plate", 6 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 6 * buildingmulti }, - { "t2-pipe", 8 * buildingmulti }, - }, - result = "bio-arboretum-2", - }, - }, - - -- Temperate tree seed generator 3 - { - type = "recipe", - name = "bio-generator-temperate-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-temperate-2", 1 }, - { "temperate-tree", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 2 }, - { "t3-brick", 1 }, - { "t3-pipe", 3 }, - }, - result = "bio-generator-temperate-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-temperate-2", 1 }, - { "temperate-tree", 1 * buildingmulti }, - { "t3-plate", 2 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-temperate-3", - }, - }, - - -- Swamp tree seed generator 3 - { - type = "recipe", - name = "bio-generator-swamp-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-swamp-2", 1 }, - { "swamp-tree", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 2 }, - { "t3-brick", 1 }, - { "t3-pipe", 3 }, - }, - result = "bio-generator-swamp-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-swamp-2", 1 }, - { "swamp-tree", 1 * buildingmulti }, - { "t3-plate", 2 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-swamp-3", - }, - }, - - -- Desert tree seed generator 3 - { - type = "recipe", - name = "bio-generator-desert-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-generator-desert-2", 1 }, - { "desert-tree", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 2 }, - { "t3-brick", 1 }, - { "t3-pipe", 3 }, - }, - result = "bio-generator-desert-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-generator-desert-2", 1 }, - { "desert-tree", 1 * buildingmulti }, - { "t3-plate", 2 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-pipe", 3 * buildingmulti }, - }, - result = "bio-generator-desert-3", - }, - }, - - --Arboretum 3 - { - type = "recipe", - name = "bio-arboretum-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-arboretum-2", 1 }, - { "t3-plate", 6 }, - { "t3-circuit", 2 }, - { "t3-brick", 6 }, - { "t3-pipe", 8 }, - }, - result = "bio-arboretum-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-arboretum-2", 1 }, - { "t3-plate", 6 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 6 * buildingmulti }, - { "t3-pipe", 8 * buildingmulti }, - }, - result = "bio-arboretum-3", - }, - }, - - --Bio press 2 - { - type = "recipe", - name = "bio-press-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-press", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 2 }, - { "t3-brick", 1 }, - { "t3-pipe", 1 }, - { "t3-gears", 2 } - }, - result = "bio-press-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-press", 1 }, - { "t3-plate", 2 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-pipe", 1 * buildingmulti }, - { "t3-gears", 2 * buildingmulti } - }, - result = "bio-press-2" - } - }, - - -- Bio press 3 - { - type = "recipe", - name = "bio-press-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-press-2", 1 }, - { "t4-plate", 2 }, - { "t4-circuit", 2 }, - { "t4-brick", 1 }, - { "t4-pipe", 1 }, - { "t4-gears", 2 } - }, - result = "bio-press-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-press-2", 1 }, - { "t4-plate", 2 * buildingmulti }, - { "t4-circuit", 2 * buildingmulti }, - { "t4-brick", 1 * buildingmulti }, - { "t4-pipe", 1 * buildingmulti }, - { "t4-gears", 2 * buildingmulti } - }, - result = "bio-press-3" - } - }, - - -- Bio processor 2 - { - type = "recipe", - name = "bio-processor-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-processor", 1 }, - { "t2-plate", 5 }, - { "t2-circuit", 8 }, - { "t2-brick", 5 }, - { "t2-gears", 4 } - }, - result = "bio-processor-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-processor", 1 }, - { "t2-plate", 5 * buildingmulti }, - { "t2-circuit", 8 * buildingmulti }, - { "t2-brick", 5 * buildingmulti }, - { "t2-gears", 4 * buildingmulti } - }, - result = "bio-processor-2" - } - }, - - -- Bio processor 3 - { - type = "recipe", - name = "bio-processor-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-processor-2", 1 }, - { "t3-plate", 5 }, - { "t3-circuit", 8 }, - { "t3-brick", 5 }, - { "t3-gears", 4 } - }, - result = "bio-processor-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-processor-2", 1 }, - { "t3-plate", 5 * buildingmulti }, - { "t3-circuit", 8 * buildingmulti }, - { "t3-brick", 5 * buildingmulti }, - { "t3-gears", 4 * buildingmulti } - }, - result = "bio-processor-3" - } - }, - - -- Butchery 2 - { - type = "recipe", - name = "bio-butchery-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-butchery", 1 }, - { "t3-plate", 3 }, - { "t3-circuit", 1 }, - { "t3-brick", 2 }, - { "t3-gears", 2 } - }, - result = "bio-butchery-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-butchery", 1 }, - { "t3-plate", 3 * buildingmulti }, - { "t3-circuit", 1 * buildingmulti }, - { "t3-brick", 2 * buildingmulti }, - { "t3-gears", 2 * buildingmulti } - }, - result = "bio-butchery-2" - } - }, - - -- Butcher 3 - { - type = "recipe", - name = "bio-butchery-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-butchery-2", 1 }, - { "t4-plate", 3 }, - { "t4-circuit", 1 }, - { "t4-brick", 2 }, - { "t4-gears", 2 } - }, - result = "bio-butchery-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-butchery-2", 1 }, - { "t4-plate", 3 * buildingmulti }, - { "t4-circuit", 1 * buildingmulti }, - { "t4-brick", 2 * buildingmulti }, - { "t4-gears", 2 * buildingmulti } - }, - result = "bio-butchery-3" - } - }, - - -- Composter 2 - { - type = "recipe", - name = "composter-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "composter", 1 }, - { "t2-plate", 2 }, - { "t2-circuit", 2 }, - { "t2-brick", 2 }, - { "t2-gears", 2 } - }, - result = "composter-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "composter", 1 }, - { "t2-plate", 2 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 2 * buildingmulti }, - { "t2-gears", 2 * buildingmulti } - }, - result = "composter-2" - } - }, - - -- Composter 3 - { - type = "recipe", - name = "composter-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "composter-2", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 2 }, - { "t3-brick", 2 }, - { "t3-gears", 2 } - }, - result = "composter-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "composter-2", 1 }, - { "t3-plate", 2 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 2 * buildingmulti }, - { "t3-gears", 2 * buildingmulti } - }, - result = "composter-3" - } - }, - - -- Basic farm 2 - { - type = "recipe", - name = "crop-farm-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "crop-farm", 1 }, - { "t2-plate", 8 }, - { "t2-circuit", 2 }, - { "t2-brick", 9 }, - { "t2-pipe", 3 } - }, - result = "crop-farm-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "crop-farm", 1 }, - { "t2-plate", 8 * buildingmulti }, - { "t2-circuit", 2 * buildingmulti }, - { "t2-brick", 9 * buildingmulti }, - { "t2-pipe", 3 * buildingmulti } - }, - result = "crop-farm-2" - } - }, - - -- Basic farm 3 - { - type = "recipe", - name = "crop-farm-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "crop-farm-2", 1 }, - { "t3-plate", 8 }, - { "t3-circuit", 2 }, - { "t3-brick", 9 }, - { "t3-pipe", 3 } - }, - result = "crop-farm-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "crop-farm-2", 1 }, - { "t3-plate", 8 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 9 * buildingmulti }, - { "t3-pipe", 3 * buildingmulti } - }, - result = "crop-farm-3" - } - }, - - -- Temperate-environment farm 2 - { - type = "recipe", - name = "temperate-farm-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "temperate-farm", 1 }, - { "temperate-upgrade", 1 }, - { "t4-plate", 8 }, - { "t4-circuit", 2 }, - { "t4-brick", 9 }, - { "t4-pipe", 3 } - }, - result = "temperate-farm-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "temperate-farm", 1 }, - { "temperate-upgrade", 1 }, - { "t4-plate", 8 * buildingmulti }, - { "t4-circuit", 2 * buildingmulti }, - { "t4-brick", 9 * buildingmulti }, - { "t4-pipe", 3 * buildingmulti } - }, - result = "temperate-farm-2" - } - }, - - -- Temperate-environment farm 3 - { - type = "recipe", - name = "temperate-farm-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "temperate-farm-2", 1 }, - { "temperate-upgrade", 1 }, - { "t5-plate", 8 }, - { "t5-circuit", 2 }, - { "t5-brick", 9 }, - { "t5-pipe", 3 } - }, - result = "temperate-farm-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "temperate-farm-2", 1 }, - { "temperate-upgrade", 1 }, - { "t5-plate", 8 * buildingmulti }, - { "t5-circuit", 2 * buildingmulti }, - { "t5-brick", 9 * buildingmulti }, - { "t5-pipe", 3 * buildingmulti } - }, - result = "temperate-farm-3" - } - }, - - -- Desert-environment farm 2 - { - type = "recipe", - name = "desert-farm-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "desert-farm", 1 }, - { "desert-upgrade", 1 }, - { "t4-plate", 8 }, - { "t4-circuit", 2 }, - { "t4-brick", 9 }, - { "t4-pipe", 3 } - }, - result = "desert-farm-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "desert-farm", 1 }, - { "desert-upgrade", 1 }, - { "t4-plate", 8 * buildingmulti }, - { "t4-circuit", 2 * buildingmulti }, - { "t4-brick", 9 * buildingmulti }, - { "t4-pipe", 3 * buildingmulti } - }, - result = "desert-farm-2" - } - }, - - -- Desert-environment farm 3 - { - type = "recipe", - name = "desert-farm-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "desert-farm-2", 1 }, - { "desert-upgrade", 1 }, - { "t5-plate", 8 }, - { "t5-circuit", 2 }, - { "t5-brick", 9 }, - { "t5-pipe", 3 } - }, - result = "desert-farm-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "desert-farm-2", 1 }, - { "desert-upgrade", 1 }, - { "t5-plate", 8 * buildingmulti }, - { "t5-circuit", 2 * buildingmulti }, - { "t5-brick", 9 * buildingmulti }, - { "t5-pipe", 3 * buildingmulti } - }, - result = "desert-farm-3" - } - }, - - -- Swamp-environment farm 2 - { - type = "recipe", - name = "swamp-farm-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "swamp-farm", 1 }, - { "swamp-upgrade", 1 }, - { "t4-plate", 8 }, - { "t4-circuit", 2 }, - { "t4-brick", 9 }, - { "t4-pipe", 3 } - }, - result = "swamp-farm-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "swamp-farm", 1 }, - { "swamp-upgrade", 1 }, - { "t4-plate", 8 * buildingmulti }, - { "t4-circuit", 2 * buildingmulti }, - { "t4-brick", 9 * buildingmulti }, - { "t4-pipe", 3 * buildingmulti } - }, - result = "swamp-farm-2" - } - }, - - -- Swamp-environment farm 3 - { - type = "recipe", - name = "swamp-farm-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "swamp-farm-2", 1 }, - { "swamp-upgrade", 1 }, - { "t5-plate", 8 }, - { "t5-circuit", 2 }, - { "t5-brick", 9 }, - { "t5-pipe", 3 } - }, - result = "swamp-farm-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "swamp-farm-2", 1 }, - { "swamp-upgrade", 1 }, - { "t5-plate", 8 * buildingmulti }, - { "t5-circuit", 2 * buildingmulti }, - { "t5-brick", 9 * buildingmulti }, - { "t5-pipe", 3 * buildingmulti } - }, - result = "swamp-farm-3" - } - }, - - -- Hatchery 2 - { - type = "recipe", - name = "bio-hatchery-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-hatchery", 1 }, - { "t4-plate", 2 }, - { "t4-circuit", 4 }, - { "t4-brick", 2 } - }, - result = "bio-hatchery-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-hatchery", 1 }, - { "t4-plate", 2 * buildingmulti }, - { "t4-circuit", 4 * buildingmulti }, - { "t4-brick", 2 * buildingmulti } - }, - result = "bio-hatchery-2" - } - }, - - -- Hatchery 3 - { - type = "recipe", - name = "bio-hatchery-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-hatchery-2", 1 }, - { "t5-plate", 2 }, - { "t5-circuit", 4 }, - { "t5-brick", 2 } - }, - result = "bio-hatchery-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-hatchery-2", 1 }, - { "t5-plate", 2 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t5-brick", 2 * buildingmulti } - }, - result = "bio-hatchery-3" - } - }, - - -- Nutrient extractor 2 - { - type = "recipe", - name = "nutrient-extractor-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "nutrient-extractor", 1 }, - { "t3-plate", 1 }, - { "t3-circuit", 2 }, - { "t3-brick", 1 }, - { "t3-pipe", 2 }, - { "t3-gears", 2 } - }, - result = "nutrient-extractor-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "nutrient-extractor", 1 }, - { "t3-plate", 1 * buildingmulti }, - { "t3-circuit", 2 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-pipe", 2 * buildingmulti }, - { "t3-gears", 2 * buildingmulti } - }, - result = "nutrient-extractor-2" - } - }, - - -- Nutrient extractor 3 - { - type = "recipe", - name = "nutrient-extractor-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "nutrient-extractor-2", 1 }, - { "t4-plate", 1 }, - { "t4-circuit", 2 }, - { "t4-brick", 1 }, - { "t4-pipe", 2 }, - { "t4-gears", 2 } - }, - result = "nutrient-extractor-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "nutrient-extractor-2", 1 }, - { "t4-plate", 1 * buildingmulti }, - { "t4-circuit", 2 * buildingmulti }, - { "t4-brick", 1 * buildingmulti }, - { "t4-pipe", 2 * buildingmulti }, - { "t4-gears", 2 * buildingmulti } - }, - result = "nutrient-extractor-3" - } - }, - - -- Fish tank 2 - { - type = "recipe", - name = "bio-refugium-fish-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-fish", 1 }, - { "t3-plate", 2 }, - { "t3-circuit", 5 }, - { "t3-brick", 4 }, - { "t3-pipe", 25 } - }, - result = "bio-refugium-fish-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-fish", 1 }, - { "t3-plate", 10 * buildingmulti }, - { "t3-circuit", 5 * buildingmulti }, - { "t3-brick", 4 * buildingmulti }, - { "t3-pipe", 25 * buildingmulti } - }, - result = "bio-refugium-fish-2" - } - }, - - -- Fish tank 3 - { - type = "recipe", - name = "bio-refugium-fish-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-fish-2", 1 }, - { "t4-plate", 2 }, - { "t4-circuit", 5 }, - { "t4-brick", 4 }, - { "t4-pipe", 25 } - }, - result = "bio-refugium-fish-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-fish", 1 }, - { "t4-plate", 10 * buildingmulti }, - { "t4-circuit", 5 * buildingmulti }, - { "t4-brick", 4 * buildingmulti }, - { "t4-pipe", 25 * buildingmulti } - }, - result = "bio-refugium-fish-3" - } - }, - - -- Puffer refugium 2 - { - type = "recipe", - name = "bio-refugium-puffer-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-puffer", 1 }, - { "t4-plate", 4 }, - { "t4-circuit", 4 }, - { "t4-brick", 3 }, - { "t4-pipe", 11 } - }, - result = "bio-refugium-puffer-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-puffer", 1 }, - { "t4-plate", 4 * buildingmulti }, - { "t4-circuit", 4 * buildingmulti }, - { "t4-brick", 3 * buildingmulti }, - { "t4-pipe", 11 * buildingmulti } - }, - result = "bio-refugium-puffer-2" - } - }, - - -- Puffer refugium 3 - { - type = "recipe", - name = "bio-refugium-puffer-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-puffer-2", 1 }, - { "t5-plate", 4 }, - { "t5-circuit", 4 }, - { "t5-brick", 3 }, - { "t5-pipe", 11 } - }, - result = "bio-refugium-puffer-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-puffer-2", 1 }, - { "t5-plate", 4 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t5-brick", 3 * buildingmulti }, - { "t5-pipe", 11 * buildingmulti } - }, - result = "bio-refugium-puffer-3" - } - }, - - -- Biter refugium 2 - { - type = "recipe", - name = "bio-refugium-biter-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-biter", 1 }, - { "t5-plate", 10 }, - { "t5-circuit", 4 }, - { "t5-brick", 19 }, - { "t5-pipe", 11 } - }, - result = "bio-refugium-biter-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-biter", 1 }, - { "t5-plate", 10 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t5-brick", 19 * buildingmulti }, - { "t5-pipe", 11 * buildingmulti } - }, - result = "bio-refugium-biter-2" - } - }, - - -- Biter refugium 3 - { - type = "recipe", - name = "bio-refugium-biter-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "bio-refugium-biter-2", 1 }, - { "t6-plate", 10 }, - { "t5-circuit", 4 }, - { "t6-brick", 19 }, - { "t6-pipe", 11 } - }, - result = "bio-refugium-biter-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "bio-refugium-biter-2", 1 }, - { "t6-plate", 10 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t6-brick", 19 * buildingmulti }, - { "t6-pipe", 11 * buildingmulti } - }, - result = "bio-refugium-biter-3" - } - }, - - -- Seed extractor 2 - { - type = "recipe", - name = "seed-extractor-2", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "seed-extractor", 1 }, - { "t2-plate", 1 }, - { "t2-circuit", 4 }, - { "t2-brick", 1 }, - { "t2-gears", 2 } - }, - result = "seed-extractor-2" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "seed-extractor", 1 }, - { "t2-plate", 1 * buildingmulti }, - { "t2-circuit", 4 * buildingmulti }, - { "t2-brick", 1 * buildingmulti }, - { "t2-gears", 2 * buildingmulti } - }, - result = "seed-extractor-2" - } - }, - - -- Seed extractor 3 - { - type = "recipe", - name = "seed-extractor-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "seed-extractor-2", 1 }, - { "t3-plate", 1 }, - { "t3-circuit", 4 }, - { "t3-brick", 1 }, - { "t3-gears", 2 } - }, - result = "seed-extractor-3" - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "seed-extractor-2", 1 }, - { "t3-plate", 1 * buildingmulti }, - { "t3-circuit", 4 * buildingmulti }, - { "t3-brick", 1 * buildingmulti }, - { "t3-gears", 2 * buildingmulti } - }, - result = "seed-extractor-3" - } - }, -}) \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/recipes/petrochem.lua b/extendedangels_0.5.9/prototypes/recipes/petrochem.lua deleted file mode 100644 index 67ef4a2c..00000000 --- a/extendedangels_0.5.9/prototypes/recipes/petrochem.lua +++ /dev/null @@ -1,227 +0,0 @@ --- Fetch marathon mode settings -local buildingmulti = angelsmods.marathon.buildingmulti -local buildingtime = angelsmods.marathon.buildingtime - -angelsmods.functions.RB.build({ - -- Advanced gas refinery 4 - { - type = "recipe", - name = "gas-refinery-4", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "gas-refinery-3", 1 }, - { "t6-plate", 10 }, - { "t5-circuit", 5 }, - { "t6-brick", 10 }, - { "t6-pipe", 19 }, - }, - result = "gas-refinery-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "gas-refinery-3", 1 }, - { "t6-plate", 10 * buildingmulti }, - { "t5-circuit", 5 * buildingmulti }, - { "t6-brick", 10 * buildingmulti }, - { "t6-pipe", 19 * buildingmulti }, - }, - result = "gas-refinery-4", - }, - }, - - -- Advanced chemical plant 3 - { - type = "recipe", - name = "advanced-chemical-plant-3", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "advanced-chemical-plant-2", 1 }, - { "t5-plate", 2 }, - { "t5-circuit", 4 }, - { "t6-brick", 4 }, - { "t5-pipe", 12 }, - }, - result = "advanced-chemical-plant-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "advanced-chemical-plant-2", 1 }, - { "t5-plate", 2 * buildingmulti }, - { "t5-circuit", 4 * buildingmulti }, - { "t6-brick", 4 * buildingmulti }, - { "t5-pipe", 12 * buildingmulti }, - }, - result = "advanced-chemical-plant-3", - }, - }, - - -- -- Air filter 3 - -- { - -- type = "recipe", - -- name = "angels-air-filter-3", - -- normal = { - -- energy_required = 5, - -- enabled = false, - -- ingredients = { - -- {"angels-air-filter-2", 1}, - -- {"t3-plate", 4}, - -- {"t3-circuit", 5}, - -- {"t3-brick", 5}, - -- {"t3-pipe", 8}, - -- }, - -- result= "angels-air-filter-3", - -- }, - -- expensive = { - -- energy_required = 5 * buildingtime, - -- enabled = false, - -- ingredients = { - -- {"angels-air-filter-2", 1}, - -- {"t3-plate", 4 * buildingmulti}, - -- {"t3-circuit", 5 * buildingmulti}, - -- {"t3-brick", 5 * buildingmulti}, - -- {"t3-pipe", 8 * buildingmulti}, - -- }, - -- result= "angels-air-filter-3", - -- }, - -- }, - - -- Air filter 4 - { - type = "recipe", - name = "angels-air-filter-4", - normal = { - energy_required = 5, - enabled = false, - ingredients = { - { "angels-air-filter-3", 1 }, - { "t4-plate", 4 }, - { "t4-circuit", 5 }, - { "t4-brick", 5 }, - { "t4-pipe", 8 }, - }, - result = "angels-air-filter-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = false, - ingredients = { - { "angels-air-filter-3", 1 }, - { "t4-plate", 4 * buildingmulti }, - { "t4-circuit", 5 * buildingmulti }, - { "t4-brick", 5 * buildingmulti }, - { "t4-pipe", 8 * buildingmulti }, - }, - result = "angels-air-filter-4", - }, - }, -}) - -data:extend({ - -- Sodium flouride 1 - { - type = "recipe", - name = "solid-sodium-floride-1", - category = "chemistry", - subgroup = "petrochem-sodium", - energy_required = 2, - enabled = "false", - ingredients = { - { type = "item", name = "solid-sodium-hydroxide", amount = 5 }, - { type = "fluid", name = "liquid-hydrofluoric-acid", amount = 50 }, - }, - results = { - { type = "item", name = "solid-sodium-floride", amount = 5 }, - { type = "fluid", name = "water-purified", amount = 50 }, - }, - icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", - icon_size = 32, - order = "k", - }, - - -- Sodium flouride 2 - { - type = "recipe", - name = "solid-sodium-floride-2", - category = "chemistry", - subgroup = "petrochem-sodium", - energy_required = 2, - enabled = "false", - ingredients = { - { type = "item", name = "solid-sodium-carbonate", amount = 5 }, - { type = "fluid", name = "liquid-hexafluorosilicic-acid", amount = 25 }, - }, - results = { - { type = "item", name = "solid-sodium-floride", amount = 5 }, - { type = "fluid", name = "water-purified", amount = 25 }, - }, - icon = "__extendedangels__/graphics/icons/solid-sodium-floride.png", - icon_size = 32, - order = "l", - }, - - -- Argon - { - type = "recipe", - name = "gas-argon", - category = "chemistry", - subgroup = "petrochem-argon", - energy_required = 2, - enabled = "false", - ingredients = { - { type = "fluid", name = "gas-compressed-air", amount = 100 } - }, - results = { - { type = "fluid", name = "gas-argon", amount = 50 }, - }, - icon = "__extendedangels__/graphics/icons/gas-argon.png", - icon_size = 32, - order = "a", - }, -}) - - -if mods["Clowns-Processing"] then - data:extend({ - -- Disodium phosphate - { - type = "recipe", - name = "solid-disodium-phosphate", - category = "chemistry", - subgroup = "petrochem-sodium", - energy_required = 2, - enabled = "false", - ingredients = { - { type = "item", name = "solid-sodium-carbonate", amount = 5 }, - { type = "fluid", name = "liquid-phosphoric-acid", amount = 50 }, - }, - results = { - { type = "item", name = "solid-disodium-phosphate", amount = 5 }, - }, - icon = "__Clowns-Processing__/graphics/icons/solid-white-phosphorus.png", - icon_size = 32, - order = "m", - }, - - -- Tetrasodium pyrophosphate - { - type = "recipe", - name = "solid-tetrasodium-pyrophosphate", - category = "smelting", - subgroup = "petrochem-sodium", - energy_required = 3.5, - ingredients = { - { "solid-disodium-phosphate", 1 } - }, - result = "solid-tetrasodium-pyrophosphate", - order = "n", - }, - }) -end diff --git a/extendedangels_0.5.9/prototypes/recipes/refining.lua b/extendedangels_0.5.9/prototypes/recipes/refining.lua deleted file mode 100644 index ebfcec74..00000000 --- a/extendedangels_0.5.9/prototypes/recipes/refining.lua +++ /dev/null @@ -1,308 +0,0 @@ --- Fetch marathon mode settings -local buildingmulti = angelsmods.marathon.buildingmulti -local buildingtime = angelsmods.marathon.buildingtime - -angelsmods.functions.RB.build({ - -- Hydro plant 4 - { - type = "recipe", - name = "hydro-plant-4", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "hydro-plant-3", 1 }, - { "t5-plate", 4 }, - { "t5-circuit", 12 }, - { "t5-pipe", 16 }, - { "t6-brick", 12 }, - }, - result = "hydro-plant-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "hydro-plant-3", 1 }, - { "t5-plate", 4 * buildingmulti }, - { "t5-circuit", 12 * buildingmulti }, - { "t5-pipe", 16 * buildingmulti }, - { "t6-brick", 12 * buildingmulti }, - }, - result = "hydro-plant-4", - }, - }, - - -- Salination plant 3 - { - type = "recipe", - name = "salination-plant-3", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "salination-plant-2", 1 }, - { "t5-plate", 14 }, - { "t5-circuit", 12 }, - { "t5-pipe", 8 }, - { "t6-brick", 15 }, - }, - result = "salination-plant-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "salination-plant-2", 1 }, - { "t5-plate", 14 * buildingmulti }, - { "t5-circuit", 12 * buildingmulti }, - { "t5-pipe", 8 * buildingmulti }, - { "t6-brick", 15 * buildingmulti }, - }, - result = "salination-plant-3", - }, - }, - - -- Washing plant 3 - { - type = "recipe", - name = "washing-plant-3", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "washing-plant-2", 1 }, - { "t3-plate", 4 }, - { "t3-circuit", 4 }, - { "t3-pipe", 9 }, - { "t3-brick", 5 }, - }, - result = "washing-plant-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "washing-plant-2", 1 }, - { "t3-plate", 4 * buildingmulti }, - { "t3-circuit", 4 * buildingmulti }, - { "t3-pipe", 9 * buildingmulti }, - { "t3-brick", 5 * buildingmulti }, - }, - result = "washing-plant-3", - }, - }, - - -- Washing plant 4 - { - type = "recipe", - name = "washing-plant-4", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "washing-plant-3", 1 }, - { "t4-plate", 4 }, - { "t4-circuit", 4 }, - { "t4-pipe", 9 }, - { "t4-brick", 5 }, - }, - result = "washing-plant-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "washing-plant-3", 1 }, - { "t4-plate", 4 * buildingmulti }, - { "t4-circuit", 4 * buildingmulti }, - { "t4-pipe", 9 * buildingmulti }, - { "t4-brick", 5 * buildingmulti }, - }, - result = "washing-plant-4", - }, - }, - - -- Ore crusher 4 - { - type = "recipe", - name = "ore-crusher-4", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "ore-crusher-3", 1 }, - { "t4-plate", 3 }, - { "t4-brick", 3 }, - { "t4-gears", 2 }, - }, - result = "ore-crusher-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "ore-crusher-3", 1 }, - { "t4-plate", 3 * buildingmulti }, - { "t4-brick", 3 * buildingmulti }, - { "t4-gears", 2 * buildingmulti }, - }, - result = "ore-crusher-4", - }, - subgroup = "ore-crusher", - }, - - -- Ore floatation cell 4 - { - type = "recipe", - name = "ore-floatation-cell-4", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "ore-floatation-cell-3", 1 }, - { "t5-plate", 4 }, - { "t5-circuit", 8 }, - { "t5-pipe", 4 }, - { "t6-brick", 8 }, - }, - result = "ore-floatation-cell-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "ore-floatation-cell-3", 1 }, - { "t5-plate", 4 * buildingmulti }, - { "t5-circuit", 8 * buildingmulti }, - { "t5-pipe", 4 * buildingmulti }, - { "t6-brick", 8 * buildingmulti }, - }, - result = "ore-floatation-cell-4", - }, - subgroup = "ore-floatation", - }, - - -- Ore leaching plant 4 - { - type = "recipe", - name = "ore-leaching-plant-4", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "ore-leaching-plant-3", 1 }, - { "t6-plate", 4 }, - { "t5-circuit", 8 }, - { "t6-pipe", 4 }, - { "t6-brick", 8 }, - }, - result = "ore-leaching-plant-4", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "ore-leaching-plant-3", 1 }, - { "t6-plate", 4 * buildingmulti }, - { "t5-circuit", 8 * buildingmulti }, - { "t6-pipe", 4 * buildingmulti }, - { "t6-brick", 8 * buildingmulti }, - }, - result = "ore-leaching-plant-4", - }, - subgroup = "ore-leaching", - }, - - - -- Ore refinery 3 - { - type = "recipe", - name = "ore-refinery-3", - normal = { - energy_required = 5, - enabled = "false", - ingredients = { - { "ore-refinery-2", 1 }, - { "t6-plate", 12 }, - { "t5-circuit", 12 }, - { "t6-brick", 20 }, - }, - result = "ore-refinery-3", - }, - expensive = { - energy_required = 5 * buildingtime, - enabled = "false", - ingredients = { - { "ore-refinery-2", 1 }, - { "t6-plate", 12 * buildingmulti }, - { "t5-circuit", 12 * buildingmulti }, - { "t6-brick", 20 * buildingmulti }, - }, - result = "ore-refinery-3", - }, - subgroup = "ore-refining", - }, - - -- -- Crystallizer 3 - -- { - -- type = "recipe", - -- name = "crystallizer-3", - -- normal = { - -- energy_required = 5, - -- enabled = "false", - -- ingredients = { - -- {"crystallizer-2", 1}, - -- {"t5-plate", 10}, - -- {"t5-circuit", 5}, - -- {"t5-pipe", 5}, - -- {"t6-brick", 10}, - -- }, - -- result = "crystallizer-3", - -- }, - -- expensive = { - -- energy_required = 5 * buildingtime, - -- enabled = "false", - -- ingredients = { - -- {"crystallizer-2", 1}, - -- {"t5-plate", 10 * buildingmulti}, - -- {"t5-circuit", 5 * buildingmulti}, - -- {"t5-pipe", 5 * buildingmulti}, - -- {"t6-brick", 10 * buildingmulti}, - -- }, - -- result = "crystallizer-3", - -- }, - -- }, - - -- -- Filtration unit 3 - -- { - -- type = "recipe", - -- name = "filtration-unit-3", - -- normal = { - -- energy_required = 5, - -- enabled = "false", - -- ingredients = { - -- {"filtration-unit-2", 1}, - -- {"t5-plate", 2}, - -- {"t5-circuit", 5}, - -- {"t5-pipe", 8}, - -- {"t6-brick", 5}, - -- }, - -- result = "filtration-unit-3", - -- }, - -- expensive = { - -- energy_required = 5 * buildingtime, - -- enabled = "false", - -- ingredients = { - -- {"filtration-unit-2", 1}, - -- {"t5-plate", 2 * buildingmulti}, - -- {"t5-circuit", 5 * buildingmulti}, - -- {"t5-pipe", 8 * buildingmulti}, - -- {"t6-brick", 5 * buildingmulti}, - -- }, - -- result = "filtration-unit-3", - -- }, - -- }, -}) - --- Order fixes diff --git a/extendedangels_0.5.9/prototypes/recipes/smelting.lua b/extendedangels_0.5.9/prototypes/recipes/smelting.lua deleted file mode 100644 index 6e62a684..00000000 --- a/extendedangels_0.5.9/prototypes/recipes/smelting.lua +++ /dev/null @@ -1,286 +0,0 @@ --- Fetch marathon mode settings -local intermediatemulti = angelsmods.marathon.intermediatemulti - -data:extend({ - -- Tungsten trioxide - { - type = "recipe", - name = "solid-tungsten-trioxide-smelting", - category = "chemical-smelting", - subgroup = "angels-tungsten", - energy_required = 4, - enabled = "false", - ingredients = { - { type = "item", name = "pellet-tungsten", amount = 4 }, - { type = "fluid", name = "gas-oxygen", amount = 60 }, - }, - results = { - { type = "item", name = "solid-tungsten-trioxide", amount = 12 }, - }, - order = "i", - }, - - -- Sodium tungstate - { - type = "recipe", - name = "pellet-tungsten-smelting-2", - category = "chemical-smelting", - subgroup = "angels-tungsten", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "item", name = "solid-salt", amount = 50 }, - { type = "item", name = "solid-tungsten-trioxide", amount = 12 }, - { type = "item", name = "solid-sodium-floride", amount = 6 }, - }, - results = { - { type = "item", name = "solid-sodium-tungstate", amount = 12 }, - }, - order = "j", - }, - - -- Tunsgten powder - { - type = "recipe", - name = "solid-sodium-tungstate-smelting", - category = "blast-smelting", - subgroup = "angels-tungsten", - energy_required = 4, - enabled = "false", - ingredients = { - { type = "item", name = "solid-sodium-tungstate", amount = 16 }, - { type = "item", name = "pellet-manganese", amount = 4 }, - }, - results = { - { type = "item", name = "powder-tungsten", amount = 30 }, - }, - icons = extangels.numeral_tier({ icon = data.raw.item["powder-tungsten"].icon, icon_size = data.raw.item["powder-tungsten"].icon_size, icon_mipmaps = data.raw.item["powder-tungsten"].icon_mipmaps }, 3, angelsmods.smelting.number_tint), - order = "h[powder-tungsten]-c" - }, - - -- Zinc powder - { - type = "recipe", - name = "powder-zinc", - category = "advanced-crafting", - subgroup = "angels-zinc-casting", - energy_required = 0.5, - enabled = "false", - ingredients = { - { type = "item", name = "ingot-zinc", amount = 1 } - }, - results = { - { type = "item", name = "powder-zinc", amount = 1 }, - }, - order = "b", - }, - - -- Tungsten powder mixture - { - type = "recipe", - name = "casting-powder-tungsten-3", - category = "powder-mixing", - subgroup = "angels-tungsten-casting", - energy_required = 4, - enabled = "false", - ingredients = { - { type = "item", name = "powder-tungsten", amount = 12 }, - { type = "item", name = "powder-zinc", amount = 12 }, - }, - results = { - { type = "item", name = "casting-powder-tungsten", amount = 24 }, - }, - icons = extangels.numeral_tier({ icon = data.raw.item["casting-powder-tungsten"].icon, icon_size = data.raw.item["casting-powder-tungsten"].icon_size, icon_mipmaps = data.raw.item["casting-powder-tungsten"].icon_mipmaps }, 3, angelsmods.smelting.number_tint), - order = "i[casting-powder-tungsten]-c", - }, - - -- Molten copper tungsten 1 - { - type = "recipe", - name = "copper-tungsten-smelting-1", - category = "induction-smelting", - subgroup = "angels-alloys-casting", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "item", name = "ingot-copper", amount = 16 }, - { type = "item", name = "powder-tungsten", amount = 12 }, - { type = "fluid", name = "gas-hydrogen", amount = 60 }, - }, - results = { - { type = "fluid", name = "liquid-molten-copper-tungsten", amount = 120 }, - }, - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", icon_size = 32 }, 1, angelsmods.smelting.number_tint), - order = "g[copper-tungsten]-a[liquid-molten-copper-tungsten]", - }, - - -- Molten copper tungsten 2 - { - type = "recipe", - name = "copper-tungsten-smelting-2", - category = "induction-smelting-2", - subgroup = "angels-alloys-casting", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "item", name = "ingot-copper", amount = 8 }, - { type = "item", name = "ingot-silver", amount = 8 }, - { type = "item", name = "powder-tungsten", amount = 12 }, - { type = "fluid", name = "gas-hydrogen", amount = 60 }, - }, - results = { - { type = "fluid", name = "liquid-molten-copper-tungsten", amount = 120 }, - }, - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/molten-copper-tungsten.png", icon_size = 32 }, 2, angelsmods.smelting.number_tint), - order = "g[copper-tungsten]-a[liquid-molten-copper-tungsten]", - }, - - -- Copper tungsten - { - type = "recipe", - name = "molten-copper-tungsten-smelting-1", - category = "casting", - subgroup = "angels-alloys-casting", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "fluid", name = "liquid-molten-copper-tungsten", amount = 40 }, - }, - results = { - { type = "item", name = "copper-tungsten-alloy", amount = 4 }, - }, - order = "g[copper-tungsten]-b[copper-tungsten-alloy]", - }, - - -- Tungsten hexachloride - { - type = "recipe", - name = "solid-tungsten-oxide-smelting-2", - category = "liquifying", - subgroup = "angels-tungsten-carbide", - energy_required = 6, - enabled = "false", - ingredients = { - { type = "item", name = "solid-tungsten-trioxide", amount = 12 }, - { type = "fluid", name = "gas-hydrogen-chloride", amount = 30 }, - }, - results = { - { type = "fluid", name = "gas-tungsten-hexachloride", amount = 60 }, - }, - }, - - -- Tungsten carbide powder mixture 1 - { - type = "recipe", - name = "tungsten-carbide-smelting-1", - category = "chemical-smelting", - subgroup = "angels-tungsten-carbide", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "item", name = "solid-tungsten-oxide", amount = 12 }, - { type = "fluid", name = "gas-hydrogen", amount = 60 }, - { type = "fluid", name = "gas-argon", amount = 30 }, - }, - results = { - { type = "item", name = "powder-tungsten-carbide", amount = 12 }, - }, - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32 }, 1, angelsmods.smelting.number_tint), - order = "aa", - }, - - -- Tungsten carbide powder mixture 2 - { - type = "recipe", - name = "tungsten-carbide-smelting-2", - category = "chemical-smelting", - subgroup = "angels-tungsten-carbide", - energy_required = 16, - enabled = "false", - ingredients = { - { type = "fluid", name = "gas-tungsten-hexafluoride", amount = 80 }, - { type = "fluid", name = "gas-hydrogen", amount = 60 }, - { type = "item", name = "solid-carbon", amount = 5 }, - }, - results = { - { type = "item", name = "powder-tungsten-carbide", amount = 24 }, - { type = "fluid", name = "liquid-hydrofluoric-acid", amount = 60 }, - { type = "fluid", name = "water-purified", amount = 20 }, - }, - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32 }, 2, angelsmods.smelting.number_tint), - order = "ab", - }, - - -- Tungsten carbide powder mixture 3 - { - type = "recipe", - name = "tungsten-carbide-smelting-3", - category = "chemical-smelting", - subgroup = "angels-tungsten-carbide", - energy_required = 8, - enabled = "false", - ingredients = { - { type = "fluid", name = "gas-tungsten-hexachloride", amount = 60 }, - { type = "fluid", name = "gas-hydrogen", amount = 50 }, - { type = "item", name = "solid-carbon", amount = 5 }, - }, - results = { - { type = "item", name = "powder-tungsten-carbide", amount = 12 }, - { type = "fluid", name = "gas-hydrogen-chloride", amount = 40 }, - }, - icons = extangels.numeral_tier({ icon = "__extendedangels__/graphics/icons/powder-tungsten-carbide.png", icon_size = 32 }, 3, angelsmods.smelting.number_tint), - order = "ac", - }, - - -- Tungsten carbide - { - type = "recipe", - name = "angels-plate-tungsten-carbide", - category = "sintering", - subgroup = "angels-tungsten-carbide-casting", - normal = { - enabled = "false", - energy_required = 4, - ingredients = { - { type = "item", name = "powder-tungsten-carbide", amount = 12 }, - }, - results = { - { type = "item", name = "tungsten-carbide", amount = 12 }, - }, - }, - expensive = { - enabled = "false", - energy_required = 4, - ingredients = { - { type = "item", name = "powder-tungsten-carbide", amount = 15 * intermediatemulti }, - }, - results = { - { type = "item", name = "tungsten-carbide", amount = 12 }, - }, - }, - order = "ad", - }, - - -- Titanium concrete brick - { - type = "recipe", - name = "angels-titanium-concrete-brick", - category = "crafting-with-fluid", - subgroup = "angels-stone-casting", - energy_required = 4, - enabled = "false", - ingredients = { - { type = "item", name = "stone-brick", amount = 4 }, - { type = "item", name = "angels-plate-titanium", amount = 4 }, - { type = "fluid", name = "liquid-concrete", amount = 40 }, - }, - results = { - { type = "item", name = "titanium-concrete-brick", amount = 4 }, - }, - order = "k[titanium-concrete-brick]", - }, -}) - -if mods["Clowns-Processing"] then - bobmods.lib.recipe.add_ingredient("pellet-tungsten-smelting-2", { "solid-tetrasodium-pyrophosphate", 1 }) -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/recipes/warehouses.lua b/extendedangels_0.5.9/prototypes/recipes/warehouses.lua deleted file mode 100644 index 875e886d..00000000 --- a/extendedangels_0.5.9/prototypes/recipes/warehouses.lua +++ /dev/null @@ -1,119 +0,0 @@ -if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end - -local logistic_warehouses = { - "warehouse-passive-provider", - "warehouse-active-provider", - "warehouse-buffer", - "warehouse-storage", - "warehouse-requester", -} - -local prerequisite_map = { - ["angels-warehouse-passive-provider"] = "angels-warehouse", - ["angels-warehouse-active-provider"] = "angels-warehouse", - ["angels-warehouse-buffer"] = "angels-warehouse", - ["angels-warehouse-storage"] = "angels-warehouse", - ["angels-warehouse-requester"] = "angels-warehouse", - ["warehouse-mk2"] = "angels-warehouse", - ["warehouse-passive-provider-mk2"] = "angels-warehouse-passive-provider", - ["warehouse-active-provider-mk2"] = "angels-warehouse-active-provider", - ["warehouse-buffer-mk2"] = "angels-warehouse-buffer", - ["warehouse-storage-mk2"] = "angels-warehouse-storage", - ["warehouse-requester-mk2"] = "angels-warehouse-requester", - ["warehouse-mk3"] = "warehouse-mk2", - ["warehouse-passive-provider-mk3"] = "warehouse-passive-provider-mk2", - ["warehouse-active-provider-mk3"] = "warehouse-active-provider-mk2", - ["warehouse-buffer-mk3"] = "warehouse-buffer-mk2", - ["warehouse-storage-mk3"] = "warehouse-storage-mk2", - ["warehouse-requester-mk3"] = "warehouse-requester-mk2", - ["warehouse-mk4"] = "warehouse-mk3", - ["warehouse-passive-provider-mk4"] = "warehouse-passive-provider-mk3", - ["warehouse-active-provider-mk4"] = "warehouse-active-provider-mk3", - ["warehouse-buffer-mk4"] = "warehouse-buffer-mk3", - ["warehouse-storage-mk4"] = "warehouse-storage-mk3", - ["warehouse-requester-mk4"] = "warehouse-requester-mk3", -} - -local standard_ingredients = { - [1] = { - { type = "item", name = "iron-plate", amount = 500 }, - { type = "item", name = "stone-brick", amount = 100 }, - }, - [2] = { - { type = "item", name = "invar-alloy", amount = 400 }, - { type = "item", name = "brass-gear-wheel", amount = 150 }, - { type = "item", name = "steel-bearing", amount = 100 }, - }, - [3] = { - { type = "item", name = "titanium-plate", amount = 800 }, - { type = "item", name = "ceramic-bearing", amount = 200 }, - }, - [4] = { - { type = "item", name = "tungsten-plate", amount = 1000 }, - { type = "item", name = "nitinol-bearing", amount = 250 }, - } -} - -local logistic_ingredients = { - [1] = { - { type = "item", name = "steel-plate", amount = 250 }, - { type = "item", name = "electronic-circuit", amount = 100 }, - { type = "item", name = "advanced-circuit", amount = 40 }, - }, - [2] = { - { type = "item", name = "invar-alloy", amount = 400 }, - { type = "item", name = "brass-gear-wheel", amount = 150 }, - { type = "item", name = "steel-bearing", amount = 100 }, - }, - [3] = { - { type = "item", name = "titanium-plate", amount = 800 }, - { type = "item", name = "ceramic-bearing", amount = 200 }, - { type = "item", name = "processing-unit", amount = 200 }, - }, - [4] = { - { type = "item", name = "tungsten-plate", amount = 1000 }, - { type = "item", name = "nitinol-bearing", amount = 250 }, - { type = "item", name = "advanced-processing-unit", amount = 200 }, - } -} - --- Revise Angel's warehouses -data.raw.recipe["angels-warehouse"].energy_required = 20 -data.raw.recipe["angels-warehouse"].ingredients = util.copy(standard_ingredients[1]) - -for _, warehouse in pairs(logistic_warehouses) do - data.raw.recipe["angels-" .. warehouse].energy_required = 20 - data.raw.recipe["angels-" .. warehouse].ingredients = util.copy(logistic_ingredients[1]) -end - --- Iterate through warehouse types and make all the requisite recipes -for n = 2, 4 do - -- Setup standard warehouse subtype - data:extend({ - util.merge { data.raw.recipe["angels-warehouse"], { - name = "warehouse-mk" .. n, - result = "warehouse-mk" .. n, - subgroup = "angels-warehouses-" .. n, - } } - }) - - data.raw.recipe["warehouse-mk" .. n].ingredients = util.copy(standard_ingredients[n]) - - -- Setup logistics warehouse subtypes - for _, prefix in pairs(logistic_warehouses) do - data:extend({ - util.merge { data.raw.recipe["angels-" .. prefix], { - name = prefix .. "-mk" .. n, - result = prefix .. "-mk" .. n, - subgroup = "angels-warehouses-" .. n, - } } - }) - - data.raw.recipe[prefix .. "-mk" .. n].ingredients = util.copy(logistic_ingredients[n]) - end -end - --- Add all the prerequisites -for name, prerequisite in pairs(prerequisite_map) do - bobmods.lib.recipe.add_ingredient(name, prerequisite) -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/technology/bioprocessing.lua b/extendedangels_0.5.9/prototypes/technology/bioprocessing.lua deleted file mode 100644 index 946fadf0..00000000 --- a/extendedangels_0.5.9/prototypes/technology/bioprocessing.lua +++ /dev/null @@ -1,221 +0,0 @@ -if not angelsmods.bioprocessing then return end - -data:extend({ - -- Advanced angel's bioprocessing - { - type = "technology", - name = "angels-advanced-bio-processing", - icon = "__angelsbioprocessing__/graphics/technology/algae-farm-tech.png", - icon_size = 128, - prerequisites = { - "bio-processing-blue", - }, - effects = { - { - type = "unlock-recipe", - recipe = "algae-farm-5" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 30 - }, - }, - - -- Bio farm 3 - { - type = "technology", - name = "bio-farm-3", - icon = "__angelsbioprocessing__/graphics/technology/base-farm-tech.png", - icon_size = 128, - prerequisites = { - "bio-farm-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "crop-farm-3" - }, - { - type = "unlock-recipe", - recipe = "composter-3" - }, - { - type = "unlock-recipe", - recipe = "bio-processor-3" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - }, - time = 30 - }, - }, - - -- Bio refugium butchery 3 - { - type = "technology", - name = "bio-refugium-butchery-3", - icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-butchery-tech.png", - icon_size = 160, - order = "c-a", - prerequisites = { - "bio-refugium-butchery-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "bio-butchery-3" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - }, - time = 30 - }, - }, - - -- Bio farm advanced upgrade - { - type = "technology", - name = "bio-farm-advanced-upgrade", - icon = "__angelsbioprocessing__/graphics/technology/base-farm-tech.png", - icon_size = 128, - order = "c-a", - prerequisites = { - "bio-temperate-farming-2", - "bio-desert-farming-2", - "bio-swamp-farming-2" - }, - effects = { - { - type = "unlock-recipe", - recipe = "temperate-farm-3" - }, - { - type = "unlock-recipe", - recipe = "desert-farm-3" - }, - { - type = "unlock-recipe", - recipe = "swamp-farm-3" - }, - }, - unit = { - count = 256, - ingredients = { - { "automation-science-pack", 4 }, - { "logistic-science-pack", 4 }, - { "chemical-science-pack", 4 }, - { "production-science-pack", 4 }, - { "token-bio", 1 } - }, - time = 30 - } - }, - - -- Bio refugium hatchery 2 - { - type = "technology", - name = "bio-refugium-hatchery-2", - icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-puffer-hatchery-tech.png", - icon_size = 160, - order = "c-a", - prerequisites = { - "bio-refugium-hatchery" - }, - effects = { - { - type = "unlock-recipe", - recipe = "bio-hatchery-2" - }, - { - type = "unlock-recipe", - recipe = "bio-hatchery-3" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "token-bio", 1 } - }, - time = 30 - }, - }, - - -- Bio nutrient paste 2 - { - type = "technology", - name = "bio-nutrient-paste-2", - icon = "__angelsbioprocessing__/graphics/technology/nutrient-extractor-tech.png", - icon_size = 128, - order = "c-a", - prerequisites = { - "bio-nutrient-paste" - }, - effects = { - { - type = "unlock-recipe", - recipe = "nutrient-extractor-2" - }, - { - type = "unlock-recipe", - recipe = "nutrient-extractor-3" - } - }, - unit = { - count = 80, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 } - }, - time = 30 - } - }, - - -- Bio refugium fish 3 - { - type = "technology", - name = "bio-refugium-fish-3", - icon = "__angelsbioprocessing__/graphics/technology/bio-refugium-fish-tech.png", - icon_size = 128, - order = "c-a", - prerequisites = { - "bio-refugium-fish-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "bio-refugium-fish-3" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 } - }, - time = 30 - }, - }, -}) \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/technology/petrochem.lua b/extendedangels_0.5.9/prototypes/technology/petrochem.lua deleted file mode 100644 index 535632ac..00000000 --- a/extendedangels_0.5.9/prototypes/technology/petrochem.lua +++ /dev/null @@ -1,64 +0,0 @@ -data:extend({ - -- Angels advanced gas processing 2 - { - type = "technology", - name = "angels-advanced-gas-processing-2", - icon = "__angelspetrochem__/graphics/technology/gas-refinery-tech.png", - icon_size = 128, - prerequisites = { - "angels-advanced-gas-processing", - "angels-advanced-chemistry-4" - }, - effects = { - { - type = "unlock-recipe", - recipe = "gas-refinery-4" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, - - -- Sodium processing 2 - { - type = "technology", - name = "sodium-processing-2", - icon = "__angelspetrochem__/graphics/technology/sodium-tech.png", - icon_size = 128, - prerequisites = { - "sodium-processing", - }, - effects = { - { - type = "unlock-recipe", - recipe = "solid-sodium-floride-1" - }, - { - type = "unlock-recipe", - recipe = "solid-sodium-floride-2" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, -}) \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/technology/refining.lua b/extendedangels_0.5.9/prototypes/technology/refining.lua deleted file mode 100644 index 9f3cfa10..00000000 --- a/extendedangels_0.5.9/prototypes/technology/refining.lua +++ /dev/null @@ -1,162 +0,0 @@ -if not mods["Clowns-Extended-Minerals"] then - local prerequisite = data.raw.technology["water-washing-2"] - if prerequisite then - data:extend({ - -- Water washing 3 - { - type = "technology", - name = "water-washing-3", - icons = util.copy(prerequisite.icons), - icon = util.copy(prerequisite.icon), - icon_size = util.copy(prerequisite.icon_size), - icon_mipmaps = util.copy(prerequisite.icon_mipmaps), - prerequisites = { - "water-washing-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "washing-plant-3" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, - }) - end -end - -if not mods["Clowns-Processing"] then - local prerequisite = data.raw.technology["water-treatment-4"] - if prerequisite then - data:extend({ - { - type = "technology", - name = "water-treatment-5", - icons = util.copy(prerequisite.icons), - icon = util.copy(prerequisite.icon), - icon_size = util.copy(prerequisite.icon_size), - icon_mipmaps = util.copy(prerequisite.icon_mipmaps), - prerequisites = { - "water-treatment-4", - }, - effects = { - { - type = "unlock-recipe", - recipe = "hydro-plant-4" - }, - { - type = "unlock-recipe", - recipe = "salination-plant-3" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, - }) - end -end - - -local prerequisite = data.raw.technology["water-washing-3"] -if prerequisite then - data:extend({ - -- Water washing 4 - { - type = "technology", - name = "water-washing-4", - icons = util.copy(prerequisite.icons), - icon = util.copy(prerequisite.icon), - icon_size = util.copy(prerequisite.icon_size), - icon_mipmaps = util.copy(prerequisite.icon_mipmaps), - prerequisites = { - "water-washing-3", - }, - effects = { - { - type = "unlock-recipe", - recipe = "washing-plant-4" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, - }) -end - -local prerequisite = data.raw.technology["advanced-ore-refining-4"] -if prerequisite then - data:extend({ - -- Advanced ore refining 5 - { - type = "technology", - name = "advanced-ore-refining-5", - icons = util.copy(prerequisite.icons), - icon = util.copy(prerequisite.icon), - icon_size = util.copy(prerequisite.icon_size), - icon_mipmaps = util.copy(prerequisite.icon_mipmaps), - prerequisites = { - "advanced-ore-refining-4", - }, - effects = { - { - type = "unlock-recipe", - recipe = "ore-crusher-4" - }, - { - type = "unlock-recipe", - recipe = "ore-floatation-cell-4" - }, - { - type = "unlock-recipe", - recipe = "ore-leaching-plant-4" - }, - { - type = "unlock-recipe", - recipe = "ore-refinery-3" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 15 - }, - order = "c-a" - }, - }) -end \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/technology/smelting.lua b/extendedangels_0.5.9/prototypes/technology/smelting.lua deleted file mode 100644 index 3ef895ad..00000000 --- a/extendedangels_0.5.9/prototypes/technology/smelting.lua +++ /dev/null @@ -1,221 +0,0 @@ -data:extend({ - -- Angels copper tungsten smelting 1 - { - type = "technology", - name = "angels-copper-tungsten-smelting-1", - icon = "__extendedangels__/graphics/technology/smelting-copper-tungsten.png", - icon_size = 128, - prerequisites = { - "angels-copper-smelting-1", - "angels-tungsten-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "copper-tungsten-smelting-1" - }, - { - type = "unlock-recipe", - recipe = "molten-copper-tungsten-smelting-1" - }, - }, - unit = { - count = 75, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, - - -- Angels copper tungsten smelting 2 - { - type = "technology", - name = "angels-copper-tungsten-smelting-2", - icon = "__extendedangels__/graphics/technology/smelting-copper-tungsten.png", - icon_size = 128, - prerequisites = { - "angels-copper-tungsten-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "copper-tungsten-smelting-2" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, - - -- Angels stone smelting 4 - { - type = "technology", - name = "angels-stone-smelting-4", - icon = "__angelssmelting__/graphics/technology/cement-tech.png", - icon_size = 128, - upgrade = true, - prerequisites = { - "angels-stone-smelting-3", - }, - effects = { - { - type = "unlock-recipe", - recipe = "angels-titanium-concrete-brick" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, - - -- -- Slag processing 3 - -- { - -- type = "technology", - -- name = "slag-processing-3", - -- icon = "__angelsrefining__/graphics/technology/slag-processing.png", - -- icon_size = 64, - -- prerequisites = { - -- "slag-processing-2", - -- }, - -- effects = { - -- { - -- type = "unlock-recipe", - -- recipe = "filtration-unit-3" - -- }, - -- { - -- type = "unlock-recipe", - -- recipe = "crystallizer-3" - -- }, - -- }, - -- unit = { - -- count = 100, - -- ingredients = { - -- {"automation-science-pack", 1}, - -- {"logistic-science-pack", 1}, - -- {"chemical-science-pack", 1}, - -- {"production-science-pack", 1}, - -- {"utility-science-pack", 1}, - -- }, - -- time = 30 - -- }, - -- order = "a-a-a1" - -- }, - - -- Angels tungsten carbide smelting 1 - { - type = "technology", - name = "angels-tungsten-carbide-smelting-1", - icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", - icon_size = 128, - prerequisites = { - "angels-tungsten-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "tungsten-carbide-smelting-1" - }, - { - type = "unlock-recipe", - recipe = "angels-plate-tungsten-carbide" - }, - }, - unit = { - count = 75, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, - - -- Angels tungsten carbide smelting 2 - { - type = "technology", - name = "angels-tungsten-carbide-smelting-2", - icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", - icon_size = 128, - prerequisites = { - "angels-tungsten-smelting-2", - "angels-tungsten-carbide-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "tungsten-carbide-smelting-2" - }, - }, - unit = { - count = 100, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, - - -- Angels tungsten carbide smelting 3 - { - type = "technology", - name = "angels-tungsten-carbide-smelting-3", - icon = "__extendedangels__/graphics/technology/smelting-tungsten-carbide.png", - icon_size = 128, - prerequisites = { - "angels-tungsten-smelting-3", - "angels-tungsten-carbide-smelting-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "tungsten-carbide-smelting-3" - }, - { - type = "unlock-recipe", - recipe = "solid-tungsten-oxide-smelting-2" - }, - }, - unit = { - count = 150, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - }, -}) \ No newline at end of file diff --git a/extendedangels_0.5.9/prototypes/technology/warehouses.lua b/extendedangels_0.5.9/prototypes/technology/warehouses.lua deleted file mode 100644 index 30b46bb9..00000000 --- a/extendedangels_0.5.9/prototypes/technology/warehouses.lua +++ /dev/null @@ -1,233 +0,0 @@ -if not (mods["angelsaddons-storage"] and angelsmods.addons.storage.warehouses) then return end - -data:extend({ - -- Warehouses 2 - { - type = "technology", - name = "warehouses-2", - icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", - icon_size = 128, - prerequisites = { - "angels-warehouses", - "zinc-processing", - "angels-invar-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-mk2" - }, - }, - unit = { - count = 125, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - }, - time = 20 - }, - order = "c-a" - }, - - -- Warehouses 3 - { - type = "technology", - name = "warehouses-3", - icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", - icon_size = 128, - prerequisites = { - "warehouses-2", - "angels-titanium-smelting-1", - "ceramics", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-mk3" - }, - }, - unit = { - count = 200, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - }, - time = 20 - }, - order = "c-a" - }, - - -- Warehouses 4 - { - type = "technology", - name = "warehouses-4", - icon = "__angelsaddons-storage__/graphics/technology/warehouses.png", - icon_size = 128, - prerequisites = { - "warehouses-3", - "angels-tungsten-smelting-1", - "nitinol-processing", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-mk4" - }, - }, - unit = { - count = 200, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 20 - }, - order = "c-a" - }, - - -- Logisitic warehouses 2 - { - type = "technology", - name = "logistic-warehouses-2", - icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", - icon_size = 128, - prerequisites = { - "angels-logistic-warehouses", - "warehouses-2", - "zinc-processing", - "angels-invar-smelting-1", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-passive-provider-mk2" - }, - { - type = "unlock-recipe", - recipe = "warehouse-active-provider-mk2" - }, - { - type = "unlock-recipe", - recipe = "warehouse-storage-mk2" - }, - { - type = "unlock-recipe", - recipe = "warehouse-requester-mk2" - }, - { - type = "unlock-recipe", - recipe = "warehouse-buffer-mk2" - }, - }, - unit = { - count = 125, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - }, - time = 20 - }, - order = "c-a" - }, - - -- Logistic warehouses 3 - { - type = "technology", - name = "logistic-warehouses-3", - icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", - icon_size = 128, - prerequisites = { - "logistic-warehouses-2", - "warehouses-3", - "angels-titanium-smelting-1", - "ceramics", - "advanced-electronics-2", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-passive-provider-mk3" - }, - { - type = "unlock-recipe", - recipe = "warehouse-active-provider-mk3" - }, - { - type = "unlock-recipe", - recipe = "warehouse-storage-mk3" - }, - { - type = "unlock-recipe", - recipe = "warehouse-requester-mk3" - }, - { - type = "unlock-recipe", - recipe = "warehouse-buffer-mk3" - }, - }, - unit = { - count = 200, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - }, - time = 25 - }, - order = "c-a" - }, - - -- Logistic warehouses 4 - { - type = "technology", - name = "logistic-warehouses-4", - icon = "__angelsaddons-storage__/graphics/technology/warehouses-logistics.png", - icon_size = 128, - prerequisites = { - "logistic-warehouses-3", - "warehouses-4", - "angels-tungsten-smelting-1", - "nitinol-processing", - "advanced-electronics-3", - }, - effects = { - { - type = "unlock-recipe", - recipe = "warehouse-passive-provider-mk4" - }, - { - type = "unlock-recipe", - recipe = "warehouse-active-provider-mk4" - }, - { - type = "unlock-recipe", - recipe = "warehouse-storage-mk4" - }, - { - type = "unlock-recipe", - recipe = "warehouse-requester-mk4" - }, - { - type = "unlock-recipe", - recipe = "warehouse-buffer-mk4" - }, - }, - unit = { - count = 300, - ingredients = { - { "automation-science-pack", 1 }, - { "logistic-science-pack", 1 }, - { "chemical-science-pack", 1 }, - { "production-science-pack", 1 }, - { "utility-science-pack", 1 }, - }, - time = 30 - }, - order = "c-a" - } -}) \ No newline at end of file diff --git a/factorissimo-2-notnotmelon_1.2.3/LICENSE.md b/factorissimo-2-notnotmelon/LICENSE.md similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/LICENSE.md rename to factorissimo-2-notnotmelon/LICENSE.md diff --git a/factorissimo-2-notnotmelon_1.2.3/changelog.txt b/factorissimo-2-notnotmelon/changelog.txt similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/changelog.txt rename to factorissimo-2-notnotmelon/changelog.txt diff --git a/factorissimo-2-notnotmelon_1.2.3/compat/efficientsmelting.lua b/factorissimo-2-notnotmelon/compat/efficientsmelting.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/compat/efficientsmelting.lua rename to factorissimo-2-notnotmelon/compat/efficientsmelting.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/compat/factoriomaps.lua b/factorissimo-2-notnotmelon/compat/factoriomaps.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/compat/factoriomaps.lua rename to factorissimo-2-notnotmelon/compat/factoriomaps.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/compat/powergridcomb.lua b/factorissimo-2-notnotmelon/compat/powergridcomb.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/compat/powergridcomb.lua rename to factorissimo-2-notnotmelon/compat/powergridcomb.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/control.lua b/factorissimo-2-notnotmelon/control.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/control.lua rename to factorissimo-2-notnotmelon/control.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/data-final-fixes.lua b/factorissimo-2-notnotmelon/data-final-fixes.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/data-final-fixes.lua rename to factorissimo-2-notnotmelon/data-final-fixes.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/data-updates.lua b/factorissimo-2-notnotmelon/data-updates.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/data-updates.lua rename to factorissimo-2-notnotmelon/data-updates.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/data.lua b/factorissimo-2-notnotmelon/data.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/data.lua rename to factorissimo-2-notnotmelon/data.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/component/hr-pipe-connection-south.png b/factorissimo-2-notnotmelon/graphics/component/hr-pipe-connection-south.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/component/hr-pipe-connection-south.png rename to factorissimo-2-notnotmelon/graphics/component/hr-pipe-connection-south.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/component/pipe-connection-south.png b/factorissimo-2-notnotmelon/graphics/component/pipe-connection-south.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/component/pipe-connection-south.png rename to factorissimo-2-notnotmelon/graphics/component/pipe-connection-south.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1-alt.png b/factorissimo-2-notnotmelon/graphics/factory/factory-1-alt.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1-alt.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-1-alt.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1-shadow.png b/factorissimo-2-notnotmelon/graphics/factory/factory-1-shadow.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1-shadow.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-1-shadow.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1.png b/factorissimo-2-notnotmelon/graphics/factory/factory-1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-1.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2-alt.png b/factorissimo-2-notnotmelon/graphics/factory/factory-2-alt.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2-alt.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-2-alt.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2-shadow.png b/factorissimo-2-notnotmelon/graphics/factory/factory-2-shadow.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2-shadow.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-2-shadow.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2.png b/factorissimo-2-notnotmelon/graphics/factory/factory-2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-2.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3-alt.png b/factorissimo-2-notnotmelon/graphics/factory/factory-3-alt.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3-alt.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-3-alt.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3-shadow.png b/factorissimo-2-notnotmelon/graphics/factory/factory-3-shadow.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3-shadow.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-3-shadow.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3.png b/factorissimo-2-notnotmelon/graphics/factory/factory-3.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/factory/factory-3.png rename to factorissimo-2-notnotmelon/graphics/factory/factory-3.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-1.png b/factorissimo-2-notnotmelon/graphics/icon/factory-1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-1.png rename to factorissimo-2-notnotmelon/graphics/icon/factory-1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-2.png b/factorissimo-2-notnotmelon/graphics/icon/factory-2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-2.png rename to factorissimo-2-notnotmelon/graphics/icon/factory-2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-3.png b/factorissimo-2-notnotmelon/graphics/icon/factory-3.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-3.png rename to factorissimo-2-notnotmelon/graphics/icon/factory-3.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-circuit-connector.png b/factorissimo-2-notnotmelon/graphics/icon/factory-circuit-connector.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/icon/factory-circuit-connector.png rename to factorissimo-2-notnotmelon/graphics/icon/factory-circuit-connector.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blue-dir.png b/factorissimo-2-notnotmelon/graphics/indicator/blue-dir.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blue-dir.png rename to factorissimo-2-notnotmelon/graphics/indicator/blue-dir.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blue-dot.png b/factorissimo-2-notnotmelon/graphics/indicator/blue-dot.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blue-dot.png rename to factorissimo-2-notnotmelon/graphics/indicator/blue-dot.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blueprint-settings.png b/factorissimo-2-notnotmelon/graphics/indicator/blueprint-settings.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/blueprint-settings.png rename to factorissimo-2-notnotmelon/graphics/indicator/blueprint-settings.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/brown-dir.png b/factorissimo-2-notnotmelon/graphics/indicator/brown-dir.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/brown-dir.png rename to factorissimo-2-notnotmelon/graphics/indicator/brown-dir.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/brown-dot.png b/factorissimo-2-notnotmelon/graphics/indicator/brown-dot.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/brown-dot.png rename to factorissimo-2-notnotmelon/graphics/indicator/brown-dot.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/green-dir.png b/factorissimo-2-notnotmelon/graphics/indicator/green-dir.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/green-dir.png rename to factorissimo-2-notnotmelon/graphics/indicator/green-dir.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/green-dot.png b/factorissimo-2-notnotmelon/graphics/indicator/green-dot.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/green-dot.png rename to factorissimo-2-notnotmelon/graphics/indicator/green-dot.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/red-dir.png b/factorissimo-2-notnotmelon/graphics/indicator/red-dir.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/red-dir.png rename to factorissimo-2-notnotmelon/graphics/indicator/red-dir.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/red-dot.png b/factorissimo-2-notnotmelon/graphics/indicator/red-dot.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/red-dot.png rename to factorissimo-2-notnotmelon/graphics/indicator/red-dot.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/yellow-dir.png b/factorissimo-2-notnotmelon/graphics/indicator/yellow-dir.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/yellow-dir.png rename to factorissimo-2-notnotmelon/graphics/indicator/yellow-dir.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/indicator/yellow-dot.png b/factorissimo-2-notnotmelon/graphics/indicator/yellow-dot.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/indicator/yellow-dot.png rename to factorissimo-2-notnotmelon/graphics/indicator/yellow-dot.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/nothing.png b/factorissimo-2-notnotmelon/graphics/nothing.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/nothing.png rename to factorissimo-2-notnotmelon/graphics/nothing.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-1.png b/factorissimo-2-notnotmelon/graphics/technology/factory-architecture-1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-1.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-architecture-1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-2.png b/factorissimo-2-notnotmelon/graphics/technology/factory-architecture-2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-2.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-architecture-2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-3.png b/factorissimo-2-notnotmelon/graphics/technology/factory-architecture-3.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-architecture-3.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-architecture-3.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-chest.png b/factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-chest.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-chest.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-chest.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-circuit.png b/factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-circuit.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-circuit.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-circuit.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-fluid.png b/factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-fluid.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-fluid.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-fluid.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-heat.png b/factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-heat.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-connection-type-heat.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-connection-type-heat.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-interior-upgrade-display.png b/factorissimo-2-notnotmelon/graphics/technology/factory-interior-upgrade-display.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-interior-upgrade-display.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-interior-upgrade-display.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-interior-upgrade-lights.png b/factorissimo-2-notnotmelon/graphics/technology/factory-interior-upgrade-lights.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-interior-upgrade-lights.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-interior-upgrade-lights.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-preview.png b/factorissimo-2-notnotmelon/graphics/technology/factory-preview.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-preview.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-preview.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-recursion-1.png b/factorissimo-2-notnotmelon/graphics/technology/factory-recursion-1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-recursion-1.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-recursion-1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-recursion-2.png b/factorissimo-2-notnotmelon/graphics/technology/factory-recursion-2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/technology/factory-recursion-2.png rename to factorissimo-2-notnotmelon/graphics/technology/factory-recursion-2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_1.png b/factorissimo-2-notnotmelon/graphics/tile/ff1_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_1.png rename to factorissimo-2-notnotmelon/graphics/tile/ff1_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_2.png b/factorissimo-2-notnotmelon/graphics/tile/ff1_2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_2.png rename to factorissimo-2-notnotmelon/graphics/tile/ff1_2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_4.png b/factorissimo-2-notnotmelon/graphics/tile/ff1_4.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff1_4.png rename to factorissimo-2-notnotmelon/graphics/tile/ff1_4.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_1.png b/factorissimo-2-notnotmelon/graphics/tile/ff2_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_1.png rename to factorissimo-2-notnotmelon/graphics/tile/ff2_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_2.png b/factorissimo-2-notnotmelon/graphics/tile/ff2_2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_2.png rename to factorissimo-2-notnotmelon/graphics/tile/ff2_2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_4.png b/factorissimo-2-notnotmelon/graphics/tile/ff2_4.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff2_4.png rename to factorissimo-2-notnotmelon/graphics/tile/ff2_4.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_1.png b/factorissimo-2-notnotmelon/graphics/tile/ff3_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_1.png rename to factorissimo-2-notnotmelon/graphics/tile/ff3_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_2.png b/factorissimo-2-notnotmelon/graphics/tile/ff3_2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_2.png rename to factorissimo-2-notnotmelon/graphics/tile/ff3_2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_4.png b/factorissimo-2-notnotmelon/graphics/tile/ff3_4.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff3_4.png rename to factorissimo-2-notnotmelon/graphics/tile/ff3_4.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_1.png b/factorissimo-2-notnotmelon/graphics/tile/ff_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_1.png rename to factorissimo-2-notnotmelon/graphics/tile/ff_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_2.png b/factorissimo-2-notnotmelon/graphics/tile/ff_2.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_2.png rename to factorissimo-2-notnotmelon/graphics/tile/ff_2.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_4.png b/factorissimo-2-notnotmelon/graphics/tile/ff_4.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/ff_4.png rename to factorissimo-2-notnotmelon/graphics/tile/ff_4.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw1_1.png b/factorissimo-2-notnotmelon/graphics/tile/fw1_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw1_1.png rename to factorissimo-2-notnotmelon/graphics/tile/fw1_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw2_1.png b/factorissimo-2-notnotmelon/graphics/tile/fw2_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw2_1.png rename to factorissimo-2-notnotmelon/graphics/tile/fw2_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw3_1.png b/factorissimo-2-notnotmelon/graphics/tile/fw3_1.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/tile/fw3_1.png rename to factorissimo-2-notnotmelon/graphics/tile/fw3_1.png diff --git a/factorissimo-2-notnotmelon_1.2.3/graphics/utility/factory-combinators.png b/factorissimo-2-notnotmelon/graphics/utility/factory-combinators.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/graphics/utility/factory-combinators.png rename to factorissimo-2-notnotmelon/graphics/utility/factory-combinators.png diff --git a/factorissimo-2-notnotmelon_1.2.3/info.json b/factorissimo-2-notnotmelon/info.json similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/info.json rename to factorissimo-2-notnotmelon/info.json diff --git a/factorissimo-2-notnotmelon_1.2.3/locale/en/factorissimo2.cfg b/factorissimo-2-notnotmelon/locale/en/factorissimo2.cfg similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/locale/en/factorissimo2.cfg rename to factorissimo-2-notnotmelon/locale/en/factorissimo2.cfg diff --git a/factorissimo-2-notnotmelon_1.2.3/locale/ru/factorissimo2.cfg b/factorissimo-2-notnotmelon/locale/ru/factorissimo2.cfg similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/locale/ru/factorissimo2.cfg rename to factorissimo-2-notnotmelon/locale/ru/factorissimo2.cfg diff --git a/factorissimo-2-notnotmelon_1.2.3/migrations/1.1.16.lua b/factorissimo-2-notnotmelon/migrations/1.1.16.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/migrations/1.1.16.lua rename to factorissimo-2-notnotmelon/migrations/1.1.16.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/migrations/1.1.20.lua b/factorissimo-2-notnotmelon/migrations/1.1.20.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/migrations/1.1.20.lua rename to factorissimo-2-notnotmelon/migrations/1.1.20.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/migrations/migration.json b/factorissimo-2-notnotmelon/migrations/migration.json similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/migrations/migration.json rename to factorissimo-2-notnotmelon/migrations/migration.json diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/component.lua b/factorissimo-2-notnotmelon/prototypes/component.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/component.lua rename to factorissimo-2-notnotmelon/prototypes/component.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/factory.lua b/factorissimo-2-notnotmelon/prototypes/factory.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/factory.lua rename to factorissimo-2-notnotmelon/prototypes/factory.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/recipe.lua b/factorissimo-2-notnotmelon/prototypes/recipe.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/recipe.lua rename to factorissimo-2-notnotmelon/prototypes/recipe.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/technology.lua b/factorissimo-2-notnotmelon/prototypes/technology.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/technology.lua rename to factorissimo-2-notnotmelon/prototypes/technology.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/tile.lua b/factorissimo-2-notnotmelon/prototypes/tile.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/tile.lua rename to factorissimo-2-notnotmelon/prototypes/tile.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/prototypes/utility.lua b/factorissimo-2-notnotmelon/prototypes/utility.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/prototypes/utility.lua rename to factorissimo-2-notnotmelon/prototypes/utility.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/blueprint.lua b/factorissimo-2-notnotmelon/script/blueprint.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/blueprint.lua rename to factorissimo-2-notnotmelon/script/blueprint.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/camera.lua b/factorissimo-2-notnotmelon/script/camera.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/camera.lua rename to factorissimo-2-notnotmelon/script/camera.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/belt.lua b/factorissimo-2-notnotmelon/script/connections/belt.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/belt.lua rename to factorissimo-2-notnotmelon/script/connections/belt.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/chest.lua b/factorissimo-2-notnotmelon/script/connections/chest.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/chest.lua rename to factorissimo-2-notnotmelon/script/connections/chest.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/circuit.lua b/factorissimo-2-notnotmelon/script/connections/circuit.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/circuit.lua rename to factorissimo-2-notnotmelon/script/connections/circuit.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/connections.lua b/factorissimo-2-notnotmelon/script/connections/connections.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/connections.lua rename to factorissimo-2-notnotmelon/script/connections/connections.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/fluid.lua b/factorissimo-2-notnotmelon/script/connections/fluid.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/fluid.lua rename to factorissimo-2-notnotmelon/script/connections/fluid.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/connections/heat.lua b/factorissimo-2-notnotmelon/script/connections/heat.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/connections/heat.lua rename to factorissimo-2-notnotmelon/script/connections/heat.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/layout.lua b/factorissimo-2-notnotmelon/script/layout.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/layout.lua rename to factorissimo-2-notnotmelon/script/layout.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/lib.lua b/factorissimo-2-notnotmelon/script/lib.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/lib.lua rename to factorissimo-2-notnotmelon/script/lib.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/overlay.lua b/factorissimo-2-notnotmelon/script/overlay.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/overlay.lua rename to factorissimo-2-notnotmelon/script/overlay.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/pollution.lua b/factorissimo-2-notnotmelon/script/pollution.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/pollution.lua rename to factorissimo-2-notnotmelon/script/pollution.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/travel.lua b/factorissimo-2-notnotmelon/script/travel.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/travel.lua rename to factorissimo-2-notnotmelon/script/travel.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/script/updates.lua b/factorissimo-2-notnotmelon/script/updates.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/script/updates.lua rename to factorissimo-2-notnotmelon/script/updates.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/settings.lua b/factorissimo-2-notnotmelon/settings.lua similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/settings.lua rename to factorissimo-2-notnotmelon/settings.lua diff --git a/factorissimo-2-notnotmelon_1.2.3/thumbnail.png b/factorissimo-2-notnotmelon/thumbnail.png similarity index 100% rename from factorissimo-2-notnotmelon_1.2.3/thumbnail.png rename to factorissimo-2-notnotmelon/thumbnail.png diff --git a/factoryplanner_1.1.72/LICENSE.md b/factoryplanner_1.1.72/LICENSE.md deleted file mode 100644 index d8ee06f3..00000000 --- a/factoryplanner_1.1.72/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Claude Metz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/factoryplanner_1.1.72/backend/calculation/matrix_engine.lua b/factoryplanner_1.1.72/backend/calculation/matrix_engine.lua deleted file mode 100644 index bd0e95a8..00000000 --- a/factoryplanner_1.1.72/backend/calculation/matrix_engine.lua +++ /dev/null @@ -1,891 +0,0 @@ ---[[ -Author: Scott Sullivan 2/23/2020 -github: scottmsul - -Algorithm Overview ------------------- -The algorithm is based on the post here: https://kirkmcdonald.github.io/posts/calculation.html -We solve the matrix equation Ax = b, where: - - A is a matrix whose entry in row i and col j is the output/timescale/building for item i and recipe j - (negative is input, positive is output) - - x is the vector of unknowns that we're solving for, and whose jth entry will be the # buildings needed for recipe j - - b is the vector whose ith entry is the desired output/timescale for item i -Note the current implementation requires a square matrix_engine. -If there are more recipes than items, the problem is under-constrained and some recipes must be deleted. -If there are more items than recipes, the problem is over-constrained (this is more common). - In this case we can construct "pseudo-recipes" for certrain items that produce 1/timescale/"building". - Items with pseudo-recipes will be "free" variables that will have some constrained non-zero input or - output after solving. - The solved "number of buildings" will be equal to the extra input or output needed for that item. - Typically these pseudo-recipes will be for external inputs or non-fully-recycled byproducts. -Currently the algorithm assumes any item which is part of at least one input and one output in any recipe - is not a free variable, though the user can click on constrained items in the matrix dialog to make - them free variables. - The dialog calls constrained intermediate items "eliminated" since their output is constrained to zero. -If a recipe has loops, typically the user needs to make voids or free variables. ---]] - -local structures = require("backend.calculation.structures") - -local matrix_engine = {} - - -function matrix_engine.get_recipe_protos(recipe_ids) - local recipe_protos = {} - for i, recipe_id in ipairs(recipe_ids) do - local recipe_proto = global.prototypes.recipes[recipe_id] - recipe_protos[i] = recipe_proto - end - return recipe_protos -end - -function matrix_engine.get_item_protos(item_keys) - local item_protos = {} - for i, item_key in ipairs(item_keys) do - local item_proto = matrix_engine.get_item(item_key) - item_protos[i] = item_proto - end - return item_protos -end - --- for our purposes the string "(item type id)_(item id)" is what we're calling the "item_key" -function matrix_engine.get_item_key(item_type_name, item_name) - local item = prototyper.util.find_prototype("items", item_name, item_type_name) - return tostring(item.category_id) .. '_' .. tostring(item.id) -end - -function matrix_engine.get_item(item_key) - local split_str = util.split_string(item_key, "_") - local item_type_id, item_id = split_str[1], split_str[2] - return global.prototypes.items[item_type_id].members[item_id] -end - --- this is really only used for debugging -function matrix_engine.get_item_name(item_key) - local split_str = util.split_string(item_key, "_") - local item_type_id, item_id = split_str[1], split_str[2] - local item_info = global.prototypes.items[item_type_id].members[item_id] - return item_info.type.."_"..item_info.name -end - -function matrix_engine.print_rows(rows) - local s = 'ROWS\n' - for i, k in ipairs(rows.values) do - local item_name = matrix_engine.get_item_name(k) - s = s..'ROW '..i..': '..item_name..'\n' - end - llog(s) -end - -function matrix_engine.print_columns(columns) - local s = 'COLUMNS\n' - for i, k in ipairs(columns.values) do - local col_split_str = util.split_string(k, "_") - if col_split_str[1]=="line" then - s = s..'COL '..i..': '..k..'\n' - else - local item_key = col_split_str[2].."_"..col_split_str[3] - local item_name = matrix_engine.get_item_name(item_key) - s = s..'COL '..i..': '..item_name..'\n' - end - end - llog(s) -end - -function matrix_engine.print_items_set(items) - local item_name_set = {} - for k, _ in pairs(items) do - local item_name = matrix_engine.get_item_name(k) - item_name_set[item_name] = k - end - llog(item_name_set) -end - -function matrix_engine.print_items_list(items) - local item_name_set = {} - for _, k in ipairs(items) do - local item_name = matrix_engine.get_item_name(k) - item_name_set[item_name] = k - end - llog(item_name_set) -end - -function matrix_engine.set_diff(a, b) - local result = {} - for k, _ in pairs(a) do - if not b[k] then - result[k] = true - end - end - return result -end - -function matrix_engine.union_sets(...) - local arg = {...} - local result = {} - for _, set in pairs(arg) do - for val, _ in pairs(set) do - result[val] = true - end - end - return result -end - -function matrix_engine.intersect_sets(...) - local arg = {...} - local counts = {} - local num_sets = #arg - for _, set in pairs(arg) do - for val, _ in pairs(set) do - if not counts[val] then - counts[val] = 1 - else - counts[val] = counts[val] + 1 - end - end - end - local result = {} - for k, count in pairs(counts) do - if count==num_sets then - result[k] = true - end - end - return result -end - -function matrix_engine.num_elements(...) - local arg = {...} - local count = 0 - for _, set in pairs(arg) do - for _, _ in pairs(set) do - count = count + 1 - end - end - return count -end - -function matrix_engine.get_matrix_solver_metadata(subfactory_data) - local eliminated_items = {} - local free_items = {} - local subfactory_metadata = matrix_engine.get_subfactory_metadata(subfactory_data) - local recipes = subfactory_metadata.recipes - local all_items = subfactory_metadata.all_items - local raw_inputs = subfactory_metadata.raw_inputs - local byproducts = subfactory_metadata.byproducts - local unproduced_outputs = subfactory_metadata.unproduced_outputs - local produced_outputs = matrix_engine.set_diff(subfactory_metadata.desired_outputs, unproduced_outputs) - local free_variables = matrix_engine.union_sets(raw_inputs, byproducts, unproduced_outputs) - local intermediate_items = matrix_engine.set_diff(all_items, free_variables) - if subfactory_data.matrix_free_items == nil then - eliminated_items = intermediate_items - else - -- by default when a subfactory is updated, add any new variables to eliminated and let the user select free. - local free_items_list = subfactory_data.matrix_free_items - for _, free_item in ipairs(free_items_list) do - local identifier = free_item.category_id.."_"..free_item.id - free_items[identifier] = true - end - -- make sure that any items that no longer exist are removed - free_items = matrix_engine.intersect_sets(free_items, intermediate_items) - eliminated_items = matrix_engine.set_diff(intermediate_items, free_items) - end - local num_rows = matrix_engine.num_elements(raw_inputs, byproducts, eliminated_items, free_items) - local num_cols = matrix_engine.num_elements(recipes, raw_inputs, byproducts, free_items) - local result = { - recipes = subfactory_metadata.recipes, - ingredients = matrix_engine.get_item_protos(matrix_engine.set_to_ordered_list(subfactory_metadata.raw_inputs)), - products = matrix_engine.get_item_protos(matrix_engine.set_to_ordered_list(produced_outputs)), - byproducts = matrix_engine.get_item_protos(matrix_engine.set_to_ordered_list(subfactory_metadata.byproducts)), - eliminated_items = matrix_engine.get_item_protos(matrix_engine.set_to_ordered_list(eliminated_items)), - free_items = matrix_engine.get_item_protos(matrix_engine.set_to_ordered_list(free_items)), - num_rows = num_rows, - num_cols = num_cols - } - return result -end - -function matrix_engine.transpose(m) - local transposed = {} - - if #m == 0 then - return transposed - end - - for i=1, #m[1] do - local row = {} - for j=1, #m do - table.insert(row, m[j][i]) - end - table.insert(transposed, row) - end - return transposed -end - -function matrix_engine.get_linear_dependence_data(subfactory_data, matrix_metadata) - local num_rows = matrix_metadata.num_rows - local num_cols = matrix_metadata.num_cols - - local linearly_dependent_recipes = {} - local linearly_dependent_items = {} - local allowed_free_items = {} - - local linearly_dependent_cols = matrix_engine.run_matrix_solver(subfactory_data, true) - for col_name, _ in pairs(linearly_dependent_cols) do - local col_split_str = util.split_string(col_name, "_") - if col_split_str[1] == "recipe" then - local recipe_key = col_split_str[2] - linearly_dependent_recipes[recipe_key] = true - else -- "item" - local item_key = col_split_str[2].."_"..col_split_str[3] - linearly_dependent_items[item_key] = true - end - end - -- check which eliminated items could be made free while still retaining linear independence - if #linearly_dependent_cols == 0 and num_cols < num_rows then - local matrix_data = matrix_engine.get_matrix_data(subfactory_data) - local items = matrix_data.rows - local col_to_item = {} - for k, v in pairs(items.map) do - col_to_item[v] = k - end - - local t_matrix = matrix_engine.transpose(matrix_data.matrix) - table.remove(t_matrix) - matrix_engine.to_reduced_row_echelon_form(t_matrix) - local t_linearly_dependent = matrix_engine.find_linearly_dependent_cols(t_matrix, false) - - local eliminated_items = matrix_metadata.eliminated_items - local eliminated_keys = {} - for _, eliminated_item in ipairs(eliminated_items) do - local key = matrix_engine.get_item_key(eliminated_item.type, eliminated_item.name) - eliminated_keys[key] = eliminated_item - end - - for col, _ in pairs(t_linearly_dependent) do - local item = col_to_item[col] - if eliminated_keys[item] then - allowed_free_items[item] = true - end - end - end - local result = { - linearly_dependent_recipes = matrix_engine.get_recipe_protos( - matrix_engine.set_to_ordered_list(linearly_dependent_recipes)), - linearly_dependent_items = matrix_engine.get_item_protos( - matrix_engine.set_to_ordered_list(linearly_dependent_items)), - allowed_free_items = matrix_engine.get_item_protos( - matrix_engine.set_to_ordered_list(allowed_free_items)) - } - return result -end - -function matrix_engine.get_matrix_data(subfactory_data) - local matrix_metadata = matrix_engine.get_matrix_solver_metadata(subfactory_data) - local matrix_free_items = matrix_metadata.free_items - - local subfactory_metadata = matrix_engine.get_subfactory_metadata(subfactory_data) - local all_items = subfactory_metadata.all_items - local rows = matrix_engine.get_mapping_struct(all_items) - - -- storing the line keys as "line_(lines index 1)_(lines index 2)_..." for arbitrary depths of subfloors - local function get_line_names(prefix, lines) - local line_names = {} - for i, line in ipairs(lines) do - local line_key = prefix.."_"..i - -- these are exclusive because only actual recipes are allowed to be inputs to the matrix solver - if line.subfloor == nil then - line_names[line_key] = true - else - local subfloor_line_names = get_line_names(line_key, line.subfloor.lines) - line_names = matrix_engine.union_sets(line_names, subfloor_line_names) - end - end - return line_names - end - local line_names = get_line_names("line", subfactory_data.top_floor.lines) - - local raw_free_variables = matrix_engine.union_sets(subfactory_metadata.raw_inputs, subfactory_metadata.byproducts) - local free_variables = {} - for k, _ in pairs(raw_free_variables) do - free_variables["item_"..k] = true - end - for _, v in ipairs(matrix_free_items) do - local item_key = matrix_engine.get_item_key(v.type, v.name) - free_variables["item_"..item_key] = true - end - local col_set = matrix_engine.union_sets(line_names, free_variables) - local columns = matrix_engine.get_mapping_struct(col_set) - local matrix = matrix_engine.get_matrix(subfactory_data, rows, columns) - - return { - matrix = matrix, - rows = rows, - columns = columns, - free_variables = free_variables, - matrix_free_items = matrix_free_items, - } -end - -function matrix_engine.run_matrix_solver(subfactory_data, check_linear_dependence) - -- run through get_matrix_solver_metadata to check against recipe changes - local subfactory_metadata = matrix_engine.get_subfactory_metadata(subfactory_data) - local matrix_data = matrix_engine.get_matrix_data(subfactory_data) - local matrix = matrix_data.matrix - local columns = matrix_data.columns - local free_variables = matrix_data.free_variables - local matrix_free_items = matrix_data.matrix_free_items - - matrix_engine.to_reduced_row_echelon_form(matrix) - if check_linear_dependence then - local linearly_dependent_cols = matrix_engine.find_linearly_dependent_cols(matrix, true) - local linearly_dependent_variables = {} - for col, _ in pairs(linearly_dependent_cols) do - local col_name = columns.values[col] - local col_split_str = util.split_string(col_name, "_") - if col_split_str[1] == "line" then - local floor = subfactory_data.top_floor - for i=2, #col_split_str-1 do - local line_table_id = col_split_str[i] - floor = floor.lines[line_table_id].subfloor - end - local line_table_id = col_split_str[#col_split_str] - local line = floor.lines[line_table_id] - local recipe_id = line.recipe_proto.id - linearly_dependent_variables["recipe_"..recipe_id] = true - else -- item - linearly_dependent_variables[col_name] = true - end - end - return linearly_dependent_variables - end - - local function set_line_results(prefix, floor) - local floor_aggregate = structures.aggregate.init(subfactory_data.player_index, floor.id) - for i, line in ipairs(floor.lines) do - local line_key = prefix.."_"..i - local line_aggregate = nil - if line.subfloor == nil then - local col_num = columns.map[line_key] - -- want the j-th entry in the last column (output of row-reduction) - local machine_count = matrix[col_num][#columns.values+1] - line_aggregate = matrix_engine.get_line_aggregate(line, subfactory_data.player_index, floor.id, - machine_count, false, subfactory_metadata, free_variables) - else - line_aggregate = set_line_results(prefix.."_"..i, line.subfloor) - matrix_engine.consolidate(line_aggregate) - end - - -- Lines with subfloors show actual number of machines to build, so each counts are rounded up when summed - floor_aggregate.machine_count = floor_aggregate.machine_count + - math.ceil(line_aggregate.machine_count - 0.001) - - structures.aggregate.add_aggregate(line_aggregate, floor_aggregate) - - solver.set_line_result{ - player_index = subfactory_data.player_index, - floor_id = floor.id, - line_id = line.id, - machine_count = line_aggregate.machine_count, - energy_consumption = line_aggregate.energy_consumption, - pollution = line_aggregate.pollution, - production_ratio = line_aggregate.production_ratio, - uncapped_production_ratio = line_aggregate.uncapped_production_ratio, - Product = line_aggregate.Product, - Byproduct = line_aggregate.Byproduct, - Ingredient = line_aggregate.Ingredient, - fuel_amount = line_aggregate.fuel_amount - } - end - return floor_aggregate - end - - local top_floor_aggregate = set_line_results("line", subfactory_data.top_floor) - - local main_aggregate = structures.aggregate.init(subfactory_data.player_index, 1) - - -- set main_aggregate free variables - for item_line_key, _ in pairs(free_variables) do - local col_num = columns.map[item_line_key] - local split_str = util.split_string(item_line_key, "_") - local item_key = split_str[2].."_"..split_str[3] - local item = matrix_engine.get_item(item_key) - local amount = matrix[col_num][#columns.values+1] - if amount < 0 then - -- counterintuitively, a negative amount means we have a negative number of "pseudo-buildings", - -- implying the item must be consumed to balance the matrix, hence it is a byproduct. - -- The opposite is true for ingredients. - structures.aggregate.add(main_aggregate, "Byproduct", item, -amount) - else - structures.aggregate.add(main_aggregate, "Ingredient", item, amount) - end - end - - -- set products for unproduced items - for _, product in pairs(subfactory_data.top_level_products) do - local item_key = matrix_engine.get_item_key(product.proto.type, product.proto.name) - if subfactory_metadata.unproduced_outputs[item_key] then - local item = matrix_engine.get_item(item_key) - structures.aggregate.add(main_aggregate, "Product", item, product.amount) - end - end - - solver.set_subfactory_result { - player_index = subfactory_data.player_index, - energy_consumption = top_floor_aggregate.energy_consumption, - pollution = top_floor_aggregate.pollution, - Product = main_aggregate.Product, - Byproduct = main_aggregate.Byproduct, - Ingredient = main_aggregate.Ingredient, - matrix_free_items = matrix_free_items - } -end - --- If an aggregate has items that are both inputs and outputs, deletes whichever is smaller and saves the net amount. --- If the input and output are identical to within rounding error, delete from both. --- This is mainly for calculating line aggregates with subfloors for the matrix solver. -function matrix_engine.consolidate(aggregate) - -- Items cannot be both products or byproducts, but they can be both ingredients and fuels. - -- In the case that an item appears as an output, an ingredient, and a fuel, delete from fuel first. - local function compare_classes(input_class, output_class) - for type, type_table in pairs(aggregate[output_class]) do - for item, output_amount in pairs(type_table) do - local item_table = { - type=type, - name=item - } - if aggregate[input_class][type] ~= nil then - if aggregate[input_class][type][item] ~= nil then - local input_amount = aggregate[input_class][type][item] - local net_amount = output_amount - input_amount - if net_amount > 0 then - structures.aggregate.subtract(aggregate, input_class, item_table, input_amount) - structures.aggregate.subtract(aggregate, output_class, item_table, input_amount) - else - structures.aggregate.subtract(aggregate, input_class, item_table, output_amount) - structures.aggregate.subtract(aggregate, output_class, item_table, output_amount) - end - end - end - end - end - end - compare_classes("Ingredient", "Product") - compare_classes("Ingredient", "Byproduct") -end - - --- finds inputs and outputs for each line and desired outputs -function matrix_engine.get_subfactory_metadata(subfactory_data) - local desired_outputs = {} - for _, product in pairs(subfactory_data.top_level_products) do - local item_key = matrix_engine.get_item_key(product.proto.type, product.proto.name) - desired_outputs[item_key] = true - end - local lines_metadata = matrix_engine.get_lines_metadata(subfactory_data.top_floor.lines, - subfactory_data.player_index) - local line_inputs = lines_metadata.line_inputs - local line_outputs = lines_metadata.line_outputs - local unproduced_outputs = matrix_engine.set_diff(desired_outputs, line_outputs) - local all_items = matrix_engine.union_sets(line_inputs, line_outputs) - local raw_inputs = matrix_engine.set_diff(line_inputs, line_outputs) - local byproducts = matrix_engine.set_diff(matrix_engine.set_diff(line_outputs, line_inputs), desired_outputs) - return { - recipes = lines_metadata.line_recipes, - desired_outputs = desired_outputs, - all_items = all_items, - raw_inputs = raw_inputs, - byproducts = byproducts, - unproduced_outputs = unproduced_outputs - } -end - -function matrix_engine.get_lines_metadata(lines, player_index) - local line_recipes = {} - local line_inputs = {} - local line_outputs = {} - for _, line in pairs(lines) do - if line.subfloor ~= nil then - local floor_metadata = matrix_engine.get_lines_metadata(line.subfloor.lines, player_index) - for _, subfloor_line_recipe in pairs(floor_metadata.line_recipes) do - table.insert(line_recipes, subfloor_line_recipe) - end - line_inputs = matrix_engine.union_sets(line_inputs, floor_metadata.line_inputs) - line_outputs = matrix_engine.union_sets(line_outputs, floor_metadata.line_outputs) - else - local line_aggregate = matrix_engine.get_line_aggregate(line, player_index, 1, 1, true) - for item_type_name, item_data in pairs(line_aggregate.Ingredient) do - for item_name, _ in pairs(item_data) do - local item_key = matrix_engine.get_item_key(item_type_name, item_name) - line_inputs[item_key] = true - end - end - for item_type_name, item_data in pairs(line_aggregate.Product) do - for item_name, _ in pairs(item_data) do - local item_key = matrix_engine.get_item_key(item_type_name, item_name) - line_outputs[item_key] = true - end - end - table.insert(line_recipes, line.recipe_proto.id) - end - end - return { - line_recipes = line_recipes, - line_inputs = line_inputs, - line_outputs = line_outputs - } -end - -function matrix_engine.get_matrix(subfactory_data, rows, columns) - -- Returns the matrix to be solved. - -- Format is a list of lists, where outer lists are rows and inner lists are columns. - -- Rows are items and columns are recipes (or pseudo-recipes in the case of free items). - -- Elements have units of items/timescale/building, and are positive for outputs and negative for inputs. - - -- initialize matrix to all zeros - local matrix = {} - for _=1, #rows.values do - local row = {} - for _=1, #columns.values+1 do -- extra +1 for desired output column - table.insert(row, 0) - end - table.insert(matrix, row) - end - - -- loop over columns since it's easier to look up items for lines/free vars than vice-versa - for col_num=1, #columns.values do - local col_str = columns.values[col_num] - local col_split_str = util.split_string(col_str, "_") - local col_type = col_split_str[1] - if col_type == "item" then - local item_id = col_split_str[2].."_"..col_split_str[3] - local row_num = rows.map[item_id] - matrix[row_num][col_num] = 1 - else -- "line" - local floor = subfactory_data.top_floor - for i=2, #col_split_str-1 do - local line_table_id = col_split_str[i] - floor = floor.lines[line_table_id].subfloor - end - local line_table_id = col_split_str[#col_split_str] - local line = floor.lines[line_table_id] - - -- use amounts for 1 building as matrix entries - local line_aggregate = matrix_engine.get_line_aggregate(line, subfactory_data.player_index, - floor.id, 1, true) - - for item_type_name, items in pairs(line_aggregate.Product) do - for item_name, amount in pairs(items) do - local item_key = matrix_engine.get_item_key(item_type_name, item_name) - local row_num = rows.map[item_key] - matrix[row_num][col_num] = matrix[row_num][col_num] + amount - end - end - - for item_type_name, items in pairs(line_aggregate.Ingredient) do - for item_name, amount in pairs(items) do - local item_key = matrix_engine.get_item_key(item_type_name, item_name) - local row_num = rows.map[item_key] - matrix[row_num][col_num] = matrix[row_num][col_num] - amount - end - end - end - end - - -- final column for desired output. Don't have to explicitly set constrained vars to zero - -- since matrix is initialized with zeros. - for _, product in ipairs(subfactory_data.top_level_products) do - local item_id = product.proto.category_id .. "_" .. product.proto.id - local row_num = rows.map[item_id] - -- will be nil for unproduced outputs - if row_num ~= nil then - local amount = product.amount - matrix[row_num][#columns.values+1] = amount - end - end - - return matrix -end - -function matrix_engine.get_line_aggregate(line_data, player_index, floor_id, machine_count, include_fuel_ingredient, subfactory_metadata, free_variables) - local line_aggregate = structures.aggregate.init(player_index, floor_id) - line_aggregate.machine_count = machine_count - -- the index in the subfactory_data.top_floor.lines table can be different from the line_id! - local recipe_proto = line_data.recipe_proto - local timescale = line_data.timescale - local total_effects = line_data.total_effects - local machine_speed = line_data.machine_proto.speed - local speed_multiplier = (1 + math.max(line_data.total_effects.speed, -0.8)) - local energy = recipe_proto.energy - -- hacky workaround for recipes with zero energy - this really messes up the matrix - if energy==0 then energy=0.000000001 end - local time_per_craft = energy / (machine_speed * speed_multiplier) - local launch_sequence_time = line_data.machine_proto.launch_sequence_time - if launch_sequence_time then - time_per_craft = time_per_craft + launch_sequence_time - end - local unmodified_crafts_per_second = 1 / time_per_craft - local in_game_crafts_per_second = math.min(unmodified_crafts_per_second, 60) - local total_crafts_per_timescale = timescale * machine_count * in_game_crafts_per_second - line_aggregate.production_ratio = total_crafts_per_timescale - line_aggregate.uncapped_production_ratio = total_crafts_per_timescale - for _, product in pairs(recipe_proto.products) do - local prodded_amount = solver_util.determine_prodded_amount(product, unmodified_crafts_per_second, total_effects) - local item_key = matrix_engine.get_item_key(product.type, product.name) - if subfactory_metadata~= nil and (subfactory_metadata.byproducts[item_key] or free_variables["item_"..item_key]) then - structures.aggregate.add(line_aggregate, "Byproduct", product, prodded_amount * total_crafts_per_timescale) - else - structures.aggregate.add(line_aggregate, "Product", product, prodded_amount * total_crafts_per_timescale) - end - end - for _, ingredient in pairs(recipe_proto.ingredients) do - local amount = ingredient.amount - if ingredient.ignore_productivity then - amount = solver_util.determine_prodded_amount(ingredient, unmodified_crafts_per_second, total_effects) - end - structures.aggregate.add(line_aggregate, "Ingredient", ingredient, amount * total_crafts_per_timescale) - end - - -- Determine energy consumption (including potential fuel needs) and pollution - local fuel_proto = line_data.fuel_proto - local energy_consumption, pollution = solver_util.determine_energy_consumption_and_pollution( - line_data.machine_proto, line_data.recipe_proto, line_data.fuel_proto, machine_count, line_data.total_effects) - - local fuel_amount = nil - if fuel_proto ~= nil then -- Seeing a fuel_proto here means it needs to be re-calculated - fuel_amount = solver_util.determine_fuel_amount(energy_consumption, line_data.machine_proto.burner, - line_data.fuel_proto.fuel_value, timescale) - - if include_fuel_ingredient then - local fuel = {type=fuel_proto.type, name=fuel_proto.name, amount=fuel_amount} - structures.aggregate.add(line_aggregate, "Ingredient", fuel, fuel_amount) - end - - energy_consumption = 0 -- set electrical consumption to 0 when fuel is used - - elseif line_data.machine_proto.energy_type == "void" then - energy_consumption = 0 -- set electrical consumption to 0 while still polluting - end - - line_aggregate.energy_consumption = energy_consumption - line_aggregate.pollution = pollution - - matrix_engine.consolidate(line_aggregate) - - -- needed for interface.set_line_result - line_aggregate.fuel_amount = fuel_amount - - return line_aggregate -end - -function matrix_engine.print_matrix(m) - local s = "" - s = s.."{\n" - for _, row in ipairs(m) do - s = s.." {" - for j,col in ipairs(row) do - s = s..(col) - if j<#row then - s = s.." " - end - end - s = s.."}\n" - end - s = s.."}" - llog(s) -end - -function matrix_engine.get_mapping_struct(input_set) - -- turns a set into a mapping struct (eg matrix rows or columns) - -- a "mapping struct" consists of a table with: - -- key "values" - array of set values in sort order - -- key "map" - map from input_set values to integers, where the integer is the position in "values" - local values = matrix_engine.set_to_ordered_list(input_set) - local map = {} - for i,k in ipairs(values) do - map[k] = i - end - local result = { - values = values, - map = map - } - return result -end - -function matrix_engine.set_to_ordered_list(s) - local result = {} - for k, _ in pairs(s) do table.insert(result, k) end - table.sort(result) - return result -end - --- Contains the raw matrix solver. Converts an NxN+1 matrix to reduced row-echelon form. --- Based on the algorithm from octave: https://fossies.org/dox/FreeMat-4.2-Source/rref_8m_source.html -function matrix_engine.to_reduced_row_echelon_form(m) - local num_rows = #m - if #m==0 then return m end - local num_cols = #m[1] - - -- set tolerance based on max value in matrix - local max_value = 0 - for i = 1, num_rows do - for j = 1, num_cols do - if math.abs(m[i][j]) > max_value then - max_value = math.abs(m[i][j]) - end - end - end - local tolerance = 1e-10 * max_value - - local pivot_row = 1 - - for curr_col = 1, num_cols do - -- find row with highest value in curr col as next pivot - local max_pivot_index = pivot_row - local max_pivot_value = m[pivot_row][curr_col] - for curr_row = pivot_row+1, num_rows do -- does this need an if-wrapper? - local curr_pivot_value = math.abs(m[curr_row][curr_col]) - if math.abs(m[curr_row][curr_col]) > math.abs(max_pivot_value) then - max_pivot_index = curr_row - max_pivot_value = curr_pivot_value - end - end - - if math.abs(max_pivot_value) < tolerance then - -- if highest value is approximately zero, set this row and all rows below to zero - for zero_row = pivot_row, num_rows do - m[zero_row][curr_col] = 0 - end - else - -- swap current row with highest value row - for swap_col = curr_col, num_cols do - local temp = m[pivot_row][swap_col] - m[pivot_row][swap_col] = m[max_pivot_index][swap_col] - m[max_pivot_index][swap_col] = temp - end - - -- normalize pivot row - local factor = m[pivot_row][curr_col] - for normalize_col = curr_col, num_cols do - m[pivot_row][normalize_col] = m[pivot_row][normalize_col] / factor - end - - -- find nonzero cols in this row for the elimination step - nonzero_pivot_cols = {} - for update_col = curr_col+1, num_cols do - curr_pivot_col_value = m[pivot_row][update_col] - if curr_pivot_col_value ~= 0 then - nonzero_pivot_cols[update_col] = curr_pivot_col_value - end - end - - -- eliminate current column from other rows - for update_row = 1, pivot_row - 1 do - if m[update_row][curr_col] ~= 0 then - for update_col, pivot_col_value in pairs(nonzero_pivot_cols) do - m[update_row][update_col] = m[update_row][update_col] - m[update_row][curr_col]*pivot_col_value - end - m[update_row][curr_col] = 0 - end - end - for update_row = pivot_row+1, num_rows do - if m[update_row][curr_col] ~= 0 then - for update_col, pivot_col_value in pairs(nonzero_pivot_cols) do - m[update_row][update_col] = m[update_row][update_col] - m[update_row][curr_col]*pivot_col_value - end - m[update_row][curr_col] = 0 - end - end - - -- only add 1 if there is another leading 1 row - pivot_row = pivot_row + 1 - - if pivot_row > num_rows then - break - end - end - end -end - -function matrix_engine.find_linearly_dependent_cols(matrix, ignore_last) - -- Returns linearly dependent columns from a row-reduced matrix - -- Algorithm works as follows: - -- For each column: - -- If this column has a leading 1, track which row maps to this column using the ones_map variable (eg cols 1, 2, 3, 5) - -- Otherwise, this column is linearly dependent (eg col 4) - -- For any non-zero rows in this col, the col which contains that row's leading 1 is also linearly dependent - -- (eg for col 4, we have row 2 -> col 2 and row 3 -> col 3) - -- The example below would give cols 2, 3, 4 as being linearly dependent (x's are non-zeros) - -- 1 0 0 0 0 - -- 0 1 x x 0 - -- 0 0 1 x 0 - -- 0 0 0 0 1 - -- I haven't proven this is 100% correct, this is just something I came up with - local row_index = 1 - local num_rows = #matrix - local num_cols = #matrix[1] - if ignore_last then - num_cols = num_cols - 1 - end - local ones_map = {} - local col_set = {} - for col_index=1, num_cols do - if (row_index <= num_rows) and (matrix[row_index][col_index]==1) then - ones_map[row_index] = col_index - row_index = row_index+1 - else - col_set[col_index] = true - for i=1, row_index-1 do - if matrix[i][col_index] ~= 0 then - col_set[ones_map[i]] = true - end - end - end - end - return col_set -end - --- utility function that removes from a sorted array in place -function matrix_engine.remove(orig_table, value) - local i = 1 - local found = false - while i<=#orig_table and (not found) do - local curr = orig_table[i] - if curr >= value then - found = true - end - if curr == value then - table.remove(orig_table, i) - end - i = i+1 - end -end - --- utility function that inserts into a sorted array in place -function matrix_engine.insert(orig_table, value) - local i = 1 - local found = false - while i<=#orig_table and (not found) do - local curr = orig_table[i] - if curr >= value then - found=true - end - if curr > value then - table.insert(orig_table, i, value) - end - i = i+1 - end - if not found then - table.insert(orig_table, value) - end -end - --- Shallowly and naively copys the base level of the given table -function matrix_engine.shallowcopy(table) - local copy = {} - for key, value in pairs(table) do - copy[key] = value - end - return copy -end - -return matrix_engine diff --git a/factoryplanner_1.1.72/backend/calculation/sequential_engine.lua b/factoryplanner_1.1.72/backend/calculation/sequential_engine.lua deleted file mode 100644 index acb3ed96..00000000 --- a/factoryplanner_1.1.72/backend/calculation/sequential_engine.lua +++ /dev/null @@ -1,282 +0,0 @@ -local structures = require("backend.calculation.structures") - --- Contains the 'meat and potatoes' calculation model that struggles with some more complex setups -local sequential_engine = {} - --- ** LOCAL UTIL ** -local function update_line(line_data, aggregate) - local recipe_proto, machine_proto = line_data.recipe_proto, line_data.machine_proto - local total_effects, timescale = line_data.total_effects, line_data.timescale - - -- Determine relevant products - local relevant_products, byproducts = {}, {} - for _, product in pairs(recipe_proto.products) do - if aggregate.Product[product.type][product.name] ~= nil then - table.insert(relevant_products, product) - else - table.insert(byproducts, product) - end - end - - -- Determine production ratio - local production_ratio, uncapped_production_ratio = 0, 0 - local crafts_per_tick = solver_util.determine_crafts_per_tick(machine_proto, recipe_proto, total_effects) - - -- Determines the production ratio that would be needed to fully satisfy the given product - local function determine_production_ratio(relevant_product) - local demand = aggregate.Product[relevant_product.type][relevant_product.name] - local prodded_amount = solver_util.determine_prodded_amount(relevant_product, - crafts_per_tick, total_effects) - return (demand * (line_data.percentage / 100)) / prodded_amount - end - - local relevant_product_count = #relevant_products - if relevant_product_count == 1 then - local relevant_product = relevant_products[1] - production_ratio = determine_production_ratio(relevant_product) - - elseif relevant_product_count >= 2 then - local priority_proto = line_data.priority_product_proto - - for _, relevant_product in ipairs(relevant_products) do - if priority_proto ~= nil then -- Use the priority product to determine the production ratio, if it's set - if relevant_product.type == priority_proto.type and relevant_product.name == priority_proto.name then - production_ratio = determine_production_ratio(relevant_product) - break - end - - else -- Otherwise, determine the highest production ratio needed to fulfill every demand - local ratio = determine_production_ratio(relevant_product) - production_ratio = math.max(production_ratio, ratio) - end - end - end - uncapped_production_ratio = production_ratio -- retain the uncapped ratio for line_data - - -- Limit the machine_count by reducing the production_ratio, if necessary - local machine_limit = line_data.machine_limit - if machine_limit.limit ~= nil then - local capped_production_ratio = solver_util.determine_production_ratio(crafts_per_tick, - machine_limit.limit, timescale, machine_proto.launch_sequence_time) - production_ratio = machine_limit.force_limit and capped_production_ratio - or math.min(production_ratio, capped_production_ratio) - end - - - -- Determines the amount of the given item, considering productivity - local function determine_amount_with_productivity(item) - local prodded_amount = solver_util.determine_prodded_amount(item, crafts_per_tick, total_effects) - return prodded_amount * production_ratio - end - - -- Determine byproducts - local Byproduct = structures.class.init() - for _, byproduct in pairs(byproducts) do - local byproduct_amount = determine_amount_with_productivity(byproduct) - - structures.class.add(Byproduct, byproduct, byproduct_amount) - structures.aggregate.add(aggregate, "Byproduct", byproduct, byproduct_amount) - end - - -- Determine products - local Product = structures.class.init() - for _, product in ipairs(relevant_products) do - local product_amount = determine_amount_with_productivity(product) - local product_demand = aggregate.Product[product.type][product.name] or 0 - - if product_amount > product_demand then - local overflow_amount = product_amount - product_demand - structures.class.add(Byproduct, product, overflow_amount) - structures.aggregate.add(aggregate, "Byproduct", product, overflow_amount) - product_amount = product_demand -- desired amount - end - - structures.class.add(Product, product, product_amount) - structures.aggregate.subtract(aggregate, "Product", product, product_amount) - end - - -- Determine ingredients - local Ingredient = structures.class.init() - for _, ingredient in pairs(recipe_proto.ingredients) do - -- If productivity is to be ignored, un-apply it by applying the product-productivity to an ingredient, - -- effectively reversing the effect (this is way simpler than doing it properly) - local ingredient_amount = (ingredient.ignore_productivity) and determine_amount_with_productivity(ingredient) - or (ingredient.amount * production_ratio) - - structures.class.add(Ingredient, ingredient, ingredient_amount) - - -- Reduce the line-byproducts and -ingredients so only the net amounts remain - local byproduct_amount = Byproduct[ingredient.type][ingredient.name] - if byproduct_amount ~= nil then - structures.class.subtract(Byproduct, ingredient, ingredient_amount) - structures.class.subtract(Ingredient, ingredient, byproduct_amount) - end - end - structures.class.balance_items(Ingredient, aggregate, "Byproduct", "Product") - - - -- Determine machine count - local machine_count = solver_util.determine_machine_count(crafts_per_tick, production_ratio, - timescale, machine_proto.launch_sequence_time) - - -- Add the integer machine count to the aggregate so it can be displayed on the origin_line - aggregate.machine_count = aggregate.machine_count + math.ceil(machine_count - 0.001) - - - -- Determine energy consumption (including potential fuel needs) and pollution - local fuel_proto = line_data.fuel_proto - local energy_consumption, pollution = solver_util.determine_energy_consumption_and_pollution( - machine_proto, recipe_proto, fuel_proto, machine_count, total_effects) - - local fuel_amount = nil - if fuel_proto ~= nil then -- Seeing a fuel_proto here means it needs to be re-calculated - fuel_amount = solver_util.determine_fuel_amount(energy_consumption, machine_proto.burner, - fuel_proto.fuel_value, timescale) - - local fuel_class = structures.class.init() - local fuel = {type=fuel_proto.type, name=fuel_proto.name, amount=fuel_amount} - structures.class.add(fuel_class, fuel) - - -- Add fuel to the aggregate, consuming this line's byproducts first, if possible - structures.class.balance_items(fuel_class, aggregate, "Byproduct", "Product") - - energy_consumption = 0 -- set electrical consumption to 0 when fuel is used - - elseif machine_proto.energy_type == "void" then - energy_consumption = 0 -- set electrical consumption to 0 while still polluting - end - - -- Include beacon energy consumption - energy_consumption = energy_consumption + line_data.beacon_consumption - - aggregate.energy_consumption = aggregate.energy_consumption + energy_consumption - aggregate.pollution = aggregate.pollution + pollution - - - -- Update the actual line with the calculated results - solver.set_line_result { - player_index = aggregate.player_index, - floor_id = aggregate.floor_id, - line_id = line_data.id, - machine_count = machine_count, - energy_consumption = energy_consumption, - pollution = pollution, - production_ratio = production_ratio, - uncapped_production_ratio = uncapped_production_ratio, - Product = Product, - Byproduct = Byproduct, - Ingredient = Ingredient, - fuel_amount = fuel_amount - } -end - - -local function update_floor(floor_data, aggregate) - local desired_products = structures.class.copy(aggregate.Product) - - for _, line_data in ipairs(floor_data.lines) do - local subfloor = line_data.subfloor - if subfloor ~= nil then - -- Convert proto product table to class for easier and faster access - local proto_products = structures.class.init() - for _, product in pairs(line_data.recipe_proto.products) do - proto_products[product.type][product.name] = true - end - - -- Determine the products that are relevant for this subfloor - local subfloor_aggregate = structures.aggregate.init(aggregate.player_index, subfloor.id) - for _, product in ipairs(structures.class.to_array(aggregate.Product)) do - local type, name = product.type, product.name - if proto_products[type][name] ~= nil then - subfloor_aggregate.Product[type][name] = aggregate.Product[type][name] - end - end - - local floor_products = structures.class.to_array(subfloor_aggregate.Product) - update_floor(subfloor, subfloor_aggregate) -- updates aggregate - - - -- Convert the internal product-format into positive products for the line and main aggregate - for _, product in pairs(floor_products) do - local aggregate_product_amount = subfloor_aggregate.Product[product.type][product.name] or 0 - local production_difference = product.amount - aggregate_product_amount - if production_difference > 0 then - subfloor_aggregate.Product[product.type][product.name] = production_difference - else -- if the difference is negative or 0, the item turns out to consume more of this than it produces - structures.aggregate.subtract(subfloor_aggregate, "Product", product, aggregate_product_amount) - end - end - - -- Update the main aggregate with the results - aggregate.machine_count = aggregate.machine_count + subfloor_aggregate.machine_count - aggregate.energy_consumption = aggregate.energy_consumption + subfloor_aggregate.energy_consumption - aggregate.pollution = aggregate.pollution + subfloor_aggregate.pollution - - -- Subtract subfloor products as produced - for _, item in ipairs(structures.class.to_array(subfloor_aggregate.Product)) do - structures.aggregate.subtract(aggregate, "Product", item) - end - - structures.class.balance_items(subfloor_aggregate.Ingredient, aggregate, "Byproduct", "Product") - structures.class.balance_items(subfloor_aggregate.Byproduct, aggregate, "Product", "Byproduct") - - - -- Update the parent line of the subfloor with the results from the subfloor aggregate - solver.set_line_result { - player_index = aggregate.player_index, - floor_id = aggregate.floor_id, - line_id = line_data.id, - machine_count = subfloor_aggregate.machine_count, - energy_consumption = subfloor_aggregate.energy_consumption, - pollution = subfloor_aggregate.pollution, - production_ratio = nil, - uncapped_production_ratio = nil, - Product = subfloor_aggregate.Product, - Byproduct = subfloor_aggregate.Byproduct, - Ingredient = subfloor_aggregate.Ingredient, - fuel_amount = nil - } - else - -- Update aggregate according to the current line, which also adjusts the respective line object - update_line(line_data, aggregate) -- updates aggregate - end - end - - -- Convert all outstanding non-desired products to ingredients - for _, product in pairs(structures.class.to_array(aggregate.Product)) do - if desired_products[product.type][product.name] == nil then - structures.aggregate.add(aggregate, "Ingredient", product) - structures.aggregate.subtract(aggregate, "Product", product) - else - -- Add top level products that are also ingredients to the ingredients - local negative_amount = product.amount - desired_products[product.type][product.name] - if negative_amount > 0 then - structures.aggregate.add(aggregate, "Ingredient", product, negative_amount) - end - end - end -end - - --- ** TOP LEVEL ** -function sequential_engine.update_subfactory(subfactory_data) - -- Initialize aggregate with the top level items - local aggregate = structures.aggregate.init(subfactory_data.player_index, 1) - for _, product in ipairs(subfactory_data.top_level_products) do - structures.aggregate.add(aggregate, "Product", product) - end - - update_floor(subfactory_data.top_floor, aggregate) -- updates aggregate - - -- Fuels are combined with Ingredients for top-level purposes - solver.set_subfactory_result { - player_index = subfactory_data.player_index, - energy_consumption = aggregate.energy_consumption, - pollution = aggregate.pollution, - Product = aggregate.Product, - Byproduct = aggregate.Byproduct, - Ingredient = aggregate.Ingredient - } -end - -return sequential_engine diff --git a/factoryplanner_1.1.72/backend/calculation/solver.lua b/factoryplanner_1.1.72/backend/calculation/solver.lua deleted file mode 100644 index 143688c0..00000000 --- a/factoryplanner_1.1.72/backend/calculation/solver.lua +++ /dev/null @@ -1,360 +0,0 @@ -local sequential_engine = require("backend.calculation.sequential_engine") -local matrix_engine = require("backend.calculation.matrix_engine") -local structures = require("backend.calculation.structures") - -solver, solver_util = {}, {} - --- ** LOCAL UTIL ** -local function set_blank_line(player, floor, line) - local blank_class = structures.class.init() - solver.set_line_result{ - player_index = player.index, - floor_id = floor.id, - line_id = line.id, - machine_count = 0, - energy_consumption = 0, - pollution = 0, - production_ratio = (not line.subfloor) and 0 or nil, - uncapped_production_ratio = (not line.subfloor) and 0 or nil, - Product = blank_class, - Byproduct = blank_class, - Ingredient = blank_class, - fuel_amount = 0 - } -end - -local function set_blank_subfactory(player, subfactory) - local blank_class = structures.class.init() - solver.set_subfactory_result { - player_index = player.index, - energy_consumption = 0, - pollution = 0, - Product = blank_class, - Byproduct = blank_class, - Ingredient = blank_class, - matrix_free_items = subfactory.matrix_free_items - } - - -- Subfactory structure does not matter as every line just needs to be blanked out - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - set_blank_line(player, floor, line) - end - end -end - - --- Generates structured data of the given floor for calculation -local function generate_floor_data(player, subfactory, floor) - local floor_data = { - id = floor.id, - lines = {} - } - - local mining_productivity = (subfactory.mining_productivity ~= nil) - and (subfactory.mining_productivity / 100) or player.force.mining_drill_productivity_bonus - - for _, line in ipairs(Floor.get_in_order(floor, "Line")) do - local line_data = { id = line.id } - - if line.subfloor ~= nil then - line_data.recipe_proto = line.subfloor.defining_line.recipe.proto - line_data.subfloor = generate_floor_data(player, subfactory, line.subfloor) - table.insert(floor_data.lines, line_data) - - else - local relevant_line = (line.parent.level > 1) and line.parent.defining_line or nil - -- If a line has a percentage of zero or is inactive, it is not useful to the result of the subfactory - -- Alternatively, if this line is on a subfloor and the top line of the floor is useless, it is useless too - if (relevant_line and (relevant_line.percentage == 0 or not relevant_line.active)) - or line.percentage == 0 or not line.active then - set_blank_line(player, floor, line) -- useless lines don't need to run through the solver - else - line_data.recipe_proto = line.recipe.proto - line_data.timescale = subfactory.timescale - line_data.percentage = line.percentage -- non-zero - line_data.production_type = line.recipe.production_type - line_data.machine_limit = {limit=line.machine.limit, force_limit=line.machine.force_limit} - line_data.beacon_consumption = 0 - line_data.priority_product_proto = line.priority_product_proto - line_data.machine_proto = line.machine.proto - - -- Effects - update effects first if mining prod is relevant - if line.machine.proto.mining then Machine.summarize_effects(line.machine, mining_productivity) end - line_data.total_effects = line.total_effects - - -- Fuel prototype - if line.machine.fuel ~= nil then line_data.fuel_proto = line.machine.fuel.proto end - - -- Beacon total - can be calculated here, which is faster and simpler - if line.beacon ~= nil and line.beacon.total_amount ~= nil then - line_data.beacon_consumption = line.beacon.proto.energy_usage * line.beacon.total_amount * 60 - end - - table.insert(floor_data.lines, line_data) - end - end - end - - return floor_data -end - - --- Replaces the items of the given object (of given class) using the given result -local function update_object_items(object, item_class, item_results) - local object_class = _G[object.class] - object_class.clear(object, item_class) - - for _, item_result in pairs(structures.class.to_array(item_results)) do - local required_amount = (object.class == "Subfactory") and 0 or nil - local item_proto = prototyper.util.find_prototype("items", item_result.name, item_result.type) - local item = Item.init(item_proto, item_class, item_result.amount, required_amount) - object_class.add(object, item) - end -end - -local function set_zeroed_items(line, item_class, items) - Line.clear(line, item_class) - - for _, item in pairs(items) do - local item_proto = prototyper.util.find_prototype("items", item.name, item.type) - Line.add(line, Item.init(item_proto, item_class, 0)) - end -end - - --- Goes through every line and setting their satisfied_amounts appropriately -local function update_ingredient_satisfaction(floor, product_class) - product_class = product_class or structures.class.init() - - local function determine_satisfaction(ingredient) - local product_amount = product_class[ingredient.proto.type][ingredient.proto.name] - - if product_amount ~= nil then - if product_amount >= (ingredient.amount or 0) then -- TODO dirty fix - ingredient.satisfied_amount = ingredient.amount - structures.class.subtract(product_class, ingredient) - - else -- product_amount < ingredient.amount - ingredient.satisfied_amount = product_amount - structures.class.subtract(product_class, ingredient, product_amount) - end - else - ingredient.satisfied_amount = 0 - end - end - - -- Iterates the lines from the bottom up, setting satisfaction amounts along the way - for _, line in ipairs(Floor.get_in_order(floor, "Line", true)) do - if line.subfloor ~= nil then - local subfloor_product_class = structures.class.copy(product_class) - update_ingredient_satisfaction(line.subfloor, subfloor_product_class) - - elseif line.machine.fuel then - determine_satisfaction(line.machine.fuel) - end - - for _, ingredient in pairs(Line.get_in_order(line, "Ingredient")) do - if ingredient.proto.type ~= "entity" then - determine_satisfaction(ingredient) - end - end - - -- Products and byproducts just get added to the list as being produced - for _, class_name in pairs{"Product", "Byproduct"} do - for _, product in pairs(Line.get_in_order(line, class_name)) do - structures.class.add(product_class, product) - end - end - end -end - - --- ** TOP LEVEL ** --- Updates the whole subfactory calculations from top to bottom -function solver.update(player, subfactory) - if subfactory ~= nil and subfactory.valid then - local player_table = util.globals.player_table(player) - -- Save the active subfactory in global so the solver doesn't have to pass it around - player_table.active_subfactory = subfactory - - local subfactory_data = solver.generate_subfactory_data(player, subfactory) - - if subfactory.matrix_free_items ~= nil then -- meaning the matrix solver is active - local matrix_metadata = matrix_engine.get_matrix_solver_metadata(subfactory_data) - - if matrix_metadata.num_cols > matrix_metadata.num_rows and #subfactory.matrix_free_items > 0 then - subfactory.matrix_free_items = {} - subfactory_data = solver.generate_subfactory_data(player, subfactory) - matrix_metadata = matrix_engine.get_matrix_solver_metadata(subfactory_data) - end - - if matrix_metadata.num_rows ~= 0 then -- don't run calculations if the subfactory has no lines - local linear_dependence_data = matrix_engine.get_linear_dependence_data(subfactory_data, matrix_metadata) - if matrix_metadata.num_rows == matrix_metadata.num_cols - and #linear_dependence_data.linearly_dependent_recipes == 0 then - matrix_engine.run_matrix_solver(subfactory_data, false) - subfactory.linearly_dependant = false - else - set_blank_subfactory(player, subfactory) -- reset subfactory by blanking everything - - -- Don't open the dialog if calculations are run during migration etc. - if main_dialog.is_in_focus(player) or player_table.ui_state.modal_dialog_type ~= nil then - util.raise.open_dialog(player, {dialog="matrix", allow_queueing=true}) - end - end - else -- reset top level items - set_blank_subfactory(player, subfactory) - end - else - sequential_engine.update_subfactory(subfactory_data) - end - - player_table.active_subfactory = nil -- reset after calculations have been carried out - end -end - --- Updates the given subfactory's ingredient satisfactions -function solver.determine_ingredient_satisfaction(subfactory) - update_ingredient_satisfaction(Subfactory.get(subfactory, "Floor", 1), nil) -end - - --- ** INTERFACE ** --- Returns a table containing all the data needed to run the calculations for the given subfactory -function solver.generate_subfactory_data(player, subfactory) - local subfactory_data = { - player_index = player.index, - top_level_products = {}, - top_floor = nil, - matrix_free_items = subfactory.matrix_free_items - } - - for _, product in ipairs(Subfactory.get_in_order(subfactory, "Product")) do - local product_data = { - proto = product.proto, -- reference - amount = Item.required_amount(product) - } - table.insert(subfactory_data.top_level_products, product_data) - end - - local top_floor = Subfactory.get(subfactory, "Floor", 1) - subfactory_data.top_floor = generate_floor_data(player, subfactory, top_floor) - - return subfactory_data -end - --- Updates the active subfactories top-level data with the given result -function solver.set_subfactory_result(result) - local player_table = global.players[result.player_index] - local subfactory = player_table.active_subfactory - - subfactory.energy_consumption = result.energy_consumption - subfactory.pollution = result.pollution - subfactory.matrix_free_items = result.matrix_free_items - - -- If products are not present in the result, it means they have been produced - for _, product in pairs(Subfactory.get_in_order(subfactory, "Product")) do - local product_result_amount = result.Product[product.proto.type][product.proto.name] or 0 - product.amount = Item.required_amount(product) - product_result_amount - end - - update_object_items(subfactory, "Ingredient", result.Ingredient) - update_object_items(subfactory, "Byproduct", result.Byproduct) - - -- Determine satisfaction-amounts for all line ingredients - if player_table.preferences.ingredient_satisfaction then - solver.determine_ingredient_satisfaction(subfactory) - end -end - --- Updates the given line of the given floor of the active subfactory -function solver.set_line_result(result) - local subfactory = global.players[result.player_index].active_subfactory - if subfactory == nil then return end - - local floor = Subfactory.get(subfactory, "Floor", result.floor_id) - local line = Floor.get(floor, "Line", result.line_id) - - if line.subfloor ~= nil then - line.machine = { count = result.machine_count } - else - line.machine.count = result.machine_count - if line.machine.fuel ~= nil then line.machine.fuel.amount = result.fuel_amount end - - line.production_ratio = result.production_ratio - line.uncapped_production_ratio = result.uncapped_production_ratio - end - - line.energy_consumption = result.energy_consumption - line.pollution = result.pollution - - if line.production_ratio == 0 and line.subfloor == nil then - local recipe_proto = line.recipe.proto - set_zeroed_items(line, "Product", recipe_proto.products) - set_zeroed_items(line, "Ingredient", recipe_proto.ingredients) - else - update_object_items(line, "Product", result.Product) - update_object_items(line, "Byproduct", result.Byproduct) - update_object_items(line, "Ingredient", result.Ingredient) - end -end - - --- **** UTIL **** --- Speed can't go lower than 20%, or higher than 32676% due to the engine limit -local function cap_effect(value) - return math.min(math.max(value, MAGIC_NUMBERS.effects_lower_bound), MAGIC_NUMBERS.effects_upper_bound) -end - --- Determines the number of crafts per tick for the given data -function solver_util.determine_crafts_per_tick(machine_proto, recipe_proto, total_effects) - local machine_speed = machine_proto.speed * (1 + cap_effect(total_effects.speed)) - return machine_speed / recipe_proto.energy -end - --- Determine the amount of machines needed to produce the given recipe in the given context -function solver_util.determine_machine_count(crafts_per_tick, production_ratio, timescale, launch_sequence_time) - crafts_per_tick = math.min(crafts_per_tick, 60) -- crafts_per_tick need to be limited for these calculations - return (production_ratio * (crafts_per_tick * (launch_sequence_time or 0) + 1)) / (crafts_per_tick * timescale) -end - --- Calculates the production ratio that the given amount of machines would result in --- Formula derived from determine_machine_count(), isolating production_ratio and using machine_limit as machine_count -function solver_util.determine_production_ratio(crafts_per_tick, machine_limit, timescale, launch_sequence_time) - crafts_per_tick = math.min(crafts_per_tick, 60) -- crafts_per_tick need to be limited for these calculations - -- If launch_sequence_time is 0, the forumla is elegantly simplified to only the numerator - return (crafts_per_tick * machine_limit * timescale) / (crafts_per_tick * (launch_sequence_time or 0) + 1) -end - --- Calculates the product amount after applying productivity bonuses -function solver_util.determine_prodded_amount(item, crafts_per_tick, total_effects) - local productivity = math.max(total_effects.productivity, 0) -- no negative productivity - if productivity == 0 then return item.amount end - - if crafts_per_tick > 60 then productivity = ((1/60) * productivity) * crafts_per_tick end - - -- Return formula is a simplification of the following formula: - -- item.amount - item.proddable_amount + (item.proddable_amount * (productivity + 1)) - return item.amount + (item.proddable_amount * productivity) -end - --- Determines the amount of energy needed for a machine and the pollution that produces -function solver_util.determine_energy_consumption_and_pollution(machine_proto, recipe_proto, - fuel_proto, machine_count, total_effects) - local consumption_multiplier = 1 + cap_effect(total_effects.consumption) - local energy_consumption = machine_count * (machine_proto.energy_usage * 60) * consumption_multiplier - local drain = math.ceil(machine_count - 0.001) * (machine_proto.energy_drain * 60) - - local fuel_multiplier = (fuel_proto ~= nil) and fuel_proto.emissions_multiplier or 1 - local pollution_multiplier = 1 + cap_effect(total_effects.pollution) - local pollution = energy_consumption * (machine_proto.emissions * 60) * pollution_multiplier - * fuel_multiplier * recipe_proto.emissions_multiplier - - return (energy_consumption + drain), pollution -end - --- Determines the amount of fuel needed in the given context -function solver_util.determine_fuel_amount(energy_consumption, burner, fuel_value, timescale) - return ((energy_consumption / burner.effectivity) / fuel_value) * timescale -end diff --git a/factoryplanner_1.1.72/backend/calculation/structures.lua b/factoryplanner_1.1.72/backend/calculation/structures.lua deleted file mode 100644 index 7a3edac2..00000000 --- a/factoryplanner_1.1.72/backend/calculation/structures.lua +++ /dev/null @@ -1,122 +0,0 @@ --- Contains some structures and their 'methods' that are helpful during the calculation process -local structures = { - aggregate = {}, - class = {} -} - -function structures.aggregate.init(player_index, floor_id) - return { - player_index = player_index, - floor_id = floor_id, - machine_count = 0, - energy_consumption = 0, - pollution = 0, - production_ratio = nil, - uncapped_production_ratio = nil, - Product = structures.class.init(), - Byproduct = structures.class.init(), - Ingredient = structures.class.init() - } -end - --- Item might be an Item-object or a simple item {type, name, amount} -function structures.aggregate.add(aggregate, class_name, item, amount) - structures.class.add(aggregate[class_name], item, amount) -end - -function structures.aggregate.subtract(aggregate, class_name, item, amount) - structures.class.add(aggregate[class_name], item, -(amount or item.amount)) -end - --- Adds the first given aggregate to the second -function structures.aggregate.add_aggregate(from_aggregate, to_aggregate) - to_aggregate.energy_consumption = to_aggregate.energy_consumption + from_aggregate.energy_consumption - to_aggregate.pollution = to_aggregate.pollution + from_aggregate.pollution - - for _, class in ipairs{"Product", "Byproduct", "Ingredient"} do - for _, item in ipairs(structures.class.to_array(from_aggregate[class])) do - structures.aggregate.add(to_aggregate, class, item) - end - end -end - -function structures.class.init() - return { - item = {}, - fluid = {}, - entity = {} - } -end - --- Item might be an Item-object or a simple item {type, name, amount} -function structures.class.add(class, item, amount) - local type = (item.proto ~= nil) and item.proto.type or item.type - local name = (item.proto ~= nil) and item.proto.name or item.name - local amount_to_add = amount or item.amount - - local type_table = class[type] - type_table[name] = (type_table[name] or 0) + amount_to_add - if type_table[name] == 0 then type_table[name] = nil end -end - -function structures.class.subtract(class, item, amount) - structures.class.add(class, item, -(amount or item.amount)) -end - --- Puts the items into their destination-class in the given aggregate, stopping for balancing --- at the depot-class (Naming is hard, and that explanation is crap) -function structures.class.balance_items(class, aggregate, depot, destination) - for _, item in ipairs(structures.class.to_array(class)) do - local depot_amount = aggregate[depot][item.type][item.name] - - if depot_amount ~= nil then -- Use up depot items, if available - if depot_amount >= item.amount then - structures.aggregate.subtract(aggregate, depot, item) - else - structures.aggregate.subtract(aggregate, depot, item, depot_amount) - structures.aggregate.add(aggregate, destination, item, (item.amount - depot_amount)) - end - - else -- add to destination if this item is not present in the depot - structures.aggregate.add(aggregate, destination, item) - end - end -end - --- Returns an array that contains every item in the given data structure -function structures.class.to_array(class) - local array = {} - for type, items_of_type in pairs(class) do - for name, amount in pairs(items_of_type) do - table.insert(array, { - name = name, - type = type, - amount = amount - }) - end - end - return array -end - --- 'Deepcopies' the given class, with better performance than the generic deep copy -function structures.class.copy(class) - local copy = structures.class.init() - for type_name, type in pairs(class) do - local copy_type = copy[type_name] - for name, amount in pairs(type) do - copy_type[name] = amount - end - end - return copy -end - --- Counts the elements contained in the given class -function structures.class.count(class) - local n = 0 - for _, items_of_type in pairs(class) do - n = n + table_size(items_of_type) - end - return n -end - -return structures diff --git a/factoryplanner_1.1.72/backend/classes/Beacon.lua b/factoryplanner_1.1.72/backend/classes/Beacon.lua deleted file mode 100644 index 0b04a18a..00000000 --- a/factoryplanner_1.1.72/backend/classes/Beacon.lua +++ /dev/null @@ -1,139 +0,0 @@ ----@class FPBeacon ----@field proto FPBeaconPrototype ----@field amount number ----@field total_amount number ----@field module_set FPModuleSet ----@field total_effects ModuleEffects ----@field effects_tooltip string ----@field valid boolean ----@field parent FPLine ----@field class "Beacon" - --- This is a 'class' representing a (group of) beacon(s) and the modules attached to it -Beacon = {} - -function Beacon.init(beacon_proto, beacon_amount, total_amount, parent) - local beacon = { - proto = beacon_proto, - amount = beacon_amount or 0, - total_amount = total_amount, -- can be nil - module_set = nil, -- set right below - total_effects = nil, - effects_tooltip = "", - valid = true, - parent = parent, - class = "Beacon" - } - beacon.module_set = ModuleSet.init(beacon) - - return beacon -end - - -function Beacon.summarize_effects(self) - local effect_multiplier = self.proto.effectivity * self.amount - local effects = self.module_set.total_effects - for name, effect in pairs(effects) do - effects[name] = effect * effect_multiplier - end - self.total_effects = effects - self.effects_tooltip = util.gui.format_module_effects(effects, false) - - Line.summarize_effects(self.parent) -end - -function Beacon.check_module_compatibility(self, module_proto) - local recipe_proto, machine_proto = self.parent.recipe.proto, self.parent.machine.proto - - if next(module_proto.limitations) and recipe_proto.use_limitations - and not module_proto.limitations[recipe_proto.name] then - return false - end - - local machine_effects, beacon_effects = machine_proto.allowed_effects, self.proto.allowed_effects - if machine_effects == nil or beacon_effects == nil then - return false - else - for effect_name, _ in pairs(module_proto.effects) do - if machine_effects[effect_name] == false or beacon_effects[effect_name] == false then - return false - end - end - end - - return true -end - - -function Beacon.paste(self, object) - if object.class == "Beacon" then - object.parent = self.parent - self.parent.beacon = object - Line.summarize_effects(self.parent) - return true, nil - elseif object.class == "Module" and self.module_set ~= nil then - -- Only allow modules to be pasted if this is a non-fake beacon - return ModuleSet.paste(self.module_set, object) - else - return false, "incompatible_class" - end -end - -function Beacon.clone(self) - if not self then return nil end - local clone = Beacon.unpack(Beacon.pack(self)) - clone.parent = self.parent - Beacon.validate(clone) - return clone -end - - -function Beacon.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, nil), - amount = self.amount, - total_amount = self.total_amount, - module_set = ModuleSet.pack(self.module_set), - class = self.class - } -end - -function Beacon.unpack(packed_self) - local self = packed_self - - self.module_set = ModuleSet.unpack(packed_self.module_set) - self.module_set.parent = self - - return self -end - - --- Needs validation: proto, module_set -function Beacon.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, nil) - self.valid = (not self.proto.simplified) - - local machine = self.parent.machine -- make sure the machine can still be influenced by beacons - if machine.valid then self.valid = (machine.proto.allowed_effects ~= nil) and self.valid end - - if BEACON_OVERLOAD_ACTIVE then self.amount = 1 end - - self.valid = ModuleSet.validate(self.module_set) and self.valid - - return self.valid -end - --- Needs repair: module_set -function Beacon.repair(self, _) - if self.proto.simplified then -- if still simplified, the beacon can't be repaired and needs to be removed - return false - else -- otherwise, the modules need to be checked and removed if necessary - -- Remove invalid modules and normalize the remaining ones - self.valid = ModuleSet.repair(self.module_set) - - if self.module_set.module_count == 0 then return false end -- if the beacon is empty, remove it - end - - self.valid = true -- if it gets to here, the beacon was successfully repaired - return true -end diff --git a/factoryplanner_1.1.72/backend/classes/Collection.lua b/factoryplanner_1.1.72/backend/classes/Collection.lua deleted file mode 100644 index 000ff729..00000000 --- a/factoryplanner_1.1.72/backend/classes/Collection.lua +++ /dev/null @@ -1,209 +0,0 @@ ----@class FPCollection ----@field datasets { [integer]: `T` } ----@field index integer ----@field count integer ----@field class "Collection" - --- 'Class' representing a list of objects/datasets with some useful methods --- (An object only becomes a dataset once it is added to the collection) -Collection = {} - -function Collection.init() - return { - datasets = {}, - index = 0, - count = 0, - class = "Collection" - } -end - - --- Adds given object to the end of the collection -function Collection.add(self, object) - if not object then error("Can't insert nil dataset") end - - self.index = self.index + 1 - object.id = self.index - self.datasets[self.index] = object - - self.count = self.count + 1 - object.gui_position = self.count - - return object -- Returning it here feels nice -end - --- Inserts the given object at the given position, shifting other elements down -function Collection.insert_at(self, gui_position, object) - if not object then error("Can't insert nil dataset") end - if not gui_position then error("Can't insert at nil position") end - - self.index = self.index + 1 - object.id = self.index - - self.count = self.count + 1 - object.gui_position = gui_position - - for _, dataset in pairs(self.datasets) do - if dataset.gui_position >= gui_position then - dataset.gui_position = dataset.gui_position + 1 - end - end - - self.datasets[self.index] = object - return object -end - -function Collection.remove(self, dataset) - if not dataset then error("Can't remove nil dataset") end - - -- Move positions of datasets after the deleted one down by one - for _, d in pairs(self.datasets) do - if d.gui_position > dataset.gui_position then - d.gui_position = d.gui_position - 1 - end - end - - self.count = self.count - 1 - self.datasets[dataset.id] = nil - - if self.count ~= table_size(self.datasets) then error("Dataset count incorrect") end - - -- Returning the deleted position here to allow for GUI adjustments - return dataset.gui_position -end - --- Replaces the dataset with the new object in-place -function Collection.replace(self, dataset, object) - if not dataset then error("Can't replace nil dataset") end - if not object then error("Can't replace with nil object") end - - object.id = dataset.id - object.gui_position = dataset.gui_position - self.datasets[dataset.id] = object - return object -- Returning it here feels nice -end - - -function Collection.get(self, object_id) - return self.datasets[object_id] -end - --- For when order doesn't matter -function Collection.get_all(self) - return self.datasets -end - --- Return format: {[gui_position] = dataset} -function Collection.get_in_order(self, reverse) - local ordered_datasets = {} - for _, dataset in pairs(self.datasets) do - local table_position = (reverse) and (self.count - dataset.gui_position + 1) or dataset.gui_position - ordered_datasets[table_position] = dataset - end - return ordered_datasets -end - --- Returns the dataset specified by the gui_position -function Collection.get_by_gui_position(self, gui_position) - if gui_position == 0 then return nil end - for _, dataset in pairs(self.datasets) do - if dataset.gui_position == gui_position then - return dataset - end - end -end - --- Returns the dataset with the given name, nil if it doesn't exist -function Collection.get_by_name(self, name) - for _, dataset in pairs(self.datasets) do - -- Check against the prototype, if it exists - local check_against = dataset.proto or dataset - if check_against.name == name then - return dataset - end - end - return nil -end - --- Returns the dataset with the given type and name, nil if it doesn't exist -function Collection.get_by_type_and_name(self, type_name, name) - for _, dataset in pairs(self.datasets) do - -- Check against the prototype, if it exists - local check_against = dataset.proto or dataset - if check_against.type == type_name and check_against.name == name then - return dataset - end - end - return nil -end - -function Collection.shift(self, main_dataset, first_position, direction, spots) - if not main_dataset then error("Can't shift nil dataset") end - if not(direction == "negative" or direction == "positive") then error("Can't shift in invalid direction") end - - local original_position = main_dataset.gui_position - local new_position = nil - - if spots == nil then -- means shift-to-end - new_position = (direction == "positive") and self.count or first_position - else - if direction == "positive" then - new_position = math.min(original_position + spots, self.count) - else - new_position = math.max(original_position - spots, first_position) - end - end - - Collection.remove(self, main_dataset) - Collection.insert_at(self, new_position, main_dataset) -end - - --- Packs every dataset in this collection -function Collection.pack(self, object_class) - local packed_collection = { - objects = {}, - class = self.class - } - - for _, dataset in ipairs(Collection.get_in_order(self)) do - table.insert(packed_collection.objects, object_class.pack(dataset)) - end - - return packed_collection -end - --- Unpacks every dataset in this collection -function Collection.unpack(packed_self, parent, object_class) - local self = Collection.init() - self.class = packed_self.class - - for _, object in ipairs(packed_self.objects) do -- packed objects already in array order - local dataset = Collection.add(self, object_class.unpack(object)) - dataset.parent = parent - end - - return self -end - - --- Updates the validity of all datasets in this collection -function Collection.validate_datasets(self, object_class) - local valid = true - - for _, dataset in pairs(self.datasets) do - -- Stays true until a single dataset is invalid, then stays false - valid = object_class.validate(dataset) and valid - end - - return valid -end - --- Removes any invalid, unrepairable datasets from the collection -function Collection.repair_datasets(self, player, object_class) - for _, dataset in pairs(self.datasets) do - if not dataset.valid and not object_class.repair(dataset, player) then - _G[dataset.parent.class].remove(dataset.parent, dataset) - end - end -end diff --git a/factoryplanner_1.1.72/backend/classes/Factory.lua b/factoryplanner_1.1.72/backend/classes/Factory.lua deleted file mode 100644 index 674cf95a..00000000 --- a/factoryplanner_1.1.72/backend/classes/Factory.lua +++ /dev/null @@ -1,104 +0,0 @@ ----@class FPFactory ----@field Subfactory FPCollection ----@field selected_subfactory FPSubfactory? ----@field export_modset ModToVersion ----@field class "Factory" - --- 'Class' representing the whole of a players actual data, including all subfactories -Factory = {} - ----@return FPFactory -function Factory.init() - return { - Subfactory = Collection.init(), - selected_subfactory = nil, - -- A Factory can not become invalid - class = "Factory" - } -end - -function Factory.add(self, object) - object.parent = self - return Collection.add(self[object.class], object) -end - -function Factory.insert_at(self, gui_position, object) - object.parent = self - return Collection.insert_at(self[object.class], gui_position, object) -end - - -function Factory.remove(self, dataset) - local removed = Collection.remove(self[dataset.class], dataset) - if self.selected_subfactory and self.selected_subfactory.id == dataset.id then - self.selected_subfactory = self.Subfactory.datasets[1] -- can be nil - end - return removed -end - ----@return FPSubfactory -function Factory.get(self, class, dataset_id) - return Collection.get(self[class], dataset_id) -end - ----@return FPSubfactory[] -function Factory.get_all(self, class) - return Collection.get_all(self[class]) -end - ----@return FPSubfactory[] -function Factory.get_in_order(self, class, reverse) - return Collection.get_in_order(self[class], reverse) -end - -function Factory.get_by_gui_position(self, class, gui_position) - return Collection.get_by_gui_position(self[class], gui_position) -end - -function Factory.shift(self, dataset, first_position, direction, spots) - Collection.shift(self[dataset.class], dataset, first_position, direction, spots) -end - -function Factory.count(self, class) return self[class].count end - --- Imports every subfactory in the given string to this Factory, returning a reference to the first one ----@return FPSubfactory -function Factory.import_by_string(self, export_string) - local import_factory = util.porter.process_export_string(export_string) ---@cast import_factory -nil - -- No error handling here, as the export_string for this will always be known to work - - local first_subfactory = nil - for _, subfactory in pairs(Factory.get_in_order(import_factory, "Subfactory")) do - Factory.add(self, subfactory) - first_subfactory = first_subfactory or subfactory - end - - return first_subfactory -end - - --- Updates every top level product of this Factory to the given product definition type -function Factory.update_product_definitions(self, new_defined_by) - for _, subfactory in ipairs(Factory.get_in_order(self, "Subfactory")) do - Subfactory.update_product_definitions(subfactory, new_defined_by) - end -end - --- Updates the ingredient satisfaction data on every subfactory -function Factory.update_ingredient_satisfactions(self) - for _, subfactory in ipairs(Factory.get_in_order(self, "Subfactory")) do - solver.determine_ingredient_satisfaction(subfactory) - end -end - -function Factory.update_calculations(self, player) - for _, subfactory in ipairs(Factory.get_in_order(self, "Subfactory")) do - solver.update(player, subfactory) - end -end - --- Needs validation: Subfactory -function Factory.validate(self) - Collection.validate_datasets(self.Subfactory, Subfactory) - -- Factories can't be invalid, this is just to cleanly validate the subfactories -end diff --git a/factoryplanner_1.1.72/backend/classes/Floor.lua b/factoryplanner_1.1.72/backend/classes/Floor.lua deleted file mode 100644 index a1ad45b6..00000000 --- a/factoryplanner_1.1.72/backend/classes/Floor.lua +++ /dev/null @@ -1,187 +0,0 @@ ----@class FPFloor ----@field level integer ----@field origin_line FPLine? ----@field defining_line FPLine? ----@field Line FPCollection ----@field valid boolean ----@field id integer ----@field parent FPSubfactory ----@field class "Floor" - --- 'Class' representing a floor of a subfactory with individual assembly lines -Floor = {} - -function Floor.init(creating_line) - local floor = { - level = 1, -- top floor has a level of 1, it's initialized with Floor.init(nil) - origin_line = nil, -- set below, only if level > 1. The line this subfloor is attached to - defining_line = nil, -- set below, only if level > 1. First line of this subfloor - Line = Collection.init(), - valid = true, - id = nil, -- set by collection - parent = nil, -- set by parent - class = "Floor" - } - - -- Move given line, if it exists, to the subfloor, and create a new origin line - if creating_line ~= nil then - -- Subfloors have a level that is 1 higher than their creating_line's floor - floor.level = creating_line.parent.level + 1 - floor.parent = creating_line.parent - - local origin_line = Line.init(nil) -- No need to set a machine in this case - - origin_line.subfloor = floor -- Link up the newly created origin_line with its subfloor - floor.origin_line = origin_line -- and vice versa - - -- Replace the creating_line on its floor with the newly created origin_line - Floor.replace(creating_line.parent, creating_line, origin_line) - - Floor.add(floor, creating_line) -- Add the creating_line to the subfloor in the first spot - floor.defining_line = creating_line -- which makes it the defining_line on this floor - end - - return floor -end - - -function Floor.add(self, object) - object.parent = self - return Collection.add(self[object.class], object) -end - -function Floor.insert_at(self, gui_position, object) - object.parent = self - return Collection.insert_at(self[object.class], gui_position, object) -end - - -function Floor.remove(self, dataset) - -- Remove the subfloor(s) associated to a line recursively, so they don't hang around - if dataset.class == "Line" and dataset.subfloor ~= nil then - for _, line in pairs(Floor.get_in_order(dataset.subfloor, "Line")) do - if line.subfloor then Floor.remove(dataset.subfloor, line) end - end - Collection.remove(self.parent.Floor, dataset.subfloor) - end - - return Collection.remove(self[dataset.class], dataset) -end - --- Call only on subfloor; deletes itself while leaving defining_line intact -function Floor.reset(self) - local origin_line = self.origin_line - Floor.replace(origin_line.parent, origin_line, self.defining_line) - Subfactory.remove(self.parent, self) -end - - -function Floor.replace(self, dataset, object) - object.parent = self - return Collection.replace(self[dataset.class], dataset, object) -end - -function Floor.get(self, class, dataset_id) - return Collection.get(self[class], dataset_id) -end - -function Floor.get_all(self, class) - return Collection.get_all(self[class]) -end - -function Floor.get_in_order(self, class, reverse) - return Collection.get_in_order(self[class], reverse) -end - -function Floor.get_by_gui_position(self, class, gui_position) - return Collection.get_by_gui_position(self[class], gui_position) -end - -function Floor.shift(self, dataset, first_position, direction, spots) - Collection.shift(self[dataset.class], dataset, first_position, direction, spots) -end - -function Floor.count(self, class) return self[class].count end - - --- Returns the machines and modules needed to actually build this floor -function Floor.get_component_data(self, component_table) - local components = component_table or {machines={}, modules={}} - - local function add_component(table, proto, amount) - local component = table[proto.name] - if component == nil then - table[proto.name] = {proto = proto, amount = amount} - else - component.amount = component.amount + amount - end - end - - local function add_machine(entity_proto, amount) - if not entity_proto.built_by_item then return end - add_component(components.machines, entity_proto.built_by_item, amount) - end - - -- Doesn't count subfloors when looking at this specific floors. Maybe it should, which - -- would mean the subfactory machine total is equal to the floor total of the top floor - for _, line in pairs(Floor.get_in_order(self, "Line")) do - if line.subfloor == nil then - local machine = line.machine - local ceil_machine_count = math.ceil(machine.count - 0.001) - - add_machine(machine.proto, ceil_machine_count) - for _, module in pairs(ModuleSet.get_in_order(machine.module_set)) do - add_component(components.modules, module.proto, ceil_machine_count * module.amount) - end - - local beacon = line.beacon - if beacon and beacon.total_amount then - local ceil_total_amount = math.ceil(beacon.total_amount - 0.001) - - add_machine(beacon.proto, ceil_total_amount) - for _, module in pairs(ModuleSet.get_all(beacon.module_set)) do - add_component(components.modules, module.proto, ceil_total_amount * module.amount) - end - end - end - end - - return components -end - - -function Floor.pack(self) - return { - Line = Collection.pack(self.Line, Line), - level = self.level, - class = self.class - } -end - --- This unpack-function differs in that it gets called with the floor already existing --- This function should thus unpack itself into that floor, instead of creating a new one -function Floor.unpack(packed_self, self) - -- This can't use Collection.unpack for its lines because of its recursive nature - -- The calling function also needs to update its Subfactory to include the new subfloor references - for _, packed_line in pairs(packed_self.Line.objects) do - Floor.add(self, Line.unpack(packed_line, packed_self.level)) - end - -- return value is not needed here -end - - --- Needs validation: Line -function Floor.validate(self) - self.valid = Collection.validate_datasets(self.Line, Line) - return self.valid -end - --- Needs repair: Line -function Floor.repair(self, player) - -- Unrepairable lines get removed, so the subfactory will always be valid afterwards - Collection.repair_datasets(self.Line, player, Line) - self.valid = true - - -- Make this floor remove itself if it's empty after repairs - if self.level > 1 and self.Line.count < 2 then Floor.reset(self) end -end diff --git a/factoryplanner_1.1.72/backend/classes/Fuel.lua b/factoryplanner_1.1.72/backend/classes/Fuel.lua deleted file mode 100644 index 6ea572fa..00000000 --- a/factoryplanner_1.1.72/backend/classes/Fuel.lua +++ /dev/null @@ -1,71 +0,0 @@ ----@class FPFuel ----@field proto FPFuelPrototype ----@field amount number ----@field satisfied_amount number ----@field valid boolean ----@field parent FPLine ----@field class "Fuel" - --- This is essentially just a wrapper-'class' for a fuel prototype to add some data to it -Fuel = {} - -function Fuel.init(proto) - return { - proto = proto, - amount = 0, -- produced amount - satisfied_amount = 0, -- used with ingredient satisfaction - valid = true, - parent = nil, - class = "Fuel" - } -end - - -function Fuel.paste(self, object) - if object.class == "Fuel" then - local burner = self.parent.proto.burner -- will exist if there is fuel to paste on - for category_name, _ in pairs(burner.categories) do - if self.proto.category == category_name then - self.proto = object.proto - return true, nil - end - end - return false, "incompatible" - else - return false, "incompatible_class" - end -end - - -function Fuel.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, self.proto.category), - amount = self.amount, -- conserve for cloning - class = self.class - } -end - -function Fuel.unpack(packed_self) - return packed_self -end - - --- Needs validation: proto -function Fuel.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, "category") - self.valid = (not self.proto.simplified) - - -- Make sure the fuel categories are still compatible - if self.valid and self.parent.valid then - local burner = self.parent.proto.burner - self.valid = burner and burner.categories[self.proto.category] ~= nil - end - - return self.valid -end - --- Needs repair: -function Fuel.repair(_, _) - -- If the fuel-proto is still simplified, validate couldn't repair it, so it has to be removed - return false -- the parent machine will try to replace it with another fuel of the same category -end diff --git a/factoryplanner_1.1.72/backend/classes/Item.lua b/factoryplanner_1.1.72/backend/classes/Item.lua deleted file mode 100644 index 224bfb5d..00000000 --- a/factoryplanner_1.1.72/backend/classes/Item.lua +++ /dev/null @@ -1,157 +0,0 @@ ----@class RequiredAmount ----@field defined_by "amount" | "belts" | "lanes" ----@field amount number ----@field belt_proto FPBeltPrototype - ----@class FPItem ----@field proto FPItemPrototype ----@field amount number ----@field required_amount RequiredAmount ----@field satisfied_amount number ----@field top_level boolean ----@field valid boolean ----@field id integer ----@field gui_position integer ----@field parent FPSubfactory | FPLine ----@field class "Product" | "Byproduct" | "Ingredient" - --- 'Class' representing an item in the general sense -Item = {} -Product, Byproduct, Ingredient = Item, Item, Item -- allows _G[class] to work for all items - --- Initialised by passing a prototype from the all_items global table --- This is set up as a top-level item if a required_amount is given -function Item.init(proto, class, amount, required_amount) - -- Special case for non-product top level items - if required_amount == 0 then required_amount = {defined_by="amount", amount=0} end - - return { - proto = proto, - amount = amount or 0, -- produced amount - required_amount = required_amount, -- is a table - satisfied_amount = 0, -- used with ingredient satisfaction - top_level = (required_amount ~= nil), - valid = true, - id = nil, -- set by collection - gui_position = nil, -- set by collection - parent = nil, -- set by parent - class = class - } -end - - --- Returns the converted numeric required_amount for this (top level) item -function Item.required_amount(self) - local req_amount = self.required_amount - if req_amount.defined_by == "amount" then - return req_amount.amount - else -- defined_by == "belts"/"lanes" - -- If this is defined by lanes, only half of the throughput of a full belt needs to be considered - local multiplier = (req_amount.defined_by == "belts") and 1 or 0.5 - local timescale = self.parent.timescale - return req_amount.amount * (req_amount.belt_proto.throughput * multiplier) * timescale - end -end - - -function Item.paste(self, object) -- this is implicitly only called on top level items - if object.class == "Product" or object.class == "Byproduct" - or object.class == "Ingredient" or object.class == "Fuel" then - local existing_item = Subfactory.get_by_name(self.parent, self.class, object.proto.name) - -- Avoid duplicate items, but allow pasting over the same item proto - if existing_item and existing_item.proto.name == object.proto.name - and not (self.proto.name == object.proto.name) then - return false, "already_exists" - end - - -- Convert object into the appropriate top-level form if necessary - if not (object.top_level and object.class == self.class) then - local required_amount = {defined_by = "amount", amount = object.amount} - object = Item.init(object.proto, self.class, 0, required_amount) - end - - -- Detect when this is called on a fake item and add instead of replacing - if not self.amount then Subfactory.add(self.parent, object) - else Subfactory.replace(self.parent, self, object) end - return true, nil - - elseif object.class == "Line" then - local relevant_line = (object.subfloor) and object.subfloor.defining_line or object - for _, product in pairs(Line.get_in_order(relevant_line, "Product")) do - local fake_item = {proto={name=""}, parent=self.parent, class=self.class} - Item.paste(fake_item, product) -- avoid duplicating existing items - end - - local top_floor = Subfactory.get(self.parent, "Floor", 1) -- line count can be 0 - if object.subfloor then -- if the line has a subfloor, paste its contents on the top floor - local fake_line = {parent=top_floor, class="Line", gui_position=top_floor.Line.count} - for _, line in pairs(Floor.get_in_order(object.subfloor, "Line")) do - Line.paste(fake_line, line) - fake_line.gui_position = fake_line.gui_position + 1 - end - else -- if the line has no subfloor, just straight paste it onto the top floor - local fake_line = {parent=top_floor, class="Line", gui_position=top_floor.Line.count} - Line.paste(fake_line, object) - end - return true, nil - else - return false, "incompatible_class" - end -end - - -function Item.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, self.proto.type), - amount = self.amount, -- conserve for cloning non-product items - required_amount = (self.top_level) and { - defined_by = self.required_amount.defined_by, - amount = self.required_amount.amount, - belt_proto = (self.required_amount.defined_by ~= "amount") - and prototyper.util.simplify_prototype(self.required_amount.belt_proto, nil) - } or nil, - top_level = self.top_level, - class = self.class - } -end - -function Item.unpack(packed_self) - return packed_self -end - - --- Needs validation: proto, required_amount -function Item.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, "type") - self.valid = (not self.proto.simplified) - - -- Validate the belt_proto if the item proto is still valid, ie not simplified - local req_amount = self.required_amount - if req_amount and req_amount.defined_by ~= "amount" then - local belt_throughput = req_amount.belt_proto.throughput - req_amount.belt_proto = prototyper.util.validate_prototype_object(req_amount.belt_proto, nil) - self.valid = (not req_amount.belt_proto.simplified) and self.valid - - -- If the proto has to be simplified, conserve the throughput, so repair can convert it to an amount-spec - if req_amount.belt_proto.simplified then req_amount.belt_proto.throughput = belt_throughput end - end - - return self.valid -end - --- Needs repair: required_amount --- This will only be called on top level items, so they can be treated as such -function Item.repair(self, _) - -- If the item-proto is still simplified, validate couldn't repair it, so it has to be removed - if self.proto.simplified then return false end - - -- If the item is fine, the belt_proto has to be the things that is invalid. Thus, we will repair - -- this item by converting it to be defined by amount, so it can be preserved in some form - self.required_amount = { - defined_by = "amount", - amount = Item.required_amount(self) - } - self.valid = true - - return self.valid -end diff --git a/factoryplanner_1.1.72/backend/classes/Line.lua b/factoryplanner_1.1.72/backend/classes/Line.lua deleted file mode 100644 index ec58c9d3..00000000 --- a/factoryplanner_1.1.72/backend/classes/Line.lua +++ /dev/null @@ -1,428 +0,0 @@ ----@class FPLine ----@field recipe FPRecipe? ----@field active boolean? ----@field done boolean ----@field percentage number ----@field machine FPMachine? ----@field beacon FPBeacon? ----@field total_effects ModuleEffects ----@field effects_tooltip LocalisedString ----@field energy_consumption number ----@field pollution number ----@field Product FPCollection ----@field Byproduct FPCollection ----@field Ingredient FPCollection ----@field priority_product_proto FPItemPrototype ----@field comment string? ----@field production_ratio number? ----@field uncapped_production_ratio number? ----@field subfloor FPFloor? ----@field valid boolean ----@field id integer ----@field gui_position integer ----@field parent FPFloor ----@field class "Line" - --- 'Class' representing an assembly line producing a recipe or representing a subfloor -Line = {} - -function Line.init(recipe) - local is_standalone_line = (recipe ~= nil) - - return { - recipe = recipe, -- can be nil - active = (is_standalone_line) and true or nil, - done = false, - percentage = (is_standalone_line) and 100 or nil, - machine = nil, - beacon = nil, - total_effects = nil, - effects_tooltip = "", - energy_consumption = 0, - pollution = 0, - Product = Collection.init(), - Byproduct = Collection.init(), - Ingredient = Collection.init(), - priority_product_proto = nil, -- set by the user - comment = nil, - production_ratio = (is_standalone_line) and 0 or nil, - uncapped_production_ratio = (is_standalone_line) and 0 or nil, - subfloor = nil, - valid = true, - id = nil, -- set by collection - gui_position = nil, -- set by collection - parent = nil, -- set by parent - class = "Line" - } -end - - -function Line.add(self, object) - object.parent = self - return Collection.add(self[object.class], object) -end - -function Line.remove(self, dataset) - return Collection.remove(self[dataset.class], dataset) -end - -function Line.replace(self, dataset, object) - object.parent = self - return Collection.replace(self[dataset.class], dataset, object) -end - -function Line.clear(self, class) - self[class] = Collection.init() -end - - -function Line.get(self, class, dataset_id) - return Collection.get(self[class], dataset_id) -end - -function Line.get_all(self, class) - return Collection.get_all(self[class]) -end - -function Line.get_in_order(self, class, reverse) - return Collection.get_in_order(self[class], reverse) -end - -function Line.get_by_gui_position(self, class, gui_position) - return Collection.get_by_gui_position(self[class], gui_position) -end - -function Line.get_by_name(self, class, name) - return Collection.get_by_name(self[class], name) -end - -function Line.get_by_type_and_name(self, class, type, name) - return Collection.get_by_type_and_name(self[class], type, name) -end - - --- Returns whether the given machine can be used for this line/recipe -function Line.is_machine_applicable(self, machine_proto) - local recipe_proto = self.recipe.proto - local valid_ingredient_count = (machine_proto.ingredient_limit >= recipe_proto.type_counts.ingredients.items) - local valid_input_channels = (machine_proto.fluid_channels.input >= recipe_proto.type_counts.ingredients.fluids) - local valid_output_channels = (machine_proto.fluid_channels.output >= recipe_proto.type_counts.products.fluids) - - return (valid_ingredient_count and valid_input_channels and valid_output_channels) -end - --- Sets this line's machine to be the given prototype -function Line.change_machine_to_proto(self, player, proto) - if not self.machine then - self.machine = Machine.init(proto, self) - ModuleSet.summarize_effects(self.machine.module_set) - else - self.machine.proto = proto - - ModuleSet.normalize(self.machine.module_set, {compatibility=true, trim=true, effects=true}) - if self.machine.proto.allowed_effects == nil then Line.set_beacon(self, nil) end - end - - -- Make sure the machine's fuel still applies - Machine.normalize_fuel(self.machine, player) - - return true -end - --- Up- or downgrades this line's machine, if possible --- Returns false if no compatible machine can be found, true otherwise -function Line.change_machine_by_action(self, player, action, current_proto) - local current_machine_proto = current_proto or self.machine.proto - local machines_category = PROTOTYPE_MAPS.machines[current_machine_proto.category] - local category_machines = global.prototypes.machines[machines_category.id].members - - if action == "upgrade" then - local max_machine_id = #category_machines - - while current_machine_proto.id < max_machine_id do - current_machine_proto = category_machines[current_machine_proto.id + 1] - - if Line.is_machine_applicable(self, current_machine_proto) then - Line.change_machine_to_proto(self, player, current_machine_proto) - return true - end - end - else -- action == "downgrade" - while current_machine_proto.id > 1 do - current_machine_proto = category_machines[current_machine_proto.id - 1] - - if Line.is_machine_applicable(self, current_machine_proto) then - Line.change_machine_to_proto(self, player, current_machine_proto) - return true - end - end - end - - return false -- if the above loop didn't return, no machine could be found, so we return false -end - --- Changes this line's machine to its default, if possible --- Returns false if no compatible machine can be found, true otherwise -function Line.change_machine_to_default(self, player) - local machine_category_id = PROTOTYPE_MAPS.machines[self.recipe.proto.category].id - -- All categories are guaranteed to have at least one machine, so this is never nil - local default_machine_proto = prototyper.defaults.get(player, "machines", machine_category_id) - - -- If the default is applicable, just set it straight away - if Line.is_machine_applicable(self, default_machine_proto) then - Line.change_machine_to_proto(self, player, default_machine_proto) - return true - - -- Otherwise, go up, then down the category to find an alternative - elseif Line.change_machine_by_action(self, player, "upgrade", default_machine_proto) then - return true - elseif Line.change_machine_by_action(self, player, "downgrade", default_machine_proto) then - return true - - else -- if no machine in the whole category is applicable, return false - return false - end -end - - -function Line.set_beacon(self, beacon) - self.beacon = beacon -- can be nil - - if beacon ~= nil then - self.beacon.parent = self - ModuleSet.normalize(self.beacon.module_set, {sort=true, effects=true}) - else - Line.summarize_effects(self) - end -end - - -function Line.apply_mb_defaults(self, player) - ModuleSet.clear(self.machine.module_set) - Line.set_beacon(self, nil) - - local mb_defaults = util.globals.preferences(player).mb_defaults - local machine_module, secondary_module = mb_defaults.machine, mb_defaults.machine_secondary - local module_set, module_limit = self.machine.module_set, self.machine.proto.module_limit - local message = nil - - if machine_module and Machine.check_module_compatibility(self.machine, machine_module) then - ModuleSet.add(module_set, machine_module, module_limit) - - elseif secondary_module and Machine.check_module_compatibility(self.machine, secondary_module) then - ModuleSet.add(module_set, secondary_module, module_limit) - - elseif machine_module then -- only show an error if any module default is actually set - message = {text={"fp.warning_module_not_compatible", {"fp.pl_module", 1}}, category="warning"} - end - ModuleSet.summarize_effects(self.machine.module_set) - - -- Add default beacon modules, if desired by the user - local beacon_module_proto, beacon_count = mb_defaults.beacon, mb_defaults.beacon_count - if BEACON_OVERLOAD_ACTIVE then beacon_count = 1 end - local beacon_proto = prototyper.defaults.get(player, "beacons") -- this will always exist - - if beacon_module_proto ~= nil and beacon_count ~= nil then - local blank_beacon = Beacon.init(beacon_proto, beacon_count, nil, self) - - if Beacon.check_module_compatibility(blank_beacon, beacon_module_proto) then - ModuleSet.add(blank_beacon.module_set, beacon_module_proto, beacon_proto.module_limit) - Line.set_beacon(self, blank_beacon) -- summarizes effects on its own - - elseif message == nil then -- don't overwrite previous message, if it exists - message = {text={"fp.warning_module_not_compatible", {"fp.pl_beacon", 1}}, category="warning"} - end - end - - return message -end - - -function Line.summarize_effects(self) - local beacon_effects = (self.beacon) and self.beacon.total_effects or nil - - local effects = {consumption = 0, speed = 0, productivity = 0, pollution = 0} - for _, effect_table in pairs({self.machine.total_effects, beacon_effects}) do - for name, effect in pairs(effect_table) do - if name == "base_prod" or name == "mining_prod" then - effects["productivity"] = effects["productivity"] + effect - else - effects[name] = effects[name] + effect - end - end - end - self.total_effects = effects - self.effects_tooltip = util.gui.format_module_effects(effects, true) -end - - --- Checks whether the given recipe's products are used on the given floor --- The triple loop is crappy, but it's the simplest way to check -local function check_product_compatibiltiy(floor, recipe) - for _, product in pairs(recipe.proto.products) do - for _, line in pairs(Floor.get_all(floor, "Line")) do - for _, ingredient in pairs(Line.get_all(line, "Ingredient")) do - if ingredient.proto.type == product.type and ingredient.proto.name == product.name then - return true - end - end - end - end - return false -end - -function Line.paste(self, object) - if object.class == "Line" then - if self.parent.level > 1 then -- make sure the recipe is allowed on this floor - local relevant_line = (object.subfloor) and object.subfloor.defining_line or object - if not check_product_compatibiltiy(self.parent, relevant_line.recipe) then - return false, "recipe_irrelevant" -- found no use for the recipe's products - end - end - - if object.subfloor then Subfactory.add_subfloor_references(self.parent.parent, object) end - Floor.insert_at(self.parent, self.gui_position + 1, object) - return true, nil - else - return false, "incompatible_class" - end -end - - -function Line.pack(self) - local packed_line = { - comment = self.comment, - class = self.class - } - - if self.subfloor ~= nil then - packed_line.subfloor = Floor.pack(self.subfloor) - else - packed_line.recipe = Recipe.pack(self.recipe) - - packed_line.active = self.active - packed_line.done = self.done - packed_line.percentage = self.percentage - - packed_line.machine = Machine.pack(self.machine) - packed_line.beacon = (self.beacon) and Beacon.pack(self.beacon) or nil - - -- If this line has no priority_product, the function will return nil - local priority_proto = self.priority_product_proto - if priority_proto ~= nil then - packed_line.priority_product_proto = prototyper.util.simplify_prototype(priority_proto, priority_proto.type) - end - - packed_line.Product = Collection.pack(self.Product, Item) -- conserve for cloning - end - - return packed_line -end - -function Line.unpack(packed_self, parent_level) - if packed_self.subfloor ~= nil then - local self = Line.init() -- empty line which gets the subfloor - local subfloor = Floor.init() -- empty floor to be manually adjusted as necessary - - subfloor.level = parent_level + 1 - subfloor.origin_line = self - self.subfloor = subfloor - - Floor.unpack(packed_self.subfloor, subfloor) - subfloor.defining_line = subfloor.Line.datasets[1] - - return self - else - local self = Line.init(packed_self.recipe) - - self.active = packed_self.active - self.done = packed_self.done - self.percentage = packed_self.percentage - - self.machine = Machine.unpack(packed_self.machine) - self.machine.parent = self - - self.beacon = (packed_self.beacon) and Beacon.unpack(packed_self.beacon) or nil - if self.beacon then self.beacon.parent = self end - -- Effects summarized by the ensuing validation - - -- The prototype will be automatically unpacked by the validation process - self.priority_product_proto = packed_self.priority_product_proto - self.comment = packed_self.comment - - self.Product = Collection.unpack(packed_self.Product, self, Item) -- conserved for cloning - - return self - end -end - - --- Needs validation: recipe, machine, beacon, priority_product_proto, subfloor -function Line.validate(self) - self.valid = true - - if self.subfloor then -- when this line has a subfloor, only the subfloor need to be checked - self.valid = Floor.validate(self.subfloor) and self.valid - - else - self.valid = Recipe.validate(self.recipe) and self.valid - - self.valid = Machine.validate(self.machine) and self.valid - - if self.beacon then self.valid = Beacon.validate(self.beacon) and self.valid end - - if self.priority_product_proto then - self.priority_product_proto = prototyper.util.validate_prototype_object(self.priority_product_proto, "type") - self.valid = (not self.priority_product_proto.simplified) and self.valid - end - - self.valid = Collection.validate_datasets(self.Product, Item) and self.valid -- conserved for cloning - - -- Effects summarized by machine/beacon validation - end - - return self.valid -end - --- Needs repair: recipe, machine, beacon, priority_product_proto, subfloor -function Line.repair(self, player) - self.valid = true - - if self.subfloor then - local subfloor = self.subfloor - if not subfloor.valid then - if not subfloor.defining_line.valid then - self.valid = false -- if the defining line is invalid, this whole thing is toast - else - Floor.repair(self.subfloor, player) - end - end - - else - if not self.recipe.valid then - self.valid = Recipe.repair(self.recipe, nil) - end - - if self.valid and not self.machine.valid then - self.valid = Machine.repair(self.machine, player) - end - - if self.valid and self.beacon and not self.beacon.valid then - -- Repairing a beacon always either fixes or gets it removed, so no influence on validity - if not Beacon.repair(self.beacon, nil) then self.beacon = nil end - end - - if self.valid and self.priority_product_proto and self.priority_product_proto.simplified then - self.priority_product_proto = nil - end - - -- effects summarized by machine/beacon repair - end - - -- Clear item prototypes so we don't need to rely on the solver to remove them - Line.clear(self, "Product") - Line.clear(self, "Byproduct") - Line.clear(self, "Ingredient") - - return self.valid -end diff --git a/factoryplanner_1.1.72/backend/classes/Machine.lua b/factoryplanner_1.1.72/backend/classes/Machine.lua deleted file mode 100644 index d6411554..00000000 --- a/factoryplanner_1.1.72/backend/classes/Machine.lua +++ /dev/null @@ -1,189 +0,0 @@ ----@class FPMachine ----@field proto FPMachinePrototype ----@field count number ----@field limit number? ----@field force_limit boolean ----@field fuel FPFuel? ----@field module_set FPModuleSet ----@field total_effects ModuleEffects ----@field effects_tooltip string ----@field valid boolean ----@field parent FPLine ----@field class "Machine" - --- Class representing a machine with its attached modules and fuel -Machine = {} - -function Machine.init(proto, parent) - local machine = { - proto = proto, - count = 0, - limit = nil, -- will be set by the user - force_limit = true, -- ignored if limit is not set - fuel = nil, -- needs to be set by calling Machine.find_fuel afterwards - module_set = nil, -- set right below - total_effects = nil, - effects_tooltip = "", - valid = true, - parent = parent, - class = "Machine" - } - machine.module_set = ModuleSet.init(machine) - - return machine -end - - -function Machine.normalize_fuel(self, player) - if self.proto.energy_type ~= "burner" then self.fuel = nil; return end - -- no need to continue if this machine doesn't have a burner - - local burner = self.proto.burner - -- Check if fuel has a valid category for this machine, replace otherwise - if self.fuel and not burner.categories[self.fuel.proto.category] then self.fuel = nil end - - -- If this machine has fuel already, don't replace it - if self.fuel == nil then - -- Use the first category of this machine's burner as the default one - local fuel_category_name, _ = next(burner.categories, nil) - local fuel_category_id = PROTOTYPE_MAPS.fuels[fuel_category_name].id - - local default_fuel_proto = prototyper.defaults.get(player, "fuels", fuel_category_id) - self.fuel = Fuel.init(default_fuel_proto) - self.fuel.parent = self - end -end - -function Machine.summarize_effects(self, mining_prod) - local effects = self.module_set.total_effects - - effects["base_prod"] = self.proto.base_productivity or nil - effects["mining_prod"] = mining_prod or nil - - self.total_effects = effects - self.effects_tooltip = util.gui.format_module_effects(effects, false) - - Line.summarize_effects(self.parent) -end - -function Machine.check_module_compatibility(self, module_proto) - local recipe = self.parent.recipe - - if self.proto.module_limit == 0 then return false end - - if next(module_proto.limitations) and recipe.proto.use_limitations - and not module_proto.limitations[recipe.proto.name] then - return false - end - - local allowed_effects = self.proto.allowed_effects - if allowed_effects == nil then - return false - else - for effect_name, _ in pairs(module_proto.effects) do - if allowed_effects[effect_name] == false then - return false - end - end - end - - return true -end - - -function Machine.paste(self, object) - if object.class == "Machine" then - -- See if the pasted machine also exists in this machine's category, and use it if compatible - local found_machine = prototyper.util.find_prototype("machines", object.proto.name, self.proto.category) - - if found_machine and Line.is_machine_applicable(self.parent, found_machine) then - self.parent.machine = object - object.parent = self.parent - object.proto = found_machine -- make sure to set this to the right category machine - - ModuleSet.normalize(object.module_set, {compatibility=true, effects=true}) - Line.summarize_effects(object.parent) - return true, nil - else - return false, "incompatible" - end - elseif object.class == "Module" then - return ModuleSet.paste(self.module_set, object) - else - return false, "incompatible_class" - end -end - -function Machine.clone(self) - local clone = Machine.unpack(Machine.pack(self)) - clone.parent = self.parent - clone.count = self.count -- keep around to avoid recalc being needed - Machine.validate(clone) - return clone -end - - -function Machine.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, self.proto.category), - limit = self.limit, - force_limit = self.force_limit, - fuel = (self.fuel) and Fuel.pack(self.fuel) or nil, - module_set = ModuleSet.pack(self.module_set), - class = self.class - } -end - -function Machine.unpack(packed_self) - local self = packed_self - - self.fuel = (packed_self.fuel) and Fuel.unpack(packed_self.fuel) or nil - if self.fuel then self.fuel.parent = self end - - self.module_set = ModuleSet.unpack(packed_self.module_set) - self.module_set.parent = self - - return self -end - - --- Needs validation: proto, fuel, module_set -function Machine.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, "category") - self.valid = (not self.proto.simplified) - - local parent_line = self.parent - if self.valid and parent_line.valid and parent_line.recipe.valid then - self.valid = Line.is_machine_applicable(parent_line, self.proto) - end - - -- If the machine changed to not use a burner, remove its fuel - if not self.proto.burner then self.fuel = nil end - if self.fuel then self.valid = Fuel.validate(self.fuel) and self.valid end - - self.valid = ModuleSet.validate(self.module_set) and self.valid - - return self.valid -end - --- Needs repair: proto, fuel, module_set -function Machine.repair(self, player) - -- If the prototype is still simplified, it couldn't be fixed by validate - -- A final possible fix is to replace this machine with the default for its category - if self.proto.simplified and not Line.change_machine_to_default(self.parent, player) then - return false -- if this happens, the whole line can not be salvaged - end - self.valid = true -- if it gets to this, change_machine was successful and the machine is valid - -- It just might need to cleanup some fuel and/or modules - - if self.fuel and not self.fuel.valid and not Fuel.repair(self.fuel) then - -- If fuel is unrepairable, replace it with a default value - self.fuel = nil - Machine.normalize_fuel(self, player) - end - - -- Remove invalid modules and normalize the remaining ones - ModuleSet.repair(self.module_set) - - return true -end diff --git a/factoryplanner_1.1.72/backend/classes/Module.lua b/factoryplanner_1.1.72/backend/classes/Module.lua deleted file mode 100644 index 76053e76..00000000 --- a/factoryplanner_1.1.72/backend/classes/Module.lua +++ /dev/null @@ -1,104 +0,0 @@ ----@class FPModule ----@field proto FPModulePrototype ----@field amount integer ----@field total_effects ModuleEffects ----@field effects_tooltip string ----@field valid boolean ----@field id integer ----@field gui_position integer ----@field parent FPModuleSet ----@field class "Module" - --- 'Class' representing an module -Module = {} - --- Initialised by passing a prototype from the all_moduless global table -function Module.init(proto, amount, parent) - local module = { - proto = proto, - amount = amount, - total_effects = nil, - effects_tooltip = "", - valid = true, - id = nil, -- set by collection - gui_position = nil, -- set by collection - parent = parent, - class = "Module" - } - Module.summarize_effects(module) - - return module -end - - -function Module.set_amount(self, new_amount) - self.amount = new_amount - ModuleSet.count_modules(self.parent) - Module.summarize_effects(self) -end - -function Module.summarize_effects(self) - local effects = {consumption = 0, speed = 0, productivity = 0, pollution = 0} - for name, effect in pairs(self.proto.effects) do - effects[name] = effect.bonus * self.amount - end - self.total_effects = effects - self.effects_tooltip = util.gui.format_module_effects(effects, false) -end - - -function Module.paste(self, object) - if object.class == "Module" then - if ModuleSet.check_compatibility(self.parent, object.proto) then - if ModuleSet.get_by_name(self.parent, object.proto.name) and object.proto.name ~= self.proto.name then - return false, "already_exists" - else - object.amount = math.min(object.amount, self.amount + self.parent.empty_slots) - Module.summarize_effects(object) - - ModuleSet.replace(self.parent, self, object) - ModuleSet.summarize_effects(self.parent) - return true, nil - end - else - return false, "incompatible" - end - else - return false, "incompatible_class" - end -end - - -function Module.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, self.proto.category), - amount = self.amount, - class = self.class - } -end - -function Module.unpack(packed_self) - return packed_self -end - - --- Needs validation: proto -function Module.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, "category") - self.valid = (not self.proto.simplified) - - -- Check whether the module is still compatible with its machine or beacon - if self.valid and self.parent.valid then - self.valid = _G[self.parent.parent.class].check_module_compatibility(self.parent.parent, self.proto) - end - - if self.valid then Module.summarize_effects(self) end - - return self.valid -end - --- Needs repair: -function Module.repair(_, _) - -- If the prototype is still simplified, it couldn't be fixed by validate, so it has to be removed - return false -end diff --git a/factoryplanner_1.1.72/backend/classes/ModuleSet.lua b/factoryplanner_1.1.72/backend/classes/ModuleSet.lua deleted file mode 100644 index 57ede56d..00000000 --- a/factoryplanner_1.1.72/backend/classes/ModuleSet.lua +++ /dev/null @@ -1,240 +0,0 @@ ----@class FPModuleSet ----@field modules FPCollection ----@field module_count integer ----@field module_limit integer ----@field empty_slots integer ----@field total_effects ModuleEffects ----@field valid boolean ----@field parent FPMachine | FPBeacon ----@field class "ModuleSet" - --- 'Class' representing a group of modules in a machine or beacon -ModuleSet = {} - -function ModuleSet.init(parent) - return { - modules = Collection.init(), - module_count = 0, - module_limit = parent.proto.module_limit, - empty_slots = parent.proto.module_limit, - total_effects = nil, -- summarized by calling function - valid = true, - parent = parent, - class = "ModuleSet" - } -end - - -function ModuleSet.add(self, proto, amount) - local object = Module.init(proto, amount, self) - local dataset = Collection.add(self.modules, object) - ModuleSet.count_modules(self) - return dataset -end - -function ModuleSet.remove(self, dataset) - Collection.remove(self.modules, dataset) - ModuleSet.count_modules(self) -end - -function ModuleSet.replace(self, dataset, object) - object.parent = self - local replacement = Collection.replace(self.modules, dataset, object) - ModuleSet.count_modules(self) - return replacement -end - -function ModuleSet.clear(self) - self.modules = Collection.init() - ModuleSet.count_modules(self) -end - -function ModuleSet.get(self, dataset_id) - return Collection.get(self.modules, dataset_id) -end - -function ModuleSet.get_by_name(self, name) - return Collection.get_by_name(self.modules, name) -end - -function ModuleSet.get_all(self) - return Collection.get_all(self.modules) -end - -function ModuleSet.get_in_order(self, reverse) - return Collection.get_in_order(self.modules, reverse) -end - -function ModuleSet.get_module_kind_amount(self) - return self.modules.count -end - - -function ModuleSet.normalize(self, features) - self.module_limit = self.parent.proto.module_limit - - if features.compatibility then ModuleSet.verify_compatibility(self) end - if features.trim then ModuleSet.trim(self) end - if features.sort then ModuleSet.sort(self) end - if features.effects then ModuleSet.summarize_effects(self) end - - ModuleSet.count_modules(self) -end - -function ModuleSet.count_modules(self) - local count = 0 - for _, module in pairs(self.modules.datasets) do - count = count + module.amount - end - self.module_count = count - self.empty_slots = self.module_limit - self.module_count -end - -function ModuleSet.verify_compatibility(self) - local modules_to_remove = {} - for _, module in ipairs(ModuleSet.get_in_order(self)) do - if not ModuleSet.check_compatibility(self, module.proto) then - table.insert(modules_to_remove, module) - end - end - - -- Actually remove incompatible modules; counts updated by calling function - for _, module in pairs(modules_to_remove) do ModuleSet.remove(self, module) end -end - -function ModuleSet.trim(self) - local module_count, module_limit = self.module_count, self.module_limit - -- Return if the module count is within limits - if module_count <= module_limit then return end - - local modules_to_remove = {} - -- Traverse modules in reverse to trim them off the end - for _, module in ipairs(ModuleSet.get_in_order(self, true)) do - -- Remove a whole module if it brings the count to >= limit - if (module_count - module.amount) >= module_limit then - table.insert(modules_to_remove, module) - module_count = module_count - module.amount - else -- Otherwise, diminish the amount on the module appropriately and break - local new_amount = module.amount - (module_count - module_limit) - Module.set_amount(module, new_amount) - break - end - end - - -- Actually remove superfluous modules; counts updated by calling function - for _, module in pairs(modules_to_remove) do ModuleSet.remove(self, module) end -end - --- Sorts modules in a deterministic fashion so they are in the same order for every line -function ModuleSet.sort(self) - local modules_by_name = {} - for _, module in pairs(ModuleSet.get_all(self)) do - modules_by_name[module.proto.name] = module - end - - local next_position = 1 - for _, category in ipairs(global.prototypes.modules) do - for _, module_proto in ipairs(category.members) do - local module = modules_by_name[module_proto.name] - if module then - module.gui_position = next_position - next_position = next_position + 1 - end - end - end -end - -function ModuleSet.summarize_effects(self) - local effects = {consumption = 0, speed = 0, productivity = 0, pollution = 0} - for _, module in pairs(self.modules.datasets) do - for name, effect in pairs(module.total_effects) do - effects[name] = effects[name] + effect - end - end - self.total_effects = effects - - _G[self.parent.class].summarize_effects(self.parent) -end - - -function ModuleSet.check_compatibility(self, module_proto) - return _G[self.parent.class].check_module_compatibility(self.parent, module_proto) -end - -function ModuleSet.compile_filter(self) - local compatible_modules = {} - for module_name, module_proto in pairs(MODULE_NAME_MAP) do - if ModuleSet.check_compatibility(self, module_proto) then - table.insert(compatible_modules, module_name) - end - end - - local existing_modules = {} - for _, module in pairs(self.modules.datasets) do - table.insert(existing_modules, module.proto.name) - end - - return {{filter="name", name=compatible_modules}, - {filter="name", mode="and", invert=true, name=existing_modules}} -end - - -function ModuleSet.paste(self, module) - if not ModuleSet.check_compatibility(self, module.proto) then - return false, "incompatible" - elseif self.empty_slots == 0 then - return false, "no_empty_slots" - end - - local desired_amount = math.min(module.amount, self.empty_slots) - local existing_module = ModuleSet.get_by_name(self, module.proto.name) - if existing_module then - Module.set_amount(existing_module, existing_module.amount + desired_amount) - else - ModuleSet.add(self, module.proto, desired_amount) - end - ModuleSet.normalize(self, {sort=true, effects=true}) - return true, nil -end - - -function ModuleSet.pack(self) - return { - modules = Collection.pack(self.modules, Module), - -- count, limit, and empty_slots restored by ensuing validation - class = self.class - } -end - -function ModuleSet.unpack(packed_self) - local self = packed_self - self.modules = Collection.unpack(packed_self.modules, self, Module) - return self -end - - --- Needs validation: modules -function ModuleSet.validate(self) - self.valid = Collection.validate_datasets(self.modules, Module) - - if self.valid and self.parent.valid then - if not self.module_count or not self.empty_slots then -- when validating an unpacked ModuleSet - self.module_limit = self.parent.proto.module_limit - ModuleSet.count_modules(self) - end - - -- .normalize doesn't remove incompatible modules here, the above validation already marks them - ModuleSet.normalize(self, {trim=true, sort=true, effects=true}) - end - - return self.valid -end - --- Needs repair: modules -function ModuleSet.repair(self, _) - Collection.repair_datasets(self.modules, nil, Module) - ModuleSet.normalize(self, {trim=true, sort=true, effects=true}) - - self.valid = true -- repairing invalid modules removes them, making this set valid - return true -end diff --git a/factoryplanner_1.1.72/backend/classes/Recipe.lua b/factoryplanner_1.1.72/backend/classes/Recipe.lua deleted file mode 100644 index ffcc3c5d..00000000 --- a/factoryplanner_1.1.72/backend/classes/Recipe.lua +++ /dev/null @@ -1,44 +0,0 @@ ----@class FPRecipe ----@field proto FPRecipePrototype ----@field production_type "output" | "input" ----@field valid boolean ----@field class "Recipe" - --- This is essentially just a wrapper-'class' for a recipe prototype to add some data to it -Recipe = {} - -function Recipe.init_by_id(recipe_id, production_type) - return { - proto = global.prototypes.recipes[recipe_id], - production_type = production_type, - valid = true, - class = "Recipe" - } -end - - -function Recipe.pack(self) - return { - proto = prototyper.util.simplify_prototype(self.proto, nil), - production_type = self.production_type, - class = self.class - } -end - -function Recipe.unpack(packed_self) - return packed_self -end - - --- Needs validation: proto -function Recipe.validate(self) - self.proto = prototyper.util.validate_prototype_object(self.proto, nil) - self.valid = (not self.proto.simplified) - return self.valid -end - --- Needs repair: -function Recipe.repair(_, _) - -- If the prototype is still simplified, it couldn't be fixed by validate, so it has to be removed - return false -end diff --git a/factoryplanner_1.1.72/backend/classes/Subfactory.lua b/factoryplanner_1.1.72/backend/classes/Subfactory.lua deleted file mode 100644 index f1e02399..00000000 --- a/factoryplanner_1.1.72/backend/classes/Subfactory.lua +++ /dev/null @@ -1,301 +0,0 @@ ----@class FPSubfactory ----@field name string ----@field timescale Timescale ----@field energy_consumption number ----@field pollution number ----@field notes string ----@field mining_productivity number? ----@field blueprints string[] ----@field Product FPCollection ----@field Byproduct FPCollection ----@field Ingredient FPCollection ----@field Floor FPCollection ----@field matrix_free_items FPItemPrototype[]? ----@field linearly_dependant boolean ----@field selected_floor FPFloor ----@field item_request_proxy LuaEntity? ----@field tick_of_deletion uint? ----@field last_valid_modset { [string]: string }? ----@field mod_version string ----@field valid boolean ----@field id integer ----@field gui_position integer ----@field parent FPFactory ----@field class "Subfactory" - ----@class FPPackedSubfactory - --- 'Class' representing a independent part of the factory with in- and outputs -Subfactory = {} - -function Subfactory.init(name) - local subfactory = { - name = name, - timescale = nil, -- set after init - energy_consumption = 0, - pollution = 0, - notes = "", - mining_productivity = nil, - blueprints = {}, - Product = Collection.init(), - Byproduct = Collection.init(), - Ingredient = Collection.init(), - Floor = Collection.init(), - matrix_free_items = nil, - linearly_dependant = false, -- determined by the solver - selected_floor = nil, - item_request_proxy = nil, - tick_of_deletion = nil, -- ignored on export/import - last_valid_modset = nil, - mod_version = global.mod_version, - valid = true, - id = nil, -- set by collection - gui_position = nil, -- set by collection - parent = nil, -- set by parent - class = "Subfactory" - } - - -- Initialize the subfactory with an empty top floor - subfactory.selected_floor = Floor.init(nil) - Subfactory.add(subfactory, subfactory.selected_floor) - - return subfactory -end - - -function Subfactory.tostring(self, attach_products, export_format) - local caption, tooltip = self.name, nil -- don't return a tooltip for the export_format - - if attach_products and self.valid then - local product_string = "" - for _, item in pairs(Subfactory.get_in_order(self, "Product")) do - product_string = product_string .. "[img=" .. item.proto.sprite .. "]" - end - if product_string ~= "" then product_string = product_string .. " " end - caption = product_string .. caption - end - - if not export_format then - local status_string = "" - if self.tick_of_deletion then status_string = status_string .. "[img=fp_sprite_trash_red] " end - if not self.valid then status_string = status_string .. "[img=fp_sprite_warning_red] " end - caption = status_string .. caption - - local trashed_string = "" ---@type LocalisedString - if self.tick_of_deletion then - local ticks_left_in_trash = self.tick_of_deletion - game.tick - local minutes_left_in_trash = math.ceil(ticks_left_in_trash / 3600) - trashed_string = {"fp.subfactory_trashed", minutes_left_in_trash} - end - - local invalid_string = (not self.valid) and {"fp.subfactory_invalid"} or "" - tooltip = {"", {"fp.tt_title", caption}, trashed_string, invalid_string} - end - - return caption, tooltip -end - - -function Subfactory.add(self, object) - object.parent = self - return Collection.add(self[object.class], object) -end - -function Subfactory.remove(self, dataset) - return Collection.remove(self[dataset.class], dataset) -end - -function Subfactory.replace(self, dataset, object) - object.parent = self - return Collection.replace(self[dataset.class], dataset, object) -end - -function Subfactory.clear(self, class) - self[class] = Collection.init() -end - -function Subfactory.get(self, class, dataset_id) - return Collection.get(self[class], dataset_id) -end - -function Subfactory.get_all(self, class) - return Collection.get_all(self[class]) -end - -function Subfactory.get_in_order(self, class, reverse) - return Collection.get_in_order(self[class], reverse) -end - --- Floors don't have an inherent order, so this makes sense for them -function Subfactory.get_all_floors(self) - return self.Floor.datasets -end - -function Subfactory.get_by_name(self, class, name) - return Collection.get_by_name(self[class], name) -end - - --- Returns the machines and modules needed to actually build this subfactory -function Subfactory.get_component_data(self) - local components = {machines={}, modules={}} - - for _, floor in pairs(Subfactory.get_in_order(self, "Floor")) do - -- Relies on the floor-function to do the heavy lifting - Floor.get_component_data(floor, components) - end - - return components -end - - --- Updates every top level product of this Subfactory to the given product definition type -function Subfactory.update_product_definitions(self, new_defined_by) - for _, product in pairs(Subfactory.get_in_order(self, "Product")) do - local req_amount = product.required_amount - local current_defined_by = req_amount.defined_by - if current_defined_by ~= "amount" and new_defined_by ~= current_defined_by then - req_amount.defined_by = new_defined_by - - local multiplier = (new_defined_by == "belts") and 0.5 or 2 - req_amount.amount = req_amount.amount * multiplier - end - end -end - - -function Subfactory.validate_item_request_proxy(self) - local item_request_proxy = self.item_request_proxy - if item_request_proxy then - if not item_request_proxy.valid or not next(item_request_proxy.item_requests) then - Subfactory.destroy_item_request_proxy(self) - end - end -end - -function Subfactory.destroy_item_request_proxy(self) - self.item_request_proxy.destroy{raise_destroy=false} - self.item_request_proxy = nil -end - - --- Given line has to have a subfloor; recursively adds references for all subfloors to list -function Subfactory.add_subfloor_references(self, line) - Subfactory.add(self, line.subfloor) - - for _, sub_line in pairs(Floor.get_all(line.subfloor, "Line")) do - if sub_line.subfloor then Subfactory.add_subfloor_references(self, sub_line) end - end -end - - -function Subfactory.clone(self) - local clone = Subfactory.unpack(Subfactory.pack(self)) - clone.parent = self.parent - Subfactory.validate(clone) - return clone -end - - -function Subfactory.pack(self) - local packed_free_items = (self.matrix_free_items) and {} or nil - for index, proto in pairs(self.matrix_free_items or {}) do - packed_free_items[index] = prototyper.util.simplify_prototype(proto, proto.type) - end - - return { - name = self.name, - timescale = self.timescale, - notes = self.notes, - mining_productivity = self.mining_productivity, - blueprints = self.blueprints, - Product = Collection.pack(self.Product, Item), - matrix_free_items = packed_free_items, - -- Floors get packed by recursive nesting, which is necessary for a json-type data - -- structure. It will need to be unpacked into the regular structure 'manually'. - top_floor = Floor.pack(Subfactory.get(self, "Floor", 1)), - class = self.class - } -end - -function Subfactory.unpack(packed_self) - local self = Subfactory.init(packed_self.name) - - self.timescale = packed_self.timescale - self.notes = packed_self.notes - self.mining_productivity = packed_self.mining_productivity - self.blueprints = packed_self.blueprints - self.Product = Collection.unpack(packed_self.Product, self, Item) - - if packed_self.matrix_free_items then - self.matrix_free_items = {} - for index, proto in pairs(packed_self.matrix_free_items) do - -- Prototypes will be automatically unpacked by the validation process - self.matrix_free_items[index] = proto - end - end - - -- Floor unpacking is called on the top floor, which recursively goes through its subfloors - local top_floor = self.selected_floor ---@cast top_floor -nil - Floor.unpack(packed_self.top_floor, top_floor) - -- Make sure to create references to all subfloors after unpacking - for _, line in pairs(Floor.get_all(top_floor, "Line")) do - if line.subfloor then Subfactory.add_subfloor_references(self, line) end - end - - return self -end - - --- Needs validation: Product, Floor -function Subfactory.validate(self) - local previous_validity = self.valid - - self.valid = Collection.validate_datasets(self.Product, Item) - - -- Validating matrix_free_items is a bit messy with the current functions, - -- it might be worth it to change it into a Collection at some point - for index, _ in pairs(self.matrix_free_items or {}) do - self.matrix_free_items[index] = prototyper.util.validate_prototype_object(self.matrix_free_items[index], "type") - self.valid = (not self.matrix_free_items[index].simplified) and self.valid - end - - -- Floor validation is called on the top floor, which recursively goes through its subfloors - local top_floor = Subfactory.get(self, "Floor", 1) - self.valid = Floor.validate(top_floor) and self.valid - - Subfactory.validate_item_request_proxy(self) - - if self.valid then self.last_valid_modset = nil - -- If this subfactory became invalid with the current configuration, retain the modset before the current one - -- The one in global is still the previous one as it's only updated after migrations - elseif previous_validity and not self.valid then self.last_valid_modset = global.installed_mods end - - -- return value is not needed here -end - --- Needs repair: Product, Floor, selected_floor -function Subfactory.repair(self, player) - local top_floor = Subfactory.get(self, "Floor", 1) - self.selected_floor = top_floor -- reset the selected floor to the one that's guaranteed to exist - - -- Unrepairable item-objects get removed, so the subfactory will always be valid afterwards - Collection.repair_datasets(self.Product, nil, Item) - - -- Clear item prototypes so we don't need to rely on the solver to remove them - Subfactory.clear(self, "Byproduct") - Subfactory.clear(self, "Ingredient") - - -- Remove any unrepairable free item so the subfactory remains valid - local free_items = self.matrix_free_items or {} - for index = #free_items, 1, -1 do - if free_items[index].simplified then table.remove(free_items, index) end - end - - -- Floor repair is called on the top floor, which recursively goes through its subfloors - Floor.repair(top_floor, player) - - self.last_valid_modset = nil - self.valid = true - -- return value is not needed here -end diff --git a/factoryplanner_1.1.72/backend/handlers/generator.lua b/factoryplanner_1.1.72/backend/handlers/generator.lua deleted file mode 100644 index cf132d5e..00000000 --- a/factoryplanner_1.1.72/backend/handlers/generator.lua +++ /dev/null @@ -1,976 +0,0 @@ -local generator_util = require("backend.handlers.generator_util") - -local generator = { - machines = {}, - recipes = {}, - items = {}, - fuels = {}, - belts = {}, - wagons = {}, - modules = {}, - beacons = {} -} - - ----@class FPPrototype ----@field id integer ----@field data_type DataType ----@field name string ----@field localised_name LocalisedString ----@field sprite SpritePath - ----@class FPPrototypeWithCategory: FPPrototype ----@field category_id integer - ----@alias AnyFPPrototype FPPrototype | FPPrototypeWithCategory - - ----@param list AnyNamedPrototypes ----@param prototype FPPrototype ----@param category string? -local function insert_prototype(list, prototype, category) - if category == nil then - ---@cast list NamedPrototypes - list[prototype.name] = prototype - else - ---@cast list NamedPrototypesWithCategory - list[category] = list[category] or { name = category, members = {} } - list[category].members[prototype.name] = prototype - end -end - ----@param list AnyNamedPrototypes ----@param name string ----@param category string? -local function remove_prototype(list, name, category) - if category == nil then - ---@cast list NamedPrototypes - list[name] = nil - else - ---@cast list NamedPrototypesWithCategory - list[category].members[name] = nil - if next(list[category].members) == nil then list[category] = nil end - end -end - - ----@class FPMachinePrototype: FPPrototypeWithCategory ----@field data_type "machines" ----@field category string ----@field ingredient_limit integer ----@field fluid_channels FluidChannels ----@field speed double ----@field energy_type "burner" | "electric" | "void" ----@field energy_usage double ----@field energy_drain double ----@field emissions double ----@field built_by_item FPItemPrototype? ----@field base_productivity double ----@field allowed_effects AllowedEffects? ----@field module_limit integer ----@field launch_sequence_time number? ----@field burner MachineBurner? - ----@class FluidChannels ----@field input integer ----@field output integer - ----@class MachineBurner ----@field effectivity double ----@field categories { [string]: boolean } - --- Generates a table containing all machines for all categories ----@return NamedPrototypesWithCategory -function generator.machines.generate() - local machines = {} ---@type NamedPrototypesWithCategory - - ---@param category string - ---@param proto LuaEntityPrototype - ---@return FPMachinePrototype? - local function generate_category_entry(category, proto) - -- First, determine if there is a valid sprite for this machine - local sprite = generator_util.determine_entity_sprite(proto) - if sprite == nil then return end - - -- If it is a miner, set speed to mining_speed so the machine_count-formula works out - local speed = proto.crafting_categories and proto.crafting_speed or proto.mining_speed - - -- Determine data related to the energy source - local energy_type, emissions = "", 0 -- emissions remain at 0 if no energy source is present - local burner = nil ---@type MachineBurner - local energy_usage, energy_drain = (proto.energy_usage or proto.max_energy_usage or 0), 0 - - -- Determine the name of the item that actually builds this machine for the item requester - -- There can technically be more than one, but bots use the first one, so I do too - local built_by_item = (proto.items_to_place_this) and proto.items_to_place_this[1].name or nil - - -- Determine the details of this entities energy source - local burner_prototype, fluid_burner_prototype = proto.burner_prototype, proto.fluid_energy_source_prototype - if burner_prototype then - energy_type = "burner" - emissions = burner_prototype.emissions - burner = {effectivity = burner_prototype.effectivity, categories = burner_prototype.fuel_categories} - - -- Only supports fluid energy that burns_fluid for now, as it works the same way as solid burners - -- Also doesn't respect scale_fluid_usage and fluid_usage_per_tick for now, let the reports come - elseif fluid_burner_prototype then - emissions = fluid_burner_prototype.emissions - - if fluid_burner_prototype.burns_fluid and not fluid_burner_prototype.fluid_box.filter then - energy_type = "burner" - burner = {effectivity = fluid_burner_prototype.effectivity, categories = {["fluid-fuel"] = true}} - - else -- Avoid adding this type of complex fluid energy as electrical energy - energy_type = "void" - end - - elseif proto.electric_energy_source_prototype then - energy_type = "electric" - energy_drain = proto.electric_energy_source_prototype.drain - emissions = proto.electric_energy_source_prototype.emissions - - elseif proto.void_energy_source_prototype then - energy_type = "void" - emissions = proto.void_energy_source_prototype.emissions - end - - -- Determine fluid input/output channels - local fluid_channels = {input = 0, output = 0} - if fluid_burner_prototype then fluid_channels.input = fluid_channels.input - 1 end - - for _, fluidbox in pairs(proto.fluidbox_prototypes) do - if fluidbox.production_type == "output" then - fluid_channels.output = fluid_channels.output + 1 - else -- "input" and "input-output" - fluid_channels.input = fluid_channels.input + 1 - end - end - - local machine = { - name = proto.name, - localised_name = proto.localised_name, - sprite = sprite, - category = category, - ingredient_limit = (proto.ingredient_count or 255), - fluid_channels = fluid_channels, - speed = speed, - energy_type = energy_type, - energy_usage = energy_usage, - energy_drain = energy_drain, - emissions = emissions, - built_by_item = built_by_item, - base_productivity = (proto.base_productivity or 0), - allowed_effects = generator_util.format_allowed_effects(proto.allowed_effects), - module_limit = (proto.module_inventory_size or 0), - launch_sequence_time = generator_util.determine_launch_sequence_time(proto), - burner = burner - } - - return machine - end - - for _, proto in pairs(game.entity_prototypes) do - if not proto.has_flag("hidden") and proto.crafting_categories and proto.energy_usage ~= nil - and not generator_util.is_irrelevant_machine(proto) then - for category, _ in pairs(proto.crafting_categories) do - local machine = generate_category_entry(category, proto) - if machine then insert_prototype(machines, machine, machine.category) end - end - - -- Add mining machines - elseif proto.resource_categories then - if not proto.has_flag("hidden") and proto.type ~= "character" then - for category, enabled in pairs(proto.resource_categories) do - -- Only supports solid mining recipes for now (no oil, etc.) - if enabled and category ~= "basic-fluid" then - local machine = generate_category_entry(category, proto) - if machine then - machine.mining = true - insert_prototype(machines, machine, machine.category) - end - end - end - end - - -- Add offshore pumps - elseif proto.fluid then - local machine = generate_category_entry(proto.name, proto) - if machine then - machine.speed = 1 -- pumping speed included in the recipe product-amount - machine.category = proto.name -- unique category for every offshore pump - insert_prototype(machines, machine, machine.category) - end - end - - -- Add machines that produce steam (ie. boilers) - for _, fluidbox in ipairs(proto.fluidbox_prototypes) do - if fluidbox.production_type == "output" and fluidbox.filter - and fluidbox.filter.name == "steam" and proto.target_temperature ~= nil then - -- Exclude any boilers that use heat as their energy source - if proto.burner_prototype or proto.electric_energy_source_prototype then - -- Find the corresponding input fluidbox - local input_fluidbox = nil ---@type LuaFluidBoxPrototype - for _, fb in ipairs(proto.fluidbox_prototypes) do - if fb.production_type == "input-output" or fb.production_type == "input" then - input_fluidbox = fb - break - end - end - - -- Add the machine if it has a valid input fluidbox - if input_fluidbox ~= nil then - local category = "steam-" .. proto.target_temperature - local machine = generate_category_entry(category, proto) - if machine then - local temp_diff = proto.target_temperature - input_fluidbox.filter.default_temperature - local energy_per_unit = input_fluidbox.filter.heat_capacity * temp_diff - machine.speed = machine.energy_usage / energy_per_unit - - insert_prototype(machines, machine, machine.category) - - -- Add every boiler to the general steam category (steam without temperature) - local general_machine = fancytable.deep_copy(machine) - general_machine.category = "general-steam" - insert_prototype(machines, general_machine, general_machine.category) - end - end - end - end - end - end - - return machines -end - ----@param machines NamedPrototypesWithCategory -function generator.machines.second_pass(machines) - -- Go over all recipes to find unused categories - local used_category_names = {} ---@type { [string]: boolean } - for _, recipe_proto in pairs(global.prototypes.recipes) do - used_category_names[recipe_proto.category] = true - end - - for _, machine_category in pairs(machines) do - if used_category_names[machine_category.name] == nil then - machines[machine_category.name] = nil - end - end - - -- Filter out burner machines that don't have any valid fuel categories - for _, machine_category in pairs(machines) do - for _, machine_proto in pairs(machine_category.members) do - if machine_proto.energy_type == "burner" then - local category_found = false - for fuel_category in pairs(machine_proto.burner.categories) do - if global.prototypes.fuels[fuel_category] then category_found = true; break end - end - if not category_found then remove_prototype(machines, machine_proto.name, machine_category.name) end - end - end - - -- If the category ends up empty because of this, make sure to remove it - if not next(machine_category.members) then machines[machine_category.name] = nil end - end - - - -- Replace built_by_item names with prototype references - local item_prototypes = global.prototypes.items["item"].members ---@type { [string]: FPItemPrototype } - for _, machine_category in pairs(machines) do - for _, machine_proto in pairs(machine_category.members) do - if machine_proto.built_by_item then - machine_proto.built_by_item = item_prototypes[machine_proto.built_by_item] - end - end - end -end - ----@param a FPMachinePrototype ----@param b FPMachinePrototype ----@return boolean -function generator.machines.sorting_function(a, b) - if a.speed < b.speed then return true - elseif a.speed > b.speed then return false - elseif a.module_limit < b.module_limit then return true - elseif a.module_limit > b.module_limit then return false - elseif a.energy_usage < b.energy_usage then return true - elseif a.energy_usage > b.energy_usage then return false end - return false -end - - ----@class FPUnformattedRecipePrototype: FPPrototype ----@field data_type "recipes" ----@field category string ----@field energy double ----@field emissions_multiplier double ----@field ingredients FPIngredient[] ----@field products Product[] ----@field main_product Product? ----@field type_counts { ingredients: ItemTypeCounts, products: ItemTypeCounts } ----@field recycling boolean ----@field barreling boolean ----@field enabling_technologies string[] ----@field use_limitations boolean ----@field custom boolean ----@field enabled_from_the_start boolean ----@field hidden boolean ----@field order string ----@field group ItemGroup ----@field subgroup ItemGroup - ----@class FPRecipePrototype: FPUnformattedRecipePrototype ----@field ingredients FormattedRecipeItem[] ----@field products FormattedRecipeItem[] ----@field main_product FormattedRecipeItem? - ----@class FPIngredient: Ingredient ----@field ignore_productivity boolean - --- Returns all standard recipes + custom mining, steam and rocket recipes ----@return NamedPrototypes -function generator.recipes.generate() - local recipes = {} ---@type NamedPrototypes - - ---@return FPUnformattedRecipePrototype - local function custom_recipe() - return { - custom = true, - enabled_from_the_start = true, - hidden = false, - group = {name="intermediate-products", order="c", valid=true, - localised_name={"item-group-name.intermediate-products"}}, - type_counts = {}, - enabling_technologies = nil, - use_limitations = false, - emissions_multiplier = 1 - } - end - - - -- Determine researchable recipes - local researchable_recipes = {} ---@type { [string]: string[] } - local tech_filter = {{filter="hidden", invert=true}, {filter="has-effects", mode="and"}} - for _, tech_proto in pairs(game.get_filtered_technology_prototypes(tech_filter)) do - for _, effect in pairs(tech_proto.effects) do - if effect.type == "unlock-recipe" then - local recipe_name = effect.recipe - researchable_recipes[recipe_name] = researchable_recipes[recipe_name] or {} - table.insert(researchable_recipes[recipe_name], tech_proto.name) - end - end - end - - -- Add all standard recipes - local recipe_filter = {{filter="energy", comparison=">", value=0}, - {filter="energy", comparison="<", value=1e+21, mode="and"}} - for recipe_name, proto in pairs(game.get_filtered_recipe_prototypes(recipe_filter)) do - local machine_category = global.prototypes.machines[proto.category] ---@type { [string]: FPMachinePrototype } - -- Avoid any recipes that have no machine to produce them, or are irrelevant - if machine_category ~= nil and not generator_util.is_irrelevant_recipe(proto) then - local recipe = { ---@type FPUnformattedRecipePrototype - name = proto.name, - localised_name = proto.localised_name, - sprite = "recipe/" .. proto.name, - category = proto.category, - energy = proto.energy, - emissions_multiplier = proto.emissions_multiplier, - ingredients = proto.ingredients, - products = proto.products, - main_product = proto.main_product, - type_counts = {}, -- filled out by format_* below - recycling = generator_util.is_recycling_recipe(proto), - barreling = generator_util.is_compacting_recipe(proto), - enabling_technologies = researchable_recipes[recipe_name], -- can be nil - use_limitations = true, - custom = false, - enabled_from_the_start = proto.enabled, - hidden = proto.hidden, - order = proto.order, - group = generator_util.generate_group_table(proto.group), - subgroup = generator_util.generate_group_table(proto.subgroup) - } - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - insert_prototype(recipes, recipe, nil) - end - end - - - -- Determine all the items that can be inserted usefully into a rocket silo - local launch_products_filter = {{filter="has-rocket-launch-products"}} - local rocket_silo_inputs = {} ---@type LuaItemPrototype[] - for _, item in pairs(game.get_filtered_item_prototypes(launch_products_filter)) do - if next(item.rocket_launch_products) then - table.insert(rocket_silo_inputs, item) - end - end - - -- Localize them here so they don't have to be recreated over and over - local item_prototypes, recipe_prototypes = game.item_prototypes, game.recipe_prototypes - - -- Add mining recipes - for _, proto in pairs(game.entity_prototypes) do - -- Add all mining recipes. Only supports solids for now. - if proto.mineable_properties and proto.resource_category then - local products = proto.mineable_properties.products - if not products then goto incompatible_proto end - - local produces_solid = false - for _, product in pairs(products) do -- detects all solid mining recipes - if product.type == "item" then produces_solid = true; break end - end - if not produces_solid then goto incompatible_proto end - - if produces_solid then - local recipe = custom_recipe() - recipe.name = "impostor-" .. proto.name - recipe.localised_name = proto.localised_name - recipe.sprite = products[1].type .. "/" .. products[1].name - recipe.order = proto.order - recipe.subgroup = {name="mining", order="y", valid=true} - recipe.category = proto.resource_category - recipe.mining = true - -- Set energy to mining time so the forumla for the machine_count works out - recipe.energy = proto.mineable_properties.mining_time - recipe.ingredients = {{type="entity", name=proto.name, amount=1}} - recipe.products = products - recipe.main_product = recipe.products[1] - - -- Add mining fluid, if required - if proto.mineable_properties.required_fluid then - table.insert(recipe.ingredients, { - type = "fluid", - name = proto.mineable_properties.required_fluid, - -- fluid_amount is given for a 'set' of mining ops, with a set being 10 ore - amount = proto.mineable_properties.fluid_amount / 10 - }) - end - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - generator_util.add_recipe_tooltip(recipe) - insert_prototype(recipes, recipe, nil) - - --else - -- crude-oil and angels-natural-gas go here (not interested atm) - end - - ::incompatible_proto:: - - -- Add offshore-pump fluid recipes - elseif proto.fluid then - local recipe = custom_recipe() - recipe.name = "impostor-" .. proto.fluid.name .. "-" .. proto.name - recipe.localised_name = proto.fluid.localised_name - recipe.sprite = "fluid/" .. proto.fluid.name - recipe.order = proto.order - recipe.subgroup = {name="fluids", order="z", valid=true} - recipe.category = proto.name -- use proto name so every pump has it's own category - recipe.energy = 1 - recipe.ingredients = {} - recipe.products = {{type="fluid", name=proto.fluid.name, amount=(proto.pumping_speed * 60)}} - recipe.main_product = recipe.products[1] - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - generator_util.add_recipe_tooltip(recipe) - insert_prototype(recipes, recipe, nil) - - -- Detect all the implicit rocket silo recipes - elseif proto.rocket_parts_required ~= nil then - local fixed_recipe = recipe_prototypes[proto.fixed_recipe --[[@as string]]] - if fixed_recipe ~= nil then - -- Add recipe for all 'launchable' items - for _, silo_input in pairs(rocket_silo_inputs) do - local silo_product = table_size(silo_input.rocket_launch_products) > 1 - and item_prototypes[silo_input.rocket_launch_products[1].name] or silo_input - - local recipe = custom_recipe() - recipe.name = "impostor-silo-" .. proto.name .. "-item-" .. silo_input.name - recipe.localised_name = silo_product.localised_name - recipe.sprite = "item/" .. silo_product.name - recipe.category = next(proto.crafting_categories, nil) -- hopefully this stays working - recipe.energy = fixed_recipe.energy * proto.rocket_parts_required --[[@as number]] - recipe.subgroup = {name="science-pack", order="g", valid=true} - recipe.order = "x-silo-" .. proto.order .. "-" .. silo_input.order - - recipe.ingredients = fixed_recipe.ingredients - for _, ingredient in pairs(recipe.ingredients) do - ingredient.amount = ingredient.amount * proto.rocket_parts_required - end - table.insert(recipe.ingredients, {type="item", name=silo_input.name, - amount=1, ignore_productivity=true}) - recipe.products = silo_input.rocket_launch_products - recipe.main_product = recipe.products[1] - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - generator_util.add_recipe_tooltip(recipe) - insert_prototype(recipes, recipe, nil) - end - - -- Modify recipe for all rocket parts so they represent a full launch - -- This is needed so the launch sequence times can be incorporated correctly - local rocket_part_recipe = recipes[fixed_recipe.name] - if rocket_part_recipe then - generator_util.multiply_recipe(rocket_part_recipe, proto.rocket_parts_required) - end - end - end - - -- Add a recipe for producing steam from a boiler - local existing_recipe_names = {} ---@type { [string]: boolean } - for _, fluidbox in ipairs(proto.fluidbox_prototypes) do - if fluidbox.production_type == "output" and fluidbox.filter - and fluidbox.filter.name == "steam" and proto.target_temperature ~= nil then - -- Exclude any boilers that use heat or fluid as their energy source - if proto.burner_prototype or proto.electric_energy_source_prototype then - local temperature = proto.target_temperature - local recipe_name = "impostor-steam-" .. temperature - - -- Prevent duplicate recipes, in case more than one boiler produces the same temperature of steam - if existing_recipe_names[recipe_name] == nil then - existing_recipe_names[recipe_name] = true - - local recipe = custom_recipe() - recipe.name = recipe_name - recipe.localised_name = {"fp.fluid_at_temperature", {"fluid-name.steam"}, - temperature, {"fp.unit_celsius"}} - recipe.sprite = "fluid/steam" - recipe.category = "steam-" .. temperature - recipe.order = "z-" .. temperature - recipe.subgroup = {name="fluids", order="z", valid=true} - recipe.energy = 1 - recipe.ingredients = {{type="fluid", name="water", amount=60}} - recipe.products = {{type="fluid", name="steam", amount=60, temperature=temperature}} - recipe.main_product = recipe.products[1] - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - generator_util.add_recipe_tooltip(recipe) - insert_prototype(recipes, recipe, nil) - end - end - end - end - end - - -- Add a general steam recipe that works with every boiler - if game["fluid_prototypes"]["steam"] then -- make sure the steam prototype exists - local recipe = custom_recipe() - recipe.name = "fp-general-steam" - recipe.localised_name = {"fluid-name.steam"} - recipe.sprite = "fluid/steam" - recipe.category = "general-steam" - recipe.order = "z-0" - recipe.subgroup = {name="fluids", order="z", valid=true} - recipe.energy = 1 - recipe.ingredients = {{type="fluid", name="water", amount=60}} - recipe.products = {{type="fluid", name="steam", amount=60}} - recipe.main_product = recipe.products[1] - - generator_util.format_recipe_products_and_ingredients(recipe) - ---@cast recipe FPRecipePrototype - generator_util.add_recipe_tooltip(recipe) - insert_prototype(recipes, recipe, nil) - end - - -- Custom handling for Space Exploration Arcosphere recipes - local se_split_recipes = {"se-arcosphere-fracture", "se-naquium-processor", "se-naquium-tessaract", - "se-space-dilation-data", "se-space-fold-data", "se-space-injection-data", "se-space-warp-data"} - for _, recipe_name in pairs(se_split_recipes) do - local recipe, alt_recipe = recipes[recipe_name], recipes[recipe_name .. "-alt"] - if recipe and alt_recipe then - recipe.custom = true - generator_util.combine_recipes(recipe, alt_recipe) - generator_util.multiply_recipe(recipe, 0.5) - generator_util.add_recipe_tooltip(recipe) - remove_prototype(recipes, alt_recipe.name, nil) - end - end - - return recipes -end - ----@param recipes NamedPrototypes -function generator.recipes.second_pass(recipes) - local machines = global.prototypes.machines - -- Check again if all recipes still have a machine to produce them after machine second pass - for _, recipe in pairs(recipes) do - if not machines[recipe.category] then - remove_prototype(recipes, recipe.name, nil) - end - end -end - - ----@class FPItemPrototype: FPPrototypeWithCategory ----@field data_type "items" ----@field type "item" | "fluid" | "entity" ----@field hidden boolean ----@field stack_size uint? ----@field ingredient_only boolean ----@field temperature number ----@field order string ----@field group ItemGroup ----@field subgroup ItemGroup - ----@class RelevantItem ----@field proto FormattedRecipeItem ----@field is_product boolean ----@field is_rocket_part boolean ----@field temperature number? - ----@alias RelevantItems { [ItemType]: { [ItemName]: RelevantItem } } - --- Returns all relevant items and fluids ----@return NamedPrototypesWithCategory -function generator.items.generate() - local items = {} ---@type NamedPrototypesWithCategory - - ---@param table RelevantItems - ---@param item RelevantItem - local function add_item(table, item) - local type = item.proto.type - local name = item.proto.name - table[type] = table[type] or {} - table[type][name] = table[type][name] or {} - local item_details = table[type][name] - -- Determine whether this item is used as a product at least once - item_details.is_product = item_details.is_product or item.is_product - item_details.is_rocket_part = item_details.is_rocket_part or item.is_rocket_part - item_details.temperature = item.proto.temperature - end - - -- Create a table containing every item that is either a product or an ingredient to at least one recipe - local relevant_items = {} ---@type RelevantItems - for _, recipe_proto in pairs(global.prototypes.recipes) do - for _, product in pairs(recipe_proto.products) do - local is_rocket_part = (recipe_proto.category == "rocket-building") - add_item(relevant_items, {proto=product, is_product=true, is_rocket_part=is_rocket_part}) - end - for _, ingredient in pairs(recipe_proto.ingredients) do - add_item(relevant_items, {proto=ingredient, is_product=false, is_rocket_part=false}) - end - end - - -- Add all standard items - for type, item_table in pairs(relevant_items) do - for item_name, item_details in pairs(item_table) do - local proto_name = generator_util.format_temperature_name(item_details, item_name) - local proto = game[type .. "_prototypes"][proto_name] ---@type LuaItemPrototype | LuaFluidPrototype - if proto == nil then goto skip_item end - - local localised_name = generator_util.format_temperature_localised_name(item_details, proto) - local stack_size = (type == "item") and proto.stack_size or nil - local order = (item_details.temperature) and (proto.order .. item_details.temperature) or proto.order - - local hidden = false -- "entity" types are never hidden - if type == "item" then hidden = proto.has_flag("hidden") - elseif type == "fluid" then hidden = proto.hidden end - if item_details.is_rocket_part then hidden = false end - - local item = { - name = item_name, - localised_name = localised_name, - sprite = type .. "/" .. proto.name, - type = type, - hidden = hidden, - stack_size = stack_size, - ingredient_only = not item_details.is_product, - temperature = item_details.temperature, - order = order, - group = generator_util.generate_group_table(proto.group), - subgroup = generator_util.generate_group_table(proto.subgroup) - } - - insert_prototype(items, item, item.type) - - ::skip_item:: - end - end - - return items -end - - ----@class FPFuelPrototype: FPPrototypeWithCategory ----@field data_type "fuels" ----@field type "item" | "fluid" ----@field category string | "fluid-fuel" ----@field fuel_value float ----@field stack_size uint? ----@field emissions_multiplier double - --- Generates a table containing all fuels that can be used in a burner ----@return NamedPrototypesWithCategory -function generator.fuels.generate() - local fuels = {} ---@type NamedPrototypesWithCategory - - -- Determine all the fuel categories that the machine prototypes use - local used_fuel_categories = {} ---@type { [string]: boolean} - for _, machine_category in pairs(global.prototypes.machines) do - for _, machine_proto in pairs(machine_category.members) do - if machine_proto.burner then - for category_name, _ in pairs(machine_proto.burner.categories) do - used_fuel_categories[category_name] = true - end - end - end - end - - local fuel_filter = {{filter="fuel-value", comparison=">", value=0}, - {filter="fuel-value", comparison="<", value=1e+21, mode="and"}} - - -- Add solid fuels - local item_list = global.prototypes.items["item"].members ---@type NamedPrototypesWithCategory - local item_fuel_filter = fancytable.shallow_copy(fuel_filter) - table.insert(item_fuel_filter, {filter="flag", flag="hidden", invert=true, mode="and"}) - - for _, proto in pairs(game.get_filtered_item_prototypes(item_fuel_filter)) do - -- Only use fuels that were actually detected/accepted to be items and find use in at least one machine - if item_list[proto.name] and used_fuel_categories[proto.fuel_category] ~= nil then - local fuel = { - name = proto.name, - localised_name = proto.localised_name, - sprite = "item/" .. proto.name, - type = "item", - category = proto.fuel_category, - fuel_value = proto.fuel_value, - stack_size = proto.stack_size, - emissions_multiplier = proto.fuel_emissions_multiplier - } - insert_prototype(fuels, fuel, fuel.category) - end - end - - -- Add liquid fuels - local fluid_list = global.prototypes.items["fluid"].members ---@type NamedPrototypesWithCategory - local fluid_fuel_filter = fancytable.shallow_copy(fuel_filter) - table.insert(fluid_fuel_filter, {filter="hidden", invert=true, mode="and"}) - - for _, proto in pairs(game.get_filtered_fluid_prototypes(fluid_fuel_filter)) do - -- Only use fuels that have actually been detected/accepted as fluids - if fluid_list[proto.name] then - local fuel = { - name = proto.name, - localised_name = proto.localised_name, - sprite = "fluid/" .. proto.name, - type = "fluid", - category = "fluid-fuel", - fuel_value = proto.fuel_value, - stack_size = nil, - emissions_multiplier = proto.emissions_multiplier - } - insert_prototype(fuels, fuel, fuel.category) - end - end - - return fuels -end - ----@param a FPFuelPrototype ----@param b FPFuelPrototype ----@return boolean -function generator.fuels.sorting_function(a, b) - if a.fuel_value < b.fuel_value then return true - elseif a.fuel_value > b.fuel_value then return false - elseif a.emissions_multiplier < b.emissions_multiplier then return true - elseif a.emissions_multiplier > b.emissions_multiplier then return false end - return false -end - - ----@class FPBeltPrototype: FPPrototype ----@field data_type "belts" ----@field rich_text string ----@field throughput double - --- Generates a table containing all available transport belts ----@return NamedPrototypes -function generator.belts.generate() - local belts = {} ---@type NamedPrototypes - - local belt_filter = {{filter="type", type="transport-belt"}, - {filter="flag", flag="hidden", invert=true, mode="and"}} - for _, proto in pairs(game.get_filtered_entity_prototypes(belt_filter)) do - local sprite = generator_util.determine_entity_sprite(proto) - if sprite ~= nil then - local belt = { - name = proto.name, - localised_name = proto.localised_name, - sprite = sprite, - rich_text = "[entity=" .. proto.name .. "]", - throughput = proto.belt_speed * 480 - } - insert_prototype(belts, belt, nil) - end - end - - return belts -end - ----@param a FPBeltPrototype ----@param b FPBeltPrototype ----@return boolean -function generator.belts.sorting_function(a, b) - if a.throughput < b.throughput then return true - elseif a.throughput > b.throughput then return false end - return false -end - - ----@class FPWagonPrototype: FPPrototypeWithCategory ----@field data_type "wagons" ----@field rich_text string ----@field category "cargo-wagon" | "fluid-wagon" ----@field storage number - --- Generates a table containing all available cargo and fluid wagons ----@return NamedPrototypesWithCategory -function generator.wagons.generate() - local wagons = {} ---@type NamedPrototypesWithCategory - - -- Add cargo wagons - local cargo_wagon_filter = {{filter="type", type="cargo-wagon"}, - {filter="flag", flag="hidden", invert=true, mode="and"}} - for _, proto in pairs(game.get_filtered_entity_prototypes(cargo_wagon_filter)) do - local inventory_size = proto.get_inventory_size(defines.inventory.cargo_wagon) - if inventory_size > 0 then - local wagon = { - name = proto.name, - localised_name = proto.localised_name, - sprite = generator_util.determine_entity_sprite(proto), - rich_text = "[entity=" .. proto.name .. "]", - category = "cargo-wagon", - storage = inventory_size - } - insert_prototype(wagons, wagon, wagon.category) - end - end - - -- Add fluid wagons - local fluid_wagon_filter = {{filter="type", type="fluid-wagon"}, - {filter="flag", flag="hidden", invert=true, mode="and"}} - for _, proto in pairs(game.get_filtered_entity_prototypes(fluid_wagon_filter)) do - if proto.fluid_capacity > 0 then - local wagon = { - name = proto.name, - localised_name = proto.localised_name, - sprite = generator_util.determine_entity_sprite(proto), - rich_text = "[entity=" .. proto.name .. "]", - category = "fluid-wagon", - storage = proto.fluid_capacity - } - insert_prototype(wagons, wagon, wagon.category) - end - end - - return wagons -end - ----@param a FPWagonPrototype ----@param b FPWagonPrototype ----@return boolean -function generator.wagons.sorting_function(a, b) - if a.storage < b.storage then return true - elseif a.storage > b.storage then return false end - return false -end - - ----@class FPModulePrototype: FPPrototypeWithCategory ----@field data_type "modules" ----@field category string ----@field tier uint ----@field effects ModuleEffects ----@field limitations { [string]: true } - --- Generates a table containing all available modules ----@return NamedPrototypesWithCategory -function generator.modules.generate() - local modules = {} ---@type NamedPrototypesWithCategory - - local module_filter = {{filter="type", type="module"}, {filter="flag", flag="hidden", invert=true, mode="and"}} - for _, proto in pairs(game.get_filtered_item_prototypes(module_filter)) do - local limitations = {} ---@type ModuleLimitations - for _, recipe_name in pairs(proto.limitations) do limitations[recipe_name] = true end - - local sprite = "item/" .. proto.name - if game.is_valid_sprite_path(sprite) then - local module = { - name = proto.name, - localised_name = proto.localised_name, - sprite = sprite, - category = proto.category, - tier = proto.tier, - effects = proto.module_effects or {}, - limitations = limitations - } - insert_prototype(modules, module, module.category) - end - end - - return modules -end - - ----@class FPBeaconPrototype: FPPrototype ----@field data_type "beacons" ----@field category "fp_beacon" ----@field built_by_item FPItemPrototype ----@field allowed_effects AllowedEffects ----@field module_limit uint ----@field effectivity double ----@field energy_usage double - --- Generates a table containing all available beacons ----@return NamedPrototypes -function generator.beacons.generate() - local beacons = {} ---@type NamedPrototypes - - ---@type NamedPrototypesWithCategory - local item_prototypes = global.prototypes.items["item"].members - - local beacon_filter = {{filter="type", type="beacon"}, {filter="flag", flag="hidden", invert=true, mode="and"}} - for _, proto in pairs(game.get_filtered_entity_prototypes(beacon_filter)) do - local sprite = generator_util.determine_entity_sprite(proto) - if sprite ~= nil and proto.module_inventory_size and proto.distribution_effectivity > 0 then - -- Beacons can refer to the actual item prototype right away because they are built after items are - local items_to_place_this = proto.items_to_place_this - local built_by_item = (items_to_place_this) and item_prototypes[items_to_place_this[1].name] or nil - - local beacon = { - name = proto.name, - localised_name = proto.localised_name, - sprite = sprite, - category = "fp_beacon", -- custom category to be similar to machines - built_by_item = built_by_item, - allowed_effects = generator_util.format_allowed_effects(proto.allowed_effects), - module_limit = proto.module_inventory_size, - effectivity = proto.distribution_effectivity, - energy_usage = proto.energy_usage or proto.max_energy_usage or 0 - } - insert_prototype(beacons, beacon, nil) - end - end - - return beacons -end - ----@param a FPBeaconPrototype ----@param b FPBeaconPrototype ----@return boolean -function generator.beacons.sorting_function(a, b) - if a.module_limit < b.module_limit then return true - elseif a.module_limit > b.module_limit then return false - elseif a.effectivity < b.effectivity then return true - elseif a.effectivity > b.effectivity then return false - elseif a.energy_usage < b.energy_usage then return true - elseif a.energy_usage > b.energy_usage then return false end - return false -end - - -return generator diff --git a/factoryplanner_1.1.72/backend/handlers/generator_util.lua b/factoryplanner_1.1.72/backend/handlers/generator_util.lua deleted file mode 100644 index 59959f08..00000000 --- a/factoryplanner_1.1.72/backend/handlers/generator_util.lua +++ /dev/null @@ -1,456 +0,0 @@ -local generator_util = {} - --- ** LOCAL UTIL ** ----@class FormattedRecipeItem ----@field name string ----@field type string ----@field amount number ----@field proddable_amount number? ----@field temperature number? ----@field ignore_productivity boolean? - ----@alias IndexedItemList { [ItemType]: { [ItemName]: { index: number, item: FormattedRecipeItem } } } ----@alias ItemList { [ItemType]: { [ItemName]: FormattedRecipeItem } } ----@alias ItemTypeCounts { items: number, fluids: number } - --- Determines the actual amount of items that a recipe product or ingredient equates to ----@param base_item Ingredient | Product ----@param type "ingredient" | "product" ----@return FormattedRecipeItem -local function generate_formatted_item(base_item, type) - local base_amount = 0 - if base_item.amount_max ~= nil and base_item.amount_min ~= nil then - base_amount = (base_item.amount_max + base_item.amount_min) / 2 - else - base_amount = base_item.amount - end - - local probability = (base_item.probability or 1) - local proddable_amount = (type == "product") - and (base_amount - (base_item.catalyst_amount or 0)) * probability or nil - - -- This will probably screw up the main_product detection down the line - if base_item.temperature ~= nil then - base_item.name = base_item.name .. "-" .. base_item.temperature - end - - return { - name = base_item.name, - type = base_item.type, - amount = (base_amount * probability), - proddable_amount = proddable_amount, - temperature = base_item.temperature - } -end - --- Combines items that occur more than once into one entry ----@param item_list FormattedRecipeItem[] -local function combine_identical_products(item_list) - local touched_items = {item = {}, fluid = {}, entity = {}} ---@type ItemList - - for index=#item_list, 1, -1 do - local item = item_list[index] - if item.temperature == nil then -- don't care to deal with temperature crap - local touched_item = touched_items[item.type][item.name] - if touched_item ~= nil then - touched_item.amount = touched_item.amount + item.amount - if touched_item.proddable_amount then - touched_item.proddable_amount = touched_item.proddable_amount + item.proddable_amount - end - - -- Using the table.remove function to preserve array-format - table.remove(item_list, index) - else - touched_items[item.type][item.name] = item - end - end - end -end - ----@param item_list FormattedRecipeItem[] ----@return IndexedItemList -local function create_type_indexed_list(item_list) - local indexed_list = {item = {}, fluid = {}, entity = {}} ---@type IndexedItemList - - for index, item in pairs(item_list) do - indexed_list[item.type][item.name] = {index = index, item = fancytable.shallow_copy(item)} - end - - return indexed_list -end - ----@param indexed_items IndexedItemList ----@return ItemTypeCounts -local function determine_item_type_counts(indexed_items) - return { - items = table_size(indexed_items.item), - fluids = table_size(indexed_items.fluid) - } -end - - --- ** TOP LEVEL ** --- Formats the products/ingredients of a recipe for more convenient use ----@param recipe_proto FPUnformattedRecipePrototype -function generator_util.format_recipe_products_and_ingredients(recipe_proto) - local ingredients = {} ---@type FormattedRecipeItem[] - for _, base_ingredient in pairs(recipe_proto.ingredients) do - local formatted_ingredient = generate_formatted_item(base_ingredient, "ingredient") - - if formatted_ingredient.amount > 0 then - -- Productivity applies to all ingredients by default, some exceptions apply (ex. satellite) - -- Also add proddable_amount so productivity bonus can be un-applied later in the model - if base_ingredient.ignore_productivity then - formatted_ingredient.ignore_productivity = true - formatted_ingredient.proddable_amount = formatted_ingredient.amount - end - - table.insert(ingredients, formatted_ingredient) - end - end - - local indexed_ingredients = create_type_indexed_list(ingredients) - recipe_proto.type_counts.ingredients = determine_item_type_counts(indexed_ingredients) - - - local products = {} ---@type FormattedRecipeItem[] - for _, base_product in pairs(recipe_proto.products) do - local formatted_product = generate_formatted_item(base_product, "product") - - if formatted_product.amount > 0 then - table.insert(products, formatted_product) - - -- Update the main product as well, if present - if recipe_proto.main_product ~= nil - and formatted_product.type == recipe_proto.main_product.type - and formatted_product.name == recipe_proto.main_product.name then - recipe_proto.main_product = formatted_product --[[@as Product]] - end - end - end - - combine_identical_products(products) -- only needed products, ingredients can't have duplicates - local indexed_products = create_type_indexed_list(products) - recipe_proto.type_counts.products = determine_item_type_counts(indexed_products) - - - -- Reduce item amounts for items that are both an ingredient and a product - for _, items_of_type in pairs(indexed_ingredients) do - for _, ingredient in pairs(items_of_type) do - local peer_product = indexed_products[ingredient.item.type][ingredient.item.name] - - if peer_product then - local difference = ingredient.item.amount - peer_product.item.amount - - if difference < 0 then - ingredients[ingredient.index].amount = nil - products[peer_product.index].amount = -difference - elseif difference > 0 then - ingredients[ingredient.index].amount = difference - products[peer_product.index].amount = nil - else - ingredients[ingredient.index].amount = nil - products[peer_product.index].amount = nil - end - end - end - end - - -- Remove items after the fact so the iteration above doesn't break - for _, item_table in pairs{ingredients, products} do - for i = #item_table, 1, -1 do - if item_table[i].amount == nil then table.remove(item_table, i) end - end - end - - recipe_proto.ingredients = ingredients - recipe_proto.products = products -end - - --- Multiplies recipe products and ingredients by the given amount ----@param recipe_proto FPRecipePrototype ----@param factor number -function generator_util.multiply_recipe(recipe_proto, factor) - ---@param item_list FormattedRecipeItem[] - local function multiply_items(item_list) - for _, item in pairs(item_list) do - item.amount = item.amount * factor - if item.proddable_amount ~= nil then - item.proddable_amount = item.proddable_amount * factor - end - end - end - - multiply_items(recipe_proto.products) - multiply_items(recipe_proto.ingredients) - recipe_proto.energy = recipe_proto.energy * factor -end - --- Adds the additional proto's ingredients, products and energy to the main proto ----@param main_proto FPRecipePrototype ----@param additional_proto FPRecipePrototype -function generator_util.combine_recipes(main_proto, additional_proto) - ---@param item_category "products" | "ingredients" - local function add_items_to_main_proto(item_category) - local additional_items = additional_proto[item_category] ---@type FormattedRecipeItem[] - for _, item in pairs(additional_items) do - table.insert(main_proto[item_category], item) - end - combine_identical_products(main_proto[item_category]) - end - - add_items_to_main_proto("products") - add_items_to_main_proto("ingredients") - main_proto.energy = main_proto.energy + additional_proto.energy -end - - --- Active mods table needed for the funtions below -local active_mods = script.active_mods - --- Determines whether this recipe is a recycling one or not -local recycling_recipe_mods = { - ["IndustrialRevolution"] = {"^scrap%-.*"}, - ["space-exploration"] = {"^se%-recycle%-.*"}, - ["angelspetrochem"] = {"^converter%-.*"}, - ["reverse-factory"] = {"^rf%-.*"}, - ["ZRecycling"] = {"^dry411srev%-.*"} -} - -local active_recycling_recipe_mods = {} ---@type string[] -for modname, patterns in pairs(recycling_recipe_mods) do - for _, pattern in pairs(patterns) do - if active_mods[modname] then - table.insert(active_recycling_recipe_mods, pattern) - end - end -end - ----@param proto LuaRecipePrototype ----@return boolean -function generator_util.is_recycling_recipe(proto) - for _, pattern in pairs(active_recycling_recipe_mods) do - if string.match(proto.name, pattern) then return true end - end - return false -end - - --- Determines whether the given recipe is a barreling or stacking one -local compacting_recipe_mods = { - ["base"] = {"^fill%-.*", "^empty%-.*"}, - ["deadlock-beltboxes-loaders"] = {"^deadlock%-stacks%-.*", "^deadlock%-packrecipe%-.*", - "^deadlock%-unpackrecipe%-.*"}, - ["DeadlockCrating"] = {"^deadlock%-packrecipe%-.*", "^deadlock%-unpackrecipe%-.*"}, - ["IntermodalContainers"] = {"^ic%-load%-.*", "^ic%-unload%-.*"}, - ["space-exploration"] = {"^se%-delivery%-cannon%-pack%-.*"}, - ["Satisfactorio"] = {"^packaged%-.*", "^unpack%-.*"} -} - -local active_compacting_recipe_mods = {} ---@type string[] -for modname, patterns in pairs(compacting_recipe_mods) do - for _, pattern in pairs(patterns) do - if active_mods[modname] then - table.insert(active_compacting_recipe_mods, pattern) - end - end -end - ----@param proto LuaRecipePrototype ----@return boolean -function generator_util.is_compacting_recipe(proto) - for _, pattern in pairs(active_compacting_recipe_mods) do - if string.match(proto.name, pattern) then return true end - end - return false -end - - --- Determines whether this recipe is irrelevant or not and should thus be excluded -local irrelevant_recipe_categories = { - ["Transport_Drones"] = {"transport-drone-request", "transport-fluid-request"}, - ["Mining_Drones"] = {"mining-depot"}, - ["Deep_Storage_Unit"] = {"deep-storage-item", "deep-storage-fluid", - "deep-storage-item-big", "deep-storage-fluid-big", - "deep-storage-item-mk2/3", "deep-storage-fluid-mk2/3"}, - ["Satisfactorio"] = {"craft-bench", "equipment", "awesome-shop", - "resource-scanner", "object-scanner", "building", - "hub-progressing", "space-elevator", "mam"} -} - -local irrelevant_recipe_categories_lookup = {} ---@type { [string] : true } -for mod, categories in pairs(irrelevant_recipe_categories) do - for _, category in pairs(categories) do - if active_mods[mod] then - irrelevant_recipe_categories_lookup[category] = true - end - end -end - ----@param recipe LuaRecipePrototype ----@return boolean -function generator_util.is_irrelevant_recipe(recipe) - return irrelevant_recipe_categories_lookup[recipe.category] -end - - --- Determines whether this machine is irrelevant or not and should thus be excluded -local irrelevant_machine_mods = { - ["GhostOnWater"] = {"waterGhost%-.*"} -} - -local irrelevant_machines_lookup = {} ---@type string[] -for modname, patterns in pairs(irrelevant_machine_mods) do - for _, pattern in pairs(patterns) do - if active_mods[modname] then - table.insert(irrelevant_machines_lookup, pattern) - end - end -end - ----@param proto LuaEntityPrototype ----@return boolean -function generator_util.is_irrelevant_machine(proto) - for _, pattern in pairs(irrelevant_machines_lookup) do - if string.match(proto.name, pattern) then return true end - end - return false -end - - --- Finds a sprite for the given entity prototype ----@param proto LuaEntityPrototype ----@return SpritePath | nil -function generator_util.determine_entity_sprite(proto) - local entity_sprite = "entity/" .. proto.name ---@type SpritePath - if game.is_valid_sprite_path(entity_sprite) then - return entity_sprite - end - - local items_to_place_this = proto.items_to_place_this - if items_to_place_this and next(items_to_place_this) then - local item_sprite = "item/" .. items_to_place_this[1].name ---@type SpritePath - if game.is_valid_sprite_path(item_sprite) then - return item_sprite - end - end - - return nil -end - --- Determines how long a rocket takes to launch for the given rocket silo prototype --- These stages mirror the in-game progression and timing exactly. Most steps take an additional tick (+1) --- due to how the game code is written. If one stage is completed, you can only progress to the next one --- in the next tick. No stages can be skipped, meaning a minimal sequence time is around 10 ticks long. ----@param silo_proto LuaEntityPrototype ----@return number? launch_sequence_time -function generator_util.determine_launch_sequence_time(silo_proto) - local rocket_proto = silo_proto.rocket_entity_prototype - if not rocket_proto then return nil end -- meaning this isn't a rocket silo proto - - local rocket_flight_threshold = 0.5 -- hardcoded in the game files - local launch_steps = { - lights_blinking_open = (1 / silo_proto.light_blinking_speed) + 1, - doors_opening = (1 / silo_proto.door_opening_speed) + 1, - doors_opened = silo_proto.rocket_rising_delay + 1, - rocket_rising = (1 / rocket_proto.rising_speed) + 1, - rocket_ready = 14, -- estimate for satellite insertion delay - launch_started = silo_proto.launch_wait_time + 1, - engine_starting = (1 / rocket_proto.engine_starting_speed) + 1, - -- This calculates a fractional amount of ticks. Also, math.log(x) calculates the natural logarithm - rocket_flying = math.log(1 + rocket_flight_threshold * rocket_proto.flying_acceleration - / rocket_proto.flying_speed) / math.log(1 + rocket_proto.flying_acceleration), - lights_blinking_close = (1 / silo_proto.light_blinking_speed) + 1, - doors_closing = (1 / silo_proto.door_opening_speed) + 1 - } - - local total_ticks = 0 - for _, ticks_taken in pairs(launch_steps) do - total_ticks = total_ticks + ticks_taken - end - - return (total_ticks / 60) -- retured value is in seconds -end - --- Returns nil if no effect is true, returns the effects otherwise ----@param allowed_effects AllowedEffects ----@return AllowedEffects? allowed_effects -function generator_util.format_allowed_effects(allowed_effects) - if allowed_effects == nil then return nil end - for _, allowed in pairs(allowed_effects) do - if allowed == true then return allowed_effects end - end - return nil -- all effects are false -end - - --- Returns the appropriate prototype name for the given item, incorporating temperature ----@param item FormattedRecipeItem | RelevantItem ----@param name string ----@return string -function generator_util.format_temperature_name(item, name) - -- Optionally two dashes to account for negative temperatures - return (item.temperature) and string.gsub(name, "%-+[0-9]+$", "") or name -end - --- Returns the appropriate localised string for the given item, incorporating temperature ----@param item FormattedRecipeItem | RelevantItem ----@param proto LuaItemPrototype | LuaFluidPrototype ----@return LocalisedString -function generator_util.format_temperature_localised_name(item, proto) - if item.temperature then - return {"", proto.localised_name, " (", item.temperature, " ", {"fp.unit_celsius"}, ")"} - else - return proto.localised_name - end -end - - --- Adds the tooltip for the given recipe ----@param recipe FPRecipePrototype -function generator_util.add_recipe_tooltip(recipe) - local tooltip = {"", {"fp.tt_title", recipe.localised_name}} ---@type LocalisedString - local current_table, next_index = tooltip, 3 - - if recipe.energy ~= nil then - current_table, next_index = util.build_localised_string( - {"", "\n ", {"fp.crafting_time"}, ": ", recipe.energy}, current_table, next_index) - end - - for _, item_type in ipairs{"ingredients", "products"} do - local locale_key = (item_type == "ingredients") and "fp.pu_ingredient" or "fp.pu_product" - current_table, next_index = util.build_localised_string( - {"", "\n ", {locale_key, 2}, ":"}, current_table, next_index) - if not next(recipe[item_type]) then - current_table, next_index = util.build_localised_string({ - "\n ", {"fp.none"}}, current_table, next_index) - else - local items = recipe[item_type] ---@type FormattedRecipeItem[] - for _, item in ipairs(items) do - local name = generator_util.format_temperature_name(item, item.name) - local proto = game[item.type .. "_prototypes"][name] ---@type LuaItemPrototype | LuaFluidPrototype - local localised_name = generator_util.format_temperature_localised_name(item, proto) - current_table, next_index = util.build_localised_string({("\n " .. "[" .. item.type .. "=" - .. name .. "] " .. item.amount .. "x "), localised_name}, current_table, next_index) - end - end - end - - recipe.tooltip = tooltip -end - ----@class ItemGroup ----@field name string ----@field localised_name LocalisedString ----@field order string ----@field valid boolean - --- Generates a table imitating LuaGroup to avoid lua-cpp bridging ----@param group LuaGroup ----@return ItemGroup group_table -function generator_util.generate_group_table(group) - return {name=group.name, localised_name=group.localised_name, order=group.order, valid=true} -end - -return generator_util diff --git a/factoryplanner_1.1.72/backend/handlers/loader.lua b/factoryplanner_1.1.72/backend/handlers/loader.lua deleted file mode 100644 index 3661b052..00000000 --- a/factoryplanner_1.1.72/backend/handlers/loader.lua +++ /dev/null @@ -1,263 +0,0 @@ --- The loader contains the code that runs on_load, pre-caching some data structures that are needed later -local loader = {} - ----@alias RecipeMap { [ItemCategoryID]: { [ItemID]: { [RecipeID]: true } } } ----@alias ItemCategoryID integer ----@alias ItemID integer ----@alias RecipeID integer - ----@alias ModuleMap { [string]: FPModulePrototype } - --- ** LOCAL UTIL ** --- Returns a list of recipe groups in their proper order ----@return ItemGroup[] -local function ordered_recipe_groups() - -- Make a dict with all recipe groups - local group_dict = {} ---@type { [string]: ItemGroup } - for _, recipe in pairs(global.prototypes.recipes) do - if group_dict[recipe.group.name] == nil then - group_dict[recipe.group.name] = recipe.group - end - end - - -- Invert it - local groups = {} ---@type ItemGroup[] - for _, group in pairs(group_dict) do - table.insert(groups, group) - end - - -- Sort it - ---@param a ItemGroup - ---@param b ItemGroup - ---@return boolean - local function sorting_function(a, b) - if a.order < b.order then return true - elseif a.order > b.order then return false end - return false - end - table.sort(groups, sorting_function) - - return groups -end - --- Maps all items to the recipes that produce or consume them ([item_type][item_name] = {[recipe_id] = true} ----@param item_type "products" | "ingredients" ----@return RecipeMap -local function recipe_map_from(item_type) - local map = {} ---@type RecipeMap - - for _, recipe in pairs(global.prototypes.recipes) do - for _, item in ipairs(recipe[item_type] --[[@as FormattedRecipeItem[] ]]) do - local item_proto = prototyper.util.find_prototype("items", item.name, item.type) ---@cast item_proto -nil - map[item_proto.category_id] = map[item_proto.category_id] or {} - map[item_proto.category_id][item_proto.id] = map[item_proto.category_id][item_proto.id] or {} - map[item_proto.category_id][item_proto.id][recipe.id] = true - end - end - - return map -end - - --- Generates a list of all items, sorted for display in the picker ----@return FPItemPrototype[] -local function sorted_items() - local items = {} - - for _, type in pairs{"item", "fluid"} do - for _, item in pairs(PROTOTYPE_MAPS.items[type].members) do - -- Silly checks needed here for migration purposes - if item.group.valid and item.subgroup.valid then table.insert(items, item) end - end - end - - -- Sorts the objects according to their group, subgroup and order - ---@param a FPItemPrototype - ---@param b FPItemPrototype - ---@return boolean - local function sorting_function(a, b) - if a.group.order < b.group.order then return true - elseif a.group.order > b.group.order then return false - elseif a.subgroup.order < b.subgroup.order then return true - elseif a.subgroup.order > b.subgroup.order then return false - elseif a.order < b.order then return true - elseif a.order > b.order then return false end - return false - end - - table.sort(items, sorting_function) - return items -end - - --- Generates a table mapping modules to their prototype by name ----@return ModuleMap -local function module_name_map() - local map = {} ---@type ModuleMap - - for _, category in pairs(global.prototypes.modules) do - for _, module in pairs(category.members) do - map[module.name] = module - end - end - - return map -end - - -local attribute_generators = {} ---@type { [string]: function } - ----@param belt FPBeltPrototype ----@return LocalisedString[] -function attribute_generators.belts(belt) - local throughput_string = {"", belt.throughput .. " ", {"fp.pl_item", 2}, "/", {"fp.unit_second"}} - return {"fp.attribute_line", {"fp.throughput"}, throughput_string} -end - ----@param beacon FPBeaconPrototype ----@return LocalisedString[] -function attribute_generators.beacons(beacon) - return {"", {"fp.attribute_line", {"fp.module_slots"}, beacon.module_limit}, - {"fp.attribute_line", {"fp.effectivity"}, (beacon.effectivity * 100) .. "%"}, - {"fp.attribute_line", {"fp.energy_consumption"}, util.format.SI_value(beacon.energy_usage * 60, "W", 3)}} -end - ----@param wagon FPWagonPrototype ----@return LocalisedString[] -function attribute_generators.wagons(wagon) - local storage_unit = (wagon.category == "cargo-wagon") and {"fp.pl_stack", wagon.storage} or {"fp.l_fluid"} - return {"fp.attribute_line", {"fp.storage"}, {"", util.format.number(wagon.storage, 3) .. " ", storage_unit}} -end - ----@param fuel FPFuelPrototype ----@return LocalisedString[] -function attribute_generators.fuels(fuel) - return {"", {"fp.attribute_line", {"fp.fuel_value"}, util.format.SI_value(fuel.fuel_value, "J", 3)}, - {"fp.attribute_line", {"fp.emissions_multiplier"}, fuel.emissions_multiplier}} -end - ----@param machine FPMachinePrototype ----@return LocalisedString[] -function attribute_generators.machines(machine) - local pollution = machine.energy_usage * (machine.emissions * 60) * 60 - return {"", {"fp.attribute_line", {"fp.crafting_speed"}, util.format.number(machine.speed, 3)}, - {"fp.attribute_line", {"fp.energy_consumption"}, util.format.SI_value(machine.energy_usage * 60, "W", 3)}, - {"fp.attribute_line", {"fp.pollution"}, {"", util.format.SI_value(pollution, "P/m", 3)}}, - {"fp.attribute_line", {"fp.module_slots"}, machine.module_limit}} -end - - ----@alias PrototypeAttributes { [DataType]: { [integer]: LocalisedString } } ----@alias PrototypeAttributesWithCategory { [DataType]: { [integer]: { [integer]: LocalisedString } } } - --- Generates the attribute strings for some types of prototypes ----@return PrototypeAttributes | PrototypeAttributesWithCategory -local function prototype_attributes() - local relevant_prototypes = {"belts", "beacons", "wagons", "fuels", "machines"} - local attributes = {} ---@type PrototypeAttributes | PrototypeAttributesWithCategory - - for _, data_type in pairs(relevant_prototypes) do - local prototypes = global.prototypes[data_type] ---@type AnyIndexedPrototypes - local generator_function = attribute_generators[data_type] - - attributes[data_type] = {} - if prototyper.data_types[data_type] == false then - ---@cast prototypes IndexedPrototypes - ---@cast attributes PrototypeAttributes - - for proto_id, prototype in pairs(prototypes) do - attributes[data_type][proto_id] = generator_function(prototype) - end - else - ---@cast prototypes IndexedPrototypesWithCategory - ---@cast attributes PrototypeAttributesWithCategory - - for category_id, category in pairs(prototypes) do - attributes[data_type][category_id] = {} - local attribute_category = attributes[data_type][category_id] - - for proto_id, prototype in pairs(category.members) do - attribute_category[proto_id] = generator_function(prototype) - end - end - end - end - - return attributes -end - - ----@alias MappedPrototypes { [string]: T } ----@alias MappedPrototypesWithCategory { [string]: { id: integer, name: string, members: { [string]: T } } } ----@alias MappedCategory { id: integer, name: string, members: { [string]: table } } - ----@class PrototypeMaps: { [DataType]: table } ----@field machines MappedPrototypesWithCategory ----@field recipes MappedPrototypes ----@field items MappedPrototypesWithCategory ----@field fuels MappedPrototypesWithCategory ----@field belts MappedPrototypes ----@field wagons MappedPrototypesWithCategory ----@field modules MappedPrototypesWithCategory ----@field beacons MappedPrototypes - ----@param data_types { [DataType]: boolean } ----@return PrototypeMaps -local function prototype_maps(data_types) - local maps = {} ---@type PrototypeMaps - - for data_type, has_categories in pairs(data_types) do - local map = {} - - if not has_categories then - ---@cast map MappedPrototypes - - ---@type IndexedPrototypes - local prototypes = global.prototypes[data_type] - - for _, prototype in pairs(prototypes) do - map[prototype.name] = prototype - end - else - ---@cast map MappedPrototypesWithCategory - - ---@type IndexedPrototypesWithCategory - local prototypes = global.prototypes[data_type] - - for _, category in pairs(prototypes) do - map[category.name] = { name=category.name, id=category.id, members={} } - for _, prototype in pairs(category.members) do - map[category.name].members[prototype.name] = prototype - end - end - end - - maps[data_type] = map - end - - return maps -end - - --- ** TOP LEVEL ** ----@param skip_check boolean Whether the mod version check is skipped -function loader.run(skip_check) - -- If the mod version changed, the loader will be re-run after migration anyways - if not skip_check and script.active_mods["factoryplanner"] ~= global.mod_version then return end - - util.nth_tick.register_all() - - PROTOTYPE_MAPS = prototype_maps(prototyper.data_types) - PROTOTYPE_ATTRIBUTES = prototype_attributes() - - ORDERED_RECIPE_GROUPS = ordered_recipe_groups() - RECIPE_MAPS = { - produce = recipe_map_from("products"), - consume = recipe_map_from("ingredients") - } - - SORTED_ITEMS = sorted_items() - MODULE_NAME_MAP = module_name_map() -end - -return loader diff --git a/factoryplanner_1.1.72/backend/handlers/migrator.lua b/factoryplanner_1.1.72/backend/handlers/migrator.lua deleted file mode 100644 index 0517c927..00000000 --- a/factoryplanner_1.1.72/backend/handlers/migrator.lua +++ /dev/null @@ -1,152 +0,0 @@ --- This code handles the general migration process of the mod's global table --- It decides whether and which migrations should be applied, in appropriate order - -local migrator = {} - ----@alias MigrationMasterList { [integer]: { version: VersionString, migration: Migration } } ----@alias Migration { global: function, player_table: function, subfactory: function, packed_subfactory: function } ----@alias MigrationObject PlayerTable | FPSubfactory | FPPackedSubfactory - --- Returns a table containing all existing migrations in order -local migration_masterlist = { ---@type MigrationMasterList - [1] = {version="0.18.20", migration=require("backend.migrations.migration_0_18_20")}, - [2] = {version="0.18.27", migration=require("backend.migrations.migration_0_18_27")}, - [3] = {version="0.18.29", migration=require("backend.migrations.migration_0_18_29")}, - [4] = {version="0.18.38", migration=require("backend.migrations.migration_0_18_38")}, - [5] = {version="0.18.42", migration=require("backend.migrations.migration_0_18_42")}, - [6] = {version="0.18.45", migration=require("backend.migrations.migration_0_18_45")}, - [7] = {version="0.18.48", migration=require("backend.migrations.migration_0_18_48")}, - [8] = {version="0.18.49", migration=require("backend.migrations.migration_0_18_49")}, - [9] = {version="0.18.51", migration=require("backend.migrations.migration_0_18_51")}, - [10] = {version="1.0.6", migration=require("backend.migrations.migration_1_0_6")}, - [11] = {version="1.1.5", migration=require("backend.migrations.migration_1_1_5")}, - [12] = {version="1.1.6", migration=require("backend.migrations.migration_1_1_6")}, - [13] = {version="1.1.8", migration=require("backend.migrations.migration_1_1_8")}, - [14] = {version="1.1.14", migration=require("backend.migrations.migration_1_1_14")}, - [15] = {version="1.1.19", migration=require("backend.migrations.migration_1_1_19")}, - [16] = {version="1.1.21", migration=require("backend.migrations.migration_1_1_21")}, - [17] = {version="1.1.25", migration=require("backend.migrations.migration_1_1_25")}, - [18] = {version="1.1.26", migration=require("backend.migrations.migration_1_1_26")}, - [19] = {version="1.1.27", migration=require("backend.migrations.migration_1_1_27")}, - [20] = {version="1.1.42", migration=require("backend.migrations.migration_1_1_42")}, - [21] = {version="1.1.43", migration=require("backend.migrations.migration_1_1_43")}, - [22] = {version="1.1.59", migration=require("backend.migrations.migration_1_1_59")}, - [23] = {version="1.1.61", migration=require("backend.migrations.migration_1_1_61")}, - [24] = {version="1.1.65", migration=require("backend.migrations.migration_1_1_65")}, - [25] = {version="1.1.66", migration=require("backend.migrations.migration_1_1_66")}, - [26] = {version="1.1.67", migration=require("backend.migrations.migration_1_1_67")}, -} - --- ** LOCAL UTIL ** --- Compares two mod versions, returns true if v1 is an earlier version than v2 (v1 < v2) --- Version numbers have to be of the same structure: same amount of numbers, separated by a '.' ----@param v1 VersionString ----@param v2 VersionString ----@return boolean -local function compare_versions(v1, v2) - local split_v1 = util.split_string(v1, ".") - local split_v2 = util.split_string(v2, ".") - - for i = 1, #split_v1 do - if split_v1[i] == split_v2[i] then - -- continue - elseif split_v1[i] < split_v2[i] then - return true - else - return false - end - end - return false -- return false if both versions are the same -end - --- Applies given migrations to the object ----@param migrations Migration[] ----@param function_name string ----@param object MigrationObject? ----@param player LuaPlayer? -local function apply_migrations(migrations, function_name, object, player) - for _, migration in ipairs(migrations) do - local migration_function = migration[function_name] - - if migration_function ~= nil then - local migration_message = migration_function(object, player) ---@type string - - -- If no message is returned, everything went fine - if migration_message == "removed" then break end - end - end -end - --- Determines whether a migration needs to take place, and if so, returns the appropriate range of the --- migration_masterlist. If the version changed, but no migrations apply, it returns an empty array. ----@param previous_version VersionString ----@return Migration[] -local function determine_migrations(previous_version) - local migrations = {} - - local found = false - for _, migration in ipairs(migration_masterlist) do - if compare_versions(previous_version, migration.version) then found = true end - if found then table.insert(migrations, migration.migration) end - end - - return migrations -end - - --- ** TOP LEVEL ** --- Applies any appropriate migrations to the global table -function migrator.migrate_global() - local migrations = determine_migrations(global.mod_version) - - apply_migrations(migrations, "global", nil, nil) - global.mod_version = script.active_mods["factoryplanner"] -end - --- Applies any appropriate migrations to the given factory ----@param player LuaPlayer -function migrator.migrate_player_table(player) - local player_table = util.globals.player_table(player) - if player_table ~= nil then -- don't apply migrations to new players - local migrations = determine_migrations(player_table.mod_version) - - -- General migrations - local old_version = player_table.mod_version -- keep for comparison below - apply_migrations(migrations, "player_table", player_table, player) - player_table.mod_version = global.mod_version - - -- Subfactory migrations - for _, factory_name in pairs({"factory", "archive"}) do - --local outdated_subfactories = {} - for _, subfactory in pairs(Factory.get_all(player_table[factory_name], "Subfactory")) do - if subfactory.mod_version ~= old_version then -- out-of-sync subfactory - --error("Out of date subfactory, please report this to the mod author including the save file") - --table.insert(outdated_subfactories, subfactory) - else - apply_migrations(migrations, "subfactory", subfactory, player) - subfactory.mod_version = global.mod_version - end - end - - --[[ -- Remove subfactories who weren't migrated along properly for some reason - -- TODO This is likely due to an old, now-fixed bug that left them behind - for _, subfactory in pairs(outdated_subfactories) do - Factory.remove(player_table[factory_name], subfactory) - end ]] - end - end -end - --- Applies any appropriate migrations to the given export_table's subfactories ----@param export_table ExportTable -function migrator.migrate_export_table(export_table) - local migrations = determine_migrations(export_table.mod_version) - for _, packed_subfactory in pairs(export_table.subfactories) do - -- This migration type won't need the player argument, and removing it allows - -- us to run imports without having a player attached - apply_migrations(migrations, "packed_subfactory", packed_subfactory, nil) - end - export_table.mod_version = global.mod_version -end - -return migrator diff --git a/factoryplanner_1.1.72/backend/handlers/prototyper.lua b/factoryplanner_1.1.72/backend/handlers/prototyper.lua deleted file mode 100644 index 0931702c..00000000 --- a/factoryplanner_1.1.72/backend/handlers/prototyper.lua +++ /dev/null @@ -1,326 +0,0 @@ -local generator = require("backend.handlers.generator") - -prototyper = { - util = {}, - defaults = {} -} - --- The purpose of the prototyper is to recreate the global tables containing all relevant data types. --- It also handles some other things related to prototypes, such as updating preferred ones, etc. --- Its purpose is to not lose any data, so if a dataset of a factory-dataset doesn't exist anymore --- in the newly loaded global tables, it saves the name in string-form instead and makes the --- concerned factory-dataset invalid. This accomplishes that invalid data is only permanently --- removed when the user tells the subfactory to repair itself, giving him a chance to re-add the --- missing mods. It is also a better separation of responsibilities and avoids some redundant code. - --- Load order is important here: machines->recipes->items->fuels --- The boolean indicates whether this prototype has categories or not ----@type { [DataType]: boolean } -prototyper.data_types = {machines = true, recipes = false, items = true, fuels = true, - belts = false, wagons = true, modules = true, beacons = false} - ----@alias DataType "machines" | "recipes" | "items" | "fuels" | "belts" | "wagons" | "modules" | "beacons" - ----@alias NamedPrototypes { [string]: T } ----@alias NamedPrototypesWithCategory { [string]: { name: string, members: { [string]: T } } } } ----@alias NamedCategory { name: string, members: { [string]: table } } ----@alias AnyNamedPrototypes NamedPrototypes | NamedPrototypesWithCategory - ----@alias IndexedPrototypes { [integer]: T } ----@alias IndexedPrototypesWithCategory { [integer]: { id: integer, name: string, members: { [integer]: T } } } ----@alias IndexedCategory { id: integer, name: string, members: { [integer]: table } } ----@alias AnyIndexedPrototypes IndexedPrototypes | IndexedPrototypesWithCategory - ----@class PrototypeLists: { [DataType]: table } ----@field machines IndexedPrototypesWithCategory ----@field recipes IndexedPrototypes ----@field items IndexedPrototypesWithCategory ----@field fuels IndexedPrototypesWithCategory ----@field belts IndexedPrototypes ----@field wagons IndexedPrototypesWithCategory ----@field modules IndexedPrototypesWithCategory ----@field beacons IndexedPrototypes - - --- Converts given prototype list to use ids as keys, and sorts it if desired ----@param data_type DataType ----@param prototype_sorting_function function ----@return AnyIndexedPrototypes -local function convert_and_sort(data_type, prototype_sorting_function) - local final_list = {} - - ---@param list AnyNamedPrototypes[] - ---@param sorting_function function - ---@param category_id integer? - ---@return AnyIndexedPrototypes - local function apply(list, sorting_function, category_id) - local new_list = {} ---@type (IndexedPrototypes | IndexedCategory)[] - - for _, member in pairs(list) do table.insert(new_list, member) end - if sorting_function then table.sort(new_list, sorting_function) end - - for id, member in pairs(new_list) do - member.id = id - member.category_id = category_id -- can be nil - member.data_type = data_type - end - - return new_list - end - - ---@param a NamedCategory - ---@param b NamedCategory - ---@return boolean - local function category_sorting_function(a, b) - if a.name < b.name then return true - elseif a.name > b.name then return false end - return false - end - - if prototyper.data_types[data_type] == false then - final_list = apply(global.prototypes[data_type], prototype_sorting_function, nil) - ---@cast final_list IndexedPrototypes - else - final_list = apply(global.prototypes[data_type], category_sorting_function, nil) - ---@cast final_list IndexedPrototypesWithCategory - for id, category in pairs(final_list) do - category.members = apply(category.members, prototype_sorting_function, id) - end - end - - return final_list -end - - -function prototyper.build() - global.prototypes = {} ---@type PrototypeLists - local prototypes = global.prototypes - - for data_type, _ in pairs(prototyper.data_types) do - ---@type AnyNamedPrototypes - prototypes[data_type] = generator[data_type].generate() - end - - -- Second pass to do some things that can't be done in the first pass due to the strict sequencing - for data_type, _ in pairs(prototyper.data_types) do - local second_pass = generator[data_type].second_pass ---@type function - if second_pass ~= nil then second_pass(prototypes[data_type]) end - end - - -- Finish up generation by converting lists to use ids as keys, and sort if desired - for data_type, _ in pairs(prototyper.data_types) do - local sorting_function = generator[data_type].sorting_function ---@type function - prototypes[data_type] = convert_and_sort(data_type, sorting_function) ---@type AnyIndexedPrototypes - end -end - - --- ** UTIL ** --- Returns the attribute string for the given prototype ----@param prototype AnyFPPrototype ----@return LocalisedString -function prototyper.util.get_attributes(prototype) - if prototype.category_id == nil then - ---@cast prototype FPPrototype - return PROTOTYPE_ATTRIBUTES[prototype.data_type][prototype.id] - else - ---@cast prototype FPPrototypeWithCategory - return PROTOTYPE_ATTRIBUTES[prototype.data_type][prototype.category_id][prototype.id] - end -end - --- Finds the given prototype by name. Can use the loader cache since it'll exist at this point. ----@param data_type DataType ----@param prototype_name string ----@param category_name string? ----@return AnyFPPrototype? -function prototyper.util.find_prototype(data_type, prototype_name, category_name) - --if data_type == nil then llog(prototype_name, category_name) end - local prototype_map = PROTOTYPE_MAPS[data_type] - - if category_name == nil then - return prototype_map[prototype_name] -- can be nil - else - local category = prototype_map[category_name] ---@type MappedCategory - if category == nil then return nil end - return category.members[prototype_name] -- can be nil - end -end - - ----@class FPPackedPrototype ----@field name string ----@field category string ----@field data_type DataType ----@field simplified boolean - --- Returns a new table that only contains the given prototypes' identifiers ----@param proto AnyFPPrototype ----@param category string? ----@return FPPackedPrototype -function prototyper.util.simplify_prototype(proto, category) - return { name = proto.name, category = category, data_type = proto.data_type, simplified = true } -end - --- Validates given object with prototype, which includes trying to find the correct --- new reference for its prototype, if able. Returns valid-status at the end. ----@param prototype AnyFPPrototype | FPPackedPrototype ----@param category_designation ("category" | "type")? ----@return AnyFPPrototype | FPPackedPrototype -function prototyper.util.validate_prototype_object(prototype, category_designation) - local updated_proto = prototype - - if prototype.simplified then -- try to unsimplify, otherwise it stays that way - ---@cast prototype FPPackedPrototype - local new_proto = prototyper.util.find_prototype(prototype.data_type, prototype.name, prototype.category) - if new_proto then updated_proto = new_proto end - else - ---@cast prototype AnyFPPrototype - local category = prototype[category_designation] ---@type string - local new_proto = prototyper.util.find_prototype(prototype.data_type, prototype.name, category) - updated_proto = new_proto or prototyper.util.simplify_prototype(prototype, category) - end - - return updated_proto -end - --- Build the necessary RawDictionaries for translation -function prototyper.util.build_translation_dictionaries() - for _, item_category in ipairs(global.prototypes.items) do - translator.new(item_category.name) - for _, proto in pairs(item_category.members) do - translator.add(item_category.name, proto.name, proto.localised_name) - end - end - - translator.new("recipe") - for _, proto in pairs(global.prototypes.recipes) do - translator.add("recipe", proto.name, proto.localised_name) - end -end - --- Migrates the prototypes for default beacons and modules ----@param player_table PlayerTable -function prototyper.util.migrate_mb_defaults(player_table) - local mb_defaults = player_table.preferences.mb_defaults - local find = prototyper.util.find_prototype - - local machine = mb_defaults.machine - if machine then - mb_defaults.machine = find("modules", machine.name, machine.category) --[[@as FPModulePrototype ]] - end - - local second = mb_defaults.machine_secondary - if second then - mb_defaults.machine_secondary = find("modules", second.name, second.category) --[[@as FPModulePrototype ]] - end - - local beacon = mb_defaults.beacon - if beacon then - mb_defaults.beacon = find("beacons", beacon.name, nil) --[[@as FPBeaconPrototype ]] - end -end - - --- ** DEFAULTS ** ----@alias PrototypeDefault FPPrototype ----@alias PrototypeWithCategoryDefault { [integer]: FPPrototypeWithCategory } ----@alias AnyPrototypeDefault PrototypeDefault | PrototypeWithCategoryDefault - --- Returns the default prototype for the given type, incorporating the category, if given ----@param player LuaPlayer ----@param data_type DataType ----@param category_id integer? ----@return AnyPrototypeDefault -function prototyper.defaults.get(player, data_type, category_id) - ---@type AnyPrototypeDefault - local default = util.globals.preferences(player).default_prototypes[data_type] - return (category_id == nil) and default or default[category_id] -end - --- Sets the default prototype for the given type, incorporating the category, if given ----@param player LuaPlayer ----@param data_type DataType ----@param prototype_id integer ----@param category_id integer? -function prototyper.defaults.set(player, data_type, prototype_id, category_id) - local default_prototypes = util.globals.preferences(player).default_prototypes - local prototypes = global.prototypes[data_type] ---@type AnyIndexedPrototypes - - if category_id == nil then - ---@type PrototypeDefault - default_prototypes[data_type] = prototypes[prototype_id] - else - ---@type PrototypeWithCategoryDefault - default_prototypes[data_type][category_id] = prototypes[category_id].members[prototype_id] - end -end - --- Returns the fallback default for the given type of prototype ----@param data_type DataType ----@return AnyPrototypeDefault -function prototyper.defaults.get_fallback(data_type) - local prototypes = global.prototypes[data_type] ---@type AnyIndexedPrototypes - - local fallback = {} - if prototyper.data_types[data_type] == false then - ---@cast prototypes IndexedPrototypes - fallback = prototypes[1] - else - ---@cast prototypes IndexedPrototypesWithCategory - fallback = {} ---@type PrototypeWithCategoryDefault - for _, category in pairs(prototypes) do - fallback[category.id] = category.members[1] - end - end - - return fallback -end - --- Kinda unclean that I have to do this, but it's better than storing it elsewhere -local category_designations = {machines="category", items="type", - fuels="category", wagons="category", modules="category"} - --- Migrates the default_prototypes preferences, trying to preserve the users choices --- When this is called, the loader cache will already exist ----@param player_table PlayerTable -function prototyper.defaults.migrate(player_table) - local default_prototypes = player_table.preferences.default_prototypes - - for data_type, has_categories in pairs(prototyper.data_types) do - if default_prototypes[data_type] ~= nil then - if not has_categories then - -- Use the same prototype if an equivalent can be found, use fallback otherwise - local default_proto = default_prototypes[data_type] ---@type PrototypeDefault - local equivalent_proto = prototyper.util.find_prototype(data_type, default_proto.name, nil) - ---@cast equivalent_proto PrototypeDefault - default_prototypes[data_type] = equivalent_proto ---@type PrototypeDefault - or prototyper.defaults.get_fallback(data_type) - else - local new_defaults = {} ---@type PrototypeWithCategoryDefault - local fallback = prototyper.defaults.get_fallback(data_type) - - local default_map = {} ---@type { [string]: FPPrototype } - for _, default_proto in pairs(default_prototypes[data_type]--[[@as PrototypeWithCategoryDefault]]) do - local category_name = default_proto[category_designations[data_type]] ---@type string - default_map[category_name] = default_proto - end - - ---@type IndexedPrototypesWithCategory - local categories = global.prototypes[data_type] - - for _, category in pairs(categories) do - local previous_category = default_map[category.name] - if previous_category then -- category existed previously - local proto_name = previous_category.name - ---@type PrototypeWithCategoryDefault - new_defaults[category.id] = prototyper.util.find_prototype(data_type, proto_name, category.name) - end - new_defaults[category.id] = new_defaults[category.id] or fallback[category.id] - end - - default_prototypes[data_type] = new_defaults ---@type PrototypeWithCategoryDefault - end - end - end -end diff --git a/factoryplanner_1.1.72/backend/handlers/screenshotter.lua b/factoryplanner_1.1.72/backend/handlers/screenshotter.lua deleted file mode 100644 index 9f4aebbe..00000000 --- a/factoryplanner_1.1.72/backend/handlers/screenshotter.lua +++ /dev/null @@ -1,207 +0,0 @@ ----@diagnostic disable - --- This file contains functionality to rig the interface for various setups --- that make for good screenshots. It provides a remote interface that its --- companion scenario calls to actually take the screenshots. - --- This code is terrible and uses some functions completely inappropriately, --- but it needs to do that to manipulate the interface because GUI events --- can't be raised manually anymore. - -local mod_gui = require("mod-gui") - -local handler_requires = {"ui.base.compact_dialog", "ui.base.modal_dialog", "ui.main.title_bar", - "ui.dialogs.picker_dialog", "ui.dialogs.porter_dialog"} -local handlers = {} -- Need to require these here since it can't be done inside an event -for _, path in pairs(handler_requires) do handlers[path] = require(path) end - -local function return_dimensions(scene, frame) - local dimensions = {actual_size=frame.actual_size, location=frame.location} - -- We do this on teardown so the frame has time to adjust all its sizes - remote.call("screenshotter_output", "return_dimensions", scene, dimensions) -end - -local function open_modal(player, dialog, modal_data) - main_dialog.toggle(player) - util.globals.main_elements(player).main_frame.location = player.display_resolution -- hack city - util.raise.open_dialog(player, {dialog=dialog, modal_data=modal_data, skip_dimmer=true}) -end - -local function modal_teardown(player, scene) - return_dimensions(scene, util.globals.modal_elements(player).modal_frame) - util.raise.close_dialog(player, "cancel") -end - - -local function get_handler(path, index, event, name) - local gui_handlers = handlers[path][index].gui[event] - for _, handler_table in pairs(gui_handlers) do - if handler_table.name == name then return handler_table.handler end - end -end - -local function set_machine_default(player, proto_name, category_name) - local proto = prototyper.util.find_prototype("machines", proto_name, category_name) - prototyper.defaults.set(player, "machines", proto.id, proto.category_id) -end - - -local actions = { - player_setup = function(player) - local player_table = util.globals.player_table(player) - - -- Mod settings - settings.get_player_settings(player)["fp_display_gui_button"] = {value = false} - settings.get_player_settings(player)["fp_products_per_row"] = {value = 5} - settings.get_player_settings(player)["fp_subfactory_list_rows"] = {value = 18} - - -- Preferences - player_table.preferences.recipe_filters = {disabled = true, hidden = false} - player_table.preferences.ignore_barreling_recipes = true - player_table.preferences.ignore_recycling_recipes = true - player_table.preferences.done_column = true - player_table.preferences.mb_defaults = { -- naughty use of the prototyper function - machine = prototyper.util.find_prototype("modules", "productivity-module-3", "productivity"), - machine_secondary = nil, - beacon = prototyper.util.find_prototype("modules", "speed-module-3", "speed"), - beacon_count = 8 - } - - prototyper.defaults.set(player, "belts", PROTOTYPE_MAPS.belts["fast-transport-belt"].id) - set_machine_default(player, "electric-mining-drill", "basic-solid") - set_machine_default(player, "steel-furnace", "smelting") - set_machine_default(player, "assembling-machine-2", "crafting") - set_machine_default(player, "assembling-machine-3", "advanced-crafting") - set_machine_default(player, "assembling-machine-2", "crafting-with-fluid") - - -- Subfactories - local export_string = "eNrtWmlTGk0Q/iup/WrAmdk5dqzKBy9CMBqOiMGURe0uA67uxR4CWv73t4dDycELmIQchR8smenu6e55+hp5MIKo075TSepFobFn4CIucma8NtQwjpKsDbupyoy9B8OxUzUlsBAQdH3Pgc+oiEmR68+2m0XJKPbtMFTJs6jH10aaO5NdT6XG3ucHI7QDLeuzF/TeeJkKdr0wVUmmkqtX9SjKUhCXeYFKXdsHOo5eG2GUaV4Ddhw/V3HihUC29wDSq0nUyd2xjpFzo9zZuuvbqWY5jHwfVrV9sJpFcbvrR1Gi6d97oVqRz1d3yjf28PN+aSxljqExM3MEq09GNgLlg2Wjf8mm54uLJ4qCwELqeip0VSG23durV8dDO4jB0lWt/mwgddZv3kh00rvfP61nlo+HzaDcFajptlo8eVdHpXr/ZFiN89Fu89BUoi8Pq4KNbt+a9aPB6W1d3e87528lOwirTuukZWaoerJ7FF2/Ld2822kcVvYDUS4djM6Sd42oV/Uq5fsD1izv1O5rOzHF6CD1OlV1MBpUZat8LUpHlZ3+Rxm3hmrwqey0LPDrIPU/XKDz89HlWcm9rJ8PT6yb3olrssagVcnNPOf3fdmMeD5Cl4qjo9LOvtsXF6XBG7AW7Ivxze2xtq9WV7sjPCz135ea936zciyc2ik/bjQuDvuN/F4NA8L52zsxYHfm5en5IHnfov7gw30PtfrlXInBbqW+M0rywfta7ejopn5U60asMtxJz6ulVtit3bxr9Afmh9uzc8t29m/D3qBaa5YvysllBZXdXkgjfNBKjuWnZlgJT68vKubZSdTyW0ooJ7xonX/68Gm3l3thtWPfJQ2eVT/azZvd/YPgGF1+NK6+D1AIbIBDFunFKVAWwAO8kXoAD6/rqY6xlyW5ApyMYs2iYaURaAdRHsIB2ALQJKqfe4nqtGerD0ZHdeFGOm1nBEzT5a+4HIi89lSlru2nahorU9xPjp0hfWbR49XLwgysn7GN9yZpbw3yRLlePCb6ES+6dqZ6Olz3DDexu5kX9rTuzyLaUz9PVvTBMz3qEwW074HyTs1EdiKt+9iBIEglrgozuwdLGIGTA9u9nhr3td4gVgWODyoUplQFcx2luxGc1fa9wMuezoeClPuqPS1Kk0/pqjC887JRYcKzXJN5pnlA0mePnY5F/Q9kptq6T5wqiLNRO/V1kdtDX0tqgFVzyfd06tpHDWXb1QX6W9umO0uM6cbtKeGcJdYL3ZnGSnVW9uOYev5Y8mIHkjUdePBk8obz1VyWmeJ21TSjq+zKiSGxPf9vzALk12eBxV3Pl5BCX0GKrB6TK2Jq4SUtAhCxWFFgSixEKDItaRFmUUsKS1KKCRESE4mIZRJkYsI2BjYv0VGReZsuPJO/t4hbHXFLbmoB7jglRYsB8BAmCEuqYUYoAI8Kgjg2JeOUYYo5woxvEHdKsyWeW+jmSWiPgbNNeH8y/Fa6sAUgnGGQcEG5kJwJRpngnOlUxyWzLAoZUDDCLcYot8TmcPidJnILxRe1jOQPbhnXh/uquPgzEH+15DGIfPMYtFaQ2J07G7rmTsH1Ejf3su2Mup1RtzPqT51RVwqxhcnGKn6RbEwC0wVGGHMuucmEIAIxJCy88QYvCqFj+C1ZYztgvKzDW3pjC0BoEV5kJuIwVGBpUsEtJDiCYkctRAljkhNTYKDC8HuDDZ4bxQCCgms7m+7stghcF4FL72oB9kyBaBFZMMSaFpWSYkakhHlWYxCZmJuYcikI3+iEm2ZK+YXYh6taWqj0fxN/Z7+07jQ+r/Cf2Sv9ltli2yttpFdaFlmLnmCRwEXolXRegMYIEgST1OSwYkLVohAjkCEYIpLIjT5BpBmEbcFJVniD/bmJYv0CNfH8T0oS3Vx79juHRL7XKYx3l9W+axV4ru3P3zIr6kd2aIcJklxfMSGMmJxgCiO3ZSFMqcDQqEhMoVvhFI1rwtN0rE99/JVV8+c/VSzDz6pTgyUhMBiBMBACXCSJfjSWQjBTok0WTjAgApuSwtiwZRhw7BTq1hgzvysqnqpn4IW6d+sknu+vqfe/9yaHfw3Q18r40AwWpf4xOTYFRD9kA667Q0ZgOKFMSAmjCcwlSJq/+AnuR76PlcZeRyV6Nrt69S9948z++425evwPtGH0aA==" - util.porter.add_by_string(player, export_string) - - local trash = Factory.get_by_gui_position(player_table.factory, "Subfactory", 5) - Factory.remove(player_table.factory, trash) - Factory.add(player_table.archive, trash) - - local hotness = Factory.get_by_gui_position(player_table.factory, "Subfactory", 3) - util.context.set_subfactory(player, hotness) - solver.update(player, hotness) - util.raise.refresh(player, "all", nil) - - -- Research - player.force.technologies["oil-processing"].researched=true - player.force.technologies["coal-liquefaction"].researched=true - - -- Player inventory - player.insert{name="assembling-machine-3", count=9} - player.insert{name="assembling-machine-2", count=1} - player.insert{name="electric-mining-drill", count=29} - player.insert{name="speed-module-3", count=14} - player.insert{name="speed-module-2", count=1} - player.insert{name="chemical-plant", count=6} - end, - - setup_01_main_interface = function(player) - local translation_progress = mod_gui.get_frame_flow(player)["flib_translation_progress"] - if translation_progress then translation_progress.visible = false end - main_dialog.toggle(player) - end, - teardown_01_main_interface = function(player) - local main_frame = util.globals.main_elements(player).main_frame - return_dimensions("01_main_interface", main_frame) - end, - - setup_02_compact_interface = function(player) - util.globals.main_elements(player).main_frame.location = player.display_resolution -- hack city - view_state.select(player, 2) - local toggle_handler = get_handler("ui.main.title_bar", 1, "on_gui_click", "switch_to_compact_view") - toggle_handler(player, nil, nil) - end, - teardown_02_compact_interface = function(player) - local compact_frame = util.globals.ui_state(player).compact_elements.compact_frame - return_dimensions("02_compact_interface", compact_frame) - local toggle_handler = get_handler("ui.base.compact_dialog", 2, "on_gui_click", "switch_to_main_view") - toggle_handler(player, nil, nil) - end, - - setup_03_item_picker = function(player) - local modal_data = {item_id=nil, item_category="product"} - open_modal(player, "picker", modal_data) - - local modal_elements = util.globals.modal_elements(player) - modal_elements.search_textfield.text = "f" - local search_handler = get_handler("ui.base.modal_dialog", 1, "on_gui_text_changed", "modal_searchfield") - search_handler(player, nil, {text="f"}) - - local group_handler = get_handler("ui.dialogs.picker_dialog", 1, "on_gui_click", "select_picker_item_group") - group_handler(player, {group_id=3}, nil) - - modal_elements.item_choice_button.sprite = "item/raw-fish" - modal_elements.belt_amount_textfield.text = "0.5" - modal_elements.belt_choice_button.elem_value = "fast-transport-belt" - local belt_handler = get_handler("ui.dialogs.picker_dialog", 1, "on_gui_elem_changed", "picker_choose_belt") - belt_handler(player, nil, {element=modal_elements.belt_choice_button, elem_value="fast-transport-belt"}) - - modal_elements.search_textfield.focus() - end, - teardown_03_item_picker = (function(player) modal_teardown(player, "03_item_picker") end), - - setup_04_recipe_picker = function(player) - local product_proto = prototyper.util.find_prototype("items", "petroleum-gas", "fluid") - ---@cast product_proto -nil - open_modal(player, "recipe", {category_id=product_proto.category_id, - product_id=product_proto.id, production_type="produce"}) - end, - teardown_04_recipe_picker = (function(player) modal_teardown(player, "04_recipe_picker") end), - - setup_05_machine = function(player) - local floor = util.globals.context(player).floor - local line = Collection.get_by_gui_position(floor.Line, 2) ---@cast line -nil - local modal_data = {floor_id=floor.id, line_id=line.id, recipe_name=line.recipe.proto.localised_name} - open_modal(player, "machine", modal_data) - end, - teardown_05_machine = (function(player) modal_teardown(player, "05_machine") end), - - setup_06_import = function(player) - open_modal(player, "import", nil) - - local export_string = "eNrtWt+P4jYQ/lfcPG+2hG2ra6Q+tJUqVepJp+Ohqu5Q5DiT3Wn9I7UdVIT43ztOzIK4RRDKHnBF4gHb4/HM941n7CSLRJmqmIF1aHSSJ9l9dv/tKLlL4J/GWF/QqAOf5Iuk5A5WAt+TQC2xpPboPqNfaHPhjZ03kmsNdq1qeZe4tuxHEVySf1gkmqug6wOqxx/Qg/oatQPrwU7Ze2O8I3UeFTjBJcl9N7pLtPFhbkIj76ypWtHZZMo/QZB4vqBV+kYhJHdB8lfSS9Kr5s9GShoOXpKsN01RS2Ns0PIbatinrZPZpU3CDGSSZ+vxXzrdy3XHZAXBnHqfAZgokOT1/P/i75rwpneKFKZOIGgBacPFX1P2B/AnNum7vtqNS8reUaAx03rmaCKwqIWtFX/UKfvx7xYtMM5qdE/MG1a2KCs2abCieLO90O8oZZhX8lLOmQaomDI0C2mccVrAKNJrUPsdbFBE03RvQmf0dId/pMChaiTWCFWSe9sCuThvwpSAS4CQK9PSUnn2hvy10HlQFaveRVJBTeRURTmnSbF7a1ZJYVVEk2ouHcQQiMT1y66oWnm0nJ4ypgiTrVgKWWCAuAWBTSf0X7AV3MNjiMI8EZbXHvVjsH2toojo9z2bMf++NyAwQpIzWKmsTLC9g5UUgRWgPX+krmxE0CsunqJz23aTWlClJBPSKJU+DDG6NrRWIVGhf16f8nMroYg5um+5Q4Nzhn6e9nP2W7I5aTNMv1kj9rZT9VIgxZFdoRS9EM8aQTV+XjgZakE+2l5hQt5u5Jq3EfJlCHwuQh371Oc4ssfJuimi4IaHb46E2TWUSg7Gt5PeXHZ8cmDHA4H9KUIRMvjBu9NylNe4FcevvxVfqLOD+Btt8Tc+dGMMIjCUvdR5vM6MeqMxYgNhfYsirVurecfDjcxrJfOFin3j86g6PL7COryOmelRF7XxJxe1QcHHqxmnQ3aVCrSiRX87aN8O2reD9tkP2n2BN5pK/Fk2Zv//VuFPU+GFaQjKVPDyc5f2a+Hx9Bs/O/nGz7ZiJXuVWHEeQKaNJNf2+hyeMJ+zFg+9hmwa/CXvd+cJ0bS0B1yzbxxe6pMS1Rji0aYdmftQKbkjCJ2RWJ2fSYU6pO/KopQDDb+Ue9kL2fvusCP4+Ngj+OlPig9HXwUHPT4gQU8cltzurdNPoND57r3dWQ4XnQGCd/VN+0HmXkaueXgVCvtNaJBwsUaAcyG/7gFnS/pMhAYrbPfOsnvRPdDiy7yLP1xOIrjku/j4mu/i08/+UYR7/ixhyr7sT0Kmy38BcOORig==" - local modal_elements = util.globals.modal_elements(player) - modal_elements.import_textfield.text = export_string - - local textfield_handler = get_handler("ui.dialogs.porter_dialog", 1, "on_gui_text_changed", "import_string") - textfield_handler(player, nil, {element=modal_elements.import_textfield, text=export_string}) - - local import_handler = get_handler("ui.dialogs.porter_dialog", 1, "on_gui_click", "import_subfactories") - import_handler(player, nil, nil) - - modal_elements.subfactory_checkboxes["tmp_1"].state = false - modal_elements.subfactory_checkboxes["tmp_3"].state = false - modal_elements.master_checkbox.state = false - end, - teardown_06_import = (function(player) modal_teardown(player, "06_import") end), - - setup_07_utility = function(player) - open_modal(player, "utility", nil) - end, - teardown_07_utility = (function(player) modal_teardown(player, "07_utility") end), - - setup_08_preferences = function(player) - open_modal(player, "preferences", nil) - end, - teardown_08_preferences = (function(player) modal_teardown(player, "08_preferences") end) -} - -local function initial_setup() - DEV_ACTIVE = false -- desync city, but it's fiiine. Avoids any accidental artifacts. - return {"09_settings"} -end - -local function execute_action(player_index, action_name) - local player = game.get_player(player_index) - actions[action_name](player) -end - -remote.add_interface("screenshotter_input", { - initial_setup = initial_setup, - execute_action = execute_action -}) diff --git a/factoryplanner_1.1.72/backend/init.lua b/factoryplanner_1.1.72/backend/init.lua deleted file mode 100644 index 9e93c5f4..00000000 --- a/factoryplanner_1.1.72/backend/init.lua +++ /dev/null @@ -1,391 +0,0 @@ -require("backend.classes.Collection") -require("backend.classes.Factory") -require("backend.classes.Subfactory") -require("backend.classes.Floor") -require("backend.classes.Line") -require("backend.classes.Recipe") -require("backend.classes.Machine") -require("backend.classes.Beacon") -require("backend.classes.ModuleSet") -require("backend.classes.Module") -require("backend.classes.Item") -require("backend.classes.Fuel") - -local loader = require("backend.handlers.loader") -local migrator = require("backend.handlers.migrator") -require("backend.handlers.prototyper") -require("backend.handlers.screenshotter") - -require("backend.calculation.solver") - ----@class PlayerTable ----@field preferences PreferencesTable ----@field settings SettingsTable ----@field ui_state UIStateTable ----@field mod_version VersionString ----@field index PlayerIndex ----@field factory FPFactory ----@field archive FPFactory ----@field translation_tables { [string]: TranslatedDictionary }? ----@field clipboard ClipboardEntry? - ----@class PreferencesTable ----@field pause_on_interface boolean ----@field tutorial_mode boolean ----@field utility_scopes { components: "Subfactory" | "Floor" } ----@field recipe_filters { disabled: boolean, hidden: boolean } ----@field attach_subfactory_products boolean ----@field show_floor_items boolean ----@field fold_out_subfloors boolean ----@field ingredient_satisfaction boolean ----@field round_button_numbers boolean ----@field ignore_barreling_recipes boolean ----@field ignore_recycling_recipes boolean ----@field done_column boolean ----@field pollution_column boolean ----@field line_comment_column boolean ----@field mb_defaults MBDefaults ----@field default_prototypes DefaultPrototypes - ----@class MBDefaults ----@field machine FPModulePrototype ----@field machine_secondary FPModulePrototype ----@field beacon FPBeaconPrototype ----@field beacon_count number - ----@class DefaultPrototypes ----@field machines PrototypeWithCategoryDefault ----@field fuels PrototypeWithCategoryDefault ----@field belts PrototypeDefault ----@field wagons PrototypeWithCategoryDefault ----@field beacons PrototypeDefault - - --- ** LOCAL UTIL ** ----@param player LuaPlayer -local function reload_preferences(player) - -- Reloads the user preferences, incorporating previous preferences if possible - local preferences = global.players[player.index].preferences - - preferences.pause_on_interface = preferences.pause_on_interface or false - if preferences.tutorial_mode == nil then preferences.tutorial_mode = true end - preferences.utility_scopes = preferences.utility_scopes or {components = "Subfactory"} - preferences.recipe_filters = preferences.recipe_filters or {disabled = false, hidden = false} - - preferences.attach_subfactory_products = preferences.attach_subfactory_products or false - preferences.show_floor_items = preferences.show_floor_items or false - preferences.fold_out_subfloors = preferences.fold_out_subfloors or false - preferences.ingredient_satisfaction = preferences.ingredient_satisfaction or false - preferences.round_button_numbers = preferences.round_button_numbers or false - preferences.ignore_barreling_recipes = preferences.ignore_barreling_recipes or false - preferences.ignore_recycling_recipes = preferences.ignore_recycling_recipes or false - - preferences.done_column = preferences.done_column or false - preferences.pollution_column = preferences.pollution_column or false - preferences.line_comment_column = preferences.line_comment_column or false - - preferences.mb_defaults = preferences.mb_defaults - or {machine = nil, machine_secondary = nil, beacon = nil, beacon_count = nil} - - preferences.default_prototypes = preferences.default_prototypes or {} - preferences.default_prototypes = { - machines = preferences.default_prototypes.machines or prototyper.defaults.get_fallback("machines"), - fuels = preferences.default_prototypes.fuels or prototyper.defaults.get_fallback("fuels"), - belts = preferences.default_prototypes.belts or prototyper.defaults.get_fallback("belts"), - wagons = preferences.default_prototypes.wagons or prototyper.defaults.get_fallback("wagons"), - beacons = preferences.default_prototypes.beacons or prototyper.defaults.get_fallback("beacons") - } -end - ----@class SettingsTable ----@field show_gui_button boolean ----@field products_per_row integer ----@field subfactory_list_rows integer ----@field default_timescale integer ----@field belts_or_lanes string ----@field prefer_product_picker boolean ----@field prefer_matrix_solver boolean - ----@param player LuaPlayer -local function reload_settings(player) - -- Writes the current user mod settings to their player_table, for read-performance - local settings = settings.get_player_settings(player) - local settings_table = {} - - local timescale_to_number = {one_second = 1, one_minute = 60, one_hour = 3600} - - settings_table.show_gui_button = settings["fp_display_gui_button"].value - settings_table.products_per_row = tonumber(settings["fp_products_per_row"].value) - settings_table.subfactory_list_rows = tonumber(settings["fp_subfactory_list_rows"].value) - settings_table.default_timescale = timescale_to_number[settings["fp_default_timescale"].value] ---@type integer - settings_table.belts_or_lanes = settings["fp_view_belts_or_lanes"].value - settings_table.prefer_product_picker = settings["fp_prefer_product_picker"].value - settings_table.prefer_matrix_solver = settings["fp_prefer_matrix_solver"].value - - global.players[player.index].settings = settings_table -end - ----@class UIStateTable ----@field main_dialog_dimensions DisplayResolution ----@field last_action string ----@field view_states ViewStates ----@field messages PlayerMessage[] ----@field main_elements { [string]: LuaGuiElement } ----@field compact_elements { [string]: LuaGuiElement } ----@field context Context ----@field last_selected_picker_group integer? ----@field modal_dialog_type ModalDialogType? ----@field modal_data ModalData? ----@field queued_dialog_metadata ModalData? ----@field flags UIStateFlags - ----@class UIStateFlags ----@field archive_open boolean ----@field selection_mode boolean ----@field compact_view boolean ----@field recalculate_on_subfactory_change boolean - ----@param player LuaPlayer -local function reset_ui_state(player) - local ui_state_table = {} - - ui_state_table.main_dialog_dimensions = nil ---@type DisplayResolution Can only be calculated after on_init - ui_state_table.last_action = nil ---@type string The last user action (used for rate limiting) - ui_state_table.view_states = nil ---@type ViewStates The state of the production views - ui_state_table.messages = {} ---@type PlayerMessage[] The general message/warning list - ui_state_table.main_elements = {} -- References to UI elements in the main interface - ui_state_table.compact_elements = {} -- References to UI elements in the compact interface - ui_state_table.context = util.context.create(player) -- The currently displayed set of data - ui_state_table.last_selected_picker_group = nil ---@type integer The item picker category that was last selected - - ui_state_table.modal_dialog_type = nil ---@type ModalDialogType The internal modal dialog type - ui_state_table.modal_data = nil ---@type ModalData Data that can be set for a modal dialog to use - ui_state_table.queued_dialog_metadata = nil ---@type ModalData Info on dialog to open after the current one closes - - ui_state_table.flags = { - archive_open = false, -- Wether the players subfactory archive is currently open - selection_mode = false, -- Whether the player is currently using a selector - compact_view = false, -- Whether the user has switched to the compact main view - recalculate_on_subfactory_change = false -- Whether calculations should re-run - } - - -- The UI table gets replaced because the whole interface is reset - global.players[player.index].ui_state = ui_state_table -end - - ----@param player LuaPlayer -local function create_player_table(player) - global.players[player.index] = {} - local player_table = global.players[player.index] - - player_table.mod_version = global.mod_version - player_table.index = player.index - - player_table.factory = Factory.init() - player_table.archive = Factory.init() - - player_table.preferences = {} - reload_preferences(player) - - reload_settings(player) - reset_ui_state(player) - - util.messages.raise(player, "hint", {"fp.hint_tutorial"}, 12) -end - ----@param player LuaPlayer -local function refresh_player_table(player) - local player_table = global.players[player.index] - - reload_preferences(player) - reload_settings(player) - reset_ui_state(player) - - -- This whole reset thing will be moved ... - local archive_subfactories = Factory.get_in_order(player_table.archive, "Subfactory") - player_table.archive.selected_subfactory = archive_subfactories[1] -- can be nil - - local factory = player_table.factory - local subfactories = Factory.get_in_order(factory, "Subfactory") - local subfactory_to_select = subfactories[1] -- can be nil - if factory.selected_subfactory ~= nil then - -- Get the selected subfactory from the factory to make sure it still exists - local selected_subfactory = Factory.get(factory, "Subfactory", factory.selected_subfactory.id) - if selected_subfactory ~= nil then subfactory_to_select = selected_subfactory end - end - util.context.set_subfactory(player, subfactory_to_select) - - player_table.translation_tables = nil - player_table.clipboard = nil -end - ----@return FPSubfactory? -local function import_tutorial_subfactory() - local imported_tutorial_factory, error = util.porter.process_export_string(TUTORIAL_EXPORT_STRING) - if error then return nil end - return Factory.get(imported_tutorial_factory --[[@as FPSubfactory]], "Subfactory", 1) -end - - -local function global_init() - -- Set up a new save for development if necessary - local freeplay = remote.interfaces["freeplay"] - if DEV_ACTIVE and freeplay then -- Disable freeplay popup-message - if freeplay["set_skip_intro"] then remote.call("freeplay", "set_skip_intro", true) end - if freeplay["set_disable_crashsite"] then remote.call("freeplay", "set_disable_crashsite", true) end - end - - -- Initiates all factorio-global variables - global.mod_version = script.active_mods["factoryplanner"] ---@type VersionString - global.players = {} ---@type { [PlayerIndex]: PlayerTable } - - -- Save metadata about currently registered on_nth_tick events - global.nth_tick_events = {} ---@type { [Tick]: NthTickEvent } - - prototyper.build() -- Generate all relevant prototypes and save them in global - loader.run(true) -- Run loader which creates useful caches of prototype data - - -- Retain current modset to detect mod changes for subfactories that became invalid - global.installed_mods = script.active_mods ---@type ModToVersion - -- Import the tutorial subfactory so it's 'cached' - global.tutorial_subfactory = import_tutorial_subfactory() - - -- Initialize flib's translation module - translator.on_init() - prototyper.util.build_translation_dictionaries() - - -- Create player tables for all existing players - for _, player in pairs(game.players) do create_player_table(player) end -end - --- Prompts migrations, a GUI and prototype reload, and a validity check on all subfactories -local function handle_configuration_change() - prototyper.build() -- Run prototyper - loader.run(true) -- Re-run the loader to update with the new prototypes - - migrator.migrate_global() -- Migrate global - - -- Runs through all players, even new ones without player_table - for _, player in pairs(game.players) do - -- Migrate player_table data if it exists - migrator.migrate_player_table(player) - - -- Create or update player_table - refresh_player_table(player) - local player_table = global.players[player.index] - - -- Migrate the prototypes used in the player's preferences - prototyper.defaults.migrate(player_table) - prototyper.util.migrate_mb_defaults(player_table) - - -- Update the validity of the entire factory and archive - Factory.validate(player_table.factory) - Factory.validate(player_table.archive) - end - - global.installed_mods = script.active_mods - global.tutorial_subfactory = import_tutorial_subfactory() - - translator.on_configuration_changed() - prototyper.util.build_translation_dictionaries() - - for index, player in pairs(game.players) do - util.gui.reset_player(player) -- Destroys all existing GUI's - util.gui.toggle_mod_gui(player) -- Recreates the mod-GUI if necessary - - -- Update factory and archive calculations in case prototypes changed in a relevant way - local player_table = global.players[index] ---@type PlayerTable - Factory.update_calculations(player_table.factory, player) - Factory.update_calculations(player_table.archive, player) - end -end - - --- ** TOP LEVEL ** -script.on_init(global_init) - -script.on_configuration_changed(handle_configuration_change) - -script.on_load(loader.run) - - --- ** PLAYER DATA ** -script.on_event(defines.events.on_player_created, function(event) - local player = game.get_player(event.player_index) ---@cast player -nil - - -- Sets up the player_table for the new player - create_player_table(player) - - -- Sets up the mod-GUI for the new player if necessary - util.gui.toggle_mod_gui(player) - - -- Add the subfactories that are handy for development - if DEV_ACTIVE then util.porter.add_by_string(player, DEV_EXPORT_STRING) end -end) - -script.on_event(defines.events.on_player_removed, function(event) - global.players[event.player_index] = nil -end) - - -script.on_event(defines.events.on_player_joined_game, translator.on_player_joined_game) - -script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - if event.setting_type == "runtime-per-user" then -- this mod only has per-user settings - local player = game.get_player(event.player_index) ---@cast player -nil - reload_settings(player) - - if event.setting == "fp_display_gui_button" then - util.gui.toggle_mod_gui(player) - - elseif event.setting == "fp_products_per_row" - or event.setting == "fp_subfactory_list_rows" - or event.setting == "fp_prefer_product_picker" then - main_dialog.rebuild(player, false) - - elseif event.setting == "fp_view_belts_or_lanes" then - local player_table = util.globals.player_table(player) - - -- Goes through every subfactory's top level products and updates their defined_by - local defined_by = player_table.settings.belts_or_lanes - Factory.update_product_definitions(player_table.factory, defined_by) - Factory.update_product_definitions(player_table.archive, defined_by) - local subfactory = player_table.ui_state.context.subfactory - - solver.update(player, subfactory) - main_dialog.rebuild(player, false) - end - end -end) - - --- ** TRANSLATION ** --- Required by flib's translation module -script.on_event(defines.events.on_tick, translator.on_tick) - --- Keep translation going -script.on_event(defines.events.on_string_translated, translator.on_string_translated) - ----@param event GuiEvent -local function dictionaries_ready(event) - local player = game.get_player(event.player_index) ---@cast player -nil - local player_table = util.globals.player_table(player) - - player_table.translation_tables = translator.get_all(event.player_index) - modal_dialog.set_searchfield_state(player) -- enables searchfields if possible -end - --- Save translations once they are complete -script.on_event(translator.on_player_dictionaries_ready, dictionaries_ready) - - --- ** COMMANDS ** -commands.add_command("fp-reset-prototypes", {"command-help.fp_reset_prototypes"}, handle_configuration_change) -commands.add_command("fp-restart-translation", {"command-help.fp_restart_translation"}, function() - translator.on_init() - prototyper.util.build_translation_dictionaries() -end) -commands.add_command("fp-shrinkwrap-interface", {"command-help.fp_shrinkwrap_interface"}, function(command) - if command.player_index then main_dialog.shrinkwrap_interface(game.get_player(command.player_index)) end -end) diff --git a/factoryplanner_1.1.72/backend/migrations/masterlist.json b/factoryplanner_1.1.72/backend/migrations/masterlist.json deleted file mode 100644 index 96a877c2..00000000 --- a/factoryplanner_1.1.72/backend/migrations/masterlist.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - "0.18.20", - "0.18.27", - "0.18.29", - "0.18.38", - "0.18.42", - "0.18.45", - "0.18.48", - "0.18.49", - "0.18.51", - "1.0.6", - "1.1.5", - "1.1.6", - "1.1.8", - "1.1.14", - "1.1.19", - "1.1.21", - "1.1.25", - "1.1.26", - "1.1.27", - "1.1.42", - "1.1.43", - "1.1.59", - "1.1.61", - "1.1.65", - "1.1.66", - "1.1.67" -] \ No newline at end of file diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_0_0.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_0_0.lua deleted file mode 100644 index f952d928..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_0_0.lua +++ /dev/null @@ -1,17 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() -end - -function migration.player_table(player_table) -end - -function migration.subfactory(subfactory) -end - -function migration.packed_subfactory(packed_subfactory) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_20.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_20.lua deleted file mode 100644 index 65577ce3..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_20.lua +++ /dev/null @@ -1,18 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - local types = {"Ingredient", "Product", "Byproduct"} - for _, type in pairs(types) do - for _, item in pairs(Subfactory.get_in_order(subfactory, type)) do - local req_amount = { - defined_by = "amount", - amount = item.required_amount - } - item.required_amount = req_amount - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_27.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_27.lua deleted file mode 100644 index cd67f399..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_27.lua +++ /dev/null @@ -1,30 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - player_table.preferences.default_prototypes = { - belts = {structure_type="simple", prototype=player_table.preferences.preferred_belt}, - beacons = {structure_type="simple", prototype=player_table.preferences.preferred_beacon}, - machines = {structure_type="complex", prototypes=player_table.preferences.default_machines.categories} - } - player_table.preferences.preferred_belt = nil - player_table.preferences.preferred_beacon = nil - player_table.preferences.preferred_fuel = nil - player_table.preferences.default_machines = nil -end - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - local fuel = Line.get_by_gui_position(line, "Fuel", 1) - if fuel ~= nil and fuel.valid and fuel.proto ~= nil then - fuel.category = fuel.proto.fuel_category - line.fuel = fuel - end - line.Fuel = nil - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_29.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_29.lua deleted file mode 100644 index da2f59bd..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_29.lua +++ /dev/null @@ -1,16 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory, player) - if util.globals.settings(player).belts_or_lanes == "lanes" then - for _, product in pairs(Subfactory.get_in_order(subfactory, "Product")) do - if product.required_amount.defined_by == "belts" then - product.required_amount.defined_by = "lanes" - product.required_amount.amount = product.required_amount.amount * 2 - end - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_38.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_38.lua deleted file mode 100644 index 7ebe5fdd..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_38.lua +++ /dev/null @@ -1,60 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - player_table.factory.valid = nil - player_table.archive.valid = nil -end - -function migration.subfactory(subfactory) - if not subfactory.valid then - Factory.remove(subfactory.parent, subfactory) - return "removed" - end - - for _, item in pairs(Subfactory.get_in_order(subfactory, "Ingredient")) do item.type = nil end - for _, item in pairs(Subfactory.get_in_order(subfactory, "Product")) do item.type = nil end - for _, item in pairs(Subfactory.get_in_order(subfactory, "Byproduct")) do item.type = nil end - - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - line.machine.parent = line - - local module_count = 0 - for _, module in pairs(Line.get_in_order(line, "Module")) do - module_count = module_count + module.amount - module.category = nil - module.parent = line.machine - end - - line.machine.category = nil - line.machine.Module = line.Module - line.Module = nil - - line.machine.module_count = module_count - line.machine.total_effects = {consumption = 0, speed = 0, productivity = 0, pollution = 0} - - if line.beacon then - line.beacon.module.category = nil - end - - if line.fuel then - line.fuel.category = nil - line.fuel.parent = line.machine - line.machine.fuel = line.fuel - line.fuel = nil - end - - if line.subfloor then - line.machine = nil - line.beacon = nil - line.priority_product_proto = nil - line.production_ratio = nil - line.uncapped_production_ratio = nil - end - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_42.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_42.lua deleted file mode 100644 index 7dc6bbf0..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_42.lua +++ /dev/null @@ -1,42 +0,0 @@ ----@diagnostic disable - -local migration = {} - -local function migrate_collection(collection, object_class) - collection.class = collection.type - collection.type = nil - collection.object_class = object_class -end - -function migration.player_table(player_table) - migrate_collection(player_table.factory.Subfactory, "Subfactory") - migrate_collection(player_table.archive.Subfactory, "Subfactory") -end - -function migration.subfactory(subfactory) - migrate_collection(subfactory.Product, "Item") - migrate_collection(subfactory.Byproduct, "Item") - migrate_collection(subfactory.Ingredient, "Item") - migrate_collection(subfactory.Floor, "Floor") - - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - migrate_collection(floor.Line, "Line") - - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if line.subfloor then - line.recipe = nil - line.percentage = nil - line.production_ratio = nil - line.uncapped_production_ratio = nil - else - migrate_collection(line.machine.Module, "Module") - end - - migrate_collection(line.Product, "Item") - migrate_collection(line.Byproduct, "Item") - migrate_collection(line.Ingredient, "Item") - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_45.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_45.lua deleted file mode 100644 index 333fd82c..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_45.lua +++ /dev/null @@ -1,21 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - player_table.ui_state.current_activity = nil -end - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if line.machine and line.machine.fuel then line.machine.fuel.satisfied_amount = 0 end - - line.Product = Collection.init() - line.Byproduct = Collection.init() - line.Ingredient = Collection.init() - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_48.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_48.lua deleted file mode 100644 index da21012d..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_48.lua +++ /dev/null @@ -1,17 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - subfactory.scopes = {} - - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - line.Product = Collection.init() - line.Byproduct = Collection.init() - line.Ingredient = Collection.init() - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_49.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_49.lua deleted file mode 100644 index b7f1c32e..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_49.lua +++ /dev/null @@ -1,22 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - local preferences = player_table.preferences - - local mb_defaults = preferences.mb_defaults - if mb_defaults then - mb_defaults.machine = mb_defaults.module - mb_defaults.module = nil - end - - local optional_columns = preferences.optional_production_columns - if optional_columns then - preferences.pollution_column = optional_columns.pollution_column - preferences.line_comment_column = optional_columns.line_comments - preferences.optional_production_columns = nil - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_0_18_51.lua b/factoryplanner_1.1.72/backend/migrations/migration_0_18_51.lua deleted file mode 100644 index f61835d1..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_0_18_51.lua +++ /dev/null @@ -1,17 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - if subfactory.icon and subfactory.icon.type == "virtual-signal" then - subfactory.icon.type = "virtual" - end -end - -function migration.packed_subfactory(packed_subfactory) - if packed_subfactory.icon and packed_subfactory.icon.type == "virtual-signal" then - packed_subfactory.icon.type = "virtual" - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_0_6.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_0_6.lua deleted file mode 100644 index 9e78d655..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_0_6.lua +++ /dev/null @@ -1,17 +0,0 @@ ----@diagnostic disable - -local migration = {} -- same migration as 0.18.51, not sure why that one didn't take - -function migration.subfactory(subfactory) - if subfactory.icon and subfactory.icon.type == "virtual-signal" then - subfactory.icon.type = "virtual" - end -end - -function migration.packed_subfactory(packed_subfactory) - if packed_subfactory.icon and packed_subfactory.icon.type == "virtual-signal" then - packed_subfactory.icon.type = "virtual" - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_14.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_14.lua deleted file mode 100644 index b4570ade..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_14.lua +++ /dev/null @@ -1,34 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if not line.subfloor then - line.done = false - - line.machine.force_limit = line.machine.hard_limit - line.machine.hard_limit = nil - end - end - end -end - -function migration.packed_subfactory(packed_subfactory) - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - else - packed_line.done = false - - packed_line.machine.force_limit = packed_line.machine.hard_limit - packed_line.machine.hard_limit = nil - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_19.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_19.lua deleted file mode 100644 index 5582d94d..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_19.lua +++ /dev/null @@ -1,9 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() - global.nth_tick_events = {} -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_21.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_21.lua deleted file mode 100644 index 35a0d276..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_21.lua +++ /dev/null @@ -1,10 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - local Subfactory = player_table.archive.Subfactory - Subfactory.count = table_size(Subfactory.datasets) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_25.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_25.lua deleted file mode 100644 index d3914449..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_25.lua +++ /dev/null @@ -1,13 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() - for _, event_data in pairs(global.nth_tick_events) do - if event_data.handler_name == "delete_subfactory" then - event_data.handler_name = "delete_subfactory_for_good" - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_26.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_26.lua deleted file mode 100644 index cf730065..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_26.lua +++ /dev/null @@ -1,15 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if line.machine and line.machine.fuel and line.machine.fuel.proto == nil then - Floor.remove(floor, line) -- needs to be fully removed to fix the issue - end - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_27.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_27.lua deleted file mode 100644 index f07afd4e..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_27.lua +++ /dev/null @@ -1,39 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_all(floor, "Line")) do - local beacon = line.beacon - if beacon and beacon.module then - beacon.Module = Collection.init() - beacon.module_count = 0 - beacon.module.parent = beacon - Collection.add(beacon.Module, beacon.module) - beacon.module_count = beacon.module_count + beacon.module.amount - beacon.module = nil - end - end - end -end - -function migration.packed_subfactory(packed_subfactory) - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - elseif packed_line.beacon and packed_line.beacon.module then - local beacon = packed_line.beacon - local module = Module.unpack(beacon.module) - local modules = Collection.init() - Collection.add(modules, module) - beacon.Module = Collection.pack(modules, Module) - beacon.module_count = module.amount - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_42.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_42.lua deleted file mode 100644 index 0bfcd33d..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_42.lua +++ /dev/null @@ -1,72 +0,0 @@ ----@diagnostic disable - -local migration = {} - -local function migrate_modules(object) - object.module_count = nil - if object.proto.simplified then object.proto = {module_limit = 0} end - local module_set = ModuleSet.init(object) - for _, module in pairs(object.Module.datasets) do - ModuleSet.add(module_set, module.proto, module.amount) - end - object.Module = nil - object.module_set = module_set -end - -local function migrate_packed_modules(packed_object) - local module_set = { - modules = packed_object.Module, - module_count = packed_object.module_count, - empty_slots = 0, -- updated later - class = "ModuleSet" - } - packed_object.Module = nil - packed_object.module_set = module_set -end - -function migration.global() - global.alt_actions = nil -end - -function migration.player_table(player_table) - player_table.clipboard = nil - player_table.preferences.tutorial_mode = true -end - -function migration.subfactory(subfactory) - if subfactory.icon then - local icon_path = subfactory.icon.type .. "/" .. subfactory.icon.name - subfactory.name = "[img=" .. icon_path .. "] " .. subfactory.name - subfactory.icon = nil - end - - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_all(floor, "Line")) do - line.effects_tooltip = "" - if not line.subfloor then migrate_modules(line.machine) end - if line.beacon then migrate_modules(line.beacon) end - end - end -end - -function migration.packed_subfactory(packed_subfactory) - if packed_subfactory.icon then - local icon_path = packed_subfactory.icon.type .. "/" .. packed_subfactory.icon.name - packed_subfactory.name = "[img=" .. icon_path .. "] " .. packed_subfactory.name - packed_subfactory.icon = nil - end - - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - else - migrate_packed_modules(packed_line.machine) - if packed_line.beacon then migrate_packed_modules(packed_line.beacon) end - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_43.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_43.lua deleted file mode 100644 index c154de7f..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_43.lua +++ /dev/null @@ -1,19 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - for _, factory_name in pairs({"factory", "archive"}) do - local factory = player_table[factory_name] - local subfactories = Factory.get_in_order(factory, "Subfactory") - if table_size(subfactories) ~= factory.Subfactory.count then - local gui_position = 1 - for _, subfactory in pairs(factory.Subfactory.datasets) do - subfactory.gui_position = gui_position - gui_position = gui_position + 1 - end - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_5.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_5.lua deleted file mode 100644 index cccc8098..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_5.lua +++ /dev/null @@ -1,45 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - player_table.ui_state.view_states = player_table.ui_state.view_state - player_table.preferences.toggle_column = false -end - -function migration.subfactory(subfactory) - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - if floor.level > 1 then floor.defining_line = floor.Line.datasets[1] end - - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if not line.subfloor then - line.machine.effects_tooltip = "" - for _, module in pairs(line.machine.Module.datasets) do - module.effects_tooltip = "" - end - - line.active = true - end - - if line.beacon then - line.beacon.effects_tooltip = "" - line.beacon.module.effects_tooltip = "" -- not strictly necessary yet - end - end - end -end - -function migration.packed_subfactory(packed_subfactory) - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - else - packed_line.active = true - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_59.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_59.lua deleted file mode 100644 index 6113ca58..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_59.lua +++ /dev/null @@ -1,18 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.packed_subfactory(packed_subfactory) - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - else - packed_line.Product = Collection.pack(Collection.init(), Item) - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_6.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_6.lua deleted file mode 100644 index b22903b5..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_6.lua +++ /dev/null @@ -1,13 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() - global.tutorial_subfactory = nil -end - -function migration.subfactory(subfactory) - subfactory.linearly_dependant = false -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_61.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_61.lua deleted file mode 100644 index 4a90cb47..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_61.lua +++ /dev/null @@ -1,13 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() - for _, event_data in pairs(global.nth_tick_events) do - if event_data.handler_name == "adjust_interface_dimensions" then - event_data.handler_name = "shrinkwrap_interface" - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_65.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_65.lua deleted file mode 100644 index 87321fb9..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_65.lua +++ /dev/null @@ -1,13 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - subfactory.blueprints = {} -end - -function migration.packed_subfactory(packed_subfactory) - packed_subfactory.blueprints = {} -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_66.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_66.lua deleted file mode 100644 index 383fcaf4..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_66.lua +++ /dev/null @@ -1,16 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.player_table(player_table) - local Subfactory = player_table.archive.Subfactory - Subfactory.count = table_size(Subfactory.datasets) - - local gui_position = 1 - for _, subfactory in pairs(Subfactory.datasets) do - subfactory.gui_position = gui_position - gui_position = gui_position + 1 - end -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_67.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_67.lua deleted file mode 100644 index c6ae7dad..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_67.lua +++ /dev/null @@ -1,181 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.global() - global.tutorial_subfactory_validity = nil - - local data_types = {"machines", "recipes", "items", "fuels", "belts", "wagons", "modules", "beacons"} - for _, data_type in pairs(data_types) do global["all_" .. data_type] = nil end -end - -function migration.player_table(player_table) - local default_prototypes = player_table.preferences.default_prototypes - default_prototypes["machines"] = default_prototypes["machines"].prototypes - default_prototypes["fuels"] = default_prototypes["fuels"].prototypes - default_prototypes["belts"] = default_prototypes["belts"].prototype - default_prototypes["wagons"] = default_prototypes["wagons"].prototypes - default_prototypes["beacons"] = default_prototypes["beacons"].prototype -end - -function migration.subfactory(subfactory) - for _, product in pairs(Subfactory.get_all(subfactory, "Product")) do - if product.proto.simplified then - product.proto = {name=product.proto.name, category=product.proto.type, data_type="items", simplified=true} - else - product.proto.data_type = "items" - end - local belt_proto = product.required_amount.belt_proto - if belt_proto then - if belt_proto.simplified then - product.required_amount.belt_proto = {name=belt_proto.name, data_type="belts", simplified=true} - else - product.required_amount.belt_proto.data_type = "belts" - end - end - end - - for index, _ in pairs(subfactory.matrix_free_items or {}) do - local item_proto = subfactory.matrix_free_items[index] - if item_proto.simplified then - subfactory.matrix_free_items[index] = - {name=item_proto.name, category=item_proto.type, data_type="items", simplified=true} - else - item_proto.data_type = "items" - end - end - - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_all(floor, "Line")) do - if line.subfloor then goto skip end - local recipe_proto = line.recipe.proto - if recipe_proto.simplified then - line.recipe.proto = {name=recipe_proto.name, data_type="recipes", simplified=true} - else - recipe_proto.data_type = "recipes" - end - local machine_proto = line.machine.proto - if machine_proto.simplified then - line.machine.proto = - {name=machine_proto.name, category=machine_proto.category, data_type="machines", simplified=true} - else - machine_proto.data_type = "machines" - end - local machine_module_set = line.machine.module_set - for _, module in pairs(machine_module_set.modules.datasets) do - if module.proto.simplified then - module.proto = {name=module.proto.name, category=module.proto.category, - data_type="modules", simplified=true} - else - module.proto.data_type = "modules" - end - end - if line.machine.fuel then - local fuel_proto = line.machine.fuel.proto - if fuel_proto.simplified then - line.machine.fuel.proto = - {name=fuel_proto.name, category=fuel_proto.category, data_type="fuels", simplified=true} - else - fuel_proto.data_type = "fuels" - end - end - if line.beacon then - local beacon_proto = line.beacon.proto - if beacon_proto.simplified then - line.beacon.proto = {name=beacon_proto.name, data_type="beacons", simplified=true} - else - beacon_proto.data_type = "beacons" - end - local beacon_module_set = line.beacon.module_set - for _, module in pairs(beacon_module_set.modules.datasets) do - if module.proto.simplified then - module.proto = {name=module.proto.name, category=module.proto.category, - data_type="modules", simplified=true} - else - module.proto.data_type = "modules" - end - end - end - if line.priority_product_proto then - local priority_product_proto = line.priority_product_proto - if priority_product_proto.simplified then - line.priority_product_proto = {name=priority_product_proto.name, - category=priority_product_proto.type, data_type="items", simplified=true} - else - priority_product_proto.data_type = "items" - end - end - for _, product in pairs(line.Product.datasets) do - if product.proto.simplified then - product.proto = - {name=product.proto.name, category=product.proto.type, data_type="items", simplified=true} - else - product.proto.data_type = "items" - end - end - ::skip:: - end - end -end - -function migration.packed_subfactory(packed_subfactory) - for _, product in pairs(packed_subfactory.Product.objects) do - product.proto = {name=product.proto.name, category=product.proto.type, data_type="items", simplified=true} - if product.required_amount.belt_proto then - local belt_proto = product.required_amount.belt_proto - product.required_amount.belt_proto = {name=belt_proto.name, data_type="belts", simplified=true} - end - end - - if packed_subfactory.matrix_free_items then - for index, proto in pairs(packed_subfactory.matrix_free_items) do - packed_subfactory.matrix_free_items[index] = - {name=proto.name, category=proto.type, data_type="items", simplified=true} - end - end - - local function update_lines(floor) - for _, packed_line in ipairs(floor.Line.objects) do - if packed_line.subfloor then - update_lines(packed_line.subfloor) - else - local recipe_proto = packed_line.recipe.proto - packed_line.recipe.proto = {name=recipe_proto.name, data_type="recipes", simplified=true} - local machine_proto = packed_line.machine.proto - packed_line.machine.proto = - {name=machine_proto.name, category=machine_proto.category, data_type="machines", simplified=true} - local module_set = packed_line.machine.module_set - for _, module in pairs(module_set.modules.objects) do - module.proto = - {name=module.proto.name, category=module.proto.category, data_type="modules", simplified=true} - end - if packed_line.machine.fuel then - local fuel_proto = packed_line.machine.fuel.proto - packed_line.machine.fuel.proto = - {name=fuel_proto.name, category=fuel_proto.category, data_type="fuels", simplified=true} - end - if packed_line.beacon then - local beacon_proto = packed_line.beacon.proto - packed_line.beacon.proto = {name=beacon_proto.name, data_type="beacons", simplified=true} - local module_set = packed_line.beacon.module_set - for _, module in pairs(module_set.modules.objects) do - module.proto = {name=module.proto.name, category=module.proto.category, - data_type="modules", simplified=true} - end - end - if packed_line.priority_product_proto then - local priority_product_proto = packed_line.priority_product_proto - packed_line.priority_product_proto = {name=priority_product_proto.name, - category=priority_product_proto.type, data_type="items", simplified=true} - end - for _, product in pairs(packed_line.Product.objects) do - product.proto = - {name=product.proto.name, category=product.proto.type, data_type="items", simplified=true} - end - end - end - end - update_lines(packed_subfactory.top_floor) -end - -return migration diff --git a/factoryplanner_1.1.72/backend/migrations/migration_1_1_8.lua b/factoryplanner_1.1.72/backend/migrations/migration_1_1_8.lua deleted file mode 100644 index bf2be62d..00000000 --- a/factoryplanner_1.1.72/backend/migrations/migration_1_1_8.lua +++ /dev/null @@ -1,14 +0,0 @@ ----@diagnostic disable - -local migration = {} - -function migration.subfactory(subfactory) - -- Revert all the crap I did with the previous version - for _, floor in pairs(Subfactory.get_all_floors(subfactory)) do - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if line.subfloor then line.machine = nil end - end - end -end - -return migration diff --git a/factoryplanner_1.1.72/changelog.txt b/factoryplanner_1.1.72/changelog.txt deleted file mode 100644 index 9b4f6dce..00000000 --- a/factoryplanner_1.1.72/changelog.txt +++ /dev/null @@ -1,1938 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.1.72 -Date: 27. 07. 2023 - Bugfixes: - - Potentially fixed a crash caused by a migration issue - ---------------------------------------------------------------------------------------------------- -Version: 1.1.71 -Date: 25. 07. 2023 - Changes: - - Changed the mod shortcut and mod-gui icons to a proper icon instead of the 'FP' text - Bugfixes: - - Fixed that copy-pasting a machine could make the target have the wrong recipe category - - Fixed a crash when loading a machine that doesn't have a sprite defined - - Fixed utility dialog handcrafting trying to craft the wrong items - - Fixed utility dialog handcrafting allowing the player to craft even if they didn't have the right permission - ---------------------------------------------------------------------------------------------------- -Version: 1.1.70 -Date: 12. 06. 2023 - Bugfixes: - - Fixed a crash when trying to delete a recipe in certain situations with the foldout subfloors-option enabled - ---------------------------------------------------------------------------------------------------- -Version: 1.1.69 -Date: 08. 06. 2023 - Bugfixes: - - Fixed that recipes would not correctly find the proper machine to use in some cases - ---------------------------------------------------------------------------------------------------- -Version: 1.1.68 -Date: 06. 06. 2023 - Bugfixes: - - Fixed that trying to pick a recipe for fuel would add an unrelated recipe - - Fixed a crash when shift-clicking the add subfactory button with no existing subfactories - - Fixed crash when trying to edit certain machines due to a missing migration of machine&beacon defaults - - Fixed a crash when the matrix dialog would automatically open - ---------------------------------------------------------------------------------------------------- -Version: 1.1.67 -Date: 05. 06. 2023 - Changes: - - Changed the blueprint storage to support blueprint books as well - - Moved the info/warning/error messages from the top to the bottom - - Changed locale to use the controller-compatible button names versions where possible - - Bumped the required Factorio version to 1.1.82 - Bugfixes: - - Fixed that deleting the last recipe on a folded out subfloor would not remove said subfloor - - Fixed some crashes and weirdness around storing blueprints - ---------------------------------------------------------------------------------------------------- -Version: 1.1.66 -Date: 10. 05. 2023 - Changes: - - Bumped the required Factorio version to 1.1.79 - Bugfixes: - - Fixed recipe move buttons not being enabled correctly when subfloors are folded out - - Fixed beacons with the overload mechanic being forced to 0 beacons instead of 1 - - (Hopefully) fixed a crash due to migration issues for subfactories in archive - ---------------------------------------------------------------------------------------------------- -Version: 1.1.65 -Date: 10. 05. 2023 - Features: - - Added a section to the Utility dialog where relevant blueprints can be stored on each subfactory - - Added a live-updating list of module effects to the machine and beacon dialogs - - Made it so all items of the same kind are highlighted when hovering over one in the compact dialog - - Added the console command '/fp-shrinkwrap-interface' to reduce the size of the interface until it fits the screen - Changes: - - Changed the main interface shrinkwrap to now apply when resolution or scale changes - - Extended the overload beacon detection to a couple more mods (Thanks ctgPi!) - - Changed the matrix settings dialog to show items in natural sort order (Thanks ctgPi!) - - Moved both preferences from the production header to the preferences dialog - - Removed the background dimmer and click-blocker around the main interface - - Simplified indentation visuals for folded out subfloors - - Updated the GUI in a few other minor ways - Bugfixes: - - Fixed a rare bug when repairing subfactories with invalid subfloors - ---------------------------------------------------------------------------------------------------- -Version: 1.1.64 -Date: 30. 04. 2023 - Features: - - Added the ability to shift subfactories and recipes by 5 spots - Changes: - - Limited beacon amount to 1 when using the mod with Space Exploration - - Changed exact machine limits to default to being enabled - Bugfixes: - - Fixed space science not showing up at all - ---------------------------------------------------------------------------------------------------- -Version: 1.1.63 -Date: 29. 04. 2023 - Features: - - Subfactories can now be duplicated from the archive, placing them into the main list - Changes: - - Redesigned the subfactory info box slightly - - Made the game pause button more obvious in the UI - - Removed the amount indication on machines and fuels in the machine dialog - Bugfixes: - - Fixed an issue where items were showing the wrong recipes to produce them sometimes, leading to crashes - - Fixed a bug where module effects were not updated straight away when changing a machine or beacon type - - Fixed that putting top level ingredients into the cursor would not respect the 'show floor items' preference - - Fixed that machine energy drain was generating pollution when it shouldn't be - - Fixed that a recipe's priority product was not always retained properly - - Fixed that certain Exotic Industries recipes would not be usable until researched - - Fixed duplicate machines being detected in Industrial Revolution 3 - ---------------------------------------------------------------------------------------------------- -Version: 1.1.62 -Date: 27. 04. 2023 - Bugfixes: - - Fixed that specifying amounts on top level ingredients was disabled when the matrix solver was enabled - - Fixed a crash when selecting a specific nexelit recipe from PyMods - - Fixed that the tutorial mode toggle was always re-activated during migration - - Fixed that repairing a machine with invalid fuel would not work properly - - Fixed that a couple of strings could not be localised - ---------------------------------------------------------------------------------------------------- -Version: 1.1.61 -Date: 05. 04. 2023 - Features: - - Added hotkeys to go up a floor (Alt + Up) and to the top floor (Shift + Alt + Up) - - Implemented paste functionality for machine fuel - Changes: - - Added Ukranian translation (Thanks Met en Bouldry!) - - Changed the ingredient combinator button to use a sprite instead of text - Bugfixes: - - Fixed that absurdly high module effects were not being capped correctly at the engine limit of +32767% - - Fixed a few inconsistencies around raw ores and made them more visually distinct - - Fixed an issue where the centering of modal dialogs didn't work in all cases anymore - ---------------------------------------------------------------------------------------------------- -Version: 1.1.60 -Date: 31. 12. 2022 - Changes: - - Updated to the new flib translation library for faster translations, requiring a bump of the minimum flib version to 0.9.2 and a minimum Factorio version of 1.1.74 - - Added Spanish localisation (Thanks MarXam!) - - Filtered out dummy entities from the 'Ghost on Water' mod - Bugfixes: - - Fixed a crash when deleting the last subfactory in the list - - Fixed a migration crash when adding the example subfactory with Industrial Revolution loaded - - Fixed a crash when clicking the ingredient combinator button without any ingredients present - - Fixed a crash caused by a mod adding trains with a capacity of zero - - Fixed an issue where pasting a larger amount of modules onto a smaller amount of available slots would not calculate the effects correctly - - Fixed an issue where copy/pasting a machine would not respect module compatibility - - Fixed an issue where exporting ingredients to combinator would leave out items with amounts below 1 - - Fixed that lines with subfloor would not be grayed out as desired when checked off in the compact dialog - ---------------------------------------------------------------------------------------------------- -Version: 1.1.59 -Date: 19. 09. 2022 - Features: - - Added a button to unfold subfloors, meaning they will be shown on the top level without needing to go down into them - - Added a preference that, when enabled, adds a subfactory's products as icons to its name in the subfactory list - - Added the ability to paste whole lines as top level products, setting product amounts and copying the line(s) over - Changes: - - Made rounding around machine amounts more consistent - Bugfixes: - - Fixed an issue where moving subfactories to the top on subfloors did not work correctly - - Fixed a crash when changing line percentage via item amount when percentage is 0 - - Fixed an issue where pasting a module could make the total number of modules exceed the allowed amount - ---------------------------------------------------------------------------------------------------- -Version: 1.1.58 -Date: 03. 09. 2022 - Bugfixes: - - Fixed a bug where some line products would be shown with an amount of -1 - - Fixed a crash when trying to paste a line with subfloor as a top level product - - Fixed a rare crash when cycling through production views - ---------------------------------------------------------------------------------------------------- -Version: 1.1.57 -Date: 30. 08. 2022 - Changes: - - Added custom support for Space Exploration Arcosphere recipes - - Added a hotkey to cycle backwards through the different production views (Shift + Tab) - - Changed the hotkey that toggles between the main and compact dialogs to open the compact view when used while no dialog is open, instead of silently switching between them in the background - - Removed the floor up hotkey - Bugfixes: - - Fixed a crash with the subfactory to combinator functionality when there are only fluid ingredients - ---------------------------------------------------------------------------------------------------- -Version: 1.1.56 -Date: 29. 08. 2022 - Bugfixes: - - Fixed a crash when switching to the items/s/machine view in some cases - ---------------------------------------------------------------------------------------------------- -Version: 1.1.55 -Date: 28. 08. 2022 - Bugfixes: - - Fixed a crash when trying to convert fluid ingredients to a combinator - - Fixed a rare bug where total subfactory ingredients were not being summed up correctly - ---------------------------------------------------------------------------------------------------- -Version: 1.1.54 -Date: 26. 08. 2022 - Bugfixes: - - Fixed a crash when using the ingredient satisfaction preference - ---------------------------------------------------------------------------------------------------- -Version: 1.1.53 -Date: 26. 08. 2022 - Bugfixes: - - Fixed a crash related to removing the empty mod-gui frame in some situations - ---------------------------------------------------------------------------------------------------- -Version: 1.1.52 -Date: 26. 08. 2022 - Features: - - Added a button to show floor item totals when on subfloors instead of subfactory totals - - Added a button to export all subfactory ingredients to a blueprint containing constant combinators - - Added the ability to put items into the cursor as a constant combinator by alt-clicking them - - Added rocket part recipes, which are useful in certain modded situations - - Added Recipe Book shortcuts to the compact subfactory dialog - Changes: - - Re-added the '+' button to machines which can accept modules but currently don't have any - - Recipes that don't produce anything now show their products and ingredients with 0 amounts instead of not at all - - The mod now remembers which category was previously selected when re-opening the item picker dialog - - The mod now cleans up the empty mod-gui frame when disabling the FP button would leave it empty - Bugfixes: - - Removed info icons from mod settings names as the game now generates them on its own - - Fixed that tutorial tooltips would still show in some places even if disabled - - Fixed a crash that could happen when duplicating a subfactory that had previously had a product pasted into it - - Fixed a bug where a disabled slider to set module amounts would sometimes not actually be disabled - ---------------------------------------------------------------------------------------------------- -Version: 1.1.51 -Date: 16. 07. 2022 - Changes: - - Changed the key combo for putting machines/beacons into the cursor in the main interface to Alt+Left-click to avoid accidental activation. issues. - - Marking recipes as done in the compact subfactory view now grays them out - - Duplicating a subfactory now inserts it right below the cloned subfactory instead of at the end - - Improved performance of opening dialogs (thanks curiosity!) - - Improved the wording around the utility dialog component buttons - Bugfixes: - - Fixed an issue where pasting onto a module could make it exceed the total module capacity of the machine - - Fixed that the machine dialog would show the limit options even when the matrix solver was active - - Fixed a crash when loading certain old saves - - Fixed a very rare issue where the game could desync in multiplayer - ---------------------------------------------------------------------------------------------------- -Version: 1.1.50 -Date: 05. 06. 2022 - Changes: - - Added the console command '/fp-restart-translation' to restart translation in case it hangs - - Changed it so the selected subfactory is retained during migrations if possible - Bugfixes: - - Fixed a few issues and crashes related to editing modules on machines and beacons - - Fixed a couple of migration issues when trying to load certain old saves - - Fixed a crash when loading a save where a now-invalid subfactory was selected - - Fixed a crash when trying to put machines into the cursor that can't be blueprinted - - Fixed a missing locale string - ---------------------------------------------------------------------------------------------------- -Version: 1.1.49 -Date: 27. 05. 2022 - Bugfixes: - - Changes a keyboard shortcut that was interferring with game functionality - - Fixed fuel not being shown in the compact view - - Fixed a few minor UI issues related to the production table - - Fixed a minor rounding issue with compact view machines - - Fixed an issue where disabling lines on subfloors wouldn't work - - Fixed an issue where the module slider wouldn't be properly draggable - ---------------------------------------------------------------------------------------------------- -Version: 1.1.48 -Date: 24. 05. 2022 - Changes: - - Re-added the 'put into cursor' action to the main interface (bound to a simple left click on machines and beacons) - Bugfixes: - - Fixed a migration issue under certain circumstances - ---------------------------------------------------------------------------------------------------- -Version: 1.1.47 -Date: 23. 05. 2022 - Changes: - - Updated Russian localisation (Thanks Astorin!) - - The preference to hide crating recipes now also works for the 'Deadlock's Crating Machine' mod - ---------------------------------------------------------------------------------------------------- -Version: 1.1.46 -Date: 22. 05. 2022 - Bugfixes: - - Fixed a crash when opening the main interface in some circumstances - ---------------------------------------------------------------------------------------------------- -Version: 1.1.45 -Date: 22. 05. 2022 - Bugfixes: - - Fixed a couple of locale issues - - Re-fixed a crash related to item search rate limiting - ---------------------------------------------------------------------------------------------------- -Version: 1.1.44 -Date: 21. 05. 2022 - Changes: - - Updated Korean localisation (Thanks x2605!) - - Added partial Portuguese localisation (Thanks ctgPi!) - ---------------------------------------------------------------------------------------------------- -Version: 1.1.43 -Date: 21. 05. 2022 - Bugfixes: - - Fixed a crash when loading a previous save in very specific circumstances - - Fixed a crash related to item search rate limiting - - Fixed a crash when pasting a machine - - Fixed a crash when right-clicking the subfactory dialog rich text buttons - - Fixed that machines could not always be pasted even when they should have been allowed to - ---------------------------------------------------------------------------------------------------- -Version: 1.1.42 -Date: 21. 05. 2022 - Features: - - Added a compact view of the interface that's useful when actually building your factory after the planning phase - - Added copy/paste functionality, allowing you to copy machines, beacons, modules, recipe lines and items - - Implemented localised search for items and recipes, meaning search will find results in the language the game is configured to - - Added rich text support to subfactory names, so they are not restricted to a single icon anymore if desired - - Added dedicated buttons to move subfactories and recipes up and down, making the interaction more discoverable and easier to use - - Added a setting for those that want the 'add subfactory'-button to go to the product picker straight away - - Added support for barrelled fluids to the belts/lanes production view (Thanks ZorbaTHut!) - Changes: - - Reordered the subfactory list action buttons to make more sense by grouping the archive-related ones - - Combined the various machine dialogs (entity picker, limits, modules, fuel) into one - - Unified the interactions and appearance of modules for machines and beacons - - Moved the utility dialog button to the production toolbar - - Streamlined the modifier-clicks for various actions to be more consistent across the mod - - Made the 'reset machine' action also set modules and beacons to their configured defaults if possible - - Pressing 'E' with an open dialog now tries to confirm instead of closing, mirroring vanilla behavior - - Adding a subfactory by selecting a product now sets the name to both the icon and name of that product - - Improved consistency and visual appeal of various tooltips - - Removed mod interactions with FNEI and WIIRUF, meaning only Recipe Book remains supported (with deeper integration than before) - - Removed the dedicated 'toggle recipe'-button and integrated its core functionality into the recipe button itself - - Added a ko-fi patronage 'link' to the preferences pane - - Updated to flib 0.9.2 - Bugfixes: - - Fixed that the first recipe on subfloors could be moved down in certain circumstances - - Fixed that shift-click adding a subfactory and cancelling the picker dialog would create an empty subfactory - - Fixed that deleting a subfactory through the 'edit subfactory'-dialog would not put it into the archive - ---------------------------------------------------------------------------------------------------- -Version: 1.1.41 -Date: 14. 05. 2022 - Bugfixes: - - Fixed a crash when opening the preferences dialog with certain sets of mods - ---------------------------------------------------------------------------------------------------- -Version: 1.1.40 -Date: 13. 05. 2022 - Bugfixes: - - Improve compatibility with the 248k mod - - Fixed an issue where the main interface could become uninteractable in some situations - ---------------------------------------------------------------------------------------------------- -Version: 1.1.39 -Date: 08. 05. 2022 - Bugfixes: - - Fixed a migration issue with Satisfactorio - ---------------------------------------------------------------------------------------------------- -Version: 1.1.38 -Date: 14. 04. 2022 - Changes: - - Minor UI improvements, such as a better explanation of the matrix solver - ---------------------------------------------------------------------------------------------------- -Version: 1.1.37 -Date: 23. 03. 2022 - Bugfixes: - - Actually actually fixed the stupid scaling issue, maybe - ---------------------------------------------------------------------------------------------------- -Version: 1.1.36 -Date: 21. 03. 2022 - Bugfixes: - - Actually fixed the image scaling issue with the matrix solver, as the previous fix resulted in a crash instead - ---------------------------------------------------------------------------------------------------- -Version: 1.1.35 -Date: 21. 03. 2022 - Bugfixes: - - Potentially fixed an image scaling issue with the matrix solver dialog - ---------------------------------------------------------------------------------------------------- -Version: 1.1.34 -Date: 16. 02. 2022 - Bugfixes: - - Fixed some duplication with the Chinese localisation, which caused a crash on startup - ---------------------------------------------------------------------------------------------------- -Version: 1.1.33 -Date: 14. 02. 2022 - Bugfixes: - - Fixed a crash on load with Nullius. Sorry about that! - ---------------------------------------------------------------------------------------------------- -Version: 1.1.32 -Date: 13. 02. 2022 - Changes: - - Refined the machine detection algorithm to pick up certain machines that should have been picked up - Bugfixes: - - Potentially fixed a crash when trying to put a machine into the cursor from Factory Planner - ---------------------------------------------------------------------------------------------------- -Version: 1.1.31 -Date: 22. 12. 2021 - Bugfixes: - - Fixed an issue where the mod would sometimes offer the incorrect machines for a recipe - - Fixed that the mod would create a small box in the top left corner of the screen in certain multiplayer situations - ---------------------------------------------------------------------------------------------------- -Version: 1.1.30 -Date: 09. 12. 2021 - Features: - - Added the ability to specify an exact amount for top level ingredients, which adjusts the configured products accordingly. This is a band-aid way of enabling calculations by input rather than output. (thanks curiosity!) - Changes: - - Improved matrix solver algorithm to provide more stable results (thanks scottmsul!) - ---------------------------------------------------------------------------------------------------- -Version: 1.1.29 -Date: 04. 11. 2021 - Bugfixes: - - Fixed that the priority product selection would be dropped when disabling a recipe line - - Fixed that recipes would show products with amount equal to 0 when they have a subfloor - - Fixed that the utility dialog combinator blueprint was limited to two machines per combinator - - Fixed that the buttons to check off line recipes would show a tooltip when it shouldn't - ---------------------------------------------------------------------------------------------------- -Version: 1.1.28 -Date: 29. 10. 2021 - Bugfixes: - - Fixed a crash when trying to pipette a beacon from the Factory Planner interface - ---------------------------------------------------------------------------------------------------- -Version: 1.1.27 -Date: 24. 10. 2021 - Features: - - Added the ability for beacons to have more than one type of module at once (huge thanks to curiosity!) - Bugfixes: - - Fixed a crash related to ingredient satisfaction and disabled recipes - - Fixed a crash when trying to add beacons while having the Satisfactorio mod active - - Fixed that the item picker would offer disabled/hidden belts - - Fixed a crash when opening the main interface while using the comfy scenario - - Potentially fixed a crash on startup in certain modded situations - ---------------------------------------------------------------------------------------------------- -Version: 1.1.26 -Date: 17. 10. 2021 - Changes: - - Improved performance of the matrix solver determining valid free items (thanks RSBat!) - Bugfixes: - - Fixed a persistent crash on save load with the Nullius mod, sorry about that one - - Fixed that certain machines, fuels, belts and train wagons that should be hidden were shown - - Fixed that the player character would show up as a valid mining machine - - Fixed a crash when using the utility dialog blueprint functionality with a large subfactory - - Fixed that the auto-pause logic would touch the pause state in multiplayer when it really shouldn't - ---------------------------------------------------------------------------------------------------- -Version: 1.1.25 -Date: 25. 08. 2021 - Changes: - - Added better support for the Satisfactorio mod (thanks PFQNiet!) - Bugfixes: - - Fixed a crash with temporarily archived subfactories being deleted - ---------------------------------------------------------------------------------------------------- -Version: 1.1.24 -Date: 24. 07. 2021 - Changes: - - Updated the internal detection of recycling and barreling/stacking recipes to the current set of popular mods - Bugfixes: - - Fixed a crash with the utility dialog - - Fixed a bug that prevent irrelevant free item choices being filtered out correctly - ---------------------------------------------------------------------------------------------------- -Version: 1.1.23 -Date: 11. 07. 2021 - Features: - - Added a button to the utility dialog to export the missing machines and modules as a series of constant combinators that can be hooked up to a requester chest - Changes: - - The mod now filters out crafting categories in the preferences dialog that don't have any recipes using them (removes the 'basic-crafting' category from vanilla maps) - Bugfixes: - - Fixed several matrix-solver related crashes (hopefully) that were introduced in the last version - ---------------------------------------------------------------------------------------------------- -Version: 1.1.22 -Date: 10. 07. 2021 - Changes: - - The mod now makes sure that the main interface fits onto the player's screen when first creating or joining a game - - The margin for showing items with very small amounts now scales with the subfactory timescale - - Improved performance when adding a product with only one recipe a bit - Bugfixes: - - Fixed a crash and some other issues related to the background dimming when paused - - Fixed an issue where the modal interface dimmer would not layer correctly when loading a save in some cases - - Fixed a missing tooltip string on the dialog submit button - ---------------------------------------------------------------------------------------------------- -Version: 1.1.21 -Date: 04. 07. 2021 - Features: - - Implemented the ability to add recipes from top level ingredients - Changes: - - Changed certain modal dialogs to use an 'X-to-close' button in the top right corner instead of a 'Back' button in the bottom left corner - - The name and icon of the cargo and fluid wagons are now shown on the 'Wagons/m' view state button tooltip - - Line percentages now default to 100 instead of 0 when left blank - Bugfixes: - - Fixed an issue where Request Depots from Klonan's Transport Drones could not be selected a product (Thanks MCP!) - - Fixed that the Deep Storage Unit mod's internal recipes were not being hidden - - Fixed an issue where the number of subfactories in the archive could have been reported incorrectly - - Fixed that the pause mode would not work correctly while using the in-game editor - - Fixed a rare crash when searching recipes or items - - Fixed a few minor graphical inconsistencies - ---------------------------------------------------------------------------------------------------- -Version: 1.1.20 -Date: 11. 04. 2021 - Bugfixes: - - Fixed frequent desync on loading saves. I'm truly sorry about me taking so long to fix this. - - Fixed that the dimming overlay would be stuck in front of the main window, blocking any interaction with it - - Fixed that the background dimmer would be incorrectly sized on display scales other than 100% - - Fixed that disabling the mod-gui button in the top left corner could leave behind an empty border if no other buttons are up there - ---------------------------------------------------------------------------------------------------- -Version: 1.1.19 -Date: 10. 02. 2021 - Changes: - - Made it so the 'to the top' button can be used starting at level 2 floors, instead of level 3 - Bugfixes: - - Fixed a couple of issues where the mod would not properly select a machine for a recipe in some situations - - Fixed an issue where some modal dialogs might not work correctly after reloading a save - - Fixed that the last valid modset data would not be retained when importing an invalid subfactory - - Fixed that alt-clicking a default machine in preferences could crash in certain cases - - Fixed that trying to handcraft a module or beacon in the utilities dialog would crash - - Fixed a crash when attempting to craft using the utility dialog while not having a character associated to yourself - - Fixed that attempting to handcraft in the utility dialog would sometimes incorrectly show a warning about there not being enough resources while simultaneously queueing some crafting - - Fixed that the background dimming when the game is paused would duplicate itself when alt-tabbing or resizing the window - ---------------------------------------------------------------------------------------------------- -Version: 1.1.18 -Date: 01. 02. 2021 - Changes: - - Moved the matrix solver toggle to the subfactory info box - - Added proper error messages to handcrafting machines and modules in the utility dialog - - Reworded some of the mod setting names as they were awful - Bugfixes: - - Fixed a crash when typing into or confirming the export dialog textfield - - Fixed a crash when using the utility dialog to request items while having no character associated to oneself - - Potentially fixed a crash related to the matrix solver and fuel - ---------------------------------------------------------------------------------------------------- -Version: 1.1.17 -Date: 22. 01. 2021 - Features: - - You can now queue handcrafting machines and modules from the utility dialog - Changes: - - Made the utility dialog more consistent when checking whether logistic robotics are researched in modded situations - Bugfixes: - - Fixed a crash when changing beacon types in the beacon dialog - ---------------------------------------------------------------------------------------------------- -Version: 1.1.16 -Date: 20. 01. 2021 - Changes: - - Swapped the import/export button around and made their tooltips clearer - Bugfixes: - - Fixed a crash with fuel migration - - Potentially fixed a crash with certain mods that add custom beacons - - Potentially fixed a crash when deleting subfactories on a multiplayer server with high latency - ---------------------------------------------------------------------------------------------------- -Version: 1.1.15 -Date: 04. 01. 2021 - Bugfixes: - - Fixed an issue where the matrix solver wouldn't always show its dialog when it should have - - Fixed that removing the last line in a subfactory with the matrix solver active would leave some top level products behind - ---------------------------------------------------------------------------------------------------- -Version: 1.1.14 -Date: 03. 01. 2021 - Features: - - Added an optional production column that allows you to check off a recipe line after you're done with it, in the style of a to-do list (Thanks Fiona!) - - Added an additional production view 'Wagons/timescale', allowing you to see how many cargo or fluid wagons are being filled up by your production (Thanks talshorer!) - Changes: - - Fixed various inconsistencies with the UI (Thanks Raiguard!) - - Updated the Russian translation (Thanks METAKOT!) - - Updated the Chinese translation (Thanks Ph.X!) - - Changed the hotkey to reset a machine from alt-right-click to control-right-click, as this is more consistent with the control-right-click action deleting things - - Renamed the 'hard limit' option on machines to 'force limit' - Bugfixes: - - Fixed a crash when deleting subfactories in your archive - - Fixed that the fuel picker would sometimes show more than one kind of fuel as the currently selected one - ---------------------------------------------------------------------------------------------------- -Version: 1.1.13 -Date: 24. 12. 2020 - Bugfixes: - - Fixed that the subfactory name would not be shown if there was both an icon and a name - ---------------------------------------------------------------------------------------------------- -Version: 1.1.12 -Date: 23. 12. 2020 - Features: - - Subfactories you delete will now remain in the archive for 15 minutes in case you change your mind about deleting them - - Added a tooltip to invalid subfactories listing the modset changes that could have lead to it becoming invalid - - You can now alt-click the recipe line toggle switch (which is an optional column in preferences) to toggle all the other recipe lines, meaning all the ones you did not click on (thanks METAKOT!) - Bugfixes: - - Fixed that when in the items/s/machine-view, the values shown were totally wrong - - Fixed that you could enable/disable the matrix solver while a subfactory is in archive - - Fixed that the indicated timescale-view button would not update correctly when switching between subfactories - - Fixed that setting the subfactory icon to '?' would crash (you can't use the question mark as an icon now) - ---------------------------------------------------------------------------------------------------- -Version: 1.1.11 -Date: 19. 12. 2020 - Bugfixes: - - Fixed machine count totals on lines with subfloors with the matrix solver - - Fixed an issue with the matrix solver determining the number of rows and columns in its matrix - ---------------------------------------------------------------------------------------------------- -Version: 1.1.10 -Date: 17. 12. 2020 - Changes: - - The matrix solver now tells you which recipes it has detected as linearly dependant, letting you know the ones that cause it to not be able to solve - Bugfixes: - - Fixed an issue with the matrix solver that would lead to an infinite loop. Whew, there's a first time for everything! - - Fixed that alt-adding a subfactory would crash if you had no other subfactories - - Fixed that you couldn't view subfloors for subfactories that are in the archive - - Fixed a crash when changing the window size while a modal dialog is open - - Tried fixing a crash with the matrix solver in rare circumstances - ---------------------------------------------------------------------------------------------------- -Version: 1.1.9 -Date: 15. 12. 2020 - Features: - - Alt-clicking the 'add subfactory'-button now takes you directly to the product picker - - Middle-clicking the grab handle on any dialog now re-centers it - Changes: - - The matrix solver now allows you to select products are free items as well, which comes in handy when you subfactory has very few recipes - - Added a message when deactivating the matrix solver informing you that byproduct recipes have been deleted - Bugfixes: - - Fixed that the matrix solver dialog would not pop up sometimes after adding a recipe - ---------------------------------------------------------------------------------------------------- -Version: 1.1.8 -Date: 15. 12. 2020 - Changes: - - Removed a couple of mistakes with the tutorial writing; It's super old and due for a rewrite anyways - - Renamed 'Energy' to 'Power' where appropriate - Bugfixes: - - Fixed that opening another mod's interface while FP is open could crash - - Fixed that requesting machines and modules would crash in certain modded situations - - Fixed the beacon selector not working properly when the game is paused - ---------------------------------------------------------------------------------------------------- -Version: 1.1.7 -Date: 13. 12. 2020 - Bugfixes: - - Fixed a crash when opening the interface with no subfactories that was introduced in the last version - ---------------------------------------------------------------------------------------------------- -Version: 1.1.6 -Date: 13. 12. 2020 - Changes: - - The message that your current subfactory is linearly dependant is now shown more consistently - Bugfixes: - - Fixed a frequent crash when manipulating a subfactory that has linearly dependant recipes - - Fixed that the example subfactory was improperly cached, leading to several issues all over the UI - - Fixed that hitting certain Factory Planer hotkeys before opening the UI for the first time would crash - - Fixed that the matrix solver calculations would be incorrect when productivity modules were involved - - Fixed a crash on migration - ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 11. 12. 2020 - Features: - - Redesigned the main interface. This means that some things are in different spots than they used to be, and some niche features got lost along the way. I'm sorry about those few that went missing, but I needed to get this done in a reasonable amount of time. If there is anything specific you're dearly missing, please let me know on the mod portal or on Discord. - - Added a matrix solver. It can be individually enabled for every subfactory and helps to automatically balance out certain advanced recipe setups like oil processing and cracking, with support for voiding byproducts. It can also solve looping recipe chains by asking you for some input from your side. This whole feature is a beta still, so if you run into any problems, please let us know. Huge thanks to scottmsul for taking the charge in implementing this one! - - Added an optional production column to quickly disable certain recipes by checkbox - - Added a search bar to the recipe picker - - You can now alt-click any machine or beacon in your production line to put it into your cursor as a blueprint for easy stamping - - You can now also alt-click a machine when changing it to implicitly set it to the preferred one for its category - Changes: - - The calculation model now considers the base energy drain that most electrical machines have - - The calculation model now also takes the different launch sequence times for modded rocket silos into account (thanks curiosity!) - - Setting recipe item amounts directly now behaves more intuitively - - Hitting the 'E' keyboard shortcut now confirms the dialog that is open if possible, mirroring the vanilla behavior introduced with 1.1 - - The tutorial subfactory can now be imported in a wider range of modded situations (as long as it is compatible) - - Removed the 'automatic cleanup' functionality that would delete lines that became useless after you removed a top level product. This functionality had been broken in several ways that are hard to fix, so I decided it was not worth keeping around. - - Increased the maximum length of subfactory names to 256 characters, while accomodating for longer names in the UI - - Added some dimming to the interface to indicate that a modal dialog is open and/or the game is paused while the main interface is open - - Various minor UI improvements unrelated to the main interface redesign - - Removed migrations for versions before 0.18 since the game doesn't load those saves anymore - - Updated to a newer version of flib (v0.6.0) - Bugfixes: - - Fixed that changing the limit on a machine would reset the 'hard limit'-switch - - Finally found a workaround for the issue that clicks would go 'through' the main dialog if a modal one was open - - Fixed the beacon tooltip in preferences displaying incorrect energy consumption values - - Fixed that the tooltip on mining machines would not include mining productivity bonuses - - Fixed that opening another GUI while in beacon selection mode would leave the modal dialog stuck open - ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 01. 12. 2020 - Bugfixes: - - Fixed a crash in certain modded situations - - Fixed a horrible styling issue that made the pro tips boxes not align properly - ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 27. 11. 2020 - Bugfixes: - - Fixed a crash when trying to submit the beacon dialog - ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 26. 11. 2020 - Bugfixes: - - Fixed various crashes caused by textbox behavior having changed with 1.1 - ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 23. 11. 2020 - Changes: - - Updated for Factorio 1.1 - ---------------------------------------------------------------------------------------------------- -Version: 1.0.13 -Date: 16. 11. 2020 - Bugfixes: - - Fixed a crash with Space Exploration - ---------------------------------------------------------------------------------------------------- -Version: 1.0.12 -Date: 16. 11. 2020 - Bugfixes: - - Added a couple missing locale strings - - Fixed an issue where the beacon total would not be shown when editing a beacon - - Fixed an issue where the total machine count for a subfloor would be incorrect if that subfloor had itself a subfloor - ---------------------------------------------------------------------------------------------------- -Version: 1.0.11 -Date: 09. 10. 2020 - Bugfixes: - - Fixed a crash when trying to load a map with the 'Nauvis Melange' mod - ---------------------------------------------------------------------------------------------------- -Version: 1.0.10 -Date: 05. 10. 2020 - Features: - - Added a secondary default module that will try to insert itself if the primary one is not compatible with the new machine/recipe (thanks scottmsul!) - ---------------------------------------------------------------------------------------------------- -Version: 1.0.9 -Date: 01. 10. 2020 - Bugfixes: - - Fixed a crash related to the beacon dialog in certain modded situations - ---------------------------------------------------------------------------------------------------- -Version: 1.0.8 -Date: 28. 09. 2020 - Bugfixes: - - Fixed that the preference for the default beacon amount would not be saved - ---------------------------------------------------------------------------------------------------- -Version: 1.0.7 -Date: 16. 09. 2020 - Bugfixes: - - Hotfixed a crash on load with the newest version of Space Exploration - ---------------------------------------------------------------------------------------------------- -Version: 1.0.6 -Date: 07. 09. 2020 - Bugfixes: - - Fixed some rare crashes that could occur after saving/loading while a modal dialog is open - - Fixed that having signal-type icons on your subfactories could lead to crashes - - Fixed that you couldn't remove subfactory icons - - Fixed that heavily beaconed machine amounts were not calculated accurately (thanks talshorer!) - ---------------------------------------------------------------------------------------------------- -Version: 1.0.5 -Date: 27. 08. 2020 - Bugfixes: - - Fixed a crash when attempting to change fuels in certain modded situations - ---------------------------------------------------------------------------------------------------- -Version: 1.0.4 -Date: 17. 08. 2020 - Features: - - Added a 'request items'-button to the utility dialog that requests all the items needed to build the current subfactory/floor. The buttons indicating what is in your inventory are now also updated dynamically when your inventory content changes. - Changes: - - Re-added the keyboard shortcut to confirm modal dialogs by pressing 'Enter' - - Properly enabled rate limiting again to avoid duplicate GUI actions - - Improved performance when opening the preferences dialog - Bugfixes: - - Fixed that the product picker would sometimes show a scrollbar unnecessarily - ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 15. 08. 2020 - Bugfixes: - - Fixed a potential crash on-load when playing on older maps - ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 15. 08. 2020 - Changes: - - Adjusted styling in some places - - Updated the screenshots to reflect the recent redesigns - Bugfixes: - - Fixed a crash when trying to edit a subfactory without an icon - ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 14. 08. 2020 - Changes: - - Updated for Factorio 1.0; Happy release day everyone!πŸ₯³ It's been a great time working on this mod and interacting with all of you. There's a write-up about these past many months in the mod portal discussions and on Discord, if you're interested in reading about some numbers and feelings. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.52 -Date: 13. 08. 2020 - Changes: - - Redesigned the subfactory, module, beacon and product picker dialogs - - Made it so recipes for fuels can also be inserted directly below by shift-left-clicking them - - Added some info about why a dialog can not be submitted - - Adjusted styling in numerous ways - Bugfixes: - - Fixed the issue that opening a vanilla interface while a Factory Planner modal dialog is open would not close the main FP interface window - - Properly fixed scrolling in the recipe picker - - Fixed recipe picker category icons leaving their designated spot sometimes - ---------------------------------------------------------------------------------------------------- -Version: 0.18.51 -Date: 10. 08. 2020 - Bugfixes: - - Fixed that the recipe picker did not have a scroll pane when necessary. Its height is still screwy, it'll be fixed with the next big update. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.50 -Date: 04. 08. 2020 - Changes: - - Redesigned the recipe picker dialog - Bugfixes: - - Fixed that setting a limit on a machine would not work properly - - Fixed a crash when selecting certain fuels - ---------------------------------------------------------------------------------------------------- -Version: 0.18.49 -Date: 03. 08. 2020 - Features: - - Added the ability to add a recipe right below the ingredient that it should produce by shift-left-clicking the ingredient - Changes: - - Removed the ability to manually order top level ingredients and byproducts, the same goes for any recipe line items. This was done for two reasons: Firstly, it was not very useful as they shifted around all the time anyways when new recipes are added or removed. Secondly, this frees up some key combinations for more useful actions, like the one above. - - Redesigned the preferences dialog - Bugfixes: - - Fixed that the dialog to change machine would sometimes highlight the wrong machine as being selected - - Fixed that downgrading a machine wouldn't always show an error message when unsuccessful - - Fixed that modded rocket silos were not picked up on correctly - ---------------------------------------------------------------------------------------------------- -Version: 0.18.48 -Date: 02. 08. 2020 - Changes: - - Redesigned the utility dialog - Bugfixes: - - Fixed a crash on migration that happened under very specific circumstances - ---------------------------------------------------------------------------------------------------- -Version: 0.18.47 -Date: 01. 08. 2020 - Changes: - - Factory Planner now has Factorio Library (flib) as a dependency, to help with the new styling - - Redesigned the tutorial dialog to be in line with the post-0.17 styling sensibilities - - Also gave the options- and chooser-dialog types a do-over - ---------------------------------------------------------------------------------------------------- -Version: 0.18.46 -Date: 29. 07. 2020 - Bugfixes: - - Fixed a migration crash - - Fixed an issue when importing into your archive - - Fixed a crash where you could submit the import dialog without having imported a string - ---------------------------------------------------------------------------------------------------- -Version: 0.18.45 -Date: 29. 07. 2020 - Changes: - - Re-implement the ingredient satisfaction algorithm, solving some weird edge cases and doubling performance - - The importer now selects all subfactories for import by default, instead of selecting none - - Added some warning messages when trying to open items/recipes in FNEI/WIIRUF/RB fails - - Changed the unit that pollution is displayed in from P/second to P/minute - - Changed how deleting subfactories and recipe lines work, removing the confirmation step - - Changing machines on recipes now also opens up a dialog instead of presenting the choices in-line; An alternative to this is shift/ctrl-clicking the machine to up/downgrade it - - Removed the 'Indicate rounding' mod setting - - Removed the actionbar delete-button; ctrl-right-click or the delete button when editing the subfactory still work - Bugfixes: - - Fixed an issue where exporting subfactories would not preserve line order properly - - Fixed some minor graphical issues with the new import/export dialogs - - Fixed that pollution calculation was off by a factor of 60 - - Fixed an issue where a recipe line wasn't properly deleted under certain circumstances - ---------------------------------------------------------------------------------------------------- -Version: 0.18.44 -Date: 27. 07. 2020 - Features: - - This update (finally) brings with it the ability to import/export your subfactories! It works similarly to exporting blueprints, which means that it gives you a 'factory exchange string' that you can share with others or use yourself to import your plans in a different save. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.43 -Date: 26. 07. 2020 - Bugfixes: - - Implement potential fix for a crash when duplicating certain subfactories - - Fixed that moving list items to the bottom/top did not work correctly - ---------------------------------------------------------------------------------------------------- -Version: 0.18.42 -Date: 21. 07. 2020 - Features: - - [Warning: Experimental! This update contains some more data backend changes. They should not cause any issues though, as they are pretty minimal and un-invasive] - - Added a button to exactly duplicate existing subfactories. This comes as a nice side-benefit of implementing import/export of subfactories, and as it is ready, I decided to release it now. - Bugfixes: - - Fixed some problems with migration - ---------------------------------------------------------------------------------------------------- -Version: 0.18.41 -Date: 20. 07. 2020 - Bugfixes: - - Fixed an issue where fuels were not being migrated correctly - ---------------------------------------------------------------------------------------------------- -Version: 0.18.40 -Date: 20. 07. 2020 - Changes: - - Updated to the new version of the Recipe Book remote interface (now requires Recipe Book v2.0.1 and up) - Bugfixes: - - Fixed a crash on startup when adding Factory Planner to an existing save - ---------------------------------------------------------------------------------------------------- -Version: 0.18.39 -Date: 20. 07. 2020 - Bugfixes: - - Fixed a migration issue that would cause the save to crash when loading. Sorry about that one. - - Fixed a crash when switching to the floor-view in the utilities dialog under certain circumstances - - Fixed an issue where the subfloor machine total was not added up correctly - - Fixed a crash when using the beacon-selector - ---------------------------------------------------------------------------------------------------- -Version: 0.18.38 -Date: 17. 07. 2020 - Features: - - [Warning: Experimental! This update contains a complete rework of the data structures and migrations that this mods needs. You are somewhat likely to experience a crash or two until I can fix all of them. If you run into any of them, please let me know; I'll try to address them as quickly as possible. Including a save file with your report would help a lot, so please include one if you can.] - - The goal of these reworks was to get everything in shape to add new features more quickly and easily in the future. Chief among those is the import and export of subfactories into other saves. - - Other than those reworks, I changed how recipes with subfloors are handled. The lines that have subfloors attached to them now don't show the machine, modules and beacons from the first line of their subfloor anymore. Instead, they only show the total amount of machines needed on that subfloor, and no modules or beacons. I believe that this is more intuitive for new users especially. It also vastly simplifies the code, leading to less surface for bugs and better performance. - Changes: - - Lifted some restrictions on the name that your subfactory can have. I hope nothing breaks. - Bugfixes: - - Fixed an issue causing save-file sizes to be inflated unnecessarily - - Fixed a problem where fluid-powered machines would still show as consuming electrical energy in some cases - - Fixed a crash on startup that would happen with a forthcoming version of Recipe Book - ---------------------------------------------------------------------------------------------------- -Version: 0.18.37 -Date: 09. 07. 2020 - Changes: - - Improved loading performance a bit - - Made sure that in certain very rare cases, the appropriate recipes would be shown (most notably for omnicompression) - - Added the console command '/fp-reset-prototypes' to re-run the prototypes generation code. This should not be needed for any situation. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.36 -Date: 04. 07. 2020 - Features: - - Added keyboard combination for moving subfactories and recipe lines to the very start/end of their list - Changes: - - Made it so the content of textboxes in the module/beacon picker get selected automatically under certain circumstances - Bugfixes: - - Fixed that setting exact item amounts on a recipe would not calculate the percentage correctly in some cases - - Fixed that negative fluid temperatures would lead to a crash when starting/loading a map - - Fixed productivity applying to the rocket silo satellite even though it shouldn't - - Fixed that certain modded recipes would not show up in the recipe picker - - Fixed that some recipes showed up even though the research for them was disabled - ---------------------------------------------------------------------------------------------------- -Version: 0.18.35 -Date: 18. 06. 2020 - Bugfixes: - - Fixed a bug where setting recipe percentages by defining item amounts would not apply correctly to lines with subfloors - ---------------------------------------------------------------------------------------------------- -Version: 0.18.34 -Date: 18. 06. 2020 - Changes: - - Made the item-percentage-utility textfield wider - - This update includes a lot of behind-the-scenes changes, so there might be a crash or two that I haven't found yet - Bugfixes: - - Fixed a crash when trying to set an empty product/ingredient amount on a recipe - - Added a missing locale key for the new pause-on-interface keyboard shortcut - ---------------------------------------------------------------------------------------------------- -Version: 0.18.33 -Date: 16. 06. 2020 - Features: - - Added the ability to set recipe product/byproduct/ingredient-amounts to specific values. You can do this by right-clicking any of them on a specific recipe line and entering an amount. The percentage of that line will then automatically be adjusted to produce that amount exactly. - Changes: - - The mod-setting for pausing the game when the main interface is open is now a button in the top right of it - - The numbers shown on item/machine/etc-buttons are now rounded somewhat correctly, instead of being truncated - Bugfixes: - - Fixed that beacon selection would not work then the game was being paused on open FP-interface - ---------------------------------------------------------------------------------------------------- -Version: 0.18.32 -Date: 15. 06. 2020 - Changes: - - Improved some things about how product definitions by belt/lane are handled. Changing timescales now also better preserves the precision of the numbers you enter. - Bugfixes: - - Fixed several problems leading to incorrect results when using productivity modules - - Fixed that the top level products wouldn't update their numbers when in belts/lanes-view and changing the preferred belt - ---------------------------------------------------------------------------------------------------- -Version: 0.18.31 -Date: 12. 06. 2020 - Features: - - You can now alt-click a machine in preferences to set that exact machine in every other category that has it. - Bugfixes: - - Fixed a problem where productivity modules would not apply correctly to some modded ingredients - ---------------------------------------------------------------------------------------------------- -Version: 0.18.30 -Date: 12. 06. 2020 - Bugfixes: - - Fixed that crafting machines producing more than 1 item/tick would show incorrect results, especially when productivity was involved. Thanks a lot to curiosity for helping me figure this one out. - - Fixed a bug where using productivity on certain recipes (like koravex enrichment) would not produce correct results - - Fixed a bug where byproducts produced on a subfloor were not incorporated correctly on their parent floor - - Fixed a bug where a recipe line's byproducts were not consumed by the fuel that that line needed - ---------------------------------------------------------------------------------------------------- -Version: 0.18.29 -Date: 09. 06. 2020 - Features: - - Added an indication to the machines/modules in the utility dialog that shows whether you have the needed machines/modules in your inventory - Changes: - - The product picker now reflects your preference for thinking in terms of belts or lanes - - You can now change fuels (up/downgrade) of a recipe line by shift/ctrl-clicking them - - Added some warnings when automatically adding your preferred machine or beacon does not work for compatibility reasons. Also added some warning messages when up/downgrading machines and beacons. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.28 -Date: 07. 06. 2020 - Bugfixes: - - Fixed a bad mistake on my part that screwed up all the things - - Added a migration so your preferred belts, beacons and machines are not lost. Fuels will still be reset though. - ---------------------------------------------------------------------------------------------------- -Version: 0.18.27 -Date: 07. 06. 2020 - Features: - - Now supports any kind of item-fuel, which includes things like mining drills from Pyanodon's and others. Might reset some of the fuels you selected to their default. I'm sorry about this, I tried to migrate it where I could, but there were large background changes that made it so it doesn't work in every case. - - Also added support for some fluid-fuels. Machines like Bob's steam assembler are still not supported, as the way they work is complicated and requires more background work on my part. - Changes: - - The belt/fuel/beacon/machine-choices in preferences are now sorted by their most important attributes. Also added some new attributes to the tooltips. - - Changed the alt-action preference to be a mod setting instead - Bugfixes: - - Fixed a crash when attempting to repair certain subfactories - - Fixed that once set, module-preferences could not be unset anymore - - Fixed an issue where the product picker would show two scroll bars in some cases - - Potentially fixed a crash when trying to open a modal dialog while another one is open - ---------------------------------------------------------------------------------------------------- -Version: 0.18.26 -Date: 03. 06. 2020 - Bugfixes: - - Fixed a bug where mining fluid calculations were off by a factor of 10 - - Fixed that you could define a fluid-product amount by belts, which is nonsensical - - Fixed some minor graphical inconsistencies - ---------------------------------------------------------------------------------------------------- -Version: 0.18.25 -Date: 02. 06. 2020 - Bugfixes: - - Fixed a crash when changing a machine through a popup-dialog - - Fixed a series of crashes related to loading a save - ---------------------------------------------------------------------------------------------------- -Version: 0.18.24 -Date: 01. 06. 2020 - Changes: - - This update contains an unusually large amount of background changes, so there might be some instability (ie. crashes) for a day or two, until I can sort them all out - Bugfixes: - - Fixed a crash on load in certain modded situations - ---------------------------------------------------------------------------------------------------- -Version: 0.18.23 -Date: 30. 05. 2020 - Changes: - - Added support for any modded rocket silo recipes, instead of only vanilla space science - - Combined the two rocket building recipes into one, making it so you don't have to produce rocket parts anymore, you just select the end product (most of the time, this will be space science), and it'll show the ingredients directly, removing an unnecessary step - ---------------------------------------------------------------------------------------------------- -Version: 0.18.22 -Date: 30. 05. 2020 - Changes: - - Allowed products to have an amount of 0 again - Bugfixes: - - Fixed the clicking the 'floor total'-button would crash - ---------------------------------------------------------------------------------------------------- -Version: 0.18.21 -Date: 29. 05. 2020 - Bugfixes: - - Fixed that you could set an amount of 0 on a product, leading to it disappearing - ---------------------------------------------------------------------------------------------------- -Version: 0.18.20 -Date: 29. 05. 2020 - Features: - - Added a way to specify product amounts by multiples of belts - Changes: - - Changing the timescale of a subfactory now adjusts the desired products accordingly - Bugfixes: - - Fixed a crash with certain mods when loading a map - - Now displays power consumption and emissions correctly for machines with a void power source - - Fixed an issue where a recipe line would sometimes show byproducts that shouldn't exist - ---------------------------------------------------------------------------------------------------- -Version: 0.18.19 -Date: 27. 05. 2020 - Changes: - - Adjusted some interface styles due to changes that came with Factorio 0.18.27 - ---------------------------------------------------------------------------------------------------- -Version: 0.18.18 -Date: 25. 05. 2020 - Features: - - Added a preference where you can specify a default module for both machines and beacons, as well as a default beacon count. These preferences cause newly created recipe lines to automatically be maxed out with the specified modules and beacons. This makes it less work to create a fully beacon-ed setup. This functionality is pretty bare-bones and not very smart, but it's a good start. - Bugfixes: - - Fixed a crash when loading a map that used certain kinds of recipes - - Fixed the rocket-part item not being visible anymore in the product picker - ---------------------------------------------------------------------------------------------------- -Version: 0.18.17 -Date: 23. 05. 2020 - Bugfixes: - - Fixed a crash in certain modded situations - ---------------------------------------------------------------------------------------------------- -Version: 0.18.16 -Date: 22. 05. 2020 - Changes: - - The 'items/s/machine'-view now also works for fluids - - The interface now remains open when alt-tabbing or resizing the Factorio window - - Now allows SI prefixes to be localised - Bugfixes: - - Fixed how the mod detects which machines can produce certain recipes in the proper way - - Fixed that setting hard limits on rocket silo recipes would not work correctly - - Fixed that migration caused any subfactory that contained fuels to always need repair - - Fixed that desired products that are also ingredients didn't show up as such at the top level - - Fixed that fuel would sometimes show up on the top floor as an ingredient when it's already being produced on a subfloor - - Fixed that recipes with certain complicated product definitions would not be useable - ---------------------------------------------------------------------------------------------------- -Version: 0.18.15 -Date: 20. 05. 2020 - Bugfixes: - - Fixed a bug where the recipe picker didn't show the appropriate recipes in some cases - - Fixed that adding recipes which used hidden items would crash - - Fixed that a recipe would sometimes show as being able to use fluids as ingredients/products, while actually not being able to do so - - Fixed a crash when alt-tabbing or changing resolution while a popup dialog was open - - (Probably) fixed a crash when the space science-item is being removed by another mod - ---------------------------------------------------------------------------------------------------- -Version: 0.18.14 -Date: 16. 05. 2020 - Bugfixes: - - Fixed that the game could be paused unexpectedly - - Fixed a crash when selecting a product from the item picker - - Fixed a crash when opening certain dialogs - ---------------------------------------------------------------------------------------------------- -Version: 0.18.13 -Date: 16. 05. 2020 - Features: - - You can now alt-click the machine of any recipe to reset it to default, removing any configured limits - Changes: - - Removed the functionality to shift-click a machine choice to set it as the default - - Added an exception so that Klonan's Transport/Mining Drone pseudo-recipes won't show up in the recipe picker - - Reworded the tooltip for the production percentage-column to be more correct - - Added the mod name and description to the locale file, so it can be localised to other languages - Bugfixes: - - Added a temporary fix for some dialogs showing up behind the main interface. I'll have to wait on the reaction of the devs for a proper fix. For now, opening the product picker dialog will be slower. Sorry about that. - - Fixed that rocket silo recipes would be calculated incorrectly, which had lead to inaccurate machine counts and wacky numbers when using the items/s/machine view - - Fixed that machines with negative pollution values would display as having 0 pollution - - Fixed that you could be stranded on a non-existant subfloor after deleting its main recipe - - Fixed that alt-tabbing or changing resolution while FP is pausing the game could cause it to be stuck in the paused state - - Fixed that deleting subfloors could sometimes leave behind remnants that lead to a crash when clicked on - - Fixed that energy consumption for machines in tooltips was off by a factor of 60; The calculations were still correct - ---------------------------------------------------------------------------------------------------- -Version: 0.18.12 -Date: 30. 04. 2020 - Bugfixes: - - Fixed the usage of an outdated format for hotkeys that was no longer supported with Factorio 0.18.22 - ---------------------------------------------------------------------------------------------------- -Version: 0.18.11 -Date: 07. 04. 2020 - Changes: - - Added an indication to the tooltip of 'raw ore'-items, differentiating them from mined ore - Bugfixes: - - Fixed a crash with infinite values in certain modded situations - - Fixed that a change to preferences would not always refresh the main interface - ---------------------------------------------------------------------------------------------------- -Version: 0.18.10 -Date: 04. 04. 2020 - Features: - - Shift-clicking when changing the machine for a recipe now sets that machine as the default - Changes: - - Updated the remote interface for Recipe Book to support its new version - ---------------------------------------------------------------------------------------------------- -Version: 0.18.9 -Date: 29. 03. 2020 - Changes: - - Added exact numbers to the utility dialog machine/module tooltips - Bugfixes: - - Fixed a calculation issue where byproducts where not being used up by recipes on subfloors - ---------------------------------------------------------------------------------------------------- -Version: 0.18.8 -Date: 16. 03. 2020 - Bugfixes: - - Fixed a crash when left-clicking a top level byproduct - ---------------------------------------------------------------------------------------------------- -Version: 0.18.7 -Date: 10. 03. 2020 - Features: - - Added a preference that allows you to enable additional production table columns, such as pollution info and comment fields - - Added a preference that allows you to select an action when alt-clicking on recipes or items. You can choose between opening them in FNEI, WIIRUF or Recipe Book. - - Added rate limiting to most interface interactions, improving performance and avoiding crashes in high-latency multiplayer situations - - Added a keyboard shortcut to refocus the product picker searchfield - - Added some more warning messages when an action couldn't be executed - Changes: - - Created a centralized localisation project. If you want to contribute, take a look at this mod's Github page. - - Changed some mod settings to be preferences - - Removed Performance Mode, as it no longer did anything - - The utility dialog now automatically saves changes to your notes - - Improved the warning message when there is no (enabled) recipe to craft the given product - Bugfixes: - - Fixed the recipe dialog dimensions to be less jumpy - - Fixed a crash that was caused by the mod assuming that the steam prototype will always exist - - Fixed a problem where byproducts and ingredients where added up incorrectly in some cases - - Fixed a problem where fluid buttons didn't show up when certain views were active - ---------------------------------------------------------------------------------------------------- -Version: 0.18.6 -Date: 29. 02. 2020 - Bugfixes: - - Removed superfluous logging that lead to crashes - ---------------------------------------------------------------------------------------------------- -Version: 0.18.5 -Date: 29. 02. 2020 - Bugfixes: - - Fixed energy consumption and pollution not being added up correctly if your subfactory contains subfloors - - Hide recipes that can't ever be researched, which led Factory Planner to crash - ---------------------------------------------------------------------------------------------------- -Version: 0.18.4 -Date: 26. 02. 2020 - Bugfixes: - - Fixed a crash when opening preferences when using modded items with infinite fuel values - - Fixed a crash when submitting the product picker without a product selected - - Fixed several crashes related to invalid inputs in dialog windows - - Mitigated all crashes caused by mod-created hidden modules/beacons - ---------------------------------------------------------------------------------------------------- -Version: 0.18.3 -Date: 21. 02. 2020 - Features: - - Added pollution information to machine tooltips - - Added a tooltip explaining what the percentage-textfield on the recipe-lines does - Bugfixes: - - Fixed that the recipe dialog didn't have the correct size sometimes - - Added exception for the mod 'Deep Mine' so the preferences dialog doesn't crash when it is installed - - Fixed a crash when using the beacon selection tool - - Fixed a crash when adding a new subfactory while viewing an invalid one - - Fixed the main interface not refreshing after changing some preferences - ---------------------------------------------------------------------------------------------------- -Version: 0.18.2 -Date: 20. 02. 2020 - Changes: - - Improved responsiveness of the subfactory name-entry in multiplayer - Bugfixes: - - Fixed the ingredients and byproducts not showing up at the subfactory level - - Fixed some wonkiness related to the 'Floor Total' view - ---------------------------------------------------------------------------------------------------- -Version: 0.18.1 -Date: 21. 01. 2020 - Features: - - Updated for 0.18. It also contains some smaller features and a lot of background optimizations. There are still quite a few bugs that have been reported and not fixed, I wanted to get the 0.18 patch out quickly. Thanks to everyone that reported things, it's very much appreciated. I kind of fell off the development-train in December because of exams and the festivities, and haven't gotten back on the horse really. I'll try to address the outstanding bugs soon, and hopefully get back to feature development at some point. - Changes: - - Reworked the recipe picker to be easier to use. Most recipes now use the fancy new tooltips. - - Various graphical and performance improvements - Bugfixes: - - Fixed an infinite loop when trying to add a recipe that has no machine it can use - ---------------------------------------------------------------------------------------------------- -Version: 0.17.73 -Date: 03. 12. 2019 - Bugfixes: - - Fixed that you couldn't add recipes for steam that doesn't specify a temperature - - Added a missing font - - Fixed a mixup in the tutorial text - ---------------------------------------------------------------------------------------------------- -Version: 0.17.72 -Date: 27. 11. 2019 - Bugfixes: - - Added an info-label when no machines/modules are needed in the utility dialog - - Fixed a crash when opening the utility dialog under certain circumstances - ---------------------------------------------------------------------------------------------------- -Version: 0.17.71 -Date: 27. 11. 2019 - Features: - - Converted the notes dialog into a utility dialog. It now contains the subfactory notes as well as an overview of how many machines/beacons/modules you'll need to build your current subfactory/floor. In the future, there will be more functionality added to this dialog. - Bugfixes: - - Fixed the previous fix to the calculation model - ---------------------------------------------------------------------------------------------------- -Version: 0.17.70 -Date: 26. 11. 2019 - Bugfixes: - - Fixed a bug where byproducts where sometimes not used as ingredients - - Added a missing locale key - - Fixed a couple migration crashes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.69 -Date: 23. 11. 2019 - Bugfixes: - - Fix migration crash - ---------------------------------------------------------------------------------------------------- -Version: 0.17.68 -Date: 21. 11. 2019 - Features: - - Added support for fluid temperatures (mainly relevant for steam) - Changes: - - Re-added left-click on the module and beacon buttons - ---------------------------------------------------------------------------------------------------- -Version: 0.17.67 -Date: 21. 11. 2019 - Bugfixes: - - Fixed a crash when using keyboard shortcuts before opening the main dialog once - ---------------------------------------------------------------------------------------------------- -Version: 0.17.66 -Date: 20. 11. 2019 - Changes: - - Made the control scheme more consistent by changing around some shortcuts. Take a look at the 'Interface'-part of the tutorial for more information. - - Improved and extended the Tutorial and Pro Tips - - Changed the example subfactory - Bugfixes: - - Fixed the selected floor not being conserved when changing subfactories - ---------------------------------------------------------------------------------------------------- -Version: 0.17.65 -Date: 19. 11. 2019 - Features: - - You can now set a hard limit on the amount of machines on a recipe line - - You can now also set an absolute number of beacons for every recipe, which includes them in energy calculations. There's also a selection tool to count already placed beacons. - - Added a performance mode setting that disables certain performance-intensive features - - Added a hotkey to go up a floor in a subfactory (SHIFT+R by default) - Changes: - - Improved performance of the calculation model - - Right-clicking on beacons now removes them, which is in line with the rest of the UI - - Made the localisation more compatible with other mods. Everything had to be moved around, so translation mods will have to do a bit of work to be compatible again. If you're having trouble, join the Discord and I'll try to help. - Bugfixes: - - Fixed a calculation error regarding productivity on certain types of recipes - - Fixed the 'Machine rounding precision' setting not working correctly - - Fixed that the current beacon wasn't being selected when editing - - Fixed SI-unit localisations not actually being shown - - Made time-shorthands (s, m, h) properly localisable - ---------------------------------------------------------------------------------------------------- -Version: 0.17.64 -Date: 12. 11. 2019 - Bugfixes: - - Fixed a crash caused by the most recent update - ---------------------------------------------------------------------------------------------------- -Version: 0.17.63 -Date: 12. 11. 2019 - Changes: - - Slightly improved calculation performance by using new API capabilities - Bugfixes: - - Improved compatibility with PyVeganism - - Fixed the main interface refreshing unnecessarily sometimes - - Fixed the horrible performance of the 'Floor Total'-mode - ---------------------------------------------------------------------------------------------------- -Version: 0.17.62 -Date: 04. 11. 2019 - Changes: - - Made the 'Tutorial Mode'-tooltips a bit more consistent - - Made units like Watt or Joule localisable - ---------------------------------------------------------------------------------------------------- -Version: 0.17.61 -Date: 24. 10. 2019 - Features: - - Added pollution calculation (shown in the tooltip of the energy consumption of every recipe line) - Changes: - - Changed around the preferences and mod-settings a bit - - Reworded several of the mod-setting descriptions - - Increased the subfactory name length-limit from 16 to 24 - Bugfixes: - - Fixed changelog - ---------------------------------------------------------------------------------------------------- -Version: 0.17.60 -Date: 24. 10. 2019 - Bugfixes: - - Fixed a crash when rotating a machine - ---------------------------------------------------------------------------------------------------- -Version: 0.17.59 -Date: 23. 10. 2019 - Features: - - A preview of your notes is now displayed in the tooltip of the 'View notes'-button - Changes: - - The 'round button numbers' mod setting now defaults to false so it's less confusing to new users - Bugfixes: - - Fixed multiple subfactory-repair crashes - - Fixed the calculations not updating properly after migration - - Fixed the subfactory bar not linebreaking correctly when it contains many small elements - - Fixed several small graphical inconsistencies - ---------------------------------------------------------------------------------------------------- -Version: 0.17.58 -Date: 23. 10. 2019 - Bugfixes: - - Fixed a migration crash related to fuels - - Fixed a crash on the calculation model - ---------------------------------------------------------------------------------------------------- -Version: 0.17.57 -Date: 19. 10. 2019 - Bugfixes: - - Fixed another migration crash - ---------------------------------------------------------------------------------------------------- -Version: 0.17.56 -Date: 18. 10. 2019 - Bugfixes: - - Fixed a migration crash related to the new line satisfaction feature - ---------------------------------------------------------------------------------------------------- -Version: 0.17.55 -Date: 18. 10. 2019 - Features: - - [Warning: Experimental!] This version is a complete rewrite of the calculation backbone of the mod, so it's likely to contain some crashes and bugs. I'd love it if you reported them to me on the mod portal. - - This rewrite was done to allow me to implement some much requested features and to fix some bugs that wouldn't be fixable otherwise. The ability to add recipes that consume byproducts didn't make it for this version, but will get done at some point, hopefully soon-ish! - - Added the ability to select which product is the main product of a recipe, which allows you to have more control over how many times this recipe is run. Left-click any product of a recipe line with multiple products to activate this feature. - - Added the ability to set a cap/limit to how many machines a recipe line uses. Right-click the machine button to set it. - - Added a mod setting ('Line satisfaction') that, when enabled, shows whether the ingredients of a recipe line are produced by the recipes below them or not. This allows you to more easily discern which recipes you might still need to add. - Bugfixes: - - Fixed that fuels that originate on subfloors weren't always shown correctly on their parent floors - - Fixed that fuels didn't always show up as the last ingredients in a recipe line, and that changing them in bulk didn't behave correctly - - Fixed crash with PyVeganism - - Fixed a migration crash - ---------------------------------------------------------------------------------------------------- -Version: 0.17.54 -Date: 30. 09. 2019 - Changes: - - Converted several checkboxes to switches, because that's prettier - - Percentage textfields are now re-focused after confirmation - Bugfixes: - - Fixed crash when loading a save with tooltips that are too long - - Fixed the game being unpaused in /editor-mode when it shouldn't be - - Fixed a couple of migration issues - ---------------------------------------------------------------------------------------------------- -Version: 0.17.53 -Date: 27. 09. 2019 - Changes: - - Improved item picker search performance significantly - - Improved the tooltips in several places - Bugfixes: - - Fixed the 'tooltip too long'-crash for real this time - ---------------------------------------------------------------------------------------------------- -Version: 0.17.52 -Date: 25. 09. 2019 - Bugfixes: - - Fixed crash with mods that add recipes with a lot of ingredients and/or products - ---------------------------------------------------------------------------------------------------- -Version: 0.17.51 -Date: 22. 09. 2019 - Features: - - Added a subfactory archive. You can use it to keep around old plans that you might want to refer back to at a later point. They can't be edited once they are archived, although you can un-archive them again, should you need to. - - Added a quickbar shortcut to open the main interface - Changes: - - Improved compatibility/detection of mods that add loaders, recyclers or stackers - ---------------------------------------------------------------------------------------------------- -Version: 0.17.50 -Date: 18. 09. 2019 - Features: - - Recipes that don't produce anything are now removed after a product has been deleted - - Added a setting to specify whether machine and belt numbers should be rounded up or not - Changes: - - The recipe picker now only shows recipes that actually produce a net positive amount of the desired item or fluid - - Removed the 'Show hints' setting, as I don't think it's really necessary - Bugfixes: - - Fixed that the launch sequence time wasn't considered for rocket production calculations - - Fixed productivity not applying correctly to mining recipes in certain modded situations - - Fixed an issue where productivity bonuses were applied incorrectly on catalyst recipes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.49 -Date: 08. 09. 2019 - Features: - - Added a mod setting to specify the default timescale for your subfactories - Changes: - - Changed the view that helps estimate how many inserters you'll need from items/s to items/s/machine, which just makes way more sense - - Made all mod settings localizable - Bugfixes: - - Fixed that module limitations (related to productivity modules) didn't apply to many recipes - - Fixed mining recipes not being detected correctly for some mods - - Fixed that you couldn't enter a decimal amount of beacons in some cases - ---------------------------------------------------------------------------------------------------- -Version: 0.17.48 -Date: 26. 08. 2019 - Changes: - - Made several strings easier to localize by splitting up singular and plural words - - Added (un)stacking recipes to the 'show barreling recipes'-preference - Bugfixes: - - Fixed mining productivity being handled incorrectly - - Fixed certain items being detected as fuel when they shouldn't be - - Fixed the machine speed not being capped at -80%, leading to crashes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.47 -Date: 21. 08. 2019 - Bugfixes: - - Fix startup crash - ---------------------------------------------------------------------------------------------------- -Version: 0.17.46 -Date: 20. 08. 2019 - Changes: - - This is the first non-beta version of Factory Planner πŸ’― - - Updates to descriptions and screenshots - ---------------------------------------------------------------------------------------------------- -Version: 0.17.45 -Date: 19. 08. 2019 - Bugfixes: - - Fixed that you could add a product (or beacon) with an amount of 0 - - Fixed a crash when removing beacons under certain conditions - - Fixed that you couldn't select an subfactory that's become invalid - - Fixed product picker not always centering correctly - - Fixed a couple of migration crashes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.44 -Date: 14. 08. 2019 - Changes: - - Beacon amounts can now be decimal - Bugfixes: - - Fixed layout glitch - ---------------------------------------------------------------------------------------------------- -Version: 0.17.43 -Date: 13. 08. 2019 - Bugfixes: - - Fixed a crash when refreshing the production table - ---------------------------------------------------------------------------------------------------- -Version: 0.17.42 -Date: 13. 08. 2019 - Features: - - Added a button to manually refresh the production table - Changes: - - Vastly improved the performance of the item and recipe picker-dialogs (mostly relevant for heavily modded games) - Initial opening sped up fivefold, subsequent openings sped up twelvefold - Bugfixes: - - Fixed bug where item/recipe categories overlapped sometimes - - Fixed mining productivity not applying to mining with fluids - - Fixed a crash on the beacons dialog in a particular situation - ---------------------------------------------------------------------------------------------------- -Version: 0.17.41 -Date: 12. 08. 2019 - Features: - - Added a preference to ignore recycling recipes (Currently works with Reverse Factory and Deadlock's Industrial Revolution) - Changes: - - Added hint when there are no modules to put into a particular machine/beacon - Bugfixes: - - Fixed detection of which modules are valid for certain machines/beacons - - Fixed the window layering issue properly - ---------------------------------------------------------------------------------------------------- -Version: 0.17.40 -Date: 09. 08. 2019 - Changes: - - Modal dialogs now adapt their size to the overall interface height setting - - The recipe- and item-picker dialogs now remember the location you drag them to - Bugfixes: - - Fixed a crash when changing the selected beacon for a recipe - - Duct-taped over windows not layering correctly in some cases - ---------------------------------------------------------------------------------------------------- -Version: 0.17.39 -Date: 09. 08. 2019 - Bugfixes: - - Fixed an issue where the recipe picker filters were being set incorrectly in some cases - ---------------------------------------------------------------------------------------------------- -Version: 0.17.38 -Date: 08. 08. 2019 - Features: - - You can now use 'Enter' to confirm dialogs and textfields - - All windows can be moved, and modal dialogs are 'true' pop-up windows now - - Mining productivity research is now respected, and can optionally be set to a custom value - - Re-enabled the FNEI interactions, now that it has been updated - - Added offshore pump recipes (Water, Angel's seafloor-pump, etc.) - - You can now toggle whether you want the ingredients/products/byproducts/energy up top to show the subfactory or floor totals - Changes: - - Textfields behave more intuitively now - - Made it easier and prettier to change the subfactory timescale - - Added some more context to various choices through tooltips - - Changed phrasing in some places to improve clarity - - Removed the subfactory/floor machine-changing actions (They will return at a later point) - - Lots of internal changes to improve performance and stability in the long run - Bugfixes: - - Fixed a problem where certain machines could not be configured to use beacons, even when they should - - Fixed certain textfields not being selected properly anymore after Factorio v0.17.59 - - Fixed changelog - ---------------------------------------------------------------------------------------------------- -Version: 0.17.37 -Date: 27. 07. 2019 - Bugfixes: - - Improved compatibility with the 'More Mining Productivity' mod - ---------------------------------------------------------------------------------------------------- -Version: 0.17.36 -Date: 22. 07. 2019 - Changes: - - Cleaned up the GUI in several places - Bugfixes: - - Fixed a bug where the ingredient limit on machines was sometimes calculated incorrectly - - Fixed a rare case where numbers could be displayed in scientific notation - ---------------------------------------------------------------------------------------------------- -Version: 0.17.35 -Date: 20. 07. 2019 - Changes: - - Improved focus selection for the beacon-dialog - Bugfixes: - - Fixed/improved the beacon-dialog validation process - - Fixed a rare crash when another mod changes its mod settings - ---------------------------------------------------------------------------------------------------- -Version: 0.17.34 -Date: 18. 07. 2019 - Bugfixes: - - Fixed a crash when adding steam recipes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.33 -Date: 18. 07. 2019 - Bugfixes: - - Fixed item amounts not refreshing correctly when changing views - ---------------------------------------------------------------------------------------------------- -Version: 0.17.32 -Date: 15. 07. 2019 - Bugfixes: - - Updated to incorporate the new 'base_productivity'-field on crafting machines - - Fixed a rare rounding error on machine tooltips - ---------------------------------------------------------------------------------------------------- -Version: 0.17.31 -Date: 12. 07. 2019 - Bugfixes: - - Fixed a crash on launch when using Py's Raw Ores, but not Py's Petro Handling - ---------------------------------------------------------------------------------------------------- -Version: 0.17.30 -Date: 09. 07. 2019 - Bugfixes: - - Fixed migration again (wheee) - ---------------------------------------------------------------------------------------------------- -Version: 0.17.29 -Date: 09. 07. 2019 - Bugfixes: - - Fixed migration crash for real this time - - Fixed changelog formatting - ---------------------------------------------------------------------------------------------------- -Version: 0.17.28 -Date: 09. 07. 2019 - Bugfixes: - - Fixed a crash when migrating a save - ---------------------------------------------------------------------------------------------------- -Version: 0.17.27 -Date: 06. 07. 2019 - Features: - - Added support for modules and beacons! (might cause crashes) - - Added a tutorial mode, which informs you of all the possible interactions in the - tooltips of various buttons. You can toggle it in the tutorial-window - Changes: - - Changing the view (items/s, belts, etc) now applies to top-level-items too - - Improved the tooltips in various places - Bugfixes: - - Fixed a crash when opening the machines or fuel chooser dialog - - Fixed a crash that happened when adding a recipe with no compatible machines - ---------------------------------------------------------------------------------------------------- -Version: 0.17.26 -Date: 01. 07. 2019 - Bugfixes: - - Fixed a crash when loading a save with some missing data - ---------------------------------------------------------------------------------------------------- -Version: 0.17.25 -Date: 27. 06. 2019 - Bugfixes: - - Fixed the game crashing when rocket tech is researched (again) - ---------------------------------------------------------------------------------------------------- -Version: 0.17.24 -Date: 27. 06. 2019 - Changes: - - 'To the top' now only shows when you are on level 3 or deeper - Bugfixes: - - Fixed a crash when adding Factory Planner to a save that has the rocket tech already researched - - Fixed the hint indicating you added an unresearched recipe showing up too often - ---------------------------------------------------------------------------------------------------- -Version: 0.17.23 -Date: 26. 06. 2019 - Bugfixes: - - Fixed crash when loading a save - - Fixed machine changing not working correctly - ---------------------------------------------------------------------------------------------------- -Version: 0.17.22 -Date: 26. 06. 2019 - Bugfixes: - - Fix crash when loading an existing save (related to view states) - ---------------------------------------------------------------------------------------------------- -Version: 0.17.21 -Date: 26. 06. 2019 - Changes: - - (This is an experimental release. It will probably break some stuff) - - Made migration when adding/removing/updating mods more solid - - Top level ingredients/products/byproducts now display their numbers according to the current view - Bugfixes: - - Fixed a crash when adding Factory Planner to an existing save - ---------------------------------------------------------------------------------------------------- -Version: 0.17.20 -Date: 20. 06. 2019 - Features: - - Added setting to pause the game when the Factory Planner interface is open (Singleplayer only) - Changes: - - Improved how the machine rounding indicators work - Bugfixes: - - Fixed certain probabilistic recipes not being calculated correctly - - Fixed the top level item tooltips not displaying - ---------------------------------------------------------------------------------------------------- -Version: 0.17.19 -Date: 19. 06. 2019 - Features: - - Now has a setting that lets you indicate whether a machine number is rounded up or not - Bugfixes: - - Fixed a couple of crashes related to mining recipes and ores - ---------------------------------------------------------------------------------------------------- -Version: 0.17.18 -Date: 18. 06. 2019 - Bugfixes: - - Fixed a crash when changing machines with the chooser dialog - ---------------------------------------------------------------------------------------------------- -Version: 0.17.17 -Date: 17. 06. 2019 - Features: - - Now has a preference to enable comments for every recipe line - Bugfixes: - - Fixed mining recipes not showing up - - Fixed a crash when formatting very small/big numbers for display - ---------------------------------------------------------------------------------------------------- -Version: 0.17.16 -Date: 16. 06. 2019 - Bugfixes: - - Fixed a crash when adding Factory Planner to an existing save - ---------------------------------------------------------------------------------------------------- -Version: 0.17.15 -Date: 16. 06. 2019 - Changes: - - You can now change the fuel of all subfloors by changing it on the parent line - - Improved the number formatting yet again - Bugfixes: - - Fixed a crash when setting the fuel type on a recipe to wood - ---------------------------------------------------------------------------------------------------- -Version: 0.17.14 -Date: 16. 06. 2019 - Bugfixes: - - Corrected the number-of-belts/lanes-calculation - - Fixed a couple of crashes when going between floors - ---------------------------------------------------------------------------------------------------- -Version: 0.17.13 -Date: 15. 06. 2019 - Features: - - (This release is experimental. It also loses your preferences, my apologies) - - Now calculates the fuel consumed by burner machines for you - The type of fuel is adjutable in preferences or per line (right-click it) - - Now links to FNEI. Alt-click on any item or recipe to see it in FNEI - - Ingredient limits on assemblers are now respected - - Now hides all items that don't have a recipe - - Added a preference to ignore barreling recipes - - Added a setting to change the height of the main interface - Changes: - - Improved number formatting in several places - ---------------------------------------------------------------------------------------------------- -Version: 0.17.12 -Date: 13. 06. 2019 - Bugfixes: - - Fixed Factory Planner accidentally deleting the mod buttons of other mods in the top right corner - ---------------------------------------------------------------------------------------------------- -Version: 0.17.11 -Date: 12. 06. 2019 - Bugfixes: - - Fixed a crash when on the belts/lanes view while displaying a fluid - ---------------------------------------------------------------------------------------------------- -Version: 0.17.10 -Date: 11. 06. 2019 - Changes: - - Now hides all recipes that don't have a machine to produce them - Bugfixes: - - Fixed probabilistic recipes being handled incorrectly - - Fixed a crash when going between subfactory floors - - Now works around item buttons not rounding correctly sometimes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.9 -Date: 09. 06. 2019 - Changes: - - The percentage field on a recipe now properly supports decimals - Bugfixes: - - Fixed a crash if there was any mining recipe with multiple products - ---------------------------------------------------------------------------------------------------- -Version: 0.17.8 -Date: 08. 06. 2019 - Bugfixes: - - Fixed a crash on launch - - Fixed a crash when entering certain characters into the item search field - ---------------------------------------------------------------------------------------------------- -Version: 0.17.7 -Date: 08. 06. 2019 - Changes: - - Removed the 'show disabled recipe' setting - Bugfixes: - - Fixed crash when hitting TAB before you opened the interface for the first time - - Fixed belt icon being oversized on the views selection - - Fixed crash related to machines that produce steam - ---------------------------------------------------------------------------------------------------- -Version: 0.17.6 -Date: 06. 06. 2019 - Bugfixes: - - Fixed a couple of crashes that 0.17.5 caused. Sorry about that. - ---------------------------------------------------------------------------------------------------- -Version: 0.17.5 -Date: 06. 06. 2019 - Features: - - Added support for 3 different production views: Items/timescale, Belts or Lanes, and Items/s - - Added recipes for producing steam - ---------------------------------------------------------------------------------------------------- -Version: 0.17.4 -Date: 04. 06. 2019 - Features: - - Now remembers your recipe-filter preferences - Changes: - - The setting 'Show disabled recipes' is now unchecked by default - Bugfixes: - - Fixed mining recipes not being checked correctly when loaded mods change - - Fixed some mods' additional player entities causing crashes - ---------------------------------------------------------------------------------------------------- -Version: 0.17.3 -Date: 31. 05. 2019 - Features: - - Added thumbnail - Bugfixes: - - Fixed recipe picker filter not applying - ---------------------------------------------------------------------------------------------------- -Version: 0.17.2 -Date: 30. 05. 2019 - Bugfixes: - - Fixed an issue where products could have negative amounts - - Improved compatibility with Angel's mods - - Improved compatibility with Creative Mod - ---------------------------------------------------------------------------------------------------- -Version: 0.17.1 -Date: 30. 05. 2019 - Features: - - Initial beta release πŸ™Œ diff --git a/factoryplanner_1.1.72/control.lua b/factoryplanner_1.1.72/control.lua deleted file mode 100644 index c782bd0c..00000000 --- a/factoryplanner_1.1.72/control.lua +++ /dev/null @@ -1,92 +0,0 @@ -local active_mods = script.active_mods - -RECIPEBOOK_ACTIVE = (active_mods["RecipeBook"] ~= nil) -RECIPEBOOK_API_VERSION = 4 -- the API version of Recipe Book this mod works with - -BEACON_OVERLOAD_ACTIVE = ( - active_mods["space-exploration"] - or active_mods["wret-beacon-rebalance-mod"] - or active_mods["beacon-overhaul"] -) and true - -DEBUGGER_ACTIVE = (active_mods["debugadapter"] ~= nil) -DEV_ACTIVE = false -- enables certain conveniences for development -llog = require("llog") - - -MAGIC_NUMBERS = { - margin_of_error = 1e-6, -- the margin of error for floating point calculations - subfactory_deletion_delay = 15 * 60 * 60, -- ticks to deletion after subfactory trashing - modal_search_rate_limit = 10, -- ticks between modal search runs - effects_lower_bound = -0.8, - effects_upper_bound = 327.67, - - -- Some magic numbers to determine and calculate the dimensions of the main dialog - frame_spacing = 12, -- Spacing between the base frames in the main dialog - title_bar_height = 28, -- Height of the main dialog title bar - subheader_height = 36, -- Height of the subfactory list subheader - list_width = 300, -- Width of the subfactory list - list_element_height = 28, -- Height of an individual subfactory list element - info_height = 138, -- Height of the subfactory info frame - item_button_size = 40, -- Size of item box buttons - item_box_max_rows = 4, -- Maximum number of rows in an item box - - -- Various other UI-related magic numbers - recipes_per_row = 6, -- Number of recipes per row in the recipe picker - items_per_row = 10, -- Number of items per row in the item picker - groups_per_row = 6, -- Number of groups in a row in the item picker - blueprint_limit = 12 -- Maxmimum number of blueprints allowed per subfactory -} - - -CUSTOM_EVENTS = { - open_modal_dialog = script.generate_event_name(), - close_modal_dialog = script.generate_event_name(), - build_gui_element = script.generate_event_name(), - refresh_gui_element = script.generate_event_name() -} - - -fancytable = require("__flib__.table") -- has more functionality than built-in table -translator = require("__flib__.dictionary-lite") -- translation module for localised search - -util = require("util.util") -- LuaLS doesn't like this being called 'util' - -require("ui.base.main_dialog") -require("ui.base.compact_dialog") -require("ui.base.modal_dialog") - --- Not sure yet how to make these not global variables (filled via event_handler) -TUTORIAL_TOOLTIPS = {} ---@type { [string]: LocalisedString } -GLOBAL_HANDLERS = {} ---@type { [string]: function } - -require("backend.init") -require("ui.event_handler") - - -TUTORIAL_EXPORT_STRING = "eNrtGdtq2zD0V4ae4y7OutEF9rKxwmCDsT6WYmT5ONUmWZokh4bgf9+RLScmSUncpk3LDHmwj879LmdJpMqSORjLVUGmJD6Lz84nZETgTivjEjy14Mh0SVJqISC8/4gIueApvo/PYvz5d8qcMgstaFGAWbOqRsSWaXPKwZLp9ZIUVHpe11zOPnEH8q02KiuZQx0iyzgUDCJN2Z+bN1/vqNQCkL/jEiyj+Dz9MB6RQjnPjODJz4bYK6nS38BcIwR5OuWBQdo9MpCB5SiD5xwyMnWmBBS20J7E6+YNoFKVBQqIL1Cygb8lN5AlLXRJMsh5gZB0gUQBvEGVgnBJUCmnwgKydUonAuYgWrFMUOuNai2qbkbBpKQ9+uZVWmN+UUJAbRQJDHOhlPFKfUeVNn3SktVnTWB6oBtgXNdIj/Etow5mmClIxgzNHS9mXvc1iyR4v4FAx9pfjQI+Iog5h5ZlprzutVuRERgGhaMzBMVjdL2k7DYYt6k3sgWZClQhCljRuz5K5wplJYJL7lbysWRKAUkom+bNHpqcc+4WUUOzX5MuUTdNz9ce+1Gz2pVI4eS+VApWsBVHkNotEiuUt2C8KeEKra06wODyyic+Zb61bNscTvYYmeskIHYsvHigm60GyA72b43dFTs5umMnPR37ObiiGvWoTkO5eI2lOHn6UlxWj4vfeCN+k0MLo1cAufGN1fHn7qjN8xDF40QRvHzDWZSXpqB1GIaSfK3B3DGwh3g+aAxPXuEYXufMtuCQOrvFhnW/Y8FlvYD3Sz6azSnu2FnEuGEld8OePezZw5598j27GfCqwBF/ksIc1rVjTnimNLoyYjR97tE+xPGYcbQOQERaoOV7G5EEcdI52feK0FX4Zc7IF7SrDTPyBcxI67A2otQc8C3juNXYv6k2jeNIlZiXfu/fIUQJnkX16b5+fQuSMyq6Ibj0dNUpevX4aT50Sa0wQ0xUp8k+j6TUYqusPXiqHFk1bMkLP30zw4Xoqff/c62On/haHW9dq9eAq/ZPSBxPN9U/38n8Xw==" - -DEV_EXPORT_STRING = "eNrtWV9v2jAQ/ypTngkjaZk6pL1saqVJmzStjxWKHOdCvdlxZjuoCPHdd05MSYEWQtNCt0g8EPvu/Lv/52TuCZlEU1CaycwbeUE/6J+HXs+Du1wqE+GuBuON5l5MNDiC4UckSDmL8XnQD/Bnnwk1Us1yTrIM1ErUoufpIq52GWhvdDP3MiKsrBsmJp+YAfGeKZn5yGpg/A5lGSZAU8KR6MOg52XSWEYPd34omRS0BCTjX0BNJTBX0ki76CQDxy2UyahPmaIFM8irmcg5Sxkk3sioAvCcWW6pLQSLkwhZZCj7fICHKvhTMAVJtFydewmkLMOVeIZMbnmNKwZuIocmJVwDijUyjzhMgS+PpZxoq89SmUVvU4NCkYwVwg/Phk2gHwI8aBN36UmpoGXQFp+uYR70hw9B3wMwaDhtY9e321tgLA5VjbPJrfEl40/plvKCJc/1SDhs0yXaABEvjjkYHB7/457L5mi59dWGyIryi+Q2o22NcgJTLqWyqL4hpvVysGQr96wulOUl0YF1gmJhmmBxQw6qSGpYNrE48go/ooqcJasVqCH/WZ1tjYuUU1iKTKSFXZoIBYGikBkygdKOPU8Qeuv0WoeMYkHEHCH4jsoPm4BOJZ4VcSZQ1+X5WOULDpGr9NWTfmDU+WLDRd9Lsked5GTS+4gCkZtZpLm08sIVWyXnGmzwrhadARZbYsN5dfuxLtCC1f5VGSk12dfLdjQr02WjGa3c6mvKIKPg54T+Hr+7vCNoZGijQT1yRpOqGVwclKYXp5qldkpoJamb2PbEM/vs5TP7ieCcMjPzK57dSOpMD4ap9UzfFkiNasn5Wi0Z7FtLbOATaufcTZ3dzg4l0zxyhDUNLw40s84Bkr3tW1LXjw1bN2zY0LCfnSlsFd07OxV5ZIDqmuzxmmwTB5YTvjbstStq9b/zYjterCZfnHvTQmWEQpeSb9iZWxp258+D2nD4Btvwc+9K4cZdqVHwkWRKcMZO3vINupuzuzn7H5uzj/1qqxvX2uzwVOZoSp+S+LVbe+fHNv2oDQCvvnTtLEQC+FH7ZNMrQh3wafbIE5rVuh55Aj1SG8wNP1Z7vMtoNxubF9WqcLSUiWlh5/4th0jOEr/c3VWvb0EwSnjdBVeWb3GMWj14mRddIpcYIcovw2SXRWKisVSWFjxWjNwXbMEy230TxThviPv/uVYHJ/cJ8tLCa/x1cUsyPeO73BZpbSo7XvwFHm6Nsw==" - - ----@class Event ----@field name defines.events ----@field tick Tick - ----@class GuiEvent : Event ----@field player_index PlayerIndex - - ----@alias Timescale 1 | 60 | 3600 ----@alias FPCopyableObject FPLine | FPMachine | FPBeacon | FPModule | FPItem | FPFuel ----@alias FPParentObject FPFactory | FPSubfactory | FPFloor | FPLine | FPModuleSet ----@alias SwitchState "left" | "right" - ----@alias PlayerIndex uint ----@alias Tick uint ----@alias VersionString string ----@alias ModToVersion { [string]: VersionString } ----@alias ModuleLimitations { [string]: true } ----@alias AllowedEffects { [string]: boolean } ----@alias ItemType string ----@alias ItemName string diff --git a/factoryplanner_1.1.72/data.lua b/factoryplanner_1.1.72/data.lua deleted file mode 100644 index 9a3ab4d5..00000000 --- a/factoryplanner_1.1.72/data.lua +++ /dev/null @@ -1,5 +0,0 @@ -require("prototypes.styles") -require("prototypes.sprites") -require("prototypes.hotkeys") -require("prototypes.shortcuts") -require("prototypes.tools") diff --git a/factoryplanner_1.1.72/graphics/archive_dark.png b/factoryplanner_1.1.72/graphics/archive_dark.png deleted file mode 100644 index 474eb5eb..00000000 Binary files a/factoryplanner_1.1.72/graphics/archive_dark.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_down.png b/factoryplanner_1.1.72/graphics/arrow_down.png deleted file mode 100644 index 29756c32..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_down.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_left_dark.png b/factoryplanner_1.1.72/graphics/arrow_left_dark.png deleted file mode 100644 index 20a7c423..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_left_dark.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_left_light.png b/factoryplanner_1.1.72/graphics/arrow_left_light.png deleted file mode 100644 index 6e3dbff8..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_left_light.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_line_bar_up_dark.png b/factoryplanner_1.1.72/graphics/arrow_line_bar_up_dark.png deleted file mode 100644 index fded5b07..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_line_bar_up_dark.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_line_up_dark.png b/factoryplanner_1.1.72/graphics/arrow_line_up_dark.png deleted file mode 100644 index 7da2ddba..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_line_up_dark.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_right_dark.png b/factoryplanner_1.1.72/graphics/arrow_right_dark.png deleted file mode 100644 index 1ebe1c1d..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_right_dark.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_right_light.png b/factoryplanner_1.1.72/graphics/arrow_right_light.png deleted file mode 100644 index 5b5ebf6c..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_right_light.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/arrow_up.png b/factoryplanner_1.1.72/graphics/arrow_up.png deleted file mode 100644 index 9380f8e6..00000000 Binary files a/factoryplanner_1.1.72/graphics/arrow_up.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/beacon_selector.png b/factoryplanner_1.1.72/graphics/beacon_selector.png deleted file mode 100644 index 56886e62..00000000 Binary files a/factoryplanner_1.1.72/graphics/beacon_selector.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/export_light.png b/factoryplanner_1.1.72/graphics/export_light.png deleted file mode 100644 index ca21f266..00000000 Binary files a/factoryplanner_1.1.72/graphics/export_light.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/generic_assembler.png b/factoryplanner_1.1.72/graphics/generic_assembler.png deleted file mode 100644 index a55a51ec..00000000 Binary files a/factoryplanner_1.1.72/graphics/generic_assembler.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/import_light.png b/factoryplanner_1.1.72/graphics/import_light.png deleted file mode 100644 index f6afd00c..00000000 Binary files a/factoryplanner_1.1.72/graphics/import_light.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/semitransparent_pixel.png b/factoryplanner_1.1.72/graphics/semitransparent_pixel.png deleted file mode 100644 index 77a9338d..00000000 Binary files a/factoryplanner_1.1.72/graphics/semitransparent_pixel.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/shortcut_open_black_x24.png b/factoryplanner_1.1.72/graphics/shortcut_open_black_x24.png deleted file mode 100644 index c7d7ca10..00000000 Binary files a/factoryplanner_1.1.72/graphics/shortcut_open_black_x24.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/shortcut_open_white_x24.png b/factoryplanner_1.1.72/graphics/shortcut_open_white_x24.png deleted file mode 100644 index 9d789b4c..00000000 Binary files a/factoryplanner_1.1.72/graphics/shortcut_open_white_x24.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/shortcut_open_x32.png b/factoryplanner_1.1.72/graphics/shortcut_open_x32.png deleted file mode 100644 index d4903466..00000000 Binary files a/factoryplanner_1.1.72/graphics/shortcut_open_x32.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/transparent_pixel.png b/factoryplanner_1.1.72/graphics/transparent_pixel.png deleted file mode 100644 index 8bfd4f3e..00000000 Binary files a/factoryplanner_1.1.72/graphics/transparent_pixel.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/trash_red.png b/factoryplanner_1.1.72/graphics/trash_red.png deleted file mode 100644 index 0b85601c..00000000 Binary files a/factoryplanner_1.1.72/graphics/trash_red.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/warning_red.png b/factoryplanner_1.1.72/graphics/warning_red.png deleted file mode 100644 index 6139163e..00000000 Binary files a/factoryplanner_1.1.72/graphics/warning_red.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/white_square.png b/factoryplanner_1.1.72/graphics/white_square.png deleted file mode 100644 index 0961b8e8..00000000 Binary files a/factoryplanner_1.1.72/graphics/white_square.png and /dev/null differ diff --git a/factoryplanner_1.1.72/graphics/zone_selection.png b/factoryplanner_1.1.72/graphics/zone_selection.png deleted file mode 100644 index aeaeb120..00000000 Binary files a/factoryplanner_1.1.72/graphics/zone_selection.png and /dev/null differ diff --git a/factoryplanner_1.1.72/info.json b/factoryplanner_1.1.72/info.json deleted file mode 100644 index 2e489a75..00000000 --- a/factoryplanner_1.1.72/info.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "factoryplanner", - "version": "1.1.72", - "title": "Factory Planner", - "author": "Therenas", - "factorio_version": "1.1", - "dependencies": [ - "base >= 1.1.82", - "flib >= 0.12.0", - "? RecipeBook" - ] -} \ No newline at end of file diff --git a/factoryplanner_1.1.72/llog.lua b/factoryplanner_1.1.72/llog.lua deleted file mode 100644 index 6cda3e67..00000000 --- a/factoryplanner_1.1.72/llog.lua +++ /dev/null @@ -1,73 +0,0 @@ ---- Internally used logging function for a single table ----@param table_to_print AnyBasic ----@return string -local function _llog(table_to_print) - local excludes = LLOG_EXCLUDES or {} -- Optional custom excludes defined by the parent mod - - if type(table_to_print) ~= "table" then return (tostring(table_to_print)) end - - local tab_width, super_space = 2, "" - for _=0, tab_width-1, 1 do super_space = super_space .. " " end - - ---@param table_part { [AnyBasic]: AnyBasic } - ---@param depth number - ---@return string - local function format(table_part, depth) - if not next(table_part) then return "{}" end - - local spacing = "" - for _=0, depth-1, 1 do spacing = spacing .. " " end - local super_spacing = spacing .. super_space ---@type string - - local out, first_element = "{", true - local preceding_name = 0 - - for name, value in pairs(table_part) do - local element = tostring(value) - if type(value) == "string" then - element = "'" .. element .. "'" - elseif type(value) == "table" then - if excludes[name] ~= nil then - element = value.name or "EXCLUDE" - else - element = format(value, depth+tab_width) - end - end - - local comma = (first_element) and "" or "," - first_element = false - - -- Print string and discontinuous numerical keys only - local key = (type(name) == "number" and preceding_name+1 == name) and "" or (name .. " = ") - preceding_name = name --[[@as number]] - - out = out .. comma .. "\n" .. super_spacing .. key .. element - end - - return (out .. "\n" .. spacing .. "}") - end - - return format(table_to_print, 0) -end - --- User-facing function, handles multiple tables at being passed at once ----@param ... AnyBasic -local function llog(...) - local info = debug.getinfo(2, "Sl") - local out = "\n" .. info.short_src .. ":" .. info.currentline .. ":" - - local arg_nr = table_size({...}) - if arg_nr == 0 then - out = out .. " No arguments" - elseif arg_nr == 1 then - out = out .. " " .. _llog(select(1, ...)) - else - for index, table_to_print in ipairs{...} do - out = out .. "\n" .. index .. ": " .. _llog(table_to_print) - end - end - - log(out) -end - -return llog diff --git a/factoryplanner_1.1.72/locale/LICENSE.md b/factoryplanner_1.1.72/locale/LICENSE.md deleted file mode 100644 index b3dbff00..00000000 --- a/factoryplanner_1.1.72/locale/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/factoryplanner_1.1.72/locale/en/config.cfg b/factoryplanner_1.1.72/locale/en/config.cfg deleted file mode 100644 index 620cc1ca..00000000 --- a/factoryplanner_1.1.72/locale/en/config.cfg +++ /dev/null @@ -1,533 +0,0 @@ -[mod-name] -factoryplanner=Factory Planner - -[mod-description] -factoryplanner=This mod allows you to plan your production in advance, specifying the recipes and machines that make up each assembly line. It provides powerful features that are fast and intuitive to use, so you can focus on actually building your factory. - - -[controls] -fp_toggle_interface=Open/Close -fp_toggle_compact_view=Toggle compact view -fp_toggle_pause=Toggle pause -fp_refresh_production=Refresh production -fp_cycle_production_views=Cycle production view -fp_up_floor=Go up a floor -fp_top_floor=Go to the top floor -fp_reverse_cycle_production_views=Reverse cycle production view -fp_confirm_dialog=Confirm dialog -fp_focus_searchfield=Focus searchfield - -[controls-description] -fp_toggle_interface=Toggles the main interface -fp_toggle_compact_view=Switches between normal and compact view of the interface -fp_toggle_pause=Toggles pausing the game while the interface is open -fp_refresh_production=Refreshes the current production table -fp_up_floor=When down on a subfloor, go to the one above it -fp_top_floor=When down on a subfloor, go to the topmost one -fp_cycle_production_views=Cycles through the different views of the production table -fp_reverse_cycle_production_views=Cycles backwards through the different views of the production table -fp_confirm_dialog=Confirms any modal dialog, even when no textfield is in focus -fp_focus_searchfield=Focuses the cursor on the searchfield of the product picker, if possible - - -[mod-setting-name] -fp_display_gui_button=Show open/close-button -fp_products_per_row=Interface width -fp_subfactory_list_rows=Interface height -fp_default_timescale=Default timescale -fp_view_belts_or_lanes=Belts or Lanes -fp_prefer_product_picker=Prefer product picker -fp_prefer_matrix_solver=Prefer matrix solver - -[mod-setting-description] -fp_display_gui_button=Shows the button on the top left of the screen. It opens and closes the main interface. -fp_products_per_row=Set the main interface width by choosing how many top-level products are shown per row. -fp_subfactory_list_rows=Set the main interface height by choosing how many subfactory names are shown in total. -fp_default_timescale=Choose the timescale that any new subfactory should be created with. -fp_view_belts_or_lanes=Indicate whether you think of item throughput as individual lanes or as full belts. -fp_prefer_product_picker=Decide whether adding new subfactories should start with choosing a product or a subfactory name. -fp_prefer_matrix_solver=Decide whether new subfactories should enable the matrix solver instead of the traditional one. - -[string-mod-setting] -fp_default_timescale-one_second=1 Second -fp_default_timescale-one_minute=1 Minute -fp_default_timescale-one_hour=1 Hour -fp_view_belts_or_lanes-belts=Belts -fp_view_belts_or_lanes-lanes=Lanes - - -[shortcut-name] -fp_open_interface=Open Factory Planner - -[item-name] -fp_beacon_selector=Beacon Selector - -[command-help] -fp_reset_prototypes=Reconstructs the various prototypes from the base game data. Shouldn’t ever be needed. -fp_restart_translation=Restarts the translation of prototype names so search can use their natural language names. -fp_shrinkwrap_interface=Shrinks the width and height settings for the main interface until it fully fits onto the screen. - - -[fp] -# Porter dialog -import=Import -export=Export -validity=Validity -location=Location -import_instruction_1=Paste your [font=default-bold]factory exchange string[/font] -import_instruction_2=Choose the subfactories you’d like to import -export_instruction=Choose the subfactories that you’d like to export -export_instruction_tt=This will generate a [font=default-bold]factory exchange string[/font] which is used to share your subfactories with other people or to import it in one of your other worlds. It does not generate a blueprint string! -import_button_tooltip=Import string -export_button_tooltip=Generate factory exchange string -importer_decoding_failure=The given string could not be properly decoded. This is due to it being malformed. Try exporting the subfactories again, and make sure to copy the entire string. -importer_migration_failure=The given string is from an older version of Factory Planner and could not be migrated. This can be due to it being too old and no longer supported, due to the data being corrupted in some way, or due to a programming error. If you think this string is valid, please contact the developer (me!) on the mod portal. -importer_unpacking_failure=The given string could not be properly unpacked and validated. This can be due to the data being corrupted in some way or due to a programming error. If you think this string is valid, please contact the developer (me!) on the mod portal. -importer_issue_import_string=Import a valid subfactory exchange string -importer_issue_select_subfactory=Select at least one subfactory to import - -# Tutorial dialog -tutorial=Tutorial -interface=Interface -pause=Pause -usage=Usage -matrix_solver=Matrix Solver -interactive_tutorial_title=Interactive Tutorial -interactive_tutorial_text=The best way to familiarize yourself with Factory Planner is by just jumping right in and exploring it yourself. To that end, I have included an example subfactory that will show off some of this mod’s most important features. You can add it by clicking the button below. You can also activate [font=default-semibold]Tutorial Mode[/font], which shows all the keyboard combinations that are possible on important buttons all over the interface. -create_example=Create example -create_example_error=The example subfactory can’t be created because it is not compatible with the current set of mods -tutorial_mode=Tutorial Mode -interface_tutorial_title=Interactions -interface_tutorial_text=The interface is set up so similar actions share the same shortcuts, making it easier to get an intuitive feel for how to achieve certain results. You’ll just have to internalize these basic interactions, then use them everywhere: -interface_controls=β€’ __CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__: Select/Use\nβ€’ __CONTROL_STYLE_BEGIN____CONTROL_RIGHT_CLICK____CONTROL_STYLE_END__: Edit\nβ€’ __CONTROL_STYLE_BEGIN____CONTROL_KEY_CTRL__ + __CONTROL_RIGHT_CLICK____CONTROL_STYLE_END__: Delete\nβ€’ __CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_RIGHT_CLICK____CONTROL_STYLE_END__: Copy\nβ€’ __CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__: Paste\nβ€’ __CONTROL_STYLE_BEGIN__Alt + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__: Put into cursor -interface_controls_recipebook=\nβ€’ __CONTROL_STYLE_BEGIN__Alt + __CONTROL_RIGHT_CLICK____CONTROL_STYLE_END__: Open in Recipe Book - -# Usage -tutorial_usage_text=First, you will need to create a subfactory. This is the basic structure that contains some (mostly independent) part of your factory. Give it a name and off you go. It will have some inputs (ingredients), some outputs (products and byproducts), and consume a certain amount of energy. You can also set the timescale you want to work with, or scribble down some notes.\n\nWhat you are interested in are the products, so you will need to add the ones you want to produce. To do that, simply __CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ the [font=default-semibold]+[/font]-button, select the product you want and specify the amount that should be produced. It will have a red background, and, when hovering over it, you will see that there is currently [font=default-semibold]0[/font] of it being produced.\n\nTo change that, you __CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ on it. If there is only one recipe to produce this product, it will be added right away. Otherwise, you will have the choice of which recipe to use. Either way, a new recipe will show up on the top floor of your subfactory. You can change the machine being used or add some modules and beacons.\n\nNow to further break down the product you want to produce, you can __CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ on the ingredients of an existing recipe. This will once again add a recipe, changing the ingredients needed for the whole subfactory. You can continue breaking down your product in this way until you arrive at only plates as ingredients for example, or drill even deeper and add your mining and smelting recipes too. Whatever is most convenient for you and your existing factory.\n\nFor items with a large amount of intermediate products, your collection of recipes can get quite messy quite quickly. To deal with this, you can have multiple floors with different recipes on each of them. To create a so-called subfloor, __CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ on the recipe icon of the recipe you want to work out further. This gets you a subfloor (notice the level will be displayed as [font=default-semibold]2[/font]) in which you can add recipes just like before. The big difference being that you only need to worry about the ingredients of the recipe you clicked on.\n\nAnd those are the basics! There are some more advanced features that come in handy, but this should get you started. Create the example subfactory (in the [font=default-semibold]Interface[/font] tab) if you want to play around with a basic production line. - -# Matrix Solver -tutorial_matrix_solver_text=The matrix solver is an alternative method for updating the production table. By default Factory Planner solves the table from top to bottom, while the matrix solver solves every line simultaneously with a system of equations. The matrix solver can be tricky to use, but is also very powerful. For example, it handles recycling, voiding, and loops. \n\nEach subfactory is set to one of two solvers, the sequential solver (default) or the matrix solver. To switch to the matrix solver, toggle the solver switch in the bottom left to "matrix". The matrix solver will stay active until the switch is toggled again, and will automatically re-run when recipes are changed. \n\nEnabling the matrix solver also enables byproduct selection. To remove a byproduct, click either a recipe byproduct within a line or a subfactory byproduct at the top. This will show recipes where byproduct is an ingredient, including voids. \n\nSometimes the matrix solver requires certain items be set to "unrestricted." Normally items are balanced out, meaning they are consumed as fast as they are produced. However, "unrestricted items" do not balance out, and will appear as final ingredients or byproducts. If unrestricted items are required, a dialog will open to select unrestricted items. Unrestricted items are often needed when a subfactory contains a loop. To open this dialog, press the gear icon to the right of the solver toggle. \n\nOne last requirement is the recipes must be linearly independent. This means there can only be one unique solution for the current subfactory. In other words, the matrix solver will not work if there are multiple ways to create the given products. If the subfactory has linearly dependent recipes, try removing redundant recipes until the error goes away. This requirement holds across all subfloors. - -# Item options dialog -options_item_title=Set __1__ amount -options_item_text=Set a specific amount for ’__1__’ -options_item_amount=Amount -options_item_amount_tt=Specify the exact amount of this __1__ that you want this recipe to __2__. This will adjust the percentage of this line accordingly. -options_subfactory_ingredient_amount_tt=Specify the exact amount of this ingredient that you want this subfactory to consume. This will adjust its product amounts accordingly. - -# Utility dialog -utilities=Utilities -utility_title_components=Components -utility_title_components_tt=Shows the machines and modules needed to construct the current subfactory/floor. Can only incorporate beacons and beacon-modules when their ’Beacon Total’ is set. Rounds the amounts on every line up individually. -utility_title_blueprints=Blueprints -utility_title_blueprints_tt=Allows for storage of relevant blueprints alongside the current subfactory. Click the ’+’ button with a blueprint in hand add it. -utility_title_notes=Notes -components_needed_tt=__1__\n[font=default-bold]__2__[/font] in inventory / [font=default-bold]__3__[/font] needed\n__CONTROL_STYLE_BEGIN____CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to handcraft this item -no_components_needed=No __1__ needed -utility_combinator_tt=Convert all the items that your inventory is missing into a blueprint string containing constant combinators. These can then be connected to a requester chest to have them delivered to you. -utility_no_items_necessary=Your inventory already contains all the necessary items to construct this __1__ -request_items=Request -request_items_tt=Requests all the items that your inventory is missing to construct this __1__.\n[font=default-semibold][color=#84CDEC]Note:[/color][/font] This uses construction bots (not logistics bots) which includes personal roboport bots. It is advisable to disable the personal roboport before requesting items. -cancel_request=Cancel -request_logistics_not_researched=Robotics technology needs to be researched to enable this functionality -request_no_character=You need to have a character associated to you to be able to request items -utility_no_character=Can’t handcraft without associated character -utility_no_crafting=Permissions disable crafting for this player -utility_no_recipes=No recipes can craft this item -utility_no_demand=Demand for this item already fulfilled -utility_no_resources=Not enough resources to handcraft -utility_cursor_empty=No item in hand -utility_blueprint_from_library=Can't store blueprints from the library -utility_no_blueprint=Item in hand not a blueprint or blueprint book -utility_blueprint_not_setup=Can't store empty blueprint -utility_blueprint_book_empty=Can't store empty blueprint book -utility_blueprint_stored=Blueprint stored! - -# Preferences -preferences=Preferences -preferences_support=Support the mod at [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]! -preferences_info=These preferences contain settings that you adjust often\nover the course of a game. For general settings, go to\nMain Menuβ†’Settingsβ†’Mod Settingsβ†’Factory Planner. -preference_general_title=General preferences -preference_general_title_tt=Some general preferences that you might want to change regularly - -preference_general_attach_subfactory_products=Subfactory product icons -preference_general_attach_subfactory_products_tt=Shows icons of the output produced by a subfactory alongside its given name -preference_general_show_floor_items=Show floor items -preference_general_show_floor_items_tt=Replace the subfactory item totals with the totals for the current floor. Only applicable to subfloors, not the top floor. -preference_general_fold_out_subfloors=Fold out subfloors -preference_general_fold_out_subfloors_tt=Show all subfloors at the top level of a subfactory, instead of needing to dig down into the hierarchy. -preference_general_ingredient_satisfaction=Ingredient satisfaction -preference_general_ingredient_satisfaction_tt=Shows whether the ingredient-demands of a recipe are satisfied by the recipes below them -preference_general_round_button_numbers=Rounded button numbers -preference_general_round_button_numbers_tt=Rounds up the numbers on machine- and belts/lanes-buttons -preference_general_ignore_barreling_recipes=Ignore barreling and stacking recipes -preference_general_ignore_barreling_recipes_tt=Allows you to ignore (un)barreling and (un)stacking when looking for a recipe (Only for compatible mods) -preference_general_ignore_recycling_recipes=Ignore recycling recipes -preference_general_ignore_recycling_recipes_tt=Allows you to ignore recipes that recycle an existing item (Only for compatible mods) -preference_production_title=Production table columns -preference_production_title_tt=This allows you to enable some additional columns in the production table -preference_production_done_column=Mark recipe as done -preference_production_done_column_tt=Adds a column with a button that allows you to mark a recipe as done, which serves as purely visual information for you and has no effect on the recipe itself -preference_production_pollution_column=Pollution -preference_production_pollution_column_tt=Adds a column displaying the pollution produced by this recipe -preference_production_line_comment_column=Recipe comments -preference_production_line_comment_column_tt=Adds a column with a textfield so you can take notes on individual recipes -preference_mb_defaults_title=Module defaults -preference_mb_defaults_title_tt=Set the default module that every new recipe will try to be configured with -preference_mb_default_machine=Primary -preference_mb_default_machine_tt=The first module that’ll try to be inserted into a new recipe -preference_mb_default_machine_secondary=Secondary -preference_mb_default_machine_secondary_tt=If the first module isn’t compatible with the new recipe, this one will instead try to be inserted -preference_mb_default_beacon=Module -preference_mb_default_beacon_tt=The default module that will try to be inserted into the beacon of every new recipe -preference_mb_default_beacon_amount=Amount -preference_mb_default_beacon_amount_tt=Specifies how many beacons each individual machine for a new recipe will be affected by -preference_default_belts_title=Preferred belt -preference_default_belts_title_tt=Sets the type of belt that is used when calculating belt/lane-demand or when specifying products by an amount of belts/lanes -preference_default_beacons_title=Preferred beacon -preference_default_beacons_title_tt=Sets the beacon that is selected by default when adding one to a recipe -preference_default_fuels_title=Preferred fuel -preference_default_fuels_title_tt=Sets the fuel that is selected by default when adding a machine with a burner energy source -preference_default_machines_title=Preferred machine -preference_default_machines_title_tt=Sets the machine that is selected by default for each category when adding a new recipe.\n__CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ any machine to set it on every other similar category. -preference_default_wagons_title=Preferred wagon -preference_default_wagons_title_tt=Sets the type of wagon that is used when calculating wagon-demand - -# Recipe dialog -recipe_instruction=Choose a recipe to __1__ ’__2__’ -show=Show -unresearched_recipes=Unresearched recipes -hidden_recipes=Hidden recipes -no_recipe_found=No recipes match your filter conditions - -# Remote interfaces -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Recipe Book - -# Generator -fluid_at_temperature=__1__ at __2__ __3__ - -# Modal dialogs -submit=Submit -delete=Delete -cancel=Cancel -confirm_dialog_tt=- Press __CONTROL__fp_confirm_dialog__ to confirm - -cancel_dialog_tt=- Press __CONTROL__toggle-menu__ to cancel - -search_button_tt=- Press __CONTROL__focus-search__ to focus searchfield - -close_button_tt=- Press __CONTROL__toggle-menu__ to close - -searchfield_tt=Filter results using their natural language names -searchfield_not_ready_tt=Natural language search not ready yet, please wait.\nUse the [font=default-semibold]’/fp-restart-translation’[/font] console command to restart it. -warning_with_icon=[img=fp_sprite_warning_red] __1__ - -# Picker dialog -amount_by=Amount by __1__ -no_item_found=There are no items that match your search term -picker_issue_select_item=Select the item you want to add -picker_issue_enter_amount=Specify an amount by number or belt - -# Matrix dialog -matrix_free_items=Unrestricted items -matrix_constrained_items=Choose __1__ unrestricted __2__. Unrestricted items may\nbecome byproducts or ingredients, depending\non the planner’s solution. -matrix_linearly_dependent_recipes=Linearly dependent recipes detected - -# Subfactory dialog -subfactory_dialog_description=Choose a name for the subfactory -subfactory_dialog_name=Name -subfactory_dialog_name_tt=The subfactory name allows rich text, which can be added using the buttons below -subfactory_dialog_rich_text=Rich Text -subfactory_dialog_rich_text_tt=These selectors can be used to add rich text to the subfactory name. Typing or pasting in any rich text yourself also works, of course. -subfactory_dialog_signals=Signals -subfactory_dialog_recipes=Recipes -subfactory_dialog_name_empty=The subfactory’s name can not be empty - -# Machine dialog -machine_dialog_description=Configure the machine for ’__1__’ -machine_does_not_use_fuel=doesn’t use fuel -machine_limit=Limit -machine_limit_tt=Limits the number of machines this line will use. The actual amount might be lower if fewer machines are needed. -machine_force_limit=Exact limit -machine_force_limit_tt=Forces the number of machines to be the exact amount specified above, even if this leads to overproduction. Only makes sense in combination with a machine limit. - -# Beacon dialog -beacon_dialog_description_add=Add beacons to ’__1__’ -beacon_dialog_description_edit=Configure the beacons for ’__1__’ -beacon_amount_tt=This specifies how many beacons each individual machine will be affected by. You can put a decimal number here, which could be used to reflect the fact that some of your machines might be covered by a different amount of beacons. -beacon_total=Total -beacon_total_tt=This specifies the absolute amount of beacons that you use for this recipe in your actual factory. That information is then included in the energy consumption calculations. -beacon_selector_tt=Use a selection tool to count the beacons in your already-built factory -beacon_issue_set_amount=Enter a beacon amount greater than 0 -beacon_issue_no_modules=Select at least one module - -# Title bar -switch_to_compact_view=Switch to compact view\n- Press __CONTROL__fp_toggle_compact_view__ to switch - -pause_on_interface=Toggle to automatically pause the game in the background when the main interface is open (Singleplayer only)\n- Press __CONTROL__fp_toggle_pause__ to toggle pause - -close_interface=Close this interface\n- Press __CONTROL__fp_toggle_interface__ to close - - -# Subfactory list -action_open_archive_tt=Open the subfactory archive\n__1__ -archive_empty=[font=default-semibold]- The archive is currently empty -[/font] -archive_filled=[font=default-semibold]- The archive currently contains __1__ __2__ -[/font] -action_close_archive_tt=Close the subfactory archive -action_import_subfactory=Import subfactories using a string generated in another save -action_export_subfactory=Export subfactories to a string that can be shared with others -action_archive_subfactory=Move the selected subfactory to the archive -action_unarchive_subfactory=Move the selected subfactory back out of archive -action_duplicate_subfactory=Duplicate the selected subfactory, creating a perfect copy -action_add_subfactory_by_name=Create a new subfactory\n__CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to choose a product right away -action_add_subfactory_by_product=Pick an item for a new subfactory\n__CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to give it a name first -action_edit_subfactory=Edit the name of the selected subfactory -action_trash_subfactory=Trash the selected subfactory\nIt will be preserved in the archive for __1__ minutes -action_delete_subfactory=Delete the selected subfactory irreversibly -subfactory_trashed=\n[font=default-bold]Trashed[/font] - automatic deletion in __1__ __plural_for_parameter_1_{1=minute|rest=minutes}__ -subfactory_invalid=\n[font=default-bold]Invalid[/font] - needs to be repaired - -# Subfactory info -subfactory_info=Subfactory Info -no_subfactory=no subfactory selected -subfactory_needs_repair=The active mods have changed, breaking this subfactory. Load the previous modset, or repair to remove any invalid parts. -repair_subfactory=Repair subfactory -timescale=Timescale -timescale_tt=The timescale sets how quickly items are produced. For example, selecting [font=default-bold]1m[/font] and adding a product of 400 green circuits means you want to produce 400 circuits [font=default-bold]per minute[/font]. -mining_productivity=Mining productivity -mining_productivity_tt=The current mining productivity bonus. By default, it tracks your research progress, but you can override the percentage manually. To revert to automated tracking, clear the textfield and confirm. -override=Override -solver_choice=Solver -solver_choice_tt=Choose which of the solvers to use for this subfactory. The traditional one works by going through your recipes in order and figuring out their needs. The matrix solver on the other hand can deal with loops and byproducts, but sometimes needs additional configuration. -solver_choice_traditional=Traditional -solver_choice_matrix=Matrix -solver_choice_configure=Configure the matrix solver -subfactory_modset_changes=Your active mods changed. -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]These mods were removed:[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]These mods were added:[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]These mods were updated:[/font][/color] -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__ β†’ v__3__ - -# Item boxes -ingredients_to_combinator_tt=Convert all the ingredients of this subfactory into a blueprint string containing constant combinators. - -# View state -view_state_tt=__1__\n- Press __CONTROL__fp_cycle_production_views__/__CONTROL__fp_reverse_cycle_production_views__ to cycle between views - -items_per_timescale=Sets the number on item buttons to how many of them will be produced/consumed per __1__. -belts_or_lanes=Sets the number on item buttons to how many __1__ of your preferred belt type will be needed to transport the items. For fluids, it assumes them being barreled at [font=default-bold]50 fluid per barrel[/font]\nConfigured to use __2__ [font=default-bold]__3__[/font]. -wagons_per_timescale=Sets the number on item buttons to how many cargo or fluid wagons will be filled by them per __1__.\nConfigured to use __2__ [font=default-bold]__3__[/font] or __4__ [font=default-bold]__5__[/font]. -items_per_second_per_machine=Sets the number on item buttons to how many of them per second a single machine will produce/consume. This helps to estimate how many inserters will be needed. - -# Production box -refresh_production=Refresh the production table below\n- Press __CONTROL__fp_refresh_production__ to refresh - -production=Production -level=Level -floor_up_tt=Go up a floor level\n- Press __CONTROL__fp_up_floor__ to go up - -floor_top_tt=Go the the top floor\n- Press __CONTROL__fp_top_floor__ to go to the top - -utility_dialog_tt=Open the utility dialog -production_instruction_subfactory=Add a subfactory by clicking the green ’+’-button in the top left -production_instruction_product=Add a product by clicking the gray ’+’-button in the products-box above -production_instruction_recipe=Add a recipe by left-clicking a product in the products-box above - -# Production table -column_done_tt=Mark recipe as done for your own visual benefit -column_percentage_tt=This percentage determines how much of the demand for the products that this recipe produces should actually be fulfilled by this recipe. The calculation only updates after you confirm your changes by pressing __CONTROL_STYLE_BEGIN__Enter__CONTROL_STYLE_END__. -column_comment=Comment -recipe_inactive=recipe inactive -recipe_subfloor_attached=subfloor attached -recipe_consumes_byproduct=consumes byproduct -subfloor_machine_count=__1__ __2__ in use on this subfloor -machine_limit_force=Exact limit set [__1__] -machine_limit_enforced=Limit enforced [__1__] -machine_limit_set=Limit set [__1__] -add_machine_module=Add a module -add_beacon=Add a beacon -in_total=__1__ in total -priority_product=Priority Product -raw_ore=Raw Ore - -# Compact frame -switch_to_main_view=Switch to main view\n- Press __CONTROL__fp_toggle_compact_view__ to switch - - -# Clipboard -copied_into_clipboard=__1__ copied -pasted_from_clipboard=__1__ pasted -clipboard_empty=Your clipboard is empty -clipboard_incompatible_class=Can’t paste __1__ on __2__ -clipboard_incompatible=Pasted __1__ is incompatible -clipboard_already_exists=Pasted __1__ already exists -clipboard_no_empty_slots=No empty module slots -clipboard_recipe_irrelevant=Pasted line irrelevant to this floor - -# Tutorial Mode -tut_action_line=\n__CONTROL_STYLE_BEGIN____1____CONTROL_STYLE_END__ to __2__ - -tut_left=__CONTROL_LEFT_CLICK__ -tut_right=__CONTROL_RIGHT_CLICK__ -tut_shift=__CONTROL_KEY_SHIFT__ -tut_control=__CONTROL_KEY_CTRL__ -tut_alt=Alt - -tut_select=select -tut_edit=edit -tut_delete=delete -tut_copy=copy -tut_paste=paste -tut_add_recipe=add recipe -tut_move_left=move left -tut_move_right=move right -tut_open_subfloor=open subfloor -tut_toggle=toggle -tut_set_limit=set a limit -tut_reset_to_default=reset to default -tut_put_into_cursor=put into cursor -tut_add_recipe_to_end=add recipe -tut_add_recipe_below=add recipe below -tut_specify_amount=specify amount -tut_prioritize=prioritize -tut_pick_up=pick up -tut_recipebook=open in Recipe Book - -# Effects tooltip -effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=Energy consumption -speed=Speed -productivity=Productivity -pollution=Pollution -base_prod=Base productivity -mining_prod=Mining productivity -effect_maxed=(maxed) - -# Messages -error_no_relevant_recipe=No existing recipe produces this item -error_no_enabled_recipe=No enabled recipe produce this item (enable in preferences β†’) -error_no_compatible_machine=No existing machine can craft this recipe -error_no_subfloor_on_byproduct_recipes=Recipes that consume byproducts can’t have subfloors -error_no_new_subfloors_in_archive=Can’t add subfloors to archived subfactories -error_recipebook_version_incompatible=Recipe Book’s version is not compatible; Try updating both mods -error_recipebook_lookup_failed=The clicked __1__ could not be found in Recipe Book -error_linearly_dependant_recipes=Matrix solver inactive; Make sure there’s only one recipe per product -error_recipe_wrong_floor=__1__ recipes can only be added to the top level of the subfactory -warning_no_matrix_configuration_needed=The matrix solver does not need additional configuration -warning_recipe_disabled=This recipe is not researched yet, so you can’t produce it currently -warning_module_not_compatible=Your preferred __1__ is not compatible with this machine -warning_no_prioritizing_single_product=Recipes with a single relevant product can’t be prioritized -hint_tutorial=If you are new to Factory Planner, consider taking a look the the tutorial in the top right corner! -hint_byproducts_removed=Disabling the matrix solver removes all byproduct recipes - -# Units -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=P -unit_celsius=Β°C -unit_second=s -unit_minute=m -unit_hour=h -second=second -minute=minute -hour=hour - -# General -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] - -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) - -toggle_interface=__CONTROL__fp_toggle_interface__ - -selected=selected -preferred=preferred -satisfied=satisfied -valid=valid -invalid=invalid -increased=increased -decreased=decreased -capped=capped - -on=On -off=Off -left=left -right=right -up=up -down=down -top=top -bottom=bottom - -add=Add -new=New -edit=Edit -choose=Choose -produce=produce -consume=consume - -none=None -crafting_time=Crafting Time -amount=Amount - -factory=Factory -archive=Archive - -effects=effects -energy_consumption=Energy consumption -effectivity=Effectivity -module_slots=Module slots -fuel_value=Fuel value -emissions_multiplier=Emissions multiplier -throughput=Throughput -crafting_speed=Crafting speed -storage=Storage - -combinator=Combinator -put_into_cursor_failed=__1__ can’t be put into the cursor -blueprint_no_combinator_prototype=Constant combinator prototype not found -impossible_to_blueprint_fluid=Fluids can’t be blueprinted as a combinator - -move_row_tt=Move this __1__ __2__\n__CONTROL_STYLE_BEGIN____CONTROL_KEY_CTRL__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to move it by 5 spots\n__CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to move it to the __3__ -attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -shift_to_paste=__CONTROL_STYLE_BEGIN____CONTROL_KEY_SHIFT__ + __CONTROL_LEFT_CLICK____CONTROL_STYLE_END__ to paste - -# Locale prefixes: s = singular; p = plural; l = lowercase; u = uppercase -pl_subfactory=__plural_for_parameter_1_{1=subfactory|rest=subfactories}__ -pu_subfactory=__plural_for_parameter_1_{1=Subfactory|rest=Subfactories}__ -pl_line=__plural_for_parameter_1_{1=line|rest=lines}__ -pu_line=__plural_for_parameter_1_{1=Line|rest=Lines}__ -pl_floor=__plural_for_parameter_1_{1=floor|rest=floors}__ -pu_floor=__plural_for_parameter_1_{1=Floor|rest=Floors}__ -pl_item=__plural_for_parameter_1_{1=item|rest=items}__ -pu_item=__plural_for_parameter_1_{1=Item|rest=Items}__ -pl_fluid=__plural_for_parameter_1_{1=fluid|rest=fluids}__ -pu_fluid=__plural_for_parameter_1_{1=Fluid|rest=Fluids}__ -pl_product=__plural_for_parameter_1_{1=product|rest=products}__ -pu_product=__plural_for_parameter_1_{1=Product|rest=Products}__ -pl_byproduct=__plural_for_parameter_1_{1=byproduct|rest=byproducts}__ -pu_byproduct=__plural_for_parameter_1_{1=Byproduct|rest=Byproducts}__ -pl_ingredient=__plural_for_parameter_1_{1=ingredient|rest=ingredients}__ -pu_ingredient=__plural_for_parameter_1_{1=Ingredient|rest=Ingredients}__ -pl_fuel=__plural_for_parameter_1_{1=fuel|rest=fuels}__ -pu_fuel=__plural_for_parameter_1_{1=Fuel|rest=Fuels}__ -pl_recipe=__plural_for_parameter_1_{1=recipe|rest=recipes}__ -pu_recipe=__plural_for_parameter_1_{1=Recipe|rest=Recipes}__ -pl_machine=__plural_for_parameter_1_{1=machine|rest=machines}__ -pu_machine=__plural_for_parameter_1_{1=Machine|rest=Machines}__ -pl_module=__plural_for_parameter_1_{1=module|rest=modules}__ -pu_module=__plural_for_parameter_1_{1=Module|rest=Modules}__ -pl_beacon=__plural_for_parameter_1_{1=beacon|rest=beacons}__ -pu_beacon=__plural_for_parameter_1_{1=Beacon|rest=Beacons}__ -pl_belt=__plural_for_parameter_1_{1=belt|rest=belts}__ -pu_belt=__plural_for_parameter_1_{1=Belt|rest=Belts}__ -pl_lane=__plural_for_parameter_1_{1=lane|rest=lanes}__ -pu_lane=__plural_for_parameter_1_{1=Lane|rest=Lanes}__ -pl_wagon=__plural_for_parameter_1_{1=wagon|rest=wagons}__ -pu_wagon=__plural_for_parameter_1_{1=Wagon|rest=Wagons}__ -pl_stack=__plural_for_parameter_1_{1=stack|rest=stacks}__ - -l_fluid=fluid -u_power=Power diff --git a/factoryplanner_1.1.72/locale/es-ES/config.cfg b/factoryplanner_1.1.72/locale/es-ES/config.cfg deleted file mode 100644 index cfa07aae..00000000 --- a/factoryplanner_1.1.72/locale/es-ES/config.cfg +++ /dev/null @@ -1,514 +0,0 @@ -[mod-name] -factoryplanner=Factory Planner - -[mod-description] -factoryplanner=Este mod le permite planificar su producciΓ³n por adelantado, especificando las recetas y las mΓ‘quinas que componen cada lΓ­nea de montaje. Ofrece potentes funciones de uso rΓ‘pido e intuitivo, para que puedas centrarte en construir realmente tu fΓ‘brica. - - -[controls] -fp_toggle_interface=Abrir/Cerrar -fp_toggle_compact_view=Alternar a vista compacta -fp_toggle_pause=Alternar pausa -fp_refresh_production=Refrescar la producciΓ³n -fp_cycle_production_views=Vista del ciclo de producciΓ³n -fp_reverse_cycle_production_views=Vista de la producciΓ³n del ciclo inverso -fp_confirm_dialog=Confirmar diΓ‘logo -fp_focus_searchfield=Enfocar campo de bΓΊsqueda - -[controls-description] -fp_toggle_interface=Activa o desactiva la interfaz principal -fp_toggle_compact_view=Cambia entre la vista normal y la vista compacta de la interfaz. -fp_toggle_pause=Activa la pausa del juego mientras la interfaz estΓ‘ abierta. -fp_refresh_production=Actualiza la tabla de producciΓ³n en curso -fp_cycle_production_views=Recorre las diferentes vistas de la tabla de producciΓ³n -fp_reverse_cycle_production_views=Recorre hacia atrΓ‘s las diferentes vistas de la tabla de producciΓ³n -fp_confirm_dialog=Confirma cualquier diΓ‘logo modal, incluso cuando no hay ningΓΊn campo de texto en primer plano. -fp_focus_searchfield=Centra el cursor en el campo de bΓΊsqueda del selector de productos, si es posible - - -[mod-setting-name] -fp_display_gui_button=Mostrar botΓ³n abrir/cerrar -fp_products_per_row=Anchura de interfaz -fp_subfactory_list_rows=Altura de la interfaz -fp_default_timescale=Escala de tiempo por defecto -fp_view_belts_or_lanes=Bandas o carriles -fp_prefer_product_picker=Prefiera el recogedor de productos -fp_prefer_matrix_solver=Prefiera el solucionador de matrices - -[mod-setting-description] -fp_display_gui_button=Muestra el botΓ³n situado en la parte superior izquierda de la pantalla. Abre y cierra la interfaz principal. -fp_products_per_row=Establezca la anchura de la interfaz principal eligiendo cuΓ‘ntos productos de nivel superior se muestran por fila. -fp_subfactory_list_rows=Establezca la altura de la interfaz principal eligiendo cuΓ‘ntos nombres de subfΓ‘brica se muestran en total. -fp_default_timescale=Elija la escala de tiempo con la que debe crearse cualquier nueva subfactorΓ­a. -fp_view_belts_or_lanes=Indique si considera el flujo de artΓ­culos como carriles individuales o como cintas completas. -fp_prefer_product_picker=Decida si la adiciΓ³n de nuevas subfΓ‘bricas debe comenzar con la elecciΓ³n de un nombre de producto o de subfΓ‘brica. -fp_prefer_matrix_solver=Decidir si las nuevas subfactorΓ­as deben habilitar el solucionador de matrices en lugar del tradicional. - -[string-mod-setting] -fp_default_timescale-one_second=1 segundo -fp_default_timescale-one_minute=1 Minuto -fp_default_timescale-one_hour=1 Hora -fp_view_belts_or_lanes-belts=Bandas -fp_view_belts_or_lanes-lanes=Carriles - - -[shortcut-name] -fp_open_interface=Abrir Factory Planner - -[item-name] -fp_beacon_selector=Seleccionar Beacon - -[command-help] -fp_reset_prototypes=Reconstruye los distintos prototipos a partir de los datos del juego base. No deberΓ­a necesitarse nunca. -fp_restart_translation=Restablece la traducciΓ³n de los nombres de los prototipos para que la bΓΊsqueda pueda utilizar sus nombres en lenguaje natural. - - -[fp] -# Porter dialog -import=Importar -export=Exportar -validity=Validez -location=UbicaciΓ³n -import_instruction_1=Pegue su [font=default-bold]cadena de intercambio de fΓ‘brica[/font] -import_instruction_2=Elija las subfactorΓ­as que desea importar -export_instruction=Elija las subfactorΓ­as que desea exportar -export_instruction_tt=Esto generarΓ‘ una [font=default-bold]cadena de intercambio de fΓ‘brica[/font] que se utiliza para compartir tus subfactorΓ­as con otras personas o para importarla en uno de tus otros mundos. Β‘No genera una cadena de planos!. -import_button_tooltip=Importar cadena -export_button_tooltip=Generar la cadena de intercambio de fΓ‘brica -importer_decoding_failure=No se ha podido descodificar correctamente la cadena indicada. Esto se debe a que estΓ‘ mal formada. Intente exportar de nuevo las subfactorΓ­as y asegΓΊrese de copiar la cadena completa. -importer_migration_failure=La cadena indicada procede de una versiΓ³n anterior de Factory Planner y no se ha podido migrar. Esto puede deberse a que es demasiado antigua y ya no se admite, a que los datos estΓ‘n daΓ±ados de alguna forma o a un error de programaciΓ³n. Si crees que esta cadena es vΓ‘lida, ponte en contacto con el desarrollador (Β‘yo!) en el portal del mod. -importer_unpacking_failure=La cadena dada no ha podido ser descomprimida y validada correctamente. Esto puede deberse a que los datos estΓ©n corruptos de alguna manera o a un error de programaciΓ³n. Si crees que esta cadena es vΓ‘lida, ponte en contacto con el desarrollador (Β‘yo!) en el portal del mod. -importer_issue_import_string=Importar una cadena de intercambio de subfactorΓ­as vΓ‘lida -importer_issue_select_subfactory=Seleccione al menos una subfactorΓ­a para importar - - -# Tutorial dialog -tutorial=Tutorial -interface=Interfaz -usage=UtilizaciΓ³n -matrix_solver=Solucionador de matrices -interactive_tutorial_title=Tutorial interactivo -interactive_tutorial_text=La mejor forma de familiarizarte con Factory Planner es explorarlo por ti mismo. Para ello, he incluido una subfΓ‘brica de ejemplo que mostrarΓ‘ algunas de las caracterΓ­sticas mΓ‘s importantes de este mod. Puedes aΓ±adirla haciendo clic en el botΓ³n de abajo. TambiΓ©n puedes activar el [font=default-semibold]Modo Tutorial[/font], que muestra todas las combinaciones de teclado posibles en botones importantes de toda la interfaz. -create_example=Crear ejemplo -create_example_error=La subfΓ‘brica de ejemplo no se puede crear porque no es compatible con el conjunto actual de mods -tutorial_mode=Modo Tutorial -interface_tutorial_title=Interacciones -interface_tutorial_text=La interfaz estΓ‘ configurada para que acciones similares compartan los mismos atajos, lo que facilita la obtenciΓ³n de una sensaciΓ³n intuitiva de cΓ³mo lograr determinados resultados. SΓ³lo tendrΓ‘s que interiorizar estas interacciones bΓ‘sicas y luego utilizarlas en todas partes: -interface_controls=β€’ [font=default-semibold][color=#84CDEC]Click Izquierdo[/color][/font]: Seleccionar/Utilizar\nβ€’ [font=default-semibold][color=#84CDEC]Click Derecho[/color][/font]: Editar\nβ€’ [font=default-semibold][color=#84CDEC]Control + Click Derecho[/color][/font]: Eliminar\nβ€’ [font=default-semibold][color=#84CDEC]Shift + Click Derecho[/color][/font]: Copiar\nβ€’ [font=default-semibold][color=#84CDEC]Shift + Click Izquierdo[/color][/font]: Pegar\nβ€’ [font=default-semibold][color=#84CDEC]Alt + Click Izquierdo[/color][/font]: Poner en cursor -interface_controls_recipebook=\nβ€’ [font=default-semibold][color=#84CDEC]Alt + Click Derecho[/color][/font]: Abrir el libro de planos - -# Usage -tutorial_usage_text=En primer lugar, tendrΓ‘ que crear una subfΓ‘brica. Esta es la estructura bΓ‘sica que contiene alguna parte (en su mayorΓ­a independientes) de su fΓ‘brica. Dale un nombre y listo. TendrΓ‘ algunas entradas (ingredientes), algunas salidas (productos y subproductos), y consumirΓ‘ una cierta cantidad de energΓ­a. TambiΓ©n puedes establecer la escala de tiempo con la que quieres trabajar, o garabatear algunas notas.\n\nLo que te interesa son los productos, asΓ­ que tendrΓ‘s que aΓ±adir los que quieras producir. Para ello, basta con [font=default-semibold][color=#84CDEC]Click Izquierdo[/color][/font] En el [font=default-semibold]+[/font]-botΓ³n, seleccione el producto que desee y especifique la cantidad que debe producirse. TendrΓ‘ un fondo rojo y, al pasar el ratΓ³n por encima, verΓ‘ que en ese momento se estΓ‘ produciendo [font=default-semibold]0[/font] de Γ©l.\n\nPara cambiarlo, debe [font=default-semibold][color=#84CDEC]Pulsar Izquierdo[/color][/font] sobre Γ©l. Si sΓ³lo hay una receta para producir este producto, se aΓ±adirΓ‘ de inmediato. Si no, podrΓ‘s elegir quΓ© receta utilizar. En cualquier caso, aparecerΓ‘ una nueva receta en la planta superior de tu subfΓ‘brica. Puedes cambiar la mΓ‘quina que se utiliza o aΓ±adir algunos mΓ³dulos y beacons.\nAhora, para desglosar aΓΊn mΓ‘s el producto que deseas producir, puedes [font=default-semibold][color=#84CDEC]Hacer clic en Izquierdo[/color][/font] sobre los ingredientes de una receta existente. Esto aΓ±adirΓ‘ de nuevo una receta, cambiando los ingredientes necesarios para toda la subfΓ‘brica. Puedes seguir desglosando tu producto de esta forma hasta llegar a sΓ³lo platos como ingredientes, por ejemplo, o profundizar aΓΊn mΓ‘s y aΓ±adir tambiΓ©n tus recetas de minerΓ­a y fundiciΓ³n. Para los artΓ­culos con una gran cantidad de productos intermedios, su colecciΓ³n de recetas puede llegar a ser bastante desordenada con bastante rapidez. Para hacer frente a esto, puede tener varios pisos con diferentes recetas en cada uno de ellos. Para crear un subpiso, [font=default-semibold][color=#84CDEC]Haga clic en Izquierdo[/color][/font] en el icono de la receta que desea trabajar mΓ‘s. Esto te lleva a un subsuelo (fΓ­jate que el nivel se mostrarΓ‘ como [font=default-semibold]2[/font]) en el que puedes aΓ±adir recetas igual que antes. La gran diferencia es que sΓ³lo tienes que preocuparte de los ingredientes de la receta en la que has hecho clic. Hay algunas caracterΓ­sticas mΓ‘s avanzadas que son ΓΊtiles, pero esto deberΓ­a ayudarle a empezar. Crea la subfΓ‘brica de ejemplo (en la pestaΓ±a [font=default-semibold]Interfaz[/font]) si quieres jugar con una lΓ­nea de producciΓ³n bΓ‘sica. - -# Matrix Solver -tutorial_matrix_solver_text=El solucionador matricial es un mΓ©todo alternativo para actualizar la tabla de producciΓ³n. Por defecto, Factory Planner resuelve la tabla de arriba abajo, mientras que el solucionador matricial resuelve cada lΓ­nea simultΓ‘neamente con un sistema de ecuaciones. El solucionador matricial puede ser complicado de utilizar, pero tambiΓ©n es muy potente. Por ejemplo, maneja el reciclado, el vaciado y los bucles. \n\nCada subfΓ‘brica estΓ‘ configurada para uno de los dos solucionadores, el solucionador secuencial (por defecto) o el solucionador matricial. Para cambiar al solucionador matricial, cambie el interruptor del solucionador en la parte inferior izquierda a "matricial". El solver matricial permanecerΓ‘ activo hasta que se vuelva a cambiar el interruptor, y se volverΓ‘ a ejecutar automΓ‘ticamente cuando se cambien las recetas. \n\nActivando el solver matricial tambiΓ©n se activa la selecciΓ³n de subproductos. Para eliminar un subproducto, haga clic en un subproducto de la receta dentro de una lΓ­nea o en un subproducto de la subfΓ‘brica en la parte superior. Esto mostrarΓ‘ las recetas donde el subproducto es un ingrediente, incluyendo los vacΓ­os. \n\nA veces el solucionador de matrices requiere que ciertos elementos se establezcan como "sin restricciones". Normalmente los elementos se equilibran, lo que significa que se consumen tan rΓ‘pido como se producen. Sin embargo, los "elementos no restringidos" no se equilibran y aparecerΓ‘n como ingredientes finales o subproductos. Si se necesitan elementos no restringidos, se abrirΓ‘ un diΓ‘logo para seleccionarlos. Los elementos no restringidos suelen ser necesarios cuando una subfΓ‘brica contiene un bucle. Para abrir este cuadro de diΓ‘logo, pulse el icono de engranaje a la derecha del conmutador del solucionador. \n\nUn ΓΊltimo requisito es que las recetas deben ser linealmente independientes. Esto significa que sΓ³lo puede haber una soluciΓ³n ΓΊnica para la subfΓ‘brica actual. En otras palabras, el solucionador de matrices no funcionarΓ‘ si hay mΓΊltiples maneras de crear los productos dados. Si la subfΓ‘brica tiene recetas linealmente dependientes, intente eliminar las recetas redundantes hasta que el error desaparezca. Este requisito es vΓ‘lido para todas las subfΓ‘bricas. - -# Item options dialog -options_item_title=Fijar __1__ importe -options_item_text=Fijar un importe especΓ­fico para '__1__' -options_item_amount=Importe -options_item_amount_tt=Especifique la cantidad exacta de este __1__ que desea que esta receta __2__. Esto ajustarΓ‘ el porcentaje de esta lΓ­nea en consecuencia. -options_subfactory_ingredient_amount_tt=Especifique la cantidad exacta de este ingrediente que desea que consuma esta subfactorΓ­a. Esto ajustarΓ‘ sus cantidades de producto en consecuencia. - -# Utility dialog -utilities=Servicios -utility_title_components=Componentes -utility_title_components_tt=Muestra las mΓ‘quinas y mΓ³dulos necesarios para construir la subfΓ‘brica/piso actual. SΓ³lo puede incorporar beacons y mΓ³dulos de beacons cuando su ’Total de beacons’ estΓ‘ ajustado. Redondea las cantidades de cada lΓ­nea individualmente. -utility_title_notes=Notas -components_needed_tt=__1__\n[font=default-bold]__2__[/font] en inventario / [font=default-bold]__3__[/font] necesario\n[font=default-semibold][color=#84CDEC]Click[/color][/font] para hacer a mano este artΓ­culo -no_components_needed=No __1__ necesario -utility_blueprint_tt=Convierte todos los objetos que faltan en tu inventario en una cadena de planos que contenga combinadores constantes. Estos pueden conectarse a un cofre solicitante para que te los entregue. -utility_no_items_necessary=Tu inventario ya contiene todos los elementos necesarios para construir este __1__. -request_items=Solicitar -request_items_tt=Solicita todos los elementos que faltan en tu inventario para construir este __1__. [font=default-semibold]\n[color=#84CDEC]Nota:[/color][/font] Esto utiliza bots de construcciΓ³n (no bots de logΓ­stica) que incluyen bots de robopuerto personal. Es aconsejable desactivar el robopuerto personal antes de solicitar objetos. -cancel_request=Cancelar -request_logistics_not_researched=Hay que investigar la tecnologΓ­a robΓ³tica para hacer posible esta funcionalidad -request_no_character=Necesitas tener un personaje asociado para poder solicitar artΓ­culos -utility_no_character=No se puede hacer a mano sin carΓ‘cter asociado -utility_no_recipes=No hay recetas para fabricar este objeto -utility_no_demand=Demanda de este artΓ­culo ya satisfecha -utility_no_resources=Recursos insuficientes para la artesanΓ­a - -# Preferences -preferences=Preferencias -preferences_support=Apoya el mod en [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]! -preferences_info=Estas preferencias contienen configuraciones que se ajustan a menudo\nen el transcurso de una partida. Para los ajustes generales, ve a \nMenΓΊ principalβ†’Ajustesβ†’Ajustes Modβ†’Factory Planner. -preference_general_title=Preferencias generales -preference_general_title_tt=Algunas preferencias generales que tal vez desee modificar con regularidad -preference_general_ignore_barreling_recipes=Ignorar las recetas de barreling y stacking -preference_general_ignore_barreling_recipes_tt=Permite ignorar el (des)barrado y el (des)apilado al buscar una receta (SΓ³lo para mods compatibles) -preference_general_ignore_recycling_recipes=Ignorar las recetas de reciclaje -preference_general_ignore_recycling_recipes_tt=Permite ignorar las recetas que reciclan un Γ­tem existente (SΓ³lo para mods compatibles) -preference_general_ingredient_satisfaction=SatisfacciΓ³n de los ingredientes -preference_general_ingredient_satisfaction_tt=Indica si las recetas siguientes satisfacen las exigencias de ingredientes de una receta. -preference_general_round_button_numbers=NΓΊmeros redondeados de los botones -preference_general_round_button_numbers_tt=Redondea los nΓΊmeros de los botones de las mΓ‘quinas y los cinturones/planos. -preference_general_attach_subfactory_products=Iconos de productos subfabricados -preference_general_attach_subfactory_products_tt=Muestra iconos de la producciΓ³n de una subfactorΓ­a junto a su nombre. -preference_production_title=Columnas de la tabla de producciΓ³n -preference_production_title_tt=Esto le permite activar algunas columnas adicionales en la tabla de producciΓ³n -preference_production_done_column=Marcar la receta como hecha -preference_production_done_column_tt=AΓ±ade una columna con un botΓ³n que le permite marcar una receta como hecha, que sirve como informaciΓ³n puramente visual para usted y no tiene ningΓΊn efecto sobre la receta en sΓ­. -preference_production_pollution_column=ContaminaciΓ³n -preference_production_pollution_column_tt=AΓ±ade una columna que muestra la contaminaciΓ³n producida por esta receta -preference_production_line_comment_column=Comentarios sobre la receta -preference_production_line_comment_column_tt=AΓ±ade una columna con un campo de texto para que pueda tomar notas sobre recetas individuales. -preference_mb_defaults_title=MΓ³dulo por defecto -preference_mb_defaults_title_tt=Establece el mΓ³dulo por defecto con el que se intentarΓ‘ configurar cada nueva receta -preference_mb_default_machine=Principal -preference_mb_default_machine_tt=El primer mΓ³dulo que intentarΓ‘ insertarse en una nueva receta -preference_mb_default_machine_secondary=Secundaria -preference_mb_default_machine_secondary_tt=Si el primer mΓ³dulo no es compatible con la nueva receta, Γ©ste intentarΓ‘ insertarse en su lugar -preference_mb_default_beacon=MΓ³dulo -preference_mb_default_beacon_tt=El mΓ³dulo por defecto que intentarΓ‘ insertarse en la baliza de cada nueva receta -preference_mb_default_beacon_amount=Importe -preference_mb_default_beacon_amount_tt=Especifica cuΓ‘ntas beacons afectarΓ‘n a cada mΓ‘quina individual para una nueva receta -preference_default_belts_title=CinturΓ³n preferido -preference_default_belts_title_tt=Establece el tipo de banda que se utiliza al calcular la demanda de bandas/carriles o al especificar productos por una cantidad de bandas/carriles. -preference_default_beacons_title=Beacon preferida -preference_default_beacons_title_tt=Establece la baliza que se selecciona por defecto al aΓ±adir una a una receta. -preference_default_fuels_title=Combustible preferido -preference_default_fuels_title_tt=Establece el combustible que se selecciona por defecto al aΓ±adir una mΓ‘quina con una fuente de energΓ­a de quemador. -preference_default_machines_title=MΓ‘quina preferida -preference_default_machines_title_tt=Establece la mΓ‘quina que se selecciona por defecto para cada categorΓ­a al aΓ±adir una nueva receta.\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] cualquier mΓ‘quina para establecerla en cualquier otra categorΓ­a similar. -preference_default_wagons_title=VagΓ³n preferido -preference_default_wagons_title_tt=Establece el tipo de vagΓ³n que se utiliza al calcular la demanda de vagones. - -# Recipe dialog -recipe_instruction=Elige una receta para __1__ ’__2__’ -show=Mostrar -unresearched_recipes=Recetas no investigadas -hidden_recipes=Recetas ocultas -no_recipe_found=No hay recetas que cumplan las condiciones de su filtro - -# Remote interfaces -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Recipe Book - -# Generator -fluid_at_temperature=__1__ en __2__ __3__ - -# Modal dialogs -submit=Enviar -delete=Eliminar -cancel=Cancelar -confirm_dialog_tt=- Pulse __CONTROL__fp_confirm_dialog__ para confirmar - -cancel_dialog_tt=- Pulse __CONTROL__toggle-menu__ para cancelar - -search_button_tt=- Pulse __CONTROL__focus-search__ para centrar el campo de bΓΊsqueda - -close_button_tt=- Pulse __CONTROL__toggle-menu__ para cerrar - -searchfield_tt=Filtrar los resultados utilizando sus nombres en lenguaje natural -searchfield_not_ready_tt=La bΓΊsqueda en lenguaje natural aΓΊn no estΓ‘ lista, por favor espere.\nUtilice la [font=default-semibold]’/fp-restart-translation’[/font] consola para reiniciarlo. -warning_with_icon=[img=fp_sprite_warning_red] __1__ - -# Picker dialog -amount_by=Importe por __1__ -no_item_found=No hay artΓ­culos que coincidan con su tΓ©rmino de bΓΊsqueda -picker_issue_select_item=Seleccione el elemento que desea aΓ±adir -picker_issue_enter_amount=Especificar un importe por nΓΊmero o cinta - -# Matrix dialog -matrix_free_items=Partidas no restringidas -matrix_constrained_items=Elija __1__ sin restricciones __2__. Los artΓ­culos no restringidos pueden \nconvertirse en subproductos o ingredientes, dependiendo \nde la soluciΓ³n del planificador. -matrix_linearly_dependent_recipes=Se detectan recetas dependientes linealmente - -# Subfactory dialog -subfactory_dialog_description=Elija un nombre para la subfactorΓ­a -subfactory_dialog_name=Nombre -subfactory_dialog_name_tt=El nombre de la subfΓ‘brica permite texto enriquecido, que puede aΓ±adirse utilizando los botones siguientes -subfactory_dialog_rich_text=Texto enriquecido -subfactory_dialog_rich_text_tt=Estos selectores se pueden utilizar para aΓ±adir texto enriquecido al nombre de la subfactorΓ­a. Por supuesto, tambiΓ©n puede escribir o pegar cualquier texto enriquecido. -subfactory_dialog_name_empty=El nombre de la subfactorΓ­a no puede estar vacΓ­o - -# Machine dialog -machine_dialog_description=Configure la mΓ‘quina para ’__1__’ -machine_does_not_use_fuel=no utiliza combustible -machine_limit=LΓ­mite -machine_limit_tt=Limita el nΓΊmero de mΓ‘quinas que utilizarΓ‘ esta lΓ­nea. La cantidad real podrΓ­a ser menor si se necesitan menos mΓ‘quinas. -machine_force_limit=LΓ­mite exacto -machine_force_limit_tt=Obliga a que el nΓΊmero de mΓ‘quinas sea exactamente el especificado anteriormente, aunque esto lleve a una sobreproducciΓ³n. SΓ³lo tiene sentido en combinaciΓ³n con un lΓ­mite de mΓ‘quinas. - -# Beacon dialog -beacon_dialog_description_add=AΓ±adir beacons a ’__1__’ -beacon_dialog_description_edit=Configurar los beacons para ’__1__’ -beacon_amount_tt=Especifica cuΓ‘ntos beacons afectarΓ‘n a cada mΓ‘quina. Puede poner un nΓΊmero decimal aquΓ­, que podrΓ­a utilizarse para reflejar el hecho de que algunas de sus mΓ‘quinas podrΓ­an estar cubiertas por una cantidad diferente de balizas. -beacon_total=Total -beacon_total_tt=Especifica la cantidad absoluta de beacons que utiliza para esta receta en su fΓ‘brica real. Esta informaciΓ³n se incluye en los cΓ‘lculos de consumo de energΓ­a. -beacon_selector_tt=Utiliza una herramienta de selecciΓ³n para contar los beacons de tu fΓ‘brica ya construida -beacon_issue_set_amount=Introduzca una cantidad de beacons superior a 0 -beacon_issue_no_modules=Seleccione al menos un mΓ³dulo - -# Title bar -switch_to_compact_view=Cambiar a vista compacta\n- Pulse __CONTROL__fp_toggle_compact_view__ para cambiar - -pause_on_interface=Activar la pausa automΓ‘tica del juego en segundo plano cuando la interfaz principal estΓ‘ abierta (sΓ³lo para un jugador).\n- Pulse __CONTROL__fp_toggle_pause__ para activar la pausa - -close_interface=Cerrar esta interfaz\n- Pulse __CONTROL__fp_toggle_interface__ para cerrar - - -# Subfactory list -action_open_archive_tt=Abrir el archivo subfactory\n__1__ -archive_empty=[font=default-semibold]- El archivo estΓ‘ actualmente vacΓ­o -[/font] -archive_filled=[font=default-semibold]- El archivo contiene actualmente __1__ __2__ -[/font] -action_close_archive_tt=Cerrar el archivo subfactory -action_import_subfactory=Importar subfactorΓ­as utilizando una cadena generada en otro guardado -action_export_subfactory=Exportar subfactorΓ­as a una cadena que pueda compartirse con otros -action_archive_subfactory=Mover la subfactorΓ­a seleccionada al archivo -action_unarchive_subfactory=Volver a sacar del archivo la subfactorΓ­a seleccionada -action_duplicate_subfactory=Duplicar la subfactorΓ­a seleccionada, creando una copia perfecta -action_add_subfactory_by_name=Crear una nueva subfactorΓ­a\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] para elegir un producto de inmediato -action_add_subfactory_by_product=Elige un artΓ­culo para una nueva subfactorΓ­a\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] para darle un nombre primero -action_edit_subfactory=Editar el nombre de la subfΓ‘brica seleccionada -action_trash_subfactory=Eliminar la subfactorΓ­a seleccionada\nSe conservarΓ‘ en el archivo durante __1__ minutos -action_delete_subfactory=Borrar la subfactorΓ­a seleccionada de forma irreversible -subfactory_trashed=\n[font=default-bold]Basura[/font] - automatic deletion in __1__ __plural_for_parameter_1_{1=minute|rest=minutes}__ -subfactory_invalid=\n[font=default-bold]No vΓ‘lido[/font] - needs to be repaired - -# Subfactory info -subfactory_info=InformaciΓ³n sobre la subfactorΓ­a -no_subfactory=no hay subfactorΓ­a seleccionada -subfactory_needs_repair=Esta subfΓ‘brica ha dejado de ser vΓ‘lida porque el conjunto de mods activos ha cambiado. Puedes solucionarlo reparΓ‘ndola o reactivando los mods que faltan. La reparaciΓ³n elimina todo lo que ha dejado de ser vΓ‘lido. -repair_subfactory=ReparaciΓ³n de la subfΓ‘brica -timescale=Calendario -timescale_tt=La escala de tiempo determina la rapidez con la que se producen los artΓ­culos. Por ejemplo, si selecciona [font=default-bold]1m[/font] y aΓ±ade un producto de 400 circuitos verdes, significa que desea producir 400 circuitos [font=default-bold]por minuto[/font]. -mining_productivity=Productividad minera -mining_productivity_tt=La bonificaciΓ³n por productividad minera actual. Por defecto, rastrea tu progreso en la investigaciΓ³n, pero puedes anular el porcentaje manualmente. Para volver al seguimiento automΓ‘tico, borra el campo de texto y confirma. -override=Anular -solver_choice=Solucionador -solver_choice_tt=Elige cuΓ‘l de los solucionadores utilizar para esta subfΓ‘brica. El tradicional funciona recorriendo tus recetas en orden y averiguando sus necesidades. El solucionador matricial, por otro lado, puede tratar con bucles y subproductos, pero a veces necesita una configuraciΓ³n adicional. -solver_choice_traditional=Tradicional -solver_choice_matrix=Matriz -solver_choice_configure=Configurar el solucionador de matrices -subfactory_modset_changes=Tus mods activos cambiaron. -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]Estos mods fueron eliminados:[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]Se han aΓ±adido estos mods:[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]Estos mods fueron actualizados:[/font][/color] -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__ β†’ v__3__ - -# Item boxes -ingredients_to_combinator_tt=Convierte todos los ingredientes de esta subfactorΓ­a en una cadena de planos que contiene combinadores constantes. - -# View state -view_state_tt=__1__\n- Pulse __CONTROL__fp_cycle_production_views__/__CONTROL__fp_reverse_cycle_production_views__ para pasar de una vista a otra - -items_per_timescale=Establece el nΓΊmero en los botones de artΓ­culo a cuΓ‘ntos de ellos serΓ‘n producidos/consumidos por __1__. -belts_or_lanes=Establece el nΓΊmero de botones de los elementos en funciΓ³n de cuΓ‘ntos __1__ de su tipo de cinta preferido se necesitarΓ‘n para transportar los elementos. Para los fluidos, asume que se transportan a [font=default-bold]50 fluidos por barril[/font]\nConfigurado para utilizar __2__ [font=default-bold]__3__[/font]. -wagons_per_timescale=Establece el nΓΊmero en los botones de Γ­tems a cuΓ‘ntos vagones de carga o fluidos serΓ‘n llenados por ellos por __1__.\nConfigurado para utilizar __2__ [font=default-bold]__3__[/font] o __4__ [font=default-bold]__5__[/font]. -items_per_second_per_machine=Establece el nΓΊmero de botones de artΓ­culo a cuΓ‘ntos de ellos por segundo producirΓ‘/consumirΓ‘ una sola mΓ‘quina. Esto ayuda a estimar cuΓ‘ntos insertadores serΓ‘n necesarios. - -# Production box -refresh_production=Actualice el cuadro de producciΓ³n\n- Pulse __CONTROL__fp_refresh_production__ refrescar - -production=ProducciΓ³n -level=Nivel -floor_up_tt=Subir un nivel -floor_top_tt=Ir a la planta superior -fold_out_subfloors_tt=Subsuelos desplegables -show_floor_items_tt=Sustituya los totales de los subpisos anteriores por los totales del piso actual. Solo aplicable a subsuelos, no al piso superior. -utility_dialog_tt=Abrir el diΓ‘logo de utilidades -production_instruction_subfactory=AΓ±ada una subfΓ‘brica haciendo clic en el botΓ³n verde ’+’ de la parte superior izquierda. -production_instruction_product=AΓ±ada un producto haciendo clic en el botΓ³n gris ’+’ del cuadro de productos de arriba. -production_instruction_recipe=AΓ±ada una receta haciendo clic con el botΓ³n izquierdo del ratΓ³n sobre el producto en el cuadro de productos de arriba - -# Production table -column_done_tt=Marque la receta como hecha para su propio beneficio visual -column_percentage_tt=Este porcentaje determina quΓ© parte de la demanda de los productos que produce esta receta debe ser satisfecha realmente por esta receta. El cΓ‘lculo sΓ³lo se actualiza despuΓ©s de confirmar los cambios pulsando [font=default-semibold][color=#84CDEC]Enter[/color][/font]. -column_comment=Comentario -recipe_inactive=receta inactiva -recipe_subfloor_attached=subsuelo fijado -recipe_consumes_byproduct=consume subproducto -subfloor_machine_count=__1__ __2__ en uso en este subsuelo -machine_limit_force=LΓ­mite exacto fijado [__1__] -machine_limit_enforced=LΓ­mite impuesto [__1__] -machine_limit_set=LΓ­mite fijado [__1__] -add_machine_module=AΓ±adir un mΓ³dulo -add_beacon=AΓ±adir una beacon -in_total=__1__ en total -priority_product=Producto prioritario -raw_ore=Mineral en bruto - -# Compact frame -switch_to_main_view=Cambiar a la vista principal\n- Pulse __CONTROL__fp_toggle_compact_view__ para cambiar - - -# Clipboard -copied_into_clipboard=__1__ copiado -pasted_from_clipboard=__1__ pegado -clipboard_empty=Su portapapeles estΓ‘ vacΓ­o -clipboard_incompatible_class=No se puede pegar __1__ en __2__ -clipboard_incompatible=El __1__ pegado es incompatible -clipboard_already_exists=El __1__ pegado ya existe -clipboard_no_empty_slots=No hay ranuras vacΓ­as -clipboard_recipe_irrelevant=LΓ­nea pegada irrelevante para este piso - -# Tutorial Mode -tut_action_line=\n[font=default-semibold][color=#84CDEC]__1__[/color][/font] para __2__ -tut_open_in_recipebook=\n[font=default-semibold][color=#84CDEC]Alt + Click Derecho[/color][/font] para abrir el libro de planos - -tut_left=Clicl Izquierdo -tut_right=Click Derecho -tut_shift=Shift -tut_alt=Alt -tut_control=Control - -tut_select=seleccionar -tut_edit=editar -tut_delete=eliminar -tut_copy=copiar -tut_paste=pegar -tut_add_recipe=aΓ±adir receta -tut_move_left=mover a la izquierda -tut_move_right=mover a la derecha -tut_open_subfloor=subsuelo abierto -tut_toggle=alternar -tut_set_limit=establecer un lΓ­mite -tut_reset_to_default=restablecer valores predeterminados -tut_put_into_cursor=poner en cursor -tut_add_recipe_to_end=aΓ±adir receta -tut_add_recipe_below=aΓ±ada la receta a continuaciΓ³n -tut_specify_amount=especificar importe -tut_prioritize=priorizar - -# Effects tooltip -effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=Consumo de energΓ­a -speed=Velocidad -productivity=Productividad -pollution=ContaminaciΓ³n -base_prod=Productividad base -mining_prod=Productividad minera -effect_maxed=(al mΓ‘ximo) - -# Messages -error_no_relevant_recipe=Ninguna receta existente produce este artΓ­culo -error_no_enabled_recipe=No hay receta habilitada Producir este artΓ­culo (Habilitar en preferencias β†’) -error_no_compatible_machine=Ninguna mΓ‘quina existente puede crear esta receta -error_no_subfloor_on_byproduct_recipes=Las recetas que consumen subproductos no pueden tener subsuelo -error_no_new_subfloors_in_archive=No se pueden aΓ±adir subsuelos a subfactorΓ­as archivadas -error_list_item_cant_be_shifted=Este __1__ no se puede mover __2__ -error_recipebook_version_incompatible=La versiΓ³n del libro de recetas no es compatible;Intente actualizar ambas modificaciones -error_recipebook_lookup_failed=El hecho de hacer clic __1__ no se pudo encontrar en el libro de recetas -error_linearly_dependant_recipes=Solucionador de matriz inactivo;AsegΓΊrese de que solo haya una receta por producto -error_recipe_wrong_floor=__1__ Las recetas solo se pueden agregar al nivel superior de la subfactorΓ­a -warning_no_matrix_configuration_needed=El solucionador de matriz no necesita configuraciΓ³n adicional -warning_recipe_disabled=Esta receta aΓΊn no se investiga, por lo que no puede producirla actualmente -warning_module_not_compatible=Su __1__ preferido no es compatible con esta mΓ‘quina -warning_no_prioritizing_single_product=Las recetas con un solo producto relevante no se pueden priorizar -hint_tutorial=Si es nuevo en el planificador de fΓ‘brica, considere echar un vistazo al tutorial ⟢ -hint_byproducts_removed=Deshabilitar el solucionador de matriz elimina todas las recetas de subproductos - -# Units -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=P -unit_celsius=Β°C -unit_second=s -unit_minute=m -unit_hour=h -second=segundo -minute=minuto -hour=hora - -# General -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] - -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) - -selected=seleccionada -preferred=privilegiada -satisfied=satisfecha -valid=vΓ‘lida -invalid=invΓ‘lida -increased=aumentΓ³ -decreased=disminuida -capped=tapado - -on=On -off=Off -left=izquierda -right=correcta -up=hasta -down=abajo -top=superior -bottom=inferior - -add=Agregar -new=Nuevo -edit=Editar -choose=Escoger -produce=producir -consume=consumir - -none=Ninguna -crafting_time=Tiempo de elaboraciΓ³n -amount=Monto - -factory=FΓ‘brica -archive=Archivo - -toggle_interface=FP -toggle_interface_tt=Alternar la interfaz de Factory Planner - -energy_consumption=Consumo de energΓ­a -effectivity=Efectividad -module_slots=Ranuras del mΓ³dulo -fuel_value=Valor del combustible -emissions_multiplier=Multiplicador de emisiones -throughput=Rendimiento -crafting_speed=Velocidad de elaboraciΓ³n -storage=Almacenamiento - -combinator=Combinador -put_into_cursor_failed=__1__ no se puede poner en el cursor -blueprint_no_combinator_prototype=Prototipo de combinador constante no encontrado -impossible_to_blueprint_fluid=Los fluidos no se pueden planificar como combinador - -move_row_tt=Mover esto __1__ __2__\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] para moverlo al __3__ -attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -shift_to_paste=[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] pegar - -# Locale prefixes: s = singular; p = plural; l = lowercase; u = uppercase -pl_subfactory=__plural_for_parameter_1_{1=subfactory|rest=subfactories}__ -pu_subfactory=__plural_for_parameter_1_{1=Subfactory|rest=Subfactories}__ -pl_line=__plural_for_parameter_1_{1=line|rest=lines}__ -pu_line=__plural_for_parameter_1_{1=Line|rest=Lines}__ -pl_floor=__plural_for_parameter_1_{1=floor|rest=floors}__ -pu_floor=__plural_for_parameter_1_{1=Floor|rest=Floors}__ -pl_item=__plural_for_parameter_1_{1=item|rest=items}__ -pu_item=__plural_for_parameter_1_{1=Item|rest=Items}__ -pl_fluid=__plural_for_parameter_1_{1=fluid|rest=fluids}__ -pu_fluid=__plural_for_parameter_1_{1=Fluid|rest=Fluids}__ -pl_product=__plural_for_parameter_1_{1=product|rest=products}__ -pu_product=__plural_for_parameter_1_{1=Product|rest=Products}__ -pl_byproduct=__plural_for_parameter_1_{1=byproduct|rest=byproducts}__ -pu_byproduct=__plural_for_parameter_1_{1=Byproduct|rest=Byproducts}__ -pl_ingredient=__plural_for_parameter_1_{1=ingredient|rest=ingredients}__ -pu_ingredient=__plural_for_parameter_1_{1=Ingredient|rest=Ingredients}__ -pl_fuel=__plural_for_parameter_1_{1=fuel|rest=fuels}__ -pu_fuel=__plural_for_parameter_1_{1=Fuel|rest=Fuels}__ -pl_recipe=__plural_for_parameter_1_{1=recipe|rest=recipes}__ -pu_recipe=__plural_for_parameter_1_{1=Recipe|rest=Recipes}__ -pl_machine=__plural_for_parameter_1_{1=machine|rest=machines}__ -pu_machine=__plural_for_parameter_1_{1=Machine|rest=Machines}__ -pl_module=__plural_for_parameter_1_{1=module|rest=modules}__ -pu_module=__plural_for_parameter_1_{1=Module|rest=Modules}__ -pl_beacon=__plural_for_parameter_1_{1=beacon|rest=beacons}__ -pu_beacon=__plural_for_parameter_1_{1=Beacon|rest=Beacons}__ -pl_belt=__plural_for_parameter_1_{1=belt|rest=belts}__ -pu_belt=__plural_for_parameter_1_{1=Belt|rest=Belts}__ -pl_lane=__plural_for_parameter_1_{1=lane|rest=lanes}__ -pu_lane=__plural_for_parameter_1_{1=Lane|rest=Lanes}__ -pl_wagon=__plural_for_parameter_1_{1=wagon|rest=wagons}__ -pu_wagon=__plural_for_parameter_1_{1=Wagon|rest=Wagons}__ -pl_stack=__plural_for_parameter_1_{1=stack|rest=stacks}__ - -l_fluid=lΓ­quido -u_power=Poder diff --git a/factoryplanner_1.1.72/locale/ko/config.cfg b/factoryplanner_1.1.72/locale/ko/config.cfg deleted file mode 100644 index ef5fe521..00000000 --- a/factoryplanner_1.1.72/locale/ko/config.cfg +++ /dev/null @@ -1,502 +0,0 @@ -[mod-name] -factoryplanner=νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆ(Factory Planner) - -[mod-description] -factoryplanner=이 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 각 쑰립 라인을 κ΅¬μ„±ν•˜λŠ” μ œμž‘λ²•κ³Ό 기계λ₯Ό μ§€μ •ν•˜μ—¬ 생산을 미리 κ³„νšν•  수 μžˆμŠ΅λ‹ˆλ‹€. λΉ λ₯΄κ³  직관적인 κ°•λ ₯ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λ―€λ‘œ μ‹€μ œ 곡μž₯ ꡬ좕에 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€. - - -[controls] -fp_toggle_interface=μ—΄κΈ°/λ‹«κΈ° -fp_toggle_compact_view=μΆ•μ†Œ 보기 μ „ν™˜ -fp_toggle_pause=μΌμ‹œ 쀑지 μ „ν™˜ -fp_floor_up=ν•œ μΈ΅ μœ„λ‘œ 이동 -fp_refresh_production=생산 ν…Œμ΄λΈ” μƒˆλ‘œκ³ μΉ¨ -fp_cycle_production_views=생산 보기 μˆœν™˜ -fp_confirm_dialog=확인 λŒ€ν™”μƒμž -fp_focus_searchfield=검색 ν•„λ“œμ— 포컀슀 - -[controls-description] -fp_toggle_interface=메인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ „ν™˜ν•©λ‹ˆλ‹€. -fp_toggle_compact_view=μΈν„°νŽ˜μ΄μŠ€μ˜ 일반 보기와 μΆ•μ†Œ 보기 κ°„ μ „ν™˜ -fp_toggle_pause=μΈν„°νŽ˜μ΄μŠ€κ°€ μ—΄λ € μžˆμ„ λ•Œ κ²Œμž„ μΌμ‹œ 쀑지λ₯Ό μ „ν™˜ν•©λ‹ˆλ‹€. -fp_floor_up=ν˜„μž¬ 측의 μƒμœ„ 측으둜 λ³€κ²½ -fp_refresh_production=ν˜„μž¬ 생산 ν…Œμ΄λΈ”μ„ μƒˆλ‘œ κ³ μΉ©λ‹ˆλ‹€ -fp_cycle_production_views=생산 ν…Œμ΄λΈ”μ˜ λ‹€μ–‘ν•œ 보기 κ°„μ˜ μˆœν™˜ -fp_confirm_dialog=ν…μŠ€νŠΈ ν•„λ“œμ— ν¬μ»€μŠ€κ°€ μ—†λŠ” κ²½μš°μ—λ„ λͺ¨λ“  λͺ¨λ‹¬ λŒ€ν™”μƒμžμ—μ„œ 확인을 λˆ„λ¦…λ‹ˆλ‹€. -fp_focus_searchfield=κ°€λŠ₯ν•œ 경우 μƒμ‚°ν’ˆ μ„ νƒκΈ°μ˜ 검색 ν•„λ“œμ— μ»€μ„œλ₯Ό λ†“μŠ΅λ‹ˆλ‹€. - - -[mod-setting-name] -fp_display_gui_button=μ—΄κΈ°/λ‹«κΈ° λ²„νŠΌ ν‘œμ‹œ [img=info] -fp_products_per_row=μΈν„°νŽ˜μ΄μŠ€ 폭 [img=info] -fp_subfactory_list_rows=μΈν„°νŽ˜μ΄μŠ€ 높이 [img=info] -fp_default_timescale=κΈ°λ³Έ μ‹œκ°„ 척도 [img=info] -fp_view_belts_or_lanes=벨트 λ˜λŠ” 레인 [img=info] -fp_prefer_product_picker=μƒμ‚°ν’ˆ 선택기 μ„ ν˜Έ [img=info] -fp_prefer_matrix_solver=ν–‰λ ¬ 솔버 μ„ ν˜Έ [img=info] - -[mod-setting-description] -fp_display_gui_button=ν™”λ©΄ μ™Όμͺ½ 상단에 λ²„νŠΌμ„ ν‘œμ‹œν•©λ‹ˆλ‹€. 메인 μΈν„°νŽ˜μ΄μŠ€κ°€ 열리고 λ‹«νž™λ‹ˆλ‹€. -fp_products_per_row=ν–‰λ‹Ή ν‘œμ‹œλ˜λŠ” μ΅œμƒμœ„ μƒμ‚°ν’ˆ 수λ₯Ό μ„ νƒν•˜μ—¬ 메인 μΈν„°νŽ˜μ΄μŠ€ λ„ˆλΉ„λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. -fp_subfactory_list_rows=총 λͺ‡ 개의 ν•˜μœ„ 곡μž₯ 이름이 ν‘œμ‹œλ˜λŠ”μ§€ μ„ νƒν•˜μ—¬ μ£Ό μΈν„°νŽ˜μ΄μŠ€ 높이λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. -fp_default_timescale=μƒˆ ν•˜μœ„ 곡μž₯을 생성할 λ•Œμ˜ μ‹œκ°„ 척도λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. -fp_view_belts_or_lanes=μ•„μ΄ν…œ μ²˜λ¦¬λŸ‰μ„ κ°œλ³„ 레인 λ˜λŠ” 전체 벨트둜 κ°„μ£Όν• μ§€ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. -fp_prefer_product_picker=μƒˆλ‘œμš΄ ν•˜μœ„ 곡μž₯을 μΆ”κ°€ν•˜μ—¬ μ‹œμž‘ν•  λ•Œ μƒμ‚°ν’ˆμ„ 선택할지 ν•˜μœ„ 곡μž₯ 이름을 선택할지 κ²°μ •ν•©λ‹ˆλ‹€. -fp_prefer_matrix_solver=μƒˆλ‘œμš΄ ν•˜μœ„ μš”μ†Œκ°€ κΈ°μ‘΄ 솔버 λŒ€μ‹  ν–‰λ ¬ 솔버λ₯Ό ν™œμ„±ν™”ν•΄μ•Ό ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. - -[string-mod-setting] -fp_default_timescale-one_second=1초 -fp_default_timescale-one_minute=1λΆ„ -fp_default_timescale-one_hour=1μ‹œκ°„ -fp_view_belts_or_lanes-belts=벨트 -fp_view_belts_or_lanes-lanes=레인 - - -[shortcut-name] -fp_open_interface=νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆ μ—΄κΈ° - -[item-name] -fp_beacon_selector=μ‹ ν˜ΈκΈ° 선택기 - -[command-help] -fp_reset_prototypes=κΈ°λ³Έ κ²Œμž„ λ°μ΄ν„°μ—μ„œ λ‹€μ–‘ν•œ ν”„λ‘œν† νƒ€μž…μ„ μž¬κ΅¬μ„±ν•©λ‹ˆλ‹€. μ‚¬μš©ν•  ν•„μš”κ°€ μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€. - - -[fp] - -import=κ°€μ Έμ˜€κΈ° -export=내보내기 -validity=μœ νš¨μ„± -location=μœ„μΉ˜ -import_instruction_1=[font=default-bold]곡μž₯ κ΅ν™˜ λ¬Έμžμ—΄μ„ λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€[/font] -import_instruction_2=κ°€μ Έμ˜¬ ν•˜μœ„ 재료λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. -export_instruction=내보낼 ν•˜μœ„ 재료λ₯Ό μ„ νƒν•©λ‹ˆλ‹€ [img=info] -export_instruction_tt=ν•˜μœ„ μš”μ†Œλ₯Ό λ‹€λ₯Έ μ‚¬λžŒκ³Ό κ³΅μœ ν•˜κ±°λ‚˜ λ‹€λ₯Έ 세계 쀑 ν•˜λ‚˜λ‘œ κ°€μ Έμ˜€λŠ” 데 μ‚¬μš©λ˜λŠ” [font=default-bold]곡μž₯ κ΅ν™˜ λ¬Έμžμ—΄[/font]이 μƒμ„±λ©λ‹ˆλ‹€. 섀계도면 λ¬Έμžμ—΄μ€ μƒμ„±λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€! -import_button_tooltip=λ¬Έμžμ—΄ κ°€μ Έμ˜€κΈ° -export_button_tooltip=곡μž₯ κ΅ν™˜ λ¬Έμžμ—΄ 생성 -importer_decoding_failure=μ§€μ •λœ λ¬Έμžμ—΄μ„ μ œλŒ€λ‘œ λ””μ½”λ”©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이것은 κΈ°ν˜•μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. ν•˜μœ„ μš”μ†Œλ₯Ό λ‹€μ‹œ 내보내고 전체 λ¬Έμžμ—΄μ„ λ³΅μ‚¬ν•˜μ‹­μ‹œμ˜€. -importer_migration_failure=μ§€μ •λœ λ¬Έμžμ—΄μ΄ 이전 λ²„μ „μ˜ νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆμ—μ„œ κ°€μ Έμ˜¨ κ²ƒμ΄λ―€λ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” 데이터가 λ„ˆλ¬΄ μ˜€λž˜λ˜μ–΄ 더 이상 μ§€μ›λ˜μ§€ μ•Šκ±°λ‚˜, 데이터가 μ†μƒλ˜μ—ˆκ±°λ‚˜, ν”„λ‘œκ·Έλž˜λ° 였λ₯˜λ‘œ 인해 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμžμ—΄μ΄ μœ νš¨ν•˜λ‹€κ³  μƒκ°λ˜λ©΄ λͺ¨λ“œ ν¬ν„Έμ˜ 개발자(Therenas)μ—κ²Œ λ¬Έμ˜ν•˜μ‹­μ‹œμ˜€. -importer_unpacking_failure=μ§€μ •λœ λ¬Έμžμ—΄μ„ μ œλŒ€λ‘œ μ••μΆ• ν•΄μ œν•˜κ³  μœ νš¨μ„±μ„ 검사할 수 μ—†μŠ΅λ‹ˆλ‹€. 데이터가 μ–΄λ–€ μ‹μœΌλ‘œλ“  μ†μƒλ˜κ±°λ‚˜ ν”„λ‘œκ·Έλž˜λ° 였λ₯˜λ‘œ 인해 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ¬Έμžμ—΄μ΄ μœ νš¨ν•˜λ‹€κ³  μƒκ°λ˜λ©΄ λͺ¨λ“œ ν¬ν„Έμ˜ 개발자(Therenas)μ—κ²Œ λ¬Έμ˜ν•˜μ‹­μ‹œμ˜€. -importer_issue_import_string=μœ νš¨ν•œ ν•˜μœ„ 곡μž₯ κ΅ν™˜ λ¬Έμžμ—΄μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€. -importer_issue_select_subfactory=κ°€μ Έμ˜¬ ν•˜μœ„ 곡μž₯ ν•˜λ‚˜ 이상 선택 - - - -tutorial=νŠœν† λ¦¬μ–Ό -interface=μΈν„°νŽ˜μ΄μŠ€ -usage=μ‚¬μš© -matrix_solver=ν–‰λ ¬ 솔버 -interactive_tutorial_title=λŒ€ν™”ν˜• νŠœν† λ¦¬μ–Ό -interactive_tutorial_text=νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆμ— μ΅μˆ™ν•΄μ§€λŠ” κ°€μž₯ 쒋은 방법은 λ°”λ‘œ λ“€μ–΄κ°€μ„œ 직접 μ‚΄νŽ΄λ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄, μ €λŠ” 이 λͺ¨λ“œμ˜ κ°€μž₯ μ€‘μš”ν•œ κΈ°λŠ₯ 쀑 일뢀λ₯Ό 보여쀄 수 μžˆλŠ” μ˜ˆμ‹œ ν•˜μœ„ 곡μž₯을 ν¬ν•¨μ‹œμΌ°μŠ΅λ‹ˆλ‹€. μ•„λž˜ λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μΈν„°νŽ˜μ΄μŠ€ 전체에 걸쳐 μ€‘μš”ν•œ λ²„νŠΌμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“  ν‚€λ³΄λ“œ 쑰합을 λ³΄μ—¬μ£ΌλŠ” [font=default-semibold]νŠœν† λ¦¬μ–Ό λͺ¨λ“œ[/font]λ₯Ό ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -create_example=예제 생성 -create_example_error=ν˜„μž¬ λͺ¨λ“œ μ§‘ν•©κ³Ό ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ―€λ‘œ 예제 ν•˜μœ„ 곡μž₯을 λ§Œλ“€ 수 μ—†μŠ΅λ‹ˆλ‹€. -tutorial_mode=νŠœν† λ¦¬μ–Ό λͺ¨λ“œ -interface_tutorial_title=μƒν˜Έμž‘μš© -interface_tutorial_text=μΈν„°νŽ˜μ΄μŠ€λŠ” μœ μ‚¬ν•œ μž‘μ—…μ΄ λ™μΌν•œ λ°”λ‘œ κ°€κΈ°λ₯Ό κ³΅μœ ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ νŠΉμ • κ²°κ³Όλ₯Ό μ–»λŠ” 방법에 λŒ€ν•œ 직관적인 λŠλ‚Œμ„ μ‰½κ²Œ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°λ³Έ μƒν˜Έ μž‘μš©μ„ μ²΄λ“ν•œ λ‹€μŒ μ–΄λ””μ—μ„œλ‚˜ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. -interface_controls=β€’ [font=default-semibold][color=#84CDEC]쒌클릭[/color][/font]: 선택/μ‚¬μš©\nβ€’ [font=default-semibold][color=#84CDEC]우클릭[/color][/font]: νŽΈμ§‘\nβ€’ [font=default-semibold][color=#84CDEC]Ctrl + 우클릭[/color][/font]: μ‚­μ œ\nβ€’ [font=default-semibold][color=#84CDEC]Shift + 우클릭[/color][/font]: 볡사\nβ€’ [font=default-semibold][color=#84CDEC]Shift + 쒌클릭[/color][/font]: λΆ™μ—¬λ„£κΈ° -interface_controls_recipebook=\nβ€’ [font=default-semibold][color=#84CDEC]Alt + 우클릭[/color][/font]: λ ˆμ‹œν”Ό λΆμ—μ„œ μ—΄κΈ° - - -tutorial_usage_text=λ¨Όμ € ν•˜μœ„ 곡μž₯을 λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이것은 곡μž₯의 일뢀(λŒ€λΆ€λΆ„ 독립적인) 뢀뢄을 ν¬ν•¨ν•˜λŠ” κΈ°λ³Έ κ΅¬μ‘°μž…λ‹ˆλ‹€. 이름을 μ§€μ •ν•œ ν›„ μ‹œμž‘ν•˜μ„Έμš”. 일뢀 μž…λ ₯(재료)κ³Ό 일뢀 좜λ ₯(μƒμ‚°ν’ˆ 및 λΆ€μ‚°λ¬Ό)이 있으며 μΌμ •λŸ‰μ˜ μ—λ„ˆμ§€λ₯Ό μ†ŒλΉ„ν•©λ‹ˆλ‹€. λ˜ν•œ μž‘μ—…ν•˜λ €λŠ” μ‹œκ°„ 척도λ₯Ό μ„€μ •ν•˜κ±°λ‚˜ 일뢀 λ…ΈνŠΈλ₯Ό μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.\n\n당신이 관심 μžˆλŠ” 것은 μƒμ‚°ν’ˆμ΄κΈ° λ•Œλ¬Έμ— μƒμ‚°ν•˜κ³ μž ν•˜λŠ” μƒμ‚°ν’ˆμ„ μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. [font=default-semibold]+[/font]-λ²„νŠΌμ„ [font=default-semibold][color=#84CDEC]마우슀 μ™Όμͺ½ λ²„νŠΌ[/color][/font]으둜 λˆ„λ₯΄λ©΄ μ›ν•˜λŠ” μƒμ‚°ν’ˆμ„ μ„ νƒν•˜κ³  μƒμ‚°λŸ‰μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그것은 빨간색 배경이 κ°€μ§€λ©°, ν™”λ©΄ μœ„λ₯Ό 가리킀면 ν˜„μž¬ [font=default-semibold]0[/font]κ°œκ°€ μƒμ‚°λ˜κ³  μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.\n\n이λ₯Ό λ³€κ²½ν•˜λ €λ©΄ [font=default-semibold][color=#84CDEC]마우슀 μ™Όμͺ½ λ²„νŠΌ[/color][/font]으둜 ν΄λ¦­ν•©λ‹ˆλ‹€. 이 μ œν’ˆμ„ 생산할 수 μžˆλŠ” μ œμž‘λ²•μ΄ ν•˜λ‚˜λ°–μ— μ—†λ‹€λ©΄ λ°”λ‘œ 좔가될 κ²ƒμž…λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ μ‚¬μš©ν•  μ œμž‘λ²•μ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄λŠ μͺ½μ΄λ“ , μƒˆλ‘œμš΄ μ œμž‘λ²•μ΄ λ‹Ήμ‹ μ˜ ν•˜μœ„ 곡μž₯ κΌ­λŒ€κΈ° 측에 λ‚˜νƒ€λ‚  κ²ƒμž…λ‹ˆλ‹€. μ‚¬μš© 쀑인 기계λ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ 일뢀 λͺ¨λ“ˆκ³Ό μ‹ ν˜ΈκΈ°λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.\n\n이제 μƒμ‚°ν•˜κ³ μž ν•˜λŠ” μƒμ‚°ν’ˆμ„ 더 μ„ΈλΆ„ν™”ν•˜λ €λ©΄ κΈ°μ‘΄ μ œμž‘λ²•μ˜ 재료λ₯Ό [font=default-semibold][color=#84CDEC]쒌클릭[/color][/font]ν•˜λ©΄ λ©λ‹ˆλ‹€. 이것은 전체 ν•˜μœ„ 곡μž₯에 ν•„μš”ν•œ 재료λ₯Ό λ°”κΎΈλ©΄μ„œ λ‹€μ‹œ ν•œλ²ˆ μ œμž‘λ²•μ„ μΆ”κ°€ν•  κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μž¬λ£Œλ‘œμ„œ νŒμ— 도착할 λ•ŒκΉŒμ§€ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ μƒμ‚°ν’ˆμ„ 계속 λΆ„ν•΄ν•˜κ±°λ‚˜, 훨씬 더 깊이 λ“€μ–΄κ°€ 채꡴ 및 제련 μ œμž‘λ²•μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 무엇이 λ‹Ήμ‹ κ³Ό λ‹Ήμ‹ μ˜ κΈ°μ‘΄ 곡μž₯에 κ°€μž₯ νŽΈλ¦¬ν•œμ§€ μƒκ΄€μ—†μŠ΅λ‹ˆλ‹€.\n\n쀑간 μƒμ‚°ν’ˆμ΄ λ§Žμ€ μ•„μ΄ν…œμ˜ 경우, μ—¬λŸ¬λΆ„μ˜ μ œμž‘λ²• μ»¬λ ‰μ…˜μ€ κ½€ 빨리 엉망이 될 수 μžˆμŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μ—¬λŸ¬λΆ„μ€ 각 μΈ΅λ§ˆλ‹€ λ‹€λ₯Έ μ œμž‘λ²•μ„ κ°€μ§„ μ—¬λŸ¬ 측을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ†Œμœ„ ν•˜μœ„ 측을 λ§Œλ“€λ €λ©΄ μΆ”κ°€ μž‘μ—…μ„ μ›ν•˜λŠ” μ œμž‘λ²•μ˜ μ œμž‘λ²• μ•„μ΄μ½˜μ—μ„œ [font=default-semibold][color=#84CDEC]쒌클릭[/color][/font]ν•˜λ©΄ λ©λ‹ˆλ‹€. 이전과 λ§ˆμ°¬κ°€μ§€λ‘œ μ œμž‘λ²•μ„ μΆ”κ°€ν•  수 μžˆλŠ” ν•˜μœ„ μΈ΅(단계가 [font=default-semibold]2[/font]둜 ν‘œμ‹œλ¨)이 ν‘œμ‹œλ©λ‹ˆλ‹€. κ°€μž₯ 큰 차이점은 ν΄λ¦­ν–ˆλ˜ μ œμž‘λ²•μ˜ 재료만 μ‹ κ²½μ“°λ©΄ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.\n\n그리고 그것이 κΈ°λ³Έμž…λ‹ˆλ‹€! μœ μš©ν•œ κ³ κΈ‰ κΈ°λŠ₯이 λͺ‡ κ°€μ§€ 더 μžˆμ§€λ§Œ 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ 생산 라인을 κ°€μ§€κ³  놀렀면 예제 ν•˜μœ„ 곡μž₯([font=default-semibold]μΈν„°νŽ˜μ΄μŠ€[/font] νƒ­)을 λ§Œλ“­λ‹ˆλ‹€. - - -tutorial_matrix_solver_text=ν–‰λ ¬ μ†”λ²„λŠ” 생산 ν‘œλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” λŒ€μ²΄ λ°©λ²•μž…λ‹ˆλ‹€. 기본적으둜 νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆλŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ ν…Œμ΄λΈ”μ„ ν‘ΈλŠ” 반면, ν–‰λ ¬ μ†”λ²„λŠ” 방정식 μ‹œμŠ€ν…œμœΌλ‘œ λͺ¨λ“  라인을 λ™μ‹œμ— ν•΄κ²°ν•©λ‹ˆλ‹€. ν–‰λ ¬ μ†”λ²„λŠ” μ‚¬μš©ν•˜κΈ° κΉŒλ‹€λ‘œμšΈ 수 μžˆμ§€λ§Œ 맀우 κ°•λ ₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μž¬ν™œμš©, λΉ„μš°κΈ°, 루프 등을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. \n\n각 ν•˜μœ„ 곡μž₯은 순차 솔버(κΈ°λ³Έκ°’) λ˜λŠ” ν–‰λ ¬ 솔버 쀑 ν•˜λ‚˜λ‘œ μ„€μ •λ©λ‹ˆλ‹€. ν–‰λ ¬ μ†”λ²„λ‘œ μ „ν™˜ν•˜λ €λ©΄ "ν–‰λ ¬ 솔버" λ²„νŠΌμ„ λˆ„λ¦…λ‹ˆλ‹€. ν–‰λ ¬ μ†”λ²„λŠ” λ²„νŠΌμ„ λ‹€μ‹œ λˆ„λ₯Ό λ•ŒκΉŒμ§€ ν™œμ„±ν™”λœ μƒνƒœλ‘œ μœ μ§€λ˜λ©°, μ œμž‘λ²•μ΄ λ³€κ²½λ˜λ©΄ μžλ™μœΌλ‘œ λ‹€μ‹œ μ‹€ν–‰λ©λ‹ˆλ‹€. \n\nν–‰λ ¬ 솔버λ₯Ό ν™œμ„±ν™”ν•˜λ©΄ λΆ€μ‚°λ¬Ό 선택도 κ°€λŠ₯ν•©λ‹ˆλ‹€. 뢀산물을 μ œκ±°ν•˜λ €λ©΄ 라인 λ‚΄μ˜ μ œμž‘λ²• λΆ€μ‚°λ¬Ό λ˜λŠ” μƒλ‹¨μ˜ ν•˜μœ„ 곡μž₯ 뢀산물을 ν΄λ¦­ν•˜μ‹­μ‹œμ˜€. 이것은 빈 곡간을 ν¬ν•¨ν•˜μ—¬ 뢀산물이 재료인 μ œμž‘λ²•μ„ 보여쀄 κ²ƒμž…λ‹ˆλ‹€. \n\nλ•Œλ•Œλ‘œ ν–‰λ ¬ μ†”λ²„λŠ” νŠΉμ • μ•„μ΄ν…œμ„ "곡짜"둜 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. 보톡 μ•„μ΄ν…œλ“€μ€ κ· ν˜•μ΄ μž‘ν˜€μžˆλŠ”λ°, 이것은 μƒμ‚°λ˜λŠ” 만큼 λΉ λ₯΄κ²Œ μ†ŒλΉ„λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ '곡짜 μ•„μ΄ν…œ'은 κ· ν˜•μ„ 이루지 λͺ»ν•˜κ³  μ΅œμ’… μž¬λ£Œλ‚˜ λΆ€μ‚°λ¬Όλ‘œ λ“±μž₯ν•  κ²ƒμž…λ‹ˆλ‹€. 빈 μ•„μ΄ν…œμ΄ ν•„μš”ν•œ 경우 빈 μ•„μ΄ν…œμ„ 선택할 수 μžˆλŠ” λŒ€ν™” μƒμžκ°€ μ—΄λ¦½λ‹ˆλ‹€. ν•˜μœ„ 곡μž₯에 루프가 ν¬ν•¨λ˜μ–΄ μžˆμ„ λ•Œ μ’…μ’… 곡짜 μ•„μ΄ν…œμ΄ ν•„μš”ν•©λ‹ˆλ‹€. 이 λŒ€ν™” μƒμžλ₯Ό μ—΄λ €λ©΄ ν–‰λ ¬ μ†”λ²„μ˜ 였λ₯Έμͺ½μ— μžˆλŠ” ν†±λ‹ˆλ°”ν€΄ μ•„μ΄μ½˜μ„ λˆ„λ¦…λ‹ˆλ‹€. \n\nλ§ˆμ§€λ§‰ μš”κ΅¬μ‚¬ν•­μ€ μ œμž‘λ²•μ΄ μ„ ν˜•μ μœΌλ‘œ 독립적이어야 ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 즉, ν˜„μž¬ ν•˜μœ„ 곡μž₯μ—λŠ” κ³ μœ ν•œ μ†”λ£¨μ…˜μ΄ ν•˜λ‚˜λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, μ£Όμ–΄μ§„ μƒμ‚°ν’ˆμ„ λ§Œλ“œλŠ” μ—¬λŸ¬ 방법이 μžˆλ‹€λ©΄ ν–‰λ ¬ μ†”λ²„λŠ” μž‘λ™ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. ν•˜μœ„ 곡μž₯에 μ„ ν˜• 쒅속 μ œμž‘λ²•μ΄ μžˆλŠ” 경우 였λ₯˜κ°€ μ‚¬λΌμ§ˆ λ•ŒκΉŒμ§€ 쀑볡 μ œμž‘λ²•μ„ μ œκ±°ν•΄ λ³΄μ‹­μ‹œμ˜€. 이 μš”κ΅¬μ‚¬ν•­μ€ λͺ¨λ“  ν•˜μœ„ 측에 μ μš©λ©λ‹ˆλ‹€. - - -options_item_title=__1__ μˆ˜λŸ‰ μ„€μ • -options_item_text='__1__'에 λŒ€ν•œ νŠΉμ • μˆ˜λŸ‰μ„ μ„€μ •ν•©λ‹ˆλ‹€. -options_item_amount=μˆ˜λŸ‰ -options_item_amount_tt=이 μ œμž‘λ²•μ„ __2__둜 λ§Œλ“€ μ •ν™•ν•œ 양을 μ§€μ •ν•©λ‹ˆλ‹€. 이에 따라 이 μ„ μ˜ λ°±λΆ„μœ¨μ΄ μ‘°μ •λ©λ‹ˆλ‹€. -options_subfactory_ingredient_amount_tt=이 ν•˜μœ„ 곡μž₯μ—μ„œ μ†ŒλΉ„ν•  이 재료의 μ •ν™•ν•œ 양을 μ§€μ •ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 그에 따라 μƒμ‚°ν’ˆ μˆ˜λŸ‰μ΄ μ‘°μ •λ©λ‹ˆλ‹€. - - -utilities=도ꡬ λͺ¨μŒ -utility_title_components=κ΅¬μ„±ν’ˆ -utility_title_components_tt=ν˜„μž¬μ˜ ν•˜μœ„ 곡μž₯/측을 κ΅¬μ„±ν•˜λŠ” 데 ν•„μš”ν•œ 기계 및 λͺ¨λ“ˆμ„ λ³΄μ—¬μ€λ‹ˆλ‹€. μ‹ ν˜ΈκΈ°μ™€ μ‹ ν˜ΈκΈ° λͺ¨λ“ˆμ€ 'μ‹ ν˜ΈκΈ° 총합'이 μ„€μ •λœ κ²½μš°μ—λ§Œ 톡합 κ°€λŠ₯ν•©λ‹ˆλ‹€. 각 라인의 μˆ˜λŸ‰μ„ κ°œλ³„μ μœΌλ‘œ λ°˜μ˜¬λ¦Όν•©λ‹ˆλ‹€. -utility_title_notes=λ…ΈνŠΈ -components_needed_tt=__1__\n인벀토리에 [font=default-bold]__2__[/font] 개 있음 / [font=default-bold]__3__[/font] 개 ν•„μš”\n이 μ•„μ΄ν…œμ„ μ†μœΌλ‘œ μ œμž‘ν•˜λ €λ©΄ [font=default-semibold][color=#84CDEC]클릭[/color][/font]ν•˜μ‹­μ‹œμ˜€. -no_components_needed=__1__ ν•„μš” μ—†μŒ -utility_blueprint=섀계도면 -utility_blueprint_tt=μΈλ²€ν† λ¦¬μ—μ„œ λˆ„λ½λœ λͺ¨λ“  μ•„μ΄ν…œμ„ 일정 μ‹ ν˜Έ μ‘°ν•©κΈ°λ₯Ό ν¬ν•¨ν•˜λŠ” 섀계도면 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ μš”μ²­ μƒμžμ— μ—°κ²°ν•˜μ—¬ 배달할 수 μžˆμŠ΅λ‹ˆλ‹€. -utility_blueprint_no_combinator=일정 μ‹ ν˜Έ μ‘°ν•©κΈ° ν”„λ‘œν† νƒ€μž…μ„ 찾을 수 μ—†μŒ -utility_no_items_necessary=인벀토리에 이 __1__을(λ₯Ό) κ΅¬μ„±ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  μ•„μ΄ν…œμ΄ 이미 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. -request_items=μš”μ²­ μ•„μ΄ν…œ -request_items_tt=이 __1__을(λ₯Ό) κ΅¬μ„±ν•˜λŠ” 데 λˆ„λ½λœ λͺ¨λ“  μ•„μ΄ν…œμ„ μš”μ²­ν•©λ‹ˆλ‹€. [font=default-semibold]\n[color=#84CDEC]μ°Έκ³ :[/color][/font] λ¬Όλ₯˜λ‘œλ΄‡μ΄ μ•„λ‹Œ κ±΄μ„€λ‘œλ΄‡μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. -cancel_request=μš”μ²­ μ·¨μ†Œ -request_logistics_not_researched=이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ λ‘œλ΄‡ 기술이 μ—°κ΅¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. -request_no_character=μ•„μ΄ν…œμ„ μš”μ²­ν•  수 μžˆλŠ” 캐릭터가 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. -utility_no_character=μ—°κ΄€λœ 캐릭터가 μ—†μœΌλ©΄ μ†μœΌλ‘œ μ œμž‘ν•  수 μ—†μŒ -utility_no_recipes=이 μƒμ‚°ν’ˆμ„ λ§Œλ“€ 수 μžˆλŠ” μ œμž‘λ²•μ΄ μ—†μŠ΅λ‹ˆλ‹€. -utility_no_demand=이 μ•„μ΄ν…œμ— λŒ€ν•œ μš”μ²­μ΄ 이미 μΆ©μ‘±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -utility_no_resources=μ†μœΌλ‘œ μ œμž‘ν•˜κΈ°μ— ν•„μš”ν•œ μžμ› λΆ€μ‘± - - -preferences=κΈ°λ³Έ μ„€μ • -preferences_support=[font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]μ—μ„œ λͺ¨λ“œλ₯Ό μ§€μ›ν•˜μ„Έμš”! -preferences_info=μ΄λŸ¬ν•œ ν™˜κ²½μ„€μ •μ€ κ²Œμž„ 쀑에 자주 μ‘°μ •ν•˜λŠ” 섀정을 ν¬ν•¨ν•©λ‹ˆλ‹€.\n일반 섀정을 보렀면 λ‹€μŒ λ©”λ‰΄λ‘œ μ΄λ™ν•˜μ„Έμš”.\n'κΈ°λ³Έ 메뉴→섀정→λͺ¨λ“œ μ„€μ •β†’νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆ' -preference_general_title=일반 κΈ°λ³Έ μ„€μ • -preference_general_title_tt=자주 λ³€κ²½ν•  수 μžˆλŠ” λͺ‡ κ°€μ§€ 일반적인 κΈ°λ³Έ μ„€μ • -preference_general_ignore_barreling_recipes=배럴링 및 λ¬ΆκΈ° μ œμž‘λ²• λ¬΄μ‹œ -preference_general_ignore_barreling_recipes_tt=μ œμž‘λ²•μ„ 찾을 λ•Œ 배럴 μ±„μš°κΈ°(λΉ„μš°κΈ°) 및 λ¬ΆκΈ°(ν’€κΈ°)λ₯Ό λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€(ν˜Έν™˜ κ°€λŠ₯ν•œ λͺ¨λ“œμ— ν•œν•¨). -preference_general_ignore_recycling_recipes=μž¬ν™œμš© μ œμž‘λ²• λ¬΄μ‹œ -preference_general_ignore_recycling_recipes_tt=κΈ°μ‘΄ μ•„μ΄ν…œμ„ μž¬ν™œμš©ν•˜λŠ” μ œμž‘λ²•μ„ λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€(ν˜Έν™˜ κ°€λŠ₯ν•œ λͺ¨λ“œμ— ν•œν•¨). -preference_general_ingredient_satisfaction=재료 λ§Œμ‘±λ„ -preference_general_ingredient_satisfaction_tt=μ œμž‘λ²•μ˜ 재료 좩쑱도가 ν•˜μœ„ μ œμž‘λ²•μ— μ˜ν•΄ μΆ©μ‘±λ˜λŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. -preference_general_round_button_numbers=λ²„νŠΌ 숫자 반올림 -preference_general_round_button_numbers_tt=기계 및 벨트/레인의 숫자λ₯Ό λ°˜μ˜¬λ¦Όν•©λ‹ˆλ‹€. -preference_production_title=생산 ν…Œμ΄λΈ” μ—΄ -preference_production_title_tt=생산 ν…Œμ΄λΈ”μ—μ„œ 일뢀 열을 μΆ”κ°€λ‘œ ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -preference_production_done_column=μ œμž‘λ²•μ„ μ™„μ„±μœΌλ‘œ ν‘œμ‹œ -preference_production_done_column_tt=μ œμž‘λ²•μ„ μ™„λ£Œν•œ κ²ƒμœΌλ‘œ ν‘œμ‹œν•  수 μžˆλŠ” λ²„νŠΌμ΄ μžˆλŠ” 열을 μΆ”κ°€ν•©λ‹ˆλ‹€. 이 λ²„νŠΌμ€ μ‚¬μš©μžμ—κ²Œ μ‹œκ°μ  정보 역할을 ν•˜λ©° μ œμž‘λ²• μžμ²΄μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -preference_production_pollution_column=곡해 -preference_production_pollution_column_tt=각 μ œμž‘λ²•μ— μ˜ν•΄ μƒμ„±λœ 곡해λ₯Ό ν‘œμ‹œν•˜λŠ” μ—΄ μΆ”κ°€ -preference_production_line_comment_column=μ œμž‘λ²• λ…ΈνŠΈ -preference_production_line_comment_column_tt=각 μ œμž‘λ²•μ— 기둝할 수 μžˆλ„λ‘ ν…μŠ€νŠΈ ν•„λ“œκ°€ μžˆλŠ” 열을 μΆ”κ°€ν•©λ‹ˆλ‹€. -preference_mb_defaults_title=λͺ¨λ“ˆ κΈ°λ³Έκ°’ -preference_mb_defaults_title_tt=λͺ¨λ“  μƒˆ μ œμž‘λ²•λ§ˆλ‹€ 섀정될 κΈ°λ³Έ λͺ¨λ“ˆμ„ μ„€μ •ν•©λ‹ˆλ‹€. -preference_mb_default_machine=첫 번째 -preference_mb_default_machine_tt=μƒˆλ‘œμš΄ μ œμž‘λ²•μ— 처음 μ‚½μž…λ˜λŠ” λͺ¨λ“ˆ -preference_mb_default_machine_secondary=두 번째 -preference_mb_default_machine_secondary_tt=첫 번째 λͺ¨λ“ˆμ΄ μƒˆ μ œμž‘λ²•κ³Ό ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” 경우 이 λͺ¨λ“ˆμ„ λŒ€μ‹  μ‚½μž…ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€. -preference_mb_default_beacon=λͺ¨λ“ˆ -preference_mb_default_beacon_tt=λͺ¨λ“  μƒˆλ‘œμš΄ μ œμž‘λ²•μ˜ μ‹ ν˜ΈκΈ°μ— μ‚½μž…μ„ μ‹œλ„ν•˜λŠ” κΈ°λ³Έ λͺ¨λ“ˆ -preference_mb_default_beacon_amount=μˆ˜λŸ‰ -preference_mb_default_beacon_amount_tt=μƒˆ μ œμž‘λ²•μ˜ 각 κ°œλ³„ κΈ°κ³„λ§ˆλ‹€ μ‹ ν˜ΈκΈ° 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. -preference_default_belts_title=μ„ ν˜Έλ˜λŠ” 벨트 -preference_default_belts_title_tt=벨트/레인 μˆ˜μš”λ₯Ό 계산할 λ•Œ λ˜λŠ” 벨트/레인의 μ–‘μœΌλ‘œ μƒμ‚°ν’ˆμ„ μ§€μ •ν•  λ•Œ μ‚¬μš©λ˜λŠ” 벨트의 μœ ν˜•μ„ μ„€μ •ν•©λ‹ˆλ‹€. -preference_default_beacons_title=μ„ ν˜Έλ˜λŠ” μ‹ ν˜ΈκΈ° -preference_default_beacons_title_tt=μ œμž‘λ²•μ— μΆ”κ°€ν•  λ•Œ 기본적으둜 μ„ νƒλ˜μ–΄ μžˆλŠ” μ‹ ν˜ΈκΈ°μ„ μ„€μ •ν•©λ‹ˆλ‹€. -preference_default_fuels_title=μ„ ν˜Έλ˜λŠ” μ—°λ£Œ -preference_default_fuels_title_tt=νƒœμšΈ 수 μžˆλŠ” μ—°λ£Œλ₯Ό μ‚¬μš©ν•˜λŠ” 기계λ₯Ό μΆ”κ°€ν•  λ•Œ 기본적으둜 μ„ νƒλ˜λŠ” μ—°λ£Œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. -preference_default_machines_title=μ„ ν˜Έλ˜λŠ” 기계 -preference_default_machines_title_tt=μƒˆλ‘œμš΄ μ œμž‘λ²•μ„ μΆ”κ°€ν•  λ•Œ μΉ΄ν…Œκ³ λ¦¬λ³„λ‘œ 기본적으둜 μ„ νƒλ˜μ–΄ μžˆλŠ” 기계λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 아무 κΈ°κ³„λ‚˜ [font=default-semibold][color=#84CDEC]Shift-클릭[/color][/font]ν•˜μ—¬ λ‹€λ₯Έ λͺ¨λ“  μœ μ‚¬ 범주에 μ„€μ •ν•©λ‹ˆλ‹€. -preference_default_wagons_title=μ„ ν˜Έλ˜λŠ” ν™”λ¬Όμ°¨ -preference_default_wagons_title_tt=ν™”λ¬Όμ°¨ μˆ˜μš”λ₯Ό 계산할 λ•Œ μ‚¬μš©λ˜λŠ” ν™”λ¬Όμ°¨μ˜ μœ ν˜•μ„ μ„€μ •ν•©λ‹ˆλ‹€. - - -recipe_instruction=__1__ '__2__'둜 μ œμž‘λ²• 선택 -show=ν‘œμ‹œ -unresearched_recipes=μ—°κ΅¬λ˜μ§€ μ•Šμ€ μ œμž‘λ²• -hidden_recipes=μˆ¨κ²¨μ§„ μ œμž‘λ²• -no_recipe_found=ν•„ν„° 쑰건에 λ§žλŠ” μ œμž‘λ²•μ΄ μ—†μŠ΅λ‹ˆλ‹€ - - -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Recipe Book - - -fluid_at_temperature=__2____3__μ—μ„œ __1__ - - -submit=확인 -delete=μ‚­μ œ -cancel=μ·¨μ†Œ -confirm_dialog_tt=__CONTROL__fp_confirm_dialog__λ₯Ό 눌러 μ μš©ν•©λ‹ˆλ‹€. -cancel_dialog_tt=__CONTROL__toggle-menu__λ₯Ό 눌러 μ·¨μ†Œν•©λ‹ˆλ‹€. -search_button_tt=__CONTROL__focus-search__λ₯Ό 눌러 검색 ν•„λ“œμ— μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€ - -close_button_tt=__CONTROL__toggle-menu__λ₯Ό 눌러 λ‹«μŠ΅λ‹ˆλ‹€. -searchfield_tt=λ²ˆμ—­λœ 이름을 μ‚¬μš©ν•˜μ—¬ κ²°κ³Ό 필터링 -searchfield_not_ready_tt=λ²ˆμ—­λœ 이름 검색이 아직 μ€€λΉ„λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μž μ‹œλ§Œ κΈ°λ‹€λ € μ£Όμ„Έμš”. -warning_with_icon=[img=fp_sprite_warning_red] __1__ - - -amount_by=__1__ λ‹¨μœ„ μˆ˜λŸ‰ -no_item_found=검색어와 μΌμΉ˜ν•˜λŠ” μ•„μ΄ν…œμ΄ μ—†μŠ΅λ‹ˆλ‹€. -picker_issue_select_item=μΆ”κ°€ν•  μ•„μ΄ν…œμ„ μ„ νƒν•©λ‹ˆλ‹€. -picker_issue_enter_amount=숫자 λ˜λŠ” 벨트둜 μ–‘ μ§€μ • - - -matrix_free_items=곡짜 μ•„μ΄ν…œ -matrix_constrained_items=__1__ 자유 선택 __2__ -matrix_linearly_dependent_recipes=μ„ ν˜• 쒅속 μ œμž‘λ²•μ΄ 탐지 - - -subfactory_dialog_description=ν•˜μœ„ 곡μž₯의 이름을 μ„ νƒν•©λ‹ˆλ‹€. -subfactory_dialog_name=이름 -subfactory_dialog_name_tt=ν•˜μœ„ 곡μž₯ 이름은 μ„œμ‹ μžˆλŠ” ν…μŠ€νŠΈλ₯Ό ν—ˆμš©ν•˜λ©° μ•„λž˜ λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -subfactory_dialog_rich_text=μ„œμ‹ μžˆλŠ” ν…μŠ€νŠΈ -subfactory_dialog_rich_text_tt=이 선택기λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 곡μž₯ 이름에 μ„œμ‹ μžˆλŠ” ν…μŠ€νŠΈλ₯Ό νŽΈλ¦¬ν•˜κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„œμ‹ μžˆλŠ” ν…μŠ€νŠΈλ₯Ό 직접 μž…λ ₯ν•˜κ±°λ‚˜ 뢙여넣을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. -subfactory_dialog_name_empty=ν•˜μœ„ 곡μž₯ 이름은 λΉ„μ›Œλ‘˜ 수 μ—†μŠ΅λ‹ˆλ‹€. - - -machine_dialog_description='__1__'에 λŒ€ν•œ 기계 ꡬ성 -machine_does_not_use_fuel=μ—°λ£Œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŒ -machine_limit=μ œν•œ -machine_limit_tt=이 λΌμΈμ—μ„œ μ‚¬μš©ν•  κΈ°κ³„μ˜ 수λ₯Ό μ œν•œν•©λ‹ˆλ‹€. 더 적은 수의 기계가 ν•„μš”ν•œ 경우 μ‹€μ œ 양은 더 λ‚을 수 μžˆμŠ΅λ‹ˆλ‹€. -machine_force_limit=κ°•μ œ μ œν•œ -machine_force_limit_tt=κ³Όμž‰ μƒμ‚°μœΌλ‘œ 이어지더라도 기계 수λ₯Ό μœ„μ— μ§€μ •λœ μ •ν™•ν•œ μ–‘μœΌλ‘œ κ°•μ œ μ μš©ν•©λ‹ˆλ‹€. 기계 μ œν•œκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. - - -beacon_dialog_description_add='__1__'에 μ‹ ν˜ΈκΈ° μΆ”κ°€ -beacon_dialog_description_edit='__1__'에 λŒ€ν•œ μ‹ ν˜ΈκΈ° ꡬ성 -beacon_amount_tt=각 기계에 영ν–₯을 λ―ΈμΉ˜λŠ” μ‹ ν˜ΈκΈ° 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 여기에 μ‹­μ§„μˆ˜λ₯Ό μž…λ ₯ν•˜λ©΄ 기계 쀑 일뢀가 λ‹€λ₯Έ μ–‘μ˜ μ‹ ν˜ΈκΈ°λ‘œ κ°€λ €μ§ˆ 수 μžˆλ‹€λŠ” 사싀을 λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -beacon_total=합계 -beacon_total_tt=μ‹€μ œ 곡μž₯μ—μ„œ λ³Έ μ œμž‘λ²•μ— μ‚¬μš©ν•˜λŠ” μ ˆλŒ€μ μΈ μ‹ ν˜ΈκΈ°μ˜ 양을 μ§€μ •ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 이 μ •λ³΄λŠ” μ—λ„ˆμ§€ μ†ŒλΉ„ 계산에 ν¬ν•¨λ©λ‹ˆλ‹€. -beacon_selector_tt=선택 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ 이미 제쑰된 곡μž₯의 μ‹ ν˜ΈκΈ° 수λ₯Ό μ„Έμ‹­μ‹œμ˜€. -beacon_issue_set_amount=μ‹ ν˜ΈκΈ° 양을 0보닀 큰 κ°’μœΌλ‘œ μž…λ ₯ν•˜μ‹­μ‹œμ˜€. -beacon_issue_no_modules=ν•˜λ‚˜ μ΄μƒμ˜ λͺ¨λ“ˆμ„ μ„ νƒν•˜μ‹­μ‹œμ˜€. - - -switch_to_compact_view=μΆ•μ†Œ 보기둜 μ „ν™˜\n- __CONTROL__fp_toggle_compact_view__λ₯Ό 눌러 μ „ν™˜ν•˜μ„Έμš”. - -pause_on_interface=메인 μΈν„°νŽ˜μ΄μŠ€κ°€ μ—΄λ € μžˆμ„ λ•Œ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ κ²Œμž„μ„ μžλ™μœΌλ‘œ μΌμ‹œ μ€‘μ§€ν•˜λ„λ‘ μ „ν™˜ν•©λ‹ˆλ‹€(μ‹±κΈ€ ν”Œλ ˆμ΄μ–΄λ§Œ ν•΄λ‹Ή).\n- __CONTROL__fp_toggle_pause__λ₯Ό 눌러 μΌμ‹œ 쀑지λ₯Ό μ „ν™˜ν•©λ‹ˆλ‹€. -close_interface=이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹«μŠ΅λ‹ˆλ‹€.\n- __CONTROL__fp_toggle_interface__λ₯Ό 눌러 λ‹«μŠ΅λ‹ˆλ‹€. - - - -action_open_archive_tt=ν•˜μœ„ 곡μž₯ λ³΄κ΄€μ†Œλ₯Ό μ—½λ‹ˆλ‹€.\n__1__ -archive_empty=[font=default-semibold]- λ³΄κ΄€μ†Œκ°€ ν˜„μž¬ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€. -[/font] -archive_filled=[font=default-semibold]- λ³΄κ΄€μ†Œμ—λŠ” ν˜„μž¬ __1__ __2__이 μžˆμŠ΅λ‹ˆλ‹€. -[/font] -action_close_archive_tt=ν•˜μœ„ 곡μž₯ λ³΄κ΄€μ†Œλ₯Ό λ‹«μŠ΅λ‹ˆλ‹€. -action_import_subfactory=λ‹€λ₯Έ μ €μž₯μ—μ„œ μƒμ„±λœ λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 곡μž₯ κ°€μ Έμ˜€κΈ° -action_export_subfactory=λ‹€λ₯Έ μ‚¬μš©μžμ™€ κ³΅μœ ν•  수 μžˆλŠ” λ¬Έμžμ—΄λ‘œ ν•˜μœ„ 곡μž₯ 내보내기 -action_archive_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯을 λ³΄κ΄€μ†Œλ‘œ μ΄λ™ν•©λ‹ˆλ‹€. -action_unarchive_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯을 λ³΄κ΄€μ†Œ μ™ΈλΆ€λ‘œ λ‹€μ‹œ μ΄λ™ν•©λ‹ˆλ‹€. -action_duplicate_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯을 λ³΅μ œν•˜μ—¬ μ™„λ²½ν•œ 볡사본을 μƒμ„±ν•©λ‹ˆλ‹€. -action_add_subfactory_by_name=μƒˆ ν•˜μœ„ 곡μž₯ 생성\n[font=default-semibold][color=#84CDEC]Shift-클릭[/color][/font]으둜 μƒμ‚°ν’ˆμ„ λ°”λ‘œ μ„ νƒν•˜μ„Έμš” -action_add_subfactory_by_product=μƒˆ ν•˜μœ„ 곡μž₯에 λŒ€ν•œ ν•­λͺ© 선택\n[font=default-semibold][color=#84CDEC]Shift-클릭[/color][/font]으둜 이름을 λ¨Όμ € μ§€μ •ν•˜μ„Έμš” -action_edit_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯의 이름을 νŽΈμ§‘ -action_trash_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯을 νœ΄μ§€ν†΅μœΌλ‘œ 이동.\n__1__λΆ„ λ™μ•ˆ λ³΄κ΄€μ†Œμ— λ³΄μ‘΄λ©λ‹ˆλ‹€. -action_delete_subfactory=μ„ νƒν•œ ν•˜μœ„ 곡μž₯을 λΆˆκ°€μ—­μ μœΌλ‘œ μ‚­μ œ -subfactory_trashed=\n[font=default-bold]버렀짐[/font] - __1__λΆ„ ν›„ μžλ™ μ‚­μ œ -subfactory_invalid=\n[font=default-bold]잘λͺ»λ¨[/font] - 수리 ν•„μš” - - -subfactory_info=ν•˜μœ„ 곡μž₯ 정보 -no_subfactory=ν•˜μœ„ 곡μž₯이 μ„ νƒλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. -subfactory_needs_repair=ν™œμ„± λͺ¨λ“œ 집합이 λ³€κ²½λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이 ν•˜μœ„ 곡μž₯은 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” λ³΅κ΅¬ν•˜κ±°λ‚˜ λˆ„λ½λœ λͺ¨λ“œλ₯Ό λ‹€μ‹œ ν™œμ„±ν™”ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μˆ˜λ¦¬λŠ” μœ νš¨ν•˜μ§€ μ•Šμ€ λͺ¨λ“  것을 μ œκ±°ν•©λ‹ˆλ‹€. -repair_subfactory=ν•˜μœ„ 곡μž₯ 수리 -timescale=μ‹œκ°„ 척도 -timescale_tt=μ‹œκ°„ μ²™λ„λŠ” μ•„μ΄ν…œμ˜ 생산 속도λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, [font=default-bold]1m[/font]λ₯Ό μ„ νƒν•˜κ³  400개의 녹색 회둜 μƒμ‚°ν’ˆμ„ μΆ”κ°€ν•˜λ©΄ [font=default-bold]λΆ„λ‹Ή[/font] 400개의 회둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. -mining_productivity=채취 생산성 -mining_productivity_tt=ν˜„μž¬ 채취 생산성 λ³΄λ„ˆμŠ€. 기본적으둜 연ꡬ μ§„ν–‰λ₯ μ„ μΆ”μ ν•˜μ§€λ§Œ λ°±λΆ„μœ¨μ„ μˆ˜λ™μœΌλ‘œ μž¬μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžλ™ μΆ”μ μœΌλ‘œ 되돌리렀면 ν…μŠ€νŠΈ ν•„λ“œλ₯Ό μ§€μš°κ³  ν™•μΈν•©λ‹ˆλ‹€. -override=μž¬μ •μ˜ -solver_choice=솔버 -solver_choice_tt=이 ν•˜μœ„ 곡μž₯에 μ‚¬μš©ν•  솔버λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. 전톡적인 것은 λ‹Ήμ‹ μ˜ μ œμž‘λ²•μ„ μˆœμ„œλŒ€λ‘œ μ‚΄νŽ΄λ³΄κ³  κ·Έλ“€μ˜ ν•„μš”λ₯Ό νŒŒμ•…ν•¨μœΌλ‘œμ¨ μž‘λ™ν•©λ‹ˆλ‹€. λ°˜λ©΄μ— ν–‰λ ¬ μ†”λ²„λŠ” 루프와 뢀산물을 μ²˜λ¦¬ν•  수 μžˆμ§€λ§Œ λ•Œλ•Œλ‘œ 좔가적인 ꡬ성이 ν•„μš”ν•©λ‹ˆλ‹€. -solver_choice_traditional=κΈ°μ‘΄ -solver_choice_matrix=ν–‰λ ¬ -solver_choice_configure=ν–‰λ ¬ 솔버 ꡬ성 -subfactory_modset_changes=ν™œμ„± λͺ¨λ“œκ°€ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]μ΄λŸ¬ν•œ λͺ¨λ“œκ°€ μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]λ‹€μŒ λͺ¨λ“œκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]λ‹€μŒ λͺ¨λ“œκ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.[/font][/color] -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__β†’ v__3__ - - -view_state_tt=__1__\n- __CONTROL__fp_cycle_production_views__λ₯Ό 눌러 보기 사이λ₯Ό μˆœν™˜ν•©λ‹ˆλ‹€. -items_per_timescale=μ•„μ΄ν…œ λ²„νŠΌμ˜ μˆ˜λŸ‰μ„ __1__λ‹Ή λͺ‡ κ°œμ”© 생산/μ‚¬μš©ν• μ§€ μ„€μ •ν•©λ‹ˆλ‹€. -belts_or_lanes=μ•„μ΄ν…œ λ²„νŠΌμ˜ μˆ˜λŸ‰μ„ μ›ν•˜λŠ” 벨트 μœ ν˜•μ˜ __1__ 수λ₯Ό κΈ°μ€€μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€. 유체의 경우 [font=default-bold]λ°°λŸ΄λ‹Ή 50 유체[/font]라고 κ°€μ •ν•©λ‹ˆλ‹€\n__2__[font=default-bold]__3__[/font]λ₯Ό μ‚¬μš©ν•˜λ„λ‘ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -wagons_per_timescale=μ•„μ΄ν…œ λ²„νŠΌμ˜ μˆ˜λŸ‰μ„ __1__λ‹Ή μ–Όλ§ˆλ‚˜ λ§Žμ€ ν™”λ¬Όμ°¨ λ˜λŠ” 유체 ν™”λ¬Όμ°¨κ°€ μ±„μ›Œμ§ˆμ§€ μ„€μ •ν•©λ‹ˆλ‹€.\n__2__[font=default-bold]__3__[/font] λ˜λŠ” __4__[font=default-bold]__5__[/font]λ₯Ό μ‚¬μš©ν•˜λ„λ‘ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. -items_per_second_per_machine=μ•„μ΄ν…œ λ²„νŠΌμ˜ μˆ˜λŸ‰μ„ 단일 κΈ°κ³„μ—μ„œ μ΄ˆλ‹Ή 생성/μ†ŒλΉ„ν•˜λŠ” μ•„μ΄ν…œμ˜ 수둜 μ„€μ •ν•©λ‹ˆλ‹€. 이것은 μ–Όλ§ˆλ‚˜ λ§Žμ€ νˆ¬μž…κΈ°κ°€ ν•„μš”ν• μ§€ μΆ”μ •ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€. - - -refresh_production=μ•„λž˜μ˜ 생산 ν…Œμ΄λΈ” μƒˆλ‘œ κ³ μΉ¨\n- __CONTROL__fp_refresh_production__λ₯Ό 눌러 μƒˆλ‘œ κ³ μΉ¨ - -production=생산 -level=단계 -floor_up_tt=ν•œ μΈ΅ μ˜¬λΌκ°€κΈ°\n- __CONTROL__fp_floor_up__λ₯Ό 눌러 μœ„λ‘œ- -floor_top_tt=μ΅œμƒμœ„ 측으둜 이동 -utility_dialog_tt=μœ ν‹Έλ¦¬ν‹° λŒ€ν™” μƒμž μ—΄κΈ° -production_instruction_subfactory=μ™Όμͺ½ μƒλ‹¨μ˜ 녹색 '+'-λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ ν•˜μœ„ 곡μž₯을 μΆ”κ°€ν•˜μ„Έμš”. -production_instruction_product=μœ„μ˜ μƒμ‚°ν’ˆ μƒμžμ˜ νšŒμƒ‰ '+'-λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μƒμ‚°ν’ˆμ„ μΆ”κ°€ν•˜μ„Έμš”. -production_instruction_recipe=μœ„μ˜ μƒμ‚°ν’ˆ μƒμžμ˜ μƒμ‚°ν’ˆμ„ 마우슀 μ™Όμͺ½ λ‹¨μΆ”λ‘œ ν΄λ¦­ν•˜μ—¬ μ œμž‘λ²• μΆ”κ°€ - - -column_done_tt=μ‹œκ°μ  이점을 μœ„ν•΄ μ œμž‘λ²•μ„ κ·ΈλŒ€λ‘œ ν‘œμ‹œ -column_percentage_tt=이 λΉ„μœ¨μ€ λ³Έ μ œμž‘λ²•μ΄ μƒμ‚°ν•˜λŠ” μƒμ‚°ν’ˆμ— λŒ€ν•œ μˆ˜μš” 쀑 μ‹€μ œλ‘œ 이 μ œμž‘λ²•μ„ 톡해 μ–΄λŠ 정도λ₯Ό μΆ©μ‘±μ‹œμΌœμ•Ό ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. [font=default-semibold][color=#84CDEC]Enter[/color][/font]λ₯Ό 눌러 변경사항을 ν™•μΈν•œ ν›„μ—λ§Œ 계산이 μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€. -column_comment=주석 -recipe_inactive=λ ˆμ‹œν”Ό λΉ„ν™œμ„±ν™” -recipe_subfloor_attached=ν•˜μœ„ μΈ΅ 있음 -recipe_consumes_byproduct=λΆ€μ‚°λ¬Ό μ†ŒλΉ„ -subfloor_machine_count=__1__ __2__ ν•˜μœ„ μΈ΅μ—μ„œ μ‚¬μš© 쀑 -machine_limit_force=μ •ν™•ν•œ ν•œκ³„μΉ˜ κ°•μ œ [__1__] -machine_limit_enforced=ν•œκ³„μΉ˜ κ°•μ œ [__1__] -machine_limit_set=ν•œκ³„μΉ˜ μ„€μ • [__1__] -add_beacon=μ‹ ν˜ΈκΈ° μΆ”κ°€ -in_total=총 __1__ -priority_product=μš°μ„  μˆœμœ„ μƒμ‚°ν’ˆ -raw_ore=κΈ°λ³Έ 광석 - - -switch_to_main_view=메인 보기둜 μ „ν™˜\n- __CONTROL__fp_toggle_compact_view__λ₯Ό 눌러 μ „ν™˜ν•˜μ„Έμš”. - -compact_recipe_subfloor_tt=[font=default-semibold][color=#84CDEC]쒌클릭[/color][/font]으둜 ν•˜μœ„ 측을 μ—½λ‹ˆλ‹€. - - -copied_into_clipboard=__1__ 볡사됨 -pasted_from_clipboard=__1__ λΆ™μ—¬λ„£μŒ -clipboard_empty=ν΄λ¦½λ³΄λ“œκ°€ λΉ„μ–΄ μžˆμŠ΅λ‹ˆλ‹€. -clipboard_incompatible_class=__1__을 __2__에 뢙여넣을 수 μ—†μŠ΅λ‹ˆλ‹€. -clipboard_incompatible=뢙여넣은 __1__이 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ -clipboard_already_exists=뢙여넣은 __1__이 이미 μ‘΄μž¬ν•©λ‹ˆλ‹€. -clipboard_no_empty_slots=빈 λͺ¨λ“ˆ 슬둯 μ—†μŒ -clipboard_recipe_irrelevant=뢙여넣은 라인은 이 μΈ΅κ³Ό λ¬΄κ΄€ν•©λ‹ˆλ‹€ - - -tut_action_line=\n[font=default-semibold][color=#84CDEC]__1__[/color][/font]으둜 __2__ -tut_open_in_recipebook=\n[font=default-semibold][color=#84CDEC]Alt + 우클릭[/color][/font]으둜 λ ˆμ‹œν”Ό λΆμ—μ„œ μ—΄κΈ° - -tut_left=쒌클릭 -tut_right=우클릭 -tut_shift=Shift -tut_alt=Alt -tut_control=Ctrl - -tut_select=선택 -tut_edit=νŽΈμ§‘ -tut_delete=μ‚­μ œ -tut_change=λ³€κ²½ -tut_copy=볡사 -tut_paste=λΆ™μ—¬λ„£κΈ° -tut_add_recipe=μ œμž‘λ²• μΆ”κ°€ -tut_move_left=μ™Όμͺ½μœΌλ‘œ 이동 -tut_move_right=였λ₯Έμͺ½μœΌλ‘œ 이동 -tut_open_subfloor=ν•˜μœ„ μΈ΅ μ—΄κΈ° -tut_toggle=μ „ν™˜ -tut_set_limit=μ œν•œ μ„€μ • -tut_reset_to_default=κΈ°λ³Έκ°’μœΌλ‘œ μž¬μ„€μ • -tut_put_into_cursor=μ»€μ„œμ— λ„£κΈ° -tut_add_recipe_to_end=μ œμž‘λ²• μΆ”κ°€ -tut_add_recipe_below=λ°”λ‘œ μ•„λž˜μ— μ œμž‘λ²• μΆ”κ°€ -tut_specify_amount=μˆ˜λŸ‰ μ§€μ • -tut_prioritize=μš°μ„ μ‹œν•˜κΈ° - - -effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=μ—λ„ˆμ§€ μ†ŒλΉ„ -speed=속도 -productivity=생산성 -pollution=곡해 -base_prod=κΈ°λ³Έ 생산성 -mining_prod=채취 생산성 -effect_maxed=(μ΅œλŒ€) - - -error_no_relevant_recipe=이 μ•„μ΄ν…œμ„ μƒμ„±ν•˜λŠ” κΈ°μ‘΄ μ œμž‘λ²•μ΄ μ—†μŠ΅λ‹ˆλ‹€. -error_no_enabled_recipe=ν™œμ„±ν™”λœ μ œμž‘λ²•μ΄ 이 μ•„μ΄ν…œμ„ μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(κΈ°λ³Έ μ„€μ •μ—μ„œ ν™œμ„±ν™” β†’). -error_no_compatible_machine=κΈ°μ‘΄ κΈ°κ³„λ‘œλŠ” 이 μ œμž‘λ²•μ„ λ§Œλ“€ 수 μ—†μŠ΅λ‹ˆλ‹€. -error_no_subfloor_on_byproduct_recipes=뢀산물을 μ†ŒλΉ„ν•˜λŠ” μ œμž‘λ²•μ—λŠ” ν•˜μœ„ 측이 μžˆμ„ 수 μ—†μŠ΅λ‹ˆλ‹€. -error_no_new_subfloors_in_archive=λ³΄κ΄€λœ ν•˜μœ„ 곡μž₯에 ν•˜μœ„ 측을 μΆ”κ°€ν•  수 μ—†μŠ΅λ‹ˆλ‹€. -error_list_item_cant_be_shifted=이 __1__은 __2__으둜 이동할 수 μ—†μŠ΅λ‹ˆλ‹€. -error_recipebook_version_incompatible=λ ˆμ‹œν”Ό 뢁의 버전이 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 두 λͺ¨λ“œλ₯Ό λͺ¨λ‘ μ—…λ°μ΄νŠΈν•΄ λ³΄μ„Έμš”. -error_recipebook_lookup_failed=ν΄λ¦­ν•œ __1__을 λ ˆμ‹œν”Ό λΆμ—μ„œ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. -error_linearly_dependant_recipes=ν–‰λ ¬ 솔버 λΉ„ν™œμ„±. μƒμ‚°ν’ˆλ‹Ή ν•˜λ‚˜μ˜ μ œμž‘λ²•λ§Œ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. -error_recipe_wrong_floor=__1__ μ œμž‘μ—…μ€ ν•˜μœ„ 곡μž₯의 μ΅œμƒμœ„ μΈ΅μ—λ§Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. -warning_no_matrix_configuration_needed=ν–‰λ ¬ 솔버에 μΆ”κ°€ ꡬ성이 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -warning_recipe_disabled=이 μ œμž‘λ²•μ€ 아직 μ—°κ΅¬λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ ν˜„μž¬ 생산할 수 μ—†μŠ΅λ‹ˆλ‹€. -warning_module_not_compatible=μ›ν•˜λŠ” __1__λŠ” 이 기계와 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. -warning_no_prioritizing_single_product=κ΄€λ ¨ μƒμ‚°ν’ˆ ν•˜λ‚˜μ™€ ν•¨κ»˜ ν•˜λŠ” μ œμž‘λ²•μ€ μš°μ„  μˆœμœ„κ°€ 맀겨질 수 μ—†μŠ΅λ‹ˆλ‹€. -hint_tutorial=νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆλ₯Ό 처음 μ‚¬μš©ν•˜λŠ” 경우 νŠœν† λ¦¬μ–Όμ„ μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€. ⟢ -hint_byproducts_removed=ν–‰λ ¬ 솔버λ₯Ό λΉ„ν™œμ„±ν™”ν•˜λ©΄ λͺ¨λ“  λΆ€μ‚°λ¬Ό μ œμž‘λ²•μ΄ μ œκ±°λ©λ‹ˆλ‹€. - - -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=곡해 -unit_celsius=Β°C -unit_second=초 -unit_minute=λΆ„ -unit_hour=μ‹œκ°„ -second=초 -minute=λΆ„ -hour=μ‹œκ°„ - - -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] - -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) - -selected=선택됨 -preferred=μ„ ν˜Έλ¨ -satisfied=만쑱됨 -valid=μœ νš¨ν•¨ -invalid=잘λͺ»λ¨ -increased=증가됨 -decreased=κ°μ†Œλ¨ -capped=ν•œκ³„ 도달 - -on=켜기 -off=끄기 -left=μ™Όμͺ½ -right=였λ₯Έμͺ½ -up=μœ„μͺ½ -down=μ•„λž˜μͺ½ -top=맨 μœ„ -bottom=맨 μ•„λž˜ - -add=μΆ”κ°€ν•˜κΈ° - -new=μƒˆλ‘œ λ§Œλ“€κΈ° - -edit=νŽΈμ§‘ν•˜κΈ° - -choose=선택 -produce=생산 -consume=μ†ŒλΉ„ - -none=μ—†μŒ -crafting_time=μ œμž‘ μ‹œκ°„ -amount=μˆ˜λŸ‰ - -factory=곡μž₯ -archive=보관 - -toggle_interface=FP -toggle_interface_tt=νŒ©ν† λ¦¬ ν”Œλž˜λ„ˆ μΈν„°νŽ˜μ΄μŠ€ μ „ν™˜ - -energy_consumption=μ—λ„ˆμ§€ μ†ŒλΉ„ -effectivity=효과 -module_slots=λͺ¨λ“ˆ 슬둯 -fuel_value=μ—°λ£Œ κ°’ -emissions_multiplier=방좜 배수 -throughput=μ²˜λ¦¬λŸ‰ -crafting_speed=μ œμž‘ 속도 -storage=μŠ€ν† λ¦¬μ§€ - -move_row_tt=이 __1__을 __2__으둜 이동\n[font=default-semibold][color=#84CDEC]Shift-클릭[/color][/font]ν•˜μ—¬ __3__둜 이동 -attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -shift_to_paste=[font=default-semibold][color=#84CDEC]Shift-클릭[/color][/font]으둜 λΆ™μ—¬λ„£κΈ° - - -pl_subfactory=ν•˜μœ„ 곡μž₯ -pu_subfactory=ν•˜μœ„ 곡μž₯ -pl_line=라인 -pu_line=라인 -pl_floor=μΈ΅ -pu_floor=μΈ΅ -pl_item=μ•„μ΄ν…œ -pu_item=μ•„μ΄ν…œ -pl_product=μƒμ‚°ν’ˆ -pu_product=μƒμ‚°ν’ˆ -pl_byproduct=λΆ€μ‚°λ¬Ό -pu_byproduct=λΆ€μ‚°λ¬Ό -pl_ingredient=재료 -pu_ingredient=재료 -pl_fuel=μ—°λ£Œ -pu_fuel=μ—°λ£Œ -pl_recipe=μ œμž‘λ²• -pu_recipe=μ œμž‘λ²• -pl_machine=기계 -pu_machine=기계 -pl_module=λͺ¨λ“ˆ -pu_module=λͺ¨λ“ˆ -pl_beacon=μ‹ ν˜ΈκΈ° -pu_beacon=μ‹ ν˜ΈκΈ° -pl_belt=벨트 -pu_belt=벨트 -pl_lane=레인 -pu_lane=레인 -pl_wagon=ν™”λ¬Όμ°¨ -pu_wagon=ν™”λ¬Όμ°¨ -pl_stack=묢음 - -l_fluid=유체 -u_power=μ „λ ₯ diff --git a/factoryplanner_1.1.72/locale/pt-BR/config.cfg b/factoryplanner_1.1.72/locale/pt-BR/config.cfg deleted file mode 100644 index 2b2fb849..00000000 --- a/factoryplanner_1.1.72/locale/pt-BR/config.cfg +++ /dev/null @@ -1,497 +0,0 @@ -[mod-name] -#factoryplanner=Factory Planner - -[mod-description] -#factoryplanner=This mod allows you to plan your production in advance, specifying the recipes and machines that make up each assembly line. It provides powerful features that are fast and intuitive to use, so you can focus on actually building your factory. - -[controls] -fp_toggle_interface=Abrir/fechar -fp_toggle_compact_view=Ativar/desativar interface compacta -fp_toggle_pause=Ativar/desativar pausa -fp_floor_up=Subir um nΓ­vel -fp_refresh_production=Atualizar produΓ§Γ£o -fp_cycle_production_views=Trocar visualizaΓ§Γ£o -fp_confirm_dialog=Confirmar diΓ‘logo -fp_focus_searchfield=Focar busca - -[controls-description] -fp_toggle_interface=Abrir/fechar interface principal -fp_toggle_compact_view=Seleciona entre a interface normal e a interface compacta -fp_toggle_pause=Ativa/desativa a pausa do jogo enquanto a interface estiver aberta -fp_floor_up=Mostra o plano de produΓ§Γ£o do nΓ­vel imediatamente acima -fp_refresh_production=Atualiza o plano de produΓ§Γ£o -fp_cycle_production_views=Navega entre as diferentes visualizaΓ§Γ΅es do plano de produΓ§Γ£o -fp_confirm_dialog=Confira qualquer diΓ‘logo modal, mesmo se nenhum campo de texto estiver em foco -fp_focus_searchfield=Foca o cursor no campo de busca por produtos, se possΓ­vel - -[mod-setting-name] -fp_display_gui_button=Mostrar botΓ£o de abrir/fechar [img=info] -fp_products_per_row=Largura da interface [img=info] -fp_subfactory_list_rows=Altura da interface [img=info] -#fp_default_timescale=Default timescale [img=info] -fp_view_belts_or_lanes=Esteiras ou faixas [img=info] -#fp_prefer_product_picker=Prefer product picker [img=info] -#fp_prefer_matrix_solver=Prefer matrix solver [img=info] - -[mod-setting-description] -fp_display_gui_button=iMostra o botΓ£o no canto superior direito da tela que abre/fecha a interface principal. -fp_products_per_row=Define a largura da interface principal; este valor indica quantos produtos sΓ£o exibidos em casa linha. -fp_subfactory_list_rows=Define a altura da interface principal; este valor indica quantos nomes de subfΓ‘bricas sΓ£o exibidos. -#fp_default_timescale=Choose the timescale that any new subfactory should be created with. -fp_view_belts_or_lanes=Indica se vocΓͺ prefere visualizar a capacidade de produΓ§Γ£o/transporte de items em faixas individuais ou em esteiras cheias. -#fp_prefer_product_picker=Decide whether adding new subfactories should start with choosing a product or a subfactory name. -#fp_prefer_matrix_solver=Decide whether new subfactories should enable the matrix solver instead of the traditional one. - -[string-mod-setting] -fp_default_timescale-one_second=1 segundo -fp_default_timescale-one_minute=1 minuto -fp_default_timescale-one_hour=1 hora -fp_view_belts_or_lanes-belts=Esteiras -fp_view_belts_or_lanes-lanes=Faixas - -[shortcut-name] -#fp_open_interface=Open Factory Planner - -[item-name] -#fp_beacon_selector=Beacon Selector - -[command-help] -#fp_reset_prototypes=Reconstructs the various prototypes from the base game data. Shouldn’t ever be needed. - -[fp] -# Porter dialog -import=Importar -export=Exportar -#validity=Validity -#location=Location -#import_instruction_1=Paste your [font=default-bold]factory exchange string[/font] -#import_instruction_2=Choose the subfactories you’d like to import -#export_instruction=Choose the subfactories that you’d like to export [img=info] -#export_instruction_tt=This will generate a [font=default-bold]factory exchange string[/font] which is used to share your subfactories with other people or to import it in one of your other worlds. It does not generate a blueprint string! -#import_button_tooltip=Import string -#export_button_tooltip=Generate factory exchange string -#importer_decoding_failure=The given string could not be properly decoded. This is due to it being malformed. Try exporting the subfactories again, and make sure to copy the entire string. -#importer_migration_failure=The given string is from an older version of Factory Planner and could not be migrated. This can be due to it being too old and no longer supported, due to the data being corrupted in some way, or due to a programming error. If you think this string is valid, please contact the developer (me!) on the mod portal. -#importer_unpacking_failure=The given string could not be properly unpacked and validated. This can be due to the data being corrupted in some way or due to a programming error. If you think this string is valid, please contact the developer (me!) on the mod portal. -#importer_issue_import_string=Import a valid subfactory exchange string -#importer_issue_select_subfactory=Select at least one subfactory to import - -# Tutorial dialog -#tutorial=Tutorial -#interface=Interface -#usage=Usage -#matrix_solver=Matrix Solver -#interactive_tutorial_title=Interactive Tutorial -#interactive_tutorial_text=The best way to familiarize yourself with Factory Planner is by just jumping right in and exploring it yourself. To that end, I have included an example subfactory that will show off some of this mod’s most important features. You can add it by clicking the button below. You can also activate [font=default-semibold]Tutorial Mode[/font], which shows all the keyboard combinations that are possible on important buttons all over the interface. -#create_example=Create example -#create_example_error=The example subfactory can’t be created because it is not compatible with the current set of mods -#tutorial_mode=Tutorial Mode -#interface_tutorial_title=Interactions -#interface_tutorial_text=The interface is set up so similar actions share the same shortcuts, making it easier to get an intuitive feel for how to achieve certain results. You’ll just have to internalize these basic interactions, then use them everywhere: -#interface_controls=β€’ [font=default-semibold][color=#84CDEC]Left-click[/color][/font]: Select/Use\nβ€’ [font=default-semibold][color=#84CDEC]Right-click[/color][/font]: Edit\nβ€’ [font=default-semibold][color=#84CDEC]Control + Right-click[/color][/font]: Delete\nβ€’ [font=default-semibold][color=#84CDEC]Shift + Right-click[/color][/font]: Copy\nβ€’ [font=default-semibold][color=#84CDEC]Shift + Left-click[/color][/font]: Paste -#interface_controls_recipebook=\nβ€’ [font=default-semibold][color=#84CDEC]Alt + Right-click[/color][/font]: Open in Recipe Book - -# Usage -#tutorial_usage_text=First, you will need to create a subfactory. This is the basic structure that contains some (mostly independent) part of your factory. Give it a name and off you go. It will have some inputs (ingredients), some outputs (products and byproducts), and consume a certain amount of energy. You can also set the timescale you want to work with, or scribble down some notes.\n\nWhat you are interested in are the products, so you will need to add the ones you want to produce. To do that, simply [font=default-semibold][color=#84CDEC]left-click[/color][/font] the [font=default-semibold]+[/font]-button, select the product you want and specify the amount that should be produced. It will have a red background, and, when hovering over it, you will see that there is currently [font=default-semibold]0[/font] of it being produced.\n\nTo change that, you [font=default-semibold][color=#84CDEC]left-click[/color][/font] on it. If there is only one recipe to produce this product, it will be added right away. Otherwise, you will have the choice of which recipe to use. Either way, a new recipe will show up on the top floor of your subfactory. You can change the machine being used or add some modules and beacons.\n\nNow to further break down the product you want to produce, you can [font=default-semibold][color=#84CDEC]left-click[/color][/font] on the ingredients of an existing recipe. This will once again add a recipe, changing the ingredients needed for the whole subfactory. You can continue breaking down your product in this way until you arrive at only plates as ingredients for example, or drill even deeper and add your mining and smelting recipes too. Whatever is most convenient for you and your existing factory.\n\nFor items with a large amount of intermediate products, your collection of recipes can get quite messy quite quickly. To deal with this, you can have multiple floors with different recipes on each of them. To create a so-called subfloor, [font=default-semibold][color=#84CDEC]left-click[/color][/font] on the recipe icon of the recipe you want to work out further. This gets you a subfloor (notice the level will be displayed as [font=default-semibold]2[/font]) in which you can add recipes just like before. The big difference being that you only need to worry about the ingredients of the recipe you clicked on.\n\nAnd those are the basics! There are some more advanced features that come in handy, but this should get you started. Create the example subfactory (in the [font=default-semibold]Interface[/font] tab) if you want to play around with a basic production line. - -# Matrix Solver -#tutorial_matrix_solver_text=The matrix solver is an alternative method for updating the production table. By default Factory Planner solves the table from top to bottom, while the matrix solver solves every line simultaneously with a system of equations. The matrix solver can be tricky to use, but is also very powerful. For example, it handles recycling, voiding, and loops. \n\nEach subfactory is set to one of two solvers, the sequential solver (default) or the matrix solver. To switch to the matrix solver, press the button called "Matrix Solver." The matrix solver will stay activated until the button is pressed again, and will automatically re-run when recipes are changed. \n\nEnabling the matrix solver also enables byproduct selection. To remove a byproduct, click either a recipe byproduct within a line or a subfactory byproduct at the top. This will show recipes where byproduct is an ingredient, including voids. \n\nSometimes the matrix solver requires certain items be set to "unrestricted." Normally items are balanced out, meaning they are consumed as fast as they are produced. However, "unrestricted items" do not balance out, and will appear as final ingredients or byproducts. If unrestricted items are required, a dialog will open to select unrestricted items. Unrestricted items are often needed when a subfactory contains a loop. To open this dialog, press the gear icon to the right of the matrix solver. \n\nOne last requirement is the recipes must be linearly independent. This means there can only be one unique solution for the current subfactory. In other words, the matrix solver will not work if there are multiple ways to create the given products. If the subfactory has linearly dependent recipes, try removing redundant recipes until the error goes away. This requirement holds across all subfloors. - -# Item options dialog -options_item_title=Definir quantidade de __1__ -options_item_text=Escolha uma quantidade para ’__1__’ -options_item_amount=Quantidade -options_item_amount_tt=Escolha a quantidade exata de __1__ que vocΓͺ quer quer que esta receita __2__. Isso irΓ‘ ajustar a porcentagem desta linha automaticamente. -options_subfactory_ingredient_amount_tt=Escolha a quantidade exata deste ingrediente que vocΓͺ quer que esta subfΓ‘brica consuma. Isso irΓ‘ ajustar a quantidade dos produtos automaticamente. - -# Utility dialog -utilities=UtilitΓ‘rios -utility_title_components=Componenentes -#utility_title_components_tt=Shows the machines and modules needed to construct the current subfactory/floor. Can only incorporate beacons and beacon-modules when their ’Beacon Total’ is set. Rounds up the amounts on every line individually. -#utility_title_notes=Notes -#components_needed_tt=__1__\n[font=default-bold]__2__[/font] in inventory / [font=default-bold]__3__[/font] needed\n[font=default-semibold][color=#84CDEC]Click[/color][/font] to handcraft this item -#no_components_needed=No __1__ needed -utility_blueprint=Projeto -#utility_blueprint_tt=Convert all the items that your inventory is missing into a blueprint string containing constant combinators. These can then be connected to a requester chest to have them delivered to you. -#utility_blueprint_no_combinator=Constant combinator prototype not found -#utility_no_items_necessary=Your inventory already contains all the necessary items to construct this __1__ -request_items=Solicitar itens -#request_items_tt=Requests all the items that your inventory is missing to construct this __1__. [font=default-semibold]\n[color=#84CDEC]Note:[/color][/font] This uses construction bots, not logistics bots. -cancel_request=Cancelar solicitaΓ§Γ£o -#request_logistics_not_researched=Robotics technology needs to be researched to enable this functionality -#request_no_character=You need to have a character associated to you to be able to request items -#utility_no_character=Can’t handcraft without associated character -utility_no_recipes=Nenhuma receita Γ© capaz de produzir este item -utility_no_demand=A demanda por este item jΓ‘ estΓ‘ satisfeita -#utility_no_resources=Not enough resources to handcraft - -# Preferences -preferences=PreferΓͺncias -#preferences_support=Support the mod at [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]! -#preferences_info=These preferences contain settings that you adjust often\nover the course of a game. For general settings, go to\nMain Menuβ†’Settingsβ†’Mod Settingsβ†’Factory Planner. -preference_general_title=PreferΓͺncias gerais -#preference_general_title_tt=Some general preferences that you might want to change regularly -preference_general_ignore_barreling_recipes=Ignorar receitas de empilhamento e enchimento/esvaziamento de barris -preference_general_ignore_barreling_recipes_tt=Permite que vocΓͺ ignore receitas que empilhas/desmpilham itens e enchem/esvaziam barris (apenas para mods compatΓ­veis) -preference_general_ignore_recycling_recipes=Ignorar receitas de reciclagem -preference_general_ignore_recycling_recipes_tt=Permite que vocΓͺ ignore receitas que reciclam um item jΓ‘ existente (apenas para mods compatΓ­veis) -#preference_general_ingredient_satisfaction=Ingredient satisfaction -#preference_general_ingredient_satisfaction_tt=Shows whether the ingredient-demands of a recipe are satisfied by the recipes below them -preference_general_round_button_numbers=Arredondar nΓΊmeros nos botΓ΅es -preference_general_round_button_numbers_tt=Arredonda os nΓΊmeros nos botΓ΅es seletores de mΓ‘quinas, esteiras e faixas -#preference_production_title=Production table columns -#preference_production_title_tt=This allows you to enable some additional columns in the production table -#preference_production_done_column=Mark recipe as done -#preference_production_done_column_tt=Adds a column with a button that allows you to mark a recipe as done, which serves as purely visual information for you and has no effect on the recipe itself -preference_production_pollution_column=PoluiΓ§Γ£o -preference_production_pollution_column_tt=Mostra uma coluna com a poluiΓ§Γ£o gerada por cada receita -preference_production_line_comment_column=ComentΓ‘rios da receita -preference_production_line_comment_column_tt=Mostra uma coluna com um campo texto para anotaΓ§Γ΅es -preference_mb_defaults_title=MΓ³dulos favotiros -preference_mb_defaults_title_tt=Define os mΓ³dulos que serΓ£o usados em receitas novas -preference_mb_default_machine=PrimΓ‘rio -preference_mb_default_machine_tt=O mΓ³dulo que serΓ‘ preferencialmente adicionado a novas receitas -preference_mb_default_machine_secondary=SecundΓ‘rio -preference_mb_default_machine_secondary_tt=Se o primeiro mΓ³dulo nΓ£o for compatΓ­vel com a receita, o segundo mΓ³dulo serΓ‘ usado no lugar dele -preference_mb_default_beacon=MΓ³dulo -preference_mb_default_beacon_tt=O mΓ³dulo inserido por padrΓ£o em todo novo transmissor -preference_mb_default_beacon_amount=Quantidade -preference_mb_default_beacon_amount_tt=Define quantos transmissores afetam cada mΓ‘quina de uma nova receita -preference_default_belts_title=Esteira favorita -preference_default_belts_title_tt=Define o tipo de esteira usada ao calcular a demanda em esteiras/faixas ou ao especificar a quantidade de itens em esteiras/faixas -preference_default_beacons_title=Transmissor favorito -preference_default_beacons_title_tt=Define o transmissor selecionado ao adicionar um a uma receita -preference_default_fuels_title=CombustΓ­vel favorito -preference_default_fuels_title_tt=Define o combustΓ­vel escolhido por padrΓ£o ao adicionar uma mΓ‘quina que usa energia a combustΓ£o -preference_default_machines_title=MΓ‘quina favorita -preference_default_machines_title_tt=Define a mΓ‘quina usada por padrΓ£o ao criar uma receita em uma categoria.\n[font=default-semibold][color=#84CDEC]Shift-clique[/color][/font] qualquer mΓ‘quina para defini-la em todas as outras categorias similares. -preference_default_wagons_title=VagΓ£o favorito -preference_default_wagons_title_tt=Define o tipo de vagΓ£o usado para calcular a demanda por itens em vagΓ΅es - -# Recipe dialog -#recipe_instruction=Choose a recipe to __1__ ’__2__’ -#show=Show -unresearched_recipes=Receitas ainda nΓ£o pesquisadas -hidden_recipes=Receitas ocultas -#no_recipe_found=No recipes match your filter conditions - -# Remote interfaces -#interface_name_fnei=FNEI -#interface_name_wiiruf=WIIRUF -#interface_name_recipebook=Recipe Book - -# Generator -fluid_at_temperature=__1__ a __2__ __3__ - -# Modal dialogs -submit=Confirmar -delete=Apagar -cancel=Cancelar -#confirm_dialog_tt=- Press __CONTROL__fp_confirm_dialog__ to confirm - -#cancel_dialog_tt=- Press __CONTROL__toggle-menu__ to cancel - -#search_button_tt=- Press __CONTROL__focus-search__ to focus searchfield - -#close_button_tt=- Press __CONTROL__toggle-menu__ to close - -#searchfield_tt=Filter results using their natural language names -#searchfield_not_ready_tt=Natural language search not ready yet, please wait -#warning_with_icon=[img=fp_sprite_warning_red] __1__ - -# Picker dialog -#amount_by=Amount by __1__ -no_item_found=Nenhum item corresponde Γ  sua busca -picker_issue_select_item=Selecione o item que vocΓͺ quer adicionar -picker_issue_enter_amount=Escolha a quantidade em itens ou em esteiras - -# Matrix dialog -#matrix_free_items=Unrestricted items -#matrix_constrained_items=Choose __1__ unrestricted __2__. Unrestricted items may\nbecome byproducts or ingredients, depending\non the planner’s solution. -#matrix_linearly_dependent_recipes=Linearly dependent recipes detected - -# Subfactory dialog -subfactory_dialog_description=Escolha um nome para a subfΓ‘brica -subfactory_dialog_name=None -#subfactory_dialog_name_tt=The subfactory name allows rich text, which can be added using the buttons below -#subfactory_dialog_rich_text=Rich Text -#subfactory_dialog_rich_text_tt=Use these selectors to conveniently add rich text to the subfactory name. Not that you can also just type or paste in any rich text yourself. -#subfactory_dialog_name_empty=The subfactory’s name can not be empty - -# Machine dialog -machine_dialog_description=Configure a mΓ‘quina para ’__1__’ -machine_does_not_use_fuel=nΓ£o usa combustΓ­vel -machine_limit=Limite -machine_limit_tt=Limite o nΓΊmero de mΓ‘quinas que essa linha irΓ‘ usar. A quantidade de mΓ‘quinas efetivamente usadas pode ser menor, caso nem todas sejam necessΓ‘rias. -machine_force_limit=ForΓ§ar limite -machine_force_limit_tt=ForΓ§a o nΓΊmero de mΓ‘quinas a ser exatamente a quantidade especificada acima, mesmo que isso causa superproduΓ§Γ£o. SΓ³ faz sentido quando habilitado junto com um limite de mΓ‘quinas. - -# Beacon dialog -beacon_dialog_description_add=Adicionar transmissores a ’__1__’ -beacon_dialog_description_edit=Configure os transmissores para ’__1__’ -#beacon_amount_tt=This specifies how many beacons each individual machine will be affected by. You can put a decimal number here, which could be used to reflect the fact that some of your machines might be covered by a different amount of beacons. -#beacon_total=Total -#beacon_total_tt=This specifies the absolute amount of beacons that you use for this recipe in your actual factory. That information is then included in the energy consumption calculations. -#beacon_selector_tt=Use a selection tool to count the beacons in your already-built factory -beacon_issue_set_amount=Escolha uma quantidade de transmissores maior que zero -beacon_issue_no_modules=Escolha pelo menos um mΓ³dulo - -# Title bar -#switch_to_compact_view=Switch to compact view\n- Press __CONTROL__fp_toggle_compact_view__ to switch - -#pause_on_interface=Toggle to automatically pause the game in the background when the main interface is open (Singleplayer only)\n- Press __CONTROL__fp_toggle_pause__ to toggle pause - -#close_interface=Close this interface\n- Press __CONTROL__fp_toggle_interface__ to close - - -# Subfactory list -#action_open_archive_tt=Open the subfactory archive\n__1__ -#archive_empty=[font=default-semibold]- The archive is currently empty -[/font] -#archive_filled=[font=default-semibold]- The archive currently contains __1__ __2__ -[/font] -#action_close_archive_tt=Close the subfactory archive -#action_import_subfactory=Import subfactories using a string generated in another save -#action_export_subfactory=Export subfactories to a string that can be shared with others -#action_archive_subfactory=Move the selected subfactory to the archive -#action_unarchive_subfactory=Move the selected subfactory back out of archive -#action_duplicate_subfactory=Duplicate the selected subfactory, creating a perfect copy -#action_add_subfactory_by_name=Create a new subfactory\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] to choose a product right away -#action_add_subfactory_by_product=Pick an item for a new subfactory\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] to give it a name first -#action_edit_subfactory=Edit the name of the selected subfactory -#action_trash_subfactory=Trash the selected subfactory\nIt will be preserved in the archive for __1__ minutes -#action_delete_subfactory=Delete the selected subfactory irreversibly -#subfactory_trashed=\n[font=default-bold]Trashed[/font] - automatic deletion in __1__ __plural_for_parameter_1_{1=minute|rest=minutes}__ -#subfactory_invalid=\n[font=default-bold]Invalid[/font] - needs to be repaired - -# Subfactory info -subfactory_info=InformaΓ§Γ΅es da subfΓ‘brica -no_subfactory=nenhuma subfΓ‘brica selecionada -#subfactory_needs_repair=This subfactory has become invalid because the set of active mods has changed. You can resolve this by either repairing it, or by re-activating the missing mods. Repairing removes everything that has become invalid. -#repair_subfactory=Repair subfactory -#timescale=Timescale -#timescale_tt=The timescale sets how quickly items are produced. For example, selecting [font=default-bold]1m[/font] and adding a product of 400 green circuits means you want to produce 400 circuits [font=default-bold]per minute[/font]. -mining_productivity=Produtividade de mineraΓ§Γ£o -mining_productivity_tt=O bΓ΄nus de produtividade de mineraΓ§Γ£o usado para cΓ‘lculo. Normalmente, este valor acompanha as suas tecnologias pesquisas, mas vocΓͺ pode escolhΓͺ-lo manualmente. Para voltar ao acompanhamento automΓ‘tico, limpe a caixa de texto e confirme.The current mining productivity bonus. By default, it tracks your research progress, but you can override the percentage manually. -#override=Override -solver_choice=Algoritmo -solver_choice_tt=Escolha qual dos algoritmos para usar nesta subfΓ‘brica. O algoritmo tradicional analisa cada receita sequencialmente e satisfaz suas demandas imediatas. O algoritmo matricial Γ© capaz de lidar com ciclos e produtos residuais, mas ocasionalmente precisa de configuraΓ§Γ£o adicional. -solver_choice_traditional=Tradicional -solver_choice_matrix=Matricial -solver_choice_configure=Configurar o algoritmo matricial -subfactory_modset_changes=Seus mods ativos mudaram. -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]Estes mods foram removidos:[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]Estes mods foram adicionados:[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]Estes mods foram atualizados:[/font][/color] -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__ β†’ v__3__ - -# View state -view_state_tt=__1__\n- Pressione __CONTROL__fp_cycle_production_views__ para navegar entre visualizaΓ§Γ΅es - -#items_per_timescale=Sets the number on item buttons to how many of them will be produced/consumed per __1__. -#belts_or_lanes=Sets the number on item buttons to how many __1__ of your preferred belt type will be needed to transport the items. For fluids, it assumes them being barreled at [font=default-bold]50 fluid per barrel[/font]\nConfigured to use __2__ [font=default-bold]__3__[/font]. -#wagons_per_timescale=Sets the number on item buttons to how many cargo or fluid wagons will be filled by them per __1__.\nConfigured to use __2__ [font=default-bold]__3__[/font] or __4__ [font=default-bold]__5__[/font]. -items_per_second_per_machine=Sets the number on item buttons to how many of them per second a single machine will produce/consume. Isso ajuda a estimar quantos braΓ§os mecΓ’nicos serΓ£o necessΓ‘rios. - -# Production box -refresh_production=Atualiza o plano de produΓ§Γ£o abaixo\n- Pressione __CONTROL__fp_refresh_production__ para atualizar - -production=ProduΓ§Γ£o -level=NΓ­vel -floor_up_tt=Subir um nΓ­vel\n- Pressione __CONTROL__fp_floor_up__ para subir- -floor_top_tt=Subir para o nΓ­vel superior -#utility_dialog_tt=Open the utility dialog -#production_instruction_subfactory=Add a subfactory by clicking the green ’+’-button in the top left -#production_instruction_product=Add a product by clicking the gray ’+’-button in the products-box above -#production_instruction_recipe=Add a recipe by left-clicking the product in the products-box above - -# Production table -#column_done_tt=Mark recipe as done for your own visual benefit -#column_percentage_tt=This percentage determines how much of the demand for the products that this recipe produces should actually be fulfilled by this recipe. The calculation only updates after you confirm your changes by pressing [font=default-semibold][color=#84CDEC]Enter[/color][/font]. -column_comment=ComentΓ‘rio -recipe_inactive=receita inativa -#recipe_subfloor_attached=subfloor attached -#recipe_consumes_byproduct=consumes byproduct -subfloor_machine_count=__1__ __2__ em uso neste subnΓ­vel -machine_limit_force=Limite exato aplicado [__1__] -machine_limit_enforced=Limite aplicado [__1__] -machine_limit_set=Limite definido [__1__] -add_beacon=Adicionar transmissor -in_total=__1__ no total -priority_product=Produto prioritΓ‘rio -raw_ore=MinΓ©rio bruto - -# Compact frame -#switch_to_main_view=Switch to main view\n- Press __CONTROL__fp_toggle_compact_view__ to switch - -#compact_recipe_subfloor_tt=[font=default-semibold][color=#84CDEC]Left-click[/color][/font] to open the subfloor - -# Clipboard -copied_into_clipboard=__1__ copiado -pasted_from_clipboard=__1__ colado -clipboard_empty=Sua Γ‘rea de transferΓͺncia estΓ‘ vazia -#clipboard_incompatible_class=Can't paste __1__ on __2__ -clipboard_incompatible=__1__ colado Γ© incompatΓ­vel -clipboard_already_exists=__1__ colado jΓ‘ existe -clipboard_no_empty_slots=Nenhum slot de mΓ³dulo disponΓ­vel -#clipboard_recipe_irrelevant=Pasted line irrelevant to this floor - -# Tutorial Mode -#tut_action_line=\n[font=default-semibold][color=#84CDEC]__1__[/color][/font] to __2__ -#tut_open_in_recipebook=\n[font=default-semibold][color=#84CDEC]Alt + Right-click[/color][/font] to open in Recipe Book - -tut_left=BotΓ£o esquerdo -tut_right=BotΓ£o direito -tut_shift=Shift -tut_alt=Alt -tut_control=Control - -tut_select=selecionar -tut_edit=editar -tut_delete=apagar -tut_change=modificar -tut_copy=copiar -tut_paste=colar -tut_add_recipe=adicionar receita -tut_move_left=mover para a esquerda -tut_move_right=mover para a direita -tut_open_subfloor=abrir subnΓ­vel -#tut_toggle=toggle -tut_set_limit=escolher limite -tut_reset_to_default=restaurar padrΓ΅es -tut_put_into_cursor=selectionar no cursor -tut_add_recipe_to_end=adicionar receita -tut_add_recipe_below=add recipe imediatamente abaixo -tut_specify_amount=escolher quantidade -tut_prioritize=priorizar - -# Effects tooltip -#effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=Consumo de energia -speed=Velocidade -productivity=Produtividade -pollution=PoluiΓ§Γ£o -base_prod=Produtividade-base -mining_prod=Produtividade de mineraΓ§Γ£o -effect_maxed=(mΓ‘ximo) - -# Messages -error_no_relevant_recipe=Nenhuma receita produz este item -error_no_enabled_recipe=Nenhnuma receita ative produz este item (ative em "PreferΓͺncias" β†’) -error_no_compatible_machine=Nenhuma mΓ‘quina Γ© capaz de produzir esta receita -#error_no_subfloor_on_byproduct_recipes=Recipes that consume byproducts can’t have subfloors -#error_no_new_subfloors_in_archive=Can’t add subfloors to archived subfactories -#error_list_item_cant_be_shifted=This __1__ can’t be moved __2__ -#error_recipebook_version_incompatible=Recipe Book’s version is not compatible; Try updating both mods -#error_recipebook_lookup_failed=The clicked __1__ could not be found in Recipe Book -error_linearly_dependant_recipes=Solver matricial desativado; certifique-se de que hΓ‘ apenas uma receita por produto -error_recipe_wrong_floor=Receitas __1__ sΓ³ podem ser adicionadas ao nΓ­vel superior da subfΓ‘brica -warning_no_matrix_configuration_needed=O algoritmo matricial nΓ£o precisa de configuraΓ§Γ£o adicional -warning_recipe_disabled=Esta receita ainda nΓ£o foi pesquisada, e portanto vocΓͺ ainda nΓ£o pode produzi-la -warning_module_not_compatible=Seu __1__ favorito nΓ£o Γ© compatΓ­vel com esta receita -#warning_no_prioritizing_single_product=Recipes with a single relevant product can’t be prioritized -#hint_tutorial=If you are new to Factory Planner, consider taking a look the the tutorial ⟢ -#hint_byproducts_removed=Disabling the matrix solver removes all byproduct recipes - -# Units -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=P -unit_celsius=Β°C -unit_second=s -unit_minute=m -unit_hour=h -second=segundo -minute=minuto -hour=hora - -# General -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] - -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) - -selected=selecionadod -preferred=favorito -satisfied=satisfeito -valid=vΓ‘lido -invalid=invΓ‘lido -increased=aumentou -decreased=diminuiu -capped=limitado - -on=Ligado -off=Desligado -left=esquerda -right=direita -up=acima -down=abaixo -top=topo -bottom=fundo - -add=Adicionar -new=Novo -edit=Editar -choose=Escolhar -produce=produzir -consume=consumir - -#none=None -#crafting_time=Crafting Time -amount=Quantidade - -factory=FΓ‘brica -#archive=Archive - -#toggle_interface=FP -#toggle_interface_tt=Toggle the Factory Planner interface - -#energy_consumption=Energy consumption -effectivity=EficiΓͺncia -module_slots=Slots de mΓ³dulo -fuel_value=Valor energΓ©tico do combustΓ­vel -#emissions_multiplier=Emissions multiplier -#throughput=Throughput -#crafting_speed=Crafting speed -storage=Armazenamento - -#move_row_tt=Move this __1__ __2__\n[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] to move it to the __3__ -#attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -#shift_to_paste=[font=default-semibold][color=#84CDEC]Shift-click[/color][/font] to paste - -# Locale prefixes: s = singular; p = plural; l = lowercase; u = uppercase -pl_subfactory=__plural_for_parameter_1_{1=subfΓ‘brica|rest=subfΓ‘bricas}__ -pu_subfactory=__plural_for_parameter_1_{1=SubfΓ‘brica|rest=SubfΓ‘bricas}__ -pl_line=__plural_for_parameter_1_{1=linha|rest=linhas}__ -pu_line=__plural_for_parameter_1_{1=Linha|rest=Linhas}__ -pl_floor=__plural_for_parameter_1_{1=nΓ­vel|rest=nΓ­veis}__ -pu_floor=__plural_for_parameter_1_{1=NΓ­vel|rest=NΓ­veis}__ -pl_item=__plural_for_parameter_1_{1=item|rest=itens}__ -pu_item=__plural_for_parameter_1_{1=Item|rest=Itens}__ -pl_product=__plural_for_parameter_1_{1=produto|rest=produtos}__ -pu_product=__plural_for_parameter_1_{1=Produto|rest=Produtos}__ -pl_byproduct=__plural_for_parameter_1_{1=derivado|rest=derivados}__ -pu_byproduct=__plural_for_parameter_1_{1=Derivado|rest=Derivados}__ -pl_ingredient=__plural_for_parameter_1_{1=ingrediente|rest=ingredientes}__ -pu_ingredient=__plural_for_parameter_1_{1=Ingrediente|rest=Ingredientes}__ -pl_fuel=__plural_for_parameter_1_{1=combustΓ­vel|rest=combustΓ­veis}__ -pu_fuel=__plural_for_parameter_1_{1=CombustΓ­vel|rest=CombustΓ­veis}__ -pl_recipe=__plural_for_parameter_1_{1=receita|rest=receitas}__ -pu_recipe=__plural_for_parameter_1_{1=Receita|rest=Receitas}__ -pl_machine=__plural_for_parameter_1_{1=mΓ‘quina|rest=mΓ‘quinas}__ -pu_machine=__plural_for_parameter_1_{1=MΓ‘quinas|rest=MΓ‘quinas}__ -pl_module=__plural_for_parameter_1_{1=mΓ³dulo|rest=mΓ³dulos}__ -pu_module=__plural_for_parameter_1_{1=MΓ³dulos|rest=MΓ³dulos}__ -pl_beacon=__plural_for_parameter_1_{1=transmissor|rest=transmissores}__ -pu_beacon=__plural_for_parameter_1_{1=Transmissor|rest=Transmissores}__ -pl_belt=__plural_for_parameter_1_{1=esteira|rest=esteiras}__ -pu_belt=__plural_for_parameter_1_{1=Esteira|rest=Esteiras}__ -pl_lane=__plural_for_parameter_1_{1=faixas|rest=faixas}__ -pu_lane=__plural_for_parameter_1_{1=Faixa|rest=Faixas}__ -pl_wagon=__plural_for_parameter_1_{1=vagΓ£o|rest=vagΓ΅es}__ -pu_wagon=__plural_for_parameter_1_{1=VagΓ£o|rest=VagΓ΅es}__ -pl_stack=__plural_for_parameter_1_{1=pilha|rest=pilhas}__ - -l_fluid=fluido -u_power=Energia diff --git a/factoryplanner_1.1.72/locale/ru/config.cfg b/factoryplanner_1.1.72/locale/ru/config.cfg deleted file mode 100644 index 19360e20..00000000 --- a/factoryplanner_1.1.72/locale/ru/config.cfg +++ /dev/null @@ -1,443 +0,0 @@ -[mod-name] -factoryplanner=Factory Planner (ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ) - -[mod-description] -factoryplanner=Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ позволяСт Π²Π°ΠΌ Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ производство, ΡƒΠΊΠ°Π·Π°Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит каТдая сборочная линия. Он прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ быстрыС ΠΈ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятныС Π² использовании, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ своСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. - -[controls] -fp_toggle_interface=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ -fp_toggle_compact_view=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ -fp_toggle_pause=ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ/ΡΠ½ΡΡ‚ΡŒ с ΠΏΠ°ΡƒΠ·Ρ‹ -fp_refresh_production=ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ производство -fp_cycle_production_views=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄Π°ΠΌΠΈ -fp_up_floor=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅ -fp_top_floor=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° самый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ -fp_reverse_cycle_production_views=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄Π°ΠΌΠΈ (Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС) -fp_confirm_dialog=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ -fp_focus_searchfield=Ѐокус Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ поиска - -[controls-description] -fp_toggle_interface=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ основной интСрфСйс -fp_toggle_compact_view=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ интСрфСйса -fp_toggle_pause=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ, ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΠΈ ΠΈΠ³Ρ€Ρƒ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ интСрфСйса -fp_refresh_production=ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ линию производства -fp_up_floor=Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΏΠΎΠ΄ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅ -fp_top_floor=Если Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΏΠΎΠ΄ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° самый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ -fp_cycle_production_views=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ производства -fp_reverse_cycle_production_views=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ производства (Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС) -fp_confirm_dialog=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ любой Π΄ΠΈΠ°Π»ΠΎΠ³, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ -fp_focus_searchfield=ЀокусируСт курсор Π½Π° строкС поиска, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. - -[mod-setting-name] -fp_display_gui_button=ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ" Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ экрана -fp_products_per_row=Π¨ΠΈΡ€ΠΈΠ½Π° интСрфСйса -fp_subfactory_list_rows=Высота интСрфСйса -fp_default_timescale=Π¨ΠΊΠ°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -fp_view_belts_or_lanes=Π Π΅ΠΆΠΈΠΌ отобраТСния ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° -fp_prefer_product_picker=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ -fp_prefer_matrix_solver=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ - -[mod-setting-description] -fp_display_gui_button=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ экрана. Она ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ основной интСрфСйс. -fp_products_per_row=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ интСрфСйса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π²Ρ‹Π±Ρ€Π°Π², сколько основных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ ряду. -fp_subfactory_list_rows=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ высоту интСрфСйса Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π²Ρ‹Π±Ρ€Π°Π², сколько всСго ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊ. -fp_default_timescale=УстанавливаСт ΡˆΠΊΠ°Π»Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. -fp_view_belts_or_lanes=УстанавливаСт Ρ€Π΅ΠΆΠΈΠΌ отобраТСния ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°: ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Ρ†Π΅Π»Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΄Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ (Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ»ΠΈ стороны) ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. -fp_prefer_product_picker=Π Π΅ΡˆΠΈΡ‚Π΅, слСдуСт Π»ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊ с Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ названия ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. -fp_prefer_matrix_solver=Π Π΅ΡˆΠΈΡ‚Π΅, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ вмСсто Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ. - -[string-mod-setting] -fp_default_timescale-one_second=1 сСкунда -fp_default_timescale-one_minute=1 ΠΌΠΈΠ½ΡƒΡ‚Π° -fp_default_timescale-one_hour=1 час -fp_view_belts_or_lanes-belts=Π¦Π΅Π»Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ -fp_view_belts_or_lanes-lanes=Линия ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° - -[shortcut-name] -fp_open_interface=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Factory Planner - -[item-name] -fp_beacon_selector=Π’Ρ‹Π±ΠΎΡ€ маяка - -[command-help] -fp_reset_prototypes=ΠŸΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠΉ вСрсии ΠΈΠ³Ρ€Ρ‹. НС Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. -fp_restart_translation=ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ поиск ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… названия Π½Π° СстСствСнном языкС. - -[fp] -import=Π˜ΠΌΠΏΠΎΡ€Ρ‚ -export=Экспорт -validity=ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ -location=РасполоТСниС -import_instruction_1=Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π²Π°ΡˆΡƒ [font=default-bold]строку ΠΎΠ±ΠΌΠ΅Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ[/font] -import_instruction_2=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ -export_instruction=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ -export_instruction_tt=Π‘ΡƒΠ΄Π΅Ρ‚ создана [font=default-bold]строка ΠΎΠ±ΠΌΠ΅Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ[/font], ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ваши ΠΈΠ³Ρ€Ρ‹ Π² Factorio. Π­Ρ‚ΠΎ Π½Π΅ строка Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°! -import_button_tooltip=Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку -export_button_tooltip=Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку ΠΎΠ±ΠΌΠ΅Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ -importer_decoding_failure=Данная строка Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π°, Ρ‚.ΠΊ. ΠΎΠ½Π° сформирована Π½Π΅Π²Π΅Ρ€Π½ΠΎ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ скопировали строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. -importer_migration_failure=Данная строка сдСлана Π² старой вСрсии Factory Planner ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Ссли ΠΎΠ½Π° ΠΎΡ‡Π΅Π½ΡŒ старая ΠΈ большС Π½Π΅ поддСрТиваСтся, ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ошибки. Если Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ с Π½Π΅ΠΉ всё Π² порядкС, поТалуйста, ΡΠ²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ (со ΠΌΠ½ΠΎΠΉ!) Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ ΠΌΠΎΠ΄ΠΎΠ². -importer_unpacking_failure=Данная строка Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π°. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Ссли ΠΎΠ½Π° ΠΎΡ‡Π΅Π½ΡŒ старая ΠΈ большС Π½Π΅ поддСрТиваСтся, ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Ρ‘Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ошибки. Если Π²Ρ‹ считаСтС, Ρ‡Ρ‚ΠΎ с Π½Π΅ΠΉ всё Π² порядкС, поТалуйста, ΡΠ²ΡΠΆΠΈΡ‚Π΅ΡΡŒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ (со ΠΌΠ½ΠΎΠΉ!) Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Π΅ ΠΌΠΎΠ΄ΠΎΠ². -importer_issue_import_string=Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку ΠΎΠ±ΠΌΠ΅Π½Π° ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ -importer_issue_select_subfactory=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° -tutorial=Руководство -interface=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ -pause=ΠŸΠ°ΡƒΠ·Π° -usage=ИспользованиС -matrix_solver=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ -interactive_tutorial_title=Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ руководсво -interactive_tutorial_text=ΠŸΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ самому - Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Для этого я создал ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ΄Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² список Ρ„Π°Π±Ρ€ΠΈΠΊ, Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½ΠΈΠΆΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ [font=default-semibold]Π Π΅ΠΆΠΈΠΌ обучСния[/font], Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ всС сочСтания клавиш, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΌΠΎΠ΄Π΅. -create_example=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -create_example_error=ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан, Ρ‚.ΠΊ. ΠΎΠ½ нСсовмСстим с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ΄ΠΎΠ² -tutorial_mode=Π Π΅ΠΆΠΈΠΌ обучСния -interface_tutorial_title=ВзаимодСйствия -interface_tutorial_text=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ настроСн Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ дСйствия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ сочСтания клавиш, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π’Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ эти Π±Π°Π·ΠΎΠ²Ρ‹Π΅ взаимодСйствия, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Π΅Π·Π΄Π΅: -interface_controls=β€’ __CONTROL_STYLE_BEGIN__Π›ΠšΠœ__CONTROL_STYLE_END__: Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ/Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ\nβ€’ __CONTROL_STYLE_BEGIN__ПКМ__CONTROL_STYLE_END__: Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ\nβ€’ __CONTROL_STYLE_BEGIN__Ctrl + ПКМ__CONTROL_STYLE_END__: Π£Π΄Π°Π»ΠΈΡ‚ΡŒ\nβ€’ __CONTROL_STYLE_BEGIN__Shift + ПКМ__CONTROL_STYLE_END__: ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ\nβ€’ __CONTROL_STYLE_BEGIN__Shift + Π›ΠšΠœ__CONTROL_STYLE_END__: Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ\nβ€’ __CONTROL_STYLE_BEGIN__Alt + Π›ΠšΠœ__CONTROL_STYLE_END__: Π’Π·ΡΡ‚ΡŒ Π² курсор -interface_controls_recipebook=\nβ€’ __CONTROL_STYLE_BEGIN__Alt + ПКМ__CONTROL_STYLE_END__: ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -tutorial_usage_text=Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. Π­Ρ‚ΠΎ основная структура, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ (Π² основном нСзависимыС) части Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π”Π°ΠΉΡ‚Π΅ Π΅ΠΉ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄. Π£ Π½Π΅Ρ‘ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Ρ‹ (ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹), Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ (ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ ΠΈ излишки), ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ количСство энСргии. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ.\n\nНас интСрСсуСт производство ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² список. Для этого просто __CONTROL_STYLE_BEGIN__Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅__CONTROL_STYLE_END__ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ [font=default-semibold]+[/font], Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ количСство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. Иконка ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ красный Ρ„ΠΎΠ½, ΠΈ ΠΏΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° Π½Π΅Ρ‘ курсора ΠΌΡ‹ΡˆΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ производится [font=default-semibold]0[/font] Π΅Π΄ΠΈΠ½ΠΈΡ†.\n\n__CONTROL_STYLE_BEGIN__Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅__CONTROL_STYLE_END__ ΠΏΠΎ Π½Π΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ количСство. Если сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ производства, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ сразу ΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² список. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚. Π’ ΠΈΡ‚ΠΎΠ³Π΅ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ появится Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ вашСй ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Ρ‘ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ маяки.\n\nΠ’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ __CONTROL_STYLE_BEGIN__Ρ‰Ρ‘Π»ΠΊΠ°Ρ‚ΡŒ__CONTROL_STYLE_END__ ΠΏΠΎ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π­Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π² список, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π΅ всСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. МоТно ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π½Π° составныС части Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π²Ρ…ΠΎΠ΄Π΅ Π½Π΅ останутся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ»ΠΈΡ‚Ρ‹, ΠΈΠ»ΠΈ ΠΏΠΎΠΉΡ‚ΠΈ дальшС ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π°Π²ΠΊΠΈ Ρ€ΡƒΠ΄Ρ‹. Π’Ρ‹ сами Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для вашСй Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.\n\nΠ‘ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ, производство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мноТСства ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ достаточно быстро ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ довольно Π½Π΅Ρ€ΡΡˆΠ»ΠΈΠ²ΠΎΠΌΡƒ списку. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Для создания подуровня __CONTROL_STYLE_BEGIN__Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅__CONTROL_STYLE_END__ ΠΏΠΎ ΠΈΠΊΠΎΠ½ΠΊΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ дальшС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ вас Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ (Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ) ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ это Ρ€Π°Π½Π΅Π΅ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½ΠΎΠΌΠ΅Ρ€ уровня смСнился Π½Π° [font=default-semibold]2[/font]). Основная Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚Π΅ΠΌΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ Ρ‰Ρ‘Π»ΠΊΠ½ΡƒΠ»ΠΈ.\n\nΠ­Ρ‚ΠΎ всСго лишь основы! Π•ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π½ΠΎ этого достаточно для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ (Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ [font=default-semibold]Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ[/font]), Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ простой производствСнной Π»ΠΈΠ½ΠΈΠΈ. -tutorial_matrix_solver_text=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ - это Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ обновлСния производствСнной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Factory Planner ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ расчёт свСрху Π²Π½ΠΈΠ·, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌ расчётС вычислСния производятся Π·Π° ΠΎΠ΄ΠΈΠ½ этап ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ систСмы ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ способ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпростым Π² использовании, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΡ‡Π΅Π½ΡŒ эффСктивным. НапримСр, ΠΎΠ½ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ уничтоТСния, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹.\n\nКаТдая Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ настроСна Π½Π° использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² расчёта: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ расчёт ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ² Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ слСва Π²Π½ΠΈΠ·Ρƒ Π½Π° "ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ". Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π³ΠΎ снова. ΠŸΠ΅Ρ€Π΅Ρ€Π°ΡΡ‡Ρ‘Ρ‚ происходит автоматичСски ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ².\n\nΠ’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ строку Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π²Π²Π΅Ρ€Ρ…Ρƒ. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ являСтся ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для уничтоТСния).\n\nИногда Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты Π±Ρ‹Π»ΠΈ установлСны ΠΊΠ°ΠΊ "Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅". ΠžΠ±Ρ‹Ρ‡Π½ΠΎ удаётся ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всё Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ соотвСтствуСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ количСству. Однако Β«Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹Β» Π½Π΅ ΡƒΡ€Π°Π²Π½ΠΎΠ²Π΅ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹. Если Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ элСмСнты, откроСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… элСмСнтов. НСограничСнныС элСмСнты часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° содСрТит Ρ†ΠΈΠΊΠ». Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ это Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ справа ΠΎΡ‚ ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ.\n\nПослСднСС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ - Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ нСзависимыми. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ СдинствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ Π½Π΅ сработаСт, Ссли сущСствуСт нСсколько способов создания Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². Если ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ зависимыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ошибка Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Ρ‘Ρ‚. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ распостраняСтся Π½Π° всС ΡƒΡ€ΠΎΠ²Π½ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. -options_item_title=Π—Π°Π΄Π°Ρ‚ΡŒ количСство __1__ -options_item_text=Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ количСство для ’__1__’ -options_item_amount=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ -options_item_amount_tt=Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство __1__, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ __2__. Π­Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ этой строки. -options_subfactory_ingredient_amount_tt=Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство этого ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эта ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° потрСбляла. Π­Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ скоррСктируСт количСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². -utilities=Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ -utility_title_components=ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ -utility_title_components_tt=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для постройки ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ/уровня. Маяки ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ’ВсСго маяков’ для Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. Числа ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. -utility_title_notes=Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ -components_needed_tt=__1__\n[font=default-bold]__2__[/font] Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅ / [font=default-bold]__3__[/font] Π½ΡƒΠΆΠ½ΠΎ\n__CONTROL_STYLE_BEGIN__Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅__CONTROL_STYLE_END__ для ΠΊΡ€Π°Ρ„Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ -no_components_needed=__1__ Π½Π΅ трСбуСтся -utility_blueprint_tt=ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² вашСм ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π΅, Π² строку Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ постоянныС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹. Π—Π°Ρ‚Π΅ΠΌ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ сундуку запроса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π°ΠΌ. -utility_no_items_necessary=Π’Π°Ρˆ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ ΡƒΠΆΠ΅ содСрТит всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ __1__ -request_items=Запрос -request_items_tt=Π—Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ пСрсонаТу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ __1__.\n[font=default-semibold]\n[color=#84CDEC]ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:[/color][/font] Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Ρ€ΠΎΠ½Ρ‹ (Π° Π½Π΅ транспортныС), Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Ρ€ΠΎΠ½Ρ‹ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ дронстанции. РСкомСндуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Π΄Ρ€ΠΎΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄ запросом. -cancel_request=ΠžΡ‚ΠΌΠ΅Π½Π° -request_logistics_not_researched=Π ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ исслСдована для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ этой возмоТности -request_no_character=Π£ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ пСрсонаТ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠΌΡƒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ -utility_no_character=ΠšΡ€Π°Ρ„Ρ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π±Π΅Π· пСрсонаТа -utility_no_recipes=НСт Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² для ΠΊΡ€Π°Ρ„Ρ‚Π° этого ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° -utility_no_demand=Бпрос Π½Π° этот ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΡƒΠΆΠ΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Ρ‘Π½ -utility_no_resources=НСдостаточно рСсурсов для ΠΊΡ€Π°Ρ„Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ -preferences=ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -preferences_support=ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ ΠΌΠΎΠ΄ Ρ‚ΡƒΡ‚: [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]! -preferences_info=Π’ΡƒΡ‚ содСрТатся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ часто\nΠΌΠ΅Π½ΡΡ‚ΡŒ Π²ΠΎ врСмя ΠΈΠ³Ρ€Ρ‹. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ настройки находятся Π²\nМСню β†’ Настройки β†’ Настройки ΠΌΠΎΠ΄ΠΎΠ² β†’ Factory Planner -preference_general_title=ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -preference_general_title_tt=НСкоторыС основныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠ΅Π½ΡΡ‚ΡŒ -preference_general_ignore_barreling_recipes=Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ наполнСния Π±ΠΎΡ‡Π΅ΠΊ ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ складывания Π² стопки -preference_general_ignore_barreling_recipes_tt=ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ заполнСния/ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ΅Π½ΠΈΡ Π±ΠΎΡ‡Π΅ΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ складывания Π² стопки ΠΈ ΠΈΡ… распаковки (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚). -preference_general_ignore_recycling_recipes=Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ -preference_general_ignore_recycling_recipes_tt=ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ это ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚). -preference_general_ingredient_satisfaction=Π£Π΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠ΅ спроса Π½Π° ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ -preference_general_ingredient_satisfaction_tt=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ удовлСтворСния спроса Π½Π° ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹. -preference_general_round_button_numbers=ΠžΠΊΡ€ΡƒΠ³Π»ΡΡ‚ΡŒ числа Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… -preference_general_round_button_numbers_tt=ΠžΠΊΡ€ΡƒΠ³Π»ΡΠ΅Ρ‚ числа Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… машин ΠΈ ΠΊΠΎΠ½Π²Π΅Π΅Ρ€ΠΎΠ². -preference_general_attach_subfactory_products=Π—Π½Π°Ρ‡ΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -preference_general_attach_subfactory_products_tt=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΊΠΈ выходящСй ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ· ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ рядом с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ -preference_production_title=Колонки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ -preference_production_title_tt=Π’Ρ‹Π±ΠΎΡ€ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ производствСнной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ -preference_production_done_column=ΠŸΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ -preference_production_done_column_tt=ДобавляСт ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ. ВлияСт ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ Π½Π° сам Ρ€Π΅Ρ†Π΅ΠΏΡ‚. -preference_production_pollution_column=ЗагрязнСниС -preference_production_pollution_column_tt=ДобавляСт ΠΊΠΎΠ»Π»ΠΎΠ½ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ отобраТаСтся загрязнСниС, связанноС с производством ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ -preference_production_line_comment_column=Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ -preference_production_line_comment_column_tt=ДобавляСт ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ с тСкстовым ΠΏΠΎΠ»Π΅ΠΌ для Π²Π°ΡˆΠΈΡ… Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ -preference_mb_defaults_title=ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -preference_mb_defaults_title_tt=УстановитС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_mb_default_machine=ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ -preference_mb_default_machine_tt=ΠœΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ΄ попытаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ -preference_mb_default_machine_secondary=Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ -preference_mb_default_machine_secondary_tt=Если ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ совмСстим с машиной, Π±ΡƒΠ΄Π΅Ρ‚ использован Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ -preference_mb_default_beacon=ΠœΠΎΠ΄ΡƒΠ»ΡŒ -preference_mb_default_beacon_tt=ΠœΠΎΠ΄ΡƒΠ»ΡŒ, устанавливаСмый Π² маяк ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -preference_mb_default_beacon_amount=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ -preference_mb_default_beacon_amount_tt=Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ количСство маяков Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΏΡ€ΠΈ создании Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -preference_default_belts_title=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅Π΅Ρ€ -preference_default_belts_title_tt=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ расчСтах потрСбности Π² ΠΊΠΎΠ½Π²Π΅Π΅Ρ€Π°Ρ… ΠΈ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΈΡ… количСства Π²ΠΎ врСмя добавлСния Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_default_beacons_title=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ маяк -preference_default_beacons_title_tt=Маяк, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -preference_default_fuels_title=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ -preference_default_fuels_title_tt=Π˜ΡΠΏΠΎΠ»ΡŒΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ для машин, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ ΠΊΠ°ΠΊ энСргия -preference_default_machines_title=ΠœΠ°ΡˆΠΈΠ½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ -preference_default_machines_title_tt=Π’Ρ‹Π±ΠΎΡ€ машин, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΏΡ€ΠΈ ΠΈΡ… Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ.\n__CONTROL_STYLE_BEGIN__Shift + Π›ΠšΠœ__CONTROL_STYLE_END__ устанавливаСт ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° сразу для всСх ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. -preference_default_wagons_title=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π²Π°Π³ΠΎΠ½Π° -preference_default_wagons_title_tt=Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Π²Π°Π³ΠΎΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² расчётах количСства Π²Π°Π³ΠΎΠ½ΠΎΠ² -recipe_instruction=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ для __1__ ’__2__’ -show=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ -unresearched_recipes=НСисслСдованныС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -hidden_recipes=Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -no_recipe_found=НСт Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², подходящих ΠΏΠΎΠ΄ условия Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Recipe Book -fluid_at_temperature=__1__, __2__ __3__ -submit=ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ -delete=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ -cancel=ΠžΡ‚ΠΌΠ΅Π½Π° -confirm_dialog_tt=- НаТмитС __CONTROL__fp_confirm_dialog__ для подтвСрТдСния - -cancel_dialog_tt=- НаТмитС __CONTROL__toggle-menu__ для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ - -search_button_tt=- НаТмитС __CONTROL__focus-search__ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ строкС поиска - -close_button_tt=- НаТмитС __CONTROL__toggle-menu__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ - -searchfield_tt=ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° Π½Π° СстСствСнном языкС -searchfield_not_ready_tt=Поиск Π½Π° СстСствСнном языкС Π΅Ρ‰Ρ‘ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ², ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅.\nΠ˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ [font=default-semibold]'/fp-restart-translation'[/font] для Π΅Π³ΠΎ пСрСзапуска. -warning_with_icon=[img=fp_sprite_warning_red] __1__ -amount_by=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ (__1__) -no_item_found=НСт элСмСнтов, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π°ΡˆΠ΅ΠΌΡƒ поисковому запросу -picker_issue_select_item=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ -picker_issue_enter_amount=Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ количСство ΠΈΠ»ΠΈ число ΠΊΠΎΠ½Π²Π΅Π΅Ρ€ΠΎΠ² -matrix_free_items=НСограничСнныС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ -matrix_constrained_items=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ __1__ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… __2__. НСограничСнныС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹\nΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ,\nΠ² зависимости ΠΎΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°. -matrix_linearly_dependent_recipes=ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ зависимыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -subfactory_dialog_description=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -subfactory_dialog_name=НазваниС -subfactory_dialog_name_tt=НазваниС ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст (Rich Text), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½ΠΈΠΆΠ΅. -subfactory_dialog_rich_text=Rich Text -subfactory_dialog_rich_text_tt=Π­Ρ‚ΠΈ сСлСкторы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для добавлСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста ΠΊ названию ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ любой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст. -subfactory_dialog_signals=Π‘ΠΈΠ³Π½Π°Π»Ρ‹ -subfactory_dialog_recipes=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ -subfactory_dialog_name_empty=НазваниС ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым -machine_dialog_description=НастройтС ΠΌΠ°ΡˆΠΈΠ½Ρƒ для "__1__" -machine_does_not_use_fuel=Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ -machine_limit=ΠŸΡ€Π΅Π΄Π΅Π» -machine_limit_tt=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ количСство машин, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эта линия. ЀактичСскоС количСство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС, Ссли трСбуСтся мСньшС машин. -machine_force_limit=Π’ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π΅Π» -machine_force_limit_tt=ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ устанавливаСт Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ число машин, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅, Π΄Π°ΠΆΠ΅ Ссли это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пСрСпроизводству. Π˜ΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сочСтании с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ машин. -beacon_dialog_description_add=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ маяки Π² "__1__" -beacon_dialog_description_edit=ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ маяки для "__1__" -beacon_amount_tt=Π—Π°Π΄Π°ΠΉΡ‚Π΅ количСство маяков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ Ρ†Π΅Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ находятся Π² Π·ΠΎΠ½Π΅ дСйствия Ρ€Π°Π·Π½ΠΎΠ³ΠΎ количСства маяков. -beacon_total=ВсСго -beacon_total_tt=Π—Π°Π΄Π°ΠΉΡ‚Π΅ количСство маяков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… всСми машинами для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. Π­Ρ‚Π° информация Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для расчёта потрСбляСмой элСктроэнСргии. -beacon_selector_tt=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ инструмСнт выдСлСния области, Ρ‡Ρ‚ΠΎΠ±Ρ‹ автоматичСски ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство маяков Π² ΡƒΠΆΠ΅ построСнной Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅. -beacon_issue_set_amount=Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство маяков (большС 0) -beacon_issue_no_modules=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 1 ΠΌΠΎΠ΄ΡƒΠ»ΡŒ -switch_to_compact_view=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄\n- НаТмитС __CONTROL__fp_toggle_compact_view__ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - -pause_on_interface=АвтоматичСски ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, Ссли ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Factory PLanner (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹)\n- НаТмитС __CONTROL__fp_toggle_pause__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ - -close_interface=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ этот интСрфСйс\n- НаТмитС __CONTROL__fp_toggle_interface__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ - -action_open_archive_tt=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ\n__1__ -archive_empty=[font=default-semibold]- Архив пуст -[/font] -archive_filled=[font=default-semibold]- Архив содСрТит __1__ __2__ -[/font] -action_close_archive_tt=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -action_import_subfactory=Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ строку ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ сохранённой ΠΈΠ³Ρ€Ρ‹ -action_export_subfactory=Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² строку, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ -action_archive_subfactory=ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π² Π°Ρ€Ρ…ΠΈΠ² -action_unarchive_subfactory=ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π° Π² список Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„Π°Π±Ρ€ΠΈΠΊ -action_duplicate_subfactory=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Π²Ρ‹Π±Ρ€Π°Π½ΠΎΠΉ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -action_add_subfactory_by_name=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ\n__CONTROL_STYLE_BEGIN__Shift + Π›ΠšΠœ__CONTROL_STYLE_END__ для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ сразу послС этого -action_add_subfactory_by_product=Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ для Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ\n__CONTROL_STYLE_BEGIN__Shift + Π›ΠšΠœ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сначала Π΄Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ -action_edit_subfactory=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -action_trash_subfactory=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ\nОна Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ __1__ ΠΌΠΈΠ½ -action_delete_subfactory=Π‘Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ -subfactory_trashed=\n[font=default-bold]Π£Π΄Π°Π»Π΅Π½Π°[/font] - автоматичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· __1__ ΠΌΠΈΠ½ -subfactory_invalid=\n[font=default-bold]Π‘Π»ΠΎΠΌΠ°Π½Π°[/font] - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ -subfactory_info=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ -no_subfactory=ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π° -subfactory_needs_repair=ИзмСнились Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄Ρ‹, сломав эту ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ ΠΌΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ восстановитС Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС нСдопустимыС части. -repair_subfactory=Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ -timescale=Π¨ΠΊΠ°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ -timescale_tt=Π¨ΠΊΠ°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ опрСдСляСт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ производства. НапримСр, Π²Ρ‹Π±Ρ€Π°Π² [font=default-bold]1ΠΌ[/font] ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² 400 элСктросхСм, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ 400 ΡˆΡ‚. [font=default-bold]Π² ΠΌΠΈΠ½ΡƒΡ‚Ρƒ[/font]. -mining_productivity=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ -mining_productivity_tt=ВСкущая ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с исслСдованной Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ автоматичСскоС отслСТиваниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ продуктивности, ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΏΠΎΠ»Π΅ пустым. -override=ΠŸΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ -solver_choice=Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ -solver_choice_tt=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для этой ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, просматривая ваши Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠΎ порядку ΠΈ выясняя ΠΈΡ… потрСбности. ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки. -solver_choice_traditional=Π’Ρ€Π°Π΄. -solver_choice_matrix=ΠœΠ°Ρ‚Ρ€. -solver_choice_configure=ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ -subfactory_modset_changes=ИзмСнился список Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ². -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]Π­Ρ‚ΠΈ ΠΌΠΎΠ΄Ρ‹ Π±Ρ‹Π»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹:[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]Π­Ρ‚ΠΈ ΠΌΠΎΠ΄Ρ‹ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹:[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]Π­Ρ‚ΠΈ ΠΌΠΎΠ΄Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹:[/font][/color] -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__ β†’ v__3__ -ingredients_to_combinator_tt=ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ этой ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² строку Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ°, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ постоянныС ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹. -view_state_tt=__1__\n- НаТмитС __CONTROL__fp_cycle_production_views__/__CONTROL__fp_reverse_cycle_production_views__ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ отобраТСния - -items_per_timescale=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², сколько ΠΈΡ… производится/потрСбляСтся Π·Π° __1__. -belts_or_lanes=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², сколько __1__ для установлСнного Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для транспортировки этого ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°. Для ТидкостСй это считаСтся Π² Π±ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΠΎ [font=default-bold]50 Тидкости Π½Π° Π±ΠΎΡ‡ΠΊΡƒ[/font].\nНастроСно использованиС __2__ [font=default-bold]__3__[/font]. -wagons_per_timescale=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², сколько Π²Π°Π³ΠΎΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π·Π° __1__.\nНастроСно использованиС __2__ [font=default-bold]__3__[/font] ΠΈΠ»ΠΈ __4__ [font=default-bold]__5__[/font]. -items_per_second_per_machine=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², сколько потрСбляСмых/ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² Π·Π° сСкунду для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅. ПолСзно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство манипуляторов для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. -refresh_production=ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ\n- НаТмитС __CONTROL__fp_refresh_production__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ - -production=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ -level=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ -floor_up_tt=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅\n- НаТмитС __CONTROL__fp_up_floor__ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ - -floor_top_tt=ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° самый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ\n- НаТмитС __CONTROL__fp_up_floor__ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° самый Π²Π΅Ρ€Ρ… - -fold_out_subfloors_tt=Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄ΡƒΡ€ΠΎΠ²Π½ΠΈ -show_floor_items_tt=Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ значСния элСмСнтов ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ значСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ уровня. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ подуровням, Π½ΠΎ Π½Π΅ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΡƒΡ€ΠΎΠ²Π½ΡŽ. -utility_dialog_tt=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ срСдств -production_instruction_subfactory=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Π½Π°ΠΆΠ°Π² Π½Π° Π·Π΅Π»Π΅Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ’+’ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ -production_instruction_product=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Π½Π°ΠΆΠ°Π² Π½Π° ΡΠ΅Ρ€ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ ’+’ Π²Ρ‹ΡˆΠ΅ -production_instruction_recipe=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² спискС Π²Ρ‹ΡˆΠ΅. -column_done_tt=ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ (ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для вашСго удобства) -column_percentage_tt=ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ удовлСтворСния спроса Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ этого Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. ΠŸΠ΅Ρ€Π΅Ρ€Π°ΡΡ‡Ρ‘Ρ‚ происходит послС наТатия __CONTROL_STYLE_BEGIN__Enter__CONTROL_STYLE_END__. -column_comment=ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ -recipe_inactive=Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ -recipe_subfloor_attached=Π΅ΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ -recipe_consumes_byproduct=потрСбляСт излишки -subfloor_machine_count=__1__ __2__ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° этом ΡƒΡ€ΠΎΠ²Π½Π΅ -machine_limit_force=УстановлСн Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π΅Π» [__1__] -machine_limit_enforced=Π’Π²Π΅Π΄Ρ‘Π½ Тёсткий ΠΏΡ€Π΅Π΄Π΅Π» [__1__] -machine_limit_set=УстановлСн ΠΏΡ€Π΅Π΄Π΅Π» [__1__] -add_machine_module=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ -add_beacon=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ маяк -in_total=__1__ всСго -priority_product=ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ -raw_ore=НСобработанная Ρ€ΡƒΠ΄Π° -switch_to_main_view=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² основной Π²ΠΈΠ΄\n- НаТмитС __CONTROL__fp_toggle_compact_view__ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - -copied_into_clipboard=__1__ скопировано -pasted_from_clipboard=__1__ вставлСно -clipboard_empty=Π‘ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° пуст -clipboard_incompatible_class=НСвозмоТно Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ __1__ Π½Π° __2__ -clipboard_incompatible=Вставка __1__ нСсовмСстима -clipboard_already_exists=ВставлСнный __1__ ΡƒΠΆΠ΅ сущСствуСт -clipboard_no_empty_slots=НСт пустых ячССк ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -clipboard_recipe_irrelevant=ВставлСнная строка Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ этому этаТу -tut_action_line=\n__CONTROL_STYLE_BEGIN____1____CONTROL_STYLE_END__: __2__ -tut_open_in_recipebook=\n__CONTROL_STYLE_BEGIN__Alt + ПКМ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -tut_left=Π›ΠšΠœ -tut_right=ПКМ -tut_shift=Shift -tut_alt=Alt -tut_control=Ctrl -tut_select=Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ -tut_edit=Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ -tut_delete=ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ -tut_copy=ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ -tut_paste=Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ -tut_add_recipe=Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -tut_move_left=Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π²Π»Π΅Π²ΠΎ -tut_move_right=Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π²ΠΏΡ€Π°Π²ΠΎ -tut_open_subfloor=ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ подэтаТ -tut_toggle=ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ -tut_set_limit=ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π΅Π» -tut_reset_to_default=ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ -tut_put_into_cursor=Π²Π·ΡΡ‚ΡŒ Π² курсор -tut_add_recipe_to_end=Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -tut_add_recipe_below=Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π½ΠΈΠΆΠ΅ -tut_specify_amount=ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство -tut_prioritize=ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΌ -effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ -speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ -productivity=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ -pollution=ЗагрязнСниС -base_prod=Базовая ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ -mining_prod=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ -effect_maxed=(максимальноС) -error_no_relevant_recipe=НСт Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², производящих этот ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -error_no_enabled_recipe=НСт Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², производящих этот ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ (Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ `ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹` β†’) -error_no_compatible_machine=НСт машин, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ этому Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ -error_no_subfloor_on_byproduct_recipes=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠ΅ излишки, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ -error_no_new_subfloors_in_archive=НСвозмоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ подэтаТи ΠΊ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌ -error_list_item_cant_be_shifted=Π­Ρ‚ΠΎΡ‚ __1__ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Ρ‘Π½ __2__ -error_recipebook_version_incompatible=ВСрсия Книги Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² нСсовмСстима. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Π° ΠΌΠΎΠ΄Π°. -error_recipebook_lookup_failed=Π©Ρ‘Π»ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ __1__ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² КнигС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² -error_linearly_dependant_recipes=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π²Ρ‹Π±Ρ€Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Ρ†Π΅ΠΏΡ‚. -error_recipe_wrong_floor=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ __1__ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -warning_no_matrix_configuration_needed=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŽ Π½Π΅ трСбуСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ настройка -warning_recipe_disabled=Π Π΅Ρ†Π΅ΠΏΡ‚ Π΅Ρ‰Ρ‘ Π½Π΅ исслСдован, поэтому ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ -warning_module_not_compatible=ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ __1__ Π½Π΅ совмСстим с этой машиной -warning_no_prioritizing_single_product=НСльзя Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ с СдинствСнным ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ -hint_tutorial=Если Π²Ρ‹ Π½Π΅ использовали Factory Planner Ρ€Π°Π½ΡŒΡˆΠ΅, совСтуСм ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ -hint_byproducts_removed=Π’Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ удаляСт всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² -prefix_kilo=ΠΊ -prefix_mega=М -prefix_giga=Π“ -prefix_tera=Π’ -prefix_peta=Π— -prefix_exa=Π• -prefix_zetta=Π— -prefix_yotta=Π™ -unit_watt=Π’Ρ‚ -unit_joule=Π”ΠΆ -unit_pollution=Π— -unit_celsius=Β°C -unit_second=с -unit_minute=ΠΌ -unit_hour=Ρ‡ -second=сСк -minute=ΠΌΠΈΠ½ -hour=час -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) -selected=Π²Ρ‹Π±Ρ€Π°Π½ -preferred=ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ -satisfied=ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Ρ‘Π½ -valid=Π²Π΅Ρ€Π½Ρ‹ΠΉ -invalid=Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ -increased=ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ -decreased=ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ -capped=ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ -on=Π’ΠΊΠ» -off=Π’Ρ‹ΠΊΠ» -left=Π²Π»Π΅Π²ΠΎ -right=Π²ΠΏΡ€Π°Π²ΠΎ -up=Π²Π²Π΅Ρ€Ρ… -down=Π²Π½ΠΈΠ· -top=Π²Π²Π΅Ρ€Ρ… -bottom=Π²Π½ΠΈΠ· -add=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ -new=Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ -edit=Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ -choose=Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ -produce=производство -consume=ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ -none=ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ -crafting_time=ВрСмя производства -amount=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ -factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° -archive=Архив -toggle_interface=FP -toggle_interface_tt=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -energy_consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ -effectivity=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ -module_slots=Π―Ρ‡Π΅ΠΉΠΊΠΈ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -fuel_value=Π’Π΅ΠΏΠ»ΠΎΡ‚Π²ΠΎΡ€Π½ΠΎΡΡ‚ΡŒ -emissions_multiplier=Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ загрязнСния -throughput=ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ -crafting_speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ производства -storage=Вранспортировка -combinator=ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ -put_into_cursor_failed=__1__ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π² курсор -blueprint_no_combinator_prototype=ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ постоянного ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ -impossible_to_blueprint_fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создана Π² Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° -move_row_tt=ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ __1__ __2__\n__CONTROL_STYLE_BEGIN__Ctrl+Π›ΠšΠœ__CONTROL_STYLE_END__ для пСрСмСщСния Π½Π° 5 ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ²\n__CONTROL_STYLE_BEGIN__Shift+Π›ΠšΠœ__CONTROL_STYLE_END__ для пСрСмСщСния Π² __3__ -attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -shift_to_paste=__CONTROL_STYLE_BEGIN__Shift+Π›ΠšΠœ__CONTROL_STYLE_END__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ -# Locale prefixes: s = singular; p = plural; l = lowercase; u = uppercase -pl_subfactory=__plural_for_parameter_1_{1=ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ°|2,3,4=ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ|rest=ΠΏΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊ}__ -pu_subfactory=__plural_for_parameter_1_{1=ΠŸΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ°|2,3,4=ΠŸΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ|rest=ΠŸΠΎΠ΄Ρ„Π°Π±Ρ€ΠΈΠΊ}__ -pl_line=__plural_for_parameter_1_{1=линия|rest=Π»ΠΈΠ½ΠΈΠΈ}__ -pu_line=__plural_for_parameter_1_{1=Линия|rest=Π›ΠΈΠ½ΠΈΠΈ}__ -pl_floor=__plural_for_parameter_1_{1=ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ|2,3,4=уровня|rest=ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ}__ -pu_floor=__plural_for_parameter_1_{1=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ|2,3,4=Уровня|rest=Π£Ρ€ΠΎΠ²Π½Π΅ΠΉ}__ -pl_item=__plural_for_parameter_1_{1=ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚|2,3,4=ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°|rest=ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²}__ -pu_item=__plural_for_parameter_1_{1=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚|2,3,4=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°|rest=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ²}__ -pl_fluid=__plural_for_parameter_1_{1=ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ|rest=Тидкости}__ -pu_fluid=__plural_for_parameter_1_{1=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ|rest=Жидкости}__ -pl_product=__plural_for_parameter_1_{1=ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚|rest=ΡˆΡ‚}__ -pu_product=__plural_for_parameter_1_{1=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚|rest=ΡˆΡ‚}__ -pl_byproduct=__plural_for_parameter_1_{1=излишСк|rest=излишки}__ -pu_byproduct=__plural_for_parameter_1_{1=ИзлишСк|rest=Излишки}__ -pl_ingredient=__plural_for_parameter_1_{1=ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚|rest=ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹}__ -pu_ingredient=__plural_for_parameter_1_{1=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚|rest=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹}__ -pl_fuel=__plural_for_parameter_1_{1=Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ|rest=Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°}__ -pu_fuel=__plural_for_parameter_1_{1=Π’ΠΎΠΏΠ»ΠΈΠ²ΠΎ|rest=Π’ΠΎΠΏΠ»ΠΈΠ²Π°}__ -pl_recipe=__plural_for_parameter_1_{1=Ρ€Π΅Ρ†Π΅ΠΏΡ‚|rest=Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹}__ -pu_recipe=__plural_for_parameter_1_{1=Π Π΅Ρ†Π΅ΠΏΡ‚|rest=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹}__ -pl_machine=__plural_for_parameter_1_{1=ΡˆΡ‚|rest=ΡˆΡ‚}__ -pu_machine=__plural_for_parameter_1_{1=АгрСгат|rest=ΡˆΡ‚}__ -pl_module=__plural_for_parameter_1_{1=ΡˆΡ‚|rest=ΡˆΡ‚}__ -pu_module=__plural_for_parameter_1_{1=ΠœΠΎΠ΄ΡƒΠ»ΡŒ|rest=ΡˆΡ‚}__ -pl_beacon=__plural_for_parameter_1_{1=ΡˆΡ‚|rest=ΡˆΡ‚}__ -pu_beacon=__plural_for_parameter_1_{1=Маяк|rest=ΡˆΡ‚}__ -pl_belt=__plural_for_parameter_1_{1=ΡˆΡ‚|rest=ΡˆΡ‚}__ -pu_belt=__plural_for_parameter_1_{1=ΠšΠΎΠ½Π²Π΅Π΅Ρ€|rest=ΡˆΡ‚}__ -pl_lane=__plural_for_parameter_1_{1=ΡˆΡ‚|rest=ΡˆΡ‚}__ -pu_lane=__plural_for_parameter_1_{1=Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π°|rest=ΡˆΡ‚}__ -pl_wagon=__plural_for_parameter_1_{1=Π²Π°Π³|rest=Π²Π°Π³}__ -pu_wagon=__plural_for_parameter_1_{1=Π’Π°Π³ΠΎΠ½|rest=Π²Π°Π³}__ -pl_stack=__plural_for_parameter_1_{1=стопка|rest=стопок}__ -l_fluid=ΠΆΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ -u_power=Π­Π».энСргия diff --git a/factoryplanner_1.1.72/locale/uk/config.cfg b/factoryplanner_1.1.72/locale/uk/config.cfg deleted file mode 100644 index 0d0abd02..00000000 --- a/factoryplanner_1.1.72/locale/uk/config.cfg +++ /dev/null @@ -1,514 +0,0 @@ -[mod-name] -factoryplanner=ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ Π·Π°Π²ΠΎΠ΄Ρƒ - -[mod-description] -factoryplanner=Π¦Π΅ΠΉ ΠΌΠΎΠ΄ дозволяє Π·Π°Π·Π΄Π°Π»Π΅Π³Ρ–Π΄ΡŒ ΠΏΠ»Π°Π½ΡƒΠ²Π°Ρ‚ΠΈ своє Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²ΠΎ, Π²ΠΊΠ°Π·ΡƒΡŽΡ‡ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ ΠΉ машини, Ρ‰ΠΎ Π²Ρ…ΠΎΠ΄ΡΡ‚ΡŒ Π΄ΠΎ складу ΠΊΠΎΠΆΠ½ΠΎΡ— ΡΠΊΠ»Π°Π΄Π°Π»ΡŒΠ½ΠΎΡ— Π»Ρ–Π½Ρ–Ρ—. Π’Ρ–Π½ Π½Π°Π΄Π°Ρ” ΠΏΠΎΡ‚ΡƒΠΆΠ½Ρ– Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ—, які Ρ” швидкими Ρ‚Π° Ρ–Π½Ρ‚ΡƒΡ—Ρ‚ΠΈΠ²Π½ΠΎ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Π»ΠΈΠΌΠΈ Ρƒ використанні, Ρ‚ΠΎΠΌΡƒ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ зосСрСдитися Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎΠΌΡƒ Π±ΡƒΠ΄Ρ–Π²Π½ΠΈΡ†Ρ‚Π²Ρ– вашого Π·Π°Π²ΠΎΠ΄Ρƒ. - - -[controls] -fp_toggle_interface=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ/Π—Π°ΠΊΡ€ΠΈΡ‚ΠΈ -fp_toggle_compact_view=ΠŸΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Π½Π½Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ пСрСгляду -fp_toggle_pause=ΠŸΠ°ΡƒΠ·Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Π½Π½Ρ– -fp_refresh_production=ОновлСння Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π° -fp_cycle_production_views=Погляд Π½Π° Ρ†ΠΈΠΊΠ»Ρ–Ρ‡Π½Π΅ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²ΠΎ -fp_reverse_cycle_production_views=Погляд Π½Π° Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²ΠΎ Π· рСвСрсивним Ρ†ΠΈΠΊΠ»ΠΎΠΌ -fp_confirm_dialog=Π”Ρ–Π°Π»ΠΎΠ³ΠΎΠ²Π΅ Π²Ρ–ΠΊΠ½ΠΎ підтвСрдТСння -fp_focus_searchfield=Бфокусувати ΠΏΠΎΠ»Π΅ ΠΏΠΎΡˆΡƒΠΊΡƒ - -[controls-description] -fp_toggle_interface=ΠŸΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ” основний інтСрфСйс -fp_toggle_compact_view=ΠŸΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Π½Π½Ρ ΠΌΡ–ΠΆ Π·Π²ΠΈΡ‡Π°ΠΉΠ½ΠΈΠΌ Ρ‚Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΠΌ виглядом інтСрфСйсу -fp_toggle_pause=Π’ΠΌΠΈΠΊΠ°Ρ” ΠΏΠ°ΡƒΠ·Ρƒ Π³Ρ€ΠΈ ΠΏΡ€ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΎΠΌΡƒ інтСрфСйсі -fp_refresh_production=ΠžΠ½ΠΎΠ²Π»ΡŽΡ” ΠΏΠΎΡ‚ΠΎΡ‡Π½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†ΡŽ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π° -fp_cycle_production_views=Π¦ΠΈΠΊΠ»ΠΈ Ρ€Ρ–Π·Π½ΠΈΡ… Π²ΠΈΠ΄Ρ–Π² Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΠ³ΠΎ столу -fp_reverse_cycle_production_views=Π¦ΠΈΠΊΠ»ΠΈ Ρƒ Π·Π²ΠΎΡ€ΠΎΡ‚Π½ΠΎΠΌΡƒ напрямку Ρ‡Π΅Ρ€Π΅Π· Ρ€Ρ–Π·Π½Ρ– Π²ΠΈΠ΄ΠΈ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΠ³ΠΎ столу -fp_confirm_dialog=ΠŸΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΆΡƒΡ” Π±ΡƒΠ΄ΡŒ-який модальний Π΄Ρ–Π°Π»ΠΎΠ³, Π½Π°Π²Ρ–Ρ‚ΡŒ якщо ΠΆΠΎΠ΄Π½Π΅ тСкстовС ΠΏΠΎΠ»Π΅ Π½Π΅ Π·Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρƒ фокусі -fp_focus_searchfield=Ѐокусує курсор Π½Π° ΠΏΠΎΠ»Ρ– ΠΏΠΎΡˆΡƒΠΊΡƒ ΠΏΡ–Π΄Π±Ρ–Ρ€Π½ΠΈΠΊΠ° Ρ‚ΠΎΠ²Π°Ρ€Ρ–Π², якщо Ρ†Π΅ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ - - -[mod-setting-name] -fp_display_gui_button=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ/Π·Π°ΠΊΡ€ΠΈΡ‚ΠΈ -fp_products_per_row=Π¨ΠΈΡ€ΠΈΠ½Π° інтСрфСйсу -fp_subfactory_list_rows=Висота інтСрфСйсу -fp_default_timescale=Часова шкала Π·Π° замовчуванням -fp_view_belts_or_lanes=Π‘Ρ‚Ρ€Ρ–Ρ‡ΠΊΠΈ Π°Π±ΠΎ смуги -fp_prefer_product_picker=Π‘Π°ΠΆΠ°Π½ΠΈΠΉ пристрій для Π²ΠΈΠ±ΠΎΡ€Ρƒ Ρ‚ΠΎΠ²Π°Ρ€Ρƒ -fp_prefer_matrix_solver=Π’Ρ–Π΄Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²Π°Π³Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ€ΠΎΠ·Π²`язувачу - -[mod-setting-description] -fp_display_gui_button=ΠŸΠΎΠΊΠ°Π·ΡƒΡ” ΠΊΠ½ΠΎΠΏΠΊΡƒ Ρƒ Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠΌΡƒ Π»Ρ–Π²ΠΎΠΌΡƒ ΠΊΡƒΡ‚ΠΊΡƒ Π΅ΠΊΡ€Π°Π½Ρƒ. Π’Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ” Ρ‚Π° Π·Π°ΠΊΡ€ΠΈΠ²Π°Ρ” основний інтСрфСйс. -fp_products_per_row=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠΉΡ‚Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ основного інтСрфСйсу, Π²ΠΈΠ±Ρ€Π°Π²ΡˆΠΈ, ΡΠΊΡ–Π»ΡŒΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ–Π² Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠ³ΠΎ рівня Π²Ρ–Π΄ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ”Ρ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ рядку. -fp_subfactory_list_rows=Π’ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ висоту основного інтСрфСйсу, Π²ΠΈΠ±Ρ€Π°Π²ΡˆΠΈ, ΡΠΊΡ–Π»ΡŒΠΊΠΈ Π½Π°Π·Π² ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊ Π±ΡƒΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π°Π³Π°Π»ΠΎΠΌ. -fp_default_timescale=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ часовий Ρ–Π½Ρ‚Π΅Ρ€Π²Π°Π», Π· яким ΠΌΠ°Ρ” Π±ΡƒΡ‚ΠΈ створСна Π±ΡƒΠ΄ΡŒ-яка Π½ΠΎΠ²Π° ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°. -fp_view_belts_or_lanes=Π’ΠΊΠ°ΠΆΡ–Ρ‚ΡŒ, Ρ‡ΠΈ Π²Π²Π°ΠΆΠ°Ρ”Ρ‚Π΅ Π²ΠΈ пропускну Π·Π΄Π°Ρ‚Π½Ρ–ΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ як ΠΎΠΊΡ€Π΅ΠΌΡ– смуги Π°Π±ΠΎ як ΠΏΠΎΠ²Π½Ρ– стрічки. -fp_prefer_product_picker=Π’ΠΈΡ€Ρ–ΡˆΡ–Ρ‚ΡŒ, Ρ‡ΠΈ слід ΠΏΠΎΡ‡ΠΈΠ½Π°Ρ‚ΠΈ додавання Π½ΠΎΠ²ΠΈΡ… ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π· Π²ΠΈΠ±ΠΎΡ€Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ Π°Π±ΠΎ Π½Π°Π·Π²ΠΈ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. -fp_prefer_matrix_solver=Π’ΠΈΡ€Ρ–ΡˆΠΈΡ‚ΠΈ, Ρ‡ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Π½ΠΎΠ²Ρ– ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ використовувати ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Ρ€ΠΎΠ·Π²`язувач Π·Π°ΠΌΡ–ΡΡ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†Ρ–ΠΉΠ½ΠΎΠ³ΠΎ. - -[string-mod-setting] -fp_default_timescale-one_second=1 сСкунда -fp_default_timescale-one_minute=1 Ρ…Π²ΠΈΠ»ΠΈΠ½Π° -fp_default_timescale-one_hour=1 Π³ΠΎΠ΄ΠΈΠ½Π° -fp_view_belts_or_lanes-belts=ΠšΠΎΠ½Π²Π΅Ρ”Ρ€ΠΈ -fp_view_belts_or_lanes-lanes=Π›Ρ–Π½Ρ–Ρ— - - -[shortcut-name] -fp_open_interface=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ Π€Π°Π±Ρ€ΠΈΠΊΠΈ - -[item-name] -fp_beacon_selector=ΠŸΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‡ маяків - -[command-help] -fp_reset_prototypes=Π Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΡŽΡ” Ρ€Ρ–Π·Π½Ρ– ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈ Π· Π±Π°Π·ΠΎΠ²ΠΈΡ… Π΄Π°Π½ΠΈΡ… Π³Ρ€ΠΈ. Ніколи Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½ΠΎ знадобитися. -fp_restart_translation=ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ” ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄ Π½Π°Π·Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ–Π², Ρ‰ΠΎΠ± ΠΏΠΎΡˆΡƒΠΊ ΠΌΡ–Π³ використовувати Ρ—Ρ…Π½Ρ– Π½Π°Π·Π²ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎΡŽ мовою. - - -[fp] -# Porter dialog= -import=Π†ΠΌΠΏΠΎΡ€Ρ‚ -export=Експорт -validity=Дійсний -location=Π ΠΎΠ·Ρ‚Π°ΡˆΡƒΠ²Π°Π½Π½Ρ -import_instruction_1="ВставтС свій [font=default-bold]заводський рядок ΠΎΠ±ΠΌΡ–Π½Ρƒ[/font]" -import_instruction_2=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, які Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ Ρ–ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ -export_instruction=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, які Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ Скспортувати -export_instruction_tt="Π¦Π΅ Π·Π³Π΅Π½Π΅Ρ€ΡƒΡ” [font=default-bold]рядок ΠΎΠ±ΠΌΡ–Π½Ρƒ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ[/font], який Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ для ΠΎΠ±ΠΌΡ–Π½Ρƒ вашими ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°ΠΌΠΈ Π· Ρ–Π½ΡˆΠΈΠΌΠΈ людьми Π°Π±ΠΎ для Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ Π² ΠΎΠ΄ΠΈΠ½ Π· Π²Π°ΡˆΠΈΡ… Ρ–Π½ΡˆΠΈΡ… світів. Π¦Π΅ Π½Π΅ ΡΡ‚Π²ΠΎΡ€ΡŽΡ” рядок для крСслСння!" -import_button_tooltip=Π†ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ рядок -export_button_tooltip=Π—Π³Π΅Π½Π΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ заводський рядок ΠΎΠ±ΠΌΡ–Π½Ρƒ -importer_decoding_failure=Π”Π°Π½ΠΈΠΉ рядок Π½Π΅ вдалося ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€ΠΎΠ·ΡˆΠΈΡ„Ρ€ΡƒΠ²Π°Ρ‚ΠΈ. Π¦Π΅ ΠΏΠΎΠ²`язано Π· ΠΉΠΎΠ³ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΈΠΌ форматуванням. Π‘ΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Скспортувати ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Ρ‰Π΅ Ρ€Π°Π· Ρ– ΠΎΠ±ΠΎΠ²`язково ΡΠΊΠΎΠΏΡ–ΡŽΠΉΡ‚Π΅ вСсь рядок. -importer_migration_failure=Π’ΠΊΠ°Π·Π°Π½ΠΈΠΉ рядок Π½Π°Π»Π΅ΠΆΠΈΡ‚ΡŒ Π΄ΠΎ старої вСрсії Factory Planner Ρ– Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ пСрСнСсСний. Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠΎΠ²`язано Π· Ρ‚ΠΈΠΌ, Ρ‰ΠΎ Π²Ρ–Π½ Π·Π°Π½Π°Π΄Ρ‚ΠΎ старий Ρ– Π±Ρ–Π»ΡŒΡˆΠ΅ Π½Π΅ ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ, Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅, Ρ‰ΠΎ Π΄Π°Π½Ρ– Π±ΡƒΠ»ΠΈ ΠΏΠΎΡˆΠΊΠΎΠ΄ΠΆΠ΅Π½Ρ– якимось Ρ‡ΠΈΠ½ΠΎΠΌ, Π°Π±ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ програмування. Π―ΠΊΡ‰ΠΎ Π²ΠΈ Π²Π²Π°ΠΆΠ°Ρ”Ρ‚Π΅, Ρ‰ΠΎ Ρ†Π΅ΠΉ рядок дійсний, Π±ΡƒΠ΄ΡŒ ласка, Π·Π²`ΡΠΆΡ–Ρ‚ΡŒΡΡ Π· Ρ€ΠΎΠ·Ρ€ΠΎΠ±Π½ΠΈΠΊΠΎΠΌ (Π·Ρ– мною!) Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Ρ– ΠΌΠΎΠ΄Ρ–Π². -importer_unpacking_failure=Π’ΠΊΠ°Π·Π°Π½ΠΈΠΉ рядок Π½Π΅ вдалося Π½Π°Π»Π΅ΠΆΠ½ΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ Ρ€ΠΎΠ·ΠΏΠ°ΠΊΡƒΠ²Π°Ρ‚ΠΈ Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΈΡ‚ΠΈ. Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠΎΠ²`язано Π· Ρ‚ΠΈΠΌ, Ρ‰ΠΎ Π΄Π°Π½Ρ– Π±ΡƒΠ»ΠΈ ΠΏΠΎΡˆΠΊΠΎΠ΄ΠΆΠ΅Π½Ρ– якимось Ρ‡ΠΈΠ½ΠΎΠΌ Π°Π±ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ програмування. Π―ΠΊΡ‰ΠΎ Π²ΠΈ Π²Π²Π°ΠΆΠ°Ρ”Ρ‚Π΅, Ρ‰ΠΎ Ρ†Π΅ΠΉ рядок Ρ” Π²Π°Π»Ρ–Π΄Π½ΠΈΠΌ, Π±ΡƒΠ΄ΡŒ ласка, Π·Π²Π΅Ρ€Π½Ρ–Ρ‚ΡŒΡΡ Π΄ΠΎ Ρ€ΠΎΠ·Ρ€ΠΎΠ±Π½ΠΈΠΊΠ° (ΠΌΠ΅Π½Π΅!) Π½Π° ΠΏΠΎΡ€Ρ‚Π°Π»Ρ– ΠΌΠΎΠ΄Ρ–Π². -importer_issue_import_string=Π†ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ дійсний рядок ΠΎΠ±ΠΌΡ–Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -importer_issue_select_subfactory=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Π°ΠΉΠΌΠ½Ρ– ΠΎΠ΄Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ для Ρ–ΠΌΠΏΠΎΡ€Ρ‚Ρƒ - -# Tutorial dialog= -tutorial=ΠŸΠΎΡΡ–Π±Π½ΠΈΠΊ -interface=Оболонка -usage=Використання -matrix_solver=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ -interactive_tutorial_title=Π†Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΠΉ ΠΏΡ–Π΄Ρ€ΡƒΡ‡Π½ΠΈΠΊ -interactive_tutorial_text="Найкращий спосіб ознайомитися Π· Factory Planner - Ρ†Π΅ просто Π·Π°ΠΉΡ‚ΠΈ Π² нього Ρ– дослідити ΠΉΠΎΠ³ΠΎ самостійно. Π— Ρ†Ρ–Ρ”ΡŽ ΠΌΠ΅Ρ‚ΠΎΡŽ я Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, яка продСмонструє дСякі Π· Π½Π°ΠΉΠ²Π°ΠΆΠ»ΠΈΠ²Ρ–ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΉ Ρ†ΡŒΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π°. Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ, Π½Π°Ρ‚ΠΈΡΠ½ΡƒΠ²ΡˆΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½ΠΈΠΆΡ‡Π΅. Π’ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Ρ‚ΠΈ [font=default-semibold]ΠΠ°Π²Ρ‡Π°Π»ΡŒΠ½ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ[/font], який ΠΏΠΎΠΊΠ°Π·ΡƒΡ” всі ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ†Ρ–Ρ— ΠΊΠ»Π°Π²Ρ–Ρˆ, які ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ– Π½Π° Π²Π°ΠΆΠ»ΠΈΠ²ΠΈΡ… ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΠΎ Π²ΡΡŒΠΎΠΌΡƒ інтСрфСйсу." -create_example=Π‘Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ -create_example_error=ΠŸΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ створСна, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ Π²ΠΎΠ½Π° Π½Π΅ сумісна Π· ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ΄Ρ–Π² -tutorial_mode=Π Π΅ΠΆΠΈΠΌ навчання -interface_tutorial_title=Взаємодія -interface_tutorial_text=ІнтСрфСйс Π½Π°Π»Π°ΡˆΡ‚ΠΎΠ²Π°Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ, Ρ‰ΠΎ схоТі Π΄Ρ–Ρ— ΠΌΠ°ΡŽΡ‚ΡŒ ΠΎΠ΄Π½Π°ΠΊΠΎΠ²Ρ– ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ†Ρ–Ρ— ΠΊΠ»Π°Π²Ρ–Ρˆ, Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π³ΡˆΡƒΡ” Ρ–Π½Ρ‚ΡƒΡ—Ρ‚ΠΈΠ²Π½Π΅ розуміння Ρ‚ΠΎΠ³ΠΎ, як досягти ΠΏΠ΅Π²Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ. Π’Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ лишС засвоїти Ρ†Ρ– Π±Π°Π·ΠΎΠ²Ρ– Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–Ρ—, Π° ΠΏΠΎΡ‚Ρ–ΠΌ використовувати Ρ—Ρ… повсюдно: -interface_controls=β€’ __CONTROL_STYLE_BEGIN__Π›Ρ–Π²Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: Π’ΠΈΠ±Ρ€Π°Ρ‚ΠΈ/Використовувати\nβ€’ __CONTROL_STYLE_BEGIN__ΠŸΡ€Π°Π²Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: Π Π΅Π΄Π°Π³ΡƒΠ²Π°Ρ‚ΠΈ\nβ€’ __CONTROL_STYLE_BEGIN__ΠšΠ΅Ρ€ΡƒΠ²Π°Π½Π½Ρ + ΠΏΡ€Π°Π²Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: Π’ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ__ \nβ€’__CONTROL_STYLE_BEGIN__Shift + клацання ΠΏΡ€Π°Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: ΠšΠΎΠΏΡ–ΡŽΠ²Π°Ρ‚ΠΈ__ \nβ€’__CONTROL_STYLE_BEGIN__Shift + клацання Π»Ρ–Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: Вставити__ \nβ€’__CONTROL_STYLE_BEGIN__Alt + клацання Π»Ρ–Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__: ΠŸΠΎΠΌΡ–ΡΡ‚ΠΈΡ‚ΠΈ Π² курсор -interface_controls_recipebook=\nβ€’ __CONTROL_STYLE_BEGIN__Alt + клацання ΠΏΡ€Π°Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ– __CONTROL_STYLE_END__: Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π² ΠšΠ½ΠΈΠ·Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² - -# Usage= -tutorial_usage_text="По-ΠΏΠ΅Ρ€ΡˆΠ΅, Π’Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π±ΡƒΠ΄Π΅ створити субфабрику. Π¦Π΅ Π±Π°Π·ΠΎΠ²Π° структура, яка ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ дСяку (ΠΏΠ΅Ρ€Π΅Π²Π°ΠΆΠ½ΠΎ Π½Π΅Π·Π°Π»Π΅ΠΆΠ½Ρƒ) частину Π’Π°ΡˆΠΎΠ³ΠΎ Π·Π°Π²ΠΎΠ΄Ρƒ. Π”Π°ΠΉΡ‚Π΅ Ρ—ΠΉ Π½Π°Π·Π²Ρƒ - Ρ– Π²ΠΏΠ΅Ρ€Π΅Π΄. Π’ΠΎΠ½Π° Π±ΡƒΠ΄Π΅ ΠΌΠ°Ρ‚ΠΈ дСякі Π²Ρ…ΠΎΠ΄ΠΈ (Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΈ), дСякі Π²ΠΈΡ…ΠΎΠ΄ΠΈ (ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Ρ– ΠΏΠΎΠ±Ρ–Ρ‡Π½Ρ– ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ) Ρ– споТивати ΠΏΠ΅Π²Π½Ρƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π΅Π½Π΅Ρ€Π³Ρ–Ρ—. Π’ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ встановити часові Ρ€Π°ΠΌΠΊΠΈ, Π· якими Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ, Π°Π±ΠΎ написати дСякі ΠΏΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠΈ.\n\nΠ’Π΅, Ρ‰ΠΎ Вас Ρ†Ρ–ΠΊΠ°Π²ΠΈΡ‚ΡŒ - Ρ†Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, Ρ‚ΠΎΠΌΡƒ Π’Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π±ΡƒΠ΄Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ‚Ρ–, які Π’ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ виробляти. Для Ρ†ΡŒΠΎΠ³ΠΎ просто __CONTROL_STYLE_BEGIN__left-click__CONTROL_STYLE_END__ ΠΊΠ½ΠΎΠΏΠΊΡƒ [font=default-semibold]+[/font], Π²ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, який Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ– Π²ΠΊΠ°ΠΆΡ–Ρ‚ΡŒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ, яка ΠΏΠΎΠ²ΠΈΠ½Π½Π° Π±ΡƒΡ‚ΠΈ Π²ΠΈΡ€ΠΎΠ±Π»Π΅Π½Π°. Π’ΠΎΠ½Π° ΠΌΠ°Ρ‚ΠΈΠΌΠ΅ Ρ‡Π΅Ρ€Π²ΠΎΠ½ΠΈΠΉ Ρ„ΠΎΠ½, Ρ–, ΠΏΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½Π½Ρ– Π½Π° Π½Π΅Ρ—, Π²ΠΈ ΠΏΠΎΠ±Π°Ρ‡ΠΈΡ‚Π΅, Ρ‰ΠΎ Π½Π° Π΄Π°Π½ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ [font=default-semibold]0[/font] ΠΉΠΎΠ³ΠΎ Π²ΠΈΡ€ΠΎΠ±Π»Π΅Π½ΠΎ.\n\nΠ©ΠΎΠ± Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ Ρ†Π΅, Π²ΠΈ __CONTROL_STYLE_BEGIN__left-click__CONTROL_STYLE_END__ Π½Π° Π½Ρ–ΠΉ. Π―ΠΊΡ‰ΠΎ Ρ” Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΎΠ΄ΠΈΠ½ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ для Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π° Ρ†ΡŒΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ, Π²Ρ–Π½ Π±ΡƒΠ΄Π΅ Π΄ΠΎΠ΄Π°Π½ΠΈΠΉ Π²Ρ–Π΄Ρ€Π°Π·Ρƒ. Π’ Ρ–Π½ΡˆΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ Ρƒ вас Π±ΡƒΠ΄Π΅ Π²ΠΈΠ±Ρ–Ρ€, який Ρ€Π΅Ρ†Π΅ΠΏΡ‚ використовувати. Π£ Π±ΡƒΠ΄ΡŒ-якому Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ, Π½ΠΎΠ²ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π·'ΡΠ²ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠΌΡƒ повСрсі Π’Π°ΡˆΠΎΡ— ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ використовувану ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π°Π±ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ дСякі ΠΌΠΎΠ΄ΡƒΠ»Ρ– Ρ‚Π° маячки.\n\nΠ’Π΅ΠΏΠ΅Ρ€, Ρ‰ΠΎΠ± Ρ‰Π΅ Π±Ρ–Π»ΡŒΡˆΠ΅ Ρ€ΠΎΠ·Π±ΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, який Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ виробляти, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ __CONTROL_STYLE_BEGIN__left-click__CONTROL_STYLE_END__ Π½Π° Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Π°Ρ… Ρ–ΡΠ½ΡƒΡŽΡ‡ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ. Π¦Π΅ Ρ‰Π΅ Ρ€Π°Π· Π΄ΠΎΠ΄Π°ΡΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, Π·ΠΌΡ–Π½ΡŽΡŽΡ‡ΠΈ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΈ, Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– для всієї ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ²ΠΆΡƒΠ²Π°Ρ‚ΠΈ Ρ€ΠΎΠ·Π±ΠΈΠ²Π°Ρ‚ΠΈ свій ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ‚Π°ΠΊΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ, ΠΏΠΎΠΊΠΈ Π½Π΅ Π΄Ρ–ΠΉΠ΄Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Π΄ΠΎ ΠΎΠ΄Π½ΠΈΡ… лишС пластин Π² якості Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Ρ–Π², Π°Π±ΠΎ ΠΏΡ–Ρ‚ΠΈ Ρ‰Π΅ глибшС Ρ– Π΄ΠΎΠ΄Π°Ρ‚ΠΈ свої Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π²ΠΈΠ΄ΠΎΠ±ΡƒΡ‚ΠΊΡƒ Ρ– Π²ΠΈΠΏΠ»Π°Π²ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠΆ. ВсС, Ρ‰ΠΎ Ρ” Π½Π°ΠΉΠ±Ρ–Π»ΡŒΡˆ Π·Ρ€ΡƒΡ‡Π½ΠΈΠΌ для вас Ρ– Π²Π°ΡˆΠΎΡ— Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.\n\nДля ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ–Π² Π· вСликою ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŽ ΠΏΡ€ΠΎΠΌΡ–ΠΆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ–Π², ваша колСкція Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² ΠΌΠΎΠΆΠ΅ Π΄ΠΎΡΠΈΡ‚ΡŒ швидко стати Π΄ΠΎΡΠΈΡ‚ΡŒ бСзладною. Π©ΠΎΠ± впоратися Π· Ρ†ΠΈΠΌ, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ°Ρ‚ΠΈ ΠΊΡ–Π»ΡŒΠΊΠ° ΠΏΠΎΠ²Π΅Ρ€Ρ…Ρ–Π² Π· Ρ€Ρ–Π·Π½ΠΈΠΌΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°ΠΌΠΈ Π½Π° ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ Π· Π½ΠΈΡ…. Π©ΠΎΠ± створити Ρ‚Π°ΠΊ Π·Π²Π°Π½ΠΈΠΉ ΠΏΡ–Π΄ΠΏΠΎΠ²Π΅Ρ€Ρ…, __CONTROL_STYLE_BEGIN__left-click__CONTROL_STYLE_END__ Π½Π° ΠΏΡ–ΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΡ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, який Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ ΠΎΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ Π΄Π°Π»Ρ–. Π¦Π΅ ΠΏΡ€ΠΈΠ·Π²Π΅Π΄Π΅ Π΄ΠΎ появи ΠΏΡ–Π΄ΠΏΠΎΠ²Π΅Ρ€Ρ…Ρƒ (Π·Π²Π΅Ρ€Π½Ρ–Ρ‚ΡŒ ΡƒΠ²Π°Π³Ρƒ, Ρ‰ΠΎ Ρ€Ρ–Π²Π΅Π½ΡŒ Π±ΡƒΠ΄Π΅ відобраТатися як [font=default-semibold]2[/font]), Π² якому Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ΄Π°Π²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Ρ‚Π°ΠΊ само, як Ρ– Ρ€Π°Π½Ρ–ΡˆΠ΅. Π’Π΅Π»ΠΈΠΊΠ° різниця полягає Π² Ρ‚ΠΎΠΌΡƒ, Ρ‰ΠΎ Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ турбуватися лишС ΠΏΡ€ΠΎ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, Π½Π° який Π²ΠΈ натиснули.\n\nΠ† Ρ†Π΅ лишС основи! Π†ΡΠ½ΡƒΡŽΡ‚ΡŒ Ρ‰Π΅ дСякі Ρ€ΠΎΠ·ΡˆΠΈΡ€Π΅Π½Ρ– Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ—, які ΡΡ‚Π°Π½ΡƒΡ‚ΡŒ Π²Π°ΠΌ Ρƒ Π½Π°Π³ΠΎΠ΄Ρ–, Π°Π»Π΅ Ρ†ΡŒΠΎΠ³ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚Π½ΡŒΠΎ для ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡƒ. Π‘Ρ‚Π²ΠΎΡ€Ρ–Ρ‚ΡŒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ (Π½Π° Π²ΠΊΠ»Π°Π΄Ρ†Ρ– [font=default-semibold]ІнтСрфСйс[/font]), якщо Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ погратися Π· базовою Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΡŽ Π»Ρ–Π½Ρ–Ρ”ΡŽ." - -# Matrix Solver= -tutorial_matrix_solver_text=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ Ρ” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ оновлСння Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΡ— Ρ‚Π°Π±Π»ΠΈΡ†Ρ–. Π—Π° замовчуванням Factory Planner Π²ΠΈΡ€Ρ–ΡˆΡƒΡ” Ρ‚Π°Π±Π»ΠΈΡ†ΡŽ Π·Π²Π΅Ρ€Ρ…Ρƒ Π²Π½ΠΈΠ·, Π² Ρ‚ΠΎΠΉ час як ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ Π²ΠΈΡ€Ρ–ΡˆΡƒΡ” ΠΊΠΎΠΆΠ΅Π½ рядок одночасно Π·Π° допомогою систСми Ρ€Ρ–Π²Π½ΡΠ½ΡŒ. ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ складним Ρƒ використанні, Π°Π»Π΅ Ρ‚Π°ΠΊΠΎΠΆ Π΄ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΡƒΠΆΠ½ΠΈΠΌ. Наприклад, Π²Ρ–Π½ обробляє ΠΏΠ΅Ρ€Π΅Ρ€ΠΎΠ±ΠΊΡƒ, вилучСння Ρ‚Π° Ρ†ΠΈΠΊΠ»ΠΈ. \n\nΠšΠΎΠΆΠ½Ρ–ΠΉ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΡ†Ρ– ΠΏΡ€ΠΈΠ·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π· Π΄Π²ΠΎΡ… Ρ€ΠΎΠ·Π²`язувачів, послідовний Ρ€ΠΎΠ·Π²`язувач (Π·Π° замовчуванням) Π°Π±ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Ρ€ΠΎΠ·Π²`язувач. Π©ΠΎΠ± ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈΡΡ Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Ρ€ΠΎΠ·Π²`язувач, ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ–Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‡ Ρ€ΠΎΠ·Π²`язувача Π² Π½ΠΈΠΆΠ½ΡŒΠΎΠΌΡƒ Π»Ρ–Π²ΠΎΠΌΡƒ ΠΊΡƒΡ‚ΠΊΡƒ Π² полоТСння "ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ". ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ Π·Π°Π»ΠΈΡˆΠ°Ρ‚ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΠΌ Π΄ΠΎ Ρ‚ΠΈΡ… ΠΏΡ–Ρ€, ΠΏΠΎΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‡ Π½Π΅ Π±ΡƒΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π·Π½ΠΎΠ²Ρƒ, Ρ– Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π·ΠΌΡ–Π½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π². \n\nУвімкнСння ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡Π° Ρ‚Π°ΠΊΠΎΠΆ дозволяє Π²ΠΈΠ±Ρ€Π°Ρ‚ΠΈ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π©ΠΎΠ± Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΊΠ»Π°Ρ†Π½Ρ–Ρ‚ΡŒ Π°Π±ΠΎ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π² рядку, Π°Π±ΠΎ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π²Π³ΠΎΡ€Ρ–. Π¦Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, Π΄Π΅ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρ” Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΎΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‡ΠΈ пустоти. \n\nΠ†Π½ΠΎΠ΄Ρ– Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ– Π²ΠΈΠΌΠ°Π³Π°Ρ”, Ρ‰ΠΎΠ± ΠΏΠ΅Π²Π½Ρ– Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π±ΡƒΠ»ΠΈ встановлСні як "Π½Π΅ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Ρ–". Π—Π°Π·Π²ΠΈΡ‡Π°ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ збалансовані, Ρ‚ΠΎΠ±Ρ‚ΠΎ Π²ΠΎΠ½ΠΈ Π²ΠΈΡ‚Ρ€Π°Ρ‡Π°ΡŽΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ само швидко, як Ρ– Π²ΠΈΡ€ΠΎΠ±Π»ΡΡŽΡ‚ΡŒΡΡ. Однак, "Π½Π΅ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Ρ– ΠΏΠΎΠ·ΠΈΡ†Ρ–Ρ—" Π½Π΅ Π±Π°Π»Π°Π½ΡΡƒΡŽΡ‚ΡŒΡΡ Ρ– Π·`ΡΠ²Π»ΡΡŽΡ‚ΡŒΡΡ як ΠΊΡ–Π½Ρ†Π΅Π²Ρ– Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΈ Π°Π±ΠΎ ΠΏΠΎΠ±Ρ–Ρ‡Π½Ρ– ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ. Π―ΠΊΡ‰ΠΎ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– Π½Π΅ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Ρ– Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ, Π²Ρ–Π΄ΠΊΡ€ΠΈΡ”Ρ‚ΡŒΡΡ Π΄Ρ–Π°Π»ΠΎΠ³ΠΎΠ²Π΅ Π²Ρ–ΠΊΠ½ΠΎ для Π²ΠΈΠ±ΠΎΡ€Ρƒ Π½Π΅ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½ΠΈΡ… Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ–Π². НСобмСТСні ΠΏΠΎΠ·ΠΈΡ†Ρ–Ρ— часто ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½Ρ–, ΠΊΠΎΠ»ΠΈ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ». Π©ΠΎΠ± Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Ρ†Π΅ Π΄Ρ–Π°Π»ΠΎΠ³ΠΎΠ²Π΅ Π²Ρ–ΠΊΠ½ΠΎ, Π½Π°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π½Ρ– ΠΏΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ Π²Ρ–Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‡Π° Ρ€ΠΎΠ·Π²`язувача. \n\nΠžΡΡ‚Π°Π½Π½Ρ Π²ΠΈΠΌΠΎΠ³Π° - Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ– Π±ΡƒΡ‚ΠΈ Π»Ρ–Π½Ρ–ΠΉΠ½ΠΎ Π½Π΅Π·Π°Π»Π΅ΠΆΠ½ΠΈΠΌΠΈ. Π¦Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Ρ”, Ρ‰ΠΎ для ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡ— ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Ρ‚Ρ–Π»ΡŒΠΊΠΈ ΠΎΠ΄Π½Π΅ ΡƒΠ½Ρ–ΠΊΠ°Π»ΡŒΠ½Π΅ Ρ€Ρ–ΡˆΠ΅Π½Π½Ρ. Π†Π½ΡˆΠΈΠΌΠΈ словами, ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Ρ€ΠΎΠ·Π²`язувач Π½Π΅ Π±ΡƒΠ΄Π΅ ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ, якщо існує Π΄Π΅ΠΊΡ–Π»ΡŒΠΊΠ° способів створСння Π·Π°Π΄Π°Π½ΠΎΡ— ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†Ρ–Ρ—. Π―ΠΊΡ‰ΠΎ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΠ°Ρ” Π»Ρ–Π½Ρ–ΠΉΠ½ΠΎ Π·Π°Π»Π΅ΠΆΠ½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, спробуйтС Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ Π½Π°Π΄Π»ΠΈΡˆΠΊΠΎΠ²Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, ΠΏΠΎΠΊΠΈ ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° Π½Π΅ Π·Π½ΠΈΠΊΠ½Π΅. Ця Π²ΠΈΠΌΠΎΠ³Π° ΡΡ‚ΠΎΡΡƒΡ”Ρ‚ΡŒΡΡ всіх ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊ. - -# Item options dialog= -options_item_title=Встановити __1__ суму -options_item_text=Встановити ΠΏΠ΅Π²Π½Ρƒ суму для ’__1__' -options_item_amount=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ -options_item_amount_tt=Π’ΠΊΠ°ΠΆΡ–Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Ρ†ΡŒΠΎΠ³ΠΎ __1__, яку Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ‰ΠΎΠ± Ρ†Π΅ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ __2__. Π¦Π΅ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΎ скоригує відсоток Ρ†ΡŒΠΎΠ³ΠΎ рядка. -options_subfactory_ingredient_amount_tt=Π’ΠΊΠ°ΠΆΡ–Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Ρ†ΡŒΠΎΠ³ΠΎ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Π°, яку Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅, Ρ‰ΠΎΠ± ця ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° споТивала. Π¦Π΅ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ скоригує ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΉΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†Ρ–Ρ—. - -# Utility dialog= -utilities=Π£Ρ‚ΠΈΠ»Ρ–Ρ‚ΠΈ -utility_title_components=ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ -utility_title_components_tt=ΠŸΠΎΠΊΠ°Π·ΡƒΡ” машини Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Ρ–, Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– для ΠΏΠΎΠ±ΡƒΠ΄ΠΎΠ²ΠΈ ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡ— ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ/ΠΏΠΎΠ²Π΅Ρ€Ρ…Ρƒ. МоТС Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΠΈ маяки Ρ‚Π° маякові ΠΌΠΎΠ΄ΡƒΠ»Ρ– Ρ‚Ρ–Π»ΡŒΠΊΠΈ Ρ‚ΠΎΠ΄Ρ–, ΠΊΠΎΠ»ΠΈ встановлСно Ρ—Ρ… "Π—Π°Π³Π°Π»ΡŒΠ½Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ маяків". ΠžΠΊΡ€ΡƒΠ³Π»ΡΡ” суми Π² ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ рядку ΠΎΠΊΡ€Π΅ΠΌΠΎ. -utility_title_notes=Нотатки -components_needed_tt="__1__\n[font=default-bold]__2__[/font] Π² Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€Ρ– / [font=default-bold]__3__[/font] ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ\n__CONTROL_STYLE_BEGIN__Click__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± Π²ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΠΈ Ρ†Π΅ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ Π²Ρ€ΡƒΡ‡Π½Ρƒ" -no_components_needed=__1__ Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ -utility_blueprint_tt=ΠŸΠ΅Ρ€Π΅Ρ‚Π²ΠΎΡ€Ρ–Ρ‚ΡŒ всі ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ, яких Π½Π΅ вистачає Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€Ρ–, Π² рядок ΠΏΡ€ΠΎΡ”ΠΊΡ‚, Ρ‰ΠΎ ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ постійні ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ‚ΠΎΡ€ΠΈ. ΠŸΠΎΡ‚Ρ–ΠΌ Ρ—Ρ… ΠΌΠΎΠΆΠ½Π° ΠΏΡ€ΠΈΡ”Π΄Π½Π°Ρ‚ΠΈ Π΄ΠΎ скрині Π·Π°ΠΏΠΈΡ‚ΡƒΠ²Π°Ρ‡Π°, Ρ‰ΠΎΠ± доставити Ρ—Ρ… Π²Π°ΠΌ. -utility_no_items_necessary=Π£ Π²Π°ΡˆΠΎΠΌΡƒ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€Ρ– Π²ΠΆΠ΅ Ρ” всі Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ для Π±ΡƒΠ΄Ρ–Π²Π½ΠΈΡ†Ρ‚Π²Π° Ρ†ΡŒΠΎΠ³ΠΎ __1__ -request_items=Π—Π°ΠΏΠΈΡ‚ -request_items_tt="Π—Π°ΠΏΠΈΡ‚ΡƒΡ” всі ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ, яких Π½Π΅ вистачає Ρƒ Π²Π°ΡˆΠΎΠΌΡƒ Ρ–Π½Π²Π΅Π½Ρ‚Π°Ρ€Ρ–, Ρ‰ΠΎΠ± ΠΏΠΎΠ±ΡƒΠ΄ΡƒΠ²Π°Ρ‚ΠΈ Ρ†Π΅ΠΉ __1__.\n[font=default-semibold][color=#84CDEC]ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠ°:[/color][/font] Для Ρ†ΡŒΠΎΠ³ΠΎ Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‚ΡŒΡΡ Π±ΡƒΠ΄Ρ–Π²Π΅Π»ΡŒΠ½Ρ– Π±ΠΎΡ‚ΠΈ (Π½Π΅ логістичні Π±ΠΎΡ‚ΠΈ), які Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡŒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΈΡ… Ρ€ΠΎΠ±ΠΎΠΏΠΎΡ€Ρ‚ΠΎΠ²ΠΈΡ… Π±ΠΎΡ‚Ρ–Π². Π‘Π°ΠΆΠ°Π½ΠΎ Π²Ρ–Π΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ особистий Ρ€ΠΎΠ±ΠΎΠΏΠΎΡ€Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΏΠΈΡ‚ΠΎΠΌ Ρ‚ΠΎΠ²Π°Ρ€Ρƒ." -cancel_request=Бкасувати -request_logistics_not_researched=Π ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½Ρ–Ρ‡Π½Ρ– Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Ρ–Ρ— ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡŒ дослідТСння, Ρ‰ΠΎΠ± Π·Π°Π±Π΅Π·ΠΏΠ΅Ρ‡ΠΈΡ‚ΠΈ Ρ‚Π°ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΎΠ½Π°Π»ΡŒΠ½Ρ–ΡΡ‚ΡŒ -request_no_character=Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ ΠΌΠ°Ρ‚ΠΈ ΠΏΡ€ΠΈΠ²`язаного Π΄ΠΎ вас пСрсонаТа, Ρ‰ΠΎΠ± ΠΌΠ°Ρ‚ΠΈ ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡ‚ΡƒΠ²Π°Ρ‚ΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΈ -utility_no_character=НС ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΡ— Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π±Π΅Π· асоційованого пСрсонаТа -utility_no_recipes=Ніякі Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ створити Ρ†Π΅ΠΉ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ -utility_no_demand=ΠŸΠΎΠΏΠΈΡ‚ Π½Π° Ρ†ΡŽ ΠΏΠΎΠ·ΠΈΡ†Ρ–ΡŽ Π²ΠΆΠ΅ Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΎ -utility_no_resources=ΠΠ΅Π΄ΠΎΡΡ‚Π°Ρ‚Π½ΡŒΠΎ рСсурсів для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ - -# Preferences= -preferences=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ -preferences_support="ΠŸΡ–Π΄Ρ‚Ρ€ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΌΠΎΠ΄ Π·Π° посиланням [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]!" -preferences_info=Π¦Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ ΠΌΡ–ΡΡ‚ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, які Π²ΠΈ часто\nΠ·ΠΌΡ–Π½ΡŽΡ”Ρ‚Π΅ протягом Π³Ρ€ΠΈ. Для отримання Π·Π°Π³Π°Π»ΡŒΠ½ΠΈΡ… Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ–Ρ‚ΡŒ Π²\nΠ“ΠΎΠ»ΠΎΠ²Π½Π΅ ΠΌΠ΅Π½ΡŽβ†’ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρβ†’ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Ρ€Π΅ΠΆΠΈΠΌΡ–Π²\nΠ—Π°Π³Π°Π»ΡŒΠ½Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ\nΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ. -preference_general_title=Π—Π°Π³Π°Π»ΡŒΠ½Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ -preference_general_title_tt=ДСякі Π·Π°Π³Π°Π»ΡŒΠ½Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ, які Π²ΠΈ, ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ рСгулярно Π·ΠΌΡ–Π½ΡŽΠ²Π°Ρ‚ΠΈ -preference_general_ignore_barreling_recipes=Π†Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ бочкування Ρ‚Π° укладання Π² ΡˆΡ‚Π°Π±Π΅Π»Ρ– -preference_general_ignore_barreling_recipes_tt=Дозволяє Ρ–Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ (Ρ€ΠΎΠ·)бочкування Ρ– (Ρ€ΠΎΠ·)укладання ΠΏΡ€ΠΈ ΠΏΠΎΡˆΡƒΠΊΡƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° (Π’Ρ–Π»ΡŒΠΊΠΈ для сумісних ΠΌΠΎΠ΄Ρ–Π²) -preference_general_ignore_recycling_recipes=Π†Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ пСрСроблСння -preference_general_ignore_recycling_recipes_tt=Дозволяє Ρ–Π³Π½ΠΎΡ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, які ΠΏΠ΅Ρ€Π΅Ρ€ΠΎΠ±Π»ΡΡŽΡ‚ΡŒ Ρ‡ΠΈΠ½Π½ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ–Π² (Π’Ρ–Π»ΡŒΠΊΠΈ для сумісних ΠΌΠΎΠ΄Ρ–Π²) -preference_general_ingredient_satisfaction=Π—Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½Ρ–ΡΡ‚ΡŒ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Π°ΠΌΠΈ -preference_general_ingredient_satisfaction_tt=ΠŸΠΎΠΊΠ°Π·ΡƒΡ”, Ρ‡ΠΈ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½ΡΡŽΡ‚ΡŒΡΡ Π²ΠΈΠΌΠΎΠ³ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π΄ΠΎ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Ρ–Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°ΠΌΠΈ, Ρ‰ΠΎ Π·Π½Π°Ρ…ΠΎΠ΄ΡΡ‚ΡŒΡΡ ΠΏΡ–Π΄ Π½ΠΈΠΌ -preference_general_round_button_numbers=Π—Π°ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½Ρ– Π½ΠΎΠΌΠ΅Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ -preference_general_round_button_numbers_tt=ΠžΠΊΡ€ΡƒΠ³Π»ΡΡ” Ρ†ΠΈΡ„Ρ€ΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½ΠΈΡ… Ρ‚Π° стрічкових/Π»Ρ–Π½Ρ–ΠΉΠ½ΠΈΡ… ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Π² Π±Ρ–Π»ΡŒΡˆΡƒ сторону -preference_general_attach_subfactory_products=ΠŸΡ–ΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†Ρ–Ρ— ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -preference_general_attach_subfactory_products_tt=ΠŸΠΎΠΊΠ°Π·ΡƒΡ” ΠΏΡ–ΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†Ρ–Ρ—, Ρ‰ΠΎ Π²ΠΈΡ€ΠΎΠ±Π»ΡΡ”Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, поряд Π· Ρ—Ρ— назвою -preference_production_title=Колонки Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡ΠΎΠ³ΠΎ столу -preference_production_title_tt=Π¦Π΅ дозволяє Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ дСякі Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρ– Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π° -preference_production_done_column=ΠŸΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ як Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΈΠΉ -preference_production_done_column_tt=Π”ΠΎΠ΄Π°Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° Π· кнопкою, яка дозволяє Π²Ρ–Π΄Π·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ як Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΈΠΉ, Ρ‰ΠΎ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ чисто Π²Ρ–Π·ΡƒΠ°Π»ΡŒΠ½ΠΎΡŽ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ”ΡŽ для вас Ρ– ніяк Π½Π΅ Π²ΠΏΠ»ΠΈΠ²Π°Ρ” Π½Π° сам Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -preference_production_pollution_column=ЗабруднСння -preference_production_pollution_column_tt=Π”ΠΎΠ΄Π°Ρ” ΡΡ‚ΠΎΠ²ΠΏΠ΅Ρ†ΡŒ, Ρ‰ΠΎ Π·ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ” забруднСння, Π²ΠΈΡ€ΠΎΠ±Π»Π΅Π½Π΅ Ρ†ΠΈΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ -preference_production_line_comment_column=ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€Ρ– Π΄ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_production_line_comment_column_tt=Π”ΠΎΠ΄Π°Π½ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Π· тСкстовим ΠΏΠΎΠ»Π΅ΠΌ, Ρ‰ΠΎΠ± Π²ΠΈ ΠΌΠΎΠ³Π»ΠΈ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Π½ΠΎΡ‚Π°Ρ‚ΠΊΠΈ Π΄ΠΎ ΠΎΠΊΡ€Π΅ΠΌΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² -preference_mb_defaults_title=ЗначСння модуля Π·Π° замовчуванням -preference_mb_defaults_title_tt=Встановити ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π·Π° замовчуванням, Π· яким Π±ΡƒΠ΄Π΅ намагатися Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Ρ‚ΠΈΡΡŒ ΠΊΠΎΠΆΠ΅Π½ Π½ΠΎΠ²ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -preference_mb_default_machine=Основний -preference_mb_default_machine_tt=ΠŸΠ΅Ρ€ΡˆΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, який Π±ΡƒΠ΄Π΅ намагатися вставити Π² Π½ΠΎΠ²ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -preference_mb_default_machine_secondary=Π’Ρ‚ΠΎΡ€ΠΈΠ½Π½ΠΈΠΉ -preference_mb_default_machine_secondary_tt=Π―ΠΊΡ‰ΠΎ ΠΏΠ΅Ρ€ΡˆΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ сумісний Π· Π½ΠΎΠ²ΠΈΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ, Π·Π°ΠΌΡ–ΡΡ‚ΡŒ нього спробує вставитися Ρ†Π΅ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ -preference_mb_default_beacon=ΠœΠΎΠ΄ΡƒΠ»ΡŒ -preference_mb_default_beacon_tt=ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π·Π° замовчуванням, який Π±ΡƒΠ΄Π΅ намагатися вставити Π² маячок ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_mb_default_beacon_amount=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ -preference_mb_default_beacon_amount_tt=Π’ΠΊΠ°Π·ΡƒΡ”, Π½Π° ΡΠΊΡ–Π»ΡŒΠΊΠΈ маячків Π±ΡƒΠ΄Π΅ Π²ΠΏΠ»ΠΈΠ²Π°Ρ‚ΠΈ ΠΊΠΎΠΆΠ½Π° ΠΎΠΊΡ€Π΅ΠΌΠ° машина для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_default_belts_title=Π‘Π°ΠΆΠ°Π½ΠΈΠΉ ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€ -preference_default_belts_title_tt=Π—Π°Π΄Π°Ρ” Ρ‚ΠΈΠΏ ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€Π°, який Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€ΠΎΠ·Ρ€Π°Ρ…ΡƒΠ½ΠΊΡƒ ΠΏΠΎΠΏΠΈΡ‚Ρƒ Π½Π° ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€/полосу Π°Π±ΠΎ ΠΏΡ€ΠΈ спСцифікації Ρ‚ΠΎΠ²Π°Ρ€Ρ–Π² Π·Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŽ ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€Ρ–Π²/полос -preference_default_beacons_title=Π‘Π°ΠΆΠ°Π½ΠΈΠΉ маяк -preference_default_beacons_title_tt=Π—Π°Π΄Π°Ρ” маячок, який ΠΎΠ±ΠΈΡ€Π°Ρ”Ρ‚ΡŒΡΡ Π·Π° замовчуванням ΠΏΡ€ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π½Π½Ρ– Π΄ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° -preference_default_fuels_title=Π‘Π°ΠΆΠ°Π½Π΅ ΠΏΠ°Π»ΠΈΠ²ΠΎ -preference_default_fuels_title_tt=Π—Π°Π΄Π°Ρ” ΠΏΠ°Π»ΠΈΠ²ΠΎ, якС ΠΎΠ±ΠΈΡ€Π°Ρ”Ρ‚ΡŒΡΡ Π·Π° замовчуванням ΠΏΡ€ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π½Π½Ρ– машини Π· Π΄ΠΆΠ΅Ρ€Π΅Π»ΠΎΠΌ Π΅Π½Π΅Ρ€Π³Ρ–Ρ— пальника -preference_default_machines_title=Π‘Π°ΠΆΠ°Π½Π° машина -preference_default_machines_title_tt=Π’ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ” ΠΌΠ°ΡˆΠΈΠ½Ρƒ, яка Π²ΠΈΠ±ΠΈΡ€Π°Ρ”Ρ‚ΡŒΡΡ Π·Π° замовчуванням для ΠΊΠΎΠΆΠ½ΠΎΡ— ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€Ρ–Ρ— ΠΏΡ€ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π½Π½Ρ– Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°.\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ Π±ΡƒΠ΄ΡŒ-яку ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Ρ‰ΠΎΠ± встановити Ρ—Ρ— Π½Π° ΠΊΠΎΠΆΠ½Ρƒ Ρ–Π½ΡˆΡƒ ΠΏΠΎΠ΄Ρ–Π±Π½Ρƒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€Ρ–ΡŽ. -preference_default_wagons_title=Π‘Π°ΠΆΠ°Π½ΠΈΠΉ Π²Π°Π³ΠΎΠ½ -preference_default_wagons_title_tt=Π—Π°Π΄Π°Ρ” Ρ‚ΠΈΠΏ Π²Π°Π³ΠΎΠ½Π°, який Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€ΠΎΠ·Ρ€Π°Ρ…ΡƒΠ½ΠΊΡƒ ΠΏΠΎΠΏΠΈΡ‚Ρƒ Π½Π° Π²Π°Π³ΠΎΠ½ΠΈ - -# Recipe dialog= -recipe_instruction=ΠžΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π½Π° __1__ "__2__ -show=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ -unresearched_recipes=НСдослідТСний Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -hidden_recipes=ΠŸΡ€ΠΈΡ…ΠΎΠ²Π°Π½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ -no_recipe_found=Ніякі Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π½Π΅ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°ΡŽΡ‚ΡŒ вашим ΡƒΠΌΠΎΠ²Π°ΠΌ Ρ„Ρ–Π»ΡŒΡ‚Ρ€Π°Ρ†Ρ–Ρ— - -# Remote interfaces= -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Книга Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² - -# Generator= -fluid_at_temperature=__1__ Ρƒ __2__ __3__ - -# Modal dialogs= -submit=Надіслати -delete=Π’ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ -cancel=Бкасувати -confirm_dialog_tt=- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_confirm_dialog__, Ρ‰ΠΎΠ± ΠΏΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΠΈ - -cancel_dialog_tt=- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__toggle-menu__ Ρ‰ΠΎΠ± скасувати - -search_button_tt=- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__focus-search__, Ρ‰ΠΎΠ± сфокусуватися Π½Π° ΠΏΠΎΠ»Ρ– ΠΏΠΎΡˆΡƒΠΊΡƒ - -close_button_tt=- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__toggle-menu__ Ρ‰ΠΎΠ± Π·Π°ΠΊΡ€ΠΈΡ‚ΠΈ - -searchfield_tt=Π€Ρ–Π»ΡŒΡ‚Ρ€ΡƒΠ²Π°Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈ, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ Ρ—Ρ… Π½Π°Π·Π²ΠΈ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎΡŽ мовою -searchfield_not_ready_tt="ΠŸΠΎΡˆΡƒΠΊ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π½ΠΎΡ— ΠΌΠΎΠ²ΠΈ Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΉ, Π±ΡƒΠ΄ΡŒ ласка, Π·Π°Ρ‡Π΅ΠΊΠ°ΠΉΡ‚Π΅.\nДля ΠΉΠΎΠ³ΠΎ пСрСзапуску скористайтСся консольною командою [font=default-semibold]'/fp-restart-translation'[/font]." -warning_with_icon="[img=fp_sprite_warning_red] __1__" - -# Picker dialog= -amount_by=Π‘ΡƒΠΌΠ° Π½Π° __1__ -no_item_found=НСмає Ρ‚ΠΎΠ²Π°Ρ€Ρ–Π², Ρ‰ΠΎ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°ΡŽΡ‚ΡŒ Π²Π°ΡˆΠΎΠΌΡƒ Π·Π°ΠΏΠΈΡ‚Ρƒ -picker_issue_select_item=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚, який Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ -picker_issue_enter_amount=Π’ΠΊΠ°ΠΆΡ–Ρ‚ΡŒ суму Π·Π° числом Π°Π±ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€ΠΎΠΌ - -# Matrix dialog= -matrix_free_items=НСобмСТСні Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ -matrix_constrained_items=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ __1__ Π½Π΅ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Ρ– __2__. НСобмСТСні ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ ΠΌΠΎΠΆΡƒΡ‚ΡŒ \nΠ±ΡƒΡ‚ΠΈ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ Π°Π±ΠΎ Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚Π°ΠΌΠΈ, \nΠ·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ Ρ€Ρ–ΡˆΠ΅Π½Π½Ρ ΠΏΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊΠ°. -matrix_linearly_dependent_recipes=ВиявлСно Π»Ρ–Π½Ρ–ΠΉΠ½ΠΎ Π·Π°Π»Π΅ΠΆΠ½Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ - -# Subfactory dialog= -subfactory_dialog_description=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Π½Π°Π·Π²Ρƒ для ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -subfactory_dialog_name=Назва -subfactory_dialog_name_tt=Назва ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ допускає Ρ€ΠΎΠ·ΡˆΠΈΡ€Π΅Π½ΠΈΠΉ тСкст, який ΠΌΠΎΠΆΠ½Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π·Π° допомогою ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½ΠΈΠΆΡ‡Π΅ -subfactory_dialog_rich_text=Π ΠΎΠ·ΡˆΠΈΡ€Π΅Π½ΠΈΠΉ тСкст -subfactory_dialog_rich_text_tt=Π¦Ρ– сСлСктори ΠΌΠΎΠΆΠ½Π° використовувати для додавання Ρ€ΠΎΠ·ΡˆΠΈΡ€Π΅Π½ΠΎΠ³ΠΎ тСксту Π΄ΠΎ Π½Π°Π·Π²ΠΈ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π—Π²ΠΈΡ‡Π°ΠΉΠ½ΠΎ, Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти Π°Π±ΠΎ вставити Π±ΡƒΠ΄ΡŒ-який Ρ€ΠΎΠ·ΡˆΠΈΡ€Π΅Π½ΠΈΠΉ тСкст самостійно. -subfactory_dialog_name_empty=Назва ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ½ΡŒΠΎΡŽ - -# Machine dialog= -machine_dialog_description=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Ρ‚ΠΈ Ρ‚Π΅Ρ…Π½Ρ–ΠΊΡƒ для__1__' -machine_does_not_use_fuel=Π½Π΅ використовує ΠΏΠ°Π»ΠΈΠ²ΠΎ -machine_limit=ОбмСТСння -machine_limit_tt=ΠžΠ±ΠΌΠ΅ΠΆΡƒΡ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ машин, які Π±ΡƒΠ΄ΡƒΡ‚ΡŒ використовуватися Π½Π° Ρ†Ρ–ΠΉ Π»Ρ–Π½Ρ–Ρ—. Π€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ мСншою, якщо ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ мСншС машин. -machine_force_limit=Π’ΠΎΡ‡Π½ΠΈΠΉ Π»Ρ–ΠΌΡ–Ρ‚ -machine_force_limit_tt=Π—ΠΌΡƒΡˆΡƒΡ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ машин Π±ΡƒΡ‚ΠΈ самС Ρ‚Π°ΠΊΠΎΡŽ, як Π·Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π²ΠΈΡ‰Π΅, Π½Π°Π²Ρ–Ρ‚ΡŒ якщо Ρ†Π΅ ΠΏΡ€ΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π°. ΠœΠ°Ρ” сСнс лишС Π² ΠΏΠΎΡ”Π΄Π½Π°Π½Π½Ρ– Π· Π»Ρ–ΠΌΡ–Ρ‚ΠΎΠΌ машин. - -# Beacon dialog= -beacon_dialog_description_add=Π”ΠΎΠ΄Π°Ρ‚ΠΈ маяки Π΄ΠΎ__1__' -beacon_dialog_description_edit=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠΉΡ‚Π΅ маяка для__1__' -beacon_amount_tt=Π’ΡƒΡ‚ Π²ΠΊΠ°Π·ΡƒΡ”Ρ‚ΡŒΡΡ, ΡΠΊΡ–Π»ΡŒΠΊΠΈ маячків Π±ΡƒΠ΄Π΅ Π²ΠΏΠ»ΠΈΠ²Π°Ρ‚ΠΈ Π½Π° ΠΊΠΎΠΆΠ½Ρƒ ΠΎΠΊΡ€Π΅ΠΌΡƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти дСсятковС число, якС ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ використано для зобраТСння Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Ρƒ, Ρ‰ΠΎ дСякі Π· Π²Π°ΡˆΠΈΡ… машин ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ ΠΎΡ…ΠΎΠΏΠ»Π΅Π½Ρ– Ρ€Ρ–Π·Π½ΠΎΡŽ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŽ маячків. -beacon_total=Усього -beacon_total_tt=Π’ΡƒΡ‚ Π²ΠΊΠ°Π·ΡƒΡ”Ρ‚ΡŒΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ маячків, які Π²ΠΈ використовуєтС для Ρ†ΡŒΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π½Π° Π²Π°ΡˆΠΎΠΌΡƒ Π·Π°Π²ΠΎΠ΄Ρ–. Ця інформація ΠΏΠΎΡ‚Ρ–ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ”Ρ‚ΡŒΡΡ Π² Ρ€ΠΎΠ·Ρ€Π°Ρ…ΡƒΠ½ΠΊΠΈ СнСргоспоТивання. -beacon_selector_tt=ВикористовуйтС інструмСнт Π²ΠΈΠ±ΠΎΡ€Ρƒ для ΠΏΡ–Π΄Ρ€Π°Ρ…ΡƒΠ½ΠΊΡƒ маячків Π½Π° Π²Π°ΡˆΠΎΠΌΡƒ Π²ΠΆΠ΅ ΠΏΠΎΠ±ΡƒΠ΄ΠΎΠ²Π°Π½ΠΎΠΌΡƒ Π·Π°Π²ΠΎΠ΄Ρ– -beacon_issue_set_amount=Π’Π²Π΅Π΄Ρ–Ρ‚ΡŒ суму маяка Π±Ρ–Π»ΡŒΡˆΠ΅ 0 -beacon_issue_no_modules=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Π°ΠΉΠΌΠ½Ρ– ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ - -# Title bar= -switch_to_compact_view=Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΠΉ вигляд\n- Π½Π°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_toggle_compact_view__ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ - -pause_on_interface=ΠŸΠ΅Ρ€Π΅ΠΌΠΈΠΊΠ°Ρ‡ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ призупинСння Π³Ρ€ΠΈ Ρƒ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌΡƒ Ρ€Π΅ΠΆΠΈΠΌΡ– ΠΏΡ€ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΎΠΌΡƒ основному інтСрфСйсі (Ρ‚Ρ–Π»ΡŒΠΊΠΈ для ΠΎΠ΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΡ— Π³Ρ€ΠΈ)\n- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_toggle_pause__ для пСрСмикання ΠΏΠ°ΡƒΠ·ΠΈ - -close_interface=Π—Π°ΠΊΡ€ΠΈΠΉΡ‚Π΅ Ρ†Π΅ΠΉ інтСрфСйс\n- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_toggle_interface__ для закриття - - -# Subfactory list= -action_open_archive_tt=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π°Ρ€Ρ…Ρ–Π² ΠΏΡ–Π΄ Π·Π°Π²ΠΎΠ΄\n__1__ -archive_empty="[font=default-semibold] - Архів Π² Π΄Π°Π½ΠΈΠΉ час ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉ -[/font]" -archive_filled="[font=default-semibold] - Архів Π½Π°Ρ€Π°Π·Ρ– ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ __1__ __2__ -[/font]" -action_close_archive_tt=Π—Π°ΠΊΡ€ΠΈΡ‚ΠΈ Π°Ρ€Ρ…Ρ–Π² ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -action_import_subfactory=Π†ΠΌΠΏΠΎΡ€Ρ‚ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π·Π° допомогою рядка, створСного Π² Ρ–Π½ΡˆΠΎΠΌΡƒ Π·Π±Π΅Ρ€Π΅ΠΆΠ΅Π½Π½Ρ– -action_export_subfactory=Експорт ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² рядок, яким ΠΌΠΎΠΆΠ½Π° поділитися Π· Ρ–Π½ΡˆΠΈΠΌΠΈ -action_archive_subfactory=ΠŸΠ΅Ρ€Π΅ΠΌΡ–ΡΡ‚ΠΈΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π΄ΠΎ Π°Ρ€Ρ…Ρ–Π²Ρƒ -action_unarchive_subfactory=ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π½Π°Π·Π°Π΄ Π· Π°Ρ€Ρ…Ρ–Π²Ρƒ -action_duplicate_subfactory=Π”ΡƒΠ±Π»ΡŽΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, ΡΡ‚Π²ΠΎΡ€ΡŽΡŽΡ‡ΠΈ Ρ–Π΄Π΅Π°Π»ΡŒΠ½Ρƒ ΠΊΠΎΠΏΡ–ΡŽ -action_add_subfactory_by_name=Π‘Ρ‚Π²ΠΎΡ€Ρ–Ρ‚ΡŒ Π½ΠΎΠ²Ρƒ ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± ΠΎΠ΄Ρ€Π°Π·Ρƒ Π²ΠΈΠ±Ρ€Π°Ρ‚ΠΈ Ρ‚ΠΎΠ²Π°Ρ€ -action_add_subfactory_by_product=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ для Π½ΠΎΠ²ΠΎΡ— ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± спочатку Π΄Π°Ρ‚ΠΈ Ρ—ΠΉ Π½Π°Π·Π²Ρƒ -action_edit_subfactory=Π’Ρ–Π΄Ρ€Π΅Π΄Π°Π³ΡƒΠΉΡ‚Π΅ Π½Π°Π·Π²Ρƒ ΠΎΠ±Ρ€Π°Π½ΠΎΡ— ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -action_trash_subfactory=ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΠΈ кошик ΠΎΠ±Ρ€Π°Π½ΠΎΡ— ΠΏΡ–Π΄Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ\nΠ’Ρ–Π½ Π±ΡƒΠ΄Π΅ збСрігатися Π² Π°Ρ€Ρ…Ρ–Π²Ρ– протягом __1__ Ρ…Π²ΠΈΠ»ΠΈΠ½ -action_delete_subfactory=Π’ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π½Ρƒ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π±Π΅Π·ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π½ΠΎ -subfactory_trashed="\n[font=default-bold] Π’ΠΈΠ΄Π°Π»Π΅Π½ΠΎ[/font] - Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π΅ видалСння Π² __1__ __plural_for_parameter_1_{1=Ρ…Π²ΠΈΠ»ΠΈΠ½Π°|rest=Ρ…Π²ΠΈΠ»ΠΈΠ½}__" -subfactory_invalid="\n[font=default-bold] НСдійснС[/font] - Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π²Ρ–Π΄Π½ΠΎΠ²ΠΈΡ‚ΠΈ" - -# Subfactory info= -subfactory_info=Інформація ΠΏΡ€ΠΎ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ -no_subfactory=Π½Π΅ Π²ΠΈΠ±Ρ€Π°Π½ΠΎ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ -subfactory_needs_repair=Ця ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° стала Π½Π΅Π΄Ρ–ΠΉΡΠ½ΠΎΡŽ, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ змінився Π½Π°Π±Ρ–Ρ€ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ… ΠΌΠΎΠ΄Ρ–Π². Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΠΎΠ·Π²`язувати Ρ†ΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π°Π±ΠΎ Π²ΠΈΠΏΡ€Π°Π²ΠΈΠ²ΡˆΠΈ Ρ—Ρ—, Π°Π±ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Π²ΡˆΠΈ відсутні ΠΌΠΎΠ΄ΠΈΡ„Ρ–ΠΊΠ°Ρ†Ρ–Ρ—. ВідновлСння видаляє всС, Ρ‰ΠΎ стало нСдійсним. -repair_subfactory=Π’Ρ–Π΄Π½ΠΎΠ²ΠΈΡ‚ΠΈ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ -timescale=Π¨ΠΊΠ°Π»Π° часу -timescale_tt="Часова шкала Π²ΠΈΠ·Π½Π°Ρ‡Π°Ρ”, як швидко Π±ΡƒΠ΄ΡƒΡ‚ΡŒ вироблятися Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. Наприклад, Π²ΠΈΠ±Ρ€Π°Π²ΡˆΠΈ [font=default-bold]1 ΠΌ[/font] Ρ– додавши ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π· 400 Π·Π΅Π»Π΅Π½ΠΈΡ… ΠΊΡ–Π», Π²ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ виробляти 400 ΠΊΡ–Π» [font=default-bold]Π·Π° Ρ…Π²ΠΈΠ»ΠΈΠ½Ρƒ[/font]." -mining_productivity=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ Π²Ρ–Π΄ΠΎΠ±ΡƒΡ‚ΠΊΡƒ -mining_productivity_tt=ΠŸΠΎΡ‚ΠΎΡ‡Π½ΠΈΠΉ бонус продуктивності Π²ΠΈΠ΄ΠΎΠ±ΡƒΡ‚ΠΊΡƒ. Π—Π° замовчуванням Π²Ρ–Π½ відстСТує прогрСс Π²Π°ΡˆΠΈΡ… Π΄ΠΎΡΠ»Ρ–Π΄ΠΆΠ΅Π½ΡŒ, Π°Π»Π΅ Π²ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ відсоток Π²Ρ€ΡƒΡ‡Π½Ρƒ. Π©ΠΎΠ± повСрнутися Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ відстСТСння, ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ тСкстовС ΠΏΠΎΠ»Π΅ Ρ– ΠΏΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ. -override=Π—ΠΌΡ–Π½ΠΈΡ‚ΠΈ -solver_choice=Π ΠΎΠ·Π²`язувач -solver_choice_tt=Π’ΠΈΠ±Π΅Ρ€Ρ–Ρ‚ΡŒ, який Π· Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡Ρ–Π² використовувати для Ρ†Ρ–Ρ”Ρ— ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’Ρ€Π°Π΄ΠΈΡ†Ρ–ΠΉΠ½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ ΠΏΡ€Π°Ρ†ΡŽΡ”, ΠΏΠ΅Ρ€Π΅Π³Π»ΡΠ΄Π°ΡŽΡ‡ΠΈ Π²Π°ΡˆΡ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ підряд Ρ‚Π° Π·`ΡΡΠΎΠ²ΡƒΡŽΡ‡ΠΈ Ρ—Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ. ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡, Π· Ρ–Π½ΡˆΠΎΠ³ΠΎ Π±ΠΎΠΊΡƒ, ΠΌΠΎΠΆΠ΅ ΠΌΠ°Ρ‚ΠΈ справу Π· Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ Ρ‚Π° ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ, Π°Π»Π΅ Ρ–Π½ΠΎΠ΄Ρ– ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡ” Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΎΡ— ΠΊΠΎΠ½Ρ„Ρ–Π³ΡƒΡ€Π°Ρ†Ρ–Ρ—. -solver_choice_traditional=Π’Ρ€Π°Π΄ΠΈΡ†Ρ–ΠΉΠ½Ρ– -solver_choice_matrix=ΠœΠ°Ρ‚Ρ€ΠΈΡ†Ρ -solver_choice_configure=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡Π° -subfactory_modset_changes=Π’Π°ΡˆΡ– Π°ΠΊΡ‚ΠΈΠ²Π½Ρ– ΠΌΠΎΠ΄ΠΈ змінилися. -subfactory_mod_removed="\n\n[color=#FF33][font=default-bold]Π¦Ρ– ΠΌΠΎΠ΄ΠΈ Π±ΡƒΠ»ΠΈ Π²ΠΈΠ΄Π°Π»Π΅Π½Ρ–:[/font][/color]" -subfactory_mod_added="\n\n[color=#33CC33][font=default-bold]Π¦Ρ– ΠΌΠΎΠ΄ΠΈ Π΄ΠΎΠ΄Π°Π½ΠΎ:[/font][/color]" -subfactory_mod_updated="\n\n[color=#CCCC00][font=default-bold]Π¦Ρ– ΠΌΠΎΠ΄ΠΈ Π±ΡƒΠ»ΠΈ ΠΎΠ½ΠΎΠ²Π»Π΅Π½Ρ–:[/font][/color]" -subfactory_mod_and_version=\n__1__ (v__2__) -subfactory_mod_and_versions=\n__1__: v__2__ β†’ v__3__ - -# Item boxes= -ingredients_to_combinator_tt=ΠŸΠ΅Ρ€Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ всі Ρ–Π½Π³Ρ€Π΅Π΄Ρ–Ρ”Π½Ρ‚ΠΈ Ρ†Ρ–Ρ”Ρ— ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² рядок схСми, Ρ‰ΠΎ ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒ константні ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ‚ΠΎΡ€ΠΈ. - -# View state= -view_state_tt=__1__\n- Π½Π°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_cycle_production_views__/__CONTROL__fp_reverse_cycle_production_views__ Ρ‰ΠΎΠ± Ρ†ΠΈΠΊΠ»ΠΈΡ‚ΠΈ ΠΌΡ–ΠΆ пСрСглядами - -items_per_timescale=Π’ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ–Π², ΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρ—Ρ… Π±ΡƒΠ΄Π΅ Π²ΠΈΡ€ΠΎΠ±Π»Π΅Π½ΠΎ/споТито Π·Π° __1__. -belts_or_lanes="Π’ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ” число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ–Π², якС Π²ΠΊΠ°Π·ΡƒΡ” Π½Π° Ρ‚Π΅, ΡΠΊΡ–Π»ΡŒΠΊΠΈ __1__ ΠΊΠΎΠ½Π²Π΅Ρ”Ρ€Ρ–Π² ΠΎΠ±Ρ€Π°Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ Ρ‚ΠΈΠΏΡƒ Π±ΡƒΠ΄Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ для транспортування ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ–Π². Для Ρ€Ρ–Π΄ΠΈΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π±Π°Ρ‡Π°Ρ”Ρ‚ΡŒΡΡ, Ρ‰ΠΎ Π²ΠΎΠ½ΠΈ Ρ€ΠΎΠ·Π»ΠΈΡ‚Ρ– Π² Π±ΠΎΡ‡ΠΊΠΈ ΠΏΠΎ [font=default-bold]50 Ρ€Ρ–Π΄ΠΈΠ½ΠΈ Π½Π° Π±ΠΎΡ‡ΠΊΡƒ[/font]\nΠΠ°Π»Π°ΡˆΡ‚ΠΎΠ²Π°Π½ΠΎ Π½Π° використання __2__ [font=default-bold]__3__[/font]." -wagons_per_timescale="Π’ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ” число Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°Ρ… Ρ‚ΠΎΠ²Π°Ρ€Ρƒ, ΡΠΊΡ–Π»ΡŒΠΊΠΈ Π²Π°Π³ΠΎΠ½Ρ–Π² Π· Π²Π°Π½Ρ‚Π°ΠΆΠ΅ΠΌ Π°Π±ΠΎ Ρ€Ρ–Π΄ΠΈΠ½ΠΎΡŽ Π±ΡƒΠ΄Π΅ Π·Π°ΠΏΠΎΠ²Π½Π΅Π½ΠΎ Π½ΠΈΠΌΠΈ Π·Π° __1__.\nΠšΠΎΠ½Ρ„Ρ–Π³ΡƒΡ€ΡƒΡ”Ρ‚ΡŒΡΡ для використання __2__ [font=default-bold]__3__[/font] Π°Π±ΠΎ __4__ [font=default-bold]__5__[/font]." -items_per_second_per_machine=Π’ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ” ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ…, ΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρ—Ρ… Π² сСкунду Π±ΡƒΠ΄Π΅ виробляти/споТивати ΠΎΠ΄Π½Π° машина. Π¦Π΅ Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°Ρ” ΠΎΡ†Ρ–Π½ΠΈΡ‚ΠΈ, ΡΠΊΡ–Π»ΡŒΠΊΠΈ Π·Π½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ставників. - -# Production box= -refresh_production=ΠžΠ½ΠΎΠ²Ρ–Ρ‚ΡŒ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ‡Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†ΡŽ Π½ΠΈΠΆΡ‡Π΅\n- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_refresh_production__, Ρ‰ΠΎΠ± ΠΎΠ½ΠΎΠ²ΠΈΡ‚ΠΈ - -production=Π’ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²ΠΎ -level=Π Ρ–Π²Π΅Π½ΡŒ -floor_up_tt=ΠŸΡ–Π΄Π½ΡΡ‚ΠΈΡΡ Π½Π° Ρ€Ρ–Π²Π΅Π½ΡŒ Π²ΠΈΡ‰Π΅ -floor_top_tt=ΠŸΡ–Π΄Π½Ρ–ΠΌΡ–Ρ‚ΡŒΡΡ Π½Π° Π²Π΅Ρ€Ρ…Π½Ρ–ΠΉ Ρ€Ρ–Π²Π΅Π½ΡŒ -fold_out_subfloors_tt=Π—Π³ΠΎΡ€Π½ΡƒΡ‚ΠΈ ΠΏΡ–Π΄Ρ€Ρ–Π²Π½Ρ– -show_floor_items_tt=Π—Π°ΠΌΡ–Π½ΠΈΡ‚ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½Ρ– Π²ΠΈΡ‰Π΅ підсумки ΠΏΠΎ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π½Π° підсумки для ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ рівня. Π—Π°ΡΡ‚ΠΎΡΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ лишС Π΄ΠΎ ΠΏΡ–Π΄Ρ€Ρ–Π²Π½Ρ–Π², Π° Π½Π΅ Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠ³ΠΎ рівня. -utility_dialog_tt=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π²Ρ–ΠΊΠ½ΠΎ ΡƒΡ‚ΠΈΠ»Ρ–Ρ‚ΠΈ -production_instruction_subfactory=Π”ΠΎΠ΄Π°ΠΉΡ‚Π΅ ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Π½Π°Ρ‚ΠΈΡΠ½ΡƒΠ²ΡˆΠΈ Π·Π΅Π»Π΅Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ "+" Ρƒ Π²Π΅Ρ€Ρ…Π½ΡŒΠΎΠΌΡƒ Π»Ρ–Π²ΠΎΠΌΡƒ ΠΊΡƒΡ‚ΠΊΡƒ -production_instruction_product=Π”ΠΎΠ΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ²Π°Ρ€, Π½Π°Ρ‚ΠΈΡΠ½ΡƒΠ²ΡˆΠΈ сіру ΠΊΠ½ΠΎΠΏΠΊΡƒ "+" Ρƒ Π²Ρ–ΠΊΠ½Ρ– Π· Ρ‚ΠΎΠ²Π°Ρ€Π°ΠΌΠΈ Π²ΠΈΡ‰Π΅ -production_instruction_recipe=Π”ΠΎΠ΄Π°ΠΉΡ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, Π½Π°Ρ‚ΠΈΡΠ½ΡƒΠ²ΡˆΠΈ Π»Ρ–Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ– Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Ρƒ Π²Ρ–ΠΊΠ½Ρ– Π· ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ Π²ΠΈΡ‰Π΅ - -# Production table= -column_done_tt=ΠŸΠΎΠ·Π½Π°Ρ‡Ρ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ як Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΈΠΉ для власної Π²Ρ–Π·ΡƒΠ°Π»ΡŒΠ½ΠΎΡ— Π²ΠΈΠ³ΠΎΠ΄ΠΈ -column_percentage_tt=Π¦Π΅ΠΉ відсоток Π²ΠΈΠ·Π½Π°Ρ‡Π°Ρ”, яка частина ΠΏΠΎΠΏΠΈΡ‚Ρƒ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†Ρ–ΡŽ, Ρ‰ΠΎ Π²ΠΈΡ€ΠΎΠ±Π»ΡΡ”Ρ‚ΡŒΡΡ Π·Π° Ρ†ΠΈΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ, ΠΏΠΎΠ²ΠΈΠ½Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½ΡΡ‚ΠΈΡΡ Ρ†ΠΈΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ. Π ΠΎΠ·Ρ€Π°Ρ…ΡƒΠ½ΠΎΠΊ ΠΎΠ½ΠΎΠ²Π»ΡŽΡ”Ρ‚ΡŒΡΡ Ρ‚Ρ–Π»ΡŒΠΊΠΈ після Ρ‚ΠΎΠ³ΠΎ, як Π²ΠΈ ΠΏΡ–Π΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ свої Π·ΠΌΡ–Π½ΠΈ, Π½Π°Ρ‚ΠΈΡΠ½ΡƒΠ²ΡˆΠΈ __CONTROL_STYLE_BEGIN__Enter__CONTROL_STYLE_END__. -column_comment=ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ -recipe_inactive=Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΠΉ -recipe_subfloor_attached=ΠΏΡ–Π΄Ρ€Ρ–Π²Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΊΡ€Ρ–ΠΏΠ»Π΅Π½ΠΎ -recipe_consumes_byproduct=споТиває ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ -subfloor_machine_count=__1__ __2__ Π’ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ Π½Π° Ρ†ΡŒΠΎΠΌΡƒ ΠΏΡ–Π΄Ρ€Ρ–Π²Π½Ρ– -machine_limit_force=Π’ΠΎΡ‡Π½ΠΈΠΉ Π»Ρ–ΠΌΡ–Ρ‚ встановлСно [__1__] -machine_limit_enforced=Π›Ρ–ΠΌΡ–Ρ‚ застосовано [__1__] -machine_limit_set=Π›Ρ–ΠΌΡ–Ρ‚ встановлСний [__1__] -add_machine_module=Π”ΠΎΠ΄Π°Ρ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ -add_beacon=Π”ΠΎΠ΄Π°Ρ‚ΠΈ маяк -in_total=__1__ Π·Π°Π³Π°Π»ΠΎΠΌ -priority_product=ΠŸΡ€Ρ–ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈΠΉ Ρ‚ΠΎΠ²Π°Ρ€ -raw_ore=Π‘ΠΈΡ€Π° Ρ€ΡƒΠ΄Π° - -# Compact frame= -switch_to_main_view=ΠŸΠ΅Ρ€Π΅Ρ…Ρ–Π΄ Π΄ΠΎ основного Π²ΠΈΠ΄Ρƒ\n- ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ __CONTROL__fp_toggle_compact_view__ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ - - -# Clipboard= -copied_into_clipboard=__1__ скопійовано -pasted_from_clipboard=__1__ вставлСно -clipboard_empty=Π’Π°Ρˆ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΡ–Π½Ρƒ ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–ΠΉ -clipboard_incompatible_class=НС ΠΌΠΎΠΆΠ½Π° вставити __1__ Π½Π° __2__ -clipboard_incompatible=ВставлСний __1__ нСсумісний -clipboard_already_exists=ВставлСний __1__ Π²ΠΆΠ΅ існує -clipboard_no_empty_slots=НСмає ΠΏΠΎΡ€ΠΎΠΆΠ½Ρ–Ρ… слотів модуля -clipboard_recipe_irrelevant=ВставлСна лінія Π½Π΅ ΠΌΠ°Ρ” значСння Π½Π° Ρ†ΡŒΠΎΠΌΡƒ Ρ€Ρ–Π²Π½Ρ– - -# Tutorial Mode= -tut_action_line=\n__CONTROL_STYLE_BEGIN____1____CONTROL_STYLE_END__ Π΄ΠΎ __2__ -tut_open_in_recipebook=\n__CONTROL_STYLE_BEGIN__Alt + ΠΊΠ»Π°Ρ†Π½ΡƒΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ–__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π² ΠšΠ½ΠΈΠ·Ρ– Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ–Π² - -tut_left=ΠšΠ»Π°Ρ†Π½Ρ–Ρ‚ΡŒ Π»Ρ–Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ– -tut_right=ΠšΠ»Π°Ρ† ΠΏΡ€Π°Π²ΠΎΡŽ кнопкою ΠΌΠΈΡˆΡ– -tut_shift=Shift -tut_alt=Alt -tut_control=Ctrl - -tut_select=Π²ΠΈΠ±Ρ€Π°Ρ‚ΠΈ -tut_edit=Ρ€Π΅Π΄Π°Π³ΡƒΠ²Π°Ρ‚ΠΈ -tut_delete=Π²ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ -tut_copy=ΠΊΠΎΠΏΡ–ΡŽΠ²Π°Ρ‚ΠΈ -tut_paste=вставити -tut_add_recipe=Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -tut_move_left=зсунути Π»Ρ–Π²ΠΎΡ€ΡƒΡ‡ -tut_move_right=зсунути ΠΏΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ -tut_open_subfloor=Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ ΠΏΡ–Π΄Ρ€Ρ–Π²Π΅Π½ΡŒ -tut_toggle=ΠΏΠ΅Ρ€Π΅ΠΌΠΊΠ½ΡƒΡ‚ΠΈ -tut_set_limit=встановити Π»Ρ–ΠΌΡ–Ρ‚ -tut_reset_to_default=Π²Ρ–Π΄Π½ΠΎΠ²ΠΈΡ‚ΠΈ стандартні значСння -tut_put_into_cursor=помістити Π² курсор -tut_add_recipe_to_end=Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -tut_add_recipe_below=Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π½ΠΈΠΆΡ‡Π΅ -tut_specify_amount=Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ суму -tut_prioritize=розставити ΠΏΡ€Ρ–ΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΈ - -# Effects tooltip= -effect_line="\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__" -consumption=БпоТивання Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ΅Π½Π΅Ρ€Π³Ρ–Ρ— -speed=Π¨Π²ΠΈΠ΄ΠΊΡ–ΡΡ‚ΡŒ -productivity=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ -pollution=ЗабруднСння -base_prod=Π‘Π°Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ -mining_prod=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ Π²Ρ–Π΄ΠΎΠ±ΡƒΡ‚ΠΊΡƒ -effect_maxed=(макс.) - -# Messages= -error_no_relevant_recipe=ΠΠ΅Ρ–ΡΠ½ΡƒΡŽΡ‡ΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ виробляє Ρ†Π΅ΠΉ Ρ‚ΠΎΠ²Π°Ρ€ -error_no_enabled_recipe=НСмає Π²Π²Ρ–ΠΌΠΊΠ½Π΅Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° для створСння Ρ†ΡŒΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° (Π²Π²Ρ–ΠΌΠΊΠ½ΡƒΡ‚ΠΈ Π² Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½ΡΡ… β†’) -error_no_compatible_machine=Π–ΠΎΠ΄Π½Π° наявна машина Π½Π΅ ΠΌΠΎΠΆΠ΅ створити Ρ†Π΅ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ -error_no_subfloor_on_byproduct_recipes=Π Π΅Ρ†Π΅ΠΏΡ‚ΠΈ, Π² яких Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‚ΡŒΡΡ ΠΏΠΎΠ±Ρ–Ρ‡Π½Ρ– ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ ΠΌΠ°Ρ‚ΠΈ Π½ΠΈΠΆΠ½Ρ–Ρ… Ρ€Ρ–Π²Π½Ρ–Π² -error_no_new_subfloors_in_archive=НСмоТливо Π΄ΠΎΠ΄Π°Ρ‚ΠΈ ΠΏΡ–Π΄Ρ€Ρ–Π²Π½Ρ– Π΄ΠΎ Π·Π°Π°Ρ€Ρ…Ρ–Π²ΠΎΠ²Π°Π½ΠΈΡ… ΠΏΡ–Π΄ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ -error_list_item_cant_be_shifted=Π¦Π΅ΠΉ __1__ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΡ–Ρ‰Π΅Π½ΠΈΠΉ Π² __2__ -error_recipebook_version_incompatible=ВСрсія Recipe Book`s Π½Π΅ сумісна ; Try updating both mods -error_recipebook_lookup_failed=Натиснутий __1__ Π½Π΅ вдалося Π·Π½Π°ΠΉΡ‚ΠΈ Π² Recipe Book -error_linearly_dependant_recipes=Π ΠΎΠ·Π²`язувач ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ– Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΠΉ ; Make sure there’s only one recipe per product -error_recipe_wrong_floor=Π Π΅Ρ†Π΅ΠΏΡ‚ΠΈ __1__ ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ Π΄ΠΎΠ΄Π°Π½Ρ– Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π½Π° Π²Π΅Ρ€Ρ…Π½Ρ–ΠΉ Ρ€Ρ–Π²Π΅Π½ΡŒ мСню -warning_no_matrix_configuration_needed=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΈΠΉ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡ” Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ -warning_recipe_disabled=Π¦Π΅ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Ρ‰Π΅ Π½Π΅ дослідТСний, Ρ‚ΠΎΠΌΡƒ Π²ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΠΈ ΠΉΠΎΠ³ΠΎ Π½Π°Ρ€Π°Π·Ρ– Π½Π΅ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ -warning_module_not_compatible=Π’Π°Ρˆ ΡƒΠ»ΡŽΠ±Π»Π΅Π½ΠΈΠΉ __1__ Π½Π΅ сумісний Π· Ρ†Ρ–Ρ”ΡŽ машиною -warning_no_prioritizing_single_product=Π Π΅Ρ†Π΅ΠΏΡ‚ΠΈ Π· ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ Π½Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ ΠΏΡ€Ρ–ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΈΠΌΠΈ -hint_tutorial=Π―ΠΊΡ‰ΠΎ Π²ΠΈ Π½Π΅ Π·Π½Π°ΠΉΠΎΠΌΡ– Π· Factory Planner, ознайомтСся Π· Π½Π°Π²Ρ‡Π°Π»ΡŒΠ½ΠΈΠΌ посібником ⟢ -hint_byproducts_removed=Π’Ρ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ–ΡˆΡƒΠ²Π°Ρ‡Π° видаляє всі Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΈ ΠΏΠΎΠ±Ρ–Ρ‡Π½ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ–Π² - -# Units= -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=P -unit_celsius=Β°C -unit_second=с -unit_minute=Ρ…Π² -unit_hour=Π³ -second=сСк -minute=Ρ…Π²ΠΈΠ»ΠΈΠ½Π° -hour=Π³ΠΎΠ΄ΠΈΠ½Π° - -# General= -error_message="[color=#FF3333]__1__[/color]" -warning_message="[color=#CCCC00]__1__[/color]" -hint_message="[color=#33CC33]__1__[/color]" -info_label="__1__ [img=info]" -bold_label="[font=default-bold]__1__[/font]" - -tt_title="[font=default-semibold]__1__[/font]" -tt_title_with_note="[font=default-semibold]__1__[/font] (__2__)" - -selected=ΠΎΠ±Ρ€Π°Π½ΠΎ -preferred=ΠΏΡ€Ρ–ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎ -satisfied=Π·Π°Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ΠΈΠΉ -valid=дійсні -invalid=нСприпустимі -increased=ΠΏΡ–Π΄Π²ΠΈΡ‰Π΅Π½ΠΎ -decreased=змСншився -capped=натиснуто - -on=Π£Π²Ρ–ΠΌΠΊ -off=Π’ΠΈΠΌΠΊ -left=Π»Ρ–Π²ΠΎΡ€ΡƒΡ‡ -right=ΠΏΡ€Π°Π²ΠΎΡ€ΡƒΡ‡ -up=Π²Π³ΠΎΡ€Ρ– -down=Π²Π½ΠΈΠ· -top=Π²Π΅Ρ€Ρ… -bottom=Π½ΠΈΠ· - -add=Π”ΠΎΠ΄Π°Ρ‚ΠΈ -new=Новий -edit=Π Π΅Π΄Π°Π³ΡƒΠ²Π°Ρ‚ΠΈ -choose=Π’ΠΈΠ±Ρ€Π°Ρ‚ΠΈ -produce=Π²ΠΈΡ€ΠΎΠ±Π»Π΅Π½ΠΎ -consume=споТивання - -none=Π–ΠΎΠ΄Π½ΠΎΠ³ΠΎ -crafting_time=Час виготовлСння -amount=ΠšΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ - -factory=Π—Π°Π²ΠΎΠ΄ -archive=Архів - -toggle_interface=FP -toggle_interface_tt=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ Π°Π±ΠΎ Π·Π°ΠΊΡ€ΠΈΡ‚ΠΈ інтСрфСйс ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ Π€Π°Π±Ρ€ΠΈΠΊΠΈ - -energy_consumption=БпоТивання Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ΅Π½Π΅Ρ€Π³Ρ–Ρ— -effectivity=Π•Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ–ΡΡ‚ΡŒ -module_slots=Π‘Π»ΠΎΡ‚ΠΈ модуля -fuel_value=ΠŸΠ°Π»ΠΈΠ²ΠΎΡ”ΠΌΠ½Ρ–ΡΡ‚ΡŒ -emissions_multiplier=ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Ρ–ΠΊΠ°Ρ‚ΠΎΡ€ Π²ΠΈΠΊΠΈΠ΄Ρ–Π² -throughput=ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π° Π·Π΄Π°Ρ‚Π½Ρ–ΡΡ‚ΡŒ -crafting_speed=Π¨Π²ΠΈΠ΄ΠΊΡ–ΡΡ‚ΡŒ Π²ΠΈΡ€ΠΎΠ±Π½ΠΈΡ†Ρ‚Π²Π° -storage=Π‘Ρ…ΠΎΠ²ΠΈΡ‰Π΅ - -combinator=ΠšΠΎΠΌΠ±Ρ–Π½Π°Ρ‚ΠΎΡ€ -put_into_cursor_failed=__1__ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ ΠΏΠΎΠΌΡ–Ρ‰Π΅Π½ΠΈΠΉ Π² курсор -blueprint_no_combinator_prototype=ΠŸΠΎΡΡ‚Ρ–ΠΉΠ½ΠΈΠΉ ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡƒ Π½Π΅ Π·Π½Π°ΠΉΠ΄Π΅Π½ΠΎ -impossible_to_blueprint_fluid=Π Ρ–Π΄ΠΈΠ½ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ½Π° скласти Ρƒ вигляді ΠΊΠΎΠΌΠ±Ρ–Π½Π°Ρ‚ΠΎΡ€Π° - -move_row_tt=ΠŸΠ΅Ρ€Π΅ΠΌΡ–ΡΡ‚Ρ–Ρ‚ΡŒ Ρ†Π΅ΠΉ __1__ __2__\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± пСрСмістити ΠΉΠΎΠ³ΠΎ Π² __3__ -attribute_line="\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__" -shift_to_paste=__CONTROL_STYLE_BEGIN__ ΠΠ°Ρ‚ΠΈΡΠ½Ρ–Ρ‚ΡŒ ΠΊΠ»Π°Π²Ρ–ΡˆΡƒ Shift__CONTROL_STYLE_END__, Ρ‰ΠΎΠ± вставити - -# Locale prefixes: s=Ρ”Π΄ΠΈΠ½ΠΈΠΉ ; p = plural; l = lowercase; u = uppercase -pl_subfactory="__plural_for_parameter_1_{1=subfactory|rest=subfactories}__" -pu_subfactory="__plural_for_parameter_1_{1=Subfactory|rest=Subfactories}__" -pl_line="__plural_for_parameter_1_{1=line|rest=lines}__" -pu_line="__plural_for_parameter_1_{1=Line|rest=Lines}__" -pl_floor="__plural_for_parameter_1_{1=floor|rest=floors}__" -pu_floor="__plural_for_parameter_1_{1=Floor|rest=Floors}__" -pl_item="__plural_for_parameter_1_{1=item|rest=items}__" -pu_item="__plural_for_parameter_1_{1=Item|rest=Items}__" -pl_fluid="__plural_for_parameter_1_{1=fluid|rest=fluids}__" -pu_fluid="__plural_for_parameter_1_{1=Fluid|rest=Fluids}__" -pl_product="__plural_for_parameter_1_{1=product|rest=products}__" -pu_product="__plural_for_parameter_1_{1=Product|rest=Products}__" -pl_byproduct="__plural_for_parameter_1_{1=byproduct|rest=byproducts}__" -pu_byproduct="__plural_for_parameter_1_{1=Byproduct|rest=Byproducts}__" -pl_ingredient="__plural_for_parameter_1_{1=ingredient|rest=ingredients}__" -pu_ingredient="__plural_for_parameter_1_{1=Ingredient|rest=Ingredients}__" -pl_fuel="__plural_for_parameter_1_{1=fuel|rest=fuels}__" -pu_fuel="__plural_for_parameter_1_{1=Fuel|rest=Fuels}__" -pl_recipe="__plural_for_parameter_1_{1=recipe|rest=recipes}__" -pu_recipe="__plural_for_parameter_1_{1=Recipe|rest=Recipes}__" -pl_machine="__plural_for_parameter_1_{1=machine|rest=machines}__" -pu_machine="__plural_for_parameter_1_{1=Machine|rest=Machines}__" -pl_module="__plural_for_parameter_1_{1=module|rest=modules}__" -pu_module="__plural_for_parameter_1_{1=Module|rest=Modules}__" -pl_beacon="__plural_for_parameter_1_{1=beacon|rest=beacons}__" -pu_beacon="__plural_for_parameter_1_{1=Beacon|rest=Beacons}__" -pl_belt="__plural_for_parameter_1_{1=belt|rest=belts}__" -pu_belt="__plural_for_parameter_1_{1=Belt|rest=Belts}__" -pl_lane="__plural_for_parameter_1_{1=lane|rest=lanes}__" -pu_lane="__plural_for_parameter_1_{1=Lane|rest=Lanes}__" -pl_wagon="__plural_for_parameter_1_{1=wagon|rest=wagons}__" -pu_wagon="__plural_for_parameter_1_{1=Wagon|rest=Wagons}__" -pl_stack="__plural_for_parameter_1_{1=stack|rest=stacks}__" - -l_fluid=Ρ€Ρ–Π΄ΠΈΠ½Π° -u_power=ЖивлСння - diff --git a/factoryplanner_1.1.72/locale/zh-CN/config.cfg b/factoryplanner_1.1.72/locale/zh-CN/config.cfg deleted file mode 100644 index c929e75c..00000000 --- a/factoryplanner_1.1.72/locale/zh-CN/config.cfg +++ /dev/null @@ -1,482 +0,0 @@ -[mod-name] -factoryplanner=ε·₯εŽ‚θ§„εˆ’εΈˆ - -[mod-description] -factoryplanner=θΏ™δΈͺ Mod 可δ»₯θ©δ½ ζε‰θ§„εˆ’δ½ ηš„η”ŸδΊ§οΌŒζŒ‡εšζ―ζ‘θ£…ι…ηΊΏηš„ι…ζ–Ήε’ŒζœΊε™¨γ€‚εƒζδΎ›δΊ†εΌΊε€§ηš„εŠŸθƒ½οΌŒη”¨θ΅·ζ₯εΏ«ι€Ÿθ€Œη›΄θ§‚οΌŒθ©δ½ ε―δ»₯δΈ“ζ³¨δΊŽεžι™…ε»ΊθΎδ½ ηš„ε·₯εŽ‚γ€‚ - - -[controls] -fp_toggle_interface=打开/ε…³ι—­ -fp_toggle_compact_view=εˆ‡ζ’η΄§ε‡‘θ§†ε›Ύ -fp_toggle_pause=εˆ‡ζ’ζš‚εœ -fp_refresh_production=εˆ·ζ–°η”ŸδΊ§ -fp_cycle_production_views=εΎͺηŽ―η”ŸδΊ§θ§†ε›Ύ -fp_reverse_cycle_production_views=反向εΎͺηŽ―η”ŸδΊ§θ§†ε›Ύ -fp_confirm_dialog=η‘θ€ε―Ήθ―ζ‘† -fp_focus_searchfield=θšη„¦ζœη΄’ζ  - -[controls-description] -fp_toggle_interface=εˆ‡ζ’δΈ»η•Œι’ -fp_toggle_compact_view=εœ¨η•Œι’ηš„ζ™ι€šθ§†ε›Ύε’Œη΄§ε‡‘θ§†ε›ΎδΉ‹ι—΄εˆ‡ζ’ -fp_toggle_pause=当ε·₯εŽ‚θ§„εˆ’εΈˆηš„η•Œι’ζ‰“εΌ€ζ—Άζš‚εœζΈΈζˆ -fp_refresh_production=εˆ·ζ–°ε½“ε‰ηš„η”ŸδΊ§θ‘¨ -fp_cycle_production_views=η”ŸδΊ§θ‘¨ηš„δΈεŒθ§†ε›ΎδΉ‹ι—΄ηš„εΎͺ环 -fp_reverse_cycle_production_views=εœ¨η”ŸδΊ§θ‘¨ηš„δΈεŒθ§†ε›ΎδΈ­ε‘εŽεΎͺ环 -fp_confirm_dialog=η‘θ€δ»»δ½•ζ¨‘εΌε―Ήθ―ζ‘†οΌŒε³δ½Ώζ²‘ζœ‰ζ–‡ζœ¬ζ‘†θ’«θšη„¦ -fp_focus_searchfield=ε¦‚ζžœε―θƒ½ηš„θ―οΌŒε°†ε…‰ζ ‡θšη„¦εœ¨δΊ§ε“ι€‰ζ‹©ε™¨ηš„ζœη΄’ζ δΈŠγ€‚ - - -[mod-setting-name] -fp_display_gui_button=ζ˜Ύη€Ίζ‰“εΌ€/ε…³ι—­ζŒ‰ι’ -fp_products_per_row=η•Œι’ε½εΊ¦ -fp_subfactory_list_rows=η•Œι’ι«˜εΊ¦ -fp_default_timescale=默θ€ζ—Άι—΄ε°ΊεΊ¦ -fp_view_belts_or_lanes=ε…¨εΈ¦ζˆ–ε•θΎΉ -fp_prefer_product_picker=首选产品选择器 -fp_prefer_matrix_solver=ι¦–ι€‰ηŸ©ι˜΅ζ±‚θ§£ε™¨ - -[mod-setting-description] -fp_display_gui_button=εœ¨ε±εΉ•ε·¦δΈŠζ–Ήζ˜Ύη€ΊζŒ‰ι’οΌŒη”¨δΊŽζ‰“εΌ€ε’Œε…³ι—­δΈ»η•Œι’。 -fp_products_per_row=ι€šθΏ‡ι€‰ζ‹©ζ―θ‘Œζ˜Ύη€Ίε€šε°‘δΈͺ鑢层产品ζ₯θΎη½δΈ»η•Œι’ε½εΊ¦γ€‚ -fp_subfactory_list_rows=ι€šθΏ‡ι€‰ζ‹©ζ€»ε…±ζ˜Ύη€Ίε€šε°‘δΈͺε­εŽ‚εζ₯θΎη½δΈ»η•Œι’ι«˜εΊ¦γ€‚ -fp_default_timescale=εˆ›ε»Ίζ–°ε­ε·₯εŽ‚ηš„ζ‰€ι€‰ηš„ζ—Άι—΄ε°ΊεΊ¦γ€‚ -fp_view_belts_or_lanes=ζŒ‡ζ˜Žζ‚¨ζ˜―ε°†εžει‡θ§†δΈΊε•δΎ§δΌ ι€εΈ¦θΏ˜ζ˜―ε…¨ιƒ¨δΌ ι€εΈ¦γ€‚ -fp_prefer_product_picker=决εšζ·»εŠ ζ–°ηš„ε­ε·₯εŽ‚εΊ”θ―₯δ»Žι€‰ζ‹©δΊ§ε“θΏ˜ζ˜―ε­ε·₯εŽ‚εη§°εΌ€ε§‹γ€‚ -fp_prefer_matrix_solver=决εšζ˜―ε¦εœ¨ζ–°ε­ε·₯εŽ‚ε―η”¨ζ–°ηš„ηŸ©ι˜΅ζ±‚θ§£ε™¨θ€ŒδΈζ˜―δΌ η»Ÿηš„γ€‚ - -[string-mod-setting] -fp_default_timescale-one_second=1 η§’ -fp_default_timescale-one_minute=1 εˆ†ι’Ÿ -fp_default_timescale-one_hour=1 小既 -fp_view_belts_or_lanes-belts=全传送带 -fp_view_belts_or_lanes-lanes=单侧传送带 - - -[shortcut-name] -fp_open_interface=打开ε·₯εŽ‚θ§„εˆ’εΈˆ - -[item-name] -fp_beacon_selector=ζ’δ»Άζ•ˆζžœεˆ†δΊ«ε‘”ι€‰ζ‹©ε™¨ - -[command-help] -fp_reset_prototypes=ζ ΉζεŸΊη‘€ζΈΈζˆζ•°ζι‡ε»Ίε„η§εŽŸεž‹γ€‚εΊ”θ―₯δΈιœ€θ¦δΊ†γ€‚ -fp_restart_translation=ι‡ζ–°ε―εŠ¨εŽŸεž‹εη§°ηš„ηΏ»θ―‘οΌŒδ»₯便搜紒可δ»₯使用兢θ‡ͺ焢语言名称。 - - -[fp] -import=ε―Όε…₯ -export=ε―Όε‡Ί -validity=ζœ‰ζ•ˆζ€§ -location=δ½η½ -import_instruction_1=η²˜θ΄΄δ½ ηš„[font=default-bold]ε·₯εŽ‚δΊ€ζ’δ»£η [/font] -import_instruction_2=选择你想导ε…₯ηš„ε­ε·₯εŽ‚ -export_instruction=ι€‰ζ‹©θ¦δ½ ζƒ³ε―Όε‡Ίηš„ε­ε·₯εŽ‚[img=info] -export_instruction_tt=θΏ™ε°†η”ŸζˆδΈ€δΈͺ[font=default-bold]ε·₯εŽ‚δΊ€ζ’δ»£η [/font]οΌŒη”¨δΊŽδΈŽε…Άδ»–δΊΊεˆ†δΊ«δ½ ηš„ε­ε·₯εŽ‚ζˆ–εœ¨δ½ ηš„ε…Άδ»–δΈ–η•ŒδΈ­ε―Όε…₯εƒγ€‚εƒδΈδΌšη”ŸζˆδΈ€δΈͺ蓝图代码! -import_button_tooltip=ε―Όε…₯代码 -export_button_tooltip=η”Ÿζˆε·₯εŽ‚δΊ€ζ’δ»£η  -importer_decoding_failure=η»™εšηš„代码无法正η‘θ§£η γ€‚θΏ™ζ˜―η”±δΊŽεƒθ’«ζ‰­ζ›²γ€‚尝试再欑导出子ε·₯εŽ‚οΌŒεΉΆη‘δΏε€εˆΆζ•΄δΈͺ代码。 -importer_migration_failure=η»™εšηš„代码ζ₯θ‡ͺζ—§η‰ˆζœ¬ηš„ε·₯εŽ‚θ§„εˆ’εΈˆοΌŒζ— ζ³•θΏη§»γ€‚θΏ™ε―θƒ½ζ˜―η”±δΊŽεƒε€ͺζ—§θ€ŒδΈε†ζ”―ζŒοΌŒζˆ–η”±δΊŽζ•°ζδ»₯ζŸη§ζ–ΉεΌθ’«η ΄εοΌŒζˆ–η”±δΊŽηΌ–η¨‹ι”™θ――γ€‚ε¦‚ζžœδ½ θ€δΈΊθΏ™δΈͺδ»£η ζ˜―ζœ‰ζ•ˆηš„οΌŒθ―·εœ¨ Mod ι—¨ζˆ·δΈŠθ”η³»εΌ€ε‘θ€…οΌˆζˆ‘οΌοΌ‰γ€‚ -importer_unpacking_failure=η»™εšηš„代码无法正η‘θ§£εŽ‹ε’ŒιͺŒθ―γ€‚θΏ™ε―θƒ½ζ˜―η”±δΊŽζ•°ζδ»₯ζŸη§ζ–ΉεΌθ’«ζŸεζˆ–η”±δΊŽηΌ–η¨‹ι”™θ――γ€‚ε¦‚ζžœδ½ θ€δΈΊθΏ™δΈͺδ»£η ζ˜―ζœ‰ζ•ˆηš„οΌŒθ―·εœ¨ Mod ι—¨ζˆ·δΈŠθ”η³»εΌ€ε‘θ€…οΌˆζˆ‘οΌοΌ‰γ€‚ -importer_issue_import_string=ε―Όε…₯δΈ€δΈͺζœ‰ζ•ˆηš„ε­ε·₯εŽ‚δΊ€ζ’δ»£η  -importer_issue_select_subfactory=至少选择一δΈͺ子ε·₯εŽ‚ζ₯ε―Όε…₯ - -tutorial=教程 -interface=η•Œι’ -usage=用法 -matrix_solver=ηŸ©ι˜΅ζ±‚θ§£ε™¨ -interactive_tutorial_title=δΊ’εŠ¨ζ•™η¨‹ -interactive_tutorial_text=η†Ÿζ‚‰ε·₯εŽ‚θ§„εˆ’εΈˆηš„ζœ€ε₯½ζ–Ήζ³•ζ˜―η›΄ζŽ₯θ·³ε…₯εΉΆδΊ²θ‡ͺ排紒εƒγ€‚δΈΊζ­€οΌŒζˆ‘ε·²η»εŒ…ε«δΊ†δΈ€δΈͺ样板子ε·₯εŽ‚οΌŒεƒε°†ε±•η€ΊθΏ™δΈͺ Mod ζœ€ι‡θ¦ηš„δΈ€δΊ›εŠŸθƒ½γ€‚δ½ ε―δ»₯ι€šθΏ‡η‚Ήε‡»δΈ‹ι’ηš„ζŒ‰ι’ζ₯添加εƒγ€‚δ½ δΉŸε―δ»₯ζΏ€ζ΄»β€œζ•™η¨‹ζ¨‘εΌβ€οΌŒεƒε°†ζ˜Ύη€Ίζ•΄δΈͺη•Œι’δΈŠι‡θ¦ζŒ‰ι’ηš„η»„εˆι”。 -create_example=εˆ›ε»Ίζ ·δΎ‹ -create_example_error=ζ— ζ³•εˆ›ε»Ίζ ·ζΏε­ε·₯εŽ‚οΌŒε› δΈΊεƒδΈŽε½“ε‰ηš„ Mod η»„εˆδΈε…ΌεΉγ€‚ -tutorial_mode=教程樑式 -interface_tutorial_title=η•Œι’ζ•™η¨‹ -interface_tutorial_text=η•Œι’θΎη½δΈΊη±»δΌΌηš„ζ“δ½œε…±δΊ«η›ΈεŒηš„εΏ«ζ·ι”γ€‚θΏ™ε°±ιΏε…δΊ†δ½ ιœ€θ¦εœ¨εšδ»»δ½•δΊ‹ζƒ…ζ—Άιƒ½θ¦θ°δ½ε“ͺδΈͺ快捷ι”δΌšεΌ•θ΅·ε“ͺδΈͺεŠ¨δ½œγ€‚δ½ εͺιœ€θ¦ε°†θΏ™δΊ›εŸΊζœ¬ηš„δΊ€δΊ’ε†…εŒ–οΌŒεΉΆεœ¨δ»»δ½•εœ°ζ–Ήδ½Ώη”¨εƒδ»¬γ€‚ -interface_controls=β€’ ε·¦ι”ε•ε‡»οΌš[font=default-bold]选择/使用[/font]\nβ€’ 右ι”ε•ε‡»οΌš[font=default-bold]ηΌ–θΎ‘[/font]\nβ€’ Control-右ι”ε•ε‡»οΌš[font=default-bold]εˆ ι™€[/font]\nβ€’ Shift-ε·¦ι”ε•ε‡»οΌš[font=default-bold]δΈŠη§»η‰©ε“εˆ—θ‘¨/升级[/font]\nβ€’ Control-ε·¦ι”ε•ε‡»οΌš[font=default-bold]δΈ‹η§»η‰©ε“εˆ—θ‘¨/降级[/font]\nβ€’ Alt-η‚Ήε‡»οΌšζ”Ύε…₯ε…‰ζ ‡δΈ­ -interface_controls_recipebook=\nβ€’ __CONTROL_STYLE_BEGIN__Alt + Right-click__CONTROL_STYLE_END__: εœ¨ι…ζ–Ήζ΅θ§ˆε™¨δΈ­ζ‰“εΌ€ - -tutorial_usage_text=ι¦–ε…ˆοΌŒδ½ ιœ€θ¦εˆ›ε»ΊδΈ€δΈͺ子ε·₯εŽ‚γ€‚θΏ™ζ˜―δΈ€δΈͺεŸΊζœ¬η»“ζž„οΌŒεƒεŒ…ε«δΊ†δ½ ηš„ε·₯εŽ‚ηš„δΈ€δΊ›οΌˆε€§ιƒ¨εˆ†ζ˜―η‹¬η«‹ηš„οΌ‰ιƒ¨εˆ†γ€‚η»™εƒδΈ€δΈͺεε­—ε’Œ/ζˆ–δΈ€δΈͺε›Ύζ ‡οΌŒη„ΆεŽδ½ ε°±ε―δ»₯开始了。εƒε°†ζœ‰δΈ€δΊ›θΎ“ε…₯οΌˆεŽŸζ–™οΌ‰οΌŒδΈ€δΊ›θΎ“ε‡ΊοΌˆδΊ§ε“ε’Œε‰―δΊ§ε“οΌ‰οΌŒεΉΆζΆˆθ€—δΈ€εšηš„θƒ½ι‡γ€‚δ½ θΏ˜ε―δ»₯θΎη½δ½ ζƒ³ε·₯δ½œηš„ζ—Άι—΄ε°ΊεΊ¦οΌŒζˆ–θ€…ζ½¦θ‰εœ°ε†™δΈ‹δΈ€δΊ›η¬”θ°γ€‚\n\nδ½ ζ„Ÿε…΄θΆ£ηš„ζ˜―δΊ§ε“οΌŒζ‰€δ»₯δ½ ιœ€θ¦ζ·»εŠ δ½ ζƒ³η”ŸδΊ§ηš„δΊ§ε“γ€‚θ¦εšεˆ°θΏ™δΈ€η‚ΉοΌŒεͺιœ€η‚Ήε‡»β€™+’-ζŒ‰ι’οΌŒι€‰ζ‹©δ½ ζƒ³θ¦ηš„δΊ§ε“οΌŒεΉΆζŒ‡εšεΊ”θ―₯η”ŸδΊ§ηš„ζ•°ι‡γ€‚εƒε°†ζœ‰δΈ€δΈͺηΊ’θ‰²ηš„θƒŒζ™―οΌŒεΉΆδΈ”οΌŒε½“ζ‚¬εœεœ¨εƒδΈŠι’ζ—ΆοΌŒδ½ δΌšηœ‹εˆ°η›ε‰ζœ‰0δΈͺεƒζ­£εœ¨η”ŸδΊ§γ€‚\n\nθ¦ζ”Ήε˜θΏ™η§ζƒ…ε†΅οΌŒδ½ ε―δ»₯ε·¦ι”点击εƒγ€‚ε¦‚ζžœεͺζœ‰δΈ€δΈͺ配方ζ₯η”ŸδΊ§θΏ™δΈͺδΊ§ε“οΌŒεƒε°±δΌšθ’«η«‹ε³ζ·»εŠ γ€‚ε¦εˆ™οΌŒδ½ ε°†ε―δ»₯选择使用ε“ͺδΈͺ配方。无θΊε“ͺη§ζ–ΉεΌοΌŒζ–°ηš„ι…ζ–Ήιƒ½δΌšε‡ΊηŽ°εœ¨δ½ ηš„ε­ε·₯εŽ‚ηš„ι‘Άε±‚γ€‚δ½ ε―δ»₯ζ”Ήε˜εŠ ε·₯ζ‰€η”¨ηš„ζœΊε™¨ζˆ–ζ·»εŠ δΈ€δΊ›ζ’δ»Άε’Œεˆ†δΊ«ε‘”γ€‚\n\nηŽ°εœ¨θ¦θΏ›δΈ€ζ­₯εˆ†θ§£δ½ θ¦η”ŸδΊ§ηš„δΊ§ε“οΌŒδ½ ε―δ»₯ε·¦ι”η‚Ήε‡»ηŽ°ζœ‰ι…ζ–Ήηš„ζˆεˆ†γ€‚θΏ™ε°†ε†ζ¬‘ζ·»εŠ δΈ€δΈͺι…ζ–ΉοΌŒζ”Ήε˜ζ•΄δΈͺ子ε·₯εŽ‚ζ‰€ιœ€ηš„εŽŸζ–™γ€‚δ½ ε―δ»₯η»§η»­δ»₯θΏ™η§ζ–ΉεΌεˆ†θ§£δ½ ηš„δΊ§ε“οΌŒη›΄εˆ°δ½ εˆ°θΎΎεͺζœ‰ζΏζδ½œδΈΊεŽŸζ–™οΌŒζˆ–θ€…ι’»εΎ—ζ›΄ζ·±οΌŒδΉŸε―δ»₯ζ·»εŠ δ½ ηš„ι‡‡ηŸΏε’Œε†Άη‚Όι…ζ–Ήγ€‚ι€‰ζ‹©ε―Ήδ½ ε’Œδ½ ηŽ°ζœ‰ηš„ε·₯εŽ‚ζ₯θ―΄ζœ€ζ–ΉδΎΏηš„εŽŸζ–™γ€‚\n\nε―ΉδΊŽζœ‰ε€§ι‡δΈ­ι—΄δΊ§ε“ηš„ι‘Ήη›οΌŒδ½ ηš„ι…ζ–Ήζ”Άι›†δΌšεΎˆεΏ«ε˜εΎ—η›Έε½“ζ··δΉ±γ€‚δΈΊδΊ†θ§£ε†³θΏ™δΈͺι—ι’˜οΌŒδ½ ε―δ»₯ζœ‰ε€šδΈͺε±‚οΌŒζ―δΈͺε±‚ιƒ½ζœ‰δΈεŒηš„ι…ζ–Ήγ€‚θ¦εˆ›ε»ΊδΈ€δΈͺζ‰€θ°“ηš„ε­ε±‚οΌŒε·¦ι”点击你想进一ζ­₯η ”η©Άηš„ι…ζ–Ήε›Ύζ ‡γ€‚θΏ™ε°†εΎ—εˆ°δΈ€δΈͺε­ε±‚οΌˆζ³¨ζ„ηΊ§εˆ«ε°†ζ˜Ύη€ΊδΈΊβ€˜2β€™οΌ‰οΌŒδ½ ε―δ»₯εœ¨ε…ΆδΈ­εƒδ»₯ε‰δΈ€ζ ·ζ·»εŠ ι…ζ–Ήγ€‚ζœ€ε€§ηš„δΈεŒζ˜―οΌŒδ½ εͺιœ€θ¦ζ‹…εΏƒδ½ δΉ‹ε‰ε·¦ι”η‚Ήε‡»ηš„ι…ζ–Ήηš„ζˆεˆ†γ€‚\n\nθ€ŒθΏ™δΊ›ιƒ½ζ˜―ζœ€εŸΊζœ¬ηš„εŠŸθƒ½οΌθΏ˜ζœ‰δΈ€δΊ›ζ›΄ι«˜ηΊ§ηš„εŠŸθƒ½δΌšζ΄ΎδΈŠη”¨εœΊοΌˆζŸ₯ηœ‹β€œδΈ“δΈšε»Ίθβ€οΌ‰οΌŒδ½†ηŽ°εœ¨θΏ™δΊ›εΊ”θ―₯能θ©δ½ ε…₯ι—¨γ€‚ε¦‚ζžœδ½ ζƒ³ηŽ©δΈ€δΈͺεŸΊζœ¬ηš„η”ŸδΊ§ηΊΏοΌŒθ―·εˆ›ε»Ίζ ·ζΏε­ε·₯εŽ‚οΌˆεœ¨β€œη•Œι’β€ι€‰ι‘Ήε‘δΈ­οΌ‰γ€‚ - -tutorial_matrix_solver_text=ηŸ©ι˜΅ζ±‚θ§£ε™¨ζ˜―ζ›΄ζ–°η”ŸδΊ§θ‘¨ηš„ε¦δΈ€η§ζ–Ήζ³•γ€‚ι»˜θ€ζƒ…ε†΅δΈ‹οΌŒε·₯εŽ‚θ§„εˆ’εΈˆδΌšδ»ŽδΈŠεˆ°δΈ‹θ§£θ‘¨οΌŒθ€ŒηŸ©ι˜΅ζ±‚θ§£ε™¨εˆ™η”¨δΈ€δΈͺζ–Ήη¨‹η»„εŒζ—Άθ§£ζ―δΈ€θ‘Œγ€‚ηŸ©ι˜΅ζ±‚θ§£ε™¨δ½Ώη”¨θ΅·ζ₯ε―θƒ½ζ―”θΎƒζ£˜ζ‰‹οΌŒδ½†δΉŸιžεΈΈεΌΊε€§γ€‚δΎ‹ε¦‚οΌŒεƒε―δ»₯ε€„η†ε›žζ”Άγ€ζŽ’η©Ίε’ŒεΎͺηŽ―γ€‚\n\n每δΈͺ子ε·₯εŽ‚ιƒ½θ’«θΎη½δΈΊδΈ€δΈͺζ±‚θ§£ε™¨δΈ­ηš„δΈ€δΈͺοΌŒι‘ΊεΊζ±‚θ§£ε™¨οΌˆι»˜θ€οΌ‰ζˆ–ηŸ©ι˜΅ζ±‚θ§£ε™¨γ€‚θ¦εˆ‡ζ’εˆ°ηŸ©ι˜΅ζ±‚θ§£ε™¨οΌŒθ―·ζŒ‰β€œηŸ©ι˜΅ζ±‚θ§£ε™¨β€ζŒ‰ι’γ€‚ηŸ©ι˜΅ζ±‚θ§£ε™¨ε°†δΈ€η›΄ε€„δΊŽζΏ€ζ΄»ηŠΆζ€οΌŒη›΄εˆ°ε†ζ¬‘ζŒ‰δΈ‹θ―₯ζŒ‰ι’οΌŒεΉΆεœ¨ζ›΄ζ”Ήι…ζ–Ήζ—Άθ‡ͺεŠ¨ι‡ζ–°θΏθ‘Œγ€‚\n\nε―η”¨ηŸ©ι˜΅ζ±‚θ§£ε™¨θΏ˜ε―δ»₯ι€‰ζ‹©ε‰―δΊ§ε“γ€‚θ¦εˆ ι™€ε‰―δΊ§ε“οΌŒθ―·ε•ε‡»θ‘Œε†…ηš„ι…ζ–Ήε‰―δΊ§ε“ζˆ–ι‘Άιƒ¨ηš„ε­ε·₯εŽ‚ε‰―δΊ§ε“γ€‚θΏ™ε°†ζ˜Ύη€Ίε‰―δΊ§ε“δΈΊεŽŸζ–™ηš„ι…ζ–ΉοΌŒεŒ…ζ‹¬ζŽ’η©Ίγ€‚\n\nζœ‰ζ—ΆηŸ©ι˜΅ζ±‚θ§£ε™¨θ¦ζ±‚ε°†ζŸδΊ›ι‘Ήη›θΎη½δΈΊβ€œθ‡ͺη”±β€γ€‚ζ­£εΈΈζƒ…ε†΅δΈ‹οΌŒη‰©ε“ζ˜―εΉ³θ‘‘ηš„οΌŒθΏ™ζ„ε‘³η€εƒδ»¬θ’«ζΆˆθ€—ηš„ι€ŸεΊ¦ε’Œη”ŸδΊ§ηš„ι€ŸεΊ¦δΈ€ζ ·εΏ«γ€‚δ½†ζ˜―οΌŒβ€œθ‡ͺη”±η‰©ε“β€δΈδΌšεΉ³θ‘‘οΌŒδΌšδ½œδΈΊζœ€η»ˆζˆεˆ†ζˆ–ε‰―δΊ§ε“ε‡ΊηŽ°γ€‚ε¦‚ζžœιœ€θ¦θ‡ͺη”±η‰©ε“οΌŒε°†ζ‰“εΌ€δΈ€δΈͺ对话摆ζ₯选择θ‡ͺ由物品。当一δΈͺ子ε·₯εŽ‚εŒ…ε«δΈ€δΈͺεΎͺηŽ―ζ—ΆοΌŒι€šεΈΈιœ€θ¦θ‡ͺ由物品。要打开这δΈͺε―Ήθ―ζ‘†οΌŒθ―·ζŒ‰ηŸ©ι˜΅ζ±‚θ§£ε™¨ε³θΎΉηš„ι½Ώθ½ε›Ύζ ‡γ€‚\n\nζœ€εŽδΈ€δΈͺθ¦ζ±‚ζ˜―ι…ζ–ΉεΏ…ι‘»ζ˜―ηΊΏζ€§η‹¬η«‹ηš„γ€‚θΏ™ζ„ε‘³η€ε½“ε‰ε­ε·₯εŽ‚εͺθƒ½ζœ‰δΈ€δΈͺε”―δΈ€ηš„θ§£γ€‚ζ’ε₯θ―θ―΄οΌŒε¦‚ζžœζœ‰ε€šη§ζ–Ήζ³•ζ₯εˆ›ε»Ίη»™εšηš„δΊ§ε“οΌŒηŸ©ι˜΅ζ±‚θ§£ε™¨ε°†ζ— ζ³•ε·₯δ½œγ€‚ε¦‚ζžœε­ε·₯εŽ‚ζœ‰ηΊΏζ€§δΎθ΅–ηš„ι…ζ–ΉοΌŒθ―·ε°θ―•εˆ ι™€ε€šδ½™ηš„ι…ζ–ΉοΌŒη›΄εˆ°ι”™θ――ζΆˆε€±γ€‚θΏ™δΈͺθ¦ζ±‚εœ¨ζ‰€ζœ‰ε­ε±‚ιƒ½ι€‚η”¨γ€‚ - -options_item_title=θΎη½ __1__ 数量 -options_item_text=δΈΊβ€œ__1__”θΎη½δΈ€δΈͺ数量 -options_item_amount=数量 -options_item_amount_tt=ζŒ‡εšδ½ ζƒ³θ©θΏ™δΈͺ配方__2__ηš„__1__ηš„ε‡†η‘数量。这将调整θ―₯η”ŸδΊ§ηΊΏηš„η™Ύεˆ†ζ―”ζ₯εžηŽ°θΏ™δΈ€η›ζ ‡γ€‚ -options_subfactory_ingredient_amount_tt=ζŒ‡εšζ‚¨εΈŒζœ›θ―₯子ε·₯εŽ‚ζΆˆθ€—ηš„θΏ™η§ζˆεˆ†ηš„η‘εˆ‡ζ•°ι‡γ€‚θΏ™ε°†η›ΈεΊ”εœ°θ°ƒζ•΄ε…ΆδΊ§ε“ζ•°ι‡γ€‚ - -utilities=εžη”¨ε·₯ε…· -utility_title_components=η»„δ»Ά -utility_title_components_tt=ζ˜Ύη€Ίε»Ίι€ ε½“ε‰ε­ε·₯εŽ‚/ε±‚ζ‰€ιœ€ηš„ζœΊε™¨ε’Œζ’δ»Άγ€‚εͺζœ‰ε½“θΎη½δΊ†β€œεˆ†δΊ«ε‘”ζ€»ζ•°β€ζ—ΆοΌŒζ‰θƒ½εŒ…ε«εˆ†δΊ«ε‘”ε’Œεˆ†δΊ«ε‘”η”¨ζ’δ»Άγ€‚ζ―ζ‘η”ŸδΊ§ηΊΏζ‰€ιœ€ηš„ζ•°ι‡εˆ†εˆ«θˆε…₯。 -utility_title_notes=子ε·₯εŽ‚η¬”θ° -components_needed_tt=[font=default-bold]__1__[/font] εœ¨θƒŒεŒ… / [font=default-bold]__2__[/font] ιœ€θ¦ -no_components_needed=ζ— ιœ€ __1__ -utility_blueprint_tt=ε°†ζ‚¨ηš„εΊ“ε­˜δΈ­ηΌΊε°‘ηš„ζ‰€ζœ‰η‰©ε“θ½¬ζ’δΈΊεŒ…ε«εΈΈι‡η»„εˆε™¨ηš„θ“ε›Ύε­—η¬¦δΈ²γ€‚ η„ΆεŽε―δ»₯ε°†θΏ™δΊ›θΏžζŽ₯εˆ°θ―·ζ±‚η±οΌŒδ»₯δΎΏε°†εƒδ»¬δΊ€δ»˜η»™ζ‚¨γ€‚ -utility_no_items_necessary=δ½ ηš„θƒŒεŒ…δΈ­ε·²η»εŒ…ε«δΊ†ε»Ίι€ θ―₯__1__ζ‰€ιœ€ηš„ζ‰€ζœ‰η‰©ε“γ€‚ -request_items=请求物品 -request_items_tt=θ―·ζ±‚δ½ θƒŒεŒ…δΈ­δΈθΆ³δ»₯ε»ΊθΎθ―₯__1__ηš„η‰©ε“γ€‚[font=default-semibold][color=#84CDEC]ζ³¨ζ„οΌš[/color][/font] 这将使用建θΎζœΊε™¨δΊΊθ€ŒδΈζ˜―δ½ ι’„ζœŸηš„η‰©ζ΅ζœΊε™¨δΊΊγ€‚ -cancel_request=ε–ζΆˆθ―·ζ±‚ -request_logistics_not_researched=ιœ€θ¦β€œ__1__β€η§‘ζŠ€ζ₯δ½Ώη”¨ζ­€εŠŸθƒ½ -request_no_character=δ½ ιœ€θ¦ζœ‰δΈ€δΈͺδΈŽδ½ ε…³θ”ηš„θ§’θ‰²ζ‰θƒ½ιœ€ζ±‚η‰©ε“γ€‚ -utility_no_character=ζ²‘ζœ‰ε…³θ”θ§’θ‰²ε°±ζ— ζ³•ζ‰‹ε·₯刢作 -utility_no_recipes=ζ²‘ζœ‰ε―δ»₯εˆΆδ½œθΏ™δΈͺη‰©ε“ηš„ι…ζ–Ή -utility_no_demand=θ―₯η‰©ε“ηš„ιœ€ζ±‚ε·²ζ»‘θΆ³ -utility_no_resources=ζ²‘ζœ‰θΆ³ε€Ÿηš„θ΅„ζΊθΏ›θ‘Œζ‰‹ε·₯刢作 - -preferences=偏ε₯½ -preferences_support=ζ”―ζŒθΏ™δΈͺmod在 [font=default-semibold][color=#84CDEC]https://ko-fi.com/therenas[/color][/font]! -preferences_info=这些偏ε₯½θΎη½εŒ…ε«δΊ†δ½ εœ¨ζΈΈζˆδΈ­η»εΈΈδΌšθ°ƒζ•΄ηš„θΎη½γ€‚\nε―ΉδΊŽι€šη”¨θΎη½οΌŒθ―·ε‰εΎ€\nδΈ»θœε•β†’θΎη½β†’樑组θΎη½β†’ε·₯εŽ‚θ§„εˆ’εΈˆγ€‚ -preference_general_title=δΈ€θˆ¬εε₯½ -preference_general_title_tt=一些您可能想要εšζœŸζ”Ήε˜ηš„δΈ€θˆ¬εε₯½ -preference_general_ignore_barreling_recipes=εΏ½η•₯θ£…ζ‘Άε’Œε †ε ι…ζ–Ή -preference_general_ignore_barreling_recipes_tt=允θΈδ½ εœ¨ε―»ζ‰Ύι…ζ–Ήζ—ΆεΏ½η•₯θ£…ζ‘ΆοΌˆε€Ύε€’οΌ‰ε’Œε †ε οΌˆζ‹†ε †οΌ‰ι…ζ–ΉοΌˆδ»…ι€‚η”¨δΊŽε…ΌεΉηš„ ModοΌ‰ -preference_general_ignore_recycling_recipes=εΏ½η•₯ε›žζ”Άι…ζ–Ή -preference_general_ignore_recycling_recipes_tt=允θΈδ½ εΏ½η•₯ε›žζ”ΆηŽ°ζœ‰η‰©ε“ηš„ι…ζ–ΉοΌˆδ»…ι€‚η”¨δΊŽε…ΌεΉηš„ ModοΌ‰ -preference_general_ingredient_satisfaction=εŽŸζ–™ζ»‘θΆ³ -preference_general_ingredient_satisfaction_tt=ζ˜Ύη€ΊδΈ€δΈͺι…ζ–Ήιœ€ζ±‚ηš„εŽŸζ–™ζ˜―ε¦θ’«ε…ΆδΈ‹ηš„ι…ζ–Ήζ‰€ζ»‘θΆ³ -preference_general_round_button_numbers=ζŒ‰ι’数字取整 -preference_general_round_button_numbers_tt=ε‘δΈŠε–ζ•΄ζœΊε™¨ε’ŒδΌ ι€εΈ¦/ε•δΎ§δΌ ι€εΈ¦ζŒ‰ι’δΈŠηš„ζ•°ε­— -preference_general_attach_subfactory_products=子ε·₯εŽ‚δΊ§ε“ε›Ύζ ‡ -preference_general_attach_subfactory_products_tt=εœ¨η»™εšεη§°ζ—θΎΉζ˜Ύη€Ίε­ε·₯εŽ‚η”Ÿζˆηš„θΎ“ε‡Ίηš„ε›Ύζ ‡ -preference_production_title=η”ŸδΊ§θ‘¨εˆ— -preference_production_title_tt=这允θΈδ½ εœ¨η”ŸδΊ§θ‘¨δΈ­ε―η”¨δΈ€δΊ›ι’ε€–ηš„εˆ— -preference_production_done_column=ζ ‡θ°εŒζˆι…ζ–Ή -preference_production_done_column_tt=ζ·»εŠ δΈ€εˆ—ζŒ‰ι’οΌŒε…θΈδ½ ε°†ι…ζ–Ήζ ‡θ°δΈΊε·²εŒζˆοΌŒθΏ™ηΊ―η²Ήεͺζ˜―δΈΊδ½ ζδΎ›ηš„θ§†θ§‰δΏ‘ζ―οΌŒε―Ήι…ζ–Ήζœ¬θΊ«ζ²‘ζœ‰ε½±ε“ -preference_production_pollution_column=ζ±‘ζŸ“ -preference_production_pollution_column_tt=ζ·»εŠ δΈ€ζ οΌŒζ˜Ύη€Ίθ―₯ι…ζ–ΉδΊ§η”Ÿηš„ζ±‘ζŸ“ -preference_production_line_comment_column=ι…ζ–Ήη¬”θ° -preference_production_line_comment_column_tt=ζ·»εŠ δΈ€εˆ—ζ–‡ζœ¬ε­—ζ΅οΌŒδ»₯便批注单δΈͺ配方 -preference_mb_defaults_title=默θ€ζ’δ»Ά -preference_mb_defaults_title_tt=θΎη½ι»˜θ€ζ’δ»ΆοΌŒζ―δΈͺζ–°ηš„ι…ζ–Ήιƒ½δΌšε°θ―•η”¨θ―₯ι…η½ -preference_mb_default_machine=首选 -preference_mb_default_machine_tt=ζ–°ε»Ίι…ζ–Ήζ—Άδ½Ώη”¨ηš„ι¦–ι€‰ζ’δ»Ά -preference_mb_default_machine_secondary=欑选 -preference_mb_default_machine_secondary_tt=ε¦‚ζžœι¦–ι€‰ζ’δ»ΆδΈŽζ–°ι…ζ–ΉδΈε…ΌεΉοΌŒεˆ™ε°θ―•使用θ―₯插仢 -preference_mb_default_beacon=插仢 -preference_mb_default_beacon_tt=尝试插ε…₯到每δΈͺζ–°ι…ζ–Ήηš„εˆ†δΊ«ε‘”δΈ­ι»˜θ€ζ’δ»Ά -preference_mb_default_beacon_amount=数量 -preference_mb_default_beacon_amount_tt=ζŒ‡εšζ–°ι…ζ–Ήηš„ζ―ε°ζœΊε™¨ε°†ε—εˆ°ε€šε°‘εˆ†δΊ«ε‘”ηš„ε½±ε“ -preference_default_belts_title=偏ε₯½δΌ ι€εΈ¦ -preference_default_belts_title_tt=θΎη½θ‘η—传送带/ε•δΎ§δΌ ι€εΈ¦ιœ€ζ±‚ι‡ζˆ–ζŒ‰δΌ ι€εΈ¦/ε•δΎ§δΌ ι€εΈ¦ζ•°ι‡ζŒ‡εšδΊ§ε“ζ—Άδ½Ώη”¨ηš„δΌ ι€εΈ¦η±»εž‹ -preference_default_beacons_title=偏ε₯½ζ’δ»Άζ•ˆζžœεˆ†δΊ«ε‘” -preference_default_beacons_title_tt=θΎη½ε‘ι…ζ–ΉδΈ­ζ·»εŠ εˆ†δΊ«ε‘”ζ—Άι»˜θ€ι€‰ζ‹©ηš„η±»εž‹ -preference_default_fuels_title=偏ε₯½η‡ƒζ–™ -preference_default_fuels_title_tt=θΎη½ζ·»εŠ εΈ¦δ½Ώη”¨η‡ƒηƒ§ηƒ­θƒ½ηš„ζœΊε™¨ζ—Άι»˜θ€ι€‰ζ‹©ηš„燃料 -preference_default_machines_title=偏ε₯½ζœΊε™¨ -preference_default_machines_title_tt=θΎη½ζ·»εŠ ζ–°ι…ζ–Ήζ—ΆοΌŒζ―δΈͺι…ζ–Ήη±»εˆ«ι»˜θ€ι€‰ζ‹©ηš„ζœΊε™¨γ€‚[font=default-semibold][color=#84CDEC]Alt-点击[/color][/font] δ»»δ½•ζœΊε™¨ζ₯εŒζ—ΆθΎη½ε…Άδ»–η±»δΌΌη±»εˆ«γ€‚ -preference_default_wagons_title=偏ε₯½θ½¦εŽ’ -preference_default_wagons_title_tt=θΎη½θ‘η—θ΄§θ½¦ιœ€ζ±‚ζ—Άδ½Ώη”¨ηš„θ΄§θΏθ½¦εŽ’η±»εž‹ - -recipe_instruction=选择一δΈͺ配方ζ₯__1__β€œ__2__” -show=显瀺 -unresearched_recipes=ζœͺη ”η©Άηš„ι…ζ–Ή -hidden_recipes=ιšθ—ηš„ι…ζ–Ή -no_recipe_found=ζ²‘ζœ‰η¬¦εˆζ‚¨η­›ι€‰ζ‘δ»Άηš„ι…ζ–Ή - -interface_name_fnei=FNEI -interface_name_wiiruf=WIIRUF -interface_name_recipebook=Recipe Book - -fluid_at_temperature=__2__ __3__ ηš„ __1__ - -submit=提亀 -delete=εˆ ι™€ -cancel=ε–ζΆˆ -confirm_dialog_tt=- ζŒ‰δΈ‹ __CONTROL__fp_confirm_dialog__ ζ₯η‘θ€ - -cancel_dialog_tt=- ζŒ‰δΈ‹ __CONTROL__toggle-menu__ ζ₯ε–ζΆˆ - -search_button_tt=- ζŒ‰δΈ‹ __CONTROL__focus-search__ ζ₯θšη„¦εˆ°ζœη΄’ζ‘† - -close_button_tt=- ζŒ‰δΈ‹ __CONTROL__toggle-menu__ ζ₯ε…³ι—­ - -searchfield_tt=使用θ‡ͺη„Άθ―­θ¨€εη§°η­›ι€‰η»“ζžœ -searchfield_not_ready_tt=θ‡ͺη„Άθ―­θ¨€ζœη΄’ζœͺε°±η»ͺ,请稍后\nδ½Ώη”¨ζŒ‡δ»€[font=default-semibold]’/fp-restart-translation’[/font] ζ₯重启εƒγ€‚ -warning_with_icon=[img=fp_sprite_warning_red] __1__ - -amount_by=ζŒ‰ε‘«ζ»‘ __1__ ηš„ζ•°ι‡ -no_item_found=ζ²‘ζœ‰η¬¦εˆδ½ ζœη΄’ζ‘δ»Άηš„η‰©ε“ -picker_issue_select_item=ι€‰ζ‹©δ½ θ¦ζ·»εŠ ηš„η‰©ε“ -picker_issue_enter_amount=ι€šθΏ‡ζ•°ε­—ζˆ–δΌ ι€εΈ¦ζŒ‡εšζ•°ι‡ - -matrix_free_items=θ‡ͺ由物品 -matrix_constrained_items=选择 __1__ θ‡ͺη”± __2__ -matrix_linearly_dependent_recipes=ζ£€ζ΅‹εˆ°ηš„ηΊΏζ€§δΎθ΅–ζ€§ι…ζ–Ή - -subfactory_dialog_description=为子ε·₯εŽ‚ι€‰ζ‹©δΈ€δΈͺ名称 -subfactory_dialog_name=名称 -subfactory_dialog_name_tt=子部门名称允θΈδ½Ώη”¨ε―Œζ–‡ζœ¬οΌŒε―δ»₯δ½Ώη”¨δΈ‹ι’ηš„ζŒ‰ι’ζ·»εŠ ε―Œζ–‡ζœ¬ -subfactory_dialog_rich_text=ε―Œζ–‡ζœ¬ -subfactory_dialog_rich_text_tt=θΏ™δΊ›ι€‰ζ‹©ε™¨ε―η”¨δΊŽε°†ε―Œζ–‡ζœ¬ζ·»εŠ εˆ°ε­ε·₯εŽ‚εη§°δΈ­γ€‚ε½“η„ΆοΌŒθ‡ͺε·±ι”ε…₯ζˆ–η²˜θ΄΄δ»»δ½•ε―Œζ–‡ζœ¬δΉŸε―δ»₯。 -subfactory_dialog_name_empty=子ε·₯εŽ‚εη§°δΈε―δΈΊη©Ί - -machine_dialog_description=配η½ζœΊε™¨δΈΊ ’__1__’ -machine_does_not_use_fuel=不使用燃料 -machine_limit=限度 -machine_limit_tt=ι™εˆΆθ―₯η”ŸδΊ§ηΊΏε°†δ½Ώη”¨ηš„ζœΊε™¨ζ•°ι‡γ€‚ε¦‚ζžœιœ€θ¦ζ›΄ε°‘ηš„ζœΊε™¨οΌŒεžι™…ζ•°ι‡ε―θƒ½δΌšζ›΄δ½Žγ€‚ -machine_force_limit=η²Ύη‘ζžι™ε€Ό -machine_force_limit_tt=εΌΊεˆΆζœΊε™¨ζ•°ι‡θΎΎεˆ°δΈŠθΏ°θ§„εšηš„准η‘ζ•°ι‡οΌŒε³δ½ΏθΏ™δΌšε―Όθ‡΄η”ŸδΊ§θΏ‡ε‰©γ€‚εͺζœ‰δΈŽζœΊε™¨ι™εˆΆη›Έη»“εˆζ‰ζœ‰ζ„δΉ‰γ€‚ - -beacon_dialog_description_add=δΈΊ ’__1__’ ε’žεŠ ζ’δ»Άε‘” -beacon_dialog_description_edit=δΈΊ ’__1__’ 配η½ζ’δ»Άε‘” -beacon_amount_tt=θΏ™ζŒ‡εšδΊ†ζ―ε°ζœΊε™¨ε°†ε—εˆ°ε€šε°‘εˆ†δΊ«ε‘”ηš„ε½±ε“γ€‚ζ‚¨ε―δ»₯εœ¨θΏ™ι‡ŒθΎ“ε…₯δΈ€δΈͺε°ζ•°οΌŒεƒε―δ»₯用ζ₯εζ˜ ζ‚¨ηš„δΈ€δΊ›ζœΊε™¨ε―θƒ½θ’«δΈεŒζ•°ι‡ηš„εˆ†δΊ«ε‘”θ¦†η›–ηš„δΊ‹εžγ€‚ -beacon_total=ζ€»ζ•° -beacon_total_tt=θΏ™ζŒ‡εšδΊ†ζ‚¨εœ¨εžι™…ε·₯εŽ‚δΈ­δ½Ώη”¨ζ­€ι…ζ–Ήηš„εˆ†δΊ«ε‘”ηš„η»ε―Ήζ•°ι‡γ€‚θ―₯δΏ‘ζ―ε°†η”¨εœ¨θƒ½ζΊζΆˆθ€—θ‘η—中。 -beacon_selector_tt=使用一δΈͺ摆选ε·₯ε…·ζ₯θ‘η—ε·²η»ε»Ίζˆηš„ε·₯εŽ‚δΈ­ηš„εˆ†δΊ«ε‘”ζ•°ι‡ -beacon_issue_set_amount=ζ―ε°ζœΊε™¨ε—ε½±ε“ηš„εˆ†δΊ«ε‘”ζ•°ι‡εΊ”ε€§δΊŽ 0 -beacon_issue_no_modules=至少选择一δΈͺ插仢 - -switch_to_compact_view=εˆ‡ζ’εˆ°η΄§ε‡‘θ§†ε›Ύ\n- ζŒ‰ __CONTROL__fp_toggle_compact_view__ ζ₯εˆ‡ζ’ - -pause_on_interface=ε½“δΈ»η•Œι’ζ‰“εΌ€ζ—ΆοΌŒεŽε°θ‡ͺεŠ¨ζš‚εœζΈΈζˆοΌˆδ»…ι™ε•δΊΊζΈΈζˆοΌ‰\n- ζŒ‰δΈ‹ __CONTROL__fp_toggle_pause__ ζ₯εˆ‡ζ’ζš‚εœ - -close_interface=ε…³ι—­ζ­€η•Œι’\n- ζŒ‰δΈ‹ __CONTROL__fp_toggle_interface__ ζ₯ε…³ι—­ - - -action_open_archive_tt=打开子ε·₯εŽ‚ε­˜ζ‘£\n__1__ -archive_empty=[font=default-semibold]- 存摣η›ε‰δΈΊη©Ί -[/font] -archive_filled=[font=default-semibold]- 存摣η›ε‰εŒ…含 __1__ __2__ -[/font] -action_close_archive_tt=关闭子ε·₯εŽ‚ε­˜ζ‘£ -action_import_subfactory=δ½Ώη”¨εœ¨ε¦δΈ€δΈͺε­˜ζ‘£δΈ­η”Ÿζˆηš„ε­—η¬¦δΈ²ε―Όε…₯子ε·₯εŽ‚ -action_export_subfactory=将子ε·₯εŽ‚ε―Όε‡ΊδΈΊε―δ»₯δΈŽδ»–δΊΊε…±δΊ«ηš„ε­—η¬¦δΈ² -action_archive_subfactory=ε°†ι€‰δΈ­ηš„ε­ε·₯εŽ‚η§»εŠ¨εˆ°ε­˜ζ‘£οΌŒδ½ ε―δ»₯δ½Ώη”¨ε·¦θΎΉηš„ε­˜ζ‘£ζŒ‰ι’ζ‰“εΌ€εƒ -action_unarchive_subfactory=ε°†ι€‰δΈ­ηš„ε­ε·₯εŽ‚δ»Žε­˜ζ‘£δΈ­η§»ε‡ΊοΌŒε›žεˆ°δΈ»εˆ—θ‘¨δΈ­ -action_duplicate_subfactory=ε€εˆΆι€‰δΈ­ηš„ε­ε·₯εŽ‚οΌŒεˆ›ε»ΊδΈ€δΈͺεŒηΎŽηš„ε‰―本 -action_add_subfactory_by_name=εˆ›ε»Ίζ–°ηš„ε­ε·₯εŽ‚\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ ζ₯立即选择产品 -action_add_subfactory_by_product=为子ε·₯εŽ‚ι€‰ζ‹©δΈ€δΈͺζ–°ηš„η‰©ε“\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ ζ₯ε…ˆη»™εƒε‘½ε -action_edit_subfactory=编辑所选子ε·₯εŽ‚ηš„εη§°ε’Œε›Ύζ ‡ -action_trash_subfactory=ι”€ζ―ζ‰€ι€‰ηš„ε­ε·₯εŽ‚\nεƒε°†θ’«δΏε­˜εœ¨ε­˜ζ‘£δΈ­__1__εˆ†ι’Ÿ -action_delete_subfactory=ζ°ΈδΉ…εˆ ι™€ζ‰€ι€‰ε­ε·₯εŽ‚ -subfactory_trashed=[font=default-bold]ε·²εˆ ι™€[/font] - ε°†εœ¨ __1__ εˆ†ι’ŸεŽεˆ ι™€ -subfactory_invalid=[font=default-bold]ζ— ζ•ˆ[/font] - ιœ€θ¦δΏε€ - -subfactory_info=子ε·₯εŽ‚δΏ‘ζ― -no_subfactory=ζœͺ选中子ε·₯εŽ‚ -subfactory_needs_repair=η”±δΊŽε―η”¨ηš„ Mod ι›†ε‘η”ŸδΊ†ε˜εŒ–οΌŒθ―₯子ε·₯εŽ‚ε·²ε˜εΎ—ζ— ζ•ˆγ€‚δ½ ε―δ»₯ι€šθΏ‡δΏε€εƒοΌŒζˆ–θ€…ι‡ζ–°ε―η”¨ηΌΊε°‘ηš„ Mod ζ₯解决这δΈͺι—ι’˜γ€‚δΏε€δΌšεˆ ι™€ζ‰€ζœ‰ε·²η»ε€±ζ•ˆηš„物品。 -repair_subfactory=δΏε€ε­ε·₯εŽ‚ -timescale=ζ—Άι—΄ε°ΊεΊ¦ -timescale_tt=ζ—Άι—΄ε°ΊεΊ¦θΎη½δΊ†η‰©ε“ηš„η”ŸδΊ§ι€ŸεΊ¦γ€‚δΎ‹ε¦‚οΌŒι€‰ζ‹© [font=default-bold]1 εˆ†ι’Ÿ[/font]εΉΆζ·»εŠ η”ŸδΊ§ 400 δΈͺη»Ώη”΅θ·―ζΏζ„ε‘³η€δ½ εΈŒζœ›[font=default-bold]ζ―εˆ†ι’Ÿ[/font]η”ŸδΊ§ 400 甡路板。 -mining_productivity=ι‡‡ηŸΏδΊ§θƒ½ -mining_productivity_tt=ε½“ε‰ηš„ι‡‡ηŸΏδΊ§θƒ½εŠ ζˆγ€‚ι»˜θ€ζƒ…ε†΅δΈ‹οΌŒεƒδΌšθ·ŸθΈͺδ½ ηš„η ”η©ΆθΏ›εΊ¦οΌŒδ½†δ½ ε―δ»₯ζ‰‹εŠ¨θ¦†η›–θ―₯η™Ύεˆ†ζ―”γ€‚θ¦ζ’ε€εˆ°θ‡ͺ动跟θΈͺοΌŒθ―·ζΈ…ι™€ζ–‡ζœ¬ε­—ζ΅εΉΆη‘θ€γ€‚ -override=覆盖 -solver_choice=求解器 -solver_choice_tt=选择对这δΈͺ子ε·₯εŽ‚δ½Ώη”¨ε“ͺη§ζ±‚θ§£ε™¨γ€‚δΌ η»Ÿηš„ζ±‚θ§£ε™¨ι€šθΏ‡ζŒ‰ι‘ΊεΊζŸ₯ηœ‹δ½ ηš„ι…ζ–ΉεΉΆζ‰Ύε‡Ίεƒδ»¬ηš„ιœ€ζ±‚ζ₯ε·₯δ½œγ€‚ε¦δΈ€ζ–Ήι’οΌŒηŸ©ι˜΅ζ±‚θ§£ε™¨ε―δ»₯倄理εΎͺηŽ―ε’Œε‰―δΊ§ε“οΌŒδ½†ζœ‰ζ—Άιœ€θ¦ι’ε€–ηš„ι…η½γ€‚ -solver_choice_traditional=传统 -solver_choice_matrix=矩阡 -solver_choice_configure=ηŸ©ι˜΅ζ±‚θ§£ε™¨ι…η½ -subfactory_modset_changes=δ½ ε―η”¨ηš„ Mod ε·²ζ”Ήε˜οΌš -subfactory_mod_removed=\n\n[color=#FF3333][font=default-bold]η§»ι™€ηš„ Mod:[/font][/color] -subfactory_mod_added=\n\n[color=#33CC33][font=default-bold]ζ–°ε’žηš„ Mod:[/font][/color] -subfactory_mod_updated=\n\n[color=#CCCC00][font=default-bold]ζ›΄ζ–°ηš„ Mod:[/font][/color] -subfactory_mod_and_version=\n__1__(v__2__οΌ‰ -subfactory_mod_and_versions=\n__1__:v__2__ β†’ v__3__ - -ingredients_to_combinator_tt=将歀子ε·₯εŽ‚ηš„ζ‰€ζœ‰εŽŸζ–™θ½¬ζ’δΈΊεŒ…ε«εΈΈι‡θΏη—ε™¨ηš„θ“ε›Ύε­—η¬¦δΈ²γ€‚ - -view_state_tt=__1__\n- ζŒ‰δΈ‹ __CONTROL__fp_cycle_production_views__ / __CONTROL__fp_reverse_cycle_production_views__ ζ₯εΎͺηŽ―θ§†ε›Ύ - -items_per_timescale=θΎη½η‰©ε“ζŒ‰ι’δΈŠηš„ζ•°ε­—ζ˜Ύη€ΊδΈΊζ― __1__ η”ŸδΊ§/ζΆˆθ€—ζ•°γ€‚ -belts_or_lanes=θΎη½η‰©ε“ζŒ‰ι’δΈŠηš„ζ•°ε­—ζ˜Ύη€ΊδΈΊιœ€θ¦ε€šε°‘ζ‘你偏ε₯½ηš„ __1__ ζ₯ζ»‘θΆ³εžεγ€‚ -wagons_per_timescale=ε°†η‰©ε“ζŒ‰ι’δΈŠηš„ζ•°ε­—θΎη½δΈΊζ― __1__ ε°†θ£…ζ»‘ε€šε°‘θŠ‚θ΄§θΏθ½¦εŽ’ζˆ–ζΆ²η½θ½¦εŽ’γ€‚ -items_per_second_per_machine=θΎη½η‰©ε“ζŒ‰ι’δΈŠηš„ζ•°ε­—ζ˜Ύη€ΊδΈΊζ―ε°ζœΊε™¨ζ―η§’ζ‰€η”ŸδΊ§/ζΆˆθ€—ζ•°γ€‚θΏ™ζœ‰εŠ©δΊŽδΌ°θ‘ιœ€θ¦ε€šε°‘δΈͺζœΊζ’°θ‡‚γ€‚ - -refresh_production=εˆ·ζ–°δΈ‹ι’ηš„η”ŸδΊ§θ‘¨\n- ζŒ‰δΈ‹ __CONTROL__fp_refresh_production__ ζ₯εˆ·ζ–° - -production=η”ŸδΊ§ -level=层级 -floor_up_tt=δΈŠη§»δΈ€ε±‚ -floor_top_tt=δΈŠη§»θ‡³ι‘Άε±‚ -fold_out_subfloors_tt=ζŠ˜ε ε­ε±‚ -show_floor_items_tt=ε°†δΈŠι’ηš„ε­ε·₯εŽ‚η‰©ε“ζ€»ζ•°ζ›Ώζ’δΈΊε½“ε‰ε±‚ηš„ζ€»ζ•°γ€‚δ»…ι€‚η”¨δΊŽε­ε±‚οΌŒδΈι€‚η”¨δΊŽι‘Άε±‚γ€‚ -utility_dialog_tt=打开εžη”¨ε·₯具对话摆 -production_instruction_subfactory=η‚Ήε‡»ε·¦δΈŠθ§’ηš„η»Ώθ‰²β€™+β€™ζŒ‰ι’ζ·»εŠ ε­ε·₯εŽ‚ -production_instruction_product=η‚Ήε‡»δΈŠζ–ΉδΊ§ε“ζ‘†δΈ­ηš„η°θ‰²β€™+β€™ζŒ‰ι’ζ·»εŠ δΊ§ε“ -production_instruction_recipe=εœ¨δΈŠζ–Ήηš„δΊ§ε“ζ‘†δΈ­ε·¦ι”η‚Ήε‡»δΊ§ε“οΌŒε³ε―ζ·»εŠ ι…ζ–Ή - -column_done_tt=将配方标θ°δΈΊε·²εŒζˆοΌŒδΎΏδΊŽδ½ ηš„ζŸ₯ηœ‹ -column_percentage_tt=θΏ™δΈͺη™Ύεˆ†ζ―”ε†³εšδΊ†θΏ™δΈͺδΊ§ε“ζœ‰ε€šε°‘ιœ€ζ±‚εΊ”θ―₯η”±θΏ™δΈͺ配方ζ₯滑袳。εͺζœ‰ε½“δ½ ζŒ‰δΈ‹ __CONTROL_STYLE_BEGIN__Enter__CONTROL_STYLE_END__ η‘θ€δΏζ”ΉεŽζ‰δΌšζ›΄ζ–°θ‘η—。 -column_comment=θ―„θΊ -recipe_inactive=配方ζœͺζΏ€ζ΄» -recipe_subfloor_attached=附带子层 -recipe_consumes_byproduct=ζΆˆθ€—ε‰―δΊ§η‰© -subfloor_machine_count=__1__ __2__ εœ¨ε­ε±‚δΈ­δ½Ώη”¨ -machine_limit_force=η²Ύη‘ι™εˆΆδΈΊ [__1__] -machine_limit_enforced=εžι™…ι™εˆΆ [__1__] -machine_limit_set=ι™εˆΆδΈΊ [__1__] -add_machine_module=ζ·»εŠ ζ’δ»Ά -add_beacon=ζ·»εŠ δΈ€δΈͺεˆ†δΊ«ε‘” -in_total=ζ€»θ‘ __1__ -priority_product=首要产品 -raw_ore=原矿 - -switch_to_main_view=εˆ‡ζ’εˆ°δΈ»θ§†ε›Ύ\n- ζŒ‰ __CONTROL__fp_toggle_compact_view__ ζ₯εˆ‡ζ’ - - -copied_into_clipboard=__1__ 已倍刢 -pasted_from_clipboard=__1__ 已粘贴 -clipboard_empty=ζ‚¨ηš„ε‰ͺ贴板为空 -clipboard_incompatible_class=不能将__1__ 粘贴在 __2__ -clipboard_incompatible=粘贴 __1__ δΈε…ΌεΉ -clipboard_already_exists=粘贴 __1__ 已存在 -clipboard_no_empty_slots=ζ²‘ζœ‰η©Ίηš„ζ’δ»Άζ’ζ§½ -clipboard_recipe_irrelevant=η²˜θ΄΄ηš„η”ŸδΊ§ηΊΏδΈŽζ­€ζ₯Όε±‚ζ— ε…³ - -tut_action_line=\n__CONTROL_STYLE_BEGIN____1____CONTROL_STYLE_END__ ζ₯ __2__ -tut_open_in_recipebook=\n__CONTROL_STYLE_BEGIN__Alt + Right-click__CONTROL_STYLE_END__ δ»₯在 Recipe Book 中打开 - -tut_left=ε·¦ι”单击 -tut_right=右ι”单击 -tut_shift=Shift -tut_alt=Alt -tut_control=Control - -tut_select=选择 -tut_edit=ηΌ–θΎ‘ -tut_delete=εˆ ι™€ -tut_copy=倍刢 -tut_paste=粘贴 -tut_add_recipe=ε’žεŠ ι…ζ–Ή -tut_move_left=ε‘ε·¦η§»εŠ¨ -tut_move_right=ε‘ε³η§»εŠ¨ -tut_open_subfloor=打开子层 -tut_toggle=εˆ‡ζ’ -tut_set_limit=θΎεšι™εˆΆ -tut_reset_to_default=重η½δΈΊι»˜θ€ε€Ό -tut_put_into_cursor=ζ”Ύε…₯ε…‰ζ ‡ -tut_add_recipe_to_end=ζ·»εŠ ι…ζ–Ή -tut_add_recipe_below=εœ¨δΈ‹ι’ζ·»εŠ ι…ζ–Ή -tut_specify_amount=ζŒ‡εšζ•°ι‡ -tut_prioritize=δΌ˜ε…ˆε€„η† - -effect_line=\n__1__: [font=default-semibold][color=#FFE6C0]__2__%[/color][/font] __3__ -consumption=能耗 -speed=ι€ŸεΊ¦ -productivity=η”ŸδΊ§ηŽ‡ -pollution=ζ±‘ζŸ“ -base_prod=εŸΊζœ¬η”ŸδΊ§εŠ› -mining_prod=ι‡‡ηŸΏη”ŸδΊ§ηŽ‡ -effect_maxed=οΌˆζœ€ε€§οΌ‰ - -error_no_relevant_recipe=ζ²‘ζœ‰ι…ζ–Ήε―δ»₯η”ŸδΊ§θΏ™δΈͺ产品 -error_no_enabled_recipe=ζ²‘ζœ‰ε―η”¨ηš„ι…ζ–Ήε―δ»₯η”ŸδΊ§θΏ™δΈͺδΊ§ε“οΌˆεœ¨εε₯½θΎη½δΈ­ε―用→) -error_no_compatible_machine=ζ²‘ζœ‰ζœΊε™¨ε―δ»₯εˆΆδ½œθΏ™δΈͺ配方 -error_no_subfloor_on_byproduct_recipes=ζΆˆθ€—ε‰―δΊ§ε“ηš„ι…ζ–ΉδΈθƒ½ζœ‰ε­ε±‚ -error_no_new_subfloors_in_archive=δΈθƒ½δΈΊε·²δΏε­˜ηš„ε­ε·₯εŽ‚ζ·»εŠ ε­ε±‚ -error_list_item_cant_be_shifted=θΏ™δΈͺ__1__δΈθƒ½θ’«η§»εŠ¨__2__ -error_recipebook_version_incompatible=Recipe Book η‰ˆζœ¬δΈε…ΌεΉ; 尝试更新这一δΈͺmod -error_recipebook_lookup_failed=θ’«η‚Ήε‡»ηš„ __1__ 在Recipe BookδΈ­ζ‰ΎδΈεˆ° -error_linearly_dependant_recipes=ηŸ©ι˜΅ζ±‚θ§£ε™¨ζœͺζΏ€ζ΄»οΌ›η‘保每δΈͺ产品εͺζœ‰δΈ€δΈͺ配方 -error_recipe_wrong_floor=__1__ 配方εͺθƒ½θ’«ζ·»εŠ εœ¨ε­ε·₯εŽ‚ηš„ι‘Άε±‚ -warning_no_matrix_configuration_needed=ηŸ©ι˜΅ζ±‚θ§£ε™¨δΈιœ€θ¦ι’ε€–ηš„ι…η½ -warning_recipe_disabled=θ―₯ι…ζ–Ήε°šζœͺη ”η©ΆοΌŒζ‰€δ»₯η›ε‰θΏ˜δΈθƒ½η”ŸδΊ§ -warning_module_not_compatible=δ½ ηš„εε₯½__1__不兼εΉζ­€ζœΊε™¨ -warning_no_prioritizing_single_product=εͺζœ‰ε•δΈ€η›Έε…³δΊ§η‰©ηš„ι…ζ–Ήζ— ζ³•ι€‰δΈΊι¦–θ¦δΊ§ε“ -hint_tutorial=ε¦‚ζžœδ½ ζ˜―ζ–°ζ‰‹οΌŒε―δ»₯θ€ƒθ™‘ηœ‹ηœ‹ζ•™η¨‹βŸΆ -hint_byproducts_removed=η¦η”¨ηŸ©ι˜΅ζ±‚θ§£ε™¨δΌšεˆ ι™€ζ‰€ζœ‰ε‰―δΊ§ε“ι…ζ–Ή - -prefix_kilo=k -prefix_mega=M -prefix_giga=G -prefix_tera=T -prefix_peta=P -prefix_exa=E -prefix_zetta=Z -prefix_yotta=Y -unit_watt=W -unit_joule=J -unit_pollution=P -unit_celsius=Β°C -unit_second=s -unit_minute=m -unit_hour=h -second=η§’ -minute=εˆ†ι’Ÿ -hour=小既 - -error_message=[color=#FF3333]__1__[/color] -warning_message=[color=#CCCC00]__1__[/color] -hint_message=[color=#33CC33]__1__[/color] -info_label=__1__ [img=info] -bold_label=[font=default-bold]__1__[/font] - -tt_title=[font=default-semibold]__1__[/font] -tt_title_with_note=[font=default-semibold]__1__[/font] (__2__) - -selected=选中 -preferred=偏ε₯½ -satisfied=ζ»‘θΆ³ -valid=ζœ‰ζ•ˆ -invalid=ζ— ζ•ˆ -increased=咞加 -decreased=减少 -capped=封鑢 - -on=εΌ€ -off=ε…³ -left=ε·¦ -right=右 -up=上 -down=δΈ‹ -top=鑢部 -bottom=底部 - -add=咞加 -new=ζ–°ε»Ί -edit=ηΌ–θΎ‘ -choose=选择 -produce=η”ŸδΊ§ -consume=ζΆˆθ€— - -none=ζ—  -crafting_time=εˆΆι€ ζ—Άι—΄ -amount=数量 - -factory=ε·₯εŽ‚ -archive=存摣 - -toggle_interface=θ§„εˆ’ -toggle_interface_tt=εΌ€ε…³ε·₯εŽ‚θ§„εˆ’εΈˆη•Œι’ - -energy_consumption=能耗 -effectivity=ζ•ˆηŽ‡ -module_slots=插仢槽位 -fuel_value=燃料热值 -emissions_multiplier=ζŽ’ζ”ΎδΉ˜ζ•° -throughput=εžει‡ -crafting_speed=εˆΆι€ ι€ŸεΊ¦ -storage=仓储 - -combinator=运η—器 -put_into_cursor_failed=__1__ 不能蒫放ε…₯ε…‰ζ ‡ -blueprint_no_combinator_prototype=ζ‰ΎδΈεˆ°εΈΈι‡θΏη—ε™¨εŽŸεž‹ -impossible_to_blueprint_fluid=梲体不能蒫蓝图为运η—器 - -move_row_tt=移动 __1__ __2__\n__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ ζ₯δΈ€εšεƒεˆ°e __3__ -attribute_line=\n[font=default-semibold][color=#FFE6C0]__1__:[/color][/font] __2__ -shift_to_paste=__CONTROL_STYLE_BEGIN__Shift-click__CONTROL_STYLE_END__ ζ₯粘贴 - -pl_subfactory=__plural_for_parameter_1_{1=子ε·₯εŽ‚|rest=子ε·₯εŽ‚}__ -pu_subfactory=__plural_for_parameter_1_{1=子ε·₯εŽ‚|rest=子ε·₯εŽ‚}__ -pl_line=__plural_for_parameter_1_{1=ηΊΏ|rest=ηΊΏ}__ -pu_line=__plural_for_parameter_1_{1=ηΊΏ|rest=ηΊΏ}__ -pl_floor=__plural_for_parameter_1_{1=层|rest=层}__ -pu_floor=__plural_for_parameter_1_{1=层|rest=层}__ -pl_item=__plural_for_parameter_1_{1=物品|rest=物品}__ -pu_item=__plural_for_parameter_1_{1=物品|rest=物品}__ -pl_fluid=__plural_for_parameter_1_{1=梲体|rest=梲体}__ -pu_fluid=__plural_for_parameter_1_{1=梲体|rest=梲体}__ -pl_product=__plural_for_parameter_1_{1=产品|rest=产品}__ -pu_product=__plural_for_parameter_1_{1=产品|rest=产品}__ -pl_byproduct=__plural_for_parameter_1_{1=副产品|rest=副产品}__ -pu_byproduct=__plural_for_parameter_1_{1=副产品|rest=副产品}__ -pl_ingredient=__plural_for_parameter_1_{1=εŽŸζ–™|rest=εŽŸζ–™}__ -pu_ingredient=__plural_for_parameter_1_{1=εŽŸζ–™|rest=εŽŸζ–™}__ -pl_fuel=__plural_for_parameter_1_{1=燃料|rest=燃料}__ -pu_fuel=__plural_for_parameter_1_{1=燃料|rest=燃料}__ -pl_recipe=__plural_for_parameter_1_{1=配方|rest=配方}__ -pu_recipe=__plural_for_parameter_1_{1=配方|rest=配方}__ -pl_machine=__plural_for_parameter_1_{1=ζœΊε™¨|rest=ζœΊε™¨}__ -pu_machine=__plural_for_parameter_1_{1=ζœΊε™¨|rest=ζœΊε™¨}__ -pl_module=__plural_for_parameter_1_{1=插仢|rest=插仢}__ -pu_module=__plural_for_parameter_1_{1=插仢|rest=插仢}__ -pl_beacon=__plural_for_parameter_1_{1=εˆ†δΊ«ε‘”|rest=εˆ†δΊ«ε‘”}__ -pu_beacon=__plural_for_parameter_1_{1=εˆ†δΊ«ε‘”|rest=εˆ†δΊ«ε‘”}__ -pl_belt=__plural_for_parameter_1_{1=传送带|rest=传送带}__ -pu_belt=__plural_for_parameter_1_{1=传送带|rest=传送带}__ -pl_lane=__plural_for_parameter_1_{1=传送带单侧|rest=传送带单侧}__ -pu_lane=__plural_for_parameter_1_{1=传送带单侧|rest=传送带单侧}__ -pl_wagon=__plural_for_parameter_1_{1=货运车厒|rest=货运车厒}__ -pu_wagon=__plural_for_parameter_1_{1=货运车厒|rest=货运车厒}__ -pl_stack=__plural_for_parameter_1_{1=堆叠|rest=堆叠}__ - -l_fluid=桁体 -u_power=η”΅εŠ› diff --git a/factoryplanner_1.1.72/prototypes/hotkeys.lua b/factoryplanner_1.1.72/prototypes/hotkeys.lua deleted file mode 100644 index 6785f404..00000000 --- a/factoryplanner_1.1.72/prototypes/hotkeys.lua +++ /dev/null @@ -1,80 +0,0 @@ ----@diagnostic disable - -data:extend({ - { - type = "custom-input", - name = "fp_toggle_interface", - key_sequence = "CONTROL + R", - consuming = "game-only", - order = "a" - }, - { - type = "custom-input", - name = "fp_toggle_compact_view", - key_sequence = "CONTROL + SHIFT + R", - consuming = "game-only", - order = "b" - }, - { - type = "custom-input", - name = "fp_toggle_pause", - key_sequence = "CONTROL + P", - consuming = "none", - order = "c" - }, - { - type = "custom-input", - name = "fp_refresh_production", - key_sequence = "R", - consuming = "none", - order = "d" - }, - { - type = "custom-input", - name = "fp_up_floor", - key_sequence = "ALT + UP", - consuming = "none", - order = "e" - }, - { - type = "custom-input", - name = "fp_top_floor", - key_sequence = "SHIFT + ALT + UP", - consuming = "none", - order = "f" - }, - { - type = "custom-input", - name = "fp_cycle_production_views", - key_sequence = "TAB", - consuming = "none", - order = "g" - }, - { - type = "custom-input", - name = "fp_reverse_cycle_production_views", - key_sequence = "CONTROL + TAB", - consuming = "none", - order = "h" - }, - { - type = "custom-input", - name = "fp_confirm_dialog", - key_sequence = "ENTER", - alternative_key_sequence = "KP_ENTER", - consuming = "none", - order = "i" - }, - { - type = "custom-input", - name = "fp_confirm_gui", - key_sequence = "", - linked_game_control = "confirm-gui" - }, - { - type = "custom-input", - name = "fp_focus_searchfield", - key_sequence = "", - linked_game_control = "focus-search" - } -}) diff --git a/factoryplanner_1.1.72/prototypes/shortcuts.lua b/factoryplanner_1.1.72/prototypes/shortcuts.lua deleted file mode 100644 index 7f53529b..00000000 --- a/factoryplanner_1.1.72/prototypes/shortcuts.lua +++ /dev/null @@ -1,36 +0,0 @@ ----@diagnostic disable - -data:extend({ - { - type = "shortcut", - name = "fp_open_interface", - action = "lua", - toggleable = false, - order = "fp-a[open]", - associated_control_input = "fp_toggle_interface", - icon = - { - filename = "__factoryplanner__/graphics/shortcut_open_x32.png", - priority = "extra-high-no-scale", - size = 32, - scale = 1, - flags = {"icon"} - }, - small_icon = - { - filename = "__factoryplanner__/graphics/shortcut_open_black_x24.png", - priority = "extra-high-no-scale", - size = 24, - scale = 1, - flags = {"icon"} - }, - disabled_small_icon = - { - filename = "__factoryplanner__/graphics/shortcut_open_white_x24.png", - priority = "extra-high-no-scale", - size = 24, - scale = 1, - flags = {"icon"} - } - } -}) diff --git a/factoryplanner_1.1.72/prototypes/sprites.lua b/factoryplanner_1.1.72/prototypes/sprites.lua deleted file mode 100644 index 6637ec7c..00000000 --- a/factoryplanner_1.1.72/prototypes/sprites.lua +++ /dev/null @@ -1,130 +0,0 @@ ----@diagnostic disable - -data:extend({ - { - type = "sprite", - name = "fp_semitransparent_pixel", - filename = "__factoryplanner__/graphics/semitransparent_pixel.png", - size = 1, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_mod_gui", - filename = "__factoryplanner__/graphics/shortcut_open_x32.png", - size = 32, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_zone_selection", - filename = "__factoryplanner__/graphics/zone_selection.png", - size = 32, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_generic_assembler", - filename = "__factoryplanner__/graphics/generic_assembler.png", - size = 64, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_white_square", - filename = "__factoryplanner__/graphics/white_square.png", - size = 8, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_import_light", - filename = "__factoryplanner__/graphics/import_light.png", - size = 32, icon_mipmaps = 2, scale = 0.5, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_export_light", - filename = "__factoryplanner__/graphics/export_light.png", - size = 32, icon_mipmaps = 2, scale = 0.5, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_warning_red", - filename = "__factoryplanner__/graphics/warning_red.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_trash_red", - filename = "__factoryplanner__/graphics/trash_red.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_archive_dark", - filename = "__factoryplanner__/graphics/archive_dark.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_up", - filename = "__factoryplanner__/graphics/arrow_up.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_down", - filename = "__factoryplanner__/graphics/arrow_down.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_line_up", - filename = "__factoryplanner__/graphics/arrow_line_up_dark.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_line_bar_up", - filename = "__factoryplanner__/graphics/arrow_line_bar_up_dark.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_left_light", - filename = "__factoryplanner__/graphics/arrow_left_light.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_right_light", - filename = "__factoryplanner__/graphics/arrow_right_light.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_left_dark", - filename = "__factoryplanner__/graphics/arrow_left_dark.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - }, - { - type = "sprite", - name = "fp_sprite_arrow_right_dark", - filename = "__factoryplanner__/graphics/arrow_right_dark.png", - size = 32, icon_mipmaps = 2, - flags = {"gui-icon"} - } -}) diff --git a/factoryplanner_1.1.72/prototypes/styles.lua b/factoryplanner_1.1.72/prototypes/styles.lua deleted file mode 100644 index 3255fcaa..00000000 --- a/factoryplanner_1.1.72/prototypes/styles.lua +++ /dev/null @@ -1,366 +0,0 @@ ----@diagnostic disable - -local styles = data.raw["gui-style"].default - --- Nomenclature: small = size 36; tiny = size 32 - --- Imitates a listbox, but allowing for way more customisation by using real buttons -styles["fp_scroll-pane_fake_listbox"] = { - type = "scroll_pane_style", - parent = "scroll_pane_with_dark_background_under_subheader", - extra_right_padding_when_activated = -12, - background_graphical_set = { -- rubber grid - position = {282,17}, - corner_size = 8, - overall_tiling_vertical_size = 22, - overall_tiling_vertical_spacing = 6, - overall_tiling_vertical_padding = 4, - overall_tiling_horizontal_padding = 4 - }, - vertically_stretchable = "on", - padding = 0, - vertical_flow_style = { - type = "vertical_flow_style", - vertical_spacing = 0 - } -} - -styles["fp_scroll-pane_slot_table"] = { - type = "scroll_pane_style", - parent = "filter_scroll_pane", - bottom_margin = 0, - bottom_padding = 0, - extra_bottom_padding_when_activated = 0, - graphical_set = - { - base = {position = {85, 0}, corner_size = 8, draw_type = "outer"}, - shadow = default_inner_shadow - } -} - -styles["fp_flow_horizontal_centered"] = { - type = "horizontal_flow_style", - vertical_align = "center", - horizontal_spacing = 16 -} - -styles["fp_frame_slot_table"] = { - type = "frame_style", - parent = "filter_frame", - top_padding = 4, - bottom_padding = 12, - graphical_set = util.table.deepcopy(styles.filter_frame.graphical_set) -} -styles["fp_frame_slot_table"].graphical_set.base.bottom = nil - --- Intended for buttons of size 36 -styles["fp_frame_deep_slots_small"] = { - type = "frame_style", - parent = "slot_button_deep_frame", - background_graphical_set = { - position = {282, 17}, - corner_size = 8, - overall_tiling_vertical_size = 28, - overall_tiling_vertical_spacing = 8, - overall_tiling_vertical_padding = 4, - overall_tiling_horizontal_size = 28, - overall_tiling_horizontal_spacing = 8, - overall_tiling_horizontal_padding = 4 - } -} - --- Intended for buttons of size 64hx73w -styles["fp_frame_deep_slots_crafting_groups"] = { - type = "frame_style", - parent = "slot_button_deep_frame", -- "crafting_frame" - background_graphical_set = { - position = {282, 17}, - corner_size = 8, - overall_tiling_vertical_size = 46, - overall_tiling_vertical_spacing = 18, - overall_tiling_vertical_padding = 9, - overall_tiling_horizontal_size = 53, - overall_tiling_horizontal_spacing = 20, - overall_tiling_horizontal_padding = 10 - } -} - -styles["fp_frame_bordered_stretch"] = { - type = "frame_style", - parent = "bordered_frame", - right_padding = 8, - horizontally_stretchable = "on" -} - -styles["fp_frame_module"] = { - type = "frame_style", - parent = "fp_frame_bordered_stretch", - padding = 8, - horizontal_flow_style = { - type = "horizontal_flow_style", - horizontal_spacing = 8, - vertical_align = "center" - } -} - -styles["fp_frame_semitransparent"] = { - type = "frame_style", - graphical_set = { - base = { - type = "composition", - filename = "__factoryplanner__/graphics/semitransparent_pixel.png", - corner_size = 1, - position = {0, 0} - } - } -} - -styles["fp_frame_transparent"] = { - type = "frame_style", - graphical_set = { - base = { - type = "composition", - filename = "__factoryplanner__/graphics/transparent_pixel.png", - corner_size = 1, - position = {0, 0} - } - } -} - -styles["fp_frame_messages"] = { - type = "frame_style", - parent = "subfooter_frame", - graphical_set = { - base = styles.subfooter_frame.graphical_set.base, - shadow = top_shadow, - }, - left_padding = 12, - bottom_padding = 4, - horizontally_stretchable = "on", -} - - -styles["fp_table_production"] = { - type = "table_style", - odd_row_graphical_set = { - - filename = "__core__/graphics/gui-new.png", - position = {472, 25}, - size = 1 - } -} - - --- This style is hacked together from rounded-button and textbox -styles["fp_sprite-button_inset"] = { - type = "button_style", - size = 40, - padding = 0, - default_graphical_set = styles.textbox.default_background, - hovered_graphical_set = styles.rounded_button.clicked_graphical_set, - clicked_graphical_set = styles.textbox.active_background, - disabled_graphical_set = styles.rounded_button.disabled_graphical_set -} - -styles["fp_sprite-button_inset_tiny"] = { - type = "button_style", - parent = "fp_sprite-button_inset", - size = 32 -} - -styles["fp_sprite-button_inset_add"] = { - type = "button_style", - parent = "fp_sprite-button_inset_tiny", - padding = 5 -- makes it so the plus doesn't look so stupid -} - -styles["fp_sprite-button_inset_add_slot"] = { - type = "button_style", - parent = "fp_sprite-button_inset_add", - margin = 4, -- used to offset the smaller size -} - -styles["fp_sprite-button_group_tab"] = { - type = "button_style", - parent = "filter_group_button_tab", - horizontally_stretchable = "on", - width = 0, -- allows stretching - height = 71, - disabled_graphical_set = styles.button.selected_graphical_set -} - -styles["fp_button_move_row"] = { - type = "button_style", - parent = "button", - size = 14, - padding = -1 -} - --- Text button in the style of icon tool buttons, for use in the title bar -styles["fp_button_frame_tool"] = { - type = "button_style", - parent = "frame_button", - font = "heading-2", - default_font_color = {0.9, 0.9, 0.9}, - minimal_width = 0, - height = 24, - right_padding = 8, - left_padding = 8, - selected_graphical_set = styles.frame_button.clicked_graphical_set, - selected_font_color = {}, -- black - selected_hovered_graphical_set = styles.frame_button.hovered_graphical_set, - selected_clicked_graphical_set = styles.frame_button.default_graphical_set, - selected_clicked_font_color = {0.9, 0.9, 0.9} -} - -styles["fp_button_rounded_mini"] = { - type = "button_style", - parent = "rounded_button", - height = 26, - minimal_width = 0, - left_padding = 4, - right_padding = 4 -} - -styles["fp_sprite-button_rounded_mini"] = { - type = "button_style", - parent = "rounded_button", - size = 26, - padding = 2, - selected_graphical_set = styles.rounded_button.clicked_graphical_set, - selected_hovered_graphical_set = styles.rounded_button.hovered_graphical_set, - selected_clicked_graphical_set = styles.rounded_button.default_graphical_set -} - --- Push-button style used for timescale and view_state buttons -styles["fp_button_push"] = { - type = "button_style", - parent = "button", - height = 26, - minimal_width = 0, - padding = 0 -} - --- A button that can be used in a fake listbox, but looks identical to the real thing -styles["fp_button_fake_listbox_item"] = { - type = "button_style", - parent = "list_box_item", - left_padding = 4, - right_padding = 8, - horizontally_stretchable = "on", - horizontally_squashable = "on", - selected_graphical_set = styles.button.selected_graphical_set, - selected_hovered_graphical_set = styles.button.selected_hovered_graphical_set, - selected_font_color = {}, -- black - default_vertical_offset = styles.button.selected_vertical_offset -} - --- Generate smaller versions of flib's slot buttons (size 36) -for _, color in pairs{"default", "grey", "red", "orange", "yellow", "green", "cyan", "blue", "purple", "pink"} do - styles["flib_slot_button_" .. color .. "_small"] = { - type = "button_style", - parent = "flib_slot_button_" .. color, - size = 36 - } -end - -styles["flib_slot_button_grayscale_small"] = { - type = "button_style", - parent = "flib_slot_button_default_small", - draw_grayscale_picture = true -} - -styles["flib_slot_button_transparent"] = { - type = "button_style", - parent = "flib_slot_button_default", - default_graphical_set = {}, - disabled_graphical_set = {}, - padding = 4 -} - -styles["flib_slot_button_transparent_small"] = { - type = "button_style", - parent = "flib_slot_button_transparent", - size = 36 -} - -styles["flib_slot_button_transparent_grayscale_small"] = { - type = "button_style", - parent = "flib_slot_button_transparent_small", - draw_grayscale_picture = true -} - - -styles["fp_label_module_error"] = { - type = "label_style", - font = "heading-2", - padding = 2 -} - - -styles["fp_slider_module"] = { - type = "slider_style", - parent = "notched_slider", - width = 130, - top_margin = 0, - right_margin = 6, - bottom_margin = 0, - left_margin = 6, -} - --- default_dirt is a global from __core__/prototypes/style.lua -local thin_slider_shadow = util.merge{default_dirt, {top_outer_border_shift = 4, bottom_outer_border_shift = -4}} -styles["fp_slider_module_none"] = { - type = "slider_style", - parent = "fp_slider_module", - notch = { - -- redirect it a bit to the right into transparent space - base = {position = {142, 200}, size = {4, 16}}, - }, - full_bar = { - base = { - left = {position = {56, 72}, size = {8, 8}}, - right = {position = {65, 72}, size = {8, 8}}, - center = {position = {64, 72}, size = {1, 8}}, - left_top = {position = {112, 200}, size = {8, 8}}, - top = {position = {142, 200}, size = {1, 8}}, - right_top = {position = {112, 200}, size = {8, 8}}, - left_bottom = {position = {112, 200}, size = {8, 8}}, - bottom = {position = {142, 200}, size = {1, 8}}, - right_bottom = {position = {112, 200}, size = {8, 8}}, - }, - shadow = thin_slider_shadow - }, - full_bar_disabled = { - base = { - left = {position = {56, 80}, size = {8, 8}}, - right = {position = {65, 80}, size = {8, 8}}, - center = {position = {65, 80}, size = {1, 8}}, - left_top = {position = {112, 200}, size = {8, 8}}, - top = {position = {142, 200}, size = {1, 8}}, - right_top = {position = {112, 200}, size = {8, 8}}, - left_bottom = {position = {112, 200}, size = {8, 8}}, - bottom = {position = {142, 200}, size = {1, 8}}, - right_bottom = {position = {112, 200}, size = {8, 8}}, - }, - shadow = thin_slider_shadow - }, - button = { - type = "button_style", - width = 12, - height = 17, - padding = 0, - default_graphical_set = { - base = {position = {142, 200}, size = {1, 1}}, - }, - hovered_graphical_set = { - base = {position = {142, 200}, size = {1, 1}}, - }, - clicked_graphical_set = { - base = {position = {142, 200}, size = {1, 1}}, - }, - disabled_graphical_set = { - base = {position = {142, 200}, size = {1, 1}}, - }, - } -} diff --git a/factoryplanner_1.1.72/prototypes/tools.lua b/factoryplanner_1.1.72/prototypes/tools.lua deleted file mode 100644 index 50aed1fe..00000000 --- a/factoryplanner_1.1.72/prototypes/tools.lua +++ /dev/null @@ -1,28 +0,0 @@ ----@diagnostic disable - -local beacon_selector = { - type = "selection-tool", - name = "fp_beacon_selector", - icon = "__factoryplanner__/graphics/beacon_selector.png", - icon_size = 32, - flags = {"hidden", "only-in-cursor"}, - subgroup = "other", - order = "z_fp1", - stack_size = 1, - selection_color = { r = 0.75, g = 0, b = 0.75 }, - alt_selection_color = { r = 0.75, g = 0, b = 0.75 }, - selection_mode = {"entity-with-health"}, - alt_selection_mode = {"nothing"}, - selection_cursor_box_type = "entity", - alt_selection_cursor_box_type = "entity", - entity_filter_mode = "whitelist", - entity_type_filters = {"beacon"} -} - -local cursor_blueprint = util.table.deepcopy(data.raw["blueprint"]["blueprint"]) -cursor_blueprint.name = "fp_cursor_blueprint" -cursor_blueprint.order = "z_fp2" -table.insert(cursor_blueprint.flags, "hidden") -table.insert(cursor_blueprint.flags, "only-in-cursor") - -data:extend{beacon_selector, cursor_blueprint} diff --git a/factoryplanner_1.1.72/settings.lua b/factoryplanner_1.1.72/settings.lua deleted file mode 100644 index c340961f..00000000 --- a/factoryplanner_1.1.72/settings.lua +++ /dev/null @@ -1,57 +0,0 @@ ----@diagnostic disable - -data:extend({ - { - type = "bool-setting", - name = "fp_display_gui_button", - setting_type = "runtime-per-user", - default_value = true, - order = "a" - }, - { - type = "int-setting", - name = "fp_products_per_row", - setting_type = "runtime-per-user", - default_value = 7, - allowed_values = {5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, - order = "b" - }, - { - type = "int-setting", - name = "fp_subfactory_list_rows", - setting_type = "runtime-per-user", - default_value = 24, - allowed_values = {14, 16, 18, 20, 22, 24, 26, 28, 30, 32}, - order = "c" - }, - { - type = "string-setting", - name = "fp_default_timescale", - setting_type = "runtime-per-user", - default_value = "one_minute", - allowed_values = {"one_second", "one_minute", "one_hour"}, - order = "d" - }, - { - type = "string-setting", - name = "fp_view_belts_or_lanes", - setting_type = "runtime-per-user", - default_value = "belts", - allowed_values = {"belts", "lanes"}, - order = "e" - }, - { - type = "bool-setting", - name = "fp_prefer_product_picker", - setting_type = "runtime-per-user", - default_value = false, - order = "f" - }, - { - type = "bool-setting", - name = "fp_prefer_matrix_solver", - setting_type = "runtime-per-user", - default_value = false, - order = "g" - }, -}) diff --git a/factoryplanner_1.1.72/thumbnail.png b/factoryplanner_1.1.72/thumbnail.png deleted file mode 100644 index f138de90..00000000 Binary files a/factoryplanner_1.1.72/thumbnail.png and /dev/null differ diff --git a/factoryplanner_1.1.72/ui/base/compact_dialog.lua b/factoryplanner_1.1.72/ui/base/compact_dialog.lua deleted file mode 100644 index 9ba0d4da..00000000 --- a/factoryplanner_1.1.72/ui/base/compact_dialog.lua +++ /dev/null @@ -1,665 +0,0 @@ -require("ui.base.view_state") - --- The main GUI parts for the compact dialog --- ** LOCAL UTIL ** -local function determine_available_columns(lines, frame_width) - local frame_border_size = 12 - local table_padding, table_spacing = 8, 12 - local recipe_and_check_width = 58 - local button_width, button_spacing = 36, 4 - - local max_module_count = 0 - for _, line in pairs(lines) do - if line.subfloor == nil then - local module_kinds = ModuleSet.get_module_kind_amount(line.machine.module_set) - max_module_count = math.max(max_module_count, module_kinds) - end - if line.beacon ~= nil then - local module_kinds = ModuleSet.get_module_kind_amount(line.beacon.module_set) - max_module_count = math.max(max_module_count, module_kinds) - end - end - - local used_width = 0 - used_width = used_width + (frame_border_size * 2) -- border on both sides - used_width = used_width + (table_padding * 2) -- padding on both sides - used_width = used_width + (table_spacing * 4) -- 5 columns -> 4 spaces - used_width = used_width + recipe_and_check_width -- constant - -- Add up machines button, module buttons, and spacing for them - used_width = used_width + button_width + (max_module_count * button_width) + (max_module_count * button_spacing) - - -- Calculate the remaining width and divide by the amount a button takes up - local available_columns = (frame_width - used_width + button_spacing) / (button_width + button_spacing) - return math.floor(available_columns) -- amount is floored as to not cause a horizontal scrollbar -end - -local function determine_table_height(lines, column_counts) - local total_height = 0 - for _, line in pairs(lines) do - local items_height = 0 - for column, count in pairs(column_counts) do - local column_height = math.ceil(line[column].count / count) - items_height = math.max(items_height, column_height) - end - - local machines_height = (line.beacon ~= nil) and 2 or 1 - total_height = total_height + math.max(machines_height, items_height) - end - return total_height -end - -local function determine_column_counts(lines, available_columns) - local column_counts = {Ingredient = 1, Product = 1, Byproduct = 0} -- ordered by priority - available_columns = available_columns - 2 -- two buttons are already assigned - - local previous_height, increment = math.huge, 1 - while available_columns > 0 do - local table_heights, minimal_height = {}, math.huge - - for column, count in pairs(column_counts) do - local potential_column_counts = fancytable.shallow_copy(column_counts) - potential_column_counts[column] = count + increment - local new_height = determine_table_height(lines, potential_column_counts) - table_heights[column] = new_height - minimal_height = math.min(minimal_height, new_height) - end - - -- If increasing any column by 1 doesn't change the height, try incrementing by more - -- until height is decreased, or no columns are available anymore - if not (minimal_height < previous_height) and increment < available_columns then - increment = increment + 1 - else - for column, height in pairs(table_heights) do - if available_columns > 0 and height == minimal_height then - column_counts[column] = column_counts[column] + 1 - available_columns = available_columns - 1 - break - end - end - - previous_height, increment = minimal_height, 1 -- reset these - end - end - - return column_counts -end - - -local function add_checkmark_button(parent_flow, line, relevant_line) - parent_flow.add{type="checkbox", state=relevant_line.done, mouse_button_filter={"left"}, - tags={mod="fp", on_gui_checked_state_changed="checkmark_compact_line", line_id=line.id}} -end - -local function add_recipe_button(parent_flow, line, relevant_line, metadata) - local recipe_proto = relevant_line.recipe.proto - local style = (line.subfloor ~= nil) and "flib_slot_button_blue_small" or "flib_slot_button_default_small" - style = (relevant_line.done) and "flib_slot_button_grayscale_small" or style - local tooltip = (line.subfloor == nil) and {"fp.tt_title", recipe_proto.localised_name} - or {"", {"fp.tt_title", recipe_proto.localised_name}, metadata.recipe_tutorial_tt} - - parent_flow.add{type="sprite-button", tags={mod="fp", on_gui_click="act_on_compact_recipe", line_id=line.id}, - sprite=recipe_proto.sprite, tooltip=tooltip, style=style, mouse_button_filter={"left-and-right"}} -end - -local function add_modules_flow(parent_flow, parent_type, line, metadata) - for _, module in ipairs(ModuleSet.get_in_order(line[parent_type].module_set)) do - local number_line = {"", "\n", module.amount, " ", {"fp.pl_module", module.amount}} - local tooltip = {"", {"fp.tt_title", module.proto.localised_name}, number_line, metadata.module_tutorial_tt} - local style = (line.done) and "flib_slot_button_grayscale_small" or "flib_slot_button_default_small" - - parent_flow.add{type="sprite-button", sprite=module.proto.sprite, tooltip=tooltip, - tags={mod="fp", on_gui_click="act_on_compact_module", line_id=line.id, module_id=module.id, - parent_type=parent_type}, number=module.amount, style=style, mouse_button_filter={"left-and-right"}} - end -end - -local function add_machine_flow(parent_flow, line, metadata) - if line.subfloor == nil then - local machine_flow = parent_flow.add{type="flow", direction="horizontal"} - local machine_proto = line.machine.proto - - local count, tooltip_line = util.format.machine_count(line.machine.count, (line.production_ratio > 0), true) - local tooltip = {"", {"fp.tt_title", machine_proto.localised_name}, "\n", tooltip_line, - metadata.machine_tutorial_tt} - local style = (line.done) and "flib_slot_button_grayscale_small" or "flib_slot_button_default_small" - - machine_flow.add{type="sprite-button", sprite=machine_proto.sprite, number=count, - tooltip=tooltip, tags={mod="fp", on_gui_click="act_on_compact_machine", type="machine", line_id=line.id}, - style=style, mouse_button_filter={"left-and-right"}} - - add_modules_flow(machine_flow, "machine", line, metadata) - end -end - -local function add_beacon_flow(parent_flow, line, metadata) - if line.subfloor == nil and line.beacon ~= nil then - local beacon_flow = parent_flow.add{type="flow", direction="horizontal"} - local beacon_proto = line.beacon.proto - - local plural_parameter = (line.beacon.amount == 1) and 1 or 2 -- needed because the amount can be decimal - local number_line = {"", "\n", line.beacon.amount, " ", {"fp.pl_beacon", plural_parameter}} - local tooltip = {"", {"fp.tt_title", beacon_proto.localised_name}, number_line, metadata.beacon_tutorial_tt} - local style = (line.done) and "flib_slot_button_grayscale_small" or "flib_slot_button_default_small" - - beacon_flow.add{type="sprite-button", sprite=beacon_proto.sprite, number=line.beacon.amount, - tooltip=tooltip, tags={mod="fp", on_gui_click="act_on_compact_beacon", type="beacon", line_id=line.id}, - style=style, mouse_button_filter={"left-and-right"}} - - add_modules_flow(beacon_flow, "beacon", line, metadata) - end -end - - -local function add_item_flow(line, relevant_line, item_class, button_color, metadata, item_buttons) - local column_count = metadata.column_counts[item_class] - if column_count == 0 then metadata.parent.add{type="empty-widget"}; return end - local item_table = metadata.parent.add{type="table", column_count=column_count} - - for _, item in ipairs(Line.get_in_order(line, item_class)) do - local proto, type = item.proto, item.proto.type - -- items/s/machine does not make sense for lines with subfloors, show items/s instead - local machine_count = (not line.subfloor) and line.machine.count or nil - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, item, nil, machine_count) - if amount == -1 then goto skip_item end -- an amount of -1 means it was below the margin of error - - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tooltip = {"", {"fp.tt_title", proto.localised_name}, number_line, metadata.item_tutorial_tt} - local style, enabled = "flib_slot_button_" .. button_color .. "_small", true - if relevant_line.done then style = "flib_slot_button_grayscale_small" end - - if type == "entity" then - style = (relevant_line.done) and "flib_slot_button_transparent_grayscale_small" - or "flib_slot_button_transparent_small" - enabled = false - tooltip = {"", {"fp.tt_title_with_note", proto.localised_name, {"fp.raw_ore"}}, number_line} - end - - local button = item_table.add{type="sprite-button", sprite=proto.sprite, number=amount, tooltip=tooltip, - tags={mod="fp", on_gui_click="act_on_compact_item", on_gui_hover="hover_compact_item", - on_gui_leave="leave_compact_item", line_id=line.id, class=item.class, item_id=item.id}, - style=style, enabled=enabled, mouse_button_filter={"left-and-right"}} - - button.raise_hover_events = true - item_buttons[type] = item_buttons[type] or {} - item_buttons[type][proto.name] = item_buttons[type][proto.name] or {} - table.insert(item_buttons[type][proto.name], {button=button, proper_style=style}) - - ::skip_item:: - end - - if item_class == "Ingredient" and not line.subfloor and line.machine.fuel then - local fuel, machine_count = line.machine.fuel, line.machine.count - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, fuel, nil, machine_count) - if amount == -1 then goto skip_fuel end -- an amount of -1 means it was below the margin of error - - local name_line = {"fp.tt_title_with_note", fuel.proto.localised_name, {"fp.pl_fuel", 1}} - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tooltip = {"", name_line, number_line, metadata.item_tutorial_tt} - local style = (relevant_line.done) and "flib_slot_button_grayscale_small" or "flib_slot_button_cyan_small" - - item_table.add{type="sprite-button", sprite=fuel.proto.sprite, style=style, number=amount, - tags={mod="fp", on_gui_click="act_on_compact_item", line_id=line.id, class="Fuel"}, - tooltip=tooltip, mouse_button_filter={"left-and-right"}} - - ::skip_fuel:: - end -end - - -local function refresh_compact_subfactory(player) - local player_table = util.globals.player_table(player) - local compact_elements = player_table.ui_state.compact_elements - local context = player_table.ui_state.context - local subfactory = context.subfactory - if not subfactory or not subfactory.valid then return end - - local current_level = subfactory.selected_floor.level - local lines = Floor.get_in_order(context.floor, "Line") - - util.raise.refresh(player, "view_state", compact_elements.view_state_table) - - local attach_subfactory_products = player_table.preferences.attach_subfactory_products - compact_elements.name_label.caption = Subfactory.tostring(subfactory, attach_subfactory_products, true) - - compact_elements.level_label.caption = {"fp.bold_label", {"", "- ", {"fp.level"}, " ", current_level}} - compact_elements.floor_up_button.enabled = (current_level > 1) - compact_elements.floor_top_button.enabled = (current_level > 1) - - local production_table = compact_elements.production_table - production_table.clear() - - -- Available columns for items only, as recipe and machines can't be 'compressed' - local frame_width = compact_elements.compact_frame.style.maximal_width - local available_columns = determine_available_columns(lines, frame_width) - if available_columns < 2 then available_columns = 2 end -- fix for too many modules or too high of a GUI scale - local column_counts = determine_column_counts(lines, available_columns) - - local metadata = { - parent = production_table, - column_counts = column_counts, - view_state_metadata = view_state.generate_metadata(player, subfactory) - } - - compact_elements.item_buttons = {} -- (re)set the item_buttons table - local item_buttons = compact_elements.item_buttons - - if util.globals.preferences(player).tutorial_mode then - util.actions.tutorial_tooltip_list(metadata, player, { - recipe_tutorial_tt = "act_on_compact_recipe", - module_tutorial_tt = "act_on_compact_module", - machine_tutorial_tt = "act_on_compact_machine", - beacon_tutorial_tt = "act_on_compact_beacon", - item_tutorial_tt = "act_on_compact_item", - }) - end - - for _, line in ipairs(lines) do -- build the individual lines - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - if not relevant_line.active then goto skip_line end - - -- Recipe and Checkmark - local recipe_flow = production_table.add{type="flow", direction="horizontal"} - recipe_flow.style.vertical_align = "center" - add_checkmark_button(recipe_flow, line, relevant_line) - add_recipe_button(recipe_flow, line, relevant_line, metadata) - - -- Machine and Beacon - local machines_flow = production_table.add{type="flow", direction="vertical"} - add_machine_flow(machines_flow, line, metadata) - add_beacon_flow(machines_flow, line, metadata) - - -- Products, Byproducts and Ingredients - add_item_flow(line, relevant_line, "Product", "default", metadata, item_buttons) - add_item_flow(line, relevant_line, "Byproduct", "red", metadata, item_buttons) - add_item_flow(line, relevant_line, "Ingredient", "green", metadata, item_buttons) - - production_table.add{type="empty-widget", style="flib_horizontal_pusher"} - - ::skip_line:: - end -end - -local function build_compact_subfactory(player) - local ui_state = util.globals.ui_state(player) - local compact_elements = ui_state.compact_elements - - -- Content frame - local content_frame = compact_elements.compact_frame.add{type="frame", direction="vertical", - style="inside_deep_frame"} - content_frame.style.vertically_stretchable = true - - local subheader = content_frame.add{type="frame", direction="vertical", style="subheader_frame"} - subheader.style.maximal_height = 100 -- large value to nullify maximal_height - - -- Flow view state - local flow_view_state = subheader.add{type="flow", direction="horizontal"} - flow_view_state.style.padding = {4, 4, 0, 0} - flow_view_state.add{type="empty-widget", style="flib_horizontal_pusher"} - - view_state.rebuild_state(player) -- initializes the view_state - util.raise.build(player, "view_state", flow_view_state) - compact_elements["view_state_table"] = flow_view_state["table_view_state"] - - subheader.add{type="line", direction="horizontal"} - - -- Flow navigation - local flow_navigation = subheader.add{type="flow", direction="horizontal"} - flow_navigation.style.vertical_align = "center" - flow_navigation.style.margin = {4, 8} - - local label_name = flow_navigation.add{type="label"} - label_name.style.font = "heading-2" - label_name.style.maximal_width = 260 - compact_elements["name_label"] = label_name - - local label_level = flow_navigation.add{type="label"} - label_level.style.margin = {0, 6, 0, 6} - compact_elements["level_label"] = label_level - - local button_floor_up = flow_navigation.add{type="sprite-button", sprite="fp_sprite_arrow_line_up", - tooltip={"fp.floor_up_tt"}, tags={mod="fp", on_gui_click="change_compact_floor", destination="up"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - compact_elements["floor_up_button"] = button_floor_up - - local button_floor_top = flow_navigation.add{type="sprite-button", sprite="fp_sprite_arrow_line_bar_up", - tooltip={"fp.floor_top_tt"}, tags={mod="fp", on_gui_click="change_compact_floor", destination="top"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - compact_elements["floor_top_button"] = button_floor_top - - -- Production table - local scroll_pane_production = content_frame.add{type="scroll-pane", direction="vertical", - style="flib_naked_scroll_pane_no_padding"} - scroll_pane_production.style.horizontally_stretchable = true - - local table_production = scroll_pane_production.add{type="table", column_count=6, style="fp_table_production"} - table_production.vertical_centering = false - table_production.style.horizontal_spacing = 12 - table_production.style.vertical_spacing = 8 - table_production.style.padding = {4, 8} - compact_elements["production_table"] = table_production - - refresh_compact_subfactory(player) -end - - -local function handle_recipe_click(player, tags, action) - local context = util.globals.context(player) - local line = Floor.get(context.floor, "Line", tags.line_id) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - local recipe = relevant_line.recipe - - if action == "open_subfloor" then - if line.subfloor then - util.context.set_floor(player, line.subfloor) - refresh_compact_subfactory(player) - end - - elseif action == "recipebook" then - util.open_in_recipebook(player, "recipe", recipe.proto.name) - end -end - -local function handle_module_click(player, tags, action) - local context = util.globals.context(player) - local line = Floor.get(context.floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - local parent_entity = line[tags.parent_type] - local module = ModuleSet.get(parent_entity.module_set, tags.module_id) - - if action == "recipebook" then - util.open_in_recipebook(player, "item", module.proto.name) - end -end - -local function handle_machine_click(player, tags, action) - local context = util.globals.context(player) - local line = Floor.get(context.floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - - if action == "put_into_cursor" then - util.cursor.set_entity(player, line, line.machine) - - elseif action == "recipebook" then - util.open_in_recipebook(player, "entity", line.machine.proto.name) - end -end - -local function handle_beacon_click(player, tags, action) - local context = util.globals.context(player) - local line = Floor.get(context.floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - - if action == "put_into_cursor" then - util.cursor.set_entity(player, line, line.beacon) - - elseif action == "recipebook" then - util.open_in_recipebook(player, "entity", line.beacon.proto.name) - end -end - -local function handle_item_click(player, tags, action) - local context = util.globals.context(player) - local line = Floor.get(context.floor, "Line", tags.line_id) - local item = (tags.class == "Fuel") and line.machine.fuel or Line.get(line, tags.class, tags.item_id) - - if action == "put_into_cursor" then - util.cursor.add_to_item_combinator(player, item.proto, item.amount) - - elseif action == "recipebook" then - util.open_in_recipebook(player, item.proto.type, item.proto.name) - end -end - -local function handle_hover_change(player, tags, event) - local ui_state = util.globals.ui_state(player) - local line = Floor.get(ui_state.context.floor, "Line", tags.line_id) - local proto = Line.get(line, tags.class, tags.item_id).proto - - local relevant_buttons = ui_state.compact_elements.item_buttons[proto.type][proto.name] - for _, button_data in pairs(relevant_buttons) do - button_data.button.style = (event.name == defines.events.on_gui_hover) - and "flib_slot_button_pink_small" or button_data.proper_style - end -end - - --- ** EVENTS ** -local subfactory_listeners = {} - -subfactory_listeners.gui = { - on_gui_click = { - { - name = "change_compact_floor", - handler = (function(player, tags, _) - local floor_changed = util.context.change_floor(player, tags.destination) - if floor_changed then refresh_compact_subfactory(player) end - end) - }, - { - name = "act_on_compact_recipe", - modifier_actions = { - open_subfloor = {"left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_recipe_click - }, - { - name = "act_on_compact_module", - modifier_actions = { - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_module_click - }, - { - name = "act_on_compact_machine", - modifier_actions = { - put_into_cursor = {"left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_machine_click - }, - { - name = "act_on_compact_beacon", - modifier_actions = { - put_into_cursor = {"left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_beacon_click - }, - { - name = "act_on_compact_item", - modifier_actions = { - put_into_cursor = {"left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_click - } - }, - on_gui_checked_state_changed = { - { - name = "checkmark_compact_line", - handler = (function(player, tags, _) - local line = Floor.get(util.globals.context(player).floor, "Line", tags.line_id) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - relevant_line.done = not relevant_line.done - refresh_compact_subfactory(player) - end) - } - }, - on_gui_hover = { - { - name = "hover_compact_item", - handler = handle_hover_change - } - }, - on_gui_leave = { - { - name = "leave_compact_item", - handler = handle_hover_change - } - } -} - -subfactory_listeners.misc = { - build_gui_element = (function(player, event) - if event.trigger == "compact_subfactory" then - build_compact_subfactory(player) - end - end), - refresh_gui_element = (function(player, event) - if event.trigger == "compact_subfactory" then - refresh_compact_subfactory(player) - end - end) -} - - - --- The frame surrounding the main part of the compact subfactory -local frame_dimensions = {width = 0.25, height = 0.8} -- as a percentage of the screen -local frame_location = {x = 10, y = 63} -- absolute, relative to 1080p with scale 1 - --- ** LOCAL UTIL ** --- Set frame dimensions in a relative way, taking player resolution and scaling into account -local function set_compact_frame_dimensions(player, frame) - local resolution, scale = player.display_resolution, player.display_scale - local actual_resolution = {width=math.ceil(resolution.width / scale), height=math.ceil(resolution.height / scale)} - frame.style.width = actual_resolution.width * frame_dimensions.width - frame.style.maximal_height = actual_resolution.height * frame_dimensions.height -end - -local function set_compact_frame_location(player, frame) - local scale = player.display_scale - frame.location = {frame_location.x * scale, frame_location.y * scale} -end - -local function rebuild_compact_dialog(player, default_visibility) - local ui_state = util.globals.ui_state(player) - local compact_elements = ui_state.compact_elements - - local interface_visible = default_visibility - local compact_frame = compact_elements.compact_frame - -- Delete the existing interface if there is one - if compact_frame ~= nil then - if compact_frame.valid then - interface_visible = compact_frame.visible - compact_frame.destroy() - end - - ui_state.compact_elements = {} -- reset all compact element references - compact_elements = ui_state.compact_elements - end - - local frame_compact_dialog = player.gui.screen.add{type="frame", direction="vertical", - visible=interface_visible, name="fp_frame_compact_dialog"} - set_compact_frame_location(player, frame_compact_dialog) - set_compact_frame_dimensions(player, frame_compact_dialog) - compact_elements["compact_frame"] = frame_compact_dialog - - -- Title bar - local flow_title_bar = frame_compact_dialog.add{type="flow", direction="horizontal", - tags={mod="fp", on_gui_click="place_compact_dialog"}} - flow_title_bar.style.horizontal_spacing = 8 - flow_title_bar.drag_target = frame_compact_dialog - - flow_title_bar.add{type="label", caption={"mod-name.factoryplanner"}, style="frame_title", - ignored_by_interaction=true} - flow_title_bar.add{type="empty-widget", style="flib_titlebar_drag_handle", - ignored_by_interaction=true} - - local button_switch = flow_title_bar.add{type="sprite-button", style="frame_action_button", - tags={mod="fp", on_gui_click="switch_to_main_view"}, tooltip={"fp.switch_to_main_view"}, - sprite="fp_sprite_arrow_right_light", hovered_sprite="fp_sprite_arrow_right_dark", - clicked_sprite="fp_sprite_arrow_right_dark", mouse_button_filter={"left"}} - button_switch.style.padding = 2 - - local button_close = flow_title_bar.add{type="sprite-button", tags={mod="fp", on_gui_click="close_compact_dialog"}, - sprite="utility/close_white", hovered_sprite="utility/close_black", clicked_sprite="utility/close_black", - tooltip={"fp.close_interface"}, style="frame_action_button", mouse_button_filter={"left"}} - button_close.style.padding = 1 - - util.raise.build(player, "compact_subfactory", nil) - - return frame_compact_dialog -end - - --- ** TOP LEVEL ** -compact_dialog = {} - -function compact_dialog.toggle(player) - local ui_state = util.globals.ui_state(player) - local frame_compact_dialog = ui_state.compact_elements.compact_frame - -- Doesn't set player.opened so other GUIs like the inventory can be opened when building - - if frame_compact_dialog == nil or not frame_compact_dialog.valid then - rebuild_compact_dialog(player, true) -- refreshes on its own - else - local new_dialog_visibility = not frame_compact_dialog.visible - frame_compact_dialog.visible = new_dialog_visibility - - if new_dialog_visibility then refresh_compact_subfactory(player) end - end -end - -function compact_dialog.is_in_focus(player) - local frame_compact_dialog = util.globals.ui_state(player).compact_elements.compact_frame - return (frame_compact_dialog ~= nil and frame_compact_dialog.valid and frame_compact_dialog.visible) -end - - --- ** EVENTS ** -local dialog_listeners = {} - -dialog_listeners.gui = { - on_gui_click = { - { - name = "switch_to_main_view", - handler = (function(player, _, _) - util.globals.flags(player).compact_view = false - compact_dialog.toggle(player) - - main_dialog.toggle(player) - util.raise.refresh(player, "production", nil) - end) - }, - { - name = "close_compact_dialog", - handler = (function(player, _, _) - compact_dialog.toggle(player) - end) - }, - { - name = "place_compact_dialog", - handler = (function(player, _, event) - if event.button == defines.mouse_button_type.middle then - local ui_state = util.globals.ui_state(player) - local frame_compact_dialog = ui_state.compact_elements.compact_frame - set_compact_frame_location(player, frame_compact_dialog) - end - end) - } - } -} - -dialog_listeners.misc = { - on_player_display_resolution_changed = (function(player, _) - rebuild_compact_dialog(player, false) - end), - - on_player_display_scale_changed = (function(player, _) - rebuild_compact_dialog(player, false) - end), - - on_lua_shortcut = (function(player, event) - if event.prototype_name == "fp_open_interface" and util.globals.flags(player).compact_view then - compact_dialog.toggle(player) - end - end), - - fp_toggle_interface = (function(player, _) - if util.globals.flags(player).compact_view then compact_dialog.toggle(player) end - end) -} - -return { subfactory_listeners, dialog_listeners } diff --git a/factoryplanner_1.1.72/ui/base/main_dialog.lua b/factoryplanner_1.1.72/ui/base/main_dialog.lua deleted file mode 100644 index fb770593..00000000 --- a/factoryplanner_1.1.72/ui/base/main_dialog.lua +++ /dev/null @@ -1,258 +0,0 @@ -require("ui.main.subfactory_list") -require("ui.base.view_state") - -main_dialog = {} - --- Accepts custom width and height parameters so dimensions can be tried out without needing to change actual settings -local function determine_main_dimensions(player, products_per_row, subfactory_list_rows) - local settings = util.globals.settings(player) - products_per_row = products_per_row or settings.products_per_row - subfactory_list_rows = subfactory_list_rows or settings.subfactory_list_rows - local frame_spacing = MAGIC_NUMBERS.frame_spacing - - -- Width of the larger ingredients-box, which has twice the buttons per row - local boxes_width_1 = (products_per_row * 2 * MAGIC_NUMBERS.item_button_size) + (2 * frame_spacing) - -- Width of the two smaller product+byproduct-boxes - local boxes_width_2 = 2 * ((products_per_row * MAGIC_NUMBERS.item_button_size) + (2 * frame_spacing)) - local width = MAGIC_NUMBERS.list_width + boxes_width_1 + boxes_width_2 + ((2+3) * frame_spacing) - - local subfactory_list_height = (subfactory_list_rows * MAGIC_NUMBERS.list_element_height) - + MAGIC_NUMBERS.subheader_height - local height = MAGIC_NUMBERS.title_bar_height + subfactory_list_height + MAGIC_NUMBERS.info_height - + ((2+1) * frame_spacing) - - return {width=width, height=height} -end - --- Downscale width and height mod settings until the main interface fits onto the player's screen -function main_dialog.shrinkwrap_interface(player) - local resolution, scale = player.display_resolution, player.display_scale - local actual_resolution = {width=math.ceil(resolution.width / scale), height=math.ceil(resolution.height / scale)} - - local mod_settings = util.globals.settings(player) - local products_per_row = mod_settings.products_per_row - local subfactory_list_rows = mod_settings.subfactory_list_rows - - local function dimensions() return determine_main_dimensions(player, products_per_row, subfactory_list_rows) end - - while (actual_resolution.width * 0.95) < dimensions().width do - products_per_row = products_per_row - 1 - end - while (actual_resolution.height * 0.95) < dimensions().height do - subfactory_list_rows = subfactory_list_rows - 2 - end - - local setting_prototypes = game.mod_setting_prototypes - local width_minimum = setting_prototypes["fp_products_per_row"].allowed_values[1] --[[@as number]] - local height_minimum = setting_prototypes["fp_subfactory_list_rows"].allowed_values[1] --[[@as number]] - - local live_settings = settings.get_player_settings(player) - live_settings["fp_products_per_row"] = {value = math.max(products_per_row, width_minimum)} - live_settings["fp_subfactory_list_rows"] = {value = math.max(subfactory_list_rows, height_minimum)} -end - - -local function interface_toggle(metadata) - local player = game.get_player(metadata.player_index) - local compact_view = util.globals.flags(player).compact_view - if compact_view then compact_dialog.toggle(player) - else main_dialog.toggle(player) end -end - - -function main_dialog.rebuild(player, default_visibility) - local ui_state = util.globals.ui_state(player) - local main_elements = ui_state.main_elements - - local interface_visible = default_visibility - local main_frame = main_elements.main_frame - -- Delete the existing interface if there is one - if main_frame ~= nil then - if main_frame.valid then - interface_visible = main_frame.visible - main_frame.destroy() - end - - ui_state.main_elements = {} -- reset all main element references - main_elements = ui_state.main_elements - end - - -- Create and configure the top-level frame - local frame_main_dialog = player.gui.screen.add{type="frame", direction="vertical", - visible=interface_visible, tags={mod="fp", on_gui_closed="close_main_dialog"}, - name="fp_frame_main_dialog"} - main_elements["main_frame"] = frame_main_dialog - - local dimensions = determine_main_dimensions(player) - ui_state.main_dialog_dimensions = dimensions - frame_main_dialog.style.size = dimensions - util.gui.properly_center_frame(player, frame_main_dialog, dimensions) - - - -- Create the actual dialog structure - local frame_spacing = MAGIC_NUMBERS.frame_spacing - main_elements.flows = {} - - local top_horizontal = frame_main_dialog.add{type="flow", direction="horizontal"} - main_elements.flows["top_horizontal"] = top_horizontal - - local main_horizontal = frame_main_dialog.add{type="flow", direction="horizontal"} - main_horizontal.style.horizontal_spacing = frame_spacing - main_elements.flows["main_horizontal"] = main_horizontal - - local left_vertical = main_horizontal.add{type="flow", direction="vertical"} - left_vertical.style.vertical_spacing = frame_spacing - main_elements.flows["left_vertical"] = left_vertical - - local right_vertical = main_horizontal.add{type="flow", direction="vertical"} - right_vertical.style.vertical_spacing = frame_spacing - main_elements.flows["right_vertical"] = right_vertical - - view_state.rebuild_state(player) -- initializes the view_state - util.raise.build(player, "main_dialog", nil) -- tells all elements to build themselves - - if interface_visible then player.opened = frame_main_dialog end - main_dialog.set_pause_state(player, frame_main_dialog) -end - -function main_dialog.toggle(player, skip_opened) - local ui_state = util.globals.ui_state(player) - local frame_main_dialog = ui_state.main_elements.main_frame - - if frame_main_dialog == nil or not frame_main_dialog.valid then - main_dialog.rebuild(player, true) -- sets opened and paused-state itself - - elseif ui_state.modal_dialog_type == nil then -- don't toggle if modal dialog is open - local new_dialog_visibility = not frame_main_dialog.visible - frame_main_dialog.visible = new_dialog_visibility - if not skip_opened then -- flag used only for hacky internal reasons - player.opened = (new_dialog_visibility) and frame_main_dialog or nil - end - - main_dialog.set_pause_state(player, frame_main_dialog) - - -- Make sure FP is not behind some vanilla interfaces - if new_dialog_visibility then frame_main_dialog.bring_to_front() end - end -end - - --- Returns true when the main dialog is open while no modal dialogs are -function main_dialog.is_in_focus(player) - local frame_main_dialog = util.globals.main_elements(player).main_frame - return (frame_main_dialog ~= nil and frame_main_dialog.valid and frame_main_dialog.visible - and util.globals.ui_state(player).modal_dialog_type == nil) -end - --- Sets the game.paused-state as is appropriate -function main_dialog.set_pause_state(player, frame_main_dialog, force_false) - -- Don't touch paused-state if this is a multiplayer session or the editor is active - if game.is_multiplayer() or player.controller_type == defines.controllers.editor then return end - - game.tick_paused = (util.globals.preferences(player).pause_on_interface and not force_false) - and frame_main_dialog.visible or false -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_closed = { - { - name = "close_main_dialog", - handler = (function(player, _, _) - main_dialog.toggle(player) - end) - } - }, - on_gui_click = { - { - name = "mod_gui_toggle_interface", - handler = (function(player, _, _) - if DEV_ACTIVE then -- implicit mod reload for easier development - util.gui.reset_player(player) -- destroys all FP GUIs - util.gui.toggle_mod_gui(player) -- fixes the mod gui button after its been destroyed - game.reload_mods() -- toggle needs to be delayed by a tick since the reload is not instant - game.print("Mods reloaded") - util.nth_tick.register((game.tick + 1), "interface_toggle", {player_index=player.index}) - else -- call the interface toggle function directly - interface_toggle({player_index=player.index}) - end - end) - } - } -} - -listeners.misc = { - -- Makes sure that another GUI can open properly while a modal dialog is open. - -- The FP interface can have at most 3 layers of GUI: main interface, modal dialog, selection mode. - -- We need to make sure opening the technology screen (for example) from any of those layers behaves properly. - -- We need to consider that if the technology screen is opened (which is the reason we get this event), - -- the game automtically closes the currently open GUI before calling this one. This means the top layer - -- that's open at that stage is closed already when we get here. So we're at most at the modal dialog - -- layer at this point and need to close the things below, if there are any. - on_gui_opened = (function(player, _) - local ui_state = util.globals.ui_state(player) - - -- With that in mind, if there's a modal dialog open, we were in selection mode, and need to close the dialog - if ui_state.modal_dialog_type ~= nil then util.raise.close_dialog(player, "cancel", true) end - - -- Then, at this point we're at most at the stage where the main dialog is open, so close it - if main_dialog.is_in_focus(player) then main_dialog.toggle(player, true) end - end), - - on_player_display_resolution_changed = (function(player, _) - main_dialog.shrinkwrap_interface(player) - main_dialog.rebuild(player, false) - end), - - on_player_display_scale_changed = (function(player, _) - main_dialog.shrinkwrap_interface(player) - main_dialog.rebuild(player, false) - end), - - on_lua_shortcut = (function(player, event) - if event.prototype_name == "fp_open_interface" and not util.globals.flags(player).compact_view then - main_dialog.toggle(player) - end - end), - - fp_toggle_interface = (function(player, _) - if not util.globals.flags(player).compact_view then main_dialog.toggle(player) end - end), - - -- This needs to be in a single place, otherwise the events cancel each other out - fp_toggle_compact_view = (function(player, _) - local ui_state = util.globals.ui_state(player) - local flags = ui_state.flags - local subfactory = ui_state.context.subfactory - - local main_focus = main_dialog.is_in_focus(player) - local compact_focus = compact_dialog.is_in_focus(player) - - -- Open the compact view if this toggle is pressed when neither dialog - -- is open as that makes the most sense from a user perspective - if not main_focus and not compact_focus then - flags.compact_view = true - compact_dialog.toggle(player) - - elseif flags.compact_view and compact_focus then - compact_dialog.toggle(player) - main_dialog.toggle(player) - util.raise.refresh(player, "production", nil) - flags.compact_view = false - - elseif main_focus and subfactory ~= nil and subfactory.valid then - main_dialog.toggle(player) - compact_dialog.toggle(player) -- toggle also refreshes - flags.compact_view = true - end - end) -} - -listeners.global = { - interface_toggle = interface_toggle -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/base/modal_dialog.lua b/factoryplanner_1.1.72/ui/base/modal_dialog.lua deleted file mode 100644 index 2cee2ecd..00000000 --- a/factoryplanner_1.1.72/ui/base/modal_dialog.lua +++ /dev/null @@ -1,372 +0,0 @@ -modal_dialog = {} - ----@alias ModalDialogType string - ----@class ModalData: table - --- ** LOCAL UTIL ** -local function create_base_modal_dialog(player, dialog_settings, modal_data) - local modal_elements = modal_data.modal_elements - - local frame_modal_dialog = player.gui.screen.add{type="frame", direction="vertical", - tags={mod="fp", on_gui_closed="close_modal_dialog"}} - frame_modal_dialog.style.minimal_width = 240 - modal_elements.modal_frame = frame_modal_dialog - - -- Title bar - if dialog_settings.caption ~= nil then - local flow_title_bar = frame_modal_dialog.add{type="flow", direction="horizontal", - tags={mod="fp", on_gui_click="re-center_modal_dialog"}} - flow_title_bar.drag_target = frame_modal_dialog - flow_title_bar.add{type="label", caption=dialog_settings.caption, style="frame_title", - ignored_by_interaction=true} - - flow_title_bar.add{type="empty-widget", style="flib_titlebar_drag_handle", ignored_by_interaction=true} - - if dialog_settings.search_handler_name then -- add a search field if requested - modal_data.search_handler_name = dialog_settings.search_handler_name - modal_data.next_search_tick = nil -- used for rate limited search - - local searchfield = flow_title_bar.add{type="textfield", style="search_popup_textfield", - tags={mod="fp", on_gui_text_changed="modal_searchfield"}} - searchfield.style.width = 140 - searchfield.style.top_margin = -3 - util.gui.setup_textfield(searchfield) - modal_elements.search_textfield = searchfield - modal_dialog.set_searchfield_state(player) - - local search_button = flow_title_bar.add{type="sprite-button", tooltip={"fp.search_button_tt"}, - tags={mod="fp", on_gui_click="focus_modal_searchfield"}, sprite="utility/search_white", - hovered_sprite="utility/search_black", clicked_sprite="utility/search_black", - style="frame_action_button", mouse_button_filter={"left"}} - search_button.style.left_margin = 4 - end - - if not dialog_settings.show_submit_button then -- add X-to-close button if this is not a submit dialog - local close_button = flow_title_bar.add{type="sprite-button", tooltip={"fp.close_button_tt"}, - tags={mod="fp", on_gui_click="close_modal_dialog", action="cancel"}, sprite="utility/close_white", - hovered_sprite="utility/close_black", clicked_sprite="utility/close_black", style="frame_action_button", - mouse_button_filter={"left"}} - close_button.style.left_margin = 4 - close_button.style.padding = 1 - end - end - - -- Content frame - local main_content_element = nil - if dialog_settings.create_content_frame then - local content_frame = frame_modal_dialog.add{type="frame", direction="vertical", style="inside_shallow_frame"} - content_frame.style.vertically_stretchable = true - - if dialog_settings.subheader_text then - local subheader = content_frame.add{type="frame", direction="horizontal", style="subheader_frame"} - subheader.style.horizontally_stretchable = true - subheader.style.padding = {12, 24, 12, 12} - local label = subheader.add{type="label", caption=dialog_settings.subheader_text, - tooltip=dialog_settings.subheader_tooltip} - label.style.font = "default-semibold" - end - - local scroll_pane = content_frame.add{type="scroll-pane", direction="vertical", style="flib_naked_scroll_pane"} - if dialog_settings.disable_scroll_pane then scroll_pane.vertical_scroll_policy = "never" end - - modal_elements.content_frame = scroll_pane - main_content_element = scroll_pane - - else -- if no content frame is created, simply add a flow that the dialog can add to instead - local flow = frame_modal_dialog.add{type="flow", direction="vertical"} - modal_elements.dialog_flow = flow - main_content_element = flow - end - - -- Set the maximum height of the main content element - local dialog_max_height = (util.globals.ui_state(player).main_dialog_dimensions.height - 80) * 0.95 - modal_data.dialog_maximal_height = dialog_max_height - main_content_element.style.maximal_height = dialog_max_height - - if dialog_settings.show_submit_button then -- if there is a submit button, there should be a button bar - -- Button bar - local button_bar = frame_modal_dialog.add{type="flow", direction="horizontal", - style="dialog_buttons_horizontal_flow"} - button_bar.style.horizontal_spacing = 0 - - -- Cancel button - local button_cancel = button_bar.add{type="button", tags={mod="fp", on_gui_click="close_modal_dialog", - action="cancel"}, style="back_button", caption={"fp.cancel"}, tooltip={"fp.cancel_dialog_tt"}, - mouse_button_filter={"left"}} - button_cancel.style.minimal_width = 0 - button_cancel.style.padding = {1, 12, 0, 12} - - -- Delete button and spacers - if dialog_settings.show_delete_button then - local left_drag_handle = button_bar.add{type="empty-widget", style="flib_dialog_footer_drag_handle"} - left_drag_handle.drag_target = frame_modal_dialog - - local button_delete = button_bar.add{type="button", caption={"fp.delete"}, style="red_button", - tags={mod="fp", on_gui_click="close_modal_dialog", action="delete"}, mouse_button_filter={"left"}} - button_delete.style.font = "default-dialog-button" - button_delete.style.height = 32 - button_delete.style.minimal_width = 0 - button_delete.style.padding = {0, 8} - - -- If there is a delete button present, we need to set a minimum dialog width for it to look good - frame_modal_dialog.style.minimal_width = 340 - end - - -- One 'drag handle' should always be visible - local right_drag_handle = button_bar.add{type="empty-widget", style="flib_dialog_footer_drag_handle"} - right_drag_handle.drag_target = frame_modal_dialog - - -- Submit button - local button_submit = button_bar.add{type="button", tags={mod="fp", on_gui_click="close_modal_dialog", - action="submit"}, caption={"fp.submit"}, tooltip={"fp.confirm_dialog_tt"}, style="confirm_button", - mouse_button_filter={"left"}} - button_submit.style.minimal_width = 0 - button_submit.style.padding = {1, 8, 0, 12} - modal_elements.dialog_submit_button = button_submit - end - - return frame_modal_dialog -end - -local function run_delayed_modal_search(metadata) - local player = game.get_player(metadata.player_index) - local modal_data = util.globals.modal_data(player) - if not modal_data or not modal_data.modal_elements then return end - - local searchfield = modal_data.modal_elements.search_textfield - local search_term = searchfield.text:gsub("^%s*(.-)%s*$", "%1"):lower() - GLOBAL_HANDLERS[modal_data.search_handler_name](player, search_term) -end - - --- ** TOP LEVEL ** --- Opens a barebone modal dialog and calls upon the given function to populate it -function modal_dialog.enter(player, metadata, dialog_open, early_abort_check) - local ui_state = util.globals.ui_state(player) - - if ui_state.modal_dialog_type ~= nil then - -- If a dialog is currently open, and this one wants to be queued, do so - if metadata.allow_queueing then ui_state.queued_dialog_metadata = metadata end - return - end - - ui_state.modal_data = metadata.modal_data or {} - - if early_abort_check ~= nil and early_abort_check(player, ui_state.modal_data) then -- abort early if need be - --ui_state.modal_data = nil -- this should be reset, but that breaks the stupid queueing stuff ......... - return - end - - ui_state.modal_dialog_type = metadata.dialog - ui_state.modal_data.modal_elements = {} - ui_state.modal_data.confirmed_dialog = false - - -- Create interface_dimmer first so the layering works out correctly - local interface_dimmer = player.gui.screen.add{type="frame", style="fp_frame_semitransparent", - tags={mod="fp", on_gui_click="re-layer_interface_dimmer"}, visible=(not metadata.skip_dimmer)} - interface_dimmer.style.size = ui_state.main_dialog_dimensions - interface_dimmer.location = ui_state.main_elements.main_frame.location - ui_state.modal_data.modal_elements.interface_dimmer = interface_dimmer - - -- Create modal dialog framework and let the dialog itself fill it out - local frame_modal_dialog = create_base_modal_dialog(player, metadata, ui_state.modal_data) - dialog_open(player, ui_state.modal_data) - player.opened = frame_modal_dialog - frame_modal_dialog.force_auto_center() -- seems to be necessary now, not sure why -end - --- Handles the closing process of a modal dialog, reopening the main dialog thereafter -function modal_dialog.exit(player, action, skip_opened, dialog_close) - local ui_state = util.globals.ui_state(player) -- dialog guaranteed to be open - - local modal_elements = ui_state.modal_data.modal_elements - local submit_button = modal_elements.dialog_submit_button - - -- Stop exiting if trying to submit while submission is disabled - if action == "submit" and (submit_button and not submit_button.enabled) then return end - - -- Call the closing function for this dialog, if it has one - if dialog_close ~= nil then dialog_close(player, action) end - - -- Unregister the delayed search handler if present - local search_tick = ui_state.modal_data.next_search_tick - if search_tick ~= nil then util.nth_tick.cancel(search_tick) end - - ui_state.modal_dialog_type = nil - ui_state.modal_data = nil - - modal_elements.interface_dimmer.destroy() - modal_elements.modal_frame.destroy() - ui_state.modal_elements = nil - - if not skip_opened then player.opened = ui_state.main_elements.main_frame end - - if ui_state.queued_dialog_metadata ~= nil then - util.raise.open_dialog(player, ui_state.queued_dialog_metadata) - ui_state.queued_dialog_metadata = nil - end -end - - -function modal_dialog.set_searchfield_state(player) - local player_table = util.globals.player_table(player) - if not player_table.ui_state.modal_dialog_type then return end - local searchfield = player_table.ui_state.modal_data.modal_elements.search_textfield - if not searchfield then return end - - local status = (player_table.translation_tables ~= nil) - searchfield.enabled = status -- disables on nil and false - searchfield.tooltip = (status) and {"fp.searchfield_tt"} or {"fp.warning_with_icon", {"fp.searchfield_not_ready_tt"}} -end - -function modal_dialog.set_submit_button_state(modal_elements, enabled, message) - local caption = (enabled) and {"fp.submit"} or {"fp.warning_with_icon", {"fp.submit"}} - local tooltip = (enabled) and {"fp.confirm_dialog_tt"} or {"fp.warning_with_icon", message} - - local button = modal_elements.dialog_submit_button - button.style.left_padding = (enabled) and 12 or 6 - button.enabled = enabled - button.caption = caption - button.tooltip = tooltip -end - - -function modal_dialog.enter_selection_mode(player, selector_name) - local ui_state = util.globals.ui_state(player) - ui_state.flags.selection_mode = true - player.cursor_stack.set_stack(selector_name) - - local frame_main_dialog = ui_state.main_elements.main_frame - frame_main_dialog.visible = false - main_dialog.set_pause_state(player, frame_main_dialog, true) - - local modal_elements = ui_state.modal_data.modal_elements - modal_elements.interface_dimmer.visible = false - - modal_elements.modal_frame.ignored_by_interaction = true - modal_elements.modal_frame.location = {25, 50} -end - -function modal_dialog.leave_selection_mode(player) - local ui_state = util.globals.ui_state(player) - ui_state.flags.selection_mode = false - player.cursor_stack.set_stack(nil) - - local modal_elements = ui_state.modal_data.modal_elements - modal_elements.interface_dimmer.visible = true - - -- player.opened needs to be set because on_gui_closed sets it to nil - player.opened = modal_elements.modal_frame - modal_elements.modal_frame.ignored_by_interaction = false - modal_elements.modal_frame.force_auto_center() - - local frame_main_dialog = ui_state.main_elements.main_frame - frame_main_dialog.visible = true - - main_dialog.set_pause_state(player, frame_main_dialog) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "re-layer_interface_dimmer", - handler = (function(player, _, _) - util.globals.modal_elements(player).modal_frame.bring_to_front() - end) - }, - { - name = "re-center_modal_dialog", - handler = (function(player, _, event) - if event.button == defines.mouse_button_type.middle then - local modal_elements = util.globals.modal_elements(player) - modal_elements.modal_frame.force_auto_center() - end - end) - }, - { - name = "close_modal_dialog", - handler = (function(player, tags, _) - util.raise.close_dialog(player, tags.action) - end) - }, - { - name = "focus_modal_searchfield", - handler = (function(player, _, _) - util.gui.select_all(util.globals.modal_elements(player).search_textfield) - end) - } - }, - on_gui_text_changed = { - { - name = "modal_searchfield", - timeout = MAGIC_NUMBERS.modal_search_rate_limit, - handler = (function(player, _, metadata) - local modal_data = util.globals.modal_data(player) - local search_tick = modal_data.search_tick - if search_tick ~= nil then util.nth_tick.cancel(search_tick) end - - local search_term = metadata.text:gsub("^%s*(.-)%s*$", "%1"):lower() - GLOBAL_HANDLERS[modal_data.search_handler_name](player, search_term) - - -- Set up delayed search update to circumvent issues caused by rate limiting - local desired_tick = game.tick + MAGIC_NUMBERS.modal_search_rate_limit - modal_data.next_search_tick = util.nth_tick.register(desired_tick, - "run_delayed_modal_search", {player_index=player.index}) - end) - } - }, - on_gui_closed = { - { - name = "close_modal_dialog", - handler = (function(player, _, event) - local ui_state = util.globals.ui_state(player) - - if ui_state.flags.selection_mode then - modal_dialog.leave_selection_mode(player) - else - -- Here, we need to distinguish between submitting a dialog with E or ESC - util.raise.close_dialog(player, (ui_state.modal_data.confirmed_dialog) and "submit" or "cancel") - -- If the dialog was not closed, it means submission was disabled, and we need to re-set .opened - if event.element.valid then player.opened = event.element end - end - - -- Reset .confirmed_dialog if this event didn't actually lead to the dialog closing - if event.element.valid then ui_state.modal_data.confirmed_dialog = false end - end) - } - } -} - -listeners.misc = { - fp_confirm_dialog = (function(player, _) - if not util.globals.flags(player).selection_mode then - util.raise.close_dialog(player, "submit") - end - end), - - fp_confirm_gui = (function(player, _) - -- Note that a GUI was closed by confirming, so it'll try submitting on_gui_closed - local modal_data = util.globals.modal_data(player) - if modal_data ~= nil then modal_data.confirmed_dialog = true end - end), - - fp_focus_searchfield = (function(player, _) - local ui_state = util.globals.ui_state(player) - - if ui_state.modal_dialog_type ~= nil then - local textfield_search = ui_state.modal_data.modal_elements.search_textfield - if textfield_search then util.gui.select_all(textfield_search) end - end - end) -} - -listeners.global = { - run_delayed_modal_search = run_delayed_modal_search -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/base/view_state.lua b/factoryplanner_1.1.72/ui/base/view_state.lua deleted file mode 100644 index 5958d6ac..00000000 --- a/factoryplanner_1.1.72/ui/base/view_state.lua +++ /dev/null @@ -1,276 +0,0 @@ --- This contains both the UI handling for view states, as well as the amount conversions - -local timescale_map = {[1] = "second", [60] = "minute", [3600] = "hour"} - ----@class ViewStates: table - --- ** LOCAL UTIL ** -local function cycle_views(player, direction) - local ui_state = util.globals.ui_state(player) - - if ui_state.view_states and main_dialog.is_in_focus(player) or compact_dialog.is_in_focus(player) then - local selected_view_id, view_state_count = ui_state.view_states.selected_view_id, #ui_state.view_states - local new_view_id = nil -- need to make sure this is wrapped properly in either direction - if direction == "standard" then - new_view_id = (selected_view_id == view_state_count) and 1 or (selected_view_id + 1) - else -- direction == "reverse" - new_view_id = (selected_view_id == 1) and view_state_count or (selected_view_id - 1) - end - view_state.select(player, new_view_id) - - local compact_view = util.globals.flags(player).compact_view - local refresh = (compact_view) and "compact_subfactory" or "production" - util.raise.refresh(player, refresh, nil) - - -- This avoids the game focusing a random textfield when pressing Tab to change states - local main_frame = ui_state.main_elements.main_frame - if main_frame ~= nil then main_frame.focus() end - end -end - - -local processors = {} -- individual functions for each kind of view state -function processors.items_per_timescale(metadata, raw_amount, item_proto, _) - local number = util.format.number(raw_amount, metadata.formatting_precision) - - local plural_parameter = (number == "1") and 1 or 2 - local type_string = (item_proto.type == "fluid") and {"fp.l_fluid"} or {"fp.pl_item", plural_parameter} - local tooltip = {"", number, " ", type_string, "/", metadata.timescale_string} - - return number, tooltip -end - -function processors.belts_or_lanes(metadata, raw_amount, item_proto, _) - if item_proto.type == "entity" then return nil, nil end -- raw ores don't make sense here - - local divisor = (item_proto.type == "fluid") and 50 or 1 - local raw_number = raw_amount * metadata.throughput_multiplier * metadata.timescale_inverse / divisor - local number = util.format.number(raw_number, metadata.formatting_precision) - - local plural_parameter = (number == "1") and 1 or 2 - local tooltip = {"", number, " ", {"fp.pl_" .. metadata.belt_or_lane, plural_parameter}} - - local return_number = (metadata.round_button_numbers) and math.ceil(raw_number - 0.001) or number - return return_number, tooltip -end - -function processors.wagons_per_timescale(metadata, raw_amount, item_proto, _) - if item_proto.type == "entity" then return nil, nil end -- raw ores don't make sense here - - local wagon_capacity = (item_proto.type == "fluid") and metadata.fluid_wagon_capacity - or metadata.cargo_wagon_capactiy * item_proto.stack_size - local wagon_count = raw_amount / wagon_capacity - local number = util.format.number(wagon_count, metadata.formatting_precision) - - local plural_parameter = (number == "1") and 1 or 2 - local tooltip = {"", number, " ", {"fp.pl_wagon", plural_parameter}, "/", metadata.timescale_string} - - return number, tooltip -end - -function processors.items_per_second_per_machine(metadata, raw_amount, item_proto, machine_count) - if machine_count == 0 then return 0, "" end -- avoid division by zero - if item_proto.type == "entity" then return nil, nil end -- raw ores don't make sense here - - local raw_number = raw_amount * metadata.timescale_inverse / (math.ceil((machine_count or 1) - 0.001)) - local number = util.format.number(raw_number, metadata.formatting_precision) - - local plural_parameter = (number == "1") and 1 or 2 - local type_string = (item_proto.type == "fluid") and {"fp.l_fluid"} or {"fp.pl_item", plural_parameter} - -- If machine_count is nil, this shouldn't show /machine - local per_machine = (machine_count ~= nil) and {"", "/", {"fp.pl_machine", 1}} or "" - local tooltip = {"", number, " ", type_string, "/", {"fp.second"}, per_machine} - - return number, tooltip -end - - -local function refresh_view_state(player, table_view_state) - local ui_state = util.globals.ui_state(player) - - -- Automatically detects a timescale change and refreshes the state if necessary - local subfactory = ui_state.context.subfactory - if not subfactory then - return - elseif subfactory.current_timescale ~= ui_state.view_states.timescale then - view_state.rebuild_state(player) - end - - for _, view_button in ipairs(table_view_state.children) do - local view_state = ui_state.view_states[view_button.tags.view_id] - view_button.caption = view_state.caption - view_button.tooltip = view_state.tooltip - view_button.toggled = (view_state.selected) - end -end - - -local function build_view_state(player, parent_element) - local view_states = util.globals.ui_state(player).view_states - - local table_view_state = parent_element.add{type="table", name="table_view_state", column_count=#view_states} - table_view_state.style.horizontal_spacing = 0 - - -- Using ipairs is important as we only want to iterate the array-part - for view_id, _ in ipairs(view_states) do - local button = table_view_state.add{type="button", style="fp_button_push", mouse_button_filter={"left"}, - tags={mod="fp", on_gui_click="change_view_state", view_id=view_id}} - button.style.padding = {0, 12} - end -end - - --- ** TOP LEVEL ** -view_state = {} - --- Creates metadata relevant for a whole batch of items -function view_state.generate_metadata(player, subfactory) - local player_table = util.globals.player_table(player) - - local view_states = player_table.ui_state.view_states - local current_view_name = view_states[view_states.selected_view_id].name - local belts_or_lanes = player_table.settings.belts_or_lanes - local round_button_numbers = player_table.preferences.round_button_numbers - local throughput = prototyper.defaults.get(player, "belts").throughput - local throughput_divisor = (belts_or_lanes == "belts") and throughput or (throughput / 2) - local default_cargo_wagon = prototyper.defaults.get(player, "wagons", PROTOTYPE_MAPS.wagons["cargo-wagon"].id) - local default_fluid_wagon = prototyper.defaults.get(player, "wagons", PROTOTYPE_MAPS.wagons["fluid-wagon"].id) - - return { - processor = processors[current_view_name], - timescale_inverse = 1 / subfactory.timescale, - timescale_string = {"fp." .. timescale_map[subfactory.timescale]}, - adjusted_margin_of_error = MAGIC_NUMBERS.margin_of_error * subfactory.timescale, - belt_or_lane = belts_or_lanes:sub(1, -2), - round_button_numbers = round_button_numbers, - throughput_multiplier = 1 / throughput_divisor, - formatting_precision = 4, - cargo_wagon_capactiy = default_cargo_wagon.storage, - fluid_wagon_capacity = default_fluid_wagon.storage - } -end - -function view_state.process_item(metadata, item, item_amount, machine_count) - local raw_amount = item_amount or item.amount - if raw_amount == nil or (raw_amount ~= 0 and raw_amount < metadata.adjusted_margin_of_error) then - return -1, nil - end - - return metadata.processor(metadata, raw_amount, item.proto, machine_count) -end - - -function view_state.rebuild_state(player) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - - -- If no subfactory exists yet, choose a default timescale so the UI can build properly - local timescale = (subfactory) and timescale_map[subfactory.timescale] or "second" - local singular_bol = util.globals.settings(player).belts_or_lanes:sub(1, -2) - local belt_proto = prototyper.defaults.get(player, "belts") - local default_cargo_wagon = prototyper.defaults.get(player, "wagons", PROTOTYPE_MAPS.wagons["cargo-wagon"].id) - local default_fluid_wagon = prototyper.defaults.get(player, "wagons", PROTOTYPE_MAPS.wagons["fluid-wagon"].id) - - local new_view_states = { - [1] = { - name = "items_per_timescale", - caption = {"", {"fp.pu_item", 2}, "/", {"fp.unit_" .. timescale}}, - tooltip = {"fp.view_state_tt", {"fp.items_per_timescale", {"fp." .. timescale}}} - }, - [2] = { - name = "belts_or_lanes", - caption = {"", belt_proto.rich_text, " ", {"fp.pu_" .. singular_bol, 2}}, - tooltip = {"fp.view_state_tt", {"fp.belts_or_lanes", {"fp.pl_" .. singular_bol, 2}, - belt_proto.rich_text, belt_proto.localised_name}} - }, - [3] = { - name = "wagons_per_timescale", - caption = {"", {"fp.pu_wagon", 2}, "/", {"fp.unit_" .. timescale}}, - tooltip = {"fp.view_state_tt", {"fp.wagons_per_timescale", {"fp." .. timescale}, - default_cargo_wagon.rich_text, default_cargo_wagon.localised_name, - default_fluid_wagon.rich_text, default_fluid_wagon.localised_name}} - }, - [4] = { - name = "items_per_second_per_machine", - caption = {"", {"fp.pu_item", 2}, "/", {"fp.unit_second"}, "/[img=fp_generic_assembler]"}, - tooltip = {"fp.view_state_tt", {"fp.items_per_second_per_machine"}} - }, - selected_view_id = nil, -- set below - timescale = timescale -- conserve the timescale to rebuild the state - } - - -- Conserve the previous view selection if possible - local old_view_states = ui_state.view_states - local selected_view_id = (old_view_states) and old_view_states.selected_view_id or "items_per_timescale" - - ui_state.view_states = new_view_states - view_state.select(player, selected_view_id) -end - -function view_state.select(player, selected_view) - local view_states = util.globals.ui_state(player).view_states - - -- Selected view can be either an id or a name, so we might need to match an id to a name - local selected_view_id = selected_view - if type(selected_view) == "string" then - for view_id, view_state in ipairs(view_states) do - if view_state.name == selected_view then - selected_view_id = view_id - break - end - end - end - - -- Only run any code if the selected view did indeed change - if view_states.selected_view_id ~= selected_view_id then - for view_id, view_state in ipairs(view_states) do - if view_id == selected_view_id then - view_states.selected_view_id = selected_view_id - view_state.selected = true - else - view_state.selected = false - end - end - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "change_view_state", - handler = (function(player, tags, _) - view_state.select(player, tags.view_id) - - local compact_view = util.globals.flags(player).compact_view - local refresh = (compact_view) and "compact_subfactory" or "production" - util.raise.refresh(player, refresh, nil) - end) - } - } -} - -listeners.misc = { - fp_cycle_production_views = (function(player, _) - cycle_views(player, "standard") - end), - fp_reverse_cycle_production_views = (function(player, _) - cycle_views(player, "reverse") - end), - - build_gui_element = (function(player, event) - if event.trigger == "view_state" then - build_view_state(player, event.parent) - end - end), - refresh_gui_element = (function(player, event) - if event.trigger == "view_state" then - refresh_view_state(player, event.element) - end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/beacon_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/beacon_dialog.lua deleted file mode 100644 index f5b14b55..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/beacon_dialog.lua +++ /dev/null @@ -1,206 +0,0 @@ -require("ui.elements.module_configurator") - --- ** LOCAL UTIL ** -local function add_beacon_frame(parent_flow, modal_data) - local modal_elements = modal_data.modal_elements - local beacon = modal_data.object - - local flow_beacon = parent_flow.add{type="frame", style="fp_frame_module", direction="horizontal"} - - flow_beacon.add{type="label", caption={"fp.pu_beacon", 1}, style="heading_3_label"} - - local beacon_filter = {{filter="type", type="beacon"}, {filter="flag", flag="hidden", invert=true, mode="and"}} - local button_beacon = flow_beacon.add{type="choose-elem-button", elem_type="entity", entity=beacon.proto.name, - tags={mod="fp", on_gui_elem_changed="select_beacon"}, elem_filters=beacon_filter, - style="fp_sprite-button_inset_tiny"} - button_beacon.style.right_margin = 12 - modal_elements["beacon_button"] = button_beacon - - flow_beacon.add{type="label", caption={"fp.info_label", {"fp.amount"}}, tooltip={"fp.beacon_amount_tt"}, - style="heading_3_label"} - - local beacon_amount = (beacon.amount ~= 0) and tostring(beacon.amount) or "" - local textfield_amount = flow_beacon.add{type="textfield", text=beacon_amount, enabled=(not BEACON_OVERLOAD_ACTIVE), - tags={mod="fp", on_gui_text_changed="beacon_amount"}} - util.gui.setup_numeric_textfield(textfield_amount, true, false) - if not BEACON_OVERLOAD_ACTIVE then util.gui.select_all(textfield_amount) end - textfield_amount.style.width = 40 - textfield_amount.style.right_margin = 12 - modal_elements["beacon_amount"] = textfield_amount - - flow_beacon.add{type="label", caption={"fp.info_label", {"fp.beacon_total"}}, tooltip={"fp.beacon_total_tt"}, - style="heading_3_label"} - - local textfield_total = flow_beacon.add{type="textfield", name="fp_textfield_beacon_total_amount", - text=tostring(beacon.total_amount or "")} - util.gui.setup_numeric_textfield(textfield_total, true, false) - textfield_total.style.width = 40 - modal_elements["beacon_total"] = textfield_total - - local button_total = flow_beacon.add{type="sprite-button", tags={mod="fp", on_gui_click="use_beacon_selector"}, - tooltip={"fp.beacon_selector_tt"}, sprite="fp_zone_selection", style="button", mouse_button_filter={"left"}} - button_total.style.padding = 2 - button_total.style.size = 26 - button_total.style.top_margin = 1 -end - -local function update_dialog_submit_button(modal_data) - local beacon_amount = tonumber(modal_data.modal_elements.beacon_amount.text) - - local message = nil - if not beacon_amount or beacon_amount < 1 then - message = {"fp.beacon_issue_set_amount"} - elseif modal_data.module_set.module_count == 0 then - message = {"fp.beacon_issue_no_modules"} - end - modal_dialog.set_submit_button_state(modal_data.modal_elements, (message == nil), message) -end - -local function handle_beacon_change(player, _, _) - local modal_data = util.globals.modal_data(player) - local beacon_button = modal_data.modal_elements.beacon_button - local beacon = modal_data.object - - local previous_beacon_name = beacon.proto.name - if not beacon_button.elem_value then - beacon_button.elem_value = previous_beacon_name -- reset the beacon so it can't be nil - return -- nothing changed - elseif beacon_button.elem_value == previous_beacon_name then - return -- nothing changed - end - - -- Change the beacon to the new type - beacon.proto = prototyper.util.find_prototype("beacons", beacon_button.elem_value, nil) - ModuleSet.normalize(beacon.module_set, {compatibility=true, trim=true, effects=true}) - - module_configurator.refresh_modules_flow(player, false) -end - -local function handle_beacon_selection(player, entities) - local modal_elements = util.globals.modal_elements(player) - modal_elements.beacon_total.text = tostring(table_size(entities)) - modal_elements.beacon_total.focus() - - modal_dialog.leave_selection_mode(player) -end - - -local function open_beacon_dialog(player, modal_data) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", modal_data.floor_id) - local line = Floor.get(floor, "Line", modal_data.line_id) - modal_data.line = line - - if line.beacon ~= nil then - modal_data.backup_beacon = Beacon.clone(line.beacon) - modal_data.object = line.beacon - else - local beacon_proto = prototyper.defaults.get(player, "beacons") - local beacon_count = util.globals.preferences(player).mb_defaults.beacon_count - modal_data.object = Beacon.init(beacon_proto, beacon_count, nil, line) - Line.set_beacon(line, modal_data.object) - end - - if BEACON_OVERLOAD_ACTIVE then modal_data.object.amount = 1 end - modal_data.module_set = modal_data.object.module_set - - local content_frame = modal_data.modal_elements.content_frame - content_frame.style.minimal_width = 460 - - -- Beacon - add_beacon_frame(content_frame, modal_data) - update_dialog_submit_button(modal_data) - - -- Modules - modal_data.submit_checker = update_dialog_submit_button - module_configurator.add_modules_flow(content_frame, modal_data) - module_configurator.refresh_modules_flow(player, false) -end - -local function close_beacon_dialog(player, action) - local modal_data = util.globals.modal_data(player) - local subfactory = util.globals.context(player).subfactory - - if action == "submit" then - local beacon = modal_data.object - local total_amount = tonumber(modal_data.modal_elements.beacon_total.text) or 0 - beacon.total_amount = (total_amount > 0) and total_amount or nil - - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "delete" then - Line.set_beacon(modal_data.line, nil) - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - - else -- action == "cancel" - Line.set_beacon(modal_data.line, modal_data.backup_beacon) -- can write nil - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_elem_changed = { - { - name = "select_beacon", - handler = handle_beacon_change - } - }, - on_gui_text_changed = { - { - name = "beacon_amount", - handler = (function(player, _, _) - local modal_data = util.globals.modal_data(player) - modal_data.object.amount = tonumber(modal_data.modal_elements.beacon_amount.text) or 0 - ModuleSet.normalize(modal_data.object.module_set, {effects=true}) - module_configurator.refresh_effects_flow(modal_data) - update_dialog_submit_button(modal_data) - end) - } - }, - on_gui_click = { - { - name = "use_beacon_selector", - timeout = 20, - handler = (function(player, _, _) - modal_dialog.enter_selection_mode(player, "fp_beacon_selector") - end) - } - } -} - -listeners.dialog = { - dialog = "beacon", - metadata = (function(modal_data) - local action = (modal_data.edit) and "edit" or "add" - return { - caption = {"", {"fp." .. action}, " ", {"fp.pl_beacon", 1}}, - subheader_text = {("fp.beacon_dialog_description_" .. action), modal_data.machine_name}, - create_content_frame = true, - show_submit_button = true, - show_delete_button = (modal_data.edit) - } - end), - open = open_beacon_dialog, - close = close_beacon_dialog -} - -listeners.misc = { - on_player_cursor_stack_changed = (function(player, _) - -- If the cursor stack is not valid_for_read, it's empty, thus the selector has been put away - if util.globals.flags(player).selection_mode and not player.cursor_stack.valid_for_read then - modal_dialog.leave_selection_mode(player) - end - end), - on_player_selected_area = (function(player, event) - if event.item == "fp_beacon_selector" and util.globals.flags(player).selection_mode then - handle_beacon_selection(player, event.entities) - end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/generic_dialogs.lua b/factoryplanner_1.1.72/ui/dialogs/generic_dialogs.lua deleted file mode 100644 index f98328f5..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/generic_dialogs.lua +++ /dev/null @@ -1,227 +0,0 @@ --- This file contains general-purpose dialogs that are generic and used in several places --- Note: This system seems to have a problem, as references to functions stored in global --- break when reloading the game. In that case, just close the dialog without changes - --- ** CHOOSER ** -local function add_chooser_button(modal_elements, definition) - local style, note = "flib_slot_button_default", nil - - if definition.selected then - style = "flib_slot_button_green" - note = {"fp.selected"} - elseif definition.preferred then - style = "flib_slot_button_pink" - note = {"fp.preferred"} - end - - local first_line = (note == nil) and {"fp.tt_title", definition.localised_name} - or {"fp.tt_title_with_note", definition.localised_name, note} - local tooltip = {"", first_line, "\n", definition.amount_line, "\n\n", definition.tooltip_appendage} - - modal_elements.choices_table.add{type="sprite-button", style=style, tooltip=tooltip, - tags={mod="fp", on_gui_click="make_chooser_choice", element_id=definition.element_id}, - sprite=definition.sprite, number=definition.button_number, mouse_button_filter={"left"}} -end - -local function handler_chooser_button_click(player, tags, event) - local handler_name = util.globals.modal_data(player).click_handler_name - GLOBAL_HANDLERS[handler_name](player, tags.element_id, event) - - util.raise.close_dialog(player, "cancel") -end - --- Handles populating the chooser dialog -local function open_chooser_dialog(_, modal_data) - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - - local frame_choices = content_frame.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - modal_elements.choices_table = frame_choices.add{type="table", column_count=8, style="filter_slot_table"} - - for _, definition in ipairs(modal_data.button_definitions) do - add_chooser_button(modal_elements, definition) - end -end - - --- ** EVENTS ** -local chooser_listeners = {} - -chooser_listeners.gui = { - on_gui_click = { - { - name = "make_chooser_choice", -- great naming right there - timeout = 20, - handler = handler_chooser_button_click - } - } -} - -chooser_listeners.dialog = { - dialog = "chooser", - metadata = (function(modal_data) - local info_tag = (modal_data.text_tooltip) and "[img=info]" or "" - return { - caption = {"", {"fp.choose"}, " ", modal_data.title}, - subheader_text = {"", modal_data.text, " ", info_tag}, - subheader_tooltip = (modal_data.text_tooltip or ""), - create_content_frame = true - } - end), - open = open_chooser_dialog -} - - --- ** OPTIONS ** -local options_listeners = {} - --- ** LOCAL UTIL ** -local function call_change_handler(player, tags, event) - local modal_data = util.globals.modal_data(player) - local handler_name = modal_data.field_handlers[tags.field_name] - if handler_name then GLOBAL_HANDLERS[handler_name](modal_data, event) end -end - --- ** ELEMENTS ** -options_listeners.gui = {} -local elements = {} - --- ** TEXTFIELD ** -elements.textfield = {} - -function elements.textfield.create(table, field, modal_elements) - local textfield = table.add{type="textfield", text=field.text, - tags={mod="fp", on_gui_text_changed="change_option", field_name=field.name}} - textfield.style.width = (field.width or 180) - if field.focus then util.gui.select_all(textfield) end - - modal_elements[field.name] = textfield -end - -function elements.textfield.read(textfield) - return textfield.text -end - --- ** NUMERIC TEXTFIELD ** -elements.numeric_textfield = {} - -function elements.numeric_textfield.create(table, field, modal_elements) - local textfield = table.add{type="textfield", text=tostring(field.text or ""), - tags={mod="fp", on_gui_text_changed="change_option", field_name=field.name}} - textfield.style.width = (field.width or 75) - util.gui.setup_numeric_textfield(textfield, true, false) - if field.focus then util.gui.select_all(textfield) end - - modal_elements[field.name] = textfield -end - -function elements.numeric_textfield.read(textfield) - return tonumber(textfield.text) -end - --- ** TEXTFIELD EVENT ** -options_listeners.gui.on_gui_text_changed = { - { - name = "change_option", - handler = call_change_handler - } -} - --- ** ON OFF SWITCH ** -elements.on_off_switch = {} - -options_listeners.gui.on_gui_switch_state_changed = { - { - name = "change_option", - handler = call_change_handler - } -} - -function elements.on_off_switch.create(table, field, modal_elements) - local state = util.gui.switch.convert_to_state(field.state) - local switch = table.add{type="switch", switch_state=state, - tags={mod="fp", on_gui_switch_state_changed="change_option", field_name=field.name}, - left_label_caption={"fp.on"}, right_label_caption={"fp.off"}} - - modal_elements[field.name] = switch -end - -function elements.on_off_switch.read(switch) - return util.gui.switch.convert_to_boolean(switch.switch_state) -end - --- ** CHOOSE ELEM BUTTON ** -elements.choose_elem_button = {} - -options_listeners.gui.on_gui_elem_changed = { - { - name = "change_option", - handler = call_change_handler - } -} - -function elements.choose_elem_button.create(table, field, modal_elements) - local choose_elem_button = table.add{type="choose-elem-button", - tags={mod="fp", on_gui_elem_changed="change_option", field_name=field.name}, - elem_type=field.elem_type, style="fp_sprite-button_inset"} - choose_elem_button.elem_value = field.elem_value - - modal_elements[field.name] = choose_elem_button -end - -function elements.choose_elem_button.read(choose_elem_button) - return choose_elem_button.elem_value -end - - -local function open_options_dialog(_, modal_data) - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - - local table_options = content_frame.add{type="table", column_count=2} - table_options.style.margin = {0, 12, 8, 2} - table_options.style.horizontal_spacing = 24 - table_options.style.vertical_spacing = 16 - - modal_data.field_handlers = {} - for _, field in ipairs(modal_data.fields) do - local caption = (field.tooltip) and {"fp.info_label", field.caption} or field.caption - table_options.add{type="label", caption=caption, tooltip=field.tooltip, style="heading_3_label"} - - elements[field.type].create(table_options, field, modal_elements) - modal_data.field_handlers[field.name] = field.change_handler_name - end - - -- Call all the change handlers once to set the initial state correctly - for field_name, handler_name in pairs(modal_data.field_handlers) do - GLOBAL_HANDLERS[handler_name](modal_data, modal_elements[field_name]) - end -end - -local function close_options_dialog(player, action) - local modal_data = util.globals.modal_data(player) - - local options_data = {} - for _, field in pairs(modal_data.fields) do - local element = modal_data.modal_elements[field.name] - options_data[field.name] = elements[field.type].read(element) - end - - local handler_name = modal_data.submission_handler_name - GLOBAL_HANDLERS[handler_name](player, options_data, action) -end - -options_listeners.dialog = { - dialog = "options", - metadata = (function(modal_data) return { - caption = modal_data.title, - subheader_text = modal_data.text, - create_content_frame = true, - show_submit_button = true, - show_delete_button = modal_data.allow_deletion - } end), - open = open_options_dialog, - close = close_options_dialog -} - -return { chooser_listeners, options_listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/machine_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/machine_dialog.lua deleted file mode 100644 index 0e205948..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/machine_dialog.lua +++ /dev/null @@ -1,252 +0,0 @@ -require("ui.elements.module_configurator") - --- ** LOCAL UTIL ** -local function refresh_machine_frame(player) - local modal_data = util.globals.modal_data(player) - - local table_machine = modal_data.modal_elements.machine_table - table_machine.clear() - - local current_proto = modal_data.object.proto - for _, machine_proto in pairs(PROTOTYPE_MAPS.machines[current_proto.category].members) do - if Line.is_machine_applicable(modal_data.line, machine_proto) then - local attributes = prototyper.util.get_attributes(machine_proto) - local tooltip = {"", {"fp.tt_title", machine_proto.localised_name}, "\n", attributes} - - local selected = (machine_proto.id == current_proto.id) - local button_style = (selected) and "flib_slot_button_green" or "flib_slot_button_default" - - table_machine.add{type="sprite-button", sprite=machine_proto.sprite, tooltip=tooltip, - tags={mod="fp", on_gui_click="choose_machine", proto_id=machine_proto.id}, - style=button_style, mouse_button_filter={"left"}} - end - end -end - -local function refresh_fuel_frame(player) - local modal_data = util.globals.modal_data(player) - local machine = modal_data.object - - local modal_elements = modal_data.modal_elements - modal_elements.fuel_table.clear() - - local machine_burner = machine.proto.burner - modal_elements.fuel_table.visible = (machine_burner ~= nil) - modal_elements.fuel_info_label.visible = (machine_burner == nil) - - if machine_burner == nil then return end - local current_proto = machine.fuel.proto - - -- Applicable fuels come from all categories that this burner supports - for category_name, _ in pairs(machine_burner.categories) do - local category = PROTOTYPE_MAPS.fuels[category_name] - if category ~= nil then - for _, fuel_proto in pairs(category.members) do - local attributes = prototyper.util.get_attributes(fuel_proto) - local tooltip = {"", {"fp.tt_title", fuel_proto.localised_name}, "\n", attributes} - - local selected = (current_proto.category == fuel_proto.category and current_proto.id == fuel_proto.id) - local button_style = (selected) and "flib_slot_button_green" or "flib_slot_button_default" - - modal_elements.fuel_table.add{type="sprite-button", sprite=fuel_proto.sprite, - tags={mod="fp", on_gui_click="choose_fuel", proto_id=(category.id .. "_" .. fuel_proto.id)}, - tooltip=tooltip, style=button_style, mouse_button_filter={"left"}} - end - end - end -end - -local function refresh_limit_elements(player) - local modal_data = util.globals.modal_data(player) - local textfield = modal_data.modal_elements.limit_textfield - local switch = modal_data.modal_elements.force_limit_switch - - local machine = modal_data.object - textfield.text = tostring(machine.limit or "") - switch.switch_state = util.gui.switch.convert_to_state(machine.force_limit) - switch.enabled = (machine.limit ~= nil) -end - - -local function add_choices_frame(parent_frame, modal_elements, type) - local frame_choices = parent_frame.add{type="frame", direction="vertical", style="fp_frame_bordered_stretch"} - local table_choices = frame_choices.add{type="table", column_count=3} - table_choices.style.horizontal_spacing = 20 - table_choices.style.padding = {0, 0, -4, 0} - - table_choices.add{type="label", caption={"fp.pu_" .. type, 1}, style="heading_3_label"} - - local flow = table_choices.add{type="flow", direction="horizontal"} - local frame = flow.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - local table = frame.add{type="table", column_count=7, style="filter_slot_table"} - modal_elements[type .. "_table"] = table - - if type == "fuel" then - local label_info = flow.add{type="label", caption={"fp.machine_does_not_use_fuel"}} - label_info.style.padding = {10, -8} -- make sure spacing stays the same when no fuel button is shown - modal_elements["fuel_info_label"] = label_info - end -end - -local function add_limit_frame(parent_frame, modal_elements) - local frame_limit = parent_frame.add{type="frame", direction="horizontal", style="fp_frame_bordered_stretch"} - local table_limit = frame_limit.add{type="table", column_count=2} - table_limit.style.horizontal_spacing = 20 - table_limit.style.padding = {6, 0, 2, 0} - local flow_limit = table_limit.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - - flow_limit.add{type="label", caption={"fp.info_label", {"fp.machine_limit"}}, - tooltip={"fp.machine_limit_tt"}, style="heading_3_label"} - local textfield_limit = flow_limit.add{type="textfield", tags={mod="fp", on_gui_text_changed="machine_limit"}} - textfield_limit.style.width = 45 - util.gui.setup_numeric_textfield(textfield_limit, true, false) - modal_elements["limit_textfield"] = textfield_limit - - local flow_force_limit = table_limit.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - flow_force_limit.add{type="label", caption={"fp.info_label", {"fp.machine_force_limit"}}, - tooltip={"fp.machine_force_limit_tt"}, style="heading_3_label"} - local switch_force_limit = util.gui.switch.add_on_off(flow_force_limit, "machine_force_limit", {}, "left") - modal_elements["force_limit_switch"] = switch_force_limit -end - - -local function handle_machine_choice(player, tags, _) - local modal_data = util.globals.modal_data(player) - local machine = modal_data.object - - local machine_category_id = PROTOTYPE_MAPS.machines[machine.proto.category].id - local machine_proto = global.prototypes.machines[machine_category_id].members[tags.proto_id] - - -- This can't use Line.change_machine_to_proto() as that modifies the line, which we can't do - machine.proto = machine_proto - Machine.normalize_fuel(machine, player) - ModuleSet.normalize(machine.module_set, {compatibility=true, trim=true, effects=true}) - - -- Make sure the line's beacon is removed if this machine no longer supports it - if machine.proto.allowed_effects == nil then Line.set_beacon(machine.parent, nil) end - - refresh_machine_frame(player) - refresh_fuel_frame(player) - module_configurator.refresh_modules_flow(player, false) -end - -local function handle_fuel_choice(player, tags, _) - local modal_data = util.globals.modal_data(player) - - local split_id = util.split_string(tags.proto_id, "_") - modal_data.object.fuel.proto = global.prototypes.fuels[split_id[1]].members[split_id[2]] - - refresh_fuel_frame(player) -end - -local function change_machine_limit(player, _, event) - local modal_data = util.globals.modal_data(player) - local machine = modal_data.object - - machine.limit = tonumber(event.element.text) - if machine.limit == nil then machine.force_limit = true end - - refresh_limit_elements(player) -end - -local function change_machine_force_limit(player, _, event) - local modal_data = util.globals.modal_data(player) - - local switch_state = util.gui.switch.convert_to_boolean(event.element.switch_state) - modal_data.object.force_limit = switch_state - - refresh_limit_elements(player) -end - - -local function open_machine_dialog(player, modal_data) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", modal_data.floor_id) - modal_data.line = Floor.get(floor, "Line", modal_data.line_id) - modal_data.object = modal_data.line.machine - - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - content_frame.style.minimal_width = 460 - - modal_data.machine_backup = Machine.clone(modal_data.object) - modal_data.beacon_backup = Beacon.clone(modal_data.line.beacon) - modal_data.module_set = modal_data.object.module_set - - -- Choices - add_choices_frame(content_frame, modal_elements, "machine") - refresh_machine_frame(player) - add_choices_frame(content_frame, modal_elements, "fuel") - refresh_fuel_frame(player) - - -- Limit - if modal_data.line.parent.parent.matrix_free_items == nil then - add_limit_frame(content_frame, modal_elements) - refresh_limit_elements(player) - end - - -- Modules - module_configurator.add_modules_flow(content_frame, modal_data) - module_configurator.refresh_modules_flow(player, false) -end - -local function close_machine_dialog(player, action) - local modal_data = util.globals.modal_data(player) - local machine, line = modal_data.object, modal_data.line - - if action == "submit" then - ModuleSet.normalize(machine.module_set, {sort=true}) - - local subfactory = util.globals.context(player).subfactory - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - - else -- action == "cancel" - line.machine = modal_data.machine_backup - ModuleSet.normalize(line.machine.module_set, {effects=true}) - Line.set_beacon(modal_data.line, modal_data.beacon_backup) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "choose_machine", - handler = handle_machine_choice - }, - { - name = "choose_fuel", - handler = handle_fuel_choice - } - }, - on_gui_text_changed = { - { - name = "machine_limit", - handler = change_machine_limit - } - }, - on_gui_switch_state_changed = { - { - name = "machine_force_limit", - handler = change_machine_force_limit - } - } -} - -listeners.dialog = { - dialog = "machine", - metadata = (function(modal_data) return { - caption = {"", {"fp.edit"}, " ", {"fp.pl_machine", 1}}, - subheader_text = {"fp.machine_dialog_description", modal_data.recipe_name}, - create_content_frame = true, - show_submit_button = true - } end), - open = open_machine_dialog, - close = close_machine_dialog -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/matrix_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/matrix_dialog.lua deleted file mode 100644 index c144e36c..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/matrix_dialog.lua +++ /dev/null @@ -1,196 +0,0 @@ -local matrix_engine = require("backend.calculation.matrix_engine") - --- ** LOCAL UTIL ** -local function show_linearly_dependent_recipes(modal_data, recipe_protos) - local flow_recipes = modal_data.modal_elements.content_frame.add{type="flow", direction="vertical"} - local label_title = flow_recipes.add{type="label", caption={"fp.matrix_linearly_dependent_recipes"}} - label_title.style.font = "heading-2" - - local frame_recipes = flow_recipes.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - local table_recipes = frame_recipes.add{type="table", column_count=8, style="filter_slot_table"} - for _, recipe_proto in ipairs(recipe_protos) do - table_recipes.add{type="sprite", sprite=recipe_proto.sprite, tooltip=recipe_proto.localised_name} - end -end - -local function update_dialog_submit_button(modal_data, matrix_metadata) - local num_needed_free_items = matrix_metadata.num_rows - matrix_metadata.num_cols + #matrix_metadata.free_items - local curr_free_items = #modal_data["free_items"] - - local message = nil - if num_needed_free_items > curr_free_items then - message = {"fp.matrix_constrained_items", num_needed_free_items, {"fp.pl_item", num_needed_free_items}} - end - modal_dialog.set_submit_button_state(modal_data.modal_elements, (message == nil), message) -end - -local function refresh_item_category(modal_data, type) - local table_items = modal_data.modal_elements[type .. "_table"] - table_items.clear() - - -- order items by the natural Factorio order - local display_order = {} - for index, proto in ipairs(modal_data[type .. "_items"]) do - display_order[index] = { - key = { proto.group.order, proto.subgroup.order, proto.order, proto.name, index }, - index = index, proto = proto } - end - table.sort(display_order, function (item_1, item_2) - local key_1 = item_1.key - local key_2 = item_2.key - assert(#key_1 == #key_2) - - for i = 1, #key_1 do - if key_1[i] ~= key_2[i] then - return key_1[i] < key_2[i] - end - end - - return false -- identical items - end) - - for _, item in pairs(display_order) do - local index = item.index - local proto = item.proto - local button = table_items.add{type="sprite-button", sprite=proto.sprite, tooltip=proto.localised_name, - tags={mod="fp", on_gui_click="swap_item_category", type=type, index=index}, style="flib_slot_button_default", - mouse_button_filter={"left"}} - button.style.size = 48 - end -end - -local function create_item_category(modal_data, type, label_arg) - local flow_category = modal_data.modal_elements.content_frame.add{type="flow", direction="vertical"} - - local title_string = (type == "free") and {"fp.matrix_free_items"} - or {"fp.matrix_constrained_items", label_arg, {"fp.pl_item", label_arg}} - local label_title = flow_category.add{type="label", caption=title_string} - label_title.style.single_line = false - - local frame_items = flow_category.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - local table_items = frame_items.add{type="table", column_count=8, style="filter_slot_table"} - modal_data.modal_elements[type .. "_table"] = table_items - - refresh_item_category(modal_data, type) -end - -local function swap_item_category(player, tags, _) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - local modal_data = ui_state.modal_data - - -- update the free items here, set the constrained items based on linear dependence data - if tags.type == "free" then - -- note this assumes the gui's list has the same order as the subfactory - table.remove(subfactory.matrix_free_items, tags.index) - else -- "constrained" - local item_proto = modal_data["constrained_items"][tags.index] - table.insert(subfactory.matrix_free_items, item_proto) - end - - local matrix_metadata = matrix_engine.get_matrix_solver_metadata(modal_data.subfactory_data) - local linear_dependence_data = matrix_engine.get_linear_dependence_data(modal_data.subfactory_data, matrix_metadata) - modal_data.constrained_items = linear_dependence_data.allowed_free_items - modal_data.free_items = matrix_metadata.free_items - - refresh_item_category(modal_data, "constrained") - refresh_item_category(modal_data, "free") - update_dialog_submit_button(modal_data, matrix_metadata) -end - - -local function matrix_early_abort_check(player, modal_data) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - - if subfactory.selected_floor.Line.count == 0 then return true end - - local subfactory_data = solver.generate_subfactory_data(player, subfactory) - local matrix_metadata = matrix_engine.get_matrix_solver_metadata(subfactory_data) - - modal_data.subfactory_data = subfactory_data - - local linear_dependence_data = matrix_engine.get_linear_dependence_data(subfactory_data, matrix_metadata) - - if next(linear_dependence_data.linearly_dependent_recipes) then -- too many ways to create the products - modal_data.linearly_dependent_recipes = linear_dependence_data.linearly_dependent_recipes - subfactory.linearly_dependant = true - return false - end - subfactory.linearly_dependant = false -- TODO not the proper way to signal this, but it works - - modal_data.constrained_items = linear_dependence_data.allowed_free_items - modal_data.free_items = matrix_metadata.free_items - - local num_needed_free_items = matrix_metadata.num_rows - matrix_metadata.num_cols + #matrix_metadata.free_items - if num_needed_free_items == 0 then -- User doesn't need to select any free items, just run the matrix solver - if modal_data.configuration then - util.messages.raise(player, "warning", {"fp.warning_no_matrix_configuration_needed"}, 1) - end - return true - end - - -- If it gets to here, the dialog should open normally - modal_data.num_needed_free_items = num_needed_free_items - modal_data.matrix_metadata = matrix_metadata - return false -end - -local function open_matrix_dialog(player, modal_data) - if util.globals.context(player).subfactory.linearly_dependant then - show_linearly_dependent_recipes(modal_data, modal_data.linearly_dependent_recipes) - modal_dialog.set_submit_button_state(modal_data.modal_elements, false, {"fp.matrix_linearly_dependent_recipes"}) - - -- Dispose of the temporary GUI-opening variables - modal_data.linearly_dependent_recipes = nil - else - create_item_category(modal_data, "constrained", modal_data.num_needed_free_items) - create_item_category(modal_data, "free") - update_dialog_submit_button(modal_data, modal_data.matrix_metadata) - - -- Dispose of the temporary GUI-opening variables - modal_data.num_needed_free_items = nil - modal_data.matrix_metadata = nil - end -end - -local function close_matrix_dialog(player, action) - if action == "submit" then - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - subfactory.matrix_free_items = ui_state.modal_data.free_items - - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "cancel" then - util.raise.refresh(player, "production_detail", nil) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "swap_item_category", - handler = swap_item_category - } - } -} - -listeners.dialog = { - dialog = "matrix", - metadata = (function(_) return { - caption = {"fp.matrix_solver"}, - create_content_frame = true, - show_submit_button = true - } end), - early_abort_check = matrix_early_abort_check, - open = open_matrix_dialog, - close = close_matrix_dialog -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/picker_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/picker_dialog.lua deleted file mode 100644 index 9c7f3a60..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/picker_dialog.lua +++ /dev/null @@ -1,485 +0,0 @@ --- This dialog works as the product picker currently, but could also work as an ingredient picker down the line --- ** ITEM PICKER ** -local function select_item_group(modal_data, new_group_id) - modal_data.selected_group_id = new_group_id - - for group_id, group_elements in pairs(modal_data.modal_elements.groups) do - local selected_group = (group_id == new_group_id) - group_elements.button.enabled = not selected_group - group_elements.scroll_pane.visible = selected_group - end -end - -local function search_picker_items(player, search_term) - local modal_data = util.globals.modal_data(player) - local modal_elements = modal_data.modal_elements - - -- Groups are indexed continuously, so using ipairs here is fine - local first_visible_group_id = nil - for group_id, group in ipairs(modal_elements.groups) do - local any_item_visible = false - - for _, subgroup_table in pairs(group.subgroup_tables) do - for item_data, element in pairs(subgroup_table) do - -- Can only get to this if translations are complete, as the textfield is disabled otherwise - local visible = (search_term == item_data.name) - or (string.find(item_data.translated_name, search_term, 1, true) ~= nil) - element.visible = visible - any_item_visible = any_item_visible or visible - end - end - - group.button.visible = any_item_visible - first_visible_group_id = first_visible_group_id or ((any_item_visible) and group_id or nil) - end - - local any_result_found = (first_visible_group_id ~= nil) - modal_elements.warning_label.visible = not any_result_found - modal_elements.filter_frame.visible = any_result_found - - if first_visible_group_id ~= nil then - local selected_group_id = modal_data.selected_group_id - local is_selected_group_visible = modal_elements.groups[selected_group_id].button.visible - local group_id_to_select = is_selected_group_visible and selected_group_id or first_visible_group_id - select_item_group(modal_data, group_id_to_select) - end -end - -local function add_item_picker(parent_flow, player) - local player_table = util.globals.player_table(player) - local ui_state = player_table.ui_state - local modal_elements = ui_state.modal_data.modal_elements - local translations = player_table.translation_tables - - local label_warning = parent_flow.add{type="label", caption={"fp.error_message", {"fp.no_item_found"}}} - label_warning.style.font = "heading-2" - label_warning.style.margin = 12 - label_warning.visible = false -- There can't be a warning upon first opening of the dialog - modal_elements["warning_label"] = label_warning - - -- Item picker (optimized for performance, so not everything is done in the obvious way) - local groups_per_row = MAGIC_NUMBERS.groups_per_row - local table_item_groups = parent_flow.add{type="table", style="filter_group_table", column_count=groups_per_row} - table_item_groups.style.width = 71 * groups_per_row - table_item_groups.style.horizontal_spacing = 0 - table_item_groups.style.vertical_spacing = 0 - - local frame_filters = parent_flow.add{type="frame", style="fp_frame_slot_table"} - modal_elements["filter_frame"] = frame_filters - - local group_id_cache, group_flow_cache, subgroup_table_cache = {}, {}, {} - modal_elements.groups = {} - - local existing_products = {} - if not ui_state.modal_data.create_subfactory then -- check if this is for a new subfactory or not - for _, product in pairs(Subfactory.get_in_order(ui_state.context.subfactory, "Product")) do - existing_products[product.proto.name] = true - end - end - - local items_per_row = MAGIC_NUMBERS.items_per_row - local current_item_rows, max_item_rows = 0, 0 - local current_items_in_table_count = 0 - for _, item_proto in ipairs(SORTED_ITEMS) do - if not item_proto.hidden and not item_proto.ingredient_only then - local group_name = item_proto.group.name - local group_id = group_id_cache[group_name] - local flow_subgroups, subgroup_tables = nil, nil - - if group_id == nil then - local cache_count = table_size(group_id_cache) + 1 - group_id_cache[group_name] = cache_count - group_id = cache_count - - local button_group = table_item_groups.add{type="sprite-button", sprite=("item-group/" .. group_name), - tags={mod="fp", on_gui_click="select_picker_item_group", group_id=group_id}, - style="fp_sprite-button_group_tab", tooltip=item_proto.group.localised_name, - mouse_button_filter={"left"}} - - -- This only exists when button_group also exists - local scroll_pane_subgroups = frame_filters.add{type="scroll-pane", - style="fp_scroll-pane_slot_table"} - scroll_pane_subgroups.style.vertically_stretchable = true - - local frame_subgroups = scroll_pane_subgroups.add{type="frame", style="slot_button_deep_frame"} - frame_subgroups.style.vertically_stretchable = true - - -- This flow is only really needed to set the correct vertical spacing - flow_subgroups = frame_subgroups.add{type="flow", name="flow_group", direction="vertical"} - flow_subgroups.style.vertical_spacing = 0 - group_flow_cache[group_id] = flow_subgroups - - modal_elements.groups[group_id] = { - button = button_group, - frame = frame_subgroups, - scroll_pane = scroll_pane_subgroups, - subgroup_tables = {} - } - subgroup_tables = modal_elements.groups[group_id].subgroup_tables - - -- Catch up on adding the last item flow's row count - current_item_rows = current_item_rows + math.ceil(current_items_in_table_count / items_per_row) - current_items_in_table_count = 0 - - max_item_rows = math.max(current_item_rows, max_item_rows) - current_item_rows = 0 - else - flow_subgroups = group_flow_cache[group_id] - subgroup_tables = modal_elements.groups[group_id].subgroup_tables - end - - local subgroup_name = item_proto.subgroup.name - local table_subgroup = subgroup_table_cache[subgroup_name] - local subgroup_table = nil - - if table_subgroup == nil then - table_subgroup = flow_subgroups.add{type="table", column_count=items_per_row, - style="filter_slot_table"} - table_subgroup.style.horizontally_stretchable = true - subgroup_table_cache[subgroup_name] = table_subgroup - - subgroup_tables[subgroup_name] = {} - subgroup_table = subgroup_tables[subgroup_name] - - current_item_rows = current_item_rows + math.ceil(current_items_in_table_count / items_per_row) - current_items_in_table_count = 0 - else - subgroup_table = subgroup_tables[subgroup_name] - end - - current_items_in_table_count = current_items_in_table_count + 1 - - local item_name = item_proto.name - local existing_product = existing_products[item_name] - local button_style = (existing_product) and "flib_slot_button_red" or "flib_slot_button_default" - - local button_item = table_subgroup.add{type="sprite-button", sprite=item_proto.sprite, style=button_style, - tags={mod="fp", on_gui_click="select_picker_item", item_id=item_proto.id, - category_id=item_proto.category_id}, enabled=(existing_product == nil), - tooltip=item_proto.localised_name, mouse_button_filter={"left"}} - - -- Figure out the translated name here so search doesn't have to repeat the work for every character - local translated_name = (translations) and translations[item_proto.type][item_name] or nil - translated_name = (translated_name) and translated_name:lower() or item_name - subgroup_table[{name=item_name, translated_name=translated_name}] = button_item - end - end - - -- Catch up on addding the last item flow and groups row counts - current_item_rows = current_item_rows + math.ceil(current_items_in_table_count / items_per_row) - max_item_rows = math.max(current_item_rows, max_item_rows) - frame_filters.style.natural_height = max_item_rows * 40 + (2*12) - - -- Select the previously selected item group if possible - local group_to_select, previous_selection = 1, ui_state.last_selected_picker_group - if previous_selection ~= nil and modal_elements.groups[previous_selection] ~= nil then - group_to_select = previous_selection - end - select_item_group(ui_state.modal_data, group_to_select) -end - - --- ** PICKER DIALOG ** -local function set_appropriate_focus(modal_data) - if modal_data.amount_defined_by == "amount" then - util.gui.select_all(modal_data.modal_elements["item_amount_textfield"]) - else -- "belts"/"lanes" - util.gui.select_all(modal_data.modal_elements["belt_amount_textfield"]) - end -end - --- Is only called when defined_by ~= "amount" -local function sync_amounts(modal_data) - local modal_elements = modal_data.modal_elements - - local belt_amount = tonumber(modal_elements.belt_amount_textfield.text) - if belt_amount == nil then - modal_elements.item_amount_textfield.text = "" - else - local belt_proto = modal_data.belt_proto - local throughput = belt_proto.throughput * ((modal_data.lob == "belts") and 1 or 0.5) - local item_amount = belt_amount * throughput * modal_data.timescale - modal_elements.item_amount_textfield.text = util.format.number(item_amount, 6) - end -end - -local function set_belt_proto(modal_data, belt_proto) - modal_data.belt_proto = belt_proto - - local modal_elements = modal_data.modal_elements - modal_elements.item_amount_textfield.enabled = (belt_proto == nil) - modal_elements.belt_amount_textfield.enabled = (belt_proto ~= nil) - - if belt_proto == nil then - modal_elements.belt_choice_button.elem_value = nil - modal_elements.belt_amount_textfield.text = "" - modal_data.amount_defined_by = "amount" - else - -- Might double set the choice button, but it doesn't matter - modal_elements.belt_choice_button.elem_value = belt_proto.name - modal_data.amount_defined_by = modal_data.lob - - local item_amount = tonumber(modal_elements.item_amount_textfield.text) - if item_amount ~= nil then - local throughput = belt_proto.throughput * ((modal_data.lob == "belts") and 1 or 0.5) - local belt_amount = item_amount / throughput / modal_data.timescale - modal_elements.belt_amount_textfield.text = util.format.number(belt_amount, 6) - end - sync_amounts(modal_data) - end -end - -local function set_item_proto(modal_data, item_proto) - local modal_elements = modal_data.modal_elements - modal_data.item_proto = item_proto - - local item_choice_button = modal_elements.item_choice_button - item_choice_button.sprite = (item_proto) and item_proto.sprite or nil - item_choice_button.tooltip = (item_proto) and item_proto.tooltip or "" - - -- Disable definition by belt for fluids - local is_fluid = item_proto and item_proto.type == "fluid" - modal_elements.belt_choice_button.enabled = (not is_fluid) - - -- Clear the belt-related fields if needed - if is_fluid then set_belt_proto(modal_data, nil) end -end - -local function update_dialog_submit_button(modal_elements) - local item_choice_button = modal_elements.item_choice_button - local item_amount_textfield = modal_elements.item_amount_textfield - - local message = nil - if item_choice_button.sprite == "" then - message = {"fp.picker_issue_select_item"} - -- The item amount will be filled even if the item is defined_by ~= "amount" - elseif tonumber(item_amount_textfield.text) == nil then - message = {"fp.picker_issue_enter_amount"} - end - - modal_dialog.set_submit_button_state(modal_elements, (message == nil), message) -end - - -local function add_item_pane(parent_flow, modal_data, item_category, item) - local function create_flow() - local flow = parent_flow.add{type="flow", direction="horizontal"} - flow.style.vertical_align = "center" - flow.style.horizontal_spacing = 8 - flow.style.bottom_margin = 6 - return flow - end - - local modal_elements = modal_data.modal_elements - local defined_by = (item) and item.required_amount.defined_by or "amount" - modal_data.amount_defined_by = defined_by - - - local flow_amount = create_flow() - flow_amount.add{type="label", caption={"fp.pu_" .. item_category, 1}} - - local item_choice_button = flow_amount.add{type="sprite-button", style="fp_sprite-button_inset_tiny"} - item_choice_button.style.right_margin = 12 - modal_elements["item_choice_button"] = item_choice_button - - flow_amount.add{type="label", caption={"fp.amount"}} - - local item_amount = (item and defined_by == "amount") and tostring(item.required_amount.amount) or "" - local textfield_amount = flow_amount.add{type="textfield", text=item_amount, - tags={mod="fp", on_gui_text_changed="picker_item_amount"}} - util.gui.setup_numeric_textfield(textfield_amount, true, false) - textfield_amount.style.width = 90 - modal_elements["item_amount_textfield"] = textfield_amount - - - local flow_belts = create_flow() - flow_belts.add{type="label", caption={"fp.amount_by", {"fp.pl_" .. modal_data.lob:sub(1, -2), 2}}} - - local belt_amount = (item and defined_by ~= "amount") and tostring(item.required_amount.amount) or "" - local textfield_belts = flow_belts.add{type="textfield", text=belt_amount, - tags={mod="fp", on_gui_text_changed="picker_belt_amount"}} - util.gui.setup_numeric_textfield(textfield_belts, true, false) - textfield_belts.style.width = 85 - textfield_belts.style.left_margin = 4 - modal_elements["belt_amount_textfield"] = textfield_belts - - flow_belts.add{type="label", caption="x"} - - local belt_filter = {{filter="type", type="transport-belt"}, {filter="flag", flag="hidden", - invert=true, mode="and"}} - local choose_belt_button = flow_belts.add{type="choose-elem-button", elem_type="entity", - tags={mod="fp", on_gui_elem_changed="picker_choose_belt"}, elem_filters=belt_filter, - style="fp_sprite-button_inset_tiny"} - modal_elements["belt_choice_button"] = choose_belt_button - - - local item_proto = (item) and item.proto or nil - set_item_proto(modal_data, item_proto) - - local belt_proto = (defined_by ~= "amount") and item.required_amount.belt_proto or nil - set_belt_proto(modal_data, belt_proto) - - if (item) then set_appropriate_focus(modal_data) - else modal_elements.search_textfield.focus() end - update_dialog_submit_button(modal_elements) -end - - -local function handle_item_pick(player, tags, _) - local modal_data = util.globals.modal_data(player) - - local item_proto = global.prototypes.items[tags.category_id].members[tags.item_id] - set_item_proto(modal_data, item_proto) -- no need for sync in this case - - set_appropriate_focus(modal_data) - update_dialog_submit_button(modal_data.modal_elements) -end - -local function handle_belt_pick(player, _, event) - local belt_name = event.element.elem_value - local belt_proto = prototyper.util.find_prototype("belts", belt_name, nil) - - local modal_data = util.globals.modal_data(player) - set_belt_proto(modal_data, belt_proto) -- syncs amounts itself - - set_appropriate_focus(modal_data) - update_dialog_submit_button(modal_data.modal_elements) -end - - -local function open_picker_dialog(player, modal_data) - -- Create a blank subfactory if requested - local settings = util.globals.settings(player) - modal_data.timescale = settings.default_timescale - modal_data.lob = settings.belts_or_lanes - - local subfactory = util.globals.context(player).subfactory - if subfactory then - local class_name = modal_data.item_category:gsub("^%l", string.upper) - modal_data.item = Subfactory.get(subfactory, class_name, modal_data.item_id) - end - - local dialog_flow = modal_data.modal_elements.dialog_flow - dialog_flow.style.vertical_spacing = 12 - - local item_content_frame = dialog_flow.add{type="frame", direction="vertical", style="inside_shallow_frame"} - item_content_frame.style.minimal_width = 325 - item_content_frame.style.padding = {12, 12, 6, 12} - add_item_pane(item_content_frame, modal_data, modal_data.item_category, modal_data.item) - - -- The item picker only needs to show when adding a new item - if modal_data.item == nil then - local picker_content_frame = dialog_flow.add{type="frame", direction="vertical", style="inside_deep_frame"} - add_item_picker(picker_content_frame, player) - end -end - -local function close_picker_dialog(player, action) - local player_table = util.globals.player_table(player) - local ui_state = player_table.ui_state - local modal_data = ui_state.modal_data - local subfactory = ui_state.context.subfactory - - if action == "submit" then - local defined_by = modal_data.amount_defined_by - local relevant_textfield_name = ((defined_by == "amount") and "item" or "belt") .. "_amount_textfield" - local relevant_amount = tonumber(modal_data.modal_elements[relevant_textfield_name].text) - - local req_amount = {defined_by=defined_by, amount=relevant_amount, belt_proto=modal_data.belt_proto} - - local refresh_scope = "subfactory" - if modal_data.item ~= nil then -- ie. this is an edit - modal_data.item.required_amount = req_amount - else - local class_name = modal_data.item_category:gsub("^%l", string.upper) - local item_proto = modal_data.item_proto - local top_level_item = Item.init(item_proto, class_name, 0, req_amount) - - if modal_data.create_subfactory then -- if this flag is set, create a subfactory to put the item into - local translations = player_table.translation_tables - local translated_name = (translations) and translations[item_proto.type][item_proto.name] or "" - local icon = (not player_table.preferences.attach_subfactory_products) - and "[img=" .. top_level_item.proto.sprite .. "] " or "" - subfactory = subfactory_list.add_subfactory(player, (icon .. translated_name)) - end - - Subfactory.add(subfactory, top_level_item) - refresh_scope = "all" -- need to refresh subfactory list too - end - - solver.update(player, subfactory) - util.raise.refresh(player, refresh_scope, nil) - - elseif action == "delete" then - Subfactory.remove(subfactory, modal_data.item) - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - end - - -- Remember selected group so it can be re-applied when the dialog is re-opened - ui_state.last_selected_picker_group = modal_data.selected_group_id -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "select_picker_item_group", - handler = (function(player, tags, _) - local modal_data = util.globals.modal_data(player) - select_item_group(modal_data, tags.group_id) - end) - }, - { - name = "select_picker_item", - handler = handle_item_pick - } - }, - on_gui_elem_changed = { - { - name = "picker_choose_belt", - handler = handle_belt_pick - } - }, - on_gui_text_changed = { - { - name = "picker_item_amount", - handler = (function(player, _, _) - local modal_data = util.globals.modal_data(player) - update_dialog_submit_button(modal_data.modal_elements) - end) - }, - { - name = "picker_belt_amount", - handler = (function(player, _, _) - local modal_data = util.globals.modal_data(player) - sync_amounts(modal_data) -- defined_by ~= "amount" - update_dialog_submit_button(modal_data.modal_elements) - end) - } - } -} - -listeners.dialog = { - dialog = "picker", - metadata = (function(modal_data) - local action = (modal_data.item_id) and {"fp.edit"} or {"fp.add"} - return { - caption = {"", action, " ", {"fp.pl_" .. modal_data.item_category, 1}}, - search_handler_name = (not modal_data.item_id) and "search_picker_items" or nil, - show_submit_button = true, - show_delete_button = (modal_data.item_id ~= nil) - } - end), - open = open_picker_dialog, - close = close_picker_dialog -} - -listeners.global = { - search_picker_items = search_picker_items -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/porter_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/porter_dialog.lua deleted file mode 100644 index c4e7145c..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/porter_dialog.lua +++ /dev/null @@ -1,369 +0,0 @@ --- ** LOCAL UTIL ** -local function set_tool_button_state(button, dialog_type, enabled) - button.enabled = enabled - button.sprite = (enabled) and ("utility/" .. dialog_type) or ("fp_sprite_" .. dialog_type .. "_light") -end - -local function set_dialog_submit_button(modal_elements, enabled, action_to_take) - local message = (not enabled) and {"fp.importer_issue_" .. action_to_take} or nil - modal_dialog.set_submit_button_state(modal_elements, enabled, message) -end - --- Sets the state of either the export_subfactories- or dialog_submit-button -local function set_relevant_submit_button(modal_elements, dialog_type, enabled) - if dialog_type == "export" then - set_tool_button_state(modal_elements.export_button, dialog_type, enabled) - - else -- dialog_type == "import" - set_dialog_submit_button(modal_elements, enabled, "select_subfactory") - end -end - - --- Sets the slave checkboxes after the master one has been clicked -local function set_all_checkboxes(player, checkbox_state) - local ui_state = util.globals.ui_state(player) - local modal_elements = ui_state.modal_data.modal_elements - - for _, checkbox in pairs(modal_elements.subfactory_checkboxes) do - if checkbox.enabled then checkbox.state = checkbox_state end - end - - set_relevant_submit_button(modal_elements, ui_state.modal_dialog_type, checkbox_state) -end - --- Sets the master checkbox to the appropriate state after a slave one is changed -local function adjust_after_checkbox_click(player, _, _) - local ui_state = util.globals.ui_state(player) - local modal_elements = ui_state.modal_data.modal_elements - - local checked_element_count, unchecked_element_count = 0, 0 - for _, checkbox in pairs(modal_elements.subfactory_checkboxes) do - if checkbox.state == true then checked_element_count = checked_element_count + 1 - elseif checkbox.enabled then unchecked_element_count = unchecked_element_count + 1 end - end - - modal_elements.master_checkbox.state = (unchecked_element_count == 0) - set_relevant_submit_button(modal_elements, ui_state.modal_dialog_type, (checked_element_count > 0)) -end - - --- Adds a flow containing a textfield and a button -local function add_textfield_and_button(modal_elements, dialog_type, button_first, button_enabled) - local flow = modal_elements.content_frame.add{type="flow", direction="horizontal"} - flow.style.vertical_align = "center" - - local function add_button() - local button = flow.add{type="sprite-button", tags={mod="fp", on_gui_click=(dialog_type .. "_subfactories")}, - style="flib_tool_button_light_green", tooltip={"fp." .. dialog_type .. "_button_tooltip"}, - mouse_button_filter={"left"}} - set_tool_button_state(button, dialog_type, button_enabled) - modal_elements[dialog_type .. "_button"] = button - end - - local function add_textfield() - local tags = (dialog_type == "import") - and {mod="fp", on_gui_text_changed="import_string", on_gui_confirmed="import_string"} or nil - local textfield = flow.add{type="textfield", tags=tags} - util.gui.setup_textfield(textfield) - textfield.style.width = 0 -- needs to be set to 0 so stretching works - textfield.style.minimal_width = 280 - textfield.style.horizontally_stretchable = true - - if button_first then textfield.style.left_margin = 6 - else textfield.style.right_margin = 6 end - - modal_elements[dialog_type .. "_textfield"] = textfield - end - - if button_first then add_button(); add_textfield() - else add_textfield(); add_button() end -end - - --- Initializes the subfactories table by adding it and its header -local function setup_subfactories_table(modal_elements, add_location) - modal_elements.subfactory_checkboxes = {} -- setup for later use in add_to_subfactories_table - - local scroll_pane = modal_elements.content_frame.add{type="scroll-pane", style="flib_naked_scroll_pane_no_padding"} - scroll_pane.style.maximal_height = 450 -- I hate that I have to set this, seemingly - modal_elements.subfactories_scroll_pane = scroll_pane - - local frame_subfactories = scroll_pane.add{type="frame", style="deep_frame_in_shallow_frame"} - frame_subfactories.style.padding = {-2, 2, 3, 2} - - local table_columns = { - [2] = {caption={"fp.pu_subfactory", 2}, alignment="left", margin={6, 130, 6, 4}}, - [3] = {caption={"fp.validity"}} - } - if add_location then table_columns[4] = {caption={"fp.location"}} end - - local table_subfactories = frame_subfactories.add{type="table", style="mods_table", - column_count=(table_size(table_columns) + 1)} - modal_elements.subfactories_table = table_subfactories - - -- Add master checkbox in any case - local checkbox_master = table_subfactories.add{type="checkbox", state=false, - tags={mod="fp", on_gui_checked_state_changed="toggle_porter_master_checkbox"}} - modal_elements.master_checkbox = checkbox_master - - for column_nr, table_column in pairs(table_columns) do - table_subfactories.style.column_alignments[column_nr] = table_column.alignment or "center" - - local label_column = table_subfactories.add{type="label", caption=table_column.caption, style="heading_3_label"} - label_column.style.margin = table_column.margin or {0, 4} - end -end - --- Adds a row to the subfactories table -local function add_to_subfactories_table(modal_elements, subfactory, location_name, enable_checkbox, attach_products) - local table_subfactories = modal_elements.subfactories_table - - local checkbox = table_subfactories.add{type="checkbox", state=false, enabled=(enable_checkbox or subfactory.valid), - tags={mod="fp", on_gui_checked_state_changed="toggle_porter_checkbox"}} - - local label = table_subfactories.add{type="label", caption=Subfactory.tostring(subfactory, attach_products, true)} - label.style.maximal_width = 350 - label.style.right_margin = 4 - - local validity_caption = (subfactory.valid) and {"fp.valid"} or {"fp.error_message", {"fp.invalid"}} - table_subfactories.add{type="label", caption=validity_caption} - - if location_name then table_subfactories.add{type="label", caption={"fp." .. location_name}} end - - local identifier = (location_name or "tmp") .. "_" .. subfactory.id - modal_elements.subfactory_checkboxes[identifier] = checkbox -end - - --- Tries importing the given string, showing the resulting subfactories-table, if possible -local function import_subfactories(player, _, _) - local player_table = util.globals.player_table(player) - local attach_subfactory_products = player_table.preferences.attach_subfactory_products - local modal_data = player_table.ui_state.modal_data - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - local textfield_export_string = modal_elements.import_textfield - - -- The imported subfactories will be temporarily contained in a factory object - local import_factory, error = util.porter.process_export_string(textfield_export_string.text) - - local function add_info_label(caption) - local label_info = content_frame.add{type="label", caption=caption} - label_info.style.single_line = false - label_info.style.bottom_margin = 4 - label_info.style.width = 330 - modal_elements.info_label = label_info - end - - if not modal_elements.porter_line then - local line = content_frame.add{type="line", direction="horizontal"} - line.style.margin = {6, 0, 6, 0} - modal_elements.porter_line = line - end - - if modal_elements.info_label then modal_elements.info_label.destroy() end - if modal_elements.subfactories_scroll_pane then modal_elements.subfactories_scroll_pane.destroy() end - - if error ~= nil then - add_info_label({"fp.error_message", {"fp.importer_" .. error}}) - util.gui.select_all(textfield_export_string) - else - ---@cast import_factory -nil - - add_info_label({"fp.import_instruction_2"}) - setup_subfactories_table(modal_elements, false) - modal_data.subfactories = {} - - local any_invalid_subfactories = true - for _, subfactory in ipairs(Factory.get_in_order(import_factory, "Subfactory")) do - add_to_subfactories_table(modal_elements, subfactory, nil, true, attach_subfactory_products) - modal_data.subfactories["tmp_" .. subfactory.id] = subfactory - any_invalid_subfactories = any_invalid_subfactories or (not subfactory.valid) - end - - if any_invalid_subfactories then - modal_data.export_modset = import_factory.export_modset - - local diff_tooltip = util.porter.format_modset_diff(import_factory.export_modset) - if diff_tooltip ~= "" then - modal_elements.info_label.caption = {"fp.info_label", {"fp.import_instruction_2"}} - modal_elements.info_label.tooltip = diff_tooltip - end - end - - modal_elements.master_checkbox.state = true - set_all_checkboxes(player, true) - end - - set_dialog_submit_button(modal_elements, (error == nil), "import_string") - modal_elements.modal_frame.force_auto_center() -end - --- Exports the currently selected subfactories and puts the resulting string into the textbox -local function export_subfactories(player, _, _) - local modal_data = util.globals.modal_data(player) - local modal_elements = modal_data.modal_elements - local subfactories_to_export = {} - - for subfactory_identifier, checkbox in pairs(modal_elements.subfactory_checkboxes) do - if checkbox.state == true then - local subfactory = modal_data.subfactories[subfactory_identifier] - table.insert(subfactories_to_export, subfactory) - end - end - local export_string = util.porter.generate_export_string(subfactories_to_export) - - modal_elements.export_textfield.text = export_string - util.gui.select_all(modal_elements.export_textfield) -end - - -local function open_import_dialog(_, modal_data) - local modal_elements = modal_data.modal_elements - set_dialog_submit_button(modal_elements, false, "import_string") - - add_textfield_and_button(modal_elements, "import", false, false) - util.gui.select_all(modal_elements.import_textfield) -end - --- Imports the selected subfactories into the player's main factory -local function close_import_dialog(player, action) - if action == "submit" then - local ui_state = util.globals.ui_state(player) - local modal_data = ui_state.modal_data - local factory = ui_state.context.factory - - local first_subfactory = nil - for subfactory_identifier, checkbox in pairs(modal_data.modal_elements.subfactory_checkboxes) do - if checkbox.state == true then - local subfactory = modal_data.subfactories[subfactory_identifier] - local imported_subfactory = Factory.add(factory, subfactory) - - if not imported_subfactory.valid then -- carry over modset if need be - imported_subfactory.last_valid_modset = modal_data.export_modset - end - - solver.update(player, imported_subfactory) - first_subfactory = first_subfactory or imported_subfactory - end - end - - util.context.set_subfactory(player, first_subfactory) - util.raise.refresh(player, "all", nil) - end -end - - --- ** EVENTS ** -local import_listeners = {} - -import_listeners.gui = { - on_gui_click = { - { - name = "import_subfactories", - timeout = 20, - handler = import_subfactories - } - }, - on_gui_text_changed = { - { - name = "import_string", - handler = (function(player, _, event) - local button_import = util.globals.modal_elements(player).import_button - set_tool_button_state(button_import, "import", (string.len(event.element.text) > 0)) - end) - } - }, - on_gui_confirmed = { - { - name = "import_string", - handler = (function(player, _, event) - if event.element.text ~= "" then import_subfactories(player) end - end) - } - } -} - -import_listeners.dialog = { - dialog = "import", - metadata = (function(_) return { - caption = {"", {"fp.import"}, " ", {"fp.pl_subfactory", 1}}, - subheader_text = {"fp.import_instruction_1"}, - create_content_frame = true, - disable_scroll_pane = true, - show_submit_button = true - } end), - open = open_import_dialog, - close = close_import_dialog -} - - -local function open_export_dialog(player, modal_data) - local player_table = util.globals.player_table(player) - local attach_subfactory_products = player_table.preferences.attach_subfactory_products - local modal_elements = modal_data.modal_elements - - setup_subfactories_table(modal_elements, true) - modal_data.subfactories = {} - - local valid_subfactory_found = false - for _, factory_name in ipairs{"factory", "archive"} do - for _, subfactory in ipairs(Factory.get_in_order(player_table[factory_name], "Subfactory")) do - add_to_subfactories_table(modal_elements, subfactory, factory_name, false, attach_subfactory_products) - modal_data.subfactories[factory_name .. "_" .. subfactory.id] = subfactory - valid_subfactory_found = valid_subfactory_found or subfactory.valid - end - end - modal_elements.master_checkbox.enabled = valid_subfactory_found - - add_textfield_and_button(modal_elements, "export", true, false) - modal_elements.export_textfield.parent.style.top_margin = 6 -end - - --- ** EVENTS ** -local export_listeners = {} - -export_listeners.gui = { - on_gui_click = { - { - name = "export_subfactories", - timeout = 20, - handler = export_subfactories - } - } -} - -export_listeners.dialog = { - dialog = "export", - metadata = (function(_) return { - caption = {"", {"fp.export"}, " ", {"fp.pl_subfactory", 1}}, - subheader_text = {"fp.info_label", {"fp.export_instruction"}}, - subheader_tooltip = {"fp.export_instruction_tt"}, - create_content_frame = true, - disable_scroll_pane = true - } end), - open = open_export_dialog -} - - --- ** SHARED ** -local porter_listeners = {} - -porter_listeners.gui = { - on_gui_checked_state_changed = { - { - name = "toggle_porter_master_checkbox", - handler = (function(player, _, event) - set_all_checkboxes(player, event.element.state) - end) - }, - { - name = "toggle_porter_checkbox", - handler = adjust_after_checkbox_click - } - } -} - -return { import_listeners, export_listeners, porter_listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/preferences_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/preferences_dialog.lua deleted file mode 100644 index 6470171d..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/preferences_dialog.lua +++ /dev/null @@ -1,332 +0,0 @@ --- ** LOCAL UTIL ** -local function add_preference_box(content_frame, type) - local bordered_frame = content_frame.add{type="frame", direction="vertical", style="fp_frame_bordered_stretch"} - - local caption = {"fp.info_label", {"fp.preference_".. type .. "_title"}} - local tooltip = {"fp.preference_".. type .. "_title_tt"} - bordered_frame.add{type="label", caption=caption, tooltip=tooltip, style="caption_label"} - - return bordered_frame -end - -local function refresh_defaults_table(player, modal_elements, type, category_id) - local table_prototypes, prototypes - - if not category_id then - table_prototypes = modal_elements[type] - prototypes = global.prototypes[type] - else - table_prototypes = modal_elements[type][category_id] - prototypes = global.prototypes[type][category_id].members - end - - table_prototypes.clear() - local default_proto = prototyper.defaults.get(player, type, category_id) - - for prototype_id, prototype in ipairs(prototypes) do - local selected = (default_proto.id == prototype_id) - local style = (selected) and "flib_slot_button_green_small" or "flib_slot_button_default_small" - local first_line = (selected) and {"fp.tt_title_with_note", prototype.localised_name, {"fp.selected"}} - or {"fp.tt_title", prototype.localised_name} - local tooltip = {"", first_line, "\n", prototyper.util.get_attributes(prototype)} - - table_prototypes.add{type="sprite-button", sprite=prototype.sprite, tooltip=tooltip, style=style, - tags={mod="fp", on_gui_click="select_preference_default", type=type, prototype_id=prototype_id, - category_id=category_id}, mouse_button_filter={"left"}} - end -end - - -local preference_structures = {} - -function preference_structures.checkboxes(preferences, content_frame, type, preference_names) - local preference_box = add_preference_box(content_frame, type) - local flow_checkboxes = preference_box.add{type="flow", direction="vertical"} - - for _, pref_name in ipairs(preference_names) do - local identifier = type .. "_" .. pref_name - local caption = {"fp.info_label", {"fp.preference_" .. identifier}} - local tooltip ={"fp.preference_" .. identifier .. "_tt"} - flow_checkboxes.add{type="checkbox", state=preferences[pref_name], caption=caption, tooltip=tooltip, - tags={mod="fp", on_gui_checked_state_changed="toggle_preference", type=type, name=pref_name}} - end -end - -function preference_structures.mb_defaults(preferences, content_frame) - local mb_defaults = preferences.mb_defaults - local preference_box = add_preference_box(content_frame, "mb_defaults") - - local function add_mb_default_button(parent_flow, type) - local flow = parent_flow.add{type="flow", direction="horizontal"} - flow.style.vertical_align = "center" - flow.style.horizontal_spacing = 8 - - flow.add{type="label", caption={"fp.info_label", {"fp.preference_mb_default_" .. type}}, - tooltip={"fp.preference_mb_default_" .. type .. "_tt"}} - local item = (mb_defaults[type] ~= nil) and mb_defaults[type].name or nil - flow.add{type="choose-elem-button", elem_type="item", item=item, style="fp_sprite-button_inset_tiny", - elem_filters={{filter="type", type="module"}, {filter="flag", flag="hidden", mode="and", invert=true}}, - tags={mod="fp", on_gui_elem_changed="change_mb_default", type=type}} - end - - local table_mb_defaults = preference_box.add{type="table", column_count=3} - table_mb_defaults.style.horizontal_spacing = 18 - -- Table alignment is so stupid - table_mb_defaults.style.column_alignments[1] = "left" - table_mb_defaults.style.column_alignments[2] = "right" - table_mb_defaults.style.column_alignments[3] = "right" - - table_mb_defaults.add{type="label", caption={"", {"fp.pu_machine", 1}, ":"}} - add_mb_default_button(table_mb_defaults, "machine") - add_mb_default_button(table_mb_defaults, "machine_secondary") - - table_mb_defaults.add{type="label", caption={"", {"fp.pu_beacon", 1}, ":"}} - add_mb_default_button(table_mb_defaults, "beacon") - - local beacon_amount_flow = table_mb_defaults.add{type="flow", direction="horizontal"} - beacon_amount_flow.style.vertical_align = "center" - beacon_amount_flow.style.horizontal_spacing = 8 - - beacon_amount_flow.add{type="label", caption={"fp.info_label", {"fp.preference_mb_default_beacon_amount"}}, - tooltip={"fp.preference_mb_default_beacon_amount_tt"}} - - local beacon_amount = (BEACON_OVERLOAD_ACTIVE) and "1" or tostring(mb_defaults.beacon_count or "") - local textfield_amount = beacon_amount_flow.add{type="textfield", text=beacon_amount, - enabled=(not BEACON_OVERLOAD_ACTIVE), tags={mod="fp", on_gui_text_changed="mb_default_beacon_amount"}} - util.gui.setup_numeric_textfield(textfield_amount, true, false) - textfield_amount.style.width = 42 -end - -function preference_structures.prototypes(player, content_frame, modal_elements, type) - local preference_box = add_preference_box(content_frame, ("default_" .. type)) - local table_prototypes = preference_box.add{type="table", column_count=3} - table_prototypes.style.horizontal_spacing = 20 - table_prototypes.style.vertical_spacing = 8 - table_prototypes.style.top_margin = 4 - - local function add_defaults_table(column_count, category_id) - local frame = table_prototypes.add{type="frame", direction="horizontal", style="fp_frame_deep_slots_small"} - local table = frame.add{type="table", column_count=column_count, style="filter_slot_table"} - - if category_id then - modal_elements[type] = modal_elements[type] or {} - modal_elements[type][category_id] = table - else - modal_elements[type] = table - end - end - - if not prototyper.data_types[type] then - local prototypes = global.prototypes[type] - if #prototypes < 2 then preference_box.visible = false; return end - - table_prototypes.add{type="empty-widget", style="flib_horizontal_pusher"} - add_defaults_table(8, nil) - refresh_defaults_table(player, modal_elements, type, nil) - - else - local categories = global.prototypes[type] - if not next(categories) then preference_box.visible = false; return end - - local any_category_visible = false - for category_id, category in ipairs(categories) do - local prototypes = category.members - - if #prototypes > 1 then - any_category_visible = true - - table_prototypes.add{type="label", caption=("'" .. category.name .. "'")} - table_prototypes.add{type="empty-widget", style="flib_horizontal_pusher"} - - add_defaults_table(8, category_id) - refresh_defaults_table(player, modal_elements, type, category_id) - end - end - if not any_category_visible then preference_box.visible = false end - end -end - - -local function handle_checkbox_preference_change(player, tags, event) - local preference_name = tags.name - util.globals.preferences(player)[preference_name] = event.element.state - - local refresh = util.globals.modal_data(player).refresh - - if tags.type == "production" or preference_name == "round_button_numbers" - or preference_name == "show_floor_items" or preference_name == "fold_out_subfloors" then - refresh.production = true - end - - if preference_name == "ingredient_satisfaction" then - -- Only recalculate if the satisfaction data will actually be shown now - refresh.update_ingredient_satisfaction = (event.element.state) - refresh.production = true -- always refresh production - - elseif preference_name == "attach_subfactory_products" then - refresh.subfactory_list = true - end -end - -local function handle_mb_default_change(player, tags, event) - local mb_defaults = util.globals.preferences(player).mb_defaults - local module_name = event.element.elem_value - - mb_defaults[tags.type] = (module_name ~= nil) and MODULE_NAME_MAP[module_name] or nil -end - -local function handle_default_prototype_change(player, tags, event) - local type = tags.type - local category_id = tags.category_id - - local modal_data = util.globals.modal_data(player) - if type == "belts" then modal_data.refresh.view_state = true end - if type == "wagons" then modal_data.refresh.production = true end - - prototyper.defaults.set(player, type, tags.prototype_id, category_id) - refresh_defaults_table(player, modal_data.modal_elements, type, category_id) - - -- If this was an shift-click, set this prototype on every category that also has it - if event.shift and type == "machines" then - local new_default_prototype = prototyper.defaults.get(player, type, category_id) - - for _, secondary_category in pairs(PROTOTYPE_MAPS[type]) do - if table_size(secondary_category.members) > 1 then -- don't attempt to change categories with only one machine - local secondary_prototype = secondary_category.members[new_default_prototype.name] - - if secondary_prototype ~= nil then - prototyper.defaults.set(player, type, secondary_prototype.id, secondary_category.id) - refresh_defaults_table(player, modal_data.modal_elements, type, secondary_category.id) - end - end - end - end -end - - -local function open_preferences_dialog(player, modal_data) - local preferences = util.globals.preferences(player) - local modal_elements = modal_data.modal_elements - modal_data.refresh = {} - - local flow_content = modal_elements.dialog_flow.add{type="flow", direction="horizontal"} - flow_content.style.horizontal_spacing = 12 - - local function add_content_frame() - local content_frame = flow_content.add{type="frame", direction="vertical", style="inside_shallow_frame"} - content_frame.style.vertically_stretchable = true - - return content_frame.add{type="scroll-pane", style="flib_naked_scroll_pane"} - end - - local left_content_frame = add_content_frame() - - local info_frame = left_content_frame.add{type="frame", direction="vertical", style="fp_frame_bordered_stretch"} - local label_preferences_info = info_frame.add{type="label", caption={"fp.preferences_info"}} - label_preferences_info.style.single_line = false - label_preferences_info.style.width = 335 - - local support_frame = left_content_frame.add{type="frame", direction="vertical", style="fp_frame_bordered_stretch"} - support_frame.add{type="label", caption={"fp.preferences_support"}} - - local general_preference_names = {"attach_subfactory_products", "show_floor_items", "fold_out_subfloors", - "ingredient_satisfaction", "round_button_numbers", "ignore_barreling_recipes", "ignore_recycling_recipes"} - preference_structures.checkboxes(preferences, left_content_frame, "general", general_preference_names) - - local production_preference_names = {"done_column", "pollution_column", "line_comment_column"} - preference_structures.checkboxes(preferences, left_content_frame, "production", production_preference_names) - - preference_structures.mb_defaults(preferences, left_content_frame) - - local right_content_frame = add_content_frame() - - preference_structures.prototypes(player, right_content_frame, modal_elements, "belts") - preference_structures.prototypes(player, right_content_frame, modal_elements, "beacons") - preference_structures.prototypes(player, right_content_frame, modal_elements, "wagons") - preference_structures.prototypes(player, right_content_frame, modal_elements, "fuels") - preference_structures.prototypes(player, right_content_frame, modal_elements, "machines") -end - -local function close_preferences_dialog(player, _) - -- We refresh all these things only when closing to avoid duplicate refreshes - local refresh = util.globals.modal_data(player).refresh - - if refresh.update_ingredient_satisfaction then - local player_table = util.globals.player_table(player) - Factory.update_ingredient_satisfactions(player_table.factory) - Factory.update_ingredient_satisfactions(player_table.archive) - end - - if refresh.subfactory_list then - util.raise.refresh(player, "subfactory_list", nil) - end - - local context_to_refresh = nil -- don't refresh by default - - -- The order of these matters, they go from smallest context to biggest - if refresh.production then - context_to_refresh = "production" - end - - if refresh.view_state then - -- Rebuilding state requires every button that shows item amounts to refresh - view_state.rebuild_state(player) - context_to_refresh = "production" - end - - if refresh.calculations then - local context = util.globals.context(player) - solver.update(player, context.subfactory) - context_to_refresh = "subfactory" - end - - if context_to_refresh then - util.raise.refresh(player, context_to_refresh, nil) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "select_preference_default", - handler = handle_default_prototype_change - } - }, - on_gui_text_changed = { - { - name = "mb_default_beacon_amount", - handler = (function(player, _, event) - local mb_defaults = util.globals.preferences(player).mb_defaults - mb_defaults.beacon_count = tonumber(event.element.text) - end) - } - }, - on_gui_checked_state_changed = { - { - name = "toggle_preference", - handler = handle_checkbox_preference_change - } - }, - on_gui_elem_changed = { - { - name = "change_mb_default", - handler = handle_mb_default_change - } - } -} - -listeners.dialog = { - dialog = "preferences", - metadata = (function(_) return { - caption = {"fp.preferences"}, - create_content_frame = false - } end), - open = open_preferences_dialog, - close = close_preferences_dialog -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/recipe_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/recipe_dialog.lua deleted file mode 100644 index 12da16b7..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/recipe_dialog.lua +++ /dev/null @@ -1,338 +0,0 @@ --- ** LOCAL UTIL ** --- Serves the dual-purpose of determining the appropriate settings for the recipe picker filter and, if there --- is only one that matches, to return a recipe name that can be added directly without the modal dialog -local function run_preliminary_checks(player, modal_data) - local force_recipes, force_technologies = player.force.recipes, player.force.technologies - local preferences = util.globals.preferences(player) - - local relevant_recipes = {} - local user_disabled_recipe = false - local counts = {disabled = 0, hidden = 0, disabled_hidden = 0} - - local map = RECIPE_MAPS[modal_data.production_type][modal_data.category_id][modal_data.product_id] - if map ~= nil then -- this being nil means that the item has no recipes - for recipe_id, _ in pairs(map) do - local recipe = global.prototypes.recipes[recipe_id] - local force_recipe = force_recipes[recipe.name] - - if recipe.custom then -- Add custom recipes by default - table.insert(relevant_recipes, {proto=recipe, enabled=true}) - -- These are always enabled and non-hidden, so no need to tally them - -- They can also not be disabled by user preference - - elseif force_recipe ~= nil then -- only add recipes that exist on the current force - local user_disabled = (preferences.ignore_barreling_recipes and recipe.barreling) - or (preferences.ignore_recycling_recipes and recipe.recycling) - user_disabled_recipe = user_disabled_recipe or user_disabled - - if not user_disabled then -- only add recipes that are not disabled by the user - local recipe_enabled, recipe_hidden = force_recipe.enabled, recipe.hidden - local recipe_should_show = recipe.enabled_from_the_start or recipe_enabled - - -- If the recipe is not enabled, it has to be made sure that there is at - -- least one enabled technology that could potentially enable it - if not recipe_should_show and recipe.enabling_technologies ~= nil then - for _, technology_name in pairs(recipe.enabling_technologies) do - local force_tech = force_technologies[technology_name] - if force_tech and (force_tech.enabled or force_tech.visible_when_disabled) then - recipe_should_show = true - break - end - end - end - - if recipe_should_show then - table.insert(relevant_recipes, {proto=recipe, enabled=recipe_enabled}) - - if not recipe_enabled and recipe_hidden then counts.disabled_hidden = counts.disabled_hidden + 1 - elseif not recipe_enabled then counts.disabled = counts.disabled + 1 - elseif recipe_hidden then counts.hidden = counts.hidden + 1 end - end - end - end - end - end - - -- Set filters to try and show at least one recipe, should one exist, incorporating user preferences - local filters = {} - local user_prefs = preferences.recipe_filters - local relevant_recipes_count = #relevant_recipes - - if relevant_recipes_count - counts.disabled - counts.hidden - counts.disabled_hidden > 0 then - filters.disabled = user_prefs.disabled or false - filters.hidden = user_prefs.hidden or false - elseif relevant_recipes_count - counts.hidden - counts.disabled_hidden > 0 then - filters.disabled = true - filters.hidden = user_prefs.hidden or false - else - filters.disabled = true - filters.hidden = true - end - - -- Return result, format: return recipe, error-message, filters - if relevant_recipes_count == 0 then - local error = (user_disabled_recipe) and {"fp.error_no_enabled_recipe"} or {"fp.error_no_relevant_recipe"} - return nil, error, nil - - elseif relevant_recipes_count == 1 then - local chosen_recipe = relevant_recipes[1] - return chosen_recipe.proto.id, nil, nil - - else -- 2+ relevant recipes - return relevant_recipes, nil, filters - end -end - --- Tries to add the given recipe to the current floor, then exiting the modal dialog -local function attempt_adding_line(player, recipe_id) - local ui_state = util.globals.ui_state(player) - local modal_data = ui_state.modal_data - local recipe = Recipe.init_by_id(recipe_id, modal_data.production_type) - local line = Line.init(recipe) - - -- If finding a machine fails, this line is invalid - if Line.change_machine_to_default(line, player) == false then - util.messages.raise(player, "error", {"fp.error_no_compatible_machine"}, 1) - - else - local floor = Subfactory.get(ui_state.context.subfactory, "Floor", modal_data.floor_id) - -- If add_after_position is given, insert it below that one, add it to the end otherwise - if modal_data.add_after_position == nil then - Floor.add(floor, line) - else - Floor.insert_at(floor, (modal_data.add_after_position + 1), line) - end - - local message = nil - if not (recipe.proto.custom or player.force.recipes[recipe.proto.name].enabled) then - message = {text={"fp.warning_recipe_disabled"}, category="warning"} - end - local defaults_message = Line.apply_mb_defaults(line, player) - if not message then message = defaults_message end -- a bit silly - - solver.update(player, ui_state.context.subfactory) - util.raise.refresh(player, "subfactory", nil) - if message ~= nil then util.messages.raise(player, message.category, message.text, 1) end - end -end - - -local function create_filter_box(modal_data) - local bordered_frame = modal_data.modal_elements.content_frame.add{type="frame", style="fp_frame_bordered_stretch"} - - local table_filters = bordered_frame.add{type="table", column_count=2} - table_filters.style.horizontal_spacing = 16 - - local label_filters = table_filters.add{type="label", caption={"fp.show"}} - label_filters.style.top_margin = 2 - label_filters.style.left_margin = 4 - - local flow_filter_switches = table_filters.add{type="flow", direction="vertical"} - util.gui.switch.add_on_off(flow_filter_switches, "toggle_recipe_filter", {filter_name="disabled"}, - modal_data.filters.disabled, {"fp.unresearched_recipes"}, nil, false) - util.gui.switch.add_on_off(flow_filter_switches, "toggle_recipe_filter", {filter_name="hidden"}, - modal_data.filters.hidden, {"fp.hidden_recipes"}, nil, false) -end - -local function create_recipe_group_box(modal_data, relevant_group, translations) - local modal_elements = modal_data.modal_elements - local bordered_frame = modal_elements.content_frame.add{type="frame", style="fp_frame_bordered_stretch"} - bordered_frame.style.padding = 8 - - local next_index = #modal_elements.groups + 1 - modal_elements.groups[next_index] = {name=relevant_group.proto.name, frame=bordered_frame, recipe_buttons={}} - local recipe_buttons = modal_elements.groups[next_index].recipe_buttons - - local flow_group = bordered_frame.add{type="flow", direction="horizontal"} - flow_group.style.vertical_align = "center" - - local group_sprite = flow_group.add{type="sprite-button", sprite=("item-group/" .. relevant_group.proto.name), - tooltip=relevant_group.proto.localised_name, style="transparent_slot"} - group_sprite.style.size = 64 - group_sprite.style.right_margin = 12 - - local frame_recipes = flow_group.add{type="frame", direction="horizontal", style="fp_frame_deep_slots_small"} - local table_recipes = frame_recipes.add{type="table", column_count=MAGIC_NUMBERS.recipes_per_row, - style="filter_slot_table"} - - for _, recipe in pairs(relevant_group.recipes) do - local recipe_proto = recipe.proto - local recipe_name = recipe_proto.name - - local style = "flib_slot_button_green_small" - if not recipe.enabled then style = "flib_slot_button_yellow_small" - elseif recipe_proto.hidden then style = "flib_slot_button_default_small" end - - local button_tags = {mod="fp", on_gui_click="pick_recipe", recipe_proto_id=recipe_proto.id} - local button_recipe = nil - - if recipe_proto.custom then -- can't use choose-elem-buttons for custom recipes - button_recipe = table_recipes.add{type="sprite-button", tags=button_tags, style=style, - sprite=recipe_proto.sprite, tooltip=recipe_proto.tooltip, mouse_button_filter={"left"}} - else - button_recipe = table_recipes.add{type="choose-elem-button", elem_type="recipe", tags=button_tags, - style=style, recipe=recipe_name, mouse_button_filter={"left"}} - button_recipe.locked = true - end - - -- Figure out the translated name here so search doesn't have to repeat the work for every character - local translated_name = (translations) and translations["recipe"][recipe_name] or nil - translated_name = (translated_name) and translated_name:lower() or recipe_name - recipe_buttons[{name=recipe_name, translated_name=translated_name, hidden=recipe_proto.hidden}] = button_recipe - end -end - -local function create_dialog_structure(modal_data, translations) - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - content_frame.style.width = 380 - - create_filter_box(modal_data) - - local label_warning = content_frame.add{type="label", caption={"fp.error_message", {"fp.no_recipe_found"}}} - label_warning.style.font = "heading-2" - label_warning.style.margin = {8, 0, 0, 8} - modal_elements.warning_label = label_warning - - modal_elements.groups = {} - for _, group in ipairs(ORDERED_RECIPE_GROUPS) do - local relevant_group = modal_data.recipe_groups[group.name] - - -- Only actually create this group if it contains any relevant recipes - if relevant_group ~= nil then create_recipe_group_box(modal_data, relevant_group, translations) end - end -end - -local function apply_recipe_filter(player, search_term) - local modal_data = util.globals.modal_data(player) - local disabled, hidden = modal_data.filters.disabled, modal_data.filters.hidden - - local any_recipe_visible, desired_scroll_pane_height = false, 64+24 - for _, group in ipairs(modal_data.modal_elements.groups) do - local group_data = modal_data.recipe_groups[group.name] - local any_group_recipe_visible = false - - for recipe_data, button in pairs(group.recipe_buttons) do - local recipe_name = recipe_data.name - local recipe_enabled = group_data.recipes[recipe_name].enabled - - - -- Can only get to this if translations are complete, as the textfield is disabled otherwise - local found = (search_term == recipe_name) or string.find(recipe_data.translated_name, search_term, 1, true) - local visible = found and (disabled or recipe_enabled) and (hidden or not recipe_data.hidden) - - button.visible = visible - any_group_recipe_visible = any_group_recipe_visible or visible - end - - group.frame.visible = any_group_recipe_visible - any_recipe_visible = any_recipe_visible or any_group_recipe_visible - - local button_table_height = math.ceil(table_size(group.recipe_buttons) / MAGIC_NUMBERS.recipes_per_row) * 36 - local additional_height = math.max(88, button_table_height + 24) + 4 - desired_scroll_pane_height = desired_scroll_pane_height + additional_height - end - - modal_data.modal_elements.warning_label.visible = not any_recipe_visible - - local scroll_pane_height = math.min(desired_scroll_pane_height, modal_data.dialog_maximal_height) - modal_data.modal_elements.content_frame.style.height = scroll_pane_height -end - - -local function handle_filter_change(player, tags, event) - local boolean_state = util.gui.switch.convert_to_boolean(event.element.switch_state) - util.globals.modal_data(player).filters[tags.filter_name] = boolean_state - util.globals.preferences(player).recipe_filters[tags.filter_name] = boolean_state - - apply_recipe_filter(player, "") -end - - --- Checks whether the dialog needs to be created at all -local function recipe_early_abort_check(player, modal_data) - -- Result is either the single possible recipe_id, or a table of relevant recipes - local result, error, filters = run_preliminary_checks(player, modal_data) - - if error ~= nil then - util.messages.raise(player, "error", error, 1) - return true -- signal that the dialog does not need to actually be opened - - else - -- If 1 relevant recipe is found, try it straight away - if type(result) == "number" then -- the given number being the recipe_id - attempt_adding_line(player, result) - return true -- idem. above - - else -- Otherwise, save the relevant data for the dialog opener - modal_data.result = result - modal_data.filters = filters - return false -- signal that the dialog should be opened - end - end -end - --- Handles populating the recipe dialog -local function open_recipe_dialog(player, modal_data) - -- At this point, we're sure the dialog should be opened - local recipe_groups = {} - for _, recipe in pairs(modal_data.result) do - local group_name = recipe.proto.group.name - recipe_groups[group_name] = recipe_groups[group_name] or {proto=recipe.proto.group, recipes={}} - recipe_groups[group_name].recipes[recipe.proto.name] = recipe - end - modal_data.recipe_groups = recipe_groups - - local translations = util.globals.player_table(player).translation_tables - create_dialog_structure(modal_data, translations) - apply_recipe_filter(player, "") - modal_data.modal_elements.search_textfield.focus() - - -- Dispose of the temporary GUI-opening variables - modal_data.result = nil -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "pick_recipe", - timeout = 20, - handler = (function(player, tags, _) - attempt_adding_line(player, tags.recipe_proto_id) - util.raise.close_dialog(player, "cancel") - end) - } - }, - on_gui_switch_state_changed = { - { - name = "toggle_recipe_filter", - handler = handle_filter_change - } - } -} - -listeners.dialog = { - dialog = "recipe", - metadata = (function(modal_data) - local product_proto = global.prototypes.items[modal_data.category_id].members[modal_data.product_id] - return { - caption = {"", {"fp.add"}, " ", {"fp.pl_recipe", 1}}, - subheader_text = {"fp.recipe_instruction", {"fp." .. modal_data.production_type}, - product_proto.localised_name}, - search_handler_name = "apply_recipe_filter", - create_content_frame = true - } - end), - early_abort_check = recipe_early_abort_check, - open = open_recipe_dialog -} - -listeners.global = { - apply_recipe_filter = apply_recipe_filter -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/subfactory_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/subfactory_dialog.lua deleted file mode 100644 index 9056cabe..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/subfactory_dialog.lua +++ /dev/null @@ -1,122 +0,0 @@ --- ** LOCAL UTIL ** -local function update_submit_button(player, _, _) - local modal_elements = util.globals.modal_elements(player) - local name_length = string.len(modal_elements["subfactory_name"].text:gsub("^%s*(.-)%s*$", "%1")) - local issue_message = {"fp.subfactory_dialog_name_empty"} - modal_dialog.set_submit_button_state(modal_elements, (name_length > 0), issue_message) -end - -local function add_rich_text(player, tags, event) - local modal_elements = util.globals.modal_elements(player) - local subfactory_name = modal_elements.subfactory_name.text - local type, elem_value = tags.type, event.element.elem_value - if elem_value == nil then return end -- no need to do anything here - - if type == "signal" then - -- Signal types are insanely stupid - if not elem_value.name then event.element.elem_value = nil; return end - if elem_value.type == "virtual" then type = "virtual-signal" - else type = elem_value.type end - elem_value = elem_value.name - end - - local rich_text = "[" .. type .. "=" .. elem_value .. "]" - modal_elements.subfactory_name.text = subfactory_name .. rich_text - - event.element.elem_value = nil - update_submit_button(player) -end - - -local function open_subfactory_dialog(player, modal_data) - local factory = util.globals.context(player).factory - modal_data.subfactory = Factory.get(factory, "Subfactory", modal_data.subfactory_id) - - local modal_elements = modal_data.modal_elements - local content_frame = modal_elements.content_frame - - local flow_name = content_frame.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - flow_name.add{type="label", caption={"fp.info_label", {"fp.subfactory_dialog_name"}}, - tooltip={"fp.subfactory_dialog_name_tt"}} - - local subfactory_name = (modal_data.subfactory ~= nil) and modal_data.subfactory.name or "" - local textfield_name = flow_name.add{type="textfield", text=subfactory_name, - tags={mod="fp", on_gui_text_changed="subfactory_name"}} - textfield_name.style.rich_text_setting = defines.rich_text_setting.enabled - textfield_name.style.width = 250 - textfield_name.focus() - modal_elements["subfactory_name"] = textfield_name - - local flow_rich_text = content_frame.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - flow_rich_text.style.top_margin = 8 - flow_rich_text.add{type="label", caption={"fp.info_label", {"fp.subfactory_dialog_rich_text"}}, - tooltip={"fp.subfactory_dialog_rich_text_tt"}} - - local signal_flow = flow_rich_text.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - signal_flow.style.horizontal_spacing = 6 - signal_flow.add{type="label", caption={"fp.subfactory_dialog_signals"}} - signal_flow.add{type="choose-elem-button", elem_type="signal", style="fp_sprite-button_inset_tiny", - tags={mod="fp", on_gui_elem_changed="add_rich_text", type="signal"}} - - local recipe_flow = flow_rich_text.add{type="flow", direction="horizontal", style="fp_flow_horizontal_centered"} - recipe_flow.style.horizontal_spacing = 6 - recipe_flow.add{type="label", caption={"fp.subfactory_dialog_recipes"}} - recipe_flow.add{type="choose-elem-button", elem_type="recipe", style="fp_sprite-button_inset_tiny", - tags={mod="fp", on_gui_elem_changed="add_rich_text", type="recipe"}} - - update_submit_button(player) -end - -local function close_subfactory_dialog(player, action) - local modal_data = util.globals.modal_data(player) - - if action == "submit" then - local name_textfield = modal_data.modal_elements.subfactory_name - local subfactory_name = name_textfield.text:gsub("^%s*(.-)%s*$", "%1") - - if modal_data.subfactory ~= nil then modal_data.subfactory.name = subfactory_name - else subfactory_list.add_subfactory(player, subfactory_name) end - - util.raise.refresh(player, "all", nil) - - elseif action == "delete" then - subfactory_list.delete_subfactory(player) -- handles archiving if necessary - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_text_changed = { - { - name = "subfactory_name", - handler = update_submit_button - } - }, - on_gui_elem_changed = { - { - name = "add_rich_text", - handler = add_rich_text - } - } -} - -listeners.dialog = { - dialog = "subfactory", - metadata = (function(modal_data) - local action = (modal_data.subfactory_id) and {"fp.edit"} or {"fp.add"} - return { - caption = {"", action, " ", {"fp.pl_subfactory", 1}}, - subheader_text = {"fp.subfactory_dialog_description"}, - create_content_frame = true, - show_submit_button = true, - show_delete_button = (modal_data.subfactory_id ~= nil) - } - end), - open = open_subfactory_dialog, - close = close_subfactory_dialog -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/tutorial_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/tutorial_dialog.lua deleted file mode 100644 index 6adb2961..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/tutorial_dialog.lua +++ /dev/null @@ -1,124 +0,0 @@ --- ** LOCAL UTIL ** -local tab_definitions = {"interface", "usage", "matrix_solver"} - -function tab_definitions.interface(player, tab, tab_pane) - tab.caption = {"fp.interface"} - - local function add_base_frame(name) - local frame = tab_pane.add{type="frame", style="fp_frame_bordered_stretch", direction="vertical"} - frame.style.horizontally_stretchable = true - - frame.add{type="label", caption={"fp." .. name .. "_tutorial_title"}, style="caption_label"} - local label_text = frame.add{type="label", caption={"fp." .. name .. "_tutorial_text"}} - label_text.style.single_line = false - - return frame - end - - -- Interactive tutorial - local frame_interactive = add_base_frame("interactive") - local flow_interactive = frame_interactive.add{type="flow", direction="horizontal"} - flow_interactive.style.margin = {12, 20, 8, 20} - - flow_interactive.add{type="empty-widget", style="flib_horizontal_pusher"} - - -- If the tutorial subfactory is valid, it can be imported regardless of the current modset - local subfactory_valid = (global.tutorial_subfactory ~= nil and global.tutorial_subfactory.valid) - local button_tooltip = (not subfactory_valid) and {"fp.warning_message", {"fp.create_example_error"}} or nil - flow_interactive.add{type="button", tags={mod="fp", on_gui_click="add_example_subfactory"}, - caption={"fp.create_example"}, tooltip=button_tooltip, enabled=subfactory_valid, mouse_button_filter={"left"}} - - flow_interactive.add{type="empty-widget", style="flib_horizontal_pusher"} - - local tutorial_mode = util.globals.preferences(player).tutorial_mode - util.gui.switch.add_on_off(flow_interactive, "toggle_tutorial_mode", {}, tutorial_mode, - {"fp.tutorial_mode"}, nil, true) - - flow_interactive.add{type="empty-widget", style="flib_horizontal_pusher"} - - -- Interface tutorial - local frame_interface = add_base_frame("interface") - local recipebook_string = (RECIPEBOOK_ACTIVE) and {"fp.interface_controls_recipebook"} or "" - local label_controls = frame_interface.add{type="label", caption={"", {"fp.interface_controls"}, recipebook_string}} - label_controls.style.single_line = false - label_controls.style.margin = {6, 0, 0, 6} -end - -function tab_definitions.usage(_, tab, tab_pane) - tab.caption = {"fp.usage"} - - local bordered_frame = tab_pane.add{type="frame", style="fp_frame_bordered_stretch"} - local label_text = bordered_frame.add{type="label", caption={"fp.tutorial_usage_text"}} - label_text.style.single_line = false - label_text.style.padding = 2 -end - -function tab_definitions.matrix_solver(_, tab, tab_pane) - tab.caption = {"fp.matrix_solver"} - - local bordered_frame = tab_pane.add{type="frame", style="fp_frame_bordered_stretch"} - local label_text = bordered_frame.add{type="label", caption={"fp.tutorial_matrix_solver_text"}} - label_text.style.single_line = false - label_text.style.padding = 2 -end - - -local function open_tutorial_dialog(player, modal_data) - local frame_tabs = modal_data.modal_elements.dialog_flow.add{type="frame", style="inside_deep_frame_for_tabs"} - - local tabbed_pane = frame_tabs.add{type="tabbed-pane", style="tabbed_pane_with_no_side_padding"} - tabbed_pane.style.height = 600 - - for _, tab_name in ipairs(tab_definitions) do - local tab = tabbed_pane.add{type="tab"} - local tab_pane = tabbed_pane.add{type="scroll-pane", style="flib_naked_scroll_pane_under_tabs"} - tab_pane.style.width = 555 - - tab_definitions[tab_name](player, tab, tab_pane) - tabbed_pane.add_tab(tab, tab_pane) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "add_example_subfactory", - timeout = 20, - handler = (function(player, _, _) - -- If this button can be pressed, the tutorial subfactory is valid implicitly - local player_table = util.globals.player_table(player) - local subfactory = Factory.add(player_table.factory, global.tutorial_subfactory) - solver.update(player, subfactory) - util.context.set_subfactory(player, subfactory) - - util.raise.refresh(player, "all", nil) - util.raise.close_dialog(player, "cancel") - end) - } - }, - on_gui_switch_state_changed = { - { - name = "toggle_tutorial_mode", - handler = (function(player, _, event) - local preferences = util.globals.preferences(player) - preferences.tutorial_mode = util.gui.switch.convert_to_boolean(event.element.switch_state) - util.raise.refresh(player, "all", nil) - end) - } - } -} - -listeners.dialog = { - dialog = "tutorial", - metadata = (function(_) return { - caption = {"fp.tutorial"}, - create_content_frame = false - } end), - open = open_tutorial_dialog -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/dialogs/utility_dialog.lua b/factoryplanner_1.1.72/ui/dialogs/utility_dialog.lua deleted file mode 100644 index eb4ec51a..00000000 --- a/factoryplanner_1.1.72/ui/dialogs/utility_dialog.lua +++ /dev/null @@ -1,449 +0,0 @@ --- ** LOCAL UTIL ** --- Adds a box with title and optional scope switch for the given type of utility -local function add_utility_box(player, modal_elements, type, show_tooltip, show_switch) - local bordered_frame = modal_elements.content_frame.add{type="frame", direction="vertical", - style="fp_frame_bordered_stretch"} - modal_elements[type .. "_box"] = bordered_frame - - local flow_title_bar = bordered_frame.add{type="flow", direction="horizontal"} - flow_title_bar.style.vertical_align = "center" - flow_title_bar.style.margin = {2, 0, 4, 0} - - -- Title - local caption = (show_tooltip) and {"fp.info_label", {"fp.utility_title_".. type}} or {"fp.utility_title_".. type} - local tooltip = (show_tooltip) and {"fp.utility_title_" .. type .. "_tt"} - local label_title = flow_title_bar.add{type="label", caption=caption, tooltip=tooltip, style="caption_label"} - label_title.style.top_margin = -2 - - -- Empty flow for custom controls - flow_title_bar.add{type="empty-widget", style="flib_horizontal_pusher"} - local flow_custom = flow_title_bar.add{type="flow"} - flow_custom.style.right_margin = 12 - - -- Scope switch - local scope_switch = nil - if show_switch then - local utility_scope = util.globals.preferences(player).utility_scopes[type] - local switch_state = (utility_scope == "Subfactory") and "left" or "right" - scope_switch = flow_title_bar.add{type="switch", switch_state=switch_state, - tags={mod="fp", on_gui_switch_state_changed="utility_change_scope", utility_type=type}, - left_label_caption={"fp.pu_subfactory", 1}, right_label_caption={"fp.pu_floor", 1}} - end - - return bordered_frame, flow_custom, scope_switch -end - - -local utility_structures = {} - -local function update_request_button(player, modal_data, subfactory) - local modal_elements = modal_data.modal_elements - - local button_enabled, switch_enabled = true, true - local caption = "" ---@type LocalisedString - local tooltip = "" ---@type LocalisedString - local font_color = {} - - if subfactory.item_request_proxy ~= nil then - caption = {"fp.cancel_request"} - font_color = {0.8, 0, 0} - switch_enabled = false - - else - local scope = util.globals.preferences(player).utility_scopes.components - local scope_string = {"fp.pl_" .. scope:lower(), 1} - caption, tooltip = {"fp.request_items"}, {"fp.request_items_tt", scope_string} - - if not player.force.character_logistic_requests then - tooltip = {"fp.warning_with_icon", {"fp.request_logistics_not_researched"}} - button_enabled = false - elseif not next(modal_data.missing_items) then - tooltip = {"fp.warning_with_icon", {"fp.utility_no_items_necessary", scope_string}} - button_enabled = false - elseif player.character == nil then -- happens when the editor is active for example - tooltip = {"fp.warning_with_icon", {"fp.request_no_character"}} - button_enabled = false - end - end - - modal_elements.request_button.caption = caption - modal_elements.request_button.tooltip = tooltip - modal_elements.request_button.style.font_color = font_color - modal_elements.request_button.enabled = button_enabled - modal_elements.scope_switch.enabled = switch_enabled -end - -function utility_structures.components(player, modal_data) - local scope = util.globals.preferences(player).utility_scopes.components - local lower_scope = scope:lower() - local context = util.globals.context(player) - local modal_elements = modal_data.modal_elements - - if modal_elements.components_box == nil then - local components_box, custom_flow, scope_switch = add_utility_box(player, modal_data.modal_elements, - "components", true, true) - modal_elements.components_box = components_box - modal_elements.scope_switch = scope_switch - - local button_combinator = custom_flow.add{type="sprite-button", sprite="item/constant-combinator", - tooltip={"fp.ingredients_to_combinator_tt"}, tags={mod="fp", on_gui_click="utility_item_combinator"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - button_combinator.style.size = 29 - button_combinator.style.padding = 0 - modal_elements.combinator_button = button_combinator - - local button_request = custom_flow.add{type="button", tags={mod="fp", on_gui_click="utility_request_items"}, - style="rounded_button", mouse_button_filter={"left"}} - button_request.style.minimal_width = 0 - modal_elements.request_button = button_request - - local table_components = components_box.add{type="table", column_count=2} - table_components.style.horizontal_spacing = 24 - table_components.style.vertical_spacing = 8 - - local function add_component_row(type) - table_components.add{type="label", caption={"fp.pu_" .. type, 2}, style="heading_3_label"} - - local flow = table_components.add{type="flow", direction="horizontal"} - modal_elements["components_" .. type .. "_flow"] = flow - end - - add_component_row("machine") - add_component_row("module") - end - - - local function refresh_component_flow(type) - local component_row = modal_elements["components_" .. type .. "_flow"] - component_row.clear() - - local inventory_contents = modal_data.inventory_contents - local component_data = _G[scope].get_component_data(context[lower_scope], nil) - - local frame_components = component_row.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - local table_components = frame_components.add{type="table", column_count=10, style="filter_slot_table"} - - for _, component in pairs(component_data[type .. "s"]) do - if component.amount > 0 then - local proto, required_amount = component.proto, component.amount - local amount_in_inventory = inventory_contents[proto.name] or 0 - local missing_amount = required_amount - amount_in_inventory - - if missing_amount > 0 then modal_data.missing_items[proto.name] = missing_amount end - - local button_style = nil - if amount_in_inventory == 0 then button_style = "flib_slot_button_red" - elseif missing_amount > 0 then button_style = "flib_slot_button_yellow" - else button_style = "flib_slot_button_green" end - - local tooltip = {"fp.components_needed_tt", {"fp.tt_title", proto.localised_name}, - amount_in_inventory, required_amount} - - local category_id = (proto.data_type == "items") and proto.category_id - or PROTOTYPE_MAPS.items["item"].id -- modules/beacons are always an 'item' - local proto_id = (proto.data_Type == "items") and proto.id or - PROTOTYPE_MAPS.items["item"].members[proto.name].id - table_components.add{type="sprite-button", sprite=proto.sprite, number=required_amount, tooltip=tooltip, - tags={mod="fp", on_gui_click="utility_craft_items", category_id=category_id, item_id=proto_id, - missing_amount=missing_amount}, style=button_style, mouse_button_filter={"left-and-right"}} - end - end - - if not next(table_components.children_names) then - frame_components.visible = false - local label = component_row.add{type="label", caption={"fp.no_components_needed", {"fp.pl_" .. type, 2}}} - label.style.margin = {10, 0} - end - end - - modal_data.missing_items = {} -- a flat structure works because there is no overlap between machines and modules - refresh_component_flow("machine") - refresh_component_flow("module") - - - local subfactory = util.globals.context(player).subfactory - Subfactory.validate_item_request_proxy(subfactory) - - local any_missing_items = (next(modal_data.missing_items) ~= nil) - modal_elements.combinator_button.enabled = any_missing_items - modal_elements.combinator_button.tooltip = (any_missing_items) and {"fp.utility_combinator_tt"} - or {"fp.warning_with_icon", {"fp.utility_no_items_necessary", {"fp.pl_" .. lower_scope, 1}}} - - update_request_button(player, modal_data, subfactory) -end - -function utility_structures.blueprints(player, modal_data) - local modal_elements = modal_data.modal_elements - - if modal_elements.blueprints_box == nil then - local blueprints_box = add_utility_box(player, modal_data.modal_elements, "blueprints", true, false) - modal_elements["blueprints_box"] = blueprints_box - - local frame_blueprints = blueprints_box.add{type="frame", direction="horizontal", style="slot_button_deep_frame"} - local table_blueprints = frame_blueprints.add{type="table", column_count=MAGIC_NUMBERS.blueprint_limit, - style="filter_slot_table"} - modal_elements["blueprints_table"] = table_blueprints - end - - local subfactory = util.globals.context(player).subfactory - local blueprints = subfactory.blueprints - - local table_blueprints = modal_elements["blueprints_table"] - table_blueprints.clear() - - local tutorial_tt = (util.globals.preferences(player).tutorial_mode) - and util.actions.tutorial_tooltip("act_on_blueprint", nil, player) or nil - - local function format_signal(signal) - local type = (signal.type == "virtual") and "virtual-signal" or signal.type - return (type .. "/" .. signal.name) - end - - local blueprint = modal_data.utility_inventory[1] -- re-usable inventory slot - for index, blueprint_string in pairs(blueprints) do - blueprint.import_stack(blueprint_string) - local blueprint_book = blueprint.is_blueprint_book - - local tooltip = {"", (blueprint.label or "Blueprint"), tutorial_tt} - local sprite = (blueprint_book) and "item/blueprint-book" or "item/blueprint" - local button = table_blueprints.add{type="sprite-button", sprite=sprite, tooltip=tooltip, - tags={mod="fp", on_gui_click="act_on_blueprint", index=index}, mouse_button_filter={"left-and-right"}} - - local icons = (not blueprint_book) and blueprint.blueprint_icons - or blueprint.get_inventory(defines.inventory.item_main)[1].blueprint_icons - if icons then -- this is jank-hell - local icon_count = #icons - local flow = button.add{type="flow", direction="horizontal", ignored_by_interaction=true} - local top_margin = (blueprint_book) and 4 or 7 - - if icon_count == 1 then - local sprite_icon = flow.add{type="sprite", sprite=format_signal(icons[1].signal)} - sprite_icon.style.margin = {top_margin, 0, 0, 7} - else - flow.style.padding = {4, 0, 0, 3} - local table = flow.add{type="table", column_count=2} - table.style.cell_padding = -4 - if icon_count == 2 then table.style.top_margin = top_margin end - for _, icon in pairs(icons) do - table.add{type="sprite", sprite=format_signal(icon.signal)} - end - end - end - - blueprint.clear() - end - - if #blueprints < MAGIC_NUMBERS.blueprint_limit then - table_blueprints.add{type="sprite-button", tags={mod="fp", on_gui_click="utility_store_blueprint"}, - sprite="utility/add", style="fp_sprite-button_inset_add_slot", mouse_button_filter={"left"}} - end -end - -function utility_structures.notes(player, modal_data) - local utility_box = add_utility_box(player, modal_data.modal_elements, "notes", false, false) - - local notes = util.globals.context(player).subfactory.notes - local text_box = utility_box.add{type="text-box", text=notes, - tags={mod="fp", on_gui_text_changed="subfactory_notes"}} - text_box.style.size = {500, 250} - text_box.word_wrap = true - text_box.style.top_margin = -2 -end - - -local function handle_scope_change(player, tags, event) - local utility_scope = (event.element.switch_state == "left") and "Subfactory" or "Floor" - util.globals.preferences(player).utility_scopes[tags.utility_type] = utility_scope - - local modal_data = util.globals.modal_data(player) - utility_structures.components(player, modal_data) -end - -local function handle_item_request(player, _, _) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - - if subfactory.item_request_proxy then -- if an item_proxy is set, cancel it - Subfactory.destroy_item_request_proxy(subfactory) - else - -- This crazy way to request items actually works, and is way easier than setting logistic requests - -- The advantage that is has is that the delivery is one-time, not a constant request - -- The disadvantage is that it's weird to have construction bots bring you stuff - subfactory.item_request_proxy = player.surface.create_entity{name="item-request-proxy", - position=player.position, force=player.force, target=player.character, - modules=ui_state.modal_data.missing_items} - end - - update_request_button(player, ui_state.modal_data, subfactory) -end - -local function handle_item_handcraft(player, tags, event) - local fly_text = util.cursor.create_flying_text - if not player.character then fly_text(player, {"fp.utility_no_character"}); return end - - local permissions = player.permission_group - local forbidden = (permissions and not permissions.allows_action(defines.input_action.craft)) - if forbidden then fly_text(player, {"fp.utility_no_crafting"}); return end - - local desired_amount = (event.button == defines.mouse_button_type.right) and 5 or 1 - local amount_to_craft = math.min(desired_amount, tags.missing_amount) - - if amount_to_craft <= 0 then fly_text(player, {"fp.utility_no_demand"}); return end - - local recipes = RECIPE_MAPS["produce"][tags.category_id][tags.item_id] - if not recipes then fly_text(player, {"fp.utility_no_recipe"}); return end - - local success = false - for recipe_id, _ in pairs(recipes) do - local recipe_name = global.prototypes.recipes[recipe_id].name - local craftable_amount = player.get_craftable_count(recipe_name) - - if craftable_amount > 0 then - success = true - local crafted_amount = math.min(amount_to_craft, craftable_amount) - player.begin_crafting{count=crafted_amount, recipe=recipe_name, silent=true} - amount_to_craft = amount_to_craft - crafted_amount - break - end - end - if not success then fly_text(player, {"fp.utility_no_resources"}); end -end - -local function handle_inventory_change(player) - local ui_state = util.globals.ui_state(player) - - if ui_state.modal_dialog_type == "utility" then - ui_state.modal_data.inventory_contents = player.get_main_inventory().get_contents() - utility_structures.components(player, ui_state.modal_data) - end -end - - -local function store_blueprint(player, _, _) - local ui_state = util.globals.ui_state(player) - local fly_text = util.cursor.create_flying_text - - if player.is_cursor_empty() then - fly_text(player, {"fp.utility_cursor_empty"}); return - end - local cursor = player.cursor_stack - if not (cursor.is_blueprint or cursor.is_blueprint_book) then - if cursor.valid_for_read then - fly_text(player, {"fp.utility_no_blueprint"}); return - else - fly_text(player, {"fp.utility_blueprint_from_library"}); return - end - end - if cursor.is_blueprint then - if not cursor.is_blueprint_setup() then fly_text(player, {"fp.utility_blueprint_not_setup"}); return end - else -- blueprint book - local inventory = cursor.get_inventory(defines.inventory.item_main) - if inventory.is_empty() then fly_text(player, {"fp.utility_blueprint_book_empty"}); return end - end - - table.insert(ui_state.context.subfactory.blueprints, cursor.export_stack()) - fly_text(player, {"fp.utility_blueprint_stored"}); - player.clear_cursor() -- doesn't delete blueprint, but puts it back in the inventory - - utility_structures.blueprints(player, ui_state.modal_data) -end - -local function handle_blueprint_click(player, tags, action) - local ui_state = util.globals.ui_state(player) - local blueprints = ui_state.context.subfactory.blueprints - - if action == "pick_up" then - player.cursor_stack.import_stack(blueprints[tags.index]) - util.raise.close_dialog(player, "cancel") - main_dialog.toggle(player) - - elseif action == "delete" then - table.remove(blueprints, tags.index) - utility_structures.blueprints(player, ui_state.modal_data) - end -end - - -local function open_utility_dialog(player, modal_data) - -- Add the players' relevant inventory components to modal_data - modal_data.inventory_contents = player.get_main_inventory().get_contents() - modal_data.utility_inventory = game.create_inventory(1) -- used for blueprint decoding - - utility_structures.components(player, modal_data) - utility_structures.blueprints(player, modal_data) - utility_structures.notes(player, modal_data) -end - -local function close_utility_dialog(player, _) - util.globals.modal_data(player).utility_inventory.destroy() - util.raise.refresh(player, "subfactory_info", nil) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "utility_item_combinator", - timeout = 20, - handler = (function(player, _, _) - local missing_items = util.globals.modal_data(player).missing_items - local success = util.cursor.set_item_combinator(player, missing_items) - if success then util.raise.close_dialog(player, "cancel"); main_dialog.toggle(player) end - end) - }, - { - name = "utility_request_items", - timeout = 20, - handler = handle_item_request - }, - { - name = "utility_craft_items", - handler = handle_item_handcraft - }, - { - name = "utility_store_blueprint", - handler = store_blueprint - }, - { - name = "act_on_blueprint", - modifier_actions = { - pick_up = {"left"}, - delete = {"control-right"} - }, - handler = handle_blueprint_click - }, - }, - on_gui_switch_state_changed = { - { - name = "utility_change_scope", - handler = handle_scope_change - } - }, - on_gui_text_changed = { - { - name = "subfactory_notes", - handler = (function(player, _, event) - util.globals.context(player).subfactory.notes = event.element.text - end) - } - } -} - -listeners.dialog = { - dialog = "utility", - metadata = (function(_) return { - caption = {"fp.utilities"}, - create_content_frame = true - } end), - open = open_utility_dialog, - close = close_utility_dialog -} - -listeners.misc = { - on_player_main_inventory_changed = handle_inventory_change -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/elements/module_configurator.lua b/factoryplanner_1.1.72/ui/elements/module_configurator.lua deleted file mode 100644 index 00ad74d8..00000000 --- a/factoryplanner_1.1.72/ui/elements/module_configurator.lua +++ /dev/null @@ -1,225 +0,0 @@ --- Contains the UI and event handling for machine/beacon modules -module_configurator = {} - --- ** LOCAL UTIL** -local function determine_slider_config(module, empty_slots) - local slider_value = (module) and module.amount or empty_slots - local maximum_value = (module) and (module.amount + empty_slots) or empty_slots - local minimum_value = (maximum_value == 1) and 0 or 1 -- to make sure that the slider can be created - return slider_value, maximum_value, minimum_value -end - -local function add_module_frame(parent_flow, module, module_filters, empty_slots) - local module_id = module and module.id or nil - - local frame_module = parent_flow.add{type="frame", style="fp_frame_module", direction="horizontal", - tags={module_id=module_id}} - frame_module.add{type="label", caption={"fp.pu_module", 1}, style="heading_3_label"} - - local module_name = (module) and module.proto.name or nil - local button_module = frame_module.add{type="choose-elem-button", name="fp_chooser_module", elem_type="item", - item=module_name, tags={mod="fp", on_gui_elem_changed="select_module", module_id=module_id}, - elem_filters=module_filters, style="fp_sprite-button_inset_tiny"} - button_module.style.right_margin = 12 - - frame_module.add{type="label", caption={"fp.amount"}, style="heading_3_label"} - - local slider_value, maximum_value, minimum_value = determine_slider_config(module, empty_slots) - local slider_style = (maximum_value == 1) and "fp_slider_module_none" or "fp_slider_module" - local slider = frame_module.add{type="slider", name="fp_slider_module_amount", style=slider_style, - tags={mod="fp", on_gui_value_changed="module_amount", module_id=module_id}, - minimum_value=minimum_value, maximum_value=maximum_value, value=slider_value, value_step=0.1} - -- Fix for the slider value step "not bug" (see https://forums.factorio.com/viewtopic.php?p=516440#p516440) - -- Fixed by setting step to something other than 1 first, then setting it to 1 - slider.set_slider_value_step(1) - slider.enabled = (maximum_value ~= 1) -- needs to be set here because sliders are buggy as fuck - - local textfield = frame_module.add{type="textfield", name="fp_textfield_module_amount", enabled=(maximum_value ~= 1), - text=tostring(slider_value), tags={mod="fp", on_gui_text_changed="module_amount", module_id=module_id}} - util.gui.setup_numeric_textfield(textfield, false, false) - textfield.style.width = 40 -end - -local function add_effects_section(parent_flow, object, modal_elements) - local frame_effects = parent_flow.add{type="frame", direction="vertical", style="fp_frame_bordered_stretch"} - frame_effects.style.vertically_stretchable = true - frame_effects.style.width = (460 / 2) - 14 - - local class_lower = object.class:lower() - local caption = {"", {"fp.pu_" .. class_lower, 1}, " ", {"fp.effects"}} - frame_effects.add{type="label", caption=caption, style="heading_3_label"} - - local label_effects = frame_effects.add{type="label", caption=object.effects_tooltip} - label_effects.style.top_margin = -40 -- need this because extracting linebreaks from LS is hard - label_effects.style.single_line = false - modal_elements[class_lower .. "_effects_label"] = label_effects -end - - -local function handle_module_selection(player, tags, event) - local modal_data = util.globals.modal_data(player) - local module_set = modal_data.module_set - local new_name = event.element.elem_value - - if tags.module_id then -- editing an existing module - local module = ModuleSet.get(module_set, tags.module_id) - if new_name then -- changed to another module - module.proto = MODULE_NAME_MAP[new_name] - Module.summarize_effects(module) - else -- removed module - ModuleSet.remove(module_set, module) - end - elseif new_name then -- choosing a new module on an empty line - local slider = event.element.parent["fp_slider_module_amount"] - ModuleSet.add(module_set, MODULE_NAME_MAP[new_name], slider.slider_value) - end - - ModuleSet.normalize(module_set, {effects=true}) - module_configurator.refresh_modules_flow(player, false) -end - -local function handle_module_slider_change(player, tags, event) - local modal_data = util.globals.modal_data(player) - local module_set = modal_data.module_set - local new_slider_value = event.element.slider_value - local module_textfield = event.element.parent["fp_textfield_module_amount"] - - if tags.module_id then -- editing an existing module - local module = ModuleSet.get(module_set, tags.module_id) - Module.set_amount(module, new_slider_value) - ModuleSet.normalize(module_set, {effects=true}) - module_configurator.refresh_modules_flow(player, true) - else -- empty line, no influence on anything else - module_textfield.text = tostring(new_slider_value) - end -end - -local function handle_module_textfield_change(player, tags, event) - local modal_data = util.globals.modal_data(player) - local module_set = modal_data.module_set - local new_textfield_value = tonumber(event.element.text) - local module_slider = event.element.parent["fp_slider_module_amount"] - - local slider_maximum = module_slider.get_slider_maximum() - local normalized_amount = math.max(1, (new_textfield_value or 1)) - local new_amount = math.min(normalized_amount, slider_maximum) - - if tags.module_id then -- editing an existing module - local module = ModuleSet.get(module_set, tags.module_id) - Module.set_amount(module, new_amount) - ModuleSet.normalize(module_set, {effects=true}) - module_configurator.refresh_modules_flow(player, true) - else -- empty line, no influence on anything else - module_slider.slider_value = new_amount - event.element.text = tostring(new_amount) - end -end - - --- ** TOP LEVEL ** -function module_configurator.add_modules_flow(parent, modal_data) - local flow_modules = parent.add{type="flow", direction="vertical"} - modal_data.modal_elements["modules_flow"] = flow_modules -end - -function module_configurator.refresh_effects_flow(modal_data) - local effects_tooltip = modal_data.object.effects_tooltip - - local lower_class = modal_data.object.class:lower() - local object_label = modal_data.modal_elements[lower_class .. "_effects_label"] - if not object_label or not object_label.valid then return end - - object_label.parent.parent.visible = (effects_tooltip ~= "") - if effects_tooltip ~= "" then - object_label.caption = effects_tooltip - modal_data.modal_elements["line_effects_label"].caption = modal_data.line.effects_tooltip - end -end - -function module_configurator.refresh_modules_flow(player, update_only) - local modal_data = util.globals.modal_data(player) - local modules_flow = modal_data.modal_elements.modules_flow - - local module_filters = ModuleSet.compile_filter(modal_data.module_set) - local empty_slots = modal_data.module_set.empty_slots - - local effects_tooltip = modal_data.object.effects_tooltip - - if update_only then - module_configurator.refresh_effects_flow(modal_data) - - -- Update the UI instead of rebuilding it so the slider can be dragged properly - for _, frame in pairs(modules_flow.children) do - if frame.name == "flow_effects" then goto skip end - - local module_id = frame.tags.module_id - if module_id == nil then - frame.destroy() -- destroy empty frame as it'll be re-added below - else - local module = ModuleSet.get(modal_data.module_set, module_id) - if module == nil then - frame.destroy() - else - local slider_value, maximum_value, minimum_value = determine_slider_config(module, empty_slots) - - frame["fp_chooser_module"].elem_value = module.proto.name - - local textfield = frame["fp_textfield_module_amount"] - textfield.text = tostring(module.amount) - textfield.enabled = (maximum_value ~= 1) - - local slider = frame["fp_slider_module_amount"] - slider.set_slider_value_step(0.1) -- bug workaround - slider.set_slider_minimum_maximum(minimum_value, maximum_value) - slider.slider_value = slider_value - slider.set_slider_value_step(1) -- bug workaround - slider.enabled = (maximum_value ~= 1) - slider.style = (maximum_value == 1) and "fp_slider_module_none" or "fp_slider_module" - end - end - ::skip:: - end - else - modules_flow.clear() - - if effects_tooltip ~= "" then - local effects_flow = modules_flow.add{type="flow", direction="horizontal", name="flow_effects"} - add_effects_section(effects_flow, modal_data.object, modal_data.modal_elements) - add_effects_section(effects_flow, modal_data.line, modal_data.modal_elements) - end - - for _, module in pairs(ModuleSet.get_in_order(modal_data.module_set)) do - add_module_frame(modules_flow, module, module_filters, empty_slots) - end - end - - if empty_slots > 0 then add_module_frame(modules_flow, nil, module_filters, empty_slots) end - if modal_data.submit_checker then modal_data.submit_checker(modal_data) end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_elem_changed = { - { - name = "select_module", - handler = handle_module_selection - } - }, - on_gui_value_changed = { - { - name = "module_amount", - handler = handle_module_slider_change - } - }, - on_gui_text_changed = { - { - name = "module_amount", - handler = handle_module_textfield_change - } - } -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/event_handler.lua b/factoryplanner_1.1.72/ui/event_handler.lua deleted file mode 100644 index 8a404fba..00000000 --- a/factoryplanner_1.1.72/ui/event_handler.lua +++ /dev/null @@ -1,330 +0,0 @@ --- Assembles event handlers from all the relevant files and calls them when needed - -local event_listener_names = {"ui.base.main_dialog", "ui.base.compact_dialog", "ui.base.modal_dialog", - "ui.base.view_state", "ui.main.title_bar", "ui.main.subfactory_list", "ui.main.subfactory_info", - "ui.main.item_boxes", "ui.main.production_box", "ui.main.production_table", "ui.main.production_handler", - "ui.elements.module_configurator", "ui.dialogs.beacon_dialog", "ui.dialogs.generic_dialogs", - "ui.dialogs.machine_dialog", "ui.dialogs.matrix_dialog", "ui.dialogs.picker_dialog", - "ui.dialogs.picker_dialog", "ui.dialogs.porter_dialog", "ui.dialogs.preferences_dialog", - "ui.dialogs.recipe_dialog", "ui.dialogs.subfactory_dialog", "ui.dialogs.tutorial_dialog", - "ui.dialogs.utility_dialog"} - -local event_listeners = {} -for _, listener_path in ipairs(event_listener_names) do - for _, listener in pairs(require(listener_path)) do - table.insert(event_listeners, listener) - end -end - - --- ** GUI EVENTS ** --- These handlers go out to the first thing that it finds that registered for it. --- They can register either by element name or by a pattern matching element names. -local gui_identifier_map = { - [defines.events.on_gui_click] = "on_gui_click", - [defines.events.on_gui_closed] = "on_gui_closed", - [defines.events.on_gui_confirmed] = "on_gui_confirmed", - [defines.events.on_gui_text_changed] = "on_gui_text_changed", - [defines.events.on_gui_checked_state_changed] = "on_gui_checked_state_changed", - [defines.events.on_gui_switch_state_changed] = "on_gui_switch_state_changed", - [defines.events.on_gui_elem_changed] = "on_gui_elem_changed", - [defines.events.on_gui_value_changed] = "on_gui_value_changed", - [defines.events.on_gui_hover] = "on_gui_hover", - [defines.events.on_gui_leave] = "on_gui_leave" -} - -local gui_timeouts = { - on_gui_click = 2, - on_gui_confirmed = 20 -} - - --- ** SPECIAL HANDLERS ** -local special_gui_handlers = {} - -special_gui_handlers.on_gui_closed = (function(event, _, _) - return (event.gui_type == defines.gui_type.custom and event.element.visible) -end) - -special_gui_handlers.on_gui_confirmed = (function(_, player, action_name) - if action_name then return true end -- run the standard handler if one is found - - -- Otherwise, close the currently open modal dialog if possible - if util.globals.ui_state(player).modal_dialog_type ~= nil then - util.raise.close_dialog(player, "submit") - end - return false -end) - - -local gui_event_cache = {} --- Create tables for all events that are being registered -for _, event_name in pairs(gui_identifier_map) do - gui_event_cache[event_name] = { - actions = {}, - special_handler = special_gui_handlers[event_name] - } -end - --- Compile the list of GUI actions -for _, listener in pairs(event_listeners) do - if listener.gui then - for event_name, actions in pairs(listener.gui) do - local event_table = gui_event_cache[event_name] - - for _, action in pairs(actions) do - local timeout = action.timeout or gui_timeouts[event_name] -- can be nil - local action_table = {handler = action.handler, timeout = timeout} - - if event_name == "on_gui_click" and action.modifier_actions then - action_table.modifier_actions = {} - -- Transform modifier actions into a more useable form - for modifier_action_name, modifier_action in pairs(action.modifier_actions) do - local modifier_click = modifier_action[1] - action_table.modifier_actions[modifier_click] = { - name = modifier_action_name, - limitations = modifier_action[2] or {} - } - end - - -- Generate all the tooltip lines for these modifier actions - local tooltip = util.actions.all_tutorial_tooltips(action_table.modifier_actions) - TUTORIAL_TOOLTIPS[action.name] = tooltip - end - - event_table.actions[action.name] = action_table - end - end - end -end - -local mouse_click_map = { - [defines.mouse_button_type.left] = "left", - [defines.mouse_button_type.right] = "right", - [defines.mouse_button_type.middle] = "middle" -} -local function convert_click_to_string(event) - local modifier_click = mouse_click_map[event.button] - if event.shift then modifier_click = "shift-" .. modifier_click end - if event.alt then modifier_click = "alt-" .. modifier_click end - if event.control then modifier_click = "control-" .. modifier_click end - return modifier_click -end - -local function handle_gui_event(event) - if not event.element then return end - - local tags = event.element.tags - if tags.mod ~= "fp" then return end - - -- Guard against an event being called before the player is initialized - if not global.players[event.player_index] then return end - - -- GUI events always have an associated player - local player = game.get_player(event.player_index) ---@cast player -nil - - -- The event table actually contains its identifier, not its name - local event_name = gui_identifier_map[event.name] - local event_table = gui_event_cache[event_name] - local action_name = tags[event_name] -- could be nil - - -- If a special handler is set, it needs to return true before proceeding with the registered handlers - local special_handler = event_table.special_handler - if special_handler and special_handler(event, player, action_name) == false then return end - - -- Special handlers need to run even without an action handler, so we - -- wait until this point to check whether there is an associated action - if not action_name then return end -- meaning this event type has no action on this element - local action_table = event_table.actions[action_name] - - -- Check if rate limiting allows this action to proceed - if util.actions.rate_limited(player, event.tick, action_name, action_table.timeout) then return end - - local third_parameter = event -- all GUI events except on_gui_click have the event as the third parameter - - -- Special modifier handling for on_gui_click if configured - if event_name == "on_gui_click" and action_table.modifier_actions then - local modifier_action = action_table.modifier_actions[convert_click_to_string(event)] - if not modifier_action then return end -- meaning the used modifiers do not have an associated action - - local active_limitations = util.actions.current_limitations(player) - -- Check whether the selected action is allowed according to its limitations - if not util.actions.allowed(modifier_action.limitations, active_limitations) then return end - - third_parameter = modifier_action.name - end - - action_table.handler(player, tags, third_parameter) -- send the actual event - - util.messages.refresh(player) -- give messages a chance to update themselves -end - --- Register all the GUI events from the identifier map -for event_id, _ in pairs(gui_identifier_map) do script.on_event(event_id, handle_gui_event) end - - - --- ** DIALOG EVENTS ** --- These custom events handle opening and closing modal dialogs -local dialog_event_cache = {} --- Compile the list of dialog actions -for _, listener in pairs(event_listeners) do - if listener.dialog then - dialog_event_cache[listener.dialog.dialog] = listener.dialog - end -end - -local function apply_metadata_overrides(base, overrides) - for k, v in pairs(overrides) do - local base_v = base[k] - if type(base_v) == "table" and type(v) == "table" then - apply_metadata_overrides(base_v, v) - else - base[k] = v - end - end -end - -local function handle_dialog_event(event) - -- Guard against an event being called before the player is initialized - if not global.players[event.player_index] then return end - - -- These custom events always have an associated player - local player = game.get_player(event.player_index) ---@cast player -nil - local ui_state = util.globals.ui_state(player) - - -- Check if the action is allowed to be carried out by rate limiting - if util.actions.rate_limited(player, event.tick, event.name, 20) then return end - - if event.name == CUSTOM_EVENTS.open_modal_dialog then - local listener = dialog_event_cache[event.metadata.dialog] - - local metadata = event.metadata - if listener.metadata ~= nil then -- collect additional metadata - local additional_metadata = listener.metadata(metadata.modal_data) - apply_metadata_overrides(metadata, additional_metadata) - end - - modal_dialog.enter(player, metadata, listener.open, listener.early_abort_check) - - elseif event.name == CUSTOM_EVENTS.close_modal_dialog then - local modal_dialog_type = ui_state.modal_dialog_type - if modal_dialog_type == nil then return end - - local listener = dialog_event_cache[modal_dialog_type] - modal_dialog.exit(player, event.action, event.skip_opened, listener.close) - end -end - --- Register all the misc events from the identifier map -local dialog_events = {CUSTOM_EVENTS.open_modal_dialog, CUSTOM_EVENTS.close_modal_dialog} -for _, event_id in pairs(dialog_events) do script.on_event(event_id, handle_dialog_event) end - - - --- ** MISC EVENTS ** --- These events call every handler that has subscribed to it by id or name. The difference to GUI events --- is that multiple handlers can be registered to the same event, and there is no standard handler. -local misc_identifier_map = { - -- Standard events - [defines.events.on_gui_opened] = "on_gui_opened", - [defines.events.on_player_display_resolution_changed] = "on_player_display_resolution_changed", - [defines.events.on_player_display_scale_changed] = "on_player_display_scale_changed", - [defines.events.on_player_selected_area] = "on_player_selected_area", - [defines.events.on_player_cursor_stack_changed] = "on_player_cursor_stack_changed", - [defines.events.on_player_main_inventory_changed] = "on_player_main_inventory_changed", - [defines.events.on_lua_shortcut] = "on_lua_shortcut", - - -- Keyboard shortcuts - ["fp_toggle_interface"] = "fp_toggle_interface", - ["fp_toggle_compact_view"] = "fp_toggle_compact_view", - ["fp_toggle_pause"] = "fp_toggle_pause", - ["fp_refresh_production"] = "fp_refresh_production", - ["fp_up_floor"] = "fp_up_floor", - ["fp_top_floor"] = "fp_top_floor", - ["fp_cycle_production_views"] = "fp_cycle_production_views", - ["fp_reverse_cycle_production_views"] = "fp_reverse_cycle_production_views", - ["fp_confirm_dialog"] = "fp_confirm_dialog", - ["fp_confirm_gui"] = "fp_confirm_gui", - ["fp_focus_searchfield"] = "fp_focus_searchfield", - - [CUSTOM_EVENTS.build_gui_element] = "build_gui_element", - [CUSTOM_EVENTS.refresh_gui_element] = "refresh_gui_element" -} - -local misc_timeouts = { - fp_confirm_dialog = 20, - fp_confirm_gui = 20, - fp_refresh_production = 20 -} - --- ** SPECIAL HANDLERS ** -local special_misc_handlers = {} - -special_misc_handlers.on_gui_opened = (function(event) - -- This should only fire when a UI not associated with FP is opened, so FP's dialogs can close properly - return (event.gui_type ~= defines.gui_type.custom or not event.element or event.element.tags.mod ~= "fp") -end) - - -local misc_event_cache = {} --- Compile the list of misc handlers -for _, listener in pairs(event_listeners) do - if listener.misc then - for event_name, handler in pairs(listener.misc) do - misc_event_cache[event_name] = misc_event_cache[event_name] or { - registered_handlers = {}, - special_handler = special_misc_handlers[event_name], - timeout = misc_timeouts[event_name] - } - - table.insert(misc_event_cache[event_name].registered_handlers, handler) - end - end -end - - -local function handle_misc_event(event) - local event_name = event.input_name or event.name -- also handles keyboard shortcuts - local string_name = misc_identifier_map[event_name] - local event_handlers = misc_event_cache[string_name] - if not event_handlers then return end -- make sure the given event is even handled - - -- Guard against an event being called before the player is initialized - if not global.players[event.player_index] then return end - - -- We'll assume every one of the events has a player attached - local player = game.get_player(event.player_index) ---@cast player -nil - - -- Check if the action is allowed to be carried out by rate limiting - if util.actions.rate_limited(player, event.tick, event_name, event_handlers.timeout) then return end - - -- If a special handler is set, it needs to return true before proceeding with the registered handlers - local special_handler = event_handlers.special_handler - if special_handler and special_handler(event) == false then return end - - for _, registered_handler in pairs(event_handlers.registered_handlers) do - registered_handler(player, event) -- send actual event - end - - if CUSTOM_EVENTS[string_name] then return end -- don't refresh message for events inside other events - util.messages.refresh(player) -- give messages a chance to update themselves -end - --- Register all the misc events from the identifier map -for event_id, _ in pairs(misc_identifier_map) do script.on_event(event_id, handle_misc_event) end - - --- ** GLOBAL HANDLERS ** --- In some situations, you need to be able to refer to a function indirectly by string name. --- As functions can't be stored in global, these need to be collected and stored in a central placem --- so code that wants to call them knows where to find them. This collects and stores these functions. -for _, listener in pairs(event_listeners) do - if listener.global then - for name, handler in pairs(listener.global) do - GLOBAL_HANDLERS[name] = handler - end - end -end - --- These are not registered as events, instead just made available to call directly diff --git a/factoryplanner_1.1.72/ui/main/item_boxes.lua b/factoryplanner_1.1.72/ui/main/item_boxes.lua deleted file mode 100644 index 9b8d5002..00000000 --- a/factoryplanner_1.1.72/ui/main/item_boxes.lua +++ /dev/null @@ -1,372 +0,0 @@ --- ** LOCAL UTIL ** -local function add_recipe(player, context, type, item_proto) - if context.floor.level > 1 then - local message = {"fp.error_recipe_wrong_floor", {"fp.pu_" .. type, 1}} - util.messages.raise(player, "error", message, 1) - else - local production_type = (type == "byproduct") and "consume" or "produce" - util.raise.open_dialog(player, {dialog="recipe", - modal_data={category_id=item_proto.category_id, product_id=item_proto.id, - floor_id=context.floor.id, production_type=production_type}}) - end -end - -local function build_item_box(player, category, column_count) - local item_boxes_elements = util.globals.main_elements(player).item_boxes - - local window_frame = item_boxes_elements.horizontal_flow.add{type="frame", direction="vertical", - style="inside_shallow_frame"} - window_frame.style.top_padding = 6 - window_frame.style.bottom_padding = MAGIC_NUMBERS.frame_spacing - - local title_flow = window_frame.add{type="flow", direction="horizontal"} - title_flow.style.vertical_align = "center" - - local label = title_flow.add{type="label", caption={"fp.pu_" .. category, 2}, style="caption_label"} - label.style.left_padding = MAGIC_NUMBERS.frame_spacing - label.style.bottom_margin = 4 - - if category == "ingredient" then - local button_combinator = title_flow.add{type="sprite-button", sprite="item/constant-combinator", - tooltip={"fp.ingredients_to_combinator_tt"}, tags={mod="fp", on_gui_click="ingredients_to_combinator"}, - visible=false, mouse_button_filter={"left"}} - button_combinator.style.size = 24 - button_combinator.style.padding = -2 - button_combinator.style.left_margin = 4 - item_boxes_elements["ingredient_combinator_button"] = button_combinator - end - - local scroll_pane = window_frame.add{type="scroll-pane", style="fp_scroll-pane_slot_table"} - scroll_pane.style.maximal_height = MAGIC_NUMBERS.item_box_max_rows * MAGIC_NUMBERS.item_button_size - scroll_pane.style.horizontally_stretchable = false - scroll_pane.style.vertically_stretchable = false - - local item_frame = scroll_pane.add{type="frame", style="slot_button_deep_frame"} - item_frame.style.width = column_count * MAGIC_NUMBERS.item_button_size - - local table_items = item_frame.add{type="table", column_count=column_count, style="filter_slot_table"} - item_boxes_elements[category .. "_item_table"] = table_items -end - -local function refresh_item_box(player, items, category, subfactory, shows_floor_items) - local ui_state = util.globals.ui_state(player) - local item_boxes_elements = ui_state.main_elements.item_boxes - - local table_items = item_boxes_elements[category .. "_item_table"] - table_items.clear() - - if not subfactory or not subfactory.valid then - item_boxes_elements["ingredient_combinator_button"].visible = false - return 0 - end - - local table_item_count = 0 - local metadata = view_state.generate_metadata(player, subfactory) - local default_style = (category == "byproduct") and "flib_slot_button_red" or "flib_slot_button_default" - - local action = (shows_floor_items) and ("act_on_floor_item") or ("act_on_top_level_" .. category) - local tutorial_tt = (util.globals.preferences(player).tutorial_mode) - and util.actions.tutorial_tooltip(action, nil, player) or nil - - for _, item in ipairs(items) do - local required_amount = (not shows_floor_items and category == "product") and Item.required_amount(item) or nil - local amount, number_tooltip = view_state.process_item(metadata, item, required_amount, nil) - if amount == -1 then goto skip_item end -- an amount of -1 means it was below the margin of error - - local style = default_style - local satisfaction_line = "" ---@type LocalisedString - if not shows_floor_items and category == "product" and amount ~= nil and amount ~= "0" then - local satisfied_percentage = (item.amount / required_amount) * 100 - local percentage_string = util.format.number(satisfied_percentage, 3) - satisfaction_line = {"", "\n", {"fp.bold_label", (percentage_string .. "%")}, " ", {"fp.satisfied"}} - - if satisfied_percentage <= 0 then style = "flib_slot_button_red" - elseif satisfied_percentage < 100 then style = "flib_slot_button_yellow" - else style = "flib_slot_button_green" end - end - - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local name_line, tooltip, enabled = nil, nil, true - if item.proto.type == "entity" then -- only relevant to ingredients - name_line = {"fp.tt_title_with_note", item.proto.localised_name, {"fp.raw_ore"}} - tooltip = {"", name_line, number_line, satisfaction_line} - style = "flib_slot_button_transparent" - enabled = false - else - name_line = {"fp.tt_title", item.proto.localised_name} - tooltip = {"", name_line, number_line, satisfaction_line, tutorial_tt} - end - - table_items.add{type="sprite-button", tooltip=tooltip, number=amount, style=style, sprite=item.proto.sprite, - tags={mod="fp", on_gui_click=action, category=category, item_id=item.id}, enabled=enabled, - mouse_button_filter={"left-and-right"}} - table_item_count = table_item_count + 1 - - ::skip_item:: -- goto for fun, wooohoo - end - - if category == "product" and not shows_floor_items then -- meaning allow the user to add items of this type - table_items.add{type="sprite-button", enabled=(not ui_state.flags.archive_open), - tags={mod="fp", on_gui_click="add_top_level_item", category=category}, sprite="utility/add", - tooltip={"", {"fp.add"}, " ", {"fp.pl_" .. category, 1}, "\n", {"fp.shift_to_paste"}}, - style="fp_sprite-button_inset_add_slot", mouse_button_filter={"left"}} - table_item_count = table_item_count + 1 - end - - if category == "ingredient" then - item_boxes_elements["ingredient_combinator_button"].visible = (table_item_count > 0) - end - - local table_rows_required = math.ceil(table_item_count / table_items.column_count) - return table_rows_required -end - - -local function handle_item_add(player, tags, event) - local context = util.globals.context(player) - - if event.shift then -- paste - -- Use a fake item to paste on top of - local class = tags.category:gsub("^%l", string.upper) - local fake_item = {proto={name=""}, parent=context.subfactory, class=class} - util.clipboard.paste(player, fake_item) - else - util.raise.open_dialog(player, {dialog="picker", modal_data={item_id=nil, item_category=tags.category}}) - end -end - -local function handle_item_button_click(player, tags, action) - local player_table = util.globals.player_table(player) - local context = player_table.ui_state.context - local floor_items_active = (player_table.preferences.show_floor_items and context.floor.level > 1) - - local class = (tags.category:gsub("^%l", string.upper)) - local item = (floor_items_active) and Line.get(context.floor.origin_line, class, tags.item_id) - or Subfactory.get(context.subfactory, class, tags.item_id) - - if action == "add_recipe" then - add_recipe(player, context, tags.category, item.proto) - - elseif action == "edit" then - util.raise.open_dialog(player, {dialog="picker", modal_data={item_id=item.id, item_category="product"}}) - - elseif action == "copy" then - util.clipboard.copy(player, item) - - elseif action == "paste" then - util.clipboard.paste(player, item) - - elseif action == "delete" then - Subfactory.remove(context.subfactory, item) - solver.update(player, context.subfactory) - util.raise.refresh(player, "all", nil) -- make sure product icons are updated - - elseif action == "specify_amount" then - -- Set the view state so that the amount shown in the dialog makes sense - view_state.select(player, "items_per_timescale") - util.raise.refresh(player, "subfactory", nil) - - local modal_data = { - title = {"fp.options_item_title", {"fp.pl_ingredient", 1}}, - text = {"fp.options_item_text", item.proto.localised_name}, - submission_handler_name = "scale_subfactory_by_ingredient_amount", - item_id = item.id, - fields = { - { - type = "numeric_textfield", - name = "item_amount", - caption = {"fp.options_item_amount"}, - tooltip = {"fp.options_subfactory_ingredient_amount_tt"}, - text = item.amount, - width = 140, - focus = true - } - } - } - util.raise.open_dialog(player, {dialog="options", modal_data=modal_data}) - - elseif action == "put_into_cursor" then - local amount = (not floor_items_active and tags.category == "product") - and Item.required_amount(item) or item.amount - util.cursor.add_to_item_combinator(player, item.proto, amount) - - elseif action == "recipebook" then - util.open_in_recipebook(player, item.proto.type, item.proto.name) - end -end - - -local function put_ingredients_into_cursor(player, _, _) - local context = util.globals.context(player) - local floor = context.floor - local show_floor_items = util.globals.preferences(player).show_floor_items - local container = (show_floor_items and floor.level > 1) and floor.origin_line or context.subfactory - - local ingredients = {} - for _, ingredient in pairs(_G[container.class].get_all(container, "Ingredient")) do - if ingredient.proto.type == "item" then ingredients[ingredient.proto.name] = ingredient.amount end - end - - local success = util.cursor.set_item_combinator(player, ingredients) - if success then main_dialog.toggle(player) end -end - - -local function scale_subfactory_by_ingredient_amount(player, options, action) - if action == "submit" then - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - local item = Subfactory.get(subfactory, "Ingredient", ui_state.modal_data.item_id) - - if options.item_amount then - -- The division is not pre-calculated to avoid precision errors in some cases - local current_amount, target_amount = item.amount, options.item_amount - for _, product in pairs(Subfactory.get_all(subfactory, "Product")) do - local requirement = product.required_amount - requirement.amount = requirement.amount * target_amount / current_amount - end - end - - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - end -end - - -local function refresh_item_boxes(player) - local player_table = util.globals.player_table(player) - - local main_elements = player_table.ui_state.main_elements - if main_elements.main_frame == nil then return end - - local context = player_table.ui_state.context - local subfactory = context.subfactory - local floor = context.floor - - -- This is all kinds of stupid, but the mob wishes the feature to exist - local function refresh(parent, class, shows_floor_items) - local items = (parent) and _G[parent.class].get_in_order(parent, class) or {} - return refresh_item_box(player, items, class:lower(), subfactory, shows_floor_items) - end - - local prow_count, brow_count, irow_count = 0, 0, 0 - if player_table.preferences.show_floor_items and floor and floor.level > 1 then - local line = floor.origin_line - prow_count = refresh(line, "Product", true) - brow_count = refresh(line, "Byproduct", true) - irow_count = refresh(line, "Ingredient", true) - else - prow_count = refresh(subfactory, "Product", false) - brow_count = refresh(subfactory, "Byproduct", false) - irow_count = refresh(subfactory, "Ingredient", false) - end - - local maxrow_count = math.max(prow_count, math.max(brow_count, irow_count)) - local actual_row_count = math.min(math.max(maxrow_count, 1), MAGIC_NUMBERS.item_box_max_rows) - local item_table_height = actual_row_count * MAGIC_NUMBERS.item_button_size - - -- set the heights for both the visible frame and the scroll pane containing it - local item_boxes_elements = player_table.ui_state.main_elements.item_boxes - item_boxes_elements.product_item_table.parent.style.minimal_height = item_table_height - item_boxes_elements.product_item_table.parent.parent.style.minimal_height = item_table_height - item_boxes_elements.byproduct_item_table.parent.style.minimal_height = item_table_height - item_boxes_elements.byproduct_item_table.parent.parent.style.minimal_height = item_table_height - item_boxes_elements.ingredient_item_table.parent.style.minimal_height = item_table_height - item_boxes_elements.ingredient_item_table.parent.parent.style.minimal_height = item_table_height -end - -local function build_item_boxes(player) - local main_elements = util.globals.main_elements(player) - main_elements.item_boxes = {} - - local parent_flow = main_elements.flows.right_vertical - local flow_horizontal = parent_flow.add{type="flow", direction="horizontal"} - flow_horizontal.style.horizontal_spacing = MAGIC_NUMBERS.frame_spacing - main_elements.item_boxes["horizontal_flow"] = flow_horizontal - - local products_per_row = util.globals.settings(player).products_per_row - build_item_box(player, "product", products_per_row) - build_item_box(player, "byproduct", products_per_row) - build_item_box(player, "ingredient", products_per_row*2) - - refresh_item_boxes(player) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "add_top_level_item", - handler = handle_item_add - }, - { - name = "act_on_top_level_product", - modifier_actions = { - add_recipe = {"left", {archive_open=false}}, - edit = {"right", {archive_open=false}}, - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - delete = {"control-right", {archive_open=false}}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_button_click - }, - { - name = "act_on_top_level_byproduct", - modifier_actions = { - add_recipe = {"left", {archive_open=false, matrix_active=true}}, - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_button_click - }, - { - name = "act_on_top_level_ingredient", - modifier_actions = { - add_recipe = {"left", {archive_open=false}}, - specify_amount = {"right", {archive_open=false}}, - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_button_click - }, - { - name = "act_on_floor_item", - modifier_actions = { - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_button_click - }, - { - name = "ingredients_to_combinator", - timeout = 20, - handler = put_ingredients_into_cursor - } - } -} - -listeners.misc = { - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_item_boxes(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {item_boxes=true, production=true, subfactory=true, all=true} - if triggers[event.trigger] then refresh_item_boxes(player) end - end) -} - -listeners.global = { - scale_subfactory_by_ingredient_amount = scale_subfactory_by_ingredient_amount -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/production_box.lua b/factoryplanner_1.1.72/ui/main/production_box.lua deleted file mode 100644 index 7fccb857..00000000 --- a/factoryplanner_1.1.72/ui/main/production_box.lua +++ /dev/null @@ -1,197 +0,0 @@ --- ** LOCAL UTIL ** -local function refresh_production(player, _, _) - local subfactory = util.globals.context(player).subfactory - if subfactory and subfactory.valid then - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - end -end - -local function paste_line(player, _, event) - if event.button == defines.mouse_button_type.left and event.shift then - local context = util.globals.context(player) - local line_count = context.floor.Line.count - local last_line = Floor.get_by_gui_position(context.floor, "Line", line_count) - -- Use a fake first line to paste below if no actual line exists - if not last_line then last_line = {parent=context.floor, class="Line", gui_position=0} end - - if util.clipboard.paste(player, last_line) then - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - end - end -end - --- Changes the floor to either be the top one or the one above the current one -local function change_floor(player, destination) - if util.context.change_floor(player, destination) then - -- Only refresh if the floor was indeed changed - util.raise.refresh(player, "production", nil) - end -end - - -local function refresh_production_box(player) - local player_table = util.globals.player_table(player) - local ui_state = player_table.ui_state - - if ui_state.main_elements.main_frame == nil then return end - local production_box_elements = ui_state.main_elements.production_box - - local subfactory = ui_state.context.subfactory - local subfactory_valid = subfactory and subfactory.valid - - local current_level = (subfactory_valid) and subfactory.selected_floor.level or 1 - local any_lines_present = (subfactory_valid) and (subfactory.selected_floor.Line.count > 0) or false - local archive_open = (ui_state.flags.archive_open) - - production_box_elements.refresh_button.enabled = (not archive_open and subfactory_valid and any_lines_present) - production_box_elements.level_label.caption = (not subfactory_valid) and "" - or {"fp.bold_label", {"", {"fp.level"}, " ", current_level}} - - production_box_elements.floor_up_button.visible = (subfactory_valid) - production_box_elements.floor_up_button.enabled = (current_level > 1) - - production_box_elements.floor_top_button.visible = (subfactory_valid) - production_box_elements.floor_top_button.enabled = (current_level > 1) - - production_box_elements.separator_line.visible = (subfactory_valid) - production_box_elements.utility_dialog_button.visible = (subfactory_valid) - - util.raise.refresh(player, "view_state", production_box_elements.view_state_table) - production_box_elements.view_state_table.visible = (subfactory_valid) - - -- This structure is stupid and huge, but not sure how to do it more elegantly - production_box_elements.instruction_label.visible = false - if not archive_open then - if subfactory == nil then - production_box_elements.instruction_label.caption = {"fp.production_instruction_subfactory"} - production_box_elements.instruction_label.visible = true - elseif subfactory_valid then - if subfactory.Product.count == 0 then - production_box_elements.instruction_label.caption = {"fp.production_instruction_product"} - production_box_elements.instruction_label.visible = true - elseif not any_lines_present then - production_box_elements.instruction_label.caption = {"fp.production_instruction_recipe"} - production_box_elements.instruction_label.visible = true - end - end - end -end - -local function build_production_box(player) - local main_elements = util.globals.main_elements(player) - main_elements.production_box = {} - - local parent_flow = main_elements.flows.right_vertical - local frame_vertical = parent_flow.add{type="frame", direction="vertical", style="inside_deep_frame"} - -- Insert a 'superfluous' flow for the sole purpose of detecting clicks on it - local click_flow = frame_vertical.add{type="flow", direction="vertical", - tags={mod="fp", on_gui_click="paste_line"}} - click_flow.style.vertically_stretchable = true - click_flow.style.horizontally_stretchable = true - main_elements.production_box["vertical_frame"] = click_flow - - local subheader = click_flow.add{type="frame", direction="horizontal", style="subheader_frame"} - subheader.style.maximal_height = 100 -- large value to nullify maximal_height - subheader.style.padding = {8, 8, 6, 8} - - local button_refresh = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="refresh_production"}, - sprite="utility/refresh", style="tool_button", tooltip={"fp.refresh_production"}, mouse_button_filter={"left"}} - main_elements.production_box["refresh_button"] = button_refresh - - local label_title = subheader.add{type="label", caption={"fp.production"}, style="frame_title"} - label_title.style.padding = {0, 8} - - local label_level = subheader.add{type="label"} - label_level.style.right_margin = 8 - main_elements.production_box["level_label"] = label_level - - local button_floor_up = subheader.add{type="sprite-button", sprite="fp_sprite_arrow_line_up", - tooltip={"fp.floor_up_tt"}, tags={mod="fp", on_gui_click="change_floor", destination="up"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - main_elements.production_box["floor_up_button"] = button_floor_up - - local button_floor_top = subheader.add{type="sprite-button", sprite="fp_sprite_arrow_line_bar_up", - tooltip={"fp.floor_top_tt"}, tags={mod="fp", on_gui_click="change_floor", destination="top"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - main_elements.production_box["floor_top_button"] = button_floor_top - - local separator = subheader.add{type="line", direction="vertical"} - separator.style.margin = {0, 8} - main_elements.production_box["separator_line"] = separator - - local button_utility_dialog = subheader.add{type="button", caption={"fp.utilities"}, - tooltip={"fp.utility_dialog_tt"}, tags={mod="fp", on_gui_click="open_utility_dialog"}, - style="fp_button_rounded_mini", mouse_button_filter={"left"}} - main_elements.production_box["utility_dialog_button"] = button_utility_dialog - - subheader.add{type="empty-widget", style="flib_horizontal_pusher"} - - util.raise.build(player, "view_state", subheader) - main_elements.production_box["view_state_table"] = subheader["table_view_state"] - - local label_instruction = click_flow.add{type="label", style="bold_label"} - label_instruction.style.margin = 20 - main_elements.production_box["instruction_label"] = label_instruction - - local frame_messages = frame_vertical.add{type="frame", direction="vertical", - visible=false, style="fp_frame_messages"} - main_elements["messages_frame"] = frame_messages - - refresh_production_box(player) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "refresh_production", - timeout = 20, - handler = refresh_production - }, - { - name = "change_floor", - handler = (function(player, tags, _) - change_floor(player, tags.destination) - end) - }, - { - name = "open_utility_dialog", - handler = (function(player, _, _) - util.raise.open_dialog(player, {dialog="utility"}) - end) - }, - { - name = "paste_line", - handler = paste_line - } - } -} - -listeners.misc = { - fp_refresh_production = (function(player, _, _) - if main_dialog.is_in_focus(player) then refresh_production(player, nil, nil) end - end), - fp_up_floor = (function(player, _, _) - if main_dialog.is_in_focus(player) then change_floor(player, "up") end - end), - fp_top_floor = (function(player, _, _) - if main_dialog.is_in_focus(player) then change_floor(player, "top") end - end), - - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_production_box(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {production_box=true, production_detail=true, production=true, subfactory=true, all=true} - if triggers[event.trigger] then refresh_production_box(player) end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/production_handler.lua b/factoryplanner_1.1.72/ui/main/production_handler.lua deleted file mode 100644 index 7fae8c51..00000000 --- a/factoryplanner_1.1.72/ui/main/production_handler.lua +++ /dev/null @@ -1,500 +0,0 @@ --- ** LOCAL UTIL ** -local function handle_line_move_click(player, tags, event) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - - local spots_to_shift = (event.control) and 5 or ((not event.shift) and 1 or nil) - local translated_direction = (tags.direction == "up") and "negative" or "positive" - local first_position = (floor.level > 1) and 2 or 1 - Floor.shift(floor, line, first_position, translated_direction, spots_to_shift) - - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) -end - -local function handle_recipe_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - - if action == "open_subfloor" then - if relevant_line.recipe.production_type == "consume" then - util.messages.raise(player, "error", {"fp.error_no_subfloor_on_byproduct_recipes"}, 1) - return - end - - local subfloor = line.subfloor - if subfloor == nil then - if util.globals.flags(player).archive_open then - util.messages.raise(player, "error", {"fp.error_no_new_subfloors_in_archive"}, 1) - return - end - - subfloor = Floor.init(line) -- attaches itself to the given line automatically - Subfactory.add(context.subfactory, subfloor) - solver.update(player, context.subfactory) - end - - util.context.set_floor(player, subfloor) - util.raise.refresh(player, "production", nil) - - elseif action == "copy" then - util.clipboard.copy(player, line) -- use actual line - - elseif action == "paste" then - util.clipboard.paste(player, line) -- use actual line - - elseif action == "toggle" then - relevant_line.active = not relevant_line.active - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "delete" then - Floor.remove(floor, line) - - -- If this recipe is deleted from a lower level floor (folded out subfloor), reset if necessary - if context.floor.level < floor.level and Floor.count(floor, "Line") < 2 then Floor.reset(floor) end - - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "recipebook" then - util.open_in_recipebook(player, "recipe", relevant_line.recipe.proto.name) - end -end - - -local function handle_percentage_change(player, tags, event) - local ui_state = util.globals.ui_state(player) - local floor = Subfactory.get(ui_state.context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - relevant_line.percentage = tonumber(event.element.text) or 100 - - ui_state.flags.recalculate_on_subfactory_change = true -- set flag to recalculate if necessary -end - -local function handle_percentage_confirmation(player, _, _) - local ui_state = util.globals.ui_state(player) - ui_state.flags.recalculate_on_subfactory_change = false -- reset this flag as we refresh below - solver.update(player, ui_state.context.subfactory) - util.raise.refresh(player, "subfactory", nil) -end - - -local function handle_machine_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - - if action == "put_into_cursor" then - local success = util.cursor.set_entity(player, line, line.machine) - if success then main_dialog.toggle(player) end - - elseif action == "edit" then - util.raise.open_dialog(player, {dialog="machine", modal_data={floor_id=floor.id, line_id=line.id, - recipe_name=line.recipe.proto.localised_name}}) - - elseif action == "copy" then - util.clipboard.copy(player, line.machine) - - elseif action == "paste" then - util.clipboard.paste(player, line.machine) - - elseif action == "reset_to_default" then - Line.change_machine_to_default(line, player) -- guaranteed to find something - line.machine.limit = nil - line.machine.force_limit = true - local message = Line.apply_mb_defaults(line, player) - - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - if message ~= nil then util.messages.raise(player, message.category, message.text, 1) end - - elseif action == "recipebook" then - util.open_in_recipebook(player, "entity", line.machine.proto.name) - end -end - -local function handle_machine_module_add(player, tags, event) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - - if event.shift then -- paste - util.clipboard.paste(player, line.machine) - else - util.raise.open_dialog(player, {dialog="machine", modal_data={floor_id=floor.id, line_id=line.id, - recipe_name=line.recipe.proto.localised_name}}) - end -end - - -local function handle_beacon_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - - if action == "put_into_cursor" then - local success = util.cursor.set_entity(player, line, line.beacon) - if success then main_dialog.toggle(player) end - - elseif action == "edit" then - util.raise.open_dialog(player, {dialog="beacon", modal_data={floor_id=floor.id, line_id=line.id, - machine_name=line.machine.proto.localised_name, edit=true}}) - - elseif action == "copy" then - util.clipboard.copy(player, line.beacon) - - elseif action == "paste" then - util.clipboard.paste(player, line.beacon) - - elseif action == "delete" then - Line.set_beacon(line, nil) - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "recipebook" then - util.open_in_recipebook(player, "entity", line.beacon.proto.name) - end -end - -local function handle_beacon_add(player, tags, event) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - - if event.shift then -- paste - -- Use a fake beacon to paste on top of - local fake_beacon = {parent=line, class="Beacon"} - util.clipboard.paste(player, fake_beacon) - else - util.raise.open_dialog(player, {dialog="beacon", modal_data={floor_id=floor.id, line_id=line.id, - machine_name=line.machine.proto.localised_name, edit=false}}) - end -end - - -local function handle_module_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - -- I don't need to care about relevant lines here because this only gets called on lines without subfloor - local parent_entity = line[tags.parent_type] - local module = ModuleSet.get(parent_entity.module_set, tags.module_id) - - if action == "edit" then - util.raise.open_dialog(player, {dialog=tags.parent_type, modal_data={floor_id=floor.id, line_id=line.id, - recipe_name=line.recipe.proto.localised_name, machine_name=line.machine.proto.localised_name, edit=true}}) - - elseif action == "copy" then - util.clipboard.copy(player, module) - - elseif action == "paste" then - util.clipboard.paste(player, module) - - elseif action == "delete" then - local module_set = parent_entity.module_set - ModuleSet.remove(module_set, module) - - if parent_entity.class == "Beacon" and module_set.module_count == 0 then - Line.set_beacon(line, nil) - end - - ModuleSet.normalize(module_set, {effects=true}) - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - - elseif action == "recipebook" then - util.open_in_recipebook(player, "item", module.proto.name) - end -end - - -local function apply_item_options(player, options, action) - if action == "submit" then - local ui_state = util.globals.ui_state(player) - local modal_data = ui_state.modal_data - - local subfactory = ui_state.context.subfactory - local floor = Subfactory.get(subfactory, "Floor", modal_data.floor_id) - local line = Floor.get(floor, "Line", modal_data.line_id) - local item = Line.get(line, modal_data.item_class, modal_data.item_id) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - - local current_amount, item_amount = item.amount, options.item_amount or item.amount - if item.class ~= "Ingredient" then - local other_class = (item.class == "Product") and "Byproduct" or "Product" - local corresponding_item = Line.get_by_type_and_name(relevant_line, other_class, - item.proto.type, item.proto.name) - - if corresponding_item then -- Further adjustments if item is both product and byproduct - -- In either case, we need to consider the sum of both types as the current amount - current_amount = current_amount + corresponding_item.amount - - -- If it's a byproduct, we want to set its amount to the exact number entered, which this does - if item.class == "Byproduct" then item_amount = item_amount + corresponding_item.amount end - end - end - - relevant_line.percentage = (current_amount == 0) and 100 - or (relevant_line.percentage * item_amount) / current_amount - - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - end -end - -local function handle_item_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - local item = Line.get(line, tags.class, tags.item_id) - - if action == "prioritize" then - if line.Product.count < 2 then - util.messages.raise(player, "warning", {"fp.warning_no_prioritizing_single_product"}, 1) - else - -- Remove the priority_product if the already selected one is clicked - line.priority_product_proto = (line.priority_product_proto ~= item.proto) and item.proto or nil - - solver.update(player, context.subfactory) - util.raise.refresh(player, "subfactory", nil) - end - - elseif action == "add_recipe_to_end" or action == "add_recipe_below" then - local production_type = (tags.class == "Byproduct") and "consume" or "produce" - local add_after_position = (action == "add_recipe_below") and line.gui_position or nil - util.raise.open_dialog(player, {dialog="recipe", modal_data={category_id=item.proto.category_id, - product_id=item.proto.id, floor_id=floor.id, production_type=production_type, - add_after_position=add_after_position}}) - - elseif action == "specify_amount" then - -- Set the view state so that the amount shown in the dialog makes sense - view_state.select(player, "items_per_timescale") - util.raise.refresh(player, "subfactory", nil) - - local type_localised_string = {"fp.pl_" .. tags.class:lower(), 1} - local produce_consume = (tags.class == "Ingredient") and {"fp.consume"} or {"fp.produce"} - - local modal_data = { - title = {"fp.options_item_title", type_localised_string}, - text = {"fp.options_item_text", item.proto.localised_name}, - submission_handler_name = "apply_item_options", - item_class = item.class, item_id = item.id, - floor_id = floor.id, line_id = line.id, - fields = { - { - type = "numeric_textfield", - name = "item_amount", - caption = {"fp.options_item_amount"}, - tooltip = {"fp.options_item_amount_tt", type_localised_string, produce_consume}, - text = item.amount, - width = 140, - focus = true - } - } - } - util.raise.open_dialog(player, {dialog="options", modal_data=modal_data}) - - elseif action == "copy" then - util.clipboard.copy(player, item) - - elseif action == "put_into_cursor" then - util.cursor.add_to_item_combinator(player, item.proto, item.amount) - - elseif action == "recipebook" then - util.open_in_recipebook(player, item.proto.type, item.proto.name) - end -end - -local function handle_fuel_click(player, tags, action) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - local fuel = line.machine.fuel -- must exist to be able to get here - - if action == "add_recipe_to_end" or action == "add_recipe_below" then - local add_after_position = (action == "add_recipe_below") and line.gui_position or nil - local category = PROTOTYPE_MAPS.items[fuel.proto.type] - local proto_id = category.members[fuel.proto.name].id - util.raise.open_dialog(player, {dialog="recipe", modal_data={category_id=category.id, - product_id=proto_id, floor_id=floor.id, production_type="produce", - add_after_position=add_after_position}}) - - elseif action == "edit" then -- fuel is changed through the machine dialog - util.raise.open_dialog(player, {dialog="machine", modal_data={floor_id=floor.id, line_id=line.id, - recipe_name=line.recipe.proto.localised_name}}) - - elseif action == "copy" then - util.clipboard.copy(player, fuel) - - elseif action == "paste" then - util.clipboard.paste(player, fuel) - - elseif action == "put_into_cursor" then - util.cursor.add_to_item_combinator(player, fuel.proto, fuel.amount) - - elseif action == "recipebook" then - util.open_in_recipebook(player, fuel.proto.type, fuel.proto.name) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "move_line", - handler = handle_line_move_click - }, - { - name = "act_on_line_recipe", - modifier_actions = { - open_subfloor = {"left"}, -- does its own archive check - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - toggle = {"control-left", {archive_open=false}}, - delete = {"control-right", {archive_open=false}}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_recipe_click - }, - { - name = "act_on_line_machine", - modifier_actions = { - edit = {"right", {archive_open=false}}, - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - reset_to_default = {"control-right", {archive_open=false}}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_machine_click - }, - { - name = "add_machine_module", - handler = handle_machine_module_add - }, - { - name = "act_on_line_beacon", - modifier_actions = { - edit = {"right", {archive_open=false}}, - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - delete = {"control-right", {archive_open=false}}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_beacon_click - }, - { - name = "add_line_beacon", - handler = handle_beacon_add - }, - { - name = "act_on_line_module", - modifier_actions = { - edit = {"right", {archive_open=false}}, - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - delete = {"control-right", {archive_open=false}}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_module_click - }, - { - name = "act_on_line_product", - modifier_actions = { - prioritize = {"left", {archive_open=false, matrix_active=false}}, - specify_amount = {"right", {archive_open=false, matrix_active=false}}, - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_click - }, - { - name = "act_on_line_byproduct", - modifier_actions = { - add_recipe_to_end = {"left", {archive_open=false, matrix_active=true}}, - add_recipe_below = {"control-left", {archive_open=false, matrix_active=true}}, - specify_amount = {"right", {archive_open=false, matrix_active=false}}, - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_click - }, - { - name = "act_on_line_ingredient", - modifier_actions = { - add_recipe_to_end = {"left", {archive_open=false}}, - add_recipe_below = {"control-left", {archive_open=false}}, - specify_amount = {"right", {archive_open=false, matrix_active=false}}, - copy = {"shift-right"}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_item_click - }, - { - name = "act_on_line_fuel", - modifier_actions = { - add_recipe_to_end = {"left", {archive_open=false}}, - add_recipe_below = {"control-left", {archive_open=false}}, - edit = {"right", {archive_open=false}}, - copy = {"shift-right"}, - paste = {"shift-left", {archive_open=false}}, - put_into_cursor = {"alt-left"}, - recipebook = {"alt-right", {recipebook=true}} - }, - handler = handle_fuel_click - } - }, - on_gui_checked_state_changed = { - { - name = "checkmark_line", - handler = (function(player, tags, _) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - local line = Floor.get(floor, "Line", tags.line_id) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - relevant_line.done = not relevant_line.done - end) - } - }, - on_gui_text_changed = { - { - name = "line_percentage", - handler = handle_percentage_change - }, - { - name = "line_comment", - handler = (function(player, tags, event) - local context = util.globals.context(player) - local floor = Subfactory.get(context.subfactory, "Floor", tags.floor_id) - Floor.get(floor, "Line", tags.line_id).comment = event.element.text - end) - } - }, - on_gui_confirmed = { - { - name = "line_percentage", - handler = handle_percentage_confirmation - } - } -} - -listeners.global = { - apply_item_options = apply_item_options -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/production_table.lua b/factoryplanner_1.1.72/ui/main/production_table.lua deleted file mode 100644 index ca3e86aa..00000000 --- a/factoryplanner_1.1.72/ui/main/production_table.lua +++ /dev/null @@ -1,465 +0,0 @@ --- ** LOCAL UTIL ** -local function generate_metadata(player) - local ui_state = util.globals.ui_state(player) - local preferences = util.globals.preferences(player) - local subfactory = ui_state.context.subfactory - - local metadata = { - archive_open = ui_state.flags.archive_open, - matrix_solver_active = (subfactory.matrix_free_items ~= nil), - fold_out_subfloors = preferences.fold_out_subfloors, - round_button_numbers = preferences.round_button_numbers, - pollution_column = preferences.pollution_column, - ingredient_satisfaction = preferences.ingredient_satisfaction, - view_state_metadata = view_state.generate_metadata(player, subfactory), - any_beacons_available = (next(global.prototypes.beacons) ~= nil), - line_count = nil, level = nil -- set dynamically per floor - } - - if preferences.tutorial_mode then - util.actions.tutorial_tooltip_list(metadata, player, { - recipe_tutorial_tt = "act_on_line_recipe", - machine_tutorial_tt = "act_on_line_machine", - beacon_tutorial_tt = "act_on_line_beacon", - module_tutorial_tt = "act_on_line_module", - product_tutorial_tt = "act_on_line_product", - byproduct_tutorial_tt = "act_on_line_byproduct", - ingredient_tutorial_tt = "act_on_line_ingredient", - fuel_tutorial_tt = "act_on_line_fuel" - }) - end - - return metadata -end - - --- ** BUILDERS ** -local builders = {} - -function builders.done(line, parent_flow, _) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - - parent_flow.add{type="checkbox", state=relevant_line.done, mouse_button_filter={"left"}, - tags={mod="fp", on_gui_checked_state_changed="checkmark_line", floor_id=line.parent.id, line_id=line.id}} -end - -function builders.recipe(line, parent_flow, metadata, indent) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - local recipe_proto = relevant_line.recipe.proto - - parent_flow.style.vertical_align = "center" - parent_flow.style.horizontal_spacing = 3 - - if indent > 0 then parent_flow.style.left_margin = indent * 18 end - - local function create_move_button(flow, direction, disable) - local direction_enabled = (direction == "up" and line.gui_position ~= ((metadata.level > 1) and 2 or 1)) - or (direction == "down" and line.gui_position < metadata.line_count) - local enabled = direction_enabled and (not metadata.archive_open and not disable) - local endpoint = (direction == "up") and {"fp.top"} or {"fp.bottom"} - local move_tooltip = (enabled) and {"fp.move_row_tt", {"fp.pl_recipe", 1}, {"fp." .. direction}, endpoint} or "" - - flow.add{type="sprite-button", style="fp_button_move_row", sprite="fp_sprite_arrow_" .. direction, - tags={mod="fp", on_gui_click="move_line", direction=direction, floor_id=line.parent.id, line_id=line.id}, - tooltip=move_tooltip, enabled=enabled, mouse_button_filter={"left"}} - end - - local move_flow = parent_flow.add{type="flow", direction="vertical"} - move_flow.style.vertical_spacing = 0 - move_flow.style.top_padding = 2 - - local first_subfloor_line = (line.parent.level > 1 and line.gui_position == 1) - create_move_button(move_flow, "up", first_subfloor_line) - create_move_button(move_flow, "down", first_subfloor_line) - - local style, enabled, tutorial_tooltip = nil, true, "" - local note = "" ---@type LocalisedString - if first_subfloor_line then - style = "flib_slot_button_grey_small" - enabled = false -- first subfloor line is static - else - style = (relevant_line.active) and "flib_slot_button_default_small" or "flib_slot_button_red_small" - note = (relevant_line.active) and "" or {"fp.recipe_inactive"} - tutorial_tooltip = metadata.recipe_tutorial_tt - - if line.subfloor then - style = (relevant_line.active) and "flib_slot_button_blue_small" or "flib_slot_button_purple_small" - note = {"fp.recipe_subfloor_attached"} - - elseif line.recipe.production_type == "consume" then - style = (relevant_line.active) and "flib_slot_button_yellow_small" or "flib_slot_button_orange_small" - note = {"fp.recipe_consumes_byproduct"} - end - end - - local first_line = (note == "") and {"fp.tt_title", recipe_proto.localised_name} - or {"fp.tt_title_with_note", recipe_proto.localised_name, note} - local tooltip = {"", first_line, line.effects_tooltip, tutorial_tooltip} - parent_flow.add{type="sprite-button", tags={mod="fp", on_gui_click="act_on_line_recipe", floor_id=line.parent.id, - line_id=line.id}, enabled=enabled, sprite=recipe_proto.sprite, tooltip=tooltip, style=style, - mouse_button_filter={"left-and-right"}} -end - -function builders.percentage(line, parent_flow, metadata) - local relevant_line = (line.subfloor) and line.subfloor.defining_line or line - - local enabled = (not metadata.archive_open and not metadata.matrix_solver_active) - local textfield_percentage = parent_flow.add{type="textfield", text=tostring(relevant_line.percentage), - tags={mod="fp", on_gui_text_changed="line_percentage", on_gui_confirmed="line_percentage", - floor_id=line.parent.id, line_id=line.id}, enabled=enabled} - util.gui.setup_numeric_textfield(textfield_percentage, true, false) - textfield_percentage.style.horizontal_align = "center" - textfield_percentage.style.width = 55 -end - - -local function add_module_flow(parent_flow, line, parent_type, metadata) - for _, module in ipairs(ModuleSet.get_in_order(line[parent_type].module_set)) do - local number_line = {"", "\n", module.amount, " ", {"fp.pl_module", module.amount}} - local tooltip = {"", {"fp.tt_title", module.proto.localised_name}, number_line, module.effects_tooltip, - metadata.module_tutorial_tt} - - parent_flow.add{type="sprite-button", sprite=module.proto.sprite, tooltip=tooltip, - tags={mod="fp", on_gui_click="act_on_line_module", floor_id=line.parent.id, line_id=line.id, - parent_type=parent_type, module_id=module.id}, number=module.amount, style="flib_slot_button_default_small", - mouse_button_filter={"left-and-right"}} - end -end - -function builders.machine(line, parent_flow, metadata) - local machine_count = line.machine.count - parent_flow.style.horizontal_spacing = 2 - - if line.subfloor then -- add a button that shows the total of all machines on the subfloor - -- Machine count doesn't need any special formatting in this case because it'll always be an integer - local tooltip = {"fp.subfloor_machine_count", machine_count, {"fp.pl_machine", machine_count}} - parent_flow.add{type="sprite-button", sprite="fp_generic_assembler", style="flib_slot_button_default_small", - enabled=false, number=machine_count, tooltip=tooltip} - else - local active, round_number = (line.production_ratio > 0), metadata.round_button_numbers - local count, tooltip_line = util.format.machine_count(machine_count, active, round_number) - - local machine_limit = line.machine.limit - local style, note = "flib_slot_button_default_small", nil - if not metadata.matrix_solver_active and machine_limit ~= nil then - if line.machine.force_limit then - style = "flib_slot_button_pink_small" - note = {"fp.machine_limit_force", machine_limit} - elseif line.production_ratio < line.uncapped_production_ratio then - style = "flib_slot_button_orange_small" - note = {"fp.machine_limit_enforced", machine_limit} - else - style = "flib_slot_button_green_small" - note = {"fp.machine_limit_set", machine_limit} - end - end - - if note ~= nil then table.insert(tooltip_line, {"", " - ", note}) end - local tooltip = {"", {"fp.tt_title", line.machine.proto.localised_name}, "\n", tooltip_line, - line.machine.effects_tooltip, metadata.machine_tutorial_tt} - - parent_flow.add{type="sprite-button", style=style, sprite=line.machine.proto.sprite, number=count, - tags={mod="fp", on_gui_click="act_on_line_machine", floor_id=line.parent.id, line_id=line.id, - type="machine"}, tooltip=tooltip, mouse_button_filter={"left-and-right"}} - - add_module_flow(parent_flow, line, "machine", metadata) - local module_set = line.machine.module_set - if module_set.module_limit > module_set.module_count then - local module_tooltip = {"", {"fp.add_machine_module"}, "\n", {"fp.shift_to_paste"}} - local button = parent_flow.add{type="sprite-button", sprite="utility/add", tooltip=module_tooltip, - tags={mod="fp", on_gui_click="add_machine_module", floor_id=line.parent.id, line_id=line.id}, - style="fp_sprite-button_inset_add", mouse_button_filter={"left"}, enabled=(not metadata.archive_open)} - button.style.margin = 2 - end - end -end - -function builders.beacon(line, parent_flow, metadata) - -- Some mods might remove all beacons, in which case no beacon buttons should be added - if not metadata.any_beacons_available then return end - -- Beacons only work on machines that have some allowed_effects - if line.subfloor ~= nil or line.machine.proto.allowed_effects == nil then return end - - local beacon = line.beacon - if beacon == nil then - local tooltip = {"", {"fp.add_beacon"}, "\n", {"fp.shift_to_paste"}} - local button = parent_flow.add{type="sprite-button", sprite="utility/add", tooltip=tooltip, - tags={mod="fp", on_gui_click="add_line_beacon", floor_id=line.parent.id, line_id=line.id}, - style="fp_sprite-button_inset_add", mouse_button_filter={"left"}, enabled=(not metadata.archive_open)} - button.style.margin = 2 - else - local plural_parameter = (beacon.amount == 1) and 1 or 2 -- needed because the amount can be decimal - local number_line = {"", "\n", beacon.amount, " ", {"fp.pl_beacon", plural_parameter}} - if beacon.total_amount then table.insert(number_line, {"", " - ", {"fp.in_total", beacon.total_amount}}) end - local tooltip = {"", {"fp.tt_title", beacon.proto.localised_name}, number_line, beacon.effects_tooltip, - metadata.beacon_tutorial_tt} - - local button_beacon = parent_flow.add{type="sprite-button", sprite=beacon.proto.sprite, number=beacon.amount, - tags={mod="fp", on_gui_click="act_on_line_beacon", floor_id=line.parent.id, line_id=line.id, type="beacon"}, - style="flib_slot_button_default_small", tooltip=tooltip, mouse_button_filter={"left-and-right"}} - - if beacon.total_amount ~= nil then -- add a graphical hint that a beacon total is set - local sprite_overlay = button_beacon.add{type="sprite", sprite="fp_sprite_white_square"} - sprite_overlay.ignored_by_interaction = true - end - - add_module_flow(parent_flow, line, "beacon", metadata) - end -end - -function builders.power(line, parent_flow, metadata) - local pollution_line = (metadata.pollution_column) and "" - or {"", "\n", {"fp.pollution"}, ": ", util.format.SI_value(line.pollution, "P/m", 5)} - parent_flow.add{type="label", caption=util.format.SI_value(line.energy_consumption, "W", 3), - tooltip={"", util.format.SI_value(line.energy_consumption, "W", 5), pollution_line}} -end - -function builders.pollution(line, parent_flow, _) - parent_flow.add{type="label", caption=util.format.SI_value(line.pollution, "P/m", 3), - tooltip=util.format.SI_value(line.pollution, "P/m", 5)} -end - -function builders.products(line, parent_flow, metadata) - for _, product in ipairs(Line.get_in_order(line, "Product")) do - -- items/s/machine does not make sense for lines with subfloors, show items/s instead - local machine_count = (not line.subfloor) and line.machine.count or nil - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, - product, nil, machine_count) - if amount == -1 then goto skip_product end -- an amount of -1 means it was below the margin of error - - local style, note = "flib_slot_button_default_small", nil - if not line.subfloor and not metadata.matrix_solver_active then - -- We can check for identity because they reference the same table - if line.Product.count > 1 and line.priority_product_proto == product.proto then - style = "flib_slot_button_pink_small" - note = {"fp.priority_product"} - end - end - - local name_line = (note == nil) and {"fp.tt_title", product.proto.localised_name} - or {"fp.tt_title_with_note", product.proto.localised_name, note} - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tooltip = {"", name_line, number_line, metadata.product_tutorial_tt} - - parent_flow.add{type="sprite-button", tags={mod="fp", on_gui_click="act_on_line_product", - floor_id=line.parent.id, line_id=line.id, class="Product", item_id=product.id}, - sprite=product.proto.sprite, style=style, number=amount, - tooltip=tooltip, mouse_button_filter={"left-and-right"}} - - ::skip_product:: - end -end - -function builders.byproducts(line, parent_flow, metadata) - for _, byproduct in ipairs(Line.get_in_order(line, "Byproduct")) do - -- items/s/machine does not make sense for lines with subfloors, show items/s instead - local machine_count = (not line.subfloor) and line.machine.count or nil - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, - byproduct, nil, machine_count) - if amount == -1 then goto skip_byproduct end -- an amount of -1 means it was below the margin of error - - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tooltip = {"", {"fp.tt_title", byproduct.proto.localised_name}, number_line, - metadata.byproduct_tutorial_tt} - - parent_flow.add{type="sprite-button", tags={mod="fp", on_gui_click="act_on_line_byproduct", - floor_id=line.parent.id, line_id=line.id, class="Byproduct", item_id=byproduct.id}, - sprite=byproduct.proto.sprite, style="flib_slot_button_red_small", number=amount, - tooltip=tooltip, mouse_button_filter={"left-and-right"}} - - ::skip_byproduct:: - end -end - -function builders.ingredients(line, parent_flow, metadata) - for _, ingredient in ipairs(Line.get_in_order(line, "Ingredient")) do - -- items/s/machine does not make sense for lines with subfloors, show items/s instead - local machine_count = (not line.subfloor) and line.machine.count or nil - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, - ingredient, nil, machine_count) - if amount == -1 then goto skip_ingredient end -- an amount of -1 means it was below the margin of error - - local style, enabled, note = "flib_slot_button_green_small", true, nil - local satisfaction_line = "" ---@type LocalisedString - - if ingredient.proto.type == "entity" then - style = "flib_slot_button_transparent_small" - enabled = false - note = {"fp.raw_ore"} - - elseif metadata.ingredient_satisfaction and ingredient.amount > 0 then - local satisfaction_percentage = (ingredient.satisfied_amount / ingredient.amount) * 100 - local formatted_percentage = util.format.number(satisfaction_percentage, 3) - - -- We use the formatted percentage here because it smooths out the number to 3 places - local satisfaction = tonumber(formatted_percentage) - if satisfaction <= 0 then - style = "flib_slot_button_red_small" - elseif satisfaction < 100 then - style = "flib_slot_button_yellow_small" - end -- else, it stays green - - satisfaction_line = {"", "\n", (formatted_percentage .. "%"), " ", {"fp.satisfied"}} - end - - local name_line = (note == nil) and {"fp.tt_title", ingredient.proto.localised_name} - or {"fp.tt_title_with_note", ingredient.proto.localised_name, note} - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tutorial_tt = (enabled) and metadata.ingredient_tutorial_tt or "" - local tooltip = {"", name_line, number_line, satisfaction_line, tutorial_tt} - - parent_flow.add{type="sprite-button", tags={mod="fp", on_gui_click="act_on_line_ingredient", - floor_id=line.parent.id, line_id=line.id, class="Ingredient", item_id=ingredient.id}, - sprite=ingredient.proto.sprite, style=style, number=amount, tooltip=tooltip, - enabled=enabled, mouse_button_filter={"left-and-right"}} - - ::skip_ingredient:: - end - - if not line.subfloor and line.machine.fuel then builders.fuel(line, parent_flow, metadata) end -end - --- This is not a standard builder function, as it gets called indirectly by the ingredient builder -function builders.fuel(line, parent_flow, metadata) - local fuel = line.machine.fuel - - local amount, number_tooltip = view_state.process_item(metadata.view_state_metadata, fuel, nil, line.machine.count) - if amount == -1 then return end -- an amount of -1 means it was below the margin of error - - local satisfaction_line = "" ---@type LocalisedString - if metadata.ingredient_satisfaction and fuel.amount > 0 then - local satisfaction_percentage = (fuel.satisfied_amount / fuel.amount) * 100 - local formatted_percentage = util.format.number(satisfaction_percentage, 3) - satisfaction_line = {"", "\n", (formatted_percentage .. "%"), " ", {"fp.satisfied"}} - end - - local name_line = {"fp.tt_title_with_note", fuel.proto.localised_name, {"fp.pl_fuel", 1}} - local number_line = (number_tooltip) and {"", "\n", number_tooltip} or "" - local tooltip = {"", name_line, number_line, satisfaction_line, metadata.fuel_tutorial_tt} - - parent_flow.add{type="sprite-button", sprite=fuel.proto.sprite, style="flib_slot_button_cyan_small", - tags={mod="fp", on_gui_click="act_on_line_fuel", floor_id=line.parent.id, line_id=line.id}, - number=amount, tooltip=tooltip, mouse_button_filter={"left-and-right"}} -end - -function builders.line_comment(line, parent_flow, _) - local textfield_comment = parent_flow.add{type="textfield", tags={mod="fp", on_gui_text_changed="line_comment", - floor_id=line.parent.id, line_id=line.id}, text=(line.comment or "")} - textfield_comment.style.width = 250 - util.gui.setup_textfield(textfield_comment) -end - - -local all_production_columns = { - -- name, caption, tooltip, alignment - {name="done", caption="", tooltip={"fp.column_done_tt"}, alignment="center"}, - {name="recipe", caption={"fp.pu_recipe", 1}, alignment="left"}, - {name="percentage", caption="%", tooltip={"fp.column_percentage_tt"}, alignment="center"}, - {name="machine", caption={"fp.pu_machine", 1}, alignment="left"}, - {name="beacon", caption={"fp.pu_beacon", 1}, alignment="left"}, - {name="power", caption={"fp.u_power"}, alignment="center"}, - {name="pollution", caption={"fp.pollution"}, alignment="center"}, - {name="products", caption={"fp.pu_product", 2}, alignment="left"}, - {name="byproducts", caption={"fp.pu_byproduct", 2}, alignment="left"}, - {name="ingredients", caption={"fp.pu_ingredient", 2}, alignment="left"}, - {name="line_comment", caption={"fp.column_comment"}, alignment="left"} -} - -local function refresh_production_table(player) - local ui_state = util.globals.ui_state(player) - if ui_state.main_elements.main_frame == nil then return end - - -- Determine the column_count first, because not all columns are nessecarily shown - local preferences = util.globals.preferences(player) - local subfactory = ui_state.context.subfactory - - local production_table_elements = ui_state.main_elements.production_table - local subfactory_valid = (subfactory and subfactory.valid) - local any_lines_present = (subfactory_valid) and (subfactory.selected_floor.Line.count > 0) or false - - production_table_elements.production_scroll_pane.visible = (subfactory_valid and any_lines_present) - if not subfactory_valid then return end - - local production_columns = {} - for _, column_data in ipairs(all_production_columns) do - -- Explicit comparison needed here, as both true and nil columns should be shown - if preferences[column_data.name .. "_column"] ~= false then - table.insert(production_columns, column_data) - end - end - - local scroll_pane_production = production_table_elements.production_scroll_pane - scroll_pane_production.clear() - - local table_production = scroll_pane_production.add{type="table", column_count=(#production_columns+1), - style="fp_table_production"} - table_production.style.horizontal_spacing = 16 - table_production.style.padding = {6, 0, 0, 12} - - -- Column headers - for index, column_data in ipairs(production_columns) do - local caption = (column_data.tooltip) and {"fp.info_label", column_data.caption} or column_data.caption - local label_column = table_production.add{type="label", caption=caption, tooltip=column_data.tooltip, - style="bold_label"} - label_column.style.bottom_margin = 6 - table_production.style.column_alignments[index] = column_data.alignment - end - - -- Add pushers in both directions to make sure the table takes all available space - local flow_pusher = table_production.add{type="flow"} - flow_pusher.add{type="empty-widget", style="flib_vertical_pusher"} - flow_pusher.add{type="empty-widget", style="flib_horizontal_pusher"} - - -- Generates some data that is relevant to several different builders - local metadata = generate_metadata(player) - - -- Production lines - local function render_lines(floor, indent) - for _, line in ipairs(Floor.get_in_order(floor, "Line")) do - metadata.line_count = Floor.count(floor, "Line") - metadata.level = floor.level - - for _, column_data in ipairs(production_columns) do - local flow = table_production.add{type="flow", direction="horizontal"} - builders[column_data.name](line, flow, metadata, indent) - end - table_production.add{type="empty-widget"} - - if line.subfloor and metadata.fold_out_subfloors then render_lines(line.subfloor, indent + 1) end - end - end - - render_lines(ui_state.context.floor, 0) -end - -local function build_production_table(player) - local main_elements = util.globals.main_elements(player) - main_elements.production_table = {} - - -- Can't do much here since the table needs to be destroyed on refresh anyways - local frame_vertical = main_elements.production_box.vertical_frame - local scroll_pane_production = frame_vertical.add{type="scroll-pane", direction="vertical", - style="flib_naked_scroll_pane_no_padding"} - scroll_pane_production.style.horizontally_stretchable = true - main_elements.production_table["production_scroll_pane"] = scroll_pane_production - - refresh_production_table(player) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.misc = { - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_production_table(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {production_table=true, production_detail=true, production=true, subfactory=true, all=true} - if triggers[event.trigger] then refresh_production_table(player) end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/subfactory_info.lua b/factoryplanner_1.1.72/ui/main/subfactory_info.lua deleted file mode 100644 index 90503e73..00000000 --- a/factoryplanner_1.1.72/ui/main/subfactory_info.lua +++ /dev/null @@ -1,322 +0,0 @@ --- ** LOCAL UTIL ** -local function repair_subfactory(player, _, _) - -- This function can only run is a subfactory is selected and invalid - local subfactory = util.globals.context(player).subfactory - - Subfactory.repair(subfactory, player) - - solver.update(player, subfactory) - util.raise.refresh(player, "all", nil) -- needs the full refresh to reset subfactory list buttons -end - -local function change_timescale(player, new_timescale) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - - local old_timescale = subfactory.timescale - subfactory.timescale = new_timescale - - -- Adjust the required_amount according to the new timescale - local timescale_ratio = (new_timescale / old_timescale) - for _, top_level_product in pairs(Subfactory.get_in_order(subfactory, "Product")) do - local required_amount = top_level_product.required_amount - -- No need to change amounts for belts/lanes, as timescale change does that implicitly - if required_amount.defined_by == "amount" then - required_amount.amount = required_amount.amount * timescale_ratio - end - end - - solver.update(player, subfactory) - -- View state updates itself automatically if it detects a timescale change - util.raise.refresh(player, "subfactory", nil) -end - -local function handle_solver_change(player, _, event) - local subfactory = util.globals.context(player).subfactory - local new_solver = (event.element.switch_state == "left") and "traditional" or "matrix" - - if new_solver == "matrix" then - subfactory.matrix_free_items = {} -- 'activate' the matrix solver - else - subfactory.matrix_free_items = nil -- disable the matrix solver - subfactory.linearly_dependant = false - - -- This function works its way through subfloors. Consuming recipes can't have subfloors though. - local any_lines_removed = false - local function remove_consuming_recipes(floor) - for _, line in pairs(Floor.get_in_order(floor, "Line")) do - if line.subfloor then - remove_consuming_recipes(line.subfloor) - elseif line.recipe.production_type == "consume" then - Floor.remove(floor, line) - any_lines_removed = true - end - end - end - - -- The sequential solver doesn't like byproducts yet, so remove those lines - local top_floor = Subfactory.get(subfactory, "Floor", 1) - remove_consuming_recipes(top_floor) - - if any_lines_removed then -- inform the user if any byproduct recipes are being removed - util.messages.raise(player, "hint", {"fp.hint_byproducts_removed"}, 1) - end - end - - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) -end - - -local function refresh_subfactory_info(player) - local ui_state = util.globals.ui_state(player) - if ui_state.main_elements.main_frame == nil then return end - - local subfactory_info_elements = ui_state.main_elements.subfactory_info - local subfactory = ui_state.context.subfactory - - local invalid_subfactory_selected = (subfactory and not subfactory.valid) - subfactory_info_elements.repair_flow.visible = invalid_subfactory_selected - - local valid_subfactory_selected = (subfactory and subfactory.valid) - subfactory_info_elements.power_pollution_flow.visible = valid_subfactory_selected - subfactory_info_elements.info_flow.visible = valid_subfactory_selected - - if invalid_subfactory_selected then - subfactory_info_elements.repair_label.tooltip = util.porter.format_modset_diff(subfactory.last_valid_modset) - - elseif valid_subfactory_selected then -- we need to refresh some stuff in this case - local archive_open = ui_state.flags.archive_open - local matrix_solver_active = (subfactory.matrix_free_items ~= nil) - - -- Power + Pollution - local label_power = subfactory_info_elements.power_label - label_power.caption = {"fp.bold_label", util.format.SI_value(subfactory.energy_consumption, "W", 3)} - label_power.tooltip = util.format.SI_value(subfactory.energy_consumption, "W", 5) - - local label_pollution = subfactory_info_elements.pollution_label - label_pollution.caption = {"fp.bold_label", util.format.SI_value(subfactory.pollution, "P/m", 3)} - label_pollution.tooltip = util.format.SI_value(subfactory.pollution, "P/m", 5) - - -- Timescale - for _, button in pairs(subfactory_info_elements.timescales_table.children) do - button.toggled = (subfactory.timescale == button.tags.timescale) - end - - -- Mining Productivity - local custom_prod_set = subfactory.mining_productivity - - if not custom_prod_set then -- only do this calculation when it'll actually be shown - local prod_bonus = util.format.number((player.force.mining_drill_productivity_bonus * 100), 4) - subfactory_info_elements.prod_bonus_label.caption = {"fp.bold_label", prod_bonus .. "%"} - end - subfactory_info_elements.prod_bonus_label.visible = not custom_prod_set - - subfactory_info_elements.override_prod_bonus_button.enabled = (not archive_open) - subfactory_info_elements.override_prod_bonus_button.visible = not custom_prod_set - - if custom_prod_set then -- only change the text when the textfield will actually be shown - subfactory_info_elements.prod_bonus_override_textfield.text = tostring(subfactory.mining_productivity) - end - subfactory_info_elements.prod_bonus_override_textfield.enabled = (not archive_open) - subfactory_info_elements.prod_bonus_override_textfield.visible = custom_prod_set - subfactory_info_elements.percentage_label.visible = custom_prod_set - - -- Solver Choice - local switch_state = (matrix_solver_active) and "right" or "left" - subfactory_info_elements.solver_choice_switch.switch_state = switch_state - subfactory_info_elements.solver_choice_switch.enabled = (not archive_open) - subfactory_info_elements.configure_solver_button.enabled = (not archive_open and matrix_solver_active) - end -end - -local function build_subfactory_info(player) - local main_elements = util.globals.main_elements(player) - main_elements.subfactory_info = {} - - local parent_flow = main_elements.flows.left_vertical - local frame_vertical = parent_flow.add{type="frame", direction="vertical", - style="inside_shallow_frame_with_padding"} - frame_vertical.style.size = {MAGIC_NUMBERS.list_width, MAGIC_NUMBERS.info_height} - - local flow_title = frame_vertical.add{type="flow", direction="horizontal"} - flow_title.style.margin = {-4, 0, 8, 0} - flow_title.add{type="label", caption={"fp.subfactory_info"}, style="caption_label"} - flow_title.add{type="empty-widget", style="flib_horizontal_pusher"} - - -- Power + Pollution - local flow_power_pollution = flow_title.add{type="flow", direction="horizontal"} - main_elements.subfactory_info["power_pollution_flow"] = flow_power_pollution - local label_power_value = flow_power_pollution.add{type="label"} - main_elements.subfactory_info["power_label"] = label_power_value - flow_power_pollution.add{type="label", caption="|"} - local label_pollution_value = flow_power_pollution.add{type="label"} - main_elements.subfactory_info["pollution_label"] = label_pollution_value - - - -- Repair flow - local flow_repair = frame_vertical.add{type="flow", direction="vertical"} - flow_repair.style.top_margin = -2 - main_elements.subfactory_info["repair_flow"] = flow_repair - - local label_repair = flow_repair.add{type="label", caption={"fp.warning_with_icon", {"fp.subfactory_needs_repair"}}} - label_repair.style.single_line = false - main_elements.subfactory_info["repair_label"] = label_repair - - local button_repair = flow_repair.add{type="button", tags={mod="fp", on_gui_click="repair_subfactory"}, - caption={"fp.repair_subfactory"}, style="fp_button_rounded_mini", mouse_button_filter={"left"}} - button_repair.style.top_margin = 2 - - - -- Subfactory info - local flow_info = frame_vertical.add{type="flow", direction="vertical"} - flow_info.style.vertical_spacing = 8 - main_elements.subfactory_info["info_flow"] = flow_info - - -- Timescale - local flow_timescale = flow_info.add{type="flow", direction="horizontal"} - flow_timescale.style.horizontal_spacing = 10 - flow_timescale.style.vertical_align = "center" - - flow_timescale.add{type="label", caption={"fp.info_label", {"fp.timescale"}}, tooltip={"fp.timescale_tt"}} - flow_timescale.add{type="empty-widget", style="flib_horizontal_pusher"} - - - local timescale_map = {[1] = "second", [60] = "minute", [3600] = "hour"} - local table_timescales = flow_timescale.add{type="table", column_count=table_size(timescale_map)} - table_timescales.style.horizontal_spacing = 0 - main_elements.subfactory_info["timescales_table"] = table_timescales - - for scale, name in pairs(timescale_map) do - local button = table_timescales.add{type="button", caption={"", "1", {"fp.unit_" .. name}}, - tags={mod="fp", on_gui_click="change_timescale", timescale=scale}, - style="fp_button_push", mouse_button_filter={"left"}} - button.style.width = 42 - end - - -- Mining productivity - local flow_mining_prod = flow_info.add{type="flow", direction="horizontal"} - flow_mining_prod.style.horizontal_spacing = 10 - flow_mining_prod.style.vertical_align = "center" - - flow_mining_prod.add{type="label", caption={"fp.info_label", {"fp.mining_productivity"}}, - tooltip={"fp.mining_productivity_tt"}} - flow_mining_prod.add{type="empty-widget", style="flib_horizontal_pusher"} - - local label_prod_bonus = flow_mining_prod.add{type="label"} - main_elements.subfactory_info["prod_bonus_label"] = label_prod_bonus - - local button_override_prod_bonus = flow_mining_prod.add{type="button", caption={"fp.override"}, - tags={mod="fp", on_gui_click="override_mining_prod"}, style="fp_button_rounded_mini", - mouse_button_filter={"left"}} - button_override_prod_bonus.style.disabled_font_color = {} - main_elements.subfactory_info["override_prod_bonus_button"] = button_override_prod_bonus - - local textfield_prod_bonus = flow_mining_prod.add{type="textfield", - tags={mod="fp", on_gui_text_changed="mining_prod_override", on_gui_confirmed="mining_prod_override"}} - textfield_prod_bonus.style.size = {60, 26} - util.gui.setup_numeric_textfield(textfield_prod_bonus, true, true) - main_elements.subfactory_info["prod_bonus_override_textfield"] = textfield_prod_bonus - - local label_percentage = flow_mining_prod.add{type="label", caption={"fp.bold_label", "%"}} - main_elements.subfactory_info["percentage_label"] = label_percentage - - -- Solver Choice - local flow_solver_choice = flow_info.add{type="flow", direction="horizontal"} - flow_solver_choice.style.horizontal_spacing = 10 - flow_solver_choice.style.vertical_align = "center" - - flow_solver_choice.add{type="label", caption={"fp.info_label", {"fp.solver_choice"}}, - tooltip={"fp.solver_choice_tt"}} - flow_solver_choice.add{type="empty-widget", style="flib_horizontal_pusher"} - - local switch_solver_choice = flow_solver_choice.add{type="switch", right_label_caption={"fp.solver_choice_matrix"}, - left_label_caption={"fp.solver_choice_traditional"}, - tags={mod="fp", on_gui_switch_state_changed="solver_choice_changed"}} - main_elements.subfactory_info["solver_choice_switch"] = switch_solver_choice - - local button_configure_solver = flow_solver_choice.add{type="sprite-button", sprite="utility/change_recipe", - tooltip={"fp.solver_choice_configure"}, tags={mod="fp", on_gui_click="configure_matrix_solver"}, - style="fp_sprite-button_rounded_mini", mouse_button_filter={"left"}} - button_configure_solver.style.size = 26 - button_configure_solver.style.padding = 0 - main_elements.subfactory_info["configure_solver_button"] = button_configure_solver - - refresh_subfactory_info(player) -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "repair_subfactory", - timeout = 20, - handler = repair_subfactory - }, - { - name = "change_timescale", - handler = (function(player, tags, _) - change_timescale(player, tags.timescale) - end) - }, - { - name = "override_mining_prod", - handler = (function(player, _, _) - local subfactory = util.globals.context(player).subfactory - subfactory.mining_productivity = 0 - solver.update(player, subfactory) - util.raise.refresh(player, "subfactory", nil) - end) - }, - { - name = "configure_matrix_solver", - handler = (function(player, _, _) - util.raise.open_dialog(player, {dialog="matrix", modal_data={configuration=true}}) - end) - } - }, - on_gui_text_changed = { - { - name = "mining_prod_override", - handler = (function(player, _, event) - local ui_state = util.globals.ui_state(player) - ui_state.context.subfactory.mining_productivity = tonumber(event.element.text) - ui_state.flags.recalculate_on_subfactory_change = true -- set flag to recalculate if necessary - end) - } - }, - on_gui_switch_state_changed = { - { - name = "solver_choice_changed", - handler = handle_solver_change - } - }, - on_gui_confirmed = { - { - name = "mining_prod_override", - handler = (function(player, _, _) - local ui_state = util.globals.ui_state(player) - ui_state.flags.recalculate_on_subfactory_change = false -- reset this flag as we refresh below - solver.update(player, ui_state.context.subfactory) - util.raise.refresh(player, "subfactory", nil) - end) - } - } -} - -listeners.misc = { - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_subfactory_info(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {subfactory_info=true, subfactory=true, all=true} - if triggers[event.trigger] then refresh_subfactory_info(player) end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/subfactory_list.lua b/factoryplanner_1.1.72/ui/main/subfactory_list.lua deleted file mode 100644 index 0b2691d4..00000000 --- a/factoryplanner_1.1.72/ui/main/subfactory_list.lua +++ /dev/null @@ -1,401 +0,0 @@ --- ** LOCAL UTIL ** -local function toggle_archive(player, _, _) - local player_table = util.globals.player_table(player) - local flags = player_table.ui_state.flags - flags.archive_open = not flags.archive_open - - local factory = flags.archive_open and player_table.archive or player_table.factory - util.context.set_factory(player, factory) - util.raise.refresh(player, "all", nil) -end - --- Refresh the dialog, quitting archive view if it has become empty -local function refresh_after_subfactory_deletion(player, factory, removed_gui_position) - if removed_gui_position > factory.Subfactory.count then removed_gui_position = removed_gui_position - 1 end - local subfactory = Factory.get_by_gui_position(factory, "Subfactory", removed_gui_position) - util.context.set_subfactory(player, subfactory) - - local archive_open = util.globals.flags(player).archive_open - if archive_open and Factory.count(factory, "Subfactory") == 0 then - -- Make sure the just-unarchived subfactory is the selected one in factory; It'll always be the last one - local main_factory = util.globals.player_table(player).factory - local last_position = Factory.count(main_factory, "Subfactory") - -- It's okay to set selected_subfactory directly here, as toggle_archive calls the proper context util function - main_factory.selected_subfactory = Factory.get_by_gui_position(main_factory, "Subfactory", last_position) - - toggle_archive(player) -- does refreshing on its own - else - util.raise.refresh(player, "all", nil) - end -end - --- Delete subfactory for good and refresh interface if necessary -local function delete_subfactory_for_good(metadata) - local archive = metadata.subfactory.parent - local removed_gui_position = Factory.remove(archive, metadata.subfactory) - - local player = game.get_player(metadata.player_index) ---@cast player -nil - if util.globals.main_elements(player).main_frame == nil then return end - - if util.globals.flags(player).archive_open then - refresh_after_subfactory_deletion(player, archive, removed_gui_position) - else -- only need to refresh the archive button enabled state really - util.raise.refresh(player, "subfactory_list", nil) - end -end - - -local function archive_subfactory(player, _, _) - local player_table = util.globals.player_table(player) - local ui_state = player_table.ui_state - local subfactory = ui_state.context.subfactory - local archive_open = ui_state.flags.archive_open - - local origin = archive_open and player_table.archive or player_table.factory - local destination = archive_open and player_table.factory or player_table.archive - - -- Reset deletion if a deleted subfactory is un-archived - if archive_open and subfactory.tick_of_deletion then - util.nth_tick.cancel(subfactory.tick_of_deletion) - subfactory.tick_of_deletion = nil - end - - local removed_gui_position = Factory.remove(origin, subfactory) - Factory.add(destination, subfactory) -- needs to be added after the removal else shit breaks - refresh_after_subfactory_deletion(player, origin, removed_gui_position) -end - -local function add_subfactory(player, _, event) - local prefer_product_picker = util.globals.settings(player).prefer_product_picker - local function xor(a, b) return not a ~= not b end -- fancy, first time I ever needed this - - if xor(event.shift, prefer_product_picker) then -- go right to the item picker with automatic subfactory naming - util.raise.open_dialog(player, {dialog="picker", modal_data={item_id=nil, item_category="product", - create_subfactory=true}}) - - else -- otherwise, have the user pick a subfactory name first - util.raise.open_dialog(player, {dialog="subfactory", modal_data={subfactory_id=nil}}) - end -end - -local function duplicate_subfactory(player, _, _) - local player_table = util.globals.player_table(player) - local context = player_table.ui_state.context - local archive_open = player_table.ui_state.flags.archive_open - local factory = player_table.factory - - local clone = Subfactory.clone(context.subfactory) - local inserted_clone = nil - if archive_open then - inserted_clone = Factory.add(factory, clone) - toggle_archive(player, _, _) - else - inserted_clone = Factory.insert_at(factory, context.subfactory.gui_position+1, clone) - end - - util.context.set_subfactory(player, inserted_clone) - solver.update(player, inserted_clone) - util.raise.refresh(player, "all", nil) -end - - -local function handle_move_subfactory_click(player, tags, event) - local context = util.globals.context(player) - local subfactory = Factory.get(context.factory, "Subfactory", tags.subfactory_id) - - local spots_to_shift = (event.control) and 5 or ((not event.shift) and 1 or nil) - local translated_direction = (tags.direction == "up") and "negative" or "positive" - Factory.shift(context.factory, subfactory, 1, translated_direction, spots_to_shift) - - util.raise.refresh(player, "subfactory_list", nil) -end - -local function handle_subfactory_click(player, tags, action) - local ui_state = util.globals.ui_state(player) - local previous_subfactory = ui_state.context.subfactory - - local selected_subfactory = Factory.get(ui_state.context.factory, "Subfactory", tags.subfactory_id) - util.context.set_subfactory(player, selected_subfactory) - - if action == "select" then - if ui_state.flags.recalculate_on_subfactory_change then - -- This flag is set when a textfield is changed but not confirmed - ui_state.flags.recalculate_on_subfactory_change = false - solver.update(player, previous_subfactory) - end - util.raise.refresh(player, "all", nil) - - elseif action == "edit" then - util.raise.refresh(player, "all", nil) -- refresh to update the selected subfactory - util.raise.open_dialog(player, {dialog="subfactory", - modal_data={subfactory_id=selected_subfactory.id}}) - - elseif action == "delete" then - subfactory_list.delete_subfactory(player) - end -end - - -local function refresh_subfactory_list(player) - local player_table = util.globals.player_table(player) - local flags, context = player_table.ui_state.flags, player_table.ui_state.context - - local main_elements = player_table.ui_state.main_elements - if main_elements.main_frame == nil then return end - - local selected_subfactory = context.subfactory - local subfactory_list_elements = main_elements.subfactory_list - local listbox = subfactory_list_elements.subfactory_listbox - listbox.clear() - - if selected_subfactory ~= nil then -- only need to run this if any subfactory exists - local attach_subfactory_products = player_table.preferences.attach_subfactory_products - - local subfactory_count = Factory.count(context.factory, "Subfactory") - local tutorial_tt = (player_table.preferences.tutorial_mode) - and util.actions.tutorial_tooltip("act_on_subfactory", nil, player) or nil - - for _, subfactory in pairs(Factory.get_in_order(context.factory, "Subfactory")) do - local selected = (selected_subfactory.id == subfactory.id) - local caption, info_tooltip = Subfactory.tostring(subfactory, attach_subfactory_products, false) - local padded_caption = {"", " ", caption} - local tooltip = {"", info_tooltip, tutorial_tt} - - -- Pretty sure this needs the 'using-spaces-to-shift-the-label'-hack, padding doesn't work - local subfactory_button = listbox.add{type="button", caption=padded_caption, tooltip=tooltip, - tags={mod="fp", on_gui_click="act_on_subfactory", subfactory_id=subfactory.id}, - style="fp_button_fake_listbox_item", toggled=selected, mouse_button_filter={"left-and-right"}} - - local function create_move_button(flow, direction) - local enabled = (direction == "up" and subfactory.gui_position ~= 1) - or (direction == "down" and subfactory.gui_position < subfactory_count) - local endpoint = (direction == "up") and {"fp.top"} or {"fp.bottom"} - local move_tooltip = (enabled) and {"fp.move_row_tt", {"fp.pl_subfactory", 1}, {"fp." .. direction}, endpoint} or "" - - flow.add{type="sprite-button", style="fp_button_move_row", sprite="fp_sprite_arrow_" .. direction, - tags={mod="fp", on_gui_click="move_subfactory", direction=direction, subfactory_id=subfactory.id}, - tooltip=move_tooltip, enabled=enabled, mouse_button_filter={"left"}} - end - - local move_flow = subfactory_button.add{type="flow", direction="horizontal"} - move_flow.style.top_padding = 3 - move_flow.style.horizontal_spacing = 0 - create_move_button(move_flow, "up") - create_move_button(move_flow, "down") - end - end - - -- Set all the button states and styles appropriately - local subfactory_exists = (selected_subfactory ~= nil) - local archive_open = (flags.archive_open) - - local archived_subfactory_count = Factory.count(player_table.archive, "Subfactory") - subfactory_list_elements.toggle_archive_button.enabled = (archived_subfactory_count > 0) - subfactory_list_elements.toggle_archive_button.style = (archive_open) - and "flib_selected_tool_button" or "tool_button" - - if not archive_open then - local subfactory_plural = {"fp.pl_subfactory", archived_subfactory_count} - local archive_tooltip = {"fp.action_open_archive_tt", (archived_subfactory_count > 0) - and {"fp.archive_filled", archived_subfactory_count, subfactory_plural} or {"fp.archive_empty"}} - subfactory_list_elements.toggle_archive_button.tooltip = archive_tooltip - else - subfactory_list_elements.toggle_archive_button.tooltip = {"fp.action_close_archive_tt"} - end - - subfactory_list_elements.archive_button.enabled = (subfactory_exists) - subfactory_list_elements.archive_button.sprite = (archive_open) - and "utility/export_slot" or "utility/import_slot" - subfactory_list_elements.archive_button.tooltip = (archive_open) - and {"fp.action_unarchive_subfactory"} or {"fp.action_archive_subfactory"} - - subfactory_list_elements.import_button.enabled = (not archive_open) - subfactory_list_elements.export_button.enabled = (subfactory_exists) - - local prefer_product_picker = util.globals.settings(player).prefer_product_picker - subfactory_list_elements.add_button.enabled = (not archive_open) - subfactory_list_elements.add_button.tooltip = (prefer_product_picker) - and {"fp.action_add_subfactory_by_product"} or {"fp.action_add_subfactory_by_name"} - - subfactory_list_elements.edit_button.enabled = (subfactory_exists) - subfactory_list_elements.duplicate_button.enabled = (selected_subfactory ~= nil and selected_subfactory.valid) - - subfactory_list_elements.delete_button.enabled = (subfactory_exists) - local delay_in_minutes = math.floor(MAGIC_NUMBERS.subfactory_deletion_delay / 3600) - subfactory_list_elements.delete_button.tooltip = (archive_open) - and {"fp.action_delete_subfactory"} or {"fp.action_trash_subfactory", delay_in_minutes} -end - -local function build_subfactory_list(player) - local main_elements = util.globals.main_elements(player) - main_elements.subfactory_list = {} - - local parent_flow = main_elements.flows.left_vertical - local frame_vertical = parent_flow.add{type="frame", direction="vertical", style="inside_deep_frame"} - local row_count = util.globals.settings(player).subfactory_list_rows - frame_vertical.style.height = MAGIC_NUMBERS.subheader_height + (row_count * MAGIC_NUMBERS.list_element_height) - - local subheader = frame_vertical.add{type="frame", direction="horizontal", style="subheader_frame"} - - local button_toggle_archive = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="toggle_archive"}, - sprite="fp_sprite_archive_dark", mouse_button_filter={"left"}} - main_elements.subfactory_list["toggle_archive_button"] = button_toggle_archive - - local button_archive = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="archive_subfactory"}, - style="tool_button", mouse_button_filter={"left"}} - main_elements.subfactory_list["archive_button"] = button_archive - - subheader.add{type="empty-widget", style="flib_horizontal_pusher"} - - local button_import = subheader.add{type="sprite-button", sprite="utility/import", - tooltip={"fp.action_import_subfactory"}, style="tool_button", mouse_button_filter={"left"}, - tags={mod="fp", on_gui_click="subfactory_list_open_dialog", type="import"}} - main_elements.subfactory_list["import_button"] = button_import - - local button_export = subheader.add{type="sprite-button", sprite="utility/export", - tooltip={"fp.action_export_subfactory"}, style="tool_button", mouse_button_filter={"left"}, - tags={mod="fp", on_gui_click="subfactory_list_open_dialog", type="export"}} - main_elements.subfactory_list["export_button"] = button_export - - subheader.add{type="empty-widget", style="flib_horizontal_pusher"} - - local button_add = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="add_subfactory"}, - sprite="utility/add", style="flib_tool_button_light_green", mouse_button_filter={"left"}} - main_elements.subfactory_list["add_button"] = button_add - - local button_edit = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="edit_subfactory"}, - sprite="utility/rename_icon_normal", tooltip={"fp.action_edit_subfactory"}, style="tool_button", - mouse_button_filter={"left"}} - main_elements.subfactory_list["edit_button"] = button_edit - - local button_duplicate = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="duplicate_subfactory"}, - sprite="utility/clone", tooltip={"fp.action_duplicate_subfactory"}, style="tool_button", - mouse_button_filter={"left"}} - main_elements.subfactory_list["duplicate_button"] = button_duplicate - - local button_delete = subheader.add{type="sprite-button", tags={mod="fp", on_gui_click="delete_subfactory"}, - sprite="utility/trash", style="tool_button_red", mouse_button_filter={"left"}} - main_elements.subfactory_list["delete_button"] = button_delete - - -- This is not really a list-box, but it imitates one and allows additional features - local listbox_subfactories = frame_vertical.add{type="scroll-pane", style="fp_scroll-pane_fake_listbox"} - listbox_subfactories.style.width = MAGIC_NUMBERS.list_width - main_elements.subfactory_list["subfactory_listbox"] = listbox_subfactories - - refresh_subfactory_list(player) -end - - --- ** TOP LEVEL ** -subfactory_list = {} - --- Utility function to centralize subfactory creation behavior -function subfactory_list.add_subfactory(player, name) - local subfactory = Subfactory.init(name) - - local settings = util.globals.settings(player) - subfactory.timescale = settings.default_timescale - if settings.prefer_matrix_solver then subfactory.matrix_free_items = {} end - - local context = util.globals.context(player) - Factory.add(context.factory, subfactory) - util.context.set_subfactory(player, subfactory) - - return subfactory -end - --- Utility function to centralize subfactory deletion behavior -function subfactory_list.delete_subfactory(player) - local ui_state = util.globals.ui_state(player) - local subfactory = ui_state.context.subfactory - if subfactory == nil then return end -- prevent crashes due to multiplayer latency - - if ui_state.flags.archive_open then - if subfactory.tick_of_deletion then util.nth_tick.cancel(subfactory.tick_of_deletion) end - - local factory = ui_state.context.factory - local removed_gui_position = Factory.remove(factory, subfactory) - refresh_after_subfactory_deletion(player, factory, removed_gui_position) - else - local desired_tick_of_deletion = game.tick + MAGIC_NUMBERS.subfactory_deletion_delay - local actual_tick_of_deletion = util.nth_tick.register(desired_tick_of_deletion, - "delete_subfactory_for_good", {player_index=player.index, subfactory=subfactory}) - subfactory.tick_of_deletion = actual_tick_of_deletion - - archive_subfactory(player) - end -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "toggle_archive", - handler = toggle_archive - }, - { - name = "archive_subfactory", - handler = archive_subfactory - }, - { -- import/export buttons - name = "subfactory_list_open_dialog", - handler = (function(player, tags, _) - util.raise.open_dialog(player, {dialog=tags.type}) - end) - }, - { - name = "add_subfactory", - handler = add_subfactory - }, - { - name = "edit_subfactory", - handler = (function(player, _, _) - local subfactory = util.globals.context(player).subfactory - util.raise.open_dialog(player, {dialog="subfactory", - modal_data={subfactory_id=subfactory.id}}) - end) - }, - { - name = "duplicate_subfactory", - handler = duplicate_subfactory - }, - { - name = "delete_subfactory", - handler = subfactory_list.delete_subfactory - }, - { - name = "move_subfactory", - handler = handle_move_subfactory_click - }, - { - name = "act_on_subfactory", - modifier_actions = { - select = {"left"}, - edit = {"right"}, - delete = {"control-right"} - }, - handler = handle_subfactory_click - } - } -} - -listeners.misc = { - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_subfactory_list(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {subfactory_list=true, all=true} - if triggers[event.trigger] then refresh_subfactory_list(player) end - end) -} - -listeners.global = { - delete_subfactory_for_good = delete_subfactory_for_good -} - -return { listeners } diff --git a/factoryplanner_1.1.72/ui/main/title_bar.lua b/factoryplanner_1.1.72/ui/main/title_bar.lua deleted file mode 100644 index 6a566f43..00000000 --- a/factoryplanner_1.1.72/ui/main/title_bar.lua +++ /dev/null @@ -1,135 +0,0 @@ --- ** LOCAL UTIL ** -local function toggle_paused_state(player, _, _) - if not game.is_multiplayer() then - local preferences = util.globals.preferences(player) - preferences.pause_on_interface = not preferences.pause_on_interface - - local main_elements = util.globals.main_elements(player) - local button_pause = main_elements.title_bar.pause_button - button_pause.toggled = (preferences.pause_on_interface) - - main_dialog.set_pause_state(player, main_elements.main_frame) - end -end - - -local function refresh_title_bar(player) - local ui_state = util.globals.ui_state(player) - if ui_state.main_elements.main_frame == nil then return end - - local subfactory = ui_state.context.subfactory - local title_bar_elements = ui_state.main_elements.title_bar - -- Disallow switching to compact view if the selected subfactory is nil or invalid - title_bar_elements.switch_button.enabled = (subfactory and subfactory.valid) - - title_bar_elements.pause_button.enabled = (not game.is_multiplayer()) -end - -local function build_title_bar(player) - local main_elements = util.globals.main_elements(player) - main_elements.title_bar = {} - - local parent_flow = main_elements.flows.top_horizontal - local flow_title_bar = parent_flow.add{type="flow", direction="horizontal", - tags={mod="fp", on_gui_click="re-center_main_dialog"}} - flow_title_bar.style.horizontal_spacing = 8 - flow_title_bar.drag_target = main_elements.main_frame - -- The separator line causes the height to increase for some inexplicable reason, so we must hardcode it here - flow_title_bar.style.height = MAGIC_NUMBERS.title_bar_height - - local button_switch = flow_title_bar.add{type="sprite-button", style="frame_action_button", - tags={mod="fp", on_gui_click="switch_to_compact_view"}, tooltip={"fp.switch_to_compact_view"}, - sprite="fp_sprite_arrow_left_light", hovered_sprite="fp_sprite_arrow_left_dark", - clicked_sprite="fp_sprite_arrow_left_dark", mouse_button_filter={"left"}} - button_switch.style.padding = 2 - main_elements.title_bar["switch_button"] = button_switch - - flow_title_bar.add{type="label", caption={"mod-name.factoryplanner"}, style="frame_title", - ignored_by_interaction=true} - - local drag_handle = flow_title_bar.add{type="empty-widget", style="flib_titlebar_drag_handle", - ignored_by_interaction=true} - drag_handle.style.minimal_width = 80 - - flow_title_bar.add{type="button", caption={"fp.tutorial"}, style="fp_button_frame_tool", - tags={mod="fp", on_gui_click="title_bar_open_dialog", type="tutorial"}, mouse_button_filter={"left"}} - flow_title_bar.add{type="button", caption={"fp.preferences"}, style="fp_button_frame_tool", - tags={mod="fp", on_gui_click="title_bar_open_dialog", type="preferences"}, mouse_button_filter={"left"}} - - local separation = flow_title_bar.add{type="line", direction="vertical"} - separation.style.height = 24 - - local button_pause = flow_title_bar.add{type="button", caption={"fp.pause"}, tooltip={"fp.pause_on_interface"}, - tags={mod="fp", on_gui_click="toggle_pause_game"}, style="fp_button_frame_tool", mouse_button_filter={"left"}} - main_elements.title_bar["pause_button"] = button_pause - - local preferences = util.globals.preferences(player) - button_pause.toggled = (preferences.pause_on_interface) - - local button_close = flow_title_bar.add{type="sprite-button", tags={mod="fp", on_gui_click="close_main_dialog"}, - sprite="utility/close_white", hovered_sprite="utility/close_black", clicked_sprite="utility/close_black", - tooltip={"fp.close_interface"}, style="frame_action_button", mouse_button_filter={"left"}} - button_close.style.padding = 1 -end - - --- ** EVENTS ** -local listeners = {} - -listeners.gui = { - on_gui_click = { - { - name = "re-center_main_dialog", - handler = (function(player, _, event) - if event.button == defines.mouse_button_type.middle then - local ui_state = util.globals.ui_state(player) - local main_frame = ui_state.main_elements.main_frame - util.gui.properly_center_frame(player, main_frame, ui_state.main_dialog_dimensions) - end - end) - }, - { - name = "switch_to_compact_view", - handler = (function(player, _, _) - main_dialog.toggle(player) - util.globals.flags(player).compact_view = true - - compact_dialog.toggle(player) - end) - }, - { - name = "close_main_dialog", - handler = (function(player, _, _) - main_dialog.toggle(player) - end) - }, - { - name = "toggle_pause_game", - handler = toggle_paused_state - }, - { - name = "title_bar_open_dialog", - handler = (function(player, tags, _) - util.raise.open_dialog(player, {dialog=tags.type}) - end) - } - } -} - -listeners.misc = { - fp_toggle_pause = (function(player, _) - if main_dialog.is_in_focus(player) then toggle_paused_state(player) end - end), - - build_gui_element = (function(player, event) - if event.trigger == "main_dialog" then - build_title_bar(player) - end - end), - refresh_gui_element = (function(player, event) - local triggers = {title_bar=true, subfactory=true, all=true} - if triggers[event.trigger] then refresh_title_bar(player) end - end) -} - -return { listeners } diff --git a/factoryplanner_1.1.72/util/actions.lua b/factoryplanner_1.1.72/util/actions.lua deleted file mode 100644 index 27c67506..00000000 --- a/factoryplanner_1.1.72/util/actions.lua +++ /dev/null @@ -1,101 +0,0 @@ -local _actions = {} - ----@alias ActionLimitations { archive_open: boolean?, matrix_active: boolean?, recipebook: boolean? } ----@alias ActiveLimitations { archive_open: boolean, matrix_active: boolean, recipebook: boolean } ----@alias ActionList { [string]: string } - ----@param player LuaPlayer ----@return ActiveLimitations -function _actions.current_limitations(player) - local ui_state = util.globals.ui_state(player) - return { - archive_open = ui_state.flags.archive_open, - matrix_active = (ui_state.context.subfactory.matrix_free_items ~= nil), - recipebook = RECIPEBOOK_ACTIVE - } -end - ----@param action_limitations ActionLimitations[] ----@param active_limitations ActiveLimitations ----@return boolean -function _actions.allowed(action_limitations, active_limitations) - -- If a particular limitation is nil, it indicates that the action is allowed regardless - -- If it is non-nil, it needs to match the current state of the limitation exactly - for limitation_name, limitation in pairs(action_limitations) do - if active_limitations[limitation_name] ~= limitation then return false end - end - return true -end - ----@param action_name string ----@param active_limitations ActiveLimitations ----@param player LuaPlayer? ----@return LocalisedString -function _actions.tutorial_tooltip(action_name, active_limitations, player) - active_limitations = active_limitations or util.actions.current_limitations(player) - - local tooltip = {"", "\n"} - for _, action_line in pairs(TUTORIAL_TOOLTIPS[action_name]) do - if util.actions.allowed(action_line.limitations, active_limitations) then - table.insert(tooltip, action_line.string) - end - end - - return tooltip -end - ----@param data table ----@param player LuaPlayer ----@param action_list ActionList -function _actions.tutorial_tooltip_list(data, player, action_list) - local active_limitations = util.actions.current_limitations(player) -- done here so it's 'cached' - for reference_name, action_name in pairs(action_list) do - data[reference_name] = util.actions.tutorial_tooltip(action_name, active_limitations, nil) - end -end - -function _actions.all_tutorial_tooltips(modifier_actions) - local action_lines = {} - - for modifier_click, modifier_action in pairs(modifier_actions) do - local split_modifiers = util.split_string(modifier_click, "-") - - local modifier_string = {""} - for _, modifier in pairs(fancytable.slice(split_modifiers, 1, -1)) do - table.insert(modifier_string, {"", {"fp.tut_" .. modifier}, " + "}) - end - table.insert(modifier_string, {"fp.tut_" .. split_modifiers[#split_modifiers]}) - - local action_string = {"fp.tut_action_line", modifier_string, {"fp.tut_" .. modifier_action.name}} - table.insert(action_lines, {string=action_string, limitations=modifier_action.limitations}) - end - - return action_lines -end - --- Returns whether rate limiting is active for the given action, stopping it from proceeding --- This is essentially to prevent duplicate commands in quick succession, enabled by lag -function _actions.rate_limited(player, tick, action_name, timeout) - local ui_state = util.globals.ui_state(player) - - -- If this action has no timeout, reset the last action and allow it - if timeout == nil or game.tick_paused then - ui_state.last_action = nil - return false - end - - local last_action = ui_state.last_action - -- Only disallow action under these specific circumstances - if last_action and last_action.action_name == action_name and (tick - last_action.tick) < timeout then - return true - - else -- set the last action if this action will actually be carried out - ui_state.last_action = { - action_name = action_name, - tick = tick - } - return false - end -end - -return _actions diff --git a/factoryplanner_1.1.72/util/clipboard.lua b/factoryplanner_1.1.72/util/clipboard.lua deleted file mode 100644 index 5883d5e8..00000000 --- a/factoryplanner_1.1.72/util/clipboard.lua +++ /dev/null @@ -1,59 +0,0 @@ -local _clipboard = {} - ----@class ClipboardEntry ----@field class string ----@field object FPCopyableObject ----@field parent FPParentObject - --- Copies the given object into the player's clipboard as a packed object ----@param player LuaPlayer ----@param object FPCopyableObject -function _clipboard.copy(player, object) - local player_table = util.globals.player_table(player) - player_table.clipboard = { - class = object.class, - object = _G[object.class].pack(object), - parent = object.parent -- just used for unpacking, will remain a reference even if deleted elsewhere - } - util.cursor.create_flying_text(player, {"fp.copied_into_clipboard", {"fp.pu_" .. object.class:lower(), 1}}) -end - --- Tries pasting the player's clipboard content onto the given target ----@param player LuaPlayer ----@param target FPCopyableObject -function _clipboard.paste(player, target) - local player_table = util.globals.player_table(player) - local clip = player_table.clipboard - - if clip == nil then - util.cursor.create_flying_text(player, {"fp.clipboard_empty"}) - else - local level = (clip.class == "Line") and (target.parent.level or 1) or nil - local clone = _G[clip.class].unpack(fancytable.deep_copy(clip.object), level) - clone.parent = clip.parent -- not very elegant to retain the parent here, but it's an easy solution - _G[clip.class].validate(clone) - - local success, error = _G[target.class].paste(target, clone) - if success then -- objects in the clipboard are always valid since it resets on_config_changed - util.cursor.create_flying_text(player, {"fp.pasted_from_clipboard", {"fp.pu_" .. clip.class:lower(), 1}}) - - solver.update(player, player_table.ui_state.context.subfactory) - util.raise.refresh(player, "subfactory", nil) - else - local object_lower, target_lower = {"fp.pl_" .. clip.class:lower(), 1}, {"fp.pl_" .. target.class:lower(), 1} - if error == "incompatible_class" then - util.cursor.create_flying_text(player, {"fp.clipboard_incompatible_class", object_lower, target_lower}) - elseif error == "incompatible" then - util.cursor.create_flying_text(player, {"fp.clipboard_incompatible", object_lower}) - elseif error == "already_exists" then - util.cursor.create_flying_text(player, {"fp.clipboard_already_exists", target_lower}) - elseif error == "no_empty_slots" then - util.cursor.create_flying_text(player, {"fp.clipboard_no_empty_slots"}) - elseif error == "recipe_irrelevant" then - util.cursor.create_flying_text(player, {"fp.clipboard_recipe_irrelevant"}) - end - end - end -end - -return _clipboard diff --git a/factoryplanner_1.1.72/util/context.lua b/factoryplanner_1.1.72/util/context.lua deleted file mode 100644 index c53a9a70..00000000 --- a/factoryplanner_1.1.72/util/context.lua +++ /dev/null @@ -1,73 +0,0 @@ -local _context = {} - ----@class Context ----@field factory FPFactory ----@field subfactory FPSubfactory? ----@field floor FPFloor? - --- Creates a blank context referencing which part of the Factory is currently displayed ----@param player LuaPlayer ----@return Context context -function _context.create(player) - return { - factory = global.players[player.index].factory, - subfactory = nil, - floor = nil - } -end - --- Updates the context to match the newly selected factory ----@param player LuaPlayer ----@param factory FPFactory -function _context.set_factory(player, factory) - local context = util.globals.context(player) - context.factory = factory - local subfactory = factory.selected_subfactory - or Factory.get_by_gui_position(factory, "Subfactory", 1) -- might be nil - util.context.set_subfactory(player, subfactory) -end - --- Updates the context to match the newly selected subfactory ----@param player LuaPlayer ----@param subfactory FPSubfactory? -function _context.set_subfactory(player, subfactory) - local context = util.globals.context(player) - context.factory.selected_subfactory = subfactory - context.subfactory = subfactory - context.floor = (subfactory ~= nil) and subfactory.selected_floor or nil -end - --- Updates the context to match the newly selected floor ----@param player LuaPlayer ----@param floor FPFloor -function _context.set_floor(player, floor) - local context = util.globals.context(player) - context.subfactory.selected_floor = floor - context.floor = floor -end - --- Changes the context to the floor indicated by the given destination ----@param player LuaPlayer ----@param destination "up" | "down" ----@return boolean success -function _context.change_floor(player, destination) - local context = util.globals.context(player) - local subfactory, floor = context.subfactory, context.floor - if subfactory == nil or floor == nil then return false end - - local selected_floor = nil ---@type FPFloor - if destination == "up" and floor.level > 1 then - selected_floor = floor.origin_line.parent - elseif destination == "top" then - selected_floor = Subfactory.get(subfactory, "Floor", 1) - end - - if selected_floor ~= nil then - util.context.set_floor(player, selected_floor) - -- Reset the subfloor we moved from if it doesn't have any additional recipes - if Floor.count(floor, "Line") < 2 then Floor.reset(floor) end - end - return (selected_floor ~= nil) -end - -return _context diff --git a/factoryplanner_1.1.72/util/cursor.lua b/factoryplanner_1.1.72/util/cursor.lua deleted file mode 100644 index e13fa96d..00000000 --- a/factoryplanner_1.1.72/util/cursor.lua +++ /dev/null @@ -1,138 +0,0 @@ -local _cursor = {} - ----@param player LuaPlayer ----@param blueprint_entities BlueprintEntity[] -local function set_cursor_blueprint(player, blueprint_entities) - local script_inventory = game.create_inventory(1) - local blank_slot = script_inventory[1] - - blank_slot.set_stack{name="fp_cursor_blueprint"} - blank_slot.set_blueprint_entities(blueprint_entities) - player.add_to_clipboard(blank_slot) - player.activate_paste() - script_inventory.destroy() -end - - ----@param player LuaPlayer ----@param text LocalisedString -function _cursor.create_flying_text(player, text) - player.create_local_flying_text{text=text, create_at_cursor=true} -end - ----@param player LuaPlayer ----@param line FPLine ----@param object FPMachine | FPBeacon ----@return boolean success -function _cursor.set_entity(player, line, object) - local entity_prototype = game.entity_prototypes[object.proto.name] - if entity_prototype.has_flag("not-blueprintable") or not entity_prototype.has_flag("player-creation") - or entity_prototype.items_to_place_this == nil then - util.cursor.create_flying_text(player, {"fp.put_into_cursor_failed", entity_prototype.localised_name}) - return false - end - - local module_list = {} - for _, module in pairs(ModuleSet.get_in_order(object.module_set)) do - module_list[module.proto.name] = module.amount - end - - local blueprint_entity = { - entity_number = 1, - name = object.proto.name, - position = {0, 0}, - items = module_list, - recipe = (object.class == "Machine") and line.recipe.proto.name or nil - } - - set_cursor_blueprint(player, {blueprint_entity}) - return true -end - ----@param player LuaPlayer ----@param items { [string]: number } ----@return boolean success -function _cursor.set_item_combinator(player, items) - local combinator_proto = game.entity_prototypes["constant-combinator"] - if combinator_proto == nil then - util.cursor.create_flying_text(player, {"fp.blueprint_no_combinator_prototype"}) - return false - elseif not next(items) then - util.cursor.create_flying_text(player, {"fp.impossible_to_blueprint_fluid"}) - return false - end - local filter_limit = combinator_proto.item_slot_count - - local blueprint_entities = {} ---@type BlueprintEntity[] - local current_combinator, current_filter_count = nil, 0 - local next_entity_number, next_position = 1, {0, 0} - - for proto_name, item_amount in pairs(items) do - if not current_combinator or current_filter_count == filter_limit then - current_combinator = { - entity_number = next_entity_number, - name = "constant-combinator", - tags = {fp_item_combinator = true}, - position = next_position, - control_behavior = {filters = {}}, - connections = {{green = {}}} -- filled in below - } - table.insert(blueprint_entities, current_combinator) - - next_entity_number = next_entity_number + 1 - next_position = {next_position[1] + 1, 0} - current_filter_count = 0 - end - - current_filter_count = current_filter_count + 1 - table.insert(current_combinator.control_behavior.filters, { - signal = {type = 'item', name = proto_name}, - count = math.max(item_amount, 1), -- make sure amounts < 1 are not excluded - index = current_filter_count - }) - end - - ---@param main_entity BlueprintEntity - ---@param other_entity BlueprintEntity - local function connect_if_entity_exists(main_entity, other_entity) - if other_entity ~= nil then - local entry = {entity_id = other_entity.entity_number} - table.insert(main_entity.connections[1].green, entry) - end - end - - for index, entity in ipairs(blueprint_entities) do - connect_if_entity_exists(entity, blueprint_entities[index-1]) - if not next(entity.connections[1].green) then entity.connections = nil end - end - - set_cursor_blueprint(player, blueprint_entities) - return true -end - ----@param player LuaPlayer ----@param proto FPItemPrototype | FPFuelPrototype ----@param amount number -function _cursor.add_to_item_combinator(player, proto, amount) - if proto.type ~= "item" then - util.cursor.create_flying_text(player, {"fp.impossible_to_blueprint_fluid"}) - return - end - - local items = {} - local blueprint_entities = player.get_blueprint_entities() - if blueprint_entities ~= nil then - for _, entity in pairs(blueprint_entities) do - if entity.tags ~= nil and entity.tags["fp_item_combinator"] then - for _, filter in pairs(entity.control_behavior.filters) do - items[filter.signal.name] = filter.count - end - end - end - end - - items[proto.name] = (items[proto.name] or 0) + amount - util.cursor.set_item_combinator(player, items) -- don't care about success here -end - -return _cursor diff --git a/factoryplanner_1.1.72/util/format.lua b/factoryplanner_1.1.72/util/format.lua deleted file mode 100644 index fdd70b8f..00000000 --- a/factoryplanner_1.1.72/util/format.lua +++ /dev/null @@ -1,88 +0,0 @@ -local _format = {} - --- Formats given number to given number of significant digits ----@param number number ----@param precision integer ----@return string formatted_number -function _format.number(number, precision) - -- To avoid scientific notation, chop off the decimals points for big numbers - if (number / (10 ^ precision)) >= 1 then - return ("%d"):format(number) - else - -- Set very small numbers to 0 - if number < (0.1 ^ precision) then - number = 0 - - -- Decrease significant digits for every zero after the decimal point - -- This keeps the number of digits after the decimal point constant - elseif number < 1 then - local n = number - while n < 1 do - precision = precision - 1 - n = n * 10 - end - end - - -- Show the number in the shortest possible way - return ("%." .. precision .. "g"):format(number) - end -end - --- Returns string representing the given power ----@param value number ----@param unit string ----@param precision integer ----@return LocalisedString formatted_number -function _format.SI_value(value, unit, precision) - local prefixes = {"", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "yotta"} - local units = { - ["W"] = {"fp.unit_watt"}, - ["J"] = {"fp.unit_joule"}, - ["P/m"] = {"", {"fp.unit_pollution"}, "/", {"fp.unit_minute"}} - } - - local sign = (value >= 0) and "" or "-" - value = math.abs(value) or 0 - - local scale_counter = 0 - -- Determine unit of the energy consumption, while keeping the result above 1 (ie no 0.1kW, but 100W) - while scale_counter < #prefixes and value > (1000 ^ (scale_counter + 1)) do - scale_counter = scale_counter + 1 - end - - -- Round up if energy consumption is close to the next tier - if (value / (1000 ^ scale_counter)) > 999 then - scale_counter = scale_counter + 1 - end - - value = value / (1000 ^ scale_counter) - local prefix = (scale_counter == 0) and "" or {"fp.prefix_" .. prefixes[scale_counter + 1]} - return {"", sign .. util.format.number(value, precision) .. " ", prefix, units[unit]} -end - - ----@param count number ----@param active boolean ----@param round_number boolean ----@return string formatted_count ----@return LocalisedString tooltip_line -function _format.machine_count(count, active, round_number) - -- The formatting is used to 'round down' when the decimal is very small - local formatted_count = util.format.number(count, 3) - local tooltip_count = formatted_count - - -- If the formatting returns 0, it is a very small number, so show it as 0.001 - if formatted_count == "0" and active then - tooltip_count = "≀0.001" - formatted_count = "0.01" -- shows up as 0.0 on the button - end - - if round_number then formatted_count = tostring(math.ceil(formatted_count --[[@as number]])) end - - local plural_parameter = (tooltip_count == "1") and 1 or 2 - local tooltip_line = {"", tooltip_count, " ", {"fp.pl_machine", plural_parameter}} - - return formatted_count, tooltip_line -end - -return _format diff --git a/factoryplanner_1.1.72/util/globals.lua b/factoryplanner_1.1.72/util/globals.lua deleted file mode 100644 index 72e81794..00000000 --- a/factoryplanner_1.1.72/util/globals.lua +++ /dev/null @@ -1,39 +0,0 @@ -local _globals = {} - ----@param player LuaPlayer ----@return PlayerTable -function _globals.player_table(player) return global.players[player.index] end - ----@param player LuaPlayer ----@return SettingsTable -function _globals.settings(player) return global.players[player.index].settings end - ----@param player LuaPlayer ----@return PreferencesTable -function _globals.preferences(player) return global.players[player.index].preferences end - ----@param player LuaPlayer ----@return UIStateTable -function _globals.ui_state(player) return global.players[player.index].ui_state end - ----@param player LuaPlayer ----@return Context -function _globals.context(player) return global.players[player.index].ui_state.context end - ----@param player LuaPlayer ----@return UIStateFlags -function _globals.flags(player) return global.players[player.index].ui_state.flags end - ----@param player LuaPlayer ----@return ModalData -function _globals.modal_data(player) return global.players[player.index].ui_state.modal_data end - ----@param player LuaPlayer ----@return LuaGuiElement[] -function _globals.main_elements(player) return global.players[player.index].ui_state.main_elements end - ----@param player LuaPlayer ----@return LuaGuiElement[] -function _globals.modal_elements(player) return global.players[player.index].ui_state.modal_data.modal_elements end - -return _globals diff --git a/factoryplanner_1.1.72/util/gui.lua b/factoryplanner_1.1.72/util/gui.lua deleted file mode 100644 index a3b24e43..00000000 --- a/factoryplanner_1.1.72/util/gui.lua +++ /dev/null @@ -1,169 +0,0 @@ -local mod_gui = require("mod-gui") - -local _gui = { switch = {}, mod = {} } - --- Adds an on/off-switch including a label with tooltip to the given flow --- Automatically converts boolean state to the appropriate switch_state ----@param parent_flow LuaGuiElement ----@param action string ----@param additional_tags Tags ----@param state SwitchState ----@param caption LocalisedString? ----@param tooltip LocalisedString? ----@param label_first boolean? ----@return LuaGuiElement created_switch -function _gui.switch.add_on_off(parent_flow, action, additional_tags, state, caption, tooltip, label_first) - if type(state) == "boolean" then state = util.gui.switch.convert_to_state(state) end - - local flow = parent_flow.add{type="flow", direction="horizontal"} - flow.style.vertical_align = "center" - local switch, label ---@type LuaGuiElement, LuaGuiElement - - local function add_switch() - additional_tags.mod = "fp"; additional_tags.on_gui_switch_state_changed = action - switch = flow.add{type="switch", tags=additional_tags, switch_state=state, - left_label_caption={"fp.on"}, right_label_caption={"fp.off"}} - end - - local function add_label() - caption = (tooltip ~= nil) and {"", caption, " [img=info]"} or caption - label = flow.add{type="label", caption=caption, tooltip=tooltip} - label.style.font = "default-semibold" - end - - if label_first then add_label(); add_switch(); label.style.right_margin = 8 - else add_switch(); add_label(); label.style.left_margin = 8 end - - return switch -end - ----@param state SwitchState ----@return boolean converted_state -function _gui.switch.convert_to_boolean(state) - return (state == "left") and true or false -end - ----@param boolean boolean ----@return SwitchState converted_state -function _gui.switch.convert_to_state(boolean) - return boolean and "left" or "right" -end - - --- Destroys the toggle-main-dialog-button if present ----@param player LuaPlayer -local function destroy_mod_gui(player) - local button_flow = mod_gui.get_button_flow(player) - local mod_gui_button = button_flow["fp_button_toggle_interface"] - - if mod_gui_button then - -- parent.parent is to check that I'm not deleting a top level element. Now, I have no idea how that - -- could ever be a top level element, but oh well, can't know everything now can we? - if #button_flow.children_names == 1 and button_flow.parent.parent then - -- Remove whole frame if FP is the last button in there - button_flow.parent.destroy() - else - mod_gui_button.destroy() - end - end -end - --- Toggles the visibility of the toggle-main-dialog-button ----@param player LuaPlayer -function _gui.toggle_mod_gui(player) - local enable = util.globals.settings(player).show_gui_button - - local frame_flow = mod_gui.get_button_flow(player) - local mod_gui_button = frame_flow["fp_button_toggle_interface"] - - if enable and not mod_gui_button then - local tooltip = {"", {"shortcut-name.fp_open_interface"}, " (", {"fp.toggle_interface"}, ")"} - local button = frame_flow.add{type="sprite-button", name="fp_button_toggle_interface", - sprite="fp_mod_gui", tooltip=tooltip, tags={mod="fp", on_gui_click="mod_gui_toggle_interface"}, - style=mod_gui.button_style, mouse_button_filter={"left"}} - button.style.padding = 6 - elseif mod_gui_button then -- use the destroy function for possible cleanup reasons - destroy_mod_gui(player) - end -end - - --- Properly centers the given frame (need width/height parameters cause no API-read exists) ----@param player LuaPlayer ----@param frame LuaGuiElement ----@param dimensions DisplayResolution -function _gui.properly_center_frame(player, frame, dimensions) - local resolution, scale = player.display_resolution, player.display_scale - local x_offset = ((resolution.width - (dimensions.width * scale)) / 2) - local y_offset = ((resolution.height - (dimensions.height * scale)) / 2) - frame.location = {x_offset, y_offset} -end - ----@param textfield LuaGuiElement -function _gui.setup_textfield(textfield) - textfield.lose_focus_on_confirm = true - textfield.clear_and_focus_on_right_click = true -end - ----@param textfield LuaGuiElement ----@param decimal boolean ----@param negative boolean -function _gui.setup_numeric_textfield(textfield, decimal, negative) - textfield.lose_focus_on_confirm = true - textfield.clear_and_focus_on_right_click = true - textfield.numeric = true - textfield.allow_decimal = (decimal or false) - textfield.allow_negative = (negative or false) -end - ----@param textfield LuaGuiElement -function _gui.select_all(textfield) - textfield.focus() - textfield.select_all() -end - --- Destroys all GUIs so they are loaded anew the next time they are shown ----@param player LuaPlayer -function _gui.reset_player(player) - destroy_mod_gui(player) -- mod_gui button - - for _, gui_element in pairs(player.gui.screen.children) do -- all mod frames - if gui_element.valid and gui_element.get_mod() == "factoryplanner" then - gui_element.destroy() - end - end -end - --- Formats the given effects for use in a tooltip ----@param effects ModuleEffects ----@param limit_effects boolean ----@return LocalisedString -function _gui.format_module_effects(effects, limit_effects) - local tooltip_lines, effect_applies = {"", "\n"}, false - local lower_bound, upper_bound = MAGIC_NUMBERS.effects_lower_bound, MAGIC_NUMBERS.effects_upper_bound - - for effect_name, effect_value in pairs(effects) do - if effect_value ~= 0 then - effect_applies = true - local capped_indication = "" ---@type LocalisedString - - if limit_effects then - if effect_name == "productivity" and effect_value < 0 then - effect_value, capped_indication = 0, {"fp.effect_maxed"} - elseif effect_value < lower_bound then - effect_value, capped_indication = lower_bound, {"fp.effect_maxed"} - elseif effect_value > upper_bound then - effect_value, capped_indication = upper_bound, {"fp.effect_maxed"} - end - end - - -- Force display of either a '+' or '-', also round the result - local display_value = ("%+d"):format(math.floor((effect_value * 100) + 0.5)) - table.insert(tooltip_lines, {"fp.effect_line", {"fp." .. effect_name}, display_value, capped_indication}) - end - end - - return (effect_applies) and tooltip_lines or "" -end - -return _gui diff --git a/factoryplanner_1.1.72/util/messages.lua b/factoryplanner_1.1.72/util/messages.lua deleted file mode 100644 index 7aa62c39..00000000 --- a/factoryplanner_1.1.72/util/messages.lua +++ /dev/null @@ -1,42 +0,0 @@ -local _messages = {} - ----@alias MessageCategory "error" | "warning" | "hint" - ----@class PlayerMessage ----@field category MessageCategory ----@field text LocalisedString ----@field lifetime integer - ----@param player LuaPlayer ----@param category MessageCategory ----@param message LocalisedString ----@param lifetime integer -function _messages.raise(player, category, message, lifetime) - local messages = util.globals.ui_state(player).messages - table.insert(messages, {category=category, text=message, lifetime=lifetime}) -end - ----@param player LuaPlayer -function _messages.refresh(player) - -- Only refresh messages if the user is actually looking at them - if not main_dialog.is_in_focus(player) then return end - - local ui_state = util.globals.ui_state(player) - local message_frame = ui_state.main_elements["messages_frame"] - if not message_frame or not message_frame.valid then return end - - local messages = ui_state.messages - message_frame.visible = (next(messages) ~= nil) - message_frame.clear() - - for i=#messages, 1, -1 do - local message = messages[i] ---@type PlayerMessage - local caption = {"", "[img=warning-white] ", {"fp." .. message.category .. "_message", message.text}} - message_frame.add{type="label", caption=caption, style="bold_label"} - - message.lifetime = message.lifetime - 1 - if message.lifetime == 0 then table.remove(messages, i) end - end -end - -return _messages diff --git a/factoryplanner_1.1.72/util/nth_tick.lua b/factoryplanner_1.1.72/util/nth_tick.lua deleted file mode 100644 index ac145227..00000000 --- a/factoryplanner_1.1.72/util/nth_tick.lua +++ /dev/null @@ -1,46 +0,0 @@ -local _nth_tick = {} - ----@alias NthTickEvent { handler_name: string, metadata: table } - ----@param tick Tick -local function register_nth_tick_handler(tick) - script.on_nth_tick(tick, function(nth_tick_data) - local event_data = global.nth_tick_events[nth_tick_data.nth_tick] - local handler = GLOBAL_HANDLERS[event_data.handler_name] ---@type function - handler(event_data.metadata) - util.nth_tick.cancel(tick) - end) -end - - ----@param desired_tick Tick ----@param handler_name string ----@param metadata table ----@return Tick -function _nth_tick.register(desired_tick, handler_name, metadata) - local actual_tick = desired_tick - -- Search until the next free nth_tick is found - while (global.nth_tick_events[actual_tick] ~= nil) do - actual_tick = actual_tick + 1 - end - - global.nth_tick_events[actual_tick] = {handler_name=handler_name, metadata=metadata} - register_nth_tick_handler(actual_tick) - - return actual_tick -- let caller know which tick they actually got -end - ----@param tick Tick -function _nth_tick.cancel(tick) - script.on_nth_tick(tick, nil) - global.nth_tick_events[tick] = nil -end - -function _nth_tick.register_all() - if not global.nth_tick_events then return end - for tick, _ in pairs(global.nth_tick_events) do - register_nth_tick_handler(tick) - end -end - -return _nth_tick diff --git a/factoryplanner_1.1.72/util/porter.lua b/factoryplanner_1.1.72/util/porter.lua deleted file mode 100644 index 091d3038..00000000 --- a/factoryplanner_1.1.72/util/porter.lua +++ /dev/null @@ -1,150 +0,0 @@ -local migrator = require("backend.handlers.migrator") - -local _porter = {} - ----@class ExportTable ----@field mod_version VersionString ----@field export_modset ModToVersion ----@field subfactories FPPackedSubfactory[] - ----@alias ExportString string - --- Converts the given subfactories into a factory exchange string ----@param subfactories FPSubfactory[] ----@return ExportString -function _porter.generate_export_string(subfactories) - local export_table = { - -- This can use the global mod_version since it's only called for migrated, valid subfactories - mod_version = global.mod_version, - export_modset = global.installed_mods, - subfactories = {} - } - - for _, subfactory in pairs(subfactories) do - table.insert(export_table.subfactories, Subfactory.pack(subfactory)) - end - - local export_string = game.encode_string(game.table_to_json(export_table)) ---@cast export_string -nil - return export_string -end - --- Converts the given factory exchange string into a temporary Factory ----@param export_string ExportString ----@return FPFactory? ----@return string? -function _porter.process_export_string(export_string) - local export_table = nil ---@type AnyBasic? - - if not pcall(function() - export_table = game.json_to_table(game.decode_string(export_string) --[[@as string]]) - assert(type(export_table) == "table") - end) then return nil, "decoding_failure" end - ---@cast export_table ExportTable - - if not pcall(function() - migrator.migrate_export_table(export_table) - end) then return nil, "migration_failure" end - - local import_factory = Factory.init() - if not pcall(function() -- Unpacking and validating could be pcall-ed separately, but that's too many slow pcalls - for _, packed_subfactory in pairs(export_table.subfactories) do - local unpacked_subfactory = Subfactory.unpack(packed_subfactory) - - -- The imported subfactories will be temporarily contained in a factory, so they - -- can be validated and moved to the appropriate 'real' factory easily - Factory.add(import_factory, unpacked_subfactory) - - -- Validate the subfactory to both add the valid-attributes to all the objects - -- and potentially un-simplify the prototypes that came in packed - Subfactory.validate(unpacked_subfactory) - end - - -- Include the modset at export time to be displayed to the user if a subfactory is invalid - import_factory.export_modset = export_table.export_modset - - end) then return nil, "unpacking_failure" end - - -- This is not strictly a decoding failure, but close enough - if Factory.count(import_factory, "Subfactory") == 0 then return nil, "decoding_failure" end - - return import_factory, nil -end - ----@alias UpdatedMods { [string]: { old: VersionString, current: VersionString } } - --- Creates a nice tooltip laying out which mods were added, removed and updated since the subfactory became invalid ----@param old_modset ModToVersion ----@return LocalisedString -function _porter.format_modset_diff(old_modset) - if not old_modset then return "" end - - ---@type { added: ModToVersion, removed: ModToVersion, updated: UpdatedMods } - local changes = {added={}, removed={}, updated={}} - local new_modset = script.active_mods - - -- Determine changes by running through both sets of mods once each - for name, current_version in pairs(new_modset) do - local old_version = old_modset[name] - if not old_version then - changes.added[name] = current_version - elseif old_version ~= current_version then - changes.updated[name] = {old=old_version, current=current_version} - end - end - - for name, old_version in pairs(old_modset) do - if not new_modset[name] then - changes.removed[name] = old_version - end - end - - -- Compose tooltip from all three types of changes - local tooltip = {"", {"fp.subfactory_modset_changes"}} ---@type LocalisedString - local current_table, next_index = tooltip, 3 - - if next(changes.added) then - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_added"}}, current_table, next_index) - for name, version in pairs(changes.added) do - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_and_version", name, version}}, current_table, next_index) - end - end - - if next(changes.removed) then - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_removed"}}, current_table, next_index) - for name, version in pairs(changes.removed) do - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_and_version", name, version}}, current_table, next_index) - end - end - - if next(changes.updated) then - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_updated"}}, current_table, next_index) - for name, versions in pairs(changes.updated) do - current_table, next_index = util.build_localised_string({ - {"fp.subfactory_mod_and_versions", name, versions.old, versions.current}}, current_table, next_index) - end - end - - -- Return an empty string if no changes were found, ie. the tooltip is still only the header - return (table_size(tooltip) == 2) and "" or tooltip -end - --- Adds given export_string-subfactories to the current factory ----@param player LuaPlayer ----@param export_string ExportString -function _porter.add_by_string(player, export_string) - local context = util.globals.context(player) - local first_subfactory = Factory.import_by_string(context.factory, export_string) - util.context.set_subfactory(player, first_subfactory) - - for _, subfactory in pairs(Factory.get_in_order(context.factory, "Subfactory")) do - if not subfactory.valid then Subfactory.repair(subfactory, player) end - solver.update(player, subfactory) - end -end - -return _porter diff --git a/factoryplanner_1.1.72/util/raise.lua b/factoryplanner_1.1.72/util/raise.lua deleted file mode 100644 index c9e14ab4..00000000 --- a/factoryplanner_1.1.72/util/raise.lua +++ /dev/null @@ -1,31 +0,0 @@ -local _raise = {} - ----@param player LuaPlayer ----@param trigger "main_dialog" | "compact_subfactory" | "view_state" ----@param parent LuaGuiElement? -function _raise.build(player, trigger, parent) - script.raise_event(CUSTOM_EVENTS.build_gui_element, {player_index=player.index, trigger=trigger, parent=parent}) -end - ----@param player LuaPlayer ----@param trigger "all" | "subfactory" | "production" | "production_detail" | "title_bar" | "subfactory_list" | "subfactory_info" | "item_boxes" | "production_box" | "production_table" | "compact_subfactory" | "view_state" ----@param element LuaGuiElement? -function _raise.refresh(player, trigger, element) - script.raise_event(CUSTOM_EVENTS.refresh_gui_element, {player_index=player.index, trigger=trigger, element=element}) -end - ----@param player LuaPlayer ----@param metadata table -function _raise.open_dialog(player, metadata) - script.raise_event(CUSTOM_EVENTS.open_modal_dialog, {player_index=player.index, metadata=metadata}) -end - ----@param player LuaPlayer ----@param action "submit" | "cancel" | "delete" ----@param skip_opened boolean? -function _raise.close_dialog(player, action, skip_opened) - script.raise_event(CUSTOM_EVENTS.close_modal_dialog, - {player_index=player.index, action=action, skip_opened=skip_opened}) -end - -return _raise diff --git a/factoryplanner_1.1.72/util/util.lua b/factoryplanner_1.1.72/util/util.lua deleted file mode 100644 index 0b34908e..00000000 --- a/factoryplanner_1.1.72/util/util.lua +++ /dev/null @@ -1,73 +0,0 @@ -local _util = { - globals = require("util.globals"), - context = require("util.context"), - clipboard = require("util.clipboard"), - messages = require("util.messages"), - raise = require("util.raise"), - cursor = require("util.cursor"), - gui = require("util.gui"), - format = require("util.format"), - nth_tick = require("util.nth_tick"), - porter = require("util.porter"), - actions = require("util.actions") -} - - --- Still can't believe this is not a thing in Lua --- This has the added feature of turning any number strings into actual numbers ----@param str string ----@param separator string ----@return string[] -function _util.split_string(str, separator) - local result = {} - for token in string.gmatch(str, "[^" .. separator .. "]+") do - table.insert(result, (tonumber(token) or token)) - end - return result -end - - --- Fills up the localised table in a smart way to avoid the limit of 20 strings per level --- To make it stateless, it needs its return values passed back as arguments --- Uses state to avoid needing to call table_size() because that function is slow ----@param strings_to_insert LocalisedString[] ----@param current_table LocalisedString ----@param next_index integer ----@return LocalisedString, integer -function _util.build_localised_string(strings_to_insert, current_table, next_index) - current_table = current_table or {""} - next_index = next_index or 2 - - for _, string_to_insert in ipairs(strings_to_insert) do - if next_index == 20 then -- go a level deeper if this one is almost full - local new_table = {""} - current_table[next_index] = new_table - current_table = new_table - next_index = 2 - end - current_table[next_index] = string_to_insert - next_index = next_index + 1 - end - - return current_table, next_index -end - --- This function is only called when Recipe Book is active, so no need to check for the mod ----@param player LuaPlayer ----@param type string ----@param name string -function _util.open_in_recipebook(player, type, name) - local message = nil ---@type LocalisedString - - if remote.call("RecipeBook", "version") ~= RECIPEBOOK_API_VERSION then - message = {"fp.error_recipebook_version_incompatible"} - else - ---@type boolean - local was_opened = remote.call("RecipeBook", "open_page", player.index, type, name) - if not was_opened then message = {"fp.error_recipebook_lookup_failed", {"fp.pl_" .. type, 1}} end - end - - if message then util.messages.raise(player, "error", message, 1) end -end - -return _util diff --git a/RecipeBook_3.5.6/LICENSE b/flib/LICENSE similarity index 100% rename from RecipeBook_3.5.6/LICENSE rename to flib/LICENSE diff --git a/flib_0.13.0/README.md b/flib/README.md similarity index 100% rename from flib_0.13.0/README.md rename to flib/README.md diff --git a/flib_0.13.0/area.lua b/flib/area.lua similarity index 100% rename from flib_0.13.0/area.lua rename to flib/area.lua diff --git a/flib_0.13.0/bounding-box.lua b/flib/bounding-box.lua similarity index 100% rename from flib_0.13.0/bounding-box.lua rename to flib/bounding-box.lua diff --git a/flib_0.13.0/changelog.txt b/flib/changelog.txt similarity index 100% rename from flib_0.13.0/changelog.txt rename to flib/changelog.txt diff --git a/flib_0.13.0/data-util.lua b/flib/data-util.lua similarity index 100% rename from flib_0.13.0/data-util.lua rename to flib/data-util.lua diff --git a/flib_0.13.0/data.lua b/flib/data.lua similarity index 100% rename from flib_0.13.0/data.lua rename to flib/data.lua diff --git a/flib_0.13.0/dictionary-lite.lua b/flib/dictionary-lite.lua similarity index 100% rename from flib_0.13.0/dictionary-lite.lua rename to flib/dictionary-lite.lua diff --git a/flib_0.13.0/dictionary.lua b/flib/dictionary.lua similarity index 100% rename from flib_0.13.0/dictionary.lua rename to flib/dictionary.lua diff --git a/flib_0.13.0/direction.lua b/flib/direction.lua similarity index 100% rename from flib_0.13.0/direction.lua rename to flib/direction.lua diff --git a/flib_0.13.0/doc-html/index.html b/flib/doc-html/index.html similarity index 100% rename from flib_0.13.0/doc-html/index.html rename to flib/doc-html/index.html diff --git a/flib_0.13.0/doc-html/style.css b/flib/doc-html/style.css similarity index 100% rename from flib_0.13.0/doc-html/style.css rename to flib/doc-html/style.css diff --git a/flib_0.13.0/docs/assets/indicator-examples.png b/flib/docs/assets/indicator-examples.png similarity index 100% rename from flib_0.13.0/docs/assets/indicator-examples.png rename to flib/docs/assets/indicator-examples.png diff --git a/flib_0.13.0/docs/assets/slot-style-examples.png b/flib/docs/assets/slot-style-examples.png similarity index 100% rename from flib_0.13.0/docs/assets/slot-style-examples.png rename to flib/docs/assets/slot-style-examples.png diff --git a/flib_0.13.0/docs/gui-styles.md b/flib/docs/gui-styles.md similarity index 100% rename from flib_0.13.0/docs/gui-styles.md rename to flib/docs/gui-styles.md diff --git a/flib_0.13.0/docs/index.html b/flib/docs/index.html similarity index 100% rename from flib_0.13.0/docs/index.html rename to flib/docs/index.html diff --git a/flib_0.13.0/docs/sprites.md b/flib/docs/sprites.md similarity index 100% rename from flib_0.13.0/docs/sprites.md rename to flib/docs/sprites.md diff --git a/flib_0.13.0/docs/style.css b/flib/docs/style.css similarity index 100% rename from flib_0.13.0/docs/style.css rename to flib/docs/style.css diff --git a/flib_0.13.0/event.lua b/flib/event.lua similarity index 100% rename from flib_0.13.0/event.lua rename to flib/event.lua diff --git a/flib_0.13.0/format.lua b/flib/format.lua similarity index 100% rename from flib_0.13.0/format.lua rename to flib/format.lua diff --git a/flib_0.13.0/gen-docs.sh b/flib/gen-docs.sh similarity index 100% rename from flib_0.13.0/gen-docs.sh rename to flib/gen-docs.sh diff --git a/flib_0.13.0/graphics/black.png b/flib/graphics/black.png similarity index 100% rename from flib_0.13.0/graphics/black.png rename to flib/graphics/black.png diff --git a/flib_0.13.0/graphics/dark-red-button.png b/flib/graphics/dark-red-button.png similarity index 100% rename from flib_0.13.0/graphics/dark-red-button.png rename to flib/graphics/dark-red-button.png diff --git a/flib_0.13.0/graphics/empty.png b/flib/graphics/empty.png similarity index 100% rename from flib_0.13.0/graphics/empty.png rename to flib/graphics/empty.png diff --git a/flib/graphics/frame-action-icons.png b/flib/graphics/frame-action-icons.png new file mode 100644 index 00000000..43e92ff9 Binary files /dev/null and b/flib/graphics/frame-action-icons.png differ diff --git a/flib_0.13.0/graphics/indicators.png b/flib/graphics/indicators.png similarity index 100% rename from flib_0.13.0/graphics/indicators.png rename to flib/graphics/indicators.png diff --git a/flib_0.13.0/graphics/nav-backward-black.png b/flib/graphics/nav-backward-black.png similarity index 100% rename from flib_0.13.0/graphics/nav-backward-black.png rename to flib/graphics/nav-backward-black.png diff --git a/flib_0.13.0/graphics/nav-backward-disabled.png b/flib/graphics/nav-backward-disabled.png similarity index 100% rename from flib_0.13.0/graphics/nav-backward-disabled.png rename to flib/graphics/nav-backward-disabled.png diff --git a/flib_0.13.0/graphics/nav-backward-white.png b/flib/graphics/nav-backward-white.png similarity index 100% rename from flib_0.13.0/graphics/nav-backward-white.png rename to flib/graphics/nav-backward-white.png diff --git a/flib_0.13.0/graphics/nav-forward-black.png b/flib/graphics/nav-forward-black.png similarity index 100% rename from flib_0.13.0/graphics/nav-forward-black.png rename to flib/graphics/nav-forward-black.png diff --git a/flib_0.13.0/graphics/nav-forward-disabled.png b/flib/graphics/nav-forward-disabled.png similarity index 100% rename from flib_0.13.0/graphics/nav-forward-disabled.png rename to flib/graphics/nav-forward-disabled.png diff --git a/flib_0.13.0/graphics/nav-forward-white.png b/flib/graphics/nav-forward-white.png similarity index 100% rename from flib_0.13.0/graphics/nav-forward-white.png rename to flib/graphics/nav-forward-white.png diff --git a/flib_0.13.0/graphics/planner.png b/flib/graphics/planner.png similarity index 100% rename from flib_0.13.0/graphics/planner.png rename to flib/graphics/planner.png diff --git a/flib_0.13.0/graphics/slots.png b/flib/graphics/slots.png similarity index 100% rename from flib_0.13.0/graphics/slots.png rename to flib/graphics/slots.png diff --git a/flib_0.13.0/graphics/slots.xcf b/flib/graphics/slots.xcf similarity index 100% rename from flib_0.13.0/graphics/slots.xcf rename to flib/graphics/slots.xcf diff --git a/flib_0.13.0/graphics/subheader-line.png b/flib/graphics/subheader-line.png similarity index 100% rename from flib_0.13.0/graphics/subheader-line.png rename to flib/graphics/subheader-line.png diff --git a/flib_0.13.0/gui-beta.lua b/flib/gui-beta.lua similarity index 100% rename from flib_0.13.0/gui-beta.lua rename to flib/gui-beta.lua diff --git a/flib_0.13.0/gui-lite.lua b/flib/gui-lite.lua similarity index 100% rename from flib_0.13.0/gui-lite.lua rename to flib/gui-lite.lua diff --git a/flib_0.13.0/gui.lua b/flib/gui.lua similarity index 100% rename from flib_0.13.0/gui.lua rename to flib/gui.lua diff --git a/flib_0.13.0/info.json b/flib/info.json similarity index 100% rename from flib_0.13.0/info.json rename to flib/info.json diff --git a/flib_0.13.0/locale/en/dictionary.cfg b/flib/locale/en/dictionary.cfg similarity index 100% rename from flib_0.13.0/locale/en/dictionary.cfg rename to flib/locale/en/dictionary.cfg diff --git a/flib_0.13.0/locale/en/flib.cfg b/flib/locale/en/flib.cfg similarity index 100% rename from flib_0.13.0/locale/en/flib.cfg rename to flib/locale/en/flib.cfg diff --git a/flib_0.13.0/locale/ru/dictionary.cfg b/flib/locale/ru/dictionary.cfg similarity index 100% rename from flib_0.13.0/locale/ru/dictionary.cfg rename to flib/locale/ru/dictionary.cfg diff --git a/flib_0.13.0/locale/ru/flib.cfg b/flib/locale/ru/flib.cfg similarity index 100% rename from flib_0.13.0/locale/ru/flib.cfg rename to flib/locale/ru/flib.cfg diff --git a/flib_0.13.0/math.lua b/flib/math.lua similarity index 100% rename from flib_0.13.0/math.lua rename to flib/math.lua diff --git a/flib_0.13.0/migration.lua b/flib/migration.lua similarity index 100% rename from flib_0.13.0/migration.lua rename to flib/migration.lua diff --git a/flib_0.13.0/misc.lua b/flib/misc.lua similarity index 100% rename from flib_0.13.0/misc.lua rename to flib/misc.lua diff --git a/flib_0.13.0/on-tick-n.lua b/flib/on-tick-n.lua similarity index 100% rename from flib_0.13.0/on-tick-n.lua rename to flib/on-tick-n.lua diff --git a/flib_0.13.0/orientation.lua b/flib/orientation.lua similarity index 100% rename from flib_0.13.0/orientation.lua rename to flib/orientation.lua diff --git a/flib_0.13.0/position.lua b/flib/position.lua similarity index 100% rename from flib_0.13.0/position.lua rename to flib/position.lua diff --git a/flib_0.13.0/prototypes/sprite.lua b/flib/prototypes/sprite.lua similarity index 100% rename from flib_0.13.0/prototypes/sprite.lua rename to flib/prototypes/sprite.lua diff --git a/flib_0.13.0/prototypes/style.lua b/flib/prototypes/style.lua similarity index 100% rename from flib_0.13.0/prototypes/style.lua rename to flib/prototypes/style.lua diff --git a/flib_0.13.0/queue.lua b/flib/queue.lua similarity index 100% rename from flib_0.13.0/queue.lua rename to flib/queue.lua diff --git a/flib_0.13.0/reverse-defines.lua b/flib/reverse-defines.lua similarity index 100% rename from flib_0.13.0/reverse-defines.lua rename to flib/reverse-defines.lua diff --git a/flib_0.13.0/table.lua b/flib/table.lua similarity index 100% rename from flib_0.13.0/table.lua rename to flib/table.lua diff --git a/flib_0.13.0/tests/README.md b/flib/tests/README.md similarity index 100% rename from flib_0.13.0/tests/README.md rename to flib/tests/README.md diff --git a/flib_0.13.0/tests/dictionary-lite.lua b/flib/tests/dictionary-lite.lua similarity index 100% rename from flib_0.13.0/tests/dictionary-lite.lua rename to flib/tests/dictionary-lite.lua diff --git a/flib_0.13.0/tests/factorio_luaunit.lua b/flib/tests/factorio_luaunit.lua similarity index 100% rename from flib_0.13.0/tests/factorio_luaunit.lua rename to flib/tests/factorio_luaunit.lua diff --git a/flib_0.13.0/tests/gui-lite.lua b/flib/tests/gui-lite.lua similarity index 100% rename from flib_0.13.0/tests/gui-lite.lua rename to flib/tests/gui-lite.lua diff --git a/flib_0.13.0/tests/position.lua b/flib/tests/position.lua similarity index 100% rename from flib_0.13.0/tests/position.lua rename to flib/tests/position.lua diff --git a/flib_0.13.0/tests/slots.lua b/flib/tests/slots.lua similarity index 100% rename from flib_0.13.0/tests/slots.lua rename to flib/tests/slots.lua diff --git a/flib_0.13.0/tests/test_math.lua b/flib/tests/test_math.lua similarity index 100% rename from flib_0.13.0/tests/test_math.lua rename to flib/tests/test_math.lua diff --git a/flib_0.13.0/thumbnail.png b/flib/thumbnail.png similarity index 100% rename from flib_0.13.0/thumbnail.png rename to flib/thumbnail.png diff --git a/flib_0.13.0/train.lua b/flib/train.lua similarity index 100% rename from flib_0.13.0/train.lua rename to flib/train.lua diff --git a/flib_0.13.0/translation.lua b/flib/translation.lua similarity index 100% rename from flib_0.13.0/translation.lua rename to flib/translation.lua diff --git a/flib_0.13.0/LICENSE b/flib_0.13.0/LICENSE deleted file mode 100644 index ba4cee18..00000000 --- a/flib_0.13.0/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 raiguard - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/flib_0.13.0/locale/af/dictionary.cfg b/flib_0.13.0/locale/af/dictionary.cfg deleted file mode 100644 index c641816c..00000000 --- a/flib_0.13.0/locale/af/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=af -locale-name=Afrikaans - diff --git a/flib_0.13.0/locale/af/flib.cfg b/flib_0.13.0/locale/af/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/af/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/ar/dictionary.cfg b/flib_0.13.0/locale/ar/dictionary.cfg deleted file mode 100644 index 52ae3719..00000000 --- a/flib_0.13.0/locale/ar/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=ar -locale-name=Ψ§Ω„ΨΉΩŽΨ±ΩŽΨ¨ΩΩŠΩŽΩ‘Ψ© - diff --git a/flib_0.13.0/locale/ar/flib.cfg b/flib_0.13.0/locale/ar/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/ar/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/be/dictionary.cfg b/flib_0.13.0/locale/be/dictionary.cfg deleted file mode 100644 index 1a34fccb..00000000 --- a/flib_0.13.0/locale/be/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=be -locale-name=БСларуская diff --git a/flib_0.13.0/locale/bg/dictionary.cfg b/flib_0.13.0/locale/bg/dictionary.cfg deleted file mode 100644 index 14edc52b..00000000 --- a/flib_0.13.0/locale/bg/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=bg -locale-name=Π±ΡŠΠ»Π³Π°Ρ€ΡΠΊΠΈ Π΅Π·ΠΈΠΊ diff --git a/flib_0.13.0/locale/ca/dictionary.cfg b/flib_0.13.0/locale/ca/dictionary.cfg deleted file mode 100644 index e6c1cd74..00000000 --- a/flib_0.13.0/locale/ca/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=ca -locale-name=CatalΓ  - diff --git a/flib_0.13.0/locale/ca/flib.cfg b/flib_0.13.0/locale/ca/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/ca/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/cs/dictionary.cfg b/flib_0.13.0/locale/cs/dictionary.cfg deleted file mode 100644 index 928a86b3..00000000 --- a/flib_0.13.0/locale/cs/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=cs -locale-name=ČeΕ‘tina - diff --git a/flib_0.13.0/locale/cs/flib.cfg b/flib_0.13.0/locale/cs/flib.cfg deleted file mode 100644 index 93013e8f..00000000 --- a/flib_0.13.0/locale/cs/flib.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[gui] -flib-keep-open=Ponechat otevΕ™enΓ© -flib-settings=NastavenΓ­ -flib-finishing=Dokončuji... -flib-translating-dictionaries=PΕ™eklad slovnΓ­kΕ― [img=info] -flib-translating-dictionaries-description=Mody, kterΓ© pouΕΎΓ­vajΓ­ Factorio Library's slovnΓ­kovΓ½ systΓ©m vyΕΎadoval pΕ™eklady v prΕ―bΔ›hu času, aby bylo moΕΎnΓ© vyhledΓ‘vat text ve vaΕ‘em rodnΓ©m jazyce. Toto GUI zobrazuje prΕ―bΔ›h pΕ™ekladΕ― kaΕΎdΓ©ho modu pro kaΕΎdΓ½ poΕΎadovanΓ½ jazyk. Toto GUI se automaticky odstranΓ­ po dokončenΓ­ vΕ‘ech pΕ™ekladΕ―. - -[mod-name] -flib=Knihovna Factoria - diff --git a/flib_0.13.0/locale/da/dictionary.cfg b/flib_0.13.0/locale/da/dictionary.cfg deleted file mode 100644 index 744948ba..00000000 --- a/flib_0.13.0/locale/da/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=da -locale-name=Dansk - diff --git a/flib_0.13.0/locale/da/flib.cfg b/flib_0.13.0/locale/da/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/da/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/de/dictionary.cfg b/flib_0.13.0/locale/de/dictionary.cfg deleted file mode 100644 index e54173d9..00000000 --- a/flib_0.13.0/locale/de/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=de -locale-name=Deutsch - diff --git a/flib_0.13.0/locale/de/flib.cfg b/flib_0.13.0/locale/de/flib.cfg deleted file mode 100644 index 0bc81fd2..00000000 --- a/flib_0.13.0/locale/de/flib.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[gui] -flib-keep-open=Offen bleiben -flib-search-instruction=Suiche (__CONTROL__focus-search__) -flib-settings=Einstellungen -flib-finishing=Abschließen... -flib-translating-dictionaries=Übersetze WΓΆrterbΓΌcher [img=info] -flib-translating-dictionaries-description=Mods, die das WΓΆrterbuchsystem der Factorio Library verwenden, fordern Übersetzungen im Laufe der Zeit an, um Suchen in deiner Muttersprache zu ermΓΆglichen. Dieses Fenster zeigt den Fortschritt der Übersetzungen jeder Mod fΓΌr jede gewΓΌnschte Sprache an. Dieses Fenster schließt sich automatisch sobald alle Übersetzungen abgeschlossen sind. - -[mod-name] -flib=Factorio Library - diff --git a/flib_0.13.0/locale/el/dictionary.cfg b/flib_0.13.0/locale/el/dictionary.cfg deleted file mode 100644 index 334f2d38..00000000 --- a/flib_0.13.0/locale/el/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=el -locale-name=Ελληνικά - diff --git a/flib_0.13.0/locale/el/flib.cfg b/flib_0.13.0/locale/el/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/el/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/eo/dictionary.cfg b/flib_0.13.0/locale/eo/dictionary.cfg deleted file mode 100644 index d765a78e..00000000 --- a/flib_0.13.0/locale/eo/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=eo -locale-name=Esperanto diff --git a/flib_0.13.0/locale/es-ES/dictionary.cfg b/flib_0.13.0/locale/es-ES/dictionary.cfg deleted file mode 100644 index 185e9ac9..00000000 --- a/flib_0.13.0/locale/es-ES/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=es-ES -locale-name=EspaΓ±ol - diff --git a/flib_0.13.0/locale/es-ES/flib.cfg b/flib_0.13.0/locale/es-ES/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/es-ES/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/et/dictionary.cfg b/flib_0.13.0/locale/et/dictionary.cfg deleted file mode 100644 index b1872fba..00000000 --- a/flib_0.13.0/locale/et/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=et -locale-name=Eesti diff --git a/flib_0.13.0/locale/fi/dictionary.cfg b/flib_0.13.0/locale/fi/dictionary.cfg deleted file mode 100644 index bc79788e..00000000 --- a/flib_0.13.0/locale/fi/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=fi -locale-name=Suomi - diff --git a/flib_0.13.0/locale/fi/flib.cfg b/flib_0.13.0/locale/fi/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/fi/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/fr/dictionary.cfg b/flib_0.13.0/locale/fr/dictionary.cfg deleted file mode 100644 index 545ba341..00000000 --- a/flib_0.13.0/locale/fr/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=fr -locale-name=FranΓ§ais - diff --git a/flib_0.13.0/locale/fr/flib.cfg b/flib_0.13.0/locale/fr/flib.cfg deleted file mode 100644 index f2449d89..00000000 --- a/flib_0.13.0/locale/fr/flib.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[gui] -flib-keep-open=Garder ouvert -flib-settings=ParamΓ¨tres -flib-finishing=Finalisation... -flib-translating-dictionaries=Traduction des dictionnaires [img=info] -flib-translating-dictionaries-description=Les mods qui utilisent le systΓ¨me de dictionnaire de "Factorio Library" demandent des traductions au fil du temps afin de permettre la recherche de texte dans votre langue maternelle. Cette interface montre la progression des traductions de chaque mod pour chaque langue requise. Cette interface se supprimera automatiquement une fois toutes les traductions terminΓ©es. - -[mod-name] -flib=Factorio Library - diff --git a/flib_0.13.0/locale/fy-NL/dictionary.cfg b/flib_0.13.0/locale/fy-NL/dictionary.cfg deleted file mode 100644 index 88937e69..00000000 --- a/flib_0.13.0/locale/fy-NL/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=fy-NL -locale-name=Frisian diff --git a/flib_0.13.0/locale/ga-IE/dictionary.cfg b/flib_0.13.0/locale/ga-IE/dictionary.cfg deleted file mode 100644 index 16fccce6..00000000 --- a/flib_0.13.0/locale/ga-IE/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=ga-IE -locale-name=Gaeilge diff --git a/flib_0.13.0/locale/he/dictionary.cfg b/flib_0.13.0/locale/he/dictionary.cfg deleted file mode 100644 index cc058a6e..00000000 --- a/flib_0.13.0/locale/he/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=he -locale-name=Χ’Χ‘Χ¨Χ™Χͺ - diff --git a/flib_0.13.0/locale/he/flib.cfg b/flib_0.13.0/locale/he/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/he/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/hr/dictionary.cfg b/flib_0.13.0/locale/hr/dictionary.cfg deleted file mode 100644 index a3749c23..00000000 --- a/flib_0.13.0/locale/hr/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=hr -locale-name=Hrvatski diff --git a/flib_0.13.0/locale/hu/dictionary.cfg b/flib_0.13.0/locale/hu/dictionary.cfg deleted file mode 100644 index f1a73577..00000000 --- a/flib_0.13.0/locale/hu/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=hu -locale-name=Magyar - diff --git a/flib_0.13.0/locale/hu/flib.cfg b/flib_0.13.0/locale/hu/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/hu/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/id/dictionary.cfg b/flib_0.13.0/locale/id/dictionary.cfg deleted file mode 100644 index 924ee0ab..00000000 --- a/flib_0.13.0/locale/id/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=id -locale-name=Bahasa Indonesia diff --git a/flib_0.13.0/locale/it/dictionary.cfg b/flib_0.13.0/locale/it/dictionary.cfg deleted file mode 100644 index 8bc30b7b..00000000 --- a/flib_0.13.0/locale/it/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=it -locale-name=Italiano - diff --git a/flib_0.13.0/locale/it/flib.cfg b/flib_0.13.0/locale/it/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/it/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/ja/dictionary.cfg b/flib_0.13.0/locale/ja/dictionary.cfg deleted file mode 100644 index 7ddfdcb1..00000000 --- a/flib_0.13.0/locale/ja/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=ja -locale-name=ζ—₯本θͺž - diff --git a/flib_0.13.0/locale/ja/flib.cfg b/flib_0.13.0/locale/ja/flib.cfg deleted file mode 100644 index 4cb3fabc..00000000 --- a/flib_0.13.0/locale/ja/flib.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[gui] -flib-keep-open=ι–‹γ„γŸγΎγΎγ«γ™γ‚‹ -flib-search-instruction=怜紒 (__CONTROL__focus-search__) -flib-settings=θ¨­εš -flib-finishing=硂了しています... -flib-translating-dictionaries=θΎžζ›ΈγηΏ»θ¨³δΈ­ [img=info] -flib-translating-dictionaries-description=Factorio LibraryγθΎžζ›Έγ‚·γ‚Ήγƒ†γƒ γ‚’使用するMODは、あγͺたγζ―θͺžγ§γγƒ†γ‚­γ‚Ήγƒˆζ€œη΄’γ‚’ε―θƒ½γ«γ™γ‚‹γŸγ‚γ«ζ™‚ι–“γ‚’γ‹γ‘γ¦ηΏ»θ¨³γ‚’θ¦ζ±‚γ—γΎγ™γ€‚γ“γGUIは各MODγθ¦ζ±‚γ•γ‚ŒγŸε„θ¨€θͺžγηΏ»θ¨³γι€²ζ—を葨瀺しています。こγGUIはすべてγηΏ»θ¨³γŒη΅‚了するとθ‡ͺε‹•ηš„γ«ζΆˆζ»…γ—γΎγ™γ€‚ - -[mod-name] -flib=Factorio Library - diff --git a/flib_0.13.0/locale/ko/dictionary.cfg b/flib_0.13.0/locale/ko/dictionary.cfg deleted file mode 100644 index 440baed4..00000000 --- a/flib_0.13.0/locale/ko/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=ko -locale-name=ν•œκ΅­μ–΄ - diff --git a/flib_0.13.0/locale/ko/flib.cfg b/flib_0.13.0/locale/ko/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/ko/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/lt/dictionary.cfg b/flib_0.13.0/locale/lt/dictionary.cfg deleted file mode 100644 index 9347b481..00000000 --- a/flib_0.13.0/locale/lt/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=lt -locale-name=LietuviΕ³ diff --git a/flib_0.13.0/locale/lv/dictionary.cfg b/flib_0.13.0/locale/lv/dictionary.cfg deleted file mode 100644 index 808f6a67..00000000 --- a/flib_0.13.0/locale/lv/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=lv -locale-name=LatvieΕ‘u diff --git a/flib_0.13.0/locale/nl/dictionary.cfg b/flib_0.13.0/locale/nl/dictionary.cfg deleted file mode 100644 index f39ee4f8..00000000 --- a/flib_0.13.0/locale/nl/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=nl -locale-name=Nederlands - diff --git a/flib_0.13.0/locale/nl/flib.cfg b/flib_0.13.0/locale/nl/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/nl/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/no/dictionary.cfg b/flib_0.13.0/locale/no/dictionary.cfg deleted file mode 100644 index f4c0aaef..00000000 --- a/flib_0.13.0/locale/no/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=no -locale-name=Norsk - diff --git a/flib_0.13.0/locale/no/flib.cfg b/flib_0.13.0/locale/no/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/no/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/pl/dictionary.cfg b/flib_0.13.0/locale/pl/dictionary.cfg deleted file mode 100644 index eded0635..00000000 --- a/flib_0.13.0/locale/pl/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=pl -locale-name=Polski - diff --git a/flib_0.13.0/locale/pl/flib.cfg b/flib_0.13.0/locale/pl/flib.cfg deleted file mode 100644 index 86829ab1..00000000 --- a/flib_0.13.0/locale/pl/flib.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[gui] -flib-keep-open=Pozostaw otwarte -flib-search-instruction=Szukaj (__CONTROL__focus-search__) -flib-settings=Ustawienia -flib-finishing=KoΕ„czenie... -flib-translating-dictionaries=TΕ‚umaczenie sΕ‚ownikΓ³w [img=info] -flib-translating-dictionaries-description=Modyfikacje, ktΓ³re korzystajΔ… z systemu sΕ‚ownikΓ³w Biblioteki Factorio, wymagajΔ… czasu na wykonanie tΕ‚umaczeΕ„, ΕΌeby umoΕΌliwiaΔ‡ wyszukiwanie tekstu w twoim ojczystym jΔ™zyku. To menu pokazuje postΔ™py w tΕ‚umaczeniu kaΕΌdego moda na kaΕΌdy z potrzebnych jΔ™zykΓ³w. To menu zniknie automatycznie po zakoΕ„czeniu wszystkich tΕ‚umaczeΕ„. - -[mod-name] -flib=Biblioteka Factorio - diff --git a/flib_0.13.0/locale/pt-BR/dictionary.cfg b/flib_0.13.0/locale/pt-BR/dictionary.cfg deleted file mode 100644 index e66134f7..00000000 --- a/flib_0.13.0/locale/pt-BR/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=pt-BR -locale-name=PortuguΓͺs, Brasil diff --git a/flib_0.13.0/locale/pt-BZ/dictionary.cfg b/flib_0.13.0/locale/pt-BZ/dictionary.cfg deleted file mode 100644 index 8b137891..00000000 --- a/flib_0.13.0/locale/pt-BZ/dictionary.cfg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/flib_0.13.0/locale/pt-BZ/flib.cfg b/flib_0.13.0/locale/pt-BZ/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/pt-BZ/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/pt-PT/dictionary.cfg b/flib_0.13.0/locale/pt-PT/dictionary.cfg deleted file mode 100644 index 6ec8f8a1..00000000 --- a/flib_0.13.0/locale/pt-PT/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=pt-PT -locale-name=PortuguΓͺs - diff --git a/flib_0.13.0/locale/pt-PT/flib.cfg b/flib_0.13.0/locale/pt-PT/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/pt-PT/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/ro/dictionary.cfg b/flib_0.13.0/locale/ro/dictionary.cfg deleted file mode 100644 index d1c16845..00000000 --- a/flib_0.13.0/locale/ro/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=ro -locale-name=RomΓ’nΔƒ - diff --git a/flib_0.13.0/locale/ro/flib.cfg b/flib_0.13.0/locale/ro/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/ro/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/sk/dictionary.cfg b/flib_0.13.0/locale/sk/dictionary.cfg deleted file mode 100644 index cc8a9850..00000000 --- a/flib_0.13.0/locale/sk/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=sk -locale-name=Slovenčina diff --git a/flib_0.13.0/locale/sl/dictionary.cfg b/flib_0.13.0/locale/sl/dictionary.cfg deleted file mode 100644 index f75aa6cc..00000000 --- a/flib_0.13.0/locale/sl/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=sl -locale-name=Slovenőčina diff --git a/flib_0.13.0/locale/sq/dictionary.cfg b/flib_0.13.0/locale/sq/dictionary.cfg deleted file mode 100644 index ce232fd5..00000000 --- a/flib_0.13.0/locale/sq/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=sq -locale-name=Shqip diff --git a/flib_0.13.0/locale/sr/dictionary.cfg b/flib_0.13.0/locale/sr/dictionary.cfg deleted file mode 100644 index f6ac4f23..00000000 --- a/flib_0.13.0/locale/sr/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=sr -locale-name=Брпски - diff --git a/flib_0.13.0/locale/sr/flib.cfg b/flib_0.13.0/locale/sr/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/sr/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/sv-SE/dictionary.cfg b/flib_0.13.0/locale/sv-SE/dictionary.cfg deleted file mode 100644 index 9b971b51..00000000 --- a/flib_0.13.0/locale/sv-SE/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=sv-SE -locale-name=Svenska - diff --git a/flib_0.13.0/locale/sv-SE/flib.cfg b/flib_0.13.0/locale/sv-SE/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/sv-SE/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/th/dictionary.cfg b/flib_0.13.0/locale/th/dictionary.cfg deleted file mode 100644 index 3c7a5585..00000000 --- a/flib_0.13.0/locale/th/dictionary.cfg +++ /dev/null @@ -1,2 +0,0 @@ -locale-identifier=th -locale-name=ΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ„ΰΈ—ΰΈ’ diff --git a/flib_0.13.0/locale/tr/dictionary.cfg b/flib_0.13.0/locale/tr/dictionary.cfg deleted file mode 100644 index 1375eac0..00000000 --- a/flib_0.13.0/locale/tr/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=tr -locale-name=TΓΌrkΓ§e - diff --git a/flib_0.13.0/locale/tr/flib.cfg b/flib_0.13.0/locale/tr/flib.cfg deleted file mode 100644 index ee0f3540..00000000 --- a/flib_0.13.0/locale/tr/flib.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[gui] -flib-keep-open=AΓ§Δ±k bΔ±rakΔ±n -flib-settings=Ayarlar -flib-finishing=SonlandΔ±rΔ±lΔ±yor... -flib-translating-dictionaries=SΓΆzlΓΌkler Γ§eviriliyor [img=info] -flib-translating-dictionaries-description=Factiorio Library modunun sΓΆzlΓΌk sistemini kullanan modlar yazΔ±lΔ± arama yapabilmek iΓ§in zamanla Γ§eviri isteği yollar. Bu Grafik ArayΓΌzΓΌ yΓΌklΓΌ olan her dil iΓ§in Γ§evirilen modlarΔ±n ilerlemesini gΓΆrterir. Γ‡evirim tamamlanΔ±nca bu arayΓΌz kendi kendini kapatacaktΔ±r. - -[mod-name] - diff --git a/flib_0.13.0/locale/uk/dictionary.cfg b/flib_0.13.0/locale/uk/dictionary.cfg deleted file mode 100644 index 36fd0acc..00000000 --- a/flib_0.13.0/locale/uk/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=uk -locale-name=Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° - diff --git a/flib_0.13.0/locale/uk/flib.cfg b/flib_0.13.0/locale/uk/flib.cfg deleted file mode 100644 index 106a1c29..00000000 --- a/flib_0.13.0/locale/uk/flib.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[gui] -flib-keep-open=Π—Π°Π»ΠΈΡˆΠΈΡ‚ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈΠΌΠΈ -flib-search-instruction=ΠŸΠΎΡˆΡƒΠΊ (__CONTROL__focus-search__) -flib-settings=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ -flib-finishing=Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ... -flib-translating-dictionaries=ΠŸΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄ словників [img=info] -flib-translating-dictionaries-description=Моди, які Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‚ΡŒ словникову систСму Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΠΈ Factorio, Π· часом Π·Π°ΠΏΠΈΡ‚ΡƒΡŽΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄ΠΈ, Ρ‰ΠΎΠ± Π·Π°Π±Π΅Π·ΠΏΠ΅Ρ‡ΠΈΡ‚ΠΈ ΠΏΠΎΡˆΡƒΠΊ тСксту Ρ€Ρ–Π΄Π½ΠΎΡŽ мовою. Π¦Π΅ΠΉ Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΈΠΉ інтСрфСйс ΠΏΠΎΠΊΠ°Π·ΡƒΡ” Ρ…Ρ–Π΄ ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρƒ ΠΊΠΎΠΆΠ½ΠΎΡ— ΠΌΠΎΠ΄ΠΈΡ„Ρ–ΠΊΠ°Ρ†Ρ–Ρ— для ΠΊΠΎΠΆΠ½ΠΎΡ— Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎΡ— ΠΌΠΎΠ²ΠΈ. Π¦Π΅ΠΉ Π³Ρ€Π°Ρ„Ρ–Ρ‡Π½ΠΈΠΉ інтСрфСйс Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π·Π½ΠΈΠΊΠ°Ρ” після Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ всіх ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ–Π². - -[mod-name] -flib=Π‘Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΠ° Factorio - diff --git a/flib_0.13.0/locale/vi/dictionary.cfg b/flib_0.13.0/locale/vi/dictionary.cfg deleted file mode 100644 index 9536727e..00000000 --- a/flib_0.13.0/locale/vi/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=vi -locale-name=TiαΊΏng Việt Nam - diff --git a/flib_0.13.0/locale/vi/flib.cfg b/flib_0.13.0/locale/vi/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/vi/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/flib_0.13.0/locale/zh-CN/dictionary.cfg b/flib_0.13.0/locale/zh-CN/dictionary.cfg deleted file mode 100644 index fdd5c9ff..00000000 --- a/flib_0.13.0/locale/zh-CN/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=zh-CN -locale-name=η€δ½“δΈ­ζ–‡ - diff --git a/flib_0.13.0/locale/zh-CN/flib.cfg b/flib_0.13.0/locale/zh-CN/flib.cfg deleted file mode 100644 index 8302e626..00000000 --- a/flib_0.13.0/locale/zh-CN/flib.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[gui] -flib-keep-open=δΏζŒεΌ€ε― -flib-search-instruction=搜紒 (__CONTROL__focus-search__)Β  -flib-settings=θΎη½ -flib-finishing=正在εŒζˆβ€¦β€¦ -flib-translating-dictionaries=ζ­£εœ¨ηΏ»θ―‘ε­—ε…Έ[img=info] -flib-translating-dictionaries-description=为允θΈδ»₯ζ‚¨ηš„ζ―θ―­θΏ›θ‘Œζ–‡ζœ¬ζœη΄’οΌŒδΎθ΅–εΌ‚ζ˜Ÿε·₯εŽ‚εΊ“ε­—ε…Έη³»η»Ÿηš„ζ¨‘η»„δΌšε‘ε‡ΊηΏ»θ―‘θ―·ζ±‚γ€‚θ―₯ηͺ—ε£δΌšζ˜Ύη€Ίζ―δΈͺζ¨‘η»„ε―Ήζ―η§ζ‰€ιœ€θ―­θ¨€ηš„ηΏ»θ―‘θΏ›εΊ¦γ€‚ζ‰€ζœ‰ηΏ»θ―‘εŒζˆεŽοΌŒηͺ—ε£δΌšθ‡ͺεŠ¨η§»ι™€γ€‚ - -[mod-name] -flib=εΌ‚ζ˜Ÿε·₯εŽ‚εΊ“ - diff --git a/flib_0.13.0/locale/zh-TW/dictionary.cfg b/flib_0.13.0/locale/zh-TW/dictionary.cfg deleted file mode 100644 index 1fb46614..00000000 --- a/flib_0.13.0/locale/zh-TW/dictionary.cfg +++ /dev/null @@ -1,3 +0,0 @@ -locale-identifier=zh-TW -locale-name=繁體中文 - diff --git a/flib_0.13.0/locale/zh-TW/flib.cfg b/flib_0.13.0/locale/zh-TW/flib.cfg deleted file mode 100644 index b76030bf..00000000 --- a/flib_0.13.0/locale/zh-TW/flib.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[gui] - -[mod-name] - diff --git a/fluid-memory-storage_1.4.6/changelog.txt b/fluid-memory-storage/changelog.txt similarity index 100% rename from fluid-memory-storage_1.4.6/changelog.txt rename to fluid-memory-storage/changelog.txt diff --git a/fluid-memory-storage_1.4.6/control.lua b/fluid-memory-storage/control.lua similarity index 100% rename from fluid-memory-storage_1.4.6/control.lua rename to fluid-memory-storage/control.lua diff --git a/fluid-memory-storage_1.4.6/data.lua b/fluid-memory-storage/data.lua similarity index 100% rename from fluid-memory-storage_1.4.6/data.lua rename to fluid-memory-storage/data.lua diff --git a/fluid-memory-storage_1.4.6/graphics/entity/fluid-background.png b/fluid-memory-storage/graphics/entity/fluid-background.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/entity/fluid-background.png rename to fluid-memory-storage/graphics/entity/fluid-background.png diff --git a/fluid-memory-storage_1.4.6/graphics/entity/fluid-memory-unit.png b/fluid-memory-storage/graphics/entity/fluid-memory-unit.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/entity/fluid-memory-unit.png rename to fluid-memory-storage/graphics/entity/fluid-memory-unit.png diff --git a/fluid-memory-storage_1.4.6/graphics/entity/hr-fluid-background.png b/fluid-memory-storage/graphics/entity/hr-fluid-background.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/entity/hr-fluid-background.png rename to fluid-memory-storage/graphics/entity/hr-fluid-background.png diff --git a/fluid-memory-storage_1.4.6/graphics/entity/hr-fluid-memory-unit.png b/fluid-memory-storage/graphics/entity/hr-fluid-memory-unit.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/entity/hr-fluid-memory-unit.png rename to fluid-memory-storage/graphics/entity/hr-fluid-memory-unit.png diff --git a/fluid-memory-storage_1.4.6/graphics/entity/nothing.png b/fluid-memory-storage/graphics/entity/nothing.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/entity/nothing.png rename to fluid-memory-storage/graphics/entity/nothing.png diff --git a/fluid-memory-storage_1.4.6/graphics/icon/fluid-memory-unit.png b/fluid-memory-storage/graphics/icon/fluid-memory-unit.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/icon/fluid-memory-unit.png rename to fluid-memory-storage/graphics/icon/fluid-memory-unit.png diff --git a/fluid-memory-storage_1.4.6/graphics/icon/packing-tape-50.png b/fluid-memory-storage/graphics/icon/packing-tape-50.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/icon/packing-tape-50.png rename to fluid-memory-storage/graphics/icon/packing-tape-50.png diff --git a/fluid-memory-storage_1.4.6/graphics/technology/fluid-memory-storage.png b/fluid-memory-storage/graphics/technology/fluid-memory-storage.png similarity index 100% rename from fluid-memory-storage_1.4.6/graphics/technology/fluid-memory-storage.png rename to fluid-memory-storage/graphics/technology/fluid-memory-storage.png diff --git a/fluid-memory-storage_1.4.6/gui-styles.lua b/fluid-memory-storage/gui-styles.lua similarity index 100% rename from fluid-memory-storage_1.4.6/gui-styles.lua rename to fluid-memory-storage/gui-styles.lua diff --git a/fluid-memory-storage_1.4.6/gui.lua b/fluid-memory-storage/gui.lua similarity index 100% rename from fluid-memory-storage_1.4.6/gui.lua rename to fluid-memory-storage/gui.lua diff --git a/fluid-memory-storage_1.4.6/info.json b/fluid-memory-storage/info.json similarity index 100% rename from fluid-memory-storage_1.4.6/info.json rename to fluid-memory-storage/info.json diff --git a/fluid-memory-storage_1.4.6/locale/en/config.cfg b/fluid-memory-storage/locale/en/config.cfg similarity index 100% rename from fluid-memory-storage_1.4.6/locale/en/config.cfg rename to fluid-memory-storage/locale/en/config.cfg diff --git a/fluid-memory-storage_1.4.6/migrations/1.3.16.lua b/fluid-memory-storage/migrations/1.3.16.lua similarity index 100% rename from fluid-memory-storage_1.4.6/migrations/1.3.16.lua rename to fluid-memory-storage/migrations/1.3.16.lua diff --git a/fluid-memory-storage_1.4.6/migrations/1.4.0.lua b/fluid-memory-storage/migrations/1.4.0.lua similarity index 100% rename from fluid-memory-storage_1.4.6/migrations/1.4.0.lua rename to fluid-memory-storage/migrations/1.4.0.lua diff --git a/fluid-memory-storage_1.4.6/settings.lua b/fluid-memory-storage/settings.lua similarity index 100% rename from fluid-memory-storage_1.4.6/settings.lua rename to fluid-memory-storage/settings.lua diff --git a/deep-storage-unit_1.3.5/shared.lua b/fluid-memory-storage/shared.lua similarity index 94% rename from deep-storage-unit_1.3.5/shared.lua rename to fluid-memory-storage/shared.lua index a56a6568..91ec01be 100644 --- a/deep-storage-unit_1.3.5/shared.lua +++ b/fluid-memory-storage/shared.lua @@ -100,19 +100,13 @@ local function has_power(powersource, entity) end local basic_item_types = {['item'] = true, ['capsule'] = true, ['gun'] = true, ['rail-planner'] = true, ['module'] = true} -local items_with_metadata = nil local function check_for_basic_item(item) + local items_with_metadata = global.items_with_metadata if not items_with_metadata then items_with_metadata = {} for item_name, prototype in pairs(game.item_prototypes) do - if prototype.type == 'ammo' then - if prototype.magazine_size > 1 then - items_with_metadata[item_name] = true - end - else - if not basic_item_types[prototype.type] then - items_with_metadata[item_name] = true - end + if not basic_item_types[prototype.type] then + items_with_metadata[item_name] = true end end global.items_with_metadata = items_with_metadata diff --git a/fluid-memory-storage_1.4.6/thumbnail.png b/fluid-memory-storage/thumbnail.png similarity index 100% rename from fluid-memory-storage_1.4.6/thumbnail.png rename to fluid-memory-storage/thumbnail.png diff --git a/fluid_permutations_0.4.1/LICENSE.md b/fluid_permutations/LICENSE.md similarity index 100% rename from fluid_permutations_0.4.1/LICENSE.md rename to fluid_permutations/LICENSE.md diff --git a/fluid_permutations_0.4.1/changelog.txt b/fluid_permutations/changelog.txt similarity index 100% rename from fluid_permutations_0.4.1/changelog.txt rename to fluid_permutations/changelog.txt diff --git a/fluid_permutations_0.4.1/common.lua b/fluid_permutations/common.lua similarity index 100% rename from fluid_permutations_0.4.1/common.lua rename to fluid_permutations/common.lua diff --git a/fluid_permutations_0.4.1/control.lua b/fluid_permutations/control.lua similarity index 100% rename from fluid_permutations_0.4.1/control.lua rename to fluid_permutations/control.lua diff --git a/fluid_permutations_0.4.1/data-final-fixes.lua b/fluid_permutations/data-final-fixes.lua similarity index 100% rename from fluid_permutations_0.4.1/data-final-fixes.lua rename to fluid_permutations/data-final-fixes.lua diff --git a/fluid_permutations_0.4.1/data.lua b/fluid_permutations/data.lua similarity index 100% rename from fluid_permutations_0.4.1/data.lua rename to fluid_permutations/data.lua diff --git a/fluid_permutations_0.4.1/graphics/FluidPermutations.png b/fluid_permutations/graphics/FluidPermutations.png similarity index 100% rename from fluid_permutations_0.4.1/graphics/FluidPermutations.png rename to fluid_permutations/graphics/FluidPermutations.png diff --git a/fluid_permutations/info.json b/fluid_permutations/info.json new file mode 100644 index 00000000..183d3b22 --- /dev/null +++ b/fluid_permutations/info.json @@ -0,0 +1,23 @@ +{ + "name" : "fluid_permutations", + "version" : "0.4.1", + "factorio_version" : "1.1", + "title" : "Fluid Permutations", + "author" : "spiwn", + "description" : "Rotate fluid inputs and outputs of buildings", + "dependencies" : [ + "base", + "(?)SeaBlock", + "(?)omnimatter", + "(?)omnimatter_science", + "(?)MoreScience", + "(?)MoreSciencePacks", + "(?)Clowns-Science", + "(?)ScienceCostTweakerM", + "(?)MomoTweak", + "(?)angelspetrochem", + "(?)SuperExpensiveMode", + "(?)H2O", + "(?)zzzparanoidal" + ] +} diff --git a/fluid_permutations_0.4.1/locale/en/en.cfg b/fluid_permutations/locale/en/en.cfg similarity index 100% rename from fluid_permutations_0.4.1/locale/en/en.cfg rename to fluid_permutations/locale/en/en.cfg diff --git a/fluid_permutations_0.4.1/settings.lua b/fluid_permutations/settings.lua similarity index 100% rename from fluid_permutations_0.4.1/settings.lua rename to fluid_permutations/settings.lua diff --git a/fluid_permutations_0.4.1/thumbnail.png b/fluid_permutations/thumbnail.png similarity index 100% rename from fluid_permutations_0.4.1/thumbnail.png rename to fluid_permutations/thumbnail.png diff --git a/fluid_permutations_0.4.1/info.json b/fluid_permutations_0.4.1/info.json deleted file mode 100644 index ed844002..00000000 --- a/fluid_permutations_0.4.1/info.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name" : "fluid_permutations", - "version" : "0.4.1", - "factorio_version" : "1.1", - "title" : "Fluid Permutations", - "author" : "spiwn", - "description" : "Rotate fluid inputs and outputs of buildings", - "dependencies" : [ - "base", - "(?)SeaBlock", - "(?)omnimatter", - "(?)omnimatter_science", - "(?)MoreScience", - "(?)MoreSciencePacks", - "(?)Clowns-Science", - "(?)ScienceCostTweakerM", - "(?)MomoTweak", - "(?)angelspetrochem", - "(?)SuperExpensiveMode", - "(?)H2O" - ] -} diff --git a/helmod/.gitignore b/helmod/.gitignore new file mode 100644 index 00000000..639484f7 --- /dev/null +++ b/helmod/.gitignore @@ -0,0 +1,44 @@ +#vscode +.vscode/* + +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/helmod/changelog.txt b/helmod/changelog.txt new file mode 100644 index 00000000..bc6e97d0 --- /dev/null +++ b/helmod/changelog.txt @@ -0,0 +1,1097 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.12.?? +Date: 2024-01-29 + Bugfixes: + - Fix relocation form with UI scale + - Fix not found tooltip sprite +--------------------------------------------------------------------------------------------------- +Version: 0.12.22 +Date: 2024-01-26 + Bugfixes: + - Fix recipe edition tab change after few action + - Fix the default assembler controle is wrong when no module + - Fix recursive table for parameter.default_factory +--------------------------------------------------------------------------------------------------- +Version: 0.12.21 +Date: 2024-01-24 + Bugfixes: + - Fix beacons tooltip generating error: localized string 21 > 20 (limit) + - Fix smart tool in pin panel +--------------------------------------------------------------------------------------------------- +Version: 0.12.20 +Date: 2024-01-24 + Features: + - Now we can use few beacons + - Now we can add global effects on production line + Changes: + - Selecting a transport belt to enter an ingredient/product quantity now respects base time #473 + - Added Chinese translations (thank you luaotix!) #476 + - Added partial Brazilian Portugese translations (thank you luis das artimanhas!) #484 + - Simpliied propagation menu, now that propagate with module only on the same category of recipe + - Actived by default reworked solver to improve it + Bugfixes: + - Fixed beacon modules not being selectable for resource recipes with Pyanodon's #478 + - Fixed Error helmod::on_tick after kick player #490 + - Fixed Matrix solver with omni fuel #415/#425 + - Fixed logistic items overflow in the Logstic Edition panel + - Fixed Pyanodon AL upgrade techs #345 +--------------------------------------------------------------------------------------------------- +Version: 0.12.19 +Date: 2023-07-30 + Changes: + - Added rules to hide Transport Drones depots #470 + - Any recipe with no machines available to craft it will be considered locked #470 + Bugfixes: + - Fixed blocks not linking correctly when in ingredient input mode #467 + - Fixed hidden machines showing when editing a recipe #466 + - Fixed error with Nullius rocket recipes #468 + - Fixed empty mod gui frame being shown when setting "Display main icon" is disabled #472 +--------------------------------------------------------------------------------------------------- +Version: 0.12.18 +Date: 2023-07-09 + Bugfixes: + - Fixed error ModelCompute.lua:244 after changer execution order of ModelCompute.prepareBlock +--------------------------------------------------------------------------------------------------- +Version: 0.12.17 +Date: 2023-07-06 + Bugfixes: + - Fixed crash while applying migration helmod_0.12.16.lua + - Fixed crash in onConfigurationChanged for scenario edit + - Fixed assembly limitation display turn off in logistic row and tooltip + - Fixed linked matrix solved line with extra outputs doesn't automatically update #464 +--------------------------------------------------------------------------------------------------- +Version: 0.12.16 +Date: 2023-06-16 + Changes: + - Moved all matrix calculation in solver + - Added a reworked solver to a next step, not yet actived + - Added a menu to switch flat or tab in recipe edition + Bugfixes: + - Fixed formula parser pattern #450 + - Fixed productivity calculation when recipe speed exceeds 1 craft per tick cap #455 + - Fixed "convert recipe to block" for "ingredient input" mode #457 + - Fixed edit recipe ">" and ">>" buttons ignoring factory max ingredient counts #458 + - Fixed items being destroyed by creating a Helmod Smart Tool while holding an item in hand #459 + - Fixed rocket part in rocket recipe when silo changed + - Fixed turn the limit off in the pinned panel + - Fixed Space Science Production +--------------------------------------------------------------------------------------------------- +Version: 0.12.15 +Date: 2023-03-19 + Changes: + - Updated Korean locale #443 + Bugfixes: + - Fixed Limitation warning messages in Edit Recipe dialog #447 + - Fixed fluid fuel pollution modifier being ignored #451 + - Fixed productivity being incorrectly applied to some recipe products #452 + - Fixed machine selection of Numal reef from Pyanodon's mods #453 + - Fixed issues with Steam assemblers from Exotic Industries #454 +--------------------------------------------------------------------------------------------------- +Version: 0.12.14 +Date: 2022-11-30 + Changes: + - Updated Russian locale + Bugfixes: + - Machine speed calculated incorrectly when fuel temperature below 15 degrees #442 +--------------------------------------------------------------------------------------------------- +Version: 0.12.13 +Date: 2022-11-26 + Changes: + - Updated German locale + - Power and heat has a suffix of Watts rather than Joules where related to selected Base time #426 + Bugfixes: + - Fixed number of power machines when using Base time > 1s #426 + - Fixed crash after mod update removes a resource #428 + - Fixed Compute by Factory using output products quantity #429 + - Recipe selector sometimes being shown unnecessarily #430 +--------------------------------------------------------------------------------------------------- +Version: 0.12.12 +Date: 2022-08-21 + Changes: + - Updated Russian locale + - Hidden items will no longer be selectable as fuel + - Added linking of block intermediate products to copy / paste + Bugfixes: + - Boilers were using heat capacity and default temperature of output fluid instead of input fluid + - Burnt result was not being added to recipe products +--------------------------------------------------------------------------------------------------- +Version: 0.12.11 +Date: 2022-07-22 + Bugfixes: + - Fixed recipe tooltip too many parameter > 20 +--------------------------------------------------------------------------------------------------- +Version: 0.12.10 +Date: 2022-07-11 + Features: + - Added default beacon settings in preferences + - Added conversion feature to administration panel. Replaces entities in a blueprint + - Added buttons to move production lines left and right and to group production lines by owner + - Added machine bonus in tooltip information (Energy, Speed, Productivity, Pollution) + - Added stack size in tooltip information + - Combined energy selector with recipe selector. Energy production and regular recipes can now be in the same block + Changes: + - Added cache for available machines to improve performance + - Added support for wind turbines + - Added "Show hidden" option to item selector and fluid selector + - Updated icons + - List each available temperature of steam separately in the recipe selector + - List of available fuels for a recipe is now sorted. Either by temperature or by joules + - Added button to selectors to show / hide filter options + - Added buttons to selectors that toggle if category tabs are included in scroll + - Added new parent selection (where use) in Recipe Explorer + - Added button to generate block in Recipe Explorer + Bugfixes: + - Fixed steam engine's fluid consumption when input fluid is below maximum temperature + - Most energy recipes were ignoring selected Base time + - Efficiency was being applied twice to burner electric generators + - Fluid consumption efficiency was being ignored + - Fluid consumption was not capped when burning a fluid with a high fuel value + - Power production was not capped when burning a fluid with a very low fuel value + - Prevented first block from being linked + - Production line / block icon issues + - Fuel consumption for burner machines was ignoring efficiency modules + - Heat consumption for heat powered machines was ignoring efficiency modules and machine speed + - Power reduction from efficiency modules was being applied to machine's idle power draw + - Hidden entities were not being shown + - Disabled boilers and offshore pumps were being shown + - Block constraints were not working for fluids with temperature + - Fixed boilers not showing fluid ingredients other than water + - Fixed boiler fluid consumption / production when fluid product has a minimum temperature of not 15 degrees + - Over production of fluid with temperature was not being included in totals + - Fluids with temperature were not available to select as a factory resource if all recipes that produce it were hidden + - Fixed steam powered mining drills not scaling speed with steam temperature + - Fixed output quantities of unlinked products not reset when a block was linked + - Block output quantity for overproduced (red) items could not be set from Production Line screen + - Fixed block icon not updating after adding a recipe to an empty block + - Fixed list of machines being compressed in edit recipe screen + - Fixed error when trying to get a blueprint for a deleted recipe + - Fixed mining drills with no fluidbox could be selected for ores which require a mining fluid + - Fixed boiler's fluid consumption when in a recipe block (not energy) + - Fixed pollution modifier from fuel being applied twice + - Fixed module restrictions not being applied for rocket recipes + - Fixed handling of recipes producing a single fluid at multiple temperatures + - Fixed recipes not linking in some cases + - Fixed bad panel target when Recipe Selector used in Recipe Explorer +--------------------------------------------------------------------------------------------------- +Version: 0.12.9 +Date: 2022-03-09 + Bugfixes: + - Fixed error in EntityPrototype when fluid_fuel is nil +--------------------------------------------------------------------------------------------------- +Version: 0.12.8 +Date: 2022-03-08 + Info: + - Contributors: KiwiHawk, x2605 + Changes: + - Steam temperature can be selected for steam powered entities + - Added support for burner generators + - Added fuel value to list of available fuels + - Added Korean translation + Bugfixes: + - Fixed incorrect or missing info in multiple tooltips + - Fixed hidden items and items with a fuel value of 0 being listed as fuel + - Fixed energy block quantities always being in MW + - Fixed exclude constraint overlay not being drawn + - Fixed fluids with temperature not editable + - Fixed offshore pump recipes other than water being hidden + - Fixed default machine for offshore pump recipes + - Fixed offshore pump recipes other than water being shown in energy block + - Fixed energy consumption not linking between blocks + - Fixed ingredient quantities not updating in a linked Ingredient Input block + - Fixed recipe constraints not being copied +--------------------------------------------------------------------------------------------------- +Version: 0.12.7 +Date: 2021-12-29 + Bugfixes: + - Fixed error when flags attribute missing in prototype +--------------------------------------------------------------------------------------------------- +Version: 0.12.6 +Date: 2021-12-29 + Info: + - Contributors: KoharaKazuya, Astorin, veger, KiwiHawk + Features: + - Add shortcut icon to toolbar to open/close planner + Changes: + - Invalid modules are no longer listed in Edit Recipe: Module selection + - Updated Japanese translation + - Updated Russian translation + - Updated English translation + Bugfixes: + - Fixed upload/download + - Fixed invalid modules showing as available in Edit Recipe + - Fixed "Show hidden" filter in energy selector + - Fixed hidden boilers showing in Edit Recipe for steam + - Fixed error when rocket-part recipe removed +--------------------------------------------------------------------------------------------------- +Version: 0.12.5 +Date: 2021-02-13 + Features: + - Added tips when open some panel + Bugfixes: + - Fixed clean top or left panel when helmod is the first +--------------------------------------------------------------------------------------------------- +Version: 0.12.4 +Date: 2021-02-02 + Changes: + - Removed beacon column in production line view + Bugfixes: + - Fixed bug on factory column in production line view + - Fixed some panel display size problem +--------------------------------------------------------------------------------------------------- +Version: 0.12.3 +Date: 2021-01-20 + Features: + - Added new button to convert a recipe to a block + Bugfixes: + - Fixed error in recipe edition when use energy + - Fixed cell appearance for energy product + - Fixed rule for locked recipe filter + - Fixed add recipe in production line view +--------------------------------------------------------------------------------------------------- +Version: 0.12.2 +Date: 2021-01-19 + Bugfixes: + - Fixed changelog error + - Fixed missing height style for product list in output and input + - Fixed delete block in production line view + - Fixed edition views after minimize and maximize action +--------------------------------------------------------------------------------------------------- +Version: 0.12.1 +Date: 2021-01-19 + Features: + - Added new filter in recipe selector: Show locked recipes + - Added quick access to change logistic item + - Added neighbour bonus choose for nuclear reactor in recipe edition + Changes: + - Removed all tab panels + - Changed each panel using the model keeps its reference + - Changed few display styles + - Merged production line and production block tab + - Moved some icons in the production tab + - Added option settings in the pinned panel + Bugfixes: + - Fixed fluid burnt source for entity + - Fixed lab speed with speed module + - Fixed group order in mod is different from game UI +--------------------------------------------------------------------------------------------------- +Version: 0.12.0 +Date: 2020-11-25 + Changes: + - Updated for factorio 1.0 +--------------------------------------------------------------------------------------------------- +Version: 0.11.20 +Date: 2020-11-20 + Changes: + - Updated pin panel style and add edit recipe access + Bugfixes: + - Fixed error with cap message when not exist + - Fixed pin panel model when change sheet +--------------------------------------------------------------------------------------------------- +Version: 0.11.19 +Date: 2020-11-06 + Changes: + - Added Japanese translation + - Updated Russian translation + Bugfixes: + - Fixed bad message when limitation message appear in the recipe edition + - Fixed scroll reset when you use the recipe edition + - Fixed accumulator power calculation +--------------------------------------------------------------------------------------------------- +Version: 0.11.18 +Date: 2020-11-04 + Bugfixes: + - Fixed error when open recipe edition by factory/beacon block icon +--------------------------------------------------------------------------------------------------- +Version: 0.11.17 +Date: 2020-11-04 + Changes: + - Added control to put item to crafting queue when ctrl+click on factory/beacon block icon + - Added production line tooltip on tab title + Bugfixes: + - Fixed bad indent char in help panel for some languages + - Fixed bad usage_priority use by some mods for generator power +--------------------------------------------------------------------------------------------------- +Version: 0.11.16 +Date: 2020-10-31 + Bugfixes: + - fixed MP desync +--------------------------------------------------------------------------------------------------- +Version: 0.11.15 +Date: 2020-10-30 + Changes: + - Added hotkey to open/close RichText Panel: CONTROL + T + Bugfixes: + - fixed display block empty after remove last recipe + - fixed error on download panel +--------------------------------------------------------------------------------------------------- +Version: 0.11.14 +Date: 2020-10-24 + Changes: + - Updated style panel + - Updated help content, more information added + - Added some control information in tooltip + - Added steam heat ingredient for machine with heat energy + - Changed UnitTest panel is a special panel and is hidden by default + Bugfixes: + - fixed switch button fire event, button of switch work now + - fixed bonus research for lab +--------------------------------------------------------------------------------------------------- +Version: 0.11.13 +Date: 2020-10-05 + Changes: + - Changed solve choose fluid with temperature + Bugfixes: + - fixed copy/paste and exchange block + - fixed problem with water-viscous-mud recipe to select machine in recipe edition +--------------------------------------------------------------------------------------------------- +Version: 0.11.12 +Date: 2020-09-28 + Bugfixes: + - fixed overlay info for fluid recipe + - fixed water-viscous-mud recipe use offshore-pump instead of liquifier +--------------------------------------------------------------------------------------------------- +Version: 0.11.11 +Date: 2020-09-27 + Changes: + - Removed ingredient for all offshore-pump (ex: seafloor pump) + Bugfixes: + - fixed compunting ingredient fluid without temperature not consume fluid with temperature +--------------------------------------------------------------------------------------------------- +Version: 0.11.10 +Date: 2020-09-24 + Changes: + - Added some control tooltip information + Bugfixes: + - fixed error computing with contraint after switch Product input or Ingredient Input + - fixed translated name switch state (inverted) +--------------------------------------------------------------------------------------------------- +Version: 0.11.9 +Date: 2020-09-24 + Changes: + - changed tooltip information for beacon in edit recipe + Bugfixes: + - fixed energy recipes (steam missing) +--------------------------------------------------------------------------------------------------- +Version: 0.11.8 +Date: 2020-09-18 + Changes: + - Removed order production line by group (random order) +--------------------------------------------------------------------------------------------------- +Version: 0.11.7 +Date: 2020-09-18 + Features: + - Added temperature option in recipe edition + - Added production line edition (note, group ect..) + Changes: + - implemented fluid with temperature + - order production line by group + - moved preference and richtext icons + Bugfixes: + - fixed append burnt product of energy recipes + - fixed fake helmod burnt recipes are now in helmod group (for selector) + - fixed copy/paste and exchange block +--------------------------------------------------------------------------------------------------- +Version: 0.11.6 +Date: 2020-09-14 + Features: + - Added rich text tool + Changes: + - changed fake helmod recipes are now in helmod group (for selector) +--------------------------------------------------------------------------------------------------- +Version: 0.11.5 +Date: 2020-09-11 + Bugfixes: + - fixed bug model error +--------------------------------------------------------------------------------------------------- +Version: 0.11.4 +Date: 2020-09-11 + Changes: + - changed translate loop generator (for selector) + - changed list loop generator (for selector) + Bugfixes: + - fixed bug by ingredient mode + - fixed main panel close button +--------------------------------------------------------------------------------------------------- +Version: 0.11.3 +Date: 2020-09-06 + Bugfixes: + - fixed remove new runtime cache that create few empty model +--------------------------------------------------------------------------------------------------- +Version: 0.11.2 +Date: 2020-09-06 + Bugfixes: + - fixed close form on the main panel + - fixed error on tooltip with logistic + - fixed wrong fuel value on tooltip + - fixed mining-drill speed +--------------------------------------------------------------------------------------------------- +Version: 0.11.1 +Date: 2020-08-30 + Changes: + - added new option for logistic info row + - added beacon config info in the row + Bugfixes: + - fixed lower value in simplex solver cause bad value +--------------------------------------------------------------------------------------------------- +Version: 0.11.0 +Date: 2020-08-26 + Changes: + - changed version to Factorio 1.0.0 + - added preference to sort product + Bugfixes: + - fixed wrong value in the logistic info for pipe + - fixed bug in properties panel +--------------------------------------------------------------------------------------------------- +Version: 0.10.25 +Date: 30. 06. 2020 + Bugfixes: + - fixed error when buiding info tooltip have a lot of row + - fixed error in properties panel +--------------------------------------------------------------------------------------------------- +Version: 0.10.24 +Date: 13. 06. 2020 + Changes: + - added optionnal buiding info + - added Set or Unset linked intermediate product on linked block (click with ctrl or shift on output product) + Bugfixes: + - fixed error when add technology recipe +--------------------------------------------------------------------------------------------------- +Version: 0.10.23 +Date: 31. 05. 2020 + Changes: + - added fuel info in tooltip recipe tool + Bugfixes: + - fixed apply fuel propagation and default + - fixed bug with beacon default + - fixed rocket recipe allow productivity modules +--------------------------------------------------------------------------------------------------- +Version: 0.10.22 +Date: 26. 05. 2020 + Changes: + - rollback on computing recipe with same product as ingredient + Bugfixes: + - fixed bug with properties and prototype filers panels + - fixed icon sheets use the width of main panel + - fixed translation problem when Real Name setting is On +--------------------------------------------------------------------------------------------------- +Version: 0.10.21 +Date: 24. 05. 2020 + Changes: + - added base productivity machine consideration + - added rocket recipes + - added gui list tab in admin panel + - added mod list tab in admin panel + Bugfixes: + - fixed matrix solver input data + - fixed recipe count < 0, set count at 0 + - fixed front panel when reopen + - fixed energy cost on pollution +--------------------------------------------------------------------------------------------------- +Version: 0.10.20 +Date: 17. 05. 2020 + Changes: + - added Set or Unset master or exclude product (click with ctrl or shift on product) + - added add or remove max module with crtl key + Bugfixes: + - fixed critical error: 'polution' (a nil value) +--------------------------------------------------------------------------------------------------- +Version: 0.10.19 +Date: 09. 05. 2020 + Bugfixes: + - fixed critical error: 'effects' (a nil value) +--------------------------------------------------------------------------------------------------- +Version: 0.10.18 +Date: 09. 05. 2020 + Changes: + - added fluid information tooltip + Bugfixes: + - fixed fluid consumption + - fixed value near zero in the solver (epsilon) +--------------------------------------------------------------------------------------------------- +Version: 0.10.17 +Date: 02. 05. 2020 + Changes: + - added information when mod cap a value for factory + Bugfixes: + - fixed error on rounded value + - fixed fuel selection in recipe +--------------------------------------------------------------------------------------------------- +Version: 0.10.16 +Date: 01. 05. 2020 + Changes: + - added UI glue factor offset (see preferences) + Bugfixes: + - fixed fluid energy calculation + - fixed UI glue + - fixed Hotkey type +--------------------------------------------------------------------------------------------------- +Version: 0.10.15 +Date: 13. 04. 2020 + Changes: + - added Done tag in pin panel + - added UI auto close (see preferences) + - added UI glue (see preferences) + Bugfixes: + - fixed error with offshore-pump +--------------------------------------------------------------------------------------------------- +Version: 0.10.14 +Date: 11. 04. 2020 + Changes: + - added hotkey to open/close Recipe Explorer + Bugfixes: + - fixed limit values in pin panel + - fixed error in Production Block Panel +--------------------------------------------------------------------------------------------------- +Version: 0.10.13 +Date: 10. 04. 2020 + Changes: + - changed max per bloc by assembler limitation + - changed beacon ratio, ax+b where x is factory number + - added some unittest + - added recipe filter for player crafting + - updated help + Bugfixes: + - fixed void energy source + - fixed pause in MP on saved game with actived auto-pause + - fixed next_event in MP +--------------------------------------------------------------------------------------------------- +Version: 0.10.12 +Date: 26. 03. 2020 + Bugfixes: + - fixed computing by factory + - fixed power calculation +--------------------------------------------------------------------------------------------------- +Version: 0.10.11 +Date: 19. 03. 2020 + Changes: + - modified computing by factory + - modified solver button by switch + Bugfixes: + - fixed panel headers + - fixed debug tooltip +--------------------------------------------------------------------------------------------------- +Version: 0.10.10 +Date: 15. 03. 2020 + Changes: + - added burnt in energy recipe + - removed obselete debug options (replaced by factorio mod debug) + - changed display module in edit recipe + - removed hidden module in selector + - modified solver class + Bugfixes: + - fixed power calculation + - fixed void recipe when used by factory + - fixed slower module selector +--------------------------------------------------------------------------------------------------- +Version: 0.10.9 +Date: 29. 02. 2020 + Changes: + - added a debug panel when debug is activated + - removed command ResetCaches (use administration panel) + Bugfixes: + - fixed fluid consumption + - fixed arithemtic error on pollution +--------------------------------------------------------------------------------------------------- +Version: 0.10.8 +Date: 25. 02. 2020 + Bugfixes: + - fixed energy source in recipe +--------------------------------------------------------------------------------------------------- +Version: 0.10.7 +Date: 25. 02. 2020 + Bugfixes: + - fixed energy source in recipe + - fixed crash new game +--------------------------------------------------------------------------------------------------- +Version: 0.10.6 +Date: 25. 02. 2020 + Changes: + - added a new block for energy consumption + - added all energy source prototypes + - removed energy tab + - modified property tab + - changed fluid recipe, now there are hidden except water and steam + - removed ingredient for ressource recipes and water recipe + Bugfixes: + - fixed width internal panel of edit recipe +--------------------------------------------------------------------------------------------------- +Version: 0.10.5 +Date: 17. 02. 2020 + Bugfixes: + - fixed a bug in RecipePrototype + - fixed cap negative productivity + - fixed iteration end on bluiding user cache + - fixed filter on recipe selector +--------------------------------------------------------------------------------------------------- +Version: 0.10.4 +Date: 16. 02. 2020 + Changes: + - generate user cache on several tick + - added error if recursive event 6000 + - added fluid fuel for factory + - change display module of factory + - added response on ENTER in the filter input of selector + Bugfixes: + - fixed recipe not appear in recipe selector when researched + - fixed some bug in properties tab + - fixed generate user cache when auto pause is activate + - fixed crash on new game +--------------------------------------------------------------------------------------------------- +Version: 0.10.3 +Date: 10. 02. 2020 + Changes: + - generate cache on game initialisation + - changed admin panel, but not need use + - changed admin panel, now can delete cache by panel + - added few tick to generate recipe panel + Bugfixes: + - fixed switch contain or equal in recipe selector +--------------------------------------------------------------------------------------------------- +Version: 0.10.2 +Date: 28. 01. 2020 + Features: + - Added inserter in logistic information + Bugfixes: + - fixed crafting-handonly recipe, player replaced by character + - fixed tooltip product in the pinned panel + - removed cache variable can MP desync + - fixed arithemtic error on pollution +--------------------------------------------------------------------------------------------------- +Version: 0.10.1 +Date: 24. 01. 2020 + Features: + - Added option to activate or disable pollution information + Changes: + - Changed preference panel + - Moved few mod settings in the preference panel + - Modify for factorio 0.18 + - Changed pollution to display value, per minute in tooltip + Bugfixes: + - fixed copy past block for fuel and module + - fixed default factory from mod setting and the default set at 1 +--------------------------------------------------------------------------------------------------- +Version: 0.10.0 +Date: 22. 01. 2020 + Changes: + - Modify for factorio 0.18 + Bugfixes: + - fixed open selector in properties tab +--------------------------------------------------------------------------------------------------- +Version: 0.9.24 +Date: 22. 01. 2020 + Features: + - Added pollution information + - Added recipe explorer + Changes: + - Changed all selector variable to global + - Changed uri of button element + Bugfixes: + - Fixed fuel for factory default +--------------------------------------------------------------------------------------------------- +Version: 0.9.23 +Date: 18. 01. 2020 + Changes: + - Changed pipette tool to bluid a blueprint (machine+recipe+module) + - Added button to see summary from pin panel +--------------------------------------------------------------------------------------------------- +Version: 0.9.22 +Date: 16. 01. 2020 + Features: + - Added set smart pipette when click factory in pin panel + Changes: + - Added scroll for all choices in the preference + - Added user settings: Number of lines for preference +--------------------------------------------------------------------------------------------------- +Version: 0.9.21 +Date: 05. 01. 2020 + Changes: + - Added scroll for module selector + - Changed collision mask for prototype filter tab + - Updated Russian locale (by Astorin) + Bugfixes: + - Fixed help text display + - Fixed some tooltip +--------------------------------------------------------------------------------------------------- +Version: 0.9.20 +Date: 02. 01. 2020 + Features: + - Added logistic preference + - Added logistic in element tooltip + Changes: + - Removed container selector + Bugfixes: + - Fixed automatic input when block using same product/ingredient +--------------------------------------------------------------------------------------------------- +Version: 0.9.19 +Date: 01. 01. 2020 + Bugfixes: + - Fixed some tooltip + - Fixed product display +--------------------------------------------------------------------------------------------------- +Version: 0.9.18 +Date: 30. 12. 2019 + Features: + - Added module selection unit (selector or priority) + - Added remove button on preference priority + - Added summary for block (icon near icon for pin panel) + Changes: + - Changed caches use global data + - Changed some tooltip + Bugfixes: + - Fixed power of sub-block + - Fixed technology recipe +--------------------------------------------------------------------------------------------------- +Version: 0.9.17 +Date: 24. 11. 2019 + Bugfixes: + - Fixed configuration limit of priority module + - Fixed error in matrix solver +--------------------------------------------------------------------------------------------------- +Version: 0.9.16 +Date: 23. 11. 2019 + Bugfixes: + - Fixed update model version 0.9.12 + - Fixed translate for recipe selector + - Fixed event on button of input/ouput production line +--------------------------------------------------------------------------------------------------- +Version: 0.9.15 +Date: 22. 11. 2019 + Changes: + - Updated Russian locale (by Astorin) +--------------------------------------------------------------------------------------------------- +Version: 0.9.14 +Date: 22. 11. 2019 + Bugfixes: + - Fixed event on pin panel + - Fixed error with logger +--------------------------------------------------------------------------------------------------- +Version: 0.9.13 +Date: 20. 11. 2019 + Bugfixes: + - Fixed computing by factory +--------------------------------------------------------------------------------------------------- +Version: 0.9.12 +Date: 19. 11. 2019 + Features: + - Added switch to choose product/ingredient block input + - Added capability to set all product/ingredient input + Changes: + - Changed product tooltip + - Changed sprite button + - Changed classes of UI + Bugfixes: + - Fixed module limitation on factory +--------------------------------------------------------------------------------------------------- +Version: 0.9.11 +Date: 27. 10. 2019 + Changes: + - Added voider implementation in normal solver + - Changed tooltip by standard tooltip in recipe selector + Bugfixes: + - Fixed error when recipe is lost after mod update +--------------------------------------------------------------------------------------------------- +Version: 0.9.10 +Date: 20. 10. 2019 + Changes: + - Added default and propagation beacon settings + - Added auto scroll when line move up/down + - Changed module table of cell when module count > 4 (on 2 row) + - Updated Russian locale (by Astorin) +--------------------------------------------------------------------------------------------------- +Version: 0.9.9 +Date: 19. 10. 2019 + Features: + - Added default and propagation factory/module + Bugfixes: + - Fixed UI right click +--------------------------------------------------------------------------------------------------- +Version: 0.9.8 +Date: 01. 10. 2019 + Features: + - Added auto frozen game (Not for MP game) + Bugfixes: + - Fixed performance (logging.lua) +--------------------------------------------------------------------------------------------------- +Version: 0.9.7 +Date: 29. 09. 2019 + Features: + - Added selector search with equal or contain option + Bugfixes: + - Fixed model compute with catalyst_amount + - Fixed build translated string + - Fixed icon prototype display +--------------------------------------------------------------------------------------------------- +Version: 0.9.6 +Date: 21. 09. 2019 + Changes: + - Changed power input in Energy Edition + - Removed abstractEdition.lua + - Fixed selector search with translated string +--------------------------------------------------------------------------------------------------- +Version: 0.9.5 +Date: 21. 09. 2019 + Features: + - Added selector search with translated string (your language) +--------------------------------------------------------------------------------------------------- +Version: 0.9.4 +Date: 18. 09. 2019 + Bugfixes: + - Fixed refresh when container change + - Removed event on_research_finished (not need) + - Fixed recipe selector (collision name) +--------------------------------------------------------------------------------------------------- +Version: 0.9.3 +Date: 18. 09. 2019 + Features: + - Restored utility for product edition + - Added compare in Propeties Tab + - Added comparison in Properties Filter Tab + Changes: + - Changed class.lua + - Changed Event Dispatcher + - Changed Class Prototype + - Changed Class PrototypeFilter + - Changed recipe prototype (resource and fluid) + - Added new rule extraction-machine (mining-drill) + - Added button in production edition to validate + - Removed button in production edition to reset (0 or nil reset) + Bugfixes: + - Fixed fuel for factory + - Fixed pumping speed + - Fixed cache selector +--------------------------------------------------------------------------------------------------- +Version: 0.9.2 +Date: 25. 08. 2019 + Features: + - Added calculator + Changes: + - Changed some input text with formula + Bugfixes: + - Fixed download/upload panel +--------------------------------------------------------------------------------------------------- +Version: 0.9.1 +Date: 25. 08. 2019 + Features: + - Added fuel choose for burner factory + Changes: + - Changed input text responsive + - Changed product edition (formula) + Bugfixes: + - Fixed tooltip in all locale +--------------------------------------------------------------------------------------------------- +Version: 0.9.0 +Date: 23. 08. 2019 + Changes: + - Changed UI, now draggable + - Changed cache operation + Bugfixes: + - Fixed module limitation +--------------------------------------------------------------------------------------------------- +Version: 0.8.18 +Date: 19. 08. 2019 + Features: + - Added production block scroll menu + - Added icon in recipe selector tooltip + Changes: + - Changed function to get fatory list + - Removed production block tab in tab menu + - Added production % value for matrix solver + Bugfixes: + - Fixed some UI bug + - Fixed debug solver mod +--------------------------------------------------------------------------------------------------- +Version: 0.8.17 +Date: 16. 08. 2019 + Bugfixes: + - Fixed normal solver error with production +--------------------------------------------------------------------------------------------------- +Version: 0.8.16 +Date: 16. 08. 2019 + Features: + - Added fuel chemical selector for factory + - Added response UI on ingredient for input + - Added Prototype Filter Tab to try Prototype Filter + Changes: + - Changed Normal Solver + - Modfied Simplex Solver + - Modfied required minimal factorio version 0.17.60 + Bugfixes: + - Fixed event on load +--------------------------------------------------------------------------------------------------- +Version: 0.8.15 +Date: 11. 08. 2019 + Features: + - Added command /helmod ResetUserUI + Changes: + - Changed Matrix solver + Bugfixes: + - Fixed UI error for factory tab (screen height < 850) +--------------------------------------------------------------------------------------------------- +Version: 0.8.14 +Date: 07. 08. 2019 + Changes: + - Changement Energy icon + - Changement some UI arrangement + Bugfixes: + - Fixed reset caches when other mod release research +--------------------------------------------------------------------------------------------------- +Version: 0.8.13 +Date: 06. 08. 2019 + Features: + - Added scroll down on add recipe + - Added command /helmod ResetCaches + Changes: + - Fixed some UI arrangement + Bugfixes: + - Fixed MP desync +--------------------------------------------------------------------------------------------------- +Version: 0.8.12 +Date: 11. 07. 2019 + Bugfixes: + - Rollback for round value (math.ceil) + - Fixed error in pin panel +--------------------------------------------------------------------------------------------------- +Version: 0.8.11 +Date: 07. 05. 2019 + Bugfixes: + - Fixed MP desynch when open selector + - Fixed Model.countList for new game +--------------------------------------------------------------------------------------------------- +Version: 0.8.10 +Date: 07. 05. 2019 + Changes: + - MP Perform fast + - Added close button + - Fixed a precision of Format.round + Bugfixes: + - Fixed some panel event +--------------------------------------------------------------------------------------------------- +Version: 0.8.9 +Date: 13. 04. 2019 + Bugfixes: + - Fixed number cut off + - Fixed pin panel display +--------------------------------------------------------------------------------------------------- +Version: 0.8.8 +Date: 07. 04. 2019 + Bugfixes: + - Fixed recipe selector filter + - Fixed changelog +--------------------------------------------------------------------------------------------------- +Version: 0.8.7 +Date: 30. 03. 2019 + Features: + - Added changelog + Changes: + - MP Perform 50% fast + Bugfixes: + - Fixed index menu +--------------------------------------------------------------------------------------------------- +Version: 0.8.6 + Bugfixes: + - Fixed pin panel + - Fixed remember current production block + - Fixed event Computing by Factory + - Fixed height data section +--------------------------------------------------------------------------------------------------- +Version: 0.8.5 + Bugfixes: + - Fixed MP desync + - Fixed error pin panel +--------------------------------------------------------------------------------------------------- +Version: 0.8.4 + Changes: + - Changed UI + Bugfixes: + - Fixed MP desync + - Fixed production line list size +--------------------------------------------------------------------------------------------------- +Version: 0.8.3 + Bugfixes: + - Fixed speed belt + - Fixed selector filter +--------------------------------------------------------------------------------------------------- +Version: 0.8.2 + Bugfixes: + - fixed file name required +--------------------------------------------------------------------------------------------------- +Version: 0.8.1 + Changes: + - Upgrade factorio v0.17 + - removed mining power + Bugfixes: + - fixed some panel style +--------------------------------------------------------------------------------------------------- +Version: 0.7.11 + Bugfixes: + - Fixed error in product edition +--------------------------------------------------------------------------------------------------- +Version: 0.7.10 + Changes: + - Added flare stack/clarifier consumption recipes + Bugfixes: + - Fixed show assembly for recipe + - Fixed product name for resource recipe + - Fixed close panel when change location +--------------------------------------------------------------------------------------------------- +Version: 0.7.9 + Changes: + - Added support for multiple identical products in recipes + - Added support for fluid and coal consuption in mining recipes +--------------------------------------------------------------------------------------------------- +Version: 0.7.8 + Changes: + - Removed display size choose + - Added auto display sizing with scale + Bugfixes: + - Fixed LuaElectricEnergySourcePrototype::effectivity Removal +--------------------------------------------------------------------------------------------------- +Version: 0.7.7 + Features: + - Added Rules for production machine list + Bugfixes: + - Fixed Not Multiplayer Compatible + - Fixed module limitation +--------------------------------------------------------------------------------------------------- +Version: 0.7.6 + Bugfixes: + - Fixed event on checkbox +--------------------------------------------------------------------------------------------------- +Version: 0.7.5 + Changes: + - Completed french help + - Added auto update for pin panel + Bugfixes: + - Fixed count container with base time +--------------------------------------------------------------------------------------------------- +Version: 0.7.4 + Features: + - Added belt container + - Added tool for product edition + - Added partial french help + Bugfixes: + - Fixed desync (tooltip cache) +--------------------------------------------------------------------------------------------------- +Version: 0.7.3 + Features: + - Added command + - Added close hotkey + Changes: + - Changed compute model + - Removed remote control + Bugfixes: + - Fixed recipe prototype +--------------------------------------------------------------------------------------------------- +Version: 0.7.2 + Features: + - Added matrix solver block (optional) +--------------------------------------------------------------------------------------------------- +Version: 0.7.1 + Features: + - Added administration tab + Changes: + - Updated UI +--------------------------------------------------------------------------------------------------- +Version: 0.7.0 + Changes: + - Fixed for v0.16 \ No newline at end of file diff --git a/helmod/control.lua b/helmod/control.lua new file mode 100644 index 00000000..ed21b9c5 --- /dev/null +++ b/helmod/control.lua @@ -0,0 +1,28 @@ +if script.active_mods["gvv"] then require("__gvv__.gvv")() end +require "mod-gui" +require "core.tableExtends" +require "core.global" +require "core.class" +require "core.defines" +require "core.logging" +require "controller.DispatcherController" + +--=========================== +-- trace=4 +-- debug=3 +-- info=2 +-- erro=1 +-- nothing=0 + +Logging:new() +Logging.console = false + +Dispatcher = DispatcherController("HMDispatcherController") +Format = require "core.Format" +require "gui.Gui" +Player = require "model.Player" +Controller = require "controller.Controller" +Command = require "core.Command" +EventController = require "controller.EventController" +-- attach events +EventController.start() diff --git a/helmod/controller/Controller.lua b/helmod/controller/Controller.lua new file mode 100644 index 00000000..d440d442 --- /dev/null +++ b/helmod/controller/Controller.lua @@ -0,0 +1,512 @@ +require "core.Object" +require "core.Form" +require "core.FormModel" + +require "dialog.AdminPanel" +require "dialog.ArrangeModels" +require "dialog.HelpPanel" +require "dialog.ModelDebug" +require "dialog.PinPanel" +require "dialog.SummaryPanel" +require "dialog.StatisticPanel" +require "dialog.Settings" +require "dialog.Download" +require "dialog.Calculator" +require "dialog.RecipeExplorer" +require "dialog.ProductionPanel" +require "dialog.PropertiesPanel" +require "dialog.PrototypeFiltersPanel" +require "dialog.UnitTestPanel" +require "dialog.RichTextPanel" + +require "edition.LogisticEdition" +require "edition.ModelEdition" +require "edition.RecipeEdition" +require "edition.ParametersEdition" +require "edition.ProductEdition" +require "edition.RuleEdition" +require "edition.PreferenceEdition" + +require "selector.EntitySelector" +require "selector.RecipeSelector" +require "selector.TechnologySelector" +require "selector.ItemSelector" +require "selector.FluidSelector" + +require "model.Prototype" +require "model.ElectricPrototype" +require "model.EnergySourcePrototype" +require "model.EntityPrototype" +require "model.FluidboxPrototype" +require "model.FluidPrototype" +require "model.ItemPrototype" +require "model.Product" +require "model.RecipePrototype" +require "model.Technology" + +ModGui = require "mod-gui" +Cache = require "data.Cache" +User = require "data.User" +Model = require "data.Model" +ModelCompute = require "data.ModelCompute" +ModelBuilder = require "data.ModelBuilder" + +PrototypeFilters = require "model.PrototypeFilters" +Converter = require "core.Converter" +Blueprint = require "core.Blueprint" + +PLANNER_COMMAND = "helmod_planner-command" + +local Controller = newclass(Object,function(base,classname) + Object.init(base,classname) +end) + +Controller.classname = "HMController" + +local views = nil +local locate = "center" +local pinLocate = "left" +local nextEvent = nil + +------------------------------------------------------------------------------- +---Prepare Views +--- +function Controller:prepare() + + local forms = {} + table.insert(forms, AdminPanel("HMAdminPanel")) + table.insert(forms, ArrangeModels("HMArrangeModels")) + table.insert(forms, HelpPanel("HMHelpPanel")) + table.insert(forms, ModelDebug("HMModelDebug")) + table.insert(forms, Download("HMDownload")) + table.insert(forms, Calculator("HMCalculator")) + table.insert(forms, RecipeExplorer("HMRecipeExplorer")) + table.insert(forms, ProductionPanel("HMProductionPanel")) + table.insert(forms, PropertiesPanel("HMPropertiesPanel")) + table.insert(forms, PrototypeFiltersPanel("HMPrototypeFiltersPanel")) + table.insert(forms, UnitTestPanel("HMUnitTestPanel")) + table.insert(forms, RichTextPanel("HMRichTextPanel")) + + table.insert(forms, EntitySelector("HMEntitySelector")) + table.insert(forms, RecipeSelector("HMRecipeSelector")) + table.insert(forms, TechnologySelector("HMTechnologySelector")) + table.insert(forms, ItemSelector("HMItemSelector")) + table.insert(forms, FluidSelector("HMFluidSelector")) + + table.insert(forms, LogisticEdition("HMLogisticEdition")) + table.insert(forms, ModelEdition("HMModelEdition")) + table.insert(forms, RecipeEdition("HMRecipeEdition")) + table.insert(forms, ParametersEdition("HMParametersEdition")) + table.insert(forms, ProductEdition("HMProductEdition")) + table.insert(forms, RuleEdition("HMRuleEdition")) + table.insert(forms, PreferenceEdition("HMPreferenceEdition")) + + table.insert(forms, PinPanel("HMPinPanel")) + table.insert(forms, SummaryPanel("HMSummaryPanel")) + table.insert(forms, StatisticPanel("HMStatisticPanel")) + + views = {} + for _,form in pairs(forms) do + form:bind() + views[form.classname] = form + end + +end + +------------------------------------------------------------------------------- +---On initialization +--- +function Controller:on_init() + local caches_data = Cache.get() + if caches_data["HMPlayer"] == nil then + Player.getResources() + end + local forms = {} + table.insert(forms, EntitySelector("HMEntitySelector")) + table.insert(forms, RecipeSelector("HMRecipeSelector")) + table.insert(forms, TechnologySelector("HMTechnologySelector")) + table.insert(forms, ItemSelector("HMItemSelector")) + table.insert(forms, FluidSelector("HMFluidSelector")) + for _,form in pairs(forms) do + form:prepare() + end +end +------------------------------------------------------------------------------- +---Bind Dispatcher +--- +function Controller:bind() + Dispatcher:bind("on_gui_action", self, self.onGuiAction) + Dispatcher:bind("on_gui_event", self, self.onGuiEvent) + Dispatcher:bind("on_gui_setting", self, self.onGuiSetting) + Dispatcher:bind("on_gui_hotkey", self, self.onGuiHotkey) + Dispatcher:bind("on_gui_shortcut", self, self.onGuiShortcut) + Dispatcher:bind("on_gui_queue", self, self.onGuiQueue) + Dispatcher:bind("on_gui_tips", self, self.onGuiTips) +end + +------------------------------------------------------------------------------- +--- Get views +--- +---@return table +--- +function Controller:getViews() + if views == nil then Controller.prepare() end + return views +end + +------------------------------------------------------------------------------- +---Get View +--- +---@param name string +--- +---@return table +--- +function Controller:getView(name) + if views == nil then Controller.prepare() end + return views[name] +end + +------------------------------------------------------------------------------- +---Cleanup +--- +---@param player table +--- +function Controller:cleanController(player) + for _,location in pairs({"center", "left", "top", "screen"}) do + local lua_gui_element = player.gui[location] + for _,children_name in pairs(lua_gui_element.children_names) do + if children_name ~= "HMPinPanel" and self:getView(children_name) then + self:getView(children_name):close() + end + if children_name ~= "HMPinPanel" and not(string.find(children_name,"mod_gui")) and lua_gui_element[children_name] ~= nil and lua_gui_element[children_name].get_mod() == "helmod" then + lua_gui_element[children_name].destroy() + end + end + end +end + +------------------------------------------------------------------------------- +---closeEditionOrSelector +--- +function Controller:closeEditionOrSelector() + local lua_gui_element = Player.getGui("screen") + for _,children_name in pairs(lua_gui_element.children_names) do + if self:getView(children_name) and (string.find(children_name,"Edition") ~= nil) then + self:getView(children_name):close() + end + end +end + +------------------------------------------------------------------------------- +---Bind all controllers +--- +---@param player table +--- +function Controller:bindController(player) + if player ~= nil then + local lua_gui_element = Player.getGui("top") + if lua_gui_element["helmod_planner-command"] ~= nil then + lua_gui_element["helmod_planner-command"].destroy() + end + + -- Destroy gui button + if lua_gui_element["helmod_planner-command"] ~= nil then + lua_gui_element["helmod_planner-command"].destroy() + end + + local flow = lua_gui_element.mod_gui_button_flow or (lua_gui_element.mod_gui_top_frame and lua_gui_element.mod_gui_top_frame.mod_gui_inner_frame) + + if flow and flow["helmod_planner-command"] then + flow["helmod_planner-command"].destroy() + -- Remove empty frame if we're the only thing there, remove the parent frame if we just removed the only child + if #flow.children_names == 0 then + local parent = flow.parent + flow.destroy() + if parent and parent.name ~= "top" and #parent.children_names == 0 then + parent.destroy() + end + end + end + + -- Create gui button + if User.getModSetting("display_main_icon") then + lua_gui_element = ModGui.get_button_flow(player) + if lua_gui_element ~= nil then + local gui_button = GuiElement.add(lua_gui_element, GuiButton("helmod_planner-command"):sprite("menu", defines.sprites.calculator.white, defines.sprites.calculator.black):style("helmod_button_menu_dark"):tooltip({"helmod_planner-command"})) + gui_button.style.width = 37 + gui_button.style.height = 37 + end + end + User.update() + end +end + +------------------------------------------------------------------------------- +---On tick +--- +---@param event table +--- +function Controller:onTick(event) + if Player.native() ~= nil and Player.native().valid then + local next_event = User.getParameter("next_event") + if next_event ~= nil then + if (next_event.event.iteration or 0) < 1000 then + next_event.event.iteration = (next_event.event.iteration or 0) + 1 + Dispatcher:send(next_event.type_event, next_event.event, next_event.classname) + else + User.setParameter("next_event", nil) + event.message = {"", {"helmod_error.excessive-event-iteration"}, " (>1000)"} + Dispatcher:send("on_gui_error", event, next_event.classname) + end + end + + local event_queue = User.getParameter("event_queue") + if event_queue ~= nil then + local current_tick = game.tick + for _,event in pairs(event_queue) do + if event.is_tips == true then + if current_tick - event.tick > User.delay_tips then + Dispatcher:send("on_gui_tips", event, Controller.classname) + event_queue[event.classname] = nil + end + else + if current_tick - event.tick > 60 then + event.is_queue = true + Dispatcher:send("on_gui_action", event, Controller.classname) + event_queue[event.element.name] = nil + end + end + end + if table.size(event_queue) == 0 then + User.setParameter("event_queue", nil) + end + end + end +end + +------------------------------------------------------------------------------- +---On gui queue +--- +---@param event table +--- +function Controller:onGuiQueue(event) + local event_queue = User.getParameter("event_queue") or {} + event.element = {name=event.element.name, text=event.element.text} + event_queue[event.element.name] = event + User.setParameter("event_queue", event_queue) +end + +------------------------------------------------------------------------------- +---On gui tips +--- +---@param event table +--- +function Controller:onGuiTips(event) + local form = self:getView(event.classname) + if form ~= nil then + form:destroyTips() + end +end + +------------------------------------------------------------------------------- +---On tick +--- +---@param NthTickEvent table {tick=#number, nth_tick=#number} +--- +function Controller:onNthTick(NthTickEvent) + if Player.native() ~= nil then + local next_event = User.getParameter("next_event") + if next_event ~= nil and next_event.event.tick < NthTickEvent.tick then + Player.load(next_event.event) + next_event.event.tick = NthTickEvent.tick + script.raise_event(next_event.type_event, next_event.event) + User.setParameter("next_event",nil) + end + end +end + +------------------------------------------------------------------------------- +---On string translated +--- +---@param event table {player_index=number, localised_ string=string, result=string, translated=boolean} +--- +function Controller:onStringTranslated(event) + User.addTranslate(event) +end + +------------------------------------------------------------------------------- +---On gui closed +--- +---@param event table +--- +function Controller:onGuiClosed(event) + self:cleanController(Player.native()) +end + +local pattern = "([^=]*)=?([^=]*)=?([^=]*)=?([^=]*)=?([^=]*)=?([^=]*)=?([^=]*)" + +------------------------------------------------------------------------------- +---On gui action +--- +---@param event table +--- +function Controller:onGuiAction(event) + if event.element ~= nil and (string.find(event.element.name,"^HM.*") or string.find(event.element.name,"^helmod.*")) then + if views == nil then self:prepare() end + + event.classname, event.action, event.item1, event.item2, event.item3, event.item4, event.item5 = string.match(event.element.name,pattern) + + if event.classname == self.classname and event.action == "CLOSE" then + Controller:cleanController(Player.native()) + elseif event.classname == "helmod_planner-command" then + Controller:openMainPanel() + else + if event.action == "CLOSE" then + Controller:send("on_gui_close", event, event.classname) + end + + self:onGuiEvent(event) + end + end +end + +------------------------------------------------------------------------------- +---On gui event +--- +---@param event table +--- +function Controller:onGuiEvent(event) + if event.action == "OPEN" and event.continue ~= true then + User.setActiveForm(event.classname) + Controller:send("on_gui_open", event, event.classname) + end + Controller:send("on_gui_event", event, event.classname) +end + +------------------------------------------------------------------------------- +---On gui hotkey +--- +---@param event table +--- +function Controller:onGuiHotkey(event) + if views == nil then self:prepare() end + + if event.input_name == "helmod-close" then + if self:isOpened() then + self:cleanController(Player.native()) + end + end + if event.input_name == "helmod-open-close" then + self:openMainPanel() + end + if event.input_name == "helmod-production-line-open" then + if not(self:isOpened()) then + self:openMainPanel() + end + end + if event.input_name == "helmod-recipe-selector-open" then + if not(self:isOpened()) then + self:openMainPanel() + end + self:send("on_gui_open", event, "HMRecipeSelector") + end + if event.input_name == "helmod-recipe-explorer-open" then + local view = Controller:getView("HMRecipeExplorer") + if not(view:isOpened()) then + self:send("on_gui_open", event, "HMRecipeExplorer") + else + view:close() + end + end + if event.input_name == "helmod-richtext-open" then + local view = Controller:getView("HMRichTextPanel") + if not(view:isOpened()) then + self:send("on_gui_open", event, "HMRichTextPanel") + else + view:close() + end + end +end + + +------------------------------------------------------------------------------- +---On gui shortcut +--- +---@param event table +--- +function Controller:onGuiShortcut(event) + if views == nil then self:prepare() end + + if event.prototype_name == "helmod-shortcut" then + self:openMainPanel() + end +end + +------------------------------------------------------------------------------- +---On gui setting +--- +---@param event table +--- +function Controller:onGuiSetting(event) + if views == nil then self:prepare() end + + self:bindController(Player.native()) + if self:isOpened() then + self:cleanController(Player.native()) + self:openMainPanel() + else + -- prevent change location + self:cleanController(Player.native()) + end +end + +------------------------------------------------------------------------------- +---Prepare main display +--- +function Controller:openMainPanel() + if self:isOpened() then + self:cleanController(Player.native()) + game.tick_paused = false + else + local current_tab = "HMProductionPanel" + local parameter_name = string.format("%s_%s", current_tab, "objects") + local parameter_objects = User.getParameter(parameter_name) + + local event = {name="OPEN"} + if parameter_objects == nil then + parameter_objects = {name=parameter_name} + else + event.item2 = parameter_objects.block + end + local model, block, recipe = Model.getParameterObjects(parameter_objects) + event.item1 = model.id + self:send("on_gui_open", event, current_tab) + end +end + +------------------------------------------------------------------------------- +---Is opened main panel +---@return boolean +--- +function Controller:isOpened() + local lua_player = Player.native() + if lua_player == nil then return false end + local panel = self:getView("HMProductionPanel") + return panel:isOpened() +end + +------------------------------------------------------------------------------- +---Send event +---@param event_type string +---@param data table +---@param classname string +--- +function Controller:send(event_type, data, classname) + if classname ~= nil then data.classname = classname end + Dispatcher:send(event_type, data, classname) +end + +local MyController = Controller(Controller.classname) +MyController:bind() + +return MyController diff --git a/helmod/controller/DispatcherController.lua b/helmod/controller/DispatcherController.lua new file mode 100644 index 00000000..f88a57be --- /dev/null +++ b/helmod/controller/DispatcherController.lua @@ -0,0 +1,76 @@ +require "core.Object" + +------------------------------------------------------------------------------- +---Class DispatcherController +--- +---@class DispatcherController +--- +DispatcherController = newclass(Object,function(base,classname) + Object.init(base,classname) + base.handlers = {} +end) + +------------------------------------------------------------------------------- +---Bind +---@param event_type string +---@param class table +---@param class_handler string +--- +function DispatcherController:bind(event_type, class, class_handler) + if self.handlers[event_type] == nil then self.handlers[event_type] = {} end + if self.handlers[event_type][class.classname] == nil then + self.handlers[event_type][class.classname] = {class=class, handlers={}} + end + table.insert(self.handlers[event_type][class.classname].handlers, class_handler) +end + +------------------------------------------------------------------------------- +---Unbind +---@param event_type string +---@param class table +---@param class_handler string +--- +function DispatcherController:unbind(event_type, class, class_handler) + if class == nil and class_handler == nil then + self.handlers[event_type] = nil + elseif class_handler == nil and self.handlers[event_type] then + self.handlers[event_type][class.classname] = nil + elseif self.handlers[event_type] and self.handlers[event_type][class.classname] then + local remove_index = nil + for index,handler in pairs(self.handlers[event_type][class.classname].handlers) do + if class_handler == handler then remove_index = index end + end + if remove_index ~= nil then + table.remove(self.handlers[event_type][class.classname].handlers,remove_index) + end + end +end + +------------------------------------------------------------------------------- +---Send +---@param event_type string +---@param data table +---@param classname string +--- +function DispatcherController:send(event_type, data, classname) + local ok , err = pcall(function() + data.type = event_type + if self.handlers[event_type] then + for name, group in pairs(self.handlers[event_type]) do + local valid = true + if classname ~= nil and classname ~= name then + valid = false + end + if valid then + for _,handler in pairs(group.handlers) do + handler(group.class, data) + end + end + end + end + end) + if not(ok) then + Player.print(err) + log(err) + end +end diff --git a/helmod/controller/EventController.lua b/helmod/controller/EventController.lua new file mode 100644 index 00000000..0745b232 --- /dev/null +++ b/helmod/controller/EventController.lua @@ -0,0 +1,295 @@ +--- +---Description of the module. +---@class EventController +local EventController = { + ---single-line comment + classname = "HMEventController" +} + +defines.events.on_prepare=script.generate_event_name() +------------------------------------------------------------------------------- +---Start +function EventController.start() + script.on_init(EventController.onInit) + script.on_load(EventController.onLoad) + script.on_configuration_changed(EventController.onConfigurationChanged) + EventController.pcallEvent(defines.events.on_tick, EventController.onTick) + EventController.pcallEvent(defines.events.on_gui_click, EventController.onGuiClickButton) + EventController.pcallEvent(defines.events.on_gui_text_changed, EventController.onGuiTextChanged) + EventController.pcallEvent(defines.events.on_prepare, EventController.onPrepare) + + EventController.pcallEvent(defines.events.on_gui_confirmed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_value_changed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_selection_state_changed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_switch_state_changed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_elem_changed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_checked_state_changed, EventController.onGuiClick) + EventController.pcallEvent(defines.events.on_gui_selected_tab_changed, EventController.onGuiClick) + + EventController.pcallEvent(defines.events.on_player_created, EventController.onPlayerCreated) + EventController.pcallEvent(defines.events.on_player_joined_game, EventController.onPlayerJoinedGame) + EventController.pcallEvent(defines.events.on_runtime_mod_setting_changed, EventController.onRuntimeModSettingChanged) + EventController.pcallEvent(defines.events.on_console_command, EventController.onConsoleCommand) + EventController.pcallEvent(defines.events.on_gui_location_changed, EventController.onGuiLocationChanged) + + EventController.pcallEvent(defines.events.on_string_translated, EventController.onStringTranslated) + + EventController.pcallEvent(defines.events.on_lua_shortcut, EventController.onShortcut) + + --EventController.pcallNthTick(10, EventController.onNthTick) + ---event hotkey + EventController.pcallEvent("helmod-close", EventController.onCustomInput) + EventController.pcallEvent("helmod-open-close", EventController.onCustomInput) + EventController.pcallEvent("helmod-recipe-selector-open", EventController.onCustomInput) + EventController.pcallEvent("helmod-production-line-open", EventController.onCustomInput) + EventController.pcallEvent("helmod-recipe-explorer-open", EventController.onCustomInput) + EventController.pcallEvent("helmod-richtext-open", EventController.onCustomInput) +end + +------------------------------------------------------------------------------- +---On input valid +---@param event LuaEvent +function EventController.onCustomInput(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Dispatcher:send("on_gui_hotkey", event, Controller.classname) + end +end + +------------------------------------------------------------------------------- +---On shortcut clicked +---@param event LuaEvent +function EventController.onShortcut(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Dispatcher:send("on_gui_shortcut", event, Controller.classname) + end +end + +------------------------------------------------------------------------------- +---EventController callback +---@param tick number +---@param callback function +function EventController.pcallNthTick(tick, callback) + local ok , err = pcall(function() + script.on_nth_tick(tick,callback) + end) + if not(ok) then + log("Helmod: defined on_nth_tick is not valid!") + log(err) + end +end + +------------------------------------------------------------------------------- +---EventController callback +---@param event_type string|defines.events +---@param callback function +function EventController.pcallEvent(event_type, callback) + local ok , err = pcall(function() + script.on_event(event_type,callback) + end) + if not(ok) then + log("Helmod: defined event "..event_type.." is not valid!") + log(err) + end +end + +------------------------------------------------------------------------------- +---On init +function EventController.onInit() + Command.start() + Controller:on_init() +end + +------------------------------------------------------------------------------- +---On load +---@param event LuaEvent +function EventController.onLoad(event) + Command.start() +end + +------------------------------------------------------------------------------- +---On Research Finished +---@param event LuaEvent +function EventController.onResearchFinished(event) + --Cache.reset() + --Player.print("Caches are reseted!") +end + +------------------------------------------------------------------------------- +---On console command +---@param event LuaEvent +function EventController.onConsoleCommand(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Command.parse(event) + end +end + +------------------------------------------------------------------------------- +---On load +---@deprecated +---@param event LuaEvent +function EventController.onGuiClosed(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Controller:onGuiClosed(event) + end +end + +------------------------------------------------------------------------------- +---On configuration changed +---@param data table +---Data sample: +---data = { +--- "old_version":"0.14.17", +--- "new_version":"0.14.20", +--- "mod_changes":{ +--- "base":{"old_version":"0.14.17","new_version":"0.14.20"}, +--- "helmod":{"old_version":"0.2.14","new_version":"0.2.16"} +--- } +---} +-- +function EventController.onConfigurationChanged(data) + if not data or not data.mod_changes then + return + end + local ok , err = pcall(function() + if data.mod_changes["helmod"] then + --initialise au chargement d'une partie existante + for _,player in pairs(game.players) do + Player.set(player) + Controller:cleanController(player) + Controller:bindController(player) + end + end + + Cache.reset() + + for _,player in pairs(game.players) do + Player.set(player) + User.resetCache() + User.resetTranslate() + end + + Controller:on_init() + end) + if not(ok) then + log(err) + end +end + +------------------------------------------------------------------------------- +---On Location Changed +---@param event LuaEvent +function EventController.onGuiLocationChanged(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Dispatcher:send("on_gui_location", event) + end +end + +------------------------------------------------------------------------------- +---On tick +---@param event LuaEvent +function EventController.onTick(event) + Controller:onTick(event) +end + +------------------------------------------------------------------------------- +---On nth tick +---@param NthTickEvent table {tick=number, nth_tick=number} +function EventController.onNthTick(NthTickEvent) + Controller:onNthTick(NthTickEvent) +end + +------------------------------------------------------------------------------- +---On string translated +---@param event table {player_index=number, localised_ string=string, result=string, translated=boolean} +function EventController.onStringTranslated(event) + Player.load(event) + Controller:onStringTranslated(event) +end + + +------------------------------------------------------------------------------- +---On click button +---@param event LuaEvent +---Filter allowed element: "button", "sprite-button", "choose-elem-button" +---Bypass: add bypass in element.name +function EventController.onGuiClickButton(event) + if event ~= nil and event.player_index ~= nil and event.element ~= nil and (table.contains({"button", "sprite-button", "choose-elem-button"}, event.element.type) or string.find(event.element.name, "bypass")) then + Player.load(event) + Dispatcher:send("on_gui_action", event, Controller.classname) + end +end + +------------------------------------------------------------------------------- +---On click event +---@param event LuaEvent +function EventController.onGuiClick(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Dispatcher:send("on_gui_action", event, Controller.classname) + end +end + +------------------------------------------------------------------------------- +---On text changed +---@param event LuaEvent +function EventController.onGuiTextChanged(event) + if event ~= nil and event.player_index ~= nil and event.element ~= nil then + Player.load(event) + if string.find(event.element.name, "onchange") then + Dispatcher:send("on_gui_action", event, Controller.classname) + end + if string.find(event.element.name, "onqueue") then + Dispatcher:send("on_gui_queue", event, Controller.classname) + end + end +end + +------------------------------------------------------------------------------- +---On runtime mod settings +---@param event LuaEvent +function EventController.onRuntimeModSettingChanged(event) + if event ~= nil and event.player_index ~= nil then + Player.load(event) + Dispatcher:send("on_gui_setting", event, Controller.classname) + end +end + +------------------------------------------------------------------------------- +---On player created +---@param event LuaEvent +function EventController.onPlayerCreated(event) + if event ~= nil and event.player_index ~= nil then + local player = Player.load(event).native() + Controller:bindController(player) + User.setParameter("next_event", nil) + end +end + +------------------------------------------------------------------------------- +---On player join game +---@param event LuaEvent +function EventController.onPlayerJoinedGame(event) + if event ~= nil and event.player_index ~= nil then + local player = Player.load(event).native() + Controller:bindController(player) + User.setParameter("next_event", nil) + end +end + +------------------------------------------------------------------------------- +---On prepare +---@param event LuaEvent +function EventController.onPrepare(event) + if event ~= nil and event.player_index ~= nil then + event.tick = game.tick + Player.load(event) + Dispatcher:send("on_gui_event", event, Controller.classname) + end +end + +return EventController diff --git a/helmod/core/Blueprint.lua b/helmod/core/Blueprint.lua new file mode 100644 index 00000000..a4d40785 --- /dev/null +++ b/helmod/core/Blueprint.lua @@ -0,0 +1,71 @@ +--- +---Description of the module. +---@class Blueprint +local Blueprint = { + ---single-line comment + classname = "HMBlueprint", +} + +function Blueprint.get_entities(data) + local entities = {} + if data.blueprint then + Blueprint.get_blueprint_entities(entities, data) + elseif data.blueprint_book then + for _, blueprint in pairs(data.blueprint_book.blueprints) do + Blueprint.get_blueprint_entities(entities, blueprint) + end + end + return entities +end + +function Blueprint.get_blueprint_entities(entities, data) + if data.blueprint then + local blueprint = data.blueprint + if blueprint.entities then + for key, entity in pairs(blueprint.entities) do + local name = entity.name + if not(entities[name]) then + entities[name] = {name=name} + end + end + end + end + + for name, entity in pairs(entities) do + local lua_entity = Player.getEntityPrototype(name) + entity.lua_prototype = lua_entity + end +end + +function Blueprint.get_tiles(data) + local tiles = {} + if data.blueprint then + Blueprint.get_blueprint_tiles(tiles, data) + elseif data.blueprint_book then + for _, blueprint in pairs(data.blueprint_book.blueprints) do + Blueprint.get_blueprint_tiles(tiles, blueprint) + end + end + return tiles +end + +function Blueprint.get_blueprint_tiles(tiles, data) + if data.blueprint then + local blueprint = data.blueprint + if blueprint.tiles then + for key, entity in pairs(blueprint.tiles) do + local name = entity.name + if not(tiles[name]) then + tiles[name] = {name=name} + end + end + end + end + + for name, tile in pairs(tiles) do + local lua_item = Player.getItemPrototype(name) + tile.lua_prototype = lua_item + end +end + +return Blueprint \ No newline at end of file diff --git a/helmod/core/Command.lua b/helmod/core/Command.lua new file mode 100644 index 00000000..08fe0de7 --- /dev/null +++ b/helmod/core/Command.lua @@ -0,0 +1,81 @@ +--- +-- Description of the module. +-- @class Command +-- +local Command = { + -- single-line comment + classname = "HMCommand" +} + +------------------------------------------------------------------------------- +-- Start +-- +function Command.start() + commands.add_command("helmod","helmod commands", Command.run) +end + + +------------------------------------------------------------------------------- +-- Run +-- +function Command.run(event) +-- do nothing +end + +------------------------------------------------------------------------------- +-- Parse +-- +-- @param event table +-- +function Command.parse(event) + if event.command == "helmod" then + if string.lower(event.parameters) == "close" then + for _,location in pairs({"top","left","center","screen","goal"}) do + for _, element in pairs(Player.getGui(location).children) do + if element.get_mod() == "helmod" then + element.destroy() + end + end + end + elseif string.lower(event.parameters) == "resetuserui" then + User.reset() + Player.print("User UI are reseted!") + elseif string.lower(event.parameters) == "resetuserexplorer" then + User.setParameter("explore_recipe", nil) + User.setParameter("explore_recipe_id", nil) + Player.print("User Explorer are reseted!") + elseif string.lower(event.parameters) == "resetuserallui" then + User.resetAll() + Player.print("All User UIs are reseted!") + elseif string.lower(event.parameters) == "resetcaches" then + Player.print("Command removed! please use Administration panel!") + elseif string.lower(event.parameters) == "resettranslate" then + User.resetTranslate() + Player.print("User translate are reseted!") + elseif string.lower(event.parameters) == "exportdata" then + Logging.limit = 10 + game.write_file("helmod\\data.json", Logging:objectToString(global), false) + Player.print("Data exported!") + elseif string.lower(event.parameters) == "exportmodel" then + Logging.limit = 10 + game.write_file("helmod\\model.json", Logging:objectToString(Model.getModel()), false) + Player.print("Model exported!") + elseif string.lower(event.parameters) == "exporttranslate" then + Logging.limit = 10 + game.write_file("helmod\\translate.json", Logging:objectToString(User.get("translated")), false) + Player.print("Translate exported!") + elseif string.lower(event.parameters) == "exportdatauser" then + Logging.limit = 10 + game.write_file("helmod\\data_user.json", Logging:objectToString(User.get()), false) + Player.print("Data UI exported!") + elseif string.lower(event.parameters) == "exportcache" then + Logging.limit = 10 + game.write_file("helmod\\cache.json", Logging:objectToString(Cache.getData()), false) + Player.print("Cache exported!") + else + Player.print("Valid arguments: close | ExportData | ExportModel | ExportTranslate | ExportDataUser | ResetCaches | ResetUserUI | ResetTranslate") + end + end +end + +return Command diff --git a/helmod/core/Converter.lua b/helmod/core/Converter.lua new file mode 100644 index 00000000..161af287 --- /dev/null +++ b/helmod/core/Converter.lua @@ -0,0 +1,178 @@ +local inflate = require "lib.deflatelua" +local deflate = require "lib.zlib-deflate" +local base64 = require "lib.base64" + +--- +---Description of the module. +---@class Converter +local Converter = { + ---single-line comment + classname = "HMConverter", + ---use gzip + compressed = true, + ---length of line + line_length = 120 +} + +------------------------------------------------------------------------------- +---Trim string +---@param s string +---@return string +function Converter.trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +------------------------------------------------------------------------------- +---Write table to string +---@param data_table table +---@return string +function Converter.write2(data_table) + local data_string = serpent.dump(data_table) + return game.encode_string(data_string) +end + +------------------------------------------------------------------------------- +---Write table to string +---@param data_table table +---@return string +function Converter.write(data_table) + local data_string = serpent.dump(data_table) + if (Converter.compressed) then + data_string = deflate.gzip(data_string) + data_string = base64.enc(data_string) + if (Converter.line_length > 0) then + ---Add line breaks + data_string = data_string:gsub( ("%S"):rep(Converter.line_length), "%1\n" ) + end + end + data_string = data_string .. "\n" + return data_string +end + +------------------------------------------------------------------------------- +---Read string to table +---@param data_string string +---@return table +function Converter.read2(data_string) + if data_string == nil then return nil end + data_string = Converter.trim(data_string) + if (string.sub(data_string, 1, 8) ~= "do local") then + local ok , err = pcall(function() + data_string = game.decode_string(data_string) + end) + if not(ok) then + return nil + end + end + local status, data_table = pcall(loadstring, data_string) + if (status) then + return data_table() + end + return nil +end + +------------------------------------------------------------------------------- +---Read string to table +---@param data_string string +---@return table +function Converter.read(data_string) + if data_string == nil then return nil end + data_string = Converter.trim(data_string) + if (string.sub(data_string, 1, 8) ~= "do local") then + local input = base64.dec(data_string) + local data_table = {} + local output = {} + local status, result = pcall(inflate.gunzip, { input = input, output = function(byte) output[#output+1] = string.char(byte) end }) + if (status) then + data_string = table.concat(output) + else + return nil + end + end + local status, data_table = pcall(loadstring, data_string) + if (status) then + return data_table() + end + return nil +end + +------------------------------------------------------------------------------- +---Read string to table +---@param data_string string +---@return table +function Converter.decode_string(data_string) + if data_string == nil then return nil end + data_string = Converter.trim(data_string) + if (string.sub(data_string, 1, 8) ~= "do local") then + local input = base64.dec(data_string) + local data_table = {} + local output = {} + local status, result = pcall(inflate.inflate_zlib, { input = input, output = function(byte) output[#output+1] = string.char(byte) end }) + if (status) then + return table.concat(output) + else + return nil + end + end +end + +------------------------------------------------------------------------------- +---Indent string +---@param json string +---@return string +function Converter.indent(json) + local table_value = game.json_to_table(json) + local result = Converter.indentTable(table_value, 0) + return result +end + +------------------------------------------------------------------------------- +---Indent table +---@param input any +---@param level number +---@return string +function Converter.indentTable(input, level) + local indent_char = " " + if type(input) == "table" then + local first = true + local is_array = true + local temp = "" + for key,value in pairs(input) do + if first == false then + temp = temp .. ",\n" + end + if type(key) == "string" then + is_array = false + temp = temp .. string.rep(indent_char, level) + temp = temp .. "\"" .. key .. "\": " + temp = temp .. Converter.indentTable(value, level + 1) + else + temp = temp .. string.rep(indent_char, level) + temp = temp .. Converter.indentTable(value, level + 1) + end + first = false + end + if is_array == true then + temp = "[\n" .. temp .. "\n" + temp = temp .. string.rep(indent_char, level-1) + temp = temp .. "]" + return temp + else + temp = "{\n" .. temp .. "\n" + temp = temp .. string.rep(indent_char, level-1) + temp = temp .. "}" + return temp + end + elseif type(input) == "string" then + return "\"" .. input .. "\"" + elseif type(input) == "boolean" then + if input == true then + return "true" + else + return "false" + end + end + return input +end + +return Converter diff --git a/helmod/core/Form.lua b/helmod/core/Form.lua new file mode 100644 index 00000000..c4c33ff7 --- /dev/null +++ b/helmod/core/Form.lua @@ -0,0 +1,600 @@ +------------------------------------------------------------------------------- +---Class to help to build form +Form = newclass(Object,function(base,classname) + Object.init(base,classname) + base:style() + base.otherClose = true + base.locate = "screen" + base.panelClose = true + base.help_button = true + base.auto_clear = true + base.content_verticaly = true + base.has_tips = false + base.list_tips = { + {name="tips-production-line", count=4}, + {name="tips-production-block", count=4} + } +end) + +------------------------------------------------------------------------------- +---Style +function Form:style() + local display_width, display_height, scale = User.getMainSizes() + local width_main = display_width/scale + local height_main = display_height/scale + self.styles = { + flow_panel ={ + width = width_main, + height = height_main, + minimal_width = width_main, + minimal_height = height_main, + maximal_width = width_main, + maximal_height = height_main, + } + } + self:onStyle(self.styles, width_main, height_main) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function Form:onStyle(styles, width_main, height_main) + +end + +------------------------------------------------------------------------------- +---Bind Dispatcher +function Form:bind() + Dispatcher:bind("on_gui_event", self, self.event) + + Dispatcher:bind("on_gui_open", self, self.open) + Dispatcher:bind("on_gui_open", self, self.update) + + Dispatcher:bind("on_gui_update", self, self.update) + Dispatcher:bind("on_gui_close", self, self.close) + + Dispatcher:bind("on_gui_error", self, self.updateError) + Dispatcher:bind("on_gui_message", self, self.updateMessage) + self:onBind() +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function Form:onBind() +end + +------------------------------------------------------------------------------- +---On initialization +function Form:onInit() +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function Form:isVisible() + return true +end + +------------------------------------------------------------------------------- +---Is special +---@return boolean +function Form:isSpecial() + return false +end + +------------------------------------------------------------------------------- +---Is tool +---@return boolean +function Form:isTool() + return false +end + +------------------------------------------------------------------------------- +---Get panel name +---@return string +function Form:getPanelName() + return self.classname +end + +------------------------------------------------------------------------------- +---Get the parent panel +---@return LuaGuiElement +function Form:getParentPanel() + local lua_player = Player.native() + return lua_player.gui[self.locate] +end + +------------------------------------------------------------------------------- +---Set style +---@param element LuaGuiElement +---@param style string +---@param property string +function Form:setStyle(element, style, property) + if element.style ~= nil and self.styles ~= nil and self.styles[style] ~= nil and self.styles[style][property] ~= nil then + element.style[property] = self.styles[style][property] + end +end + +-------------------------------------------------------------------------------- +---Get the parent panel +---@return LuaGuiElement +function Form:getPanel() + local parent_panel = self:getParentPanel() + if parent_panel[self:getPanelName()] ~= nil and parent_panel[self:getPanelName()].valid then + return parent_panel[self:getPanelName()], parent_panel[self:getPanelName()]["content_panel"], parent_panel[self:getPanelName()]["header_panel"]["menu_panel"] + end + ---main panel + local flow_panel = GuiElement.add(parent_panel, GuiFrameV(self:getPanelName()):style("frame")) + flow_panel.style.horizontally_stretchable = true + flow_panel.style.vertically_stretchable = true + flow_panel.location = User.getLocationForm(self:getPanelName()) + self:setFlowStyle(flow_panel) + + local header_panel = GuiElement.add(flow_panel, GuiFlowH("header_panel")) + header_panel.style.horizontally_stretchable = true + ---header panel + local title_panel = GuiElement.add(header_panel, GuiFrameH("title_panel"):caption(self.panelCaption or self.classname):style("helmod_frame_header")) + title_panel.style.horizontally_stretchable = true + title_panel.drag_target = flow_panel + + local menu_panel = GuiElement.add(header_panel, GuiFlowH("menu_panel")) + menu_panel.style.horizontal_spacing = 10 + menu_panel.style.horizontal_align = "right" + + local content_panel + content_panel = GuiElement.add(flow_panel, GuiFrameV("content_panel"):style("inside_deep_frame")) + content_panel.style.vertically_stretchable = true + content_panel.style.horizontally_stretchable = true + return flow_panel, content_panel, menu_panel +end + +------------------------------------------------------------------------------- +---Set style +---@param flow_panel LuaGuiElement +function Form:setFlowStyle(flow_panel) + self:setStyle(flow_panel, "flow_panel", "width") + self:setStyle(flow_panel, "flow_panel", "height") + self:setStyle(flow_panel, "flow_panel", "minimal_width") + self:setStyle(flow_panel, "flow_panel", "minimal_height") + self:setStyle(flow_panel, "flow_panel", "maximal_width") + self:setStyle(flow_panel, "flow_panel", "maximal_height") +end + +------------------------------------------------------------------------------- +---Get or create scroll panel +---@param panel_name string +---@return LuaGuiElement +function Form:getScrollPanel(panel_name) + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local frame_panel = GuiElement.add(content_panel, GuiScroll(panel_name):style("helmod_scroll_pane")) + frame_panel.style.horizontally_stretchable = true + return frame_panel +end + +------------------------------------------------------------------------------- +---Get or create scroll panel +---@param panel_name string +---@return LuaGuiElement +function Form:getScrollFramePanel(panel_name) + local frame_panel = self:getFramePanel(panel_name) + local scroll_name = "scroll-panel" + if frame_panel[scroll_name] ~= nil and frame_panel[scroll_name].valid then + return frame_panel[scroll_name] + end + local scroll_panel = GuiElement.add(frame_panel, GuiScroll(scroll_name)) + scroll_panel.style.horizontally_stretchable = false + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create flow panel +---@param panel_name string +---@return LuaGuiElement +function Form:getFlowPanel(panel_name, direction) + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local frame_panel = nil + if direction == "horizontal" then + frame_panel = GuiElement.add(content_panel, GuiFlowH(panel_name)) + else + frame_panel = GuiElement.add(content_panel, GuiFlowV(panel_name)) + end + frame_panel.style.horizontally_stretchable = true + return frame_panel +end + +------------------------------------------------------------------------------- +---Get or create frame panel +---@param panel_name string +---@param style string +---@param direction string --horizontal, vertical +---@return LuaGuiElement +function Form:getFramePanel(panel_name, style, direction) + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local frame_panel = nil + if direction == "horizontal" then + frame_panel = GuiElement.add(content_panel, GuiFrameH(panel_name):style(style or "helmod_frame")) + else + frame_panel = GuiElement.add(content_panel, GuiFrameV(panel_name):style(style or "helmod_frame")) + end + frame_panel.style.horizontally_stretchable = true + return frame_panel +end + +------------------------------------------------------------------------------- +---Get or create frame panel +---@param panel_name string +---@param direction string --horizontal, vertical +---@return LuaGuiElement +function Form:getFrameInsidePanel(panel_name, direction) + return self:getFramePanel(panel_name, "helmod_inside_frame", direction) +end + +------------------------------------------------------------------------------- +---Get or create frame panel +---@param panel_name string +---@param direction string --horizontal, vertical +---@return LuaGuiElement +function Form:getFrameDeepPanel(panel_name, direction) + return self:getFramePanel(panel_name, "helmod_deep_frame", direction) +end + +------------------------------------------------------------------------------- +---Get or create frame panel +---@param panel_name string +---@param direction string --horizontal, vertical +---@return LuaGuiElement +function Form:getFrameTabbedPanel(panel_name, direction) + return self:getFramePanel(panel_name, "helmod_tabbed_frame", direction) +end + +------------------------------------------------------------------------------- +---Get the top panel +---@return LuaGuiElement +function Form:getTopPanel() + local panel = self:getFrameDeepPanel("top") + return panel +end + +------------------------------------------------------------------------------- +---Get the menu panel +---@return LuaGuiElement, LuaGuiElement +function Form:getMenuPanel() + local content_panel = self:getTopPanel() + local panel_name = "menu" + local left_name = "left_menu" + local right_name = "right_menu" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name][left_name], content_panel[panel_name][right_name] + end + local panel = GuiElement.add(content_panel, GuiFlowH(panel_name)) + panel.style.horizontally_stretchable = true + panel.style.height = 32 + + local left_panel = GuiElement.add(panel, GuiFlowH(left_name)) + left_panel.style.horizontal_spacing = 10 + + local right_panel = GuiElement.add(panel, GuiFlowH(right_name)) + right_panel.style.horizontal_spacing = 10 + right_panel.style.horizontally_stretchable = true + right_panel.style.horizontal_align = "right" + return left_panel, right_panel +end + +------------------------------------------------------------------------------- +---Get the menu panel +---@return LuaGuiElement +function Form:getMenuSubPanel() + local content_panel = self:getTopPanel() + local panel_name = "sub_menu" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiFlowH(panel_name)) + panel.style.horizontally_stretchable = true + panel.style.minimal_height = 32 + return panel +end + +------------------------------------------------------------------------------- +---Is opened panel +---@return boolean +function Form:isOpened() + local parent_panel = self:getParentPanel() + if parent_panel[self:getPanelName()] ~= nil then + return true + end + return false +end + +------------------------------------------------------------------------------- +---Build first container +---@return boolean +function Form:open(event) + self:style() + self:onBeforeOpen(event) + if self:isOpened() then + local flow_panel = self:getPanel() + flow_panel.bring_to_front() + return true + end + local parent_panel = self:getParentPanel() + User.setActiveForm(self.classname) + self:updateTopMenu(event) + if parent_panel[self:getPanelName()] == nil then + self:onOpen(event) + end + + if self.classname == "HMProductionPanel" then + Player.setShortcutState(true) + Player.native().opened = self:getPanel() + end + + return true +end + +------------------------------------------------------------------------------- +---On before open +---@return boolean +function Form:onBeforeOpen(event) + return false +end + +------------------------------------------------------------------------------- +---Event +---@param event LuaEvent +function Form:event(event) + if not(self:isOpened()) then return end + self:onFormEvent(event) + self:onEvent(event) +end + +------------------------------------------------------------------------------- +---On form event +---@param event LuaEvent +function Form:onFormEvent(event) + local flow_panel, content_panel, menu_panel = self:getPanel() + if event.action == "minimize-window" then + content_panel.visible = false + flow_panel.style.height = 50 + flow_panel.style.minimal_width = 100 + end + if event.action == "maximize-window" then + content_panel.visible = true + self:setFlowStyle(flow_panel) + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function Form:onEvent(event) +end + +------------------------------------------------------------------------------- +---On open +---@param event LuaEvent +function Form:onOpen(event) + return false +end + +------------------------------------------------------------------------------- +---Prepare +---@param event LuaEvent +function Form:prepare(event) + return false +end + +------------------------------------------------------------------------------- +---Add cell header +---@param guiTable LuaGuiElement +---@param name string +---@param caption string +function Form:addCellHeader(guiTable, name, caption) + local cell = GuiElement.add(guiTable, GuiFrameH("header", name):style(helmod_frame_style.hidden)) + GuiElement.add(cell, GuiLabel("label"):caption(caption)) +end + +------------------------------------------------------------------------------- +---Update top menu +---@param event LuaEvent +function Form:updateTopMenu(event) + ---ajoute un menu + if self.panelCaption ~= nil then + local flow_panel, content_panel, menu_panel = self:getPanel() + menu_panel.clear() + if self.panelClose then + ---pause game + if string.find(self.classname, "HMProductionPanel") then + local group3 = GuiElement.add(menu_panel, GuiFlowH("group3")) + if game.is_multiplayer() and not(game.tick_paused) then + local pause_button = GuiElement.add(group3, GuiButton("do-nothing"):sprite("menu", defines.sprites.run.white, defines.sprites.run.black):style("helmod_frame_button"):tooltip({"helmod_button.game-play-multiplayer"})) + pause_button.enabled = false + else + if game.tick_paused then + GuiElement.add(group3, GuiButton(self.classname, "game-play"):sprite("menu", defines.sprites.pause.black, defines.sprites.pause.black):style("helmod_frame_button_actived_red"):tooltip({"helmod_button.game-pause"})) + else + GuiElement.add(group3, GuiButton(self.classname, "game-pause"):sprite("menu", defines.sprites.run.white, defines.sprites.run.black):style("helmod_frame_button"):tooltip({"helmod_button.game-play"})) + end + end + end + + ---Tool button + local tool_group = GuiElement.add(menu_panel, GuiFlowH("tool_group")) + for _, form in pairs(Controller.getViews()) do + if self.add_special_button == true and form:isVisible() and form:isTool() then + local icon_hovered, icon = form:getButtonSprites() + GuiElement.add(tool_group, GuiButton(form.classname, "OPEN"):sprite("menu", icon_hovered, icon):style("helmod_frame_button"):tooltip(form.panelCaption)) + end + end + + ---special tab + local special_group = GuiElement.add(menu_panel, GuiFlowH("special_group")) + for _, form in pairs(Controller.getViews()) do + if self.add_special_button == true and form:isVisible() and form:isSpecial() then + local icon_hovered, icon = form:getButtonSprites() + GuiElement.add(special_group, GuiButton(form.classname, "OPEN"):sprite("menu", icon_hovered, icon):style("helmod_frame_button"):tooltip(form.panelCaption)) + end + end + ---Standard group + local standard_group = GuiElement.add(menu_panel, GuiFlowH("standard_group")) + if self.help_button then + GuiElement.add(standard_group, GuiButton("HMHelpPanel", "OPEN"):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black):style("helmod_frame_button"):tooltip({"helmod_button.help"})) + end + GuiElement.add(standard_group, GuiButton(self.classname, "minimize-window"):sprite("menu", defines.sprites.minimize.white, defines.sprites.minimize.black):style("helmod_frame_button"):tooltip({"helmod_button.minimize"})) + GuiElement.add(standard_group, GuiButton(self.classname, "maximize-window"):sprite("menu", defines.sprites.maximize.white, defines.sprites.maximize.black):style("helmod_frame_button"):tooltip({"helmod_button.maximize"})) + GuiElement.add(standard_group, GuiButton(self.classname, "CLOSE"):sprite("menu", defines.sprites.close.white, defines.sprites.close.black):style("helmod_frame_button"):tooltip({"helmod_button.close"})) + end + else + Logging:warn(self.classname, "self.panelCaption not found") + end +end + +------------------------------------------------------------------------------- +---Update +---@param event LuaEvent +function Form:update(event) + if not(self:isOpened()) then return end + local flow_panel, content_panel, menu_panel = self:getPanel() + if self.auto_clear then content_panel.clear() end + self:updateTopMenu(event) + self:onUpdate(event) + self:updateLocation(event) + if self.has_tips and User.getPreferenceSetting("display_tips") then + self:updateTips("un tips") + end +end + +------------------------------------------------------------------------------- +---Update location +---@param event LuaEvent +function Form:updateLocation(event) + local display_width, display_height, scale = Player.getDisplaySizes() + local width_main, height_main, scale = User.getMainSizes() + local flow_panel, content_panel, menu_panel = self:getPanel() + if User.getPreferenceSetting("ui_glue") == true and User.getPreferenceSetting("ui_glue", self.classname) == true then + local offset = User.getPreferenceSetting("ui_glue_offset") + local navigate = User.getNavigate() + local location = {x=50,y=50} + if navigate[User.tab_name] ~= nil and navigate[User.tab_name]["location"] ~= nil then + location = navigate[User.tab_name]["location"] + end + local location_x = location.x + width_main/scale + display_width*offset/scale + flow_panel.location = {location_x, y=location.y} + end + + local location = flow_panel.location + if location.x < 0 or location.x > (display_width - 50)/scale then + location.x = 0 + flow_panel.location = location + end + if location.y < 0 or location.y > (display_height - 50)/scale then + location.y = 50 + flow_panel.location = location + end +end + +------------------------------------------------------------------------------- +---Update message +---@param event LuaEvent +function Form:updateMessage(event) + if not(self:isOpened()) then return end + local panel = self:getFrameDeepPanel("message") + panel.clear() + GuiElement.add(panel, GuiLabel("message"):caption(event.message)) +end + +------------------------------------------------------------------------------- +---Get tips +---@return string +function Form:getTips() + local list_tips = {} + if self.list_tips ~= nil then + for _,tips in pairs(self.list_tips) do + for line = 1, tips.count, 1 do + local localised_text = {string.format("helmod_help.%s-%s", tips.name, line)} + table.insert(list_tips, localised_text) + end + end + local index = math.random(#list_tips) + return list_tips[index] + end + return nil +end +------------------------------------------------------------------------------- +---Update tips +---@param message string +function Form:updateTips(message) + if not(self:isOpened()) then return end + local navigate = User.getNavigate(self.classname) + local time_tips = navigate["tips"] or game.tick + if game.tick - time_tips > User.delay_tips then return end + local message = self:getTips() + if message == nil then return end + local panel = self:getFramePanel("tips") + panel.clear() + GuiElement.add(panel, GuiLabel("tips"):caption(message)) + + local event_queue = User.getParameter("event_queue") or {} + local event = {tick=game.tick, is_tips=true, classname=self.classname} + event_queue[self.classname] = event + if time_tips == game.tick then + navigate["tips"] = game.tick + User.setParameter("event_queue", event_queue) + end +end + +------------------------------------------------------------------------------- +---Destroy tips +function Form:destroyTips() + if not(self:isOpened()) then return end + local panel = self:getFramePanel("tips") + panel.destroy() +end + +------------------------------------------------------------------------------- +---Update error +---@param event LuaEvent +function Form:updateError(event) + if not(self:isOpened()) then return end + local panel = self:getFrameDeepPanel("error") + panel.clear() + GuiElement.add(panel, GuiLabel("message"):caption(event.message or "Unknown error"):color("red")) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function Form:onUpdate(event) + +end + +------------------------------------------------------------------------------- +---Close dialog +---@param force boolean +function Form:close(force) + if not(self:isOpened()) and force ~= true then return end + local flow_panel, content_panel, menu_panel = self:getPanel() + User.setCloseForm(self.classname, flow_panel.location) + self:onClose() + flow_panel.destroy() + + if self.classname == "HMProductionPanel" then + Player.setShortcutState(false) + end +end + +------------------------------------------------------------------------------- +---On close dialog +function Form:onClose() +end diff --git a/helmod/core/FormModel.lua b/helmod/core/FormModel.lua new file mode 100644 index 00000000..1fcbaf23 --- /dev/null +++ b/helmod/core/FormModel.lua @@ -0,0 +1,23 @@ +------------------------------------------------------------------------------- +---Class to build form with current model +---@class FormModel : Form +FormModel = newclass(Form,function(base,classname) + Form.init(base,classname) + base.parameter_objects = string.format("%s_%s", classname, "objects") +end) + +------------------------------------------------------------------------------- +---On before event +---@param event LuaEvent +function FormModel:onBeforeOpen(event) + User.setParameter(self.parameter_objects, {name=self.parameter_objects, model=event.item1, block=event.item2, recipe=event.item3}) +end + +------------------------------------------------------------------------------- +---Get objects with current parameter +---@return ModelData, BlockData, RecipeData +function FormModel:getParameterObjects() + local parameter_objects = User.getParameter(self.parameter_objects) + local model, block, recipe = Model.getParameterObjects(parameter_objects) + return model, block, recipe +end diff --git a/helmod/core/Format.lua b/helmod/core/Format.lua new file mode 100644 index 00000000..7a5b3834 --- /dev/null +++ b/helmod/core/Format.lua @@ -0,0 +1,105 @@ +--- +---Description of the module. +---@class Format +local Format = { + ---single-line comment + classname = "HMFormat" +} + +------------------------------------------------------------------------------- +---Format the number +---@param n number the number +---@param decimal number +---@return number --formated number +function Format.formatNumber(n, decimal) + local separator = " " + if n == nil then return 0 end + --return tostring(math.floor(n)):reverse():gsub("(%d%d%d)","%1 "):gsub(" (%-?)$","%1"):reverse() + if decimal == nil then decimal = 2 end + if n > 100 and decimal > 1 then decimal = 1 end + if n > 1000 then decimal = 0 end + local left,num,right = string.match(Format.round(n, decimal),'^([^%d]*%d)(%d*)(.-)$') + if num == nil then return 0 end + if left == nil then left = "" end + if right == nil then right = "" end + return left..(num:reverse():gsub('(%d%d%d)','%1'..separator):reverse())..right +end + +------------------------------------------------------------------------------- +---Format the number +---@see http://lua-users.org/wiki/FormattingNumbers +---@details Round up unless the number is lower than x.02, then round down. +--- Since this is used mostly to format factory/resource numbers this gives +--- the minimum necessary amount rounded to a proper number of decimal places, +--- but drops small surpluses from floating point. +---@param val number the number +---@param decimal number +---@return number --formated number +function Format.round(val, decimal) + if (decimal) then + if decimal >= 0 then + return math.ceil( (val * 10^decimal)) / (10^decimal) + else + local decimal = math.abs(decimal) + return math.floor( (val * 10^decimal)) / (10^decimal) + end + else + return math.ceil(val) + end +end + +------------------------------------------------------------------------------- +---Format the number +---@param value number the number +---@param suffix string +---@return string --formated number +function Format.formatNumberKilo(value, suffix) + if suffix == nil then suffix = "" end + if value == nil then + return 0 + elseif value < 1000 then + return Format.formatNumber(value).." "..suffix + elseif (value / 1000) < 1000 then + return math.ceil(value*10 / 1000)/10 .. " k" ..suffix + elseif (value / (1000*1000)) < 1000 then + return math.ceil(value*10 / (1000*1000))/10 .. " M" ..suffix + else + return math.ceil(value*10 / (1000*1000*1000))/10 .. " G" ..suffix + end +end + +------------------------------------------------------------------------------- +---Format the number +---@param num number +---@return number +function Format.formatPercent(num) + local mult = 10^3 + return math.floor(num * mult + 0.5) / 10 +end + +------------------------------------------------------------------------------- +---Format number for factory +---@param number number +---@return number +function Format.formatNumberFactory(number) + local decimal = 2 + local format_number = User.getPreferenceSetting("format_number_factory") + if format_number == "0" then decimal = 0 end + if format_number == "0.0" then decimal = 1 end + if format_number == "0.00" then decimal = 2 end + return Format.formatNumber(number, decimal) +end + +------------------------------------------------------------------------------- +---Format number for element product or ingredient +---@param number number +---@return number +function Format.formatNumberElement(number) + local decimal = 2 + local format_number = User.getPreferenceSetting("format_number_element") + if format_number == "0" then decimal = 0 end + if format_number == "0.0" then decimal = 1 end + if format_number == "0.00" then decimal = 2 end + return Format.formatNumber(number, decimal) +end +return Format diff --git a/helmod/core/Object.lua b/helmod/core/Object.lua new file mode 100644 index 00000000..59178693 --- /dev/null +++ b/helmod/core/Object.lua @@ -0,0 +1,17 @@ +------------------------------------------------------------------------------- +-- Class Object +-- +-- @module Object +-- +Object = newclass(function(base,classname) + base.classname = classname + base:onInit() +end) + +------------------------------------------------------------------------------- +-- On initialization +-- +-- @function [parent=#Object] onInit +-- +function Object:onInit() +end diff --git a/helmod/core/Remote.lua b/helmod/core/Remote.lua new file mode 100644 index 00000000..e269d6a1 --- /dev/null +++ b/helmod/core/Remote.lua @@ -0,0 +1,58 @@ +--- +---Description of the module. +---@class Remote +local Remote = { + ---single-line comment + classname = "HMRemote" +} + +------------------------------------------------------------------------------- +---Close panel +function Remote.close() + if game.player.admin then + Controller.onGuiClick({player_index=game.player.index, element = {valid=true, name="HMController=CLOSE"}}) + end +end + +------------------------------------------------------------------------------- +---Close panel +function Remote.test() + if game.player.admin then + UnitTest.run({player_index=game.player.index}) + end +end + +------------------------------------------------------------------------------- +---Clear panel +function Remote.clear() +if game.player.admin then + for _,player in pairs(game.players) do + helmod:clear_panel(player) + end + end +end + +------------------------------------------------------------------------------- +---Export data +---@param level number +function Remote.export_data(level) + Logging.limit = level or 10 + game.write_file("helmod\\data.json", Logging:objectToString(global), false) +end + +------------------------------------------------------------------------------- +---cheat +function Remote.cheat(object, object_type) +if game.player.admin and Logging.log > 0 then + game.player.force.enable_all_recipes() + game.player.force.enable_all_technologies() + game.player.force.manual_mining_speed_modifier=100 + game.player.force.manual_crafting_speed_modifier=100 + game.player.cheat_mode=true + game.player.print("cheat mod!") + else + game.player.print("not allowed cheat mod!") + end +end + +return Remote \ No newline at end of file diff --git a/helmod/core/Runtime.lua b/helmod/core/Runtime.lua new file mode 100644 index 00000000..a0ba9528 --- /dev/null +++ b/helmod/core/Runtime.lua @@ -0,0 +1,48 @@ +------------------------------------------------------------------------------- +---Class Object +---@class Runtime +Runtime = newclass(function(base) + base.classname = "HMRuntime" + base.caches = {} +end) + +------------------------------------------------------------------------------- +---Clear +function Runtime:clear() + self.caches = {} +end + +------------------------------------------------------------------------------- +---Get runtime variable +---@param key string +---@return table +function Runtime:get(key) + if self.caches[key] == nil then self.caches[key] = {} end + return self.caches[key] +end + +------------------------------------------------------------------------------- +---Set parameter +---@param property string +---@param value any +---@return any +function Runtime:setParameter(property, value) + if property == nil then + return nil + end + local parameter = self:get("parameter") + parameter[property] = value + return value +end + +------------------------------------------------------------------------------- +---Get parameter +---@param property string +---@return any +function Runtime:getParameter(property) + local parameter = self:get("parameter") + if parameter ~= nil and property ~= nil then + return parameter[property] + end + return parameter +end \ No newline at end of file diff --git a/helmod/core/class.lua b/helmod/core/class.lua new file mode 100644 index 00000000..5238000b --- /dev/null +++ b/helmod/core/class.lua @@ -0,0 +1,45 @@ +-- class.lua +-- Compatible with Lua 5.1 (not 5.0). +function newclass(super, init) + local c = {} -- a new class instance + if not init and type(super) == 'function' then + init = super + super = nil + elseif type(super) == 'table' then + -- our new class is a shallow copy of the super class! + for i,v in pairs(super) do + c[i] = v + end + c._super = super + end + -- the class will be the metatable for all its objects, + -- and they will look up their methods in it. + c.__index = c + + -- expose a constructor which can be called by () + local mt = {} + mt.__call = function(class_tbl, ...) + local obj = {} + setmetatable(obj,c) + if init then + init(obj,...) + else + -- make sure that any stuff from the super class is initialized! + if super and super.init then + super.init(obj, ...) + end + end + return obj + end + c.init = init + c.is_a = function(self, klass) + local m = getmetatable(self) + while m do + if m == klass then return true end + m = m._super + end + return false + end + setmetatable(c, mt) + return c +end diff --git a/helmod/core/defines.lua b/helmod/core/defines.lua new file mode 100644 index 00000000..1879f8b2 --- /dev/null +++ b/helmod/core/defines.lua @@ -0,0 +1,462 @@ +require "core.defines_builded" + +defines.sprite_size=14 + +defines.sprite_tooltips = {} +defines.sprite_tooltips["energy"] = defines.sprites.event.white +defines.sprite_tooltips["steam-heat"] = defines.sprites.steam_heat.white + +defines.sprite_info = {} +--- sprite info +defines.sprite_info["developer"] = defines.sprites.info_settings.blue +defines.sprite_info["education"] = defines.sprites.info_education.blue +defines.sprite_info["burnt"] = defines.sprites.info_fire.blue +defines.sprite_info["block"] = defines.sprites.info_hangar.white +defines.sprite_info["energy"] = defines.sprites.info_energy.blue +defines.sprite_info["rocket"] = defines.sprites.info_rocket.blue +--- sprite contraint +defines.sprite_info["linked"] = defines.sprites.info_arrow_top.red +defines.sprite_info["master"] = defines.sprites.info_add.red +defines.sprite_info["exclude"] = defines.sprites.info_remove.red + +defines.sprite_tooltip = {} +defines.sprite_tooltip["info"] = defines.sprites.tooltip_information.white +defines.sprite_tooltip["edit"] = defines.sprites.tooltip_edit.yellow +defines.sprite_tooltip["add"] = defines.sprites.tooltip_add.yellow +defines.sprite_tooltip["remove"] = defines.sprites.tooltip_remove.yellow +defines.sprite_tooltip["erase"] = defines.sprites.tooltip_erase.yellow +defines.sprite_tooltip["favorite"] = defines.sprites.tooltip_favorite.yellow +defines.sprite_tooltip["expand_right"] = defines.sprites.tooltip_expand_right.yellow +defines.sprite_tooltip["expand_right_group"] = defines.sprites.tooltip_expand_right_group.yellow +defines.sprite_tooltip["pipette"] = defines.sprites.tooltip_pipette.yellow + +defines.constant = {} +defines.constant.solvers = {} +defines.constant.solvers.normal = "normal" +defines.constant.solvers.matrix = "matrix" +defines.constant.default_solver = defines.constant.solvers.matrix +defines.constant.rocket_deploy_delay = 2434 / 60 +defines.constant.max_float = 1e300 +defines.constant.base_times = { + { value = 1, caption = "1s", tooltip={"helmod_si.seconde",1}}, + { value = 60, caption = "1", tooltip={"helmod_si.minute",1}}, + { value = 300, caption = "5", tooltip={"helmod_si.minute",5}}, + { value = 600, caption = "10", tooltip={"helmod_si.minute",10}}, + { value = 1800, caption = "30", tooltip={"helmod_si.minute",30}}, + { value = 3600, caption = "1h", tooltip={"helmod_si.hour",1}}, + { value = 3600*6, caption = "6h", tooltip={"helmod_si.hour",6}}, + { value = 3600*12, caption = "12h", tooltip={"helmod_si.hour",12}}, + { value = 3600*24, caption = "24h", tooltip={"helmod_si.hour",24}} +} +defines.constant.logistic_flow_default = 3000 + +defines.constant.logistic_flow = { + {pipe=1, flow=6000}, + {pipe=2, flow=3000}, + {pipe=3, flow=2250}, + {pipe=7, flow=1500}, + {pipe=12, flow=1285}, + {pipe=17, flow=1200}, + {pipe=20, flow=1169}, + {pipe=30, flow=1112}, + {pipe=50, flow=1067}, + {pipe=100, flow=1033}, + {pipe=150, flow=1022}, + {pipe=200, flow=1004}, + {pipe=261, flow=800}, + {pipe=300, flow=707}, + {pipe=400, flow=546}, + {pipe=500, flow=445}, + {pipe=600, flow=375}, + {pipe=800, flow=286}, + {pipe=1000, flow=230} +} + +defines.constant.beacon_combo = 4 +defines.constant.beacon_factory = 0.5 +defines.constant.beacon_constant = 3 + +if script ~= nil and script.active_mods["space-exploration"] then + defines.constant.beacon_combo = 1 + defines.constant.beacon_factory = 0.25 + defines.constant.beacon_constant = 0 +end + +defines.constant.preferences = { + -- factory level + default_factory_level = { + type = "string-setting", + localised_name = {"helmod_pref_settings.default-factory-level"}, + localised_description = {"helmod_pref_settings.default-factory-level-desc"}, + default_value = "1", + allowed_values = {"1","2","3","4","5","6","last"}, + group = "general" + }, + -- format number factory + format_number_factory = { + type = "string-setting", + localised_name = {"helmod_pref_settings.format-number-factory"}, + localised_description = {"helmod_pref_settings.format-number-factory-desc"}, + default_value = "0", + allowed_values = {"0","0.0","0.00"}, + group = "general" + }, + -- format number element + format_number_element = { + type = "string-setting", + localised_name = {"helmod_pref_settings.format-number-element"}, + localised_description = {"helmod_pref_settings.format-number-element-desc"}, + default_value = "0.0", + allowed_values = {"0","0.0","0.00"}, + group = "general" + }, + -- preference number line by scroll + preference_number_line = { + type = "int-setting", + localised_name = {"helmod_pref_settings.preference-number-line"}, + localised_description = {"helmod_pref_settings.preference-number-line-desc"}, + default_value = 3, + allowed_values = {2,3,4,5}, + group = "general" + }, + -- preference number column by scroll + preference_number_column = { + type = "int-setting", + localised_name = {"helmod_pref_settings.preference-number-column"}, + localised_description = {"helmod_pref_settings.preference-number-column-desc"}, + default_value = 6, + allowed_values = {6,7,8,9,10,11,12}, + group = "general" + }, + -- display product order + display_product_order = { + type = "string-setting", + localised_name = {"helmod_pref_settings.display-product-order"}, + localised_description = {"helmod_pref_settings.display-product-order-desc"}, + default_value = "natural", + allowed_values = {"natural","name","cost"}, + group = "general" + }, + --display product cols + display_product_cols = { + type = "int-setting", + localised_name = {"helmod_pref_settings.display-product-cols"}, + localised_description = {"helmod_pref_settings.display-product-cols-desc"}, + default_value = 5, + allowed_values = {5,6,7,8,9,10}, + group = "general" + }, + --display-ingredient-cols + display_ingredient_cols = { + type = "int-setting", + localised_name = {"helmod_pref_settings.display-ingredient-cols"}, + localised_description = {"helmod_pref_settings.display-ingredient-cols-desc"}, + default_value = 5, + allowed_values = {5,6,7,8,9,10}, + group = "general" + }, + --display-pollution + display_pollution = { + type = "bool-setting", + localised_name = {"helmod_pref_settings.display-pollution"}, + localised_description = {"helmod_pref_settings.display-pollution-desc"}, + default_value = true, + group = "general" + }, + --display-building + display_building = { + type = "bool-setting", + localised_name = {"helmod_pref_settings.display-building"}, + localised_description = {"helmod_pref_settings.display-building-desc"}, + default_value = true, + group = "general" + }, + --display-tips + display_tips = { + type = "bool-setting", + localised_name = {"helmod_pref_settings.display-tips"}, + localised_description = {"helmod_pref_settings.display-tips-desc"}, + default_value = true, + group = "general" + }, + --beacon-affecting-one + beacon_affecting_one = { + type = "float-setting", + localised_name = {"helmod_pref_settings.beacon-affecting-one"}, + localised_description = {"helmod_pref_settings.beacon-affecting-one-desc"}, + default_value = defines.constant.beacon_combo, + group = "general" + }, + --beacon-affecting-one + beacon_by_factory = { + type = "float-setting", + localised_name = {"helmod_pref_settings.beacon-by-factory"}, + localised_description = {"helmod_pref_settings.beacon-by-factory-desc"}, + default_value = defines.constant.beacon_factory, + group = "general" + }, + --beacon-constant + beacon_constant = { + type = "float-setting", + localised_name = {"helmod_pref_settings.beacon-constant"}, + localised_description = {"helmod_pref_settings.beacon-constant-desc"}, + default_value = defines.constant.beacon_constant, + group = "general" + }, + --ui-auto-close + ui_auto_close = { + type = "bool-setting", + localised_name = {"helmod_pref_settings.ui-auto-close"}, + localised_description = {"helmod_pref_settings.ui-auto-close-desc"}, + default_value = false, + group = "ui", + items = { + HMRecipeEdition = true, + HMProductEdition = false, + HMRuleEdition = false, + HMPreferenceEdition = false, + + HMEntitySelector = true, + HMRecipeSelector = true, + HMTechnologySelector = true, + HMItemSelector = true, + HMFluidSelector = true + } + }, + --ui-glue + ui_glue = { + type = "bool-setting", + localised_name = {"helmod_pref_settings.ui-glue"}, + localised_description = {"helmod_pref_settings.ui-glue-desc"}, + default_value = false, + group = "ui", + items = { + HMRecipeEdition = true, + HMProductEdition = false, + HMRuleEdition = false, + HMPreferenceEdition = false, + + HMEntitySelector = true, + HMRecipeSelector = true, + HMTechnologySelector = true, + HMItemSelector = true, + HMFluidSelector = true + } + }, + ui_glue_offset = { + type = "int-setting", + localised_name = {"helmod_pref_settings.ui-glue-offset"}, + localised_description = {"helmod_pref_settings.ui-glue-offset-desc"}, + default_value = 0, + minimum_value = -1, + maximum_value = 1, + group = "ui" + }, +} + +defines.constant.settings_mod = { + -- display_ratio_horizontal + display_ratio_horizontal = { + type = "double-setting", + setting_type = "runtime-per-user", + localised_name = {"helmod_user_settings.display-ratio-horizontal"}, + localised_description = {"helmod_user_settings.display-ratio-horizontal-desc"}, + default_value = 0.85, + minimum_value = 0.1, + maximum_value = 2, + allow_blank = false, + order = "b0" + }, + -- display_ratio_vertical + display_ratio_vertical = { + type = "double-setting", + setting_type = "runtime-per-user", + localised_name = {"helmod_user_settings.display-ratio-vertical"}, + localised_description = {"helmod_user_settings.display-ratio-vertical-desc"}, + default_value = 0.8, + minimum_value = 0.1, + maximum_value = 2, + allow_blank = false, + order = "b1" + }, + -- display main icon + display_main_icon = { + type = "bool-setting", + setting_type = "runtime-per-user", + localised_name = {"helmod_user_settings.display-main-icon"}, + localised_description = {"helmod_user_settings.display-main-icon-desc"}, + default_value = true, + order = "b2" + }, + --display-cell-mod + display_cell_mod = { + type = "string-setting", + setting_type = "runtime-per-user", + localised_name = {"helmod_user_settings.display-cell-mod"}, + localised_description = {"helmod_user_settings.display-cell-mod-desc"}, + default_value = "default", + allowed_values = {"default","small-text","small-icon","by-kilo"}, + order = "b4" + }, + --row_move_step + row_move_step = { + type = "int-setting", + setting_type = "runtime-per-user", + localised_name = {"helmod_user_settings.row-move-step"}, + localised_description = {"helmod_user_settings.row-move-step-desc"}, + default_value = 5, + minimum_value = 2, + maximum_value = 10, + order = "c0" + }, + -- debug_solver + debug_solver = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.debug-solver"}, + localised_description = {"helmod_map_settings.debug-solver-desc"}, + default_value = false, + order = "a2" + }, + -- display_ratio_horizontal + user_cache_step = { + type = "int-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.user-cache-step"}, + localised_description = {"helmod_map_settings.user-cache-step-desc"}, + default_value = 100, + allowed_values = {50,100,200,300,400,500}, + order = "a3" + }, + --display_all_sheet + display_all_sheet = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.display-all-sheet"}, + localised_description = {"helmod_map_settings.display-all-sheet-desc"}, + default_value = false, + order = "c0" + }, + + filter_translated_string_active = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.filter-translated-string-active"}, + localised_description = {"helmod_map_settings.filter-translated-string-active-desc"}, + default_value = true, + order = "d0" + }, + filter_on_text_changed = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.filter-on-text-changed"}, + localised_description = {"helmod_map_settings.filter-on-text-changed-desc"}, + default_value = false, + order = "d1" + }, + --model-filter-factory + model_filter_factory = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.model-filter-factory"}, + localised_description = {"helmod_map_settings.model-filter-factory-desc"}, + default_value = true, + order = "d2" + }, + --model-filter-beacon + model_filter_beacon = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.model-filter-beacon"}, + localised_description = {"helmod_map_settings.model-filter-beacon-desc"}, + default_value = true, + order = "d3" + }, + --model-filter-factory-module + model_filter_factory_module = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.model-filter-factory-module"}, + localised_description = {"helmod_map_settings.model-filter-factory-module-desc"}, + default_value = true, + order = "d5" + }, + --model-filter-beacon-module + model_filter_beacon_module = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.model-filter-beacon-module"}, + localised_description = {"helmod_map_settings.model-filter-beacon-module-desc"}, + default_value = true, + order = "d6" + }, + --properties-panel + hidden_panels = { + type = "bool-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.hidden_panels"}, + localised_description = {"helmod_map_settings.hidden_panels-desc"}, + default_value = false, + order = "e1" + }, + --data-col-index + display_hidden_column = { + type = "string-setting", + setting_type = "runtime-global", + localised_name = {"helmod_map_settings.display-hidden-column"}, + localised_description = {"helmod_map_settings.display-hidden-column-desc"}, + default_value = "None", + allowed_values = {"None","Type and Name","All"}, + order = "f2" + } +} + +helmod_flow_style = { + flow = "flow", + horizontal = "helmod_flow_horizontal", + vertical = "helmod_flow_vertical" +} + +helmod_tag = {} +helmod_tag.color = {} +helmod_tag.color.close = "[/color]" +helmod_tag.color.white = "[color=255,255,255]" +helmod_tag.color.gray = "[color=229,229,229]" +helmod_tag.color.yellow = "[color=255,222,61]" +helmod_tag.color.red = "[color=255,0,0]" +helmod_tag.color.red_light = "[color=255,50,50]" +helmod_tag.color.green = "[color=0,127,14]" +helmod_tag.color.green_light = "[color=50,200,50]" +helmod_tag.color.blue = "[color=66,141,255]" +helmod_tag.color.blue_light = "[color=100,200,255]" +helmod_tag.color.gold = "[color=255,230,192]" +helmod_tag.color.orange = "[color=255,106,0]" +helmod_tag.color.black = "[color=0,0,0]" + +helmod_tag.font = {} +helmod_tag.font.close = "[/font]" +helmod_tag.font.default_bold = "[font=default-bold]" +helmod_tag.font.default_semibold = "[font=default-semibold]" +helmod_tag.font.default_large_bold = "[font=default-large-bold]" + +helmod_frame_style = { + default = "helmod_frame_default", + hidden = "helmod_frame_hidden", + panel = "helmod_frame_panel", + cell = "helmod_frame_hidden", + tab = "helmod_frame_tab", + section = "helmod_frame_section" +} + +helmod_rules = {} +helmod_rules["production-crafting"] = {excluded_only=false ,categories={}} +helmod_rules["production-crafting"].categories["standard"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["production-crafting"].categories["crafting-handonly"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["production-crafting"].categories["extraction-machine"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["production-crafting"].categories["energy"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["production-crafting"].categories["technology"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} + +helmod_rules["module-limitation"] = {excluded_only=true ,categories={}} +helmod_rules["module-limitation"].categories["standard"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["module-limitation"].categories["extraction-machine"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} +helmod_rules["module-limitation"].categories["technology"] = {"entity-name", "entity-type", "entity-group", "entity-subgroup"} \ No newline at end of file diff --git a/helmod/core/defines_builded.lua b/helmod/core/defines_builded.lua new file mode 100644 index 00000000..97c716b4 --- /dev/null +++ b/helmod/core/defines_builded.lua @@ -0,0 +1,250 @@ +defines.sprites = {} +defines.sprites.add_table = {} +defines.sprites.add_table.white = "add_table_white" +defines.sprites.add_table.black = "add_table_black" +defines.sprites.arrow_bottom = {} +defines.sprites.arrow_bottom.white = "arrow_bottom_white" +defines.sprites.arrow_bottom.black = "arrow_bottom_black" +defines.sprites.arrow_left = {} +defines.sprites.arrow_left.white = "arrow_left_white" +defines.sprites.arrow_left.black = "arrow_left_black" +defines.sprites.arrow_top = {} +defines.sprites.arrow_top.white = "arrow_top_white" +defines.sprites.arrow_top.black = "arrow_top_black" +defines.sprites.arrow_right = {} +defines.sprites.arrow_right.white = "arrow_right_white" +defines.sprites.arrow_right.black = "arrow_right_black" +defines.sprites.calculator = {} +defines.sprites.calculator.white = "calculator_white" +defines.sprites.calculator.black = "calculator_black" +defines.sprites.check_dot = {} +defines.sprites.check_dot.white = "check_dot_white" +defines.sprites.check_dot.black = "check_dot_black" +defines.sprites.close = {} +defines.sprites.close.white = "close_white" +defines.sprites.close.black = "close_black" +defines.sprites.plugged = {} +defines.sprites.plugged.white = "plugged_white" +defines.sprites.plugged.black = "plugged_black" +defines.sprites.unplugged = {} +defines.sprites.unplugged.white = "unplugged_white" +defines.sprites.unplugged.black = "unplugged_black" +defines.sprites.copy = {} +defines.sprites.copy.white = "copy_white" +defines.sprites.copy.black = "copy_black" +defines.sprites.create = {} +defines.sprites.create.white = "create_white" +defines.sprites.create.black = "create_black" +defines.sprites.download_document = {} +defines.sprites.download_document.white = "download_document_white" +defines.sprites.download_document.black = "download_document_black" +defines.sprites.edit_document = {} +defines.sprites.edit_document.white = "edit_document_white" +defines.sprites.edit_document.black = "edit_document_black" +defines.sprites.education = {} +defines.sprites.education.white = "education_white" +defines.sprites.education.black = "education_black" +defines.sprites.eraser = {} +defines.sprites.eraser.white = "eraser_white" +defines.sprites.eraser.black = "eraser_black" +defines.sprites.event = {} +defines.sprites.event.white = "event_white" +defines.sprites.event.black = "event_black" +defines.sprites.expand_right = {} +defines.sprites.expand_right.white = "expand_right_white" +defines.sprites.expand_right.black = "expand_right_black" +defines.sprites.expand_right_group = {} +defines.sprites.expand_right_group.white = "expand_right_group_white" +defines.sprites.expand_right_group.black = "expand_right_group_black" +defines.sprites.favorite = {} +defines.sprites.favorite.white = "favorite_white" +defines.sprites.favorite.black = "favorite_black" +defines.sprites.filter = {} +defines.sprites.filter.white = "filter_white" +defines.sprites.filter.black = "filter_black" +defines.sprites.gauge_round = {} +defines.sprites.gauge_round.white = "gauge_round_white" +defines.sprites.gauge_round.black = "gauge_round_black" +defines.sprites.graph_left_to_right = {} +defines.sprites.graph_left_to_right.white = "graph_left_to_right_white" +defines.sprites.graph_left_to_right.black = "graph_left_to_right_black" +defines.sprites.graph_top_to_bottom = {} +defines.sprites.graph_top_to_bottom.white = "graph_top_to_bottom_white" +defines.sprites.graph_top_to_bottom.black = "graph_top_to_bottom_black" +defines.sprites.graph_bottom_to_top = {} +defines.sprites.graph_bottom_to_top.white = "graph_bottom_to_top_white" +defines.sprites.graph_bottom_to_top.black = "graph_bottom_to_top_black" +defines.sprites.home = {} +defines.sprites.home.white = "home_white" +defines.sprites.home.black = "home_black" +defines.sprites.lock = {} +defines.sprites.lock.white = "lock_white" +defines.sprites.lock.black = "lock_black" +defines.sprites.pen_four = {} +defines.sprites.pen_four.white = "pen_four_white" +defines.sprites.pen_four.black = "pen_four_black" +defines.sprites.pinned_item = {} +defines.sprites.pinned_item.white = "pinned_item_white" +defines.sprites.pinned_item.black = "pinned_item_black" +defines.sprites.process = {} +defines.sprites.process.white = "process_white" +defines.sprites.process.black = "process_black" +defines.sprites.property = {} +defines.sprites.property.white = "property_white" +defines.sprites.property.black = "property_black" +defines.sprites.push_pin = {} +defines.sprites.push_pin.white = "push_pin_white" +defines.sprites.push_pin.black = "push_pin_black" +defines.sprites.push_pin_unpin = {} +defines.sprites.push_pin_unpin.white = "push_pin_unpin_white" +defines.sprites.push_pin_unpin.black = "push_pin_unpin_black" +defines.sprites.run = {} +defines.sprites.run.white = "run_white" +defines.sprites.run.black = "run_black" +defines.sprites.run_test = {} +defines.sprites.run_test.white = "run_test_white" +defines.sprites.run_test.black = "run_test_black" +defines.sprites.script = {} +defines.sprites.script.white = "script_white" +defines.sprites.script.black = "script_black" +defines.sprites.settings = {} +defines.sprites.settings.white = "settings_white" +defines.sprites.settings.black = "settings_black" +defines.sprites.status_help = {} +defines.sprites.status_help.white = "status_help_white" +defines.sprites.status_help.black = "status_help_black" +defines.sprites.status_information = {} +defines.sprites.status_information.white = "status_information_white" +defines.sprites.status_information.black = "status_information_black" +defines.sprites.time = {} +defines.sprites.time.white = "time_white" +defines.sprites.time.black = "time_black" +defines.sprites.minimize = {} +defines.sprites.minimize.white = "minimize_white" +defines.sprites.minimize.black = "minimize_black" +defines.sprites.maximize = {} +defines.sprites.maximize.white = "maximize_white" +defines.sprites.maximize.black = "maximize_black" +defines.sprites.save = {} +defines.sprites.save.white = "save_white" +defines.sprites.save.black = "save_black" +defines.sprites.refresh = {} +defines.sprites.refresh.white = "refresh_white" +defines.sprites.refresh.black = "refresh_black" +defines.sprites.upload_document = {} +defines.sprites.upload_document.white = "upload_document_white" +defines.sprites.upload_document.black = "upload_document_black" +defines.sprites.paste = {} +defines.sprites.paste.white = "paste_white" +defines.sprites.paste.black = "paste_black" +defines.sprites.factory = {} +defines.sprites.factory.white = "factory_white" +defines.sprites.factory.black = "factory_black" +defines.sprites.transport = {} +defines.sprites.transport.white = "transport_white" +defines.sprites.transport.black = "transport_black" +defines.sprites.database_settings = {} +defines.sprites.database_settings.white = "database_settings_white" +defines.sprites.database_settings.black = "database_settings_black" +defines.sprites.database_schema = {} +defines.sprites.database_schema.white = "database_schema_white" +defines.sprites.database_schema.black = "database_schema_black" +defines.sprites.database_test = {} +defines.sprites.database_test.white = "database_test_white" +defines.sprites.database_test.black = "database_test_black" +defines.sprites.database_method = {} +defines.sprites.database_method.white = "database_method_white" +defines.sprites.database_method.black = "database_method_black" +defines.sprites.text_block = {} +defines.sprites.text_block.white = "text_block_white" +defines.sprites.text_block.black = "text_block_black" +defines.sprites.pause = {} +defines.sprites.pause.white = "pause_white" +defines.sprites.pause.black = "pause_black" +defines.sprites.checkmark = {} +defines.sprites.checkmark.white = "checkmark_white" +defines.sprites.checkmark.black = "checkmark_black" +defines.sprites.column_chart = {} +defines.sprites.column_chart.white = "column_chart_white" +defines.sprites.column_chart.black = "column_chart_black" +defines.sprites.status_ok = {} +defines.sprites.status_ok.white = "status_ok_white" +defines.sprites.status_ok.black = "status_ok_black" +defines.sprites.list_view = {} +defines.sprites.list_view.white = "list_view_white" +defines.sprites.list_view.black = "list_view_black" +defines.sprites.jewel = {} +defines.sprites.jewel.white = "jewel_white" +defines.sprites.jewel.black = "jewel_black" +defines.sprites.beacon = {} +defines.sprites.beacon.white = "beacon_white" +defines.sprites.beacon.black = "beacon_black" +defines.sprites.skull = {} +defines.sprites.skull.white = "skull_white" +defines.sprites.skull.black = "skull_black" +defines.sprites.add = {} +defines.sprites.add.white = "add_white" +defines.sprites.add.black = "add_black" +defines.sprites.remove = {} +defines.sprites.remove.white = "remove_white" +defines.sprites.remove.black = "remove_black" +defines.sprites.steam_heat = {} +defines.sprites.steam_heat.white = "steam_heat_white" +defines.sprites.steam_heat.black = "steam_heat_black" +defines.sprites.search = {} +defines.sprites.search.white = "search_white" +defines.sprites.search.black = "search_black" +defines.sprites.info_arrow_top = {} +defines.sprites.info_arrow_top.red = "info_arrow_top_red" +defines.sprites.info_add = {} +defines.sprites.info_add.red = "info_add_red" +defines.sprites.info_remove = {} +defines.sprites.info_remove.red = "info_remove_red" +defines.sprites.info_fire = {} +defines.sprites.info_fire.blue = "info_fire_blue" +defines.sprites.info_education = {} +defines.sprites.info_education.blue = "info_education_blue" +defines.sprites.info_energy = {} +defines.sprites.info_energy.blue = "info_energy_blue" +defines.sprites.tooltip_edit = {} +defines.sprites.tooltip_edit.yellow = "tooltip_edit_yellow" +defines.sprites.tooltip_add = {} +defines.sprites.tooltip_add.yellow = "tooltip_add_yellow" +defines.sprites.tooltip_remove = {} +defines.sprites.tooltip_remove.yellow = "tooltip_remove_yellow" +defines.sprites.tooltip_favorite = {} +defines.sprites.tooltip_favorite.yellow = "tooltip_favorite_yellow" +defines.sprites.tooltip_expand_right = {} +defines.sprites.tooltip_expand_right.yellow = "tooltip_expand_right_yellow" +defines.sprites.tooltip_expand_right_group = {} +defines.sprites.tooltip_expand_right_group.yellow = "tooltip_expand_right_group_yellow" +defines.sprites.tooltip_erase = {} +defines.sprites.tooltip_erase.yellow = "tooltip_erase_yellow" +defines.sprites.tooltip_pipette = {} +defines.sprites.tooltip_pipette.yellow = "tooltip_pipette_yellow" +defines.sprites.tooltip_information = {} +defines.sprites.tooltip_information.white = "tooltip_information_white" +defines.sprites.hangar = {} +defines.sprites.hangar.white = "hangar_white" +defines.sprites.hangar.black = "hangar_black" +defines.sprites.info_hangar = {} +defines.sprites.info_hangar.white = "info_hangar_white" +defines.sprites.info_settings = {} +defines.sprites.info_settings.blue = "info_settings_blue" +defines.sprites.info_rocket = {} +defines.sprites.info_rocket.blue = "info_rocket_blue" +defines.sprites.expand_left = {} +defines.sprites.expand_left.white = "expand_left_white" +defines.sprites.expand_left.black = "expand_left_black" +defines.sprites.expand_left_group = {} +defines.sprites.expand_left_group.white = "expand_left_group_white" +defines.sprites.expand_left_group.black = "expand_left_group_black" +defines.sprites.two_rows = {} +defines.sprites.two_rows.white = "two_rows_white" +defines.sprites.two_rows.black = "two_rows_black" +defines.sprites.three_rows = {} +defines.sprites.three_rows.white = "three_rows_white" +defines.sprites.three_rows.black = "three_rows_black" +defines.sprites.parameter = {} +defines.sprites.parameter.white = "parameter_white" +defines.sprites.parameter.black = "parameter_black" \ No newline at end of file diff --git a/helmod/core/global.lua b/helmod/core/global.lua new file mode 100644 index 00000000..b478b8de --- /dev/null +++ b/helmod/core/global.lua @@ -0,0 +1,86 @@ +------------------------------------------------------------------------------- +---Use to iterate over a table. +---Returns three values: the `next` function, the table `t`, and nil, +---so that the construction : +--- +--- for k,v in spairs(t) do *body* end +---will iterate over all key-value pairs of table `t`. +--- +--- for k,v in pairs(t, function(t,a,b) return t[b] > t[a] end) do *body* end +---will iterate over all key-value pairs of table `t` with sorting function. +--- +--- for k,v in pairs(t, function(t,a,b) return t[b].level > t[a].level end) do *body* end +---will iterate over all key-value pairs of table `t` with sorting function. +--- +---@param t table --table to traverse. +---@param order function ---sort function. +function spairs(t, order) + ---bypass + if order == nil then return pairs(t) end + ---collect the keys + local keys = {} + for k in pairs(t) do keys[#keys+1] = k end + + ---if order function given, sort by it by passing the table and keys a, b, + ---otherwise just sort the keys + pcall(function() + table.sort(keys, function(a,b) return order(t, a, b) end) + end) + + ---return the iterator function + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], t[keys[i]] + end + end +end + +------------------------------------------------------------------------------- +---Return first element of table +---@param t table +---@return any +function first(t) + for _,v in pairs(t) do + return v + end +end +------------------------------------------------------------------------------- +---formula +---@param operation string +---@return number +function formula(operation) + if operation == nil or operation == "" then return 0 end + local allowed = false + for i=1, string.len(operation) do + if operation:find("^[0-9.()/*%-+%%^ ]+$") == nil then + error({code=1}) -- invalid formula + end + end + return load("return " .. operation)() +end + +------------------------------------------------------------------------------- +---binary to string +---@param x string +---@return number +function toBinStr(x) + local ret="" + while x~=1 and x~=0 do + ret=tostring(x%2)..ret + x=math.modf(x/2) + end + ret=tostring(x)..ret + return ret +end + + +function compare_priority(a,b) + if a == nil or b == nil then return false end + for k,v in pairs(a) do + if b[k] == nil then return false end + if b[k].name ~= v.name or b[k].value ~= v.value then return false end + end + return true +end diff --git a/helmod/core/logging.lua b/helmod/core/logging.lua new file mode 100644 index 00000000..803ed36d --- /dev/null +++ b/helmod/core/logging.lua @@ -0,0 +1,169 @@ +Logging = {} + +local append_log=false +local debug_level = 0 +local debug_filter = "all" +local global_profiler = nil +local profiler = nil + +function Logging:new() + self.limit = 5 + self.filename="helmod\\helmod.log" + self.logClass = {} + self.debug_values = {none=0,error=1,warn=2,info=3,debug=4,trace=5} + self:updateLevel() + self.profiler = false +end + +function Logging:profilerStart() + if self.profiler == false then return end + if global_profiler == nil then global_profiler = game.create_profiler() end + global_profiler.reset() + log({"", "[PROFILER]", " | ", "GLOBAL", " | ", "*** Profiler begin ***", " | ", global_profiler}) +end + +function Logging:profilerStep(name, ...) + if self.profiler == false then return end + if profiler == nil then profiler = {} end + if profiler[name] == nil then profiler[name] = game.create_profiler() end + local message = {...} + log({"", "[PROFILER]", " | ", name, " | ", table.concat({...}," "), " | ", profiler[name]}) + profiler[name].reset() +end + +function Logging:profilerStop() + if self.profiler == false then return end + if profiler ~= nil then + log({"", "[PROFILER]", " | ", "GLOBAL", " | ", "*** Profiler end ***", " | ", global_profiler}) + log({"", "----------------------------------------------------------------------------------"}) + global_profiler.stop() + global_profiler = nil + for _,profiler_step in pairs(profiler or {}) do + profiler_step.stop() + end + profiler = nil + end +end + +function Logging:checkClass(logClass) + if debug_filter == "all" or debug_filter == logClass then return true end + return false +end + +function Logging:updateLevel() + local level = "none" + if settings ~= nil and settings.global["helmod_debug"] then + level = settings.global["helmod_debug"].value + end + debug_level = self.debug_values[level] or 0 + + if settings ~= nil and settings.global["helmod_debug_filter"] then + debug_filter = settings.global["helmod_debug_filter"].value + end +end + +function Logging:trace(...) + if self.debug_values.trace > debug_level then return end + local arg = {...} + self:logging("[TRACE]", self.debug_values.trace, unpack(arg)) +end + +function Logging:debug(...) + if self.debug_values.debug > debug_level then return end + local arg = {...} + self:logging("[DEBUG]", self.debug_values.debug, unpack(arg)) +end + +function Logging:info(...) + if self.debug_values.info > debug_level then return end + local arg = {...} + self:logging("[INFO]", self.debug_values.info, unpack(arg)) +end + +function Logging:warn(...) + if self.debug_values.warn > debug_level then return end + local arg = {...} + self:logging("[WARN ]", self.debug_values.warn, unpack(arg)) +end + +function Logging:error(...) + if self.debug_values.error > debug_level then return end + local arg = {...} + self:logging("[ERROR]", self.debug_values.error, unpack(arg)) +end + +function Logging:line(...) + if self.debug_values.debug > debug_level then return end + local arg = {...} + self:previousCall("[DEBUG]", unpack(arg)) +end + +function Logging:objectToString(object, level) + if level == nil then level = 0 end + local message = "" + if type(object) == "nil" then + message = message.." nil" + elseif type(object) == "boolean" then + if object then message = message.." true" + else message = message.." false" end + elseif type(object) == "number" then + message = message.." "..object + elseif type(object) == "string" then + message = message.."\""..object.."\"" + elseif type(object) == "function" then + message = message.."\"__function\"" + elseif object.isluaobject then + if object.valid then + local lua_type = object.object_name + if lua_type == "LuaCustomTable" then + local custom_table = {} + for _, element in pairs(object) do + table.insert(custom_table, element) + end + return self:objectToString(custom_table, level) + elseif string.find(lua_type, "Lua") then + local object_name = "unknown" + pcall(function() object_name = object.name end) + message = message..string.format("{\"type\":%q,\"name\":%q}", lua_type, object_name or "nil") + else + message = message..string.format("{\"type\":%q,\"name\":%q}", object.type or "nil", object.name or "nil") + end + else + message = message.."invalid object" + end + elseif type(object) == "table" then + if level <= self.limit then + local first = true + message = message.."{" + for key, nextObject in pairs(object) do + if not first then message = message.."," end + message = message.."\""..key.."\""..":"..self:objectToString(nextObject, level + 1); + first = false + end + message = message.."}" + else + message = message.."\"".."__table".."\"" + end + end + return string.gsub(message,"\n","") +end + +function Logging:logging(tag, level, logClass, ...) + local arg = {...} + if arg == nil then arg = "nil" end + if self:checkClass(logClass) then + local message = ""; + for key, object in pairs(arg) do + message = message..self:objectToString(object) + end + local debug_info = debug.getinfo(3) + log(string.format("%s|%s|%s:%s|%s", tag, logClass, string.match(debug_info.source,"[^/]*$"), debug_info.currentline, message)) + if append_log == false then append_log = true end + end +end + + +function Logging:previousCall(tag, logClass, back) + local debug_info = debug.getinfo(back+2) + log(string.format("%s|%s|%s:%s", tag, logClass, string.match(debug_info.source,"[^/]*$"), debug_info.currentline)) +end diff --git a/helmod/core/tableExtends.lua b/helmod/core/tableExtends.lua new file mode 100644 index 00000000..fbc75c2b --- /dev/null +++ b/helmod/core/tableExtends.lua @@ -0,0 +1,139 @@ +------------------------------------------------------------------------------- +---Clone simple table +---@param org table +---@return table +function table.clone(org) + return {table.unpack(org)} +end + +------------------------------------------------------------------------------- +---Check Table Contains +---@param object table +---@param value any +---@return boolean +function table.contains(object, value) + for _,compare in pairs(object) do + if compare == value then return true end + end + return false +end + +------------------------------------------------------------------------------- +---Deep Copy of table +---@param object table +---@return table +function table.deepcopy(object) + local lookup_table = {} + local function _copy(object) + if type(object) ~= "table" then + return object + ---don't copy factorio rich objects + elseif object.__self then + return object + elseif lookup_table[object] then + return lookup_table[object] + end + local new_table = {} + lookup_table[object] = new_table + for index, value in pairs(object) do + new_table[_copy(index)] = _copy(value) + end + return setmetatable(new_table, getmetatable(object)) + end + return _copy(object) +end +------------------------------------------------------------------------------- +---Reindex list +---@param list table +function table.reindex_list(list) + local index = 0 + for _,element in spairs(list,function(t,a,b) return t[b].index > t[a].index end) do + element.index = index + index = index + 1 + end +end + +------------------------------------------------------------------------------- +---Up in the list +---@param list table -- element of table must be index field +---@param index number +---@param step number +function table.up_indexed_list(list, index, step) + if list ~= nil and index > 0 then + ---defaut step + if step == nil then step = 1 end + ---cap le step + if step > index then step = index end + for _,element in pairs(list) do + if element.index == index then + ---change l'index de l'element cible + element.index = element.index - step + elseif element.index >= index - step and element.index <= index then + ---change les index compris entre index et index -step + element.index = element.index + 1 + end + end + end + end + +------------------------------------------------------------------------------- +---Down in the list +---@param list table -- element of table must be index field +---@param index number +---@param step number +function table.down_indexed_list(list, index, step) + local list_count = table.size(list) + if list ~= nil and index + 1 < table.size(list) then + ---defaut step + if step == nil then step = 1 end + ---cap le step + if step > (list_count - index) then step = list_count - index - 1 end + for _,element in pairs(list) do + if element.index == index then + ---change l'index de l'element cible + element.index = element.index + step + elseif element.index > index and element.index <= index + step then + ---change les index compris entre index et la fin + element.index = element.index - 1 + end + end + end +end + +------------------------------------------------------------------------------- +---Get table size +---@param list table +---@return number +function table.size(list) + if list == nil then return 0 end + return table_size(list) +end + +------------------------------------------------------------------------------- +---Convert info table with type for element +---@param list table +---@return table +function table.data_help(list) + local result = {} + return result +end + +------------------------------------------------------------------------------- +---Convert info table with type for element +---@param list table +---@return table +function table.data_info(list) + if type(list) == 'table' and type(list.__self) == 'userdata' and list.object_name then + local result = {} + for k, v in pairs(table.data_help(list)) do + list[k] = {value=v,type=type(v)} + end + return result + elseif type(list) == 'table' then + local result = {} + for k, v in pairs(list) do + result[k] = {value=v,type=type(v)} + end + return result + end +end \ No newline at end of file diff --git a/helmod/data.lua b/helmod/data.lua new file mode 100644 index 00000000..6c6c56b8 --- /dev/null +++ b/helmod/data.lua @@ -0,0 +1,7 @@ +require("core.defines") +require("prototypes.fonts") +require("prototypes.style") +require("prototypes.hotkey") +require("prototypes.sprites") +require("prototypes.shortcut") +require("prototypes.groups") diff --git a/helmod/data/Cache.lua b/helmod/data/Cache.lua new file mode 100644 index 00000000..b66b569d --- /dev/null +++ b/helmod/data/Cache.lua @@ -0,0 +1,82 @@ +------------------------------------------------------------------------------- +---@class Cache +local Cache = { + ---single-line comment + classname = "HMCache" +} + +------------------------------------------------------------------------------- +---Return Cache +---@return table +function Cache.get() + if global.caches == nil then global.caches = {} end + return global.caches +end + +------------------------------------------------------------------------------- +---Return data Cache +---@param classname string +---@param name string +---@return any +function Cache.getData(classname, name) + local data = Cache.get() + if classname == nil and name == nil then return data end + if data[classname] == nil or data[classname][name] == nil then return nil end + return data[classname][name] +end + +------------------------------------------------------------------------------- +---Set data Cache +---@param classname string +---@param name string +---@param value any +---@return any +function Cache.setData(classname, name, value) + local data = Cache.get() + if data[classname] == nil then data[classname] = {} end + data[classname][name] = value +end + +------------------------------------------------------------------------------- +---Has data +---@param classname string +---@param name string +---@return boolean +function Cache.hasData(classname, name) + local data = Cache.get() + return data[classname] ~= nil and data[classname][name] ~= nil +end + +------------------------------------------------------------------------------- +---Is empty +---@param classname string +---@param name string +---@return boolean +function Cache.isEmpty(classname, name) + local data = Cache.get() + if data[classname] ~= nil and data[classname][name] ~= nil then + if type(data[classname][name]) == "string" then + return data[classname][name] == "" + else + return table.size(data[classname][name]) == 0 + end + end + return true +end + +------------------------------------------------------------------------------- +---Reset data +---@param classname string +---@param name string +function Cache.reset(classname, name) + local data = Cache.get() + if classname == nil and name == nil then + global.caches = {} + elseif data[classname] ~= nil and name == nil then + data[classname] = nil + elseif data[classname] ~= nil then + data[classname][name] = nil + end +end + +return Cache diff --git a/helmod/data/Model.lua b/helmod/data/Model.lua new file mode 100644 index 00000000..1e20da00 --- /dev/null +++ b/helmod/data/Model.lua @@ -0,0 +1,615 @@ +------------------------------------------------------------------------------ +---Description of the module. +---@class Model +local Model = { + ---single-line comment + classname = "HMModel", + version = "0.9.35", + beacon_combo = 4, + beacon_factory = 0.5, + beacon_factory_constant = 3 +} + +------------------------------------------------------------------------------- +---Get models +---@param bypass boolean +---@return table +function Model.getModels(bypass) + local display_all_sheet = User.getModGlobalSetting("display_all_sheet") + local first_id = nil + local models = {} + if Model.countModel() > 0 then + for _,model in pairs(global.models) do + if Player.isAdmin() and ( display_all_sheet or model.owner == "admin" or bypass ) then + models[model.id] = model + if first_id == nil then first_id = model.id end + elseif model.owner == Player.native().name or (model.share ~= nil and model.share > 0) then + models[model.id] = model + if first_id == nil then first_id = model.id end + end + end + end + return models +end + +------------------------------------------------------------------------------- +---Get models +---@param bypass boolean +---@return table +function Model.getModelsByOwner(bypass) + local models = Model.getModels(bypass) + local models_by_owner = {} + for _, model in pairs(models) do + if models_by_owner[model.owner] == nil then models_by_owner[model.owner] = {} end + table.insert(models_by_owner[model.owner], model) + end + return models_by_owner +end + +------------------------------------------------------------------------------- +---Get models +---@return table +function Model.getModelsOwner() + local models = Model.getModels() + local models_owner = {} + for _, model in pairs(models) do + if model.owner == Player.native().name then + table.insert(models_owner, model) + end + end + return models_owner +end + +------------------------------------------------------------------------------- +---Get block order +---@param block table +---@return table +function Model.getBlockOrder(block) + local order = {"products", "ingredients"} + if block.by_product == false then order = {"ingredients", "products"} end + return order +end + +------------------------------------------------------------------------------- +---Get rules +---@return table +function Model.getRules() + if global.rules == nil then + Model.resetRules() + end + return global.rules +end + +------------------------------------------------------------------------------- +---Reset rules +function Model.resetRules() + global.rules = {} + table.insert(global.rules, {index=0, mod="base", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="extraction-machine", excluded = false}) + table.insert(global.rules, {index=1, mod="base", name="production-crafting", category="extraction-machine", type="entity-type", value="mining-drill", excluded = false}) + table.insert(global.rules, {index=2, mod="base", name="production-crafting", category="energy", type="entity-subgroup", value="energy", excluded = false}) + table.insert(global.rules, {index=3, mod="base", name="production-crafting", category="technology", type="entity-type", value="lab", excluded = false}) + table.insert(global.rules, {index=4, mod="base", name="module-limitation", category="extraction-machine", type="entity-type", value="mining-drill", excluded = true}) + table.insert(global.rules, {index=5, mod="base", name="module-limitation", category="technology", type="entity-type", value="lab", excluded = true}) + table.insert(global.rules, {index=6, mod="ShinyIcons", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="shinyminer1", excluded = false}) + table.insert(global.rules, {index=7, mod="ShinyIcons", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="shinyminer2", excluded = false}) + table.insert(global.rules, {index=8, mod="DyWorld", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="dyworld-extraction-burner", excluded = false}) + table.insert(global.rules, {index=9, mod="DyWorld", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="dyworld-drills-electric", excluded = false}) + table.insert(global.rules, {index=10, mod="DyWorld", name="production-crafting", category="extraction-machine", type="entity-subgroup", value="dyworld-drills-burner", excluded = false}) + table.insert(global.rules, {index=11, mod="DyWorld", name="production-crafting", category="standard", type="entity-name", value="assembling-machine-1", excluded = true}) + table.insert(global.rules, {index=12, mod="DyWorld", name="production-crafting", category="standard", type="entity-name", value="assembling-machine-2", excluded = true}) + table.insert(global.rules, {index=13, mod="DyWorld", name="production-crafting", category="standard", type="entity-name", value="assembling-machine-3", excluded = true}) + table.insert(global.rules, {index=14, mod="DyWorld", name="production-crafting", category="extraction-machine", type="entity-group", value="production", excluded = true}) + table.insert(global.rules, {index=15, mod="Transport_Drones", name="production-crafting", category="standard", type="entity-name", value="supply-depot", excluded = true}) + table.insert(global.rules, {index=16, mod="Transport_Drones", name="production-crafting", category="standard", type="entity-name", value="request-depot", excluded = true}) + table.insert(global.rules, {index=17, mod="Transport_Drones", name="production-crafting", category="standard", type="entity-name", value="buffer-depot", excluded = true}) +end + + +---Return effects on a table +---@return ModuleEffectsData +function Model.newEffects() + return { speed = 0, productivity = 0, consumption = 0, pollution = 0 } +end + +------------------------------------------------------------------------------- +---Get and initialize the model +---@return table +function Model.newModel() + if global.model_id == nil then global.model_id = 1 end + if global.models == nil then global.models = {} end + local owner = Player.native().name + if owner == nil or owner == "" then owner = "admin" end + global.model_id = global.model_id + 1 + local model = {} + model.id = "model_"..global.model_id + model.owner = owner + model.blocks = {} + model.ingredients = {} + model.resources = {} + model.time = 1 + model.version = Model.version + model.index = table.size(global.models) + Model.appendParameters(model) + global.models[model.id] = model + return model +end + +---Append parameters +---@param model ModelData +function Model.appendParameters(model) + if model ~= nil then + if model.parameters == nil then + model.parameters = {} + end + if model.parameters.effects == nil then + model.parameters.effects = Model.newEffects() + end + end +end + +------------------------------------------------------------------------------- +---Get model +---@return table +function Model.getModelById(model_id) + if model_id ~= nil and global.models ~= nil then + return global.models[model_id] + end +end + +------------------------------------------------------------------------------- +---Get parameter objects +---@param parameter table --{name=parameter.name, model=model.id, block=block.id, recipe=recipe.id} +---@return ModelData, BlockData, RecipeData +function Model.getParameterObjects(parameter) + if parameter ~= nil then + if global.models == nil then + ---initialisation + global.models = {} + local model = Model.newModel() + User.setParameter(parameter.name, {name=parameter.name, model=model.id}) + return model + end + if parameter.model ~= nil and global.models[parameter.model] ~= nil then + local model = global.models[parameter.model] + local block, recipe + if model ~= nil and parameter.block ~= nil and model.blocks ~= nil then + block = model.blocks[parameter.block] + if block ~= nil and parameter.recipe ~= nil and block.recipes ~= nil then + recipe = block.recipes[parameter.recipe] + end + end + return model, block, recipe + else + ---initialisation parameter + local model = Model.getLastModel() + if model == nil then model = Model.newModel() end + User.setParameter(parameter.name, {name=parameter.name, model=model.id}) + return model + end + end +end + +------------------------------------------------------------------------------- +---Get last model +---@return table +function Model.getLastModel() + local last_model = nil + local models = Model.getModels() + for _,model in pairs(models) do + last_model = model + end + return last_model +end + +------------------------------------------------------------------------------- +---Create model Production Block +---@param model table +---@param recipe table +---@return table +function Model.newBlock(model, recipe) + if model.block_id == nil then model.block_id = 0 end + model.block_id = model.block_id + 1 + + local inputModel = {} + inputModel.id = "block_"..model.block_id + inputModel.name = recipe.name + inputModel.owner = Player.native().name + inputModel.count = 1 + inputModel.power = 0 + inputModel.ingredients = {} + inputModel.products = {} + inputModel.recipes = {} + + return inputModel +end + +------------------------------------------------------------------------------- +---Create model Beacon +---@param name string +---@param count number +---@return table +function Model.newBeacon(name, count) + local beaconModel = {} + beaconModel.name = name or "beacon" + beaconModel.type = "entity" + beaconModel.count = count or 0 + beaconModel.energy = 0 + beaconModel.combo = User.getPreferenceSetting("beacon_affecting_one") + beaconModel.per_factory = User.getPreferenceSetting("beacon_by_factory") + beaconModel.per_factory_constant = User.getPreferenceSetting("beacon_constant") + ---limit infini = 0 + beaconModel.limit = 0 + ---modules + beaconModel.modules = {} + return beaconModel +end + +------------------------------------------------------------------------------- +---Create model Factory +---@param name string +---@param count number +---@return table +function Model.newFactory(name, count) + local factoryModel = {} + factoryModel.name = name or "assembling-machine-1" + factoryModel.type = "entity" + factoryModel.count = count or 0 + factoryModel.energy = 0 + factoryModel.speed = 0 + ---limit infini = 0 + factoryModel.limit = 0 + ---modules + factoryModel.modules = {} + return factoryModel +end + +------------------------------------------------------------------------------- +---Create model Ingredient +---@param name string +---@param type string +---@param count number +---@return table +function Model.newIngredient(name, type, count) + if count == nil then count = 0 end + + local ingredientModel = {} + ingredientModel.index = 1 + ingredientModel.name = name + ingredientModel.type = type + ingredientModel.count = count + + return ingredientModel +end + +------------------------------------------------------------------------------- +---Create model Rule +---@param mod string +---@param name string +---@param category string +---@param type string +---@param value string +---@param excluded boolean +---@param index number +---@return Table +function Model.newRule(mod, name, category, type, value, excluded, index) + local rule_model = {} + rule_model.mod = mod + rule_model.name = name + rule_model.category = category + rule_model.type = type + rule_model.value = value + rule_model.excluded = excluded + rule_model.index = index + return rule_model +end + +------------------------------------------------------------------------------- +---Count modules model +---@param element table +---@return number +function Model.countModulesModel(element) + local count = 0 + if element ~= nil and element.modules ~= nil then + for _, value in pairs(element.modules) do + count = count + value + end + end + return count +end + +------------------------------------------------------------------------------- +---Create model Recipe +---@param model table +---@param name string +---@param type string +---@return table +function Model.newRecipe(model, name, type) + if model.recipe_id == nil then model.recipe_id = 0 end + model.recipe_id = model.recipe_id + 1 + + local recipeModel = {} + recipeModel.id = "R"..model.recipe_id + recipeModel.index = 1 + recipeModel.name = name + recipeModel.type = type or "recipe" + recipeModel.count = 0 + recipeModel.production = 1 + recipeModel.factory = Model.newFactory() + recipeModel.beacons = {} + table.insert(recipeModel.beacons, Model.newBeacon()) + + return recipeModel +end + +------------------------------------------------------------------------------- +---Create model Resource +---@param model table +---@param name string +---@param type string +---@param count number +---@return table +function Model.newResource(model, name, type, count) + if model.resource_id == nil then model.resource_id = 0 end + model.resource_id = model.resource_id + 1 + + if count == nil then count = 1 end + + local resourceModel = {} + resourceModel.id = model.resource_id + resourceModel.index = 1 + resourceModel.type = type + resourceModel.name = name + resourceModel.count = count + + return resourceModel +end + +------------------------------------------------------------------------------- +---Count in list +---@return number +function Model.countModel() + return table.size(global.models) +end + +------------------------------------------------------------------------------- +---Set the beacon +---@param recipe table +---@param name string +---@param combo number +---@param per_factory number +---@param per_factory_constant number +---@return BeaconData +function Model.addBeacon(recipe, name, combo, per_factory, per_factory_constant) + if recipe ~= nil then + local beacon_prototype = EntityPrototype(name) + if beacon_prototype:native() ~= nil then + local beacon = Model.newBeacon(name, 0) + beacon.combo = combo or User.getPreferenceSetting("beacon_affecting_one") + beacon.per_factory = per_factory or User.getPreferenceSetting("beacon_by_factory") + beacon.per_factory_constant = per_factory_constant or User.getPreferenceSetting("beacon_constant") + if recipe.beacons == nil then recipe.beacons = {} end + table.insert(recipe.beacons, beacon) + return beacon + end + end +end + +------------------------------------------------------------------------------- +---Set the beacon +---@param recipe table +---@param index number +---@param name string +---@param combo number +---@param per_factory number +---@param per_factory_constant number +function Model.setBeacon(recipe, index, name, combo, per_factory, per_factory_constant) + if recipe ~= nil and recipe.beacons ~= nil then + local beacon_prototype = EntityPrototype(name) + if beacon_prototype:native() ~= nil then + local beacon = {} + local beacon = Model.newBeacon(name, 0) + beacon.combo = combo or User.getPreferenceSetting("beacon_affecting_one") + beacon.per_factory = per_factory or User.getPreferenceSetting("beacon_by_factory") + beacon.per_factory_constant = per_factory_constant or User.getPreferenceSetting("beacon_constant") + if recipe.beacons[index] ~= nil then + recipe.beacons[index] = beacon + end + end + end +end + +------------------------------------------------------------------------------- +---Set a factory +---@param recipe table +---@param factory_name string +---@param factory_fuel table +function Model.setFactory(recipe, factory_name, factory_fuel) + if recipe ~= nil then + local factory_prototype = EntityPrototype(factory_name) + if factory_prototype:native() ~= nil then + recipe.factory.name = factory_name + recipe.factory.fuel = factory_fuel + if Model.countModulesModel(recipe.factory) >= factory_prototype:getModuleInventorySize() then + recipe.factory.modules = {} + end + end + end +end + +------------------------------------------------------------------------------- +---Return first recipe of block +---@param recipes table +---@return table +function Model.firstRecipe(recipes) + for _, recipe in spairs(recipes,function(t,a,b) return t[b].index > t[a].index end) do + return recipe + end +end + +------------------------------------------------------------------------------- +---Return last recipe of block +---@param recipes table +---@return table +function Model.lastRecipe(recipes) + for _, recipe in spairs(recipes,function(t,a,b) return t[b].index < t[a].index end) do + return recipe + end +end + +------------------------------------------------------------------------------- +---Get and initialize the default +---@return table +function Model.getDefault() + local default = User.get("default") + if default.recipes == nil then default.recipes = {} end + return default +end + +------------------------------------------------------------------------------- +---Get the default recipe +---@param key string --recipe name +---@return table +function Model.getDefaultRecipe(key) + local default = Model.getDefault() + if default.recipes[key] == nil then + default.recipes[key] = { + name = key, + factory = nil, + beacon = nil + } + end + return default.recipes[key] +end + +------------------------------------------------------------------------------- +---Get speed of the factory +---@param key string --factory name +---@return number +function Model.getSpeedFactory(key) + local entity_prototype = EntityPrototype(key) + local crafting_speed = entity_prototype:getCraftingSpeed() + if crafting_speed ~= 0 then return crafting_speed end + local mining_speed = entity_prototype:getMiningSpeed() + if mining_speed ~= 0 then return mining_speed end + return 1 +end + +------------------------------------------------------------------------------- +---Get the factory of prototype +---@param recipe_prototype table +---@return string +function Model.getDefaultPrototypeFactory(recipe_prototype) + local category = recipe_prototype:getCategory() + if category ~= nil then + local factories = {} + if recipe_prototype:getType() == "boiler" then + factories = Player.getBoilersForRecipe(recipe_prototype) + elseif recipe_prototype:getType() == "fluid" then + factories = Player.getProductionsCrafting("fluid", recipe_prototype:native()) + else + factories = Player.getProductionsCrafting(category, recipe_prototype:native()) + end + local default_factory_level = User.getPreferenceSetting("default_factory_level") + local factory_level = 1 + if default_factory_level == "fast" then + factory_level = 100 + else + factory_level = tonumber(default_factory_level) + end + local level = 1 + local lua_factory = nil + local last_factory = nil + for _, factory in spairs(factories, function(t,a,b) return Model.getSpeedFactory(t[b].name) > Model.getSpeedFactory(t[a].name) end) do + if level == factory_level then lua_factory = factory end + last_factory = factory + level = level + 1 + end + if lua_factory ~= nil then return lua_factory.name end + if last_factory ~= nil then return last_factory.name end + end + return nil +end + +------------------------------------------------------------------------------- +---Get the beacon of recipe +---@param key string --recipe name +---@return string +function Model.getDefaultRecipeBeacon(key) + local default = Model.getDefault() + if default.recipes[key] == nil then + return nil + end + return default.recipes[key].beacon +end + +---Check if factory has module +---@param factory FactoryData +---@return boolean +function Model.factoryHasModule(factory) + if factory == nil then return false end + if factory.modules == nil then return false end + if factory.modules ~= nil and #factory.modules then return false end + return true +end + +---Compare module priorities +---@param module_priorities1 {[uint] : ModulePriorityData} +---@param module_priorities2 {[uint] : ModulePriorityData} +function Model.compareModulePriorities(module_priorities1, module_priorities2) + if module_priorities1 == nil or module_priorities2 == nil then return false end + if #module_priorities1 ~= #module_priorities2 then return false end + for i = 1, #module_priorities1, 1 do + local module_priority1 = module_priorities1[i] + local module_priority2 = module_priorities2[i] + if module_priority1.name ~= module_priority2.name then return false end + if module_priority1.value ~= module_priority2.value then return false end + end + return true +end + +---Compare 2 factories +---@param factory1 FactoryData +---@param factory2 FactoryData +---@param with_priority boolean +---@return boolean +function Model.compareFactory(factory1, factory2, with_priority) + if factory1 == nil or factory2 == nil then return false end + if factory1.name ~= factory2.name then return false end + if factory1.fuel ~= factory2.fuel then return false end + if with_priority and Model.compareModulePriorities(factory1.module_priority, factory2.module_priority) == false then return false end + return true +end + +---Compare 2 factories +---@param beacon1 BeaconData +---@param beacon2 BeaconData +---@param with_priority boolean +---@return boolean +function Model.compareBeacon(beacon1, beacon2, with_priority) + if beacon1 == nil or beacon2 == nil then return false end + if beacon1.name ~= beacon2.name then return false end + if beacon1.fuel ~= beacon2.fuel then return false end + if beacon1.combo ~= beacon2.combo then return false end + if beacon1.per_factory ~= beacon2.per_factory then return false end + if beacon1.per_factory_constant ~= beacon2.per_factory_constant then return false end + if with_priority and Model.compareModulePriorities(beacon1.module_priority, beacon2.module_priority) == false then return false end + return true +end + +---Compare 2 factories +---@param beacons1 {[uint] : BeaconData} +---@param beacons2 {[uint] : BeaconData} +---@return boolean +function Model.compareBeacons(beacons1, beacons2) + if beacons1 == nil or beacons2 == nil then return false end + if #beacons1 ~= #beacons2 then return false end + for i = 1, #beacons1, 1 do + local beacon1 = beacons1[i] + local beacon2 = beacons2[i] + local with_priority = Model.factoryHasModule(beacon1) or Model.factoryHasModule(beacon2) + if Model.compareBeacon(beacon1, beacon2, with_priority) == false then return false end + end + return true +end + +return Model diff --git a/helmod/data/ModelBuilder.lua b/helmod/data/ModelBuilder.lua new file mode 100644 index 00000000..290d3b74 --- /dev/null +++ b/helmod/data/ModelBuilder.lua @@ -0,0 +1,1058 @@ +------------------------------------------------------------------------------ +---Description of the module. +---@class ModelBuilder +local ModelBuilder = { + ---single-line comment + classname = "HMModelBuilder" +} + +------------------------------------------------------------------------------- +---Add a recipe into production block +---@param model table +---@param block table +---@param recipe_name string +---@param recipe_type string +---@param index number +---@return table, table +function ModelBuilder.addRecipeIntoProductionBlock(model, block, recipe_name, recipe_type, index) + local recipe_prototype = RecipePrototype(recipe_name, recipe_type) + local lua_recipe = recipe_prototype:native() + + if lua_recipe ~= nil then + local block_types = true + ---ajoute le bloc si il n'existe pas + if block == nil then + local modelBlock = Model.newBlock(model, lua_recipe) + local block_index = table.size(model.blocks) + modelBlock.index = block_index + modelBlock.unlinked = false + block = modelBlock + model.blocks[modelBlock.id] = modelBlock + ---check si le block est independant + ModelCompute.checkUnlinkedBlock(model, modelBlock) + block_types = false + end + + ---ajoute le recipe si il n'existe pas + local ModelRecipe = Model.newRecipe(model, lua_recipe.name, recipe_type) + local icon_name, icon_type = recipe_prototype:getIcon() + if not (block_types) then + block.type = icon_type + end + if index == nil then + local recipe_index = table.size(block.recipes) + ModelRecipe.index = recipe_index + else + ModelRecipe.index = index + for _, recipe in pairs(block.recipes) do + if recipe.index >= index then + recipe.index = recipe.index + 1 + end + end + end + if ModelRecipe.index == 0 then + ---change block name + block.name = icon_name + block.type = icon_type + end + ModelRecipe.count = 1 + + if recipe_type ~= "energy" then + local default_factory = User.getDefaultFactory(ModelRecipe) + if default_factory ~= nil then + Model.setFactory(ModelRecipe, default_factory.name, default_factory.fuel) + ModelBuilder.setFactoryModulePriority(ModelRecipe, default_factory.module_priority) + else + local default_factory_name = Model.getDefaultPrototypeFactory(recipe_prototype) + if default_factory_name ~= nil then + Model.setFactory(ModelRecipe, default_factory_name) + end + end + + local default_beacons = User.getDefaultBeacons(ModelRecipe) + if default_beacons ~= nil then + for _, default_beacon in pairs(default_beacons) do + local beacon = Model.addBeacon(ModelRecipe, default_beacon.name, default_beacon.combo, default_beacon.per_factory, default_beacon.per_factory_constant) + ModelBuilder.setBeaconModulePriority(beacon, ModelRecipe, default_beacon.module_priority) + end + end + else + Model.setFactory(ModelRecipe, recipe_name) + end + + local recipe_products + local recipe_ingredients + local block_products + local block_ingredients + + if block.by_product == false then + recipe_products = recipe_prototype:getIngredients(ModelRecipe.factory) + recipe_ingredients = recipe_prototype:getProducts() + block_products = block.ingredients + block_ingredients = block.products + else + recipe_products = recipe_prototype:getProducts() + recipe_ingredients = recipe_prototype:getIngredients(ModelRecipe.factory) + block_products = block.products + block_ingredients = block.ingredients + end + + ---ajoute les produits du block + for _, lua_product in pairs(recipe_products) do + local product = Product(lua_product):clone() + local element_key = Product(lua_product):getTableKey() + if block_products[element_key] == nil then + if block_ingredients[element_key] ~= nil then + product.state = 2 + else + product.state = 1 + end + block_products[element_key] = product + end + end + + ---ajoute les ingredients du block + for _, lua_ingredient in pairs(recipe_ingredients) do + local ingredient = Product(lua_ingredient):clone() + local element_key = Product(lua_ingredient):getTableKey() + if block_ingredients[element_key] == nil then + block_ingredients[element_key] = ingredient + if block_products[element_key] ~= nil and block_products[element_key].state == 1 then + block_products[element_key].state = 2 + end + end + end + block.recipes[ModelRecipe.id] = ModelRecipe + + return block, ModelRecipe + end +end + +------------------------------------------------------------------------------- +---Remove a model +---@param model table +---@param block table +---@param recipe table +---@param with_below boolean +function ModelBuilder.convertRecipeToblock(model, block, recipe, with_below) + local new_block = Model.newBlock(model, recipe) + local block_index = table.size(model.blocks) + new_block.index = block_index + new_block.type = block.type + new_block.unlinked = block.by_factory and true or false + new_block.by_factory = block.by_factory + new_block.by_product = block.by_product + new_block.by_limit = block.by_limit + model.blocks[new_block.id] = new_block + + local sorter = function(t, a, b) return t[b]["index"] > t[a]["index"] end + if block.by_product == false then sorter = function(t, a, b) return t[b]["index"] < t[a]["index"] end end + local start_index = recipe.index + for _, block_recipe in spairs(block.recipes, sorter) do + if + (block_recipe.index == start_index) + or ((block.by_product == false) == (block_recipe.index < start_index)) + then + ---clean block + block.recipes[block_recipe.id] = nil + ---add recipe + block_recipe.index = table.size(new_block.recipes) + new_block.recipes[block_recipe.id] = block_recipe + + if with_below ~= true then + break + end + end + end + local block_products, block_ingredients = ModelCompute.prepareBlock(new_block) + new_block.products = block_products + new_block.ingredients = block_ingredients + ---check si le block est independant + ModelCompute.checkUnlinkedBlock(model, new_block) +end + +------------------------------------------------------------------------------- +---Remove a model +---@param model_id string +function ModelBuilder.removeModel(model_id) + global.models[model_id] = nil +end + +------------------------------------------------------------------------------- +---Update recipe production +---@param recipe table +---@param production number +function ModelBuilder.updateRecipeProduction(recipe, production) + if recipe ~= nil then + recipe.production = production + end +end + +------------------------------------------------------------------------------- +---Update a factory number +---@param recipe table +---@param value any +function ModelBuilder.updateFactoryNumber(recipe, value) + if recipe ~= nil then + if value == 0 then + recipe.factory.input = nil + else + recipe.factory.input = value + end + end +end + +------------------------------------------------------------------------------- +---Update a factory limit +---@param recipe table +---@param value any +function ModelBuilder.updateFactoryLimit(recipe, value) + if recipe ~= nil then + if value == 0 then + recipe.factory.limit = nil + else + recipe.factory.limit = value + end + end +end + +------------------------------------------------------------------------------- +---Update block matrix solver +---@param block table +---@param value any +function ModelBuilder.updateBlockMatrixSolver(block, value) + if block ~= nil then + block.solver = value + end +end + +------------------------------------------------------------------------------- +---Update recipe matrix solver +---@param block table +---@param recipe table +function ModelBuilder.updateMatrixSolver(block, recipe) + if block ~= nil then + local recipes = block.recipes + local sorter = function(t, a, b) return t[b].index > t[a].index end + if block.by_product == false then + sorter = function(t, a, b) return t[b].index < t[a].index end + end + local apply = false + local matrix_solver = 0 + for _, current_recipe in spairs(recipes, sorter) do + if apply == true and current_recipe.matrix_solver == matrix_solver then + apply = false + end + if apply == true and current_recipe.matrix_solver ~= matrix_solver then + current_recipe.matrix_solver = matrix_solver + end + if current_recipe.id == recipe.id then + if current_recipe.matrix_solver == 0 then + matrix_solver = 1 + else + matrix_solver = 0 + end + current_recipe.matrix_solver = matrix_solver + apply = true + end + end + end +end + +------------------------------------------------------------------------------- +---Update a factory +---@param recipe RecipeData +---@param fuel string | FuelData +function ModelBuilder.updateFuelFactory(recipe, fuel) + if recipe ~= nil and fuel ~= nil then + recipe.factory.fuel = fuel + end +end + +------------------------------------------------------------------------------- +---Convert factory modules to a prority module +---@param factory table +---@return table +function ModelBuilder.convertModuleToPriority(factory) + local module_priority = {} + for name, value in pairs(factory.modules or {}) do + table.insert(module_priority, { name = name, value = value }) + end + return module_priority +end + +------------------------------------------------------------------------------- +---Add a module to prority module +---@param factory table +---@param module_name string +---@param module_max number +---@return table +function ModelBuilder.addModulePriority(factory, module_name, module_max) + local module_priority = ModelBuilder.convertModuleToPriority(factory) + local factory_prototype = EntityPrototype(factory) + if Model.countModulesModel(factory) < factory_prototype:getModuleInventorySize() then + local count = 1 + if module_max then + count = factory_prototype:getModuleInventorySize() - Model.countModulesModel(factory) + end + local success = false + ---parcours la priorite + for i, priority in pairs(module_priority) do + if priority.name == module_name then + priority.value = priority.value + count + success = true + end + end + if success == false then + table.insert(module_priority, { name = module_name, value = count }) + end + end + return module_priority +end + +------------------------------------------------------------------------------- +---Remove module priority +---@param factory table +---@param module_name string +---@param module_max number +---@return table +function ModelBuilder.removeModulePriority(factory, module_name, module_max) + local module_priority = ModelBuilder.convertModuleToPriority(factory) + ---parcours la priorite + local index = nil + for i, priority in pairs(module_priority) do + if priority.name == module_name then + if priority.value > 1 and not (module_max) then + priority.value = priority.value - 1 + else + index = i + end + end + end + if index ~= nil then + table.remove(module_priority, index) + end + return module_priority +end + +------------------------------------------------------------------------------- +---Add a module in factory +---@param recipe RecipeData +---@param module_name string +---@param module_max number +function ModelBuilder.addFactoryModule(recipe, module_name, module_max) + local module = ItemPrototype(module_name) + if recipe ~= nil and module:native() ~= nil then + if Player.checkFactoryLimitationModule(module:native(), recipe) == true then + local module_priority = ModelBuilder.addModulePriority(recipe.factory, module_name, module_max or false) + ModelBuilder.setFactoryModulePriority(recipe, module_priority) + end + end +end + +------------------------------------------------------------------------------- +---Set a module in factory +---@param recipe RecipeData +---@param module_name string +---@param module_value number +---@return boolean +function ModelBuilder.setFactoryModule(recipe, module_name, module_value) + if recipe ~= nil then + return ModelBuilder.setModuleModel(recipe.factory, module_name, module_value) + end + return false +end + +------------------------------------------------------------------------------- +---Set a module priority +---@param element table +---@param module_priority table +function ModelBuilder.setModulePriority(element, module_priority) + if element ~= nil then + for i, priority in pairs(module_priority) do + if i == 1 then + ModelBuilder.setModuleModel(element, priority.name, priority.value) + else + ModelBuilder.appendModuleModel(element, priority.name, priority.value) + end + end + end +end + +------------------------------------------------------------------------------- +---Set a module priority in factory +---@param recipe RecipeData +---@param module_priority table +function ModelBuilder.setFactoryModulePriority(recipe, module_priority) + if recipe ~= nil then + recipe.factory.modules = {} + if module_priority == nil then + recipe.factory.module_priority = nil + else + recipe.factory.module_priority = table.clone(module_priority) + local first = true + for i, priority in pairs(module_priority) do + local module = ItemPrototype(priority.name) + if Player.checkFactoryLimitationModule(module:native(), recipe) == true then + if first then + ModelBuilder.setModuleModel(recipe.factory, priority.name, priority.value) + first = false + else + ModelBuilder.appendModuleModel(recipe.factory, priority.name, priority.value) + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Apply a module priority in factory +---@param recipe RecipeData +function ModelBuilder.applyFactoryModulePriority(recipe) + if recipe ~= nil then + local module_priority = recipe.factory.module_priority + if module_priority == nil then + recipe.factory.modules = {} + else + local first = true + for i, priority in pairs(module_priority) do + local module = ItemPrototype(priority.name) + if Player.checkFactoryLimitationModule(module:native(), recipe) == true then + if first then + ModelBuilder.setModuleModel(recipe.factory, priority.name, priority.value) + first = false + else + ModelBuilder.appendModuleModel(recipe.factory, priority.name, priority.value) + end + end + end + end + end +end + +---Set a module priority in beacons +---@param recipe RecipeData +---@param modules_priority {[uint] : {[uint] : ModulePriorityData}} +function ModelBuilder.setBeaconsModulesPriority(recipe, modules_priority) + if recipe ~= nil then + local beacons = recipe.beacons + for index, beacon in ipairs(beacons) do + local module_priority = modules_priority[index] + ModelBuilder.setBeaconModulePriority(beacon, recipe, module_priority) + end + end +end + +------------------------------------------------------------------------------- +---Set a module priority in beacon +---@param beacon FactoryData +---@param recipe RecipeData +---@param module_priority {[uint] : ModulePriorityData} +function ModelBuilder.setBeaconModulePriority(beacon, recipe, module_priority) + if beacon ~= nil then + beacon.modules = {} + if module_priority == nil then + beacon.module_priority = nil + else + beacon.module_priority = table.clone(module_priority) + local first = true + for _, priority in pairs(module_priority) do + local module = ItemPrototype(priority.name) + if Player.checkBeaconLimitationModule(beacon, recipe, module:native()) == true then + if first then + ModelBuilder.setModuleModel(beacon, priority.name, priority.value) + first = false + else + ModelBuilder.appendModuleModel(beacon, priority.name, priority.value) + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Set factory block +---@param block table +---@param current_recipe RecipeData +function ModelBuilder.setFactoryBlock(block, current_recipe) + if current_recipe ~= nil then + local factory_prototype = EntityPrototype(current_recipe.factory.name) + local factory_ingredient_count = factory_prototype:getIngredientCount() + for _, recipe in pairs(block.recipes) do + local prototype_recipe = RecipePrototype(recipe) + local recipe_ingredient_count = prototype_recipe:getIngredientCount() + --- check ingredient limitation + if factory_ingredient_count < recipe_ingredient_count then + -- Skip + elseif prototype_recipe:getCategory() == RecipePrototype(current_recipe):getCategory() then + Model.setFactory(recipe, current_recipe.factory.name, current_recipe.factory.fuel) + ModelBuilder.setFactoryModulePriority(recipe, current_recipe.factory.module_priority) + end + end + end +end + +------------------------------------------------------------------------------- +---Set factory line +---@param model table +---@param current_recipe RecipeData +function ModelBuilder.setFactoryLine(model, current_recipe) + if current_recipe ~= nil then + for _, block in pairs(model.blocks) do + ModelBuilder.setFactoryBlock(block, current_recipe) + end + end +end + +------------------------------------------------------------------------------- +---Set factory module block +---@param block table +---@param current_recipe RecipeData +function ModelBuilder.setFactoryModuleBlock(block, current_recipe) + if current_recipe ~= nil then + for key, recipe in pairs(block.recipes) do + local prototype_recipe = RecipePrototype(recipe) + if prototype_recipe:getCategory() == RecipePrototype(current_recipe):getCategory() then + ModelBuilder.setFactoryModulePriority(recipe, current_recipe.factory.module_priority) + end + end + end +end + +------------------------------------------------------------------------------- +---Set factory module line +---@param model table +---@param current_recipe RecipeData +function ModelBuilder.setFactoryModuleLine(model, current_recipe) + if current_recipe ~= nil then + for _, block in pairs(model.blocks) do + ModelBuilder.setFactoryModuleBlock(block, current_recipe) + end + end +end + +------------------------------------------------------------------------------- +---Set beacon block +---@param block table +---@param current_recipe RecipeData +function ModelBuilder.setBeaconBlock(block, current_recipe) + if current_recipe ~= nil then + for key, recipe in pairs(block.recipes) do + if recipe ~= current_recipe then + local prototype_recipe = RecipePrototype(recipe) + if prototype_recipe:getCategory() == RecipePrototype(current_recipe):getCategory() then + recipe.beacons = {} + if current_recipe.beacons ~= nil then + for key, current_beacon in pairs(current_recipe.beacons) do + local beacon = Model.addBeacon(recipe, current_beacon.name, current_beacon.combo,current_beacon.per_factory, current_beacon.per_factory_constant) + ModelBuilder.setBeaconModulePriority(beacon, current_recipe, current_beacon.module_priority) + end + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Set beacon line +---@param model table +---@param current_recipe RecipeData +function ModelBuilder.setBeaconLine(model, current_recipe) + if current_recipe ~= nil then + for _, block in pairs(model.blocks) do + ModelBuilder.setBeaconBlock(block, current_recipe) + end + end +end + +------------------------------------------------------------------------------- +---Set beacon module block +---@param block table +---@param current_recipe RecipeData +function ModelBuilder.setBeaconModuleBlock(block, current_recipe) + if current_recipe ~= nil then + for key, recipe in pairs(block.recipes) do + if recipe ~= current_recipe and recipe.beacons ~= nil then + local prototype_recipe = RecipePrototype(recipe) + if prototype_recipe:getCategory() == RecipePrototype(current_recipe):getCategory() + and #recipe.beacons == #current_recipe.beacons then + for index, current_beacon in pairs(current_recipe.beacons) do + local beacon = recipe.beacons[index] + ModelBuilder.setBeaconModulePriority(beacon, current_recipe, current_beacon.module_priority) + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Set beacon module line +---@param model table +---@param current_recipe RecipeData +function ModelBuilder.setBeaconModuleLine(model, current_recipe) + if current_recipe ~= nil then + for _, block in pairs(model.blocks) do + ModelBuilder.setBeaconModuleBlock(block, current_recipe) + end + end +end + +------------------------------------------------------------------------------- +---Remove a module from factory +---@param recipe RecipeData +---@param module_name string +---@param module_max number +function ModelBuilder.removeFactoryModule(recipe, module_name, module_max) + local module = ItemPrototype(module_name) + if recipe ~= nil and module:native() ~= nil then + local module_priority = ModelBuilder.removeModulePriority(recipe.factory, module_name, module_max or false) + ModelBuilder.setFactoryModulePriority(recipe, module_priority) + end +end + +------------------------------------------------------------------------------- +---Remove a production block +---@param model table +---@param block table +function ModelBuilder.removeProductionBlock(model, block) + if block ~= nil then + model.blocks[block.id] = nil + table.reindex_list(model.blocks) + for _, block in pairs(model.blocks) do + if block.index == 0 then + block.unlinked = true + break + end + end + end +end + +------------------------------------------------------------------------------- +---Remove a production recipe +---@param block table +---@param recipe RecipeData +function ModelBuilder.removeProductionRecipe(block, recipe) + if block ~= nil and block.recipes[recipe.id] ~= nil then + block.recipes[recipe.id] = nil + table.reindex_list(block.recipes) + ---change block name + local first_recipe = Model.firstRecipe(block.recipes) + if first_recipe ~= nil then + local recipe_prototype = RecipePrototype(first_recipe) + local icon_name, icon_type = recipe_prototype:getIcon() + block.name = icon_name + block.type = icon_type + else + block.name = "" + end + end +end + +------------------------------------------------------------------------------- +---Past model +---@param into_model table +---@param into_block table +---@param from_model table +---@param from_block table +function ModelBuilder.pastModel(into_model, into_block, from_model, from_block) + if from_model ~= nil then + if from_block ~= nil then + ModelBuilder.copyBlock(into_model, into_block, from_model, from_block) + else + ModelBuilder.copyModel(into_model, from_model) + end + end +end + +------------------------------------------------------------------------------- +---Copy model +---@param into_model table +---@param from_model table +function ModelBuilder.copyModel(into_model, from_model) + if from_model ~= nil then + if from_model.parameters ~= nil then + into_model.parameters = table.deepcopy(from_model.parameters) + end + for _, from_block in spairs(from_model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + ModelBuilder.copyBlock(into_model, nil, from_model, from_block) + end + end +end + +------------------------------------------------------------------------------- +---Copy block +---@param into_model table +---@param into_block table +---@param from_model table +---@param from_block table +function ModelBuilder.copyBlock(into_model, into_block, from_model, from_block) + if from_model ~= nil and from_block ~= nil then + local from_recipe_ids = {} + for recipe_id, recipe in spairs(from_block.recipes, function(t, a, b) return t[b].index > t[a].index end) do + table.insert(from_recipe_ids, recipe_id) + end + local recipe_index = #from_recipe_ids + for _, recipe_id in ipairs(from_recipe_ids) do + local recipe = from_block.recipes[recipe_id] + local recipe_prototype = RecipePrototype(recipe) + if recipe_prototype:native() ~= nil then + ---ajoute le bloc si il n'existe pas + if into_block == nil then + into_block = Model.newBlock(into_model, recipe_prototype:native()) + local index = table.size(into_model.blocks) + into_block.index = index + if index == 0 then + into_block.unlinked = true + else + into_block.unlinked = from_block.unlinked + end + into_block.solver = from_block.solver + into_block.by_product = from_block.by_product + into_block.type = from_block.type + + ---copy input + if from_block.products ~= nil then + into_block.products = table.deepcopy(from_block.products) + end + if from_block.ingredients ~= nil then + into_block.ingredients = table.deepcopy(from_block.ingredients) + end + + into_model.blocks[into_block.id] = into_block + end + + local recipe_model = Model.newRecipe(into_model, recipe.name, recipe_prototype:getType()) + recipe_model.index = recipe_index + recipe_model.production = recipe.production or 1 + recipe_model.factory = ModelBuilder.cloneFactory(recipe.factory) + if recipe.beacons ~= nil then + recipe_model.beacons = {} + for _, beacon in pairs(recipe.beacons) do + table.insert(recipe_model.beacons, ModelBuilder.cloneBeacon(beacon)) + end + end + + if recipe.contraint ~= nil then + recipe_model.contraint = table.deepcopy(recipe.contraint) + end + into_block.recipes[recipe_model.id] = recipe_model + recipe_index = recipe_index + 1 + end + end + if into_block ~= nil then + table.reindex_list(into_block.recipes) + if from_block.products_linked ~= nil then + into_block.products_linked = table.deepcopy(from_block.products_linked) + end + end + end +end + +---Clone factory +---@param factory FactoryData +---@return FactoryData +function ModelBuilder.cloneFactory(factory) + local new_factory = Model.newFactory(factory.name) + new_factory.limit = factory.limit + new_factory.fuel = factory.fuel + new_factory.input = factory.input + new_factory.modules = {} + if factory.modules ~= nil then + for name, value in pairs(factory.modules) do + new_factory.modules[name] = value + end + end + if factory.module_priority ~= nil then + new_factory.module_priority = table.clone(factory.module_priority) + end + return new_factory +end + +---Clone beacon +---@param beacon FactoryData +---@return FactoryData +function ModelBuilder.cloneBeacon(beacon) + local new_beacon = Model.newBeacon(beacon.name) + new_beacon.combo = beacon.combo + new_beacon.per_factory = beacon.per_factory + new_beacon.per_factory_constant = beacon.per_factory_constant + new_beacon.modules = {} + if beacon.modules ~= nil then + for name, value in pairs(beacon.modules) do + new_beacon.modules[name] = value + end + end + if beacon.module_priority ~= nil then + new_beacon.module_priority = table.clone(beacon.module_priority) + end + return new_beacon +end + +------------------------------------------------------------------------------- +---Set module model +---@param factory FactoryData +---@param module_name string +---@param module_value number +---@return boolean +function ModelBuilder.setModuleModel(factory, module_name, module_value) + local element_prototype = EntityPrototype(factory) + if factory.modules ~= nil and factory.modules[module_name] == module_value then return false end + factory.modules = {} + factory.modules[module_name] = 0 + if module_value <= element_prototype:getModuleInventorySize() then + factory.modules[module_name] = module_value + else + factory.modules[module_name] = element_prototype:getModuleInventorySize() + end + return true +end + +------------------------------------------------------------------------------- +---Append module model +---@param factory FactoryData +---@param module_name string +---@param module_value number +---@return boolean +function ModelBuilder.appendModuleModel(factory, module_name, module_value) + local factory_prototype = EntityPrototype(factory) + if factory.modules ~= nil and factory.modules[module_name] == module_value then return false end + local count_modules = Model.countModulesModel(factory) + if count_modules >= factory_prototype:getModuleInventorySize() then + return false + elseif (count_modules + module_value) <= factory_prototype:getModuleInventorySize() then + factory.modules[module_name] = module_value + else + factory.modules[module_name] = 0 + local delta = factory_prototype:getModuleInventorySize() - Model.countModulesModel(factory) + factory.modules[module_name] = delta + end + return true +end + +------------------------------------------------------------------------------- +---Return current beacon if not exist initialise +---@param recipe RecipeData +---@return BeaconData +function ModelBuilder.getCurrentBeacon(recipe) + if recipe.beacons == nil or #recipe.beacons == 0 then + recipe.beacons = {} + if recipe.beacon ~= nil then + table.insert(recipe.beacons, recipe.beacon) + else + local new_beacon = Model.newBeacon() + table.insert(recipe.beacons, new_beacon) + end + end + local beacons = recipe.beacons + local current_beacon_selection = User.getParameter("current_beacon_selection") or 1 + local beacon = nil + if #beacons >= current_beacon_selection then + beacon = beacons[current_beacon_selection] + else + User.setParameter("current_beacon_selection", 1) + beacon = beacons[1] + end + return beacon +end + +------------------------------------------------------------------------------- +---Update a beacon +---@param beacon BeaconData +---@param recipe RecipeData +---@param options table +function ModelBuilder.updateBeacon(beacon, recipe, options) + if recipe ~= nil then + if options.combo ~= nil then + beacon.combo = options.combo + end + if options.per_factory ~= nil then + beacon.per_factory = options.per_factory + end + if options.per_factory_constant ~= nil then + beacon.per_factory_constant = options.per_factory_constant + end + end +end + +------------------------------------------------------------------------------- +---Add a module in beacon +---@param beacon BeaconData +---@param recipe RecipeData +---@param module_name string +---@param module_max number +function ModelBuilder.addBeaconModule(beacon, recipe, module_name, module_max) + local module = ItemPrototype(module_name) + if recipe ~= nil and module:native() ~= nil then + if Player.checkFactoryLimitationModule(module:native(), recipe) == true then + local module_priority = ModelBuilder.addModulePriority(beacon, module_name, module_max or false) + ModelBuilder.setBeaconModulePriority(beacon, recipe, module_priority) + end + end +end + +------------------------------------------------------------------------------- +---Remove a module in beacon +---@param beacon BeaconData +---@param recipe RecipeData +---@param module_name string +---@param module_max number +function ModelBuilder.removeBeaconModule(beacon, recipe, module_name, module_max) + local module = ItemPrototype(module_name) + if recipe ~= nil and module:native() ~= nil then + local module_priority = ModelBuilder.removeModulePriority(beacon, module_name, module_max or false) + ModelBuilder.setBeaconModulePriority(beacon, recipe, module_priority) + end +end + +------------------------------------------------------------------------------- +---Unlink a production block +---@param block table +function ModelBuilder.unlinkProductionBlock(block) + if block ~= nil then + block.unlinked = not (block.unlinked) + if not block.unlinked then + for i, ingredient in pairs(block.ingredients) do + ingredient.input = 0 + ingredient.count = 0 + end + for i, product in pairs(block.products) do + product.input = 0 + product.count = 0 + end + end + end +end + +------------------------------------------------------------------------------- +---Update a product +---@param block table +---@param product_name string +---@param quantity number +function ModelBuilder.updateProduct(block, product_name, quantity) + if block ~= nil then + local block_elements = block.products + if block.by_product == false then + block_elements = block.ingredients + end + if block_elements ~= nil and block_elements[product_name] ~= nil then + block_elements[product_name].input = quantity + end + end +end + +------------------------------------------------------------------------------- +---Update a production block option +---@param block table +---@param option string +---@param value any +function ModelBuilder.updateProductionBlockOption(block, option, value) + if block ~= nil then + block[option] = value + ---reset states + for _, product in pairs(block.products) do + product.state = 1 + end + for _, ingredient in pairs(block.ingredients) do + ingredient.state = 1 + end + end +end + +------------------------------------------------------------------------------- +---Up a production block +---@param model table +---@param block table +---@param step number +function ModelBuilder.upProductionBlock(model, block, step) + if model ~= nil and block ~= nil then + table.up_indexed_list(model.blocks, block.index, step) + if block.index == 0 then + block.unlinked = true + end + end +end + +------------------------------------------------------------------------------- +---Down a production block +---@param model table +---@param block table +---@param step number +function ModelBuilder.downProductionBlock(model, block, step) + if model ~= nil and block ~= nil then + table.down_indexed_list(model.blocks, block.index, step) + for _, block in pairs(model.blocks) do + if block.index == 0 then + block.unlinked = true + break + end + end + end +end + +------------------------------------------------------------------------------- +---Up a production recipe +---@param block table +---@param recipe RecipeData +---@param step number +function ModelBuilder.upProductionRecipe(block, recipe, step) + if block ~= nil and block.recipes ~= nil and recipe ~= nil then + table.up_indexed_list(block.recipes, recipe.index, step) + ---change block name + local first_recipe = Model.firstRecipe(block.recipes) + if first_recipe ~= nil then + local recipe_prototype = RecipePrototype(first_recipe) + local icon_name, icon_type = recipe_prototype:getIcon() + block.name = icon_name + block.type = icon_type + end + end +end + +------------------------------------------------------------------------------- +---Down a production recipe +---@param block table +---@param recipe RecipeData +---@param step number +function ModelBuilder.downProductionRecipe(block, recipe, step) + if block ~= nil and block.recipes ~= nil and recipe ~= nil then + table.down_indexed_list(block.recipes, recipe.index, step) + ---change block name + local first_recipe = Model.firstRecipe(block.recipes) + if first_recipe ~= nil then + local recipe_prototype = RecipePrototype(first_recipe) + local icon_name, icon_type = recipe_prototype:getIcon() + block.name = icon_name + block.type = icon_type + end + end +end + +------------------------------------------------------------------------------- +---Update recipe contraint +---@param recipe RecipeData +---@param contraint table +function ModelBuilder.updateRecipeContraint(recipe, contraint) + if recipe ~= nil then + if recipe.contraint ~= nil and recipe.contraint.name == contraint.name and recipe.contraint.type == contraint.type then + recipe.contraint = nil + else + recipe.contraint = contraint + end + end +end + +------------------------------------------------------------------------------- +---Update recipe Neighbour Bonus +---@param recipe table +---@param value number +function ModelBuilder.updateRecipeNeighbourBonus(recipe, value) + if recipe ~= nil then + recipe.factory.neighbour_bonus = value + end +end + +return ModelBuilder diff --git a/helmod/data/ModelCompute.lua b/helmod/data/ModelCompute.lua new file mode 100644 index 00000000..94a09fa7 --- /dev/null +++ b/helmod/data/ModelCompute.lua @@ -0,0 +1,770 @@ +require "math.Matrix" +require "math.SolverMatrix" +require "math.SolverMatrixAlgebra" +require "math.SolverMatrixSimplex" + +require "math.Solver" +require "math.SolverAlgebra" +require "math.SolverSimplex" + +------------------------------------------------------------------------------ +---Description of the module. +---@class ModelCompute +local ModelCompute = { + classname = "HMModelCompute", + capEnergy = -0.8, + capSpeed = -0.8, + capPollution = -0.8, + waste_value = 0.00001, + new_solver = false, + cap_reason = { + speed = { + cycle = 1, + module_low = 2, + module_high = 4 + }, + productivity = { + module_low = 1 + }, + consumption = { + module_low = 1 + }, + pollution = { + module_low = 1 + } + } +} + +------------------------------------------------------------------------------- +---Check and valid unlinked all blocks +---@param model table +function ModelCompute.checkUnlinkedBlocks(model) + if model.blocks ~= nil then + for _, block in spairs(model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + ModelCompute.checkUnlinkedBlock(model, block) + end + end +end + +------------------------------------------------------------------------------- +---Check and valid unlinked block +---@param model table +---@param block table +function ModelCompute.checkUnlinkedBlock(model, block) + local unlinked = true + local recipe = Player.getPlayerRecipe(block.name) + if recipe ~= nil then + if model.blocks ~= nil then + for _, current_block in spairs(model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + if current_block.id == block.id then + break + end + for _, ingredient in pairs(current_block.ingredients) do + for _, product in pairs(recipe.products) do + if product.name == ingredient.name then + unlinked = false + end + end + end + if current_block.id ~= block.id and current_block.name == block.name then + unlinked = true + end + end + end + block.unlinked = unlinked + else + ---not a recipe + block.unlinked = true + end +end + +------------------------------------------------------------------------------- +---Update model +---@param model table +function ModelCompute.try_update(model) + local ok , err = pcall(function() + ModelCompute.update(model) + end) + if not(ok) then + log(err) + end +end +------------------------------------------------------------------------------- +---Update model +---@param model table +function ModelCompute.update(model) + if model ~= nil and model.blocks ~= nil then + Model.appendParameters(model) + ---calcul les blocks + local input = {} + for _, block in spairs(model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + block.time = model.time + ---premiere recette + local _, recipe = next(block.recipes) + if recipe == nil then + block.ingredients = {} + block.products = {} + else + + ---prepare bloc + ModelCompute.prepareBlock(block) + + ---state = 0 => produit + ---state = 1 => produit pilotant + ---state = 2 => produit restant + ---prepare input + if not (block.unlinked) then + if block.products == nil then + ModelCompute.computeBlock(block) + end + + ---prepare les inputs + local factor = -1 + local block_elements = block.products + if block.by_product == false then + block_elements = block.ingredients + factor = 1 + end + if block_elements ~= nil then + for _, element in pairs(block_elements) do + local element_key = Product(element):getTableKey() + if (element.state ~= nil and element.state == 1) or (block.products_linked ~= nil and block.products_linked[element_key] == true) then + if input[element_key] ~= nil then + element.input = (input[element_key] or 0) * factor + --element.state = 0 + end + else + element.input = 0 + end + end + end + end + + ModelCompute.computeBlockCleanInput(block) + + + ModelCompute.computeBlock(block, model.parameters) + + ---consomme les ingredients + for _, product in pairs(block.products) do + local element_key = Product(product):getTableKey() + if input[element_key] == nil then + input[element_key] = product.count + elseif input[element_key] ~= nil then + input[element_key] = input[element_key] + product.count + end + end + ---compte les ingredients + for _, ingredient in pairs(block.ingredients) do + local element_key = Product(ingredient):getTableKey() + if input[element_key] == nil then + input[element_key] = -ingredient.count + else + input[element_key] = input[element_key] - ingredient.count + end + end + ---consume energy + local element_key = "energy" + if input[element_key] == nil then + input[element_key] = -block.power + else + input[element_key] = input[element_key] - block.power + end + end + end + + ModelCompute.computeInputOutput(model) + ModelCompute.computeResources(model) + + ---genere un bilan + ModelCompute.createSummary(model) + model.version = Model.version + end +end + +------------------------------------------------------------------------------- +---Compute production block +---@param block table +function ModelCompute.computeBlockCleanInput(block) + local recipes = block.recipes + if recipes ~= nil then + if block.input ~= nil then + ---state = 0 => produit + ---state = 1 => produit pilotant + ---state = 2 => produit restant + for product_name, quantity in pairs(block.input) do + if block.products[product_name] == nil or not (bit32.band(block.products[product_name].state, 1)) then + block.input[product_name] = nil + end + end + end + end +end + +------------------------------------------------------------------------------- +---Prepare production block +---@param block table +function ModelCompute.prepareBlock(block) + local recipes = block.recipes + if recipes ~= nil then + local block_products = {} + local block_ingredients = {} + ---preparation + for _, recipe in spairs(recipes, function(t, a, b) return t[b].index > t[a].index end) do + local recipe_prototype = RecipePrototype(recipe) + + for i, lua_product in pairs(recipe_prototype:getProducts(recipe.factory)) do + local product_key = Product(lua_product):getTableKey() + block_products[product_key] = { + name = lua_product.name, + type = lua_product.type, + count = 0, + temperature = lua_product.temperature, + minimum_temperature = lua_product.minimum_temperature, + maximum_temperature = lua_product.maximum_temperature + } + end + for i, lua_ingredient in pairs(recipe_prototype:getIngredients(recipe.factory)) do + local ingredient_key = Product(lua_ingredient):getTableKey() + block_ingredients[ingredient_key] = { + name = lua_ingredient.name, + type = lua_ingredient.type, + count = 0, + temperature = lua_ingredient.temperature, + minimum_temperature = lua_ingredient.minimum_temperature, + maximum_temperature = lua_ingredient.maximum_temperature + } + end + end + ---preparation state + ---state = 0 => produit + ---state = 1 => produit pilotant + ---state = 2 => produit restant + for i, block_product in pairs(block_products) do + local product_key = Product(block_product):getTableKey() + ---recopie la valeur input + if block.by_factory ~= true and block.products ~= nil and block.products[product_key] ~= nil then + block_product.input = block.products[product_key].input + end + ---pose le status + if block_ingredients[product_key] == nil then + block_product.state = 1 + else + block_product.state = 0 + end + end + + for i, block_ingredient in pairs(block_ingredients) do + local ingredient_key = Product(block_ingredient):getTableKey() + ---recopie la valeur input + if block.by_factory ~= true and block.ingredients ~= nil and block.ingredients[ingredient_key] ~= nil then + block_ingredient.input = block.ingredients[ingredient_key].input + end + ---pose le status + if block_products[ingredient_key] == nil then + block_ingredient.state = 1 + else + block_ingredient.state = 0 + end + end + block.products = block_products + block.ingredients = block_ingredients + end +end + +------------------------------------------------------------------------------- +---Compute production block +---@param block table +function ModelCompute.computeBlock(block, parameters) + local recipes = block.recipes + block.power = 0 + block.count = 1 + block.pollution_total = 0 + + if recipes ~= nil then + local my_solver + + local debug = User.getModGlobalSetting("debug_solver") + local selected_solvers = { algebra = SolverAlgebra, simplex = SolverSimplex } + + local solver_selected = User.getParameter("solver_selected") or defines.constant.default_solver + if solver_selected ~= defines.constant.solvers.normal then + selected_solvers = { algebra = SolverMatrixAlgebra, simplex = SolverMatrixSimplex } + end + if block.solver == true and block.by_factory ~= true then + my_solver = selected_solvers.simplex() + else + my_solver = selected_solvers.algebra() + end + + my_solver:solve(block, parameters, debug) + + end +end + +-------------------------------------------------------------------------------- +---Compute module effects of factory +---@param recipe table +---@param parameters ParametersData +---@return table +function ModelCompute.computeModuleEffects(recipe, parameters) + local factory = recipe.factory + factory.effects = { speed = 0, productivity = 0, consumption = 0, pollution = 0 } + if parameters ~= nil then + factory.effects.speed = parameters.effects.speed + factory.effects.productivity = parameters.effects.productivity + factory.effects.consumption = parameters.effects.consumption + factory.effects.pollution = parameters.effects.pollution + end + factory.cap = { speed = 0, productivity = 0, consumption = 0, pollution = 0 } + local factory_prototype = EntityPrototype(factory) + factory.effects.productivity = factory.effects.productivity + factory_prototype:getBaseProductivity() + ---effet module factory + if factory.modules ~= nil then + for module, value in pairs(factory.modules) do + local speed_bonus = Player.getModuleBonus(module, "speed") + local productivity_bonus = Player.getModuleBonus(module, "productivity") + local consumption_bonus = Player.getModuleBonus(module, "consumption") + local pollution_bonus = Player.getModuleBonus(module, "pollution") + factory.effects.speed = factory.effects.speed + value * speed_bonus + factory.effects.productivity = factory.effects.productivity + value * productivity_bonus + factory.effects.consumption = factory.effects.consumption + value * consumption_bonus + factory.effects.pollution = factory.effects.pollution + value * pollution_bonus + end + end + ---effet module beacon + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + if beacon.modules ~= nil then + for module, value in pairs(beacon.modules) do + local speed_bonus = Player.getModuleBonus(module, "speed") + local productivity_bonus = Player.getModuleBonus(module, "productivity") + local consumption_bonus = Player.getModuleBonus(module, "consumption") + local pollution_bonus = Player.getModuleBonus(module, "pollution") + local distribution_effectivity = EntityPrototype(beacon):getDistributionEffectivity() + factory.effects.speed = factory.effects.speed + value * speed_bonus * distribution_effectivity * beacon + .combo + factory.effects.productivity = factory.effects.productivity + + value * productivity_bonus * distribution_effectivity * beacon.combo + factory.effects.consumption = factory.effects.consumption + + value * consumption_bonus * distribution_effectivity * beacon.combo + factory.effects.pollution = factory.effects.pollution + + value * pollution_bonus * distribution_effectivity * beacon.combo + end + end + end + end + if recipe.type == "resource" then + local bonus = Player.getForce().mining_drill_productivity_bonus + factory.effects.productivity = factory.effects.productivity + bonus + end + if recipe.type == "technology" then + local bonus = Player.getForce().laboratory_speed_modifier or 0 + factory.effects.speed = factory.effects.speed + bonus * (1 + factory.effects.speed) + end + ---nuclear reactor + if factory_prototype:getType() == "reactor" then + local bonus = factory_prototype:getNeighbourBonus() + factory.effects.consumption = factory.effects.consumption + bonus + end + + ---cap la productivite + if factory.effects.productivity < 0 then + factory.effects.productivity = 0 + factory.cap.productivity = bit32.bor(factory.cap.productivity, ModelCompute.cap_reason.productivity.module_low) + end + + ---cap la vitesse a self.capSpeed + if factory.effects.speed < ModelCompute.capSpeed then + factory.effects.speed = ModelCompute.capSpeed + factory.cap.speed = bit32.bor(factory.cap.speed, ModelCompute.cap_reason.speed.module_low) + end + ---cap short integer max for % + ---@see https://fr.wikipedia.org/wiki/Entier_court + if factory.effects.speed * 100 > 32767 then + factory.effects.speed = 32767 / 100 + factory.cap.speed = bit32.bor(factory.cap.speed, ModelCompute.cap_reason.speed.module_high) + end + + ---cap l'energy a self.capEnergy + if factory.effects.consumption < ModelCompute.capEnergy then + factory.effects.consumption = ModelCompute.capEnergy + factory.cap.consumption = bit32.bor(factory.cap.consumption, ModelCompute.cap_reason.consumption.module_low) + end + + ---cap la pollution a self.capPollution + if factory.effects.pollution < ModelCompute.capPollution then + factory.effects.pollution = ModelCompute.capPollution + factory.cap.pollution = bit32.bor(factory.cap.pollution, ModelCompute.cap_reason.pollution.module_low) + end + return recipe +end + +------------------------------------------------------------------------------- +---Compute energy, speed, number of factory for recipes +---@param recipe table +function ModelCompute.computeFactory(recipe) + local recipe_prototype = RecipePrototype(recipe) + local factory_prototype = EntityPrototype(recipe.factory) + recipe.time = recipe_prototype:getEnergy(recipe.factory) + + ---effet speed + recipe.factory.speed_total = factory_prototype:speedFactory(recipe) * (1 + recipe.factory.effects.speed) + if recipe.type == "rocket" then + local speed_penalty = recipe_prototype:getRocketPenalty(recipe.factory) + recipe.factory.speed_total = recipe.factory.speed_total * speed_penalty + end + recipe.factory.speed = recipe.factory.speed_total + ---cap speed creation maximum de 1 cycle par tick + ---seulement sur les recipes normaux + if recipe.type == "recipe" and recipe.time / recipe.factory.speed < 1 / 60 then + recipe.factory.speed = 60 * recipe.time + recipe.factory.cap.speed = bit32.bor(recipe.factory.cap.speed, ModelCompute.cap_reason.speed.cycle) + end + + ---effet consumption + local energy_type = factory_prototype:getEnergyType() + recipe.factory.energy = factory_prototype:getEnergyConsumption() * (1 + recipe.factory.effects.consumption) + + ---effet pollution + recipe.factory.pollution = factory_prototype:getPollution() * (1 + recipe.factory.effects.pollution) * + (1 + recipe.factory.effects.consumption) + + ---compte le nombre de machines necessaires + ---[ratio recipe] * [effort necessaire du recipe] / ([la vitesse de la factory] * [le temps en second]) + local count = recipe.count * recipe.time / (recipe.factory.speed * recipe.base_time) + if recipe.factory.speed == 0 then count = 0 end + recipe.factory.count = count + + if energy_type ~= "electric" then + recipe.factory.energy_total = 0 + else + recipe.factory.energy_total = recipe.factory.count * recipe.factory.energy + local drain = factory_prototype:getMinEnergyUsage() + recipe.factory.energy_total = math.ceil(recipe.factory.energy_total + (math.ceil(recipe.factory.count) * drain)) + recipe.factory.energy = recipe.factory.energy + drain + end + ---arrondi des valeurs + recipe.factory.speed = recipe.factory.speed + recipe.factory.energy = math.ceil(recipe.factory.energy) + + local beacons_energy_total = 0 + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + if Model.countModulesModel(beacon) > 0 then + local variant = beacon.per_factory or 0 + local constant = beacon.per_factory_constant or 0 + beacon.count = count * variant + constant + else + beacon.count = 0 + end + local beacon_prototype = EntityPrototype(beacon) + beacon.energy = beacon_prototype:getEnergyUsage() + beacon.energy_total = math.ceil(beacon.count * beacon.energy) + beacon.energy = math.ceil(beacon.energy) + beacons_energy_total = beacons_energy_total + beacon.energy_total + end + end + + --- totaux + recipe.factory.pollution_total = recipe.factory.pollution * recipe.factory.count * recipe.base_time + recipe.pollution_total = recipe.factory.pollution_total * recipe_prototype:getEmissionsMultiplier() + recipe.energy_total = recipe.factory.energy_total + beacons_energy_total +end + +------------------------------------------------------------------------------- +---Compute energy factory for recipes +---@param recipe table +function ModelCompute.computeEnergyFactory(recipe) + local recipe_prototype = RecipePrototype(recipe) + local factory_prototype = EntityPrototype(recipe.factory) + local recipe_energy = recipe_prototype:getEnergy(recipe.factory) + ---effet speed + recipe.factory.speed = factory_prototype:speedFactory(recipe) * (1 + recipe.factory.effects.speed) + ---cap speed creation maximum de 1 cycle par tick + ---seulement sur les recipes normaux + if recipe.type == "recipe" and recipe_energy / recipe.factory.speed < 1 / 60 then + recipe.factory.speed = 60 * recipe_energy + end + + ---effet consumption + local energy_prototype = factory_prototype:getEnergySource() + + local energy_type = factory_prototype:getEnergyType() + local gameDay = { day = 12500, dusk = 5000, night = 2500, dawn = 2500 } + if factory_prototype:getType() == "accumulator" then + local dark_time = (gameDay.dusk / 2 + gameDay.night + gameDay.dawn / 2) + --recipe_energy = dark_time + end + recipe.factory.energy = factory_prototype:getEnergyConsumption() * (1 + recipe.factory.effects.consumption) + + ---effet pollution + recipe.factory.pollution = factory_prototype:getPollution() * (1 + recipe.factory.effects.pollution) + + ---compte le nombre de machines necessaires + ---[ratio recipe] * [effort necessaire du recipe] / ([la vitesse de la factory] + local count = recipe.count * recipe_energy / (recipe.factory.speed * recipe.base_time) + if recipe.factory.speed == 0 then count = 0 end + recipe.factory.count = count + ---calcul des totaux + if energy_type == "electric" then + recipe.factory.energy_total = 0 + else + recipe.factory.energy_total = 0 + end + recipe.factory.pollution_total = recipe.factory.pollution * recipe.factory.count * recipe.base_time + + recipe.energy_total = recipe.factory.energy_total + recipe.pollution_total = recipe.factory.pollution_total * recipe_prototype:getEmissionsMultiplier() + ---arrondi des valeurs + recipe.factory.speed = recipe.factory.speed + recipe.factory.energy = math.ceil(recipe.factory.energy) + + if recipe.beacons then + for _, beacon in pairs(recipe.beacons) do + beacon.energy_total = 0 + beacon.energy = 0 + end + end + + recipe.time = 1 +end + +------------------------------------------------------------------------------- +---Compute input and output +---@param model table +function ModelCompute.computeInputOutput(model) + model.products = {} + model.ingredients = {} + + local index = 1 + for _, element in spairs(model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + ---count product + if element.products ~= nil and table.size(element.products) then + for key, product in pairs(element.products) do + if model.products[key] == nil then + model.products[key] = Model.newIngredient(product.name, product.type) + model.products[key].temperature = product.temperature + model.products[key].minimum_temperature = product.minimum_temperature + model.products[key].maximum_temperature = product.maximum_temperature + model.products[key].index = index + index = index + 1 + end + model.products[key].count = model.products[key].count + product.count + end + end + ---count ingredient + if element.ingredients ~= nil and table.size(element.ingredients) then + for key, ingredient in pairs(element.ingredients) do + if model.ingredients[key] == nil then + model.ingredients[key] = Model.newIngredient(ingredient.name, ingredient.type) + model.ingredients[key].temperature = ingredient.temperature + model.ingredients[key].minimum_temperature = ingredient.minimum_temperature + model.ingredients[key].maximum_temperature = ingredient.maximum_temperature + model.ingredients[key].index = index + index = index + 1 + end + model.ingredients[key].count = model.ingredients[key].count + ingredient.count + end + end + end + + for _, element in spairs(model.blocks, function(t, a, b) return t[b].index > t[a].index end) do + ---consomme les produits + if element.ingredients ~= nil and table.size(element.ingredients) then + for key, ingredient in pairs(element.ingredients) do + if element.mining_ingredient ~= ingredient.name then + if model.products[key] ~= nil then + model.products[key].count = model.products[key].count - ingredient.count + end + end + end + end + ---consomme les ingredients + if element.products ~= nil and table.size(element.products) then + for key, product in pairs(element.products) do + if model.ingredients[key] ~= nil then + model.ingredients[key].count = model.ingredients[key].count - product.count + end + end + end + end + + for key, ingredient in pairs(model.ingredients) do + if ingredient.count < 0.01 then + model.ingredients[key] = nil + end + end + + for key, product in pairs(model.products) do + if product.count < 0.01 then + model.products[key] = nil + end + end +end + +------------------------------------------------------------------------------- +---Compute resources +---@param model table +function ModelCompute.computeResources(model) + local resources = {} + + ---calcul resource + for k, ingredient in pairs(model.ingredients) do + if ingredient.resource_category ~= nil or ingredient.name == "water" then + local resource = model.resources[ingredient.name] + if resource ~= nil then + resource.count = ingredient.count + else + resource = Model.newResource(model, ingredient.name, ingredient.type, ingredient.count) + end + + if ingredient.resource_category == "basic-solid" then + resource.category = "basic-solid" + end + if ingredient.name == "water" then + resource.category = "basic-fluid" + end + if ingredient.name == "crude-oil" then + resource.category = "basic-fluid" + end + + resource.blocks = 1 + resource.wagon = nil + resource.storage = nil + local ratio = 1 + + ---compute storage + if resource.category == "basic-solid" then + resource.wagon = { type = "item", name = "cargo-wagon" } + resource.wagon.count = math.ceil(resource.count / 2000) + resource.wagon.limit_count = math.ceil(resource.wagon.count * ratio) + + resource.storage = { type = "item", name = "steel-chest" } + resource.storage.count = math.ceil(resource.count / (48 * 50)) + resource.storage.limit_count = math.ceil(resource.storage.count * ratio) + elseif resource.category == "basic-fluid" then + --resource.wagon = {type="item", name="cargo-wagon"} + --resource.wagon.count = math.ceil(resource.count/2000) + + resource.storage = { type = "item", name = "storage-tank" } + resource.storage.count = math.ceil(resource.count / 2400) + resource.storage.limit_count = math.ceil(resource.storage.count * ratio) + end + resources[resource.name] = resource + end + end + model.resources = resources +end + +------------------------------------------------------------------------------- +---Compute energy, speed, number total +---@param model table +function ModelCompute.createSummary(model) + model.summary = {} + model.summary.factories = {} + model.summary.beacons = {} + model.summary.modules = {} + model.summary.building = 0 + local energy = 0 + local pollution = 0 + local building = 0 + + for _, block in pairs(model.blocks) do + energy = energy + block.power + pollution = pollution + (block.pollution_total or 0) + ModelCompute.computeSummaryFactory(block) + building = building + block.summary.building + for _, type in pairs({ "factories", "beacons", "modules" }) do + for _, element in pairs(block.summary[type]) do + if model.summary[type][element.name] == nil then + model.summary[type][element.name] = { + name = element.name, + type = "item", + count = 0 + } + end + model.summary[type][element.name].count = model.summary[type][element.name].count + element.count + end + end + end + model.summary.energy = energy + model.summary.pollution = pollution + model.summary.building = building + + model.generators = {} + ---formule 20 accumulateur /24 panneau solaire/1 MW + model.generators["accumulator"] = { name = "accumulator", type = "item", + count = 20 * math.ceil(energy / (1000 * 1000)) } + model.generators["solar-panel"] = { name = "solar-panel", type = "item", + count = 24 * math.ceil(energy / (1000 * 1000)) } + model.generators["steam-engine"] = { name = "steam-engine", type = "item", count = math.ceil(energy / (510 * 1000)) } +end + +------------------------------------------------------------------------------- +---Compute summary factory +---@param block table +function ModelCompute.computeSummaryFactory(block) + if block ~= nil then + block.summary = { building = 0, factories = {}, beacons = {}, modules = {} } + for _, recipe in pairs(block.recipes) do + ---calcul nombre factory + local factory = recipe.factory + if block.summary.factories[factory.name] == nil then + block.summary.factories[factory.name] = { + name = factory.name, + type = factory.type or "entity", + count = 0 + } + end + block.summary.factories[factory.name].count = block.summary.factories[factory.name].count + + math.ceil(factory.count) + block.summary.building = block.summary.building + math.ceil(factory.count) + ---calcul nombre de module factory + if factory.modules ~= nil then + for module, value in pairs(factory.modules) do + if block.summary.modules[module] == nil then + block.summary.modules[module] = { + name = module, + type = "item", + count = 0 + } + end + block.summary.modules[module].count = block.summary.modules[module].count + + value * math.ceil(factory.count) + end + end + ---calcul nombre beacon + local beacons = recipe.beacons + if beacons ~= nil then + for _, beacon in pairs(beacons) do + if block.summary.beacons[beacon.name] == nil then + block.summary.beacons[beacon.name] = { + name = beacon.name, + type = beacon.type or "entity", + count = 0 + } + end + block.summary.beacons[beacon.name].count = block.summary.beacons[beacon.name].count + math.ceil(beacon.count) + block.summary.building = block.summary.building + math.ceil(beacon.count) + ---calcul nombre de module beacon + if beacon.modules ~= nil then + for module, value in pairs(beacon.modules) do + if block.summary.modules[module] == nil then + block.summary.modules[module] = { + name = module, + type = "item", + count = 0 + } + end + block.summary.modules[module].count = block.summary.modules[module].count + + value * math.ceil(beacon.count) + end + end + end + end + end + end +end + +return ModelCompute diff --git a/helmod/data/User.lua b/helmod/data/User.lua new file mode 100644 index 00000000..b9aa8e95 --- /dev/null +++ b/helmod/data/User.lua @@ -0,0 +1,667 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class User +local User = { + ---single-line comment + classname = "HMUser", + gui = "gui", + prefixe = "helmod", + version = "0.9.12", + tab_name = "HMProductionPanel", + delay_tips = 60*10 +} + +------------------------------------------------------------------------------- +---Get global variable for user +---@param key string +---@return any +function User.get(key) + if global["users"] == nil then + global["users"] = {} + end + local user_name = User.name() + if global["users"][user_name] == nil then + global["users"][user_name] = {} + end + + if key ~= nil then + if global["users"][user_name][key] == nil then + global["users"][user_name][key] = {} + end + return global["users"][user_name][key] + end + return global["users"][user_name] +end + +------------------------------------------------------------------------------- +---Get Name +---@return string +function User.name() + return Player.native().name or Player.native().index or "nil" +end + +------------------------------------------------------------------------------- +---Return is admin player +---@return boolean +function User.isAdmin() + return Player.native().admin +end + +------------------------------------------------------------------------------- +---Return is writer player +---@param model table +---@return boolean +function User.isReader(model) + return Player.isAdmin() or model.owner == Player.native().name or (model.share ~= nil and bit32.band(model.share, 1) > 0) +end + +------------------------------------------------------------------------------- +---Return is writer player +---@param model table +---@return boolean +function User.isWriter(model) + return Player.isAdmin() or model.owner == Player.native().name or (model.share ~= nil and bit32.band(model.share, 2) > 0) +end + +------------------------------------------------------------------------------- +---Return is writer player +---@param model table +---@return boolean +function User.isDeleter(model) + return Player.isAdmin() or model.owner == Player.native().name or (model.share ~= nil and bit32.band(model.share, 4) > 0) +end + +------------------------------------------------------------------------------- +---Return is filter translate +---@return boolean +function User.isFilterTranslate() + return User.getModGlobalSetting("filter_translated_string_active") and (User.getParameter("filter-language") == nil or User.getParameter("filter-language") == "left") +end + +------------------------------------------------------------------------------- +---Return is filter contain +---@return boolean +function User.isFilterContain() + return (User.getParameter("filter-contain") == nil or User.getParameter("filter-contain") == "left") +end + +------------------------------------------------------------------------------- +---Get default settings +---@return table +function User.getDefaultSettings() + return { + display_pin_beacon = false, + display_pin_level = 4, + model_auto_compute = false, + model_loop_limit = 1000, + other_speed_panel=false, + filter_show_disable=true, + filter_show_hidden=false, + filter_show_hidden_player_crafting=true, + filter_show_lock_recipes=false + } +end + +------------------------------------------------------------------------------- +---Get sorted style +---@param key string +---@return string +function User.getSortedStyle(key) + local user_order = User.getParameter() + if user_order == nil then user_order = User.setParameter("order", {name="index",ascendant="true"}) end + local style = "helmod_button-sorted-none" + if user_order.name == key and user_order.ascendant then style = "helmod_button-sorted-up" end + if user_order.name == key and not(user_order.ascendant) then style = "helmod_button-sorted-down" end + return style +end + +------------------------------------------------------------------------------- +---Get parameter +---@param property string +---@return any +function User.getParameter(property) + local parameter = User.get("parameter") + if parameter ~= nil and property ~= nil then + return parameter[property] + end + return parameter +end + +------------------------------------------------------------------------------- +---Get preference +---@param type string +---@param name string +---@return any +function User.getPreference(type, name) + local preferences = User.get("preferences") + if preferences ~= nil and type ~= nil then + if name ~= nil and name ~= "" then + local preference_name = string.format("%s_%s", type, name) + return preferences[preference_name] + else + return preferences[type] + end + end + return preferences +end + +------------------------------------------------------------------------------- +---Get default factory +---@param recipe table +---@return any +function User.getDefaultFactory(recipe) + local default_factory = User.getParameter("default_factory") + local recipe_prototype = RecipePrototype(recipe) + local category = recipe_prototype:getCategory() + if category ~= nil and default_factory ~= nil and default_factory[category] ~= nil then + return default_factory[category] + end + return nil +end + +------------------------------------------------------------------------------- +---Set default factory +---@param recipe table +function User.setDefaultFactory(recipe) + local default_factory = User.getParameter("default_factory") or {} + local recipe_prototype = RecipePrototype(recipe) + local category = recipe_prototype:getCategory() + local factory = recipe.factory + if category ~= nil then + local default_category = {name = factory.name, fuel = factory.fuel} + if factory.module_priority ~= nil then + default_category.module_priority = {} + for _, priority in pairs(factory.module_priority) do + table.insert(default_category.module_priority, {name = priority.name, value = priority.value}) + end + end + default_factory[category] = default_category + User.setParameter("default_factory", default_factory) + end +end + +------------------------------------------------------------------------------- +---Get default beacons +---@param recipe RecipeData +---@return {[uint] : BeaconData} +function User.getDefaultBeacons(recipe) + local default_beacons = User.getParameter("default_beacons") + local recipe_prototype = RecipePrototype(recipe) + local category = recipe_prototype:getCategory() + if category ~= nil and default_beacons ~= nil and default_beacons[category] ~= nil then + return default_beacons[category] + end + return nil +end + +------------------------------------------------------------------------------- +---Get default beacons +---@param recipe RecipeData +---@return FactoryData +function User.getCurrentDefaultBeacon(recipe) + local default_beacons = User.getDefaultBeacons(recipe) or {} + local current_beacon_selection = User.getParameter("current_beacon_selection") or 1 + return default_beacons[current_beacon_selection] or {} +end + +------------------------------------------------------------------------------- +---Set default beacon +---@param recipe table +function User.setDefaultBeacons(recipe) + local default_beacons = User.getParameter("default_beacons") or {} + local recipe_prototype = RecipePrototype(recipe) + local category = recipe_prototype:getCategory() + local beacons = recipe.beacons + local default_category = {} + if category ~= nil then + for _, beacon in pairs(beacons) do + local default_beacon = {name = beacon.name, combo = beacon.combo, per_factory = beacon.per_factory, per_factory_constant = beacon.per_factory_constant} + if beacon.module_priority ~= nil then + default_beacon.module_priority = {} + for _, priority in pairs(beacon.module_priority) do + table.insert(default_beacon.module_priority, {name = priority.name, value = priority.value}) + end + end + table.insert(default_category, default_beacon) + end + default_beacons[category] = default_category + User.setParameter("default_beacons", default_beacons) + end +end + +------------------------------------------------------------------------------- +---Get version +---@return string +function User.getVersion() + local parameter = User.get() + return parameter["version"] or "" +end + +------------------------------------------------------------------------------- +---Set version +---@return any +function User.setVersion() + local parameter = User.get() + parameter["version"] = User.version + return User.version +end + +------------------------------------------------------------------------------- +---Set +---@param property string +---@param value any +---@return any +function User.set(property, value) + User.setVersion() + local parameter = User.get() + parameter[property] = value + return value +end + +------------------------------------------------------------------------------- +---Set parameter +---@param property string +---@param value any +---@return nil +function User.setParameter(property, value) + if property == nil then + return nil + end + User.setVersion() + local parameter = User.get("parameter") + parameter[property] = value + return value +end + +------------------------------------------------------------------------------- +---Create next event +---@param event table +---@param classname string +---@param method any +---@param index any +---@return table +function User.createNextEvent(event, classname, method, index) + if event == nil then + User.setParameter("next_event", nil) + local auto_pause = User.getParameter("auto-pause") + if not(game.is_multiplayer()) then + game.tick_paused = auto_pause + end + return {wait=false, method=method} + end + local index_name = string.format("index_%s",method) + event[index_name] = index + event.method = method + User.setParameter("next_event", {type_event=event.type, event=event, classname=classname}) + game.tick_paused = false + return {wait=true, method=method} +end + +------------------------------------------------------------------------------- +---Set preference +---@param type string +---@param name string +---@param value any +---@return any +function User.setPreference(type, name, value) + if type == nil then + return nil + end + User.setVersion() + local preferences = User.get("preferences") + if name == nil then + local preference = defines.constant.preferences[type] + if value == nil then + value = preference.default_value + end + if preference.minimum_value ~= nil and value < preference.minimum_value then + value = preference.default_value + end + if preference.maximum_value ~= nil and value > preference.maximum_value then + value = preference.default_value + end + + preferences[type] = value + else + local preference_name = string.format("%s_%s", type, name) + preferences[preference_name] = value + end + return value +end + +------------------------------------------------------------------------------- +---Get navigate +---@param property string +---@return table +function User.getNavigate(property) + local navigate = User.get("navigate") + if navigate ~= nil and property ~= nil then + return navigate[property] + elseif property ~= nil then + navigate[property] = {} + return navigate[property] + end + return navigate +end + +------------------------------------------------------------------------------- +---Set navigate +---@param property string +---@param value any +---@return any +function User.setNavigate(property, value) + User.setVersion() + local navigate = User.get("navigate") + navigate[property] = value + return value +end + +------------------------------------------------------------------------------- +---Get user settings +---@return table +function User.getSettings() + local data_user = User.get() + if data_user["settings"] == nil then + data_user["settings"] = User.getDefaultSettings() + end + return data_user["settings"] +end + +------------------------------------------------------------------------------- +---Get user settings +---@param property string +---@return any +function User.getSetting(property) + local settings = User.getSettings() + if settings ~= nil and property ~= nil then + local value = settings[property] + if value == nil then + value = User.getDefaultSettings()[property] + end + return value + end + return settings +end + +------------------------------------------------------------------------------- +---Set setting +---@param property string +---@param value any +---@return any +function User.setSetting(property, value) + User.setVersion() + local settings = User.get("settings") + settings[property] = value + return value +end + +------------------------------------------------------------------------------- +---Get settings +---@param name string +---@return any +function User.getModSetting(name) + local property = nil + local property_name = string.format("%s_%s",User.prefixe,name) + if Player.native() ~= nil then + property = Player.native().mod_settings[property_name] + else + property = settings.global[property_name] + end + if property ~= nil then + return property.value + else + return defines.constant.settings_mod[name].default_value + end +end + +------------------------------------------------------------------------------- +---Get settings +---@param name string +---@return any +function User.getModGlobalSetting(name) + local property = nil + local property_name = string.format("%s_%s",User.prefixe,name) + property = settings.global[property_name] + if property ~= nil then + return property.value + else + return defines.constant.settings_mod[name].default_value + end +end + +------------------------------------------------------------------------------- +---Get preference settings +---@param type string +---@param name string +---@return any +function User.getPreferenceSetting(type, name) + local preference_type = User.getPreference(type) + if name == nil then + local preference = defines.constant.preferences[type] + if preference_type == nil then + return preference.default_value + end + if preference.minimum_value ~= nil and preference_type < preference.minimum_value then + return preference.default_value + end + if preference.maximum_value ~= nil and preference_type > preference.maximum_value then + return preference.default_value + end + return preference_type + end + if preference_type == nil then return false end + local preference_name = User.getPreference(type, name) + if preference_name ~= nil then + return preference_name + else + if defines.constant.preferences[type].items == nil or defines.constant.preferences[type].items[name] == nil then return false end + return defines.constant.preferences[type].items[name] + end +end + +------------------------------------------------------------------------------- +---Reset global variable for user +function User.reset() + local user_name = User.name() + global["users"][user_name] = {} +end + +------------------------------------------------------------------------------- +---Reset global variable for all user +function User.resetAll() + global["users"] = {} +end + +------------------------------------------------------------------------------- +---Set Close Form +---@param classname string +---@param location table +function User.setCloseForm(classname, location) + local navigate = User.getNavigate() + if navigate[classname] == nil then navigate[classname] = {} end + navigate[classname]["open"] = false + if string.find(classname, "HMProductionPanel") then + game.tick_paused = false + end + navigate[classname]["location"] = location + navigate[classname]["tips"] = nil +end + +------------------------------------------------------------------------------- +---Get location Form +---@param classname string +---@return table +function User.getLocationForm(classname) + local navigate = User.getNavigate() + if User.getPreferenceSetting("ui_glue") == true and User.getPreferenceSetting("ui_glue", classname) == true then + if navigate[User.tab_name] == nil or navigate[User.tab_name]["location"] == nil then return {x=50,y=50} end + return navigate[User.tab_name]["location"] + else + if navigate[classname] == nil or navigate[classname]["location"] == nil then return {x=200,y=100} end + return navigate[classname]["location"] + end +end + +------------------------------------------------------------------------------- +---Set Active Form +---@param classname string +function User.setActiveForm(classname) + local navigate = User.getNavigate() + if User.getPreferenceSetting("ui_auto_close") == true then + if User.getPreferenceSetting("ui_auto_close", classname) == true then + for form_name,form in pairs(navigate) do + if Controller:getView(form_name) ~= nil and form_name ~= classname and User.getPreferenceSetting("ui_auto_close", form_name) == true then + Controller:getView(form_name):close() + end + end + end + end + if string.find(classname, "HMProductionPanel") then + if not(game.is_multiplayer()) and User.getParameter("auto-pause") then + game.tick_paused = true + else + game.tick_paused = false + end + end + + if navigate[classname] == nil then navigate[classname] = {} end + navigate[classname]["open"] = true +end + +------------------------------------------------------------------------------- +---Get main sizes +---@return number, number, number +function User.getMainSizes() + local width , height, scale = Player.getDisplaySizes() + local display_ratio_horizontal = User.getModSetting("display_ratio_horizontal") + local display_ratio_vertictal = User.getModSetting("display_ratio_vertical") + if type(width) == "number" and type(height) == "number" then + local width_main = math.ceil(width*display_ratio_horizontal) + local height_main = math.ceil(height*display_ratio_vertictal) + return width_main, height_main, scale + end + return 800, 600, scale +end + +------------------------------------------------------------------------------- +---update +function User.update() + if User.getVersion() ~= User.version then + User.reset() + end +end + +------------------------------------------------------------------------------- +---Add translate +---@param request table --{player_index=number, localised_string=#string, result=#string, translated=#boolean} +function User.addTranslate(request) + if request.translated == true then + local localised_string = request.localised_string + local string_translated = request.result + if type(localised_string) == "table" then + local localised_value = localised_string[1] + if localised_value ~= nil and localised_value ~= "" then + local _,key = string.match(localised_value,"([^.]*).([^.]*)") + if key ~= nil and key ~= "" then + local translated = User.get("translated") + translated[key] = string_translated + end + end + end + end +end + +------------------------------------------------------------------------------- +---Is translate +---@return boolean +function User.isTranslate() + local translated = User.get("translated") + return translated ~= nil and table.size(translated) > 0 +end + +------------------------------------------------------------------------------- +---Get translate +---@param name string +---@return any +function User.getTranslate(name) + local translated = User.get("translated") + if translated == nil or translated[name] == nil then return name end + return translated[name] +end + +------------------------------------------------------------------------------- +---Reset translate +function User.resetTranslate() + local data_user = User.get() + data_user["translated"] = {} +end + +------------------------------------------------------------------------------- +---Return Cache User +---@param classname string +---@param name string +---@return table +function User.getCache(classname, name) + local data = User.get("cache") + if classname == nil and name == nil then return data end + if data[classname] == nil or data[classname][name] == nil then return nil end + return data[classname][name] +end + +------------------------------------------------------------------------------- +---Set Cache User +---@param classname string +---@param name string +---@param value any +function User.setCache(classname, name, value) + local data = User.get("cache") + if data[classname] == nil then data[classname] = {} end + data[classname][name] = value +end + +------------------------------------------------------------------------------- +---Has User Cache +---@param classname string +---@param name string +---@return boolean +function User.hasCache(classname, name) + local data = User.get("cache") + return data[classname] ~= nil and data[classname][name] ~= nil +end + +------------------------------------------------------------------------------- +---Reset cache +---@param classname string +---@param name string +function User.resetCache(classname, name) + local data = User.get("cache") + if classname == nil and name == nil then + User.set("cache",{}) + elseif data[classname] ~= nil and name == nil then + data[classname] = nil + elseif data[classname] ~= nil then + data[classname][name] = nil + end +end + +------------------------------------------------------------------------------- +---Get Function Product Sorter +---@return function +function User.getProductSorter() + local display_product_order = User.getPreferenceSetting("display_product_order") + if display_product_order == "name" then + return function(t,a,b) return t[b].name > t[a].name end + elseif display_product_order == "cost" then + return function(t,a,b) return t[b].amount < t[a].amount end + end + return nil +end + +------------------------------------------------------------------------------- +---Get Function Product Sorter +function User.setParameterObjects(classname, model_id, block_id, recipe_id) + local parameter_objects = string.format("%s_%s", classname, "objects") + User.setParameter(parameter_objects, {name=parameter_objects, model=model_id, block=block_id, recipe=recipe_id}) +end + +return User diff --git a/helmod/dialog/AdminPanel.lua b/helmod/dialog/AdminPanel.lua new file mode 100644 index 00000000..65257844 --- /dev/null +++ b/helmod/dialog/AdminPanel.lua @@ -0,0 +1,816 @@ +------------------------------------------------------------------------------- +---Class to build panel +---@class AdminPanel +AdminPanel = newclass(Form,function(base,classname) + Form.init(base,classname) +end) + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function AdminPanel:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On initialization +function AdminPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-button-admin"}) +end + +------------------------------------------------------------------------------- +---Return button caption +---@return table +function AdminPanel:getButtonCaption() + return {"helmod_result-panel.tab-button-admin"} +end + +------------------------------------------------------------------------------- +---Get Button Sprites +---@return string,string +function AdminPanel:getButtonSprites() + return defines.sprites.database_settings.white,defines.sprites.database_settings.black +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function AdminPanel:isVisible() + return Player.isAdmin() +end + +------------------------------------------------------------------------------- +---Is special +---@return boolean +function AdminPanel:isSpecial() + return true +end + +------------------------------------------------------------------------------- +---Get or create tab panel +---@return LuaGuiElement +function AdminPanel:getTabPane() + local content_panel = self:getFrameDeepPanel("panel") + local panel_name = "tab_panel" + local name = table.concat({self.classname, "change-tab", panel_name},"=") + if content_panel[name] ~= nil and content_panel[name].valid then + return content_panel[name] + end + local panel = GuiElement.add(content_panel, GuiTabPane(self.classname, "change-tab", panel_name)) + return panel +end + +------------------------------------------------------------------------------- +---Get or create tab panel +---@param panel_name string +---@param caption string +---@return LuaGuiElement +function AdminPanel:getTab(panel_name, caption) + local content_panel = self:getTabPane() + local scroll_name = "scroll-" .. panel_name + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption(caption)) + local scroll_panel = GuiElement.add(content_panel, GuiScroll(scroll_name):style("helmod_scroll_pane"):policy(true)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create cache tab panel +---@return LuaGuiElement +function AdminPanel:getCacheTab() + return self:getTab("cache-tab-panel", {"helmod_result-panel.cache-list"}) +end + +------------------------------------------------------------------------------- +---Get or create rule tab panel +---@return LuaGuiElement +function AdminPanel:getRuleTab() + return self:getTab("rule-tab-panel", {"helmod_result-panel.rule-list"}) +end + +------------------------------------------------------------------------------- +---Get or create sheet tab panel +---@return LuaGuiElement +function AdminPanel:getSheetTab() + return self:getTab("sheet-tab-panel", {"helmod_result-panel.sheet-list"}) +end + +------------------------------------------------------------------------------- +---Get or create mods tab panel +---@return LuaGuiElement +function AdminPanel:getModTab() + return self:getTab("mod-tab-panel", {"helmod_common.mod-list"}) +end + +------------------------------------------------------------------------------- +---Get or create gui tab panel +---@return LuaGuiElement +function AdminPanel:getGuiTab() + return self:getTab("gui-tab-panel", {"helmod_common.gui-list"}) +end + +------------------------------------------------------------------------------- +---Get or create global tab panel +---@return LuaGuiElement +function AdminPanel:getGlobalTab() + return self:getTab("global-tab-panel", "Global") +end + +------------------------------------------------------------------------------- +---is global tab panel +---@return boolean +function AdminPanel:isGlobalTab() + return self:getTabPane()["global-tab-panel"] ~= nil +end + +------------------------------------------------------------------------------- +---Get or create conversion tab panel +---@return LuaGuiElement +function AdminPanel:getConversionTab() + return self:getTab("conversion-tab-panel", "Conversion") +end + +------------------------------------------------------------------------------- +---is conversion tab panel +---@return boolean +function AdminPanel:isConversionTab() + return self:getTabPane()["conversion-tab-panel"] ~= nil +end + +------------------------------------------------------------------------------- +---On Update +---@param event LuaEvent +function AdminPanel:onUpdate(event) + self:updateCache() + self:updateRule() + self:updateSheet() + self:updateMod() + self:updateGui() + self:updateConversion() + self:updateGlobal() + + self:getTabPane().selected_tab_index = User.getParameter("admin_selected_tab_index") or 1 +end + +------------------------------------------------------------------------------- +---Update Conversion Tab +function AdminPanel:updateConversion() + if self:isConversionTab() then return end + local scroll_panel = self:getConversionTab() + local table_panel = GuiElement.add(scroll_panel, GuiTable("list-table"):column(5)) + table_panel.style.cell_padding = 5 + table_panel.vertical_centering = false + + GuiElement.add(table_panel, GuiLabel("label-encoded-text"):caption("Encoded Text")) + GuiElement.add(table_panel, GuiLabel("label-actions"):caption("Actions")) + GuiElement.add(table_panel, GuiLabel("label-decoded-text"):caption("Decoded Text")) + GuiElement.add(table_panel, GuiLabel("label-replacement"):caption("Replacement")) + GuiElement.add(table_panel, GuiLabel("label-content"):caption("Content")) + + GuiElement.add(table_panel, GuiTextBox("encoded-text")) + + local actions = GuiElement.add(table_panel, GuiFlowV("actions")) + GuiElement.add(actions, GuiButton(self.classname, "string-decode"):caption("Decode ==>")) + GuiElement.add(actions, GuiButton(self.classname, "string-encode"):caption("<== Encode")) + + local decoded_textbox = GuiElement.add(table_panel, GuiTextBox("decoded-text")) + decoded_textbox.style.height = 600 + + local elements_panel = GuiElement.add(table_panel, GuiFlowV("elements")) + GuiElement.add(elements_panel, GuiLabel("label-entities"):caption("Entities")) + local entities_view = GuiElement.add(elements_panel, GuiFlowV("entities")) + GuiElement.add(elements_panel, GuiLabel("label-tiles"):caption("Tiles")) + local tiles_view = GuiElement.add(elements_panel, GuiFlowV("tiles")) + GuiElement.add(elements_panel, GuiButton(self.classname, "apply_replace"):caption("Apply")) + + local tree_view = GuiElement.add(table_panel, GuiScroll("tree_view")) + tree_view.style.height = 600 + local root_branch = GuiElement.add(tree_view, GuiFlowV("content")) + root_branch.style.vertically_stretchable = false +end + +------------------------------------------------------------------------------- +---Update Gui Tab +function AdminPanel:updateGui() + ---Rule List + local scroll_panel = self:getGuiTab() + scroll_panel.clear() + + local table_panel = GuiElement.add(scroll_panel, GuiTable("list-table"):column(3):style("helmod_table_border")) + table_panel.vertical_centering = false + table_panel.style.horizontal_spacing = 5 + + self:addCellHeader(table_panel, "location", {"",helmod_tag.font.default_bold, {"helmod_common.location"}, helmod_tag.font.close}) + self:addCellHeader(table_panel, "_name", {"",helmod_tag.font.default_bold, {"helmod_result-panel.col-header-name"}, helmod_tag.font.close}) + self:addCellHeader(table_panel, "mod", {"",helmod_tag.font.default_bold, {"helmod_common.mod"}, helmod_tag.font.close}) + + local index = 0 + for _,location in pairs({"top","left","center","screen","goal"}) do + for _, element in pairs(Player.getGui(location).children) do + if element.name == "mod_gui_button_flow" or element.name == "mod_gui_frame_flow" then + for _, element in pairs(element.children) do + GuiElement.add(table_panel, GuiLabel("location", index):caption(location)) + GuiElement.add(table_panel, GuiLabel("_name", index):caption(element.name)) + GuiElement.add(table_panel, GuiLabel("mod", index):caption(element.get_mod() or "base")) + index = index + 1 + end + else + GuiElement.add(table_panel, GuiLabel("location", index):caption(location)) + GuiElement.add(table_panel, GuiLabel("_name", index):caption(element.name)) + GuiElement.add(table_panel, GuiLabel("mod", index):caption(element.get_mod() or "base")) + index = index + 1 + end + end + end +end + +------------------------------------------------------------------------------- +---Update Mod Tab +function AdminPanel:updateMod() + ---Rule List + local scroll_panel = self:getModTab() + scroll_panel.clear() + + local table_panel = GuiElement.add(scroll_panel, GuiTable("list-table"):column(2):style("helmod_table_border")) + table_panel.vertical_centering = false + table_panel.style.horizontal_spacing = 50 + + self:addCellHeader(table_panel, "_name", {"",helmod_tag.font.default_bold, {"helmod_result-panel.col-header-name"}, helmod_tag.font.close}) + self:addCellHeader(table_panel, "version", {"",helmod_tag.font.default_bold, {"helmod_common.version"}, helmod_tag.font.close}) + + for name, version in pairs(game.active_mods) do + GuiElement.add(table_panel, GuiLabel("_name", name):caption(name)) + GuiElement.add(table_panel, GuiLabel("version", name):caption(version)) + end +end + +------------------------------------------------------------------------------- +---Update Cache Tab +function AdminPanel:updateCache() + ---Rule List + local scroll_panel = self:getCacheTab() + scroll_panel.clear() + + GuiElement.add(scroll_panel, GuiLabel("warning"):caption({"", helmod_tag.color.orange, helmod_tag.font.default_large_bold, "Do not use this panel, unless absolutely necessary", helmod_tag.font.close, helmod_tag.color.close})) + GuiElement.add(scroll_panel, GuiButton(self.classname, "generate-cache"):sprite("menu", defines.sprites.process.black, defines.sprites.process.black):style("helmod_button_menu_sm_red"):tooltip("Generate missing cache")) + + local table_panel = GuiElement.add(scroll_panel, GuiTable("list-table"):column(2)) + table_panel.vertical_centering = false + table_panel.style.horizontal_spacing = 50 + + if table.size(Cache.get()) > 0 then + local translate_panel = GuiElement.add(table_panel, GuiFlowV("global-caches")) + GuiElement.add(translate_panel, GuiLabel("translate-label"):caption("Global caches"):style("helmod_label_title_frame")) + local result_table = GuiElement.add(translate_panel, GuiTable("list-data"):column(3)) + self:addCacheListHeader(result_table) + + for key1, data1 in pairs(Cache.get()) do + self:addCacheListRow(result_table, "caches", key1, nil, nil, nil, data1) + for key2, data2 in pairs(data1) do + self:addCacheListRow(result_table, "caches", key1, key2, nil, nil, data2) + end + end + end + + local users_data = global["users"] + if table.size(users_data) > 0 then + local cache_panel = GuiElement.add(table_panel, GuiFlowV("user-caches")) + GuiElement.add(cache_panel, GuiLabel("translate-label"):caption("User caches"):style("helmod_label_title_frame")) + local result_table = GuiElement.add(cache_panel, GuiTable("list-data"):column(3)) + self:addCacheListHeader(result_table) + + for key1, data1 in pairs(users_data) do + self:addCacheListRow(result_table, "users", key1, nil, nil, nil, data1) + for key2, data2 in pairs(data1) do + self:addCacheListRow(result_table, "users", key1, key2, nil, nil, data2) + if key2 == "cache" then + for key3, data3 in pairs(data2) do + self:addCacheListRow(result_table, "users", key1, key2, key3, nil, data3) + if string.find(key3, "^HM.*") then + for key4, data4 in pairs(data3) do + self:addCacheListRow(result_table, "users", key1, key2, key3, key4, data4) + end + end + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Update Rule Tab +function AdminPanel:updateRule() + ---Rule List + local scroll_panel = self:getRuleTab() + scroll_panel.clear() + + local menu_group = GuiElement.add(scroll_panel,GuiFlowH("menu")) + GuiElement.add(menu_group, GuiButton("HMRuleEdition", "OPEN"):style("helmod_button_bold"):caption({"helmod_result-panel.add-button-rule"})) + GuiElement.add(menu_group, GuiButton(self.classname, "reset-rules"):style("helmod_button_bold"):caption({"helmod_result-panel.reset-button-rule"})) + local count_rule = #Model.getRules() + if count_rule > 0 then + + local result_table = GuiElement.add(scroll_panel, GuiTable("list-data"):column(8):style("helmod_table-rule-odd")) + + self:addRuleListHeader(result_table) + + for rule_id, element in spairs(Model.getRules(), function(t,a,b) return t[b].index > t[a].index end) do + self:addRuleListRow(result_table, element, rule_id) + end + + end +end + +------------------------------------------------------------------------------- +---Update Sheet Tab +function AdminPanel:updateSheet() + ---Sheet List + local scroll_panel = self:getSheetTab() + scroll_panel.clear() + + if table.size(global.models) > 0 then + + local result_table = GuiElement.add(scroll_panel, GuiTable("list-data"):column(3):style("helmod_table-odd")) + + self:addSheetListHeader(result_table) + + local i = 0 + for _, element in spairs(global.models, function(t,a,b) return t[b].owner > t[a].owner end) do + self:addSheetListRow(result_table, element) + end + + end +end + +------------------------------------------------------------------------------- +---Add Translate List header +---@param itable LuaGuiElement +function AdminPanel:addTranslateListHeader(itable) + ---col action + self:addCellHeader(itable, "action", {"helmod_result-panel.col-header-action"}) + ---data + self:addCellHeader(itable, "header-owner", {"helmod_result-panel.col-header-owner"}) + self:addCellHeader(itable, "header-total", {"helmod_result-panel.col-header-total"}) +end + +------------------------------------------------------------------------------- +---Add Cache List header +---@param itable LuaGuiElement +function AdminPanel:addCacheListHeader(itable) + ---col action + self:addCellHeader(itable, "action", {"helmod_result-panel.col-header-action"}) + ---data + self:addCellHeader(itable, "header-owner", {"helmod_result-panel.col-header-owner"}) + self:addCellHeader(itable, "header-total", {"helmod_result-panel.col-header-total"}) +end + +------------------------------------------------------------------------------- +---Add row translate List +---@param itable LuaGuiElement +---@param user_name string +---@param user_data table +function AdminPanel:addTranslateListRow(itable, user_name, user_data) + ---col action + local cell_action = GuiElement.add(itable, GuiTable("action", user_name):column(4)) + + ---col owner + GuiElement.add(itable, GuiLabel("owner", user_name):caption(user_name)) + + ---col translated + GuiElement.add(itable, GuiLabel("total", user_name):caption(table.size(user_data.translated))) + +end + +------------------------------------------------------------------------------- +---Add row cache List +---@param gui_table LuaGuiElement +---@param class_name string +---@param key1 string +---@param key2 string +---@param key3 string +---@param key4 string +---@param data table +function AdminPanel:addCacheListRow(gui_table, class_name, key1, key2, key3, key4, data) + local caption = "" + if type(data) == "table" then + caption = table.size(data) + else + caption = data + end + + ---col action + local cell_action = GuiElement.add(gui_table, GuiTable("action", string.format("%s-%s-%s-%s", key1, key2, key3, key4)):column(4)) + if key2 == nil and key3 == nil and key4 == nil then + if class_name ~= "users" then + GuiElement.add(cell_action, GuiButton(self.classname, "delete-cache", class_name, key1):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"helmod_button.remove"})) + GuiElement.add(cell_action, GuiButton(self.classname, "refresh-cache", class_name, key1):sprite("menu", defines.sprites.refresh.black, defines.sprites.refresh.black):style("helmod_button_menu_sm_red"):tooltip({"helmod_button.refresh"})) + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1):caption({"", helmod_tag.color.orange, helmod_tag.font.default_large_bold, string.format("%s", key1), "[/font]", helmod_tag.color.close})) + else + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1):caption({"", helmod_tag.color.blue, helmod_tag.font.default_large_bold, string.format("%s", key1), "[/font]", helmod_tag.color.close})) + end + + ---col count + GuiElement.add(gui_table, GuiLabel("total", key1):caption({"", helmod_tag.font.default_semibold, caption, "[/font]"})) + elseif key3 == nil and key4 == nil then + if class_name == "users" and (key2 == "translated" or key2 == "cache") then + GuiElement.add(cell_action, GuiButton(self.classname, "delete-cache", class_name, key1, key2):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1, key2):caption({"", helmod_tag.color.orange, helmod_tag.font.default_bold, "|-" , key2, "[/font]", helmod_tag.color.close})) + else + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1, key2):caption({"", helmod_tag.font.default_bold, "|-" , key2, "[/font]"})) + end + + ---col count + GuiElement.add(gui_table, GuiLabel("total", key1, key2):caption({"", helmod_tag.font.default_semibold, caption, "[/font]"})) + elseif key4 == nil then + if class_name == "users" then + GuiElement.add(cell_action, GuiButton(self.classname, "delete-cache", class_name, key1, key2, key3):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1, key2, key3):caption({"", helmod_tag.color.orange, helmod_tag.font.default_bold, "|\t\t\t|-" , key3, "[/font]", helmod_tag.color.close})) + else + ---col class + GuiElement.add(gui_table, GuiLabel("class", key1, key2, key3):caption({"", helmod_tag.font.default_bold, "|-" , key3, "[/font]"})) + end + + ---col count + GuiElement.add(gui_table, GuiLabel("total", key1, key2, key3):caption({"", helmod_tag.font.default_semibold, caption, "[/font]"})) + else + GuiElement.add(gui_table, GuiLabel("class", key1, key2, key3, key4):caption({"", helmod_tag.font.default_bold, "|\t\t\t|\t\t\t|-" , key4, "[/font]"})) + + ---col count + GuiElement.add(gui_table, GuiLabel("total", key1, key2, key3, key4):caption({"", helmod_tag.font.default_semibold, caption, "[/font]"})) + end + +end + +------------------------------------------------------------------------------- +---Add rule List header +---@param itable LuaGuiElement +function AdminPanel:addRuleListHeader(itable) + ---col action + self:addCellHeader(itable, "action", {"helmod_result-panel.col-header-action"}) + ---data + self:addCellHeader(itable, "header-index", {"helmod_result-panel.col-header-index"}) + self:addCellHeader(itable, "header-mod", {"helmod_result-panel.col-header-mod"}) + self:addCellHeader(itable, "header-name", {"helmod_result-panel.col-header-name"}) + self:addCellHeader(itable, "header-category", {"helmod_result-panel.col-header-category"}) + self:addCellHeader(itable, "header-type", {"helmod_result-panel.col-header-type"}) + self:addCellHeader(itable, "header-value", {"helmod_result-panel.col-header-value"}) + self:addCellHeader(itable, "header-excluded", {"helmod_result-panel.col-header-excluded"}) +end + +------------------------------------------------------------------------------- +---Add row Rule List +---@param gui_table LuaGuiElement +---@param rule table +---@param rule_id number +function AdminPanel:addRuleListRow(gui_table, rule, rule_id) + ---col action + local cell_action = GuiElement.add(gui_table, GuiTable("action", rule_id):column(4)) + GuiElement.add(cell_action, GuiButton(self.classname, "rule-remove", rule_id):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + + ---col index + GuiElement.add(gui_table, GuiLabel("index", rule_id):caption(rule.index)) + + ---col mod + GuiElement.add(gui_table, GuiLabel("mod", rule_id):caption(rule.mod)) + + ---col name + GuiElement.add(gui_table, GuiLabel("name", rule_id):caption(rule.name)) + + ---col category + GuiElement.add(gui_table, GuiLabel("category", rule_id):caption(rule.category)) + + ---col type + GuiElement.add(gui_table, GuiLabel("type", rule_id):caption(rule.type)) + + ---col value + GuiElement.add(gui_table, GuiLabel("value", rule_id):caption(rule.value)) + + ---col value + GuiElement.add(gui_table, GuiLabel("excluded", rule_id):caption(rule.excluded)) + +end + +------------------------------------------------------------------------------- +---Add Sheet List header +---@param itable LuaGuiElement +function AdminPanel:addSheetListHeader(itable) + ---col action + self:addCellHeader(itable, "action", {"helmod_result-panel.col-header-action"}) + ---data owner + self:addCellHeader(itable, "owner", {"helmod_result-panel.col-header-owner"}) + self:addCellHeader(itable, "element", {"helmod_result-panel.col-header-sheet"}) +end + +------------------------------------------------------------------------------- +---Add row Sheet List +---@param gui_table LuaGuiElement +---@param model table +function AdminPanel:addSheetListRow(gui_table, model) + ---col action + local cell_action = GuiElement.add(gui_table, GuiTable("action", model.id):column(4)) + if model.share ~= nil and bit32.band(model.share, 1) > 0 then + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "read"):style("helmod_button_selected"):caption("R"):tooltip({"tooltip.share-mod", {"helmod_common.reading"}})) + else + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "read"):style("helmod_button_default"):caption("R"):tooltip({"tooltip.share-mod", {"helmod_common.reading"}})) + end + if model.share ~= nil and bit32.band(model.share, 2) > 0 then + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "write"):style("helmod_button_selected"):caption("W"):tooltip({"tooltip.share-mod", {"helmod_common.writing"}})) + else + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "write"):style("helmod_button_default"):caption("W"):tooltip({"tooltip.share-mod", {"helmod_common.writing"}})) + end + if model.share ~= nil and bit32.band(model.share, 4) > 0 then + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "delete"):style("helmod_button_selected"):caption("X"):tooltip({"tooltip.share-mod", {"helmod_common.removal"}})) + else + GuiElement.add(cell_action, GuiButton(self.classname, "share-model", model.id, "delete"):style("helmod_button_default"):caption("X"):tooltip({"tooltip.share-mod", {"helmod_common.removal"}})) + end + + ---col owner + local cell_owner = GuiElement.add(gui_table, GuiFrameH("owner", model.id):style(helmod_frame_style.hidden)) + GuiElement.add(cell_owner, GuiLabel(model.id):caption(model.owner or "empty"):style("helmod_label_right_70")) + + ---col element + local cell_element = GuiElement.add(gui_table, GuiFrameH("element", model.id):style(helmod_frame_style.hidden)) + local element = Model.firstRecipe(model.blocks) + if element ~= nil then + GuiElement.add(cell_element, GuiButtonSprite(self.classname, "donothing", model.id):sprite("recipe", element.name):tooltip(RecipePrototype(element):getLocalisedName())) + else + GuiElement.add(cell_element, GuiButton(self.classname, "donothing", model.id):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black):style("helmod_button_menu_selected")) + end + +end + +local color_name = "blue" +local color_index = 1 +local bar_thickness = 2 +------------------------------------------------------------------------------- +---Update Global Table +function AdminPanel:updateGlobal() + if self:isGlobalTab() then return end + local scroll_panel = self:getGlobalTab() + local root_branch = GuiElement.add(scroll_panel, GuiFlowV()) + root_branch.style.vertically_stretchable = false + self:createTree(root_branch, {global=global}, true) +end + +------------------------------------------------------------------------------- +---Create Tree +---@param parent LuaGuiElement +---@param list table +---@param expand boolean +function AdminPanel:createTree(parent, list, expand) + local data_info = table.data_info(list) + local index = 1 + local size = table.size(list) + for k,info in pairs(data_info) do + local tree_branch = GuiElement.add(parent, GuiFlowH()) + -- vertical bar + local vbar = GuiElement.add(tree_branch, GuiFrameV("vbar"):style("helmod_frame_product", color_name, color_index)) + vbar.style.width = bar_thickness + vbar.style.left_margin=15 + if index == size then + vbar.style.height = 12 + else + vbar.style.vertically_stretchable = true + vbar.style.bottom_margin=0 + end + -- content + local content = GuiElement.add(tree_branch, GuiFlowV("content")) + -- header + local header = GuiElement.add(content, GuiFlowH("header")) + local hbar = GuiElement.add(header, GuiFrameV("hbar"):style("helmod_frame_product", color_name, color_index)) + hbar.style.width = 5 + hbar.style.height = bar_thickness + hbar.style.top_margin=10 + hbar.style.right_margin=5 + if info.type == "table" then + local caption = {"", helmod_tag.font.default_bold, helmod_tag.color.green_light, k, helmod_tag.color.close, helmod_tag.font.close, " (", info.type,")"} + if expand then + GuiElement.add(header, GuiLabel("global-end"):caption(caption)) + else + local label = GuiElement.add(header, GuiLabel(self.classname, "global-update", "bypass"):caption(caption)) + label.tags = info + end + else + local caption = {"", helmod_tag.font.default_bold, helmod_tag.color.gold, k, helmod_tag.color.close, helmod_tag.font.close, "=", helmod_tag.font.default_bold, info.value, helmod_tag.font.close, " (", info.type,")"} + local label = GuiElement.add(header, GuiLabel("global-end"):caption(caption)) + end + -- next + local next = GuiElement.add(content, GuiFlowV("next")) + + if expand then + self:createTree(next, info.value, false) + else + next.visible = false + end + index = index + 1 + end +end + +------------------------------------------------------------------------------- +---Create Tree +---@param parent LuaGuiElement +---@param data table +function AdminPanel:createReplacerEntities(parent, entities) + parent.clear() + for name,entity in pairs(entities) do + local entity_cell = GuiElement.add(parent, GuiFlowH("entity", name)) + GuiElement.add(entity_cell, GuiButtonSelectSprite("original"):sprite("entity", name)) + GuiElement.add(entity_cell, GuiButtonSelectSprite("replacement"):choose("entity"):color("gray")) + end +end + +------------------------------------------------------------------------------- +---Create Tree +---@param parent LuaGuiElement +---@param data table +function AdminPanel:createReplacerTiles(parent, tiles) + parent.clear() + for name,tile in pairs(tiles) do + local tile_cell = GuiElement.add(parent, GuiFlowH("tile", name)) + GuiElement.add(tile_cell, GuiButtonSelectSprite("original"):sprite("tile", name)) + GuiElement.add(tile_cell, GuiButtonSelectSprite("replacement"):choose("tile"):color("gray")) + end +end +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function AdminPanel:onEvent(event) + if event.action == "change-tab" then + User.setParameter("admin_selected_tab_index", event.element.selected_tab_index) + end + + if not(User.isAdmin()) then return end + + if event.action == "global-update" then + local element = event.element + local content = element.parent.parent + local parent_next = content.next + if #parent_next.children > 0 then + for _,child in pairs(parent_next.children) do + child.destroy() + end + parent_next.visible = false + else + local list = element.tags.value + parent_next.visible = true + self:createTree(parent_next, list) + end + end + + if event.action == "rule-remove" then + local rule_id = event.item1 + if global.rules ~= nil then + table.remove(global.rules,rule_id) + table.reindex_list(global.rules) + end + Controller:send("on_gui_update", event) + end + if event.action == "reset-rules" then + Model.resetRules() + Controller:send("on_gui_update", event) + end + + if event.action == "string-decode" then + local parent = event.element.parent.parent + local decoded_textbox = parent["decoded-text"] + local encoded_textbox = parent["encoded-text"] + local input = string.sub(encoded_textbox.text,2) + local json = game.decode_string(input) + local result = Converter.indent(json) + decoded_textbox.text = result + + local tree_view = parent["tree_view"]["content"] + local data = game.json_to_table(json) + tree_view.clear() + self:createTree(tree_view, data) + + local entities_view = parent["elements"]["entities"] + local entities = Blueprint.get_entities(data) + self:createReplacerEntities(entities_view, entities) + + local tiles_view = parent["elements"]["tiles"] + local tiles = Blueprint.get_tiles(data) + self:createReplacerTiles(tiles_view, tiles) + end + + if event.action == "apply_replace" then + local parent = event.element.parent.parent + local decoded_textbox = parent["decoded-text"] + local decoded_text = decoded_textbox.text + + local entities_view = parent["elements"]["entities"] + for _, element in pairs(entities_view.children) do + local _, name_original = string.match(element.children_names[1],"([^=]*)=?([^=]*)") + local replacement_name = element.children_names[2] + local name_replacement = element[replacement_name].elem_value + if name_replacement ~= nil and name_replacement ~= "" then + local pattern = string.gsub(name_original, "-", "%%-") + decoded_text = string.gsub(decoded_text, pattern, name_replacement) + end + end + + local tiles_view = parent["elements"]["tiles"] + for _, element in pairs(tiles_view.children) do + local _, name_original = string.match(element.children_names[1],"([^=]*)=?([^=]*)") + local replacement_name = element.children_names[2] + local name_replacement = element[replacement_name].elem_value + if name_replacement ~= nil and name_replacement ~= "" then + local pattern = string.gsub(name_original, "-", "%%-") + decoded_text = string.gsub(decoded_text, pattern, name_replacement) + end + end + decoded_textbox.text = decoded_text + end + + if event.action == "string-encode" then + local parent = event.element.parent.parent + local decoded_textbox = parent["decoded-text"] + local encoded_textbox = parent["encoded-text"] + encoded_textbox.text = "0"..game.encode_string(decoded_textbox.text) + end + + if event.action == "delete-cache" then + if event.item1 ~= nil and global[event.item1] ~= nil then + if event.item2 == "" and event.item3 == "" and event.item4 == "" then + global[event.item1] = nil + elseif event.item3 == "" and event.item4 == "" then + global[event.item1][event.item2] = {} + elseif event.item4 == "" then + global[event.item1][event.item2][event.item3] = nil + else + global[event.item1][event.item2][event.item3][event.item4] = nil + end + Player.print("Deleted:", event.item1, event.item2, event.item3, event.item4) + else + Player.print("Not found to delete:", event.item1, event.item2, event.item3, event.item4) + end + Controller:send("on_gui_update", event) + end + + if event.action == "refresh-cache" then + global[event.item1][event.item2] = {} + + if event.item2 == "HMPlayer" then + Player.getResources() + Player.getProductionMachines() + else + local forms = {} + table.insert(forms, EntitySelector("HMEntitySelector")) + table.insert(forms, RecipeSelector("HMRecipeSelector")) + table.insert(forms, TechnologySelector("HMTechnologySelector")) + table.insert(forms, ItemSelector("HMItemSelector")) + table.insert(forms, FluidSelector("HMFluidSelector")) + for _,form in pairs(forms) do + if event.item2 == form.classname then + form:prepare() + end + end + end + + Controller:send("on_gui_update", event) + end + + if event.action == "generate-cache" then + Controller:on_init() + Controller:send("on_gui_update", event) + end + + if event.action == "share-model" then + local access = event.item2 + local model = global.models[event.item1] + if model ~= nil then + if access == "read" then + if model.share == nil or not(bit32.band(model.share, 1) > 0) then + model.share = 1 + else + model.share = 0 + end + end + if access == "write" then + if model.share == nil or not(bit32.band(model.share, 2) > 0) then + model.share = 3 + else + model.share = 1 + end + end + if access == "delete" then + if model.share == nil or not(bit32.band(model.share, 4) > 0) then + model.share = 7 + else + model.share = 3 + end + end + end + Controller:send("on_gui_refresh", event) + end +end \ No newline at end of file diff --git a/helmod/dialog/ArrangeModels.lua b/helmod/dialog/ArrangeModels.lua new file mode 100644 index 00000000..20bdf2c0 --- /dev/null +++ b/helmod/dialog/ArrangeModels.lua @@ -0,0 +1,159 @@ +------------------------------------------------------------------------------- +---Class to build ArrangeModels panel +---@class Form +ArrangeModels = newclass(Form) + +------------------------------------------------------------------------------- +---Initialization +function ArrangeModels:onInit() + self.panelCaption = ({"helmod_panel.arrange-models"}) +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function ArrangeModels:onBind() + Dispatcher:bind("on_gui_location", self, self.updateLocation) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ArrangeModels:onEvent(event) + +end + +local elements = nil + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ArrangeModels:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 50, + maximal_width = width_main, + minimal_height = 100, + maximal_height = 100 + } +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ArrangeModels:onUpdate(event) + local parent_panel = self:getPanel() + if elements == nil then + elements = {} + local models = Model.getModels() + local index = 0 + local table_index = GuiElement.add(parent_panel, GuiTable("table_index"):column(GuiElement.getIndexColumnNumber()):style("helmod_table_list")) + for _,model in pairs(models) do + self:addModelButton(table_index, model, index) + index = index + 1 + end + end +end + +------------------------------------------------------------------------------- +---On update +---@param index number +---@param model table +function ArrangeModels:addModelButton(parent_panel, model, index) + local element = Model.firstRecipe(model.blocks) + local button + if element ~= nil then + button = GuiElement.add(parent_panel, GuiButtonSelectSprite(self.classname, "move-item", model.id, index):sprite(element.type, element.name):tooltip(tooltip):color()) + else + button = GuiElement.add(parent_panel, GuiButton(self.classname, "move-item", model.id, index):sprite("menu", defines.sprites.status_help.black, defines.sprites.status_help.black):style("helmod_button_menu")) + button.style.width = 36 + --button.style.height = 36 + end + button.style.padding = 0 +end + +------------------------------------------------------------------------------- +---On update +---@param index number +---@param model table +function ArrangeModels:addModelFrame(index, model) + local parent_panel = self:getPanel() + local element = Model.firstRecipe(model.blocks) + local screen = Player.getGui("screen") + + local flow = GuiElement.add(screen, GuiFrameV(self.classname, "flow", model.id):style("frame")) + flow.style.padding = -4 + flow.style.margin = 0 + flow.style.size = 36 + + local position = parent_panel.location + position.x = position.x + 15 + index * 38 + position.y = position.y + 50 + flow.location = position + + local tooltip = GuiTooltipModel("tooltip.info-model"):element(model) + + local grip = GuiElement.add(flow, GuiEmptyWidget(self.classname, "grip", model.id):tooltip(tooltip)) + grip.drag_target = flow + grip.style.size = 36 + --button.drag_target = flow + + local button + if element ~= nil then + button = GuiElement.add(grip, GuiButtonSelectSprite(self.classname, "move-flow", model.id):sprite(element.type, element.name):tooltip(tooltip):color()) + else + button = GuiElement.add(grip, GuiButton(self.classname, "move-flow", model.id):sprite("menu", defines.sprites.status_help.black, defines.sprites.status_help.black):style("helmod_button_menu")) + button.style.width = 36 + --button.style.height = 36 + end + button.style.padding = 0 + button.ignored_by_interaction = true +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ArrangeModels:updateLocation(event) + if elements == nil then return end + local frame = event.element + if frame.name ~= self.classname and frame.name:find(self.classname) then + end + if frame.name == self.classname then + for _, frame in pairs(elements) do + end + end +end + +------------------------------------------------------------------------------- +---On close dialog +function ArrangeModels:onClose() + local screen = Player.getGui("screen") + for _, frame in pairs(screen.children) do + if frame.name:find(self.classname) then frame.destroy() end + end + elements = nil +end + +------------------------------------------------------------------------------- +---On close dialog +function ArrangeModels:Clean() + local screen = Player.getGui("screen") + for _, frame in pairs(screen.children) do + if frame.name:find(string.format("%s-%s", self.classname, "flow")) then frame.destroy() end + end + elements = nil +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ArrangeModels:onEvent(event) + local models = Model.getModels() + if event.action == "move-item" then + self:Clean() + local model_id = event.item1 + local model = models[model_id] + local index = event.item2 + self:addModelFrame(index, model) + end +end \ No newline at end of file diff --git a/helmod/dialog/Calculator.lua b/helmod/dialog/Calculator.lua new file mode 100644 index 00000000..70dc3beb --- /dev/null +++ b/helmod/dialog/Calculator.lua @@ -0,0 +1,194 @@ +------------------------------------------------------------------------------- +---Class to build Calculator panel +---@class Calculator +Calculator = newclass(Form) + +local display_panel = nil + +------------------------------------------------------------------------------- +---Initialization +function Calculator:onInit() + self.panelCaption = ({"helmod_calculator-panel.title"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function Calculator:onStyle(styles, width_main, height_main) + styles.flow_panel = nil +end + +------------------------------------------------------------------------------ +---Get Button Sprites +---@return string, string +function Calculator:getButtonSprites() + return defines.sprites.calculator.white,defines.sprites.calculator.black +end + +------------------------------------------------------------------------------- +---Is tool +---@return boolean +function Calculator:isTool() + return true +end + +------------------------------------------------------------------------------- +---Get or create column panel +-- +---@function [parent=#Calculator] getColumnPanel +-- +function Calculator:getColumnPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "main_panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name]["display_panel1"], content_panel[panel_name]["display_panel2"] + end + local panel = self:getFlowPanel(panel_name, "horizontal") + local display_panel1 = GuiElement.add(panel, GuiFrameV("display_panel1")) + display_panel1.style.vertically_stretchable = true + local display_panel2 = GuiElement.add(panel, GuiFrameV("display_panel2")) + display_panel2.style.vertically_stretchable = true + return display_panel1, display_panel2 +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function Calculator:onEvent(event) + ---import + if event.action == "compute" then + local text = event.element.text + local ok , err = pcall(function() + local result = formula(text) + self:addHistory(text, result) + User.setParameter("calculator_value", result or 0) + self:updateDisplay() + self:updateHistory() + end) + if not(ok) then + Player.print("Formula is not valid!") + end + end + if event.action == "selected-key" then + if event.item1 == "enter" then + local ok , err = pcall(function() + local calculator_value = User.getParameter("calculator_value") or 0 + local result = formula(calculator_value) + self:addHistory(calculator_value, result) + User.setParameter("calculator_value", result or 0) + self:updateDisplay() + self:updateHistory() + end) + if not(ok) then + Player.print("Formula is not valid!") + end + elseif event.item1 == "clear" then + User.setParameter("calculator_value", 0) + self:updateDisplay() + else + local calculator_value = User.getParameter("calculator_value") or 0 + if calculator_value == 0 then calculator_value = "" end + User.setParameter("calculator_value", calculator_value..event.item1) + self:updateDisplay() + end + end +end + +------------------------------------------------------------------------------- +---Add history +---@param calculator_value string +---@param result number +function Calculator:addHistory(calculator_value, result) + if calculator_value ~= result then + local calculator_history = User.getParameter("calculator_history") or {} + table.insert(calculator_history,1,string.format("%s=%s",calculator_value,result)) + if #calculator_history > 9 then table.remove(calculator_history,#calculator_history) end + User.setParameter("calculator_history", calculator_history) + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function Calculator:onUpdate(event) + self:updateDisplay() + self:updateKeyboard() + self:updateHistory() +end + +------------------------------------------------------------------------------- +---Update display +function Calculator:updateDisplay() + local keyboard_panel = self:getFrameDeepPanel("display") + keyboard_panel.clear() + + local calculator_value = User.getParameter("calculator_value") or 0 + display_panel = GuiElement.add(keyboard_panel, GuiTextField(self.classname, "compute"):text(calculator_value):style("helmod_textfield_calculator")) + --display_panel.style.horizontally_stretchable = true + display_panel.style.width=352 + display_panel.style.horizontal_align = "right" + display_panel.focus() +end +------------------------------------------------------------------------------- +---Update keyboard +function Calculator:updateKeyboard() + local _,keyboard_panel = self:getColumnPanel() + keyboard_panel.clear() + + local table_panel = GuiElement.add(keyboard_panel, GuiTable("keys"):column(4)) + local keys = {} + table.insert(keys, {key="clear" ,caption="C", tooltip="clear"}) + table.insert(keys, {key="(" ,caption="("}) + table.insert(keys, {key=")" ,caption=")"}) + table.insert(keys, {key="" ,caption=""}) + + table.insert(keys, {key="" ,caption=""}) + table.insert(keys, {key="^" ,caption="^", tooltip="x pow y"}) + table.insert(keys, {key="%" ,caption="%", tooltip="x modulo y"}) + table.insert(keys, {key="/" ,caption="/"}) + + table.insert(keys, {key="7" ,caption="7"}) + table.insert(keys, {key="8" ,caption="8"}) + table.insert(keys, {key="9" ,caption="9"}) + table.insert(keys, {key="*" ,caption="X"}) + + table.insert(keys, {key="4" ,caption="4"}) + table.insert(keys, {key="5" ,caption="5"}) + table.insert(keys, {key="6" ,caption="6"}) + table.insert(keys, {key="-" ,caption="-"}) + + table.insert(keys, {key="1" ,caption="1"}) + table.insert(keys, {key="2" ,caption="2"}) + table.insert(keys, {key="3" ,caption="3"}) + table.insert(keys, {key="+" ,caption="+"}) + + table.insert(keys, {key="" ,caption=""}) + table.insert(keys, {key="0" ,caption="0"}) + table.insert(keys, {key="." ,caption="."}) + table.insert(keys, {key="enter" ,caption="="}) + + for index,button in pairs(keys) do + if button.key == "" then + GuiElement.add(table_panel, GuiLabel("vide",index)) + else + GuiElement.add(table_panel, GuiButton(self.classname, "selected-key",button.key):caption(button.caption):tooltip(button.tooltip):style("helmod_button_calculator")) + end + end + +end + +------------------------------------------------------------------------------- +---Update history +function Calculator:updateHistory() + local history_panel = self:getColumnPanel() + history_panel.clear() + history_panel.style.width=200 + + local calculator_history = User.getParameter("calculator_history") or {} + for index, line in pairs(calculator_history) do + GuiElement.add(history_panel, GuiLabel("history",index):caption(line)) + end + +end \ No newline at end of file diff --git a/helmod/dialog/Download.lua b/helmod/dialog/Download.lua new file mode 100644 index 00000000..ef7e603a --- /dev/null +++ b/helmod/dialog/Download.lua @@ -0,0 +1,69 @@ +------------------------------------------------------------------------------- +---Class to build Download panel +---@class Download +Download = newclass(FormModel) + +local transfert_mode = nil + +------------------------------------------------------------------------------- +---Initialization +function Download:onInit() + self.panelCaption = ({"helmod_download-panel.title"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function Download:onStyle(styles, width_main, height_main) + styles.flow_panel = nil +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function Download:onEvent(event) + ---import + if event.action == "download-model" then + local download_panel = event.element.parent + local text_box = download_panel["data-text"] + local data_table = Converter.read(text_box.text) + if data_table ~= nil then + local model = Model.newModel() + model.time = data_table.time + ModelBuilder.copyModel(model, data_table) + ModelCompute.update(model) + Controller:send("on_gui_refresh", event) + end + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function Download:onUpdate(event) + self:updateDownload(event) +end + +------------------------------------------------------------------------------- +---Update about Download +---@param event LuaEvent +function Download:updateDownload(event) + local model = self:getParameterObjects() + local data_string = "" + ---export + if event.item2 == "upload" then + local download_panel = self:getFramePanel("upload") + download_panel.clear() + data_string = Converter.write(model) + local text_box = GuiElement.add(download_panel, GuiTextBox("data-text"):text(data_string)) + end + ---import + if event.item2 == "download" then + local download_panel = self:getFramePanel("download") + download_panel.clear() + local text_box = GuiElement.add(download_panel, GuiTextBox("data-text"):text(data_string)) + GuiElement.add(download_panel, GuiButton(self.classname, "download-model", "download"):style("helmod_button_default"):caption({"helmod_common.download"})) + end +end \ No newline at end of file diff --git a/helmod/dialog/HelpPanel.lua b/helmod/dialog/HelpPanel.lua new file mode 100644 index 00000000..d5510c83 --- /dev/null +++ b/helmod/dialog/HelpPanel.lua @@ -0,0 +1,426 @@ +------------------------------------------------------------------------------- +---Class to build HelpPanel panel +---@class HelpPanel +HelpPanel = newclass(Form) + +local page_list = {} + +local help_data = {} +help_data.getting_start = { + name = "getting-start", + content = {} +} +help_data.getting_start.content.getting_start = { + sprite = "getting-start", + localised_text = "getting-start-panel", + desc = false, + list = "number", + count = 4 +} +help_data.getting_start.content.quick_start = { + sprite = "quick-start", + localised_text = "quick-start", + desc = true, + list = "number", + count = 8 +} +help_data.mod_settings = { + name = "mod-settings", + content = {} +} +help_data.mod_settings.content.mod_settings_map = { + sprite = "mod-settings-map", + localised_text = "mod-settings-map", + desc = false, + list = "none", + count = 10 +} +help_data.mod_settings.content.mod_settings_player = { + sprite = "mod-settings-player", + localised_text = "mod-settings-player", + desc = false, + list = "none", + count = 5 +} +help_data.preferences = { + name = "preferences", + content = {} +} +help_data.preferences.content.general = { + sprite = "preferences-general", + localised_text = "preferences-general", + desc = true, + list = "none", + count = 10 +} +help_data.preferences.content.ui = { + sprite = "preferences-ui", + localised_text = "preferences-ui", + desc = true, + list = "none", + count = 3 +} +help_data.preferences.content.module_priority = { + sprite = "preferences-module-priority", + localised_text = "preferences-module-priority", + desc = true, + list = "none", + count = 0 +} +help_data.preferences.content.items_logistic = { + sprite = "preferences-items-logistic", + localised_text = "preferences-items-logistic", + desc = true, + list = "none", + count = 0 +} +help_data.preferences.content.fluids_logistic = { + sprite = "preferences-fluids-logistic", + localised_text = "preferences-fluids-logistic", + desc = true, + list = "none", + count = 0 +} +help_data.selector = { + name = "recipe-selector", + content = {} +} +help_data.selector.content.recipe_selector = { + sprite = "recipe-selector", + localised_text = "recipe-selector-normal", + desc = true, + list = "none", + count = 7 +} +help_data.selector.content.recipe_selector_all = { + sprite = "recipe-selector-all", + localised_text = "recipe-selector-all", + desc = true, + list = "none", + count = 3 +} +help_data.selector.content.recipe_selector_helmod = { + sprite = "recipe-selector-helmod", + localised_text = "recipe-selector-helmod", + desc = true, + list = "none", + count = 3 +} +help_data.recipe_editor = { + name = "recipe-editor", + content = {} +} +help_data.recipe_editor.content.recipe_editor = { + sprite = "recipe-editor", + localised_text = "recipe-editor-general", + desc = true, + list = "number", + count = 6 +} +help_data.recipe_editor.content.recipe_editor_info = { + sprite = "recipe-editor-info", + localised_text = "recipe-editor-info", + desc = true, + list = "none", + count = 2 +} +help_data.recipe_editor.content.recipe_editor_factory = { + sprite = "recipe-editor-factory", + localised_text = "recipe-editor-factory", + desc = true, + list = "number", + count = 4 +} +help_data.recipe_editor.content.recipe_editor_beacon = { + sprite = "recipe-editor-beacon", + localised_text = "recipe-editor-beacon", + desc = true, + list = "number", + count = 4 +} +help_data.recipe_editor.content.recipe_editor_tools = { + sprite = "recipe-editor-tools", + localised_text = "recipe-editor-tools", + desc = true, + list = "number", + count = 10 +} +help_data.recipe_editor.content.recipe_editor_module_selection = { + sprite = "recipe-editor-module-selection", + localised_text = "recipe-editor-module-selection", + desc = true, + list = "number", + count = 4 +} +help_data.recipe_editor.content.recipe_editor_module_priority = { + sprite = "recipe-editor-module-priority", + localised_text = "recipe-editor-module-priority", + desc = true, + list = "number", + count = 6 +} + +help_data.production = { + name = "production", + content = {} +} +help_data.production.content.production_line = { + sprite = "production-line", + localised_text = "production-line", + desc = true, + list = "number", + count = 11 +} +help_data.production.content.production_block = { + sprite = "production-block", + localised_text = "production-block", + desc = true, + list = "number", + count = 14 +} +help_data.production.content.production_edition = { + sprite = "production-edition", + localised_text = "production-edition", + desc = true, + list = "none", + count = 4 +} +help_data.compute = { + name = "compute", + content = {} +} +help_data.compute.content.compute_order = { + sprite = "compute-order", + localised_text = "compute-order", + desc = true, + list = "none", + count = 7 +} +help_data.compute.content.compute_solver = { + localised_text = "compute-solver", + desc = true, + list = "none", + count = 5 +} +help_data.special_panel = { + name = "special-panel", + content = {} +} +help_data.special_panel.content.admin = { + sprite = "admin-tab", + localised_text = "special-panel-admin", + desc = true, + list = "none", + count = 5 +} +help_data.special_panel.content.properties = { + sprite = "properties-panel", + localised_text = "special-panel-properties", + desc = true, + list = "none", + count = 5 +} +help_data.special_panel.content.filter = { + sprite = "filter-panel", + localised_text = "special-panel-filter", + desc = true, + list = "none", + count = 5 +} +help_data.special_panel.content.unittest = { + sprite = "unittest-panel", + localised_text = "special-panel-unittest", + desc = true, + list = "none", + count = 2 +} +help_data.special_panel.content.solver_debug = { + sprite = "solver-debug-panel", + localised_text = "special-panel-debug", + desc = true, + list = "none", + count = 4 +} +help_data.control = { + name = "control", + content = {} +} +help_data.control.content.control = { + localised_text = "control-hotkey", + desc = true, + list = "none", + count = 3 +} +help_data.tips = { + name = "tips", + content = {} +} +help_data.tips.content.production_line = { + localised_text = "tips-production-line", + desc = true, + list = "none", + count = 4 +} +help_data.tips.content.production_block = { + localised_text = "tips-production-block", + desc = true, + list = "none", + count = 4 +} + +------------------------------------------------------------------------------- +---On initialization +function HelpPanel:onInit() + self.panelCaption = ({"helmod_help.panel-title"}) + self.help_button = false +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function HelpPanel:onStyle(styles, width_main, height_main) + styles.flow_panel = { + height = math.max(height_main,800), + } + styles.menu_panel = { + width = 300, + } + styles.content_panel = { + width = 850, + } +end + +------------------------------------------------------------------------------- +---Get or create content panel +---@return LuaGuiElement +function HelpPanel:getContentPanel() + local panel = self:getFrameDeepPanel("help-panel", "horizontal") + local panel_menu_name = "menu-panel" + local panel_content_name = "content-panel" + + if panel[panel_menu_name] ~= nil and panel[panel_menu_name].valid then + return panel[panel_menu_name], panel[panel_content_name] + end + + local menu_panel = GuiElement.add(panel, GuiFlowV(panel_menu_name)) + menu_panel.style.vertically_stretchable = true + self:setStyle(menu_panel, "menu_panel", "width") + + local content_panel = GuiElement.add(panel, GuiScroll(panel_content_name)) + self:setStyle(content_panel, "content_panel", "width") + menu_panel.style.vertically_stretchable = true + return menu_panel, content_panel +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function HelpPanel:onEvent(event) + if event.action == "change-page" then + local selected_index = event.element.selected_index + User.setParameter("selected_help", page_list[selected_index]) + self:onUpdate(event) + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function HelpPanel:onUpdate(event) + self:generateList() + self:updateMenu(event) + self:updateContent(event) +end + +------------------------------------------------------------------------------- +---Update about HelpPanel +function HelpPanel:generateList() + page_list = {} + for key1,section in pairs(help_data) do + local caption_section = {"", helmod_tag.font.default_bold, helmod_tag.color.gold, {string.format("helmod_help.%s", section.name)}, helmod_tag.color.close, helmod_tag.font.close} + table.insert(page_list, {section = key1, content = nil, caption = caption_section}) + for key2,content in pairs(section.content) do + local caption_content = {"", " ", {string.format("helmod_help.%s", content.localised_text)}} + table.insert(page_list, {section = key1, content = key2, caption = caption_content}) + end + end +end + +------------------------------------------------------------------------------- +---Update about HelpPanel +---@param event LuaEvent +function HelpPanel:updateMenu(event) + local menu_panel, content_panel = self:getContentPanel() + menu_panel.clear() + local selected_help = User.getParameter("selected_help") or {section = "getting_start", content = nil} + local items = {} + local selected_item = nil + local scroll_index = 0 + for index,page in pairs(page_list) do + table.insert(items, page.caption) + if page.section == selected_help.section and page.content == selected_help.content then + selected_item = page.caption + scroll_index = index + end + end + local list_box = GuiElement.add(menu_panel, GuiListBox(self.classname, "change-page"):items(items, selected_item)) + list_box.scroll_to_item(scroll_index, "top-third") +end + +------------------------------------------------------------------------------- +---Update about HelpPanel +---@param event LuaEvent +function HelpPanel:updateContent(event) + local menu_panel, content_panel = self:getContentPanel() + content_panel.clear() + + local selected_help = User.getParameter("selected_help") or {section = "getting_start", content = nil} + local section = help_data[selected_help.section] + local content_selected = nil + if section then + ---section panel + local section_caption_name = {string.format("helmod_help.%s", section.name)} + local section_caption_desc = {string.format("helmod_help.%s-desc", section.name)} + local section_panel = GuiElement.add(content_panel, GuiFlowV("section", section.name)) + section_panel.style.horizontally_stretchable = true + ---section header + GuiElement.add(section_panel, GuiLabel("header"):caption({"", "[font=heading-1]", section_caption_name, "[/font]"}):style("helmod_label_help")) + local section_title = GuiElement.add(section_panel, GuiLabel(section.name, "desc"):caption({"", " ",section_caption_desc}):style("helmod_label_help")) + for key,content in pairs(section.content) do + local content_panel = GuiElement.add(section_panel, GuiFrameV(section.name, "panel", key):style("helmod_inside_frame")) + content_panel.style.horizontally_stretchable = true + + local content_title_name = {string.format("helmod_help.%s", content.localised_text)} + local content_title = GuiElement.add(content_panel, GuiLabel(section.name, "title", key):caption({"", "[font=heading-2]", content_title_name, "[/font]"}):style("helmod_label_help_title")) + if content.desc then + GuiElement.add(content_panel, GuiLabel(section.name, "desc", key):caption({string.format("helmod_help.%s-desc", content.localised_text)}):style("helmod_label_help_text")) + end + if content.sprite then + GuiElement.add(content_panel, GuiSprite():sprite("helmod_"..content.sprite)) + end + + local column = 1 + local content_list = GuiElement.add(content_panel, GuiFlowV(section.name, "list", key)) + content_list.style.horizontally_stretchable = true + + for line=1, content.count do + local localised_text = {string.format("helmod_help.%s-%s", content.localised_text, line)} + if content.list == "number" then + GuiElement.add(content_list, GuiLabel(section.name, key, line):caption({"", "[font=default-bold]", line, ":[/font] ", localised_text}):style("helmod_label_help_text")) + else + GuiElement.add(content_list, GuiLabel(section.name, key, line):caption({"", "[font=default-bold]*[/font] ", localised_text}):style("helmod_label_help_text")) + end + end + if key == selected_help.content then + content_selected = content_title + end + end + if content_selected ~= nil then + content_panel.scroll_to_element(content_selected, "top-third") + else + content_panel.scroll_to_element(section_title, "top-third") + end + end +end \ No newline at end of file diff --git a/helmod/dialog/ModelDebug.lua b/helmod/dialog/ModelDebug.lua new file mode 100644 index 00000000..fc807bcf --- /dev/null +++ b/helmod/dialog/ModelDebug.lua @@ -0,0 +1,308 @@ +------------------------------------------------------------------------------- +---Class to build ModelDebug panel +---@class ModelDebug +ModelDebug = newclass(FormModel) + +local display_panel = nil + +------------------------------------------------------------------------------- +---Initialization +function ModelDebug:onInit() + self.panelCaption = "Model Debug" +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ModelDebug:onStyle(styles, width_main, height_main) + styles.flow_panel = { + width = width_main, + minimal_height = 200, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function ModelDebug:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---Get or create info panel +---@return LuaGuiElement +function ModelDebug:getInfoPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["info-panel"] ~= nil and content_panel["info-panel"].valid then + return content_panel["info-panel"] + end + local panel = GuiElement.add(content_panel, GuiFrameV("info-panel"):style(helmod_frame_style.panel)) + panel.style.horizontally_stretchable = true + return panel +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ModelDebug:onEvent(event) + local _, block = self:getParameterObjects() + if block ~= nil and block.runtimes ~= nil then + local runtimes = block.runtimes + if event.action == "change-stage" then + local stage = User.getParameter("model_stage") or 1 + if event.item1 == "initial" then stage = 1 end + if event.item1 == "previous" and stage > 1 then stage = stage - 1 end + if event.item1 == "next" and stage < #runtimes then stage = stage + 1 end + if event.item1 == "final" then stage = #runtimes end + User.setParameter("model_stage", stage) + end + self:onUpdate(event) + end +end + +------------------------------------------------------------------------------- +---On before open +---@param event LuaEvent +function ModelDebug:onBeforeOpen(event) + FormModel.onBeforeOpen(self, event) + local model, block = self:getParameterObjects() + ModelCompute.computeBlock(block) +end +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ModelDebug:onUpdate(event) + self:updateHeader(event) + self:updateDebugPanel(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function ModelDebug:updateHeader(event) + local action_panel = self:getMenuPanel() + action_panel.clear() + local group1 = GuiElement.add(action_panel, GuiFlowH("group1")) + GuiElement.add(group1, + GuiButton(self.classname, "change-stage", "initial"):sprite("menu", defines.sprites.expand_left_group.black, + defines.sprites.expand_left_group.black):style("helmod_button_menu"):tooltip("Initial")) + GuiElement.add(group1, + GuiButton(self.classname, "change-stage", "previous"):sprite("menu", defines.sprites.expand_left.black, + defines.sprites.expand_left.black):style("helmod_button_menu"):tooltip("Previous Step")) + GuiElement.add(group1, + GuiButton(self.classname, "change-stage", "next"):sprite("menu", defines.sprites.expand_right.black, + defines.sprites.expand_right.black):style("helmod_button_menu"):tooltip("Next Step")) + GuiElement.add(group1, + GuiButton(self.classname, "change-stage", "final"):sprite("menu", defines.sprites.expand_right_group.black, + defines.sprites.expand_right_group.black):style("helmod_button_menu"):tooltip("Final")) +end + +------------------------------------------------------------------------------- +---Add cell header +---@param guiTable LuaGuiElement +---@param name string +---@param caption string +function ModelDebug:addCellHeader(guiTable, name, caption) + local cell = GuiElement.add(guiTable, GuiFlowH("header", name)) + GuiElement.add(cell, GuiLabel("label"):caption(caption)) +end + +------------------------------------------------------------------------------- +---Update debug panel +---@param event LuaEvent +function ModelDebug:updateDebugPanel(event) + local info_panel = self:getInfoPanel() + local model, block = self:getParameterObjects() + + if block ~= nil then + info_panel.clear() + + if block.runtimes ~= nil then + local scroll_panel = GuiElement.add(info_panel, GuiScroll("scroll_stage")) + scroll_panel.style.horizontally_squashable = true + scroll_panel.style.horizontally_stretchable = true + local stage = User.getParameter("model_stage") or 1 + if block.runtimes[stage] == nil then + stage = 1 + User.setParameter("model_stage", stage) + end + local runtime = block.runtimes[stage] + local ma_panel = GuiElement.add(scroll_panel, + GuiFrameV("stage_panel"):style(helmod_frame_style.hidden):caption(runtime.name)) + local solver_selected = User.getParameter("solver_selected") or defines.constant.default_solver + if solver_selected == defines.constant.solvers.normal then + self:buildTableSolver(ma_panel, runtime.matrix, runtime.pivot) + else + self:buildTableSolverMatrix(ma_panel, runtime.matrix, runtime.pivot) + end + end + end +end + +------------------------------------------------------------------------------- +---Build matrix +---@param matrix_panel LuaGuiElement +---@param matrix table +---@param pivot table +function ModelDebug:buildTableSolver(matrix_panel, matrix, pivot) + if matrix ~= nil then + local num_col = #matrix[1] + + local matrix_table = GuiElement.add(matrix_panel, + GuiTable("matrix_data"):column(num_col):style("helmod_table-odd")) + matrix_table.vertical_centering = false + + for irow, row in pairs(matrix) do + for icol, value in pairs(row) do + local frame = GuiFlowH("cell", irow, icol):style("helmod_flow_horizontal") + if pivot ~= nil then + if matrix[1][icol].name == "T" then frame = GuiFrameH("cell", irow, icol):style( + "helmod_frame_colored", GuiElement.color_button_default_ingredient, 2) end + if pivot.x == icol then frame = GuiFrameH("cell", irow, icol):style("helmod_frame_colored", + GuiElement.color_button_edit, 2) end + if pivot.y == irow then frame = GuiFrameH("cell", irow, icol):style("helmod_frame_colored", + GuiElement.color_button_none, 2) end + if pivot.x == icol and pivot.y == irow then frame = GuiFrameH("cell", irow, icol):style( + "helmod_frame_colored", GuiElement.color_button_rest, 2) end + end + local cell = GuiElement.add(matrix_table, frame) + cell.style.horizontally_stretchable = true + cell.style.vertically_stretchable = true + if type(value) == "table" then + if value.type == "none" then + GuiElement.add(cell, GuiLabel("cell_value"):caption(value.name):tooltip(value.tooltip)) + elseif value.type == "contraint" then + GuiElement.add(cell, GuiLabel("cell_value"):caption(value)) + else + local tooltip = { "", value.name } + table.insert(tooltip, { "", "\n", "column: ", value.icol }) + local button = GuiElement.add(cell, + GuiButtonSprite("cell_value"):sprite(value.type, value.name):tooltip(tooltip)) + GuiElement.infoTemperature(button, value, "helmod_label_overlay_m") + end + else + local gui_label = GuiLabel("cell_value"):caption(Format.formatNumber(value, 4)) + if cell_value ~= 0 then + gui_label:style("heading_2_label") + end + GuiElement.add(cell, gui_label) + end + end + end + end +end + +function ModelDebug:getFrameColored(irow, icol, pivot) + local frame = GuiFlowH("cell", irow, icol):style("helmod_flow_horizontal") + if pivot ~= nil then + if pivot.x == icol then frame = GuiFrameH("cell", irow, icol):style("helmod_frame_colored", + GuiElement.color_button_edit, 2) end + if pivot.y == irow then frame = GuiFrameH("cell", irow, icol):style("helmod_frame_colored", + GuiElement.color_button_none, 2) end + if pivot.x == icol and pivot.y == irow then frame = GuiFrameH("cell", irow, icol):style( + "helmod_frame_colored", GuiElement.color_button_rest, 2) end + end + return frame +end + +function ModelDebug:getCellHeader(matrix_table, frame, header) + local cell = GuiElement.add(matrix_table, frame) + cell.style.horizontally_stretchable = true + cell.style.vertically_stretchable = true + if header.type == "none" then + GuiElement.add(cell, GuiLabel("cell_value"):caption(header.name):tooltip(header.tooltip)) + elseif header.type == "contraint" then + GuiElement.add(cell, GuiLabel("cell_value"):caption(header)) + elseif header.product ~= nil then + local tooltip = { "", header.product.name } + table.insert(tooltip, { "", "\n", "column: ", header.icol }) + local button = GuiElement.add(cell, + GuiButtonSprite("cell_value"):sprite(header.product.type, header.product.name):tooltip(tooltip)) + GuiElement.infoTemperature(button, header.product, "helmod_label_overlay_m") + else + local tooltip = { "", header.name } + local button = GuiElement.add(cell, + GuiButtonSprite("cell_value"):sprite(header.type, header.name):tooltip(tooltip)) + GuiElement.infoTemperature(button, header, "helmod_label_overlay_m") + end +end + +function ModelDebug:getCellValue(matrix_table, frame, cell_value) + local cell = GuiElement.add(matrix_table, frame) + cell.style.horizontally_stretchable = true + cell.style.vertically_stretchable = true + local gui_label = GuiLabel("cell_value"):caption(Format.formatNumber(cell_value, 4)) + if cell_value ~= 0 then + gui_label:style("heading_2_label") + end + GuiElement.add(cell, gui_label) +end +------------------------------------------------------------------------------- +---Build matrix +---@param matrix_panel LuaGuiElement +---@param matrix table +---@param pivot table +function ModelDebug:buildTableSolverMatrix(matrix_panel, matrix, pivot) + if matrix ~= nil then + local parameter_columns = {} + table.insert(parameter_columns, {type="none", name="Cn", tooltip="Contraint", property="contraint"}) + table.insert(parameter_columns, {type="none", name="FC", tooltip="Factory Count", property="factory_count"}) + table.insert(parameter_columns, {type="none", name="FS", tooltip="Factory Speed", property="factory_speed"}) + table.insert(parameter_columns, {type="none", name="RC", tooltip="Recipe Count", property="recipe_count"}) + table.insert(parameter_columns, {type="none", name="RP", tooltip="Recipe Production", property="recipe_production"}) + table.insert(parameter_columns, {type="none", name="RE", tooltip="Recipe Energy", property="recipe_energy"}) + --table.insert(parameter_columns, {type="none", name="Coefficient", property="coefficient"}) + local num_col = #matrix.columns + #parameter_columns + 1 + + local matrix_table = GuiElement.add(matrix_panel, GuiTable("matrix_data"):column(num_col):style("helmod_table-odd")) + matrix_table.vertical_centering = false + + local frame = self:getFrameColored(0, 0, nil) + self:getCellHeader(matrix_table, frame, {type="none", name="Base"}) + + for icol, parameter_column in pairs(parameter_columns) do + local frame = self:getFrameColored(0, -icol, nil) + self:getCellHeader(matrix_table, frame, parameter_column) + end + + for icol, column in pairs(matrix.columns) do + local frame = self:getFrameColored(0, icol, nil) + self:getCellHeader(matrix_table, frame, column) + end + + for irow, row in pairs(matrix.rows) do + local header = matrix.headers[irow] + if header == nil then + header = {type="none", name="z"} + end + local frame = self:getFrameColored(irow, 0, nil) + self:getCellHeader(matrix_table, frame, header) + + local parameters = matrix.parameters[irow] or {} + for icol, parameter_column in pairs(parameter_columns) do + local property_value = parameters[parameter_column.property] or 0 + local frame = self:getFrameColored(irow, -icol, nil) + if type(property_value) == "number" then + self:getCellValue(matrix_table, frame, property_value) + else + self:getCellValue(matrix_table, frame, 0) + end + end + + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + local frame = self:getFrameColored(irow, icol, pivot) + self:getCellValue(matrix_table, frame, cell_value) + end + end + end +end + +------------------------------------------------------------------------------- +---Update display +function ModelDebug:updateDisplay() + local content_panel = self:getInfoPanel() + content_panel.clear() +end diff --git a/helmod/dialog/PinPanel.lua b/helmod/dialog/PinPanel.lua new file mode 100644 index 00000000..a31ff0ae --- /dev/null +++ b/helmod/dialog/PinPanel.lua @@ -0,0 +1,274 @@ +------------------------------------------------------------------------------- +---Class to build pin dialog +---@class PinPanel +PinPanel = newclass(FormModel) + +local display_pin_level_min = 0 +local display_pin_level_max = 4 + +local display_level = { + base = 0, + factory = 0, + products = 1, + ingredients = 2, + beacon = 3 +} + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function PinPanel:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On initialization +function PinPanel:onInit() + self.panelCaption = ({"helmod_pin-tab-panel.title"}) + self.otherClose = false +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function PinPanel:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 50, + maximal_width = 600, + minimal_height = 0, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function PinPanel:onUpdate(event) + self:updateHeader(event) + self:updateInfo(event) +end + +local setting_options = {} +table.insert(setting_options, {name="done", icon=defines.sprites.status_ok.white, icon_white=defines.sprites.status_ok.black, tooltip="tooltip.hide-show-done", column=0}) +table.insert(setting_options, {name="machine", icon=defines.sprites.factory.white, icon_white=defines.sprites.factory.black, tooltip="tooltip.hide-show-factory", column=1}) +table.insert(setting_options, {name="product", icon=defines.sprites.jewel.white, icon_white=defines.sprites.jewel.black, tooltip="tooltip.hide-show-product", column=2}) +table.insert(setting_options, {name="beacon", icon=defines.sprites.beacon.white, icon_white=defines.sprites.beacon.black, tooltip="tooltip.hide-show-beacon", column=1}) + +------------------------------------------------------------------------------- +---Update header +---@param event LuaEvent +function PinPanel:updateHeader(event) + local action_panel = self:getMenuPanel() + action_panel.clear() + local group1 = GuiElement.add(action_panel, GuiFlowH("group1")) + + ---setting options + + for _,setting_option in pairs(setting_options) do + local setting_name = string.format("pin_panel_column_hide_%s", setting_option.name) + local setting_value = User.getSetting(setting_name) + if setting_value == true then + GuiElement.add(group1, GuiButton(self.classname, "change-hide", setting_option.name):sprite("menu", setting_option.icon_white, setting_option.icon):style("helmod_button_menu"):tooltip({setting_option.tooltip})) + else + GuiElement.add(group1, GuiButton(self.classname, "change-hide", setting_option.name):sprite("menu", setting_option.icon, setting_option.icon):style("helmod_button_menu_selected"):tooltip({setting_option.tooltip})) + end + end + + local group2 = GuiElement.add(action_panel, GuiFlowH("group2")) + GuiElement.add(group2, GuiButton(self.classname, "recipe-done-remove"):sprite("menu", defines.sprites.checkmark.black,defines.sprites.checkmark.black):style("helmod_button_menu_actived_red"):tooltip({"helmod_button.remove-done"})) + + local parameter_objects = User.getParameter(self.parameter_objects) + local group3 = GuiElement.add(action_panel, GuiFlowH("group3")) + GuiElement.add(group3, GuiButton("HMSummaryPanel", "OPEN", parameter_objects.model, parameter_objects.block):sprite("menu", defines.sprites.list_view.black, defines.sprites.list_view.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-summary"})) + + local group4 = GuiElement.add(action_panel, GuiFlowH("group4")) + GuiElement.add(group4, GuiButton("HMProductionPanel", "OPEN", parameter_objects.model, parameter_objects.block):sprite("menu", defines.sprites.hangar.black,defines.sprites.hangar.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-production-block"})) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function PinPanel:updateInfo(event) + local infoPanel = self:getScrollFramePanel("info-panel") + infoPanel.clear() + + local column = 2 + for _,setting_option in pairs(setting_options) do + local setting_name = string.format("pin_panel_column_hide_%s", setting_option.name) + local setting_value = User.getSetting(setting_name) + if not(setting_value) then column = column + setting_option.column end + end + + local model, block, recipe = self:getParameterObjects() + + if block ~= nil then + local resultTable = GuiElement.add(infoPanel, GuiTable("list-data"):column(column):style("helmod_table-odd")) + resultTable.vertical_centering = false + resultTable.style.horizontally_stretchable = false + + self:addProductionBlockHeader(resultTable) + for _, recipe in spairs(block.recipes, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do + local is_done = recipe.is_done or false + if not(is_done and User.getSetting("pin_panel_column_hide_done")) then + self:addProductionBlockRow(resultTable, model, block, recipe) + end + end + end +end + +------------------------------------------------------------------------------- +---Add header data tab +---@param itable LuaGuiElement +function PinPanel:addProductionBlockHeader(itable) + + local gui_done = GuiElement.add(itable, GuiFrameH("header-done"):style(helmod_frame_style.hidden)) + GuiElement.add(gui_done, GuiLabel("header-done"):caption({"helmod_result-panel.col-header-done"})) + + local guiRecipe = GuiElement.add(itable, GuiFrameH("header-recipe"):style(helmod_frame_style.hidden)) + GuiElement.add(guiRecipe, GuiLabel("header-recipe"):caption({"helmod_result-panel.col-header-recipe"})) + + if not(User.getSetting("pin_panel_column_hide_product")) then + local guiProducts = GuiElement.add(itable, GuiFrameH("header-products"):style(helmod_frame_style.hidden)) + GuiElement.add(guiProducts, GuiLabel("header-products"):caption({"helmod_result-panel.col-header-products"})) + end + + if not(User.getSetting("pin_panel_column_hide_machine")) then + local guiFactory = GuiElement.add(itable, GuiFrameH("header-factory"):style(helmod_frame_style.hidden)) + GuiElement.add(guiFactory, GuiLabel("header-factory"):caption({"helmod_result-panel.col-header-factory"})) + end + + if not(User.getSetting("pin_panel_column_hide_product")) then + local guiIngredients = GuiElement.add(itable, GuiFrameH("header-ingredients"):style(helmod_frame_style.hidden)) + GuiElement.add(guiIngredients, GuiLabel("header-ingredients"):caption({"helmod_result-panel.col-header-ingredients"})) + end + + if not(User.getSetting("pin_panel_column_hide_beacon")) then + local guiBeacon = GuiElement.add(itable, GuiFrameH("header-beacon"):style(helmod_frame_style.hidden)) + GuiElement.add(guiBeacon, GuiLabel("header-beacon"):caption({"helmod_result-panel.col-header-beacon"})) + end + + +end + +------------------------------------------------------------------------------- +---Add row data tab +---@param gui_table LuaGuiElement +---@param model table +---@param block table +---@param recipe table +function PinPanel:addProductionBlockRow(gui_table, model, block, recipe) + local recipe_prototype = RecipePrototype(recipe) + local is_done = recipe.is_done or false + + ---col done + if is_done == true then + GuiElement.add(gui_table, GuiButton(self.classname, "recipe-done", recipe.id):sprite("menu", defines.sprites.status_ok.black, defines.sprites.status_ok.black):style("helmod_button_menu_selected_green"):tooltip({"helmod_button.done"})) + else + GuiElement.add(gui_table, GuiButton(self.classname, "recipe-done", recipe.id):sprite("menu", defines.sprites.checkmark.black, defines.sprites.checkmark.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_button.done"})) + end + ---col recipe + local cell_recipe = GuiElement.add(gui_table, GuiFrameH("recipe", recipe.id):style(helmod_frame_style.hidden)) + local button_recipe = GuiCellRecipe("HMRecipeEdition", "OPEN", model.id, block.id, recipe.id):element(recipe):infoIcon(recipe.type):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):mask(is_done) + --local button_recipe = GuiCellRecipe(self.classname, "do_noting", "recipe"):element(recipe):infoIcon(recipe.type):tooltip("tooltip.info-product"):color(GuiElement.color_button_default):mask(is_done) + GuiElement.add(cell_recipe, button_recipe) + + if not(User.getSetting("pin_panel_column_hide_product")) then + ---products + local cell_products = GuiElement.add(gui_table, GuiTable("products",recipe.id):column(3)) + cell_products.style.horizontally_stretchable = false + local lua_products = recipe_prototype:getProducts(recipe.factory) + if lua_products ~= nil then + for index, lua_product in pairs(lua_products) do + local product_prototype = Product(lua_product) + local product = product_prototype:clone() + product.time = model.time + product.count = product_prototype:countProduct(model, recipe) + if block.by_limit == true and block.count > 1 then + product.limit_count = product.count / block.count + end + GuiElement.add(cell_products, GuiCellElementSm(self.classname, "do_noting", "product"):index(index):element(product):tooltip("tooltip.info-product"):color(GuiElement.color_button_none):byLimit(block.by_limit):mask(is_done)) + end + end + end + + if not(User.getSetting("pin_panel_column_hide_machine")) then + ---col factory + local factory = recipe.factory + GuiElement.add(gui_table, GuiCellFactory(self.classname, "pipette-entity", recipe.id, "factory"):index(recipe.id):element(factory):tooltip("controls.smart-pipette"):color(GuiElement.color_button_default):byLimit(block.by_limit):mask(is_done)) + end + + if not(User.getSetting("pin_panel_column_hide_product")) then + ---ingredients + local cell_ingredients = GuiElement.add(gui_table, GuiTable("ingredients", recipe.id):column(3)) + cell_ingredients.style.horizontally_stretchable = false + local lua_ingredients = recipe_prototype:getIngredients(recipe.factory) + if lua_ingredients ~= nil then + for index, lua_ingredient in pairs(lua_ingredients) do + local ingredient_prototype = Product(lua_ingredient) + local ingredient = ingredient_prototype:clone() + ingredient.time = model.time + ingredient.count = ingredient_prototype:countIngredient(model, recipe) + if block.by_limit == true and block.count > 1 then + ingredient.limit_count = ingredient.count / block.count + end + GuiElement.add(cell_ingredients, GuiCellElementSm(self.classname, "do_noting", "ingredient"):index(index):element(ingredient):tooltip("tooltip.info-product"):color(GuiElement.color_button_add):byLimit(block.by_limit):mask(is_done)) + end + end + end + + if not(User.getSetting("pin_panel_column_hide_beacon")) then + ---col beacon + local beacons = recipe.beacons + local cell_beacons = GuiElement.add(gui_table, GuiFlowH("beacon", recipe.id)) + cell_beacons.style.horizontally_stretchable = false + cell_beacons.style.horizontal_spacing = 2 + if beacons ~= nil then + for index, beacon in pairs(beacons) do + if block.by_limit == true and block.count > 1 then + beacon.limit_count = beacon.count / block.count + else + beacon.limit_count = nil + end + GuiElement.add(cell_beacons, GuiCellFactory(self.classname, "pipette-entity", recipe.id, "beacons", index):index(index):element(beacon):tooltip("controls.smart-pipette"):color(GuiElement.color_button_default):byLimit(block.by_limit):mask(is_done)) + end + end + end + +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function PinPanel:onEvent(event) + + if event.action == "change-hide" then + local element = event.item1 + local setting_name = string.format("pin_panel_column_hide_%s", element) + local setting_value = User.getSetting(setting_name) + User.setSetting(setting_name, not(setting_value)) + self:onUpdate(event) + end + + local model, block, recipe = self:getParameterObjects() + + if block == nil then return end + + if event.action == "pipette-entity" then + local recipes = block.recipes + local index = tonumber(event.item3) + Player.setSmartTool(recipes[event.item1], event.item2, index) + end + if event.action == "recipe-done" then + local recipes = block.recipes + recipes[event.item1].is_done = not(recipes[event.item1].is_done) + self:updateInfo(event) + end + if event.action == "recipe-done-remove" then + local recipes = block.recipes + for _,recipe in pairs(recipes) do + recipe.is_done = nil + end + self:updateInfo(event) + end +end diff --git a/helmod/dialog/ProductionPanel.lua b/helmod/dialog/ProductionPanel.lua new file mode 100644 index 00000000..53ae1a3a --- /dev/null +++ b/helmod/dialog/ProductionPanel.lua @@ -0,0 +1,1827 @@ +------------------------------------------------------------------------------- +---Class to build production panel +---@class ProductionPanel +ProductionPanel = newclass(FormModel,function(base,classname) + FormModel.init(base,classname) + base.add_special_button = true + base.has_tips = true +end) + +------------------------------------------------------------------------------- +---On initialization +function ProductionPanel:onInit() + self.panelCaption = string.format("%s %s","Helmod",game.active_mods["helmod"]) +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function ProductionPanel:onBind() + Dispatcher:bind("on_gui_recipe_update", self, self.update) + Dispatcher:bind("on_gui_refresh", self, self.update) + Dispatcher:bind("on_gui_pause", self, self.updateTopMenu) +end + +------------------------------------------------------------------------------- +---Return button caption +---@return string +function ProductionPanel:getButtonCaption() + local model, block, recipe = self:getParameterObjects() + if block == nil then return {"helmod_result-panel.tab-button-production-line"} end + return {"helmod_result-panel.tab-button-production-block"} +end + +------------------------------------------------------------------------------- +---Get Button Sprites +---@return string, string +function ProductionPanel:getButtonSprites() + return "factory-white","factory" +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function ProductionPanel:isVisible() + return true +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ProductionPanel:onStyle(styles, width_main, height_main) + styles.block_info = { + height = 50*2+40, + } +end + +------------------------------------------------------------------------------- +---Get or create result panel +---@return LuaGuiElement +function ProductionPanel:getResultPanel() + local panel = self:getFramePanel("result", nil, "horizontal") + local panel_name1 = "result1" + local panel_name2 = "result2" + if panel[panel_name1] ~= nil and panel[panel_name1].valid then + return panel[panel_name1], panel[panel_name2] + end + local display_width, display_height, scale = User.getMainSizes() + local width_main = display_width/scale + local height_main = display_height/scale + panel.style.natural_width = width_main-25 + local panel1 = GuiElement.add(panel, GuiFlowH(panel_name1)) + panel1.style.horizontally_stretchable = true + panel1.style.width = 90 + panel1.style.padding = 2 + local panel2 = GuiElement.add(panel, GuiFlowV(panel_name2)) + panel2.style.horizontally_stretchable = true + panel2.style.vertically_stretchable = true + panel2.style.padding = 2 + panel2.style.natural_width = width_main-25 + return panel1, panel2 +end + +------------------------------------------------------------------------------- +---Get or create result scroll panel +---@return LuaGuiElement +function ProductionPanel:getNavigatorPanel() + local panel1, panel2 = self:getResultPanel() + local panel_name = "panel-navigator" + local scroll_name = "scroll-navigator" + if panel1[panel_name] ~= nil and panel1[panel_name].valid then + return panel1[panel_name][scroll_name] + end + local panel = GuiElement.add(panel1, GuiFrameV(panel_name):style("helmod_deep_frame")) + panel.style.padding = 0 + local scroll_panel = GuiElement.add(panel, GuiScroll(scroll_name):style("helmod_scroll_pane")) + panel.style.vertically_stretchable = true + + + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.margin = 0 + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create result scroll panel +---@return LuaGuiElement, LuaGuiElement, LuaGuiElement +function ProductionPanel:getDataPanel() + local panel1, panel2 = self:getResultPanel() + local menu_name = "menu-data" + local header_name = "header-data" + local panel_name = "panel-data" + local scroll_name = "scroll-data" + if panel2[menu_name] ~= nil and panel2[menu_name].valid then + return panel2[menu_name],panel2[header_name],panel2[panel_name][scroll_name] + end + local menu_panel = GuiElement.add(panel2, GuiFlowH(menu_name)) + menu_panel.style.horizontally_stretchable = true + + local header_panel = GuiElement.add(panel2, GuiFlowH(header_name)) + header_panel.style.horizontally_stretchable = true + header_panel.style.top_padding = 6 + header_panel.style.bottom_padding = 6 + + local data_panel = GuiElement.add(panel2, GuiFrameV(panel_name):style("helmod_deep_frame")) + data_panel.style.padding = 0 + local scroll_panel = GuiElement.add(data_panel, GuiScroll(scroll_name):style("helmod_scroll_pane")) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return menu_panel, header_panel, scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create info panel +---@return LuaGuiElement, LuaGuiElement, LuaGuiElement +function ProductionPanel:getInfoPanel2() + local menu_panel, header_panel, scroll_panel = self:getDataPanel() + local info_name = "info" + local info_scroll_name = "info-scroll" + local left_name = "left-info" + local right_name = "right-info" + if header_panel[info_name] ~= nil and header_panel[info_name].valid then + return header_panel[info_name][info_scroll_name],header_panel[left_name],header_panel[right_name] + end + local model = self:getParameterObjects() + + header_panel.style.horizontal_spacing=10 + self:setStyle(header_panel, "block_info", "height") + + local tooltip = GuiTooltipModel("tooltip.info-model"):element(model) + + local info_panel = GuiElement.add(header_panel, GuiFlowV(info_name)) + GuiElement.add(info_panel, GuiLabel("label-info"):caption({"",self:getButtonCaption(), " [img=info]"}):style("heading_1_label"):tooltip(tooltip)) + local info_scroll = GuiElement.add(info_panel, GuiScroll(info_scroll_name):style("helmod_scroll_pane")) + info_scroll.style.width = 300 + + local left_panel = GuiElement.add(header_panel, GuiFlowV(left_name)) + self:setStyle(left_panel, "block_info", "height") + + local right_panel = GuiElement.add(header_panel, GuiFlowV(right_name)) + self:setStyle(right_panel, "block_info", "height") + + return info_scroll, left_panel, right_panel +end + +------------------------------------------------------------------------------- +---Get or create left info panel +---@return LuaGuiElement, LuaGuiElement, LuaGuiElement +function ProductionPanel:getLeftInfoPanel2() + local _, parent_panel, _ = self:getInfoPanel2() + local panel_name = "left-scroll" + local header_name = "left-header" + local label_name = "left-label" + local tool_name = "left-tool" + if parent_panel[panel_name] ~= nil and parent_panel[panel_name].valid then + return parent_panel[header_name][label_name], parent_panel[header_name][tool_name], parent_panel[panel_name] + end + local header_panel = GuiElement.add(parent_panel, GuiFlowH(header_name)) + local label_panel = GuiElement.add(header_panel, GuiLabel(label_name):caption({"helmod_common.output"}):style("helmod_label_title_frame")) + local tool_panel = GuiElement.add(header_panel, GuiFlowH(tool_name)) + --tool_panel.style.horizontally_stretchable = true + --tool_panel.style.horizontal_align = "right" + local scroll_panel = GuiElement.add(parent_panel, GuiScroll(panel_name):style("helmod_scroll_pane")) + scroll_panel.style.horizontally_stretchable = true + + return label_panel, tool_panel, scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create right info panel +---@return LuaGuiElement, LuaGuiElement, LuaGuiElement +function ProductionPanel:getRightInfoPanel2() + local _, _, parent_panel = self:getInfoPanel2() + local panel_name = "right-scroll" + local header_name = "right-header" + local label_name = "right-label" + local tool_name = "right-tool" + if parent_panel[panel_name] ~= nil and parent_panel[panel_name].valid then + return parent_panel[header_name][label_name], parent_panel[header_name][tool_name], parent_panel[panel_name] + end + local header_panel = GuiElement.add(parent_panel, GuiFlowH(header_name)) + local label_panel = GuiElement.add(header_panel, GuiLabel(label_name):caption({"helmod_common.input"}):style("helmod_label_title_frame")) + local tool_panel = GuiElement.add(header_panel, GuiFlowH(tool_name)) + --tool_panel.style.horizontally_stretchable = true + --tool_panel.style.horizontal_align = "right" + local scroll_panel = GuiElement.add(parent_panel, GuiScroll(panel_name):style("helmod_scroll_pane")) + scroll_panel.style.horizontally_stretchable = true + + return label_panel, tool_panel, scroll_panel +end + +------------------------------------------------------------------------------- +---Get the menu panel +---@return LuaGuiElement, LuaGuiElement +function ProductionPanel:getSubMenuPanel() + local menu_panel, header_panel, scroll_panel = self:getDataPanel() + local panel_name = "menu" + local left_name = "left_menu" + local right_name = "right_menu" + if menu_panel[panel_name] ~= nil and menu_panel[panel_name].valid then + return menu_panel[panel_name][left_name], menu_panel[panel_name][right_name] + end + local panel = GuiElement.add(menu_panel, GuiFrameH(panel_name):style("helmod_deep_frame")) + panel.style.horizontally_stretchable = true + panel.style.height = 38 + + local left_panel = GuiElement.add(panel, GuiFlowH(left_name)) + left_panel.style.horizontal_spacing = 10 + + local right_panel = GuiElement.add(panel, GuiFlowH(right_name)) + right_panel.style.horizontal_spacing = 10 + right_panel.style.horizontally_stretchable = true + right_panel.style.horizontal_align = "right" + return left_panel, right_panel +end + +------------------------------------------------------------------------------- +---Update +---@param event LuaEvent +function ProductionPanel:onUpdate(event) + local model, block, _ = self:getParameterObjects() + self:updateIndexPanel(model) + + self:updateSubMenuPanel(model, block) + + self:updateData(event) +end + +------------------------------------------------------------------------------- +---Update index panel +---@param model table +function ProductionPanel:updateIndexPanel(model) + local sorter = function(t,a,b) return t[b]["index"] > t[a]["index"] end + local models_by_owner = Model.getModelsByOwner() + ---index panel + local index_panel = self:getFrameDeepPanel("model_index") + index_panel.style.padding = 2 + index_panel.clear() + local table_index = GuiElement.add(index_panel, GuiTable("table_index"):column(GuiElement.getIndexColumnNumber()):style("helmod_table_list")) + GuiElement.add(table_index, GuiButton(self.classname, "new-model"):sprite("menu", defines.sprites.add_table.black, defines.sprites.add_table.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_button.add-production-line"})) + if table.size(models_by_owner) > 0 then + local i = 0 + for _,models in pairs(models_by_owner) do + local is_first = true + table.reindex_list(models) + for _,imodel in spairs(models, sorter) do + i = i + 1 + local element = Model.firstRecipe(imodel.blocks) + local button = nil + if imodel.id == model.id then + if element ~= nil and element.name ~= "" then + local tooltip = GuiTooltipModel("tooltip.info-model"):element(imodel) + button = GuiElement.add(table_index, GuiButtonSprite(self.classname, "change-model", imodel.id):sprite(element.type, element.name):style("helmod_button_menu_selected"):tooltip(tooltip)) + button.style.width = 36 + button.style.height = 36 + button.style.padding = {-2,-2,-2,-2} + else + button = GuiElement.add(table_index, GuiButton(self.classname, "change-model", imodel.id):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black):style("helmod_button_menu_selected")) + button.style.width = 36 + end + else + if element ~= nil then + local tooltip = GuiTooltipModel("tooltip.info-model"):element(imodel) + button = GuiElement.add(table_index, GuiButtonSelectSprite(self.classname, "change-model", imodel.id):sprite(element.type, element.name):tooltip(tooltip):color()) + else + button = GuiElement.add(table_index, GuiButton(self.classname, "change-model", imodel.id):sprite("menu", defines.sprites.status_help.black, defines.sprites.status_help.black):style("helmod_button_menu")) + button.style.width = 36 + end + end + if button ~= nil and is_first then + button.style.left_margin = 3 + is_first = false + end + end + end + end +end + +------------------------------------------------------------------------------- +---Update menu panel +---@param model table +---@param block table +function ProductionPanel:updateSubMenuPanel(model, block) + self:updateSubMenuLeftPanel(model, block) + self:updateSubMenuRightPanel(model, block) +end +------------------------------------------------------------------------------- +---Update menu panel +---@param model table +---@param block table +function ProductionPanel:updateSubMenuLeftPanel(model, block) + if model == nil then return end + ---action panel + local left_panel, right_panel = self:getSubMenuPanel() + left_panel.clear() + + local button_spacing = 2 + + ---add recipe + local group_selector = GuiElement.add(left_panel, GuiFlowH("group_selector")) + group_selector.style.horizontal_spacing = button_spacing + local block_id = "new" + if block ~= nil then block_id = block.id end + GuiElement.add(group_selector, GuiButton("HMRecipeSelector", "OPEN", model.id, block_id):sprite("menu", defines.sprites.script.black, defines.sprites.script.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_result-panel.add-button-recipe"})) + GuiElement.add(group_selector, GuiButton("HMTechnologySelector", "OPEN", model.id, block_id):sprite("menu", defines.sprites.education.black, defines.sprites.education.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_result-panel.add-button-technology"})) + + ---delete button + local group_delete = GuiElement.add(left_panel, GuiFlowH("group_delete")) + local delete_action = "remove-block" + if block == nil then delete_action = "remove-model" end + local delete_button = GuiElement.add(group_delete, GuiButton(self.classname, delete_action, model.id, block_id):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_actived_red"):tooltip({"helmod_result-panel.remove-button-production-block"})) + if not(User.isDeleter(model)) then + delete_button.enabled = false + end + + ---Model Debug + if User.getModGlobalSetting("debug_solver") == true then + local group_debug = GuiElement.add(left_panel, GuiFlowH("group_debug")) + group_debug.style.horizontal_spacing = button_spacing + GuiElement.add(group_debug, GuiButton("HMModelDebug", "OPEN", model.id, block_id):sprite("menu", defines.sprites.run_test.black, defines.sprites.run_test.black):style("helmod_button_menu"):tooltip("Open Debug")) + local solver_selected = User.getParameter("solver_selected") or defines.constant.default_solver + GuiElement.add(group_debug, GuiButton(self.classname, "solver_switch"):style("helmod_button_default"):caption(solver_selected)) + end + + ---group tool + local group_tool = GuiElement.add(left_panel, GuiFlowH("group_tool")) + group_tool.style.horizontal_spacing = button_spacing + GuiElement.add(group_tool, GuiButton("HMSummaryPanel", "OPEN", model.id, block_id):sprite("menu", defines.sprites.list_view.black,defines.sprites.list_view.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-summary"})) + if block ~= nil then + ---unlinked button + local linked_button + local unlinked = block.unlinked and true or false + if unlinked or block.index == 0 then + linked_button = GuiElement.add(group_tool, GuiButton(self.classname, "production-block-unlink", model.id, block.id):sprite("menu", defines.sprites.unplugged.black, defines.sprites.unplugged.black):style("helmod_button_menu"):tooltip({"tooltip.unlink-element"})) + else + linked_button = GuiElement.add(group_tool, GuiButton(self.classname, "production-block-unlink", model.id, block.id):sprite("menu", defines.sprites.plugged.white, defines.sprites.plugged.black):style("helmod_button_menu_selected"):tooltip({"tooltip.unlink-element"})) + end + if block.index == 0 then + linked_button.enabled = false + linked_button.tooltip = {"tooltip.block-cannot-link-first"} + end + if block.by_factory == true then + linked_button.enabled = false + linked_button.tooltip = {"tooltip.block-cannot-link-by-factory"} + end + + GuiElement.add(group_tool, GuiButton("HMPinPanel", "OPEN", model.id, block_id):sprite("menu", defines.sprites.push_pin.black, defines.sprites.push_pin.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.tab-button-pin"})) + + ---by limit + if block.by_limit == true then + GuiElement.add(group_tool, GuiButton(self.classname, "block-limit", model.id, block_id):sprite("menu", defines.sprites.gauge_round.white, defines.sprites.gauge_round.black):style("helmod_button_menu_selected"):tooltip({"helmod_label.assembler-limitation"})) + else + GuiElement.add(group_tool, GuiButton(self.classname, "block-limit", model.id, block_id):sprite("menu", defines.sprites.gauge_round.black, defines.sprites.gauge_round.black):style("helmod_button_menu"):tooltip({"helmod_label.assembler-limitation"})) + end + + ---by product + if block.by_product == false then + GuiElement.add(group_tool, GuiButton(self.classname, "block-by-product", model.id, block_id):sprite("menu", defines.sprites.graph_bottom_to_top.white, defines.sprites.graph_bottom_to_top.black):style("helmod_button_menu_selected"):tooltip({"helmod_label.input-product"})) + else + GuiElement.add(group_tool, GuiButton(self.classname, "block-by-product", model.id, block_id):sprite("menu", defines.sprites.graph_top_to_bottom.black, defines.sprites.graph_top_to_bottom.black):style("helmod_button_menu"):tooltip({"helmod_label.input-ingredient"})) + end + + + ---computing + local block_compunting = GuiElement.add(group_tool, GuiFlowH("block-computing")) + block_compunting.style.horizontal_spacing=10 + local default_compunting = "" + local items = {} + table.insert(items,{"helmod_label.compute-by-element"}) + table.insert(items,{"helmod_label.compute-by-factory"}) + table.insert(items,{"helmod_label.matrix-solver"}) + if block.solver == true then + default_compunting = items[3] + elseif block.by_factory == true then + default_compunting = items[2] + else + default_compunting = items[1] + end + + local selector = GuiElement.add(block_compunting, GuiDropDown(self.classname, "change-computing", model.id, block.id):items(items, default_compunting)) + selector.style.font = "helmod_font_default" + selector.style.height = 32 + end + +end + +------------------------------------------------------------------------------- +---Update menu panel +---@param model table +---@param block table +function ProductionPanel:updateSubMenuRightPanel(model, block) + if model == nil then return end + ---action panel + local left_panel, right_panel = self:getSubMenuPanel() + right_panel.clear() + + local button_spacing = 2 + local block_id = "new" + if block ~= nil then block_id = block.id end + + ---logistics + local display_logistic_row = User.getParameter("display_logistic_row") + if display_logistic_row == true then + local logistic_row_item = User.getParameter("logistic_row_item") or "belt" + local logistic2 = GuiElement.add(right_panel, GuiFlowH("logistic2")) + logistic2.style.horizontal_spacing = button_spacing + for _,type in pairs({"inserter", "belt", "container", "transport"}) do + local item_logistic = Player.getDefaultItemLogistic(type) + local style = "helmod_button_menu" + if logistic_row_item == type then style = "helmod_button_menu_selected" end + local button = GuiElement.add(logistic2, GuiButton(self.classname, "change-logistic-item", type):sprite("sprite", item_logistic):style(style):tooltip({"tooltip.logistic-row-choose"})) + button.style.padding = {0,0,0,0} + end + + local logistic_row_fluid = User.getParameter("logistic_row_fluid") or "pipe" + local logistic3 = GuiElement.add(right_panel, GuiFlowH("logistic3")) + logistic3.style.horizontal_spacing = button_spacing + for _,type in pairs({"pipe", "container", "transport"}) do + local fluid_logistic = Player.getDefaultFluidLogistic(type) + local style = "helmod_button_menu" + if logistic_row_fluid == type then style = "helmod_button_menu_selected" end + local button = GuiElement.add(logistic3, GuiButton(self.classname, "change-logistic-fluid", type):sprite("sprite", fluid_logistic):style(style):tooltip({"tooltip.logistic-row-choose"})) + button.style.padding = {0,0,0,0} + end + end + + local group_pref = GuiElement.add(right_panel, GuiFlowH("group_pref")) + group_pref.style.horizontal_spacing = button_spacing + if display_logistic_row == true then + GuiElement.add(group_pref, GuiButton(self.classname, "change-logistic"):sprite("menu", defines.sprites.transport.white, defines.sprites.transport.black):style("helmod_button_menu_selected"):tooltip({"tooltip.display-logistic-row"})) + else + GuiElement.add(group_pref, GuiButton(self.classname, "change-logistic"):sprite("menu", defines.sprites.transport.black, defines.sprites.transport.black):style("helmod_button_menu"):tooltip({"tooltip.display-logistic-row"})) + end + GuiElement.add(group_pref, GuiButton("HMPreferenceEdition", "OPEN", model.id, block_id):sprite("menu", defines.sprites.process.black, defines.sprites.process.black):style("helmod_button_menu"):tooltip({"helmod_button.preferences"})) + + local group_models = GuiElement.add(right_panel, GuiFlowH("group_models")) + group_models.style.horizontal_spacing = button_spacing + GuiElement.add(group_models, GuiButton("HMModelEdition", "OPEN", model.id, block_id):sprite("menu", defines.sprites.edit_document.black, defines.sprites.edit_document.black):style("helmod_button_menu"):tooltip({"helmod_panel.model-edition"})) + GuiElement.add(group_models, GuiButton("HMParametersEdition", "OPEN", model.id, block_id):sprite("menu", defines.sprites.parameter.black, defines.sprites.parameter.black):style("helmod_button_menu"):tooltip({"helmod_parameters_edition_panel.title"})) + local button_model_up = GuiElement.add(group_models, GuiButton(self.classname, "model-index-up", model.id, block_id):sprite("menu", defines.sprites.arrow_left.black, defines.sprites.arrow_left.black):style("helmod_button_menu"):tooltip({"helmod_panel.model-index-up"})) + button_model_up.enabled = model.owner == Player.native().name + local button_model_down = GuiElement.add(group_models, GuiButton(self.classname, "model-index-down", model.id, block_id):sprite("menu", defines.sprites.arrow_right.black, defines.sprites.arrow_right.black):style("helmod_button_menu"):tooltip({"helmod_panel.model-index-down"})) + button_model_down.enabled = model.owner == Player.native().name + + local group_action = GuiElement.add(right_panel, GuiFlowH("group_action")) + group_action.style.horizontal_spacing = button_spacing + ---copy past + GuiElement.add(group_action, GuiButton(self.classname, "copy-model", model.id, block_id):sprite("menu", defines.sprites.copy.black, defines.sprites.copy.black):style("helmod_button_menu"):tooltip({"helmod_button.copy"})) + GuiElement.add(group_action, GuiButton(self.classname, "past-model", model.id, block_id):sprite("menu", defines.sprites.paste.black, defines.sprites.paste.black):style("helmod_button_menu"):tooltip({"helmod_button.past"})) + ---download + if self.classname == "HMProductionPanel" then + GuiElement.add(group_action, GuiButton("HMDownload", "OPEN", model.id, "download"):sprite("menu", defines.sprites.download_document.black, defines.sprites.download_document.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.download-button-production-line"})) + GuiElement.add(group_action, GuiButton("HMDownload", "OPEN", model.id, "upload"):sprite("menu", defines.sprites.upload_document.black, defines.sprites.upload_document.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.upload-button-production-line"})) + end + ---refresh control + GuiElement.add(group_action, GuiButton(self.classname, "refresh-model", model.id):sprite("menu", defines.sprites.refresh.black, defines.sprites.refresh.black):style("helmod_button_menu"):tooltip({"helmod_result-panel.refresh-button"})) + + local items = {} + local default_time = 1 + for index,base_time in pairs(defines.constant.base_times) do + table.insert(items,base_time.tooltip) + if model.time == base_time.value then + default_time = base_time.tooltip + end + end + + local group_time = GuiElement.add(right_panel, GuiFlowH("group_time")) + GuiElement.add(group_time, GuiLabel("label_time"):caption({"helmod_data-panel.base-time", ""}):style("helmod_label_title_frame")) + + GuiElement.add(group_time, GuiDropDown(self.classname, "change-time", model.id):items(items, default_time)) +end + +------------------------------------------------------------------------------- +---Update info +---@param model table +---@param block table +function ProductionPanel:updateInfoBlock(model, block) + local info_scroll, output_scroll, input_scroll = self:getInfoPanel2() + info_scroll.clear() + ---info panel + + ---production block result + if block ~= nil and table.size(block.recipes) > 0 then + + ---block informations + local block_table = GuiElement.add(info_scroll, GuiTable("output-table"):column(5)) + block_table.style.horizontally_stretchable = false + block_table.vertical_centering = false + block_table.style.horizontal_spacing=10 + + GuiElement.add(block_table, GuiCellBlockInfo("block-count"):element(block):tooltip("tooltip.info-block"):color(GuiElement.color_button_default):index(1):byLimit(block.by_limit)) + GuiElement.add(block_table, GuiCellEnergy("block-power"):element(block):tooltip("tooltip.info-block"):color(GuiElement.color_button_default):index(2):byLimit(block.by_limit)) + if User.getPreferenceSetting("display_pollution") then + GuiElement.add(block_table, GuiCellPollution("block-pollution"):element(block):tooltip("tooltip.info-block"):color(GuiElement.color_button_default):index(3):byLimit(block.by_limit)) + end + if User.getPreferenceSetting("display_building") then + GuiElement.add(block_table, GuiCellBuilding("block-building"):element(block):tooltip("tooltip.info-building"):color(GuiElement.color_button_default):index(4):byLimit(block.by_limit)) + end + end +end + +------------------------------------------------------------------------------- +---Update header +---@param model table +---@param block table +function ProductionPanel:updateInputBlock(model, block) + ---data + local block_by_product = not(block ~= nil and block.by_product == false) + + local left_label, left_tool, left_scroll = self:getLeftInfoPanel2() + local right_label, right_tool, right_scroll = self:getRightInfoPanel2() + + local input_label = right_label + local input_tool = right_tool + local input_scroll = right_scroll + if not(block_by_product) then + input_label = left_label + input_scroll = left_scroll + input_tool = left_tool + end + + input_tool.clear() + local all_visible = User.getParameter("block_all_ingredient_visible") + if all_visible == true then + GuiElement.add(input_tool, GuiButton(self.classname, "block-all-ingredient-visible", model.id, block.id):sprite("menu", defines.sprites.filter.white, defines.sprites.filter.black):style("helmod_button_menu_sm_selected"):tooltip({"helmod_button.all-product-visible"})) + else + GuiElement.add(input_tool, GuiButton(self.classname, "block-all-ingredient-visible", model.id, block.id):sprite("menu", defines.sprites.filter.black, defines.sprites.filter.black):style("helmod_button_menu_sm"):tooltip({"helmod_button.all-product-visible"})) + end + + ---input panel + input_label.caption = {"helmod_common.input"} + input_scroll.clear() + + ---production block result + if block ~= nil and table.size(block.recipes) > 0 then + + ---input panel + local input_table = GuiElement.add(input_scroll, GuiTable("input-table"):column(GuiElement.getElementColumnNumber(50)-2):style("helmod_table_element")) + if block.ingredients ~= nil then + for index, lua_ingredient in spairs(block.ingredients, User.getProductSorter()) do + if all_visible == true or ((lua_ingredient.state or 0) == 1 and not(block_by_product)) or (lua_ingredient.count or 0) > ModelCompute.waste_value then + local contraint_type = nil + local ingredient = Product(lua_ingredient):clone() + ingredient.time = model.time + ingredient.count = lua_ingredient.count + if block.count > 1 then + ingredient.limit_count = lua_ingredient.count / block.count + end + local button_action = "production-recipe-ingredient-add" + local button_tooltip = "tooltip.ingredient" + local button_color = GuiElement.color_button_default_ingredient + local control_info = "link-intermediate" + if block_by_product then + button_action = "production-recipe-ingredient-add" + button_tooltip = "tooltip.add-recipe" + control_info = nil + else + if not(block.unlinked) or block.by_factory == true then + button_action = "product-info" + button_tooltip = "tooltip.info-product" + if block.products_linked ~= nil and block.products_linked[Product(lua_ingredient):getTableKey()] then + contraint_type = "linked" + end + else + button_action = "product-edition" + button_tooltip = "tooltip.edit-product" + end + end + ---color + if lua_ingredient.state == 1 then + if not(block.unlinked) or block.by_factory == true then + button_color = GuiElement.color_button_default_ingredient + else + button_color = GuiElement.color_button_edit + end + elseif lua_ingredient.state == 3 then + button_color = GuiElement.color_button_rest + else + button_color = GuiElement.color_button_default_ingredient + end + GuiElement.add(input_table, GuiCellElementM(self.classname, button_action, model.id, block.id, "none"):element(ingredient):tooltip(button_tooltip):index(index):color(button_color):byLimit(block.by_limit):contraintIcon(contraint_type):controlInfo(control_info)) + end + end + end + + end +end + +------------------------------------------------------------------------------- +---Update header +---@param model table +---@param block table +function ProductionPanel:updateOutputBlock(model, block) + ---data + local block_by_product = not(block ~= nil and block.by_product == false) + + local left_label, left_tool, left_scroll = self:getLeftInfoPanel2() + local right_label, right_tool, right_scroll = self:getRightInfoPanel2() + + local output_label = left_label + local output_tool = left_tool + local output_scroll = left_scroll + if not(block_by_product) then + output_label = right_label + output_scroll = right_scroll + output_tool = right_tool + end + + output_tool.clear() + local all_visible = User.getParameter("block_all_product_visible") + if all_visible == true then + GuiElement.add(output_tool, GuiButton(self.classname, "block-all-product-visible", model.id, block.id):sprite("menu", defines.sprites.filter.white, defines.sprites.filter.black):style("helmod_button_menu_sm_selected"):tooltip({"helmod_button.all-product-visible"})) + else + GuiElement.add(output_tool, GuiButton(self.classname, "block-all-product-visible", model.id, block.id):sprite("menu", defines.sprites.filter.black, defines.sprites.filter.black):style("helmod_button_menu_sm"):tooltip({"helmod_button.all-product-visible"})) + end + + ---ouput panel + output_label.caption = {"helmod_common.output"} + output_scroll.clear() + + ---production block result + if block ~= nil and table.size(block.recipes) > 0 then + + ---ouput panel + local output_table = GuiElement.add(output_scroll, GuiTable("output-table"):column(GuiElement.getElementColumnNumber(50)-2):style("helmod_table_element")) + if block.products ~= nil then + for index, lua_product in spairs(block.products, User.getProductSorter()) do + if all_visible == true or ((lua_product.state or 0) == 1 and block_by_product) or (lua_product.count or 0) > ModelCompute.waste_value then + local contraint_type = nil + local product = Product(lua_product):clone() + product.time = model.time + product.count = lua_product.count + if block.count > 1 then + product.limit_count = lua_product.count / block.count + end + local button_action = "production-recipe-product-add" + local button_tooltip = "tooltip.product" + local button_color = GuiElement.color_button_default_product + local control_info = "link-intermediate" + if not block_by_product then + button_action = "production-recipe-product-add" + button_tooltip = "tooltip.add-recipe" + control_info = nil + elseif not(block.unlinked) or block.by_factory == true then + button_action = "product-info" + button_tooltip = "tooltip.info-product" + if block.products_linked ~= nil and block.products_linked[Product(lua_product):getTableKey()] then + contraint_type = "linked" + end + else + button_action = "product-edition" + button_tooltip = "tooltip.edit-product" + end + ---color + if lua_product.state == 1 then + if not(block.unlinked) or block.by_factory == true then + button_color = GuiElement.color_button_default_product + else + button_color = GuiElement.color_button_edit + end + elseif lua_product.state == 3 then + button_color = GuiElement.color_button_rest + else + button_color = GuiElement.color_button_default_product + end + GuiElement.add(output_table, GuiCellElementM(self.classname, button_action, model.id, block.id, "none"):element(product):tooltip(button_tooltip):index(index):color(button_color):byLimit(block.by_limit):contraintIcon(contraint_type):controlInfo(control_info)) + end + end + end + end +end + +------------------------------------------------------------------------------- +---Update header +---@param model table +function ProductionPanel:updateInfoModel(model) + ---data + local info_scroll, output_scroll, input_scroll = self:getInfoPanel2() + info_scroll.clear() + ---info panel + + local info_panel = GuiElement.add(info_scroll, GuiFlowV("block-info")) + info_panel.style.horizontally_stretchable = false + info_panel.style.vertical_spacing=4 + + local block_info = GuiElement.add(info_panel, GuiFlowH("information")) + block_info.style.horizontally_stretchable = false + block_info.style.horizontal_spacing=10 + + local count_block = table.size(model.blocks) + if count_block > 0 then + local element_block = {name=model.id, energy_total=0, pollution=0} + if model.summary ~= nil then + element_block.energy_total = model.summary.energy + element_block.pollution_total = model.summary.pollution + element_block.summary = model.summary + end + GuiElement.add(block_info, GuiCellEnergy("block-power"):element(element_block):tooltip("tooltip.info-block"):color(GuiElement.color_button_default):index(2)) + if User.getPreferenceSetting("display_pollution") then + GuiElement.add(block_info, GuiCellPollution("block-pollution"):element(element_block):tooltip("tooltip.info-block"):color(GuiElement.color_button_default):index(2)) + end + if User.getPreferenceSetting("display_building") then + GuiElement.add(block_info, GuiCellBuilding("block-building"):element(element_block):tooltip("tooltip.info-building"):color(GuiElement.color_button_default):index(2)) + end + end +end + +------------------------------------------------------------------------------- +---Update header +---@param model table +function ProductionPanel:updateInputModel(model) + ---data + local right_label, right_tool, right_scroll = self:getRightInfoPanel2() + right_scroll.clear() + ---input panel + + local count_block = table.size(model.blocks) + if count_block > 0 then + + local input_table = GuiElement.add(right_scroll, GuiTable("input-table"):column(GuiElement.getElementColumnNumber(50)):style("helmod_table_element")) + if model.ingredients ~= nil then + for index, element in spairs(model.ingredients, User.getProductSorter()) do + element.time = model.time + GuiElement.add(input_table, GuiCellElementM(self.classname, "production-recipe-ingredient-add", model.id, "new", element.name):element(element):tooltip("tooltip.add-recipe"):color(GuiElement.color_button_add):index(index)) + end + end + + end +end + +------------------------------------------------------------------------------- +---Update header +---@param model table +function ProductionPanel:updateOutputModel(model) + ---data + local left_label, left_tool, left_scroll = self:getLeftInfoPanel2() + left_scroll.clear() + ---ouput panel + + ---production block result + local count_block = table.size(model.blocks) + if count_block > 0 then + + ---ouput panel + local output_table = GuiElement.add(left_scroll, GuiTable("output-table"):column(GuiElement.getElementColumnNumber(50)):style("helmod_table_element")) + if model.products ~= nil then + for index, element in spairs(model.products, User.getProductSorter()) do + element.time = model.time + GuiElement.add(output_table, GuiCellElementM(self.classname, "production-recipe-product-add", model.id, "new", element.name):element(element):tooltip("tooltip.add-recipe"):index(index)) + end + end + + end +end +------------------------------------------------------------------------------- +---Update data +---@param event LuaEvent +function ProductionPanel:updateData(event) + local model, block, recipe = self:getParameterObjects() + + self:bluidNavigator(model, block) + + local last_element = nil + ---col recipe + if block == nil then + self:updateDataModel(model) + else + self:updateDataBlock(model, block) + end + + --self:updateTips("test tips, non mΓ© ho!!!") +end + +------------------------------------------------------------------------------- +---Update data +---@param model table +---@param block table +function ProductionPanel:updateDataBlock(model, block) + if block == nil then return end + + self:updateInfoBlock(model, block) + + self:updateOutputBlock(model, block) + + self:updateInputBlock(model, block) + + ---data panel + local menu_panel, header_panel, scroll_panel = self:getDataPanel() + ---production block result + if block ~= nil and table.size(block.recipes) > 0 then + ---data panel + local extra_cols = 0 + if User.getPreferenceSetting("display_pollution") then + extra_cols = extra_cols + 1 + end + if User.getModGlobalSetting("display_hidden_column") == "All" then + extra_cols = extra_cols + 2 + end + if User.getModGlobalSetting("display_hidden_column") ~= "None" then + extra_cols = extra_cols + 2 + end + + local result_table = GuiElement.add(scroll_panel, GuiTable("list-data"):column(7 + extra_cols):style("helmod_table_result")) + result_table.vertical_centering = false + self:addTableHeader(result_table, block) + + local sorter = function(t,a,b) return t[b]["index"] > t[a]["index"] end + if block.by_product == false then sorter = function(t,a,b) return t[b]["index"] < t[a]["index"] end end + local last_element = nil + for _, recipe in spairs(block.recipes, sorter) do + local recipe_cell = self:addTableRowRecipe(result_table, model, block, recipe) + if User.getParameter("scroll_element") == recipe.id then last_element = recipe_cell end + end + + if last_element ~= nil then + scroll_panel.scroll_to_element(last_element) + User.setParameter("scroll_element", nil) + end + + end +end +------------------------------------------------------------------------------- +---Update data +---@param model table +function ProductionPanel:updateDataModel(model) + if model == nil then return end + + self:updateInfoModel(model) + + self:updateOutputModel(model) + + self:updateInputModel(model) + + ---data panel + local menu_panel, header_panel, scroll_panel = self:getDataPanel() + ---production block result + if table.size(model.blocks) > 0 then + ---data panel + local extra_cols = 0 + if User.getPreferenceSetting("display_pollution") then + extra_cols = extra_cols + 1 + end + if User.getModGlobalSetting("display_hidden_column") == "All" then + extra_cols = extra_cols + 2 + end + if User.getModGlobalSetting("display_hidden_column") ~= "None" then + extra_cols = extra_cols + 2 + end + if User.getPreferenceSetting("display_building") then + extra_cols = extra_cols + 1 + end + + local result_table = GuiElement.add(scroll_panel, GuiTable("list-data"):column(5 + extra_cols):style("helmod_table_result")) + result_table.vertical_centering = false + self:addTableHeader(result_table) + + local sorter = function(t,a,b) return t[b]["index"] > t[a]["index"] end + local last_element = nil + for _, block in spairs(model.blocks, sorter) do + local block_cell = self:addTableRowBlock(result_table, model, block) + end + + end + + --self:updateTips("test tips, non mΓ© ho!!!") +end +------------------------------------------------------------------------------- +---Build Navigator +---@param model table +---@param current_block table +function ProductionPanel:bluidNavigator(model, current_block) + local scroll_panel = self:getNavigatorPanel() + local last_element = nil + + ---bluid tree + if model.blocks ~= nil then + self:bluidRootLeaf(scroll_panel, model, current_block, 0) + self:bluidTree(scroll_panel, model, model.blocks, current_block, 1) + if last_element ~= nil then + scroll_panel.scroll_to_element(last_element) + end + end +end + +------------------------------------------------------------------------------- +---Build Tree +---@param tree_panel LuaGuiElement +---@param model table +---@param blocks table +---@param current_block table +---@param level number +function ProductionPanel:bluidTree(tree_panel, model, blocks, current_block, level) + if blocks ~= nil then + for _, block in spairs(blocks, function(t,a,b) return t[b]["index"] > t[a]["index"] end) do + self:bluidLeaf(tree_panel, model, block, current_block, level) + end + end +end + +------------------------------------------------------------------------------- +---Build Tree +---@param tree_panel LuaGuiElement +---@param model table +---@param block table +---@param current_block table +---@param level number +function ProductionPanel:bluidLeaf(tree_panel, model, block, current_block, level) + if block ~= nil then + local color = "gray" + local cell_tree = GuiElement.add(tree_panel, GuiTable("block", block.id):column(1):style("helmod_table_list")) + if current_block ~= nil and current_block.id == block.id then + --last_element = cell_tree + color = "orange" + end + if block.name == nil then + local cell_block = GuiElement.add(cell_tree, GuiButton(self.classname, "HMProductionPanel", model.id, block.id):sprite("menu", defines.sprites.hangar.black, defines.sprites.hangar.black):style("helmod_button_menu"):tooltip("tooltip.edit-block")) + else + local cell_block = GuiElement.add(cell_tree, GuiCellBlock(self.classname, "change-block", model.id, block.id):element(block):tooltip("tooltip.edit-block"):color(color)) + cell_block.style.left_padding = 10 * level + end + end +end + +------------------------------------------------------------------------------- +---Build Tree +---@param tree_panel LuaGuiElement +---@param model table +---@param current_block table +---@param level number +function ProductionPanel:bluidRootLeaf(tree_panel, model, current_block, level) + if model ~= nil then + local color = "gray" + local cell_tree = GuiElement.add(tree_panel, GuiTable("model", model.id):column(1):style("helmod_table_list")) + if current_block == nil then + --last_element = cell_tree + color = "orange" + end + local cell_block = GuiElement.add(cell_tree, GuiCellModel(self.classname, "change-block", model.id):element(model):tooltip("tooltip.info-model"):color(color)) + cell_block.style.left_padding = 10 * level + end +end + +------------------------------------------------------------------------------- +---Add table header +---@param itable LuaGuiElement +---@param block table +function ProductionPanel:addTableHeader(itable, block) + self:addCellHeader(itable, "action", {"helmod_result-panel.col-header-action"}) + ---optionnal columns + if User.getModGlobalSetting("display_hidden_column") == "All" then + self:addCellHeader(itable, "index", {"helmod_result-panel.col-header-index"},"index") + self:addCellHeader(itable, "id", {"helmod_result-panel.col-header-id"},"id") + end + if User.getModGlobalSetting("display_hidden_column") ~= "None" then + self:addCellHeader(itable, "name", {"helmod_result-panel.col-header-name"},"name") + self:addCellHeader(itable, "type", {"helmod_result-panel.col-header-type"},"type") + end + ---data columns + self:addCellHeader(itable, "recipe", {"helmod_result-panel.col-header-recipe"},"index") + self:addCellHeader(itable, "energy", {"helmod_common.energy-consumption"},"energy_total") + if User.getPreferenceSetting("display_pollution") then + self:addCellHeader(itable, "pollution", {"helmod_common.pollution"}) + end + ---col building + if User.getPreferenceSetting("display_building") or block ~= nil then + self:addCellHeader(itable, "factory", {"helmod_result-panel.col-header-factory"}) + end + if block ~= nil then + self:addCellHeader(itable, "beacon", {"helmod_result-panel.col-header-beacon"}) + end + if block ~= nil then + for _,order in pairs(Model.getBlockOrder(block)) do + if order == "products" then + self:addCellHeader(itable, "products", {"helmod_result-panel.col-header-products"}) + else + self:addCellHeader(itable, "ingredients", {"helmod_result-panel.col-header-ingredients"}) + end + end + else + self:addCellHeader(itable, "products", {"helmod_result-panel.col-header-products"}) + self:addCellHeader(itable, "ingredients", {"helmod_result-panel.col-header-ingredients"}) + end +end + +------------------------------------------------------------------------------- +---Add table row +---@param gui_table LuaGuiElement +---@param element table +function ProductionPanel:addTableRowCommon(gui_table, element) + if User.getModGlobalSetting("display_hidden_column") == "All" then + ---col index + GuiElement.add(gui_table, GuiLabel("value_index", element.id):caption(element.index)) + ---col id + GuiElement.add(gui_table, GuiLabel("value_id", element.id):caption(element.id)) + end + if User.getModGlobalSetting("display_hidden_column") ~= "None" then + ---col name + GuiElement.add(gui_table, GuiLabel("value_name", element.id):caption(element.name)) + ---col type + GuiElement.add(gui_table, GuiLabel("value_type", element.id):caption(element.type)) + end +end +------------------------------------------------------------------------------- +---Add table row +---@param gui_table LuaGuiElement +---@param model table +---@param block table +---@param recipe table +---@return LuaGuiElement +function ProductionPanel:addTableRowRecipe(gui_table, model, block, recipe) + local recipe_prototype = RecipePrototype(recipe) + --local lua_recipe = RecipePrototype(recipe):native() + + ---col action + local cell_action = GuiElement.add(gui_table, GuiTable("action", recipe.id):column(2):style("helmod_table_list")) + if block.by_product == false then + ---by ingredient + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-down", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm"):tooltip({"tooltip.up-element", User.getModSetting("row_move_step")})) + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-remove", model.id, block.id, recipe.id):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-up", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_bottom.black, defines.sprites.arrow_bottom.black):style("helmod_button_menu_sm"):tooltip({"tooltip.down-element", User.getModSetting("row_move_step")})) + else + ---by product + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-up", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm"):tooltip({"tooltip.up-element", User.getModSetting("row_move_step")})) + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-remove", model.id, block.id, recipe.id):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + GuiElement.add(cell_action, GuiButton(self.classname, "production-recipe-down", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_bottom.black, defines.sprites.arrow_bottom.black):style("helmod_button_menu_sm"):tooltip({"tooltip.down-element", User.getModSetting("row_move_step")})) + end + ---conversion block + if recipe.index > 0 then + GuiElement.add(cell_action, GuiButton(self.classname, "conversion-recipe-block", model.id, block.id, recipe.id):sprite("menu", defines.sprites.hangar.black, defines.sprites.hangar.black):style("helmod_button_menu_sm"):tooltip({"tooltip.conversion-recipe-block"})) + end + + ---common cols + self:addTableRowCommon(gui_table, recipe) + ---col recipe + --- local production = recipe.production or 1 + --- local production_label = Format.formatPercent(production).."%" + --- if block.solver == true then production_label = "" end + local cell_recipe = GuiElement.add(gui_table, GuiTable("recipe", recipe.id):column(2):style("helmod_table_list")) + GuiElement.add(cell_recipe, GuiCellRecipe("HMRecipeEdition", "OPEN", model.id, block.id, recipe.id):element(recipe):infoIcon(recipe.type):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):broken(recipe_prototype:native() == nil):byLimit(block.by_limit)) + if recipe_prototype:native() == nil then + Player.print("ERROR: Recipe ".. recipe.name .." not exist in game") + end + ---col energy + local cell_energy = GuiElement.add(gui_table, GuiTable("energy", recipe.id):column(2):style("helmod_table_list")) + GuiElement.add(cell_energy, GuiCellEnergy("HMRecipeEdition", "OPEN", model.id, block.id, recipe.id):element(recipe):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):byLimit(block.by_limit)) + + ---col pollution + if User.getPreferenceSetting("display_pollution") then + local cell_pollution = GuiElement.add(gui_table, GuiTable("pollution", recipe.id):column(2):style("helmod_table_list")) + GuiElement.add(cell_pollution, GuiCellPollution("HMRecipeEdition", "OPEN", model.id, block.id, recipe.id):element(recipe):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):byLimit(block.by_limit)) + end + + ---col factory + local factory = recipe.factory + local cell_factory = GuiElement.add(gui_table, GuiTable("factory", recipe.id):column(2):style("helmod_table_list")) + local gui_cell_factory = GuiCellFactory(self.classname, "factory-action", model.id, block.id, recipe.id):element(factory):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):byLimit(block.by_limit):controlInfo("crafting-add") + if block.by_limit == true then + gui_cell_factory:byLimitUri(self.classname, "update-factory-limit", model.id, block.id, recipe.id) + end + if block.by_factory == true then + gui_cell_factory:byFactory(self.classname, "update-factory-number", model.id, block.id, recipe.id) + end + GuiElement.add(cell_factory, gui_cell_factory) + + ---col beacon + local beacons = recipe.beacons + local cell_beacons = GuiElement.add(gui_table, GuiFlowH("beacon", recipe.id)) + cell_beacons.style.horizontally_stretchable = false + cell_beacons.style.horizontal_spacing = 2 + if beacons ~= nil then + for index, beacon in pairs(beacons) do + local gui_cell_beacon = GuiCellFactory(self.classname, "beacon-action", model.id, block.id, recipe.id, index):element(beacon):index(index):tooltip("tooltip.edit-recipe"):color(GuiElement.color_button_default):byLimit(block.by_limit):controlInfo("crafting-add") + GuiElement.add(cell_beacons, gui_cell_beacon) + end + end + + for _,order in pairs(Model.getBlockOrder(block)) do + if order == "products" then + ---products + local display_product_cols = User.getPreferenceSetting("display_product_cols") + local cell_products = GuiElement.add(gui_table, GuiTable("products", recipe.id):column(display_product_cols):style("helmod_table_list")) + for index, lua_product in spairs(recipe_prototype:getProducts(recipe.factory), User.getProductSorter()) do + local contraint_type = nil + local product_prototype = Product(lua_product) + local product = product_prototype:clone() + product.time = model.time + product.count = product_prototype:countProduct(model, recipe) + if block.by_limit == true and block.count > 1 then + product.limit_count = product.count / block.count + end + if block.by_product ~= false and recipe.contraint ~= nil and recipe.contraint.name == product.name then + contraint_type = recipe.contraint.type + end + local control_info = "contraint" + if not(block.solver ~= true and block.by_product ~= false) then + control_info = nil + end + GuiElement.add(cell_products, GuiCellElement(self.classname, "production-recipe-product-add", model.id, block.id, recipe.id):element(product):tooltip("tooltip.add-recipe"):index(index):byLimit(block.by_limit):contraintIcon(contraint_type):controlInfo(control_info)) + end + else + ---ingredients + local display_ingredient_cols = User.getPreferenceSetting("display_ingredient_cols") + local cell_ingredients = GuiElement.add(gui_table, GuiTable("ingredients_", recipe.id):column(display_ingredient_cols):style("helmod_table_list")) + for index, lua_ingredient in spairs(recipe_prototype:getIngredients(recipe.factory), User.getProductSorter()) do + local contraint_type = nil + local ingredient_prototype = Product(lua_ingredient) + local ingredient = ingredient_prototype:clone() + ingredient.time = model.time + ingredient.count = ingredient_prototype:countIngredient(model, recipe) + ---si constant compte comme un produit (recipe rocket) + if ingredient.constant == true then + ingredient.count = ingredient_prototype:countProduct(model, recipe) + end + if block.by_limit == true and block.count > 1 then + ingredient.limit_count = ingredient.count / block.count + end + if block.by_product == false and recipe.contraint ~= nil and recipe.contraint.name == ingredient.name then + contraint_type = recipe.contraint.type + end + local control_info = "contraint" + if not(block.solver ~= true and block.by_product == false) then + control_info = nil + end + GuiElement.add(cell_ingredients, GuiCellElement(self.classname, "production-recipe-ingredient-add", model.id, block.id, recipe.id):element(ingredient):tooltip("tooltip.add-recipe"):color(GuiElement.color_button_add):index(index):byLimit(block.by_limit):contraintIcon(contraint_type):controlInfo(control_info)) + end + end + end + + return cell_recipe +end + +------------------------------------------------------------------------------- +---Add row data tab +---@param gui_table LuaGuiElement +---@param model table +---@param block table +---@return LuaGuiElement +function ProductionPanel:addTableRowBlock(gui_table, model, block) + local unlinked = block.unlinked and true or false + if block.index == 0 then unlinked = true end + local block_by_product = not(block ~= nil and block.by_product == false) + ---col action + local cell_action = GuiElement.add(gui_table, GuiTable("action", block.id):column(2)) + + GuiElement.add(cell_action, GuiButton(self.classname, "production-block-up", model.id, block.id):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm"):tooltip({"tooltip.up-element", User.getModSetting("row_move_step")})) + GuiElement.add(cell_action, GuiButton(self.classname, "remove-block", model.id, block.id):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip({"tooltip.remove-element"})) + GuiElement.add(cell_action, GuiButton(self.classname, "production-block-down", model.id, block.id):sprite("menu", defines.sprites.arrow_bottom.black, defines.sprites.arrow_bottom.black):style("helmod_button_menu_sm"):tooltip({"tooltip.down-element", User.getModSetting("row_move_step")})) + local linked_button + if unlinked then + linked_button = GuiElement.add(cell_action, GuiButton(self.classname, "production-block-unlink", model.id, block.id):sprite("menu", defines.sprites.unplugged.black, defines.sprites.unplugged.black):style("helmod_button_menu_sm"):tooltip({"tooltip.unlink-element"})) + else + linked_button = GuiElement.add(cell_action, GuiButton(self.classname, "production-block-unlink", model.id, block.id):sprite("menu", defines.sprites.plugged.white, defines.sprites.plugged.black):style("helmod_button_menu_sm_selected"):tooltip({"tooltip.unlink-element"})) + end + if block.index == 0 then + linked_button.enabled = false + linked_button.tooltip = {"tooltip.block-cannot-link-first"} + end + if block.by_factory == true then + linked_button.enabled = false + linked_button.tooltip = {"tooltip.block-cannot-link-by-factory"} + end + + ---common cols + self:addTableRowCommon(gui_table, block) + + ---col recipe + local cell_recipe = GuiElement.add(gui_table, GuiTable("recipe", block.id):column(1):style("helmod_table_list")) + + local block_color = "gray" + if not(block_by_product) then block_color = "orange" end + GuiElement.add(cell_recipe, GuiCellBlock(self.classname, "change-block", model.id, block.id):element(block):infoIcon(block.type):tooltip("tooltip.edit-block"):color(block_color)) + + ---col energy + local cell_energy = GuiElement.add(gui_table, GuiTable(block.id, "energy"):column(1):style("helmod_table_list")) + local element_block = {name=block.name, power=block.power, pollution_total=block.pollution_total, summary=block.summary} + GuiElement.add(cell_energy, GuiCellEnergy(self.classname, "change-block", model.id, block.id):element(element_block):tooltip("tooltip.edit-block"):color(block_color)) + + ---col pollution + if User.getPreferenceSetting("display_pollution") then + local cell_pollution = GuiElement.add(gui_table, GuiTable(block.id, "pollution"):column(1):style("helmod_table_list")) + GuiElement.add(cell_pollution, GuiCellPollution(self.classname, "change-block", model.id, block.id):element(element_block):tooltip("tooltip.edit-block"):color(block_color)) + end + + ---col building + if User.getPreferenceSetting("display_building") then + local cell_building = GuiElement.add(gui_table, GuiTable(block.id, "building"):column(1):style("helmod_table_list")) + GuiElement.add(cell_building, GuiCellBuilding(self.classname, "change-block", model.id, block.id):element(element_block):tooltip("tooltip.info-building"):color(block_color)) + end + + ---col beacon + --local cell_beacon = GuiElement.add(gui_table, GuiTable("beacon", block.id):column(2):style("helmod_table_list")) + + local product_sorter = User.getProductSorter() + + ---products + local display_product_cols = User.getPreferenceSetting("display_product_cols") + 1 + local cell_products = GuiElement.add(gui_table, GuiTable("products", block.id):column(display_product_cols):style("helmod_table_list")) + cell_products.style.horizontally_stretchable = false + if block.products ~= nil then + for index, product in spairs(block.products, product_sorter) do + if ((product.state or 0) == 1 and block_by_product) or (product.count or 0) > ModelCompute.waste_value then + local block_id = "new" + local button_action = "production-recipe-product-add" + local button_tooltip = "tooltip.product" + local button_color = GuiElement.color_button_default_product + product.time = model.time + if not(block_by_product) then + button_action = "production-recipe-product-add" + button_tooltip = "tooltip.add-recipe" + else + if not(block.unlinked) or block.by_factory == true then + button_action = "product-info" + button_tooltip = "tooltip.info-product" + else + button_action = "product-edition" + button_tooltip = "tooltip.edit-product" + end + end + ---color + if product.state == 1 then + if not(block.unlinked) or block.by_factory == true then + button_color = GuiElement.color_button_default_product + else + block_id = block.id + button_color = GuiElement.color_button_edit + end + elseif product.state == 3 then + block_id = block.id + button_color = GuiElement.color_button_rest + else + button_color = GuiElement.color_button_default_product + end + GuiElement.add(cell_products, GuiCellElement(self.classname, button_action, model.id, block_id, product.name):element(product):tooltip(button_tooltip):color(button_color):index(index)) + end + end + end + ---ingredients + local display_ingredient_cols = User.getPreferenceSetting("display_ingredient_cols") + 2 + local cell_ingredients = GuiElement.add(gui_table, GuiTable("ingredients", block.id):column(display_ingredient_cols)) + cell_ingredients.style.horizontally_stretchable = false + if block.ingredients ~= nil then + for index, ingredient in spairs(block.ingredients, product_sorter) do + if ((ingredient.state or 0) == 1 and not(block_by_product)) or (ingredient.count or 0) > ModelCompute.waste_value then + local block_id = "new" + local button_action = "production-recipe-ingredient-add" + local button_tooltip = "tooltip.ingredient" + local button_color = GuiElement.color_button_default_ingredient + ingredient.time = model.time + if block_by_product then + button_action = "production-recipe-ingredient-add" + button_tooltip = "tooltip.add-recipe" + else + button_action = "product-edition" + button_tooltip = "tooltip.edit-product" + end + ---color + if ingredient.state == 1 then + if not(block.unlinked) or block.by_factory == true then + button_color = GuiElement.color_button_default_ingredient + else + block_id = block.id + button_color = GuiElement.color_button_edit + end + elseif ingredient.state == 3 then + button_color = GuiElement.color_button_rest + else + button_color = GuiElement.color_button_default_ingredient + end + GuiElement.add(cell_ingredients, GuiCellElement(self.classname, button_action, model.id, block_id, ingredient.name):element(ingredient):tooltip(button_tooltip):color(button_color):index(index)) + end + end + end + return cell_recipe +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ProductionPanel:onEvent(event) + local model, block, _ = self:getParameterObjects() + + if block == nil then + block = model.blocks[event.item2] + end + ---*************************** + ---access for all + ---*************************** + self:onEventAccessAll(event, model, block) + + ---*************************** + ---access admin or owner + ---*************************** + + if User.isReader(model) then + self:onEventAccessRead(event, model, block) + end + + ---******************************* + ---access admin or owner or write + ---******************************* + + if User.isWriter(model) then + self:onEventAccessWrite(event, model, block) + end + + ---******************************** + ---access admin or owner or delete + ---******************************** + + if User.isDeleter(model) then + self:onEventAccessDelete(event, model, block) + end + + ---******************************* + ---access admin only + ---******************************* + + if User.isAdmin() then + self:onEventAccessAdmin(event, model, block) + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +---@param model table +---@param block table +function ProductionPanel:onEventAccessAll(event, model, block) + if event.action == "refresh-model" then + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "change-model" then + Controller:send("on_gui_open", event, self.classname) + end + + if event.action == "new-model" then + local new_model = Model.newModel() + User.setParameter(self.parameter_objects, {name=self.parameter_objects, model=new_model.id}) + Controller:send("on_gui_open", event, self.classname) + end + + if event.action == "new-block" then + Controller:send("on_gui_open", event, "HMRecipeSelector") + end + + if event.action == "change-block" then + Controller:closeEditionOrSelector() + Controller:send("on_gui_open", event, self.classname) + end + + if event.action == "change-logistic" then + local display_logistic_row = User.getParameter("display_logistic_row") + User.setParameter("display_logistic_row", not(display_logistic_row)) + Controller:send("on_gui_update", event) + end + + if event.action == "change-logistic-item" then + User.setParameter("logistic_row_item", event.item1) + Controller:send("on_gui_update", event) + end + + if event.action == "change-logistic-fluid" then + User.setParameter("logistic_row_fluid", event.item1) + Controller:send("on_gui_update", event) + end + + if event.action == "block-all-ingredient-visible" then + local all_visible = User.getParameter("block_all_ingredient_visible") + User.setParameter("block_all_ingredient_visible",not(all_visible)) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-all-product-visible" then + local all_visible = User.getParameter("block_all_product_visible") + User.setParameter("block_all_product_visible",not(all_visible)) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "solver_switch" then + local solver_selected = User.getParameter("solver_selected") or defines.constant.default_solver + if solver_selected == defines.constant.solvers.normal then + User.setParameter("solver_selected", defines.constant.solvers.matrix) + else + User.setParameter("solver_selected", defines.constant.solvers.normal) + end + Controller:send("on_gui_update", event, self.classname) + end + +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +---@param model table +---@param block table +function ProductionPanel:onEventAccessRead(event, model, block) + if event.action == "copy-model" then + if block ~= nil then + User.setParameter("copy_from_block_id", block.id) + User.setParameter("copy_from_model_id", model.id) + else + User.setParameter("copy_from_block_id", nil) + User.setParameter("copy_from_model_id", model.id) + end + Controller:send("on_gui_update", event) + end + + if event.action == "factory-action" then + local recipe = block.recipes[event.item3] + if event.control == true then + if recipe ~= nil and recipe.factory ~= nil then + local factory = recipe.factory + Player.beginCrafting(factory.name, factory.count) + end + else + event.action = "OPEN" + Controller:send("on_gui_open", event,"HMRecipeEdition") + end + end + + if event.action == "beacon-action" then + if event.control == true then + local recipe = block.recipes[event.item3] + local index = tonumber(event.item4) + if recipe ~= nil and recipe.beacons ~= nil and recipe.beacons[index] ~= nil then + local beacon = recipe.beacons[index] + Player.beginCrafting(beacon.name, beacon.count) + end + else + event.action = "OPEN" + Controller:send("on_gui_open", event,"HMRecipeEdition") + end + end + +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +---@param model table +---@param block table +function ProductionPanel:onEventAccessWrite(event, model, block) + local selector_name = "HMRecipeSelector" + + if event.action == "model-index-up" and model ~= nil then + if model.owner == Player.native().name then + local models = Model.getModelsOwner() + table.up_indexed_list(models, model.index, 1) + self:updateIndexPanel(model) + end + end + + if event.action == "model-index-down" and model ~= nil then + if model.owner == Player.native().name then + local models = Model.getModelsOwner() + table.down_indexed_list(models, model.index, 1) + self:updateIndexPanel(model) + end + end + + if event.action == "change-boolean-option" and block ~= nil then + ModelBuilder.updateProductionBlockOption(block, event.item1, not(block[event.item1])) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "change-number-option" and block ~= nil then + local value = GuiElement.getInputNumber(event.element) + ModelBuilder.updateProductionBlockOption(block, event.item1, value) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "change-time" then + local index = event.element.selected_index + model.time = defines.constant.base_times[index].value or 1 + ModelCompute.update(model) + Controller:send("on_gui_update", event) + Controller:send("on_gui_close", event, "HMProductEdition") + end + + if event.action == "product-selected" then + if event.button == defines.mouse_button_type.right then + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + Controller:send("on_gui_open", event,"HMRecipeSelector") + end + end + + if event.action == "product-edition" then + if event.button == defines.mouse_button_type.right then + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + Controller:send("on_gui_open", event, selector_name) + else + Controller:send("on_gui_open", event, "HMProductEdition") + end + end + + if event.action == "production-block-unlink" then + ModelBuilder.unlinkProductionBlock(block) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "past-model" then + local from_model_id = User.getParameter("copy_from_model_id") + local from_model = global.models[from_model_id] + if from_model ~= nil then + local from_block_id = User.getParameter("copy_from_block_id") + local from_block = from_model.blocks[from_block_id] + ModelBuilder.pastModel(model, block, from_model, from_block) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + end + + if event.action == "change-computing" then + local index = event.element.selected_index + if index == 3 then + ModelBuilder.updateProductionBlockOption(block, "by_factory", false) + ModelBuilder.updateProductionBlockOption(block, "solver", true) + elseif index == 2 then + ModelBuilder.updateProductionBlockOption(block, "by_factory", true) + ModelBuilder.updateProductionBlockOption(block, "solver", false) + else + ModelBuilder.updateProductionBlockOption(block, "by_factory", false) + ModelBuilder.updateProductionBlockOption(block, "solver", false) + end + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "production-block-up" then + if block == nil then + block = model.blocks[event.item2] + end + local step = 1 + if event.shift then step = User.getModSetting("row_move_step") end + if event.control then step = 1000 end + ModelBuilder.upProductionBlock(model, block, step) + ModelCompute.update(model) + User.setParameter("scroll_element", block.id) + Controller:send("on_gui_update", event) + end + + if event.action == "production-block-down" then + if block == nil then + block = model.blocks[event.item2] + end + local step = 1 + if event.shift then step = User.getModSetting("row_move_step") end + if event.control then step = 1000 end + ModelBuilder.downProductionBlock(model, block, step) + ModelCompute.update(model) + User.setParameter("scroll_element", block.id) + Controller:send("on_gui_update", event) + end + + if event.action == "production-recipe-product-add" then + if event.control == false and event.shift == false then + if event.button == defines.mouse_button_type.right then + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + Controller:send("on_gui_open", event, selector_name) + else + local recipes = Player.searchRecipe(event.item4, true) + if #recipes == 1 then + local recipe = recipes[1] + local _,new_recipe = ModelBuilder.addRecipeIntoProductionBlock(model, block, recipe.name, recipe.type, 0) + ModelCompute.update(model) + User.setParameter("scroll_element", new_recipe.id) + Controller:send("on_gui_update", event) + else + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + ---pour ouvrir avec le filtre ingredient + event.button = defines.mouse_button_type.right + Controller:send("on_gui_open", event, selector_name) + end + end + elseif block ~= nil and event.control == true and event.item3 ~= "none" then + local contraint = {type="master", name=event.item4} + local recipe = block.recipes[event.item3] + ModelBuilder.updateRecipeContraint(recipe, contraint) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + elseif block ~= nil and event.shift == true and event.item3 ~= "none" then + local contraint = {type="exclude", name=event.item4} + local recipe = block.recipes[event.item3] + ModelBuilder.updateRecipeContraint(recipe, contraint) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + end + + if event.action == "production-recipe-ingredient-add" then + if event.control == false and event.shift == false then + if event.button == defines.mouse_button_type.right then + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + Controller:send("on_gui_open", event, selector_name) + else + local recipes = Player.searchRecipe(event.item4) + if #recipes == 1 then + local recipe = recipes[1] + local _,new_recipe = ModelBuilder.addRecipeIntoProductionBlock(model, block, recipe.name, recipe.type) + ModelCompute.update(model) + User.setParameter("scroll_element", new_recipe.id) + Controller:send("on_gui_update", event) + else + -- Set Parameter Target for the selector return + User.setParameter("HMRecipeSelector_target", self.classname) + Controller:send("on_gui_open", event, selector_name) + end + end + elseif block ~= nil and event.control == true and event.item4 ~= "none" then + local contraint = {type="master", name=event.item4} + local recipe = block.recipes[event.item3] + ModelBuilder.updateRecipeContraint(recipe, contraint) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + elseif block ~= nil and event.shift == true and event.item4 ~= "none" then + local contraint = {type="exclude", name=event.item4} + local recipe = block.recipes[event.item3] + ModelBuilder.updateRecipeContraint(recipe, contraint) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + end + + if block ~= nil and event.action == "conversion-recipe-block" then + local recipe = block.recipes[event.item3] + ModelBuilder.convertRecipeToblock(model, block, recipe, event.control) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if block ~= nil and event.action == "product-info" then + if block.products_linked == nil then block.products_linked = {} end + if event.control == true and event.item5 ~= "none" then + block.products_linked[event.item5] = not(block.products_linked[event.item5]) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + end + + if event.action == "update-factory-number" then + local text = event.element.text + local ok , err = pcall(function() + local value = formula(text) or 0 + local recipe = block.recipes[event.item3] + ModelBuilder.updateFactoryNumber(recipe, value) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end) + if not(ok) then + Player.print("Formula is not valid!") + end + end + + if event.action == "update-factory-limit" then + local text = event.element.text + local ok , err = pcall(function() + local value = formula(text) or 0 + local recipe = block.recipes[event.item3] + ModelBuilder.updateFactoryLimit(recipe, value) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end) + if not(ok) then + Player.print("Formula is not valid!") + end + end + + if event.action == "update-matrix-solver" then + local recipe = block.recipes[event.item3] + ModelBuilder.updateMatrixSolver(block, recipe) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "production-block-solver" then + ModelBuilder.updateBlockMatrixSolver(block) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + + if event.action == "production-recipe-remove" then + local recipe = block.recipes[event.item3] + ModelBuilder.removeProductionRecipe(block, recipe) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "production-recipe-up" then + local step = 1 + if event.shift then step = User.getModSetting("row_move_step") end + if event.control then step = 1000 end + local recipe = block.recipes[event.item3] + ModelBuilder.upProductionRecipe(block, recipe, step) + ModelCompute.update(model) + User.setParameter("scroll_element", recipe.id) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "production-recipe-down" then + local step = 1 + if event.shift then step = User.getModSetting("row_move_step") end + if event.control then step = 1000 end + local recipe = block.recipes[event.item3] + ModelBuilder.downProductionRecipe(block, recipe, step) + ModelCompute.update(model) + User.setParameter("scroll_element", recipe.id) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-switch-unlink" then + local switch_state = event.element.switch_state == "left" + ModelBuilder.updateProductionBlockOption(block, "unlinked", switch_state) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-switch-element" then + local switch_state = event.element.switch_state == "left" + ModelBuilder.updateProductionBlockOption(block, "by_product", switch_state) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-switch-factory" then + local switch_state = not(event.element.switch_state == "left") + ModelBuilder.updateProductionBlockOption(block, "by_factory", switch_state) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-switch-solver" then + local switch_state = event.element.switch_state == "right" + ModelBuilder.updateProductionBlockOption(block, "solver", switch_state) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-switch-limit" then + local switch_state = event.element.switch_state == "left" + ModelBuilder.updateProductionBlockOption(block, "by_limit", switch_state) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-by-product" then + local by_product = block.by_product ~= false + ModelBuilder.updateProductionBlockOption(block, "by_product", not(by_product)) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "block-limit" then + ModelBuilder.updateProductionBlockOption(block, "by_limit", not(block.by_limit)) + ModelCompute.update(model) + Controller:send("on_gui_update", event, self.classname) + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +---@param model table +---@param block table +function ProductionPanel:onEventAccessDelete(event, model, block) + if event.action == "remove-model" then + ModelBuilder.removeModel(event.item1) + Controller:send("on_gui_update", event) + end + + if event.action == "remove-block" then + ModelBuilder.removeProductionBlock(model, block) + ModelCompute.update(model) + Controller:send("on_gui_update", event) + end + +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +---@param model table +---@param block table +function ProductionPanel:onEventAccessAdmin(event, model, block) + if event.action == "game-pause" then + if not(game.is_multiplayer()) then + User.setParameter("auto-pause", true) + game.tick_paused = true + Controller:send("on_gui_pause", event) + end + end + + if event.action == "game-play" then + User.setParameter("auto-pause", false) + game.tick_paused = false + Controller:send("on_gui_pause", event) + end +end diff --git a/helmod/dialog/PropertiesPanel.lua b/helmod/dialog/PropertiesPanel.lua new file mode 100644 index 00000000..d94b7d6f --- /dev/null +++ b/helmod/dialog/PropertiesPanel.lua @@ -0,0 +1,480 @@ +------------------------------------------------------------------------------- +---Class to build PropertiesPanel panel +---@class PropertiesPanel +PropertiesPanel = newclass(Form,function(base,classname) + Form.init(base,classname) + base.add_special_button = true +end) + +------------------------------------------------------------------------------- +---On initialization +function PropertiesPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-button-properties"}) + self.help_button = false +end + +------------------------------------------------------------------------------- +---On bind +function PropertiesPanel:onBind() + Dispatcher:bind("on_gui_refresh", self, self.updateData) +end + +------------------------------------------------------------------------------- +---Get Button Sprites +---@return string, string +function PropertiesPanel:getButtonSprites() + return defines.sprites.database_schema.white,defines.sprites.database_schema.black +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function PropertiesPanel:isVisible() + return User.getModGlobalSetting("hidden_panels") +end + +------------------------------------------------------------------------------- +---Is special +---@return boolean +function PropertiesPanel:isSpecial() + return true +end + +------------------------------------------------------------------------------- +---Get or create menu panel +---@return LuaGuiElement +function PropertiesPanel:getMenuPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "menu-panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiFrameH(panel_name)) + panel.style.horizontally_stretchable = true + --panel.style.vertically_stretchable = true + return panel +end + +------------------------------------------------------------------------------- +---Get or create header panel +---@return LuaGuiElement +function PropertiesPanel:getHeaderPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "header-panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiFrameV(panel_name)) + panel.style.horizontally_stretchable = true + --panel.style.vertically_stretchable = true + return panel +end + +------------------------------------------------------------------------------- +---Get or create content panel +---@return LuaGuiElement +function PropertiesPanel:getContentPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "content" + local scroll_name = "data-panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name][scroll_name] + end + local panel = GuiElement.add(content_panel, GuiFrameV(panel_name)) + panel.style.horizontally_stretchable = true + panel.style.vertically_stretchable = true + local scroll_panel = GuiElement.add(panel, GuiScroll(scroll_name)) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function PropertiesPanel:onEvent(event) + if event.action == "element-delete" then + local prototype_compare = User.getParameter("prototype_compare") or {} + local index = nil + for i,prototype in pairs(prototype_compare) do + if prototype.name == event.item1 then + index = i + end + end + if index ~= nil then + table.remove(prototype_compare, index) + end + User.setParameter("prototype_compare", prototype_compare) + self:updateData(event) + end + + if event.action == "filter-nil-property-switch" then + local switch_nil = event.element.switch_state == "right" + User.setParameter("filter-nil-property", switch_nil) + self:updateData(event) + end + + if event.action == "filter-difference-property-switch" then + local switch_nil = event.element.switch_state == "right" + User.setParameter("filter-difference-property", switch_nil) + self:updateData(event) + end + + if event.action == "technology-search" then + local state = event.element.state + Player.getForce().technologies[event.item1].researched = state + self:updateData(event) + end + + if event.action == "filter-property" then + local filter = event.element.text + User.setParameter("filter-property", filter) + self:updateData(event) + end +end + +------------------------------------------------------------------------------- +---Update data +---@param event LuaEvent +function PropertiesPanel:onUpdate(event) + local flow_panel, content_panel, menu_panel = self:getPanel() + local display_width, display_height, scale = User.getMainSizes() + local width_main = display_width/scale + local height_main = display_height/scale + flow_panel.style.height = height_main + flow_panel.style.width = width_main + + self:updateMenu(event) + self:updateHeader(event) + self:updateData(event) + +end + +------------------------------------------------------------------------------- +---Update menu +---@param event LuaEvent +function PropertiesPanel:updateMenu(event) + local action_panel = self:getMenuPanel() + action_panel.clear() + GuiElement.add(action_panel, GuiButton("HMEntitySelector", "OPEN", "HMPropertiesPanel"):caption({"helmod_result-panel.select-button-entity"})) + GuiElement.add(action_panel, GuiButton("HMItemSelector", "OPEN", "HMPropertiesPanel"):caption({"helmod_result-panel.select-button-item"})) + GuiElement.add(action_panel, GuiButton("HMFluidSelector", "OPEN", "HMPropertiesPanel"):caption({"helmod_result-panel.select-button-fluid"})) + GuiElement.add(action_panel, GuiButton("HMRecipeSelector", "OPEN", "HMPropertiesPanel"):caption({"helmod_result-panel.select-button-recipe"})) + GuiElement.add(action_panel, GuiButton("HMTechnologySelector", "OPEN", "HMPropertiesPanel"):caption({"helmod_result-panel.select-button-technology"})) +end + +------------------------------------------------------------------------------- +---Update data +---@param event LuaEvent +function PropertiesPanel:updateData(event) + if not(self:isOpened()) then return end + ---data + local content_panel = self:getContentPanel() + content_panel.clear() + ---data + local filter = User.getParameter("filter-property") + local prototype_compare = User.getParameter("prototype_compare") + if prototype_compare ~= nil then + local data = {} + for _,prototype in pairs(prototype_compare) do + local data_prototype = self:getPrototypeData(prototype) + local key = string.format("%s_%s", prototype.type, prototype.name) + for _,properties in pairs(data_prototype) do + if data[properties.name] == nil then data[properties.name] = {} end + data[properties.name][key] = properties + end + end + local result_table = GuiElement.add(content_panel, GuiTable("table-resources"):column(#prototype_compare+1):style("helmod_table-rule-odd")) + + self:addTableHeader(result_table, prototype_compare) + + for property, values in pairs(data) do + if filter == nil or filter == "" or string.find(property, filter, 0, true) then + if not(User.getParameter("filter-nil-property") == true and self:isNilLine(values, prototype_compare)) then + if not(User.getParameter("filter-difference-property") == true and self:isSameLine(values, prototype_compare)) then + local cell_name = GuiElement.add(result_table, GuiFrameH("property", property):style(helmod_frame_style.hidden)) + GuiElement.add(cell_name, GuiLabel("label"):caption(property)) + + for index,prototype in pairs(prototype_compare) do + ---col value + local cell_value = GuiElement.add(result_table, GuiFrameH(property, prototype.name, index):style(helmod_frame_style.hidden)) + local key = string.format("%s_%s", prototype.type, prototype.name) + if values[key] ~= nil then + local chmod = values[key].chmod + local value = self:tableToString(values[key].value) + GuiElement.add(cell_value, GuiLabel("prototype_chmod"):caption(string.format("[%s]:", chmod))) + local label_value = GuiElement.add(cell_value, GuiLabel("prototype_value"):caption(value):style("helmod_label_max_600")) + label_value.style.width = 400 + end + end + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Add cell header +---@param guiTable LuaGuiElement +---@param name string +---@param caption string +---@param sorted any +function PropertiesPanel:addCellHeader(guiTable, name, caption, sorted) + if (name ~= "index" and name ~= "id" and name ~= "name" and name ~= "type") or User.getModGlobalSetting("display_data_col_"..name) then + local cell = GuiElement.add(guiTable, GuiFrameH("header", name):style(helmod_frame_style.hidden)) + GuiElement.add(cell, GuiLabel("label"):caption(caption)) + end +end + +------------------------------------------------------------------------------- +---Add table header +---@param itable LuaGuiElement +---@param prototype_compare table +function PropertiesPanel:addTableHeader(itable, prototype_compare) + self:addCellHeader(itable, "property", {"helmod_result-panel.col-header-name"}) + for index,prototype in pairs(prototype_compare) do + local icon_type = nil + local localised_name = nil + if prototype.type == "entity" then + local entity_prototype = EntityPrototype(prototype) + icon_type = "entity" + localised_name = entity_prototype:getLocalisedName() + elseif prototype.type == "item" then + local item_prototype = ItemPrototype(prototype) + icon_type = "item" + localised_name = item_prototype:getLocalisedName() + elseif prototype.type == "fluid" then + local fluid_prototype = FluidPrototype(prototype) + icon_type = "fluid" + localised_name = fluid_prototype:getLocalisedName() + elseif string.find(prototype.type, "recipe") then + local recipe_protoype = RecipePrototype(prototype) + icon_type = recipe_protoype:getType() + localised_name = recipe_protoype:getLocalisedName() + elseif prototype.type == "technology" then + local technology_protoype = Technology(prototype) + icon_type = "technology" + localised_name = technology_protoype:getLocalisedName() + end + local cell_header = GuiElement.add(itable, GuiFlowH("header", prototype.name, index)) + GuiElement.add(cell_header, GuiButtonSprite(self.classname, "element-delete", prototype.name, index):sprite(icon_type, prototype.name):tooltip(localised_name)) + if prototype.type == "technology" then + GuiElement.add(cell_header, GuiCheckBox(self.classname, "technology-search", prototype.name, index):state(Technology(prototype):isResearched()):tooltip("isResearched")) + end + end + + self:addCellHeader(itable, "property_type", "Element Type") + for index,prototype in pairs(prototype_compare) do + GuiElement.add(itable, GuiLabel("element_type", prototype.name, index):caption(prototype.type)) + end + + self:addCellHeader(itable, "property_name", "Element Name") + for index,prototype in pairs(prototype_compare) do + local textfield = GuiElement.add(itable, GuiTextField("element_name", prototype.name, index):text(prototype.name)) + textfield.style.width = 300 + end +end + +------------------------------------------------------------------------------- +---Update header +---@param event LuaEvent +function PropertiesPanel:updateHeader(event) + local info_panel = self:getHeaderPanel() + info_panel.clear() + local options_table = GuiElement.add(info_panel, GuiTable("options-table"):column(2)) + ---nil values + local switch_nil = "left" + if User.getParameter("filter-nil-property") == true then + switch_nil = "right" + end + GuiElement.add(options_table, GuiLabel("filter-nil-property"):caption("Hide nil values:")) + local filter_switch = GuiElement.add(options_table, GuiSwitch(self.classname, "filter-nil-property-switch"):state(switch_nil):leftLabel("Off"):rightLabel("On")) + ---difference values + local switch_nil = "left" + if User.getParameter("filter-difference-property") == true then + switch_nil = "right" + end + GuiElement.add(options_table, GuiLabel("filter-difference-property"):caption("Show differences:")) + local filter_switch = GuiElement.add(options_table, GuiSwitch(self.classname, "filter-difference-property-switch"):state(switch_nil):leftLabel("Off"):rightLabel("On")) + + GuiElement.add(options_table, GuiLabel("filter-property-label"):caption("Filter:")) + local filter_value = User.getParameter("filter-property") + local filter_field = GuiElement.add(options_table, GuiTextField(self.classname, "filter-property", "onchange"):text(filter_value)) + filter_field.style.width = 300 +end + +------------------------------------------------------------------------------- +---Parse Properties +---@param prototype table +---@param level number +---@param prototype_type table +---@return table +function PropertiesPanel:parseProperties(prototype, level, prototype_type) + if prototype == nil then return "nil" end + if level > 2 then + return prototype + --return string.match(serpent.dump(prototype),"do local _=(.*);return _;end") + end + ---special + local isluaobject, error = pcall(function() local test = prototype:help() return true end) + local object_type = type(prototype) + if isluaobject then + local properties = {} + local lua_type = string.match(prototype:help(), "Help for%s([^:]*)") + if lua_type == "LuaEntityPrototype" and prototype.name == "character" then + table.insert(properties, {name = "PLAYER.character_crafting_speed_modifier", chmod = "RW", value = Player.native().character_crafting_speed_modifier}) + table.insert(properties, {name = "PLAYER.character_mining_speed_modifier", chmod = "RW", value = Player.native().character_mining_speed_modifier}) + table.insert(properties, {name = "PLAYER.character_additional_mining_categories", chmod = "RW", value = string.match(serpent.dump(Player.native().character_additional_mining_categories),"do local _=(.*);return _;end")}) + table.insert(properties, {name = "PLAYER.character_running_speed_modifier", chmod = "RW", value = Player.native().character_running_speed_modifier}) + table.insert(properties, {name = "PLAYER.character_build_distance_bonus", chmod = "RW", value = Player.native().character_build_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_item_drop_distance_bonus", chmod = "RW", value = Player.native().character_item_drop_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_reach_distance_bonus", chmod = "RW", value = Player.native().character_reach_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_resource_reach_distance_bonus", chmod = "RW", value = Player.native().character_resource_reach_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_item_pickup_distance_bonus", chmod = "RW", value = Player.native().character_item_pickup_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_loot_pickup_distance_bonus", chmod = "RW", value = Player.native().character_loot_pickup_distance_bonus}) + table.insert(properties, {name = "PLAYER.character_inventory_slots_bonus", chmod = "RW", value = Player.native().character_inventory_slots_bonus}) + table.insert(properties, {name = "PLAYER.character_logistic_slot_count_bonus", chmod = "RW", value = Player.native().character_logistic_slot_count_bonus}) + table.insert(properties, {name = "PLAYER.character_trash_slot_count_bonus", chmod = "RW", value = Player.native().character_trash_slot_count_bonus}) + table.insert(properties, {name = "PLAYER.character_maximum_following_robot_count_bonus", chmod = "RW", value = Player.native().character_maximum_following_robot_count_bonus}) + table.insert(properties, {name = "PLAYER.character_health_bonus", chmod = "RW", value = Player.native().character_health_bonus}) + end + if (lua_type == "LuaEntityPrototype" or lua_type == "LuaItemPrototype") and prototype.type == "inserter" then + table.insert(properties, {name = "FORCE.inserter_stack_size_bonus", chmod = "RW", value = Player.getForce().inserter_stack_size_bonus}) + table.insert(properties, {name = "FORCE.stack_inserter_capacity_bonus", chmod = "RW", value = Player.getForce().stack_inserter_capacity_bonus}) + end + if lua_type == "LuaFluidBoxPrototype" then + return FluidboxPrototype(prototype):toData() + end + + local help_string = string.gmatch(prototype:help(),"(%S+) [[](RW?)[]]") + local properties = {} + for key, chmod in help_string do + local value = nil + pcall( function() + value = self:parseProperties(prototype[key], level + 1, nil) + end) + if level == 0 then + table.insert(properties, {name = key, chmod = chmod, value = value}) + else + properties[key]=value + end + end + return properties + elseif object_type == "table" then + local properties = {} + for key,value in pairs(prototype) do + properties[key] = self:parseProperties(value, level + 1, nil) + end + return properties + else + return prototype + end +end + +------------------------------------------------------------------------------- +---Table to string +---@param value table +function PropertiesPanel:tableToString(value) + if type(value) == "table" then + local key2,_ = next(value) + if type(key2) ~= "number" then + local message = "{\n" + local first = true + for key,content in pairs(value) do + local mask = "%s%s%s=%s%s" + if not(first) then + message = message..",\n" + end + if type(content) == "table" then + message = string.format(mask, message, helmod_tag.color.orange, key, helmod_tag.color.close, string.match(serpent.dump(content),"do local _=(.*);return _;end")) + else + message = string.format(mask, message, helmod_tag.color.orange, key, helmod_tag.color.close, content) + end + first = false + end + value = message.."\n}" + else + local message = "{" + local first = true + for key,content in pairs(value) do + if not(first) then + message = message.."," + end + message = message..tostring(self:tableToString(content)) + first = false + end + value = message.."}" + end + end + return value +end +------------------------------------------------------------------------------- +---Is nil line +---@param values table +---@param prototype_compare any +---@return boolean +function PropertiesPanel:isNilLine(values, prototype_compare) + local is_nil = true + for index,prototype in pairs(prototype_compare) do + local key = string.format("%s_%s", prototype.type, prototype.name) + if values[key] ~= nil and values[key].value ~= "nil" then is_nil = false end + end + return is_nil +end + +------------------------------------------------------------------------------- +---Is same line +---@param values table +---@param prototype_compare any +---@return boolean +function PropertiesPanel:isSameLine(values, prototype_compare) + local is_same = true + local compare = nil + for index,prototype in pairs(prototype_compare) do + local key = string.format("%s_%s", prototype.type, prototype.name) + if values[key] ~= nil then + if compare == nil then + compare = values[key].value + else + if values[key].value ~= compare then is_same = false end + end + end + end + return is_same +end + +------------------------------------------------------------------------------- +---Get prototype data +---@param prototype table +function PropertiesPanel:getPrototypeData(prototype) + ---data + if prototype ~= nil then + local lua_prototype = nil + if prototype.type == "entity" then + lua_prototype = EntityPrototype(prototype):native() + elseif prototype.type == "item" then + lua_prototype = ItemPrototype(prototype):native() + elseif prototype.type == "fluid" then + lua_prototype = FluidPrototype(prototype):native() + elseif string.find(prototype.type, "recipe") then + local recipe_prototype = RecipePrototype(prototype) + lua_prototype = recipe_prototype:native() + if recipe_prototype:getType() ~= "recipe" then + function lua_prototype:help() + local help = "Help for LuaRecipePrototype:Methods:help(...)Values:" + for key,_ in pairs(lua_prototype) do + help = string.format("%s %s [R]", help, key) + end + return help + end + end + elseif prototype.type == "technology" then + lua_prototype = Technology(prototype):native() + end + if lua_prototype ~= nil then + return self:parseProperties(lua_prototype, 0, prototype.type) + end + end + return {} +end \ No newline at end of file diff --git a/helmod/dialog/PrototypeFiltersPanel.lua b/helmod/dialog/PrototypeFiltersPanel.lua new file mode 100644 index 00000000..b85c0eaf --- /dev/null +++ b/helmod/dialog/PrototypeFiltersPanel.lua @@ -0,0 +1,607 @@ +------------------------------------------------------------------------------- +---Class to build PrototypeFiltersPanel panel +---@class PrototypeFiltersPanel +PrototypeFiltersPanel = newclass(Form,function(base,classname) + Form.init(base,classname) + base.add_special_button = true +end) + +local modes = nil +local filter_types = nil +local inverts = nil +local comparisons = nil +local collision_mask = {} +local collision_mask_mode = {} +local samples = {} +local sample = {name="list of production machines", type="entity", value={}} +table.insert(sample.value, { mode="and", filter="crafting-machine", invert="false"}) +table.insert(sample.value, { mode="and", filter="hidden", invert="true"}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="lab"}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="mining-drill"}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="rocket-silo"}) +table.insert(samples, sample) + +local sample = {name="list of production machines II", type="entity", value={}} +table.insert(sample.value, {filter="crafting-machine", mode="or"}) +table.insert(sample.value, {filter="hidden", mode="and", invert="true"}) +table.insert(sample.value, {filter="crafting-machine", mode="or"}) +table.insert(sample.value, {filter="flag", flag="player-creation", mode="and"}) +table.insert(sample.value, {filter="type", type="lab", mode="or"}) +table.insert(sample.value, {filter="hidden", mode="and", invert="true"}) +table.insert(sample.value, {filter="type", type="lab", mode="or"}) +table.insert(sample.value, {filter="flag", flag="player-creation", mode="and"}) +table.insert(sample.value, {filter="type", type="mining-drill", mode="or"}) +table.insert(sample.value, {filter="hidden", mode="and", invert="true"}) +table.insert(sample.value, {filter="type", type="mining-drill", mode="or"}) +table.insert(sample.value, {filter="flag", flag="player-creation", mode="and"}) +table.insert(sample.value, {filter="type", type="rocket-silo", mode="or"}) +table.insert(sample.value, {filter="hidden", mode="and", invert="true"}) +table.insert(sample.value, {filter="type", type="rocket-silo", mode="or"}) +table.insert(sample.value, {filter="flag", flag="player-creation", mode="and"}) +table.insert(samples, sample) + +sample = {name="list of beacons", type="entity", value={}} +table.insert(sample.value, { mode="and", filter="type", invert="false", option="beacon"}) +table.insert(sample.value, { mode="and", filter="hidden", invert="true"}) +table.insert(samples, sample) + +sample = {name="list of offshore-pumps", type="entity", value={}} +table.insert(sample.value, { mode="and", filter="type", invert="false", option="offshore-pump"}) +table.insert(sample.value, { mode="and", filter="hidden", invert="true"}) +table.insert(samples, sample) + +sample = {name="list of modules", type="item", value={}} +table.insert(sample.value, { mode="and", filter="type", invert="false", option="module"}) +table.insert(sample.value, { mode="and", filter="flag", invert="true", option="hidden"}) +table.insert(samples, sample) + +sample = {name="list of power machines", type="entity", value={}} +for _,type in pairs({"generator", "solar-panel", "accumulator", "reactor", "burner-generator", "electric-energy-interface"}) do + table.insert(sample.value, { mode="or", filter="type", invert="false", option=type}) +end +table.insert(samples, sample) + +sample = {name="list of fuels", type="item", value={}} +table.insert(sample.value, { mode="or", filter="fuel-value", invert="false", option={value=0,comparison=">"}}) +table.insert(samples, sample) + +sample = {name="Item logistic list of inserters", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="inserter"}) +table.insert(samples, sample) + +sample = {name="Item logistic list of belts", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="transport-belt"}) +table.insert(samples, sample) + +sample = {name="Item logistic list of containers", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="container"}) +table.insert(sample.value, { mode="and", filter="minable", invert="false", option=nil}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="logistic-container"}) +table.insert(sample.value, { mode="and", filter="minable", invert="false", option=nil}) +table.insert(samples, sample) + +sample = {name="Item logistic list of transports", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="cargo-wagon"}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="logistic-robot"}) +table.insert(sample.value, { mode="or", filter="type", invert="false", option="car"}) +table.insert(samples, sample) + +sample = {name="Fluid logistic list of pipes", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="pipe"}) +table.insert(samples, sample) + +sample = {name="Fluid logistic list of containers", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="storage-tank"}) +table.insert(sample.value, { mode="and", filter="minable", invert="false", option=nil}) +table.insert(samples, sample) + +sample = {name="Fluid logistic list of transports", type="entity", value={}} +table.insert(sample.value, { mode="or", filter="type", invert="false", option="fluid-wagon"}) +table.insert(samples, sample) + +------------------------------------------------------------------------------- +---On initialization +function PrototypeFiltersPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-button-prototype-filters"}) + self.help_button = false +end + +------------------------------------------------------------------------------- +---Get Button Sprites +---@return string, string +function PrototypeFiltersPanel:getButtonSprites() + return defines.sprites.database_method.white,defines.sprites.database_method.black +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function PrototypeFiltersPanel:isVisible() + return User.getModGlobalSetting("hidden_panels") +end + +------------------------------------------------------------------------------- +---Is special +---@return boolean +function PrototypeFiltersPanel:isSpecial() + return true +end + +------------------------------------------------------------------------------- +---Get or create menu panel +---@return LuaGuiElement +function PrototypeFiltersPanel:getMenuPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "menu-panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiFrameV(panel_name)) + panel.style.vertically_stretchable = true + local display_width, display_height, scale = User.getMainSizes() + local width_main = display_width/scale + local height_main = display_height/scale + panel.style.minimal_height = 40 + panel.style.minimal_width = width_main + return panel +end + +------------------------------------------------------------------------------- +---Get or create content panel +---@return LuaGuiElement +function PrototypeFiltersPanel:getContentPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + local panel_name = "data-panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiFrameV(panel_name)) + panel.style.vertically_stretchable = true + local display_width, display_height, scale = User.getMainSizes() + local width_main = display_width/scale + local height_main = display_height/scale + panel.style.minimal_height = height_main-300 + panel.style.minimal_width = width_main + return panel +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function PrototypeFiltersPanel:onEvent(event) + local prototype_filter = User.getParameter("prototype_filter") + local prototype_filters = User.getParameter("prototype_filters") or {} + + filter_types = PrototypeFilters.getTypes() + local prototype_filter_type = User.getParameter("prototype_filter_type") or filter_types[1] + local PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + + local index = tonumber(event.item1) or 0 + if index > 0 then + prototype_filter = prototype_filters[index] + end + if event.action == "change-prototype-filter-type" then + local selected_index = event.element.selected_index + prototype_filter_type = filter_types[selected_index] + User.setParameter("prototype_filter_type", prototype_filter_type) + + PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + local filters = PrototypeFilter:getFilters() + prototype_filter.filter = filters[1] + local options = PrototypeFilter:getOptions(prototype_filter.filter) + prototype_filter.option = options[1] or nil + + User.setParameter("prototype_filters", {}) + + end + + if event.action == "change-prototype-filter" then + local selected_index = event.element.selected_index + prototype_filter.filter = PrototypeFilter:getFilters()[selected_index] + prototype_filter.option = PrototypeFilter:getOptions(prototype_filter.filter)[1] or nil + end + + if event.action == "change-filter-option" then + local selected_index = event.element.selected_index + local options = PrototypeFilter:getOptions(prototype_filter.filter) + prototype_filter.option = options[selected_index] or nil + end + + if event.action == "change-filter-invert" then + local selected_index = event.element.selected_index + prototype_filter.invert = inverts[selected_index] + end + + if event.action == "change-filter-mode" then + local selected_index = event.element.selected_index + prototype_filter.mode = modes[selected_index] + end + + if event.action == "change-filter-option-comparison" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {value=0} end + prototype_filter.option.comparison = comparisons[selected_index] + end + + if event.action == "change-filter-option-value" then + local text = event.element.text + local value = tonumber(text) + if prototype_filter.option == nil then prototype_filter.option = {comparison="<"} end + prototype_filter.option.value = value + end + + if event.action == "change-filter-option-collision-mask" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {mask_mode =collision_mask_mode[1]} end + prototype_filter.option.mask = collision_mask[selected_index] + end + + if event.action == "change-filter-option-collision-mask-mode" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {mask=collision_mask[1]} end + prototype_filter.option.mask_mode = collision_mask_mode[selected_index] + end + + if event.action == "add-prototype-filter" then + table.insert(prototype_filters, prototype_filter) + User.setParameter("prototype_filters", prototype_filters) + prototype_filter = nil + self:updateData() + end + + if event.action == "remove-prototype-filter" then + if #prototype_filters == 1 then + prototype_filters = nil + else + table.remove(prototype_filters, index) + end + User.setParameter("prototype_filters", prototype_filters) + self:updateData() + end + + if prototype_filters ~= nil and index > 0 then + prototype_filters[index] = prototype_filter + User.setParameter("prototype_filters", prototype_filters) + self:updateData() + else + User.setParameter("prototype_filter", prototype_filter) + self:updateData() + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function PrototypeFiltersPanel:onUpdate(event) + ---prepare + PrototypeFilters.initialization() + modes = PrototypeFilters.getModes() + filter_types = PrototypeFilters.getTypes() + inverts = PrototypeFilters.getInverts() + comparisons = PrototypeFilters.getComparison() + collision_mask = PrototypeFilters.getCollisionMask() + collision_mask_mode = PrototypeFilters.getCollisionMaskMode() + ---update + self:updateFilter() + self:updateResult() +end + +------------------------------------------------------------------------------- +---Update header filter +---@param itable LuaGuiElement +function PrototypeFiltersPanel:addHeaderFilter(itable) + GuiElement.add(itable, GuiLabel("mode"):caption("Mode")) + GuiElement.add(itable, GuiLabel("invert"):caption("Invert")) + GuiElement.add(itable, GuiLabel("filter"):caption("Filter")) + GuiElement.add(itable, GuiLabel("option"):caption("Option")) + GuiElement.add(itable, GuiLabel("result"):caption("String")) + GuiElement.add(itable, GuiLabel("action"):caption("Action")) +end + +------------------------------------------------------------------------------- +---Update row filter +---@param itable LuaGuiElement +---@param prototype_filter table +---@param index number +function PrototypeFiltersPanel:addRowFilter(itable, prototype_filter, index) + index = index or 0 + ---type col + local prototype_filter_type = User.getParameter("prototype_filter_type") or filter_types[1] + local PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + ---mode col + prototype_filter.mode = prototype_filter.mode or modes[1] + local button_mode = GuiElement.add(itable, GuiDropDown(self.classname, "change-filter-mode", index):items(modes, prototype_filter.mode)) + button_mode.style.width = 80 + ---invert col + prototype_filter.invert = prototype_filter.invert or inverts[1] + local button_invert = GuiElement.add(itable, GuiDropDown(self.classname, "change-filter-invert", index):items(inverts, prototype_filter.invert)) + button_invert.style.width = 80 + ---filter col + local filters = PrototypeFilter:getFilters() + prototype_filter.filter = prototype_filter.filter or filters[1] + GuiElement.add(itable, GuiDropDown(self.classname, "change-prototype-filter", index):items(filters, prototype_filter.filter)) + + local options = PrototypeFilter:getOptions(prototype_filter.filter) + if options == "comparison" then + local comparaison_cell = GuiElement.add(itable, GuiTable("comparison"):column(2)) + local comparison = "<" + local comparison_value = "" + if prototype_filter.option ~= nil then + comparison = prototype_filter.option.comparison + comparison_value = prototype_filter.option.value or 0 + end + GuiElement.add(comparaison_cell, GuiDropDown(self.classname, "change-filter-option-comparison", index):items(comparisons, comparison)) + GuiElement.add(comparaison_cell, GuiTextField(self.classname, "change-filter-option-value", index):text(comparison_value)) + elseif prototype_filter.filter == "name" then + local name_cell = GuiElement.add(itable, GuiTable("names"):column(2)) + local names_value = "" + if prototype_filter.option ~= nil then + names_value = prototype_filter.option or "" + end + GuiElement.add(name_cell, GuiTextField(self.classname, "change-filter-option-value", index):text(names_value)) + elseif prototype_filter.filter == "collision-mask" then + local collision_mask_cell = GuiElement.add(itable, GuiTable("collision-mask"):column(2)) + local mask = collision_mask[1] + local mask_mode = collision_mask_mode[1] + if prototype_filter.option ~= nil then + mask = prototype_filter.option.mask + mask_mode = prototype_filter.option.mask_mode + end + GuiElement.add(collision_mask_cell, GuiDropDown(self.classname, "change-filter-option-collision-mask", index):items(collision_mask, mask)) + GuiElement.add(collision_mask_cell, GuiDropDown(self.classname, "change-filter-option-collision-mask-mode", index):items(collision_mask_mode, mask_mode)) + elseif table.size(options) > 0 then + prototype_filter.option = prototype_filter.option or options[1] + GuiElement.add(itable, GuiDropDown(self.classname, "change-filter-option", index):items(options, prototype_filter.option)) + else + GuiElement.add(itable, GuiLabel("option-none", index):caption("None")) + end + ---result col + local filter_value = PrototypeFiltersPanel:convertFilter(prototype_filter) + local string_value = PrototypeFiltersPanel:tableToString(filter_value) + local text_field = GuiElement.add(itable, GuiTextField(self.classname, "change-textfield", index):text(string_value)) + text_field.style.width = 400 + if index == 0 then + GuiElement.add(itable, GuiButton(self.classname, "add-prototype-filter", index):caption("+"):style("helmod_button_small_bold")) + else + GuiElement.add(itable, GuiButton(self.classname, "remove-prototype-filter", index):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red")) + end +end + +------------------------------------------------------------------------------- +---Update filter +function PrototypeFiltersPanel:updateFilter() + ---data + local content_panel = self:getMenuPanel() + content_panel.clear() + ---type + local choose_panel = GuiElement.add(content_panel, GuiFlowH("choose-filter")) + choose_panel.style.horizontal_spacing = 5 + local prototype_filter_type = User.getParameter("prototype_filter_type") or filter_types[1] + GuiElement.add(choose_panel, GuiLabel("prototype"):caption("Type")) + GuiElement.add(choose_panel, GuiDropDown(self.classname, "change-prototype-filter-type"):items(filter_types, prototype_filter_type)) + GuiElement.add(choose_panel, GuiLabel("sample"):caption("Sample")) + local items = {} + table.insert(items, "Choose a sample") + for _,sample in pairs(samples) do + table.insert(items, sample.name) + end + GuiElement.add(choose_panel, GuiDropDown(self.classname, "choose-sample"):items(items)) + + + local resultTable = GuiElement.add(content_panel, GuiTable("table-filter"):column(6)) + self:addHeaderFilter(resultTable) + + local PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + + local prototype_filter = User.getParameter("prototype_filter") + if prototype_filter == nil then + prototype_filter = {} + prototype_filter.mode = modes[1] + prototype_filter.filter = PrototypeFilter:getFilters()[1] + prototype_filter.option = PrototypeFilter:getOptions(prototype_filter.filter)[1] or nil + prototype_filter.invert = inverts[1] + User.setParameter("prototype_filter", prototype_filter) + end + self:addRowFilter(resultTable, prototype_filter, 0) + +end + +------------------------------------------------------------------------------- +---Update result +---@param prototype_filter table +---@return table +function PrototypeFiltersPanel:convertFilter(prototype_filter) + local filter = {mode= prototype_filter.mode, invert=(prototype_filter.invert=="true"), filter=prototype_filter.filter } + if prototype_filter.option ~= nil then + if prototype_filter.option.comparison ~= nil then + filter["comparison"] = prototype_filter.option.comparison + filter["value"] = prototype_filter.option.value + elseif prototype_filter.option.mask ~= nil then + filter["mask"] = prototype_filter.option.mask + filter["mask_mode"] = prototype_filter.option.mask_mode + else + filter[prototype_filter.filter] = prototype_filter.option + end + end + return filter +end + +------------------------------------------------------------------------------- +---Table to string +---@param value table +---@return string +function PrototypeFiltersPanel:tableToString(value) + local string_value = serpent.line(value) + string_value = string.gsub(string_value, "},", "},\n") + return string_value +end + +------------------------------------------------------------------------------- +---Update result +function PrototypeFiltersPanel:updateResult() + ---data + local content_panel = self:getContentPanel() + content_panel.clear() + GuiElement.add(content_panel, GuiLabel("data-label"):caption({"helmod_common.filter"}):style("helmod_label_title_frame")) + + local prototype_filters = User.getParameter("prototype_filters") or {} + + if table.size(prototype_filters) > 0 then + local resultTable = GuiElement.add(content_panel, GuiTable("table-filters"):column(6)) + ---prototype filter + self:addHeaderFilter(resultTable) + + for index,filter in spairs(prototype_filters) do + self:addRowFilter(resultTable, filter, index) + end + + local data_panel = GuiElement.add(content_panel, GuiFlowH("data")) + ---elements list + + local filters = {} + for _,prototype_filter in pairs(prototype_filters) do + local filter = PrototypeFiltersPanel:convertFilter(prototype_filter) + table.insert(filters, filter) + end + + ---text filter + local string_data = PrototypeFiltersPanel:tableToString(filters) + local text_box = GuiElement.add(data_panel, GuiTextBox("string-data"):text(string_data)) + text_box.read_only=true + text_box.style.width = 400 + text_box.style.height = 300 + + ---result filter + local elements_table = GuiElement.add(data_panel, GuiTable("table-elements"):column(20)) + local prototype_filter_type = User.getParameter("prototype_filter_type") or filter_types[1] + + local PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + local elements = PrototypeFilter:getElements(filters) + for key,element in pairs(elements) do + GuiElement.add(elements_table, GuiButtonSprite("nothing"):sprite(prototype_filter_type, element.name):tooltip(element.localised_name)) + end + + end + +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function PrototypeFiltersPanel:onEvent(event) + local prototype_filter = User.getParameter("prototype_filter") + local prototype_filters = User.getParameter("prototype_filters") or {} + + filter_types = PrototypeFilters.getTypes() + local prototype_filter_type = User.getParameter("prototype_filter_type") or filter_types[1] + local PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + + local index = tonumber(event.item1) or 0 + + if event.action == "choose-sample" then + local selected_index = event.element.selected_index - 1 + if selected_index > 0 and samples[selected_index] ~= nil then + local sample = samples[selected_index] + User.setParameter("prototype_filter_type", sample.type) + User.setParameter("prototype_filters", sample.value) + self:onUpdate() + end + return + end + + if event.action == "add-prototype-filter" then + table.insert(prototype_filters, table.deepcopy(prototype_filter)) + User.setParameter("prototype_filters", prototype_filters) + self:onUpdate() + return + end + + if event.action == "remove-prototype-filter" then + if #prototype_filters == 1 then + prototype_filters = nil + else + table.remove(prototype_filters, index) + end + User.setParameter("prototype_filters", prototype_filters) + self:onUpdate() + return + end + + if index > 0 then + prototype_filter = prototype_filters[index] + end + if event.action == "change-prototype-filter-type" then + local selected_index = event.element.selected_index + prototype_filter_type = filter_types[selected_index] + User.setParameter("prototype_filter_type", prototype_filter_type) + + PrototypeFilter = PrototypeFilters.getFilterType(prototype_filter_type) + local filters = PrototypeFilter:getFilters() + prototype_filter.filter = filters[1] + local options = PrototypeFilter:getOptions(prototype_filter.filter) + prototype_filter.option = options[1] or nil + + User.setParameter("prototype_filters", {}) + + end + + if event.action == "change-prototype-filter" then + local selected_index = event.element.selected_index + prototype_filter.filter = PrototypeFilter:getFilters()[selected_index] + prototype_filter.option = PrototypeFilter:getOptions(prototype_filter.filter)[1] or nil + end + + if event.action == "change-filter-option" then + local selected_index = event.element.selected_index + local options = PrototypeFilter:getOptions(prototype_filter.filter) + prototype_filter.option = options[selected_index] or nil + end + + if event.action == "change-filter-invert" then + local selected_index = event.element.selected_index + prototype_filter.invert = inverts[selected_index] + end + + if event.action == "change-filter-mode" then + local selected_index = event.element.selected_index + prototype_filter.mode = modes[selected_index] + end + + if event.action == "change-filter-option-comparison" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {value=0} end + prototype_filter.option.comparison = comparisons[selected_index] + end + + if event.action == "change-filter-option-value" then + local text = event.element.text + if prototype_filter.filter == "name" then + prototype_filter.option = text + else + local value = tonumber(text) + if prototype_filter.option == nil then prototype_filter.option = {comparison="<"} end + prototype_filter.option.value = value + end + end + + if event.action == "change-filter-option-collision-mask" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {mask_mode =collision_mask_mode[1]} end + prototype_filter.option.mask = collision_mask[selected_index] + end + + if event.action == "change-filter-option-collision-mask-mode" then + local selected_index = event.element.selected_index + if prototype_filter.option == nil then prototype_filter.option = {mask=collision_mask[1]} end + prototype_filter.option.mask_mode = collision_mask_mode[selected_index] + end + + if prototype_filters ~= nil and index > 0 then + prototype_filters[index] = prototype_filter + User.setParameter("prototype_filters", prototype_filters) + self:onUpdate() + else + User.setParameter("prototype_filter", prototype_filter) + self:onUpdate() + end +end \ No newline at end of file diff --git a/helmod/dialog/RecipeExplorer.lua b/helmod/dialog/RecipeExplorer.lua new file mode 100644 index 00000000..75df9568 --- /dev/null +++ b/helmod/dialog/RecipeExplorer.lua @@ -0,0 +1,286 @@ +------------------------------------------------------------------------------- +---Class to build RecipeExplorer panel +---@class RecipeExplorer +RecipeExplorer = newclass(Form) + +local display_panel = nil + +------------------------------------------------------------------------------- +---Initialization +function RecipeExplorer:onInit() + self.panelCaption = ({"helmod_recipe-explorer-panel.title"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function RecipeExplorer:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 300, + maximal_width = width_main, + minimal_height = 200, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------ +---Get Button Sprites +---@return string, string +function RecipeExplorer:getButtonSprites() + return defines.sprites.search.white, defines.sprites.search.black +end + +------------------------------------------------------------------------------- +---Is tool +---@return boolean +function RecipeExplorer:isTool() + return true +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function RecipeExplorer:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) + --Dispatcher:bind("on_gui_selected", self, self.event) +end + +------------------------------------------------------------------------------- +---Get or create info panel +function RecipeExplorer:getInfoPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["info-panel"] ~= nil and content_panel["info-panel"].valid then + return content_panel["info-panel"]["scroll-panel"] + end + local mainPanel = GuiElement.add(content_panel, GuiFrameV("info-panel"):style(helmod_frame_style.panel)) + mainPanel.style.horizontally_stretchable = true + mainPanel.style.vertically_stretchable = true + local scroll_panel = GuiElement.add(mainPanel, GuiScroll("scroll-panel")) + scroll_panel.style.horizontally_stretchable = false + return scroll_panel +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function RecipeExplorer:updateHeader(event) + local action_panel, _ = self:getMenuPanel() + action_panel.clear() + local group1 = GuiElement.add(action_panel, GuiFlowH("group1")) + group1.style.horizontal_spacing = 10 + GuiElement.add(group1, GuiButton(self.classname, "open-recipe-selector", self.classname):sprite("menu", defines.sprites.script.black, defines.sprites.script.black):style("helmod_button_menu_actived_green"):tooltip({"helmod_result-panel.add-button-recipe"})) + GuiElement.add(group1, GuiButton(self.classname, "generate-block", self.classname):sprite("menu", defines.sprites.settings.black, defines.sprites.settings.black):style("helmod_button_menu"):tooltip({"helmod_recipe-explorer-panel.generate-block"})) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function RecipeExplorer:onEvent(event) + local recipe_explore = User.getParameter("explore_recipe") + if event.action == "remove-child" then + self:removeRecipe(recipe_explore, event.item3) + self:updateDisplay() + end + + if event.action == "generate-block" then + local parameter_name = string.format("%s_%s", "HMProductionPanel", "objects") + local parameter_objects = User.getParameter(parameter_name) + local model, _, _ = Model.getParameterObjects(parameter_objects) + local block = self:generateBlock(model, nil, recipe_explore) + ModelCompute.update(model) + User.setParameter(parameter_name, {name=parameter_name, model=model.id, block=block.id}) + Controller:send("on_gui_update", event) + end + + if event.action == "add-parent" then + User.setParameter("explore_recipe_mode", "add-parent") + local recipes = Player.searchRecipe(event.item2, true) + if #recipes == 1 then + local recipe = recipes[1] + local new_recipe = {type = recipe.type, name = recipe.name, id=game.tick } + self:addRecipe(new_recipe, recipe_explore, event.item3) + self:updateDisplay() + else + User.setParameter("explore_recipe_id", event.item3) + event.item1 = self.classname + event.item3 = event.item2 + event.action = "OPEN" + event.button = defines.mouse_button_type.right + Dispatcher:send("on_gui_open", event, "HMRecipeSelector") + end + end + + if event.action == "add-child" then + User.setParameter("explore_recipe_mode", "add-child") + local recipes = Player.searchRecipe(event.item2) + if #recipes == 1 then + local recipe = recipes[1] + local new_recipe = {type = recipe.type, name = recipe.name, id=game.tick } + self:addRecipe(recipe_explore, new_recipe, event.item3) + self:updateDisplay() + else + User.setParameter("explore_recipe_id", event.item3) + event.item1 = self.classname + event.item3 = event.item2 + event.action = "OPEN" + Dispatcher:send("on_gui_open", event, "HMRecipeSelector") + end + end + ---from RecipeSelector + if event.action == "open-recipe-selector" then + User.setParameter("explore_recipe_mode", "add-child") + User.setParameter("explore_recipe_id", nil) + event.item1 = self.classname + event.action = "OPEN" + Dispatcher:send("on_gui_open", event, "HMRecipeSelector") + end + + ---from RecipeSelector + if event.action == "element-select" then + local explore_recipe_mode = User.getParameter("explore_recipe_mode") + local explore_recipe_id = User.getParameter("explore_recipe_id") + local new_recipe = {type = event.item1, name = event.item2, id=game.tick } + if explore_recipe_id == nil then + User.setParameter("explore_recipe", new_recipe) + else + if explore_recipe_mode == "add-parent" then + self:addRecipe(new_recipe, recipe_explore, explore_recipe_id) + User.setParameter("explore_recipe", new_recipe) + else + self:addRecipe(recipe_explore, new_recipe, explore_recipe_id) + end + end + self:updateDisplay() + end +end + +function RecipeExplorer:generateBlock(model, block, recipe) + block = ModelBuilder.addRecipeIntoProductionBlock(model, block, recipe.name, recipe.type) + if recipe.children then + for _,child in pairs(recipe.children) do + self:generateBlock(model, block, child) + end + end + return block +end + +------------------------------------------------------------------------------- +---On update +---@param parent table +---@param recipe any +---@param id any +function RecipeExplorer:addRecipe(parent, recipe, id) + local explore_recipe_mode = User.getParameter("explore_recipe_mode") + if explore_recipe_mode == "add-parent" then + if recipe.id == tonumber(id or 0) then + if parent.children == nil then parent.children = {} end + table.insert(parent.children, recipe) + elseif recipe.children then + for _,child in pairs(recipe.children) do + self:addRecipe(parent, child, id) + end + end + else + if parent.id == tonumber(id or 0) then + if parent.children == nil then parent.children = {} end + table.insert(parent.children, recipe) + elseif parent.children then + for _,child in pairs(parent.children) do + self:addRecipe(child, recipe, id) + end + end + end +end + +------------------------------------------------------------------------------- +---On update +---@param parent table +---@param id any +function RecipeExplorer:removeRecipe(parent, id) + if parent.children then + local index_remove = nil + for index,child in pairs(parent.children) do + if child.id == tonumber(id or 0) then + index_remove = index + end + end + if index_remove == nil then + for _,child in pairs(parent.children) do + self:removeRecipe(child, id) + end + else + table.remove(parent.children,index_remove) + end + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function RecipeExplorer:onUpdate(event) + self:updateHeader(event) + self:updateDisplay() +end + +------------------------------------------------------------------------------- +---Update display +function RecipeExplorer:updateDisplay() + local content_panel = self:getInfoPanel() + content_panel.clear() + local recipe_explore = User.getParameter("explore_recipe") + self:addCell(content_panel, recipe_explore, 0) +end + +------------------------------------------------------------------------------- +---Add cell +---@param parent any +---@param recipe table +---@param index any +function RecipeExplorer:addCell(parent, recipe, index) + if recipe ~= nil then + local recipe_prototype = RecipePrototype(recipe) + if recipe_prototype:native() ~= nil then + local cell = GuiElement.add(parent, GuiTable("cell-recipe", index):column(2)) + local cell_recipe = GuiElement.add(cell, GuiFrameH("cell-recipe"):style("helmod_frame_element", "gray", 1)) + cell_recipe.style.padding=5 + + cell_recipe.style.horizontally_stretchable = false + local cell_table = GuiElement.add(cell_recipe, GuiTable("cell-table"):column(3)) + cell_table.style.horizontal_spacing=5 + ---products + local cell_products = GuiElement.add(cell_table, GuiFlowV("cell-products")) + for index, lua_product in pairs(recipe_prototype:getProducts(recipe.factory)) do + local product_prototype = Product(lua_product) + local product = product_prototype:clone() + product.count = product_prototype:getElementAmount() + product.time = 1 + GuiElement.add(cell_products, GuiCellElementSm(self.classname, "add-parent", product.type, product.name, recipe.id or 0):element(product):tooltip("tooltip.add-recipe"):index(index):color(GuiElement.color_button_none)) + end + ---recipe + local icon_name, icon_type = recipe_prototype:getIcon() + local button = GuiElement.add(cell_table, GuiButtonSprite(self.classname, "remove-child", recipe.type, recipe.name, recipe.id or 0):choose(icon_type, icon_name, recipe_prototype.name)) + button.locked = true + if recipe.type ~= "recipe" then + local sprite = GuiElement.add(button, GuiSprite("info"):sprite("developer"):tooltip({"tooltip.resource-recipe"})) + sprite.style.top_padding = -8 + end + ---ingredients + local cell_ingredients = GuiElement.add(cell_table, GuiFlowV("cell-ingredients")) + for index, lua_ingredient in pairs(recipe_prototype:getIngredients(recipe.factory)) do + local ingredient_prototype = Product(lua_ingredient) + local ingredient = ingredient_prototype:clone() + ingredient.count = ingredient_prototype:getElementAmount() + ingredient.time = 1 + GuiElement.add(cell_ingredients, GuiCellElementSm(self.classname, "add-child", ingredient.type, ingredient.name, recipe.id or 0):element(ingredient):tooltip("tooltip.add-recipe"):index(index):color(GuiElement.color_button_add)) + end + local cell_children = GuiElement.add(cell, GuiFlowV("cell-children")) + cell_children.style.vertical_spacing=10 + if recipe.children ~= nil then + for child_index, child_recipe in pairs(recipe.children) do + self:addCell(cell_children, child_recipe, child_index) + end + end + end + end +end \ No newline at end of file diff --git a/helmod/dialog/RichTextPanel.lua b/helmod/dialog/RichTextPanel.lua new file mode 100644 index 00000000..6ea7adbf --- /dev/null +++ b/helmod/dialog/RichTextPanel.lua @@ -0,0 +1,160 @@ +------------------------------------------------------------------------------- +---Class to build pin tab dialog +---@class RichTextPanel +RichTextPanel = newclass(Form) + +------------------------------------------------------------------------------- +---On initialization +function RichTextPanel:onInit() + self.panelCaption = ({"helmod_panel.richtext"}) + self.otherClose = false +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function RichTextPanel:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 322, + maximal_width = 322, + minimal_height = 300, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------ +---Get Button Sprites +---@return string, string +function RichTextPanel:getButtonSprites() + return defines.sprites.text_block.white,defines.sprites.text_block.black +end + +------------------------------------------------------------------------------- +---Is tool +---@return boolean +function RichTextPanel:isTool() + return true +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function RichTextPanel:onUpdate(event) + self:updateHeader(event) + self:updateInput(event) + self:updateHistory(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function RichTextPanel:updateHeader(event) + local header_panel = self:getTopPanel() + header_panel.clear() + local element_list = {} + table.insert(element_list, {type="item", localized_name={"helmod_common.item"}}) + table.insert(element_list, {type="fluid", localized_name={"helmod_common.fluid"}}) + table.insert(element_list, {type="recipe", localized_name={"helmod_common.recipe"}}) + table.insert(element_list, {type="entity", localized_name={"helmod_common.entity"}}) + table.insert(element_list, {type="technology", localized_name={"helmod_common.technology"}}) + + local selectors = GuiElement.add(header_panel, GuiTable("selection"):column(#element_list)) + selectors.style.horizontal_spacing = 10 + for _,element in pairs(element_list) do + GuiElement.add(selectors, GuiLabel("label", element.type):caption(element.localized_name)) + end + for _,element in pairs(element_list) do + GuiElement.add(selectors, GuiButtonSelectSprite(self.classname, "element-select", element.type):choose(element.type):color("gray"):tooltip({"helmod_button.choose-element"})) + end +end + +------------------------------------------------------------------------------- +---Update input +---@param event LuaEvent +function RichTextPanel:updateInput(event) + local input_panel = self:getFramePanel("input-panel") + local richtext_text = User.getParameter("richtext_text") + input_panel.clear() + + ---rich text + local text_panel = GuiElement.add(input_panel, GuiTable("text_panel"):column(3)) + text_panel.style.cell_padding = 3 + local text_field = GuiElement.add(text_panel, GuiTextField(self.classname, "input-text", "onchange"):text(richtext_text)) + text_field.style.width = 200 + text_field.lose_focus_on_confirm = false + text_field.focus() + GuiElement.add(text_panel, GuiButton(self.classname, "richtext-clear"):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_actived_red"):tooltip({"helmod_button.clear"})) + GuiElement.add(text_panel, GuiButton(self.classname, "richtext-save"):sprite("menu", defines.sprites.save.black, defines.sprites.save.black):style("helmod_button_menu_sm_actived_green"):tooltip({"helmod_button.save"})) +end + +------------------------------------------------------------------------------- +---Update history +---@param event LuaEvent +function RichTextPanel:updateHistory(event) + local history_panel = self:getScrollPanel("history-panel") + local richtext_text = User.getParameter("richtext_text") + history_panel.clear() + history_panel.style.vertically_stretchable = true + + ---history + local richtext_history = User.getParameter("richtext_history") or {} + local table_panel = GuiElement.add(history_panel, GuiTable("table_panel"):column(2)) + for index,value in pairs(richtext_history) do + local button = GuiElement.add(table_panel, GuiButton(self.classname, "richtext-history-use", index):caption(value):style("helmod_button_left"):tooltip({"helmod_button.use"})) + button.style.width = 250 + GuiElement.add(table_panel, GuiButton(self.classname, "richtext-history-delete", index):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_actived_red"):tooltip({"helmod_button.delete"})) + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function RichTextPanel:onEvent(event) + if event.action == "element-select" then + local element_type = event.element.elem_type + local element_name = event.element.elem_value + event.element.elem_value = nil + if element_name ~= nil then + local richtext_text = User.getParameter("richtext_text") or "" + richtext_text = string.format("%s[%s=%s]",richtext_text, element_type, element_name) + User.setParameter("richtext_text", richtext_text) + self:onUpdate(event) + end + end + if event.action == "input-text" then + User.setParameter("richtext_text", event.element.text) + end + if event.action == "richtext-clear" then + User.setParameter("richtext_text", "") + self:onUpdate(event) + end + if event.action == "richtext-save" then + local text_field_name = table.concat({self.classname, "input-text", "onchange"},"=") + if event.element.parent ~= nil and event.element.parent[text_field_name] ~= nil then + local richtext_history = User.getParameter("richtext_history") or {} + local richtext_text = event.element.parent[text_field_name].text + table.insert(richtext_history, richtext_text) + User.setParameter("richtext_history", richtext_history) + self:onUpdate(event) + end + end + if event.action == "richtext-history-use" then + local richtext_history = User.getParameter("richtext_history") + local index = tonumber(event.item1) + if richtext_history ~= nil and richtext_history[index] ~= nil then + User.setParameter("richtext_text", richtext_history[index]) + self:onUpdate(event) + end + end + if event.action == "richtext-history-delete" then + local richtext_history = User.getParameter("richtext_history") + local index = tonumber(event.item1) + if richtext_history ~= nil and richtext_history[index] ~= nil then + table.remove(richtext_history, index) + User.setParameter("richtext_history", richtext_history) + self:onUpdate(event) + end + end +end \ No newline at end of file diff --git a/helmod/dialog/Settings.lua b/helmod/dialog/Settings.lua new file mode 100644 index 00000000..77b5ee72 --- /dev/null +++ b/helmod/dialog/Settings.lua @@ -0,0 +1,44 @@ +------------------------------------------------------------------------------- +---Class to build settings panel +---@class Settings +Settings = newclass(Form) + +local dropdown = {} + +------------------------------------------------------------------------------- +---On initialization +function Settings:onInit() + self.panelCaption = ({"helmod_settings-panel.title"}) +end + +------------------------------------------------------------------------------- +---Get or create about settings panel +---@return LuaGuiElement +function Settings:getAboutSettingsPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["about-settings"] ~= nil and content_panel["about-settings"].valid then + return content_panel["about-settings"] + end + return GuiElement.add(content_panel, GuiFrameV("about-settings"):style(helmod_frame_style.panel):caption({"helmod_settings-panel.about-section"})) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function Settings:onUpdate(event) + self:updateAboutSettings(event) +end + +------------------------------------------------------------------------------- +---Update about settings +---@param event LuaEvent +function Settings:updateAboutSettings(event) + local aboutSettingsPanel = self:getAboutSettingsPanel() + + local dataSettingsTable = GuiElement.add(aboutSettingsPanel, GuiTable("settings"):column(2)) + + GuiElement.add(dataSettingsTable, GuiLabel(self.classname, "version-label"):caption({"helmod_settings-panel.mod-version"})) + GuiElement.add(dataSettingsTable, GuiLabel(self.classname, "version"):caption(game.active_mods["helmod"])) + + GuiElement.add(aboutSettingsPanel, GuiLabel(self.classname, "info"):caption({"helmod_settings-panel.mod-info"}):style("helmod_label_help")) +end \ No newline at end of file diff --git a/helmod/dialog/StatisticPanel.lua b/helmod/dialog/StatisticPanel.lua new file mode 100644 index 00000000..2f91f1ec --- /dev/null +++ b/helmod/dialog/StatisticPanel.lua @@ -0,0 +1,87 @@ +------------------------------------------------------------------------------- +---Class to build pin tab dialog +---@class StatisticPanel +StatisticPanel = newclass(Form) + +------------------------------------------------------------------------------- +---On initialization +function StatisticPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-button-statistic"}) +end + +------------------------------------------------------------------------------ +---Get Button Sprites +---@return string, string +function StatisticPanel:getButtonSprites() + return defines.sprites.column_chart.white,defines.sprites.column_chart.black +end + +------------------------------------------------------------------------------- +---Is tool +---@return boolean +function StatisticPanel:isTool() + return true +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function StatisticPanel:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 322, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function StatisticPanel:onUpdate(event) + self:updateInfo(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function StatisticPanel:updateInfo(event) + local info_panel = self:getFramePanel("info_panel") + info_panel.style.vertically_stretchable = true + info_panel.clear() + + local column = 20 + + local resultTable = GuiElement.add(info_panel, GuiTable("list-data"):column(column)) + --self:addProductionBlockHeader(resultTable) + local elements = {} + + table.insert(elements, {name = "locomotive", type = "entity", value = #Player.getForce().get_trains()}) + + local entities = {"logistic-robot", "construction-robot", "straight-rail", "curved-rail", "electric-furnace", + "assembling-machine-3", "chemical-plant", "oil-refinery", "beacon", "lab", "electric-mining-drill", + "express-transport-belt", "express-underground-belt", "express-splitter" + , "medium-electric-pole", "big-electric-pole"} + for _, element in pairs(entities) do + table.insert(elements, {name = element, type = "entity", value = Player.getForce().get_entity_count(element)}) + end + + for _, element in pairs(elements) do + self:addRow(resultTable, element) + end +end + +------------------------------------------------------------------------------- +---Add row data tab +---@param guiTable LuaGuiElement +---@param element table +function StatisticPanel:addRow(guiTable, element) + GuiElement.add(guiTable, GuiLabel("value", element.name):caption(Format.formatNumberElement(element.value)):style("helmod_label_right_60")) + GuiElement.add(guiTable, GuiButtonSprite("element", element.name):sprite(element.type, element.name):tooltip(Player.getLocalisedName(element))) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function StatisticPanel:onEvent(event) +end diff --git a/helmod/dialog/SummaryPanel.lua b/helmod/dialog/SummaryPanel.lua new file mode 100644 index 00000000..6c473a34 --- /dev/null +++ b/helmod/dialog/SummaryPanel.lua @@ -0,0 +1,133 @@ +------------------------------------------------------------------------------- +---Class to build summary dialog +---@class SummaryPanel +SummaryPanel = newclass(FormModel) + +------------------------------------------------------------------------------- +---On initialization +function SummaryPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-title-summary"}) + self.otherClose = false +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function SummaryPanel:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_width = 100, + maximal_width = 800, + minimal_height = 0, + maximal_height = height_main + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function SummaryPanel:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function SummaryPanel:onUpdate(event) + local model, block, recipe = self:getParameterObjects() + if block ~= nil then + self:updateSummary(block.summary) + else + self:updateData(model) + self:updateSummary(model.summary) + end +end + +------------------------------------------------------------------------------- +---Update data +---@param model table +function SummaryPanel:updateData(model) + local data_panel = self:getScrollFramePanel("data-panel") + data_panel.clear() + + if model ~= nil then + local resourcesPanel = GuiElement.add(data_panel, GuiFlowV("resources")) + GuiElement.add(resourcesPanel, GuiLabel("label"):caption({"helmod_common.resources"}):style("helmod_label_title_frame")) + + local resourcesTable = GuiElement.add(resourcesPanel, GuiTable("table-resources"):column(4)) + GuiElement.add(resourcesTable, GuiLabel("header-ingredient"):caption({"helmod_result-panel.col-header-ingredient"})) + GuiElement.add(resourcesTable, GuiLabel("header-cargo-wagon"):caption({"helmod_result-panel.col-header-wagon"})) + GuiElement.add(resourcesTable, GuiLabel("header-chest"):caption({"helmod_result-panel.col-header-storage"})) + + for _, resource in pairs(model.resources) do + ---ingredient + local guiIngredient = GuiElement.add(resourcesTable, GuiFrameH("ingredient", resource.name):style(helmod_frame_style.hidden)) + GuiElement.add(guiIngredient, GuiLabel("count"):caption(Format.formatNumberElement(resource.count)):style("helmod_label_right_60")) + GuiElement.add(guiIngredient, GuiButtonSprite("HMIngredient", "OPEN"):sprite(Player.getItemIconType(resource), resource.name):tooltip(Player.getLocalisedName(resource))) + + ---col wagon + local wagon = resource.wagon + local guiWagon = GuiElement.add(resourcesTable, GuiFrameH("wagon", resource.name):style(helmod_frame_style.hidden)) + if wagon ~= nil then + GuiElement.add(guiWagon, GuiLabel("count"):caption(Format.formatNumberElement(wagon.limit_count).."/"..Format.formatNumberElement(wagon.count)):style("helmod_label_right_70")) + GuiElement.add(guiWagon, GuiButtonSprite("HMWagon", "OPEN"):sprite(wagon.type, wagon.name):style(Player.getLocalisedName(wagon))) + end + + ---col storage + local storage = resource.storage + local guiStorage = GuiElement.add(resourcesTable, GuiFrameH("storage", resource.name):style(helmod_frame_style.hidden)) + if storage ~= nil then + GuiElement.add(guiStorage, GuiLabel("count"):caption(Format.formatNumberElement(storage.limit_count).."/"..Format.formatNumberElement(storage.count)):style("helmod_label_right_70")) + GuiElement.add(guiStorage, GuiButtonSprite("HMStorage", "OPEN"):sprite(storage.type, storage.name):tooltip(Player.getLocalisedName(storage))) + end + end + ---generators + local energyPanel = GuiElement.add(data_panel, GuiFlowV("energy")) + GuiElement.add(energyPanel, GuiLineH("line")) + GuiElement.add(energyPanel, GuiLabel("label"):caption({"helmod_common.generators"}):style("helmod_label_title_frame")) + + local resultTable = GuiElement.add(energyPanel, GuiTable("table-energy"):column(2)) + + if model.generators ~= nil then + for _, item in pairs(model.generators) do + local guiCell = GuiElement.add(resultTable, GuiFrameH("cell", item.name):style(helmod_frame_style.hidden)) + GuiElement.add(guiCell, GuiLabel(item.name):caption(Format.formatNumberKilo(item.count)):style("helmod_label_right_50")) + GuiElement.add(guiCell, GuiButtonSprite("HMGenerator", "OPEN"):sprite("item", item.name):tooltip(Player.getLocalisedName(item))) + end + end + end +end + +------------------------------------------------------------------------------- +---Update Summary +---@param summary table +function SummaryPanel:updateSummary(summary) + local info_panel = self:getScrollFramePanel("summary-panel") + info_panel.clear() + + if summary ~= nil then + ---factories + GuiElement.add(info_panel, GuiLabel("factories_label"):caption({"helmod_common.factories"}):style("helmod_label_title_frame")) + local result_table = GuiElement.add(info_panel, GuiTable("table-factory"):column(4)) + result_table.style.horizontally_stretchable = false + for _, element in pairs(summary.factories) do + GuiElement.add(result_table, GuiCellElementM("HMFactories=OPEN"):element(element):color(GuiElement.color_button_default):tooltip("tooltip.info-factory")) + end + + ---beacons + GuiElement.add(info_panel, GuiLabel("beacons_label"):caption({"helmod_common.beacons"}):style("helmod_label_title_frame")) + local result_table = GuiElement.add(info_panel, GuiTable("table-beacon"):column(4)) + result_table.style.horizontally_stretchable = false + for _, element in pairs(summary.beacons) do + GuiElement.add(result_table, GuiCellElementM("HMBeacons=OPEN"):element(element):color(GuiElement.color_button_default):tooltip("tooltip.info-factory")) + end + + ---modules + GuiElement.add(info_panel, GuiLabel("modules_label"):caption({"helmod_common.modules"}):style("helmod_label_title_frame")) + local result_table = GuiElement.add(info_panel, GuiTable("table-modules"):column(4)) + result_table.style.horizontally_stretchable = false + for _, element in pairs(summary.modules) do + GuiElement.add(result_table, GuiCellElementM("HMModules=OPEN"):element(element):color(GuiElement.color_button_default):tooltip("tooltip.info-factory")) + end + end +end \ No newline at end of file diff --git a/helmod/dialog/UnitTestPanel.lua b/helmod/dialog/UnitTestPanel.lua new file mode 100644 index 00000000..9784a2c6 --- /dev/null +++ b/helmod/dialog/UnitTestPanel.lua @@ -0,0 +1,349 @@ +------------------------------------------------------------------------------- +---Class to build UnitTestPanel panel +---@class UnitTestPanel +UnitTestPanel = newclass(Form,function(base,classname) + Form.init(base,classname) + base.add_special_button = true +end) + +local data = require "unit_test.Data" +local data_pyanodons = require "unit_test.DataPyanodons" +local data_bob_angel = require "unit_test.DataBobAngel" +local data_krastorio2 = require "unit_test.DataKrastorio2" +local data_space_ecploration = require "unit_test.DataSpaceExploration" +------------------------------------------------------------------------------- +---On initialization +function UnitTestPanel:onInit() + self.panelCaption = ({"helmod_result-panel.tab-button-unittest"}) + self.help_button = false +end + +------------------------------------------------------------------------------- +---Get Button Sprites +---@return boolean +function UnitTestPanel:getButtonSprites() + return defines.sprites.database_test.white,defines.sprites.database_test.black +end + +------------------------------------------------------------------------------- +---Is visible +---@return boolean +function UnitTestPanel:isVisible() + return User.getModGlobalSetting("hidden_panels") +end + +------------------------------------------------------------------------------- +---Is special +---@return boolean +function UnitTestPanel:isSpecial() + return true +end + +------------------------------------------------------------------------------- +---Get or create tab panel +---@return LuaGuiElement +function UnitTestPanel:getTabPane() + local content_panel = self:getFrameDeepPanel("panel") + local panel_name = "tab_panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiTabPane(panel_name)) + return panel +end + +------------------------------------------------------------------------------- +---Get or create tab panel +---@return LuaGuiElement +function UnitTestPanel:getTab(panel_name, caption) + local content_panel = self:getTabPane() + local scroll_name = "scroll-" .. panel_name + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption(caption)) + local scroll_panel = GuiElement.add(content_panel, GuiScroll(scroll_name):style("helmod_scroll_pane"):policy(true)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create energy tab panel +---@return LuaGuiElement +function UnitTestPanel:getEnergyTab() + return self:getTab("energy-tab-panel", {"helmod_unittest.energy-title"}) +end + +------------------------------------------------------------------------------- +---Get or create sprite tab panel +---@return LuaGuiElement +function UnitTestPanel:getSpriteTab() + return self:getTab("sprite-tab-panel", {"helmod_unittest.sprite-title"}) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function UnitTestPanel:onEvent(event) + if not(User.isAdmin()) then return end + if event.action == "reload-script" then + game.reload_script() + Controller:send("on_gui_update", event) + end +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function UnitTestPanel:onUpdate(event) + if game.active_mods["boblibrary"] then + data = data_bob_angel + end + if game.active_mods["pyrawores"] then + data = data_pyanodons + end + if game.active_mods["Krastorio2"] then + data = data_krastorio2 + end + if game.active_mods["space-exploration"] then + data = data_space_ecploration + end + self:updateMenu() + self:updateEnergy() + self:updateSprite() +end + +------------------------------------------------------------------------------- +---Update menu +function UnitTestPanel:updateMenu() + local menu_panel = self:getMenuPanel() + ---pin info + local group1 = GuiElement.add(menu_panel, GuiFlowH("group1")) + GuiElement.add(group1, GuiButton("HMUnitTestPanel", "reload-script"):sprite("menu", defines.sprites.refresh.black, defines.sprites.refresh.black):style("helmod_button_menu"):tooltip("Reload script")) +end + +------------------------------------------------------------------------------- +---Update energy +function UnitTestPanel:updateSprite() + local tab_panel = self:getSpriteTab() + local table_panel = GuiElement.add(tab_panel, GuiTable("list-table"):column(2)) + for sprite_name, sprites in pairs(defines.sprites) do + local col1 = GuiElement.add(table_panel, GuiFrameH("info", sprite_name):style(helmod_frame_style.hidden)) + GuiElement.add(col1, GuiLabel("label"):caption(sprite_name)) + local col2 = GuiElement.add(table_panel, GuiFrameH("buttons", sprite_name):style(helmod_frame_style.hidden)) + for color_name, sprite in pairs(sprites) do + GuiElement.add(col2, GuiButton("do_noting", sprite_name, color_name):sprite("menu", sprite, sprite):style("helmod_button_menu"):tooltip(string.format("defines.sprites.%s.%s", sprite_name, color_name))) + end + end +end + +------------------------------------------------------------------------------- +---Update energy +function UnitTestPanel:updateEnergy() + local tab_panel = self:getEnergyTab() + GuiElement.add(tab_panel, GuiLabel("label"):caption(data.mod):style("heading_1_label")) + + local table_panel = GuiElement.add(tab_panel, GuiTable("list-table"):column(23)) + table_panel.vertical_centering = false + table_panel.style.horizontal_spacing = 10 + + self:addEnergyListHeader(table_panel) + + for entity, test_data in spairs(data.energy, function(t,a,b) return t[b]["energy_type_input"] < t[a]["energy_type_input"] end) do + self:addEnergyListRow(table_panel, entity, test_data) + end +end + +------------------------------------------------------------------------------- +---Add cell header with tooltip +---@param itable LuaGuiElement +---@param name string +---@param caption string +---@param tooltip table +function UnitTestPanel:addCellHeaderTooltip(itable, name, caption, tooltip) + local cell = GuiElement.add(itable, GuiFrameH("header", name):style(helmod_frame_style.hidden)) + GuiElement.add(cell, GuiLabel("label"):caption(caption):tooltip(tooltip)) +end + +------------------------------------------------------------------------------- +---Add energy List header +---@param itable LuaGuiElement +function UnitTestPanel:addEnergyListHeader(itable) + ---col action + self:addCellHeaderTooltip(itable, "entity", "Entity") + ---data + self:addCellHeaderTooltip(itable, "type", "Type") + self:addCellHeaderTooltip(itable, "name", "Name") + + ---**** Attributes *** + self:addCellHeaderTooltip(itable, "energy-type", "ET", "Energy Type") + self:addCellHeaderTooltip(itable, "energy-usage-min", "EUmin", "Min Energy Usage") + self:addCellHeaderTooltip(itable, "energy-usage-max", "EUmax", "Max Energy Usage") + self:addCellHeaderTooltip(itable, "energy-usage-priority", "EUP", "Energy Usage Priority") + self:addCellHeaderTooltip(itable, "fluid-usage", "FU", "Fluid Usage /s") + self:addCellHeaderTooltip(itable, "fluid-burns", "FB", "Fluid Burns") + self:addCellHeaderTooltip(itable, "effectivity", "E", "Effectivity") + self:addCellHeaderTooltip(itable, "target-temperature", "TT", "Target Temperature") + self:addCellHeaderTooltip(itable, "maximum-temperature", "MT", "Maximum Temperature") + ---**** Computed *** + self:addCellHeaderTooltip(itable, "energy-type-input", "ETI", "Energy Type Input") + self:addCellHeaderTooltip(itable, "energy-consumption", "EC", "Energy Consumption") + self:addCellHeaderTooltip(itable, "fluid-consumption", "FC", "Fluid Consumption /s") + self:addCellHeaderTooltip(itable, "fluid-fuel", "FF", "Fluid Fuel") + self:addCellHeaderTooltip(itable, "fluid-capacity", "FJ", "Fluid Capacity J") + self:addCellHeaderTooltip(itable, "energy-type-output", "ETO", "Energy Type Output") + self:addCellHeaderTooltip(itable, "fluid-production", "FP", "Fluid Production /s") + self:addCellHeaderTooltip(itable, "fluid-production-prototype", "FPP", "Fluid Production Prototype") + self:addCellHeaderTooltip(itable, "energy-production", "EP", "Energy Production") + self:addCellHeaderTooltip(itable, "pollution", "P", "Pollution") + self:addCellHeaderTooltip(itable, "speed", "S", "Speed") +end + +------------------------------------------------------------------------------- +---Add row energy List +---@param itable LuaGuiElement +---@param entity table +---@param test_data table +function UnitTestPanel:addEnergyListRow(itable, entity, test_data) + local prototype = EntityPrototype(entity) + local lua_prototype = prototype:native() + if lua_prototype ~= nil then + ---col Entity + local button = GuiElement.add(itable, GuiButtonSelectSprite("entity", entity):choose("entity", lua_prototype.name)) + button.locked = true + ---col Type + GuiElement.add(itable, GuiLabel("type", entity):caption(lua_prototype.type)) + ---col Name + GuiElement.add(itable, GuiLabel("name", entity):caption(lua_prototype.name)) + + local energy_source = prototype:getEnergySource() + ---**** Attributes *** + ---col Energy Type + local energy_type = "none" + if energy_source ~= nil then + energy_type = energy_source:getType() + end + local tag_color, tooltip = self:valueEquals(energy_type, test_data.energy_type, true) + GuiElement.add(itable, GuiLabel("energy-type", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Usage Min + local energy_usage_min = math.floor(prototype:getMinEnergyUsage()) + local tag_color, tooltip = self:valueEquals(energy_usage_min, test_data.energy_usage_min, true) + GuiElement.add(itable, GuiLabel("energy-usage-min", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_usage_min, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Usage Max + local energy_usage_max = math.floor(prototype:getMaxEnergyUsage()) + local tag_color, tooltip = self:valueEquals(energy_usage_max, test_data.energy_usage_max, true) + GuiElement.add(itable, GuiLabel("energy-usage-max", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_usage_max, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Usage Priority + local energy_usage_priority = "none" + if energy_source ~= nil then + energy_usage_priority = energy_source:getUsagePriority() + end + local tag_color, tooltip = self:valueEquals(energy_usage_priority, test_data.energy_usage_priority, true) + GuiElement.add(itable, GuiLabel("energy-usage-priority", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_usage_priority, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Usage /s + local fluid_usage = math.floor(prototype:getFluidUsage()) + local tag_color, tooltip = self:valueEquals(fluid_usage, test_data.fluid_usage, true) + GuiElement.add(itable, GuiLabel("fluid-usage", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_usage, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Burns + local fluid_burns = "none" + if energy_source ~= nil and prototype:getEnergyTypeInput() == "fluid" then + fluid_burns = prototype:getBurnsFluid() + end + local tag_color, tooltip = self:valueEquals(fluid_burns, test_data.fluid_burns, true) + GuiElement.add(itable, GuiLabel("fluid-burns", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_burns, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Effectivity + local effectivity = prototype:getEffectivity() + local tag_color, tooltip = self:valueEquals(effectivity, test_data.effectivity, true) + GuiElement.add(itable, GuiLabel("effectivity", entity):caption({"", helmod_tag.font.default_bold, tag_color, effectivity, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Target Temperature + local target_temperature = prototype:getTargetTemperature() + local tag_color, tooltip = self:valueEquals(target_temperature, test_data.target_temperature, true) + GuiElement.add(itable, GuiLabel("target-temperature", entity):caption({"", helmod_tag.font.default_bold, tag_color, target_temperature, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Maximum Temperature + local maximum_temperature = prototype:getMaximumTemperature() + local tag_color, tooltip = self:valueEquals(maximum_temperature, test_data.maximum_temperature, true) + GuiElement.add(itable, GuiLabel("maximum-temperature", entity):caption({"", helmod_tag.font.default_bold, tag_color, maximum_temperature, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + + ---**** Computed *** + ---col Energy Type + local energy_type_input = prototype:getEnergyTypeInput() + local tag_color, tooltip = self:valueEquals(energy_type_input, test_data.energy_type_input) + GuiElement.add(itable, GuiLabel("energy-type-input", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type_input, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Consumption + local energy_consumption = math.floor(prototype:getEnergyConsumption() + prototype:getMinEnergyUsage()) + local tag_color, tooltip = self:valueEquals(energy_consumption, test_data.energy_consumption) + GuiElement.add(itable, GuiLabel("energy-consumption", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_consumption, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Consumption /s + local fluid_consumption = Format.round(prototype:getFluidConsumption(),-2) + local tag_color, tooltip = self:valueEquals(fluid_consumption, test_data.fluid_consumption) + GuiElement.add(itable, GuiLabel("fluid-consumption", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_consumption, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Fuel + local fuel_prototype = prototype:getFluidFuelPrototype() + local fluid_fuel = {name="none", capacity=0} + if fuel_prototype ~= nil and fuel_prototype:native() ~= nil then + fluid_fuel = {name=fuel_prototype:native().name, capacity=fuel_prototype:getHeatCapacity()} + end + local tag_color, tooltip = self:valueEquals(fluid_fuel.name, test_data.fluid_fuel.name) + GuiElement.add(itable, GuiLabel("fluid-fuel", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_fuel.name, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Capacity + local tag_color, tooltip = self:valueEquals(fluid_fuel.capacity, test_data.fluid_fuel.capacity) + GuiElement.add(itable, GuiLabel("fluid-capacity", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_fuel.capacity, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Type Output + local energy_type_output = prototype:getEnergyTypeOutput() + local tag_color, tooltip = self:valueEquals(energy_type_output, test_data.energy_type_output) + GuiElement.add(itable, GuiLabel("energy-type-output", entity):caption({"", helmod_tag.font.default_bold, tag_color, energy_type_output, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Production /s + local fluid_production = {name="none", amount=math.floor(prototype:getFluidProduction())} + local fluid_production_filter = prototype:getFluidProductionFilter() + if fluid_production_filter ~= nil then fluid_production.name = fluid_production_filter.name end + local tag_color, tooltip = self:valueEquals(fluid_production.amount, test_data.fluid_production.amount) + GuiElement.add(itable, GuiLabel("fluid-production", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_production.amount, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Fluid Production Prototype + local tag_color, tooltip = self:valueEquals(fluid_production.name, test_data.fluid_production.name) + GuiElement.add(itable, GuiLabel("fluid-production-prototype", entity):caption({"", helmod_tag.font.default_bold, tag_color, fluid_production.name, helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Energy Production + local energy_production = math.floor(prototype:getEnergyProduction()) + local tag_color, tooltip = self:valueEquals(energy_production, test_data.energy_production) + GuiElement.add(itable, GuiLabel("energy-production", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumberKilo(energy_production, "W"), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Pollution + local pollution = Format.round(prototype:getPollution() * 60, -2) + local tag_color, tooltip = self:valueEquals(pollution, test_data.pollution) + GuiElement.add(itable, GuiLabel("pollution", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumber(pollution), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + ---col Speed + local speed = Format.round(prototype:speedFactory(test_data.recipe), -2) + local tag_color, tooltip = self:valueEquals(speed, test_data.speed) + GuiElement.add(itable, GuiLabel("speed", entity):caption({"", helmod_tag.font.default_bold, tag_color, Format.formatNumber(speed), helmod_tag.color.close, helmod_tag.font.close}):tooltip(tooltip)) + end + +end + +function UnitTestPanel:valueEquals(current_value, target_value, attribute) + if current_value == target_value then + local tag_color = helmod_tag.color.green_light + if attribute then + tag_color = helmod_tag.color.blue_light + end + if current_value == "none" then + tag_color = helmod_tag.color.white + end + local tooltip = {"","Success"} + return tag_color, tooltip + else + local tag_color = helmod_tag.color.red_light + if attribute then + tag_color = helmod_tag.color.orange + end + local display_current = current_value + if type(current_value) == "number" then + display_current = Format.formatNumber(current_value) + end + local display_target = target_value + if type(target_value) == "number" then + display_target = Format.formatNumber(target_value) + end + local tooltip = {"",string.format("Failed, value %s must be %s", display_current, display_target)} + return tag_color, tooltip + end +end diff --git a/helmod/doc/runtime-api-model.lua b/helmod/doc/runtime-api-model.lua new file mode 100644 index 00000000..63b8de58 --- /dev/null +++ b/helmod/doc/runtime-api-model.lua @@ -0,0 +1,86 @@ +---@class LuaEvent : EventData +---@field classname string +---@field element LuaGuiElement +---@field action string +---@field item1 string +---@field item2 string +---@field item3 string +---@field item4 string +---@field item5 string +---@field alt boolean +---@field control boolean +---@field shift boolean + +---@class ModulePriorityData +---@field name string +---@field value uint + +---@class FuelData +---@field name string +---@field temperature number + +---@class ModuleEffectsData +---@field speed number +---@field productivity number +---@field consumption number +---@field pollution number + + +---@class FactoryData +---@field name string +---@field type string +---@field count number +---@field energy number +---@field speed number +---@field fuel string | FuelData +---@field limit number +---Dictionnary {[module.name] : int} +---@field modules {[string] : uint} +---@field effects ModuleEffectsData +---@field cap ModuleEffects +---@field energy_total number +---@field polution_total number +---@field speed_total number +---@field module_priority {[uint] : ModulePriorityData} + +---@class BeaconData : FactoryData +---@field combo number +---@field per_factory number +---@field per_factory_constant number + +---@class RecipeData +---@field id string +---@field index uint +---@field name string +---@field type string +---@field count number +---@field production number +---@field factory FactoryData +---@field beacons {[uint] : BeaconData} +---@field time uint +---@field energy_total number +---@field polution_total number +---@field is_done boolean +---@field base_time uint + +---@class ParametersData +---@field effects ModuleEffectsData + +---@class BlockData + +---@class ModelData +---@field id string +---@field index_id number +---@field time number +---@field version number +---@field owner string +---@field block_id number +---@field recipe_id number +---@field resource_id number +---@field blocks any +---@field ingredients any +---@field products any +---@field ressources any +---@field summary any +---@field generators any +---@field parameters ParametersData diff --git a/helmod/edition/LogisticEdition.lua b/helmod/edition/LogisticEdition.lua new file mode 100644 index 00000000..0f2fc8a1 --- /dev/null +++ b/helmod/edition/LogisticEdition.lua @@ -0,0 +1,109 @@ +------------------------------------------------------------------------------- +---Class to build product edition dialog +---@class LogisticEdition +LogisticEdition = newclass(Form) + +------------------------------------------------------------------------------- +---On initialization +function LogisticEdition:onInit() + self.panelCaption = ({"helmod_panel.logistic-edition"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function LogisticEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 100, + maximal_height = height_main, + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function LogisticEdition:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function LogisticEdition:onUpdate(event) + self:updateItemsLogistic(event) +end + +------------------------------------------------------------------------------- +---On scroll width +---@return number +function LogisticEdition:getSrollWidth() + local number_column = User.getPreferenceSetting("preference_number_column") + return 38 * (number_column or 6) + 20 +end + +------------------------------------------------------------------------------- +---On scroll height +---@return number +function LogisticEdition:getSrollHeight() + local number_line = User.getPreferenceSetting("preference_number_line") + return 38 * (number_line or 3) + 4 +end + +------------------------------------------------------------------------------- +---Update items logistic +---@param event LuaEvent +function LogisticEdition:updateItemsLogistic(event) + local number_column = User.getPreferenceSetting("preference_number_column") + local container_panel = self:getScrollPanel("information") + container_panel.clear() + + if event.item1 == "item" then + local type = User.getParameter("logistic_row_item") or "belt" + local type_table_panel = GuiElement.add(container_panel, GuiTable(string.format("%s-selector-table", type)):column(number_column)) + + local item_logistic = Player.getDefaultItemLogistic(type) + for key, entity in pairs(Player.getItemsLogistic(type)) do + local color = nil + if entity.name == item_logistic then color = "green" end + local button = GuiElement.add(type_table_panel, GuiButtonSelectSprite(self.classname, "items-logistic-select", type):choose("entity", entity.name):color(color)) + button.locked = true + end + end + if event.item1 == "fluid" then + local type = User.getParameter("logistic_row_fluid") or "pipe" + local type_table_panel = GuiElement.add(container_panel, GuiTable(string.format("%s-selector-table", type)):column(number_column)) + + local fluid_logistic = Player.getDefaultFluidLogistic(type) + for key, entity in pairs(Player.getFluidsLogistic(type)) do + local color = nil + if entity.name == fluid_logistic then color = "green" end + local button = GuiElement.add(type_table_panel, GuiButtonSelectSprite(self.classname, "fluids-logistic-select", type):choose("entity", entity.name):color(color)) + button.locked = true + end + end +end +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function LogisticEdition:onEvent(event) + if event.action == "items-logistic-select" then + User.setParameter(string.format("items_logistic_%s", event.item1), event.item2) + self:close() + Controller:send("on_gui_refresh", event) + end + + if event.action == "fluids-logistic-select" then + User.setParameter(string.format("fluids_logistic_%s", event.item1), event.item2) + self:close() + Controller:send("on_gui_refresh", event) + end + + if event.action == "fluids-logistic-flow" then + local index = event.element.selected_index + local fluids_logistic_maximum_flow = defines.constant.logistic_flow[index].flow + User.setParameter("fluids_logistic_maximum_flow", fluids_logistic_maximum_flow) + self:close() + Controller:send("on_gui_refresh", event) + end +end \ No newline at end of file diff --git a/helmod/edition/ModelEdition.lua b/helmod/edition/ModelEdition.lua new file mode 100644 index 00000000..13494cf8 --- /dev/null +++ b/helmod/edition/ModelEdition.lua @@ -0,0 +1,152 @@ +------------------------------------------------------------------------------- +---Class to build product edition dialog +---@class ModelEdition +ModelEdition = newclass(FormModel) + +------------------------------------------------------------------------------- +---On initialization +function ModelEdition:onInit() + self.panelCaption = ({"helmod_panel.model-edition"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ModelEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 500, + maximal_height = math.max(height_main,600), + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function ModelEdition:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ModelEdition:onUpdate(event) + self:updateInfo(event) + self:updateShare(event) + self:updateNote(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function ModelEdition:updateInfo(event) + local model = self:getParameterObjects() + local info_panel = self:getFramePanel("information") + info_panel.clear() + + GuiElement.add(info_panel, GuiLabel("label-info"):caption({"helmod_common.information"}):style("helmod_label_title_frame")) + + local block_table = GuiElement.add(info_panel, GuiTable("output-table"):column(2)) + + GuiElement.add(block_table, GuiLabel("label-owner"):caption({"helmod_result-panel.owner"})) + GuiElement.add(block_table, GuiLabel("value-owner"):caption(model.owner)) + +end + +------------------------------------------------------------------------------- +---Update share +---@param event LuaEvent +function ModelEdition:updateShare(event) + local model = self:getParameterObjects() + local share_panel = self:getFramePanel("share") + share_panel.clear() + + GuiElement.add(share_panel, GuiLabel("label-share"):caption({"helmod_result-panel.share"}):style("helmod_label_title_frame")) + + local block_table = GuiElement.add(share_panel, GuiTable("output-table"):column(2)) + + local tableAdminPanel = GuiElement.add(block_table, GuiTable("table"):column(2)) + local model_read = false + if model.share ~= nil and bit32.band(model.share, 1) > 0 then model_read = true end + GuiElement.add(tableAdminPanel, GuiLabel(self.classname, "share-model-read"):caption({"helmod_common.reading"}):tooltip({"tooltip.share-mod", {"helmod_common.reading"}})) + GuiElement.add(tableAdminPanel, GuiCheckBox(self.classname, "share-model", model.id, "read"):state(model_read):tooltip({"tooltip.share-mod", {"helmod_common.reading"}})) + + local model_write = false + if model.share ~= nil and bit32.band(model.share, 2) > 0 then model_write = true end + GuiElement.add(tableAdminPanel, GuiLabel(self.classname, "share-model-write"):caption({"helmod_common.writing"}):tooltip({"tooltip.share-mod", {"helmod_common.writing"}})) + GuiElement.add(tableAdminPanel, GuiCheckBox(self.classname, "share-model", model.id, "write"):state(model_write):tooltip({"tooltip.share-mod", {"helmod_common.writing"}})) + + local model_delete = false + if model.share ~= nil and bit32.band(model.share, 4) > 0 then model_delete = true end + GuiElement.add(tableAdminPanel, GuiLabel(self.classname, "share-model-delete"):caption({"helmod_common.removal"}):tooltip({"tooltip.share-mod", {"helmod_common.removal"}})) + GuiElement.add(tableAdminPanel,GuiCheckBox( self.classname, "share-model", model.id, "delete"):state(model_delete):tooltip({"tooltip.share-mod", {"helmod_common.removal"}})) +end + +------------------------------------------------------------------------------- +---Update note +---@param event LuaEvent +function ModelEdition:updateNote(event) + local model = self:getParameterObjects() + local note_panel = self:getFramePanel("note") + note_panel.clear() + local group_string = model.group or "" + GuiElement.add(note_panel, GuiLabel("label-group"):caption({"helmod_common.group"}):style("helmod_label_title_frame")) + local text_group = GuiElement.add(note_panel, GuiTextField(self.classname, "group-text"):text(group_string)) + text_group.style.width = 250 + + local data_string = model.note or "" + GuiElement.add(note_panel, GuiLabel("label-note"):caption({"helmod_common.note"}):style("helmod_label_title_frame")) + local text_box = GuiElement.add(note_panel, GuiTextBox(self.classname, "note-text"):text(data_string)) + + GuiElement.add(note_panel, GuiButton(self.classname, "model-note"):caption({"helmod_button.save"})) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ModelEdition:onEvent(event) + local model = self:getParameterObjects() + if User.isWriter(model) then + if event.action == "model-note" then + local group_field_name = table.concat({self.classname, "group-text"},"=") + local note_field_name = table.concat({self.classname, "note-text"},"=") + if event.element.parent ~= nil and event.element.parent[group_field_name] ~= nil then + local group = event.element.parent[group_field_name].text + model.group = group or "" + end + if event.element.parent ~= nil and event.element.parent[note_field_name] ~= nil then + local note = event.element.parent[note_field_name].text + model.note = note or "" + end + Controller:send("on_gui_refresh", event) + end + + if event.action == "share-model" then + local access = event.item2 + if model ~= nil then + if access == "read" then + if model.share == nil or not(bit32.band(model.share, 1) > 0) then + model.share = 1 + else + model.share = 0 + end + end + if access == "write" then + if model.share == nil or not(bit32.band(model.share, 2) > 0) then + model.share = 3 + else + model.share = 1 + end + end + if access == "delete" then + if model.share == nil or not(bit32.band(model.share, 4) > 0) then + model.share = 7 + else + model.share = 3 + end + end + end + Controller:send("on_gui_refresh", event) + end + end +end \ No newline at end of file diff --git a/helmod/edition/ParametersEdition.lua b/helmod/edition/ParametersEdition.lua new file mode 100644 index 00000000..0388e1ff --- /dev/null +++ b/helmod/edition/ParametersEdition.lua @@ -0,0 +1,82 @@ +------------------------------------------------------------------------------- +---Class to build product edition dialog +---@class ParametersEdition +ParametersEdition = newclass(FormModel) + +------------------------------------------------------------------------------- +---On initialization +function ParametersEdition:onInit() + self.panelCaption = ({ "helmod_parameters_edition_panel.title" }) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ParametersEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 100, + maximal_height = math.max(height_main, 600), + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function ParametersEdition:onBind() + Dispatcher:bind("on_gui_refresh", self, self.update) +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ParametersEdition:onUpdate(event) + self:updateEffects(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function ParametersEdition:updateEffects(event) + local model, block, recipe = self:getParameterObjects() + local info_panel = self:getFramePanel("effects") + info_panel.clear() + + GuiElement.add(info_panel, + GuiLabel("label-info"):caption({ "helmod_parameters_edition_panel.global_bonus" }):style("helmod_label_title_frame")) + + local block_table = GuiElement.add(info_panel, GuiTable("output-table"):column(2)) + + Model.appendParameters(model) + + local effects = model.parameters.effects + GuiElement.add(block_table, GuiLabel("label-consumption"):caption({ "description.consumption-bonus" })) + GuiElement.add(block_table, GuiTextField(self.classname, "change-effect", "consumption"):text(Format.formatNumberElement((effects.consumption or 1)*100)):style("helmod_textfield")) + + GuiElement.add(block_table, GuiLabel("label-speed"):caption({ "description.speed-bonus" })) + GuiElement.add(block_table, GuiTextField(self.classname, "change-effect", "speed"):text(Format.formatNumberElement((effects.speed or 1)*100)):style("helmod_textfield")) + + GuiElement.add(block_table, GuiLabel("label-productivity"):caption({ "description.productivity-bonus" })) + GuiElement.add(block_table, GuiTextField(self.classname, "change-effect", "productivity"):text(Format.formatNumberElement((effects.productivity or 1)*100)):style("helmod_textfield")) + + GuiElement.add(block_table, GuiLabel("label-pollution"):caption({ "description.pollution-bonus" })) + GuiElement.add(block_table, GuiTextField(self.classname, "change-effect", "pollution"):text(Format.formatNumberElement((effects.pollution or 1)*100)):style("helmod_textfield")) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ParametersEdition:onEvent(event) + local model = self:getParameterObjects() + if User.isWriter(model) then + if event.action == "change-effect" then + local text = event.element.text + local value = (formula(text) or 0)/100 + local effect_name = event.item1 + local effects = model.parameters.effects + effects[effect_name]=value + ModelCompute.update(model) + Controller:send("on_gui_refresh", event) + end + end +end diff --git a/helmod/edition/PreferenceEdition.lua b/helmod/edition/PreferenceEdition.lua new file mode 100644 index 00000000..3d1fd689 --- /dev/null +++ b/helmod/edition/PreferenceEdition.lua @@ -0,0 +1,520 @@ +------------------------------------------------------------------------------- +---Class to build product edition dialog +---@class PreferenceEdition +PreferenceEdition = newclass(Form) + +------------------------------------------------------------------------------- +---On initialization +function PreferenceEdition:onInit() + self.panelCaption = ({"helmod_preferences-edition-panel.title"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function PreferenceEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 500, + maximal_height = math.max(height_main,800), + } +end + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function PreferenceEdition:onBind() + Dispatcher:bind("on_gui_preference", self, self.updateFluidsLogistic) + Dispatcher:bind("on_gui_preference", self, self.updateItemsLogistic) + Dispatcher:bind("on_gui_preference", self, self.updatePriorityModule) + Dispatcher:bind("on_gui_preference", self, self.updateUI) +end + +------------------------------------------------------------------------------- +---On scroll width +---@return number +function PreferenceEdition:getSrollWidth() + local number_column = User.getPreferenceSetting("preference_number_column") + return 38 * (number_column or 6) + 20 +end + +------------------------------------------------------------------------------- +---On scroll height +---@return number +function PreferenceEdition:getSrollHeight() + local number_line = User.getPreferenceSetting("preference_number_line") + return 38 * (number_line or 3) + 4 +end + +------------------------------------------------------------------------------- +---Get or create preference panel +---@return LuaGuiElement +function PreferenceEdition:getPrefrencePanel() + local panel = self:getFrameTabbedPanel("preference_panel") + panel.style.minimal_width = 600 + panel.style.horizontally_stretchable = true + panel.style.vertically_stretchable = true + return panel +end + +------------------------------------------------------------------------------- +---Get or create tab panel +---@return LuaGuiElement +function PreferenceEdition:getTabPane() + local content_panel = self:getPrefrencePanel() + local panel_name = "tab_panel" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name] + end + local panel = GuiElement.add(content_panel, GuiTabPane(panel_name):style("helmod_tabbed_pane")) + return panel +end + +------------------------------------------------------------------------------- +---Set active tab panel +---@param tab_name string +function PreferenceEdition:setActiveTab(tab_name) + local content_panel = self:getTabPane() + for index,tab in pairs(content_panel.tabs) do + if string.find(tab.content.name,tab_name) then + content_panel.selected_tab_index = index + end + end +end + +------------------------------------------------------------------------------- +---Get or create general tab panel +---@return LuaGuiElement +function PreferenceEdition:getGeneralTab() + local content_panel = self:getTabPane() + local panel_name = "general_tab_panel" + local scroll_name = "general_scroll" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption({"helmod_label.general"})) + local scroll_panel = GuiElement.add(content_panel, GuiFlowV(scroll_name)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create UI tab panel +---@return LuaGuiElement +function PreferenceEdition:getUITab() + local content_panel = self:getTabPane() + local panel_name = "ui_tab_panel" + local scroll_name = "ui_scroll" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption({"helmod_label.ui"})) + local scroll_panel = GuiElement.add(content_panel, GuiFlowV(scroll_name)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create priority module tab panel +---@return LuaGuiElement +function PreferenceEdition:getPriorityModuleTab() + local content_panel = self:getTabPane() + local panel_name = "priority_module_tab_panel" + local scroll_name = "priority_module_scroll" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption({"helmod_label.priority-modules"})) + local scroll_panel = GuiElement.add(content_panel, GuiFlowV(scroll_name)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create solid container tab panel +---@return LuaGuiElement +function PreferenceEdition:getSolidContainerTab() + local content_panel = self:getTabPane() + local panel_name = "solid_container_tab_panel" + local scroll_name = "solid_container_scroll" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption({"helmod_preferences-edition-panel.items-logistic-default"})) + local scroll_panel = GuiElement.add(content_panel, GuiFlowV(scroll_name)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create fluid container tab panel +---@return LuaGuiElement +function PreferenceEdition:getFluidContainerTab() + local content_panel = self:getTabPane() + local panel_name = "fluid_container_tab_panel" + local scroll_name = "fluid_container_scroll" + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[scroll_name] + end + local tab_panel = GuiElement.add(content_panel, GuiTab(panel_name):caption({"helmod_preferences-edition-panel.fluids-logistic-default"})) + local scroll_panel = GuiElement.add(content_panel, GuiFlowV(scroll_name)) + content_panel.add_tab(tab_panel,scroll_panel) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function PreferenceEdition:onUpdate(event) + self:updateGeneral(event) + self:updateUI(event) + self:updatePriorityModule(event) + self:updateItemsLogistic(event) + self:updateFluidsLogistic(event) + if event.action == "OPEN" then + self:setActiveTab(event.item1) + end +end + +------------------------------------------------------------------------------- +---Update ui +---@param event LuaEvent +function PreferenceEdition:updateUI(event) + local container_panel = self:getUITab() + container_panel.clear() + + GuiElement.add(container_panel, GuiLabel("fluid_container_label"):caption({"helmod_label.ui"}):style("helmod_label_title_frame")) + + local options_table = GuiElement.add(container_panel, GuiTable("options-table"):column(2)) + options_table.vertical_centering = false + options_table.style.horizontal_spacing=10 + options_table.style.vertical_spacing=5 + + for preference_type,preference in pairs(defines.constant.preferences) do + if preference.group == "ui" then + GuiElement.add(options_table, GuiLabel(self.classname, "label", preference_type):caption(preference.localised_name):tooltip(preference.localised_description)) + local default_preference_type = User.getPreferenceSetting(preference_type) + if preference.allowed_values then + GuiElement.add(options_table, GuiDropDown(self.classname, "preference-setting", preference_type):items(preference.allowed_values, default_preference_type)) + else + if preference.type == "bool-setting" then + GuiElement.add(options_table, GuiCheckBox(self.classname, "preference-setting", preference_type):state(default_preference_type)) + end + if preference.type == "int-setting" or preference.type == "string-setting" then + local tooltip = nil + if preference.minimum_value then + tooltip = {"", {"helmod_pref_settings.range-value"}, "[",preference.minimum_value,",",preference.maximum_value,"]"} + end + GuiElement.add(options_table, GuiTextField(self.classname, "preference-setting", preference_type):text(default_preference_type):tooltip(tooltip)) + end + end + if preference.items ~= nil then + for preference_name,checked in pairs(preference.items) do + local view = Controller:getView(preference_name) + if view ~= nil then + local localised_name = view.panelCaption + local default_preference_name = User.getPreferenceSetting(preference_type, preference_name) + GuiElement.add(options_table, GuiLabel(self.classname, "label", preference_type, preference_name):caption({"", "\t\t\t\t", helmod_tag.color.gold, localised_name, helmod_tag.color.close})) + local checkbox = GuiElement.add(options_table, GuiCheckBox(self.classname, "preference-setting", preference_type, preference_name):state(default_preference_name)) + if default_preference_type ~= true then + checkbox.enabled = false + end + end + end + end + end + end +end + +------------------------------------------------------------------------------- +---Update general +---@param event LuaEvent +function PreferenceEdition:updateGeneral(event) + local container_panel = self:getGeneralTab() + container_panel.clear() + + GuiElement.add(container_panel, GuiLabel("fluid_container_label"):caption({"helmod_label.general"}):style("helmod_label_title_frame")) + + local options_table = GuiElement.add(container_panel, GuiTable("options-table"):column(2)) + options_table.vertical_centering = false + options_table.style.horizontal_spacing=10 + options_table.style.vertical_spacing=5 + + for preference_name,preference in pairs(defines.constant.preferences) do + if preference.group == "general" then + GuiElement.add(options_table, GuiLabel(self.classname, "label", preference_name):caption(preference.localised_name):tooltip(preference.localised_description)) + local default_preference = User.getPreferenceSetting(preference_name) + if preference.allowed_values then + GuiElement.add(options_table, GuiDropDown(self.classname, "preference-setting", preference_name):items(preference.allowed_values, default_preference)) + else + if preference.type == "bool-setting" then + GuiElement.add(options_table, GuiCheckBox(self.classname, "preference-setting", preference_name):state(default_preference)) + end + if preference.type == "int-setting" or preference.type == "float-setting" or preference.type == "string-setting" then + GuiElement.add(options_table, GuiTextField(self.classname, "preference-setting", preference_name):text(default_preference)) + end + end + end + end +end +------------------------------------------------------------------------------- +---Update priority module +---@param event LuaEvent +function PreferenceEdition:updatePriorityModule(event) + local number_column = User.getPreferenceSetting("preference_number_column") + local priority_module_panel = self:getPriorityModuleTab() + priority_module_panel.clear() + + GuiElement.add(priority_module_panel, GuiLabel("priority_module_label"):caption({"helmod_label.priority-modules"}):style("helmod_label_title_frame")) + + local configuration_table_panel = GuiElement.add(priority_module_panel, GuiTable("configuration-table"):column(2)) + configuration_table_panel.vertical_centering = false + + local configuration_panel = GuiElement.add(configuration_table_panel, GuiFlowV("configuration")) + ---configuration select + local tool_panel = GuiElement.add(configuration_panel, GuiFlowH("tool")) + tool_panel.style.width = 200 + local conf_table_panel = GuiElement.add(tool_panel, GuiTable("configuration-table"):column(6)) + local configuration_priority = User.getParameter("configuration_priority") or 1 + local priority_modules = User.getParameter("priority_modules") or {} + local button_style = "helmod_button_bold" + for i, priority_module in pairs(priority_modules) do + local button_style2 = button_style + if configuration_priority == i then button_style2 = "helmod_button_bold_selected" end + GuiElement.add(conf_table_panel, GuiButton(self.classname, "configuration-priority-select", i):caption(i):style(button_style2)) + end + GuiElement.add(conf_table_panel, GuiButton(self.classname, "configuration-priority-select", "new"):caption("+"):style(button_style)) + GuiElement.add(conf_table_panel, GuiButton(self.classname, "configuration-priority-remove", "new"):caption("-"):style(button_style)) + ---module priority + local priority_table_panel = GuiElement.add(configuration_panel, GuiTable("module-priority-table"):column(3)) + if priority_modules[configuration_priority] ~= nil then + for index, element in pairs(priority_modules[configuration_priority]) do + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}) + GuiElement.add(priority_table_panel, GuiButtonSprite(self.classname, "do-nothing", index):sprite("entity", element.name):tooltip(tooltip)) + GuiElement.add(priority_table_panel, GuiTextField(self.classname, "priority-module-update", index):text(element.value)) + GuiElement.add(priority_table_panel, GuiButtonSprite(self.classname, "priority-module-remove", index):sprite("menu", defines.sprites.close.black, defines.sprites.close.black):style("helmod_button_menu_sm_red"):tooltip(tooltip)) + end + end + + ---module selector + local module_scroll = GuiElement.add(configuration_table_panel, GuiScroll("module-selector-scroll")) + module_scroll.style.maximal_height = self:getSrollHeight() + module_scroll.style.minimal_width = self:getSrollWidth() + local module_table_panel = GuiElement.add(module_scroll, GuiTable("module-selector-table"):column(number_column)) + for k, element in pairs(Player.getModules()) do + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}) + GuiElement.add(module_table_panel, GuiButtonSelectSprite(self.classname, "priority-module-select"):sprite("entity", element.name):tooltip(tooltip)) + end +end + +------------------------------------------------------------------------------- +---Update items logistic +---@param event LuaEvent +function PreferenceEdition:updateItemsLogistic(event) + local number_column = User.getPreferenceSetting("preference_number_column") + local container_panel = self:getSolidContainerTab() + container_panel.clear() + + GuiElement.add(container_panel, GuiLabel("solid_container_label"):caption({"helmod_preferences-edition-panel.items-logistic-default"}):style("helmod_label_title_frame")) + + local options_table = GuiElement.add(container_panel, GuiTable("options-table"):column(2)) + options_table.vertical_centering = false + options_table.style.horizontal_spacing=10 + options_table.style.vertical_spacing=10 + + for _,type in pairs({"inserter", "belt", "container", "transport"}) do + local type_label = GuiElement.add(options_table, GuiLabel(string.format("%s-label", type)):caption({string.format("helmod_preferences-edition-panel.items-logistic-%s", type)})) + type_label.style.width = 200 + + local scroll_panel = GuiElement.add(options_table, GuiScroll(string.format("%s-selector-scroll", type))) + scroll_panel.style.maximal_height = self:getSrollHeight() + scroll_panel.style.minimal_width = self:getSrollWidth() + + local type_table_panel = GuiElement.add(scroll_panel, GuiTable(string.format("%s-selector-table", type)):column(number_column)) + local item_logistic = Player.getDefaultItemLogistic(type) + for key, entity in pairs(Player.getItemsLogistic(type)) do + local color = nil + if entity.name == item_logistic then color = "green" end + local button = GuiElement.add(type_table_panel, GuiButtonSelectSprite(self.classname, "items-logistic-select", type):choose("entity", entity.name):color(color)) + button.locked = true + end + end +end + +------------------------------------------------------------------------------- +---Update fluids logistic +---@param event LuaEvent +function PreferenceEdition:updateFluidsLogistic(event) + local number_column = User.getPreferenceSetting("preference_number_column") + local container_panel = self:getFluidContainerTab() + container_panel.clear() + + GuiElement.add(container_panel, GuiLabel("fluid_container_label"):caption({"helmod_preferences-edition-panel.fluids-logistic-default"}):style("helmod_label_title_frame")) + + local options_table = GuiElement.add(container_panel, GuiTable("options-table"):column(2)) + options_table.vertical_centering = false + options_table.style.horizontal_spacing=10 + options_table.style.vertical_spacing=10 + + local type_label = GuiElement.add(options_table, GuiLabel("maximum-flow"):caption({"helmod_preferences-edition-panel.fluids-logistic-maximum-flow"})) + type_label.style.width = 200 + local fluids_logistic_maximum_flow = User.getParameter("fluids_logistic_maximum_flow") + local default_flow = nil + local items = {} + for _,element in pairs(defines.constant.logistic_flow) do + local flow = {"helmod_preferences-edition-panel.fluids-logistic-flow", element.pipe, element.flow} + table.insert(items, flow) + if fluids_logistic_maximum_flow ~= nil and fluids_logistic_maximum_flow == element.flow or element.flow == defines.constant.logistic_flow_default then + default_flow = flow + end + end + GuiElement.add(options_table, GuiDropDown(self.classname, "fluids-logistic-flow"):items(items, default_flow)) + + for _,type in pairs({"pipe", "container", "transport"}) do + local type_label = GuiElement.add(options_table, GuiLabel(string.format("%s-label", type)):caption({string.format("helmod_preferences-edition-panel.fluids-logistic-%s", type)})) + type_label.style.width = 200 + + local scroll_panel = GuiElement.add(options_table, GuiScroll(string.format("%s-selector-scroll", type))) + scroll_panel.style.maximal_height = self:getSrollHeight() + scroll_panel.style.minimal_width = self:getSrollWidth() + local type_table_panel = GuiElement.add(scroll_panel, GuiTable(string.format("%s-selector-table", type)):column(number_column)) + local fluid_logistic = Player.getDefaultFluidLogistic(type) + for key, entity in pairs(Player.getFluidsLogistic(type)) do + local color = nil + if entity.name == fluid_logistic then color = "green" end + local button = GuiElement.add(type_table_panel, GuiButtonSelectSprite(self.classname, "fluids-logistic-select", type):choose("entity", entity.name):color(color)) + button.locked = true + end + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function PreferenceEdition:onEvent(event) + if event.action == "preference-setting" then + local type = event.item1 + local name = event.item2 + if name == "" then + local preference = defines.constant.preferences[type] + if preference ~= nil then + if preference.allowed_values then + local index = event.element.selected_index + User.setPreference(type, nil,preference.allowed_values[index]) + else + if preference.type == "bool-setting" then + User.setPreference(type, nil, event.element.state) + end + if preference.type == "int-setting" or preference.type == "float-setting" then + local value = tonumber(event.element.text or preference.default_value) + User.setPreference(type, nil, value) + end + if preference.type == "string-setting" then + User.setPreference(type, nil, event.element.text or preference.default_value) + end + end + Controller:send("on_gui_refresh", event) + Controller:send("on_gui_preference", event) + end + else + local preference = defines.constant.preferences[type] + if preference ~= nil then + User.setPreference(type, name, event.element.state) + end + Controller:send("on_gui_refresh", event) + Controller:send("on_gui_preference", event) + end + end + + if event.action == "configuration-priority-select" then + if event.item1 == "new" then + local priority_modules = User.getParameter("priority_modules") or {} + table.insert(priority_modules, {}) + User.setParameter("configuration_priority", table.size(priority_modules)) + User.setParameter("priority_modules", priority_modules) + else + User.setParameter("configuration_priority", tonumber(event.item1)) + end + self:updatePriorityModule(event) + Controller:send("on_gui_priority_module", event) + end + + if event.action == "configuration-priority-remove" then + local priority_modules = User.getParameter("priority_modules") or {} + local configuration_priority = User.getParameter("configuration_priority") + table.remove(priority_modules, configuration_priority) + User.setParameter("configuration_priority", table.size(priority_modules)) + User.setParameter("priority_modules", priority_modules) + self:updatePriorityModule(event) + Controller:send("on_gui_priority_module", event) + end + + if event.action == "priority-module-select" then + local configuration_priority = User.getParameter("configuration_priority") or 1 + local priority_modules = User.getParameter("priority_modules") or {} + if table.size(priority_modules) == 0 then + table.insert(priority_modules, {{name=event.item1, value=1}}) + User.setParameter("configuration_priority", 1) + User.setParameter("priority_modules", priority_modules) + else + if priority_modules[configuration_priority] ~= nil then + table.insert(priority_modules[configuration_priority], {name=event.item1, value=1}) + end + end + self:updatePriorityModule(event) + Controller:send("on_gui_priority_module", event) + end + + if event.action == "priority-module-update" then + local configuration_priority = User.getParameter("configuration_priority") + local priority_modules = User.getParameter("priority_modules") + local priority_index = tonumber(event.item1) + if priority_modules ~= nil and priority_modules[configuration_priority] ~= nil and priority_modules[configuration_priority][priority_index] ~= nil then + local text = event.element.text + priority_modules[configuration_priority][priority_index].value = tonumber(text) + end + self:updatePriorityModule(event) + Controller:send("on_gui_priority_module", event) + end + + if event.action == "priority-module-remove" then + local configuration_priority = User.getParameter("configuration_priority") + local priority_modules = User.getParameter("priority_modules") + local priority_index = tonumber(event.item1) + if priority_modules ~= nil and priority_modules[configuration_priority] ~= nil and priority_modules[configuration_priority][priority_index] ~= nil then + table.remove(priority_modules[configuration_priority], priority_index) + end + self:updatePriorityModule(event) + Controller:send("on_gui_priority_module", event) + end + + if event.action == "items-logistic-select" then + User.setParameter(string.format("items_logistic_%s", event.item1), event.item2) + self:updateItemsLogistic(event) + Controller:send("on_gui_refresh", event) + end + + if event.action == "fluids-logistic-select" then + User.setParameter(string.format("fluids_logistic_%s", event.item1), event.item2) + self:updateFluidsLogistic(event) + Controller:send("on_gui_refresh", event) + end + + if event.action == "fluids-logistic-flow" then + local index = event.element.selected_index + local fluids_logistic_maximum_flow = defines.constant.logistic_flow[index].flow + User.setParameter("fluids_logistic_maximum_flow", fluids_logistic_maximum_flow) + Controller:send("on_gui_refresh", event) + end + +end \ No newline at end of file diff --git a/helmod/edition/ProductEdition.lua b/helmod/edition/ProductEdition.lua new file mode 100644 index 00000000..61f39aeb --- /dev/null +++ b/helmod/edition/ProductEdition.lua @@ -0,0 +1,185 @@ +------------------------------------------------------------------------------- +---Class to build product edition dialog +---@class ProductEdition +ProductEdition = newclass(FormModel) + +------------------------------------------------------------------------------- +---On initialization +function ProductEdition:onInit() + self.panelCaption = ({"helmod_product-edition-panel.title"}) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function ProductEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 100, + maximal_height = height_main, + } +end + +------------------------------------------------------------------------------- +---Get or create info panel +---@return LuaGuiElement +function ProductEdition:getInfoPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["info"] ~= nil and content_panel["info"].valid then + return content_panel["info"] + end + local info_panel = GuiElement.add(content_panel, GuiFrameV("info"):style(helmod_frame_style.panel)) + info_panel.style.horizontally_stretchable = true + return info_panel +end + +------------------------------------------------------------------------------- +---Get or create tool panel +---@return LuaGuiElement +function ProductEdition:getToolPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["tool_panel"] ~= nil and content_panel["tool_panel"].valid then + return content_panel["tool_panel"] + end + local tool_panel = GuiElement.add(content_panel, GuiFrameV("tool_panel"):style(helmod_frame_style.panel):caption({"helmod_product-edition-panel.tool"})) + tool_panel.style.horizontally_stretchable = true + return tool_panel +end + +------------------------------------------------------------------------------- +---Get or create action panel +---@return LuaGuiElement +function ProductEdition:getActionPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["action_panel"] ~= nil and content_panel["action_panel"].valid then + return content_panel["action_panel"] + end + local action_panel = GuiElement.add(content_panel, GuiFrameV("action_panel"):style(helmod_frame_style.panel)) + action_panel.style.horizontally_stretchable = true + return action_panel +end + +------------------------------------------------------------------------------- +---After open +---@param event LuaEvent +function ProductEdition:after_open(event) + self:getInfoPanel() +end + +local product = nil +local product_count = 0 + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function ProductEdition:onUpdate(event) + local model, block, recipe = self:getParameterObjects() + product = nil + if block ~= nil then + local block_elements = block.products + if block.by_product == false then + block_elements = block.ingredients + end + local element_name = event.item5 + if block_elements ~= nil and block_elements[element_name] ~= nil then + product = block_elements[element_name] + product_count = product.input or 0 + end + end + + self:updateInfo(model, block) + if product ~= nil and product.type ~= "fluid" and product.type ~= "energy" then + self:updateTool(model, block) + end +end + +------------------------------------------------------------------------------- +---Update information +---@param model table +---@param block table +local input_quantity = nil +function ProductEdition:updateInfo(model, block) + local info_panel = self:getInfoPanel() + if product ~= nil then + info_panel.clear() + + local table_panel = GuiElement.add(info_panel, GuiTable("input-table"):column(2)) + GuiElement.add(table_panel, GuiButtonSprite("product"):sprite(product.type, product.name)) + GuiElement.add(table_panel, GuiLabel("product-label"):caption(Player.getLocalisedName(product))) + + local caption = {"helmod_common.quantity"} + local count = product_count or 0 + if (product.name == "steam-heat") or (product.name == "energy") then + caption = {"", {"helmod_common.quantity"}, " (MJ)"} + count = count/1e6 + end + + GuiElement.add(table_panel, GuiLabel("quantity-label"):caption(caption)) + local cell, button + cell, input_quantity, button = GuiCellInput(self.classname, "product-update", model.id, block.id, product.name, Product(product):getTableKey()):text(count):create(table_panel) + input_quantity.focus() + input_quantity.select_all() + input_quantity.style.minimal_width = 100 + end +end + +------------------------------------------------------------------------------- +---Update action +---@param model table +---@param block table +function ProductEdition:updateAction(model, block) + local action_panel = self:getActionPanel() + if product ~= nil then + action_panel.clear() + local action_panel = GuiElement.add(action_panel, GuiTable("table_action"):column(3)) + GuiElement.add(action_panel, GuiButton(self.classname, "product-reset", product.name):caption({"helmod_button.reset"})) + end +end + +------------------------------------------------------------------------------- +---Update tool +---@param model table +---@param block table +function ProductEdition:updateTool(model, block) + local tool_panel = self:getToolPanel() + tool_panel.clear() + local table_panel = GuiElement.add(tool_panel, GuiTable("table-belt"):column(5)) + for key, prototype in pairs(Player.getEntityPrototypes({{filter="type", mode="or", invert=false, type="transport-belt"}})) do + GuiElement.add(table_panel, GuiButtonSelectSprite(self.classname, "element-select"):sprite("entity", prototype.name):tooltip(EntityPrototype(prototype):getLocalisedName())) + end +end +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function ProductEdition:onEvent(event) + local model, block, recipe = self:getParameterObjects() + if User.isWriter(model) then + if event.action == "product-update" then + local products = {} + local operation = input_quantity.text + local ok , err = pcall(function() + local quantity = formula(operation) + if (event.item4 == "steam-heat") or (event.item4 == "energy") then + quantity = quantity * 1e6 + end + if quantity == 0 then quantity = nil end + ModelBuilder.updateProduct(block, event.item4, quantity) + ModelCompute.update(model) + self:close() + Controller:send("on_gui_refresh", event) + end) + if not(ok) then + Player.print("Formula is not valid!") + end + end + if event.action == "element-select" then + local belt_speed = EntityPrototype(event.item1):getBeltSpeed() + + local text = string.format("%s*%s", belt_speed * Product().belt_ratio, model.time) + GuiElement.setInputText(input_quantity, text) + input_quantity.focus() + input_quantity.select(1, string.len(text)) + end + end +end \ No newline at end of file diff --git a/helmod/edition/RecipeEdition.lua b/helmod/edition/RecipeEdition.lua new file mode 100644 index 00000000..1d4a5002 --- /dev/null +++ b/helmod/edition/RecipeEdition.lua @@ -0,0 +1,1243 @@ +------------------------------------------------------------------------------- +---Class to build recipe edition dialog +---@class RecipeEdition : FormModel +RecipeEdition = newclass(FormModel) + +local limit_display_height = 850 +local tool_spacing = 2 + +------------------------------------------------------------------------------- +---On Bind Dispatcher +function RecipeEdition:onBind() + Dispatcher:bind("on_gui_priority_module", self, self.updateFactoryModules) + Dispatcher:bind("on_gui_priority_module", self, self.updateBeaconModules) +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function RecipeEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 100, + maximal_height = math.max(height_main,800), + } +end + +------------------------------------------------------------------------------- +---On initialization +function RecipeEdition:onInit() + self.panelCaption = ({"helmod_recipe-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self.classname,"last") +end + +------------------------------------------------------------------------------- +---Get or create recipe info panel +---@return LuaGuiElement +function RecipeEdition:getObjectInfoPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["info"] ~= nil and content_panel["info"].valid then + return content_panel["info"] + end + local panel = GuiElement.add(content_panel, GuiFrameV("info")) + panel.style.horizontally_stretchable = true + return panel +end + +function RecipeEdition:getRecipeEditionScrollGroups() + local width , height, scale = Player.getDisplaySizes() + local recipe_edition_scroll_groups = User.getSetting("recipe_edition_scroll_groups") + if recipe_edition_scroll_groups == nil then + recipe_edition_scroll_groups = height/scale >= limit_display_height + end + return recipe_edition_scroll_groups +end +------------------------------------------------------------------------------- +---Get or create tab panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getTabPanel() + + local flow_panel, content_panel, menu_panel = self:getPanel() + local factory_panel_name = "facory_panel" + local beacon_panel_name = "beacon_panel" + + local recipe_edition_scroll_groups = self:getRecipeEditionScrollGroups() + + if recipe_edition_scroll_groups then + ---affichage normal + if content_panel[factory_panel_name] ~= nil and content_panel[factory_panel_name].valid then + return content_panel[factory_panel_name], content_panel[beacon_panel_name] + end + local factory_panel = GuiElement.add(content_panel, GuiFrameH(factory_panel_name)) + factory_panel.style.horizontally_stretchable = true + + local beacon_panel = GuiElement.add(content_panel, GuiFrameH(beacon_panel_name)) + beacon_panel.style.horizontally_stretchable = true + + return factory_panel, beacon_panel + else + local recipe_edition_tab = User.getParameter("recipe_edition_tab") or 1 + local panel_name = table.concat({self.classname, "change-tab"},"=") + ---affichage tab + if content_panel[panel_name] ~= nil and content_panel[panel_name].valid then + return content_panel[panel_name][panel_name][factory_panel_name], content_panel[panel_name][panel_name][beacon_panel_name] + end + + + local panel = GuiElement.add(content_panel, GuiFrameH(panel_name)) + local tab_panel = GuiElement.add(panel, GuiTabPane(panel_name)) + local factory_tab_panel = GuiElement.add(tab_panel, GuiTab(self.classname, "change-tab", "factory"):caption({"helmod_common.factory"})) + local factory_panel = GuiElement.add(tab_panel, GuiFlowV(factory_panel_name)) + tab_panel.add_tab(factory_tab_panel, factory_panel) + + local beacon_tab_panel = GuiElement.add(tab_panel, GuiTab(self.classname, "change-tab", "beacon"):caption({"helmod_common.beacon"})) + local beacon_panel = GuiElement.add(tab_panel, GuiFlowV(beacon_panel_name)) + tab_panel.add_tab(beacon_tab_panel, beacon_panel) + tab_panel.selected_tab_index = recipe_edition_tab + return factory_panel, beacon_panel + end +end + +------------------------------------------------------------------------------- +---Get or create factory panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getFactoryTablePanel() + local content_panel, _ = self:getTabPanel() + local table_name = "factory_table" + local info_name = "factory_info" + local module_name = "factory_module" + if content_panel[table_name] ~= nil and content_panel[table_name].valid then + return content_panel[table_name][info_name], content_panel[table_name][module_name] + end + + local table_panel = GuiElement.add(content_panel, GuiTable(table_name):column(2)) + table_panel.vertical_centering = false + local info_panel = GuiElement.add(table_panel, GuiFlowV(info_name)) + info_panel.style.minimal_width = 250 + GuiElement.add(info_panel, GuiLabel("factory_label"):caption({"helmod_common.factory"}):style("helmod_label_title_frame")) + + local module_panel = GuiElement.add(table_panel, GuiFlowV(module_name)) + + module_panel.style.minimal_width = 300 + return info_panel, module_panel +end + +------------------------------------------------------------------------------- +---Get or create factory panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getFactoryInfoPanel() + local info_panel, module_panel = self:getFactoryTablePanel() + local tool_name = "factory_tool" + local detail_name = "factory_detail" + if info_panel[detail_name] ~= nil and info_panel[detail_name].valid then + return info_panel[tool_name], info_panel[detail_name] + end + local tool_panel = GuiElement.add(info_panel, GuiFlowV(tool_name)) + local detail_panel = GuiElement.add(info_panel, GuiFlowV(detail_name)) + return tool_panel, detail_panel +end + +------------------------------------------------------------------------------- +---Get or create factory panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getFactoryModulePanel() + local info_panel, module_panel = self:getFactoryTablePanel() + local tool_name = "factory_tool" + local module_name = "factory_module" + if module_panel[module_name] ~= nil and module_panel[module_name].valid then + return module_panel[tool_name], module_panel[module_name] + end + local tool_panel = GuiElement.add(module_panel, GuiFlowV(tool_name)) + local module_panel = GuiElement.add(module_panel, GuiFlowV(module_name)) + return tool_panel, module_panel +end + +------------------------------------------------------------------------------- +---Get or create beacon table panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getBeaconTablePanel() + local _, content_panel = self:getTabPanel() + local table_name = "beacon_table" + local info_name = "beacon_info" + local module_name = "beacon_module" + if content_panel[table_name] ~= nil and content_panel[table_name].valid then + return content_panel[table_name][info_name], content_panel[table_name][module_name] + end + + local table_panel = GuiElement.add(content_panel, GuiTable(table_name):column(2)) + table_panel.vertical_centering = false + local info_panel = GuiElement.add(table_panel, GuiFlowV(info_name)) + info_panel.style.minimal_width = 250 + GuiElement.add(info_panel, GuiLabel("beacon_label"):caption({"helmod_common.beacon"}):style("helmod_label_title_frame")) + + local module_panel = GuiElement.add(table_panel, GuiFlowV(module_name)) + + module_panel.style.minimal_width = 300 + return info_panel, module_panel +end + +------------------------------------------------------------------------------- +---Get or create beacon info panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getBeaconInfoPanel() + local info_panel, module_panel = self:getBeaconTablePanel() + local tool_name = "beacon_tool" + local detail_name = "beacon_detail" + if info_panel[detail_name] ~= nil and info_panel[detail_name].valid then + return info_panel[tool_name], info_panel[detail_name] + end + local tool_panel = GuiElement.add(info_panel, GuiFlowV(tool_name)) + local detail_panel = GuiElement.add(info_panel, GuiFlowV(detail_name)) + return tool_panel, detail_panel +end + +------------------------------------------------------------------------------- +---Get or create beacon module panel +---@return LuaGuiElement, LuaGuiElement +function RecipeEdition:getBeaconModulePanel() + local info_panel, module_panel = self:getBeaconTablePanel() + local tool_name = "beacon_tool" + local module_name = "beacon_module" + if module_panel[module_name] ~= nil and module_panel[module_name].valid then + return module_panel[tool_name], module_panel[module_name] + end + local tool_panel = GuiElement.add(module_panel, GuiFlowV(tool_name)) + local module_panel = GuiElement.add(module_panel, GuiFlowV(module_name)) + return tool_panel, module_panel +end + +------------------------------------------------------------------------------- +---On before open +---@param event LuaEvent +function RecipeEdition:onBeforeOpen(event) + FormModel.onBeforeOpen(self, event) + local close = (event.action == "OPEN") ---only on open event + User.setParameter("module_list_refresh",false) + if event.action == "OPEN" then + local parameter_last = string.format("%s%s%s", event.item1, event.item2, event.item3) + if User.getParameter(self.parameterLast) or User.getParameter(self.parameterLast) ~= parameter_last then + close = false + User.setParameter("factory_group_selected",nil) + User.setParameter("beacon_group_selected",nil) + User.setParameter("module_list_refresh",true) + end + + User.setParameter(self.parameterLast, parameter_last) + end + return close +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function RecipeEdition:onEvent(event) + local display_width, display_height, scale = Player.getDisplaySizes() + + local model, block, recipe = self:getParameterObjects() + if model == nil or block == nil or recipe == nil then return end + + if event.action == "change-sroll-groups" then + User.setSetting("recipe_edition_scroll_groups", event.item1 == "true") + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "change-tab" then + local recipe_edition_tab = event.element.selected_tab_index + User.setParameter("recipe_edition_tab", recipe_edition_tab) + end + + if User.isWriter(model) then + User.setParameter("scroll_element", recipe.id) + + if event.action == "neighbour-bonus-update" then + local index = event.element.selected_index + local items = {1,2,4,8} + ModelBuilder.updateRecipeNeighbourBonus(recipe, items[index]) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "recipe-update" then + local text = event.element.text + local production = (formula(text) or 100)/100 + ModelBuilder.updateRecipeProduction(recipe, production) + ModelCompute.update(model) + self:updateObjectInfo(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-select" then + Model.setFactory(recipe, event.item4) + ModelBuilder.applyFactoryModulePriority(recipe) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-fuel-update" then + + local index = event.element.selected_index + local factory_prototype = EntityPrototype(recipe.factory) + local energy_type = factory_prototype:getEnergyTypeInput() + local fuel_list = {} + if energy_type == "burner" then + local energy_prototype = factory_prototype:getEnergySource() + fuel_list = energy_prototype:getFuelPrototypes() + elseif energy_type == "fluid" then + fuel_list = factory_prototype:getFluidFuelPrototypes() + end + local fuel = nil + for _,item in pairs(fuel_list) do + if index == 1 then + if energy_type == "fluid" then + fuel = {name = item:native().name, temperature = item.temperature} + else + fuel = item:native().name + end + break + end + index = index - 1 + end + ModelBuilder.updateFuelFactory(recipe, fuel) + ModelCompute.update(model) + if recipe.type ~= "energy" then + self:updateFactoryInfoTool(event) + end + self:updateFactoryInfo(event) + self:updateHeader(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-tool" then + if event.item4 == "default" then + User.setDefaultFactory(recipe) + elseif event.item4 == "block" then + ModelBuilder.setFactoryBlock(block, recipe) + ModelCompute.update(model) + elseif event.item4 == "line" then + ModelBuilder.setFactoryLine(model, recipe) + ModelCompute.update(model) + end + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-module-tool" then + if event.item4 == "block" then + ModelBuilder.setFactoryModuleBlock(block, recipe) + ModelCompute.update(model) + elseif event.item4 == "line" then + ModelBuilder.setFactoryModuleLine(model, recipe) + ModelCompute.update(model) + elseif event.item4 == "erase" then + ModelBuilder.setFactoryModulePriority(recipe, nil) + ModelCompute.update(model) + end + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-module-priority-select" then + User.setParameter("factory_module_priority", tonumber(event.item4)) + self:updateFactoryModules(event) + end + + if event.action == "factory-module-priority-apply" then + local factory_module_priority = User.getParameter("factory_module_priority") or 1 + local priority_modules = User.getParameter("priority_modules") + if factory_module_priority ~= nil and priority_modules ~= nil and priority_modules[factory_module_priority] ~= nil then + ModelBuilder.setFactoryModulePriority(recipe, priority_modules[factory_module_priority]) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + end + + if event.action == "factory-module-select" then + ModelBuilder.addFactoryModule(recipe, event.item4, event.control) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "factory-module-remove" then + ModelBuilder.removeFactoryModule(recipe, event.item4, event.control) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-select" then + User.setParameter("current_beacon_selection", tonumber(event.item4)) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-add" then + if recipe.beacons == nil then recipe.beacons = {} end + local new_beacon = Model.newBeacon() + table.insert(recipe.beacons, new_beacon) + User.setParameter("current_beacon_selection", #recipe.beacons) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-remove" then + local current_beacon_selection = User.getParameter("current_beacon_selection") or 1 + if #recipe.beacons > 1 then + table.remove(recipe.beacons, current_beacon_selection) + end + User.setParameter("current_beacon_selection", #recipe.beacons) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-tool" then + if event.item4 == "default" then + User.setDefaultBeacons(recipe) + elseif event.item4 == "block" then + ModelBuilder.setBeaconBlock(block, recipe) + ModelCompute.update(model) + elseif event.item4 == "line" then + ModelBuilder.setBeaconLine(model, recipe) + ModelCompute.update(model) + end + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-module-tool" then + if event.item4 == "block" then + ModelBuilder.setBeaconModuleBlock(block, recipe) + ModelCompute.update(model) + elseif event.item4 == "line" then + ModelBuilder.setBeaconModuleLine(model, recipe) + ModelCompute.update(model) + elseif event.item4 == "erase" then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ModelBuilder.setBeaconModulePriority(beacon, recipe, nil) + ModelCompute.update(model) + end + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-module-priority-select" then + User.setParameter("beacon_module_priority", tonumber(event.item4)) + self:updateBeaconModules(event) + end + + if event.action == "beacon-module-priority-apply" then + local beacon_module_priority = User.getParameter("beacon_module_priority") or 1 + local priority_modules = User.getParameter("priority_modules") + if beacon_module_priority ~= nil and priority_modules ~= nil and priority_modules[beacon_module_priority] ~= nil then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ModelBuilder.setBeaconModulePriority(beacon, recipe, priority_modules[beacon_module_priority]) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + end + + if event.action == "beacon-module-select" then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ModelBuilder.addBeaconModule(beacon, recipe, event.item4, event.control) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-module-remove" then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ModelBuilder.removeBeaconModule(beacon, recipe, event.item4, event.control) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-choose" then + local current_beacon_selection = User.getParameter("current_beacon_selection") or 1 + Model.setBeacon(recipe, current_beacon_selection, event.item4) + ModelCompute.update(model) + self:update(event) + Controller:send("on_gui_recipe_update", event) + end + + if event.action == "beacon-update" then + local options = {} + local text = event.element.text + ---item3 = "combo" or "factory" + local ok , err = pcall(function() + options[event.item4] = formula(text) or 0 + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ModelBuilder.updateBeacon(beacon, recipe, options) + ModelCompute.update(model) + self:updateBeaconInfo(event) + if display_height/scale >= limit_display_height or User.getParameter("factory_tab") then + self:updateFactoryInfo(event) + end + Controller:send("on_gui_recipe_update", event) + end) + if not(ok) then + Player.print("Formula is not valid!") + end + end + + if event.action == "factory-switch-module" then + local factory_switch_priority = event.element.switch_state == "right" + User.setParameter("factory_switch_priority", factory_switch_priority) + self:updateFactoryModules(event) + end + + if event.action == "beacon-switch-module" then + local beacon_switch_priority = event.element.switch_state == "right" + User.setParameter("beacon_switch_priority", beacon_switch_priority) + self:updateBeaconModules(event) + end + end +end + +------------------------------------------------------------------------------- +---On close dialog +function RecipeEdition:onClose() + User.setParameter(self.parameterLast,nil) + User.setParameter("module_list_refresh",false) +end + +------------------------------------------------------------------------------- +---On open +---@param event LuaEvent +function RecipeEdition:onOpen(event) + if User.getParameter("module_panel") == nil then + User.setParameter("module_panel", true) + end + if User.getParameter("factory_tab") == nil then + User.setParameter("factory_tab", true) + end +end +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function RecipeEdition:onUpdate(event) + local model, block, recipe = self:getParameterObjects() + ---header + self:updateHeader(event) + if recipe ~= nil then + if recipe.type == "energy" then + self:updateFactoryInfo(event) + else + self:updateFactoryInfoTool(event) + self:updateFactoryInfo(event) + self:updateFactoryModulesActive(event) + self:updateFactoryModules(event) + + self:updateBeaconInfoTool(event) + self:updateBeaconInfo(event) + self:updateBeaconModulesActive(event) + self:updateBeaconModules(event) + end + end +end + +------------------------------------------------------------------------------- +---Update tab menu +---@param event LuaEvent +function RecipeEdition:updateTabMenu(event) + local tab_left_panel = self:getTabLeftPanel() + local tab_right_panel = self:getTabRightPanel() + local model, block, recipe = self:getParameterObjects() + + local display_width, display_height, scale = Player.getDisplaySizes() + + tab_left_panel.clear() + tab_right_panel.clear() + + ---left tab + if display_height/scale < limit_display_height then + local style = "helmod_button_tab" + if User.getParameter("factory_tab") == true then style = "helmod_button_tab_selected" end + + GuiElement.add(tab_left_panel, GuiFrameH(self.classname, "separator_factory"):style(helmod_frame_style.tab)).style.width = 5 + GuiElement.add(tab_left_panel, GuiButton(self.classname, "edition-change-tab", model.id, block.id, recipe.id, "factory"):style(style):caption({"helmod_common.factory"}):tooltip({"helmod_common.factory"})) + + local style = "helmod_button_tab" + if User.getParameter("factory_tab") == false then style = "helmod_button_tab_selected" end + + GuiElement.add(tab_left_panel, GuiFrameH(self.classname, "separator_beacon"):style(helmod_frame_style.tab)).style.width = 5 + GuiElement.add(tab_left_panel, GuiButton(self.classname, "edition-change-tab", model.id, block.id, recipe.id, "beacon"):style(style):caption({"helmod_common.beacon"}):tooltip({"helmod_common.beacon"})) + + GuiElement.add(tab_left_panel, GuiFrameH("tab_final"):style(helmod_frame_style.tab)).style.width = 100 + end + ---right tab + local style = "helmod_button_tab" + if User.getParameter("module_panel") == false then style = "helmod_button_tab_selected" end + + GuiElement.add(tab_right_panel, GuiFrameH(self.classname, "separator_factory"):style(helmod_frame_style.tab)).style.width = 5 + GuiElement.add(tab_right_panel, GuiButton(self.classname, "change-panel", model.id, block.id, recipe.id, "factory"):style(style):caption({"helmod_common.factory"}):tooltip({"tooltip.selector-factory"})) + + local style = "helmod_button_tab" + if User.getParameter("module_panel") == true then style = "helmod_button_tab_selected" end + + GuiElement.addGuiFrameH(tab_right_panel, self.classname.."_separator_module",helmod_frame_style.tab).style.width = 5 + GuiElement.add(tab_right_panel, GuiButton(self.classname, "change-panel", model.id, block.id, recipe.id, "module"):style(style):caption({"helmod_common.module"}):tooltip({"tooltip.selector-module"})) + + GuiElement.add(tab_right_panel, GuiFrameH("tab_final"):style(helmod_frame_style.tab)).style.width = 100 +end + +------------------------------------------------------------------------------- +---Update factory tool +---@param event LuaEvent +function RecipeEdition:updateFactoryInfoTool(event) + local tool_panel, detail_panel = self:getFactoryInfoPanel() + local model, block, recipe = self:getParameterObjects() + + if recipe ~= nil then + local factory = recipe.factory + local factory_prototype = EntityPrototype(factory) + tool_panel.clear() + + ---factory tool + local tool_action_panel = GuiElement.add(tool_panel, GuiFlowH("tool-action")) + tool_action_panel.style.horizontal_spacing = 10 + tool_action_panel.style.bottom_padding = 10 + local tool_panel1 = GuiElement.add(tool_action_panel, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + + local default_factory = User.getDefaultFactory(recipe) + local record_style = "helmod_button_menu_sm_default" + if Model.compareFactory(default_factory, factory, Model.factoryHasModule(factory)) then record_style = "helmod_button_menu_sm_selected" end + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-tool", model.id, block.id, recipe.id, "default"):sprite("menu", defines.sprites.favorite.black, defines.sprites.favorite.black):style(record_style):tooltip(GuiTooltipFactory("helmod_recipe-edition-panel.set-default"):element(default_factory))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-tool", model.id, block.id, recipe.id, "block"):sprite("menu", defines.sprites.expand_right.black, defines.sprites.expand_right.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipFactory("helmod_recipe-edition-panel.apply-block"):element(factory):tooltip("helmod_recipe-edition-panel.current-factory"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-tool", model.id, block.id, recipe.id, "line"):sprite("menu", defines.sprites.expand_right_group.black, defines.sprites.expand_right_group.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipFactory("helmod_recipe-edition-panel.apply-line"):element(factory):tooltip("helmod_recipe-edition-panel.current-factory"))) + + end +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function RecipeEdition:updateFactoryInfo(event) + local tool_panel, detail_panel = self:getFactoryInfoPanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local factory = recipe.factory + local factory_prototype = EntityPrototype(factory) + + detail_panel.clear() + + ---factory selection + local scroll_panel = GuiElement.add(detail_panel, GuiScroll("factory-scroll"):policy(true)) + scroll_panel.style.maximal_height = 118 + local recipe_prototype = RecipePrototype(recipe) + local category = recipe_prototype:getCategory() + local factories = {} + if recipe.type == "energy" then + factories[recipe.factory.name] = recipe.factory + elseif recipe.type == "fluid" then + factories = Player.getProductionsCrafting("fluid", recipe) + elseif recipe.type == "boiler" then + factories = Player.getBoilersForRecipe(recipe_prototype) + else + factories = Player.getProductionsCrafting(category, recipe) + end + + local factory_table_panel = GuiElement.add(scroll_panel, GuiTable("factory-table"):column(5)) + for key, element in spairs(factories, function(t,a,b) return t[b].crafting_speed > t[a].crafting_speed end) do + local color = nil + if factory.name == element.name then color = GuiElement.color_button_edit end + local button = GuiElement.add(factory_table_panel, GuiButtonSelectSprite(self.classname, "factory-select", model.id, block.id, recipe.id):choose("entity", element.name):color(color)) + button.locked = true + end + + ---factory info + local header_panel = GuiElement.add(detail_panel, GuiTable("table-header"):column(2)) + if factory_prototype:native() == nil then + GuiElement.add(header_panel, GuiLabel("label"):caption(factory.name)) + else + GuiElement.add(header_panel, GuiLabel("label"):caption(factory_prototype:getLocalisedName())) + end + + local input_panel = GuiElement.add(detail_panel, GuiTable("table-input"):column(2)) + input_panel.style.horizontal_spacing = 10 + + GuiElement.add(input_panel, GuiLabel("label-module-slots"):caption({"helmod_label.module-slots"})) + GuiElement.add(input_panel, GuiLabel("module-slots"):caption(factory_prototype:getModuleInventorySize())) + + ---neighbour + if factory_prototype:getType() == "reactor" then + local items = {} + local default_neighbour = nil + local item = nil + for _,value in pairs({1,2,4,8}) do + item = {"", value, " ", {"entity-name.nuclear-reactor"}} + table.insert(items, item) + if default_neighbour == nil then + default_neighbour = item + end + if factory.neighbour_bonus == value then + default_neighbour = item + end + end + + GuiElement.add(input_panel, GuiLabel("label-neighbour"):caption({"description.neighbour-bonus"})) + GuiElement.add(input_panel, GuiDropDown(self.classname, "neighbour-bonus-update", model.id, block.id, recipe.id):items(items, default_neighbour)) + end + ---energy + local cell_energy = GuiElement.add(input_panel, GuiFlowH("label-energy")) + GuiElement.add(cell_energy, GuiLabel("label-energy"):caption({"helmod_label.energy"})) + self:addAlert(cell_energy, factory, "consumption") + + local sign = "" + if factory.effects.consumption > 0 then sign = "+" end + GuiElement.add(input_panel, GuiLabel("energy"):caption(Format.formatNumberKilo(factory.energy, "W").." ("..sign..Format.formatPercent(factory.effects.consumption).."%)")) + + ---burner + local energy_type = factory_prototype:getEnergyTypeInput() + if energy_type == "burner" or energy_type == "fluid" then + local fuel_type = "item" + if energy_type == "fluid" then + fuel_type = "fluid" + end + local energy_prototype = factory_prototype:getEnergySource() + local fuel_list = {} + local factory_fuel = nil + + if energy_type == "fluid" then + fuel_list = factory_prototype:getFluidFuelPrototypes() + factory_fuel = factory_prototype:getFluidFuelPrototype() + else + fuel_list = energy_prototype:getFuelPrototypes() + factory_fuel = energy_prototype:getFuelPrototype() + end + + if fuel_list ~= nil and factory_fuel ~= nil then + local items = {} + if (energy_type == "fluid") and (not factory_prototype:getBurnsFluid()) then + for _,item in pairs(fuel_list) do + table.insert(items, string.format("[%s=%s] %s Β°C", fuel_type, item:native().name, item.temperature)) + end + else + for _,item in pairs(fuel_list) do + table.insert(items, string.format("[%s=%s] %s", fuel_type, item:native().name, Format.formatNumberKilo(item:getFuelValue(), "J"))) + end + end + + local default_fuel + if (energy_type == "fluid") and (not factory_prototype:getBurnsFluid()) then + default_fuel = string.format("[%s=%s] %s Β°C", fuel_type, factory_fuel:native().name, factory_fuel.temperature) + else + default_fuel = string.format("[%s=%s] %s", fuel_type, factory_fuel:native().name, Format.formatNumberKilo(factory_fuel:getFuelValue(), "J")) + end + GuiElement.add(input_panel, GuiLabel("label-burner"):caption({"helmod_common.resource"})) + GuiElement.add(input_panel, GuiDropDown(self.classname, "factory-fuel-update", model.id, block.id, recipe.id, fuel_type):items(items, default_fuel)) + end + end + + ---speed + local sign = "" + if factory.effects.speed > 0 then sign = "+" end + local cell_speed = GuiElement.add(input_panel, GuiFlowH("label-speed")) + GuiElement.add(cell_speed, GuiLabel("label-speed"):caption({"helmod_label.speed"})) + self:addAlert(cell_speed, factory, "speed") + GuiElement.add(input_panel, GuiLabel("speed"):caption(Format.formatNumber(factory.speed).." ("..sign..Format.formatPercent(factory.effects.speed).."%)")) + + ---productivity + local sign = "" + if factory.effects.productivity > 0 then sign = "+" end + local cell_productivity = GuiElement.add(input_panel, GuiFlowH("label-productivity")) + GuiElement.add(cell_productivity, GuiLabel("label-productivity"):caption({"helmod_label.productivity"})) + self:addAlert(cell_productivity, factory, "productivity") + GuiElement.add(input_panel, GuiLabel("productivity"):caption(sign..Format.formatPercent(factory.effects.productivity).."%")) + + ---pollution + local cell_pollution = GuiElement.add(input_panel, GuiFlowH("label-pollution")) + GuiElement.add(cell_pollution, GuiLabel("label-pollution"):caption({"helmod_common.pollution"})) + self:addAlert(cell_pollution, factory, "pollution") + GuiElement.add(input_panel, GuiLabel("pollution"):caption({"helmod_si.per-minute", Format.formatNumberElement((factory.pollution or 0)*60 )})) + + end +end + +------------------------------------------------------------------------------- +---Add alert information +---@param cell LuaGuiElement +---@param factory table +---@param type string +function RecipeEdition:addAlert(cell, factory, type) + if factory.cap ~= nil and factory.cap[type] ~= nil and factory.cap[type] > 0 then + local tooltip = {""} + if ModelCompute.cap_reason[type].cycle ~= nil and ModelCompute.cap_reason[type].cycle > 0 and bit32.band(factory.cap[type], ModelCompute.cap_reason[type].cycle) > 0 then + table.insert(tooltip, {string.format("helmod_cap_reason.%s-cycle", type)}) + end + if ModelCompute.cap_reason[type].module_low ~= nil and ModelCompute.cap_reason[type].module_low > 0 and bit32.band(factory.cap[type], ModelCompute.cap_reason[type].module_low) > 0 then + if #tooltip > 1 then + table.insert(tooltip, "\n") + end + table.insert(tooltip, {string.format("helmod_cap_reason.%s-module-low", type)}) + end + if ModelCompute.cap_reason[type].module_high ~= nil and ModelCompute.cap_reason[type].module_high > 0 and bit32.band(factory.cap[type], ModelCompute.cap_reason[type].module_high) > 0 then + if #tooltip > 1 then + table.insert(tooltip, "\n") + end + table.insert(tooltip, {string.format("helmod_cap_reason.%s-module-high", type)}) + end + GuiElement.add(cell, GuiSprite("alert"):sprite("helmod-alert1"):tooltip(tooltip)) + end +end + +------------------------------------------------------------------------------- +---Update modules information +---@param event LuaEvent +function RecipeEdition:updateFactoryModulesActive(event) + if not(self:isOpened()) then return end + local tool_panel, module_panel = self:getFactoryModulePanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local factory = recipe.factory + + tool_panel.clear() + GuiElement.add(tool_panel, GuiLabel("module_label"):caption({"helmod_recipe-edition-panel.current-modules"}):style("helmod_label_title_frame")) + + ---module tool + local tool_action_panel = GuiElement.add(tool_panel, GuiFlowH("tool-action")) + tool_action_panel.style.horizontal_spacing = 10 + tool_action_panel.style.bottom_padding = 10 + local tool_panel1 = GuiElement.add(tool_action_panel, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-module-tool", model.id, block.id, recipe.id, "block"):sprite("menu", defines.sprites.expand_right.black, defines.sprites.expand_right.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriority("helmod_recipe-edition-panel.apply-block"):element(factory.module_priority):tooltip("helmod_recipe-edition-panel.current-module"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-module-tool", model.id, block.id, recipe.id, "line"):sprite("menu", defines.sprites.expand_right_group.black, defines.sprites.expand_right_group.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriority("helmod_recipe-edition-panel.apply-line"):element(factory.module_priority):tooltip("helmod_recipe-edition-panel.current-module"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-module-tool", model.id, block.id, recipe.id, "erase"):sprite("menu", defines.sprites.eraser.black, defines.sprites.eraser.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriority("helmod_recipe-edition-panel.module-clear"):element(factory.module_priority))) + + ---actived modules panel + local module_table = GuiElement.add(tool_panel, GuiTable("modules"):column(6):style("helmod_table_recipe_modules")) + local control_info = "module-remove" + for module, count in pairs(factory.modules) do + local module_cell = GuiElement.add(module_table, GuiFlowH("module-cell", module)) + local tooltip = GuiTooltipModule("tooltip.remove-module"):element({type="item", name=module}):withControlInfo(control_info) + GuiElement.add(module_cell, GuiButtonSelectSprite(self.classname, "factory-module-remove", model.id, block.id, recipe.id, module):sprite("item", module):tooltip(tooltip)) + GuiElement.add(module_cell, GuiLabel("module-amount"):caption({"", "x", count})) + end + end +end + +------------------------------------------------------------------------------- +---Update modules information +---@param event LuaEvent +function RecipeEdition:updateFactoryModules(event) + if not(self:isOpened()) then return end + local tool_panel, module_panel = self:getFactoryModulePanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local factory_switch_priority = User.getParameter("factory_switch_priority") + + module_panel.clear() + + local element_state = "left" + if factory_switch_priority == true then element_state = "right" end + local factory_switch_module = GuiElement.add(module_panel, GuiSwitch(self.classname, "factory-switch-module", model.id, block.id, recipe.id):state(element_state):leftLabel({"helmod_recipe-edition-panel.selection-modules"}):rightLabel({"helmod_label.priority-modules"})) + if factory_switch_priority == true then + ---module priority + self:updateFactoryModulesPriority(module_panel) + else + ---module selector + self:updateFactoryModulesSelector(module_panel) + end + end +end + +------------------------------------------------------------------------------- +---Update modules priority +---@param factory_module_panel LuaGuiElement +function RecipeEdition:updateFactoryModulesPriority(factory_module_panel) + local model, block, recipe = self:getParameterObjects() + ---module priority + local factory_module_priority = User.getParameter("factory_module_priority") or 1 + local priority_modules = User.getParameter("priority_modules") or {} + + ---configuration select + local tool_action_panel2 = GuiElement.add(factory_module_panel, GuiFlowH("tool-action2")) + tool_action_panel2.style.horizontal_spacing = 10 + tool_action_panel2.style.bottom_padding = 10 + + local tool_panel1 = GuiElement.add(tool_action_panel2, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + local button_style = "helmod_button_menu_sm_bold" + GuiElement.add(tool_panel1, GuiButton("HMPreferenceEdition", "OPEN", "priority_module"):sprite("menu", defines.sprites.process.black, defines.sprites.process.black):style("helmod_button_menu_sm"):tooltip({"helmod_button.preferences"})) + GuiElement.add(tool_panel1, GuiButton(self.classname, "factory-module-priority-apply", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm"):tooltip({"helmod_recipe-edition-panel.apply-priority"})) + + local tool_panel2 = GuiElement.add(tool_action_panel2, GuiTable("tool2"):column(6)) + for i, priority_module in pairs(priority_modules) do + local button_style2 = button_style + if factory_module_priority == i then button_style2 = "helmod_button_menu_sm_bold_selected" end + GuiElement.add(tool_panel2, GuiButton(self.classname, "factory-module-priority-select", model.id, block.id, recipe.id, i):caption(i):style(button_style2)) + end + + ---module priority info + local priority_table_panel = GuiElement.add(factory_module_panel, GuiTable("module-priority-table"):column(2)) + if priority_modules[factory_module_priority] ~= nil then + local control_info = "module-add" + for index, element in pairs(priority_modules[factory_module_priority]) do + local color = nil + local module = ItemPrototype(element.name) + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}):withControlInfo(control_info) + if Player.checkFactoryLimitationModule(module:native(), recipe) == false then + if (module:native().limitation_message_key ~= nil) and (module:native().limitation_message_key ~= "") then + tooltip = {"item-limitation."..module:native().limitation_message_key} + else + tooltip = "" + end + color = GuiElement.color_button_rest + end + GuiElement.add(priority_table_panel, GuiButtonSelectSprite(self.classname, "factory-module-select", model.id, block.id, recipe.id):sprite("entity", element.name):color(color):index(index):tooltip(tooltip)) + GuiElement.add(priority_table_panel, GuiLabel("priority-value", index):caption({"", "x", element.value})) + end + end +end + +------------------------------------------------------------------------------- +---Update modules selector +---@param factory_module_panel LuaGuiElement +function RecipeEdition:updateFactoryModulesSelector(factory_module_panel) + local model, block, recipe = self:getParameterObjects() + local block_id = block.id + local recipe_id = recipe.id + local module_scroll = GuiElement.add(factory_module_panel, GuiScroll("module-selector-scroll")) + module_scroll.style.maximal_height = 118 + local module_table_panel = GuiElement.add(module_scroll, GuiTable("module-selector-table"):column(6)) + for k, element in pairs(Player.getModules()) do + local control_info = "module-add" + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}):withControlInfo(control_info) + local module = ItemPrototype(element.name) + if Player.checkFactoryLimitationModule(module:native(), recipe) == true then + GuiElement.add(module_table_panel, GuiButtonSelectSprite(self.classname, "factory-module-select", model.id, block.id, recipe.id):sprite("entity", element.name):tooltip(tooltip)) + end + end +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function RecipeEdition:updateBeaconInfo(event) + if event.is_queue == true then return end + local tool_panel, detail_panel = self:getBeaconInfoPanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + local beacon_prototype = EntityPrototype(beacon) + + detail_panel.clear() + + ---factory selection + local scroll_panel = GuiElement.add(detail_panel, GuiScroll("beacon-scroll"):policy(true)) + scroll_panel.style.maximal_height = 118 + local factories = Player.getProductionsBeacon() + + local last_element = nil + local factory_table_panel = GuiElement.add(scroll_panel, GuiTable("beacon-table"):column(5)) + for key, element in pairs(factories) do + local color = nil + if beacon ~= nil and beacon.name == element.name then color = GuiElement.color_button_edit end + local button = GuiElement.add(factory_table_panel, GuiButtonSelectSprite(self.classname, "beacon-choose", model.id, block.id, recipe.id):choose("entity", element.name):color(color)) + button.locked = true + if beacon ~= nil and beacon.name == element.name then last_element = button end + end + + if last_element ~= nil then + scroll_panel.scroll_to_element(last_element) + end + + ---beacon info + local header_panel = GuiElement.add(detail_panel, GuiTable("table-header"):column(2)) + if beacon_prototype:native() == nil then + GuiElement.add(header_panel, GuiLabel("label"):caption(beacon.name)) + else + GuiElement.add(header_panel, GuiLabel("label"):caption(beacon_prototype:getLocalisedName())) + end + + local input_panel = GuiElement.add(detail_panel, GuiTable("table-input"):column(2)) + + GuiElement.add(input_panel, GuiLabel("label-module-slots"):caption({"helmod_label.module-slots"})) + GuiElement.add(input_panel, GuiLabel("module-slots"):caption(beacon_prototype:getModuleInventorySize())) + + GuiElement.add(input_panel, GuiLabel("label-energy-nominal"):caption({"helmod_label.energy"})) + GuiElement.add(input_panel, GuiLabel("energy"):caption(Format.formatNumberKilo(beacon_prototype:getEnergyUsage(), "W"))) + + GuiElement.add(input_panel, GuiLabel("label-efficiency"):caption({"helmod_label.efficiency"})) + GuiElement.add(input_panel, GuiLabel("efficiency"):caption(beacon_prototype:getDistributionEffectivity())) + + GuiElement.add(input_panel, GuiLabel("label-combo"):caption({"helmod_label.beacon-on-factory"}):tooltip({"tooltip.beacon-on-factory"})) + GuiElement.add(input_panel, GuiTextField(self.classname, "beacon-update", model.id, block.id, recipe.id, "combo", "onqueue"):text(beacon.combo):style("helmod_textfield"):tooltip({"tooltip.beacon-on-factory"})) + + GuiElement.add(input_panel, GuiLabel("label-by-factory"):caption({"helmod_label.beacon-per-factory"}):tooltip({"tooltip.beacon-per-factory"})) + GuiElement.add(input_panel, GuiTextField(self.classname, "beacon-update", model.id, block.id, recipe.id, "per_factory", "onqueue"):text(beacon.per_factory):style("helmod_textfield"):tooltip({"tooltip.beacon-per-factory"})) + + GuiElement.add(input_panel, GuiLabel("label-by-factory-constant"):caption({"helmod_label.beacon-per-factory-constant"}):tooltip({"tooltip.beacon-per-factory-constant"})) + GuiElement.add(input_panel, GuiTextField(self.classname, "beacon-update", model.id, block.id, recipe.id, "per_factory_constant", "onqueue"):text(beacon.per_factory_constant):style("helmod_textfield"):tooltip({"tooltip.beacon-per-factory-constant"})) + end +end + +------------------------------------------------------------------------------- +---Update beacon tool +---@param event LuaEvent +function RecipeEdition:updateBeaconInfoTool(event) + local tool_panel, detail_panel = self:getBeaconInfoPanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + + tool_panel.clear() + + ---factory tool + local tool_action_panel = GuiElement.add(tool_panel, GuiFlowH("tool-action")) + tool_action_panel.style.horizontal_spacing = 10 + tool_action_panel.style.bottom_padding = 10 + local tool_panel1 = GuiElement.add(tool_action_panel, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + + local beacons = recipe.beacons + local default_beacons = User.getDefaultBeacons(recipe) + local record_style = "helmod_button_menu_sm" + if Model.compareBeacons(default_beacons, beacons) then record_style = "helmod_button_menu_sm_selected" end + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-tool", model.id, block.id, recipe.id, "default"):sprite("menu", defines.sprites.favorite.black, defines.sprites.favorite.black):style(record_style):tooltip(GuiTooltipBeacons("helmod_recipe-edition-panel.set-default"):element(default_beacons))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-tool", model.id, block.id, recipe.id, "block"):sprite("menu", defines.sprites.expand_right.black, defines.sprites.expand_right.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipBeacons("helmod_recipe-edition-panel.apply-block"):element(recipe.beacons):tooltip("helmod_recipe-edition-panel.current-beacon"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-tool", model.id, block.id, recipe.id, "line"):sprite("menu", defines.sprites.expand_right_group.black, defines.sprites.expand_right_group.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipBeacons("helmod_recipe-edition-panel.apply-line"):element(recipe.beacons):tooltip("helmod_recipe-edition-panel.current-beacon"))) + + local selection_panel = GuiElement.add(tool_action_panel, GuiFlowH("tool2")) + selection_panel.style.horizontal_spacing = tool_spacing + + local current_beacon_selection = User.getParameter("current_beacon_selection") or 1 + GuiElement.add(selection_panel, GuiButton(self.classname, "beacon-remove", model.id, block.id, recipe.id):sprite("menu", defines.sprites.remove.black, defines.sprites.remove.black):style("helmod_button_menu_sm"):tooltip({"helmod_recipe-edition-panel.remove-beacon"})) + GuiElement.add(selection_panel, GuiButton(self.classname, "beacon-add", model.id, block.id, recipe.id):sprite("menu", defines.sprites.add.black, defines.sprites.add.black):style("helmod_button_menu_sm"):tooltip({"helmod_recipe-edition-panel.add-beacon"})) + for key, beacon in pairs(recipe.beacons) do + local style = "helmod_button_menu_sm_bold" + if current_beacon_selection == key then + style = "helmod_button_menu_sm_bold_selected" + end + GuiElement.add(selection_panel, GuiButton(self.classname, "beacon-select", model.id, block.id, recipe.id, key):caption(key):style(style):tooltip(GuiTooltipFactory("tooltip.info-beacon"):element(beacon))) + end + end +end + +------------------------------------------------------------------------------- +---Update modules information +---@param event LuaEvent +function RecipeEdition:updateBeaconModulesActive(event) + if not(self:isOpened()) then return end + local tool_panel, module_panel = self:getBeaconModulePanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + local beacon = ModelBuilder.getCurrentBeacon(recipe) + + tool_panel.clear() + GuiElement.add(tool_panel, GuiLabel("module_label"):caption({"helmod_recipe-edition-panel.current-modules"}):style("helmod_label_title_frame")) + + ---module tool + local tool_action_panel = GuiElement.add(tool_panel, GuiFlowH("tool-action")) + tool_action_panel.style.horizontal_spacing = 10 + tool_action_panel.style.bottom_padding = 10 + local tool_panel1 = GuiElement.add(tool_action_panel, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-module-tool", model.id, block.id, recipe.id, "block"):sprite("menu", defines.sprites.expand_right.black, defines.sprites.expand_right.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriorities("helmod_recipe-edition-panel.apply-block"):element(recipe.beacons):tooltip("helmod_recipe-edition-panel.current-module"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-module-tool", model.id, block.id, recipe.id, "line"):sprite("menu", defines.sprites.expand_right_group.black, defines.sprites.expand_right_group.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriorities("helmod_recipe-edition-panel.apply-line"):element(recipe.beacons):tooltip("helmod_recipe-edition-panel.current-module"))) + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-module-tool", model.id, block.id, recipe.id, "erase"):sprite("menu", defines.sprites.eraser.black, defines.sprites.eraser.black):style("helmod_button_menu_sm"):tooltip(GuiTooltipPriority("helmod_recipe-edition-panel.module-clear"):element(beacon.module_priority))) + + ---actived modules panel + local module_table = GuiElement.add(tool_panel, GuiTable("modules"):column(6):style("helmod_table_recipe_modules")) + local control_info = "module-remove" + for module, count in pairs(beacon.modules) do + local module_cell = GuiElement.add(module_table, GuiFlowH("module-cell", module)) + local tooltip = GuiTooltipModule("tooltip.remove-module"):element({type="item", name=module}):withControlInfo(control_info) + GuiElement.add(module_cell, GuiButtonSelectSprite(self.classname, "beacon-module-remove", model.id, block.id, recipe.id, module):sprite("item", module):tooltip(tooltip)) + GuiElement.add(module_cell, GuiLabel("module-amount"):caption({"", "x", count})) + end + end +end + +------------------------------------------------------------------------------- +---Update modules information +---@param event LuaEvent +function RecipeEdition:updateBeaconModules(event) + if not(self:isOpened()) then return end + local tool_panel, module_panel = self:getBeaconModulePanel() + local model, block, recipe = self:getParameterObjects() + if recipe ~= nil then + + module_panel.clear() + + local beacon_switch_priority = User.getParameter("beacon_switch_priority") + local element_state = "left" + if beacon_switch_priority == true then element_state = "right" end + local factory_switch_module = GuiElement.add(module_panel, GuiSwitch(self.classname, "beacon-switch-module", model.id, block.id, recipe.id):state(element_state):leftLabel({"helmod_recipe-edition-panel.selection-modules"}):rightLabel({"helmod_label.priority-modules"})) + if beacon_switch_priority == true then + ---module priority + self:updateBeaconModulesPriority(module_panel) + else + ---module selector + self:updateBeaconModulesSelector(module_panel) + end + end +end + +------------------------------------------------------------------------------- +---Update modules priority +---@param beacon_module_panel LuaGuiElement +function RecipeEdition:updateBeaconModulesPriority(beacon_module_panel) + local model, block, recipe = self:getParameterObjects() + local beacon = ModelBuilder.getCurrentBeacon(recipe) + ---module priority + local beacon_module_priority = User.getParameter("beacon_module_priority") or 1 + local priority_modules = User.getParameter("priority_modules") or {} + + ---configuration select + local tool_action_panel2 = GuiElement.add(beacon_module_panel, GuiFlowH("tool-action2")) + tool_action_panel2.style.horizontal_spacing = 10 + tool_action_panel2.style.bottom_padding = 10 + + local tool_panel1 = GuiElement.add(tool_action_panel2, GuiFlowH("tool1")) + tool_panel1.style.horizontal_spacing = tool_spacing + local button_style = "helmod_button_small_bold" + GuiElement.add(tool_panel1, GuiButton("HMPreferenceEdition", "OPEN", "priority_module"):sprite("menu", defines.sprites.process.black, defines.sprites.process.black):style("helmod_button_menu_sm"):tooltip({"helmod_button.preferences"})) + GuiElement.add(tool_panel1, GuiButton(self.classname, "beacon-module-priority-apply", model.id, block.id, recipe.id):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm"):tooltip({"helmod_recipe-edition-panel.apply-priority"})) + + local tool_panel2 = GuiElement.add(tool_action_panel2, GuiTable("tool2"):column(6)) + for i, priority_module in pairs(priority_modules) do + local button_style2 = button_style + if beacon_module_priority == i then button_style2 = "helmod_button_small_bold_selected" end + GuiElement.add(tool_panel2, GuiButton(self.classname, "beacon-module-priority-select", model.id, block.id, recipe.id, i):caption(i):style(button_style2)) + end + + ---module priority info + local priority_table_panel = GuiElement.add(beacon_module_panel, GuiTable("module-priority-table"):column(2)) + if priority_modules[beacon_module_priority] ~= nil then + local control_info = "module-add" + for index, element in pairs(priority_modules[beacon_module_priority]) do + local color = nil + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}):withControlInfo(control_info) + local module = ItemPrototype(element.name) + if Player.checkBeaconLimitationModule(beacon, recipe, module:native()) == false then + if (module:native().limitation_message_key ~= nil) and (module:native().limitation_message_key ~= "") then + tooltip = {"item-limitation."..module:native().limitation_message_key} + else + tooltip = "" + end + color = GuiElement.color_button_rest + end + GuiElement.add(priority_table_panel, GuiButtonSelectSprite(self.classname, "beacon-module-select", model.id, block.id, recipe.id):sprite("entity", element.name):color(color):index(index):tooltip(tooltip)) + GuiElement.add(priority_table_panel, GuiLabel("priority-value", index):caption({"", "x", element.value})) + end + end +end + +------------------------------------------------------------------------------- +---Update modules selector +---@param beacon_module_panel LuaGuiElement +function RecipeEdition:updateBeaconModulesSelector(beacon_module_panel) + local model, block, recipe = self:getParameterObjects() + local beacon = ModelBuilder.getCurrentBeacon(recipe) + + local module_scroll = GuiElement.add(beacon_module_panel, GuiScroll("module-selector-scroll")) + module_scroll.style.maximal_height = 118 + local module_table_panel = GuiElement.add(module_scroll, GuiTable("module-selector-table"):column(6)) + for k, element in pairs(Player.getModules()) do + local control_info = "module-add" + local tooltip = GuiTooltipModule("tooltip.add-module"):element({type="item", name=element.name}):withControlInfo(control_info) + local module = ItemPrototype(element.name) + if Player.checkBeaconLimitationModule(beacon, recipe, module:native()) == true then + GuiElement.add(module_table_panel, GuiButtonSelectSprite(self.classname, "beacon-module-select", model.id, block.id, recipe.id):sprite("entity", element.name):tooltip(tooltip)) + end + end +end + +------------------------------------------------------------------------------- +---Update header +---@param event LuaEvent +function RecipeEdition:updateHeader(event) + self:updateObjectInfo(event) +end + +------------------------------------------------------------------------------- +---Update information +---@param event LuaEvent +function RecipeEdition:updateObjectInfo(event) + local info_panel = self:getObjectInfoPanel() + local model, block, recipe = self:getParameterObjects() + if block ~= nil and recipe ~= nil then + info_panel.clear() + + local panel = GuiElement.add(info_panel, GuiFlowH("options_panel")) + panel.style.horizontally_stretchable = true + + local left_panel = GuiElement.add(panel, GuiFlowH("left_panel")) + + local right_panel = GuiElement.add(panel, GuiFlowH(right_name)) + right_panel.style.horizontal_spacing = 10 + right_panel.style.horizontally_stretchable = true + right_panel.style.horizontal_align = "right" + + + local group_sroll = GuiElement.add(right_panel, GuiFlowH("group_sroll")) + group_sroll.style.horizontal_spacing = 2 + + local recipe_edition_scroll_groups = self:getRecipeEditionScrollGroups() + if recipe_edition_scroll_groups == true then + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "false"):sprite("menu", defines.sprites.two_rows.black, defines.sprites.two_rows.black):style("helmod_button_menu_sm")) + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "true"):sprite("menu", defines.sprites.three_rows.black, defines.sprites.three_rows.black):style("helmod_button_menu_sm_selected")) + else + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "false"):sprite("menu", defines.sprites.two_rows.black, defines.sprites.two_rows.black):style("helmod_button_menu_sm_selected")) + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "true"):sprite("menu", defines.sprites.three_rows.black, defines.sprites.three_rows.black):style("helmod_button_menu_sm")) + end + + local recipe_prototype = RecipePrototype(recipe) + local recipe_table = GuiElement.add(left_panel, GuiTable("list-data"):column(4)) + recipe_table.style.horizontally_stretchable = false + recipe_table.style.horizontal_spacing = 10 + recipe_table.vertical_centering = false + + GuiElement.add(recipe_table, GuiLabel("header-recipe"):caption({"helmod_result-panel.col-header-recipe"})) + GuiElement.add(recipe_table, GuiLabel("header-duration"):caption({"helmod_result-panel.col-header-duration"})) + GuiElement.add(recipe_table, GuiLabel("header-products"):caption({"helmod_result-panel.col-header-products"})) + GuiElement.add(recipe_table, GuiLabel("header-ingredients"):caption({"helmod_result-panel.col-header-ingredients"})) + local cell_recipe = GuiElement.add(recipe_table, GuiFrameH("recipe", recipe.id):style(helmod_frame_style.hidden)) + GuiElement.add(cell_recipe, GuiCellRecipe(self.classname, "do_noting"):element(recipe):tooltip("helmod_common.recipe"):color("gray")) + + + ---duration + local cell_duration = GuiElement.add(recipe_table, GuiFrameH("duration", recipe.id):style(helmod_frame_style.hidden)) + local element_duration = {name = "helmod_button_menu_flat", hovered = defines.sprites.time.white, sprite = defines.sprites.time.white , count = recipe_prototype:getEnergy(recipe.factory),localised_name = "helmod_label.duration"} + GuiElement.add(cell_duration, GuiCellProduct(self.classname, "do_noting"):element(element_duration):tooltip("tooltip.product"):color("gray")) + + ---products + local cell_products = GuiElement.add(recipe_table, GuiTable("products", recipe.id):column(3):style("helmod_table_element")) + local lua_products = recipe_prototype:getProducts(recipe.factory) + if lua_products ~= nil then + for index, lua_product in pairs(lua_products) do + local product_prototype = Product(lua_product) + local product = product_prototype:clone() + product.count = product_prototype:getElementAmount() + GuiElement.add(cell_products, GuiCellProductSm(self.classname, "do_noting"):element(product):tooltip("tooltip.product"):index(index):color(GuiElement.color_button_none)) + end + end + + ---ingredients + local cell_ingredients = GuiElement.add(recipe_table, GuiTable("ingredients", recipe.id):column(5):style("helmod_table_element")) + local lua_ingredients = recipe_prototype:getIngredients(recipe.factory) + if lua_ingredients ~= nil then + for index, lua_ingredient in pairs(lua_ingredients) do + local ingredient_prototype = Product(lua_ingredient) + local ingredient = ingredient_prototype:clone() + ingredient.count = ingredient_prototype:getElementAmount() + GuiElement.add(cell_ingredients, GuiCellProductSm(self.classname, "do_noting"):element(ingredient):tooltip("tooltip.ingredient"):index(index):color(GuiElement.color_button_add)) + end + end + + local tablePanel = GuiElement.add(info_panel, GuiTable("table-input"):column(2)) + GuiElement.add(tablePanel, GuiLabel("label-production"):caption({"helmod_recipe-edition-panel.production"})) + GuiElement.add(tablePanel, GuiTextField(self.classname, "recipe-update", model.id, block.id, recipe.id):text(Format.formatNumberElement((recipe.production or 1)*100)):style("helmod_textfield")) + + end +end \ No newline at end of file diff --git a/helmod/edition/RuleEdition.lua b/helmod/edition/RuleEdition.lua new file mode 100644 index 00000000..9a331e40 --- /dev/null +++ b/helmod/edition/RuleEdition.lua @@ -0,0 +1,147 @@ +------------------------------------------------------------------------------- +---Class to build rule edition dialog +---@class RuleEdition +RuleEdition = newclass(Form) + +------------------------------------------------------------------------------- +---On initialization +function RuleEdition:onInit() + self.panelCaption = ({"helmod_rule-edition-panel.title"}) + self.parameterLast = string.format("%s_%s",self.classname,"last") +end + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function RuleEdition:onStyle(styles, width_main, height_main) + styles.flow_panel = { + minimal_height = 500, + maximal_height = height_main, + } +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function RuleEdition:onUpdate(event) + self:updateRule(event) + self:updateAction(event) +end + +local rule_mod = nil +local rule_name = nil +local rule_category = nil +local rule_type = nil +------------------------------------------------------------------------------- +---Update rule +---@param event LuaEvent +function RuleEdition:updateRule(event) + local rule_panel = self:getFramePanel("rule_panel") + rule_panel.clear() + local rule_table = GuiElement.add(rule_panel, GuiTable("list-data"):column(2):style("helmod_table_rule")) + + ---mod + local mod_list = {} + for name, version in pairs(game.active_mods) do + table.insert(mod_list, name) + end + if rule_mod == nil then rule_mod = mod_list[1] end + GuiElement.add(rule_table, GuiLabel("label-mod"):caption({"helmod_rule-edition-panel.mod"})) + GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "mod"):items(mod_list, rule_mod)) + + ---name + local helmod_rule_manes = {} + for name,rule in pairs(helmod_rules) do + table.insert(helmod_rule_manes,name) + end + if rule_name == nil then rule_name = helmod_rule_manes[1] end + GuiElement.add(rule_table, GuiLabel("label-name"):caption({"helmod_rule-edition-panel.name"})) + GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "name"):items(helmod_rule_manes, rule_name)) + + ---category + local helmod_rule_categories = {} + for name,rule in pairs(helmod_rules[rule_name].categories) do + table.insert(helmod_rule_categories,name) + end + if rule_category == nil then rule_category = helmod_rule_categories[1] end + GuiElement.add(rule_table, GuiLabel("label-category"):caption({"helmod_rule-edition-panel.category"})) + GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "category"):items(helmod_rule_categories, rule_category)) + + ---type + local helmod_rule_types = helmod_rules[rule_name].categories[rule_category] + if rule_type == nil then rule_type = helmod_rule_types[1] end + GuiElement.add(rule_table, GuiLabel("label-type"):caption({"helmod_rule-edition-panel.type"})) + GuiElement.add(rule_table, GuiDropDown(self.classname, "dropdown", "type"):items(helmod_rule_types, rule_type)) + + GuiElement.add(rule_table, GuiLabel("label-value"):caption({"helmod_rule-edition-panel.value"})) + GuiElement.add(rule_table, GuiButton("choose", "value"):choose("entity")) + + GuiElement.add(rule_table, GuiLabel("label-excluded"):caption({"helmod_rule-edition-panel.excluded"})) + local checkbox = GuiElement.add(rule_table, GuiCheckBox("excluded"):state(false)) + if helmod_rules[rule_name].excluded_only then + checkbox.state=true + checkbox.enabled=false + end +end + +------------------------------------------------------------------------------- +---Update action +---@param event LuaEvent +function RuleEdition:updateAction(event) + local action_panel = self:getFramePanel("action_panel") + action_panel.clear() + local action_panel = GuiElement.add(action_panel, GuiTable("table_action"):column(2)) + GuiElement.add(action_panel, GuiButton(self.classname, "save"):caption({"helmod_button.save"})) +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function RuleEdition:onEvent(event) + if User.isAdmin() then + if event.action == "dropdown" then + if event.item1 == "mod" then + rule_mod = GuiElement.getDropdownSelection(event.element) + end + if event.item1 == "name" then + rule_name = GuiElement.getDropdownSelection(event.element) + end + if event.item1 == "category" then + rule_category = GuiElement.getDropdownSelection(event.element) + end + if event.item1 == "type" then + rule_type = GuiElement.getDropdownSelection(event.element) + end + self:updateRule(event) + end + + if event.action == "save" then + local rule_panel = self:getFramePanel("rule_panel") + local rule_table = rule_panel["list-data"] + + local rule_value = rule_table["choose=value"].elem_value + local rule_excluded = rule_table["excluded"].state + + if rule_value ~= nil then + if rule_type == "entity-type" then + rule_value = EntityPrototype(rule_value):getType() + end + if rule_type == "entity-group" then + rule_value = EntityPrototype(rule_value):native().group.name + end + if rule_type == "entity-subgroup" then + rule_value = EntityPrototype(rule_value):native().subgroup.name + end + else + rule_value = "all" + end + local rule = Model.newRule(rule_mod, rule_name, rule_category, rule_type, rule_value, rule_excluded, #Model.getRules()) + local rules = Model.getRules() + table.insert(rules, rule) + self:close() + Controller:send("on_gui_refresh", event) + end + end +end \ No newline at end of file diff --git a/helmod/graphics/gui.png b/helmod/graphics/gui.png new file mode 100644 index 00000000..57f99070 Binary files /dev/null and b/helmod/graphics/gui.png differ diff --git a/helmod/graphics/help/admin-tab.png b/helmod/graphics/help/admin-tab.png new file mode 100644 index 00000000..d3b94960 Binary files /dev/null and b/helmod/graphics/help/admin-tab.png differ diff --git a/helmod/graphics/help/compute-order.png b/helmod/graphics/help/compute-order.png new file mode 100644 index 00000000..b084a356 Binary files /dev/null and b/helmod/graphics/help/compute-order.png differ diff --git a/helmod/graphics/help/filter-panel.png b/helmod/graphics/help/filter-panel.png new file mode 100644 index 00000000..0a213a96 Binary files /dev/null and b/helmod/graphics/help/filter-panel.png differ diff --git a/helmod/graphics/help/getting-start.png b/helmod/graphics/help/getting-start.png new file mode 100644 index 00000000..b0f24e41 Binary files /dev/null and b/helmod/graphics/help/getting-start.png differ diff --git a/helmod/graphics/help/mod-settings-map.png b/helmod/graphics/help/mod-settings-map.png new file mode 100644 index 00000000..c8b8ad55 Binary files /dev/null and b/helmod/graphics/help/mod-settings-map.png differ diff --git a/helmod/graphics/help/mod-settings-player.png b/helmod/graphics/help/mod-settings-player.png new file mode 100644 index 00000000..1ca7881b Binary files /dev/null and b/helmod/graphics/help/mod-settings-player.png differ diff --git a/helmod/graphics/help/preferences-fluids-logistic.png b/helmod/graphics/help/preferences-fluids-logistic.png new file mode 100644 index 00000000..2ce34696 Binary files /dev/null and b/helmod/graphics/help/preferences-fluids-logistic.png differ diff --git a/helmod/graphics/help/preferences-general.png b/helmod/graphics/help/preferences-general.png new file mode 100644 index 00000000..ea496b92 Binary files /dev/null and b/helmod/graphics/help/preferences-general.png differ diff --git a/helmod/graphics/help/preferences-items-logistic.png b/helmod/graphics/help/preferences-items-logistic.png new file mode 100644 index 00000000..cb6b81fa Binary files /dev/null and b/helmod/graphics/help/preferences-items-logistic.png differ diff --git a/helmod/graphics/help/preferences-module-priority.png b/helmod/graphics/help/preferences-module-priority.png new file mode 100644 index 00000000..50a91324 Binary files /dev/null and b/helmod/graphics/help/preferences-module-priority.png differ diff --git a/helmod/graphics/help/preferences-ui.png b/helmod/graphics/help/preferences-ui.png new file mode 100644 index 00000000..d9c149c2 Binary files /dev/null and b/helmod/graphics/help/preferences-ui.png differ diff --git a/helmod/graphics/help/production-block.png b/helmod/graphics/help/production-block.png new file mode 100644 index 00000000..00cd7ae3 Binary files /dev/null and b/helmod/graphics/help/production-block.png differ diff --git a/helmod/graphics/help/production-edition.png b/helmod/graphics/help/production-edition.png new file mode 100644 index 00000000..ead60445 Binary files /dev/null and b/helmod/graphics/help/production-edition.png differ diff --git a/helmod/graphics/help/production-line.png b/helmod/graphics/help/production-line.png new file mode 100644 index 00000000..16fc2e2c Binary files /dev/null and b/helmod/graphics/help/production-line.png differ diff --git a/helmod/graphics/help/properties-panel.png b/helmod/graphics/help/properties-panel.png new file mode 100644 index 00000000..ec6182a3 Binary files /dev/null and b/helmod/graphics/help/properties-panel.png differ diff --git a/helmod/graphics/help/quick-start.png b/helmod/graphics/help/quick-start.png new file mode 100644 index 00000000..49c0ed0c Binary files /dev/null and b/helmod/graphics/help/quick-start.png differ diff --git a/helmod/graphics/help/recipe-editor-beacon.png b/helmod/graphics/help/recipe-editor-beacon.png new file mode 100644 index 00000000..3702f8a6 Binary files /dev/null and b/helmod/graphics/help/recipe-editor-beacon.png differ diff --git a/helmod/graphics/help/recipe-editor-factory.png b/helmod/graphics/help/recipe-editor-factory.png new file mode 100644 index 00000000..d0361118 Binary files /dev/null and b/helmod/graphics/help/recipe-editor-factory.png differ diff --git a/helmod/graphics/help/recipe-editor-info.png b/helmod/graphics/help/recipe-editor-info.png new file mode 100644 index 00000000..b25e968e Binary files /dev/null and b/helmod/graphics/help/recipe-editor-info.png differ diff --git a/helmod/graphics/help/recipe-editor-module-priority.png b/helmod/graphics/help/recipe-editor-module-priority.png new file mode 100644 index 00000000..f313952d Binary files /dev/null and b/helmod/graphics/help/recipe-editor-module-priority.png differ diff --git a/helmod/graphics/help/recipe-editor-module-selection.png b/helmod/graphics/help/recipe-editor-module-selection.png new file mode 100644 index 00000000..0e1ab0b1 Binary files /dev/null and b/helmod/graphics/help/recipe-editor-module-selection.png differ diff --git a/helmod/graphics/help/recipe-editor-tools.png b/helmod/graphics/help/recipe-editor-tools.png new file mode 100644 index 00000000..c4c878c2 Binary files /dev/null and b/helmod/graphics/help/recipe-editor-tools.png differ diff --git a/helmod/graphics/help/recipe-editor.png b/helmod/graphics/help/recipe-editor.png new file mode 100644 index 00000000..77344929 Binary files /dev/null and b/helmod/graphics/help/recipe-editor.png differ diff --git a/helmod/graphics/help/recipe-selector-all.png b/helmod/graphics/help/recipe-selector-all.png new file mode 100644 index 00000000..267245e1 Binary files /dev/null and b/helmod/graphics/help/recipe-selector-all.png differ diff --git a/helmod/graphics/help/recipe-selector-helmod.png b/helmod/graphics/help/recipe-selector-helmod.png new file mode 100644 index 00000000..0f88ceeb Binary files /dev/null and b/helmod/graphics/help/recipe-selector-helmod.png differ diff --git a/helmod/graphics/help/recipe-selector.png b/helmod/graphics/help/recipe-selector.png new file mode 100644 index 00000000..592fd11d Binary files /dev/null and b/helmod/graphics/help/recipe-selector.png differ diff --git a/helmod/graphics/help/solver-debug-panel.png b/helmod/graphics/help/solver-debug-panel.png new file mode 100644 index 00000000..acc3d7d7 Binary files /dev/null and b/helmod/graphics/help/solver-debug-panel.png differ diff --git a/helmod/graphics/help/unittest-panel.png b/helmod/graphics/help/unittest-panel.png new file mode 100644 index 00000000..dfafde1c Binary files /dev/null and b/helmod/graphics/help/unittest-panel.png differ diff --git a/helmod/graphics/icon_svg_builder.lua b/helmod/graphics/icon_svg_builder.lua new file mode 100644 index 00000000..78e63c67 --- /dev/null +++ b/helmod/graphics/icon_svg_builder.lua @@ -0,0 +1,1471 @@ +--- Icon builder use svg and inkscape +--- build=false skip to not rebuild Icon +--- paths = {{background},{foreground}} +--- -> put a list of path or polygon +--- -> for path {d="...",transform="rotate(-45.001 2.5 2.5)"} transform is optionnal +--- -> for polygon {p="...",transform="scale(0.5)"} transform is optionnal +--- at the end file you can change some parameter +--- -> for rebuild all change this at true: local force_build = false +--- -> for locate inkscape change: local inkscape = "E:\\Autre\\inkscape\\bin\\inkscape" +local sprites = { + { + name="add_table", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M7 5h-2v2h-2v-2h-2v-2h2v-2h2v2h2v2z"}, + {d="M2 8v7h13v-12h-7v3h2v2h-3v-2h-1v2h-4zm4 6h-3v-2h3v2zm0-3h-3v-2h3v2zm4 3h-3v-2h3v2zm0-3h-3v-2h3v2zm4 3h-3v-2h3v2zm0-3h-3v-2h3v2zm0-3h-3v-2h3v2z"} + }}, + build=false + } + ,{ + name="arrow_bottom", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M3.207,7.293,7,11.086V1H9V11.086l3.793-3.793,1.414,1.414L8,14.914,1.793,8.707Z"} + }}, + build=false + } + ,{ + name="arrow_left", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="rotate(90 8 8)", d="M3.207,7.293,7,11.086V1H9V11.086l3.793-3.793,1.414,1.414L8,14.914,1.793,8.707Z"} + }}, + build=false + } + ,{ + name="arrow_top", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="rotate(180 8 8)", d="M3.207,7.293,7,11.086V1H9V11.086l3.793-3.793,1.414,1.414L8,14.914,1.793,8.707Z"} + }}, + build=false + } + ,{ + name="arrow_right", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="rotate(-90 8 8)", d="M3.207,7.293,7,11.086V1H9V11.086l3.793-3.793,1.414,1.414L8,14.914,1.793,8.707Z"} + }}, + build=false + } + ,{ + name="calculator", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M6 6h1v1h-1v-1zm2 5h1v-1h-1v1zm0 2h1v-1h-1v1zm-2 0h1v-1h-1v1zm0-2h1v-1h-1v1zm0-2h1v-1h-1v1zm4 4h1v-3h-1v3zm-4-8h5v-2h-5v2zm2 4h1v-1h-1v1zm2-2h1v-1h-1v1zm3-5v12l-1 1h-7l-1-1v-12l1-1h7l1 1zm-1 .414l-.414-.414h-6.172l-.414.414v11.172l.414.414h6.172l.414-.414v-11.172zm-2 6.586h1v-1h-1v1zm-2-2h1v-1h-1v1z"} + }}, + build=false + } + ,{ + name="check_dot", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14 8c0 3.314-2.686 6-6 6-3.313 0-6-2.686-6-6 0-3.313 2.687-6 6-6 3.314 0 6 2.687 6 6z"} + }}, + build=false + } + ,{ + name="close", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M9.414 8l4.543 4.543-1.414 1.414L8 9.414l-4.543 4.543-1.414-1.414L6.586 8 2.043 3.457l1.414-1.414L8 6.586l4.543-4.543 1.414 1.414L9.414 8z"} + }}, + build=false + } + ,{ + name="plugged", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14.718 1.99l-.707-.707-2.16 2.159c-1.155-.798-2.837-.698-3.851.315l-2.828 2.829c-.567.566-.879 1.32-.879 2.121 0 .631.2 1.229.56 1.733l-2.156 2.156.707.707 2.156-2.157c.504.359 1.102.56 1.733.56.801 0 1.555-.313 2.121-.879l2.828-2.827c1.049-1.049 1.15-2.683.318-3.853l2.158-2.157zm-6.011 8.131c-.756.756-2.072.756-2.828 0-.378-.378-.586-.88-.586-1.414s.208-1.036.586-1.414l1.061-1.061 2.828 2.828-1.061 1.061zm2.828-2.828l-1.061 1.061-2.828-2.829 1.061-1.061c.756-.755 2.072-.755 2.828 0 .78.78.78 2.049 0 2.829z"} + }}, + build=false + } + ,{ + name="unplugged", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M8.707 8.707l-1.414 1.414-1.414-1.414 1.414-1.414-.707-.707-1.414 1.414-.708-.707-1.414 1.414c-1.049 1.049-1.15 2.683-.318 3.854l-1.45 1.45.707.707 1.449-1.45c.518.368 1.123.56 1.732.56.768 0 1.537-.292 2.122-.877l1.414-1.415-.706-.708 1.414-1.414-.707-.707zm-2.121 3.536c-.779.778-2.044.779-2.823.004l-.01-.01c-.775-.781-.774-2.045.004-2.824l.707-.707 2.829 2.828-.707.709zm8.132-10.253l-.707-.707-1.453 1.452c-1.156-.797-2.837-.698-3.851.315l-1.414 1.414 4.242 4.243 1.414-1.414c1.049-1.049 1.15-2.682.318-3.853l1.451-1.45zm-2.476 4.596l-.707.707-2.828-2.829.707-.707c.756-.755 2.072-.755 2.828 0 .78.78.78 2.049 0 2.829z"} + }}, + build=false + } + ,{ + name="copy", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M11.207,4H10.19L7.2,1H2V12H6v3h9V7.793ZM11,5.207,13.793,8H11ZM6,11H3V2H6.8L8.81,4H6Zm8,3H7V5h3V9h4Z"} + }}, + build=false + } + ,{ + name="create", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M 5.3295212,10.592386 5.0073231,10.269612 6.1530938,9.1236796 7.2988644,7.9777469 H 5.6577771 4.0166898 V 7.4993046 7.0208623 h 1.6356051 c 0.8995827,0 1.635605,-0.00747 1.635605,-0.01661 0,-0.00914 -0.5131298,-0.5298121 -1.1402884,-1.1570593 L 5.0073231,4.7067439 5.329626,4.383865 5.6519288,4.0609861 6.8259841,5.2348846 C 7.4717145,5.8805288 7.997527,6.4157514 7.9944563,6.4242682 7.9913858,6.4327849 7.8561892,6.5796858 7.6940195,6.7507147 L 7.3991655,7.0616766 V 7.5033199 7.9449633 L 7.7108195,8.2560209 8.0224734,8.5670785 6.8485895,9.7411191 C 6.2029532,10.386842 5.6695335,10.91516 5.6632123,10.91516 c -0.00632,0 -0.1564822,-0.145248 -0.3336911,-0.322774 z"}, + {d="M 8.0222531,4.7065369 V 3.015299 h 0.4784423 0.4784423 v 1.6201131 1.6201132 l -0.073382,0.071125 -0.073382,0.071125 H 8.4273133 8.0222531 Z"}, + {d="M 8.0222531,10.292072 V 8.6008345 h 0.4228095 c 0.3257217,0 0.4228094,-0.00645 0.4228094,-0.028104 0,-0.045027 0.637622,-0.6699823 0.654952,-0.6419415 C 9.569048,8.005582 9.579972,7.920457 9.579972,7.4854536 9.579972,7.0617811 9.576542,7.01826 9.545197,7.0442735 9.5151962,7.0691721 9.4662392,7.0290695 9.1885689,6.7521442 8.8760005,6.4404144 8.8686581,6.4309532 8.9340531,6.4241811 c 0.05942,-0.00615 0.067338,-0.015321 0.067338,-0.077969 0,-0.064046 0.1089177,-0.1798975 1.1126509,-1.1834803 l 1.112651,-1.1124841 0.328151,0.3281514 0.328152,0.3281514 -1.140385,1.1405465 c -0.627212,0.6273005 -1.1403854,1.1480208 -1.1403854,1.1571562 0,0.00914 0.7560494,0.01661 1.6801114,0.01661 h 1.680111 v 0.4784423 0.4784423 h -1.680111 c -0.924062,0 -1.6801114,0.00747 -1.6801114,0.01661 0,0.00914 0.5107554,0.5274379 1.1350134,1.1517837 l 1.135013,1.1351735 -0.322876,0.322301 -0.322877,0.3223 -1.107073,-1.1069071 C 9.5105352,9.2102084 9.0048789,8.7121001 8.9957449,8.7121001 c -0.00913,0 -0.016607,0.7360223 -0.016607,1.6356049 V 11.98331 H 8.5006954 8.0222531 Z"} + }}, + build=false + } + ,{ + name="download_document", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M10.207 1H6v1h3v4h4v8H4V8.931L3 7.927V15h11V4.793L10.207 1zM10 5V2.207L12.793 5H10z"}, + {d="M5 6.063V1H4v5.081l-2.148-2.14-.707.707L4.485 8l3.352-3.352-.707-.707L5 6.063z"} + }}, + build=false + } + ,{ + name="edit_document", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M11.641 3H6.415l1 1H11v3h3v7H6V9.413l-1-1V14c0 1 .965 1 .965 1h8c1 0 1.035-1 1.035-1V6l-3.359-3z"}, + {d="M4.586 3.171h2.828v5.656H4.586z",transform="rotate(-45.001 6 6)"}, + {d="M1.086 1.793h2.828v1.414H1.086z",transform="rotate(-45.001 2.5 2.5)"}, + {d="M10 8v1.999L8 10"} + }}, + build=false + } + ,{ + name="education", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M12 7.798v2.39c0 1.119-1.402 2.308-4 2.308s-4-1.188-4-2.308v-2.39l4 1.25 4-1.25zM2 7.173V12.5h1V7.485l-1-.312zm6-3.694L1 5.813 8 8l7-2.188-7-2.333z"} + }}, + build=false + } + ,{ + name="eraser", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15.046 6.941L9.532 1.414 1.296 9.625c-.478.497-.478 1.245.013 1.754L4.08 14.05H12v-1H9.085l5.961-6.109zm-1.404.008l-4.71 4.826L4.75 7.594l4.78-4.766 4.112 4.121zm-9.159 6.102l-2.467-2.378c-.105-.109-.105-.244-.007-.346L4.042 8.3l4.191 4.191-.546.56H4.483z"} + }}, + build=false + } + ,{ + name="event", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="m 4.037968,14.949267 c 0.1248972,-0.244249 2.9518854,-5.9400233 2.9518854,-5.9474145 0,-0.00536 -0.8928974,-0.00974 -1.9842164,-0.00974 -1.0913191,0 -1.9842165,-0.00407 -1.9842165,-0.00904 0,-0.00497 0.8969597,-1.8029402 1.9932438,-3.9954904 L 7.007908,1.0011274 H 9.9977329 12.987558 L 9.9842165,4.0045096 6.9808749,7.0078918 H 9.9752023 12.96953 L 8.9740699,11.003382 4.97861,14.998873 H 4.4956062 4.0126023 Z"} + }}, + build=false + } + ,{ + name="expand_right", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M 5.8692017,11.733021 5.3518749,11.215694 6.9596073,9.6078471 8.5673397,8 6.9595484,6.3920939 5.3517572,4.784188 5.8748475,4.261453 6.3979378,3.7387179 8.5285643,5.8693444 10.659191,7.9999708 8.5340898,10.125159 c -1.1688057,1.168854 -2.1301547,2.125189 -2.1363312,2.125189 -0.00618,0 -0.2440272,-0.232797 -0.5285569,-0.517327 z"} + }}, + build=false + } + ,{ + name="expand_right_group", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M3.834 10.896l2.896-2.896-2.896-2.897.707-.707 3.604 3.604-3.604 3.604-.707-.708zm5.082.708l3.604-3.604-3.604-3.604-.707.707 2.896 2.897-2.896 2.896.707.708z"} + }}, + build=false + } + ,{ + name="favorite", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M10.614 9.133l1.886 5.867-4.5-4-4.5 4 1.887-5.867-4.387-3.133h5.394l1.607-5 1.606 5h5.393l-4.386 3.133z"} + }}, + build=false + } + ,{ + name="filter", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M10 15h-4v-6.319l-5-6v-1.681h14v1.681l-5 6v6.319zm-3-1h2v-5.681l5-6v-.319h-12v.319l5 6v5.681z"} + }}, + build=false + } + ,{ + name="gauge_round", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14.936 12c-.153-2-1.596-4.598-3.662-5.704l-.371 1.162a5.436 5.436 0 0 1 2.217 4.379c0 .055-.006.163-.008.163h1.824zM8.554 6.467l.683-.883a7.004 7.004 0 0 0-1.229-.113c-3.693 0-6.704 2.88-6.93 6.517 0 0 .841.037.841-.016 0-3.006 2.757-5.582 5.762-5.582.298.001.588.031.873.077zM11.04 4.511l-.087-.046-3.542 5.137a1.386 1.386 0 1 0 1.663 1.357c0-.221-.058-.428-.149-.613l2.115-5.835z"} + }}, + build=false + } + ,{ + name="graph_left_to_right", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15 2l-1-1h-3l-1 1v1.441l-4 2V5L5 4H2L1 5v5l1 1h3l1-1v-.441l4 2V13l1 1h3l1-1v-3l-.5-.5.5-.5V6l-.5-.5.5-.5V2zM5 10H2V5h3v5zm5 0v.441l-4-2V8h4v1l.5.5-.5.5zm0-4v1H6v-.441l4-2V5l.5.5-.5.5zm4 7h-3v-3h3v3zm0-4h-3V6h3v3zm0-4h-3V2h3v3z"} + }}, + build=false + } + ,{ + name="graph_top_to_bottom", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14 10h-1.441l-2-4H11l1-1V2l-1-1H6L5 2v3l1 1h.441l-2 4H3l-1 1v3l1 1h3l.5-.5.5.5h3l.5-.5.5.5h3l1-1v-3l-1-1zM6 5V2h5v3H6zm0 9H3v-3h3v3zm.5-3.5L6 10h-.441l2-4H8v4H7l-.5.5zM10 14H7v-3h3v3zm.5-3.5L10 10H9V6h.441l2 4H11l-.5.5zM14 14h-3v-3h3v3z"} + }}, + build=false + } + ,{ + name="graph_bottom_to_top", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14 1h-3l-.5.5L10 1H7l-.5.5L6 1H3L2 2v3l1 1h1.441l2 4H6l-1 1v3l1 1h5l1-1v-3l-1-1h-.441l2-4H14l1-1V2l-1-1zM7 2h3v3H7V2zM3 5V2h3v3H3zm2.559 1H6l.5-.5.5.5h1v4h-.441l-2-4zM11 11v3H6v-3h5zm-1.559-1H9V6h1l.5-.5.5.5h.441l-2 4zM14 5h-3V2h3v3z"} + }}, + build=false + } + ,{ + name="home", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M.646,8.646l.708.708L2,8.707V15H7V10H9v5h5V8.707l.647.647.706-.708L8,1.293ZM13,14H10V9H6v5H3V7.707l5-5,5,5Z"} + }}, + build=false + } + ,{ + name="lock", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M12 6V4.75c0-2.206-1.794-4-4-4s-4 1.794-4 4V6H2v9h12V6h-2zM5 4.75c0-1.654 1.346-3 3-3s3 1.346 3 3V6H5V4.75zM13 14H3V7h10v7zM6.75 9.25a1.25 1.25 0 0 1 2.5 0c0 .512-.309.95-.75 1.143V13h-1v-2.607a1.248 1.248 0 0 1-.75-1.143z"} + }}, + build=false + } + ,{ + name="pen_four", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15 4L5 14l-3-3L12 1h3v3zM1 15h3l-3-3v3z"} + }}, + build=false + } + ,{ + name="pinned_item", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M9.768 4.111l1.414 1.414-3.536 3.536-1.414-1.415 3.536-3.535zm-1.414 7.071l.707.707-.707.707-2.121-2.121-2.828 2.828-.707-.707 2.828-2.828-2.122-2.122.707-.707.707.707 4.95-4.95 3.536 3.536-4.95 4.95zm2.828-5.657L9.768 4.111 6.232 7.646 7.646 9.06l3.536-3.535z"} + }}, + build=false + } + ,{ + name="process", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M13.8 5.675a3.058 3.058 0 0 0-.012-.947l1.181-.693A4.266 4.266 0 0 0 14.8 3.5a4.563 4.563 0 0 0-.271-.487l-1.318.387a3.015 3.015 0 0 0-.68-.658l.347-1.329A4.421 4.421 0 0 0 11.849 1l-.661 1.2a3.075 3.075 0 0 0-.948.012l-.694-1.177a4.36 4.36 0 0 0-.53.168 4.32 4.32 0 0 0-.487.271l.383 1.315a3.044 3.044 0 0 0-.659.681l-1.33-.347a4.436 4.436 0 0 0-.409 1.03l1.2.66a3.039 3.039 0 0 0 .011.947l-1.181.693a4.294 4.294 0 0 0 .168.531 4.244 4.244 0 0 0 .271.487l1.317-.38a3.019 3.019 0 0 0 .681.658l-.346 1.329a4.454 4.454 0 0 0 1.03.41l.661-1.2a3.076 3.076 0 0 0 .948-.012l.693 1.181a4.272 4.272 0 0 0 .53-.168 4.108 4.108 0 0 0 .486-.271L12.6 7.7a3.041 3.041 0 0 0 .659-.681l1.33.347A4.392 4.392 0 0 0 15 6.335zm-2.169 1.59a2.2 2.2 0 1 1 1.149-2.891 2.2 2.2 0 0 1-1.152 2.891zm-3.917 3.077a2.744 2.744 0 0 0-.331-.795l.768-.984a4 4 0 0 0-.712-.713l-.985.768a2.783 2.783 0 0 0-.8-.331L5.5 7.051A3.9 3.9 0 0 0 5 7a3.9 3.9 0 0 0-.5.051l-.157 1.235a2.783 2.783 0 0 0-.8.331l-.981-.767a4 4 0 0 0-.712.713l.768.984a2.744 2.744 0 0 0-.331.795l-1.236.158A3.9 3.9 0 0 0 1 11a3.9 3.9 0 0 0 .051.5l1.235.154a2.744 2.744 0 0 0 .331.795l-.768.984a4 4 0 0 0 .712.713l.985-.768a2.783 2.783 0 0 0 .8.331l.154 1.24A3.886 3.886 0 0 0 5 15a3.886 3.886 0 0 0 .5-.051l.153-1.235a2.783 2.783 0 0 0 .8-.331l.985.768a4 4 0 0 0 .712-.713l-.768-.984a2.744 2.744 0 0 0 .331-.795l1.236-.159A3.9 3.9 0 0 0 9 11a3.9 3.9 0 0 0-.051-.5zM5 13a2 2 0 1 1 2-2 2 2 0 0 1-2 2zm1-2a1 1 0 1 1-1-1 1 1 0 0 1 1 1zm5.767-6.191a1.1 1.1 0 1 1-1.445-.575 1.1 1.1 0 0 1 1.445.575z"} + }}, + build=false + } + ,{ + name="property", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15,5.5A4.474,4.474,0,0,1,8.571,9.55l-5.01,5.01a1.5,1.5,0,0,1-2.122-2.12L6.45,7.429A4.474,4.474,0,0,1,12.429,1.45L9.636,4.243l2.121,2.121L14.55,3.571A4.462,4.462,0,0,1,15,5.5Z"} + }}, + build=false + } + ,{ + name="push_pin", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M11 9V2H6v7H5v1h3v4h1v-4h3V9h-1zM9 8H7V3h2v5z"} + }}, + build=false + } + ,{ + name="push_pin_unpin", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M7 5v-1h-1v3h-4v1h4v3h1v-1h7v-5h-7zm6 3h-5v-2h5v2z"} + }}, + build=false + } + ,{ + name="run", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M4,2V14l8-6L4,2Z"} + }}, + build=false + } + ,{ + name="run_test", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M13.51 11.459L10 6V4h1V3H6.277l1.667 1L7 4.566V6l-3.51 5.459A1 1 0 0 0 4.332 13h8.337a1 1 0 0 0 .841-1.541zM6.276 9L8 6.291V4h1v2.291L10.724 9H6.276z"}, + {d="M1 1l5 3-5 3V1z"} + }}, + build=false + } + ,{ + name="script", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M13 1H5c-1.103 0-2 .897-2 2v8c-.534 0-1.036.208-1.414.586S1 12.466 1 13s.208 1.036.586 1.414S2.466 15 3 15h7c1.103 0 2-.897 2-2V5h1c1.103 0 2-.897 2-2s-.897-2-2-2zM3 14a.993.993 0 0 1-.707-.293C2.104 13.518 2 13.267 2 13s.104-.518.293-.707A.993.993 0 0 1 3 12h5.267a1.98 1.98 0 0 0 .01 2H3zm8-11v10a1.001 1.001 0 0 1-2 0c0-.267.104-.518.293-.707A.993.993 0 0 1 10 12a.5.5 0 0 0 0-1H4V3c0-.551.449-1 1-1h6.278A1.978 1.978 0 0 0 11 3zm2 1h-1V3c0-.551.449-1 1-1s1 .449 1 1-.449 1-1 1z"} + }}, + build=false + } + ,{ + name="settings", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M9.964 3.257l-.443-.133-.354-2.124h-2.334l-.353 2.121c-.296.093-.58.21-.855.354l-1.75-1.25-1.65 1.65 1.252 1.752-.22.409-.133.443-2.124.354v2.333l2.121.354c.092.296.21.58.354.855l-1.25 1.75 1.65 1.65 1.752-1.252.408.219.444.134.354 2.124h2.333l.354-2.121c.296-.092.58-.21.854-.354l1.75 1.25 1.65-1.65-1.252-1.752.219-.408.134-.444 2.125-.354v-2.334l-2.121-.353c-.092-.296-.21-.58-.354-.854l1.25-1.75-1.65-1.65-1.752 1.252-.409-.221zm.248 4.743c0 1.222-.991 2.212-2.212 2.212-1.222 0-2.212-.991-2.212-2.212s.99-2.212 2.212-2.212c1.222 0 2.212.99 2.212 2.212z"} + }}, + build=false + } + ,{ + name="status_help", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + {d="M9 10h-2v-1c0-1.104.897-2 2-2v-1.797c-.159-.088-.505-.203-1-.203s-.841.115-1 .203v.797h-2v-1c0-1.159 1.262-2 3-2s3 .841 3 2v2c0 1.104-.898 2-2 2v1zm0 1h-2v2h2v-2z"} + },{ + {d="M8 1c-3.866 0-7 3.134-7 7 0 3.865 3.134 7 7 7s7-3.135 7-7c0-3.866-3.134-7-7-7zm1 12h-2v-2h2v2zm2-6c0 1.104-.898 2-2 2v1h-2v-1c0-1.104.897-2 2-2v-1.797c-.159-.088-.505-.203-1-.203s-.841.115-1 .203v.797h-2v-1c0-1.159 1.262-2 3-2s3 .841 3 2v2z"} + }}, + build=false + } + ,{ + name="status_information", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + {d="M7,6H9v7H7ZM7,5H9V3H7Z"} + },{ + {d="M8,1a7,7,0,1,0,7,7A7,7,0,0,0,8,1ZM9,13H7V6H9ZM9,5H7V3H9Z"} + }}, + build=false + } + ,{ + name="time", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M8,8h3V9H7V4H8Zm7,0A7,7,0,1,1,8,1,7.009,7.009,0,0,1,15,8ZM14,8a6,6,0,1,0-6,6A6.006,6.006,0,0,0,14,8Z"} + }}, + build=false + } + ,{ + name="minimize", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M 13,7 V 8 H 3 V 7 Z"} + }}, + build=false + } + ,{ + name="maximize", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M 3,3 V 13 H 13 V 3 Z m 9,9 H 4 V 4 h 8 z"} + }}, + build=false + } + ,{ + name="save", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M6,12H8v3H6ZM15,2V15H12V10H4v5H3L1,13V2A1,1,0,0,1,2,1H14A1,1,0,0,1,15,2ZM13,3H3V7H13Z"} + }}, + build=false + } + ,{ + name="refresh", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15,8A7,7,0,1,1,3.12,3H1V1H7V7H5V4a5,5,0,1,0,5.764-.169l1.107-1.666A6.989,6.989,0,0,1,15,8Z"} + }}, + build=false + } + ,{ + name="upload_document", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M11.207 1H5.85l1 1H10v4h4v8H5V9H4v6h11V4.793L11.207 1zM11 5V2.207L13.793 5H11z"}, + {d="M1.084 4.355l.707.707L4 2.853V8h1V2.978l2.084 2.084.707-.707-3.353-3.354z"} + }}, + build=false + } + ,{ + name="paste", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M12,7V3H9A2,2,0,0,0,5,3H2V14H7v1h7V7ZM5,4H6V3A1,1,0,0,1,8,3V4H9V5H5ZM3,13V4H4V6h6V4h1V7H7v6Zm10,1H8V8h5Z"} + }}, + build=false + } + ,{ + name="factory", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="scale(0.063)", p="43.646,14.684 20.079,14.684 12.767,150.786 50.96,150.786"}, + {transform="scale(0.063)", p="104.316,14.684 80.749,14.684 73.437,150.786 111.629,150.786"}, + {transform="scale(0.063)", d="M121.717,108.13v57.632H0v72.988h253.435V84.781L121.717,108.13z M56.553,215.774H14.872v-27.037h41.681V215.774zM117.223,215.774H75.542v-27.037h41.681V215.774z M177.893,215.774h-41.681v-27.037h41.681V215.774z M177.893,168.927h-41.681v-27.036h41.681V168.927z M238.562,215.774h-41.681v-27.037h41.681V215.774z M238.562,168.927h-41.681v-27.036h41.681V168.927z"} + }}, + build=false + } + ,{ + name="transport", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="scale(0.5)", d="M23,15h2v2h-2V15z M30,16v6h-2c0,1.657-1.343,3-3,3s-3-1.343-3-3h-2c0,1.657-1.343,3-3,3s-3-1.343-3-3h-4c0,1.657-1.343,3-3,3s-3-1.343-3-3H2V8h20v4h4L30,16z M8,22c0-0.551-0.449-1-1-1s-1,0.449-1,1s0.449,1,1,1S8,22.551,8,22z M18,22c0-0.551-0.449-1-1-1s-1,0.449-1,1s0.449,1,1,1S18,22.551,18,22z M20,10H4v10h0.779C5.328,19.39,6.115,19,7,19s1.672,0.39,2.221,1h5.557c0.549-0.61,1.336-1,2.221-1s1.672,0.39,2.221,1H20V10z M26,22c0-0.551-0.449-1-1-1s-1,0.449-1,1s0.449,1,1,1S26,22.551,26,22z M28,16.828L25.172,14H22v6h0.779c0.549-0.61,1.336-1,2.221-1s1.672,0.39,2.221,1H28V16.828z"} + }}, + build=false + } + ,{ + name="database_settings", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M8.949,11.504C8.971,11.337,9,11.173,9,11s-0.029-0.337-0.051-0.504l-1.235-0.154c-0.068-0.285-0.182-0.551-0.331-0.795L8.15,8.562C7.943,8.295,7.705,8.057,7.438,7.85L6.453,8.617C6.21,8.468,5.943,8.355,5.657,8.286L5.504,7.051C5.337,7.03,5.173,7,5,7S4.663,7.03,4.496,7.051L4.343,8.286C4.057,8.355,3.79,8.468,3.547,8.617L2.562,7.85C2.295,8.057,2.057,8.295,1.85,8.562l0.768,0.985c-0.149,0.244-0.263,0.51-0.331,0.795l-1.235,0.154C1.029,10.663,1,10.827,1,11s0.029,0.337,0.051,0.504l1.235,0.154c0.068,0.285,0.182,0.551,0.331,0.795L1.85,13.438c0.207,0.268,0.445,0.506,0.712,0.713l0.985-0.768c0.243,0.148,0.51,0.262,0.796,0.331l0.153,1.235C4.663,14.971,4.827,15,5,15s0.337-0.029,0.504-0.051l0.153-1.235c0.286-0.069,0.553-0.183,0.796-0.331l0.985,0.768c0.267-0.207,0.505-0.445,0.712-0.713l-0.768-0.984c0.149-0.244,0.263-0.51,0.331-0.795L8.949,11.504z M5,13c-1.104,0-2-0.896-2-2s0.896-2,2-2s2,0.896,2,2S6.104,13,5,13z M6,11c0,0.553-0.448,1-1,1s-1-0.447-1-1c0-0.553,0.448-1,1-1S6,10.447,6,11z"}, + {d="M11,1C8.791,1,7,1.896,7,3v3.924l0.438-0.341L8.052,7.06c0.333,0.259,0.632,0.558,0.89,0.889l0.476,0.614L8.719,9.46L9.842,9.6l0.1,0.769c0.032,0.238,0.05,0.4,0.055,0.561C10.318,10.971,10.651,11,11,11c2.209,0,4-0.896,4-2V3C15,1.896,13.209,1,11,1z M11,4.325C9.001,4.325,7.675,3.527,7.675,3S9.001,1.675,11,1.675S14.325,2.473,14.325,3S12.999,4.325,11,4.325z"} + }}, + build=false + } + ,{ + name="database_schema", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M11 1c-2.209 0-4 .896-4 2v2h1v4h2v1.93c.321.041.652.07 1 .07 2.209 0 4-.896 4-2V3c0-1.104-1.791-2-4-2zm0 3.325c-1.999 0-3.325-.798-3.325-1.325S9.001 1.675 11 1.675s3.325.798 3.325 1.325S12.999 4.325 11 4.325z"}, + {d="M10 13v2H7v-2h1v-2H3v2h1v2H1v-2h1v-3h3V8H4V6h3v2H6v2h3v3h1z"} + }}, + build=false + } + ,{ + name="database_test", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M8,8V6h1V5H4v1h1v2l-3.51,5.459C1.063,14.125,1.541,15,2.332,15h8.337c0.791,0,1.269-0.875,0.841-1.541L8,8z M4.276,11L6,8.291V6h1v2.291L8.724,11H4.276z"}, + {d="M15,3v3v3c0,1.089-1.742,1.971-3.908,1.995L9,7.709V7h1V4.247c0.313,0.045,0.641,0.078,1,0.078c1.999,0,3.325-0.798,3.325-1.325S12.999,1.675,11,1.675C9.001,1.675,7.675,2.473,7.675,3c0,0.313,0.477,0.72,1.277,1H7V3c0-0.504,0.385-0.959,1-1.311C8.733,1.271,9.799,1,11,1c1.201,0,2.267,0.271,3,0.689C14.615,2.041,15,2.496,15,3z"} + }}, + build=false + } + ,{ + name="database_method", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M5.041,6.512L1.167,8.471v4.403l4.081,2.57l3.507-2.57V8.471L5.041,6.512z M8.115,12.561l-2.426,1.748v-3.274L8.115,9.56V12.561z M2.265,8.659l2.731-1.387l2.913,1.435L5.2,10.333L2.265,8.659z M1.861,12.456v-3.15l3.059,1.709v3.436L1.861,12.456z"}, + {d="M11,1C8.791,1,7,1.896,7,3v3.415l2.755,1.453v3.018c0.081,0.013,0.158,0.031,0.241,0.042v0c0,0,0.001,0,0.001,0c0.001,0,0.002,0,0.003,0.001v0C10.321,10.971,10.653,11,11,11c2.209,0,4-0.896,4-2V3C15,1.896,13.209,1,11,1z M11,4.325C9.001,4.325,7.675,3.527,7.675,3S9.001,1.675,11,1.675S14.325,2.473,14.325,3S12.999,4.325,11,4.325z"} + }}, + build=false + } + ,{ + name="text_block", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M1 1v14h14V1H1zm13 13H2V2h12v12zm-2-9H9v8H7V5H4V3h8v2z"} + }}, + build=false + } + ,{ + name="pause", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M4,3H7v9H4ZM9,3v9h3V3Z"} + }}, + build=false + } + ,{ + name="checkmark", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M14.707,4.707,6,13.414,1.293,8.707,2.707,7.293,6,10.586l7.293-7.293Z"} + }}, + build=false + } + ,{ + name="column_chart", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M2 1.003v13.997h13v-14l-13 .003zm12 .997v12h-1v-10h-2v10h-1v-6h-2v6h-1v-9h-2v9h-2v-12h11z"} + }}, + build=false + } + ,{ + name="status_ok", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M8,1a7,7,0,1,0,7,7A7,7,0,0,0,8,1ZM6.3,12.389,3.043,9.132,4.457,7.718,6.3,9.561l5.243-5.243,1.414,1.414Z"} + }}, + build=false + } + ,{ + name="list_view", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M1 1v13h14v-13h-14zm13 12h-12v-11h12v11zm-4-8h-6v-1h6v1zm-6 1h8v1h-8v-1zm6 3h-6v-1h6v1zm-6 1h8v1h-8v-1z"} + }}, + build=false + } + ,{ + name="jewel", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="scale(0.174)", d="M90.9,31.2L74,13.3c-0.8-0.8-1.8-1.3-2.9-1.3H20.9c-1.1,0-2.2,0.5-2.9,1.3l-16.9,18c-1.5,1.6-1.4,4,0.1,5.6l42,42c0.8,0.8,1.8,1.2,2.8,1.2s2.1-0.4,2.8-1.2l42-42C92.4,35.3,92.4,32.8,90.9,31.2z M27.4,37l7.4,21.6L13.2,37H27.4z M49.4,20l6.4,10H36.2l6.4-10H49.4z M46,70.3l0-0.2L34.8,37h22.4L46,70.1L46,70.3z M64.6,37h14.3L57.2,58.6L64.6,37zM79.2,30H64l-6.4-10h11.7L79.2,30z M22.6,20h11.7L28,30H12.8L22.6,20z"} + }}, + build=false + } + ,{ + name="beacon", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="scale(0.67)", d="M3.51472 0.514648C1.34424 2.68513 0 5.6865 0 8.99993C0 12.3134 1.34424 15.3147 3.51472 17.4852L4.92893 16.071C3.11819 14.2603 2 11.7616 2 8.99993C2 6.23823 3.11819 3.7396 4.92893 1.92886L3.51472 0.514648ZM6.34315 3.34308C4.89653 4.7897 4 6.79107 4 8.99993C4 11.2088 4.89653 13.2102 6.34315 14.6568L7.75736 13.2426C6.67048 12.1557 6 10.6571 6 8.99993C6 7.3428 6.67048 5.84417 7.75736 4.75729L6.34315 3.34308ZM12 4.99995C9.79086 4.99995 8 6.79081 8 8.99995C8 10.8638 9.27477 12.4299 11 12.8739V23H13V12.8739C14.7252 12.4299 16 10.8638 16 8.99995C16 6.79081 14.2091 4.99995 12 4.99995ZM10 8.99995C10 7.89538 10.8954 6.99995 12 6.99995C13.1046 6.99995 14 7.89538 14 8.99995C14 10.1045 13.1046 11 12 11C10.8954 11 10 10.1045 10 8.99995ZM17.6568 3.34308C19.1034 4.7897 20 6.79107 20 8.99993C20 11.2088 19.1034 13.2102 17.6568 14.6568L16.2426 13.2426C17.3295 12.1557 18 10.6571 18 8.99993C18 7.3428 17.3295 5.84417 16.2426 4.75729L17.6568 3.34308ZM20.4852 0.514648C22.6557 2.68513 23.9999 5.6865 23.9999 8.99993C23.9999 12.3134 22.6557 15.3147 20.4852 17.4852L19.071 16.071C20.8817 14.2603 21.9999 11.7616 21.9999 8.99993C21.9999 6.23823 20.8817 3.7396 19.071 1.92886L20.4852 0.514648Z"} + }}, + build=false + } + ,{ + name="skull", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="scale(0.25)", d="M59.5 43.785a9.014 9.014 0 0 0-2.281-5.99a24.147 24.147 0 0 0 2.279-10.208C59.498 13.479 47.162 2 31.998 2C16.836 2 4.5 13.479 4.5 27.587c0 3.516.783 7.006 2.277 10.208a9 9 0 0 0-2.277 5.99c0 4.396 3.217 8.098 7.547 9.112a7.34 7.34 0 0 0-.059.271c-.348 1.788.135 3.604 1.359 5.104c1.529 1.873 4.057 3.046 6.617 3.074c.152.012.445.027.777.027c.865 0 1.84-.087 2.631-.691l.004.003C24.559 61.772 26.4 62 27.738 62c1.303 0 3.082-.216 4.262-1.226C33.182 61.785 34.959 62 36.26 62c1.338 0 3.18-.228 4.357-1.312l.006-.006c.791.604 1.768.691 2.631.691c.334 0 .629-.016.781-.027c2.557-.028 5.082-1.199 6.611-3.071c1.227-1.501 1.711-3.316 1.363-5.113c-.016-.076-.033-.163-.059-.265c4.331-1.013 7.55-4.715 7.55-9.112m-9.945 6.867c-.387 0-.771-.028-1.145-.085c.469 1.074 1.016 2.407 1.145 3.077c.545 2.817-2.514 5.183-5.617 5.183c0 0-.313.025-.684.025c-.441 0-.967-.036-1.143-.198c-1.162-1.069 0-5.882 0-5.882c0-.811-.711-1.467-1.592-1.467c-.875 0-1.59.656-1.59 1.467c0 0 1.16 4.984 0 6.055c-.471.435-1.57.651-2.67.651s-2.199-.217-2.672-.651c-1.158-1.07 0-6.055 0-6.055c0-.811-.709-1.467-1.59-1.467c-.877 0-1.588.656-1.588 1.467c0 0 1.16 4.984 0 6.055c-.473.435-1.572.651-2.672.651s-2.199-.217-2.672-.651c-1.158-1.07 0-6.055 0-6.055c0-.811-.709-1.467-1.588-1.467c-.881 0-1.594.656-1.594 1.467c0 0 1.16 4.813 0 5.882c-.176.162-.699.198-1.143.198c-.369 0-.682-.025-.682-.025c-3.102 0-6.166-2.365-5.617-5.183c.127-.67.674-2.003 1.143-3.077a7.556 7.556 0 0 1-1.143.085C10.332 50.652 7 47.579 7 43.785c0-2.208 1.129-4.175 2.889-5.431A21.514 21.514 0 0 1 7 27.587C7 14.847 18.189 4.521 31.998 4.521s25 10.326 25 23.066c0 3.889-1.045 7.554-2.889 10.767c1.756 1.256 2.889 3.223 2.891 5.431c0 3.794-3.334 6.867-7.445 6.867"}, + {transform="scale(0.25)", d="M14.285 29.455c-6.025.333 1.26 8.292 4.07 10.195c2.807 1.897 9.555-1.638 9.166-3.944c-.576-3.388-9.527-6.457-13.236-6.251"}, + {transform="scale(0.25)", d="M32 40.371c-1.09 0-1.537 1.403-2.424 2.954c-.766 1.333-2.975 2.283-1.633 3.526c1.432 1.321 6.676 1.321 8.107 0c1.313-1.211-.867-2.193-1.631-3.528c-.886-1.55-1.331-2.952-2.419-2.952"}, + {transform="scale(0.25)", d="M49.715 29.455c-3.711-.206-12.66 2.864-13.236 6.25c-.391 2.307 6.359 5.842 9.168 3.944c2.806-1.902 10.091-9.862 4.068-10.194"} + }}, + build=false + } + ,{ + name="add", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15,9H9v6H7V9H1V7H7V1H9V7h6Z"} + }}, + build=false + } + ,{ + name="remove", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M15 7v2H1V7h14z"} + }}, + build=false + } + ,{ + name="steam_heat", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + },{ + {d="m 6.4055661,8.0244347 c 1.1151869,0.726603 2.2303757,1.453206 3.3455618,2.1798093 0.3276741,0.669171 1.0473391,1.262172 0.9245991,2.042541 0.12219,0.53007 -0.07841,1.072222 -0.495488,1.468498 -0.2319636,0.29458 -0.4639223,0.589161 -0.695884,0.883742 C 8.6467685,14.982399 7.9284968,14.241964 8.1900762,13.552546 8.1628002,13.082275 7.7473408,12.76359 7.3074701,12.544848 6.267955,11.881842 5.2284414,11.218835 4.1889255,10.555829 3.636889,9.9669727 3.2339929,9.2137591 3.3546789,8.4433259 3.1036169,7.7193728 3.5824991,7.0022223 4.1230344,6.4729011 4.3650612,5.9235059 5.3953508,5.6224581 5.7915054,6.20889 6.0528323,6.7950276 6.1756997,7.4269053 6.4055661,8.0244347 Z"}, + {d="m 10.510545,4.6140836 c 1.115186,0.726603 2.230375,1.4532064 3.345562,2.1798098 0.327677,0.6691702 1.047338,1.262172 0.924599,2.0425409 0.122191,0.5300703 -0.07841,1.0722218 -0.495488,1.4684977 -0.231963,0.294581 -0.463922,0.589161 -0.695885,0.883742 C 12.821304,11.542189 12.018892,10.915228 12.33262,10.232618 12.220122,9.3567517 11.16031,9.0130279 10.460023,8.527032 9.7259165,8.0426915 8.9491397,7.5956569 8.2417359,7.0879707 7.7167187,6.5104615 7.3428699,5.7779115 7.4596621,5.0329756 7.2085997,4.3090221 7.6874823,3.5918713 8.2280168,3.0625497 8.4700439,2.5131516 9.5003425,2.2121096 9.8964886,2.7985512 10.157796,3.3846846 10.280694,4.0165934 10.510545,4.6140836 Z"} + }}, + build=false + } + ,{ + name="search", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + },{ + {d="M10.167,1A4.839,4.839,0,0,0,5.333,5.833a4.786,4.786,0,0,0,1.1,3.029L1.147,14.146a.5.5,0,0,0,.707.708L7.138,9.569a4.783,4.783,0,0,0,3.029,1.1,4.834,4.834,0,0,0,0-9.667Zm0,8.667A3.834,3.834,0,1,1,14,5.833,3.838,3.838,0,0,1,10.167,9.667Z"}, + }}, + build=false + } + ,{ + name="info_arrow_top", + size=64, + count=4, + colors = { + red=true + }, + paths={{ + {transform="rotate(180 8 8)", p="7.672 16 8.328 16 15.621 8.707 12.793 5.879 10 8.672 10 0 6 0 6 8.672 3.207 5.879 0.379 8.707 7.672 16"} + },{ + {transform="rotate(180 8 8)", d="M3.207,7.293,7,11.086V1H9V11.086l3.793-3.793,1.414,1.414L8,14.914,1.793,8.707Z"} + }}, + build=false + } + ,{ + name="info_add", + size=64, + count=4, + colors = { + red=true + }, + paths={{ + {d="M6,16V10H0V6H6V0h4V6h6v4H10v6Z"} + },{ + {d="M15,9H9v6H7V9H1V7H7V1H9V7h6Z"} + }}, + build=false + } + ,{ + name="info_remove", + size=64, + count=4, + colors = { + red=true + }, + paths={{ + {d="M16 6v4H0V6h16z"} + },{ + {d="M15 7v2H1V7h14z"} + }}, + build=false + } + ,{ + name="info_fire", + size=64, + count=4, + colors = { + blue=true + }, + paths={{ + {transform="scale(0.034)", d="m 205.57369,7.039486 c 0.65334,13.911162 1.44965,27.81498 1.99698,41.731512 -0.12498,6.043791 -0.7437,12.07067 -1.74819,18.020184 -0.16743,0.90536 -0.35506,2.058132 -0.55481,3.054307 -0.36899,1.91787 -0.74877,3.704879 -1.17771,5.558235 -3.15119,13.854603 -8.22128,27.351006 -14.81565,39.838656 -2.2838,4.34051 -4.79391,8.63051 -7.38243,12.66242 -1.85067,2.86456 -3.71153,5.58722 -5.7181,8.33824 -1.04059,1.42146 -2.2068,2.97049 -3.33273,4.4109 -6.69811,8.59665 -14.19212,16.47722 -22.18479,23.72657 -14.39222,13.14956 -27.81431,27.59198 -39.17839,43.74842 -10.30419,14.65456 -18.90683,30.77152 -24.430556,48.11223 -4.156877,12.86617 -6.564329,26.34438 -7.264713,39.91577 -0.509974,9.42484 -0.365119,18.87395 -0.106557,28.30498 0.861102,23.21563 6.71833,46.27614 17.434816,66.59484 11.1735,21.28768 27.59227,39.35259 46.92181,52.53328 21.10285,14.41605 45.46665,23.12026 70.33209,26.49503 2.11105,0.24076 4.3577,0.84754 6.39066,-0.12127 2.34459,-0.78572 4.68918,-1.57145 7.03378,-2.35718 2.91123,1.43688 5.80027,2.97462 8.76314,4.26254 25.72662,0.66294 51.60115,-5.51343 74.49403,-17.95463 22.07214,-11.95027 41.24809,-29.71949 55.53525,-51.12417 10.43738,-15.58076 18.27422,-33.07703 23.18414,-51.44265 5.60408,-20.86158 7.57277,-42.8312 5.56922,-64.42223 -1.01099,-11.26733 -2.59444,-22.4697 -4.36778,-33.62871 -0.71061,-4.30643 -1.40288,-8.62137 -2.28125,-12.89261 -1.78175,-6.7779 -4.18896,-13.3476 -6.5658,-19.9111 C 367.96354,182.37133 347.01721,147.39298 322.67007,115.65998 301.78118,88.448456 278.30288,63.480453 252.90557,40.96378 245.26189,34.212825 237.27516,27.913693 229.21673,21.729984 221.27234,15.554317 213.32851,9.3778574 205.38374,3.2027589 c 0.0633,1.278909 0.12664,2.557818 0.18995,3.8367271 z m 43.29132,258.623824 c 16.32317,19.67749 31.00827,41.22972 41.90285,64.85312 4.16337,8.78772 6.3332,18.45008 7.73577,28.11469 0.24375,1.71908 0.49874,3.62359 0.69798,5.42072 0.13818,1.2953 0.28011,2.55658 0.38611,3.78344 0.33585,3.63418 0.55684,7.28002 0.66242,10.92978 0.0802,3.50529 0.14111,7.19511 -0.30321,10.74441 -0.74533,6.34609 -2.39845,12.56362 -4.71686,18.46435 -2.32914,5.82163 -5.58563,11.41776 -9.35715,16.17474 -6.88185,8.73535 -16.12701,15.34552 -26.35342,18.8645 -6.03174,2.1173 -12.37125,3.15186 -18.71657,3.32929 -2.08216,0.13935 -4.22993,0.1327 -6.18433,1.00734 -2.04428,0.80659 -3.9348,1.98927 -5.96539,2.82468 -2.2904,-1.58802 -4.55507,-3.25774 -6.91483,-4.70824 -1.13592,-0.1795 -2.13735,-0.33727 -3.26,-0.53884 -0.71638,-0.14028 -1.68054,-0.31853 -2.48741,-0.49564 -7.81983,-1.62593 -15.51297,-4.54542 -22.02616,-9.48529 -5.21817,-3.91817 -9.60298,-9.13028 -12.40439,-15.23307 -2.66229,-5.54608 -4.0814,-11.66799 -4.733,-17.82412 -0.83718,-6.59937 -1.65311,-13.23847 -1.55388,-19.91036 0.24357,-10.22799 3.40929,-20.16222 7.99481,-29.0981 0.71092,-1.39436 1.35783,-2.62628 2.12286,-3.99661 4.40161,-7.90265 9.64603,-15.24677 15.21694,-22.26479 4.53321,-5.66108 9.44372,-11.20008 14.17866,-16.76113 12.03881,-14.34541 22.94484,-29.75389 32.54686,-46.02264 0.51045,0.60926 1.0209,1.21852 1.53134,1.82777 z"} + },{ + {transform="scale(0.034)", d="m 376.91241,242.91684 -0.23927,-1.0104 C 341.45538,125.21083 236.51902,42.362982 232.05655,38.910724 l -13.5449,-10.524114 0.87701,17.680547 c 0,0.758479 2.4692,69.293453 -60.39692,126.293003 -68.283903,61.96787 -67.886284,113.07512 -67.726202,140.52312 l 0.0809,3.78875 c 0,74.84927 51.982342,130.81387 126.352762,140.0402 -4.04849,-0.67208 -8.18391,-1.54423 -12.33396,-2.88476 -23.98371,-7.83033 -38.00627,-25.59546 -40.71559,-51.19183 l -0.63688,-5.05107 c -2.15163,-19.78592 -4.94013,-44.28731 36.01386,-90.76366 15.29804,-17.34405 28.60453,-36.03591 39.60019,-55.48533 l 5.49783,-9.76563 7.2501,8.41874 c 21.67287,25.00523 38.24553,50.2642 49.40041,74.84927 10.27787,21.72303 10.91647,56.07556 10.11864,63.40024 -3.9039,37.38279 -29.48067,65.25186 -63.74225,69.29254 -2.23338,0.26919 -5.57615,0.5302 -9.66853,0.62661 0.35975,0.003 0.70228,0.0463 1.06376,0.0463 80.95266,0 144.29643,-68.7878 144.29643,-156.60395 8.7e-4,-21.04731 -6.6924,-57.1678 -6.9308,-58.68294 z"} + }}, + build=false + } + ,{ + name="info_education", + size=64, + count=4, + colors = { + blue=true + }, + paths={{ + {d="M8 2.425L0 5.092v1.441l1 .333V13h3v-.761c.831.74 2.173 1.256 4 1.256 3.282 0 5-1.664 5-3.308V7.533l3-1V5.092L8 2.425z"} + },{ + {d="M12 7.798v2.39c0 1.119-1.402 2.308-4 2.308s-4-1.188-4-2.308v-2.39l4 1.25 4-1.25zM2 7.173V12.5h1V7.485l-1-.312zm6-3.694L1 5.813 8 8l7-2.188-7-2.333z"} + }}, + build=false + } + ,{ + name="info_energy", + size=64, + count=4, + colors = { + blue=true + }, + paths={{ + {d="M14,1.414,9.414,6H14V7.414L5.414,16H3V14.766L5.371,10H2V8.764L6.382,0H14Z"} + },{ + {d="M7,7h6L5,15H4L6.985,9H3L7,1h6Z"} + }}, + build=false + } + ,{ + name="tooltip_edit", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M15 4L5 14l-3-3L12 1h3v3zM1 15h3l-3-3v3z"} + }}, + build=false + } + ,{ + name="tooltip_add", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M15,9H9v6H7V9H1V7H7V1H9V7h6Z"} + }}, + build=false + } + ,{ + name="tooltip_remove", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M15 7v2H1V7h14z"} + }}, + build=false + } + ,{ + name="tooltip_favorite", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M10.614 9.133l1.886 5.867-4.5-4-4.5 4 1.887-5.867-4.387-3.133h5.394l1.607-5 1.606 5h5.393l-4.386 3.133z"} + }}, + build=false + } + ,{ + name="tooltip_expand_right", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M 5.8692017,11.733021 5.3518749,11.215694 6.9596073,9.6078471 8.5673397,8 6.9595484,6.3920939 5.3517572,4.784188 5.8748475,4.261453 6.3979378,3.7387179 8.5285643,5.8693444 10.659191,7.9999708 8.5340898,10.125159 c -1.1688057,1.168854 -2.1301547,2.125189 -2.1363312,2.125189 -0.00618,0 -0.2440272,-0.232797 -0.5285569,-0.517327 z"} + }}, + build=false + } + ,{ + name="tooltip_expand_right_group", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M3.834 10.896l2.896-2.896-2.896-2.897.707-.707 3.604 3.604-3.604 3.604-.707-.708zm5.082.708l3.604-3.604-3.604-3.604-.707.707 2.896 2.897-2.896 2.896.707.708z"} + }}, + build=false + } + ,{ + name="tooltip_erase", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M15.046 6.941L9.532 1.414 1.296 9.625c-.478.497-.478 1.245.013 1.754L4.08 14.05H12v-1H9.085l5.961-6.109zm-1.404.008l-4.71 4.826L4.75 7.594l4.78-4.766 4.112 4.121zm-9.159 6.102l-2.467-2.378c-.105-.109-.105-.244-.007-.346L4.042 8.3l4.191 4.191-.546.56H4.483z"} + }}, + build=false + } + ,{ + name="tooltip_pipette", + size=64, + count=4, + colors = { + yellow=true + }, + paths={{ + },{ + {transform="scale(0.9)", d="M9.467 7.932l.612.613-5.071 5.072-2.795 1.198-1.032-1.032 1.057-2.936 5.072-5.072.585.585v.003l-4.356 4.356 1.569 1.569 4.355-4.356h.004zm4.995-6.422c-.667-.664-1.777-.729-2.435-.072l-2.188 2.189-.836-.835-.174.174-1.497 1.497 4.177 4.177 1.671-1.671-.835-.835 2.189-2.189c.658-.658.592-1.768-.072-2.435z"} + }}, + build=false + } + ,{ + name="tooltip_information", + size=64, + count=4, + colors = { + white=true + }, + paths={{ + },{ + {d="M8,1a7,7,0,1,0,7,7A7.008,7.008,0,0,0,8,1ZM8,14a6,6,0,1,1,6-6A6.006,6.006,0,0,1,8,14ZM7.5,4h1v6h-1Zm0,7h1v1h-1Z"} + }}, + build=false + } + ,{ + name="hangar", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + },{ + {transform="scale(1)", d="M 8.0605469 0.53125 L 7.7285156 0.7890625 L 1.1523438 5.8691406 L 1.0996094 5.9492188 C 0.93587514 6.2073518 0.84179688 6.5202587 0.84179688 6.8496094 L 0.84179688 13.544922 C 0.84179688 14.476425 1.6153922 15.228516 2.546875 15.228516 L 13.648438 15.228516 C 14.579921 15.228516 15.353516 14.475633 15.353516 13.544922 L 15.353516 6.8496094 C 15.353516 6.5225215 15.260551 6.2090885 15.095703 5.9492188 L 15.044922 5.8691406 L 8.0605469 0.53125 z M 8.0683594 1.9199219 L 14.179688 6.5917969 C 14.22 6.6699537 14.253906 6.7521883 14.253906 6.8496094 L 14.253906 13.544922 C 14.253906 13.875823 13.99981 14.128906 13.648438 14.128906 L 11.337891 14.128906 L 11.337891 9.3457031 L 4.5839844 9.3457031 L 4.5839844 9.6933594 L 4.5839844 14.128906 L 2.546875 14.128906 C 2.1955029 14.128906 1.9414063 13.875029 1.9414062 13.544922 L 1.9414062 6.8496094 C 1.9414062 6.756599 1.9766569 6.6771539 2.015625 6.5996094 L 8.0683594 1.9199219 z"} + }}, + build=false + } + ,{ + name="info_hangar", + size=64, + count=4, + colors = { + white=true + }, + paths={{ + {transform="scale(1)", d="M 8.0605469 0.18359375 L 7.5585938 0.56835938 L 0.9453125 5.6757812 L 0.87109375 5.8027344 C 0.68091809 6.1025533 0.56835937 6.4665811 0.56835938 6.8496094 L 0.56835938 13.544922 C 0.56835941 14.626775 1.470364 15.509766 2.546875 15.509766 L 13.648438 15.509766 C 14.724949 15.509766 15.626953 14.625586 15.626953 13.544922 L 15.626953 6.8496094 C 15.626953 6.4699736 15.516064 6.1051589 15.324219 5.8027344 L 15.251953 5.6757812 L 8.0605469 0.18359375 z M 8.0683594 2.265625 L 13.958984 6.7773438 C 13.965523 6.8017595 13.980469 6.8201517 13.980469 6.8496094 L 13.980469 13.544922 C 13.980469 13.725871 13.854785 13.855469 13.648438 13.855469 L 11.818359 13.855469 L 11.818359 8.8652344 L 4.1035156 8.8652344 L 4.1035156 9.6933594 L 4.1035156 13.855469 L 2.546875 13.855469 C 2.3405313 13.855469 2.2148437 13.72468 2.2148438 13.544922 L 2.2148438 6.8496094 C 2.2148438 6.8161984 2.2346427 6.7903827 2.2441406 6.7617188 L 8.0683594 2.265625 z M 5.7578125 10.519531 L 10.164062 10.519531 L 10.164062 13.759766 L 5.7578125 13.759766 L 5.7578125 10.519531 z M 5.7695312 10.525391 L 5.7695312 12.136719 L 5.7695312 13.746094 L 7.9648438 13.746094 L 10.160156 13.746094 L 10.160156 12.136719 L 10.160156 10.525391 L 7.9648438 10.525391 L 5.7695312 10.525391 z"}, + },{ + {transform="scale(1)", d="M 8.0605469 0.53125 L 7.7285156 0.7890625 L 1.1523438 5.8691406 L 1.0996094 5.9492188 C 0.93587514 6.2073518 0.84179688 6.5202587 0.84179688 6.8496094 L 0.84179688 13.544922 C 0.84179688 14.476425 1.6153922 15.228516 2.546875 15.228516 L 13.648438 15.228516 C 14.579921 15.228516 15.353516 14.475633 15.353516 13.544922 L 15.353516 6.8496094 C 15.353516 6.5225215 15.260551 6.2090885 15.095703 5.9492188 L 15.044922 5.8691406 L 8.0605469 0.53125 z M 8.0683594 1.9199219 L 14.179688 6.5917969 C 14.22 6.6699537 14.253906 6.7521883 14.253906 6.8496094 L 14.253906 13.544922 C 14.253906 13.875823 13.99981 14.128906 13.648438 14.128906 L 11.337891 14.128906 L 11.337891 9.3457031 L 4.5839844 9.3457031 L 4.5839844 9.6933594 L 4.5839844 14.128906 L 2.546875 14.128906 C 2.1955029 14.128906 1.9414063 13.875029 1.9414062 13.544922 L 1.9414062 6.8496094 C 1.9414062 6.756599 1.9766569 6.6771539 2.015625 6.5996094 L 8.0683594 1.9199219 z"} + }}, + build=false + } + ,{ + name="info_settings", + size=64, + count=4, + colors = { + blue=true + }, + paths={{ + {d="M5.986 16l-.373-2.237-1.846 1.317-2.848-2.847 1.319-1.847-2.238-.373v-4.027l2.238-.373-1.319-1.846 2.849-2.848 1.846 1.319.372-2.238h4.028l.372 2.238 1.847-1.319 2.847 2.848-1.318 1.846 2.238.373v4.028l-2.238.372 1.318 1.847-2.847 2.847-1.847-1.318-.373 2.238h-4.027z"}, + },{ + {d="M9.964 3.257l-.443-.133-.354-2.124h-2.334l-.353 2.121c-.296.093-.58.21-.855.354l-1.75-1.25-1.65 1.65 1.252 1.752-.22.409-.133.443-2.124.354v2.333l2.121.354c.092.296.21.58.354.855l-1.25 1.75 1.65 1.65 1.752-1.252.408.219.444.134.354 2.124h2.333l.354-2.121c.296-.092.58-.21.854-.354l1.75 1.25 1.65-1.65-1.252-1.752.219-.408.134-.444 2.125-.354v-2.334l-2.121-.353c-.092-.296-.21-.58-.354-.854l1.25-1.75-1.65-1.65-1.752 1.252-.409-.221zm.248 4.743c0 1.222-.991 2.212-2.212 2.212-1.222 0-2.212-.991-2.212-2.212s.99-2.212 2.212-2.212c1.222 0 2.212.99 2.212 2.212z"} + }}, + build=false + } + ,{ + name="info_rocket", + size=64, + count=4, + colors = { + blue=true + }, + paths={{ + {transform="scale(0.25)", d="M 54.446236,-0.05459862 C 47.895393,0.10760688 41.259685,2.4444729 36.537453,7.0975524 34.674579,8.946393 33.259549,11.181676 31.607461,13.211396 28.244624,17.579963 24.881786,21.948529 21.518947,26.317096 16.941805,25.51217 12.365261,24.703814 7.7877297,23.901118 5.286299,26.303191 2.7864617,28.706933 0.28673621,31.110791 6.2043292,36.836838 12.217798,42.465183 17.983598,48.346465 c 5.150985,5.128158 10.097184,10.456929 15.143164,15.687949 2.396885,-2.50688 4.795595,-5.012012 7.191937,-7.519413 C 39.517478,51.92314 38.711242,47.33216 37.908054,42.740646 43.826885,38.136065 49.784881,33.580204 55.679266,28.945212 60.24632,25.087929 63.030415,19.410051 63.904038,13.539746 64.30904,10.695688 64.482097,7.7630135 63.947013,4.926762 63.173127,2.0413998 60.32575,-0.12271447 57.332365,-0.01568251 56.371359,-0.06528768 55.40823,-0.08165762 54.44624,-0.05459889 Z m -7.1883,15.65466362 c 1.256829,0.05757 1.820446,1.84135 0.830817,2.620042 -0.891287,0.852856 -2.537738,0.0993 -2.467001,-1.138752 -0.01788,-0.869786 0.785907,-1.565142 1.636184,-1.48129 z"}, + },{ + {transform="scale(0.25)", d="M 55.167289,3.5972802 C 42.541746,3.7240155 37.440745,11.637355 37.440745,11.637355 L 23.063796,30.312608 8.9799981,27.832247 l -3.4098957,3.278942 9.6993016,9.32598 8.554121,8.575972 9.302665,9.723622 3.27045,-3.418526 L 33.921876,41.195739 52.550887,26.77451 C 62.23892,19.267831 60.498978,6.3926335 60.498978,6.3926335 60.454078,5.0758698 59.106783,3.7253868 57.793344,3.6803693 56.884034,3.6149536 56.008993,3.5888329 55.167289,3.5972802 Z m -8.051142,8.3297878 c 1.320458,0 2.639468,0.503722 3.638585,1.51099 2.009449,2.014535 2.009449,5.289389 0,7.303923 -2.009457,2.014536 -5.287493,2.014536 -7.285717,0 -2.009454,-2.014534 -2.009454,-5.300642 0,-7.303923 1.004726,-1.007268 2.326673,-1.51099 3.647132,-1.51099 z"} + }}, + build=false + } + ,{ + name="expand_left", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="rotate(180 8 8)", d="M 5.8692017,11.733021 5.3518749,11.215694 6.9596073,9.6078471 8.5673397,8 6.9595484,6.3920939 5.3517572,4.784188 5.8748475,4.261453 6.3979378,3.7387179 8.5285643,5.8693444 10.659191,7.9999708 8.5340898,10.125159 c -1.1688057,1.168854 -2.1301547,2.125189 -2.1363312,2.125189 -0.00618,0 -0.2440272,-0.232797 -0.5285569,-0.517327 z"} + }}, + build=false + } + ,{ + name="expand_left_group", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {transform="rotate(180 8 8)", d="M3.834 10.896l2.896-2.896-2.896-2.897.707-.707 3.604 3.604-3.604 3.604-.707-.708zm5.082.708l3.604-3.604-3.604-3.604-.707.707 2.896 2.897-2.896 2.896.707.708z"} + }}, + build=false + } + ,{ + name="two_rows", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M2 1v13h13v-13h-13zm12 12h-11v-5h11v5zm0-6h-11v-5h11v5z"} + }}, + build=false + } + ,{ + name="three_rows", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + + },{ + {d="M2 1v13h13v-13h-13zm12 12h-11v-3h11v3zm0-4h-11v-3h11v3zm0-4h-11v-3h11v3z"} + }}, + build=false + } + ,{ + name="parameter", + size=64, + count=4, + colors = { + black=true, + white=true + }, + paths={{ + },{ + {transform="scale(1)", d="M12.318 4c.25 0 .475.616.648.977.005.007.005.023.009.023H14v6h-2v1h3V4h-2.682zM3.648 11H2V5h1v.048C3 4.689 3.714 4 3.986 4H1v8h3v-.535c-.126-.131-.242-.465-.352-.465z"}, + {transform="scale(1)", d="M12.155 5.416a3.677 3.677 0 0 0-.939-1.226 4.194 4.194 0 0 0-1.383-.77 5.192 5.192 0 0 0-1.69-.27c-.472 0-.912.055-1.325.167-.413.112-.791.27-1.134.473a4.257 4.257 0 0 0-1.608 1.683c-.186.346-.33.72-.428 1.118-.1.399-.148.815-.148 1.247 0 .652.11 1.248.332 1.777.22.531.531.982.928 1.361.397.377.872.666 1.417.869a5.164 5.164 0 0 0 1.807.305 8.057 8.057 0 0 0 1.488-.127c.194-.037.365-.078.512-.125.148-.049.274-.094.376-.139v-.854a8.594 8.594 0 0 1-.463.184c-.16.055-.336.104-.52.141-.188.039-.387.07-.605.09a6.101 6.101 0 0 1-.7.033 4.062 4.062 0 0 1-1.508-.264 3.272 3.272 0 0 1-1.126-.73 3.155 3.155 0 0 1-.708-1.123 4.082 4.082 0 0 1-.243-1.433c0-.545.09-1.051.272-1.521.182-.471.435-.879.758-1.224a3.525 3.525 0 0 1 1.156-.816 3.57 3.57 0 0 1 1.457-.294c.419 0 .797.044 1.123.136.328.091.619.215.87.369.254.158.466.339.643.547a3.076 3.076 0 0 1 .684 1.398c.05.254.075.5.075.74 0 .344-.033.654-.102.926a2.632 2.632 0 0 1-.269.695 1.28 1.28 0 0 1-.386.432.787.787 0 0 1-.453.15.558.558 0 0 1-.215-.045.361.361 0 0 1-.165-.158.953.953 0 0 1-.107-.304 2.598 2.598 0 0 1-.039-.492c0-.063.008-.17.018-.324.009-.152.026-.33.041-.531.015-.202.035-.417.055-.643.018-.227.037-.445.057-.648.018-.205.033-.386.049-.546a7.18 7.18 0 0 0 .026-.345h-.919l-.054.6h-.02a.766.766 0 0 0-.137-.281.928.928 0 0 0-.233-.216 1.18 1.18 0 0 0-.676-.188c-.336 0-.645.071-.923.216a2.184 2.184 0 0 0-.721.6 2.777 2.777 0 0 0-.466.903c-.114.35-.169.727-.169 1.135 0 .344.045.643.134.9.089.26.211.473.36.646.153.172.329.301.534.383.2.084.416.129.641.129.176 0 .342-.027.499-.082.155-.05.302-.128.431-.232.134-.104.248-.23.348-.381a1.74 1.74 0 0 0 .237-.517h.026c0 .375.101.674.308.893.206.219.501.328.888.328.292 0 .58-.063.862-.197.284-.131.537-.328.764-.586.221-.262.404-.582.543-.965.138-.387.208-.832.208-1.342 0-.606-.117-1.151-.345-1.635zM8.847 7.965a2.53 2.53 0 0 1-.245.719 1.43 1.43 0 0 1-.408.482.968.968 0 0 1-.572.176.832.832 0 0 1-.633-.31 1.235 1.235 0 0 1-.197-.391 1.894 1.894 0 0 1-.072-.547c0-.236.027-.48.08-.729.056-.248.137-.473.25-.678.11-.199.25-.363.417-.491a.923.923 0 0 1 .581-.192c.123 0 .235.021.34.063a.738.738 0 0 1 .279.197c.08.086.145.197.189.33.044.133.07.293.07.48.001.317-.029.615-.079.891z"} + }}, + build=true + } +} + +------------------------------------------------------------------------------- +--- builder functions +local function create_path(svg, path, color) + if path.p ~= nil then + if path.transform ~= nil then + table.insert(svg, string.format("", color, path.transform, path.p)) + else + table.insert(svg, string.format("", color, path.p)) + end + else + if path.transform ~= nil then + table.insert(svg, string.format("", color, path.transform, path.d)) + else + table.insert(svg, string.format("", color, path.d)) + end + end +end + +local function create_svg(sprite, background_color, foreground_color) + local height = sprite.size + local width = 0 + local transforms = {} + for i = 1, sprite.count, 1 do + local x = width + local scale = 2 * ( sprite.size / 16 ) / ( 2 ^ i ) + local transform = string.format("translate(%s 0) scale(%s)", x, scale) + table.insert(transforms, transform) + width = width + 2 * sprite.size / ( 2 ^ i ) + end + local svg = {} + table.insert(svg, string.format("", width, height)) + table.insert(svg, "") + + for _, transform in pairs(transforms) do + table.insert(svg, string.format("", transform)) + local background_paths = sprite.paths[1] + local foreground_paths = sprite.paths[2] + for _, path in pairs(background_paths) do + create_path(svg, path, background_color) + end + for _, path in pairs(foreground_paths) do + create_path(svg, path, foreground_color) + end + table.insert(svg, "") + end + + table.insert(svg, "") + table.insert(svg, "") + local text = table.concat(svg,"") + return text +end + +local function write_file(filename, content) + local file = io.open(filename, "w+") + file:write(content) + file:close(); +end + +local function inkscape_command(inkscape, filename) + local cmd = string.format("%s --export-type=\"png\" \"%s\"", inkscape, filename) + os.execute(cmd) +end +------------------------------------------------------------------------------- +local force_build = false +local inkscape = "D:\\Autre\\inkscape\\bin\\inkscape" +local info = debug.getinfo(1) +local current_file=string.gsub(info.source, "/", "\\") +current_file=string.gsub(current_file, "@", "") +local current_dir = string.gsub(current_file, "^(.+\\)[^\\]+$", "%1"); +local colors = { + black = {"#FFFFFF", "#000000"}, + white = {"#000000", "#FFFFFF"}, + red = {"#000000", "#FF0000"}, + blue = {"#000000", "#6CCEED"}, + yellow = {"#000000", "#FCDC3B"} +} +------------------------------------------------------------------------------- +--- Image builder +local total = 0 +for index, sprite in pairs(sprites) do + total = total + 1 +end +for index, sprite in pairs(sprites) do + if force_build or sprite.build then + print(string.format("Process %s (%s/%s)", sprite.name, index, total)) + for color_name, is_valid in pairs(sprite.colors) do + if is_valid then + local color = colors[color_name] + local content = create_svg(sprite, color[1], color[2]) + local path = string.format("%sicons\\%s_%s.svg", current_dir, sprite.name, color_name) + write_file(path, content) + inkscape_command(inkscape, path) + os.remove(path) + end + end + end +end + +------------------------------------------------------------------------------- +--- Defines builder +--- Put this result in defines.lua file +print("===== defines.lua =====") +local defines_builded = {} +table.insert(defines_builded, "defines.sprites = {}") +for _, sprite in pairs(sprites) do + local array = string.format("defines.sprites.%s = {}", sprite.name) + table.insert(defines_builded, array) + for color_name, is_valid in pairs(sprite.colors) do + if is_valid then + local value = string.format("defines.sprites.%s.%s = \"%s_%s\"", sprite.name, color_name, sprite.name, color_name) + table.insert(defines_builded, value) + end + end +end +local path = string.format("%s..\\core\\defines_builded.lua", current_dir) +local defines_content = table.concat(defines_builded,"\n") +write_file(path, defines_content) +------------------------------------------------------------------------------- +--- Defines builder +--- Put this result in sprites.lua file +print("===== sprites.lua =====") +local sprites_builded = {} +table.insert(sprites_builded, "local mipmaps = {") +for _, sprite in pairs(sprites) do + for color_name, is_valid in pairs(sprite.colors) do + if is_valid then + table.insert(sprites_builded, string.format("{name=\"%s_%s\", size=%s, count=%s},", sprite.name, color_name, sprite.size, sprite.count)) + end + end +end +table.insert(sprites_builded, "}") +table.insert(sprites_builded, "return mipmaps") +local path = string.format("%s..\\prototypes\\sprites_builded.lua", current_dir) +local sprites_content = table.concat(sprites_builded,"\n") +write_file(path, sprites_content) diff --git a/helmod/graphics/icons/add_black.png b/helmod/graphics/icons/add_black.png new file mode 100644 index 00000000..f7f2d89d Binary files /dev/null and b/helmod/graphics/icons/add_black.png differ diff --git a/helmod/graphics/icons/add_table_black.png b/helmod/graphics/icons/add_table_black.png new file mode 100644 index 00000000..e2b05ce4 Binary files /dev/null and b/helmod/graphics/icons/add_table_black.png differ diff --git a/helmod/graphics/icons/add_table_white.png b/helmod/graphics/icons/add_table_white.png new file mode 100644 index 00000000..135b025e Binary files /dev/null and b/helmod/graphics/icons/add_table_white.png differ diff --git a/helmod/graphics/icons/add_white.png b/helmod/graphics/icons/add_white.png new file mode 100644 index 00000000..a6c96926 Binary files /dev/null and b/helmod/graphics/icons/add_white.png differ diff --git a/helmod/graphics/icons/alert.png b/helmod/graphics/icons/alert.png new file mode 100644 index 00000000..a07a3287 Binary files /dev/null and b/helmod/graphics/icons/alert.png differ diff --git a/helmod/graphics/icons/alert1.png b/helmod/graphics/icons/alert1.png new file mode 100644 index 00000000..ff4a47c9 Binary files /dev/null and b/helmod/graphics/icons/alert1.png differ diff --git a/helmod/graphics/icons/arrow_bottom_black.png b/helmod/graphics/icons/arrow_bottom_black.png new file mode 100644 index 00000000..1e9fa9c7 Binary files /dev/null and b/helmod/graphics/icons/arrow_bottom_black.png differ diff --git a/helmod/graphics/icons/arrow_bottom_white.png b/helmod/graphics/icons/arrow_bottom_white.png new file mode 100644 index 00000000..e4abbbda Binary files /dev/null and b/helmod/graphics/icons/arrow_bottom_white.png differ diff --git a/helmod/graphics/icons/arrow_left_black.png b/helmod/graphics/icons/arrow_left_black.png new file mode 100644 index 00000000..36c41ff8 Binary files /dev/null and b/helmod/graphics/icons/arrow_left_black.png differ diff --git a/helmod/graphics/icons/arrow_left_white.png b/helmod/graphics/icons/arrow_left_white.png new file mode 100644 index 00000000..6b41186c Binary files /dev/null and b/helmod/graphics/icons/arrow_left_white.png differ diff --git a/helmod/graphics/icons/arrow_right_black.png b/helmod/graphics/icons/arrow_right_black.png new file mode 100644 index 00000000..09ac39d7 Binary files /dev/null and b/helmod/graphics/icons/arrow_right_black.png differ diff --git a/helmod/graphics/icons/arrow_right_white.png b/helmod/graphics/icons/arrow_right_white.png new file mode 100644 index 00000000..095b4384 Binary files /dev/null and b/helmod/graphics/icons/arrow_right_white.png differ diff --git a/helmod/graphics/icons/arrow_top_black.png b/helmod/graphics/icons/arrow_top_black.png new file mode 100644 index 00000000..6dc9e5fa Binary files /dev/null and b/helmod/graphics/icons/arrow_top_black.png differ diff --git a/helmod/graphics/icons/arrow_top_white.png b/helmod/graphics/icons/arrow_top_white.png new file mode 100644 index 00000000..74da5f91 Binary files /dev/null and b/helmod/graphics/icons/arrow_top_white.png differ diff --git a/helmod/graphics/icons/beacon_black.png b/helmod/graphics/icons/beacon_black.png new file mode 100644 index 00000000..e257163e Binary files /dev/null and b/helmod/graphics/icons/beacon_black.png differ diff --git a/helmod/graphics/icons/beacon_white.png b/helmod/graphics/icons/beacon_white.png new file mode 100644 index 00000000..e783de77 Binary files /dev/null and b/helmod/graphics/icons/beacon_white.png differ diff --git a/helmod/graphics/icons/button.png b/helmod/graphics/icons/button.png new file mode 100644 index 00000000..a30ebc36 Binary files /dev/null and b/helmod/graphics/icons/button.png differ diff --git a/helmod/graphics/icons/calculator_black.png b/helmod/graphics/icons/calculator_black.png new file mode 100644 index 00000000..72387f5b Binary files /dev/null and b/helmod/graphics/icons/calculator_black.png differ diff --git a/helmod/graphics/icons/calculator_white.png b/helmod/graphics/icons/calculator_white.png new file mode 100644 index 00000000..188c29c3 Binary files /dev/null and b/helmod/graphics/icons/calculator_white.png differ diff --git a/helmod/graphics/icons/check_dot_black.png b/helmod/graphics/icons/check_dot_black.png new file mode 100644 index 00000000..e24e1ada Binary files /dev/null and b/helmod/graphics/icons/check_dot_black.png differ diff --git a/helmod/graphics/icons/check_dot_white.png b/helmod/graphics/icons/check_dot_white.png new file mode 100644 index 00000000..05e5d3df Binary files /dev/null and b/helmod/graphics/icons/check_dot_white.png differ diff --git a/helmod/graphics/icons/checkmark_black.png b/helmod/graphics/icons/checkmark_black.png new file mode 100644 index 00000000..04d35790 Binary files /dev/null and b/helmod/graphics/icons/checkmark_black.png differ diff --git a/helmod/graphics/icons/checkmark_white.png b/helmod/graphics/icons/checkmark_white.png new file mode 100644 index 00000000..456e7166 Binary files /dev/null and b/helmod/graphics/icons/checkmark_white.png differ diff --git a/helmod/graphics/icons/close_black.png b/helmod/graphics/icons/close_black.png new file mode 100644 index 00000000..400038eb Binary files /dev/null and b/helmod/graphics/icons/close_black.png differ diff --git a/helmod/graphics/icons/close_white.png b/helmod/graphics/icons/close_white.png new file mode 100644 index 00000000..08301396 Binary files /dev/null and b/helmod/graphics/icons/close_white.png differ diff --git a/helmod/graphics/icons/column_chart_black.png b/helmod/graphics/icons/column_chart_black.png new file mode 100644 index 00000000..7f36d15a Binary files /dev/null and b/helmod/graphics/icons/column_chart_black.png differ diff --git a/helmod/graphics/icons/column_chart_white.png b/helmod/graphics/icons/column_chart_white.png new file mode 100644 index 00000000..b1cc0c3c Binary files /dev/null and b/helmod/graphics/icons/column_chart_white.png differ diff --git a/helmod/graphics/icons/copy_black.png b/helmod/graphics/icons/copy_black.png new file mode 100644 index 00000000..0f99a185 Binary files /dev/null and b/helmod/graphics/icons/copy_black.png differ diff --git a/helmod/graphics/icons/copy_white.png b/helmod/graphics/icons/copy_white.png new file mode 100644 index 00000000..6e464b57 Binary files /dev/null and b/helmod/graphics/icons/copy_white.png differ diff --git a/helmod/graphics/icons/create_black.png b/helmod/graphics/icons/create_black.png new file mode 100644 index 00000000..cf80f0c7 Binary files /dev/null and b/helmod/graphics/icons/create_black.png differ diff --git a/helmod/graphics/icons/create_white.png b/helmod/graphics/icons/create_white.png new file mode 100644 index 00000000..84f0aec8 Binary files /dev/null and b/helmod/graphics/icons/create_white.png differ diff --git a/helmod/graphics/icons/database_method_black.png b/helmod/graphics/icons/database_method_black.png new file mode 100644 index 00000000..cdc316ed Binary files /dev/null and b/helmod/graphics/icons/database_method_black.png differ diff --git a/helmod/graphics/icons/database_method_white.png b/helmod/graphics/icons/database_method_white.png new file mode 100644 index 00000000..efa2fbdf Binary files /dev/null and b/helmod/graphics/icons/database_method_white.png differ diff --git a/helmod/graphics/icons/database_schema_black.png b/helmod/graphics/icons/database_schema_black.png new file mode 100644 index 00000000..ecd1bcc8 Binary files /dev/null and b/helmod/graphics/icons/database_schema_black.png differ diff --git a/helmod/graphics/icons/database_schema_white.png b/helmod/graphics/icons/database_schema_white.png new file mode 100644 index 00000000..541bd5fa Binary files /dev/null and b/helmod/graphics/icons/database_schema_white.png differ diff --git a/helmod/graphics/icons/database_settings_black.png b/helmod/graphics/icons/database_settings_black.png new file mode 100644 index 00000000..cb971f23 Binary files /dev/null and b/helmod/graphics/icons/database_settings_black.png differ diff --git a/helmod/graphics/icons/database_settings_white.png b/helmod/graphics/icons/database_settings_white.png new file mode 100644 index 00000000..3602adc7 Binary files /dev/null and b/helmod/graphics/icons/database_settings_white.png differ diff --git a/helmod/graphics/icons/database_test_black.png b/helmod/graphics/icons/database_test_black.png new file mode 100644 index 00000000..b9f69c66 Binary files /dev/null and b/helmod/graphics/icons/database_test_black.png differ diff --git a/helmod/graphics/icons/database_test_white.png b/helmod/graphics/icons/database_test_white.png new file mode 100644 index 00000000..f343ef2a Binary files /dev/null and b/helmod/graphics/icons/database_test_white.png differ diff --git a/helmod/graphics/icons/download_document_black.png b/helmod/graphics/icons/download_document_black.png new file mode 100644 index 00000000..0a23a942 Binary files /dev/null and b/helmod/graphics/icons/download_document_black.png differ diff --git a/helmod/graphics/icons/download_document_white.png b/helmod/graphics/icons/download_document_white.png new file mode 100644 index 00000000..7ebec6f1 Binary files /dev/null and b/helmod/graphics/icons/download_document_white.png differ diff --git a/helmod/graphics/icons/edit_document_black.png b/helmod/graphics/icons/edit_document_black.png new file mode 100644 index 00000000..024a4ce7 Binary files /dev/null and b/helmod/graphics/icons/edit_document_black.png differ diff --git a/helmod/graphics/icons/edit_document_white.png b/helmod/graphics/icons/edit_document_white.png new file mode 100644 index 00000000..bd139628 Binary files /dev/null and b/helmod/graphics/icons/edit_document_white.png differ diff --git a/helmod/graphics/icons/education_black.png b/helmod/graphics/icons/education_black.png new file mode 100644 index 00000000..7ca7fbeb Binary files /dev/null and b/helmod/graphics/icons/education_black.png differ diff --git a/helmod/graphics/icons/education_white.png b/helmod/graphics/icons/education_white.png new file mode 100644 index 00000000..104a2509 Binary files /dev/null and b/helmod/graphics/icons/education_white.png differ diff --git a/helmod/graphics/icons/eraser_black.png b/helmod/graphics/icons/eraser_black.png new file mode 100644 index 00000000..af8ed933 Binary files /dev/null and b/helmod/graphics/icons/eraser_black.png differ diff --git a/helmod/graphics/icons/eraser_white.png b/helmod/graphics/icons/eraser_white.png new file mode 100644 index 00000000..48f3aaa6 Binary files /dev/null and b/helmod/graphics/icons/eraser_white.png differ diff --git a/helmod/graphics/icons/event_black.png b/helmod/graphics/icons/event_black.png new file mode 100644 index 00000000..f0291edc Binary files /dev/null and b/helmod/graphics/icons/event_black.png differ diff --git a/helmod/graphics/icons/event_white.png b/helmod/graphics/icons/event_white.png new file mode 100644 index 00000000..6f626b57 Binary files /dev/null and b/helmod/graphics/icons/event_white.png differ diff --git a/helmod/graphics/icons/expand_left_black.png b/helmod/graphics/icons/expand_left_black.png new file mode 100644 index 00000000..b65ef9ae Binary files /dev/null and b/helmod/graphics/icons/expand_left_black.png differ diff --git a/helmod/graphics/icons/expand_left_group_black.png b/helmod/graphics/icons/expand_left_group_black.png new file mode 100644 index 00000000..8dfcb195 Binary files /dev/null and b/helmod/graphics/icons/expand_left_group_black.png differ diff --git a/helmod/graphics/icons/expand_left_group_white.png b/helmod/graphics/icons/expand_left_group_white.png new file mode 100644 index 00000000..1c8a00f5 Binary files /dev/null and b/helmod/graphics/icons/expand_left_group_white.png differ diff --git a/helmod/graphics/icons/expand_left_white.png b/helmod/graphics/icons/expand_left_white.png new file mode 100644 index 00000000..8b7ed9dd Binary files /dev/null and b/helmod/graphics/icons/expand_left_white.png differ diff --git a/helmod/graphics/icons/expand_right_black.png b/helmod/graphics/icons/expand_right_black.png new file mode 100644 index 00000000..ecfe7983 Binary files /dev/null and b/helmod/graphics/icons/expand_right_black.png differ diff --git a/helmod/graphics/icons/expand_right_group_black.png b/helmod/graphics/icons/expand_right_group_black.png new file mode 100644 index 00000000..b51e0a9e Binary files /dev/null and b/helmod/graphics/icons/expand_right_group_black.png differ diff --git a/helmod/graphics/icons/expand_right_group_white.png b/helmod/graphics/icons/expand_right_group_white.png new file mode 100644 index 00000000..71a275eb Binary files /dev/null and b/helmod/graphics/icons/expand_right_group_white.png differ diff --git a/helmod/graphics/icons/expand_right_white.png b/helmod/graphics/icons/expand_right_white.png new file mode 100644 index 00000000..49a5da7d Binary files /dev/null and b/helmod/graphics/icons/expand_right_white.png differ diff --git a/helmod/graphics/icons/factory_black.png b/helmod/graphics/icons/factory_black.png new file mode 100644 index 00000000..56b98cb0 Binary files /dev/null and b/helmod/graphics/icons/factory_black.png differ diff --git a/helmod/graphics/icons/factory_white.png b/helmod/graphics/icons/factory_white.png new file mode 100644 index 00000000..6d3621b9 Binary files /dev/null and b/helmod/graphics/icons/factory_white.png differ diff --git a/helmod/graphics/icons/favorite_black.png b/helmod/graphics/icons/favorite_black.png new file mode 100644 index 00000000..153e9b06 Binary files /dev/null and b/helmod/graphics/icons/favorite_black.png differ diff --git a/helmod/graphics/icons/favorite_white.png b/helmod/graphics/icons/favorite_white.png new file mode 100644 index 00000000..af22a1d4 Binary files /dev/null and b/helmod/graphics/icons/favorite_white.png differ diff --git a/helmod/graphics/icons/filter_black.png b/helmod/graphics/icons/filter_black.png new file mode 100644 index 00000000..e010b440 Binary files /dev/null and b/helmod/graphics/icons/filter_black.png differ diff --git a/helmod/graphics/icons/filter_white.png b/helmod/graphics/icons/filter_white.png new file mode 100644 index 00000000..89cc5d5b Binary files /dev/null and b/helmod/graphics/icons/filter_white.png differ diff --git a/helmod/graphics/icons/gauge_round_black.png b/helmod/graphics/icons/gauge_round_black.png new file mode 100644 index 00000000..d1bf8620 Binary files /dev/null and b/helmod/graphics/icons/gauge_round_black.png differ diff --git a/helmod/graphics/icons/gauge_round_white.png b/helmod/graphics/icons/gauge_round_white.png new file mode 100644 index 00000000..251bc0ca Binary files /dev/null and b/helmod/graphics/icons/gauge_round_white.png differ diff --git a/helmod/graphics/icons/graph_bottom_to_top_black.png b/helmod/graphics/icons/graph_bottom_to_top_black.png new file mode 100644 index 00000000..a44d6485 Binary files /dev/null and b/helmod/graphics/icons/graph_bottom_to_top_black.png differ diff --git a/helmod/graphics/icons/graph_bottom_to_top_white.png b/helmod/graphics/icons/graph_bottom_to_top_white.png new file mode 100644 index 00000000..d6808bf8 Binary files /dev/null and b/helmod/graphics/icons/graph_bottom_to_top_white.png differ diff --git a/helmod/graphics/icons/graph_left_to_right_black.png b/helmod/graphics/icons/graph_left_to_right_black.png new file mode 100644 index 00000000..bee02280 Binary files /dev/null and b/helmod/graphics/icons/graph_left_to_right_black.png differ diff --git a/helmod/graphics/icons/graph_left_to_right_white.png b/helmod/graphics/icons/graph_left_to_right_white.png new file mode 100644 index 00000000..d9ad8ba4 Binary files /dev/null and b/helmod/graphics/icons/graph_left_to_right_white.png differ diff --git a/helmod/graphics/icons/graph_top_to_bottom_black.png b/helmod/graphics/icons/graph_top_to_bottom_black.png new file mode 100644 index 00000000..93121ffc Binary files /dev/null and b/helmod/graphics/icons/graph_top_to_bottom_black.png differ diff --git a/helmod/graphics/icons/graph_top_to_bottom_white.png b/helmod/graphics/icons/graph_top_to_bottom_white.png new file mode 100644 index 00000000..5947b605 Binary files /dev/null and b/helmod/graphics/icons/graph_top_to_bottom_white.png differ diff --git a/helmod/graphics/icons/hangar_black.png b/helmod/graphics/icons/hangar_black.png new file mode 100644 index 00000000..d613ddce Binary files /dev/null and b/helmod/graphics/icons/hangar_black.png differ diff --git a/helmod/graphics/icons/hangar_white.png b/helmod/graphics/icons/hangar_white.png new file mode 100644 index 00000000..db43014b Binary files /dev/null and b/helmod/graphics/icons/hangar_white.png differ diff --git a/helmod/graphics/icons/helmod-group.png b/helmod/graphics/icons/helmod-group.png new file mode 100644 index 00000000..20e6e34d Binary files /dev/null and b/helmod/graphics/icons/helmod-group.png differ diff --git a/helmod/graphics/icons/home_black.png b/helmod/graphics/icons/home_black.png new file mode 100644 index 00000000..904167bc Binary files /dev/null and b/helmod/graphics/icons/home_black.png differ diff --git a/helmod/graphics/icons/home_white.png b/helmod/graphics/icons/home_white.png new file mode 100644 index 00000000..a092cb43 Binary files /dev/null and b/helmod/graphics/icons/home_white.png differ diff --git a/helmod/graphics/icons/info_add_red.png b/helmod/graphics/icons/info_add_red.png new file mode 100644 index 00000000..ac5f8755 Binary files /dev/null and b/helmod/graphics/icons/info_add_red.png differ diff --git a/helmod/graphics/icons/info_arrow_top_red.png b/helmod/graphics/icons/info_arrow_top_red.png new file mode 100644 index 00000000..358ea23e Binary files /dev/null and b/helmod/graphics/icons/info_arrow_top_red.png differ diff --git a/helmod/graphics/icons/info_education_blue.png b/helmod/graphics/icons/info_education_blue.png new file mode 100644 index 00000000..c478cc2a Binary files /dev/null and b/helmod/graphics/icons/info_education_blue.png differ diff --git a/helmod/graphics/icons/info_energy_blue.png b/helmod/graphics/icons/info_energy_blue.png new file mode 100644 index 00000000..9188e93f Binary files /dev/null and b/helmod/graphics/icons/info_energy_blue.png differ diff --git a/helmod/graphics/icons/info_fire_blue.png b/helmod/graphics/icons/info_fire_blue.png new file mode 100644 index 00000000..ca1fcd5a Binary files /dev/null and b/helmod/graphics/icons/info_fire_blue.png differ diff --git a/helmod/graphics/icons/info_hangar_white.png b/helmod/graphics/icons/info_hangar_white.png new file mode 100644 index 00000000..5152b736 Binary files /dev/null and b/helmod/graphics/icons/info_hangar_white.png differ diff --git a/helmod/graphics/icons/info_remove_red.png b/helmod/graphics/icons/info_remove_red.png new file mode 100644 index 00000000..0f6def06 Binary files /dev/null and b/helmod/graphics/icons/info_remove_red.png differ diff --git a/helmod/graphics/icons/info_rocket_blue.png b/helmod/graphics/icons/info_rocket_blue.png new file mode 100644 index 00000000..308e41eb Binary files /dev/null and b/helmod/graphics/icons/info_rocket_blue.png differ diff --git a/helmod/graphics/icons/info_settings_blue.png b/helmod/graphics/icons/info_settings_blue.png new file mode 100644 index 00000000..ed586d34 Binary files /dev/null and b/helmod/graphics/icons/info_settings_blue.png differ diff --git a/helmod/graphics/icons/jewel_black.png b/helmod/graphics/icons/jewel_black.png new file mode 100644 index 00000000..386d996a Binary files /dev/null and b/helmod/graphics/icons/jewel_black.png differ diff --git a/helmod/graphics/icons/jewel_white.png b/helmod/graphics/icons/jewel_white.png new file mode 100644 index 00000000..895dfaa6 Binary files /dev/null and b/helmod/graphics/icons/jewel_white.png differ diff --git a/helmod/graphics/icons/list_view_black.png b/helmod/graphics/icons/list_view_black.png new file mode 100644 index 00000000..5f60ed7e Binary files /dev/null and b/helmod/graphics/icons/list_view_black.png differ diff --git a/helmod/graphics/icons/list_view_white.png b/helmod/graphics/icons/list_view_white.png new file mode 100644 index 00000000..335c54dc Binary files /dev/null and b/helmod/graphics/icons/list_view_white.png differ diff --git a/helmod/graphics/icons/lock_black.png b/helmod/graphics/icons/lock_black.png new file mode 100644 index 00000000..2a0a2bda Binary files /dev/null and b/helmod/graphics/icons/lock_black.png differ diff --git a/helmod/graphics/icons/lock_white.png b/helmod/graphics/icons/lock_white.png new file mode 100644 index 00000000..1bd3796b Binary files /dev/null and b/helmod/graphics/icons/lock_white.png differ diff --git a/helmod/graphics/icons/maximize_black.png b/helmod/graphics/icons/maximize_black.png new file mode 100644 index 00000000..27a0a21f Binary files /dev/null and b/helmod/graphics/icons/maximize_black.png differ diff --git a/helmod/graphics/icons/maximize_white.png b/helmod/graphics/icons/maximize_white.png new file mode 100644 index 00000000..8d6e3f97 Binary files /dev/null and b/helmod/graphics/icons/maximize_white.png differ diff --git a/helmod/graphics/icons/minimize_black.png b/helmod/graphics/icons/minimize_black.png new file mode 100644 index 00000000..394d0f20 Binary files /dev/null and b/helmod/graphics/icons/minimize_black.png differ diff --git a/helmod/graphics/icons/minimize_white.png b/helmod/graphics/icons/minimize_white.png new file mode 100644 index 00000000..185bed67 Binary files /dev/null and b/helmod/graphics/icons/minimize_white.png differ diff --git a/helmod/graphics/icons/parameter_black.png b/helmod/graphics/icons/parameter_black.png new file mode 100644 index 00000000..bbc4bd91 Binary files /dev/null and b/helmod/graphics/icons/parameter_black.png differ diff --git a/helmod/graphics/icons/parameter_white.png b/helmod/graphics/icons/parameter_white.png new file mode 100644 index 00000000..9efde4e2 Binary files /dev/null and b/helmod/graphics/icons/parameter_white.png differ diff --git a/helmod/graphics/icons/paste_black.png b/helmod/graphics/icons/paste_black.png new file mode 100644 index 00000000..73b4d1d4 Binary files /dev/null and b/helmod/graphics/icons/paste_black.png differ diff --git a/helmod/graphics/icons/paste_white.png b/helmod/graphics/icons/paste_white.png new file mode 100644 index 00000000..b4c105f3 Binary files /dev/null and b/helmod/graphics/icons/paste_white.png differ diff --git a/helmod/graphics/icons/pause_black.png b/helmod/graphics/icons/pause_black.png new file mode 100644 index 00000000..9623d884 Binary files /dev/null and b/helmod/graphics/icons/pause_black.png differ diff --git a/helmod/graphics/icons/pause_white.png b/helmod/graphics/icons/pause_white.png new file mode 100644 index 00000000..8b228b53 Binary files /dev/null and b/helmod/graphics/icons/pause_white.png differ diff --git a/helmod/graphics/icons/pen_four_black.png b/helmod/graphics/icons/pen_four_black.png new file mode 100644 index 00000000..e6d00b3f Binary files /dev/null and b/helmod/graphics/icons/pen_four_black.png differ diff --git a/helmod/graphics/icons/pen_four_white.png b/helmod/graphics/icons/pen_four_white.png new file mode 100644 index 00000000..3eedb406 Binary files /dev/null and b/helmod/graphics/icons/pen_four_white.png differ diff --git a/helmod/graphics/icons/pinned_item_black.png b/helmod/graphics/icons/pinned_item_black.png new file mode 100644 index 00000000..6f9c7eb1 Binary files /dev/null and b/helmod/graphics/icons/pinned_item_black.png differ diff --git a/helmod/graphics/icons/pinned_item_white.png b/helmod/graphics/icons/pinned_item_white.png new file mode 100644 index 00000000..95793681 Binary files /dev/null and b/helmod/graphics/icons/pinned_item_white.png differ diff --git a/helmod/graphics/icons/plugged_black.png b/helmod/graphics/icons/plugged_black.png new file mode 100644 index 00000000..8eb39c91 Binary files /dev/null and b/helmod/graphics/icons/plugged_black.png differ diff --git a/helmod/graphics/icons/plugged_white.png b/helmod/graphics/icons/plugged_white.png new file mode 100644 index 00000000..d92ebce5 Binary files /dev/null and b/helmod/graphics/icons/plugged_white.png differ diff --git a/helmod/graphics/icons/process_black.png b/helmod/graphics/icons/process_black.png new file mode 100644 index 00000000..11a4c80b Binary files /dev/null and b/helmod/graphics/icons/process_black.png differ diff --git a/helmod/graphics/icons/process_white.png b/helmod/graphics/icons/process_white.png new file mode 100644 index 00000000..7079861e Binary files /dev/null and b/helmod/graphics/icons/process_white.png differ diff --git a/helmod/graphics/icons/property_black.png b/helmod/graphics/icons/property_black.png new file mode 100644 index 00000000..145606d4 Binary files /dev/null and b/helmod/graphics/icons/property_black.png differ diff --git a/helmod/graphics/icons/property_white.png b/helmod/graphics/icons/property_white.png new file mode 100644 index 00000000..42ea45a5 Binary files /dev/null and b/helmod/graphics/icons/property_white.png differ diff --git a/helmod/graphics/icons/push_pin_black.png b/helmod/graphics/icons/push_pin_black.png new file mode 100644 index 00000000..b321a88a Binary files /dev/null and b/helmod/graphics/icons/push_pin_black.png differ diff --git a/helmod/graphics/icons/push_pin_unpin_black.png b/helmod/graphics/icons/push_pin_unpin_black.png new file mode 100644 index 00000000..da305eb4 Binary files /dev/null and b/helmod/graphics/icons/push_pin_unpin_black.png differ diff --git a/helmod/graphics/icons/push_pin_unpin_white.png b/helmod/graphics/icons/push_pin_unpin_white.png new file mode 100644 index 00000000..9aa9fe91 Binary files /dev/null and b/helmod/graphics/icons/push_pin_unpin_white.png differ diff --git a/helmod/graphics/icons/push_pin_white.png b/helmod/graphics/icons/push_pin_white.png new file mode 100644 index 00000000..b29917d1 Binary files /dev/null and b/helmod/graphics/icons/push_pin_white.png differ diff --git a/helmod/graphics/icons/refresh_black.png b/helmod/graphics/icons/refresh_black.png new file mode 100644 index 00000000..9b4fa144 Binary files /dev/null and b/helmod/graphics/icons/refresh_black.png differ diff --git a/helmod/graphics/icons/refresh_white.png b/helmod/graphics/icons/refresh_white.png new file mode 100644 index 00000000..17373ab7 Binary files /dev/null and b/helmod/graphics/icons/refresh_white.png differ diff --git a/helmod/graphics/icons/remove_black.png b/helmod/graphics/icons/remove_black.png new file mode 100644 index 00000000..262a8752 Binary files /dev/null and b/helmod/graphics/icons/remove_black.png differ diff --git a/helmod/graphics/icons/remove_white.png b/helmod/graphics/icons/remove_white.png new file mode 100644 index 00000000..a0d9f0a3 Binary files /dev/null and b/helmod/graphics/icons/remove_white.png differ diff --git a/helmod/graphics/icons/run_black.png b/helmod/graphics/icons/run_black.png new file mode 100644 index 00000000..0615b42b Binary files /dev/null and b/helmod/graphics/icons/run_black.png differ diff --git a/helmod/graphics/icons/run_test_black.png b/helmod/graphics/icons/run_test_black.png new file mode 100644 index 00000000..f7a9171c Binary files /dev/null and b/helmod/graphics/icons/run_test_black.png differ diff --git a/helmod/graphics/icons/run_test_white.png b/helmod/graphics/icons/run_test_white.png new file mode 100644 index 00000000..d2a18df4 Binary files /dev/null and b/helmod/graphics/icons/run_test_white.png differ diff --git a/helmod/graphics/icons/run_white.png b/helmod/graphics/icons/run_white.png new file mode 100644 index 00000000..0aeb61e1 Binary files /dev/null and b/helmod/graphics/icons/run_white.png differ diff --git a/helmod/graphics/icons/save_black.png b/helmod/graphics/icons/save_black.png new file mode 100644 index 00000000..770efd55 Binary files /dev/null and b/helmod/graphics/icons/save_black.png differ diff --git a/helmod/graphics/icons/save_white.png b/helmod/graphics/icons/save_white.png new file mode 100644 index 00000000..aa32c8cb Binary files /dev/null and b/helmod/graphics/icons/save_white.png differ diff --git a/helmod/graphics/icons/script_black.png b/helmod/graphics/icons/script_black.png new file mode 100644 index 00000000..50d9c3d8 Binary files /dev/null and b/helmod/graphics/icons/script_black.png differ diff --git a/helmod/graphics/icons/script_white.png b/helmod/graphics/icons/script_white.png new file mode 100644 index 00000000..32bf1d69 Binary files /dev/null and b/helmod/graphics/icons/script_white.png differ diff --git a/helmod/graphics/icons/search_black.png b/helmod/graphics/icons/search_black.png new file mode 100644 index 00000000..6b87197f Binary files /dev/null and b/helmod/graphics/icons/search_black.png differ diff --git a/helmod/graphics/icons/search_white.png b/helmod/graphics/icons/search_white.png new file mode 100644 index 00000000..513eea10 Binary files /dev/null and b/helmod/graphics/icons/search_white.png differ diff --git a/helmod/graphics/icons/settings_black.png b/helmod/graphics/icons/settings_black.png new file mode 100644 index 00000000..494635e1 Binary files /dev/null and b/helmod/graphics/icons/settings_black.png differ diff --git a/helmod/graphics/icons/settings_white.png b/helmod/graphics/icons/settings_white.png new file mode 100644 index 00000000..ba4babdf Binary files /dev/null and b/helmod/graphics/icons/settings_white.png differ diff --git a/helmod/graphics/icons/shortcut-toolbar-24-white.png b/helmod/graphics/icons/shortcut-toolbar-24-white.png new file mode 100644 index 00000000..0da713f9 Binary files /dev/null and b/helmod/graphics/icons/shortcut-toolbar-24-white.png differ diff --git a/helmod/graphics/icons/shortcut-toolbar-24.png b/helmod/graphics/icons/shortcut-toolbar-24.png new file mode 100644 index 00000000..0e04bf1e Binary files /dev/null and b/helmod/graphics/icons/shortcut-toolbar-24.png differ diff --git a/helmod/graphics/icons/shortcut-toolbar-32-white.png b/helmod/graphics/icons/shortcut-toolbar-32-white.png new file mode 100644 index 00000000..789bf7cb Binary files /dev/null and b/helmod/graphics/icons/shortcut-toolbar-32-white.png differ diff --git a/helmod/graphics/icons/shortcut-toolbar-32.png b/helmod/graphics/icons/shortcut-toolbar-32.png new file mode 100644 index 00000000..ee8be5ce Binary files /dev/null and b/helmod/graphics/icons/shortcut-toolbar-32.png differ diff --git a/helmod/graphics/icons/skull_black.png b/helmod/graphics/icons/skull_black.png new file mode 100644 index 00000000..b9095bed Binary files /dev/null and b/helmod/graphics/icons/skull_black.png differ diff --git a/helmod/graphics/icons/skull_white.png b/helmod/graphics/icons/skull_white.png new file mode 100644 index 00000000..cb962c30 Binary files /dev/null and b/helmod/graphics/icons/skull_white.png differ diff --git a/helmod/graphics/icons/status_help_black.png b/helmod/graphics/icons/status_help_black.png new file mode 100644 index 00000000..c15bd75b Binary files /dev/null and b/helmod/graphics/icons/status_help_black.png differ diff --git a/helmod/graphics/icons/status_help_white.png b/helmod/graphics/icons/status_help_white.png new file mode 100644 index 00000000..c9c4258a Binary files /dev/null and b/helmod/graphics/icons/status_help_white.png differ diff --git a/helmod/graphics/icons/status_information_black.png b/helmod/graphics/icons/status_information_black.png new file mode 100644 index 00000000..bca932cb Binary files /dev/null and b/helmod/graphics/icons/status_information_black.png differ diff --git a/helmod/graphics/icons/status_information_white.png b/helmod/graphics/icons/status_information_white.png new file mode 100644 index 00000000..8f142cef Binary files /dev/null and b/helmod/graphics/icons/status_information_white.png differ diff --git a/helmod/graphics/icons/status_ok_black.png b/helmod/graphics/icons/status_ok_black.png new file mode 100644 index 00000000..e2586be9 Binary files /dev/null and b/helmod/graphics/icons/status_ok_black.png differ diff --git a/helmod/graphics/icons/status_ok_white.png b/helmod/graphics/icons/status_ok_white.png new file mode 100644 index 00000000..25f64b2c Binary files /dev/null and b/helmod/graphics/icons/status_ok_white.png differ diff --git a/helmod/graphics/icons/steam_heat_black.png b/helmod/graphics/icons/steam_heat_black.png new file mode 100644 index 00000000..11dd4c87 Binary files /dev/null and b/helmod/graphics/icons/steam_heat_black.png differ diff --git a/helmod/graphics/icons/steam_heat_white.png b/helmod/graphics/icons/steam_heat_white.png new file mode 100644 index 00000000..754c5f3e Binary files /dev/null and b/helmod/graphics/icons/steam_heat_white.png differ diff --git a/helmod/graphics/icons/text_block_black.png b/helmod/graphics/icons/text_block_black.png new file mode 100644 index 00000000..08a1cf2f Binary files /dev/null and b/helmod/graphics/icons/text_block_black.png differ diff --git a/helmod/graphics/icons/text_block_white.png b/helmod/graphics/icons/text_block_white.png new file mode 100644 index 00000000..1f0287ee Binary files /dev/null and b/helmod/graphics/icons/text_block_white.png differ diff --git a/helmod/graphics/icons/three_rows_black.png b/helmod/graphics/icons/three_rows_black.png new file mode 100644 index 00000000..4b85ed41 Binary files /dev/null and b/helmod/graphics/icons/three_rows_black.png differ diff --git a/helmod/graphics/icons/three_rows_white.png b/helmod/graphics/icons/three_rows_white.png new file mode 100644 index 00000000..46ef17fb Binary files /dev/null and b/helmod/graphics/icons/three_rows_white.png differ diff --git a/helmod/graphics/icons/time_black.png b/helmod/graphics/icons/time_black.png new file mode 100644 index 00000000..4ff20a80 Binary files /dev/null and b/helmod/graphics/icons/time_black.png differ diff --git a/helmod/graphics/icons/time_white.png b/helmod/graphics/icons/time_white.png new file mode 100644 index 00000000..53512a40 Binary files /dev/null and b/helmod/graphics/icons/time_white.png differ diff --git a/helmod/graphics/icons/tooltip-blank.png b/helmod/graphics/icons/tooltip-blank.png new file mode 100644 index 00000000..75e3f274 Binary files /dev/null and b/helmod/graphics/icons/tooltip-blank.png differ diff --git a/helmod/graphics/icons/tooltip_add_yellow.png b/helmod/graphics/icons/tooltip_add_yellow.png new file mode 100644 index 00000000..e73aab21 Binary files /dev/null and b/helmod/graphics/icons/tooltip_add_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_edit_yellow.png b/helmod/graphics/icons/tooltip_edit_yellow.png new file mode 100644 index 00000000..59d32a66 Binary files /dev/null and b/helmod/graphics/icons/tooltip_edit_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_erase_yellow.png b/helmod/graphics/icons/tooltip_erase_yellow.png new file mode 100644 index 00000000..55b8ba48 Binary files /dev/null and b/helmod/graphics/icons/tooltip_erase_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_expand_right_group_yellow.png b/helmod/graphics/icons/tooltip_expand_right_group_yellow.png new file mode 100644 index 00000000..205f45b1 Binary files /dev/null and b/helmod/graphics/icons/tooltip_expand_right_group_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_expand_right_yellow.png b/helmod/graphics/icons/tooltip_expand_right_yellow.png new file mode 100644 index 00000000..f0daa917 Binary files /dev/null and b/helmod/graphics/icons/tooltip_expand_right_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_favorite_yellow.png b/helmod/graphics/icons/tooltip_favorite_yellow.png new file mode 100644 index 00000000..5bd507a7 Binary files /dev/null and b/helmod/graphics/icons/tooltip_favorite_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_information_white.png b/helmod/graphics/icons/tooltip_information_white.png new file mode 100644 index 00000000..7ef32943 Binary files /dev/null and b/helmod/graphics/icons/tooltip_information_white.png differ diff --git a/helmod/graphics/icons/tooltip_pipette_yellow.png b/helmod/graphics/icons/tooltip_pipette_yellow.png new file mode 100644 index 00000000..221fd2ca Binary files /dev/null and b/helmod/graphics/icons/tooltip_pipette_yellow.png differ diff --git a/helmod/graphics/icons/tooltip_remove_yellow.png b/helmod/graphics/icons/tooltip_remove_yellow.png new file mode 100644 index 00000000..67f0d364 Binary files /dev/null and b/helmod/graphics/icons/tooltip_remove_yellow.png differ diff --git a/helmod/graphics/icons/transport_black.png b/helmod/graphics/icons/transport_black.png new file mode 100644 index 00000000..2d413472 Binary files /dev/null and b/helmod/graphics/icons/transport_black.png differ diff --git a/helmod/graphics/icons/transport_white.png b/helmod/graphics/icons/transport_white.png new file mode 100644 index 00000000..44ff6730 Binary files /dev/null and b/helmod/graphics/icons/transport_white.png differ diff --git a/helmod/graphics/icons/two_rows_black.png b/helmod/graphics/icons/two_rows_black.png new file mode 100644 index 00000000..6ebda94a Binary files /dev/null and b/helmod/graphics/icons/two_rows_black.png differ diff --git a/helmod/graphics/icons/two_rows_white.png b/helmod/graphics/icons/two_rows_white.png new file mode 100644 index 00000000..24f97ba8 Binary files /dev/null and b/helmod/graphics/icons/two_rows_white.png differ diff --git a/helmod/graphics/icons/unplugged_black.png b/helmod/graphics/icons/unplugged_black.png new file mode 100644 index 00000000..c62617f6 Binary files /dev/null and b/helmod/graphics/icons/unplugged_black.png differ diff --git a/helmod/graphics/icons/unplugged_white.png b/helmod/graphics/icons/unplugged_white.png new file mode 100644 index 00000000..218a0bae Binary files /dev/null and b/helmod/graphics/icons/unplugged_white.png differ diff --git a/helmod/graphics/icons/upload_document_black.png b/helmod/graphics/icons/upload_document_black.png new file mode 100644 index 00000000..9fa81b05 Binary files /dev/null and b/helmod/graphics/icons/upload_document_black.png differ diff --git a/helmod/graphics/icons/upload_document_white.png b/helmod/graphics/icons/upload_document_white.png new file mode 100644 index 00000000..e3ab0348 Binary files /dev/null and b/helmod/graphics/icons/upload_document_white.png differ diff --git a/helmod/graphics/switch-quickbar.png b/helmod/graphics/switch-quickbar.png new file mode 100644 index 00000000..bd94168e Binary files /dev/null and b/helmod/graphics/switch-quickbar.png differ diff --git a/helmod/gui/Gui.lua b/helmod/gui/Gui.lua new file mode 100644 index 00000000..b73cf36d --- /dev/null +++ b/helmod/gui/Gui.lua @@ -0,0 +1,20 @@ +require "gui.GuiElement" +require "gui.GuiEmptyWidget" +require "gui.GuiButton" +require "gui.GuiCell" +require "gui.GuiCheckBox" +require "gui.GuiDropDown" +require "gui.GuiFlow" +require "gui.GuiFrame" +require "gui.GuiLabel" +require "gui.GuiListBox" +require "gui.GuiLine" +require "gui.GuiScroll" +require "gui.GuiSlider" +require "gui.GuiSprite" +require "gui.GuiSwitch" +require "gui.GuiTab" +require "gui.GuiTable" +require "gui.GuiTextBox" +require "gui.GuiTextField" +require "gui.GuiTooltip" \ No newline at end of file diff --git a/helmod/gui/GuiButton.lua b/helmod/gui/GuiButton.lua new file mode 100644 index 00000000..5ac33046 --- /dev/null +++ b/helmod/gui/GuiButton.lua @@ -0,0 +1,216 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiButton +---@class GuiButton +GuiButton = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiButton" + base.options.type = "button" + base.options.style = "helmod_button_default" +end) + +------------------------------------------------------------------------------- +---Set Sprite +---@param type string +---@param name string +---@param hovered string +---@return GuiButton +function GuiButton:sprite(type, name, hovered) + self.options.type = "sprite-button" + self.is_caption = false + if type == "menu" then + self.options.sprite = GuiElement.getSprite(name) + if hovered then + self.options.hovered_sprite = GuiElement.getSprite(hovered) + end + elseif type == "energy" and defines.sprite_tooltips[name] ~= nil then + self.options.sprite = GuiElement.getSprite(defines.sprite_tooltips[name]) + if hovered then + self.options.hovered_sprite = GuiElement.getSprite(hovered) + end + table.insert(self.name, name) + else + self.options.sprite = GuiElement.getSprite(type, name) + if hovered then + self.options.hovered_sprite = GuiElement.getSprite(type, hovered) + end + table.insert(self.name, name) + end + return self +end + +------------------------------------------------------------------------------- +---Set option +---@param name string +---@param value any +---@return GuiButton +function GuiButton:option(name, value) + self.options[name] = value +end + +------------------------------------------------------------------------------- +---Set index +---@param index number +---@return GuiButton +function GuiButton:index(index) + self.m_index = index + table.insert(self.name, index) + return self +end + +------------------------------------------------------------------------------- +---Set index +---@param value number +---@return GuiButton +function GuiButton:number(value) + self.options.number = value + return self +end + +------------------------------------------------------------------------------- +---Set Choose button style +---@param type string +---@param name string +---@return GuiButton +function GuiButton:choose(type, name, key) + self.options.type = "choose-elem-button" + self.options.elem_type = type + self.options[type] = name + table.insert(self.name, key or name) + return self +end + +------------------------------------------------------------------------------- +---Get options +---@return table +function GuiButton:onErrorOptions() + local options = self:getOptions() + options.style = "helmod_button_default" + options.type = "button" + if (type(options.caption) == "boolean") then + Logging:error(self.classname, "addGuiButton - caption is a boolean") + elseif self.m_caption ~= nil then + options.caption = self.m_caption + else + options.caption = options.key + end + return options +end + +------------------------------------------------------------------------------- +---@class GuiButtonSprite +GuiButtonSprite = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_icon" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---@class GuiButtonSelectSprite +GuiButtonSelectSprite = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_select_icon" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiButtonSelectSprite +function GuiButtonSelectSprite:color(color) + local style = "helmod_button_select_icon" + if color == "red" then style = "helmod_button_select_icon_red" end + if color == "yellow" then style = "helmod_button_select_icon_yellow" end + if color == "green" then style = "helmod_button_select_icon_green" end + if color == "flat" then style = "helmod_button_select_icon_flat" end + self.options.style = style + return self +end + +------------------------------------------------------------------------------- +---@class GuiButtonSpriteM +GuiButtonSpriteM = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_icon_m" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---@class GuiButtonSelectSpriteM +GuiButtonSelectSpriteM = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_select_icon_m" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiButtonSelectSpriteM +function GuiButtonSelectSpriteM:color(color) + local style = "helmod_button_select_icon_m" + if color == "red" then style = "helmod_button_select_icon_m_red" end + if color == "yellow" then style = "helmod_button_select_icon_m_yellow" end + if color == "green" then style = "helmod_button_select_icon_m_green" end + if color == "flat" then style = "helmod_button_select_icon_m_flat" end + self.options.style = style + return self +end + +------------------------------------------------------------------------------- +---@class GuiButtonSpriteSm +GuiButtonSpriteSm = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_icon_sm" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---@class GuiButtonSelectSpriteSm +GuiButtonSelectSpriteSm = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_select_icon_sm" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiButtonSelectSpriteSm +function GuiButtonSelectSpriteSm:color(color) + local style = "helmod_button_select_icon_sm" + if color == "red" then style = "helmod_button_select_icon_sm_red" end + if color == "yellow" then style = "helmod_button_select_icon_sm_yellow" end + if color == "green" then style = "helmod_button_select_icon_sm_green" end + if color == "flat" then style = "helmod_button_select_icon_sm_flat" end + self.options.style = style + return self +end + +------------------------------------------------------------------------------- +---@class GuiButtonSpriteXxl +GuiButtonSpriteXxl = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_icon_xxl" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---@class GuiButtonSelectSpriteXxl +GuiButtonSelectSpriteXxl = newclass(GuiButton,function(base,...) + GuiButton.init(base,...) + base.options.style = "helmod_button_select_icon_xxl" + base.is_caption = false +end) + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiButtonSelectSpriteXxl +function GuiButtonSelectSpriteXxl:color(color) + local style = "helmod_button_select_icon_xxl" + if color == "red" then style = "helmod_button_select_icon_xxl_red" end + if color == "yellow" then style = "helmod_button_select_icon_xxl_yellow" end + if color == "green" then style = "helmod_button_select_icon_xxl_green" end + self.options.style = style + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiCell.lua b/helmod/gui/GuiCell.lua new file mode 100644 index 00000000..37ee25bd --- /dev/null +++ b/helmod/gui/GuiCell.lua @@ -0,0 +1,899 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiSlider +---@class GuiCell +GuiCell = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiCell" +end) + +------------------------------------------------------------------------------- +---Set element +---@param element table +---@return GuiCell +function GuiCell:element(element) + self.element = element + return self +end + +------------------------------------------------------------------------------- +---Set index +---@param index number +---@return GuiCell +function GuiCell:index(index) + self.m_index = index + return self +end + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiCell +function GuiCell:color(color) + self.m_color = color + return self +end + +------------------------------------------------------------------------------- +---Set broken +---@param broken boolean +---@return GuiCell +function GuiCell:broken(broken) + self.m_broken = broken + return self +end + +------------------------------------------------------------------------------- +---Set width production information +---@return GuiCell +function GuiCell:withProductInfo() + self.m_with_product_info = true + return self +end + +------------------------------------------------------------------------------- +---Set width logistic information +---@return GuiCell +function GuiCell:withLogistic() + self.m_with_logistic = true + return self +end + +------------------------------------------------------------------------------- +---Set icon information +---@param type string +---@return GuiCell +function GuiCell:infoIcon(type) + self.m_info_icon = type + return self +end + +------------------------------------------------------------------------------- +---Set contraint information +---@param type string +---@return GuiCell +function GuiCell:contraintIcon(type) + self.m_contraint_icon = type + return self +end + +------------------------------------------------------------------------------- +---Set control information +---@param control_info string +---@return GuiCell +function GuiCell:controlInfo(control_info) + self.m_with_control_info = control_info + return self +end + +------------------------------------------------------------------------------- +---Get option when error +---@return table +function GuiCell:onErrorOptions() + local options = self:getOptions() + options.type = "button" + options.style = nil + return options +end + +------------------------------------------------------------------------------- +---Set by_limit information +---@param by_limit boolean +---@return GuiCell +function GuiCell:byLimit(by_limit) + self.m_by_limit = by_limit + return self +end + +------------------------------------------------------------------------------- +---Set by_limit information +---@return GuiCell +function GuiCell:byLimitUri(...) + self.m_by_limit_uri = table.concat({...},"=") + return self +end + +------------------------------------------------------------------------------- +---Set overlay +---@param type string +---@param name string +---@return GuiCell +function GuiCell:overlay(type, name) + self.m_overlay_type = type + self.m_overlay_name = name + return self +end + +------------------------------------------------------------------------------- +---Add overlay +---@param button LuaGuiElement +function GuiCell:add_overlay(button) + if self.m_overlay_type ~= nil then + local sprite = GuiElement.getSprite(self.m_overlay_type, self.m_overlay_name) + GuiElement.add(button, GuiSprite("overlay"):sprite(sprite)) + end +end + +------------------------------------------------------------------------------- +---Set mask +---@param mask boolean +---@return table +function GuiCell:mask(mask) + self.m_mask = mask + return self +end + +------------------------------------------------------------------------------- +---Add mask +---@param button LuaGuiElement +---@param color string +---@param size number +function GuiCell:add_mask(button, color, size) + if self.m_mask == true then + local mask_frame = GuiElement.add(button, GuiFrameH("layer-mask"):style("helmod_frame_colored", color, 5)) + mask_frame.style.width = size or 32 + mask_frame.style.height = size or 32 + mask_frame.ignored_by_interaction = true + end +end + +------------------------------------------------------------------------------- +---Add icon information +---@param button LuaGuiElement +---@param info_icon string +function GuiCell:add_infoIcon(button, info_icon) + local type = info_icon or self.m_info_icon + if type == nil then return end + local sprite_name = nil + local tooltip = nil + if type == "recipe-burnt" then + tooltip = "tooltip.burnt-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.burnt) + end + if type == "rocket" then + tooltip = "tooltip.rocket-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.rocket) + end + if type == "fluid" then + tooltip = "tooltip.resource-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.developer) + end + if type == "resource" then + tooltip = "tooltip.resource-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.developer) + end + if type == "technology" then + tooltip = "tooltip.technology-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.education) + end + if type == "energy" then + tooltip = "tooltip.energy-recipe" + sprite_name = GuiElement.getSprite(defines.sprite_info.energy) + end + if type == "burnt" then + tooltip = "tooltip.burnt-product" + sprite_name = GuiElement.getSprite(defines.sprite_info.burnt) + end + if type == "block" then + sprite_name = GuiElement.getSprite(defines.sprite_info.block) + end + if sprite_name ~= nil then + local container = GuiElement.add(button, GuiFlow(type)) + if type == "block" then + container.style.top_padding = 16 + container.ignored_by_interaction = true + else + container.style.top_padding = -4 + end + + local gui_sprite = GuiSprite("info"):sprite(sprite_name) + if tooltip ~= nil then + gui_sprite:tooltip({tooltip}) + end + local sprite = GuiElement.add(container, gui_sprite) + sprite.style.width = defines.sprite_size + sprite.style.height = defines.sprite_size + sprite.style.stretch_image_to_widget_size = true + end +end + +------------------------------------------------------------------------------- +---Add contraint information +---@param button LuaGuiElement +function GuiCell:add_contraintIcon(button) + if self.m_contraint_icon == nil then return end + local sprite_name = nil + if self.m_contraint_icon == "linked" then + sprite_name = GuiElement.getSprite(defines.sprite_info.linked) + end + if self.m_contraint_icon == "master" then + sprite_name = GuiElement.getSprite(defines.sprite_info.master) + end + if self.m_contraint_icon == "exclude" then + sprite_name = GuiElement.getSprite(defines.sprite_info.exclude) + end + if sprite_name ~= nil then + local sprite = GuiElement.add(button, GuiSprite("contraint"):sprite(sprite_name)) + sprite.style.width = defines.sprite_size + sprite.style.height = defines.sprite_size + sprite.style.stretch_image_to_widget_size = true + sprite.ignored_by_interaction = true + end +end + +------------------------------------------------------------------------------- +---Add logistic information +---@param parent LuaGuiElement +---@param element table +function GuiCell:add_row_logistic(parent, element) + local tooltip = {"tooltip.logistic-row-choose"} + ---solid logistic + if element.type == 0 or element.type == "item" then + local type = User.getParameter("logistic_row_item") or "belt" + local item_logistic = Player.getDefaultItemLogistic(type) + local item_prototype = Product(element) + local total_value = Format.formatNumberElement(item_prototype:countContainer(element.count, item_logistic, element.time)) + + --local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name}) + local logistic_cell = GuiElement.add(parent, GuiFlowH("logistic-cell", item_logistic)) + GuiElement.add(logistic_cell, GuiButtonSelectSpriteSm("HMLogisticEdition", "OPEN", "item", item_logistic):sprite("entity", item_logistic):color("flat"):tooltip(tooltip)) + if element.limit_count ~= nil and element.limit_count > 0 then + local limit_value = Format.formatNumberElement(item_prototype:countContainer(element.limit_count, item_logistic, element.time)) + GuiElement.add(logistic_cell, GuiLabel("label", item_logistic):caption({"", "x", limit_value, "/", total_value}):style("helmod_label_element")) + else + GuiElement.add(logistic_cell, GuiLabel("label", item_logistic):caption({"", "x", total_value}):style("helmod_label_element")) + end + end + ---fluid logistic + if element.type == 1 or element.type == "fluid" then + local type = User.getParameter("logistic_row_fluid") or "pipe" + local fluid_logistic = Player.getDefaultFluidLogistic(type) + local fluid_prototype = Product(element) + local count = element.count + if type == "pipe" then count = count / element.time end + local total_value = Format.formatNumberElement(fluid_prototype:countContainer(count, fluid_logistic, element.time)) + + --local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name}) + local logistic_cell = GuiElement.add(parent, GuiFlowH("logistic-cell", fluid_logistic)) + GuiElement.add(logistic_cell, GuiButtonSelectSpriteSm("HMLogisticEdition", "OPEN", "fluid", fluid_logistic):sprite("entity", fluid_logistic):color("flat"):tooltip(tooltip)) + if element.limit_count ~= nil and element.limit_count > 0 then + local limit_count = element.limit_count + if type == "pipe" then limit_count = limit_count / element.time end + local limit_value = Format.formatNumberElement(fluid_prototype:countContainer(limit_count, fluid_logistic, element.time)) + GuiElement.add(logistic_cell, GuiLabel("label", fluid_logistic):caption({"", "x", limit_value, "/", total_value}):style("helmod_label_element")) + else + GuiElement.add(logistic_cell, GuiLabel("label", fluid_logistic):caption({"", "x", total_value}):style("helmod_label_element")) + end + end +end + +------------------------------------------------------------------------------- +---@class GuiCellFactory +GuiCellFactory = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---By Factory +function GuiCellFactory:byFactory(...) + self.m_by_factory = true + self.m_by_factory_uri = table.concat({...},"=") +end + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellFactory:create(parent) + local color = self.m_color or "gray" + local factory = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(factory.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1)) + + local tooltip = GuiTooltipElement(self.options.tooltip):element(factory):withEnergy():withEffectInfo(factory.effects ~= nil):withControlInfo(self.m_with_control_info) + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("entity", factory.name):tooltip(tooltip)) + + self:add_mask(button, color) + + local cell_factory_info = GuiElement.add(row1, GuiTable("factory-info"):column(1):style("helmod_factory_info")) + if factory.per_factory then + local per_factory = factory.per_factory or 0 + local per_factory_constant = factory.per_factory_constant or 0 + GuiElement.add(cell_factory_info, GuiLabel("per_factory"):caption({"", "x", per_factory}):style("helmod_label_element"):tooltip({"tooltip.beacon-per-factory"})) + GuiElement.add(cell_factory_info, GuiLabel("per_factory_constant"):caption({"", "+", per_factory_constant}):style("helmod_label_element"):tooltip({"tooltip.beacon-per-factory-constant"})) + end + + local col_size = math.ceil(table.size(factory.modules)/2) + if col_size < 2 then col_size = 1 end + local cell_factory_module = GuiElement.add(row1, GuiTable("factory-modules"):column(col_size):style("helmod_factory_modules")) + + ---modules + if factory.modules ~= nil then + for name, count in pairs(factory.modules) do + if count > 0 then + local module_cell = GuiElement.add(cell_factory_module, GuiFlowH("module-cell", name)) + local tooltip = GuiTooltipModule("tooltip.info-module"):element({type="item", name=name}) + local module_icon = GuiElement.add(module_cell, GuiButtonSpriteSm("module"):sprite("item", name):tooltip(tooltip)) + + self:add_mask(module_icon, color, 16) + + GuiElement.add(module_cell, GuiLabel("module-amount"):caption({"", "x", count}):style("helmod_label_element")) + end + end + end + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2)) + local limit_value = factory.limit_count or 0 + if type(factory.limit) == "number" and factory.limit > 0 then + limit_value = factory.limit + end + if self.m_by_limit_uri ~= nil then + local style = "helmod_textfield_element" + if type(factory.limit) == "number" and factory.limit > 0 then + style = "helmod_textfield_element_red" + end + local text_field = GuiElement.add(row2, GuiTextField(self.m_by_limit_uri):text(Format.formatNumberFactory(limit_value)):style(style):tooltip({"helmod_common.per-sub-block"})) + text_field.style.height = 19 + text_field.style.width = 70 + else + GuiElement.add(row2, GuiLabel("label2", factory.name):caption(Format.formatNumberFactory(limit_value)):style("helmod_label_element"):tooltip({"helmod_common.per-sub-block"})) + end + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3)) + if self.m_by_factory then + local style = "helmod_textfield_element" + if factory.input ~= nil then + style = "helmod_textfield_element_red" + end + local text_field = GuiElement.add(row3, GuiTextField(self.m_by_factory_uri):text(Format.formatNumberFactory(factory.input or factory.count or 0)):style(style):tooltip({"helmod_common.total"})) + text_field.style.height = 19 + text_field.style.width = 70 + else + GuiElement.add(row3, GuiLabel("label3", factory.name):caption(Format.formatNumberFactory(factory.count)):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellRecipe +GuiCellRecipe = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellRecipe:create(parent) + local color = self.m_color or "gray" + local recipe = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(recipe.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + + local recipe_prototype = RecipePrototype(recipe) + local icon_name, icon_type = recipe_prototype:getIcon() + local tooltip = GuiTooltipRecipe(self.options.tooltip):element(recipe) + local recipe_icon = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(icon_type, icon_name):tooltip(tooltip)) + + self:add_overlay(recipe_icon) + self:add_infoIcon(recipe_icon) + self:add_mask(recipe_icon, color) + + if self.m_broken == true then + recipe_icon.tooltip = "ERROR: Recipe ".. recipe.name .." not exist in game" + recipe_icon.sprite = "utility/warning_icon" + row1.style = "helmod_frame_product_red_1" + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + GuiElement.add(row3, GuiLabel("label2", recipe.name):caption(Format.formatPercent(recipe.production or 1).."%"):style("helmod_label_element"):tooltip({"helmod_common.total"})) + return cell, recipe_icon +end + +------------------------------------------------------------------------------- +---@class GuiCellProduct +GuiCellProduct = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellProduct:create(parent) + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + + if string.find(element.name, "helmod") then + GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", element.hovered, element.sprite):style(element.name):tooltip({element.localised_name})) + else + local product_icon = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip({self.options.tooltip, Player.getLocalisedName(element)})) + self:add_mask(product_icon, color) + end + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + GuiElement.add(row3, GuiLabel("label2", element.name):caption(Format.formatNumber(element.count, 5)):style("helmod_label_element"):tooltip({"helmod_common.total"})) + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellProductSm +GuiCellProductSm = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellProductSm:create(parent) + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + + if string.find(element.name, "helmod") then + GuiElement.add(row1, GuiButton(unpack(self.name)):style(element.name):tooltip({element.localised_name})) + else + GuiElement.add(row1, GuiButtonSpriteSm(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip({self.options.tooltip, Player.getLocalisedName(element)})) + end + GuiElement.infoTemperature(row1, element) + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + local caption3 = Format.formatNumber(element.count, 5) + if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_sm"):tooltip({"helmod_common.total"})) + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellBlock +GuiCellBlock = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellBlock:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + + local first_recipe = Model.firstRecipe(element.recipes) + if first_recipe ~= nil then + local tooltip = GuiTooltipElement(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(first_recipe.type, element.name):tooltip(tooltip)) + + self:add_infoIcon(button, "block") + + GuiElement.infoRecipe(button, first_recipe) + else + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black)) + button.style.width = 36 + end + + if element.limit_count ~= nil then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2)) + local caption2 = Format.formatNumberFactory(element.limit_count) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + local caption3 = Format.formatNumberFactory(element.count) + if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellModel +GuiCellModel = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellModel:create(parent) + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + + local first_block = Model.firstRecipe(element.blocks) + if first_block ~= nil and first_block.name ~= "" then + local tooltip = GuiTooltipModel(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(first_block.type, first_block.name):tooltip(tooltip)) + else + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite("menu", defines.sprites.status_help.white, defines.sprites.status_help.black)) + button.style.width = 36 + end + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + local caption3 = Format.formatNumberFactory(table.size(element.blocks)) + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end +------------------------------------------------------------------------------- +---@class GuiCellBlockInfo +GuiCellBlockInfo = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellBlockInfo:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + row1.style.top_padding=4 + row1.style.bottom_padding=4 + + local tooltip = GuiTooltipBlock(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.hangar.white, defines.sprites.hangar.black):style("helmod_button_menu_flat"):tooltip(tooltip)) + + if element.limit_count ~= nil then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2)) + local caption2 = Format.formatNumberFactory(element.limit_count) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + local caption3 = Format.formatNumberFactory(element.count) + if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellEnergy +GuiCellEnergy = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellEnergy:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, "energy", self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1)) + row1.style.top_padding=4 + row1.style.bottom_padding=4 + + local tooltip = GuiTooltipEnergyConsumption(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.event.white, defines.sprites.event.black):style("helmod_button_menu_flat"):tooltip(tooltip)) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2)) + local caption2 = Format.formatNumberKilo(element.limit_energy or 0, "J") + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_energy) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3)) + local caption3 = Format.formatNumberKilo(element.energy_total or element.power, "J") + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellPollution +GuiCellPollution = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellPollution:create(parent) + local width = 60 + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, "pollution", self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + row1.style.top_padding=4 + row1.style.bottom_padding=4 + row1.style.minimal_width=width + + local tooltip = GuiTooltipPollution(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.skull.white, defines.sprites.skull.black):style("helmod_button_menu_flat"):tooltip(tooltip)) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2)) + row2.style.minimal_width=width + local caption2 = Format.formatNumber(element.limit_pollution or 0) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_pollution) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + row3.style.minimal_width=width + local caption3 = Format.formatNumber(element.pollution_total) + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellBuilding +GuiCellBuilding = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellBuilding:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or "gray" + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, "building", self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_product", color, 1)) + row1.style.top_padding=4 + row1.style.bottom_padding=4 + + local tooltip = GuiTooltipBuilding(self.options.tooltip):element(element) + local button = GuiElement.add(row1, GuiButton(unpack(self.name)):sprite("menu", defines.sprites.factory.white, defines.sprites.factory.black):style("helmod_button_menu_flat"):tooltip(tooltip)) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_product", color, 2)) + local caption2 = Format.formatNumber(element.summary.limit_building or 0) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.summary.limit_building) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_product", color, 3)) + local caption3 = Format.formatNumber(element.summary.building) + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellElement +GuiCellElement = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellElement:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or GuiElement.color_button_none + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index or 1)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element", color, 1)) + + local tooltip = "" + if element.type == "energy" then + tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info) + else + tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info) + end + local button = GuiElement.add(row1, GuiButtonSprite(unpack(self.name)):sprite(element.type or "entity", element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip)) + GuiElement.infoTemperature(row1, element) + + if element.burnt then self:add_infoIcon(button, "burnt") end + self:add_infoIcon(button) + self:add_contraintIcon(button) + self:add_mask(button, color) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element", color, 2)) + local caption2 = Format.formatNumberElement(element.limit_count) + if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element", color, 3)) + local caption3 = Format.formatNumberElement(element.count) + if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end + if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element"):tooltip({"helmod_common.total"})) + + if User.getParameter("display_logistic_row") == true then + local row4 = GuiElement.add(cell, GuiFrameH("row4"):style("helmod_frame_element", color, 4)) + self:add_row_logistic(row4, element) + GuiElement.add(row4, GuiLabel("label-empty"):caption(""):style("helmod_label_element")) + end + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellElementSm +GuiCellElementSm = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellElementSm:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or GuiElement.color_button_none + if self.m_mask == true then color = "gray" end + local element = self.element or {} + + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element_sm", color, 1)) + local tooltip = "" + if element.type == "energy" then + tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo() + else + tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo() + end + local button = GuiElement.add(row1, GuiButtonSpriteSm(unpack(self.name)):sprite(element.type, element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip)) + + self:add_mask(button, color, 16) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element_sm", color, 2)) + local caption2 = Format.formatNumberElement(element.limit_count) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end + if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element_sm"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element_sm", color, 3)) + local caption3 = Format.formatNumberElement(element.count) + if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end + if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_sm"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellElementM +GuiCellElementM = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellElementM:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local color = self.m_color or GuiElement.color_button_none + local element = self.element or {} + local cell = GuiElement.add(parent, GuiFlowV(element.name, self.m_index or 1)) + local row1 = GuiElement.add(cell, GuiFrameH("row1"):style("helmod_frame_element_m", color, 1)) + + local tooltip = "" + if element.type == "energy" then + tooltip = GuiTooltipEnergy(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info) + else + tooltip = GuiTooltipElement(self.options.tooltip):element(element):withLogistic():withProductInfo():withControlInfo(self.m_with_control_info) + end + local button = GuiElement.add(row1, GuiButtonSpriteM(unpack(self.name)):sprite(element.type or "entity", element.name):index(Product(element):getTableKey()):caption("X"..Product(element):getElementAmount()):tooltip(tooltip)) + GuiElement.infoTemperature(row1, element) + + self:add_infoIcon(button) + self:add_contraintIcon(button) + self:add_mask(button, color) + + if self.m_by_limit then + local row2 = GuiElement.add(cell, GuiFrameH("row2"):style("helmod_frame_element_m", color, 2)) + local caption2 = Format.formatNumberElement(element.limit_count) + if display_cell_mod == "by-kilo" then caption2 = Format.formatNumberKilo(element.limit_count) end + if element.type == "energy" then caption2 = Format.formatNumberKilo(element.limit_count, "J") end + GuiElement.add(row2, GuiLabel("label1", element.name):caption(caption2):style("helmod_label_element_m"):tooltip({"helmod_common.total"})) + end + + local row3 = GuiElement.add(cell, GuiFrameH("row3"):style("helmod_frame_element_m", color, 3)) + local caption3 = Format.formatNumberElement(element.count) + if display_cell_mod == "by-kilo" then caption3 = Format.formatNumberKilo(element.count) end + if element.type == "energy" then caption3 = Format.formatNumberKilo(element.count, "J") end + GuiElement.add(row3, GuiLabel("label2", element.name):caption(caption3):style("helmod_label_element_m"):tooltip({"helmod_common.total"})) + + return cell +end + +------------------------------------------------------------------------------- +---@class GuiCellInput +GuiCellInput = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Set text +---@return GuiCellInput +function GuiCellInput:text(text) + self.m_text = text + return self +end + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellInput:create(parent) + local cell_name = table.clone(self.name) + table.insert(cell_name, "cell") + local button_name = table.clone(self.name) + table.insert(button_name, "validation") + local cell = GuiElement.add(parent, GuiTable(unpack(cell_name)):column(2)) + local input = GuiElement.add(cell, GuiTextField(unpack(self.name)):text(self.m_text):tooltip({"tooltip.formula-allowed"})) + local button = GuiElement.add(cell, GuiButton(unpack(button_name)):sprite("menu", defines.sprites.status_ok.white, defines.sprites.status_ok.black):style("helmod_button_menu"):tooltip({"helmod_button.apply"})) + return cell, input, button +end + +------------------------------------------------------------------------------- +---@class GuiCellLabel +GuiCellLabel = newclass(GuiCell,function(base,...) + GuiCell.init(base,...) +end) + +------------------------------------------------------------------------------- +---Create cell +---@param parent LuaGuiElement --container for element +---@return LuaGuiElement +function GuiCellLabel:create(parent) + local display_cell_mod = User.getModSetting("display_cell_mod") + local cell_name = table.clone(self.name) + table.insert(cell_name, "cell") + local cell = GuiElement.add(parent, GuiTable(unpack(cell_name))) + + if display_cell_mod == "small-text"then + ---small + GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_icon_text_sm"):tooltip({"helmod_common.total"})).style["minimal_width"] = 45 + elseif display_cell_mod == "small-icon" then + ---small + GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_icon_sm"):tooltip({"helmod_common.total"})).style["minimal_width"] = 45 + elseif display_cell_mod == "by-kilo" then + ---by-kilo + GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_row_right"):tooltip({"helmod_common.total"})).style["minimal_width"] = 50 + else + ---default + GuiElement.add(cell, GuiLabel("label1"):caption(self.m_caption):style("helmod_label_row_right"):tooltip({"helmod_common.total"})).style["minimal_width"] = 60 + end + return cell +end \ No newline at end of file diff --git a/helmod/gui/GuiCheckBox.lua b/helmod/gui/GuiCheckBox.lua new file mode 100644 index 00000000..b994f14a --- /dev/null +++ b/helmod/gui/GuiCheckBox.lua @@ -0,0 +1,18 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiCheckBox +---@class GuiCheckBox +GuiCheckBox = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiCheckBox" + base.options.type = "checkbox" + --base.options.style = "helmod_textbox_default" +end) + +------------------------------------------------------------------------------- +---Set state +---@param state boolean +---@return GuiCheckBox +function GuiCheckBox:state(state) + self.options.state = state + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiDropDown.lua b/helmod/gui/GuiDropDown.lua new file mode 100644 index 00000000..c957fad3 --- /dev/null +++ b/helmod/gui/GuiDropDown.lua @@ -0,0 +1,30 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiDropDown +---@class GuiDropDown +GuiDropDown = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiDropDown" + base.options.type = "drop-down" +end) + +------------------------------------------------------------------------------- +---comment +---@param items table +---@param selected string|table +---@return GuiDropDown +function GuiDropDown:items(items, selected) + local selected_index = 1 + if items ~= nil then + self.options.items = items + for index,item in ipairs(items) do + if item == selected then + selected_index = index + end + end + end + self.options.selected_index = 1 + if selected_index ~= nil and selected ~= nil then + self.options.selected_index = selected_index + end + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiElement.lua b/helmod/gui/GuiElement.lua new file mode 100644 index 00000000..6d716ae8 --- /dev/null +++ b/helmod/gui/GuiElement.lua @@ -0,0 +1,310 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class GuiElement +GuiElement = newclass(function(base,...) + base.name = {...} + base.classname = "HMGuiElement" + base.options = {} + base.is_caption = true +end) +GuiElement.classname = "HMGuiElement" +GuiElement.color_button_default = "gray" +GuiElement.color_button_default_product = "blue" +GuiElement.color_button_default_ingredient = "yellow" +GuiElement.color_button_none = "blue" +GuiElement.color_button_edit = "green" +GuiElement.color_button_add = "yellow" +GuiElement.color_button_rest = "red" + +------------------------------------------------------------------------------- +---Set style +---@return GuiElement +function GuiElement:style(...) + if ... ~= nil then + self.options.style = table.concat({...},"_") + end + return self +end + +------------------------------------------------------------------------------- +---Set caption +---@param caption string +---@return GuiElement +function GuiElement:caption(caption) + self.m_caption = caption + return self +end + +------------------------------------------------------------------------------- +---Set tooltip +---@param tooltip table +---@return GuiElement +function GuiElement:tooltip(tooltip) + if tooltip ~= nil and tooltip.classname == "HMGuiTooltip" then + self.options.tooltip = tooltip:create() + else + self.options.tooltip = tooltip + end + return self +end + +------------------------------------------------------------------------------- +---Set ignored by interaction +---@return GuiElement +function GuiElement:ignored_by_interaction() + self.options.ignored_by_interaction = true + return self +end + +------------------------------------------------------------------------------- +---Set overlay +---@param type string +---@param name string +---@return GuiElement +function GuiElement:overlay(type, name) + if type == nil then return self end + if name == nil then + self.m_overlay = string.format("helmod-%s", type) + elseif type ~= nil and name ~= nil then + if type == "resource" then type = "item" end + if Player.is_valid_sprite_path(string.format("%s/%s", type, name)) then + self.m_overlay = string.format("%s/%s", type, name) + elseif Player.is_valid_sprite_path(string.format("%s/%s", "item", name)) then + self.m_overlay = string.format("%s/%s", "item", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> item") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "entity", name)) then + self.m_overlay = string.format("%s/%s", "entity", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> entity") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "fluid", name)) then + self.m_overlay = string.format("%s/%s", "fluid", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> fluid") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "technology", name)) then + self.m_overlay = string.format("%s/%s", "technology", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> technology") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "recipe", name)) then + self.m_overlay = string.format("%s/%s", "recipe", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> recipe") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "item-group", name)) then + self.m_overlay = string.format("%s/%s", "item-group", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> item-group") + end + end + return self +end + +------------------------------------------------------------------------------- +---Get sprite string +---@param type string +---@param name string +---@param format string +---@return string +function GuiElement.getSprite(type, name, format) + local sprite = "" + if format == nil then + format = "%s/%s" + end + if name == nil then + sprite = string.format("helmod-%s", type) + elseif type ~= nil and name ~= nil then + if type == "resource" then type = "entity" end + if type == "rocket" then type = "item" end + if Player.is_valid_sprite_path(string.format("%s/%s", type, name)) then + sprite = string.format(format, type, name) + elseif Player.is_valid_sprite_path(string.format("%s/%s", "item", name)) then + sprite = string.format(format, "item", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> item") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "entity", name)) then + sprite = string.format(format, "entity", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> entity") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "fluid", name)) then + sprite = string.format(format, "fluid", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> fluid") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "technology", name)) then + sprite = string.format(format, "technology", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> technology") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "recipe", name)) then + sprite = string.format(format, "recipe", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> recipe") + elseif Player.is_valid_sprite_path(string.format("%s/%s", "item-group", name)) then + sprite = string.format(format, "item-group", name) + Logging:warn(GuiButton.classname, "wrong type", type, name, "-> item-group") + end + end + return sprite +end + +------------------------------------------------------------------------------- +---Get options +---@return table +function GuiElement:getOptions() + self.options.name = table.concat(self.name,"=") + if self.is_caption then + self.options.caption = self.m_caption + end + return self.options +end + +------------------------------------------------------------------------------- +---Get option when error +---@return table +function GuiElement:onErrorOptions() + local options = self:getOptions() + options.style = nil + return options +end + +------------------------------------------------------------------------------- +---Add a element +---@param parent LuaGuiElement --container for element +---@param gui_element GuiElement +---@return LuaGuiElement --the LuaGuiElement added +function GuiElement.add(parent, gui_element) + local element = nil + local ok , err = pcall(function() + if gui_element.classname ~= "HMGuiCell" then + element = parent.add(gui_element:getOptions()) + else + element = gui_element:create(parent) + end + end) + if not ok then + element = parent.add(gui_element:onErrorOptions()) + log(err) + log(debug.traceback()) + end + return element +end + +------------------------------------------------------------------------------- +---Get Index column number +---@return number +function GuiElement.getIndexColumnNumber() + + local display_ratio_horizontal = User.getModSetting("display_ratio_horizontal") + local width , height, scale = Player.getDisplaySizes() + local width_main = math.ceil(width*display_ratio_horizontal/scale) + + return math.ceil((width_main - 100)/36) +end + +------------------------------------------------------------------------------- +---Get Element column number +---@param size number +---@return number +function GuiElement.getElementColumnNumber(size) + + local display_ratio_horizontal = User.getModSetting("display_ratio_horizontal") + local width , height, scale = Player.getDisplaySizes() + local width_main = math.ceil(width*display_ratio_horizontal/scale) + return math.max(5, math.floor((width_main-600)/(2*size))) +end + +------------------------------------------------------------------------------- +---Get the number of textfield input +---@param element LuaGuiElement --textfield input +---@return number --number of textfield input +function GuiElement.getInputNumber(element) + local count = 0 + if element ~= nil then + local tempCount=tonumber(element.text) + if type(tempCount) == "number" then count = tempCount end + end + return count +end + +------------------------------------------------------------------------------- +---Get dropdown selection +---@param element LuaGuiElement +---@return string|table +function GuiElement.getDropdownSelection(element) + if element.selected_index == 0 then return nil end + if #element.items == 0 then return nil end + return element.items[element.selected_index] +end + +------------------------------------------------------------------------------- +---Set the text of textfield input +---@param element LuaGuiElement +---@param value string +function GuiElement.setInputText(element, value) + if element ~= nil and element.text ~= nil then + element.text = value + end +end + +------------------------------------------------------------------------------- +---Add temperature information +---@param parent LuaGuiElement +---@param element table +---@param style string +function GuiElement.infoTemperature(parent, element, style) + if element.type == "fluid" then + style = style or "helmod_label_element_black_m" + local T = element.temperature + local Tmin = element.minimum_temperature + local Tmax = element.maximum_temperature + if T ~= nil then + local caption = {"", T, "Β°"} + GuiElement.add(parent, GuiLabel("temperature"):caption(caption):style(style)) + end + if Tmin ~= nil or Tmax ~= nil then + Tmin = Tmin or -1e300 + Tmax = Tmax or 1e300 + if Tmin > -1e300 and Tmax > 1e300 then + local caption_min = {"", "β‰₯", Tmin, "Β°"} + GuiElement.add(parent, GuiLabel("temperature_min"):caption(caption_min):style(style)) + end + if Tmin < -1e300 and Tmax < 1e300 then + local caption_max = {"", "≀", Tmax, "Β°"} + GuiElement.add(parent, GuiLabel("temperature_max"):caption(caption_max):style(style)) + end + if Tmin > -1e300 and Tmax < 1e300 then + local panel = GuiElement.add(parent, GuiFlowV("temperature")) + local caption_min = {"", "β‰₯", Tmin, "Β°"} + GuiElement.add(panel, GuiLabel("temperature_min"):caption(caption_min):style(style)) + local caption_max = {"", "≀", Tmax, "Β°"} + GuiElement.add(panel, GuiLabel("temperature_max"):caption(caption_max):style(style)) + end + + end + end +end + +------------------------------------------------------------------------------- +---Add recipe information +---@param parent LuaGuiElement +---@param element table +function GuiElement.infoRecipe(parent, element) + local sprite_name = nil + local tooltip = nil + if element.type == "recipe-burnt" then + sprite_name = GuiElement.getSprite(defines.sprite_info.burnt) + tooltip = {"tooltip.burnt-recipe"} + elseif element.type == "rocket" then + sprite_name = GuiElement.getSprite(defines.sprite_info.rocket) + tooltip = {"tooltip.rocket-recipe"} + elseif element.type == "technology" then + sprite_name = GuiElement.getSprite(defines.sprite_info.education) + tooltip = {"tooltip.technology-recipe"} + elseif element.type == "energy" then + sprite_name = GuiElement.getSprite(defines.sprite_info.energy) + tooltip = {"tooltip.energy-recipe"} + elseif element.type == "boiler" then + local style = "helmod_temperature_blue_m" + local caption = Format.formatNumberKilo(element.output_fluid_temperature, "Β°") + local label = GuiElement.add(parent, GuiLabel("temperature"):caption(caption):style(style):ignored_by_interaction()) + label.style.top_padding = -5 + elseif element.type ~= "recipe" then + sprite_name = GuiElement.getSprite(defines.sprite_info.developer) + tooltip = {"tooltip.resource-recipe"} + end + if sprite_name ~= nil then + local container = GuiElement.add(parent, GuiFlow("recipe-info")) + container.style.top_padding = -4 + + local sprite = GuiElement.add(container, GuiSprite("recipe-info"):sprite(sprite_name):tooltip(tooltip)) + sprite.style.width = defines.sprite_size + sprite.style.height = defines.sprite_size + sprite.style.stretch_image_to_widget_size = true + end +end \ No newline at end of file diff --git a/helmod/gui/GuiEmptyWidget.lua b/helmod/gui/GuiEmptyWidget.lua new file mode 100644 index 00000000..23da9579 --- /dev/null +++ b/helmod/gui/GuiEmptyWidget.lua @@ -0,0 +1,9 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiEmptyWidget +---@class GuiEmptyWidget +GuiEmptyWidget = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiEmptyWidget" + base.options.type = "empty-widget" +end) + diff --git a/helmod/gui/GuiFlow.lua b/helmod/gui/GuiFlow.lua new file mode 100644 index 00000000..84192eb4 --- /dev/null +++ b/helmod/gui/GuiFlow.lua @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- +---Class to help to build flow +---@class GuiFlow +GuiFlow = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiFlow" + base.options.type = "flow" +end) + +------------------------------------------------------------------------------- +---@class GuiFlowH +GuiFlowH = newclass(GuiFlow,function(base,...) + GuiFlow.init(base,...) + base.options.direction = "horizontal" + base.options.style = helmod_flow_style.horizontal +end) + +------------------------------------------------------------------------------- +---@class GuiFlowV +GuiFlowV = newclass(GuiFlow,function(base,...) + GuiFlow.init(base,...) + base.options.direction = "vertical" + base.options.style = helmod_flow_style.vertical +end) \ No newline at end of file diff --git a/helmod/gui/GuiFrame.lua b/helmod/gui/GuiFrame.lua new file mode 100644 index 00000000..ca763e7d --- /dev/null +++ b/helmod/gui/GuiFrame.lua @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- +---Class to help to build frame +---@class GuiFrame +GuiFrame = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiFrame" + base.options.type = "frame" + base.options.style = "helmod_frame" +end) + +------------------------------------------------------------------------------- +---@class GuiFrameH +GuiFrameH = newclass(GuiFrame,function(base,...) + GuiFrame.init(base,...) + base.options.direction = "horizontal" +end) + +------------------------------------------------------------------------------- +---@class GuiFrameV +GuiFrameV = newclass(GuiFrame,function(base,...) + GuiFrame.init(base,...) + base.options.direction = "vertical" +end) + diff --git a/helmod/gui/GuiLabel.lua b/helmod/gui/GuiLabel.lua new file mode 100644 index 00000000..e613ce80 --- /dev/null +++ b/helmod/gui/GuiLabel.lua @@ -0,0 +1,27 @@ +------------------------------------------------------------------------------- +-- Class to help to build GuiLabel +-- @class GuiLabel +GuiLabel = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiLabel" + base.options.type = "label" +end) + +------------------------------------------------------------------------------- +---Set wrap +---@param wrap boolean +---@return GuiLabel +function GuiLabel:wordWrap(wrap) + self.options.word_wrap = wrap + return self +end + +------------------------------------------------------------------------------- +---Set color +---@param color string +---@return GuiLabel +function GuiLabel:color(color) + local color = helmod_tag.color[color] or helmod_tag.color.orange + self.m_caption = {"", helmod_tag.color.orange, self.m_caption, helmod_tag.color.close} + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiLine.lua b/helmod/gui/GuiLine.lua new file mode 100644 index 00000000..57c34282 --- /dev/null +++ b/helmod/gui/GuiLine.lua @@ -0,0 +1,23 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiLine +---@class GuiLine +GuiLine = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiLine" + base.options.type = "line" + base.options.style = "line" +end) + +------------------------------------------------------------------------------- +---@class GuiLineH +GuiLineH = newclass(GuiLine,function(base,...) + GuiLine.init(base,...) + base.options.direction = "horizontal" +end) + +------------------------------------------------------------------------------- +---@class GuiLineV +GuiLineV = newclass(GuiLine,function(base,...) + GuiLine.init(base,...) + base.options.direction = "vertical" +end) diff --git a/helmod/gui/GuiListBox.lua b/helmod/gui/GuiListBox.lua new file mode 100644 index 00000000..841ccf44 --- /dev/null +++ b/helmod/gui/GuiListBox.lua @@ -0,0 +1,30 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiListBox +---@class GuiListBox +GuiListBox = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiListBox" + base.options.type = "list-box" +end) + +------------------------------------------------------------------------------- +---Set Items +---@param items table +---@param selected any +---@return GuiListBox +function GuiListBox:items(items, selected) + local selected_index = 1 + if items ~= nil then + self.options.items = items + for index,item in ipairs(items) do + if item == selected then + selected_index = index + end + end + end + self.options.selected_index = 1 + if selected_index ~= nil and selected ~= nil then + self.options.selected_index = selected_index + end + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiScroll.lua b/helmod/gui/GuiScroll.lua new file mode 100644 index 00000000..e1c27f1d --- /dev/null +++ b/helmod/gui/GuiScroll.lua @@ -0,0 +1,21 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiScroll +---@class GuiScroll +GuiScroll = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiScroll" + base.options.type = "scroll-pane" + base.options.style = "scroll_pane" +end) + +------------------------------------------------------------------------------- +---Set policy +---@param policy string +---@return GuiScroll +function GuiScroll:policy(policy) + self.options.horizontal_scroll_policy = "auto" + if policy == true then + self.options.vertical_scroll_policy = "auto" + end + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiSlider.lua b/helmod/gui/GuiSlider.lua new file mode 100644 index 00000000..abf1958b --- /dev/null +++ b/helmod/gui/GuiSlider.lua @@ -0,0 +1,34 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiSlider +---@class GuiSlider +GuiSlider = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiSlider" + base.options.type = "slider" +end) + +------------------------------------------------------------------------------- +---Set number values +---@param minimum_value number|string +---@param maximum_value number|string +---@param value number|string +---@param value_step number +---@return GuiSlider +function GuiSlider:values(minimum_value, maximum_value, value, value_step) + self.options.minimum_value = minimum_value + self.options.maximum_value = maximum_value + self.options.value = value or minimum_value + self.options.value_step = value_step or 1 + return self +end + +------------------------------------------------------------------------------- +---Set discrete values +---@param discrete_slider boolean +---@param discrete_values boolean +---@return GuiSlider +function GuiSlider:discrete(discrete_slider, discrete_values) + self.options.discrete_slider = discrete_slider or false + self.options.discrete_values = discrete_values or false + return self +end diff --git a/helmod/gui/GuiSprite.lua b/helmod/gui/GuiSprite.lua new file mode 100644 index 00000000..aa59ba17 --- /dev/null +++ b/helmod/gui/GuiSprite.lua @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiSprite +---@class GuiSprite +GuiSprite = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiSprite" + base.options.type = "sprite" +end) + +------------------------------------------------------------------------------- +---Set sprite +---@param type string +---@param name string +---@return GuiSprite +function GuiSprite:sprite(type, name) + if type == "menu" then + self.options.sprite = GuiElement.getSprite(name) + elseif name == nil then + self.options.sprite = type + else + self.options.sprite = string.format("%s/%s", type, name) + end + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiSwitch.lua b/helmod/gui/GuiSwitch.lua new file mode 100644 index 00000000..8e6a6654 --- /dev/null +++ b/helmod/gui/GuiSwitch.lua @@ -0,0 +1,41 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiSwitch +---@class GuiSwitch +GuiSwitch = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "GuiSwitch" + base.options.type = "switch" +end) + +------------------------------------------------------------------------------- +---Set state +---@param switch_state any +---@param allow_none_state any +---@return GuiSwitch +function GuiSwitch:state(switch_state, allow_none_state) + self.options.switch_state = switch_state + self.options.allow_none_state = allow_none_state + return self +end + +------------------------------------------------------------------------------- +---Set label +---@param left_label_caption any +---@param left_label_tooltip any +---@return GuiSwitch +function GuiSwitch:leftLabel(left_label_caption, left_label_tooltip) + self.options.left_label_caption = left_label_caption + self.options.left_label_tooltip = left_label_tooltip + return self +end + +------------------------------------------------------------------------------- +---Set label +---@param right_label_caption any +---@param right_label_tooltip any +---@return GuiSwitch +function GuiSwitch:rightLabel(right_label_caption, right_label_tooltip) + self.options.right_label_caption = right_label_caption + self.options.right_label_tooltip = right_label_tooltip + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiTab.lua b/helmod/gui/GuiTab.lua new file mode 100644 index 00000000..983f0dbf --- /dev/null +++ b/helmod/gui/GuiTab.lua @@ -0,0 +1,17 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiTab +---@class GuiTabPane +GuiTabPane = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTabPane" + base.options.type = "tabbed-pane" +end) + +------------------------------------------------------------------------------- +---@class GuiTab +GuiTab = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTab" + base.options.type = "tab" +end) + diff --git a/helmod/gui/GuiTable.lua b/helmod/gui/GuiTable.lua new file mode 100644 index 00000000..c8496a29 --- /dev/null +++ b/helmod/gui/GuiTable.lua @@ -0,0 +1,18 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiTable +---@class GuiTable +GuiTable = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTable" + base.options.type = "table" + base.options.style = "helmod_table_default" +end) + +------------------------------------------------------------------------------- +---Set column +---@param column_count number +---@return GuiTable +function GuiTable:column(column_count) + self.options.column_count = column_count + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiTextBox.lua b/helmod/gui/GuiTextBox.lua new file mode 100644 index 00000000..3f728a9f --- /dev/null +++ b/helmod/gui/GuiTextBox.lua @@ -0,0 +1,18 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiTextBox +---@class GuiTextBox +GuiTextBox = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTextBox" + base.options.type = "text-box" + base.options.style = "helmod_textbox_default" +end) + +------------------------------------------------------------------------------- +---Set text +---@param text string +---@return GuiTextBox +function GuiTextBox:text(text) + self.options.text = text + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiTextField.lua b/helmod/gui/GuiTextField.lua new file mode 100644 index 00000000..2da44738 --- /dev/null +++ b/helmod/gui/GuiTextField.lua @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiTextField +---@class GuiTextField +GuiTextField = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTextField" + base.options.type = "textfield" + base.options.style = "helmod_textfield" +end) + +------------------------------------------------------------------------------- +---Set text +---@param text string +---@return GuiTextField +function GuiTextField:text(text) + self.options.text = text + return self +end + +------------------------------------------------------------------------------- +---Set is numeric +---@return GuiTextField +function GuiTextField:isNumeric() + self.options.numeric = true + return self +end + +------------------------------------------------------------------------------- +---Set allow decimal +---@return GuiTextField +function GuiTextField:allowDecimal () + self.options.allow_decimal = true + return self +end + +------------------------------------------------------------------------------- +---Set allow negative +---@return GuiTextField +function GuiTextField:allowNegative () + self.options.allow_negative = true + return self +end \ No newline at end of file diff --git a/helmod/gui/GuiTooltip.lua b/helmod/gui/GuiTooltip.lua new file mode 100644 index 00000000..36733751 --- /dev/null +++ b/helmod/gui/GuiTooltip.lua @@ -0,0 +1,744 @@ +------------------------------------------------------------------------------- +---Class to help to build GuiTooltip +---@class GuiTooltip +GuiTooltip = newclass(GuiElement,function(base,...) + GuiElement.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Set element +---@param element table +---@return GuiTooltip +function GuiTooltip:element(element) + self.m_element = element + return self +end + +------------------------------------------------------------------------------- +---Set with logistic information +---@return GuiTooltip +function GuiTooltip:withLogistic() + self.m_with_logistic = true + return self +end + +------------------------------------------------------------------------------- +---Set with energy information +---@return GuiTooltip +function GuiTooltip:withEnergy() + self.m_with_energy = true + return self +end + +------------------------------------------------------------------------------- +---Set with effect information +---@return GuiTooltip +function GuiTooltip:withEffectInfo(value) + self.m_with_effect_info = value + return self +end + +------------------------------------------------------------------------------- +---Set with product information +---@return GuiTooltip +function GuiTooltip:withProductInfo() + self.m_with_product_info = true + return self +end + +------------------------------------------------------------------------------- +---Set with control information +---@param control_info string +---@return GuiTooltip +function GuiTooltip:withControlInfo(control_info) + self.m_with_control_info = control_info + return self +end + +------------------------------------------------------------------------------- +---Add control information +---@param tooltip table +---@param element table +function GuiTooltip:appendControlInfo(tooltip, element) + if self.m_with_control_info ~= nil then + local tooltip_section = {""} + table.insert(tooltip_section, {"", "\n", "----------------------"}) + table.insert(tooltip_section, {"", "\n", helmod_tag.font.default_bold, {"tooltip.info-control"}, helmod_tag.font.close}) + if self.m_with_control_info == "contraint" then + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.contraint-plus"}}) + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.contraint-minus"}}) + end + if self.m_with_control_info == "link-intermediate" then + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.link-intermediate"}}) + end + if self.m_with_control_info == "module-add" then + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.module-add"}}) + end + if self.m_with_control_info == "module-remove" then + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.module-remove"}}) + end + if self.m_with_control_info == "crafting-add" then + table.insert(tooltip_section, {"", "\n", "[img=helmod-tooltip-blank]", " ", {"controls.crafting-add"}}) + end + table.insert(tooltip, tooltip_section) + end +end + +------------------------------------------------------------------------------- +---Add energy information +---@param tooltip table +---@param element table +function GuiTooltip:appendEnergyConsumption(tooltip, element) + if self.m_with_energy == true then + ---energy + local total_power = Format.formatNumberKilo(element.energy_total, "W") + if element.limit_energy ~= nil then + local limit_power = Format.formatNumberKilo(element.limit_energy, "W") + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_power or 0, "/", total_power, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_power or 0, helmod_tag.font.close}) + end + end +end + +------------------------------------------------------------------------------- +---Add flow information +---@param tooltip table +---@param element table +function GuiTooltip:appendFlow(tooltip, element) + if self.m_with_logistic == true then + if element.type == "item" then + local item_prototype = ItemPrototype(element.name) + local stack_size = 0 + if item_prototype ~= nil then + stack_size = item_prototype:stackSize() + end + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.stack-size"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, stack_size or 0, helmod_tag.font.close}) + end + + local total_flow = Format.formatNumberElement(element.count/((element.time or 1)/60)) + if element.limit_count ~= nil then + local limit_flow = Format.formatNumberElement(element.limit_count/((element.time or 1)/60)) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_flow or 0, "/", {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close}) + end + end +end + +------------------------------------------------------------------------------- +---Add flow information +---@param tooltip table +---@param element table +function GuiTooltip:appendEffectInfo(tooltip, element) + if self.m_with_effect_info == true then + ---energy + local sign = "" + if element.effects.consumption > 0 then sign = "+" end + local energy = Format.formatNumberKilo(element.energy, "W").." ("..sign..Format.formatPercent(element.effects.consumption).."%)" + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.energy"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, energy or 0, helmod_tag.font.close}) + + ---speed + local sign = "" + if element.effects.speed > 0 then sign = "+" end + local speed = Format.formatNumber(element.speed).." ("..sign..Format.formatPercent(element.effects.speed).."%)" + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.speed"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, speed or 0, helmod_tag.font.close}) + + ---productivity + local sign = "" + if element.effects.productivity > 0 then sign = "+" end + local productivity = sign..Format.formatPercent(element.effects.productivity).."%" + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.productivity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, productivity or 0, helmod_tag.font.close}) + + ---pollution + local pollution = Format.formatNumberElement((element.pollution or 0)*60 ) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, pollution or 0, helmod_tag.font.close}) + end +end + +------------------------------------------------------------------------------- +---Add logistic information +---@param tooltip table +---@param element table +function GuiTooltip:appendLogistic(tooltip, element) + if self.m_with_logistic == true then + local tooltip_section = {""} + table.insert(tooltip_section, {"", "\n", "----------------------"}) + table.insert(tooltip_section, {"", "\n", helmod_tag.font.default_bold, {"tooltip.info-logistic"}, helmod_tag.font.close}) + ---solid logistic + if element.type == 0 or element.type == "item" then + for _,type in pairs({"inserter", "belt", "container", "transport"}) do + local item_logistic = Player.getDefaultItemLogistic(type) + local item_prototype = Product(element) + local total_value = item_prototype:countContainer(element.count, item_logistic, element.time) + local formated_total_value = Format.formatNumberElement(total_value) + local info = "" + if type == "inserter" then + info = {"", " (", {"helmod_common.capacity"}, string.format(":%s", EntityPrototype(item_logistic):getInserterCapacity()), ")"} + end + if element.limit_count ~= nil and element.limit_count > 0 then + local limit_value = Format.formatNumberElement(item_prototype:countContainer(element.limit_count, item_logistic, element.time)) + table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", item_logistic), " ", helmod_tag.font.default_bold, " x ", limit_value, "/", formated_total_value, helmod_tag.font.close, info}) + else + table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", item_logistic), " ", helmod_tag.font.default_bold, " x ", formated_total_value, helmod_tag.font.close, info}) + end + end + end + ---fluid logistic + if element.type == 1 or element.type == "fluid" then + for _,type in pairs({"pipe", "container", "transport"}) do + local fluid_logistic = Player.getDefaultFluidLogistic(type) + local fluid_prototype = Product(element) + local count = element.count + if type == "pipe" then count = count / element.time end + local total_value = fluid_prototype:countContainer(count, fluid_logistic, element.time) + local formated_total_value = Format.formatNumberElement(total_value) + if element.limit_count ~= nil and element.limit_count > 0 then + local limit_count = element.limit_count + if type == "pipe" then limit_count = limit_count / element.time end + local limit_value = Format.formatNumberElement(fluid_prototype:countContainer(limit_count, fluid_logistic, element.time)) + table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", fluid_logistic), " ", helmod_tag.font.default_bold, " x ", limit_value, "/", formated_total_value, helmod_tag.font.close}) + else + table.insert(tooltip_section, {"", "\n", string.format("[%s=%s]", "entity", fluid_logistic), " ", helmod_tag.font.default_bold, " x ", formated_total_value, helmod_tag.font.close}) + end + end + end + table.insert(tooltip, tooltip_section) + end +end + +------------------------------------------------------------------------------- +---Add product information +---@param tooltip table +---@param element table +function GuiTooltip:appendProductInfo(tooltip, element) + if self.m_with_product_info == true then + ---solid logistic + if element.type == 0 or element.type == "item" then + local item_prototype = ItemPrototype(element) + if item_prototype:getFuelValue() > 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.fuel-value"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, Format.formatNumberKilo(item_prototype:getFuelValue() or 0, "J"), helmod_tag.font.close}) + end + end + ---fluid logistic + if element.type == 1 or element.type == "fluid" then + local fluid_prototype = FluidPrototype(element) + if fluid_prototype:getHeatCapacity() > 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.heat-capacity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, fluid_prototype:getHeatCapacity() or 0, "J", helmod_tag.font.close}) + end + if fluid_prototype:getFuelValue() > 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.fuel-value"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, Format.formatNumberKilo(fluid_prototype:getFuelValue() or 0, "J"), helmod_tag.font.close}) + end + if element.temperature then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.temperature or 0, "Β°c", helmod_tag.font.close}) + end + if element.minimum_temperature and (element.minimum_temperature >= -1e300) then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature-min"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.minimum_temperature or 0, "Β°c", helmod_tag.font.close}) + end + if element.maximum_temperature and (element.maximum_temperature <= 1e300) then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.temperature-max"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.maximum_temperature or 0, "Β°c", helmod_tag.font.close}) + end + end + end +end + +------------------------------------------------------------------------------- +---Add debug information +---@param tooltip table +---@param element table +function GuiTooltip:appendDebug(tooltip, element) + ---debug + if User.getModGlobalSetting("debug_solver") == true then + table.insert(tooltip, {"", "\n", "----------------------"}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Name", ": ", helmod_tag.font.default_bold, self.m_element.name or "nil", helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Type", ": ", helmod_tag.font.default_bold, self.m_element.type or "nil", helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "State", ": ", helmod_tag.font.default_bold, self.m_element.state or 0, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Amount", ": ", helmod_tag.font.default_bold, self.m_element.amount or 0, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Count", ": ", helmod_tag.font.default_bold, self.m_element.count or 0, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=developer]", " ", "Count limit", ": ", helmod_tag.font.default_bold, self.m_element.limit_count or 0, helmod_tag.font.close}) + end +end +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltip:create() + local tooltip = {""} + if string.find(self.name[1], "edit[-]") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.edit) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "add[-]") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.add) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "remove[-]") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.remove) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "info[-]") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.info) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.white, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "set[-]default") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.favorite) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "apply[-]block") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.expand_right) + table.insert(self.name, {self.options.tooltip}) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "apply[-]line") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.expand_right_group) + table.insert(self.name, {self.options.tooltip}) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "module[-]clear") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.erase) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + elseif string.find(self.name[1], "pipette") then + local sprite_name = GuiElement.getSprite(defines.sprite_tooltip.pipette) + table.insert(tooltip, {"", string.format("[img=%s]", sprite_name), " ", helmod_tag.color.yellow, helmod_tag.font.default_bold, self.name, helmod_tag.font.close, helmod_tag.color.close}) + else + table.insert(tooltip, {"", "[img=helmod-tooltip-blank]", " ", helmod_tag.font.default_bold, self.name, helmod_tag.font.close}) + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipModel +GuiTooltipModel = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipModel:create() + local tooltip = self._super.create(self) + local element = self.m_element + local first_block = Model.firstRecipe(element.blocks or {}) + if first_block ~= nil then + local type = first_block.type + if type == nil then type = "entity" end + if type == "resource" or type == "energy" then type = "entity" end + if type == "rocket" then type = "item" end + if type == "recipe-burnt" then type = "recipe" end + local element_sprite = GuiElement.getSprite(type, first_block.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=first_block.name}), helmod_tag.font.close, helmod_tag.color.close}) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_result-panel.col-header-owner"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.owner or "", helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.group"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.group or "", helmod_tag.font.close}) + if element.note ~= nil and element.note ~= "" then + table.insert(tooltip, {"", "\n", "----------------------"}) + table.insert(tooltip, {"", "\n", helmod_tag.font.default_bold, {"helmod_common.note"}, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", element.note or ""}) + end + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipRecipe +GuiTooltipRecipe = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipRecipe:create() + local tooltip = self._super.create(self) + local element = self.m_element + if element ~= nil then + local recipe_prototype = RecipePrototype(element) + local icon_name, icon_type = recipe_prototype:getIcon() + local element_sprite = GuiElement.getSprite(icon_type, icon_name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=icon_type, name=icon_name}), helmod_tag.font.close, helmod_tag.color.close}) + ---quantity + local total_count = Format.formatNumberElement(element.count) + if element.limit_count ~= nil then + local limit_count = Format.formatNumberElement(element.limit_count) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close}) + end + + self:appendProductInfo(tooltip, element); + self:appendEnergyConsumption(tooltip, element); + self:appendFlow(tooltip, element); + self:appendLogistic(tooltip, element); + self:appendControlInfo(tooltip, element); + self:appendDebug(tooltip, element) + + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipElement +GuiTooltipElement = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipElement:create() + local tooltip = self._super.create(self) + local element = self.m_element + if element ~= nil then + local type = element.type + if type == nil then type = "entity" end + if type == "resource" or type == "energy" then type = "entity" end + if type == "rocket" then type = "item" end + if type == "recipe-burnt" then type = "recipe" end + if type == "boiler" then type = "fluid" end + local element_icon = GuiElement.getSprite(type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_icon, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=element.name}), helmod_tag.font.close, helmod_tag.color.close}) + ---quantity + local total_count = Format.formatNumberElement(element.count) + if element.limit_count ~= nil then + local limit_count = Format.formatNumberElement(element.limit_count) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close}) + end + + self:appendProductInfo(tooltip, element); + self:appendEnergyConsumption(tooltip, element); + self:appendEffectInfo(tooltip, element); + self:appendFlow(tooltip, element); + self:appendLogistic(tooltip, element); + self:appendControlInfo(tooltip, element); + self:appendDebug(tooltip, element) + + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipEnergy +GuiTooltipEnergy = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipEnergy:create() + local tooltip = self._super.create(self) + local element = self.m_element + if element ~= nil then + local type = element.type + if type == nil then type = "entity" end + if element == "resource" then type = "entity" end + local element_icon = GuiElement.getSprite(type, element.name, "[%s=%s]") + if defines.sprite_tooltips[element.name] ~= nil then + local sprite = GuiElement.getSprite(defines.sprite_tooltips[element.name]) + element_icon = string.format("[img=%s]", sprite) + end + table.insert(tooltip, {"", "\n", element_icon, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName({type=type, name=element.name}), helmod_tag.font.close, helmod_tag.color.close}) + ---quantity + local total_count = Format.formatNumberKilo(element.count, "J") + if element.limit_count ~= nil then + local limit_count = Format.formatNumberElement(element.limit_count) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_count or 0, "/", total_count, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_count or 0, helmod_tag.font.close}) + end + + self:appendEnergyConsumption(tooltip, element); + self:appendDebug(tooltip, element) + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipFactory +GuiTooltipFactory = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipFactory:create() + local tooltip = self._super.create(self) + if self.m_element then + GuiTooltipFactory.AppendFactory(tooltip, self.m_element) + end + return tooltip +end + +function GuiTooltipFactory.AppendFactory(tooltip, element) + local type = "entity" + local prototype = EntityPrototype(element) + local element_sprite = GuiElement.getSprite(type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close}) + if element.combo then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-on-factory"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.combo, helmod_tag.font.close}) + end + if element.per_factory then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-per-factory"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.per_factory, helmod_tag.font.close}) + end + if element.per_factory_constant then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_label.beacon-per-factory-constant"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, element.per_factory_constant, helmod_tag.font.close}) + end + local fuel = prototype:getFluel() + if fuel ~= nil then + if fuel.temperature then + table.insert(tooltip, {"", "\n", string.format("[%s=%s] %s Β°C", fuel.type, fuel.name, fuel.temperature), " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName(fuel), helmod_tag.font.close, helmod_tag.color.close}) + else + table.insert(tooltip, {"", "\n", string.format("[%s=%s]", fuel.type, fuel.name), " ", helmod_tag.color.gold, helmod_tag.font.default_bold, Player.getLocalisedName(fuel), helmod_tag.font.close, helmod_tag.color.close}) + end + end + if element.module_priority then + for _, module_priority in pairs(element.module_priority) do + local module_prototype = ItemPrototype(module_priority.name) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", string.format("[%s=%s]", "item", module_priority.name), " ", helmod_tag.font.default_bold, module_priority.value, " x ", helmod_tag.font.close, " ", helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close}) + end + end +end + +------------------------------------------------------------------------------- +---@class GuiTooltipBeacons +GuiTooltipBeacons = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipBeacons:create() + local tooltip = self._super.create(self) + if self.m_element then + for _, beacon in pairs(self.m_element) do + local beacon_tooltip = {""} + table.insert(tooltip, beacon_tooltip) + GuiTooltipFactory.AppendFactory(beacon_tooltip, beacon) + end + end + return tooltip +end + + +------------------------------------------------------------------------------- +---@class GuiTooltipEnergyConsumption +GuiTooltipEnergyConsumption = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipEnergyConsumption:create() + local tooltip = self._super.create(self) + if self.m_element then + local power = Format.formatNumberKilo(self.m_element.energy_total or self.m_element.power, "J") + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.energy-consumption"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, power, helmod_tag.font.close}) + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipPollution +GuiTooltipPollution = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipPollution:create() + local tooltip = self._super.create(self) + if self.m_element then + local total_pollution = Format.formatNumberElement(self.m_element.pollution_total) + local total_flow = Format.formatNumberElement(self.m_element.pollution_total/((self.m_element.time or 1)/60)) + if self.m_element.limit_count ~= nil then + local limit_flow = Format.formatNumberElement(self.m_element.limit_pollution/((self.m_element.time or 1)/60)) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_pollution, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, limit_flow or 0, "/", {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close}) + else + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.pollution"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, total_pollution, helmod_tag.font.close}) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.outflow"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, {"helmod_si.per-minute",total_flow or 0}, helmod_tag.font.close}) + end + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipBuilding +GuiTooltipBuilding = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipBuilding:create() + local tooltip = self._super.create(self) + if self.m_element then + local block = self.m_element + local overflow = false + if block.summary ~= nil then + ---factories + for _, element in pairs(block.summary.factories) do + if #tooltip < 19 then + local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close}) + else + overflow = true + end + end + + ---beacons + for _, element in pairs(block.summary.beacons) do + if #tooltip < 19 then + local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close}) + else + overflow = true + end + end + + for _, element in pairs(block.summary.modules) do + if #tooltip < 19 then + local element_sprite = GuiElement.getSprite(element.type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, "x ", element.count, helmod_tag.font.close}) + else + overflow = true + end + end + if overflow then + table.insert(tooltip, {"", "\n", "..."}) + end + end + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipBlock +GuiTooltipBlock = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipBlock:create() + local tooltip = self._super.create(self) + if self.m_element then + local quantity = self.m_element.count + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"helmod_common.quantity"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, quantity, helmod_tag.font.close}) + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipModule +GuiTooltipModule = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipModule:create() + local tooltip = self._super.create(self) + if self.m_element then + local module_prototype = ItemPrototype(self.m_element.name) + local module = module_prototype:native() + if module ~= nil then + local element_sprite = GuiElement.getSprite(self.m_element.type, self.m_element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, module_prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close}) + local bonus_consumption = Player.getModuleBonus(module.name, "consumption") + local bonus_speed = Player.getModuleBonus(module.name, "speed") + local bonus_productivity = Player.getModuleBonus(module.name, "productivity") + local bonus_pollution = Player.getModuleBonus(module.name, "pollution") + + local bonus_consumption_positive = "+" + if bonus_consumption <= 0 then bonus_consumption_positive = "" end + if bonus_consumption ~= 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.consumption-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_consumption_positive, Format.formatPercent(bonus_consumption), "%", helmod_tag.font.close}) + end + local bonus_speed_positive = "+" + if bonus_speed <= 0 then bonus_speed_positive = "" end + if bonus_speed ~= 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.speed-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_speed_positive, Format.formatPercent(bonus_speed), "%", helmod_tag.font.close}) + end + local bonus_productivity_positive = "+" + if bonus_productivity <= 0 then bonus_productivity_positive = "" end + if bonus_productivity ~= 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.productivity-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_productivity_positive, Format.formatPercent(bonus_productivity), "%", helmod_tag.font.close}) + end + local bonus_pollution_positive = "+" + if bonus_pollution <= 0 then bonus_pollution_positive = "" end + if bonus_pollution ~= 0 then + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", helmod_tag.color.gold, {"description.pollution-bonus"}, ": ", helmod_tag.color.close, helmod_tag.font.default_bold, bonus_pollution_positive, Format.formatPercent(bonus_pollution), "%", helmod_tag.font.close}) + end + self:appendControlInfo(tooltip, self.m_element.name); + end + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipPriority +GuiTooltipPriority = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipPriority:create() + local tooltip = self._super.create(self) + if self.m_element then + for i,priority in pairs(self.m_element) do + local module_prototype = ItemPrototype(priority.name) + local element_sprite = GuiElement.getSprite("item", priority.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.font.default_bold, priority.value, " x ", helmod_tag.font.close, helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close}) + end + end + return tooltip +end + +------------------------------------------------------------------------------- +---@class GuiTooltipPriorities +GuiTooltipPriorities = newclass(GuiTooltip,function(base,...) + GuiTooltip.init(base,...) + base.classname = "HMGuiTooltip" +end) + +------------------------------------------------------------------------------- +---Create tooltip +---@return table +function GuiTooltipPriorities:create() + local tooltip = self._super.create(self) + if self.m_element then + for i,factory in pairs(self.m_element) do + GuiTooltipPriorities.AppendPriority(tooltip, factory) + end + end + return tooltip +end + +function GuiTooltipPriorities.AppendPriority(tooltip, element) + local type = "entity" + local prototype = EntityPrototype(element) + local element_sprite = GuiElement.getSprite(type, element.name, "[%s=%s]") + table.insert(tooltip, {"", "\n", element_sprite, " ", helmod_tag.color.gold, helmod_tag.font.default_bold, prototype:getLocalisedName(), helmod_tag.font.close, helmod_tag.color.close}) + if element.module_priority then + for _, module_priority in pairs(element.module_priority) do + local module_prototype = ItemPrototype(module_priority.name) + table.insert(tooltip, {"", "\n", "[img=helmod-tooltip-blank]", " ", string.format("[%s=%s]", "item", module_priority.name), " ", helmod_tag.font.default_bold, module_priority.value, " x ", helmod_tag.font.close, " ", helmod_tag.color.gold, module_prototype:getLocalisedName(), helmod_tag.color.close}) + end + end +end diff --git a/helmod/info.json b/helmod/info.json new file mode 100644 index 00000000..3be419e6 --- /dev/null +++ b/helmod/info.json @@ -0,0 +1,11 @@ +{ + "name": "helmod", + "version": "0.12.23", + "title": "Helmod: Assistant for planning your factory", + "author": "Helfima", + "contact": "Helfima", + "homepage": "https://github.com/Helfima/helmod", + "description": "Assistant for planning your factory. Can calculate required ingredients, products, machines, modules, and beacons. Can also calculate power production / consumption.", + "dependencies": ["base >= 1.1.57"], + "factorio_version": "1.1" +} diff --git a/helmod/lib/base64.lua b/helmod/lib/base64.lua new file mode 100644 index 00000000..cec48c0c --- /dev/null +++ b/helmod/lib/base64.lua @@ -0,0 +1,38 @@ +-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss +-- licensed under the terms of the LGPL2 + +-- character table string +local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +local M = {} + +-- encoding +M.enc = function(data) + return ((data:gsub('.', function(x) + local r,b='',x:byte() + for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end + return r; + end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) + if (#x < 6) then return '' end + local c=0 + for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end + return b:sub(c+1,c+1) + end)..({ '', '==', '=' })[#data%3+1]) +end + +-- decoding +M.dec = function(data) + data = string.gsub(data, '[^'..b..'=]', '') + return (data:gsub('.', function(x) + if (x == '=') then return '' end + local r,f='',(b:find(x)-1) + for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end + return r; + end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) + if (#x ~= 8) then return '' end + local c=0 + for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end + return string.char(c) + end)) +end + +return M \ No newline at end of file diff --git a/helmod/lib/crc32lua.lua b/helmod/lib/crc32lua.lua new file mode 100644 index 00000000..6def5b7d --- /dev/null +++ b/helmod/lib/crc32lua.lua @@ -0,0 +1,207 @@ +--[[ + +LUA MODULE + + digest.crc32 - CRC-32 checksum implemented entirely in Lua. + +SYNOPSIS + + local CRC = require 'digest.crc32lua' + print(CRC.crc32 'test') --> 0xD87F7E0C or -662733300 + + assert(CRC.crc32('st', CRC.crc32('te')) == CRC.crc32 'test') + +DESCRIPTION + + This can be used to compute CRC-32 checksums on strings. + This is similar to [1-2]. + +API + + Note: in the functions below, checksums are 32-bit integers stored in + numbers. The number format currently depends on the bit + implementation--see DESIGN NOTES below. + + CRC.crc32_byte(byte [, crc]) --> rcrc + + Returns CRC-32 checksum `rcrc` of byte `byte` (number 0..255) appended to + a string with CRC-32 checksum `crc`. `crc` defaults to 0 (empty string) + if omitted. + + CRC.crc32_string(s, crc) --> bcrc + + Returns CRC-32 checksum `rcrc` of string `s` appended to + a string with CRC-32 checksum `crc`. `crc` defaults to 0 (empty string) + if omitted. + + CRC.crc32(o, crc) --> bcrc + + This invokes `crc32_byte` if `o` is a byte or `crc32_string` if `o` + is a string. + + CRC.bit + + This contains the underlying bit library used by the module. It + should be considered a read-only copy. + +DESIGN NOTES + + Currently, this module exposes the underlying bit array implementation in CRC + checksums returned. In BitOp, bit arrays are 32-bit signed integer numbers + (may be negative). In Lua 5.2 'bit32' and 'bit.numberlua', bit arrays are + 32-bit unsigned integer numbers (non-negative). This is subject to change + in the future but is currently done due to (unconfirmed) performance + implications. + + On platforms with 64-bit numbers, one way to normalize CRC + checksums to be unsigned is to do `crcvalue % 2^32`, + + The name of this module is inspired by Perl `Digest::CRC*`. + +DEPENDENCIES + + Requires one of the following bit libraries: + + BitOp "bit" -- bitop.luajit.org -- This is included in LuaJIT and also available + for Lua 5.1/5.2. This provides the fastest performance in LuaJIT. + Lua 5.2 "bit32" -- www.lua.org/manual/5.2 -- This is provided in Lua 5.2 + and is preferred in 5.2 (unless "bit" also happens to be installed). + "bit.numberlua" (>=000.003) -- https://github.com/davidm/lua-bit-numberlua + This is slowest and used as a last resort. + It is only a few times slower than "bit32" though. + +DOWNLOAD/INSTALLATION + + If using LuaRocks: + luarocks install lua-digest-crc32lua + + Otherwise, download . + Alternately, if using git: + git clone git://github.com/davidm/lua-digest-crc32lua.git + cd lua-digest-crc32lua + Optionally unpack: + ./util.mk + or unpack and install in LuaRocks: + ./util.mk install + +REFERENCES + + [1] http://www.axlradius.com/freestuff/CRC32.java + [2] http://www.gamedev.net/reference/articles/article1941.asp + [3] http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/CRC32.html + [4] http://www.dsource.org/projects/tango/docs/current/tango.io.digest.Crc32.html + [5] http://pydoc.org/1.5.2/zlib.html#-crc32 + [6] http://www.python.org/doc/2.5.2/lib/module-binascii.html + +LICENSE + + (c) 2008-2011 David Manura. Licensed under the same terms as Lua (MIT). + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + (end license) + +--]] + + +local M = {_TYPE='module', _NAME='digest.crc32', _VERSION='0.3.20111128'} + +local type = type +local require = require +local setmetatable = setmetatable + +--[[ + Requires the first module listed that exists, else raises like `require`. + If a non-string is encountered, it is returned. + Second return value is module name loaded (or ''). + --]] +local function requireany(...) + local errs = {} + for _,name in ipairs{...} do + if type(name) ~= 'string' then return name, '' end + local ok, mod = pcall(require, name) + if ok then return mod, name end + errs[#errs+1] = mod + end + error(table.concat(errs, '\n'), 2) +end + +-- local bit, name_ = requireany('bit', 'bit32', 'bit.numberlua') +local bxor = bit32.bxor +local bnot = bit32.bnot +local band = bit32.band +local rshift = bit32.rshift + +-- CRC-32-IEEE 802.3 (V.42) +local POLY = 0xEDB88320 + +-- Memoize function pattern (like http://lua-users.org/wiki/FuncTables ). +local function memoize(f) + local mt = {} + local t = setmetatable({}, mt) + function mt:__index(k) + local v = f(k); t[k] = v + return v + end + return t +end + +-- CRC table. +local crc_table = memoize(function(i) + local crc = i + for _=1,8 do + local b = band(crc, 1) + crc = rshift(crc, 1) + if b == 1 then crc = bxor(crc, POLY) end + end + return crc +end) + + +function M.crc32_byte(byte, crc) + crc = bnot(crc or 0) + local v1 = rshift(crc, 8) + local v2 = crc_table[bxor(crc % 256, byte)] + return bnot(bxor(v1, v2)) +end +local M_crc32_byte = M.crc32_byte + + +function M.crc32_string(s, crc) + crc = crc or 0 + for i=1,#s do + crc = M_crc32_byte(s:byte(i), crc) + end + return crc +end +local M_crc32_string = M.crc32_string + + +function M.crc32(s, crc) + if type(s) == 'string' then + return M_crc32_string(s, crc) + else + return M_crc32_byte(s, crc) + end +end + + +M.bit = bit32 -- bit library used + + +return M diff --git a/helmod/lib/deflatelua.lua b/helmod/lib/deflatelua.lua new file mode 100644 index 00000000..59ebe22f --- /dev/null +++ b/helmod/lib/deflatelua.lua @@ -0,0 +1,866 @@ +--[[ + +LUA MODULE + + compress.deflatelua - deflate (and gunzip/zlib) implemented in Lua. + +SYNOPSIS + + local DEFLATE = require 'compress.deflatelua' + -- uncompress gzip file + local fh = assert(io.open'foo.txt.gz', 'rb') + local ofh = assert(io.open'foo.txt', 'wb') + DEFLATE.gunzip {input=fh, output=ofh} + fh:close(); ofh:close() + -- can also uncompress from string including zlib and raw DEFLATE formats. + +DESCRIPTION + + This is a pure Lua implementation of decompressing the DEFLATE format, + including the related zlib and gzip formats. + + Note: This library only supports decompression. + Compression is not currently implemented. + +API + + Note: in the following functions, input stream `fh` may be + a file handle, string, or an iterator function that returns strings. + Output stream `ofh` may be a file handle or a function that + consumes one byte (number 0..255) per call. + + DEFLATE.inflate {input=fh, output=ofh} + + Decompresses input stream `fh` in the DEFLATE format + while writing to output stream `ofh`. + DEFLATE is detailed in http://tools.ietf.org/html/rfc1951 . + + DEFLATE.gunzip {input=fh, output=ofh, disable_crc=disable_crc} + + Decompresses input stream `fh` with the gzip format + while writing to output stream `ofh`. + `disable_crc` (defaults to `false`) will disable CRC-32 checking + to increase speed. + gzip is detailed in http://tools.ietf.org/html/rfc1952 . + + DEFLATE.inflate_zlib {input=fh, output=ofh, disable_crc=disable_crc} + + Decompresses input stream `fh` with the zlib format + while writing to output stream `ofh`. + `disable_crc` (defaults to `false`) will disable CRC-32 checking + to increase speed. + zlib is detailed in http://tools.ietf.org/html/rfc1950 . + + DEFLATE.adler32(byte, crc) --> rcrc + + Returns adler32 checksum of byte `byte` (number 0..255) appended + to string with adler32 checksum `crc`. This is internally used by + `inflate_zlib`. + ADLER32 in detailed in http://tools.ietf.org/html/rfc1950 . + +COMMAND LINE UTILITY + + A `gunziplua` command line utility (in folder `bin`) is also provided. + This mimicks the *nix `gunzip` utility but is a pure Lua implementation + that invokes this library. For help do + + gunziplua -h + +DEPENDENCIES + + Requires 'digest.crc32lua' (used for optional CRC-32 checksum checks). + https://github.com/davidm/lua-digest-crc32lua + + Will use a bit library ('bit', 'bit32', 'bit.numberlua') if available. This + is not that critical for this library but is required by digest.crc32lua. + + 'pythonic.optparse' is only required by the optional `gunziplua` + command-line utilty for command line parsing. + https://github.com/davidm/lua-pythonic-optparse + +INSTALLATION + + Copy the `compress` directory into your LUA_PATH. + +REFERENCES + + [1] DEFLATE Compressed Data Format Specification version 1.3 + http://tools.ietf.org/html/rfc1951 + [2] GZIP file format specification version 4.3 + http://tools.ietf.org/html/rfc1952 + [3] http://en.wikipedia.org/wiki/DEFLATE + [4] pyflate, by Paul Sladen + http://www.paul.sladen.org/projects/pyflate/ + [5] Compress::Zlib::Perl - partial pure Perl implementation of + Compress::Zlib + http://search.cpan.org/~nwclark/Compress-Zlib-Perl/Perl.pm + +LICENSE + + (c) 2008-2011 David Manura. Licensed under the same terms as Lua (MIT). + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + (end license) +--]] + +local M = {_TYPE='module', _NAME='compress.deflatelua', _VERSION='0.3.20111128'} + +local assert = assert +local error = error +local ipairs = ipairs +local pairs = pairs +local print = print +local require = require +local tostring = tostring +local type = type +local setmetatable = setmetatable +local io = io +local math = math +local table_sort = table.sort +local math_max = math.max +local string_char = string.char + +--[[ + Requires the first module listed that exists, else raises like `require`. + If a non-string is encountered, it is returned. + Second return value is module name loaded (or ''). + --]] +local function requireany(...) + local errs = {} + for i = 1, select('#', ...) do local name = select(i, ...) + if type(name) ~= 'string' then return name, '' end + local ok, mod = pcall(require, name) + if ok then return mod, name end + errs[#errs+1] = mod + end + error(table.concat(errs, '\n'), 2) +end + + +local crc32 = require "crc32lua" . crc32_byte +-- local bit, name_ = requireany('bit', 'bit32', 'bit.numberlua', nil) + +local DEBUG = false + +-- Whether to use `bit` library functions in current module. +-- Unlike the crc32 library, it doesn't make much difference in this module. +local NATIVE_BITOPS = (bit ~= nil) + +local band, lshift, rshift +if NATIVE_BITOPS then + band = bit32.band + lshift = bit32.lshift + rshift = bit32.rshift +end + + +local function warn(s) +-- io.stderr:write(s, '\n') +end + + +local function debug(...) + print('DEBUG', ...) +end + + +local function runtime_error(s, level) + error(s) +end + + +local function make_outstate(outbs) + local outstate = {} + outstate.outbs = outbs + outstate.window = {} + outstate.window_pos = 1 + return outstate +end + + +local function output(outstate, byte) + -- debug('OUTPUT:', s) + local window_pos = outstate.window_pos + outstate.outbs(byte) + outstate.window[window_pos] = byte + outstate.window_pos = window_pos % 32768 + 1 -- 32K +end + + +local function noeof(val) + return assert(val, 'unexpected end of file') +end + + +local function hasbit(bits, bit) + return bits % (bit + bit) >= bit +end + + +local function memoize(f) + local mt = {} + local t = setmetatable({}, mt) + function mt:__index(k) + local v = f(k) + t[k] = v + return v + end + return t +end + + +-- small optimization (lookup table for powers of 2) +local pow2 = memoize(function(n) return 2^n end) + +--local tbits = memoize( +-- function(bits) +-- return memoize( function(bit) return getbit(bits, bit) end ) +-- end ) + + +-- weak metatable marking objects as bitstream type +local is_bitstream = setmetatable({}, {__mode='k'}) + + +-- DEBUG +-- prints LSB first +--[[ +local function bits_tostring(bits, nbits) + local s = '' + local tmp = bits + local function f() + local b = tmp % 2 == 1 and 1 or 0 + s = s .. b + tmp = (tmp - b) / 2 + end + if nbits then + for i=1,nbits do f() end + else + while tmp ~= 0 do f() end + end + + return s +end +--]] + +local function bytestream_from_file(fh) + local o = {} + function o:read() + local sb = fh:read(1) + if sb then return sb:byte() end + end + return o +end + + +local function bytestream_from_string(s) + local i = 1 + local o = {} + function o:read() + local by + if i <= #s then + by = s:byte(i) + i = i + 1 + end + return by + end + return o +end + + +local function bytestream_from_function(f) + local i = 0 + local buffer = '' + local o = {} + function o:read() + i = i + 1 + if i > #buffer then + buffer = f() + if not buffer then return end + i = 1 + end + return buffer:byte(i,i) + end + return o +end + + +local function bitstream_from_bytestream(bys) + local buf_byte = 0 + local buf_nbit = 0 + local o = {} + + function o:nbits_left_in_byte() + return buf_nbit + end + + if NATIVE_BITOPS then + function o:read(nbits) + nbits = nbits or 1 + while buf_nbit < nbits do + local byte = bys:read() + if not byte then return end -- note: more calls also return nil + buf_byte = buf_byte + lshift(byte, buf_nbit) + buf_nbit = buf_nbit + 8 + end + local bits + if nbits == 0 then + bits = 0 + elseif nbits == 32 then + bits = buf_byte + buf_byte = 0 + else + bits = band(buf_byte, rshift(0xffffffff, 32 - nbits)) + buf_byte = rshift(buf_byte, nbits) + end + buf_nbit = buf_nbit - nbits + return bits + end + else + function o:read(nbits) + nbits = nbits or 1 + while buf_nbit < nbits do + local byte = bys:read() + if not byte then return end -- note: more calls also return nil + buf_byte = buf_byte + pow2[buf_nbit] * byte + buf_nbit = buf_nbit + 8 + end + local m = pow2[nbits] + local bits = buf_byte % m + buf_byte = (buf_byte - bits) / m + buf_nbit = buf_nbit - nbits + return bits + end + end + + is_bitstream[o] = true + + return o +end + + +local function get_bitstream(o) + local bs + if is_bitstream[o] then + return o +-- elseif io.type(o) == 'file' then +-- bs = bitstream_from_bytestream(bytestream_from_file(o)) + elseif type(o) == 'string' then + bs = bitstream_from_bytestream(bytestream_from_string(o)) + elseif type(o) == 'function' then + bs = bitstream_from_bytestream(bytestream_from_function(o)) + else + runtime_error 'unrecognized type' + end + return bs +end + + +local function get_obytestream(o) + local bs + if type(o) == 'function' then + bs = o +-- elseif io.type(o) == 'file' then +-- bs = function(sbyte) o:write(string_char(sbyte)) end + else + runtime_error('unrecognized type: ' .. tostring(o)) + end + return bs +end + + +local function HuffmanTable(init, is_full) + local t = {} + if is_full then + for val,nbits in pairs(init) do + if nbits ~= 0 then + t[#t+1] = {val=val, nbits=nbits} + --debug('*',val,nbits) + end + end + else + for i=1,#init-2,2 do + local firstval, nbits, nextval = init[i], init[i+1], init[i+2] + --debug(val, nextval, nbits) + if nbits ~= 0 then + for val=firstval,nextval-1 do + t[#t+1] = {val=val, nbits=nbits} + end + end + end + end + table_sort(t, function(a,b) + return a.nbits == b.nbits and a.val < b.val or a.nbits < b.nbits + end) + + -- assign codes + local code = 1 -- leading 1 marker + local nbits = 0 + for i,s in ipairs(t) do + if s.nbits ~= nbits then + code = code * pow2[s.nbits - nbits] + nbits = s.nbits + end + s.code = code + --debug('huffman code:', i, s.nbits, s.val, code, bits_tostring(code)) + code = code + 1 + end + + local minbits = math.huge + local look = {} + for i,s in ipairs(t) do + minbits = math.min(minbits, s.nbits) + look[s.code] = s.val + end + + --for _,o in ipairs(t) do + -- debug(':', o.nbits, o.val) + --end + + -- function t:lookup(bits) return look[bits] end + + local msb = NATIVE_BITOPS and function(bits, nbits) + local res = 0 + for i=1,nbits do + res = lshift(res, 1) + band(bits, 1) + bits = rshift(bits, 1) + end + return res + end or function(bits, nbits) + local res = 0 + for i=1,nbits do + local b = bits % 2 + bits = (bits - b) / 2 + res = res * 2 + b + end + return res + end + + local tfirstcode = memoize( + function(bits) return pow2[minbits] + msb(bits, minbits) end) + + function t:read(bs) + local code = 1 -- leading 1 marker + local nbits = 0 + while 1 do + if nbits == 0 then -- small optimization (optional) + code = tfirstcode[noeof(bs:read(minbits))] + nbits = nbits + minbits + else + local b = noeof(bs:read()) + nbits = nbits + 1 + code = code * 2 + b -- MSB first + --[[NATIVE_BITOPS + code = lshift(code, 1) + b -- MSB first + --]] + end + --debug('code?', code, bits_tostring(code)) + local val = look[code] + if val then + --debug('FOUND', val) + return val + end + end + end + + return t +end + + +local function parse_gzip_header(bs) + -- local FLG_FTEXT = 2^0 + local FLG_FHCRC = 2^1 + local FLG_FEXTRA = 2^2 + local FLG_FNAME = 2^3 + local FLG_FCOMMENT = 2^4 + + local id1 = bs:read(8) + local id2 = bs:read(8) + if id1 ~= 31 or id2 ~= 139 then + runtime_error 'not in gzip format' + end + local cm = bs:read(8) -- compression method + local flg = bs:read(8) -- FLaGs + local mtime = bs:read(32) -- Modification TIME + local xfl = bs:read(8) -- eXtra FLags + local os = bs:read(8) -- Operating System + + if DEBUG then + debug("CM=", cm) + debug("FLG=", flg) + debug("MTIME=", mtime) + -- debug("MTIME_str=",os.date("%Y-%m-%d %H:%M:%S",mtime)) -- non-portable + debug("XFL=", xfl) + debug("OS=", os) + end + + if not os then runtime_error 'invalid header' end + + if hasbit(flg, FLG_FEXTRA) then + local xlen = bs:read(16) + local extra = 0 + for i=1,xlen do + extra = bs:read(8) + end + if not extra then runtime_error 'invalid header' end + end + + local function parse_zstring(bs) + repeat + local by = bs:read(8) + if not by then runtime_error 'invalid header' end + until by == 0 + end + + if hasbit(flg, FLG_FNAME) then + parse_zstring(bs) + end + + if hasbit(flg, FLG_FCOMMENT) then + parse_zstring(bs) + end + + if hasbit(flg, FLG_FHCRC) then + local crc16 = bs:read(16) + if not crc16 then runtime_error 'invalid header' end + -- IMPROVE: check CRC. where is an example .gz file that + -- has this set? + if DEBUG then + debug("CRC16=", crc16) + end + end +end + +local function parse_zlib_header(bs) + local cm = bs:read(4) -- Compression Method + local cinfo = bs:read(4) -- Compression info + local fcheck = bs:read(5) -- FLaGs: FCHECK (check bits for CMF and FLG) + local fdict = bs:read(1) -- FLaGs: FDICT (present dictionary) + local flevel = bs:read(2) -- FLaGs: FLEVEL (compression level) + local cmf = cinfo * 16 + cm -- CMF (Compresion Method and flags) + local flg = fcheck + fdict * 32 + flevel * 64 -- FLaGs + + if cm ~= 8 then -- not "deflate" + runtime_error("unrecognized zlib compression method: " + cm) + end + if cinfo > 7 then + runtime_error("invalid zlib window size: cinfo=" + cinfo) + end + local window_size = 2^(cinfo + 8) + + if (cmf*256 + flg) % 31 ~= 0 then + runtime_error("invalid zlib header (bad fcheck sum)") + end + + if fdict == 1 then + runtime_error("FIX:TODO - FDICT not currently implemented") + local dictid_ = bs:read(32) + end + + return window_size +end + +local function parse_huffmantables(bs) + local hlit = bs:read(5) -- # of literal/length codes - 257 + local hdist = bs:read(5) -- # of distance codes - 1 + local hclen = noeof(bs:read(4)) -- # of code length codes - 4 + + local ncodelen_codes = hclen + 4 + local codelen_init = {} + local codelen_vals = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} + for i=1,ncodelen_codes do + local nbits = bs:read(3) + local val = codelen_vals[i] + codelen_init[val] = nbits + end + local codelentable = HuffmanTable(codelen_init, true) + + local function decode(ncodes) + local init = {} + local nbits + local val = 0 + while val < ncodes do + local codelen = codelentable:read(bs) + --FIX:check nil? + local nrepeat + if codelen <= 15 then + nrepeat = 1 + nbits = codelen + --debug('w', nbits) + elseif codelen == 16 then + nrepeat = 3 + noeof(bs:read(2)) + -- nbits unchanged + elseif codelen == 17 then + nrepeat = 3 + noeof(bs:read(3)) + nbits = 0 + elseif codelen == 18 then + nrepeat = 11 + noeof(bs:read(7)) + nbits = 0 + else + error 'ASSERT' + end + for i=1,nrepeat do + init[val] = nbits + val = val + 1 + end + end + local huffmantable = HuffmanTable(init, true) + return huffmantable + end + + local nlit_codes = hlit + 257 + local ndist_codes = hdist + 1 + + local littable = decode(nlit_codes) + local disttable = decode(ndist_codes) + + return littable, disttable +end + + +local tdecode_len_base +local tdecode_len_nextrabits +local tdecode_dist_base +local tdecode_dist_nextrabits +local function parse_compressed_item(bs, outstate, littable, disttable) + local val = littable:read(bs) + --debug(val, val < 256 and string_char(val)) + if val < 256 then -- literal + output(outstate, val) + elseif val == 256 then -- end of block + return true + else + if not tdecode_len_base then + local t = {[257]=3} + local skip = 1 + for i=258,285,4 do + for j=i,i+3 do t[j] = t[j-1] + skip end + if i ~= 258 then skip = skip * 2 end + end + t[285] = 258 + tdecode_len_base = t + --for i=257,285 do debug('T1',i,t[i]) end + end + if not tdecode_len_nextrabits then + local t = {} + if NATIVE_BITOPS then + for i=257,285 do + local j = math_max(i - 261, 0) + t[i] = rshift(j, 2) + end + else + for i=257,285 do + local j = math_max(i - 261, 0) + t[i] = (j - (j % 4)) / 4 + end + end + t[285] = 0 + tdecode_len_nextrabits = t + --for i=257,285 do debug('T2',i,t[i]) end + end + local len_base = tdecode_len_base[val] + local nextrabits = tdecode_len_nextrabits[val] + local extrabits = bs:read(nextrabits) + local len = len_base + extrabits + + if not tdecode_dist_base then + local t = {[0]=1} + local skip = 1 + for i=1,29,2 do + for j=i,i+1 do t[j] = t[j-1] + skip end + if i ~= 1 then skip = skip * 2 end + end + tdecode_dist_base = t + --for i=0,29 do debug('T3',i,t[i]) end + end + if not tdecode_dist_nextrabits then + local t = {} + if NATIVE_BITOPS then + for i=0,29 do + local j = math_max(i - 2, 0) + t[i] = rshift(j, 1) + end + else + for i=0,29 do + local j = math_max(i - 2, 0) + t[i] = (j - (j % 2)) / 2 + end + end + tdecode_dist_nextrabits = t + --for i=0,29 do debug('T4',i,t[i]) end + end + local dist_val = disttable:read(bs) + local dist_base = tdecode_dist_base[dist_val] + local dist_nextrabits = tdecode_dist_nextrabits[dist_val] + local dist_extrabits = bs:read(dist_nextrabits) + local dist = dist_base + dist_extrabits + + --debug('BACK', len, dist) + for i=1,len do + local pos = (outstate.window_pos - 1 - dist) % 32768 + 1 -- 32K + output(outstate, assert(outstate.window[pos], 'invalid distance')) + end + end + return false +end + + +local function parse_block(bs, outstate) + local bfinal = bs:read(1) + local btype = bs:read(2) + + local BTYPE_NO_COMPRESSION = 0 + local BTYPE_FIXED_HUFFMAN = 1 + local BTYPE_DYNAMIC_HUFFMAN = 2 + local BTYPE_RESERVED_ = 3 + + if DEBUG then + debug('bfinal=', bfinal) + debug('btype=', btype) + end + + if btype == BTYPE_NO_COMPRESSION then + bs:read(bs:nbits_left_in_byte()) + local len = bs:read(16) + local nlen_ = noeof(bs:read(16)) + + for i=1,len do + local by = noeof(bs:read(8)) + output(outstate, by) + end + elseif btype == BTYPE_FIXED_HUFFMAN or btype == BTYPE_DYNAMIC_HUFFMAN then + local littable, disttable + if btype == BTYPE_DYNAMIC_HUFFMAN then + littable, disttable = parse_huffmantables(bs) + else + littable = HuffmanTable {0,8, 144,9, 256,7, 280,8, 288,nil} + disttable = HuffmanTable {0,5, 32,nil} + end + + repeat + local is_done = parse_compressed_item( + bs, outstate, littable, disttable) + until is_done + else + runtime_error 'unrecognized compression type' + end + + return bfinal ~= 0 +end + + +function M.inflate(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local outstate = make_outstate(outbs) + + repeat + local is_final = parse_block(bs, outstate) + until is_final +end +local inflate = M.inflate + + +function M.gunzip(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local disable_crc = t.disable_crc + if disable_crc == nil then disable_crc = false end + + parse_gzip_header(bs) + + local data_crc32 = 0 + + inflate{input=bs, output= + disable_crc and outbs or + function(byte) + data_crc32 = crc32(byte, data_crc32) + outbs(byte) + end + } + + bs:read(bs:nbits_left_in_byte()) + + local expected_crc32 = bs:read(32) + local isize = bs:read(32) -- ignored + if DEBUG then + debug('crc32=', expected_crc32) + debug('isize=', isize) + end + if not disable_crc and data_crc32 then + if data_crc32 ~= expected_crc32 then + runtime_error('invalid compressed data--crc error') + end + end + if bs:read() then + warn 'trailing garbage ignored' + end +end + + +function M.adler32(byte, crc) + local s1 = crc % 65536 + local s2 = (crc - s1) / 65536 + s1 = (s1 + byte) % 65521 + s2 = (s2 + s1) % 65521 + return s2*65536 + s1 +end -- 65521 is the largest prime smaller than 2^16 + + +function M.inflate_zlib(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local disable_crc = t.disable_crc + if disable_crc == nil then disable_crc = false end + + local window_size_ = parse_zlib_header(bs) + + local data_adler32 = 1 + + inflate{input=bs, output= + disable_crc and outbs or + function(byte) + data_adler32 = M.adler32(byte, data_adler32) + outbs(byte) + end + } + + bs:read(bs:nbits_left_in_byte()) + + local b3 = bs:read(8) + local b2 = bs:read(8) + local b1 = bs:read(8) + local b0 = bs:read(8) + local expected_adler32 = ((b3*256 + b2)*256 + b1)*256 + b0 + if DEBUG then + debug('alder32=', expected_adler32) + end + if not disable_crc then + if data_adler32 ~= expected_adler32 then + runtime_error('invalid compressed data--crc error') + end + end + if bs:read() then + warn 'trailing garbage ignored' + end +end + + +return M diff --git a/helmod/lib/zlib-deflate.lua b/helmod/lib/zlib-deflate.lua new file mode 100644 index 00000000..96ed2874 --- /dev/null +++ b/helmod/lib/zlib-deflate.lua @@ -0,0 +1,2569 @@ +--[[ + zlib-deflate.lua + Version: 0.2.0 + LastModified: September 13 2015 + Copyright (C) 2014 David McWilliams + + This library is a Lua implementation of zlib deflate. + + Based on zlib-js (Javascript implementation) + http://www.onicos.com/staff/iz/release/zlib-js/zlib-js.html + Copyright (C) 2012 Masanao Izumo + + Based on zlib (Original implementation) + http://www.zlib.net/ + Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +]]-- + +function requireany(...) + -- (c) 2011-2012 David Manura. Licensed under Lua 5.1 terms (MIT license). + local errs = {} + for i = 1, select('#', ...) do local name = select(i, ...) + if type(name) ~= 'string' then return name, nil end + local ok, mod = pcall(require, name) + if ok then return mod, name end + errs[#errs+1] = mod + end + error(table.concat(errs, '\n'), 2) +end + +local crc32 = require 'crc32lua' . crc32_byte +-- local bit, name_ = requireany('bit', 'bit32', 'bit.numberlua') +local bnot = bit32.bnot +local band, bor, bxor = bit32.band, bit32.bor, bit32.bxor +local lshift, rshift = bit32.lshift, bit32.rshift + +-- common definitions +local ZLIB = {} + +-- Allowed flush values; see deflate() and inflate() below for details +ZLIB.Z_NO_FLUSH = 0 +ZLIB.Z_PARTIAL_FLUSH = 1 +ZLIB.Z_SYNC_FLUSH = 2 +ZLIB.Z_FULL_FLUSH = 3 +ZLIB.Z_FINISH = 4 +ZLIB.Z_BLOCK = 5 +ZLIB.Z_TREES = 6 + +-- Return codes for the compression/decompression functions. Negative values are errors, positive values are used for special but normal events. +ZLIB.Z_OK = 0 +ZLIB.Z_STREAM_END = 1 +ZLIB.Z_NEED_DICT = 2 +ZLIB.Z_ERRNO = (-1) +ZLIB.Z_STREAM_ERROR = (-2) +ZLIB.Z_DATA_ERROR = (-3) +ZLIB.Z_MEM_ERROR = (-4) +ZLIB.Z_BUF_ERROR = (-5) +ZLIB.Z_VERSION_ERROR = (-6) + +-- compression levels +ZLIB.Z_NO_COMPRESSION = 0 +ZLIB.Z_BEST_SPEED = 1 +ZLIB.Z_BEST_COMPRESSION = 9 +ZLIB.Z_DEFAULT_COMPRESSION = (-1) + +-- compression strategy; see deflateInit2() below for details +ZLIB.Z_FILTERED = 1 +ZLIB.Z_HUFFMAN_ONLY = 2 +ZLIB.Z_RLE = 3 +ZLIB.Z_FIXED = 4 +ZLIB.Z_DEFAULT_STRATEGY = 0 + +-- Possible values of the data_type field (though see inflate()) +ZLIB.Z_BINARY = 0 +ZLIB.Z_TEXT = 1 +ZLIB.Z_ASCII = ZLIB.Z_TEXT -- for compatibility with 1.2.2 and earlier +ZLIB.Z_UNKNOWN = 2 + +-- The deflate compression method (the only one supported in this version) +ZLIB.Z_DEFLATED = 8 + +-- Maximum value for memLevel in deflateInit2 +ZLIB.MAX_MEM_LEVEL = 9 + +-- z_stream constructor +ZLIB.z_stream = function() + local s = {} + s.next_in = 0 -- next input byte + s.avail_in = 0 -- number of bytes available in input_data + s.total_in = 0 -- total number of input bytes read so far + + s.next_out = 0 -- next output byte + s.avail_out = 0 -- remaining free space at next_out + s.total_out = 0 -- total number of bytes output so far + + s.msg = nil -- last error message, nil if no error + s.state = nil -- not visible by applications + + s.data_type = 0 -- best guess about the data type: binary or text + + s.input_data = '' -- input data + s.output_data = '' -- output data + s.error = 0 -- error code + s.checksum_function = nil -- crc32(for gzip) or adler32(for zlib) + return s +end + +ZLIB.crc32 = function(crc, buf, offset, len) + if (buf == nil) then return 0 end + + while (len > 0) do + crc = crc32(buf[offset], crc) + offset = offset + 1 + len = len - 1 + end + return crc +end + +-- Maximum value for windowBits in deflateInit2 and inflateInit2. +-- WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files created by gzip. +-- (Files created by minigzip can still be extracted by gzip.) +ZLIB.MAX_WBITS = 15 + +ZLIB.OS_CODE = 0xff -- unknown + +-- default memLevel +local DEF_MEM_LEVEL +if (ZLIB.MAX_MEM_LEVEL >= 8) then + DEF_MEM_LEVEL = 8 +else + DEF_MEM_LEVEL = ZLIB.MAX_MEM_LEVEL +end + +-- The three kinds of block type +local STORED_BLOCK = 0 +local STATIC_TREES = 1 +local DYN_TREES = 2 + +-- The minimum and maximum match lengths +local MIN_MATCH = 3 +local MAX_MATCH = 258 + +-- preset dictionary flag in zlib header +local PRESET_DICT = 0x20 + + +-- =========================================================================== +-- Internal compression state. + +-- number of length codes, not counting the special END_BLOCK code +local LENGTH_CODES = 29 + +-- number of literal bytes 0..255 +local LITERALS = 256 + +-- number of Literal or Length codes, including the END_BLOCK code +local L_CODES = (LITERALS+1+LENGTH_CODES) + +-- number of distance codes +local D_CODES = 30 + +-- number of codes used to transfer the bit lengths +local BL_CODES = 19 + +-- maximum heap size +local HEAP_SIZE = (2*L_CODES+1) + +-- All codes must not exceed MAX_BITS bits +local MAX_BITS = 15 + +-- size of bit buffer in bi_buf +local Buf_size = 16 + +-- Stream status +local INIT_STATE = 42 +local EXTRA_STATE = 69 +local NAME_STATE = 73 +local COMMENT_STATE = 91 +local HCRC_STATE = 103 +local BUSY_STATE = 113 +local FINISH_STATE = 666 + +function new_array(size) + local ary = {} + for i = 0, size-1 do + ary[i] = 0 + end + return ary +end + +function new_ct_array(count) + local ary = {} + for i = 0, count-1 do + ary[i] = {fc=0, dl=0} + end + return ary +end + +function getarg(opts, name, def_value) + if (opts and opts[name]) then + return opts[name] + end + return def_value +end + +function checksum_none() + return 0 +end + +-- constructor +function tree_desc() + local this = {} + this.dyn_tree = nil -- the dynamic tree + this.max_code = 0 -- largest code with non zero frequency + this.stat_desc = nil -- the corresponding static tree + return this +end + +-- constructor +function deflate_state() + local this = {} + this.strm = nil -- pointer back to this zlib stream (TODO remove: cross reference) + this.status = 0 -- as the name implies + this.pending_buf = '' -- output still pending + this.pending_buf_size = 0 -- size of pending_buf + this.wrap = 0 -- bit 0 true for zlib, bit 1 true for gzip + this.gzhead = nil -- TODO: gzip header information to write + this.gzindex = 0 -- TODO: where in extra, name, or comment + this.method = 0 -- STORED (for zip only) or DEFLATED + this.last_flush = 0 -- value of flush param for previous deflate call + + -- used by deflate.c: + this.w_size = 0 -- LZ77 window size (32K by default) + this.w_bits = 0 -- log2(w_size) (8..16) + this.w_mask = 0 -- w_size - 1 + + -- Sliding window. Input bytes are read into the second half of the window, and move to the first half later to keep a dictionary of at least wSize bytes. With this organization, matches are limited to a distance of wSize-MAX_MATCH bytes, but this ensures that IO is always performed with a length multiple of the block size. Also, it limits the window size to 64K, which is quite useful on MSDOS. To do: use the user input buffer as sliding window. + this.window = nil + + -- Actual size of window: 2*wSize, except when the user input buffer is directly used as sliding window. + this.window_size = 0 + + -- Link to older string with same hash index. To limit the size of this array to 64K, this link is maintained only for the last 32K strings. An index in this array is thus a window index modulo 32K. + this.prev = nil + + this.head = nil -- Heads of the hash chains or NIL. + + this.ins_h = 0 -- hash index of string to be inserted + this.hash_size = 0 -- number of elements in hash table + this.hash_bits = 0 -- log2(hash_size) + this.hash_mask = 0 -- hash_size-1 + + -- Number of bits by which ins_h must be shifted at each input step. It must be such that after MIN_MATCH steps, the oldest byte no longer takes part in the hash key, that is: hash_shift * MIN_MATCH >= hash_bits + this.hash_shift = 0 + + -- Window position at the beginning of the current output block. Gets negative when the window is moved backwards. + this.block_start = 0 + + this.match_length = 0 -- length of best match + this.prev_match = 0 -- previous match + this.match_available = false -- set if previous match exists + this.strstart = 0 -- start of string to insert + this.match_start = 0 -- start of matching string + this.lookahead = 0 -- number of valid bytes ahead in window + + -- Length of the best match at previous step. Matches not greater than this are discarded. This is used in the lazy match evaluation. + this.prev_length = 0 + + this.max_chain_length = 0 + -- To speed up deflation, hash chains are never searched beyond this length. A higher limit improves compression ratio but degrades the speed. + + -- Attempt to find a better match only when the current match is strictly smaller than this value. This mechanism is used only for compression levels >= 4. + this.max_lazy_match = 0 + + this.level = 0 -- compression level (1..9) + this.strategy = 0 -- favor or force Huffman coding + + -- Use a faster search when the previous match is longer than this + this.good_match = 0 + + this.nice_match = 0 -- Stop searching when current match exceeds this + + -- used by trees.c: + -- Didn't use ct_data typedef below to suppress compiler warning + this.dyn_ltree = new_ct_array(HEAP_SIZE) -- literal and length tree + this.dyn_dtree = new_ct_array(2*D_CODES+1) -- distance tree + this.bl_tree = new_ct_array(2*BL_CODES+1) -- Huffman tree for bit lengths + + this.l_desc = tree_desc() -- desc. for literal tree + this.d_desc = tree_desc() -- desc. for distance tree + this.bl_desc = tree_desc() -- desc. for bit length tree + + -- number of codes at each bit length for an optimal tree + this.bl_count = new_array(MAX_BITS+1) + + -- The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + -- The same heap array is used to build all trees. + this.heap = new_array(2*L_CODES+1) -- heap used to build the Huffman trees + this.heap_len = 0 -- number of elements in the heap + this.heap_max = 0 -- element of largest frequency + + -- Depth of each subtree used as tie breaker for trees of equal frequency + this.depth = new_array(2*L_CODES+1) + + this.l_buf = nil -- buffer for literals or lengths + + -- Size of match buffer for literals/lengths + this.lit_bufsize = 0 + + this.last_lit = 0 -- running index in l_buf + + -- Buffer for distances. To simplify the code, d_buf and l_buf have the same number of elements. To use different lengths, an extra flag array would be necessary. + this.d_buf = nil + + this.opt_len = 0 -- bit length of current block with optimal trees + this.static_len = 0 -- bit length of current block with static trees + this.matches = 0 -- number of string matches in current block + this.insert = 0 -- bytes at end of window left to insert + + --this.compressed_len = 0 -- total bit length of compressed file mod 2^32 + this.bits_sent = 0 -- bit length of compressed data sent mod 2^32 + + -- Output buffer. bits are inserted starting at the bottom (least significant bits). + this.bi_buf = 0 + + -- Number of valid bits in bi_buf. All bits above the last valid bit are always zero. + this.bi_valid = 0 + + -- High water mark offset in window for initialized bytes -- bytes above this are set to zero in order to avoid memory check warnings when longest match routines access bytes past the input. This is then updated to the new high water mark. + this.high_water = 0 + + return this +end + +-- Minimum amount of lookahead, except at the end of the input file. See deflate.c for comments about the MIN_MATCH+1. +local MIN_LOOKAHEAD = (MAX_MATCH+MIN_MATCH+1) + +-- In order to simplify the code, particularly on 16 bit machines, match distances are limited to MAX_DIST instead of WSIZE. +function MAX_DIST(s) + return s.w_size - MIN_LOOKAHEAD +end + +-- Number of bytes after end of data in window to initialize in order to avoid memory checker errors from longest match routines +local WIN_INIT = MAX_MATCH + + +-- =========================================================================== +-- trees.c -- output deflated data using Huffman coding + +-- Constants + +-- Bit length codes must not exceed MAX_BL_BITS bits +local MAX_BL_BITS = 7 + +-- end of block literal code +local END_BLOCK = 256 + +-- repeat previous bit length 3-6 times (2 bits of repeat count) +local REP_3_6 = 16 + +-- repeat a zero length 3-10 times (3 bits of repeat count) +local REPZ_3_10 = 17 + +-- repeat a zero length 11-138 times (7 bits of repeat count) +local REPZ_11_138 = 18 + +-- extra bits for each length code +local extra_lbits = {0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0} +extra_lbits[0] = 0 + +-- extra bits for each distance code +local extra_dbits = {0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13} +extra_dbits[0] = 0 + +-- extra bits for each bit length code +local extra_blbits = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7} +extra_blbits[0] = 0 + +-- The lengths of the bit length codes are sent in order of decreasing probability, to avoid transmitting the lengths for unused bit length codes. +local bl_order = {17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15} +bl_order[0] = 16 + +-- see definition of array dist_code below +local DIST_CODE_LEN = 512 + +local static_ltree = { + {fc=140, dl=8}, {fc= 76, dl=8}, {fc=204, dl=8}, {fc= 44, dl=8}, +{fc=172, dl=8}, {fc=108, dl=8}, {fc=236, dl=8}, {fc= 28, dl=8}, {fc=156, dl=8}, +{fc= 92, dl=8}, {fc=220, dl=8}, {fc= 60, dl=8}, {fc=188, dl=8}, {fc=124, dl=8}, +{fc=252, dl=8}, {fc= 2, dl=8}, {fc=130, dl=8}, {fc= 66, dl=8}, {fc=194, dl=8}, +{fc= 34, dl=8}, {fc=162, dl=8}, {fc= 98, dl=8}, {fc=226, dl=8}, {fc= 18, dl=8}, +{fc=146, dl=8}, {fc= 82, dl=8}, {fc=210, dl=8}, {fc= 50, dl=8}, {fc=178, dl=8}, +{fc=114, dl=8}, {fc=242, dl=8}, {fc= 10, dl=8}, {fc=138, dl=8}, {fc= 74, dl=8}, +{fc=202, dl=8}, {fc= 42, dl=8}, {fc=170, dl=8}, {fc=106, dl=8}, {fc=234, dl=8}, +{fc= 26, dl=8}, {fc=154, dl=8}, {fc= 90, dl=8}, {fc=218, dl=8}, {fc= 58, dl=8}, +{fc=186, dl=8}, {fc=122, dl=8}, {fc=250, dl=8}, {fc= 6, dl=8}, {fc=134, dl=8}, +{fc= 70, dl=8}, {fc=198, dl=8}, {fc= 38, dl=8}, {fc=166, dl=8}, {fc=102, dl=8}, +{fc=230, dl=8}, {fc= 22, dl=8}, {fc=150, dl=8}, {fc= 86, dl=8}, {fc=214, dl=8}, +{fc= 54, dl=8}, {fc=182, dl=8}, {fc=118, dl=8}, {fc=246, dl=8}, {fc= 14, dl=8}, +{fc=142, dl=8}, {fc= 78, dl=8}, {fc=206, dl=8}, {fc= 46, dl=8}, {fc=174, dl=8}, +{fc=110, dl=8}, {fc=238, dl=8}, {fc= 30, dl=8}, {fc=158, dl=8}, {fc= 94, dl=8}, +{fc=222, dl=8}, {fc= 62, dl=8}, {fc=190, dl=8}, {fc=126, dl=8}, {fc=254, dl=8}, +{fc= 1, dl=8}, {fc=129, dl=8}, {fc= 65, dl=8}, {fc=193, dl=8}, {fc= 33, dl=8}, +{fc=161, dl=8}, {fc= 97, dl=8}, {fc=225, dl=8}, {fc= 17, dl=8}, {fc=145, dl=8}, +{fc= 81, dl=8}, {fc=209, dl=8}, {fc= 49, dl=8}, {fc=177, dl=8}, {fc=113, dl=8}, +{fc=241, dl=8}, {fc= 9, dl=8}, {fc=137, dl=8}, {fc= 73, dl=8}, {fc=201, dl=8}, +{fc= 41, dl=8}, {fc=169, dl=8}, {fc=105, dl=8}, {fc=233, dl=8}, {fc= 25, dl=8}, +{fc=153, dl=8}, {fc= 89, dl=8}, {fc=217, dl=8}, {fc= 57, dl=8}, {fc=185, dl=8}, +{fc=121, dl=8}, {fc=249, dl=8}, {fc= 5, dl=8}, {fc=133, dl=8}, {fc= 69, dl=8}, +{fc=197, dl=8}, {fc= 37, dl=8}, {fc=165, dl=8}, {fc=101, dl=8}, {fc=229, dl=8}, +{fc= 21, dl=8}, {fc=149, dl=8}, {fc= 85, dl=8}, {fc=213, dl=8}, {fc= 53, dl=8}, +{fc=181, dl=8}, {fc=117, dl=8}, {fc=245, dl=8}, {fc= 13, dl=8}, {fc=141, dl=8}, +{fc= 77, dl=8}, {fc=205, dl=8}, {fc= 45, dl=8}, {fc=173, dl=8}, {fc=109, dl=8}, +{fc=237, dl=8}, {fc= 29, dl=8}, {fc=157, dl=8}, {fc= 93, dl=8}, {fc=221, dl=8}, +{fc= 61, dl=8}, {fc=189, dl=8}, {fc=125, dl=8}, {fc=253, dl=8}, {fc= 19, dl=9}, +{fc=275, dl=9}, {fc=147, dl=9}, {fc=403, dl=9}, {fc= 83, dl=9}, {fc=339, dl=9}, +{fc=211, dl=9}, {fc=467, dl=9}, {fc= 51, dl=9}, {fc=307, dl=9}, {fc=179, dl=9}, +{fc=435, dl=9}, {fc=115, dl=9}, {fc=371, dl=9}, {fc=243, dl=9}, {fc=499, dl=9}, +{fc= 11, dl=9}, {fc=267, dl=9}, {fc=139, dl=9}, {fc=395, dl=9}, {fc= 75, dl=9}, +{fc=331, dl=9}, {fc=203, dl=9}, {fc=459, dl=9}, {fc= 43, dl=9}, {fc=299, dl=9}, +{fc=171, dl=9}, {fc=427, dl=9}, {fc=107, dl=9}, {fc=363, dl=9}, {fc=235, dl=9}, +{fc=491, dl=9}, {fc= 27, dl=9}, {fc=283, dl=9}, {fc=155, dl=9}, {fc=411, dl=9}, +{fc= 91, dl=9}, {fc=347, dl=9}, {fc=219, dl=9}, {fc=475, dl=9}, {fc= 59, dl=9}, +{fc=315, dl=9}, {fc=187, dl=9}, {fc=443, dl=9}, {fc=123, dl=9}, {fc=379, dl=9}, +{fc=251, dl=9}, {fc=507, dl=9}, {fc= 7, dl=9}, {fc=263, dl=9}, {fc=135, dl=9}, +{fc=391, dl=9}, {fc= 71, dl=9}, {fc=327, dl=9}, {fc=199, dl=9}, {fc=455, dl=9}, +{fc= 39, dl=9}, {fc=295, dl=9}, {fc=167, dl=9}, {fc=423, dl=9}, {fc=103, dl=9}, +{fc=359, dl=9}, {fc=231, dl=9}, {fc=487, dl=9}, {fc= 23, dl=9}, {fc=279, dl=9}, +{fc=151, dl=9}, {fc=407, dl=9}, {fc= 87, dl=9}, {fc=343, dl=9}, {fc=215, dl=9}, +{fc=471, dl=9}, {fc= 55, dl=9}, {fc=311, dl=9}, {fc=183, dl=9}, {fc=439, dl=9}, +{fc=119, dl=9}, {fc=375, dl=9}, {fc=247, dl=9}, {fc=503, dl=9}, {fc= 15, dl=9}, +{fc=271, dl=9}, {fc=143, dl=9}, {fc=399, dl=9}, {fc= 79, dl=9}, {fc=335, dl=9}, +{fc=207, dl=9}, {fc=463, dl=9}, {fc= 47, dl=9}, {fc=303, dl=9}, {fc=175, dl=9}, +{fc=431, dl=9}, {fc=111, dl=9}, {fc=367, dl=9}, {fc=239, dl=9}, {fc=495, dl=9}, +{fc= 31, dl=9}, {fc=287, dl=9}, {fc=159, dl=9}, {fc=415, dl=9}, {fc= 95, dl=9}, +{fc=351, dl=9}, {fc=223, dl=9}, {fc=479, dl=9}, {fc= 63, dl=9}, {fc=319, dl=9}, +{fc=191, dl=9}, {fc=447, dl=9}, {fc=127, dl=9}, {fc=383, dl=9}, {fc=255, dl=9}, +{fc=511, dl=9}, {fc= 0, dl=7}, {fc= 64, dl=7}, {fc= 32, dl=7}, {fc= 96, dl=7}, +{fc= 16, dl=7}, {fc= 80, dl=7}, {fc= 48, dl=7}, {fc=112, dl=7}, {fc= 8, dl=7}, +{fc= 72, dl=7}, {fc= 40, dl=7}, {fc=104, dl=7}, {fc= 24, dl=7}, {fc= 88, dl=7}, +{fc= 56, dl=7}, {fc=120, dl=7}, {fc= 4, dl=7}, {fc= 68, dl=7}, {fc= 36, dl=7}, +{fc=100, dl=7}, {fc= 20, dl=7}, {fc= 84, dl=7}, {fc= 52, dl=7}, {fc=116, dl=7}, +{fc= 3, dl=8}, {fc=131, dl=8}, {fc= 67, dl=8}, {fc=195, dl=8}, {fc= 35, dl=8}, +{fc=163, dl=8}, {fc= 99, dl=8}, {fc=227, dl=8} +} +static_ltree[0] = {fc=12, dl=8} + +local static_dtree = { + {fc=16, dl=5}, {fc= 8, dl=5}, {fc=24, dl=5}, {fc= 4, dl=5}, +{fc=20, dl=5}, {fc=12, dl=5}, {fc=28, dl=5}, {fc= 2, dl=5}, {fc=18, dl=5}, +{fc=10, dl=5}, {fc=26, dl=5}, {fc= 6, dl=5}, {fc=22, dl=5}, {fc=14, dl=5}, +{fc=30, dl=5}, {fc= 1, dl=5}, {fc=17, dl=5}, {fc= 9, dl=5}, {fc=25, dl=5}, +{fc= 5, dl=5}, {fc=21, dl=5}, {fc=13, dl=5}, {fc=29, dl=5}, {fc= 3, dl=5}, +{fc=19, dl=5}, {fc=11, dl=5}, {fc=27, dl=5}, {fc= 7, dl=5}, {fc=23, dl=5} +} +static_dtree[0] = {fc=0, dl=5} + +local _dist_code = { + 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +} +_dist_code[0] = 0 + +local _length_code = { + 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +} +_length_code[0] = 0 + +local base_length = { +1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, +96, 112, 128, 160, 192, 224, 0 +} +base_length[0] = 0 + +local base_dist = { +1, 2, 3, 4, 6, 8, 12, 16, 24, +32, 48, 64, 96, 128, 192, 256, 384, 512, 768, +1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +} +base_dist[0] = 0 + +local static_l_desc = { + static_tree = static_ltree, + extra_bits = extra_lbits, + extra_base = LITERALS+1, + elems = L_CODES, + max_length = MAX_BITS +} + +local static_d_desc = { + static_tree = static_dtree, + extra_bits = extra_dbits, + extra_base = 0, + elems = D_CODES, + max_length = MAX_BITS +} + +local static_bl_desc = { + static_tree = nil, + extra_bits = extra_blbits, + extra_base = 0, + elems = BL_CODES, + max_length = MAX_BL_BITS +} + +-- Mapping from a distance to a distance code. dist is the distance - 1 and must not have side effects. _dist_code[256] and _dist_code[257] are never used. +function d_code(dist) + if (dist < 256) then + return _dist_code[dist] + end + return _dist_code[256 + rshift(dist, 7)] +end + +-- Send a code of the given tree. c and tree must not have side effects +function send_code(s, c, tree) + return send_bits(s, tree[c].fc, tree[c].dl) +end + +-- Output a byte on the stream. +-- IN assertion: there is enough room in pending_buf. +function put_byte(s, c) + s.pending_buf = s.pending_buf .. string.char(c) +end + +-- Output a short LSB first on the stream. +-- IN assertion: there is enough room in pendingBuf. +function put_short(s, w) + s.pending_buf = s.pending_buf .. string.char(band(w, 0xff)) + s.pending_buf = s.pending_buf .. string.char(band(rshift(w, 8), 0xff)) +end + +function send_bits(s, value, length) + s.bits_sent = s.bits_sent + length + + -- If not enough room in bi_buf, use (valid) bits from bi_buf and (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) unused bits in value. + if (s.bi_valid > Buf_size - length) then + s.bi_buf = bor(s.bi_buf, lshift(value, s.bi_valid)) + put_short(s, s.bi_buf) + s.bi_buf = rshift(value, Buf_size - s.bi_valid) + s.bi_valid = s.bi_valid + length - Buf_size + else + s.bi_buf = bor(s.bi_buf, lshift(value, s.bi_valid)) + s.bi_valid = s.bi_valid + length + end +end + +-- Initialize the tree data structures for a new zlib stream. +function _tr_init(s) + s.l_desc.dyn_tree = s.dyn_ltree + s.l_desc.stat_desc = static_l_desc + + s.d_desc.dyn_tree = s.dyn_dtree + s.d_desc.stat_desc = static_d_desc + + s.bl_desc.dyn_tree = s.bl_tree + s.bl_desc.stat_desc = static_bl_desc + + s.bi_buf = 0 + s.bi_valid = 0 + + --s.compressed_len = 0 + --s.bits_sent = 0 + + -- Initialize the first block of the first file: + init_block(s) +end + +-- Initialize a new block. +function init_block(s) + -- Initialize the trees. + for n = 0, L_CODES-1 do s.dyn_ltree[n].fc = 0 end + for n = 0, D_CODES-1 do s.dyn_dtree[n].fc = 0 end + for n = 0, BL_CODES-1 do s.bl_tree[n].fc = 0 end + + s.dyn_ltree[END_BLOCK].fc = 1 + s.opt_len = 0 + s.static_len = 0 + s.last_lit = 0 + s.matches = 0 +end + +-- Index within the heap array of least frequent node in the Huffman tree +local SMALLEST = 1 + +-- Remove the smallest element from the heap and recreate the heap with one less element. Updates heap and heap_len. +function pqremove(s, tree) + local top = s.heap[SMALLEST] + s.heap[SMALLEST] = s.heap[s.heap_len] + s.heap_len = s.heap_len - 1 + pqdownheap(s, tree, SMALLEST) + return top +end + +-- Compares to subtrees, using the tree depth as tie breaker when the subtrees have equal frequency. This minimizes the worst case length. +function smaller(tree, n, m, depth) + return tree[n].fc < tree[m].fc or (tree[n].fc == tree[m].fc and depth[n] <= depth[m]) +end + +-- Restore the heap property by moving down the tree starting at node k, exchanging a node with the smallest of its two sons if necessary, stopping when the heap property is re-established (each father smaller than its two sons). +function pqdownheap(s, tree, k) + local v = s.heap[k] + local j = lshift(k, 1) -- left son of k + while (j <= s.heap_len) do + -- Set j to the smallest of the two sons: + if (j < s.heap_len and smaller(tree, s.heap[j+1], s.heap[j], s.depth)) then + j = j + 1 + end + -- Exit if v is smaller than both sons + if (smaller(tree, v, s.heap[j], s.depth)) then break end + + -- Exchange v with the smallest son + s.heap[k] = s.heap[j] + k = j + + -- And continue down the tree, setting j to the left son of k + j = lshift(j, 1) + end + s.heap[k] = v +end + +-- Compute the optimal bit lengths for a tree and update the total bit length for the current block. +-- IN assertion: the fields freq and dad are set, heap[heap_max] and above are the tree nodes sorted by increasing frequency. +-- OUT assertions: the field len is set to the optimal bit length, the array bl_count contains the frequencies for each bit length. The length opt_len is updated; static_len is also updated if stree is not null. +function gen_bitlen(s, desc) + local tree = desc.dyn_tree + local max_code = desc.max_code + local stree = desc.stat_desc.static_tree + local extra = desc.stat_desc.extra_bits + local base = desc.stat_desc.extra_base + local max_length = desc.stat_desc.max_length + local h -- heap index + local n, m -- iterate over the tree elements + local bits -- bit length + local xbits -- extra bits + local f -- frequency + local overflow = 0 -- number of elements with bit length too large + + for bits = 0, MAX_BITS do s.bl_count[bits] = 0 end + + -- In a first pass, compute the optimal bit lengths (which may overflow in the case of the bit length tree). + tree[s.heap[s.heap_max]].dl = 0 -- root of the heap + + h = s.heap_max+1 + while (h < HEAP_SIZE) do + n = s.heap[h] + bits = tree[tree[n].dl].dl + 1 + if (bits > max_length) then + bits = max_length + overflow = overflow + 1 + end + -- We overwrite tree[n].Dad which is no longer needed + tree[n].dl = bits + + if (n > max_code) then + -- not a leaf node + -- continue + else + s.bl_count[bits] = s.bl_count[bits] + 1 + xbits = 0 + if (n >= base) then xbits = extra[n-base] end + f = tree[n].fc + s.opt_len = s.opt_len + f * (bits + xbits) + if (stree) then s.static_len = s.static_len + f * (stree[n].dl + xbits) end + end + h = h + 1 + end + if (overflow == 0) then return end + + --Trace((stderr,"\nbit length overflow\n")); + -- This happens for example on obj2 and pic of the Calgary corpus + + -- Find the first bit length which could increase: + while (overflow > 0) do + bits = max_length-1 + while (s.bl_count[bits] == 0) do bits = bits - 1 end + s.bl_count[bits] = s.bl_count[bits] - 1 -- move one leaf down the tree + s.bl_count[bits+1] = s.bl_count[bits+1] + 2 -- move one overflow item as its brother + s.bl_count[max_length] = s.bl_count[max_length] - 1 + -- The brother of the overflow item also moves one step up, but this does not affect bl_count[max_length] + overflow = overflow - 2 + end + + -- Now recompute all bit lengths, scanning in increasing frequency. h is still equal to HEAP_SIZE. (It is simpler to reconstruct all lengths instead of fixing only the wrong ones. This idea is taken from 'ar' written by Haruhiko Okumura.) + for bits = max_length, 1, -1 do + n = s.bl_count[bits] + while (n ~= 0) do + h = h - 1 + m = s.heap[h] + if (m > max_code) then + -- continue + else + if (tree[m].dl ~= bits) then + --Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len = s.opt_len + (bits - tree[m].dl) * tree[m].fc + tree[m].dl = bits + end + n = n - 1 + end + end + end +end + +-- Generate the codes for a given tree and bit counts (which need not be optimal). +-- IN assertion: the array bl_count contains the bit length statistics for the given tree and the field len is set for all tree elements. +-- OUT assertion: the field code is set for all tree elements of non zero code length. +function gen_codes (tree, max_code, bl_count) + local next_code = {} + local code = 0 + + -- The distribution counts are first used to generate the code values without bit reversal. + for bits = 1, MAX_BITS do + code = lshift(code + bl_count[bits-1], 1) + next_code[bits] = code + end + -- Check that the bit counts in bl_count are consistent. The last code must be all ones. + assert(code + bl_count[MAX_BITS]-1 == lshift(1, MAX_BITS)-1, + "inconsistent bit counts") + --Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); + + for n = 0, max_code do + local len = tree[n].dl + if (len == 0) then + -- continue + else + -- Now reverse the bits + tree[n].fc = bi_reverse(next_code[len], len) + next_code[len] = next_code[len] + 1 + + --Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", + -- n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); + end + end +end + +-- Construct one Huffman tree and assigns the code bit strings and lengths. Update the total bit length for the current block. +-- IN assertion: the field freq is set for all tree elements. +-- OUT assertions: the fields len and code are set to the optimal bit length and corresponding code. The length opt_len is updated; static_len is also updated if stree is not null. The field max_code is set. +function build_tree(s, desc) + local tree = desc.dyn_tree + local stree = desc.stat_desc.static_tree + local elems = desc.stat_desc.elems + local n, m -- iterate over heap elements + local max_code = -1 -- largest code with non zero frequency + local node -- new node being created + + -- Construct the initial heap, with least frequent element in heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + s.heap_len = 0 + s.heap_max = HEAP_SIZE + + for n = 0, elems-1 do + if (tree[n].fc ~= 0) then + s.heap_len = s.heap_len + 1 + max_code = n + s.heap[s.heap_len] = n + s.depth[n] = 0 + else + tree[n].dl = 0 + end + end + + -- The pkzip format requires that at least one distance code exists, and that at least one bit should be sent even if there is only one possible code. So to avoid special checks later on we force at least two codes of non zero frequency. + while (s.heap_len < 2) do + s.heap_len = s.heap_len + 1 + if (max_code < 2) then + max_code = max_code + 1 + s.heap[s.heap_len] = max_code + else + s.heap[s.heap_len] = 0 + end + node = s.heap[s.heap_len] + tree[node].fc = 1 + s.depth[node] = 0 + s.opt_len = s.opt_len - 1 + if (stree) then s.static_len = s.static_len - stree[node].dl end + -- node is 0 or 1 so it does not have extra bits + end + desc.max_code = max_code + + -- The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, establish sub-heaps of increasing lengths: + for n = rshift(s.heap_len, 1), 1, -1 do pqdownheap(s, tree, n) end + + -- Construct the Huffman tree by repeatedly combining the least two frequent nodes. + node = elems -- next internal node of the tree + while (s.heap_len >= 2) do + n = pqremove(s, tree) -- n = node of least frequency + m = s.heap[SMALLEST] -- m = node of next least frequency + + -- keep the nodes sorted by frequency + s.heap_max = s.heap_max - 1 + s.heap[s.heap_max] = n + s.heap_max = s.heap_max - 1 + s.heap[s.heap_max] = m + + -- Create a new node father of n and m + tree[node].fc = tree[n].fc + tree[m].fc + if (s.depth[n] >= s.depth[m]) then + s.depth[node] = s.depth[n] + else + s.depth[node] = s.depth[m] + 1 + end + tree[n].dl = node + tree[m].dl = node +--#ifdef DUMP_BL_TREE +-- if (tree == s->bl_tree) { +-- fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", +-- node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); +-- } +--#endif + + -- and insert the new node in the heap + s.heap[SMALLEST] = node + node = node + 1 + pqdownheap(s, tree, SMALLEST) + end + + s.heap_max = s.heap_max - 1 + s.heap[s.heap_max] = s.heap[SMALLEST] + + -- At this point, the fields freq and dad are set. We can now generate the bit lengths. + gen_bitlen(s, desc) + + -- The field len is now set, we can generate the bit codes + gen_codes(tree, max_code, s.bl_count) +end + +-- Scan a literal or distance tree to determine the frequencies of the codes in the bit length tree. +function scan_tree (s, tree, max_code) + local prevlen = -1 -- last emitted length + local curlen -- length of current code + local nextlen = tree[0].dl -- length of next code + local count = 0 -- repeat count of the current code + local max_count = 7 -- max repeat count + local min_count = 4 -- min repeat count + + if (nextlen == 0) then max_count = 138; min_count = 3 end + tree[max_code+1].dl = 0xffff -- guard + + for n = 0, max_code do + curlen = nextlen; nextlen = tree[n+1].dl + count = count + 1 + if (count < max_count and curlen == nextlen) then + -- continue + else + if (count < min_count) then + s.bl_tree[curlen].fc = s.bl_tree[curlen].fc + count + elseif (curlen ~= 0) then + if (curlen ~= prevlen) then s.bl_tree[curlen].fc = s.bl_tree[curlen].fc + 1 end + s.bl_tree[REP_3_6].fc = s.bl_tree[REP_3_6].fc + 1 + elseif (count <= 10) then + s.bl_tree[REPZ_3_10].fc = s.bl_tree[REPZ_3_10].fc + 1 + else + s.bl_tree[REPZ_11_138].fc = s.bl_tree[REPZ_11_138].fc + 1 + end + count = 0; prevlen = curlen + if (nextlen == 0) then + max_count = 138; min_count = 3 + elseif (curlen == nextlen) then + max_count = 6; min_count = 3 + else + max_count = 7; min_count = 4 + end + end + end +end + +-- Send a literal or distance tree in compressed form, using the codes in bl_tree. +function send_tree (s, tree, max_code) + local prevlen = -1 -- last emitted length + local curlen -- length of current code + local nextlen = tree[0].dl -- length of next code + local count = 0 -- repeat count of the current code + local max_count = 7 -- max repeat count + local min_count = 4 -- min repeat count + + -- tree[max_code+1].Len = -1 -- guard already set + if (nextlen == 0) then max_count = 138; min_count = 3 end + + for n = 0, max_code do + curlen = nextlen; nextlen = tree[n+1].dl + count = count + 1 + if (count < max_count and curlen == nextlen) then + -- continue + else + if (count < min_count) then + while count ~= 0 do + send_code(s, curlen, s.bl_tree) + count = count - 1 + end + elseif (curlen ~= 0) then + if (curlen ~= prevlen) then + send_code(s, curlen, s.bl_tree) + count = count - 1 + end + assert(count >= 3 and count <= 6, " 3_6?") + send_code(s, REP_3_6, s.bl_tree); send_bits(s, count-3, 2) + + elseif (count <= 10) then + send_code(s, REPZ_3_10, s.bl_tree); send_bits(s, count-3, 3) + + else + send_code(s, REPZ_11_138, s.bl_tree); send_bits(s, count-11, 7) + end + count = 0; prevlen = curlen + if (nextlen == 0) then + max_count = 138; min_count = 3 + elseif (curlen == nextlen) then + max_count = 6; min_count = 3 + else + max_count = 7; min_count = 4 + end + end + end +end + +-- Construct the Huffman tree for the bit lengths and return the index in bl_order of the last bit length code to send. +function build_bl_tree(s) + local max_blindex -- index of last bit length code of non zero freq + + -- Determine the bit length frequencies for literal and distance trees + scan_tree(s, s.dyn_ltree, s.l_desc.max_code) + scan_tree(s, s.dyn_dtree, s.d_desc.max_code) + + -- Build the bit length tree: + build_tree(s, s.bl_desc) + -- opt_len now includes the length of the tree representations, except the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + + -- Determine the number of bit length codes to send. The pkzip format requires that at least 4 bit length codes be sent. (appnote.txt says 3 but the actual value used is 4.) + + max_blindex = BL_CODES-1 + while (max_blindex >= 3) do + if (s.bl_tree[bl_order[max_blindex]].dl ~= 0) then break end + max_blindex = max_blindex - 1 + end + -- Update opt_len to include the bit length tree and counts + s.opt_len = s.opt_len + 3*(max_blindex+1) + 5+5+4 + --Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + -- s->opt_len, s->static_len)); + + return max_blindex +end + +-- Send the header for a block using dynamic Huffman trees: the counts, the lengths of the bit length codes, the literal tree and the distance tree. +-- IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. +function send_all_trees(s, lcodes, dcodes, blcodes) + assert(lcodes >= 257 and dcodes >= 1 and blcodes >= 4, "not enough codes") + assert(lcodes <= L_CODES and dcodes <= D_CODES and blcodes <= BL_CODES, + "too many codes") + --Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5) -- not +255 as stated in appnote.txt + send_bits(s, dcodes-1, 5) + send_bits(s, blcodes-4, 4) -- not -3 as stated in appnote.txt + for rank = 0, blcodes - 1 do + --Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank]].dl, 3) + end + --Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes-1) -- literal tree + --Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes-1) -- distance tree + --Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +end + +-- Send a stored block +function _tr_stored_block(s, buf, stored_len, last) + send_bits(s, lshift(STORED_BLOCK, 1)+last, 3) -- send block type + --s.compressed_len = band(s.compressed_len + 3 + 7, 0xfffffff8) + --s.compressed_len = s.compressed_len + lshift(stored_len + 4, 3) + copy_block(s, buf, stored_len, 1) -- with header +end + +-- Flush the bits in the bit buffer to pending output (leaves at most 7 bits) +function _tr_flush_bits(s) + bi_flush(s) +end + +-- Send one empty static block to give enough lookahead for inflate. This takes 10 bits, of which 7 may remain in the bit buffer. +function _tr_align(s) + send_bits(s, lshift(STATIC_TREES, 1), 3) + send_code(s, END_BLOCK, static_ltree) + --s.compressed_len = s.compressed_len + 10 -- 3 for block type, 7 for EOB + bi_flush(s) +end + +-- Determine the best encoding for the current block: dynamic trees, static trees or store, and output the encoded block to the zip file. +function _tr_flush_block(s, buf, stored_len, last) + local opt_lenb, static_lenb -- opt_len and static_len in bytes + local max_blindex = 0 -- index of last bit length code of non zero freq + + -- Build the Huffman trees unless a stored block is forced + if (s.level > 0) then + + -- Check if the file is binary or text + if (s.strm.data_type == ZLIB.Z_UNKNOWN) then + s.strm.data_type = detect_data_type(s) + end + + -- Construct the literal and distance trees + build_tree(s, s.l_desc) + --Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + -- s->static_len)); + + build_tree(s, s.d_desc) + --Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + -- s->static_len)); + -- At this point, opt_len and static_len are the total bit lengths of the compressed block data, excluding the tree representations. + + -- Build the bit length tree for the above two trees, and get the index in bl_order of the last bit length code to send. + max_blindex = build_bl_tree(s) + + -- Determine the best encoding. Compute the block lengths in bytes. + opt_lenb = rshift(s.opt_len+3+7, 3) + static_lenb = rshift(s.static_len+3+7, 3) + + --Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + -- opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + -- s->last_lit)); + + if (static_lenb <= opt_lenb) then opt_lenb = static_lenb end + + else + --Assert(buf != (char*)0, "lost buf"); + static_lenb = stored_len + 5 -- force a stored block + opt_lenb = static_lenb + end + + if (stored_len+4 <= opt_lenb and buf ~= nil) then + -- 4: two words for the lengths + + -- The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + -- Otherwise we can't have processed more than WSIZE input bytes since the last block flush, because compression would have been successful. If LIT_BUFSIZE <= WSIZE, it is never too late to transform a block into a stored block. + _tr_stored_block(s, buf, stored_len, last) + + elseif (s.strategy == ZLIB.Z_FIXED or static_lenb == opt_lenb) then + send_bits(s, lshift(STATIC_TREES, 1)+last, 3) + compress_block(s, static_ltree, static_dtree) + --s.compressed_len = s.compressed_len + 3 + s.static_len + else + send_bits(s, lshift(DYN_TREES, 1)+last, 3) + send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1) + compress_block(s, s.dyn_ltree, s.dyn_dtree) + --s.compressed_len = s.compressed_len + 3 + s.opt_len + end + --assert(s.compressed_len == s.bits_sent, "bad compressed size") + -- The above check is made mod 2^32, for files larger than 512 MB and uLong implemented on 32 bits. + init_block(s) + + if (last > 0) then + bi_windup(s) + --s.compressed_len = s.compressed_len + 7 -- align on byte boundary + end + --Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + -- s->compressed_len-7*last)); +end + +-- Save the match info and tally the frequency counts. Return true if the current block must be flushed. +function _tr_tally (s, dist, lc) + s.d_buf[s.last_lit] = dist + s.l_buf[s.last_lit] = lc + s.last_lit = s.last_lit + 1 + if (dist == 0) then + -- lc is the unmatched char + s.dyn_ltree[lc].fc = s.dyn_ltree[lc].fc + 1 + else + s.matches = s.matches + 1 + -- Here, lc is the match length - MIN_MATCH + dist = dist - 1 -- dist = match distance - 1 + assert(dist < MAX_DIST(s) + and lc <= MAX_MATCH-MIN_MATCH + and d_code(dist) < D_CODES, "_tr_tally: bad match") + + s.dyn_ltree[_length_code[lc]+LITERALS+1].fc = s.dyn_ltree[_length_code[lc]+LITERALS+1].fc + 1 + s.dyn_dtree[d_code(dist)].fc = s.dyn_dtree[d_code(dist)].fc + 1 + end + + return (s.last_lit == s.lit_bufsize-1) + -- We avoid equality with lit_bufsize because of wraparound at 64K on 16 bit machines and because stored blocks are restricted to 64K-1 bytes. +end + +function _tr_tally_lit(s, c) + return _tr_tally(s, 0, c) +end + +function _tr_tally_dist(s, distance, length) + return _tr_tally(s, distance, length) +end + +-- Send the block data compressed using the given Huffman trees +function compress_block(s, ltree, dtree) + local dist -- distance of matched string + local lc -- match length or unmatched char (if dist == 0) + local lx = 0 -- running index in l_buf + local code -- the code to send + local extra -- number of extra bits to send + + while (lx < s.last_lit) do + dist = s.d_buf[lx] + lc = s.l_buf[lx] + lx = lx + 1 + if (dist == 0) then + send_code(s, lc, ltree) -- send a literal byte + --Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + else + -- Here, lc is the match length - MIN_MATCH + code = _length_code[lc] + send_code(s, code+LITERALS+1, ltree) -- send the length code + extra = extra_lbits[code] + if (extra ~= 0) then + lc = lc - base_length[code] + send_bits(s, lc, extra) -- send the extra length bits + end + dist = dist - 1 -- dist is now the match distance - 1 + code = d_code(dist) + assert(code < D_CODES, "bad d_code") + + send_code(s, code, dtree) -- send the distance code + extra = extra_dbits[code] + if (extra ~= 0) then + dist = dist - base_dist[code] + send_bits(s, dist, extra) -- send the extra distance bits + end + end -- literal or match pair ? + + -- Check that the overlay between pending_buf and d_buf+l_buf is ok: + assert(s.pending_buf:len() < s.lit_bufsize + 2*lx, + "pendingBuf overflow") + + end + + send_code(s, END_BLOCK, ltree) +end + +-- Check if the data type is TEXT or BINARY, using the following algorithm: +-- - TEXT if the two conditions below are satisfied: +-- a) There are no non-portable control characters belonging to the "black list" (0..6, 14..25, 28..31). +-- b) There is at least one printable character belonging to the "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). +-- - BINARY otherwise. +-- - The following partially-portable control characters form a "gray list" that is ignored in this detection algorithm: +-- (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). +-- IN assertion: the fields Freq of dyn_ltree are set. +function detect_data_type(s) + -- black_mask is the bit mask of black-listed bytes + -- set bits 0..6, 14..25, and 28..31 + -- 0xf3ffc07f = binary 11110011111111111100000001111111 + local black_mask = 0xf3ffc07f + + -- Check for non-textual ("black-listed") bytes. + for n = 0, 31 do + black_mask = rshift(black_mask, 1) + if (band(black_mask, 1) and (s.dyn_ltree[n].fc ~= 0)) then + return ZLIB.Z_BINARY + end + end + + -- Check for textual ("white-listed") bytes. + if (s.dyn_ltree[9].fc ~= 0 or s.dyn_ltree[10].fc ~= 0 or s.dyn_ltree[13].fc ~= 0) then + return ZLIB.Z_TEXT + end + for n = 32, LITERALS-1 do + if (s.dyn_ltree[n].fc ~= 0) then + return ZLIB.Z_TEXT + end + end + + -- There are no "black-listed" or "white-listed" bytes: + -- this stream either is empty or has tolerated ("gray-listed") bytes only. + return ZLIB.Z_BINARY +end + +-- Reverse the first len bits of a code, using straightforward code (a faster method would use a table) +-- IN assertion: 1 <= len <= 15 +function bi_reverse(code, len) + local res = 0 + while (len > 0) do + res = bor(res, band(code, 1)) + code = rshift(code, 1) + res = lshift(res, 1) + len = len - 1 + end + return rshift(res, 1) +end + +-- Flush the bit buffer, keeping at most 7 bits in it. +function bi_flush(s) + if (s.bi_valid == 16) then + put_short(s, s.bi_buf) + s.bi_buf = 0 + s.bi_valid = 0 + elseif (s.bi_valid >= 8) then + put_byte(s, band(s.bi_buf, 0xff)) + s.bi_buf = rshift(s.bi_buf, 8) + s.bi_valid = s.bi_valid - 8 + end +end + +-- Flush the bit buffer and align the output on a byte boundary +function bi_windup(s) + if (s.bi_valid > 8) then + put_short(s, s.bi_buf) + elseif (s.bi_valid > 0) then + put_byte(s, s.bi_buf) + end + s.bi_buf = 0 + s.bi_valid = 0 +end + +-- Copy a stored block, storing first the length and its one's complement if requested. +function copy_block(s, buf, len, header) + bi_windup(s) -- align on byte boundary + + if (header) then + put_short(s, len) + put_short(s, bnot(len)) + end + local window = s.window + while (len > 0) do + len = len - 1 + put_byte(s, window[buf]) + buf = buf + 1 + end +end + + +-- =========================================================================== +-- deflate.c -- compress data using the deflation algorithm + +-- enum block_state +local need_more = 0 -- block not completed, need more input or more output +local block_done = 1 -- block flush performed +local finish_started = 2 -- finish started, need only more output at next deflate +local finish_done = 3 -- finish done, accept no more input or output + +local TOO_FAR = 4096 + +-- Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 +-- For deflate_fast() (levels <= 3) good is ignored and lazy has a different meaning. +local configuration_table = { + {good_length=4, max_lazy=4, nice_length=8, max_chain=4, func=deflate_fast}, -- max speed, no lazy matches + {good_length=4, max_lazy=5, nice_length=16, max_chain=8, func=deflate_fast}, + {good_length=4, max_lazy=6, nice_length=32, max_chain=32, func=deflate_fast}, + {good_length=4, max_lazy=4, nice_length=16, max_chain=16, func=deflate_slow}, -- lazy matches + {good_length=8, max_lazy=16, nice_length=32, max_chain=32, func=deflate_slow}, + {good_length=8, max_lazy=16, nice_length=128, max_chain=128, func=deflate_slow}, + {good_length=8, max_lazy=32, nice_length=128, max_chain=256, func=deflate_slow}, + {good_length=32, max_lazy=128, nice_length=258, max_chain=1024, func=deflate_slow}, + {good_length=32, max_lazy=258, nice_length=258, max_chain=4096, func=deflate_slow}, +} +configuration_table[0] = + {good_length=0, max_lazy=0, nice_length=0, max_chain=0, func=deflate_stored} -- store only + +-- rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH +function RANK(f) + if (f > 4) then + return lshift(f, 1) - 9 + end + return lshift(f, 1) +end + +-- Update a hash value with the given input byte +-- IN assertion: all calls to to UPDATE_HASH are made with consecutive input characters, so that a running hash key can be computed from the previous key instead of complete recalculation each time. +function UPDATE_HASH(s,c) + s.ins_h = band(bxor(lshift(s.ins_h, s.hash_shift), c), s.hash_mask) +end + +-- Insert string str in the dictionary and set match_head to the previous head of the hash chain (the most recent string with same hash key). Return the previous length of the hash chain. +-- IN assertion: all calls to to INSERT_STRING are made with consecutive input characters and the first MIN_MATCH bytes of str are valid (except for the last MIN_MATCH-1 bytes of the input file). +function INSERT_STRING(s) + local str = s.strstart + UPDATE_HASH(s, s.window[str + (MIN_MATCH-1)]) + local match_head = s.head[s.ins_h] + s.prev[band(str, s.w_mask)] = s.head[s.ins_h] + s.head[s.ins_h] = str + return match_head +end + +-- Initialize the hash table (avoiding 64K overflow for 16 bit systems). +-- prev[] will be initialized on the fly. +function CLEAR_HASH(s) + for i = 0, s.hash_size-1 do + s.head[i] = 0 + end +end + +ZLIB.deflateInit = function(opts) + local level = getarg(opts, 'level', ZLIB.Z_DEFAULT_COMPRESSION) + local method = getarg(opts, 'method', ZLIB.Z_DEFLATED) + local windowBits = getarg(opts, 'windowBits', ZLIB.MAX_WBITS) + local memLevel = getarg(opts, 'memLevel', DEF_MEM_LEVEL) + local strategy = getarg(opts, 'strategy', ZLIB.Z_DEFAULT_STRATEGY) + return deflateInit2(level, method, windowBits, memLevel, strategy) +end + +function deflateInit2(level, method, windowBits, memLevel, strategy) + local s -- deflate_state + local wrap = 1 + + local strm = ZLIB.z_stream() + if (level == ZLIB.Z_DEFAULT_COMPRESSION) then level = 6 end + + if (windowBits < 0) then -- suppress zlib wrapper + wrap = 0 + windowBits = -windowBits + elseif (windowBits > 15) then + wrap = 2 -- write gzip wrapper instead + windowBits = windowBits - 16 + end + + if (wrap == 1 and ZLIB.adler32) then + strm.checksum_function = ZLIB.adler32 + elseif (wrap == 2 and ZLIB.crc32) then + strm.checksum_function = ZLIB.crc32 + else + strm.checksum_function = checksum_none + end + + if (memLevel < 1 or memLevel > ZLIB.MAX_MEM_LEVEL or method ~= ZLIB.Z_DEFLATED + or windowBits < 8 or windowBits > 15 or level < 0 or level > 9 + or strategy < 0 or strategy > ZLIB.Z_FIXED) then + return nil -- ZLIB.Z_STREAM_ERROR + end + if (windowBits == 8) then windowBits = 9 end -- until 256-byte window bug fixed + s = deflate_state() + strm.state = s + s.strm = strm + + s.wrap = wrap + s.gzhead = nil + s.w_bits = windowBits + s.w_size = lshift(1, s.w_bits) + s.w_mask = s.w_size - 1 + + s.hash_bits = memLevel + 7 + s.hash_size = lshift(1, s.hash_bits) + s.hash_mask = s.hash_size - 1 + s.hash_shift = band((s.hash_bits+MIN_MATCH-1)/MIN_MATCH, 0xffffffff) + + s.window = new_array(s.w_size) + s.prev = new_array(s.w_size) + s.head = new_array(s.hash_size) + + s.high_water = 0 -- nothing written to s->window yet + + s.lit_bufsize = lshift(1, memLevel + 6) -- 16K elements by default + + s.pending_buf = '' + s.pending_buf_size = s.lit_bufsize * 4 + + s.d_buf = new_array(s.lit_bufsize) + s.l_buf = new_array(s.lit_bufsize) + + s.level = level + s.strategy = strategy + s.method = method + + ZLIB.deflateReset(strm) + return strm +end + +ZLIB.deflateResetKeep = function(strm) + local s + + if (not strm or not strm.state) then + return ZLIB.Z_STREAM_ERROR + end + + strm.total_in = 0 + strm.total_out = 0 + strm.msg = nil -- use zfree if we ever allocate msg dynamically + strm.data_type = ZLIB.Z_UNKNOWN + + s = strm.state + s.pending_buf = '' + + if (s.wrap < 0) then + s.wrap = -s.wrap -- was made negative by deflate(..., Z_FINISH) + end + if (s.wrap ~= 0) then + s.status = INIT_STATE + else + s.status = BUSY_STATE + end + strm.adler = strm.checksum_function(0, nil, 0, 0) + s.last_flush = ZLIB.Z_NO_FLUSH + + _tr_init(s) + + return ZLIB.Z_OK +end + +ZLIB.deflateReset = function(strm) + local ret + + ret = ZLIB.deflateResetKeep(strm) + if (ret == ZLIB.Z_OK) then + lm_init(strm.state) + end + return ret +end + +-- For the default windowBits of 15 and memLevel of 8, this function returns a close to exact, as well as small, upper bound on the compressed size. They are coded as constants here for a reason--if the #define's are changed, then this function needs to be changed as well. The return value for 15 and 8 only works for those exact settings. +-- For any setting other than those defaults for windowBits and memLevel, the value returned is a conservative worst case for the maximum expansion resulting from using fixed blocks instead of stored blocks, which deflate can emit on compressed data for some combinations of the parameters. +-- This function could be more sophisticated to provide closer upper bounds for every combination of windowBits and memLevel. But even the conservative upper bound of about 14% expansion does not seem onerous for output buffer allocation. +ZLIB.deflateBound = function(strm, sourceLen) + local s + local complen, wraplen + local str + + -- conservative upper bound for compressed data + complen = sourceLen + rshift(sourceLen + 7, 3) + rshift(sourceLen + 63, 6) + 5 + + -- if can't get parameters, return conservative bound plus zlib wrapper + if (not strm or not strm.state) then + return complen + 6 + end + + -- compute wrapper length + s = strm.state + if (s.wrap == 0) then -- raw deflate + wraplen = 0 + elseif (s.wrap == 1) then -- zlib wrapper + if (s.strstart ~= 0) then + wraplen = 6 + 4 + else + wraplen = 6 + end + elseif (s.wrap == 2) then -- gzip wrapper + wraplen = 18 + if (s.gzhead ~= nil) then -- user-supplied gzip header + if (s.gzhead.extra ~= nil) then + wraplen = wraplen + 2 + s.gzhead.extra:len() + end + str = s.gzhead.name + if (str ~= nil) then + local len = 0 + repeat + len = len + 1 + wraplen = wraplen + 1 + until (len >= str:len() or str:byte(len,len) == 0) + end + str = s.gzhead.comment + if (str ~= nil) then + local len = 0 + repeat + len = len + 1 + wraplen = wraplen + 1 + until (len >= str:len() or str:byte(len,len) == 0) + end + if (s.gzhead.hcrc) then + wraplen = wraplen + 2 + end + end + else -- for compiler happiness + wraplen = 6 + end + + -- if not default parameters, return conservative bound + if (s.w_bits ~= 15 or s.hash_bits ~= 8 + 7) then + return complen + wraplen + end + + -- default settings: return tight bound for that case + return sourceLen + rshift(sourceLen, 12) + rshift(sourceLen, 14) + rshift(sourceLen, 25) + 13 - 6 + wraplen +end + +-- Put a short in the pending buffer. The 16-bit value is put in MSB order. +-- IN assertion: the stream state is correct and there is enough room in pending_buf. +function putShortMSB (s, b) + s.pending_buf = s.pending_buf .. string.char(band(rshift(b, 8), 0xff)) + s.pending_buf = s.pending_buf .. string.char(band(b, 0xff)) +end + +-- Flush as much pending output as possible. All deflate() output goes through this function so some applications may wish to modify it to avoid allocating a large strm->next_out buffer and copying into it. +-- (See also read_buf()). +function flush_pending(strm) + local len + local s = strm.state + + _tr_flush_bits(s) + len = s.pending_buf:len() + if (len > strm.avail_out) then len = strm.avail_out end + if (len == 0) then return end + + strm.output_data = strm.output_data .. s.pending_buf:sub(1, len) + s.pending_buf = s.pending_buf:sub(len + 1) + strm.total_out = strm.total_out + len + strm.avail_out = strm.avail_out - len +end + +local z_errmsg = { + 'need dictionary', -- Z_NEED_DICT 2 + 'stream end', -- Z_STREAM_END 1 + '', -- Z_OK 0 + 'file error', -- Z_ERRNO (-1) + 'stream error', -- Z_STREAM_ERROR (-2) + 'data error', -- Z_DATA_ERROR (-3) + 'insufficient memory', -- Z_MEM_ERROR (-4) + 'buffer error', -- Z_BUF_ERROR (-5) + 'incompatible version', -- Z_VERSION_ERROR (-6) + '' +} +function ERR_MSG(err) + return z_errmsg[3 - err] +end +function ERR_RETURN(strm, err) + strm.msg = ERR_MSG(err) + return err +end + +ZLIB.deflate = function(strm, flush) + local old_flush -- value of flush param for previous deflate call + local s + + if (not strm or not strm.state or + flush > ZLIB.Z_BLOCK or flush < 0) then + return ZLIB.Z_STREAM_ERROR + end + s = strm.state + + if (strm.output_data == nil + or (strm.input_data == nil and strm.avail_in ~= 0) + or (s.status == FINISH_STATE and flush ~= ZLIB.Z_FINISH)) then + return ERR_RETURN(strm, ZLIB.Z_STREAM_ERROR) + end + if (strm.avail_out == 0) then return ERR_RETURN(strm, ZLIB.Z_BUF_ERROR) end + + s.strm = strm -- just in case + old_flush = s.last_flush + s.last_flush = flush + + -- Write the header + if (s.status == INIT_STATE) then + if (s.wrap == 2) then + strm.adler = strm.checksum_function(0, nil, 0, 0) + put_byte(s, 31) + put_byte(s, 139) + put_byte(s, 8) + if (s.gzhead == nil) then + put_byte(s, 0) + put_byte(s, 0) + put_byte(s, 0) + put_byte(s, 0) + put_byte(s, 0) + if (s.level == 9) then + put_byte(s, 2) + elseif (s.strategy >= ZLIB.Z_HUFFMAN_ONLY or s.level < 2) then + put_byte(s, 4) + else + put_byte(s, 0) + end + put_byte(s, ZLIB.OS_CODE) + s.status = BUSY_STATE + else + local flags = 0 + if (s.gzhead.text) then flags = flags + 1 end + if (s.gzhead.hcrc) then flags = flags + 2 end + if (s.gzhead.extra) then flags = flags + 4 end + if (s.gzhead.name) then flags = flags + 8 end + if (s.gzhead.comment) then flags = flags + 16 end + put_byte(s, flags) + put_byte(s, band(s.gzhead.time, 0xff)) + put_byte(s, band(rshift(s.gzhead.time, 8), 0xff)) + put_byte(s, band(rshift(s.gzhead.time, 16), 0xff)) + put_byte(s, band(rshift(s.gzhead.time, 24), 0xff)) + if (s.level == 9) then + put_byte(s, 2) + elseif (s.strategy >= ZLIB.Z_HUFFMAN_ONLY or s.level < 2) then + put_byte(s, 4) + else + put_byte(s, 0) + end + put_byte(s, band(s.gzhead.os, 0xff)) + if (s.gzhead.extra ~= nil) then + put_byte(s, band(s.gzhead.extra:len(), 0xff)) + put_byte(s, band(rshift(s.gzhead.extra:len(), 8), 0xff)) + end + if (s.gzhead.hcrc) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, s.pending) + end + s.gzindex = 0 + s.status = EXTRA_STATE + end + else + local header = lshift(ZLIB.Z_DEFLATED + lshift(s.w_bits-8, 4), 8) + local level_flags + + if (s.strategy >= ZLIB.Z_HUFFMAN_ONLY or s.level < 2) then + level_flags = 0 + elseif (s.level < 6) then + level_flags = 1 + elseif (s.level == 6) then + level_flags = 2 + else + level_flags = 3 + end + header = bor(header, lshift(level_flags, 6)) + if (s.strstart ~= 0) then header = bor(header, PRESET_DICT) end + header = header + 31 - (header % 31) + + s.status = BUSY_STATE + putShortMSB(s, header) + + -- Save the adler32 of the preset dictionary: + if (s.strstart ~= 0) then + putShortMSB(s, rshift(strm.adler, 16)) + putShortMSB(s, band(strm.adler, 0xffff)) + end + strm.adler = strm.checksum_function(0, nil, 0, 0) + end + end + if (s.status == EXTRA_STATE) then + if (s.gzhead.extra ~= nil) then + local beg = s.pending_buf:len() -- start of bytes to update crc + local extra_len = s.gzhead.extra:len() + + while (s.gzindex < band(extra_len, 0xffff)) do + if (s.pending_buf:len() == s.pending_buf_size) then + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, beg, s.pending_buf:len() - beg) + end + flush_pending(strm) + beg = s.pending_buf:len() + if (s.pending_buf:len() == s.pending_buf_size) then + break + end + end + s.gzindex = s.gzindex + 1 + put_byte(s, band(s.gzhead.extra:byte(s.gzindex,s.gzindex), 0xff)) + end + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, beg, s.pending_buf:len() - beg) + end + if (s.gzindex == extra_len) then + s.gzindex = 0 + s.status = NAME_STATE + end + else + s.status = NAME_STATE + end + end + if (s.status == NAME_STATE) then + if (s.gzhead.name ~= nil) then + local beg = s.pending_buf:len() -- start of bytes to update crc + local val = 1 + + while (val ~= 0) do + if (s.pending_buf:len() == s.pending_buf_size) then + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf + beg, s.pending_buf:len() - beg) + end + flush_pending(strm) + beg = s.pending_buf:len() + if (s.pending_buf:len() == s.pending_buf_size) then + val = 1 + break + end + end + if (s.gzindex == s.gzhead.name:len()) then + val = 0 + else + s.gzindex = s.gzindex + 1 + val = band(s.gzhead.name:byte(s.gzindex,s.gzindex), 0xff) + end + put_byte(s, val) + end + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, beg, s.pending_buf:len() - beg) + end + if (val == 0) then + s.gzindex = 0 + s.status = COMMENT_STATE + end + else + s.status = COMMENT_STATE + end + end + if (s.status == COMMENT_STATE) then + if (s.gzhead.comment ~= nil) then + local beg = s.pending_buf:len() -- start of bytes to update crc + local val = 1 + + while (val ~= 0) do + if (s.pending_buf:len() == s.pending_buf_size) then + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, beg, s.pending_buf:len() - beg) + end + flush_pending(strm) + beg = s.pending_buf:len() + if (s.pending_buf:len() == s.pending_buf_size) then + val = 1 + break + end + end + if (s.gzhead.comment:len() == s.gzindex) then + val = 0 + else + s.gzindex = s.gzindex + 1 + val = band(s.gzhead.comment:byte(s.gzindex,s.gzindex), 0xff) + end + put_byte(s, val) + end + if (s.gzhead.hcrc and s.pending_buf:len() > beg) then + strm.adler = strm.checksum_function(strm.adler, s.pending_buf, beg, s.pending_buf:len() - beg) + end + if (val == 0) then + s.status = HCRC_STATE + end + else + s.status = HCRC_STATE + end + end + if (s.status == HCRC_STATE) then + if (s.gzhead.hcrc) then + if (s.pending_buf:len() + 2 > s.pending_buf_size) then + flush_pending(strm) + end + if (s.pending_buf:len() + 2 <= s.pending_buf_size) then + put_byte(s, band(strm.adler, 0xff)) + put_byte(s, band(rshift(strm.adler, 8), 0xff)) + strm.adler = strm.checksum_function(0, nil, 0, 0) + s.status = BUSY_STATE + end + else + s.status = BUSY_STATE + end + end + + -- Flush as much pending output as possible + if (s.pending_buf:len() ~= 0) then + flush_pending(strm) + if (strm.avail_out == 0) then + -- Since avail_out is 0, deflate will be called again with more output space, but possibly with both pending and avail_in equal to zero. There won't be anything to do, but this is not an error situation so make sure we return OK instead of BUF_ERROR at next call of deflate: + s.last_flush = -1 + return ZLIB.Z_OK + end + + -- Make sure there is something to do and avoid duplicate consecutive flushes. For repeated and useless calls with Z_FINISH, we keep returning Z_STREAM_END instead of Z_BUF_ERROR. + elseif (strm.avail_in == 0 and RANK(flush) <= RANK(old_flush) and flush ~= ZLIB.Z_FINISH) then + return ERR_RETURN(strm, ZLIB.Z_BUF_ERROR) + end + + -- User must not provide more input after the first FINISH: + if (s.status == FINISH_STATE and strm.avail_in ~= 0) then + return ERR_RETURN(strm, ZLIB.Z_BUF_ERROR) + end + + -- Start a new block or continue the current one. + if (strm.avail_in ~= 0 or s.lookahead ~= 0 + or (flush ~= ZLIB.Z_NO_FLUSH and s.status ~= FINISH_STATE)) then + local bstate + + if (s.strategy == ZLIB.Z_HUFFMAN_ONLY) then + bstate = deflate_huff(s, flush) + elseif (s.strategy == ZLIB.Z_RLE) then + bstate = deflate_rle(s, flush) + else + if (s.level >= 4) then + bstate = deflate_slow(s, flush) + elseif (s.level >= 1) then + bstate = deflate_fast(s, flush) + else + bstate = deflate_stored(s, flush) + end + --bstate = (configuration_table[s.level].func)(s, flush) + end + + if (bstate == finish_started or bstate == finish_done) then + s.status = FINISH_STATE + end + if (bstate == need_more or bstate == finish_started) then + if (strm.avail_out == 0) then + s.last_flush = -1 -- avoid BUF_ERROR next call, see above + end + return ZLIB.Z_OK + -- If flush != Z_NO_FLUSH && avail_out == 0, the next call of deflate should use the same flush parameter to make sure that the flush is complete. So we don't have to output an empty block here, this will be done at next call. This also ensures that for a very small output buffer, we emit at most one empty block. + end + if (bstate == block_done) then + if (flush == ZLIB.Z_PARTIAL_FLUSH) then + _tr_align(s) + elseif (flush ~= ZLIB.Z_BLOCK) then -- FULL_FLUSH or SYNC_FLUSH + _tr_stored_block(s, nil, 0, 0) + -- For a full flush, this empty block will be recognized as a special marker by inflate_sync(). + if (flush == ZLIB.Z_FULL_FLUSH) then + CLEAR_HASH(s) -- forget history + if (s.lookahead == 0) then + s.strstart = 0 + s.block_start = 0 + s.insert = 0 + end + end + end + flush_pending(strm) + if (strm.avail_out == 0) then + s.last_flush = -1 -- avoid BUF_ERROR at next call, see above + return ZLIB.Z_OK + end + end + end + assert(s.strm.avail_out > 0, "bug2") + + if (flush ~= ZLIB.Z_FINISH) then return ZLIB.Z_OK end + if (s.wrap <= 0) then return ZLIB.Z_STREAM_END end + + -- Write the trailer + if (s.wrap == 2) then + put_byte(s, band(strm.adler, 0xff)) + put_byte(s, band(rshift(strm.adler, 8), 0xff)) + put_byte(s, band(rshift(strm.adler, 16), 0xff)) + put_byte(s, band(rshift(strm.adler, 24), 0xff)) + put_byte(s, band(strm.total_in, 0xff)) + put_byte(s, band(rshift(strm.total_in, 8), 0xff)) + put_byte(s, band(rshift(strm.total_in, 16), 0xff)) + put_byte(s, band(rshift(strm.total_in, 24), 0xff)) + else + putShortMSB(s, rshift(strm.adler, 16)) + putShortMSB(s, band(strm.adler, 0xffff)) + end + flush_pending(strm) + -- If avail_out is zero, the application will call deflate again to flush the rest. + if (s.wrap > 0) then s.wrap = -s.wrap end -- write the trailer only once! + if (s.pending_buf:len() ~= 0) then + return ZLIB.Z_OK + else + return ZLIB.Z_STREAM_END + end +end + +ZLIB.deflateEnd = function(strm) + local status + + if (not strm or not strm.state) then return ZLIB.Z_STREAM_ERROR end + + status = strm.state.status + if (status ~= INIT_STATE + and status ~= EXTRA_STATE + and status ~= NAME_STATE + and status ~= COMMENT_STATE + and status ~= HCRC_STATE + and status ~= BUSY_STATE + and status ~= FINISH_STATE) then + return ZLIB.Z_STREAM_ERROR + end + + -- Deallocate in reverse order of allocations: + strm.state.pending_buf = nil + strm.state.head = nil + strm.state.prev = nil + strm.state.window = nil + + strm.state = nil + + if (status == BUSY_STATE) then + return ZLIB.Z_DATA_ERROR + else + return ZLIB.Z_OK + end +end + +-- Read a new buffer from the current input stream, update the adler32 and total number of bytes read. All deflate() input goes through this function so some applications may wish to modify it to avoid allocating a large strm.input_data buffer and copying from it. +-- (See also flush_pending()). +function read_buf(strm, buf, offset, size) + local len = strm.avail_in + + if (len > size) then len = size end + if (len == 0) then return 0 end + + strm.avail_in = strm.avail_in - len + + local src_i = strm.next_in + for i = 1, len do + buf[offset + i - 1] = band(strm.input_data:byte(src_i + i, src_i + i), 0xff) + end + if (strm.state.wrap ~= 0) then + strm.adler = strm.checksum_function(strm.adler, buf, offset, len) + end + strm.next_in = strm.next_in + len + strm.total_in = strm.total_in + len + + return len +end + +-- Initialize the "longest match" routines for a new zlib stream +function lm_init (s) + s.window_size = 2*s.w_size + + CLEAR_HASH(s) + + -- Set the default configuration parameters: + s.max_lazy_match = configuration_table[s.level].max_lazy + s.good_match = configuration_table[s.level].good_length + s.nice_match = configuration_table[s.level].nice_length + s.max_chain_length = configuration_table[s.level].max_chain + + s.strstart = 0 + s.block_start = 0 + s.lookahead = 0 + s.insert = 0 + s.match_length = MIN_MATCH-1 + s.prev_length = s.match_length + s.match_available = false + s.ins_h = 0 +end + + +-- Set match_start to the longest match starting at the given string and return its length. Matches shorter or equal to prev_length are discarded, in which case the result is equal to prev_length and match_start is garbage. +-- IN assertions: cur_match is the head of the hash chain for the current string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 +-- OUT assertion: the match length is not greater than s->lookahead. +function longest_match(s, cur_match) + local window = s.window + local chain_length = s.max_chain_length -- max hash chain length + + -- zlib.js: scan -> window[scan], match -> window[match] + local scan = s.strstart -- current string + local match -- matched string + + local len -- length of current match + local best_len = s.prev_length -- best match length so far + local nice_match = s.nice_match -- stop if match long enough + local limit = 0 + if (s.strstart > MAX_DIST(s)) then + limit = s.strstart - MAX_DIST(s) + end + -- Stop when cur_match becomes <= limit. To simplify the code, we prevent matches with the string of window index 0. + local prev = s.prev + local wmask = s.w_mask + + -- zlib.js: strend -> window[strend] + local strend = s.strstart + MAX_MATCH + local scan_end1 = window[scan+best_len-1] + local scan_end = window[scan+best_len] + + -- The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + -- It is easy to get rid of this optimization if necessary. + assert(s.hash_bits >= 8 and MAX_MATCH == 258, "Code too clever") + + -- Do not waste too much time if we already have a good match: + if (s.prev_length >= s.good_match) then + chain_length = rshift(chain_length, 2) + end + -- Do not look for matches beyond the end of the input. This is necessary to make deflate deterministic. + if (nice_match > s.lookahead) then nice_match = s.lookahead end + + assert(s.strstart <= s.window_size-MIN_LOOKAHEAD, "need lookahead") + + repeat + assert(cur_match < s.strstart, "no future") + match = cur_match + + -- Skip to next match if the match length cannot increase or if the match length is less than 2. Note that the checks below for insufficient lookahead only occur occasionally for performance reasons. Therefore uninitialized memory will be accessed, and conditional jumps will be made that depend on those values. However the length of the match is limited to the lookahead, so the output of deflate is not affected by the uninitialized values. + if (window[match+best_len] ~= scan_end + or window[match+best_len-1] ~= scan_end1 + or window[match] ~= window[scan] + or window[match+1] ~= window[scan+1]) then + match = match + 1 + -- continue + else + match = match + 1 + + -- The check at best_len-1 can be removed because it will be made again later. (This heuristic is not always a win.) + -- It is not necessary to compare scan[2] and match[2] since they are always equal when the other bytes match, given that the hash keys are equal and that HASH_BITS >= 8. + scan = scan + 2; match = match + 1 + assert(window[scan] == window[match], "match[2]?") + + -- We check for insufficient lookahead only every 8th comparison; the 256th check will be made at strstart+258. + while (scan < strend) do + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + scan = scan + 1; match = match + 1; if (window[scan] ~= window[match]) then break end + end + + --Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan) + scan = strend - MAX_MATCH + + if (len > best_len) then + s.match_start = cur_match + best_len = len + if (len >= nice_match) then break end + scan_end1 = window[scan+best_len-1] + scan_end = window[scan+best_len] + end + end + + cur_match = prev[band(cur_match, wmask)] + chain_length = chain_length - 1 + until (cur_match <= limit or chain_length == 0) + + if (best_len <= s.lookahead) then return best_len end + return s.lookahead +end + +-- Check that the match at match_start is indeed a match. +function check_match(s, start, match, length) end + +-- Fill the window when the lookahead becomes insufficient. +-- Updates strstart and lookahead. +-- IN assertion: lookahead < MIN_LOOKAHEAD +-- OUT assertions: strstart <= window_size-MIN_LOOKAHEAD +-- At least one byte has been read, or avail_in == 0; reads are performed for at least two bytes (required for the zip translate_eol option -- not supported here). +function fill_window(s) + local n, m + local p, ary -- Posf * + local more -- Amount of free space at the end of the window. + local wsize = s.w_size + + assert(s.lookahead < MIN_LOOKAHEAD, "already enough lookahead") + + repeat + more = s.window_size - s.lookahead - s.strstart + + -- If the window is almost full and there is insufficient lookahead, move the upper half to the lower one to make room in the upper half. + if (s.strstart >= wsize+MAX_DIST(s)) then + + for i = 0, wsize-1 do s.window[i] = s.window[wsize + i] end + s.match_start = s.match_start - wsize + s.strstart = s.strstart - wsize -- we now have strstart >= MAX_DIST + s.block_start = s.block_start - wsize + + -- Slide the hash table (could be avoided with 32 bit values at the expense of memory usage). We slide even when level == 0 to keep the hash table consistent if we switch back to level > 0 later. (Using level 0 permanently is not an optimal usage of zlib, so we don't care about this pathological case.) + n = s.hash_size + -- p = &s->head[n]; + ary = s.head + p = n + repeat + p = p - 1 + m = ary[p] + if (m >= wsize) then ary[p] = m-wsize else ary[p] = 0 end + n = n - 1 + until (n == 0) + + n = wsize + -- p = &s->prev[n]; + ary = s.prev + p = n + repeat + p = p - 1 + m = ary[p] + if (m >= wsize) then ary[p] = m-wsize else ary[p] = 0 end + -- If n is not on any hash chain, prev[n] is garbage but its value will never be used. + n = n - 1 + until (n == 0) + + more = more + wsize + end + if (s.strm.avail_in == 0) then break end + + -- If there was no sliding: + -- strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && more == window_size - lookahead - strstart => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) => more >= window_size - 2*WSIZE + 2 + -- In the BIG_MEM or MMAP case (not yet supported), + -- window_size == input_size + MIN_LOOKAHEAD && strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + -- Otherwise, window_size == 2*WSIZE so more >= 2. + -- If there was sliding, more >= WSIZE. So in all cases, more >= 2. + assert(more >= 2, "more < 2") + + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more) + s.lookahead = s.lookahead + n + + -- Initialize the hash value now that we have some input: + if (s.lookahead + s.insert >= MIN_MATCH) then + local str = s.strstart - s.insert + s.ins_h = s.window[str] + UPDATE_HASH(s, s.window[str + 1]) + + while (s.insert > 0) do + UPDATE_HASH(s, s.window[str + MIN_MATCH-1]) + s.prev[band(str, s.w_mask)] = s.head[s.ins_h] + s.head[s.ins_h] = str + str = str + 1 + s.insert = s.insert - 1 + if (s.lookahead + s.insert < MIN_MATCH) then + break + end + end + end + -- If the whole input has less than MIN_MATCH bytes, ins_h is garbage, but this is not important since only literal bytes will be emitted. + + until (s.lookahead >= MIN_LOOKAHEAD or s.strm.avail_in == 0) + + -- If the WIN_INIT bytes after the end of the current data have never been written, then zero those bytes in order to avoid memory check reports of the use of uninitialized (or uninitialised as Julian writes) bytes by the longest match routines. Update the high water mark for the next time through here. WIN_INIT is set to MAX_MATCH since the longest match routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + if (s.high_water < s.window_size) then + local curr = s.strstart + s.lookahead + local init + + if (s.high_water < curr) then + -- Previous high water mark below current data -- zero WIN_INIT bytes or up to end of window, whichever is less. + init = s.window_size - curr + if (init > WIN_INIT) then + init = WIN_INIT + end + for i = 0, init-1 do s.window[i + curr] = 0 end + s.high_water = curr + init + elseif (s.high_water < curr + WIN_INIT) then + -- High water mark at or above current data, but below current data plus WIN_INIT -- zero out to current data plus WIN_INIT, or up to end of window, whichever is less. + init = curr + WIN_INIT - s.high_water + if (init > s.window_size - s.high_water) then + init = s.window_size - s.high_water + end + for i = 0, init-1 do s.window[s.high_water + i] = 0 end + s.high_water = s.high_water + init + end + end + + assert(s.strstart <= s.window_size - MIN_LOOKAHEAD, + "not enough room for search") +end + +-- Flush the current block, with given end-of-file flag. +-- IN assertion: strstart is set to the end of the current match. +function FLUSH_BLOCK_ONLY(s, last) + local buf = nil + if (s.block_start >= 0) then + buf = s.block_start + end + _tr_flush_block(s, buf, s.strstart - s.block_start, last) + s.block_start = s.strstart + flush_pending(s.strm) + --Tracev((stderr,"[FLUSH]")); +end + +-- Copy without compression as much as possible from the input stream, return the current block state. +-- This function does not insert new strings in the dictionary since uncompressible data is probably not useful. This function is used only for the level=0 compression option. +-- NOTE: this function should be optimized to avoid extra copying from window to pending_buf. +function deflate_stored(s, flush) + -- Stored blocks are limited to 0xffff bytes, pending_buf is limited to pending_buf_size, and each stored block has a 5 byte header: + local max_block_size = 0xffff + local max_start + + if (max_block_size > s.pending_buf_size - 5) then + max_block_size = s.pending_buf_size - 5 + end + + -- Copy as much as possible from input to output: + while (true) do + -- Fill the window as much as possible: + if (s.lookahead <= 1) then + + assert(s.strstart < s.w_size+MAX_DIST(s) + or s.block_start >= s.w_size, "slide too late") + + fill_window(s) + if (s.lookahead == 0 and flush == ZLIB.Z_NO_FLUSH) then return need_more end + + if (s.lookahead == 0) then break end -- flush the current block + end + assert(s.block_start >= 0, "block gone") + + s.strstart = s.strstart + s.lookahead + s.lookahead = 0 + + -- Emit a stored block if pending_buf will be full: + max_start = s.block_start + max_block_size + if (s.strstart == 0 or s.strstart >= max_start) then + -- strstart == 0 is possible when wraparound on 16-bit machine + s.lookahead = s.strstart - max_start + s.strstart = max_start + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + -- Flush if we may have to slide, otherwise block_start may become negative and the data will be gone: + if (s.strstart - s.block_start >= MAX_DIST(s)) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + end + s.insert = 0 + if (flush == ZLIB.Z_FINISH) then + FLUSH_BLOCK_ONLY(s, 1); if (s.strm.avail_out == 0) then return finish_started end + return finish_done + end + if (s.strstart > s.block_start) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + return block_done +end + +-- Compress as much as possible from the input stream, return the current block state. +-- This function does not perform lazy evaluation of matches and inserts new strings in the dictionary only for unmatched strings or for short matches. It is used only for the fast compression options. +function deflate_fast(s, flush) + local hash_head -- head of the hash chain + local bflush -- set if current block must be flushed + + while (true) do + -- Make sure that we always have enough lookahead, except at the end of the input file. We need MAX_MATCH bytes for the next match, plus MIN_MATCH bytes to insert the string following the next match. + if (s.lookahead < MIN_LOOKAHEAD) then + fill_window(s) + if (s.lookahead < MIN_LOOKAHEAD and flush == ZLIB.Z_NO_FLUSH) then + return need_more + end + if (s.lookahead == 0) then break end -- flush the current block + end + + -- Insert the string window[strstart .. strstart+2] in the dictionary, and set hash_head to the head of the hash chain: + hash_head = 0 + if (s.lookahead >= MIN_MATCH) then + hash_head = INSERT_STRING(s) + end + + -- Find the longest match, discarding those <= prev_length. + -- At this point we have always match_length < MIN_MATCH + if (hash_head ~= 0 and s.strstart - hash_head <= MAX_DIST(s)) then + -- To simplify the code, we prevent matches with the string of window index 0 (in particular we have to avoid a match of the string with itself at the start of the input file). + s.match_length = longest_match(s, hash_head) + -- longest_match() sets match_start + end + if (s.match_length >= MIN_MATCH) then + check_match(s, s.strstart, s.match_start, s.match_length) + + bflush = _tr_tally_dist(s, s.strstart - s.match_start, s.match_length - MIN_MATCH) + + s.lookahead = s.lookahead - s.match_length + + -- Insert new strings in the hash table only if the match length is not too large. This saves time but degrades compression. + if (s.match_length <= s.max_insert_length and s.lookahead >= MIN_MATCH) then + s.match_length = s.match_length - 1 -- string at strstart already in table + repeat + s.strstart = s.strstart + 1 + hash_head = INSERT_STRING(s) + -- strstart never exceeds WSIZE-MAX_MATCH, so there are always MIN_MATCH bytes ahead. + s.match_length = s.match_length - 1 + until (s.match_length == 0) + s.strstart = s.strstart + 1 + else + s.strstart = s.strstart + s.match_length + s.match_length = 0 + s.ins_h = s.window[s.strstart] + UPDATE_HASH(s, s.window[s.strstart+1]) + -- If lookahead < MIN_MATCH, ins_h is garbage, but it does not matter since it will be recomputed at next deflate call. + end + else + -- No match, output a literal byte + --Tracevv((stderr,"%c", s->window[s->strstart])); + bflush = _tr_tally_lit (s, s.window[s.strstart]) + s.lookahead = s.lookahead - 1 + s.strstart = s.strstart + 1 + end + if (bflush) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + end + if (s.strstart < MIN_MATCH-1) then s.insert = s.strstart else s.insert = MIN_MATCH-1 end + if (flush == ZLIB.Z_FINISH) then + FLUSH_BLOCK_ONLY(s, 1); if (s.strm.avail_out == 0) then return finish_started end + return finish_done + end + if (s.last_lit ~= 0) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + return block_done +end + +-- Same as above, but achieves better compression. We use a lazy evaluation for matches: a match is finally adopted only if there is no better match at the next window position. +function deflate_slow(s, flush) + local hash_head -- head of hash chain + local bflush -- set if current block must be flushed + + -- Process the input block. + while (true) do + -- Make sure that we always have enough lookahead, except at the end of the input file. We need MAX_MATCH bytes for the next match, plus MIN_MATCH bytes to insert the string following the next match. + if (s.lookahead < MIN_LOOKAHEAD) then + fill_window(s) + if (s.lookahead < MIN_LOOKAHEAD and flush == ZLIB.Z_NO_FLUSH) then + return need_more + end + if (s.lookahead == 0) then break end -- flush the current block + end + + -- Insert the string window[strstart .. strstart+2] in the dictionary, and set hash_head to the head of the hash chain: + hash_head = 0 + if (s.lookahead >= MIN_MATCH) then + hash_head = INSERT_STRING(s) + end + + -- Find the longest match, discarding those <= prev_length. + s.prev_length = s.match_length; s.prev_match = s.match_start + s.match_length = MIN_MATCH-1 + + if (hash_head ~= 0 and s.prev_length < s.max_lazy_match + and s.strstart - hash_head <= MAX_DIST(s)) then + -- To simplify the code, we prevent matches with the string of window index 0 (in particular we have to avoid a match of the string with itself at the start of the input file). + s.match_length = longest_match(s, hash_head) + -- longest_match() sets match_start + + if (s.match_length <= 5 and + (s.strategy == ZLIB.Z_FILTERED + or (s.match_length == MIN_MATCH and s.strstart - s.match_start > TOO_FAR) + ) + ) then + -- If prev_match is also MIN_MATCH, match_start is garbage but we will ignore the current match anyway. + s.match_length = MIN_MATCH-1 + end + end + + -- If there was a match at the previous step and the current match is not better, output the previous match: + if (s.prev_length >= MIN_MATCH and s.match_length <= s.prev_length) then + local max_insert = s.strstart + s.lookahead - MIN_MATCH + -- Do not insert strings in hash table beyond this. + + check_match(s, s.strstart-1, s.prev_match, s.prev_length) + + bflush = _tr_tally_dist(s, s.strstart-1 - s.prev_match, s.prev_length - MIN_MATCH) + + -- Insert in hash table all strings up to the end of the match. + -- strstart-1 and strstart are already inserted. If there is not enough lookahead, the last two strings are not inserted in the hash table. + s.lookahead = s.lookahead - (s.prev_length-1) + s.prev_length = s.prev_length - 2 + repeat + s.strstart = s.strstart + 1 + if (s.strstart <= max_insert) then + hash_head = INSERT_STRING(s) + end + s.prev_length = s.prev_length - 1 + until (s.prev_length == 0) + s.match_available = false + s.match_length = MIN_MATCH-1 + s.strstart = s.strstart + 1 + + if (bflush) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + + elseif (s.match_available) then + -- If there was no match at the previous position, output a single literal. If there was a match but the current match is longer, truncate the previous match to a single literal. + --Tracevv((stderr,"%c", s->window[s->strstart-1])); + bflush = _tr_tally_lit(s, s.window[s.strstart-1]) + if (bflush) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + s.strstart = s.strstart + 1 + s.lookahead = s.lookahead - 1 + if (s.strm.avail_out == 0) then return need_more end + else + -- There is no previous match to compare with, wait for the next step to decide. + s.match_available = true + s.strstart = s.strstart + 1 + s.lookahead = s.lookahead - 1 + end + + end + --assert (flush ~= Z_NO_FLUSH, "no flush?") + if (s.match_available) then + --Tracevv((stderr,"%c", s->window[s->strstart-1])); + bflush = _tr_tally_lit(s, s.window[s.strstart-1]) + s.match_available = false + end + if (s.strstart < MIN_MATCH-1) then s.insert = s.strstart else s.insert = MIN_MATCH-1 end + if (flush == ZLIB.Z_FINISH) then + FLUSH_BLOCK_ONLY(s, 1); if (s.strm.avail_out == 0) then return finish_started end + return finish_done + end + if (s.last_lit ~= 0) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + return block_done +end + +-- For Z_RLE, simply look for runs of bytes, generate matches only of distance one. Do not maintain a hash table. (It will be regenerated if this run of deflate switches away from Z_RLE.) +function deflate_rle(s, flush) + local bflush -- set if current block must be flushed + local prev -- byte at distance one to match + -- window[scan], window[strend] + local scan, strend -- scan goes up to strend for length of run + local window = s.window + + while (true) do + -- Make sure that we always have enough lookahead, except at the end of the input file. We need MAX_MATCH bytes for the longest run, plus one for the unrolled loop. + if (s.lookahead <= MAX_MATCH) then + fill_window(s) + if (s.lookahead <= MAX_MATCH and flush == ZLIB.Z_NO_FLUSH) then + return need_more + end + if (s.lookahead == 0) then break end -- flush the current block + end + + -- See how many times the previous byte repeats + s.match_length = 0 + if (s.lookahead >= MIN_MATCH and s.strstart > 0) then + scan = s.strstart - 1 + prev = window[scan] + if (prev == window[scan+1] and prev == window[scan+2] and prev == window[scan+3]) then + scan = scan + 3 + strend = s.strstart + MAX_MATCH + while (scan < strend) do + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + scan = scan + 1; if (prev ~= window[scan]) then break end + end + s.match_length = MAX_MATCH - (strend - scan) + if (s.match_length > s.lookahead) then + s.match_length = s.lookahead + end + end + --Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + end + + -- Emit match if have run of MIN_MATCH or longer, else emit literal + if (s.match_length >= MIN_MATCH) then + check_match(s, s.strstart, s.strstart - 1, s.match_length) + + bflush = _tr_tally_dist(s, 1, s.match_length - MIN_MATCH) + + s.lookahead = s.lookahead - s.match_length + s.strstart = s.strstart + s.match_length + s.match_length = 0 + else + -- No match, output a literal byte + --Tracevv((stderr,"%c", s->window[s->strstart])); + bflush = _tr_tally_lit (s, s.window[s.strstart]) + s.lookahead = s.lookahead - 1 + s.strstart = s.strstart + 1 + end + if (bflush) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + end + s.insert = 0 + if (flush == ZLIB.Z_FINISH) then + FLUSH_BLOCK_ONLY(s, 1); if (s.strm.avail_out == 0) then return finish_started end + return finish_done + end + if (s.last_lit ~= 0) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + return block_done +end + +-- For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. (It will be regenerated if this run of deflate switches away from Huffman.) +function deflate_huff(s, flush) + local bflush -- set if current block must be flushed + + while (true) do + -- Make sure that we have a literal to write. + if (s.lookahead == 0) then + fill_window(s) + if (s.lookahead == 0) then + if (flush == ZLIB.Z_NO_FLUSH) then + return need_more + end + break -- flush the current block + end + end + + -- Output a literal byte + s.match_length = 0 + --Tracevv((stderr,"%c", s->window[s->strstart])); + bflush = _tr_tally_lit (s, s.window[s.strstart]) + s.lookahead = s.lookahead - 1 + s.strstart = s.strstart + 1 + if (bflush) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + end + s.insert = 0 + if (flush == ZLIB.Z_FINISH) then + FLUSH_BLOCK_ONLY(s, 1); if (s.strm.avail_out == 0) then return finish_started end + return finish_done + end + if (s.last_lit ~= 0) then + FLUSH_BLOCK_ONLY(s, 0); if (s.strm.avail_out == 0) then return need_more end + end + return block_done +end + + +-- =========================================================================== +-- Public API + +local M = {} + +M.deflate = function(input_string, opts) + local DEFAULT_BUFFER_SIZE = 4000000000 -- 4 GB + + local this = ZLIB.deflateInit(opts) + this.input_data = input_string + this.next_in = getarg(opts, 'next_in', 0) + this.avail_in = getarg(opts, 'avail_in', input_string:len() - this.next_in) + + local flush = getarg(opts, 'flush', ZLIB.Z_SYNC_FLUSH) + local avail_out = getarg(opts, 'avail_out', -1) + + local result = '' + repeat + if (avail_out >= 0) then + this.avail_out = avail_out + else + this.avail_out = DEFAULT_BUFFER_SIZE + end + this.output_data = '' + this.next_out = 0 + this.error = ZLIB.deflate(this, flush) + if (avail_out >= 0) then + return this.output_data + end + result = result .. this.output_data + if (this.avail_out > 0) then + break + end + until (this.error ~= ZLIB.Z_OK) + + return result +end + +M.gzip = function(input_string, opts) + if (not opts or type(opts) ~= 'table') then opts = {} end + opts.windowBits = 15 + 16 + opts.flush = ZLIB.Z_FINISH + return M.deflate(input_string, opts) +end + +return M \ No newline at end of file diff --git a/helmod/locale/en/helmod.cfg b/helmod/locale/en/helmod.cfg new file mode 100644 index 00000000..630809f0 --- /dev/null +++ b/helmod/locale/en/helmod.cfg @@ -0,0 +1,484 @@ +helmod_planner-command=Planner + +[helmod_si] +seconde=__1__s +minute=__1__min +hour=__1__h +per-second=__1__/s +per-minute=__1__/min +per-hour=__1__/h + +[helmod_common] +block=Block +blocks=Blocks +capacity=Capacity +energy=Electricity +efficiency=Efficiency +filter=Filter +recipe=Recipe +recipes=Recipes +information=Information +ingredients=Ingredients +product=Product +products=Products +production=Production +beacon=Beacon +beacons=Beacons +factory=Factory +factories=Factories +resource=Resource +resources=Resources +module=Module +modules=Modules +mod=Mod +mods=Mods +mod-list=Mod list +version=Version +input=Input +output=Output +quantity=Quantity +generator=Generator +generators=Generators +primary-generator=Primary generator +primary-generators=Primary generators +secondary-generator=Secondary generator +secondary-generators=Secondary generators +reading=Reading +writing=Writing +removal=Removal +total=Total +per-sub-block=Per sub-block +download=Download +upload=Upload +outflow=Outflow +pollution=Pollution +energy-consumption=Consumption +temperature=Temperature +temperature-min=Temperature Min +temperature-max=Temperature Max +heat-capacity=Heat capacity +fuel-value=Fuel value +gui-list=Gui list +location=Location +building=Building +min=Min +max=Max +item=Item +fluid=Fluid +entity=Entity +technology=Technology +note=Note +group=Group +fluid-temperature=__1__ (__2__ Β°C) +fluid-temperature-min=__1__ (β‰₯ __2__ Β°C) +fluid-temperature-max=__1__ (≀ __2__ Β°C) +fluid-temperature-range=__1__ (__2__ Β°C - __3__ Β°C) +made-in=Made in +steam-heat=Heat +stack-size=Stack size + +[helmod_button] +save=Save +delete=Delete +clear=Clear +use=Use +add=Add +remove=Remove +update=Update +apply=Apply +options=Options +refresh=Refresh +close=Close +help=Help +copy=Copy +past=Paste +expand=Expand +decrease=Decrease +minimize=Minimize +maximize=Maximize +info=Information +reset=Reset +matrix-solver=Matrix solver +preferences=Preferences +game-play=Activate auto frozen game (only when the main panel is open) +game-play-multiplayer=Frozen game is not allowed in Multiplayer Game +game-pause=Disable auto frozen game (only when the main panel is open) +all-product-visible=See all products +explorer=Recipe Explorer +done=Done +remove-done=Mark all as unfinished +choose-element=Choose element +add-production-line=Add Production Line + +[helmod_label] +electrical-consumption=Electrical consumption +block-number=Block number +sub-block-power=Electrical cons. per sub-block +limit=Max per block +energy-nominal=Nominal Energy +speed-nominal=Nominal Speed +module-slots=Module Slots +energy=Energy +speed=Speed +factory=Factory +beacon-on-factory=Amount, affecting one +efficiency=Efficiency +productivity=Productivity +fluid-usage=Fluid for use by tick +effectivity=Effectivity +buffer-capacity=Buffer capacity +input-flow-limit=Input flow limit +output-flow-limit=Output flow limit +target-temperature=Target temperature +maximum-temperature=Maximum temperature +block-unlinked=Unlinked block +compute-by-factory=Computing by factory +factory-number=Factory number +block-linked=Linked block +compute-by-element=Computing by element +input-product=Product input +input-ingredient=Ingredient input +visible-main-product=Main products +visible-other-product=Other products +priority-modules=Module priority +pollution=Pollution +general=General +algebraic-solver=Algebraic Solver +matrix-solver=Matrix Solver +assembler-limitation=Assembler limitation +beacon-per-factory=Beacon by factory +beacon-per-factory-constant=Constant Beacon +ui=Interface +first-recipe-explain=This button is at the top menu, use it to add your first recipe. +duration=Duration + +[helmod_panel] +richtext=Rich Text +model-edition=Production Line Edition +model-index-up=Move Left Production Line +model-index-down=Move Right Production Line +logistic-edition=Logistic Edition + +[helmod_parameters_edition_panel] +title=Parameters Edition +global_bonus=Global bonus (in %) + +[helmod_selector-panel] +entity-title=Entity selector +item-title=Item selector +fluid-title=Fluid selector +recipe-title=Recipe selector +technology-title=Technology selector +container-title=Container selector + +[helmod_product-edition-panel] +title=Edit Product +tool=Tool +transport-belt=Transport belt number for 1 sec + +[helmod_resource-edition-panel] +title=Edit Resource + +[helmod_calculator-panel] +title=Calculator + +[helmod_recipe-edition-panel] +title=Edit Recipe +production=Production % +current-modules=Active modules +selection-modules=Module selection +filter-show-disable=Show Disable +filter-show-hidden=Show hidden +filter-show-hidden-player-crafting=Show hidden player crafting +filter-show-lock-recipes=Show locked recipes +filter-by-product=Filter by product +filter-by-ingredient=Filter by ingredient + +filter-language-switch=This option can be activated or disabled in the mod settings +filter-language-switch-left=English names (system) +filter-language-switch-right=The translated names + +filter-contain-switch=This option allows a complete or partial comparison +filter-contain-switch-left=Equal +filter-contain-switch-right=Contain + +set-default=Set default +apply-priority=Apply the module priority +apply-block=Apply __1__ on the production block +apply-line=Apply __1__ on the production line +apply-option-all=Apply on all categories +apply-option-category=Apply on the recipe category +apply-option-module=Apply with the current module priority +apply-option-temperature=Apply the temperature on output fluid +current-factory=the current factory +current-beacon=the current beacon +current-module=the current module priority +module-clear=Erase modules + +add-beacon=Add a beacon +remove-beacon=Remove beacon + +[helmod_energy-edition-panel] +title=Edit Power +power=Power MJ + +[helmod_rule-edition-panel] +title=Edit Rule +name=Name +category=Category +type=Type +mod=Mod +value=Value +excluded=Excluded + +[helmod_data-panel] +title=Model +base-time=Base time: __1__ + +[helmod_download-panel] +title=Download/Upload + +[helmod_preferences-edition-panel] +title=Preferences +items-logistic-default=Default of items logistic +items-logistic-inserter=Transport inserter +items-logistic-belt=Transport belt +items-logistic-container=Storage +items-logistic-transport=Transport by vehicle +fluids-logistic-maximum-flow=Maximum flow +fluids-logistic-flow=__1__ pipes = __2__ u/sec +fluids-logistic-default=Default of fluids logistic +fluids-logistic-pipe=Transport pipe +fluids-logistic-container=Storage +fluids-logistic-transport=Transport by vehicle + +[helmod_recipe-explorer-panel] +title=Recipe Explorer +generate-block=Generate the block + +[helmod_settings-panel] +title=Settings +about-section=About +mod-version=Mod version +mod-info=Now the options are in the Options/Mods menu of the game + +data-section=Data table +model-section=Model +other-section=Other +data-col-index=Display index column +data-col-level=Display level column +data-col-id=Display id column +data-col-name=Display name column +data-col-weight=Display weight column +model-auto-compute=Auto computing +model-loop-limit=Loop limit +model-filter-factory=Filter on factory +model-filter-beacon=Filter on beacon +model-filter-factory-module=Filter on factory's modules +model-filter-beacon-module=Filter on beacon's modules +model-filter-generator=Filter on generator +other-speed-panel=Display game speed panel +real-name=Real name +display-section=Display +display-size=Screen size +display-product-cols=Product column base +display-ingredient-cols=Ingredient column base +display-pin-beacon=Display beacon +display-cell-mod=Display cell mod + +[helmod_result-panel] +refresh-button=Refresh +back-button-production-line=Back to Production line +remove-button-production-line=Remove Production line +download-button-production-line=Download Production line +upload-button-production-line=Upload Production line +remove-button-production-block=Remove Production block +add-button-production-block=Add Production Block +add-button-recipe=Add a recipe +add-button-power=Add power +add-button-technology=Add technology +add-button-rule=Add rule +reset-button-rule=Reset rules +select-button-entity=Select entity +select-button-item=Select item +select-button-fluid=Select fluid +select-button-recipe=Select recipe +select-button-technology=Select technology +select-button-container=Select container +row-button-delete=X +row-button-up=U +row-button-down=D +row-button-unlink=L +tab-button-data=Data +tab-button-production-line=Production line +tab-button-production-block=Production block +tab-button-disabled-recipes=Disables recipes (__1__) +tab-button-resources=Resources +tab-button-summary=Summary +tab-button-pin=Pin +tab-button-energy=Power +tab-button-properties=Properties +tab-button-prototype-filters=Prototype Filters +tab-button-statistic=Statistic +tab-button-admin=Administration +tab-button-unittest=UnitTest +tab-title-data=Data +tab-title-production-line=Production line +tab-title-production-block=Production block +tab-title-disabled-recipes=Disables recipes +tab-title-resources=Resources +tab-title-energy=Energy +tab-title-summary=Summary +tab-title-properties=Properties +tab-title-prototype-filters=Prototype Filters +tab-title-statistic=Statistic +tab-title-admin=Administration +tab-title-unittest=UnitTest +col-header-index=Index +col-header-action=Action +col-header-level=Level +col-header-weight=Weight +col-header-id=Id +col-header-value=Value +col-header-name=Name +col-header-recipe=Recipe +col-header-factory=Factory +col-header-extractor=Extractor +col-header-beacon=Beacon +col-header-duration=Duration +col-header-products=Products +col-header-ingredients=Ingredients +col-header-ingredient=Ingredient +col-header-total=Total +col-header-type=Type +col-header-input=Input +col-header-output=Output +col-header-production-block=Block +col-header-wagon=Wagon +col-header-storage=Storage +col-header-primary=Primary +col-header-secondary=Secondary +col-header-chmod=Access +col-header-state=State +col-header-owner=Owner +col-header-sheet=Sheet +col-header-category=Category +col-header-mod=Mod +col-header-excluded=Excluded +col-header-done=Done +sheet-list=Sheet list +rule-list=Rule list +cache-list=Cache list +owner=Owner: +share=Share + +[tooltip] +technology-recipe=Technology recipe +resource-recipe=Resource recipe +energy-recipe=Energy recipe +rocket-recipe=Rocket recipe +burnt-recipe=Recipe with burnt +burnt-product=Burnt product +display-logistic-row=Display logistic row +logistic-row-choose=Choose the logistic item + +filter-language-switch-left=The filter uses the english system names +filter-language-switch-right=The filter uses the names of your language as far as it is translated +filter-contain-switch-left=The filter makes a strictly equal comparison +filter-contain-switch-right=The filter looks for the value in the names for the comparison +selector-module=Modules selector +selector-factory=Factory selector + +edit-block=Edit this block +edit-recipe=Edit this recipe +edit-resource=Edit this resource +add-recipe=Add this recipe +edit-product=Edit this product +info-product=Product information +info-logistic=Logistic information +info-block=Block information +info-factory=Factory information +info-beacon=Beacon information +info-building=Building information +info-model=Production Line information +info-control=Control information + +hide-show-done=Hide/Show done row +hide-show-factory=Hide/Show factory column +hide-show-product=Hide/Show product columns +hide-show-beacon=Hide/Show beacon column + +product=__1__\nProduct +ingredient=__1__\nIngredient +rest-product=__1__\nExcess product +other-product=__1__\nOther product +info-module=Module information +add-module=Add this module +remove-module=Remove this module +remove-element=Remove this row +up-element=Up this row\n__CONTROL_STYLE_BEGIN__Shift + Click__CONTROL_STYLE_END__: Up of __1__ rows\n__CONTROL_STYLE_BEGIN__Ctrl + Click__CONTROL_STYLE_END__: Up at the top +down-element=Down this row\n__CONTROL_STYLE_BEGIN__Shift + Click__CONTROL_STYLE_END__: Down of __1__ rows\n__CONTROL_STYLE_BEGIN__Ctrl + Click__CONTROL_STYLE_END__: Down at the bottom +conversion-recipe-block=Convert this recipe to a block\n__CONTROL_STYLE_BEGIN__Ctrl + Click__CONTROL_STYLE_END__: With all the rows below +module-description=__1__\nConsumption: __2__%\nSpeed: __3__%\nProductivity: __4__%\nPollution: __5__% +element-amount=__1__\nAmount: __2__ +element-amount-probability=__1__\nAmount min: __2__\nAmount max: __3__\nProbability: __4__ +recipe-info=__1__ __2__\nProducts: __3__ \nIngredients: __4__ +recipe-info-element=\n __1____2__ x __3__ __4__ +recipe-by-hand=(By hand) +recipe-unsearched=(Unsearched) +cargo-info=__1__ \n__2__\n__3__ +cargo-info-element=__1__: __2__ +technology-info=__1__\nLevel: __2__ \nFormula: __3__ \nIngredients: __4__ +share-mod=Allow __1__ in multiplayer +unlink-element=Link/Unlink this recipe +factory-limit=Limit of this factory for the block +formula-allowed=Formula is allowed. ex: (10*5-3)/2 +beacon-on-factory=Number of beacon affecting one factory. Apply beacon modules effect on factory. +beacon-per-factory=Number of beacon per factory.\nUse to compute the beacon number by formula [font=default-bold][color=blue]y=ax+b[/color][/font] where:\n[font=default-bold][color=blue]y[/color][/font] is beacon number.\n[font=default-bold][color=blue]x[/color][/font] is factory number.\n[font=default-bold][color=blue]a[/color][/font] is [color=orange]Beacon by factory[/color].\n[font=default-bold][color=blue]b[/color][/font] is [color=orange]Constant Beacon[/color]. +beacon-per-factory-constant=Constant number of beacon.\nUse to compute the beacon number by formula [font=default-bold][color=blue]y=ax+b[/color][/font] where:\n[font=default-bold][color=blue]y[/color][/font] is beacon number.\n[font=default-bold][color=blue]x[/color][/font] is factory number.\n[font=default-bold][color=blue]a[/color][/font] is [color=orange]Beacon by factory[/color].\n[font=default-bold][color=blue]b[/color][/font] is [color=orange]Constant Beacon[/color]. + +block-cannot-link-first=First block can't link +block-cannot-link-by-factory=By factory block can't link +block-cannot-by-factory=By factory can't use with Matrix Solver +block-cannot-matrix-solver=Matrix Solver can't use with By factory + +[controls] +helmod-input-valid=Input valid +helmod-close=Close UI +helmod-open-close=Open/Close UI +helmod-production-line-open=Open production line tab +helmod-recipe-selector-open=Open recipe selector +helmod-recipe-explorer-open=Open recipe explorer +helmod-richtext-open=Open/Close RichText + +contraint-plus=__CONTROL_STYLE_BEGIN__Ctrl + click__CONTROL_STYLE_END__: Set or unset main product +contraint-minus=__CONTROL_STYLE_BEGIN__Shift + click__CONTROL_STYLE_END__: Set or unset excluded product +link-intermediate=__CONTROL_STYLE_BEGIN__Ctrl + click__CONTROL_STYLE_END__: Set or unset linked intermediate product + +module-add=__CONTROL_STYLE_BEGIN__Ctrl + click__CONTROL_STYLE_END__: Add max module +module-remove=__CONTROL_STYLE_BEGIN__Ctrl + click__CONTROL_STYLE_END__: Remove all modules + +crafting-add=__CONTROL_STYLE_BEGIN__Ctrl + click__CONTROL_STYLE_END__: Add items to the crafting queue + +[helmod_pin-tab-panel] +title=Production block + +[helmod_status-tab-panel] +title=Status + +[helmod_error] +excessive-event-iteration=The number of event iterations has been exceeded! + +[helmod_unittest] +energy-title=Energy + +[helmod_cap_reason] +speed-cycle=Limitation speed because 1 cycle per tick +speed-module-low=Limitation speed because value cannot be reduce more than 80% +speed-module-high=Limitation speed because value % more than 32767% +productivity-module-low=Limitation productivity because value cannot be less than 0% +consumption-module-low=Limitation consumption because value cannot be reduce more than 80% +pollution-module-low=Limitation pollution because value cannot be reduce more than 80% + +[item-group-name] +helmod=Helmod diff --git a/helmod/locale/en/help.cfg b/helmod/locale/en/help.cfg new file mode 100644 index 00000000..5edd7b35 --- /dev/null +++ b/helmod/locale/en/help.cfg @@ -0,0 +1,291 @@ +[helmod_help] +panel-title=Help + +getting-start=Getting Started +getting-start-desc=Consult Mod Settings Help before using this mod. + +quick-start=Quick Start +quick-start-desc=You can make your first Production Block in the Production Line.\nBeware if your recipe does not appear, activate the different filters, it is certainly hidden. +quick-start-1=Click Add Recipe button. +quick-start-2=Choose a recipe in the recipe selector. +quick-start-3=Click on a output icon to open Edit Product Panel. +quick-start-4=Set your product quantity, use ENTER or OK button to validate. +quick-start-5=Click on a yellow icon in the Ingredients column to add next recipe. +quick-start-6=Click on a gray icon in the Recipe line to open Recipe Editor. +quick-start-7=Click on a block icon to switch the current block of Production Line. +quick-start-8=Click on the Back button to return to Production Line. + +getting-start-panel=Description of helmod panel +getting-start-panel-desc= +getting-start-panel-1=Header panel and special menus +getting-start-panel-2=Main panel +getting-start-panel-3=Spreadsheet selector known as "production line" +getting-start-panel-4=Main data panel + +mod-settings=Mod Settings +mod-settings-desc=To open Mod Settings, push [ESC], click Options and click Mod + +mod-settings-map=Mod Settings Map +mod-settings-map-desc= +mod-settings-map-1=Active the debug solver: Add a button to see the calculation step +mod-settings-map-2=User cache step: Defined the user cache creation speed, the higher can deteriorate the performances in MP. +mod-settings-map-3=Display all sheet: Allow to see all sheet for the admin +mod-settings-map-4=Filter with translated string: +mod-settings-map-5=Filter on text changed: If it's enabled, the filter on selector is auto apply. might have to disable in MP +mod-settings-map-6=Filter on factory: If you don't see the factory in the recipe editor, you may need to deactivate the filter. This will display all of the items available in group. +mod-settings-map-7=Filter on beacon: If you don't see the beacon in the recipe editor, you may need to deactivate the filter. This will display all of the items available in group. +mod-settings-map-8=Module restrictions in factories: Sometimes with some mod there is no restriction on the use of modules, disabling this option allows you to use productivity modules everywhere. +mod-settings-map-9=Module restrictions in beacons: Sometimes with some mod there is no restriction on the use of modules, disabling this option allows you to use productivity modules everywhere. +mod-settings-map-10=Display of special panels: Hidden panels are used to see the values of factorio objects or to do filter tests (debug) +mod-settings-map-11=Show hidden columns: Index, Id, Type and Name are hidden columns (debug) + +mod-settings-player=Mod Settings Per Player +mod-settings-player-desc= +mod-settings-player-1=Display width factor: Adjustment in width of the Mod display +mod-settings-player-2=Display height factor: Adjustment in height of the Mod display +mod-settings-player-3=Display main icon: you can hide the top icon if you want +mod-settings-player-4=Display cell mode: Change the display of all number +mod-settings-player-5=Step of moving a row: Defines how far a row is moved up/down by using Shift + Click. + +preferences=Preferences +preferences-desc= + +preferences-general=General +preferences-general-desc=General preferences are mostly display settings +preferences-general-1=Factory default level: Choose the faster or lower factory, that is auto-selected when you choose a recipe. +preferences-general-2=Factory number format: Choose the number of decimals that you want to see. +preferences-general-3=Element number format: Choose the number of decimals that you want to see. +preferences-general-4=Number of lines for preference: Number of lines displayed in the choices to activate the scroll. +preferences-general-5=Number of columns for preference: Number of columns displayed in the choices to activate the scroll. +preferences-general-6=Product Display Order: Display order of product or ingredient in the recipe row. +preferences-general-7=Product column base: Affects the number of product columns shown. If more columns are needed the row wraps. +preferences-general-8=Ingredient column base: Affects the number of ingredient columns shown. If more columns are needed the row wraps. +preferences-general-9=Pollution display: Active or disable pollution display. +preferences-general-10=Building display: Active or disable building display. + +preferences-ui=Interface +preferences-ui-desc=The interface setting will allow the operation of the panels to be configured. +preferences-ui-1=Auto Close Panel: Automatically closes panels as soon as one of them is opened. +preferences-ui-2=UI Glue: The Glue hangs the panel on the right side of the main panel. +preferences-ui-3=UI Glue Offset: Offset from the top right corner of the main panel. + +preferences-module-priority=Module priority +preferences-module-priority-desc=The priority of the modules is a setting used in the recipe editing panel. + +preferences-items-logistic=Default of items logistic +preferences-items-logistic-desc=The logistics settings are the choices you want to view in the tooltips or the logistics menu. + +preferences-fluids-logistic=Default of fluids logistic +preferences-fluids-logistic-desc=The logistics settings are the choices you want to view in the tooltips or the logistics menu. + +recipe-selector=Recipe Selector +recipe-selector-desc=There few selector but we describe Recipe Selector only in this section. When you choose a recipe, it's added immediatly in the current or new "Production Block". + +recipe-selector-normal=Selector without visibility +recipe-selector-normal-desc=When no visibility is not checked, only the searched recipes are visible. Regarding the translation, it will be done when the panel is opened and this over several ticks. In multiplayer you may need to reduce the "User cache step" setting if a player cannot use the mod. +recipe-selector-normal-1=Filter on products or ingredients: Defines whether the search for a recipe is carried out on products or ingredients if the filter field is filled in. +recipe-selector-normal-2=Translated names or English names (system): The filter field can support the translation as long as it exists. +recipe-selector-normal-3=Show disabled: Allows you to see all the disabled recipes, mainly those not searched but not only other recipes can have this status. +recipe-selector-normal-4=Show hidden: Allows you to see all the hidden recipes. For example: the recipe "Rocket part" is not visible otherwise. +recipe-selector-normal-5=Show hidden recipes for crafting: Allows you to see all hidden recipes for crafting. Some recipes are hidden in the crafting menu with certain mod, it can become unreadable with this option because all recipes are doubled. +recipe-selector-normal-6=Filter: Write the name of the product or ingredient sought according to the first filter. With the option "Automatic filter" it is possible to have the filter sensitive to typing. +recipe-selector-normal-7=The list of the "Helmod" recipe group is a fictitious recipe set. + +recipe-selector-all=Selector with visibility +recipe-selector-all-desc=When all the visibility is checked, all the recipes are available. +recipe-selector-all-1=The researched recipe is diplayed by a normal icon +recipe-selector-all-2=The unresearched recipe is diplayed by a red icon +recipe-selector-all-3=The "crafting-handonly" recipe is diplayed by a yellow icon + +recipe-selector-helmod=The Helmod group +recipe-selector-helmod-desc=Helmod adds fake recipes used in certain situations. They are grouped together in the "Helmod" recipe group. They have a small gear displaying a tooltip. +recipe-selector-helmod-1=Resource recipe: It provides access to the mining calculation for example. +recipe-selector-helmod-2=Burnt recipe: It contains the residual product of combustion for example the case of the spent uranium bar. +recipe-selector-helmod-3=Rocket recipe: It contains the element produced by sending the rocket as well as the necessary ingredients. + +recipe-editor=Recipe Editor Panel +recipe-editor-desc=This section describe how use the Recipe Editor + +recipe-editor-general=Description of Recipe Edition +recipe-editor-general-desc=Recipe Editing is certainly one of the most important menus. You will find the information on the plant chosen mainly its speed. If your factory uses fuel you will be able to choose it and it will appear in the recipe.\nIf your mod settings exceed a game limit, an alert icon will appear at the level of the property concerned in the factory, this with certain mods. which boosts the machines too much. +recipe-editor-general-1=Description of the recipe. +recipe-editor-general-2=Factory selection and values. +recipe-editor-general-3=Selection of factory modules. +recipe-editor-general-4=Diffuser selection and values. +recipe-editor-general-5=Selection of diffuser modules. +recipe-editor-general-6=Diffuser settings. + +recipe-editor-info=Recipe Information +recipe-editor-info-desc=You will find the recipe definition in this section +recipe-editor-info-1=Production% is used to indicate the usage rate, this allows recipe balancing. +recipe-editor-info-2=By defining 50% on a recipe, it will be calculated at 50% of the need for example to let the next recipe use the rest to be produced. + +recipe-editor-factory=Factory Information +recipe-editor-factory-desc=You will find the factory definition in this section +recipe-editor-factory-1=The factory choice and its propagation menu. +recipe-editor-factory-2=Factory information and fuel selector if applicable. +recipe-editor-factory-3=Factory modules and its propagation menu. +recipe-editor-factory-4=The tool for choosing modules. + +recipe-editor-beacon=Beacon Information +recipe-editor-beacon-desc=You will find the beacon definition in this section +recipe-editor-beacon-1=The beacon choice and its propagation menu. +recipe-editor-beacon-2=Beacon information and settings for applying effects and number in relation to the factory number. +recipe-editor-beacon-3=Beacon modules and its propagation menu. +recipe-editor-beacon-4=The tool for choosing modules. + +recipe-editor-tools=The tool bar +recipe-editor-tools-desc=The toolbar allows you to quickly assign your factory settings or set your default choice for the next recipes you are going to add. Using propagation combined with module priority is a quick and easy way to set up your production line. If you change the factory choice the choice of modules will be applied if possible. +recipe-editor-tools-1=Factory default: stores the factory default. +recipe-editor-tools-2=Propagate the factory choice to the current block if possible. +recipe-editor-tools-3=Propagate factory choice to all blocks in the production line if possible. +recipe-editor-tools-4=Spread option, ignore category of recipes. +recipe-editor-tools-5=Propagation option, propagates only on the same type of recipe as the current one. +recipe-editor-tools-6=Propagation option, propagates with the chosen modules, if the choice is a module priority it will be applied. +recipe-editor-tools-7=Module default: stores the choice of modules. +recipe-editor-tools-8=Propagate the choice of module to the current block if this is possible. +recipe-editor-tools-9=Propagate the choice of module to all blocks in the production line if possible. +recipe-editor-tools-10=Removes all modules. + +recipe-editor-module-selection=Selection of modules +recipe-editor-module-selection-desc=The module selector allows you to add modules. it allows the addition of module to the unit. +recipe-editor-module-selection-1=The list of applied modules. +recipe-editor-module-selection-2=The choice of the module selection menu. +recipe-editor-module-selection-3=The applicable modules for this recipe or this plant are accessible with a single click. +recipe-editor-module-selection-4=Modules not applicable for this recipe or factory are in red. + +recipe-editor-module-priority=Priority of modules +recipe-editor-module-priority-desc=Modules priority allows adding modules quickly and easily. if your priority is well chosen, you can apply the modules at once on the whole production line.\nHow a priority works, once your priority is configured, the system will try to add the first module with its quantity if this is possible then go to the next choice, if there is space left, the system will proceed in the same way as the first choice and so on.\nFor example in vanilla if in my module priority I chose [item=productivity-module-3]x10 then [item=speed-module-3]x10 and that I propagate to the whole production line I will have an optimized setting with just one click. intermediate product factories will have only [item=productivity-module-3] modules, others only [item=speed-module-3] modules. +recipe-editor-module-priority-1=The list of applied modules. +recipe-editor-module-priority-2=The button to access the preference menu to configure module priorities. +recipe-editor-module-priority-3=The applicable modules for this recipe or this plant remain accessible by simple click. +recipe-editor-module-priority-4=The application button of the chosen priority. +recipe-editor-module-priority-5=The choice of the configuration of a module priority. +recipe-editor-module-priority-6=The choice of the module priority menu. + +production=Production line and block +production-desc=This section describes the panels of a production line and a production block. + +production-line=Production line +production-line-desc=The production line is a set of production blocks to produce a rocket or something. +production-line-1=Icon group to change tab. +production-line-2=Icon group to add a recipe. +production-line-3=Icon group for action on data, copy, exchange, delete or update. +production-line-4=Icon group for edition and preference. +production-line-5=Icon group for setting the logistic choice displayed directly on the lines. +production-line-6=Setting of the calculation time base. +production-line-7=Selection bar of the production line. +production-line-8=General information and rights adjustment of the production line. +production-line-9=Output elements the production line. +production-line-10=Input elements of the production line. +production-line-11=List of production blocks. + +production-block=Production block +production-block-desc=The production block is a list of recipes to produce an item.\nIt is advisable to separate the recipes into several blocks and link them. A block can similar a blueprint to be bluided and duplicated as many times as necessary, especially when using the factory limitation, the number of times being present in the block information. +production-block-1=Icon group to change tab. +production-block-2=Icon group to add a recipe. +production-block-3=Icon group for action on data, copy, exchange, delete or update. +production-block-4=Icon group to pin or view the summary. +production-block-5=Special menu for debug solver (hidden by default). +production-block-6=Icon group for edition and preference. +production-block-7=Icon group for setting the logistic choice displayed directly on the lines. +production-block-8=Setting of the calculation time base. +production-block-9=Navigation bar in the different blocks of the production line. +production-block-10=Calculation options for the production block. +production-block-11=General information on the production block. +production-block-12=Output elements the production block. +production-block-13=Input elements of the production block. +production-block-14=List of recipes. + +production-edition=Editing Production line +production-edition-desc=The edit menu of a production line allows you to add notes, indicate a group and its sharing. +production-edition-1=The information indicates the owner of the spreadsheet says "Production line". +production-edition-2=The sharing is used in the exchange of the sheet in multi-player. +production-edition-3=The group allows better identification in the menu bar of production lines via the tooltip. +production-edition-4=The note is a free field of information. + +compute=Compute +compute-desc=You must understand how my mod compute, after that is easy. + +compute-order=Compute order +compute-order-desc=The compute is done line by line, it always starts the first line +compute-order-1=The compute check if a product have no ingredient for the same item and allow the edition for this product +compute-order-2=The compute take the first recipe +compute-order-3=The compute loop on the recipe products and resolve the recipe +compute-order-4=The compute sum the ingredient number in a cache and consume the product +compute-order-5=The compute go next recipe and do the previous operations +compute-order-6=At the end, the compute check status of product and remove it if quantity is < 0.01. If the block produce a lot of product, the product is displayed with a red icon. +compute-order-7=To equalize the recipes it is necessary to use the "Production %" field of few recipe, especially in the case of petrol. + +compute-solver=Matrix Solver +compute-solver-desc=The "Matrix Solver" has been added to solve the balancing of the recipes because in classic mod is a little laborious. +compute-solver-1=When you are in a block you have a gear icon that is the "Matrix Solver" and allows its activation. +compute-solver-2=The calculation dont use the "Compute order" and all the recipes are resolved in one time without order. +compute-solver-3=It should only be used when necessary. +compute-solver-4=If the solver does not find a result, perhaps a recipe is missed or needed remove. +compute-solver-5=The "Production%" field is not use in the calculations when the "Matrix Solver" is actived. + +special-panel=Special panels +special-panel-desc=Some of the special panels are accessible by activating the option "Display hidden panels" and "Activate the debug solver" + +special-panel-admin=Administration +special-panel-admin-desc=The administration allows the management of different elements of the mod. This panel is only accessible to the admin of the game. +special-panel-admin-1=The cache list is used to initialize caches if needed. Be careful when misused, this can make the mod unusable, in the worst case use the generation of the cache (gear icon). +special-panel-admin-2=The rule list is used to adjust the operation of different factory lists mainly for recipe editing. +special-panel-admin-3=The sheets list allows the admin to manage all the sheets without restriction of rights. +special-panel-admin-4=The Mod List is an information page on the mods used in the game. Can be used by the streamer to show the mods used. +special-panel-admin-5=The Gui List is an information page on the current mod interfaces in the different areas of the interface. + +special-panel-properties=Properties +special-panel-properties-desc=The "Properties" panel is very useful for viewing the properties of a game object. Indispensable for modders. +special-panel-properties-1=Selectors allow you to add an element. +special-panel-properties-2=The "Hide nil values" filter hides the null values, there are many of them. +special-panel-properties-3=The "Show differences" filter only displays the different properties. +special-panel-properties-4=The filter field allows you to filter the properties by their name. +special-panel-properties-5=To delete an element, click on its icon. + +special-panel-filter=Prototype Filter +special-panel-filter-desc=The "Prototype Filter" panel is used to test filters on prototypes in the game. Indispensable for modders. +special-panel-filter-1=The Type choice defines on which type of element the filter applies. Changing the type initializes the interface. +special-panel-filter-2=The Sample choice are filters used by Helmod and serve as an example. +special-panel-filter-3=Define your first filter and press "+" to add it, the filter result will be automatically presented. +special-panel-filter-4=At any time you can modify a filter line, the filter result will be automatically updated. +special-panel-filter-5=If there is no filter, there is nothing in the result area. + +special-panel-unittest=UnitTest +special-panel-unittest-desc=The "UnitTest" panel is used to validate certain calculations, mainly energy consumption calculations. +special-panel-unittest-1=Only a few mods have a unit test. +special-panel-unittest-2=A red value is not necessarily the sign of an error, you just have to check the values by comparing the information of the icon and the tooltip of the red value. Probably a red value indicates a change in value and the reference values are no longer valid. + +special-panel-debug=Model Debug +special-panel-debug-desc=The "Model Debug" panel is used to visualize the calculation steps of the solvers. +special-panel-debug-1=This panel is available by activating the option "Activate the debug solver" and by clicking on the Scarab icon in a production block. +special-panel-debug-2=Do not activate this option in Multi or if you are not using it. +special-panel-debug-3=The buttons at the top of the panel are used to navigate through the calculation steps. +special-panel-debug-4=In the "Step x" phases the working point is indicated with color, for the matrix solver it is the point called "Pivot" + +control=Controls +control-desc=There are some control: Hotkeys, right-click, ctrl+click or shift+click + +control-hotkey=Hotkey control +control-hotkey-desc=You can change hotkey settings in options of the game +control-hotkey-1=[U] Open/Close the global panel +control-hotkey-2=[I] Open production line tab +control-hotkey-3=[O] Open recipe selector + +tips=tips +tips-desc=Tips displayable in some panel. + +tips-production-line=Production Line Tips +tips-production-line-desc= +tips-production-line-1=A production line is a collection of production block. +tips-production-line-2=A production line can be shared with friends in multiplayer. +tips-production-line-3=A production line may have linked or unlinked blocks. +tips-production-line-4=Bundling independent production blocks is better than multiplying production lines. + +tips-production-block=Production Block Tips +tips-production-block-desc= +tips-production-block-1=A production block is a collection of recipes. +tips-production-block-2=A production block can be linked to previous blocks. +tips-production-block-3=Intermediate products of a block can also be linked. +tips-production-block-4=Product constraints are not used by Matrix Solver. \ No newline at end of file diff --git a/helmod/locale/en/settings.cfg b/helmod/locale/en/settings.cfg new file mode 100644 index 00000000..4e77c9ca --- /dev/null +++ b/helmod/locale/en/settings.cfg @@ -0,0 +1,100 @@ +[helmod_map_settings] +debug-solver=Active the debug solver +debug-solver-desc=Add new button to see step of calcul in solver + +user-cache-step=User cache step +user-cache-step-desc=Defined the user cache creation speed, the higher can deteriorate the performances in MP. + +display-all-sheet=Display all sheets +display-all-sheet-desc=Admin can see all sheets + +filter-translated-string-active=Filter with translated string +filter-translated-string-active-desc=Warning this option can cost time for the cache generation + +filter-on-text-changed=Filter on text changed +filter-on-text-changed-desc=If disable the filter is apply by a button in selector panel + +model-filter-factory=Filter on factory + +model-filter-beacon=Filter on beacon + +model-filter-factory-module=Module restrictions in factories + +model-filter-beacon-module=Module restrictions in beacons + +hidden_panels=Display special panels +hidden_panels-desc=Hidden panels are used to see the values of factorio objects or to do filter tests (debug) + +display-hidden-column=Display hidden columns +display-hidden-column-desc=Index, Id, Type and Name are the hidden columns (debug) + +[helmod_user_settings] + +display-ratio-horizontal=Display width factor +display-ratio-horizontal-desc=Adjustment in width of the Mod display + +display-ratio-vertical=Display height factor +display-ratio-vertical-desc=Adjustment in height of the Mod display + +display-main-icon=Display main icon +display-main-icon-desc=If you use hotkey, you can hide the top button + +display-cell-mod=Display cell mode + +row-move-step=Step of moving a row +row-move-step-desc=Defines how far a row is moved up/down by using Shift + Click. + +[helmod_pref_settings] + +default-factory-level=Factory default level +default-factory-level-desc=Select the default factory level assigned to the new recipe. 1 for the slowest and last for the fastest + +format-number-factory=Factory number format +format-number-factory-desc=Format of value for a usine + +format-number-element=Element number format +format-number-element-desc=Format of value for a product or ingredient + +preference-number-line=Number of lines for preference +preference-number-line-desc=Number of lines displayed in the choices to activate the scroll + +preference-number-column=Number of columns for preference +preference-number-column-desc=Number of columns displayed in the choices to activate the scroll + +display-product-order=Product Display Order +display-product-order-desc=Display order of product or ingredient in the recipe row + +display-product-cols=Product column base +display-product-cols-desc=Affects the number of product columns shown. If more columns are needed the row wraps. + +display-ingredient-cols=Ingredient column base +display-ingredient-cols-desc=Affects the number of ingredient columns shown. If more columns are needed the row wraps. + +display-pollution=Pollution display +display-pollution-desc=Active or disable pollution display + +display-building=Building display +display-building-desc=Active or disable building display + +ui-auto-close=Auto Close Panel +ui-auto-close-desc=Auto Close Panel when another is open + +ui-glue=UI Glue +ui-glue-desc=Glue some panel near the main panel + +ui-glue-offset=UI Glue Offset +ui-glue-offset-desc=Factor Offset Y of the left corner of panel from the right corner of main panel + +range-value=Value must be in this range + +display-tips=Tips Display +display-tips-desc=Active or disable tips display + +beacon-affecting-one=Beacon amount, affecting one +beacon-affecting-one-desc=Number of beacon affecting one factory. + +beacon-by-factory=Beacon by factory +beacon-by-factory-desc=Number of beacon per factory. + +beacon-constant=Constant Beacon +beacon-constant-desc=Constant number of beacon. diff --git a/helmod/locale/ru/helmod.cfg b/helmod/locale/ru/helmod.cfg new file mode 100644 index 00000000..44d09fe3 --- /dev/null +++ b/helmod/locale/ru/helmod.cfg @@ -0,0 +1,471 @@ +helmod_planner-command=ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ + +[helmod_si] +seconde=__1__с +minute=__1__ΠΌΠΈΠ½ +hour=__1__Ρ‡ +per-second=__1__/с +per-minute=__1__/ΠΌΠΈΠ½ +per-hour=__1__/Ρ‡ + +[helmod_common] +block=Π‘Π»ΠΎΠΊ +blocks=Π‘Π»ΠΎΠΊΠΈ +capacity=ΠΠΌΠΊΠΎΡΡ‚ΡŒ +energy=ЭлСктричСство +efficiency=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ +filter=Π€ΠΈΠ»ΡŒΡ‚Ρ€ +recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +recipes=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +information=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ +ingredients=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ +product=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ +products=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ +production=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²ΠΎ +beacon=Маяк +beacons=Маяки +factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° +factories=Π€Π°Π±Ρ€ΠΈΠΊΠΈ +resource=РСсурс +resources=РСсурсы +module=ΠœΠΎΠ΄ΡƒΠ»ΡŒ +modules=ΠœΠΎΠ΄ΡƒΠ»ΠΈ +mod=Мод +mods=ΠœΠΎΠ΄Ρ‹ +mod-list=Бписок ΠΌΠΎΠ΄ΠΎΠ² +version=ВСрсия +input=Π’Ρ…ΠΎΠ΄ +output=Π’Ρ‹Ρ…ΠΎΠ΄ +quantity=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ +generator=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +generators=Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ +primary-generator=Основной Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +primary-generators=ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ +secondary-generator=Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ +secondary-generators=Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ +reading=Π§Ρ‚Π΅Π½ΠΈΠ΅ +writing=Π—Π°ΠΏΠΈΡΡŒ +removal=Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ +total=ВсСго +per-sub-block=На ΠΏΠΎΠ΄Π±Π»ΠΎΠΊ +download=Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° +upload=Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° +outflow=Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ +pollution=ЗагрязнСниС +energy-consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ +temperature=Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +temperature-min=Мин. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +temperature-max=Макс. Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +heat-capacity=Запас Ρ‚Π΅ΠΏΠ»Π° +fuel-value=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° +gui-list=Бписок интСрфСйсов +location=РасполоТСниС +building=Π—Π΄Π°Π½ΠΈΠ΅ +min=Мин +max=Макс +item=ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚ +fluid=Π–ΠΈΠ΄ΠΊΠΎΡΡ‚ΡŒ +entity=Π‘ΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ +technology=ВСхнология +note=Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ° +group=Π“Ρ€ΡƒΠΏΠΏΠ° +fluid-temperature=__1__ (__2__ Β°C) +fluid-temperature-min=__1__ (β‰₯ __2__ Β°C) +fluid-temperature-max=__1__ (≀ __2__ Β°C) +fluid-temperature-range=__1__ (__2__ Β°C - __3__ Β°C) +made-in=ДСлаСтся Π² +steam-heat=Π’Π΅ΠΏΠ»ΠΎ +stack-size=Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ‡ΠΊΠΈ + +[helmod_button] +save=Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ +delete=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ +clear=ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ +use=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ +add=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ +remove=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ +update=ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ +apply=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ +options=Настройки +refresh=ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ +close=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ +help=ΠŸΠΎΠΌΠΎΡ‰ΡŒ +copy=ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ +past=Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ +expand=Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ +decrease=Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ +minimize=Π‘Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ +maximize=Π Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ +info=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ +reset=Бброс +matrix-solver=Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† +preferences=Настройки +game-play=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎ-ΠΏΠ°ΡƒΠ·Ρƒ (ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° главная панСль) +game-play-multiplayer=Авто-ΠΏΠ°ΡƒΠ·Π° нСдоступна Π² сСтСвой ΠΈΠ³Ρ€Π΅ +game-pause=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎ-ΠΏΠ°ΡƒΠ·Ρƒ (ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° главная панСль) +all-product-visible=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ +explorer=Бписок Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +done=Π“ΠΎΡ‚ΠΎΠ²ΠΎ +remove-done=ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ всё ΠΊΠ°ΠΊ Π½Π΅Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠ΅ +choose-element=Π’Ρ‹Π±ΠΎΡ€ элСмСнта +add-production-line=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию + +[helmod_label] +electrical-consumption=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ +block-number=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π»ΠΎΠΊΠΎΠ² +sub-block-power=Π­Π½Π΅Ρ€Π³ΠΈΠΈ Π½Π° ΠΏΠΎΠ΄Π±Π»ΠΎΠΊ +limit=ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ Π½Π° Π±Π»ΠΎΠΊ +energy-nominal=Номинальная энСргия +speed-nominal=Номинальная ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ +module-slots=Π―Ρ‡Π΅ΠΉΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +energy=ЭнСргия +speed=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ +factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° +beacon-on-factory=Маяков Π½Π° сборщик +efficiency=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ +productivity=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ +fluid-usage=Жидкости Π·Π° Ρ‚ΠΈΠΊ +effectivity=Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ +buffer-capacity=ΠΠΌΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€Π° +input-flow-limit=ΠŸΡ€Π΅Π΄Π΅Π» Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° +output-flow-limit=ΠŸΡ€Π΅Π΄Π΅Π» Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° +target-temperature=ЦСлСвая Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +maximum-temperature=Максимальная Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° +block-unlinked=НСсвязанныС Π±Π»ΠΎΠΊΠΈ +compute-by-factory=Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ +factory-number=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊ +block-linked=Бвязанный Π±Π»ΠΎΠΊ +compute-by-element=Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ элСмСнту +input-product=Π’Ρ‹Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +input-ingredient=Π’Ρ…ΠΎΠ΄ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Π° +visible-main-product=Основная продукция +visible-other-product=Другая продукция +priority-modules=ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +pollution=ЗагрязнСниС +general=ΠžΠ±Ρ‰Π΅Π΅ +algebraic-solver=АлгСбраичСский Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ +matrix-solver=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ +assembler-limitation=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ сборщика +beacon-per-factory=Маяков Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ +beacon-per-factory-constant=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ маяки +ui=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ +first-recipe-explain=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ эту ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ мСню для добавлСния вашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. +duration=Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ + +[helmod_panel] +richtext=Rich Text +model-edition=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия +model-index-up=Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π²Π»Π΅Π²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +model-index-down=Π‘Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π²ΠΏΡ€Π°Π²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +logistic-edition=Логистика + +[helmod_parameters_edition_panel] +title=ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ +global_bonus=Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ бонус (Π² %) + +[helmod_selector-panel] +entity-title=Π’Ρ‹Π±ΠΎΡ€ сущности +item-title=Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +fluid-title=Π’Ρ‹Π±ΠΎΡ€ Тидкости +recipe-title=Π’Ρ‹Π±ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +technology-title=Π’Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +container-title=Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° + +[helmod_product-edition-panel] +title=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ +tool=БрСдство +transport-belt=ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ·ΠΊΠ° ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ Π·Π° 1 сСк + +[helmod_resource-edition-panel] +title=РСсурсы + +[helmod_calculator-panel] +title=ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ + +[helmod_recipe-edition-panel] +title=Π Π΅Ρ†Π΅ΠΏΡ‚ +production=% производства +current-modules=АктивныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ +selection-modules=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +filter-show-disable=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ нСдоступныС +filter-show-hidden=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ скрытыС +filter-show-hidden-player-crafting=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ скрытыС для ΠΊΡ€Π°Ρ„Ρ‚Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ +filter-show-lock-recipes=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ +filter-by-product=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +filter-by-ingredient=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρƒ +filter-language-switch=Π­Ρ‚Π° настройка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² настройках ΠΌΠΎΠ΄Π° +filter-language-switch-left=АнглийскиС названия (систСмныС) +filter-language-switch-right=ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ названия +filter-contain-switch=Π­Ρ‚Π° настройка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠ»ΠΈ частичноС совпадСниС +filter-contain-switch-left=ПолноС +filter-contain-switch-right=ЧастичноС +set-default=Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +apply-priority=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ модуля +apply-block=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ __1__ Π½Π° производствСнном Π±Π»ΠΎΠΊΠ΅ +apply-line=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ __1__ Π½Π° производствСнной Π»ΠΈΠ½ΠΈΠΈ +apply-option-all=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° всСх катСгориях +apply-option-category=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +apply-option-module=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ модуля +apply-option-temperature=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ ΠΊ выходящСй Тидкости +current-factory=Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ +current-beacon=Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ маяк +current-module=Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ модуля +module-clear=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ +add-beacon=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ маяк +remove-beacon=Π£Π±Ρ€Π°Ρ‚ΡŒ маяк + +[helmod_energy-edition-panel] +title=ЭнСргия +power=ЭнСргия (ΠœΠ”ΠΆ) + +[helmod_rule-edition-panel] +title=ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ +name=НазваниС +category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ +type=Π’ΠΈΠΏ +mod=Мод +value=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ +excluded=Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ + +[helmod_data-panel] +title=МодСль +base-time=ВрСмя: __1__ + +[helmod_download-panel] +title=Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°/Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° + +[helmod_preferences-edition-panel] +title=Настройки +items-logistic-default=Настройки логистики ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +items-logistic-inserter=ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ‚ΠΎΡ€ +items-logistic-belt=ΠšΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ +items-logistic-container=Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ +items-logistic-transport=ВранспортноС срСдство +fluids-logistic-maximum-flow=ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ +fluids-logistic-flow=__1__ Ρ‚Ρ€ΡƒΠ± = __2__ Π΅Π΄./сСк +fluids-logistic-default=Настройки логистики ТидкостСй ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +fluids-logistic-pipe=Π’Ρ€ΡƒΠ±Π° +fluids-logistic-container=Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ +fluids-logistic-transport=ВранспортноС срСдство + +[helmod_recipe-explorer-panel] +title=Π‘Π°Π·Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +generate-block=Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ + +[helmod_settings-panel] +title=Настройки +about-section=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ +mod-version=ВСрсия ΠΌΠΎΠ΄Π° +mod-info=Настройки находятся Π² мСню ΠΈΠ³Ρ€Ρ‹ "Настройки -> Настройки ΠΌΠΎΠ΄ΠΎΠ²" +data-section=Π’Π°Π±Π»ΠΈΡ†Π° +model-section=МодСль +other-section=Π”Ρ€ΡƒΠ³ΠΎΠ΅ +data-col-index=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ индСкса +data-col-level=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ уровня +data-col-id=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ID +data-col-name=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ названия +data-col-weight=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ вСса +model-auto-compute=Авто-вычислСниС +model-loop-limit=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² +model-filter-factory=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ +model-filter-beacon=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ маяку +model-filter-factory-module=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ модулям Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ +model-filter-beacon-module=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ модулям маяка +model-filter-generator=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ +other-speed-panel=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ +real-name=НастоящСС имя +display-section=ДисплСй +display-size=Π Π°Π·ΠΌΠ΅Ρ€ экрана +display-product-cols=Колонки ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +display-ingredient-cols=Колонки ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² +display-pin-beacon=Маяки +display-cell-mod=Π Π΅ΠΆΠΈΠΌ отобраТСния ячСйки + +[helmod_result-panel] +refresh-button=ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ +back-button-production-line=Назад ΠΊ производствСнной Π»ΠΈΠ½ΠΈΠΈ +remove-button-production-line=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +download-button-production-line=Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +upload-button-production-line=Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +remove-button-production-block=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ производствСнный Π±Π»ΠΎΠΊ +add-button-production-block=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ поизводствСнный Π±Π»ΠΎΠΊ +add-button-recipe=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +add-button-power=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ +add-button-technology=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ +add-button-rule=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ +reset-button-rule=Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° +select-button-entity=Π’Ρ‹Π±ΠΎΡ€ сущности +select-button-item=Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +select-button-fluid=Π’Ρ‹Π±ΠΎΡ€ Тидкости +select-button-recipe=Π’Ρ‹Π±ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +select-button-technology=Π’Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +select-button-container=Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° +row-button-delete=X +row-button-up=U +row-button-down=D +row-button-unlink=L +tab-button-data=Π”Π°Π½Π½Ρ‹Π΅ +tab-button-production-line=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия +tab-button-production-block=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ +tab-button-disabled-recipes=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ (__1__) +tab-button-resources=РСсурсы +tab-button-summary=ВсСго +tab-button-pin=Пин +tab-button-energy=ЭнСргия +tab-button-properties=Бвойства +tab-button-prototype-filters=Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² +tab-button-statistic=Бтатистика +tab-button-admin=АдминистрированиС +tab-button-unittest=ВСст +tab-title-data=Π”Π°Π½Π½Ρ‹Π΅ +tab-title-production-line=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия +tab-title-production-block=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ +tab-title-disabled-recipes=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +tab-title-resources=РСсурсы +tab-title-energy=ЭнСргия +tab-title-summary=ВсСго +tab-title-properties=Бвойства +tab-title-prototype-filters=Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² +tab-title-statistic=Бтатистика +tab-title-admin=АдминистрированиС +tab-title-unittest=ВСст +col-header-index=ИндСкс +col-header-action=ДСйствиС +col-header-level=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ +col-header-weight=ВСс +col-header-id=ID +col-header-value=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ +col-header-name=НазваниС +col-header-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ +col-header-factory=Π€Π°Π±Ρ€ΠΈΠΊΠ° +col-header-extractor=Π”ΠΎΠ±Ρ‹Ρ‚Ρ‡ΠΈΠΊ +col-header-beacon=Маяк +col-header-duration=Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ +col-header-products=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ +col-header-ingredients=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ +col-header-ingredient=Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ +col-header-total=ВсСго +col-header-type=Π’ΠΈΠΏ +col-header-input=Π’Ρ…ΠΎΠ΄ +col-header-output=Π’Ρ‹Ρ…ΠΎΠ΄ +col-header-production-block=Π‘Π»ΠΎΠΊ +col-header-wagon=Π’Π°Π³ΠΎΠ½ +col-header-storage=Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ +col-header-primary=Основной +col-header-secondary=Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ +col-header-chmod=Доступ +col-header-state=БостояниС +col-header-owner=Π’Π»Π°Π΄Π΅Π»Π΅Ρ† +col-header-sheet=Лист +col-header-category=ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ +col-header-mod=Мод +col-header-excluded=Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ +col-header-done=Π“ΠΎΡ‚ΠΎΠ²ΠΎ +sheet-list=Бписок листов +rule-list=Бписок ΠΏΡ€Π°Π²ΠΈΠ» +cache-list=Бписок кэша +owner=Π’Π»Π°Π΄Π΅Π»Π΅Ρ†: +share=ΠžΠ±Ρ‰ΠΈΠΉ доступ + +[tooltip] +technology-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ +resource-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ рСсурса +energy-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ энСргии +rocket-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ +burnt-recipe=Π Π΅Ρ†Π΅ΠΏΡ‚ с сТиганиСм +burnt-product=ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ сТигания +display-logistic-row=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ логистичСский ряд +logistic-row-choose=Π’Ρ‹Π±ΠΎΡ€ логистичСского ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° +filter-language-switch-left=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ английскиС названия (систСмныС) +filter-language-switch-right=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ названия +filter-contain-switch-left=Π€ΠΈΠ»ΡŒΡ‚Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ сравнСниС +filter-contain-switch-right=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈΡ‰Π΅Ρ‚ ΠΏΠΎ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ тСкста Π² названиях +selector-module=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +selector-factory=Π’Ρ‹Π±ΠΎΡ€ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ +edit-block=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Π±Π»ΠΎΠΊ +edit-recipe=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +edit-resource=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот рСсурс +add-recipe=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +edit-product=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ +info-product=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +info-logistic=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ логистикС +info-block=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π±Π»ΠΎΠΊΠ΅ +info-factory=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ +info-beacon=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ маякС +info-building=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π·Π΄Π°Π½ΠΈΠΈ +info-model=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ производствСнной Π»ΠΈΠ½ΠΈΠΈ +info-control=ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ информация +hide-show-done=Π£Π±Ρ€Π°Ρ‚ΡŒ/ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ряд Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ +hide-show-factory=Π£Π±Ρ€Π°Ρ‚ΡŒ/ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Ρ„Π°Π±Ρ€ΠΈΠΊ +hide-show-product=Π£Π±Ρ€Π°Ρ‚ΡŒ/ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +hide-show-beacon=Π£Π±Ρ€Π°Ρ‚ΡŒ/ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ маяков +product=__1__\nΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ +ingredient=__1__\nΠ˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ +rest-product=__1__\nΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ продукция +other-product=__1__\nДругая продукция +info-module=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ +add-module=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ +remove-module=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ +remove-element=Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ряд +up-element=ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒ ряд\n__CONTROL_STYLE_BEGIN__Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒ Π½Π° __1__ рядов\n__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: На самый Π²Π΅Ρ€Ρ… +down-element=ΠžΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ряд\n__CONTROL_STYLE_BEGIN__Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: ΠžΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° __1__ рядов\n__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: На самый Π½ΠΈΠ· +conversion-recipe-block=ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π² Π±Π»ΠΎΠΊ\n__CONTROL_STYLE_BEGIN__Ctrl + Click__CONTROL_STYLE_END__: ВмСстС со всСми рядами Π½ΠΈΠΆΠ΅ +module-description=__1__\nΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅: __2__%\nΠ‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: __3__%\nΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: __4__%\nЗагрязнСниС: __5__% +element-amount=__1__\nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ: __2__ +element-amount-probability=__1__\nМин. количСство: __2__\nМакс. количСство: __3__\nΠ’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: __4__ +recipe-info=__1__ __2__\nΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ: __3__ \nΠ˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹: __4__ +recipe-info-element=\n __1____2__ x __3__ __4__ +recipe-by-hand=(Π’Ρ€ΡƒΡ‡Π½ΡƒΡŽ) +recipe-unsearched=(НС Π½Π°ΠΉΠ΄Π΅Π½) +cargo-info=__1__ \n__2__\n__3__ +cargo-info-element=__1__: __2__ +technology-info=__1__\nΠ£Ρ€ΠΎΠ²Π΅Π½ΡŒ: __2__ \nΠ€ΠΎΡ€ΠΌΡƒΠ»Π°: __3__ \nΠ˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹: __4__ +share-mod=Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ __1__ Π² сСтСвой ΠΈΠ³Ρ€Π΅ +unlink-element=ΠŸΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ/ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +factory-limit=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°Π±Ρ€ΠΈΠΊ Π½Π° Π±Π»ΠΎΠΊ +formula-allowed=ДопускаСтся Π²Π²ΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: (10*5-3)/2 +beacon-on-factory=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° ΠΎΠ΄Π½Ρƒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ эффСкты ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΊ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅. +beacon-per-factory=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ.\nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков вычисляСтся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ [font=default-bold][color=blue]y=ax+b[/color][/font], Π³Π΄Π΅:\n[font=default-bold][color=blue]y[/color][/font] количСство маяков.\n[font=default-bold][color=blue]x[/color][/font] количСство Ρ„Π°Π±Ρ€ΠΈΠΊ.\n[font=default-bold][color=blue]a[/color][/font] - [color=orange]маяков Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ[/color].\n[font=default-bold][color=blue]b[/color][/font] - [color=orange]постоянныС маяки[/color]. +beacon-per-factory-constant=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ число маяков.\nΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков вычисляСтся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ [font=default-bold][color=blue]y=ax+b[/color][/font], Π³Π΄Π΅:\n[font=default-bold][color=blue]y[/color][/font] количСство маяков.\n[font=default-bold][color=blue]x[/color][/font] количСство Ρ„Π°Π±Ρ€ΠΈΠΊ.\n[font=default-bold][color=blue]a[/color][/font] - [color=orange]маяков Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ[/color].\n[font=default-bold][color=blue]b[/color][/font] - [color=orange]постоянныС маяки[/color]. +block-cannot-link-first=ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связанным +block-cannot-link-by-factory=Π‘Π»ΠΎΠΊ, считаСмый "ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅", Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан +block-cannot-by-factory=Π‘Π»ΠΎΠΊ, считаСмый "ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅", Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ +block-cannot-matrix-solver=ΠœΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с расчётом "ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅" + +[controls] +helmod-input-valid=Π’Π²ΠΎΠ΄ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ +helmod-close=Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс +helmod-open-close=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ интСрфСйс +helmod-production-line-open=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию +helmod-recipe-selector-open=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +helmod-recipe-explorer-open=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ список Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +helmod-richtext-open=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ RichText +contraint-plus=__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ +contraint-minus=__CONTROL_STYLE_BEGIN__Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ +link-intermediate=__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ +module-add=__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ максимум ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +module-remove=__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π£Π±Ρ€Π°Ρ‚ΡŒ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ +crafting-add=__CONTROL_STYLE_BEGIN__Ctrl + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ__CONTROL_STYLE_END__: Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΡ€Π°Ρ„Ρ‚Π° + +[helmod_pin-tab-panel] +title=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ + +[helmod_status-tab-panel] +title=БостояниС + +[helmod_error] +excessive-event-iteration=Ошибка! ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΎ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ событий! + +[helmod_unittest] +energy-title=ЭнСргия + +[helmod_cap_reason] +speed-cycle=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости, 1 Ρ†ΠΈΠΊΠ» Π·Π° Ρ‚ΠΈΠΊ +speed-module-low=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ большС Ρ‡Π΅ΠΌ Π½Π° 80% +speed-module-high=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ % Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС 32767% +productivity-module-low=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ продуктивности, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС 0% +consumption-module-low=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ потрСблСния, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ большС Ρ‡Π΅ΠΌ Π½Π° 80% +pollution-module-low=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ загрязнСния, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ большС Ρ‡Π΅ΠΌ Π½Π° 80% + +[item-group-name] +helmod=Helmod diff --git a/helmod/locale/ru/help.cfg b/helmod/locale/ru/help.cfg new file mode 100644 index 00000000..a3c61492 --- /dev/null +++ b/helmod/locale/ru/help.cfg @@ -0,0 +1,291 @@ +[helmod_help] +panel-title=Π‘ΠΏΡ€Π°Π²ΠΊΠ° + +getting-start=Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ +getting-start-desc=ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ справку ΠΏΠΎ настройкам ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΠΌΠΎΠ΄Π°. + +quick-start=Быстрый старт +quick-start-desc=Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ производствСнный Π±Π»ΠΎΠΊ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ "ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия".\nЕсли Π²Ρ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, установитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скрытым. +quick-start-1=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚". +quick-start-2=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². +quick-start-3=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ "Π’Ρ‹Ρ…ΠΎΠ΄", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ. +quick-start-4=УстановитС количСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ENTER ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK для подтвСрТдСния. +quick-start-5=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΆΡ‘Π»Ρ‚Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΎΠΊ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ "Π˜Π½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹" для добавлСния Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. +quick-start-6=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ сСрый Π·Π½Π°Ρ‡ΠΎΠΊ Π² строкС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ "Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²". +quick-start-7=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π·Π½Π°Ρ‡ΠΊΠ΅ Π±Π»ΠΎΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° этот Π±Π»ΠΎΠΊ производствСнной Π»ΠΈΠ½ΠΈΠΈ. +quick-start-8=Π©Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ "Назад", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ производствСнной Π»ΠΈΠ½ΠΈΠΈ. + +getting-start-panel=ОписаниС ΠΏΠ°Π½Π΅Π»ΠΈ ΠΌΠΎΠ΄Π° +getting-start-panel-desc= +getting-start-panel-1=ПанСль Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ мСню +getting-start-panel-2=Главная панСль +getting-start-panel-3=Π’Ρ‹Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, извСстной ΠΊΠ°ΠΊ "ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия" +getting-start-panel-4=Главная панСль Π΄Π°Π½Π½Ρ‹Ρ… + +mod-settings=Настройки ΠΌΠΎΠ΄Π° +mod-settings-desc=Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ настройки ΠΌΠΎΠ΄Π°, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ [ESC], Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ "Настройки -> Настройки ΠΌΠΎΠ΄ΠΎΠ²". + +mod-settings-map=Бписок настроСк ΠΌΠΎΠ΄Π° +mod-settings-map-desc= +mod-settings-map-1=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ: ДобавляСт ΠΊΠ½ΠΎΠΏΠΊΡƒ для просмотра этапов вычислСний Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ. +mod-settings-map-2=Π¨Π°Π³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ кэша:ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ кэша, высокиС значСния ΡƒΡ…ΡƒΠ΄ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвой ΠΈΠ³Ρ€Ρ‹. +mod-settings-map-3=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС листы: Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС листы для администратора. +mod-settings-map-4=Π€ΠΈΠ»ΡŒΡ‚Ρ€ с ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠΉ строкой: +mod-settings-map-5=ΠΠ²Ρ‚ΠΎΡ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ тСкста: Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ автоматичСски примСняСтся ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ тСкста; ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ это Π² сСтСвой ΠΈΠ³Ρ€Π΅. +mod-settings-map-6=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅: Ссли Π²Ρ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅. +mod-settings-map-7=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ маяку: Ссли Π²Ρ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ маяк Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅. +mod-settings-map-8=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅: Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ…, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ эту настройку. +mod-settings-map-9=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² маяках: Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² маяках, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ эту настройку. +mod-settings-map-10=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ: скрытыС ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для просмотра Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Factorio ΠΈΠ»ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² (Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ) +mod-settings-map-11=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ: ИндСкс, ID, Π’ΠΈΠΏ, НазваниС - скрытыС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ) + +mod-settings-player=Настройки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° +mod-settings-player-desc= +mod-settings-player-1=Π€Π°ΠΊΡ‚ΠΎΡ€ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π°: Π‘ΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° ΠΊ ΡˆΠΈΡ€ΠΈΠ½Π΅ экрана +mod-settings-player-2=Π€Π°ΠΊΡ‚ΠΎΡ€ высоты ΠΎΠΊΠ½Π°: Π‘ΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ высоты ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° ΠΊ высотС экрана +mod-settings-player-3=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΠΌΠΎΠ΄Π°: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΠΌΠΎΠ΄Π°, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. +mod-settings-player-4=Π Π΅ΠΆΠΈΠΌ отобраТСния ячСйки: Ρ€Π΅ΠΆΠΈΠΌ отобраТСния всСх чисСл. +mod-settings-player-5=Π¨Π°Π³ пСрСмСщСния ряда: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, насколько ряд смСщаСтся Π²Π²Π΅Ρ€Ρ…/Π²Π½ΠΈΠ· ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ "Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ". + +preferences=Настройки +preferences-desc= + +preferences-general=ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ +preferences-general-desc=ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки - это Π² основном настройки отобраТСния. +preferences-general-1=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, автоматичСски Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаётС Ρ€Π΅Ρ†Π΅ΠΏΡ‚. +preferences-general-2=Числовой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°Π±Ρ€ΠΈΠΊ: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ количСство дСсятичных разрядов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. +preferences-general-3=Числовой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ элСмСнтов: Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ количСство дСсятичных разрядов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ. +preferences-general-4=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк для настроСк: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк Π² списках для появлСния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ +preferences-general-5=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ для настроСк: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² списках для появлСния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ +preferences-general-6=ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ: ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ порядок ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π² строкС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +preferences-general-7=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС. Если ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΎΠ½ΠΈ пСрСнСсутся Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. +preferences-general-8=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ²: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС. Если ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΎΠ½ΠΈ пСрСнСсутся Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. +preferences-general-9=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ загрязнСниС: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ загрязнСния. +preferences-general-10=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ здания: Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π΄Π°Π½ΠΈΠΉ. + +preferences-ui=Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ +preferences-ui-desc=Настройки интСрфСйса ΠΏΠ°Π½Π΅Π»Π΅ΠΉ. +preferences-ui-1=Авто-Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ: АвтоматичСски Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ панСль, ΠΊΠΎΠ³Π΄Π° открываСтся другая. +preferences-ui-2=Π”ΠΎΠΏ. ΠΏΠ°Π½Π΅Π»ΠΈ: ΠŸΡ€ΠΈΡ†Π΅ΠΏΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ справа ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. +preferences-ui-3=Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏ. ΠΏΠ°Π½Π΅Π»Π΅ΠΉ: ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π»Π°Π²Π½ΠΎΠΉ панСлью ΠΈ ΠΏΡ€ΠΈΡ†Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠΉ. + +preferences-module-priority=ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +preferences-module-priority-desc=ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ - это настройка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. + +preferences-items-logistic=Настройки логистики ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +preferences-items-logistic-desc=Настройки логистики - это Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ справкС ΠΈ мСню логистики. + +preferences-fluids-logistic=Настройки логистики ТидкостСй ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +preferences-fluids-logistic-desc=Настройки логистики - это Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ справкС ΠΈ мСню логистики. + +recipe-selector=Π’Ρ‹Π±ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +recipe-selector-desc=Π•ΡΡ‚ΡŒ нСсколько ΠΏΠ°Π½Π΅Π»Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΎΠ½ΠΈ всС схоТи с панСлью Π²Ρ‹Π±ΠΎΡ€Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². Когда Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΎΠ½ автоматичСски добавляСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ "ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ". + +recipe-selector-normal=Π’Ρ‹Π±ΠΎΡ€ Π±Π΅Π· настроСк видимости +recipe-selector-normal-desc=Если настройки видимости ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исслСдованныС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹. Π’ зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ. Π’ сСтСвой ΠΈΠ³Ρ€Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ настройки "Π¨Π°Π³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ кэша", Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. +recipe-selector-normal-1=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ/ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρƒ: опрСдСляСт поиск Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π΅. +recipe-selector-normal-2=ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ названия/АнглийскиС названия (систСмныС): опрСдСляСт, Π³Π΄Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ совпадСния ΠΏΡ€ΠΈ поискС. +recipe-selector-normal-3=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСдоступныС: ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, исслСдованныС ΠΈ Π½Π΅Ρ‚. +recipe-selector-normal-4=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ скрытыС: ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС скрытыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ - скрытый Ρ€Π΅Ρ†Π΅ΠΏΡ‚, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ настройку, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ производствСнный Π±Π»ΠΎΠΊ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹. +recipe-selector-normal-5=ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ скрытыС для ΠΊΡ€Π°Ρ„Ρ‚Π°: ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всС скрытыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для ΠΊΡ€Π°Ρ„Ρ‚Π°. НСкоторыС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ скрыты Π² мСню ΠΊΡ€Π°Ρ„Ρ‚Π° Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° позволяСт Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π·ΠΎΡ€, Ρ‚.ΠΊ. всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ удвоятся. +recipe-selector-normal-6=Π€ΠΈΠ»ΡŒΡ‚Ρ€: Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ названия ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ "Авто-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€" Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ/ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π½Π°Π±ΠΎΡ€Π° тСкста. +recipe-selector-normal-7=Бписок Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ "Helmod" - это список Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². + +recipe-selector-all=Π’Ρ‹Π±ΠΎΡ€ со всСй Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ +recipe-selector-all-desc=Когда всС настройки видимости Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹. +recipe-selector-all-1=Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠΈ. +recipe-selector-all-2=НСисслСдованныС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ красными Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠΈ. +recipe-selector-all-3=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ" ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΆΡ‘Π»Ρ‚Ρ‹ΠΌΠΈ Π·Π½Π°Ρ‡ΠΊΠ°ΠΌΠΈ. + +recipe-selector-helmod=Π“Ρ€ΡƒΠΏΠΏΠ° "Helmod" +recipe-selector-helmod-desc=Helmod добавляСт Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях. Они сгруппированы вмСстС Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² "Helmod". Π£ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ малСнькая ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠ°-подсказка Π½Π° Π·Π½Π°Ρ‡ΠΊΠ΅. +recipe-selector-helmod-1=Π Π΅Ρ†Π΅ΠΏΡ‚ рСсурса: обСспСчиваСт доступ ΠΊ расчСту Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ископаСмых. +recipe-selector-helmod-2=Π Π΅Ρ†Π΅ΠΏΡ‚ сТигания: содСрТит остаточный ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ сгорания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€Π°Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π½Ρ‹ΠΉ элСмСнт. +recipe-selector-helmod-3=Π Π΅Ρ†Π΅ΠΏΡ‚ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹: содСрТит элСмСнт, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запуска Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для этого ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ². + +recipe-editor=Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +recipe-editor-desc=Π­Ρ‚Π° сСкция описываСт, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ "Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²". + +recipe-editor-general=ОписаниС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² +recipe-editor-general-desc=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², бСзусловно, ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ… мСню. Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Π·Π°Π²ΠΎΠ΄Π΅, Π² основном Π΅Π³ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Если Π½Π° вашСй Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠΏΠ»ΠΈΠ²ΠΎ, Π²Ρ‹ смоТСтС Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΈ ΠΎΠ½ΠΎ появится Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅.\nЕсли настройки Π²Π°ΡˆΠΈΡ… ΠΌΠΎΠ΄ΠΎΠ² ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ Π»ΠΈΠΌΠΈΡ‚Ρ‹ ΠΈΠ³Ρ€Ρ‹, Π·Π½Π°Ρ‡ΠΎΠΊ прСдупрСТдСния появится Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ свойства Π½Π° Π·Π°Π²ΠΎΠ΄Π΅, это справСдливо для ΠΌΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слишком сильно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. +recipe-editor-general-1=ОписаниС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. +recipe-editor-general-2=Π’Ρ‹Π±ΠΎΡ€ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈ значСния. +recipe-editor-general-3=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. +recipe-editor-general-4=Π’Ρ‹Π±ΠΎΡ€ маяка ΠΈ значСния. +recipe-editor-general-5=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ маяка. +recipe-editor-general-6=Настройки маяка. + +recipe-editor-info=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +recipe-editor-info-desc=Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ опрСдСлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. +recipe-editor-info-1=% ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ†ΠΈΠΈ уровня использования, это позволяСт Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹. +recipe-editor-info-2=Назначив Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ 50%, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ рассчитан Π½Π° 50% ΠΎΡ‚ потрСбности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ для производства. + +recipe-editor-factory=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ +recipe-editor-factory-desc=Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ опрСдСлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. +recipe-editor-factory-1=Π’Ρ‹Π±ΠΎΡ€ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈ мСню Π΅Ρ‘ распространСния. +recipe-editor-factory-2=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π° (Ссли ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ). +recipe-editor-factory-3=ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈ мСню ΠΈΡ… распространСния. +recipe-editor-factory-4=БрСдство Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. + +recipe-editor-beacon=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ маякС +recipe-editor-beacon-desc=Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ опрСдСлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅. +recipe-editor-beacon-1=Π’Ρ‹Π±ΠΎΡ€ маяка ΠΈ мСню Π΅Π³ΠΎ распространСния. +recipe-editor-beacon-2=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ маякС ΠΈ настройки примСнСния эффСктов ΠΈ количСства ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ количСству Ρ„Π°Π±Ρ€ΠΈΠΊ. +recipe-editor-beacon-3=ΠœΠΎΠ΄ΡƒΠ»ΠΈ маяка ΠΈ мСню ΠΈΡ… распространСния. +recipe-editor-beacon-4=БрСдство Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. + +recipe-editor-tools=ПанСль инструмСнтов +recipe-editor-tools-desc=ПанСль инструмСнтов позволяСт Π²Π°ΠΌ быстро Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ настройки Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ. ИспользованиС распространСния Π² сочСтании с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ - это быстрый ΠΈ простой способ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию. Если Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π²Ρ‹Π±ΠΎΡ€ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΏΠΎ возмоТности Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-tools-1=Π€Π°Π±Ρ€ΠΈΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ, Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. +recipe-editor-tools-2=РаспространяСт Π²Ρ‹Π±ΠΎΡ€ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. +recipe-editor-tools-3=РаспространяСт Π²Ρ‹Π±ΠΎΡ€ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π½Π° всС Π±Π»ΠΎΠΊΠΈ производствСнной Π»ΠΈΠ½ΠΈΠΈ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. +recipe-editor-tools-4=Настройка распространСния, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². +recipe-editor-tools-5=Настройка распространСния, Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ. +recipe-editor-tools-6=Настройка распространСния, Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ модулями, Ссли Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½. +recipe-editor-tools-7=ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Ρ…Ρ€Π°Π½ΠΈΡ‚ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-tools-8=РаспространяСт Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. +recipe-editor-tools-9=РаспространяСт Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π° всС Π±Π»ΠΎΠΊΠΈ производствСнной Π»ΠΈΠ½ΠΈΠΈ, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. +recipe-editor-tools-10=Π£Π±ΠΈΡ€Π°Π΅Ρ‚ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. + +recipe-editor-module-selection=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +recipe-editor-module-selection-desc=Π’Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ позволяСт Π²Π°ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈ маяки. +recipe-editor-module-selection-1=Бписок примСняСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-module-selection-2=Π’Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. +recipe-editor-module-selection-3=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для этого Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈΠ»ΠΈ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ простым Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ. +recipe-editor-module-selection-4=ΠœΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ для этого Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈΠ»ΠΈ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ красным. + +recipe-editor-module-priority=ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +recipe-editor-module-priority-desc=ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ быстро ΠΈ просто. Если ваш ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ сразу ΠΊΠΎ всСй производствСнной Π»ΠΈΠ½ΠΈΠΈ.\nКак Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ваш ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ настроСн, систСма попытаСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с Π΅Π³ΠΎ количСством, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ, Ссли ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ свободноС мСсто ΠΈ Ρ‚.Π΄.\nНапримСр, Π² ванильной ΠΈΠ³Ρ€Π΅, Ссли Π² ΠΌΠΎΡ‘ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅ модуля я Π²Ρ‹Π±Ρ€Π°Π» [item=productivity-module-3]x10, Π·Π°Ρ‚Π΅ΠΌ [item=speed-module-3]x10 ΠΈ распространСниС Π½Π° всю ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию, Ρƒ мСня Π±ΡƒΠ΄Π΅Ρ‚ оптимизированная настройка всСго ΠΎΠ΄Π½ΠΈΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΌΡ‹ΡˆΠΈ. Π€Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ [item=productivity-module-3], ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ [item=speed-module-3]. +recipe-editor-module-priority-1=Бписок примСняСмых ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-module-priority-2=Кнопка доступа ΠΊ мСню настроСк ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-module-priority-3=ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для этого Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈΠ»ΠΈ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ простым Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ. +recipe-editor-module-priority-4=Кнопка примСнСния Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°. +recipe-editor-module-priority-5=Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. +recipe-editor-module-priority-6=Π’Ρ‹Π±ΠΎΡ€ мСню ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. + +production=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия ΠΈ Π±Π»ΠΎΠΊ +production-desc=Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ°Π½Π΅Π»ΠΈ производствСнной Π»ΠΈΠ½ΠΈΠΈ ΠΈ производствСнного Π±Π»ΠΎΠΊΠ°. + +production-line=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия +production-line-desc=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия - это Π½Π°Π±ΠΎΡ€ производствСнных Π±Π»ΠΎΠΊΠΎΠ² для производства Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ². +production-line-1=Π—Π½Π°Ρ‡ΠΊΠΈ Π²Ρ‹Π±ΠΎΡ€Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ. +production-line-2=Π—Π½Π°Ρ‡ΠΊΠΈ добавлСния Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. +production-line-3=Π—Π½Π°Ρ‡ΠΊΠΈ дСйствий Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΠΌΠ΅Π½, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. +production-line-4=Π—Π½Π°Ρ‡ΠΊΠΈ рСдактирования ΠΈ настроСк. +production-line-5=Π—Π½Π°Ρ‡ΠΊΠΈ настройки логистичСских Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² строках производства. +production-line-6=Настройки Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния скорости производства. +production-line-7=Полоса Π²Ρ‹Π±ΠΎΡ€Π° производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-line-8=ΠžΠ±Ρ‰Π°Ρ информация ΠΈ настройки ΠΏΡ€Π°Π² производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-line-9=ВыходящиС элСмСнты производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-line-10=ВходящиС элСмСнты производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-line-11=Бписок производствСнных Π±Π»ΠΎΠΊΠΎΠ². + +production-block=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ +production-block-desc=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ - это список Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² для производства ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π°.\nΠ–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π½Π° нСсколько Π±Π»ΠΎΠΊΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ…. Π‘Π»ΠΎΠΊ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‡Π΅Ρ€Ρ‚Ρ‘ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, особСнно ΠΏΡ€ΠΈ использовании заводского ограничСния. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ прСдставлСно Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±Π»ΠΎΠΊΠ΅. +production-block-1=Π—Π½Π°Ρ‡ΠΊΠΈ Π²Ρ‹Π±ΠΎΡ€Π° Π·Π°ΠΊΠ»Π°Π΄ΠΊΠΈ. +production-block-2=Π—Π½Π°Ρ‡ΠΊΠΈ добавлСния Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. +production-block-3=Π—Π½Π°Ρ‡ΠΊΠΈ дСйствий Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΠΌΠ΅Π½, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. +production-block-4=Π—Π½Π°Ρ‡ΠΊΠΈ закрСплСния ΠΈΠ»ΠΈ просмотра суммарной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. +production-block-5=Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ мСню для ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ (скрыто ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). +production-block-6=Π—Π½Π°Ρ‡ΠΊΠΈ рСдактирования ΠΈ настроСк. +production-block-7=Π—Π½Π°Ρ‡ΠΊΠΈ настройки логистичСских Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π² строках производства. +production-block-8=Настройки Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ измСрСния скорости производства. +production-block-9=Навигационная полоса Π±Π»ΠΎΠΊΠΎΠ² производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-block-10=Настройки расчётов производствСнного Π±Π»ΠΎΠΊΠ°. +production-block-11=ΠžΠ±Ρ‰Π°Ρ информация производствСнного Π±Π»ΠΎΠΊΠ°. +production-block-12=ВыходящиС элСмСнты производствСнного Π±Π»ΠΎΠΊΠ°. +production-block-13=ВходящиС элСмСнты производствСнного Π±Π»ΠΎΠΊΠ°. +production-block-14=Бписок Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². + +production-edition=Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ производствСнной Π»ΠΈΠ½ΠΈΠΈ +production-edition-desc=МСню рСдактирования производствСнной Π»ΠΈΠ½ΠΈΠΈ позволяСт Π²Π°ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ ΠΏΡ€Π°Π²Π° ΠΎΠ±Ρ‰Π΅Π³ΠΎ доступа. +production-edition-1=Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΡ‚ΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† этой производствСнной Π»ΠΈΠ½ΠΈΠΈ. +production-edition-2=ΠžΠ±Ρ‰ΠΈΠΉ доступ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€Π΅. +production-edition-3=Π“Ρ€ΡƒΠΏΠΏΠ° позволяСт Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ производствСнныС Π»ΠΈΠ½ΠΈΠΈ Π² строкС мСню с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказки. +production-edition-4=Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ° - это свободноС ΠΏΠΎΠ»Π΅ для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. + +compute=Расчёты +compute-desc=Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ рассчитываСт производство. На самом Π΄Π΅Π»Π΅ это просто. + +compute-order=ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ расчётов +compute-order-desc=Расчёты производятся линия Π·Π° Π»ΠΈΠ½ΠΈΠ΅ΠΉ, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠΉ. +compute-order-1=ΠŸΡ€ΠΈ расчётах провСряСтся, Ρ‡Ρ‚ΠΎ Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² для Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² ΠΈ позволяСтся Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ. +compute-order-2=БСрётся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚. +compute-order-3=ΠŸΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ†ΠΈΠΊΠ» ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π΅Ρ†Π΅ΠΏΡ‚. +compute-order-4=БчитаСтся ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², потрСбляСмых ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠ΅ΠΉ. +compute-order-5=Расчёты пСрСходят ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρƒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. +compute-order-6=Π’ ΠΊΠΎΠ½Ρ†Π΅ расчётов провСряСтся статус ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈ количСство обнуляСтся, Ссли Π²Ρ‹Ρ…ΠΎΠ΄ < 0.01. Если Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΎΠ½Π° отобраТаСтся красным Π·Π½Π°Ρ‡ΠΊΠΎΠΌ. +compute-order-7=Для уравнивания Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² ΠΏΡ€ΠΈ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "% производства" Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ…, особСнно для Π½Π΅Ρ„Ρ‚Π΅ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ². + +compute-solver=Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† +compute-solver-desc="Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†" Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ балансировки Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², Ρ‚.ΠΊ. Π² классичСском ΠΌΠΎΠ΄Π΅ это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΎ. +compute-solver-1=Когда Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² производствСнном Π±Π»ΠΎΠΊΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΡˆΠ΅ΡΡ‚Π΅Ρ€Ρ‘Π½ΠΊΠΈ Π½Π°Π²Π΅Ρ€Ρ…Ρƒ, это ΠΈ Π΅ΡΡ‚ΡŒ "Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†". +compute-solver-2=ВычислСния Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ расчётов" ΠΈ всС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. +compute-solver-3=Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ нСобходимости. +compute-solver-4=Если Π Π΅ΡˆΠ°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΈΠ»ΠΈ лишний. +compute-solver-5=ПолС "% производства" Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² расчётах Π Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. + +special-panel=Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ +special-panel-desc=НСкоторыС ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Π½Π΅Π»Π΅ΠΉ доступны, Ссли Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ" ΠΈ "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ". + +special-panel-admin=АдминистрированиС +special-panel-admin-desc=АдминистрированиС позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ элСмСнтами ΠΌΠΎΠ΄Π°. Π­Ρ‚Π° панСль доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ администратору ΠΈΠ³Ρ€Ρ‹. +special-panel-admin-1=Бписок кэшСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ кэшСй ΠΏΡ€ΠΈ нСобходимости. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании, это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для использования, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ кэша (Π·Π½Π°Ρ‡ΠΎΠΊ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ). +special-panel-admin-2=Бписок ΠΏΡ€Π°Π²ΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для настройки Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… заводских списков, Π² основном для рСдактирования Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². +special-panel-admin-3=Бписок листов позволяСт администратору ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ всСми листами Π±Π΅Π· ограничСния ΠΏΡ€Π°Π². +special-panel-admin-4=Бписок ΠΌΠΎΠ΄ΠΎΠ² - это информационная страница ΠΎ ΠΌΠΎΠ΄Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΈΠ³Ρ€Π΅. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ стримСром для отобраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ². +special-panel-admin-5=Бписок интСрфСйсов - это информационная страница ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… модификациях интСрфСйсов Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областях интСрфСйса. + +special-panel-properties=Бвойства +special-panel-properties-desc=ПанСль "Бвойства" ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для просмотра свойств ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НСзамСнимо для ΠΌΠΎΠ΄Π΄Π΅Ρ€ΠΎΠ². +special-panel-properties-1=ПанСли Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт. +special-panel-properties-2=Π€ΠΈΠ»ΡŒΡ‚Ρ€ "Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния" скрываСт Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния, ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ. +special-panel-properties-3=Π€ΠΈΠ»ΡŒΡ‚Ρ€ "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ различия" ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ свойства. +special-panel-properties-4=ПолС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° позволяСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ свойства ΠΏΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½ΠΈ. +special-panel-properties-5=Для удалСния элСмСнта Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡ΠΊΡƒ. + +special-panel-filter=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² +special-panel-filter-desc=ПанСль "Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ²" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для тСстирования Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°Ρ… Π² ΠΈΠ³Ρ€Π΅. НСзамСнимо для ΠΌΠΎΠ΄Π΄Π΅Ρ€ΠΎΠ². +special-panel-filter-1=Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° опрСдСляСт, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ элСмСнта примСняСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. ИзмСнСниС Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ интСрфСйс. +special-panel-filter-2=Π’Ρ‹Π±ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Ρ†Π° - это Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Helmod ΠΈ слуТащиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ. +special-panel-filter-3=ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ "+", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСн автоматичСски. +special-panel-filter-4=Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ автоматичСски. +special-panel-filter-5=Если Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ отсутствуСт, Π² области Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. + +special-panel-unittest=UnitTest +special-panel-unittest-desc=ПанСль "UnitTest" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… расчСтов, Π² основном расчСтов энСргопотрСблСния. +special-panel-unittest-1=Волько нСсколько ΠΌΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅ΡŽΡ‚ UnitTest. +special-panel-unittest-2=ΠšΡ€Π°ΡΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ ошибки, Π²Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ значСния, сравнив ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π·Π½Π°Ρ‡ΠΊΠ° ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказки для красного значСния. ВСроятно, красноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния, ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ значСния большС Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹. + +special-panel-debug=ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ +special-panel-debug-desc=ПанСль "ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ" ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этапов расчСта Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ. +special-panel-debug-1=Π­Ρ‚Π° панСль доступна, Ссли Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ" ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ "Π‘ΠΊΠ°Ρ€Π°Π±Π΅ΠΉ" Π² производствСнном Π±Π»ΠΎΠΊΠ΅. +special-panel-debug-2=НС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ эту ΠΎΠΏΡ†ΠΈΡŽ Π² сСтСвой ΠΈΠ³Ρ€Π΅ ΠΈΠ»ΠΈ Ссли Π²Ρ‹ Π΅Ρ‘ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. +special-panel-debug-3=Кнопки Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ этапам расчСта. +special-panel-debug-4=На этапах "Π¨Π°Π³ Π₯" рабочая Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π° Ρ†Π²Π΅Ρ‚ΠΎΠΌ, для Π Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† это Ρ‚ΠΎΡ‡ΠΊΠ°, называСмая "Pivot (Ось вращСния)". + +control=Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ +control-desc=Бписок ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… клавиш: горячиС клавиши, Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ПКМ, Ctrl+Π›ΠšΠœ, Shift+Π›ΠšΠœ. + +control-hotkey=ГорячиС клавиши +control-hotkey-desc=Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ горячиС клавиши Π² настройках ΠΈΠ³Ρ€Ρ‹. +control-hotkey-1=[U] ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ/Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠ΄Π°. +control-hotkey-2=[I] ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ линию. +control-hotkey-3=[O] ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°. + +tips=Подсказки +tips-desc=Подсказки, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… панСлях. + +tips-production-line=Подсказки производствСнной Π»ΠΈΠ½ΠΈΠΈ +tips-production-line-desc= +tips-production-line-1=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия - это Π³Ρ€ΡƒΠΏΠΏΠ° производствСнных Π±Π»ΠΎΠΊΠΎΠ². +tips-production-line-2=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ Π² сСтСвой ΠΈΠ³Ρ€Π΅. +tips-production-line-3=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ линия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ связанныС ΠΈΠ»ΠΈ нСсвязанныС Π±Π»ΠΎΠΊΠΈ. +tips-production-line-4=ОбъСдинСниС нСзависимых производствСнных Π±Π»ΠΎΠΊΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ производствСнных Π»ΠΈΠ½ΠΈΠΉ. + +tips-production-block=Подсказки производствСнного Π±Π»ΠΎΠΊΠ° +tips-production-block-desc= +tips-production-block-1=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ - это Π³Ρ€ΡƒΠΏΠΏΠ° Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². +tips-production-block-2=ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ. +tips-production-block-3=ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π² Π±Π»ΠΎΠΊΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны. +tips-production-block-4=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π Π΅ΡˆΠ°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. diff --git a/helmod/locale/ru/settings.cfg b/helmod/locale/ru/settings.cfg new file mode 100644 index 00000000..5bb56727 --- /dev/null +++ b/helmod/locale/ru/settings.cfg @@ -0,0 +1,67 @@ +[helmod_map_settings] +debug-solver=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ +debug-solver-desc=ДобавляСт ΠΊΠ½ΠΎΠΏΠΊΡƒ для просмотра этапов вычислСний Ρ€Π΅ΡˆΠ°Ρ‚Π΅Π»Ρ +user-cache-step=Π¨Π°Π³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ кэша +user-cache-step-desc=ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ кэша, высокиС значСния ΡƒΡ…ΡƒΠ΄ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСтСвой ΠΈΠ³Ρ€Ρ‹. +display-all-sheet=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС листы +display-all-sheet-desc=Администратор ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ всС листы +filter-translated-string-active=Π€ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ названиям +filter-translated-string-active-desc=Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π±ΡƒΠ΄Π΅Ρ‚ нСбольшая Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ кэша. +filter-on-text-changed=ΠΠ²Ρ‚ΠΎΡ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ тСкста +filter-on-text-changed-desc=Если ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ примСняСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ". +model-filter-factory=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ +model-filter-beacon=Π€ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ маяку +model-filter-factory-module=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ… +model-filter-beacon-module=ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² маяках +hidden_panels=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ +hidden_panels-desc=Π‘ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для просмотра Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Factorio ΠΈΠ»ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² (Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ) +display-hidden-column=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ скрытыС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ +display-hidden-column-desc=ИндСкс, ID, Π’ΠΈΠΏ, НазваниС - скрытыС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ) + +[helmod_user_settings] +display-ratio-horizontal=Π€Π°ΠΊΡ‚ΠΎΡ€ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π° +display-ratio-horizontal-desc=Настройки ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° +display-ratio-vertical=Π€Π°ΠΊΡ‚ΠΎΡ€ высоты ΠΎΠΊΠ½Π° +display-ratio-vertical-desc=Настройки высоты ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π° +display-main-icon=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ ΠΌΠΎΠ΄Π° +display-main-icon-desc=Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ "Π³ΠΎΡ€ΡΡ‡ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ", Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ-Π·Π½Π°Ρ‡ΠΎΠΊ ΠΌΠΎΠ΄Π° +display-cell-mod=Π Π΅ΠΆΠΈΠΌ отобраТСния ячСйки +row-move-step=Π¨Π°Π³ пСрСмСщСния ряда +row-move-step-desc=ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, насколько ряд смСщаСтся Π²Π²Π΅Ρ€Ρ…/Π²Π½ΠΈΠ· ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ "Shift + Ρ‰Π΅Π»Ρ‡ΠΎΠΊ". + +[helmod_pref_settings] +default-factory-level=Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ +default-factory-level-desc=Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌΠΎΠΉ Π² Π½ΠΎΠ²ΠΎΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅. 1 - самая мСдлСнная, last - самая быстрая. +format-number-factory=Числовой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°Π±Ρ€ΠΈΠΊ +format-number-factory-desc=Π€ΠΎΡ€ΠΌΠ°Ρ‚ числа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ +format-number-element=Числовой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ элСмСнтов +format-number-element-desc=Π€ΠΎΡ€ΠΌΠ°Ρ‚ числа ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² +preference-number-line=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк для настроСк +preference-number-line-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк Π² списках для появлСния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ +preference-number-column=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ для настроСк +preference-number-column-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² списках для появлСния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ +display-product-order=ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +display-product-order-desc=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ порядок ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π² строкС Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° +display-product-cols=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +display-product-cols-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС. Если ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΎΠ½ΠΈ пСрСнСсутся Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. +display-ingredient-cols=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² +display-ingredient-cols-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС. Если ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΎΠ½ΠΈ пСрСнСсутся Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. +display-pollution=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ загрязнСниС +display-pollution-desc=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ загрязнСния +display-building=ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ здания +display-building-desc=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π΄Π°Π½ΠΈΠΉ +ui-auto-close=Авто-Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ +ui-auto-close-desc=АвтоматичСски Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ панСль, ΠΊΠΎΠ³Π΄Π° открываСтся другая +ui-glue=Π”ΠΎΠΏ. ΠΏΠ°Π½Π΅Π»ΠΈ +ui-glue-desc=ΠŸΡ€ΠΈΡ†Π΅ΠΏΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ рядом с Π³Π»Π°Π²Π½ΠΎΠΉ панСлью +ui-glue-offset=Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏ. ΠΏΠ°Π½Π΅Π»Π΅ΠΉ +ui-glue-offset-desc=ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π»Π°Π²Π½ΠΎΠΉ панСлью ΠΈ ΠΏΡ€ΠΈΡ†Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠΉ +range-value=Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² этом ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ +display-tips=ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ совСты +display-tips-desc=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ совСтов +beacon-affecting-one=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ +beacon-affecting-one-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π½Π° ΠΎΠ΄Π½Ρƒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. +beacon-by-factory=Маяков Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ +beacon-by-factory-desc=ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ маяков Π½Π° Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. +beacon-constant=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ маяки +beacon-constant-desc=ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ число маяков. diff --git a/helmod/math/Matrix.lua b/helmod/math/Matrix.lua new file mode 100644 index 00000000..e3c886d8 --- /dev/null +++ b/helmod/math/Matrix.lua @@ -0,0 +1,152 @@ +------------------------------------------------------------------------------- +---@class MatrixHeader +---@field index uint +---@field key string +---@field type string +---@field name string +---@field sysname string +---@field tooltip string +---@field is_ingredient boolean +---@field product table +MatrixHeader = newclass(function(base, type, name, tooltip) + base.name = name + base.type = type + base.tooltip = tooltip +end) + +------------------------------------------------------------------------------- +---@return string +function MatrixHeader:get_column_key() + if self.sysname ~= nil then + return self.sysname + end + return string.format("%s#%s", self.type, self.name) +end + +------------------------------------------------------------------------------- +---@param other MatrixHeader +---@return boolean +function MatrixHeader:equals(other) + if other == nil then return false end + return self.name == other.name and self.type == other.type +end + +------------------------------------------------------------------------------- +---@class MatrixRow +---@field type string +---@field name string +---@field tooltip string +---@field header MatrixHeader +---@field columns {[integer] : MatrixHeader} +---@field values {[integer] : number} +---@field columnIndex {[string] : integer} +MatrixRow = newclass(function(base, type, name, tooltip) + base.name = name + base.type = type + base.tooltip = tooltip + base.header = MatrixHeader(type, name, tooltip) + base.columns = {} + base.values = {} + base.columnIndex = {} +end) + +------------------------------------------------------------------------------- +---@param header MatrixHeader +---@param value number +function MatrixRow:add_value(header, value) + local key = header:get_column_key() + if self.columnIndex[key] then + local icol = self.columnIndex[key] + self.values[icol] = value or 0 + else + local icol = #self.columns + 1 + self.columnIndex[key] = icol + self.values[icol] = value or 0 + self.columns[icol] = header + end +end + +------------------------------------------------------------------------------- +---@param header MatrixHeader +function MatrixRow:get_value(header) + local key = header:get_column_key() + local icol = self.columnIndex[key] + return self.values[icol] or 0 +end + +------------------------------------------------------------------------------- +---@class MatrixRowParameters +---@field base string +---@field contraint table +---@field factory_count number +---@field factory_speed number +---@field recipe_count number +---@field recipe_production number +---@field recipe_energy number +---@field coefficient number +MatrixRowParameters = newclass(function(base) + base.factory_count = 0 + base.factory_speed = 1 + base.recipe_count = 0 + base.recipe_production = 1 + base.recipe_energy = 1 + base.coefficient = 0 +end) + +------------------------------------------------------------------------------- +---@class Matrix +---@field columns {[integer] : MatrixHeader} +---@field headers {[integer] : MatrixHeader} +---@field rows {[integer] : {[integer] : number}} +---@field columnIndex {[string] : integer} +---@field parameters {[integer] : MatrixRowParameters} +---@field objectives {[string] : number} +---@field objective_values {[integer] : number} + +Matrix = newclass(function(base) + base.columns = {} + base.headers = {} + base.parameters = {} + base.rows = {} + base.columnIndex = {} +end) + +------------------------------------------------------------------------------- +---@param header MatrixHeader +---@return number +function Matrix:get_column_index(header) + local key = header:get_column_key() + if self.columnIndex[key] then + return self.columnIndex[key] + end + return -1 +end + +------------------------------------------------------------------------------- +---@param header MatrixHeader +function Matrix:add_column(header) + local key = header:get_column_key() + if self.columnIndex[key] == nil then + local icol = #self.columns + 1 + self.columns[icol] = header + self.columnIndex[key] = icol + end +end + +------------------------------------------------------------------------------- +---@param row MatrixRow +---@param parameters MatrixRowParameters +function Matrix:add_row(row, parameters) + local irow = #self.headers + 1 + self.headers[irow] = row.header + self.parameters[irow] = parameters + -- add new columns + for _, header in pairs(row.columns) do + self:add_column(header) + end + for icol, column in pairs(self.columns) do + local cell_value = row:get_value(column) or 0 + if self.rows[irow] == nil then self.rows[irow]={} end + self.rows[irow][icol] = cell_value + end +end \ No newline at end of file diff --git a/helmod/math/Readme.md b/helmod/math/Readme.md new file mode 100644 index 00000000..a211ab8b --- /dev/null +++ b/helmod/math/Readme.md @@ -0,0 +1,90 @@ +# Solver Matrix + +Current Solver: +* Matrix.lua: Contain class of Matrix +* SolverMatrix.lua: Common code of solvers +* SolverMatrixAlgebra.lua: Specifique code of Algebra calculation +* SolverMatrixSimplex.lua: Specifique code of Simplex method calculation + +# Classes + +## Matrix +Container for all informations +* field objectives is the input value, key column/value +* field objective_values is the input value, index column/value, is use with icol value in the code + +``` +---@class Matrix +---@field columns {[integer] : MatrixHeader} +---@field headers {[integer] : MatrixHeader} +---@field rows {[integer] : {[integer] : number}} +---@field columnIndex {[string] : integer} +---@field parameters {[integer] : MatrixRowParameters} +---@field objectives {[string] : number} +---@field objective_values {[integer] : number} +``` + +## MatrixHeader +Header of row or column +``` +---@class MatrixHeader +---@field index uint +---@field key string +---@field type string +---@field name string +---@field sysname string +---@field tooltip string +---@field is_ingredient boolean +---@field product table +``` + +## MatrixRow +Row of matrix +``` +---@class MatrixRow +---@field type string +---@field name string +---@field tooltip string +---@field header MatrixHeader +---@field columns {[integer] : MatrixHeader} +---@field values {[integer] : number} +---@field columnIndex {[string] : integer} +``` + +## MatrixRowParameters +Parameters on recipe of row +This stores all values for a recipe +``` +---@class MatrixRowParameters +---@field base string +---@field contraint table +---@field factory_count number +---@field factory_speed number +---@field recipe_count number +---@field recipe_production number +---@field recipe_energy number +---@field coefficient number +``` + +# Matrix Debugger in factorio + +To active the debugger: find it in the menu Settings/Mod Settings/Map, in helmod section enable "Active the debug solver" + +After to see something use refresh in helmod to generate cache of matrix (only need one time) + +Click on Open debug button + +![Debugger view in factorio](/math/solver_matrix.png) + +# Simplex code algorithm + +1. Prepare initial matrix `SolverMatrix.get_block_matrix(block, parameters)` +1. Inject objectives in matrix `SolverMatrix:prepare_z_and_objectives(matrix, reverse)` +1. Start of program `SolverMatrixSimplex:solve_matrix(Mbase, debug, by_factory, time)` +1. Add ingredient recipes in rows and Inject initial recipes in columns `SolverMatrixSimplex:prepare(matrix)` +1. Search a pivot, greater positive value in row Z is the column, the greater division of coefficient bettween positive value of the colum is the row `SolverMatrixSimplex:get_pivot(matrix)` +1. Apply Gaussian pivot `SolverMatrixSimplex:pivot(matrix, xrow, xcol)` +1. Loop at "Search a pivot" while a pivot found +1. Compute the final Matrix, copy the recipe result in the parameters and compute the % production on each recipe `SolverMatrixSimplex:table_compute(matrix, matrix_result)` and `SolverMatrixSimplex:line_compute(matrix, xrow)` +1. Finalize the row Z `SolverMatrix:finalize(matrix)` +1. Apply status on products/ingredients `SolverMatrix:apply_state(matrix)` diff --git a/helmod/math/Solver.lua b/helmod/math/Solver.lua new file mode 100644 index 00000000..5b264854 --- /dev/null +++ b/helmod/math/Solver.lua @@ -0,0 +1,763 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class Solver +Solver = newclass(function(base) + base.debug_col = 11 + base.col_start = 9 + base.row_input = 2 + base.col_M = 2 + base.col_Cn = 3 + base.col_F = 4 + base.col_S = 5 + base.col_R = 6 + base.col_P = 7 + base.col_E = 8 + base.col_C = 9 +end) + +------------------------------------------------------------------------------- +---Clone la matrice +---@param M table +---@return table +function Solver:clone(M) + local Mx = {} + local num_row = rawlen(M) + local num_col = rawlen(M[1]) + for irow, row in pairs(M) do + Mx[irow] = {} + for icol, col in pairs(row) do + Mx[irow][icol] = col + end + end + return Mx +end + +------------------------------------------------------------------------------- +---Prepare la matrice +---@param M table +---@return table +function Solver:prepare(M) + local Mx = self:clone(M) + local irow = 1 + local row = {} + ---ajoute la ligne Z avec Z=-input + for icol, cell in pairs(Mx[self.row_input]) do + if icol > self.col_start then + Mx[#Mx][icol] = 0 - cell + end + end + return Mx +end + +------------------------------------------------------------------------------- +---Finalise la matrice +---@param M table +---@return table +function Solver:finalize(M) + ---finalize la ligne Z reinject le input Z=Z+input + for icol, cell in pairs(M[#M]) do + if icol > self.col_start then + M[#M][icol] = M[#M][icol] + M[self.row_input][icol] + end + end + return M +end + +------------------------------------------------------------------------------- +---Add runtime +---@param debug boolean +---@param runtime table +---@param name string +---@param matrix table +---@param pivot table +function Solver:addRuntime(debug, runtime, name, matrix, pivot) + if debug == true then + table.insert(runtime, { name = name, matrix = self:clone(matrix), pivot = pivot }) + end +end + +------------------------------------------------------------------------------- +---Ajoute la ligne State +---state = 0 => produit +---state = 1 => produit pilotant +---state = 2 => produit restant +---state = 3 => produit surplus +---@param M table +---@return table +function Solver:appendState(M) + local srow = {} + for irow, row in pairs(M) do + if irow > self.row_input and irow < #M then + for icol, cell in pairs(row) do + if srow[icol] == nil then + table.insert(srow, 0) + end + if icol > self.col_start then + if cell < 0 then + srow[icol] = 2 + end + if cell > 0 and srow[icol] ~= 2 then + srow[icol] = 1 + end + end + end + end + end + local zrow = M[#M] + for icol, cell in pairs(zrow) do + if icol > self.col_start then + if cell > 0 and srow[icol] == 2 then + srow[icol] = 3 + end + end + end + srow[1] = { name = "State", type = "none" } + table.insert(M, srow) + return M +end + +------------------------------------------------------------------------------- +---Abstract Resoud la matrice +---@param matrix_base Matrix +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return Matrix, table +function Solver:solveMatrix(matrix_base, debug, by_factory, time) +end + +------------------------------------------------------------------------------- +---Return a matrix of block +---@param block table +---@param parameters ParametersData +---@param debug boolean +---@return table +function Solver:solve(block, parameters, debug) + local mC, runtimes + + local ok, err = pcall(function() + local mA = Solver.getBlockMatrix(block, parameters) + if mA ~= nil then + mC, runtimes = self:solveMatrix(mA, debug, block.by_factory, block.time) + end + end) + if not (ok) then + if block.solver == true and block.by_factory ~= true then + Player.print("Matrix solver can not find solution!") + else + Player.print("Algebraic solver can not find solution!") + end + if debug then + Player.print(err) + end + end + if debug then + block.runtimes = runtimes + else + block.runtimes = nil + end + + if mC ~= nil then + ---remove temperature convert lines + for i = #mC, 1, -1 do + if mC[i][1].name == "helmod-temperature-convert" then + table.remove(mC, i) + end + end + + ---ratio pour le calcul du nombre de block + local ratio = 1 + ---calcul ordonnee sur les recipes du block + local row_index = self.row_input + 1 + local sorter = function(t, a, b) return t[b].index > t[a].index end + if block.by_product == false then + sorter = function(t, a, b) return t[b].index < t[a].index end + end + + local recipes = block.recipes + for _, recipe in spairs(recipes, sorter) do + if mC[row_index][self.col_R] > 0 then + recipe.count = mC[row_index][self.col_R] + recipe.production = mC[row_index][self.col_P] + else + recipe.count = 0 + end + row_index = row_index + 1 + ---calcul dependant du recipe count + if recipe.type == "energy" then + ModelCompute.computeEnergyFactory(recipe) + else + ModelCompute.computeFactory(recipe) + end + + block.power = block.power + recipe.energy_total + block.pollution_total = block.pollution_total + recipe.pollution_total + + if type(recipe.factory.limit) == "number" and recipe.factory.limit > 0 then + local currentRatio = recipe.factory.limit / recipe.factory.count + if currentRatio < ratio then + ratio = currentRatio + ---block number + block.count = recipe.factory.count / recipe.factory.limit + ---subblock energy + if block.count ~= nil and block.count > 0 then + end + end + end + end + + if block.count <= 1 then + block.count = 1 + block.limit_energy = nil + block.limit_pollution = nil + block.limit_building = nil + for _, recipe in spairs(recipes, function(t, a, b) return t[b].index > t[a].index end) do + recipe.factory.limit_count = nil + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + beacon.limit_count = nil + end + end + recipe.limit_energy = nil + recipe.limit_pollution = nil + end + else + block.limit_energy = block.power / block.count + block.limit_pollution = block.pollution_total / block.count + for _, recipe in spairs(recipes, function(t, a, b) return t[b].index > t[a].index end) do + recipe.factory.limit_count = recipe.factory.count / block.count + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + beacon.limit_count = beacon.count / block.count + end + end + recipe.limit_energy = recipe.energy_total / block.count + recipe.limit_pollution = recipe.pollution_total / block.count + end + end + ---state = 0 => produit + ---state = 1 => produit pilotant + ---state = 2 => produit restant + ---state = 3 => produit surplus + + ---finalisation du bloc + for icol, state in pairs(mC[#mC]) do + if icol > self.col_start then + local Z = math.abs(mC[#mC - 1][icol]) + local product_header = mC[1][icol] + local product_key = product_header.key + local product = Product(product_header):clone() + product.count = Z + product.state = state + if block.by_product == false then + if state == 1 or state == 3 then + ---element produit + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].count = block.ingredients[product_key].count + + product.count + block.ingredients[product_key].state = state + end + if block.products[product_key] ~= nil then + block.products[product_key].state = 0 + end + else + ---element ingredient + if block.products[product_key] ~= nil then + block.products[product_key].count = block.products[product_key].count + product.count + block.products[product_key].state = state + end + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].state = state + end + end + else + if state == 1 or state == 3 then + ---element produit + if block.products[product_key] ~= nil then + block.products[product_key].count = block.products[product_key].count + product.count + block.products[product_key].state = state + end + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].state = 0 + end + else + ---element ingredient + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].count = block.ingredients[product_key].count + + product.count + block.ingredients[product_key].state = state + end + if block.products[product_key] ~= nil then + block.products[product_key].state = state + end + end + end + end + end + end + + return block +end + +------------------------------------------------------------------------------- +---Return a matrix of block +---@param block table +---@param parameters ParametersData +---@return table +function Solver.getBlockMatrix(block, parameters) + local recipes = block.recipes + if recipes ~= nil then + local row_headers = {} + local col_headers = {} + local col_index = {} + local rows = {} + + col_headers["B"] = { index = 1, name = "B", type = "none", tooltip = "Base" } ---Base + col_headers["M"] = { index = 1, name = "M", type = "none", tooltip = "Matrix calculation" } ---Matrix calculation + col_headers["Cn"] = { index = 1, name = "Cn", type = "none", tooltip = "Contraint" } ---Contraint + col_headers["F"] = { index = 1, name = "F", type = "none", tooltip = "Number factory" } ---Number factory + col_headers["S"] = { index = 1, name = "S", type = "none", tooltip = "Speed factory" } ---Speed factory + col_headers["R"] = { index = 1, name = "R", type = "none", tooltip = "Count recipe" } ---Count recipe + col_headers["P"] = { index = 1, name = "P", type = "none", tooltip = "Production" } ---Production + col_headers["E"] = { index = 1, name = "E", type = "none", tooltip = "Energy" } ---Energy + col_headers["C"] = { index = 1, name = "C", type = "none", tooltip = "Coefficient" } ---Coefficient ou resultat + ---begin loop recipes + local factor = 1 + local sorter = function(t, a, b) return t[b].index > t[a].index end + if block.by_product == false then + factor = -factor + sorter = function(t, a, b) return t[b].index < t[a].index end + end + + for _, recipe in spairs(recipes, sorter) do + recipe.base_time = block.time + ModelCompute.computeModuleEffects(recipe, parameters) + if recipe.type == "energy" then + ModelCompute.computeEnergyFactory(recipe) + else + ModelCompute.computeFactory(recipe) + end + local row = {} + + local row_valid = false + local recipe_prototype = RecipePrototype(recipe) + local lua_recipe = recipe_prototype:native() + + ---la recette n'existe plus + if recipe_prototype:native() == nil then return end + + ---prepare le taux de production + local production = 1 + if not (block.solver == true) and recipe.production ~= nil then production = recipe.production end + local row_header = { name = recipe.name, type = recipe.type, tooltip = recipe.name .. "\nRecette" } + table.insert(row_headers, row_header) + row["B"] = row_header + row["M"] = 0 --recipe.matrix_solver or 0 + if recipe.contraint ~= nil then + row["Cn"] = { type = recipe.contraint.type, name = recipe.contraint.name } + else + row["Cn"] = 0 + end + row["F"] = recipe.factory.input or 0 + row["S"] = recipe.factory.speed or 0 + row["R"] = 0 + row["P"] = production + row["E"] = recipe_prototype:getEnergy(recipe.factory) + row["C"] = 0 + + ---preparation + local lua_products = {} + local lua_ingredients = {} + for i, lua_product in pairs(recipe_prototype:getProducts(recipe.factory)) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local count = product:getAmount(recipe) + lua_products[product_key] = { + name = lua_product.name, + type = lua_product.type, + count = count, + temperature = lua_product.temperature, + minimum_temperature = lua_product.minimum_temperature, + maximum_temperature = lua_product.maximum_temperature + } + end + for i, lua_ingredient in pairs(recipe_prototype:getIngredients(recipe.factory)) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local count = ingredient:getAmount() + ---si constant compte comme un produit (recipe rocket) + if lua_ingredient.constant then + count = ingredient:getAmount(recipe) + end + if lua_ingredients[ingredient_key] == nil then + lua_ingredients[ingredient_key] = { + name = lua_ingredient.name, + type = lua_ingredient.type, + count = count, + temperature = lua_ingredient.temperature, + minimum_temperature = lua_ingredient.minimum_temperature, + maximum_temperature = lua_ingredient.maximum_temperature + } + else + lua_ingredients[ingredient_key].count = lua_ingredients[ingredient_key].count + count + end + end + + if not (block.by_product == false) then + ---prepare header products + for name, lua_product in pairs(lua_products) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local index = 1 + if col_index[product_key] ~= nil then + index = col_index[product_key] + end + col_index[product_key] = index + + local col_name = product_key .. index + local col_header = { + index = index, + key = product_key, + name = lua_product.name, + type = lua_product.type, + is_ingredient = false, + tooltip = col_name .. "\nProduit", + temperature = lua_product.temperature, + minimum_temperature = lua_product.minimum_temperature, + maximum_temperature = lua_product.maximum_temperature + } + col_headers[col_name] = col_header + row[col_name] = lua_product.count * factor + row_valid = true + if row["Cn"] ~= 0 and row["Cn"].name == name then + row["Cn"].name = col_name + end + end + ---prepare header ingredients + for name, lua_ingredient in pairs(lua_ingredients) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local index = 1 + ---cas normal de l'ingredient n'existant pas du cote produit + if col_index[ingredient_key] ~= nil and lua_products[ingredient_key] == nil then + index = col_index[ingredient_key] + end + ---cas de l'ingredient existant du cote produit + if col_index[ingredient_key] ~= nil and lua_products[ingredient_key] ~= nil then + ---cas de la valeur equivalente, on creer un nouveau element + if lua_products[ingredient_key].count == lua_ingredients[ingredient_key].count or recipe.type == "resource" or recipe.type == "energy" then + index = col_index[ingredient_key] + 1 + else + index = col_index[ingredient_key] + end + end + col_index[ingredient_key] = index + + local col_name = ingredient_key .. index + local col_header = { + index = index, + key = ingredient_key, + name = lua_ingredient.name, + type = lua_ingredient + .type, + is_ingredient = true, + tooltip = col_name .. "\nIngredient", + temperature = lua_ingredient.temperature, + minimum_temperature = lua_ingredient.minimum_temperature, + maximum_temperature = lua_ingredient.maximum_temperature + } + col_headers[col_name] = col_header + row[col_name] = (row[col_name] or 0) - lua_ingredients[ingredient_key].count * factor + row_valid = true + end + else + ---prepare header ingredients + for name, lua_ingredient in pairs(lua_ingredients) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local index = 1 + ---cas normal de l'ingredient n'existant pas du cote produit + if col_index[ingredient_key] ~= nil then + index = col_index[ingredient_key] + end + col_index[ingredient_key] = index + + local col_name = ingredient_key .. index + local col_header = { + index = index, + key = ingredient_key, + name = lua_ingredient.name, + type = lua_ingredient.type, + is_ingredient = true, + tooltip = col_name .. "\nIngredient", + temperature = lua_ingredient.temperature, + minimum_temperature = lua_ingredient.minimum_temperature, + maximum_temperature = lua_ingredient.maximum_temperature + } + col_headers[col_name] = col_header + row[col_name] = -lua_ingredients[name].count * factor + row_valid = true + if row["Cn"] ~= 0 and row["Cn"].name == name then + row["Cn"].name = col_name + end + end + ---prepare header products + for name, lua_product in pairs(lua_products) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local index = 1 + if col_index[product_key] ~= nil then + index = col_index[product_key] + end + ---cas du produit existant du cote ingredient + if col_index[product_key] ~= nil and lua_ingredients[product_key] ~= nil then + ---cas de la valeur equivalente, on creer un nouveau element + if lua_products[product_key].count == lua_ingredients[product_key].count or recipe.type == "resource" or recipe.type == "energy" then + index = col_index[product_key] + 1 + else + index = col_index[product_key] + end + end + col_index[product_key] = index + + local col_name = product_key .. index + local col_header = { + index = index, + key = product_key, + name = lua_product.name, + type = lua_product.type, + is_ingredient = false, + tooltip = col_name .. "\nProduit", + temperature = lua_product.temperature, + minimum_temperature = lua_product.minimum_temperature, + maximum_temperature = lua_product.maximum_temperature + } + col_headers[col_name] = col_header + row[col_name] = (row[col_name] or 0) + lua_product.count * factor + row_valid = true + end + end + if row_valid then + table.insert(rows, row) + end + end + + ---end loop recipes + + ---on bluid A correctement + local mA = {} + ---bluid header + local rowH = {} + local col_cn = 3 + for column, header in pairs(col_headers) do + table.insert(rowH, header) + end + table.insert(mA, rowH) + ---bluid value + for _, row in pairs(rows) do + local colx = 1 + local rowA = {} + for column, _ in pairs(col_headers) do + if column == "Cn" then + col_cn = colx + end + if row[column] ~= nil then + table.insert(rowA, row[column]) + else + table.insert(rowA, 0) + end + if type(row["Cn"]) == "table" and row["Cn"].name == column then + if row["Cn"].type == "master" then + rowA[col_cn] = colx + else + rowA[col_cn] = -colx + end + end + colx = colx + 1 + end + if type(rowA[col_cn]) == "table" then + rowA[col_cn] = 0 + end + table.insert(mA, rowA) + end + + local row_input = {} + local row_z = {} + local input_ready = {} + local block_elements = block.products + if block.by_product == false then + block_elements = block.ingredients + end + for column, col_header in pairs(col_headers) do + if col_header.name == "B" then + table.insert(row_input, { name = "Input", type = "none" }) + table.insert(row_z, { name = "Z", type = "none" }) + else + if block_elements ~= nil and block_elements[col_header.key] ~= nil and not (input_ready[col_header.key]) and col_header.index == 1 then + table.insert(row_input, block_elements[col_header.key].input or 0) + input_ready[col_header.key] = true + else + table.insert(row_input, 0) + end + table.insert(row_z, 0) + end + end + + for icol, col_header in pairs(mA[1]) do + col_header.icol = icol + end + + table.insert(mA, 2, row_input) + mA = Solver.linkTemperatureFluid(mA, block.by_product) + table.insert(mA, row_z) + return mA + end +end + +------------------------------------------------------------------------------- +---Link Temperature Fluid +---@param mA table +---@param by_product boolean +---@return table +function Solver.linkTemperatureFluid(mA, by_product) + ---Create blank row + local template_row = {} + table.insert(template_row, { name = "helmod-temperature-convert", tooltip = "", type = "recipe" }) --B + table.insert(template_row, 0) -- M + table.insert(template_row, 0) -- Cn + table.insert(template_row, 0) -- F + table.insert(template_row, 1) -- S + table.insert(template_row, 0) -- R + table.insert(template_row, 1) -- P + table.insert(template_row, 1) -- E + table.insert(template_row, 0) -- C + for icol, col_header in pairs(mA[1]) do + if col_header.key then + table.insert(template_row, 0) + end + end + + local mA2 = {} + local block_ingredient_fluids = {} + local block_product_fluids = {} + + for irow, row in pairs(mA) do + if irow > 2 then + local ingredient_fluids = {} + local product_fluids = {} + + for icol, cell in pairs(row) do + local col_header = mA[1][icol] + if (col_header.key ~= nil) and (col_header.type == "fluid") then + if cell > 0 then + block_product_fluids[col_header.name] = block_product_fluids[col_header.name] or {} + block_product_fluids[col_header.name][col_header.key] = col_header + product_fluids[col_header.key] = col_header + elseif cell < 0 then + ingredient_fluids[col_header.key] = col_header + end + end + end + + ---Convert any Z into product + for product_key, product in pairs(product_fluids) do + local linked_fluids = block_ingredient_fluids[product.name] or {} + for ingredient_key, ingredient in pairs(linked_fluids) do + if Solver.checkLinkedTemperatureFluid(product, ingredient, by_product) then + local new_row = table.clone(template_row) + new_row[product.icol] = -1 + new_row[ingredient.icol] = 1 + table.insert(mA2, new_row) + end + end + end + + table.insert(mA2, table.clone(row)) + + ---Convert any overflow product back into Z + for product_key, product in pairs(product_fluids) do + local linked_fluids = block_ingredient_fluids[product.name] or {} + for ingredient_key, ingredient in pairs(linked_fluids) do + if Solver.checkLinkedTemperatureFluid(product, ingredient, by_product) then + local new_row = table.clone(template_row) + new_row[product.icol] = 1 + new_row[ingredient.icol] = -1 + table.insert(mA2, new_row) + end + end + end + + ---If an ingredient has already been made in this block + ---Convert any Z into ingredient + ---Convert any unmet ingredient back into Z + for ingredient_key, ingredient in pairs(ingredient_fluids) do + block_ingredient_fluids[ingredient.name] = block_ingredient_fluids[ingredient.name] or {} + block_ingredient_fluids[ingredient.name][ingredient.key] = ingredient + + local linked_fluids = block_product_fluids[ingredient.name] or {} + for product_key, product in pairs(linked_fluids) do + if Solver.checkLinkedTemperatureFluid(product, ingredient, by_product) then + local new_row = table.clone(template_row) + new_row[product.icol] = -1 + new_row[ingredient.icol] = 1 + table.insert(mA2, new_row) + local new_row = table.clone(template_row) + new_row[product.icol] = 1 + new_row[ingredient.icol] = -1 + table.insert(mA2, new_row) + end + end + end + else + table.insert(mA2, table.clone(row)) + end + end + + return mA2 +end + +------------------------------------------------------------------------------- +---Check Linked Temperature Fluid +---@param item1 table +---@param item2 table +---@param by_product boolean +---@return boolean +function Solver.checkLinkedTemperatureFluid(item1, item2, by_product) + local result = false + + local product, ingredient + if by_product ~= false then + product = item1 + ingredient = item2 + else + product = item2 + ingredient = item1 + end + + if product.key ~= ingredient.key then + local T = product.temperature + local T2 = ingredient.temperature + local T2min = ingredient.minimum_temperature + local T2max = ingredient.maximum_temperature + if T ~= nil or T2 ~= nil or T2min ~= nil or T2max ~= nil then + ---traitement seulement si une temperature + if T2min == nil and T2max == nil then + ---Temperature sans intervale + if T == nil or T2 == nil or T2 == T then + result = true + end + else + ---Temperature avec intervale + ---securise les valeurs + T = T or 25 + T2min = T2min or -defines.constant.max_float + T2max = T2max or defines.constant.max_float + if T >= T2min and T <= T2max then + result = true + end + end + end + end + + return result +end diff --git a/helmod/math/SolverAlgebra.lua b/helmod/math/SolverAlgebra.lua new file mode 100644 index 00000000..d3752f7c --- /dev/null +++ b/helmod/math/SolverAlgebra.lua @@ -0,0 +1,179 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class SolverAlgebra +SolverAlgebra = newclass(Solver,function(base, object) + Solver.init(base, object) +end) + +------------------------------------------------------------------------------- +---Retourne la colonne +---@param M table +---@param xrow number +---@param invert boolean +---@return table +function SolverAlgebra:getCol(M, xrow, invert) + local row = M[xrow] + local zrow = M[#M] + local xcol = 0 + local max = 0 + local col_master = 0 + local col_exclude = 0 + if row[self.col_Cn] > 0 then + col_master = row[self.col_Cn] + end + if row[self.col_Cn] < 0 then + col_exclude = -row[self.col_Cn] + end + ---on cherche la plus grande demande + for icol,cell_value in pairs(row) do + if icol > self.col_start and ((invert ~= true and cell_value > 0) or (invert == true and cell_value < 0)) then + local zvalue = M[#M][icol] + local Z = zvalue-M[self.row_input][icol] ---valeur demandee (Z-input) + local C = -Z/cell_value + -- if zvalue = 0 the choose is already use + if (C > max and zvalue ~= 0 and col_master == 0 and col_exclude == 0) + or (col_master ~= 0 and col_master == icol) + or (C > max and col_exclude ~= 0 and col_exclude ~= icol) then + max = C + xcol = icol + end + end + end + ---cas des voider + if xcol == 0 then + for icol,cell_value in pairs(row) do + if icol > self.col_start and ((invert ~= true and cell_value > 0) or (invert == true and cell_value < 0)) then + local Z = M[#M][icol]-M[self.row_input][icol] ---valeur demandee (input - Z) + local C = -Z/cell_value + if C > max then + max = C + xcol = icol + end + end + end + end + return xcol +end + +------------------------------------------------------------------------------- +---Calcul de la ligne +---@param M table +---@param xrow number +---@param xcol number +---@return table +function SolverAlgebra:lineCompute(M, xrow, xcol) + if M == nil or xrow == 0 or xcol == 0 then return M end + local row = M[xrow] + local P = M[xrow][self.col_P] + local E = M[xrow][self.col_E] ---energy + local Z = M[#M][xcol] ---valeur demandee Z + local V = M[xrow][xcol] ---valeur produite + local C = -Z/V ---coefficient + if Z < 0 then + M[xrow][self.col_C] = C + M[xrow][self.col_R] = P * C + for icol, cell_value in pairs(row) do + if icol > self.col_start then + local X = M[xrow][icol] + M[#M][icol] = M[#M][icol] + X * P * C + end + end + end + return M +end + +------------------------------------------------------------------------------- +---Calcul de la ligne par factory +---@param M table +---@param xrow number +---@param time number +---@return table +function SolverAlgebra:lineComputeByFactory(M, xrow, time) + if M == nil or xrow == 0 then return M end + local row = M[xrow] + local F = M[xrow][self.col_F] + local S = M[xrow][self.col_S] + local P = M[xrow][self.col_P] + local E = M[xrow][self.col_E] ---energy + local C = 1 ---coefficient + local R = time*F*S/E ---nombre de recette/seconde + M[xrow][self.col_C] = C + M[xrow][self.col_R] = R + for icol,cell_value in pairs(row) do + if icol > self.col_start then + local X = M[xrow][icol] + ---calcul Z + M[#M][icol] = M[#M][icol] + X * R + end + end + return M +end + +------------------------------------------------------------------------------- +---Check factory column +---@param Mx table +---@return number +function SolverAlgebra:checkFactoryColumn(Mx) + for irow, row in pairs(Mx) do + if row[self.col_F] > 0 then return row[self.col_F] end + end +end + +------------------------------------------------------------------------------- +---Resoud la matrice +---@param Mbase table +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return table, table +function SolverAlgebra:solveMatrix(Mbase, debug, by_factory, time) + if Mbase ~= nil then + local num_loop = 0 + local icol = 0 + local runtime = {} + self:addRuntime(debug, runtime, "Initial", Mbase) + local Mstep = self:prepare(Mbase) + self:addRuntime(debug, runtime, "Prepare", Mstep) + if by_factory == true then + local start_row = 0 + for irow, row in pairs(Mstep) do + if irow > self.row_input and irow < #Mstep then + if row[self.col_F] > 0 then + if start_row == 0 then start_row = irow end + self:addRuntime(debug, runtime, "Step "..num_loop, Mstep, {x=self.col_F,y=irow}) + Mstep = self:lineComputeByFactory(Mstep, irow, time) + num_loop = num_loop + 1 + if start_row > self.row_input + 1 then + for xrow = start_row, self.row_input + 1, -1 do + if Mstep[xrow][self.col_R] == 0 then + icol = self:getCol(Mstep, xrow, true) + self:addRuntime(debug, runtime, "Step "..num_loop, Mstep, {x=icol,y=xrow}) + Mstep = self:lineCompute(Mstep, xrow, icol) + num_loop = num_loop + 1 + end + end + end + elseif start_row ~= 0 then + icol = self:getCol(Mstep, irow, false) + self:addRuntime(debug, runtime, "Step "..num_loop, Mstep, {x=icol,y=irow}) + Mstep = self:lineCompute(Mstep, irow, icol) + num_loop = num_loop + 1 + end + end + end + else + for irow, row in pairs(Mstep) do + if irow > self.row_input and irow < #Mstep then + icol = self:getCol(Mstep, irow, false) + self:addRuntime(debug, runtime, "Step "..num_loop, Mstep, {x=icol,y=irow}) + Mstep = self:lineCompute(Mstep, irow, icol) + num_loop = num_loop + 1 + end + end + end + local Mr = self:finalize(Mstep) + Mr = self:appendState(Mr) + self:addRuntime(debug, runtime, "final", Mr) + return Mr, runtime + end +end \ No newline at end of file diff --git a/helmod/math/SolverMatrix.lua b/helmod/math/SolverMatrix.lua new file mode 100644 index 00000000..8ed253a8 --- /dev/null +++ b/helmod/math/SolverMatrix.lua @@ -0,0 +1,704 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class SolverMatrix +SolverMatrix = newclass(function(base) +end) + +------------------------------------------------------------------------------- +---Clone la matrice +---@param matrix Matrix +---@return Matrix +function SolverMatrix:clone(matrix) + local matrix_clone = table.deepcopy(matrix) + return matrix_clone +end + +------------------------------------------------------------------------------- +---Prepare la matrice +---@param matrix Matrix +---@return Matrix +function SolverMatrix:prepare(matrix) + local matrix_clone = self:clone(matrix) + self:prepare_z_and_objectives(matrix_clone, false) + return matrix_clone +end + +------------------------------------------------------------------------------- +---Prepare Z et objectives +---@param matrix Matrix +---@param reverse boolean reverse objective sign +function SolverMatrix:prepare_z_and_objectives(matrix, reverse) + local row = {} + local objective_values = {} + ---ajoute la ligne Z avec Z=-input + for _, column in pairs(matrix.columns) do + local objective = matrix.objectives[column.key] + local objective_value = 0 + if objective ~= nil then + objective_value = objective.value + end + if reverse then + objective_value = -objective_value + end + local value = 0 - objective_value + table.insert(row, value) + table.insert(objective_values, objective_value) + end + matrix.objective_values = objective_values + table.insert(matrix.rows, row) +end +------------------------------------------------------------------------------- +---Finalise la matrice +---@param matrix Matrix +---@return Matrix +function SolverMatrix:finalize(matrix) + ---finalize la ligne Z reinject le input Z=Z+input + local zrow = matrix.rows[#matrix.rows] + for icol, column in pairs(matrix.columns) do + local objective = matrix.objective_values[icol] or 0 + zrow[icol] = zrow[icol] + objective + end + return matrix +end + +------------------------------------------------------------------------------- +---Add runtime +---@param debug boolean +---@param runtime table +---@param name string +---@param matrix Matrix +---@param pivot? table +function SolverMatrix:add_runtime(debug, runtime, name, matrix, pivot) + if debug == true then + local clone = table.deepcopy(matrix) + table.insert(runtime, { name = name, matrix = clone, pivot = pivot }) + end +end + +------------------------------------------------------------------------------- +---Ajoute la ligne State +---state = 0 => produit +---state = 1 => produit pilotant +---state = 2 => produit restant +---state = 3 => produit surplus +---@param matrix Matrix +---@return Matrix +function SolverMatrix:apply_state(matrix) + local states = {} + for irow, row in pairs(matrix.rows) do + if irow < #matrix.rows then + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if states[icol] == nil then + table.insert(states, 0) + end + if cell_value < 0 then + states[icol] = 2 + end + if cell_value > 0 and states[icol] ~= 2 then + states[icol] = 1 + end + end + end + end + local zrow = matrix.rows[#matrix.rows] + for icol, cell in pairs(zrow) do + if cell > 0 and states[icol] == 2 then + states[icol] = 3 + end + end + matrix.states = states + return matrix +end + +------------------------------------------------------------------------------- +---Abstract Resoud la matrice +---@param matrix_base Matrix +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return Matrix, table +function SolverMatrix:solve_matrix(matrix_base, debug, by_factory, time) +end +------------------------------------------------------------------------------- +---Return a matrix of block +---@param block table +---@param parameters ParametersData +---@param debug boolean +---@return table +function SolverMatrix:solve(block, parameters, debug) + local mC, runtimes + + local ok, err = pcall(function() + local mA = SolverMatrix.get_block_matrix(block, parameters) + if mA ~= nil then + mC, runtimes = self:solve_matrix(mA, debug, block.by_factory, block.time) + end + end) + if not (ok) then + if block.solver == true and block.by_factory ~= true then + Player.print("Matrix solver can not find solution!") + else + Player.print("Algebraic solver can not find solution!") + end + if debug then + Player.print(err) + end + end + if debug then + block.runtimes = runtimes + else + block.runtimes = nil + end + + if mC ~= nil then + ---remove temperature convert lines + ---necessary to retieve the right value + for i = #mC.headers, 1, -1 do + if mC.headers[i].name == "helmod-temperature-convert" then + table.remove(mC.rows, i) + table.remove(mC.headers, i) + table.remove(mC.parameters, i) + end + end + + ---ratio pour le calcul du nombre de block + local ratio = 1 + ---calcul ordonnee sur les recipes du block + local row_index = 1 + local sorter = function(t, a, b) return t[b].index > t[a].index end + if block.by_product == false then + sorter = function(t, a, b) return t[b].index < t[a].index end + end + + local recipes = block.recipes + for _, recipe in spairs(recipes, sorter) do + local parameters = mC.parameters[row_index] + if parameters.recipe_count > 0 then + recipe.count = parameters.recipe_count + recipe.production = parameters.recipe_production + else + recipe.count = 0 + end + row_index = row_index + 1 + ---calcul dependant du recipe count + if recipe.type == "energy" then + ModelCompute.computeEnergyFactory(recipe) + else + ModelCompute.computeFactory(recipe) + end + + block.power = block.power + recipe.energy_total + block.pollution_total = block.pollution_total + recipe.pollution_total + + if type(recipe.factory.limit) == "number" and recipe.factory.limit > 0 then + local currentRatio = recipe.factory.limit / recipe.factory.count + if currentRatio < ratio then + ratio = currentRatio + ---block number + block.count = recipe.factory.count / recipe.factory.limit + ---subblock energy + if block.count ~= nil and block.count > 0 then + end + end + end + end + + if block.count <= 1 then + block.count = 1 + block.limit_energy = nil + block.limit_pollution = nil + block.limit_building = nil + for _, recipe in spairs(recipes, function(t, a, b) return t[b].index > t[a].index end) do + recipe.factory.limit_count = nil + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + beacon.limit_count = nil + end + end + recipe.limit_energy = nil + recipe.limit_pollution = nil + end + else + block.limit_energy = block.power / block.count + block.limit_pollution = block.pollution_total / block.count + for _, recipe in spairs(recipes, function(t, a, b) return t[b].index > t[a].index end) do + recipe.factory.limit_count = recipe.factory.count / block.count + if recipe.beacons ~= nil then + for _, beacon in pairs(recipe.beacons) do + beacon.limit_count = beacon.count / block.count + end + end + recipe.limit_energy = recipe.energy_total / block.count + recipe.limit_pollution = recipe.pollution_total / block.count + end + end + ---state = 0 => produit + ---state = 1 => produit pilotant + ---state = 2 => produit restant + ---state = 3 => produit surplus + + ---finalisation du bloc + for icol, state in pairs(mC.states) do + if icol > 0 then + local rows = mC.rows + local zrow = rows[#mC.rows] + local Z = math.abs(zrow[icol]) + local product_header = mC.columns[icol] + local product_key = product_header.key + local product = Product(product_header):clone() + product.count = Z + product.state = state + if block.by_product == false then + if state == 1 or state == 3 then + ---element produit + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].count = block.ingredients[product_key].count + + product.count + block.ingredients[product_key].state = state + end + if block.products[product_key] ~= nil then + block.products[product_key].state = 0 + end + else + ---element ingredient + if block.products[product_key] ~= nil then + block.products[product_key].count = block.products[product_key].count + product.count + block.products[product_key].state = state + end + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].state = state + end + end + else + if state == 1 or state == 3 then + ---element produit + if block.products[product_key] ~= nil then + block.products[product_key].count = block.products[product_key].count + product.count + block.products[product_key].state = state + end + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].state = 0 + end + else + ---element ingredient + if block.ingredients[product_key] ~= nil then + block.ingredients[product_key].count = block.ingredients[product_key].count + + product.count + block.ingredients[product_key].state = state + end + if block.products[product_key] ~= nil then + block.products[product_key].state = state + end + end + end + end + end + end + + return block +end + +------------------------------------------------------------------------------- +---Return a matrix of block +---@param block table +---@param parameters ParametersData +---@return table +function SolverMatrix.get_block_matrix(block, parameters) + local recipes = block.recipes + if recipes ~= nil then + local matrix = Matrix() + local col_index = {} + ---begin loop recipes + local factor = 1 + local sorter = function(t, a, b) return t[b].index > t[a].index end + if block.by_product == false then + factor = -factor + sorter = function(t, a, b) return t[b].index < t[a].index end + end + + for _, recipe in spairs(recipes, sorter) do + recipe.base_time = block.time + ModelCompute.computeModuleEffects(recipe, parameters) + if recipe.type == "energy" then + ModelCompute.computeEnergyFactory(recipe) + else + ModelCompute.computeFactory(recipe) + end + + + local row_valid = false + local recipe_prototype = RecipePrototype(recipe) + local lua_recipe = recipe_prototype:native() + + ---la recette n'existe plus + if recipe_prototype:native() == nil then return end + + ---prepare le taux de production + local production = 1 + if not (block.solver == true) and recipe.production ~= nil then production = recipe.production end + + local rowParameters = MatrixRowParameters() + local row = MatrixRow(recipe.type, recipe.name, recipe.name .. "\nRecette") + + rowParameters.base = row.header + if recipe.contraint ~= nil then + rowParameters.contraint = { type = recipe.contraint.type, name = recipe.contraint.name } + end + rowParameters.factory_count = recipe.factory.input or 0 + rowParameters.factory_speed = recipe.factory.speed or 0 + rowParameters.recipe_count = 0 + rowParameters.recipe_production = production + rowParameters.recipe_energy = recipe_prototype:getEnergy(recipe.factory) + rowParameters.coefficient = 0 + + ---preparation + local lua_products = {} + local lua_ingredients = {} + for i, lua_product in pairs(recipe_prototype:getProducts(recipe.factory)) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local count = product:getAmount(recipe) + lua_products[product_key] = { name = lua_product.name, type = lua_product.type, count = count, + temperature = lua_product.temperature, minimum_temperature = lua_product.minimum_temperature, + maximum_temperature = lua_product.maximum_temperature } + end + for i, lua_ingredient in pairs(recipe_prototype:getIngredients(recipe.factory)) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local count = ingredient:getAmount() + ---si constant compte comme un produit (recipe rocket) + if lua_ingredient.constant then + count = ingredient:getAmount(recipe) + end + if lua_ingredients[ingredient_key] == nil then + lua_ingredients[ingredient_key] = { name = lua_ingredient.name, type = lua_ingredient.type, + count = count, temperature = lua_ingredient.temperature, + minimum_temperature = lua_ingredient.minimum_temperature, + maximum_temperature = lua_ingredient.maximum_temperature } + else + lua_ingredients[ingredient_key].count = lua_ingredients[ingredient_key].count + count + end + end + + if not (block.by_product == false) then + ---prepare header products + for name, lua_product in pairs(lua_products) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local index = 1 + if col_index[product_key] ~= nil then + index = col_index[product_key] + end + col_index[product_key] = index + + local col_name = product_key .. index + + local col_header = MatrixHeader() + col_header.sysname = col_name + col_header.tooltip = col_name .. "\nProduit" + col_header.index = index + col_header.key = product_key + col_header.is_ingredient = false + col_header.product = lua_product + + local cell_value = lua_product.count * factor + row:add_value(col_header, cell_value) + + if rowParameters.contraint ~= nil and rowParameters.contraint.name == name then + rowParameters.contraint.name = col_name + end + + row_valid = true + end + ---prepare header ingredients + for name, lua_ingredient in pairs(lua_ingredients) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local index = 1 + ---cas normal de l'ingredient n'existant pas du cote produit + if col_index[ingredient_key] ~= nil and lua_products[ingredient_key] == nil then + index = col_index[ingredient_key] + end + ---cas de l'ingredient existant du cote produit + if col_index[ingredient_key] ~= nil and lua_products[ingredient_key] ~= nil then + ---cas de la valeur equivalente, on creer un nouveau element + if lua_products[ingredient_key].count == lua_ingredients[ingredient_key].count or recipe.type == "resource" or recipe.type == "energy" then + index = col_index[ingredient_key] + 1 + else + index = col_index[ingredient_key] + end + end + col_index[ingredient_key] = index + + local col_name = ingredient_key .. index + + local col_header = MatrixHeader() + col_header.sysname = col_name + col_header.tooltip = col_name .. "\nIngredient" + col_header.index = index + col_header.key = ingredient_key + col_header.is_ingredient = true + col_header.product = lua_ingredient + + local cell_value = row:get_value(col_header) or 0 + cell_value = cell_value - lua_ingredients[ingredient_key].count * factor + row:add_value(col_header, cell_value) + + row_valid = true + end + else + ---prepare header ingredients + for name, lua_ingredient in pairs(lua_ingredients) do + local ingredient = Product(lua_ingredient) + local ingredient_key = ingredient:getTableKey() + local index = 1 + ---cas normal de l'ingredient n'existant pas du cote produit + if col_index[ingredient_key] ~= nil then + index = col_index[ingredient_key] + end + col_index[ingredient_key] = index + + local col_name = ingredient_key .. index + + local col_header = MatrixHeader() + col_header.sysname = col_name + col_header.tooltip = col_name .. "\nIngredient" + col_header.index = index + col_header.key = ingredient_key + col_header.is_ingredient = true + col_header.product = lua_ingredient + + local cell_value = -lua_ingredient.count * factor + row:add_value(col_header, cell_value) + + if rowParameters.contraint ~= nil and rowParameters.contraint.name == name then + rowParameters.contraint.name = col_name + end + row_valid = true + end + ---prepare header products + for name, lua_product in pairs(lua_products) do + local product = Product(lua_product) + local product_key = product:getTableKey() + local index = 1 + if col_index[product_key] ~= nil then + index = col_index[product_key] + end + ---cas du produit existant du cote ingredient + if col_index[product_key] ~= nil and lua_ingredients[product_key] ~= nil then + ---cas de la valeur equivalente, on creer un nouveau element + if lua_products[product_key].count == lua_ingredients[product_key].count or recipe.type == "resource" or recipe.type == "energy" then + index = col_index[product_key] + 1 + else + index = col_index[product_key] + end + end + col_index[product_key] = index + + local col_name = product_key .. index + + local col_header = MatrixHeader() + col_header.sysname = col_name + col_header.tooltip = col_name .. "\nProduit" + col_header.index = index + col_header.key = product_key + col_header.is_ingredient = false + col_header.product = lua_product + + local cell_value = row:get_value(col_header) or 0 + cell_value = cell_value + lua_product.count * factor + row:add_value(col_header, cell_value) + + row_valid = true + end + end + if row_valid then + matrix:add_row(row, rowParameters) + end + end + + ---end loop recipes + + local objectives = {} + local input_ready = {} + local block_elements = block.products + if block.by_product == false then + block_elements = block.ingredients + end + for _, column in pairs(matrix.columns) do + if block_elements ~= nil and block_elements[column.key] ~= nil and not (input_ready[column.key]) and column.index == 1 then + local objective = {} + objective.value = block_elements[column.key].input or 0 + objective.key = column.key + objectives[column.key] = objective + input_ready[column.key] = true + end + end + + matrix = SolverMatrix.linkTemperatureFluid(matrix, block.by_product) + matrix.objectives = objectives + return matrix + end + return nil +end + +------------------------------------------------------------------------------- +---Link Temperature Fluid +---@param matrix table +---@param by_product boolean +---@return table +function SolverMatrix.linkTemperatureFluid(matrix, by_product) + ---Create blank parameters + local template_parameters = MatrixRowParameters() + template_parameters.factory_count = 0 + template_parameters.factory_speed = 1 + template_parameters.recipe_count = 0 + template_parameters.recipe_production = 1 + template_parameters.recipe_energy = 1 + template_parameters.coefficient = 0 + + ---Create blank row + local template_row = {} + for _, column in pairs(matrix.columns) do + table.insert(template_row, 0) + end + + local mA2 = Matrix() + local block_ingredient_fluids = {} + local block_product_fluids = {} + + for irow, row in pairs(matrix.rows) do + local rowParameters = matrix.parameters[irow] + local rowHeader = matrix.headers[irow] + local rowMatrix = MatrixRow(rowHeader.type, rowHeader.name, rowHeader.tooltip) + rowMatrix.columns = matrix.columns + rowMatrix.columnIndex = matrix.columnIndex + rowMatrix.values = row + + + local ingredient_fluids = {} + local product_fluids = {} + + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + local product = column.product + if (column.key ~= nil) and (product.type == "fluid") then + if cell_value > 0 then + block_product_fluids[product.name] = block_product_fluids[product.name] or {} + block_product_fluids[product.name][column.key] = column + product_fluids[column.key] = column + elseif cell_value < 0 then + ingredient_fluids[column.key] = column + end + end + end + + ---Convert any Z into product + for _, product_fluid in pairs(product_fluids) do + local product = product_fluid.product + local linked_fluids = block_ingredient_fluids[product.name] or {} + for _, linked_fluid in pairs(linked_fluids) do + if SolverMatrix.checkLinkedTemperatureFluid(product_fluid, linked_fluid, by_product) then + local parameters = MatrixRowParameters() + local new_row = MatrixRow("recipe", "helmod-temperature-convert", "") + new_row:add_value(product_fluid, -1) + new_row:add_value(linked_fluid, 1) + mA2:add_row(new_row, parameters) + end + end + end + + -- Insert the row + mA2:add_row(rowMatrix, rowParameters) + + ---Convert any overflow product back into Z + for _, product_fluid in pairs(product_fluids) do + local product = product_fluid.product + local linked_fluids = block_ingredient_fluids[product.name] or {} + for _, linked_fluid in pairs(linked_fluids) do + if SolverMatrix.checkLinkedTemperatureFluid(product_fluid, linked_fluid, by_product) then + local parameters = MatrixRowParameters() + local new_row = MatrixRow("recipe", "helmod-temperature-convert", "") + new_row:add_value(product_fluid, 1) + new_row:add_value(linked_fluid, -1) + mA2:add_row(new_row, parameters) + end + end + end + + ---If an ingredient has already been made in this block + ---Convert any Z into ingredient + ---Convert any unmet ingredient back into Z + for _, ingredient_fluid in pairs(ingredient_fluids) do + local product = ingredient_fluid.product + block_ingredient_fluids[product.name] = block_ingredient_fluids[product.name] or {} + block_ingredient_fluids[product.name][ingredient_fluid.key] = ingredient_fluid + + local linked_fluids = block_product_fluids[product.name] or {} + for _, linked_fluid in pairs(linked_fluids) do + if SolverMatrix.checkLinkedTemperatureFluid(linked_fluid, ingredient_fluid, by_product) then + local parameters = MatrixRowParameters() + local new_row = MatrixRow("recipe", "helmod-temperature-convert", "") + new_row:add_value(linked_fluid, -1) + new_row:add_value(ingredient_fluid, 1) + mA2:add_row(new_row, parameters) + + local parameters = MatrixRowParameters() + local new_row = MatrixRow("recipe", "helmod-temperature-convert", "") + new_row:add_value(linked_fluid, 1) + new_row:add_value(ingredient_fluid, -1) + mA2:add_row(new_row, parameters) + end + end + end + end + + return mA2 +end + +------------------------------------------------------------------------------- +---Check Linked Temperature Fluid +---@param item1 table +---@param item2 table +---@param by_product boolean +---@return boolean +function SolverMatrix.checkLinkedTemperatureFluid(item1, item2, by_product) + local result = false + + local product, ingredient + if by_product ~= false then + product = item1 + ingredient = item2 + else + product = item2 + ingredient = item1 + end + + if product.key ~= ingredient.key then + local T = product.product.temperature + local T2 = ingredient.product.temperature + local T2min = ingredient.product.minimum_temperature + local T2max = ingredient.product.maximum_temperature + if T ~= nil or T2 ~= nil or T2min ~= nil or T2max ~= nil then + ---traitement seulement si une temperature + if T2min == nil and T2max == nil then + ---Temperature sans intervale + if T == nil or T2 == nil or T2 == T then + result = true + end + else + ---Temperature avec intervale + ---securise les valeurs + T = T or 25 + T2min = T2min or -defines.constant.max_float + T2max = T2max or defines.constant.max_float + if T >= T2min and T <= T2max then + result = true + end + end + end + end + + return result +end \ No newline at end of file diff --git a/helmod/math/SolverMatrixAlgebra.lua b/helmod/math/SolverMatrixAlgebra.lua new file mode 100644 index 00000000..d46cb978 --- /dev/null +++ b/helmod/math/SolverMatrixAlgebra.lua @@ -0,0 +1,185 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class SolverMatrixAlgebra : SolverMatrix +SolverMatrixAlgebra = newclass(SolverMatrix, function(base, object) + SolverMatrix.init(base, object) +end) + +------------------------------------------------------------------------------- +---Retourne la colonne +---@param matrix Matrix +---@param xrow integer +---@param invert boolean +---@return integer +function SolverMatrixAlgebra:get_col(matrix, xrow, invert) + local row = matrix.rows[xrow] + local parameters = matrix.parameters[xrow] + local zrow = matrix.rows[#matrix.rows] + local xcol = 0 + local max = 0 + local col_master = -1 + local col_exclude = -1 + -- if row[self.col_Cn] > 0 then + -- col_master = row[self.col_Cn] + -- end + -- if row[self.col_Cn] < 0 then + -- col_exclude = -row[self.col_Cn] + -- end + ---on cherche la plus grande demande + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if ((invert ~= true and cell_value > 0) or (invert == true and cell_value < 0)) then + local objective = matrix.objective_values[icol] or 0 + local zvalue = zrow[icol] + local Z = zvalue - objective ---valeur demandee (Z-input) + local C = -Z / cell_value + -- contraint + local has_contraint = parameters.contraint ~= nil + local is_master = parameters.contraint ~= nil and parameters.contraint.type == "master" and parameters.contraint.name == column.sysname + local is_exclude = parameters.contraint ~= nil and parameters.contraint.type == "exclude" and parameters.contraint.name ~= column.sysname + -- if zvalue = 0 the choose is already use + if (C > max and zvalue ~= 0 and has_contraint == false) + or (is_master) + or (C > max and is_exclude) then + max = C + xcol = icol + end + end + end + ---cas des voider + if xcol == 0 then + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if ((invert ~= true and cell_value > 0) or (invert == true and cell_value < 0)) then + local objective = matrix.objective_values[icol] or 0 + local zvalue = zrow[icol] + local Z = zvalue - objective ---valeur demandee (Z-input) + local C = -Z / cell_value + if C > max then + max = C + xcol = icol + end + end + end + end + return xcol +end + +------------------------------------------------------------------------------- +---Calcul de la ligne +---@param matrix Matrix +---@param xrow integer +---@param xcol integer +---@return Matrix +function SolverMatrixAlgebra:line_compute(matrix, xrow, xcol) + if matrix == nil or xrow == 0 or xcol == 0 then return matrix end + local row = matrix.rows[xrow] + local parameters = matrix.parameters[xrow] + local zrow = matrix.rows[#matrix.rows] + local P = parameters.recipe_production + local E = parameters.recipe_energy ---energy + local Z = zrow[xcol] ---valeur demandee Z + local V = row[xcol] ---valeur produite + local C = -Z / V ---coefficient + if Z < 0 then + parameters.coefficient = C + parameters.recipe_count = P * C + for icol, cell_value in pairs(row) do + local X = row[icol] + zrow[icol] = zrow[icol] + X * P * C + end + end + return matrix +end + +------------------------------------------------------------------------------- +---Calcul de la ligne par factory +---@param matrix Matrix +---@param xrow integer +---@param time number +---@return Matrix +function SolverMatrixAlgebra:line_compute_by_factory(matrix, xrow, time) + if matrix == nil or xrow == 0 then return matrix end + local row = matrix.rows[xrow] + local parameters = matrix.parameters[xrow] + local zrow = matrix.rows[#matrix.rows] + + local F = parameters.factory_count + local S = parameters.factory_speed + local P = parameters.recipe_production + local E = parameters.recipe_energy ---energy + local C = 1 ---coefficient + local R = time * F * S / E ---nombre de recette/seconde + parameters.coefficient = C + parameters.recipe_count = R + for icol, cell_value in pairs(row) do + local X = row[icol] + ---calcul Z + zrow[icol] = zrow[icol] + X * R + end + return matrix +end + +------------------------------------------------------------------------------- +---Resoud la matrice +---@param matrix_base Matrix +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return Matrix, table +function SolverMatrixAlgebra:solve_matrix(matrix_base, debug, by_factory, time) + if matrix_base ~= nil then + local num_loop = 0 + local icol = 0 + local runtime = {} + self:add_runtime(debug, runtime, "Initial", matrix_base) + local Mstep = self:prepare(matrix_base) + self:add_runtime(debug, runtime, "Prepare", Mstep) + if by_factory == true then + -- start_row ligne de dΓ©marrage du calcul + local start_row = 0 + for irow, row in pairs(Mstep.rows) do + if irow < #Mstep.rows then + local parameters = Mstep.parameters[irow] + local factory_count = parameters.factory_count + if factory_count > 0 then + if start_row == 0 then start_row = irow end + self:add_runtime(debug, runtime, "Step " .. num_loop, Mstep, { x = -1, y = irow }) + Mstep = self:line_compute_by_factory(Mstep, irow, time) + num_loop = num_loop + 1 + if start_row > 1 then + for xrow = start_row, 1, -1 do + local parameters = Mstep.parameters[xrow] + local factory_count = parameters.factory_count + if factory_count == 0 then + icol = self:get_col(Mstep, xrow, true) + self:add_runtime(debug, runtime, "Step " .. num_loop, Mstep, { x = icol, y = xrow }) + Mstep = self:line_compute(Mstep, xrow, icol) + num_loop = num_loop + 1 + end + end + end + elseif start_row ~= 0 then + icol = self:get_col(Mstep, irow, false) + self:add_runtime(debug, runtime, "Step " .. num_loop, Mstep, { x = icol, y = irow }) + Mstep = self:line_compute(Mstep, irow, icol) + num_loop = num_loop + 1 + end + end + end + else + for irow, _ in pairs(Mstep.rows) do + if irow < #Mstep.rows then + icol = self:get_col(Mstep, irow, false) + self:add_runtime(debug, runtime, "Step " .. num_loop, Mstep, { x = icol, y = irow }) + Mstep = self:line_compute(Mstep, irow, icol) + num_loop = num_loop + 1 + end + end + end + local matrix_result = self:finalize(Mstep) + matrix_result = self:apply_state(matrix_result) + self:add_runtime(debug, runtime, "final", matrix_result) + return matrix_result, runtime + end +end diff --git a/helmod/math/SolverMatrixSimplex.lua b/helmod/math/SolverMatrixSimplex.lua new file mode 100644 index 00000000..d7e3d6f8 --- /dev/null +++ b/helmod/math/SolverMatrixSimplex.lua @@ -0,0 +1,321 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class SolverMatrixSimplex : SolverMatrix +SolverMatrixSimplex = newclass(SolverMatrix, function(base, object) + SolverMatrix.init(base, object) +end) + +------------------------------------------------------------------------------- +---Calcul pivot de gauss +---@param matrix Matrix +---@param xrow integer +---@param xcol integer +---@return Matrix +function SolverMatrixSimplex:pivot(matrix, xrow, xcol) + local rows = matrix.rows + + local matrix_clone = self:clone(matrix) + matrix_clone.rows = {} + local rows_clone = matrix_clone.rows + local pivot_value = rows[xrow][xcol] + for irow, row in pairs(rows) do + local parameters = matrix_clone.parameters[xrow] + parameters.coefficient = parameters.coefficient / pivot_value + rows_clone[irow] = {} + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if irow == xrow then + --Transformation de la ligne pivot : elle est divisee par l'element pivot + rows_clone[irow][icol] = cell_value / pivot_value + elseif icol == xcol then + --Transformation de la colonne pivot : toutes les cases sauf la case pivot deviennent zero. + rows_clone[irow][icol] = 0 + else + local B = rows[irow][xcol] or 0 + local D = rows[xrow][icol] or 0 + local value = cell_value - (B * D) / pivot_value + if math.abs(value) < 1e-8 then + rows_clone[irow][icol] = 0 + else + rows_clone[irow][icol] = value + end + end + end + end + -- swap base + matrix_clone.headers[xrow] = matrix.columns[xcol] + matrix_clone.columns[xcol] = matrix.headers[xrow] + return matrix_clone +end + +------------------------------------------------------------------------------- +---Retourne le pivot +---@param matrix Matrix +---@return boolean, integer, integer +function SolverMatrixSimplex:get_pivot(matrix) + local rows = matrix.rows + local zrow = matrix.rows[#matrix.rows] + + local max_z_value = 0 + local xcol = nil + local ratio_value = 0 + local max_value = 0 + local xrow = nil + -- boucle sur la derniere ligne nommee Z + for icol, column in pairs(matrix.columns) do + -- exclusion de la colonne coefficient + if icol > 1 then + local z_value = zrow[icol] or 0 + if z_value > max_z_value then + -- la valeur repond au critere, la colonne est eligible + -- on recherche le ligne + ratio_value = nil + for irow, current_row in pairs(rows) do + local parameters = matrix.parameters[irow] + local x_value = rows[irow][icol] + -- on n'utilise pas la derniere ligne + -- seule les cases positives sont prises en compte + if irow < #rows and x_value > 0 then + -- calcul du ratio base / x + local c_value = parameters.coefficient + local bx_ratio = c_value / x_value + -- prend la premier valeur ou le plus grand ratio sinon la plus grande valeur + if ratio_value == nil or bx_ratio > ratio_value or c_value > max_value then + ratio_value = bx_ratio + max_value = c_value + xrow = irow + end + end + end + if ratio_value ~= nil then + -- le pivot est possible + max_z_value = z_value + xcol = icol + end + end + end + end + if max_z_value == 0 then + -- il n'y a plus d'amelioration possible fin du programmme + return false, xcol, xrow + end + return true, xcol, xrow +end + +------------------------------------------------------------------------------- +---Prepare la matrice +---@param matrix Matrix +---@return Matrix +function SolverMatrixSimplex:prepare(matrix) + ---ajoute la ligne Z + local irow = 1 + ---prepare les headers + local matrix_clone = self:clone(matrix) + local rows = matrix_clone.rows + local headers = matrix_clone.headers + local columns = matrix_clone.columns + local parameters = matrix_clone.parameters + + ---ajoute les recettes d'ingredient + ---initialise l'analyse + local ckeck_cols = {} + for icol, column in pairs(columns) do + ckeck_cols[icol] = true + end + for irow, row in pairs(rows) do + if irow <= #rows then + for icol, column in pairs(columns) do + local cell_value = row[icol] or 0 + ---si une colonne est un produit au moins une fois on l'exclus + if cell_value > 0 then + ckeck_cols[icol] = false + end + end + end + end + ---ajout des faux recipe + local index = 1 + for xcol, check in pairs(ckeck_cols) do + if check then + -- Add new header + local new_header = table.deepcopy(columns[xcol]) + table.insert(headers, new_header) + -- Add coefficient value + local rowParameters = MatrixRowParameters() + rowParameters.base = new_header + rowParameters.contraint = nil + rowParameters.factory_count = 0 + rowParameters.factory_speed = 0 + rowParameters.recipe_count = 0 + rowParameters.recipe_production = 1 + rowParameters.recipe_energy = 1 + rowParameters.coefficient = 1e4 * index --important ne pas changer + --rowParameters.coefficient = math.pow(10,index)*10 + table.insert(parameters, rowParameters) + local new_row = {} + for icol, column in pairs(columns) do + if icol == xcol then + table.insert(new_row, 1) + else + table.insert(new_row, 0) + end + end + table.insert(rows, new_row) + index = index + 1 + end + end + self:prepare_z_and_objectives(matrix_clone, true) + + -- ajout colonne coefficient + local new_column = {type="none", name="C"} + table.insert(columns, 1, new_column) + for irow, row in pairs(rows) do + local parameters = matrix_clone.parameters[irow] + local C = 0 + if parameters ~= nil and parameters.coefficient ~= nil then + C = parameters.coefficient or 0 + end + table.insert(row, 1, C) + end + + ---ajoute les row en colonne + local num_row = rawlen(matrix.rows) + local num_col = rawlen(matrix_clone.columns) + for icol = 1, num_row do + -- Add new column + local new_column = table.deepcopy(matrix_clone.headers[icol]) + table.insert(columns, new_column) + for irow, row in pairs(rows) do + ---ajoute les valeurs + if irow == icol then + rows[irow][num_col + icol] = 1 + else + rows[irow][num_col + icol] = 0 + end + end + end + + return matrix_clone +end + +------------------------------------------------------------------------------- +---Calcul de la ligne +---@param matrix Matrix +---@param xrow integer +---@return Matrix +function SolverMatrixSimplex:line_compute(matrix, xrow) + if matrix == nil or xrow == 0 then return matrix end + local row = matrix.rows[xrow] + local parameters = matrix.parameters[xrow] + local zrow = matrix.rows[#matrix.rows] + local R = parameters.recipe_count + local E = parameters.recipe_energy + + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if cell_value ~= 0 then + local Z = zrow[icol] ---valeur demandee Z + local X = cell_value + + local C = -Z / X + if C > 0 and C > parameters.coefficient then + parameters.coefficient = C + parameters.recipe_production = R * E / C + end + end + end + + local P = parameters.recipe_production + local C = parameters.coefficient + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + if cell_value ~= 0 then + local Z = zrow[icol] ---valeur demandee Z + local X = cell_value + ---calcul du Z + zrow[icol] = Z + X * P * C + end + end + return matrix +end + +------------------------------------------------------------------------------- +---Calcul du tableau +---@param matrix Matrix --matrix finale +---@param matrix_result Matrix --matrix intermediaire +---@return Matrix +function SolverMatrixSimplex:table_compute(matrix, matrix_result) + if matrix == nil then return matrix end + local zrow = matrix_result.rows[#matrix_result.rows] + + ---preparation input + self:prepare_z_and_objectives(matrix, false) + + ---preparation du resultat + for irow, _ in pairs(matrix.rows) do + if irow < #matrix.rows then + ---colonne correspondant a la recette + local icol = #matrix_result.columns - #matrix.headers + irow + + local parameters = matrix.parameters[irow] + parameters.recipe_count = -zrow[icol] ---moins la valeur affichee dans Z + parameters.recipe_production = 0 + end + end + + ---initialise les valeurs des produits par second + for irow, row in pairs(matrix.rows) do + if irow < #matrix.rows then + local parameters = matrix.parameters[irow] + local E = parameters.recipe_energy + for icol, column in pairs(matrix.columns) do + local cell_value = row[icol] or 0 + row[icol] = cell_value / E + end + end + end + + ---calcul du resultat + for irow, _ in pairs(matrix.rows) do + if irow < #matrix.rows then + matrix = self:line_compute(matrix, irow) + end + end + return matrix +end + +------------------------------------------------------------------------------- +---Resoud la matrice +---@param Mbase table +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return Matrix, {[integer] : Matrix} +function SolverMatrixSimplex:solve_matrix(Mbase, debug, by_factory, time) + if Mbase ~= nil then + local num_loop = 0 + local runtime = {} + self:add_runtime(debug, runtime, "Initial", Mbase) + local Mstep = self:prepare(Mbase) + self:add_runtime(debug, runtime, "Prepare", Mstep) + local loop, xcol, xrow + loop = true + while loop do + loop, xcol, xrow = self:get_pivot(Mstep) + if loop then + self:add_runtime(debug, runtime, "Step " .. num_loop, Mstep, { x = xcol, y = xrow }) + Mstep = self:pivot(Mstep, xrow, xcol) + else + self:add_runtime(debug, runtime, "Last", Mstep) + end + num_loop = num_loop + 1 + end + ---finalisation + local matrix_result = self:clone(Mbase) + matrix_result = self:table_compute(matrix_result, Mstep) + matrix_result = self:finalize(matrix_result) + matrix_result = self:apply_state(matrix_result) + self:add_runtime(debug, runtime, "final", matrix_result) + return matrix_result, runtime + end +end diff --git a/helmod/math/SolverSimplex.lua b/helmod/math/SolverSimplex.lua new file mode 100644 index 00000000..154781c3 --- /dev/null +++ b/helmod/math/SolverSimplex.lua @@ -0,0 +1,301 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class SolverSimplex +SolverSimplex = newclass(Solver,function(base, object) + Solver.init(base, object) +end) + +------------------------------------------------------------------------------- +---Calcul pivot de gauss +---@param M table +---@param xrow number +---@param xcol number +---@return table +function SolverSimplex:pivot(M, xrow, xcol) + local Mx = {} + local pivot_value = M[xrow][xcol] + for irow,row in pairs(M) do + Mx[irow]={} + if irow > self.row_input then + for icol,cell_value in pairs(row) do + if icol >= self.col_start then + if irow == xrow then + --Transformation de la ligne pivot : elle est divisee par l'element pivot + Mx[irow][icol] = cell_value/pivot_value + elseif icol == xcol then + --Transformation de la colonne pivot : toutes les cases sauf la case pivot deviennent zero. + Mx[irow][icol] = 0 + else + local B = M[irow][xcol] + local D = M[xrow][icol] + local value = cell_value - ( B * D ) / pivot_value + if math.abs(value) < 1e-8 then + Mx[irow][icol] = 0 + else + Mx[irow][icol] = value + end + end + else + Mx[irow][icol] = cell_value + end + end + else + for icol,cell_value in pairs(row) do + Mx[irow][icol] = cell_value + end + end + end + Mx[xrow][1] = M[1][xcol] + Mx[1][xcol] = M[xrow][1] + return Mx +end + +------------------------------------------------------------------------------- +---Retourne le pivot +---@param M table +---@return table +function SolverSimplex:getPivot(M) + local max_z_value = 0 + local xcol = nil + local ratio_value = 0 + local max_value = 0 + local xrow = nil + local last_row = M[#M] + -- boucle sur la derniere ligne nommee Z + for icol,z_value in pairs(last_row) do + -- on exclus les premieres colonnes + if icol > self.col_start then + if z_value > max_z_value then + -- la valeur repond au critere, la colonne est eligible + -- on recherche le ligne + ratio_value = nil + for irow, current_row in pairs(M) do + local x_value = M[irow][icol] + -- on n'utilise pas la derniere ligne + -- seule les cases positives sont prises en compte + if irow > self.row_input and irow < #M and x_value > 0 then + -- calcul du ratio base / x + local c_value = M[irow][self.col_start] + local bx_ratio = c_value/x_value + -- prend la premier valeur ou le plus grand ratio sinon la plus grande valeur + if ratio_value == nil or bx_ratio > ratio_value or c_value > max_value then + ratio_value = bx_ratio + max_value = c_value + xrow = irow + end + end + end + if ratio_value ~= nil then + -- le pivot est possible + max_z_value = z_value + xcol = icol + end + end + end + end + if max_z_value == 0 then + -- il n'y a plus d'amelioration possible fin du programmme + return false, xcol, xrow + end + return true, xcol, xrow +end + +------------------------------------------------------------------------------- +---Prepare la matrice +---@param M table +---@return table +function SolverSimplex:prepare(M) + ---ajoute la ligne Z + local irow = 1 + ---prepare les headers + local Mx = self:clone(M) + + ---ajoute les recettes d'ingredient + ---initialise l'analyse + local ckeck_cols = {} + for icol,_ in pairs(Mx[1]) do + ckeck_cols[icol] = true + end + for irow,row in pairs(Mx) do + if irow > self.row_input and irow < #Mx then + for icol,cell in pairs(row) do + if icol > self.col_start then + ---si une colonne est un produit au moins une fois on l'exclus + if cell > 0 then + ckeck_cols[icol] = false + end + else + ckeck_cols[icol] = false + end + end + end + end + ---ajout des faux recipe + local index = 1 + for xcol,check in pairs(ckeck_cols) do + if check then + local row = {} + for icol,header in pairs(Mx[1]) do + if header.name == "B" then + table.insert(row, Mx[1][xcol]) + else + if icol == self.col_start then + --table.insert(row,math.pow(10,index)*10) ---important ne pas changer + table.insert(row,1e4*index) ---important ne pas changer + elseif icol == xcol then + table.insert(row,1) + else + table.insert(row,0) + end + end + end + table.insert(Mx, #Mx,row) + index = index + 1 + end + end + ---ajoute les row en colonne + local num_row = rawlen(M)-self.row_input-1 + local num_col = rawlen(Mx[1]) + for xrow=1, num_row do + for irow,row in pairs(Mx) do + if irow == 1 then + ---ajoute le header + Mx[irow][num_col+xrow] = Mx[xrow+self.row_input][1]; + else + ---ajoute les valeurs + if irow == xrow + self.row_input then + Mx[irow][num_col+xrow] = 1 + else + Mx[irow][num_col+xrow] = 0 + end + end + end + end + + ---initialise la ligne Z avec Z=input + for icol,cell in pairs(Mx[self.row_input]) do + if icol > self.col_start then + Mx[#Mx][icol] = cell + end + end + + return Mx +end + +------------------------------------------------------------------------------- +---Calcul de la ligne +---@param Mx table +---@param xrow number +---@return table +function SolverSimplex:lineCompute(Mx, xrow) + if Mx == nil or xrow == 0 then return Mx end + local row = Mx[xrow] + local R = row[self.col_R] + local E = row[self.col_E] + + for icol,cell_value in pairs(row) do + if cell_value ~= 0 and icol > self.col_start then + local Z = Mx[#Mx][icol] ---valeur demandee Z + local X = cell_value + + local C = -Z/X + if C > 0 and C > Mx[xrow][self.col_C] then + Mx[xrow][self.col_C] = C + Mx[xrow][self.col_P] = R * E / C + end + end + end + + local P = Mx[xrow][self.col_P] + local C = Mx[xrow][self.col_start] + for icol,cell_value in pairs(row) do + if cell_value ~= 0 and icol > self.col_start then + local Z = Mx[#Mx][icol] ---valeur demandee Z + local X = cell_value + ---calcul du Z + Mx[#Mx][icol] = Z + X * P * C + end + end + return Mx +end + +------------------------------------------------------------------------------- +---Calcul du tableau +---@param Mx table --matrix finale +---@param Mi table --matrix intermediaire +---@return table +function SolverSimplex:tableCompute(Mx, Mi) + if Mx == nil then return Mx end + ---preparation de la colonne R et P + for irow,_ in pairs(Mx) do + if irow > self.row_input and irow < #Mx then + ---colonne correspondant a la recette + local icol = #Mx[1] + irow - self.row_input + Mx[irow][self.col_R] = - Mi[#Mi][icol] ---moins la valeur affichee dans Z + Mx[irow][self.col_P] = 0 + end + end + ---preparation input + ---ajoute la ligne Z avec Z=-input + for icol,cell in pairs(Mx[self.row_input]) do + if icol > self.col_start then + Mx[#Mx][icol] = 0-cell + end + end + + ---initialise les valeurs des produits par second + for irow,row in pairs(Mx) do + if irow > self.row_input and irow < #Mx then + local E = Mx[irow][self.col_E] + for icol,cell in pairs(row) do + if icol > self.col_start then + Mx[irow][icol] = cell / E + end + end + end + end + + ---calcul du resultat + for irow,_ in pairs(Mx) do + if irow > self.row_input and irow < #Mx then + Mx = self:lineCompute(Mx, irow) + end + end + return Mx +end + +------------------------------------------------------------------------------- +---Resoud la matrice +---@param Mbase table +---@param debug boolean +---@param by_factory boolean +---@param time number +---@return table, table +function SolverSimplex:solveMatrix(Mbase, debug, by_factory, time) + if Mbase ~= nil then + local num_loop = 0 + local runtime = {} + self:addRuntime(debug, runtime, "Initial", Mbase) + local Mstep = self:prepare(Mbase) + self:addRuntime(debug, runtime, "Prepare", Mstep) + local loop, xcol, xrow + loop = true + while loop do + loop, xcol, xrow = self:getPivot(Mstep) + if loop then + self:addRuntime(debug, runtime, "Step "..num_loop, Mstep, {x=xcol,y=xrow}) + Mstep = self:pivot(Mstep, xrow, xcol) + else + self:addRuntime(debug, runtime, "Last", Mstep) + end + num_loop = num_loop + 1 + end + ---finalisation + local Mr = self:clone(Mbase) + Mr = self:tableCompute(Mr, Mstep) + Mr = self:finalize(Mr) + Mr = self:appendState(Mr) + self:addRuntime(debug, runtime, "final", Mr) + return Mr, runtime + end +end \ No newline at end of file diff --git a/helmod/math/solver_matrix.png b/helmod/math/solver_matrix.png new file mode 100644 index 00000000..4a33686c Binary files /dev/null and b/helmod/math/solver_matrix.png differ diff --git a/helmod/migrations/helmod_0.12.10.lua b/helmod/migrations/helmod_0.12.10.lua new file mode 100644 index 00000000..617270c4 --- /dev/null +++ b/helmod/migrations/helmod_0.12.10.lua @@ -0,0 +1,102 @@ +local fluid_recipes = Player.getFluidRecipes() +local boiler_recipes = Player.getBoilerRecipes() + +local function FindRecipeNameForBoiler(entity_name) + -- Boilers + local filters = {} + table.insert(filters, {filter="type", type="boiler", mode="and"}) + table.insert(filters, {filter="name", name=entity_name, mode="and"}) + local prototypes = game.get_filtered_entity_prototypes(filters) + + for _, entity in pairs(prototypes) do + ---Check input fluid + local input_fluid + local fluidbox = entity.fluidbox_prototypes[1] + if fluidbox.filter then + input_fluid = fluidbox.filter.name + end + + if input_fluid == nil then + goto continue + end + + ---Check output fluid + local output_fluid + for _, fluidbox in pairs(entity.fluidbox_prototypes) do + if fluidbox.filter and fluidbox.production_type == "output" then + output_fluid = fluidbox.filter.name + end + end + + if output_fluid == nil then + goto continue + end + + local recipe_name = string.format("%s->%s#%s", input_fluid, output_fluid, entity.target_temperature) + if boiler_recipes[recipe_name] then + return recipe_name + end + + ::continue:: + end + + return nil +end + +local function FindRecipeNameForOffshorePump(entity_name) + -- Offshore pumps + local filters = {} + table.insert(filters, {filter="type", type="offshore-pump", mode="and"}) + table.insert(filters, {filter="name", name=entity_name, mode="and"}) + local entities = game.get_filtered_entity_prototypes(filters) + + for key, entity in pairs(entities) do + return entity.fluid.name + end + + return nil +end + +if global.models then + for _, model in pairs(global.models) do + if model.blocks then + for _, block in pairs(model.blocks) do + if block.recipes then + for _, recipe in pairs(block.recipes) do + + ---Find fluid recipes that no longer exist + if (recipe.type == "fluid") and recipe.factory and (not fluid_recipes[recipe.name]) then + + ---Check if fluid recipe should be replaced with a boiler recipe + local recipe_name = FindRecipeNameForBoiler(recipe.factory.name) + if recipe_name then + recipe.type = "boiler" + recipe.name = recipe_name + end + + elseif recipe.type == "energy" then + + local prototype = EntityPrototype(recipe.factory) + + if prototype:getType() == "boiler" then + local recipe_name = FindRecipeNameForBoiler(recipe.factory.name) + if recipe_name then + recipe.type = "boiler" + recipe.name = recipe_name + end + + elseif prototype:getType() == "offshore-pump" then + local recipe_name = FindRecipeNameForOffshorePump(recipe.factory.name) + if recipe_name then + recipe.type = "fluid" + recipe.name = recipe_name + end + end + + end + end + end + end + end + end +end diff --git a/helmod/migrations/helmod_0.12.16.lua b/helmod/migrations/helmod_0.12.16.lua new file mode 100644 index 00000000..c1045419 --- /dev/null +++ b/helmod/migrations/helmod_0.12.16.lua @@ -0,0 +1,31 @@ +if global.models then + for _, model in pairs(global.models) do + if model.blocks then + for _, block in pairs(model.blocks) do + if block.recipes then + for _, recipe in pairs(block.recipes) do + -- Rename time to base_time + recipe.base_time = recipe.time + + local ok , err = pcall(function() + -- Set recipe.time + local recipe_prototype = RecipePrototype(recipe) + recipe.time = recipe_prototype:getEnergy(recipe.factory) + + --if recipe.type ~= "energy" then + --ModelCompute.computeFactory(recipe) + --end + end) + if not(ok) then + log(err) + end + end + end + end + -- Force recalculation of recipe.factory.speed_total and recipe.factory.speed + -- Model and Block totals will be updated + Player.try_load_by_name(model.owner) + ModelCompute.try_update(model) + end + end +end \ No newline at end of file diff --git a/helmod/migrations/helmod_0.12.20.lua b/helmod/migrations/helmod_0.12.20.lua new file mode 100644 index 00000000..efe933e4 --- /dev/null +++ b/helmod/migrations/helmod_0.12.20.lua @@ -0,0 +1,25 @@ +if global.models then + for _, model in pairs(global.models) do + if model.blocks then + for _, block in pairs(model.blocks) do + if block.recipes then + for _, recipe in pairs(block.recipes) do + local ok , err = pcall(function() + if recipe.beacon ~= nil and recipe.beacon.module_priority ~= nil then + recipe.beacons = {} + table.insert(recipe.beacons, recipe.beacon) + end + end) + if not(ok) then + log(err) + end + end + end + end + -- Force recalculation of recipe.factory.speed_total and recipe.factory.speed + -- Model and Block totals will be updated + Player.try_load_by_name(model.owner) + ModelCompute.try_update(model) + end + end + end \ No newline at end of file diff --git a/helmod/model/ElectricPrototype.lua b/helmod/model/ElectricPrototype.lua new file mode 100644 index 00000000..a8880551 --- /dev/null +++ b/helmod/model/ElectricPrototype.lua @@ -0,0 +1,21 @@ +require "model.Prototype" +------------------------------------------------------------------------------- +-- Class Object +-- +-- @module ElectricPrototype +-- +ElectricPrototype = newclass(Prototype) + +function ElectricPrototype:toString() + local data = {} + data.emissions = self.lua_prototype.emissions + data.buffer_capacity = self.lua_prototype.buffer_capacity + data.usage_priority = self.lua_prototype.usage_priority + data.input_flow_limit = self.lua_prototype.input_flow_limit + data.output_flow_limit = self.lua_prototype.output_flow_limit + data.drain = self.lua_prototype.drain + data.render_no_network_icon = self.lua_prototype.render_no_network_icon + data.render_no_power_icon = self.lua_prototype.render_no_power_icon + data.valid = self.lua_prototype.valid + return string.format("%s",game.table_to_json(data)) +end \ No newline at end of file diff --git a/helmod/model/EnergySourcePrototype.lua b/helmod/model/EnergySourcePrototype.lua new file mode 100644 index 00000000..cae46569 --- /dev/null +++ b/helmod/model/EnergySourcePrototype.lua @@ -0,0 +1,470 @@ +require "model.Prototype" +------------------------------------------------------------------------------- +---Class Object +---@class EnergySourcePrototype +EnergySourcePrototype = newclass(Prototype,function(base, lua_prototype, factory) + Prototype.init(base,lua_prototype) + base.factory = factory +end) + +------------------------------------------------------------------------------- +---Return usage priority +---@return string +function EnergySourcePrototype:getUsagePriority() + if self.lua_prototype ~= nil then + return "none" + end + return nil +end + +------------------------------------------------------------------------------- +---Return type +---@return string +function EnergySourcePrototype:getType() + return "none" +end + +------------------------------------------------------------------------------- +---Return emissions +---@return number --default 0 +function EnergySourcePrototype:getEmissions() + if self.lua_prototype ~= nil then + return self.lua_prototype.emissions or 2.7777777e-7 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return drain energy +---@return number --default 0 +function EnergySourcePrototype:getDrain() + return 0 +end + +------------------------------------------------------------------------------- +---Return effectivity +---@return number --default 1 +function EnergySourcePrototype:getEffectivity() + return 1 +end + +------------------------------------------------------------------------------- +---Return fuel count +---@return nil +function EnergySourcePrototype:getFuelCount() + return nil +end + +------------------------------------------------------------------------------- +---Return fuel fluid prototypes +---@return nil +function EnergySourcePrototype:getFuelPrototypes() + return nil +end + +------------------------------------------------------------------------------- +---Return first fuel fluid prototype +---@return nil +function EnergySourcePrototype:getFirstFuelPrototype() + return nil +end + +------------------------------------------------------------------------------- +---Return fuel prototype +---@return nil +function EnergySourcePrototype:getFuelPrototype() + return nil +end + +------------------------------------------------------------------------------- +---Return speed modifier +---@return number +function EnergySourcePrototype:getSpeedModifier() + return 1 +end + +------------------------------------------------------------------------------- +---@class ElectricSourcePrototype +ElectricSourcePrototype = newclass(EnergySourcePrototype,function(base,lua_prototype) + EnergySourcePrototype.init(base,lua_prototype) +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function ElectricSourcePrototype:getType() + return "electric" +end + +------------------------------------------------------------------------------- +---Return usage priority +---@return string +function ElectricSourcePrototype:getUsagePriority() + if self.lua_prototype ~= nil then + return self.lua_prototype.usage_priority + end + return nil +end + +------------------------------------------------------------------------------- +---Return buffer capacity +---@return number --default 0 +function ElectricSourcePrototype:getBufferCapacity() + if self.lua_prototype ~= nil then + return self.lua_prototype.buffer_capacity or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return drain energy +---@return number --default 0 +function ElectricSourcePrototype:getDrain() + if self.lua_prototype ~= nil then + return (self.lua_prototype.drain or 0) * 60 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return input flow limit +---@return number --default 0 +function ElectricSourcePrototype:getInputFlowLimit() + if self.lua_prototype ~= nil then + return (self.lua_prototype.input_flow_limit or 0) * 60 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return output flow limit +---@return number --default 0 +function ElectricSourcePrototype:getOutputFlowLimit() + if self.lua_prototype ~= nil then + return (self.lua_prototype.output_flow_limit or 0) * 60 + end + return 0 +end + +------------------------------------------------------------------------------- +---@class BurnerPrototype +BurnerPrototype = newclass(EnergySourcePrototype,function(base,lua_prototype, factory) + EnergySourcePrototype.init(base, lua_prototype, factory) +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function BurnerPrototype:getType() + return "burner" +end + +------------------------------------------------------------------------------- +---Return fuel categories +---@return table +function BurnerPrototype:getFuelCategories() + if self.lua_prototype ~= nil then + return self.lua_prototype.fuel_categories or {} + end + return {} +end + +------------------------------------------------------------------------------- +---Return fuel item prototypes +---@return table +function BurnerPrototype:getFuelPrototypes() + local filters = {} + for fuel_category,_ in pairs(self:getFuelCategories()) do + table.insert(filters, {filter = "fuel-value", mode = "or", invert = false, comparison = ">", value = 0}) + table.insert(filters, {filter = "fuel-category", mode = "and", invert = false, ["fuel-category"] = fuel_category}) + table.insert(filters, {filter = "flag", mode = "and", invert = true, flag = "hidden"}) + end + + local items = {} + for _, fuel in spairs(Player.getItemPrototypes(filters), function(t,a,b) return t[b].fuel_value > t[a].fuel_value end) do + table.insert(items, ItemPrototype(fuel)) + end + return items +end + +------------------------------------------------------------------------------- +---Return first fuel item prototype +---@return LuaItemPrototype +function BurnerPrototype:getFirstFuelPrototype() + local fuel_items = self:getFuelPrototypes() + local first_fuel = nil + for _,fuel_item in pairs(fuel_items) do + if first_fuel == nil or fuel_item:native().name == "coal" then + first_fuel = fuel_item + end + end + return first_fuel +end + +------------------------------------------------------------------------------- +---Return fuel prototype +---@return ItemPrototype +function BurnerPrototype:getFuelPrototype() + local fuel_name = self.factory.fuel + local fuel = nil + if fuel_name == nil then + fuel = self:getFirstFuelPrototype() + else + fuel = ItemPrototype(fuel_name) + end + return fuel +end + +------------------------------------------------------------------------------- +---Return fuel count +---@return table +function BurnerPrototype:getFuelCount() + local factory_prototype = EntityPrototype(self.factory) + local energy_consumption = factory_prototype:getEnergyConsumption() + local factory_fuel = self:getFuelPrototype() + if factory_fuel == nil then return nil end + local fuel_value = factory_fuel:getFuelValue() + local burner_count = energy_consumption/fuel_value + return {type="item", name=factory_fuel:native().name, count=burner_count} +end + +------------------------------------------------------------------------------- +---Return fuel count +---@return table +function BurnerPrototype:getJouleCount() + local factory_prototype = EntityPrototype(self.factory) + local energy_consumption = factory_prototype:getEnergyConsumption() + local factory_fuel = self:getFuelPrototype() + if factory_fuel == nil then return nil end + ---1W/h = 3600J + local joule_count = energy_consumption / 3600 + return {type="item", name=factory_fuel:native().name, count=joule_count, is_joule=true} +end + +------------------------------------------------------------------------------- +---Return data +---@return table +function BurnerPrototype:toData() + local data = {} + data.emissions = self.lua_prototype.emissions + data.effectivity = self.lua_prototype.effectivity + data.fuel_inventory_size = self.lua_prototype.fuel_inventory_size + data.burnt_inventory_size = self.lua_prototype.burnt_inventory_size + data.fuel_categories = self.lua_prototype.fuel_categories + data.valid = self.lua_prototype.valid + return data +end + +------------------------------------------------------------------------------- +---Return string +---@return string +function BurnerPrototype:toString() + return game.table_to_json(self:toData()) +end + +------------------------------------------------------------------------------- +---Return effectivity +---@return number --default 1 +function BurnerPrototype:getEffectivity() + if self.lua_prototype ~= nil then + return self.lua_prototype.effectivity or 1 + end + return 1 +end + +------------------------------------------------------------------------------- +---@class FluidSourcePrototype +FluidSourcePrototype = newclass(EnergySourcePrototype,function(base, lua_prototype, factory) + EnergySourcePrototype.init(base,lua_prototype, factory) +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function FluidSourcePrototype:getType() + return "fluid" +end + +------------------------------------------------------------------------------- +---Return fuel fluid prototypes +---@return table +function FluidSourcePrototype:getFuelPrototypes() + if self.lua_prototype ~= nil then + local fluidbox = self.lua_prototype.fluid_box + if fluidbox ~= nil and fluidbox.filter ~= nil then + if self:getBurnsFluid() then + return {FluidPrototype(fluidbox.filter)} + else + return Player.getFluidTemperaturePrototypes(fluidbox.filter) + end + end + end + + local fuels = Player.getFluidFuelPrototypes() + return fuels +end + +------------------------------------------------------------------------------- +---Return first fuel fluid prototype +---@return LuaFluidPrototype +function FluidSourcePrototype:getFirstFuelPrototype() + local fuel_items = self:getFuelPrototypes() + local first_fuel = nil + for _,fuel_item in pairs(fuel_items) do + if (first_fuel == nil) or (first_fuel:getFuelValue() < fuel_item:getFuelValue()) then + first_fuel = fuel_item + end + end + return first_fuel +end + +------------------------------------------------------------------------------- +---Return fuel prototype +---@return FluidPrototype +function FluidSourcePrototype:getFuelPrototype() + local fuel_name = self.factory.fuel + local fuel = nil + if fuel_name == nil then + fuel = self:getFirstFuelPrototype() + elseif type(fuel_name) == "string" then + fuel = FluidPrototype(fuel_name) + else + fuel = FluidPrototype(fuel_name.name) + fuel:setTemperature(fuel_name.temperature) + end + return fuel +end + +------------------------------------------------------------------------------- +---Return fluid usage per tick +---@return number --default 0 +function FluidSourcePrototype:getFluidUsagePerTick() + if self.lua_prototype ~= nil then + return self.lua_prototype.fluid_usage_per_tick or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid usage +---@return number --default 0 +function FluidSourcePrototype:getFluidUsage() + return self:getFluidUsagePerTick() * 60 +end + +------------------------------------------------------------------------------- +---Return burns fluid +---@return boolean +function FluidSourcePrototype:getBurnsFluid() + if self.lua_prototype ~= nil then + return self.lua_prototype.burns_fluid or false + end + return false +end + +------------------------------------------------------------------------------- +---Return fluidbox +---@return table +function FluidSourcePrototype:getFluidbox() + if self.lua_prototype ~= nil then + return self.lua_prototype.fluid_box + end + return nil +end + +------------------------------------------------------------------------------- +---Return fuel count +---@return table +function FluidSourcePrototype:getFuelCount() + local factory_prototype = EntityPrototype(self.factory) + local energy_consumption = factory_prototype:getEnergyConsumption() + local factory_fuel = self:getFuelPrototype() + if factory_fuel == nil then return nil end + if factory_prototype:getType() ~= "assembling-machine" and self.lua_prototype.fluid_usage_per_tick ~= nil and self.lua_prototype.fluid_usage_per_tick ~= 0 then + local fluid_usage = self:getFluidUsagePerTick()*60 + local burner_count = fluid_usage + local fuel_fluid = {type="fluid", name=factory_fuel:native().name, count=burner_count} + return fuel_fluid + elseif factory_prototype:getType() == "assembling-machine" then + local fuel_value = factory_fuel:getFuelValue() + local burner_count = energy_consumption*60/fuel_value + local fuel_fluid = {type="fluid", name=factory_fuel:native().name, count=burner_count} + return fuel_fluid + else + local fuel_value = factory_fuel:getFuelValue() + local burner_count = energy_consumption/fuel_value + local fuel_fluid = {type="fluid", name=factory_fuel:native().name, count=burner_count} + return fuel_fluid + end +end + +------------------------------------------------------------------------------- +---Return maximum temperature +---@return number --default 0 +function FluidSourcePrototype:getMaximumTemperature() + if self.lua_prototype ~= nil then + return self.lua_prototype.maximum_temperature or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return speed modifier +---@return number --default 1 +function FluidSourcePrototype:getSpeedModifier() + if self.lua_prototype ~= nil then + if not self:getBurnsFluid() then + local maximum_temperature = self:getMaximumTemperature() + if maximum_temperature == 0 then + return 1 + end + + local fluid_fuel = self:getFuelPrototype() + if fluid_fuel == nil then + return 1 + end + + local minimum_temperature = fluid_fuel:getMinimumTemperature() + maximum_temperature = maximum_temperature - minimum_temperature + local fuel_temperature = fluid_fuel:getTemperature() - minimum_temperature + local effectivity = self:getEffectivity() + + return math.min(1, fuel_temperature / maximum_temperature * effectivity) + end + end + return 1 +end + +------------------------------------------------------------------------------- +---Return effectivity +---@return number --default 1 +function FluidSourcePrototype:getEffectivity() + if self.lua_prototype ~= nil then + return self.lua_prototype.effectivity or 1 + end + return 1 +end + +------------------------------------------------------------------------------- +---@class VoidSourcePrototype +VoidSourcePrototype = newclass(EnergySourcePrototype,function(base, lua_prototype, factory) + EnergySourcePrototype.init(base,lua_prototype, factory) +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function VoidSourcePrototype:getType() + return "void" +end + +HeatSourcePrototype = newclass(EnergySourcePrototype,function(base, lua_prototype, factory) + EnergySourcePrototype.init(base,lua_prototype, factory) +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function HeatSourcePrototype:getType() + return "heat" +end \ No newline at end of file diff --git a/helmod/model/EntityPrototype.lua b/helmod/model/EntityPrototype.lua new file mode 100644 index 00000000..3afa2d20 --- /dev/null +++ b/helmod/model/EntityPrototype.lua @@ -0,0 +1,953 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class EntityPrototype +EntityPrototype = newclass(Prototype,function(base, object) + if object ~= nil and type(object) == "string" then + Prototype.init(base, Player.getEntityPrototype(object)) + elseif object ~= nil and object.name ~= nil then + Prototype.init(base, Player.getEntityPrototype(object.name)) + end + base.factory = object + base.classname = "HMEntityPrototype" +end) + +------------------------------------------------------------------------------- +---Return type +---@return string +function EntityPrototype:getType() + if self.lua_prototype == nil then return nil end + return self.lua_prototype.type +end + +------------------------------------------------------------------------------- +---Return Allowed Effects +---@return table +function EntityPrototype:getAllowedEffects() + if self.lua_prototype == nil then return nil end + return self.lua_prototype.allowed_effects +end + +------------------------------------------------------------------------------- +---Return ingredient_count +---@return number +function EntityPrototype:getIngredientCount() + return self.lua_prototype.ingredient_count or 255 +end + +------------------------------------------------------------------------------- +---Return energy usage per second +---@return number --default 0 +function EntityPrototype:getEnergyUsage() + if self.lua_prototype ~= nil and self.lua_prototype.energy_usage ~= nil then + return self.lua_prototype.energy_usage*60 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return extract power of fluid (boiler) in J +---@param temperature number +---@param heat_capacity number +---@return number --default 0 +function EntityPrototype:getPowerExtract(minimum_temperature, temperature, heat_capacity) + if self.lua_prototype ~= nil and temperature ~= nil then + if temperature < minimum_temperature then + temperature = minimum_temperature + end + if heat_capacity == nil or heat_capacity == 0 then + heat_capacity = 200 + end + return (temperature - minimum_temperature) * heat_capacity + end + return 0 +end + +------------------------------------------------------------------------------- +---Return temperature energy of fluid_fuel in J +---@param fluid_fuel table +---@param maximum_temperature number +---@return number --default 0 +function EntityPrototype:getTemperatureEnergy(fluid_fuel, maximum_temperature) + if self.lua_prototype ~= nil then + local heat_capacity = fluid_fuel:getHeatCapacity() + local minimum_temperature = fluid_fuel:getMinimumTemperature() + local temperature + if not fluid_fuel.temperature then + temperature = minimum_temperature + elseif maximum_temperature > 0 then + temperature = math.min(maximum_temperature, fluid_fuel.temperature) + else + temperature = fluid_fuel.temperature + end + + return self:getPowerExtract(minimum_temperature, temperature, heat_capacity) + end + return 0 +end + +------------------------------------------------------------------------------- +---Return max energy usage per second +---@return number --default 0 +function EntityPrototype:getMaxEnergyUsage() + if self.lua_prototype ~= nil and self.lua_prototype.max_energy_usage ~= nil then + return self.lua_prototype.max_energy_usage * 60 / self:getEffectivity() + end + return 0 +end + +------------------------------------------------------------------------------- +---Return min energy usage per second +---@return number --default 0 +function EntityPrototype:getMinEnergyUsage() + local energy_prototype = self:getEnergySource() + if energy_prototype ~= nil then + return energy_prototype:getDrain() + end + return 0 +end + +------------------------------------------------------------------------------- +---Return nominal energy for generator +---@see https://wiki.factorio.com/Power_production +---@see https://wiki.factorio.com/Steam_engine +---@see https://wiki.factorio.com/Tutorial:Applied_power_math +---@return number --default 0 +function EntityPrototype:getEnergyConsumption() + if self.lua_prototype == nil then + return 0 + end + + local energy_prototype = self:getEnergySource() + local usage_priority = nil + if energy_prototype ~= nil then + usage_priority = energy_prototype:getUsagePriority() + end + if usage_priority == "solar" then + return 0 + end + if usage_priority == "managed-accumulator" then + return energy_prototype:getInputFlowLimit() + end + + local max_energy_usage = self:getMaxEnergyUsage() + if max_energy_usage > 0 then + if energy_prototype ~= nil then + max_energy_usage = max_energy_usage * energy_prototype:getSpeedModifier() + end + return max_energy_usage + end + + if self.lua_prototype.type == "generator" then + local fluid_usage = self:getFluidUsage() + local effectivity = self:getEffectivity() + local fluid_fuel = self:getFluidFuelPrototype() + if fluid_fuel == nil then + return 0 + end + local fuel_value = fluid_fuel:getFuelValue() + local max_energy_production = (self.lua_prototype.max_energy_production or 0) * 60 + + if self.lua_prototype.burns_fluid ~= true then + ---Steam engine + local maximum_temperature = self:getMaximumTemperature() + fuel_value = self:getTemperatureEnergy(fluid_fuel, maximum_temperature) + end + + return math.min(fluid_usage * fuel_value, max_energy_production / effectivity) + end + return 0 +end + +------------------------------------------------------------------------------- +---Return nominal energy for generator +---@see https://wiki.factorio.com/Power_production +---@see https://wiki.factorio.com/Steam_engine +---@see https://wiki.factorio.com/Tutorial:Applied_power_math +---@return number --default 0 +function EntityPrototype:getEnergyProduction() + if self.lua_prototype ~= nil then + local energy_prototype = self:getElectricEnergySource() + if energy_prototype ~= nil then + local usage_priority = energy_prototype:getUsagePriority() + local production + if usage_priority == "managed-accumulator" then + production = energy_prototype:getOutputFlowLimit() + else + production = (self.lua_prototype.max_energy_production or 0) * 60 + end + + if self.lua_prototype.type == "generator" then + local effectivity = self:getEffectivity() + local fluid_fuel = self:getFluidFuelPrototype() + if fluid_fuel ~= nil then + local consumption = self:getFluidConsumption() + local fuel_value + if self:getBurnsFluid() == true then + ---Fluid burning generator + fuel_value = fluid_fuel:getFuelValue() + else + ---Steam engine + local maximum_temperature = self:getMaximumTemperature() + fuel_value = self:getTemperatureEnergy(fluid_fuel, maximum_temperature) + end + return consumption * fuel_value * effectivity + end + return production * effectivity + else + return production + end + elseif self.lua_prototype.type == "reactor" then + local max_energy_usage = self:getMaxEnergyUsage() + local effectivity = 1 + local energy_prototype = self:getEnergySource() + if energy_prototype ~= nil then + effectivity = energy_prototype:getEffectivity() + end + return max_energy_usage * effectivity + end + end + return 0 +end + +------------------------------------------------------------------------------- +---Return base productivity +---@return number --default 0 +function EntityPrototype:getBaseProductivity() + if self.lua_prototype ~= nil then + return self.lua_prototype.base_productivity or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return effectivity +---@return number --default 1 +function EntityPrototype:getEffectivity() + if self.lua_prototype ~= nil then + local effectivity = self.lua_prototype.effectivity or 1 + local energy_prototype = self:getEnergySource() + if energy_prototype ~= nil then + effectivity = effectivity * energy_prototype:getEffectivity() + end + return effectivity + end + return 1 +end + +------------------------------------------------------------------------------- +---Return distribution effectivity +---@return number --default 1 +function EntityPrototype:getDistributionEffectivity() + if self.lua_prototype ~= nil then + return self.lua_prototype.distribution_effectivity or 1 + end return 1 +end + +------------------------------------------------------------------------------- +---Return maximum temperature +---@return number --default 0 +function EntityPrototype:getMaximumTemperature() + if self.lua_prototype ~= nil then + return self.lua_prototype.maximum_temperature or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return traget temperature +---@return number --default 0 +function EntityPrototype:getTargetTemperature() + if self.lua_prototype ~= nil then + return self.lua_prototype.target_temperature or 0 + end + return 0 +end + +-------------------------------------------------------------------------------- +---Return fluid capacity (container) +---@return number --default 0 +function EntityPrototype:getFluidCapacity() + if self.lua_prototype ~= nil then + return self.lua_prototype.fluid_capacity or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid usage per tick +---@return number --default 0 +function EntityPrototype:getFluidUsagePerTick() + if self.lua_prototype ~= nil then + return self.lua_prototype.fluid_usage_per_tick or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid usage +---@return number --default 0 +function EntityPrototype:getFluidUsage() + return self:getFluidUsagePerTick() * 60 +end + +------------------------------------------------------------------------------- +---Return fluid fuel prototype +---@return FluidPrototype +function EntityPrototype:getFluidFuelPrototype() + if self:getEnergyTypeInput() ~= "fluid" then + return nil + end + + if self.factory ~= nil and self.factory.fuel ~= nil then + local fuel_name = self.factory.fuel + local fuel = nil + if type(fuel_name) == "string" then + fuel = FluidPrototype(fuel_name) + else + fuel = FluidPrototype(fuel_name.name) + fuel:setTemperature(fuel_name.temperature) + end + return fuel + end + + local energy_prototype = self:getEnergySource() + if (energy_prototype ~= nil) and (energy_prototype:getType() == "fluid") then + return energy_prototype:getFuelPrototype() + end + + if self.lua_prototype.type == "generator" then + local fluidboxes = self:getFluidboxPrototypes() + if fluidboxes ~= nil then + for _, fluidbox in pairs(fluidboxes) do + if fluidbox.production_type == "input-output" or fluidbox.production_type == "input" then + if fluidbox.filter ~= nil then + if self.lua_prototype.burns_fluid == true then + return FluidPrototype(fluidbox.filter) + else + local maximum_temperature = self:getMaximumTemperature() + local fuels = Player.getFluidTemperaturePrototypes(fluidbox.filter) + local first = nil + for _, fuel in pairs(fuels) do + if (first == nil) or ((first:getTemperature() < fuel:getTemperature()) and (fuel:getTemperature() <= maximum_temperature)) then + first = fuel + end + end + return first + end + end + end + end + + -- No fluidbox filter found + local fuels = Player.getFluidFuelPrototypes() + local first = nil + for _, fuel in pairs(fuels) do + if (first == nil) or (first:getFuelValue() < fuel:getFuelValue()) then + first = fuel + end + end + return first + end + end + + return nil +end + +------------------------------------------------------------------------------- +---Return fluid fuel prototype +---@return table of FluidPrototype +function EntityPrototype:getFluidFuelPrototypes() + if self.lua_prototype == nil then + return {} + end + + local energy_prototype = self:getEnergySource() + if energy_prototype:getType() == "fluid" then + return energy_prototype:getFuelPrototypes() + end + + if self.lua_prototype.type == "generator" then + local fluidboxes = self:getFluidboxPrototypes() + if fluidboxes ~= nil then + for _, fluidbox in pairs(fluidboxes) do + if fluidbox.production_type == "input-output" or fluidbox.production_type == "input" then + if fluidbox.filter ~= nil then + if self.lua_prototype.burns_fluid == true then + return {FluidPrototype(fluidbox.filter)} + else + return Player.getFluidTemperaturePrototypes(fluidbox.filter) + end + end + end + end + + -- No fluidbox filter found + return Player.getFluidFuelPrototypes() + end + end + return {} +end + +------------------------------------------------------------------------------- +---Return fluid consumption +---@return number --default 0 +function EntityPrototype:getFluidConsumption() + if self.lua_prototype ~= nil then + local energy_type = self:getEnergyTypeInput() + + if self.lua_prototype.type == "generator" then + + local fluid_fuel = self:getFluidFuelPrototype() + if fluid_fuel == nil then + return 0 + end + + local max_fluid_usage = self:getFluidUsage() + local max_energy_production = (self.lua_prototype.max_energy_production or 0) * 60 + + local fuel_value + if self:getBurnsFluid() == true then + ---Fluid burning generator + fuel_value = fluid_fuel:getFuelValue() + else + ---Steam engine + local maximum_temperature = self:getMaximumTemperature() + fuel_value = self:getTemperatureEnergy(fluid_fuel, maximum_temperature) + end + + ---Generators will only consume as much fluid as they need for max power output + ---This is capped at max fluid usage + ---Power output may be less than max if input fluid fuel value is very low + local effectivity = self:getEffectivity() + local consumption = max_energy_production / fuel_value / effectivity + return math.min(max_fluid_usage, consumption) + + elseif energy_type == "fluid" then + local fluid_fuel = self:getFluidFuelPrototype() + if fluid_fuel == nil then + return 0 + end + local energy_prototype = self:getEnergySource() + local energy_fluid_usage = energy_prototype:getFluidUsage() + local fluid_burns = energy_prototype:getBurnsFluid() + -- effectivity is already applied to energy_consumption + -- getEnergyConsumption calls getMaxEnergyUsage + local energy_consumption = self:getEnergyConsumption() + local fuel_value = fluid_fuel:getFuelValue() + + if fluid_burns then + ---si l'energy a du fluid usage en burns ca devient une limit + ---if the energy source burns fluid and has fluid usage it becomes a limit + if energy_fluid_usage > 0 then + return math.min(energy_fluid_usage, energy_consumption / fuel_value) + else + return energy_consumption / fuel_value + end + else + ---si l'energy a du fluid usage c'est forcement cette valeur + ---if the energy source has fluid usage it must be this value + if energy_fluid_usage > 0 then + return energy_fluid_usage + else + local heat_capacity = fluid_fuel:getHeatCapacity() + local minimum_temperature = fluid_fuel:getMinimumTemperature() + local target_temperature = self:getTargetTemperature() + + local maximum_temperature = energy_prototype:getMaximumTemperature() + if maximum_temperature > 0 then + maximum_temperature = math.min(maximum_temperature, fluid_fuel.temperature) + else + maximum_temperature = fluid_fuel.temperature + end + + if target_temperature > 0 then + target_temperature = math.min(target_temperature, maximum_temperature) + else + target_temperature = maximum_temperature + end + + local power_extract = self:getPowerExtract(minimum_temperature, target_temperature, heat_capacity) + + return energy_consumption / power_extract + end + end + + end + end + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid production +---@return number --default 0 +function EntityPrototype:getFluidProduction() + if self:getType() == "offshore-pump" then + + return self:getPumpingSpeed() + + elseif self:getType() == "boiler" then + + local energy_prototype = self:getEnergySource() + local effectivity + if energy_prototype ~= nil then + effectivity = energy_prototype:getEffectivity() + else + effectivity = 1 + end + + local fluidboxes = self:getFluidboxPrototypes() + if fluidboxes ~= nil then + for _, fluidbox in pairs(fluidboxes) do + if fluidbox.production_type == "input-output" or fluidbox.production_type == "input" then + + local fluid_prototype = FluidPrototype(fluidbox.filter) + local heat_capacity = fluid_prototype:getHeatCapacity() + + local minimum_temperature = fluid_prototype:getMinimumTemperature() + local target_temperature = self:getTargetTemperature() + local power_extract = self:getPowerExtract(minimum_temperature, target_temperature, heat_capacity) + local energy_consumption = self:getEnergyConsumption() + + return (energy_consumption * effectivity) / power_extract + end + end + end + end + + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid production filter +---@return LuaFluidPrototype +function EntityPrototype:getFluidProductionFilter() + local fluidbox = self:getFluidboxPrototype("output") + if fluidbox ~= nil then + return fluidbox:getFilter() + end + return nil +end + +------------------------------------------------------------------------------- +---Return fluid consumption filter +---@return LuaFluidPrototype +function EntityPrototype:getFluidConsumptionFilter() + if self.lua_prototype ~= nil and self.lua_prototype.type == "boiler" then + local fluidbox = self.lua_prototype.fluidbox_prototypes[1] + if fluidbox ~= nil and fluidbox.filter ~= nil then + return fluidbox.filter.name + end + end + return nil +end + +------------------------------------------------------------------------------- +---Return fuel +---@return table +function EntityPrototype:getFluel() + if self.lua_prototype ~= nil then + local energy_prototype = self:getEnergySource() + local energy_type = self:getEnergyTypeInput() + if energy_type == "fluid" then + local fuel = self:getFluidFuelPrototype() + if fuel ~= nil then + return {name=fuel:native().name, type="fluid", temperature=fuel.temperature} + end + elseif energy_type == "burner" then + local fuel = energy_prototype:getFuelPrototype() + if fuel ~= nil then + return {name=fuel:native().name, type="item"} + end + end + end + return nil +end +------------------------------------------------------------------------------- +---Return module inventory size +---@return number --default 0 +function EntityPrototype:getModuleInventorySize() + if self.lua_prototype ~= nil then + return self.lua_prototype.module_inventory_size or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return crafting categories +---@return table +function EntityPrototype:getCraftingCategories() + if self.lua_prototype ~= nil then + return self.lua_prototype.crafting_categories or {} + end + return {} +end + +------------------------------------------------------------------------------- +---Return crafting speed +---@return number --default 0 +function EntityPrototype:getCraftingSpeed() + if self.lua_prototype ~= nil then + if self.lua_prototype.name == "character" then + return Player.getCraftingSpeed() + end + + local energy_prototype = self:getEnergySource() + local speedModifier = energy_prototype:getSpeedModifier() + + return (self.lua_prototype.crafting_speed or 1) * speedModifier + end + return 0 +end + +------------------------------------------------------------------------------- +---Return mining speed +---@return number --default 0 +function EntityPrototype:getMiningSpeed() + if self.lua_prototype ~= nil then + return (self.lua_prototype.mining_speed or 0) * self:getSpeedModifier() + end + return 0 +end + +------------------------------------------------------------------------------- +---Return neighbour bonus +---@return number --default 0 +function EntityPrototype:getNeighbourBonus() + if self.lua_prototype ~= nil then + if self.factory == nil then + return self.lua_prototype.neighbour_bonus or 0 + else + local bonus = self.lua_prototype.neighbour_bonus or 0 + if self.factory.neighbour_bonus == 2 then + return bonus + elseif self.factory.neighbour_bonus == 4 then + return 2*bonus + elseif self.factory.neighbour_bonus == 8 then + return (2+3)*bonus/2 + else + return 0 + end + end + end + return 0 +end + +------------------------------------------------------------------------------- +---Return researching speed +---@return number --default 0 +function EntityPrototype:getResearchingSpeed() + if self.lua_prototype ~= nil then + return self.lua_prototype.researching_speed or 1 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return pumping speed +---@return number --default 0 +function EntityPrototype:getPumpingSpeed() + if self.lua_prototype ~= nil then + return (self.lua_prototype.pumping_speed or 0)*60 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return speed factory for recipe +---@return number +function EntityPrototype:speedFactory(recipe) + if self.lua_prototype and self.lua_prototype.type == "boiler" then + ---@see https://wiki.factorio.com/Boiler + ---info energy 1J=1W + return 1 + elseif recipe.type == "resource" then + ---(mining power - ore mining hardness) * mining speed + ---@see https://wiki.factorio.com/Mining + ---hardness removed + ---@see https://www.factorio.com/blog/post/fff-266 + local recipe_prototype = EntityPrototype(recipe.name) + local mining_speed = self:getMiningSpeed() + local mining_time = recipe_prototype:getMineableMiningTime() + return mining_speed / mining_time + elseif recipe.type == "fluid" then + local pumping_speed = self:getPumpingSpeed() + return pumping_speed + elseif recipe.type == "technology" then + local researching_speed = self:getResearchingSpeed() + return researching_speed + elseif recipe.type == "energy" then + return self:getSpeedModifier() + else + return self:getCraftingSpeed() + end +end +------------------------------------------------------------------------------- +---Return energy type (electric or burner) +---@return string +function EntityPrototype:getEnergyType() + if self.lua_prototype ~= nil then + if self.lua_prototype.burner_prototype ~= nil then return "burner" end + if self.lua_prototype.heat_energy_source_prototype ~= nil then return "heat" end + if self.lua_prototype.fluid_energy_source_prototype ~= nil then return "fluid" end + if self.lua_prototype.void_energy_source_prototype ~= nil then return "void" end + if self.lua_prototype.electric_energy_source_prototype ~= nil then return "electric" end + end + return "none" +end + +------------------------------------------------------------------------------- +---Return energy type (electric or burner) +---@return string +function EntityPrototype:getEnergyTypeInput() + if self.lua_prototype ~= nil then + local fluid_usage = self:getFluidUsage() + if fluid_usage > 0 then + return "fluid" + else + local energy_prototype = self:getEnergySource() + if energy_prototype ~= nil then + local usage_priority = energy_prototype:getUsagePriority() + if usage_priority ~= "secondary-output" and usage_priority ~= "solar" then + return energy_prototype:getType() + end + end + end + end + return "none" +end + +------------------------------------------------------------------------------- +---Return energy type (electric or burner) +---@return string +function EntityPrototype:getEnergyTypeOutput() + if self.lua_prototype ~= nil then + if self:getType() == "reactor" then + return "heat" + end + local energy_prototype = self:getElectricEnergySource() + if energy_prototype ~= nil then + local usage_priority = energy_prototype:getUsagePriority() + if usage_priority == "secondary-output" or usage_priority == "managed-accumulator" or usage_priority == "solar" then + return energy_prototype:getType() + end + end + end + return "none" +end + +------------------------------------------------------------------------------- +---Return energy source +---@return EnergySourcePrototype +function EntityPrototype:getEnergySource() + if self.lua_prototype ~= nil then + if self.lua_prototype.burner_prototype ~= nil then return BurnerPrototype(self.lua_prototype.burner_prototype, self.factory) end + if self.lua_prototype.heat_energy_source_prototype ~= nil then return HeatSourcePrototype(self.lua_prototype.heat_energy_source_prototype, self.factory) end + if self.lua_prototype.fluid_energy_source_prototype ~= nil then return FluidSourcePrototype(self.lua_prototype.fluid_energy_source_prototype, self.factory) end + if self.lua_prototype.void_energy_source_prototype ~= nil then return VoidSourcePrototype(self.lua_prototype.void_energy_source_prototype, self.factory) end + if self.lua_prototype.electric_energy_source_prototype ~= nil then return self:getElectricEnergySource() end + end + return nil +end + +------------------------------------------------------------------------------- +---Return mineable property hardness +---@return number --default 1 +function EntityPrototype:getMineableHardness() + if self.lua_prototype ~= nil and self.lua_prototype.mineable_properties ~= nil then + return self.lua_prototype.mineable_properties.hardness or 1 + end + return 1 +end + +------------------------------------------------------------------------------- +---Return mineable property mining time +---@return number --default 0.5 +function EntityPrototype:getMineableMiningTime() + if self.lua_prototype ~= nil and self.lua_prototype.mineable_properties ~= nil then + return self.lua_prototype.mineable_properties.mining_time or 0.5 + end + return 0.5 +end + +------------------------------------------------------------------------------- +---Return mineable property required fluid +---@return string +function EntityPrototype:getMineableMiningFluidRequired() + if self.lua_prototype ~= nil and self.lua_prototype.mineable_properties ~= nil then + return self.lua_prototype.mineable_properties.required_fluid + end + return nil +end + +------------------------------------------------------------------------------- +---Return mineable property amount fluid +---@return number --default 0 +function EntityPrototype:getMineableMiningFluidAmount() + if self.lua_prototype ~= nil and self.lua_prototype.mineable_properties ~= nil then + return self.lua_prototype.mineable_properties.fluid_amount/10 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return mineable property products +---@return table +function EntityPrototype:getMineableMiningProducts() + if self.lua_prototype ~= nil and self.lua_prototype.mineable_properties ~= nil then + return self.lua_prototype.mineable_properties.products or {} + end + return {} +end + +------------------------------------------------------------------------------- +---Return inventory size +---@return number --default 0 +function EntityPrototype:getInventorySize(index) + if self.lua_prototype ~= nil then + return self.lua_prototype.get_inventory_size(index or 1) + end + return 0 +end + +------------------------------------------------------------------------------- +---Return fluid boxe prototypes +---@return number --default 0 +function EntityPrototype:getFluidboxPrototypes() + if self.lua_prototype ~= nil then + return self.lua_prototype.fluidbox_prototypes + end + return nil +end + +------------------------------------------------------------------------------- +---Return fluidbox prototype +---@return FluidboxPrototype +function EntityPrototype:getFluidboxPrototype(production_type) + if self.lua_prototype ~= nil then + local fluidboxes = self:getFluidboxPrototypes() + if fluidboxes ~= nil then + if production_type == nil then production_type = "input-output" end + for _,fluidbox in pairs(fluidboxes) do + if fluidbox.production_type == production_type then + return FluidboxPrototype(fluidbox) + end + end + end + end + return nil +end + +------------------------------------------------------------------------------- +---Return inserter capacity +---@return number --default 0 +function EntityPrototype:getInserterCapacity() + if self.lua_prototype ~= nil then + local stack_bonus = 0 + if self.lua_prototype.stack == true then + stack_bonus = Player.getForce().stack_inserter_capacity_bonus or 0 + else + stack_bonus = Player.getForce().inserter_stack_size_bonus or 0 + end + return 1 + stack_bonus + end + return 0 +end + +------------------------------------------------------------------------------- +---Return inserter rotation speed /s +---@return number --default 0 +function EntityPrototype:getInserterRotationSpeed() + if self.lua_prototype ~= nil then + return self.lua_prototype.inserter_rotation_speed*60 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return belt speed +---@return number --default 0 +function EntityPrototype:getBeltSpeed() + if self.lua_prototype ~= nil then + return self.lua_prototype.belt_speed or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return pollution +---@return number --default 0 +function EntityPrototype:getPollution() + if self.lua_prototype ~= nil then + + local energy_usage + local energy_type = self:getEnergyTypeInput() + if energy_type == "electric" then + energy_usage = self:getMaxEnergyUsage() + else + energy_usage = self:getEnergyConsumption() + end + + local energy_prototype = self:getEnergySource() + local emission_multiplier = 1 + local emission = 1 + + if energy_prototype ~= nil then + local fuel + if (energy_type == "fluid") and (self:getBurnsFluid() == true) then + fuel = self:getFluidFuelPrototype() + elseif energy_type == "burner" then + fuel = energy_prototype:getFuelPrototype() + end + + if fuel ~= nil then + emission_multiplier = fuel:getFuelEmissionsMultiplier() + end + emission = energy_prototype:getEmissions() * self:getEffectivity() + end + + return energy_usage * emission * emission_multiplier + end + + return 0 +end + +------------------------------------------------------------------------------- +---Return speed modifier +---@return number --default 1 +function EntityPrototype:getSpeedModifier() + if self.lua_prototype == nil then + return 1 + end + + local energy_prototype = self:getEnergySource() + if (energy_prototype ~= nil) and (energy_prototype:getType() == "fluid") then + return energy_prototype:getSpeedModifier() + end + + return 1 +end + +------------------------------------------------------------------------------- +---Return electric energy source +---@return ElectricSourcePrototype --default nil +function EntityPrototype:getElectricEnergySource() + if self.lua_prototype ~= nil and self.lua_prototype.electric_energy_source_prototype ~= nil then + return ElectricSourcePrototype(self.lua_prototype.electric_energy_source_prototype, self.factory) + end + return nil +end + +------------------------------------------------------------------------------- +---Return burns fluid +---@return boolean +function EntityPrototype:getBurnsFluid() + if self.lua_prototype ~= nil and self.lua_prototype.type == "generator" then + return self.lua_prototype.burns_fluid + elseif self:getEnergyType() == "fluid" then + local energy_prototype = self:getEnergySource() + if energy_prototype ~= nil then + return energy_prototype:getBurnsFluid() + end + end + return nil +end diff --git a/helmod/model/FluidPrototype.lua b/helmod/model/FluidPrototype.lua new file mode 100644 index 00000000..8561837f --- /dev/null +++ b/helmod/model/FluidPrototype.lua @@ -0,0 +1,75 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class FluidPrototype +FluidPrototype = newclass(Prototype,function(base, object) + if object ~= nil and type(object) == "string" then + Prototype.init(base, Player.getFluidPrototype(object)) + elseif object ~= nil and object.name ~= nil then + Prototype.init(base, Player.getFluidPrototype(object.name)) + end + base.classname = "HMFluidPrototype" +end) + +------------------------------------------------------------------------------- +---Return fuel value +---@return number +function FluidPrototype:getHeatCapacity() + if self.lua_prototype == nil then return 0 end + return self.lua_prototype.heat_capacity +end + +------------------------------------------------------------------------------- +---Return fuel value +---@return number +function FluidPrototype:getEmissionMultiplier() + if self.lua_prototype == nil then return 1 end + return self.lua_prototype.emissions_multiplier or 1 +end + +------------------------------------------------------------------------------- +---Return fuel value +---@return number +function FluidPrototype:getFuelValue() + if self.lua_prototype == nil then return 0 end + return self.lua_prototype.fuel_value +end + +------------------------------------------------------------------------------- +---Return fuel emissions multiplier +---@return number +function FluidPrototype:getFuelEmissionsMultiplier() + if self.lua_prototype == nil then return 1 end + return self.lua_prototype.emissions_multiplier or 1 +end + +------------------------------------------------------------------------------- +---Return temperature +---@return number +function FluidPrototype:getTemperature() + return self.temperature +end + +------------------------------------------------------------------------------- +---Return fluid temperature +---@return number or nil +function FluidPrototype:setTemperature(value) + self.temperature = value +end + +------------------------------------------------------------------------------- +---Return minimum temperature +---@return number +function FluidPrototype:getMinimumTemperature() + if self.lua_prototype == nil then return 15 end + return self.lua_prototype.default_temperature +end + +------------------------------------------------------------------------------- +---Return hidden of Prototype +---@return boolean +function FluidPrototype:getHidden() + if self.lua_prototype ~= nil then + return self.lua_prototype.hidden + end + return false +end diff --git a/helmod/model/FluidboxPrototype.lua b/helmod/model/FluidboxPrototype.lua new file mode 100644 index 00000000..b12c681e --- /dev/null +++ b/helmod/model/FluidboxPrototype.lua @@ -0,0 +1,74 @@ +require "model.Prototype" +------------------------------------------------------------------------------- +---Class Object +---@Class FluidboxPrototype +FluidboxPrototype = newclass(Prototype) + +------------------------------------------------------------------------------- +---Is input +---@return boolean +function FluidboxPrototype:isInput() + if self.lua_prototype ~= nil then + return self.lua_prototype.production_type ~= "output" + end + return false +end + +------------------------------------------------------------------------------- +---Is output +---@return boolean +function FluidboxPrototype:isOutput() + if self.lua_prototype ~= nil then + return self.lua_prototype.production_type == "output" + end + return false +end + +------------------------------------------------------------------------------- +---Return filter +---@return string +function FluidboxPrototype:getFilter() + if self.lua_prototype ~= nil then + return self.lua_prototype.filter + end + return nil +end + +------------------------------------------------------------------------------- +---Return data +---@return table +function FluidboxPrototype:toData() + local data = {} + local entity = self.lua_prototype.entity + if entity == nil then + data.entity = "nil" + else + data.entity = {name=entity.name, type=entity.type} + end + data.index = self.lua_prototype.index + data.pipe_connections = self.lua_prototype.pipe_connections + data.production_type = self.lua_prototype.production_type + data.base_area = self.lua_prototype.base_area + data.base_level = self.lua_prototype.base_level + data.height = self.lua_prototype.height + data.volume = self.lua_prototype.volume + local filter = self.lua_prototype.filter + if filter == nil then + data.filter = "nil" + else + data.filter = {name=filter.name, type="fluid"} + end + data.minimum_temperature = self.lua_prototype.minimum_temperature + data.maximum_temperature = self.lua_prototype.maximum_temperature + data.secondary_draw_orders = self.lua_prototype.secondary_draw_orders + data.render_layer = self.lua_prototype.render_layer + data.valid = self.lua_prototype.valid + return data +end + +------------------------------------------------------------------------------- +---Return string +---@return string +function FluidboxPrototype:toString() + return game.table_to_json(self:toData()) +end \ No newline at end of file diff --git a/helmod/model/ItemPrototype.lua b/helmod/model/ItemPrototype.lua new file mode 100644 index 00000000..cd23d0f8 --- /dev/null +++ b/helmod/model/ItemPrototype.lua @@ -0,0 +1,55 @@ +------------------------------------------------------------------------------- +---@class ItemPrototype +ItemPrototype = newclass(Prototype,function(base, object) + if object ~= nil and type(object) == "string" then + Prototype.init(base, Player.getItemPrototype(object)) + elseif object ~= nil and object.name ~= nil then + Prototype.init(base, Player.getItemPrototype(object.name)) + end + base.classname = "HMItemPrototype" +end) + +------------------------------------------------------------------------------- +---Return fuel value +---@return number +function ItemPrototype:getFuelValue() + if self.lua_prototype == nil then return 0 end + return self.lua_prototype.fuel_value +end + +------------------------------------------------------------------------------- +---Return burnt result +---@return number +function ItemPrototype:getBurntResult() + if self.lua_prototype == nil then return nil end + if self:getFuelValue() > 0 then return self.lua_prototype.burnt_result end + return nil +end + +------------------------------------------------------------------------------- +---Return fuel emissions multiplier +---@return number +function ItemPrototype:getFuelEmissionsMultiplier() + if self.lua_prototype == nil then return 1 end + return self.lua_prototype.fuel_emissions_multiplier or 1 +end + +------------------------------------------------------------------------------- +---Return stack size +---@return number +function ItemPrototype:stackSize() + if self.lua_prototype ~= nil then + return self.lua_prototype.stack_size or 0 + end + return 0 +end + +------------------------------------------------------------------------------- +---Return hidden of Prototype +---@return boolean +function ItemPrototype:getHidden() + if self.lua_prototype ~= nil then + return self.lua_prototype.has_flag("hidden") + end + return false +end diff --git a/helmod/model/Player.lua b/helmod/model/Player.lua new file mode 100644 index 00000000..87d8816b --- /dev/null +++ b/helmod/model/Player.lua @@ -0,0 +1,1481 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class Player +local Player = { + ---single-line comment + classname = "HMPlayer" +} + +local Lua_player = nil + +------------------------------------------------------------------------------- +---Print message +function Player.print(...) + if Lua_player ~= nil then + Lua_player.print(table.concat({...}," ")) + end +end +------------------------------------------------------------------------------- +---Load factorio player +---@param event LuaEvent +---@return Player +function Player.load(event) + Lua_player = game.players[event.player_index] + return Player +end + +------------------------------------------------------------------------------- +---Load factorio player by name or first +---@param player_name string +---@return Player +function Player.try_load_by_name(player_name) + for _, player in pairs(game.players) do + if Lua_player == nil then + Lua_player = player + end + if player.name == player_name then + Lua_player = player + break + end + end + return Player +end + +------------------------------------------------------------------------------- +---Set factorio player +---@param player LuaPlayer +---@return Player +function Player.set(player) + Lua_player = player + return Player +end + +------------------------------------------------------------------------------- +---Get game day +---@return number, number, number, number +function Player.getGameDay() + local surface = game.surfaces[1] + local day = surface.ticks_per_day + local dusk = surface.evening-surface.dusk + local night = surface.morning-surface.evening + local dawn = surface.dawn-surface.morning + return day, day*dusk, day*night, day*dawn +end + +------------------------------------------------------------------------------ +---Get display sizes +---@return number, number, number +function Player.getDisplaySizes() + if Lua_player == nil or not Lua_player.valid then return 800,600,1 end + local display_resolution = Lua_player.display_resolution + local display_scale = Lua_player.display_scale + return display_resolution.width, display_resolution.height, display_scale +end + +------------------------------------------------------------------------------- +---Set pipette +---@param entity any +---@return any +function Player.setPipette(entity) + if Lua_player == nil then return nil end + return Lua_player.pipette_entity(entity) +end + +------------------------------------------------------------------------------- +---Get character crafting speed +---@return number +function Player.getCraftingSpeed() + if Lua_player == nil then return 0 end + return 1 + Lua_player.character_crafting_speed_modifier +end + +------------------------------------------------------------------------------- +---Get main inventory +---@return any +function Player.getMainInventory() + if Lua_player == nil then return nil end + return Lua_player.get_main_inventory() +end + +------------------------------------------------------------------------------- +---Begin Crafting +---@param item string +---@param count number +function Player.beginCrafting(item, count) + if Lua_player == nil then return nil end + local filters = {{filter = "has-product-item", elem_filters = {{filter = "name", name = item}}}} + local recipes = game.get_filtered_recipe_prototypes(filters) + if recipes ~= nil and table.size(recipes) > 0 then + local first_recipe = Model.firstRecipe(recipes) + local craft = {count=math.ceil(count),recipe=first_recipe.name,silent=false} + Lua_player.begin_crafting(craft) + else + Player.print("No recipe found for this craft!") + end +end + +------------------------------------------------------------------------------- +---Get smart tool +---@return LuaItemStack +function Player.getSmartTool(entities) + if Lua_player == nil then + return nil + end + local script_inventory = game.create_inventory(1) + local tool_stack = script_inventory[1] + tool_stack.set_stack({name="blueprint"}) + tool_stack.set_blueprint_entities(entities) + tool_stack.label = "Helmod Smart Tool" + + Lua_player.add_to_clipboard(tool_stack) + Lua_player.activate_paste() + script_inventory.destroy() + return tool_stack +end + +------------------------------------------------------------------------------- +---Set smart tool +---@param recipe table +---@param type string +---@param index number +---@return any +function Player.setSmartTool(recipe, type, index) + if Lua_player == nil or recipe == nil then + return nil + end + local factory = recipe[type] + if index ~= nil then + factory = factory[index] + end + local modules = {} + for name,value in pairs(factory.modules or {}) do + modules[name] = value + end + local entity = { + entity_number = 1, + name = factory.name, + position = {0, 0}, + items = modules + } + if type == "factory" then + entity.recipe = recipe.name + end + + Player.getSmartTool({entity}) +end + +------------------------------------------------------------------------------- +---Is valid sprite path +---@param sprite_path string +---@return boolean +function Player.is_valid_sprite_path(sprite_path) + if Lua_player == nil then return false end + return Lua_player.gui.is_valid_sprite_path(sprite_path) +end + +------------------------------------------------------------------------------- +---Return factorio player +---@return LuaPlayer +function Player.native() + return Lua_player +end + +------------------------------------------------------------------------------- +---Return admin player +---@return boolean +function Player.isAdmin() + return Lua_player.admin +end + +------------------------------------------------------------------------------- +---Get gui +---@param location string +---@return LuaGuiElement +function Player.getGui(location) + return Lua_player.gui[location] +end + +------------------------------------------------------------------------------- +---Return force's player +---@return LuaForce +function Player.getForce() + return Lua_player.force +end + +------------------------------------------------------------------------------- +---Sets the toggle state of the shotcut tool/icon +---@param state boolean +function Player.setShortcutState(state) + if Lua_player ~= nil then + Lua_player.set_shortcut_toggled("helmod-shortcut", state) + end +end + +------------------------------------------------------------------------------- +---Return item type +---@param element LuaPrototype +---@return string +function Player.getItemIconType(element) + local item = Player.getItemPrototype(element.name) + if item ~= nil then + return "item" + end + local fluid = Player.getFluidPrototype(element.name) + if fluid ~= nil then + return "fluid" + else + return "item" + end +end + +------------------------------------------------------------------------------- +---Return localised name +---@param element LuaPrototype +---@return string|table +function Player.getLocalisedName(element) + local localisedName = element.name + if element.type ~= nil then + if element.type == "recipe" or element.type == "recipe-burnt" then + local recipe = Player.getPlayerRecipe(element.name) + if recipe ~= nil then + localisedName = recipe.localised_name + end + elseif element.type == "technology" then + local technology = Player.getPlayerTechnology(element.name) + if technology ~= nil then + localisedName = technology.localised_name + end + elseif element.type == "entity" or element.type == "resource" then + local item = Player.getEntityPrototype(element.name) + if item ~= nil then + localisedName = item.localised_name + end + elseif element.type == 0 or element.type == "item" then + local item = Player.getItemPrototype(element.name) + if item ~= nil then + localisedName = item.localised_name + end + elseif element.type == 1 or element.type == "fluid" then + local item = Player.getFluidPrototype(element.name) + if item ~= nil then + if element.temperature then + localisedName = {"helmod_common.fluid-temperature", item.localised_name, element.temperature} + elseif (element.minimum_temperature and (element.minimum_temperature >= -1e300)) and (element.maximum_temperature and (element.maximum_temperature <= 1e300)) then + localisedName = {"helmod_common.fluid-temperature-range", item.localised_name, element.minimum_temperature, element.maximum_temperature} + elseif (element.minimum_temperature and (element.minimum_temperature >= -1e300)) then + localisedName = {"helmod_common.fluid-temperature-min", item.localised_name, element.minimum_temperature} + elseif (element.maximum_temperature and (element.maximum_temperature <= 1e300)) then + localisedName = {"helmod_common.fluid-temperature-max", item.localised_name, element.maximum_temperature} + else + localisedName = item.localised_name + end + end + elseif element.type == "energy" then + localisedName = {string.format("helmod_common.%s", element.name)} + end + end + return localisedName +end + +------------------------------------------------------------------------------- +---Return localised name +---@param prototype LuaPrototype +---@return string|table +function Player.getRecipeLocalisedName(prototype) + local element = Player.getPlayerRecipe(prototype.name) + if element ~= nil then + return element.localised_name + end + return prototype.name +end + +------------------------------------------------------------------------------- +---Return localised name +---@param prototype LuaPrototype +---@return string|table +function Player.getTechnologyLocalisedName(prototype) + local element = Player.getPlayerTechnology(prototype.name) + if element ~= nil then + return element.localised_name + end + return element.name +end + +------------------------------------------------------------------------------- +---Return recipes +---@return table +function Player.getPlayerRecipes() + if Lua_player ~= nil then + return Player.getForce().recipes + end + return {} +end + +------------------------------------------------------------------------------- +---Return recipe prototypes +---@return table +function Player.getRecipes() + return game.recipe_prototypes +end + +------------------------------------------------------------------------------- +---Return technologie prototypes +---@param filters table +---@return table +function Player.getTechnologies(filters) + if filters ~= nil then + return game.get_filtered_technology_prototypes(filters) + end + return game.technology_prototypes +end + +------------------------------------------------------------------------------- +---Return technology prototype +---@param name string +---@return LuaTechnologyPrototype +function Player.getTechnology(name) + return game.technology_prototypes[name] +end + +------------------------------------------------------------------------------- +---Return technologies +---@return table +function Player.getPlayerTechnologies() + if Lua_player ~= nil then + local technologies = {} + for _,technology in pairs(Player.getForce().technologies) do + technologies[technology.name] = technology + end + return technologies + end + return {} +end + +------------------------------------------------------------------------------- +---Return technology +---@param name string +---@return LuaTechnology +function Player.getPlayerTechnology(name) + if Lua_player ~= nil then + local technology = Player.getForce().technologies[name] + return technology + end + return nil +end + +------------------------------------------------------------------------------- +---Return rule +---@param rule_name string +---@return table, table --rules_included, rules_excluded +function Player.getRules(rule_name) + local rules_included = {} + local rules_excluded = {} + for rule_id, rule in spairs(Model.getRules(), function(t,a,b) return t[b].index > t[a].index end) do + if game.active_mods[rule.mod] and rule.name == rule_name then + if rule.excluded then + if rules_excluded[rule.category] == nil then rules_excluded[rule.category] = {} end + if rules_excluded[rule.category][rule.type] == nil then rules_excluded[rule.category][rule.type] = {} end + rules_excluded[rule.category][rule.type][rule.value] = true + else + if rules_included[rule.category] == nil then rules_included[rule.category] = {} end + if rules_included[rule.category][rule.type] == nil then rules_included[rule.category][rule.type] = {} end + rules_included[rule.category][rule.type][rule.value] = true + end + end + end + return rules_included, rules_excluded +end + +------------------------------------------------------------------------------- +---Return rule +---@param check boolean +---@param rules table +---@param category string +---@param lua_entity table +---@param included boolean +---@return boolean +function Player.checkRules(check, rules, category, lua_entity, included) + if rules[category] then + if rules[category]["entity-name"] and (rules[category]["entity-name"]["all"] or rules[category]["entity-name"][lua_entity.name]) then + check = included + elseif rules[category]["entity-type"] and (rules[category]["entity-type"]["all"] or rules[category]["entity-type"][lua_entity.type]) then + check = included + elseif rules[category]["entity-group"] and (rules[category]["entity-group"]["all"] or rules[category]["entity-group"][lua_entity.group.name]) then + check = included + elseif rules[category]["entity-subgroup"] and (rules[category]["entity-subgroup"]["all"] or rules[category]["entity-subgroup"][lua_entity.subgroup.name]) then + check = included + end + end + return check +end + +------------------------------------------------------------------------------- +---Check factory limitation module +---@param module table +---@param lua_recipe RecipeData +---@return boolean +function Player.checkFactoryLimitationModule(module, lua_recipe) + local factory = lua_recipe.factory + if factory.module_slots == 0 then + return false + end + + local rules_included, rules_excluded = Player.getRules("module-limitation") + local model_filter_factory_module = User.getModGlobalSetting("model_filter_factory_module") + local allowed = true + local check_not_bypass = true + local prototype = RecipePrototype(lua_recipe) + local category = prototype:getCategory() + if prototype:getType() == "rocket" then + local rocket_part_recipe = Player.getRocketPartRecipe(lua_recipe.factory) + if rocket_part_recipe and category == rocket_part_recipe.category and lua_recipe.name ~= rocket_part_recipe.name then + local rocket_recipe = RecipePrototype(rocket_part_recipe.name) + if rocket_recipe.lua_prototype ~= nil then + rocket_recipe.name = rocket_part_recipe.name + rocket_recipe.factory = lua_recipe.factory + allowed = Player.checkFactoryLimitationModule(module, rocket_recipe) + return allowed + end + return true + end + end + if rules_excluded[category] == nil then + category = "standard" + end + check_not_bypass = Player.checkRules(check_not_bypass, rules_excluded, category, EntityPrototype(factory.name):native(), false) + if table.size(module.limitations) > 0 and check_not_bypass and model_filter_factory_module == true then + allowed = false + for _, recipe_name in pairs(module.limitations) do + if lua_recipe.name == recipe_name then + allowed = true + end + end + end + + local allowed_effects = EntityPrototype(factory):getAllowedEffects() + if allowed_effects ~= nil and model_filter_factory_module == true then + for _, effect in pairs({"speed", "productivity", "consumption", "pollution"}) do + if (Player.getModuleBonus(module.name, effect) ~= 0) and (not allowed_effects[effect]) then + allowed = false + end + end + end + + return allowed +end + +------------------------------------------------------------------------------- +---Check beacon limitation module +---@param beacon FactoryData +---@param recipe RecipeData +---@param module LuaItemPrototype +---@return boolean +function Player.checkBeaconLimitationModule(beacon, recipe, module) + local allowed = true + local model_filter_beacon_module = User.getModGlobalSetting("model_filter_beacon_module") + + if table.size(module.limitations) > 0 and model_filter_beacon_module == true and recipe.type ~= "resource" then + allowed = false + for _, module_recipe_name in pairs(module.limitations) do + if module_recipe_name == recipe.name then + allowed = true + end + end + end + + local allowed_effects = EntityPrototype(beacon):getAllowedEffects() + if allowed_effects ~= nil and model_filter_beacon_module == true then + for _, effect in pairs({"speed", "productivity", "consumption", "pollution"}) do + if (Player.getModuleBonus(module.name, effect) ~= 0) and (not allowed_effects[effect]) then + allowed = false + end + end + end + + if beacon.module_slots == 0 then + allowed = false + end + return allowed +end + +------------------------------------------------------------------------------- +---Return list of productions +---@param category string +---@param lua_recipe table +---@return table +function Player.getProductionsCrafting(category, lua_recipe) + local productions = {} + local rules_included, rules_excluded = Player.getRules("production-crafting") + if category == "crafting-handonly" then + productions["character"] = game.entity_prototypes["character"] + elseif lua_recipe.name ~= nil and category == "fluid" then + for key, lua_entity in pairs(Player.getOffshorePumps(lua_recipe.name)) do + productions[lua_entity.name] = lua_entity + end + else + for key, lua_entity in pairs(Player.getProductionMachines()) do + local check = false + if category ~= nil then + if not(rules_included[category]) then + ---standard recipe + if lua_entity.crafting_categories ~= nil and lua_entity.crafting_categories[category] then + local recipe_ingredient_count = RecipePrototype(lua_recipe, "recipe"):getIngredientCount() + local factory_ingredient_count = EntityPrototype(lua_entity):getIngredientCount() + --- check ingredient limitation + if factory_ingredient_count >= recipe_ingredient_count then + check = true + end + ---resolve rule excluded + check = Player.checkRules(check, rules_excluded, "standard", lua_entity, false) + end + else + ---resolve rule included + check = Player.checkRules(check, rules_included, category, lua_entity, true) + ---resolve rule excluded + check = Player.checkRules(check, rules_excluded, category, lua_entity, false) + end + else + --- take all production if category is nil + if lua_entity.group ~= nil and lua_entity.group.name == "production" then + check = true + end + end + ---resource filter + if check then + if lua_recipe.name ~= nil then + local lua_entity_filter = Player.getEntityPrototype(lua_recipe.name) + if lua_entity_filter ~= nil then + if lua_entity.resource_categories ~= nil and not(lua_entity.resource_categories[lua_entity_filter.resource_category]) then + check = false + elseif lua_entity_filter.mineable_properties and lua_entity_filter.mineable_properties.required_fluid then + local fluidboxes = EntityPrototype(lua_entity):getFluidboxPrototypes() + if #fluidboxes == 0 then + check = false + end + end + end + end + end + ---ok to add entity + if check then + productions[lua_entity.name] = lua_entity + end + end + end + return productions +end + +------------------------------------------------------------------------------- +---Excludes entities that are placed only by a hidden item +---@param entities table +---@return table +function Player.ExcludePlacedByHidden(entities) + local results = {} + + for entity_name, entity in pairs(entities) do + local item_filters = {} + + for _, item in pairs(entity.items_to_place_this or {}) do + if type(item) == "string" then + table.insert(item_filters, {filter="name", name=item, mode="or"}) + elseif item.name then + table.insert(item_filters, {filter="name", name=item.name, mode="or"}) + end + end + + local show = false + + if #item_filters == 0 then + -- Has no items to place it. Probably placed by script. + -- e.g. Numal reef from Py + show = true + else + local items = game.get_filtered_item_prototypes(item_filters) + for _, item in pairs(items) do + if not item.has_flag("hidden") then + show = true + break + end + end + end + + if show == true then + results[entity_name] = entity + end + end + + return results +end + +------------------------------------------------------------------------------- +---Return list of modules +---@return table +function Player.getModules() + local items = {} + local filters = {} + table.insert(filters,{filter="type",type="module",mode="or"}) + table.insert(filters,{filter="flag",flag="hidden",mode="and", invert=true}) + + for _,item in pairs(game.get_filtered_item_prototypes(filters)) do + table.insert(items,item) + end + return items +end + +------------------------------------------------------------------------------- +---Return list of production machines +---@return table +function Player.getProductionMachines() + local cache_machines = Cache.getData(Player.classname, "list_machines") + if cache_machines ~= nil then + return cache_machines + end + + local filters = {} + table.insert(filters, {filter="crafting-machine", mode="or"}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + table.insert(filters, {filter="type", type="lab", mode="or"}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + table.insert(filters, {filter="type", type="mining-drill", mode="or"}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + table.insert(filters, {filter="type", type="rocket-silo", mode="or"}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + local prototypes = game.get_filtered_entity_prototypes(filters) + prototypes = Player.ExcludePlacedByHidden(prototypes) + + local list_machines = {} + for prototype_name, lua_prototype in pairs(prototypes) do + local machine = {name=lua_prototype.name, group=(lua_prototype.group or {}).name, subgroup=(lua_prototype.subgroup or {}).name, type=lua_prototype.type, order=lua_prototype.order, crafting_categories=lua_prototype.crafting_categories, resource_categories=lua_prototype.resource_categories} + table.insert(list_machines, machine) + end + + Cache.setData(Player.classname, "list_machines", list_machines) + return list_machines +end + +------------------------------------------------------------------------------- +---Return list of energy machines +---@return table +function Player.getEnergyMachines() + local machines = {} + + local filters = {} + for _, type in pairs({"generator", "solar-panel", "accumulator", "reactor", "burner-generator", "electric-energy-interface"}) do + table.insert(filters, {filter="type", mode="or", invert=false, type=type}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + table.insert(filters, {filter="type", mode="or", invert=false, type=type}) + table.insert(filters, {filter="flag", flag="player-creation", mode="and"}) + end + for entity_name, entity in pairs(game.get_filtered_entity_prototypes(filters)) do + machines[entity_name] = entity + end + + machines = Player.ExcludePlacedByHidden(machines) + return machines +end + +------------------------------------------------------------------------------- +---Return list of boilers +---@param fluid_name string +---@return table +function Player.getBoilers(fluid_name) + local filters = {} + table.insert(filters, {filter="type", type="boiler", mode="or"}) + table.insert(filters, {filter="hidden", mode="and", invert=true}) + table.insert(filters, {filter="type", type="boiler", mode="or"}) + table.insert(filters, {filter="flag", flag="player-creation", mode="and"}) + local prototypes = game.get_filtered_entity_prototypes(filters) + + prototypes = Player.ExcludePlacedByHidden(prototypes) + + if fluid_name == nil then + return prototypes + else + local boilers = {} + for boiler_name, boiler in pairs(prototypes) do + for _, fluidbox in pairs(boiler.fluidbox_prototypes) do + if (fluidbox.production_type == "output") and fluidbox.filter and (fluidbox.filter.name == fluid_name) then + boilers[boiler_name] = boiler + break + end + end + end + + return boilers + end +end + +------------------------------------------------------------------------------- +---Return table of boiler recipes +---@return table +function Player.getBoilersForRecipe(recipe_prototype) + local boilers = {} + + for boiler_name, boiler in pairs(Player.getBoilers()) do + ---Check temperature + if boiler.target_temperature ~= recipe_prototype.output_fluid_temperature then + goto continue + end + + ---Check input fluid + local input_fluid + local fluidbox = boiler.fluidbox_prototypes[1] + if fluidbox.filter then + input_fluid = fluidbox.filter.name + end + if input_fluid ~= recipe_prototype.input_fluid_name then + goto continue + end + + ---Check output fluid + local output_fluid + for _, fluidbox in pairs(boiler.fluidbox_prototypes) do + if fluidbox.filter and fluidbox.production_type == "output" then + output_fluid = fluidbox.filter.name + end + end + if output_fluid ~= recipe_prototype.output_fluid_name then + goto continue + end + + boilers[boiler_name] = boiler + + ::continue:: + end + + return boilers +end + +------------------------------------------------------------------------------- +---Return list of Offshore-Pump +---@param fluid_name string +---@return table +function Player.getOffshorePumps(fluid_name) + local filters = {} + table.insert(filters, {filter="type", type="offshore-pump", mode="or"}) + local entities = game.get_filtered_entity_prototypes(filters) + local offshore_pump = {} + for key, entity in pairs(entities) do + if entity.fluid.name == fluid_name then + for _, fluidbox in pairs(entity.fluidbox_prototypes) do + if #fluidbox.pipe_connections > 0 then + offshore_pump[key] = entity + break + end + end + end + end + return offshore_pump +end + +------------------------------------------------------------------------------- +---Return module bonus (default return: bonus = 0 ) +---@param module string +---@param effect string +---@return number +function Player.getModuleBonus(module, effect) + if module == nil then return 0 end + local bonus = 0 + ---search module + local module = Player.getItemPrototype(module) + if module ~= nil and module.module_effects ~= nil and module.module_effects[effect] ~= nil then + bonus = module.module_effects[effect].bonus + end + return bonus +end + +------------------------------------------------------------------------------- +---Return recipe prototype +---@param name string +---@return LuaRecipe +function Player.getRecipe(name) + if name == nil then return nil end + return game.recipe_prototypes[name] +end + +------------------------------------------------------------------------------- +---Return recipe +---@param name string +---@return LuaRecipe +function Player.getPlayerRecipe(name) + if Lua_player ~= nil then + return Player.getForce().recipes[name] + end + return nil +end + +function Player.buildResourceRecipe(entity_prototype) + local prototype = entity_prototype:native() + if prototype == nil then return nil end + local ingredients = {} + if entity_prototype:getMineableMiningFluidRequired() then + local fluid_ingredient = {name=entity_prototype:getMineableMiningFluidRequired(), type="fluid", amount=entity_prototype:getMineableMiningFluidAmount()} + table.insert(ingredients, fluid_ingredient) + end + local recipe = {} + recipe.category = "extraction-machine" + recipe.enabled = true + recipe.energy = 1 + recipe.force = {} + recipe.group = {name="helmod", order="zzzz"} + recipe.subgroup = {name="helmod-resource", order="aaaa"} + recipe.hidden = false + if prototype then + if prototype.flags ~= nil then + recipe.hidden = prototype.flags["hidden"] or false + end + recipe.localised_description = prototype.localised_description + recipe.localised_name = prototype.localised_name + recipe.name = prototype.name + end + recipe.ingredients = ingredients + recipe.products = entity_prototype:getMineableMiningProducts() + recipe.prototype = {} + recipe.valid = true + + return recipe +end + +------------------------------------------------------------------------------- +---Return resource recipes +---@return table +function Player.getResourceRecipes() + local recipes = {} + + for key, prototype in pairs(game.entity_prototypes) do + if prototype.name ~= nil and prototype.resource_category ~= nil then + local recipe = Player.buildResourceRecipe(EntityPrototype(prototype)) + if recipe ~= nil then + recipes[recipe.name] = recipe + end + end + end + + return recipes +end + +------------------------------------------------------------------------------- +---Return resource recipe +---@param name string +---@return table +function Player.getResourceRecipe(name) + local entity_prototype = EntityPrototype(name) + local recipe = Player.buildResourceRecipe(entity_prototype) + + return recipe +end + +------------------------------------------------------------------------------- +---Return energy recipe +---@param name string +---@return table +function Player.getEnergyRecipe(name) + local entity_prototype = EntityPrototype(name) + local prototype = entity_prototype:native() + local recipe = {} + recipe.category = "energy" + recipe.enabled = true + recipe.energy = 1 + recipe.force = {} + recipe.group = {name="helmod", order="zzzz"} + recipe.subgroup = {name="helmod-energy", order="dddd"} + recipe.hidden = false + if prototype ~= nil and prototype.flags ~= nil then + recipe.hidden = prototype.flags["hidden"] or false + end + recipe.ingredients = {} + recipe.products = {} + recipe.localised_description = prototype.localised_description + recipe.localised_name = prototype.localised_name + recipe.name = prototype.name + recipe.prototype = {} + recipe.valid = true + + return recipe +end + +------------------------------------------------------------------------------- +---Return table of fluid recipes +---@return table +function Player.getFluidRecipes() + local recipes = {} + + ---Offshore pumps + local filters = {} + table.insert(filters, {filter="type", type="offshore-pump", mode="or"}) + local entities = game.get_filtered_entity_prototypes(filters) + for key, entity in pairs(entities) do + for _, fluidbox in pairs(entity.fluidbox_prototypes) do + if #fluidbox.pipe_connections > 0 then + local recipe = Player.buildFluidRecipe(entity.fluid.name, {}, nil) + recipe.subgroup = {name="helmod-fluid", order="bbbb"} + if not recipes[entity.fluid.name] then + recipes[entity.fluid.name] = recipe + end + if entity.has_flag("hidden") then + recipes[entity.fluid.name].hidden = true + end + end + end + end + + return recipes +end + +------------------------------------------------------------------------------- +---Return recipe +---@param name string +---@return table +function Player.getFluidRecipe(name) + local recipes = Player.getFluidRecipes() + return recipes[name] +end + +------------------------------------------------------------------------------- +---Return table of boiler recipes +---@return table +function Player.getBoilerRecipes() + local recipes = {} + + ---Boilers + local boilers = Player.getBoilers() + + for boiler_name, boiler in pairs(boilers) do + local input_fluid + local output_fluid + + local fluidbox = boiler.fluidbox_prototypes[1] + if fluidbox.filter then + input_fluid = fluidbox.filter.name + end + + for _, fluidbox in pairs(boiler.fluidbox_prototypes) do + if fluidbox.filter and fluidbox.production_type == "output" then + output_fluid = fluidbox.filter.name + end + end + + if input_fluid ~= nil and output_fluid ~= nil then + local ingredients = {{name=input_fluid, type="fluid", amount=1}} + local fluid_prototype = FluidPrototype(output_fluid) + local recipe = Player.buildFluidRecipe(fluid_prototype, ingredients, boiler.target_temperature) + recipe.subgroup = {name="helmod-boiler", order="cccc"} + recipe.input_fluid_name = input_fluid + recipe.output_fluid_name = output_fluid + recipe.output_fluid_temperature = boiler.target_temperature + + if not recipes[recipe.name] then + recipes[recipe.name] = recipe + end + if boiler.has_flag("hidden") then + recipes[recipe.name].hidden = true + end + end + end + + return recipes +end + +------------------------------------------------------------------------------- +---Return recipe +---@param name string +---@return table +function Player.getBoilerRecipe(name) + local recipes = Player.getBoilerRecipes() + return recipes[name] +end + +------------------------------------------------------------------------------- +---Return recipe +---@param ingredients table +---@param fluid string|table +---@param temperature number +---@return table +function Player.buildFluidRecipe(fluid, ingredients, temperature) + local fluid_prototype + if type(fluid) == "string" then + fluid_prototype = FluidPrototype(fluid) + else + fluid_prototype = fluid + end + + local prototype = fluid_prototype:native() + local products = {{name=prototype.name, type="fluid", amount=1, temperature=temperature}} + local recipe = {} + recipe.enabled = true + recipe.energy = 1 + recipe.force = {} + recipe.group = {name="helmod", order="zzzz"} + recipe.subgroup = {} + recipe.hidden = false + recipe.ingredients = ingredients + recipe.products = products + recipe.localised_description = prototype.localised_description + recipe.localised_name = prototype.localised_name + if temperature ~= nil then + recipe.name = string.format("%s#%s", prototype.name, temperature) + else + recipe.name = prototype.name + end + if #ingredients > 0 then + recipe.name = string.format("%s->%s", ingredients[1].name, recipe.name) + end + recipe.category = recipe.name + recipe.prototype = {} + recipe.valid = true + + return recipe +end + +function Player.getRocketPartRecipe(factory) + -- Get rocket silos + local silos = {} + if factory and factory.name then + silos = {game.entity_prototypes[factory.name]} + else + local entity_filters = { + {filter = "type", invert = false, mode = "and", type = "rocket-silo"}, + {filter = "hidden", invert = true, mode = "and"}, + } + silos = game.get_filtered_entity_prototypes(entity_filters) + end + + -- Get rocket silo fixed recipes + local rocket_part_recipes = {} + for _, silo_prototype in pairs(silos) do + if silo_prototype.fixed_recipe then + table.insert(rocket_part_recipes, game.recipe_prototypes[silo_prototype.fixed_recipe]) + end + end + + if #rocket_part_recipes == 0 then + return nil + else + return rocket_part_recipes[1] + end +end + +function Player.buildRocketRecipe(prototype) + if prototype == nil then return nil end + local products = prototype.rocket_launch_products + local ingredients = {} + local item_prototype = ItemPrototype(prototype.name) + local stack_size = item_prototype:stackSize() + table.insert(ingredients, {name=prototype.name, type="item", amount=1, constant=true}) + local recipe = {} + recipe.category = Player.getRocketPartRecipe().category + recipe.enabled = true + recipe.energy = 1 + recipe.force = {} + recipe.group = {name="helmod", order="zzzz"} + recipe.subgroup = {name="helmod-rocket", order="eeee"} + recipe.hidden = false + recipe.ingredients = ingredients + for key, product in pairs(products) do + local product_prototype = ItemPrototype(product.name) + local i=0 + end + recipe.products = products + recipe.localised_description = prototype.localised_description + recipe.localised_name = prototype.localised_name + recipe.name = prototype.name + recipe.prototype = {} + recipe.valid = true + + return recipe +end + +------------------------------------------------------------------------------- +---Return table of recipe +---@return table +function Player.getRocketRecipes() + local recipes = {} + + if Player.getRocketPartRecipe() ~= nil then + for key, item_prototype in pairs(Player.getItemPrototypes()) do + if item_prototype.rocket_launch_products ~= nil and table.size(item_prototype.rocket_launch_products) > 0 then + local recipe = Player.buildRocketRecipe(item_prototype) + recipes[recipe.name] = recipe + end + end + end + return recipes +end + +------------------------------------------------------------------------------- +---Return recipe +---@param name string +---@return table +function Player.getRocketRecipe(name) + local item_prototype = ItemPrototype(name) + local prototype = item_prototype:native() + local recipe = Player.buildRocketRecipe(prototype) + + return recipe +end + +------------------------------------------------------------------------------- +---Return recipe +---@param name string +---@return table +function Player.getBurntRecipe(name) + local recipe_prototype = Player.getRecipe(name) + local recipe = {} + recipe.category = recipe_prototype.category + recipe.enabled = true + recipe.energy = recipe_prototype.energy + recipe.force = {} + recipe.group = {name="helmod", order="zzzz"} + recipe.subgroup = {name="helmod-recipe-burnt", order="ffff"} + recipe.hidden = false + recipe.ingredients = recipe_prototype.ingredients + recipe.products = recipe_prototype.products + recipe.localised_description = recipe_prototype.localised_description + recipe.localised_name = recipe_prototype.localised_name + recipe.name = recipe_prototype.name + recipe.prototype = {} + recipe.valid = true + recipe.hidden_from_player_crafting = recipe_prototype.hidden_from_player_crafting + + return recipe +end + +------------------------------------------------------------------------------- +---Return list of recipes +---@param element_name string +---@param by_ingredient boolean +---@return table +function Player.searchRecipe(element_name, by_ingredient) + local recipes = {} + ---recherche dans les produits des recipes + for key, recipe in pairs(Player.getPlayerRecipes()) do + local elements = recipe.products or {} + if by_ingredient == true then + elements = recipe.ingredients or {} + end + for k, element in pairs(elements) do + if element.name == element_name then + table.insert(recipes,{name=recipe.name, type="recipe"}) + break + end + end + end + ---recherche dans les resource + for key, resource in pairs(Player.getResources()) do + local elements = EntityPrototype(resource):getMineableMiningProducts() + for key, element in pairs(elements) do + if element.name == element_name then + table.insert(recipes,{name=resource.name, type="resource"}) + break + end + end + end + ---recherche dans les fluids + for key, recipe in pairs(Player.getFluidRecipes()) do + if recipe.name == element_name then + table.insert(recipes, {name=recipe.name, type="fluid"}) + end + end + for key, recipe in pairs(Player.getBoilerRecipes()) do + if recipe.name == element_name then + table.insert(recipes, {name=recipe.name, type="boiler"}) + end + end + return recipes +end + +------------------------------------------------------------------------------- +---Return entity prototypes +---@param filters table --{{filter="type", mode="or", invert=false type="transport-belt"}} +---@return table +function Player.getEntityPrototypes(filters) + if filters ~= nil then + return game.get_filtered_entity_prototypes(filters) + end + return game.entity_prototypes +end + +------------------------------------------------------------------------------- +---Return entity prototype types +---@return table +function Player.getEntityPrototypeTypes() + local types = {} + for _,entity in pairs(game.entity_prototypes) do + local type = entity.type + types[type] = true + end + return types +end + +------------------------------------------------------------------------------- +---Return entity prototype +---@param name string +---@return LuaEntityPrototype +function Player.getEntityPrototype(name) + if name == nil then return nil end + return game.entity_prototypes[name] +end + +------------------------------------------------------------------------------- +---Return beacon production +---@return table +function Player.getProductionsBeacon() + local items = {} + local filters = {} + table.insert(filters,{filter="type",type="beacon",mode="or"}) + table.insert(filters,{filter="hidden",invert=true,mode="and"}) + + for _,item in pairs(game.get_filtered_entity_prototypes(filters)) do + table.insert(items,item) + end + return items +end + +------------------------------------------------------------------------------- +---Return resources list +---@return table +function Player.getResources() + local cache_resources = Cache.getData(Player.classname, "resources") + if cache_resources ~= nil then return cache_resources end + local items = {} + for _,item in pairs(game.entity_prototypes) do + if item.name ~= nil and item.resource_category ~= nil then + table.insert(items,item) + end + end + Cache.setData(Player.classname, "resources", items) + return items +end + +------------------------------------------------------------------------------- +---Return item prototypes +---@param filters table --{{filter="fuel-category", mode="or", invert=false,["fuel-category"]="chemical"}} +---@return table +function Player.getItemPrototypes(filters) + if filters ~= nil then + return game.get_filtered_item_prototypes(filters) + end + return game.item_prototypes +end + +------------------------------------------------------------------------------- +---Return item prototype types +---@return table +function Player.getItemPrototypeTypes() + local types = {} + for _,entity in pairs(game.item_prototypes) do + local type = entity.type + types[type] = true + end + return types +end + +------------------------------------------------------------------------------- +---Return item prototype +---@param name string +---@return LuaItemPrototype +function Player.getItemPrototype(name) + if name == nil then return nil end + return game.item_prototypes[name] +end + +------------------------------------------------------------------------------- +---Return fluid prototypes +---@param filters table --{{filter="type", mode="or", invert=false type="transport-belt"}} +---@return table +function Player.getFluidPrototypes(filters) + if filters ~= nil then + return game.get_filtered_fluid_prototypes(filters) + end + return game.fluid_prototypes +end + +------------------------------------------------------------------------------- +---Return fluid prototype types +---@return table +function Player.getFluidPrototypeTypes() + local types = {} + for _,entity in pairs(game.fluid_prototypes) do + local type = entity.type + types[type] = true + end + return types +end + +------------------------------------------------------------------------------- +---Return fluid prototype subgroups +---@return table +function Player.getFluidPrototypeSubgroups() + local types = {} + for _,entity in pairs(game.fluid_prototypes) do + local type = entity.subgroup.name + types[type] = true + end + return types +end + +------------------------------------------------------------------------------- +---Return fluid prototype +---@param name string +---@return LuaFluidPrototype +function Player.getFluidPrototype(name) + if name == nil then return nil end + return game.fluid_prototypes[name] +end + +------------------------------------------------------------------------------- +---Return fluid fuel prototype +---@return table +function Player.getFluidFuelPrototypes() + local filters = {} + table.insert(filters, {filter = "hidden", invert = true, mode = "and"}) + table.insert(filters, {filter = "fuel-value", mode= "and", invert = false, comparison = ">", value = 0}) + + local items = {} + + for _, fluid in spairs(Player.getFluidPrototypes(filters), function(t,a,b) return t[b].fuel_value > t[a].fuel_value end) do + table.insert(items, FluidPrototype(fluid)) + end + return items +end + +------------------------------------------------------------------------------- +---Return items logistic +---@param type string --belt, container or transport +---@return table +function Player.getItemsLogistic(type) + local filters = {} + if type == "inserter" then + filters = {{filter="type", mode="or", invert=false, type="inserter"}} + elseif type == "belt" then + filters = {{filter="type", mode="or", invert=false, type="transport-belt"}} + elseif type == "container" then + filters = {{filter="type", mode="or", invert=false, type="container"}, {filter="minable", mode="and", invert=false}, {filter="type", mode="or", invert=false, type="logistic-container"}, {filter="minable", mode="and", invert=false}} + elseif type == "transport" then + filters = {{filter="type", mode="or", invert=false, type="cargo-wagon"}, {filter="type", mode="or", invert=false, type="logistic-robot"}, {filter="type", mode="or", invert=false, type="car"}} + end + return Player.getEntityPrototypes(filters) +end + +------------------------------------------------------------------------------- +---Return default item logistic +---@param type string --belt, container or transport +---@return table +function Player.getDefaultItemLogistic(type) + local default = User.getParameter(string.format("items_logistic_%s", type)) + if default == nil then + local logistics = Player.getItemsLogistic(type) + if logistics ~= nil then + default = first(logistics).name + User.setParameter(string.format("items_logistic_%s", type), default) + end + end + return default +end + +------------------------------------------------------------------------------- +---Return fluids logistic +---@param type string --pipe, container or transport +---@return table +function Player.getFluidsLogistic(type) + local filters = {} + if type == "pipe" then + filters = {{filter="type", mode="or", invert=false, type="pipe"}} + elseif type == "container" then + filters = {{filter="type", mode="or", invert=false, type="storage-tank"}, {filter="minable", mode="and", invert=false}} + elseif type == "transport" then + filters = {{filter="type", mode="or", invert=false, type="fluid-wagon"}} + end + return Player.getEntityPrototypes(filters) +end + +------------------------------------------------------------------------------- +---Return default fluid logistic +---@param type string --pipe, container or transport +---@return table +function Player.getDefaultFluidLogistic(type) + local default = User.getParameter(string.format("fluids_logistic_%s", type)) + if default == nil then + local logistics = Player.getFluidsLogistic(type) + if logistics ~= nil then + default = first(logistics).name + User.setParameter(string.format("fluids_logistic_%s", type), default) + end + end + return default +end + +------------------------------------------------------------------------------- +---Return number +---@param number string +---@return number +function Player.parseNumber(number) + if number == nil then return 0 end + local value = string.match(number,"[0-9.]*",1) + local power = string.match(number,"[0-9.]*([a-zA-Z]*)",1) + if power == nil then + return tonumber(value) + elseif string.lower(power) == "kw" then + return tonumber(value)*1000 + elseif string.lower(power) == "mw" then + return tonumber(value)*1000*1000 + elseif string.lower(power) == "gw" then + return tonumber(value)*1000*1000*1000 + elseif string.lower(power) == "kj" then + return tonumber(value)*1000 + elseif string.lower(power) == "mj" then + return tonumber(value)*1000*1000 + elseif string.lower(power) == "gj" then + return tonumber(value)*1000*1000*1000 + end +end + +------------------------------------------------------------------------------- +---Return fluid prototypes with temperature +---@param fluid LuaFluidPrototype +---@return table +function Player.getFluidTemperaturePrototypes(fluid) + + -- Find all ways of making this fluid + + local temperatures = {} + + -- Recipes + local filters = {} + ---Hidden fluids do need to be included unfortunately. Only real alternative would be to add a setting. + ---table.insert(filters, {filter = "hidden", invert = true, mode = "and"}) + table.insert(filters, {filter = "has-product-fluid", elem_filters = {{filter = "name", name = fluid.name}}, mode = "and"}) + local prototypes = game.get_filtered_recipe_prototypes(filters) + + for recipe_name, recipe in pairs(prototypes) do + for product_name, product in pairs(recipe.products) do + if product.name == fluid.name and product.temperature then + temperatures[product.temperature] = true + end + end + end + + -- Boilers + local boilers = Player.getBoilers() + + for boiler_name, boiler in pairs(boilers) do + for _, fluidbox in pairs(boiler.fluidbox_prototypes) do + if (fluidbox.production_type == "output") and fluidbox.filter and (fluidbox.filter.name == fluid.name) then + temperatures[boiler.target_temperature] = true + end + end + end + + -- Build result table of FluidPrototype + local items = {} + local item + for temperature, _ in spairs(temperatures, function(t,a,b) return b > a end) do + item = FluidPrototype(fluid) + item:setTemperature(temperature) + table.insert(items, item) + end + + return items +end + +return Player \ No newline at end of file diff --git a/helmod/model/Product.lua b/helmod/model/Product.lua new file mode 100644 index 00000000..cd43ba3c --- /dev/null +++ b/helmod/model/Product.lua @@ -0,0 +1,251 @@ +------------------------------------------------------------------------------- +---Description of the module. +---@class Product +Product = newclass(Prototype,function(base, object) + Prototype.init(base, object) + base.classname = "HMProduct" + base.belt_ratio = 45/0.09375 +end) + +Product.classname = "HMProduct" + +------------------------------------------------------------------------------- +---Return localised name of Prototype +---@return string +function Product:getLocalisedName() + if self.lua_prototype ~= nil then + local localisedName = self.lua_prototype.name + if self.lua_prototype.type == 0 or self.lua_prototype.type == "item" then + local item = Player.getItemPrototype(self.lua_prototype.name) + if item ~= nil then + localisedName = item.localised_name + end + end + if self.lua_prototype.type == 1 or self.lua_prototype.type == "fluid" then + local item = Player.getFluidPrototype(self.lua_prototype.name) + if item ~= nil then + localisedName = item.localised_name + end + end + return localisedName + end + return "unknow" +end + +------------------------------------------------------------------------------- +---Return table key +---@return string +function Product:getTableKey() + if self.lua_prototype ~= nil then + if self.lua_prototype.type == 1 or self.lua_prototype.type == "fluid" then + local T = self.lua_prototype.temperature + if T ~= nil then + return string.format("%s#%s", self.lua_prototype.name,T) + end + local Tmin = self.lua_prototype.minimum_temperature + local Tmax = self.lua_prototype.maximum_temperature + if Tmin ~= nil or Tmax ~= nil then + Tmin = Tmin or -1e300 + Tmax = Tmax or 1e300 + if Tmin < -1e300 and Tmax < 1e300 then + return string.format("%s#inf#%s", self.lua_prototype.name, Tmax) + end + if Tmin > -1e300 and Tmax > 1e300 then + return string.format("%s#%s#inf", self.lua_prototype.name, Tmin) + end + if Tmin > -1e300 and Tmax < 1e300 then + return string.format("%s#%s#%s", self.lua_prototype.name, Tmin, Tmax) + end + end + end + return self.lua_prototype.name + end + return "unknow" +end + +------------------------------------------------------------------------------- +---Has Burnt Result +---@return boolean +function Product:hasBurntResult() + if self.lua_prototype ~= nil then + if self.lua_prototype.type == 0 or self.lua_prototype.type == "item" then + local item = Player.getItemPrototype(self.lua_prototype.name) + return item.burnt_result ~= nil + end + end + return false +end + +------------------------------------------------------------------------------- +---Clone prototype model +---@return table +function Product:clone() + local prototype = { + type = self.lua_prototype.type, + name = self.lua_prototype.name, + amount = self:getElementAmount(), + state = self.lua_prototype.state, + temperature = self.lua_prototype.temperature, + minimum_temperature = self.lua_prototype.minimum_temperature, + maximum_temperature = self.lua_prototype.maximum_temperature, + burnt = self.lua_prototype.burnt, + constant = self.lua_prototype.constant + } + return prototype +end + +------------------------------------------------------------------------------- +---Get amount of element +---@see http://lua-api.factorio.com/latest/Concepts.html#Product +---@return number +function Product:getElementAmount() + local element = self.lua_prototype + if element == nil then return 0 end + + if element.amount ~= nil then + ---In 0.17, it seems probability can be used with just 'amount' and it + ---doesn't need to use amount_min/amount_max + if element.probability ~= nil then + return element.amount * element.probability + else + return element.amount + end + end + + if element.probability ~= nil and element.amount_min ~= nil and element.amount_max ~= nil then + return ((element.amount_min + element.amount_max) * element.probability / 2) + end + + return 0 +end + +------------------------------------------------------------------------------- +---Get amount of element for bonus +---@return number +function Product:getBonusAmount() + local element = self.lua_prototype + if element == nil then return 0 end + + local catalyst_amount = element.catalyst_amount or 0 + local probability = element.probability or 1 + local amount = 0 + ---If amount not specified, amount_min, amount_max and probability must all be specified. + ---Minimal amount of the item or fluid to give. Has no effect when amount is specified. + ---Maximum amount of the item or fluid to give. Has no effect when amount is specified. + if element.probability ~= nil and element.amount_min ~= nil and element.amount_max ~= nil then + amount = (element.amount_min + element.amount_max) / 2 + end + + if element.amount ~= nil then + amount = element.amount + end + if amount >= catalyst_amount then + return (amount - catalyst_amount) * probability + end + return 0 +end + +------------------------------------------------------------------------------- +---Get type of element (item or fluid) +---@return string +function Product:getType() + if self.lua_prototype.type == 1 or self.lua_prototype.type == "fluid" then return "fluid" end + return "item" +end + +------------------------------------------------------------------------------- +---Get amount of element +---@param recipe table +---@return number +function Product:getAmount(recipe) + local amount = self:getElementAmount() + local bonus_amount = self:getBonusAmount() ---if there are no catalyst amount = bonus_amount + if recipe == nil then + return amount + end + return amount + bonus_amount * self:getProductivityBonus(recipe) +end + +------------------------------------------------------------------------------- +---Count product +---@param model table +---@param recipe table +---@return number +function Product:countProduct(model, recipe) + local amount = self:getElementAmount() + local bonus_amount = self:getBonusAmount() ---if there are no catalyst amount = bonus_amount + return (amount + bonus_amount * self:getProductivityBonus(recipe) ) * recipe.count +end + +------------------------------------------------------------------------------- +---Count ingredient +---@param model table +---@param recipe table +---@return number +function Product:countIngredient(model, recipe) + local amount = self:getElementAmount() + return amount * recipe.count +end + +------------------------------------------------------------------------------- +---Count container +---@param count number +---@param container string +---@param time number +---@return number +function Product:countContainer(count, container, time) + if count == nil then return 0 end + if self.lua_prototype.type == 0 or self.lua_prototype.type == "item" then + local entity_prototype = EntityPrototype(container) + if entity_prototype:getType() == "inserter" then + local inserter_capacity = entity_prototype:getInserterCapacity() + local inserter_speed = entity_prototype:getInserterRotationSpeed() + ---temps pour 360οΏ½ t=360/360*inserter_speed + local inserter_time = 1 / inserter_speed + return count * inserter_time / (inserter_capacity * (time or 1)) + elseif entity_prototype:getType() == "transport-belt" then + ---ratio = item_per_s / speed_belt (blue belt) + local belt_speed = entity_prototype:getBeltSpeed() + return count / (belt_speed * self.belt_ratio * (time or 1)) + elseif entity_prototype:getType() ~= "logistic-robot" then + local cargo_wagon_size = entity_prototype:getInventorySize(1) + if cargo_wagon_size == nil then return 0 end + if entity_prototype:getInventorySize(2) ~= nil and entity_prototype:getInventorySize(2) > entity_prototype:getInventorySize(1) then + cargo_wagon_size = entity_prototype:getInventorySize(2) + end + local stack_size = ItemPrototype(self.lua_prototype.name):stackSize() + if cargo_wagon_size * stack_size == 0 then return 0 end + return count / (cargo_wagon_size * stack_size) + else + local cargo_wagon_size = entity_prototype:native().max_payload_size + (Player.getForce().worker_robots_storage_bonus or 0 ) + return count / cargo_wagon_size + end + end + if self.lua_prototype.type == 1 or self.lua_prototype.type == "fluid" then + local entity_prototype = EntityPrototype(container) + if entity_prototype:getType() == "pipe" then + local fluids_logistic_maximum_flow = User.getParameter("fluids_logistic_maximum_flow") + return count / (fluids_logistic_maximum_flow or defines.constant.logistic_flow_default) + else + local cargo_wagon_size = EntityPrototype(container):getFluidCapacity() + if cargo_wagon_size == 0 then return 0 end + return count / cargo_wagon_size + end + end +end + +------------------------------------------------------------------------------- +---Get the productivity bonus of the recipe +---@param recipe table +---@return number +function Product:getProductivityBonus(recipe) + if recipe.isluaobject or recipe.factory == nil or recipe.factory.effects == nil then return 1 end + local productivity = recipe.factory.effects.productivity + local capped_time = recipe.time / recipe.factory.speed + local factory_speed = recipe.factory.speed_total or 1 + local adjusted_time = recipe.time / factory_speed + local speed_adjustment = capped_time / adjusted_time + productivity = productivity * speed_adjustment + + return productivity +end \ No newline at end of file diff --git a/helmod/model/Prototype.lua b/helmod/model/Prototype.lua new file mode 100644 index 00000000..f1acd5df --- /dev/null +++ b/helmod/model/Prototype.lua @@ -0,0 +1,54 @@ +------------------------------------------------------------------------------- +---@class Prototype +Prototype = newclass(function(base, lua_prototype) + base.lua_prototype = lua_prototype +end) + +------------------------------------------------------------------------------- +---Return factorio player +---@return LuaPrototype +function Prototype:native() + return self.lua_prototype +end + +------------------------------------------------------------------------------- +---Return valid +---@return boolean +function Prototype:getValid() + if self.lua_prototype == nil then return false end + return self.lua_prototype.valid +end + +------------------------------------------------------------------------------- +---Return localised name +---@return string +function Prototype:getLocalisedName() + if self.lua_prototype ~= nil then + return self.lua_prototype.localised_name + end + return "unknow" +end + +------------------------------------------------------------------------------- +---Return type +---@return string +function Prototype:getType() + if self.lua_prototype == nil then return nil end + return self.lua_prototype.type +end + +------------------------------------------------------------------------------- +---Return group +---@return table +function Prototype:getGroup() + if self.lua_prototype == nil then return {} end + return self.lua_prototype.group +end + +------------------------------------------------------------------------------- +---Return subgroup +---@return table +function Prototype:getSubgroup() + if self.lua_prototype == nil then return {} end + return self.lua_prototype.subgroup +end \ No newline at end of file diff --git a/helmod/model/PrototypeFilter.lua b/helmod/model/PrototypeFilter.lua new file mode 100644 index 00000000..bd51dbad --- /dev/null +++ b/helmod/model/PrototypeFilter.lua @@ -0,0 +1,109 @@ +require "core.Object" + +------------------------------------------------------------------------------- +---@class PrototypeFilter +PrototypeFilter = newclass(Object,function(base,type) + Object.init(base,"PrototypeFilter") + base.type = type + base.filters = {} +end) + +------------------------------------------------------------------------------- +---Add filter +---@param filter string +---@param options table +function PrototypeFilter:addFilter(filter, options) + if self.filters[filter] == nil then self.filters[filter] = {} end + if options ~= nil then + if type(options) == "string" then + self.filters[filter] = options + else + for key, option in pairs(options) do + self.filters[filter][key] = option + end + end + end +end + +------------------------------------------------------------------------------- +---Get filters +---@return table +function PrototypeFilter:getFilters() + local filters = {} + if self.filters ~= nil and table.size(self.filters) > 0 then + for key,options in spairs(self.filters,function(t,a,b) return b > a end) do + table.insert(filters,key) + end + end + return filters +end + +------------------------------------------------------------------------------- +---Get options +---@param filter string +---@return table +function PrototypeFilter:getOptions(filter) + local options = {} + local filters = self.filters + if filters[filter] ~= nil then + if type(filters[filter]) == "string" then + return filters[filter] + elseif table.size(filters[filter]) > 0 then + for key,option in spairs(filters[filter],function(t,a,b) return b > a end) do + table.insert(options,key) + end + end + end + return options +end + +------------------------------------------------------------------------------- +---Add mapping +---@param mapping table +function PrototypeFilter:addMapping(mapping) + self.mapping = mapping +end + +------------------------------------------------------------------------------- +---Set Game Function +---@param game_function function +function PrototypeFilter:setGameFunction(game_function) + self.game_function = game_function +end + +------------------------------------------------------------------------------- +---Get elements +---@param filters table +---@return table +function PrototypeFilter:getElements(filters) + if self.mapping ~= nil then + for key,filter in pairs(filters) do + for key, name in pairs(self.mapping) do + filter[name] = filter[key] + filter[key] = nil + end + end + end + if self.type == "entity" then + return game.get_filtered_entity_prototypes(filters) + elseif self.type == "item" then + return game.get_filtered_item_prototypes(filters) + elseif self.type == "equipment" then + return game.get_filtered_equipment_prototypes(filters) + elseif self.type == "mod" then + return game.get_filtered_mod_setting_prototypes(filters) + elseif self.type == "achievement" then + return game.get_filtered_achievement_prototypes(filters) + elseif self.type == "tile" then + return game.get_filtered_tile_prototypes(filters) + elseif self.type == "decorative" then + return game.get_filtered_decorative_prototypes(filters) + elseif self.type == "fluid" then + return game.get_filtered_fluid_prototypes(filters) + elseif self.type == "recipe" then + return game.get_filtered_recipe_prototypes(filters) + elseif self.type == "technology" then + return game.get_filtered_technology_prototypes(filters) + end + return {} +end \ No newline at end of file diff --git a/helmod/model/PrototypeFilters.lua b/helmod/model/PrototypeFilters.lua new file mode 100644 index 00000000..3963b5dd --- /dev/null +++ b/helmod/model/PrototypeFilters.lua @@ -0,0 +1,310 @@ +require "model.PrototypeFilter" +------------------------------------------------------------------------------- +---Description of the module. +---@class PrototypeFilters +local PrototypeFilters = { + classname = "HMPrototypeFilters" +} + +local prototype_filters = {} +------------------------------------------------------------------------------- +---Get types +---@return table +function PrototypeFilters.getTypes() + local types = {} + for type,_ in pairs(prototype_filters) do + table.insert(types, type) + end + return types +end + +------------------------------------------------------------------------------- +---Get modes +---@return table +function PrototypeFilters.getModes() + local modes = {"or","and"} + return modes +end + +------------------------------------------------------------------------------- +---Get inverts +---@return table +function PrototypeFilters.getInverts() + local modes = {"false","true"} + return modes +end + +------------------------------------------------------------------------------- +---Get comparison +---@return table +function PrototypeFilters.getComparison() + local modes = {"<", ">", "=", "β‰₯", "≀", "β‰ "} + return modes +end + +------------------------------------------------------------------------------- +---Add filter type +---@param filter string +---@return PrototypeFilter +function PrototypeFilters.addFilterType(filter) + prototype_filters[filter] = PrototypeFilter(filter) + return prototype_filters[filter] +end + +------------------------------------------------------------------------------- +---Get filter type +---@param filter_type string +---@return PrototypeFilter +function PrototypeFilters.getFilterType(filter_type) + return prototype_filters[filter_type] +end + +------------------------------------------------------------------------------- +---Get Collision Mask +---@return table +function PrototypeFilters.getCollisionMask() + local collision_mask = {} + table.insert(collision_mask, "ground-tile") + table.insert(collision_mask, "water-tile") + table.insert(collision_mask, "resource-layer") + table.insert(collision_mask, "doodad-layer") + table.insert(collision_mask, "floor-layer") + table.insert(collision_mask, "item-layer") + table.insert(collision_mask, "ghost-layer") + table.insert(collision_mask, "object-layer") + table.insert(collision_mask, "player-layer") + table.insert(collision_mask, "train-layer") + table.insert(collision_mask, "layer-11") + table.insert(collision_mask, "layer-12") + table.insert(collision_mask, "layer-13") + table.insert(collision_mask, "layer-14") + table.insert(collision_mask, "layer-15") + table.insert(collision_mask, "not-setup") + table.insert(collision_mask, "not-colliding-with-itself") + table.insert(collision_mask, "consider-tile-transitions") + table.insert(collision_mask, "colliding-with-tiles-only") + return collision_mask +end + +------------------------------------------------------------------------------- +---Get Collision Mask Mode +---@return table +function PrototypeFilters.getCollisionMaskMode() + local collision_mask_mode = {} + table.insert(collision_mask_mode, "collides") + table.insert(collision_mask_mode, "layers-equals") + return collision_mask_mode +end + +------------------------------------------------------------------------------- +---initialization +function PrototypeFilters.initialization() + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterEntity = PrototypeFilters.addFilterType("entity") + PrototypeFilterEntity:addMapping({["crafting-category"]="crafting_category"}) + + PrototypeFilterEntity:addFilter("type", Player.getEntityPrototypeTypes()) + PrototypeFilterEntity:addFilter("name") + PrototypeFilterEntity:addFilter("flying-robot") + PrototypeFilterEntity:addFilter("robot-with-logistics-interface") + PrototypeFilterEntity:addFilter("rail") + PrototypeFilterEntity:addFilter("particle") + PrototypeFilterEntity:addFilter("ghost") + PrototypeFilterEntity:addFilter("explosion") + PrototypeFilterEntity:addFilter("vehicle") + PrototypeFilterEntity:addFilter("crafting-machine") + PrototypeFilterEntity:addFilter("rolling-stock") + PrototypeFilterEntity:addFilter("turret") + PrototypeFilterEntity:addFilter("transport-belt-connectable") + PrototypeFilterEntity:addFilter("wall-connectable") + PrototypeFilterEntity:addFilter("buildable") + PrototypeFilterEntity:addFilter("placable-in-editor") + PrototypeFilterEntity:addFilter("clonable") + PrototypeFilterEntity:addFilter("selectable") + PrototypeFilterEntity:addFilter("hidden") + PrototypeFilterEntity:addFilter("entity-with-health") + PrototypeFilterEntity:addFilter("building") + PrototypeFilterEntity:addFilter("fast-replaceable") + PrototypeFilterEntity:addFilter("uses-direction") + PrototypeFilterEntity:addFilter("minable") + PrototypeFilterEntity:addFilter("circuit-connectable") + PrototypeFilterEntity:addFilter("autoplace") + PrototypeFilterEntity:addFilter("blueprintable") + PrototypeFilterEntity:addFilter("item-to-place") + PrototypeFilterEntity:addFilter("collision-mask") + + local entity_flag={} + entity_flag["not-rotatable"]=true + entity_flag["placeable-neutral"]=true + entity_flag["placeable-player"]=true + entity_flag["placeable-enemy"]=true + entity_flag["placeable-off-grid"]=true + entity_flag["player-creation"]=true + entity_flag["building-direction-8-way"]=true + entity_flag["filter-directions"]=true + entity_flag["fast-replaceable-no-build-while-moving"]=true + entity_flag["breaths-air"]=true + entity_flag["not-repairable"]=true + entity_flag["not-on-map"]=true + entity_flag["not-deconstructable"]=true + entity_flag["not-blueprintable"]=true + entity_flag["hide-from-bonus-gui"]=true + entity_flag["hide-alt-info"]=true + entity_flag["fast-replaceable-no-cross-type-while-moving"]=true + entity_flag["no-gap-fill-while-building"]=true + entity_flag["not-flammable"]=true + entity_flag["no-automated-item-removal"]=true + entity_flag["no-automated-item-insertion"]=true + entity_flag["no-copy-paste"]=true + entity_flag["not-selectable-in-game"]=true + entity_flag["not-upgradable"]=true + PrototypeFilterEntity:addFilter("flag", entity_flag) + PrototypeFilterEntity:addFilter("build-base-evolution-requirement", "comparison") + PrototypeFilterEntity:addFilter("selection-priority", "comparison") + PrototypeFilterEntity:addFilter("emissions", "comparison") + PrototypeFilterEntity:addFilter("crafting-category", game.recipe_category_prototypes) + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterItem = PrototypeFilters.addFilterType("item") + PrototypeFilterItem:addMapping(nil) + PrototypeFilterItem:addFilter("type", Player.getItemPrototypeTypes()) + PrototypeFilterItem:addFilter("name") + PrototypeFilterItem:addFilter("tool") + PrototypeFilterItem:addFilter("mergeable") + PrototypeFilterItem:addFilter("item-with-inventory") + PrototypeFilterItem:addFilter("selection-tool") + PrototypeFilterItem:addFilter("item-with-label") + PrototypeFilterItem:addFilter("fuel") + PrototypeFilterItem:addFilter("place-as-tile") + PrototypeFilterItem:addFilter("place-result") + PrototypeFilterItem:addFilter("placed-as-equipment-result") + PrototypeFilterItem:addFilter("burnt-result") + PrototypeFilterItem:addFilter("show-in-blueprint-library") + + local item_flag = {} + item_flag["hidden"] = true + item_flag["hide-from-bonus-gui"] = true + item_flag["hide-from-fuel-tooltip"] = true + item_flag["not-stackable"] = true + item_flag["can-extend-inventory"] = true + item_flag["primary-place-result"] = true + item_flag["mod-openable"] = true + item_flag["only-in-cursor"] = true + PrototypeFilterItem:addFilter("flag", item_flag) + PrototypeFilterItem:addFilter("subgroup", game.item_subgroup_prototypes) + PrototypeFilterItem:addFilter("fuel-category", game.fuel_category_prototypes) + PrototypeFilterItem:addFilter("stack-size", "comparison") + PrototypeFilterItem:addFilter("default-request-amount", "comparison") + PrototypeFilterItem:addFilter("wire-count", "comparison") + PrototypeFilterItem:addFilter("fuel-value", "comparison") + PrototypeFilterItem:addFilter("fuel-acceleration-multiplier", "comparison") + PrototypeFilterItem:addFilter("fuel-top-speed-multiplier", "comparison") + PrototypeFilterItem:addFilter("fuel-emissions-multiplier", "comparison") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterEquipement = PrototypeFilters.addFilterType("equipment") + PrototypeFilterEquipement:addMapping(nil) + PrototypeFilterEquipement:addFilter("type") + PrototypeFilterEquipement:addFilter("item-to-place") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterModSetting = PrototypeFilters.addFilterType("mod") + PrototypeFilterModSetting:addMapping({["setting-type"]="type"}) + PrototypeFilterModSetting:addFilter("type") + PrototypeFilterModSetting:addFilter("mod") + local setting_type = {} + setting_type["startup"] = true + setting_type["runtime-global"] = true + setting_type["runtime-per-user"] = true + PrototypeFilterModSetting:addFilter("setting-type", setting_type) + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterAchievement = PrototypeFilters.addFilterType("achievement") + PrototypeFilterAchievement:addMapping(nil) + PrototypeFilterAchievement:addFilter("type") + PrototypeFilterAchievement:addFilter("allowed-without-fight") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterTile = PrototypeFilters.addFilterType("tile") + PrototypeFilterTile:addMapping(nil) + PrototypeFilterTile:addFilter("minable") + PrototypeFilterTile:addFilter("autoplace") + PrototypeFilterTile:addFilter("blueprintable") + PrototypeFilterTile:addFilter("item-to-place") + PrototypeFilterTile:addFilter("collision-mask") + PrototypeFilterTile:addFilter("walking-speed-modifier", "comparison") + PrototypeFilterTile:addFilter("vehicle-friction-modifier", "comparison") + PrototypeFilterTile:addFilter("decorative-removal-probability", "comparison") + PrototypeFilterTile:addFilter("emissions", "comparison") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterDecorative = PrototypeFilters.addFilterType("decorative") + PrototypeFilterDecorative:addMapping(nil) + PrototypeFilterDecorative:addFilter("decal") + PrototypeFilterDecorative:addFilter("autoplace") + PrototypeFilterDecorative:addFilter("collision-mask") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterFluid = PrototypeFilters.addFilterType("fluid") + PrototypeFilterFluid:addMapping(nil) + PrototypeFilterFluid:addFilter("name") + PrototypeFilterFluid:addFilter("hidden") + PrototypeFilterFluid:addFilter("subgroup", Player.getFluidPrototypeSubgroups()) + PrototypeFilterFluid:addFilter("default-temperature", "comparison") + PrototypeFilterFluid:addFilter("max-temperature", "comparison") + PrototypeFilterFluid:addFilter("heat-capacity", "comparison") + PrototypeFilterFluid:addFilter("fuel-value", "comparison") + PrototypeFilterFluid:addFilter("emissions-multiplier", "comparison") + PrototypeFilterFluid:addFilter("gas-temperature", "comparison") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterRecipe = PrototypeFilters.addFilterType("recipe") + PrototypeFilterRecipe:addMapping(nil) + PrototypeFilterRecipe:addFilter("name") + PrototypeFilterRecipe:addFilter("enabled") + PrototypeFilterRecipe:addFilter("hidden") + PrototypeFilterRecipe:addFilter("hidden-from-flow-stats") + PrototypeFilterRecipe:addFilter("hidden-from-player-crafting") + PrototypeFilterRecipe:addFilter("allow-as-intermediate") + PrototypeFilterRecipe:addFilter("allow-intermediates") + PrototypeFilterRecipe:addFilter("allow-decomposition") + PrototypeFilterRecipe:addFilter("always-show-made-in") + PrototypeFilterRecipe:addFilter("always-show-products") + PrototypeFilterRecipe:addFilter("show-amount-in-title") + PrototypeFilterRecipe:addFilter("has-ingredients") + PrototypeFilterRecipe:addFilter("has-products") + PrototypeFilterRecipe:addFilter("subgroup", game.item_subgroup_prototypes) + PrototypeFilterRecipe:addFilter("category", game.recipe_category_prototypes) + PrototypeFilterRecipe:addFilter("energy", "comparison") + PrototypeFilterRecipe:addFilter("emissions-multiplier", "comparison") + PrototypeFilterRecipe:addFilter("request-paste-multiplier", "comparison") + PrototypeFilterRecipe:addFilter("overload-multiplier", "comparison") + + ------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- + local PrototypeFilterTechnology = PrototypeFilters.addFilterType("technology") + PrototypeFilterTechnology:addMapping({["research-unit-ingredient"]="ingredient"}) + PrototypeFilterTechnology:addFilter("enabled") + PrototypeFilterTechnology:addFilter("hidden") + PrototypeFilterTechnology:addFilter("upgrade") + PrototypeFilterTechnology:addFilter("visible-when-disabled") + PrototypeFilterTechnology:addFilter("has-effects") + PrototypeFilterTechnology:addFilter("has-prerequisites") + PrototypeFilterTechnology:addFilter("research-unit-ingredient", PrototypeFilter("item"):getElements({{filter="type", type="tool"}})) + PrototypeFilterTechnology:addFilter("level", "comparison") + PrototypeFilterTechnology:addFilter("max-level", "comparison") + PrototypeFilterTechnology:addFilter("time", "comparison") + +end + +return PrototypeFilters diff --git a/helmod/model/RecipePrototype.lua b/helmod/model/RecipePrototype.lua new file mode 100644 index 00000000..2a40899a --- /dev/null +++ b/helmod/model/RecipePrototype.lua @@ -0,0 +1,578 @@ +--- +---Description of the module. +---@class RecipePrototype +RecipePrototype = newclass(Prototype, function(base, object, object_type) + base.classname = "HMRecipePrototype" + base.is_voider = nil + if object ~= nil then + if type(object) == "string" then + base.object_name = object + base.lua_type = object_type + elseif object.name ~= nil then + base.object_name = object.name + base.lua_type = object_type or object.type + end + if base.lua_type == nil or base.lua_type == "recipe" then + Prototype.init(base, Player.getRecipe(base.object_name)) + base.lua_type = "recipe" + elseif base.lua_type == "recipe-burnt" then + Prototype.init(base, Player.getBurntRecipe(base.object_name)) + elseif base.lua_type == "energy" then + Prototype.init(base, Player.getEnergyRecipe(base.object_name)) + elseif base.lua_type == "resource" then + Prototype.init(base, Player.getResourceRecipe(base.object_name)) + elseif base.lua_type == "fluid" then + Prototype.init(base, Player.getFluidRecipe(base.object_name)) + elseif base.lua_type == "boiler" then + local recipe = Player.getBoilerRecipe(base.object_name) + Prototype.init(base, recipe) + base.input_fluid_name = recipe.input_fluid_name + base.output_fluid_temperature = recipe.output_fluid_temperature + base.output_fluid_name = recipe.output_fluid_name + elseif base.lua_type == "technology" then + Prototype.init(base, Player.getTechnology(base.object_name)) + elseif base.lua_type == "rocket" then + local recipe = Player.getRocketRecipe(base.object_name) + Prototype.init(base, recipe) + end + if base.lua_prototype == nil then + Logging:error("HMRecipePrototype", "recipe not found", type(object), object) + Logging:line("HMRecipePrototype", 3) + Logging:line("HMRecipePrototype", 4) + Logging:line("HMRecipePrototype", 5) + Logging:line("HMRecipePrototype", 6) + end + end +end) + +------------------------------------------------------------------------------- +---Try to find prototype +---@param object table --prototype +---@return RecipePrototype +function RecipePrototype.find(object) + local object_name = nil + if type(object) == "string" then + object_name = object + elseif object.name ~= nil then + object_name = object.name + end + local lua_prototype = Player.getPlayerRecipe(object_name) + local lua_type = "recipe" + if lua_prototype == nil then + lua_prototype = Player.getPlayerTechnology(object_name) + lua_type = "technology" + end + if lua_prototype == nil then + lua_prototype = Player.getEntityPrototype(object_name) + lua_type = "resource" + end + if lua_prototype == nil then + lua_prototype = Player.getFluidPrototype(object_name) + lua_type = "fluid" + end + return RecipePrototype(lua_prototype, lua_type) +end + +------------------------------------------------------------------------------- +---Return type Prototype +---@return string +function RecipePrototype:getType() + return self.lua_type +end + +------------------------------------------------------------------------------- +---Return if recipe void ingredient +---for flare stack/clarifier ect... +---@return boolean +function RecipePrototype:isVoid() + if self.is_voider == nil then self:getProducts() end + return self.is_voider +end + +------------------------------------------------------------------------------- +---Return category of Prototype +---@return string +function RecipePrototype:getCategory() + if self.lua_type == "technology" then + return "technology" + end + if self.lua_prototype ~= nil then + return self.lua_prototype.category or "crafting" + end + return nil +end + +------------------------------------------------------------------------------- +---Return products array of Prototype (duplicates are combined into one entry) +---@param factory table +---@return table +function RecipePrototype:getProducts(factory) + local raw_products = self:getRawProducts(factory) + ---if recipe is a voider + if #raw_products == 1 and Product(raw_products[1]):getElementAmount() == 0 then + self.is_voider = true + return {} + else + self.is_voider = false + end + local factory_prototype = EntityPrototype(factory) + local lua_products = {} + for r, raw_product in pairs(raw_products) do + local product_id = raw_product.type .. "/" .. raw_product.name + if raw_product.temperature then + product_id = product_id .. "#" .. raw_product.temperature + end + if lua_products[product_id] ~= nil then + ---make a new product table for the combined result + ---combine product amounts, averaging in variable and probabilistic outputs + local amount_a = Product(lua_products[product_id]):getElementAmount() + local amount_b = Product(raw_product):getElementAmount() + lua_products[product_id] = { type = raw_product.type, name = raw_product.name, amount = amount_a + amount_b } + else + lua_products[product_id] = raw_product + end + if self.lua_type == "recipe-burnt" and raw_product.type == "item" then + local item = ItemPrototype(raw_product.name) + local burnt_result = item:getBurntResult() + if burnt_result ~= nil then + local burnt_id = burnt_result.type .. "/" .. burnt_result.name + lua_products[burnt_id] = { type = burnt_result.type, name = burnt_result.name, + amount = lua_products[product_id].amount } + end + end + if factory ~= nil and factory_prototype:getType() == "boiler" then + local fluid_production = factory_prototype:getFluidProductionFilter() + if lua_products[product_id] ~= nil and fluid_production.name == raw_product.name then + lua_products[product_id].amount = factory_prototype:getFluidProduction() + lua_products[product_id].temperature = factory_prototype:getTargetTemperature() + end + end + end + + ---convert map to array + local raw_products = {} + for _, lua_product in pairs(lua_products) do + table.insert(raw_products, lua_product) + end + + if self.lua_type == "energy" then + if factory_prototype:getType() == "reactor" then + local bonus = factory_prototype:getNeighbourBonus() + for _, raw_product in pairs(raw_products) do + if raw_product.name == "steam-heat" then + raw_product.amount = raw_product.amount * (1 + bonus) + end + end + end + end + + ---insert burnt + if factory ~= nil and factory_prototype:getEnergyType() == "burner" then + local energy_prototype = factory_prototype:getEnergySource() + if energy_prototype ~= nil and energy_prototype:getFuelCount() ~= nil then + local fuel_count = energy_prototype:getFuelCount() + if fuel_count ~= nil and fuel_count.type == "item" then + local item = ItemPrototype(fuel_count.name) + local burnt_result = item:getBurntResult() + if burnt_result ~= nil then + local factor = 1 + if self.lua_type ~= "energy" then + local consumption_effect = 1 + if factory.effects ~= nil then + consumption_effect = 1 + (factory.effects.consumption or 0) + end + factor = self:getEnergy() * consumption_effect / factory.speed + end + table.insert(raw_products, + { type = burnt_result.type, name = burnt_result.name, amount = fuel_count.count * factor, + catalyst_amount = fuel_count.count * factor }) + end + end + end + end + + return raw_products +end + +------------------------------------------------------------------------------- +---Return products array of Prototype (may contain duplicate products) +---@param factory table +---@return table +function RecipePrototype:getRawProducts(factory) + if self.lua_prototype ~= nil then + if self.lua_type == "energy" then + return self:getEnergyProducts(factory) + elseif self.lua_type == "technology" then + return { { name = self.lua_prototype.name, type = "technology", amount = 1 } } + else + return self.lua_prototype.products + end + end + return {} +end + +------------------------------------------------------------------------------- +---Return products array of Prototype (may contain duplicate products) +---@param factory table +---@return table +function RecipePrototype:getEnergyProducts(factory) + if self.lua_prototype ~= nil then + local products = {} + local prototype + if factory ~= nil then + prototype = EntityPrototype(factory) + else + prototype = EntityPrototype(self.lua_prototype.name) + end + if prototype:getType() == "solar-panel" or prototype:getType() == "electric-energy-interface" then + local amount = prototype:getEnergyProduction() + if amount > 0 then + local product = { name = "energy", type = "energy", amount = amount } + table.insert(products, product) + end + elseif prototype:getType() == "accumulator" then + local energy_prototype = prototype:getEnergySource() + local capacity = energy_prototype:getBufferCapacity() + ---vanilla day=25000,dusk=5000,night=2500,dawn=5000 + local day, dusk, night, dawn = Player.getGameDay() + local t1 = day - dusk - night - dawn + local t2 = night + local t3 = (dusk + dawn) / 2 + local T = day + ---E_acc = P * (t2 + t2 + 2 * (t3 * P/P')) / 2 = P * (t2 + t3*P/P') + ---P' = P * T / (t1 + t3) + ---@see https://forums.factorio.com/viewtopic.php?f=5&t=5594 + local R = 60 / (t2 + t3 * (t1 + t3) / T) + local amount = capacity * R + + local product = { name = "energy", type = "energy", amount = amount } + table.insert(products, product) + elseif prototype:getType() == "generator" or prototype:getType() == "burner-generator" then + local amount = prototype:getEnergyProduction() + local product = { name = "energy", type = "energy", amount = amount } + table.insert(products, product) + elseif prototype:getType() == "reactor" then + local amount = prototype:getEnergyProduction() + local product = { name = "steam-heat", type = "energy", amount = amount } + table.insert(products, product) + end + return products + end + return {} +end + +------------------------------------------------------------------------------- +---Return products array of Prototype (may contain duplicate products) +---@return table +function RecipePrototype:getRawIngredients() + if self.lua_prototype ~= nil then + if self.lua_type == "recipe" or self.lua_type == "recipe-burnt" or self.lua_type == "resource" or self.lua_type == "fluid" or self.lua_type == "rocket" or self.lua_type == "boiler" then + return self.lua_prototype.ingredients + elseif self.lua_type == "technology" then + return self.lua_prototype.research_unit_ingredients + elseif self.lua_type == "energy" then + local ingredients = {} + local prototype = EntityPrototype(self.lua_prototype.name) + + if prototype:getType() == "accumulator" then + local energy_prototype = prototype:getEnergySource() + local capacity = energy_prototype:getBufferCapacity() + ---vanilla day=25000,dusk=5000,night=2500,dawn=5000 + local day, dusk, night, dawn = Player.getGameDay() + local t1 = day - dusk - night - dawn + local t2 = night + local t3 = (dusk + dawn) / 2 + local T = day + ---E_acc = P * (t2 + t2 + 2 * (t3 * P/P')) / 2 = P * (t2 + t3*P/P') + ---P' = P * T / (t1 + t3) + ---@see https://forums.factorio.com/viewtopic.php?f=5&t=5594 + local R = 60 / (t2 + t3 * (t1 + t3) / T) + local amount = capacity * R * T / (t1 + t3) + local ingredient = { name = "energy", type = "energy", amount = amount } + table.insert(ingredients, ingredient) + end + + local energy_type = prototype:getEnergyTypeInput() + if prototype:getType() ~= "accumulator" and energy_type == "electric" then + local amount = prototype:getEnergyConsumption() + if amount > 0 then + local ingredient = { name = "energy", type = "energy", amount = amount } + table.insert(ingredients, ingredient) + end + elseif energy_type == "heat" then + local amount = prototype:getEnergyConsumption() + local ingredient = { name = "steam-heat", type = "energy", amount = amount } + table.insert(ingredients, ingredient) + end + + return ingredients + end + end + return {} +end + +------------------------------------------------------------------------------- +---Return solid ingredient number of Prototype +---@return number +function RecipePrototype:getIngredientCount() + local count = 0 + local ingredients = self:getIngredients() + if self.lua_prototype ~= nil and ingredients ~= nil then + for _, lua_ingredient in pairs(ingredients) do + if Product(lua_ingredient):getType() == "item" then + count = count + 1 + end + end + end + return count +end + +function RecipePrototype:getRocketPenalty(factory) + local factory_prototype = EntityPrototype(factory) + local rocket_prototype = factory_prototype:native() + local recipe_part_name = rocket_prototype.fixed_recipe + local rocket_part_prototype = RecipePrototype(recipe_part_name):native() + local factory_speed = factory.speed_total + local cycles_time = rocket_part_prototype.energy * rocket_prototype.rocket_parts_required / factory_speed + cycles_time = cycles_time / (1 + factory.effects.productivity) + local total_time = defines.constant.rocket_deploy_delay + cycles_time + local factor = cycles_time / total_time + return factor +end + +function RecipePrototype:getRocketEnergy(factory) + local factory_prototype = EntityPrototype(factory) + local rocket_prototype = factory_prototype:native() + local recipe_part_name = rocket_prototype.fixed_recipe + local rocket_part_prototype = RecipePrototype(recipe_part_name):native() + local rocket_energy = rocket_part_prototype.energy * rocket_prototype.rocket_parts_required + return rocket_energy +end + +------------------------------------------------------------------------------- +---Return ingredients array of Prototype +---@param factory table +---@return table +function RecipePrototype:getIngredients(factory) + local raw_ingredients = self:getRawIngredients() + if self.lua_prototype ~= nil then + local factory_prototype = EntityPrototype(factory) + local energy_prototype = factory_prototype:getEnergySource() + local energy_type = factory_prototype:getEnergyTypeInput() + + if factory_prototype:getType() == "offshore-pump" then + return {} + end + + if self.lua_type == "boiler" then + local name = factory_prototype:getFluidConsumptionFilter() + if name ~= nil then + local amount = factory_prototype:getFluidProduction() + local ingredient = { name = name, type = "fluid", amount = amount } + raw_ingredients = {} + table.insert(raw_ingredients, ingredient) + end + end + + if self.lua_type == "rocket" then + local rocket_prototype = factory_prototype:native() + local recipe_part_name = rocket_prototype.fixed_recipe + local rocket_part_prototype = RecipePrototype(recipe_part_name):native() + local ingredients = rocket_part_prototype.ingredients + for _, ingredient in pairs(ingredients) do + ingredient.amount = ingredient.amount * rocket_prototype.rocket_parts_required + table.insert(raw_ingredients, ingredient) + end + elseif self.lua_type ~= "energy" then + local consumption_effect = 1 + if factory ~= nil then + if factory.effects ~= nil then + consumption_effect = 1 + (factory.effects.consumption or 0) + end + end + ---recipe + if energy_type == "burner" then + if energy_prototype ~= nil and energy_prototype:getFuelCount() ~= nil then + local fuel_count = energy_prototype:getFuelCount() + local factor = self:getEnergy() * consumption_effect / factory.speed + local burner_ingredient = { name = fuel_count.name, type = fuel_count.type, + amount = fuel_count.count * factor, burnt = true } + table.insert(raw_ingredients, burner_ingredient) + end + elseif energy_type == "heat" then + local amount = factory_prototype:getEnergyConsumption() + local factor = self:getEnergy() * consumption_effect / factory.speed + local ingredient = { name = "steam-heat", type = "energy", amount = amount * factor } + table.insert(raw_ingredients, ingredient) + elseif energy_type == "fluid" then + local fluid_fuel = factory_prototype:getFluidFuelPrototype() + if fluid_fuel ~= nil and fluid_fuel:native() ~= nil then + local amount = factory_prototype:getFluidConsumption() + local factor = self:getEnergy() * consumption_effect / factory.speed + local burner_ingredient = { name = fluid_fuel:native().name, type = "fluid", amount = amount * factor, + burnt = true, temperature = fluid_fuel.temperature } + table.insert(raw_ingredients, burner_ingredient) + end + end + else + ---recipe energy + if energy_type == "burner" then + if energy_prototype ~= nil and energy_prototype:getFuelCount() ~= nil then + local fuel_count = energy_prototype:getFuelCount() + local factor = self:getEnergy() + local burner_ingredient = { name = fuel_count.name, type = fuel_count.type, + amount = fuel_count.count * factor, burnt = true } + table.insert(raw_ingredients, burner_ingredient) + end + elseif energy_type == "fluid" then + local fluid_fuel = factory_prototype:getFluidFuelPrototype() + if fluid_fuel ~= nil and fluid_fuel:native() ~= nil then + local amount = factory_prototype:getFluidConsumption() + local factor = self:getEnergy() + local burner_ingredient = { name = fluid_fuel:native().name, type = "fluid", amount = amount * factor, + burnt = true, temperature = fluid_fuel.temperature } + table.insert(raw_ingredients, burner_ingredient) + end + end + end + end + return raw_ingredients +end + +------------------------------------------------------------------------------- +---Return energy of Prototype +---@param factory? table +---@return number +function RecipePrototype:getEnergy(factory) + if self.lua_prototype ~= nil then + if self.lua_type == "energy" then + return 1 + elseif self.lua_type == "technology" then + return self.lua_prototype.research_unit_energy / 60 + elseif self.lua_type == "rocket" then + return self:getRocketEnergy(factory) + else + return self.lua_prototype.energy + end + end + return 0 +end + +------------------------------------------------------------------------------- +---Return enable of Prototype +---@return boolean +function RecipePrototype:getEnabled() + if self.lua_prototype ~= nil then + if self.lua_type == "recipe" or self.lua_type == "recipe-burnt" then + local lua_recipe = Player.getPlayerRecipe(self.lua_prototype.name) + if lua_recipe == nil then return false end + return lua_recipe.enabled + elseif self.lua_type == "resource" or self.lua_type == "fluid" then + return self.lua_prototype.enabled + elseif self.lua_type == "technology" then + return true + end + end + return true +end + +------------------------------------------------------------------------------- +---Return unlock of Prototype +---@return boolean +function RecipePrototype:getUnlock() + if self.lua_prototype ~= nil then + if self.lua_type == "recipe" or self.lua_type == "recipe-burnt" then + local unlock_recipes = Cache.getData("other", "unlock_recipes") or {} + return unlock_recipes[self.lua_prototype.name] + end + return true + end + return false +end + +------------------------------------------------------------------------------- +---Return hidden of Prototype +---@return boolean +function RecipePrototype:getHidden() + if self.lua_prototype ~= nil then + if self.lua_type == "recipe" or self.lua_type == "recipe-burnt" or self.lua_type == "resource" or self.lua_type == "energy" then + return self.lua_prototype.hidden + elseif self.lua_type == "technology" then + return false + elseif self.lua_type == "fluid" then + local entities = Player.getOffshorePumps(self.lua_prototype.name) + for _, entity in pairs(entities) do + return false + end + return false + elseif self.lua_type == "boiler" then + for _, entity in pairs(Player.getBoilersForRecipe(self.lua_prototype.name)) do + return false + end + return false + end + end + return false +end + +------------------------------------------------------------------------------- +---Return hidden player crafting of Prototype +---@return boolean +function RecipePrototype:getHiddenPlayerCrafting() + if self.lua_prototype ~= nil then + if self.lua_type == "recipe" or self.lua_type == "recipe-burnt" then + return self.lua_prototype.hidden_from_player_crafting + else + return false + end + end + return false +end + +------------------------------------------------------------------------------- +---Return emissions multiplier of Prototype +---@return number +function RecipePrototype:getEmissionsMultiplier() + if self.lua_prototype ~= nil then + local prototype = Player.getRecipe(self.lua_prototype.name) + if prototype == nil then return 1 end + return prototype.emissions_multiplier or 1 + end + return 1 +end + +------------------------------------------------------------------------------- +---Return true if result item has a burnt result +---@return boolean +function RecipePrototype:getHasBurntResult() + if self.lua_prototype ~= nil then + for key, raw_product in pairs(self:getRawProducts(self.lua_prototype)) do + local product = Product(raw_product) + if product:hasBurntResult() == true then + return true + end + end + end + return false +end + +---@return string, string +function RecipePrototype:getIcon() + local icon_name = self.lua_prototype.name + local icon_type = self.lua_type + + if self.lua_type == "recipe-burnt" then + icon_type = "recipe" + elseif self.lua_type == "resource" then + icon_type = "entity" + elseif self.lua_type == "rocket" then + icon_type = "item" + elseif self.lua_type == "energy" then + icon_type = "entity" + elseif self.lua_type == "boiler" then + icon_type = "fluid" + icon_name = self.output_fluid_name + end + + return icon_name, icon_type +end diff --git a/helmod/model/Technology.lua b/helmod/model/Technology.lua new file mode 100644 index 00000000..45666169 --- /dev/null +++ b/helmod/model/Technology.lua @@ -0,0 +1,86 @@ +--- +-- Description of the module. +-- @class Technology +-- +Technology = newclass(Prototype,function(base, object) + if object ~= nil and type(object) == "string" then + Prototype.init(base, Player.getTechnology(object)) + elseif object ~= nil and object.name ~= nil then + Prototype.init(base, Player.getTechnology(object.name)) + end + base.classname = "HMTechnology" +end) + +------------------------------------------------------------------------------- +-- Return enable of Prototype +-- +-- @return boolean +-- +function Technology:getEnabled() + if self.lua_prototype ~= nil then + return self.lua_prototype.enabled + end + return true +end + +------------------------------------------------------------------------------- +-- Return level +-- +-- @return number +-- +function Technology:getLevel() + if self.lua_prototype == nil then return 0 end + return self.lua_prototype.level +end + +------------------------------------------------------------------------------- +-- Return formula +-- +-- @return string +-- +function Technology:getFormula() + if self.lua_prototype == nil then return nil end + return self.lua_prototype.research_unit_count_formula +end + +------------------------------------------------------------------------------- +-- Return ingredients +-- +-- @return table +-- +function Technology:getIngredients() + if self.lua_prototype == nil then return {} end + return self.lua_prototype.research_unit_ingredients or {} +end + +------------------------------------------------------------------------------- +-- Return group +-- +-- @return table +-- +function Technology:getGroup() + if self.lua_prototype == nil then return {} end + local group_name = "normal" + if self.lua_prototype.research_unit_count_formula ~= nil then group_name = "infinite" end + return {name = group_name, localised_name = group_name} +end + +------------------------------------------------------------------------------- +-- Return group +-- +-- @return table +-- +function Technology:getSubgroup() + return {name="default"} +end + +------------------------------------------------------------------------------- +-- Return isResearched +-- +-- @return boolean +-- +function Technology:isResearched() + if self.lua_prototype == nil then return false end + local technology = Player.getPlayerTechnology(self.lua_prototype.name) + return technology.researched +end diff --git a/helmod/prototypes/fonts.lua b/helmod/prototypes/fonts.lua new file mode 100644 index 00000000..9d164dc3 --- /dev/null +++ b/helmod/prototypes/fonts.lua @@ -0,0 +1,135 @@ +data:extend( +{ + { + type = "font", + name = "helmod_font_default", + from = "default", + size = 10 + }, + { + type = "font", + name = "helmod_font_bold", + from = "default-bold", + size = 12 + }, + { + type = "font", + name = "helmod_font_title_frame", + from = "default-bold", + size = 16 + }, + + { + type = "font", + name = "helmod_font_header", + from = "default-bold", + size = 24 + }, + + + + { + type = "font", + name = "helmod_font_small", + from = "default", + size = 10 + }, + { + type = "font", + name = "helmod_font_medium", + from = "default", + size = 11 + }, + { + type = "font", + name = "helmod_font_normal", + from = "default", + size = 12 + }, + { + type = "font", + name = "helmod_font_big", + from = "default", + size = 14 + }, + { + type = "font", + name = "helmod_font_medium_bold", + from = "default-bold", + size = 11 + }, + { + type = "font", + name = "helmod_font_medium_bold_border", + from = "default-bold", + size = 11, + border = true + }, + { + type = "font", + name = "helmod_font_small_bold", + from = "default-bold", + size = 10 + }, + { + type = "font", + name = "helmod_font_small_bold_border", + from = "default-bold", + size = 10, + border = true, + border_color = {} + }, + { + type = "font", + name = "helmod_font_icon", + from = "default-bold", + size = 12, + border = true, + border_color = {} + }, + { + type = "font", + name = "helmod_font_icon_3", + from = "default-bold", + size = 12 + }, + { + type = "font", + name = "helmod_font_icon_4", + from = "default", + size = 12 + }, + { + type = "font", + name = "helmod_font_normal_bold", + from = "default-bold", + size = 12 + }, + { + type = "font", + name = "helmod_font_icon", + from = "default-bold", + size = 12, + border = true, + border_color = {} + }, + { + type = "font", + name = "helmod_font_big_bold", + from = "default-bold", + size = 16 + }, + { + type = "font", + name = "helmod_font_calculator", + from = "default-bold", + size = 20 + }, + { + type = "font", + name = "helmod_font_temperature", + from = "default-bold", + size = 12, + border = true + } +}) diff --git a/helmod/prototypes/groups.lua b/helmod/prototypes/groups.lua new file mode 100644 index 00000000..84a68871 --- /dev/null +++ b/helmod/prototypes/groups.lua @@ -0,0 +1,46 @@ +data:extend( +{ + { + type = "item-group", + name = "helmod", + order = "zzzz", + icon = "__helmod__/graphics/icons/helmod-group.png", + icon_size = 64 + }, + { + type = "item-subgroup", + name = "helmod-resource", + group = "helmod", + order = "aaaa" + }, + { + type = "item-subgroup", + name = "helmod-fluid", + group = "helmod", + order = "bbbb" + }, + { + type = "item-subgroup", + name = "helmod-boiler", + group = "helmod", + order = "cccc" + }, + { + type = "item-subgroup", + name = "helmod-energy", + group = "helmod", + order = "dddd" + }, + { + type = "item-subgroup", + name = "helmod-rocket", + group = "helmod", + order = "eeee" + }, + { + type = "item-subgroup", + name = "helmod-recipe-burnt", + group = "helmod", + order = "ffff" + } +}) diff --git a/helmod/prototypes/hotkey.lua b/helmod/prototypes/hotkey.lua new file mode 100644 index 00000000..2760fd71 --- /dev/null +++ b/helmod/prototypes/hotkey.lua @@ -0,0 +1,46 @@ +data:extend( + { + { + type = "custom-input", + name = "helmod-close", + key_sequence = "ESCAPE", + consuming = "none" + + }, + { + type = "custom-input", + name = "helmod-open-close", + key_sequence = "U", + consuming = "none" + + }, + { + type = "custom-input", + name = "helmod-production-line-open", + key_sequence = "I", + consuming = "none" + + }, + { + type = "custom-input", + name = "helmod-recipe-selector-open", + key_sequence = "O", + consuming = "none" + + }, + { + type = "custom-input", + name = "helmod-recipe-explorer-open", + key_sequence = "Y", + consuming = "none" + + }, + { + type = "custom-input", + name = "helmod-richtext-open", + key_sequence = "CONTROL + T", + consuming = "none" + + } + } +) diff --git a/helmod/prototypes/shortcut.lua b/helmod/prototypes/shortcut.lua new file mode 100644 index 00000000..d2d26c8e --- /dev/null +++ b/helmod/prototypes/shortcut.lua @@ -0,0 +1,45 @@ +data:extend( +{ + { + type = "shortcut", + name = "helmod-shortcut", + toggleable = true, + order = "a[mod]-helmod", + action = "lua", + localised_name = {"helmod_planner-command"}, + associated_control_input = "helmod-open-close", + icon = + { + filename = "__helmod__/graphics/icons/shortcut-toolbar-32.png", + priority = "extra-high-no-scale", + size = 32, + position = position, + scale = 1, + flags = {"icon"} + }, + small_icon = + { + filename = "__helmod__/graphics/icons/shortcut-toolbar-24.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"icon"} + }, + disabled_icon = + { + filename = "__helmod__/graphics/icons/shortcut-toolbar-32-white.png", + priority = "extra-high-no-scale", + size = 32, + scale = 1, + flags = {"icon"} + }, + disabled_small_icon = + { + filename = "__helmod__/graphics/icons/shortcut-toolbar-24-white.png", + priority = "extra-high-no-scale", + size = 24, + scale = 1, + flags = {"icon"} + }, + } +}) \ No newline at end of file diff --git a/helmod/prototypes/sprites.lua b/helmod/prototypes/sprites.lua new file mode 100644 index 00000000..5a4a8156 --- /dev/null +++ b/helmod/prototypes/sprites.lua @@ -0,0 +1,148 @@ +function sprite_help(name,width,height) + return { + type ="sprite", + name = "helmod_"..name, + filename = "__helmod__/graphics/help/"..name..".png", + priority = "medium", + width = width, + height = height + } +end + +data:extend({ + sprite_help("getting-start", 798, 359), + sprite_help("quick-start", 800, 506), + sprite_help("mod-settings-map", 478, 524), + sprite_help("mod-settings-player", 415, 524), + sprite_help("preferences-general", 500, 567), + sprite_help("preferences-ui", 500, 567), + sprite_help("preferences-module-priority", 500, 567), + sprite_help("preferences-items-logistic", 500, 567), + sprite_help("preferences-fluids-logistic", 500, 567), + sprite_help("production-line", 800, 542), + sprite_help("production-block", 800, 542), + sprite_help("production-edition", 308, 556), + sprite_help("recipe-editor", 500, 617), + sprite_help("recipe-editor-info", 500, 109), + sprite_help("recipe-editor-factory", 500, 241), + sprite_help("recipe-editor-beacon", 500, 255), + sprite_help("recipe-editor-tools", 500, 214), + sprite_help("recipe-editor-module-selection", 500, 214), + sprite_help("recipe-editor-module-priority", 500, 215), + sprite_help("recipe-selector", 490, 647), + sprite_help("recipe-selector-all", 490, 647), + sprite_help("recipe-selector-helmod", 490, 647), + sprite_help("compute-order", 800, 416), + sprite_help("filter-panel", 800, 443), + sprite_help("admin-tab", 800, 542), + sprite_help("unittest-panel", 800, 372), + sprite_help("properties-panel", 800, 542), + sprite_help("solver-debug-panel", 800, 404) +}) + +function sprite_icon(name, width, height, white) + local icon_name = "helmod-"..name + local position = {0,0} + if white then + position = {32,0} + icon_name = icon_name.."-white" + end + return { + type ="sprite", + name = icon_name, + filename = "__helmod__/graphics/icons/"..name..".png", + priority = "extra-high-no-scale", + width = width, + height = height, + position = position, + shift = {0, 0} + } +end + +function sprite_icon_sm(name, width, height, white) + local icon_name = "helmod-"..name + local position = {64,0} + if white then + position = {88,0} + icon_name = icon_name.."-white" + end + icon_name = icon_name.."-sm" + return { + type ="sprite", + name = icon_name, + filename = "__helmod__/graphics/icons/"..name..".png", + priority = "extra-high-no-scale", + width = width, + height = height, + position = position, + scale = 0.7, + shift = {0, 0} + } +end + +function sprite_icon_tool(name, width, height) + local icon_name = "helmod-tool-"..name + local position = {112,0} + return { + type ="sprite", + name = icon_name, + filename = "__helmod__/graphics/icons/"..name..".png", + priority = "extra-high-no-scale", + width = width, + height = height, + position = position, + scale = 0.7, + shift = {0, 0} + } +end + +function sprite_tooltip(name, size, scale) + local icon_name = "helmod-"..name + return { + type ="sprite", + name = icon_name, + filename = "__helmod__/graphics/icons/"..name..".png", + priority = "extra-high-no-scale", + width = size, + height = size, + scale = scale + } +end + +local spite_icons = {} + +table.insert(spite_icons, { + type ="sprite", + name = "helmod-group", + filename = "__helmod__/graphics/icons/helmod-group.png", + priority = "extra-high-no-scale", + width = 64, + height = 64, + scale = 1 +}) + +local list = { + {name="alert1", size=16, scale=1}, + {name="tooltip-blank", size=24, scale=1}, +} +for icon_row,icon in pairs(list) do + table.insert(spite_icons, sprite_tooltip(icon.name, icon.size, icon.scale)) +end + +function sprite_mipmap(name, size, count) + local icon_name = "helmod-"..name + return { + type ="sprite", + name = icon_name, + filename = "__helmod__/graphics/icons/"..name..".png", + size = size, + mipmap_count = count, + flags = {"gui-icon"} + } +end + +local mipmaps = require("prototypes.sprites_builded") +for icon_row,icon in pairs(mipmaps) do + table.insert(spite_icons, sprite_mipmap(icon.name, icon.size, icon.count)) +end +data:extend(spite_icons) \ No newline at end of file diff --git a/helmod/prototypes/sprites_builded.lua b/helmod/prototypes/sprites_builded.lua new file mode 100644 index 00000000..ebc5a62a --- /dev/null +++ b/helmod/prototypes/sprites_builded.lua @@ -0,0 +1,163 @@ +local mipmaps = { +{name="add_table_white", size=64, count=4}, +{name="add_table_black", size=64, count=4}, +{name="arrow_bottom_white", size=64, count=4}, +{name="arrow_bottom_black", size=64, count=4}, +{name="arrow_left_white", size=64, count=4}, +{name="arrow_left_black", size=64, count=4}, +{name="arrow_top_white", size=64, count=4}, +{name="arrow_top_black", size=64, count=4}, +{name="arrow_right_white", size=64, count=4}, +{name="arrow_right_black", size=64, count=4}, +{name="calculator_white", size=64, count=4}, +{name="calculator_black", size=64, count=4}, +{name="check_dot_white", size=64, count=4}, +{name="check_dot_black", size=64, count=4}, +{name="close_white", size=64, count=4}, +{name="close_black", size=64, count=4}, +{name="plugged_white", size=64, count=4}, +{name="plugged_black", size=64, count=4}, +{name="unplugged_white", size=64, count=4}, +{name="unplugged_black", size=64, count=4}, +{name="copy_white", size=64, count=4}, +{name="copy_black", size=64, count=4}, +{name="create_white", size=64, count=4}, +{name="create_black", size=64, count=4}, +{name="download_document_white", size=64, count=4}, +{name="download_document_black", size=64, count=4}, +{name="edit_document_white", size=64, count=4}, +{name="edit_document_black", size=64, count=4}, +{name="education_white", size=64, count=4}, +{name="education_black", size=64, count=4}, +{name="eraser_white", size=64, count=4}, +{name="eraser_black", size=64, count=4}, +{name="event_white", size=64, count=4}, +{name="event_black", size=64, count=4}, +{name="expand_right_white", size=64, count=4}, +{name="expand_right_black", size=64, count=4}, +{name="expand_right_group_white", size=64, count=4}, +{name="expand_right_group_black", size=64, count=4}, +{name="favorite_white", size=64, count=4}, +{name="favorite_black", size=64, count=4}, +{name="filter_white", size=64, count=4}, +{name="filter_black", size=64, count=4}, +{name="gauge_round_white", size=64, count=4}, +{name="gauge_round_black", size=64, count=4}, +{name="graph_left_to_right_white", size=64, count=4}, +{name="graph_left_to_right_black", size=64, count=4}, +{name="graph_top_to_bottom_white", size=64, count=4}, +{name="graph_top_to_bottom_black", size=64, count=4}, +{name="graph_bottom_to_top_white", size=64, count=4}, +{name="graph_bottom_to_top_black", size=64, count=4}, +{name="home_white", size=64, count=4}, +{name="home_black", size=64, count=4}, +{name="lock_white", size=64, count=4}, +{name="lock_black", size=64, count=4}, +{name="pen_four_white", size=64, count=4}, +{name="pen_four_black", size=64, count=4}, +{name="pinned_item_white", size=64, count=4}, +{name="pinned_item_black", size=64, count=4}, +{name="process_white", size=64, count=4}, +{name="process_black", size=64, count=4}, +{name="property_white", size=64, count=4}, +{name="property_black", size=64, count=4}, +{name="push_pin_white", size=64, count=4}, +{name="push_pin_black", size=64, count=4}, +{name="push_pin_unpin_white", size=64, count=4}, +{name="push_pin_unpin_black", size=64, count=4}, +{name="run_white", size=64, count=4}, +{name="run_black", size=64, count=4}, +{name="run_test_white", size=64, count=4}, +{name="run_test_black", size=64, count=4}, +{name="script_white", size=64, count=4}, +{name="script_black", size=64, count=4}, +{name="settings_white", size=64, count=4}, +{name="settings_black", size=64, count=4}, +{name="status_help_white", size=64, count=4}, +{name="status_help_black", size=64, count=4}, +{name="status_information_white", size=64, count=4}, +{name="status_information_black", size=64, count=4}, +{name="time_white", size=64, count=4}, +{name="time_black", size=64, count=4}, +{name="minimize_white", size=64, count=4}, +{name="minimize_black", size=64, count=4}, +{name="maximize_white", size=64, count=4}, +{name="maximize_black", size=64, count=4}, +{name="save_white", size=64, count=4}, +{name="save_black", size=64, count=4}, +{name="refresh_white", size=64, count=4}, +{name="refresh_black", size=64, count=4}, +{name="upload_document_white", size=64, count=4}, +{name="upload_document_black", size=64, count=4}, +{name="paste_white", size=64, count=4}, +{name="paste_black", size=64, count=4}, +{name="factory_white", size=64, count=4}, +{name="factory_black", size=64, count=4}, +{name="transport_white", size=64, count=4}, +{name="transport_black", size=64, count=4}, +{name="database_settings_white", size=64, count=4}, +{name="database_settings_black", size=64, count=4}, +{name="database_schema_white", size=64, count=4}, +{name="database_schema_black", size=64, count=4}, +{name="database_test_white", size=64, count=4}, +{name="database_test_black", size=64, count=4}, +{name="database_method_white", size=64, count=4}, +{name="database_method_black", size=64, count=4}, +{name="text_block_white", size=64, count=4}, +{name="text_block_black", size=64, count=4}, +{name="pause_white", size=64, count=4}, +{name="pause_black", size=64, count=4}, +{name="checkmark_white", size=64, count=4}, +{name="checkmark_black", size=64, count=4}, +{name="column_chart_white", size=64, count=4}, +{name="column_chart_black", size=64, count=4}, +{name="status_ok_white", size=64, count=4}, +{name="status_ok_black", size=64, count=4}, +{name="list_view_white", size=64, count=4}, +{name="list_view_black", size=64, count=4}, +{name="jewel_white", size=64, count=4}, +{name="jewel_black", size=64, count=4}, +{name="beacon_white", size=64, count=4}, +{name="beacon_black", size=64, count=4}, +{name="skull_white", size=64, count=4}, +{name="skull_black", size=64, count=4}, +{name="add_white", size=64, count=4}, +{name="add_black", size=64, count=4}, +{name="remove_white", size=64, count=4}, +{name="remove_black", size=64, count=4}, +{name="steam_heat_white", size=64, count=4}, +{name="steam_heat_black", size=64, count=4}, +{name="search_white", size=64, count=4}, +{name="search_black", size=64, count=4}, +{name="info_arrow_top_red", size=64, count=4}, +{name="info_add_red", size=64, count=4}, +{name="info_remove_red", size=64, count=4}, +{name="info_fire_blue", size=64, count=4}, +{name="info_education_blue", size=64, count=4}, +{name="info_energy_blue", size=64, count=4}, +{name="tooltip_edit_yellow", size=64, count=4}, +{name="tooltip_add_yellow", size=64, count=4}, +{name="tooltip_remove_yellow", size=64, count=4}, +{name="tooltip_favorite_yellow", size=64, count=4}, +{name="tooltip_expand_right_yellow", size=64, count=4}, +{name="tooltip_expand_right_group_yellow", size=64, count=4}, +{name="tooltip_erase_yellow", size=64, count=4}, +{name="tooltip_pipette_yellow", size=64, count=4}, +{name="tooltip_information_white", size=64, count=4}, +{name="hangar_white", size=64, count=4}, +{name="hangar_black", size=64, count=4}, +{name="info_hangar_white", size=64, count=4}, +{name="info_settings_blue", size=64, count=4}, +{name="info_rocket_blue", size=64, count=4}, +{name="expand_left_white", size=64, count=4}, +{name="expand_left_black", size=64, count=4}, +{name="expand_left_group_white", size=64, count=4}, +{name="expand_left_group_black", size=64, count=4}, +{name="two_rows_white", size=64, count=4}, +{name="two_rows_black", size=64, count=4}, +{name="three_rows_white", size=64, count=4}, +{name="three_rows_black", size=64, count=4}, +{name="parameter_white", size=64, count=4}, +{name="parameter_black", size=64, count=4}, +} +return mipmaps \ No newline at end of file diff --git a/helmod/prototypes/style-button.lua b/helmod/prototypes/style-button.lua new file mode 100644 index 00000000..5fdb8466 --- /dev/null +++ b/helmod/prototypes/style-button.lua @@ -0,0 +1,689 @@ +local default_gui = data.raw["gui-style"].default + +---Sprite +---@see https://forums.factorio.com/viewtopic.php?f=28&t=24292 +---@param filename any +---@param size any +---@param scale any +---@param shift any +---@param position table +---@return table +function sprite(filename, size, scale, shift, position) + return { + filename = filename, + priority = "extra-high-no-scale", + align = "center", + width = size, + height = size, + scale = scale, + shift = shift, + x = position.x, + y = position.y + } +end + +---Sprite +---@param filename any +---@param size any +---@param scale any +---@param shift any +---@param position any +---@return table +function spriteIcon(filename, size, scale, shift, position) + return { + type = "sprite", + sprite = sprite(filename, size, scale, shift, position) + } +end + +---Monolith Icon +---@param filename any +---@param size any +---@param scale any +---@param shift any +---@param position any +---@param border table +---@param stretch any +---@return table +function monolithIcon(filename, size, scale, shift, position, border, stretch) + return { + filename = filename, + priority = "extra-high-no-scale", + align = "center", + size = size, + scale = scale, + shift = shift, + position = position, + border = border.top + } +end + +---Composition Icon +---@param filename any +---@param corner_size any +---@param position any +---@return table +function compositionIcon(filename, corner_size, position) + return { + type = "composition", + filename = filename, + corner_size = corner_size, + position = position + } +end + +---Layered Icon +---@see https://forums.factorio.com/viewtopic.php?f=28&t=24294 +---@param filename any +---@param size any +---@param scale any +---@param shift any +---@param position any +---@return table +function layeredIcon (filename, size, scale, shift, position) + return { + type = "layered", + layers = { + { ---the border and background are a composition + type = "composition", + filename = "__core__/graphics/gui.png", + corner_size = {3, 3}, + position = {0, 0} + }, + { + type = "monolith", + monolith_image = sprite(filename, size, scale, shift, position) + } + } + } +end + +---Default glow +---@param tint_value any +---@param scale_value any +---@return table +function default_glow(tint_value, scale_value) + return + { + position = {200, 128}, + corner_size = 8, + tint = tint_value, + scale = scale_value, + draw_type = "outer" + } +end +default_dirt_color = {15, 7, 3, 100} +default_dirt = default_glow(default_dirt_color, 0.5) + +------------------------------------------------------------------------------- +---Menu Button Icon +---@param name sprite +---@param icon_row number +---@param icon_col table +---@param suffix string +---@param font string +---@param hovered_font_color table +function menuButtonIcon(name, icon_row, icon_col, size, suffix, font, default_font_color, hovered_font_color) + local style_name = "helmod_button_"..name + if suffix ~= nil then style_name = style_name.."_"..suffix end + default_gui[style_name] = { + type = "button_style", + font = font or "helmod_font_normal", + default_font_color=default_font_color, + horizontal_align = "center", + padding = -2, + width = size, + height = size, + default_graphical_set = {base = {position = {x=icon_col[1],y=icon_row[1]}, corner_size = 8}}, + hovered_graphical_set = {base = {position = {x=icon_col[2],y=icon_row[2]}, corner_size = 8}}, + hovered_font_color = hovered_font_color, + clicked_graphical_set = {base = {position = {x=icon_col[3],y=icon_row[3]}, corner_size = 8}}, + disabled_graphical_set = {base = {position = {x=icon_col[4],y=icon_row[4]}, corner_size = 8}}, + } +end + +------------------------------------------------------------------------------- +---Menu button icons +---@param name string +---@param font string +function menuButtonIcons(name, font) + local font = "helmod_font_normal" + local font_bold = "helmod_font_bold" + local font_white = {r=1, g=1, b=1} + local font_black = {r=0, g=0, b=0} + local icon_row = function(default, hovered, clicked, disabled) + return {17 * (default - 1), 17 * (hovered - 1), 17 * (clicked - 1), 17 * (disabled - 1)} + end + local icon_col = function(default, hovered, clicked, disabled) + if default == nil then return {570,570,570,570} end + return {17 * (default - 1), 17 * (hovered - 1), 17 * (clicked - 1), 386 + 17 * (disabled - 1)} + end + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 32, "default", font, font_white, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 24, "sm_default", font, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 32, nil, font, font_white, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 24, "sm", font, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(2,3,4,1), 32, "selected", font, font_black, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(2,3,4,1), 24, "sm_selected", font, font_black, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,3,4,1), 32, "dark", font, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,3,4,1), 24, "sm_dark", font, font_white, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(3,3,4,1), 32, "dark_selected", font, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(3,3,4,1), 24, "sm_dark_selected", font, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 32, "bold", font_bold, font_black, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 24, "sm_bold", font_bold, font_black, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(2,3,4,1), 32, "bold_selected", font_bold, font_white, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(2,3,4,1), 24, "sm_bold_selected", font_bold, font_white, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,3,4,1), 32, "dark_bold", font_bold, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,3,4,1), 24, "sm_dark_bold", font_bold, font_white, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(3,3,4,1), 32, "dark_bold_selected", font_bold, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(3,3,4,1), 24, "sm_dark_bold_selected", font_bold, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,9,10,2), 32, "red", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,9,10,2), 24, "sm_red", font, font_white, font_white) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,9,10,2), 32, "dark_red", font, font_white, font_white) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,9,10,2), 24, "sm_dark_red", font, font_white, font_white) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(9,11,10,2), 32, "actived_red", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(9,11,10,2), 24, "sm_actived_red", font, font_white, font_white) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(11,9,10,2), 32, "selected_red", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(11,9,10,2), 24, "sm_selected_red", font, font_white, font_white) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,7,8,3), 32, "green", font, font_white, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,7,8,3), 24, "sm_green", font, font_white, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,7,8,3), 32, "dark_green", font, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,7,8,3), 24, "sm_dark_green", font, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(5,7,8,3), 32, "actived_green", font, font_black, font_black) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(5,7,8,3), 24, "sm_actived_green", font, font_black, font_black) + + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,7,8,3), 32, "selected_green", font, font_white, font_black) + menuButtonIcon(name, icon_row(1,2,2,2), icon_col(1,7,8,3), 24, "sm_selected_green", font, font_white, font_black) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 32, "selected_yellow", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(1,3,4,1), 24, "sm_selected_yellow", font, font_white, font_white) + + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(), 36, "flat2", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(), 32, "flat", font, font_white, font_white) + menuButtonIcon(name, icon_row(2,2,2,2), icon_col(), 24, "sm_flat", font, font_white, font_white) +end +menuButtonIcons("menu") + +default_gui["helmod_frame_button"] = { + type = "button_style", + parent = "frame_action_button", + size = 32, + padding = -2, +} +default_gui["helmod_frame_button_selected"] = { + type = "button_style", + parent = "helmod_frame_button", + default_graphical_set = + { + base = {position = {17, 17}, corner_size = 8}, + shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"} + }, +} +default_gui["helmod_frame_button_actived_red"] = { + type = "button_style", + parent = "helmod_frame_button", + default_graphical_set = + { + base = {position = {136, 17}, corner_size = 8}, + shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"} + }, +} + +local corner_size = {3, 3} +default_gui["helmod_button_default"] = { + type = "button_style", + font = "helmod_font_normal", + default_font_color={r=1, g=1, b=1}, + horizontal_align = "center", + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2, + height = 28, + default_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 0}), + hovered_font_color={r=0, g=0, b=0}, + hovered_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 8}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 40}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 16}), + pie_progress_color = {r=1, g=1, b=1}, +} + +local corner_size2 = {8, 8} +default_gui["helmod_button_help_menu"] = { + type = "button_style", + font = "helmod_font_bold", + horizontal_align = "left", + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2, + top_margin = 2, + bottom_margin = 0, + height = 28, + default_font_color={r=255/255, g=230/255, b=192/255}, + default_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {0, 0}), + hovered_font_color={r=0, g=0, b=0}, + hovered_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {34, 17}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {51, 17}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {17, 17}), + pie_progress_color = {r=1, g=1, b=1}, + horizontally_squashable = "on", + horizontally_stretchable = "on" +} + +default_gui["helmod_button_help_menu_selected"] = { + type = "button_style", + parent = "helmod_button_help_menu", + font = "helmod_font_bold", + default_font_color={r=0, g=0, b=0}, + default_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {51, 17}), + hovered_font_color={r=0, g=0, b=0}, + hovered_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {34, 17}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {51, 17}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__core__/graphics/gui-new.png", corner_size2, {17, 17}), +} + +default_gui["helmod_button_help_menu2"] = { + type = "button_style", + parent = "helmod_button_help_menu", + font = "helmod_font_normal", + default_font_color={r=1, g=1, b=1}, + top_margin = 0, + left_padding = 20 +} + +default_gui["helmod_button_help_menu2_selected"] = { + type = "button_style", + parent = "helmod_button_help_menu_selected", + top_margin = 0, + left_padding = 20 +} +default_gui["helmod_button_left"] = { + type = "button_style", + parent = "helmod_button_default", + horizontal_align = "left" +} + +default_gui["helmod_button_selected"] = { + type = "button_style", + font = "helmod_font_normal", + default_font_color={r=1, g=1, b=1}, + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2, + height = 28, + default_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 40}), + hovered_font_color={r=1, g=1, b=1}, + hovered_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 40}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 40}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__core__/graphics/gui.png", corner_size, {0, 16}), + pie_progress_color = {r=1, g=1, b=1} +} + +local icon_corner_size = 1 + +default_gui["helmod_button_icon_default"] = { + type = "button_style", + parent = "helmod_button_default", + default_graphical_set = compositionIcon("__core__/graphics/gui.png", {icon_corner_size, icon_corner_size}, {3 - icon_corner_size, 3 - icon_corner_size}), + hovered_graphical_set = compositionIcon("__core__/graphics/gui.png", {icon_corner_size, icon_corner_size}, {3 - icon_corner_size, 11 - icon_corner_size}), + clicked_graphical_set = compositionIcon("__core__/graphics/gui.png", {icon_corner_size, icon_corner_size}, {3 - icon_corner_size, 43 - icon_corner_size}), + disabled_graphical_set = compositionIcon("__core__/graphics/gui.png", {icon_corner_size, icon_corner_size}, {3 - icon_corner_size, 19 - icon_corner_size}), +} + +local icon_sm_size=16 +local icon_sm_padding=1 + +local icon_m_size=24 +local icon_m_padding=1 + +local icon_size=32 +local icon_padding=2 + +local icon_xxl_size=64 +local icon_xxl_padding=2 + +local monolith_size=36 +local monolith_scale=1 + +local icon_offset_y=144 + +local style_list = { + {suffix="",offset = 0}, + {suffix="_red",offset = 36}, + {suffix="_yellow",offset = 72}, + {suffix="_green",offset = 108}, + {suffix="_flat"}, +} + +default_gui["helmod_button_icon"] = { + type = "button_style", + parent = "helmod_button_icon_default", + width = icon_size + 2*icon_padding, + height = icon_size + 2*icon_padding, + top_padding = icon_padding, + right_padding = icon_padding, + bottom_padding = icon_padding, + left_padding = icon_padding, + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=60}, {top=0,right=0,bottom=0,left=0}, true), +} + +default_gui["helmod_button_slot"] = { + type = "button_style", + parent = "slot_button", + width = icon_size + 2*icon_padding, + height = icon_size + 2*icon_padding, + top_padding = icon_padding, + right_padding = icon_padding, + bottom_padding = icon_padding, + left_padding = icon_padding, +} + +for _,style in pairs(style_list) do + if style.suffix == "_flat" then + default_gui["helmod_button_select_icon"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=150}, {top=0,right=0,bottom=0,left=0}, true), + } + else + default_gui["helmod_button_select_icon"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + hovered_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=148,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + clicked_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=184,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + disabled_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true) + } + end +end + +default_gui["helmod_button_icon_xxl"] = { + type = "button_style", + parent = "helmod_button_icon_default", + width = icon_xxl_size + 2*icon_xxl_padding, + height = icon_xxl_size + 2*icon_xxl_padding, + top_padding = icon_xxl_padding, + right_padding = icon_xxl_padding, + bottom_padding = icon_xxl_padding, + left_padding = icon_xxl_padding, + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=60}, {top=0,right=0,bottom=0,left=0}, true), +} + +for _,style in pairs(style_list) do + if style.suffix == "_flat" then + default_gui["helmod_button_select_icon_xxl"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_xxl", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=150}, {top=0,right=0,bottom=0,left=0}, true), + } + else + default_gui["helmod_button_select_icon_xxl"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_xxl", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + hovered_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=148,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + clicked_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=184,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + disabled_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true) + } + end +end + +default_gui["helmod_button_icon_m"] = { + type = "button_style", + parent = "helmod_button_icon_default", + width = icon_m_size + 2*icon_m_padding, + height = icon_m_size + 2*icon_m_padding, + top_padding = icon_m_padding, + right_padding = icon_m_padding, + bottom_padding = icon_m_padding, + left_padding = icon_m_padding, + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=60}, {top=0,right=0,bottom=0,left=0}, true), +} + +default_gui["helmod_button_slot_m"] = { + type = "button_style", + parent = "slot_button", + width = icon_m_size + 2*icon_m_padding, + height = icon_m_size + 2*icon_m_padding, + top_padding = icon_m_padding, + right_padding = icon_m_padding, + bottom_padding = icon_m_padding, + left_padding = icon_m_padding, +} + +for _,style in pairs(style_list) do + if style.suffix == "_flat" then + default_gui["helmod_button_select_icon_m"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_m", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=150}, {top=0,right=0,bottom=0,left=0}, true), + } + else + default_gui["helmod_button_select_icon_m"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_m", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + hovered_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=148,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + clicked_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=184,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + disabled_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true) + } + end +end + +default_gui["helmod_button_icon_sm"] = { + type = "button_style", + parent = "helmod_button_icon_default", + width = icon_sm_size + 2*icon_sm_padding, + height = icon_sm_size + 2*icon_sm_padding, + top_padding = icon_sm_padding, + right_padding = icon_sm_padding, + bottom_padding = icon_sm_padding, + left_padding = icon_sm_padding, + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=60}, {top=0,right=0,bottom=0,left=0}, true), +} + +default_gui["helmod_button_slot_sm"] = { + type = "button_style", + parent = "slot_button", + width = icon_sm_size + 2*icon_sm_padding, + height = icon_sm_size + 2*icon_sm_padding, + top_padding = icon_sm_padding, + right_padding = icon_sm_padding, + bottom_padding = icon_sm_padding, + left_padding = icon_sm_padding, +} + +for _,style in pairs(style_list) do + if style.suffix == "_flat" then + default_gui["helmod_button_select_icon_sm"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_sm", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=0,y=150}, {top=0,right=0,bottom=0,left=0}, true), + } + else + default_gui["helmod_button_select_icon_sm"..style.suffix] = { + type = "button_style", + parent = "helmod_button_icon_sm", + default_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + hovered_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=148,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + clicked_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=184,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true), + disabled_graphical_set = monolithIcon("__core__/graphics/gui.png", monolith_size, monolith_scale, {0,0}, {x=111,y=icon_offset_y+style.offset}, {top=0,right=0,bottom=0,left=0}, true) + } + end +end + +default_gui["helmod_button_bold"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_big_bold", + + minimal_width = 32, + height = 32, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_bold_selected"] = { + type = "button_style", + parent = "helmod_button_selected", + font = "helmod_font_big_bold", + + minimal_width = 32, + height = 32, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_calculator"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_calculator", + + minimal_width = 36, + height = 36, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_small_bold"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_normal_bold", + + minimal_width = 24, + height = 24, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_small_bold_selected"] = { + type = "button_style", + parent = "helmod_button_selected", + font = "helmod_font_normal_bold", + + minimal_width = 24, + height = 24, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_small_bold_start"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_normal_bold", + + width = 24, + height = 24, + + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_button_small_bold_middle"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_normal_bold", + + width = 24, + height = 24, + + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 0 +} + +default_gui["helmod_button_small_bold_end"] = { + type = "button_style", + parent = "helmod_button_default", + font = "helmod_font_normal_bold", + + width = 24, + height = 24, + + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 0 +} + + +default_gui["helmod_button_tab"] = { + type = "button_style", + font = "helmod_font_normal", + default_font_color={r=1, g=1, b=1}, + top_padding = 2, + right_padding = 8, + bottom_padding = 2, + left_padding = 8, + height = 28, + default_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {16, 0}), + hovered_font_color={r=0, g=0, b=0}, + hovered_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {16, 8}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {16, 0}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {16, 0}), + pie_progress_color = {r=1, g=1, b=1} +} + + +default_gui["helmod_button_tab_selected"] = { + type = "button_style", + font = "helmod_font_normal", + default_font_color={r=1, g=1, b=1}, + top_padding = 2, + right_padding = 8, + bottom_padding = 2, + left_padding = 8, + height = 28, + default_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {8, 0}), + hovered_font_color={r=0, g=0, b=0}, + hovered_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {8, 8}), + clicked_font_color={r=1, g=1, b=1}, + clicked_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {8, 0}), + disabled_font_color={r=0.5, g=0.5, b=0.5}, + disabled_graphical_set = compositionIcon("__helmod__/graphics/gui.png", corner_size, {8, 0}), + pie_progress_color = {r=1, g=1, b=1} +} \ No newline at end of file diff --git a/helmod/prototypes/style-frame.lua b/helmod/prototypes/style-frame.lua new file mode 100644 index 00000000..2bc8e5c4 --- /dev/null +++ b/helmod/prototypes/style-frame.lua @@ -0,0 +1,337 @@ +local default_gui = data.raw["gui-style"].default + +------------------------------------------------------------------------------- +---Name of display +-- +---|--------------------------------------------------| +---| Flow.main | +---| |-----------------------|----------------------| | +---| | Flow.info | Flow.dialog | | +---| | |-------------------| | |------------------| | | +---| | | Frame.main_menu | | | Frame.dialog | | | +---| | |-------------------| | | | | | +---| | | Frame.data | | | | | | +---| | | | | | | | | +---| | | | | | | | | +---| | | | | | | | | +---| | |-------------------| | |------------------| | | +---| |-----------------------|----------------------| | +---|--------------------------------------------------| +-- + +local width_scroll=8 +local width_block_info=290 +local width_recipe_column=220 + +default_gui["helmod_frame"] = { + type = "frame_style", + parent = "frame", + ---marge interieure + padding = 4 +} + +default_gui["helmod_inside_frame"] = { + type = "frame_style", + parent = "inside_shallow_frame", + ---marge interieure + padding = 4 +} + +default_gui["helmod_deep_frame"] = { + type = "frame_style", + parent = "inside_deep_frame", + ---marge interieure + padding = 4 +} + +default_gui["helmod_scroll_pane"] = { + type = "scroll_pane_style", + parent = "scroll_pane", + ---marge interieure + padding = 4, + extra_padding_when_activated = 0 +} + +default_gui["helmod_tabbed_frame"] = { + type = "frame_style", + parent = "inside_deep_frame", + ---marge interieure + top_padding = 4, + right_padding = 0, + left_padding = 0, + bottom_padding = 0 +} + +default_gui["helmod_tabbed_pane"] = { + type = "tabbed_pane_style", + parent = "tabbed_pane", + tab_content_frame = + { + type = "frame_style", + top_padding = 4, + right_padding = 4, + left_padding = 4, + bottom_padding = 4, + graphical_set = tabbed_pane_graphical_set + }, + tab_container = + { + type = "horizontal_flow_style", + horizontally_stretchable = "on", + left_padding = 4, + right_padding = 4, + horizontal_spacing = 0 + } +} + +---OLD +default_gui["helmod_frame_header"] = { + type = "frame_style", + parent = "frame", + ---marge interieure + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + graphical_set = + { + base = {position = {4, 4}, corner_size = 4} + } +} + +default_gui["helmod_frame_hidden"] = { + type = "frame_style", + ---marge interieure + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + + horizontal_flow_style = + { + type = "horizontal_flow_style", + horizontal_spacing = 0, + }, + + vertical_flow_style = + { + type = "vertical_flow_style", + vertical_spacing = 0 + }, + graphical_set = + { + type = "composition", + filename = "__helmod__/graphics/gui.png", + load_in_minimal_mode = true, + corner_size = {1, 1}, + position = {0, 0} + } +} + +default_gui["helmod_frame_default"] = { + type = "frame_style", + ---padding of the content area of the frame + top_padding = 0, + right_padding = 0, + bottom_padding = 4, + left_padding = 0, + graphical_set = + { + base = {position = {0, 0}, corner_size = 8}, + --shadow = default_shadow + }, + horizontal_flow_style = { type = "horizontal_flow_style" }, + vertical_flow_style = { type = "vertical_flow_style" }, + header_flow_style = { type = "horizontal_flow_style", vertical_align = "center", maximal_height = 24}, + header_filler_style = + { + type = "empty_widget_style", + parent = "draggable_space_header", + height = 24 + }, + use_header_filler = true, + border = {} +} + +local panel_colors = {} +panel_colors["blue"] = {329,48} +panel_colors["blue2"] = {346,48} +panel_colors["green"] = {431,48} +for key,position in pairs(panel_colors) do + default_gui["helmod_frame_color_"..key] = { + type = "frame_style", + parent = "helmod_frame_default", + graphical_set = + { + base = {position = position, corner_size = 8, opacity = 0.75} + + } + } +end + +local style_element_list = { + {suffix="yellow", x=0, y=16}, + {suffix="orange", x=0, y=24}, + {suffix="red", x=0, y=32}, + {suffix="green", x=0, y=40}, + {suffix="blue", x=0, y=48}, + {suffix="gray", x=0, y=56}, + {suffix="magenta", x=0, y=64}, + {suffix="none", x=0, y=72} +} +local style_element_max = 7 + +for _,style in pairs(style_element_list) do + for i = 1, style_element_max do + local style_name = table.concat({"helmod_frame_element",style.suffix,i},"_") + local x = style.x + (i-1)*8 + local y = style.y + + default_gui[style_name] = { + type = "frame_style", + graphical_set = { + filename = "__helmod__/graphics/gui.png", + corner_size = 1, + position = {x,y} + }, + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 0, + + minimal_width = 80, + horizontally_stretchable = "on", + vertically_stretchable = "off" + } + end +end + +for _,style in pairs(style_element_list) do + for i = 1, style_element_max do + local style_name = table.concat({"helmod_frame_element_m",style.suffix,i},"_") + local x = style.x + (i-1)*8 + local y = style.y + + default_gui[style_name] = { + type = "frame_style", + graphical_set = { + filename = "__helmod__/graphics/gui.png", + corner_size = 1, + position = {x,y} + }, + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 0, + + minimal_width = 50, + horizontally_stretchable = "on", + vertically_stretchable = "off" + } + end +end + +for _,style in pairs(style_element_list) do + for i = 1, style_element_max do + local style_name = table.concat({"helmod_frame_element_sm",style.suffix,i},"_") + local x = style.x + (i-1)*8 + local y = style.y + + default_gui[style_name] = { + type = "frame_style", + graphical_set = { + filename = "__helmod__/graphics/gui.png", + corner_size = 1, + position = {x,y} + }, + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 0, + + minimal_width = 30, + horizontally_stretchable = "on", + vertically_stretchable = "off" + } + end +end + +for _,style in pairs(style_element_list) do + for i = 1, style_element_max do + local style_name = table.concat({"helmod_frame_product",style.suffix,i},"_") + local x = style.x + (i-1)*8 + local y = style.y + + default_gui[style_name] = { + type = "frame_style", + graphical_set = { + filename = "__helmod__/graphics/gui.png", + corner_size = 1, + position = {x,y} + }, + top_padding = 2, + right_padding = 0, + bottom_padding = 2, + left_padding = 0, + minimal_width = 50, + horizontally_stretchable = "on", + vertically_stretchable = "off" + } + end +end + +for _,style in pairs(style_element_list) do + for i = 1, style_element_max do + local style_name = table.concat({"helmod_frame_colored",style.suffix,i},"_") + local x = style.x + (i-1)*8 + local y = style.y + + default_gui[style_name] = { + type = "frame_style", + graphical_set = { + filename = "__helmod__/graphics/gui.png", + corner_size = 1, + position = {x,y} + }, + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2, + horizontally_stretchable = "on", + vertically_stretchable = "on" + } + end +end + +default_gui["helmod_frame_panel"] = { + type = "frame_style", + parent = "helmod_frame_default", + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + use_header_filler = false +} + +default_gui["helmod_frame_recipe_info"] = { + type = "frame_style", + parent = "helmod_frame_default", + minimal_width = width_recipe_column, + maximal_width = width_recipe_column +} + +default_gui["helmod_flow_default"] = { + type = "flow_style", + horizontal_spacing = 1, + vertical_spacing = 1 +} + +default_gui["helmod_flow_horizontal"] = { + type = "horizontal_flow_style", + horizontal_spacing = 0 +} + +default_gui["helmod_flow_vertical"] = { + type = "vertical_flow_style", + vertical_spacing = 0 +} \ No newline at end of file diff --git a/helmod/prototypes/style-other.lua b/helmod/prototypes/style-other.lua new file mode 100644 index 00000000..7662bb3b --- /dev/null +++ b/helmod/prototypes/style-other.lua @@ -0,0 +1,343 @@ +local default_gui = data.raw["gui-style"].default + +default_gui["helmod_textfield"] = { + type = "textbox_style", + parent = "search_textfield_with_fixed_width", + minimal_width = 70, + maximal_width = 70 +} + +default_gui["helmod_textfield_filter"] = { + type = "textbox_style", + parent = "search_textfield_with_fixed_width", + minimal_width = 200, + maximal_width = 200 +} + +default_gui["helmod_textfield_element"] = { + type = "textbox_style", + parent = "search_textfield_with_fixed_width", + font = "helmod_font_normal", + minimal_width = 50, + maximal_width = 50 +} + +default_gui["helmod_textfield_element_green"] = { + type = "textbox_style", + parent = "helmod_textfield_element", + default_background = + { + filename = "__helmod__/graphics/gui.png", + corner_size = 3, + position = {8, 80}, + scale = 1 + }, + active_background = + { + filename = "__helmod__/graphics/gui.png", + corner_size = 3, + position = {0, 80}, + scale = 1 + } +} + +default_gui["helmod_textfield_element_red"] = { + type = "textbox_style", + parent = "helmod_textfield_element", + default_background = + { + filename = "__helmod__/graphics/gui.png", + corner_size = 3, + position = {8, 88}, + scale = 1 + }, + active_background = + { + filename = "__helmod__/graphics/gui.png", + corner_size = 3, + position = {0, 88}, + scale = 1 + } +} + + +default_gui["helmod_textfield_calculator"] = { + type = "textbox_style", + font = "helmod_font_calculator" +} + +default_gui["helmod_textbox_default"] = { + type = "textbox_style", + parent = "textbox", + minimal_width = 300, + maximal_width = 300, + minimal_height = 300, + maximal_height = 200 +} + +default_gui["helmod_label_default"] = { + type = "label_style", + parent = "label", + top_padding = 2, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_label_header"] = { + type = "label_style", + parent = "label", + font = "helmod_font_header", + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + font_color = {245/255, 219/255, 194/255} +} + +default_gui["helmod_label_element"] = { + type = "label_style", + parent = "label", + font = "helmod_font_normal", + top_padding = -3, + right_padding = 2, + bottom_padding = 0, + left_padding = 2 +} + +default_gui["helmod_label_element_black"] = { + type = "label_style", + parent = "helmod_label_element", + font_color = {0, 0, 0} +} + +default_gui["helmod_label_overlay"] = { + type = "label_style", + parent = "helmod_label_element", + font = "helmod_font_medium_bold_border" +} + +default_gui["helmod_label_element_m"] = { + type = "label_style", + parent = "label", + font = "helmod_font_medium_bold", + top_padding = -2, + right_padding = 2, + bottom_padding = 0, + left_padding = 2 +} + +default_gui["helmod_label_element_black_m"] = { + type = "label_style", + parent = "helmod_label_element_m", + font_color = {0, 0, 0} +} + +default_gui["helmod_temperature_blue_m"] = { + type = "label_style", + parent = "label", + font = "helmod_font_temperature", + font_color = {0.42, 0.81, 0.93} +} + +default_gui["helmod_label_overlay_m"] = { + type = "label_style", + parent = "helmod_label_element_m", + font = "helmod_font_small_bold_border" +} + +default_gui["helmod_label_element_sm"] = { + type = "label_style", + parent = "label", + font = "helmod_font_small_bold", + top_padding = -2, + right_padding = 2, + bottom_padding = -1, + left_padding = 2 +} + +default_gui["helmod_label_help"] = { + type = "label_style", + parent = "helmod_label_default", + single_line = false, + horizontally_squashable = "on", + horizontally_stretchable = "on" +} + +default_gui["helmod_label_help_text"] = { + type = "label_style", + parent = "helmod_label_default", + left_padding = 10, + single_line = false, + horizontally_squashable = "on", + horizontally_stretchable = "on" +} + + +default_gui["helmod_label_help_title"] = { + type = "label_style", + parent = "helmod_label_help", + font = "helmod_font_title_frame" +} + +default_gui["helmod_label_help_menu_1"] = { + type = "label_style", + parent = "helmod_label_help", + font = "helmod_font_title_frame", + hovered_font_color = {1, 0.74, 0.40}, + clicked_font_color = {0.98, 0.66, 0.22}, + top_padding = 2, + bottom_padding = 0 +} + +default_gui["helmod_label_help_menu_1_selected"] = { + type = "label_style", + parent = "helmod_label_help_menu_1", + font_color = {0.98, 0.66, 0.22} +} + +default_gui["helmod_label_help_menu_2"] = { + type = "label_style", + parent = "helmod_label_help", + hovered_font_color = {1, 0.74, 0.40}, + clicked_font_color = {0.98, 0.66, 0.22}, + left_padding = 10, + top_padding = 0, + bottom_padding = 0 +} + +default_gui["helmod_label_help_menu_2_selected"] = { + type = "label_style", + parent = "helmod_label_help_menu_2", + font_color = {0.98, 0.66, 0.22} +} + +for w=50, 600, 50 do + default_gui["helmod_label_max_"..w] = { + type = "label_style", + parent = "helmod_label_default", + right_padding = 0, + left_padding = 0, + maximal_width = w + } +end + +default_gui["helmod_label_title_frame"] = { + type = "label_style", + parent = "helmod_label_default", + font = "helmod_font_title_frame" +} + +default_gui["helmod_label_time"] = { + type = "label_style", + parent = "label", + top_padding = 4, + right_padding = 2, + bottom_padding = 2, + left_padding = 2 +} + +default_gui["helmod_label_sm"] = { + type = "label_style", + font = "helmod_font_normal", + top_padding = 0, + right_padding = 1, + bottom_padding = 1, + left_padding = 0 +} + +default_gui["helmod_label_right"] = { + type = "label_style", + font = "default", + horizontal_align = "right" +} + +for w=20, 100, 10 do + default_gui["helmod_label_right_"..w] = { + type = "label_style", + parent = "helmod_label_right", + minimal_width = w + } +end + +default_gui["helmod_label_row_right"] = { + type = "label_style", + parent = "helmod_label_right", + top_padding = 15 +} + +for w=20, 100, 10 do + default_gui["helmod_label_row_right_"..w] = { + type = "label_style", + parent = "helmod_label_row_right", + minimal_width = w + } +end + +default_gui["helmod_label_row2_right"] = { + type = "label_style", + parent = "helmod_label_right", + font = "helmod_font_normal", + top_padding = 0, + right_padding = 1, + bottom_padding = 1, + left_padding = 0 +} + +for w=20, 100, 10 do + default_gui["helmod_label_row2_right_"..w] = { + type = "label_style", + parent = "helmod_label_row2_right", + minimal_width = w + } +end + +default_gui["helmod_label_row2_right_sm"] = { + type = "label_style", + parent = "helmod_label_right", + font = "helmod_font_small", + top_padding = 0, + right_padding = 1, + bottom_padding = 0, + left_padding = 0 +} + +for w=20, 100, 10 do + default_gui["helmod_label_row2_right_sm_"..w] = { + type = "label_style", + parent = "helmod_label_row2_right_sm", + minimal_width = w + } +end + +default_gui["helmod_label_icon"] = { + type = "label_style", + parent = "helmod_label_right", + font = "helmod_font_icon", + top_padding = 0, + right_padding = 1, + bottom_padding = 1, + left_padding = 0 +} + +default_gui["helmod_label_icon_text_sm"] = { + type = "label_style", + parent = "helmod_label_right", + font = "helmod_font_icon_4", + minimal_width = 45, + top_padding = 18, + right_padding = 1, + bottom_padding = 1, + left_padding = 0 +} + +default_gui["helmod_label_icon_sm"] = { + type = "label_style", + parent = "helmod_label_right", + font = "helmod_font_icon_4", + minimal_width = 45, + top_padding = 10, + right_padding = 1, + bottom_padding = 1, + left_padding = 0 +} \ No newline at end of file diff --git a/helmod/prototypes/style-table.lua b/helmod/prototypes/style-table.lua new file mode 100644 index 00000000..8e95e067 --- /dev/null +++ b/helmod/prototypes/style-table.lua @@ -0,0 +1,162 @@ +local default_gui = data.raw["gui-style"].default + +default_gui["helmod_table_default"] = { + type = "table_style", + horizontal_spacing = 2, + vertical_spacing = 2, + top_padding = 0, + right_padding = 1, + bottom_padding = 0, + left_padding = 1, + vertical_align = "top" +} + +default_gui["helmod_table_border"] = { + type = "table_style", + parent = "helmod_table_default", + border = border_image_set(), +} + +default_gui["helmod_table_result"] = { + type = "table_style", + parent = "helmod_table_default", + default_row_graphical_set = + { + type = "composition", + filename = "__helmod__/graphics/gui.png", + corner_size = {1, 1}, + position = {8, 72}, + opacity = 1 + }, + odd_row_graphical_set = + { + type = "composition", + filename = "__helmod__/graphics/gui.png", + corner_size = {1, 1}, + position = {0, 72}, + opacity = 1 + } +} + +default_gui["helmod_table_element"] = { + type = "table_style", + parent = "helmod_table_default", + horizontally_stretchable = "off" +} + +default_gui["helmod_table_panel"] = { + type = "table_style", + horizontal_spacing = 0, + vertical_spacing = 0, + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + vertical_align = "top" +} + +default_gui["helmod_table_list"] = { + type = "table_style", + horizontal_spacing = 1, + vertical_spacing = 1, + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + vertical_align = "top", + horizontally_stretchable = "off" +} + +default_gui["helmod_table_tab"] = { + type = "table_style", + horizontal_spacing = 0, + vertical_spacing = 0, + top_padding = 0, + right_padding = 0, + bottom_padding = 0, + left_padding = 0, + vertical_align = "top" +} + +default_gui["helmod_table_rule"] = { + type = "table_style", + horizontal_spacing = 2, + vertical_spacing = 2, + top_padding = 0, + right_padding = 10, + bottom_padding = 0, + left_padding = 0, + vertical_align = "top" +} + +default_gui["helmod_factory_modules"] = { + type = "table_style", + parent = "helmod_table_default", + minimal_width = 36, + vertical_spacing = 0, +} + +default_gui["helmod_factory_info"] = { + type = "table_style", + parent = "helmod_table_default", + left_padding = -5, +} + +default_gui["helmod_beacon_modules"] = { + type = "table_style", + parent = "helmod_table_default", + minimal_width = 18 +} + +default_gui["helmod_table_recipe_modules"] = { + type = "table_style", + parent = "table", + minimal_height = 36 +} + +default_gui["helmod_table_recipe_selector"] = { + type = "table_style", + horizontal_spacing = 2, + vertical_spacing = 2, + top_padding = 1, + right_padding = 0, + bottom_padding = 1, + left_padding = 0 +} + +default_gui["helmod_table-odd"] = { + type = "table_style", + -- default orange with alfa + hovered_row_color = {r=0.98, g=0.66, b=0.22, a=0.7}, + cell_padding = 1, + vertical_align = "top", + horizontal_spacing = 3, + vertical_spacing = 2, + odd_row_graphical_set = + { + type = "composition", + filename = "__core__/graphics/gui.png", + corner_size = {1, 1}, + position = {78, 18}, + opacity = 0.7 + } +} + +default_gui["helmod_table-rule-odd"] = { + type = "table_style", + -- default orange with alfa + hovered_row_color = {r=0.98, g=0.66, b=0.22, a=0.7}, + selected_row_color = default_orange_color, + cell_padding = 1, + vertical_align = "top", + horizontal_spacing = 10, + vertical_spacing = 2, + odd_row_graphical_set = + { + type = "composition", + filename = "__helmod__/graphics/gui.png", + corner_size = {1, 1}, + position = {16, 56}, + opacity = 1 + } +} diff --git a/helmod/prototypes/style.lua b/helmod/prototypes/style.lua new file mode 100644 index 00000000..13d22b1b --- /dev/null +++ b/helmod/prototypes/style.lua @@ -0,0 +1,4 @@ +require "style-other" +require "style-button" +require "style-frame" +require "style-table" diff --git a/helmod/selector/AbstractSelector.lua b/helmod/selector/AbstractSelector.lua new file mode 100644 index 00000000..37744b94 --- /dev/null +++ b/helmod/selector/AbstractSelector.lua @@ -0,0 +1,798 @@ +------------------------------------------------------------------------------- +---Classe to build selector dialog +-- +---@module AbstractSelector +---@extends #Form +-- + +AbstractSelector = newclass(FormModel,function(base,classname) + FormModel.init(base,classname) + base.auto_clear = false +end) + +local limit_display_height = 850 + +------------------------------------------------------------------------------- +---On Style +---@param styles table +---@param width_main number +---@param height_main number +function AbstractSelector:onStyle(styles, width_main, height_main) + styles.flow_panel = { + width = 490, + height = math.max(height_main,800) + } + styles.block_info = { + width = 310, + height = 50*2+45 + } +end + +------------------------------------------------------------------------------- +---Return filter - filtre sur les prototypes +---@return table +function AbstractSelector:getProductFilter() + local filter_prototype_product = User.getParameter("filter_prototype_product") + if filter_prototype_product == nil then filter_prototype_product = true end + return filter_prototype_product +end + +------------------------------------------------------------------------------- +---Return filter - filtre sur les prototypes +---@return table +function AbstractSelector:getFilter() + return User.getParameter("filter_prototype") +end + +------------------------------------------------------------------------------- +---Return list prototype +---@return table +function AbstractSelector:getListPrototype() + if self:getProductFilter() and not(Cache.isEmpty(self.classname, "list_products")) then + return Cache.getData(self.classname, "list_products") or {} + end + return Cache.getData(self.classname, "list_ingredients") or {} +end + +------------------------------------------------------------------------------- +---Return list group +---@return table +function AbstractSelector:getListGroup() + return User.getCache(self.classname, "list_group") or {} +end + +------------------------------------------------------------------------------- +---Return list subgroup +---@return table +function AbstractSelector:getListSubGroup() + return User.getCache(self.classname, "list_subgroup") or {} +end + +------------------------------------------------------------------------------- +---Return list item +---@return table +function AbstractSelector:getListItem() + return User.getCache(self.classname, "list_item") or {} +end + +------------------------------------------------------------------------------- +---Return list group elements +---@return table +function AbstractSelector:getListGroupElements() + return User.getCache(self.classname, "list_group_elements") or {} +end + +------------------------------------------------------------------------------- +---Return caption +---@return table +function AbstractSelector:getCaption() + return {"helmod_selector-panel.recipe-title"} +end + +------------------------------------------------------------------------------- +---On initialization +function AbstractSelector:onInit() + self.panelCaption = self:getCaption() ---obligatoire sinon le panneau ne s'affiche pas + self.sprite_type = "item-group" + self:afterInit() + self.parameterTarget = string.format("%s_%s",self.classname,"target") +end + +------------------------------------------------------------------------------- +---After initialization +function AbstractSelector:afterInit() + self.disable_option = false + self.hidden_option = false + self.product_option = false +end + +------------------------------------------------------------------------------- +---Get or create filter panel +---@return LuaGuiElement +function AbstractSelector:getFilterPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["filter-panel"] ~= nil and content_panel["filter-panel"].valid then + return content_panel["filter-panel"] + end + local panel = GuiElement.add(content_panel, GuiFrameV("filter-panel")) + panel.style.horizontally_stretchable = true + return panel +end + +------------------------------------------------------------------------------- +---Get or create scroll panel +---@return LuaGuiElement +function AbstractSelector:getSrollPanel() + local flow_panel, content_panel, menu_panel = self:getPanel() + if content_panel["main_panel"] ~= nil and content_panel["main_panel"].valid then + return content_panel["main_panel"]["scroll_panel"] + end + local main_panel = GuiElement.add(content_panel, GuiFrameV("main_panel")) + main_panel.style.horizontally_stretchable = true + local scroll_panel = GuiElement.add(main_panel, GuiScroll("scroll_panel"):style("helmod_scroll_pane")) + scroll_panel.style.horizontally_stretchable = true + scroll_panel.style.vertically_stretchable = true + return scroll_panel +end + +------------------------------------------------------------------------------- +---Get or create groups panel +---@return LuaGuiElement +function AbstractSelector:getGroupsPanel() + local filter_scroll_groups = User.getSetting("filter_scroll_groups") + if filter_scroll_groups == false then + --- affichage normal + local flow_panel, content_panel, menu_panel = self:getPanel() + --local content_panel = self:getSrollPanel() + if content_panel["groups_panel"] ~= nil and content_panel["groups_panel"].valid then + return content_panel["groups_panel"] + end + local group_panel = GuiElement.add(content_panel, GuiFrameV("groups_panel")) + group_panel.style.horizontally_stretchable = true + return group_panel + else + --- affichage full scroll + local content_panel = self:getSrollPanel() + if content_panel["groups_panel"] ~= nil and content_panel["groups_panel"].valid then + return content_panel["groups_panel"] + end + return GuiElement.add(content_panel, GuiFlowV("groups_panel")) + end +end + +------------------------------------------------------------------------------- +---Get or create groups panel +---@return LuaGuiElement +function AbstractSelector:getFailPanel() + local scroll_panel = self:getSrollPanel() + if scroll_panel["groups_panel"] ~= nil and scroll_panel["groups_panel"].valid then + return scroll_panel["groups_panel"] + end + return GuiElement.add(scroll_panel, GuiFlowV("groups_panel")) +end + +------------------------------------------------------------------------------- +---Get or create item list panel +---@return LuaGuiElement +function AbstractSelector:getItemListPanel() + local scroll_panel = self:getSrollPanel() + if scroll_panel["item_list_panel"] ~= nil and scroll_panel["item_list_panel"].valid then + return scroll_panel["item_list_panel"] + end + return GuiElement.add(scroll_panel, GuiFlowV("item_list_panel")) +end + +------------------------------------------------------------------------------- +---On before open +---@param event LuaEvent +function AbstractSelector:onBeforeOpen(event) + FormModel.onBeforeOpen(self, event) + if event.action == "OPEN" then + User.setParameter(self.parameterTarget, event.item1) + end + + if event.item4 ~= nil and event.item4 ~= "" then + if User.isFilterTranslate() then + User.setParameter("filter_prototype", User.getTranslate(event.item4)) + else + User.setParameter("filter_prototype", event.item4) + end + if event.reset ~= true then + event.reset = true + self:resetGroups() + end + else + local filter_prototype = self:getFilter() + if filter_prototype ~= nil and event.continue ~= true then + event.reset = true + self:resetGroups() + end + User.setParameter("filter_prototype", nil) + end + + if event ~= nil and event.button ~= nil and event.button == defines.mouse_button_type.right then + User.setParameter("filter_prototype_product", false) + else + User.setParameter("filter_prototype_product", true) + end +end + +------------------------------------------------------------------------------- +---On event +---@param event LuaEvent +function AbstractSelector:onEvent(event) + local default_settings = User.getDefaultSettings() + local model, block, recipe = self:getParameterObjects() + local prototype_type = event.item1 + local prototype_name = event.item2 + + if User.isWriter(model) then + if User.getParameter(self.parameterTarget) == "HMPropertiesPanel" then + if event.action == "element-select" then + local prototype_compare = User.getParameter("prototype_compare") or {} + table.insert(prototype_compare, {type = prototype_type, name = prototype_name }) + User.setParameter("prototype_compare", prototype_compare) + self:close() + Controller:send("on_gui_refresh", event) + end + elseif User.getParameter(self.parameterTarget) == "HMRecipeExplorer" then + if event.action == "element-select" then + Controller:send("on_gui_event", event, "HMRecipeExplorer") + self:close() + end + else + ---classic selector + if event.action == "element-select" and prototype_type ~= "container" then + local index = nil + if self:getProductFilter() == false then index = 0 end + local new_block, new_recipe = ModelBuilder.addRecipeIntoProductionBlock(model, block, prototype_name, prototype_type, index) + ModelCompute.update(model) + User.setParameter("scroll_element", new_recipe.id) + User.setActiveForm("HMProductionPanel") + User.setParameterObjects("HMProductionPanel", model.id, new_block.id, new_recipe.id) + User.setParameterObjects(self.classname, model.id, new_block.id) + Controller:send("on_gui_refresh", event) + end + ---container selector + if event.action == "element-select" and prototype_type == "container" then + local type = EntityPrototype(prototype_name):getType() + if type == "container" or type == "logistic-container" then + User.setParameter("container_solid", prototype_name) + end + if type == "storage-tank" then + User.setParameter("container_fluid", prototype_name) + end + if type == "car" or type == "cargo-wagon" or type == "item-with-entity-data" or type == "logistic-robot" or type == "transport-belt" then + User.setParameter("vehicle_solid", prototype_name) + end + if type == "fluid-wagon" then + User.setParameter("vehicle_fluid", prototype_name) + end + Controller:send("on_gui_refresh", event) + end + end + end + + if event.action == "recipe-group" then + User.setParameter("recipe_group_selected",event.item1) + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "change-options-visibility" then + local options_visible_name = "filter_options_visible" + local filter_options_visible = User.getSetting(options_visible_name) + if filter_options_visible == nil then filter_options_visible = true end + + local panel = self:getFilterPanel() + panel["filter-options"].visible = not(filter_options_visible) + User.setSetting(options_visible_name, not(filter_options_visible)) + + self:updateFilter(event) + end + + if event.action == "change-sroll-groups" then + User.setSetting("filter_scroll_groups", event.item1 == "true") + local flow_panel, content_panel, menu_panel = self:getPanel() + content_panel.clear() + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "change-boolean-settings" then + if User.getSetting(event.item1) == nil then User.setSetting(event.item1, default_settings[event.item]) end + User.setSetting(event.item1, not(User.getSetting(event.item1))) + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "recipe-filter-switch" then + local switch_by_product = event.element.switch_state == "left" + User.setParameter("filter_prototype_product", switch_by_product) + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "filter-language-switch" then + User.setParameter("filter-language", event.element.switch_state) + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "filter-contain-switch" then + User.setParameter("filter-contain", event.element.switch_state) + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + end + + if event.action == "recipe-filter" then + if User.getModGlobalSetting("filter_on_text_changed") then + User.setParameter("filter_prototype", event.element.text) + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + else + if event.element.parent ~= nil and event.element.parent[self.classname.."=recipe-filter=filter-text"] ~= nil then + User.setParameter("filter_prototype", event.element.parent[self.classname.."=recipe-filter=filter-text"].text) + end + self:resetGroups() + Controller:send("on_gui_update", event, self.classname) + end + end +end + +------------------------------------------------------------------------------- +---Reset groups +function AbstractSelector:resetGroups() + User.resetCache(self.classname, "list_group") + User.resetCache(self.classname, "list_subgroup") + User.resetCache(self.classname, "list_group_elements") +end + +------------------------------------------------------------------------------- +---Update groups +---@param event LuaEvent +---@return table, table, table --list_group, list_subgroup, list_prototype +function AbstractSelector:updateGroups(event) + return {},{},{} +end + +------------------------------------------------------------------------------- +---Prepare +---@param event LuaEvent +function AbstractSelector:prepare(event) + ---recuperation recipes + if Cache.isEmpty(self.classname, "list_ingredients") then + local list_products = {} + local list_ingredients = {} + local list_translate = {} + + self:updateGroups(list_products, list_ingredients, list_translate) + + Cache.setData(self.classname, "list_products", list_products) + Cache.setData(self.classname, "list_ingredients", list_ingredients) + + if User.getModGlobalSetting("filter_translated_string_active") then + Cache.setData(self.classname, "list_translate", list_translate) + end + end +end + +------------------------------------------------------------------------------- +---Translate +---@param event LuaEvent +function AbstractSelector:translate(event) + ---List du cache non vide + if not(Cache.isEmpty(self.classname, "list_translate")) then + ---bluid table translate + if User.getModGlobalSetting("filter_translated_string_active") and not(User.isTranslate()) and event.continue ~= true then + local list_translate = Cache.getData(self.classname, "list_translate") + local table_translate = {} + local step_translate = User.getModGlobalSetting("user_cache_step") or 100 + local index = 0 + event.continue = true + local query_translate + for item_name,localised_name in pairs(list_translate) do + if index % step_translate == 0 then + query_translate = {index=index,list_translate={}} + table.insert(table_translate, query_translate) + end + table.insert(query_translate.list_translate, localised_name) + index = index + 1 + end + event.table_translate = table_translate + return User.createNextEvent(event, self.classname, "translate") + end + ---execute loop + if event.continue and event.method == "translate" then + local query_translate = table.remove(event.table_translate) + self:updateWaitMessage(string.format("Wait translate: %s", query_translate.index or 0)) + for _,localised_name in pairs(query_translate.list_translate) do + Player.native().request_translation(localised_name) + end + if #event.table_translate > 0 then + return User.createNextEvent(event, self.classname, "translate") + else + event.continue = false + end + end + end + return User.createNextEvent(nil, self.classname, "translate") +end + +------------------------------------------------------------------------------- +---On update +---@param event LuaEvent +function AbstractSelector:onUpdate(event) + self:updateFilter(event) + + local response = {wait=false, method="none"} + + response = self:translate(event) + + if response.wait == true then + return + end + + response = self:createElementLists(event) + + if response.wait == true then + return + end + self:updateGroupSelector(event) + + self:updateItemList(event) + + end + +------------------------------------------------------------------------------- +---Check filter +---@param search string +---@return boolean +function AbstractSelector:checkFilter(search) + local filter_prototype = self:getFilter() + if filter_prototype ~= nil and filter_prototype ~= "" then + if User.isFilterTranslate() then + search = User.getTranslate(search) + end + if User.isFilterContain() then + return string.find(search:lower(), filter_prototype:lower(), 1, true) + else + return search:lower() == filter_prototype:lower() + end + end + return true +end + +------------------------------------------------------------------------------- +---Update filter +---@param event LuaEvent +function AbstractSelector:updateFilter(event) + local panel = self:getFilterPanel() + local filter_prototype = self:getFilter() + local filter_options_visible = User.getSetting("filter_options_visible") + local filter_scroll_groups = User.getSetting("filter_scroll_groups") + + if panel["options-menu"] == nil then + local options_menu = GuiElement.add(panel, GuiFlowH("options-menu")) + local options_left = GuiElement.add(options_menu, GuiFlowH("options-left")) + GuiElement.add(options_left, GuiLabel("frame_title"):caption({"helmod_button.options"}):style("helmod_label_title_frame")) + + local options_right = GuiElement.add(options_menu, GuiFlowH("options-right")) + options_right.style.horizontal_align = "right" + options_right.style.horizontally_stretchable = true + options_right.style.horizontal_spacing = 5 + end + + if panel["options-menu"] ~= nil then + local options_right = panel["options-menu"]["options-right"] + options_right.clear() + + local group_sroll = GuiElement.add(options_right, GuiFlowH("group_sroll")) + group_sroll.style.horizontal_spacing = 2 + if filter_scroll_groups ~= false then + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "true"):sprite("menu", defines.sprites.two_rows.black, defines.sprites.two_rows.black):style("helmod_button_menu_sm_selected")) + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "false"):sprite("menu", defines.sprites.three_rows.black, defines.sprites.three_rows.black):style("helmod_button_menu_sm")) + else + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "true"):sprite("menu", defines.sprites.two_rows.black, defines.sprites.two_rows.black):style("helmod_button_menu_sm")) + GuiElement.add(group_sroll, GuiButton(self.classname, "change-sroll-groups", "false"):sprite("menu", defines.sprites.three_rows.black, defines.sprites.three_rows.black):style("helmod_button_menu_sm_selected")) + end + + local group_visible = GuiElement.add(options_right, GuiFlowH("group_visible")) + group_visible.style.horizontal_spacing = 2 + if filter_options_visible ~= false then + GuiElement.add(options_right, GuiButton(self.classname, "change-options-visibility"):sprite("menu", defines.sprites.arrow_top.black, defines.sprites.arrow_top.black):style("helmod_button_menu_sm")) + else + GuiElement.add(options_right, GuiButton(self.classname, "change-options-visibility"):sprite("menu", defines.sprites.arrow_bottom.black, defines.sprites.arrow_bottom.black):style("helmod_button_menu_sm")) + end + end + + if panel["filter-options"] == nil then + local options_panel = GuiElement.add(panel, GuiFlowV("filter-options")) + options_panel.visible = filter_options_visible ~= false + + if self.product_option then + GuiElement.add(options_panel, GuiSwitch(self.classname, "recipe-filter-switch"):state("left"):leftLabel({"helmod_recipe-edition-panel.filter-by-product"}):rightLabel({"helmod_recipe-edition-panel.filter-by-ingredient"})) + end + + ---switch language + local switch_position = "left" + if User.getModGlobalSetting("filter_translated_string_active") and User.getParameter("filter-language") ~= nil then + switch_position = User.getParameter("filter-language") + end + local filter_switch = GuiElement.add(options_panel, GuiSwitch(self.classname, "filter-language-switch"):state(switch_position):rightLabel({"helmod_recipe-edition-panel.filter-language-switch-left"}, {"tooltip.filter-language-switch-left"}):leftLabel({"helmod_recipe-edition-panel.filter-language-switch-right"}, {"tooltip.filter-language-switch-right"}):tooltip({"helmod_recipe-edition-panel.filter-language-switch"})) + if not(User.getModGlobalSetting("filter_translated_string_active")) then + filter_switch.enabled = false + filter_switch.switch_state = "right" + end + ---switch contain + local contain_position = "left" + if User.getParameter("filter-contain") ~= nil then + contain_position = User.getParameter("filter-contain") + end + GuiElement.add(options_panel, GuiSwitch(self.classname, "filter-contain-switch"):state(contain_position):rightLabel({"helmod_recipe-edition-panel.filter-contain-switch-left"}, {"tooltip.filter-contain-switch-left"}):leftLabel({"helmod_recipe-edition-panel.filter-contain-switch-right"}, {"tooltip.filter-contain-switch-right"}):tooltip({"helmod_recipe-edition-panel.filter-contain-switch"})) + + ---filter table + local filter_table = GuiElement.add(options_panel, GuiTable("filter"):column(2)) + filter_table.vertical_centering = true + + if self.disable_option then + local filter_show_disable = User.getSetting("filter_show_disable") + GuiElement.add(filter_table, GuiCheckBox(self.classname, "change-boolean-settings", "filter_show_disable"):state(filter_show_disable)) + GuiElement.add(filter_table, GuiLabel("filter_show_disable"):caption({"helmod_recipe-edition-panel.filter-show-disable"})) + end + + if self.hidden_option then + local filter_show_hidden = User.getSetting("filter_show_hidden") + GuiElement.add(filter_table, GuiCheckBox(self.classname, "change-boolean-settings", "filter_show_hidden"):state(filter_show_hidden)) + GuiElement.add(filter_table, GuiLabel("filter_show_hidden"):caption({"helmod_recipe-edition-panel.filter-show-hidden"})) + end + + if self.hidden_player_crafting then + local filter_show_hidden_player_crafting = User.getSetting("filter_show_hidden_player_crafting") + GuiElement.add(filter_table, GuiCheckBox(self.classname, "change-boolean-settings", "filter_show_hidden_player_crafting"):state(filter_show_hidden_player_crafting)) + GuiElement.add(filter_table, GuiLabel("filter_show_hidden_player_crafting"):caption({"helmod_recipe-edition-panel.filter-show-hidden-player-crafting"})) + end + + if self.unlock_recipe then + local filter_show_lock_recipes = User.getSetting("filter_show_lock_recipes") + GuiElement.add(filter_table, GuiCheckBox(self.classname, "change-boolean-settings", "filter_show_lock_recipes"):state(filter_show_lock_recipes)) + GuiElement.add(filter_table, GuiLabel("filter_show_lock_recipes"):caption({"helmod_recipe-edition-panel.filter-show-lock-recipes"})) + end + + ---filter + local filter_box_panel = GuiElement.add(panel, GuiFlowH("filter-box-panel")) + + local label_filter_value = GuiElement.add(filter_box_panel, GuiLabel("filter-value"):caption({"helmod_common.filter"})) + label_filter_value.style.margin = {5,5,0,0} + if User.getModGlobalSetting("filter_on_text_changed") then + local text_filter = GuiElement.add(filter_box_panel, GuiTextField(self.classname, "recipe-filter", "filter-value=onchange"):text(filter_prototype):style("helmod_textfield_filter")) + text_filter.lose_focus_on_confirm = false + text_filter.focus() + else + GuiElement.add(filter_box_panel, GuiTextField(self.classname, "recipe-filter", "filter-text"):text(filter_prototype):style("helmod_textfield_filter")) + GuiElement.add(filter_box_panel, GuiButton(self.classname, "recipe-filter", "filter-button"):caption({"helmod_button.apply"})) + end + + end + if self.product_option then + local switch_by_product = "right" + if self:getProductFilter() == true then switch_by_product = "left" end + panel["filter-options"][self.classname.."=recipe-filter-switch"].switch_state = switch_by_product + if filter_prototype ~= nil then + if User.getModGlobalSetting("filter_on_text_changed") then + panel["filter-box-panel"][self.classname.."=recipe-filter=filter-value=onchange"].text = filter_prototype + else + panel["filter-box-panel"][self.classname.."=recipe-filter=filter-text"].text = filter_prototype + end + end + end +end + +------------------------------------------------------------------------------- +---Create element lists +---@param event LuaEvent +---@return table +function AbstractSelector:createElementLists(event) + local list_group_elements = self:getListGroupElements() + local list_group = self:getListGroup() + local list_subgroup = self:getListSubGroup() + + if table.size(list_group) == 0 and event.continue ~= true then + local list = self:getListPrototype() + local step_list = User.getModGlobalSetting("user_cache_step") or 100 + local index = 0 + local table_element = {} + local query_list = {} + event.continue = true + ---list_products[element.name][type - lua_recipe.name] + for key, element in pairs(list) do + if index % step_list == 0 then + query_list = {index=index,list={}} + table.insert(table_element, query_list) + end + query_list.list[key] = element + index = index + 1 + end + event.table_element = table_element + return User.createNextEvent(event, self.classname, "list") + end + ---execute loop + if event.continue and event.method == "list" then + local filter_show_lock_recipes = User.getSetting("filter_show_lock_recipes") + local filter_show_disable = User.getSetting("filter_show_disable") + local filter_show_hidden = User.getSetting("filter_show_hidden") + local filter_show_hidden_player_crafting = User.getSetting("filter_show_hidden_player_crafting") + local query_list = table.remove(event.table_element) + self:updateWaitMessage(string.format("Wait list build: %s", query_list.index or 0)) + + for key, element in pairs(query_list.list) do + ---filter sur le nom element (product ou ingredient) + if self:checkFilter(key) then + for element_name, element in pairs(element) do + local prototype = self:getPrototype(element) + if (not(self.unlock_recipe) or (prototype:getUnlock() == true or filter_show_lock_recipes == true)) and + (not(self.disable_option) or (prototype:getEnabled() == true or filter_show_disable == true)) and + (not(self.hidden_option) or (prototype:getHidden() == false or filter_show_hidden == true)) and + (not(self.hidden_player_crafting) or (prototype:getHiddenPlayerCrafting() == false or filter_show_hidden_player_crafting == true)) then + + if list_group_elements[element.group] == nil then list_group_elements[element.group] = {} end + if list_group_elements[element.group][element.subgroup] == nil then list_group_elements[element.group][element.subgroup] = {} end + list_group_elements[element.group][element.subgroup][element_name] = element + + list_group[element.group] = prototype:getGroup() + list_subgroup[element.subgroup] = prototype:getSubgroup() + end + end + end + end + User.setCache(self.classname, "list_group", list_group) + User.setCache(self.classname, "list_subgroup", list_subgroup) + User.setCache(self.classname, "list_group_elements", list_group_elements) + if #event.table_element > 0 then + return User.createNextEvent(event, self.classname, "list") + else + event.continue = false + end + end + + local list_item = self:getListItem() + local group_selected = User.getParameter("recipe_group_selected") + local list_group = self:getListGroup() + + if list_group_elements[group_selected] then + list_item = list_group_elements[group_selected] + else + local group_selected,_ = next(list_group) + User.setParameter("recipe_group_selected", group_selected) + list_item = list_group_elements[group_selected] + end + User.setCache(self.classname, "list_item", list_item or {}) + event.continue = false + + return User.createNextEvent(nil, self.classname, "list") +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function AbstractSelector:getPrototype(element, type) +end + +------------------------------------------------------------------------------- +---Append groups +---@param element string +---@param type string +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function AbstractSelector:appendGroups(element, type, list_products, list_ingredients, list_translate) + local prototype = self:getPrototype(element) + local lua_prototype = prototype:native() + + if list_ingredients[lua_prototype.name] == nil then list_ingredients[lua_prototype.name] = {} end + list_ingredients[lua_prototype.name][lua_prototype.name] = {name=lua_prototype.name, group=prototype:getGroup().name, subgroup=prototype:getSubgroup().name, type=type, order=lua_prototype.order} + + if lua_prototype.localised_name ~= nil then + list_translate[element.name] = lua_prototype.localised_name + end + +end + +------------------------------------------------------------------------------- +---Update wait message +---@param message string +function AbstractSelector:updateWaitMessage(message) + local panel = self:getGroupsPanel() + local item_list_panel = self:getItemListPanel() + item_list_panel.clear() + GuiElement.add(item_list_panel, GuiLabel("wait message"):caption(message)) +end + +------------------------------------------------------------------------------- +---Update fail message +---@param message string +function AbstractSelector:updateFailMessage(message) + local panel = self:getGroupsPanel() + local item_list_panel = self:getItemListPanel() + item_list_panel.clear() + GuiElement.add(item_list_panel, GuiLabel("wait message"):caption(message):fail()) +end + +------------------------------------------------------------------------------- +---Update item list +---@param event LuaEvent +function AbstractSelector:updateItemList(event) + local item_list_panel = self:getItemListPanel() + item_list_panel.clear() + local list_subgroup = self:getListSubGroup() + local list_item = self:getListItem() + + ---recuperation recipes et subgroupes + local recipe_selector_list = GuiElement.add(item_list_panel, GuiFlowV("recipe_list")) + if table.size(list_item) > 0 then + for subgroup, list in spairs(list_item, function(t,a,b) return list_subgroup[b]["order"] > list_subgroup[a]["order"] end) do + ---boucle subgroup + local guiRecipeSubgroup = GuiElement.add(recipe_selector_list, GuiTable("recipe-table-", subgroup):column(10):style("helmod_table_recipe_selector")) + for key, prototype in spairs(list,function(t,a,b) return t[b]["order"] > t[a]["order"] end) do + local tooltip = self:buildPrototypeTooltip(prototype) + self:buildPrototypeIcon(guiRecipeSubgroup, prototype, tooltip) + end + end + else + event.message = "Empty list" + Dispatcher:send("on_gui_message", event, self.classname) + end + +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function AbstractSelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local tooltip = "" + return tooltip +end + +------------------------------------------------------------------------------- +---Build prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function AbstractSelector:buildPrototypeIcon(gui_element, prototype, tooltip) + GuiElement.add(gui_element, GuiButtonSelectSprite(self.classname, "recipe-select"):sprite(prototype.type, prototype.name):tooltip(tooltip)) +end + +------------------------------------------------------------------------------- +---Update group selector +---@param event LuaEvent +function AbstractSelector.updateGroupSelector(self, event) + local panel = self:getGroupsPanel() + + panel.clear() + local list_group = self:getListGroup() + + ---ajouter de la table des groupes de recipe + local gui_group_panel = GuiElement.add(panel, GuiTable("recipe-groups"):column(6):style("helmod_table_recipe_selector")) + + for _, group in spairs(list_group,function(t,a,b) return t[b]["order"] > t[a]["order"] end) do + ---set le groupe + local group_selected = User.getParameter("recipe_group_selected") + if group_selected == nil then User.setParameter("recipe_group_selected",group.name) end + local color = nil + if User.getParameter("recipe_group_selected") == group.name then + color = "yellow" + end + local tooltip + if group.name == "helmod" then + tooltip = "Helmod" + else + tooltip = group.localised_name + end + + ---ajoute les icons de groupe + local action = GuiElement.add(gui_group_panel, GuiButtonSelectSpriteXxl(self.classname, "recipe-group"):sprite(self.sprite_type, group.name):tooltip(tooltip):color(color)) + end + +end diff --git a/helmod/selector/ContainerSelector.lua b/helmod/selector/ContainerSelector.lua new file mode 100644 index 00000000..05fdc61c --- /dev/null +++ b/helmod/selector/ContainerSelector.lua @@ -0,0 +1,57 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build container selector +---@class ContainerSelector +ContainerSelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---Return caption +---@return table +function ContainerSelector:getCaption() + return {"helmod_selector-panel.container-title"} +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function ContainerSelector:getPrototype(element, type) + return EntityPrototype(element, type) +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function ContainerSelector:updateGroups(list_products, list_ingredients, list_translate) + local filters = {} + for _,type in pairs({"storage-tank", "container", "logistic-container", "cargo-wagon", "fluid-wagon", "item-with-entity-data", "car", "logistic-robot", "transport-belt"}) do + table.insert(filters, {filter="type", mode="or", invert=false, type=type}) + end + for key, entity in pairs(Player.getEntityPrototypes(filters)) do + self:appendGroups(entity, "entity", list_products, list_ingredients, list_translate) + end +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function ContainerSelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local entity_prototype = EntityPrototype(prototype) + local tooltip = entity_prototype:getLocalisedName() + return tooltip +end + +------------------------------------------------------------------------------- +---Build prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function ContainerSelector:buildPrototypeIcon(gui_element, prototype, tooltip) + local button = GuiElement.add(gui_element, GuiButtonSelectSprite(self.classname, "element-select", "container"):choose(prototype.type, prototype.name):color()) + button.locked = true +end diff --git a/helmod/selector/EntitySelector.lua b/helmod/selector/EntitySelector.lua new file mode 100644 index 00000000..16864e40 --- /dev/null +++ b/helmod/selector/EntitySelector.lua @@ -0,0 +1,65 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build entity selector +-- +---@module EntitySelector +---@extends #AbstractSelector +-- + +EntitySelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---Return caption +---@return table +function EntitySelector:getCaption() + return {"helmod_selector-panel.entity-title"} +end + +------------------------------------------------------------------------------- +---After initialization +-- +---@function [parent=#EntitySelector] afterInit +-- +function EntitySelector:afterInit() +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function EntitySelector:getPrototype(element, type) + return EntityPrototype(element, type) +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function EntitySelector:updateGroups(list_products, list_ingredients, list_translate) + for key, entity in pairs(Player.getEntityPrototypes()) do + self:appendGroups(entity, "entity", list_products, list_ingredients, list_translate) + end +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function EntitySelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local entity_prototype = self:getPrototype(prototype) + local tooltip = entity_prototype:getLocalisedName() + return tooltip +end + +------------------------------------------------------------------------------- +---Build prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function EntitySelector:buildPrototypeIcon(gui_element, prototype, tooltip) + local button = GuiElement.add(gui_element, GuiButtonSelectSprite(self.classname, "element-select", "entity"):choose(prototype.type, prototype.name)) + button.locked = true +end diff --git a/helmod/selector/FluidSelector.lua b/helmod/selector/FluidSelector.lua new file mode 100644 index 00000000..0a85bc7a --- /dev/null +++ b/helmod/selector/FluidSelector.lua @@ -0,0 +1,62 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build fluid selector +-- +---@module FluidSelector +---@extends #AbstractSelector +-- + +FluidSelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---After initialization +function FluidSelector:afterInit() + self.hidden_option = true +end + +------------------------------------------------------------------------------- +---Return caption +---@return table +function FluidSelector:getCaption() + return {"helmod_selector-panel.fluid-title"} +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function FluidSelector:getPrototype(element, type) + return FluidPrototype(element, type) +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function FluidSelector:updateGroups(list_products, list_ingredients, list_translate) + for key, fluid in pairs(Player.getFluidPrototypes()) do + self:appendGroups(fluid, "fluid", list_products, list_ingredients, list_translate) + end +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function FluidSelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local tooltip = FluidPrototype(prototype):getLocalisedName() + return tooltip +end + +------------------------------------------------------------------------------- +---Build prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function FluidSelector:buildPrototypeIcon(gui_element, prototype, tooltip) + local button = GuiElement.add(gui_element, GuiButtonSelectSprite(self.classname, "element-select", "fluid"):choose(prototype.type, prototype.name)) + button.locked = true +end diff --git a/helmod/selector/ItemSelector.lua b/helmod/selector/ItemSelector.lua new file mode 100644 index 00000000..44945847 --- /dev/null +++ b/helmod/selector/ItemSelector.lua @@ -0,0 +1,63 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build item selector +-- +---@module ItemSelector +---@extends #AbstractSelector +-- + +ItemSelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---After initialization +function ItemSelector:afterInit() + self.hidden_option = true +end + +------------------------------------------------------------------------------- +---Return caption +---@return table +function ItemSelector:getCaption() + return {"helmod_selector-panel.item-title"} +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function ItemSelector:getPrototype(element, type) + return ItemPrototype(element, type) +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function ItemSelector:updateGroups(list_products, list_ingredients, list_translate) + for key, item in pairs(Player.getItemPrototypes()) do + self:appendGroups(item, "item", list_products, list_ingredients, list_translate) + end + +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function ItemSelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local tooltip = ItemPrototype(prototype):getLocalisedName() + return tooltip +end + +------------------------------------------------------------------------------- +---Build prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function ItemSelector:buildPrototypeIcon(gui_element, prototype, tooltip) + local button = GuiElement.add(gui_element, GuiButtonSelectSprite(self.classname, "element-select", "item"):choose(prototype.type, prototype.name)) + button.locked = true +end diff --git a/helmod/selector/RecipeSelector.lua b/helmod/selector/RecipeSelector.lua new file mode 100644 index 00000000..8ee079c1 --- /dev/null +++ b/helmod/selector/RecipeSelector.lua @@ -0,0 +1,258 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build recipe selector +-- +---@module RecipeSelector +---@extends #AbstractSelector +-- + +RecipeSelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---After initialization +-- +---@function [parent=#RecipeSelector] afterInit +-- +function RecipeSelector:afterInit() + self.unlock_recipe = true + self.disable_option = true + self.hidden_option = true + self.product_option = true + self.hidden_player_crafting = true +end + +------------------------------------------------------------------------------- +---Return caption +---@return table +function RecipeSelector:getCaption() + return {"helmod_selector-panel.recipe-title"} +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function RecipeSelector:getPrototype(element, type) + return RecipePrototype(element, type) +end + +------------------------------------------------------------------------------- +---Append groups +---@param element string +---@param type string +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function RecipeSelector:appendGroups(element, type, list_products, list_ingredients, list_translate) + local prototype = self:getPrototype(element, type) + + local lua_prototype = prototype:native() + if lua_prototype == nil then + return + end + local prototype_name = string.format("%s-%s", type, lua_prototype.name) + + for key, raw_product in pairs(prototype:getRawProducts()) do + if list_products[raw_product.name] == nil then + list_products[raw_product.name] = {} + end + list_products[raw_product.name][prototype_name] = {name=lua_prototype.name, group=lua_prototype.group.name, subgroup=lua_prototype.subgroup.name, type=type, order=lua_prototype.order} + + local product = Product(raw_product) + local localised_name = product:getLocalisedName() + if localised_name ~= nil and localised_name ~= "unknow" then + list_translate[raw_product.name] = localised_name + end + end + + for key, raw_ingredient in pairs(prototype:getRawIngredients()) do + if list_ingredients[raw_ingredient.name] == nil then + list_ingredients[raw_ingredient.name] = {} + end + list_ingredients[raw_ingredient.name][prototype_name] = {name=lua_prototype.name, group=lua_prototype.group.name, subgroup=lua_prototype.subgroup.name, type=type, order=lua_prototype.order} + + local ingredient = Product(raw_ingredient) + local localised_name = ingredient:getLocalisedName() + if localised_name ~= nil and localised_name ~= "unknow" then + list_translate[raw_ingredient.name] = localised_name + end + end +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function RecipeSelector:updateGroups(list_products, list_ingredients, list_translate) + RecipeSelector:updateUnlockRecipesCache() + for key, recipe in pairs(Player.getRecipes()) do + self:appendGroups(recipe, "recipe", list_products, list_ingredients, list_translate) + if self:getPrototype(recipe, "recipe"):getHasBurntResult() == true then + self:appendGroups(recipe, "recipe-burnt", list_products, list_ingredients, list_translate) + end + end + for key, recipe in pairs(Player.getFluidRecipes()) do + self:appendGroups(recipe, "fluid", list_products, list_ingredients, list_translate) + end + for key, recipe in pairs(Player.getBoilerRecipes()) do + self:appendGroups(recipe, "boiler", list_products, list_ingredients, list_translate) + end + for key, recipe in pairs(Player.getResourceRecipes()) do + self:appendGroups(recipe, "resource", list_products, list_ingredients, list_translate) + end + for key, recipe in pairs(Player.getRocketRecipes()) do + self:appendGroups(recipe, "rocket", list_products, list_ingredients, list_translate) + end + for key, entity in pairs(Player.getEnergyMachines()) do + self:appendGroups(entity, "energy", list_products, list_ingredients, list_translate) + end +end + +------------------------------------------------------------------------------- +---Update unlock recipes cache +function RecipeSelector:updateUnlockRecipesCache() + local unlock_recipes = {} + local filters = {{filter = "hidden", invert = true, mode = "or"},{filter = "has-effects", invert = false, mode = "and"}} + local technology_prototypes = Player.getTechnologies(filters) + for _,technology in pairs(technology_prototypes) do + local modifiers = technology.effects + for _,modifier in pairs(modifiers) do + if modifier.type == "unlock-recipe" and modifier.recipe ~= nil then + unlock_recipes[modifier.recipe] = true + end + end + end + for _, recipe in pairs(Player.getRecipes()) do + if recipe.enabled == true then + local factories = Player.getProductionsCrafting(recipe.category, recipe) + if table.size(factories) > 0 then + unlock_recipes[recipe.name] = true + end + end + end + Cache.setData("other", "unlock_recipes", unlock_recipes) +end + +------------------------------------------------------------------------------- +---Build prototype tooltip line +---@param item ingredient / product table +---@param displayQuantity boolean +---@return table +function RecipeSelector:buildPrototypeTooltipLine(item, displayQuantity) + local line = {"", "\n"} + if item.type == "energy" then + local sprite = GuiElement.getSprite(defines.sprite_tooltips[item.name]) + table.insert(line, string.format("[img=%s] ", sprite)) + table.insert(line, helmod_tag.font.default_bold) + table.insert(line, Format.formatNumberKilo(item.amount, "W")) + table.insert(line, " x ") + table.insert(line, helmod_tag.font.close) + else + table.insert(line, string.format("[%s=%s] ", item.type, item.name)) + if displayQuantity then + table.insert(line, helmod_tag.font.default_bold) + table.insert(line, Format.formatNumberElement(item.amount)) + table.insert(line, " x ") + table.insert(line, helmod_tag.font.close) + end + end + table.insert(line, Player.getLocalisedName(item)) + + return line +end + +------------------------------------------------------------------------------- +---Build prototype tooltip +---@param prototype table +---@return table +function RecipeSelector:buildPrototypeTooltip(prototype) + ---initalize tooltip + local tooltip = "" + + if prototype.type == "boiler" or prototype.type == "fluid" or prototype.type == "energy" then + + local recipe_prototype = RecipePrototype(prototype.name, prototype.type) + local recipe_name + local displayQuantity = false + local factory = nil + if prototype.type == "energy" then + local entity_prototype = EntityPrototype(prototype) + recipe_name = entity_prototype:getLocalisedName() + factory = prototype + displayQuantity = true + else + recipe_name = recipe_prototype:getLocalisedName() + end + tooltip = {""} + + ---heading + table.insert(tooltip, {"", helmod_tag.font.default_bold, recipe_name, helmod_tag.font.close}) + + ---ingredients + local ingredients = recipe_prototype:getIngredients(factory) + if table.size(ingredients) > 0 then + table.insert(tooltip, {"", "\n", helmod_tag.font.default_bold, helmod_tag.color.gold, {"helmod_common.ingredients"}, ":", helmod_tag.color.close, helmod_tag.font.close}) + for _, ingredient in pairs(ingredients) do + table.insert(tooltip, RecipeSelector:buildPrototypeTooltipLine(ingredient, displayQuantity)) + end + end + + ---products + local products = recipe_prototype:getProducts(factory) + if table.size(products) > 0 then + table.insert(tooltip, {"", "\n", helmod_tag.font.default_bold, helmod_tag.color.gold, {"helmod_common.products"}, ":", helmod_tag.color.close, helmod_tag.font.close}) + for _, product in pairs(products) do + table.insert(tooltip, RecipeSelector:buildPrototypeTooltipLine(product, displayQuantity)) + end + end + + ---made in + local entities = {} + if prototype.type == "boiler" then + entities = Player.getBoilersForRecipe(recipe_prototype) + elseif prototype.type == "fluid" then + entities = Player.getOffshorePumps(prototype.name) + end + if table.size(entities) > 0 then + table.insert(tooltip, {"", "\n", helmod_tag.font.default_bold, helmod_tag.color.gold, {"helmod_common.made-in"}, ":", helmod_tag.color.close, helmod_tag.font.close}) + for _, entity in pairs(entities) do + if #tooltip >= 19 then + table.insert(tooltip, {"", "\n", "..."}) + break + end + local entity_prototype = EntityPrototype(entity) + table.insert(tooltip, {"", "\n", string.format("[%s=%s] ", "entity", entity.name), entity_prototype:getLocalisedName()}) + end + end + end + + return tooltip +end + +------------------------------------------------------------------------------- +---Create prototype icon +---@param gui_element GuiLuaElement +---@param prototype table +---@param tooltip table +function RecipeSelector:buildPrototypeIcon(gui_element, prototype, tooltip) + local model, block, recipe = self:getParameterObjects() + local recipe_prototype = self:getPrototype(prototype) + local color = nil + if recipe_prototype:getCategory() == "crafting-handonly" then + color = "yellow" + elseif recipe_prototype:getEnabled() == false then + color = "red" + end + + local icon_name, icon_type = recipe_prototype:getIcon() + local button_prototype = GuiButtonSelectSprite(self.classname, "element-select", prototype.type):choose(icon_type, icon_name, prototype.name):color(color):tooltip(tooltip) + local button = GuiElement.add(gui_element, button_prototype) + + button.locked = true + if prototype.type == "boiler" then + prototype.output_fluid_temperature = recipe_prototype.output_fluid_temperature + end + GuiElement.infoRecipe(button, prototype) +end diff --git a/helmod/selector/TechnologySelector.lua b/helmod/selector/TechnologySelector.lua new file mode 100644 index 00000000..5af98d1a --- /dev/null +++ b/helmod/selector/TechnologySelector.lua @@ -0,0 +1,46 @@ +require "selector.AbstractSelector" +------------------------------------------------------------------------------- +---Class to build technology selector +---@class TechnologySelector +TechnologySelector = newclass(AbstractSelector) + +------------------------------------------------------------------------------- +---After initialization +function TechnologySelector:afterInit() + self.disable_option = true + self.sprite_type = nil +end + +------------------------------------------------------------------------------- +---Return caption +---@return table +function TechnologySelector:getCaption() + return {"helmod_selector-panel.technology-title"} +end + +------------------------------------------------------------------------------- +---Get prototype +---@param element table +---@param type string +---@return table +function TechnologySelector:getPrototype(element, type) + return Technology(element, type) +end + +------------------------------------------------------------------------------- +---Update groups +---@param list_products table +---@param list_ingredients table +---@param list_translate table +function TechnologySelector:updateGroups(list_products, list_ingredients, list_translate) + for key, technology in pairs(Player.getTechnologies()) do + self:appendGroups(technology, "technology", list_products, list_ingredients, list_translate) + end +end + +------------------------------------------------------------------------------- +---Build prototype icon +function TechnologySelector:buildPrototypeIcon(guiElement, prototype, tooltip) + local button = GuiElement.add(guiElement, GuiButtonSelectSprite(self.classname, "element-select", "technology"):choose(prototype.type, prototype.name)) + button.locked = true +end diff --git a/helmod/settings.lua b/helmod/settings.lua new file mode 100644 index 00000000..9385439e --- /dev/null +++ b/helmod/settings.lua @@ -0,0 +1,19 @@ +require("core.defines") + +for settings_name,settings in pairs(defines.constant.settings_mod) do + local name = "helmod_"..settings_name + local current_settings = { + type = settings.type, + name = name, + setting_type = settings.setting_type, + localised_name = settings.localised_name, + localised_description = settings.localised_description, + default_value = settings.default_value, + minimum_value = settings.minimum_value, + maximum_value = settings.maximum_value, + allowed_values = settings.allowed_values, + allow_blank = settings.allow_blank, + order = settings.order + } + data:extend{current_settings} +end diff --git a/helmod/test_find.lua b/helmod/test_find.lua new file mode 100644 index 00000000..774f0dfd --- /dev/null +++ b/helmod/test_find.lua @@ -0,0 +1,7 @@ +local value = string.find("pure-natural-gas","pure-natural-gas",1,true) +print(value) + + +local gameDay = {day=12500,dust=5000,night=2500,dawn=2500} +local dark_time = (gameDay.dust/2 + gameDay.night + gameDay.dawn / 2 ) +print(dark_time/60) diff --git a/helmod/test_simplex.lua b/helmod/test_simplex.lua new file mode 100644 index 00000000..2cdca4d8 --- /dev/null +++ b/helmod/test_simplex.lua @@ -0,0 +1,38 @@ +Simplex = require "math.SolverSimplex" + +function rawlen(M) + local index = 0 + for _,_ in pairs(M) do + index = index + 1 + end + return index +end + +local index = 0 +local M = {} + +index = 1 +M[index] = {} +table.insert(M[index], {{index=1,name="B",type="none"},{index=1,name="R",type="none"},{index=1,name="P",type="none"},{index=1,name="E",type="none"},{index=1,name="C",type="none"}, + {index=1,name="x1"},{index=1,name="x2"},{index=1,name="x3"},{index=1,name="x4"}}) +table.insert(M[index], {{name="Input",type="none"},0,0,0,0,7,9,18,17}) +table.insert(M[index], {{index=1,name="x5"},0,1,1,42,2,4,5,7}) +table.insert(M[index], {{index=1,name="x6"},0,1,1,17,1,1,2,2}) +table.insert(M[index], {{index=1,name="x7"},0,1,1,24,1,2,3,3}) +table.insert(M[index], {{name="Z",type="none"},0,0,0,0,0,0,0,0}) + +index = 2 +M[index] = {} +table.insert(M[index], {{index=1,name="B",type="none"},{index=1,name="R",type="none"},{index=1,name="P",type="none"},{index=1,name="E",type="none"},{index=1,name="C",type="none"},{index=1,name="nitrogen",type="fluid",is_ingredient=false,tooltip="nitrogen1\nProduit"},{index=1,name="filtration-media",type="item",is_ingredient=true,tooltip="filtration-media1\nIngredient"},{index=1,name="purest-nitrogen-gas",type="fluid",is_ingredient=false,tooltip="purest-nitrogen-gas1\nProduit"},{index=1,name="oxygen",type="fluid",is_ingredient=false,tooltip="oxygen1\nProduit"},{index=1,name="pressured-air",type="fluid",is_ingredient=false,tooltip="pressured-air1\nProduit"}}) +table.insert(M[index], {{name="Input",type="none"},0,0,0,0,1000,0,0,0,0}) +table.insert(M[index], {{name="nitrogen",type="recipe",tooltip="nitrogen\nRecette"},0,1,4,0,200,-1,-100,0,0}) +table.insert(M[index], {{name="purest-nitrogen-gas",type="recipe",tooltip="purest-nitrogen-gas\nRecette"},0,1,5,0,50,0,60,20,-100}) +table.insert(M[index], {{name="pressured-air",type="recipe",tooltip="pressured-air\nRecette"},0,1,1,0,0,0,0,0,20}) +table.insert(M[index], {{name="Z",type="none"},0,0,0,0,0,0,0,0,0}) + +local test = 2 +Simplex.debug = true +--Simplex.new(M[test]) +Simplex.new(M[test]) +Simplex.solve() + diff --git a/helmod/test_solver.lua b/helmod/test_solver.lua new file mode 100644 index 00000000..7123fc4d --- /dev/null +++ b/helmod/test_solver.lua @@ -0,0 +1,26 @@ +Solver = require "math.Solver" + +function rawlen(M) + local index = 0 + for _,_ in pairs(M) do + index = index + 1 + end + return index +end + +local index = 0 +local M = {} +index = 1 +M[index] = {} +table.insert(M[index], {{index=1,name="B",type="none"},{index=1,name="R",type="none"},{index=1,name="P",type="none"},{index=1,name="E",type="none"},{index=1,name="C",type="none"},{index=1,name="nitrogen",type="fluid",is_ingredient=false,tooltip="nitrogen1\nProduit"},{index=1,name="filtration-media",type="item",is_ingredient=true,tooltip="filtration-media1\nIngredient"},{index=1,name="purest-nitrogen-gas",type="fluid",is_ingredient=false,tooltip="purest-nitrogen-gas1\nProduit"},{index=1,name="oxygen",type="fluid",is_ingredient=false,tooltip="oxygen1\nProduit"},{index=1,name="pressured-air",type="fluid",is_ingredient=false,tooltip="pressured-air1\nProduit"}}) +table.insert(M[index], {{name="Input",type="none"},0,0,0,0,1000,0,0,0,0}) +table.insert(M[index], {{name="nitrogen",type="recipe",tooltip="nitrogen\nRecette"},0,1,4,0,200,-1,-100,0,0}) +table.insert(M[index], {{name="purest-nitrogen-gas",type="recipe",tooltip="purest-nitrogen-gas\nRecette"},0,1,5,0,50,0,60,20,-100}) +table.insert(M[index], {{name="pressured-air",type="recipe",tooltip="pressured-air\nRecette"},0,1,1,0,0,0,0,0,20}) +table.insert(M[index], {{name="Z",type="none"},0,0,0,0,0,0,0,0,0}) + +local test = 1 +Solver.debug = true +Solver.new(M[test]) +Solver.solve() + diff --git a/helmod/thumbnail.png b/helmod/thumbnail.png new file mode 100644 index 00000000..1f682a2c Binary files /dev/null and b/helmod/thumbnail.png differ diff --git a/helmod/unit_test/Data.lua b/helmod/unit_test/Data.lua new file mode 100644 index 00000000..d2785c48 --- /dev/null +++ b/helmod/unit_test/Data.lua @@ -0,0 +1,236 @@ +local data = {mod="Base"} +data.energy = {} +data.energy["offshore-pump"] = { + energy_type="none", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="none", + energy_consumption=0, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="water", amount=1200}, + pollution=0, + speed=1200, + recipe={type="fluid"} +} +data.energy["assembling-machine-1"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=2500, + energy_usage_max=75000, + energy_usage_priority="secondary-input", + energy_consumption=77500, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=4, + speed=0.5, + recipe={type="recipe"} +} +data.energy["assembling-machine-2"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=5000, + energy_usage_max=150000, + energy_usage_priority="secondary-input", + energy_consumption=155000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=3, + speed=0.75, + recipe={type="recipe"} +} +data.energy["assembling-machine-3"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=12500, + energy_usage_max=375000, + energy_usage_priority="secondary-input", + energy_consumption=387500, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=2, + speed=1.25, + recipe={type="recipe"} +} +data.energy["boiler"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=1800000, + energy_usage_priority="none", + energy_type_output="none", + energy_consumption=1800000, + energy_production=0, + effectivity=1, + target_temperature=165, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=60}, + pollution=30, + speed=1, + recipe={name="steam"} +} +data.energy["steam-engine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=900000, + energy_type_output="electric", + energy_production=900000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=30, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=30, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=10000000, + energy_usage_priority="none", + energy_consumption=10000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=500, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=103}, + pollution=0, + speed=1, + recipe={type="resource"} +} +data.energy["steam-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=5820000, + energy_type_output="electric", + energy_production=5820000, + effectivity=1, + target_temperature=0, + maximum_temperature=500, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=40000000, + energy_usage_priority="none", + energy_consumption=40000000, + energy_type_output="heat", + energy_production=40000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["solar-panel"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=60000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["accumulator"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=300000, + energy_usage_priority="managed-accumulator", + energy_consumption=300000, + energy_type_output="electric", + energy_production=300000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +return data \ No newline at end of file diff --git a/helmod/unit_test/DataBobAngel.lua b/helmod/unit_test/DataBobAngel.lua new file mode 100644 index 00000000..728dbf83 --- /dev/null +++ b/helmod/unit_test/DataBobAngel.lua @@ -0,0 +1,529 @@ +local data = {mod="BoB Angel"} +data.energy = {} +data.energy["burner-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=5400000, + energy_usage_priority="none", + energy_consumption=5400000, + energy_type_output="heat", + energy_production=5400000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=30, + speed=1, + recipe={type="recipe"} +} +data.energy["burner-reactor-3"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=9000000, + energy_usage_priority="none", + energy_consumption=9000000, + energy_type_output="heat", + energy_production=9000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=30, + speed=1, + recipe={type="recipe"} +} +data.energy["fluid-reactor"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=5400000, + energy_usage_priority="none", + energy_consumption=5400000, + energy_type_output="heat", + energy_production=5400000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=1.52, + fluid_production={name="none", amount=0}, + pollution=1, + speed=1, + recipe={type="recipe"} +} +data.energy["fluid-reactor-3"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=9000000, + energy_usage_priority="none", + energy_consumption=9000000, + energy_type_output="heat", + energy_production=9000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=2.53, + fluid_production={name="none", amount=0}, + pollution=1, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=54000000, + energy_usage_priority="none", + energy_consumption=54000000, + energy_type_output="heat", + energy_production=54000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor-3"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=90000000, + energy_usage_priority="none", + energy_consumption=90000000, + energy_type_output="heat", + energy_production=90000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["boiler"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=1800000, + energy_usage_priority="none", + energy_consumption=1800000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=165, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=60}, + pollution=60, + speed=1, + recipe={type="recipe"} +} +data.energy["boiler-5"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=9000000, + energy_usage_priority="none", + energy_consumption=9000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=765, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=60}, + pollution=18.75, + speed=1, + recipe={type="recipe"} +} +data.energy["oil-boiler"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=5400000, + energy_usage_priority="none", + energy_consumption=5400000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=315, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=1.52, + fluid_production={name="steam", amount=90}, + pollution=2.25, + speed=1, + recipe={type="recipe"} +} +data.energy["oil-boiler-4"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=13500000, + energy_usage_priority="none", + energy_consumption=13500000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=765, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=3.8, + fluid_production={name="steam", amount=90}, + pollution=0.7, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=7200000, + energy_usage_priority="none", + energy_consumption=7200000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=315, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=120}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger-4"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=18000000, + energy_usage_priority="none", + energy_consumption=18000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=765, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=120}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["steam-engine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=900000, + energy_type_output="electric", + energy_production=900000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=30, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=30, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["steam-engine-5"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=4500000, + energy_type_output="electric", + energy_production=4500000, + effectivity=1, + target_temperature=0, + maximum_temperature=765, + fluid_usage=30, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=30, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["steam-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=5400000, + energy_type_output="electric", + energy_production=5400000, + effectivity=1, + target_temperature=0, + maximum_temperature=465, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["steam-turbine-3"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=9000000, + energy_type_output="electric", + energy_production=9000000, + effectivity=1, + target_temperature=0, + maximum_temperature=765, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["bob-burner-generator"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=533333, + energy_usage_priority="none", + energy_consumption=533333, + energy_type_output="electric", + energy_production=400000, + effectivity=0.75, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=30, + speed=1, + recipe={type="recipe"} +} +data.energy["fluid-generator"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=1800000, + energy_type_output="electric", + energy_production=1800000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=60, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=0.5, + fluid_production={name="none", amount=0}, + pollution=2, + speed=1, + recipe={type="recipe"} +} +data.energy["fluid-generator-3"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=3600000, + energy_type_output="electric", + energy_production=3600000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=120, + fluid_burns=true, + fluid_fuel = {name="deuterium", capacity=1000}, + fluid_consumption=1.01, + fluid_production={name="none", amount=0}, + pollution=1, + speed=1, + recipe={type="recipe"} +} +data.energy["solar-panel-small"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=26670, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["solar-panel-large-3"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=240000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["fast-accumulator"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=240000, + energy_usage_priority="managed-accumulator", + energy_consumption=240000, + energy_type_output="electric", + energy_production=960000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["slow-accumulator-2"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=360000, + energy_usage_priority="managed-accumulator", + energy_consumption=360000, + energy_type_output="electric", + energy_production=45000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["burner-assembling-machine"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=60000, + energy_usage_priority="none", + energy_consumption=60000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=8, + speed=0.25, + recipe={type="recipe"} +} +data.energy["steam-assembling-machine"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=300000, + energy_usage_priority="none", + energy_consumption=60000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=2, + fluid_production={name="none", amount=0}, + pollution=1, + speed=0.4, + recipe={type="recipe"} +} + +return data \ No newline at end of file diff --git a/helmod/unit_test/DataKrastorio2.lua b/helmod/unit_test/DataKrastorio2.lua new file mode 100644 index 00000000..62b5c9fc --- /dev/null +++ b/helmod/unit_test/DataKrastorio2.lua @@ -0,0 +1,257 @@ +local data = {mod="Krastorio 2"} +data.energy = {} +data.energy["offshore-pump"] = { + energy_type="none", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="none", + energy_consumption=0, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="water", amount=1250}, + pollution=0, + speed=1250, + recipe={type="fluid"} +} +data.energy["assembling-machine-1"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=2500, + energy_usage_max=75000, + energy_usage_priority="secondary-input", + energy_consumption=77500, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=4, + speed=0.5, + recipe={type="recipe"} +} +data.energy["assembling-machine-2"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=4166, + energy_usage_max=125000, + energy_usage_priority="secondary-input", + energy_consumption=129166, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=2.99, + speed=0.75, + recipe={type="recipe"} +} +data.energy["assembling-machine-3"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=6666, + energy_usage_max=200000, + energy_usage_priority="secondary-input", + energy_consumption=206666, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=2, + speed=1.25, + recipe={type="recipe"} +} +data.energy["boiler"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=1500000, + energy_usage_priority="none", + energy_type_output="none", + energy_consumption=1500000, + energy_production=0, + effectivity=1, + target_temperature=165, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=20}, + pollution=49.99, + speed=1, + recipe={name="steam"} +} +data.energy["steam-engine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=750000, + energy_type_output="electric", + energy_production=750000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=10, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=500}, + fluid_consumption=10, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=50000000, + energy_usage_priority="none", + energy_consumption=50000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=415, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=250}, + pollution=0, + speed=1, + recipe={type="resource"} +} +data.energy["steam-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=10000000, + energy_type_output="electric", + energy_production=10000000, + effectivity=1, + target_temperature=0, + maximum_temperature=415, + fluid_usage=50, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=500}, + fluid_consumption=50, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=250000000, + energy_usage_priority="none", + energy_consumption=250000000, + energy_type_output="heat", + energy_production=250000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["solar-panel"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=100000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["accumulator"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=600000, + energy_usage_priority="managed-accumulator", + energy_consumption=600000, + energy_type_output="electric", + energy_production=600000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["kr-gas-power-station"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=4500000, + energy_type_output="electric", + energy_production=4500000, + effectivity=1, + target_temperature=0, + maximum_temperature=25, + fluid_usage=6, + fluid_burns=true, + fluid_fuel = {name="petroleum-gas", capacity=100}, + fluid_consumption=5, + fluid_production={name="none", amount=0}, + pollution=37.5, + speed=1, + recipe={type="recipe"} +} +return data \ No newline at end of file diff --git a/helmod/unit_test/DataPyanodons.lua b/helmod/unit_test/DataPyanodons.lua new file mode 100644 index 00000000..57c3f6b1 --- /dev/null +++ b/helmod/unit_test/DataPyanodons.lua @@ -0,0 +1,427 @@ +local data = {mod="Pyanodons"} +data.energy = {} +data.energy["offshore-pump"] = { + energy_type="none", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="none", + energy_consumption=0, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="water", amount=1200}, + pollution=0, + speed=1200, + recipe={type="fluid"} +} +data.energy["assembling-machine-1"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=75000, + energy_usage_priority="none", + energy_consumption=75000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=12, + speed=1, + recipe={type="recipe"} +} +data.energy["assembling-machine-2"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=150000, + energy_usage_priority="none", + energy_consumption=150000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=12, + speed=2, + recipe={type="recipe"} +} +data.energy["assembling-machine-3"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=375000, + energy_usage_priority="none", + energy_consumption=375000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=12, + speed=4, + recipe={type="recipe"} +} +data.energy["boiler"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=3701250, + energy_usage_priority="none", + energy_type_output="none", + energy_consumption=3701250, + energy_production=0, + effectivity=1, + target_temperature=250, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=7},--amount=7.5 but rounded + pollution=30, + speed=1, + recipe={name="steam"} +} +data.energy["steam-engine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=7275000, + energy_type_output="electric", + energy_production=7275000, + effectivity=1, + target_temperature=0, + maximum_temperature=500, + fluid_usage=15, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=1000}, + fluid_consumption=15, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=125000000, + energy_usage_priority="none", + energy_consumption=125000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=2000, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=29},--amount=30 but rounded + pollution=0, + speed=1, + recipe={type="resource"} +} +data.energy["steam-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=119100000, + energy_type_output="electric", + energy_production=119100000, + effectivity=1, + target_temperature=0, + maximum_temperature=2000, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=1000}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=10000000000, + energy_usage_priority="none", + energy_consumption=10000000000, + energy_type_output="heat", + energy_production=2000000000, + effectivity=0.2, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["solar-panel"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=60000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["accumulator"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=300000, + energy_usage_priority="managed-accumulator", + energy_consumption=300000, + energy_type_output="electric", + energy_production=300000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["glassworks-mk01"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=10000000, + energy_usage_priority="none", + energy_consumption=10000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="diesel", capacity=1000}, + fluid_consumption=6.66, + fluid_production={name="none", amount=0}, + pollution=10, + speed=1, + recipe={type="recipe"} +} +data.energy["glassworks-mk02"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=30000000, + energy_usage_priority="none", + energy_consumption=30000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="diesel", capacity=1000}, + fluid_consumption=20, + fluid_production={name="none", amount=0}, + pollution=10, + speed=2, + recipe={type="recipe"} +} +data.energy["glassworks-mk03"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=40000000, + energy_usage_priority="none", + energy_consumption=40000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="diesel", capacity=1000}, + fluid_consumption=26.66, + fluid_production={name="none", amount=0}, + pollution=10, + speed=3, + recipe={type="recipe"} +} +data.energy["glassworks-mk04"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=50000000, + energy_usage_priority="none", + energy_consumption=50000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="diesel", capacity=1000}, + fluid_consumption=33.33, + fluid_production={name="none", amount=0}, + pollution=10, + speed=4, + recipe={type="recipe"} +} +data.energy["oil-boiler-mk01"] = { + energy_type="fluid", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=14805000, + energy_usage_priority="none", + energy_consumption=14805000, + energy_type_output="none", + energy_production=0, + effectivity=2, + target_temperature=250, + maximum_temperature=0, + fluid_usage=0, + fluid_burns=true, + fluid_fuel = {name="diesel", capacity=1000}, + fluid_consumption=9.86, + fluid_production={name="steam", amount=60}, + pollution=30, + speed=1, + recipe={type="resource"} +} +data.energy["gasturbinemk01"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=118200000, + energy_type_output="electric", + energy_production=118200000, + effectivity=1, + target_temperature=0, + maximum_temperature=1000, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="combustion-mixture1", capacity=2000}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0.05,---0.06 but rounding errors, + speed=1, + recipe={type="recipe"} +} +data.energy["gasturbinemk02"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=297750000, + energy_type_output="electric", + energy_production=297750000, + effectivity=1, + target_temperature=0, + maximum_temperature=2000, + fluid_usage=75, + fluid_burns=false, + fluid_fuel = {name="combustion-mixture1", capacity=2000}, + fluid_consumption=75, + fluid_production={name="none", amount=0}, + pollution=0.06, + speed=1, + recipe={type="recipe"} +} +data.energy["gasturbinemk03"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=537300000, + energy_type_output="electric", + energy_production=537300000, + effectivity=1, + target_temperature=0, + maximum_temperature=3000, + fluid_usage=90, + fluid_burns=false, + fluid_fuel = {name="combustion-mixture1", capacity=2000}, + fluid_consumption=90, + fluid_production={name="none", amount=0}, + pollution=0.06, + speed=1, + recipe={type="recipe"} +} +data.energy["py-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=19938006000, + energy_type_output="electric", + energy_production=19938006000, + effectivity=1, + target_temperature=0, + maximum_temperature=5000, + fluid_usage=1999, + fluid_burns=false, + fluid_fuel = {name="pressured-steam", capacity=2000}, + fluid_consumption=1999.8, + fluid_production={name="none", amount=0}, + pollution=0.02, + speed=1, + recipe={type="recipe"} +} + +return data \ No newline at end of file diff --git a/helmod/unit_test/DataSpaceExploration.lua b/helmod/unit_test/DataSpaceExploration.lua new file mode 100644 index 00000000..8a5df97a --- /dev/null +++ b/helmod/unit_test/DataSpaceExploration.lua @@ -0,0 +1,257 @@ +local data = {mod="Space Exploration"} +data.energy = {} +data.energy["offshore-pump"] = { + energy_type="none", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="none", + energy_consumption=0, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="water", amount=1200}, + pollution=0, + speed=1200, + recipe={type="fluid"} +} +data.energy["assembling-machine-1"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=2500, + energy_usage_max=75000, + energy_usage_priority="secondary-input", + energy_consumption=77500, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=4, + speed=0.5, + recipe={type="recipe"} +} +data.energy["assembling-machine-2"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=5000, + energy_usage_max=150000, + energy_usage_priority="secondary-input", + energy_consumption=155000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=3, + speed=0.75, + recipe={type="recipe"} +} +data.energy["assembling-machine-3"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=12500, + energy_usage_max=375000, + energy_usage_priority="secondary-input", + energy_consumption=387500, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=2, + speed=1.25, + recipe={type="recipe"} +} +data.energy["boiler"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=1800000, + energy_usage_priority="none", + energy_type_output="none", + energy_consumption=1800000, + energy_production=0, + effectivity=1, + target_temperature=165, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=60}, + pollution=30, + speed=1, + recipe={name="steam"} +} +data.energy["steam-engine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=900000, + energy_type_output="electric", + energy_production=900000, + effectivity=1, + target_temperature=0, + maximum_temperature=165, + fluid_usage=30, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=30, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["heat-exchanger"] = { + energy_type="heat", + energy_type_input="heat", + energy_usage_min=0, + energy_usage_max=10000000, + energy_usage_priority="none", + energy_consumption=10000000, + energy_type_output="none", + energy_production=0, + effectivity=1, + target_temperature=500, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="steam", amount=103}, + pollution=0, + speed=1, + recipe={type="resource"} +} +data.energy["steam-turbine"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=5820000, + energy_type_output="electric", + energy_production=5820000, + effectivity=1, + target_temperature=0, + maximum_temperature=500, + fluid_usage=60, + fluid_burns=false, + fluid_fuel = {name="steam", capacity=200}, + fluid_consumption=60, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["se-fluid-burner-generator"] = { + energy_type="electric", + energy_type_input="fluid", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="secondary-output", + energy_consumption=2666666, + energy_type_output="electric", + energy_production=2000000, + effectivity=0.75, + target_temperature=0, + maximum_temperature=1000, + fluid_usage=60, + fluid_burns=true, + fluid_fuel = {name="se-antimatter-stream", capacity=10}, + fluid_consumption=0.13, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +data.energy["nuclear-reactor"] = { + energy_type="burner", + energy_type_input="burner", + energy_usage_min=0, + energy_usage_max=40000000, + energy_usage_priority="none", + energy_consumption=40000000, + energy_type_output="heat", + energy_production=40000000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["solar-panel"] = { + energy_type="electric", + energy_type_input="none", + energy_usage_min=0, + energy_usage_max=0, + energy_usage_priority="solar", + energy_consumption=0, + energy_type_output="electric", + energy_production=60000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} + +data.energy["accumulator"] = { + energy_type="electric", + energy_type_input="electric", + energy_usage_min=0, + energy_usage_max=250000, + energy_usage_priority="managed-accumulator", + energy_consumption=250000, + energy_type_output="electric", + energy_production=500000, + effectivity=1, + target_temperature=0, + maximum_temperature=0, + fluid_usage=0, + fluid_burns="none", + fluid_fuel = {name="none", capacity=0}, + fluid_consumption=0, + fluid_production={name="none", amount=0}, + pollution=0, + speed=1, + recipe={type="recipe"} +} +return data \ No newline at end of file diff --git a/helmod_0.12.19.zip b/helmod_0.12.19.zip deleted file mode 100644 index 4d7eaad3..00000000 Binary files a/helmod_0.12.19.zip and /dev/null differ diff --git a/heroturrets_9.1.11/changelog.txt b/heroturrets/changelog.txt similarity index 100% rename from heroturrets_9.1.11/changelog.txt rename to heroturrets/changelog.txt diff --git a/heroturrets_9.1.11/control.lua b/heroturrets/control.lua similarity index 100% rename from heroturrets_9.1.11/control.lua rename to heroturrets/control.lua diff --git a/heroturrets_9.1.11/data-final-fixes.lua b/heroturrets/data-final-fixes.lua similarity index 100% rename from heroturrets_9.1.11/data-final-fixes.lua rename to heroturrets/data-final-fixes.lua diff --git a/heroturrets_9.1.11/data-updates.lua b/heroturrets/data-updates.lua similarity index 100% rename from heroturrets_9.1.11/data-updates.lua rename to heroturrets/data-updates.lua diff --git a/heroturrets_9.1.11/data.lua b/heroturrets/data.lua similarity index 100% rename from heroturrets_9.1.11/data.lua rename to heroturrets/data.lua diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-1-base.png b/heroturrets/graphics/entity/turret/hero-1-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-1-base.png rename to heroturrets/graphics/entity/turret/hero-1-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-10-base.png b/heroturrets/graphics/entity/turret/hero-10-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-10-base.png rename to heroturrets/graphics/entity/turret/hero-10-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-2-base.png b/heroturrets/graphics/entity/turret/hero-2-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-2-base.png rename to heroturrets/graphics/entity/turret/hero-2-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-3-base.png b/heroturrets/graphics/entity/turret/hero-3-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-3-base.png rename to heroturrets/graphics/entity/turret/hero-3-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-4-base.png b/heroturrets/graphics/entity/turret/hero-4-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-4-base.png rename to heroturrets/graphics/entity/turret/hero-4-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-5-base.png b/heroturrets/graphics/entity/turret/hero-5-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-5-base.png rename to heroturrets/graphics/entity/turret/hero-5-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-6-base.png b/heroturrets/graphics/entity/turret/hero-6-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-6-base.png rename to heroturrets/graphics/entity/turret/hero-6-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-7-base.png b/heroturrets/graphics/entity/turret/hero-7-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-7-base.png rename to heroturrets/graphics/entity/turret/hero-7-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-8-base.png b/heroturrets/graphics/entity/turret/hero-8-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-8-base.png rename to heroturrets/graphics/entity/turret/hero-8-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hero-9-base.png b/heroturrets/graphics/entity/turret/hero-9-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hero-9-base.png rename to heroturrets/graphics/entity/turret/hero-9-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-1-base.png b/heroturrets/graphics/entity/turret/hr-hero-1-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-1-base.png rename to heroturrets/graphics/entity/turret/hr-hero-1-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-10-base.png b/heroturrets/graphics/entity/turret/hr-hero-10-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-10-base.png rename to heroturrets/graphics/entity/turret/hr-hero-10-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-2-base.png b/heroturrets/graphics/entity/turret/hr-hero-2-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-2-base.png rename to heroturrets/graphics/entity/turret/hr-hero-2-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-3-base.png b/heroturrets/graphics/entity/turret/hr-hero-3-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-3-base.png rename to heroturrets/graphics/entity/turret/hr-hero-3-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-4-base.png b/heroturrets/graphics/entity/turret/hr-hero-4-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-4-base.png rename to heroturrets/graphics/entity/turret/hr-hero-4-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-5-base.png b/heroturrets/graphics/entity/turret/hr-hero-5-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-5-base.png rename to heroturrets/graphics/entity/turret/hr-hero-5-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-6-base.png b/heroturrets/graphics/entity/turret/hr-hero-6-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-6-base.png rename to heroturrets/graphics/entity/turret/hr-hero-6-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-7-base.png b/heroturrets/graphics/entity/turret/hr-hero-7-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-7-base.png rename to heroturrets/graphics/entity/turret/hr-hero-7-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-8-base.png b/heroturrets/graphics/entity/turret/hr-hero-8-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-8-base.png rename to heroturrets/graphics/entity/turret/hr-hero-8-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/hr-hero-9-base.png b/heroturrets/graphics/entity/turret/hr-hero-9-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/hr-hero-9-base.png rename to heroturrets/graphics/entity/turret/hr-hero-9-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-1-base.png b/heroturrets/graphics/entity/turret/old/hr-hero-1-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-1-base.png rename to heroturrets/graphics/entity/turret/old/hr-hero-1-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-2-base.png b/heroturrets/graphics/entity/turret/old/hr-hero-2-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-2-base.png rename to heroturrets/graphics/entity/turret/old/hr-hero-2-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-3-base.png b/heroturrets/graphics/entity/turret/old/hr-hero-3-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-3-base.png rename to heroturrets/graphics/entity/turret/old/hr-hero-3-base.png diff --git a/heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-4-base.png b/heroturrets/graphics/entity/turret/old/hr-hero-4-base.png similarity index 100% rename from heroturrets_9.1.11/graphics/entity/turret/old/hr-hero-4-base.png rename to heroturrets/graphics/entity/turret/old/hr-hero-4-base.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-1-icon.png b/heroturrets/graphics/icons/hero-1-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-1-icon.png rename to heroturrets/graphics/icons/hero-1-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-10-icon.png b/heroturrets/graphics/icons/hero-10-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-10-icon.png rename to heroturrets/graphics/icons/hero-10-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-2-icon.png b/heroturrets/graphics/icons/hero-2-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-2-icon.png rename to heroturrets/graphics/icons/hero-2-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-3-icon.png b/heroturrets/graphics/icons/hero-3-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-3-icon.png rename to heroturrets/graphics/icons/hero-3-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-4-icon.png b/heroturrets/graphics/icons/hero-4-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-4-icon.png rename to heroturrets/graphics/icons/hero-4-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-5-icon.png b/heroturrets/graphics/icons/hero-5-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-5-icon.png rename to heroturrets/graphics/icons/hero-5-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-6-icon.png b/heroturrets/graphics/icons/hero-6-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-6-icon.png rename to heroturrets/graphics/icons/hero-6-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-7-icon.png b/heroturrets/graphics/icons/hero-7-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-7-icon.png rename to heroturrets/graphics/icons/hero-7-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-8-icon.png b/heroturrets/graphics/icons/hero-8-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-8-icon.png rename to heroturrets/graphics/icons/hero-8-icon.png diff --git a/heroturrets_9.1.11/graphics/icons/hero-9-icon.png b/heroturrets/graphics/icons/hero-9-icon.png similarity index 100% rename from heroturrets_9.1.11/graphics/icons/hero-9-icon.png rename to heroturrets/graphics/icons/hero-9-icon.png diff --git a/heroturrets_9.1.11/graphics/technology/hero-tech-1.png b/heroturrets/graphics/technology/hero-tech-1.png similarity index 100% rename from heroturrets_9.1.11/graphics/technology/hero-tech-1.png rename to heroturrets/graphics/technology/hero-tech-1.png diff --git a/heroturrets_9.1.11/graphics/technology/hero-tech-2.png b/heroturrets/graphics/technology/hero-tech-2.png similarity index 100% rename from heroturrets_9.1.11/graphics/technology/hero-tech-2.png rename to heroturrets/graphics/technology/hero-tech-2.png diff --git a/heroturrets_9.1.11/graphics/technology/hero-tech-3.png b/heroturrets/graphics/technology/hero-tech-3.png similarity index 100% rename from heroturrets_9.1.11/graphics/technology/hero-tech-3.png rename to heroturrets/graphics/technology/hero-tech-3.png diff --git a/heroturrets_9.1.11/info.json b/heroturrets/info.json similarity index 100% rename from heroturrets_9.1.11/info.json rename to heroturrets/info.json diff --git a/heroturrets_9.1.11/locale/en/locale.cfg b/heroturrets/locale/en/locale.cfg similarity index 100% rename from heroturrets_9.1.11/locale/en/locale.cfg rename to heroturrets/locale/en/locale.cfg diff --git a/heroturrets_9.1.11/locale/ru/locale.cfg b/heroturrets/locale/ru/locale.cfg similarity index 100% rename from heroturrets_9.1.11/locale/ru/locale.cfg rename to heroturrets/locale/ru/locale.cfg diff --git a/heroturrets_9.1.11/migrations/heroturrets_0.1.21.lua b/heroturrets/migrations/heroturrets_0.1.21.lua similarity index 100% rename from heroturrets_9.1.11/migrations/heroturrets_0.1.21.lua rename to heroturrets/migrations/heroturrets_0.1.21.lua diff --git a/heroturrets_9.1.11/prototypes/scripts/defines.lua b/heroturrets/prototypes/scripts/defines.lua similarity index 100% rename from heroturrets_9.1.11/prototypes/scripts/defines.lua rename to heroturrets/prototypes/scripts/defines.lua diff --git a/heroturrets_9.1.11/prototypes/scripts/turrets.lua b/heroturrets/prototypes/scripts/turrets.lua similarity index 100% rename from heroturrets_9.1.11/prototypes/scripts/turrets.lua rename to heroturrets/prototypes/scripts/turrets.lua diff --git a/heroturrets_9.1.11/prototypes/scripts/types.lua b/heroturrets/prototypes/scripts/types.lua similarity index 100% rename from heroturrets_9.1.11/prototypes/scripts/types.lua rename to heroturrets/prototypes/scripts/types.lua diff --git a/heroturrets_9.1.11/settings.lua b/heroturrets/settings.lua similarity index 100% rename from heroturrets_9.1.11/settings.lua rename to heroturrets/settings.lua diff --git a/heroturrets_9.1.11/thumbnail.png b/heroturrets/thumbnail.png similarity index 100% rename from heroturrets_9.1.11/thumbnail.png rename to heroturrets/thumbnail.png diff --git a/heroturrets_9.1.11/wiki.lua b/heroturrets/wiki.lua similarity index 100% rename from heroturrets_9.1.11/wiki.lua rename to heroturrets/wiki.lua diff --git a/immersive-sounds_0.1.1/README.txt b/immersive-sounds/README.txt similarity index 100% rename from immersive-sounds_0.1.1/README.txt rename to immersive-sounds/README.txt diff --git a/immersive-sounds_0.1.1/changelog.txt b/immersive-sounds/changelog.txt similarity index 100% rename from immersive-sounds_0.1.1/changelog.txt rename to immersive-sounds/changelog.txt diff --git a/immersive-sounds_0.1.1/control.lua b/immersive-sounds/control.lua similarity index 100% rename from immersive-sounds_0.1.1/control.lua rename to immersive-sounds/control.lua diff --git a/immersive-sounds_0.1.1/data.lua b/immersive-sounds/data.lua similarity index 100% rename from immersive-sounds_0.1.1/data.lua rename to immersive-sounds/data.lua diff --git a/immersive-sounds/graphics/dummy.png b/immersive-sounds/graphics/dummy.png new file mode 100644 index 00000000..6eb72c30 Binary files /dev/null and b/immersive-sounds/graphics/dummy.png differ diff --git a/immersive-sounds_0.1.1/info.json b/immersive-sounds/info.json similarity index 100% rename from immersive-sounds_0.1.1/info.json rename to immersive-sounds/info.json diff --git a/immersive-sounds_0.1.1/prototypes/sound.lua b/immersive-sounds/prototypes/sound.lua similarity index 100% rename from immersive-sounds_0.1.1/prototypes/sound.lua rename to immersive-sounds/prototypes/sound.lua diff --git a/immersive-sounds_0.1.1/prototypes/soundslib.lua b/immersive-sounds/prototypes/soundslib.lua similarity index 100% rename from immersive-sounds_0.1.1/prototypes/soundslib.lua rename to immersive-sounds/prototypes/soundslib.lua diff --git a/immersive-sounds_0.1.1/sound/ambient/day-open-loop.ogg b/immersive-sounds/sound/ambient/day-open-loop.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ambient/day-open-loop.ogg rename to immersive-sounds/sound/ambient/day-open-loop.ogg diff --git a/immersive-sounds_0.1.1/sound/ambient/night-open-loop.ogg b/immersive-sounds/sound/ambient/night-open-loop.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ambient/night-open-loop.ogg rename to immersive-sounds/sound/ambient/night-open-loop.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-1.ogg b/immersive-sounds/sound/axe/axe-mining-ore-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-1.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-1.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-10.ogg b/immersive-sounds/sound/axe/axe-mining-ore-10.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-10.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-10.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-2.ogg b/immersive-sounds/sound/axe/axe-mining-ore-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-2.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-2.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-3.ogg b/immersive-sounds/sound/axe/axe-mining-ore-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-3.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-3.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-4.ogg b/immersive-sounds/sound/axe/axe-mining-ore-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-4.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-4.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-5.ogg b/immersive-sounds/sound/axe/axe-mining-ore-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-5.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-5.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-6.ogg b/immersive-sounds/sound/axe/axe-mining-ore-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-6.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-6.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-7.ogg b/immersive-sounds/sound/axe/axe-mining-ore-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-7.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-7.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-8.ogg b/immersive-sounds/sound/axe/axe-mining-ore-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-8.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-8.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-ore-9.ogg b/immersive-sounds/sound/axe/axe-mining-ore-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-ore-9.ogg rename to immersive-sounds/sound/axe/axe-mining-ore-9.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-1.ogg b/immersive-sounds/sound/axe/axe-mining-stone-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-1.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-1.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-2.ogg b/immersive-sounds/sound/axe/axe-mining-stone-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-2.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-2.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-3.ogg b/immersive-sounds/sound/axe/axe-mining-stone-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-3.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-3.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-4.ogg b/immersive-sounds/sound/axe/axe-mining-stone-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-4.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-4.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-5.ogg b/immersive-sounds/sound/axe/axe-mining-stone-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-5.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-5.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-6.ogg b/immersive-sounds/sound/axe/axe-mining-stone-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-6.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-6.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/axe-mining-stone-7.ogg b/immersive-sounds/sound/axe/axe-mining-stone-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/axe-mining-stone-7.ogg rename to immersive-sounds/sound/axe/axe-mining-stone-7.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-1.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-1.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-1.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-2.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-2.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-2.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-3.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-3.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-3.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-4.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-4.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-4.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-5.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-5.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-5.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-6.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-6.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-6.ogg diff --git a/immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-7.ogg b/immersive-sounds/sound/axe/unused/axe-mining-stone-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/axe/unused/axe-mining-stone-7.ogg rename to immersive-sounds/sound/axe/unused/axe-mining-stone-7.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-1.ogg b/immersive-sounds/sound/creatures/biter-death-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-1.ogg rename to immersive-sounds/sound/creatures/biter-death-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-2.ogg b/immersive-sounds/sound/creatures/biter-death-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-2.ogg rename to immersive-sounds/sound/creatures/biter-death-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-3.ogg b/immersive-sounds/sound/creatures/biter-death-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-3.ogg rename to immersive-sounds/sound/creatures/biter-death-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-4.ogg b/immersive-sounds/sound/creatures/biter-death-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-4.ogg rename to immersive-sounds/sound/creatures/biter-death-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-5.ogg b/immersive-sounds/sound/creatures/biter-death-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-5.ogg rename to immersive-sounds/sound/creatures/biter-death-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-big-1.ogg b/immersive-sounds/sound/creatures/biter-death-big-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-big-1.ogg rename to immersive-sounds/sound/creatures/biter-death-big-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-big-2.ogg b/immersive-sounds/sound/creatures/biter-death-big-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-big-2.ogg rename to immersive-sounds/sound/creatures/biter-death-big-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-big-3.ogg b/immersive-sounds/sound/creatures/biter-death-big-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-big-3.ogg rename to immersive-sounds/sound/creatures/biter-death-big-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-big-4.ogg b/immersive-sounds/sound/creatures/biter-death-big-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-big-4.ogg rename to immersive-sounds/sound/creatures/biter-death-big-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-death-big-5.ogg b/immersive-sounds/sound/creatures/biter-death-big-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-death-big-5.ogg rename to immersive-sounds/sound/creatures/biter-death-big-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-1.ogg b/immersive-sounds/sound/creatures/biter-roar-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-1.ogg rename to immersive-sounds/sound/creatures/biter-roar-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-2.ogg b/immersive-sounds/sound/creatures/biter-roar-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-2.ogg rename to immersive-sounds/sound/creatures/biter-roar-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-3.ogg b/immersive-sounds/sound/creatures/biter-roar-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-3.ogg rename to immersive-sounds/sound/creatures/biter-roar-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-4.ogg b/immersive-sounds/sound/creatures/biter-roar-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-4.ogg rename to immersive-sounds/sound/creatures/biter-roar-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-5.ogg b/immersive-sounds/sound/creatures/biter-roar-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-5.ogg rename to immersive-sounds/sound/creatures/biter-roar-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-6.ogg b/immersive-sounds/sound/creatures/biter-roar-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-6.ogg rename to immersive-sounds/sound/creatures/biter-roar-6.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-1.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-1.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-2.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-2.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-3.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-3.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-4.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-4.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-5.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-5.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-6.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-6.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-6.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-7.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-7.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-7.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-8.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-8.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-8.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-9.ogg b/immersive-sounds/sound/creatures/biter-roar-behemoth-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-behemoth-9.ogg rename to immersive-sounds/sound/creatures/biter-roar-behemoth-9.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-big-1.ogg b/immersive-sounds/sound/creatures/biter-roar-big-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-big-1.ogg rename to immersive-sounds/sound/creatures/biter-roar-big-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-big-2.ogg b/immersive-sounds/sound/creatures/biter-roar-big-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-big-2.ogg rename to immersive-sounds/sound/creatures/biter-roar-big-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-big-3.ogg b/immersive-sounds/sound/creatures/biter-roar-big-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-big-3.ogg rename to immersive-sounds/sound/creatures/biter-roar-big-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-big-4.ogg b/immersive-sounds/sound/creatures/biter-roar-big-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-big-4.ogg rename to immersive-sounds/sound/creatures/biter-roar-big-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-big-5.ogg b/immersive-sounds/sound/creatures/biter-roar-big-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-big-5.ogg rename to immersive-sounds/sound/creatures/biter-roar-big-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-1.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-1.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-2.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-2.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-3.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-3.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-4.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-4.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-5.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-5.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-6.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-6.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-6.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-7.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-7.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-7.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-8.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-8.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-8.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-9.ogg b/immersive-sounds/sound/creatures/biter-roar-mid-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-roar-mid-9.ogg rename to immersive-sounds/sound/creatures/biter-roar-mid-9.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-1.ogg b/immersive-sounds/sound/creatures/biter-walk-big-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-1.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-10.ogg b/immersive-sounds/sound/creatures/biter-walk-big-10.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-10.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-10.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-2.ogg b/immersive-sounds/sound/creatures/biter-walk-big-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-2.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-3.ogg b/immersive-sounds/sound/creatures/biter-walk-big-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-3.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-4.ogg b/immersive-sounds/sound/creatures/biter-walk-big-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-4.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-5.ogg b/immersive-sounds/sound/creatures/biter-walk-big-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-5.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-5.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-6.ogg b/immersive-sounds/sound/creatures/biter-walk-big-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-6.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-6.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-7.ogg b/immersive-sounds/sound/creatures/biter-walk-big-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-7.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-7.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-8.ogg b/immersive-sounds/sound/creatures/biter-walk-big-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-8.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-8.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/biter-walk-big-9.ogg b/immersive-sounds/sound/creatures/biter-walk-big-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/biter-walk-big-9.ogg rename to immersive-sounds/sound/creatures/biter-walk-big-9.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-1.ogg b/immersive-sounds/sound/creatures/projectile-acid-burn-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-1.ogg rename to immersive-sounds/sound/creatures/projectile-acid-burn-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-2.ogg b/immersive-sounds/sound/creatures/projectile-acid-burn-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-2.ogg rename to immersive-sounds/sound/creatures/projectile-acid-burn-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-long-1.ogg b/immersive-sounds/sound/creatures/projectile-acid-burn-long-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-long-1.ogg rename to immersive-sounds/sound/creatures/projectile-acid-burn-long-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-long-2.ogg b/immersive-sounds/sound/creatures/projectile-acid-burn-long-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/projectile-acid-burn-long-2.ogg rename to immersive-sounds/sound/creatures/projectile-acid-burn-long-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spawner-death-1.ogg b/immersive-sounds/sound/creatures/spawner-death-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spawner-death-1.ogg rename to immersive-sounds/sound/creatures/spawner-death-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spawner-death-2.ogg b/immersive-sounds/sound/creatures/spawner-death-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spawner-death-2.ogg rename to immersive-sounds/sound/creatures/spawner-death-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spawner-spitter.ogg b/immersive-sounds/sound/creatures/spawner-spitter.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spawner-spitter.ogg rename to immersive-sounds/sound/creatures/spawner-spitter.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spawner.ogg b/immersive-sounds/sound/creatures/spawner.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spawner.ogg rename to immersive-sounds/sound/creatures/spawner.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spitter-death-1.ogg b/immersive-sounds/sound/creatures/spitter-death-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spitter-death-1.ogg rename to immersive-sounds/sound/creatures/spitter-death-1.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spitter-death-2.ogg b/immersive-sounds/sound/creatures/spitter-death-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spitter-death-2.ogg rename to immersive-sounds/sound/creatures/spitter-death-2.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spitter-death-3.ogg b/immersive-sounds/sound/creatures/spitter-death-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spitter-death-3.ogg rename to immersive-sounds/sound/creatures/spitter-death-3.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spitter-death-4.ogg b/immersive-sounds/sound/creatures/spitter-death-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spitter-death-4.ogg rename to immersive-sounds/sound/creatures/spitter-death-4.ogg diff --git a/immersive-sounds_0.1.1/sound/creatures/spitter-death-5.ogg b/immersive-sounds/sound/creatures/spitter-death-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/creatures/spitter-death-5.ogg rename to immersive-sounds/sound/creatures/spitter-death-5.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-1.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-1.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-2.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-2.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-3.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-3.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-4.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-4.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-4.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-5.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-5.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-5.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-6.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-6.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-6.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-7.ogg b/immersive-sounds/sound/cyclic/classic/gun-turret-shot-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/gun-turret-shot-7.ogg rename to immersive-sounds/sound/cyclic/classic/gun-turret-shot-7.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-1.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-1.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-2.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-2.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-3.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-3.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-4.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-4.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-4.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-5.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-5.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-5.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-6.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-6.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-6.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-7.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-7.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-7.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-8.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-8.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-8.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-9.ogg b/immersive-sounds/sound/cyclic/classic/mg-shot-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/mg-shot-9.ogg rename to immersive-sounds/sound/cyclic/classic/mg-shot-9.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-01.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-01.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-01.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-02.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-02.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-02.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-03.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-03.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-03.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-04.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-04.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-04.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-05.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-05.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-05.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-06.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-06.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-06.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-07.ogg b/immersive-sounds/sound/cyclic/classic/pistol-shot-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/pistol-shot-07.ogg rename to immersive-sounds/sound/cyclic/classic/pistol-shot-07.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-01.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-01.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-01.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-02.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-02.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-02.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-03.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-03.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-03.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-04.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-04.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-04.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-05.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-05.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-05.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-06.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-06.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-06.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-07.ogg b/immersive-sounds/sound/cyclic/classic/smg-shot-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/smg-shot-07.ogg rename to immersive-sounds/sound/cyclic/classic/smg-shot-07.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-1.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-1.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-2.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-2.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-3.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-3.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-4.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-4.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-4.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-5.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-5.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-5.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-6.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-6.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-6.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-7.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-7.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-7.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-8.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-8.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-8.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-9.ogg b/immersive-sounds/sound/cyclic/classic/tank-mg-shot-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/classic/tank-mg-shot-9.ogg rename to immersive-sounds/sound/cyclic/classic/tank-mg-shot-9.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-end-1.ogg b/immersive-sounds/sound/cyclic/flamethrower-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-end-1.ogg rename to immersive-sounds/sound/cyclic/flamethrower-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-end-2.ogg b/immersive-sounds/sound/cyclic/flamethrower-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-end-2.ogg rename to immersive-sounds/sound/cyclic/flamethrower-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-mid-1.ogg b/immersive-sounds/sound/cyclic/flamethrower-mid-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-mid-1.ogg rename to immersive-sounds/sound/cyclic/flamethrower-mid-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-mid-2.ogg b/immersive-sounds/sound/cyclic/flamethrower-mid-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-mid-2.ogg rename to immersive-sounds/sound/cyclic/flamethrower-mid-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-start-1.ogg b/immersive-sounds/sound/cyclic/flamethrower-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-start-1.ogg rename to immersive-sounds/sound/cyclic/flamethrower-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/flamethrower-start-2.ogg b/immersive-sounds/sound/cyclic/flamethrower-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/flamethrower-start-2.ogg rename to immersive-sounds/sound/cyclic/flamethrower-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-1.ogg b/immersive-sounds/sound/cyclic/gun-turret-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-1.ogg rename to immersive-sounds/sound/cyclic/gun-turret-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-2.ogg b/immersive-sounds/sound/cyclic/gun-turret-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-2.ogg rename to immersive-sounds/sound/cyclic/gun-turret-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-3.ogg b/immersive-sounds/sound/cyclic/gun-turret-end-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-end-3.ogg rename to immersive-sounds/sound/cyclic/gun-turret-end-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-1.ogg b/immersive-sounds/sound/cyclic/gun-turret-mid-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-1.ogg rename to immersive-sounds/sound/cyclic/gun-turret-mid-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-2.ogg b/immersive-sounds/sound/cyclic/gun-turret-mid-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-2.ogg rename to immersive-sounds/sound/cyclic/gun-turret-mid-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-3.ogg b/immersive-sounds/sound/cyclic/gun-turret-mid-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-mid-3.ogg rename to immersive-sounds/sound/cyclic/gun-turret-mid-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-1.ogg b/immersive-sounds/sound/cyclic/gun-turret-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-1.ogg rename to immersive-sounds/sound/cyclic/gun-turret-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-2.ogg b/immersive-sounds/sound/cyclic/gun-turret-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-2.ogg rename to immersive-sounds/sound/cyclic/gun-turret-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-3.ogg b/immersive-sounds/sound/cyclic/gun-turret-start-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/gun-turret-start-3.ogg rename to immersive-sounds/sound/cyclic/gun-turret-start-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/laser-beam-end-1.ogg b/immersive-sounds/sound/cyclic/laser-beam-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/laser-beam-end-1.ogg rename to immersive-sounds/sound/cyclic/laser-beam-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/laser-beam-end-2.ogg b/immersive-sounds/sound/cyclic/laser-beam-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/laser-beam-end-2.ogg rename to immersive-sounds/sound/cyclic/laser-beam-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/laser-beam-start-1.ogg b/immersive-sounds/sound/cyclic/laser-beam-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/laser-beam-start-1.ogg rename to immersive-sounds/sound/cyclic/laser-beam-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/laser-beam-start-2.ogg b/immersive-sounds/sound/cyclic/laser-beam-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/laser-beam-start-2.ogg rename to immersive-sounds/sound/cyclic/laser-beam-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-1.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-1.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-2.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-2.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-3.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-end-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-end-3.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-end-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-1.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-mid-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-1.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-mid-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-2.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-mid-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-2.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-mid-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-3.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-mid-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-3.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-mid-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-4.ogg b/immersive-sounds/sound/cyclic/old/gun-turret-mid-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/old/gun-turret-mid-4.ogg rename to immersive-sounds/sound/cyclic/old/gun-turret-mid-4.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-end-1.ogg b/immersive-sounds/sound/cyclic/smg-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-end-1.ogg rename to immersive-sounds/sound/cyclic/smg-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-end-2.ogg b/immersive-sounds/sound/cyclic/smg-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-end-2.ogg rename to immersive-sounds/sound/cyclic/smg-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-end-3.ogg b/immersive-sounds/sound/cyclic/smg-end-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-end-3.ogg rename to immersive-sounds/sound/cyclic/smg-end-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-mid-1.ogg b/immersive-sounds/sound/cyclic/smg-mid-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-mid-1.ogg rename to immersive-sounds/sound/cyclic/smg-mid-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-mid-2.ogg b/immersive-sounds/sound/cyclic/smg-mid-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-mid-2.ogg rename to immersive-sounds/sound/cyclic/smg-mid-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-mid-3.ogg b/immersive-sounds/sound/cyclic/smg-mid-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-mid-3.ogg rename to immersive-sounds/sound/cyclic/smg-mid-3.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-start-1.ogg b/immersive-sounds/sound/cyclic/smg-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-start-1.ogg rename to immersive-sounds/sound/cyclic/smg-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-start-2.ogg b/immersive-sounds/sound/cyclic/smg-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-start-2.ogg rename to immersive-sounds/sound/cyclic/smg-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/cyclic/smg-start-3.ogg b/immersive-sounds/sound/cyclic/smg-start-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/cyclic/smg-start-3.ogg rename to immersive-sounds/sound/cyclic/smg-start-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-brakes-1.ogg b/immersive-sounds/sound/driving/car-brakes-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-brakes-1.ogg rename to immersive-sounds/sound/driving/car-brakes-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-brakes-2.ogg b/immersive-sounds/sound/driving/car-brakes-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-brakes-2.ogg rename to immersive-sounds/sound/driving/car-brakes-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-brakes-3.ogg b/immersive-sounds/sound/driving/car-brakes-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-brakes-3.ogg rename to immersive-sounds/sound/driving/car-brakes-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-crash-1.ogg b/immersive-sounds/sound/driving/car-crash-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-crash-1.ogg rename to immersive-sounds/sound/driving/car-crash-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-crash-2.ogg b/immersive-sounds/sound/driving/car-crash-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-crash-2.ogg rename to immersive-sounds/sound/driving/car-crash-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-crash-3.ogg b/immersive-sounds/sound/driving/car-crash-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-crash-3.ogg rename to immersive-sounds/sound/driving/car-crash-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-door-close-1.ogg b/immersive-sounds/sound/driving/car-door-close-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-door-close-1.ogg rename to immersive-sounds/sound/driving/car-door-close-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-door-close-2.ogg b/immersive-sounds/sound/driving/car-door-close-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-door-close-2.ogg rename to immersive-sounds/sound/driving/car-door-close-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-door-open-1.ogg b/immersive-sounds/sound/driving/car-door-open-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-door-open-1.ogg rename to immersive-sounds/sound/driving/car-door-open-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-door-open-2.ogg b/immersive-sounds/sound/driving/car-door-open-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-door-open-2.ogg rename to immersive-sounds/sound/driving/car-door-open-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-1.ogg b/immersive-sounds/sound/driving/car-engine-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-1.ogg rename to immersive-sounds/sound/driving/car-engine-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-2.ogg b/immersive-sounds/sound/driving/car-engine-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-2.ogg rename to immersive-sounds/sound/driving/car-engine-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-1.ogg b/immersive-sounds/sound/driving/car-engine-load-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-1.ogg rename to immersive-sounds/sound/driving/car-engine-load-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-2.ogg b/immersive-sounds/sound/driving/car-engine-load-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-2.ogg rename to immersive-sounds/sound/driving/car-engine-load-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-3.ogg b/immersive-sounds/sound/driving/car-engine-load-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-3.ogg rename to immersive-sounds/sound/driving/car-engine-load-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-4.ogg b/immersive-sounds/sound/driving/car-engine-load-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-4.ogg rename to immersive-sounds/sound/driving/car-engine-load-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-1.ogg b/immersive-sounds/sound/driving/car-engine-load-reverse-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-1.ogg rename to immersive-sounds/sound/driving/car-engine-load-reverse-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-2.ogg b/immersive-sounds/sound/driving/car-engine-load-reverse-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-2.ogg rename to immersive-sounds/sound/driving/car-engine-load-reverse-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-3.ogg b/immersive-sounds/sound/driving/car-engine-load-reverse-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-3.ogg rename to immersive-sounds/sound/driving/car-engine-load-reverse-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-4.ogg b/immersive-sounds/sound/driving/car-engine-load-reverse-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-load-reverse-4.ogg rename to immersive-sounds/sound/driving/car-engine-load-reverse-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-start-1.ogg b/immersive-sounds/sound/driving/car-engine-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-start-1.ogg rename to immersive-sounds/sound/driving/car-engine-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-start-2.ogg b/immersive-sounds/sound/driving/car-engine-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-start-2.ogg rename to immersive-sounds/sound/driving/car-engine-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-stop-1.ogg b/immersive-sounds/sound/driving/car-engine-stop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-stop-1.ogg rename to immersive-sounds/sound/driving/car-engine-stop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-engine-stop-2.ogg b/immersive-sounds/sound/driving/car-engine-stop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-engine-stop-2.ogg rename to immersive-sounds/sound/driving/car-engine-stop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-no-fuel-1.ogg b/immersive-sounds/sound/driving/car-no-fuel-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-no-fuel-1.ogg rename to immersive-sounds/sound/driving/car-no-fuel-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-no-fuel-2.ogg b/immersive-sounds/sound/driving/car-no-fuel-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-no-fuel-2.ogg rename to immersive-sounds/sound/driving/car-no-fuel-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-steer-1.ogg b/immersive-sounds/sound/driving/car-steer-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-steer-1.ogg rename to immersive-sounds/sound/driving/car-steer-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-steer-2.ogg b/immersive-sounds/sound/driving/car-steer-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-steer-2.ogg rename to immersive-sounds/sound/driving/car-steer-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-steer-3.ogg b/immersive-sounds/sound/driving/car-steer-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-steer-3.ogg rename to immersive-sounds/sound/driving/car-steer-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/car-steer-4.ogg b/immersive-sounds/sound/driving/car-steer-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/car-steer-4.ogg rename to immersive-sounds/sound/driving/car-steer-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-brakes-1.ogg b/immersive-sounds/sound/driving/tank-brakes-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-brakes-1.ogg rename to immersive-sounds/sound/driving/tank-brakes-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-brakes-2.ogg b/immersive-sounds/sound/driving/tank-brakes-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-brakes-2.ogg rename to immersive-sounds/sound/driving/tank-brakes-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-brakes-3.ogg b/immersive-sounds/sound/driving/tank-brakes-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-brakes-3.ogg rename to immersive-sounds/sound/driving/tank-brakes-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-door-close-1.ogg b/immersive-sounds/sound/driving/tank-door-close-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-door-close-1.ogg rename to immersive-sounds/sound/driving/tank-door-close-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-door-close-2.ogg b/immersive-sounds/sound/driving/tank-door-close-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-door-close-2.ogg rename to immersive-sounds/sound/driving/tank-door-close-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-door-open-1.ogg b/immersive-sounds/sound/driving/tank-door-open-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-door-open-1.ogg rename to immersive-sounds/sound/driving/tank-door-open-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-door-open-2.ogg b/immersive-sounds/sound/driving/tank-door-open-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-door-open-2.ogg rename to immersive-sounds/sound/driving/tank-door-open-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-1.ogg b/immersive-sounds/sound/driving/tank-engine-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-1.ogg rename to immersive-sounds/sound/driving/tank-engine-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-2.ogg b/immersive-sounds/sound/driving/tank-engine-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-2.ogg rename to immersive-sounds/sound/driving/tank-engine-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-3.ogg b/immersive-sounds/sound/driving/tank-engine-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-3.ogg rename to immersive-sounds/sound/driving/tank-engine-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-1.ogg b/immersive-sounds/sound/driving/tank-engine-load-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-1.ogg rename to immersive-sounds/sound/driving/tank-engine-load-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-2.ogg b/immersive-sounds/sound/driving/tank-engine-load-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-2.ogg rename to immersive-sounds/sound/driving/tank-engine-load-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-3.ogg b/immersive-sounds/sound/driving/tank-engine-load-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-3.ogg rename to immersive-sounds/sound/driving/tank-engine-load-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-4.ogg b/immersive-sounds/sound/driving/tank-engine-load-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-4.ogg rename to immersive-sounds/sound/driving/tank-engine-load-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-1.ogg b/immersive-sounds/sound/driving/tank-engine-load-reverse-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-1.ogg rename to immersive-sounds/sound/driving/tank-engine-load-reverse-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-2.ogg b/immersive-sounds/sound/driving/tank-engine-load-reverse-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-2.ogg rename to immersive-sounds/sound/driving/tank-engine-load-reverse-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-3.ogg b/immersive-sounds/sound/driving/tank-engine-load-reverse-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-3.ogg rename to immersive-sounds/sound/driving/tank-engine-load-reverse-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-4.ogg b/immersive-sounds/sound/driving/tank-engine-load-reverse-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-reverse-4.ogg rename to immersive-sounds/sound/driving/tank-engine-load-reverse-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-1.ogg b/immersive-sounds/sound/driving/tank-engine-load-rotation-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-1.ogg rename to immersive-sounds/sound/driving/tank-engine-load-rotation-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-2.ogg b/immersive-sounds/sound/driving/tank-engine-load-rotation-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-2.ogg rename to immersive-sounds/sound/driving/tank-engine-load-rotation-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-3.ogg b/immersive-sounds/sound/driving/tank-engine-load-rotation-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-3.ogg rename to immersive-sounds/sound/driving/tank-engine-load-rotation-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-4.ogg b/immersive-sounds/sound/driving/tank-engine-load-rotation-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-load-rotation-4.ogg rename to immersive-sounds/sound/driving/tank-engine-load-rotation-4.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-start-1.ogg b/immersive-sounds/sound/driving/tank-engine-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-start-1.ogg rename to immersive-sounds/sound/driving/tank-engine-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-start-2.ogg b/immersive-sounds/sound/driving/tank-engine-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-start-2.ogg rename to immersive-sounds/sound/driving/tank-engine-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-stop-1.ogg b/immersive-sounds/sound/driving/tank-engine-stop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-stop-1.ogg rename to immersive-sounds/sound/driving/tank-engine-stop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-engine-stop-2.ogg b/immersive-sounds/sound/driving/tank-engine-stop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-engine-stop-2.ogg rename to immersive-sounds/sound/driving/tank-engine-stop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-no-fuel-1.ogg b/immersive-sounds/sound/driving/tank-no-fuel-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-no-fuel-1.ogg rename to immersive-sounds/sound/driving/tank-no-fuel-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/tank-no-fuel-2.ogg b/immersive-sounds/sound/driving/tank-no-fuel-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/tank-no-fuel-2.ogg rename to immersive-sounds/sound/driving/tank-no-fuel-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-1.ogg b/immersive-sounds/sound/driving/unused/tank-tracks-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-1.ogg rename to immersive-sounds/sound/driving/unused/tank-tracks-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-2.ogg b/immersive-sounds/sound/driving/unused/tank-tracks-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-2.ogg rename to immersive-sounds/sound/driving/unused/tank-tracks-2.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-3.ogg b/immersive-sounds/sound/driving/unused/tank-tracks-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-3.ogg rename to immersive-sounds/sound/driving/unused/tank-tracks-3.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-stop-1.ogg b/immersive-sounds/sound/driving/unused/tank-tracks-stop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-stop-1.ogg rename to immersive-sounds/sound/driving/unused/tank-tracks-stop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-stop-2.ogg b/immersive-sounds/sound/driving/unused/tank-tracks-stop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/driving/unused/tank-tracks-stop-2.ogg rename to immersive-sounds/sound/driving/unused/tank-tracks-stop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-rotation-loop-1.ogg b/immersive-sounds/sound/fight/artillery-rotation-loop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-rotation-loop-1.ogg rename to immersive-sounds/sound/fight/artillery-rotation-loop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-rotation-loop-2.ogg b/immersive-sounds/sound/fight/artillery-rotation-loop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-rotation-loop-2.ogg rename to immersive-sounds/sound/fight/artillery-rotation-loop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-rotation-stop-1.ogg b/immersive-sounds/sound/fight/artillery-rotation-stop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-rotation-stop-1.ogg rename to immersive-sounds/sound/fight/artillery-rotation-stop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-rotation-stop-2.ogg b/immersive-sounds/sound/fight/artillery-rotation-stop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-rotation-stop-2.ogg rename to immersive-sounds/sound/fight/artillery-rotation-stop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-shoots-1.ogg b/immersive-sounds/sound/fight/artillery-shoots-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-shoots-1.ogg rename to immersive-sounds/sound/fight/artillery-shoots-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/artillery-shoots-2.ogg b/immersive-sounds/sound/fight/artillery-shoots-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/artillery-shoots-2.ogg rename to immersive-sounds/sound/fight/artillery-shoots-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/defender-shot-1.ogg b/immersive-sounds/sound/fight/defender-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/defender-shot-1.ogg rename to immersive-sounds/sound/fight/defender-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/defender-shot-2.ogg b/immersive-sounds/sound/fight/defender-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/defender-shot-2.ogg rename to immersive-sounds/sound/fight/defender-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/defender-shot-3.ogg b/immersive-sounds/sound/fight/defender-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/defender-shot-3.ogg rename to immersive-sounds/sound/fight/defender-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/fire-1.ogg b/immersive-sounds/sound/fight/fire-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/fire-1.ogg rename to immersive-sounds/sound/fight/fire-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/fire-2.ogg b/immersive-sounds/sound/fight/fire-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/fire-2.ogg rename to immersive-sounds/sound/fight/fire-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-activate-01.ogg b/immersive-sounds/sound/fight/gun-turret-activate-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-activate-01.ogg rename to immersive-sounds/sound/fight/gun-turret-activate-01.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-activate-02.ogg b/immersive-sounds/sound/fight/gun-turret-activate-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-activate-02.ogg rename to immersive-sounds/sound/fight/gun-turret-activate-02.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-activate-03.ogg b/immersive-sounds/sound/fight/gun-turret-activate-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-activate-03.ogg rename to immersive-sounds/sound/fight/gun-turret-activate-03.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-activate-04.ogg b/immersive-sounds/sound/fight/gun-turret-activate-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-activate-04.ogg rename to immersive-sounds/sound/fight/gun-turret-activate-04.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-01.ogg b/immersive-sounds/sound/fight/gun-turret-deactivate-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-01.ogg rename to immersive-sounds/sound/fight/gun-turret-deactivate-01.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-02.ogg b/immersive-sounds/sound/fight/gun-turret-deactivate-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-02.ogg rename to immersive-sounds/sound/fight/gun-turret-deactivate-02.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-03.ogg b/immersive-sounds/sound/fight/gun-turret-deactivate-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-03.ogg rename to immersive-sounds/sound/fight/gun-turret-deactivate-03.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-04.ogg b/immersive-sounds/sound/fight/gun-turret-deactivate-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/gun-turret-deactivate-04.ogg rename to immersive-sounds/sound/fight/gun-turret-deactivate-04.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/large-explosion-1.ogg b/immersive-sounds/sound/fight/large-explosion-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/large-explosion-1.ogg rename to immersive-sounds/sound/fight/large-explosion-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/large-explosion-2.ogg b/immersive-sounds/sound/fight/large-explosion-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/large-explosion-2.ogg rename to immersive-sounds/sound/fight/large-explosion-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/large-explosion-3.ogg b/immersive-sounds/sound/fight/large-explosion-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/large-explosion-3.ogg rename to immersive-sounds/sound/fight/large-explosion-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-01.ogg b/immersive-sounds/sound/fight/laser-beam-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-01.ogg rename to immersive-sounds/sound/fight/laser-beam-01.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-02.ogg b/immersive-sounds/sound/fight/laser-beam-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-02.ogg rename to immersive-sounds/sound/fight/laser-beam-02.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-end-1.ogg b/immersive-sounds/sound/fight/laser-beam-end-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-end-1.ogg rename to immersive-sounds/sound/fight/laser-beam-end-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-end-2.ogg b/immersive-sounds/sound/fight/laser-beam-end-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-end-2.ogg rename to immersive-sounds/sound/fight/laser-beam-end-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-start-1.ogg b/immersive-sounds/sound/fight/laser-beam-start-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-start-1.ogg rename to immersive-sounds/sound/fight/laser-beam-start-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam-start-2.ogg b/immersive-sounds/sound/fight/laser-beam-start-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam-start-2.ogg rename to immersive-sounds/sound/fight/laser-beam-start-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-beam.ogg b/immersive-sounds/sound/fight/laser-beam.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-beam.ogg rename to immersive-sounds/sound/fight/laser-beam.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-activate-01.ogg b/immersive-sounds/sound/fight/laser-turret-activate-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-activate-01.ogg rename to immersive-sounds/sound/fight/laser-turret-activate-01.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-activate-02.ogg b/immersive-sounds/sound/fight/laser-turret-activate-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-activate-02.ogg rename to immersive-sounds/sound/fight/laser-turret-activate-02.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-activate-03.ogg b/immersive-sounds/sound/fight/laser-turret-activate-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-activate-03.ogg rename to immersive-sounds/sound/fight/laser-turret-activate-03.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-01.ogg b/immersive-sounds/sound/fight/laser-turret-deactivate-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-01.ogg rename to immersive-sounds/sound/fight/laser-turret-deactivate-01.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-02.ogg b/immersive-sounds/sound/fight/laser-turret-deactivate-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-02.ogg rename to immersive-sounds/sound/fight/laser-turret-deactivate-02.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-03.ogg b/immersive-sounds/sound/fight/laser-turret-deactivate-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-03.ogg rename to immersive-sounds/sound/fight/laser-turret-deactivate-03.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-04.ogg b/immersive-sounds/sound/fight/laser-turret-deactivate-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/laser-turret-deactivate-04.ogg rename to immersive-sounds/sound/fight/laser-turret-deactivate-04.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-1.ogg b/immersive-sounds/sound/fight/medium-explosion-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-1.ogg rename to immersive-sounds/sound/fight/medium-explosion-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-2.ogg b/immersive-sounds/sound/fight/medium-explosion-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-2.ogg rename to immersive-sounds/sound/fight/medium-explosion-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-3.ogg b/immersive-sounds/sound/fight/medium-explosion-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-3.ogg rename to immersive-sounds/sound/fight/medium-explosion-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-4.ogg b/immersive-sounds/sound/fight/medium-explosion-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-4.ogg rename to immersive-sounds/sound/fight/medium-explosion-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-5.ogg b/immersive-sounds/sound/fight/medium-explosion-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-5.ogg rename to immersive-sounds/sound/fight/medium-explosion-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-6.ogg b/immersive-sounds/sound/fight/medium-explosion-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-6.ogg rename to immersive-sounds/sound/fight/medium-explosion-6.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-7.ogg b/immersive-sounds/sound/fight/medium-explosion-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-7.ogg rename to immersive-sounds/sound/fight/medium-explosion-7.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/medium-explosion-8.ogg b/immersive-sounds/sound/fight/medium-explosion-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/medium-explosion-8.ogg rename to immersive-sounds/sound/fight/medium-explosion-8.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-1.ogg b/immersive-sounds/sound/fight/nuclear-explosion-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-1.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-2.ogg b/immersive-sounds/sound/fight/nuclear-explosion-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-2.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-3.ogg b/immersive-sounds/sound/fight/nuclear-explosion-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-3.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-1.ogg b/immersive-sounds/sound/fight/nuclear-explosion-aftershock-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-1.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-aftershock-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-2.ogg b/immersive-sounds/sound/fight/nuclear-explosion-aftershock-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-2.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-aftershock-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-3.ogg b/immersive-sounds/sound/fight/nuclear-explosion-aftershock-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/nuclear-explosion-aftershock-3.ogg rename to immersive-sounds/sound/fight/nuclear-explosion-aftershock-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-1.ogg b/immersive-sounds/sound/fight/poison-capsule-explosion-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-1.ogg rename to immersive-sounds/sound/fight/poison-capsule-explosion-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-2.ogg b/immersive-sounds/sound/fight/poison-capsule-explosion-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-2.ogg rename to immersive-sounds/sound/fight/poison-capsule-explosion-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-3.ogg b/immersive-sounds/sound/fight/poison-capsule-explosion-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-3.ogg rename to immersive-sounds/sound/fight/poison-capsule-explosion-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-4.ogg b/immersive-sounds/sound/fight/poison-capsule-explosion-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-4.ogg rename to immersive-sounds/sound/fight/poison-capsule-explosion-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-5.ogg b/immersive-sounds/sound/fight/poison-capsule-explosion-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/poison-capsule-explosion-5.ogg rename to immersive-sounds/sound/fight/poison-capsule-explosion-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-1.ogg b/immersive-sounds/sound/fight/pump-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-1.ogg rename to immersive-sounds/sound/fight/pump-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-2.ogg b/immersive-sounds/sound/fight/pump-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-2.ogg rename to immersive-sounds/sound/fight/pump-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-3.ogg b/immersive-sounds/sound/fight/pump-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-3.ogg rename to immersive-sounds/sound/fight/pump-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-4.ogg b/immersive-sounds/sound/fight/pump-shot-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-4.ogg rename to immersive-sounds/sound/fight/pump-shot-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-5.ogg b/immersive-sounds/sound/fight/pump-shot-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-5.ogg rename to immersive-sounds/sound/fight/pump-shot-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-6.ogg b/immersive-sounds/sound/fight/pump-shot-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-6.ogg rename to immersive-sounds/sound/fight/pump-shot-6.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-7.ogg b/immersive-sounds/sound/fight/pump-shot-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-7.ogg rename to immersive-sounds/sound/fight/pump-shot-7.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-8.ogg b/immersive-sounds/sound/fight/pump-shot-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-8.ogg rename to immersive-sounds/sound/fight/pump-shot-8.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/pump-shot-9.ogg b/immersive-sounds/sound/fight/pump-shot-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/pump-shot-9.ogg rename to immersive-sounds/sound/fight/pump-shot-9.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/rocket-launcher-1.ogg b/immersive-sounds/sound/fight/rocket-launcher-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/rocket-launcher-1.ogg rename to immersive-sounds/sound/fight/rocket-launcher-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/rocket-launcher-2.ogg b/immersive-sounds/sound/fight/rocket-launcher-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/rocket-launcher-2.ogg rename to immersive-sounds/sound/fight/rocket-launcher-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/rocket-launcher-3.ogg b/immersive-sounds/sound/fight/rocket-launcher-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/rocket-launcher-3.ogg rename to immersive-sounds/sound/fight/rocket-launcher-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-1.ogg b/immersive-sounds/sound/fight/shotgun-shot-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-1.ogg rename to immersive-sounds/sound/fight/shotgun-shot-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-2.ogg b/immersive-sounds/sound/fight/shotgun-shot-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-2.ogg rename to immersive-sounds/sound/fight/shotgun-shot-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-3.ogg b/immersive-sounds/sound/fight/shotgun-shot-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-3.ogg rename to immersive-sounds/sound/fight/shotgun-shot-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-4.ogg b/immersive-sounds/sound/fight/shotgun-shot-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-4.ogg rename to immersive-sounds/sound/fight/shotgun-shot-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-5.ogg b/immersive-sounds/sound/fight/shotgun-shot-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-5.ogg rename to immersive-sounds/sound/fight/shotgun-shot-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-6.ogg b/immersive-sounds/sound/fight/shotgun-shot-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-6.ogg rename to immersive-sounds/sound/fight/shotgun-shot-6.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-7.ogg b/immersive-sounds/sound/fight/shotgun-shot-7.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-7.ogg rename to immersive-sounds/sound/fight/shotgun-shot-7.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-8.ogg b/immersive-sounds/sound/fight/shotgun-shot-8.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-8.ogg rename to immersive-sounds/sound/fight/shotgun-shot-8.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/shotgun-shot-9.ogg b/immersive-sounds/sound/fight/shotgun-shot-9.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/shotgun-shot-9.ogg rename to immersive-sounds/sound/fight/shotgun-shot-9.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/small-explosion-1.ogg b/immersive-sounds/sound/fight/small-explosion-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/small-explosion-1.ogg rename to immersive-sounds/sound/fight/small-explosion-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/small-explosion-2.ogg b/immersive-sounds/sound/fight/small-explosion-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/small-explosion-2.ogg rename to immersive-sounds/sound/fight/small-explosion-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/small-explosion-3.ogg b/immersive-sounds/sound/fight/small-explosion-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/small-explosion-3.ogg rename to immersive-sounds/sound/fight/small-explosion-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/small-explosion-4.ogg b/immersive-sounds/sound/fight/small-explosion-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/small-explosion-4.ogg rename to immersive-sounds/sound/fight/small-explosion-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/small-explosion-5.ogg b/immersive-sounds/sound/fight/small-explosion-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/small-explosion-5.ogg rename to immersive-sounds/sound/fight/small-explosion-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/tank-cannon-1.ogg b/immersive-sounds/sound/fight/tank-cannon-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/tank-cannon-1.ogg rename to immersive-sounds/sound/fight/tank-cannon-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/tank-cannon-2.ogg b/immersive-sounds/sound/fight/tank-cannon-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/tank-cannon-2.ogg rename to immersive-sounds/sound/fight/tank-cannon-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/tank-cannon-3.ogg b/immersive-sounds/sound/fight/tank-cannon-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/tank-cannon-3.ogg rename to immersive-sounds/sound/fight/tank-cannon-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/tank-cannon-4.ogg b/immersive-sounds/sound/fight/tank-cannon-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/tank-cannon-4.ogg rename to immersive-sounds/sound/fight/tank-cannon-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-1.ogg b/immersive-sounds/sound/fight/throw-projectile-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-1.ogg rename to immersive-sounds/sound/fight/throw-projectile-1.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-2.ogg b/immersive-sounds/sound/fight/throw-projectile-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-2.ogg rename to immersive-sounds/sound/fight/throw-projectile-2.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-3.ogg b/immersive-sounds/sound/fight/throw-projectile-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-3.ogg rename to immersive-sounds/sound/fight/throw-projectile-3.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-4.ogg b/immersive-sounds/sound/fight/throw-projectile-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-4.ogg rename to immersive-sounds/sound/fight/throw-projectile-4.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-5.ogg b/immersive-sounds/sound/fight/throw-projectile-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-5.ogg rename to immersive-sounds/sound/fight/throw-projectile-5.ogg diff --git a/immersive-sounds_0.1.1/sound/fight/throw-projectile-6.ogg b/immersive-sounds/sound/fight/throw-projectile-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/fight/throw-projectile-6.ogg rename to immersive-sounds/sound/fight/throw-projectile-6.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-01.ogg b/immersive-sounds/sound/footsteps/decorative-grass-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-01.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-01.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-02.ogg b/immersive-sounds/sound/footsteps/decorative-grass-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-02.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-02.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-03.ogg b/immersive-sounds/sound/footsteps/decorative-grass-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-03.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-03.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-04.ogg b/immersive-sounds/sound/footsteps/decorative-grass-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-04.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-04.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-05.ogg b/immersive-sounds/sound/footsteps/decorative-grass-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-05.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-05.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-06.ogg b/immersive-sounds/sound/footsteps/decorative-grass-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-06.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-06.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-07.ogg b/immersive-sounds/sound/footsteps/decorative-grass-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-07.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-07.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-08.ogg b/immersive-sounds/sound/footsteps/decorative-grass-08.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-08.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-08.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-09.ogg b/immersive-sounds/sound/footsteps/decorative-grass-09.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-09.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-09.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/decorative-grass-10.ogg b/immersive-sounds/sound/footsteps/decorative-grass-10.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/decorative-grass-10.ogg rename to immersive-sounds/sound/footsteps/decorative-grass-10.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-01.ogg b/immersive-sounds/sound/footsteps/rails/rails-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-01.ogg rename to immersive-sounds/sound/footsteps/rails/rails-01.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-02.ogg b/immersive-sounds/sound/footsteps/rails/rails-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-02.ogg rename to immersive-sounds/sound/footsteps/rails/rails-02.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-03.ogg b/immersive-sounds/sound/footsteps/rails/rails-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-03.ogg rename to immersive-sounds/sound/footsteps/rails/rails-03.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-04.ogg b/immersive-sounds/sound/footsteps/rails/rails-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-04.ogg rename to immersive-sounds/sound/footsteps/rails/rails-04.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-05.ogg b/immersive-sounds/sound/footsteps/rails/rails-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-05.ogg rename to immersive-sounds/sound/footsteps/rails/rails-05.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-06.ogg b/immersive-sounds/sound/footsteps/rails/rails-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-06.ogg rename to immersive-sounds/sound/footsteps/rails/rails-06.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-07.ogg b/immersive-sounds/sound/footsteps/rails/rails-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-07.ogg rename to immersive-sounds/sound/footsteps/rails/rails-07.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-08.ogg b/immersive-sounds/sound/footsteps/rails/rails-08.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-08.ogg rename to immersive-sounds/sound/footsteps/rails/rails-08.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-09.ogg b/immersive-sounds/sound/footsteps/rails/rails-09.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-09.ogg rename to immersive-sounds/sound/footsteps/rails/rails-09.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-10.ogg b/immersive-sounds/sound/footsteps/rails/rails-10.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-10.ogg rename to immersive-sounds/sound/footsteps/rails/rails-10.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-11.ogg b/immersive-sounds/sound/footsteps/rails/rails-11.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-11.ogg rename to immersive-sounds/sound/footsteps/rails/rails-11.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/rails/rails-12.ogg b/immersive-sounds/sound/footsteps/rails/rails-12.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/rails/rails-12.ogg rename to immersive-sounds/sound/footsteps/rails/rails-12.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-01.ogg b/immersive-sounds/sound/footsteps/resources/ore-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-01.ogg rename to immersive-sounds/sound/footsteps/resources/ore-01.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-02.ogg b/immersive-sounds/sound/footsteps/resources/ore-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-02.ogg rename to immersive-sounds/sound/footsteps/resources/ore-02.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-03.ogg b/immersive-sounds/sound/footsteps/resources/ore-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-03.ogg rename to immersive-sounds/sound/footsteps/resources/ore-03.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-04.ogg b/immersive-sounds/sound/footsteps/resources/ore-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-04.ogg rename to immersive-sounds/sound/footsteps/resources/ore-04.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-05.ogg b/immersive-sounds/sound/footsteps/resources/ore-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-05.ogg rename to immersive-sounds/sound/footsteps/resources/ore-05.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-06.ogg b/immersive-sounds/sound/footsteps/resources/ore-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-06.ogg rename to immersive-sounds/sound/footsteps/resources/ore-06.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-07.ogg b/immersive-sounds/sound/footsteps/resources/ore-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-07.ogg rename to immersive-sounds/sound/footsteps/resources/ore-07.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-08.ogg b/immersive-sounds/sound/footsteps/resources/ore-08.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-08.ogg rename to immersive-sounds/sound/footsteps/resources/ore-08.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-09.ogg b/immersive-sounds/sound/footsteps/resources/ore-09.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-09.ogg rename to immersive-sounds/sound/footsteps/resources/ore-09.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/resources/ore-10.ogg b/immersive-sounds/sound/footsteps/resources/ore-10.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/resources/ore-10.ogg rename to immersive-sounds/sound/footsteps/resources/ore-10.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-01.ogg b/immersive-sounds/sound/footsteps/shallow-water-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-01.ogg rename to immersive-sounds/sound/footsteps/shallow-water-01.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-02.ogg b/immersive-sounds/sound/footsteps/shallow-water-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-02.ogg rename to immersive-sounds/sound/footsteps/shallow-water-02.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-03.ogg b/immersive-sounds/sound/footsteps/shallow-water-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-03.ogg rename to immersive-sounds/sound/footsteps/shallow-water-03.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-04.ogg b/immersive-sounds/sound/footsteps/shallow-water-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-04.ogg rename to immersive-sounds/sound/footsteps/shallow-water-04.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-05.ogg b/immersive-sounds/sound/footsteps/shallow-water-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-05.ogg rename to immersive-sounds/sound/footsteps/shallow-water-05.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-06.ogg b/immersive-sounds/sound/footsteps/shallow-water-06.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-06.ogg rename to immersive-sounds/sound/footsteps/shallow-water-06.ogg diff --git a/immersive-sounds_0.1.1/sound/footsteps/shallow-water-07.ogg b/immersive-sounds/sound/footsteps/shallow-water-07.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/footsteps/shallow-water-07.ogg rename to immersive-sounds/sound/footsteps/shallow-water-07.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact-2.ogg b/immersive-sounds/sound/impact/car-metal-impact-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact-2.ogg rename to immersive-sounds/sound/impact/car-metal-impact-2.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact-3.ogg b/immersive-sounds/sound/impact/car-metal-impact-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact-3.ogg rename to immersive-sounds/sound/impact/car-metal-impact-3.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact-4.ogg b/immersive-sounds/sound/impact/car-metal-impact-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact-4.ogg rename to immersive-sounds/sound/impact/car-metal-impact-4.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact-5.ogg b/immersive-sounds/sound/impact/car-metal-impact-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact-5.ogg rename to immersive-sounds/sound/impact/car-metal-impact-5.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact-6.ogg b/immersive-sounds/sound/impact/car-metal-impact-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact-6.ogg rename to immersive-sounds/sound/impact/car-metal-impact-6.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-metal-impact.ogg b/immersive-sounds/sound/impact/car-metal-impact.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-metal-impact.ogg rename to immersive-sounds/sound/impact/car-metal-impact.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact-2.ogg b/immersive-sounds/sound/impact/car-stone-impact-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact-2.ogg rename to immersive-sounds/sound/impact/car-stone-impact-2.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact-3.ogg b/immersive-sounds/sound/impact/car-stone-impact-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact-3.ogg rename to immersive-sounds/sound/impact/car-stone-impact-3.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact-4.ogg b/immersive-sounds/sound/impact/car-stone-impact-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact-4.ogg rename to immersive-sounds/sound/impact/car-stone-impact-4.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact-5.ogg b/immersive-sounds/sound/impact/car-stone-impact-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact-5.ogg rename to immersive-sounds/sound/impact/car-stone-impact-5.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact-6.ogg b/immersive-sounds/sound/impact/car-stone-impact-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact-6.ogg rename to immersive-sounds/sound/impact/car-stone-impact-6.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-stone-impact.ogg b/immersive-sounds/sound/impact/car-stone-impact.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-stone-impact.ogg rename to immersive-sounds/sound/impact/car-stone-impact.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-01.ogg b/immersive-sounds/sound/impact/car-tree-wood-impact-01.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-01.ogg rename to immersive-sounds/sound/impact/car-tree-wood-impact-01.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-02.ogg b/immersive-sounds/sound/impact/car-tree-wood-impact-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-02.ogg rename to immersive-sounds/sound/impact/car-tree-wood-impact-02.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-03.ogg b/immersive-sounds/sound/impact/car-tree-wood-impact-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-03.ogg rename to immersive-sounds/sound/impact/car-tree-wood-impact-03.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-04.ogg b/immersive-sounds/sound/impact/car-tree-wood-impact-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-tree-wood-impact-04.ogg rename to immersive-sounds/sound/impact/car-tree-wood-impact-04.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-wood-impact-02.ogg b/immersive-sounds/sound/impact/car-wood-impact-02.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-wood-impact-02.ogg rename to immersive-sounds/sound/impact/car-wood-impact-02.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-wood-impact-03.ogg b/immersive-sounds/sound/impact/car-wood-impact-03.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-wood-impact-03.ogg rename to immersive-sounds/sound/impact/car-wood-impact-03.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-wood-impact-04.ogg b/immersive-sounds/sound/impact/car-wood-impact-04.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-wood-impact-04.ogg rename to immersive-sounds/sound/impact/car-wood-impact-04.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-wood-impact-05.ogg b/immersive-sounds/sound/impact/car-wood-impact-05.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-wood-impact-05.ogg rename to immersive-sounds/sound/impact/car-wood-impact-05.ogg diff --git a/immersive-sounds_0.1.1/sound/impact/car-wood-impact.ogg b/immersive-sounds/sound/impact/car-wood-impact.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/impact/car-wood-impact.ogg rename to immersive-sounds/sound/impact/car-wood-impact.ogg diff --git a/immersive-sounds_0.1.1/sound/machines/nuclear-reactor-1.ogg b/immersive-sounds/sound/machines/nuclear-reactor-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/machines/nuclear-reactor-1.ogg rename to immersive-sounds/sound/machines/nuclear-reactor-1.ogg diff --git a/immersive-sounds_0.1.1/sound/machines/nuclear-reactor-2.ogg b/immersive-sounds/sound/machines/nuclear-reactor-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/machines/nuclear-reactor-2.ogg rename to immersive-sounds/sound/machines/nuclear-reactor-2.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/small-splash-1.ogg b/immersive-sounds/sound/particles/small-splash-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/small-splash-1.ogg rename to immersive-sounds/sound/particles/small-splash-1.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/small-splash-2.ogg b/immersive-sounds/sound/particles/small-splash-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/small-splash-2.ogg rename to immersive-sounds/sound/particles/small-splash-2.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/small-splash-3.ogg b/immersive-sounds/sound/particles/small-splash-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/small-splash-3.ogg rename to immersive-sounds/sound/particles/small-splash-3.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/small-splash-4.ogg b/immersive-sounds/sound/particles/small-splash-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/small-splash-4.ogg rename to immersive-sounds/sound/particles/small-splash-4.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/small-splash-5.ogg b/immersive-sounds/sound/particles/small-splash-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/small-splash-5.ogg rename to immersive-sounds/sound/particles/small-splash-5.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/tree-leaves-1.ogg b/immersive-sounds/sound/particles/tree-leaves-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/tree-leaves-1.ogg rename to immersive-sounds/sound/particles/tree-leaves-1.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/tree-leaves-2.ogg b/immersive-sounds/sound/particles/tree-leaves-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/tree-leaves-2.ogg rename to immersive-sounds/sound/particles/tree-leaves-2.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/tree-leaves-3.ogg b/immersive-sounds/sound/particles/tree-leaves-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/tree-leaves-3.ogg rename to immersive-sounds/sound/particles/tree-leaves-3.ogg diff --git a/immersive-sounds_0.1.1/sound/particles/tree-leaves-4.ogg b/immersive-sounds/sound/particles/tree-leaves-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/particles/tree-leaves-4.ogg rename to immersive-sounds/sound/particles/tree-leaves-4.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-brake-screech-1.ogg b/immersive-sounds/sound/train/train-brake-screech-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-brake-screech-1.ogg rename to immersive-sounds/sound/train/train-brake-screech-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-brake-screech-2.ogg b/immersive-sounds/sound/train/train-brake-screech-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-brake-screech-2.ogg rename to immersive-sounds/sound/train/train-brake-screech-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-brake-screech-3.ogg b/immersive-sounds/sound/train/train-brake-screech-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-brake-screech-3.ogg rename to immersive-sounds/sound/train/train-brake-screech-3.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-breaks-1.ogg b/immersive-sounds/sound/train/train-breaks-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-breaks-1.ogg rename to immersive-sounds/sound/train/train-breaks-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-breaks-2.ogg b/immersive-sounds/sound/train/train-breaks-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-breaks-2.ogg rename to immersive-sounds/sound/train/train-breaks-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-breaks-3.ogg b/immersive-sounds/sound/train/train-breaks-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-breaks-3.ogg rename to immersive-sounds/sound/train/train-breaks-3.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-breaks-4.ogg b/immersive-sounds/sound/train/train-breaks-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-breaks-4.ogg rename to immersive-sounds/sound/train/train-breaks-4.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-breaks-5.ogg b/immersive-sounds/sound/train/train-breaks-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-breaks-5.ogg rename to immersive-sounds/sound/train/train-breaks-5.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-door-close-1.ogg b/immersive-sounds/sound/train/train-door-close-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-door-close-1.ogg rename to immersive-sounds/sound/train/train-door-close-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-door-close-2.ogg b/immersive-sounds/sound/train/train-door-close-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-door-close-2.ogg rename to immersive-sounds/sound/train/train-door-close-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-door-open-1.ogg b/immersive-sounds/sound/train/train-door-open-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-door-open-1.ogg rename to immersive-sounds/sound/train/train-door-open-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-door-open-2.ogg b/immersive-sounds/sound/train/train-door-open-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-door-open-2.ogg rename to immersive-sounds/sound/train/train-door-open-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-engine-1.ogg b/immersive-sounds/sound/train/train-engine-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-engine-1.ogg rename to immersive-sounds/sound/train/train-engine-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-engine-2.ogg b/immersive-sounds/sound/train/train-engine-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-engine-2.ogg rename to immersive-sounds/sound/train/train-engine-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-engine-3.ogg b/immersive-sounds/sound/train/train-engine-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-engine-3.ogg rename to immersive-sounds/sound/train/train-engine-3.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-engine-stop-1.ogg b/immersive-sounds/sound/train/train-engine-stop-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-engine-stop-1.ogg rename to immersive-sounds/sound/train/train-engine-stop-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-engine-stop-2.ogg b/immersive-sounds/sound/train/train-engine-stop-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-engine-stop-2.ogg rename to immersive-sounds/sound/train/train-engine-stop-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-1.ogg b/immersive-sounds/sound/train/train-tie-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-1.ogg rename to immersive-sounds/sound/train/train-tie-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-2.ogg b/immersive-sounds/sound/train/train-tie-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-2.ogg rename to immersive-sounds/sound/train/train-tie-2.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-3.ogg b/immersive-sounds/sound/train/train-tie-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-3.ogg rename to immersive-sounds/sound/train/train-tie-3.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-4.ogg b/immersive-sounds/sound/train/train-tie-4.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-4.ogg rename to immersive-sounds/sound/train/train-tie-4.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-5.ogg b/immersive-sounds/sound/train/train-tie-5.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-5.ogg rename to immersive-sounds/sound/train/train-tie-5.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-tie-6.ogg b/immersive-sounds/sound/train/train-tie-6.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-tie-6.ogg rename to immersive-sounds/sound/train/train-tie-6.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-wheels-1.ogg b/immersive-sounds/sound/train/train-wheels-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-wheels-1.ogg rename to immersive-sounds/sound/train/train-wheels-1.ogg diff --git a/immersive-sounds_0.1.1/sound/train/train-wheels-2.ogg b/immersive-sounds/sound/train/train-wheels-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/train/train-wheels-2.ogg rename to immersive-sounds/sound/train/train-wheels-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-close-1.ogg b/immersive-sounds/sound/ui/armor-close-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-close-1.ogg rename to immersive-sounds/sound/ui/armor-close-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-close-2.ogg b/immersive-sounds/sound/ui/armor-close-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-close-2.ogg rename to immersive-sounds/sound/ui/armor-close-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-close-3.ogg b/immersive-sounds/sound/ui/armor-close-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-close-3.ogg rename to immersive-sounds/sound/ui/armor-close-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-open-1.ogg b/immersive-sounds/sound/ui/armor-open-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-open-1.ogg rename to immersive-sounds/sound/ui/armor-open-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-open-2.ogg b/immersive-sounds/sound/ui/armor-open-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-open-2.ogg rename to immersive-sounds/sound/ui/armor-open-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/armor-open-3.ogg b/immersive-sounds/sound/ui/armor-open-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/armor-open-3.ogg rename to immersive-sounds/sound/ui/armor-open-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/blueprint-create.ogg b/immersive-sounds/sound/ui/blueprint-create.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/blueprint-create.ogg rename to immersive-sounds/sound/ui/blueprint-create.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/blueprint-select.ogg b/immersive-sounds/sound/ui/blueprint-select.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/blueprint-select.ogg rename to immersive-sounds/sound/ui/blueprint-select.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-1.ogg b/immersive-sounds/sound/ui/select-auto-shotgun-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-1.ogg rename to immersive-sounds/sound/ui/select-auto-shotgun-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-2.ogg b/immersive-sounds/sound/ui/select-auto-shotgun-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-2.ogg rename to immersive-sounds/sound/ui/select-auto-shotgun-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-3.ogg b/immersive-sounds/sound/ui/select-auto-shotgun-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-auto-shotgun-3.ogg rename to immersive-sounds/sound/ui/select-auto-shotgun-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-cannon-1.ogg b/immersive-sounds/sound/ui/select-cannon-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-cannon-1.ogg rename to immersive-sounds/sound/ui/select-cannon-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-cannon-2.ogg b/immersive-sounds/sound/ui/select-cannon-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-cannon-2.ogg rename to immersive-sounds/sound/ui/select-cannon-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-cannon-3.ogg b/immersive-sounds/sound/ui/select-cannon-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-cannon-3.ogg rename to immersive-sounds/sound/ui/select-cannon-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-flame-1.ogg b/immersive-sounds/sound/ui/select-flame-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-flame-1.ogg rename to immersive-sounds/sound/ui/select-flame-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-flame-2.ogg b/immersive-sounds/sound/ui/select-flame-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-flame-2.ogg rename to immersive-sounds/sound/ui/select-flame-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-flame-3.ogg b/immersive-sounds/sound/ui/select-flame-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-flame-3.ogg rename to immersive-sounds/sound/ui/select-flame-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-machine-gun-1.ogg b/immersive-sounds/sound/ui/select-machine-gun-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-machine-gun-1.ogg rename to immersive-sounds/sound/ui/select-machine-gun-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-machine-gun-2.ogg b/immersive-sounds/sound/ui/select-machine-gun-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-machine-gun-2.ogg rename to immersive-sounds/sound/ui/select-machine-gun-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-machine-gun-3.ogg b/immersive-sounds/sound/ui/select-machine-gun-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-machine-gun-3.ogg rename to immersive-sounds/sound/ui/select-machine-gun-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-pistol-1.ogg b/immersive-sounds/sound/ui/select-pistol-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-pistol-1.ogg rename to immersive-sounds/sound/ui/select-pistol-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-pistol-2.ogg b/immersive-sounds/sound/ui/select-pistol-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-pistol-2.ogg rename to immersive-sounds/sound/ui/select-pistol-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-pistol-3.ogg b/immersive-sounds/sound/ui/select-pistol-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-pistol-3.ogg rename to immersive-sounds/sound/ui/select-pistol-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-shotgun-1.ogg b/immersive-sounds/sound/ui/select-shotgun-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-shotgun-1.ogg rename to immersive-sounds/sound/ui/select-shotgun-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-shotgun-2.ogg b/immersive-sounds/sound/ui/select-shotgun-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-shotgun-2.ogg rename to immersive-sounds/sound/ui/select-shotgun-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-shotgun-3.ogg b/immersive-sounds/sound/ui/select-shotgun-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-shotgun-3.ogg rename to immersive-sounds/sound/ui/select-shotgun-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-smg-1.ogg b/immersive-sounds/sound/ui/select-smg-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-smg-1.ogg rename to immersive-sounds/sound/ui/select-smg-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-smg-2.ogg b/immersive-sounds/sound/ui/select-smg-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-smg-2.ogg rename to immersive-sounds/sound/ui/select-smg-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/select-smg-3.ogg b/immersive-sounds/sound/ui/select-smg-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/select-smg-3.ogg rename to immersive-sounds/sound/ui/select-smg-3.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/switch-gun-1.ogg b/immersive-sounds/sound/ui/switch-gun-1.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/switch-gun-1.ogg rename to immersive-sounds/sound/ui/switch-gun-1.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/switch-gun-2.ogg b/immersive-sounds/sound/ui/switch-gun-2.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/switch-gun-2.ogg rename to immersive-sounds/sound/ui/switch-gun-2.ogg diff --git a/immersive-sounds_0.1.1/sound/ui/switch-gun-3.ogg b/immersive-sounds/sound/ui/switch-gun-3.ogg similarity index 100% rename from immersive-sounds_0.1.1/sound/ui/switch-gun-3.ogg rename to immersive-sounds/sound/ui/switch-gun-3.ogg diff --git a/immersive-sounds_0.1.1/thumbnail.png b/immersive-sounds/thumbnail.png similarity index 100% rename from immersive-sounds_0.1.1/thumbnail.png rename to immersive-sounds/thumbnail.png diff --git a/inserter-throughput/LICENSE b/inserter-throughput/LICENSE new file mode 100644 index 00000000..68a49daa --- /dev/null +++ b/inserter-throughput/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/inserter-throughput/calc.lua b/inserter-throughput/calc.lua new file mode 100644 index 00000000..9b4a8881 --- /dev/null +++ b/inserter-throughput/calc.lua @@ -0,0 +1,71 @@ +local abs = math.abs +local sqrt = math.sqrt +local acos = math.acos +local round_up = math.ceil +local full_circle_in_radians = math.pi * 2 +local item_size_on_belt = 0.25 -- in tiles +local inserter_angle_precision = 0.001 -- hardcoded game mechanic, or so it seems + +-- belt speed in tiles per tick +-- inserters can put items in the vicinity of their drop spot, +-- as long as there is no item center directly beneath them +-- e.g. they can place the second item on the very next tick +-- also, the inserter can put down an item either before or after +-- the belt moves in a given tick (usually before) +-- picking items up is vastly more complex and therefore not implemented +local function get_belt_penalty(belt_speed, stack_size) + local penalty = 0 + stack_size = stack_size - 1 + local item_center_offset = belt_speed + local acted = true + while stack_size > 0 do + if item_center_offset > 0 then + stack_size = stack_size - 1 + item_center_offset = item_center_offset - item_size_on_belt + acted = true + end + item_center_offset = item_center_offset + belt_speed + if not acted and (item_center_offset > 0) then + stack_size = stack_size - 1 + item_center_offset = item_center_offset - item_size_on_belt + acted = true + end + penalty = penalty + 1 + acted = false + end + return penalty +end + +local function calc(rotation_speed, extension_speed, pickup_vector, drop_vector, stack_size, pickup_belt_speed, drop_belt_speed) + local pickup_x, pickup_y = pickup_vector[1], pickup_vector[2] + local drop_x, drop_y = drop_vector[1], drop_vector[2] + local pickup_length = sqrt(pickup_x * pickup_x + pickup_y * pickup_y) + local drop_length = sqrt(drop_x * drop_x + drop_y * drop_y) + -- get angle from the dot product + local angle = 0 + if pickup_length > 0 and drop_length > 0 then + angle = acos((pickup_x * drop_x + pickup_y * drop_y) / (pickup_length * drop_length)) + end + -- convert it to circles + -- the inserter doesn't have to swing all the way, only within a certain angle of destination + angle = angle / full_circle_in_radians - inserter_angle_precision + -- rotation speed is in circles per tick + local ticks_per_cycle = 2 * round_up(angle / rotation_speed) + local extension_time = 2 * round_up(abs(pickup_length - drop_length) / extension_speed) + if ticks_per_cycle < extension_time then + ticks_per_cycle = extension_time + end + -- inserters can not pick up and put down items in the same tick, so the full cycle is at least two ticks + if ticks_per_cycle < 2 then + ticks_per_cycle = 2 + end + if pickup_belt_speed and (stack_size > 1) then + ticks_per_cycle = ticks_per_cycle + get_belt_penalty(pickup_belt_speed, stack_size) + end + if drop_belt_speed and (stack_size > 1) then + ticks_per_cycle = ticks_per_cycle + get_belt_penalty(drop_belt_speed, stack_size) + end + return stack_size * 60 / ticks_per_cycle -- 60 = ticks per second +end + +return calc \ No newline at end of file diff --git a/inserter-throughput/changelog.txt b/inserter-throughput/changelog.txt new file mode 100644 index 00000000..c8925b71 --- /dev/null +++ b/inserter-throughput/changelog.txt @@ -0,0 +1,42 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 27. 01. 2023 + Bugfixes: + - Prevented the mod from triggering on miniloaders. +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 14. 05. 2022 + Features: + - Added the /it-stopwatch command to measure live inserter performance. + Gui: + - Changed the toggle button to use the base game mod-gui library to conform to a common style. + Changes: + - Tweaked the positioning of the number tooltip. + Bugfixes: + - Fixed a crash from the toggle button getting lost. + - Improved the handling of extreme inserter speeds. + - Fixed inserter angle rounding discrepancy between the mod and the game. + - Accounted for the inserter's intrinsic stack size bonus. +--------------------------------------------------------------------------------------------------- +Version: 0.1.2 +Date: 24. 11. 2020 + Features: + - Added support for inserter and belt ghosts. + - Added a key binding to toggle the mod (unbound by default). + Changes: + - Updated for Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.1.1 +Date: 24. 10. 2020 + Bugfixes: + - Fixed a crash when adding the mod to an existing game. + - Improved inserter source/destination detection for calculating throughput in the same tick as the inserter was placed (e.g. in the map editor). +--------------------------------------------------------------------------------------------------- +Version: 0.1.0 +Date: 10. 06. 2020 + Features: + - Added throughput display when hovering over an inserter. + - Added a setting to control the precision of the displayed value. + - Added a setting to disable mod functionality per player. + Gui: + - Added a button to quickly toggle the mod and a setting to hide the button. diff --git a/inserter-throughput/control.lua b/inserter-throughput/control.lua new file mode 100644 index 00000000..730105f6 --- /dev/null +++ b/inserter-throughput/control.lua @@ -0,0 +1,387 @@ +local mod_gui = require('mod-gui') +local get_mod_button_flow = mod_gui.get_button_flow +local mod_button_style = mod_gui.button_style + +local migrations = require('migrations') + +local calc = require('calc') +local floor = math.floor + +local lib = require('lib') +local get_stack_size = lib.get_stack_size + +local strlen = string.len +local format = string.format + +local draw_text = rendering.draw_text +local destroy_text = rendering.destroy +local text_color = {1, 1, 1} +local text_offset = {0.5, -0.5} + +local stopwatch = require('stopwatch') +local stopwatch_tick = stopwatch.tick +local stopwatch_timeout = 3600 -- in ticks + +-- COMPATIBILITY + +local name_blacklist = nil + +if not script.active_mods['miniloader'] then + name_blacklist = {} -- disable blacklist +end + +local function populate_name_blacklist() + name_blacklist = {} + local inserters = game.get_filtered_entity_prototypes{{filter = 'type', type = 'inserter'}} + for name in pairs(inserters) do + if string.find(name, 'miniloader', nil, true) then + name_blacklist[name] = true + end + end +end + +-- LOGIC + +local function vector(from, to) + return {to.x - from.x, to.y - from.y} +end + +local function number_to_string_with_precision(number, precision) + local result = tostring(number) + if precision > 0 then + local rounded = format(format('%%.%if', precision), number) + if strlen(rounded) < strlen(result) then + result = rounded + end + end + return result +end + +local function get_throughput_info(inserter, precision) + local inserter_position = inserter.position + local prototype = (inserter.type == 'entity-ghost' + and inserter.ghost_prototype or inserter.prototype) + + local pickup_position = inserter.pickup_position + local pickup_target = inserter.pickup_target + if not pickup_target then + pickup_target = inserter.surface.find_entities_filtered{ + position = pickup_position, limit = 1}[1] + end + local pickup_belt_speed + if pickup_target then + if pickup_target.type == 'entity-ghost' then + pickup_belt_speed = pickup_target.ghost_prototype.belt_speed + else + pickup_belt_speed = pickup_target.prototype.belt_speed + end + end + + local drop_position = inserter.drop_position + local drop_target = inserter.drop_target + if not drop_target then + drop_target = inserter.surface.find_entities_filtered{ + position = drop_position, limit = 1}[1] + end + local drop_belt_speed + if drop_target then + if drop_target.type == 'entity-ghost' then + drop_belt_speed = drop_target.ghost_prototype.belt_speed + else + drop_belt_speed = drop_target.prototype.belt_speed + end + end + + local value = calc( + prototype.inserter_rotation_speed, + prototype.inserter_extension_speed, + vector(inserter_position, pickup_position), + vector(inserter_position, drop_position), + get_stack_size(inserter, prototype), + pickup_belt_speed, + drop_belt_speed + ) + return {'', number_to_string_with_precision(value, precision), {'per-second-suffix'}} +end + +-- GUI + +local function update_toggle_button_state(toggle_button, new_state) + if new_state then + toggle_button.style = 'inserter_throughput_pressed_button' + else + toggle_button.style = mod_button_style + end +end + +local function init_toggle_button(player) + local top_gui = get_mod_button_flow(player) + local toggle_element = top_gui['inserter-throughput-toggle'] + if not toggle_element then + toggle_element = top_gui.add{ + type = 'sprite-button', + name = 'inserter-throughput-toggle', + tooltip = {'inserter-throughput.toggle-button-tooltip'}, + sprite = 'inserter-throughput-toggle-button' + } + end + local player_settings = player.mod_settings + toggle_element.visible = player_settings['inserter-throughput-show-toggle'].value + update_toggle_button_state(toggle_element, player_settings['inserter-throughput-enabled'].value) +end + +local function on_entity_selected(event) + -- event.player_index current player + -- event.last_entity previous entity + local player_index = event.player_index + local player_settings = settings.get_player_settings(player_index) + if not player_settings['inserter-throughput-enabled'].value then + return + end + local current_entity = game.get_player(player_index).selected + local global_player_data = global.player_data + local data = global_player_data[player_index] + local text_id = data and data.text_id + if current_entity then + local entity_type = current_entity.type + local entity_name = nil + if entity_type == 'entity-ghost' then + entity_type = current_entity.ghost_type + entity_name = current_entity.ghost_name + else + entity_name = current_entity.name + end + if not name_blacklist then + populate_name_blacklist() + end + if entity_type ~= 'inserter' or name_blacklist[entity_name] then + current_entity = nil + end + end + if current_entity then -- a valid inserter by now + if not data then + data = {} + global_player_data[player_index] = data + elseif data.text_id then + destroy_text(data.text_id) + end + local precision = player_settings['inserter-throughput-rounding-precision'].value + data.text_id = draw_text{ + text = get_throughput_info(current_entity, precision), + surface = current_entity.surface, + target = current_entity, + target_offset = text_offset, + color = text_color, + players = {player_index}, + scale_with_zoom = true, + vertical_alignment = 'baseline', + } + elseif text_id then + destroy_text(text_id) + data.text_id = nil + end +end + +local function on_setting_changed(event) + -- event.player_index player whose setting has changed, if applicable (API seems to be wrong) + -- event.setting name of the setting, as seen in the prototype + -- event.setting_type type of the setting, as seen in the prototype + local setting_name = event.setting + local player_index = event.player_index + if setting_name == 'inserter-throughput-show-toggle' then + local button = get_mod_button_flow(game.get_player(player_index))['inserter-throughput-toggle'] + if button then + local new_state = settings.get_player_settings(player_index)[setting_name].value + button.visible = new_state + else + init_toggle_button(game.get_player(player_index)) + end + elseif setting_name == 'inserter-throughput-enabled' then + local button = get_mod_button_flow(game.get_player(player_index))['inserter-throughput-toggle'] + if button then + local new_state = settings.get_player_settings(player_index)[setting_name].value + update_toggle_button_state(button, new_state) + if not new_state then -- remove the tooltip on disable, if any + local data = global.player_data[player_index] + local text_id = data and data.text_id + if text_id then + destroy_text(text_id) + data.text_id = nil + end + end + else + init_toggle_button(game.get_player(player_index)) + end + end +end + +local function on_toggle(event) + -- event.player_index player who triggered the custom input (unlisted in API) + local player_settings = settings.get_player_settings(event.player_index) + local enabled_setting = player_settings['inserter-throughput-enabled'] + enabled_setting.value = not enabled_setting.value + -- this will trigger on_setting_changed above + player_settings['inserter-throughput-enabled'] = enabled_setting +end + +local function on_gui_clicked(event) + -- event.element clicked element + -- event.player_index player who clicked + -- event.button mouse button + -- event.alt state of Alt key + -- event.control state of Ctrl key + -- event.shift state of Shift key + if event.element.name == 'inserter-throughput-toggle' then + on_toggle(event) + end +end + +-- COMMANDS + +local function stopwatch_command(event) + -- event.player_index player who ran the command, if any + -- event.parameter the rest of the command string + if not event.player_index then + -- no player implies no ability to select the inserter + -- so responding with the help text will inform them of this fact + localised_print{'inserter-throughput.stopwatch-help'} + return + end + local player = game.get_player(event.player_index) + local inserter = player.selected + if not name_blacklist then + populate_name_blacklist() + end + if not inserter or inserter.type ~= 'inserter' or name_blacklist[inserter.name] then + player.print{'inserter-throughput.stopwatch-help'} + return + end + local entry = stopwatch.new(inserter) + entry.player = player + entry.entity_name = inserter.name + entry.entity_position = inserter.position + entry.entity_surface = inserter.surface.name + entry.timeout_tick = event.tick + stopwatch_timeout + if not global.stopwatch then + global.stopwatch = {entry} + else + table.insert(global.stopwatch, entry) + end +end + +commands.add_command( + 'it-stopwatch', + {'', {'inserter-throughput.stopwatch-command-description'}, ' ', {'inserter-throughput.stopwatch-help'}}, + stopwatch_command) + +local function stopwatch_results(player, entry) + local result = stopwatch.get_throughput(entry) + local precision = player.mod_settings['inserter-throughput-rounding-precision'].value + local pos = entry.entity_position + local message = {'', + {'inserter-throughput.stopwatch-finished', {'inserter-throughput.inserter-at', + entry.entity_name, pos.x, pos.y, entry.entity_surface}}, + '\n', + } + local n = #message + 1 + if not result.stable then + message[n] = {'inserter-throughput.stopwatch-warning-not-max'} + message[n + 1] = '\n' + n = n + 2 + end + message[n] = {'inserter-throughput.stopwatch-result', + number_to_string_with_precision(result.throughput, precision), + {'per-second-suffix'}, + result.items, + result.ticks, + } + player.print(message) +end + +-- EVENTS + +local function init() + if not global.player_data then + global.player_data = {} + end + -- player_data[player_index] = table + -- .text_id id of the rendered text + for _, player in pairs(game.players) do + init_toggle_button(player) + end +end + +local function on_player_joined_game(event) + -- event.player_index current player + init_toggle_button(game.get_player(event.player_index)) +end + +local function on_tick(event) + local watches = global.stopwatch + if not watches then + return + end + local tick = event.tick + local n = #watches + for i = n, 1, -1 do + local entry = watches[i] + local player = entry.player + local inserter = entry.inserter + local end_watch = false + if not player.valid then -- they're gone, just stop wasting time + end_watch = true + elseif not inserter.valid then -- inserter is gone + local pos = entry.entity_position + player.print{'inserter-throughput.stopwatch-interrupted', {'inserter-throughput.inserter-at', + entry.entity_name, pos.x, pos.y, entry.entity_surface}} + end_watch = true + elseif tick > entry.timeout_tick then + local pos = entry.entity_position + player.print{'inserter-throughput.stopwatch-timeout', {'inserter-throughput.inserter-at', + entry.entity_name, pos.x, pos.y, entry.entity_surface}} + end_watch = true + else + local finished, changed = stopwatch_tick(entry, tick) + if finished then + stopwatch_results(player, entry) + end_watch = true + elseif changed then + entry.timeout_tick = tick + stopwatch_timeout + end + end + if end_watch then + watches[i] = watches[n] + watches[n] = nil + n = n - 1 + end + end + if n == 0 then + global.stopwatch = nil + end +end + +function on_configuration_changed(event) + -- event.old_version old map version + -- event.new_version new map version + -- event.mod_changes[mod_name] only the ones that changed + -- .old_version old version of the mod + -- .new_version new version of the mod + -- event.mod_startup_settings_changed + -- event.migration_applied if mod prototype migration was executed + local versions = event.mod_changes['inserter-throughput'] + if versions and versions.old_version then + local env = { + init_toggle_button = init_toggle_button, + } + migrations(env, versions.old_version) + end +end + +script.on_event(defines.events.on_player_joined_game, on_player_joined_game) +script.on_event(defines.events.on_selected_entity_changed, on_entity_selected) +script.on_event(defines.events.on_runtime_mod_setting_changed, on_setting_changed) +script.on_event(defines.events.on_gui_click, on_gui_clicked) +script.on_event('inserter-throughput-toggle', on_toggle) +script.on_event(defines.events.on_tick, on_tick) +script.on_init(init) +script.on_configuration_changed(on_configuration_changed) diff --git a/inserter-throughput/data.lua b/inserter-throughput/data.lua new file mode 100644 index 00000000..13e81ce7 --- /dev/null +++ b/inserter-throughput/data.lua @@ -0,0 +1,35 @@ +local mod_gui = require('mod-gui') +local mod_button_style = mod_gui.button_style + +data:extend{ + { + type = 'sprite', + name = 'inserter-throughput-toggle-button', + filename = '__inserter-throughput__/graphics/toggle-button.png', + size = 64, + flags = {'gui-icon'}, + }, + { + type = 'custom-input', + name = 'inserter-throughput-toggle', + localized_name = 'inserter-throughput-toggle-keybind', + key_sequence = '', + } +} + +local styles = data.raw['gui-style'].default +local button_style = styles[mod_button_style] +local clicked_graphics = button_style.clicked_graphical_set +local default_graphics = button_style.default_graphical_set +while not (clicked_graphics and default_graphics) do + button_style = styles[button_style.parent] + clicked_graphics = clicked_graphics or button_style.clicked_graphical_set + default_graphics = default_graphics or button_style.default_graphical_set +end + +styles.inserter_throughput_pressed_button = { + type = 'button_style', + parent = mod_button_style, + default_graphical_set = clicked_graphics, + clicked_graphical_set = default_graphics +} diff --git a/inserter-throughput/graphics/toggle-button.png b/inserter-throughput/graphics/toggle-button.png new file mode 100644 index 00000000..919706fa Binary files /dev/null and b/inserter-throughput/graphics/toggle-button.png differ diff --git a/inserter-throughput/info.json b/inserter-throughput/info.json new file mode 100644 index 00000000..46c727e4 --- /dev/null +++ b/inserter-throughput/info.json @@ -0,0 +1,13 @@ +{ + "name": "inserter-throughput", + "version": "0.1.4", + "factorio_version": "1.1", + "title": "Inserter Throughput", + "author": "curiosity-a", + "contact": "", + "homepage": "", + "description": "Displays the throughput of the selected inserter (under ideal conditions).\nNow with a measuring tool for live testing.", + "dependencies": [ + "base >= 1.1.1" + ] +} diff --git a/inserter-throughput/lib.lua b/inserter-throughput/lib.lua new file mode 100644 index 00000000..cb7c7623 --- /dev/null +++ b/inserter-throughput/lib.lua @@ -0,0 +1,14 @@ +local function get_stack_size(inserter, prototype) + local stack_size = inserter.inserter_stack_size_override + if stack_size > 0 then + return stack_size + end + if prototype.stack then + return 1 + prototype.inserter_stack_size_bonus + inserter.force.stack_inserter_capacity_bonus + end + return 1 + prototype.inserter_stack_size_bonus + inserter.force.inserter_stack_size_bonus +end + +return { + get_stack_size = get_stack_size, +} diff --git a/inserter-throughput/locale/en/inserter-throughput.cfg b/inserter-throughput/locale/en/inserter-throughput.cfg new file mode 100644 index 00000000..03edfcf4 --- /dev/null +++ b/inserter-throughput/locale/en/inserter-throughput.cfg @@ -0,0 +1,23 @@ +[mod-setting-name] +inserter-throughput-enabled=Enabled +inserter-throughput-rounding-precision=Rounding precision +inserter-throughput-show-toggle=Show the toggle button + +[mod-setting-description] +inserter-throughput-enabled=Whether to display inserter throughput. +inserter-throughput-rounding-precision=Maximum amount of digits to display after the decimal point. Set to 0 to disable rounding. +inserter-throughput-show-toggle=Shows a button in the upper left corner, which indicates the state of the "Enabled" setting and can be used to change this setting without going into mod options. + +[controls] +inserter-throughput-toggle=Toggle display + +[inserter-throughput] +toggle-button-tooltip=Press to toggle inserter throughput display +stopwatch-command-description=- Starts a stopwatch to measure an inserter's throughput over time. +stopwatch-help=Hover over the inserter you want to measure when you submit this command. +inserter-at=[entity=__1__] at [gps=__2__,__3__,__4__] +stopwatch-interrupted=Can not complete measurement for __1__, the inserter no longer exists. +stopwatch-timeout=Can not complete measurement for __1__, the inserter is idle. +stopwatch-finished=Finished measurement for __1__ +stopwatch-result=Measured throughput: __1____2__ (__3__ items in __4__ ticks) +stopwatch-warning-not-max=Warning! The inserter has not been under full load. This result is not representative of the inserter's maximum throughput. diff --git a/inserter-throughput/migrations.lua b/inserter-throughput/migrations.lua new file mode 100644 index 00000000..75a1735d --- /dev/null +++ b/inserter-throughput/migrations.lua @@ -0,0 +1,35 @@ +local function version(version_string) + local major, minor, patch = string.match(version_string, '^(%d+)%.(%d+)%.(%d+)$') + return (major * 65536 + minor) * 65536 + patch +end + +local function entry(version_string, migration) + return { + version = version(version_string), + migration = migration, + } +end + +local migrations = { + entry("0.1.3", function(env) + for _, player in pairs(game.players) do + local old_button = player.gui.top['inserter-throughput-toggle'] + if old_button then + old_button.destroy() + end + env.init_toggle_button(player) + end + end), +} + +local function migrate(env, from) + from = version(from) + for i = 1, #migrations do + local entry = migrations[i] + if entry.version > from then + entry.migration(env) + end + end +end + +return migrate diff --git a/inserter-throughput/settings.lua b/inserter-throughput/settings.lua new file mode 100644 index 00000000..72418a67 --- /dev/null +++ b/inserter-throughput/settings.lua @@ -0,0 +1,21 @@ +data:extend{ + { + type = 'bool-setting', + name = 'inserter-throughput-enabled', + setting_type = 'runtime-per-user', + default_value = true + }, + { + type = 'bool-setting', + name = 'inserter-throughput-show-toggle', + setting_type = 'runtime-per-user', + default_value = true + }, + { + type = 'int-setting', + name = 'inserter-throughput-rounding-precision', + setting_type = 'runtime-per-user', + default_value = 2, + minimum_value = 0 + }, +} \ No newline at end of file diff --git a/inserter-throughput/stopwatch.lua b/inserter-throughput/stopwatch.lua new file mode 100644 index 00000000..08cd3f3b --- /dev/null +++ b/inserter-throughput/stopwatch.lua @@ -0,0 +1,195 @@ +local lib = require('lib') +local floor = math.floor + +local cycles = 6 + +local states = { + collecting = 1, + carrying = 2, + waiting_for_space = 3, + depositing = 4, + returning = 5, + waiting_for_items = 6, +} + +local beltlike = { + ['linked-belt'] = true, + ['loader-1x1'] = true, + ['loader'] = true, + ['splitter'] = true, + ['transport-belt'] = true, + ['underground-belt'] = true, +} + +local state_machine = { + [states.collecting] = function(watch) + local inserter = watch.inserter + local cur_pos = inserter.held_stack_position + local pick_pos = inserter.pickup_position + local pick_entity = inserter.pickup_target + if pick_entity and beltlike[pick_entity.type] then + if floor(cur_pos.x) ~= floor(pick_pos.x) or floor(cur_pos.y) ~= floor(pick_pos.y) then + return states.carrying + end + else -- must be container-like and therefore inserter won't move around while collecting + if cur_pos.x ~= pick_pos.x or cur_pos.y ~= pick_pos.y then + return states.carrying + end + end + return nil + end, + [states.carrying] = function(watch) + local inserter = watch.inserter + local cur_pos = inserter.held_stack_position + local drop_pos = inserter.drop_position + if cur_pos.x == drop_pos.x and cur_pos.y == drop_pos.y then + return states.waiting_for_space + end + local held_stack = inserter.held_stack + local item_count = held_stack.valid_for_read and held_stack.count or 0 + if item_count < watch.item_count then + return states.waiting_for_space + end + return nil + end, + [states.waiting_for_space] = function(watch) + local held_stack = watch.inserter.held_stack + local item_count = held_stack.valid_for_read and held_stack.count or 0 + if item_count < watch.item_count then + return states.depositing + end + return nil + end, + [states.depositing] = function(watch) + if not watch.inserter.held_stack.valid_for_read then + return states.returning + end + return nil + end, + [states.returning] = function(watch) + local inserter = watch.inserter + local cur_pos = inserter.held_stack_position + local pick_pos = inserter.pickup_position + if cur_pos.x == pick_pos.x and cur_pos.y == pick_pos.y then + return states.waiting_for_items + end + if inserter.held_stack.valid_for_read and watch.item_count == 0 then + return states.waiting_for_items + end + return nil + end, + [states.waiting_for_items] = function(watch) + if watch.inserter.held_stack.valid_for_read and watch.item_count == 0 then + return states.collecting + end + return nil + end, +} + +local function tick(watch, tick) + local new_state = watch.state + local ended = false + local changed = false + repeat + new_state = state_machine[new_state](watch) + if not new_state then + break + end + changed = true + watch.state = new_state + if new_state == states.collecting then + local cycle = watch.cycle + 1 + watch.cycle = cycle + if cycle > cycles then + ended = true + end + elseif new_state == states.waiting_for_space then + watch.counts[watch.cycle] = watch.item_count + end + watch.timestamps[new_state][watch.cycle] = tick + until ended + local held_stack = watch.inserter.held_stack + watch.item_count = held_stack.valid_for_read and held_stack.count or 0 + watch.hand_position = watch.inserter.held_stack_position + return ended +end + +local function new(inserter) + local timestamps = {} + for _, state in pairs(states) do + timestamps[state] = {} + end + local held_stack = inserter.held_stack + return { + inserter = inserter, + cycle = 0, + -- a hack to make the cycle start unambiguously when inserter picks up items + state = states.waiting_for_items, + item_count = held_stack.valid_for_read and held_stack.count or 0, + hand_position = inserter.held_stack_position, + timestamps = timestamps, + counts = {}, + } +end + +local function get_statistics(series) + local min, max, sum = series[1], series[1], series[1] + for i = 2, cycles do + if series[i] < min then + min = series[i] + elseif series[i] > max then + max = series[i] + end + sum = sum + series[i] + end + return min, max, sum +end + +local waiting_state = { + [states.waiting_for_space] = true, + [states.waiting_for_items] = true, +} + +local function result(watch) + if watch.cycle <= cycles then + error('Unable to get the result of an ongoing stopwatch.') + end + local stable = true + local timestamps = watch.timestamps + local total_time = 0 + for state, state_timestamps in pairs(timestamps) do + local diffs = {} + if timestamps[state + 1] then + for i = 1, cycles do + diffs[i] = timestamps[state + 1][i] - state_timestamps[i] + end + else + for i = 1, cycles do + diffs[i] = timestamps[states.collecting][i + 1] - state_timestamps[i] + end + end + local min, max, sum = get_statistics(diffs) + if min ~= max or waiting_state[state] and sum > 0 then + stable = false + end + total_time = total_time + sum + end + local hand_size = lib.get_stack_size(watch.inserter, watch.inserter.prototype) + local item_min, item_max, item_sum = get_statistics(watch.counts) + if item_min ~= item_max or item_sum ~= hand_size * cycles then + stable = false + end + -- 60 ticks per second + return { + throughput = (item_sum * 60 / total_time), + stable = stable, + items = item_sum, + ticks = total_time, + } +end + +return { + new = new, + tick = tick, + get_throughput = result, +} diff --git a/inserter-throughput/thumbnail.png b/inserter-throughput/thumbnail.png new file mode 100644 index 00000000..b1ecb64a Binary files /dev/null and b/inserter-throughput/thumbnail.png differ diff --git a/laser_fix_0.18.12/changelog.txt b/laser_fix/changelog.txt similarity index 100% rename from laser_fix_0.18.12/changelog.txt rename to laser_fix/changelog.txt diff --git a/laser_fix_0.18.12/data-updates.lua b/laser_fix/data-updates.lua similarity index 100% rename from laser_fix_0.18.12/data-updates.lua rename to laser_fix/data-updates.lua diff --git a/laser_fix_0.18.12/graphics/beam-body-color - Kopie.png b/laser_fix/graphics/beam-body-color - Kopie.png similarity index 100% rename from laser_fix_0.18.12/graphics/beam-body-color - Kopie.png rename to laser_fix/graphics/beam-body-color - Kopie.png diff --git a/laser_fix_0.18.12/graphics/beam-body-color.png b/laser_fix/graphics/beam-body-color.png similarity index 100% rename from laser_fix_0.18.12/graphics/beam-body-color.png rename to laser_fix/graphics/beam-body-color.png diff --git a/laser_fix_0.18.12/graphics/beam-body-light.png b/laser_fix/graphics/beam-body-light.png similarity index 100% rename from laser_fix_0.18.12/graphics/beam-body-light.png rename to laser_fix/graphics/beam-body-light.png diff --git a/laser_fix_0.18.12/graphics/beam-end-color.png b/laser_fix/graphics/beam-end-color.png similarity index 100% rename from laser_fix_0.18.12/graphics/beam-end-color.png rename to laser_fix/graphics/beam-end-color.png diff --git a/laser_fix_0.18.12/graphics/beam-end-light.png b/laser_fix/graphics/beam-end-light.png similarity index 100% rename from laser_fix_0.18.12/graphics/beam-end-light.png rename to laser_fix/graphics/beam-end-light.png diff --git a/laser_fix_0.18.12/graphics/hr-laser-body-light.png b/laser_fix/graphics/hr-laser-body-light.png similarity index 100% rename from laser_fix_0.18.12/graphics/hr-laser-body-light.png rename to laser_fix/graphics/hr-laser-body-light.png diff --git a/laser_fix_0.18.12/graphics/transparent32.png b/laser_fix/graphics/transparent32.png similarity index 100% rename from laser_fix_0.18.12/graphics/transparent32.png rename to laser_fix/graphics/transparent32.png diff --git a/laser_fix_0.18.12/info.json b/laser_fix/info.json similarity index 100% rename from laser_fix_0.18.12/info.json rename to laser_fix/info.json diff --git a/laser_fix_0.18.12/locale/en/en.cfg b/laser_fix/locale/en/en.cfg similarity index 100% rename from laser_fix_0.18.12/locale/en/en.cfg rename to laser_fix/locale/en/en.cfg diff --git a/laser_fix_0.18.12/settings.lua b/laser_fix/settings.lua similarity index 100% rename from laser_fix_0.18.12/settings.lua rename to laser_fix/settings.lua diff --git a/laser_fix_0.18.12/thumbnail.png b/laser_fix/thumbnail.png similarity index 100% rename from laser_fix_0.18.12/thumbnail.png rename to laser_fix/thumbnail.png diff --git a/liborio_1.1.01/changelog.txt b/liborio/changelog.txt similarity index 100% rename from liborio_1.1.01/changelog.txt rename to liborio/changelog.txt diff --git a/liborio_1.1.01/control.lua b/liborio/control.lua similarity index 100% rename from liborio_1.1.01/control.lua rename to liborio/control.lua diff --git a/liborio_1.1.01/data-final-fixes.lua b/liborio/data-final-fixes.lua similarity index 100% rename from liborio_1.1.01/data-final-fixes.lua rename to liborio/data-final-fixes.lua diff --git a/liborio_1.1.01/data-updates.lua b/liborio/data-updates.lua similarity index 100% rename from liborio_1.1.01/data-updates.lua rename to liborio/data-updates.lua diff --git a/liborio_1.1.01/data.lua b/liborio/data.lua similarity index 100% rename from liborio_1.1.01/data.lua rename to liborio/data.lua diff --git a/liborio_1.1.01/info.json b/liborio/info.json similarity index 100% rename from liborio_1.1.01/info.json rename to liborio/info.json diff --git a/liborio_1.1.01/local/en/locale.cfg b/liborio/local/en/locale.cfg similarity index 100% rename from liborio_1.1.01/local/en/locale.cfg rename to liborio/local/en/locale.cfg diff --git a/liborio_1.1.01/prototypes/scripts/defines.lua b/liborio/prototypes/scripts/defines.lua similarity index 100% rename from liborio_1.1.01/prototypes/scripts/defines.lua rename to liborio/prototypes/scripts/defines.lua diff --git a/liborio_1.1.01/prototypes/scripts/sharedutil.lua b/liborio/prototypes/scripts/sharedutil.lua similarity index 100% rename from liborio_1.1.01/prototypes/scripts/sharedutil.lua rename to liborio/prototypes/scripts/sharedutil.lua diff --git a/liborio_1.1.01/prototypes/scripts/util.lua b/liborio/prototypes/scripts/util.lua similarity index 100% rename from liborio_1.1.01/prototypes/scripts/util.lua rename to liborio/prototypes/scripts/util.lua diff --git a/liborio_1.1.01/prototypes/scripts/utilcontrol.lua b/liborio/prototypes/scripts/utilcontrol.lua similarity index 100% rename from liborio_1.1.01/prototypes/scripts/utilcontrol.lua rename to liborio/prototypes/scripts/utilcontrol.lua diff --git a/liborio_1.1.01/prototypes/scripts/utildata.lua b/liborio/prototypes/scripts/utildata.lua similarity index 100% rename from liborio_1.1.01/prototypes/scripts/utildata.lua rename to liborio/prototypes/scripts/utildata.lua diff --git a/liborio_1.1.01/thumbnail.png b/liborio/thumbnail.png similarity index 100% rename from liborio_1.1.01/thumbnail.png rename to liborio/thumbnail.png diff --git a/ltn-cleanup_1.0.17/changelog.txt b/ltn-cleanup/changelog.txt similarity index 100% rename from ltn-cleanup_1.0.17/changelog.txt rename to ltn-cleanup/changelog.txt diff --git a/ltn-cleanup_1.0.17/control.lua b/ltn-cleanup/control.lua similarity index 100% rename from ltn-cleanup_1.0.17/control.lua rename to ltn-cleanup/control.lua diff --git a/ltn-cleanup_1.0.17/data.lua b/ltn-cleanup/data.lua similarity index 100% rename from ltn-cleanup_1.0.17/data.lua rename to ltn-cleanup/data.lua diff --git a/ltn-cleanup_1.0.17/graphics/signals/signal_cleanup.png b/ltn-cleanup/graphics/signals/signal_cleanup.png similarity index 100% rename from ltn-cleanup_1.0.17/graphics/signals/signal_cleanup.png rename to ltn-cleanup/graphics/signals/signal_cleanup.png diff --git a/ltn-cleanup_1.0.17/graphics/signals/signal_item_cleanup.png b/ltn-cleanup/graphics/signals/signal_item_cleanup.png similarity index 100% rename from ltn-cleanup_1.0.17/graphics/signals/signal_item_cleanup.png rename to ltn-cleanup/graphics/signals/signal_item_cleanup.png diff --git a/ltn-cleanup_1.0.17/info.json b/ltn-cleanup/info.json similarity index 100% rename from ltn-cleanup_1.0.17/info.json rename to ltn-cleanup/info.json diff --git a/ltn-cleanup_1.0.17/locale/en/base.cfg b/ltn-cleanup/locale/en/base.cfg similarity index 100% rename from ltn-cleanup_1.0.17/locale/en/base.cfg rename to ltn-cleanup/locale/en/base.cfg diff --git a/ltn-cleanup_1.0.17/migrations/1.0.8-1.0.9_last_ltn_update.lua b/ltn-cleanup/migrations/1.0.8-1.0.9_last_ltn_update.lua similarity index 100% rename from ltn-cleanup_1.0.17/migrations/1.0.8-1.0.9_last_ltn_update.lua rename to ltn-cleanup/migrations/1.0.8-1.0.9_last_ltn_update.lua diff --git a/ltn-cleanup_1.0.17/prototypes/signals.lua b/ltn-cleanup/prototypes/signals.lua similarity index 100% rename from ltn-cleanup_1.0.17/prototypes/signals.lua rename to ltn-cleanup/prototypes/signals.lua diff --git a/ltn-cleanup_1.0.17/scripts/config.lua b/ltn-cleanup/scripts/config.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/config.lua rename to ltn-cleanup/scripts/config.lua diff --git a/ltn-cleanup_1.0.17/scripts/format.lua b/ltn-cleanup/scripts/format.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/format.lua rename to ltn-cleanup/scripts/format.lua diff --git a/ltn-cleanup_1.0.17/scripts/handler.lua b/ltn-cleanup/scripts/handler.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/handler.lua rename to ltn-cleanup/scripts/handler.lua diff --git a/ltn-cleanup_1.0.17/scripts/ltn.lua b/ltn-cleanup/scripts/ltn.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/ltn.lua rename to ltn-cleanup/scripts/ltn.lua diff --git a/ltn-cleanup_1.0.17/scripts/scheduler.lua b/ltn-cleanup/scripts/scheduler.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/scheduler.lua rename to ltn-cleanup/scripts/scheduler.lua diff --git a/ltn-cleanup_1.0.17/scripts/train_stops.lua b/ltn-cleanup/scripts/train_stops.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/train_stops.lua rename to ltn-cleanup/scripts/train_stops.lua diff --git a/ltn-cleanup_1.0.17/scripts/trains.lua b/ltn-cleanup/scripts/trains.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/trains.lua rename to ltn-cleanup/scripts/trains.lua diff --git a/ltn-cleanup_1.0.17/scripts/utils.lua b/ltn-cleanup/scripts/utils.lua similarity index 100% rename from ltn-cleanup_1.0.17/scripts/utils.lua rename to ltn-cleanup/scripts/utils.lua diff --git a/ltn-cleanup_1.0.17/settings.lua b/ltn-cleanup/settings.lua similarity index 100% rename from ltn-cleanup_1.0.17/settings.lua rename to ltn-cleanup/settings.lua diff --git a/ltn-cleanup_1.0.17/thumbnail.png b/ltn-cleanup/thumbnail.png similarity index 100% rename from ltn-cleanup_1.0.17/thumbnail.png rename to ltn-cleanup/thumbnail.png diff --git a/m_WhereIsMyBody_2.7.1/changelog.txt b/m_WhereIsMyBody/changelog.txt similarity index 100% rename from m_WhereIsMyBody_2.7.1/changelog.txt rename to m_WhereIsMyBody/changelog.txt diff --git a/m_WhereIsMyBody_2.7.1/control.lua b/m_WhereIsMyBody/control.lua similarity index 100% rename from m_WhereIsMyBody_2.7.1/control.lua rename to m_WhereIsMyBody/control.lua diff --git a/m_WhereIsMyBody_2.7.2/info.json b/m_WhereIsMyBody/info.json similarity index 100% rename from m_WhereIsMyBody_2.7.2/info.json rename to m_WhereIsMyBody/info.json diff --git a/m_WhereIsMyBody_2.7.1/locale/en/WhereIsMyBody.cfg b/m_WhereIsMyBody/locale/en/WhereIsMyBody.cfg similarity index 100% rename from m_WhereIsMyBody_2.7.1/locale/en/WhereIsMyBody.cfg rename to m_WhereIsMyBody/locale/en/WhereIsMyBody.cfg diff --git a/m_WhereIsMyBody_2.7.1/locale/ru/WhereIsMyBody.cfg b/m_WhereIsMyBody/locale/ru/WhereIsMyBody.cfg similarity index 100% rename from m_WhereIsMyBody_2.7.1/locale/ru/WhereIsMyBody.cfg rename to m_WhereIsMyBody/locale/ru/WhereIsMyBody.cfg diff --git a/m_WhereIsMyBody_2.7.1/models/WhereIsMyBody.lua b/m_WhereIsMyBody/models/WhereIsMyBody.lua similarity index 100% rename from m_WhereIsMyBody_2.7.1/models/WhereIsMyBody.lua rename to m_WhereIsMyBody/models/WhereIsMyBody.lua diff --git a/m_WhereIsMyBody_2.7.1/settings.lua b/m_WhereIsMyBody/settings.lua similarity index 100% rename from m_WhereIsMyBody_2.7.1/settings.lua rename to m_WhereIsMyBody/settings.lua diff --git a/m_WhereIsMyBody_2.7.1/thumbnail.png b/m_WhereIsMyBody/thumbnail.png similarity index 100% rename from m_WhereIsMyBody_2.7.1/thumbnail.png rename to m_WhereIsMyBody/thumbnail.png diff --git a/m_WhereIsMyBody_2.7.1/info.json b/m_WhereIsMyBody_2.7.1/info.json deleted file mode 100644 index 1dc06731..00000000 --- a/m_WhereIsMyBody_2.7.1/info.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "m_WhereIsMyBody", - "version": "2.7.1", - "title": "Where Is My Body", - "description": "see locale/*", - "author": "ZwerOxotnik", - "contact": "zweroxotnik@gmail.com, Discord:ZwerOxotnik#7117", - "homepage": "reddit.com/r/ZwerOxotnik/", - "license": "MIT", - "dependencies": [ - "? zk-lib >= 0.10.0", - "? gvv", - "base" - ], - "factorio_version": "1.1" -} \ No newline at end of file diff --git a/m_WhereIsMyBody_2.7.2/changelog.txt b/m_WhereIsMyBody_2.7.2/changelog.txt deleted file mode 100644 index b25ced03..00000000 --- a/m_WhereIsMyBody_2.7.2/changelog.txt +++ /dev/null @@ -1,184 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 2.7.2 -Date: 2023-02-12 - Locale: - - Updated Ukrainian translation (thanks to @Met_en_Bouldry on crowdin) - - Translations: https://crowdin.com/project/factorio-mods-localization (thank you for contributions, I really appreciate it) ---------------------------------------------------------------------------------------------------- -Version: 2.7.1 -Date: 2022-11-27 - Bugfixes: - - Fixed crush when a player coprse was removed before player respawn ---------------------------------------------------------------------------------------------------- -Version: 2.7.0 -Date: 2022-10-17 - Changes: - - Improved support of mods and scenarios, it should show properly with https://mods.factorio.com/mod/jetpack etc. ---------------------------------------------------------------------------------------------------- -Version: 2.6.2 -Date: 2022-10-17 - Locale: - - Added German translation (thanks to @PatrickBlack on crowdin) - - Translations: https://crowdin.com/project/factorio-mods-localization (thank you for contributions, I really appreciate it) ---------------------------------------------------------------------------------------------------- -Version: 2.6.1 -Date: 2022-10-03 - Bugfixes: - - Fixed a crush for some rare case(s). ---------------------------------------------------------------------------------------------------- -Version: 2.6.0 -Date: 2022-06-21 - Features: - - Players can remove their lines to bodies by removing their chart tags - Changes: - - Changed chart tags - Bugfixes: - - Fixed purple lines in some cases ---------------------------------------------------------------------------------------------------- -Version: 2.5.0 -Date: 2022-06-21 - Features: - - Players can auto-create chart tags after death (the setting is disabled by default for this version, I don't recommend it yet. It'll be improved in the next versions) ---------------------------------------------------------------------------------------------------- -Version: 2.4.0 -Date: 2022-06-21 - Features: - - You can stop creation of empty bodies via map setting (the setting is disabled by default) - - Added purple line for important bodies and for a selected body - Changes: - - New icon - - Small improvements with gps - - By clicking gps coordinates it ignores empty bodies ---------------------------------------------------------------------------------------------------- -Version: 2.3.1 -Date: 2022-06-20 - Changes: - - Ignores players with cheat mode on now ---------------------------------------------------------------------------------------------------- -Version: 2.3.0 -Date: 2022-06-20 - Features: - - Players can track any body by pressing gps message after death ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 2022-06-20 - Features: - - Added new setting to ignore bodies with less N items ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 2022-06-20 - Features: - - Added customizable line width for players via settings - Changes: - - Doesn't create lines for empty bodies - - Improved stability - - Improved settings slightly - - Changed behavior slightly (it won't remember your body in the editor) - - Added integration with http://mods.factorio.com/mod/gvv - Bugfixes: - - Fixed very rare visual bug with lines - - Fixed setting values ---------------------------------------------------------------------------------------------------- -Version: 2.0.10 -Date: 2022-06-18 - Changes: - - Improved performance - - Changed stability (I can't say for sure how it's better etc) ---------------------------------------------------------------------------------------------------- -Version: 2.0.9 -Date: 2022-06-18 - Bugfixes: - - Fixed colors ---------------------------------------------------------------------------------------------------- -Version: 2.0.8 -Date: 2022-06-18 - Bugfixes: - - Fixed crush because of weird data (https://mods.factorio.com/mod/m_WhereIsMyBody/discussion/62adaa7da038e3f35eafa9c4) - Changes: - - Slightly refactored - - Slightly improved stability, performance ---------------------------------------------------------------------------------------------------- -Version: 2.0.7 -Date: 2022-01-23 - Locale: - - Added Ukrainian translation (thanks to @Met_en_Bouldry on crowdin) - - Translations: https://crowdin.com/project/factorio-mods-localization (thank you for contributions, I really appreciate it) ---------------------------------------------------------------------------------------------------- -Version: 2.0.6 -Date: 2021-12-22 - Changes: - - Changed event handler (slightly better performance) ---------------------------------------------------------------------------------------------------- -Version: 2.0.5 -Date: 2021-10-24 - Locale: - - Added Brazilian Portuguese translation (thanks to @BM123499 (Bruno Melo) on crowdin) - - Translations: https://crowdin.com/project/factorio-mods-localization (thank you for contributions, I really appreciate it) ---------------------------------------------------------------------------------------------------- -Version: 2.0.4 -Date: 2021-10-17 - Locale: - - Added French translation (thanks to @Drilzxx_ (KΓ©vin) on crowdin) - - Translations: https://crowdin.com/project/factorio-mods-localization (thank you for contributions, I really appreciate it) ---------------------------------------------------------------------------------------------------- -Version: 2.0.3 -Date: 2021-10-08 - Changes: - - Destroying lines during on_player_left_game event - Notes: - - Updated by ZwerOxotnik ---------------------------------------------------------------------------------------------------- -Version: 2.0.2 -Date: 2021-10-08 - Changes: - - Slightly changed on_player_respawned event - Notes: - - Updated by ZwerOxotnik ---------------------------------------------------------------------------------------------------- -Version: 2.0.1 -Date: 2021-10-08 - Changes: - - Fixed typo - Notes: - - Updated by ZwerOxotnik ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 2021-10-08 - Changes: - - Optimized - - Refactored - - Changed color and rendering - Notes: - - Original source ( https://mods.factorio.com/download/WhereIsMyBody/5fbce1f4c23c61e3df5faafb ) - - Updated by ZwerOxotnik ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2020-11-24 - Changes: - - Update to 1.1 ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2020-11-24 - Changes: - - Update to 1.0 ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 -Date: 2020-05-15 - Changes: - - Typo ---------------------------------------------------------------------------------------------------- -Version: 0.1.2 -Date: 2020-05-14 - Changes: - - Added a bunch of missing events - - Line draw size/color based on distance to corpse (when there's multiple) ---------------------------------------------------------------------------------------------------- -Version: 0.1.1 -Date: 2020-01-27 - Changes: - - Update to Factorio 0.18 ---------------------------------------------------------------------------------------------------- -Version: 0.0.1 -Date: 2019-07-14 - Changes: - - First release \ No newline at end of file diff --git a/m_WhereIsMyBody_2.7.2/control.lua b/m_WhereIsMyBody_2.7.2/control.lua deleted file mode 100644 index 19757e39..00000000 --- a/m_WhereIsMyBody_2.7.2/control.lua +++ /dev/null @@ -1,7 +0,0 @@ -if script.active_mods["zk-lib"] then - require("__zk-lib__/static-libs/lualibs/event_handler_vZO.lua").add_lib(require("models/WhereIsMyBody")) -else - require("event_handler").add_lib(require("models/WhereIsMyBody")) -end - -if script.active_mods["gvv"] then require("__gvv__.gvv")() end diff --git a/m_WhereIsMyBody_2.7.2/locale/en/WhereIsMyBody.cfg b/m_WhereIsMyBody_2.7.2/locale/en/WhereIsMyBody.cfg deleted file mode 100644 index f332d5dc..00000000 --- a/m_WhereIsMyBody_2.7.2/locale/en/WhereIsMyBody.cfg +++ /dev/null @@ -1,14 +0,0 @@ -# Check https://wiki.factorio.com/Tutorial:Localisation - -[mod-name] -m_WhereIsMyBody=Where Is My Body -[mod-description] -m_WhereIsMyBody=This mod draw lines to your corpses. The mod is optimized and customizable./n/nInitially, "darkfrei" made such mod. This mod fully rewritten from scratch with new features. - -[mod-setting-name] -WHMB_update_tick=Update tick -WHMB_create_lines=Create lines -WHMB_line_width=Line width -WHMB_ignore_if_less_n_items=Ignore your body if it has <=N items -WHMB_delete_empty_bodies=Delete empty bodies -WHMB_create_chart_tags_after_death=Create a chart tag after death diff --git a/m_WhereIsMyBody_2.7.2/locale/ru/WhereIsMyBody.cfg b/m_WhereIsMyBody_2.7.2/locale/ru/WhereIsMyBody.cfg deleted file mode 100644 index bd0fd1e6..00000000 --- a/m_WhereIsMyBody_2.7.2/locale/ru/WhereIsMyBody.cfg +++ /dev/null @@ -1,10 +0,0 @@ - -[mod-name] -m_WhereIsMyBody=Π“Π΄Π΅ ΠΌΠΎΠ΅ Ρ‚Π΅Π»ΠΎ -[mod-description] - -[mod-setting-name] -WHMB_update_tick=Π’ΠΈΠΊ обновлСния -WHMB_create_lines=Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ - - diff --git a/m_WhereIsMyBody_2.7.2/models/WhereIsMyBody.lua b/m_WhereIsMyBody_2.7.2/models/WhereIsMyBody.lua deleted file mode 100644 index e159be82..00000000 --- a/m_WhereIsMyBody_2.7.2/models/WhereIsMyBody.lua +++ /dev/null @@ -1,663 +0,0 @@ - ----@class WhereIsMyBody : module -local M = {} - - ---#region Global data ----@type table # [render id, corpse entity, tag number?] -local players_bodies ----@type table # [render id, corpse entity, tag number?] -local inactive_players_bodies ----@type table # {render id, corpse entity, tag number?} -local important_players_body ----@type table # {render id, corpse entity, tag number?} -local inactive_important_players_body ----@type table -local corpses_queue ---#endregion - - ---#region Constants -local draw_line = rendering.draw_line -local set_color = rendering.set_color -local rendering_destroy = rendering.destroy -local is_render_valid = rendering.is_valid -local remove = table.remove ---#endregion - - ---#region Settings -local update_tick = settings.global["WHMB_update_tick"].value ---#endregion - - ---#region Utils - -local function remove_lines_event(event) - local player_index = event.player_index - local player_bodies = players_bodies[player_index] - if player_bodies ~= nil then - for i=1, #player_bodies do - local body_data = player_bodies[i] - rendering_destroy(body_data[1]) - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - end - end - players_bodies[player_index] = nil - - player_bodies = inactive_players_bodies[player_index] - if player_bodies ~= nil then - for i=1, #player_bodies do - local body_data = player_bodies[i] - rendering_destroy(body_data[1]) - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - end - end - inactive_players_bodies[player_index] = nil - - local body_data = important_players_body[player_index] - if body_data then - rendering_destroy(body_data[1]) - important_players_body[player_index] = nil - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - end - body_data = inactive_important_players_body[player_index] - if body_data then - rendering_destroy(body_data[1]) - inactive_important_players_body[player_index] = nil - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - end -end - -local color_data = {0, 0, 0, 0} -- orange -local min_color_data = {0.19, 0.8 * 0.19, 0, 0.19} -- orange -local max_color_data = {0.9, 0.8 * 0.9, 0, 0.9} -- orange ----@param character table #LuaEntity ----@param id integer ----@param corpse table #LuaEntity -local function update_color(character, id, corpse) - local start = character.position - local stop = corpse.position - local xdiff = start.x - stop.x - local ydiff = start.y - stop.y - local distance = (xdiff * xdiff + ydiff * ydiff)^0.5 - - if distance > 450 then - set_color(id, min_color_data) - elseif distance < 95 then - set_color(id, max_color_data) - else - local r = 1 - distance / 500 - color_data[1] = r - color_data[2] = 0.8 * r - color_data[4] = r - set_color(id, color_data) - end -end - --- Perhaps, I should change it -local purple_color_data = {171 / 255, 64 / 255, 1, 0.8} -local max_purple_color_data = {171 / 255, 64 / 255, 1, 0.8} -local min_purple_color_data = {(171 / 255) * 0.15, (64 / 255) * 0.15, 0.15, 0.8} ----@param character table #LuaEntity ----@param id integer ----@param corpse table #LuaEntity -local function update_purple_color(character, id, corpse) - local start = character.position - local stop = corpse.position - local xdiff = start.x - stop.x - local ydiff = start.y - stop.y - local distance = (xdiff * xdiff + ydiff * ydiff)^0.5 - - if distance > 450 then - set_color(id, min_purple_color_data) - elseif distance < 166 then - set_color(id, max_purple_color_data) - else - local r = (1 - distance / 500) * 1.5 - r = (r > 1 and 1) or r - purple_color_data[1] = (171 / 255) * r - purple_color_data[2] = (64 / 255) * r - purple_color_data[3] = r - set_color(id, purple_color_data) - end -end - -local orange_color = {1, 0.8, 0, 0.9} -local purple_color = {171 / 255, 64 / 255, 1, 0.8} -local line_data = { - color = orange_color, - width = 0.2, - from = nil, - surface = nil, - players = {}, - draw_on_ground = true, - only_in_alt_mode = true -} -- It's a bit messy, so be careful about desyncs ----@param player LuaEntity ----@param player_index number -local function draw_all_lines(player, player_index, event) - local character = player.character - if not (character and character.valid) then - remove_lines_event(event) - return - end - - local player_bodies - local important_body - local is_entity_info_visible = player.game_view_settings.show_entity_info - if is_entity_info_visible then - player_bodies = players_bodies[player_index] - important_body = important_players_body[player_index] - else - player_bodies = inactive_players_bodies[player_index] - important_body = inactive_important_players_body[player_index] - end - - line_data.surface = character.surface - line_data.from = character - line_data.width = player.mod_settings["WHMB_line_width"].value - line_data.players = {player_index} - if player_bodies then - -- There's a chance that some lines still exist due to LuaPlayer.ticks_to_respawn - for i=1, #player_bodies do - -- is it really safe? - rendering_destroy(player_bodies[i][1]) - end - - line_data.color = orange_color - for i=#player_bodies, 1, -1 do - local body_data = player_bodies[i] - local entity = body_data[2] - if entity.valid then - line_data.to = entity - body_data[1] = draw_line(line_data) - else - remove(player_bodies, i) - end - end - end - - if important_body then - rendering_destroy(important_body[1]) - line_data.color = purple_color - local entity = important_body[2] - if entity.valid then - line_data.to = entity - important_body[1] = draw_line(line_data) - else - if is_entity_info_visible then - important_players_body[player_index] = nil - else - inactive_important_players_body[player_index] = nil - end - end - end -end - ----@param player table #LuaPlayer ----@param corpse table #LuaEntity ----@param player_index number ----@param is_forced? boolean -local function draw_new_line_to_body(player, corpse, player_index, is_forced) - local character = player.character - if not (character and character.valid) then return end - if not (corpse and corpse.valid) then return end - local surface = character.surface - if surface ~= corpse.surface then return end - if not is_forced then - local items_count = table_size(corpse.get_inventory(defines.inventory.character_corpse).get_contents()) - if items_count <= player.mod_settings["WHMB_ignore_if_less_n_items"].value then return end - end - - line_data.surface = surface - line_data.from = character - line_data.to = corpse - line_data.width = player.mod_settings["WHMB_line_width"].value - line_data.players = {player_index} - - local chart_tag - if player.mod_settings["WHMB_create_chart_tags_after_death"].value then - local icon = {type="virtual", name="signal-info"} - chart_tag = player.force.add_chart_tag( - surface, - {position=corpse.position, text='[entity=character-corpse]' .. player.name, icon=icon} - ) - end - - corpses_queue[player_index] = nil -- maybe it can be buggy - - local player_bodies - local is_entity_info_visible = player.game_view_settings.show_entity_info - if is_entity_info_visible then - player_bodies = players_bodies[player_index] - if player_bodies == nil then - if important_players_body[player_index] then - players_bodies[player_index] = players_bodies[player_index] or {} - player_bodies = players_bodies[player_index] - else - line_data.color = purple_color - local id = draw_line(line_data) - important_players_body[player_index] = {id, corpse, chart_tag} - return - end - end - else - player_bodies = inactive_players_bodies[player_index] - if player_bodies == nil then - if inactive_important_players_body[player_index] then - inactive_players_bodies[player_index] = inactive_players_bodies[player_index] or {} - player_bodies = inactive_players_bodies[player_index] - else - line_data.color = purple_color - local id = draw_line(line_data) - inactive_important_players_body[player_index] = {id, corpse, chart_tag} - return - end - end - end - - line_data.color = orange_color - local id = draw_line(line_data) - player_bodies[#player_bodies+1] = {id, corpse, chart_tag} -end - ----@param player table #LuaPlayer ----@param corpse table #LuaEntity ----@param player_index number ----@param is_forced? boolean -local function draw_important_line_to_body(player, corpse, player_index, is_forced) - local character = player.character - if not (character and character.valid) then return end - if not (corpse and corpse.valid) then return end - local surface = character.surface - if surface ~= corpse.surface then return end - if not is_forced then - local items_count = table_size(corpse.get_inventory(defines.inventory.character_corpse).get_contents()) - if items_count <= player.mod_settings["WHMB_ignore_if_less_n_items"].value then return end - end - - line_data.surface = surface - line_data.from = character - line_data.to = corpse - line_data.width = player.mod_settings["WHMB_line_width"].value - line_data.players = {player_index} - - corpses_queue[player_index] = nil -- maybe it can be buggy - - line_data.color = purple_color - local id = draw_line(line_data) - local is_entity_info_visible = player.game_view_settings.show_entity_info - if is_entity_info_visible then - important_players_body[player_index] = {id, corpse} - else - inactive_important_players_body[player_index] = {id, corpse} - end -end - ---#endregion - ---#region Functions of events - -local function check_render() - local get_player = game.get_player - for player_index, all_bodies_data in pairs(players_bodies) do - local player = get_player(player_index) - if player and player.valid then - local character = player.character - if character and character.valid then - for i=#all_bodies_data, 1, -1 do - local body_data = all_bodies_data[i] - local corpse = body_data[2] - if corpse.valid then - local id = body_data[1] - if is_render_valid(id) then - update_color(character, id, corpse) - else - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - remove(all_bodies_data, i) - draw_new_line_to_body(player, corpse, player_index, true) - end - else - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - remove(all_bodies_data, i) - end - end - if #all_bodies_data == 0 then - players_bodies[player_index] = nil - end - end - end - end - - for player_index, body_data in pairs(important_players_body) do - local player = get_player(player_index) - if player and player.valid then - local character = player.character - if character and character.valid then - local corpse = body_data[2] - if corpse.valid then - local id = body_data[1] - if is_render_valid(id) then - update_purple_color(character, id, corpse) - else - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - important_players_body[player_index] = nil - draw_important_line_to_body(player, corpse, player_index, true) - end - else - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid then - chart_tag.destroy() - end - important_players_body[player_index] = nil - end - end - end - end -end - -local function on_player_toggled_alt_mode(event) - local player_index = event.player_index - if event.alt_mode then - players_bodies[player_index] = inactive_players_bodies[player_index] - inactive_players_bodies[player_index] = nil - important_players_body[player_index] = inactive_important_players_body[player_index] - inactive_important_players_body[player_index] = nil - else - inactive_players_bodies[player_index] = players_bodies[player_index] - players_bodies[player_index] = nil - inactive_important_players_body[player_index] = important_players_body[player_index] - important_players_body[player_index] = nil - end -end - -local function on_pre_player_removed(event) - local player_index = event.player_index - players_bodies[player_index] = nil - inactive_players_bodies[player_index] = nil - important_players_body[player_index] = nil - inactive_important_players_body[player_index] = nil - corpses_queue[player_index] = nil -end - -local function on_console_command(event) - if event.command ~= "editor" then return end - remove_lines_event(event) -end - -local function on_player_clicked_gps_tag(event) - local player_index = event.player_index - local player = game.get_player(player_index) - if not (player and player.valid) then return end - local character = player.character - if not (character and character.valid) then return end - local is_entity_info_visible = player.game_view_settings.show_entity_info - if is_entity_info_visible == false then return end - local surface = game.get_surface(event.surface) - if not (surface and surface.valid) then return end - - local player_bodies = players_bodies[player_index] - local important_player_body = important_players_body[player_index] - local pos = event.position - if important_player_body then - local x = pos.x - local y = pos.y - local corpse = important_player_body[2] - if corpse.valid then - if corpse.surface == surface then - local pos2 = corpse.position - local xdiff = x - pos2.x - local ydiff = y - pos2.y - local distance = (xdiff * xdiff + ydiff * ydiff)^0.5 - if distance <= 2 then - return - end - end - else - important_players_body[player_index] = nil - end - end - - if player_bodies then - local x = pos.x - local y = pos.y - for i=#player_bodies, 1, -1 do - local body_data = player_bodies[i] - local corpse = body_data[2] - if corpse.valid then - if corpse.surface == surface then - local pos2 = corpse.position - local xdiff = x - pos2.x - local ydiff = y - pos2.y - local distance = (xdiff * xdiff + ydiff * ydiff)^0.5 - if distance <= 2 then - rendering_destroy(body_data[1]) - remove(player_bodies, i) - local important_body_data = important_player_body - draw_important_line_to_body(player, corpse, player_index, true) - if important_body_data then - rendering_destroy(important_body_data[1]) - local entity = important_body_data[2] - if entity.valid then - draw_new_line_to_body(player, entity, player_index, true) - end - end - return - end - end - else - remove(player_bodies, i) - end - end - end - - if player.cheat_mode then return end - - local filter = {type="character-corpse", position=pos, radius=2} - local corpses = surface.find_entities_filtered(filter) - for i=1, #corpses do - local corpse = corpses[i] - if corpse.valid then - local items_count = table_size(corpse.get_inventory(defines.inventory.character_corpse).get_contents()) - if items_count > 0 then - draw_new_line_to_body(player, corpse, player_index, true) - return - end - end - end -end - -local function on_player_respawned(event) - local player_index = event.player_index - local player = game.get_player(player_index) - if not (player and player.valid) then return end - if player.cheat_mode then return end - - draw_all_lines(player, player_index, event) - - local corpse = corpses_queue[player_index] - corpses_queue[player_index] = nil - if not (corpse and corpse.valid) then return end - if settings.global["WHMB_delete_empty_bodies"].value then - local items_count = table_size(corpse.get_inventory(defines.inventory.character_corpse).get_contents()) - if items_count == 0 then - corpse.destroy({raise_destroy=true}) - return - end - end - draw_new_line_to_body(player, corpse, player_index) -end - -local function on_player_died(event) - local player_index = event.player_index - local player = game.get_player(player_index) - if not (player and player.valid) then return end - if player.cheat_mode then return end - if player.mod_settings["WHMB_create_lines"].value == false then return end - local surface = player.surface - local position = player.position - local corpse = surface.find_entity("character-corpse", position) - if not (corpse and corpse.valid) then return end - - corpses_queue[player_index] = corpse -end - ---TODO: check tag content, prohibit deletion of chart tags if the ones belongs to another player -local function on_chart_tag_removed(event) - local player_index = event.player_index - if player_index == nil then return end - local player = game.get_player(player_index) - if not (player and player.valid) then return end - local tag = event.tag - if tag.valid == false then return end - - local player_bodies - local important_body - local is_entity_info_visible = player.game_view_settings.show_entity_info - if is_entity_info_visible then - player_bodies = players_bodies[player_index] - important_body = important_players_body[player_index] - else - player_bodies = inactive_players_bodies[player_index] - important_body = inactive_important_players_body[player_index] - end - - local tag_number = tag.tag_number - local filter = {type="character-corpse", position=tag.position, radius=2} - local corpses = player.surface.find_entities_filtered(filter) - for i=1, #corpses do - local corpse = corpses[i] - if corpse.valid then - if player_bodies ~= nil then - for j=1, #player_bodies do - local body_data = player_bodies[j] - local chart_tag = body_data[3] - if chart_tag and chart_tag.valid and chart_tag.tag_number == tag_number then - rendering_destroy(body_data[1]) - remove(player_bodies, j) - if #player_bodies == 0 then - if is_entity_info_visible then - players_bodies[player_index] = nil - else - inactive_players_bodies[player_index] = nil - end - end - return - end - end - end - if important_body then - local chart_tag = important_body[3] - if chart_tag and chart_tag.valid and chart_tag.tag_number == tag_number then - rendering_destroy(important_body[1]) - if is_entity_info_visible then - important_players_body[player_index] = nil - else - inactive_important_players_body[player_index] = nil - end - return - end - end - end - end -end - -local function on_runtime_mod_setting_changed(event) - if event.setting == "WHMB_update_tick" then - local value = settings.global[event.setting].value - script.on_nth_tick(update_tick, nil) - update_tick = value - script.on_nth_tick(value, check_render) - end -end - ---#endregion - - ---#region Pre-game stage - -local function link_data() - players_bodies = global.players_bodies - inactive_players_bodies = global.inactive_players_bodies - important_players_body = global.important_players_body - inactive_important_players_body = global.inactive_important_players_body - corpses_queue = global.corpses_queue -end - -local function update_global_data() - global.players_bodies = {} - global.inactive_players_bodies = {} - global.important_players_body = {} - global.inactive_important_players_body = {} - global.corpses_queue = global.corpses_queue or {} - - link_data() - - for player_index, corpse in pairs(corpses_queue) do - if corpse.valid == false then - corpses_queue[player_index] = nil - end - end -end - - -M.on_init = update_global_data -M.on_configuration_changed = function(event) - local mod_changes = event.mod_changes["m_WhereIsMyBody"] - if not (mod_changes and mod_changes.old_version) then return end - - update_global_data() - global.inactive_players_data = nil -- old data - global.players = nil -- old data -end -M.on_load = link_data - ---#endregion - - -M.events = { - -- [defines.events.on_game_created_from_scenario] = on_game_created_from_scenario, - -- [defines.events.on_pre_player_mined_item] = on_pre_player_mined_item, - -- [defines.events.on_character_corpse_expired] = on_character_corpse_expired, - -- [defines.events.on_pre_surface_cleared] = on_pre_surface_cleared, - -- [defines.events.on_pre_surface_deleted] = on_pre_surface_deleted, - [defines.events.on_runtime_mod_setting_changed] = on_runtime_mod_setting_changed, - [defines.events.on_player_respawned] = on_player_respawned, - [defines.events.on_pre_player_removed] = on_pre_player_removed, - [defines.events.on_player_died] = on_player_died, - [defines.events.on_player_left_game] = remove_lines_event, - [defines.events.on_player_changed_surface] = remove_lines_event, - [defines.events.on_player_toggled_alt_mode] = on_player_toggled_alt_mode, - [defines.events.on_console_command] = on_console_command, -- on_player_toggled_map_editor event seems doesn't work - [defines.events.on_player_clicked_gps_tag] = on_player_clicked_gps_tag, - -- [defines.events.on_chart_tag_modified] = on_chart_tag_modified, - [defines.events.on_chart_tag_removed] = on_chart_tag_removed -} - -M.on_nth_tick = { - [update_tick] = check_render, -} - -return M diff --git a/m_WhereIsMyBody_2.7.2/settings.lua b/m_WhereIsMyBody_2.7.2/settings.lua deleted file mode 100644 index 74b89111..00000000 --- a/m_WhereIsMyBody_2.7.2/settings.lua +++ /dev/null @@ -1,17 +0,0 @@ - -local settings = { - {type = "int-setting", name = "WHMB_update_tick", setting_type = "runtime-global", default_value = 120, minimum_value = 1, maximum_value = 8e4}, - {type = "bool-setting", name = "WHMB_delete_empty_bodies", setting_type = "runtime-global", default_value = false}, - {type = "int-setting", name = "WHMB_ignore_if_less_n_items", setting_type = "runtime-per-user", default_value = 6, minimum_value = 0, maximum_value = 100}, - {type = "double-setting", name = "WHMB_line_width", setting_type = "runtime-per-user", default_value = 0.2, minimum_value = 0.1, maximum_value = 20}, - {type = "bool-setting", name = "WHMB_create_lines", setting_type = "runtime-per-user", default_value = true}, - {type = "bool-setting", name = "WHMB_create_chart_tags_after_death", setting_type = "runtime-per-user", default_value = true} -} - -if ZKSettings then - for _, setting in pairs(settings) do - ZKSettings.create_setting(setting.name, setting.type, setting.setting_type, setting.default_value, setting) -- welp it looks awful - end -else - data:extend(settings) -end diff --git a/m_WhereIsMyBody_2.7.2/thumbnail.png b/m_WhereIsMyBody_2.7.2/thumbnail.png deleted file mode 100644 index d30a67a1..00000000 Binary files a/m_WhereIsMyBody_2.7.2/thumbnail.png and /dev/null differ diff --git a/make_burner_miners_great_again_9.1.0/data.lua b/make_burner_miners_great_again/data.lua similarity index 100% rename from make_burner_miners_great_again_9.1.0/data.lua rename to make_burner_miners_great_again/data.lua diff --git a/make_burner_miners_great_again_9.1.0/info.json b/make_burner_miners_great_again/info.json similarity index 100% rename from make_burner_miners_great_again_9.1.0/info.json rename to make_burner_miners_great_again/info.json diff --git a/make_burner_miners_great_again_9.1.0/prototypes/assemblerpipes.lua b/make_burner_miners_great_again/prototypes/assemblerpipes.lua similarity index 100% rename from make_burner_miners_great_again_9.1.0/prototypes/assemblerpipes.lua rename to make_burner_miners_great_again/prototypes/assemblerpipes.lua diff --git a/make_burner_miners_great_again_9.1.0/prototypes/burner.lua b/make_burner_miners_great_again/prototypes/burner.lua similarity index 100% rename from make_burner_miners_great_again_9.1.0/prototypes/burner.lua rename to make_burner_miners_great_again/prototypes/burner.lua diff --git a/make_burner_miners_great_again_9.1.0/prototypes/demo-pipecovers.lua b/make_burner_miners_great_again/prototypes/demo-pipecovers.lua similarity index 100% rename from make_burner_miners_great_again_9.1.0/prototypes/demo-pipecovers.lua rename to make_burner_miners_great_again/prototypes/demo-pipecovers.lua diff --git a/Robot256Lib_1.1.4/thumbnail.png b/make_burner_miners_great_again/thumbnail.png similarity index 100% rename from Robot256Lib_1.1.4/thumbnail.png rename to make_burner_miners_great_again/thumbnail.png diff --git a/marathon_9.1.17/README.md b/marathon/README.md similarity index 100% rename from marathon_9.1.17/README.md rename to marathon/README.md diff --git a/marathon_9.1.17/data-updates.lua b/marathon/data-updates.lua similarity index 100% rename from marathon_9.1.17/data-updates.lua rename to marathon/data-updates.lua diff --git a/marathon_9.1.17/data.lua b/marathon/data.lua similarity index 100% rename from marathon_9.1.17/data.lua rename to marathon/data.lua diff --git a/marathon_9.1.17/info.json b/marathon/info.json similarity index 100% rename from marathon_9.1.17/info.json rename to marathon/info.json diff --git a/marathon_9.1.17/prototypes/bobsmods/item.lua b/marathon/prototypes/bobsmods/item.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/item.lua rename to marathon/prototypes/bobsmods/item.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-chemistry.lua b/marathon/prototypes/bobsmods/recipe-chemistry.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-chemistry.lua rename to marathon/prototypes/bobsmods/recipe-chemistry.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-circuit.lua b/marathon/prototypes/bobsmods/recipe-circuit.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-circuit.lua rename to marathon/prototypes/bobsmods/recipe-circuit.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-intermediate.lua b/marathon/prototypes/bobsmods/recipe-intermediate.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-intermediate.lua rename to marathon/prototypes/bobsmods/recipe-intermediate.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-logistics.lua b/marathon/prototypes/bobsmods/recipe-logistics.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-logistics.lua rename to marathon/prototypes/bobsmods/recipe-logistics.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-power.lua b/marathon/prototypes/bobsmods/recipe-power.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-power.lua rename to marathon/prototypes/bobsmods/recipe-power.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-production.lua b/marathon/prototypes/bobsmods/recipe-production.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-production.lua rename to marathon/prototypes/bobsmods/recipe-production.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-resource.lua b/marathon/prototypes/bobsmods/recipe-resource.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-resource.lua rename to marathon/prototypes/bobsmods/recipe-resource.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-smelting.lua b/marathon/prototypes/bobsmods/recipe-smelting.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-smelting.lua rename to marathon/prototypes/bobsmods/recipe-smelting.lua diff --git a/marathon_9.1.17/prototypes/bobsmods/recipe-turret.lua b/marathon/prototypes/bobsmods/recipe-turret.lua similarity index 100% rename from marathon_9.1.17/prototypes/bobsmods/recipe-turret.lua rename to marathon/prototypes/bobsmods/recipe-turret.lua diff --git a/marathon_9.1.17/prototypes/item.lua b/marathon/prototypes/item.lua similarity index 100% rename from marathon_9.1.17/prototypes/item.lua rename to marathon/prototypes/item.lua diff --git a/marathon_9.1.17/prototypes/new.lua b/marathon/prototypes/new.lua similarity index 100% rename from marathon_9.1.17/prototypes/new.lua rename to marathon/prototypes/new.lua diff --git a/marathon_9.1.17/prototypes/recipe-ammo.lua b/marathon/prototypes/recipe-ammo.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-ammo.lua rename to marathon/prototypes/recipe-ammo.lua diff --git a/marathon_9.1.17/prototypes/recipe-armor.lua b/marathon/prototypes/recipe-armor.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-armor.lua rename to marathon/prototypes/recipe-armor.lua diff --git a/marathon_9.1.17/prototypes/recipe-bob-pipes.lua b/marathon/prototypes/recipe-bob-pipes.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-bob-pipes.lua rename to marathon/prototypes/recipe-bob-pipes.lua diff --git a/marathon_9.1.17/prototypes/recipe-bob-pump.lua b/marathon/prototypes/recipe-bob-pump.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-bob-pump.lua rename to marathon/prototypes/recipe-bob-pump.lua diff --git a/marathon_9.1.17/prototypes/recipe-bob-steam-power.lua b/marathon/prototypes/recipe-bob-steam-power.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-bob-steam-power.lua rename to marathon/prototypes/recipe-bob-steam-power.lua diff --git a/marathon_9.1.17/prototypes/recipe-chemistry.bak b/marathon/prototypes/recipe-chemistry.bak similarity index 100% rename from marathon_9.1.17/prototypes/recipe-chemistry.bak rename to marathon/prototypes/recipe-chemistry.bak diff --git a/marathon_9.1.17/prototypes/recipe-chemistry.lua b/marathon/prototypes/recipe-chemistry.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-chemistry.lua rename to marathon/prototypes/recipe-chemistry.lua diff --git a/marathon_9.1.17/prototypes/recipe-circuit.lua b/marathon/prototypes/recipe-circuit.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-circuit.lua rename to marathon/prototypes/recipe-circuit.lua diff --git a/marathon_9.1.17/prototypes/recipe-intermediate.lua b/marathon/prototypes/recipe-intermediate.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-intermediate.lua rename to marathon/prototypes/recipe-intermediate.lua diff --git a/marathon_9.1.17/prototypes/recipe-logistics.lua b/marathon/prototypes/recipe-logistics.lua similarity index 98% rename from marathon_9.1.17/prototypes/recipe-logistics.lua rename to marathon/prototypes/recipe-logistics.lua index 546fc15b..5a05eceb 100644 --- a/marathon_9.1.17/prototypes/recipe-logistics.lua +++ b/marathon/prototypes/recipe-logistics.lua @@ -46,7 +46,6 @@ data:extend({ enabled = true, ingredients = {{"wood", 16}}, --- result = "intermediate-structure-components", result = "wooden-chest", }, --[[ diff --git a/marathon_9.1.17/prototypes/recipe-other.lua b/marathon/prototypes/recipe-other.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-other.lua rename to marathon/prototypes/recipe-other.lua diff --git a/marathon_9.1.17/prototypes/recipe-production.lua b/marathon/prototypes/recipe-production.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-production.lua rename to marathon/prototypes/recipe-production.lua diff --git a/marathon_9.1.17/prototypes/recipe-science.lua b/marathon/prototypes/recipe-science.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-science.lua rename to marathon/prototypes/recipe-science.lua diff --git a/marathon_9.1.17/prototypes/recipe-smelting.lua b/marathon/prototypes/recipe-smelting.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-smelting.lua rename to marathon/prototypes/recipe-smelting.lua diff --git a/marathon_9.1.17/prototypes/recipe-weapon.lua b/marathon/prototypes/recipe-weapon.lua similarity index 100% rename from marathon_9.1.17/prototypes/recipe-weapon.lua rename to marathon/prototypes/recipe-weapon.lua diff --git a/marathon_9.1.17/thumbnail.png b/marathon/thumbnail.png similarity index 100% rename from marathon_9.1.17/thumbnail.png rename to marathon/thumbnail.png diff --git a/miniloader/NOTES.md b/miniloader/NOTES.md new file mode 100644 index 00000000..df5da88b --- /dev/null +++ b/miniloader/NOTES.md @@ -0,0 +1,24 @@ +### Code to paste to setup testing + +```lua +/c +local bar = game.player.get_inventory(defines.inventory.player_quickbar) +bar.clear() +for _, stack in ipairs{ + "electric-energy-interface", + "medium-electric-pole", + "steel-chest", + "iron-plate", + "miniloader", + "transport-belt", + "fast-miniloader", + "fast-transport-belt", + "express-miniloader", + "express-transport-belt", +} do + bar.insert(stack) +end +bar.insert("iron-plate") +game.player.insert{name="iron-plate", count=500} +game.player.insert{name="copper-plate", count=500} +``` \ No newline at end of file diff --git a/miniloader/README.md b/miniloader/README.md new file mode 100644 index 00000000..66900cb5 --- /dev/null +++ b/miniloader/README.md @@ -0,0 +1,78 @@ +# Miniloaders + +This mod introduces miniloaders, 1x1 entities that efficiently transfer a full +belt worth of items into and out of containers, including train cargo wagons. + +![Miniloaders in action with cargo wagons](resources/wagon.png) + +They use no Lua when running, keeping your factory's UPS healthy. + +![Miniloader UPS usage](resources/ups_cost.png) + +You can use them to feed your high-speed assemblers, + +![Miniloader assembler feed](resources/assemblerdemo.png) + +or put them in your bus as single-belt lane rebalancers. + +![Miniloaders lane balancer](resources/rebalance.png) + +Belts from the following mods are fully supported: +* Bob's Logistics +* FactorioExtended Plus +* Space Exploration +* Ultimate Belts +* Xander Mod +* Random Factorio Things +* Plutonium Energy + +## Videos and Spotlights + +Xterminator has [spotlighted Miniloader](https://youtu.be/6aGD3fh2P5A). +Seeeno has created a +[video tutorial in German](https://www.youtube.com/watch?v=f16zRTtZSQA) for Miniloader. + +## Balancing + +Miniloaders require stack inserter research, are relatively expensive to build, +and consume approximately the power of two fully-upgraded stack inserters. + +## How it works + +Each miniloader hides a set of very fast invisible inserters, one for each lane +of the belt. Lua scripting adjusts pickup and drop points accordingly when the +direction of the miniloader is changed. + +Since item movement is handled by inserters, there is no on_tick handler, no Lua +impact on UPS, and miniloaders will benefit from any future improvements to belt +and inserter performance made by Wube in the Factorio core. + +## Filtering + +Versions of miniloaders with and without filtering are available once the +appropriate technology has been researched. As you would expect, to build a +miniloader capable of filtering, you must use filter inserters as ingredients. + +Note that filter miniloaders behave like filter inserters, and not like vanilla +loaders: if no filters are set then no items will be moved. You must set at +least one filter. + +## Localization + +Interested in translating Miniloader to your language? Visit +[Crowdin](https://crowdin.com/project/factorio-mods-localization) and the changes +will be integrated into the next release. + +## Known Issues + +* The power usage UI counts each miniloader multiple times, since it shows the + power used by the inserters, not the miniloaders themselves. +* Miniloader arrows don't always appear correctly in blueprints. + +## Acknowledgements + +* Arch666Angel — for the original 2x1 loader graphics, cut down to 1x1 + with permission in versions through 1.5.x. +* Articulating — for the original Loader Snapping. +* Optera — for Loader Redux's revised and improved loader snapping code, adapted + here for Miniloaders with permission. diff --git a/miniloader/changelog.txt b/miniloader/changelog.txt new file mode 100644 index 00000000..83c248cf --- /dev/null +++ b/miniloader/changelog.txt @@ -0,0 +1,680 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.15.7 +Date: 2023-09-11 + Bugfixes: + - Workaround for bug preventing copy-paste of circuit conditions between miniloaders. + Translation: + - Update translations. +--------------------------------------------------------------------------------------------------- +Version: 1.15.6 +Date: 2022-02-12 + Bugfixes: + - Fix crash when GUI is already present. (https://mods.factorio.com/mod/miniloader/discussion/6206ee992adbb851d2d74d02) +--------------------------------------------------------------------------------------------------- +Version: 1.15.5 +Date: 2022-02-10 + Bugfixes: + - Fix crash when capturing a miniloader ghost in a blueprint. (https://mods.factorio.com/mod/miniloader/discussion/62056e0ed3a2b4955aa85472) +--------------------------------------------------------------------------------------------------- +Version: 1.15.4 +Date: 2022-02-10 + Changes: + - Output miniloaders now have a GUI like splitter priority to choose whether the lanes have separate filters and circuit conditions. The default is to share settings between lanes. +--------------------------------------------------------------------------------------------------- +Version: 1.15.3 +Date: 2022-02-08 + Bugfixes: + - Fix crash replacing a miniloader without a configured circuit condition. +--------------------------------------------------------------------------------------------------- +Version: 1.15.2 +Date: 2022-02-08 + Bugfixes: + - Fix crash when mining a circuit-connected miniloader. (https://mods.factorio.com/mod/miniloader/discussion/620310a56e7833117189b7e9) + - Fix chutes being able to connect to circuit networks, contrary to the intended design. +--------------------------------------------------------------------------------------------------- +Version: 1.15.1 +Date: 2022-02-08 + Major features: + - Miniloaders in output mode can have filters and circuit conditions set for individual lanes. Blueprinting and copy-paste mostly work but some issues may remain. + Bugfixes: + - Fix a potential source of event desyncs when joining a multiplayer server. + - Fix miniloaders being left in a bad state when the last entity connected to a miniloader with circuit wires is mined. +--------------------------------------------------------------------------------------------------- +Version: 1.14.9 +Date: 2022-02-05 + Bugfixes: + - Fix saves broken by 1.15.0 release. +--------------------------------------------------------------------------------------------------- +Version: 1.15.0 +Date: 2022-02-02 + Major Features: + - WITHDRAWN +--------------------------------------------------------------------------------------------------- +Version: 1.14.8 +Date: 2022-01-17 + Bugfixes: + - Remove ancient hack for Creative Mod compatibility that was causing items to be lost when robots mine miniloaders. (https://mods.factorio.com/mod/miniloader/discussion/61de19d0312787dc9688dbc3) +--------------------------------------------------------------------------------------------------- +Version: 1.14.7 +Date: 2022-01-17 + Bugfixes: + - Fix circuit wire connections sometimes getting lost when using Construction Drones. + - Prevent miniloaders from snapping when using undo after deconstruction. + Translation: + - Update translations for fr, zh-TW. +--------------------------------------------------------------------------------------------------- +Version: 1.14.6 +Date: 2021-09-10 + Bugfixes: + - Fix crash in on_player_setup_blueprint when creating multiple blueprints in the same tick, e.g. when the game is paused in editor mode. (https://mods.factorio.com/mod/miniloader/discussion/612ba304fcd55c0271ea233a) +--------------------------------------------------------------------------------------------------- +Version: 1.14.5 +Date: 2021-07-05 + Bugfixes: + - Fix crash in on_pre_build. +--------------------------------------------------------------------------------------------------- +Version: 1.14.4 +Date: 2021-07-05 + Bugfixes: + - Fix snapping being incorrectly applied to blueprint ghosts when blueprints are placed directly from the blueprint library. (https://mods.factorio.com/mod/miniloader/discussion/60b12ec417dbea783f0ec190) + - Avoid crash when updating blueprints from inside blueprint books or the blueprint library. (https://mods.factorio.com/mod/miniloader/discussion/60e0ee0d3277109b8056f5d4) +--------------------------------------------------------------------------------------------------- +Version: 1.14.3 +Date: 2021-07-03 + Minor Features: + - Enhance snapping to support snapping to belt ghosts. (https://mods.factorio.com/mod/miniloader/discussion/60128a9dba88bde39b6bb0cb) + Bugfixes: + - Prevent Select New Contents button from creating blueprints with multiple miniloaders in the same position. (https://mods.factorio.com/mod/miniloader/discussion/60b12ec417dbea783f0ec190) + - Add workaround when placing blueprints with multiple miniloaders in the same position. (https://mods.factorio.com/mod/miniloader/discussion/60b12ec417dbea783f0ec190) + - Fix configuration of miniloaders placed in editor from blueprints while time is frozen. (https://mods.factorio.com/mod/miniloader/discussion/605c918a8618fe16b0713f8c) +--------------------------------------------------------------------------------------------------- +Version: 1.14.2 +Date: 2021-05-27 + Bugfixes: + - Fix crash when placing blueprint with no entities. (https://mods.factorio.com/mod/miniloader/discussion/60afed6b3b5d1012994e3b1d) +--------------------------------------------------------------------------------------------------- +Version: 1.14.1 +Date: 2021-05-27 + Bugfixes: + - Fix miniloaders being reset to input during save game migration. (https://mods.factorio.com/mod/miniloader/discussion/60afa0accd95c9c1f1597447) +--------------------------------------------------------------------------------------------------- +Version: 1.14.0 +Date: 2021-05-26 + Minor Features: + - Add support for Space Exploration's Deep Space belts. (https://github.com/mspielberg/factorio-miniloader/pull/54) + Changes: + - Adjust colors for RandomFactorioThings. (https://github.com/mspielberg/factorio-miniloader/pull/57) + Bugfixes: + - Possible fix for rare multiplayer desyncs related to placing blueprints. + - Fix Bob's Adjustable Inserters not being disabled for miniloaders on a new game. (https://mods.factorio.com/mod/miniloader/discussion/5f40fee0e296bbca10d15315) + - Fix crash when creating a blueprint using a blueprint book with a blank blueprint in the active slot, and holding Shift to bypass the configuration dialog. (https://mods.factorio.com/mod/miniloader/discussion/60a412070a985520b1abd862) + - Fix miniloader orientation not being used when instant building blueprint in editor mode. (https://mods.factorio.com/mod/miniloader/discussion/605c918a8618fe16b0713f8c) +--------------------------------------------------------------------------------------------------- +Version: 1.13.1 +Date: 2021-01-04 + Bugfixes: + - Fix crash when building over a circuit-connected miniloader ghost with a different miniloader. (https://mods.factorio.com/mod/miniloader/discussion/5ff20f700e315442e937bc9b) + - Fix inserter configuration getting scrambled when placing a blueprint over an existing miniloader. (https://mods.factorio.com/mod/miniloader/discussion/5fefa9afe794fa476bd15418) +--------------------------------------------------------------------------------------------------- +Version: 1.13.0 +Date: 2020-11-24 + Changes: + - Update to Factorio 1.1. +--------------------------------------------------------------------------------------------------- +Version: 1.12.3 +Date: 2020-11-09 + Bugfixes: + - Possible fix for desync introduced in 1.12.2. (https://mods.factorio.com/mod/miniloader/discussion/5fa775c0703f4d920d3b587f) +--------------------------------------------------------------------------------------------------- +Version: 1.12.2 +Date: 2020-11-03 + Bugfixes: + - Fix crash when blueprinting only tiles. (https://mods.factorio.com/mod/miniloader/discussion/5f22fbe962d0188b18b80c49) + - Fix snapping affecting blueprints unintentionally. (https://mods.factorio.com/mod/miniloader/discussion/5f720f57c0437e6cde6d4687) +--------------------------------------------------------------------------------------------------- +Version: 1.12.1 +Date: 2020-09-27 + Bugfixes: + - Fix crash when snapping to a non-belt entity. (https://mods.factorio.com/mod/miniloader/discussion/5f70290bc7cfa2d0e5e5bde4) +--------------------------------------------------------------------------------------------------- +Version: 1.12.0 +Date: 2020-09-26 + Minor Features: + - Apply snapping to miniloader ghosts when placed by a player. (https://mods.factorio.com/mod/miniloader/discussion/5f3c350a14ad95fdcafc77d6) + - Update officially to Factorio 1.0. + Bugfixes: + - Fix crash on startup when disabling normal miniloaders but leaving filter miniloaders enabled (https://mods.factorio.com/mod/miniloader/discussion/5f69433361c8c581e99227cd) +--------------------------------------------------------------------------------------------------- +Version: 1.11.2 +Date: 2020-07-30 + Bugfixes: + - Fix poor performance when placing blueprints in Factorio 0.18.37+. (https://forums.factorio.com/87261) + - Fix snapping setting not affecting snapping when belts are placed. (https://mods.factorio.com/mod/miniloader/discussion/5f1faaa94ab73a606a449c30) +--------------------------------------------------------------------------------------------------- +Version: 1.11.1 +Date: 2020-04-11 + Bugfixes: + - Fix Picker Dollies integration leaving behind an invisible chest. (https://mods.factorio.com/mod/miniloader/discussion/5e90fadfc0f6d0000e6713ba) + - Remove collision masks from miniloader belt portion again, since it broke the ability to fast replace miniloaders. + - Make all miniloader inserters max speed again, to hopefully resolve timing issues that cause miniloaders to not keep up with belts in some circumstances. (https://mods.factorio.com/mod/miniloader/discussion/5e8cbf5865e928000cfdd690) +--------------------------------------------------------------------------------------------------- +Version: 1.11.0 +Date: 2020-04-10 + Changes: + - Add Steel Processing as a tech prerequisite for standard miniloaders. (https://mods.factorio.com/mod/miniloader/discussion/5e71cb315bcf4f000eca08ed) + - New graphics by kirazy! (https://github.com/mspielberg/factorio-miniloader/pull/40) + Compatibility: + - Remove support for the now abandoned Krastorio Legacy. + - Temporarily remove support for Xander Mod until its belt tiers are finalized. + Bugfixes: + - Fix crash when mining a miniloader with more than 256 items in one of its lanes. (https://github.com/mspielberg/factorio-miniloader/issues/39) + - Fix crash when somehow an event arrives with an invalid inventory. (https://mods.factorio.com/mod/miniloader/discussion/5e83025f611080000ee042d2) + - Fix miniloader belt portion was missing a collision mask, causing a hard crash in Factorio core. (https://forums.factorio.com/82294) +--------------------------------------------------------------------------------------------------- +Version: 1.10.8 +Date: 2020-03-19 + Bugfixes: + - Fixed load order problems with Krastorio2. + - Fixed problem where two miniloaders circuit-connected to each other in a blueprint sometimes weren't connected after being built. (https://mods.factorio.com/mod/miniloader/discussion/5e74154258ecbc000e77951c) +--------------------------------------------------------------------------------------------------- +Version: 1.10.7 +Date: 14.03.2020 + Bugfixes: + - Change fixup introduced in v1.10.5 to prefer to keep the loader connected to an adjacent belt, when multiples are present. +--------------------------------------------------------------------------------------------------- +Version: 1.10.6 +Date: 14.03.2020 + Bugfixes: + - Change migration to prevent crahses on loading some (?) maps saved with older versions. + Compatibility: + - Add Krastorio2 support. +--------------------------------------------------------------------------------------------------- +Version: 1.10.5 +Date: 14.03.2020 + Bugfixes: + - Fix migration trying to replace miniloaders with themselves, resulting in multiple loaders on the same tile. (https://mods.factorio.com/mod/miniloader/discussion/5e6c7596213254000d67fac2) +--------------------------------------------------------------------------------------------------- +Version: 1.10.4 +Date: 13.03.2020 + Bugfixes: + - Fix handling of miniloader upgrades performed by Construction Drones. + Minor Features: + - Removed compatibility support for Klonan's obsolete Upgrade Planner mod. + - Add setting to allow miniloader inserters to move items like stack inserters, reducing UPS consumption but disabling balancing behavior and leading to generally bursty item transfer. +--------------------------------------------------------------------------------------------------- +Version: 1.10.3 +Date: 07.03.2020 + Bugfixes: + - Fix doubled recipes only giving one result. (https://mods.factorio.com/mod/miniloader/discussion/5e63993bc849b1000ce1235c) +--------------------------------------------------------------------------------------------------- +Version: 1.10.2 +Date: 29.02.2020 + Bugfixes: + - Fix crash on startup when Bob's Logistics setting for Transport belt overhaul is turned off. (https://mods.factorio.com/mod/miniloader/discussion/5e59bf3b06acef000bd533e5) +--------------------------------------------------------------------------------------------------- +Version: 1.10.1 +Date: 28.02.2020 + Bugfixes: + - Fix miniloaders not being able to unload. +--------------------------------------------------------------------------------------------------- +Version: 1.10.0 +Date: 28.02.2020 + Balancing: + - Unlock standard miniloader with Logistics. + Bugfixes: + - Fixed upgrade planner sometimes removing circuit wire connections. (https://mods.factorio.com/mod/miniloader/discussion/5e55174c67ec67000ea17b6b) + Minor Features: + - Added miniloader for Bob's basic transport belts. + - Added support for Bob's "belts require previous tier" setting. (https://mods.factorio.com/mod/miniloader/discussion/5e594a1c9c6a8d000e79fad2) + - Added belt speed to description. + - Added setting to force miniloaders to be crafted in pairs to avoid annoying orphan underground belts in the player's inventory. (https://mods.factorio.com/mod/miniloader/discussion/5e4e075b9564bf000e15917c) + Optimisations: + - Optimized UPS cost of having many miniloaders. +--------------------------------------------------------------------------------------------------- +Version: 1.9.4 +Date: 22.02.2020 + Bugfixes: + - Fixed miniloaders getting broken when in range of a Mining Drones depot. (https://mods.factorio.com/mod/miniloader/discussion/5e51413ff26569000df74779) +--------------------------------------------------------------------------------------------------- +Version: 1.9.3 +Date: 02.02.2020 + Bugfixes: + - Improved migrations of maps from 0.17. +--------------------------------------------------------------------------------------------------- +Version: 1.9.2 +Date: 28.01.2020 + Bugfixes: + - Fix migrations from 0.17 sometimes leaving stray belt items on the ground. + Compatibility: + - Change mininum requirement to Factorio 0.18.2 to ensure migrations from 0.17 work properly. +--------------------------------------------------------------------------------------------------- +Version: 1.9.1 +Date: 28.01.2020 + Bugfixes: + - Fix error when migrating saves with miniloaders placed back to back. +--------------------------------------------------------------------------------------------------- +Version: 1.9.0 +Date: 28.01.2020 + Compatibility: + - Update to Factorio 0.18. +--------------------------------------------------------------------------------------------------- +Version: 1.8.5 +Date: 28.12.2019 + Bugfixes: + - Fixed miniloaders getting into an inconsistent damaged state. (https://mods.factorio.com/mod/miniloader/discussion/5df74cc612f05a000cf35499) + Minor Features: + - Added settings to enable/disable chutes, miniloaders, and filter miniloaders separately. (https://mods.factorio.com/mod/miniloader/discussion/5deb10e1284ae4000d48bbd2) +--------------------------------------------------------------------------------------------------- +Version: 1.8.4 +Date: 22.10.2019 + Bugfixes: + - Fixed bad ingredient for Krastorio's Superior filter miniloader. (https://mods.factorio.com/mod/miniloader/discussion/5d2e77e45d97e4000b7b6a97) +--------------------------------------------------------------------------------------------------- +Version: 1.8.3 +Date: 20.08.2019 + Changes: + - Add chutes: very slow (1/4 yellow belt speed) grativy-fed miniloaders that work without power, for use in the early game. + - Express belt miniloaders set to 60 items/s, since 45/s is too inconsistent with 2 inserters. +--------------------------------------------------------------------------------------------------- +Version: 1.8.2 +Date: 24.07.2019 + Bugfixes: + - Adjust speeds of express belts, again. + Compatibility: + - Fix non-space miniloaders being buildable in Space Exploration's orbital surfaces. +--------------------------------------------------------------------------------------------------- +Version: 1.8.1 +Date: 23.07.2019 + Changes: + - Adjust speeds of express belts. + Compatibility: + - Add support for Krastorio's Superior transport belt tier. + - Improve support for mods that alter the speed of existing belts. +--------------------------------------------------------------------------------------------------- +Version: 1.8.0 +Date: 17.06.2019 + Changes: + - Requires Factorio 0.17.50 for the improved inserter performance. + - Caveats for belts faster than 60/s are removed. All miniloaders can now be filtered and circuit controlled, and all miniloaders should transfer to/from cargo wagons at full speed. There are still Factorio limitations with belts faster than 120/s whether used with or without miniloaders, and this mod cannot address those. +--------------------------------------------------------------------------------------------------- +Version: 1.7.12 +Date: 11.06.2019 + Bugfixes: + - Fixed crash when loading a map with miniloaders broken by interaction with other mods. (https://mods.factorio.com/mod/miniloader/discussion/5d00865659589c000b345432) + Compatibility: + - Added support for Space Exploration. +--------------------------------------------------------------------------------------------------- +Version: 1.7.11 +Date: 11.06.2019 + Bugfixes: + - Fixed stray debug print to console when placing blueprints. (https://forums.factorio.com/viewtopic.php?f=190&t=54343&start=340#p436005) + - Fixed that inserters added to old saves where belt speeds have increased are not circuit connected when they should be. (https://github.com/mspielberg/factorio-miniloader/issues/27) +--------------------------------------------------------------------------------------------------- +Version: 1.7.10 +Date: 10.06.2019 + Bugfixes: + - Fixed problem with insufficient throughput when loading an old save. (https://github.com/mspielberg/factorio-miniloader/issues/26) + - Fixed issue with lane inserter configuration becoming mismatched when building a blueprint over existing miniloaders. (https://github.com/mspielberg/factorio-miniloader/issues/24) + Compatibility: + - Add alternative recipes for Xander Mod (Therax). +--------------------------------------------------------------------------------------------------- +Version: 1.7.9 +Date: 30.05.2019 + Changes: + - Switched from increased stack size bonus to having additional inserters instead, to fix problems with sushi belts. (https://forums.factorio.com/viewtopic.php?f=190&t=54343&start=320#p421866) +--------------------------------------------------------------------------------------------------- +Version: 1.7.8 +Date: 17.05.2019 + Compatibility: + - Add compatibility with Construction Drones. (https://mods.factorio.com/mod/miniloader/discussion/5cdc798914ee39000cdd4506) +--------------------------------------------------------------------------------------------------- +Version: 1.7.7 +Date: 31.03.2019 + Compatibility: + - Fix PickerDollies compatibility. + - Fix Bob's Logistics support for Factorio 0.17.23+. + Minor Features: + - Miniloaders can now be set to not require a connection to an electic network. + Translation: + - Add Traditional Chinese translation from k98a. +--------------------------------------------------------------------------------------------------- +Version: 1.7.6 +Date: 20.03.2019 + Changes: + - Increased miniloader inserter movement speed, so they should hopefully now reliably keep up with express belts. + - Decreased time to mine Miniloaders to be comparable to mining a belt segment. + Translation: + - Add French translation from Krysh Nar. +--------------------------------------------------------------------------------------------------- +Version: 1.7.5 +Date: 19.03.2019 + Changes: + - Miniloaders now scale to faster speeds by increased stack size bonus, instead of movement speed. +--------------------------------------------------------------------------------------------------- +Version: 1.7.4 +Date: 14.03.2019 + Minor Changes: + - Increase miniloader speed to ensure they can keep up with the faster blue belts. + Bugfixes: + - Preserve cargo wagon filters in blueprints with no miniloaders. (https://forums.factorio.com/viewtopic.php?f=190&t=54343&start=280#p412248) +--------------------------------------------------------------------------------------------------- +Version: 1.7.3 +Date: 13.03.2019 + Bugfixes: + - Fix being unable to mine UB miniloaders. (https://mods.factorio.com/mod/miniloader/discussion/5c87a9086df489000b719597) + - Fix crash when configuring UB miniloaders. (https://mods.factorio.com/mod/miniloader/discussion/5c87a9086df489000b719597) +--------------------------------------------------------------------------------------------------- +Version: 1.7.2 +Date: 03.03.2019 + Bugfixes: + - Fix blacklist on filter miniloaders. (https://mods.factorio.com/mod/miniloader/discussion/5c7a629def2ffa000dd4947d) +--------------------------------------------------------------------------------------------------- +Version: 1.7.1 +Date: 26.02.2019 + Bugfixes: + - Fix crash on startup when using normal sprite resolution. +--------------------------------------------------------------------------------------------------- +Version: 1.7.0 +Date: 26.02.2019 + Compatibility: + - Update to Factorio 0.17. +--------------------------------------------------------------------------------------------------- +Version: 1.6.10 +Date: 25.02.2019 + Bugfixes: + - Fix recipes for Bob's Logistics with inserter overhaul. +--------------------------------------------------------------------------------------------------- +Version: 1.6.9 +Date: 12.02.2019 + Compatibility: + - Add compatibility with Xander Mod. +--------------------------------------------------------------------------------------------------- +Version: 1.6.8 +Date: 02.01.2019 + Compatibility: + - Miniloader inserters are no longer adjustable with Bob's Adjustable Inserters. + Bugfixes: + - Fix snapping issues introduced in v1.6.6. + - Copper cables attached to power switches are no longer removed from blueprints. (https://mods.factorio.com/mod/miniloader/discussion/5c2ac4eb24fc29000db27e19) +--------------------------------------------------------------------------------------------------- +Version: 1.6.7 +Date: 28.11.2018 + Bugfixes: + - Fix crash from trying to preserve orientation. +--------------------------------------------------------------------------------------------------- +Version: 1.6.6 +Date: 28.11.2018 + Minor Features: + - Enable fast replacing Miniloaders. + - Preserve input/output type when building over ghosts. +--------------------------------------------------------------------------------------------------- +Version: 1.6.5 +Date: 31.10.2018 + Documentation: + - Separate changelog. + Bugfixes: + - Fix crash when deconstructing in The Blueprint Lab. (https://mods.factorio.com/mod/miniloader/discussion/5bd9bb9061c07e000d020dfc) +--------------------------------------------------------------------------------------------------- +Version: 1.6.4 +Date: 22.10.2018 + Bugfixes: + - Fix crash when placing a miniloader next to certain curved rails with snapping enabled. +--------------------------------------------------------------------------------------------------- +Version: 1.6.3 +Date: 08.10.2018 + Compatibility: + - Add support for FactorioExtended-Plus-Transport. +--------------------------------------------------------------------------------------------------- +Version: 1.6.2 +Date: 07.10.2018 + Graphics: + - Expose circuit connector graphics. + Bugfixes: + - Fix unintended removal when deconstructing tiles under miniloaders. + - Restore filter icons in info mode. + - Fix a case where robots could lose a mined miniloader. +--------------------------------------------------------------------------------------------------- +Version: 1.6.1 +Date: 25.09.2018 + Bugfixes: + - Fix reversed colors in recent versions of boblogistics. +--------------------------------------------------------------------------------------------------- +Version: 1.6.0 +Date: 21.09.2018 + Documentation: + - Remove references to priority-split usecase now that Factorio core supports splitter priority. + Graphics: + - New vanilla-inspired graphics that don't overlap with adjacent buildings. + Bugfixes: + - Fix some cases where miniloaders rarely snap to the wrong entity. +--------------------------------------------------------------------------------------------------- +Version: 1.5.23 +Date: 26.07.2018 + Bugfixes: + - Fix crash when getting a bad on_put_item event from buggy other mods. + - Fix wire connections not appearing on ghosts autoplaced when an entity dies. +--------------------------------------------------------------------------------------------------- +Version: 1.5.22 +Date: 12.06.2018 + Bugfixes: + - Fix bug where placing a miniloader by hand over a configured blueprint ghost only configured one of the miniloader inserters. +--------------------------------------------------------------------------------------------------- +Version: 1.5.21 +Date: 24.05.2018 + Bugfixes: + - Fix Ultimate Belts miniloaders not yielding an item when mined. + - Fix bug with Upgrade Planner integration that could sometimes cause upgraded miniloaders to not be returned to the player's inventory. +--------------------------------------------------------------------------------------------------- +Version: 1.5.20 +Date: 02.05.2018 + Compatibility: + - Add filter miniloader support for Ultimate Belts. + Bugfixes: + - Fix upgrade planner crash where loader belts have insufficient room for items. + - Work around for bug in Creative Mode's instant deconstruction cheat. + - Fix icon appearance when other mods add multi-layer icons to underground belts. + - Fix case where mining the last entity connected to a miniloader via circuit left the miniloader inoperative. +--------------------------------------------------------------------------------------------------- +Version: 1.5.19 +Date: 04.04.2018 + Compatibility: + - Fix compatibility with Ultimate Belts 0.16.4. +--------------------------------------------------------------------------------------------------- +Version: 1.5.18 +Date: 01.04.2018 + Balancing: + - Increased miniloader inserter speed again slightly to better handle inline belt-to-belt use. + Bugfixes: + - Fix load error with Ultimate Belts. + - Fix a possible error when joining a multiplayer server. +--------------------------------------------------------------------------------------------------- +Version: 1.5.17 +Date: 31.03.2018 + Balancing: + - Increased speed of miniloader belt-to-container throughput, enabling them to keep up with fast transport belts. + Compatibility: + - Significant overhaul to boblogistics support, now that Bob's top-tier belts are called Ultimate transport belts, introducing a conflict with the Ultimate Belts mod. +--------------------------------------------------------------------------------------------------- +Version: 1.5.16 +Date: 18.03.2018 + Balancing: + - Change ingredients when using boblogistics inserter overhaul. +--------------------------------------------------------------------------------------------------- +Version: 1.5.15 +Date: 12.03.2018 + Minor Features: + - Add support for boblogistics inserter overhaul. + Bugfixes: + - Fix another crash when mining miniloaders in Factorio 0.16.29. +--------------------------------------------------------------------------------------------------- +Version: 1.5.14 +Date: 12.03.2018 + Bugfixes: + - Fix crash when mining miniloader in Factorio 0.16.29. +--------------------------------------------------------------------------------------------------- +Version: 1.5.13 +Date: 06.03.2018 + Optimization: + - Optimize graphics to reduce download size. + Bugfixes: + - Remove stray debug logging to console. +--------------------------------------------------------------------------------------------------- +Version: 1.5.12 +Date: 05.03.2018 + Bugfixes: + - Fix additional event sync corner cases on joining a multiplayer server. + - Fix crash when mining a miniloader with an opened GUI. + - Fix filter miniloader recipes to use previous tiers of filter miniloaders instead of unfiltered miniloaders. +--------------------------------------------------------------------------------------------------- +Version: 1.5.11 +Date: 20.02.2018 + Bugfixes: + - Fix event sync problem on joining a multiplayer server. +--------------------------------------------------------------------------------------------------- +Version: 1.5.10 +Date: 08.02.2018 + Balancing: + - Shrink miniloader collision box. + Bugfixes: + - Fix crash related to placing rail blueprints. + - Fix crash related to rapidly drag-building blueprints. +--------------------------------------------------------------------------------------------------- +Version: 1.5.9 +Date: 06.02.2018 + Bugfixes: + - Remove stray debugging code. +--------------------------------------------------------------------------------------------------- +Version: 1.5.8 +Date: 06.02.2018 + Compatibility: + - Using Upgrade Planner on miniloaders now preserves complex items (configured blueprints, armor with inventory, etc.) + Bugfixes: + - Fix building over an existing miniloader with a blueprint where that miniloader is connected to the circuit network. +--------------------------------------------------------------------------------------------------- +Version: 1.5.7 +Date: 22.01.2018 + Compatibility: + - Potentional fix for reported Omnimatter mod incompatibility. + Bugfixes: + - Make sure stack size override is reset on non-circuit-controlled inserters. +--------------------------------------------------------------------------------------------------- +Version: 1.5.6 +Date: 19.01.2018 + Balancing: + - Change recipes to use lower tiers of miniloaders as ingredients. + Features: + - Add BETA support for Ultimate Belts mod. See caveats and warnings above. +--------------------------------------------------------------------------------------------------- +Version: 1.5.5 +Date: 18.01.2018 + Compatibility: + - Add compatibility with upgrade-planner. + Bugfixes: + - Ghosts can now be placed over miniloaders marked for deconstruction. +--------------------------------------------------------------------------------------------------- +Version: 1.5.4 +Date: 17.01.2018 + Bugfixes: + - Fix crash when alt-selecting with blueprint. + - Fix crash during blueprinting. +--------------------------------------------------------------------------------------------------- +Version: 1.5.3 +Date: 15.01.2018 + Compatibility: + - Reenable PickerExtended dolly. Thanks to Nexela for the fix suggestion. + Bugfixes: + - Fix setting a blueprint that includes no entities, only tiles. +--------------------------------------------------------------------------------------------------- +Version: 1.5.2 +Date: 14.01.2018 + Compatibility: + - Disable PickerExtended's dolly feature, since it can only move parts of miniloaders, breaking them. + Bugfixes: + - Fix blueprints having duplicate overlapping miniloaders. Any blueprints in your inventory should be fixed, but blueprints in chests may need to be cleared and re-created. + - Fix building miniloaders with Nanorobots. +--------------------------------------------------------------------------------------------------- +Version: 1.5.1 +Date: 14.01.2018 + Bugfixes: + - Enable filter inserter recipes when migrating from pre-1.5.0. +--------------------------------------------------------------------------------------------------- +Version: 1.5.0 +Date: 12.01.2018 + Changes: + - Separate filter miniloaders into their own entities. Existing miniloaders will lose their filtering capabilities. Sorry for the inconvenience! + Bugfixes: + - Fix crash when connecting miniloaders directly to arithmetic or decider combinators. +--------------------------------------------------------------------------------------------------- +Version: 1.4.3 +Date: 09.01.2018 + Bugfixes: + - Apply migration to saves with v1.4.1. +--------------------------------------------------------------------------------------------------- +Version: 1.4.2 +Date: 09.01.2018 + Bugfixes: + - Fix broken migration of yellow miniloaders. + - Fix broken localization of items in hand. +--------------------------------------------------------------------------------------------------- +Version: 1.4.1 +Date: 09.01.2018 + Bugfixes: + - Fix crash when placing underground belt with a miniloader on the opposite side. + - Fix migration issue from 1.2.0-1.3.0 causing belt items to spill on the ground. +--------------------------------------------------------------------------------------------------- +Version: 1.4.0 +Date: 07.01.2018 + Major Features: + - Add support for controlling miniloaders through the circuit network. + - Add optional filtering support for miniloaders. + Changes: + - Redesign using 0.16 customized loader entities instead of underground belt to provide belt connectivity. +--------------------------------------------------------------------------------------------------- +Version: 1.3.0 +Date: 18.12.2017 + Balancing: + - Rebalance ingredient costs. + - Make yellow miniloader accessible before oil. +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 14.12.2017 + Compatibility: + - Update to Factorio 0.16. +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 14.12.2017 + Changes: + - Remove the problematic separate force for miniloader inserters, and set a stack size override instead. +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 11.12.2017 + Changes: + - Make snapping less aggressive. Miniloaders should only turn 180 degrees, not 90 degrees, to better match behavior from Loader Redux. + Bugfixes: + - Remove orphan inserters left behind by yellow miniloaders if removed while 1.1.0-1.1.2 was installed. +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 06.12.2017 + Bugfixes: + - Fix basic yellow miniloaders. Oops. + - Fix a case where items could be spilled onto adjacent tiles when snapping a miniloader to a belt. +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 06.12.2017 + Bugfixes: + - Fix critical crash bug when rotating miniloaders. +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 05.12.2017 + Bugfixes: + - Fix some snapping issues (laying belts to the side of a miniloader, trying to snap to a player, sometimes snapping to the wrong direction when next to a large entities like assemblers). +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 03.12.2017 + Major Features: + - Add graphics and loader snapping. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 01.12.2017 + Major Features: + - Initial release. diff --git a/miniloader/circuit.lua b/miniloader/circuit.lua new file mode 100644 index 00000000..99fd701a --- /dev/null +++ b/miniloader/circuit.lua @@ -0,0 +1,242 @@ +local event = require "lualib.event" +local onwireplaced = require "lualib.onwireplaced" +local util = require "lualib.util" + +local M = {} + +local function get_inserter_filters(inserter) + local slots = inserter.filter_slot_count + local filters = {} + for i=1,slots do + filters[i] = inserter.get_filter(i) + end + return filters +end + +local function copy_inserter_filters(source_inserter, dest_inserter, filters) + local slots = dest_inserter.filter_slot_count + local inserter_filter_mode = source_inserter.inserter_filter_mode + + if inserter_filter_mode then + dest_inserter.inserter_filter_mode = inserter_filter_mode + end + + if not filters then + filters = get_inserter_filters(source_inserter) + end + + for i=1,slots do + dest_inserter.set_filter(i, filters[i]) + end +end + +function M.sync_filters(entity) + local inserters = util.get_loader_inserters(entity) + local source_inserter = inserters[1] + + if #inserters < 2 then return end + + if not util.is_output_miniloader_inserter(entity) + or not global.split_lane_configuration[source_inserter.unit_number] then + -- sync left and right lanes + copy_inserter_filters(entity, inserters[2]) + end + for i = 1, #inserters, 2 do + copy_inserter_filters(source_inserter, inserters[i]) + end + source_inserter = inserters[2] + for i = 4, #inserters, 2 do + copy_inserter_filters(source_inserter, inserters[i]) + end +end + +local function copy_inserter_behavior(source_inserter, target) + local source_behavior = source_inserter.get_or_create_control_behavior() + local behavior = target.get_or_create_control_behavior() + behavior.circuit_read_hand_contents = source_behavior.circuit_read_hand_contents + behavior.circuit_mode_of_operation = source_behavior.circuit_mode_of_operation + behavior.circuit_hand_read_mode = source_behavior.circuit_hand_read_mode + behavior.circuit_set_stack_size = false + behavior.circuit_stack_control_signal = {type="item"} + behavior.circuit_condition = source_behavior.circuit_condition + behavior.logistic_condition = source_behavior.logistic_condition + behavior.connect_to_logistic_network = source_behavior.connect_to_logistic_network +end + +function M.copy_inserter_settings(source, target) + copy_inserter_filters(source, target) + copy_inserter_behavior(source, target) +end + +function M.sync_behavior(inserter) + local inserters = util.get_loader_inserters(inserter) + local stack_size_override = settings.global["miniloader-lock-stack-sizes"].value + and 1 or inserters[1].inserter_stack_size_override + for _, target in ipairs(inserters) do + target.inserter_stack_size_override = stack_size_override + end + + if #inserters < 2 then return end + + local source_inserter = inserters[1] + if not util.is_output_miniloader_inserter(source_inserter) + or not global.split_lane_configuration[source_inserter.unit_number] then + -- sync left and right lanes + copy_inserter_behavior(source_inserter, inserters[2]) + end + for i = 1, #inserters, 2 do + copy_inserter_behavior(source_inserter, inserters[i]) + end + source_inserter = inserters[2] + for i = 4, #inserters, 2 do + copy_inserter_behavior(source_inserter, inserters[i]) + end +end + +local function ccds_match(ccd1, ccd2) + if ccd1 == nil or ccd2 == nil then return false end + return + ccd1.entity == ccd2.entity and ccd1.target_entity == ccd2.target_entity + or ccd1.entity == ccd2.target_entity and ccd1.target_entity == ccd2.entity +end + +local function connected_non_partners(inserters, removed) + local out = {[defines.wire_type.red] = {}, [defines.wire_type.green] = {}} + for _, inserter in ipairs(inserters) do + local ccds = inserter.circuit_connection_definitions + local pos = inserter.position + for _, ccd in ipairs(ccds) do + ccd.entity = inserter + local otherpos = ccd.target_entity.position + if (otherpos.x ~= pos.x or otherpos.y ~= pos.y) and not ccds_match(ccd, removed) then + table.insert(out[ccd.wire], ccd) + end + end + end + return out +end + +local function count_connections_on_wire(entity, wire_type) + local count = 0 + for _, ccd in ipairs(entity.circuit_connection_definitions) do + if ccd.wire == wire_type then + count = count + 1 + end + end + return count +end + +local function partner_connections_need_sync(inserters, connections) + local master_inserter = inserters[1] + if not master_inserter then + return false + end + for wire_type, wire_connections in pairs(connections) do + local network = master_inserter.get_circuit_network(wire_type) + if network then + if not next(wire_connections) then + --log("no external connections on wire color") + return true + end + local network_id = network.network_id + for i=2,#inserters do + local slave_inserter = inserters[i] + local slave_network = slave_inserter.get_circuit_network(wire_type) + if not slave_network or slave_network.network_id ~= network_id then + --log("slave connected to no or different network") + return true + end + if count_connections_on_wire(slave_inserter, wire_type) ~= 1 then + --log("slave has bad connection count") + return true + end + end + else + for i=2,#inserters do + local slave_inserter = inserters[i] + local slave_network = slave_inserter.get_circuit_network(wire_type) + if slave_network then + --log("slave has network connection") + return true + end + end + end + end + --log("no sync needed") + return false +end + +function M.sync_partner_connections(inserter, removed) + local inserters = util.get_loader_inserters(inserter) + local connections = connected_non_partners(inserters, removed) + + if not partner_connections_need_sync(inserters, connections) then + return + end + + M.sync_behavior(inserter) + local master_inserter = inserters[1] + local other_miniloader_inserters = {} + for wire_type, ccds in pairs(connections) do + if not next(ccds) then + for _, ins in ipairs(inserters) do + ins.disconnect_neighbour(wire_type) + end + else + master_inserter.disconnect_neighbour(wire_type) + for _, ccd in ipairs(ccds) do + master_inserter.connect_neighbour(ccd) + if util.is_miniloader_inserter(ccd.target_entity) then + other_miniloader_inserters[#other_miniloader_inserters+1] = ccd.target_entity + end + end + for i=2,#inserters do + local ins = inserters[i] + ins.disconnect_neighbour(wire_type) + ins.connect_neighbour{wire=wire_type, target_entity=master_inserter} + end + end + end + + for _, other_miniloader_inserter in pairs(other_miniloader_inserters) do + M.sync_partner_connections(other_miniloader_inserter) + end +end + +local control_behavior_keys = { + "circuit_condition", "logistic_condition", "connect_to_logistic_network", + "circuit_read_hand_contents", "circuit_mode_of_operation", "circuit_hand_read_mode", "circuit_set_stack_size", "circuit_stack_control_signal", +} + +local function on_wire_added(ev) + for _, entity in ipairs{ev.entity, ev.target_entity} do + if entity.valid and util.is_miniloader_inserter(entity) then + M.sync_partner_connections(entity) + end + end +end + +local function on_wire_removed(ev) + for _, entity in ipairs{ev.entity, ev.target_entity} do + if entity.valid and util.is_miniloader_inserter(entity) then + M.sync_partner_connections(entity, ev) + end + end +end + +function M.on_init() + onwireplaced.on_init() + M.on_load() +end + +function M.on_load() + onwireplaced.on_load() + event.register(onwireplaced.on_wire_added, on_wire_added) + event.register(onwireplaced.on_wire_removed, on_wire_removed) +end + +function M.on_configuration_changed() + onwireplaced.on_configuration_changed() +end + +return M diff --git a/miniloader/compat/pickerextended.lua b/miniloader/compat/pickerextended.lua new file mode 100644 index 00000000..f8599c0b --- /dev/null +++ b/miniloader/compat/pickerextended.lua @@ -0,0 +1,62 @@ +local util = require("lualib.util") + +-- compatibility with PickerExtended mod +local M = {} + + +local function on_dolly_moved(event) + local entity = event.moved_entity + if not util.is_miniloader_inserter(entity) then + return + end + + local old_pos = event.start_pos + local new_pos = entity.position + + -- move inserters + local partners = entity.surface.find_entities_filtered{ + position = old_pos, + type = "inserter", + } + for _, ent in ipairs(partners) do + ent.teleport(new_pos) + end + + local loader = entity.surface.find_entities_filtered{ + position = old_pos, + type = "loader-1x1", + }[1] + + local new_loader = entity.surface.create_entity{ + name = loader.name, + position = new_pos, + direction = loader.direction, + force = loader.force, + type = loader.loader_type, + } + + -- move items on belt + for i=1,2 do + local old_tl = loader.get_transport_line(i) + local new_tl = new_loader.get_transport_line(i) + for j=1, #old_tl do + new_tl.insert_at_back(old_tl[j]) + end + old_tl.clear() + end + + loader.destroy() + + -- move chest + local chest = entity.surface.find_entity("miniloader-target-chest", old_pos) + chest.teleport(new_pos) +end + +function M.on_load() + if remote.interfaces["PickerDollies"] and remote.interfaces["PickerDollies"]["dolly_moved_entity_id"] then + local on_dolly_moved_event = remote.call("PickerDollies", "dolly_moved_entity_id") + script.on_event(on_dolly_moved_event, on_dolly_moved) + end +end + +return M diff --git a/miniloader/configchange.lua b/miniloader/configchange.lua new file mode 100644 index 00000000..f15c1f98 --- /dev/null +++ b/miniloader/configchange.lua @@ -0,0 +1,140 @@ +local miniloader = require "lualib.miniloader" +local util = require "lualib.util" + +local configchange = {} + +local version = require("version") + +local all_migrations = {} + +local function add_migration(migration) + all_migrations[#all_migrations+1] = migration +end + +local forall_miniloaders = miniloader.forall + +add_migration{ + name = "v1_9_4_fix_mined_loaders", + low = {0,0,0}, + high = {1,9,4}, + task = function() + for _, surface in pairs(game.surfaces) do + for _, inserter in pairs(surface.find_entities_filtered{type = "inserter"}) do + if util.is_miniloader_inserter(inserter) then + local loader_name = inserter.name:gsub("%-inserter$", "").."-loader" + if not surface.find_entity(loader_name, inserter.position) then + log("found miniloader-inserter without miniloader-loader at " + ..serpent.line(inserter.position).." on "..surface.name) + local orientation = util.orientation_from_inserters(inserter) + surface.create_entity{ + name = loader_name, + position = inserter.position, + direction = orientation.direction, + force = inserter.force, + type = orientation.type, + create_build_effect_smoke = false, + } + end + end + end + end + end, +} + +add_migration{ + name = "v1_10_0_add_fake_target_chests", + low = {0,0,0}, + high = {1,10,0}, + task = function() + forall_miniloaders(function(surface, entity) + surface.create_entity{ + name = "miniloader-target-chest", + position = entity.position, + force = entity.force, + } + end) + end, +} + +add_migration{ + name = "v1_10_0_add_boblogistics_basic_miniloader", + low = {0,0,0}, + high = {1,10,0}, + task = function() + if game.technology_prototypes["basic-miniloader"] then + for _, f in pairs(game.forces) do + if f.technologies["miniloader"].researched then + f.technologies["basic-miniloader"].researched = true + end + end + end + end, +} + +add_migration{ + name = "v1_11_1_remove_stray_chests", + low = {0,0,0}, + high = {1,11,1}, + task = function() + for _, s in pairs(game.surfaces) do + for _, chest in pairs(s.find_entities_filtered{name = "miniloader-target-chest"}) do + if not next(util.find_miniloaders{surface = s, position = chest.position}) then + chest.destroy() + end + end + end + end, +} + +add_migration{ + name = "v1_12_3_add_global_player_placed_blueprint", + low = {0,0,0}, + high = {1,12,3}, + task = function() + global.player_placed_blueprint = {} + end, +} + +add_migration{ + name = "v1_14_3_add_global_previous_opened_blueprint_for", + low = {0,0,0}, + high = {1,14,3}, + task = function() + global.previous_opened_blueprint_for = {} + end, +} + +add_migration{ + name = "v1_15_4_add_global_split_lane_configuration", + low = {0,0,0}, + high = {1,15,4}, + task = function() + global.split_lane_configuration = {} + end, +} + +function configchange.on_mod_version_changed(old) + old = version.parse(old) + for _, migration in ipairs(all_migrations) do + if version.between(old, migration.low, migration.high) then + log("running world migration "..migration.name) + migration.task() + end + end +end + +-- changes in other mods may affect belt speeds, and hence the required number of inserters +function configchange.fix_inserter_counts() + forall_miniloaders(function(surface, loader) + local inserters = util.get_loader_inserters(loader) + if not next(inserters) then + log("Miniloader at "..loader.position.x..", "..loader.position.y.. + " on surface "..surface.name.." has no inserters.") + loader.destroy() + return + end + miniloader.fixup(inserters[1]) + end) +end + +return configchange diff --git a/miniloader/control.lua b/miniloader/control.lua new file mode 100644 index 00000000..7aef3ade --- /dev/null +++ b/miniloader/control.lua @@ -0,0 +1,459 @@ +local blueprint = require("lualib.blueprint") +local circuit = require("circuit") +local configchange = require("configchange") +local event = require("lualib.event") +local miniloader = require("lualib.miniloader") +local gui = require("gui") +local snapping = require("snapping") +local util = require("lualib.util") + +local compat_pickerextended = require("compat.pickerextended") + +local use_snapping = settings.global["miniloader-snapping"].value + +--[[ + loader_type = "input" + +------------------+ + | | + | P | + | | + | | | + | | | chest dir + | | | + | | v + | | + +------------------+ + D D +-- + loader_type = "output" + +------------------+ + | | + | D D | + | | + | | | + | | | chest dir + | | | + | | v + | | + +------------------+ + P +-- + D: drop positions + P: pickup position +]] + +local function register_bobs_blacklist() + for _, interface_name in ipairs{"bobinserters", "boblogistics"} do + local interface = remote.interfaces[interface_name] + if interface and interface["blacklist_inserter"] then + for entity_name in pairs(game.entity_prototypes) do + if util.is_miniloader_inserter_name(entity_name) then + remote.call(interface_name, "blacklist_inserter", entity_name) + end + end + end + end +end + +-- Event Handlers + +local function on_init() + global.player_placed_blueprint = {} + global.previous_opened_blueprint_for = {} + global.split_lane_configuration = {} + circuit.on_init() + compat_pickerextended.on_load() + gui.on_init() + register_bobs_blacklist() +end + +local function on_load() + circuit.on_load() + compat_pickerextended.on_load() + gui.on_load() +end + +local function on_configuration_changed(configuration_changed_data) + local mod_change = configuration_changed_data.mod_changes["miniloader"] + if mod_change and mod_change.old_version and mod_change.old_version ~= mod_change.new_version then + configchange.on_mod_version_changed(mod_change.old_version) + circuit.on_configuration_changed() + gui.on_configuration_changed() + end + register_bobs_blacklist() + configchange.fix_inserter_counts() +end + +local fast_replace_miniloader_state + +local function on_built_miniloader(entity, orientation, tags) + if not orientation then + orientation = {direction = util.opposite_direction(entity.direction), type = "input"} + end + if not tags + and util.is_output_miniloader_inserter(entity) + and fast_replace_miniloader_state + and fast_replace_miniloader_state.tick == game.tick + and fast_replace_miniloader_state.surface == entity.surface + and fast_replace_miniloader_state.position.x == entity.position.x + and fast_replace_miniloader_state.position.y == entity.position.y + then + tags = { + right_lane_settings = fast_replace_miniloader_state.right_lane_settings, + } + fast_replace_miniloader_state = nil + end + return miniloader.fixup(entity, orientation, tags) +end + +local function on_robot_built(ev) + local entity = ev.created_entity + if util.is_miniloader_inserter(entity) then + on_built_miniloader(entity, util.orientation_from_inserters(entity), ev.tags) + end +end + +local function on_script_built(ev) + local entity = ev.entity + if entity and util.is_miniloader_inserter(entity) then + on_built_miniloader(entity, util.orientation_from_inserters(entity)) + end +end + +local function on_script_revive(ev) + local entity = ev.entity + if entity and util.is_miniloader_inserter(entity) then + on_built_miniloader(entity, util.orientation_from_inserters(entity), ev.tags) + end +end + +local function on_player_built(ev) + local entity = ev.created_entity + + if util.is_miniloader_inserter(entity) then + local orientation = util.orientation_from_inserters(entity) + local loader = on_built_miniloader(entity, orientation, ev.tags) + if use_snapping and not orientation then + -- adjusts direction & loader_type + snapping.snap_loader(loader) + end + elseif use_snapping + and entity.type == "entity-ghost" + and util.is_miniloader_inserter_name(entity.ghost_name) then + -- remove duplicate ghosts + local colocated_ghosts = entity.surface.find_entities_filtered{ + position = entity.position, + ghost_name = entity.ghost_name, + } + for _, ghost in pairs(colocated_ghosts) do + if ghost ~= entity then + ghost.destroy() + end + end + if util.orientation_from_inserters(entity) == nil then + snapping.snap_loader(entity) + end + elseif use_snapping then + snapping.check_for_loaders(ev) + end +end + +local function on_rotated(ev) + local entity = ev.entity + if util.is_miniloader_inserter(entity) then + local miniloader = util.find_miniloaders{ + surface = entity.surface, + position = entity.position, + force = entity.force, + }[1] + miniloader.rotate{ by_player = game.players[ev.player_index] } + util.update_inserters(miniloader) + elseif util.is_miniloader(entity) then + util.update_inserters(entity) + elseif use_snapping then + snapping.check_for_loaders(ev) + end +end + +local function on_miniloader_mined(ev) + local entity = ev.entity + local buffer = ev.buffer and ev.buffer.valid and ev.buffer + local inserters = util.get_loader_inserters(entity) + if buffer and inserters[1] then + local _, item_to_place = next(inserters[1].prototype.items_to_place_this) + buffer.insert{desired_count=1, name=item_to_place.name} + end + for i=1,#inserters do + -- return items to player / robot if mined + if buffer and inserters[i] ~= entity and inserters[i].held_stack.valid_for_read then + buffer.insert(inserters[i].held_stack) + end + inserters[i].destroy() + end + local chest = entity.surface.find_entity("miniloader-target-chest", entity.position) + if chest then + chest.destroy() + end +end + +local function on_miniloader_inserter_mined(ev) + local entity = ev.entity + local buffer = ev.buffer and ev.buffer.valid and ev.buffer + local loader = entity.surface.find_entities_filtered{ + position = entity.position, + type = "loader-1x1", + }[1] + if loader then + if buffer then + for i=1,2 do + local tl = loader.get_transport_line(i) + for j=1,math.min(#tl, 256) do + buffer.insert(tl[j]) + end + tl.clear() + end + end + loader.destroy() + end + + local inserters = util.get_loader_inserters(entity) + if util.is_output_miniloader_inserter(entity) + and global.split_lane_configuration[entity.unit_number] then + fast_replace_miniloader_state = { + position = entity.position, + right_lane_settings = util.capture_settings(inserters[2]), + surface = entity.surface, + tick = ev.tick, + } + global.split_lane_configuration[entity.unit_number] = nil + end + for i=1,#inserters do + if inserters[i] ~= entity then + -- return items in inserter hand to player / robot if mined + if buffer and inserters[i].held_stack.valid_for_read then + buffer.insert(inserters[i].held_stack) + end + inserters[i].destroy() + end + end + + local chest = entity.surface.find_entity("miniloader-target-chest", entity.position) + if chest then + chest.destroy() + end +end + +local function on_mined(ev) + local entity = ev.entity + if util.is_miniloader(entity) then + on_miniloader_mined(ev) + elseif util.is_miniloader_inserter(entity) then + on_miniloader_inserter_mined(ev) + end +end + +local function on_placed_blueprint(ev, player, bp_entities) + if not next(bp_entities) then return end + + global.player_placed_blueprint[ev.player_index] = ev.tick + + local surface = player.surface + local bp_area = blueprint.bounding_box(bp_entities) + local surface_area = util.move_box( + util.rotate_box(bp_area, ev.direction), + ev.position + ) + + local blueprint_contained_miniloader = false + for _, bp_entity in pairs(bp_entities) do + if util.is_miniloader_inserter_name(bp_entity.name) then + blueprint_contained_miniloader = true + break + end + end + + if blueprint_contained_miniloader then + -- remember where we have placed a blueprint so we can check for changes next tick + if not global.placed_blueprint_areas then global.placed_blueprint_areas = {} end + global.placed_blueprint_areas[#global.placed_blueprint_areas+1] = { + surface = surface, + area = surface_area, + } + end +end + +-- A blueprint placed over existing miniloaders in the previous tick +-- may have changed their orientation. +local function check_placed_blueprints_for_miniloaders() + if not global.placed_blueprint_areas or not next(global.placed_blueprint_areas) then return end + for _, data in ipairs(global.placed_blueprint_areas) do + local surface = data.surface + local area = data.area + if surface.valid then + local inserter_entities = surface.find_entities_filtered{ + area = area, + type = "inserter", + } + for _, e in pairs(inserter_entities) do + if util.is_miniloader_inserter(e) then + miniloader.fixup(e, util.orientation_from_inserters(e)) + end + end + end + end + + global.placed_blueprint_areas = {} +end + +local function on_pre_build(ev) + local player_index = ev.player_index + local player = game.players[player_index] + local bp_entities = player.get_blueprint_entities() + if bp_entities then + return on_placed_blueprint(ev, player, bp_entities) + end +end + +local function on_pre_player_mined_item(ev) + local entity = ev.entity + if entity.name == "entity-ghost" and entity.tags and entity.tags.right_lane_settings then + fast_replace_miniloader_state = { + position = entity.position, + right_lane_settings = entity.tags.right_lane_settings, + surface = entity.surface, + tick = ev.tick, + } + end +end + +local function on_player_mined_entity(ev) + on_mined(ev) +end + +local function on_entity_settings_pasted(ev) + local src = ev.source + local dst = ev.destination + if util.is_miniloader_inserter(src) and util.is_miniloader_inserter(dst) then + local src_loader = src.surface.find_entities_filtered{type="loader-1x1",position=src.position}[1] + local dst_loader = dst.surface.find_entities_filtered{type="loader-1x1",position=dst.position}[1] + if src_loader and dst_loader then + dst_loader.loader_type = src_loader.loader_type + util.update_inserters(dst_loader) + end + if util.is_output_miniloader_inserter(src) then + local right_src = util.get_loader_inserters(src)[2] + local right_dst = util.get_loader_inserters(dst)[2] + if right_src and right_dst then + global.split_lane_configuration[dst.unit_number] = global.split_lane_configuration[src.unit_number] + circuit.copy_inserter_settings(right_src, right_dst) + end + end + circuit.sync_behavior(dst) + circuit.sync_filters(dst) + end +end + +local function on_gui_closed(event) + local player = game.get_player(event.player_index) + if event.gui_type == defines.gui_type.item + and event.item + and event.item.is_blueprint + and event.item.is_blueprint_setup() + and player.cursor_stack + and player.cursor_stack.valid_for_read + and player.cursor_stack.is_blueprint + and not player.cursor_stack.is_blueprint_setup() + then + global.previous_opened_blueprint_for[event.player_index] = { + blueprint = event.item, + tick = event.tick, + } + else + global.previous_opened_blueprint_for[event.player_index] = nil + end +end + +local function on_setup_blueprint(ev) + local bp = blueprint.get_blueprint_to_setup(ev.player_index) + if not (bp and bp.valid_for_read) then return end + blueprint.filter_miniloaders(bp, ev.surface) +end + +local function on_marked_for_deconstruction(ev) + local entity = ev.entity + if not (util.is_miniloader(entity) or util.is_miniloader_inserter(entity)) then return end + for _, ent in ipairs(entity.surface.find_entities_filtered{position=entity.position}) do + -- order_deconstruction() causes event handlers to be fired which may invalidate entities + if ent.valid and (util.is_miniloader(ent) or util.is_miniloader_inserter(ent)) then + if not ent.to_be_deconstructed(ent.force) then + ent.order_deconstruction(ent.force) + end + end + end +end + +local function on_canceled_deconstruction(ev) + local entity = ev.entity + for _, ent in ipairs(entity.surface.find_entities_filtered{position=entity.position}) do + if util.is_miniloader(ent) or util.is_miniloader_inserter(ent) then + if ent.to_be_deconstructed(ent.force) then + ent.cancel_deconstruction(ent.force) + end + end + end +end + +local function on_marked_for_upgrade(ev) + local entity = ev.entity + if not util.is_miniloader_inserter(entity) then return end + local main_inserter = entity.surface.find_entity(entity.name, entity.position) + if entity == main_inserter then return end + local force = ev.player_index and game.get_player(ev.player_index).force or entity.force + entity.cancel_upgrade(force) +end + +-- lifecycle events + +script.on_init(on_init) +script.on_load(on_load) +script.on_configuration_changed(on_configuration_changed) + +-- entity events + +event.register(defines.events.on_built_entity, on_player_built) +event.register(defines.events.on_robot_built_entity, on_robot_built) +event.register(defines.events.on_player_rotated_entity, on_rotated) + +event.register(defines.events.on_pre_player_mined_item, on_pre_player_mined_item) +event.register(defines.events.on_player_mined_entity, on_player_mined_entity) +event.register(defines.events.on_robot_mined_entity, on_mined) +event.register(defines.events.on_entity_died, on_mined) +event.register(defines.events.script_raised_built, on_script_built) +event.register(defines.events.script_raised_revive, on_script_revive) +event.register(defines.events.script_raised_destroy, on_mined) + +event.register(defines.events.on_entity_settings_pasted, on_entity_settings_pasted) +event.register(defines.events.on_pre_build, on_pre_build) + +event.register(defines.events.on_player_setup_blueprint, on_setup_blueprint) +event.register(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction) +event.register(defines.events.on_canceled_deconstruction, on_canceled_deconstruction) + +event.register(defines.events.on_marked_for_upgrade, on_marked_for_upgrade) + +event.register(defines.events.on_gui_closed, on_gui_closed) + +event.register(defines.events.on_runtime_mod_setting_changed, function(ev) + if ev.setting == "miniloader-snapping" then + use_snapping = settings.global["miniloader-snapping"].value + elseif ev.setting == "miniloader-lock-stack-sizes" then + local size = settings.global["miniloader-lock-stack-sizes"].value and 1 or 0 + miniloader.forall(function(surface, miniloader) + for _, inserter in pairs(util.get_loader_inserters(miniloader)) do + inserter.inserter_stack_size_override = size + end + end) + end +end) + +event.register(defines.events.on_tick, check_placed_blueprints_for_miniloaders) diff --git a/miniloader/data-updates.lua b/miniloader/data-updates.lua new file mode 100644 index 00000000..25f05069 --- /dev/null +++ b/miniloader/data-updates.lua @@ -0,0 +1,37 @@ +-- boblogistics does some late changes in the data-updates phase, so we need to react to them here + +local function update(prefix) + local loader = data.raw["loader-1x1"][prefix .. "miniloader-loader"] + local loader_item = data.raw["item"][prefix .. "miniloader"] + local filter_loader = data.raw["loader-1x1"][prefix .. "filter-miniloader-loader"] + local filter_loader_item = data.raw["item"][prefix .. "filter-miniloader"] + prefix = string.gsub(prefix, "^ub%-", "") + local base_underground = data.raw["underground-belt"][prefix .. "underground-belt"] + local base_underground_item = data.raw["item"][prefix .. "underground-belt"] + + if loader then loader.speed = base_underground.speed end + if loader_item then loader_item.subgroup = base_underground_item.subgroup end + if filter_loader then filter_loader.speed = base_underground.speed end + if filter_loader_item then filter_loader_item.subgroup = base_underground_item.subgroup end +end + +update("basic-") +update("") +update("fast-") +update("express-") + +if data.raw["item"]["turbo-miniloader"] then + update("turbo-") +end +if data.raw["item"]["ultimate-miniloader"] then + update("ultimate-") +end + +-- catch belt speed changes made by other mods in data stage +for name, ug in pairs(data.raw["underground-belt"]) do + local prefix = name:match("(.*)%-underground%-belt") + local miniloader = prefix and data.raw["loader-1x1"][prefix .. "-miniloader"] + if miniloader then + miniloader.speed = ug.speed + end +end diff --git a/miniloader/data.lua b/miniloader/data.lua new file mode 100644 index 00000000..9094b3bb --- /dev/null +++ b/miniloader/data.lua @@ -0,0 +1,46 @@ +local entities = require "prototypes.entities" +local items = require "prototypes.items" +local recipes = require "prototypes.recipes" +local technologies = require "prototypes.technologies" +local templates = require "prototypes.templates" + +local function create_miniloader(prefix, next_prefix, tech_prereqs, tint, base_underground_name) + base_underground_name = base_underground_name or (prefix .. "underground-belt") + entities.create_loaders(prefix, base_underground_name, tint) + entities.create_inserters(prefix, next_prefix, base_underground_name, tint) + items.create_items(prefix, base_underground_name, tint) + recipes.create_recipes(prefix) + technologies.create_technology(prefix, tech_prereqs, tint) +end + +for prefix, args in pairs(templates) do + create_miniloader(prefix, args.next_prefix, args.prerequisite_techs, args.tint, args.base_underground_name) +end + +-- chute +if settings.startup["miniloader-enable-chute"].value then + local standard_enabled = settings.startup["miniloader-enable-standard"].value + settings.startup["miniloader-enable-standard"].value = true + create_miniloader("chute-", "", {"logistics"}, util.color("808080D1"), "underground-belt") + settings.startup["miniloader-enable-standard"].value = standard_enabled + + data.raw.technology["chute-miniloader"] = nil + data.raw.recipe["chute-miniloader"].enabled = true + data.raw["loader-1x1"]["chute-miniloader-loader"].speed = data.raw["loader-1x1"]["chute-miniloader-loader"].speed / 4 + local inserter = data.raw.inserter["chute-miniloader-inserter"] + inserter.localised_description[5] = + math.floor(data.raw["loader-1x1"]["chute-miniloader-loader"].speed * 480 * 100 + 0.5) / 100 + inserter.rotation_speed = data.raw.inserter["chute-miniloader-inserter"].rotation_speed / 4 + inserter.energy_source = {type="void"} + inserter.energy_per_movement = ".0000001J" + inserter.energy_per_rotation = ".0000001J" + inserter.circuit_wire_max_distance = 0 + if not data.raw.inserter[inserter.next_upgrade] then + inserter.next_upgrade = nil + end + + data.raw.item["chute-filter-miniloader"] = nil + data.raw.recipe["chute-filter-miniloader"] = nil + data.raw["loader-1x1"]["chute-filter-miniloader-loader"] = nil + data.raw.inserter["chute-filter-miniloader-inserter"] = nil +end diff --git a/miniloader/graphics/entity/hr-miniloader-filter-inserter-base.png b/miniloader/graphics/entity/hr-miniloader-filter-inserter-base.png new file mode 100644 index 00000000..ab8d3da1 Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-filter-inserter-base.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-filter-structure-base.png b/miniloader/graphics/entity/hr-miniloader-filter-structure-base.png new file mode 100644 index 00000000..986cbdfd Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-filter-structure-base.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-filter-structure-front-patch.png b/miniloader/graphics/entity/hr-miniloader-filter-structure-front-patch.png new file mode 100644 index 00000000..025049bb Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-filter-structure-front-patch.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-inserter-base.png b/miniloader/graphics/entity/hr-miniloader-inserter-base.png new file mode 100644 index 00000000..c709c645 Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-inserter-base.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-structure-back-patch.png b/miniloader/graphics/entity/hr-miniloader-structure-back-patch.png new file mode 100644 index 00000000..992b4a47 Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-structure-back-patch.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-structure-base.png b/miniloader/graphics/entity/hr-miniloader-structure-base.png new file mode 100644 index 00000000..93b259aa Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-structure-base.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-structure-front-patch.png b/miniloader/graphics/entity/hr-miniloader-structure-front-patch.png new file mode 100644 index 00000000..2d609576 Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-structure-front-patch.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-structure-mask.png b/miniloader/graphics/entity/hr-miniloader-structure-mask.png new file mode 100644 index 00000000..4da5f9aa Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-structure-mask.png differ diff --git a/miniloader/graphics/entity/hr-miniloader-structure-shadow.png b/miniloader/graphics/entity/hr-miniloader-structure-shadow.png new file mode 100644 index 00000000..66713023 Binary files /dev/null and b/miniloader/graphics/entity/hr-miniloader-structure-shadow.png differ diff --git a/miniloader/graphics/entity/miniloader-filter-inserter-base.png b/miniloader/graphics/entity/miniloader-filter-inserter-base.png new file mode 100644 index 00000000..afaac450 Binary files /dev/null and b/miniloader/graphics/entity/miniloader-filter-inserter-base.png differ diff --git a/miniloader/graphics/entity/miniloader-filter-structure-base.png b/miniloader/graphics/entity/miniloader-filter-structure-base.png new file mode 100644 index 00000000..5f70e5c4 Binary files /dev/null and b/miniloader/graphics/entity/miniloader-filter-structure-base.png differ diff --git a/miniloader/graphics/entity/miniloader-filter-structure-front-patch.png b/miniloader/graphics/entity/miniloader-filter-structure-front-patch.png new file mode 100644 index 00000000..82c0698e Binary files /dev/null and b/miniloader/graphics/entity/miniloader-filter-structure-front-patch.png differ diff --git a/miniloader/graphics/entity/miniloader-inserter-base.png b/miniloader/graphics/entity/miniloader-inserter-base.png new file mode 100644 index 00000000..cfe65231 Binary files /dev/null and b/miniloader/graphics/entity/miniloader-inserter-base.png differ diff --git a/miniloader/graphics/entity/miniloader-structure-back-patch.png b/miniloader/graphics/entity/miniloader-structure-back-patch.png new file mode 100644 index 00000000..71af4ae3 Binary files /dev/null and b/miniloader/graphics/entity/miniloader-structure-back-patch.png differ diff --git a/miniloader/graphics/entity/miniloader-structure-base.png b/miniloader/graphics/entity/miniloader-structure-base.png new file mode 100644 index 00000000..0681f32a Binary files /dev/null and b/miniloader/graphics/entity/miniloader-structure-base.png differ diff --git a/miniloader/graphics/entity/miniloader-structure-front-patch.png b/miniloader/graphics/entity/miniloader-structure-front-patch.png new file mode 100644 index 00000000..f0aaca7d Binary files /dev/null and b/miniloader/graphics/entity/miniloader-structure-front-patch.png differ diff --git a/miniloader/graphics/entity/miniloader-structure-mask.png b/miniloader/graphics/entity/miniloader-structure-mask.png new file mode 100644 index 00000000..30b9f23c Binary files /dev/null and b/miniloader/graphics/entity/miniloader-structure-mask.png differ diff --git a/miniloader/graphics/entity/miniloader-structure-shadow.png b/miniloader/graphics/entity/miniloader-structure-shadow.png new file mode 100644 index 00000000..16744816 Binary files /dev/null and b/miniloader/graphics/entity/miniloader-structure-shadow.png differ diff --git a/miniloader/graphics/item/filter-icon-base.png b/miniloader/graphics/item/filter-icon-base.png new file mode 100644 index 00000000..28bf3af3 Binary files /dev/null and b/miniloader/graphics/item/filter-icon-base.png differ diff --git a/miniloader/graphics/item/icon-base.png b/miniloader/graphics/item/icon-base.png new file mode 100644 index 00000000..7515e6bb Binary files /dev/null and b/miniloader/graphics/item/icon-base.png differ diff --git a/miniloader/graphics/item/icon-mask.png b/miniloader/graphics/item/icon-mask.png new file mode 100644 index 00000000..57801c46 Binary files /dev/null and b/miniloader/graphics/item/icon-mask.png differ diff --git a/miniloader/graphics/technology/technology-base.png b/miniloader/graphics/technology/technology-base.png new file mode 100644 index 00000000..3b828a3e Binary files /dev/null and b/miniloader/graphics/technology/technology-base.png differ diff --git a/miniloader/graphics/technology/technology-mask.png b/miniloader/graphics/technology/technology-mask.png new file mode 100644 index 00000000..04a8061f Binary files /dev/null and b/miniloader/graphics/technology/technology-mask.png differ diff --git a/miniloader/gui.lua b/miniloader/gui.lua new file mode 100644 index 00000000..1170ed82 --- /dev/null +++ b/miniloader/gui.lua @@ -0,0 +1,176 @@ +local circuit = require "circuit" +local event = require "lualib.event" +local ontick = require "lualib.ontick" +local util = require "lualib.util" + +-- how often to poll ControlBehavior settings when a miniloader-inserter GUI is open +local POLL_INTERVAL = 15 + +local function create_lane_swap_gui(parent, entity, switch_state) + if parent.miniloader_lane_swap then + parent.miniloader_lane_swap.destroy() + end + local frame = parent.add{ + type = "frame", + name = "miniloader_lane_swap", + direction = "horizontal", + anchor = { + gui = defines.relative_gui_type.inserter_gui, + position = defines.relative_gui_position.top, + }, + } + local inner_frame = frame.add{ + type = "frame", + name = "content", + style = "inside_shallow_frame_with_padding", + } + inner_frame.style.horizontally_stretchable = false + local flow = inner_frame.add{ + type = "flow", + direction = "horizontal", + } + flow.style.horizontal_spacing = 20 + flow.add{ + type = "checkbox", + name = "miniloader_split_lane_checkbox", + caption = {"miniloader-gui.split-lane-configuration"}, + state = switch_state ~= "none", + } + flow.add{ + type = "switch", + name = "miniloader_lane_switch", + allow_none_state = true, + left_label_caption = {"gui-splitter.left"}, + right_label_caption = {"gui-splitter.right"}, + switch_state = switch_state, + } + return frame +end + +local monitored_entities + +local function should_monitor_entity(entity) + return util.is_miniloader_inserter(entity) +end + +local function monitor_open_guis(_) + for k, entity in pairs(monitored_entities) do + if entity.valid then + circuit.sync_filters(entity) + circuit.sync_behavior(entity) + else + monitored_entities[k] = nil + end + end + if not next(monitored_entities) then + ontick.unregister(monitor_open_guis) + end +end + +local opening_filter_gui = false + +local function on_gui_opened(ev) + local entity = ev.entity + if not entity or not should_monitor_entity(entity) then + return + end + monitored_entities[ev.player_index] = entity + ontick.register(monitor_open_guis, POLL_INTERVAL) + + if util.is_output_miniloader_inserter(entity) then + local player = game.get_player(ev.player_index) + local relative = player.gui.relative + local inserters = util.get_loader_inserters(entity) + local switch_state = (entity == inserters[2]) and "right" + or (global.split_lane_configuration[entity.unit_number]) and "left" + or "none" + create_lane_swap_gui(relative, entity, switch_state) + end +end + +local function on_gui_closed(ev) + local entity = ev.entity + + if not entity or not should_monitor_entity(entity) then + return + end + + circuit.sync_behavior(entity) + circuit.sync_filters(entity) + monitored_entities[ev.player_index] = nil + + local player = game.get_player(ev.player_index) + if player.gui.relative.miniloader_lane_swap then + player.gui.relative.miniloader_lane_swap.destroy() + end +end + +local function on_gui_checked_state_changed(ev) + local element = ev.element + if element.name ~= "miniloader_split_lane_checkbox" then return end + local player = game.get_player(ev.player_index) + if player.opened_gui_type ~= defines.gui_type.entity then return end + local entity = player.opened + if not util.is_output_miniloader_inserter(entity) then return end + + local inserters = util.get_loader_inserters(entity) + local main_inserter = inserters[1] + global.split_lane_configuration[main_inserter.unit_number] = element.state and true or nil + element.parent.miniloader_lane_switch.switch_state = element.state and "left" or "none" + player.opened = main_inserter +end + +local function on_gui_switch_state_changed(ev) + local element = ev.element + if element.name ~= "miniloader_lane_switch" then return end + local player = game.get_player(ev.player_index) + if player.opened_gui_type ~= defines.gui_type.entity then return end + local entity = player.opened + if not util.is_output_miniloader_inserter(entity) then return end + + local inserters = util.get_loader_inserters(entity) + local main_inserter = inserters[1] + global.split_lane_configuration[main_inserter.unit_number] = element.switch_state ~= "none" and true or nil + element.parent.miniloader_split_lane_checkbox.state = element.switch_state ~= "none" + player.opened = element.switch_state == "right" and inserters[2] or inserters[1] +end + +local M = {} + +function M.on_init() + global.gui = { + monitored_entities = {}, + } + M.on_load() +end + +function M.on_load() + if not global.gui then + return -- expect on_configuration_changed + end + monitored_entities = global.gui.monitored_entities + if next(monitored_entities) then + ontick.register(monitor_open_guis, POLL_INTERVAL) + end + event.register(defines.events.on_gui_opened, on_gui_opened) + event.register(defines.events.on_gui_closed, on_gui_closed) + event.register(defines.events.on_gui_checked_state_changed, on_gui_checked_state_changed) + event.register(defines.events.on_gui_switch_state_changed, on_gui_switch_state_changed) +end + +function M.on_configuration_changed() + if not global.gui then + global.gui = { + monitored_entities = {}, + } + end + for _, player in pairs(game.players) do + if player.gui.relative.miniloader_lane_swap then + player.opened = nil + player.gui.relative.miniloader_lane_swap.destroy() + end + end + M.on_load() +end + +return M diff --git a/miniloader/info.json b/miniloader/info.json new file mode 100644 index 00000000..a38bbd94 --- /dev/null +++ b/miniloader/info.json @@ -0,0 +1,21 @@ +{ + "name": "miniloader", + "version": "1.15.7", + "factorio_version": "1.1", + "title": "Miniloader", + "author": "Therax", + "homepage": "https://forums.factorio.com/viewtopic.php?f=93&t=54343", + "description": "Compact and UPS-friendly 1x1 loaders. Works with train cargo wagons, circuits, filters, and Bob's faster belts.", + "dependencies": [ + "(?) bobinserters >= 0.17.1", + "? boblogistics >= 0.17.1", + "? FactorioExtended-Plus-Transport >= 0.1.5", + "? Krastorio2 >= 0.9.0", + "? omnimatter_energy >= 3.1.0", + "? RandomFactorioThings >= 1.0.0", + "? UltimateBelts >= 0.16.4", + "? UltimateBelts_Owoshima_And_Pankeko-Mod >= 0.16.4", + "? space-exploration >= 0.1.95", + "(?) SchallBeltConfiguration" + ] +} diff --git a/miniloader/locale/en/miniloader.cfg b/miniloader/locale/en/miniloader.cfg new file mode 100644 index 00000000..d41c336b --- /dev/null +++ b/miniloader/locale/en/miniloader.cfg @@ -0,0 +1,109 @@ +[entity-name] +chute-miniloader=Chute +basic-miniloader=Basic miniloader +miniloader=Miniloader +fast-miniloader=Fast miniloader +express-miniloader=Express miniloader +turbo-miniloader=Turbo miniloader +ultimate-miniloader=Ultimate miniloader +rapid-mk1-miniloader=Rapid miniloader Mk1 +rapid-mk2-miniloader=Rapid miniloader Mk2 +ub-ultra-fast-miniloader=Ultra fast miniloader +ub-extreme-fast-miniloader=Extreme fast miniloader +ub-ultra-express-miniloader=Ultra express miniloader +ub-extreme-express-miniloader=Extreme express miniloader +ub-ultimate-miniloader=Ultimate miniloader +expedited-miniloader=Expedited miniloader +space-miniloader=Space miniloader +deep-space-miniloader=Deep space miniloader +k-miniloader=Superior miniloader +kr-advanced-miniloader=Advanced miniloader +kr-superior-miniloader=Superior miniloader +nuclear-miniloader=Nuclear miniloader +plutonium-miniloader=Plutonium miniloader + +basic-filter-miniloader=Basic filter miniloader +filter-miniloader=Filter miniloader +fast-filter-miniloader=Fast filter miniloader +express-filter-miniloader=Express filter miniloader +turbo-filter-miniloader=Turbo filter miniloader +ultimate-filter-miniloader=Ultimate filter miniloader +rapid-mk1-filter-miniloader=Rapid filter miniloader Mk1 +rapid-mk2-filter-miniloader=Rapid filter miniloader Mk2 +ub-ultra-fast-filter-miniloader=Ultra fast filter miniloader +ub-extreme-fast-filter-miniloader=Extreme fast filter miniloader +ub-ultra-express-filter-miniloader=Ultra express filter miniloader +ub-extreme-express-filter-miniloader=Extreme express filter miniloader +ub-ultimate-filter-miniloader=Ultimate filter miniloader +expedited-filter-miniloader=Expedited filter miniloader +space-filter-miniloader=Space filter miniloader +deep-space-filter-miniloader=Deep space filter miniloader +k-filter-miniloader=Superior filter miniloader +kr-advanced-filter-miniloader=Advanced filter miniloader +kr-superior-filter-miniloader=Superior filter miniloader +nuclear-filter-miniloader=Nuclear filter miniloader +plutonium-filter-miniloader=Plutonium filter miniloader + +[technology-name] +basic-miniloader=Basic miniloader +miniloader=Miniloader +fast-miniloader=Fast miniloader +express-miniloader=Express miniloader +turbo-miniloader=Turbo miniloader +ultimate-miniloader=Ultimate miniloader +rapid-mk1-miniloader=Rapid miniloader Mk1 +rapid-mk2-miniloader=Rapid miniloader Mk2 +ub-ultra-fast-miniloader=Ultra fast miniloader +ub-extreme-fast-miniloader=Extreme fast miniloader +ub-ultra-express-miniloader=Ultra express miniloader +ub-extreme-express-miniloader=Extreme express miniloader +ub-ultimate-miniloader=Ultimate miniloader +expedited-miniloader=Expedited miniloader +space-miniloader=Space miniloader +deep-space-miniloader=Deep space miniloader +k-miniloader=Superior miniloader +kr-advanced-miniloader=Advanced miniloader +kr-superior-miniloader=Superior miniloader +nuclear-miniloader=Nuclear miniloader +plutonium-miniloader=Plutonium miniloader + +[technology-description] +basic-miniloader=Basic miniloader +miniloader=Miniloader +fast-miniloader=Fast miniloader +express-miniloader=Express miniloader +turbo-miniloader=Turbo miniloader +ultimate-miniloader=Ultimate miniloader +rapid-mk1-miniloader=Rapid miniloader Mk1 +rapid-mk2-miniloader=Rapid miniloader Mk2 +ub-ultra-fast-miniloader=Ultra fast miniloader +ub-extreme-fast-miniloader=Extreme fast miniloader +ub-ultra-express-miniloader=Ultra express miniloader +ub-extreme-express-miniloader=Extreme express miniloader +ub-ultimate-miniloader=Ultimate miniloader +expedited-miniloader=Expedited miniloader +space-miniloader=Space miniloader +deep-space-miniloader=Deep space miniloader +k-miniloader=Superior miniloader +kr-advanced-miniloader=Advanced miniloader +kr-superior-miniloader=Superior miniloader +nuclear-miniloader=Advanced miniloader, empowered with Uranium +plutonium-miniloader=Even more advanced miniloader, empowered with Plutonium + +[mod-setting-name] +miniloader-enable-standard=Enable standard miniloaders +miniloader-enable-filter=Enable filter miniloaders +miniloader-enable-chute=Enable chute +miniloader-energy-usage=Miniloaders use energy +miniloader-snapping=Snap miniloaders +miniloader-double-recipes=Double recipes +miniloader-lock-stack-sizes=Lock stack sizes + +[mod-setting-description] +miniloader-energy-usage=When set, miniloaders must be connected to an electric network. +miniloader-snapping=Snap miniloaders to the belts when built or adjacent belts are rotated. +miniloader-double-recipes=Doubles cost and results of recipes, to consume underground belts in pairs. +miniloader-lock-stack-sizes=When true, miniloaders will always move items one at a time. Setting this to false allows unlimited stack sizes to be used. This will reduce UPS consumption, but reduces how consistently items are moved around. + +[miniloader-gui] +split-lane-configuration=Split lane configuration diff --git a/miniloader/locale/ru/miniloader.cfg b/miniloader/locale/ru/miniloader.cfg new file mode 100644 index 00000000..29a7b407 --- /dev/null +++ b/miniloader/locale/ru/miniloader.cfg @@ -0,0 +1,111 @@ +[entity-name] +chute-miniloader=Π‘ΠΊΠ°Ρ‚ +basic-miniloader=ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +fast-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +express-miniloader=ЭкспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +turbo-miniloader=Π’ΡƒΡ€Π±ΠΎ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +rapid-mk1-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК1 +rapid-mk2-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК2 +ub-ultra-fast-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-fast-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultra-express-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-express-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +expedited-miniloader=УскорСнный ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +space-miniloader=ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +deep-space-miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ космоса +k-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-advanced-miniloader=ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-superior-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +nuclear-miniloader=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +plutonium-miniloader=ΠŸΠ»ΡƒΡ‚ΠΎΠ½ΠΈΠ΅Π²Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ + +basic-filter-miniloader=ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +filter-miniloader=Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +fast-filter-miniloader=Быстрый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +express-filter-miniloader=ЭкспрСсс Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +turbo-filter-miniloader=Π’ΡƒΡ€Π±ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ultimate-filter-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +rapid-mk1-filter-miniloader=Быстрый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК1 +rapid-mk2-filter-miniloader=Быстрый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК2 +ub-ultra-fast-filter-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-быстрый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-fast-filter-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ быстрый Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultra-express-filter-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-экспрСсс Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-express-filter-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ-экспрСсс Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultimate-filter-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +expedited-filter-miniloader=УскорСнный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +space-filter-miniloader=ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +deep-space-filter-miniloader=Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ космоса +k-filter-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-advanced-filter-miniloader=ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-superior-filter-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +nuclear-filter-miniloader=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +plutonium-filter-miniloader=ΠŸΠ»ΡƒΡ‚ΠΎΠ½ΠΈΠ΅Π²Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ + +[technology-name] +basic-miniloader=ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +fast-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +express-miniloader=ЭкспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +turbo-miniloader=Π’ΡƒΡ€Π±ΠΎ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +rapid-mk1-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК1 +rapid-mk2-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК2 +ub-ultra-fast-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-fast-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultra-express-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-express-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +expedited-miniloader=УскорСнный ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +space-miniloader=ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +deep-space-miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ космоса +k-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-advanced-miniloader=ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-superior-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +nuclear-miniloader=Π―Π΄Π΅Ρ€Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +plutonium-miniloader=ΠŸΠ»ΡƒΡ‚ΠΎΠ½ΠΈΠ΅Π²Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ + +[technology-description] +basic-miniloader=ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +fast-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +express-miniloader=ЭкспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +turbo-miniloader=Π’ΡƒΡ€Π±ΠΎ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +rapid-mk1-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК1 +rapid-mk2-miniloader=Быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ МК2 +ub-ultra-fast-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-fast-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ быстрый ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultra-express-miniloader=Π£Π»ΡŒΡ‚Ρ€Π°-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-extreme-express-miniloader=Π­ΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ-экспрСсс ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +ub-ultimate-miniloader=ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +expedited-miniloader=УскорСнный ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +space-miniloader=ΠšΠΎΡΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +deep-space-miniloader=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ космоса +k-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-advanced-miniloader=ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +kr-superior-miniloader=ΠŸΡ€Π΅Π²ΠΎΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +nuclear-miniloader=Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ ΡƒΡ€Π°Π½Π° +plutonium-miniloader=Π•Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ плутония + +[mod-setting-name] +miniloader-enable-standard=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ +miniloader-enable-filter=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ +miniloader-enable-chute=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ скат +miniloader-energy-usage=Мини-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠ½Π΅Ρ€Π³ΠΈΡŽ +miniloader-snapping=ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ +miniloader-double-recipes=Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ +miniloader-lock-stack-sizes=Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ‡ΠΊΠΈ + +[mod-setting-description] +miniloader-energy-usage=Если установлСно, ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠΏΠΈΡ‚Π°Π½ΠΈΡŽ. +miniloader-snapping=ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ ΠΊ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°ΠΌ ΠΏΡ€ΠΈ постройкС ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚. +miniloader-double-recipes=Π£Π΄Π²Π°ΠΈΠ²Π°Π΅Ρ‚ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π·Π΅ΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠΈ. +miniloader-lock-stack-sizes=Когда Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, ΠΌΠΈΠ½ΠΈ-ΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΈ всСгда ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π·. Если Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ‡ΠΊΠΈ. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ UPS, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ двиТСния ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ². + +[miniloader-gui] +split-lane-configuration=Настройка раздСлСния полос + + diff --git a/miniloader/lualib/blueprint.lua b/miniloader/lualib/blueprint.lua new file mode 100644 index 00000000..9b18cba4 --- /dev/null +++ b/miniloader/lualib/blueprint.lua @@ -0,0 +1,172 @@ +local util = require("lualib.util") + +local M = {} + +local function inserters_in_position(bp_entities, starting_index) + local out = {} + local x = bp_entities[starting_index].position.x + local y = bp_entities[starting_index].position.y + for i=starting_index,#bp_entities do + local ent = bp_entities[i] + if ent.position.x == x and ent.position.y == y and util.is_miniloader_inserter(ent) then + out[#out+1] = ent + else + break + end + end + return out +end + +local function tag_with_configuration(surface, bp_entity) + local inserters = surface.find_entities_filtered{ type = "inserter", position = bp_entity.position } + if not inserters[1] then return end + if not global.split_lane_configuration[inserters[1].unit_number] then return end + local right_lane_inserter = inserters[2] + if right_lane_inserter and util.is_output_miniloader_inserter(right_lane_inserter) then + bp_entity.tags = { + right_lane_settings = util.capture_settings(right_lane_inserter), + } + end +end + +local function find_slaves(miniloader_inserters, to_remove) + for i = 2, #miniloader_inserters do + local inserter = miniloader_inserters[i] + to_remove[inserter.entity_number] = true + end +end + +local function remove_connections(bp_entity, to_remove_set) + local connections = bp_entity.connections + if not connections then + return + end + for circuit_id, circuit_connections in pairs(connections) do + if not circuit_id:find("^Cu") then -- ignore copper cables on power switch + for wire_name, wire_connections in pairs(circuit_connections) do + local new_wire_connections = {} + for _, connection in ipairs(wire_connections) do + if not to_remove_set[connection.entity_id] then + new_wire_connections[#new_wire_connections+1] = connection + end + end + if next(new_wire_connections) then + circuit_connections[wire_name] = new_wire_connections + else + circuit_connections[wire_name] = nil + end + end + end + end +end + +local function remove_entities(bp_entities, to_remove_set) + local cnt = #bp_entities + for i=1,cnt do + remove_connections(bp_entities[i], to_remove_set) + end + + local w = 1 + for r=1,cnt do + if not to_remove_set[bp_entities[r].entity_number] then + bp_entities[w] = bp_entities[r] + w = w + 1 + end + end + for i=w,cnt do + bp_entities[i] = nil + end +end + +function M.is_setup_bp(stack) + return stack and + stack.valid and + stack.valid_for_read and + stack.is_blueprint and + stack.is_blueprint_setup() +end + +local huge = math.huge +function M.bounding_box(bp_entities) + local left = math.huge + local top = math.huge + local right = -math.huge + local bottom = -math.huge + + for _, e in pairs(bp_entities) do + local pos = e.position + if pos.x < left then left = pos.x - 0.5 end + if pos.y < top then top = pos.y - 0.5 end + if pos.x > right then right = pos.x + 0.5 end + if pos.y > bottom then bottom = pos.y + 0.5 end + end + + local center_x = (right + left) / 2 + local center_y = (bottom + top) / 2 + + return { + left_top = {x = left - center_x, y = top - center_y}, + right_bottom = {x = right - center_x, y = bottom - center_y}, + } +end + +function M.get_blueprint_to_setup(player_index) + local player = game.players[player_index] + + -- normal drag-select + local blueprint_to_setup = player.blueprint_to_setup + if blueprint_to_setup + and blueprint_to_setup.valid_for_read + and blueprint_to_setup.is_blueprint_setup() then + return blueprint_to_setup + end + + -- alt drag-select (skips configuration dialog) + local cursor_stack = player.cursor_stack + if cursor_stack + and cursor_stack.valid_for_read + and cursor_stack.is_blueprint + and cursor_stack.is_blueprint_setup() then + local bp = cursor_stack + while bp.is_blueprint_book do + bp = bp.get_inventory(defines.inventory.item_main)[bp.active_index] + end + return bp + end + + -- update of existing blueprint + local opened_blueprint = global.previous_opened_blueprint_for[player_index] + if opened_blueprint + and opened_blueprint.tick == game.tick + and opened_blueprint.blueprint + and opened_blueprint.blueprint.valid_for_read + and opened_blueprint.blueprint.is_blueprint_setup() then + return opened_blueprint.blueprint + end +end + +function M.filter_miniloaders(bp, surface) + local bp_entities = bp.get_blueprint_entities() + if not bp_entities then + return + end + local to_remove = {} + local i = 1 + while i <= #bp_entities do + local ent = bp_entities[i] + if util.is_miniloader_inserter(ent) then + local overlapping = inserters_in_position(bp_entities, i) + tag_with_configuration(surface, overlapping[1]) + find_slaves(overlapping, to_remove) + i = i + #overlapping + else + i = i + 1 + end + end + if next(to_remove) then + remove_entities(bp_entities, to_remove) + bp.set_blueprint_entities(bp_entities) + end +end + +return M diff --git a/miniloader/lualib/event.lua b/miniloader/lualib/event.lua new file mode 100644 index 00000000..805b9a31 --- /dev/null +++ b/miniloader/lualib/event.lua @@ -0,0 +1,57 @@ +local M = {} + +local event_names = {} +for name, id in pairs(defines.events) do + event_names[id] = name +end + +--[[ + handlers[event_id] = { [handler1] = true, [handler2] = true, ... } +]] +local handlers_for = {} + +local function dispatch(event) + for handler in pairs(handlers_for[event.name]) do + handler(event) + end +end + +function M.register(events, handler) + if type(events) ~= "table" then + events = {events} + end + + for _, event_id in ipairs(events) do + -- debug("registering for " .. (event_names[event_id] or event_id)) + local handlers = handlers_for[event_id] + if not handlers then + handlers = {} + handlers_for[event_id] = handlers + end + + if not next(handlers) then + script.on_event(event_id, dispatch) + end + + handlers[handler] = true + end +end + +function M.unregister(events, handler) + if type(events) ~= "table" then + events = {events} + end + + for _, event_id in ipairs(events) do + -- debug("unregistering for " .. (event_names[event_id] or event_id)) + local handlers = handlers_for[event_id] + if handlers then + handlers[handler] = nil + if not next(handlers) then + script.on_event(event_id, nil) + end + end + end +end + +return M \ No newline at end of file diff --git a/miniloader/lualib/miniloader.lua b/miniloader/lualib/miniloader.lua new file mode 100644 index 00000000..1081ff8d --- /dev/null +++ b/miniloader/lualib/miniloader.lua @@ -0,0 +1,177 @@ +local circuit = require 'circuit' +local util = require 'util' + +local function fast_replace_loader(loader_name, existing_loader) + local last_user = existing_loader.last_user + local new_loader = existing_loader.surface.create_entity{ + name = loader_name, + position = existing_loader.position, + direction = existing_loader.direction, + force = existing_loader.force, + fast_replace = true, + spill = false, + create_build_effect_smoke = false, + type = existing_loader.loader_type, + } + new_loader.last_user = last_user + return new_loader +end + +local function create_new_loader(loader_name, inserter, orientation) + local loader = inserter.surface.create_entity{ + name = loader_name, + position = inserter.position, + direction = orientation.direction, + force = inserter.force, + type = orientation.type, + } + loader.destructible = false + return loader +end + +local function select_connected_loader(loaders) + local selected_loader + for _, loader in pairs(loaders) do + local tl = loader.get_transport_line(1) + if next(tl.output_lines) or next(tl.input_lines) then + selected_loader = loader + break + end + end + if not selected_loader then + selected_loader = loaders[1] + end + for _, loader in pairs(loaders) do + if loader ~= selected_loader then + loader.destroy() + end + end + return selected_loader +end + +local function ensure_loader(inserter, orientation) + local surface = inserter.surface + local position = inserter.position + local loader_name = inserter.name:gsub("inserter$", "loader") + local existing_loaders = util.find_miniloaders{surface=surface, position=position} + local existing_loader = select_connected_loader(existing_loaders) + if existing_loader then + if existing_loader.name ~= loader_name then + return fast_replace_loader(loader_name, existing_loader) + else + existing_loader.loader_type = orientation.type + end + else + return create_new_loader(loader_name, inserter, orientation) + end + return existing_loader +end + +local function create_miniloader_inserter(main_inserter, fast_replace) + local new_inserter = main_inserter.surface.create_entity{ + name = main_inserter.name, + position = main_inserter.position, + direction = main_inserter.direction, + force = main_inserter.force, + fast_replace = fast_replace, + spill = false, + create_build_effect_smoke = false, + } + new_inserter.last_user = main_inserter.last_user + if settings.global["miniloader-lock-stack-sizes"].value then + new_inserter.inserter_stack_size_override = 1 + end + return new_inserter +end + +local function ensure_inserters(desired_count, main_inserter) + local inserter_name = main_inserter.name + local surface = main_inserter.surface + local position = main_inserter.position + + local inserters = surface.find_entities_filtered{ type = "inserter", position = position } + + -- remove extra inserters + for i=#inserters, desired_count+1, -1 do + inserters[i].destroy() + inserters[i] = nil + end + + -- replace existing inserters + for i=1, #inserters do + if inserters[i].name ~= inserter_name then + create_miniloader_inserter(main_inserter, true) + inserters[i].destroy() + end + end + + -- create missing inserters + for i=#inserters+1, desired_count do + create_miniloader_inserter(main_inserter, false) + end + + -- ensure only primary inserter can be damaged + -- note that order may be different after destroy + create + inserters = surface.find_entities_filtered{ type = "inserter", position = position } + inserters[1].destructible = true + for i=2,#inserters do + inserters[i].destructible = false + end + + return inserters +end + +local function ensure_chest(main_inserter) + local chest = main_inserter.surface.find_entity("miniloader-target-chest", main_inserter.position) + if not chest then + chest = main_inserter.surface.create_entity{ + name = "miniloader-target-chest", + position = main_inserter.position, + force = main_inserter.force, + } + chest.destructible = false + end + return chest +end + +local function fixup(main_inserter, orientation, tags) + if not orientation then + local existing_loader = util.find_miniloaders{surface = main_inserter.surface, position = main_inserter.position}[1] + if existing_loader then + orientation = {direction = existing_loader.direction, type = existing_loader.loader_type} + else + orientation = {direction = util.opposite_direction(main_inserter.direction), type = "input"} + end + end + local loader = ensure_loader(main_inserter, orientation) + local inserters = ensure_inserters(util.num_inserters(loader), main_inserter) + circuit.copy_inserter_settings(main_inserter, inserters[1]) + ensure_chest(main_inserter) + + util.update_inserters(loader) + if tags and tags.right_lane_settings then + global.split_lane_configuration[inserters[1].unit_number] = true + util.apply_settings(tags.right_lane_settings, inserters[2]) + end + circuit.sync_behavior(main_inserter) + circuit.sync_filters(main_inserter) + circuit.sync_partner_connections(main_inserter) + + return loader +end + +local function forall(f) + for _, surface in pairs(game.surfaces) do + local miniloaders = util.find_miniloaders{surface = surface} + for _, entity in pairs(miniloaders) do + if entity.valid then + f(surface, entity) + end + end + end +end + +return { + fixup = fixup, + forall = forall, +} diff --git a/miniloader/lualib/ontick.lua b/miniloader/lualib/ontick.lua new file mode 100644 index 00000000..8b1ddc61 --- /dev/null +++ b/miniloader/lualib/ontick.lua @@ -0,0 +1,37 @@ +--[[ + Utilities for managing the on_tick event, periodically invoking + handlers. +]] + +local event = require "lualib.event" + +local M = {} + +local on_tick_handlers = {} +local function on_tick_meta_handler(e) + for handler, interval in pairs(on_tick_handlers) do + if e.tick % interval == 0 then + handler(e) + end + end +end + +function M.register(f, interval) + if not interval then + interval = 12 + end + if interval < 0 then + error("invalid interval") + end + on_tick_handlers[f] = interval + event.register(defines.events.on_tick, on_tick_meta_handler) +end + +function M.unregister(f) + on_tick_handlers[f] = nil + if not next(on_tick_handlers) then + event.unregister(defines.events.on_tick, on_tick_meta_handler) + end +end + +return M diff --git a/miniloader/lualib/onwireplaced.lua b/miniloader/lualib/onwireplaced.lua new file mode 100644 index 00000000..3d8e4129 --- /dev/null +++ b/miniloader/lualib/onwireplaced.lua @@ -0,0 +1,344 @@ +--[[ + Wires can be placed in the following ways: + + 1) player clicks with a green-wire or red-wire + 2) construction robot revives a ghost + 3) a mod script (e.g. Nanobots) revives a ghost + 4) a player clicks with a blueprint over an existing entity + + Relevant events: + on_selected_entity_changed: before 1 + on_player_cursor_stack_changed: after 1 + on_robot_built_entity: 2 + on_built_entity: 3 + on_pre_build: 4 + on_tick: after 4 +]] + +local M = {} + +local blueprint = require "lualib.blueprint" +local event = require "lualib.event" +local util = require "lualib.util" + +M.on_wire_added = script.generate_event_name() +M.on_wire_removed = script.generate_event_name() + +-- how often to poll circuit network connections when the player is holding wire over an entity +local POLL_INTERVAL = 15 + +local monitored_players + +--[[ + CCD === CircuitConnectionDefinition + + selected_ccd_set_for[player_index] = { + [ccd_key] = { + wire = ..., + target_entity = ..., + source_circuit_id = ..., + target_circuit_id = ... + }, + ... + } +]] +local selected_ccd_set_for + +local function ccd_key(ccd) + --do return ccd.wire.."-"..ccd.source_circuit_id.."-"..ccd.target_circuit_id.."-"..ccd.target_entity.unit_number end + return (ccd.wire - 2) + + (ccd.source_circuit_id - 1) * 2 + + (ccd.target_circuit_id - 1) * 4 + + ccd.target_entity.unit_number * 8 +end + +local function ccd_set(entity) + local ccds = entity.circuit_connection_definitions + if not ccds then + return {} + end + + local out = {} + for i=1,#ccds do + out[ccd_key(ccds[i])] = ccds[i] + end + return out +end + +local function diff_sets(old, new) + local removed = {} + for old_key, ccd in pairs(old) do + if not new[old_key] then + removed[#removed+1] = ccd + end + end + + local added = {} + for new_key, ccd in pairs(new) do + if not old[new_key] then + added[#added+1] = ccd + end + end + return removed, added +end + +local function raise_on_wire_added(entity, ccd) + local ev = { + entity = entity, + wire = ccd.wire, + target_entity = ccd.target_entity, + source_circuit_id = ccd.source_circuit_id, + target_circuit_id = ccd.target_circuit_id, + } + script.raise_event(M.on_wire_added, ev) +end + +local function raise_on_wire_removed(entity, ccd) + local ev = { + entity = entity, + wire = ccd.wire, + target_entity = ccd.target_entity, + source_circuit_id = ccd.source_circuit_id, + target_circuit_id = ccd.target_circuit_id, + } + script.raise_event(M.on_wire_removed, ev) +end + +local function check_for_circuit_changes(entity, old, new) + if not old or not new then + return + end + + local removed, added = diff_sets(old, new) + for _, ccd in ipairs(removed) do + raise_on_wire_removed(entity, ccd) + end + for _, ccd in ipairs(added) do + raise_on_wire_added(entity, ccd) + end +end + +local function check_selection_for_player(player_index) + local selected = game.players[player_index].selected + if selected and selected.valid then + local new = ccd_set(selected) + check_for_circuit_changes(selected, selected_ccd_set_for[player_index], new) + selected_ccd_set_for[player_index] = new + end +end + +local function check_selection_for_all(ev) + if ev.tick % POLL_INTERVAL ~= 0 then + return + end + + -- check only players who we believe to have a selected entity + for player_index in pairs(selected_ccd_set_for) do + check_selection_for_player(player_index) + end +end + +local function start_monitoring_selected_entity(player_index) + local selected = game.players[player_index].selected + if selected then + selected_ccd_set_for[player_index] = ccd_set(selected) + event.register(defines.events.on_tick, check_selection_for_all) + return + end + selected_ccd_set_for[player_index] = nil + if not next(selected_ccd_set_for) then + event.unregister(defines.events.on_tick, check_selection_for_all) + end +end + +local function on_selected_entity_changed(ev) + local player_index = ev.player_index + if not monitored_players[player_index] then + return + end + + if ev.last_entity then + local new = ccd_set(ev.last_entity) + check_for_circuit_changes(ev.last_entity, selected_ccd_set_for[player_index], new) + end + + start_monitoring_selected_entity(player_index) +end + +local function stop_monitoring_player_selection(player_index) + -- one last check since we will no longer be monitoring this player's selection + check_selection_for_player(player_index) + + monitored_players[player_index] = nil + if not next(monitored_players) then + event.unregister(defines.events.on_selected_entity_changed, on_selected_entity_changed) + end + + selected_ccd_set_for[player_index] = nil + if not next(selected_ccd_set_for) then + event.unregister(defines.events.on_tick, check_selection_for_all) + end +end + +local function start_monitoring_player_selection(player_index) + monitored_players[player_index] = true + start_monitoring_selected_entity(player_index) + event.register(defines.events.on_selected_entity_changed, on_selected_entity_changed) +end + +local function on_player_cursor_stack_changed(ev) + local player_index = ev.player_index + local cursor_stack = game.players[player_index].cursor_stack + if cursor_stack.valid_for_read then + local name = cursor_stack.name + if name == "red-wire" or name == "green-wire" then + if monitored_players[player_index] then + -- already monitoring, probably placed a wire + check_selection_for_player(player_index) + else + start_monitoring_player_selection(player_index) + end + return + end + end + stop_monitoring_player_selection(player_index) +end + +local function on_built_entity(ev) + local entity = ev.created_entity or ev.entity or ev.destination + if not entity.valid then return end + local ccds = entity.circuit_connection_definitions or {} + for _, ccd in ipairs(ccds) do + raise_on_wire_added(entity, ccd) + end +end + +local function on_entity_mined(ev) + local entity = ev.entity + if entity.valid then + for _, ccd in ipairs(entity.circuit_connection_definitions or {}) do + raise_on_wire_removed(entity, ccd) + end + end +end + +local bp_overplace + +local function check_after_blueprint_placed() + for unit_number, data in pairs(bp_overplace) do + local entity = data.entity + -- any of the entities may have become invalid due to other scripting + if entity.valid then + local new = ccd_set(entity) + check_for_circuit_changes(entity, data.before_ccd_set, new) + end + bp_overplace[unit_number] = nil + end + + event.unregister(defines.events.on_tick, check_after_blueprint_placed) +end + +local function setup_after_blueprint_placed(preexisting_entities) + for i=1,#preexisting_entities do + local entity = preexisting_entities[i] + if entity.unit_number then + bp_overplace[entity.unit_number] = { + entity = entity, + before_ccd_set = ccd_set(entity), + } + end + end + + event.register(defines.events.on_tick, check_after_blueprint_placed) +end + +local function on_pre_build(ev) + local player = game.players[ev.player_index] + local bp_entities = player.get_blueprint_entities() + if not bp_entities or not next(bp_entities) then return end + local bp = player.cursor_stack + local bp_area = blueprint.bounding_box(bp_entities) + local surface_area = util.expand_box( + util.move_box( + util.rotate_box(bp_area, ev.direction), + ev.position + ), + 1 + ) + local preexisting_entities = player.surface.find_entities(surface_area) + -- check again at the end of this tick, after blueprint has been placed + setup_after_blueprint_placed(preexisting_entities) +end + +function M.on_init() + global.onwireplaced = { + monitored_players = {}, + selected_ccd_set_for = {}, + bp_overplace = {}, + } + M.on_load() +end + +function M.on_load() + if not global.onwireplaced then + return -- expect on_configuration_changed to be called + end + + if global.onwireplaced.monitored_players then + monitored_players = global.onwireplaced.monitored_players + if next(monitored_players) then + event.register(defines.events.on_selected_entity_changed, on_selected_entity_changed) + end + end + + if global.onwireplaced.selected_ccd_set_for then + selected_ccd_set_for = global.onwireplaced.selected_ccd_set_for + if next(selected_ccd_set_for) then + event.register(defines.events.on_tick, check_selection_for_all) + end + end + + if global.onwireplaced.bp_overplace then + bp_overplace = global.onwireplaced.bp_overplace + if next(bp_overplace) then + event.register(defines.events.on_tick, check_after_blueprint_placed) + end + end + + event.register(defines.events.on_player_cursor_stack_changed, on_player_cursor_stack_changed) + event.register( + { + defines.events.on_built_entity, + defines.events.on_entity_cloned, + defines.events.on_robot_built_entity, + defines.events.script_raised_built, + defines.events.script_raised_revive, + }, + on_built_entity + ) + event.register( + { + defines.events.on_entity_died, + defines.events.on_player_mined_entity, + defines.events.on_robot_mined_entity, + defines.events.script_raised_destroy, + }, + on_entity_mined + ) + event.register(defines.events.on_pre_build, on_pre_build) +end + +function M.on_configuration_changed() + if not global.onwireplaced then + global.onwireplaced = { + monitored_players = global.monitored_players or {}, + selected_ccd_set_for = global.selected_ccd_set_for or {}, + bp_overplace = {}, + } + global.monitored_players = nil + global.selected_ccd_set_for = nil + end + M.on_load() +end + +return M diff --git a/miniloader/lualib/util.lua b/miniloader/lualib/util.lua new file mode 100644 index 00000000..b0512bbb --- /dev/null +++ b/miniloader/lualib/util.lua @@ -0,0 +1,415 @@ +local util = {} + +-- Position adjustments + +function util.moveposition(position, offset) + return {x=position.x + offset.x, y=position.y + offset.y} +end + +function util.offset(direction, longitudinal, orthogonal) + if direction == defines.direction.north then + return {x=orthogonal, y=-longitudinal} + end + + if direction == defines.direction.south then + return {x=-orthogonal, y=longitudinal} + end + + if direction == defines.direction.east then + return {x=longitudinal, y=orthogonal} + end + + if direction == defines.direction.west then + return {x=-longitudinal, y=-orthogonal} + end +end + +-- BoundingBox utilities + +--[[ + +----------------------+ + | | + | | + | | + | O | + | | + +----------------------+ +]] +function util.rotate_box(box, direction) + local left = box.left_top.x + local top = box.left_top.y + local right = box.right_bottom.x + local bottom = box.right_bottom.y + + if direction == defines.direction.north then + return box + elseif direction == defines.direction.east then + -- 90 degree rotation + return { + left_top = {x=-bottom, y=left}, + right_bottom = {x=-top, y=right}, + } + elseif direction == defines.direction.south then + -- 180 degree rotation + return { + left_top = {x=-right, y=-bottom}, + right_bottom = {x=-left, y=-top}, + } + elseif direction == defines.direction.west then + -- 270 degree rotation + return { + left_top = {x=top, y=-right}, + right_bottom = {x=bottom, y=-left}, + } + else + error('invalid direction passed to rotate_box') + end +end + +function util.move_box(box, offset) + return { + left_top = util.moveposition(box.left_top, offset), + right_bottom = util.moveposition(box.right_bottom, offset), + } +end + +function util.expand_box(box, size) + return { + left_top = { x = box.left_top.x - size, y = box.left_top.y - size }, + right_bottom = { x = box.right_bottom.x + size, y = box.right_bottom.y + size }, + } +end + +function util.entity_key(entity) + return entity.surface.name.."@"..entity.position.x..","..entity.position.y +end + +-- Direction utilities + +function util.is_ns(direction) + return direction == 0 or direction == 4 +end + +function util.is_ew(direction) + return direction == 2 or direction == 6 +end + +function util.opposite_direction(direction) + if direction >= 4 then + return direction - 4 + end + return direction + 4 +end + +-- orientation utilities + +-- hood_side returns the "back" or hood side of a loader or underground belt +function util.hood_side(entity) + if entity.type == "loader-1x1" and entity.loader_type == "output" then + return util.opposite_direction(entity.direction) + end + if entity.type == "underground-belt" and entity.belt_to_ground_type == "output" then + return util.opposite_direction(entity.direction) + end + return entity.direction +end + +-- belt_side returns the "front" side of a loader or underground belt +function util.belt_side(entity) + if entity.type == "loader-1x1" and entity.loader_type == "input" then + return util.opposite_direction(entity.direction) + end + if entity.type == "underground-belt" and entity.belt_to_ground_type == "input" then + return util.opposite_direction(entity.direction) + end + return entity.direction +end + +-- miniloader utilities + +function util.find_miniloaders(params) + params.type = "loader-1x1" + local entities = params.surface.find_entities_filtered(params) + local out = {} + for i=1,#entities do + local ent = entities[i] + if util.is_miniloader(ent) then + out[#out+1] = ent + end + end + return out +end + +function util.is_miniloader(entity) + return string.find(entity.name, "miniloader%-loader$") ~= nil +end + +function util.is_miniloader_inserter(entity) + return util.is_miniloader_inserter_name(entity.name) +end + +function util.is_miniloader_inserter_name(name) + return name:find("miniloader%-inserter$") ~= nil +end + +function util.is_output_miniloader_inserter(inserter) + local orientation = util.orientation_from_inserter(inserter) + return orientation and orientation.type == "output" +end + +-- 60 items/second / 60 ticks/second / 8 items/tile = X tiles/tick +local BELT_SPEED_FOR_60_PER_SECOND = 60/60/8 +function util.num_inserters(entity) + return math.ceil(entity.prototype.belt_speed / BELT_SPEED_FOR_60_PER_SECOND) * 2 +end + +function util.pickup_position(entity) + if entity.loader_type == "output" then + return util.moveposition(entity.position, util.offset(entity.direction, -0.8, 0)) + end + return util.moveposition(entity.position, util.offset(entity.direction, -0.2, 0)) +end + +local moveposition = util.moveposition +local offset = util.offset +-- drop positions for input (belt->chest) = { 0.7, +-0.25}, { 0.9, +-0.25}, {1.1, +-0.25}, {1.3, +-0.25} +-- drop positions for output (chest->belt) = {-0.2, +-0.25}, {-0.0, +-0.25}, {0.1, +-0.25}, {0.3, +-0.25} +function util.drop_positions(entity) + local base_offset = 1.2 + if entity.loader_type == "output" then + base_offset = base_offset - 1 + end + local out = {} + local dir = entity.direction + local p1 = moveposition(entity.position, offset(dir, base_offset, -0.25)) + local p2 = moveposition(p1, offset(dir, 0, 0.5)) + out[1] = p1 + out[2] = p2 + for i=1,3 do + local j = i * 2 + 1 + out[j ] = moveposition(p1, offset(dir, -0.20*i, 0)) + out[j+1] = moveposition(p2, offset(dir, -0.20*i, 0)) + end + for i=0,3 do + local j = i * 2 + 9 + out[j ] = moveposition(p1, offset(dir, -0.20*i, 0)) + out[j+1] = moveposition(p2, offset(dir, -0.20*i, 0)) + end + return out +end + +function util.get_loader_inserters(entity) + local out = {} + for _, e in pairs(entity.surface.find_entities_filtered{ + position = entity.position, + type = "inserter", + }) do + if util.is_miniloader_inserter(e) then + out[#out+1] = e + end + end + return out +end + +local function update_miniloader_ghost(ghost, direction, type) + local position = ghost.position + -- We should normally destroy the ghost and recreate it facing the right direction, + -- but destroying an entity during its on_built_entity handler makes for compatibility + -- headaches. + + -- add offset within tile to inform orientation_from_inserters that this ghost is preconfigured + if type == "input" then + ghost.pickup_position = moveposition(position, offset(direction, 0.25, 0.25)) + ghost.drop_position = moveposition(position, offset(direction, 1, 0.25)) + else + ghost.pickup_position = moveposition(position, offset(direction, -1, 0.25)) + ghost.drop_position = moveposition(position, offset(direction, 0.25, 0.25)) + end +end + +function util.update_miniloader(entity, direction, type) + if entity.type == "entity-ghost" and entity.ghost_type == "inserter" then + return update_miniloader_ghost(entity, direction, type) + end + if entity.loader_type ~= type then + entity.rotate() + end + entity.direction = direction + util.update_inserters(entity) +end + +local function dump_miniloader(entity) + local inserters = util.get_loader_inserters(entity) + local info = {} + for _, inserter in ipairs(inserters) do + info[#info+1] = inserter.unit_number..":"..serpent.line(inserter.get_or_create_control_behavior().circuit_condition) + end + return table.concat(info, "; ") +end + +function util.update_inserters(entity) + local inserters = util.get_loader_inserters(entity) + local pickup = util.pickup_position(entity) + local drop = util.drop_positions(entity) + local direction = entity.direction + local loader_type = entity.loader_type + if loader_type == "input" then + direction = util.opposite_direction(direction) + end + + for i=#inserters,1,-1 do + inserters[i].direction = direction + inserters[i].pickup_position = pickup + inserters[i].drop_position = drop[i] + if loader_type == "input" then + inserters[i].pickup_target = entity + else + inserters[i].drop_target = entity + end + end +end + +function util.select_main_inserter(surface, position) + local inserters = surface.find_entities_filtered{type = "inserter", position = position} + if not next(inserters) then + inserters = surface.find_entities_filtered{ghost_type = "inserter", position = position} + end + + if not next(inserters) then return nil end + for _, inserter in ipairs(inserters) do + if inserter.pickup_target == nil and inserter.drop_target == nil then + return inserter + end + end + return inserters[1] +end + +function util.orientation_from_bp_inserter(bp_inserter) + local position_x = bp_inserter.position.x + local position_y = bp_inserter.position.y + local drop_position_x = bp_inserter.drop_position.x + position_x + local drop_position_y = bp_inserter.drop_position.y + position_y + local pickup_position_x = bp_inserter.pickup_position.x + position_x + local pickup_position_y = bp_inserter.pickup_position.y + position_y + if drop_position_x == position_x or drop_position_y == position_y then + return nil -- freshly placed with no inherited positions + elseif drop_position_x > position_x + 0.5 then + return {direction=defines.direction.east, type="input"} + elseif drop_position_x < position_x - 0.5 then + return {direction=defines.direction.west, type="input"} + elseif drop_position_y > position_y + 0.5 then + return {direction=defines.direction.south, type="input"} + elseif drop_position_y < position_y - 0.5 then + return {direction=defines.direction.north, type="input"} + elseif pickup_position_x > position_x + 0.5 then + return {direction=defines.direction.west, type="output"} + elseif pickup_position_x < position_x - 0.5 then + return {direction=defines.direction.east, type="output"} + elseif pickup_position_y > position_y + 0.5 then + return {direction=defines.direction.north, type="output"} + elseif pickup_position_y < position_y - 0.5 then + return {direction=defines.direction.south, type="output"} + end +end + +function util.orientation_from_inserter(inserter) + if inserter.drop_position.x == inserter.position.x and inserter.drop_position.y == inserter.position.y then + return nil -- freshly placed with no inherited positions + elseif inserter.drop_position.x > inserter.position.x + 0.5 then + return {direction=defines.direction.east, type="input"} + elseif inserter.drop_position.x < inserter.position.x - 0.5 then + return {direction=defines.direction.west, type="input"} + elseif inserter.drop_position.y > inserter.position.y + 0.5 then + return {direction=defines.direction.south, type="input"} + elseif inserter.drop_position.y < inserter.position.y - 0.5 then + return {direction=defines.direction.north, type="input"} + elseif inserter.pickup_position.x > inserter.position.x + 0.5 then + return {direction=defines.direction.west, type="output", is_secondary=inserter.drop_position.y < inserter.position.y} + elseif inserter.pickup_position.x < inserter.position.x - 0.5 then + return {direction=defines.direction.east, type="output", is_secondary=inserter.drop_position.y > inserter.position.y} + elseif inserter.pickup_position.y > inserter.position.y + 0.5 then + return {direction=defines.direction.north, type="output", is_secondary=inserter.drop_position.x > inserter.position.x} + elseif inserter.pickup_position.y < inserter.position.y - 0.5 then + return {direction=defines.direction.south, type="output", is_secondary=inserter.drop_position.x < inserter.position.x} + end +end + +function util.orientation_from_inserters(entity) + local inserter = util.select_main_inserter(entity.surface, entity.position) + return util.orientation_from_inserter(inserter) +end + +function util.rebuild_belt(entity) + local surface = entity.surface + local name = entity.name + local protos = game.get_filtered_entity_prototypes{{filter="type", type=entity.type}} + local temporary_replacement + for proto_name in pairs(protos) do + if proto_name ~= name and proto_name ~= "__self" then + temporary_replacement = proto_name + break + end + end + if not temporary_replacement then return false end + + local last_user = entity.last_user + local params = { + name = temporary_replacement, + position = entity.position, + direction = entity.direction, + force = entity.force, + fast_replace = true, + spill = false, + create_build_effect_smoke = false, + type = entity.type:find("loader") and entity.loader_type + or entity.type == "underground-belt" and entity.belt_to_ground_type, + } + + surface.create_entity(params) + params.name = name + local belt = surface.create_entity(params) + + if belt then + belt.last_user = last_user + return true + else + return false + end +end + +local control_behavior_keys = { + "circuit_condition", "logistic_condition", "connect_to_logistic_network", + "circuit_read_hand_contents", "circuit_mode_of_operation", "circuit_hand_read_mode", "circuit_set_stack_size", "circuit_stack_control_signal", +} + +function util.capture_settings(ghost) + local control_behavior = ghost.get_or_create_control_behavior() + local control_behavior_state = {} + for _, key in pairs(control_behavior_keys) do + control_behavior_state[key] = control_behavior[key] + end + + local filters = {} + for i=1,ghost.filter_slot_count do + filters[i] = ghost.get_filter(i) + end + + return { + control_behavior = control_behavior_state, + filters = filters, + } +end + +function util.apply_settings(settings, inserter) + local limit = math.min(inserter.filter_slot_count, #settings.filters) + for i = 1, limit do + inserter.set_filter(i, settings.filters[i]) + end + local control_behavior = inserter.get_or_create_control_behavior() + for k, v in pairs(settings.control_behavior) do + control_behavior[k] = v + end +end + + +return util diff --git a/miniloader/prototypes/entities.lua b/miniloader/prototypes/entities.lua new file mode 100644 index 00000000..de37a104 --- /dev/null +++ b/miniloader/prototypes/entities.lua @@ -0,0 +1,358 @@ +local empty_sheet = { + filename = "__core__/graphics/empty.png", + priority = "very-low", + width = 1, + height = 1, + frame_count = 1, +} + +data:extend{ + { + name = "miniloader-target-chest", + type = "container", + flags = {"player-creation"}, + collision_box = {{-0.1,-0.1},{0.1,0.1}}, + collision_mask = {}, + inventory_size = 0, + picture = empty_sheet, + }, +} + +local function create_loaders(prefix, base_underground_name, tint) + local loader_name = prefix .. "miniloader" + local filter_loader_name = prefix .. "filter-miniloader" + local name = loader_name .. "-loader" + + local entity = util.table.deepcopy(data.raw["underground-belt"][base_underground_name]) + entity.type = "loader-1x1" + entity.name = name + entity.icons = nil + entity.flags = {"player-creation"} + entity.localised_name = {"entity-name." .. loader_name} + entity.minable = nil + entity.collision_box = {{-0.3, -0.3}, {0.3, 0.3}} + entity.collision_mask = {"transport-belt-layer"} + entity.selection_box = {{0, 0}, {0, 0}} + entity.filter_count = 0 + entity.fast_replaceable_group = "loader" + entity.structure = { + direction_in = { + sheets = { + -- Base + { + filename = "__miniloader__/graphics/entity/miniloader-structure-base.png", + width = 96, + height = 96, + y = 0, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-base.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 0 + } + }, + -- Mask + { + filename = "__miniloader__/graphics/entity/miniloader-structure-mask.png", + width = 96, + height = 96, + y = 0, + tint = tint, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-mask.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 0, + tint = tint, + } + }, + -- Shadow + { + filename = "__miniloader__/graphics/entity/miniloader-structure-shadow.png", + draw_as_shadow = true, + width = 96, + height = 96, + y = 0, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-shadow.png", + draw_as_shadow = true, + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 0, + } + } + } + }, + direction_out = { + sheets = { + -- Base + { + filename = "__miniloader__/graphics/entity/miniloader-structure-base.png", + width = 96, + height = 96, + y = 96, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-base.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192 + } + }, + -- Mask + { + filename = "__miniloader__/graphics/entity/miniloader-structure-mask.png", + width = 96, + height = 96, + y = 96, + tint = tint, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-mask.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192, + tint = tint + } + }, + -- Shadow + { + filename = "__miniloader__/graphics/entity/miniloader-structure-shadow.png", + width = 96, + height = 96, + y = 96, + draw_as_shadow = true, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-shadow.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192, + draw_as_shadow = true, + } + } + } + }, + back_patch = { + sheet = { + filename = "__miniloader__/graphics/entity/miniloader-structure-back-patch.png", + priority = "extra-high", + width = 96, + height = 96, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-back-patch.png", + priority = "extra-high", + width = 192, + height = 192, + scale = 0.5 + } + } + }, + front_patch = { + sheet = { + filename = "__miniloader__/graphics/entity/miniloader-structure-front-patch.png", + priority = "extra-high", + width = 96, + height = 96, + hr_version = { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-front-patch.png", + priority = "extra-high", + width = 192, + height = 192, + scale = 0.5 + } + } + } + } + entity.container_distance = 0 + entity.belt_length = 0.6 + entity.next_upgrade = nil + + local filter_entity = util.table.deepcopy(entity) + filter_entity.name = filter_loader_name .. "-loader" + filter_entity.structure.direction_in.sheets[1].filename = "__miniloader__/graphics/entity/miniloader-filter-structure-base.png" + filter_entity.structure.direction_in.sheets[1].hr_version.filename = "__miniloader__/graphics/entity/hr-miniloader-filter-structure-base.png" + filter_entity.structure.direction_out.sheets[1].filename = "__miniloader__/graphics/entity/miniloader-filter-structure-base.png" + filter_entity.structure.direction_out.sheets[1].hr_version.filename = "__miniloader__/graphics/entity/hr-miniloader-filter-structure-base.png" + filter_entity.structure.front_patch.sheet.filename = "__miniloader__/graphics/entity/miniloader-filter-structure-front-patch.png" + filter_entity.structure.front_patch.sheet.hr_version.filename = "__miniloader__/graphics/entity/hr-miniloader-filter-structure-front-patch.png" + filter_entity.filter_count = 5 + + data:extend{ + entity, + filter_entity, + } +end + +local connector_definitions = circuit_connector_definitions.create( + universal_connector_template, + { + { variation = 24, main_offset = util.by_pixel(-17, 0), shadow_offset = util.by_pixel(10, -0.5), show_shadow = false }, + { variation = 24, main_offset = util.by_pixel(-14, 0), shadow_offset = util.by_pixel(5, -5), show_shadow = false }, + { variation = 24, main_offset = util.by_pixel(-17, 0), shadow_offset = util.by_pixel(-2.5, 6), show_shadow = false }, + { variation = 31, main_offset = util.by_pixel(14, 0), shadow_offset = util.by_pixel(5, -5), show_shadow = false }, + } +) + +local function create_inserters(prefix, next_prefix, base_underground_name, tint) + local loader_name = prefix .. "miniloader" + local name = loader_name .. "-inserter" + local next_upgrade = next_prefix and next_prefix .. "miniloader-inserter" + local filter_loader_name = prefix .. "filter-miniloader" + local filter_name = filter_loader_name .. "-inserter" + local filter_next_upgrade = next_prefix and next_prefix .. "filter-miniloader-inserter" + local base_entity = data.raw["underground-belt"][base_underground_name] + local rounded_items_per_second = math.floor(base_entity.speed * 480 * 100 + 0.5) / 100 + local description = {"", + "[font=default-semibold][color=255,230,192]", {"description.belt-speed"}, ":[/color][/font] ", + rounded_items_per_second, " ", {"description.belt-items"}, {"per-second-suffix"}} + + local loader_inserter = { + type = "inserter", + name = name, + -- this name and icon appear in the power usage UI + localised_name = {"entity-name." .. loader_name}, + localised_description = description, + icons = { + { + icon = "__miniloader__/graphics/item/icon-base.png", + icon_size = 64, + }, + { + icon = "__miniloader__/graphics/item/icon-mask.png", + icon_size = 64, + tint = tint, + }, + }, + minable = { mining_time = 0.1, result = loader_name }, + collision_box = {{-0.2, -0.2}, {0.2, 0.2}}, + collision_mask = {"floor-layer", "object-layer", "water-tile", space_collision_layer}, + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + selection_priority = 50, + allow_custom_vectors = true, + energy_per_movement = ".0000001J", + energy_per_rotation = ".0000001J", + energy_source = { + type = "void", + }, + extension_speed = 1, + rotation_speed = 0.5, + fast_replaceable_group = "miniloader-inserter", + pickup_position = {0, 0}, + insert_position = {0, 0}, + draw_held_item = false, + draw_inserter_arrow = false, + platform_picture = { + sheets = { + -- Base + { + filename = "__miniloader__/graphics/entity/miniloader-inserter-base.png", + width = 96, + height = 96, + y = 96, + hr_version = + { + filename = "__miniloader__/graphics/entity/hr-miniloader-inserter-base.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192 + } + }, + -- Mask + { + filename = "__miniloader__/graphics/entity/miniloader-structure-mask.png", + width = 96, + height = 96, + y = 96, + tint = tint, + hr_version = + { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-mask.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192, + tint = tint + } + }, + -- Shadow + { + filename = "__miniloader__/graphics/entity/miniloader-structure-shadow.png", + width = 96, + height = 96, + y = 96, + draw_as_shadow = true, + hr_version = + { + filename = "__miniloader__/graphics/entity/hr-miniloader-structure-shadow.png", + height = 192, + priority = "extra-high", + scale = 0.5, + width = 192, + y = 192, + draw_as_shadow = true, + } + } + } + }, + hand_base_picture = empty_sheet, + hand_open_picture = empty_sheet, + hand_closed_picture = empty_sheet, + circuit_wire_connection_points = connector_definitions.points, + circuit_connector_sprites = connector_definitions.sprites, + circuit_wire_max_distance = default_circuit_wire_max_distance, + next_upgrade = next_upgrade, + } + + --Space Exploration + if (prefix == "space-") or (prefix == "deep-space-") then + loader_inserter.collision_mask = {"floor-layer", "item-layer", "object-layer", "water-tile"} + end + + if settings.startup["miniloader-energy-usage"].value then + loader_inserter.energy_per_movement = "2kJ" + loader_inserter.energy_per_rotation = "2kJ" + loader_inserter.energy_source = { + type = "electric", + usage_priority = "secondary-input", + } + end + + for _,k in ipairs{"flags", "max_health", "resistances", "vehicle_impact_sound"} do + loader_inserter[k] = base_entity[k] + end + + local filter_loader_inserter = util.table.deepcopy(loader_inserter) + filter_loader_inserter.name = filter_name + filter_loader_inserter.localised_name = {"entity-name." .. filter_loader_name} + filter_loader_inserter.icons[1].icon = "__miniloader__/graphics/item/filter-icon-base.png" + filter_loader_inserter.platform_picture.sheets[1].filename = "__miniloader__/graphics/entity/miniloader-filter-inserter-base.png" + filter_loader_inserter.platform_picture.sheets[1].hr_version.filename = "__miniloader__/graphics/entity/hr-miniloader-filter-inserter-base.png" + filter_loader_inserter.minable.result = filter_loader_name + filter_loader_inserter.filter_count = 5 + filter_loader_inserter.next_upgrade = filter_next_upgrade + + if settings.startup["miniloader-enable-standard"].value then + data:extend{loader_inserter} + end + if settings.startup["miniloader-enable-filter"].value then + data:extend{filter_loader_inserter} + end +end + +return { + create_loaders = create_loaders, + create_inserters = create_inserters, +} \ No newline at end of file diff --git a/miniloader/prototypes/items.lua b/miniloader/prototypes/items.lua new file mode 100644 index 00000000..eb654465 --- /dev/null +++ b/miniloader/prototypes/items.lua @@ -0,0 +1,41 @@ +local function create_items(prefix, base_underground_name, tint) + local name = prefix .. "miniloader" + local filter_name = prefix .. "filter-miniloader" + + local item = util.table.deepcopy(data.raw.item[base_underground_name]) + item.name = name + item.localised_name = {"entity-name." .. name} + item.icon = nil + item.icons = { + { + icon = "__miniloader__/graphics/item/icon-base.png", + icon_size = 64, + }, + { + icon = "__miniloader__/graphics/item/icon-mask.png", + icon_size = 64, + tint = tint, + }, + } + item.order, _ = string.gsub(item.order, "^b%[underground%-belt%]", "e[miniloader]", 1) + item.order, _ = string.gsub(item.order, "^c%[rapid%-transport%-belt%-to%-ground.*%]", "e[miniloader]", 1) + item.place_result = name .. "-inserter" + + local filter_item = util.table.deepcopy(item) + filter_item.name = filter_name + filter_item.localised_name = {"entity-name." .. filter_name} + filter_item.icons[1].icon = "__miniloader__/graphics/item/filter-icon-base.png" + filter_item.order, _ = string.gsub(item.order, "e%[", "f[filter-", 1) + filter_item.place_result = filter_name .. "-inserter" + + if settings.startup["miniloader-enable-standard"].value then + data:extend{item} + end + if settings.startup["miniloader-enable-filter"].value then + data:extend{filter_item} + end +end + +return { + create_items = create_items, +} diff --git a/miniloader/prototypes/recipes.lua b/miniloader/prototypes/recipes.lua new file mode 100644 index 00000000..de934a99 --- /dev/null +++ b/miniloader/prototypes/recipes.lua @@ -0,0 +1,343 @@ +require "util" + +local ingredient_sets = { + -- base + -- 105 I, 27 C + ["miniloader"] = { + { + {"underground-belt", 1}, + {"forging-steel", 2}, + {"mechanism-1", 1}, + }, + { + {"underground-belt", 1}, + {"steel-plate", 8}, + {"fast-inserter", 6}, + }, + }, + -- 358 I, 128 C, 89 O + ["fast-miniloader"] = { + { + {"miniloader", 1}, + {"fast-underground-belt", 1}, + {"gear-2", 2}, + }, + { + {"miniloader", 1}, + {"fast-underground-belt", 1}, + {"stack-inserter", 4}, + }, + }, + -- 628 I, 384 C, 174 O + ["express-miniloader"] = { + { + {"expedited-miniloader", 1}, + {"express-underground-belt", 1}, + {"forging-stainless", 2}, + }, + { + {"fast-miniloader", 1}, + {"express-underground-belt", 1}, + {"stack-inserter", 2}, + }, + }, + + ["chute-miniloader"] = { + { + {"iron-plate", 4} + }, + }, + + -- boblogistics + ["basic-miniloader"] = { + { + {"basic-underground-belt", 1}, + {"burner-inserter", 12}, + }, + }, + ["turbo-miniloader"] = { + { + {"express-miniloader", 1}, + {"turbo-underground-belt", 1}, + {"express-stack-inserter", 4}, + }, + }, + ["ultimate-miniloader"] = { + { + {"turbo-miniloader", 1}, + {"ultimate-underground-belt", 1}, + {"express-stack-inserter", 2}, + }, + }, + + -- FactorioExtended-Plus-Transport + ["rapid-mk1-miniloader"] = { + { + {"express-miniloader", 1}, + {"rapid-transport-belt-to-ground-mk1", 1}, + {"stack-inserter-mk2", 4}, + }, + }, + ["rapid-mk2-miniloader"] = { + { + {"rapid-mk1-miniloader", 1}, + {"rapid-transport-belt-to-ground-mk2", 1}, + {"stack-inserter-mk2", 2}, + }, + }, + + -- Krastorio + ["k-miniloader"] = { + { + {"express-miniloader", 1}, + {"k-underground-belt", 1}, + {"stack-inserter", 2}, + }, + }, + + -- Krastorio2 + ["kr-advanced-miniloader"] = { + { + {"express-miniloader", 1}, + {"kr-advanced-underground-belt", 1}, + {"stack-inserter", 2}, + }, + }, + ["kr-superior-miniloader"] = { + { + {"kr-advanced-miniloader", 1}, + {"kr-superior-underground-belt", 1}, + {"kr-superior-inserter", 2}, + }, + }, + + -- UltimateBelts + ["ub-ultra-fast-miniloader"] = { + { + {"express-miniloader", 1}, + {"ultra-fast-underground-belt", 1}, + {"stack-inserter", 6}, + }, + }, + ["ub-extreme-fast-miniloader"] = { + { + {"ub-ultra-fast-miniloader", 1}, + {"extreme-fast-underground-belt", 1}, + {"stack-inserter", 6}, + }, + }, + ["ub-ultra-express-miniloader"] = { + { + {"ub-extreme-fast-miniloader", 1}, + {"ultra-express-underground-belt", 1}, + {"stack-inserter", 6}, + }, + }, + ["ub-extreme-express-miniloader"] = { + { + {"ub-ultra-express-miniloader", 1}, + {"extreme-express-underground-belt", 1}, + {"stack-inserter", 6}, + }, + }, + ["ub-ultimate-miniloader"] = { + { + {"ub-extreme-express-miniloader", 1}, + {"original-ultimate-underground-belt", 1}, + {"stack-inserter", 6}, + }, + }, + + -- xander-mod + ["expedited-miniloader"] = { + { + {"fast-miniloader", 1}, + {"expedited-underground-belt", 1}, + {"mechanism-2", 1}, + }, + }, + + -- space-exploration + ["space-miniloader"] = { + { + {"se-space-underground-belt", 1}, + {"stack-inserter", 4}, + }, + }, + ["deep-space-miniloader"] = { + { + {"se-deep-space-underground-belt-black", 1}, + {"stack-inserter", 6}, + }, + }, + + -- Random Factorio Things + ["nuclear-miniloader"] = { + { + {"nuclear-underground-belt", 1}, + {"express-miniloader", 1}, + {"nuclear-stack-inserter", 4} + } + }, + ["plutonium-miniloader"] = { + { + {"plutonium-underground-belt", 1}, + {"nuclear-miniloader", 1}, + {"plutonium-stack-inserter", 4} + } + } +} + +if data.raw["inserter"]["turbo-inserter"] then + -- boblogistics inserter overhaul support + ingredient_sets["miniloader"][2][3] = {"inserter", 8} + ingredient_sets["fast-miniloader"][2][3] = {"long-handed-inserter", 8} + ingredient_sets["express-miniloader"][2][3] = {"fast-inserter", 6} + ingredient_sets["turbo-miniloader"][1][3] = {"turbo-inserter", 6} + ingredient_sets["ultimate-miniloader"][1][3] = {"express-inserter", 6} +end + +local previous_miniloader = { + ["fast-"] = "", + ["express-"] = "fast-", + + -- boblogistics + ["turbo-"] = "express-", + ["ultimate-"] = "turbo-", + + -- FactorioExtended-Plus-Transport + ["rapid-mk1-"] = "express-", + ["rapid-mk2-"] = "rapid-mk1-", + + -- Krastorio + ["k-"] = "express-", + + -- Krastorio2 + ["kr-advanced-"] = "express-", + ["kr-superior-"] = "kr-advanced-", + + -- UltimateBelts + ["ub-ultra-fast-"] = "express-", + ["ub-extreme-fast-"] = "ub-ultra-fast-", + ["ub-ultra-express-"] = "ub-extreme-fast-", + ["ub-extreme-express-"] = "ub-ultra-express-", + ["ub-ultimate-"] = "ub-extreme-express-", + + -- xander-mod + ["expedited-"] = "fast-", + + -- Random Factorio Things + ["nuclear-"] = "express-", + ["plutonium"] = "nuclear-" +} + +if data.raw["transport-belt"]["basic-transport-belt"] then + table.insert(ingredient_sets["miniloader"][2], 1, {"basic-miniloader", 1}) + previous_miniloader[""] = "basic-" +end + +if data.raw.item["expedited-transport-belt"] then + previous_miniloader["express-"] = "expedited-" +end + +local filter_inserters = { + ["fast-inserter"] = "filter-inserter", + ["stack-inserter"] = "stack-filter-inserter", + ["express-stack-inserter"] = "express-stack-filter-inserter", + + -- boblogistics overhaul + ["inserter"] = "yellow-filter-inserter", + ["long-handed-inserter"] = "red-filter-inserter", + ["turbo-inserter"] = "turbo-filter-inserter", + ["express-inserter"] = "express-filter-inserter", + + -- FactorioExtended-Plus-Transport + ["stack-inserter-mk2"] = "stack-filter-inserter-mk2", + + -- Krastorio2 + ["kr-superior-inserter"] = "kr-superior-filter-inserter", + + -- Random Factorio Things + ["nuclear-stack-inserter"] = "nuclear-stack-filter-inserter", + ["plutonium-stack-inserter"] = "nuclear-stack-filter-inserter" +} + +-- apply recipe changes due to settings +local should_require_previous = true +if settings.startup["bobmods-logistics-beltrequireprevious"] then + should_require_previous = settings.startup["bobmods-logistics-beltrequireprevious"].value +end +local should_double_recipes = settings.startup["miniloader-double-recipes"].value + +for _, sets in pairs(ingredient_sets) do + for _, set in pairs(sets) do + if not should_require_previous and set[1][1]:find("miniloader$") then + table.remove(set, 1) + end + if should_double_recipes then + for _, ingredient in pairs(set) do + ingredient[2] = ingredient[2] * 2 + end + end + end +end + +local function select_ingredient_set(sets) + for _, set in ipairs(sets) do + local valid = true + for _, ingredient in pairs(set) do + if valid + and not ingredient[1]:find("miniloader") + and not data.raw.item[ingredient[1]] then + valid = false + end + end + if valid then + return set + end + end +end + +local function create_recipes(prefix) + local name = prefix .. "miniloader" + local filter_name = prefix .. "filter-miniloader" + + local recipe = { + type = "recipe", + name = name, + enabled = false, + energy_required = 1, + ingredients = select_ingredient_set(ingredient_sets[name]), + results = {{name, should_double_recipes and 2 or 1}}, + } + + local filter_recipe = util.table.deepcopy(recipe) + filter_recipe.name = filter_name + if previous_miniloader[prefix] and data.raw.item[previous_miniloader[prefix] .. "filter-miniloader"] then + filter_recipe.ingredients[1][1] = previous_miniloader[prefix] .. "filter-miniloader" + end + local inserter_index, inserter_name + for i, ingredient in pairs(recipe.ingredients) do + if ingredient[1]:find("inserter") then + inserter_index = i + inserter_name = ingredient[1] + end + end + filter_recipe.results[1][1] = filter_name + if inserter_name and filter_inserters[inserter_name] then + filter_recipe.ingredients[inserter_index][1] = filter_inserters[inserter_name] + else + filter_recipe = nil + end + + if settings.startup["miniloader-enable-standard"].value then + data:extend{recipe} + end + if filter_recipe and settings.startup["miniloader-enable-filter"].value then + data:extend{filter_recipe} + end +end + +return { + create_recipes = create_recipes, +} diff --git a/miniloader/prototypes/technologies.lua b/miniloader/prototypes/technologies.lua new file mode 100644 index 00000000..77eeb799 --- /dev/null +++ b/miniloader/prototypes/technologies.lua @@ -0,0 +1,42 @@ +require "util" + +local function create_technology(prefix, tech_prereqs, tint) + local name = prefix .. "miniloader" + local filter_name = prefix .. "filter-miniloader" + + local main_prereq = data.raw["technology"][tech_prereqs[1]] + + local effects = {} + if settings.startup["miniloader-enable-standard"].value then + table.insert(effects, { type = "unlock-recipe", recipe = name }) + end + if data.raw.recipe[filter_name] then + table.insert(effects, { type = "unlock-recipe", recipe = filter_name }) + end + + local technology = { + type = "technology", + name = name, + icons = { + { + icon = "__miniloader__/graphics/technology/technology-base.png", + icon_size = 128, + }, + { + icon = "__miniloader__/graphics/technology/technology-mask.png", + icon_size = 128, + tint = tint, + }, + }, + effects = effects, + prerequisites = tech_prereqs, + unit = util.table.deepcopy(main_prereq.unit), + order = main_prereq.order + } + + data:extend{technology} +end + +return { + create_technology = create_technology, +} diff --git a/miniloader/prototypes/templates.lua b/miniloader/prototypes/templates.lua new file mode 100644 index 00000000..4b4f125d --- /dev/null +++ b/miniloader/prototypes/templates.lua @@ -0,0 +1,166 @@ +local templates = { + [""] = { + next_prefix = "fast-", + prerequisite_techs = {"logistics", "fast-inserter", "steel-processing"}, + tint = util.color("ffc340D1"), + }, + ["fast-"] = { + next_prefix = "express-", + prerequisite_techs = {"logistics-2", "miniloader"}, + tint = util.color("e31717D1"), + }, + ["express-"] = { + prerequisite_techs = {"logistics-3", "fast-miniloader"}, + tint = util.color("43c0faD1"), + } +} + +-- Bob's support +if data.raw.item["basic-transport-belt"] then + local hex, alpha + if mods["boblogistics-belt-reskin"] then + basic_hex = "00000000" + else + basic_hex = "7d7d7dD1" + end + templates["basic-"] = { + next_prefix = "", + prerequisite_techs = {"logistics-0"}, + tint = util.color(basic_hex), + } + templates[""].prerequisite_techs = {"logistics", "basic-miniloader"} +end + +if data.raw.item["turbo-transport-belt"] then + local turbo_hex + if mods["boblogistics-belt-reskin"] then + turbo_hex = "df1ee5D1" + else + turbo_hex = "a510e5D1" + end + templates["express-"].next_prefix = "turbo-" + templates["turbo-"] = { + next_prefix = "ultimate-", + prerequisite_techs = {"logistics-4", "express-miniloader"}, + tint = util.color(turbo_hex), + } + templates["ultimate-"] = { + prerequisite_techs = {"logistics-5", "turbo-miniloader"}, + tint = util.color("16f263D1"), + } +end + +-- FactorioExtended-Plus-Transport support +if data.raw.item["rapid-transport-belt-mk2"] then + templates["express-"].next_prefix = "rapid-mk1-" + templates["rapid-mk1-"] = { + next_prefix = "rapid-mk2-", + prerequisite_techs = {"logistics-4", "express-miniloader"}, + tint = util.color("2cd529D1"), + base_underground_name = "rapid-transport-belt-to-ground-mk1", + } + templates["rapid-mk2-"] = { + prerequisite_techs = {"logistics-5", "rapid-mk1-miniloader"}, + tint = util.color("9a2cc9D1"), + base_underground_name = "rapid-transport-belt-to-ground-mk2", + } +end + +-- Krastorio2 support +if data.raw.item["kr-superior-transport-belt"] then + templates["express-"].next_prefix = "kr-advanced-" + templates["kr-advanced-"] = { + prerequisite_techs = {"kr-logistic-4", "express-miniloader"}, + tint = util.color("3ade21D1"), + } + templates["kr-superior-"] = { + prerequisite_techs = {"kr-logistic-5", "kr-advanced-miniloader"}, + tint = util.color("a30bd6D1"), + } +end + +-- RandomFactorioThings and PlutoniumEnergy support +-- note: RFT doesn't add belts and other plutonium machinery without PE mod +if mods["RandomFactorioThings"] then + templates["nuclear-"] = { + prerequisite_techs = {"nuclear-logistics", "express-miniloader"}, + tint = util.color("00ff00") + } + if mods["PlutoniumEnergy"] then + templates["plutonium-"] = { + prerequisite_techs = {"plutonium-logistics", "nuclear-miniloader"}, + tint = util.color("00e1ffde") + } + end +end + +-- UltimateBelts support +if data.raw.technology["ultimate-logistics"] then + -- Support both sets of Ultimate Belt colors + local ub_hexes = {} + if mods["UltimateBelts_Owoshima_And_Pankeko-Mod"] then + -- Pankeko UB colors + ub_hexes.ultra_fast = "2bc24bDB" + ub_hexes.extreme_fast = "c4632fDB" + ub_hexes.ultra_express = "6f2de0D1" + ub_hexes.extreme_express = "3d3af0DB" + ub_hexes.ultimate = "999999D1" + else + -- Standard UB colors + ub_hexes.ultra_fast = "00b30cFF" + ub_hexes.extreme_fast = "e00000FF" + ub_hexes.ultra_express = "3604b5E8" + ub_hexes.extreme_express = "002bffFF" + ub_hexes.ultimate = "00ffddD1" + end + + -- Setup miniloaders + templates["ub-ultra-fast-"] = { + next_prefix = "ub-extreme-fast-", + prerequisite_techs = {"ultra-fast-logistics", "express-miniloader"}, + tint = util.color(ub_hexes.ultra_fast), + base_underground_name = "ultra-fast-underground-belt", + } + templates["ub-extreme-fast-"] = { + next_prefix = "ub-ultra-express-", + prerequisite_techs = {"extreme-fast-logistics", "ub-ultra-fast-miniloader"}, + tint = util.color(ub_hexes.extreme_fast), + base_underground_name = "extreme-fast-underground-belt", + } + templates["ub-ultra-express-"] = { + next_prefix = "ub-extreme-express-", + prerequisite_techs = {"ultra-express-logistics", "ub-extreme-fast-miniloader"}, + tint = util.color(ub_hexes.ultra_express), + base_underground_name = "ultra-express-underground-belt", + } + templates["ub-extreme-express-"] = { + next_prefix = "ub-ultimate-", + prerequisite_techs = {"extreme-express-logistics", "ub-ultra-express-miniloader"}, + tint = util.color(ub_hexes.extreme_express), + base_underground_name = "extreme-express-underground-belt", + } + templates["ub-ultimate-"] = { + prerequisite_techs = {"ultimate-logistics", "ub-extreme-express-miniloader"}, + tint = util.color(ub_hexes.ultimate), + base_underground_name = "original-ultimate-underground-belt", + } +end + +-- space-exploration support +if data.raw.item["se-space-transport-belt"] then + templates["space-"] = { + prerequisite_techs = {"se-space-platform-scaffold"}, + base_underground_name = "se-space-underground-belt", + } +end + +if data.raw.item["se-deep-space-transport-belt-black"] then + templates["deep-space-"] = { + prerequisite_techs = {"se-deep-space-transport-belt"}, + tint = {r=0,g=0,b=0}, + base_underground_name = "se-deep-space-underground-belt-black", + } + templates["space-"]["next_prefix"] = "deep-space-" +end + +return templates diff --git a/miniloader/settings.lua b/miniloader/settings.lua new file mode 100644 index 00000000..fda012d3 --- /dev/null +++ b/miniloader/settings.lua @@ -0,0 +1,52 @@ +data:extend{ + { + type = "bool-setting", + name = "miniloader-energy-usage", + setting_type = "startup", + default_value = true, + order = "miniloader-energy-usage", + }, + + { + type = "bool-setting", + name = "miniloader-snapping", + setting_type = "runtime-global", + default_value = true, + order = "miniloader-snapping", + }, + + { + type = "bool-setting", + name = "miniloader-enable-standard", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "miniloader-enable-filter", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "miniloader-enable-chute", + setting_type = "startup", + default_value = true, + }, + + { + type = "bool-setting", + name = "miniloader-double-recipes", + setting_type = "startup", + default_value = false, + }, + + { + type = "bool-setting", + name = "miniloader-lock-stack-sizes", + setting_type = "runtime-global", + default_value = true, + }, +} \ No newline at end of file diff --git a/miniloader/snapping.lua b/miniloader/snapping.lua new file mode 100644 index 00000000..5cd3de0e --- /dev/null +++ b/miniloader/snapping.lua @@ -0,0 +1,212 @@ +local snapping = {} + +local util = require("lualib.util") + +local belt_types = { + ["loader"] = true, + ["loader-1x1"] = true, + ["splitter"] = true, + ["underground-belt"] = true, + ["transport-belt"] = true +} + +local function is_belt(entity) + return belt_types[entity.type] or entity.type == "entity-ghost" and belt_types[entity.ghost_type] +end + +-- set loader direction according to adjacent belts +-- returns true if the loader and entity are directionally aligned +local function snap_loader_to_target(loader, entity) + local lx = loader.position.x + local ly = loader.position.y + local ldir = loader.direction + + local ex = entity.position.x + local ey = entity.position.y + local edir = entity.direction + + local direction + local type + if util.is_ns(ldir) and lx >= ex-0.6 and lx <= ex+0.6 then + -- loader and entity are aligned vertically + if ly > ey then -- entity to north + if edir == 4 then + direction = 4 + type = "input" + else + direction = 0 + type = "output" + end + else -- entity to south + if edir == 0 then + direction = 0 + type = "input" + else + direction = 4 + type = "output" + end + end + elseif util.is_ew(ldir) and ly >= ey-0.6 and ly <= ey+0.6 then + -- loader and entity are aligned horizontally + if lx > ex then -- entity to west + if edir == 2 then + direction = 2 + type = "input" + else + direction = 6 + type = "output" + end + else -- entity to east + if edir == 6 then + direction = 6 + type = "input" + else + direction = 2 + type = "output" + end + end + end + + if not type then + -- loader and entity are not aligned + return false + end + + if direction ~= ldir or loader.type == "entity-ghost" or loader.loader_type ~= type then + util.update_miniloader(loader, direction, type) + end + return true +end + +-- returns distance between p1 and p2 projected along half-axis identified by dir +local function axis_distance(p1, p2, dir) + if dir == 0 then + return p1.y - p2.y + elseif dir == 2 then + return p2.x - p1.x + elseif dir == 4 then + return p2.y - p1.y + elseif dir == 6 then + return p1.x - p2.x + end +end + +-- Idiot snapping, face away from non belt entity +local function idiot_snap(loader, entity) + local lp = loader.position + local ep = entity.position + local direction = loader.direction + local distance = axis_distance(ep, lp, direction) + if axis_distance(ep, lp, util.opposite_direction(direction)) > distance then + direction = util.opposite_direction(direction) + end + if loader.direction ~= direction or loader.type == "entity-ghost" or loader.loader_type ~= "output" then + util.update_miniloader(loader, direction, "output") + return true + end + return false +end + +-- returns loaders next to a given entity +local function find_loader_by_entity(entity) + local position = entity.position + local box = entity.prototype.selection_box + local area = { + {position.x + box.left_top.x - 1, position.y + box.left_top.y - 1}, + {position.x + box.right_bottom.x + 1, position.y + box.right_bottom.y + 1} + } + local loaders = util.find_miniloaders{ + surface = entity.surface, + area=area, + force=entity.force, + } + local out = {} + for _, loader in ipairs(loaders) do + local lpos = loader.position + if lpos.x ~= position.x or lpos.y ~= position.y then + out[#out+1] = loader + end + end + return out +end + +-- returns the miniloader connected to the belt of `entity`, if it exists +local function find_loader_by_underground_belt(ug_belt) + local ug_dir = util.belt_side(ug_belt) + local loader = util.find_miniloaders{ + surface = ug_belt.surface, + position = util.moveposition(ug_belt.position, util.offset(ug_dir, 1, 0)), + }[1] + if loader and util.hood_side(loader) == ug_dir then + return loader + end + return nil +end + +local function is_snapping_target(entity) + local prototype = entity.type == "entity-ghost" and entity.ghost_prototype or entity.prototype + return prototype.has_flag("player-creation") and not prototype.has_flag("placeable-off-grid") +end + +-- returns entities in front and behind a given loader +local function find_entity_by_loader(loader) + local positions = { + util.moveposition(loader.position, util.offset(loader.direction, 1, 0)), + util.moveposition(loader.position, util.offset(loader.direction, -1, 0)), + } + + local out = {} + for i = 1, #positions do + local neighbors = loader.surface.find_entities_filtered{ + position=positions[i], + force=loader.force, + } + for _, ent in ipairs(neighbors) do + if is_snapping_target(ent) then + out[#out+1] = ent + end + end + end + return out +end + +-- called when entity was rotated or non loader was built +function snapping.check_for_loaders(event) + local entity = event.created_entity or event.entity + if not is_belt(entity) then + return + end + + local loaders = find_loader_by_entity(entity) + for _, loader in ipairs(loaders) do + snap_loader_to_target(loader, entity) + end + + -- also scan other exit of underground belt + if entity.type == "underground-belt" then + local partner = entity.neighbours + if partner then + local loader = find_loader_by_underground_belt(partner) + if loader then + snap_loader_to_target(loader, partner) + end + end + end +end + +-- called when loader was built +function snapping.snap_loader(loader) + local entities = find_entity_by_loader(loader) + for _, ent in ipairs(entities) do + if is_belt(ent) and snap_loader_to_target(loader, ent) then + return + end + end + for _, ent in ipairs(entities) do + if not is_belt(ent) and idiot_snap(loader, ent) then + return + end + end +end + +return snapping diff --git a/miniloader/thumbnail.png b/miniloader/thumbnail.png new file mode 100644 index 00000000..a504fdd8 Binary files /dev/null and b/miniloader/thumbnail.png differ diff --git a/miniloader/version.lua b/miniloader/version.lua new file mode 100644 index 00000000..d83e0b70 --- /dev/null +++ b/miniloader/version.lua @@ -0,0 +1,36 @@ +local version = {} + +function version.parse(str) + local major, minor, patch = string.match(str, "^(%d+)%.(%d+)%.(.+)$") + return {tonumber(major), tonumber(minor), tonumber(patch)} +end + +function version.eq(v1, v2) + for i = 1, 3 do + if v1[i] ~= v2[i] then + return false + end + end + return true +end + +function version.lt(v1, v2) + for i = 1, 3 do + if v1[i] < v2[i] then + return true + elseif v1[i] > v2[i] then + return false + end + end + return false +end + +function version.gteq(v1, v2) + return not version.lt(v1, v2) +end + +function version.between(x, l, h) + return version.gteq(x, l) and version.lt(x, h) +end + +return version \ No newline at end of file diff --git a/miniloader_1.15.7.zip b/miniloader_1.15.7.zip deleted file mode 100644 index c2345ed3..00000000 Binary files a/miniloader_1.15.7.zip and /dev/null differ diff --git a/minime_temp_0.1.0/changelog.txt b/minime_temp/changelog.txt similarity index 100% rename from minime_temp_0.1.0/changelog.txt rename to minime_temp/changelog.txt diff --git a/minime_temp_0.1.0/common.lua b/minime_temp/common.lua similarity index 100% rename from minime_temp_0.1.0/common.lua rename to minime_temp/common.lua diff --git a/minime_temp_0.1.0/control.lua b/minime_temp/control.lua similarity index 100% rename from minime_temp_0.1.0/control.lua rename to minime_temp/control.lua diff --git a/minime_temp_0.1.0/data-final-fixes.lua b/minime_temp/data-final-fixes.lua similarity index 100% rename from minime_temp_0.1.0/data-final-fixes.lua rename to minime_temp/data-final-fixes.lua diff --git a/minime_temp_0.1.0/data-updates.lua b/minime_temp/data-updates.lua similarity index 100% rename from minime_temp_0.1.0/data-updates.lua rename to minime_temp/data-updates.lua diff --git a/minime_temp_0.1.0/data.lua b/minime_temp/data.lua similarity index 100% rename from minime_temp_0.1.0/data.lua rename to minime_temp/data.lua diff --git a/minime_temp_0.1.0/faq.md b/minime_temp/faq.md similarity index 100% rename from minime_temp_0.1.0/faq.md rename to minime_temp/faq.md diff --git a/minime_temp_0.1.0/gui.lua b/minime_temp/gui.lua similarity index 100% rename from minime_temp_0.1.0/gui.lua rename to minime_temp/gui.lua diff --git a/minime_temp_0.1.0/info.json b/minime_temp/info.json similarity index 100% rename from minime_temp_0.1.0/info.json rename to minime_temp/info.json diff --git a/minime_temp_0.1.0/locale/en/en.cfg b/minime_temp/locale/en/en.cfg similarity index 100% rename from minime_temp_0.1.0/locale/en/en.cfg rename to minime_temp/locale/en/en.cfg diff --git a/minime_temp_0.1.0/migrations/00_00_15.lua b/minime_temp/migrations/00_00_15.lua similarity index 100% rename from minime_temp_0.1.0/migrations/00_00_15.lua rename to minime_temp/migrations/00_00_15.lua diff --git a/minime_temp_0.1.0/settings.lua b/minime_temp/settings.lua similarity index 100% rename from minime_temp_0.1.0/settings.lua rename to minime_temp/settings.lua diff --git a/minime_temp_0.1.0/thumbnail.png b/minime_temp/thumbnail.png similarity index 100% rename from minime_temp_0.1.0/thumbnail.png rename to minime_temp/thumbnail.png diff --git a/mining-patch-planner_1.5.7/.gitattributes b/mining-patch-planner_1.5.7/.gitattributes deleted file mode 100644 index 24a8e879..00000000 --- a/mining-patch-planner_1.5.7/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.png filter=lfs diff=lfs merge=lfs -text diff --git a/mining-patch-planner_1.5.7/LICENSE b/mining-patch-planner_1.5.7/LICENSE deleted file mode 100644 index 41d9f245..00000000 --- a/mining-patch-planner_1.5.7/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Rimbas - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/mining-patch-planner_1.5.7/algorithm.lua b/mining-patch-planner_1.5.7/algorithm.lua deleted file mode 100644 index 461eddef..00000000 --- a/mining-patch-planner_1.5.7/algorithm.lua +++ /dev/null @@ -1,318 +0,0 @@ -local enums = require("enums") -local mpp_util = require("mpp_util") -local compatibility = require("compatibility") - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local algorithm = {} - ----@type table -local layouts = {} -algorithm.layouts = layouts -local function require_layout(layout) - layouts[layout] = require("layouts."..layout) - layouts[#layouts+1] = layouts[layout] -end -require_layout("simple") -require_layout("compact") -require_layout("super_compact") -require_layout("sparse") -require_layout("logistics") -require_layout("compact_logistics") -require_layout("sparse_logistics") -require_layout("blueprints") - ----@class State ----@field _callback string -- callback to be used in the tick ----@field tick number ----@field surface LuaSurface ----@field is_space boolean ----@field player LuaPlayer ----@field resources LuaEntity[] Filtered resources ----@field found_resources LuaEntity[] Resource name -> resource category mapping ----@field resource_counts {name: string, count: number}[] Highest count resource first ----@field requires_fluid boolean ----@field mod_version string ---- ----@field _previous_state State? ----@field _collected_ghosts LuaEntity[] ---- ----@field layout_choice string ----@field direction_choice string ----@field miner_choice string ----@field pole_choice string ----@field belt_choice string Belt name ----@field space_belt_choice string ----@field lamp_choice boolean Lamp placement ----@field coverage_choice boolean ----@field logistics_choice string ----@field landfill_choice boolean ----@field space_landfill_choice string ----@field start_choice boolean ----@field deconstruction_choice boolean ----@field pipe_choice string ----@field module_choice string ----@field force_pipe_placement_choice boolean ----@field print_placement_info_choice boolean ----@field display_lane_filling_choice boolean ---- ----@field coords Coords ----@field grid Grid ----@field deconstruct_specification DeconstructSpecification ----@field miner MinerStruct ----@field _preview_rectangle nil|uint64 LuaRendering.draw_rectangle ----@field _lane_info_rendering uint64[] ----@field _render_objects uint64[] LuaRendering objects ----@field blueprint_choice LuaGuiElement ----@field blueprint_inventory LuaInventory ----@field blueprint LuaItemStack ----@field cache EvaluatedBlueprint - ---- Return value for layout callbacks ---- string - name of next callback ---- true - repeat the current callback ---- false - job is finished ----@alias CallbackState string|boolean - ----@param event EventData.on_player_selected_area ----@return State|nil ----@return LocalisedString error status -local function create_state(event) - local state = {} --[[@as State]] - state._callback = "start" - state.tick = 0 - state.mod_version = game.active_mods["mining-patch-planner"] - state._preview_rectangle = nil - state._collected_ghosts = {} - state._render_objects = {} - state._lane_info_rendering = {} - - ---@type PlayerData - local player_data = global.players[event.player_index] - - -- game state properties - state.surface = event.surface - state.is_space = compatibility.is_space(event.surface.index) - state.player = game.players[event.player_index] - - -- fill in player option properties - local player_choices = player_data.choices - for k, v in pairs(player_choices) do - state[k] = util.copy(v) - end - - if state.is_space then - if game.entity_prototypes["se-space-pipe"] then - state.pipe_choice = "se-space-pipe" - else - state.pipe_choice = "none" - end - - state.belt_choice = state.space_belt_choice - end - - state.debug_dump = mpp_util.get_dump_state(event.player_index) - - if state.layout_choice == "blueprints" then - if not player_data.choices.blueprint_choice then - return nil, {"mpp.msg_unselected_blueprint"} - end - local blueprint = player_data.choices.blueprint_choice - -- state.blueprint_inventory = game.create_inventory(1) - -- state.blueprint = state.blueprint_inventory.find_empty_stack() - -- state.blueprint.set_stack(blueprint) - state.cache = player_data.blueprints.cache[blueprint.item_number] - end - - return state -end - ----Filters resource entity list and returns patch coordinates and size ----@param entities LuaEntity[] ----@param available_resource_categories table ----@return Coords @bounds of found resources ----@return LuaEntity[] @Filtered entities ----@return table @key:resource name; value:resource category ----@return boolean @requires fluid ----@return table @resource counts table -local function process_entities(entities, available_resource_categories) - local filtered, found_resources, counts = {}, {}, {} - local x1, y1 = math.huge, math.huge - local x2, y2 = -math.huge, -math.huge - local _, cached_resource_categories = enums.get_available_miners() - local checked, requires_fluid = {}, false - for _, entity in pairs(entities) do - local name, proto = entity.name, entity.prototype - local category = proto.resource_category - - if not checked[name] then - checked[name] = true - if proto.mineable_properties.required_fluid then requires_fluid = true end - end - found_resources[name] = category - if cached_resource_categories[category] and available_resource_categories[category] then - counts[name] = 1 + (counts[name] or 0) - filtered[#filtered+1] = entity - local x, y = entity.position.x, entity.position.y - if x < x1 then x1 = x end - if y < y1 then y1 = y end - if x2 < x then x2 = x end - if y2 < y then y2 = y end - end - end - - local resource_counts = {} - for k, v in pairs(counts) do table.insert(resource_counts, {name=k, count=v}) end - table.sort(resource_counts, function(a, b) return a.count > b.count end) - - local coords = { - x1 = x1, y1 = y1, x2 = x2, y2 = y2, - ix1 = floor(x1), iy1 = floor(y1), - ix2 = ceil(x2), iy2 = ceil(y2), - gx = x1 - 1, gy = y1 - 1, - } - coords.w, coords.h = coords.ix2 - coords.ix1, coords.iy2 - coords.iy1 - return coords, filtered, found_resources, requires_fluid, resource_counts -end - ----@param state State ----@param layout Layout -local function get_miner_categories(state, layout) - if layout.name == "blueprints" then - return state.cache:get_resource_categories() - else - return game.entity_prototypes[state.miner_choice].resource_categories or {} - end -end - ---- Algorithm hook ---- Returns nil if it fails ----@param event EventData.on_player_selected_area -function algorithm.on_player_selected_area(event) - ---@type PlayerData - local player_data = global.players[event.player_index] - local state, err = create_state(event) - if not state then return nil, err end - local layout = layouts[player_data.choices.layout_choice] - - if state.miner_choice == "none" then - return nil, {"msg_miner_err_3"} - end - - local layout_categories = get_miner_categories(state, layout) - local coords, filtered, found_resources, requires_fluid, resource_counts = process_entities(event.entities, layout_categories) - state.coords = coords - state.resources = filtered - state.found_resources = found_resources - state.requires_fluid = requires_fluid - state.resource_counts = resource_counts - - if #state.resources == 0 then - for resource, category in pairs(state.found_resources) do - if not layout_categories[category] then - local miner_name = game.entity_prototypes[state.miner_choice].localised_name - if layout.name == "blueprints" then - miner_name = {"mpp.choice_none"} - for k, v in pairs(state.cache.miners) do - miner_name = game.entity_prototypes[k].localised_name - break - end - end - local resource_name = game.entity_prototypes[resource].localised_name - return nil, {"", {"mpp.msg_miner_err_2_1"}, " \"", miner_name, "\" ", {"mpp.msg_miner_err_2_2"}, " \"", resource_name, "\""} - end - end - - return nil, {"mpp.msg_miner_err_0"} - end - - if player_data.last_state then - local renderables = player_data.last_state._render_objects - - local old_resources = player_data.last_state.resources - - local same = true - for i, v in pairs(old_resources) do - if v ~= filtered[i] then - same = false - break - end - end - - if same then - for _, id in ipairs(renderables) do - rendering.destroy(id) - end - state._previous_state = player_data.last_state - else - local ttl = mpp_util.get_display_duration(event.player_index) - for _, id in ipairs(renderables) do - if rendering.is_valid(id) then - rendering.set_time_to_live(id, ttl) - end - end - end - player_data.last_state = nil - end - - local validation_result, error = layout:validate(state) - if validation_result then - layout:initialize(state) - state.player.play_sound{path="utility/blueprint_selection_ended"} - - -- "Progress" bar - local c = state.coords - state._preview_rectangle = rendering.draw_rectangle{ - surface=state.surface, - left_top={state.coords.ix1, state.coords.iy1}, - right_bottom={state.coords.ix1 + c.w, state.coords.iy1 + c.h}, - filled=false, color={0, 0.8, 0.3, 1}, - width = 8, - draw_on_ground = true, - players={state.player}, - } - - return state - else - return nil, error - end -end - ----Sets renderables timeout ----@param player_data PlayerData -function algorithm.on_gui_open(player_data) - local last_state = player_data.last_state - if last_state == nil or last_state._render_objects == nil then return end - - local ttl = mpp_util.get_display_duration(last_state.player.index) - if ttl > 0 then - for _, id in ipairs(last_state._render_objects) do - if rendering.is_valid(id) then - rendering.set_time_to_live(id, 0) - end - end - end -end - ----Sets renderables timeout ----@param player_data PlayerData -function algorithm.on_gui_close(player_data) - local last_state = player_data.last_state - if last_state == nil or last_state._render_objects == nil then return end - - local ttl = mpp_util.get_display_duration(last_state.player.index) - if ttl > 0 then - for _, id in ipairs(last_state._render_objects) do - if rendering.is_valid(id) then - rendering.set_time_to_live(id, ttl) - end - end - else - for _, id in ipairs(last_state._render_objects) do - rendering.destroy(id) - end - end -end - -return algorithm diff --git a/mining-patch-planner_1.5.7/blacklist.lua b/mining-patch-planner_1.5.7/blacklist.lua deleted file mode 100644 index 9ef22a1a..00000000 --- a/mining-patch-planner_1.5.7/blacklist.lua +++ /dev/null @@ -1,12 +0,0 @@ -local b = {} - -b["robotMiningSite-extra"] = true -b["robotMiningSite-large"] = true -b["robotMiningSite-new"] = true -b["invisible-logistic-chest-storage"] = true -b["robot-chest-provider"] = true -b["robot-chest-requester"] = true -b["construction-recaller"] = true -b["logistic-recaller"] = true - -return b diff --git a/mining-patch-planner_1.5.7/blueprintmeta.lua b/mining-patch-planner_1.5.7/blueprintmeta.lua deleted file mode 100644 index 16fd8eaa..00000000 --- a/mining-patch-planner_1.5.7/blueprintmeta.lua +++ /dev/null @@ -1,123 +0,0 @@ -local mpp_util = require("mpp_util") - ----@class EvaluatedBlueprint ----@field valid boolean Are all blueprint entities valid ----@field w number ----@field h number ----@field tw number Runtime transposed width ----@field th number Runtime transposed height ----@field ox number Start offset x ----@field oy number Start offset y ----@field entities BlueprintEntityEx[] All entities in the blueprint ----@field entity_names table ----@field miners table List of used miner types -local bp_meta = {} -bp_meta.__index = bp_meta - ----@class BlueprintEntityEx : BlueprintEntity ----@field capstone_x number ----@field capstone_y number - ----Blueprint analysis data ----@param bp LuaItemStack ----@return EvaluatedBlueprint -function bp_meta:new(bp) - ---@type EvaluatedBlueprint - local new = setmetatable({}, self) - - new.valid = true - new.w, new.h = bp.blueprint_snap_to_grid.x, bp.blueprint_snap_to_grid.y - if bp.blueprint_position_relative_to_grid then - new.ox, new.oy = bp.blueprint_position_relative_to_grid.x, bp.blueprint_position_relative_to_grid.y - else - new.ox, new.oy = 0, 0 - end - new.entities = bp.get_blueprint_entities() or {} - new.entity_names = bp.cost_to_build - - new:evaluate_tiling() - new:evaluate_miners() - - return new -end - ----Marks capstone BlueprintEntities -function bp_meta:evaluate_tiling() - local sw, sh = self.w, self.h - local buckets_x, buckets_y = {}, {} - - for i, ent in pairs(self.entities) do - local x, y = ent.position.x, ent.position.y - if not buckets_x[x] then buckets_x[x] = {} end - table.insert(buckets_x[x], ent) - if not buckets_y[y] then buckets_y[y] = {} end - table.insert(buckets_y[y], ent) - end - - for _, bucket in pairs(buckets_x) do - for i = 1, #bucket-1 do - local e1 = bucket[i] ---@type BlueprintEntity - local e1x = e1.position.x - for j = 2, #bucket do - local e2 = bucket[j] ---@type BlueprintEntity - if e1x + sh == e2.position.x or e1x - sh == e2.position.x then - e2.capstone_x = true - end - end - end - end - - for _, bucket in pairs(buckets_y) do - for i = 1, #bucket-1 do - local e1 = bucket[i] ---@type BlueprintEntity - local e1y = e1.position.y - for j = 2, #bucket do - local e2 = bucket[j] ---@type BlueprintEntity - if e1y + sh == e2.position.y or e1y - sh == e2.position.y then - e2.capstone_y = true - end - end - end - end -end - -function bp_meta:evaluate_miners() - local miners = {} - self.miners = miners - for _, ent in pairs(self.entities) do - local name = ent.name - if game.entity_prototypes[name].type == "mining-drill" then - local proto = game.entity_prototypes[name] - miners[name] = mpp_util.miner_struct(proto) - end - end -end - -function bp_meta:check_valid() - for k, v in pairs(self.entity_names) do - if not game.entity_prototypes[k] and not game.item_prototypes[k] then - self.valid = false - return false - end - end - self.valid = true - return true -end - ----Returns resource categories for a blueprint ----@return table -function bp_meta:get_resource_categories() - local categories = {} - for miner_name, struct in pairs(self.miners) do - ---@type LuaEntityPrototype - local proto = game.entity_prototypes[miner_name] - if proto.resource_categories then - for cat, bool in pairs(proto.resource_categories) do - categories[cat] = bool - end - end - end - return categories -end - -return bp_meta diff --git a/mining-patch-planner_1.5.7/builder.lua b/mining-patch-planner_1.5.7/builder.lua deleted file mode 100644 index 79b2ac79..00000000 --- a/mining-patch-planner_1.5.7/builder.lua +++ /dev/null @@ -1,71 +0,0 @@ -local mpp_util = require("mpp_util") -local coord_revert = mpp_util.revert -local builder = {} - ----@class GhostSpecification : LuaSurface.create_entity_param ----@field grid_x number Grid x coordinate ----@field grid_y number Grid x coordinate ----@field padding_pre number ----@field padding_post number ----@field thing string Enum for the grid - ----@class PowerPoleGhostSpecification : GhostSpecification ----@field no_light boolean ----@field ix number Pole x index ----@field iy number Poly y index - ---- Builder for a convenience function that automatically translates ---- internal grid state for a surface.create_entity call ----@param state State -builder.create_entity_builder = function(state) - local c = state.coords - local grid = state.grid - local DIR = state.direction_choice - local surface = state.surface - local gx, gy, tw, th = c.gx, c.gy, c.tw, c.th - local direction_conv = mpp_util.bp_direction[state.direction_choice] - local collected_ghosts = state._collected_ghosts - - ---@param ghost GhostSpecification - return function(ghost) - ghost.raise_built = true - ghost.player = state.player - ghost.force = state.player.force - ghost.inner_name=ghost.name - ghost.name="entity-ghost" - ghost.position=coord_revert(gx, gy, DIR, ghost.grid_x, ghost.grid_y, tw, th) - ghost.direction=direction_conv[ghost.direction or defines.direction.north] - local result = surface.create_entity(ghost) - if result then - grid:build_specification(ghost) - collected_ghosts[#collected_ghosts+1] = result - end - return result - end -end - ---- Builder for a convenience function that automatically translates ---- internal grid state for a surface.create_entity call ----@param state State -builder.create_manual_entity_builder = function(state) - local c = state.coords - local DIR = state.direction_choice - local surface = state.surface - local gx, gy, tw, th = c.gx, c.gy, c.tw, c.th - local direction_conv = mpp_util.bp_direction[state.direction_choice] - - ---@param ghost GhostSpecification - return function(ghost) - ghost.raise_built = true - ghost.player = state.player - ghost.force = state.player.force - ghost.inner_name=ghost.name - ghost.name="entity-ghost" - ghost.position=coord_revert(gx, gy, DIR, ghost.grid_x, ghost.grid_y, tw, th) - ghost.direction=direction_conv[ghost.direction or defines.direction.north] - return surface.create_entity(ghost) - end -end - - -return builder diff --git a/mining-patch-planner_1.5.7/changelog.txt b/mining-patch-planner_1.5.7/changelog.txt deleted file mode 100644 index 19f83e9a..00000000 --- a/mining-patch-planner_1.5.7/changelog.txt +++ /dev/null @@ -1,239 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.5.7 -Date: 2023-09-23 - Translation: - - Added Polish translation (provided by WukuWukaCiapanos) ---------------------------------------------------------------------------------------------------- -Version: 1.5.6 -Date: 2023-09-14 - Bugfixes: - - Added padding to the start of tooltips as a workaround to avoid text getting cut off ---------------------------------------------------------------------------------------------------- -Version: 1.5.5 -Date: 2023-08-27 - Bugfixes: - - Fixed a crash in lane filling overlay when using Super Compact mode on irregular resource patches ---------------------------------------------------------------------------------------------------- -Version: 1.5.4 -Date: 2023-07-31 - Bugfixes: - - Fixed active overlays not clearing after a migration ---------------------------------------------------------------------------------------------------- -Version: 1.5.3 -Date: 2023-07-28 - Bugfixes: - - Fixed migrations breaking in saves with removed players ---------------------------------------------------------------------------------------------------- -Version: 1.5.2 -Date: 2023-07-25 - Features: - - Added a belt throughput estimate to lane saturation overlay ---------------------------------------------------------------------------------------------------- -Version: 1.5.1 -Date: 2023-07-10 - Bugfixes: - - Fixed a crash in lane filling overlay when using modules with no speed ---------------------------------------------------------------------------------------------------- -Version: 1.5.0 -Date: 2023-07-05 - Features: - - Added a simple placement info printout - - Added a lane filling overlay for belt layouts - - Proper deconstruction only in places where entity ghosts were placed - - When retrying on the same patch all previous ghosts are automatically removed - - Overfill mode uses more of mining drill's external area - - Added a Sparse Logistics layout - Bugfixes: - - Fixed a bug in drill placement logic that caused suboptimal layouts in overfill mode - - Fixed the planner selecting tile ghosts - - Fixed GUI and cursor mismatch when using Space Exploration Satellite View ---------------------------------------------------------------------------------------------------- -Version: 1.4.3 -Date: 2023-04-02 - Bugfixes: - - Fixed a crash when updating the mod from versions before 1.3.0 ---------------------------------------------------------------------------------------------------- -Version: 1.4.2 -Date: 2023-03-28 - Bugfixes: - - Fixed a crash when using Blueprint Sandboxes mod together with Space Exploration ---------------------------------------------------------------------------------------------------- -Version: 1.4.1 -Date: 2023-03-25 - Bugfixes: - - Fixed a crash when launching custom scenarios ---------------------------------------------------------------------------------------------------- -Version: 1.4.0 -Date: 2023-02-06 - Features: - - Added a pipe type option. Pipes are placed automatically if resource requires a fluid. - - Added an option to force pipe placement in advanced settings. - - Added sound effects. - - Updated icons for misc options. - - Space Exploration compatibility when placing patches in space. Added space transport belt and scaffold type options. - Optimizations: - - Internal layout handler refactoring ---------------------------------------------------------------------------------------------------- -Version: 1.3.5 -Date: 2023-01-18 - Bugfixes: - - Fixed a crash in Compact Logistics layout ---------------------------------------------------------------------------------------------------- -Version: 1.3.4 -Date: 2022-12-31 - Bugfixes: - - Fixed a crash when playing with Industrial Revolution 3. - Features: - - Added an advanced option to show non-electric powered miners. - No warranties about usability of generated layouts. ---------------------------------------------------------------------------------------------------- -Version: 1.3.3 -Date: 2022-11-24 - Features: - - Added a Module fill option - Bugfixes: - - Made shortcut icon more distinct from "Blueprint". ---------------------------------------------------------------------------------------------------- -Version: 1.3.2 -Date: 2022-11-14 - Bugfixes: - - Clicking a blueprint button while in add mode exits to placement mode - - Fixed beacons in blueprints not getting placed in certain placements - - Fixed inserter settings in blueprints not being preserved ---------------------------------------------------------------------------------------------------- -Version: 1.3.1 -Date: 2022-11-04 - Features: - - Moved all miscellaneous settings from being hidden behind advanced options - Bugfixes: - - Fixed crash because of a missing flags check in miner guard clause - - Fixed migration logic on mod changes - - Pyanodons compatibility (more so to support Py miners in custom blueprints) - - Fixed splitter settings in blueprints not being preserved - - Fixed Super Compact layout sometimes missing single resource tiles ---------------------------------------------------------------------------------------------------- -Version: 1.3.0 -Date: 2022-10-11 - Features: - - Blueprint support - - Omit deconstruction step option - - Better coverage tuning option ---------------------------------------------------------------------------------------------------- -Version: 1.2.11 -Date: 2022-07-22 - Bugfixes: - - Fixed missing sanity check when changing layouts ---------------------------------------------------------------------------------------------------- -Version: 1.2.10 -Date: 2022-07-20 - Bugfixes: - - Fixed crash in Logistics layout - - Fixed edge case crash due to patch shape in Compact layout ---------------------------------------------------------------------------------------------------- -Version: 1.2.9 -Date: 2022-06-29 - Translation: - - Added Ukrainian translation (provided by Deps Exploits) ---------------------------------------------------------------------------------------------------- -Version: 1.2.8 -Date: 2022-06-11 - Bugfixes: - - Fixed regression with Cursed Filter Mining Drill mod - Translation: - - Added Russian translation (provided by Aquilo) ---------------------------------------------------------------------------------------------------- -Version: 1.2.7 -Date: 2022-06-09 - Features: - - Adden an option to omit landfill placement. Will still place ghosts for entities. - Bugfixes: - - Fixed crash regression caused by a flag check on entity prototypes - - Fixed crash in super compact layout with missing lanes ---------------------------------------------------------------------------------------------------- -Version: 1.2.6 -Date: 2022-06-09 - Bugfixes: - - Nullius compatibility ---------------------------------------------------------------------------------------------------- -Version: 1.2.5 -Date: 2022-05-10 - Bugfixes: - - Fixed crash when belts don't have a defined related underground belt - - Added missing control setting translation ---------------------------------------------------------------------------------------------------- -Version: 1.2.4 -Date: 2022-03-15 - Bugfixes: - - Fixed deconstruction step marking tiles for deconstruction ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 2022-02-21 - Bugfixes: - - Implemented a blacklist for internal entities of other mods ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2022-02-20 - Bugfixes: - - Fixed crash when placing belts on fragmented mining patches - - Fixed belt placement sometimes stopping midway ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2022-02-19 - Bugfixes: - - Changed power pole fallback not to expect "medium-electric-pole" prototype exists ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2022-02-11 - Features: - - Added Super Compact layout - - Added Logistics and Compact Logistics layouts - Bugfixes: - - Changed power pole logic to be more robust with modded variants - - Tuned iteration parameters ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2022-01-31 - Bugfixes: - - Fixed interaction with planners from other mods ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2022-01-30 - Bugfixes: - - Compatibility for Cursed Filter Mining Drills mod ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2022-01-29 - Features: - - Added two more layouts - compact, and sparse - - Added power poles choice - - Added a progress indicator rectangle over a resource patch - - Improved GUI handling - Optimizations: - - Rewrote the algorithm to be modular - - Rewrote the logic to work on separate ticks - - Simplified layout algorithms with rotation invariant logic ---------------------------------------------------------------------------------------------------- -Version: 1.0.3 -Date: 2021-11-30 - Optimizations: - - Improved placement logic of miners with large radius - Bugfixes: - - Fixed GUI crash in icon logic for mod entities ---------------------------------------------------------------------------------------------------- -Version: 1.0.2 -Date: 2021-11-12 - Bugfixes: - - Fixed GUI checkbox crash ---------------------------------------------------------------------------------------------------- -Version: 1.0.1 -Date: 2021-11-11 - Features: - - Lamp placement - Bugfixes: - - Fixed GUI being created on start - - Space Exploration Iridium compatibility ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 2021-11-09 - Features: - - Initial release diff --git a/mining-patch-planner_1.5.7/compatibility.lua b/mining-patch-planner_1.5.7/compatibility.lua deleted file mode 100644 index 7988960c..00000000 --- a/mining-patch-planner_1.5.7/compatibility.lua +++ /dev/null @@ -1,95 +0,0 @@ -local enum = require("enums") - -local compatibility = {} - ---[[---------------------------------------------------------------------------- - Space Exploration -----------------------------------------------------------------------------]]-- - -local space_exploration_active = nil ----@return boolean -compatibility.is_space_exploration_active = function() - if space_exploration_active == nil then - space_exploration_active = game.active_mods["space-exploration"] and true or false - end - return space_exploration_active -end - ---- @class SERemoteViewToggledEventData: EventData ---- @field player_index uint - --- Thanks Raiguard -compatibility.get_se_events = function() - local se, events = remote.interfaces["space-exploration"], {} - if not se then return events end - - if se.get_on_remote_view_started_event then - events["get_on_remote_view_started_event"] = remote.call("space-exploration", "get_on_remote_view_started_event") - end - if se.get_on_remote_view_stopped_event then - events["get_on_remote_view_stopped_event"] = remote.call("space-exploration", "get_on_remote_view_stopped_event") - end - return events -end - -local memoize_space_surfaces = {} - ---- Wrapper for Space Exploration get_zone_is_space remote interface calls ----@param surface_identification SurfaceIdentification ----@return boolean -compatibility.is_space = function(surface_identification) - local surface_index = surface_identification - if type(surface_identification) == "string" then - surface_identification = game.get_surface(surface_identification).index - elseif type(surface_identification) == "userdata" then - surface_identification = surface_identification.index - end - - local memoized = memoize_space_surfaces[surface_index] - if memoized ~= nil then return memoized end - - if game.active_mods["space-exploration"] then - local zone = remote.call("space-exploration", "get_zone_from_surface_index", {surface_index = surface_index}) - if not zone then - memoize_space_surfaces[surface_index] = false - return false - end - local result = remote.call("space-exploration", "get_zone_is_space", {zone_index = zone.index}) - memoize_space_surfaces[surface_index] = result - return result - end - memoize_space_surfaces[surface_index] = false - return false -end - ---- Return true to skip non space item ----@param is_space boolean ----@param protype LuaEntityPrototype ----@return boolean -compatibility.guess_space_item = function(is_space, protype) - if not is_space then return false end - return string.match(protype.name, "^se%-") -end - ---[[---------------------------------------------------------------------------- - Pyanodons -----------------------------------------------------------------------------]]-- - -local pyanodons_active = nil ----@return boolean -compatibility.is_pyanodons_active = function() - if pyanodons_active == nil then - local active_mods = game.active_mods - -- pyanodons_active = game.active_mods["space-exploration"] and true or false - for k, v in ipairs{"pyrawores", "pycoalprocessing", "pyalienlife"} do - if active_mods[v] then - pyanodons_active = true - break - end - end - pyanodons_active = false - end - return pyanodons_active -end - -return compatibility diff --git a/mining-patch-planner_1.5.7/configuration.lua b/mining-patch-planner_1.5.7/configuration.lua deleted file mode 100644 index 77d4b301..00000000 --- a/mining-patch-planner_1.5.7/configuration.lua +++ /dev/null @@ -1,175 +0,0 @@ -local util = require("util") -local conf = {} - ----@class PlayerData ----@field advanced boolean Preserve in migrations ----@field blueprint_add_mode boolean Preserve in migrations ----@field gui PlayerGui ----@field blueprint_items LuaInventory Preserve in migrations ----@field choices PlayerChoices Preserve in migrations ----@field blueprints PlayerGuiBlueprints ----@field last_state State? Preserve in migrations - ----@class PlayerChoices ----@field layout_choice string ----@field blueprint_choice LuaItemStack Currently selected blueprint (flow) ----@field direction_choice string ----@field miner_choice string ----@field pole_choice string ----@field lamp_choice boolean ----@field belt_choice string ----@field space_belt_choice string ----@field logistics_choice string ----@field landfill_choice boolean ----@field space_landfill_choice string ----@field coverage_choice boolean ----@field start_choice boolean ----@field deconstruction_choice boolean ----@field pipe_choice string ----@field module_choice string ----@field show_non_electric_miners_choice boolean ----@field force_pipe_placement_choice boolean ----@field print_debug_info_choice boolean ----@field display_lane_filling_choice boolean - ----@class PlayerGui ----@field section table ----@field tables table ----@field selections table ----@field advanced_settings LuaGuiElement ----@field layout_dropdown LuaGuiElement ----@field blueprint_add_button LuaGuiElement - ----@class PlayerGuiBlueprints All subtables are indexed by blueprint's item number ----@field mapping table ----@field flow table Root blueprint element ----@field button table Blueprint button toggle ----@field delete table Blueprint delete button ----@field cache table ----@field original_id table Inventory blueprint id to - ----@type PlayerData -conf.default_config = { - advanced = false, - blueprint_add_mode = false, ----@diagnostic disable-next-line: assign-type-mismatch - blueprint_items = nil, - - choices = { - layout_choice = "simple", - --blueprint_choice = nil, -- nil by default, only used with blueprint option - direction_choice = "north", - miner_choice = "electric-mining-drill", - pole_choice = "medium-electric-pole", - belt_choice = "transport-belt", - space_belt_choice = "se-space-transport-belt", - lamp_choice = false, - logistics_choice = "logistic-chest-passive-provider", - landfill_choice = false, - space_landfill_choice = "se-space-platform-scaffold", - coverage_choice = false, - start_choice = false, - deconstruction_choice = false, - pipe_choice = "pipe", - module_choice = "none", ----@diagnostic disable-next-line: assign-type-mismatch - blueprint_choice = nil, - - -- non layout/convienence/advanced settings - show_non_electric_miners_choice = false, - force_pipe_placement_choice = false, - print_debug_info_choice = false, - display_lane_filling_choice = false, - }, - - gui = { - section = {}, - tables = {}, - selections = {}, - }, - - blueprints = { - mapping = {}, - cache = {}, - flow = {}, - button = {}, - delete = {}, - original_id = {}, - } -} - -local function pass_same_type(old, new) - if old and type(old) == type(new) then - return old - end - return new -end - -function conf.update_player_data(player_index) - ---@type PlayerData - local old_config = global.players[player_index] - local new_config = table.deepcopy(conf.default_config) --[[@as PlayerData]] - - new_config.advanced = pass_same_type(old_config.advanced, new_config.advanced) - new_config.blueprint_add_mode = pass_same_type(old_config.blueprint_add_mode, new_config.blueprint_add_mode) - new_config.blueprint_items = old_config.blueprint_items or game.create_inventory(1) - new_config.last_state = old_config.last_state - - local old_choices = old_config.choices or {} - for key, new_choice in pairs(new_config.choices) do - new_config.choices[key] = pass_same_type(old_choices[key], new_choice) - end - - global.players[player_index] = new_config -end - ----@param player_index number -function conf.initialize_global(player_index) - local old_data = global.players[player_index] - global.players[player_index] = table.deepcopy(conf.default_config) - if old_data and old_data.blueprint_items then - global.players[player_index].blueprint_items = old_data.blueprint_items - else - global.players[player_index].blueprint_items = game.create_inventory(1) - end -end - -function conf.initialize_deconstruction_filter() - if global.script_inventory then - global.script_inventory.destroy() - end - - ---@type LuaInventory - local inventory = game.create_inventory(2) - do - ---@type LuaItemStack - local basic = inventory[1] - basic.set_stack("deconstruction-planner") - basic.tile_selection_mode = defines.deconstruction_item.tile_selection_mode.never - end - - do - ---@type LuaItemStack - local ghosts = inventory[2] - ghosts.set_stack("deconstruction-planner") - ghosts.entity_filter_mode = defines.deconstruction_item.entity_filter_mode.whitelist - ghosts.entity_filters = {"entity-ghost", "tile-ghost"} - end - - global.script_inventory = inventory -end - -script.on_event(defines.events.on_player_created, function(e) - ---@cast e EventData.on_player_created - conf.initialize_global(e.player_index) -end) - -script.on_event(defines.events.on_player_removed, function(e) - ---@cast e EventData.on_player_removed - if global.players[e.player_index].blueprint_items then - global.players[e.player_index].blueprint_items.destroy() - end - global.players[e.player_index] = nil -end) - -return conf diff --git a/mining-patch-planner_1.5.7/control.lua b/mining-patch-planner_1.5.7/control.lua deleted file mode 100644 index 40921c8d..00000000 --- a/mining-patch-planner_1.5.7/control.lua +++ /dev/null @@ -1,139 +0,0 @@ -local conf = require("configuration") -local compatibility = require("compatibility") -require("migration") -local gui = require("gui") -local algorithm = require("algorithm") -local bp_meta = require("blueprintmeta") - ----@class __MiningPatchPlanner__global ----@field tasks any - -script.on_init(function() - global.players = {} - ---@type State[] - global.tasks = {} - conf.initialize_deconstruction_filter() - - for _, player in pairs(game.players) do - conf.initialize_global(player.index) - end -end) - ----@param event EventData -local function task_runner(event) - if #global.tasks == 0 then - return script.on_event(defines.events.on_tick, nil) - end - - local state = global.tasks[1] - local layout = algorithm.layouts[state.layout_choice] - - local tick_result = layout:tick(state) - if tick_result == nil then - error("Layout "..state.layout_choice.." missing a callback name") - elseif tick_result == false then - local player = state.player - if state.blueprint then state.blueprint.clear() end - if state.blueprint_inventory then state.blueprint_inventory.destroy() end - rendering.destroy(state._preview_rectangle) - - ---@type PlayerData - local player_data = global.players[player.index] - player_data.last_state, state._previous_state = state, nil - - table.remove(global.tasks, 1) - player.play_sound{path="utility/build_blueprint_medium"} - elseif tick_result ~= true then - state._callback = tick_result - end -end - -script.on_event(defines.events.on_player_selected_area, function(event) - ---@cast event EventData.on_player_selected_area - local player = game.get_player(event.player_index) - if not player then return end - local cursor_stack = player.cursor_stack - if not cursor_stack or not cursor_stack.valid or not cursor_stack.valid_for_read then return end - if cursor_stack and cursor_stack.valid and cursor_stack.valid_for_read and cursor_stack.name ~= "mining-patch-planner" then return end - - if #event.entities == 0 then return end - - for _, task in ipairs(global.tasks) do - if task.player == player then - return - end - end - - local state, error = algorithm.on_player_selected_area(event) - - --rendering.clear("mining-patch-planner") - - if state then - table.insert(global.tasks, state) - script.on_event(defines.events.on_tick, task_runner) - elseif error then - player.print(error) - end -end) - -script.on_load(function() - if global.players then - for _, ply in pairs(global.players) do - ---@cast ply PlayerData - if ply.blueprints then - for _, bp in pairs(ply.blueprints.cache) do - setmetatable(bp, bp_meta) - end - end - end - end - - if global.tasks and #global.tasks > 0 then - script.on_event(defines.events.on_tick, task_runner) - for _, task in ipairs(global.tasks) do - ---@type Layout - local layout = algorithm.layouts[task.layout_choice] - layout:on_load(task) - end - end -end) - -local function cursor_stack_check(e) - local player = game.get_player(e.player_index) - if not player then return end - ---@type PlayerData - local player_data = global.players[e.player_index] - if not player_data then return end - local frame = player.gui.screen["mpp_settings_frame"] - if player_data.blueprint_add_mode and frame and frame.visible then - return - end - - local cursor_stack = player.cursor_stack - if (cursor_stack and - cursor_stack.valid and - cursor_stack.valid_for_read and - cursor_stack.name == "mining-patch-planner" - ) then - gui.show_interface(player) - algorithm.on_gui_open(player_data) - else - gui.hide_interface(player) - algorithm.on_gui_close(player_data) - end -end - -script.on_event(defines.events.on_player_cursor_stack_changed, cursor_stack_check) - -script.on_event(defines.events.on_player_changed_surface, cursor_stack_check) - -do - local events = compatibility.get_se_events() - for k, v in pairs(events) do - script.on_event(v, cursor_stack_check) - end -end - --- script.on_event(defines.events.on_player_main_inventory_changed, function(e) --- --change_handler(e) --- end) diff --git a/mining-patch-planner_1.5.7/data.lua b/mining-patch-planner_1.5.7/data.lua deleted file mode 100644 index c25aae42..00000000 --- a/mining-patch-planner_1.5.7/data.lua +++ /dev/null @@ -1,3 +0,0 @@ -require("prototypes.data") -require("prototypes.graphics") -require("prototypes.styles") diff --git a/mining-patch-planner_1.5.7/defs.lua b/mining-patch-planner_1.5.7/defs.lua deleted file mode 100644 index b78122d1..00000000 --- a/mining-patch-planner_1.5.7/defs.lua +++ /dev/null @@ -1,87 +0,0 @@ ----@meta ----@diagnostic disable - ----@class EventDataPlayerSelectedArea : EventData ----@field item string ----@field player_index uint ----@field entities LuaEntity[] ----@field tiles LuaTile[] ----@field surface LuaSurface - ----@class EventDataPlayerCreated : EventData ----@field player_index uint - ----@class EventDataGuiCheckedStateChanged : EventData ----@field player_index uint ----@field element LuaGuiElement - ----@class EventDataGuiClick : EventData ----@field player_index uint ----@field element LuaGuiElement ----@field button defines.mouse_button_type ----@field alt boolean ----@field control boolean ----@field shift boolean - ----@class EventDataGuiSelectionStateChanged : EventData ----@field player_index uint ----@field element LuaGuiElement - ----@class PoleCharacteristics ----@field width number The entity width ----@field reach number Wire connection reach ----@field area number Supply area width - ----@class Layout ----@field name string ----@field starting_state string Initial state ----@field defaults LayoutDefaults ----@field restrictions Restrictions ----@field on_load function(state: State) ----@field validate function(state: State) ----@field initialize function(state: State) ----@field tick function(state: State) - ----@class LayoutDefaults ----@field miner string ----@field belt string ----@field pole string ----@field logistics string - ----@class Restrictions ----@field miner_available boolean ----@field miner_near_radius number[] Supported near radius of a miner ----@field miner_far_radius number[] Supported far radius of a miner ----@field belt_available boolean ----@field uses_underground_belts boolean ----@field pole_available boolean ----@field pole_omittable boolean Allow a no electric pole option ----@field pole_width number[] ----@field pole_length number[] ----@field pole_supply_area number[] ----@field logistics_available boolean ----@field lamp_available boolean Enable lamp placement option ----@field coverage_tuning boolean ----@field landfill_omit_available boolean ----@field start_alignment_tuning boolean ----@field deconstruction_omit_available boolean ----@field module_available boolean ----@field pipe_available boolean ----@field placement_info_available boolean ----@field lane_filling_info_available boolean - ----@class DeconstructSpecification ----@field x number ----@field y number ----@field width number ----@field height number - ----@class BeltSpecification ----@field x1 number Start ----@field x2 number End ----@field y number ----@field built boolean Do miners exist on this belt ----@field lane1 MinerPlacement[] ----@field lane2 MinerPlacement[] - -table.deepcopy = function(t) end diff --git a/mining-patch-planner_1.5.7/enums.lua b/mining-patch-planner_1.5.7/enums.lua deleted file mode 100644 index bc4cb209..00000000 --- a/mining-patch-planner_1.5.7/enums.lua +++ /dev/null @@ -1,131 +0,0 @@ -local enums = {} - -local cached_miners, cached_resource_categories = nil, nil -local invalid_resource = { --fluid or otherwise - ["se-core-mining"] = true, -} -local miner_blacklist = { - ["se-core-miner-drill"] = true -} - -function enums.get_default_miner() - if game.active_mods["nullius"] then - return "nullius-medium-miner-1" - end - return "electric-mining-drill" -end - -function enums.get_available_miners() - enums.get_available_miners = function() return cached_miners, cached_resource_categories end - - local all_miners = game.get_filtered_entity_prototypes{{filter="type", type="mining-drill"}} - ---@type table - --local all_fluids = game.get_filtered_item_prototypes({filter="type", type=" - local all_resources = game.get_filtered_entity_prototypes{{filter="type", type="resource"}} - ---@type table - local all_categories = game.resource_category_prototypes - - local marked_resource_categories = {} - - for name, proto in pairs(all_resources) do - ---@cast proto LuaEntityPrototype - local mineable_properties = proto.mineable_properties - - if mineable_properties.products then - for _, product in ipairs(mineable_properties.products) do - if product.type == "fluid" then - invalid_resource[name] = true - break - end - end - else - invalid_resource[name] = true - break - end - end - - for miner_name, miner_proto in pairs(all_miners) do - if miner_blacklist[miner_name] then goto continue_miner end - if miner_proto.resource_categories then - for resource_cat, bool in pairs(miner_proto.resource_categories) do - if invalid_resource[resource_cat] then - miner_blacklist[miner_name] = true - end - end - else - miner_blacklist[miner_name] = true - goto continue_miner - end - - ---@cast miner_proto LuaEntityPrototype - local fluidboxes = miner_proto.fluidbox_prototypes - for _, fluidbox in pairs(fluidboxes) do - ---@cast fluidbox LuaFluidBoxPrototype - if fluidbox.production_type == "output" then - miner_blacklist[miner_name] = true - end - end - ::continue_miner:: - end - - if game.active_mods["Cursed-FMD"] then - local mangled_categories = {} - local miners = {} - for name, proto in pairs(all_miners) do - if string.find(name, ";") then -- Cursed-FMD hack - for resource_name, _ in pairs(proto.resource_categories) do - if not invalid_resource[resource_name] and not string.find(resource_name, "core-fragment") then - mangled_categories[resource_name] = true - end - end - else - if proto.flags and proto.flags.hidden then goto continue_miner end - if miner_blacklist[name] then goto continue_miner end - - for resource_name, _ in pairs(proto.resource_categories) do - if not invalid_resource[resource_name] and not string.find(resource_name, "core-fragment") then - miners[name] = proto - end - end - end - ::continue_miner:: - end - cached_miners = miners - cached_resource_categories = mangled_categories - else - local miners = {} - local resource_categories = { - ["basic-solid"] = true, - ["hard-resource"] = true, - } - for name, proto in pairs(all_miners) do - if proto.flags and proto.flags.hidden then goto continue_miner end - if miner_blacklist[name] then goto continue_miner end - --if not proto.resource_categories["basic-solid"] then goto continue_miner end - for resource_category, bool in pairs(proto.resource_categories) do - resource_categories[resource_category] = bool - end - - miners[name] = proto - - ::continue_miner:: - end - - cached_miners = miners - cached_resource_categories = resource_categories - --[[ { - ["basic-solid"] = true, - ["hard-resource"] = true, - }]] - end - return enums.get_available_miners() -end - -enums.space_surfaces = { - ["asteroid-belt"] = true, - ["asteroid-field"] = true, - ["orbit"] = true, - ["anomaly"] = true, -} - -return enums diff --git a/mining-patch-planner_1.5.7/graphics/advanced-settings-32x.png b/mining-patch-planner_1.5.7/graphics/advanced-settings-32x.png deleted file mode 100644 index 925d6fb3..00000000 --- a/mining-patch-planner_1.5.7/graphics/advanced-settings-32x.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6fec3e457192cdf2eb21b74fc5232df4735a913a21ad49fde97607ee8cdc3cd2 -size 852 diff --git a/mining-patch-planner_1.5.7/graphics/advanced-settings-black.png b/mining-patch-planner_1.5.7/graphics/advanced-settings-black.png deleted file mode 100644 index b56ac51c..00000000 --- a/mining-patch-planner_1.5.7/graphics/advanced-settings-black.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6783a349eb5f3ea59f2a7e95a7d76170599275bea1e0581c7d3679751704f94f -size 1376 diff --git a/mining-patch-planner_1.5.7/graphics/advanced-settings.png b/mining-patch-planner_1.5.7/graphics/advanced-settings.png deleted file mode 100644 index c9c3e01d..00000000 --- a/mining-patch-planner_1.5.7/graphics/advanced-settings.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c8c62bbd5264e2faa92fc3c65564fe94ccf04b429eb52302a25883e9b038e90 -size 1397 diff --git a/mining-patch-planner_1.5.7/graphics/align_start.png b/mining-patch-planner_1.5.7/graphics/align_start.png deleted file mode 100644 index c4f9787f..00000000 --- a/mining-patch-planner_1.5.7/graphics/align_start.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:077874b4a0220afa37f8d5c1c7293f889b3f944eb14c29b28de4d160c549faa4 -size 753 diff --git a/mining-patch-planner_1.5.7/graphics/arrow-east.png b/mining-patch-planner_1.5.7/graphics/arrow-east.png deleted file mode 100644 index 5339d70e..00000000 --- a/mining-patch-planner_1.5.7/graphics/arrow-east.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c836a75fe8bbd9e017943304b9172259184d5305fefe315c48904e1374a499aa -size 783 diff --git a/mining-patch-planner_1.5.7/graphics/arrow-north.png b/mining-patch-planner_1.5.7/graphics/arrow-north.png deleted file mode 100644 index be562141..00000000 --- a/mining-patch-planner_1.5.7/graphics/arrow-north.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:388693f0988a672df64ca21e792b8622fc175920898ad29ba96f2b6895af3026 -size 789 diff --git a/mining-patch-planner_1.5.7/graphics/arrow-south.png b/mining-patch-planner_1.5.7/graphics/arrow-south.png deleted file mode 100644 index 0c3dad97..00000000 --- a/mining-patch-planner_1.5.7/graphics/arrow-south.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a20b7e7ff83cb1c74baaad614e4eb19f5cf9570c5f05acf7d932bdad46da9b3 -size 825 diff --git a/mining-patch-planner_1.5.7/graphics/arrow-west.png b/mining-patch-planner_1.5.7/graphics/arrow-west.png deleted file mode 100644 index 456aade0..00000000 --- a/mining-patch-planner_1.5.7/graphics/arrow-west.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f20de209bc43e9ed3c039a9393f4f6c3990f25d18fcbd34e98653876f576a022 -size 793 diff --git a/mining-patch-planner_1.5.7/graphics/blueprint_add.png b/mining-patch-planner_1.5.7/graphics/blueprint_add.png deleted file mode 100644 index f7db3bbc..00000000 --- a/mining-patch-planner_1.5.7/graphics/blueprint_add.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:346b6ff30cf5f730e99276010376630bae9c96c163ba686247a63681e1816cd1 -size 961 diff --git a/mining-patch-planner_1.5.7/graphics/cross.png b/mining-patch-planner_1.5.7/graphics/cross.png deleted file mode 100644 index cbc44f3f..00000000 --- a/mining-patch-planner_1.5.7/graphics/cross.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9fb1461c13eea9b9ff52b1032f4bffa9f5c0479a55268ca2e722788f98297332 -size 764 diff --git a/mining-patch-planner_1.5.7/graphics/deconstruct.png b/mining-patch-planner_1.5.7/graphics/deconstruct.png deleted file mode 100644 index 81c3462d..00000000 --- a/mining-patch-planner_1.5.7/graphics/deconstruct.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3250585ebc9adcb39627a90ee7fa5033ccbfe0ade920bb412bc9d1156ad31bb4 -size 12459 diff --git a/mining-patch-planner_1.5.7/graphics/display-lane-filling-disabled.png b/mining-patch-planner_1.5.7/graphics/display-lane-filling-disabled.png deleted file mode 100644 index fedc9714..00000000 --- a/mining-patch-planner_1.5.7/graphics/display-lane-filling-disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6236e694a8d76c177e67edb4673390d11e80136ec8fbf5c820f16516a9d07df -size 1045 diff --git a/mining-patch-planner_1.5.7/graphics/display-lane-filling-enabled.png b/mining-patch-planner_1.5.7/graphics/display-lane-filling-enabled.png deleted file mode 100644 index a6d71814..00000000 --- a/mining-patch-planner_1.5.7/graphics/display-lane-filling-enabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:019247738b6b78d2961e3092bd1bc7254735e998e6e67fec519c6f56c2092569 -size 1085 diff --git a/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-disabled.png b/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-disabled.png deleted file mode 100644 index ad589813..00000000 --- a/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:93e4e9a4704f922647be1930d7a4f83d30086c669eed53897da18041a2a8c8ee -size 293 diff --git a/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-white.png b/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-white.png deleted file mode 100644 index 330b11c9..00000000 --- a/mining-patch-planner_1.5.7/graphics/drill-icon-toolbar-white.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2bce2d0a40316b84010cb9a060437e01a7371ecff74f6595962df0d5335aceed -size 287 diff --git a/mining-patch-planner_1.5.7/graphics/drill-icon.png b/mining-patch-planner_1.5.7/graphics/drill-icon.png deleted file mode 100644 index 3fc344d3..00000000 --- a/mining-patch-planner_1.5.7/graphics/drill-icon.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6852501bb719cf5727df79d280245a05a9938e4ab45b5d9f6383108d56ce24dc -size 534 diff --git a/mining-patch-planner_1.5.7/graphics/force_pipe_disabled.png b/mining-patch-planner_1.5.7/graphics/force_pipe_disabled.png deleted file mode 100644 index f0a99833..00000000 --- a/mining-patch-planner_1.5.7/graphics/force_pipe_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e274ed85e622544a6e93c6917cd7d1cf29670b84486e91874c32ec72f359fec6 -size 5744 diff --git a/mining-patch-planner_1.5.7/graphics/force_pipe_enabled.png b/mining-patch-planner_1.5.7/graphics/force_pipe_enabled.png deleted file mode 100644 index b242bbeb..00000000 --- a/mining-patch-planner_1.5.7/graphics/force_pipe_enabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9fbabd20253144e8824181d5192c9a6452de643ed165a207ab65edb65fb503e -size 5798 diff --git a/mining-patch-planner_1.5.7/graphics/miner_coverage.png b/mining-patch-planner_1.5.7/graphics/miner_coverage.png deleted file mode 100644 index c5b7ef5a..00000000 --- a/mining-patch-planner_1.5.7/graphics/miner_coverage.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1efbdd3075bdf8e3ca6f8f89bb670c1d38bac087dc87426a08f51f6f11bf0bba -size 1105 diff --git a/mining-patch-planner_1.5.7/graphics/miner_coverage_disabled.png b/mining-patch-planner_1.5.7/graphics/miner_coverage_disabled.png deleted file mode 100644 index 19f47bc8..00000000 --- a/mining-patch-planner_1.5.7/graphics/miner_coverage_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:501f40fe5f61a12efd3b5cbaa406d61c1d630a1efc378050de57c3e7156a10c8 -size 1143 diff --git a/mining-patch-planner_1.5.7/graphics/no-entity.png b/mining-patch-planner_1.5.7/graphics/no-entity.png deleted file mode 100644 index 6df05e0c..00000000 --- a/mining-patch-planner_1.5.7/graphics/no-entity.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5116d4a1210539e61be6cb4b5bfcd5e1ec00f462a9c86c39c385b061b118f88 -size 1161 diff --git a/mining-patch-planner_1.5.7/graphics/no_lamp.png b/mining-patch-planner_1.5.7/graphics/no_lamp.png deleted file mode 100644 index bf8ba2a8..00000000 --- a/mining-patch-planner_1.5.7/graphics/no_lamp.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8930ca74bb0ebe3916d37cf5c913c29e633eb98b1ec10d7aed8727f188de829f -size 945 diff --git a/mining-patch-planner_1.5.7/graphics/no_module.png b/mining-patch-planner_1.5.7/graphics/no_module.png deleted file mode 100644 index 7b82d47d..00000000 --- a/mining-patch-planner_1.5.7/graphics/no_module.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f14e61fadf49fb008d1bcd194fe9c171dc7cbabb86cab6edd97583c44f29429b -size 7690 diff --git a/mining-patch-planner_1.5.7/graphics/no_pipe.png b/mining-patch-planner_1.5.7/graphics/no_pipe.png deleted file mode 100644 index fef882f9..00000000 --- a/mining-patch-planner_1.5.7/graphics/no_pipe.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ee978857f97935d5c938126160ea5dfe12a43e396668580fd46252475e4b2181 -size 953 diff --git a/mining-patch-planner_1.5.7/graphics/omit_deconstruct.png b/mining-patch-planner_1.5.7/graphics/omit_deconstruct.png deleted file mode 100644 index 92f5f074..00000000 --- a/mining-patch-planner_1.5.7/graphics/omit_deconstruct.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:67762635df5a9ba9050b4e048ea898c01461cd8ba8d7eca83fac17cb2327aec5 -size 6697 diff --git a/mining-patch-planner_1.5.7/graphics/omit_landfill.png b/mining-patch-planner_1.5.7/graphics/omit_landfill.png deleted file mode 100644 index b3434429..00000000 --- a/mining-patch-planner_1.5.7/graphics/omit_landfill.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:04671acb7b9a18cb48e1e33cda4853016f34df43b094eec00c1ce5eb26c72c75 -size 9591 diff --git a/mining-patch-planner_1.5.7/graphics/plus.png b/mining-patch-planner_1.5.7/graphics/plus.png deleted file mode 100644 index 71b296c2..00000000 --- a/mining-patch-planner_1.5.7/graphics/plus.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c31cccbfaf8194d3d125368c34422cf75d68cd98fef52aa17c712e805042711 -size 601 diff --git a/mining-patch-planner_1.5.7/graphics/print-placement-info-disabled.png b/mining-patch-planner_1.5.7/graphics/print-placement-info-disabled.png deleted file mode 100644 index 08b28761..00000000 --- a/mining-patch-planner_1.5.7/graphics/print-placement-info-disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd5d89048ef332b1750911fea8e0bf8cf444d0aee9c5bcedbe2aeb8b55a2780b -size 806 diff --git a/mining-patch-planner_1.5.7/graphics/print-placement-info-enabled.png b/mining-patch-planner_1.5.7/graphics/print-placement-info-enabled.png deleted file mode 100644 index f8d2dabf..00000000 --- a/mining-patch-planner_1.5.7/graphics/print-placement-info-enabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f1e54110b5bfeb243e93e13311f66f1899662f9fe6b1a8d228483e0bfb15b7b -size 781 diff --git a/mining-patch-planner_1.5.7/graphics/show_all_miners.png b/mining-patch-planner_1.5.7/graphics/show_all_miners.png deleted file mode 100644 index eac74d99..00000000 --- a/mining-patch-planner_1.5.7/graphics/show_all_miners.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78418a28f378a593e27c8f8b1a2be53095b5a26dd0b4289d929d0e17927e32cb -size 1098 diff --git a/mining-patch-planner_1.5.7/grid_mt.lua b/mining-patch-planner_1.5.7/grid_mt.lua deleted file mode 100644 index 3b3dfa10..00000000 --- a/mining-patch-planner_1.5.7/grid_mt.lua +++ /dev/null @@ -1,319 +0,0 @@ -local mpp_util = require("mpp_util") - ----@class GridRow: GridTile[] - ----@class Grid ----@field miner MinerStruct -local grid_mt = {} -grid_mt.__index = grid_mt - ----@class Coords ----@field x1 double Top left corner ----@field y1 double Top left corner ----@field x2 double Bottom right corner ----@field y2 double Bottom right corner ----@field ix1 number Integer top left corner ----@field iy1 number Integer top left corner ----@field ix2 number Integer bottom right corner ----@field iy2 number Integer bottom right corner ----@field w integer Width ----@field h integer Height ----@field tw integer Width Rotation invariant width ----@field th integer Height Rotation invariant height ----@field gx double x1 but -1 for grid rendering ----@field gy double y1 but -1 for grid rendering ----@field extent_x1 number Internal grid dimensions ----@field extent_y1 number Internal grid dimensions ----@field extent_x2 number Internal grid dimensions ----@field extent_y2 number Internal grid dimensions - ----@class GridTile ----@field amount number Amount of resource on tile ----@field neighbor_count integer ----@field neighbor_counts table ----@field far_neighbor_count integer ----@field x integer ----@field y integer ----@field gx double actual coordinate in surface ----@field gy double actual coordinate in surface ----@field boolean integer Is a miner consuming this tile ----@field built_on boolean|string Is tile occupied by a building entity - ----@class Miner ----@field tile GridTile ----@field center GridTile Center tile ----@field line integer -- Line index of the miner ----@field unconsumed integer - ----comment ----@param x integer Grid coordinate ----@param y integer Grid coordinate ----@return GridTile|nil -function grid_mt:get_tile(x, y) - local row = self[y] - if row then return row[x] end -end - ----Convolves a resource patch reach using characteristics of a miner ----@param x integer coordinate of the resource patch ----@param y integer coordinate of the resource patch -function grid_mt:convolve(x, y) - local near, far = self.miner.near, self.miner.far - local ny1, ny2 = y-near, y+near - local nx1, nx2 = x-near, x+near - for sy = y-far, y+far do - local row = self[sy] - if row == nil then goto continue_row end - for sx = x-far, x+far do - local tile = row[sx] - if tile == nil then goto continue_column end - - tile.far_neighbor_count = tile.far_neighbor_count + 1 - if nx1 <= sx and sx <= nx2 and ny1 <= sy and sy <= ny2 then - tile.neighbor_count = tile.neighbor_count + 1 - end - ::continue_column:: - end - ::continue_row:: - end -end - -function grid_mt:convolve_custom(x, y, w) - for sy = y-w, y+w do - local row = self[sy] - if row == nil then goto continue_row end - for sx = x-w, x+w do - local tile = row[sx] - if tile == nil then goto continue_column end - tile.neighbor_counts[w] = (tile.neighbor_counts[w] or 0) + 1 - ::continue_column:: - end - ::continue_row:: - end -end - ----Marks tiles as consumed by a miner ----@param cx integer ----@param cy integer -function grid_mt:consume(cx, cy) - local mc = self.miner - local far = mc.far - for y = cy-far, cy+far do - local row = self[y] - if row == nil then goto continue_row end - for x = cx-far, cx+far do - local tile = row[x] - if tile and tile.amount then - tile.consumed = true - end - end - ::continue_row:: - end -end - ----@param cx number ----@param cy number ----@param w number ----@param evenw boolean ----@param evenh boolean -function grid_mt:consume_custom(cx, cy, w, evenw, evenh) - local ox, oy = evenw and 1 or 0, evenh and 1 or 0 - local x1, x2 = cx+ox-w, cx+w - for y = cy+oy-w, cy+w do - local row = self[y] - if row == nil then goto continue_row end - for x = x1, x2 do - local tile = row[x] - if tile and tile.amount then - tile.consumed = true - end - end - ::continue_row:: - end -end - ----Marks tiles as consumed by a miner ----@param tiles GridTile[] -function grid_mt:clear_consumed(tiles) - for _, tile in ipairs(tiles) do - tile.consumed = false - end -end - ----Builder function ----@param cx number x coord ----@param cy number y coord ----@param thing string Type of building ----@param r number Radius ----@param even boolean Is even width building -function grid_mt:build_thing(cx, cy, thing, r, even) - local o = even and 1 or 0 - for y = cy+o-r, cy+r do - local row = self[y] - if row == nil then goto continue_row end - for x = cx+o-r, cx+r do - local tile = row[x] - if tile then - tile.built_on = thing - end - end - ::continue_row:: - end -end - -function grid_mt:build_thing_simple(cx, cy, thing) - local row = self[cy] - if row then - local tile = row[cx] - if tile then - tile.built_on = thing - return true - end - end -end - ----@param t GhostSpecification -function grid_mt:build_specification(t) - local cx, cy = t.grid_x, t.grid_y - local left, right = t.padding_pre, t.padding_post - local thing = t.thing - - if left == nil and right == nil then - local row = self[cy] - if row then - local tile = row[cx] - if tile then - tile.built_on = thing - end - end - else - left, right = left or 0, right or 0 - local x1, x2 = cx-left, cx+right - for y = cy-left, cy+right do - local row = self[y] - if row == nil then goto continue_row end - for x = x1, x2 do - local tile = row[x] - if tile then - tile.built_on = thing - end - end - ::continue_row:: - end - end -end - ----Finds if an entity type is built near ----@param cx number x coord ----@param cy number y coord ----@param thing string Type of building ----@param r number Radius ----@param even boolean Is even width building ----@return boolean -function grid_mt:find_thing(cx, cy, thing, r, even) - local o = even and 1 or 0 - for y = cy+o-r, cy+r do - local row = self[y] - if row == nil then goto continue_row end - for x = cx+o-r, cx+r do - local tile = row[x] - if tile and tile.built_on == thing then - return true - end - end - ::continue_row:: - end - return false -end - ----Finds if an entity type is built near ----@param cx number x coord ----@param cy number y coord ----@param things table Types of entities ----@param r number Radius ----@param even boolean Is even width building ----@return boolean -function grid_mt:find_thing_in(cx, cy, things, r, even) - things = mpp_util.list_to_keys(things) - local o = even and 1 or 0 - for y = cy+o-r, cy+r do - local row = self[y] - if row == nil then goto continue_row end - for x = cx+o-r, cx+r do - local tile = row[x] - if tile and things[tile.built_on] then - return true - end - end - ::continue_row:: - end - return false -end - -function grid_mt:build_miner(cx, cy) - local near = self.miner.near - for y = cy-near, cy+near do - local row = self[y] - if row == nil then goto continue_row end - for x = cx-near, cx+near do - local tile = row[x] - if tile then - tile.built_on = "miner" - end - end - ::continue_row:: - end -end - -function grid_mt:build_miner_custom(cx, cy, w) - for y = cy-w, cy+w do - local row = self[y] - if row == nil then goto continue_row end - for x = cx-w, cx+w do - local tile = row[x] - if tile then - tile.built_on = "miner" - end - end - ::continue_row:: - end -end - -function grid_mt:get_unconsumed(mx, my) - local far = self.miner.far - local count = 0 - for y = my-far, my+far do - local row = self[y] - if row == nil then goto continue_row end - for x = mx-far, mx+far do - local tile = row[x] - if tile then - if tile.amount and not tile.consumed then - count = count + 1 - end - end - end - ::continue_row:: - end - return count -end - -function grid_mt:get_unconsumed_custom(mx, my, w) - local count = 0 - for y = my-w, my+w do - local row = self[y] - if row == nil then goto continue_row end - for x = mx-w, mx+w do - local tile = row[x] - if tile then - if tile.amount and not tile.consumed then - count = count + 1 - end - end - end - ::continue_row:: - end - return count -end - -return grid_mt diff --git a/mining-patch-planner_1.5.7/gui.lua b/mining-patch-planner_1.5.7/gui.lua deleted file mode 100644 index b6336634..00000000 --- a/mining-patch-planner_1.5.7/gui.lua +++ /dev/null @@ -1,966 +0,0 @@ -local algorithm = require("algorithm") -local mpp_util = require("mpp_util") -local enums = require("enums") -local blueprint_meta = require("blueprintmeta") -local blacklist = require("blacklist") -local compatibility = require("compatibility") - -local layouts = algorithm.layouts - -local gui = {} - ---[[ - tag explanations: - mpp_action - a choice between several settings for a "*_choice" - mpp_toggle - a toggle for a boolean "*_choice" -]] - ----@class SettingValueEntry ----@field action string Action tag override ----@field type string|nil Button type ----@field value string Value name ----@field tooltip LocalisedString ----@field icon SpritePath ----@field icon_enabled SpritePath? ----@field order string ----@field default string? ----@field elem_type string ----@field elem_filters PrototypeFilter? ----@field elem_value string? ----@field refresh boolean? Update selections? - ----Creates a setting section (label + table) ----Can be hidden ----@param player_data PlayerData ----@param root any ----@param name any ----@return LuaGuiElement, LuaGuiElement -local function create_setting_section(player_data, root, name, opts) - opts = opts or {} - local section = root.add{type="flow", direction="vertical"} - player_data.gui.section[name] = section - section.add{type="label", style="subheader_caption_label", caption={"mpp.settings_"..name.."_label"}} - local table_root = section.add{ - type="table", - direction=opts.direction or "horizontal", - style="filter_slot_table", - column_count=opts.column_count or 6, - } - player_data.gui.tables[name] = table_root - return table_root, section -end - -local function style_helper_selection(check) - if check then return "yellow_slot_button" end - return "recipe_slot_button" -end - -local function style_helper_advanced_toggle(check) - return check and "mpp_selected_frame_action_button" or "frame_action_button" -end - -local function style_helper_blueprint_toggle(check) - return check and "mpp_blueprint_mode_button_active" or "mpp_blueprint_mode_button" -end - ----@param player_data any global player GUI reference object ----@param root LuaGuiElement ----@param action_type string Default action tag ----@param values SettingValueEntry[] -local function create_setting_selector(player_data, root, action_type, action, values) - local action_class = {} - player_data.gui.selections[action] = action_class - root.clear() - local selected = player_data.choices[action.."_choice"] - - for _, value in ipairs(values) do - local action_type_override = value.action or action_type - local toggle_value = action_type == "mpp_toggle" and player_data.choices[value.value.."_choice"] - local style_check = value.value == selected or toggle_value - local button - if value.type == "choose-elem-button" then - button = root.add{ - type="choose-elem-button", - style=style_helper_selection(), - tooltip=mpp_util.wrap_tooltip(value.tooltip), - elem_type=value.elem_type, - elem_filters=value.elem_filters, - item=value.elem_value, -- duplicate them all; - entity=value.elem_value, -- and let Wube sort them out - tags={[action_type_override]=action, value=value.value, default=value.default}, - } - local fake_placeholder = button.add{ - type="sprite", - sprite=value.icon, - ignored_by_interaction=true, - style="mpp_fake_item_placeholder", - visible=not value.elem_value, - } - else - local icon = value.icon - if style_check and value.icon_enabled then icon = value.icon_enabled end - button = root.add{ - type="sprite-button", - style=style_helper_selection(style_check), - sprite=icon, - tags={ - [action_type_override]=action, - value=value.value, - default=value.default, - refresh=value.refresh, - mpp_icon_default=value.icon, - mpp_icon_enabled=value.icon_enabled, - }, - tooltip=mpp_util.wrap_tooltip(value.tooltip), - } - end - action_class[value.value] = button - end -end - ----@param player_data PlayerData ----@param button LuaGuiElement -local function set_player_blueprint(player_data, button) - local choices = player_data.choices - local player_blueprints = player_data.blueprints - local blueprint_number = button.tags.mpp_fake_blueprint_button - local blueprint_flow = player_blueprints.flow[button.parent.index] - - if choices.blueprint_choice == blueprint_number then - return nil - end - - if choices.blueprint_choice then - local current_blueprint = choices.blueprint_choice - local current_blueprint_button = player_blueprints.button[current_blueprint.item_number] - current_blueprint_button.style = "mpp_fake_blueprint_button" - end - - local blueprint = player_blueprints.mapping[blueprint_number] - button.style = "mpp_fake_blueprint_button_selected" - choices.blueprint_choice = blueprint -end - ----@param player_data PlayerData ----@param table_root LuaGuiElement ----@param blueprint_item LuaItemStack ----@param cursor_stack LuaItemStack|nil -local function create_blueprint_entry(player_data, table_root, blueprint_item, cursor_stack) - local blueprint_line = table_root.add{type="flow"} - local item_number = blueprint_item.item_number --[[@as number]] - player_data.blueprints.flow[item_number] = blueprint_line - player_data.blueprints.mapping[item_number] = blueprint_item - - local blueprint_button = blueprint_line.add{ - type="button", - style=(player_data.choices.blueprint_choice == blueprint_item and "mpp_fake_blueprint_button_selected" or "mpp_fake_blueprint_button"), - tags={mpp_fake_blueprint_button=item_number}, - } - player_data.blueprints.button[item_number] = blueprint_button - - local fake_table = blueprint_button.add{ - type="table", - style="mpp_fake_blueprint_table", - direction="horizontal", - column_count=2, - tags={mpp_fake_blueprint_table=true}, - ignored_by_interaction=true, - } - - for k, v in pairs(blueprint_item.blueprint_icons) do - local s = v.signal - local sprite = s.name or "" - if s.type == "virtual" then - sprite = "virtual-signal/"..sprite --wube pls - else - sprite = s.type .. "/" .. sprite - end - if not fake_table.gui.is_valid_sprite_path(sprite) then sprite = "item/item-unknown" end - fake_table.add{ - type="sprite", - sprite=(sprite), - style="mpp_fake_blueprint_sprite", - tags={mpp_fake_blueprint_sprite=true}, - } - end - - local delete_button = blueprint_line.add{ - type="sprite-button", - sprite="mpp_cross", - style="mpp_delete_blueprint_button", - tags={mpp_delete_blueprint_button=item_number}, - tooltip=mpp_util.wrap_tooltip{"gui.delete-blueprint-record"}, - } - player_data.blueprints.delete[item_number] = delete_button - - local label, tooltip = mpp_util.blueprint_label(blueprint_item) - blueprint_line.add{ - type="label", - caption=label, - tooltip=mpp_util.wrap_tooltip(tooltip), - } - - local cached = player_data.blueprints.cache[item_number] - if not cached then - cached = blueprint_meta:new(blueprint_item) - player_data.blueprints.cache[item_number] = cached - else - if not cached:check_valid() then - blueprint_button.style = "mpp_fake_blueprint_button_invalid" - if player_data.choices.blueprint_choice == blueprint_item then - player_data.choices.blueprint_choice = nil - end - end - end - if cursor_stack and cursor_stack.valid and cached.valid then - player_data.blueprints.original_id[item_number] = cursor_stack.item_number - end - - if not player_data.choices.blueprint_choice and cached.valid then - set_player_blueprint(player_data, blueprint_button) - end -end - ----@param player LuaPlayer -function gui.create_interface(player) - ---@type LuaGuiElement - local frame = player.gui.screen.add{type="frame", name="mpp_settings_frame", direction="vertical"} - ---@type PlayerData - local player_data = global.players[player.index] - local player_gui = player_data.gui - - local titlebar = frame.add{type="flow", name="mpp_titlebar", direction="horizontal"} - titlebar.add{type="label", style="frame_title", name="mpp_titlebar_label", caption={"mpp.settings_frame"}} - titlebar.add{type="empty-widget", name="mpp_titlebar_spacer", horizontally_strechable=true} - player_gui.advanced_settings = titlebar.add{ - type="sprite-button", - style=style_helper_advanced_toggle(player_data.advanced), - sprite="mpp_advanced_settings", - tooltip=mpp_util.wrap_tooltip{"mpp.advanced_settings"}, - tags={mpp_advanced_settings=true}, - } - - do -- layout selection - local table_root, section = create_setting_section(player_data, frame, "layout") - - local choices = {} - local index = 0 - for i, layout in ipairs(layouts) do - if player_data.choices.layout_choice == layout.name then - index = i - end - choices[#choices+1] = layout.translation - end - - local flow = table_root.add{type="flow", direction="horizontal"} - - player_gui.layout_dropdown = flow.add{ - type="drop-down", - items=choices, - selected_index=index --[[@as uint]], - tags={mpp_drop_down="layout", default=1}, - } - - player_gui.blueprint_add_button = flow.add{ - type="sprite-button", - name="blueprint_add_button", - sprite="mpp_plus", - style=style_helper_blueprint_toggle(), - tooltip=mpp_util.wrap_tooltip{"mpp.blueprint_add_mode"}, - tags={mpp_blueprint_add_mode=true}, - } - player_gui.blueprint_add_button.visible = player_data.choices.layout_choice == "blueprints" - end - - do -- Direction selection - local table_root = create_setting_section(player_data, frame, "direction") - create_setting_selector(player_data, table_root, "mpp_action", "direction", { - {value="north", icon="mpp_direction_north"}, - {value="south", icon="mpp_direction_south"}, - {value="west", icon="mpp_direction_west"}, - {value="east", icon="mpp_direction_east"}, - }) - end - - do -- Miner selection - local table_root, section = create_setting_section(player_data, frame, "miner") - end - - do -- Belt selection - local table_root, section = create_setting_section(player_data, frame, "belt") - end - - do -- Space belt selection - local table_root, section = create_setting_section(player_data, frame, "space_belt") - end - - do -- Logistics selection - local table_root, section = create_setting_section(player_data, frame, "logistics") - end - - do -- Electric pole selection - local table_root, section = create_setting_section(player_data, frame, "pole") - end - - do -- Blueprint settings - ---@type LuaGuiElement, LuaGuiElement - --local table_root, section = create_setting_section(player_data, frame, "blueprints") - local section = frame.add{type="flow", direction="vertical"} - player_data.gui.section["blueprints"] = section - section.add{type="label", style="subheader_caption_label", caption={"mpp.settings_blueprints_label"}} - - local root = section.add{type="flow", direction="vertical"} - player_data.gui.tables["blueprints"] = root - - player_gui.blueprint_add_section = section.add{ - type="flow", - direction="horizontal", - } - - player_gui.blueprint_receptacle = player_gui.blueprint_add_section.add{ - type="sprite-button", - sprite="mpp_blueprint_add", - tags={mpp_blueprint_receptacle=true}, - } - local blueprint_label = player_gui.blueprint_add_section.add{ - type="label", - caption={"mpp.label_add_blueprint", }, - } - player_gui.blueprint_add_section.visible = player_data.blueprint_add_mode - - for i = 1, #player_data.blueprint_items do - ---@type LuaItemStack - local item = player_data.blueprint_items[i] - if item.valid and item.is_blueprint then - create_blueprint_entry(player_data, root, item) - end - end - end - - do -- Misc selection - local table_root, section = create_setting_section(player_data, frame, "misc") - end -end - ----@param player_data PlayerData -local function update_miner_selection(player_data) - local player_choices = player_data.choices - local layout = layouts[player_choices.layout_choice] - local restrictions = layout.restrictions - - player_data.gui.section["miner"].visible = restrictions.miner_available - if not restrictions.miner_available then return end - - local near_radius_min, near_radius_max = restrictions.miner_near_radius[1], restrictions.miner_near_radius[2] - local far_radius_min, far_radius_max = restrictions.miner_far_radius[1], restrictions.miner_far_radius[2] - local values = {} - local existing_choice_is_valid = false - local cached_miners, cached_resources = enums.get_available_miners() - - for _, miner_proto in pairs(cached_miners) do - if blacklist[miner_proto.name] then goto skip_miner end - local miner = mpp_util.miner_struct(miner_proto) - - if not player_data.choices.show_non_electric_miners_choice and not miner_proto.electric_energy_source_prototype then goto skip_miner end - if miner.size % 2 == 0 then goto skip_miner end -- Algorithm doesn't support even size miners - if miner.near < near_radius_min or near_radius_max < miner.near then goto skip_miner end - if miner.far < far_radius_min or far_radius_max < miner.far then goto skip_miner end - - values[#values+1] = { - value=miner.name, - tooltip=miner_proto.localised_name, - icon=("entity/"..miner.name), - order=miner_proto.order, - } - if miner.name == player_choices.miner_choice then existing_choice_is_valid = true end - - ::skip_miner:: - end - - if not existing_choice_is_valid and #values > 0 then - if mpp_util.table_find(values, function(v) return v.value == layout.defaults.miner end) then - player_choices.miner_choice = layout.defaults.miner - else - player_choices.miner_choice = values[1].value - end - elseif #values == 0 then - player_choices.miner_choice = "none" - values[#values+1] = { - value="none", - tooltip={"mpp.msg_miner_err_3"}, - icon="mpp_no_entity", - order="", - } - end - - local table_root = player_data.gui.tables["miner"] - create_setting_selector(player_data, table_root, "mpp_action", "miner", values) -end - ----@param player LuaPlayer -local function update_belt_selection(player) - local player_data = global.players[player.index] - local choices = player_data.choices - local layout = layouts[choices.layout_choice] - local restrictions = layout.restrictions - - local is_space = compatibility.is_space(player.surface.index) - player_data.gui.section["belt"].visible = restrictions.belt_available and not is_space - if not restrictions.belt_available or is_space then return end - - local values = {} - local existing_choice_is_valid = false - - local belts = game.get_filtered_entity_prototypes{{filter="type", type="transport-belt"}} - for _, belt in pairs(belts) do - if blacklist[belt.name] then goto skip_belt end - if belt.flags and belt.flags.hidden then goto skip_belt end - if layout.restrictions.uses_underground_belts and belt.related_underground_belt == nil then goto skip_belt end - - values[#values+1] = { - value=belt.name, - tooltip=belt.localised_name, - icon=("entity/"..belt.name), - order=belt.order, - } - if belt.name == choices.belt_choice then existing_choice_is_valid = true end - - ::skip_belt:: - end - - if not existing_choice_is_valid then - if mpp_util.table_find(values, function(v) return v.value == layout.defaults.belt end) then - choices.belt_choice = layout.defaults.belt - else - choices.belt_choice = values[1].value - end - end - - local table_root = player_data.gui.tables["belt"] - create_setting_selector(player_data, table_root, "mpp_action", "belt", values) -end - ----@param player LuaPlayer -local function update_space_belt_selection(player) - local player_data = global.players[player.index] - local choices = player_data.choices - local layout = layouts[choices.layout_choice] - local restrictions = layout.restrictions - - local is_space = compatibility.is_space(player.surface.index) - player_data.gui.section["space_belt"].visible = restrictions.belt_available and is_space - if not restrictions.belt_available or not is_space then return end - - local values = {} - local existing_choice_is_valid = false - - local belts = game.get_filtered_entity_prototypes{{filter="type", type="transport-belt"}} - for _, belt in pairs(belts) do - if blacklist[belt.name] then goto skip_belt end - if belt.flags and belt.flags.hidden then goto skip_belt end - if layout.restrictions.uses_underground_belts and belt.related_underground_belt == nil then goto skip_belt end - if is_space and not string.match(belt.name, "^se%-") then goto skip_belt end - - values[#values+1] = { - value=belt.name, - tooltip=belt.localised_name, - icon=("entity/"..belt.name), - order=belt.order, - } - if belt.name == choices.space_belt_choice then existing_choice_is_valid = true end - - ::skip_belt:: - end - - if not existing_choice_is_valid then - if mpp_util.table_find(values, function(v) return v.value == layout.defaults.belt end) then - choices.space_belt_choice = "se-space-transport-belt" - else - choices.space_belt_choice = values[1].value - end - end - - local table_root = player_data.gui.tables["space_belt"] - create_setting_selector(player_data, table_root, "mpp_action", "space_belt", values) -end - - ----@param player_data PlayerData -local function update_logistics_selection(player_data) - local choices = player_data.choices - local layout = layouts[choices.layout_choice] - local restrictions = layout.restrictions - local values = {} - - player_data.gui.section["logistics"].visible = restrictions.logistics_available - if not restrictions.logistics_available then return end - - local filter = { - ["passive-provider"]=true, - ["active-provider"]=true, - ["storage"] = true, - } - - local existing_choice_is_valid = false - local logistics = game.get_filtered_entity_prototypes{{filter="type", type="logistic-container"}} - for _, chest in pairs(logistics) do - if chest.flags and chest.flags.hidden then goto skip_chest end - if blacklist[chest.name] then goto skip_chest end - local cbox = chest.collision_box - local size = math.ceil(cbox.right_bottom.x - cbox.left_top.x) - if size > 1 then goto skip_chest end - if not filter[chest.logistic_mode] then goto skip_chest end - - values[#values+1] = { - value=chest.name, - tooltip=chest.localised_name, - icon=("entity/"..chest.name), - order=chest.order, - } - if chest.name == choices.logistics_choice then existing_choice_is_valid = true end - - ::skip_chest:: - end - - if not existing_choice_is_valid then - if mpp_util.table_find(values, function(v) return v.value == layout.defaults.logistics end) then - choices.logistics_choice = layout.defaults.logistics - else - choices.logistics_choice = values[1].value - end - end - - local table_root = player_data.gui.tables["logistics"] - create_setting_selector(player_data, table_root, "mpp_action", "logistics", values) -end - ----@param player_data PlayerData -local function update_pole_selection(player_data) - local choices = player_data.choices - local layout = layouts[choices.layout_choice] - local restrictions = layout.restrictions - - player_data.gui.section["pole"].visible = restrictions.pole_available - if not restrictions.pole_available then return end - - local pole_width_min, pole_width_max = restrictions.pole_width[1], restrictions.pole_width[2] - local pole_supply_min, pole_supply_max = restrictions.pole_supply_area[1], restrictions.pole_supply_area[2] - - local values = {} - values[1] = { - value="none", - tooltip={"mpp.choice_none"}, - icon="mpp_no_entity", - order="", - } - - local existing_choice_is_valid = ("none" == choices.pole_choice) - local poles = game.get_filtered_entity_prototypes{{filter="type", type="electric-pole"}} - for _, pole in pairs(poles) do - if pole.flags and pole.flags.hidden then goto skip_pole end - if blacklist[pole.name] then goto skip_pole end - local cbox = pole.collision_box - local size = math.ceil(cbox.right_bottom.x - cbox.left_top.x) - local supply_area = pole.supply_area_distance - if size < pole_width_min or pole_width_max < size then goto skip_pole end - if supply_area < pole_supply_min or pole_supply_max < supply_area then goto skip_pole end - - values[#values+1] = { - value=pole.name, - tooltip=pole.localised_name, - icon=("entity/"..pole.name), - order=pole.order, - } - if pole.name == choices.pole_choice then existing_choice_is_valid = true end - - ::skip_pole:: - end - - if not existing_choice_is_valid then - choices.pole_choice = layout.defaults.pole - end - - local table_root = player_data.gui.tables["pole"] - create_setting_selector(player_data, table_root, "mpp_action", "pole", values) -end - ----@param player LuaPlayer -local function update_misc_selection(player) - local player_data = global.players[player.index] - local choices = player_data.choices - local layout = layouts[choices.layout_choice] - ---@type SettingValueEntry[] - local values = {} - - if layout.restrictions.module_available then - ---@type string|nil - local existing_choice = choices.module_choice - if not game.item_prototypes[existing_choice] then - existing_choice = nil - choices.module_choice = "none" - end - - values[#values+1] = { - action="mpp_prototype", - value="module", - tooltip={"gui.module"}, - icon=("mpp_no_module"), - --default="mining-patch-planner-module", - elem_type="item", - elem_filters={{filter="type", type="module"}}, - elem_value = existing_choice, - type="choose-elem-button", - } - end - - if layout.restrictions.lamp_available then - values[#values+1] = { - value="lamp", - tooltip={"mpp.choice_lamp"}, - icon=("mpp_no_lamp"), - icon_enabled=("entity/small-lamp"), - } - end - - if layout.restrictions.pipe_available then - local existing_choice = choices.pipe_choice - if not game.entity_prototypes[existing_choice] then - existing_choice = nil - choices.pipe_choice = "none" - end - - values[#values+1] = { - action="mpp_prototype", - value="pipe", - tooltip={"entity-name.pipe"}, - icon=("mpp_no_pipe"), - --default="mining-patch-planner-module", - elem_type="entity", - elem_filters={{filter="type", type="pipe"}}, - elem_value = existing_choice, - type="choose-elem-button", - } - end - - if layout.restrictions.deconstruction_omit_available then - values[#values+1] = { - value="deconstruction", - tooltip={"mpp.choice_deconstruction"}, - icon=("mpp_deconstruct"), - icon_enabled=("mpp_omit_deconstruct"), - } - end - - if compatibility.is_space(player.surface_index) and layout.restrictions.landfill_omit_available then - local existing_choice = choices.space_landfill_choice - if not game.entity_prototypes[existing_choice] then - existing_choice = "se-space-platform-scaffold" - choices.space_landfill_choice = existing_choice - end - - values[#values+1] = { - action="mpp_prototype", - value="space_landfill", - icon=("item/"..existing_choice), - elem_type="item", - elem_filters={ - {filter="name", name="se-space-platform-scaffold"}, - {filter="name", name="se-space-platform-plating", mode="or"}, - {filter="name", name="se-spaceship-floor", mode="or"}, - }, - elem_value = choices.space_landfill_choice, - type="choose-elem-button", - } - end - - if layout.restrictions.landfill_omit_available then - values[#values+1] = { - value="landfill", - tooltip={"mpp.choice_landfill"}, - icon=("item/landfill"), - icon_enabled=("mpp_omit_landfill") - } - end - - if layout.restrictions.coverage_tuning then - values[#values+1] = { - value="coverage", - tooltip={"mpp.choice_coverage"}, - icon=("mpp_miner_coverage_disabled"), - icon_enabled=("mpp_miner_coverage"), - } - end - - if layout.restrictions.start_alignment_tuning then - values[#values+1] = { - value="start", - tooltip={"mpp.choice_start"}, - icon=("mpp_align_start"), - } - end - - if layout.restrictions.placement_info_available then - values[#values+1] = { - value="print_placement_info", - tooltip={"mpp.print_placement_info"}, - icon=("mpp_print_placement_info_disabled"), - icon_enabled=("mpp_print_placement_info_enabled"), - } - end - - if layout.restrictions.lane_filling_info_available then - values[#values+1] = { - value="display_lane_filling", - tooltip={"mpp.display_lane_filling"}, - icon=("mpp_display_lane_filling_disabled"), - icon_enabled=("mpp_display_lane_filling_enabled"), - } - end - - if player_data.advanced then - if layout.restrictions.pipe_available then - values[#values+1] = { - value="force_pipe_placement", - tooltip={"mpp.force_pipe_placement"}, - icon=("mpp_force_pipe_disabled"), - icon_enabled=("mpp_force_pipe_enabled"), - } - end - - if layout.restrictions.miner_available then - values[#values+1] = { - value="show_non_electric_miners", - tooltip={"mpp.show_non_electric_miners"}, - icon=("mpp_show_all_miners"), - refresh=true, - } - end - end - - local misc_section = player_data.gui.section["misc"] - misc_section.visible = #values > 0 - - local table_root = player_data.gui.tables["misc"] - create_setting_selector(player_data, table_root, "mpp_toggle", "misc", values) -end - ----@param player_data PlayerData -local function update_blueprint_selection(player_data) - local choices = player_data.choices - local player_blueprints = player_data.blueprints - player_data.gui.section["blueprints"].visible = choices.layout_choice == "blueprints" - player_data.gui["blueprint_add_section"].visible = player_data.blueprint_add_mode - player_data.gui["blueprint_add_button"].style = style_helper_blueprint_toggle(player_data.blueprint_add_mode) - - for key, value in pairs(player_blueprints.delete) do - value.visible = player_data.blueprint_add_mode - end -end - ----@param player LuaPlayer -local function update_selections(player) - local player_data = global.players[player.index] - player_data.gui.blueprint_add_button.visible = player_data.choices.layout_choice == "blueprints" - update_miner_selection(player_data) - update_belt_selection(player) - update_space_belt_selection(player) - update_logistics_selection(player_data) - update_pole_selection(player_data) - update_blueprint_selection(player_data) - update_misc_selection(player) -end - ----@param player LuaPlayer -function gui.show_interface(player) - ---@type LuaGuiElement - local frame = player.gui.screen["mpp_settings_frame"] - local player_data = global.players[player.index] - player_data.blueprint_add_mode = false - if frame then - frame.visible = true - else - gui.create_interface(player) - end - update_selections(player) -end - ----@param player LuaPlayer -local function abort_blueprint_mode(player) - local player_data = global.players[player.index] - if not player_data.blueprint_add_mode then return end - player_data.blueprint_add_mode = false - update_blueprint_selection(player_data) - local cursor_stack = player.cursor_stack - if cursor_stack == nil then return end - player.clear_cursor() - cursor_stack.set_stack("mining-patch-planner") -end - ----@param player LuaPlayer -function gui.hide_interface(player) - ---@type LuaGuiElement - local frame = player.gui.screen["mpp_settings_frame"] - local player_data = global.players[player.index] - player_data.blueprint_add_mode = false - if frame then - frame.visible = false - end -end - ----@param event EventDataGuiClick -local function on_gui_click(event) - local player = game.players[event.player_index] - ---@type PlayerData - local player_data = global.players[event.player_index] - local evt_ele_tags = event.element.tags - if evt_ele_tags["mpp_advanced_settings"] then - abort_blueprint_mode(player) - - local last_value = player_data.advanced - local value = not last_value - player_data.advanced = value - - update_selections(player) - - player_data.gui["advanced_settings"].style = style_helper_advanced_toggle(value) - elseif evt_ele_tags["mpp_action"] then - abort_blueprint_mode(player) - - local action = evt_ele_tags["mpp_action"] - local value = evt_ele_tags["value"] - local last_value = player_data.choices[action.."_choice"] - - player_data.gui.selections[action][last_value].style = style_helper_selection(false) - event.element.style = style_helper_selection(true) - player_data.choices[action.."_choice"] = value - elseif evt_ele_tags["mpp_toggle"] then - abort_blueprint_mode(player) - - local action = evt_ele_tags["mpp_toggle"] - local value = evt_ele_tags["value"] - local last_value = player_data.choices[value.."_choice"] - - if evt_ele_tags.mpp_icon_enabled then - if not last_value then - event.element.sprite = evt_ele_tags.mpp_icon_enabled --[[@as string]] - else - event.element.sprite = evt_ele_tags.mpp_icon_default --[[@as string]] - end - end - - player_data.choices[value.."_choice"] = not last_value - event.element.style = style_helper_selection(not last_value) - if evt_ele_tags.refresh then update_selections(player) end - elseif evt_ele_tags["mpp_blueprint_add_mode"] then - player_data.blueprint_add_mode = not player_data.blueprint_add_mode - player.clear_cursor() - if not player_data.blueprint_add_mode then - player.cursor_stack.set_stack("mining-patch-planner") - end - player_data.gui["blueprint_add_section"].visible = player_data.blueprint_add_mode - player_data.gui["blueprint_add_button"].style = style_helper_blueprint_toggle(player_data.blueprint_add_mode) - update_blueprint_selection(player_data) - elseif evt_ele_tags["mpp_blueprint_receptacle"] then - local cursor_stack = player.cursor_stack - if ( - not cursor_stack or - not cursor_stack.valid or - not cursor_stack.valid_for_read or - not cursor_stack.is_blueprint - ) then - if cursor_stack and not cursor_stack.is_blueprint then - player.print({"mpp.msg_blueprint_valid"}) - end - return nil - elseif not mpp_util.validate_blueprint(player, cursor_stack) then - return nil - end - - local player_blueprints = player_data.blueprint_items - local pending_slot = player_blueprints.find_empty_stack() - - ---@param bp LuaItemStack - local function check_existing(bp) - for k, v in pairs(player_data.blueprints.original_id) do - if v == bp.item_number then return true end - end - end - if check_existing(cursor_stack) then - player.print({"mpp.msg_blueprint_existing"}) - return nil - end - - if pending_slot == nil then - player_blueprints.resize(#player_blueprints+1--[[@as uint16]]) - pending_slot = player_blueprints.find_empty_stack() - end - - if pending_slot then - pending_slot.set_stack(cursor_stack) - local blueprint_table = player_data.gui.tables["blueprints"] - create_blueprint_entry(player_data, blueprint_table, pending_slot, cursor_stack) - else - player.print({"mpp.msg_blueprint_fatal_error"}, {r=1,g=0,b=0}) - end - - elseif evt_ele_tags["mpp_fake_blueprint_button"] then - local button = event.element - if button.style.name ~= "mpp_fake_blueprint_button_invalid" then - set_player_blueprint(player_data, button) - abort_blueprint_mode(player) - end - elseif evt_ele_tags["mpp_delete_blueprint_button"] then - local choices = player_data.choices - local deleted_number = evt_ele_tags["mpp_delete_blueprint_button"] - local player_blueprints = player_data.blueprints - if choices.blueprint_choice and choices.blueprint_choice.item_number == deleted_number then - choices.blueprint_choice = nil - end - player_blueprints.mapping[deleted_number].clear() - player_blueprints.flow[deleted_number].destroy() - - player_blueprints.mapping[deleted_number] = nil - player_blueprints.flow[deleted_number] = nil - player_blueprints.button[deleted_number] = nil - player_blueprints.delete[deleted_number] = nil - player_blueprints.cache[deleted_number] = nil - player_blueprints.original_id[deleted_number] = nil - end -end -script.on_event(defines.events.on_gui_click, on_gui_click) - ----@param event EventDataGuiSelectionStateChanged -local function on_gui_selection_state_changed(event) - local player = game.players[event.player_index] - if event.element.tags["mpp_drop_down"] then - abort_blueprint_mode(player) - ---@type PlayerData - local player_data = global.players[event.player_index] - - local action = event.element.tags["mpp_drop_down"] - local value = layouts[event.element.selected_index].name - player_data.choices.layout_choice = value - update_selections(player) - end -end -script.on_event(defines.events.on_gui_selection_state_changed, on_gui_selection_state_changed) - ----@param event EventData.on_gui_elem_changed -local function on_gui_elem_changed(event) - local element = event.element - local player = game.players[event.player_index] - ---@type PlayerData - local player_data = global.players[event.player_index] - local evt_ele_tags = element.tags - if evt_ele_tags["mpp_prototype"] then - local action = evt_ele_tags.value - local old_choice = player_data.choices[action.."_choice"] - local choice = element.elem_value - element.children[1].visible = not choice - player_data.choices[action.."_choice"] = choice or "none" - end -end - -script.on_event(defines.events.on_gui_elem_changed, on_gui_elem_changed) - -return gui diff --git a/mining-patch-planner_1.5.7/info.json b/mining-patch-planner_1.5.7/info.json deleted file mode 100644 index 75810204..00000000 --- a/mining-patch-planner_1.5.7/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "mining-patch-planner", - "version": "1.5.7", - "title": "Mining patch planner", - "author": "Rimbas", - "factorio_version": "1.1", - "dependencies": ["base >= 1.1.75"], - "description": "Adds a planner that designs a miner layout for a resource patch." -} diff --git a/mining-patch-planner_1.5.7/layouts/base.lua b/mining-patch-planner_1.5.7/layouts/base.lua deleted file mode 100644 index a865c7a5..00000000 --- a/mining-patch-planner_1.5.7/layouts/base.lua +++ /dev/null @@ -1,79 +0,0 @@ -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local mpp_util = require("mpp_util") - ----@type Layout -local layout = {} - -layout.name = "Base" -layout.translation = {"mpp.settings_layout_choice_base"} - -layout.defaults = {} -layout.defaults.miner = "electric-mining-drill" -layout.defaults.belt = "transport-belt" -layout.defaults.pole = "medium-electric-pole" -layout.defaults.logistics = "logistic-chest-passive-provider" -layout.defaults.pipe = "pipe" - -layout.restrictions = {} -layout.restrictions.miner_available = true -layout.restrictions.miner_near_radius = {1, 10e3} -layout.restrictions.miner_far_radius = {1, 10e3} -layout.restrictions.belt_available = true -layout.restrictions.uses_underground_belts = false -layout.restrictions.pole_available = true -layout.restrictions.pole_omittable = true -layout.restrictions.pole_width = {1, 1} -layout.restrictions.pole_length = {5, 10e3} -layout.restrictions.pole_supply_area = {2.5, 10e3} -layout.restrictions.lamp_available = true -layout.restrictions.coverage_tuning = false -layout.restrictions.logistics_available = false -layout.restrictions.landfill_omit_available = true -layout.restrictions.start_tuning = false -layout.restrictions.deconstruction_omit_available = true -layout.restrictions.module_available = false -layout.restrictions.pipe_available = false -layout.restrictions.placement_info_available = false -layout.restrictions.lane_filling_info_available = false - ---- Called from script.on_load ---- ONLY FOR SETMETATABLE USE ----@param self Layout ----@param state State -function layout:on_load(state) end - ---- Validate the selection ----@param self Layout ----@param state State -function layout:validate(state) - local r = self.restrictions - return true -end - ----Layout-specific state initialisation ----@param self Layout ----@param state State -function layout:initialize(state) - local miner_proto = game.entity_prototypes[state.miner_choice] - state.miner = mpp_util.miner_struct(miner_proto) -end - ----Starting step ----@param self Layout ----@param state State ----@return CallbackState -function layout:start(state) - return false -end - ----Probably too much indirection at this point ----@param self Layout ----@param state State -function layout:tick(state) - state.tick = state.tick + 1 - return self[state._callback](self, state) -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/blueprints.lua b/mining-patch-planner_1.5.7/layouts/blueprints.lua deleted file mode 100644 index 8b12cab0..00000000 --- a/mining-patch-planner_1.5.7/layouts/blueprints.lua +++ /dev/null @@ -1,687 +0,0 @@ -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local base = require("layouts.base") -local grid_mt = require("grid_mt") -local mpp_util = require("mpp_util") -local coord_convert, coord_revert = mpp_util.coord_convert, mpp_util.coord_revert -local bp_direction = mpp_util.bp_direction - ----@class BlueprintLayout : Layout -local layout = table.deepcopy(base) - ----@class BlueprintState : SimpleState ----@field bp_w number ----@field bp_h number ----@field attempts BpPlacementAttempt[] ----@field best_attempt BpPlacementAttempt ----@field beacons BpPlacementEnt[] ----@field builder_power_poles BpPlacementEnt[] ----@field lamps BpPlacementEnt[] - ---- Coordinate space for the attempt ----@class BpPlacementAttempt : PlacementAttempt ----@field other_ents BpPlacementEnt[] ----@field s_ix number Current blueprint metatile x ----@field s_iy number Current blueprint metatile y ----@field s_ie number Current entity index ----@field x number x start ----@field y number y start ----@field cx number number of blueprint repetitions on x axis ----@field cy number number of blueprint repetitions on y axis - - ----@class BpPlacementEnt ----@field ent BlueprintEntityEx ----@field center GridTile ----@field x number ----@field y number ----@field direction defines.direction - -layout.name = "blueprints" -layout.translation = {"mpp.settings_layout_choice_blueprints"} - -layout.restrictions.miner_available = false -layout.restrictions.belt_available = false -layout.restrictions.pole_available = false -layout.restrictions.lamp_available = false -layout.restrictions.coverage_tuning = true -layout.restrictions.landfill_omit_available = true -layout.restrictions.start_alignment_tuning = true - ----Called from script.on_load ----@param self BlueprintLayout ----@param state BlueprintState -function layout:on_load(state) - if state.grid then - setmetatable(state.grid, grid_mt) - end -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:validate(state) - return base.validate(self, state) -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:start(state) - local grid = {} - local c = state.coords - local bp = state.cache - - bp.tw, bp.th = bp.w, bp.h - local th, tw = c.h, c.w - if state.direction_choice == "south" or state.direction_choice == "north" then - th, tw = tw, th - bp.tw, bp.th = bp.h, bp.w - end - c.th, c.tw = th, tw - - for y = -bp.h, th+bp.h do - local row = {} - grid[y] = row - for x = -bp.w, tw+bp.w do - row[x] = { - resources = 0, - x = x, y = y, - gx = c.x1 + x, gy = c.y1 + y, - consumed = false, - built_on = false, - neighbor_counts = {}, - } - end - end - - state.grid = setmetatable(grid, grid_mt) - return "process_grid" -end - ----Called from script.on_load ----@param self BlueprintLayout ----@param state BlueprintState -function layout:process_grid(state) - local c = state.coords - local grid = state.grid - local resources = state.resources - local conv = coord_convert[state.direction_choice] - local gx, gy = state.coords.gx, state.coords.gy - local gw, gh = state.coords.w, state.coords.h - local resources = state.resources - - state.resource_tiles = state.resource_tiles or {} - local resource_tiles = state.resource_tiles - - local convolve_size = 0 - local convolve_steps = {} - for _, miner in pairs(state.cache.miners) do - ---@cast miner MinerStruct - convolve_size = miner.full_size ^ 2 + miner.size ^ 2 - convolve_steps[miner.far] = true - convolve_steps[miner.near] = true - end - local budget, cost = 12000, 0 - - local i = state.resource_iter or 1 - while i <= #resources and cost < budget do - local r = resources[i] - local x, y = r.position.x, r.position.y - local tx, ty = conv(x-gx, y-gy, gw, gh) - local tile = grid:get_tile(tx, ty) - tile.amount = r.amount - for width, _ in pairs(convolve_steps) do - grid:convolve_custom(tx, ty, width) - end - resource_tiles[#resource_tiles+1] = tile - cost = cost + convolve_size - i = i + 1 - - --[[ debug visualisation - resource - rendering.draw_circle{ - surface = state.surface, - filled = false, - color = {0, 1, 0.3}, - width = 1, - target = {c.gx + tx, c.gy + ty}, - radius = 0.5, - } - --]] - end - state.resource_iter = i - - if state.resource_iter >= #state.resources then - return "init_first_pass" - end - return true -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:init_first_pass(state) - local c = state.coords - local bp = state.cache - ---@type BpPlacementAttempt[] - local attempts = {} - state.attempts = attempts - state.best_attempt_index = 1 - state.attempt_index = 1 - - local function calc_slack(tw, bw, offset) - local count = ceil((tw-offset) / bw) - local overrun = count * bw - tw + offset - local start = -floor(overrun / 2) - local slack = overrun % 2 - return count, start, slack - end - - local count_x, start_x, slack_x = calc_slack(c.tw, bp.w, bp.ox) - local count_y, start_y, slack_y = calc_slack(c.th, bp.h, bp.oy) - - if state.start_choice then - start_x, slack_x = 0, 0 - end - - attempts[1] = { - x = start_x, y = start_y, - cx = count_x, cy = count_y, - slack_x = slack_x, slack_y = slack_y, - miners = {}, postponed = {}, - other_ents = {}, - } - - state.bp_grid = {} - for iy = 0, start_y - 1 do - local row = state.bp_grid[iy] - for ix = 0, start_x - 1 do - row[ix] = {completed = false} - end - end - - --[[ debug rendering - rendering.draw_rectangle{ - surface=state.surface, - left_top={state.coords.ix1, state.coords.iy1}, - right_bottom={state.coords.ix1 + c.tw, state.coords.iy1 + c.th}, - filled=false, width=8, color={0, 0, 1, 1}, - players={state.player}, - } - - for iy = 0, count_y-1 do - for ix = 0, count_x-1 do - rendering.draw_rectangle{ - surface=state.surface, - left_top={ - c.ix1 + start_x + bp.w * ix, - c.iy1 + start_y + bp.h * iy, - }, - right_bottom={ - c.ix1 + start_x + bp.w * (ix+1), - c.iy1 + start_y + bp.h * (iy+1), - }, - filled=false, width=2, color={0, 0.5, 1, 1}, - players={state.player}, - } - end - end - --]] - - return "first_pass" -end - ----@param miner MinerStruct -local function miner_heuristic(miner, coverage) - local near, far = miner.near, miner.far - local full, size = miner.full_size, miner.size - local neighbor_cap = ceil((size ^ 2) * 0.5) - if coverage then - ---@param tile GridTile - return function(tile) - local nearc, farc = tile.neighbor_counts[near], tile.neighbor_counts[far] - return nearc and (nearc > 0 or - (farc and farc > neighbor_cap and nearc > (size * near)) - ) - end - end - ---@param tile GridTile - return function(tile) - local nearc, farc = tile.neighbor_counts[near], tile.neighbor_counts[far] - return nearc and (nearc > neighbor_cap or - (farc and farc > neighbor_cap and nearc > (size * near)) - ) - end -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:first_pass(state) - local grid = state.grid - local bp = state.cache - local entities = bp.entities - local attempt = state.attempts[state.attempt_index] - local sx, sy, countx, county = attempt.x, attempt.y, attempt.cx-1, attempt.cy-1 - local bpconv = bp_direction[state.direction_choice] - local bpw, bph = bp.w, bp.h - local heuristics = {} - for k, v in pairs(bp.miners) do heuristics[k] = miner_heuristic(v, state.coverage_choice) end - - local miners, postponed = attempt.miners, attempt.postponed - local other_ents = attempt.other_ents - local s_ix = attempt.s_ix or 0 - local s_iy = attempt.s_iy or 0 - local s_ie = attempt.s_ie or 1 - local progress, progress_cap = 0, 64 - --local ix, iy, ie = s_ix, s_iy, s_ie - for iy = s_iy, county do - --while iy <= county do - local capstone_y = iy == county - for ix = s_ix, countx do - --while ix <= countx do - --for _, ent in pairs(bp.entities) do - for ie = s_ie, #entities do - --while ie <= #entities do - local ent = entities[ie] - ie = ie + 1 - local capstone_x = ix == countx - if ent.capstone_y and not capstone_y then goto skip_ent end - if ent.capstone_x and not capstone_x then goto skip_ent end - local bpx, bpy = ceil(ent.position.x), ceil(ent.position.y) - local x, y = sx + ix * bpw + bpx, sy + iy * bph + bpy - local tile = grid:get_tile(x, y) - if not tile then goto skip_ent end - local bptr = bpconv[ent.direction or defines.direction.north] - - local miner = state.cache.miners[ent.name] - if state.cache.miners[ent.name] then - local struct = { - ent = ent, - line = s_iy, - center = tile, - column = s_ix, - direction = bptr, - name = ent.name, - near = miner.near, - far = miner.far, - x = x, y = y, - } - local count_near = tile.neighbor_counts[miner.near] - local count_far = tile.neighbor_counts[miner.far] - if heuristics[ent.name](tile) then - miners[#miners+1] = struct - - local even = mpp_util.entity_even_width(ent.name) - grid:consume_custom(x, y, miner.far, even[1], even[2]) - else - postponed[#postponed+1] = struct - end - else - other_ents[#other_ents+1] = { - ent = ent, - center = tile, - x = x, y = y, - direction = bptr, - } - end - - --[[ debug rendering - rendering.draw_circle{ - surface = state.surface, - player = state.player, - filled = false, - color = {1,1,1,1}, - radius= 0.5, - target = {c.gx + x, c.gy + y}, - } - --]] - - progress = progress + 1 - if progress > progress_cap then - attempt.s_ix, attempt.s_iy, attempt.s_ie = ix, iy, ie - return true - end - - ::skip_ent:: - end - s_ie = 1 - end - s_ix = 0 - end - return "first_pass_finish" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:first_pass_finish(state) - local grid = state.grid - local attempt = state.attempts[state.attempt_index] - local miners, postponed = attempt.miners, attempt.postponed - - -- second pass - for _, miner in ipairs(miners) do - local even = mpp_util.entity_even_width(miner.ent.name) - grid:consume_custom(miner.center.x, miner.center.y, miner.far, even[1], even[2]) - end - - for _, miner in ipairs(postponed) do - local center = miner.center - miner.unconsumed = grid:get_unconsumed_custom(center.x, center.y, miner.far) - end - - table.sort(postponed, function(a, b) - if a.unconsumed == b.unconsumed then - local sizes = mpp_util.keys_to_set(a.center.neighbor_counts, b.center.neighbor_counts) - for i = #sizes, 1, -1 do - local size = sizes[i] - local left, right = a.center.neighbor_counts[size], b.center.neighbor_counts[size] - if left ~= nil and right ~= nil then - return left > right - elseif left ~= nil then - return true - end - end - return false - end - return a.unconsumed > b.unconsumed - end) - - for _, miner in ipairs(postponed) do - local center = miner.center - local unconsumed_count = grid:get_unconsumed_custom(center.x, center.y, miner.far) - if unconsumed_count > 0 then - local even = mpp_util.entity_even_width(miner.ent.name) - grid:consume_custom(center.x, center.y, miner.far, even[1], even[2]) - miners[#miners+1] = miner - end - end - - state.best_attempt = attempt - - return "simple_deconstruct" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:simple_deconstruct(state) - local c = state.coords - local m = state.miner - local player = state.player - local surface = state.surface - local bp = state.cache - - local deconstructor = global.script_inventory[state.deconstruction_choice and 2 or 1] - surface.deconstruct_area{ - force=player.force, - player=player.index, - area={ - left_top={c.x1-(bp.tw/2), c.y1-(bp.th/2)}, - right_bottom={c.x2+(bp.tw/2), c.y2+(bp.th/2)} - }, - item=deconstructor, - } - - --[[ debug rendering - deconstruction area - rendering.draw_rectangle{ - surface=state.surface, - players={state.player}, - filled=false, - width=3, - color={1, 0, 0}, - left_top={c.x1-(bp.tw/2), c.y1-(bp.th/2)}, - right_bottom={c.x2+(bp.tw/2), c.y2+(bp.th/2)} - } - ]] - - return "place_miners" -end - ----@param tile GridTile ----@param ent BlueprintEntity|MinerPlacement ----@return number ----@return number -local function fix_offgrid(tile, ent) - local ex, ey = ent.position.x, ent.position.y - local ox, oy = 0, 0 - if ex == ceil(ex) then ox = 0.5 end - if ey == ceil(ey) then oy = 0.5 end - return tile.x + ox, tile.y + oy -end - ----@param self SimpleLayout ----@param state BlueprintState -function layout:place_miners(state) - local c = state.coords - local grid = state.grid - local surface = state.surface - for _, miner in ipairs(state.best_attempt.miners) do - local center = miner.center - --g:build_miner_custom(center.x, center.y, miner.near) - - local even = mpp_util.entity_even_width(miner.ent.name) - grid:build_thing(center.x, center.y, "miner", miner.near, even[1]) - local ex, ey = fix_offgrid(center, miner.ent) - local x, y = coord_revert[state.direction_choice](ex, ey, c.tw, c.th) - -- local can_place = surface.can_place_entity{ - -- name=state.miner.name, - -- force = state.player.force, - -- position={center.gx, center.gy}, - -- direction = defines.direction.north, - -- build_check_type = - -- } - - --[[ debug visualisation - miner placement - local off = state.miner.size / 2 - rendering.draw_rectangle{ - surface = state.surface, - filled = false, - color = miner.postponed and {1, 0, 0} or {0, 1, 0}, - width = 3, - --target = {c.x1 + x, c.y1 + y}, - left_top = {c.gx+x-off, c.gy + y - off}, - right_bottom = {c.gx+x+off, c.gy + y + off}, - } - --]] - - local target = surface.create_entity{ - raise_built=true, - name="entity-ghost", - player=state.player, - force = state.player.force, - position = {c.gx + x, c.gy + y}, - direction = miner.direction, - inner_name = miner.name, - } - if miner.ent.items then - target.item_requests = miner.ent.items - end - end - - return "place_other" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:place_other(state) - local c = state.coords - local grid = state.grid - local surface = state.surface - local beacons, power, lamps = {}, {}, {} - state.beacons, state.builder_power_poles, state.lamps = beacons, power, lamps - - for _, other_ent in ipairs(state.best_attempt.other_ents) do - ---@type BlueprintEntity - local ent = other_ent.ent - local center = other_ent.center - local ent_type = game.entity_prototypes[ent.name].type - - if ent_type == "beacon" then - beacons[#beacons+1] = other_ent - goto continue - elseif ent_type == "electric-pole" then - power[#power+1] = other_ent - goto continue - --elseif ent_type == "lamp" then - --lamps[#lamps+1] = other_ent - --goto continue - end - - local ex, ey = fix_offgrid(center, ent) - local x, y = coord_revert[state.direction_choice](ex, ey, c.tw, c.th) - local target = surface.create_entity{ - raise_built=true, - name="entity-ghost", - player=state.player, - force=state.player.force, - position= {c.gx + x, c.gy + y}, - direction = other_ent.direction, - inner_name = ent.name, - type=ent.type, - output_priority=ent.output_priority, - input_priority=ent.input_priority, - filter=ent.filter, - filters=ent.filters, - filter_mode=ent.filter_mode, - override_stack_size=ent.override_stack_size, - } - - if ent.items then - target.item_requests = ent.items - end - - --[[ debug rendering - rendering.draw_circle{ - surface = state.surface, - player = state.player, - filled = false, - color = {0.5,0.5,1,1}, - width=3, - radius= 0.4, - target = {c.gx + center.x, c.gy + center.y}, - } - --]] - - ::continue:: - end - - return "place_beacons" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:place_beacons(state) - local c = state.coords - local surface = state.surface - local grid = state.grid - - for _, other_ent in ipairs(state.beacons) do - ---@type BlueprintEntity - local ent = other_ent.ent - local center = other_ent.center - - local even = mpp_util.entity_even_width(ent.name) - local range = floor(game.entity_prototypes[ent.name].supply_area_distance) - if grid:find_thing(center.x, center.y, "miner", range+even.near, even[1]) then - local ex, ey = fix_offgrid(center, ent) - local x, y = coord_revert[state.direction_choice](ex, ey, c.tw, c.th) - local target = surface.create_entity{ - raise_built=true, - name="entity-ghost", - player=state.player, - force=state.player.force, - position= {c.gx + x, c.gy + y}, - direction = other_ent.direction, - inner_name = ent.name, - type=ent.type, - } - if ent.items then - target.item_requests = ent.items - end - grid:build_thing(center.x, center.y, "beacon", even.near, even[1]) - end - - end - - return "place_electricity" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:place_electricity(state) - local c = state.coords - local surface = state.surface - local grid = state.grid - - for _, other_ent in ipairs(state.builder_power_poles) do - ---@type BlueprintEntity - local ent = other_ent.ent - local center = other_ent.center - - local even = mpp_util.entity_even_width(ent.name) - local range = floor(game.entity_prototypes[ent.name].supply_area_distance) - if grid:find_thing_in(center.x, center.y, {"miner", "beacon"}, range, even[1]) then - local ex, ey = fix_offgrid(center, ent) - local x, y = coord_revert[state.direction_choice](ex, ey, c.tw, c.th) - local target = surface.create_entity{ - raise_built=true, - name="entity-ghost", - player=state.player, - force=state.player.force, - position= {c.gx + x, c.gy + y}, - direction = other_ent.direction, - inner_name = ent.name, - type=ent.type, - } - if ent.items then - target.item_requests = ent.items - end - grid:build_thing(center.x, center.y, "electricity", even.near, even[1]) - end - end - return "finish" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:debug_overlay(state) - local c = state.coords - local surface = state.surface - local grid = state.grid - - -- Draws built thing overlay - - for iy, row in pairs(grid) do - if type(iy) ~= "number" then - game.print("asdf") - return - end - for ix, tile in pairs(row) do - local building = tile.built_on - if building then - local color = {0.3, 0.3, 0.3, 0.5} - if building == "miner" then - color = {0.1, 0.1, 0.8, 0.7} - elseif building == "beacon" then - color = {0.1, 0.8, 0.8, 0.7} - end - - rendering.draw_circle{ - surface=state.surface, - player=state.player, - filled=false, - radius=0.5, - color=color, - target={tile.gx-1, tile.gy-1}, - } - end - end - end - - return "finish" -end - ----@param self BlueprintLayout ----@param state BlueprintState -function layout:finish(state) - return false -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/common.lua b/mining-patch-planner_1.5.7/layouts/common.lua deleted file mode 100644 index 5e42035d..00000000 --- a/mining-patch-planner_1.5.7/layouts/common.lua +++ /dev/null @@ -1,134 +0,0 @@ -local common = {} - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - ----@param miner MinerStruct -function common.simple_miner_placement(miner) - local near, far, size, fullsize = miner.near, miner.far, miner.size, miner.full_size - local neighbor_cap = (near + 1) ^ 2 - local leech = (far + 1) ^ 2 - - ---@param center GridTile - return function(center) - return center.neighbor_count > neighbor_cap - -- return center.neighbor_count > neighbor_cap or center.far_neighbor_count > leech - end -end - ----@param miner MinerStruct -function common.overfill_miner_placement(miner) - local near, far, size, fullsize = miner.near, miner.far, miner.size, miner.full_size - local neighbor_cap = (near + 1) ^ 2 - 1 - local leech = far ^ 2 - 1 - - ---@param center GridTile - return function(center) - return center.neighbor_count > 0 or center.far_neighbor_count > leech - end -end - ----@param attempt PlacementAttempt -function common.simple_layout_heuristic(attempt) - --local lane_weigth = 0.05 * ((#attempt.lane_layout) ^ (1/3) - 1) + 1 - return attempt.simple_density / attempt.miner_count + attempt.empty_space / attempt.miner_count - --return attempt.simple_density / attempt.miner_count * lane_weigth - --return (attempt.real_density - attempt.simple_density) -- * math.log(#attempt.lane_layout) -end - ----@param attempt PlacementAttempt -function common.overfill_layout_heuristic(attempt) - --return (attempt.simple_density-attempt.real_density) / attempt.miner_count - --return attempt.simple_density - attempt.real_density -- * math.log(#attempt.lane_layout) - return -attempt.far_neighbor_sum -end - ----Utility to fill in postponed miners on unconsumed resources ----@param state SimpleState ----@param heuristics PlacementAttempt ----@param miners MinerPlacement[] ----@param postponed MinerPlacement[] -function common.process_postponed(state, heuristics, miners, postponed) - local grid = state.grid - local size, near, far, fullsize = state.miner.size, state.miner.near, state.miner.far, state.miner.full_size - - for _, miner in ipairs(miners) do - grid:consume(miner.center.x, miner.center.y) - end - - for _, miner in ipairs(postponed) do - local center = miner.center - miner.unconsumed = grid:get_unconsumed(center.x, center.y) - end - - table.sort(postponed, function(a, b) - if a.unconsumed == b.unconsumed then - local a_center, b_center = a.center, b.center - if a_center.neighbor_count == b_center.neighbor_count then - return a_center.far_neighbor_count > b_center.far_neighbor_count - end - return a_center.neighbor_count > b_center.neighbor_count - end - return a.unconsumed > b.unconsumed - end) - - for _, miner in ipairs(postponed) do - local center = miner.center - local unconsumed_count = grid:get_unconsumed(center.x, center.y) - if unconsumed_count > 0 then - heuristics.neighbor_sum = heuristics.neighbor_sum + center.neighbor_count - heuristics.far_neighbor_sum = heuristics.far_neighbor_sum + center.far_neighbor_count - heuristics.empty_space = heuristics.empty_space + (size^2) - center.neighbor_count - heuristics.simple_density = heuristics.simple_density + center.neighbor_count / (size ^ 2) - heuristics.real_density = heuristics.real_density + center.far_neighbor_count / (fullsize ^ 2) - heuristics.leech_sum = heuristics.leech_sum + max(0, center.far_neighbor_count - center.neighbor_count) - heuristics.postponed_count = heuristics.postponed_count + 1 - - grid:consume(center.x, center.y) - miners[#miners+1] = miner - heuristics.miner_count = heuristics.miner_count + 1 - miner.postponed = true - end - end - local unconsumed_sum = 0 - for _, tile in ipairs(state.resource_tiles) do - if not tile.consumed then unconsumed_sum = unconsumed_sum + 1 end - end - heuristics.unconsumed_count = unconsumed_sum - - grid:clear_consumed(state.resource_tiles) -end - -local seed -local function get_map_seed() - if seed then return seed end - - local game_exchange_string = game.get_map_exchange_string() - local map_data = game.parse_map_exchange_string(game_exchange_string) - - local seed_number = map_data.map_gen_settings.seed - seed = string.format("%x", seed_number) - return seed -end - ----Dump state to json for inspection ----@param state SimpleState -function common.save_state_to_file(state, type_) - - local c = state.coords - local gx, gy = floor(c.gx), floor(c.gy) - local dir = state.direction_choice - - local coverage = state.coverage_choice and "t" or "f" - local filename = string.format("layout_%s_%i;%i_%s_%i_%s_%s_%x.%s", get_map_seed(), gx, gy, state.miner_choice, #state.resources, dir, coverage, game.tick, type_) - - if type_ == "json" then - game.print(string.format("Dumped data to %s ", filename)) - game.write_file("mpp-inspect/"..filename, game.table_to_json(state), false, state.player.index) - elseif type_ == "lua" then - game.print(string.format("Dumped data to %s ", filename)) - game.write_file("mpp-inspect/"..filename, serpent.dump(state, {}), false, state.player.index) - end -end - -return common diff --git a/mining-patch-planner_1.5.7/layouts/compact.lua b/mining-patch-planner_1.5.7/layouts/compact.lua deleted file mode 100644 index e7df0cde..00000000 --- a/mining-patch-planner_1.5.7/layouts/compact.lua +++ /dev/null @@ -1,402 +0,0 @@ -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local common = require("layouts.common") -local simple = require("layouts.simple") -local mpp_util = require("mpp_util") -local EAST, NORTH, SOUTH, WEST = mpp_util.directions() - ----@class CompactLayout : SimpleLayout -local layout = table.deepcopy(simple) - -layout.name = "compact" -layout.translation = {"mpp.settings_layout_choice_compact"} - -layout.restrictions.miner_near_radius = {1, 1} -layout.restrictions.miner_far_radius = {1, 10e3} -layout.restrictions.uses_underground_belts = true -layout.restrictions.pole_omittable = true -layout.restrictions.pole_width = {1, 1} -layout.restrictions.pole_length = {7.5, 10e3} -layout.restrictions.pole_supply_area = {2.5, 10e3} -layout.restrictions.coverage_tuning = true -layout.restrictions.lamp_available = true -layout.restrictions.module_available = true -layout.restrictions.pipe_available = true - ----@param state SimpleState ----@return PlacementAttempt -function layout:_placement_attempt(state, shift_x, shift_y) - local grid = state.grid - local size, near, far = state.miner.size, state.miner.near, state.miner.far - local fullsize = state.miner.full_size - local neighbor_sum = 0 - local far_neighbor_sum = 0 - local simple_density = 0 - local real_density = 0 - local miners, postponed = {}, {} - local leech_sum = 0 - local empty_space = 0 - local lane_layout = {} - - local heuristic = self:_get_miner_placement_heuristic(state) - - local row_index = 1 - for ry = 1 + shift_y, state.coords.th + near, size + 0.5 do - local y = ceil(ry) - local column_index = 1 - lane_layout[#lane_layout+1] = {y = y+near, row_index = row_index} - for x = 1 + shift_x, state.coords.tw, size do - local tile = grid:get_tile(x, y) - local center = grid:get_tile(x+near, y+near) --[[@as GridTile]] - local miner = { - tile = tile, - line = row_index, - column = column_index, - center = center, - } - if heuristic(center) then - miners[#miners+1] = miner - neighbor_sum = neighbor_sum + center.neighbor_count - far_neighbor_sum = far_neighbor_sum + center.far_neighbor_count - empty_space = empty_space + (size^2) - center.neighbor_count - real_density = real_density + center.far_neighbor_count / (fullsize ^ 2) - simple_density = simple_density + center.neighbor_count / (size ^ 2) - leech_sum = leech_sum + max(0, center.far_neighbor_count - center.neighbor_count) - elseif center.far_neighbor_count > 0 then - postponed[#postponed+1] = miner - end - column_index = column_index + 1 - end - row_index = row_index + 1 - end - - local result = { - sx=shift_x, sy=shift_y, - miners=miners, - miner_count=#miners, - lane_layout=lane_layout, - postponed=postponed, - neighbor_sum=neighbor_sum, - far_neighbor_sum=far_neighbor_sum, - leech_sum=leech_sum, - simple_density=simple_density, - real_density=real_density, - empty_space=empty_space, - unconsumed_count=0, - postponed_count=0, - } - - common.process_postponed(state, result, miners, postponed) - - return result -end - ----@param self CompactLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local pole_proto = game.entity_prototypes[state.pole_choice] or {supply_area_distance=3, max_wire_distance=9} - local supply_area, wire_reach = 3.5, 9 - if pole_proto then - supply_area, wire_reach = pole_proto.supply_area_distance, pole_proto.max_wire_distance - end - - local belts = {} - state.belts = belts - state.builder_belts = {} - - if supply_area < 3 or wire_reach < 9 then - state.pole_step = 6 - self:_placement_belts_small(state) - else - state.pole_step = 9 - self:_placement_belts_large(state) - end - - return "prepare_pole_layout" -end - -local function create_entity_que(belts) - return function(t) belts[#belts+1] = t end -end - ----@param self CompactLayout ----@param state SimpleState -function layout:_placement_belts_small(state) - local m = state.miner - local attempt = state.best_attempt - local belt_choice = state.belt_choice - local underground_belt = game.entity_prototypes[belt_choice].related_underground_belt.name - - local power_poles = {} - state.builder_power_poles = power_poles - - ---@type table - local miner_lanes = {} - local miner_lane_count = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - - local belts = state.belts - - for _, miner in ipairs(attempt.miners) do - local index = miner.line - miner_lane_count = max(miner_lane_count, index) - if not miner_lanes[index] then miner_lanes[index] = {} end - local line = miner_lanes[index] - line[#line+1] = miner - end - - for _, lane in ipairs(miner_lanes) do - table.sort(lane, function(a, b) return a.center.x < b.center.x end) - end - - ---@param lane MinerPlacement[] - local function get_lane_length(lane) if lane then return lane[#lane].center.x end return 0 end - ---@param lane MinerPlacement[] - local function get_lane_column(lane) if lane and #lane > 0 then return lane[#lane].column end return 0 end - - state.belt_count = 0 - local que_entity = create_entity_que(state.builder_belts) - - local function belts_filled(x1, y, w) - for x = x1, x1 + w do - que_entity{name=belt_choice, direction=WEST, grid_x=x, grid_y=y, thing="belt"} - end - end - - local pipe_adjust = state.place_pipes and -1 or 0 - for i = 1, miner_lane_count, 2 do - local lane1 = miner_lanes[i] - local lane2 = miner_lanes[i+1] - - local y = attempt.sy + m.size * i + ceil(i/2) - local x0 = attempt.sx + 1 - - local column_count = max(get_lane_column(lane1), get_lane_column(lane2)) - if column_count == 0 then goto continue_lane end - - state.belt_count = state.belt_count + 1 - - local indices = {} - if lane1 then for _, v in ipairs(lane1) do indices[v.column] = v end end - if lane2 then for _, v in ipairs(lane2) do indices[v.column] = v end end - - if state.place_pipes then - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x = x0 + pipe_adjust, - grid_y = y, - direction=WEST, - } - end - - belts[#belts+1] = { - x1 = x0 + pipe_adjust, x2 = x0 + column_count * m.size, - y = y, lane1 = lane1, lane2 = lane2, - } - - for j = 1, column_count do - local x1 = x0 + (j-1) * m.size - if j % 2 == 1 then -- part one - if indices[j] or indices[j+1] then - que_entity{ - name=state.belt_choice, thing="belt", grid_x=x1, grid_y=y, direction=WEST, - } - local stopper = (j+1 > column_count) and state.belt_choice or underground_belt - que_entity{ - name=stopper, thing="belt", grid_x=x1+1, grid_y=y, direction=WEST, type="output", - } - -- power_poles[#power_poles+1] = { - -- x=x1+3, y=y, - -- ix=1+floor(i/2), iy=1+floor(j/2), - -- built = true, - -- } - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = x1+3, - grid_y = y, - ix=1+floor(i/2), iy=1+floor(j/2), - } - else -- just a passthrough belt - belts_filled(x1, y, m.size - 1) - end - elseif j % 2 == 0 then -- part two - if indices[j-1] or indices[j] then - que_entity{ - name=belt_choice, thing="belt", grid_x=x1+2, grid_y=y, direction=WEST, - } - que_entity{ - name=underground_belt, thing="belt", grid_x=x1+1, grid_y=y, direction=WEST, - } - else -- just a passthrough belt - belts_filled(x1, y, m.size - 1) - end - end - end - - ::continue_lane:: - end - -end - - ----@param self CompactLayout -function layout:_placement_belts_large(state) - local m = state.miner - local attempt = state.best_attempt - local belt_choice = state.belt_choice - local underground_belt = game.entity_prototypes[belt_choice].related_underground_belt.name - - local power_poles = {} - state.builder_power_poles = power_poles - - local belts = state.belts - - ---@type table - local miner_lanes = {{}} - local miner_lane_count = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - - for _, miner in ipairs(attempt.miners) do - local index = miner.line - miner_lane_count = max(miner_lane_count, index) - if not miner_lanes[index] then miner_lanes[index] = {} end - local line = miner_lanes[index] - line[#line+1] = miner - end - - state.miner_lane_count = miner_lane_count - - local que_entity = create_entity_que(state.builder_belts) - - for _, lane in pairs(miner_lanes) do - table.sort(lane, function(a, b) return a.center.x < b.center.x end) - end - - ---@param lane MinerPlacement[] - local function get_lane_length(lane) if lane and #lane > 0 then return lane[#lane].center.x or 0 end return 0 end - ---@param lane MinerPlacement[] - local function get_lane_column(lane) if lane and #lane > 0 then return lane[#lane].column or 0 end return 0 end - - local function belts_filled(x1, y, w) - for x = x1, x1 + w do - que_entity{name=belt_choice, direction=WEST, grid_x=x, grid_y=y, thing="belt"} - end - end - - local pipe_adjust = state.place_pipes and -1 or 0 - for i = 1, miner_lane_count, 2 do - local lane1 = miner_lanes[i] - local lane2 = miner_lanes[i+1] - - local y = attempt.sy + m.size * i + ceil(i/2) - local x0 = attempt.sx + 1 - - local column_count = max(get_lane_column(lane1), get_lane_column(lane2)) - if column_count == 0 then goto continue_lane end - - local indices = {} - if lane1 then for _, v in ipairs(lane1) do indices[v.column] = v end end - if lane2 then for _, v in ipairs(lane2) do indices[v.column] = v end end - - if state.place_pipes then - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x = x0 + pipe_adjust, - grid_y = y, - direction=WEST, - } - end - - belts[#belts+1] = { - x1 = x0 + pipe_adjust, x2 = x0 + column_count * m.size, - y = y, lane1 = lane1, lane2 = lane2, - } - - for j = 1, column_count do - local x1 = x0 + (j-1) * m.size - if j % 3 == 1 then -- part one - if indices[j] or indices[j+1] or indices[j+2] then - que_entity{ - name=belt_choice, grid_x=x1, grid_y=y, thing="belt", direction=WEST, - } - - local stopper = (j+1 > column_count) and state.belt_choice or underground_belt - que_entity{ - name=stopper, grid_x=x1+1, grid_y=y, thing="belt", direction=WEST, - type="output", - } - -- power_poles[#power_poles+1] = { - -- x=x1+3, y=y, - -- ix=1+floor(i/2), iy=1+floor(j/2), - -- built = true, - -- } - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = x1+3, - grid_y = y, - ix=1+floor(i/2), iy=1+floor(j/2), - } - else -- just a passthrough belt - belts_filled(x1, y, m.size - 1) - end - elseif j % 3 == 2 then -- part two - if indices[j-1] or indices[j] or indices[j+1] then - que_entity{ - name=underground_belt, grid_x=x1+1, grid_y=y, thing="belt", direction=WEST, - type="input", - } - que_entity{ - name=belt_choice, grid_x=x1+2, grid_y=y, thing="belt", direction=WEST, - } - else -- just a passthrough belt - belts_filled(x1, y, m.size - 1) - end - elseif j % 3 == 0 then - belts_filled(x1, y, m.size - 1) - end - end - - ::continue_lane:: - end -end - ----@param self CompactLayout ----@param state SimpleState -function layout:prepare_lamp_layout(state) - local lamps = {} - state.builder_lamps = lamps - - local grid = state.grid - - local sx, sy = -1, 0 - local lamp_spacing = true - if state.pole_step > 7 then lamp_spacing = false end - - for _, pole in ipairs(state.builder_power_poles) do - local x, y = pole.grid_x, pole.grid_y - local ix, iy = pole.ix, pole.iy - local tile = grid:get_tile(x+sx, y+sy) - local skippable_lamp = iy % 2 == 1 and ix % 2 == 1 - if tile and (not lamp_spacing or skippable_lamp) then - lamps[#lamps+1] = { - name="small-lamp", - thing="lamp", - grid_x = x+sx, - grid_y = y+sy, - } - end - end - - return "expensive_deconstruct" -end - ----@param self CompactLayout ----@param state SimpleState -function layout:prepare_pole_layout(state) - return "prepare_lamp_layout" -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/compact_logistics.lua b/mining-patch-planner_1.5.7/layouts/compact_logistics.lua deleted file mode 100644 index e162dad0..00000000 --- a/mining-patch-planner_1.5.7/layouts/compact_logistics.lua +++ /dev/null @@ -1,122 +0,0 @@ -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local super_compact = require("layouts.super_compact") -local logistics =require("layouts.logistics") -local builder = require("builder") - ----@class CompactLogisticsLayout: SuperCompactLayout -local layout = table.deepcopy(super_compact) - -layout.name = "compact_logistics" -layout.translation = {"mpp.settings_layout_choice_compact_logistics"} - -layout.restrictions.lamp_available = false -layout.restrictions.belt_available = false -layout.restrictions.logistics_available = true -layout.restrictions.lane_filling_info_available = false - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local m = state.miner - local g = state.grid - local attempt = state.best_attempt - - local power_poles = {} - state.builder_power_poles = power_poles - - ---@type table - local miner_lanes = {{}} - local miner_lane_number = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - - local builder_belts = {} - state.builder_belts = builder_belts - local function que_entity(t) builder_belts[#builder_belts+1] = t end - - for _, miner in ipairs(attempt.miners) do - local index = miner.line * 2 + miner.stagger - 2 - miner_lane_number = max(miner_lane_number, index) - if not miner_lanes[index] then miner_lanes[index] = {} end - local line = miner_lanes[index] - if miner.center.x > (line.last_x or 0) then - line.last_x = miner.center.x - line.last_miner = miner - end - line[#line+1] = miner - end - - local shift_x, shift_y = state.best_attempt.sx, state.best_attempt.sy - - local function place_logistics(start_x, end_x, y) - local belt_start = 1 + shift_x + start_x - if start_x ~= 0 then - local miner = g:get_tile(shift_x+m.size, y) - if miner and miner.built_on == "miner" then - que_entity{ - name=state.logistics_choice, - thing="belt", - grid_x=shift_x+m.size+1, - grid_y=y, - } - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = shift_x, - grid_y = y, - } - end - end - - for x = belt_start, end_x, m.size * 2 do - local miner1 = g:get_tile(x, y-1) --[[@as GridTile]] - local miner2 = g:get_tile(x, y+1) --[[@as GridTile]] - local miner3 = g:get_tile(x+3, y) --[[@as GridTile]] - local built = miner1.built_on == "miner" or miner2.built_on == "miner" - local capped = miner3.built_on == "miner" - local pole_built = built or capped - - if capped then - que_entity{ - name=state.logistics_choice, - thing="belt", - grid_x=x+m.size*2, - grid_y=y, - } - end - if built then - que_entity{ - name=state.logistics_choice, - thing="belt", - grid_x=x+1, - grid_y=y, - } - end - - if pole_built then - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = x + 2, - grid_y = y, - } - end - end - end - - local stagger_shift = 1 - for i = 1, miner_lane_number do - local lane = miner_lanes[i] - if lane and lane.last_x then - local y = m.size + shift_y - 1 + (m.size + 2) * (i-1) - local x_start = stagger_shift % 2 == 0 and 3 or 0 - place_logistics(x_start, lane.last_x, y) - end - stagger_shift = stagger_shift + 1 - end - return "expensive_deconstruct" -end - -layout.finish = logistics.finish - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/logistics.lua b/mining-patch-planner_1.5.7/layouts/logistics.lua deleted file mode 100644 index bfb9a768..00000000 --- a/mining-patch-planner_1.5.7/layouts/logistics.lua +++ /dev/null @@ -1,93 +0,0 @@ -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local simple = require("layouts.simple") -local mpp_util = require("mpp_util") -local mpp_revert = mpp_util.revert -local pole_grid_mt = require("pole_grid_mt") - ----@class LogisticsLayout:SimpleLayout -local layout = table.deepcopy(simple) - -layout.name = "logistics" -layout.translation = {"mpp.settings_layout_choice_logistics"} - -layout.restrictions.belt_available = false -layout.restrictions.logistics_available = true -layout.restrictions.lane_filling_info_available = false - ----@param self LogisticsLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local m = state.miner - local attempt = state.best_attempt - - local power_poles = {} - state.builder_power_poles = power_poles - - ---@type table - local miner_lanes = {{}} - local miner_lane_number = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - local miner_max_column = 0 - - for _, miner in ipairs(attempt.miners) do - local index = miner.line - miner_lane_number = max(miner_lane_number, index) - if not miner_lanes[index] then miner_lanes[index] = {} end - local line = miner_lanes[index] - line[#line+1] = miner - miner_max_column = max(miner_max_column, miner.column) - end - state.miner_lane_count = miner_lane_number - state.miner_max_column = miner_max_column - - for _, lane in ipairs(miner_lanes) do - table.sort(lane, function(a, b) return a.center.x < b.center.x end) - end - ---@param lane MinerPlacement[] - local function get_lane_length(lane) if lane then return lane[#lane].center.x end return 0 end - ---@param lane MinerPlacement[] - local function get_lane_column(lane) if lane and #lane > 0 then return lane[#lane].column or 0 end return 0 end - - local belts = {} - state.builder_belts = belts - - for i = 1, miner_lane_number, 2 do - local lane1 = miner_lanes[i] - local lane2 = miner_lanes[i+1] - - local y = attempt.sy + (m.size + 1) * i - local x0 = attempt.sx + 1 - - local column_count = max(get_lane_column(lane1), get_lane_column(lane2)) - local indices = {} - if lane1 then for _, v in ipairs(lane1) do indices[v.column] = v end end - if lane2 then for _, v in ipairs(lane2) do indices[v.column] = v end end - - for j = 1, column_count do - local x = x0 + m.near + m.size * (j-1) - if indices[j] then - belts[#belts+1] = { - name=state.logistics_choice, - thing="belt", - grid_x=x, - grid_y=y, - } - end - end - end - - return "prepare_pole_layout" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:finish(state) - if state.print_placement_info_choice and state.player.valid then - state.player.print({"mpp.msg_print_info_miner_placement_no_lanes", #state.best_attempt.miners, #state.resources}) - end - return false -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/simple.lua b/mining-patch-planner_1.5.7/layouts/simple.lua deleted file mode 100644 index 723b1a8c..00000000 --- a/mining-patch-planner_1.5.7/layouts/simple.lua +++ /dev/null @@ -1,1121 +0,0 @@ -local common = require("layouts.common") -local base = require("layouts.base") -local grid_mt = require("grid_mt") -local pole_grid_mt = require("pole_grid_mt") -local mpp_util = require("mpp_util") -local builder = require("builder") -local render_util = require("render_util") -local coord_convert, coord_revert = mpp_util.coord_convert, mpp_util.coord_revert -local internal_revert, internal_convert = mpp_util.internal_revert, mpp_util.internal_convert -local miner_direction, opposite = mpp_util.miner_direction, mpp_util.opposite - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max -local EAST, NORTH, SOUTH, WEST = mpp_util.directions() - ----@class SimpleLayout : Layout -local layout = table.deepcopy(base) - ----@class SimpleState : State ----@field debug_dump boolean ----@field saved_attempts PlacementAttempt[] ----@field first_pass any ----@field attempts PlacementCoords[] ----@field attempt_index number ----@field best_attempt PlacementAttempt ----@field best_attempt_score number Heuristic value ----@field best_attempt_index number ----@field resourcs LuaEntity[] ----@field resource_tiles GridTile ----@field longest_belt number For pole alignment information ----@field pole_step number ----@field miner_lane_count number Miner lane count ----@field miner_max_column number Miner column span ----@field grid Grid ----@field belts BeltSpecification[] ----@field belt_count number For info printout ----@field miner_lanes table ----@field place_pipes boolean ----@field pipe_layout_specification PlacementSpecification[] ----@field builder_miners GhostSpecification[] ----@field builder_pipes GhostSpecification[] ----@field builder_belts GhostSpecification[] ----@field builder_power_poles PowerPoleGhostSpecification[] ----@field builder_lamps GhostSpecification[] - -layout.name = "simple" -layout.translation = {"mpp.settings_layout_choice_simple"} - -layout.restrictions.miner_near_radius = {1, 10e3} -layout.restrictions.miner_far_radius = {1, 10e3} -layout.restrictions.pole_omittable = true -layout.restrictions.pole_width = {1, 1} -layout.restrictions.pole_length = {5, 10e3} -layout.restrictions.pole_supply_area = {2.5, 10e3} -layout.restrictions.lamp_available = true -layout.restrictions.coverage_tuning = true -layout.restrictions.module_available = true -layout.restrictions.pipe_available = true -layout.restrictions.placement_info_available = true -layout.restrictions.lane_filling_info_available = true - ---[[----------------------------------- - - Basic rundown: - * Create a virtual grid from resources - * Or restore from a previous state - * Run calculations on grid tiles to - * _brute_ force several miner layouts on the grid and find the best one - * Mark the area around for deconstruction - * Place the entity ghosts and mark built-on tiles - * Place landfill - ---]]----------------------------------- - ---- Called from script.on_load ---- ONLY FOR SETMETATABLE USE ----@param self SimpleLayout ----@param state SimpleState -function layout:on_load(state) - if state.grid then - setmetatable(state.grid, grid_mt) - end -end - --- Validate the selection ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:validate(state) - local c = state.coords - -- if (state.direction_choice == "west" or state.direction_choice == "east") then - -- if c.h < 7 then - -- return nil, {"mpp.msg_miner_err_1_w", 7} - -- end - -- else - -- if c.w < 7 then - -- return nil, {"mpp.msg_miner_err_1_h", 7} - -- end - -- end - return base.validate(self, state) -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:start(state) - return "deconstruct_previous_ghosts" -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:deconstruct_previous_ghosts(state) - local next_step = "initialize_grid" - if state._previous_state == nil or state._previous_state._collected_ghosts == nil then - return next_step - end - - local force, player = state.player.force, state.player - for _, ghost in pairs(state._previous_state._collected_ghosts) do - if ghost.valid then - ghost.order_deconstruction(force, player) - end - end - - return next_step -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:initialize_grid(state) - local miner = state.miner - local c = state.coords - - local th, tw = c.h, c.w - if state.direction_choice == "south" or state.direction_choice == "north" then - th, tw = tw, th - end - c.th, c.tw = th, tw - - local y1, y2 = -miner.full_size, th + miner.full_size+1 - local x1, x2 = -miner.full_size, tw + miner.full_size+1 - c.extent_x1, c.extent_y1, c.extent_x2, c.extent_y2 = x1, y1, x2, y2 - - --[[ debug rendering - bounds - state._render_objects[#state._render_objects+1] = rendering.draw_rectangle{ - surface=state.surface, - left_top={state.coords.ix1, state.coords.iy1}, - right_bottom={state.coords.ix1 + c.tw, state.coords.iy1 + c.th}, - filled=false, width=4, color={0, 0, 1, 1}, - players={state.player}, - } - - state._render_objects[#state._render_objects+1] = rendering.draw_rectangle{ - surface=state.surface, - left_top={state.coords.ix1-miner.full_size-1, state.coords.iy1-miner.full_size-1}, - right_bottom={state.coords.ix1+state.coords.tw+miner.full_size+1, state.coords.iy1+state.coords.th+miner.full_size+1}, - filled=false, width=4, color={0, 0.5, 1, 1}, - players={state.player}, - } - --]] - - local grid = {} - grid.miner = miner - - for y = y1, y2 do - local row = {} - grid[y] = row - for x = x1, x2 do - --local tx1, ty1 = conv(c.x1, c.y1, c.tw, c.th) - row[x] = { - neighbor_count = 0, - far_neighbor_count = 0, - x = x, y = y, - gx = c.x1 + x, gy = c.y1 + y, - consumed = false, - built_on = false, - } - end - end - - state.grid = setmetatable(grid, grid_mt) - return "process_grid" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:process_grid(state) - local grid = state.grid - local c = state.coords - local conv = coord_convert[state.direction_choice] - local gx, gy = state.coords.gx, state.coords.gy - local resources = state.resources - - state.resource_tiles = state.resource_tiles or {} - local resource_tiles = state.resource_tiles - - local price = state.miner.full_size ^ 2 - local budget, cost = 12000, 0 - - local i = state.resource_iter or 1 - while i <= #resources and cost < budget do - local ent = resources[i] - local x, y = ent.position.x - gx, ent.position.y - gy - local tx, ty = conv(x, y, c.w, c.h) - local tile = grid:get_tile(tx, ty) - tile.amount = ent.amount - grid:convolve(tx, ty) - resource_tiles[#resource_tiles+1] = tile - cost = cost + price - i = i + 1 - end - state.resource_iter = i - - --[[ debug visualisation - resource and coord - for _, ent in ipairs(resource_tiles) do - state._render_objects[#state._render_objects+1] = rendering.draw_circle{ - surface = state.surface, - filled = false, - color = {0.3, 0.3, 1}, - width = 1, - target = {c.gx + ent.x, c.gy + ent.y}, - radius = 0.5, - } - state._render_objects[#state._render_objects+1] = rendering.draw_text{ - text=string.format("%i,%i", ent.x, ent.y), - surface = state.surface, - color={1,1,1}, - target={c.gx + ent.x, c.gy + ent.y}, - alignment = "center", - } - end --]] - - if state.resource_iter >= #state.resources then - return "prepare_layout_attempts" - end - return true -end - ----@class MinerPlacement ----@field tile GridTile ----@field center GridTile ----@field line number lane index ----@field stagger number Super compact layout stagger index ----@field column number column index ----@field ent BlueprintEntity|nil ----@field unconsumed number Unconsumed resource count for postponed miners ----@field direction string - ----@class PlacementCoords ----@field sx number x shift ----@field sy number y shift - ----@class PlacementAttempt ----@field sx number x shift ----@field sy number y shift ----@field miners MinerPlacement[] ----@field miner_count number ----@field postponed MinerPlacement[] ----@field heuristic_score number ----@field neighbor_sum number ----@field lane_layout LaneInfo ----@field far_neighbor_sum number ----@field unconsumed_count number ----@field simple_density number ----@field real_density number ----@field leech_sum number ----@field postponed_count number ----@field empty_space number - ----@class LaneInfo ----@field y number ----@field row_index number - -function layout:_get_miner_placement_heuristic(state) - if state.coverage_choice then - return common.overfill_miner_placement(state.miner) - else - return common.simple_miner_placement(state.miner) - end -end - -function layout:_get_layout_heuristic(state) - if state.coverage_choice then - return common.overfill_layout_heuristic - else - return common.simple_layout_heuristic - end -end - ----@param state SimpleState ----@return PlacementAttempt -function layout:_placement_attempt(state, shift_x, shift_y) - local c = state.coords - local grid = state.grid - local size, near, far, fullsize = state.miner.size, state.miner.near, state.miner.far, state.miner.full_size - local miners, postponed = {}, {} - local neighbor_sum = 0 - local far_neighbor_sum = 0 - local simple_density = 0 - local real_density = 0 - local leech_sum = 0 - local empty_space = 0 - local lane_layout = {} - - local heuristic = self:_get_miner_placement_heuristic(state) - - local row_index = 1 - for y = 1 + shift_y, state.coords.th + near, size + 1 do - local column_index = 1 - lane_layout[#lane_layout+1] = {y = y+near, row_index = row_index} - for x = 1 + shift_x, state.coords.tw + near, size do - local tile = grid:get_tile(x, y) - local center = grid:get_tile(x+near, y+near) --[[@as GridTile]] - local miner = { - tile = tile, - line = row_index, - center = center, - column=column_index, - } - if center.far_neighbor_count > 0 and heuristic(center) then - miners[#miners+1] = miner - neighbor_sum = neighbor_sum + center.neighbor_count - far_neighbor_sum = far_neighbor_sum + center.far_neighbor_count - empty_space = empty_space + (size^2) - center.neighbor_count - simple_density = simple_density + center.neighbor_count / (size ^ 2) - real_density = real_density + center.far_neighbor_count / (fullsize ^ 2) - leech_sum = leech_sum + max(0, center.far_neighbor_count - center.neighbor_count) - elseif center.far_neighbor_count > 0 then - postponed[#postponed+1] = miner - end - column_index = column_index + 1 - end - row_index = row_index + 1 - end - - local result = { - sx=shift_x, sy=shift_y, - miners=miners, - miner_count=#miners, - lane_layout=lane_layout, - postponed=postponed, - neighbor_sum=neighbor_sum, - far_neighbor_sum=far_neighbor_sum, - leech_sum=leech_sum, - simple_density=simple_density, - real_density=real_density, - empty_space=empty_space, - unconsumed_count=0, - postponed_count=0, - } - - common.process_postponed(state, result, miners, postponed) - - return result -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_layout_attempts(state) - local m = state.miner - --local init_pos_x, init_pos_y = -m.near, -m.near - local init_pos_x, init_pos_y = -m.near, -m.near - local attempts = {{init_pos_x, init_pos_y}} - state.attempts = attempts - state.best_attempt_index = 1 - state.attempt_index = 1 -- first attempt is used up - --local ext_behind, ext_forward = -m.far, m.far - m.near - local ext_behind, ext_forward = -m.far, m.far - m.near - - --for sy = ext_behind, ext_forward do - -- for sx = ext_behind, ext_forward do - for sy = ext_forward, ext_behind, -1 do - for sx = ext_forward, ext_behind, -1 do - if not (sx == init_pos_x and sy == init_pos_y) then - attempts[#attempts+1] = {sx, sy} - end - end - end - - return "init_layout_attempt" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:init_layout_attempt(state) - local attempt = state.attempts[state.attempt_index] - - state.best_attempt = self:_placement_attempt(state, attempt[1], attempt[2]) - state.best_attempt_score = self:_get_layout_heuristic(state)(state.best_attempt) - - if state.debug_dump then - state.best_attempt.heuristic_score = state.best_attempt_score - state.saved_attempts = {} - state.saved_attempts[#state.saved_attempts+1] = state.best_attempt - end - - state.attempt_index = state.attempt_index + 1 - return "layout_attempt" -end - ----Bruteforce the best solution ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:layout_attempt(state) - local attempt_state = state.attempts[state.attempt_index] - - ---@type PlacementAttempt - local current_attempt = self:_placement_attempt(state, attempt_state[1], attempt_state[2]) - local current_attempt_score = self:_get_layout_heuristic(state)(current_attempt) - - if state.debug_dump then - current_attempt.heuristic_score = current_attempt_score - state.saved_attempts[#state.saved_attempts+1] = current_attempt - end - - if current_attempt.unconsumed_count == 0 and current_attempt_score < state.best_attempt_score then - state.best_attempt_index = state.attempt_index - state.best_attempt = current_attempt - state.best_attempt_score = current_attempt_score - end - - if state.attempt_index >= #state.attempts then - - return "prepare_miner_layout" - end - state.attempt_index = state.attempt_index + 1 - return true -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:prepare_miner_layout(state) - local c = state.coords - local g = state.grid - - ---@type GhostSpecification[] - local builder_miners = {} - state.builder_miners = builder_miners - - ---@type table - local miner_lanes = {} - local miner_lane_count = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - local miner_max_column = 0 - state.miner_lanes = miner_lanes - - for _, miner in ipairs(state.best_attempt.miners) do - local center = miner.center - g:build_miner(center.x, center.y) - - -- local can_place = surface.can_place_entity{ - -- name=state.miner.name, - -- force = state.player.force, - -- position={center.gx, center.gy}, - -- direction = defines.direction.north, - -- build_check_type = - -- } - - --[[ debug visualisation - miner placement - local off = state.miner.size / 2 - rendering.draw_rectangle{ - surface = state.surface, - filled = false, - color = miner.postponed and {1, 0, 0} or {0, 1, 0}, - width = 3, - --target = {c.x1 + x, c.y1 + y}, - left_top = {c.gx+x-off, c.gy + y - off}, - right_bottom = {c.gx+x+off, c.gy + y + off}, - } - --]] - - local index = miner.line - miner_lane_count = max(miner_lane_count, index) - if not miner_lanes[index] then miner_lanes[index] = {} end - local line = miner_lanes[index] - line[#line+1] = miner - miner_max_column = max(miner_max_column, miner.column) - - -- used for deconstruction, not ghost placement - builder_miners[#builder_miners+1] = { - thing="miner", - grid_x = miner.center.x, - grid_y = miner.center.y, - padding_pre = state.miner.near, - padding_post = state.miner.near, - } - end - state.miner_lane_count = miner_lane_count - state.miner_max_column = miner_max_column - - for _, lane in pairs(miner_lanes) do - table.sort(lane, function(a, b) return a.center.x < b.center.x end) - end - - return "prepare_pipe_layout" -end - ----@class PlacementSpecification ----@field x number ----@field w number ----@field y number ----@field h number ----@field structure string ----@field entity string ----@field radius number ----@field skip_up boolean ----@field skip_down boolean - ---- Process gaps between miners in "miner space" and translate them to grid specification ----@param self SimpleLayout ----@param state SimpleState ----@return PlacementSpecification[] -function layout:_get_pipe_layout_specification(state) - local pipe_layout = {} - - local m = state.miner - local attempt = state.best_attempt - - for _, pre_lane in ipairs(state.miner_lanes) do - if not pre_lane[1] then goto continue_lanes end - local y = pre_lane[1].center.y - local sx = state.best_attempt.sx - local lane = table.mapkey(pre_lane, function(t) return t.column end) -- make array with intentional gaps between miners - - -- Calculate a list of run-length gaps - -- start and length are in miner count - local gaps = {} - local current_start, current_length = nil, 0 - for i = 1, state.miner_max_column do - local miner = lane[i] - if miner and current_start then - gaps[#gaps+1] = {start=current_start, length=current_length} - current_start, current_length = nil, 0 - elseif not miner and not current_start then - current_start, current_length = i, 1 - else - current_length = current_length + 1 - end - end - - for i, gap in ipairs(gaps) do - local start, length = gap.start, gap.length - local gap_length = m.size * length - local gap_start = sx + (start-1) * m.size + 1 - - pipe_layout[#pipe_layout+1] = { - structure="horizontal", - x = gap_start, - w = gap_length-1, - y = y, - } - end - - ::continue_lanes:: - end - - for i = 1, state.miner_lane_count do - local lane = attempt.lane_layout[i] - pipe_layout[#pipe_layout+1] = { - structure="cap_vertical", - x=attempt.sx, - y=lane.y, - skip_up=i == 1, - skip_down=i == state.miner_lane_count, - } - end - - return pipe_layout -end - -function layout:prepare_pipe_layout(state) - local builder_pipes = {} - state.builder_pipes = builder_pipes - - local next_step = "prepare_belt_layout" - if state.pipe_choice == "none" - or (not state.requires_fluid and not state.force_pipe_placement_choice) - then - state.place_pipes = false - return next_step - end - state.place_pipes = true - - state.pipe_layout_specification = self:_get_pipe_layout_specification(state) - - local function que_entity(t) builder_pipes[#builder_pipes+1] = t end - local pipe = state.pipe_choice - - local ground_pipe, ground_proto = mpp_util.find_underground_pipe(pipe) - ---@cast ground_pipe string - - local step, span - if ground_proto then - step = ground_proto.max_underground_distance - span = step + 1 - end - - local function horizontal_underground(x, y, w) - que_entity{name=ground_pipe, thing="pipe", grid_x=x, grid_y=y, direction=WEST} - que_entity{name=ground_pipe, thing="pipe", grid_x=x+w, grid_y=y, direction=EAST} - end - local function horizontal_filled(x1, y, w) - for x = x1, x1+w do - que_entity{name=pipe, thing="pipe", grid_x=x, grid_y=y} - end - end - local function vertical_filled(x, y1, h) - for y = y1, y1 + h do - que_entity{name=pipe, thing="pipe", grid_x=x, grid_y=y} - end - end - local function cap_vertical(x, y, skip_up, skip_down) - que_entity{name=pipe, thing="pipe", grid_x=x, grid_y=y} - - if not ground_pipe then return end - if not skip_up then - que_entity{name=ground_pipe, thing="pipe", grid_x=x, grid_y=y-1, direction=SOUTH} - end - if not skip_down then - que_entity{name=ground_pipe, thing="pipe", grid_x=x, grid_y=y+1, direction=NORTH} - end - end - - for i, p in ipairs(state.pipe_layout_specification) do - local structure = p.structure - local x1, w, y1, h = p.x, p.w, p.y, p.h - if structure == "horizontal" then - if not ground_pipe then - horizontal_filled(x1, y1, w) - goto continue_pipe - end - - local quotient, remainder = math.divmod(w, span) - for j = 1, quotient do - local x = x1 + (j-1)*span - horizontal_underground(x, y1, step) - end - local x = x1 + quotient * span - if remainder >= 2 then - horizontal_underground(x, y1, remainder) - else - horizontal_filled(x, y1, remainder) - end - elseif structure == "vertical" then - vertical_filled(x, y1, h) - elseif structure == "cap_vertical" then - cap_vertical(x1, y1, p.skip_up, p.skip_down) - end - ::continue_pipe:: - end - - return next_step -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:prepare_belt_layout(state) - local m = state.miner - local attempt = state.best_attempt - - ---@type table - local miner_lanes = state.miner_lanes - local miner_lane_count = state.miner_lane_count -- highest index of a lane, because using # won't do the job if a lane is missing - local miner_max_column = state.miner_max_column - - ---@param lane MinerPlacement[] - local function get_lane_length(lane) if lane and lane[#lane] then return lane[#lane].center.x end return 0 end - - local pipe_adjust = state.place_pipes and -1 or 0 - - local belts = {} - state.belts = belts - state.belt_count = 0 - local longest_belt = 0 - for i = 1, miner_lane_count, 2 do - local lane1 = miner_lanes[i] - local lane2 = miner_lanes[i+1] - - local y = attempt.sy + (m.size + 1) * i - - local belt = {x1=attempt.sx + 1 + pipe_adjust, x2=attempt.sx + 1, y=y, built=false, lane1=lane1, lane2=lane2} - belts[#belts+1] = belt - - if lane1 or lane2 then - state.belt_count = state.belt_count + 1 - local x1 = belt.x1 - local x2 = max(get_lane_length(lane1), get_lane_length(lane2)) + m.near - longest_belt = max(longest_belt, x2 - x1 + 1) - belt.x2, belt.built = x2, true - end - - end - state.longest_belt = longest_belt - - local builder_belts = {} - state.builder_belts = builder_belts - - for _, belt in ipairs(belts) do - if not belt.built then goto continue end - local x1, x2, y = belt.x1, belt.x2, belt.y - for x = x1, x2 do - builder_belts[#builder_belts+1] = { - name=state.belt_choice, - thing="belt", - grid_x=x, - grid_y=y, - direction=defines.direction.west, - } - end - - ::continue:: - end - - return "prepare_pole_layout" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:prepare_pole_layout(state) - local c = state.coords - local m = state.miner - local g = state.grid - local attempt = state.best_attempt - - local pole_proto = game.entity_prototypes[state.pole_choice] or {supply_area_distance=3, max_wire_distance=9} - local supply_area, wire_reach = 3, 9 - if pole_proto then - supply_area, wire_reach = floor(pole_proto.supply_area_distance), pole_proto.max_wire_distance - end - - --TODO: figure out double lane coverage with insane supply areas - local function get_covered_miners(ix, iy) - --for sy = -supply_radius, supply_radius do - for sy = -supply_area, supply_area, 1 do - for sx = -supply_area, supply_area, 1 do - local tile = g:get_tile(ix+sx, iy+sy) - if tile and tile.built_on == "miner" then - return true - end - end - end - return false - end - - -----@type PowerPoleGrid - --local power_poles_grid = setmetatable({}, pole_grid_mt) - local builder_power_poles = {} - state.builder_power_poles = builder_power_poles - - local coverage = mpp_util.calculate_pole_coverage(state, state.miner_max_column, state.miner_lane_count) - - -- rendering.draw_circle{ - -- surface = state.surface, - -- player = state.player, - -- filled = true, - -- color = {1, 1, 1}, - -- radius = 0.5, - -- target = mpp_revert(c.gx, c.gy, DIR, attempt.sx, attempt.sy, c.tw, c.th), - -- } - - local pole_lanes = {} - - local iy = 1 - for y = attempt.sy + coverage.lane_start, c.th + m.size, coverage.lane_step do - local ix, pole_lane = 1, {} - pole_lanes[#pole_lanes+1] = pole_lane - for x = 1 + attempt.sx + coverage.pole_start, attempt.sx + coverage.full_miner_width + 1, coverage.pole_step do - local built = get_covered_miners(x, y) - - ---@type GridPole - local pole = {x=x, y=y, ix=ix, iy=iy, built=built} - --power_poles_grid:set_pole(ix, iy, pole) - --builder_power_poles[#builder_power_poles+1] = pole - pole_lane[ix] = pole - ix = ix + 1 - end - - local backtrack_built = false - for pole_i = #pole_lane, 1, -1 do - ---@type GridPole - local backtrack_pole = pole_lane[pole_i] - if backtrack_built or backtrack_pole.built then - backtrack_built = true - backtrack_pole.built = true - - builder_power_poles[#builder_power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = backtrack_pole.x, - grid_y = backtrack_pole.y, - } - - end - end - - iy = iy + 1 - end - - return "prepare_lamp_layout" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:prepare_lamp_layout(state) - local next_step = "expensive_deconstruct" - - if state.lamp_choice ~= true then return next_step end - - local lamps = {} - state.builder_lamps = lamps - - local sx, sy = -1, 0 - if state.pole_choice == "none" then sx = 0 end - - for _, pole in ipairs(state.builder_power_poles) do - ---@cast pole PowerPoleGhostSpecification - local x, y = pole.grid_x, pole.grid_y - if not pole.no_light then - lamps[#lamps+1] = { - name="small-lamp", - thing="lamp", - grid_x=x+sx, - grid_y=y+sy, - } - end - end - - return next_step -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:_get_deconstruction_objects(state) - return { - state.builder_miners, - state.builder_pipes, - state.builder_belts, - state.builder_power_poles, - state.builder_lamps, - } -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:expensive_deconstruct(state) - local c, DIR = state.coords, state.direction_choice - local player, surface = state.player, state.surface - - local deconstructor = global.script_inventory[state.deconstruction_choice and 2 or 1] - - for _, t in pairs(self:_get_deconstruction_objects(state)) do - for _, object in ipairs(t) do - ---@cast object GhostSpecification - local cx, cy = object.grid_x, object.grid_y - local pad_left, pad_right = object.padding_pre, object.padding_post - - local tpos1, tpos2 = { cx, cy }, { cx, cy } - if pad_left ~= nil and pad_right ~= nil then - pad_left, pad_right = pad_left or 0, pad_right or 0 - tpos1[1], tpos1[2] = cx - pad_left, cy - pad_left - tpos2[1], tpos2[2] = cx + pad_right, cy + pad_right - end - - pos1 = mpp_util.revert(c.gx, c.gy, DIR, tpos1[1], tpos1[2], c.tw, c.th) - pos2 = mpp_util.revert(c.gx, c.gy, DIR, tpos2[1], tpos2[2], c.tw, c.th) - - -- ugh - pos1[1], pos2[1] = min(pos1[1], pos2[1]), max(pos1[1], pos2[1]) - pos1[2], pos2[2] = min(pos1[2], pos2[2]), max(pos1[2], pos2[2]) - - surface.deconstruct_area{ - force=player.force, - player=player.index, - area={ - left_top={pos1[1]-.5,pos1[2]-.5}, - right_bottom={pos2[1]+.5,pos2[2]+.5}, - }, - item=deconstructor, - } - - --[[ debug rendering - deconstruction areas - rendering.draw_rectangle{ - surface=state.surface, - players={state.player}, - filled=false, - width=3, - color={1, 0, 0}, - left_top={pos1[1]-.4,pos1[2]-.4}, - right_bottom={pos2[1]+.4,pos2[2]+.4}, - } --]] - end - end - - return "placement_miners" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_miners(state) - local create_entity = builder.create_entity_builder(state) - - local module_inv_size = state.miner.module_inventory_size --[[@as uint]] - local grid = state.grid - - for i, miner in ipairs(state.best_attempt.miners) do - local direction = "south" - local flip_lane = miner.line % 2 ~= 1 - if flip_lane then direction = opposite[direction] end - - local x, y = miner.center.x, miner.center.y - - grid:build_miner(x, y) - local ghost = create_entity{ - name = state.miner_choice, - thing="miner", - grid_x = x, - grid_y = y, - direction = defines.direction[direction], - } - - if state.module_choice ~= "none" then - ghost.item_requests = {[state.module_choice] = module_inv_size} - end - end - - return "placement_pipes" -end - - ---- Pipe placement deals in tile grid space with spectifications from previous step ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_pipes(state) - local create_entity = builder.create_entity_builder(state) - - if state.builder_pipes then - for _, belt in ipairs(state.builder_pipes) do - create_entity(belt) - end - end - return "placement_belts" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_belts(state) - local create_entity = builder.create_entity_builder(state) - - for _, belt in ipairs(state.builder_belts) do - create_entity(belt) - end - - return "placement_poles" -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_poles(state) - local next_step = "placement_lamps" - if state.pole_choice == "none" then return next_step end - - local create_entity = builder.create_entity_builder(state) - - for _, pole in ipairs(state.builder_power_poles) do - local ghost = create_entity(pole) - --ghost.disconnect_neighbour() - --pole.ghost = ghost - end - - return next_step -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_lamps(state) - local next_step = "placement_landfill" - if not layout.restrictions.lamp_available or not state.lamp_choice then return next_step end - if not state.builder_lamps then return next_step end - - local create_entity = builder.create_entity_builder(state) - - for _, lamp in ipairs(state.builder_lamps) do - create_entity(lamp) - end - - return next_step -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_landfill(state) - local c = state.coords - local m = state.miner - local grid = state.grid - local surface = state.surface - - if state.landfill_choice then - return "finish" - end - - local conv = coord_convert[state.direction_choice] - local gx, gy = state.coords.ix1 - 1, state.coords.iy1 - 1 - - local fill_tiles, landfill - local area = {left_top={c.x1-m.full_size-1, c.y1-m.full_size-1}, right_bottom={c.x2+m.full_size+1, c.y2+m.full_size+1}} - if state.is_space then - fill_tiles = surface.find_tiles_filtered{area=area, name="se-space"} - landfill = state.space_landfill_choice - else - fill_tiles = surface.find_tiles_filtered{area=area, collision_mask="water-tile"} - landfill = "landfill" - end - - local collected_ghosts = state._collected_ghosts - - for _, fill in ipairs(fill_tiles) do - local tx, ty = fill.position.x, fill.position.y - local x, y = conv(tx-gx, ty-gy, c.w, c.h) - local tile = grid:get_tile(x, y) - - if tile and tile.built_on then - local tile_ghost = surface.create_entity{ - raise_built=true, - name="tile-ghost", - player=state.player, - force=state.player.force, - position=fill.position --[[@as MapPosition]], - inner_name=landfill, - } - - if tile_ghost then - collected_ghosts[#collected_ghosts+1] = tile_ghost - end - - --[[ debug rendering - landfill placement - rendering.draw_circle{ - surface=state.surface, - players={state.player}, - filled = true, - color={0, .3, 0}, - radius=0.3, - target={tx+.5, ty+.5}, - } - --]] - end - end - - return "finish" -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:_display_lane_filling(state) - if not state.display_lane_filling_choice or not state.belts then return end - - local drill_speed = game.entity_prototypes[state.miner_choice].mining_speed - local belt_speed = game.entity_prototypes[state.belt_choice].belt_speed * 60 * 4 - local dominant_resource = state.resource_counts[1].name - local resource_hardness = game.entity_prototypes[dominant_resource].mineable_properties.mining_time or 1 - local drill_productivity, module_speed = 1 + state.player.force.mining_drill_productivity_bonus, 1 - if state.module_choice ~= "none" then - local mod = game.item_prototypes[state.module_choice] - module_speed = module_speed + (mod.module_effects.speed and mod.module_effects.speed.bonus or 0) * state.miner.module_inventory_size - drill_productivity = drill_productivity + (mod.module_effects.productivity and mod.module_effects.productivity.bonus or 0) * state.miner.module_inventory_size - end - local multiplier = drill_speed / resource_hardness * module_speed * drill_productivity - - local throughput1, throughput2 = 0, 0 - --local ore_hardness = game.entity_prototypes[state.found_resources - for i, belt in pairs(state.belts) do - local function lane_capacity(lane) if lane then return #lane * multiplier end return 0 end - - local speed1, speed2 = lane_capacity(belt.lane1), lane_capacity(belt.lane2) - - throughput1 = throughput1 + math.min(1, speed1 / belt_speed) - throughput2 = throughput2 + math.min(1, speed2 / belt_speed) - - render_util.draw_belt_lane(state, belt) - - render_util.draw_belt_stats(state, belt, belt_speed, speed1, speed2) - end - - if #state.belts > 1 then - local x = min(state.belts[1].x1, state.belts[2].x1) - local y = (state.belts[1].y + state.belts[#state.belts].y) / 2 - render_util.draw_belt_total(state, x, y, throughput1, throughput2) - end - - --local lanes = math.ceil(math.max(throughput1, throughput2)) - --state.player.print("Enough to fill "..lanes.." belts after balancing") -end - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:finish(state) - if state.print_placement_info_choice and state.player.valid then - state.player.print({"mpp.msg_print_info_miner_placement", state.best_attempt.miner_count, state.belt_count, #state.resources}) - end - - self:_display_lane_filling(state) - - if mpp_util.get_dump_state(state.player.index) then - common.save_state_to_file(state, "json") - end - - return false -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/sparse.lua b/mining-patch-planner_1.5.7/layouts/sparse.lua deleted file mode 100644 index d1cb7929..00000000 --- a/mining-patch-planner_1.5.7/layouts/sparse.lua +++ /dev/null @@ -1,397 +0,0 @@ -local mpp_util = require("mpp_util") - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max -local EAST, NORTH, SOUTH, WEST = mpp_util.directions() - -local simple = require("layouts.simple") - -local layout = table.deepcopy(simple) --[[@as Layout]] - -layout.name = "sparse" -layout.translation = {"mpp.settings_layout_choice_sparse"} - -layout.restrictions.miner_near_radius = {1, 10e3} -layout.restrictions.miner_far_radius = {2, 10e3} -layout.restrictions.pole_omittable = true -layout.restrictions.pole_width = {1, 1} -layout.restrictions.pole_length = {7.5, 10e3} -layout.restrictions.pole_supply_area = {2.5, 10e3} -layout.restrictions.lamp_available = true -layout.restrictions.module_available = true -layout.restrictions.pipe_available = true -layout.restrictions.coverage_tuning = false - ----@param state SimpleState ----@return PlacementAttempt -function layout:_placement_attempt(state, shift_x, shift_y) - local grid = state.grid - local size, near, far = state.miner.size, state.miner.near, state.miner.far - local full_size = far * 2 + 1 - local miners = {} - local row_index = 1 - local lane_layout = {} - - for y = 1 + shift_y, state.coords.th + near, full_size do - local column_index = 1 - lane_layout[#lane_layout+1] = {y=y+near, row_index = row_index} - for x = 1 + shift_x, state.coords.tw, full_size do - local tile = grid:get_tile(x, y) - local center = grid:get_tile(x+near, y+near) --[[@as GridTile]] - local miner = { - tile = tile, - line = row_index, - column = column_index, - center = center, - direction = row_index % 2 == 1 and SOUTH or NORTH - } - if center.far_neighbor_count > 0 then - miners[#miners+1] = miner - end - column_index = column_index + 1 - end - row_index = row_index + 1 - end - return { - sx=shift_x, sy=shift_y, - miners=miners, - miner_count=#miners, - lane_layout=lane_layout, - } -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_layout_attempts(state) - local c = state.coords - local m = state.miner - local attempts = {} - state.attempts = attempts - state.best_attempt_index = 1 - state.attempt_index = 1 -- first attempt is used up - - local function calc_slack(tw, near, far) - local fullsize = far * 2 + 1 - local count = ceil(tw / fullsize) - local overrun = count * fullsize - tw - local slack = overrun % 2 - --local start = far-near-floor(overrun / 2) - slack - local start = (far-near)-floor(overrun / 2) - slack - return count, start, slack - end - - local countx, slackw2, modx = calc_slack(c.tw, m.near, m.far) - local county, slackh2, mody = calc_slack(c.th, m.near, m.far) - - for sy = slackh2, slackh2 + mody do - for sx = slackw2, slackw2 + modx do - attempts[#attempts+1] = { - sx, - sy, - cx = countx, - cy = county, - slackw = slackw2, - slackh = slackh2, - modx = modx, - mody = mody, - } - end - end - - return "init_layout_attempt" -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:init_layout_attempt(state) - - local attempt = state.attempts[state.attempt_index] - - state.best_attempt = self:_placement_attempt(state, attempt[1], attempt[2]) - state.best_attempt_score = #state.best_attempt.miners - - if state.debug_dump then - state.best_attempt.heuristic_score = state.best_attempt_score - state.saved_attempts = {} - state.saved_attempts[#state.saved_attempts+1] = state.best_attempt - end - - if #state.attempts > 1 then - return "layout_attempt" - end - - return "prepare_miner_layout" -end - -function layout:_get_layout_heuristic(state) - return function(attempt) return #attempt.miners end -end - ----Bruteforce the best solution ----@param self SimpleLayout ----@param state SimpleState -function layout:layout_attempt(state) - local attempt_state = state.attempts[state.attempt_index] - - ---@type PlacementAttempt - local current_attempt = self:_placement_attempt(state, attempt_state[1], attempt_state[2]) - local current_attempt_score = #current_attempt.miners - - if current_attempt_score < state.best_attempt_score then - state.best_attempt_index = state.attempt_index - state.best_attempt = current_attempt - state.best_attempt_score = current_attempt_score - end - - if state.attempt_index >= #state.attempts then - return "prepare_miner_layout" - end - state.attempt_index = state.attempt_index + 1 - return true -end - ----@param self SimpleLayout ----@param state SimpleState ----@return PlacementSpecification[] -function layout:_get_pipe_layout_specification(state) - local pipe_layout = {} - - local m = state.miner - local attempt = state.best_attempt - local gutter = m.far-m.near - - for _, pre_lane in ipairs(state.miner_lanes) do - if not pre_lane[1] then goto continue_lanes end - local y = pre_lane[1].center.y - local sx = attempt.sx - ---@type MinerPlacement[] - local lane = table.mapkey(pre_lane, function(t) return t.column end) -- make array with intentional gaps between miners - - local current_start, current_length = nil, 0 - for i = 1, state.miner_max_column do - local miner = lane[i] - if miner and current_start then - local start_shift = 0 - if current_start == 1 then start_shift = gutter * 2 end - pipe_layout[#pipe_layout+1] = { - structure="horizontal", - x=sx+start_shift+(current_start-1)*m.full_size-gutter*2+1, - y=y, - w=current_length*m.full_size+gutter*2-1-start_shift, - } - current_start, current_length = nil, 0 - elseif not miner and not current_start then - current_start, current_length = i, 1 - elseif current_start then - current_length = current_length + 1 - elseif i > 1 then - pipe_layout[#pipe_layout+1] = { - structure="horizontal", - x=sx+(i-1)*m.full_size-gutter*2+1, - y=y, - w=gutter*2-1 - } - end - end - - ::continue_lanes:: - end - - for i = 1, state.miner_lane_count do - local lane = attempt.lane_layout[i] - pipe_layout[#pipe_layout+1] = { - structure="cap_vertical", - x=attempt.sx, - y=lane.y, - skip_up=i == 1, - skip_down=i == state.miner_lane_count, - } - end - - return pipe_layout -end - - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local m = state.miner - local g = state.grid - local attempt = state.best_attempt - - local miner_lanes = state.miner_lanes - local miner_lane_count = state.miner_lane_count - local miner_max_column = state.miner_max_column - - for _, lane in ipairs(miner_lanes) do - table.sort(lane, function(a, b) return a.center.x < b.center.x end) - end - - local builder_belts = {} - state.builder_belts = builder_belts - - local function get_lane_length(lane) if lane then return lane[#lane].center.x end return 0 end - local function que_entity(t) builder_belts[#builder_belts+1] = t end - - local belt_lanes = {} - state.belts = belt_lanes - local longest_belt = 0 - local pipe_adjust = state.place_pipes and -1 or 0 - for i = 1, miner_lane_count, 2 do - local lane1 = miner_lanes[i] - local lane2 = miner_lanes[i+1] - - local y = attempt.sy + m.size + 1 + (m.far * 2 + 1) * (i-1) - - local belt = {x1=attempt.sx + 1, x2=attempt.sx + 1, y=y, built=false, lane1=lane1, lane2=lane2} - belt_lanes[#belt_lanes+1] = belt - - if lane1 or lane2 then - local x1 = attempt.sx + 1 + pipe_adjust - local x2 = max(get_lane_length(lane1), get_lane_length(lane2)) + m.near - longest_belt = max(longest_belt, x2 - x1 + 1) - belt.x1, belt.x2, belt.built = x1, x2, true - - for x = x1, x2 do - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x=x, - grid_y=y, - direction=defines.direction.west, - } - end - end - - if lane2 then - for _, miner in ipairs(lane2) do - local center = miner.center - local mx, my = center.x, center.y - - for ny = y + 1, y + (m.far - m.near) * 2 - 1 do - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x=mx, - grid_y=ny, - direction=defines.direction.north, - } - end - end - end - end - - state.belt_count = #belt_lanes - - return "prepare_pole_layout" -end - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_pole_layout(state) - local c = state.coords - local m = state.miner - local g = state.grid - local attempt = state.best_attempt - - local pole_proto = game.entity_prototypes[state.pole_choice] or {supply_area_distance=3, max_wire_distance=9} - local supply_area_distance, supply_radius, supply_area = 3.5, 3, 6 - if pole_proto then - supply_area = pole_proto.supply_area_distance - supply_area_distance = pole_proto.supply_area_distance or supply_area_distance - supply_radius = floor(supply_area_distance) - supply_area = floor(supply_area_distance * 2) - end - - local builder_power_poles = {} - state.builder_power_poles = builder_power_poles - - local pole_step = min(floor(pole_proto.max_wire_distance), supply_area + 2) - state.pole_step = pole_step - - local miner_lane_width = (state.miner_max_column-1)*m.far*2 + state.miner_max_column - local slack = ceil(miner_lane_width / pole_step) * pole_step - c.tw - local pole_start = supply_radius - floor(slack / 2) - 1 - - local function get_covered_miners(ix, iy) - for sy = -supply_radius, supply_radius do - for sx = -supply_radius, supply_radius do - local tile = g:get_tile(ix+sx, iy+sy) - if tile and tile.built_on == "miner" then - return true - end - end - end - end - - local function place_pole_lane(y, iy, no_light) - local pole_lane = {} - local ix = 1 - for x = attempt.sx + pole_start, c.tw, pole_step do - local built = false - if get_covered_miners(x, y) then - built = true - end - local pole = {x=x, y=y, ix=ix, iy=iy, built=built, no_light=no_light} - pole_lane[ix] = pole - ix = ix + 1 - end - - -- if built and ix > 1 and pole_lane[ix-1] then - -- for bx = ix - 1, 1, -1 do - -- local backtrack_pole = pole_lane[bx] - -- if not backtrack_pole.built then - -- backtrack_pole.built = true - -- else - -- break - -- end - - -- end - -- end - -- builder_power_poles[#builder_power_poles+1] = pole - - local backtrack_built = false - for pole_i = #pole_lane, 1, -1 do - ---@type GridPole - local backtrack_pole = pole_lane[pole_i] - if backtrack_built or backtrack_pole.built then - backtrack_built = true - backtrack_pole.built = true - - builder_power_poles[#builder_power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = backtrack_pole.x, - grid_y = backtrack_pole.y, - } - - end - end - - return pole_lane - end - - local initial_y = attempt.sy - local iy = 1 - local y_max, y_step = c.th + m.full_size, m.full_size * 2 - for y = initial_y, y_max, y_step do - if ((m.far - m.near) * 2 + 2 > supply_area) then -- single pole can't supply two lanes - place_pole_lane(y, iy) - if y ~= initial_y then - iy = iy + 1 - place_pole_lane(y - (m.far - m.near) * 2 + 1, iy, true) - end - elseif y + y_step > y_max and state.miner_lane_count % 2 == 0 then -- last pole lane - local backstep = (m.far - m.near) * 2 - 1 - place_pole_lane(y - backstep) - else - local backstep = y == initial_y and 0 or m.near - m.far - place_pole_lane(y + backstep) - end - iy = iy + 1 - end - - return "expensive_deconstruct" -end - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/sparse_logistics.lua b/mining-patch-planner_1.5.7/layouts/sparse_logistics.lua deleted file mode 100644 index 667b484b..00000000 --- a/mining-patch-planner_1.5.7/layouts/sparse_logistics.lua +++ /dev/null @@ -1,43 +0,0 @@ -local mpp_util = require("mpp_util") - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max -local EAST, NORTH, SOUTH, WEST = mpp_util.directions() - -local sparse = require("layouts.sparse") -local logistics = require("layouts.logistics") - -local layout = table.deepcopy(sparse) --[[@as Layout]] - -layout.name = "sparse_logistics" -layout.translation = {"mpp.settings_layout_choice_sparse_logistics"} - -layout.restrictions.belt_available = false -layout.restrictions.logistics_available = true -layout.restrictions.lane_filling_info_available = false - ----@param self SimpleLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local m = state.miner - - local belts = {} - state.builder_belts = belts - - for _, miner in ipairs(state.best_attempt.miners) do - local center = miner.center - local y_shift = miner.direction == SOUTH and (1+m.near) or (-1-m.near) - belts[#belts+1] = { - name=state.logistics_choice, - thing="belt", - grid_x=center.x, - grid_y=center.y + y_shift, - } - end - - return "prepare_pole_layout" -end - -layout.finish = logistics.finish - -return layout diff --git a/mining-patch-planner_1.5.7/layouts/super_compact.lua b/mining-patch-planner_1.5.7/layouts/super_compact.lua deleted file mode 100644 index 8bb5833e..00000000 --- a/mining-patch-planner_1.5.7/layouts/super_compact.lua +++ /dev/null @@ -1,398 +0,0 @@ - -local common = require("layouts.common") -local simple = require("layouts.simple") -local mpp_util = require("mpp_util") -local builder = require("builder") - -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max -local EAST, NORTH, SOUTH, WEST = mpp_util.directions() - ----@class SuperCompactLayout : SimpleLayout -local layout = table.deepcopy(simple) - -layout.name = "super_compact" -layout.translation = {"mpp.settings_layout_choice_super_compact"} - -layout.restrictions.miner_near_radius = {1, 1} -layout.restrictions.miner_far_radius = {1, 10e3} -layout.restrictions.uses_underground_belts = true -layout.restrictions.pole_omittable = true -layout.restrictions.pole_width = {1, 1} -layout.restrictions.pole_length = {5, 10e3} -layout.restrictions.pole_supply_area = {2.5, 10e3} -layout.restrictions.coverage_tuning = true -layout.restrictions.lamp_available = false -layout.restrictions.module_available = true -layout.restrictions.pipe_available = false - ----@class SuperCompactState : SimpleState ----@field miner_bounds any - --- Validate the selection ----@param self SuperCompactLayout ----@param state SimpleState -function layout:validate(state) - local c = state.coords - if (state.direction_choice == "west" or state.direction_choice == "east") then - if c.h < 3 then - return nil, {"mpp.msg_miner_err_1_w", 3} - end - else - if c.w < 3 then - return nil, {"mpp.msg_miner_err_1_h", 3} - end - end - return true -end - ----@param self SuperCompactLayout ----@param state SimpleState ----@return PlacementAttempt -function layout:_placement_attempt(state, shift_x, shift_y) - local grid = state.grid - local size, near, fullsize = state.miner.size, state.miner.near, state.miner.full_size - local neighbor_sum = 0 - local far_neighbor_sum = 0 - local miners, postponed = {}, {} - local simple_density = 0 - local real_density = 0 - local leech_sum = 0 - local empty_space = 0 - local lane_layout = {} - - --@param tile GridTile - --local function heuristic(tile) return tile.neighbor_count > 2 end - - local heuristic = self:_get_miner_placement_heuristic(state) - - local function miner_stagger(start_x, start_y, direction, stagger_step, mark_lane) - local miner_index = 1 - for y = 1 + shift_y + start_y, state.coords.th + 2, size * 3 + 1 do - if mark_lane then lane_layout[#lane_layout+1] = {y=y} end - for x = 1 + shift_x + start_x, state.coords.tw + 2, size * 2 do - local tile = grid:get_tile(x, y) - local center = grid:get_tile(x+near, y+near) --[[@as GridTile]] - local miner = { - tile = tile, - center = center, - direction = direction, - stagger = stagger_step, - line = miner_index, - } - if center.far_neighbor_count > 0 then - if heuristic(center) then - miners[#miners+1] = miner - neighbor_sum = neighbor_sum + center.neighbor_count - far_neighbor_sum = far_neighbor_sum + center.far_neighbor_count - empty_space = empty_space + (size^2) - center.neighbor_count - simple_density = simple_density + center.neighbor_count / (size ^ 2) - real_density = real_density + center.far_neighbor_count / (fullsize ^ 2) - leech_sum = leech_sum + max(0, center.far_neighbor_count - center.neighbor_count) - else - postponed[#postponed+1] = miner - end - end - end - miner_index = miner_index + 1 - end - end - - miner_stagger(0, -2, "south", 1) - miner_stagger(3, 0, "east", 1, true) - miner_stagger(0, 2, "north", 1) - - -- the redundant calculation makes it easier to find the stagger offset - miner_stagger(0+size, -2+size+2, "south", 2) - miner_stagger(3-size, 0+size+2, "east", 2, true) - miner_stagger(0+size, 2+size+2, "north", 2) - - local result = { - sx=shift_x, sy=shift_y, - miners = miners, - miner_count=#miners, - lane_layout=lane_layout, - postponed = postponed, - neighbor_sum = neighbor_sum, - far_neighbor_sum = far_neighbor_sum, - leech_sum=leech_sum, - simple_density = simple_density, - real_density = real_density, - empty_space=empty_space, - unconsumed_count = 0, - postponed_count = 0, - } - - common.process_postponed(state, result, miners, postponed) - - return result -end - - ----@param self SimpleLayout ----@param state SimpleState ----@return CallbackState -function layout:prepare_miner_layout(state) - local grid = state.grid - - local builder_miners = {} - state.builder_miners = builder_miners - - for _, miner in ipairs(state.best_attempt.miners) do - local center = miner.center - grid:build_miner(center.x, center.y) - - -- used for deconstruction, not ghost placement - builder_miners[#builder_miners+1] = { - thing="miner", - extent_=state.miner.size, - grid_x = miner.center.x, - grid_y = miner.center.y, - padding_pre = state.miner.near, - padding_post = state.miner.near, - } - - --[[ debug visualisation - miner placement - local color = {1, 0, 0} - if miner.direction == "west" then - color = {0, 1, 0} - elseif miner.direction == "north" then - color = {0, 0, 1} - end - local rect_color = miner.stagger == 1 and {1, 1, 1} or {0, 0, 0} - local off = state.miner.size / 2 - 0.1 - - local tx, ty = coord_revert[DIR](center.x, center.y, c.tw, c.th) - rendering.draw_rectangle{ - surface = state.surface, - filled = false, - --color = miner.postponed and {1, 0, 0} or {0, 1, 0}, - color = rect_color, - width = 3, - --target = {c.x1 + x, c.y1 + y}, - left_top = {c.gx+tx-off, c.gy + ty - off}, - right_bottom = {c.gx+tx+off, c.gy + ty + off}, - } - - rendering.draw_text{ - surface=state.surface, - color=color, - text=miner_dir, - target=mpp_revert(c.gx, c.gy, DIR, center.x, center.y, c.tw, c.th), - vertical_alignment = "top", - alignment = "center", - } - - rendering.draw_text{ - surface=state.surface, - color={1, 1, 1}, - text=miner.line * 2 + miner.stagger - 2, - target={c.gx + tx, c.gy + ty}, - vertical_alignment = "bottom", - alignment = "center", - } - - --]] - end - - return "prepare_belt_layout" -end - ----@param self SuperCompactLayout ----@param state SimpleState -function layout:prepare_belt_layout(state) - local m = state.miner - local g = state.grid - local attempt = state.best_attempt - local underground_belt = game.entity_prototypes[state.belt_choice].related_underground_belt.name - - local power_poles = {} - state.builder_power_poles = power_poles - - ---@type table - local belt_lanes = {} - local miner_lane_number = 0 -- highest index of a lane, because using # won't do the job if a lane is missing - - local builder_belts = {} - state.builder_belts = builder_belts - local function que_entity(t) builder_belts[#builder_belts+1] = t end - state.belt_count = 0 - - for _, miner in ipairs(attempt.miners) do - local index = miner.line * 2 + miner.stagger - 2 - miner_lane_number = max(miner_lane_number, index) - if not belt_lanes[index] then belt_lanes[index] = {} end - local line = belt_lanes[index] - line._index = index - if miner.center.x > (line.last_x or 0) then - line.last_x = miner.center.x - line.last_miner = miner - end - line[#line+1] = miner - end - - local temp_belts = {} - for k, v in pairs(belt_lanes) do temp_belts[#temp_belts+1] = v end - table.sort(temp_belts, function(a, b) return a._index < b._index end) - state.belts = temp_belts - - local shift_x, shift_y = state.best_attempt.sx, state.best_attempt.sy - - local function place_belts(start_x, end_x, y) - local belt_start, belt_end = 1 + shift_x + start_x, end_x - if start_x == 0 then - -- straight runoff - for sx = 0, 2 do - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x=belt_start-sx, - grid_y=y, - direction=WEST, - } - end - else - -- underground exit - que_entity{ - name=underground_belt, - type="output", - thing="belt", - grid_x=shift_x-1, - grid_y=y, - direction=WEST, - } - que_entity{ - name=underground_belt, - type="input", - thing="belt", - grid_x=shift_x+m.size+1, - grid_y=y, - direction=WEST, - } - local miner = g:get_tile(shift_x+m.size, y) - if miner and miner.built_on == "miner" then - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = shift_x, - grid_y = y, - } - end - end - - for x = belt_start, end_x, m.size * 2 do - local miner1 = g:get_tile(x, y-1) --[[@as GridTile]] - local miner2 = g:get_tile(x, y+1) --[[@as GridTile]] - local miner3 = g:get_tile(x+3, y) --[[@as GridTile]] - local built = miner1.built_on == "miner" or miner2.built_on == "miner" - local capped = miner3.built_on == "miner" - local pole_built = built or capped - local last = x + m.size * 2 > end_x - - if last and not capped then - -- last passtrough and no trailing miner - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x=x+1, - grid_y=y, - direction=WEST, - } - elseif capped or built then - que_entity{ - name=underground_belt, - type="output", - thing="belt", - grid_x=x+1, - grid_y=y, - direction=WEST, - } - que_entity{ - name=underground_belt, - type="input", - thing="belt", - grid_x=x+m.size*2, - grid_y=y, - direction=WEST, - } - else - for sx = 1, 6 do - que_entity{ - name=state.belt_choice, - thing="belt", - grid_x=x+sx, - grid_y=y, - direction=WEST, - } - end - end - if last and capped then belt_end = x+6 end - - if pole_built then - power_poles[#power_poles+1] = { - name=state.pole_choice, - thing="pole", - grid_x = x + 2, - grid_y = y, - } - end - end - return belt_start, belt_end - end - - local stagger_shift = 1 - for i = 1, miner_lane_number do - local belt = belt_lanes[i] - if belt and belt.last_x then - local y = m.size + shift_y - 1 + (m.size + 2) * (i-1) - local x_start =stagger_shift % 2 == 0 and 3 or 0 - local bx1, bx2 = place_belts(x_start, belt.last_x, y) - belt.x1, belt.x2, belt.y = bx1-3, bx2, y - state.belt_count = state.belt_count + 1 - local lane1, lane2 = {}, {} - for _, miner in ipairs(belt) do - if miner.direction == "north" then - lane2[#lane2+1] = miner - else - lane1[#lane1+1] = miner - end - end - if #lane1 > 0 then belt.lane1 = lane1 end - if #lane2 > 0 then belt.lane2 = lane2 end - - end - stagger_shift = stagger_shift + 1 - end - - return "expensive_deconstruct" -end - ----@param self SuperCompactLayout ----@param state SimpleState ----@return CallbackState -function layout:placement_miners(state) - local create_entity = builder.create_entity_builder(state) - - local grid = state.grid - local module_inv_size = state.miner.module_inventory_size --[[@as uint]] - - for _, miner in ipairs(state.best_attempt.miners) do - local center = miner.center - - grid:build_miner(center.x, center.y) - local ghost = create_entity{ - name = state.miner_choice, - grid_x = center.x, - grid_y = center.y, - direction = defines.direction[miner.direction], - } - - if state.module_choice ~= "none" then - ghost.item_requests = {[state.module_choice] = module_inv_size} - end - end - - return "placement_belts" -end - -return layout diff --git a/mining-patch-planner_1.5.7/locale/en/translation.cfg b/mining-patch-planner_1.5.7/locale/en/translation.cfg deleted file mode 100644 index 4e5b4ae3..00000000 --- a/mining-patch-planner_1.5.7/locale/en/translation.cfg +++ /dev/null @@ -1,73 +0,0 @@ -[item-name] -mining-patch-planner=Mining patch planner - -[shortcut-name] -mining-patch-planner-shortcut=Mining patch planner - -[controls] -mining-patch-planner-keybind=Open mining patch planner - -[mod-setting-name] -mpp-lane-filling-info-duration=Lane saturation overlay linger duration in seconds -mpp-dump-heuristics-data=DEBUG: Dump state info for inspection - -[mod-setting-description] -mpp-lane-filling-info-duration=Linger duration starts after the planner GUI is closed - -[mpp] -advanced_settings=Advanced settings -settings_frame=Planner settings -blueprint_add_mode=Add blueprints -show_non_electric_miners=Show non-electric miners -force_pipe_placement=Force pipe placement -print_placement_info=Print placement info -display_lane_filling=Show lane saturation overlay in ALT mode.\nWill fade out after closing GUI\n(change display duration in mod settings) - -settings_layout_label=Layout type -settings_direction_label=Layout direction -settings_miner_label=Mining drill type -settings_belt_label=Belt type -settings_space_belt_label=Space belt type -settings_logistics_label=Logistics type -settings_pole_label=Electric pole type -settings_misc_label=Miscellaneous settings -settings_blueprints_label=Blueprint selection -settings_checkbox_lamps=Add lamps - -settings_layout_choice_base=Base -settings_layout_choice_simple=Simple -settings_layout_choice_compact=Compact -settings_layout_choice_super_compact=Super Compact -settings_layout_choice_sparse=Sparse -settings_layout_choice_logistics=Logistics -settings_layout_choice_compact_logistics=Compact Logistics -settings_layout_choice_sparse_logistics=Sparse Logistics -settings_layout_choice_blueprints=Blueprints - -choice_none=None -choice_lamp=Place lamps -choice_coverage=Overfill with mining drills -choice_landfill=Omit landfill -choice_start=Align to patch start -choice_deconstruction=Don't deconstruct entities - -label_add_blueprint=Insert blueprint - -msg_miner_err_0=No suitable resources selected -msg_miner_err_1_w=Span is too small to create a layout (minimum width is __1__) -msg_miner_err_1_h=Span is too small to create a layout (minimum height is __1__) -msg_miner_err_2_1=Can't build on this resource patch with selected miner -msg_miner_err_2_2=because it can't mine resource -msg_miner_err_3=No suitable miner exists for this layout -msg_blueprint_valid=Not a valid blueprint item. Create a copy from blueprint library first. -msg_blueprint_undefined_grid=Blueprint doesn't have a defined grid size. -msg_unselected_blueprint=No blueprint selected -msg_blueprint_existing=Blueprint already exists -msg_blueprint_no_miner=No mining drill found in blueprint -msg_blueprint_fatal_error=Could not copy blueprint to internal inventory. Please report this bug with save file to mod author. - -msg_print_info_miner_placement=Placed __1__ mining __plural_for_parameter_1_{1=drill|rest=drills}__ with __2__ __plural_for_parameter_2_{1=belt|rest=belts}__ on __3__ __plural_for_parameter_3_{1=resource|rest=resources}__. -msg_print_info_miner_placement_no_lanes=Placed __1__ mining __plural_for_parameter_1_{1=drill|rest=drills}__ on __2__ __plural_for_parameter_2_{1=resource|rest=resources}__. - -msg_print_info_lane_saturation_belts=Belts __1__, throughput __2__ -msg_print_info_lane_saturation_bounds=Lane sums __1__ - __2__ diff --git a/mining-patch-planner_1.5.7/locale/lt/translation.cfg b/mining-patch-planner_1.5.7/locale/lt/translation.cfg deleted file mode 100644 index 6687fc82..00000000 --- a/mining-patch-planner_1.5.7/locale/lt/translation.cfg +++ /dev/null @@ -1,73 +0,0 @@ -[item-name] -mining-patch-planner=Kasybos lauko planuotojas - -[shortcut-name] -mining-patch-planner-shortcut=Kasybos lauko planuotojas - -[controls] -mining-patch-planner-keybind=Atidaryti kasybos lauko planuotojΔ… - -[mod-setting-name] -mpp-lane-filling-info-duration=Juostos uΕΎpildymo informacijos rodymo trukmΔ— sekundΔ—mis -mpp-dump-heuristics-data=DEBUG: IΕ‘saugoti iΕ‘dΔ—stymo derinimo informacijΔ… - -[mod-setting-description] -mpp-lane-filling-info-duration=Rodymo pabaigos laikmatis prasideda uΕΎdarius planuotojo sΔ…sajΔ… - -[mpp] -advanced_settings=IΕ‘plΔ—stiniai nustatymai -settings_frame=Planuotojo nustatymai -blueprint_add_mode=PridΔ—ti brΔ—ΕΎinius -show_non_electric_miners=Rodyti neelektrinius kasybos grΔ…ΕΎtus -force_pipe_placement=Priverstinai dΔ—ti vamzdΕΎius -print_placement_info=Spaustinti iΕ‘dΔ—stymo informacijΔ… -display_lane_filling=Rodyti konvejeriΕ³ uΕΎpildymΔ… ALT reΕΎime.\nIΕ‘nyks uΕΎdarius sΔ…sajΔ…\n(rodymo trukmΔ™ galima pakeisti modifikacijΕ³ nustatymuose) - -settings_layout_label=IΕ‘dΔ—stymas -settings_direction_label=Kryptis -settings_miner_label=Kasybos grΔ…ΕΎtai -settings_belt_label=Konvejeriai -settings_space_belt_label=Kosmoso konvejeriai -settings_logistics_label=Logistika -settings_pole_label=Elektros stulpai -settings_misc_label=ΔvairΕ«s -settings_blueprints_label=BrΔ—ΕΎinio pasirinkimas -settings_checkbox_lamps=PridΔ—ti lempas - -settings_layout_choice_base=Bazinis -settings_layout_choice_simple=Paprastas -settings_layout_choice_compact=KompaktiΕ‘kas -settings_layout_choice_super_compact=Super KompaktiΕ‘kas -settings_layout_choice_sparse=IΕ‘sklaidytas -settings_layout_choice_logistics=Logistinis -settings_layout_choice_compact_logistics=KompaktiΕ‘kas Logistinis -settings_layout_choice_sparse_logistics=IΕ‘sklaidytas Logistinis -settings_layout_choice_blueprints=BrΔ—ΕΎiniai - -choice_none=Niekas -choice_lamp=DΔ—ti lempas -choice_coverage=Perpildyti kasybos grΔ…ΕΎtais -choice_landfill=Praleisti uΕΎpildymΔ… ΕΎeme -choice_start=Prilyginti su lauko pradΕΎia -choice_deconstruction=Negriauti objektΕ³ - -label_add_blueprint=PridΔ—ti brΔ—ΕΎinΔ― - -msg_miner_err_0=Nepasirinkta jokiΕ³ tinkamΕ³ resursΕ³ -msg_miner_err_1_w=Per maΕΎas plotis lauko iΕ‘planavimui (minimali apimtis yra __1__) -msg_miner_err_1_h=Per maΕΎas aukΕ‘tis lauko iΕ‘planavimui (minimali apimtis yra __1__) -msg_miner_err_2_1=NeΔ―manoma pastatyti ant Ε‘io lauko paΕΎymΔ—to grΔ…ΕΎto -msg_miner_err_2_2=nes juo negalima kasti resurso -msg_miner_err_3=NΔ—ra tinkamo kasybos grΔ…ΕΎto Ε‘iam iΕ‘dΔ—stymui -msg_blueprint_valid=Netinkamas brΔ—ΕΎinys. Pirmiausia sukurkite kopijΔ…. -msg_blueprint_undefined_grid=BrΔ—ΕΎinys neturi apibrΔ—ΕΎtΕ³ tinklelio matmenΕ³. -msg_unselected_blueprint=NΔ—ra pasirinkto brΔ—ΕΎinio. -msg_blueprint_existing=BrΔ—ΕΎinys jau pridΔ—tas. -msg_blueprint_no_miner=BrΔ—ΕΎinyje nΔ—ra kasybos grΔ…ΕΎto -msg_blueprint_fatal_error=NeΔ―manoma Δ―kelti brΔ—ΕΎinio Δ― vidinΔ― inventoriΕ³. PraneΕ‘kite apie Ε‘iΔ… klaidΔ… kartu su iΕ‘saugotu ΕΎaidimu modifikacijos autoriui. - -msg_print_info_miner_placement=__plural_for_parameter_1_{1=Suplanuotas|rest=Suplanuoti}__ __1__ kasybos __plural_for_parameter_1_{1=grΔ…ΕΎtas|rest=grΔ…ΕΎtai}__ su __2__ __plural_for_parameter_2_{1=konvejeriu|rest=konvejeriais}__ ant __3__ __plural_for_parameter_3_{1=resurso|rest=resursΕ³}__. -msg_print_info_miner_placement_no_lanes=__plural_for_parameter_1_{1=Suplanuotas|rest=Suplanuoti}__ __1__ kasybos __plural_for_parameter_1_{1=grΔ…ΕΎtas|rest=grΔ…ΕΎtai}__ and __2__ __plural_for_parameter_2_{1=resurso|rest=resursΕ³}__. - -msg_print_info_lane_saturation_belts=Konvejeriai __1__, pralaidumas __2__ -msg_print_info_lane_saturation_bounds=JuostΕ³ sumos __1__ - __2__ diff --git a/mining-patch-planner_1.5.7/locale/ru/translation.cfg b/mining-patch-planner_1.5.7/locale/ru/translation.cfg deleted file mode 100644 index 02f8a742..00000000 --- a/mining-patch-planner_1.5.7/locale/ru/translation.cfg +++ /dev/null @@ -1,42 +0,0 @@ -[item-name] -mining-patch-planner=ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[shortcut-name] -mining-patch-planner-shortcut=ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[controls] -mining-patch-planner-keybind=ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[mpp] -advanced_settings=Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ настройки -settings_frame=Настройщики ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΡˆΠ°Ρ…Ρ‚ - -settings_layout_label=Π’ΠΈΠΏ ΠΌΠ°ΠΊΠ΅Ρ‚Π° -settings_direction_label=НаправлСниС ΠΌΠ°ΠΊΠ΅Ρ‚Π° -settings_miner_label=Π’ΠΈΠΏ Π±ΡƒΡ€Π° -settings_belt_label=Π’ΠΈΠΏ ΠΊΠΎΠ½Π²Π΅Π΅Ρ€Π° -settings_logistics_label=Π’ΠΈΠΏ логистики -settings_pole_label=Π’ΠΈΠΏ элСктричСского столба -settings_misc_label=Π Π°Π·Π½Ρ‹Π΅ настройки -settings_checkbox_lamps=Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»Π°ΠΌΠΏΡ‹ -choice_landfill=ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свалку - -settings_layout_choice_base=Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ -settings_layout_choice_simple=ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ -settings_layout_choice_compact=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ -settings_layout_choice_super_compact=Π‘ΡƒΠΏΠ΅Ρ€ ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ -settings_layout_choice_sparse=Π Π΅Π΄ΠΊΠΈΠΉ -settings_layout_choice_logistics=ЛогистичСский -settings_layout_choice_compact_logistics=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ЛогистичСский -settings_layout_choice_sparse_logistics=Π Π΅Π΄ΠΊΠΈΠΉ ЛогистичСский -settings_layout_choice_blueprints=Π§Π΅Ρ€Ρ‚Ρ‘ΠΆ - -choice_none=None -choice_lamp=РазмСститС Π»Π°ΠΌΠΏΡ‹ -choice_coverage=ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΡŒΡ‚Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ рСсурсов - -msg_miner_err_0=ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΠ΅ рСсурсы Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ -msg_miner_err_1_w=План слишком ΠΌΠ°Π» для создания ΠΌΠ°ΠΊΠ΅Ρ‚Π° (минимальная ΡˆΠΈΡ€ΠΈΠ½Π° __1__) -msg_miner_err_1_h=План слишком ΠΌΠ°Π» для создания ΠΌΠ°ΠΊΠ΅Ρ‚Π° (минимальная высота __1__) -msg_miner_err_2_1=НСвозмоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ»Π΅ рСсурса с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ ΠΌΠ°ΠΉΠ½Π΅Ρ€ΠΎΠΌ -msg_miner_err_2_2=ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Ρ‹Π²Π°Ρ‚ΡŒ рСсурсы diff --git a/mining-patch-planner_1.5.7/locale/uk/translation.cfg b/mining-patch-planner_1.5.7/locale/uk/translation.cfg deleted file mode 100644 index c6c33130..00000000 --- a/mining-patch-planner_1.5.7/locale/uk/translation.cfg +++ /dev/null @@ -1,42 +0,0 @@ -[item-name] -mining-patch-planner=ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[shortcut-name] -mining-patch-planner-shortcut=ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[controls] -mining-patch-planner-keybind=Π’Ρ–Π΄ΠΊΡ€ΠΈΡ‚ΠΈ ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊ ΡˆΠ°Ρ…Ρ‚ - -[mpp] -advanced_settings=Π ΠΎΠ·ΡˆΠΈΡ€Π΅Π½Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ -settings_frame=ΠΠ°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Ρ‡Ρ– ΠŸΠ»Π°Π½ΡƒΠ²Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΡˆΠ°Ρ…Ρ‚ - -settings_layout_label=Π’ΠΈΠΏ ΠΌΠ°ΠΊΠ΅Ρ‚Π° -settings_direction_label=Напрямок ΠΌΠ°ΠΊΠ΅Ρ‚Π° -settings_miner_label=Π’ΠΈΠΏ Π±ΡƒΡ€Π° -settings_belt_label=Π’ΠΈΠΏ ΠΊΠΎΠ½Π²Π΅ΠΉΡ”Ρ€Π° -settings_logistics_label=Π’ΠΈΠΏ логістики -settings_pole_label=Π’ΠΈΠΏ ΠΎΠΏΠΎΡ€ΠΈ -settings_misc_label=Π Ρ–Π·Π½Ρ– Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ -settings_checkbox_lamps=Π”ΠΎΠ΄Π°Ρ‚ΠΈ Π»Π°ΠΌΠΏΠΈ -choice_landfill=ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΠΈ Π·Π²Π°Π»ΠΈΡ‰Π΅ - -settings_layout_choice_base=Π‘Π°Π·ΠΎΠ²ΠΈΠΉ -settings_layout_choice_simple=ΠŸΡ€ΠΎΡΡ‚ΠΈΠΉ -settings_layout_choice_compact=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ -settings_layout_choice_super_compact=Π‘ΡƒΠΏΠ΅Ρ€ ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΠΉ -settings_layout_choice_sparse=Рідкісний -settings_layout_choice_logistics=Логістичний -settings_layout_choice_compact_logistics=ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈΠΉ Логістичний -settings_layout_choice_sparse_logistics=Рідкісний Логістичний -settings_layout_choice_blueprints=ΠšΡ€Π΅ΡΠ»Π΅Π½Π½Ρ - -choice_none=Π–ΠΎΠ΄Π½ΠΎΠ³ΠΎ -choice_lamp=Π ΠΎΠ·ΠΌΡ–ΡΡ‚Ρ–Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΈ -choice_coverage=Π—Π°Π±Π΅Π·ΠΏΠ΅Ρ‡Ρ‚Π΅ покриття рСсурсів - -msg_miner_err_0=Π’Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½Ρ– рСсурси Π½Π΅ Π²ΠΈΠ±Ρ€Π°Π½Ρ– -msg_miner_err_1_w=План Π·Π°Π½Π°Π΄Ρ‚ΠΎ ΠΌΠ°Π»ΠΈΠΉ для створСння ΠΌΠ°ΠΊΠ΅Ρ‚Π° (ΠΌΡ–Π½Ρ–ΠΌΠ°Π»ΡŒΠ½Π° ΡˆΠΈΡ€ΠΈΠ½Π° __1__) -msg_miner_err_1_h=План Π·Π°Π½Π°Π΄Ρ‚ΠΎ ΠΌΠ°Π»ΠΈΠΉ для створСння ΠΌΠ°ΠΊΠ΅Ρ‚Π° (ΠΌΡ–Π½Ρ–ΠΌΠ°Π»ΡŒΠ½Π° висота __1__) -msg_miner_err_2_1=НСмоТливо використовувати Ρ†Π΅ ΠΏΠΎΠ»Π΅ рСсурсу Π· Π²ΠΈΠ±Ρ€Π°Π½ΠΈΠΌ Π±ΡƒΡ€ΠΎΠΌ -msg_miner_err_2_2=Π±ΠΎ Π²Ρ–Π½ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ±ΡƒΠ²Π°Ρ‚ΠΈ рСсурси diff --git a/mining-patch-planner_1.5.7/migration.lua b/mining-patch-planner_1.5.7/migration.lua deleted file mode 100644 index 29a90f9f..00000000 --- a/mining-patch-planner_1.5.7/migration.lua +++ /dev/null @@ -1,44 +0,0 @@ -local conf = require("configuration") -local enums = require("enums") - -local current_version = 010506 -- 1.5.0 - --- resetting a GUI manually from console --- /c __mining-patch-planner__ game.player.gui.screen.mpp_settings_frame.destroy() - ----@param player LuaPlayer -local function reset_gui(player) - local root = player.gui.left["mpp_settings_frame"] or player.gui.screen["mpp_settings_frame"] - if root then - root.destroy() - end - local cursor_stack = player.cursor_stack - if cursor_stack and cursor_stack.valid and cursor_stack.valid_for_read and cursor_stack.name == "mining-patch-planner" then - cursor_stack.clear() - end -end - -script.on_configuration_changed(function(config_changed_data) - local version = global.version or 0 - if config_changed_data.mod_changes["mining-patch-planner"] and version < current_version then - global.tasks = global.tasks or {} - conf.initialize_deconstruction_filter() - for player_index, data in pairs(global.players) do - ---@cast data PlayerData - local player = game.players[player_index] - reset_gui(player) - --conf.initialize_global(player_index) - conf.update_player_data(player_index) - end - else - for player_index, data in pairs(global.players) do - reset_gui(game.players[player_index]) - end - end - - if version < 010504 then - rendering.clear("mining-patch-planner") - end - - global.version = current_version -end) diff --git a/mining-patch-planner_1.5.7/mpp_util.lua b/mining-patch-planner_1.5.7/mpp_util.lua deleted file mode 100644 index 963ea172..00000000 --- a/mining-patch-planner_1.5.7/mpp_util.lua +++ /dev/null @@ -1,373 +0,0 @@ -local enums = require("enums") -local floor, ceil = math.floor, math.ceil -local min, max = math.min, math.max - -local mpp_util = {} - -local coord_convert = { - west = function(x, y, w, h) return x, y end, - east = function(x, y, w, h) return w-x+1, h-y+1 end, - south = function(x, y, w, h) return h-y+1, x end, - north = function(x, y, w, h) return y, w-x+1 end, -} -mpp_util.coord_convert = coord_convert - -local coord_revert = { - west = coord_convert.west, - east = coord_convert.east, - north = coord_convert.south, - south = coord_convert.north, -} -mpp_util.coord_revert = coord_revert - -mpp_util.miner_direction = {west="south",east="north",north="west",south="east"} -mpp_util.belt_direction = {west="north", east="south", north="east", south="west"} -mpp_util.opposite = {west="east",east="west",north="south",south="north"} - -do - local d = defines.direction - local t = { - west = { - [d.north] = d.north, - [d.east] = d.east, - [d.south] = d.south, - [d.west] = d.west, - }, - north = { - [d.north] = d.east, - [d.east] = d.south, - [d.south] = d.west, - [d.west] = d.north, - }, - east = { - [d.north] = d.south, - [d.east] = d.west, - [d.south] = d.north, - [d.west] = d.east, - }, - south = { - [d.north] = d.west, - [d.east] = d.north, - [d.south] = d.east, - [d.west] = d.south, - }, - } - mpp_util.bp_direction = t -end - ----@class MinerStruct ----@field name string ----@field size number Physical miner size ----@field w number Miner collision width ----@field h number Miner collision height ----@field far number Far radius ----@field near number Close radius ----@field resource_categories table ----@field full_size number Full span of the miner ----@field module_inventory_size number - ----@param miner_proto LuaEntityPrototype ----@return MinerStruct -function mpp_util.miner_struct(miner_proto) - local miner = {} - miner.far = floor(miner_proto.mining_drill_radius) - local cbox = miner_proto.collision_box - local cbox_tl, cbox_br = cbox.left_top, cbox.right_bottom - local cw, ch = cbox_br.x - cbox_tl.x, cbox_br.y - cbox_tl.y - miner.w, miner.h = ceil(cw), ceil(ch) - miner.size = miner.w - miner.full_size = miner.far * 2 + 1 - miner.near = floor(miner.size * 0.5) - miner.resource_categories = miner_proto.resource_categories - miner.name = miner_proto.name - miner.module_inventory_size = miner_proto.module_inventory_size - - return miner -end - ----@class PoleStruct ----@field size number ----@field radius number ----@field supply_width number ----@field wire number max wire distance - ----@param pole_proto LuaEntityPrototype ----@return PoleStruct -function mpp_util.pole_struct(pole_proto) - if pole_proto then - local pole = {} - local cbox = pole_proto.collision_box - pole.size = ceil(cbox.right_bottom.x - cbox.left_top.x) - local radius = pole_proto.supply_area_distance - pole.supply_width = radius * 2 + ((radius * 2 % 2) == 0 and 1 or 0) - pole.radius = pole.supply_width / 2 - pole.wire = pole_proto.max_wire_distance - - return pole - end - return { - size = 1, - supply_width = 7, - radius = 3.5, - wire = 9, - } -end - -local hardcoded_pipes = {} - ----@param pipe_name string Name of the normal pipe ----@return string|nil, LuaEntityPrototype|nil -function mpp_util.find_underground_pipe(pipe_name) - if hardcoded_pipes[pipe_name] then - return hardcoded_pipes[pipe_name], game.entity_prototypes[hardcoded_pipes[pipe_name]] - end - local ground_name = pipe_name.."-to-ground" - local ground_proto = game.entity_prototypes[ground_name] - if ground_proto then - return ground_name, ground_proto - end - return nil, nil -end - -function mpp_util.revert(gx, gy, direction, x, y, w, h) - local tx, ty = coord_revert[direction](x, y, w, h) - return {gx + tx, gy + ty} -end - ----Calculates needed power pole count ----@param state SimpleState -function mpp_util.calculate_pole_coverage(state, miner_count, lane_count, shifted) - shifted = shifted or false - local cov = {} - local pole_proto = game.entity_prototypes[state.pole_choice] - local m = mpp_util.miner_struct(game.entity_prototypes[state.miner_choice]) - local p = mpp_util.pole_struct(game.entity_prototypes[state.pole_choice]) - - local miner_coverage = max((miner_count-1)*m.far+miner_count, 1) - - -- Shift subtract - local shift_subtract = shifted and 2 or 0 - local covered_miners = ceil((p.supply_width - shift_subtract) / m.size) - local miner_step = covered_miners * m.size - local miner_coverage_excess = ceil(miner_count / covered_miners) * covered_miners - miner_count - - local capable_span = false - if floor(p.wire) >= miner_step and m.size ~= p.supply_width then - capable_span = true - else - miner_step = floor(p.wire) - end - - local pole_start = m.near - if capable_span then - if covered_miners % 2 == 0 then - pole_start = m.near * 2 - elseif miner_count % covered_miners == 0 then - pole_start = pole_start + m.size - end - end - - cov.pole_start = pole_start - cov.pole_step = miner_step - cov.full_miner_width = miner_count * m.size - - cov.lane_start = 0 - cov.lane_step = m.size * 2 + 2 - local lane_pairs = floor(lane_count / 2) - local lane_coverage = ceil((p.radius-1) / (m.size + 0.5)) - if lane_coverage > 1 then - cov.lane_start = (ceil(lane_pairs / 2) % 2 == 0 and 1 or 0) * (m.size * 2 + 2) - cov.lane_step = lane_coverage * (m.size * 2 + 2) - end - - return cov -end - ----Calculates needed power pole count ----@param state SimpleState -function mpp_util.calculate_shifted_pole_coverage(state, miner_count) - local cov = {} - local pole_proto = game.entity_prototypes[state.pole_choice] - local m = mpp_util.miner_struct(game.entity_prototypes[state.miner_choice]) - local p = mpp_util.pole_struct(game.entity_prototypes[state.pole_choice]) - - local miner_coverage = max((miner_count-1)*m.far+miner_count, 1) - - -- Shift subtract - local covered_miners = ceil(p.supply_width / m.size) - local miner_step = covered_miners * m.size - local miner_coverage_excess = ceil(miner_count / covered_miners) * covered_miners - miner_count - - if floor(p.wire) < miner_step and covered_miners > 1 then - covered_miners = covered_miners - 1 - miner_step = covered_miners * m.size - end - - local pole_start = m.size - 1 - if covered_miners % 2 == 0 then - pole_start = m.near * 2 - elseif covered_miners > 1 and miner_count % covered_miners == 0 then - pole_start = pole_start + m.size - end - - cov.pole_start = pole_start - cov.pole_step = miner_step - cov.full_miner_width = miner_count * m.size - - return cov -end - ----@param t table ----@param func function ----@return true | nil -function mpp_util.table_find(t, func) - for k, v in pairs(t) do - if func(v) then return true end - end -end - ----@param t table ----@param m LuaObject -function mpp_util.table_mapping(t, m) - for k, v in pairs(t) do - if k == m then return v end - end -end - ----@param player LuaPlayer ----@param blueprint LuaItemStack -function mpp_util.validate_blueprint(player, blueprint) - if not blueprint.blueprint_snap_to_grid then - player.print({"mpp.msg_blueprint_undefined_grid"}) - return false - end - - local miners, _ = enums.get_available_miners() - local cost = blueprint.cost_to_build - for name, _ in pairs(miners) do - if cost[name] then - return true - end - end - - player.print({"mpp.msg_blueprint_no_miner"}) - return false -end - -function mpp_util.keys_to_set(...) - local set, temp = {}, {} - for _, t in pairs{...} do - for k, _ in pairs(t) do - temp[k] = true - end - end - for k, _ in pairs(temp) do - set[#set+1] = k - end - table.sort(set) - return set -end - -function mpp_util.list_to_keys(t) - local temp = {} - for _, k in ipairs(t) do - temp[k] = true - end - return temp -end - ----@param bp LuaItemStack -function mpp_util.blueprint_label(bp) - local label = bp.label - if label then - if #label > 30 then - return string.sub(label, 0, 28) .. "...", label - end - return label - else - return {"", {"gui-blueprint.unnamed-blueprint"}, " ", bp.item_number} - end -end - ----Filters out a list ----@param t any ----@param func any -function table.filter(t, func) - local new = {} - for k, v in ipairs(t) do - if func(v) then new[#new+1] = v end - end - return new -end - -function table.map(t, func) - local new = {} - for k, v in pairs(t) do - new[k] = func(v) - end - return new -end - -function table.mapkey(t, func) - local new = {} - for k, v in pairs(t) do - new[func(v)] = v - end - return new -end - -function math.divmod(a, b) - return math.floor(a / b), a % b -end - ----@class CollisionBoxProperties ----@field w number ----@field h number ----@field near number ----@field [1] boolean ----@field [2] boolean - --- LuaEntityPrototype#tile_height was added in 1.1.64, I'm developing on 1.1.61 -local even_width_memoize = {} ----Gets properties of entity collision box ----@param name string ----@return CollisionBoxProperties -function mpp_util.entity_even_width(name) - local check = even_width_memoize[name] - if check then return check end - local proto = game.entity_prototypes[name] - local cbox = proto.collision_box - local cbox_tl, cbox_br = cbox.left_top, cbox.right_bottom - local cw, ch = cbox_br.x - cbox_tl.x, cbox_br.y - cbox_tl.y - local w, h = ceil(cw), ceil(ch) - local res = {w % 2 ~= 1, h % 2 ~= 1, w=w, h=h, near=floor(w/2)} - even_width_memoize[name] = res - return res -end - ---- local EAST, NORTH, SOUTH, WEST = mpp_util.directions() -function mpp_util.directions() - return - defines.direction.east, - defines.direction.north, - defines.direction.south, - defines.direction.west -end - ----@param player_index uint ----@return uint -function mpp_util.get_display_duration(player_index) - return settings.get_player_settings(player_index)["mpp-lane-filling-info-duration"].value * 60 --[[@as uint]] -end - ----@param player_index uint ----@return boolean -function mpp_util.get_dump_state(player_index) - return settings.get_player_settings(player_index)["mpp-dump-heuristics-data"].value --[[@as boolean]] -end - -function mpp_util.wrap_tooltip(tooltip) - return tooltip and {"", " ", tooltip} -end - -return mpp_util diff --git a/mining-patch-planner_1.5.7/pole_grid_mt.lua b/mining-patch-planner_1.5.7/pole_grid_mt.lua deleted file mode 100644 index b3bc0fca..00000000 --- a/mining-patch-planner_1.5.7/pole_grid_mt.lua +++ /dev/null @@ -1,28 +0,0 @@ ----@class PowerPoleGrid -local pole_grid_mt = {} -pole_grid_mt.__index = pole_grid_mt - ----@class GridPole ----@field x number Position in the full grid ----@field y number Position in the full grid ----@field ix number Position in the pole grid ----@field iy number Position in the pole grid ----@field built boolean Is the pole really built ----@field entity LuaEntity Pole ghost LuaEntity - ----@param x number ----@param y number ----@param p GridPole -function pole_grid_mt:set_pole(x, y, p) - if not self[x] then self[x] = {} end - self[x][y] = p -end - ----@param x number ----@param y number ----@return GridPole | nil -function pole_grid_mt:get_pole(x, y) - if self[x] then return self[x][y] end -end - -return pole_grid_mt diff --git a/mining-patch-planner_1.5.7/prototypes/data.lua b/mining-patch-planner_1.5.7/prototypes/data.lua deleted file mode 100644 index f49b73f0..00000000 --- a/mining-patch-planner_1.5.7/prototypes/data.lua +++ /dev/null @@ -1,61 +0,0 @@ -local graphics = "__mining-patch-planner__/graphics/" - -data:extend{ - { - type="selection-tool", - name="mining-patch-planner", - icon=graphics.."drill-icon.png", - icon_size = 64, - flags = {"only-in-cursor", "hidden", "spawnable", "not-stackable"}, - stack_size = 1, - order="c[automated-construction]-e[miner-planner]", - draw_label_for_cursor_render = false, - selection_color = {r=0, g=0, b=1, a=0.5}, - selection_cursor_box_type="entity", - selection_mode={"any-entity"}, - entity_filter_mode="whitelist", - entity_type_filters = {"resource"}, - tile_filter_mode = "whitelist", - tile_filters = {"water-wube"}, - alt_selection_color = {r=0, g=0, b=1, a=0.5}, - alt_selection_cursor_box_type="entity", - alt_selection_mode={"any-entity"}, - }, - { - type="custom-input", - name="mining-patch-planner-keybind", - key_sequence="CONTROL + M", - action="spawn-item", - item_to_spawn="mining-patch-planner", - }, - { - type="shortcut", - name="mining-patch-planner-shortcut", - icon={ - filename=graphics.."drill-icon-toolbar-white.png", - priority = "extra-high-no-scale", - size=32, - flags={"gui-icon"} - }, - small_icon={ - filename=graphics.."drill-icon-toolbar-white.png", - priority = "extra-high-no-scale", - size=32, - scale=1, - flags={"gui-icon"} - }, - disabled_small_icon={ - filename=graphics.."drill-icon-toolbar-disabled.png", - priority = "extra-high-no-scale", - size=32, - scale=1, - flags={"gui-icon"} - }, - order="b[blueprints]-i[miner-planner]", - action = "spawn-item", - icon_size = 64, - item_to_spawn="mining-patch-planner", - style="blue", - associated_control_input="mining-patch-planner-keybind", - }, -} diff --git a/mining-patch-planner_1.5.7/prototypes/graphics.lua b/mining-patch-planner_1.5.7/prototypes/graphics.lua deleted file mode 100644 index 8e2daa3e..00000000 --- a/mining-patch-planner_1.5.7/prototypes/graphics.lua +++ /dev/null @@ -1,212 +0,0 @@ -local graphics = "__mining-patch-planner__/graphics/" - -data:extend{ - { - type = "sprite", - name = "mpp_advanced_settings", - filename = graphics.."advanced-settings.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_advanced_settings_black", - filename = graphics.."advanced-settings-black.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_no_entity", - filename = graphics.."no-entity.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_plus", - filename = graphics.."plus.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_cross", - filename = graphics.."cross.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_blueprint_add", - filename = graphics.."blueprint_add.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_direction_north", - filename = graphics.."arrow-north.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_direction_east", - filename = graphics.."arrow-east.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_direction_south", - filename = graphics.."arrow-south.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_direction_west", - filename = graphics.."arrow-west.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_miner_coverage", - filename = graphics.."miner_coverage.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_miner_coverage_disabled", - filename = graphics.."miner_coverage_disabled.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_omit_landfill", - filename = graphics.."omit_landfill.png", - size = 64, - mipmap_count = 3, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_align_start", - filename = graphics.."align_start.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_omit_deconstruct", - filename = graphics.."omit_deconstruct.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_deconstruct", - filename = graphics.."deconstruct.png", - size = 64, - mipmap_count = 2, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_no_module", - filename = graphics.."no_module.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_show_all_miners", - filename = graphics.."show_all_miners.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_no_pipe", - filename = graphics.."no_pipe.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_no_lamp", - filename = graphics.."no_lamp.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_force_pipe_disabled", - filename = graphics.."force_pipe_disabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_force_pipe_enabled", - filename = graphics.."force_pipe_enabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_print_placement_info_disabled", - filename = graphics.."print-placement-info-disabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_print_placement_info_enabled", - filename = graphics.."print-placement-info-enabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_display_lane_filling_disabled", - filename = graphics.."display-lane-filling-disabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, - { - type = "sprite", - name = "mpp_display_lane_filling_enabled", - filename = graphics.."display-lane-filling-enabled.png", - size = 64, - mipmap_count = 1, - flags = { "icon" }, - }, -} \ No newline at end of file diff --git a/mining-patch-planner_1.5.7/prototypes/styles.lua b/mining-patch-planner_1.5.7/prototypes/styles.lua deleted file mode 100644 index d1a08643..00000000 --- a/mining-patch-planner_1.5.7/prototypes/styles.lua +++ /dev/null @@ -1,105 +0,0 @@ - -local default_style = data.raw["gui-style"].default - ---- taken from flib -default_style.mpp_selected_frame_action_button = { - type = "button_style", - parent = "frame_action_button", - default_graphical_set = { - base = {position = {225, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - hovered_graphical_set = { - base = {position = {369, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - clicked_graphical_set = { - base = {position = {352, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - } -} - -default_style.mpp_blueprint_mode_button = { - type = "button_style", - parent = "recipe_slot_button", - size = 28, -} - -default_style.mpp_blueprint_mode_button_active = { - type = "button_style", - parent = "recipe_slot_button", - size = 28, - default_graphical_set = { - base = {position = {225, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - hovered_graphical_set = { - base = {position = {369, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - clicked_graphical_set = { - base = {position = {352, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - } -} - -default_style.mpp_fake_item_placeholder = { - type="image_style", - stretch_image_to_widget_size = true, - size=32, -} - -default_style.mpp_fake_blueprint_button = { - type="button_style", - parent="shortcut_bar_button_blue", - padding=3, - size=48, -} -default_style.mpp_delete_blueprint_button = { - type="button_style", - parent="shortcut_bar_button_red", - padding=0, - size=24, - stretch_image_to_widget_size=true, -} - -default_style.mpp_fake_blueprint_button_selected = { - type="button_style", - parent="shortcut_bar_button_blue", - padding=3, - size=48, - default_graphical_set = { - base = {position = {225, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - hovered_graphical_set = { - base = {position = {369, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - }, - clicked_graphical_set = { - base = {position = {352, 17}, corner_size = 8}, - shadow = {position = {440, 24}, corner_size = 8, draw_type = "outer"}, - } -} - -default_style.mpp_fake_blueprint_button_invalid = { - type="button_style", - parent="shortcut_bar_button_red", - padding=3, - size=48, - stretch_image_to_widget_size=true, -} - -default_style.mpp_fake_blueprint_table = { - type="table_style", - padding=0, - cell_padding=0, - horizontal_spacing=2, - vertical_spacing=2, -} - -default_style.mpp_fake_blueprint_sprite = { - type="image_style", - size=16, - stretch_image_to_widget_size=true, -} diff --git a/mining-patch-planner_1.5.7/render_util.lua b/mining-patch-planner_1.5.7/render_util.lua deleted file mode 100644 index 79f1e6c9..00000000 --- a/mining-patch-planner_1.5.7/render_util.lua +++ /dev/null @@ -1,161 +0,0 @@ -local mpp_util = require("mpp_util") - -local DIR = defines.direction - -local render_util = {} - -local triangles = { - west={ - {{target={-.6, 0}}, {target={.6, -0.6}}, {target={.6, 0.6}}}, - {{target={-.4, 0}}, {target={.5, -0.45}}, {target={.5, 0.45}}}, - }, - east={ - {{target={.6, 0}}, {target={-.6, -0.6}}, {target={-.6, 0.6}}}, - {{target={.4, 0}}, {target={-.5, -0.45}}, {target={-.5, 0.45}}}, - }, - north={ - {{target={0, -.6}}, {target={-.6, .6}}, {target={.6, .6}}}, - {{target={0, -.4}}, {target={-.45, .5}}, {target={.45, .5}}}, - }, - south={ - {{target={0, .6}}, {target={-.6, -.6}}, {target={.6, -.6}}}, - {{target={0, .4}}, {target={-.45, -.5}}, {target={.45, -.5}}}, - }, -} -local alignment = { - west={"center", "center"}, - east={"center", "center"}, - north={"left", "right"}, - south={"right", "left"}, -} - -local bound_alignment = { - west="right", - east="left", - north="center", - south="center", -} - ----Draws a belt lane overlay ----@param state State ----@param belt BeltSpecification -function render_util.draw_belt_lane(state, belt) - local r = state._render_objects - local c, ttl, player = state.coords, 0, {state.player} - local x1, y1, x2, y2 = belt.x1, belt.y, math.max(belt.x1+2, belt.x2), belt.y - local function l2w(x, y) -- local to world - return mpp_util.revert(c.gx, c.gy, state.direction_choice, x, y, c.tw, c.th) - end - local c1, c2, c3 = {.9, .9, .9}, {0, 0, 0}, {.4, .4, .4} - local w1, w2 = 4, 10 - if not belt.lane1 and not belt.lane2 then c1 = c3 end - - r[#r+1] = rendering.draw_line{ -- background main line - surface=state.surface, players=player, only_in_alt_mode=true, - width=w2, color=c2, time_to_live=ttl or 1, - from=l2w(x1, y1), to=l2w(x2+.5, y1), - } - r[#r+1] = rendering.draw_line{ -- background vertical cap - surface=state.surface, players=player, only_in_alt_mode=true, - width=w2, color=c2, time_to_live=ttl or 1, - from=l2w(x2+.5, y1-.6), to=l2w(x2+.5, y2+.6), - } - r[#r+1] = rendering.draw_polygon{ -- background arrow - surface=state.surface, players=player, only_in_alt_mode=true, - width=w2, color=c2, time_to_live=ttl or 1, - target=l2w(x1, y1), - vertices=triangles[state.direction_choice][1], - } - r[#r+1] = rendering.draw_line{ -- main line - surface=state.surface, players=player, only_in_alt_mode=true, - width=w1, color=c1, time_to_live=ttl or 1, - from=l2w(x1-.2, y1), to=l2w(x2+.5, y1), - } - r[#r+1] = rendering.draw_line{ -- vertical cap - surface=state.surface, players=player, only_in_alt_mode=true, - width=w1, color=c1, time_to_live=ttl or 1, - from=l2w(x2+.5, y1-.5), to=l2w(x2+.5, y2+.5), - } - r[#r+1] = rendering.draw_polygon{ -- arrow - surface=state.surface, players=player, only_in_alt_mode=true, - width=0, color=c1, time_to_live=ttl or 1, - target=l2w(x1, y1), - vertices=triangles[state.direction_choice][2], - } -end - ----Draws a belt lane overlay ----@param state State ----@param belt BeltSpecification -function render_util.draw_belt_stats(state, belt, belt_speed, speed1, speed2) - local r = state._render_objects - local c, ttl, player = state.coords, 0, {state.player} - local x1, y1, x2, y2 = belt.x1, belt.y, belt.x2, belt.y - local function l2w(x, y) -- local to world - return mpp_util.revert(c.gx, c.gy, state.direction_choice, x, y, c.tw, c.th) - end - local c1, c2, c3, c4 = {.9, .9, .9}, {0, 0, 0}, {.9, 0, 0}, {.4, .4, .4} - - local ratio1 = speed1 / belt_speed - local ratio2 = speed2 / belt_speed - local function get_color(ratio) - return ratio > 1.01 and c3 or ratio == 0 and c4 or c1 - end - - r[#r+1] = rendering.draw_text{ - surface=state.surface, players=player, only_in_alt_mode=true, - color=get_color(ratio1), time_to_live=ttl or 1, - alignment=alignment[state.direction_choice][1], vertical_alignment="middle", - target=l2w(x1-2, y1-.6), scale=1.6, - text=string.format("%.2fx", ratio1), - } - r[#r+1] = rendering.draw_text{ - surface=state.surface, players=player, only_in_alt_mode=true, - color=get_color(ratio2), time_to_live=ttl or 1, - alignment=alignment[state.direction_choice][2], vertical_alignment="middle", - target=l2w(x1-2, y1+.6), scale=1.6, - text=string.format("%.2fx", ratio2), - } - -end - ----Draws a belt lane overlay ----@param state State ----@param pos_x number ----@param pos_y number ----@param speed1 number ----@param speed2 number -function render_util.draw_belt_total(state, pos_x, pos_y, speed1, speed2) - local r = state._render_objects - local c, ttl, player = state.coords, 0, {state.player} - local function l2w(x, y, b) -- local to world - if ({south=true, north=true})[state.direction_choice] then - x = x + (b and -.5 or .5) - y = y + (b and -.5 or .5) - end - return mpp_util.revert(c.gx, c.gy, state.direction_choice, x, y, c.tw, c.th) - end - local c1 = {0.7, 0.7, 1.0} - - local lower_bound = math.min(speed1, speed2) - local upper_bound = math.max(speed1, speed2) - - r[#r+1] = rendering.draw_text{ - surface=state.surface, players=player, only_in_alt_mode=true, - color=c1, time_to_live=ttl or 1, - alignment=bound_alignment[state.direction_choice], vertical_alignment="middle", - target=l2w(pos_x-4, pos_y-.6, false), scale=2, - text={"mpp.msg_print_info_lane_saturation_belts", string.format("%.2fx", upper_bound), string.format("%.2fx", (lower_bound+upper_bound)/2)}, - } - r[#r+1] = rendering.draw_text{ - surface=state.surface, players=player, only_in_alt_mode=true, - color=c1, time_to_live=ttl or 1, - alignment=bound_alignment[state.direction_choice], vertical_alignment="middle", - target=l2w(pos_x-4, pos_y+.6, true), scale=2, - text={"mpp.msg_print_info_lane_saturation_bounds", string.format("%.2fx", lower_bound), string.format("%.2fx", upper_bound)}, - } - -end - - -return render_util diff --git a/mining-patch-planner_1.5.7/settings.lua b/mining-patch-planner_1.5.7/settings.lua deleted file mode 100644 index be59d669..00000000 --- a/mining-patch-planner_1.5.7/settings.lua +++ /dev/null @@ -1,15 +0,0 @@ -data:extend{ - { - type="int-setting", - name="mpp-lane-filling-info-duration", - setting_type="runtime-per-user", - default_value=10, - }, - { - type="bool-setting", - name="mpp-dump-heuristics-data", - setting_type="runtime-per-user", - default_value=false, - hidden=true, - }, -} diff --git a/mining-patch-planner_1.5.7/thumbnail.png b/mining-patch-planner_1.5.7/thumbnail.png deleted file mode 100644 index a09817e9..00000000 --- a/mining-patch-planner_1.5.7/thumbnail.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b6e7099389210e86813345d627f32f273343981358f6a83cbaad4d52eac9881 -size 57415 diff --git a/mod-list.json b/mod-list.json index 36430b80..98daa0a3 100644 --- a/mod-list.json +++ b/mod-list.json @@ -53,11 +53,6 @@ "enabled": true }, - { - "name": "Ambient_Music", - "enabled": true - }, - { "name": "angels-smelting-extended", "enabled": true @@ -98,11 +93,6 @@ "enabled": true }, - { - "name": "AngelsWarehouseExtension", - "enabled": false - }, - { "name": "AtomicArtillery", "enabled": true @@ -158,11 +148,6 @@ "enabled": true }, - { - "name": "blueprint-sandboxes", - "enabled": true - }, - { "name": "blueprint_flip_and_turn", "enabled": true @@ -288,11 +273,6 @@ "enabled": true }, - { - "name": "combat-mechanics-overhaul", - "enabled": true - }, - { "name": "CoppermineBobModuleRebalancing", "enabled": true @@ -303,6 +283,11 @@ "enabled": true }, + { + "name": "crafting_combinator", + "enabled": true + }, + { "name": "Cursed-FMD", "enabled": true @@ -348,11 +333,6 @@ "enabled": true }, - { - "name": "ElectricResistance", - "enabled": false - }, - { "name": "Enhanced_Map_Colors", "enabled": true @@ -403,11 +383,6 @@ "enabled": true }, - { - "name": "factoryplanner", - "enabled": true - }, - { "name": "FactorySearch", "enabled": true @@ -458,11 +433,6 @@ "enabled": true }, - { - "name": "FOST", - "enabled": true - }, - { "name": "GUI_Unifyer", "enabled": true @@ -493,6 +463,11 @@ "enabled": true }, + { + "name": "inserter-throughput", + "enabled": true + }, + { "name": "JunkTrain3", "enabled": true @@ -503,6 +478,11 @@ "enabled": true }, + { + "name": "Kruise_Kontrol_Updated", + "enabled": true + }, + { "name": "KS_Power", "enabled": true @@ -563,11 +543,6 @@ "enabled": true }, - { - "name": "MaxRateCalculator", - "enabled": true - }, - { "name": "MilesBobsExpansion", "enabled": true @@ -588,11 +563,6 @@ "enabled": true }, - { - "name": "mining-patch-planner", - "enabled": true - }, - { "name": "MIRV", "enabled": true @@ -658,6 +628,11 @@ "enabled": true }, + { + "name": "Nearby-Ammo-Count", + "enabled": true + }, + { "name": "ner_intermediatestweak", "enabled": true @@ -844,15 +819,10 @@ }, { - "name": "Rampant", + "name": "RampantFixed", "enabled": true }, - { - "name": "RampantEvolution", - "enabled": false - }, - { "name": "RateCalculator", "enabled": true @@ -868,6 +838,11 @@ "enabled": true }, + { + "name": "RemoteConfiguration", + "enabled": true + }, + { "name": "Renamer", "enabled": true @@ -903,11 +878,6 @@ "enabled": true }, - { - "name": "reverse-factory", - "enabled": false - }, - { "name": "RITEG", "enabled": true @@ -949,12 +919,7 @@ }, { - "name": "Sandros-fixes", - "enabled": true - }, - - { - "name": "Satisfactory_OST", + "name": "rusty-locale", "enabled": true }, @@ -1019,23 +984,13 @@ }, { - "name": "Squeak Through", + "name": "SpeedLimitSignsForTrains", "enabled": true }, { - "name": "StatsGui", - "enabled": false - }, - - { - "name": "StatsGui-HandcraftTimer", - "enabled": false - }, - - { - "name": "StatsGui-MovementSpeed", - "enabled": false + "name": "Squeak Through", + "enabled": true }, { @@ -1148,6 +1103,11 @@ "enabled": true }, + { + "name": "WireShortcuts", + "enabled": true + }, + { "name": "YARM", "enabled": true diff --git a/mod-settings.dat b/mod-settings.dat index 9bd42ad9..d2deadbf 100644 Binary files a/mod-settings.dat and b/mod-settings.dat differ diff --git a/more-minimap-autohide-017_1.1.0/changelog.txt b/more-minimap-autohide-017/changelog.txt similarity index 100% rename from more-minimap-autohide-017_1.1.0/changelog.txt rename to more-minimap-autohide-017/changelog.txt diff --git a/more-minimap-autohide-017_1.1.0/config.lua b/more-minimap-autohide-017/config.lua similarity index 100% rename from more-minimap-autohide-017_1.1.0/config.lua rename to more-minimap-autohide-017/config.lua diff --git a/more-minimap-autohide-017_1.1.0/control.lua b/more-minimap-autohide-017/control.lua similarity index 100% rename from more-minimap-autohide-017_1.1.0/control.lua rename to more-minimap-autohide-017/control.lua diff --git a/more-minimap-autohide-017_1.1.0/data.lua b/more-minimap-autohide-017/data.lua similarity index 100% rename from more-minimap-autohide-017_1.1.0/data.lua rename to more-minimap-autohide-017/data.lua diff --git a/more-minimap-autohide-017_1.1.0/info.json b/more-minimap-autohide-017/info.json similarity index 100% rename from more-minimap-autohide-017_1.1.0/info.json rename to more-minimap-autohide-017/info.json diff --git a/more-minimap-autohide-017_1.1.0/locale/en/locale.cfg b/more-minimap-autohide-017/locale/en/locale.cfg similarity index 100% rename from more-minimap-autohide-017_1.1.0/locale/en/locale.cfg rename to more-minimap-autohide-017/locale/en/locale.cfg diff --git a/more-minimap-autohide-017_1.1.0/thumbnail.png b/more-minimap-autohide-017/thumbnail.png similarity index 100% rename from more-minimap-autohide-017_1.1.0/thumbnail.png rename to more-minimap-autohide-017/thumbnail.png diff --git a/more-petrochem-hell_0.18.2/changelog.txt b/more-petrochem-hell/changelog.txt similarity index 100% rename from more-petrochem-hell_0.18.2/changelog.txt rename to more-petrochem-hell/changelog.txt diff --git a/more-petrochem-hell_0.18.2/data.lua b/more-petrochem-hell/data.lua similarity index 100% rename from more-petrochem-hell_0.18.2/data.lua rename to more-petrochem-hell/data.lua diff --git a/more-petrochem-hell_0.18.2/graphics/Fuel-Additive.png b/more-petrochem-hell/graphics/Fuel-Additive.png similarity index 100% rename from more-petrochem-hell_0.18.2/graphics/Fuel-Additive.png rename to more-petrochem-hell/graphics/Fuel-Additive.png diff --git a/more-petrochem-hell_0.18.2/graphics/fluid-tetraethyllead.png b/more-petrochem-hell/graphics/fluid-tetraethyllead.png similarity index 100% rename from more-petrochem-hell_0.18.2/graphics/fluid-tetraethyllead.png rename to more-petrochem-hell/graphics/fluid-tetraethyllead.png diff --git a/more-petrochem-hell_0.18.2/graphics/gas-chloroethane.png b/more-petrochem-hell/graphics/gas-chloroethane.png similarity index 100% rename from more-petrochem-hell_0.18.2/graphics/gas-chloroethane.png rename to more-petrochem-hell/graphics/gas-chloroethane.png diff --git a/more-petrochem-hell_0.18.2/graphics/high-octane-enriched-fuel.png b/more-petrochem-hell/graphics/high-octane-enriched-fuel.png similarity index 100% rename from more-petrochem-hell_0.18.2/graphics/high-octane-enriched-fuel.png rename to more-petrochem-hell/graphics/high-octane-enriched-fuel.png diff --git a/more-petrochem-hell_0.18.2/graphics/ingot-sodium-lead-alloy.png b/more-petrochem-hell/graphics/ingot-sodium-lead-alloy.png similarity index 100% rename from more-petrochem-hell_0.18.2/graphics/ingot-sodium-lead-alloy.png rename to more-petrochem-hell/graphics/ingot-sodium-lead-alloy.png diff --git a/more-petrochem-hell_0.18.2/info.json b/more-petrochem-hell/info.json similarity index 100% rename from more-petrochem-hell_0.18.2/info.json rename to more-petrochem-hell/info.json diff --git a/more-petrochem-hell_0.18.2/locale/en/item-name.cfg b/more-petrochem-hell/locale/en/item-name.cfg similarity index 100% rename from more-petrochem-hell_0.18.2/locale/en/item-name.cfg rename to more-petrochem-hell/locale/en/item-name.cfg diff --git a/more-petrochem-hell_0.18.2/prototypes/entity.lua b/more-petrochem-hell/prototypes/entity.lua similarity index 100% rename from more-petrochem-hell_0.18.2/prototypes/entity.lua rename to more-petrochem-hell/prototypes/entity.lua diff --git a/more-petrochem-hell_0.18.2/prototypes/item.lua b/more-petrochem-hell/prototypes/item.lua similarity index 100% rename from more-petrochem-hell_0.18.2/prototypes/item.lua rename to more-petrochem-hell/prototypes/item.lua diff --git a/more-petrochem-hell_0.18.2/prototypes/recipe.lua b/more-petrochem-hell/prototypes/recipe.lua similarity index 100% rename from more-petrochem-hell_0.18.2/prototypes/recipe.lua rename to more-petrochem-hell/prototypes/recipe.lua diff --git a/more-petrochem-hell_0.18.2/prototypes/technology.lua b/more-petrochem-hell/prototypes/technology.lua similarity index 100% rename from more-petrochem-hell_0.18.2/prototypes/technology.lua rename to more-petrochem-hell/prototypes/technology.lua diff --git a/more-petrochem-hell_0.18.2/thumbnail.png b/more-petrochem-hell/thumbnail.png similarity index 100% rename from more-petrochem-hell_0.18.2/thumbnail.png rename to more-petrochem-hell/thumbnail.png diff --git a/multi-product-recipe-details_1.1.1/README.md b/multi-product-recipe-details/README.md similarity index 100% rename from multi-product-recipe-details_1.1.1/README.md rename to multi-product-recipe-details/README.md diff --git a/multi-product-recipe-details_1.1.1/changelog.txt b/multi-product-recipe-details/changelog.txt similarity index 100% rename from multi-product-recipe-details_1.1.1/changelog.txt rename to multi-product-recipe-details/changelog.txt diff --git a/multi-product-recipe-details_1.1.1/data-final-fixes.lua b/multi-product-recipe-details/data-final-fixes.lua similarity index 100% rename from multi-product-recipe-details_1.1.1/data-final-fixes.lua rename to multi-product-recipe-details/data-final-fixes.lua diff --git a/multi-product-recipe-details_1.1.1/info.json b/multi-product-recipe-details/info.json similarity index 100% rename from multi-product-recipe-details_1.1.1/info.json rename to multi-product-recipe-details/info.json diff --git a/multi-product-recipe-details_1.1.1/locale/en/base.cfg b/multi-product-recipe-details/locale/en/base.cfg similarity index 100% rename from multi-product-recipe-details_1.1.1/locale/en/base.cfg rename to multi-product-recipe-details/locale/en/base.cfg diff --git a/multi-product-recipe-details_1.1.1/locale/ru/base.cfg b/multi-product-recipe-details/locale/ru/base.cfg similarity index 100% rename from multi-product-recipe-details_1.1.1/locale/ru/base.cfg rename to multi-product-recipe-details/locale/ru/base.cfg diff --git a/multi-product-recipe-details_1.1.1/settings.lua b/multi-product-recipe-details/settings.lua similarity index 100% rename from multi-product-recipe-details_1.1.1/settings.lua rename to multi-product-recipe-details/settings.lua diff --git a/multi-product-recipe-details_1.1.1/thumbnail.png b/multi-product-recipe-details/thumbnail.png similarity index 100% rename from multi-product-recipe-details_1.1.1/thumbnail.png rename to multi-product-recipe-details/thumbnail.png diff --git a/nco-InserterCranes_0.0.7/README.md b/nco-InserterCranes/README.md similarity index 100% rename from nco-InserterCranes_0.0.7/README.md rename to nco-InserterCranes/README.md diff --git a/nco-InserterCranes_0.0.7/changelog.txt b/nco-InserterCranes/changelog.txt similarity index 100% rename from nco-InserterCranes_0.0.7/changelog.txt rename to nco-InserterCranes/changelog.txt diff --git a/nco-InserterCranes_0.0.7/control.lua b/nco-InserterCranes/control.lua similarity index 100% rename from nco-InserterCranes_0.0.7/control.lua rename to nco-InserterCranes/control.lua diff --git a/nco-InserterCranes_0.0.7/data-final-fixes.lua b/nco-InserterCranes/data-final-fixes.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data-final-fixes.lua rename to nco-InserterCranes/data-final-fixes.lua diff --git a/nco-InserterCranes_0.0.7/data-updates.lua b/nco-InserterCranes/data-updates.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data-updates.lua rename to nco-InserterCranes/data-updates.lua diff --git a/nco-InserterCranes_0.0.7/data.lua b/nco-InserterCranes/data.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data.lua rename to nco-InserterCranes/data.lua diff --git a/nco-InserterCranes_0.0.7/data/entity.lua b/nco-InserterCranes/data/entity.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/entity.lua rename to nco-InserterCranes/data/entity.lua diff --git a/nco-InserterCranes_0.0.7/data/icon.lua b/nco-InserterCranes/data/icon.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/icon.lua rename to nco-InserterCranes/data/icon.lua diff --git a/nco-InserterCranes_0.0.7/data/item.lua b/nco-InserterCranes/data/item.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/item.lua rename to nco-InserterCranes/data/item.lua diff --git a/nco-InserterCranes_0.0.7/data/recipe.lua b/nco-InserterCranes/data/recipe.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/recipe.lua rename to nco-InserterCranes/data/recipe.lua diff --git a/nco-InserterCranes_0.0.7/data/subgroup.lua b/nco-InserterCranes/data/subgroup.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/subgroup.lua rename to nco-InserterCranes/data/subgroup.lua diff --git a/nco-InserterCranes_0.0.7/data/tech.lua b/nco-InserterCranes/data/tech.lua similarity index 100% rename from nco-InserterCranes_0.0.7/data/tech.lua rename to nco-InserterCranes/data/tech.lua diff --git a/nco-InserterCranes_0.0.7/graphics/ground_texture_4way.png b/nco-InserterCranes/graphics/ground_texture_4way.png similarity index 100% rename from nco-InserterCranes_0.0.7/graphics/ground_texture_4way.png rename to nco-InserterCranes/graphics/ground_texture_4way.png diff --git a/nco-InserterCranes_0.0.7/graphics/icon_texture.png b/nco-InserterCranes/graphics/icon_texture.png similarity index 100% rename from nco-InserterCranes_0.0.7/graphics/icon_texture.png rename to nco-InserterCranes/graphics/icon_texture.png diff --git a/nco-InserterCranes_0.0.7/graphics/icon_texture_gray.png b/nco-InserterCranes/graphics/icon_texture_gray.png similarity index 100% rename from nco-InserterCranes_0.0.7/graphics/icon_texture_gray.png rename to nco-InserterCranes/graphics/icon_texture_gray.png diff --git a/nco-InserterCranes_0.0.7/info.json b/nco-InserterCranes/info.json similarity index 100% rename from nco-InserterCranes_0.0.7/info.json rename to nco-InserterCranes/info.json diff --git a/nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.base.cfg b/nco-InserterCranes/locale/en/nco-InserterCranes.base.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.base.cfg rename to nco-InserterCranes/locale/en/nco-InserterCranes.base.cfg diff --git a/nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.boblogistics.cfg b/nco-InserterCranes/locale/en/nco-InserterCranes.boblogistics.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.boblogistics.cfg rename to nco-InserterCranes/locale/en/nco-InserterCranes.boblogistics.cfg diff --git a/nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.cfg b/nco-InserterCranes/locale/en/nco-InserterCranes.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.cfg rename to nco-InserterCranes/locale/en/nco-InserterCranes.cfg diff --git a/nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.krastorio2.cfg b/nco-InserterCranes/locale/en/nco-InserterCranes.krastorio2.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/en/nco-InserterCranes.krastorio2.cfg rename to nco-InserterCranes/locale/en/nco-InserterCranes.krastorio2.cfg diff --git a/nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.base.cfg b/nco-InserterCranes/locale/ru/nco-InserterCranes.base.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.base.cfg rename to nco-InserterCranes/locale/ru/nco-InserterCranes.base.cfg diff --git a/nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.boblogistics.cfg b/nco-InserterCranes/locale/ru/nco-InserterCranes.boblogistics.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.boblogistics.cfg rename to nco-InserterCranes/locale/ru/nco-InserterCranes.boblogistics.cfg diff --git a/nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.cfg b/nco-InserterCranes/locale/ru/nco-InserterCranes.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.cfg rename to nco-InserterCranes/locale/ru/nco-InserterCranes.cfg diff --git a/nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.krastorio2.cfg b/nco-InserterCranes/locale/ru/nco-InserterCranes.krastorio2.cfg similarity index 100% rename from nco-InserterCranes_0.0.7/locale/ru/nco-InserterCranes.krastorio2.cfg rename to nco-InserterCranes/locale/ru/nco-InserterCranes.krastorio2.cfg diff --git a/nco-InserterCranes_0.0.7/script/reload-tech-unlock.lua b/nco-InserterCranes/script/reload-tech-unlock.lua similarity index 100% rename from nco-InserterCranes_0.0.7/script/reload-tech-unlock.lua rename to nco-InserterCranes/script/reload-tech-unlock.lua diff --git a/nco-InserterCranes_0.0.7/settings.lua b/nco-InserterCranes/settings.lua similarity index 100% rename from nco-InserterCranes_0.0.7/settings.lua rename to nco-InserterCranes/settings.lua diff --git a/nco-InserterCranes_0.0.7/thumbnail.png b/nco-InserterCranes/thumbnail.png similarity index 100% rename from nco-InserterCranes_0.0.7/thumbnail.png rename to nco-InserterCranes/thumbnail.png diff --git a/ner_intermediatestweak_1.0.0/changelog.txt b/ner_intermediatestweak/changelog.txt similarity index 100% rename from ner_intermediatestweak_1.0.0/changelog.txt rename to ner_intermediatestweak/changelog.txt diff --git a/ner_intermediatestweak_1.0.0/data.lua b/ner_intermediatestweak/data.lua similarity index 100% rename from ner_intermediatestweak_1.0.0/data.lua rename to ner_intermediatestweak/data.lua diff --git a/ner_intermediatestweak_1.0.0/info.json b/ner_intermediatestweak/info.json similarity index 100% rename from ner_intermediatestweak_1.0.0/info.json rename to ner_intermediatestweak/info.json diff --git a/ner_intermediatestweak_1.0.0/locale/en/locale.cfg b/ner_intermediatestweak/locale/en/locale.cfg similarity index 100% rename from ner_intermediatestweak_1.0.0/locale/en/locale.cfg rename to ner_intermediatestweak/locale/en/locale.cfg diff --git a/ner_intermediatestweak_1.0.0/prototypes/productivity.lua b/ner_intermediatestweak/prototypes/productivity.lua similarity index 100% rename from ner_intermediatestweak_1.0.0/prototypes/productivity.lua rename to ner_intermediatestweak/prototypes/productivity.lua diff --git a/ner_intermediatestweak_1.0.0/prototypes/tweaks.lua b/ner_intermediatestweak/prototypes/tweaks.lua similarity index 100% rename from ner_intermediatestweak_1.0.0/prototypes/tweaks.lua rename to ner_intermediatestweak/prototypes/tweaks.lua diff --git a/make_burner_miners_great_again_9.1.0/thumbnail.png b/ner_intermediatestweak/thumbnail.png similarity index 100% rename from make_burner_miners_great_again_9.1.0/thumbnail.png rename to ner_intermediatestweak/thumbnail.png diff --git a/ner_intermediatestweak_1.0.0/thumbnail.png b/ner_intermediatestweak_1.0.0/thumbnail.png deleted file mode 100644 index bdadc4c3..00000000 Binary files a/ner_intermediatestweak_1.0.0/thumbnail.png and /dev/null differ diff --git a/newtrainsfx_1.2.2/changelog.txt b/newtrainsfx/changelog.txt similarity index 100% rename from newtrainsfx_1.2.2/changelog.txt rename to newtrainsfx/changelog.txt diff --git a/newtrainsfx_1.2.2/data-updates.lua b/newtrainsfx/data-updates.lua similarity index 100% rename from newtrainsfx_1.2.2/data-updates.lua rename to newtrainsfx/data-updates.lua diff --git a/newtrainsfx_1.2.2/data.lua b/newtrainsfx/data.lua similarity index 100% rename from newtrainsfx_1.2.2/data.lua rename to newtrainsfx/data.lua diff --git a/newtrainsfx_1.2.2/info.json b/newtrainsfx/info.json similarity index 100% rename from newtrainsfx_1.2.2/info.json rename to newtrainsfx/info.json diff --git a/newtrainsfx_1.2.2/sfx/armored_train/at.lua b/newtrainsfx/sfx/armored_train/at.lua similarity index 100% rename from newtrainsfx_1.2.2/sfx/armored_train/at.lua rename to newtrainsfx/sfx/armored_train/at.lua diff --git a/newtrainsfx_1.2.2/sfx/defines.lua b/newtrainsfx/sfx/defines.lua similarity index 100% rename from newtrainsfx_1.2.2/sfx/defines.lua rename to newtrainsfx/sfx/defines.lua diff --git a/newtrainsfx_1.2.2/sfx/train/breaks_sound.ogg b/newtrainsfx/sfx/train/breaks_sound.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/breaks_sound.ogg rename to newtrainsfx/sfx/train/breaks_sound.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/motor/CHME3_Disel.ogg b/newtrainsfx/sfx/train/motor/CHME3_Disel.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/motor/CHME3_Disel.ogg rename to newtrainsfx/sfx/train/motor/CHME3_Disel.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/motor/Disel_Motor_Train.ogg b/newtrainsfx/sfx/train/motor/Disel_Motor_Train.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/motor/Disel_Motor_Train.ogg rename to newtrainsfx/sfx/train/motor/Disel_Motor_Train.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/new_rus_train_sound.ogg b/newtrainsfx/sfx/train/new_rus_train_sound.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/new_rus_train_sound.ogg rename to newtrainsfx/sfx/train/new_rus_train_sound.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/new_rus_train_sound2.ogg b/newtrainsfx/sfx/train/new_rus_train_sound2.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/new_rus_train_sound2.ogg rename to newtrainsfx/sfx/train/new_rus_train_sound2.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/new_SNG_train_sound.ogg b/newtrainsfx/sfx/train/rail/new_SNG_train_sound.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/new_SNG_train_sound.ogg rename to newtrainsfx/sfx/train/rail/new_SNG_train_sound.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/new_SNG_train_sound_old.ogg b/newtrainsfx/sfx/train/rail/new_SNG_train_sound_old.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/new_SNG_train_sound_old.ogg rename to newtrainsfx/sfx/train/rail/new_SNG_train_sound_old.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_1.ogg b/newtrainsfx/sfx/train/rail/stuk_1.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_1.ogg rename to newtrainsfx/sfx/train/rail/stuk_1.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_2.ogg b/newtrainsfx/sfx/train/rail/stuk_2.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_2.ogg rename to newtrainsfx/sfx/train/rail/stuk_2.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_3.ogg b/newtrainsfx/sfx/train/rail/stuk_3.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_3.ogg rename to newtrainsfx/sfx/train/rail/stuk_3.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_4.ogg b/newtrainsfx/sfx/train/rail/stuk_4.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_4.ogg rename to newtrainsfx/sfx/train/rail/stuk_4.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_5.ogg b/newtrainsfx/sfx/train/rail/stuk_5.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_5.ogg rename to newtrainsfx/sfx/train/rail/stuk_5.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_6.ogg b/newtrainsfx/sfx/train/rail/stuk_6.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_6.ogg rename to newtrainsfx/sfx/train/rail/stuk_6.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/rail/stuk_7.ogg b/newtrainsfx/sfx/train/rail/stuk_7.ogg similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/rail/stuk_7.ogg rename to newtrainsfx/sfx/train/rail/stuk_7.ogg diff --git a/newtrainsfx_1.2.2/sfx/train/train.lua b/newtrainsfx/sfx/train/train.lua similarity index 100% rename from newtrainsfx_1.2.2/sfx/train/train.lua rename to newtrainsfx/sfx/train/train.lua diff --git a/newtrainsfx_1.2.2/sfx/vehicle_wagon/vehicle-wagon.lua b/newtrainsfx/sfx/vehicle_wagon/vehicle-wagon.lua similarity index 100% rename from newtrainsfx_1.2.2/sfx/vehicle_wagon/vehicle-wagon.lua rename to newtrainsfx/sfx/vehicle_wagon/vehicle-wagon.lua diff --git a/newtrainsfx_1.2.2/thumbnail.png b/newtrainsfx/thumbnail.png similarity index 100% rename from newtrainsfx_1.2.2/thumbnail.png rename to newtrainsfx/thumbnail.png diff --git a/nixie-tubes/README.md b/nixie-tubes/README.md new file mode 100644 index 00000000..6d22fa03 --- /dev/null +++ b/nixie-tubes/README.md @@ -0,0 +1,2 @@ +# nixie-tubes +mod for Factorio adding nixie tubes diff --git a/nixie-tubes/changelog.txt b/nixie-tubes/changelog.txt new file mode 100644 index 00000000..1abe33c0 --- /dev/null +++ b/nixie-tubes/changelog.txt @@ -0,0 +1,52 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2023-12-22 + Changes: + - removed use of funccapture, which is being removed + - Type annotations and minor bugfixes +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2022-06-02 + Changes: + - use funccapture for tips & tricks +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2021-02-03 + Changes: + - Updated locales +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2021-01-29 + Changes: + - Added Tips & Tricks simulations +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2020-11-24 + Changes: + - Update for Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.18.5 +Date: 2020-08-08 + Changes: + - Option for slashed/nonslashed zero (Sprite from Reika) +--------------------------------------------------------------------------------------------------- +Version: 0.18.4 +Date: 2020-08-01 + Changes: + - Updated Sprites thanks to Spectrus1702 + - Correctly initialize unconnected Nixie Tube mode selection when built unconnected +--------------------------------------------------------------------------------------------------- +Version: 0.18.3 +Date: 2020-05-01 + Changes: + - Removed debug requires +--------------------------------------------------------------------------------------------------- +Version: 0.18.2 +Date: 2020-01-31 + Changes: + - Release script skipped a version!? +--------------------------------------------------------------------------------------------------- +Version: 0.18.1 +Date: 2020-01-31 + Changes: + - Fixed Rebuild Nixies re-adding tubes incorrectly \ No newline at end of file diff --git a/nixie-tubes/control.lua b/nixie-tubes/control.lua new file mode 100644 index 00000000..503f39b0 --- /dev/null +++ b/nixie-tubes/control.lua @@ -0,0 +1,650 @@ +do + -- don't load if sim scenario has already loaded this (in another lua state) + local modloader = remote.interfaces["modloader"] + if modloader and modloader[script.mod_name] then + return + end +end + +---@class NixieGlobal +---@field alphas {[integer]:LuaEntity?} +---@field next_alpha? integer +---@field controllers {[integer]:LuaEntity?} +---@field next_controller? integer +---@field nextdigit {[integer]:LuaEntity?} +---@field cache {[integer]:NixieCache?} +global = {} + +---@class NixieCache +---@field control? LuaLampControlBehavior +---@field lastvalue? integer +---@field lastcolor Color[] +---@field sprites integer[] rendering sprite IDs + + +---@param unit_number integer +---@return NixieCache +local function getCache(unit_number) + local cache = global.cache[unit_number] + if not cache then + cache = { + lastcolor = {}, + sprites = {}, + } + global.cache[unit_number] = cache + end + return cache +end + + +local validEntityName = { + ['nixie-tube'] = 1, + ['nixie-tube-alpha'] = 1, + ['nixie-tube-small'] = 2 +} + +local signalCharMap = { + ["signal-0"] = "0", + ["signal-1"] = "1", + ["signal-2"] = "2", + ["signal-3"] = "3", + ["signal-4"] = "4", + ["signal-5"] = "5", + ["signal-6"] = "6", + ["signal-7"] = "7", + ["signal-8"] = "8", + ["signal-9"] = "9", + ["signal-A"] = "A", + ["signal-B"] = "B", + ["signal-C"] = "C", + ["signal-D"] = "D", + ["signal-E"] = "E", + ["signal-F"] = "F", + ["signal-G"] = "G", + ["signal-H"] = "H", + ["signal-I"] = "I", + ["signal-J"] = "J", + ["signal-K"] = "K", + ["signal-L"] = "L", + ["signal-M"] = "M", + ["signal-N"] = "N", + ["signal-O"] = "O", + ["signal-P"] = "P", + ["signal-Q"] = "Q", + ["signal-R"] = "R", + ["signal-S"] = "S", + ["signal-T"] = "T", + ["signal-U"] = "U", + ["signal-V"] = "V", + ["signal-W"] = "W", + ["signal-X"] = "X", + ["signal-Y"] = "Y", + ["signal-Z"] = "Z", + ["signal-negative"] = "negative", + + --extended symbols + ["signal-stop"] = "dot", + ["signal-qmark"]="?", + ["signal-exmark"]="!", + ["signal-at"]="@", + ["signal-sqopen"]="[", + ["signal-sqclose"]="]", + ["signal-curopen"]="{", + ["signal-curclose"]="}", + ["signal-paropen"]="(", + ["signal-parclose"]=")", + ["signal-slash"]="slash", + ["signal-asterisk"]="*", + ["signal-minus"]="-", + ["signal-plus"]="+", + ["signal-percent"]="%", +} + +local function RegisterStrings() + if remote.interfaces['signalstrings'] and remote.interfaces['signalstrings']['register_signal'] then + local syms = { + ["signal-stop"] = ".", + ["signal-qmark"]="?", + ["signal-exmark"]="!", + ["signal-at"]="@", + ["signal-sqopen"]="[", + ["signal-sqclose"]="]", + ["signal-curopen"]="{", + ["signal-curclose"]="}", + ["signal-paropen"]="(", + ["signal-parclose"]=")", + ["signal-slash"]="/", + ["signal-asterisk"]="*", + ["signal-minus"]="-", + ["signal-plus"]="+", + ["signal-percent"]="%", + } + for name,char in pairs(syms) do + remote.call('signalstrings','register_signal',name,char) + end + end +end + +--sets the state(s) and update the sprite for a nixie +local is_simulation = script.level.is_simulation + + +---@param nixie LuaEntity +---@param cache NixieCache +---@param newstates string[] +---@param newcolor? Color +local function setStates(nixie,cache,newstates,newcolor) + for key,new_state in pairs(newstates) do + if not new_state then new_state = "off" end + -- printing floats sometimes hands us a literal '.', needs to be renamed + if new_state == '.' then new_state = "dot" end + + + local obj = cache.sprites[key] + if not (obj and rendering.is_valid(obj)) then + cache.lastcolor[key] = nil + + local num = validEntityName[nixie.name] + ---@type Vector.0 + local position + if num == 1 then -- large tube, one sprite + position = {x=1/32, y=1/32} + else + position = {x=-9/64+((key-1)*20/64), y=3/64} -- sprite offset + end + obj = rendering.draw_sprite{ + sprite = "nixie-tube-sprite-" .. new_state, + target = nixie, + target_offset = position, + surface = nixie.surface, + tint = {r=1.0, g=1.0, b=1.0, a=1.0}, + x_scale = 1/num, + y_scale = 1/num, + render_layer = "object", + } + + cache.sprites[key] = obj + end + + if nixie.energy > 70 or is_simulation then + rendering.set_sprite(obj,"nixie-tube-sprite-" .. new_state) + + local color = newcolor + if not color then color = {r=1.0, g=0.6, b=0.2, a=1.0} end + if new_state == "off" then color={r=1.0, g=1.0, b=1.0, a=1.0} end + + if not (cache.lastcolor[key] and (cache.lastcolor[key].r == color.r) and (cache.lastcolor[key].g == color.g) and (cache.lastcolor[key].b == color.b) and (cache.lastcolor[key].a == color.a)) then + cache.lastcolor[key] = color + rendering.set_color(obj,color) + end + else + if rendering.get_sprite(obj) ~= "nixie-tube-sprite-off" then + rendering.set_sprite(obj,"nixie-tube-sprite-off") + end + rendering.set_color(obj,{r=1.0, g=1.0, b=1.0, a=1.0}) + cache.lastcolor[key] = nil + end + end +end + +---@param behavior LuaLampControlBehavior +---@return SignalID? +local function get_selected_signal(behavior) + if behavior == nil then + return nil + end + + local condition = behavior.circuit_condition + if condition == nil then + return nil + end + + local signal = condition.condition.first_signal + if signal and not condition.fulfilled then + -- use >= MININT32 to ensure always-on + condition.condition.comparator="β‰₯" + condition.condition.constant=-0x80000000 + condition.condition.second_signal=nil + behavior.circuit_condition = condition + end + + return signal +end + +---@param filters {[any]:SignalID?} +---@param entity LuaEntity +---@return {[any]:integer?} +local function get_signals_filtered(filters,entity) + local red = entity.get_circuit_network(defines.wire_type.red) + local green = entity.get_circuit_network(defines.wire_type.green) + ---@type {[any]:integer} + local results = {} + if not red and not green then return results end + for i,f in pairs(filters) do + results[i] = 0 + if f.name then + if red then + results[i] = results[i] + red.get_signal(f) + end + if green then + results[i] = results[i] + green.get_signal(f) + end + end + end + return results +end + +---@param entity LuaEntity +---@param vs? string +---@param color? Color +local function displayValString(entity,vs,color) + local offset = vs and #vs or 0 + while entity do + local nextdigit = global.nextdigit[entity.unit_number] + local cache = getCache(entity.unit_number) + local chcount = #cache.sprites + + if not vs then + setStates(entity,cache,(chcount==1) and {"off"} or {"off","off"}) + elseif offset < chcount then + setStates(entity,cache,{"off",vs:sub(offset,offset)},color) + elseif offset >= chcount then + setStates(entity,cache, + (chcount==1) and + {vs:sub(offset,offset)} or + {vs:sub(offset-1,offset-1),vs:sub(offset,offset)} + ,color) + end + + if nextdigit then + if nextdigit.valid then + if offset>chcount then + offset = offset-chcount + else + vs = nil + end + else + --when a nixie in the middle is removed, it doesn't have the unit_number to it's right to remove itself + global.nextdigit[entity.unit_number] = nil + nextdigit = nil + end + end + ---@diagnostic disable-next-line:cast-local-type + entity = nextdigit + end +end + +---@param i integer +---@return float +local function float_from_int(i) + local sign = bit32.btest(i,0x80000000) and -1 or 1 + local exponent = bit32.rshift(bit32.band(i,0x7F800000),23)-127 + local significand = bit32.band(i,0x007FFFFF) + + if exponent == 128 then + if significand == 0 then + return sign/0 --[[infinity]] + else + return 0/0 --[[nan]] + end + end + + if exponent == -127 then + if significand == 0 then + return sign * 0 --[[zero]] + else + return sign * math.ldexp(significand,-149) --[[denormal numbers]] + end + end + + return sign * math.ldexp(bit32.bor(significand,0x00800000),exponent-23) --[[normal numbers]] +end + +---@param entity LuaEntity +---@return string? +local function getAlphaSignals(entity) + local signals = entity.get_merged_signals() + ---@type string + local ch + + if signals and #signals > 0 then + for _,s in pairs(signals) do + if signalCharMap[s.signal.name] then + if ch then + return "err" + else + ch = signalCharMap[s.signal.name] + end + end + end + end + + return ch +end + +---@type SignalID +local sigFloat = {name="signal-float",type="virtual"} + +---@type SignalID +local sigHex = {name="signal-hex",type="virtual"} + +---@param entity LuaEntity +---@param cache NixieCache +local function onTickController(entity,cache) + local control = cache.control + if not (control and control.valid) then + control = entity.get_or_create_control_behavior() --[[@as LuaLampControlBehavior]] + cache.control = control + end + + + local sigdata = get_signals_filtered( {float = sigFloat, hex = sigHex, v = get_selected_signal(control) }, entity) + + local v = sigdata.v or 0 + + if cache.lastvalue ~= v or cache.control.use_colors then + cache.lastvalue = v + + local float = sigdata.float + float = float and float ~= 0 ---@diagnostic disable-line:cast-local-type + local hex = sigdata.hex + hex = hex and hex ~= 0 ---@diagnostic disable-line:cast-local-type + local format = "%i" + if float and hex then + format = "%A" + v = float_from_int(v) + elseif hex then + format = "%X" + if v < 0 then v = v + 0x100000000 end + elseif float then + format = "%G" + v = float_from_int(v) + end + + displayValString(entity,format:format(v),control.use_colors and control.color or nil) + end + +end + +local always_on = { + condition={ + first_signal={name="signal-anything",type="virtual"}, + comparator="β‰ ", + constant=0, + second_signal=nil + }, + connect_to_logistic_network=false +} + +---@param entity LuaEntity +---@param cache NixieCache +local function onTickAlpha(entity,cache) + local charsig = getAlphaSignals(entity) or "off" + + ---@type Color? + local color + local control = cache.control + if not (control and control.valid) then + control = entity.get_or_create_control_behavior() --[[@as LuaLampControlBehavior]] + cache.control = control + end + if control.use_colors then + control.circuit_condition = always_on + color = control.color + end + + setStates(entity,cache,{charsig},color) +end + + +local function onTick() + for _=1, settings.global["nixie-tube-update-speed-numeric"].value do + ---@type LuaEntity? + local nixie + if global.next_controller and not global.controllers[global.next_controller] then + global.next_controller=nil + end + + global.next_controller,nixie = next(global.controllers,global.next_controller) + + if nixie then + if nixie.valid then + onTickController(nixie,getCache(global.next_controller)) + else + log("cleaning up nixie tube " .. global.next_controller .. " destroyed without events") + global.controllers[global.next_controller] = nil + global.cache[global.next_controller] = nil + global.next_controller = nil + end + end + end + + for _=1, settings.global["nixie-tube-update-speed-alpha"].value do + ---@type LuaEntity? + local nixie + if global.next_alpha and not global.alphas[global.next_alpha] then + global.next_alpha=nil + end + global.next_alpha,nixie = next(global.alphas,global.next_alpha) + + if nixie then + if nixie.valid then + onTickAlpha(nixie, getCache(global.next_alpha)) + else + log("cleaning up nixie tube " .. global.next_alpha .. " destroyed without events") + global.alphas[global.next_alpha] = nil + global.cache[global.next_alpha] = nil + global.next_alpha = nil + end + end + end +end + +---@param entity LuaEntity +local function onPlaceEntity(entity) + local num = validEntityName[entity.name] + if num then + local surf=entity.surface + local cache = getCache(entity.unit_number) + local sprites = cache.sprites + for n=1, num do + --place the /real/ thing(s) at same spot + ---@type Vector + local position + if num == 1 then -- large tube, one sprite + position = {x=1/32, y=1/32} + else + position = {x=-9/64+((n-1)*20/64), y=3/64} -- sprite offset + end + local sprite= rendering.draw_sprite{ + sprite = "nixie-tube-sprite-off", + target = entity, + target_offset = position, + surface = entity.surface, + tint = {r=1.0, g=1.0, b=1.0, a=1.0}, + x_scale = 1/num, + y_scale = 1/num, + render_layer = "object", + } + + sprites[n]=sprite + end + + cache.control = entity.get_or_create_control_behavior() --[[@as LuaLampControlBehavior]] + + if entity.name == "nixie-tube-alpha" then + global.alphas[entity.unit_number] = entity + else + + --enslave guy to left, if there is one + local neighbors=surf.find_entities_filtered{ + position={x=entity.position.x-1,y=entity.position.y}, + name=entity.name} + for _,n in pairs(neighbors) do + if n.valid then + if global.next_controller == n.unit_number then + -- if it's currently the *next* controller, claim that too... + global.next_controller = entity.unit_number + end + + global.controllers[n.unit_number] = nil + global.nextdigit[entity.unit_number] = n + end + end + + --slave self to right, if any + neighbors=surf.find_entities_filtered{ + position={x=entity.position.x+1,y=entity.position.y}, + name=entity.name} + local foundright=false + for _,n in pairs(neighbors) do + if n.valid then + foundright=true + global.nextdigit[n.unit_number]=entity + end + end + if not foundright then + global.controllers[entity.unit_number] = entity + end + end + end +end + +---@param entity LuaEntity +local function onRemoveEntity(entity) + if entity.valid then + if validEntityName[entity.name] then + + --if I was a controller, deregister + if global.next_controller == entity.unit_number then + -- if i was the *next* controller, restart iteration... + global.next_controller=nil + end + global.controllers[entity.unit_number]=nil + + + --if i was an alpha, deregister + if global.next_alpha == entity.unit_number then + -- if i was the *next* alpha, restart iteration... + global.next_controller=nil + end + global.alphas[entity.unit_number]=nil + global.cache[entity.unit_number]=nil + + local nextdigit = global.nextdigit[entity.unit_number] + --if I had a next-digit, register it as a controller + if nextdigit and nextdigit.valid then + global.controllers[nextdigit.unit_number] = nextdigit + displayValString(nextdigit) + global.nextdigit[entity.unit_number] = nil + end + --if i was a next-digit, unlink + for k,v in pairs(global.nextdigit) do + if v == entity then + global.nextdigit[k] = nil + break + end + end + + end + end +end + +local function RegisterPicker() + if remote.interfaces["picker"] and remote.interfaces["picker"]["dolly_moved_entity_id"] then + script.on_event(remote.call("picker", "dolly_moved_entity_id"), function(event) + onRemoveEntity(event.moved_entity) + onPlaceEntity(event.moved_entity) + end) + end +end + +script.on_init(function() + global.alphas = {} + global.controllers = {} + global.cache = {} + global.nextdigit = {} + + RegisterStrings() + RegisterPicker() +end) + +script.on_load(function() + RegisterStrings() + RegisterPicker() +end) + +local function RebuildNixies() + -- clear the tables + global = { + alphas = {}, + controllers = {}, + cache = {}, + nextdigit = {}, + } + + -- wipe out any lingering sprites i've just deleted the references to... + rendering.clear("nixie-tubes") + + -- and re-index the world + for _,surf in pairs(game.surfaces) do + -- re-index all nixies. non-nixie lamps will be ignored by onPlaceEntity + for _,lamp in pairs(surf.find_entities_filtered{type="lamp"}) do + onPlaceEntity(lamp) + end + end +end + +remote.add_interface("nixie-tubes",{ + RebuildNixies = RebuildNixies +}) + +commands.add_command("RebuildNixies","Reset all Nixie Tubes to clear display glitches.", RebuildNixies) + +script.on_configuration_changed(function(data) + if data.mod_changes and data.mod_changes["nixie-tubes"] then + RebuildNixies() + end +end) + +local filters = { +} +local names = {} +for name in pairs(validEntityName) do + filters[#filters+1] = {filter="name",name=name} + filters[#filters+1] = {filter="ghost_name",name=name} + names[#names+1] = name +end + +script.on_event(defines.events.on_built_entity, function(event) onPlaceEntity(event.created_entity) end, filters) +script.on_event(defines.events.on_robot_built_entity, function(event) onPlaceEntity(event.created_entity) end, filters) +script.on_event(defines.events.script_raised_built, function(event) onPlaceEntity(event.entity) end) +script.on_event(defines.events.script_raised_revive, function(event) onPlaceEntity(event.entity) end) +script.on_event(defines.events.on_entity_cloned, function(event) onPlaceEntity(event.destination) end) + +script.on_event(defines.events.on_pre_player_mined_item, function(event) onRemoveEntity(event.entity) end, filters) +script.on_event(defines.events.on_robot_pre_mined, function(event) onRemoveEntity(event.entity) end, filters) +script.on_event(defines.events.on_entity_died, function(event) onRemoveEntity(event.entity) end, filters) +script.on_event(defines.events.script_raised_destroy, function(event) onRemoveEntity(event.entity) end) +script.on_event(defines.events.on_pre_chunk_deleted, function(event) + for _,chunk in pairs(event.positions) do + local x = chunk.x + local y = chunk.y + local area = {{x*32,y*32},{31+x*32,31+y*32}} + for _,ent in pairs(game.get_surface(event.surface_index).find_entities_filtered{name = names,area = area}) do + onRemoveEntity(ent) + end + end +end) +script.on_event(defines.events.on_pre_surface_cleared,function (event) + for _,ent in pairs(game.get_surface(event.surface_index).find_entities_filtered{name = names}) do + onRemoveEntity(ent) + end +end) +script.on_event(defines.events.on_pre_surface_deleted,function (event) + for _,ent in pairs(game.get_surface(event.surface_index).find_entities_filtered{name = names}) do + onRemoveEntity(ent) + end +end) + +script.on_event(defines.events.on_tick, onTick) diff --git a/nixie-tubes/data-final-fixes.lua b/nixie-tubes/data-final-fixes.lua new file mode 100644 index 00000000..67571a90 --- /dev/null +++ b/nixie-tubes/data-final-fixes.lua @@ -0,0 +1,4 @@ +-- Copy any colors anyone changed from the base lamp +data.raw["lamp"]["nixie-tube"].signal_to_color_mapping = data.raw["lamp"]["small-lamp"].signal_to_color_mapping +data.raw["lamp"]["nixie-tube-alpha"].signal_to_color_mapping = data.raw["lamp"]["small-lamp"].signal_to_color_mapping +data.raw["lamp"]["nixie-tube-small"].signal_to_color_mapping = data.raw["lamp"]["small-lamp"].signal_to_color_mapping diff --git a/nixie-tubes/data.lua b/nixie-tubes/data.lua new file mode 100644 index 00000000..97d177ce --- /dev/null +++ b/nixie-tubes/data.lua @@ -0,0 +1,4 @@ +require("prototypes.nixie") +require("prototypes.technology") +require("prototypes.signals") +require("prototypes.simulations") diff --git a/nixie-tubes/graphics/empty.png b/nixie-tubes/graphics/empty.png new file mode 100644 index 00000000..38b0635b Binary files /dev/null and b/nixie-tubes/graphics/empty.png differ diff --git a/nixie-tubes/graphics/nixie-alpha-base-icon.png b/nixie-tubes/graphics/nixie-alpha-base-icon.png new file mode 100644 index 00000000..27f93715 Binary files /dev/null and b/nixie-tubes/graphics/nixie-alpha-base-icon.png differ diff --git a/nixie-tubes/graphics/nixie-base-icon.png b/nixie-tubes/graphics/nixie-base-icon.png new file mode 100644 index 00000000..98ad97bf Binary files /dev/null and b/nixie-tubes/graphics/nixie-base-icon.png differ diff --git a/nixie-tubes/graphics/nixie-base.png b/nixie-tubes/graphics/nixie-base.png new file mode 100644 index 00000000..bb76af92 Binary files /dev/null and b/nixie-tubes/graphics/nixie-base.png differ diff --git a/nixie-tubes/graphics/nixie-chars-mono.pdn b/nixie-tubes/graphics/nixie-chars-mono.pdn new file mode 100644 index 00000000..017af103 Binary files /dev/null and b/nixie-tubes/graphics/nixie-chars-mono.pdn differ diff --git a/nixie-tubes/graphics/nixie-chars-mono.png b/nixie-tubes/graphics/nixie-chars-mono.png new file mode 100644 index 00000000..7d988a30 Binary files /dev/null and b/nixie-tubes/graphics/nixie-chars-mono.png differ diff --git a/nixie-tubes/graphics/nixie-small-base-icon.png b/nixie-tubes/graphics/nixie-small-base-icon.png new file mode 100644 index 00000000..a9db875e Binary files /dev/null and b/nixie-tubes/graphics/nixie-small-base-icon.png differ diff --git a/nixie-tubes/graphics/nixie-small-base.png b/nixie-tubes/graphics/nixie-small-base.png new file mode 100644 index 00000000..756fb484 Binary files /dev/null and b/nixie-tubes/graphics/nixie-small-base.png differ diff --git a/nixie-tubes/graphics/nixie-technology-icon.pdn b/nixie-tubes/graphics/nixie-technology-icon.pdn new file mode 100644 index 00000000..c3358803 Binary files /dev/null and b/nixie-tubes/graphics/nixie-technology-icon.pdn differ diff --git a/nixie-tubes/graphics/nixie-technology-icon.png b/nixie-tubes/graphics/nixie-technology-icon.png new file mode 100644 index 00000000..4e46912f Binary files /dev/null and b/nixie-tubes/graphics/nixie-technology-icon.png differ diff --git a/nixie-tubes/graphics/nixie0.pdn b/nixie-tubes/graphics/nixie0.pdn new file mode 100644 index 00000000..225a44bd Binary files /dev/null and b/nixie-tubes/graphics/nixie0.pdn differ diff --git a/nixie-tubes/graphics/signal/signal_asterisk.png b/nixie-tubes/graphics/signal/signal_asterisk.png new file mode 100644 index 00000000..2f36549a Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_asterisk.png differ diff --git a/nixie-tubes/graphics/signal/signal_at.png b/nixie-tubes/graphics/signal/signal_at.png new file mode 100644 index 00000000..3939921a Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_at.png differ diff --git a/nixie-tubes/graphics/signal/signal_curclose.png b/nixie-tubes/graphics/signal/signal_curclose.png new file mode 100644 index 00000000..1e61a447 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_curclose.png differ diff --git a/nixie-tubes/graphics/signal/signal_curopen.png b/nixie-tubes/graphics/signal/signal_curopen.png new file mode 100644 index 00000000..4e290bf1 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_curopen.png differ diff --git a/nixie-tubes/graphics/signal/signal_exmark.png b/nixie-tubes/graphics/signal/signal_exmark.png new file mode 100644 index 00000000..977001a5 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_exmark.png differ diff --git a/nixie-tubes/graphics/signal/signal_float.png b/nixie-tubes/graphics/signal/signal_float.png new file mode 100644 index 00000000..17d6a51a Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_float.png differ diff --git a/nixie-tubes/graphics/signal/signal_hex.png b/nixie-tubes/graphics/signal/signal_hex.png new file mode 100644 index 00000000..6eab565e Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_hex.png differ diff --git a/nixie-tubes/graphics/signal/signal_icons.xcf b/nixie-tubes/graphics/signal/signal_icons.xcf new file mode 100644 index 00000000..bb26d93f Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_icons.xcf differ diff --git a/nixie-tubes/graphics/signal/signal_minus.png b/nixie-tubes/graphics/signal/signal_minus.png new file mode 100644 index 00000000..0e200f84 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_minus.png differ diff --git a/nixie-tubes/graphics/signal/signal_parclose.png b/nixie-tubes/graphics/signal/signal_parclose.png new file mode 100644 index 00000000..aa2bbcdf Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_parclose.png differ diff --git a/nixie-tubes/graphics/signal/signal_paropen.png b/nixie-tubes/graphics/signal/signal_paropen.png new file mode 100644 index 00000000..265dd62a Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_paropen.png differ diff --git a/nixie-tubes/graphics/signal/signal_percent.png b/nixie-tubes/graphics/signal/signal_percent.png new file mode 100644 index 00000000..8dd1a406 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_percent.png differ diff --git a/nixie-tubes/graphics/signal/signal_plus.png b/nixie-tubes/graphics/signal/signal_plus.png new file mode 100644 index 00000000..8525d989 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_plus.png differ diff --git a/nixie-tubes/graphics/signal/signal_qmark.png b/nixie-tubes/graphics/signal/signal_qmark.png new file mode 100644 index 00000000..799a1eb3 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_qmark.png differ diff --git a/nixie-tubes/graphics/signal/signal_slash.png b/nixie-tubes/graphics/signal/signal_slash.png new file mode 100644 index 00000000..a25eb449 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_slash.png differ diff --git a/nixie-tubes/graphics/signal/signal_sqclose.png b/nixie-tubes/graphics/signal/signal_sqclose.png new file mode 100644 index 00000000..83303788 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_sqclose.png differ diff --git a/nixie-tubes/graphics/signal/signal_sqopen.png b/nixie-tubes/graphics/signal/signal_sqopen.png new file mode 100644 index 00000000..a01dbec3 Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_sqopen.png differ diff --git a/nixie-tubes/graphics/signal/signal_stop.png b/nixie-tubes/graphics/signal/signal_stop.png new file mode 100644 index 00000000..467df96e Binary files /dev/null and b/nixie-tubes/graphics/signal/signal_stop.png differ diff --git a/nixie-tubes/info.json b/nixie-tubes/info.json new file mode 100644 index 00000000..90f0eb28 --- /dev/null +++ b/nixie-tubes/info.json @@ -0,0 +1,12 @@ +{ + "name": "nixie-tubes", + "version": "1.1.4", + "factorio_version": "1.1", + "title": "Nixie Tubes", + "author": "GopherAtl, justarandomgeek", + "description": "Adds nixie tubes, for displaying values from a connected circuit network.", + "dependencies": ["base", "simhelper", "?signalstrings", "?PickerExtended"], + "package":{ + "ignore":[ "*.pdn", "*.xcf" ] + } +} diff --git a/nixie-tubes/license.txt b/nixie-tubes/license.txt new file mode 100644 index 00000000..a9e66204 --- /dev/null +++ b/nixie-tubes/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2017 Clarence "Sparr" Risher +Copyright (c) 2015 GopherAtl + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/nixie-tubes/locale/af/af.cfg b/nixie-tubes/locale/af/af.cfg new file mode 100644 index 00000000..f55ff1d1 --- /dev/null +++ b/nixie-tubes/locale/af/af.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tub Nixie + +[item-name] +nixie-tube=Tub Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/ca/ca.cfg b/nixie-tubes/locale/ca/ca.cfg new file mode 100644 index 00000000..f55ff1d1 --- /dev/null +++ b/nixie-tubes/locale/ca/ca.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tub Nixie + +[item-name] +nixie-tube=Tub Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/da/da.cfg b/nixie-tubes/locale/da/da.cfg new file mode 100644 index 00000000..7c2ec163 --- /dev/null +++ b/nixie-tubes/locale/da/da.cfg @@ -0,0 +1,5 @@ +ο»Ώ[entity-name] +nixie-tube=Nixie-rΓΈr + +[item-name] +nixie-tube=Nixie-rΓΈr \ No newline at end of file diff --git a/nixie-tubes/locale/de/de.cfg b/nixie-tubes/locale/de/de.cfg new file mode 100644 index 00000000..afe18b13 --- /dev/null +++ b/nixie-tubes/locale/de/de.cfg @@ -0,0 +1,52 @@ +[entity-name] +nixie-tube=Nixie-RΓΆhre +nixie-tube-alpha=Alphanumerische Nixie-RΓΆhre +nixie-tube-small=Kleine Nixie-RΓΆhre + +[item-name] +nixie-tube=Nixie-RΓΆhre +nixie-tube-alpha=Alphanumerische Nixie-RΓΆhre +nixie-tube-small=Kleine Nixie-RΓΆhre + +[virtual-signal-name] +signal-stop=Signal . +signal-qmark=Signal ? +signal-exmark=Signal ! +signal-at=Signal @ +signal-sqopen=Signal [ +signal-sqclose=Signal ] +signal-curopen=Signal { +signal-curclose=Signal } +signal-paropen=Signal ( +signal-parclose=Signal ) +signal-slash=Signal / +signal-asterisk=Signal * +signal-minus=Signal - +signal-plus=Signal + +signal-percent=Signal % +signal-float=Gleitkomma-Signal +signal-hex=Hexadezimal-Signal + +[technology-name] +cathodes=Kathoden + +[mod-setting-name] +nixie-tube-slashed-zero=Durchgestrichene Null +nixie-tube-update-speed-alpha=Updatefrequenz der alphanumerischen RΓΆhren +nixie-tube-update-speed-numeric=Updatefrequenz der numerischen RΓΆhren + +[mod-setting-description] +nixie-tube-update-speed-alpha=Bestimmt die Anzahl an alphanumerischen Nixie-RΓΆhren, die pro Tick aktualisiert werden. HΓΆhere Zahl = schnellere Aktualisierung. +nixie-tube-update-speed-numeric=Bestimmt die Anzahl an numerischen Nixie-RΓΆhren-Gruppen, die pro Tick aktualisiert werden. HΓΆhere Zahl = schnellere Aktualisierung. + +[tips-and-tricks-item-name] +nixie-tubes=Nixie-RΓΆhren +nixie-tubes-alpha=Alphanumerische Nixie-RΓΆhren +nixie-tubes-color=Farbsignale fΓΌr Nixie-RΓΆhren +nixie-tubes-formatting=Formattierungs-Signale fΓΌr Nixie-RΓΆhren + +[tips-and-tricks-item-description] +nixie-tubes=[entity=nixie-tube] und [entity=nixie-tube-small] kΓΆnnen benutzt werden, um numerische Signale des Schaltungsnetzes anzuzeigen. Nixie-RΓΆhren verbinden sich automatische mit benachbarten RΓΆhren um mehrere Ziffern einer Zahl anzeigen zu kΓΆnnen. Verbinde einfach die rechte Ziffer mit dem Schaltungsnetz und wΓ€hle ein Signal aus. +nixie-tubes-alpha=[entity=nixie-tube-alpha] kΓΆnnen benutzt werden um Text anzuzeigen. Jede RΓΆhre kann an nur ein einziges Zeichen-Signal angebunden sein. Falls mehrere Signale angebunden sind wird ein Fehler-Symbol angezeigt. +nixie-tubes-color=Alle RΓΆhren kΓΆnnen zusΓ€tzlich an ein Farb-Signal angebunden werden, wenn die entsprechende Einstellung aktiv ist. Die Farbe wird mit der gleichen Prioritisierung wie [entity=small-lamp] appliziert. +nixie-tubes-formatting=[entity=nixie-tube] und [entity=nixie-tube-small] kΓΆnnen zusΓ€tzlich an ein Formattierungs-Signal angebunden werden, Γ€hnlich dem Farb-Signal. [virtual-signal=signal-hex] zeigt den Zahlenwert im Hexadezimalsystem an. [virtual-signal=signal-float] zeigt ihn als Gleitkommazahl an. Beide Signale kΓΆnnen zusammen angebunden werden, um hexadezimale Gleitkommazahlen anzuzeigen. Die oben gezeigten RΓΆhrengruppen zeigen jeweils den gleichen Zahlenwert in den vier mΓΆglichen Kombinationen dieser beiden Signale an. \ No newline at end of file diff --git a/nixie-tubes/locale/en/en.cfg b/nixie-tubes/locale/en/en.cfg new file mode 100644 index 00000000..d8018ac2 --- /dev/null +++ b/nixie-tubes/locale/en/en.cfg @@ -0,0 +1,52 @@ +[entity-name] +nixie-tube=Nixie Tube +nixie-tube-alpha=Alpha-Nixie Tube +nixie-tube-small=Small Nixie Tubes + +[item-name] +nixie-tube=Nixie Tube +nixie-tube-alpha=Alpha-Nixie Tube +nixie-tube-small=Small Nixie Tubes + +[virtual-signal-name] +signal-stop=Signal . +signal-qmark=Signal ? +signal-exmark=Signal ! +signal-at=Signal @ +signal-sqopen=Signal [ +signal-sqclose=Signal ] +signal-curopen=Signal { +signal-curclose=Signal } +signal-paropen=Signal ( +signal-parclose=Signal ) +signal-slash=Signal / +signal-asterisk=Signal * +signal-minus=Signal - +signal-plus=Signal + +signal-percent=Signal % +signal-float=Signal Float +signal-hex=Signal Hex + +[technology-name] +cathodes=Cathodes + +[mod-setting-name] +nixie-tube-slashed-zero=Slashed Zero +nixie-tube-update-speed-alpha=Alpha Nixie update speed +nixie-tube-update-speed-numeric=Numeric Nixie update speed + +[mod-setting-description] +nixie-tube-update-speed-alpha=Sets the number of Alpha Nixies updated per tick. Higher = faster updates +nixie-tube-update-speed-numeric=Sets the number of Numeric Nixie groups updated per tick. Higher = faster updates + +[tips-and-tricks-item-name] +nixie-tubes=Nixie Tubes +nixie-tubes-alpha=Alpha Nixie Tubes +nixie-tubes-color=Nixie Tubes Color Signals +nixie-tubes-formatting=Nixie Tubes Formatting Signals + +[tips-and-tricks-item-description] +nixie-tubes=[entity=nixie-tube] and [entity=nixie-tube-small] can be used to display numeric values from the circuit network. Nixie Tubes automatically join with adjacent units to the left to display additional digits. Simply connect the rightmost digit and select a signal. +nixie-tubes-alpha=[entity=nixie-tube-alpha] can be used to build text displays. Each unit must recieve only one character signal, and will display the corresponding symbol. If multiple signals are received, an error symbol will be displayed. +nixie-tubes-color=All Nixie Tube types support receiving a color signal alongside the numeric value or character signal, when "use colors" is selected. The color will be applied with the same priority as on [entity=small-lamp]. +nixie-tubes-formatting=[entity=nixie-tube] and [entity=nixie-tube-small] support receiving a formatting signal alongside the numeric value signal, similar to how colors are applied. [virtual-signal=signal-hex] can be used to display the value in hexadecimal. [virtual-signal=signal-float] can be used to display the value as a floating point number. Both signals can be applied to get "hex float" representation. These four sets are displaying the same value signal with the four combinations of formatting signals. \ No newline at end of file diff --git a/nixie-tubes/locale/es/es.cfg b/nixie-tubes/locale/es/es.cfg new file mode 100644 index 00000000..41f913b9 --- /dev/null +++ b/nixie-tubes/locale/es/es.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tubo Nixie + +[item-name] +nixie-tube=Tubo Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/fi/fi.cfg b/nixie-tubes/locale/fi/fi.cfg new file mode 100644 index 00000000..34a2f98e --- /dev/null +++ b/nixie-tubes/locale/fi/fi.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Nixie-putken + +[item-name] +nixie-tube=Nixie-putken \ No newline at end of file diff --git a/nixie-tubes/locale/fr/fr.cfg b/nixie-tubes/locale/fr/fr.cfg new file mode 100644 index 00000000..7f7155aa --- /dev/null +++ b/nixie-tubes/locale/fr/fr.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tube Nixie + +[item-name] +nixie-tube=Tube Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/hu/hu.cfg b/nixie-tubes/locale/hu/hu.cfg new file mode 100644 index 00000000..a6e68446 --- /dev/null +++ b/nixie-tubes/locale/hu/hu.cfg @@ -0,0 +1,5 @@ +ο»Ώ[entity-name] +nixie-tube=Nixie-csΕ‘ + +[item-name] +nixie-tube=Nixie-csΕ‘ diff --git a/nixie-tubes/locale/it/it.cfg b/nixie-tubes/locale/it/it.cfg new file mode 100644 index 00000000..41f913b9 --- /dev/null +++ b/nixie-tubes/locale/it/it.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tubo Nixie + +[item-name] +nixie-tube=Tubo Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/ja/ja.cfg b/nixie-tubes/locale/ja/ja.cfg new file mode 100644 index 00000000..4569f427 --- /dev/null +++ b/nixie-tubes/locale/ja/ja.cfg @@ -0,0 +1,52 @@ +[entity-name] +nixie-tube=γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tube-alpha=γ‚’γƒ«γƒ•γ‚‘γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tube-small=ε°εž‹γƒ‹γ‚­γ‚·γƒΌη‘ + +[item-name] +nixie-tube=γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tube-alpha=γ‚’γƒ«γƒ•γ‚‘γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tube-small=ε°εž‹γƒ‹γ‚­γ‚·γƒΌη‘ + +[virtual-signal-name] +signal-stop=γ‚·γ‚°γƒŠγƒ« . +signal-qmark=γ‚·γ‚°γƒŠγƒ« ? +signal-exmark=γ‚·γ‚°γƒŠγƒ« ! +signal-at=γ‚·γ‚°γƒŠγƒ« @ +signal-sqopen=γ‚·γ‚°γƒŠγƒ« [ +signal-sqclose=γ‚·γ‚°γƒŠγƒ« ] +signal-curopen=γ‚·γ‚°γƒŠγƒ« { +signal-curclose=γ‚·γ‚°γƒŠγƒ« } +signal-paropen=γ‚·γ‚°γƒŠγƒ« ( +signal-parclose=γ‚·γ‚°γƒŠγƒ« ) +signal-slash=γ‚·γ‚°γƒŠγƒ« / +signal-asterisk=γ‚·γ‚°γƒŠγƒ« * +signal-minus=γ‚·γ‚°γƒŠγƒ« - +signal-plus=γ‚·γ‚°γƒŠγƒ« + +signal-percent=γ‚·γ‚°γƒŠγƒ« % +signal-float=γ‚·γ‚°γƒŠγƒ« Float +signal-hex=γ‚·γ‚°γƒŠγƒ« Hex + +[technology-name] +cathodes=ι™°ζ₯΅ + +[mod-setting-name] +nixie-tube-slashed-zero=ζ–œη·šδ»˜γγ‚Όγƒ­ +nixie-tube-update-speed-alpha=をルフゑニキシーη‘γζ›΄ζ–°ι€ŸεΊ¦ +nixie-tube-update-speed-numeric=数字ニキシーη‘γζ›΄ζ–°ι€ŸεΊ¦ + +[mod-setting-description] +nixie-tube-update-speed-alpha=をルフゑニキシーη‘γγƒγƒƒγ‚―単位γζ›΄ζ–°ε›žζ•°γ‚’θ¨­εšγ—ます。倧きい数字 = ι«˜ι€Ÿγͺζ›΄ζ–° +nixie-tube-update-speed-numeric=数字ニキシーη‘グループγγƒγƒƒγ‚―単位γζ›΄ζ–°ε›žζ•°γ‚’θ¨­εšγ—ます。倧きい数字 = ι«˜ι€Ÿγͺζ›΄ζ–° + +[tips-and-tricks-item-name] +nixie-tubes=γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tubes-alpha=γ‚’γƒ«γƒ•γ‚‘γƒ‹γ‚­γ‚·γƒΌη‘ +nixie-tubes-color=ニキシーη‘γθ‰²δΏ‘号 +nixie-tubes-formatting=ニキシーη‘γγƒ•γ‚©γƒΌγƒžγƒƒγƒˆδΏ‘号 + +[tips-and-tricks-item-description] +nixie-tubes=[entity=nixie-tube] と [entity=nixie-tube-small] γ―ε›žθ·―γƒγƒƒγƒˆγƒ―γƒΌγ‚―γ‹γ‚‰γζ•°ε€€γ‚’葨瀺できます。ニキシーη‘は、左側γιš£ζŽ₯γ™γ‚‹γƒ¦γƒ‹γƒƒγƒˆγ¨θ‡ͺε‹•ηš„γ«η΅εˆγ—γ¦γ€θΏ½εŠ γζ‘γ‚’葨瀺します。右端γζ‘γ‚’ζŽ₯ηΆšγ—γ¦δΏ‘ε·γ‚’ιΈζŠžγ™γ‚‹γ γ‘γ§γ™γ€‚ +nixie-tubes-alpha=[entity=nixie-tube-alpha] γ‚’δ½Ώη”¨γ—γ¦γƒ†γ‚­γ‚Ήγƒˆγƒ‡γ‚£γ‚Ήγƒ—γƒ¬γ‚€γ‚’δ½œζˆγ§γγΎγ™γ€‚ε„γƒ¦γƒ‹γƒƒγƒˆγ―1぀γζ–‡ε­—δΏ‘号γγΏγ‚’ε—δΏ‘γ™γ‚‹εΏ…θ¦γŒγ‚γ‚Šγ€ε―ΎεΏœγ™γ‚‹θ¨˜ε·γ‚’θ‘¨η€Ίγ—γΎγ™γ€‚θ€‡ζ•°γδΏ‘ε·γ‚’ε—δΏ‘γ—γŸε ΄εˆγ€γ‚¨γƒ©γƒΌθ¨˜ε·γŒθ‘¨η€Ίγ•γ‚ŒγΎγ™γ€‚ +nixie-tubes-color=γ€Œθ‰²γ‚’δ½Ώη”¨γ€γŒιΈζŠžγ•γ‚Œγ¦γ„γ‚‹ε ΄εˆγ€ε…¨γ¦γγƒ‹γ‚­γ‚·γƒΌη‘γ―ζ•°ε€€γ‚„ζ–‡ε­—δΏ‘ε·γ¨δΈ€η·’γ«θ‰²δΏ‘ε·γ‚’ε—δΏ‘γ™γ‚‹γ“γ¨γ‚’γ‚΅γƒγƒΌγƒˆγ—γΎγ™γ€‚θ‰²γ― [entity=small-lamp] と同じε„ͺε…ˆεΊ¦γ§ι©η”¨γ•γ‚ŒγΎγ™γ€‚ +nixie-tubes-formatting=[entity=nixie-tube] と [entity=nixie-tube-small] は、色γι©η”¨ζ–Ήζ³•γ¨εŒγ˜γ‚ˆγ†γ«ζ•°ε€€δΏ‘ε·γ‚’γƒ•γ‚©γƒΌγƒžγƒƒγƒˆδΏ‘ε·γ¨δΈ€η·’γ«ε—δΏ‘γ™γ‚‹γ“γ¨γ‚’γ‚΅γƒγƒΌγƒˆγ—γΎγ™γ€‚[virtual-signal=signal-hex] を使用して、倀を16進数で葨瀺できます。[virtual-signal=signal-float] を使用して、倀をζ΅ε‹•小数点数として葨瀺できます。丑方γδΏ‘ε·γ‚’ι©η”¨γ—γ¦γ€Œζ΅ε‹•小数点数γ16ι€²γ€θ‘¨ηΎγŒγ§γγΎγ™γ€‚γ“γ‚Œγ‚‰γ4぀γγ‚»γƒƒγƒˆγ―γ€γƒ•γ‚©γƒΌγƒžγƒƒγƒˆδΏ‘ε·γ4぀γη΅„γΏεˆγ‚γ›γ§εŒγ˜ε€€γδΏ‘号を葨瀺します。 diff --git a/nixie-tubes/locale/nl/nl.cfg b/nixie-tubes/locale/nl/nl.cfg new file mode 100644 index 00000000..afc75e94 --- /dev/null +++ b/nixie-tubes/locale/nl/nl.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Nixiebuisje + +[item-name] +nixie-tube=Nixiebuisje \ No newline at end of file diff --git a/nixie-tubes/locale/pt/pt.cfg b/nixie-tubes/locale/pt/pt.cfg new file mode 100644 index 00000000..f41742b3 --- /dev/null +++ b/nixie-tubes/locale/pt/pt.cfg @@ -0,0 +1,5 @@ +[entity-name] +nixie-tube=Tubo de Nixie + +[item-name] +nixie-tube=Tubo de Nixie \ No newline at end of file diff --git a/nixie-tubes/locale/ru/locale.cfg b/nixie-tubes/locale/ru/locale.cfg new file mode 100644 index 00000000..0c222f77 --- /dev/null +++ b/nixie-tubes/locale/ru/locale.cfg @@ -0,0 +1,39 @@ +[entity-name] +nixie-tube=Числовой Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ +nixie-tube-alpha=Π‘ΡƒΠΊΠ²Π΅Π½Π½Ρ‹ΠΉ Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ +nixie-tube-small=МалСнький Числовой Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ + +[item-name] +nixie-tube=Числовой Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ +nixie-tube-alpha=Π‘ΡƒΠΊΠ²Π΅Π½Π½Ρ‹ΠΉ Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ +nixie-tube-small=МалСнький Числовой Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ + +[virtual-signal-name] +signal-stop=Π‘ΠΈΠ³Π½Π°Π» . +signal-qmark=Π‘ΠΈΠ³Π½Π°Π» ? +signal-exmark=Π‘ΠΈΠ³Π½Π°Π» ! +signal-at=Π‘ΠΈΠ³Π½Π°Π» @ +signal-sqopen=Π‘ΠΈΠ³Π½Π°Π» [ +signal-sqclose=Π‘ΠΈΠ³Π½Π°Π» ] +signal-curopen=Π‘ΠΈΠ³Π½Π°Π» { +signal-curclose=Π‘ΠΈΠ³Π½Π°Π» } +signal-paropen=Π‘ΠΈΠ³Π½Π°Π» ( +signal-parclose=Π‘ΠΈΠ³Π½Π°Π» ) +signal-slash=Π‘ΠΈΠ³Π½Π°Π» / +signal-asterisk=Π‘ΠΈΠ³Π½Π°Π» * +signal-minus=Π‘ΠΈΠ³Π½Π°Π» - +signal-plus=Π‘ΠΈΠ³Π½Π°Π» + +signal-percent=Π‘ΠΈΠ³Π½Π°Π» % +signal-float=Π‘ΠΈΠ³Π½Π°Π»(с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ) +signal-hex=Π‘ΠΈΠ³Π½Π°Π»(ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ) + +[technology-name] +cathodes=ΠšΠ°Ρ‚ΠΎΠ΄Π½Ρ‹Π΅ Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ + +[mod-setting-name] +nixie-tube-update-speed-alpha=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π‘ΡƒΠΊΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° +nixie-tube-update-speed-numeric=Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Числового Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° + +[mod-setting-description] +nixie-tube-update-speed-alpha=НазначаСт количСство ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π·Π° Ρ‚ΠΈΠΊ для Π‘ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Ρ… Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π±ΠΎΠ»Π΅Π΅ быстро ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ +nixie-tube-update-speed-numeric=НазначаСт количСство ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π·Π° Ρ‚ΠΈΠΊ для всСх Π³Ρ€ΡƒΠΏΠΏ Числовых Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ². Π’Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π±ΠΎΠ»Π΅Π΅ быстро ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ diff --git a/nixie-tubes/locale/zh/zh.cfg b/nixie-tubes/locale/zh/zh.cfg new file mode 100644 index 00000000..e3902ec6 --- /dev/null +++ b/nixie-tubes/locale/zh/zh.cfg @@ -0,0 +1,41 @@ +[mod-name] +nixie-tubes=[justarandomgeek]ζ•°η η‘ + +[entity-name] +nixie-tube=ζ•°η η‘ +nixie-tube-alpha=Ξ±ζ•°η η‘ +nixie-tube-small=ε°εž‹ζ•°η η‘ + +[item-name] +nixie-tube=ζ•°η η‘ +nixie-tube-alpha=Ξ±ζ•°η η‘ +nixie-tube-small=ε°εž‹ζ•°η η‘ + +[virtual-signal-name] +signal-stop=俑号 . +signal-qmark=俑号 ? +signal-exmark=俑号 ! +signal-at=俑号 @ +signal-sqopen=俑号 [ +signal-sqclose=俑号 ] +signal-curopen=俑号 { +signal-curclose=俑号 } +signal-paropen=俑号 ( +signal-parclose=俑号 ) +signal-slash=俑号 / +signal-asterisk=俑号 * +signal-minus=俑号 - +signal-plus=俑号 + +signal-float=俑号 Float +signal-hex=俑号 Hex + +[technology-name] +cathodes=ζ•°η η‘ + +[mod-setting-name] +nixie-tube-update-speed-alpha=α数码η‘ζ›΄ζ–°ηš„ι€ŸεΊ¦ +nixie-tube-update-speed-numeric=数字数码η‘ζ›΄ζ–°ηš„ι€ŸεΊ¦ + +[mod-setting-description] +nixie-tube-update-speed-alpha=Sets the number of Alpha Nixies updated per tick. ζ•°ε€ΌθΆŠι«˜ζ›΄ζ–°ηš„ι€ŸεΊ¦θΆŠεΏ« +nixie-tube-update-speed-numeric=Sets the number of Numeric Nixie groups updated per tick. ζ•°ε€ΌθΆŠι«˜ζ›΄ζ–°ηš„ι€ŸεΊ¦θΆŠεΏ« diff --git a/nixie-tubes/migrations/alphanixie.lua b/nixie-tubes/migrations/alphanixie.lua new file mode 100644 index 00000000..08b9195c --- /dev/null +++ b/nixie-tubes/migrations/alphanixie.lua @@ -0,0 +1,4 @@ +for _,f in pairs(game.forces) do + f.reset_recipes() + f.recipes['nixie-tube-alpha'].enabled = f.technologies['cathodes'].researched +end \ No newline at end of file diff --git a/nixie-tubes/migrations/removecolorman.lua b/nixie-tubes/migrations/removecolorman.lua new file mode 100644 index 00000000..74e3a8bf --- /dev/null +++ b/nixie-tubes/migrations/removecolorman.lua @@ -0,0 +1,3 @@ +for _,surf in pairs(game.surfaces) do + for _,ent in pairs(surf.find_entities_filtered{name='nixie-colorman'}) do ent.destroy() end +end diff --git a/nixie-tubes/prototypes/nixie.lua b/nixie-tubes/prototypes/nixie.lua new file mode 100644 index 00000000..5c0b18a3 --- /dev/null +++ b/nixie-tubes/prototypes/nixie.lua @@ -0,0 +1,302 @@ +circuit_connector_definitions["nixie"] = circuit_connector_definitions.create +( + universal_connector_template, + { + --{ variation = 26, main_offset = util.by_pixel(4.5, 7.5), shadow_offset = util.by_pixel(3.5, 7.5), show_shadow = true }, + { variation = 26, main_offset = util.by_pixel(2.5, 18.0), shadow_offset = util.by_pixel(2.0, 18.0), show_shadow = true }, + } +) + +circuit_connector_definitions["nixie-small"] = circuit_connector_definitions.create +( + universal_connector_template, + { + { variation = 26, main_offset = util.by_pixel(2.5, 10.0), shadow_offset = util.by_pixel(2.0, 10.0), show_shadow = true }, + } +) + + +data:extend{ + + -- original 2x1 tile one-digit nixie tube + { + type = "recipe", + name = "nixie-tube", + enabled = false, + ingredients = + { + {"electronic-circuit",1}, + {"iron-plate",2}, + {"iron-stick", 10}, + }, + results = { + {type="item", name="nixie-tube", amount=1}, + }, + }, + { + type = "item", + name = "nixie-tube", + icon = "__nixie-tubes__/graphics/nixie-base-icon.png", + icon_size = 32, + subgroup = "circuit-network", + order = "c-a", + place_result = "nixie-tube", + stack_size = 50 + }, + { + type = "lamp", + name = "nixie-tube", + icon = "__nixie-tubes__/graphics/nixie-base-icon.png", + icon_size = 32, + flags = {"placeable-neutral","player-creation", "not-on-map"}, + minable = {hardness = 0.2, mining_time = 0.5, result = "nixie-tube"}, + max_health = 55, + order = "z[zebra]", + corpse = "small-remnants", + collision_box = {{-0.4, -0.9}, {0.4, .9}}, + selection_box = {{-.5, -1.0}, {0.5, 1.0}}, + energy_source = + { + type = "electric", + usage_priority = "lamp", + }, + energy_usage_per_tick = "4KW", + light = {intensity = 0.0, size = 0, color = {r=1, g=.6, b=.3, a=0}}, + picture_off = + { + filename = "__nixie-tubes__/graphics/nixie-base.png", + priority = "high", + width = 80, -- New size image 2x + height = 128, -- New size image 2x + scale = 0.5, -- Reduced so that the sprite does not crawl over the edges + shift = {4/32,0} -- Shift the sprite so that it does not overlap with neighboring grid cells + }, + picture_on = + { + filename = "__nixie-tubes__/graphics/empty.png", + priority = "high", + width = 1, + height = 1, + shift = {0,0} + }, + circuit_wire_connection_point = circuit_connector_definitions["nixie"].points, + circuit_connector_sprites = circuit_connector_definitions["nixie"].sprites, + circuit_wire_max_distance = 7.5 + }, + + -- 2x1 tile one-charater alpha nixie tube + { + type = "recipe", + name = "nixie-tube-alpha", + enabled = false, + ingredients = + { + {"electronic-circuit",1}, + {"iron-plate",2}, + {"iron-stick", 10}, + }, + results = { + {type="item", name="nixie-tube-alpha", amount=1}, + }, + }, + { + type = "item", + name = "nixie-tube-alpha", + icon = "__nixie-tubes__/graphics/nixie-alpha-base-icon.png", + icon_size = 32, + subgroup = "circuit-network", + order = "c-a", + place_result = "nixie-tube-alpha", + stack_size = 50 + }, + { + type = "lamp", + name = "nixie-tube-alpha", + icon = "__nixie-tubes__/graphics/nixie-alpha-base-icon.png", + icon_size = 32, + flags = {"placeable-neutral","player-creation", "not-on-map"}, + minable = {hardness = 0.2, mining_time = 0.5, result = "nixie-tube-alpha"}, + max_health = 55, + order = "z[zebra]", + corpse = "small-remnants", + collision_box = {{-0.4, -0.9}, {0.4, .9}}, + selection_box = {{-.5, -1.0}, {0.5, 1.0}}, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + }, + energy_usage_per_tick = "4KW", + light = {intensity = 0.0, size = 0, color = {r=1, g=.6, b=.3, a=0}}, + picture_off = + { + filename = "__nixie-tubes__/graphics/nixie-base.png", + priority = "high", + width = 80, -- New size image 2x + height = 128, -- New size image 2x + scale = 0.5, -- Reduced so that the sprite does not crawl over the edges + shift = {4/32,0} -- Shift the sprite so that it does not overlap with neighboring grid cells + }, + picture_on = + { + filename = "__nixie-tubes__/graphics/empty.png", + priority = "high", + width = 1, + height = 1, + shift = {0,0} + }, + circuit_wire_connection_point = circuit_connector_definitions["nixie"].points, + circuit_connector_sprites = circuit_connector_definitions["nixie"].sprites, + circuit_wire_max_distance = 7.5 + }, + + -- small 1x1 tile two-digit nixie tube + { + type = "recipe", + name = "nixie-tube-small", + enabled = false, + ingredients = + { + {"electronic-circuit",1}, + {"iron-plate", 1}, + {"iron-stick", 5}, + }, + results = { + {type="item", name="nixie-tube-small", amount=1}, + }, + }, + { + type = "item", + name = "nixie-tube-small", + icon = "__nixie-tubes__/graphics/nixie-small-base-icon.png", + icon_size = 32, + subgroup = "circuit-network", + order = "c-a", + place_result = "nixie-tube-small", + stack_size = 50 + }, + { + type = "lamp", + name = "nixie-tube-small", + icon = "__nixie-tubes__/graphics/nixie-small-base-icon.png", + icon_size = 32, + flags = {"placeable-neutral","player-creation", "not-on-map"}, + minable = {hardness = 0.2, mining_time = 0.5, result = "nixie-tube-small"}, + max_health = 40, + order = "z[zebra]", + corpse = "small-remnants", + collision_box = {{-0.4, -0.4}, {0.4, .4}}, + selection_box = {{-.5, -0.5}, {0.5, 0.5}}, + energy_source = + { + type = "electric", + usage_priority = "secondary-input", + }, + energy_usage_per_tick = "4KW", + light = {intensity = 0.0, size = 0, color = {r=1, g=.6, b=.3, a=0}}, + light_when_colored = {intensity = 1, size = 6, color = {r=1.0, g=1.0, b=1.0}}, + picture_off = + { + filename = "__nixie-tubes__/graphics/nixie-small-base.png", + priority = "high", + width = 96, -- New size image 2x + height = 84, -- New size image 2x + scale = 0.5, -- Reduced so that the sprite does not crawl over the edges + shift = {8/32,-5/32} -- Shift the sprite so that it does not overlap with neighboring grid cells + }, + picture_on = + { + filename = "__nixie-tubes__/graphics/empty.png", + priority = "high", + width = 1, + height = 1, + shift = {0,0} + }, + circuit_wire_max_distance = 7.5, + + circuit_wire_connection_point = circuit_connector_definitions["nixie-small"].points, + circuit_connector_sprites = circuit_connector_definitions["nixie-small"].sprites, + }, +} + +function nixie_sprite(char,xoffset,yoffset) + return { + type = "sprite", + name = "nixie-tube-sprite-" .. char, + filename = "__nixie-tubes__/graphics/nixie-chars-mono.png", + x = xoffset * 40, -- Increase the offset by image table + y = yoffset * 88, + width = 40, -- New size image 2x + height = 88, -- New size image 2x + scale = 0.5, -- Reduced so that the sprite does not crawl over the edges + apply_runtime_tint = true, + shift = {-2/64,-18/64}, -- Move the sprite to fit into the tube + } +end + +local spritelist = + { + ["0"]=settings.startup["nixie-tube-slashed-zero"].value and {x=0,y=0} or {x=4,y=5}, + ["1"]={x=1,y=0}, + ["2"]={x=2,y=0}, + ["3"]={x=3,y=0}, + ["4"]={x=4,y=0}, + ["5"]={x=5,y=0}, + ["6"]={x=6,y=0}, + ["7"]={x=7,y=0}, + ["8"]={x=8,y=0}, + ["9"]={x=9,y=0}, + ["A"]={x=0,y=1}, + ["B"]={x=1,y=1}, + ["C"]={x=2,y=1}, + ["D"]={x=3,y=1}, + ["E"]={x=4,y=1}, + ["F"]={x=5,y=1}, + ["G"]={x=6,y=1}, + ["H"]={x=7,y=1}, + ["I"]={x=8,y=1}, + ["J"]={x=9,y=1}, + ["K"]={x=0,y=2}, + ["L"]={x=1,y=2}, + ["M"]={x=2,y=2}, + ["N"]={x=3,y=2}, + ["O"]={x=4,y=2}, + ["P"]={x=5,y=2}, + ["Q"]={x=6,y=2}, + ["R"]={x=7,y=2}, + ["S"]={x=8,y=2}, + ["T"]={x=9,y=2}, + ["U"]={x=0,y=3}, + ["V"]={x=1,y=3}, + ["W"]={x=2,y=3}, + ["X"]={x=3,y=3}, + ["Y"]={x=4,y=3}, + ["Z"]={x=5,y=3}, + ["err"]={x=6,y=3}, + ["dot"]={x=7,y=3}, + ["negative"]={x=8,y=3}, -- for negative numbers + ["off"]={x=9,y=3}, + + --extended symbols + ["?"]={x=0,y=4}, + ["!"]={x=1,y=4}, + ["@"]={x=2,y=4}, + ["["]={x=3,y=4}, + ["]"]={x=4,y=4}, + ["{"]={x=5,y=4}, + ["}"]={x=6,y=4}, + ["("]={x=7,y=4}, + [")"]={x=8,y=4}, + ["slash"]={x=9,y=4}, + ["*"]={x=0,y=5}, + ["-"]={x=1,y=5}, -- for subtraction operation + ["+"]={x=2,y=5}, + ["%"]={x=3,y=5}, + + } + +for ch,offset in pairs(spritelist) do + data:extend{ + nixie_sprite(ch,offset.x,offset.y) + } +end diff --git a/nixie-tubes/prototypes/signals.lua b/nixie-tubes/prototypes/signals.lua new file mode 100644 index 00000000..2d789d60 --- /dev/null +++ b/nixie-tubes/prototypes/signals.lua @@ -0,0 +1,49 @@ +data:extend( + {{ + type = "item-subgroup", + name = "virtual-signal-symbol", + group = "signals", + order = "e" + }} +) + + +local symcount=1 +local function create_symsignal(name,sort) + data:extend( + { + { + type = "virtual-signal", + name = "signal-" .. name, + icon = "__nixie-tubes__/graphics/signal/signal_" .. name .. ".png", + icon_size = 32, + subgroup = "virtual-signal-symbol", + order = "e[symbols]-" .. sort .. "[" .. name .. "]" + } + }) + symcount = symcount + 1 +end + +--create_symsignal("negative") + +--extended symbols +create_symsignal("paropen",'a-aa') +create_symsignal("parclose",'a-ab') +create_symsignal("sqopen",'a-ba') +create_symsignal("sqclose",'a-bb') +create_symsignal("curopen",'a-ca') +create_symsignal("curclose",'a-cb') + +create_symsignal("stop",'b') +create_symsignal("qmark",'b') +create_symsignal("exmark",'b') +create_symsignal("at",'c') + +create_symsignal("slash",'d') +create_symsignal("asterisk",'d') +create_symsignal("minus",'d') +create_symsignal("plus",'d') +create_symsignal("percent", 'd') + +create_symsignal("float",'x') +create_symsignal("hex",'x') diff --git a/nixie-tubes/prototypes/simulations.lua b/nixie-tubes/prototypes/simulations.lua new file mode 100644 index 00000000..f2b4ecad --- /dev/null +++ b/nixie-tubes/prototypes/simulations.lua @@ -0,0 +1,106 @@ +data:extend{ + { + type = "tips-and-tricks-item", + name = "nixie-tubes", + tag = "[entity=nixie-tube]", + category = "nixie-tubes", + is_title = true, + order = "zz-00", + dependencies = {"circuit-network"}, + simulation = { + save = "__nixie-tubes__/simulations/nixiesim.zip", + init = [[ + local bp="0eNq1lVtugzAQRfcy36aKzZu/dBtVhIA47UhgkDFRoogFdCHdWFdSG9QEKYRH1fwgbMbncsejmQukecMriUJBdAHMSlFD9HaBGt9Fkps9da44RICKF0BAJIVZCTwht1STcmgJoNjzE0S03RHgQqFC3lO6xTkWTZFyqQPGzhOoylofKYVR0xjLeXEJnPULa1tyB2HLIO4kxF4GYZMQZxnEnoS4yyCbG4SAviUlyzxO+UdyxFKaoAxl1qCK9bf99eQBZa3iu7s8olSN3rlK9xHWFnp4rRJTDxajju8EtucEZruoEpkoowbfn1/Q9rGCZ0atNnhqHpLvh3ePekXtdteOmfeWmaeTGfRHIFZdJHk+VVs6oWOwYA3MnoGFa2BsBkY3a2h0jkbX0DZD2vPq7/VZ9cce1B+9NZNfWUsLpSg6obtEsPk8HDBXXD5oojPGG+OaMttxPT8Ih311hVf6yKv9R6/0f71u77z+zajb+dQTp5tM0WCQETjqv+qcsECXUMh8FgaB5+v28QOiY0wL" + game.tick_paused = false + game.camera_alt_info = true + local result = {game.surfaces[1].create_entities_from_blueprint_string + { + string = bp, + position = {0, 0}, + }} + remote.call("nixie-tubes", "RebuildNixies") + ]], + update = [[ + + ]], + } + }, + { + type = "tips-and-tricks-item", + name = "nixie-tubes-alpha", + tag = "[entity=nixie-tube-alpha]", + category = "nixie-tubes", + indent = 1, + order = "zz-10", + dependencies = {"nixie-tubes"}, + simulation = { + save = "__nixie-tubes__/simulations/nixiesim.zip", + init = [[ + local bp="0eNrNl99rgzAQgP+Xe9ZhUn8/b7CHwWAvexilaJutYRpFY2kp/u+LCmthu8HFCX0Ro/E+PzkvlzPkRSfqRioN6RnktlItpG9naOWHyorhmj7VAlKQWpTggMrKYaTkUQpXd7lws6LeZ9A7INVOHCFl/doBobTUUkyxxsFpo7oyF42ZgEdxoK5a82ClBrIJ5sZ3gQMnc8INwbydEtvhdjvcZ8OhEbtriDQjturXfd87P8icQg5tyD5CXlHIkQ05QMg+hezbkEOEHFDIgQ05Qsghhby6kH8JFVFCcRuJGJGIKWTPhpwg5IRCZhZk7iFk5hHQVmSGkSlVyeZrc46RKVXJJsM4Vg7ZpSoNdV9nSrvbqsylynTV/FWMzQeY+Lqpik0u9tlBmifMtHdZaNEga8hBNrozV76x0wz3EcZo3bAIseuFhJDMmKNPdAwXcnya74hmUEB0jBZyfJjviOZqSHT0F3J8nu+INQksIjoGt5urWDvCYqIjX8jxdb4j1n6whOjoLeT4Mt8R6064R3Rkt/s/Yn0QZzTHpRTv/2F5xDouzmmO3u2WHIb1AJzY5yxVcsSxzJrPfxCdGgGzzR435enVHt6Bg3mtUYXHzI8SHvEkjsPIbG6+AJHKVTk=" + game.tick_paused = false + game.camera_alt_info = true + local result = {game.surfaces[1].create_entities_from_blueprint_string + { + string = bp, + position = {0, 0}, + }} + remote.call("nixie-tubes", "RebuildNixies") + ]], + update = [[ + + ]], + } + }, + { + type = "tips-and-tricks-item", + name = "nixie-tubes-color", + tag = "[virtual-signal=signal-red]", + category = "nixie-tubes", + indent = 1, + order = "zz-20", + dependencies = {"nixie-tubes"}, + simulation = { + save = "__nixie-tubes__/simulations/nixiesim.zip", + init = [[ + local bp="0eNrdmM+O2jAQxt/F52SFnf/cql4rVeq1QiiAF6wNTuQ4dCOUB+hb9NIX65PUBpV6FyYbZ70SygXhEH/j+cXzjcMRrYqGVoJxieZHxNYlr9H8+xHVbMvzQl+TbUXRHDFJ98hDPN/rEWfPjPqyWVHUeYjxDX1Gc9x5FhP9vKh2uTGddAsPUS6ZZPS8iNOgXfJmv6JC6d8K76GqrNWUkuuYSsaPHyIPteoLzjq9olcqZJhK2K8SDFOJ+lXCYSqkXyUaphL0q8TDVLCh4iG1X6Qoi+WK7vIDK4W+a83EumFyqX7bXKY+MlHL5dXmODAhG3XlEvt8h/8JncVrmeud6RMcJmEaxGGqL++rXORSR0N/fv7WtzY1VfGKUqiNI0VDz7M5Xev4tQ6I9YegG3NjMTVKukV3C0dyWdK/Zfgq8IrxU+ArLv+xpA8RAOaRFZIKoL7eINFoDJgEYRQb9bYYnmds5KjHKZB3apc3+ai8dQpG5uOShh5udsuP6n1eFL3Vp5zllhqe2cgFb8rhcatLADkybnWQXGAjh18kOwW/wBGwp3A4DkwyFTAxBCYaa6XxfVopDl55KYZ8BsdjU0/uNPXwdepQH8HJ2Ebi+Kmv25y/v5PAZT+6YTp+xFtBqYtEwTLO4EN83/H5I90t563cMb59aXKzK2v79T5rIyHAhMxsmESTYgIVBME2TMikmEC1Q4gNk2BSTKDeSAIbJnhSTKCmSUK7ZmLYbOC2m3wFOonnpCMRq46UQbQsD5aGATum9dkBLeiF14oVmUGsLE+ihjHf4c6qGH9yAAtDsCzProZjO4b1xQGslhZF+cMBLgLhsjwCG2buGNc3B7jA9wU7WMEJ1sI7//89N/5n99BBJXbCQVL1Op6RhGRpGiek6/4CMOX16Q==" + game.tick_paused = false + game.camera_alt_info = true + local result = {game.surfaces[1].create_entities_from_blueprint_string + { + string = bp, + position = {0, 0}, + }} + remote.call("nixie-tubes", "RebuildNixies") + ]], + update = [[ + + ]], + } + }, + { + type = "tips-and-tricks-item", + name = "nixie-tubes-formatting", + tag = "[virtual-signal=signal-hex]", + category = "nixie-tubes", + indent = 1, + order = "zz-30", + dependencies = {"nixie-tubes"}, + simulation = { + save = "__nixie-tubes__/simulations/nixiesim.zip", + init = [[ + local bp="0eNrdmFGO2jAQhu/i51DFjuM4ees5qhUKYHYtgYMcBy1COUAP0ov1JLVBBbRMXA9CK21fEHGcz5nR/L89OZLFZlA7q40jzZHoZWd60vw4kl6/mnYTxtxhp0hDtFNbkhHTbsOV0e9azdywUGTMiDYr9U4aOr5kRBmnnVZnyuniMDfDdqGsnwA9n5Fd1/tHOhNW85gZ5d/KjBzCPzaO2R2GJWKKOKZIxLA4hidiaBxTJmLyOEakYWScUqVR6jhFplFEnFKnUao4heZpmPIGkxEvB2e7zXyh3tq97myYtdR2OWg39/dWl0fX2vZufieavbZu8COXtc8zZt/JGd67NghvxiivuCwEl2F4u2tt68Jq5PfPX2Q8zzVqGVbrA56GH6tWtyLT/orKm9BPA/X4MoL5oOjqz0EOQ5c/zCnQ9Q9zOLZ0YUyJ1RGMEdjihTEVVkkwRmI1kH9FDeQfNMBE2JderVLm41xWTcnj6jp/X3HmX2qhzeml7nN2lYkv9ImsrfXGKTuxv/4jTUPIEc0rWRZ5HsR73XNRqYHDZTlWxRLEUKyIYQxDahimFEgJwxSOVDBMKZEChikCqV/5P2xhPJ+UL6dT9Vw9Kt/6uep98xq90W+CbMFAfVImAk20dHqpTwFiEg9ZVEQxRaqNlHEMuk+AMeg+Acag+wQYg+4TYAy6T4AxAmmxMKVCWixMkUiLhSk10mJBCse2CeILWmzkQMTZhNFw+qijVs911PWma90zPDVkAQ6VPRpq+VmbR/aUhDFcwvj59OhL5/QtqLn5dJSRvY/ulBImfZXWrGK1lKLyvfgf9/gIYw==" + game.tick_paused = false + game.camera_alt_info = true + local result = {game.surfaces[1].create_entities_from_blueprint_string + { + string = bp, + position = {0, 0}, + }} + remote.call("nixie-tubes", "RebuildNixies") + ]], + update = [[ + + ]], + } + }, +} diff --git a/nixie-tubes/prototypes/technology.lua b/nixie-tubes/prototypes/technology.lua new file mode 100644 index 00000000..8c747f08 --- /dev/null +++ b/nixie-tubes/prototypes/technology.lua @@ -0,0 +1,32 @@ +data:extend({ + { + type = "technology", + name = "cathodes", + icon = "__nixie-tubes__/graphics/nixie-technology-icon.png", + icon_size = 128, + unit = { + count=20, + time=10, + ingredients = { + {"automation-science-pack", 1,}, + {"logistic-science-pack", 1,}, + }, + }, + prerequisites = {"advanced-electronics"}, + effects = { + { + type = "unlock-recipe", + recipe = "nixie-tube", + }, + { + type = "unlock-recipe", + recipe = "nixie-tube-alpha", + }, + { + type = "unlock-recipe", + recipe = "nixie-tube-small", + }, + }, + order = "a-d-e", + }, +}) diff --git a/nixie-tubes/scenarios/nixiesim/blueprint.zip b/nixie-tubes/scenarios/nixiesim/blueprint.zip new file mode 100644 index 00000000..6e3c51c9 Binary files /dev/null and b/nixie-tubes/scenarios/nixiesim/blueprint.zip differ diff --git a/nixie-tubes/scenarios/nixiesim/control.lua b/nixie-tubes/scenarios/nixiesim/control.lua new file mode 100644 index 00000000..cb6e6c71 --- /dev/null +++ b/nixie-tubes/scenarios/nixiesim/control.lua @@ -0,0 +1,3 @@ +local handler = require("event_handler") +local modloader = require("__simhelper__/modloader.lua") +handler.add_lib(modloader.load("nixie-tubes")) \ No newline at end of file diff --git a/nixie-tubes/scenarios/nixiesim/description.json b/nixie-tubes/scenarios/nixiesim/description.json new file mode 100644 index 00000000..6fd827b4 --- /dev/null +++ b/nixie-tubes/scenarios/nixiesim/description.json @@ -0,0 +1,4 @@ +{ + "multiplayer-compatible": false, + "order": "zzz" +} \ No newline at end of file diff --git a/nixie-tubes/scenarios/nixiesim/info.json b/nixie-tubes/scenarios/nixiesim/info.json new file mode 100644 index 00000000..19765bd5 --- /dev/null +++ b/nixie-tubes/scenarios/nixiesim/info.json @@ -0,0 +1 @@ +null diff --git a/nixie-tubes/settings.lua b/nixie-tubes/settings.lua new file mode 100644 index 00000000..6f6e68f6 --- /dev/null +++ b/nixie-tubes/settings.lua @@ -0,0 +1,25 @@ +data:extend{ + { + type = "bool-setting", + name = "nixie-tube-slashed-zero", + setting_type = "startup", + default_value = true, + order = "nixie-slashed-zero", + }, + { + type = "int-setting", + name = "nixie-tube-update-speed-alpha", + setting_type = "runtime-global", + minimum_value = 1, + default_value = 10, + order = "nixie-speed-alpha", + }, + { + type = "int-setting", + name = "nixie-tube-update-speed-numeric", + setting_type = "runtime-global", + minimum_value = 1, + default_value = 5, + order = "nixie-speed-numeric", + }, +} diff --git a/nixie-tubes/simulations/nixiesim.zip b/nixie-tubes/simulations/nixiesim.zip new file mode 100644 index 00000000..4dc76d9d Binary files /dev/null and b/nixie-tubes/simulations/nixiesim.zip differ diff --git a/nixie-tubes/thumbnail.png b/nixie-tubes/thumbnail.png new file mode 100644 index 00000000..f74221e5 Binary files /dev/null and b/nixie-tubes/thumbnail.png differ diff --git a/nixie-tubes_1.1.4.zip b/nixie-tubes_1.1.4.zip deleted file mode 100644 index 3a6524ab..00000000 Binary files a/nixie-tubes_1.1.4.zip and /dev/null differ diff --git a/original-music-hd-updated_0.17.0/FactorioHaluzsqua.ogg b/original-music-hd-updated/FactorioHaluzsqua.ogg similarity index 100% rename from original-music-hd-updated_0.17.0/FactorioHaluzsqua.ogg rename to original-music-hd-updated/FactorioHaluzsqua.ogg diff --git a/original-music-hd-updated_0.17.0/FactorioIntro.ogg b/original-music-hd-updated/FactorioIntro.ogg similarity index 100% rename from original-music-hd-updated_0.17.0/FactorioIntro.ogg rename to original-music-hd-updated/FactorioIntro.ogg diff --git a/original-music-hd-updated_0.17.0/FactorioSepro1.ogg b/original-music-hd-updated/FactorioSepro1.ogg similarity index 100% rename from original-music-hd-updated_0.17.0/FactorioSepro1.ogg rename to original-music-hd-updated/FactorioSepro1.ogg diff --git a/original-music-hd-updated_0.17.0/data.lua b/original-music-hd-updated/data.lua similarity index 100% rename from original-music-hd-updated_0.17.0/data.lua rename to original-music-hd-updated/data.lua diff --git a/original-music-hd-updated_0.17.0/info.json b/original-music-hd-updated/info.json similarity index 100% rename from original-music-hd-updated_0.17.0/info.json rename to original-music-hd-updated/info.json diff --git a/original-music-hd-updated_0.17.0/main-menu.ogg b/original-music-hd-updated/main-menu.ogg similarity index 100% rename from original-music-hd-updated_0.17.0/main-menu.ogg rename to original-music-hd-updated/main-menu.ogg diff --git a/original-music-hd-updated_0.17.0/thumbnail.png b/original-music-hd-updated/thumbnail.png similarity index 100% rename from original-music-hd-updated_0.17.0/thumbnail.png rename to original-music-hd-updated/thumbnail.png diff --git a/osha_mini_containers_0.0.1/changelog.txt b/osha_mini_containers/changelog.txt similarity index 100% rename from osha_mini_containers_0.0.1/changelog.txt rename to osha_mini_containers/changelog.txt diff --git a/osha_mini_containers_0.0.1/control.lua b/osha_mini_containers/control.lua similarity index 100% rename from osha_mini_containers_0.0.1/control.lua rename to osha_mini_containers/control.lua diff --git a/osha_mini_containers_0.0.1/data-final-fixes.lua b/osha_mini_containers/data-final-fixes.lua similarity index 100% rename from osha_mini_containers_0.0.1/data-final-fixes.lua rename to osha_mini_containers/data-final-fixes.lua diff --git a/osha_mini_containers_0.0.1/data.lua b/osha_mini_containers/data.lua similarity index 100% rename from osha_mini_containers_0.0.1/data.lua rename to osha_mini_containers/data.lua diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-active-provider.png b/osha_mini_containers/graphics/icons/mini-logistic-chest-active-provider.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-active-provider.png rename to osha_mini_containers/graphics/icons/mini-logistic-chest-active-provider.png diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-buffer.png b/osha_mini_containers/graphics/icons/mini-logistic-chest-buffer.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-buffer.png rename to osha_mini_containers/graphics/icons/mini-logistic-chest-buffer.png diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-passive-provider.png b/osha_mini_containers/graphics/icons/mini-logistic-chest-passive-provider.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-passive-provider.png rename to osha_mini_containers/graphics/icons/mini-logistic-chest-passive-provider.png diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-requester.png b/osha_mini_containers/graphics/icons/mini-logistic-chest-requester.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-requester.png rename to osha_mini_containers/graphics/icons/mini-logistic-chest-requester.png diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-storage.png b/osha_mini_containers/graphics/icons/mini-logistic-chest-storage.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-logistic-chest-storage.png rename to osha_mini_containers/graphics/icons/mini-logistic-chest-storage.png diff --git a/osha_mini_containers_0.0.1/graphics/icons/mini-steel-chest.png b/osha_mini_containers/graphics/icons/mini-steel-chest.png similarity index 100% rename from osha_mini_containers_0.0.1/graphics/icons/mini-steel-chest.png rename to osha_mini_containers/graphics/icons/mini-steel-chest.png diff --git a/osha_mini_containers_0.0.1/info.json b/osha_mini_containers/info.json similarity index 100% rename from osha_mini_containers_0.0.1/info.json rename to osha_mini_containers/info.json diff --git a/osha_mini_containers_0.0.1/locale/en/en.cfg b/osha_mini_containers/locale/en/en.cfg similarity index 100% rename from osha_mini_containers_0.0.1/locale/en/en.cfg rename to osha_mini_containers/locale/en/en.cfg diff --git a/osha_mini_containers_0.0.1/migrations/0.0.1.lua b/osha_mini_containers/migrations/0.0.1.lua similarity index 100% rename from osha_mini_containers_0.0.1/migrations/0.0.1.lua rename to osha_mini_containers/migrations/0.0.1.lua diff --git a/osha_mini_containers_0.0.1/prototypes/item/chests.lua b/osha_mini_containers/prototypes/item/chests.lua similarity index 100% rename from osha_mini_containers_0.0.1/prototypes/item/chests.lua rename to osha_mini_containers/prototypes/item/chests.lua diff --git a/osha_mini_containers_0.0.1/prototypes/item/fixes.lua b/osha_mini_containers/prototypes/item/fixes.lua similarity index 100% rename from osha_mini_containers_0.0.1/prototypes/item/fixes.lua rename to osha_mini_containers/prototypes/item/fixes.lua diff --git a/osha_mini_containers_0.0.1/thumbnail.png b/osha_mini_containers/thumbnail.png similarity index 100% rename from osha_mini_containers_0.0.1/thumbnail.png rename to osha_mini_containers/thumbnail.png diff --git a/osm-lib-postprocess_23.01.10/changelog.txt b/osm-lib-postprocess/changelog.txt similarity index 100% rename from osm-lib-postprocess_23.01.10/changelog.txt rename to osm-lib-postprocess/changelog.txt diff --git a/osm-lib-postprocess_23.01.10/control-core.lua b/osm-lib-postprocess/control-core.lua similarity index 100% rename from osm-lib-postprocess_23.01.10/control-core.lua rename to osm-lib-postprocess/control-core.lua diff --git a/osm-lib-postprocess_23.01.10/control.lua b/osm-lib-postprocess/control.lua similarity index 100% rename from osm-lib-postprocess_23.01.10/control.lua rename to osm-lib-postprocess/control.lua diff --git a/osm-lib-postprocess_23.01.10/data-core.lua b/osm-lib-postprocess/data-core.lua similarity index 100% rename from osm-lib-postprocess_23.01.10/data-core.lua rename to osm-lib-postprocess/data-core.lua diff --git a/osm-lib-postprocess_23.01.10/data-final-fixes.lua b/osm-lib-postprocess/data-final-fixes.lua similarity index 100% rename from osm-lib-postprocess_23.01.10/data-final-fixes.lua rename to osm-lib-postprocess/data-final-fixes.lua diff --git a/osm-lib-postprocess_23.01.10/info.json b/osm-lib-postprocess/info.json similarity index 100% rename from osm-lib-postprocess_23.01.10/info.json rename to osm-lib-postprocess/info.json diff --git a/osm-lib-postprocess_23.01.10/thumbnail.png b/osm-lib-postprocess/thumbnail.png similarity index 100% rename from osm-lib-postprocess_23.01.10/thumbnail.png rename to osm-lib-postprocess/thumbnail.png diff --git a/osm-lib_1.1.41/changelog.txt b/osm-lib/changelog.txt similarity index 100% rename from osm-lib_1.1.41/changelog.txt rename to osm-lib/changelog.txt diff --git a/osm-lib_1.1.41/core/data-definitions.lua b/osm-lib/core/data-definitions.lua similarity index 100% rename from osm-lib_1.1.41/core/data-definitions.lua rename to osm-lib/core/data-definitions.lua diff --git a/osm-lib_1.1.41/core/lib-core.lua b/osm-lib/core/lib-core.lua similarity index 100% rename from osm-lib_1.1.41/core/lib-core.lua rename to osm-lib/core/lib-core.lua diff --git a/osm-lib_1.1.41/data-final-fixes.lua b/osm-lib/data-final-fixes.lua similarity index 100% rename from osm-lib_1.1.41/data-final-fixes.lua rename to osm-lib/data-final-fixes.lua diff --git a/osm-lib_1.1.41/data-updates.lua b/osm-lib/data-updates.lua similarity index 100% rename from osm-lib_1.1.41/data-updates.lua rename to osm-lib/data-updates.lua diff --git a/osm-lib_1.1.41/data.lua b/osm-lib/data.lua similarity index 100% rename from osm-lib_1.1.41/data.lua rename to osm-lib/data.lua diff --git a/osm-lib_1.1.41/functions/data-stage.lua b/osm-lib/functions/data-stage.lua similarity index 100% rename from osm-lib_1.1.41/functions/data-stage.lua rename to osm-lib/functions/data-stage.lua diff --git a/osm-lib_1.1.41/functions/settings-stage.lua b/osm-lib/functions/settings-stage.lua similarity index 100% rename from osm-lib_1.1.41/functions/settings-stage.lua rename to osm-lib/functions/settings-stage.lua diff --git a/osm-lib_1.1.41/functions/utils-data.lua b/osm-lib/functions/utils-data.lua similarity index 100% rename from osm-lib_1.1.41/functions/utils-data.lua rename to osm-lib/functions/utils-data.lua diff --git a/osm-lib_1.1.41/functions/utils.lua b/osm-lib/functions/utils.lua similarity index 100% rename from osm-lib_1.1.41/functions/utils.lua rename to osm-lib/functions/utils.lua diff --git a/osm-lib_1.1.41/graphics/icons/ban-technology.png b/osm-lib/graphics/icons/ban-technology.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/ban-technology.png rename to osm-lib/graphics/icons/ban-technology.png diff --git a/osm-lib_1.1.41/graphics/icons/ban.png b/osm-lib/graphics/icons/ban.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/ban.png rename to osm-lib/graphics/icons/ban.png diff --git a/osm-lib_1.1.41/graphics/icons/core/LSD-25.png b/osm-lib/graphics/icons/core/LSD-25.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/LSD-25.png rename to osm-lib/graphics/icons/core/LSD-25.png diff --git a/osm-lib_1.1.41/graphics/icons/core/OSM-removed.png b/osm-lib/graphics/icons/core/OSM-removed.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/OSM-removed.png rename to osm-lib/graphics/icons/core/OSM-removed.png diff --git a/osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-orange-warning.png b/osm-lib/graphics/icons/core/OSM-tooltip-orange-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-orange-warning.png rename to osm-lib/graphics/icons/core/OSM-tooltip-orange-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-red-warning.png b/osm-lib/graphics/icons/core/OSM-tooltip-red-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-red-warning.png rename to osm-lib/graphics/icons/core/OSM-tooltip-red-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-yellow-warning.png b/osm-lib/graphics/icons/core/OSM-tooltip-yellow-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/OSM-tooltip-yellow-warning.png rename to osm-lib/graphics/icons/core/OSM-tooltip-yellow-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/core/OSM-warning.png b/osm-lib/graphics/icons/core/OSM-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/OSM-warning.png rename to osm-lib/graphics/icons/core/OSM-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/core/albert-hofmann.png b/osm-lib/graphics/icons/core/albert-hofmann.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/core/albert-hofmann.png rename to osm-lib/graphics/icons/core/albert-hofmann.png diff --git a/osm-lib_1.1.41/graphics/icons/orange-warning.png b/osm-lib/graphics/icons/orange-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/orange-warning.png rename to osm-lib/graphics/icons/orange-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/red-warning.png b/osm-lib/graphics/icons/red-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/red-warning.png rename to osm-lib/graphics/icons/red-warning.png diff --git a/osm-lib_1.1.41/graphics/icons/utils/code-data.png b/osm-lib/graphics/icons/utils/code-data.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/utils/code-data.png rename to osm-lib/graphics/icons/utils/code-data.png diff --git a/osm-lib_1.1.41/graphics/icons/utils/collision-layer.png b/osm-lib/graphics/icons/utils/collision-layer.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/utils/collision-layer.png rename to osm-lib/graphics/icons/utils/collision-layer.png diff --git a/osm-lib_1.1.41/graphics/icons/yellow-warning.png b/osm-lib/graphics/icons/yellow-warning.png similarity index 100% rename from osm-lib_1.1.41/graphics/icons/yellow-warning.png rename to osm-lib/graphics/icons/yellow-warning.png diff --git a/osm-lib_1.1.41/info.json b/osm-lib/info.json similarity index 100% rename from osm-lib_1.1.41/info.json rename to osm-lib/info.json diff --git a/osm-lib_1.1.41/locale/en/en.cfg b/osm-lib/locale/en/en.cfg similarity index 100% rename from osm-lib_1.1.41/locale/en/en.cfg rename to osm-lib/locale/en/en.cfg diff --git a/osm-lib_1.1.41/prototypes/data-core.lua b/osm-lib/prototypes/data-core.lua similarity index 100% rename from osm-lib_1.1.41/prototypes/data-core.lua rename to osm-lib/prototypes/data-core.lua diff --git a/osm-lib_1.1.41/settings.lua b/osm-lib/settings.lua similarity index 100% rename from osm-lib_1.1.41/settings.lua rename to osm-lib/settings.lua diff --git a/osm-lib_1.1.41/thumbnail.png b/osm-lib/thumbnail.png similarity index 100% rename from osm-lib_1.1.41/thumbnail.png rename to osm-lib/thumbnail.png diff --git a/pollution-visuals_0.2.7/changelog.txt b/pollution-visuals/changelog.txt similarity index 100% rename from pollution-visuals_0.2.7/changelog.txt rename to pollution-visuals/changelog.txt diff --git a/pollution-visuals_0.2.7/control.lua b/pollution-visuals/control.lua similarity index 100% rename from pollution-visuals_0.2.7/control.lua rename to pollution-visuals/control.lua diff --git a/pollution-visuals_0.2.7/data.lua b/pollution-visuals/data.lua similarity index 100% rename from pollution-visuals_0.2.7/data.lua rename to pollution-visuals/data.lua diff --git a/pollution-visuals_0.2.7/graphics/smog_bottom.png b/pollution-visuals/graphics/smog_bottom.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_bottom.png rename to pollution-visuals/graphics/smog_bottom.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_inv_left_bottom.png b/pollution-visuals/graphics/smog_corner_inv_left_bottom.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_inv_left_bottom.png rename to pollution-visuals/graphics/smog_corner_inv_left_bottom.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_inv_left_top.png b/pollution-visuals/graphics/smog_corner_inv_left_top.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_inv_left_top.png rename to pollution-visuals/graphics/smog_corner_inv_left_top.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_inv_right_bottom.png b/pollution-visuals/graphics/smog_corner_inv_right_bottom.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_inv_right_bottom.png rename to pollution-visuals/graphics/smog_corner_inv_right_bottom.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_inv_right_top.png b/pollution-visuals/graphics/smog_corner_inv_right_top.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_inv_right_top.png rename to pollution-visuals/graphics/smog_corner_inv_right_top.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_left_bottom.png b/pollution-visuals/graphics/smog_corner_left_bottom.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_left_bottom.png rename to pollution-visuals/graphics/smog_corner_left_bottom.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_left_top.png b/pollution-visuals/graphics/smog_corner_left_top.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_left_top.png rename to pollution-visuals/graphics/smog_corner_left_top.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_right_bottom.png b/pollution-visuals/graphics/smog_corner_right_bottom.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_right_bottom.png rename to pollution-visuals/graphics/smog_corner_right_bottom.png diff --git a/pollution-visuals_0.2.7/graphics/smog_corner_right_top.png b/pollution-visuals/graphics/smog_corner_right_top.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_corner_right_top.png rename to pollution-visuals/graphics/smog_corner_right_top.png diff --git a/pollution-visuals_0.2.7/graphics/smog_left.png b/pollution-visuals/graphics/smog_left.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_left.png rename to pollution-visuals/graphics/smog_left.png diff --git a/pollution-visuals_0.2.7/graphics/smog_middle.png b/pollution-visuals/graphics/smog_middle.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_middle.png rename to pollution-visuals/graphics/smog_middle.png diff --git a/pollution-visuals_0.2.7/graphics/smog_right.png b/pollution-visuals/graphics/smog_right.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_right.png rename to pollution-visuals/graphics/smog_right.png diff --git a/pollution-visuals_0.2.7/graphics/smog_top.png b/pollution-visuals/graphics/smog_top.png similarity index 100% rename from pollution-visuals_0.2.7/graphics/smog_top.png rename to pollution-visuals/graphics/smog_top.png diff --git a/pollution-visuals_0.2.7/info.json b/pollution-visuals/info.json similarity index 100% rename from pollution-visuals_0.2.7/info.json rename to pollution-visuals/info.json diff --git a/pollution-visuals_0.2.7/locale/en/config.cfg b/pollution-visuals/locale/en/config.cfg similarity index 100% rename from pollution-visuals_0.2.7/locale/en/config.cfg rename to pollution-visuals/locale/en/config.cfg diff --git a/pollution-visuals_0.2.7/prototypes/smog_animations.lua b/pollution-visuals/prototypes/smog_animations.lua similarity index 100% rename from pollution-visuals_0.2.7/prototypes/smog_animations.lua rename to pollution-visuals/prototypes/smog_animations.lua diff --git a/pollution-visuals_0.2.7/settings.lua b/pollution-visuals/settings.lua similarity index 100% rename from pollution-visuals_0.2.7/settings.lua rename to pollution-visuals/settings.lua diff --git a/pollution-visuals_0.2.7/thumbnail.png b/pollution-visuals/thumbnail.png similarity index 100% rename from pollution-visuals_0.2.7/thumbnail.png rename to pollution-visuals/thumbnail.png diff --git a/prismatic-belts/changelog.txt b/prismatic-belts/changelog.txt new file mode 100644 index 00000000..c68b4ea3 --- /dev/null +++ b/prismatic-belts/changelog.txt @@ -0,0 +1,50 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 2021-08-05 + Features: + - Completed function `prismatic_belts.logistics_technology_icon` + - Logistics-type technologies in all supported mods are now reskinned to be visually consistent with the colored belt surfaces + Changes: + - Revised flib migration module importing, modifying function `is_newer_version`, and adding additional functions `is_older_version`, `is_version_or_older`, `is_version`, and `is_version_or_newer` at `prismatic_belts.migration` + - Added additional color masks to support underlying masking changes in Artisanal Reskins version 2.0.0+ + - Revised spritesheet generation functions for simplicity and to support using Artisanal Reskin style spritesheets; does not break API + Bugfixes: + - Fixed that the transport belt animation set function used the wrong spritesheet when `brighten_arrows` was set to `true` + - Fixed that the `tint` parameter was not truly optional for the function `prismatic_belts.transport_belt_icon` + Locale: + - Added Russian localization +--------------------------------------------------------------------------------------------------- +Version: 1.1.5 +Date: 2021-03-13 + Locale: + - Added German localization +--------------------------------------------------------------------------------------------------- +Version: 1.1.4 +Date: 2021-03-04 + Changes: + - Now optionally dependent on Artisanal Reskins: Library version 1.1.3, and tier labels respect Artisanal Reskins: Bob's Mods setting "Bob's Logisitcs" +--------------------------------------------------------------------------------------------------- +Version: 1.1.3 +Date: 2021-02-26 + Changes: + - Images are now losslessly compressed, instead of lossy; there is a modest increase in filesize +--------------------------------------------------------------------------------------------------- +Version: 1.1.2 +Date: 2021-02-19 + Bugfixes: + - Fixed minor visual issues with the tintable spritesheets +--------------------------------------------------------------------------------------------------- +Version: 1.1.1 +Date: 2021-02-19 + Bugfixes: + - Fixed that the version of Artisanal Reskins that was supported was the development version +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 2021-02-18 + Features: + - Initial release + - Reskins the transport belt surface to colors that match the arrows, and updates related icons, structures, and remnants + - Supports belts from Bob's Logistics, Krastorio 2, Ultimate Belts, Factorio Extended Plus and Random Factorio Things + - Supports loaders from Miniloaders, Loader Redux, Deadlock Stacking Beltboxes & Loaders and Vanilla Loaders + - Supports Artisanal Reskins tier labels and custom colors + - Public-facing API for mod authors to create their own colored transport belts, see FAQ for details \ No newline at end of file diff --git a/prismatic-belts/data-updates.lua b/prismatic-belts/data-updates.lua new file mode 100644 index 00000000..e188449e --- /dev/null +++ b/prismatic-belts/data-updates.lua @@ -0,0 +1,12 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +-- Mod Requires +require("prototypes.mods.base") -- Vanilla with LoaderRedux / Vanilla Loaders / Deadlock Loaders +require("prototypes.mods.bobs") -- Bob's Mods / Artisanal Reskins with Miniloaders / LoaderRedux / Vanilla Loaders / Deadlock Loaders +require("prototypes.mods.krastorio") -- Krastorio 2 with Miniloaders +require("prototypes.mods.ultimate-belts") -- Ultimate Belts with Miniloaders / Deadlock Loaders +require("prototypes.mods.factorio-extended-plus") -- Factorio Extended Plus with Miniloaders / LoaderRedux / Deadlock Loaders +require("prototypes.mods.random-factorio-things") -- Factorio Extended Plus with Miniloaders / Deadlock Loaders / Vanilla Loaders \ No newline at end of file diff --git a/prismatic-belts/data.lua b/prismatic-belts/data.lua new file mode 100644 index 00000000..21e2312f --- /dev/null +++ b/prismatic-belts/data.lua @@ -0,0 +1,7 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +-- Core functions +require("prototypes.functions") \ No newline at end of file diff --git a/prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/express-transport-belt.png b/prismatic-belts/graphics/entity/base/express-transport-belt/express-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/express-transport-belt.png rename to prismatic-belts/graphics/entity/base/express-transport-belt/express-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png b/prismatic-belts/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png rename to prismatic-belts/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/remnants/express-transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/express-transport-belt/remnants/express-transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/remnants/express-transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/express-transport-belt/remnants/express-transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/remnants/hr-express-transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/express-transport-belt/remnants/hr-express-transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/express-transport-belt/remnants/hr-express-transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/express-transport-belt/remnants/hr-express-transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/fast-transport-belt.png b/prismatic-belts/graphics/entity/base/fast-transport-belt/fast-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/fast-transport-belt.png rename to prismatic-belts/graphics/entity/base/fast-transport-belt/fast-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png b/prismatic-belts/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png rename to prismatic-belts/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/remnants/fast-transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/fast-transport-belt/remnants/fast-transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/remnants/fast-transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/fast-transport-belt/remnants/fast-transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/remnants/hr-fast-transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/fast-transport-belt/remnants/hr-fast-transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/fast-transport-belt/remnants/hr-fast-transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/fast-transport-belt/remnants/hr-fast-transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/transport-belt/hr-transport-belt.png b/prismatic-belts/graphics/entity/base/transport-belt/hr-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/transport-belt/hr-transport-belt.png rename to prismatic-belts/graphics/entity/base/transport-belt/hr-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants.png b/prismatic-belts/graphics/entity/base/transport-belt/remnants/transport-belt-remnants.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants.png rename to prismatic-belts/graphics/entity/base/transport-belt/remnants/transport-belt-remnants.png diff --git a/prismatic-belts_1.2.4/graphics/entity/base/transport-belt/transport-belt.png b/prismatic-belts/graphics/entity/base/transport-belt/transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/base/transport-belt/transport-belt.png rename to prismatic-belts/graphics/entity/base/transport-belt/transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-base.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-base.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-highlights.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-highlights.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-mask.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-1-mask.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-1-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-base.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-base.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-highlights.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-highlights.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-mask.png b/prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/hr-transport-belt-2-mask.png rename to prismatic-belts/graphics/entity/reskins/hr-transport-belt-2-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-base.png b/prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-base.png rename to prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-highlights.png b/prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-highlights.png rename to prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-mask.png b/prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/hr-transport-belt-remnants-mask.png rename to prismatic-belts/graphics/entity/reskins/remnants/hr-transport-belt-remnants-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-base.png b/prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-base.png rename to prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-highlights.png b/prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-highlights.png rename to prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-mask.png b/prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/remnants/transport-belt-remnants-mask.png rename to prismatic-belts/graphics/entity/reskins/remnants/transport-belt-remnants-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-base.png b/prismatic-belts/graphics/entity/reskins/transport-belt-1-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-base.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-1-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-highlights.png b/prismatic-belts/graphics/entity/reskins/transport-belt-1-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-highlights.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-1-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-mask.png b/prismatic-belts/graphics/entity/reskins/transport-belt-1-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-1-mask.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-1-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-base.png b/prismatic-belts/graphics/entity/reskins/transport-belt-2-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-base.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-2-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-highlights.png b/prismatic-belts/graphics/entity/reskins/transport-belt-2-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-highlights.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-2-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-mask.png b/prismatic-belts/graphics/entity/reskins/transport-belt-2-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/reskins/transport-belt-2-mask.png rename to prismatic-belts/graphics/entity/reskins/transport-belt-2-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-arrows.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-1-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-arrows.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-1-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-base.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-1-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-base.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-1-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-mask.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-1-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-1-mask.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-1-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-arrows.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-2-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-arrows.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-2-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-base.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-2-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-base.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-2-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-mask.png b/prismatic-belts/graphics/entity/standard/hr-transport-belt-2-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/hr-transport-belt-2-mask.png rename to prismatic-belts/graphics/entity/standard/hr-transport-belt-2-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-arrows.png b/prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-arrows.png rename to prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-base.png b/prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-base.png rename to prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-mask.png b/prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/hr-transport-belt-remnants-mask.png rename to prismatic-belts/graphics/entity/standard/remnants/hr-transport-belt-remnants-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-arrows.png b/prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-arrows.png rename to prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-base.png b/prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-base.png rename to prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-mask.png b/prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/remnants/transport-belt-remnants-mask.png rename to prismatic-belts/graphics/entity/standard/remnants/transport-belt-remnants-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-arrows.png b/prismatic-belts/graphics/entity/standard/transport-belt-1-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-arrows.png rename to prismatic-belts/graphics/entity/standard/transport-belt-1-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-base.png b/prismatic-belts/graphics/entity/standard/transport-belt-1-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-base.png rename to prismatic-belts/graphics/entity/standard/transport-belt-1-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-mask.png b/prismatic-belts/graphics/entity/standard/transport-belt-1-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-1-mask.png rename to prismatic-belts/graphics/entity/standard/transport-belt-1-mask.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-arrows.png b/prismatic-belts/graphics/entity/standard/transport-belt-2-arrows.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-arrows.png rename to prismatic-belts/graphics/entity/standard/transport-belt-2-arrows.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-base.png b/prismatic-belts/graphics/entity/standard/transport-belt-2-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-base.png rename to prismatic-belts/graphics/entity/standard/transport-belt-2-base.png diff --git a/prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-mask.png b/prismatic-belts/graphics/entity/standard/transport-belt-2-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/entity/standard/transport-belt-2-mask.png rename to prismatic-belts/graphics/entity/standard/transport-belt-2-mask.png diff --git a/prismatic-belts_1.2.4/graphics/icons/base/express-transport-belt.png b/prismatic-belts/graphics/icons/base/express-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/base/express-transport-belt.png rename to prismatic-belts/graphics/icons/base/express-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/icons/base/fast-transport-belt.png b/prismatic-belts/graphics/icons/base/fast-transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/base/fast-transport-belt.png rename to prismatic-belts/graphics/icons/base/fast-transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/icons/base/transport-belt.png b/prismatic-belts/graphics/icons/base/transport-belt.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/base/transport-belt.png rename to prismatic-belts/graphics/icons/base/transport-belt.png diff --git a/prismatic-belts_1.2.4/graphics/icons/reskins/transport-belt-icon-base.png b/prismatic-belts/graphics/icons/reskins/transport-belt-icon-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/reskins/transport-belt-icon-base.png rename to prismatic-belts/graphics/icons/reskins/transport-belt-icon-base.png diff --git a/prismatic-belts_1.2.4/graphics/icons/reskins/transport-belt-icon-highlights.png b/prismatic-belts/graphics/icons/reskins/transport-belt-icon-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/reskins/transport-belt-icon-highlights.png rename to prismatic-belts/graphics/icons/reskins/transport-belt-icon-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/icons/standard/transport-belt-icon.png b/prismatic-belts/graphics/icons/standard/transport-belt-icon.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/standard/transport-belt-icon.png rename to prismatic-belts/graphics/icons/standard/transport-belt-icon.png diff --git a/prismatic-belts_1.2.4/graphics/icons/standard/ultimate-transport-belt-icon.png b/prismatic-belts/graphics/icons/standard/ultimate-transport-belt-icon.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/icons/standard/ultimate-transport-belt-icon.png rename to prismatic-belts/graphics/icons/standard/ultimate-transport-belt-icon.png diff --git a/prismatic-belts_1.2.4/graphics/technology/base/logistics-2.png b/prismatic-belts/graphics/technology/base/logistics-2.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/base/logistics-2.png rename to prismatic-belts/graphics/technology/base/logistics-2.png diff --git a/prismatic-belts_1.2.4/graphics/technology/base/logistics-3.png b/prismatic-belts/graphics/technology/base/logistics-3.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/base/logistics-3.png rename to prismatic-belts/graphics/technology/base/logistics-3.png diff --git a/prismatic-belts_1.2.4/graphics/technology/base/logistics.png b/prismatic-belts/graphics/technology/base/logistics.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/base/logistics.png rename to prismatic-belts/graphics/technology/base/logistics.png diff --git a/prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-base.png b/prismatic-belts/graphics/technology/reskins/logistics-technology-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-base.png rename to prismatic-belts/graphics/technology/reskins/logistics-technology-base.png diff --git a/prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-highlights.png b/prismatic-belts/graphics/technology/reskins/logistics-technology-highlights.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-highlights.png rename to prismatic-belts/graphics/technology/reskins/logistics-technology-highlights.png diff --git a/prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-mask.png b/prismatic-belts/graphics/technology/reskins/logistics-technology-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/reskins/logistics-technology-mask.png rename to prismatic-belts/graphics/technology/reskins/logistics-technology-mask.png diff --git a/prismatic-belts_1.2.4/graphics/technology/standard/logistics-technology-base.png b/prismatic-belts/graphics/technology/standard/logistics-technology-base.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/standard/logistics-technology-base.png rename to prismatic-belts/graphics/technology/standard/logistics-technology-base.png diff --git a/prismatic-belts_1.2.4/graphics/technology/standard/logistics-technology-mask.png b/prismatic-belts/graphics/technology/standard/logistics-technology-mask.png similarity index 100% rename from prismatic-belts_1.2.4/graphics/technology/standard/logistics-technology-mask.png rename to prismatic-belts/graphics/technology/standard/logistics-technology-mask.png diff --git a/prismatic-belts/info.json b/prismatic-belts/info.json new file mode 100644 index 00000000..713b8572 --- /dev/null +++ b/prismatic-belts/info.json @@ -0,0 +1,27 @@ +{ + "name": "prismatic-belts", + "version": "1.2.4", + "factorio_version": "1.1", + "title": "Prismatic Belts", + "author": "Kirazy", + "contact": "kirazy@live.com", + "dependencies": + [ + "base", + "flib", + "? boblogistics", + "? reskins-library >= 1.1.3", + "(?) reskins-bobs", + "(?) reskins-compatibility", + "? FactorioExtended-Plus-Transport", + "? Krastorio2", + "? RandomFactorioThings", + "? UltimateBelts", + "? miniloader", + "? LoaderRedux", + "? deadlock-beltboxes-loaders", + "(?) deadlock-integrations", + "? vanilla-loaders-hd" + + ] +} \ No newline at end of file diff --git a/prismatic-belts_1.2.4/locale/en/prismatic-belts-locale.cfg b/prismatic-belts/locale/en/prismatic-belts-locale.cfg similarity index 100% rename from prismatic-belts_1.2.4/locale/en/prismatic-belts-locale.cfg rename to prismatic-belts/locale/en/prismatic-belts-locale.cfg diff --git a/prismatic-belts_1.2.4/locale/ru/prismatic-belts-locale.cfg b/prismatic-belts/locale/ru/prismatic-belts-locale.cfg similarity index 100% rename from prismatic-belts_1.2.4/locale/ru/prismatic-belts-locale.cfg rename to prismatic-belts/locale/ru/prismatic-belts-locale.cfg diff --git a/prismatic-belts/prototypes/functions.lua b/prismatic-belts/prototypes/functions.lua new file mode 100644 index 00000000..e5a5603f --- /dev/null +++ b/prismatic-belts/prototypes/functions.lua @@ -0,0 +1,319 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +-- Make our function host +if not prismatic_belts then prismatic_belts = {} end +prismatic_belts.migration = require("migration") + +-- Ensure tint is normalized to between 0 and 1 +local function normalize_tint(tint) + local r = tint.r or tint[1] + local g = tint.g or tint[2] + local b = tint.b or tint[3] + local a + + if r > 255 or g > 255 or b > 255 then + r = r/255 + g = g/255 + b = b/255 + a = tint.a/255 or tint[4]/255 or 1 + end + + return {r = r, g = g, b = b, a = a} +end + +-- Adjust the alpha value of a given tint +function prismatic_belts.adjust_alpha(tint, alpha) + local tint = normalize_tint(tint) + local adjusted_tint = {r = tint.r, g = tint.g, b = tint.b, a = alpha} + return adjusted_tint +end + +-- Make an icon_pictures table for reskins-library +function prismatic_belts.transport_belt_picture(tint, use_reskin_process) + local standard_icon = prismatic_belts.transport_belt_icon(tint, use_reskin_process) + local icon_pictures = {layers = {}} + + for _, layer in pairs(standard_icon) do + table.insert(icon_pictures.layers, { + filename = layer.icon, + size = layer.icon_size, + mipmaps = layer.icon_mipmaps, + scale = 0.25, + tint = layer.tint, + }) + end + + return icon_pictures +end + +---------------------------------------------------------------------------------------------------- +-- BELT COLORING API +---------------------------------------------------------------------------------------------------- + +-- LOGISTICS TECHNOLOGY ICONS +-- Returns a complete technology icons definition +-- inputs Table of parameters: +-- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] +-- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] +-- use_reskin_process Boolean When true, uses the icons compliant with Artisanal Reskins version 2.0.0+ [Optional; default nil] +function prismatic_belts.logistics_technology_icon(inputs) + local technology_icons + if inputs.use_reskin_process then + technology_icons = { + { + icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-base.png", + icon_size = 256, + icon_mipmaps = 4, + tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) + }, + { + icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-mask.png", + icon_size = 256, + icon_mipmaps = 4, + tint = inputs.mask_tint, + }, + { + icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-highlights.png", + icon_size = 256, + icon_mipmaps = 4, + tint = {1, 1, 1, 0}, + } + } + else + technology_icons = { + { + icon = "__prismatic-belts__/graphics/technology/standard/logistics-technology-base.png", + icon_size = 256, + icon_mipmaps = 4, + tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) + }, + { + icon = "__prismatic-belts__/graphics/technology/standard/logistics-technology-mask.png", + icon_size = 256, + icon_mipmaps = 4, + tint = inputs.mask_tint, + } + } + end + + return technology_icons +end + +-- TRANSPORT BELT ICONS +-- Returns a complete item icons definition +-- tint Types/Color Color to tint the icon [Optional; default nil] +-- use_reskin_process Boolean When true, uses the icons compliant with Artisanal Reskins version 2.0.0+ [Optional; default nil] +function prismatic_belts.transport_belt_icon(tint, use_reskin_process) + local item_icons + if use_reskin_process then + item_icons = { + { + icon = "__prismatic-belts__/graphics/icons/reskins/transport-belt-icon-base.png", + icon_size = 64, + icon_mipmaps = 4, + tint = tint and prismatic_belts.adjust_alpha(tint, 1), + }, + { + icon = "__prismatic-belts__/graphics/icons/reskins/transport-belt-icon-highlights.png", + icon_size = 64, + icon_mipmaps = 4, + tint = {1, 1, 1, 0}, + }, + } + else + item_icons = { + { + icon = "__prismatic-belts__/graphics/icons/standard/transport-belt-icon.png", + icon_size = 64, + icon_mipmaps = 4, + tint = tint and prismatic_belts.adjust_alpha(tint, 1), + }, + } + end + + return item_icons +end + +-- TRANSPORT BELT ANIMATION SET +-- Returns a complete belt_animation_set definition +-- inputs Table of parameters: +-- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] +-- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] +-- brighten_arrows Boolean When true, blends a white arrow with the underlying tinted belts to brighen the arrows [Optional; default nil] +-- use_reskin_process Boolean When true, uses the tintable color masks consistent with Artisanal Reskins version 2.0.0+ [Optional; default nil] +-- variant Integer (1|2) Spritesheet to return (1 for slow, 2 for fast) [Optional; default 1] +function prismatic_belts.transport_belt_animation_set(inputs) + local transport_belt_animation_set + local variant = inputs.variant or 1 + + -- Returns a tailored layer of the belt animation set + -- inputs Table of parameters: + -- blend_mode String Blending mode for the layer + -- directory String "standard" or "reskins", determines types of color masks to use + -- layer String "base", "mask" or "arrows" (standard), or "base", "mask" or "highlights" (reskins). Determines specific spritesheet used by the layer + -- tint Types/Color Color to tint the layer + -- variant Integer (1|2) Spritesheet to return (1 for slow, 2 for fast) + local function return_belt_animation_set_layer(inputs) + -- Point to appropriate sprite directory + local directory = inputs.directory or "standard" + + return + { + filename = "__prismatic-belts__/graphics/entity/"..directory.."/transport-belt-"..inputs.variant.."-"..inputs.layer..".png", + priority = "extra-high", + width = 64, + height = 64, + frame_count = 16*inputs.variant, + tint = inputs.tint, + blend_mode = inputs.blend_mode, + direction_count = 20, + hr_version = { + filename = "__prismatic-belts__/graphics/entity/"..directory.."/hr-transport-belt-"..inputs.variant.."-"..inputs.layer..".png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5, + frame_count = 16*inputs.variant, + tint = inputs.tint, + blend_mode = inputs.blend_mode, + direction_count = 20, + } + } + end + + -- Setup belt transport set + if inputs.use_reskin_process then + transport_belt_animation_set = { + animation_set = { + layers = { + return_belt_animation_set_layer{directory = "reskins", layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil, variant = variant}, + return_belt_animation_set_layer{directory = "reskins", layer = "mask", tint = inputs.mask_tint, variant = variant}, + return_belt_animation_set_layer{directory = "reskins", layer = "highlights", blend_mode = "additive", variant = variant}, + } + } + } + else + transport_belt_animation_set = { + animation_set = { + layers = { + return_belt_animation_set_layer{layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil, variant = variant}, + return_belt_animation_set_layer{layer = "mask", tint = inputs.mask_tint, variant = variant}, + } + } + } + + if inputs.brighten_arrows then + table.insert(transport_belt_animation_set.animation_set.layers, return_belt_animation_set_layer{layer = "arrows", tint = util.color("4"), blend_mode = "additive-soft", variant = variant}) + end + end + + return transport_belt_animation_set +end + +-- TRANSPORT BELT REMNANTS +-- This function reskins (or creates as needed) appropriate transport belt remnants +-- name Prototype name of the transport belt +-- inputs Table of parameters: +-- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] +-- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] +-- brighten_arrows Boolean When true, blends a white arrow with the underlying tinted belts to brighen the arrows [Optional; default nil] +-- use_reskin_process Boolean When true, uses the tintable color masks consistent with Artisanal Reskins version 2.0.0+ [Optional; default nil] +function prismatic_belts.create_remnant(name, inputs) + local remnant_layers + + -- Returns a tailored layer of the belt remnants + -- inputs Table of parameters: + -- blend_mode String Blending mode for the layer + -- directory String "standard" or "reskins", determines types of color masks to use + -- layer String "base", "mask" or "arrows" (standard), or "base", "mask" or "highlights" (reskins). Determines specific spritesheet used by the layer + -- tint Types/Color Color to tint the layer + local function return_remnant_layer(inputs) + -- Point to appropriate sprite directory + local directory = inputs.directory or "standard" + + return + { + filename ="__prismatic-belts__/graphics/entity/"..directory.."/remnants/transport-belt-remnants-"..inputs.layer..".png", + line_length = 1, + width = 54, + height = 52, + frame_count = 1, + variation_count = 1, + axially_symmetrical = false, + direction_count = 4, + tint = inputs.tint, + blend_mode = inputs.blend_mode, + shift = util.by_pixel(1, 0), + hr_version = { + filename ="__prismatic-belts__/graphics/entity/"..directory.."/remnants/hr-transport-belt-remnants-"..inputs.layer..".png", + line_length = 1, + width = 106, + height = 102, + frame_count = 1, + variation_count = 1, + axially_symmetrical = false, + direction_count = 4, + tint = inputs.tint, + blend_mode = inputs.blend_mode, + shift = util.by_pixel(1, -0.5), + scale = 0.5, + } + } + end + + -- Setup belt transport set + if inputs.use_reskin_process then + remnant_layers = { + return_remnant_layer{directory = "reskins", layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil}, + return_remnant_layer{directory = "reskins", layer = "mask", tint = inputs.mask_tint}, + return_remnant_layer{directory = "reskins", layer = "highlights", blend_mode = "additive"}, + } + else + remnant_layers = { + return_remnant_layer{layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil}, + return_remnant_layer{layer = "mask", tint = inputs.mask_tint}, + } + + if inputs.brighten_arrows then + table.insert(remnant_layers, return_remnant_layer{layer = "arrows", tint = util.color("4"), blend_mode = "additive-soft"}) + end + end + + -- Fetch remnant + local remnants = data.raw["corpse"][name.."-remnants"] + + -- If there is no existing remnant, create one + if not remnants then + remnants = { + type = "corpse", + name = "prismatic-belts-"..name.."-remnants", + icons = data.raw["transport-belt"][name].icons, + icon = data.raw["transport-belt"][name].icon, + icon_size = data.raw["transport-belt"][name].icon_size, + icon_mipmaps = data.raw["transport-belt"][name].icon_mipmaps, + flags = {"placeable-neutral", "not-on-map"}, + subgroup = "belt-remnants", + order = (data.raw.item[name] and data.raw.item[name].order) and data.raw.item[name].order.."-a["..name.."-remnants]" or "a-a-a", + selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, + tile_width = 1, + tile_height = 1, + selectable_in_game = false, + time_before_removed = 60 * 60 * 15, -- 15 minutes + final_render_layer = "remnants", + animation = make_rotated_animation_variations_from_sheet(2, { layers = remnant_layers }) + } + + data:extend({remnants}) + + -- Assign the corpse + data.raw["transport-belt"][name].corpse = "prismatic-belts-"..name.."-remnants" + else + remnants.icons = data.raw["transport-belt"][name].icons + remnants.icon = data.raw["transport-belt"][name].icon + remnants.icon_size = data.raw["transport-belt"][name].icon_size + remnants.animation = make_rotated_animation_variations_from_sheet(2, { layers = remnant_layers }) + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/migration.lua b/prismatic-belts/prototypes/migration.lua new file mode 100644 index 00000000..e265b1ce --- /dev/null +++ b/prismatic-belts/prototypes/migration.lua @@ -0,0 +1,111 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +-- Import flib migration module +local migration = require("__flib__.migration") + +-- Setup additional version comparison functions + +--- Check if current_version is newer than target_version +-- @tparam string current_version +-- @tparam string target_version +-- @tparam[opt=%02d] string format +-- @treturn boolean|nil +function migration.is_newer_version(current_version, target_version, format) + local v1 = migration.format_version(current_version, format) + local v2 = migration.format_version(target_version, format) + + if v1 and v2 then + if v1 > v2 then + return true + else + return false + end + end + + return nil +end + +--- Check if current_version is equal to or newer than target_version +-- @tparam string current_version +-- @tparam string target_version +-- @tparam[opt=%02d] string format +-- @treturn boolean|nil +function migration.is_version_or_newer(current_version, target_version, format) + local v1 = migration.format_version(current_version, format) + local v2 = migration.format_version(target_version, format) + + if v1 and v2 then + if v1 >= v2 then + return true + else + return false + end + end + + return nil +end + +--- Check if current_version is equal to target_version +-- @tparam string current_version +-- @tparam string target_version +-- @tparam[opt=%02d] string format +-- @treturn boolean|nil +function migration.is_version(current_version, target_version, format) + local v1 = migration.format_version(current_version, format) + local v2 = migration.format_version(target_version, format) + + if v1 and v2 then + if v1 == v2 then + return true + else + return false + end + end + + return nil +end + +--- Check if current_version is equal to or older than target_version +-- @tparam string current_version +-- @tparam string target_version +-- @tparam[opt=%02d] string format +-- @treturn boolean|nil +function migration.is_version_or_older(current_version, target_version, format) + local v1 = migration.format_version(current_version, format) + local v2 = migration.format_version(target_version, format) + + if v1 and v2 then + if v1 <= v2 then + return true + else + return false + end + end + + return nil +end + +--- Check if current_version is older than target_version +-- @tparam string current_version +-- @tparam string target_version +-- @tparam[opt=%02d] string format +-- @treturn boolean|nil +function migration.is_older_version(current_version, target_version, format) + local v1 = migration.format_version(current_version, format) + local v2 = migration.format_version(target_version, format) + + if v1 and v2 then + if v1 < v2 then + return true + else + return false + end + end + + return nil +end + +return migration \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/base.lua b/prismatic-belts/prototypes/mods/base.lua new file mode 100644 index 00000000..983de97c --- /dev/null +++ b/prismatic-belts/prototypes/mods/base.lua @@ -0,0 +1,195 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +-- Setup belt animation sets for vanilla entities +local belt_animation_sets = { + ["transport-belt"] = { + animation_set = { + filename = "__prismatic-belts__/graphics/entity/base/transport-belt/transport-belt.png", + priority = "extra-high", + width = 64, + height = 64, + frame_count = 16, + direction_count = 20, + hr_version = { + filename = "__prismatic-belts__/graphics/entity/base/transport-belt/hr-transport-belt.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5, + frame_count = 16, + direction_count = 20 + } + } + }, + ["fast-transport-belt"] = { + animation_set = { + filename = "__prismatic-belts__/graphics/entity/base/fast-transport-belt/fast-transport-belt.png", + priority = "extra-high", + width = 64, + height = 64, + frame_count = 32, + direction_count = 20, + hr_version = { + filename = "__prismatic-belts__/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5, + frame_count = 32, + direction_count = 20 + } + } + }, + ["express-transport-belt"] = { + animation_set = { + filename = "__prismatic-belts__/graphics/entity/base/express-transport-belt/express-transport-belt.png", + priority = "extra-high", + width = 64, + height = 64, + frame_count = 32, + direction_count = 20, + hr_version = { + filename = "__prismatic-belts__/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png", + priority = "extra-high", + width = 128, + height = 128, + scale = 0.5, + frame_count = 32, + direction_count = 20 + } + } + }, +} + +local tiers = { + [""] = {technology = "logistics"}, + ["fast-"] = {technology = "logistics-2"}, + ["express-"] = {technology = "logistics-3"}, +} + +if mods["reskins-library"] then + tiers[""].tier = 1 + tiers["fast-"].tier = 2 + tiers["express-"].tier = 3 +end + +if mods["miniloader"] then + local chute = data.raw["loader-1x1"]["chute-miniloader-loader"] + + if chute then + chute.belt_animation_set = belt_animation_sets["transport-belt"] + end +end + +for prefix, properties in pairs(tiers) do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"][prefix.."transport-belt"], + splitter = data.raw["splitter"][prefix.."splitter"], + underground = data.raw["underground-belt"][prefix.."underground-belt"], + loader = data.raw["loader"][prefix.."loader"], + + -- Miniloader + miniloader = data.raw["loader-1x1"][prefix.."miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"][prefix.."filter-miniloader-loader"], + + -- Deadlock Stacking Beltboxes and Compact loaders + deadlock_loader = data.raw["loader-1x1"][prefix.."transport-belt-loader"], + + -- Krastorio + krastorio_loader = data.raw["loader-1x1"]["kr-"..prefix.."loader"], + } + + -- Reskin the belt item + local belt_item = data.raw["item"][prefix.."transport-belt"] + if belt_item then + local icons = { + { + icon = "__prismatic-belts__/graphics/icons/base/"..prefix.."transport-belt.png", + icon_size = 64, + icon_mipmaps = 4, + } + } + + -- Append tier labels for reskins-library + if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then + reskins.lib.append_tier_labels(properties.tier, {icon = icons, tier_labels = reskins.lib.setting("reskins-bobs-do-belt-entity-tier-labeling") and true or false}) + + local icon_picture = { + filename = "__prismatic-belts__/graphics/icons/base/"..prefix.."transport-belt.png", + size = 64, + mipmaps = 4, + scale = 0.25, + } + + reskins.lib.assign_icons(prefix.."transport-belt", {icon = icons, icon_picture = icon_picture, make_icon_pictures = true}) + else + belt_item.icons = icons + end + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = belt_animation_sets[prefix.."transport-belt"] + end + end + + -- Setup remnants + local remnants = data.raw["corpse"][prefix.."transport-belt-remnants"] + + if remnants then + if entities.belt then + remnants.icons = entities.belt.icons + remnants.icon = entities.belt.icon + remnants.icon_size = entities.belt.icon_size + end + + remnants.animation = make_rotated_animation_variations_from_sheet(2, { + filename = "__prismatic-belts__/graphics/entity/base/"..prefix.."transport-belt/remnants/"..prefix.."transport-belt-remnants.png", + line_length = 1, + width = 54, + height = 52, + frame_count = 1, + variation_count = 1, + axially_symmetrical = false, + direction_count = 4, + shift = util.by_pixel(1, 0), + hr_version = { + filename = "__prismatic-belts__/graphics/entity/base/"..prefix.."transport-belt/remnants/hr-"..prefix.."transport-belt-remnants.png", + line_length = 1, + width = 106, + height = 102, + frame_count = 1, + variation_count = 1, + axially_symmetrical = false, + direction_count = 4, + shift = util.by_pixel(1, -0.5), + scale = 0.5 + } + }) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][properties.technology] + + if technology then + local icons = { + { + icon = "__prismatic-belts__/graphics/technology/base/"..properties.technology..".png", + icon_size = 256, + icon_mipmaps = 4, + } + } + + technology.icons = icons + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/bobs.lua b/prismatic-belts/prototypes/mods/bobs.lua new file mode 100644 index 00000000..190fbaaa --- /dev/null +++ b/prismatic-belts/prototypes/mods/bobs.lua @@ -0,0 +1,101 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +if not mods["boblogistics"] then return end + +local tiers = { + ["basic-"] = {tint = util.color("7d7d7dd1") , variant = 1, loader = "basic-", technology = "logistics-0"}, + ["turbo-"] = {tint = util.color("a510e5d1"), variant = 2, loader = "purple-", technology = "logistics-4"}, + ["ultimate-"] = {tint = util.color("16f263d1"), variant = 2, loader = "green-", technology = "logistics-5"}, +} + +-- Compatibility with Bob's Logistics Belt Reskin +if mods["boblogistics-belt-reskin"] then + tiers["basic-"].tint = util.color("e7e7e7d1") + tiers["turbo-"].tint = util.color("df1ee5d1") +end + +-- Compatibility with Artisanal Reskins 1.1.3+ +if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then + -- Setup standard properties + tiers["basic-"].tier = 0 + tiers["turbo-"].tier = 4 + tiers["ultimate-"].tier = 5 + + tiers["basic-"].tint = reskins.lib.belt_tint_index[0] + tiers["turbo-"].tint = reskins.lib.belt_tint_index[4] + tiers["ultimate-"].tint = reskins.lib.belt_tint_index[5] + + -- Check for custom colors, update tint and tier information if so + if reskins.lib.setting("reskins-lib-customize-tier-colors") then + tiers[""] = {tint = reskins.lib.belt_tint_index[1], variant = 1, loader = "", tier = 1, technology = "logistics"} + tiers["fast-"] = {tint = reskins.lib.belt_tint_index[2], variant = 2, loader = "fast-", tier = 2, technology = "logistics-2"} + tiers["express-"] = {tint = reskins.lib.belt_tint_index[3], variant = 2, loader = "express-", tier = 3, technology = "logistics-3"} + end + + -- Compatibility with Artisanal Reskins 2.0.0+ + if prismatic_belts.migration.is_version_or_newer(mods["reskins-library"], "2.0.0") then + for _, properties in pairs(tiers) do + properties.use_reskin_process = true + end + end +end + +-- Setup all the entities to use the updated belt animation sets +for prefix, properties in pairs(tiers) do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"][prefix.."transport-belt"], + splitter = data.raw["splitter"][prefix.."splitter"], + underground = data.raw["underground-belt"][prefix.."underground-belt"], + loader = data.raw["loader"][properties.loader.."loader"], + + -- Miniloader + miniloader = data.raw["loader-1x1"][prefix.."miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"][prefix.."filter-miniloader-loader"], + + -- Deadlock Stacking Beltboxes and Compact loaders + deadlock_loader = data.raw["loader-1x1"][prefix.."transport-belt-loader"] + } + + -- Reskin the belt item + local belt_item = data.raw["item"][prefix.."transport-belt"] + if belt_item then + local icons = prismatic_belts.transport_belt_icon(properties.tint, properties.use_reskin_process) + + -- Append tier labels for reskins-library + if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then + reskins.lib.append_tier_labels(properties.tier, {icon = icons, tier_labels = reskins.lib.setting("reskins-bobs-do-belt-entity-tier-labeling") and true or false}) + + reskins.lib.assign_icons(prefix.."transport-belt", {icon = icons, icon_picture = prismatic_belts.transport_belt_picture(properties.tint, properties.use_reskin_process), make_icon_pictures = true}) + else + belt_item.icons = icons + end + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({mask_tint = properties.tint, variant = properties.variant, use_reskin_process = properties.use_reskin_process}) + end + end + + -- Setup remnants + if entities.belt then + prismatic_belts.create_remnant(prefix.."transport-belt", {mask_tint = properties.tint}) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][properties.technology] + + if technology then + technology.icons = prismatic_belts.logistics_technology_icon({mask_tint = properties.tint, use_reskin_process = properties.use_reskin_process}) + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/factorio-extended-plus.lua b/prismatic-belts/prototypes/mods/factorio-extended-plus.lua new file mode 100644 index 00000000..34e4c990 --- /dev/null +++ b/prismatic-belts/prototypes/mods/factorio-extended-plus.lua @@ -0,0 +1,59 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +if not mods["FactorioExtended-Plus-Transport"] then return end + +local tiers = { + ["mk1"] = {tint = util.color("2cd529d1"), technology = "logistics-4"}, + ["mk2"] = {tint = util.color("9a2cc9d1"), technology = "logistics-5"}, +} + +-- Setup all the entities to use the updated belt animation sets +for tier, properties in pairs(tiers) do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"]["rapid-transport-belt-"..tier], + splitter = data.raw["splitter"]["rapid-splitter-"..tier], + underground = data.raw["underground-belt"]["rapid-transport-belt-to-ground-"..tier], + loader = data.raw["loader"]["rapid-"..tier.."-loader"], + + -- Miniloader + miniloader = data.raw["loader-1x1"]["rapid-"..tier.."-miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"]["rapid-"..tier.."-filter-miniloader-loader"], + + -- Deadlock Stacking Beltboxes and Compact loaders + deadlock_loader = data.raw["loader-1x1"]["rapid-transport-belt-"..tier.."-loader"] + } + + -- Reskin the belt item + local belt_item = data.raw["item"]["rapid-transport-belt-"..tier] + if belt_item then + belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({mask_tint = properties.tint, 2}) + end + end + + -- Setup remnants + if entities.belt then + prismatic_belts.create_remnant("rapid-transport-belt-"..tier, {mask_tint = properties.tint}) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][properties.technology] + + if technology then + technology.icons = prismatic_belts.logistics_technology_icon({mask_tint = properties.tint}) + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/krastorio.lua b/prismatic-belts/prototypes/mods/krastorio.lua new file mode 100644 index 00000000..afd5b8df --- /dev/null +++ b/prismatic-belts/prototypes/mods/krastorio.lua @@ -0,0 +1,56 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +if not mods["Krastorio2"] then return end + +local tiers = { + ["kr-advanced-"] = {tint = util.color("3ade21d1") , variant = 2, technology = "kr-logistic-4"}, + ["kr-superior-"] = {tint = util.color("a30bd6d1") , variant = 2, technology = "kr-logistic-5"}, +} + +-- Setup all the entities to use the updated belt animation sets +for prefix, properties in pairs(tiers) do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"][prefix.."transport-belt"], + splitter = data.raw["splitter"][prefix.."splitter"], + underground = data.raw["underground-belt"][prefix.."underground-belt"], + loader = data.raw["loader-1x1"][prefix.."loader"], + + -- Miniloader + miniloader = data.raw["loader-1x1"][prefix.."miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"][prefix.."filter-miniloader-loader"], + } + + -- Reskin the belt item + local belt_item = data.raw["item"][prefix.."transport-belt"] + if belt_item then + belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({mask_tint = properties.tint, variant = properties.variant}) + end + end + + -- Setup remnants + if entities.belt then + prismatic_belts.create_remnant(prefix.."transport-belt", {mask_tint = properties.tint}) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][properties.technology] + + if technology then + technology.icons = prismatic_belts.logistics_technology_icon({mask_tint = properties.tint}) + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/random-factorio-things.lua b/prismatic-belts/prototypes/mods/random-factorio-things.lua new file mode 100644 index 00000000..4ad2a3bf --- /dev/null +++ b/prismatic-belts/prototypes/mods/random-factorio-things.lua @@ -0,0 +1,59 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +if not mods["RandomFactorioThings"] then return end + +local tiers = { + ["nuclear-"] = {tint = util.color("00ff00")}, + ["plutonium-"] = {tint = util.color("00e1ffde")}, +} + +-- Setup all the entities to use the updated belt animation sets +for prefix, properties in pairs(tiers) do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"][prefix.."transport-belt"], + splitter = data.raw["splitter"][prefix.."splitter"], + underground = data.raw["underground-belt"][prefix.."underground-belt"], + loader = data.raw["loader-1x1"][prefix.."loader"], + + -- Miniloader + miniloader = data.raw["loader-1x1"][prefix.."miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"][prefix.."filter-miniloader-loader"], + + -- Deadlock Stacking Beltboxes and Compact loaders + deadlock_loader = data.raw["loader-1x1"][prefix.."transport-belt-loader"] + } + + -- Reskin the belt item + local belt_item = data.raw["item"][prefix.."transport-belt"] + if belt_item then + belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({mask_tint = properties.tint, variant = 2}) + end + end + + -- Setup remnants + if entities.belt then + prismatic_belts.create_remnant(prefix.."transport-belt", {mask_tint = properties.tint}) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][prefix.."logistics"] + + if technology then + technology.icons = prismatic_belts.logistics_technology_icon({mask_tint = properties.tint}) + end +end \ No newline at end of file diff --git a/prismatic-belts/prototypes/mods/ultimate-belts.lua b/prismatic-belts/prototypes/mods/ultimate-belts.lua new file mode 100644 index 00000000..7e38f8e3 --- /dev/null +++ b/prismatic-belts/prototypes/mods/ultimate-belts.lua @@ -0,0 +1,69 @@ +-- Copyright (c) 2021 Kirazy +-- Part of Prismatic Belts +-- +-- See LICENSE.md in the project directory for license information. + +if not mods["UltimateBelts"] then return end + +local tiers = { + ["ultra-fast-"] = {tint = util.color("00b30cff")}, + ["extreme-fast-"] = {tint = util.color("e00000ff")}, + ["ultra-express-"] = {tint = util.color("3604b5e8")}, + ["extreme-express-"] = {tint = util.color("002bffff")}, + ["ultimate-"] = {tint = util.color("00ffddd1")}, + ["original-ultimate-"] = {tint = util.color("00ffddd1")}, +} + +-- Setup all the entities to use the updated belt animation sets +for prefix, properties in pairs(tiers)do + -- Fetch entities + local entities = { + belt = data.raw["transport-belt"][prefix.."belt"], + splitter = data.raw["splitter"][prefix.."splitter"], + underground = data.raw["underground-belt"][prefix.."underground-belt"], + + -- Miniloader + miniloader = data.raw["loader-1x1"]["ub-"..prefix.."miniloader-loader"], + filter_miniloader = data.raw["loader-1x1"]["ub-"..prefix.."filter-miniloader-loader"], + + -- Deadlock Stacking Beltboxes and Compact loaders + deadlock_loader = data.raw["loader-1x1"][prefix.."belt-loader"] + } + + -- Reskin the belt item + local belt_item = data.raw["item"][prefix.."belt"] + if belt_item then + belt_item.icons = { + { + icon = "__prismatic-belts__/graphics/icons/standard/ultimate-transport-belt-icon.png", + icon_size = 64, + icon_mipmaps = 4, + tint = prismatic_belts.adjust_alpha(properties.tint, 1), + }, + } + + -- Update entity icon to match + if entities.belt then + entities.belt.icons = belt_item.icons + end + end + + -- Reskin all related entity types + for _, entity in pairs(entities) do + if entity then + entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({base_tint = util.color("404040"), mask_tint = properties.tint, variant = 2, brighten_arrows = true}) + end + end + + -- Setup remnants + if entities.belt then + prismatic_belts.create_remnant(prefix.."belt", {base_tint = util.color("404040"), mask_tint = properties.tint, brighten_arrows = true}) + end + + -- Setup logistics technologies + local technology = data.raw["technology"][prefix.."logistics"] + + if technology then + technology.icons = prismatic_belts.logistics_technology_icon({base_tint = util.color("404040"), mask_tint = properties.tint}) + end +end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/thumbnail.png b/prismatic-belts/thumbnail.png similarity index 100% rename from prismatic-belts_1.2.4/thumbnail.png rename to prismatic-belts/thumbnail.png diff --git a/prismatic-belts_1.2.4/changelog.txt b/prismatic-belts_1.2.4/changelog.txt deleted file mode 100644 index 14ca46fc..00000000 --- a/prismatic-belts_1.2.4/changelog.txt +++ /dev/null @@ -1,70 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 1.2.4 -Date: 2023-07-02 - Locale: - - Added partial support for Japanese ---------------------------------------------------------------------------------------------------- -Version: 1.2.3 -Date: 2023-04-01 - Locale: - - Added partial support for Spanish, Simplified Chinese localizations ---------------------------------------------------------------------------------------------------- -Version: 1.2.2 -Date: 2022-03-29 - Locale: - - Added Ukrainian localization ---------------------------------------------------------------------------------------------------- -Version: 1.2.1 -Date: 2021-09-12 - Locale: - - Added Brazilian Portuguese localization ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 2021-08-05 - Features: - - Completed function `prismatic_belts.logistics_technology_icon` - - Logistics-type technologies in all supported mods are now reskinned to be visually consistent with the colored belt surfaces - Changes: - - Revised flib migration module importing, modifying function `is_newer_version`, and adding additional functions `is_older_version`, `is_version_or_older`, `is_version`, and `is_version_or_newer` at `prismatic_belts.migration` - - Added additional color masks to support underlying masking changes in Artisanal Reskins version 2.0.0+ - - Revised spritesheet generation functions for simplicity and to support using Artisanal Reskin style spritesheets; does not break API - Bugfixes: - - Fixed that the transport belt animation set function used the wrong spritesheet when `brighten_arrows` was set to `true` - - Fixed that the `tint` parameter was not truly optional for the function `prismatic_belts.transport_belt_icon` - Locale: - - Added Russian localization ---------------------------------------------------------------------------------------------------- -Version: 1.1.5 -Date: 2021-03-13 - Locale: - - Added German localization ---------------------------------------------------------------------------------------------------- -Version: 1.1.4 -Date: 2021-03-04 - Changes: - - Now optionally dependent on Artisanal Reskins: Library version 1.1.3, and tier labels respect Artisanal Reskins: Bob's Mods setting "Bob's Logisitcs" ---------------------------------------------------------------------------------------------------- -Version: 1.1.3 -Date: 2021-02-26 - Changes: - - Images are now losslessly compressed, instead of lossy; there is a modest increase in filesize ---------------------------------------------------------------------------------------------------- -Version: 1.1.2 -Date: 2021-02-19 - Bugfixes: - - Fixed minor visual issues with the tintable spritesheets ---------------------------------------------------------------------------------------------------- -Version: 1.1.1 -Date: 2021-02-19 - Bugfixes: - - Fixed that the version of Artisanal Reskins that was supported was the development version ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 2021-02-18 - Features: - - Initial release - - Reskins the transport belt surface to colors that match the arrows, and updates related icons, structures, and remnants - - Supports belts from Bob's Logistics, Krastorio 2, Ultimate Belts, Factorio Extended Plus and Random Factorio Things - - Supports loaders from Miniloaders, Loader Redux, Deadlock Stacking Beltboxes & Loaders and Vanilla Loaders - - Supports Artisanal Reskins tier labels and custom colors - - Public-facing API for mod authors to create their own colored transport belts, see FAQ for details \ No newline at end of file diff --git a/prismatic-belts_1.2.4/data-updates.lua b/prismatic-belts_1.2.4/data-updates.lua deleted file mode 100644 index 145b147a..00000000 --- a/prismatic-belts_1.2.4/data-updates.lua +++ /dev/null @@ -1,12 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - --- Mod Requires -require("prototypes.mods.base") -- Vanilla with LoaderRedux / Vanilla Loaders / Deadlock Loaders -require("prototypes.mods.bobs") -- Bob's Mods / Artisanal Reskins with Miniloaders / LoaderRedux / Vanilla Loaders / Deadlock Loaders -require("prototypes.mods.krastorio") -- Krastorio 2 with Miniloaders -require("prototypes.mods.ultimate-belts") -- Ultimate Belts with Miniloaders / Deadlock Loaders -require("prototypes.mods.factorio-extended-plus") -- Factorio Extended Plus with Miniloaders / LoaderRedux / Deadlock Loaders -require("prototypes.mods.random-factorio-things") -- Factorio Extended Plus with Miniloaders / Deadlock Loaders / Vanilla Loaders \ No newline at end of file diff --git a/prismatic-belts_1.2.4/data.lua b/prismatic-belts_1.2.4/data.lua deleted file mode 100644 index e3ee897e..00000000 --- a/prismatic-belts_1.2.4/data.lua +++ /dev/null @@ -1,7 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - --- Core functions -require("prototypes.functions") \ No newline at end of file diff --git a/prismatic-belts_1.2.4/info.json b/prismatic-belts_1.2.4/info.json deleted file mode 100644 index 41a042f0..00000000 --- a/prismatic-belts_1.2.4/info.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "prismatic-belts", - "version": "1.2.4", - "factorio_version": "1.1", - "package": { - "git_publish_branch": "main" - }, - "title": "Prismatic Belts", - "author": "Kirazy", - "contact": "kirazy@live.com", - "dependencies": [ - "base", - "flib", - "? boblogistics", - "? reskins-library >= 1.1.3", - "(?) reskins-bobs", - "(?) reskins-compatibility", - "? FactorioExtended-Plus-Transport", - "? Krastorio2", - "? RandomFactorioThings", - "? UltimateBelts", - "? miniloader", - "? LoaderRedux", - "? deadlock-beltboxes-loaders", - "(?) deadlock-integrations", - "? vanilla-loaders-hd" - ] -} \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/functions.lua b/prismatic-belts_1.2.4/prototypes/functions.lua deleted file mode 100644 index 07a1936a..00000000 --- a/prismatic-belts_1.2.4/prototypes/functions.lua +++ /dev/null @@ -1,319 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - --- Make our function host -if not prismatic_belts then prismatic_belts = {} end -prismatic_belts.migration = require("migration") - --- Ensure tint is normalized to between 0 and 1 -local function normalize_tint(tint) - local r = tint.r or tint[1] - local g = tint.g or tint[2] - local b = tint.b or tint[3] - local a - - if r > 255 or g > 255 or b > 255 then - r = r / 255 - g = g / 255 - b = b / 255 - a = tint.a / 255 or tint[4] / 255 or 1 - end - - return { r = r, g = g, b = b, a = a } -end - --- Adjust the alpha value of a given tint -function prismatic_belts.adjust_alpha(tint, alpha) - local tint = normalize_tint(tint) - local adjusted_tint = { r = tint.r, g = tint.g, b = tint.b, a = alpha } - return adjusted_tint -end - --- Make an icon_pictures table for reskins-library -function prismatic_belts.transport_belt_picture(tint, use_reskin_process) - local standard_icon = prismatic_belts.transport_belt_icon(tint, use_reskin_process) - local icon_pictures = { layers = {} } - - for _, layer in pairs(standard_icon) do - table.insert(icon_pictures.layers, { - filename = layer.icon, - size = layer.icon_size, - mipmaps = layer.icon_mipmaps, - scale = 0.25, - tint = layer.tint, - }) - end - - return icon_pictures -end - ----------------------------------------------------------------------------------------------------- --- BELT COLORING API ----------------------------------------------------------------------------------------------------- - --- LOGISTICS TECHNOLOGY ICONS --- Returns a complete technology icons definition --- inputs Table of parameters: --- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] --- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] --- use_reskin_process Boolean When true, uses the icons compliant with Artisanal Reskins version 2.0.0+ [Optional; default nil] -function prismatic_belts.logistics_technology_icon(inputs) - local technology_icons - if inputs.use_reskin_process then - technology_icons = { - { - icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-base.png", - icon_size = 256, - icon_mipmaps = 4, - tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) - }, - { - icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-mask.png", - icon_size = 256, - icon_mipmaps = 4, - tint = inputs.mask_tint, - }, - { - icon = "__prismatic-belts__/graphics/technology/reskins/logistics-technology-highlights.png", - icon_size = 256, - icon_mipmaps = 4, - tint = { 1, 1, 1, 0 }, - } - } - else - technology_icons = { - { - icon = "__prismatic-belts__/graphics/technology/standard/logistics-technology-base.png", - icon_size = 256, - icon_mipmaps = 4, - tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) - }, - { - icon = "__prismatic-belts__/graphics/technology/standard/logistics-technology-mask.png", - icon_size = 256, - icon_mipmaps = 4, - tint = inputs.mask_tint, - } - } - end - - return technology_icons -end - --- TRANSPORT BELT ICONS --- Returns a complete item icons definition --- tint Types/Color Color to tint the icon [Optional; default nil] --- use_reskin_process Boolean When true, uses the icons compliant with Artisanal Reskins version 2.0.0+ [Optional; default nil] -function prismatic_belts.transport_belt_icon(tint, use_reskin_process) - local item_icons - if use_reskin_process then - item_icons = { - { - icon = "__prismatic-belts__/graphics/icons/reskins/transport-belt-icon-base.png", - icon_size = 64, - icon_mipmaps = 4, - tint = tint and prismatic_belts.adjust_alpha(tint, 1), - }, - { - icon = "__prismatic-belts__/graphics/icons/reskins/transport-belt-icon-highlights.png", - icon_size = 64, - icon_mipmaps = 4, - tint = { 1, 1, 1, 0 }, - }, - } - else - item_icons = { - { - icon = "__prismatic-belts__/graphics/icons/standard/transport-belt-icon.png", - icon_size = 64, - icon_mipmaps = 4, - tint = tint and prismatic_belts.adjust_alpha(tint, 1), - }, - } - end - - return item_icons -end - --- TRANSPORT BELT ANIMATION SET --- Returns a complete belt_animation_set definition --- inputs Table of parameters: --- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] --- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] --- brighten_arrows Boolean When true, blends a white arrow with the underlying tinted belts to brighen the arrows [Optional; default nil] --- use_reskin_process Boolean When true, uses the tintable color masks consistent with Artisanal Reskins version 2.0.0+ [Optional; default nil] --- variant Integer (1|2) Spritesheet to return (1 for slow, 2 for fast) [Optional; default 1] -function prismatic_belts.transport_belt_animation_set(inputs) - local transport_belt_animation_set - local variant = inputs.variant or 1 - - -- Returns a tailored layer of the belt animation set - -- inputs Table of parameters: - -- blend_mode String Blending mode for the layer - -- directory String "standard" or "reskins", determines types of color masks to use - -- layer String "base", "mask" or "arrows" (standard), or "base", "mask" or "highlights" (reskins). Determines specific spritesheet used by the layer - -- tint Types/Color Color to tint the layer - -- variant Integer (1|2) Spritesheet to return (1 for slow, 2 for fast) - local function return_belt_animation_set_layer(inputs) - -- Point to appropriate sprite directory - local directory = inputs.directory or "standard" - - return - { - filename = "__prismatic-belts__/graphics/entity/" .. directory .. "/transport-belt-" .. inputs.variant .. "-" .. inputs.layer .. ".png", - priority = "extra-high", - width = 64, - height = 64, - frame_count = 16 * inputs.variant, - tint = inputs.tint, - blend_mode = inputs.blend_mode, - direction_count = 20, - hr_version = { - filename = "__prismatic-belts__/graphics/entity/" .. directory .. "/hr-transport-belt-" .. inputs.variant .. "-" .. inputs.layer .. ".png", - priority = "extra-high", - width = 128, - height = 128, - scale = 0.5, - frame_count = 16 * inputs.variant, - tint = inputs.tint, - blend_mode = inputs.blend_mode, - direction_count = 20, - } - } - end - - -- Setup belt transport set - if inputs.use_reskin_process then - transport_belt_animation_set = { - animation_set = { - layers = { - return_belt_animation_set_layer { directory = "reskins", layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil, variant = variant }, - return_belt_animation_set_layer { directory = "reskins", layer = "mask", tint = inputs.mask_tint, variant = variant }, - return_belt_animation_set_layer { directory = "reskins", layer = "highlights", blend_mode = "additive", variant = variant }, - } - } - } - else - transport_belt_animation_set = { - animation_set = { - layers = { - return_belt_animation_set_layer { layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil, variant = variant }, - return_belt_animation_set_layer { layer = "mask", tint = inputs.mask_tint, variant = variant }, - } - } - } - - if inputs.brighten_arrows then - table.insert(transport_belt_animation_set.animation_set.layers, return_belt_animation_set_layer { layer = "arrows", tint = util.color("4"), blend_mode = "additive-soft", variant = variant }) - end - end - - return transport_belt_animation_set -end - --- TRANSPORT BELT REMNANTS --- This function reskins (or creates as needed) appropriate transport belt remnants --- name Prototype name of the transport belt --- inputs Table of parameters: --- base_tint Types/Color Color to tint the base sprite (gears, rails) [Optional; default nil] --- mask_tint Types/Color Color to tint the mask sprite (belt surface, arrows) [Optional; default nil] --- brighten_arrows Boolean When true, blends a white arrow with the underlying tinted belts to brighen the arrows [Optional; default nil] --- use_reskin_process Boolean When true, uses the tintable color masks consistent with Artisanal Reskins version 2.0.0+ [Optional; default nil] -function prismatic_belts.create_remnant(name, inputs) - local remnant_layers - - -- Returns a tailored layer of the belt remnants - -- inputs Table of parameters: - -- blend_mode String Blending mode for the layer - -- directory String "standard" or "reskins", determines types of color masks to use - -- layer String "base", "mask" or "arrows" (standard), or "base", "mask" or "highlights" (reskins). Determines specific spritesheet used by the layer - -- tint Types/Color Color to tint the layer - local function return_remnant_layer(inputs) - -- Point to appropriate sprite directory - local directory = inputs.directory or "standard" - - return - { - filename = "__prismatic-belts__/graphics/entity/" .. directory .. "/remnants/transport-belt-remnants-" .. inputs.layer .. ".png", - line_length = 1, - width = 54, - height = 52, - frame_count = 1, - variation_count = 1, - axially_symmetrical = false, - direction_count = 4, - tint = inputs.tint, - blend_mode = inputs.blend_mode, - shift = util.by_pixel(1, 0), - hr_version = { - filename = "__prismatic-belts__/graphics/entity/" .. directory .. "/remnants/hr-transport-belt-remnants-" .. inputs.layer .. ".png", - line_length = 1, - width = 106, - height = 102, - frame_count = 1, - variation_count = 1, - axially_symmetrical = false, - direction_count = 4, - tint = inputs.tint, - blend_mode = inputs.blend_mode, - shift = util.by_pixel(1, -0.5), - scale = 0.5, - } - } - end - - -- Setup belt transport set - if inputs.use_reskin_process then - remnant_layers = { - return_remnant_layer { directory = "reskins", layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil }, - return_remnant_layer { directory = "reskins", layer = "mask", tint = inputs.mask_tint }, - return_remnant_layer { directory = "reskins", layer = "highlights", blend_mode = "additive" }, - } - else - remnant_layers = { - return_remnant_layer { layer = "base", tint = inputs.base_tint and prismatic_belts.adjust_alpha(inputs.base_tint, 1) or nil }, - return_remnant_layer { layer = "mask", tint = inputs.mask_tint }, - } - - if inputs.brighten_arrows then - table.insert(remnant_layers, return_remnant_layer { layer = "arrows", tint = util.color("4"), blend_mode = "additive-soft" }) - end - end - - -- Fetch remnant - local remnants = data.raw["corpse"][name .. "-remnants"] - - -- If there is no existing remnant, create one - if not remnants then - remnants = { - type = "corpse", - name = "prismatic-belts-" .. name .. "-remnants", - icons = data.raw["transport-belt"][name].icons, - icon = data.raw["transport-belt"][name].icon, - icon_size = data.raw["transport-belt"][name].icon_size, - icon_mipmaps = data.raw["transport-belt"][name].icon_mipmaps, - flags = { "placeable-neutral", "not-on-map" }, - subgroup = "belt-remnants", - order = (data.raw.item[name] and data.raw.item[name].order) and data.raw.item[name].order .. "-a[" .. name .. "-remnants]" or "a-a-a", - selection_box = { { -0.5, -0.5 }, { 0.5, 0.5 } }, - tile_width = 1, - tile_height = 1, - selectable_in_game = false, - time_before_removed = 60 * 60 * 15, -- 15 minutes - final_render_layer = "remnants", - animation = make_rotated_animation_variations_from_sheet(2, { layers = remnant_layers }) - } - - data:extend({ remnants }) - - -- Assign the corpse - data.raw["transport-belt"][name].corpse = "prismatic-belts-" .. name .. "-remnants" - else - remnants.icons = data.raw["transport-belt"][name].icons - remnants.icon = data.raw["transport-belt"][name].icon - remnants.icon_size = data.raw["transport-belt"][name].icon_size - remnants.animation = make_rotated_animation_variations_from_sheet(2, { layers = remnant_layers }) - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/migration.lua b/prismatic-belts_1.2.4/prototypes/migration.lua deleted file mode 100644 index 4288baa2..00000000 --- a/prismatic-belts_1.2.4/prototypes/migration.lua +++ /dev/null @@ -1,111 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - --- Import flib migration module -local migration = require("__flib__.migration") - --- Setup additional version comparison functions - ---- Check if current_version is newer than target_version --- @tparam string current_version --- @tparam string target_version --- @tparam[opt=%02d] string format --- @treturn boolean|nil -function migration.is_newer_version(current_version, target_version, format) - local v1 = migration.format_version(current_version, format) - local v2 = migration.format_version(target_version, format) - - if v1 and v2 then - if v1 > v2 then - return true - else - return false - end - end - - return nil -end - ---- Check if current_version is equal to or newer than target_version --- @tparam string current_version --- @tparam string target_version --- @tparam[opt=%02d] string format --- @treturn boolean|nil -function migration.is_version_or_newer(current_version, target_version, format) - local v1 = migration.format_version(current_version, format) - local v2 = migration.format_version(target_version, format) - - if v1 and v2 then - if v1 >= v2 then - return true - else - return false - end - end - - return nil -end - ---- Check if current_version is equal to target_version --- @tparam string current_version --- @tparam string target_version --- @tparam[opt=%02d] string format --- @treturn boolean|nil -function migration.is_version(current_version, target_version, format) - local v1 = migration.format_version(current_version, format) - local v2 = migration.format_version(target_version, format) - - if v1 and v2 then - if v1 == v2 then - return true - else - return false - end - end - - return nil -end - ---- Check if current_version is equal to or older than target_version --- @tparam string current_version --- @tparam string target_version --- @tparam[opt=%02d] string format --- @treturn boolean|nil -function migration.is_version_or_older(current_version, target_version, format) - local v1 = migration.format_version(current_version, format) - local v2 = migration.format_version(target_version, format) - - if v1 and v2 then - if v1 <= v2 then - return true - else - return false - end - end - - return nil -end - ---- Check if current_version is older than target_version --- @tparam string current_version --- @tparam string target_version --- @tparam[opt=%02d] string format --- @treturn boolean|nil -function migration.is_older_version(current_version, target_version, format) - local v1 = migration.format_version(current_version, format) - local v2 = migration.format_version(target_version, format) - - if v1 and v2 then - if v1 < v2 then - return true - else - return false - end - end - - return nil -end - -return migration \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/base.lua b/prismatic-belts_1.2.4/prototypes/mods/base.lua deleted file mode 100644 index df8c6961..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/base.lua +++ /dev/null @@ -1,192 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - --- Setup belt animation sets for vanilla entities -local belt_animation_sets = { - ["transport-belt"] = { - animation_set = { - filename = "__prismatic-belts__/graphics/entity/base/transport-belt/transport-belt.png", - priority = "extra-high", - width = 64, - height = 64, - frame_count = 16, - direction_count = 20, - hr_version = { - filename = "__prismatic-belts__/graphics/entity/base/transport-belt/hr-transport-belt.png", - priority = "extra-high", - width = 128, - height = 128, - scale = 0.5, - frame_count = 16, - direction_count = 20 - } - } - }, - ["fast-transport-belt"] = { - animation_set = { - filename = "__prismatic-belts__/graphics/entity/base/fast-transport-belt/fast-transport-belt.png", - priority = "extra-high", - width = 64, - height = 64, - frame_count = 32, - direction_count = 20, - hr_version = { - filename = "__prismatic-belts__/graphics/entity/base/fast-transport-belt/hr-fast-transport-belt.png", - priority = "extra-high", - width = 128, - height = 128, - scale = 0.5, - frame_count = 32, - direction_count = 20 - } - } - }, - ["express-transport-belt"] = { - animation_set = { - filename = "__prismatic-belts__/graphics/entity/base/express-transport-belt/express-transport-belt.png", - priority = "extra-high", - width = 64, - height = 64, - frame_count = 32, - direction_count = 20, - hr_version = { - filename = "__prismatic-belts__/graphics/entity/base/express-transport-belt/hr-express-transport-belt.png", - priority = "extra-high", - width = 128, - height = 128, - scale = 0.5, - frame_count = 32, - direction_count = 20 - } - } - }, -} - -local tiers = { - [""] = { technology = "logistics" }, - ["fast-"] = { technology = "logistics-2" }, - ["express-"] = { technology = "logistics-3" }, -} - -if mods["reskins-library"] then - tiers[""].tier = 1 - tiers["fast-"].tier = 2 - tiers["express-"].tier = 3 -end - -if mods["miniloader"] then - local chute = data.raw["loader-1x1"]["chute-miniloader-loader"] - - if chute then - chute.belt_animation_set = belt_animation_sets["transport-belt"] - end -end - -for prefix, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"][prefix .. "transport-belt"], - splitter = data.raw["splitter"][prefix .. "splitter"], - underground = data.raw["underground-belt"][prefix .. "underground-belt"], - loader = data.raw["loader"][prefix .. "loader"], - -- Miniloader - miniloader = data.raw["loader-1x1"][prefix .. "miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"][prefix .. "filter-miniloader-loader"], - -- Deadlock Stacking Beltboxes and Compact loaders - deadlock_loader = data.raw["loader-1x1"][prefix .. "transport-belt-loader"], - -- Krastorio - krastorio_loader = data.raw["loader-1x1"]["kr-" .. prefix .. "loader"], - } - - -- Reskin the belt item - local belt_item = data.raw["item"][prefix .. "transport-belt"] - if belt_item then - local icons = { - { - icon = "__prismatic-belts__/graphics/icons/base/" .. prefix .. "transport-belt.png", - icon_size = 64, - icon_mipmaps = 4, - } - } - - -- Append tier labels for reskins-library - if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then - reskins.lib.append_tier_labels(properties.tier, { icon = icons, tier_labels = reskins.lib.setting("reskins-bobs-do-belt-entity-tier-labeling") and true or false }) - - local icon_picture = { - filename = "__prismatic-belts__/graphics/icons/base/" .. prefix .. "transport-belt.png", - size = 64, - mipmaps = 4, - scale = 0.25, - } - - reskins.lib.assign_icons(prefix .. "transport-belt", { icon = icons, icon_picture = icon_picture, make_icon_pictures = true }) - else - belt_item.icons = icons - end - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = belt_animation_sets[prefix .. "transport-belt"] - end - end - - -- Setup remnants - local remnants = data.raw["corpse"][prefix .. "transport-belt-remnants"] - - if remnants then - if entities.belt then - remnants.icons = entities.belt.icons - remnants.icon = entities.belt.icon - remnants.icon_size = entities.belt.icon_size - end - - remnants.animation = make_rotated_animation_variations_from_sheet(2, { - filename = "__prismatic-belts__/graphics/entity/base/" .. prefix .. "transport-belt/remnants/" .. prefix .. "transport-belt-remnants.png", - line_length = 1, - width = 54, - height = 52, - frame_count = 1, - variation_count = 1, - axially_symmetrical = false, - direction_count = 4, - shift = util.by_pixel(1, 0), - hr_version = { - filename = "__prismatic-belts__/graphics/entity/base/" .. prefix .. "transport-belt/remnants/hr-" .. prefix .. "transport-belt-remnants.png", - line_length = 1, - width = 106, - height = 102, - frame_count = 1, - variation_count = 1, - axially_symmetrical = false, - direction_count = 4, - shift = util.by_pixel(1, -0.5), - scale = 0.5 - } - }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][properties.technology] - - if technology then - local icons = { - { - icon = "__prismatic-belts__/graphics/technology/base/" .. properties.technology .. ".png", - icon_size = 256, - icon_mipmaps = 4, - } - } - - technology.icons = icons - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/bobs.lua b/prismatic-belts_1.2.4/prototypes/mods/bobs.lua deleted file mode 100644 index 398f0350..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/bobs.lua +++ /dev/null @@ -1,99 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - -if not mods["boblogistics"] then return end - -local tiers = { - ["basic-"] = { tint = util.color("7d7d7dd1"), variant = 1, loader = "basic-", technology = "logistics-0" }, - ["turbo-"] = { tint = util.color("a510e5d1"), variant = 2, loader = "purple-", technology = "logistics-4" }, - ["ultimate-"] = { tint = util.color("16f263d1"), variant = 2, loader = "green-", technology = "logistics-5" }, -} - --- Compatibility with Bob's Logistics Belt Reskin -if mods["boblogistics-belt-reskin"] then - tiers["basic-"].tint = util.color("e7e7e7d1") - tiers["turbo-"].tint = util.color("df1ee5d1") -end - --- Compatibility with Artisanal Reskins 1.1.3+ -if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then - -- Setup standard properties - tiers["basic-"].tier = 0 - tiers["turbo-"].tier = 4 - tiers["ultimate-"].tier = 5 - - tiers["basic-"].tint = reskins.lib.belt_tint_index[0] - tiers["turbo-"].tint = reskins.lib.belt_tint_index[4] - tiers["ultimate-"].tint = reskins.lib.belt_tint_index[5] - - -- Check for custom colors, update tint and tier information if so - if reskins.lib.setting("reskins-lib-customize-tier-colors") then - tiers[""] = { tint = reskins.lib.belt_tint_index[1], variant = 1, loader = "", tier = 1, technology = "logistics" } - tiers["fast-"] = { tint = reskins.lib.belt_tint_index[2], variant = 2, loader = "fast-", tier = 2, technology = "logistics-2" } - tiers["express-"] = { tint = reskins.lib.belt_tint_index[3], variant = 2, loader = "express-", tier = 3, technology = "logistics-3" } - end - - -- Compatibility with Artisanal Reskins 2.0.0+ - if prismatic_belts.migration.is_version_or_newer(mods["reskins-library"], "2.0.0") then - for _, properties in pairs(tiers) do - properties.use_reskin_process = true - end - end -end - --- Setup all the entities to use the updated belt animation sets -for prefix, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"][prefix .. "transport-belt"], - splitter = data.raw["splitter"][prefix .. "splitter"], - underground = data.raw["underground-belt"][prefix .. "underground-belt"], - loader = data.raw["loader"][properties.loader .. "loader"], - -- Miniloader - miniloader = data.raw["loader-1x1"][prefix .. "miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"][prefix .. "filter-miniloader-loader"], - -- Deadlock Stacking Beltboxes and Compact loaders - deadlock_loader = data.raw["loader-1x1"][prefix .. "transport-belt-loader"] - } - - -- Reskin the belt item - local belt_item = data.raw["item"][prefix .. "transport-belt"] - if belt_item then - local icons = prismatic_belts.transport_belt_icon(properties.tint, properties.use_reskin_process) - - -- Append tier labels for reskins-library - if mods["reskins-library"] and not (reskins.bobs and (reskins.bobs.triggers.logistics.entities == false)) then - reskins.lib.append_tier_labels(properties.tier, { icon = icons, tier_labels = reskins.lib.setting("reskins-bobs-do-belt-entity-tier-labeling") and true or false }) - - reskins.lib.assign_icons(prefix .. "transport-belt", { icon = icons, icon_picture = prismatic_belts.transport_belt_picture(properties.tint, properties.use_reskin_process), make_icon_pictures = true }) - else - belt_item.icons = icons - end - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({ mask_tint = properties.tint, variant = properties.variant, use_reskin_process = properties.use_reskin_process }) - end - end - - -- Setup remnants - if entities.belt then - prismatic_belts.create_remnant(prefix .. "transport-belt", { mask_tint = properties.tint }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][properties.technology] - - if technology then - technology.icons = prismatic_belts.logistics_technology_icon({ mask_tint = properties.tint, use_reskin_process = properties.use_reskin_process }) - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/factorio-extended-plus.lua b/prismatic-belts_1.2.4/prototypes/mods/factorio-extended-plus.lua deleted file mode 100644 index f5cef6ae..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/factorio-extended-plus.lua +++ /dev/null @@ -1,57 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - -if not mods["FactorioExtended-Plus-Transport"] then return end - -local tiers = { - ["mk1"] = { tint = util.color("2cd529d1"), technology = "logistics-4" }, - ["mk2"] = { tint = util.color("9a2cc9d1"), technology = "logistics-5" }, -} - --- Setup all the entities to use the updated belt animation sets -for tier, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"]["rapid-transport-belt-" .. tier], - splitter = data.raw["splitter"]["rapid-splitter-" .. tier], - underground = data.raw["underground-belt"]["rapid-transport-belt-to-ground-" .. tier], - loader = data.raw["loader"]["rapid-" .. tier .. "-loader"], - -- Miniloader - miniloader = data.raw["loader-1x1"]["rapid-" .. tier .. "-miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"]["rapid-" .. tier .. "-filter-miniloader-loader"], - -- Deadlock Stacking Beltboxes and Compact loaders - deadlock_loader = data.raw["loader-1x1"]["rapid-transport-belt-" .. tier .. "-loader"] - } - - -- Reskin the belt item - local belt_item = data.raw["item"]["rapid-transport-belt-" .. tier] - if belt_item then - belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({ mask_tint = properties.tint, 2 }) - end - end - - -- Setup remnants - if entities.belt then - prismatic_belts.create_remnant("rapid-transport-belt-" .. tier, { mask_tint = properties.tint }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][properties.technology] - - if technology then - technology.icons = prismatic_belts.logistics_technology_icon({ mask_tint = properties.tint }) - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/krastorio.lua b/prismatic-belts_1.2.4/prototypes/mods/krastorio.lua deleted file mode 100644 index 20a6e266..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/krastorio.lua +++ /dev/null @@ -1,55 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - -if not mods["Krastorio2"] then return end - -local tiers = { - ["kr-advanced-"] = { tint = util.color("3ade21d1"), variant = 2, technology = "kr-logistic-4" }, - ["kr-superior-"] = { tint = util.color("a30bd6d1"), variant = 2, technology = "kr-logistic-5" }, -} - --- Setup all the entities to use the updated belt animation sets -for prefix, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"][prefix .. "transport-belt"], - splitter = data.raw["splitter"][prefix .. "splitter"], - underground = data.raw["underground-belt"][prefix .. "underground-belt"], - loader = data.raw["loader-1x1"][prefix .. "loader"], - -- Miniloader - miniloader = data.raw["loader-1x1"][prefix .. "miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"][prefix .. "filter-miniloader-loader"], - } - - -- Reskin the belt item - local belt_item = data.raw["item"][prefix .. "transport-belt"] - if belt_item then - belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({ mask_tint = properties.tint, variant = properties.variant }) - end - end - - -- Setup remnants - if entities.belt then - prismatic_belts.create_remnant(prefix .. "transport-belt", { mask_tint = properties.tint }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][properties.technology] - - if technology then - technology.icons = prismatic_belts.logistics_technology_icon({ mask_tint = properties.tint }) - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/random-factorio-things.lua b/prismatic-belts_1.2.4/prototypes/mods/random-factorio-things.lua deleted file mode 100644 index 4685fde1..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/random-factorio-things.lua +++ /dev/null @@ -1,57 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - -if not mods["RandomFactorioThings"] then return end - -local tiers = { - ["nuclear-"] = { tint = util.color("00ff00") }, - ["plutonium-"] = { tint = util.color("00e1ffde") }, -} - --- Setup all the entities to use the updated belt animation sets -for prefix, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"][prefix .. "transport-belt"], - splitter = data.raw["splitter"][prefix .. "splitter"], - underground = data.raw["underground-belt"][prefix .. "underground-belt"], - loader = data.raw["loader-1x1"][prefix .. "loader"], - -- Miniloader - miniloader = data.raw["loader-1x1"][prefix .. "miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"][prefix .. "filter-miniloader-loader"], - -- Deadlock Stacking Beltboxes and Compact loaders - deadlock_loader = data.raw["loader-1x1"][prefix .. "transport-belt-loader"] - } - - -- Reskin the belt item - local belt_item = data.raw["item"][prefix .. "transport-belt"] - if belt_item then - belt_item.icons = prismatic_belts.transport_belt_icon(properties.tint) - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({ mask_tint = properties.tint, variant = 2 }) - end - end - - -- Setup remnants - if entities.belt then - prismatic_belts.create_remnant(prefix .. "transport-belt", { mask_tint = properties.tint }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][prefix .. "logistics"] - - if technology then - technology.icons = prismatic_belts.logistics_technology_icon({ mask_tint = properties.tint }) - end -end \ No newline at end of file diff --git a/prismatic-belts_1.2.4/prototypes/mods/ultimate-belts.lua b/prismatic-belts_1.2.4/prototypes/mods/ultimate-belts.lua deleted file mode 100644 index ad73b21b..00000000 --- a/prismatic-belts_1.2.4/prototypes/mods/ultimate-belts.lua +++ /dev/null @@ -1,67 +0,0 @@ --- Copyright (c) 2023 Kirazy --- Part of Prismatic Belts --- --- See LICENSE.md in the project directory for license information. - -if not mods["UltimateBelts"] then return end - -local tiers = { - ["ultra-fast-"] = { tint = util.color("00b30cff") }, - ["extreme-fast-"] = { tint = util.color("e00000ff") }, - ["ultra-express-"] = { tint = util.color("3604b5e8") }, - ["extreme-express-"] = { tint = util.color("002bffff") }, - ["ultimate-"] = { tint = util.color("00ffddd1") }, - ["original-ultimate-"] = { tint = util.color("00ffddd1") }, -} - --- Setup all the entities to use the updated belt animation sets -for prefix, properties in pairs(tiers) do - -- Fetch entities - local entities = { - belt = data.raw["transport-belt"][prefix .. "belt"], - splitter = data.raw["splitter"][prefix .. "splitter"], - underground = data.raw["underground-belt"][prefix .. "underground-belt"], - -- Miniloader - miniloader = data.raw["loader-1x1"]["ub-" .. prefix .. "miniloader-loader"], - filter_miniloader = data.raw["loader-1x1"]["ub-" .. prefix .. "filter-miniloader-loader"], - -- Deadlock Stacking Beltboxes and Compact loaders - deadlock_loader = data.raw["loader-1x1"][prefix .. "belt-loader"] - } - - -- Reskin the belt item - local belt_item = data.raw["item"][prefix .. "belt"] - if belt_item then - belt_item.icons = { - { - icon = "__prismatic-belts__/graphics/icons/standard/ultimate-transport-belt-icon.png", - icon_size = 64, - icon_mipmaps = 4, - tint = prismatic_belts.adjust_alpha(properties.tint, 1), - }, - } - - -- Update entity icon to match - if entities.belt then - entities.belt.icons = belt_item.icons - end - end - - -- Reskin all related entity types - for _, entity in pairs(entities) do - if entity then - entity.belt_animation_set = prismatic_belts.transport_belt_animation_set({ base_tint = util.color("404040"), mask_tint = properties.tint, variant = 2, brighten_arrows = true }) - end - end - - -- Setup remnants - if entities.belt then - prismatic_belts.create_remnant(prefix .. "belt", { base_tint = util.color("404040"), mask_tint = properties.tint, brighten_arrows = true }) - end - - -- Setup logistics technologies - local technology = data.raw["technology"][prefix .. "logistics"] - - if technology then - technology.icons = prismatic_belts.logistics_technology_icon({ base_tint = util.color("404040"), mask_tint = properties.tint }) - end -end \ No newline at end of file diff --git a/qol_research_3.3.3/categories.lua b/qol_research/categories.lua similarity index 100% rename from qol_research_3.3.3/categories.lua rename to qol_research/categories.lua diff --git a/qol_research/changelog.txt b/qol_research/changelog.txt new file mode 100644 index 00000000..d17df027 --- /dev/null +++ b/qol_research/changelog.txt @@ -0,0 +1,157 @@ +--------------------------------------------------------------------------------------------------- +Version: 3.3.0 +Date: 29. 11. 2020 + Changes: + - Update to Factorio 1.1. +--------------------------------------------------------------------------------------------------- +Version: 3.2.1 +Date: 07. 11. 2020 + Features: + - Add compatibility script that partially stops Krastorio2 from rewriting the tech tree. This should allow you to make custom configurations work with that mod. +--------------------------------------------------------------------------------------------------- +Version: 3.2.0 +Date: 26. 09. 2020 + Changes: + - Update to Factorio 1.0. + Bugfixes: + - Fix enable infinite research setting not working. +--------------------------------------------------------------------------------------------------- +Version: 3.1.1 +Date: 27. 05. 2020 + Bugfixes: + - Fix typo that wrongly switched to Space Exploration configuration. +--------------------------------------------------------------------------------------------------- +Version: 3.1.0 +Date: 27. 05. 2020 + Features: + - Allow modpacks to have the configuration stored in their mod, instead of in QoL Research. +--------------------------------------------------------------------------------------------------- +Version: 3.0.0 +Date: 11. 04. 2020 + Features: + - Add a custom configuration tool at https://qol-research.aidiakapi.com/ + - Add ability to implement default configuration overrides for modpacks, can be disabled with a setting. + - Earendel created a configuration override for his mod Space Exploration, integrating biological science recipes. +--------------------------------------------------------------------------------------------------- +Version: 2.5.1 +Date: 18. 03. 2020 + Features: + - Added /qol-reset-technology-effects command. + --------------------------------------------------------------------------------------------------- +Version: 2.5.0 +Date: 17. 03. 2020 + Changes: + - Remove character logistic upgrades as 0.18.13 removed them too. +--------------------------------------------------------------------------------------------------- +Version: 2.4.0 +Date: 15. 02. 2020 + Features: + - Updated for 0.18. +--------------------------------------------------------------------------------------------------- +Version: 2.3.1 +Date: 04. 03. 2019 + Changes: + - Buff mining speed research to be closer to 0.16's values. +--------------------------------------------------------------------------------------------------- +Version: 2.3.0 +Date: 15. 02. 2019 + Features: + - Updated for 0.17. + Changes: + - Increase levels in upper two tiers of inventory size upgrades from 2 to 4, this is to compensate for the lack of toolbelt research. + - Reduced the levels per tier of player reach from 4 to 3, the base game now has a reach of 10, instead of 6. + - Crafting speed, player mining speed, player reach's higher tier researches now requires production instead of utility science packs. + - Disable verbose logging by default. + Removed: + - Toolbelt upgrades (this is now in the base game under Options => Interface => Active quickbars). + - Settings to disable a particular category, this setting was rather redundant and confusing. +--------------------------------------------------------------------------------------------------- +Version: 2.2.6 +Date: 11. 06. 2018 + Bugfixes: + - Fixed typo which caused infinite research for inventory space to be 10 times as expensive. Thanks to Doublespin for reporting and fixing! +--------------------------------------------------------------------------------------------------- +Version: 2.2.5 +Date: 10. 05. 2018 + Bugfixes: + - Apply bonuses from settings when starting a new campaign. +--------------------------------------------------------------------------------------------------- +Version: 2.2.4 +Date: 05. 03. 2018 + Changes: + - Add explanation to internal technologies. Still waiting for a response from the devs. +--------------------------------------------------------------------------------------------------- +Version: 2.2.3 +Date: 28. 01. 2018 + Features: + - Added character logistic request slot bonuses. + - Added ability to specify prerequisites in custom config (see config.lua). +--------------------------------------------------------------------------------------------------- +Version: 2.2.1 +Date: 27. 01. 2018 + Changes: + - Release 0.15 compatible version. +--------------------------------------------------------------------------------------------------- +Version: 2.2.0 +Date: 25. 01. 2018 + Features: + - Added flag to disable infinite research. + Balancing: + - Reduced the bonuses in the default configuration from green and blue science tiers by 5% for player crafting and mining speed. + - Increased the cost of infinite research tiers. + - Added infinite research tiers to inventory size. + Compatibility: + - Bonuses are now applied as technology effects, resolves compatibility issues with mods that invoke reset_technology_effects. + - Compatibility with other mods should now work across the board, however, if startup settings are changed, the mod will invoke reset_technology_effects during on_configuration_changed. +--------------------------------------------------------------------------------------------------- +Version: 2.1.0 +Date: 07. 01. 2018 + Features: + - Created new higher resolution icons for half of the technologies. +--------------------------------------------------------------------------------------------------- +Version: 2.0.0 +Date: 07. 01. 2018 + Bugfixes: + - Fixed crash when if a negative value were to be applied. + - Fixed issues with values not being applied properly upon configuration changes. + Compatibility: + - Changed to overwrite force modifier values, therefore becoming incompatible with mods that also do that. +--------------------------------------------------------------------------------------------------- +Version: 1.2.0 +Date: 06. 01. 2018 + Features: + - Added command to reset bonuses. Use /qol-reset. + Bugfixes: + - Fixed incorrect bonus value (bonuses applied multiple times) by invoking reset upon configuration changes. +--------------------------------------------------------------------------------------------------- +Version: 1.1.0 +Date: 15. 12. 2017 + Features: + - Updated for 0.16. +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 20. 10. 2017 + Features: + - Added ability to have fractional multipliers as runtime setting for integer bonuses (quickbars, player reach, inventory size). + Changes: + - Restructured the tech tree to have better support for custom configuration trees. + - Removed requirement for on_tick handler, the mod should now have no impact on UPS whatsoever. + - Renamed Mining Speed to Player Mining Speed. + Bugfixes: + - Fixed inventory explosion in even more situations. + Compatibility: + - Added heuristic to determine if another mod invoked reset_technology_effects, and if so, reset the bonuses. + Balancing: + - Stronger early-game upgrades, and lesser late-game upgrades. + - Infinite science requires exponential amounts of science packs, preventing it from becoming extremely OP in megabases. + - Slightly increase overall costs. +--------------------------------------------------------------------------------------------------- +Version: 0.1.4 +Date: 08. 08. 2017 + Bugfixes: + - Fixed inventory explosion by deferring changes to the properties. +--------------------------------------------------------------------------------------------------- +Version: 0.1.3 +Date: 20. 07. 2017 + Features: + - Added detailed descriptions to all technologies. diff --git a/qol_research_3.3.3/config_control.lua b/qol_research/config_control.lua similarity index 100% rename from qol_research_3.3.3/config_control.lua rename to qol_research/config_control.lua diff --git a/qol_research_3.3.3/config_data.lua b/qol_research/config_data.lua similarity index 77% rename from qol_research_3.3.3/config_data.lua rename to qol_research/config_data.lua index 7aa542d1..926c90d3 100644 --- a/qol_research_3.3.3/config_data.lua +++ b/qol_research/config_data.lua @@ -10,10 +10,6 @@ local overrides = { { mod_names = { 'space-exploration' }, config = [[1,23,crafting-speed,150*L,automation-science-pack,logistic-science-pack,175*L,chemical-science-pack,225*L,space-science-pack,300*L,se-biological-science-pack,10*L,se-space-catalogue-biological-2,100+20*L,se-space-catalogue-biological-3,250+50*L,se-space-catalogue-biological-4,500+100*L,se-deep-space-science-pack,500*2^L,inventory-size,mining-speed,movement-speed,player-reach,5,1,9,5,5,0,0,2,10,1,1,3,5,5,3,1,4,5,15,2,1,3,1,4,5,5,3,1,6,7,20,3,1,3,1,4,1,6,5,5,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,5,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,5,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,10,5,5,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,10,5,5,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,10,0,5,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,10,1,18,20,9,5,2,0,0,2,10,1,1,3,5,2,3,1,4,5,15,2,1,3,1,4,5,2,3,1,6,7,20,3,1,3,1,4,1,6,5,2,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,2,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,10,0,2,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,10,1,18,21,9,5,10,0,0,2,10,1,1,3,5,10,3,1,4,5,15,2,1,3,1,4,5,10,3,1,6,7,20,3,1,3,1,4,1,6,5,10,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,10,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,10,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,10,5,10,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,10,5,10,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,10,0,10,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,10,1,18,22,9,5,2,0,0,2,10,1,1,3,5,2,3,1,4,5,15,2,1,3,1,4,5,2,3,1,6,7,20,3,1,3,1,4,1,6,5,2,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,2,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,10,5,2,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,10,0,2,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,10,1,18,23,9,5,1,0,0,2,10,1,1,3,5,1,3,1,4,5,15,2,1,3,1,4,5,1,3,1,6,7,20,3,1,3,1,4,1,6,5,1,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,1,3,1,10,11,30,5,1,3,1,4,1,6,1,8,1,10,5,1,5,1,12,13,30,5,1,3,1,4,1,6,1,8,1,10,5,1,5,1,14,15,30,5,1,3,1,4,1,6,1,8,1,10,5,1,5,1,16,17,30,5,1,3,1,4,1,6,1,8,1,10,0,1,5,1,18,19,30,6,1,3,1,4,1,6,1,8,1,10,1,18]], - }, - { - mod_names = { 'Krastorio2' }, - config = [[1,20,crafting-speed,150*L,automation-science-pack,logistic-science-pack,175*L,chemical-science-pack,225*L,production-science-pack,300*L,space-science-pack,250*2^L,utility-science-pack,matter-tech-card,advanced-tech-card,singularity-tech-card,inventory-size,500*2^L,mining-speed,movement-speed,player-reach,5,1,7,5,20,0,0,2,10,1,1,3,5,10,3,1,4,5,15,2,1,3,1,4,5,5,3,1,6,7,20,3,1,3,1,4,1,6,5,5,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,5,5,1,10,11,30,4,1,12,1,8,1,10,1,13,10,5,5,1,10,11,30,5,1,12,1,8,1,10,1,13,1,14,0,5,5,1,10,11,30,6,1,12,1,8,1,10,1,13,1,14,1,15,16,7,2,5,0,0,2,10,1,1,3,2,5,1,1,4,5,15,2,1,3,1,4,4,5,1,1,6,7,20,3,1,3,1,4,1,6,4,5,2,1,12,9,25,4,1,3,1,4,1,6,1,12,4,5,4,1,10,17,30,4,1,12,1,8,1,10,1,13,8,5,4,1,10,17,30,5,1,12,1,8,1,10,1,13,1,14,0,5,4,1,10,17,30,6,1,12,1,8,1,10,1,13,1,14,1,15,18,7,5,30,0,0,2,10,1,1,3,5,20,3,1,4,5,15,2,1,3,1,4,5,10,3,1,6,7,20,3,1,3,1,4,1,6,5,10,3,1,8,9,25,4,1,3,1,4,1,6,1,8,5,10,5,1,10,11,30,4,1,12,1,8,1,10,1,13,10,10,5,1,10,11,30,5,1,12,1,8,1,10,1,13,1,14,0,10,5,1,10,11,30,6,1,12,1,8,1,10,1,13,1,14,1,15,19,7,4,5,0,0,2,10,1,1,3,4,5,2,1,4,5,15,2,1,3,1,4,4,5,2,1,6,7,20,3,1,3,1,4,1,6,4,5,2,1,12,9,25,4,1,3,1,4,1,6,1,12,4,5,4,1,10,11,30,4,1,12,1,8,1,10,1,13,10,5,4,1,10,11,30,5,1,12,1,8,1,10,1,13,1,14,0,5,4,1,10,11,30,6,1,12,1,8,1,10,1,13,1,14,1,15,20,7,3,1,0,0,2,10,1,1,3,3,1,2,1,4,5,15,2,1,3,1,4,3,1,2,1,6,7,20,3,1,3,1,4,1,6,3,1,2,1,8,9,25,4,1,3,1,4,1,6,1,8,3,1,3,1,10,11,30,4,1,12,1,8,1,10,1,13,3,1,3,1,10,11,30,5,1,12,1,8,1,10,1,13,1,14,3,1,3,1,10,11,30,6,1,12,1,8,1,10,1,13,1,14,1,15]] } } @@ -26,12 +22,14 @@ do active_mods = mods end is_matching_override = function (override) + local matched_all = true for _, mod_name in ipairs(override.mod_names) do if not active_mods[mod_name] then - return false + matched_all = false + break end end - return true + return matched_all end end local get_config_from_external diff --git a/qol_research_3.3.3/config_decoder.lua b/qol_research/config_decoder.lua similarity index 100% rename from qol_research_3.3.3/config_decoder.lua rename to qol_research/config_decoder.lua diff --git a/qol_research_3.3.3/control.lua b/qol_research/control.lua similarity index 100% rename from qol_research_3.3.3/control.lua rename to qol_research/control.lua diff --git a/qol_research/data.lua b/qol_research/data.lua new file mode 100644 index 00000000..779e3049 --- /dev/null +++ b/qol_research/data.lua @@ -0,0 +1,110 @@ +local categories = require('categories') +local data_utils = require('data_utils') +local config = require('config_data') +local setting_formats = require('defines.setting_name_formats') +local technology_formats = require('defines.technology_name_formats') + +local ordering_table +do + local count = categories.count + for _, tiers in pairs(config) do + count = math.max(count, #tiers) + for _, tier in ipairs(tiers) do + count = math.max(tier.technology_count) + end + end + ordering_table = data_utils.create_ordering_table(count) +end + +local player_technologies = {} +local function create_player_technologies_for_category(category, tiers) + if not settings.startup[setting_formats.research_enabled:format(category.name)].value then + return + end + + local technology_icon = ('__qol_research__/graphics/%s.png'):format(category.name) + for tier_index, tier in ipairs(tiers) do + local localised_description = { + ('technology-description.qol-%s'):format(category.name), + category.description_factory(tier.bonus_per_technology) + } + + for technology_index = 1, math.max(tier.technology_count, 1) do + local prerequisites + if technology_index == 1 then + prerequisites = tier.prerequisites + else + prerequisites = { technology_formats.player:format(category.name, tier_index, technology_index - 1) } + end + + player_technologies[#player_technologies + 1] = { + type = 'technology', + name = technology_formats.player:format(category.name, tier_index, technology_index), + localised_description = localised_description, + icon = technology_icon, + icon_size = 128, + prerequisites = prerequisites, + unit = + { + count_formula = tier.cycle_count_formula, + time = tier.cycle_time, + ingredients = tier.cycle_ingredients, + }, + upgrade = true, + order = ('qol-research-%s-%s-%s'):format( + ordering_table[category.index], + ordering_table[tier_index], + ordering_table[technology_index] + ), + } + end + + -- Special case for infinite research + if tier.technology_count == 0 then + player_technologies[#player_technologies].max_level = 'infinite' + end + end +end +for category_name, tiers in pairs(config) do + create_player_technologies_for_category(categories.map[category_name], tiers) +end + +if #player_technologies > 0 then + data:extend(player_technologies) +end + +local internal_technologies = {} +for _, category in ipairs(categories.list) do + for _, effect in ipairs(category.effects) do + for index = 1, category.internal_technology_spec.count do + internal_technologies[#internal_technologies + 1] = { + type = 'technology', + name = technology_formats.internal:format(effect, index), + localised_name = { 'qol-internal-tech.name' }, + localised_description = { 'qol-internal-tech.description' }, + icon = '__qol_research__/graphics/internal-tech.png', + icon_size = 128, + enabled = false, + hidden = true, + unit = + { + count = 1, + time = 1, + ingredients = { } + }, + effects = + { { + type = effect, + modifier = category.internal_technology_spec.value_scale * math.pow(2, index - 1), + } }, + prerequisites = index ~= 1 and { technology_formats.internal:format(effect, index - 1) } or nil, + order = '~~~~~~~~~~~~~~', + upgrade = true, + } + end + end +end + +if #internal_technologies > 0 then + data:extend(internal_technologies) +end \ No newline at end of file diff --git a/qol_research_3.3.3/data_utils.lua b/qol_research/data_utils.lua similarity index 100% rename from qol_research_3.3.3/data_utils.lua rename to qol_research/data_utils.lua diff --git a/qol_research_3.3.3/defines/setting_name_formats.lua b/qol_research/defines/setting_name_formats.lua similarity index 100% rename from qol_research_3.3.3/defines/setting_name_formats.lua rename to qol_research/defines/setting_name_formats.lua diff --git a/qol_research_3.3.3/defines/technology_name_formats.lua b/qol_research/defines/technology_name_formats.lua similarity index 100% rename from qol_research_3.3.3/defines/technology_name_formats.lua rename to qol_research/defines/technology_name_formats.lua diff --git a/qol_research_3.3.3/graphics/crafting-speed.png b/qol_research/graphics/crafting-speed.png similarity index 100% rename from qol_research_3.3.3/graphics/crafting-speed.png rename to qol_research/graphics/crafting-speed.png diff --git a/qol_research_3.3.3/graphics/internal-tech.png b/qol_research/graphics/internal-tech.png similarity index 100% rename from qol_research_3.3.3/graphics/internal-tech.png rename to qol_research/graphics/internal-tech.png diff --git a/qol_research_3.3.3/graphics/inventory-size.png b/qol_research/graphics/inventory-size.png similarity index 100% rename from qol_research_3.3.3/graphics/inventory-size.png rename to qol_research/graphics/inventory-size.png diff --git a/qol_research_3.3.3/graphics/mining-speed.png b/qol_research/graphics/mining-speed.png similarity index 100% rename from qol_research_3.3.3/graphics/mining-speed.png rename to qol_research/graphics/mining-speed.png diff --git a/qol_research_3.3.3/graphics/movement-speed.png b/qol_research/graphics/movement-speed.png similarity index 100% rename from qol_research_3.3.3/graphics/movement-speed.png rename to qol_research/graphics/movement-speed.png diff --git a/qol_research_3.3.3/graphics/player-reach.png b/qol_research/graphics/player-reach.png similarity index 100% rename from qol_research_3.3.3/graphics/player-reach.png rename to qol_research/graphics/player-reach.png diff --git a/qol_research_3.3.3/info.json b/qol_research/info.json similarity index 100% rename from qol_research_3.3.3/info.json rename to qol_research/info.json diff --git a/qol_research_3.3.3/locale/en/locale.cfg b/qol_research/locale/en/locale.cfg similarity index 100% rename from qol_research_3.3.3/locale/en/locale.cfg rename to qol_research/locale/en/locale.cfg diff --git a/qol_research_3.3.3/settings.lua b/qol_research/settings.lua similarity index 100% rename from qol_research_3.3.3/settings.lua rename to qol_research/settings.lua diff --git a/qol_research_3.3.3/thumbnail.png b/qol_research/thumbnail.png similarity index 100% rename from qol_research_3.3.3/thumbnail.png rename to qol_research/thumbnail.png diff --git a/qol_research_3.3.3/changelog.txt b/qol_research_3.3.3/changelog.txt deleted file mode 100644 index 81eff4a9..00000000 --- a/qol_research_3.3.3/changelog.txt +++ /dev/null @@ -1,167 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 3.3.3 -Date: 19. 02. 2023 - Features: - - Added default configuration for Krastorio 2. ---------------------------------------------------------------------------------------------------- -Version: 3.3.2 -Date: 18. 02. 2023 - Features: - - Added basic compatibility with the Nullius mod. ---------------------------------------------------------------------------------------------------- -Version: 3.3.0 -Date: 29. 11. 2020 - Changes: - - Update to Factorio 1.1. ---------------------------------------------------------------------------------------------------- -Version: 3.2.1 -Date: 07. 11. 2020 - Features: - - Add compatibility script that partially stops Krastorio2 from rewriting the tech tree. This should allow you to make custom configurations work with that mod. ---------------------------------------------------------------------------------------------------- -Version: 3.2.0 -Date: 26. 09. 2020 - Changes: - - Update to Factorio 1.0. - Bugfixes: - - Fix enable infinite research setting not working. ---------------------------------------------------------------------------------------------------- -Version: 3.1.1 -Date: 27. 05. 2020 - Bugfixes: - - Fix typo that wrongly switched to Space Exploration configuration. ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 -Date: 27. 05. 2020 - Features: - - Allow modpacks to have the configuration stored in their mod, instead of in QoL Research. ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 -Date: 11. 04. 2020 - Features: - - Add a custom configuration tool at https://qol-research.aidiakapi.com/ - - Add ability to implement default configuration overrides for modpacks, can be disabled with a setting. - - Earendel created a configuration override for his mod Space Exploration, integrating biological science recipes. ---------------------------------------------------------------------------------------------------- -Version: 2.5.1 -Date: 18. 03. 2020 - Features: - - Added /qol-reset-technology-effects command. - --------------------------------------------------------------------------------------------------- -Version: 2.5.0 -Date: 17. 03. 2020 - Changes: - - Remove character logistic upgrades as 0.18.13 removed them too. ---------------------------------------------------------------------------------------------------- -Version: 2.4.0 -Date: 15. 02. 2020 - Features: - - Updated for 0.18. ---------------------------------------------------------------------------------------------------- -Version: 2.3.1 -Date: 04. 03. 2019 - Changes: - - Buff mining speed research to be closer to 0.16's values. ---------------------------------------------------------------------------------------------------- -Version: 2.3.0 -Date: 15. 02. 2019 - Features: - - Updated for 0.17. - Changes: - - Increase levels in upper two tiers of inventory size upgrades from 2 to 4, this is to compensate for the lack of toolbelt research. - - Reduced the levels per tier of player reach from 4 to 3, the base game now has a reach of 10, instead of 6. - - Crafting speed, player mining speed, player reach's higher tier researches now requires production instead of utility science packs. - - Disable verbose logging by default. - Removed: - - Toolbelt upgrades (this is now in the base game under Options => Interface => Active quickbars). - - Settings to disable a particular category, this setting was rather redundant and confusing. ---------------------------------------------------------------------------------------------------- -Version: 2.2.6 -Date: 11. 06. 2018 - Bugfixes: - - Fixed typo which caused infinite research for inventory space to be 10 times as expensive. Thanks to Doublespin for reporting and fixing! ---------------------------------------------------------------------------------------------------- -Version: 2.2.5 -Date: 10. 05. 2018 - Bugfixes: - - Apply bonuses from settings when starting a new campaign. ---------------------------------------------------------------------------------------------------- -Version: 2.2.4 -Date: 05. 03. 2018 - Changes: - - Add explanation to internal technologies. Still waiting for a response from the devs. ---------------------------------------------------------------------------------------------------- -Version: 2.2.3 -Date: 28. 01. 2018 - Features: - - Added character logistic request slot bonuses. - - Added ability to specify prerequisites in custom config (see config.lua). ---------------------------------------------------------------------------------------------------- -Version: 2.2.1 -Date: 27. 01. 2018 - Changes: - - Release 0.15 compatible version. ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 -Date: 25. 01. 2018 - Features: - - Added flag to disable infinite research. - Balancing: - - Reduced the bonuses in the default configuration from green and blue science tiers by 5% for player crafting and mining speed. - - Increased the cost of infinite research tiers. - - Added infinite research tiers to inventory size. - Compatibility: - - Bonuses are now applied as technology effects, resolves compatibility issues with mods that invoke reset_technology_effects. - - Compatibility with other mods should now work across the board, however, if startup settings are changed, the mod will invoke reset_technology_effects during on_configuration_changed. ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 -Date: 07. 01. 2018 - Features: - - Created new higher resolution icons for half of the technologies. ---------------------------------------------------------------------------------------------------- -Version: 2.0.0 -Date: 07. 01. 2018 - Bugfixes: - - Fixed crash when if a negative value were to be applied. - - Fixed issues with values not being applied properly upon configuration changes. - Compatibility: - - Changed to overwrite force modifier values, therefore becoming incompatible with mods that also do that. ---------------------------------------------------------------------------------------------------- -Version: 1.2.0 -Date: 06. 01. 2018 - Features: - - Added command to reset bonuses. Use /qol-reset. - Bugfixes: - - Fixed incorrect bonus value (bonuses applied multiple times) by invoking reset upon configuration changes. ---------------------------------------------------------------------------------------------------- -Version: 1.1.0 -Date: 15. 12. 2017 - Features: - - Updated for 0.16. ---------------------------------------------------------------------------------------------------- -Version: 1.0.0 -Date: 20. 10. 2017 - Features: - - Added ability to have fractional multipliers as runtime setting for integer bonuses (quickbars, player reach, inventory size). - Changes: - - Restructured the tech tree to have better support for custom configuration trees. - - Removed requirement for on_tick handler, the mod should now have no impact on UPS whatsoever. - - Renamed Mining Speed to Player Mining Speed. - Bugfixes: - - Fixed inventory explosion in even more situations. - Compatibility: - - Added heuristic to determine if another mod invoked reset_technology_effects, and if so, reset the bonuses. - Balancing: - - Stronger early-game upgrades, and lesser late-game upgrades. - - Infinite science requires exponential amounts of science packs, preventing it from becoming extremely OP in megabases. - - Slightly increase overall costs. ---------------------------------------------------------------------------------------------------- -Version: 0.1.4 -Date: 08. 08. 2017 - Bugfixes: - - Fixed inventory explosion by deferring changes to the properties. ---------------------------------------------------------------------------------------------------- -Version: 0.1.3 -Date: 20. 07. 2017 - Features: - - Added detailed descriptions to all technologies. diff --git a/qol_research_3.3.3/data.lua b/qol_research_3.3.3/data.lua deleted file mode 100644 index 348c08d3..00000000 --- a/qol_research_3.3.3/data.lua +++ /dev/null @@ -1,115 +0,0 @@ -local categories = require('categories') -local data_utils = require('data_utils') -local config = require('config_data') -local setting_formats = require('defines.setting_name_formats') -local technology_formats = require('defines.technology_name_formats') - -local ordering_table -do - local count = categories.count - for _, tiers in pairs(config) do - count = math.max(count, #tiers) - for _, tier in ipairs(tiers) do - count = math.max(tier.technology_count) - end - end - ordering_table = data_utils.create_ordering_table(count) -end - -local order_format_string = 'qol-research-%s-%s-%s' -if mods['nullius'] then - order_format_string = 'nullius-' .. order_format_string -end - -local player_technologies = {} -local function create_player_technologies_for_category(category, tiers) - if not settings.startup[setting_formats.research_enabled:format(category.name)].value then - return - end - - local technology_icon = ('__qol_research__/graphics/%s.png'):format(category.name) - for tier_index, tier in ipairs(tiers) do - local localised_description = { - ('technology-description.qol-%s'):format(category.name), - category.description_factory(tier.bonus_per_technology) - } - - for technology_index = 1, math.max(tier.technology_count, 1) do - local prerequisites - if technology_index == 1 then - prerequisites = tier.prerequisites - else - prerequisites = { technology_formats.player:format(category.name, tier_index, technology_index - 1) } - end - - player_technologies[#player_technologies + 1] = { - type = 'technology', - name = technology_formats.player:format(category.name, tier_index, technology_index), - localised_description = localised_description, - icon = technology_icon, - icon_size = 128, - prerequisites = prerequisites, - unit = - { - count_formula = tier.cycle_count_formula, - time = tier.cycle_time, - ingredients = tier.cycle_ingredients, - }, - upgrade = true, - order = order_format_string:format( - ordering_table[category.index], - ordering_table[tier_index], - ordering_table[technology_index] - ), - } - end - - -- Special case for infinite research - if tier.technology_count == 0 then - player_technologies[#player_technologies].max_level = 'infinite' - end - end -end -for category_name, tiers in pairs(config) do - create_player_technologies_for_category(categories.map[category_name], tiers) -end - -if #player_technologies > 0 then - data:extend(player_technologies) -end - -local internal_technologies = {} -for _, category in ipairs(categories.list) do - for _, effect in ipairs(category.effects) do - for index = 1, category.internal_technology_spec.count do - internal_technologies[#internal_technologies + 1] = { - type = 'technology', - name = technology_formats.internal:format(effect, index), - localised_name = { 'qol-internal-tech.name' }, - localised_description = { 'qol-internal-tech.description' }, - icon = '__qol_research__/graphics/internal-tech.png', - icon_size = 128, - enabled = false, - hidden = true, - unit = - { - count = 1, - time = 1, - ingredients = { } - }, - effects = - { { - type = effect, - modifier = category.internal_technology_spec.value_scale * math.pow(2, index - 1), - } }, - prerequisites = index ~= 1 and { technology_formats.internal:format(effect, index - 1) } or nil, - order = '~~~~~~~~~~~~~~', - upgrade = true, - } - end - end -end - -if #internal_technologies > 0 then - data:extend(internal_technologies) -end \ No newline at end of file diff --git a/railloader_9.1.6/EntityQueue.lua b/railloader/EntityQueue.lua similarity index 100% rename from railloader_9.1.6/EntityQueue.lua rename to railloader/EntityQueue.lua diff --git a/railloader_9.1.6/Event.lua b/railloader/Event.lua similarity index 100% rename from railloader_9.1.6/Event.lua rename to railloader/Event.lua diff --git a/railloader_9.1.6/README.md b/railloader/README.md similarity index 100% rename from railloader_9.1.6/README.md rename to railloader/README.md diff --git a/railloader_9.1.6/bulk.lua b/railloader/bulk.lua similarity index 100% rename from railloader_9.1.6/bulk.lua rename to railloader/bulk.lua diff --git a/railloader_9.1.6/changelog.txt b/railloader/changelog.txt similarity index 100% rename from railloader_9.1.6/changelog.txt rename to railloader/changelog.txt diff --git a/railloader_9.1.6/configchange.lua b/railloader/configchange.lua similarity index 100% rename from railloader_9.1.6/configchange.lua rename to railloader/configchange.lua diff --git a/railloader_9.1.6/control.lua b/railloader/control.lua similarity index 100% rename from railloader_9.1.6/control.lua rename to railloader/control.lua diff --git a/railloader_9.1.6/data.lua b/railloader/data.lua similarity index 100% rename from railloader_9.1.6/data.lua rename to railloader/data.lua diff --git a/railloader_9.1.6/delaydestroy.lua b/railloader/delaydestroy.lua similarity index 100% rename from railloader_9.1.6/delaydestroy.lua rename to railloader/delaydestroy.lua diff --git a/railloader_9.1.6/ghostconnections.lua b/railloader/ghostconnections.lua similarity index 100% rename from railloader_9.1.6/ghostconnections.lua rename to railloader/ghostconnections.lua diff --git a/railloader_9.1.6/graphics/icons/railloader.png b/railloader/graphics/icons/railloader.png similarity index 100% rename from railloader_9.1.6/graphics/icons/railloader.png rename to railloader/graphics/icons/railloader.png diff --git a/railloader_9.1.6/graphics/icons/railunloader.png b/railloader/graphics/icons/railunloader.png similarity index 100% rename from railloader_9.1.6/graphics/icons/railunloader.png rename to railloader/graphics/icons/railunloader.png diff --git a/railloader_9.1.6/graphics/railloader-placement-proxy/horizontal.png b/railloader/graphics/railloader-placement-proxy/horizontal.png similarity index 100% rename from railloader_9.1.6/graphics/railloader-placement-proxy/horizontal.png rename to railloader/graphics/railloader-placement-proxy/horizontal.png diff --git a/railloader_9.1.6/graphics/railloader-placement-proxy/vertical.png b/railloader/graphics/railloader-placement-proxy/vertical.png similarity index 100% rename from railloader_9.1.6/graphics/railloader-placement-proxy/vertical.png rename to railloader/graphics/railloader-placement-proxy/vertical.png diff --git a/railloader_9.1.6/graphics/railloader/structure-horizontal.png b/railloader/graphics/railloader/structure-horizontal.png similarity index 100% rename from railloader_9.1.6/graphics/railloader/structure-horizontal.png rename to railloader/graphics/railloader/structure-horizontal.png diff --git a/railloader_9.1.6/graphics/railloader/structure-vertical.png b/railloader/graphics/railloader/structure-vertical.png similarity index 100% rename from railloader_9.1.6/graphics/railloader/structure-vertical.png rename to railloader/graphics/railloader/structure-vertical.png diff --git a/railloader_9.1.6/graphics/railunloader/structure-horizontal.png b/railloader/graphics/railunloader/structure-horizontal.png similarity index 100% rename from railloader_9.1.6/graphics/railunloader/structure-horizontal.png rename to railloader/graphics/railunloader/structure-horizontal.png diff --git a/railloader_9.1.6/graphics/railunloader/structure-vertical.png b/railloader/graphics/railunloader/structure-vertical.png similarity index 100% rename from railloader_9.1.6/graphics/railunloader/structure-vertical.png rename to railloader/graphics/railunloader/structure-vertical.png diff --git a/railloader_9.1.6/graphics/technology/railloader.png b/railloader/graphics/technology/railloader.png similarity index 100% rename from railloader_9.1.6/graphics/technology/railloader.png rename to railloader/graphics/technology/railloader.png diff --git a/railloader_9.1.6/info.json b/railloader/info.json similarity index 100% rename from railloader_9.1.6/info.json rename to railloader/info.json diff --git a/railloader_9.1.6/inserterconfig.lua b/railloader/inserterconfig.lua similarity index 100% rename from railloader_9.1.6/inserterconfig.lua rename to railloader/inserterconfig.lua diff --git a/railloader_9.1.6/locale/en/railloader.cfg b/railloader/locale/en/railloader.cfg similarity index 100% rename from railloader_9.1.6/locale/en/railloader.cfg rename to railloader/locale/en/railloader.cfg diff --git a/railloader_9.1.6/locale/ru/railloader.cfg b/railloader/locale/ru/railloader.cfg similarity index 100% rename from railloader_9.1.6/locale/ru/railloader.cfg rename to railloader/locale/ru/railloader.cfg diff --git a/railloader_9.1.6/migrations/0_1_0-0_2_0.json b/railloader/migrations/0_1_0-0_2_0.json similarity index 100% rename from railloader_9.1.6/migrations/0_1_0-0_2_0.json rename to railloader/migrations/0_1_0-0_2_0.json diff --git a/railloader_9.1.6/migrations/0_1_0-0_2_0.lua b/railloader/migrations/0_1_0-0_2_0.lua similarity index 100% rename from railloader_9.1.6/migrations/0_1_0-0_2_0.lua rename to railloader/migrations/0_1_0-0_2_0.lua diff --git a/railloader_9.1.6/migrations/0_2_2-0_2_3.lua b/railloader/migrations/0_2_2-0_2_3.lua similarity index 100% rename from railloader_9.1.6/migrations/0_2_2-0_2_3.lua rename to railloader/migrations/0_2_2-0_2_3.lua diff --git a/railloader_9.1.6/migrations/0_3_4-0_3_5.lua b/railloader/migrations/0_3_4-0_3_5.lua similarity index 100% rename from railloader_9.1.6/migrations/0_3_4-0_3_5.lua rename to railloader/migrations/0_3_4-0_3_5.lua diff --git a/railloader_9.1.6/prototypes/entity/circuitconnectors.lua b/railloader/prototypes/entity/circuitconnectors.lua similarity index 100% rename from railloader_9.1.6/prototypes/entity/circuitconnectors.lua rename to railloader/prototypes/entity/circuitconnectors.lua diff --git a/railloader_9.1.6/prototypes/entity/pictures.lua b/railloader/prototypes/entity/pictures.lua similarity index 100% rename from railloader_9.1.6/prototypes/entity/pictures.lua rename to railloader/prototypes/entity/pictures.lua diff --git a/railloader_9.1.6/prototypes/entity/rail.lua b/railloader/prototypes/entity/rail.lua similarity index 100% rename from railloader_9.1.6/prototypes/entity/rail.lua rename to railloader/prototypes/entity/rail.lua diff --git a/railloader_9.1.6/prototypes/entity/railloader.lua b/railloader/prototypes/entity/railloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/entity/railloader.lua rename to railloader/prototypes/entity/railloader.lua diff --git a/railloader_9.1.6/prototypes/entity/railunloader.lua b/railloader/prototypes/entity/railunloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/entity/railunloader.lua rename to railloader/prototypes/entity/railunloader.lua diff --git a/railloader_9.1.6/prototypes/item/railloader.lua b/railloader/prototypes/item/railloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/item/railloader.lua rename to railloader/prototypes/item/railloader.lua diff --git a/railloader_9.1.6/prototypes/item/railunloader.lua b/railloader/prototypes/item/railunloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/item/railunloader.lua rename to railloader/prototypes/item/railunloader.lua diff --git a/railloader_9.1.6/prototypes/recipe/Recipe.lua b/railloader/prototypes/recipe/Recipe.lua similarity index 100% rename from railloader_9.1.6/prototypes/recipe/Recipe.lua rename to railloader/prototypes/recipe/Recipe.lua diff --git a/railloader_9.1.6/prototypes/recipe/railloader.lua b/railloader/prototypes/recipe/railloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/recipe/railloader.lua rename to railloader/prototypes/recipe/railloader.lua diff --git a/railloader_9.1.6/prototypes/recipe/railunloader.lua b/railloader/prototypes/recipe/railunloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/recipe/railunloader.lua rename to railloader/prototypes/recipe/railunloader.lua diff --git a/railloader_9.1.6/prototypes/signal.lua b/railloader/prototypes/signal.lua similarity index 100% rename from railloader_9.1.6/prototypes/signal.lua rename to railloader/prototypes/signal.lua diff --git a/railloader_9.1.6/prototypes/technology/railloader.lua b/railloader/prototypes/technology/railloader.lua similarity index 100% rename from railloader_9.1.6/prototypes/technology/railloader.lua rename to railloader/prototypes/technology/railloader.lua diff --git a/railloader_9.1.6/settings.lua b/railloader/settings.lua similarity index 100% rename from railloader_9.1.6/settings.lua rename to railloader/settings.lua diff --git a/railloader_9.1.6/spec/EntityQueue_spec.lua b/railloader/spec/EntityQueue_spec.lua similarity index 100% rename from railloader_9.1.6/spec/EntityQueue_spec.lua rename to railloader/spec/EntityQueue_spec.lua diff --git a/railloader_9.1.6/thumbnail.png b/railloader/thumbnail.png similarity index 100% rename from railloader_9.1.6/thumbnail.png rename to railloader/thumbnail.png diff --git a/railloader_9.1.6/util.lua b/railloader/util.lua similarity index 100% rename from railloader_9.1.6/util.lua rename to railloader/util.lua diff --git a/railloader_9.1.6/version.lua b/railloader/version.lua similarity index 100% rename from railloader_9.1.6/version.lua rename to railloader/version.lua diff --git a/research_evolution_factor_1.1.05/control.lua b/research_evolution_factor/control.lua similarity index 100% rename from research_evolution_factor_1.1.05/control.lua rename to research_evolution_factor/control.lua diff --git a/research_evolution_factor_1.1.05/data-final-fixes.lua b/research_evolution_factor/data-final-fixes.lua similarity index 100% rename from research_evolution_factor_1.1.05/data-final-fixes.lua rename to research_evolution_factor/data-final-fixes.lua diff --git a/research_evolution_factor_1.1.05/info.json b/research_evolution_factor/info.json similarity index 100% rename from research_evolution_factor_1.1.05/info.json rename to research_evolution_factor/info.json diff --git a/research_evolution_factor_1.1.05/locale/en/locale.cfg b/research_evolution_factor/locale/en/locale.cfg similarity index 100% rename from research_evolution_factor_1.1.05/locale/en/locale.cfg rename to research_evolution_factor/locale/en/locale.cfg diff --git a/research_evolution_factor_1.1.05/parameters.lua b/research_evolution_factor/parameters.lua similarity index 100% rename from research_evolution_factor_1.1.05/parameters.lua rename to research_evolution_factor/parameters.lua diff --git a/research_evolution_factor_1.1.05/settings.lua b/research_evolution_factor/settings.lua similarity index 100% rename from research_evolution_factor_1.1.05/settings.lua rename to research_evolution_factor/settings.lua diff --git a/reskins-angels_2.1.6/README.md b/reskins-angels/README.md similarity index 100% rename from reskins-angels_2.1.6/README.md rename to reskins-angels/README.md diff --git a/reskins-angels_2.1.6/changelog.txt b/reskins-angels/changelog.txt similarity index 100% rename from reskins-angels_2.1.6/changelog.txt rename to reskins-angels/changelog.txt diff --git a/reskins-angels_2.1.6/data-final-fixes.lua b/reskins-angels/data-final-fixes.lua similarity index 100% rename from reskins-angels_2.1.6/data-final-fixes.lua rename to reskins-angels/data-final-fixes.lua diff --git a/reskins-angels_2.1.6/data-updates.lua b/reskins-angels/data-updates.lua similarity index 100% rename from reskins-angels_2.1.6/data-updates.lua rename to reskins-angels/data-updates.lua diff --git a/reskins-angels_2.1.6/data.lua b/reskins-angels/data.lua similarity index 100% rename from reskins-angels_2.1.6/data.lua rename to reskins-angels/data.lua diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/big-chest-shadow.png b/reskins-angels/graphics/entity/addons-storage/big-chest/big-chest-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/big-chest-shadow.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/big-chest-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/big-chest.png b/reskins-angels/graphics/entity/addons-storage/big-chest/big-chest.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/big-chest.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/big-chest.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-big-chest-shadow.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-big-chest-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-big-chest-shadow.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-big-chest-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-big-chest.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-big-chest.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-big-chest.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-big-chest.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-active-provider.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-active-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-active-provider.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-active-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-buffer.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-buffer.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-buffer.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-buffer.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-light.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-light.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-light.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-light.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-passive-provider.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-passive-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-passive-provider.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-passive-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-requester.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-requester.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-requester.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-requester.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-shadow.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-shadow.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-storage.png b/reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-storage.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-storage.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/hr-logistic-big-chest-storage.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-active-provider.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-active-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-active-provider.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-active-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-buffer.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-buffer.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-buffer.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-buffer.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-light.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-light.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-light.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-light.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-passive-provider.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-passive-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-passive-provider.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-passive-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-requester.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-requester.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-requester.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-requester.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-shadow.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-shadow.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-storage.png b/reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-storage.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/big-chest/logistic-big-chest-storage.png rename to reskins-angels/graphics/entity/addons-storage/big-chest/logistic-big-chest-storage.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-active-provider.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-active-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-active-provider.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-active-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-buffer.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-buffer.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-buffer.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-buffer.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-light.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-light.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-light.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-light.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-passive-provider.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-passive-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-passive-provider.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-passive-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-requester.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-requester.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-requester.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-requester.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-shadow.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-shadow.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-storage.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-storage.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-storage.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-logistic-warehouse-storage.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-warehouse-shadow.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-warehouse-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-warehouse-shadow.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-warehouse-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-warehouse.png b/reskins-angels/graphics/entity/addons-storage/warehouse/hr-warehouse.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/hr-warehouse.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/hr-warehouse.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-active-provider.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-active-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-active-provider.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-active-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-buffer.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-buffer.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-buffer.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-buffer.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-light.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-light.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-light.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-light.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-passive-provider.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-passive-provider.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-passive-provider.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-passive-provider.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-requester.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-requester.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-requester.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-requester.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-shadow.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-shadow.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-storage.png b/reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-storage.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/logistic-warehouse-storage.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/logistic-warehouse-storage.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/warehouse-shadow.png b/reskins-angels/graphics/entity/addons-storage/warehouse/warehouse-shadow.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/warehouse-shadow.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/warehouse-shadow.png diff --git a/reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/warehouse.png b/reskins-angels/graphics/entity/addons-storage/warehouse/warehouse.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/addons-storage/warehouse/warehouse.png rename to reskins-angels/graphics/entity/addons-storage/warehouse/warehouse.png diff --git a/reskins-angels_2.1.6/graphics/entity/bioprocessing/algae-farm/algae-farm-highlights.png b/reskins-angels/graphics/entity/bioprocessing/algae-farm/algae-farm-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/bioprocessing/algae-farm/algae-farm-highlights.png rename to reskins-angels/graphics/entity/bioprocessing/algae-farm/algae-farm-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/bioprocessing/algae-farm/algae-farm-mask.png b/reskins-angels/graphics/entity/bioprocessing/algae-farm/algae-farm-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/bioprocessing/algae-farm/algae-farm-mask.png rename to reskins-angels/graphics/entity/bioprocessing/algae-farm/algae-farm-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-base-patch.png b/reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-base-patch.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-base-patch.png rename to reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-base-patch.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-highlights.png b/reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-highlights.png rename to reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-mask.png b/reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-mask.png rename to reskins-angels/graphics/entity/petrochem/advanced-chemical-plant/advanced-chemical-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-highlights.png b/reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-highlights.png rename to reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-mask.png b/reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-mask.png rename to reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/advanced-gas-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-highlights.png b/reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-highlights.png rename to reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-mask.png b/reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-mask.png rename to reskins-angels/graphics/entity/petrochem/advanced-gas-refinery/hr-advanced-gas-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-base.png b/reskins-angels/graphics/entity/petrochem/air-filter/air-filter-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-base.png rename to reskins-angels/graphics/entity/petrochem/air-filter/air-filter-base.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-highlights.png b/reskins-angels/graphics/entity/petrochem/air-filter/air-filter-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-highlights.png rename to reskins-angels/graphics/entity/petrochem/air-filter/air-filter-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-mask.png b/reskins-angels/graphics/entity/petrochem/air-filter/air-filter-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/air-filter/air-filter-mask.png rename to reskins-angels/graphics/entity/petrochem/air-filter/air-filter-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/chemical-plant/chemical-plant-highlights.png b/reskins-angels/graphics/entity/petrochem/chemical-plant/chemical-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/chemical-plant/chemical-plant-highlights.png rename to reskins-angels/graphics/entity/petrochem/chemical-plant/chemical-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/chemical-plant/chemical-plant-mask.png b/reskins-angels/graphics/entity/petrochem/chemical-plant/chemical-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/chemical-plant/chemical-plant-mask.png rename to reskins-angels/graphics/entity/petrochem/chemical-plant/chemical-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-base.png b/reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-base.png rename to reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-base.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-highlights.png b/reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-highlights.png rename to reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-mask.png b/reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-mask.png rename to reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-working-lights.png b/reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-working-lights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electric-boiler/electric-boiler-working-lights.png rename to reskins-angels/graphics/entity/petrochem/electric-boiler/electric-boiler-working-lights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electrolyser/electrolyser-highlights.png b/reskins-angels/graphics/entity/petrochem/electrolyser/electrolyser-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electrolyser/electrolyser-highlights.png rename to reskins-angels/graphics/entity/petrochem/electrolyser/electrolyser-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/electrolyser/electrolyser-mask.png b/reskins-angels/graphics/entity/petrochem/electrolyser/electrolyser-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/electrolyser/electrolyser-mask.png rename to reskins-angels/graphics/entity/petrochem/electrolyser/electrolyser-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/gas-refinery-highlights.png b/reskins-angels/graphics/entity/petrochem/gas-refinery/gas-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/gas-refinery-highlights.png rename to reskins-angels/graphics/entity/petrochem/gas-refinery/gas-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/gas-refinery-mask.png b/reskins-angels/graphics/entity/petrochem/gas-refinery/gas-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/gas-refinery-mask.png rename to reskins-angels/graphics/entity/petrochem/gas-refinery/gas-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-highlights.png b/reskins-angels/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-highlights.png rename to reskins-angels/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-mask.png b/reskins-angels/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-mask.png rename to reskins-angels/graphics/entity/petrochem/gas-refinery/hr-gas-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/separator/separator-highlights.png b/reskins-angels/graphics/entity/petrochem/separator/separator-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/separator/separator-highlights.png rename to reskins-angels/graphics/entity/petrochem/separator/separator-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/separator/separator-mask.png b/reskins-angels/graphics/entity/petrochem/separator/separator-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/separator/separator-mask.png rename to reskins-angels/graphics/entity/petrochem/separator/separator-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-highlights.png b/reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-highlights.png rename to reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-light.png b/reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-light.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-light.png rename to reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-light.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-mask.png b/reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-mask.png rename to reskins-angels/graphics/entity/petrochem/steam-cracker/hr-steam-cracker-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/valve/hr-valve-base.png b/reskins-angels/graphics/entity/petrochem/valve/hr-valve-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/valve/hr-valve-base.png rename to reskins-angels/graphics/entity/petrochem/valve/hr-valve-base.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/valve/hr-valve-mask.png b/reskins-angels/graphics/entity/petrochem/valve/hr-valve-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/valve/hr-valve-mask.png rename to reskins-angels/graphics/entity/petrochem/valve/hr-valve-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/valve/valve-base.png b/reskins-angels/graphics/entity/petrochem/valve/valve-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/valve/valve-base.png rename to reskins-angels/graphics/entity/petrochem/valve/valve-base.png diff --git a/reskins-angels_2.1.6/graphics/entity/petrochem/valve/valve-mask.png b/reskins-angels/graphics/entity/petrochem/valve/valve-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/petrochem/valve/valve-mask.png rename to reskins-angels/graphics/entity/petrochem/valve/valve-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/clarifier/hr-clarifier-base.png b/reskins-angels/graphics/entity/refining/clarifier/hr-clarifier-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/clarifier/hr-clarifier-base.png rename to reskins-angels/graphics/entity/refining/clarifier/hr-clarifier-base.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/crystallizer/crystallizer-highlights.png b/reskins-angels/graphics/entity/refining/crystallizer/crystallizer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/crystallizer/crystallizer-highlights.png rename to reskins-angels/graphics/entity/refining/crystallizer/crystallizer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/crystallizer/crystallizer-mask.png b/reskins-angels/graphics/entity/refining/crystallizer/crystallizer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/crystallizer/crystallizer-mask.png rename to reskins-angels/graphics/entity/refining/crystallizer/crystallizer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/crystallizer/hr-crystallizer-highlights.png b/reskins-angels/graphics/entity/refining/crystallizer/hr-crystallizer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/crystallizer/hr-crystallizer-highlights.png rename to reskins-angels/graphics/entity/refining/crystallizer/hr-crystallizer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/crystallizer/hr-crystallizer-mask.png b/reskins-angels/graphics/entity/refining/crystallizer/hr-crystallizer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/crystallizer/hr-crystallizer-mask.png rename to reskins-angels/graphics/entity/refining/crystallizer/hr-crystallizer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/electrowinning-cell/electrowinning-cell-highlights.png b/reskins-angels/graphics/entity/refining/electrowinning-cell/electrowinning-cell-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/electrowinning-cell/electrowinning-cell-highlights.png rename to reskins-angels/graphics/entity/refining/electrowinning-cell/electrowinning-cell-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/electrowinning-cell/electrowinning-cell-mask.png b/reskins-angels/graphics/entity/refining/electrowinning-cell/electrowinning-cell-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/electrowinning-cell/electrowinning-cell-mask.png rename to reskins-angels/graphics/entity/refining/electrowinning-cell/electrowinning-cell-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/filtration-unit/filtration-unit-highlights.png b/reskins-angels/graphics/entity/refining/filtration-unit/filtration-unit-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/filtration-unit/filtration-unit-highlights.png rename to reskins-angels/graphics/entity/refining/filtration-unit/filtration-unit-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/filtration-unit/filtration-unit-mask.png b/reskins-angels/graphics/entity/refining/filtration-unit/filtration-unit-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/filtration-unit/filtration-unit-mask.png rename to reskins-angels/graphics/entity/refining/filtration-unit/filtration-unit-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hr-hydro-plant-highlights.png b/reskins-angels/graphics/entity/refining/hydro-plant/hr-hydro-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hr-hydro-plant-highlights.png rename to reskins-angels/graphics/entity/refining/hydro-plant/hr-hydro-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hr-hydro-plant-mask.png b/reskins-angels/graphics/entity/refining/hydro-plant/hr-hydro-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hr-hydro-plant-mask.png rename to reskins-angels/graphics/entity/refining/hydro-plant/hr-hydro-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hydro-plant-highlights.png b/reskins-angels/graphics/entity/refining/hydro-plant/hydro-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hydro-plant-highlights.png rename to reskins-angels/graphics/entity/refining/hydro-plant/hydro-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hydro-plant-mask.png b/reskins-angels/graphics/entity/refining/hydro-plant/hydro-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/hydro-plant/hydro-plant-mask.png rename to reskins-angels/graphics/entity/refining/hydro-plant/hydro-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/liquefier/liquefier-highlights.png b/reskins-angels/graphics/entity/refining/liquefier/liquefier-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/liquefier/liquefier-highlights.png rename to reskins-angels/graphics/entity/refining/liquefier/liquefier-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/liquefier/liquefier-mask.png b/reskins-angels/graphics/entity/refining/liquefier/liquefier-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/liquefier/liquefier-mask.png rename to reskins-angels/graphics/entity/refining/liquefier/liquefier-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/hr-ore-crusher-highlights.png b/reskins-angels/graphics/entity/refining/ore-crusher/hr-ore-crusher-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/hr-ore-crusher-highlights.png rename to reskins-angels/graphics/entity/refining/ore-crusher/hr-ore-crusher-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/hr-ore-crusher-mask.png b/reskins-angels/graphics/entity/refining/ore-crusher/hr-ore-crusher-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/hr-ore-crusher-mask.png rename to reskins-angels/graphics/entity/refining/ore-crusher/hr-ore-crusher-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/ore-crusher-highlights.png b/reskins-angels/graphics/entity/refining/ore-crusher/ore-crusher-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/ore-crusher-highlights.png rename to reskins-angels/graphics/entity/refining/ore-crusher/ore-crusher-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/ore-crusher-mask.png b/reskins-angels/graphics/entity/refining/ore-crusher/ore-crusher-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-crusher/ore-crusher-mask.png rename to reskins-angels/graphics/entity/refining/ore-crusher/ore-crusher-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-highlights.png b/reskins-angels/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-highlights.png rename to reskins-angels/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-mask.png b/reskins-angels/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-mask.png rename to reskins-angels/graphics/entity/refining/ore-flotation-cell/hr-ore-flotation-cell-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-highlights.png b/reskins-angels/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-highlights.png rename to reskins-angels/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-mask.png b/reskins-angels/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-mask.png rename to reskins-angels/graphics/entity/refining/ore-flotation-cell/ore-flotation-cell-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-highlights.png b/reskins-angels/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-highlights.png rename to reskins-angels/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-mask.png b/reskins-angels/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-mask.png rename to reskins-angels/graphics/entity/refining/ore-leaching-plant/ore-leaching-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-highlights.png b/reskins-angels/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-highlights.png rename to reskins-angels/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-mask.png b/reskins-angels/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-mask.png rename to reskins-angels/graphics/entity/refining/ore-powderizer/hr-ore-powderizer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/ore-powderizer-highlights.png b/reskins-angels/graphics/entity/refining/ore-powderizer/ore-powderizer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/ore-powderizer-highlights.png rename to reskins-angels/graphics/entity/refining/ore-powderizer/ore-powderizer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/ore-powderizer-mask.png b/reskins-angels/graphics/entity/refining/ore-powderizer/ore-powderizer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-powderizer/ore-powderizer-mask.png rename to reskins-angels/graphics/entity/refining/ore-powderizer/ore-powderizer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/hr-ore-refinery-highlights.png b/reskins-angels/graphics/entity/refining/ore-refinery/hr-ore-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/hr-ore-refinery-highlights.png rename to reskins-angels/graphics/entity/refining/ore-refinery/hr-ore-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/hr-ore-refinery-mask.png b/reskins-angels/graphics/entity/refining/ore-refinery/hr-ore-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/hr-ore-refinery-mask.png rename to reskins-angels/graphics/entity/refining/ore-refinery/hr-ore-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/ore-refinery-highlights.png b/reskins-angels/graphics/entity/refining/ore-refinery/ore-refinery-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/ore-refinery-highlights.png rename to reskins-angels/graphics/entity/refining/ore-refinery/ore-refinery-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/ore-refinery-mask.png b/reskins-angels/graphics/entity/refining/ore-refinery/ore-refinery-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-refinery/ore-refinery-mask.png rename to reskins-angels/graphics/entity/refining/ore-refinery/ore-refinery-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-highlights.png b/reskins-angels/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-highlights.png rename to reskins-angels/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-mask.png b/reskins-angels/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-mask.png rename to reskins-angels/graphics/entity/refining/ore-sorting-facility/hr-ore-sorting-facility-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-highlights.png b/reskins-angels/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-highlights.png rename to reskins-angels/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-mask.png b/reskins-angels/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-mask.png rename to reskins-angels/graphics/entity/refining/ore-sorting-facility/ore-sorting-facility-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/salination-plant/hr-salination-plant-highlights.png b/reskins-angels/graphics/entity/refining/salination-plant/hr-salination-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/salination-plant/hr-salination-plant-highlights.png rename to reskins-angels/graphics/entity/refining/salination-plant/hr-salination-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/salination-plant/hr-salination-plant-mask.png b/reskins-angels/graphics/entity/refining/salination-plant/hr-salination-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/salination-plant/hr-salination-plant-mask.png rename to reskins-angels/graphics/entity/refining/salination-plant/hr-salination-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/salination-plant/salination-plant-highlights.png b/reskins-angels/graphics/entity/refining/salination-plant/salination-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/salination-plant/salination-plant-highlights.png rename to reskins-angels/graphics/entity/refining/salination-plant/salination-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/salination-plant/salination-plant-mask.png b/reskins-angels/graphics/entity/refining/salination-plant/salination-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/salination-plant/salination-plant-mask.png rename to reskins-angels/graphics/entity/refining/salination-plant/salination-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-base-patch.png b/reskins-angels/graphics/entity/refining/washing-plant/washing-plant-base-patch.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-base-patch.png rename to reskins-angels/graphics/entity/refining/washing-plant/washing-plant-base-patch.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-highlights.png b/reskins-angels/graphics/entity/refining/washing-plant/washing-plant-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-highlights.png rename to reskins-angels/graphics/entity/refining/washing-plant/washing-plant-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-mask.png b/reskins-angels/graphics/entity/refining/washing-plant/washing-plant-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/refining/washing-plant/washing-plant-mask.png rename to reskins-angels/graphics/entity/refining/washing-plant/washing-plant-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/blast-furnace-highlights.png b/reskins-angels/graphics/entity/smelting/blast-furnace/blast-furnace-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/blast-furnace-highlights.png rename to reskins-angels/graphics/entity/smelting/blast-furnace/blast-furnace-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/blast-furnace-mask.png b/reskins-angels/graphics/entity/smelting/blast-furnace/blast-furnace-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/blast-furnace-mask.png rename to reskins-angels/graphics/entity/smelting/blast-furnace/blast-furnace-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/hr-blast-furnace-highlights.png b/reskins-angels/graphics/entity/smelting/blast-furnace/hr-blast-furnace-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/hr-blast-furnace-highlights.png rename to reskins-angels/graphics/entity/smelting/blast-furnace/hr-blast-furnace-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/hr-blast-furnace-mask.png b/reskins-angels/graphics/entity/smelting/blast-furnace/hr-blast-furnace-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/blast-furnace/hr-blast-furnace-mask.png rename to reskins-angels/graphics/entity/smelting/blast-furnace/hr-blast-furnace-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/casting-machine-highlights.png b/reskins-angels/graphics/entity/smelting/casting-machine/casting-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/casting-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/casting-machine/casting-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/casting-machine-mask.png b/reskins-angels/graphics/entity/smelting/casting-machine/casting-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/casting-machine-mask.png rename to reskins-angels/graphics/entity/smelting/casting-machine/casting-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/hr-casting-machine-highlights.png b/reskins-angels/graphics/entity/smelting/casting-machine/hr-casting-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/hr-casting-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/casting-machine/hr-casting-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/hr-casting-machine-mask.png b/reskins-angels/graphics/entity/smelting/casting-machine/hr-casting-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/casting-machine/hr-casting-machine-mask.png rename to reskins-angels/graphics/entity/smelting/casting-machine/hr-casting-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/chemical-furnace-highlights.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/chemical-furnace-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/chemical-furnace-highlights.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/chemical-furnace-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/chemical-furnace-mask.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/chemical-furnace-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/chemical-furnace-mask.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/chemical-furnace-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_01.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_01.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_01.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_01.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_02.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_02.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_02.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-highlights_02.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_01.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_01.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_01.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_01.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_02.png b/reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_02.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_02.png rename to reskins-angels/graphics/entity/smelting/chemical-furnace/hr-chemical-furnace-mask_02.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_01.png b/reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_01.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_01.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_01.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_02.png b/reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_02.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_02.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-highlights_02.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_01.png b/reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_01.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_01.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_01.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_02.png b/reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_02.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_02.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/hr-induction-furnace-mask_02.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/induction-furnace-highlights.png b/reskins-angels/graphics/entity/smelting/induction-furnace/induction-furnace-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/induction-furnace-highlights.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/induction-furnace-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/induction-furnace-mask.png b/reskins-angels/graphics/entity/smelting/induction-furnace/induction-furnace-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/induction-furnace/induction-furnace-mask.png rename to reskins-angels/graphics/entity/smelting/induction-furnace/induction-furnace-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-highlights.png b/reskins-angels/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-mask.png b/reskins-angels/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-mask.png rename to reskins-angels/graphics/entity/smelting/ore-processing-machine/hr-ore-processing-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-highlights.png b/reskins-angels/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-mask.png b/reskins-angels/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-mask.png rename to reskins-angels/graphics/entity/smelting/ore-processing-machine/ore-processing-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/hr-pellet-press-highlights.png b/reskins-angels/graphics/entity/smelting/pellet-press/hr-pellet-press-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/hr-pellet-press-highlights.png rename to reskins-angels/graphics/entity/smelting/pellet-press/hr-pellet-press-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/hr-pellet-press-mask.png b/reskins-angels/graphics/entity/smelting/pellet-press/hr-pellet-press-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/hr-pellet-press-mask.png rename to reskins-angels/graphics/entity/smelting/pellet-press/hr-pellet-press-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/pellet-press-highlights.png b/reskins-angels/graphics/entity/smelting/pellet-press/pellet-press-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/pellet-press-highlights.png rename to reskins-angels/graphics/entity/smelting/pellet-press/pellet-press-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/pellet-press-mask.png b/reskins-angels/graphics/entity/smelting/pellet-press/pellet-press-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pellet-press/pellet-press-mask.png rename to reskins-angels/graphics/entity/smelting/pellet-press/pellet-press-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/hr-pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/ceramic/pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/hr-pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/nitinol/pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/hr-pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/titanium/pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/hr-pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-east.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-east.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-east.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-east.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-north.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-north.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-north.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-north.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-south.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-south.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-south.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-south.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-west.png b/reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-west.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-west.png rename to reskins-angels/graphics/entity/smelting/pipe-covers/tungsten/pipe-cover-west.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/hr-pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-down.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-down.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-left.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-left.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-right.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-right.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-up.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-up.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/pipe-to-ground-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png b/reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/hr-pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/hr-pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/remnants/hr-pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/remnants/hr-pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/remnants/hr-pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/remnants/pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/ceramic/remnants/pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/ceramic/remnants/pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/ceramic/remnants/pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/hr-pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/hr-pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/remnants/hr-pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/remnants/hr-pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/remnants/hr-pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/remnants/pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/nitinol/remnants/pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/nitinol/remnants/pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/nitinol/remnants/pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/hr-pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/hr-pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/remnants/hr-pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/remnants/hr-pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/remnants/hr-pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/remnants/pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/titanium/remnants/pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/titanium/remnants/pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/titanium/remnants/pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/hr-pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/hr-pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-down-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-corner-up-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-cross.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-cross.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-cross.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-cross.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-down.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-down.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-up.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-ending-up.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-ending-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-horizontal-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-horizontal-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-horizontal-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-horizontal-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal-window.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal-window.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-horizontal.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-single.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-single.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-single.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-single.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-window.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-window.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-window.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical-window.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-straight-vertical.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-down.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-down.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-down.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-down.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-left.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-left.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-left.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-left.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-right.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-right.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-right.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-right.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-up.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-up.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-t-up.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-t-up.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-vertical-window-background.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-vertical-window-background.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/pipe-vertical-window-background.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/pipe-vertical-window-background.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/remnants/hr-pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/remnants/hr-pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/remnants/hr-pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/remnants/pipe-remnants.png b/reskins-angels/graphics/entity/smelting/pipe/tungsten/remnants/pipe-remnants.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/pipe/tungsten/remnants/pipe-remnants.png rename to reskins-angels/graphics/entity/smelting/pipe/tungsten/remnants/pipe-remnants.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/hr-powder-mixer-highlights.png b/reskins-angels/graphics/entity/smelting/powder-mixer/hr-powder-mixer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/hr-powder-mixer-highlights.png rename to reskins-angels/graphics/entity/smelting/powder-mixer/hr-powder-mixer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/hr-powder-mixer-mask.png b/reskins-angels/graphics/entity/smelting/powder-mixer/hr-powder-mixer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/hr-powder-mixer-mask.png rename to reskins-angels/graphics/entity/smelting/powder-mixer/hr-powder-mixer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/powder-mixer-highlights.png b/reskins-angels/graphics/entity/smelting/powder-mixer/powder-mixer-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/powder-mixer-highlights.png rename to reskins-angels/graphics/entity/smelting/powder-mixer/powder-mixer-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/powder-mixer-mask.png b/reskins-angels/graphics/entity/smelting/powder-mixer/powder-mixer-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/powder-mixer/powder-mixer-mask.png rename to reskins-angels/graphics/entity/smelting/powder-mixer/powder-mixer-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/hr-sintering-oven-highlights.png b/reskins-angels/graphics/entity/smelting/sintering-oven/hr-sintering-oven-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/hr-sintering-oven-highlights.png rename to reskins-angels/graphics/entity/smelting/sintering-oven/hr-sintering-oven-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/hr-sintering-oven-mask.png b/reskins-angels/graphics/entity/smelting/sintering-oven/hr-sintering-oven-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/hr-sintering-oven-mask.png rename to reskins-angels/graphics/entity/smelting/sintering-oven/hr-sintering-oven-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/sintering-oven-highlights.png b/reskins-angels/graphics/entity/smelting/sintering-oven/sintering-oven-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/sintering-oven-highlights.png rename to reskins-angels/graphics/entity/smelting/sintering-oven/sintering-oven-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/sintering-oven-mask.png b/reskins-angels/graphics/entity/smelting/sintering-oven/sintering-oven-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/sintering-oven/sintering-oven-mask.png rename to reskins-angels/graphics/entity/smelting/sintering-oven/sintering-oven-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-highlights.png b/reskins-angels/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-mask.png b/reskins-angels/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-mask.png rename to reskins-angels/graphics/entity/smelting/strand-casting-machine/hr-strand-casting-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-highlights.png b/reskins-angels/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-highlights.png rename to reskins-angels/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-highlights.png diff --git a/reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-mask.png b/reskins-angels/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-mask.png rename to reskins-angels/graphics/entity/smelting/strand-casting-machine/strand-casting-machine-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/big-chest-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/big-chest-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/big-chest-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/big-chest-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-active-provider-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-active-provider-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-active-provider-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-active-provider-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-buffer-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-buffer-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-buffer-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-buffer-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-passive-provider-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-passive-provider-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-passive-provider-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-passive-provider-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-requester-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-requester-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-requester-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-requester-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-storage-icon-base.png b/reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-storage-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/big-chest/logistic-big-chest-storage-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/big-chest/logistic-big-chest-storage-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-active-provider-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-active-provider-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-active-provider-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-active-provider-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-buffer-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-buffer-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-buffer-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-buffer-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-passive-provider-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-passive-provider-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-passive-provider-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-passive-provider-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-requester-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-requester-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-requester-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-requester-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-storage-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-storage-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/logistic-warehouse-storage-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/logistic-warehouse-storage-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/warehouse-icon-base.png b/reskins-angels/graphics/icons/addons-storage/warehouse/warehouse-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/addons-storage/warehouse/warehouse-icon-base.png rename to reskins-angels/graphics/icons/addons-storage/warehouse/warehouse-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-base.png b/reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-base.png rename to reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-highlights.png b/reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-highlights.png rename to reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-mask.png b/reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-mask.png rename to reskins-angels/graphics/icons/bioprocessing/algae-farm/algae-farm-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-base.png b/reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-base.png rename to reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-highlights.png b/reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-highlights.png rename to reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-mask.png b/reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/bioprocessing/composter/composter-icon-mask.png rename to reskins-angels/graphics/icons/bioprocessing/composter/composter-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/AMOX-cell.png b/reskins-angels/graphics/icons/industries/nuclear/AMOX-cell.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/AMOX-cell.png rename to reskins-angels/graphics/icons/industries/nuclear/AMOX-cell.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/americium-241.png b/reskins-angels/graphics/icons/industries/nuclear/americium-241.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/americium-241.png rename to reskins-angels/graphics/icons/industries/nuclear/americium-241.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-deuterium-fuel-cell.png b/reskins-angels/graphics/icons/industries/nuclear/angels-deuterium-fuel-cell.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-deuterium-fuel-cell.png rename to reskins-angels/graphics/icons/industries/nuclear/angels-deuterium-fuel-cell.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-nuclear-fuel-2.png b/reskins-angels/graphics/icons/industries/nuclear/angels-nuclear-fuel-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-nuclear-fuel-2.png rename to reskins-angels/graphics/icons/industries/nuclear/angels-nuclear-fuel-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-nuclear-fuel.png b/reskins-angels/graphics/icons/industries/nuclear/angels-nuclear-fuel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-nuclear-fuel.png rename to reskins-angels/graphics/icons/industries/nuclear/angels-nuclear-fuel.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-thorium-fuel-cell.png b/reskins-angels/graphics/icons/industries/nuclear/angels-thorium-fuel-cell.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-thorium-fuel-cell.png rename to reskins-angels/graphics/icons/industries/nuclear/angels-thorium-fuel-cell.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-uranium-fuel-cell.png b/reskins-angels/graphics/icons/industries/nuclear/angels-uranium-fuel-cell.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/angels-uranium-fuel-cell.png rename to reskins-angels/graphics/icons/industries/nuclear/angels-uranium-fuel-cell.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/curium-245.png b/reskins-angels/graphics/icons/industries/nuclear/curium-245.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/curium-245.png rename to reskins-angels/graphics/icons/industries/nuclear/curium-245.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/neptunium-240.png b/reskins-angels/graphics/icons/industries/nuclear/neptunium-240.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/neptunium-240.png rename to reskins-angels/graphics/icons/industries/nuclear/neptunium-240.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/plutonium-240.png b/reskins-angels/graphics/icons/industries/nuclear/plutonium-240.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/plutonium-240.png rename to reskins-angels/graphics/icons/industries/nuclear/plutonium-240.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/thorium-232.png b/reskins-angels/graphics/icons/industries/nuclear/thorium-232.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/thorium-232.png rename to reskins-angels/graphics/icons/industries/nuclear/thorium-232.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-234.png b/reskins-angels/graphics/icons/industries/nuclear/uranium-234.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-234.png rename to reskins-angels/graphics/icons/industries/nuclear/uranium-234.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-235.png b/reskins-angels/graphics/icons/industries/nuclear/uranium-235.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-235.png rename to reskins-angels/graphics/icons/industries/nuclear/uranium-235.png diff --git a/reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-fuel-cell.png b/reskins-angels/graphics/icons/industries/nuclear/uranium-fuel-cell.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/industries/nuclear/uranium-fuel-cell.png rename to reskins-angels/graphics/icons/industries/nuclear/uranium-fuel-cell.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-base.png b/reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-base.png rename to reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-mask.png b/reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/advanced-chemical-plant/advanced-chemical-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-base.png b/reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-base.png rename to reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-mask.png b/reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/advanced-gas-refinery/advanced-gas-refinery-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-base.png b/reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-base.png rename to reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-mask.png b/reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/air-filter/air-filter-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/air-filter/air-filter-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-base.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-base.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-mask.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/chemical-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-base.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-base.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-mask.png b/reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/chemical-plant/mini-chemical-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-base.png b/reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-base.png rename to reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-mask.png b/reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/electric-boiler/electric-boiler-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-base.png b/reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-base.png rename to reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-mask.png b/reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/electrolyser/electrolyser-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/electrolyser/electrolyser-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/flare-stack/flare-stack-icon-base.png b/reskins-angels/graphics/icons/petrochem/flare-stack/flare-stack-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/flare-stack/flare-stack-icon-base.png rename to reskins-angels/graphics/icons/petrochem/flare-stack/flare-stack-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-base.png b/reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-base.png rename to reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-mask.png b/reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/gas-refinery/gas-refinery-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/intermediates/pellet-coke.png b/reskins-angels/graphics/icons/petrochem/intermediates/pellet-coke.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/intermediates/pellet-coke.png rename to reskins-angels/graphics/icons/petrochem/intermediates/pellet-coke.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-gas-tank/petrochem-gas-tank-icon-base.png b/reskins-angels/graphics/icons/petrochem/petrochem-gas-tank/petrochem-gas-tank-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-gas-tank/petrochem-gas-tank-icon-base.png rename to reskins-angels/graphics/icons/petrochem/petrochem-gas-tank/petrochem-gas-tank-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-inline-tank/petrochem-inline-tank-icon-base.png b/reskins-angels/graphics/icons/petrochem/petrochem-inline-tank/petrochem-inline-tank-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-inline-tank/petrochem-inline-tank-icon-base.png rename to reskins-angels/graphics/icons/petrochem/petrochem-inline-tank/petrochem-inline-tank-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-oil-tank/petrochem-oil-tank-icon-base.png b/reskins-angels/graphics/icons/petrochem/petrochem-oil-tank/petrochem-oil-tank-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/petrochem-oil-tank/petrochem-oil-tank-icon-base.png rename to reskins-angels/graphics/icons/petrochem/petrochem-oil-tank/petrochem-oil-tank-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-base.png b/reskins-angels/graphics/icons/petrochem/separator/separator-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-base.png rename to reskins-angels/graphics/icons/petrochem/separator/separator-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/separator/separator-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/separator/separator-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-mask.png b/reskins-angels/graphics/icons/petrochem/separator/separator-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/separator/separator-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/separator/separator-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-base.png b/reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-base.png rename to reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-highlights.png b/reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-highlights.png rename to reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-mask.png b/reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/steam-cracker/steam-cracker-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/valve/valve-icon-base.png b/reskins-angels/graphics/icons/petrochem/valve/valve-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/valve/valve-icon-base.png rename to reskins-angels/graphics/icons/petrochem/valve/valve-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/petrochem/valve/valve-icon-mask.png b/reskins-angels/graphics/icons/petrochem/valve/valve-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/petrochem/valve/valve-icon-mask.png rename to reskins-angels/graphics/icons/petrochem/valve/valve-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/clarifier/clarifier-icon-base.png b/reskins-angels/graphics/icons/refining/clarifier/clarifier-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/clarifier/clarifier-icon-base.png rename to reskins-angels/graphics/icons/refining/clarifier/clarifier-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-base.png b/reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-base.png rename to reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-highlights.png b/reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-highlights.png rename to reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-mask.png b/reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/crystallizer/crystallizer-icon-mask.png rename to reskins-angels/graphics/icons/refining/crystallizer/crystallizer-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-base.png b/reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-base.png rename to reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-highlights.png b/reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-highlights.png rename to reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-mask.png b/reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-mask.png rename to reskins-angels/graphics/icons/refining/electrowinning-cell/electrowinning-cell-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-base.png b/reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-base.png rename to reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-highlights.png b/reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-highlights.png rename to reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-mask.png b/reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/filtration-unit/filtration-unit-icon-mask.png rename to reskins-angels/graphics/icons/refining/filtration-unit/filtration-unit-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-base.png b/reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-base.png rename to reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-highlights.png b/reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-highlights.png rename to reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-mask.png b/reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/hydro-plant/hydro-plant-icon-mask.png rename to reskins-angels/graphics/icons/refining/hydro-plant/hydro-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/intermediates/slag.png b/reskins-angels/graphics/icons/refining/intermediates/slag.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/intermediates/slag.png rename to reskins-angels/graphics/icons/refining/intermediates/slag.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/intermediates/solid-limestone.png b/reskins-angels/graphics/icons/refining/intermediates/solid-limestone.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/intermediates/solid-limestone.png rename to reskins-angels/graphics/icons/refining/intermediates/solid-limestone.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-base.png b/reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-base.png rename to reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-highlights.png b/reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-highlights.png rename to reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-mask.png b/reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/liquefier/liquefier-icon-mask.png rename to reskins-angels/graphics/icons/refining/liquefier/liquefier-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-1.png b/reskins-angels/graphics/icons/refining/numbers/num-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-1.png rename to reskins-angels/graphics/icons/refining/numbers/num-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-10.png b/reskins-angels/graphics/icons/refining/numbers/num-10.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-10.png rename to reskins-angels/graphics/icons/refining/numbers/num-10.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-2.png b/reskins-angels/graphics/icons/refining/numbers/num-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-2.png rename to reskins-angels/graphics/icons/refining/numbers/num-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-3.png b/reskins-angels/graphics/icons/refining/numbers/num-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-3.png rename to reskins-angels/graphics/icons/refining/numbers/num-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-4.png b/reskins-angels/graphics/icons/refining/numbers/num-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-4.png rename to reskins-angels/graphics/icons/refining/numbers/num-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-5.png b/reskins-angels/graphics/icons/refining/numbers/num-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-5.png rename to reskins-angels/graphics/icons/refining/numbers/num-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-6.png b/reskins-angels/graphics/icons/refining/numbers/num-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-6.png rename to reskins-angels/graphics/icons/refining/numbers/num-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-7.png b/reskins-angels/graphics/icons/refining/numbers/num-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-7.png rename to reskins-angels/graphics/icons/refining/numbers/num-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-8.png b/reskins-angels/graphics/icons/refining/numbers/num-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-8.png rename to reskins-angels/graphics/icons/refining/numbers/num-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/numbers/num-9.png b/reskins-angels/graphics/icons/refining/numbers/num-9.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/numbers/num-9.png rename to reskins-angels/graphics/icons/refining/numbers/num-9.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-base.png b/reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-crusher/ore-crusher-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-crusher/ore-crusher-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-base.png b/reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-flotation-cell/ore-flotation-cell-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-base.png b/reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-leaching-plant/ore-leaching-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-base.png b/reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-powderizer/ore-powderizer-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-base.png b/reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-refinery/ore-refinery-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-refinery/ore-refinery-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-base.png b/reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-base.png rename to reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-highlights.png b/reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-highlights.png rename to reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-mask.png b/reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-mask.png rename to reskins-angels/graphics/icons/refining/ore-sorting-facility/ore-sorting-facility-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-base.png b/reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-base.png rename to reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-highlights.png b/reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-highlights.png rename to reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-mask.png b/reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/salination-plant/salination-plant-icon-mask.png rename to reskins-angels/graphics/icons/refining/salination-plant/salination-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-base.png b/reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-base.png rename to reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-highlights.png b/reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-highlights.png rename to reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-mask.png b/reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/refining/washing-plant/washing-plant-icon-mask.png rename to reskins-angels/graphics/icons/refining/washing-plant/washing-plant-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/armor/bob-power-armor-mk4.png b/reskins-angels/graphics/icons/smelting/armor/bob-power-armor-mk4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/armor/bob-power-armor-mk4.png rename to reskins-angels/graphics/icons/smelting/armor/bob-power-armor-mk4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/armor/bob-power-armor-mk5.png b/reskins-angels/graphics/icons/smelting/armor/bob-power-armor-mk5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/armor/bob-power-armor-mk5.png rename to reskins-angels/graphics/icons/smelting/armor/bob-power-armor-mk5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/armor/heavy-armor-2.png b/reskins-angels/graphics/icons/smelting/armor/heavy-armor-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/armor/heavy-armor-2.png rename to reskins-angels/graphics/icons/smelting/armor/heavy-armor-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/armor/heavy-armor-3.png b/reskins-angels/graphics/icons/smelting/armor/heavy-armor-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/armor/heavy-armor-3.png rename to reskins-angels/graphics/icons/smelting/armor/heavy-armor-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/ceramic-bearing-ball.png b/reskins-angels/graphics/icons/smelting/bearing-balls/ceramic-bearing-ball.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/ceramic-bearing-ball.png rename to reskins-angels/graphics/icons/smelting/bearing-balls/ceramic-bearing-ball.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/cobalt-steel-bearing-ball.png b/reskins-angels/graphics/icons/smelting/bearing-balls/cobalt-steel-bearing-ball.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/cobalt-steel-bearing-ball.png rename to reskins-angels/graphics/icons/smelting/bearing-balls/cobalt-steel-bearing-ball.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/nitinol-bearing-ball.png b/reskins-angels/graphics/icons/smelting/bearing-balls/nitinol-bearing-ball.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/nitinol-bearing-ball.png rename to reskins-angels/graphics/icons/smelting/bearing-balls/nitinol-bearing-ball.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/titanium-bearing-ball.png b/reskins-angels/graphics/icons/smelting/bearing-balls/titanium-bearing-ball.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearing-balls/titanium-bearing-ball.png rename to reskins-angels/graphics/icons/smelting/bearing-balls/titanium-bearing-ball.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearings/ceramic-bearing.png b/reskins-angels/graphics/icons/smelting/bearings/ceramic-bearing.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearings/ceramic-bearing.png rename to reskins-angels/graphics/icons/smelting/bearings/ceramic-bearing.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearings/cobalt-steel-bearing.png b/reskins-angels/graphics/icons/smelting/bearings/cobalt-steel-bearing.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearings/cobalt-steel-bearing.png rename to reskins-angels/graphics/icons/smelting/bearings/cobalt-steel-bearing.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearings/nitinol-bearing.png b/reskins-angels/graphics/icons/smelting/bearings/nitinol-bearing.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearings/nitinol-bearing.png rename to reskins-angels/graphics/icons/smelting/bearings/nitinol-bearing.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/bearings/titanium-bearing.png b/reskins-angels/graphics/icons/smelting/bearings/titanium-bearing.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/bearings/titanium-bearing.png rename to reskins-angels/graphics/icons/smelting/bearings/titanium-bearing.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-base.png b/reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-base.png rename to reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-highlights.png b/reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-mask.png b/reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/blast-furnace/blast-furnace-icon-mask.png rename to reskins-angels/graphics/icons/smelting/blast-furnace/blast-furnace-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-base.png b/reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-base.png rename to reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-highlights.png b/reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-mask.png b/reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/casting-machine/casting-machine-icon-mask.png rename to reskins-angels/graphics/icons/smelting/casting-machine/casting-machine-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-base.png b/reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-base.png rename to reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-highlights.png b/reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-mask.png b/reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-mask.png rename to reskins-angels/graphics/icons/smelting/chemical-furnace/chemical-furnace-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/cooling-tower/cooling-tower-icon-base.png b/reskins-angels/graphics/icons/smelting/cooling-tower/cooling-tower-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/cooling-tower/cooling-tower-icon-base.png rename to reskins-angels/graphics/icons/smelting/cooling-tower/cooling-tower-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/gears/cobalt-steel-gear-wheel.png b/reskins-angels/graphics/icons/smelting/gears/cobalt-steel-gear-wheel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/gears/cobalt-steel-gear-wheel.png rename to reskins-angels/graphics/icons/smelting/gears/cobalt-steel-gear-wheel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/gears/iron-gear-wheel.png b/reskins-angels/graphics/icons/smelting/gears/iron-gear-wheel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/gears/iron-gear-wheel.png rename to reskins-angels/graphics/icons/smelting/gears/iron-gear-wheel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/gears/nitinol-gear-wheel.png b/reskins-angels/graphics/icons/smelting/gears/nitinol-gear-wheel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/gears/nitinol-gear-wheel.png rename to reskins-angels/graphics/icons/smelting/gears/nitinol-gear-wheel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/gears/titanium-gear-wheel.png b/reskins-angels/graphics/icons/smelting/gears/titanium-gear-wheel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/gears/titanium-gear-wheel.png rename to reskins-angels/graphics/icons/smelting/gears/titanium-gear-wheel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/gears/tungsten-gear-wheel.png b/reskins-angels/graphics/icons/smelting/gears/tungsten-gear-wheel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/gears/tungsten-gear-wheel.png rename to reskins-angels/graphics/icons/smelting/gears/tungsten-gear-wheel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-base.png b/reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-base.png rename to reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-highlights.png b/reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-mask.png b/reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/induction-furnace/induction-furnace-icon-mask.png rename to reskins-angels/graphics/icons/smelting/induction-furnace/induction-furnace-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-1.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-1.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-2.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-2.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-3.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-3.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-4.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-4.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-5.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-5.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-6.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-6.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-7.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-7.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-8.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-8.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium.png b/reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/aluminium/ingot-aluminium.png rename to reskins-angels/graphics/icons/smelting/ingots/aluminium/ingot-aluminium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-1.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-1.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-2.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-2.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-3.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-3.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-4.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-4.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-5.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-5.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-6.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-6.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-7.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-7.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-8.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome-8.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome.png b/reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/chrome/ingot-chrome.png rename to reskins-angels/graphics/icons/smelting/ingots/chrome/ingot-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-1.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-1.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-2.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-2.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-3.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-3.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-4.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-4.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-5.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-5.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-6.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-6.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-7.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-7.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-8.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-8.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt.png b/reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/cobalt/ingot-cobalt.png rename to reskins-angels/graphics/icons/smelting/ingots/cobalt/ingot-cobalt.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-1.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-1.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-2.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-2.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-3.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-3.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-4.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-4.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-5.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-5.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-6.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-6.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-7.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-7.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-8.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper-8.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper.png b/reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/copper/ingot-copper.png rename to reskins-angels/graphics/icons/smelting/ingots/copper/ingot-copper.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-1.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-1.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-2.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-2.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-3.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-3.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-4.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-4.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-5.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-5.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-6.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-6.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-7.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-7.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-8.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold-8.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold.png b/reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/gold/ingot-gold.png rename to reskins-angels/graphics/icons/smelting/ingots/gold/ingot-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-1.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-1.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-2.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-2.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-3.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-3.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-4.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-4.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-5.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-5.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-6.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-6.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-7.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-7.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-8.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-8.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-prime.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-prime.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron-prime.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron-prime.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron.png b/reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/iron/ingot-iron.png rename to reskins-angels/graphics/icons/smelting/ingots/iron/ingot-iron.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-1.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-1.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-2.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-2.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-3.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-3.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-4.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-4.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-5.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-5.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-6.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-6.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-7.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-7.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-8.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead-8.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead.png b/reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/lead/ingot-lead.png rename to reskins-angels/graphics/icons/smelting/ingots/lead/ingot-lead.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-1.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-1.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-2.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-2.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-3.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-3.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-4.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-4.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-5.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-5.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-6.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-6.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-7.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-7.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-8.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese-8.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese.png b/reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/manganese/ingot-manganese.png rename to reskins-angels/graphics/icons/smelting/ingots/manganese/ingot-manganese.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-1.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-1.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-2.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-2.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-3.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-3.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-4.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-4.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-5.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-5.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-6.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-6.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-7.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-7.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-8.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel-8.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel.png b/reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/nickel/ingot-nickel.png rename to reskins-angels/graphics/icons/smelting/ingots/nickel/ingot-nickel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-1.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-1.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-2.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-2.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-3.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-3.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-4.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-4.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-5.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-5.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-6.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-6.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-7.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-7.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-8.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum-8.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum.png b/reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/platinum/ingot-platinum.png rename to reskins-angels/graphics/icons/smelting/ingots/platinum/ingot-platinum.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-1.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-1.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-2.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-2.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-3.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-3.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-4.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-4.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-5.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-5.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-6.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-6.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-7.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-7.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-8.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon-8.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon.png b/reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silicon/ingot-silicon.png rename to reskins-angels/graphics/icons/smelting/ingots/silicon/ingot-silicon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-1.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-1.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-2.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-2.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-3.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-3.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-4.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-4.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-5.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-5.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-6.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-6.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-7.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-7.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-8.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver-8.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver.png b/reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/silver/ingot-silver.png rename to reskins-angels/graphics/icons/smelting/ingots/silver/ingot-silver.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-1.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-1.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-2.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-2.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-3.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-3.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-4.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-4.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-5.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-5.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-6.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-6.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-7.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-7.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-8.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel-8.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel.png b/reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/steel/ingot-steel.png rename to reskins-angels/graphics/icons/smelting/ingots/steel/ingot-steel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-1.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-1.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-2.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-2.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-3.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-3.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-4.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-4.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-5.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-5.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-6.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-6.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-7.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-7.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-8.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin-8.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin.png b/reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tin/ingot-tin.png rename to reskins-angels/graphics/icons/smelting/ingots/tin/ingot-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-1.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-1.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-2.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-2.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-3.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-3.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-4.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-4.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-5.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-5.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-6.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-6.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-7.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-7.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-8.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium-8.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium.png b/reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/titanium/ingot-titanium.png rename to reskins-angels/graphics/icons/smelting/ingots/titanium/ingot-titanium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-1.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-1.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-2.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-2.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-3.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-3.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-4.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-4.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-5.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-5.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-6.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-6.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-7.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-7.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-8.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-8.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten.png b/reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/tungsten/ingot-tungsten.png rename to reskins-angels/graphics/icons/smelting/ingots/tungsten/ingot-tungsten.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-1.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-1.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-2.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-2.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-3.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-3.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-4.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-4.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-5.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-5.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-6.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-6.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-7.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-7.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-8.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-8.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc-8.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc-8.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc.png b/reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ingots/zinc/ingot-zinc.png rename to reskins-angels/graphics/icons/smelting/ingots/zinc/ingot-zinc.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-quartz-crucible-2.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-quartz-crucible-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-quartz-crucible-2.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-quartz-crucible-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-quartz-crucible.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-quartz-crucible.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-quartz-crucible.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-quartz-crucible.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-platinum.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-wire-platinum.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-platinum.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-wire-platinum.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-silver.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-wire-silver.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-silver.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-wire-silver.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-tin.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-wire-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-tin.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-wire-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-tin1.png b/reskins-angels/graphics/icons/smelting/intermediates/angels-wire-tin1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/angels-wire-tin1.png rename to reskins-angels/graphics/icons/smelting/intermediates/angels-wire-tin1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/solid-lime-2.png b/reskins-angels/graphics/icons/smelting/intermediates/solid-lime-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/solid-lime-2.png rename to reskins-angels/graphics/icons/smelting/intermediates/solid-lime-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/intermediates/solid-lime.png b/reskins-angels/graphics/icons/smelting/intermediates/solid-lime.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/intermediates/solid-lime.png rename to reskins-angels/graphics/icons/smelting/intermediates/solid-lime.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-chrome.png b/reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-chrome.png rename to reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-gold.png b/reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-gold.png rename to reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-tin.png b/reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/liquid-molten-tin.png rename to reskins-angels/graphics/icons/smelting/liquid-material/liquid-molten-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/molten-gold.png b/reskins-angels/graphics/icons/smelting/liquid-material/molten-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/liquid-material/molten-gold.png rename to reskins-angels/graphics/icons/smelting/liquid-material/molten-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-base.png b/reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-base.png rename to reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-highlights.png b/reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-mask.png b/reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-mask.png rename to reskins-angels/graphics/icons/smelting/ore-processing-machine/ore-processing-machine-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-1.png b/reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-1.png rename to reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-2.png b/reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-2.png rename to reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-3.png b/reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore-3.png rename to reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore.png b/reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/lead-ore/lead-ore.png rename to reskins-angels/graphics/icons/smelting/ores/lead-ore/lead-ore.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-1.png b/reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-1.png rename to reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-2.png b/reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-2.png rename to reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-3.png b/reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore-3.png rename to reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore.png b/reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/rutile-ore/rutile-ore.png rename to reskins-angels/graphics/icons/smelting/ores/rutile-ore/rutile-ore.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-1.png b/reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-1.png rename to reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-2.png b/reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-2.png rename to reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-3.png b/reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore-3.png rename to reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore.png b/reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/thorium-ore/thorium-ore.png rename to reskins-angels/graphics/icons/smelting/ores/thorium-ore/thorium-ore.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-1.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-1.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-2.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-2.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-3.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-3.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-4.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-4.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-5.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-5.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-6.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-6.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-7.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-7.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore-7.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore-7.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore.png b/reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/ores/tin-ore/tin-ore.png rename to reskins-angels/graphics/icons/smelting/ores/tin-ore/tin-ore.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-base.png b/reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-base.png rename to reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-highlights.png b/reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-mask.png b/reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellet-press/pellet-press-icon-mask.png rename to reskins-angels/graphics/icons/smelting/pellet-press/pellet-press-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-chrome.png b/reskins-angels/graphics/icons/smelting/pellets/pellet-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-chrome.png rename to reskins-angels/graphics/icons/smelting/pellets/pellet-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-gold.png b/reskins-angels/graphics/icons/smelting/pellets/pellet-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-gold.png rename to reskins-angels/graphics/icons/smelting/pellets/pellet-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-tin.png b/reskins-angels/graphics/icons/smelting/pellets/pellet-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pellets/pellet-tin.png rename to reskins-angels/graphics/icons/smelting/pellets/pellet-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/ceramic-pipe-to-ground-icon.png b/reskins-angels/graphics/icons/smelting/pipe-to-ground/ceramic-pipe-to-ground-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/ceramic-pipe-to-ground-icon.png rename to reskins-angels/graphics/icons/smelting/pipe-to-ground/ceramic-pipe-to-ground-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/nitinol-pipe-to-ground-icon.png b/reskins-angels/graphics/icons/smelting/pipe-to-ground/nitinol-pipe-to-ground-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/nitinol-pipe-to-ground-icon.png rename to reskins-angels/graphics/icons/smelting/pipe-to-ground/nitinol-pipe-to-ground-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/titanium-pipe-to-ground-icon.png b/reskins-angels/graphics/icons/smelting/pipe-to-ground/titanium-pipe-to-ground-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/titanium-pipe-to-ground-icon.png rename to reskins-angels/graphics/icons/smelting/pipe-to-ground/titanium-pipe-to-ground-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/tungsten-pipe-to-ground-icon.png b/reskins-angels/graphics/icons/smelting/pipe-to-ground/tungsten-pipe-to-ground-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe-to-ground/tungsten-pipe-to-ground-icon.png rename to reskins-angels/graphics/icons/smelting/pipe-to-ground/tungsten-pipe-to-ground-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe/ceramic-pipe-icon.png b/reskins-angels/graphics/icons/smelting/pipe/ceramic-pipe-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe/ceramic-pipe-icon.png rename to reskins-angels/graphics/icons/smelting/pipe/ceramic-pipe-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe/nitinol-pipe-icon.png b/reskins-angels/graphics/icons/smelting/pipe/nitinol-pipe-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe/nitinol-pipe-icon.png rename to reskins-angels/graphics/icons/smelting/pipe/nitinol-pipe-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe/titanium-pipe-icon.png b/reskins-angels/graphics/icons/smelting/pipe/titanium-pipe-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe/titanium-pipe-icon.png rename to reskins-angels/graphics/icons/smelting/pipe/titanium-pipe-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/pipe/tungsten-pipe-icon.png b/reskins-angels/graphics/icons/smelting/pipe/tungsten-pipe-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/pipe/tungsten-pipe-icon.png rename to reskins-angels/graphics/icons/smelting/pipe/tungsten-pipe-icon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-aluminium.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-aluminium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-aluminium.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-aluminium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-chrome.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-chrome.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-chrome2.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-chrome2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-chrome2.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-chrome2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-cobalt.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-cobalt.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-cobalt.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-cobalt.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-hot-iron.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-hot-iron.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-hot-iron.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-hot-iron.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-iron.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-iron.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-iron.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-iron.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-lead.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-lead.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-lead.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-lead.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-manganese.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-manganese.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-manganese.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-manganese.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-nickel.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-nickel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-nickel.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-nickel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-platinum.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-platinum.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-platinum.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-platinum.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-silver.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-silver.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-silver.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-silver.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-tin.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-tin.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-titanium.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-titanium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-titanium.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-titanium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-tungsten.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-tungsten.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-tungsten.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-tungsten.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-zinc.png b/reskins-angels/graphics/icons/smelting/plates/angels-plate-zinc.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/angels-plate-zinc.png rename to reskins-angels/graphics/icons/smelting/plates/angels-plate-zinc.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/brass-alloy.png b/reskins-angels/graphics/icons/smelting/plates/brass-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/brass-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/brass-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/bronze-alloy.png b/reskins-angels/graphics/icons/smelting/plates/bronze-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/bronze-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/bronze-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/cobalt-steel-alloy.png b/reskins-angels/graphics/icons/smelting/plates/cobalt-steel-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/cobalt-steel-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/cobalt-steel-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/gunmetal-alloy.png b/reskins-angels/graphics/icons/smelting/plates/gunmetal-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/gunmetal-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/gunmetal-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/invar-alloy.png b/reskins-angels/graphics/icons/smelting/plates/invar-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/invar-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/invar-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/plates/nitinol-alloy.png b/reskins-angels/graphics/icons/smelting/plates/nitinol-alloy.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/plates/nitinol-alloy.png rename to reskins-angels/graphics/icons/smelting/plates/nitinol-alloy.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-base.png b/reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-base.png rename to reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-highlights.png b/reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-mask.png b/reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powder-mixer/powder-mixer-icon-mask.png rename to reskins-angels/graphics/icons/smelting/powder-mixer/powder-mixer-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-1.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-1.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-2.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-2.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-3.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-3.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-4.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-4.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-5.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-5.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-6.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium-6.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium.png b/reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/aluminium/powder-aluminium.png rename to reskins-angels/graphics/icons/smelting/powders/aluminium/powder-aluminium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-1.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-1.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-2.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-2.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-3.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-3.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-4.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-4.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-5.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-5.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-6.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome-6.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome.png b/reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/chrome/powder-chrome.png rename to reskins-angels/graphics/icons/smelting/powders/chrome/powder-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-1.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-1.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-2.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-2.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-3.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-3.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-4.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-4.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-5.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-5.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-6.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt-6.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt.png b/reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/cobalt/powder-cobalt.png rename to reskins-angels/graphics/icons/smelting/powders/cobalt/powder-cobalt.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-1.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-1.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-2.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-2.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-3.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-3.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-4.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-4.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-5.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-5.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-6.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper-6.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper.png b/reskins-angels/graphics/icons/smelting/powders/copper/powder-copper.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/copper/powder-copper.png rename to reskins-angels/graphics/icons/smelting/powders/copper/powder-copper.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-1.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-1.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-2.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-2.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-3.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-3.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-4.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-4.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-5.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-5.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-6.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold-6.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold.png b/reskins-angels/graphics/icons/smelting/powders/gold/powder-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/gold/powder-gold.png rename to reskins-angels/graphics/icons/smelting/powders/gold/powder-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-1.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-1.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-2.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-2.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-3.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-3.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-4.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-4.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-5.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-5.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-6.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron-6.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron.png b/reskins-angels/graphics/icons/smelting/powders/iron/powder-iron.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/iron/powder-iron.png rename to reskins-angels/graphics/icons/smelting/powders/iron/powder-iron.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-1.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-1.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-2.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-2.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-3.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-3.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-4.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-4.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-5.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-5.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-6.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead-6.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead.png b/reskins-angels/graphics/icons/smelting/powders/lead/powder-lead.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/lead/powder-lead.png rename to reskins-angels/graphics/icons/smelting/powders/lead/powder-lead.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-1.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-1.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-2.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-2.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-3.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-3.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-4.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-4.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-5.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-5.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-6.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese-6.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese.png b/reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/manganese/powder-manganese.png rename to reskins-angels/graphics/icons/smelting/powders/manganese/powder-manganese.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-1.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-1.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-2.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-2.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-3.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-3.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-4.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-4.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-5.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-5.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-6.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel-6.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel.png b/reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/nickel/powder-nickel.png rename to reskins-angels/graphics/icons/smelting/powders/nickel/powder-nickel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-1.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-1.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-2.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-2.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-3.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-3.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-4.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-4.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-5.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-5.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-6.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum-6.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum.png b/reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/platinum/powder-platinum.png rename to reskins-angels/graphics/icons/smelting/powders/platinum/powder-platinum.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-1.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-1.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-2.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-2.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-3.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-3.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-4.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-4.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-5.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-5.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-6.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon-6.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon.png b/reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silicon/powder-silicon.png rename to reskins-angels/graphics/icons/smelting/powders/silicon/powder-silicon.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-1.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-1.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-2.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-2.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-3.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-3.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-4.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-4.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-5.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-5.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-6.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver-6.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver.png b/reskins-angels/graphics/icons/smelting/powders/silver/powder-silver.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/silver/powder-silver.png rename to reskins-angels/graphics/icons/smelting/powders/silver/powder-silver.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-1.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-1.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-2.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-2.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-3.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-3.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-4.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-4.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-5.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-5.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-6.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel-6.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel.png b/reskins-angels/graphics/icons/smelting/powders/steel/powder-steel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/steel/powder-steel.png rename to reskins-angels/graphics/icons/smelting/powders/steel/powder-steel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-1.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-1.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-2.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-2.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-3.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-3.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-4.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-4.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-5.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-5.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-6.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin-6.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin.png b/reskins-angels/graphics/icons/smelting/powders/tin/powder-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tin/powder-tin.png rename to reskins-angels/graphics/icons/smelting/powders/tin/powder-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-1.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-1.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-2.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-2.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-3.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-3.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-4.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-4.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-5.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-5.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-6.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium-6.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium.png b/reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/titanium/powder-titanium.png rename to reskins-angels/graphics/icons/smelting/powders/titanium/powder-titanium.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-1.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-1.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-2.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-2.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-3.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-3.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-4.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-4.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-5.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-5.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-6.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-6.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture.png b/reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten-mixture/powder-tungsten-mixture.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-1.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-1.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-2.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-2.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-3.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-3.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-4.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-4.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-5.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-5.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-6.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten-6.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten.png b/reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/tungsten/powder-tungsten.png rename to reskins-angels/graphics/icons/smelting/powders/tungsten/powder-tungsten.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-1.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-1.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-2.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-2.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-2.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-3.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-3.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-3.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-4.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-4.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-4.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-5.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-5.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-5.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-6.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-6.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc-6.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc-6.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc.png b/reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/powders/zinc/powder-zinc.png rename to reskins-angels/graphics/icons/smelting/powders/zinc/powder-zinc.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-chrome.png b/reskins-angels/graphics/icons/smelting/processed-ores/processed-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-chrome.png rename to reskins-angels/graphics/icons/smelting/processed-ores/processed-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-gold.png b/reskins-angels/graphics/icons/smelting/processed-ores/processed-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-gold.png rename to reskins-angels/graphics/icons/smelting/processed-ores/processed-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-tin.png b/reskins-angels/graphics/icons/smelting/processed-ores/processed-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/processed-ores/processed-tin.png rename to reskins-angels/graphics/icons/smelting/processed-ores/processed-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-brass.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-brass.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-brass.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-brass.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-bronze.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-bronze.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-bronze.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-bronze.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-chrome.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-chrome.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-chrome.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-chrome.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-cobalt-steel.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-cobalt-steel.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-cobalt-steel.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-cobalt-steel.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-gold.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-gold.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-gunmetal.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-gunmetal.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-gunmetal.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-gunmetal.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-invar.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-invar.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-invar.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-invar.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-nitinol.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-nitinol.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-nitinol.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-nitinol.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-tin.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-tin.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-tungsten.png b/reskins-angels/graphics/icons/smelting/rolls/angels-roll-tungsten.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/rolls/angels-roll-tungsten.png rename to reskins-angels/graphics/icons/smelting/rolls/angels-roll-tungsten.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-base.png b/reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-base.png rename to reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-highlights.png b/reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-mask.png b/reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/sintering-oven/sintering-oven-icon-mask.png rename to reskins-angels/graphics/icons/smelting/sintering-oven/sintering-oven-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-base.png b/reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-base.png rename to reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-base.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-highlights.png b/reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-highlights.png rename to reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-highlights.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-mask.png b/reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-mask.png rename to reskins-angels/graphics/icons/smelting/strand-casting-machine/strand-casting-machine-icon-mask.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-coil-glass-fiber.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-coil-glass-fiber.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-coil-glass-fiber.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-coil-glass-fiber.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-copper-1.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-copper-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-copper-1.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-copper-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-copper.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-copper.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-copper.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-copper.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-gold-1.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-gold-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-gold-1.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-gold-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-gold.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-gold.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-gold.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-gold.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-silver-1.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-silver-1.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-silver-1.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-silver-1.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-silver.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-silver.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-silver.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-silver.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-tin.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-tin.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-tin.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-tin.png diff --git a/reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-tin2.png b/reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-tin2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/icons/smelting/wire-coils/angels-wire-coil-tin2.png rename to reskins-angels/graphics/icons/smelting/wire-coils/angels-wire-coil-tin2.png diff --git a/reskins-angels_2.1.6/graphics/technology/addons-storage/warehouses/angels-logistic-warehouses.png b/reskins-angels/graphics/technology/addons-storage/warehouses/angels-logistic-warehouses.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/addons-storage/warehouses/angels-logistic-warehouses.png rename to reskins-angels/graphics/technology/addons-storage/warehouses/angels-logistic-warehouses.png diff --git a/reskins-angels_2.1.6/graphics/technology/addons-storage/warehouses/angels-warehouses.png b/reskins-angels/graphics/technology/addons-storage/warehouses/angels-warehouses.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/addons-storage/warehouses/angels-warehouses.png rename to reskins-angels/graphics/technology/addons-storage/warehouses/angels-warehouses.png diff --git a/reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-base.png b/reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-base.png rename to reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-highlights.png b/reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-highlights.png rename to reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-mask.png b/reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/bioprocessing/composter/composter-technology-mask.png rename to reskins-angels/graphics/technology/bioprocessing/composter/composter-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/bioprocessing/modules-2.png b/reskins-angels/graphics/technology/bioprocessing/modules-2.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/bioprocessing/modules-2.png rename to reskins-angels/graphics/technology/bioprocessing/modules-2.png diff --git a/reskins-angels_2.1.6/graphics/technology/bioprocessing/modules-3.png b/reskins-angels/graphics/technology/bioprocessing/modules-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/bioprocessing/modules-3.png rename to reskins-angels/graphics/technology/bioprocessing/modules-3.png diff --git a/reskins-angels_2.1.6/graphics/technology/industries/nuclear/angels-thorium-power.png b/reskins-angels/graphics/technology/industries/nuclear/angels-thorium-power.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/industries/nuclear/angels-thorium-power.png rename to reskins-angels/graphics/technology/industries/nuclear/angels-thorium-power.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png b/reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png rename to reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-highlights.png b/reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-highlights.png rename to reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-mask.png b/reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-mask.png rename to reskins-angels/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/flare-stack/flare-stack-technology-base.png b/reskins-angels/graphics/technology/petrochem/flare-stack/flare-stack-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/flare-stack/flare-stack-technology-base.png rename to reskins-angels/graphics/technology/petrochem/flare-stack/flare-stack-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-base.png b/reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-base.png rename to reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-highlights.png b/reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-highlights.png rename to reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-mask.png b/reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/petrochem/gas-processing/gas-processing-technology-mask.png rename to reskins-angels/graphics/technology/petrochem/gas-processing/gas-processing-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-base.png b/reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-base.png rename to reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-highlights.png b/reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-highlights.png rename to reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-mask.png b/reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-mask.png rename to reskins-angels/graphics/technology/refining/advanced-ore-refining/advanced-ore-refining-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-base.png b/reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-base.png rename to reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-highlights.png b/reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-highlights.png rename to reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-mask.png b/reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-crushing/ore-crushing-technology-mask.png rename to reskins-angels/graphics/technology/refining/ore-crushing/ore-crushing-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-base.png b/reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-base.png rename to reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-highlights.png b/reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-highlights.png rename to reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-mask.png b/reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-flotation/ore-flotation-technology-mask.png rename to reskins-angels/graphics/technology/refining/ore-flotation/ore-flotation-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-base.png b/reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-base.png rename to reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-highlights.png b/reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-highlights.png rename to reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-mask.png b/reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/ore-refining/ore-refining-technology-mask.png rename to reskins-angels/graphics/technology/refining/ore-refining/ore-refining-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-base.png b/reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-base.png rename to reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-highlights.png b/reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-highlights.png rename to reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-mask.png b/reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/refining/water-treatment/water-treatment-technology-mask.png rename to reskins-angels/graphics/technology/refining/water-treatment/water-treatment-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-armor-making-3.png b/reskins-angels/graphics/technology/smelting/armor/bob-armor-making-3.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-armor-making-3.png rename to reskins-angels/graphics/technology/smelting/armor/bob-armor-making-3.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-armor-making-4.png b/reskins-angels/graphics/technology/smelting/armor/bob-armor-making-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-armor-making-4.png rename to reskins-angels/graphics/technology/smelting/armor/bob-armor-making-4.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-power-armor-4.png b/reskins-angels/graphics/technology/smelting/armor/bob-power-armor-4.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-power-armor-4.png rename to reskins-angels/graphics/technology/smelting/armor/bob-power-armor-4.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-power-armor-5.png b/reskins-angels/graphics/technology/smelting/armor/bob-power-armor-5.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/armor/bob-power-armor-5.png rename to reskins-angels/graphics/technology/smelting/armor/bob-power-armor-5.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-1-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-alloy-1-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-1-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-alloy-1-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-2-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-alloy-2-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-2-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-alloy-2-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-3-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-alloy-3-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-alloy-3-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-alloy-3-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-aluminium-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-aluminium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-aluminium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-aluminium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-brass-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-brass-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-brass-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-brass-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-bronze-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-bronze-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-bronze-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-bronze-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-chrome-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-chrome-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-chrome-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-chrome-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-cobalt-steel-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-cobalt-steel-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-cobalt-steel-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-cobalt-steel-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-cobalt-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-cobalt-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-cobalt-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-cobalt-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-concrete-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-concrete-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-concrete-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-concrete-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-copper-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-copper-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-copper-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-copper-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-glass-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-glass-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-glass-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-glass-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-gold-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-gold-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-gold-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-gold-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-gunmetal-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-gunmetal-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-gunmetal-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-gunmetal-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-invar-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-invar-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-invar-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-invar-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-iron-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-iron-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-iron-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-iron-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-lead-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-lead-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-lead-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-lead-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-manganese-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-manganese-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-manganese-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-manganese-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-nickel-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-nickel-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-nickel-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-nickel-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-nitinol-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-nitinol-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-nitinol-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-nitinol-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-platinum-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-platinum-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-platinum-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-platinum-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-silicon-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-silicon-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-silicon-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-silicon-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-silver-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-silver-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-silver-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-silver-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-solder-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-solder-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-solder-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-solder-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-steel-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-steel-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-steel-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-steel-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-tin-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-tin-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-tin-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-tin-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-titanium-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-titanium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-titanium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-titanium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-tungsten-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-tungsten-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-tungsten-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-tungsten-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-zinc-technology-icon.png b/reskins-angels/graphics/technology/smelting/casting/casting-zinc-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/casting/casting-zinc-technology-icon.png rename to reskins-angels/graphics/technology/smelting/casting/casting-zinc-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-base.png b/reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-base.png rename to reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-highlights.png b/reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-mask.png b/reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/metallurgy/metallurgy-technology-mask.png rename to reskins-angels/graphics/technology/smelting/metallurgy/metallurgy-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-base.png b/reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-base.png rename to reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-highlights.png b/reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-mask.png b/reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-mask.png rename to reskins-angels/graphics/technology/smelting/ore-processing-machine/ore-processing-machine-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-base.png b/reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-base.png rename to reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-highlights.png b/reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-mask.png b/reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/pellet-press/pellet-press-technology-mask.png rename to reskins-angels/graphics/technology/smelting/pellet-press/pellet-press-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-base.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-base.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-highlights.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-mask.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-mask.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy-special-vanilla/powder-metallurgy-special-vanilla-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-base.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-base.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-highlights.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-mask.png b/reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-mask.png rename to reskins-angels/graphics/technology/smelting/powder-metallurgy/powder-metallurgy-technology-mask.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-aluminium-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-aluminium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-aluminium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-aluminium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-chrome-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-chrome-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-chrome-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-chrome-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-cobalt-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-cobalt-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-cobalt-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-cobalt-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-copper-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-copper-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-copper-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-copper-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-depleted-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-depleted-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-depleted-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-depleted-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-gold-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-gold-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-gold-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-gold-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-iron-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-iron-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-iron-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-iron-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-lead-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-lead-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-lead-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-lead-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-magnesium-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-magnesium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-magnesium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-magnesium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-manganese-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-manganese-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-manganese-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-manganese-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-nickel-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-nickel-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-nickel-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-nickel-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-osmium-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-osmium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-osmium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-osmium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-platinum-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-platinum-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-platinum-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-platinum-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-silicon-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-silicon-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-silicon-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-silicon-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-silver-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-silver-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-silver-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-silver-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-steel-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-steel-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-steel-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-steel-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-tin-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-tin-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-tin-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-tin-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-titanium-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-titanium-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-titanium-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-titanium-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-tungsten-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-tungsten-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-tungsten-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-tungsten-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-zinc-technology-icon.png b/reskins-angels/graphics/technology/smelting/smelting/smelting-zinc-technology-icon.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/smelting/smelting-zinc-technology-icon.png rename to reskins-angels/graphics/technology/smelting/smelting/smelting-zinc-technology-icon.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-base.png b/reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-base.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-base.png rename to reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-base.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-highlights.png b/reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-highlights.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-highlights.png rename to reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-highlights.png diff --git a/reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-mask.png b/reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-mask.png similarity index 100% rename from reskins-angels_2.1.6/graphics/technology/smelting/strand-casting/strand-casting-technology-mask.png rename to reskins-angels/graphics/technology/smelting/strand-casting/strand-casting-technology-mask.png diff --git a/reskins-angels/info.json b/reskins-angels/info.json new file mode 100644 index 00000000..7bc600f5 --- /dev/null +++ b/reskins-angels/info.json @@ -0,0 +1,23 @@ +{ + "name": "reskins-angels", + "version": "2.1.8", + "factorio_version": "1.1", + "title": "Artisanal Reskins: Angel's Mods", + "author": "Kirazy", + "contact": "kirazy@live.com", + "homepage": "https://forums.factorio.com/viewtopic.php?f=185&t=89666", + "dependencies": [ + "base", + "reskins-library >= 2.1.6", + "? reskins-bobs", + "? angelsbioprocessing", + "? angelsexploration", + "? angelsindustries", + "? angelspetrochem >= 0.9.23", + "? angelsrefining >= 0.12.3", + "? angelssmelting >= 0.6.20", + "(?) angelsaddons-cab", + "(?) angelsaddons-mobility", + "(?) angelsaddons-storage" + ] +} \ No newline at end of file diff --git a/reskins-angels_2.1.6/locale/en/reskins-angels-locale.cfg b/reskins-angels/locale/en/reskins-angels-locale.cfg similarity index 100% rename from reskins-angels_2.1.6/locale/en/reskins-angels-locale.cfg rename to reskins-angels/locale/en/reskins-angels-locale.cfg diff --git a/reskins-angels_2.1.6/locale/ru/reskins-angels-locale.cfg b/reskins-angels/locale/ru/reskins-angels-locale.cfg similarity index 100% rename from reskins-angels_2.1.6/locale/ru/reskins-angels-locale.cfg rename to reskins-angels/locale/ru/reskins-angels-locale.cfg diff --git a/reskins-angels_2.1.6/prototypes/compatibility/bobselectronics.lua b/reskins-angels/prototypes/compatibility/bobselectronics.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/compatibility/bobselectronics.lua rename to reskins-angels/prototypes/compatibility/bobselectronics.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/addons-storage/chests.lua b/reskins-angels/prototypes/entity/addons-storage/chests.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/addons-storage/chests.lua rename to reskins-angels/prototypes/entity/addons-storage/chests.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/addons-storage/logistics-chests.lua b/reskins-angels/prototypes/entity/addons-storage/logistics-chests.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/addons-storage/logistics-chests.lua rename to reskins-angels/prototypes/entity/addons-storage/logistics-chests.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/algae-farm.lua b/reskins-angels/prototypes/entity/bioprocessing/algae-farm.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/algae-farm.lua rename to reskins-angels/prototypes/entity/bioprocessing/algae-farm.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/arboretum.lua b/reskins-angels/prototypes/entity/bioprocessing/arboretum.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/arboretum.lua rename to reskins-angels/prototypes/entity/bioprocessing/arboretum.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/bioprocessor.lua b/reskins-angels/prototypes/entity/bioprocessing/bioprocessor.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/bioprocessor.lua rename to reskins-angels/prototypes/entity/bioprocessing/bioprocessor.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/butchery.lua b/reskins-angels/prototypes/entity/bioprocessing/butchery.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/butchery.lua rename to reskins-angels/prototypes/entity/bioprocessing/butchery.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/composter.lua b/reskins-angels/prototypes/entity/bioprocessing/composter.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/composter.lua rename to reskins-angels/prototypes/entity/bioprocessing/composter.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/field.lua b/reskins-angels/prototypes/entity/bioprocessing/field.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/field.lua rename to reskins-angels/prototypes/entity/bioprocessing/field.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/gardens.lua b/reskins-angels/prototypes/entity/bioprocessing/gardens.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/gardens.lua rename to reskins-angels/prototypes/entity/bioprocessing/gardens.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/hatchery.lua b/reskins-angels/prototypes/entity/bioprocessing/hatchery.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/hatchery.lua rename to reskins-angels/prototypes/entity/bioprocessing/hatchery.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/nutrient-extractor.lua b/reskins-angels/prototypes/entity/bioprocessing/nutrient-extractor.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/nutrient-extractor.lua rename to reskins-angels/prototypes/entity/bioprocessing/nutrient-extractor.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/press.lua b/reskins-angels/prototypes/entity/bioprocessing/press.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/press.lua rename to reskins-angels/prototypes/entity/bioprocessing/press.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/processing-plant.lua b/reskins-angels/prototypes/entity/bioprocessing/processing-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/processing-plant.lua rename to reskins-angels/prototypes/entity/bioprocessing/processing-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-biter.lua b/reskins-angels/prototypes/entity/bioprocessing/refugium-biter.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-biter.lua rename to reskins-angels/prototypes/entity/bioprocessing/refugium-biter.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-fish.lua b/reskins-angels/prototypes/entity/bioprocessing/refugium-fish.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-fish.lua rename to reskins-angels/prototypes/entity/bioprocessing/refugium-fish.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-puffer.lua b/reskins-angels/prototypes/entity/bioprocessing/refugium-puffer.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/refugium-puffer.lua rename to reskins-angels/prototypes/entity/bioprocessing/refugium-puffer.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/seed-extractor.lua b/reskins-angels/prototypes/entity/bioprocessing/seed-extractor.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/seed-extractor.lua rename to reskins-angels/prototypes/entity/bioprocessing/seed-extractor.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/bioprocessing/tree-generator.lua b/reskins-angels/prototypes/entity/bioprocessing/tree-generator.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/bioprocessing/tree-generator.lua rename to reskins-angels/prototypes/entity/bioprocessing/tree-generator.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/exploration/tank.lua b/reskins-angels/prototypes/entity/exploration/tank.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/exploration/tank.lua rename to reskins-angels/prototypes/entity/exploration/tank.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/exploration/turrets.lua b/reskins-angels/prototypes/entity/exploration/turrets.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/exploration/turrets.lua rename to reskins-angels/prototypes/entity/exploration/turrets.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/basic-lab.lua b/reskins-angels/prototypes/entity/industries/basic-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/basic-lab.lua rename to reskins-angels/prototypes/entity/industries/basic-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/chests.lua b/reskins-angels/prototypes/entity/industries/chests.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/chests.lua rename to reskins-angels/prototypes/entity/industries/chests.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/energy-lab.lua b/reskins-angels/prototypes/entity/industries/energy-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/energy-lab.lua rename to reskins-angels/prototypes/entity/industries/energy-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/enhance-lab.lua b/reskins-angels/prototypes/entity/industries/enhance-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/enhance-lab.lua rename to reskins-angels/prototypes/entity/industries/enhance-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/exploration-lab.lua b/reskins-angels/prototypes/entity/industries/exploration-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/exploration-lab.lua rename to reskins-angels/prototypes/entity/industries/exploration-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/lamp.lua b/reskins-angels/prototypes/entity/industries/lamp.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/lamp.lua rename to reskins-angels/prototypes/entity/industries/lamp.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/logistic-lab.lua b/reskins-angels/prototypes/entity/industries/logistic-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/logistic-lab.lua rename to reskins-angels/prototypes/entity/industries/logistic-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/main-lab.lua b/reskins-angels/prototypes/entity/industries/main-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/main-lab.lua rename to reskins-angels/prototypes/entity/industries/main-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/processing-lab.lua b/reskins-angels/prototypes/entity/industries/processing-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/processing-lab.lua rename to reskins-angels/prototypes/entity/industries/processing-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/industries/war-lab.lua b/reskins-angels/prototypes/entity/industries/war-lab.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/industries/war-lab.lua rename to reskins-angels/prototypes/entity/industries/war-lab.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem-updates.lua b/reskins-angels/prototypes/entity/petrochem-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem-updates.lua rename to reskins-angels/prototypes/entity/petrochem-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem.lua b/reskins-angels/prototypes/entity/petrochem.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem.lua rename to reskins-angels/prototypes/entity/petrochem.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/advanced-chemical-plant.lua b/reskins-angels/prototypes/entity/petrochem/advanced-chemical-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/advanced-chemical-plant.lua rename to reskins-angels/prototypes/entity/petrochem/advanced-chemical-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/advanced-gas-refinery.lua b/reskins-angels/prototypes/entity/petrochem/advanced-gas-refinery.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/advanced-gas-refinery.lua rename to reskins-angels/prototypes/entity/petrochem/advanced-gas-refinery.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/air-filter.lua b/reskins-angels/prototypes/entity/petrochem/air-filter.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/air-filter.lua rename to reskins-angels/prototypes/entity/petrochem/air-filter.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/electric-boiler.lua b/reskins-angels/prototypes/entity/petrochem/electric-boiler.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/electric-boiler.lua rename to reskins-angels/prototypes/entity/petrochem/electric-boiler.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/electrolyser.lua b/reskins-angels/prototypes/entity/petrochem/electrolyser.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/electrolyser.lua rename to reskins-angels/prototypes/entity/petrochem/electrolyser.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/flare-stack.lua b/reskins-angels/prototypes/entity/petrochem/flare-stack.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/flare-stack.lua rename to reskins-angels/prototypes/entity/petrochem/flare-stack.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/fluid-splitter.lua b/reskins-angels/prototypes/entity/petrochem/fluid-splitter.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/fluid-splitter.lua rename to reskins-angels/prototypes/entity/petrochem/fluid-splitter.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/gas-refinery.lua b/reskins-angels/prototypes/entity/petrochem/gas-refinery.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/gas-refinery.lua rename to reskins-angels/prototypes/entity/petrochem/gas-refinery.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-gas-tank.lua b/reskins-angels/prototypes/entity/petrochem/petrochem-gas-tank.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-gas-tank.lua rename to reskins-angels/prototypes/entity/petrochem/petrochem-gas-tank.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-inline-tank.lua b/reskins-angels/prototypes/entity/petrochem/petrochem-inline-tank.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-inline-tank.lua rename to reskins-angels/prototypes/entity/petrochem/petrochem-inline-tank.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-oil-tank.lua b/reskins-angels/prototypes/entity/petrochem/petrochem-oil-tank.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/petrochem-oil-tank.lua rename to reskins-angels/prototypes/entity/petrochem/petrochem-oil-tank.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/separator.lua b/reskins-angels/prototypes/entity/petrochem/separator.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/separator.lua rename to reskins-angels/prototypes/entity/petrochem/separator.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/steam-cracker.lua b/reskins-angels/prototypes/entity/petrochem/steam-cracker.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/steam-cracker.lua rename to reskins-angels/prototypes/entity/petrochem/steam-cracker.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/petrochem/valve.lua b/reskins-angels/prototypes/entity/petrochem/valve.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/petrochem/valve.lua rename to reskins-angels/prototypes/entity/petrochem/valve.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/barreling-pump.lua b/reskins-angels/prototypes/entity/refining/barreling-pump.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/barreling-pump.lua rename to reskins-angels/prototypes/entity/refining/barreling-pump.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/clarifier.lua b/reskins-angels/prototypes/entity/refining/clarifier.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/clarifier.lua rename to reskins-angels/prototypes/entity/refining/clarifier.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/crystallizer.lua b/reskins-angels/prototypes/entity/refining/crystallizer.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/crystallizer.lua rename to reskins-angels/prototypes/entity/refining/crystallizer.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/electrowinning-cell.lua b/reskins-angels/prototypes/entity/refining/electrowinning-cell.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/electrowinning-cell.lua rename to reskins-angels/prototypes/entity/refining/electrowinning-cell.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/filtration-unit.lua b/reskins-angels/prototypes/entity/refining/filtration-unit.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/filtration-unit.lua rename to reskins-angels/prototypes/entity/refining/filtration-unit.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/hydro-plant.lua b/reskins-angels/prototypes/entity/refining/hydro-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/hydro-plant.lua rename to reskins-angels/prototypes/entity/refining/hydro-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/liquefier.lua b/reskins-angels/prototypes/entity/refining/liquefier.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/liquefier.lua rename to reskins-angels/prototypes/entity/refining/liquefier.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-crusher.lua b/reskins-angels/prototypes/entity/refining/ore-crusher.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-crusher.lua rename to reskins-angels/prototypes/entity/refining/ore-crusher.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-flotation-cell.lua b/reskins-angels/prototypes/entity/refining/ore-flotation-cell.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-flotation-cell.lua rename to reskins-angels/prototypes/entity/refining/ore-flotation-cell.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-leaching-plant.lua b/reskins-angels/prototypes/entity/refining/ore-leaching-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-leaching-plant.lua rename to reskins-angels/prototypes/entity/refining/ore-leaching-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-powderizer.lua b/reskins-angels/prototypes/entity/refining/ore-powderizer.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-powderizer.lua rename to reskins-angels/prototypes/entity/refining/ore-powderizer.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-refinery.lua b/reskins-angels/prototypes/entity/refining/ore-refinery.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-refinery.lua rename to reskins-angels/prototypes/entity/refining/ore-refinery.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/ore-sorting-facility.lua b/reskins-angels/prototypes/entity/refining/ore-sorting-facility.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/ore-sorting-facility.lua rename to reskins-angels/prototypes/entity/refining/ore-sorting-facility.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/salination-plant.lua b/reskins-angels/prototypes/entity/refining/salination-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/salination-plant.lua rename to reskins-angels/prototypes/entity/refining/salination-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/seafloor-pump.lua b/reskins-angels/prototypes/entity/refining/seafloor-pump.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/seafloor-pump.lua rename to reskins-angels/prototypes/entity/refining/seafloor-pump.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/thermal-extractor.lua b/reskins-angels/prototypes/entity/refining/thermal-extractor.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/thermal-extractor.lua rename to reskins-angels/prototypes/entity/refining/thermal-extractor.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/washing-plant.lua b/reskins-angels/prototypes/entity/refining/washing-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/washing-plant.lua rename to reskins-angels/prototypes/entity/refining/washing-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/refining/water-pump.lua b/reskins-angels/prototypes/entity/refining/water-pump.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/refining/water-pump.lua rename to reskins-angels/prototypes/entity/refining/water-pump.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/blast-furnace.lua b/reskins-angels/prototypes/entity/smelting/blast-furnace.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/blast-furnace.lua rename to reskins-angels/prototypes/entity/smelting/blast-furnace.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/casting-machine.lua b/reskins-angels/prototypes/entity/smelting/casting-machine.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/casting-machine.lua rename to reskins-angels/prototypes/entity/smelting/casting-machine.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/chemical-furnace.lua b/reskins-angels/prototypes/entity/smelting/chemical-furnace.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/chemical-furnace.lua rename to reskins-angels/prototypes/entity/smelting/chemical-furnace.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/induction-furnace.lua b/reskins-angels/prototypes/entity/smelting/induction-furnace.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/induction-furnace.lua rename to reskins-angels/prototypes/entity/smelting/induction-furnace.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/ore-processing-machine.lua b/reskins-angels/prototypes/entity/smelting/ore-processing-machine.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/ore-processing-machine.lua rename to reskins-angels/prototypes/entity/smelting/ore-processing-machine.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/pellet-press.lua b/reskins-angels/prototypes/entity/smelting/pellet-press.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/pellet-press.lua rename to reskins-angels/prototypes/entity/smelting/pellet-press.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/pipe.lua b/reskins-angels/prototypes/entity/smelting/pipe.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/pipe.lua rename to reskins-angels/prototypes/entity/smelting/pipe.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/powder-mixer.lua b/reskins-angels/prototypes/entity/smelting/powder-mixer.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/powder-mixer.lua rename to reskins-angels/prototypes/entity/smelting/powder-mixer.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/sintering-oven.lua b/reskins-angels/prototypes/entity/smelting/sintering-oven.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/sintering-oven.lua rename to reskins-angels/prototypes/entity/smelting/sintering-oven.lua diff --git a/reskins-angels_2.1.6/prototypes/entity/smelting/strand-casting-machine.lua b/reskins-angels/prototypes/entity/smelting/strand-casting-machine.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/entity/smelting/strand-casting-machine.lua rename to reskins-angels/prototypes/entity/smelting/strand-casting-machine.lua diff --git a/reskins-angels_2.1.6/prototypes/functions/entities/petrochem/chemical-plant.lua b/reskins-angels/prototypes/functions/entities/petrochem/chemical-plant.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/functions/entities/petrochem/chemical-plant.lua rename to reskins-angels/prototypes/functions/entities/petrochem/chemical-plant.lua diff --git a/reskins-angels_2.1.6/prototypes/functions/entity-functions.lua b/reskins-angels/prototypes/functions/entity-functions.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/functions/entity-functions.lua rename to reskins-angels/prototypes/functions/entity-functions.lua diff --git a/reskins-angels_2.1.6/prototypes/functions/functions.lua b/reskins-angels/prototypes/functions/functions.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/functions/functions.lua rename to reskins-angels/prototypes/functions/functions.lua diff --git a/reskins-angels_2.1.6/prototypes/functions/triggers.lua b/reskins-angels/prototypes/functions/triggers.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/functions/triggers.lua rename to reskins-angels/prototypes/functions/triggers.lua diff --git a/reskins-angels_2.1.6/prototypes/items/bioprocessing-modules.lua b/reskins-angels/prototypes/items/bioprocessing-modules.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/bioprocessing-modules.lua rename to reskins-angels/prototypes/items/bioprocessing-modules.lua diff --git a/reskins-angels_2.1.6/prototypes/items/bioprocessing.lua b/reskins-angels/prototypes/items/bioprocessing.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/bioprocessing.lua rename to reskins-angels/prototypes/items/bioprocessing.lua diff --git a/reskins-angels_2.1.6/prototypes/items/exploration.lua b/reskins-angels/prototypes/items/exploration.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/exploration.lua rename to reskins-angels/prototypes/items/exploration.lua diff --git a/reskins-angels_2.1.6/prototypes/items/industries.lua b/reskins-angels/prototypes/items/industries.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/industries.lua rename to reskins-angels/prototypes/items/industries.lua diff --git a/reskins-angels_2.1.6/prototypes/items/petrochem.lua b/reskins-angels/prototypes/items/petrochem.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/petrochem.lua rename to reskins-angels/prototypes/items/petrochem.lua diff --git a/reskins-angels_2.1.6/prototypes/items/petrochem/sulfur.lua b/reskins-angels/prototypes/items/petrochem/sulfur.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/petrochem/sulfur.lua rename to reskins-angels/prototypes/items/petrochem/sulfur.lua diff --git a/reskins-angels_2.1.6/prototypes/items/refining-secondary-updates.lua b/reskins-angels/prototypes/items/refining-secondary-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/refining-secondary-updates.lua rename to reskins-angels/prototypes/items/refining-secondary-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/items/refining-updates.lua b/reskins-angels/prototypes/items/refining-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/refining-updates.lua rename to reskins-angels/prototypes/items/refining-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/items/refining.lua b/reskins-angels/prototypes/items/refining.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/refining.lua rename to reskins-angels/prototypes/items/refining.lua diff --git a/reskins-angels_2.1.6/prototypes/items/smelting-updates.lua b/reskins-angels/prototypes/items/smelting-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/smelting-updates.lua rename to reskins-angels/prototypes/items/smelting-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/items/smelting.lua b/reskins-angels/prototypes/items/smelting.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/smelting.lua rename to reskins-angels/prototypes/items/smelting.lua diff --git a/reskins-angels_2.1.6/prototypes/items/smelting/ores.lua b/reskins-angels/prototypes/items/smelting/ores.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/items/smelting/ores.lua rename to reskins-angels/prototypes/items/smelting/ores.lua diff --git a/reskins-angels_2.1.6/prototypes/recipe-adjustments/refining/clarifier.lua b/reskins-angels/prototypes/recipe-adjustments/refining/clarifier.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/recipe-adjustments/refining/clarifier.lua rename to reskins-angels/prototypes/recipe-adjustments/refining/clarifier.lua diff --git a/reskins-angels_2.1.6/prototypes/recipe-adjustments/refining/ore-flotation-cell.lua b/reskins-angels/prototypes/recipe-adjustments/refining/ore-flotation-cell.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/recipe-adjustments/refining/ore-flotation-cell.lua rename to reskins-angels/prototypes/recipe-adjustments/refining/ore-flotation-cell.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/addons-storage.lua b/reskins-angels/prototypes/technology/addons-storage.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/addons-storage.lua rename to reskins-angels/prototypes/technology/addons-storage.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/bioprocessing-modules.lua b/reskins-angels/prototypes/technology/bioprocessing-modules.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/bioprocessing-modules.lua rename to reskins-angels/prototypes/technology/bioprocessing-modules.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/bioprocessing.lua b/reskins-angels/prototypes/technology/bioprocessing.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/bioprocessing.lua rename to reskins-angels/prototypes/technology/bioprocessing.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/exploration.lua b/reskins-angels/prototypes/technology/exploration.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/exploration.lua rename to reskins-angels/prototypes/technology/exploration.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/industries.lua b/reskins-angels/prototypes/technology/industries.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/industries.lua rename to reskins-angels/prototypes/technology/industries.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/petrochem.lua b/reskins-angels/prototypes/technology/petrochem.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/petrochem.lua rename to reskins-angels/prototypes/technology/petrochem.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/refining-updates.lua b/reskins-angels/prototypes/technology/refining-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/refining-updates.lua rename to reskins-angels/prototypes/technology/refining-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/refining.lua b/reskins-angels/prototypes/technology/refining.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/refining.lua rename to reskins-angels/prototypes/technology/refining.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/smelting-final-fixes.lua b/reskins-angels/prototypes/technology/smelting-final-fixes.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/smelting-final-fixes.lua rename to reskins-angels/prototypes/technology/smelting-final-fixes.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/smelting-updates.lua b/reskins-angels/prototypes/technology/smelting-updates.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/smelting-updates.lua rename to reskins-angels/prototypes/technology/smelting-updates.lua diff --git a/reskins-angels_2.1.6/prototypes/technology/smelting.lua b/reskins-angels/prototypes/technology/smelting.lua similarity index 100% rename from reskins-angels_2.1.6/prototypes/technology/smelting.lua rename to reskins-angels/prototypes/technology/smelting.lua diff --git a/reskins-angels_2.1.6/settings-updates.lua b/reskins-angels/settings-updates.lua similarity index 100% rename from reskins-angels_2.1.6/settings-updates.lua rename to reskins-angels/settings-updates.lua diff --git a/reskins-angels_2.1.6/settings.lua b/reskins-angels/settings.lua similarity index 100% rename from reskins-angels_2.1.6/settings.lua rename to reskins-angels/settings.lua diff --git a/reskins-angels_2.1.6/thumbnail.png b/reskins-angels/thumbnail.png similarity index 100% rename from reskins-angels_2.1.6/thumbnail.png rename to reskins-angels/thumbnail.png diff --git a/reskins-angels_2.1.6/info.json b/reskins-angels_2.1.6/info.json deleted file mode 100644 index 5c80da93..00000000 --- a/reskins-angels_2.1.6/info.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "reskins-angels", - "version": "2.1.6", - "factorio_version": "1.1", - "title": "Artisanal Reskins: Angel's Mods", - "author": "Kirazy", - "contact": "kirazy@live.com", - "homepage": "https://forums.factorio.com/viewtopic.php?f=185&t=89666", - "dependencies": [ - "base", - "reskins-library >= 2.1.0", - "? reskins-bobs", - "? angelsbioprocessing", - "? angelsexploration", - "? angelsindustries", - "? angelspetrochem >= 0.9.23", - "? angelsrefining >= 0.12.3", - "? angelssmelting >= 0.6.20", - "(?) angelsaddons-cab", - "(?) angelsaddons-mobility", - "(?) angelsaddons-storage" - ] -} \ No newline at end of file diff --git a/reskins-bobs_2.1.5/README.md b/reskins-bobs/README.md similarity index 100% rename from reskins-bobs_2.1.5/README.md rename to reskins-bobs/README.md diff --git a/reskins-bobs_2.1.5/changelog.txt b/reskins-bobs/changelog.txt similarity index 100% rename from reskins-bobs_2.1.5/changelog.txt rename to reskins-bobs/changelog.txt diff --git a/reskins-bobs_2.1.5/control.lua b/reskins-bobs/control.lua similarity index 100% rename from reskins-bobs_2.1.5/control.lua rename to reskins-bobs/control.lua diff --git a/reskins-bobs_2.1.5/data-final-fixes.lua b/reskins-bobs/data-final-fixes.lua similarity index 100% rename from reskins-bobs_2.1.5/data-final-fixes.lua rename to reskins-bobs/data-final-fixes.lua diff --git a/reskins-bobs_2.1.5/data-updates.lua b/reskins-bobs/data-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/data-updates.lua rename to reskins-bobs/data-updates.lua diff --git a/reskins-bobs_2.1.5/data.lua b/reskins-bobs/data.lua similarity index 100% rename from reskins-bobs_2.1.5/data.lua rename to reskins-bobs/data.lua diff --git a/angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/empty.png b/reskins-bobs/graphics/empty.png similarity index 100% rename from angelsrefining_9.12.4/graphics/entity/ore-leaching-plant/empty.png rename to reskins-bobs/graphics/empty.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-0.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-0.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-0.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-0.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-1.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-1.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-2.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-2.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-3.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-3.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-4.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-4.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-5.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-5.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/assembling-machine-animation-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-0.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-0.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-0.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-0.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-1.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-1.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-2.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-2.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-3.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-3.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-4.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-4.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-5.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-5.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/animations/hr-assembling-machine-animation-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/assembling-machine-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/assembling-machine-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/base/hr-assembling-machine-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/electronics-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/electronics-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/electronics/hr-electronics-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-N-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-S-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/assembling-machine-pipe-W-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-N-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-S-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-assembling-machine-pipe-W-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simple-assembling-machine-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simplie-assembling-machine-pipe-N-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simplie-assembling-machine-pipe-N-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/hr-simplie-assembling-machine-pipe-N-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/hr-simplie-assembling-machine-pipe-N-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/pipes/simple-assembling-machine-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/assembling-machine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-base.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/remnants/hr-assembling-machine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-0-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-0-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-0-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-0-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-1-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-1-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-1-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-1-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-2-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-2-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-2-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-2-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-3-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-3-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-3-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-3-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-4-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-4-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-4-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/assembling-machine-4-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-0-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-0-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-0-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-0-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-1-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-1-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-1-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-1-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-2-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-2-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-2-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-2-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-3-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-3-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-3-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-3-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-4-shadow.png b/reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-4-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-4-shadow.png rename to reskins-bobs/graphics/entity/assembly/assembling-machine/shadows/hr-assembling-machine-4-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-A-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-A-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-B-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-B-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-C-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-C-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/centrifuge-C-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/centrifuge-C-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-A-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-A-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-B-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-B-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-C-light.png b/reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-C-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/hr-centrifuge-C-light.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/hr-centrifuge-C-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/remnants/centrifuge-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/centrifuge/remnants/hr-centrifuge-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-base.png b/reskins-bobs/graphics/entity/assembly/distillery/distillery-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-base.png rename to reskins-bobs/graphics/entity/assembly/distillery/distillery-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-highlights.png b/reskins-bobs/graphics/entity/assembly/distillery/distillery-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-highlights.png rename to reskins-bobs/graphics/entity/assembly/distillery/distillery-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-mask.png b/reskins-bobs/graphics/entity/assembly/distillery/distillery-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-mask.png rename to reskins-bobs/graphics/entity/assembly/distillery/distillery-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-reflection.png b/reskins-bobs/graphics/entity/assembly/distillery/distillery-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-reflection.png rename to reskins-bobs/graphics/entity/assembly/distillery/distillery-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-shadow.png b/reskins-bobs/graphics/entity/assembly/distillery/distillery-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/distillery-shadow.png rename to reskins-bobs/graphics/entity/assembly/distillery/distillery-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-base.png b/reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-base.png rename to reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-highlights.png b/reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-highlights.png rename to reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-mask.png b/reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-mask.png rename to reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-shadow.png b/reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/hr-distillery-shadow.png rename to reskins-bobs/graphics/entity/assembly/distillery/hr-distillery-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-east.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-east.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-north.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-north.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-south.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-south.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-west.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/distillery-light-west.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/distillery-light-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-east.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-east.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-north.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-north.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-south.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-south.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-west.png b/reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/distillery/lights/hr-distillery-light-west.png rename to reskins-bobs/graphics/entity/assembly/distillery/lights/hr-distillery-light-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/electric-furnace-heater.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/electric-furnace-heater.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/electric-furnace-heater.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/electric-furnace-heater.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-electric-furnace-heater.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-electric-furnace-heater.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-electric-furnace-heater.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-electric-furnace-heater.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-propeller-large.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-propeller-large.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-propeller-large.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-propeller-large.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-propeller-small.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-propeller-small.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/hr-propeller-small.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/hr-propeller-small.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/propeller-large.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/propeller-large.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/propeller-large.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/propeller-large.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/propeller-small.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/animations/propeller-small.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/animations/propeller-small.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/animations/propeller-small.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-chemical-mixing-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/electric-mixing-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-chemical-mixing-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/hr-electric-mixing-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light-obstructed.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light-obstructed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light-obstructed.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light-obstructed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-chemical-mixing-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-mixing-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-mixing-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/electric-mixing-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/electric-mixing-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light-obstructed.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light-obstructed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light-obstructed.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light-obstructed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-chemical-mixing-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-mixing-furnace-light.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-mixing-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/lights/hr-electric-mixing-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/lights/hr-electric-mixing-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-N-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-N-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-N-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-N-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-S-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/electric-furnace-pipe-W-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-E-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-N-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-N-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-N-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-N-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-S-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-base.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-base.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/pipes/hr-electric-furnace-pipe-W-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/chemical-furnace-remnants-overlay.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/chemical-furnace-remnants-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/chemical-furnace-remnants-overlay.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/chemical-furnace-remnants-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/chemical-mixing-furnace-remnants-overlay.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/chemical-mixing-furnace-remnants-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/chemical-mixing-furnace-remnants-overlay.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/chemical-mixing-furnace-remnants-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/electric-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-furnace-remnants-overlay.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-furnace-remnants-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-furnace-remnants-overlay.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-furnace-remnants-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-mixing-furnace-remnants-overlay.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-mixing-furnace-remnants-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-mixing-furnace-remnants-overlay.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-chemical-mixing-furnace-remnants-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/electric-furnace/remnants/hr-electric-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-1-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-1-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-2-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-2-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-3-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-3-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-4-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-4-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/electrolyser-5-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/electrolyser-5-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-1-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-1-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-2-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-2-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-3-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-3-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-4-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-4-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-base.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-base.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-highlights.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-highlights.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-mask.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-mask.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-shadow.png b/reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/electrolyser/hr-electrolyser-5-shadow.png rename to reskins-bobs/graphics/entity/assembly/electrolyser/hr-electrolyser-5-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/fluid-steel-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-fluid-steel-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/hr-steel-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/hr-steel-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/hr-steel-furnace-ground-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/lights/steel-furnace-ground-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/fluid-steel-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-fluid-steel-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/hr-steel-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/remnants/steel-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/fluid-steel-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-fluid-steel-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-steel-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-steel-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-steel-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-steel-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-steel-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-steel-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/hr-steel-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/hr-steel-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/steel-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/steel-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/steel-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/steel-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/steel-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/steel-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/shadows/steel-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/shadows/steel-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-base.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/steel-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/steel-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-fire.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/hr-steel-furnace-working.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-fire.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-left.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-left.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-right.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-right.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working.png b/reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/steel-furnace/working/steel-furnace-working.png rename to reskins-bobs/graphics/entity/assembly/steel-furnace/working/steel-furnace-working.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/hr-stone-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/hr-stone-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light-4way.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light-4way.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light-4way.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light-4way.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/lights/hr-stone-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light-4way.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light-4way.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light-4way.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light-4way.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/lights/stone-furnace-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/hr-stone-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-chemical-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/remnants/stone-furnace-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/hr-stone-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/hr-stone-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/hr-stone-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/hr-stone-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/hr-stone-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/hr-stone-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/hr-stone-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/hr-stone-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/stone-chemical-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/stone-chemical-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/stone-chemical-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/stone-chemical-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/stone-furnace-shadow.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/stone-furnace-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/shadows/stone-furnace-shadow.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/shadows/stone-furnace-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-chemical-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-base.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-base.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-highlights.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-highlights.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-mask.png b/reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/assembly/stone-furnace/stone-furnace-mask.png rename to reskins-bobs/graphics/entity/assembly/stone-furnace/stone-furnace-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-base.png b/reskins-bobs/graphics/entity/greenhouse/greenhouse-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-base.png rename to reskins-bobs/graphics/entity/greenhouse/greenhouse-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-light.png b/reskins-bobs/graphics/entity/greenhouse/greenhouse-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-light.png rename to reskins-bobs/graphics/entity/greenhouse/greenhouse-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-lit.png b/reskins-bobs/graphics/entity/greenhouse/greenhouse-lit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/greenhouse-lit.png rename to reskins-bobs/graphics/entity/greenhouse/greenhouse-lit.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-base.png b/reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-base.png rename to reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-light.png b/reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-light.png rename to reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-lit.png b/reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-lit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/greenhouse/hr-greenhouse-lit.png rename to reskins-bobs/graphics/entity/greenhouse/hr-greenhouse-lit.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/brass-logistic-chest.png b/reskins-bobs/graphics/entity/logistics/chest/brass-logistic-chest.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/brass-logistic-chest.png rename to reskins-bobs/graphics/entity/logistics/chest/brass-logistic-chest.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-brass-logistic-chest.png b/reskins-bobs/graphics/entity/logistics/chest/hr-brass-logistic-chest.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-brass-logistic-chest.png rename to reskins-bobs/graphics/entity/logistics/chest/hr-brass-logistic-chest.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-logistic-chest-shadow.png b/reskins-bobs/graphics/entity/logistics/chest/hr-logistic-chest-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-logistic-chest-shadow.png rename to reskins-bobs/graphics/entity/logistics/chest/hr-logistic-chest-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-titanium-logistic-chest.png b/reskins-bobs/graphics/entity/logistics/chest/hr-titanium-logistic-chest.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/hr-titanium-logistic-chest.png rename to reskins-bobs/graphics/entity/logistics/chest/hr-titanium-logistic-chest.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/logistic-chest-shadow.png b/reskins-bobs/graphics/entity/logistics/chest/logistic-chest-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/logistic-chest-shadow.png rename to reskins-bobs/graphics/entity/logistics/chest/logistic-chest-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/brass-logistic-chest-remnants.png b/reskins-bobs/graphics/entity/logistics/chest/remnants/brass-logistic-chest-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/brass-logistic-chest-remnants.png rename to reskins-bobs/graphics/entity/logistics/chest/remnants/brass-logistic-chest-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/hr-brass-logistic-chest-remnants.png b/reskins-bobs/graphics/entity/logistics/chest/remnants/hr-brass-logistic-chest-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/hr-brass-logistic-chest-remnants.png rename to reskins-bobs/graphics/entity/logistics/chest/remnants/hr-brass-logistic-chest-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/hr-titanium-logistic-chest-remnants.png b/reskins-bobs/graphics/entity/logistics/chest/remnants/hr-titanium-logistic-chest-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/hr-titanium-logistic-chest-remnants.png rename to reskins-bobs/graphics/entity/logistics/chest/remnants/hr-titanium-logistic-chest-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/titanium-logistic-chest-remnants.png b/reskins-bobs/graphics/entity/logistics/chest/remnants/titanium-logistic-chest-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/remnants/titanium-logistic-chest-remnants.png rename to reskins-bobs/graphics/entity/logistics/chest/remnants/titanium-logistic-chest-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/chest/titanium-logistic-chest.png b/reskins-bobs/graphics/entity/logistics/chest/titanium-logistic-chest.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/chest/titanium-logistic-chest.png rename to reskins-bobs/graphics/entity/logistics/chest/titanium-logistic-chest.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-working-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-working-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-working-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-working-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-working-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-working-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/construction-robot-working-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/construction-robot-working-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-working-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-working-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-working-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-working-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-working-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-working-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/hr-construction-robot-working-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/hr-construction-robot-working-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/remnants/construction-robot-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/construction-robot/remnants/hr-construction-robot-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/filter-inserter-arm-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/filter-inserter-arm-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/filter-inserter-arm-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/filter-inserter-arm-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/filter-inserter-arm-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/filter-inserter-arm-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/filter-inserter-arm-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/filter-inserter-arm-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/hr-filter-inserter-arm-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-base.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/hr-inserter-arm-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/hr-inserter-arm-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-base.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/arms/inserter-arm-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/arms/inserter-arm-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-long-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/filter-stack-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-long-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-filter-stack-inserter-hand-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-long-inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/hr-stack-inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/long-inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-closed-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-base.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/hands/stack-inserter-hand-open-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-base.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/hr-inserter-platform-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/hr-inserter-platform-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-base.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/platform/inserter-platform-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/platform/inserter-platform-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/filter-stack-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-filter-stack-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/hr-stack-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-base.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-base.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/inserter/remnants/stack-inserter-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-arm-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-arm-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-arm-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-arm-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-closed-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-closed-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-closed-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-closed-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-open-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-open-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-open-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-hand-open-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-platform-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-platform-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-inserter-platform-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-inserter-platform-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-closed-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-closed-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-closed-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-closed-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-open-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-open-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-open-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/hr-stack-inserter-hand-open-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-arm-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-arm-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-arm-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-arm-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-hand-closed-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-hand-closed-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-hand-closed-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-hand-closed-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-hand-open-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-hand-open-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-hand-open-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-hand-open-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-platform-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-platform-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/inserter-platform-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/inserter-platform-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-closed-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-closed-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-closed-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-closed-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-open-shadow.png b/reskins-bobs/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-open-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-open-shadow.png rename to reskins-bobs/graphics/entity/logistics/inserter/shadows/stack-inserter-hand-open-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/burner-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-burner-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/hr-long-burner-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/long-burner-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/burner-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/burner-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/burner-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/burner-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/hr-burner-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/hr-burner-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/hr-burner-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/burner-inserter/remnants/hr-burner-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/express-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-express-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/hr-long-express-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/long-express-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/express-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/express-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/express-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/express-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/hr-express-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/hr-express-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/hr-express-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-filter-inserter/remnants/hr-express-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/express-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-express-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/hr-long-express-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/long-express-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/remnants/express-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/remnants/express-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/remnants/express-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/remnants/express-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/remnants/hr-express-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/remnants/hr-express-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-inserter/remnants/hr-express-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-inserter/remnants/hr-express-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/express-stack-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/hr-express-stack-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/express-stack-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/express-stack-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/express-stack-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/express-stack-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/hr-express-stack-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/hr-express-stack-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/hr-express-stack-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-filter-inserter/remnants/hr-express-stack-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/express-stack-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/hr-express-stack-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/express-stack-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/express-stack-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/express-stack-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/express-stack-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/hr-express-stack-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/hr-express-stack-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/hr-express-stack-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/express-stack-inserter/remnants/hr-express-stack-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/fast-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-fast-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/hr-long-fast-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/long-fast-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/fast-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/fast-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/fast-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/fast-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/hr-fast-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/hr-fast-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/hr-fast-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/fast-inserter/remnants/hr-fast-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/hr-long-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/long-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/hr-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/hr-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/hr-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/filter-inserter/remnants/hr-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/hr-long-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/long-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/remnants/hr-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/remnants/hr-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/remnants/hr-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/remnants/hr-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/remnants/inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/remnants/inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/inserter/remnants/inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/inserter/remnants/inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/hr-long-handed-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/long-handed-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/hr-long-handed-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/hr-long-handed-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/hr-long-handed-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/hr-long-handed-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/long-handed-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/long-handed-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/long-handed-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/long-handed-inserter/remnants/long-handed-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/hr-stack-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/hr-stack-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/hr-stack-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/hr-stack-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/hr-stack-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/stack-filter-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/stack-filter-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/stack-filter-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/remnants/stack-filter-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-filter-inserter/stack-filter-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/hr-stack-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/hr-stack-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/hr-stack-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/hr-stack-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/hr-stack-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/stack-inserter-remnants.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/stack-inserter-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/stack-inserter-remnants.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/remnants/stack-inserter-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-arm.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-arm.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-arm.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-arm.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-closed.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-closed.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-closed.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-closed.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-open.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-open.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-open.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-hand-open.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-platform.png b/reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-platform.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-platform.png rename to reskins-bobs/graphics/entity/logistics/inserter/standard/stack-inserter/stack-inserter-platform.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/hr-logistic-robot-highlights.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/hr-logistic-robot-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/hr-logistic-robot-highlights.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/hr-logistic-robot-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/hr-logistic-robot-mask.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/hr-logistic-robot-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/hr-logistic-robot-mask.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/hr-logistic-robot-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/logistic-robot-highlights.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/logistic-robot-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/logistic-robot-highlights.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/logistic-robot-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/logistic-robot-mask.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/logistic-robot-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/logistic-robot-mask.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/logistic-robot-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/hr-logistic-robot-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/logistic-robot/remnants/logistic-robot-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/brass/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/brass/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/bronze/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/ceramic/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper-tungsten/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/copper/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/copper/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/nitinol/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/plastic/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/steel/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/steel/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/stone/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/stone/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/titanium/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/hr-pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-north.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-north.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-north.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-north.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-south.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-south.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-south.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-south.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-west.png b/reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-west.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-west.png rename to reskins-bobs/graphics/entity/logistics/pipe-covers/tungsten/pipe-cover-west.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/brass/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/brass/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/bronze/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/bronze/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/ceramic/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper-tungsten/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/copper/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/copper/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/nitinol/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/plastic/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/plastic/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/steel/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/steel/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/stone/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/stone/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/titanium/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/hr-pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-down.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-down.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-left.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-left.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-right.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-right.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-up.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-up.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/pipe-to-ground-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/hr-pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe-to-ground/tungsten/remnants/pipe-to-ground-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/brass/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/brass/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/brass/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/bronze/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/bronze/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/bronze/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/ceramic/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/ceramic/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/ceramic/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper-tungsten/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper-tungsten/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-cover-east.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-cover-east.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-cover-east.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-cover-east.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/copper/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/copper/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/copper/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/nitinol/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/nitinol/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/nitinol/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/plastic/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/plastic/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/plastic/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/steel/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/steel/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/steel/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/stone/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/stone/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/stone/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/titanium/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/titanium/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/titanium/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/hr-pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/hr-pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-down-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-corner-up-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-cross.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-cross.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-cross.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-cross.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-down.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-up.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-ending-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-ending-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-horizontal-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-horizontal-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-horizontal-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-horizontal-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal-window.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-window.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-window.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-window.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical-window.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-straight-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-down.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-down.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-left.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-left.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-right.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-right.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-up.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-t-up.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-t-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-vertical-window-background.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-vertical-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/pipe-vertical-window-background.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/pipe-vertical-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/remnants/hr-pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/remnants/hr-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/remnants/hr-pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/remnants/hr-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/remnants/pipe-remnants.png b/reskins-bobs/graphics/entity/logistics/pipe/tungsten/remnants/pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pipe/tungsten/remnants/pipe-remnants.png rename to reskins-bobs/graphics/entity/logistics/pipe/tungsten/remnants/pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-east-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-east-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-east-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-east-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-east-mask.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-east-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-east-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-east-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-north-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-north-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-north-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-north-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-north-mask.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-north-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-north-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-north-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-south-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-south-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-south-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-south-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-south-mask.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-south-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-south-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-south-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-west-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-west-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-west-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-west-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-west-mask.png b/reskins-bobs/graphics/entity/logistics/pump/hr-pump-west-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/hr-pump-west-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/hr-pump-west-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-east-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/pump-east-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-east-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-east-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-east-mask.png b/reskins-bobs/graphics/entity/logistics/pump/pump-east-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-east-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-east-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-north-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/pump-north-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-north-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-north-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-north-mask.png b/reskins-bobs/graphics/entity/logistics/pump/pump-north-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-north-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-north-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-south-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/pump-south-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-south-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-south-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-south-mask.png b/reskins-bobs/graphics/entity/logistics/pump/pump-south-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-south-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-south-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-west-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/pump-west-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-west-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-west-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-west-mask.png b/reskins-bobs/graphics/entity/logistics/pump/pump-west-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/pump-west-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/pump-west-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/hr-pump-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/remnants/hr-pump-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/hr-pump-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/remnants/hr-pump-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/hr-pump-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/pump/remnants/hr-pump-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/hr-pump-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/remnants/hr-pump-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/pump-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/pump/remnants/pump-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/pump-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/pump/remnants/pump-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/pump-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/pump/remnants/pump-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/pump/remnants/pump-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/pump/remnants/pump-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-1-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-1-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-2-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-2-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-3-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-3-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-4-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-4-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-highlights.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-highlights.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-highlights.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-highlights.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-mask.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-mask.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-lights-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-mask.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-mask.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-shadow.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-shadow.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/hr-robo-charge-port-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-1-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-1-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-2-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-2-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-3-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-3-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-4-base.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-4-base.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-highlights.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-highlights.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-highlights.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-highlights.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-mask.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-mask.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-lights-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-mask.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-mask.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-shadow.png b/reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robo-charge-port/robo-charge-port-shadow.png rename to reskins-bobs/graphics/entity/logistics/robo-charge-port/robo-charge-port-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-1-door-down.png b/reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-1-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-1-door-down.png rename to reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-1-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-2-door-down.png b/reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-2-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-2-door-down.png rename to reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-2-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-3-door-down.png b/reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-3-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-3-door-down.png rename to reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-3-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-4-door-down.png b/reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-4-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/doors/hr-robochest-4-door-down.png rename to reskins-bobs/graphics/entity/logistics/robochest/doors/hr-robochest-4-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch-highlights.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch-highlights.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch-mask.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch-mask.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base-patch.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-base.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-highlights.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-highlights.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-mask.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-mask.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-shadow.png b/reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/hr-robochest-shadow.png rename to reskins-bobs/graphics/entity/logistics/robochest/hr-robochest-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch-highlights.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch-highlights.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch-mask.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch-mask.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base-patch.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-base-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-base.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-highlights.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-highlights.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-mask.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-mask.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-shadow.png b/reskins-bobs/graphics/entity/logistics/robochest/robochest-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/robochest/robochest-shadow.png rename to reskins-bobs/graphics/entity/logistics/robochest/robochest-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-1-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-1-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-1-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-1-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-2-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-2-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-2-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-2-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-3-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-3-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-3-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-3-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-4-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-4-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/hr-roboport-4-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/hr-roboport-4-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-1-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-1-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-1-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-1-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-2-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-2-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-2-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-2-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-3-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-3-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-3-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-3-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-4-base-animation.png b/reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-4-base-animation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/antennas/roboport-4-base-animation.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/antennas/roboport-4-base-animation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-1-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-2-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-3-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/hr-roboport-4-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-1-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-1-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-1-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-1-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-1-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-1-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-1-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-1-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-2-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-2-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-2-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-2-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-2-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-2-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-2-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-2-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-3-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-3-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-3-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-3-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-3-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-3-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-3-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-3-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-4-door-down.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-4-door-down.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-4-door-down.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-4-door-down.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-4-door-up.png b/reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-4-door-up.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/doors/roboport-4-door-up.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/doors/roboport-4-door-up.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-base-patch.png b/reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-base-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-base-patch.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-base-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-base.png b/reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-base.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-shadow.png b/reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/hr-roboport-shadow.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/hr-roboport-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-1-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-1-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-1-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-1-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-2-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-2-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-2-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-2-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-3-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-3-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-3-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-3-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-4-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-4-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-4-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/hr-roboport-4-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-1-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-1-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-1-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-1-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-2-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-2-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-2-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-2-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-3-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-3-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-3-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-3-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-4-antenna-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-4-antenna-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-4-antenna-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/antennas/roboport-4-antenna-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-1-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-1-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-1-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-1-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-2-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-2-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-2-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-2-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-3-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-3-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-3-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-3-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-4-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-4-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-4-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/hr-roboport-4-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-1-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-1-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-1-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-1-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-2-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-2-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-2-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-2-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-3-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-3-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-3-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-3-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-4-door-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-4-door-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/doors/roboport-4-door-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/doors/roboport-4-door-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/hr-roboport-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/hr-roboport-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/hr-roboport-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/hr-roboport-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/roboport-remnants.png b/reskins-bobs/graphics/entity/logistics/roboport/base/remnants/roboport-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/remnants/roboport-remnants.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/remnants/roboport-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-base-patch.png b/reskins-bobs/graphics/entity/logistics/roboport/base/roboport-base-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-base-patch.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/roboport-base-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-base.png b/reskins-bobs/graphics/entity/logistics/roboport/base/roboport-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-base.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/roboport-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-recharging.png b/reskins-bobs/graphics/entity/logistics/roboport/base/roboport-recharging.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-recharging.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/roboport-recharging.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-shadow.png b/reskins-bobs/graphics/entity/logistics/roboport/base/roboport-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/base/roboport-shadow.png rename to reskins-bobs/graphics/entity/logistics/roboport/base/roboport-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-patch-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-patch-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-patch-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-patch-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-patch-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-patch-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/hr-roboport-base-patch-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/hr-roboport-base-patch-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/remnants/hr-roboport-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/roboport-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/remnants/roboport-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/roboport-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/remnants/roboport-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/roboport-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/remnants/roboport-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/remnants/roboport-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/remnants/roboport-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/roboport-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/roboport-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/roboport-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/roboport-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-patch-highlights.png b/reskins-bobs/graphics/entity/logistics/roboport/roboport-base-patch-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-patch-highlights.png rename to reskins-bobs/graphics/entity/logistics/roboport/roboport-base-patch-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-patch-mask.png b/reskins-bobs/graphics/entity/logistics/roboport/roboport-base-patch-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/roboport/roboport-base-patch-mask.png rename to reskins-bobs/graphics/entity/logistics/roboport/roboport-base-patch-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners-shadow.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners-shadow.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/hr-storage-tank-all-corners.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners-shadow.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners-shadow.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/base/storage-tank-all-corners.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/hr-storage-tank-all-corners-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank-all-corners/storage-tank-all-corners-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/hr-storage-tank-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank/hr-storage-tank-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/hr-storage-tank-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/hr-storage-tank-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/hr-storage-tank-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank/hr-storage-tank-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/hr-storage-tank-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/hr-storage-tank-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/remnants/hr-storage-tank-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/remnants/storage-tank-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/storage-tank-highlights.png b/reskins-bobs/graphics/entity/logistics/storage-tank/storage-tank-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/storage-tank-highlights.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/storage-tank-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/storage-tank-mask.png b/reskins-bobs/graphics/entity/logistics/storage-tank/storage-tank-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/storage-tank/storage-tank-mask.png rename to reskins-bobs/graphics/entity/logistics/storage-tank/storage-tank-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/valve/hr-valve-base.png b/reskins-bobs/graphics/entity/logistics/valve/hr-valve-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/valve/hr-valve-base.png rename to reskins-bobs/graphics/entity/logistics/valve/hr-valve-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/valve/hr-valve-mask.png b/reskins-bobs/graphics/entity/logistics/valve/hr-valve-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/valve/hr-valve-mask.png rename to reskins-bobs/graphics/entity/logistics/valve/hr-valve-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/valve/valve-base.png b/reskins-bobs/graphics/entity/logistics/valve/valve-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/valve/valve-base.png rename to reskins-bobs/graphics/entity/logistics/valve/valve-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/valve/valve-mask.png b/reskins-bobs/graphics/entity/logistics/valve/valve-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/valve/valve-mask.png rename to reskins-bobs/graphics/entity/logistics/valve/valve-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-1-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-1-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-2-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-2-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-3-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-3-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-4-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-4-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-highlights.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-highlights.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-mask.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-mask.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-shadow.png b/reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/hr-zone-expander-shadow.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/hr-zone-expander-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-1-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-1-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-1-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-1-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-2-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-2-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-2-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-2-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-3-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-3-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-3-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-3-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-4-base.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-4-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-4-base.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-4-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-highlights.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-highlights.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-mask.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-mask.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-reflection.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-reflection.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-shadow.png b/reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-expander/zone-expander-shadow.png rename to reskins-bobs/graphics/entity/logistics/zone-expander/zone-expander-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface-shadow.png b/reskins-bobs/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface-shadow.png rename to reskins-bobs/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface.png b/reskins-bobs/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface.png rename to reskins-bobs/graphics/entity/logistics/zone-interface/hr-logistic-zone-interface.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/logistic-zone-interface-shadow.png b/reskins-bobs/graphics/entity/logistics/zone-interface/logistic-zone-interface-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/logistic-zone-interface-shadow.png rename to reskins-bobs/graphics/entity/logistics/zone-interface/logistic-zone-interface-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/logistic-zone-interface.png b/reskins-bobs/graphics/entity/logistics/zone-interface/logistic-zone-interface.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/logistics/zone-interface/logistic-zone-interface.png rename to reskins-bobs/graphics/entity/logistics/zone-interface/logistic-zone-interface.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-E.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-N.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-output.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-output.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-output.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-output.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-S-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/electric-mining-drill-W.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-E.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-N.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-output.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-output.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-output.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-output.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W-wet.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W.png b/reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W.png rename to reskins-bobs/graphics/entity/mining/mining-drill/area-frame/hr-electric-mining-drill-W.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-front-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-horizontal-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/electric-mining-drill-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/electric-mining-drill-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/drill/hr-electric-mining-drill-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/remnants/electric-mining-drill-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png b/reskins-bobs/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png rename to reskins-bobs/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png b/reskins-bobs/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png rename to reskins-bobs/graphics/entity/mining/mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-highlights.png b/reskins-bobs/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-highlights.png rename to reskins-bobs/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-mask.png b/reskins-bobs/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-mask.png rename to reskins-bobs/graphics/entity/mining/pumpjack/hr-pumpjack-horsehead-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-water-pumpjack-base.png b/reskins-bobs/graphics/entity/mining/pumpjack/hr-water-pumpjack-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-water-pumpjack-base.png rename to reskins-bobs/graphics/entity/mining/pumpjack/hr-water-pumpjack-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-water-pumpjack-horsehead.png b/reskins-bobs/graphics/entity/mining/pumpjack/hr-water-pumpjack-horsehead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/hr-water-pumpjack-horsehead.png rename to reskins-bobs/graphics/entity/mining/pumpjack/hr-water-pumpjack-horsehead.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/pumpjack-horsehead-highlights.png b/reskins-bobs/graphics/entity/mining/pumpjack/pumpjack-horsehead-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/pumpjack-horsehead-highlights.png rename to reskins-bobs/graphics/entity/mining/pumpjack/pumpjack-horsehead-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/pumpjack-horsehead-mask.png b/reskins-bobs/graphics/entity/mining/pumpjack/pumpjack-horsehead-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/pumpjack-horsehead-mask.png rename to reskins-bobs/graphics/entity/mining/pumpjack/pumpjack-horsehead-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-highlights.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-highlights.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-mask.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-mask.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-pumpjack-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-water-pumpjack-remnants-base.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-water-pumpjack-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/hr-water-pumpjack-remnants-base.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/hr-water-pumpjack-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-highlights.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-highlights.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-mask.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-mask.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/pumpjack-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/water-pumpjack-remnants-base.png b/reskins-bobs/graphics/entity/mining/pumpjack/remnants/water-pumpjack-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/remnants/water-pumpjack-remnants-base.png rename to reskins-bobs/graphics/entity/mining/pumpjack/remnants/water-pumpjack-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/water-pumpjack-base.png b/reskins-bobs/graphics/entity/mining/pumpjack/water-pumpjack-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/water-pumpjack-base.png rename to reskins-bobs/graphics/entity/mining/pumpjack/water-pumpjack-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/water-pumpjack-horsehead.png b/reskins-bobs/graphics/entity/mining/pumpjack/water-pumpjack-horsehead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/mining/pumpjack/water-pumpjack-horsehead.png rename to reskins-bobs/graphics/entity/mining/pumpjack/water-pumpjack-horsehead.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-1-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-top.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-1-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-1-top.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-1-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-slot-overlay.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-slot-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom-slot-overlay.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom-slot-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-2-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-top.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-2-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-2-top.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-2-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-mask.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom-slot-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-top.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-3-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-3-top.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-3-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-top.png b/reskins-bobs/graphics/entity/modules/beacon/beacon-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/beacon-top.png rename to reskins-bobs/graphics/entity/modules/beacon/beacon-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-top.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-1-top.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-1-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-slot-overlay.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-slot-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom-slot-overlay.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom-slot-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-top.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-2-top.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-2-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-mask.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-mask.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom-slot-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-bottom.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-bottom.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-top.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-3-top.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-3-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-top.png b/reskins-bobs/graphics/entity/modules/beacon/hr-beacon-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/hr-beacon-top.png rename to reskins-bobs/graphics/entity/modules/beacon/hr-beacon-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/beacon-remnants-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/remnants/beacon-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/beacon-remnants-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/remnants/beacon-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/beacon-remnants-mask.png b/reskins-bobs/graphics/entity/modules/beacon/remnants/beacon-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/beacon-remnants-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/remnants/beacon-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-highlights.png b/reskins-bobs/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-highlights.png rename to reskins-bobs/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-mask.png b/reskins-bobs/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-mask.png rename to reskins-bobs/graphics/entity/modules/beacon/remnants/hr-beacon-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-box-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-box-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-box-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-box-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-mask-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-slot-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-slot-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-slot-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/beacon-module-slot-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-box-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-box-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-box-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-box-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-mask-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-slot-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-slot-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-slot-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/1/hr-beacon-module-slot-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-box-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-box-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-box-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-box-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-mask-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-slot-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-slot-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-slot-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/beacon-module-slot-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-box-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-box-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-box-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-box-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-mask-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-slot-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-slot-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-slot-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/5-lights/2/hr-beacon-module-slot-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-box-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-box-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-box-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-box-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-mask-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-slot-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-slot-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-slot-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/beacon-module-slot-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-box-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-box-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-box-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-box-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-lights-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-lights-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-lights-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-mask-lights-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-slot-1.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-slot-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-slot-1.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/1/hr-beacon-module-slot-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-box-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-box-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-box-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-box-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-mask-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-slot-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-slot-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-slot-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/beacon-module-slot-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-box-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-box-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-box-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-box-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-lights-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-lights-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-lights-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-mask-lights-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-slot-2.png b/reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-slot-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-slot-2.png rename to reskins-bobs/graphics/entity/modules/beacon/slots/8-lights/2/hr-beacon-module-slot-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/bauxite-ore/bauxite-ore.png b/reskins-bobs/graphics/entity/ores/bauxite-ore/bauxite-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/bauxite-ore/bauxite-ore.png rename to reskins-bobs/graphics/entity/ores/bauxite-ore/bauxite-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/bauxite-ore/hr-bauxite-ore.png b/reskins-bobs/graphics/entity/ores/bauxite-ore/hr-bauxite-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/bauxite-ore/hr-bauxite-ore.png rename to reskins-bobs/graphics/entity/ores/bauxite-ore/hr-bauxite-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/cobalt-ore/cobalt-ore.png b/reskins-bobs/graphics/entity/ores/cobalt-ore/cobalt-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/cobalt-ore/cobalt-ore.png rename to reskins-bobs/graphics/entity/ores/cobalt-ore/cobalt-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/cobalt-ore/hr-cobalt-ore.png b/reskins-bobs/graphics/entity/ores/cobalt-ore/hr-cobalt-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/cobalt-ore/hr-cobalt-ore.png rename to reskins-bobs/graphics/entity/ores/cobalt-ore/hr-cobalt-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/gold-ore/gold-ore.png b/reskins-bobs/graphics/entity/ores/gold-ore/gold-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/gold-ore/gold-ore.png rename to reskins-bobs/graphics/entity/ores/gold-ore/gold-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/gold-ore/hr-gold-ore.png b/reskins-bobs/graphics/entity/ores/gold-ore/hr-gold-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/gold-ore/hr-gold-ore.png rename to reskins-bobs/graphics/entity/ores/gold-ore/hr-gold-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/ground-water/ground-water.png b/reskins-bobs/graphics/entity/ores/ground-water/ground-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/ground-water/ground-water.png rename to reskins-bobs/graphics/entity/ores/ground-water/ground-water.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/ground-water/hr-ground-water.png b/reskins-bobs/graphics/entity/ores/ground-water/hr-ground-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/ground-water/hr-ground-water.png rename to reskins-bobs/graphics/entity/ores/ground-water/hr-ground-water.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/lead-ore/hr-lead-ore.png b/reskins-bobs/graphics/entity/ores/lead-ore/hr-lead-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/lead-ore/hr-lead-ore.png rename to reskins-bobs/graphics/entity/ores/lead-ore/hr-lead-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/lead-ore/lead-ore.png b/reskins-bobs/graphics/entity/ores/lead-ore/lead-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/lead-ore/lead-ore.png rename to reskins-bobs/graphics/entity/ores/lead-ore/lead-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/lithia-water/hr-lithia-water.png b/reskins-bobs/graphics/entity/ores/lithia-water/hr-lithia-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/lithia-water/hr-lithia-water.png rename to reskins-bobs/graphics/entity/ores/lithia-water/hr-lithia-water.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/lithia-water/lithia-water.png b/reskins-bobs/graphics/entity/ores/lithia-water/lithia-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/lithia-water/lithia-water.png rename to reskins-bobs/graphics/entity/ores/lithia-water/lithia-water.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/nickel-ore/hr-nickel-ore.png b/reskins-bobs/graphics/entity/ores/nickel-ore/hr-nickel-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/nickel-ore/hr-nickel-ore.png rename to reskins-bobs/graphics/entity/ores/nickel-ore/hr-nickel-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/nickel-ore/nickel-ore.png b/reskins-bobs/graphics/entity/ores/nickel-ore/nickel-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/nickel-ore/nickel-ore.png rename to reskins-bobs/graphics/entity/ores/nickel-ore/nickel-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/quartz/hr-quartz.png b/reskins-bobs/graphics/entity/ores/quartz/hr-quartz.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/quartz/hr-quartz.png rename to reskins-bobs/graphics/entity/ores/quartz/hr-quartz.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/quartz/quartz.png b/reskins-bobs/graphics/entity/ores/quartz/quartz.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/quartz/quartz.png rename to reskins-bobs/graphics/entity/ores/quartz/quartz.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/rutile-ore/hr-rutile-ore.png b/reskins-bobs/graphics/entity/ores/rutile-ore/hr-rutile-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/rutile-ore/hr-rutile-ore.png rename to reskins-bobs/graphics/entity/ores/rutile-ore/hr-rutile-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/rutile-ore/rutile-ore.png b/reskins-bobs/graphics/entity/ores/rutile-ore/rutile-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/rutile-ore/rutile-ore.png rename to reskins-bobs/graphics/entity/ores/rutile-ore/rutile-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/silver-ore/hr-silver-ore.png b/reskins-bobs/graphics/entity/ores/silver-ore/hr-silver-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/silver-ore/hr-silver-ore.png rename to reskins-bobs/graphics/entity/ores/silver-ore/hr-silver-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/silver-ore/silver-ore.png b/reskins-bobs/graphics/entity/ores/silver-ore/silver-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/silver-ore/silver-ore.png rename to reskins-bobs/graphics/entity/ores/silver-ore/silver-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/sulfur/hr-sulfur.png b/reskins-bobs/graphics/entity/ores/sulfur/hr-sulfur.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/sulfur/hr-sulfur.png rename to reskins-bobs/graphics/entity/ores/sulfur/hr-sulfur.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/sulfur/sulfur.png b/reskins-bobs/graphics/entity/ores/sulfur/sulfur.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/sulfur/sulfur.png rename to reskins-bobs/graphics/entity/ores/sulfur/sulfur.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/hr-thorium-ore-glow.png b/reskins-bobs/graphics/entity/ores/thorium-ore/hr-thorium-ore-glow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/hr-thorium-ore-glow.png rename to reskins-bobs/graphics/entity/ores/thorium-ore/hr-thorium-ore-glow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/hr-thorium-ore.png b/reskins-bobs/graphics/entity/ores/thorium-ore/hr-thorium-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/hr-thorium-ore.png rename to reskins-bobs/graphics/entity/ores/thorium-ore/hr-thorium-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/thorium-ore-glow.png b/reskins-bobs/graphics/entity/ores/thorium-ore/thorium-ore-glow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/thorium-ore-glow.png rename to reskins-bobs/graphics/entity/ores/thorium-ore/thorium-ore-glow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/thorium-ore.png b/reskins-bobs/graphics/entity/ores/thorium-ore/thorium-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/thorium-ore/thorium-ore.png rename to reskins-bobs/graphics/entity/ores/thorium-ore/thorium-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/tin-ore/hr-tin-ore.png b/reskins-bobs/graphics/entity/ores/tin-ore/hr-tin-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/tin-ore/hr-tin-ore.png rename to reskins-bobs/graphics/entity/ores/tin-ore/hr-tin-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/tin-ore/tin-ore.png b/reskins-bobs/graphics/entity/ores/tin-ore/tin-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/tin-ore/tin-ore.png rename to reskins-bobs/graphics/entity/ores/tin-ore/tin-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/tungsten-ore/hr-tungsten-ore.png b/reskins-bobs/graphics/entity/ores/tungsten-ore/hr-tungsten-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/tungsten-ore/hr-tungsten-ore.png rename to reskins-bobs/graphics/entity/ores/tungsten-ore/hr-tungsten-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/tungsten-ore/tungsten-ore.png b/reskins-bobs/graphics/entity/ores/tungsten-ore/tungsten-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/tungsten-ore/tungsten-ore.png rename to reskins-bobs/graphics/entity/ores/tungsten-ore/tungsten-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/zinc-ore/hr-zinc-ore.png b/reskins-bobs/graphics/entity/ores/zinc-ore/hr-zinc-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/zinc-ore/hr-zinc-ore.png rename to reskins-bobs/graphics/entity/ores/zinc-ore/hr-zinc-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/ores/zinc-ore/zinc-ore.png b/reskins-bobs/graphics/entity/ores/zinc-ore/zinc-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/ores/zinc-ore/zinc-ore.png rename to reskins-bobs/graphics/entity/ores/zinc-ore/zinc-ore.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-base.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-base.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-highlights.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-highlights.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-recipe-lightening-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-recipe-lightening-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-recipe-lightening-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-recipe-lightening-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-recipe-tint-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-recipe-tint-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-recipe-tint-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-recipe-tint-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-reflection.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-reflection.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-shadow.png b/reskins-bobs/graphics/entity/plates/air-pump/air-pump-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/air-pump-shadow.png rename to reskins-bobs/graphics/entity/plates/air-pump/air-pump-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-base.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-base.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-highlights.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-highlights.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-recipe-lightening-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-recipe-lightening-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-recipe-lightening-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-recipe-lightening-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-recipe-tint-mask.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-recipe-tint-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-recipe-tint-mask.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-recipe-tint-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-shadow.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-air-pump-shadow.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-air-pump-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-pump-light.png b/reskins-bobs/graphics/entity/plates/air-pump/hr-pump-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/hr-pump-light.png rename to reskins-bobs/graphics/entity/plates/air-pump/hr-pump-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/air-pump/pump-light.png b/reskins-bobs/graphics/entity/plates/air-pump/pump-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/air-pump/pump-light.png rename to reskins-bobs/graphics/entity/plates/air-pump/pump-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/fluid-background.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/fluid-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/fluid-background.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/fluid-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/fluid-flow.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/fluid-flow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/fluid-flow.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/fluid-flow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank-shadow.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank-shadow.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-inline-storage-tank.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-small-storage-tank-shadow.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-small-storage-tank-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-small-storage-tank-shadow.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-small-storage-tank-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-small-storage-tank.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-small-storage-tank.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-small-storage-tank.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-small-storage-tank.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-steam.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-steam.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-steam.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-steam.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-window-background.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/hr-window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/hr-window-background.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/hr-window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/inline-storage-tank-shadow.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/inline-storage-tank-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/inline-storage-tank-shadow.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/inline-storage-tank-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/inline-storage-tank.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/inline-storage-tank.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/inline-storage-tank.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/inline-storage-tank.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank-reflection.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank-reflection.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank-shadow.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank-shadow.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/small-storage-tank.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/small-storage-tank.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/steam.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/steam.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/steam.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/steam.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/window-background.png b/reskins-bobs/graphics/entity/plates/small-storage-tank/window-background.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/small-storage-tank/window-background.png rename to reskins-bobs/graphics/entity/plates/small-storage-tank/window-background.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-base.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-base.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-highlights.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-highlights.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-lightening-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-lightening-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-lightening-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-lightening-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-highlights.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-highlights.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-recipe-tint-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-shadow.png b/reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/hr-water-pump-shadow.png rename to reskins-bobs/graphics/entity/plates/water-pump/hr-water-pump-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-base.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-base.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-highlights.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-highlights.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-lightening-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-lightening-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-lightening-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-lightening-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-tint-highlights.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-tint-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-tint-highlights.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-tint-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-tint-mask.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-tint-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-recipe-tint-mask.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-recipe-tint-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-reflection.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-reflection.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-shadow.png b/reskins-bobs/graphics/entity/plates/water-pump/water-pump-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/plates/water-pump/water-pump-shadow.png rename to reskins-bobs/graphics/entity/plates/water-pump/water-pump-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/accumulator-highlights.png b/reskins-bobs/graphics/entity/power/accumulator/accumulator-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/accumulator-highlights.png rename to reskins-bobs/graphics/entity/power/accumulator/accumulator-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/accumulator-mask.png b/reskins-bobs/graphics/entity/power/accumulator/accumulator-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/accumulator-mask.png rename to reskins-bobs/graphics/entity/power/accumulator/accumulator-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/hr-accumulator-highlights.png b/reskins-bobs/graphics/entity/power/accumulator/hr-accumulator-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/hr-accumulator-highlights.png rename to reskins-bobs/graphics/entity/power/accumulator/hr-accumulator-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/hr-accumulator-mask.png b/reskins-bobs/graphics/entity/power/accumulator/hr-accumulator-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/hr-accumulator-mask.png rename to reskins-bobs/graphics/entity/power/accumulator/hr-accumulator-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/accumulator-remnants-highlights.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/accumulator-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/accumulator-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/accumulator-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/accumulator-remnants-mask.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/accumulator-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/accumulator-remnants-mask.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/accumulator-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-highlights.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-mask.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-mask.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/hr-accumulator-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-1-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-1-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-1-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-1-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-2-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-2-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-2-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-2-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-3-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-3-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/accumulator-3-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/accumulator-3-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-1-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-1-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-1-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-1-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-2-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-2-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-2-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-2-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-3-remnants.png b/reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-3-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-3-remnants.png rename to reskins-bobs/graphics/entity/power/accumulator/remnants/wires/hr-accumulator-3-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-1.png b/reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-1.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-2.png b/reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-2.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-3.png b/reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/accumulator-3.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/accumulator-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-1.png b/reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-1.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-2.png b/reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-2.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-3.png b/reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/accumulator/wires/hr-accumulator-3.png rename to reskins-bobs/graphics/entity/power/accumulator/wires/hr-accumulator-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/big-electric-pole-shadow.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/big-electric-pole-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/big-electric-pole-shadow.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/big-electric-pole-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/big-electric-pole.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/big-electric-pole.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/big-electric-pole.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/big-electric-pole.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole-shadow.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole-shadow.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/hr-big-electric-pole.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-base-remnants.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-base-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-base-remnants.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-base-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-top-remnants.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-top-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-top-remnants.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/big-electric-pole-top-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-base-remnants.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-base-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-base-remnants.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-base-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-top-remnants.png b/reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-top-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-top-remnants.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/base/remnants/hr-big-electric-pole-top-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/big-electric-pole-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/big-electric-pole-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/big-electric-pole-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/big-electric-pole-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/big-electric-pole-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/big-electric-pole-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/big-electric-pole-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/big-electric-pole-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/hr-big-electric-pole-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/hr-big-electric-pole-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/hr-big-electric-pole-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/hr-big-electric-pole-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/hr-big-electric-pole-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/hr-big-electric-pole-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/hr-big-electric-pole-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/hr-big-electric-pole-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-base-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/big-electric-pole-top-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-base-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-highlights.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-mask.png b/reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-mask.png rename to reskins-bobs/graphics/entity/power/big-electric-pole/remnants/hr-big-electric-pole-top-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-E-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/boiler-E-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-E-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-E-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-E-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/boiler-E-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-E-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-E-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-N-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/boiler-N-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-N-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-N-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-N-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/boiler-N-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-N-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-N-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-S-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/boiler-S-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-S-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-S-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-S-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/boiler-S-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-S-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-S-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-W-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/boiler-W-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-W-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-W-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-W-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/boiler-W-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/boiler-W-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/boiler-W-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-E-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-E-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-E-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-E-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-E-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-E-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-E-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-E-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-N-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-N-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-N-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-N-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-N-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-N-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-N-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-N-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-S-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-S-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-S-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-S-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-S-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-S-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-S-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-S-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-W-idle-highlights.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-W-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-W-idle-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-W-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-W-idle-mask.png b/reskins-bobs/graphics/entity/power/boiler/hr-boiler-W-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/hr-boiler-W-idle-mask.png rename to reskins-bobs/graphics/entity/power/boiler/hr-boiler-W-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/boiler-remnants-highlights.png b/reskins-bobs/graphics/entity/power/boiler/remnants/boiler-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/boiler-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/remnants/boiler-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/boiler-remnants-mask.png b/reskins-bobs/graphics/entity/power/boiler/remnants/boiler-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/boiler-remnants-mask.png rename to reskins-bobs/graphics/entity/power/boiler/remnants/boiler-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/hr-boiler-remnants-highlights.png b/reskins-bobs/graphics/entity/power/boiler/remnants/hr-boiler-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/hr-boiler-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/boiler/remnants/hr-boiler-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/hr-boiler-remnants-mask.png b/reskins-bobs/graphics/entity/power/boiler/remnants/hr-boiler-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/boiler/remnants/hr-boiler-remnants-mask.png rename to reskins-bobs/graphics/entity/power/boiler/remnants/hr-boiler-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-fire.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-fire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-fire.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-fire.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-glow.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-glow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-glow.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-glow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-reflection.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-reflection.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-shadow.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-shadow.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light-animated.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light-animated.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light-animated.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light-animated.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator-working-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/burner-electric-generator.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/burner-electric-generator.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-fire.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-fire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-fire.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-fire.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-shadow.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-shadow.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light-animated.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light-animated.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light-animated.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light-animated.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator-working-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator.png b/reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator.png rename to reskins-bobs/graphics/entity/power/burner-electric-generator/hr-burner-electric-generator.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-base.png b/reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-base.png rename to reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-highlights.png b/reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-highlights.png rename to reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-mask.png b/reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-mask.png rename to reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-reflection.png b/reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-reflection.png rename to reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-shadow.png b/reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/fluid-generator-shadow.png rename to reskins-bobs/graphics/entity/power/fluid-generator/fluid-generator-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-base.png b/reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-base.png rename to reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-highlights.png b/reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-highlights.png rename to reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-mask.png b/reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-mask.png rename to reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-shadow.png b/reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/fluid-generator/hr-fluid-generator-shadow.png rename to reskins-bobs/graphics/entity/power/fluid-generator/hr-fluid-generator-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/aluminum-invar/hr-heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/base/hr-heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/gold-copper/hr-heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-aluminum/hr-heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-E-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-E-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-E-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-E-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-N-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-N-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-N-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-N-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-S-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-S-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-S-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-S-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-W-idle.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-W-idle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-W-idle.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-W-idle.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-endings.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-endings.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-endings.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-endings.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-remnants.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-remnants.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heat-pipes/silver-titanium/hr-heatex-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-E-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-E-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-E-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-E-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-E-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-E-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-E-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-E-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-N-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-N-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-N-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-N-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-N-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-N-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-N-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-N-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-S-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-S-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-S-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-S-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-S-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-S-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-S-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-S-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-W-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-W-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-W-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-W-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-W-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/heatex-W-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/heatex-W-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/heatex-W-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-E-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-N-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-S-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/hr-heatex-W-idle-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/remnants/heatex-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-highlights.png b/reskins-bobs/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-mask.png b/reskins-bobs/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-mask.png rename to reskins-bobs/graphics/entity/power/heat-exchanger/remnants/hr-heatex-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/hr-heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/remnants/heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/remnants/heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/remnants/heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/remnants/heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/remnants/hr-heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/remnants/hr-heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/aluminum-invar/remnants/hr-heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/aluminum-invar/remnants/hr-heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/hr-heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/remnants/heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/remnants/heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/remnants/heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/remnants/heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/remnants/hr-heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/remnants/hr-heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/gold-copper/remnants/hr-heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/gold-copper/remnants/hr-heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/hr-heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/remnants/heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/remnants/heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/remnants/heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/remnants/heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/remnants/hr-heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/remnants/hr-heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-aluminum/remnants/hr-heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-aluminum/remnants/hr-heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-down-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-left-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-corner-up-right-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-ending-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-horizontal-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-2.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-2.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-3.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-3.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-4.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-4.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-4.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-5.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-5.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-5.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-6.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-6.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-6.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-single.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-single.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-straight-vertical-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-down-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-down-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-down-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-down-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-left-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-left-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-left-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-left-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-right-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-right-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-right-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-right-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-up-1.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-up-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-up-1.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/hr-heat-pipe-t-up-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/remnants/heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/remnants/heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/remnants/heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/remnants/heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/remnants/hr-heat-pipe-remnants.png b/reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/remnants/hr-heat-pipe-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-pipe/silver-titanium/remnants/hr-heat-pipe-remnants.png rename to reskins-bobs/graphics/entity/power/heat-pipe/silver-titanium/remnants/hr-heat-pipe-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-aluminum-invar.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-aluminum-invar.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-aluminum-invar.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-aluminum-invar.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-base.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-base.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-gold-copper.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-gold-copper.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-gold-copper.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-gold-copper.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-silver-aluminum.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-silver-aluminum.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-silver-aluminum.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-silver-aluminum.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-silver-titanium.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-silver-titanium.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base-pipes-silver-titanium.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base-pipes-silver-titanium.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-base.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-highlights.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-highlights.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-mask.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-mask.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-shadow.png b/reskins-bobs/graphics/entity/power/heat-source/heat-source-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/heat-source-shadow.png rename to reskins-bobs/graphics/entity/power/heat-source/heat-source-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-aluminum-invar.png b/reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-aluminum-invar.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-aluminum-invar.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-aluminum-invar.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-base.png b/reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-base.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-gold-copper.png b/reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-gold-copper.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-gold-copper.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-gold-copper.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-aluminum.png b/reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-aluminum.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-aluminum.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-aluminum.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-titanium.png b/reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-titanium.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-titanium.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-heat-source-base-pipes-silver-titanium.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-aluminum-invar.png b/reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-aluminum-invar.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-aluminum-invar.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-aluminum-invar.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-base.png b/reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-base.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-gold-copper.png b/reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-gold-copper.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-gold-copper.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-gold-copper.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-aluminum.png b/reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-aluminum.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-aluminum.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-aluminum.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-titanium.png b/reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-titanium.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-titanium.png rename to reskins-bobs/graphics/entity/power/heat-source/hr-reactor-connect-patches-silver-titanium.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-aluminum-invar.png b/reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-aluminum-invar.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-aluminum-invar.png rename to reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-aluminum-invar.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-base.png b/reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-base.png rename to reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-gold-copper.png b/reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-gold-copper.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-gold-copper.png rename to reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-gold-copper.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-silver-aluminum.png b/reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-silver-aluminum.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-silver-aluminum.png rename to reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-silver-aluminum.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-silver-titanium.png b/reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-silver-titanium.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/heat-source/reactor-connect-patches-silver-titanium.png rename to reskins-bobs/graphics/entity/power/heat-source/reactor-connect-patches-silver-titanium.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/hr-medium-electric-pole-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/medium-electric-pole-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/medium-electric-pole-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/medium-electric-pole-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/medium-electric-pole-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/medium-electric-pole-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/medium-electric-pole-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/medium-electric-pole-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/medium-electric-pole-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-base-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/hr-medium-electric-pole-top-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-base-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-highlights.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-mask.png b/reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-mask.png rename to reskins-bobs/graphics/entity/power/medium-electric-pole/remnants/medium-electric-pole-top-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/hr-reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/aluminum-invar/reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/hr-reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/base/reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/hr-reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/gold-copper/reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-base-pipes-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-connect-patches-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/hr-reactor-piping-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-base-pipes-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-connect-patches-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-1.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-1.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-2.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-2.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-3.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-3.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/reactor-piping-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/hr-reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-aluminum/reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/hr-reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-base-pipes.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-base-pipes.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-base-pipes.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-base-pipes.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-connect-patches.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-connect-patches.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-connect-patches.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-connect-patches.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-piping.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-piping.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-piping.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-piping.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/heat-pipes/silver-titanium/reactor-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/hr-reactor-highlights.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/hr-reactor-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/hr-reactor-highlights.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/hr-reactor-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/hr-reactor-mask.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/hr-reactor-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/hr-reactor-mask.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/hr-reactor-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/reactor-highlights.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/reactor-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/reactor-highlights.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/reactor-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/reactor-mask.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/reactor-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/reactor-mask.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/reactor-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-highlights.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-mask.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-mask.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/hr-nuclear-reactor-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-highlights.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-mask.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-mask.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/nuclear-reactor-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-1-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-1-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-1-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-1-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-2-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-2-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-2-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-2-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-3-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-3-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-3-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/hr-reactor-piping-3-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-1-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-1-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-1-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-1-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-2-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-2-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-2-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-2-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-3-remnants.png b/reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-3-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-3-remnants.png rename to reskins-bobs/graphics/entity/power/nuclear-reactor/remnants/pipes/reactor-piping-3-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/hr-solar-panel-large.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large.png b/reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/base/solar-panel-large.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/base/solar-panel-large.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/hr-solar-panel-large-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-large/hr-solar-panel-large-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/hr-solar-panel-large-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/hr-solar-panel-large-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/hr-solar-panel-large-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-large/hr-solar-panel-large-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/hr-solar-panel-large-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/hr-solar-panel-large-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/solar-panel-large-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-large/solar-panel-large-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/solar-panel-large-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/solar-panel-large-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/solar-panel-large-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-large/solar-panel-large-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-large/solar-panel-large-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-large/solar-panel-large-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/hr-solar-panel-small.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small.png b/reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/base/solar-panel-small.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/base/solar-panel-small.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/hr-solar-panel-small-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-small/hr-solar-panel-small-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/hr-solar-panel-small-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/hr-solar-panel-small-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/hr-solar-panel-small-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-small/hr-solar-panel-small-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/hr-solar-panel-small-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/hr-solar-panel-small-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-base.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-base.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/hr-small-solar-panel-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-base.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-base.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/remnants/small-solar-panel-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/solar-panel-small-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel-small/solar-panel-small-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/solar-panel-small-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/solar-panel-small-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/solar-panel-small-mask.png b/reskins-bobs/graphics/entity/power/solar-panel-small/solar-panel-small-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel-small/solar-panel-small-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel-small/solar-panel-small-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel.png b/reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/hr-solar-panel.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/hr-solar-panel.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel-shadow-overlay.png b/reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel-shadow-overlay.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel-shadow-overlay.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel-shadow-overlay.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel-shadow.png b/reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel-shadow.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel.png b/reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/base/solar-panel.png rename to reskins-bobs/graphics/entity/power/solar-panel/base/solar-panel.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/hr-solar-panel-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel/hr-solar-panel-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/hr-solar-panel-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel/hr-solar-panel-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/hr-solar-panel-mask.png b/reskins-bobs/graphics/entity/power/solar-panel/hr-solar-panel-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/hr-solar-panel-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel/hr-solar-panel-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-mask.png b/reskins-bobs/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel/remnants/hr-solar-panel-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-mask.png b/reskins-bobs/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel/remnants/solar-panel-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/solar-panel-highlights.png b/reskins-bobs/graphics/entity/power/solar-panel/solar-panel-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/solar-panel-highlights.png rename to reskins-bobs/graphics/entity/power/solar-panel/solar-panel-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/solar-panel/solar-panel-mask.png b/reskins-bobs/graphics/entity/power/solar-panel/solar-panel-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/solar-panel/solar-panel-mask.png rename to reskins-bobs/graphics/entity/power/solar-panel/solar-panel-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-H-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-H-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-H-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-H-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-H-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-H-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-H-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-H-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-V-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-V-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-V-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-V-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-V-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-V-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/hr-steam-engine-V-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/hr-steam-engine-V-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/remnants/hr-steam-engine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/remnants/steam-engine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-H-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/steam-engine-H-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-H-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/steam-engine-H-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-H-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/steam-engine-H-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-H-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/steam-engine-H-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-V-highlights.png b/reskins-bobs/graphics/entity/power/steam-engine/steam-engine-V-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-V-highlights.png rename to reskins-bobs/graphics/entity/power/steam-engine/steam-engine-V-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-V-mask.png b/reskins-bobs/graphics/entity/power/steam-engine/steam-engine-V-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-engine/steam-engine-V-mask.png rename to reskins-bobs/graphics/entity/power/steam-engine/steam-engine-V-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-H-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-H-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-H-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-H-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-H-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-H-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-H-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-H-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-V-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-V-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-V-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-V-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-V-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-V-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/hr-steam-turbine-V-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/hr-steam-turbine-V-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/remnants/hr-steam-turbine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/remnants/steam-turbine-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-H-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-H-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-H-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-H-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-H-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-H-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-H-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-H-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-V-highlights.png b/reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-V-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-V-highlights.png rename to reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-V-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-V-mask.png b/reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-V-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/steam-turbine/steam-turbine-V-mask.png rename to reskins-bobs/graphics/entity/power/steam-turbine/steam-turbine-V-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/hr-substation-shadow.png b/reskins-bobs/graphics/entity/power/substation/base/hr-substation-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/hr-substation-shadow.png rename to reskins-bobs/graphics/entity/power/substation/base/hr-substation-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/hr-substation.png b/reskins-bobs/graphics/entity/power/substation/base/hr-substation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/hr-substation.png rename to reskins-bobs/graphics/entity/power/substation/base/hr-substation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/remnants/hr-substation-remnants.png b/reskins-bobs/graphics/entity/power/substation/base/remnants/hr-substation-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/remnants/hr-substation-remnants.png rename to reskins-bobs/graphics/entity/power/substation/base/remnants/hr-substation-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/remnants/substation-remnants.png b/reskins-bobs/graphics/entity/power/substation/base/remnants/substation-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/remnants/substation-remnants.png rename to reskins-bobs/graphics/entity/power/substation/base/remnants/substation-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/substation-shadow.png b/reskins-bobs/graphics/entity/power/substation/base/substation-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/substation-shadow.png rename to reskins-bobs/graphics/entity/power/substation/base/substation-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/base/substation.png b/reskins-bobs/graphics/entity/power/substation/base/substation.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/base/substation.png rename to reskins-bobs/graphics/entity/power/substation/base/substation.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/hr-substation-highlights.png b/reskins-bobs/graphics/entity/power/substation/hr-substation-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/hr-substation-highlights.png rename to reskins-bobs/graphics/entity/power/substation/hr-substation-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/hr-substation-mask.png b/reskins-bobs/graphics/entity/power/substation/hr-substation-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/hr-substation-mask.png rename to reskins-bobs/graphics/entity/power/substation/hr-substation-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/hr-substation-remnants-highlights.png b/reskins-bobs/graphics/entity/power/substation/remnants/hr-substation-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/hr-substation-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/substation/remnants/hr-substation-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/hr-substation-remnants-mask.png b/reskins-bobs/graphics/entity/power/substation/remnants/hr-substation-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/hr-substation-remnants-mask.png rename to reskins-bobs/graphics/entity/power/substation/remnants/hr-substation-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/substation-remnants-highlights.png b/reskins-bobs/graphics/entity/power/substation/remnants/substation-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/substation-remnants-highlights.png rename to reskins-bobs/graphics/entity/power/substation/remnants/substation-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/substation-remnants-mask.png b/reskins-bobs/graphics/entity/power/substation/remnants/substation-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/remnants/substation-remnants-mask.png rename to reskins-bobs/graphics/entity/power/substation/remnants/substation-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/substation-highlights.png b/reskins-bobs/graphics/entity/power/substation/substation-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/substation-highlights.png rename to reskins-bobs/graphics/entity/power/substation/substation-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/power/substation/substation-mask.png b/reskins-bobs/graphics/entity/power/substation/substation-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/power/substation/substation-mask.png rename to reskins-bobs/graphics/entity/power/substation/substation-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab-2.png b/reskins-bobs/graphics/entity/technology/lab/hr-lab-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab-2.png rename to reskins-bobs/graphics/entity/technology/lab/hr-lab-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab-alien.png b/reskins-bobs/graphics/entity/technology/lab/hr-lab-alien.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab-alien.png rename to reskins-bobs/graphics/entity/technology/lab/hr-lab-alien.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab.png b/reskins-bobs/graphics/entity/technology/lab/hr-lab.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/hr-lab.png rename to reskins-bobs/graphics/entity/technology/lab/hr-lab.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/lab.png b/reskins-bobs/graphics/entity/technology/lab/lab.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/lab.png rename to reskins-bobs/graphics/entity/technology/lab/lab.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/remnants/hr-lab-remnants.png b/reskins-bobs/graphics/entity/technology/lab/remnants/hr-lab-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/remnants/hr-lab-remnants.png rename to reskins-bobs/graphics/entity/technology/lab/remnants/hr-lab-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/technology/lab/remnants/lab-remnants.png b/reskins-bobs/graphics/entity/technology/lab/remnants/lab-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/technology/lab/remnants/lab-remnants.png rename to reskins-bobs/graphics/entity/technology/lab/remnants/lab-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-base.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-base.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-highlights.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-highlights.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-mask.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/artillery-turret-mask.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/artillery-turret-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-base.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-base.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-highlights.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-highlights.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-mask.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/hr-artillery-turret-mask.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/hr-artillery-turret-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-base.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-base.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/artillery-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-base.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-base.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/artillery-turret/remnants/hr-artillery-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/amethyst-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/amethyst/amethyst-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/amethyst-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/amethyst/amethyst-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/amethyst/hr-amethyst-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/hr-laser-body-light.png b/reskins-bobs/graphics/entity/warfare/beam/base/hr-laser-body-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/hr-laser-body-light.png rename to reskins-bobs/graphics/entity/warfare/beam/base/hr-laser-body-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/hr-laser-end-light.png b/reskins-bobs/graphics/entity/warfare/beam/base/hr-laser-end-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/hr-laser-end-light.png rename to reskins-bobs/graphics/entity/warfare/beam/base/hr-laser-end-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-body.png b/reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-body.png rename to reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-head.png b/reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-head.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-head.png rename to reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-head.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-tail.png b/reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-tail.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/base/laser-ground-light-tail.png rename to reskins-bobs/graphics/entity/warfare/beam/base/laser-ground-light-tail.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/diamond-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/diamond/diamond-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/diamond-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/diamond/diamond-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/diamond/hr-diamond-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/diamond/hr-diamond-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/emerald-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/emerald/emerald-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/emerald-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/emerald/emerald-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/emerald/hr-emerald-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/emerald/hr-emerald-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/glass-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/glass/glass-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/glass-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/glass/glass-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/glass/hr-glass-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/glass/hr-glass-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/hr-ruby-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/ruby/hr-ruby-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/ruby-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/ruby/ruby-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/ruby/ruby-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/ruby/ruby-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/sapphire/hr-sapphire-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/sapphire-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/sapphire/sapphire-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/sapphire/sapphire-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/sapphire/sapphire-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-body.png b/reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-body.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-body.png rename to reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-body.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-end.png b/reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-end.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-end.png rename to reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-end.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/hr-topaz-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/topaz/hr-topaz-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/topaz-laser-turret-shooting-light.png b/reskins-bobs/graphics/entity/warfare/beam/topaz/topaz-laser-turret-shooting-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/beam/topaz/topaz-laser-turret-shooting-light.png rename to reskins-bobs/graphics/entity/warfare/beam/topaz/topaz-laser-turret-shooting-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/capsules/bob-laser-robot-capsule.png b/reskins-bobs/graphics/entity/warfare/capsules/bob-laser-robot-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/capsules/bob-laser-robot-capsule.png rename to reskins-bobs/graphics/entity/warfare/capsules/bob-laser-robot-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/capsules/combat-robot-capsule-shadow.png b/reskins-bobs/graphics/entity/warfare/capsules/combat-robot-capsule-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/capsules/combat-robot-capsule-shadow.png rename to reskins-bobs/graphics/entity/warfare/capsules/combat-robot-capsule-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/capsules/defender-capsule.png b/reskins-bobs/graphics/entity/warfare/capsules/defender-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/capsules/defender-capsule.png rename to reskins-bobs/graphics/entity/warfare/capsules/defender-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/capsules/destroyer-capsule.png b/reskins-bobs/graphics/entity/warfare/capsules/destroyer-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/capsules/destroyer-capsule.png rename to reskins-bobs/graphics/entity/warfare/capsules/destroyer-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/capsules/distractor-capsule.png b/reskins-bobs/graphics/entity/warfare/capsules/distractor-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/capsules/distractor-capsule.png rename to reskins-bobs/graphics/entity/warfare/capsules/distractor-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/distractor-mine-set.png b/reskins-bobs/graphics/entity/warfare/distractor-mine/distractor-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/distractor-mine-set.png rename to reskins-bobs/graphics/entity/warfare/distractor-mine/distractor-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/distractor-mine.png b/reskins-bobs/graphics/entity/warfare/distractor-mine/distractor-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/distractor-mine.png rename to reskins-bobs/graphics/entity/warfare/distractor-mine/distractor-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/hr-distractor-mine-set.png b/reskins-bobs/graphics/entity/warfare/distractor-mine/hr-distractor-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/hr-distractor-mine-set.png rename to reskins-bobs/graphics/entity/warfare/distractor-mine/hr-distractor-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/hr-distractor-mine.png b/reskins-bobs/graphics/entity/warfare/distractor-mine/hr-distractor-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/distractor-mine/hr-distractor-mine.png rename to reskins-bobs/graphics/entity/warfare/distractor-mine/hr-distractor-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_01.png b/reskins-bobs/graphics/entity/warfare/drone/drone-highlights_01.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_01.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-highlights_01.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_02.png b/reskins-bobs/graphics/entity/warfare/drone/drone-highlights_02.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_02.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-highlights_02.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_03.png b/reskins-bobs/graphics/entity/warfare/drone/drone-highlights_03.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_03.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-highlights_03.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_04.png b/reskins-bobs/graphics/entity/warfare/drone/drone-highlights_04.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-highlights_04.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-highlights_04.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_01.png b/reskins-bobs/graphics/entity/warfare/drone/drone-mask_01.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_01.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-mask_01.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_02.png b/reskins-bobs/graphics/entity/warfare/drone/drone-mask_02.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_02.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-mask_02.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_03.png b/reskins-bobs/graphics/entity/warfare/drone/drone-mask_03.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_03.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-mask_03.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_04.png b/reskins-bobs/graphics/entity/warfare/drone/drone-mask_04.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-mask_04.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-mask_04.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top-light-core.png b/reskins-bobs/graphics/entity/warfare/drone/drone-top-light-core.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top-light-core.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-top-light-core.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top-light.png b/reskins-bobs/graphics/entity/warfare/drone/drone-top-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top-light.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-top-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top.png b/reskins-bobs/graphics/entity/warfare/drone/drone-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/drone-top.png rename to reskins-bobs/graphics/entity/warfare/drone/drone-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_01.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_01.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_01.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_01.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_02.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_02.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_02.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_02.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_03.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_03.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_03.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_03.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_04.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_04.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-highlights_04.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-highlights_04.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_01.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_01.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_01.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_01.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_02.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_02.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_02.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_02.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_03.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_03.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_03.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_03.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_04.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_04.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-mask_04.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-mask_04.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top-light-core.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-top-light-core.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top-light-core.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-top-light-core.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top-light.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-top-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top-light.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-top-light.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top.png b/reskins-bobs/graphics/entity/warfare/drone/hr-drone-top.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/hr-drone-top.png rename to reskins-bobs/graphics/entity/warfare/drone/hr-drone-top.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/drone-remnants.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/drone-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants.png b/reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/drone/remnants/hr-drone-remnants.png rename to reskins-bobs/graphics/entity/warfare/drone/remnants/hr-drone-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-raising-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-1-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-2-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-3-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/gun-turret-shooting-4-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-1-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-2-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-3-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/hr-gun-turret-shooting-4-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/remnants/gun-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/gun-turret/remnants/hr-gun-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/bob-laser-robot-shadow.png b/reskins-bobs/graphics/entity/warfare/laser-robot/bob-laser-robot-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/bob-laser-robot-shadow.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/bob-laser-robot-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/bob-laser-robot.png b/reskins-bobs/graphics/entity/warfare/laser-robot/bob-laser-robot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/bob-laser-robot.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/bob-laser-robot.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/hr-bob-laser-robot-shadow.png b/reskins-bobs/graphics/entity/warfare/laser-robot/hr-bob-laser-robot-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/hr-bob-laser-robot-shadow.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/hr-bob-laser-robot-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/hr-bob-laser-robot.png b/reskins-bobs/graphics/entity/warfare/laser-robot/hr-bob-laser-robot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/hr-bob-laser-robot.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/hr-bob-laser-robot.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/remnants/hr-laser-robot-remnants.png b/reskins-bobs/graphics/entity/warfare/laser-robot/remnants/hr-laser-robot-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/remnants/hr-laser-robot-remnants.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/remnants/hr-laser-robot-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/remnants/laser-robot-remnants.png b/reskins-bobs/graphics/entity/warfare/laser-robot/remnants/laser-robot-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-robot/remnants/laser-robot-remnants.png rename to reskins-bobs/graphics/entity/warfare/laser-robot/remnants/laser-robot-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/hr-laser-turret-base-highlights.png b/reskins-bobs/graphics/entity/warfare/laser-turret/hr-laser-turret-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/hr-laser-turret-base-highlights.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/hr-laser-turret-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/hr-laser-turret-base-mask.png b/reskins-bobs/graphics/entity/warfare/laser-turret/hr-laser-turret-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/hr-laser-turret-base-mask.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/hr-laser-turret-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/laser-turret-base-highlights.png b/reskins-bobs/graphics/entity/warfare/laser-turret/laser-turret-base-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/laser-turret-base-highlights.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/laser-turret-base-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/laser-turret-base-mask.png b/reskins-bobs/graphics/entity/warfare/laser-turret/laser-turret-base-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/laser-turret-base-mask.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/laser-turret-base-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/remnants/hr-laser-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/laser-turret/remnants/laser-turret-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base-shadow.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base-shadow.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-lights-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-raising-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-light-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-cannon-shooting-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/hr-plasma-turret-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/hr-plasma-turret-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-base-shadow.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-base-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-base-shadow.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-base-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-lights-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-raising-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-base.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-base.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-highlights.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-highlights.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-light-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-cannon-shooting-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-reflection.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-reflection.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-reflection.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-reflection.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/plasma-turret/plasma-turret-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/plasma-turret/plasma-turret-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/hr-poison-mine-set.png b/reskins-bobs/graphics/entity/warfare/poison-mine/hr-poison-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/hr-poison-mine-set.png rename to reskins-bobs/graphics/entity/warfare/poison-mine/hr-poison-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/hr-poison-mine.png b/reskins-bobs/graphics/entity/warfare/poison-mine/hr-poison-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/hr-poison-mine.png rename to reskins-bobs/graphics/entity/warfare/poison-mine/hr-poison-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/poison-mine-set.png b/reskins-bobs/graphics/entity/warfare/poison-mine/poison-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/poison-mine-set.png rename to reskins-bobs/graphics/entity/warfare/poison-mine/poison-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/poison-mine.png b/reskins-bobs/graphics/entity/warfare/poison-mine/poison-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/poison-mine/poison-mine.png rename to reskins-bobs/graphics/entity/warfare/poison-mine/poison-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/hr-radar-highlights.png b/reskins-bobs/graphics/entity/warfare/radar/hr-radar-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/hr-radar-highlights.png rename to reskins-bobs/graphics/entity/warfare/radar/hr-radar-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/hr-radar-mask.png b/reskins-bobs/graphics/entity/warfare/radar/hr-radar-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/hr-radar-mask.png rename to reskins-bobs/graphics/entity/warfare/radar/hr-radar-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/radar-highlights.png b/reskins-bobs/graphics/entity/warfare/radar/radar-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/radar-highlights.png rename to reskins-bobs/graphics/entity/warfare/radar/radar-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/radar-mask.png b/reskins-bobs/graphics/entity/warfare/radar/radar-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/radar-mask.png rename to reskins-bobs/graphics/entity/warfare/radar/radar-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/hr-radar-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/radar/remnants/hr-radar-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/hr-radar-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/radar/remnants/hr-radar-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/hr-radar-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/radar/remnants/hr-radar-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/hr-radar-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/radar/remnants/hr-radar-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/radar-remnants-highlights.png b/reskins-bobs/graphics/entity/warfare/radar/remnants/radar-remnants-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/radar-remnants-highlights.png rename to reskins-bobs/graphics/entity/warfare/radar/remnants/radar-remnants-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/radar-remnants-mask.png b/reskins-bobs/graphics/entity/warfare/radar/remnants/radar-remnants-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/radar/remnants/radar-remnants-mask.png rename to reskins-bobs/graphics/entity/warfare/radar/remnants/radar-remnants-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-base-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-horizontal-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-rail-vertical-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-wall-patch.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-wall-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-wall-patch.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/hr-reinforced-gate-wall-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-base-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-horizontal-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-rail-vertical-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-wall-patch.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-wall-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/reinforced-gate-wall-patch.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/reinforced-gate-wall-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-1.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-1.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-2.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-2.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-3.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-3.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/hr-reinforced-gate-remnants-var-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-1.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-1.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-1.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-2.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-2.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-2.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-3.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-3.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/remnants/reinforced-gate-remnants-var-3.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-horizontal-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-horizontal-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-horizontal-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-horizontal-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-horizontal-shadow-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-rail-vertical-shadow-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-vertical-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-vertical-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-vertical-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-vertical-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-wall-patch-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-wall-patch-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-wall-patch-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/hr-reinforced-gate-wall-patch-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-horizontal-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-horizontal-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-horizontal-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-horizontal-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-horizontal-shadow-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-rail-vertical-shadow-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-vertical-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-vertical-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-vertical-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-vertical-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-wall-patch-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-wall-patch-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-wall-patch-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-gate/shadows/reinforced-gate-wall-patch-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-corner-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-filling.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-filling.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-filling.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-filling.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-gate.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-gate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-gate.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-gate.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-patch.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-patch.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-single.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-single.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-t.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-t.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-t.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-t.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/hr-reinforced-wall-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-corner-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-left.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-left.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-left.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-left.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-right.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-right.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-right.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-ending-right.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-filling.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-filling.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-filling.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-filling.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-gate.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-gate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-gate.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-gate.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-horizontal.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-horizontal.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-horizontal.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-horizontal.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-patch.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-patch.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-patch.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-patch.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-single.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-single.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-single.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-single.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-t.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-t.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-t.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-t.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-vertical.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-vertical.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/reinforced-wall-vertical.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/reinforced-wall-vertical.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/remnants/hr-reinforced-wall-remnants.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/remnants/hr-reinforced-wall-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/remnants/hr-reinforced-wall-remnants.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/remnants/hr-reinforced-wall-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/remnants/reinforced-wall-remnants.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/remnants/reinforced-wall-remnants.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/remnants/reinforced-wall-remnants.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/remnants/reinforced-wall-remnants.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-left-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-left-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-left-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-left-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-right-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-right-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-right-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-corner-right-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-left-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-left-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-left-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-left-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-right-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-right-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-right-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-ending-right-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-gate-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-gate-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-gate-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-gate-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-horizontal-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-horizontal-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-horizontal-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-horizontal-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-patch-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-patch-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-patch-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-patch-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-single-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-single-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-single-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-single-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-t-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-t-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-t-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-t-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-vertical-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-vertical-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-vertical-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/hr-reinforced-wall-vertical-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-left-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-left-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-left-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-left-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-right-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-right-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-right-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-corner-right-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-left-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-left-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-left-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-left-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-right-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-right-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-right-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-ending-right-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-gate-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-gate-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-gate-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-gate-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-horizontal-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-horizontal-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-horizontal-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-horizontal-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-patch-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-patch-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-patch-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-patch-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-single-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-single-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-single-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-single-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-t-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-t-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-t-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-t-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-vertical-shadow.png b/reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-vertical-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-vertical-shadow.png rename to reskins-bobs/graphics/entity/warfare/reinforced-wall/shadows/reinforced-wall-vertical-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine-set.png b/reskins-bobs/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine-set.png rename to reskins-bobs/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine.png b/reskins-bobs/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine.png rename to reskins-bobs/graphics/entity/warfare/slowdown-mine/hr-slowdown-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/slowdown-mine-set.png b/reskins-bobs/graphics/entity/warfare/slowdown-mine/slowdown-mine-set.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/slowdown-mine-set.png rename to reskins-bobs/graphics/entity/warfare/slowdown-mine/slowdown-mine-set.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/slowdown-mine.png b/reskins-bobs/graphics/entity/warfare/slowdown-mine/slowdown-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/slowdown-mine/slowdown-mine.png rename to reskins-bobs/graphics/entity/warfare/slowdown-mine/slowdown-mine.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-tint.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-tint.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-tint.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising-tint.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-raising.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-highlights.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-highlights.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-tint.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-tint.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-tint.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting-tint.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/hr-sniper-turret-shooting.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base-runtime-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base-runtime-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base-runtime-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base-runtime-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-base.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-base.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-highlights.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-highlights.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-tint.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-tint.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising-tint.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising-tint.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-raising.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-raising.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-highlights.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-highlights.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-mask.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-mask.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-mask.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-shadow.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-shadow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-shadow.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-shadow.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-tint.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-tint.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-tint.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting-tint.png diff --git a/reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting.png b/reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/entity/warfare/sniper-turret/sniper-turret-shooting.png rename to reskins-bobs/graphics/entity/warfare/sniper-turret/sniper-turret-shooting.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/battery-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/battery/battery-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/battery/hr-battery-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/battery/hr-battery-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/energy-shield-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/energy-shield-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/energy-shield/hr-energy-shield-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/exoskeleton/exoskeleton-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/exoskeleton/hr-exoskeleton-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/fusion-reactor-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/fusion-reactor/hr-fusion-reactor-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/hr-laser-defense-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/laser-defense/laser-defense-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/laser-defense/laser-defense-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/hr-night-vision-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/night-vision/night-vision-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/night-vision/night-vision-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-3-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-3-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-4-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-4-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/hr-part-antenna-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-3-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-3-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-4-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-4-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-antenna/part-antenna-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-antenna/part-antenna-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-3-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-3-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-4-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-4-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/hr-part-chargepad-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-3-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-3-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-4-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-4-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-chargepad/part-chargepad-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/hr-part-robot-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/part-robot/part-robot-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/part-robot/part-robot-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-1-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/hr-personal-roboport-2-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-1-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/personal-roboport/personal-roboport-2-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/hr-solar-panel-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-base.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-base.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-highlights.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-highlights.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-mask.png b/reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/equipment/solar-panel/solar-panel-equipment-mask.png rename to reskins-bobs/graphics/equipment/equipment/solar-panel/solar-panel-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/hr-vehicle-battery-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-battery/vehicle-battery-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/hr-vehicle-energy-shield-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-engine/hr-vehicle-engine-equipment.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-engine/hr-vehicle-engine-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-engine/hr-vehicle-engine-equipment.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-engine/hr-vehicle-engine-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-engine/vehicle-engine-equipment.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-engine/vehicle-engine-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-engine/vehicle-engine-equipment.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-engine/vehicle-engine-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/hr-vehicle-fusion-cell-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/hr-vehicle-fusion-reactor-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-fusion-reactor/vehicle-fusion-reactor-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-motor/hr-vehicle-motor-equipment.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-motor/hr-vehicle-motor-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-motor/hr-vehicle-motor-equipment.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-motor/hr-vehicle-motor-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-motor/vehicle-motor-equipment.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-motor/vehicle-motor-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-motor/vehicle-motor-equipment.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-motor/vehicle-motor-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/hr-vehicle-part-antenna-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/hr-vehicle-part-chargepad-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/hr-vehicle-part-robot-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/hr-vehicle-plasma-turret-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/hr-vehicle-roboport-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-roboport/vehicle-roboport-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/hr-vehicle-solar-panel-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-base.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-base.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-base.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-highlights.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-highlights.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-mask.png b/reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-mask.png rename to reskins-bobs/graphics/equipment/vehicle-equipment/vehicle-solar-panel/vehicle-solar-panel-equipment-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-base.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-base.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-mask.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/assembling-machine-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/assembling-machine-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-1.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-1.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-2.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-2.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-3.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/electronics-machine-3.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/electronics-machine-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-0.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-0.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-0.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-0.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-1.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-1.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-2.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-2.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-3.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-3.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-4.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-4.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-5.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/gear-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/gear-5.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/gear-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-base.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-base.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-mask.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-assembling-machine-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-0.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-0.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-0.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-0.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-1.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-1.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-2.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-2.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-3.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-3.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-4.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-4.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-5.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/mini-gear-5.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/mini-gear-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/small-smoke-stack.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/small-smoke-stack.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/small-smoke-stack.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/small-smoke-stack.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/smoke-stack.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/smoke-stack.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/smoke-stack.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/smoke-stack.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-base.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-base.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-highlights.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-highlights.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-mask.png b/reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/assembling-machine/steam-smoke-stack-mask.png rename to reskins-bobs/graphics/icons/assembly/assembling-machine/steam-smoke-stack-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-base.png b/reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-base.png rename to reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-mask.png b/reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/centrifuge/centrifuge-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/centrifuge/centrifuge-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-base.png b/reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-base.png rename to reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-mask.png b/reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/distillery/distillery-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/distillery/distillery-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/electric-chemical-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-furnace/mini-electric-chemical-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/electric-chemical-mixing-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-chemical-mixing-furnace/mini-electric-chemical-mixing-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/electric-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/electric-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-furnace/mini-electric-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/electric-mixing-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electric-mixing-furnace/mini-electric-mixing-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-1-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-1-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-2-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-2-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-3-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-3-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-4-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-4-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/electrolyser-5-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/electrolyser-5-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-1-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-2-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-3-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-4-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-base.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-base.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-mask.png b/reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/electrolyser/mini-electrolyser-5-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/fluid-steel-chemical-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/fluid-steel-chemical-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/fluid-steel-chemical-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/fluid-steel-chemical-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/steel-chemical-furnace/steel-chemical-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/fluid-steel-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/steel-furnace/fluid-steel-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/fluid-steel-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/steel-furnace/fluid-steel-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/steel-furnace/steel-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/steel-furnace/steel-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/stone-chemical-furnace/stone-chemical-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-base.png b/reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-base.png rename to reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-highlights.png b/reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-highlights.png rename to reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-mask.png b/reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/assembly/stone-furnace/stone-furnace-icon-mask.png rename to reskins-bobs/graphics/icons/assembly/stone-furnace/stone-furnace-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-circuit/advanced-circuit-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/advanced-processing-unit/advanced-processing-unit-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/basic-circuit-board/basic-circuit-board-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/circuit-board/circuit-board-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/electronic-circuit/electronic-circuit-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/multi-layer-circuit-board/multi-layer-circuit-board-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/processing-unit/processing-unit-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-circuitry.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-circuitry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-circuitry.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-circuitry.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-base.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-base.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-highlights.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-highlights.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-mask.png b/reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-mask.png rename to reskins-bobs/graphics/icons/electronics/circuits-custom/superior-circuit-board/superior-circuit-board-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/advanced-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-name/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/advanced-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/advanced-processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-name/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/basic-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-name/basic-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/basic-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/basic-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-name/circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/electronic-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-name/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/electronic-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/multi-layer-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-name/multi-layer-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/multi-layer-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/multi-layer-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-name/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/superior-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-name/superior-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-name/superior-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-name/superior-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/advanced-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/advanced-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/advanced-processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/basic-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/basic-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/basic-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/basic-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/electronic-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/electronic-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/multi-layer-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/multi-layer-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/multi-layer-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/multi-layer-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/superior-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-progression/superior-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-progression/superior-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-progression/superior-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/advanced-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/advanced-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/advanced-processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/basic-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/basic-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/basic-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/basic-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/electronic-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/electronic-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/multi-layer-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/multi-layer-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/multi-layer-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/multi-layer-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/superior-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits-vanilla/superior-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits-vanilla/superior-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits-vanilla/superior-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/advanced-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/advanced-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/advanced-processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/basic-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits/basic-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/basic-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/basic-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits/circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/electronic-circuit.png b/reskins-bobs/graphics/icons/electronics/circuits/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/electronic-circuit.png rename to reskins-bobs/graphics/icons/electronics/circuits/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/fibreglass-board.png b/reskins-bobs/graphics/icons/electronics/circuits/fibreglass-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/fibreglass-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/fibreglass-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/multi-layer-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits/multi-layer-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/multi-layer-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/multi-layer-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/phenolic-board.png b/reskins-bobs/graphics/icons/electronics/circuits/phenolic-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/phenolic-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/phenolic-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/processing-unit.png b/reskins-bobs/graphics/icons/electronics/circuits/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/processing-unit.png rename to reskins-bobs/graphics/icons/electronics/circuits/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/superior-circuit-board.png b/reskins-bobs/graphics/icons/electronics/circuits/superior-circuit-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/superior-circuit-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/superior-circuit-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/circuits/wooden-board.png b/reskins-bobs/graphics/icons/electronics/circuits/wooden-board.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/circuits/wooden-board.png rename to reskins-bobs/graphics/icons/electronics/circuits/wooden-board.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/wires/insulated-cable.png b/reskins-bobs/graphics/icons/electronics/wires/insulated-cable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/wires/insulated-cable.png rename to reskins-bobs/graphics/icons/electronics/wires/insulated-cable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/electronics/wires/tinned-copper-cable.png b/reskins-bobs/graphics/icons/electronics/wires/tinned-copper-cable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/electronics/wires/tinned-copper-cable.png rename to reskins-bobs/graphics/icons/electronics/wires/tinned-copper-cable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-blue.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-blue.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-green.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-green.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-green.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-green.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-orange.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-orange.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-orange.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-orange.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-purple.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-purple.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-purple.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-purple.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-red.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-red.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-red.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-red.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-yellow.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-yellow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact-yellow.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact-yellow.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact.png b/reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/alien-artifact.png rename to reskins-bobs/graphics/icons/enemies/artifacts/alien-artifact.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-blue.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-blue.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-green.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-green.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-green.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-green.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-orange.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-orange.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-orange.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-orange.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-purple.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-purple.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-purple.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-purple.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-red.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-red.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-red.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-red.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-yellow.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-yellow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact-yellow.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact-yellow.png diff --git a/reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact.png b/reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/enemies/artifacts/small-alien-artifact.png rename to reskins-bobs/graphics/icons/enemies/artifacts/small-alien-artifact.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-base.png b/reskins-bobs/graphics/icons/equipment/battery/battery-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-base.png rename to reskins-bobs/graphics/icons/equipment/battery/battery-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/battery/battery-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/battery/battery-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-mask.png b/reskins-bobs/graphics/icons/equipment/battery/battery-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/battery/battery-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/battery/battery-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-base.png b/reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-base.png rename to reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-mask.png b/reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/energy-shield/energy-shield-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/energy-shield/energy-shield-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-base.png b/reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-base.png rename to reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-mask.png b/reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/exoskeleton/exoskeleton-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/exoskeleton/exoskeleton-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-base.png b/reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-base.png rename to reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-mask.png b/reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/fusion-reactor/fusion-reactor-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-base.png b/reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-base.png rename to reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-mask.png b/reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/laser-defense/laser-defense-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/laser-defense/laser-defense-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-base.png b/reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-base.png rename to reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-mask.png b/reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/night-vision/night-vision-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/night-vision/night-vision-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-1-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-1-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-2-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-2-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-3-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-3-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-4-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-4-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-icon-mask.png b/reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-antenna/part-antenna-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/part-antenna/part-antenna-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-1-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-1-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-2-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-2-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-3-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-3-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-4-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-4-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-icon-mask.png b/reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-chargepad/part-chargepad-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/part-chargepad/part-chargepad-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-base.png b/reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-base.png rename to reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-mask.png b/reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/part-robot/part-robot-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/part-robot/part-robot-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-base.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-base.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-mask.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-1-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-base.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-base.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-mask.png b/reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/personal-roboport/personal-roboport-2-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-base.png b/reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-base.png rename to reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-highlights.png b/reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-highlights.png rename to reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-mask.png b/reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/equipment/solar-panel/solar-panel-icon-mask.png rename to reskins-bobs/graphics/icons/equipment/solar-panel/solar-panel-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/greenhouse/greenhouse-icon-base.png b/reskins-bobs/graphics/icons/greenhouse/greenhouse/greenhouse-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/greenhouse/greenhouse-icon-base.png rename to reskins-bobs/graphics/icons/greenhouse/greenhouse/greenhouse-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/items/fertiliser.png b/reskins-bobs/graphics/icons/greenhouse/items/fertiliser.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/items/fertiliser.png rename to reskins-bobs/graphics/icons/greenhouse/items/fertiliser.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/items/seedling.png b/reskins-bobs/graphics/icons/greenhouse/items/seedling.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/items/seedling.png rename to reskins-bobs/graphics/icons/greenhouse/items/seedling.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/items/wood-pellets.png b/reskins-bobs/graphics/icons/greenhouse/items/wood-pellets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/items/wood-pellets.png rename to reskins-bobs/graphics/icons/greenhouse/items/wood-pellets.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/recipes/bob-advanced-greenhouse-cycle.png b/reskins-bobs/graphics/icons/greenhouse/recipes/bob-advanced-greenhouse-cycle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/recipes/bob-advanced-greenhouse-cycle.png rename to reskins-bobs/graphics/icons/greenhouse/recipes/bob-advanced-greenhouse-cycle.png diff --git a/reskins-bobs_2.1.5/graphics/icons/greenhouse/recipes/bob-basic-greenhouse-cycle.png b/reskins-bobs/graphics/icons/greenhouse/recipes/bob-basic-greenhouse-cycle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/greenhouse/recipes/bob-basic-greenhouse-cycle.png rename to reskins-bobs/graphics/icons/greenhouse/recipes/bob-basic-greenhouse-cycle.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/atomic-artillery-shell-light.png b/reskins-bobs/graphics/icons/lights/atomic-artillery-shell-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/atomic-artillery-shell-light.png rename to reskins-bobs/graphics/icons/lights/atomic-artillery-shell-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/aura-bullet-light.png b/reskins-bobs/graphics/icons/lights/aura-bullet-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/aura-bullet-light.png rename to reskins-bobs/graphics/icons/lights/aura-bullet-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/aura-projectile-light.png b/reskins-bobs/graphics/icons/lights/aura-projectile-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/aura-projectile-light.png rename to reskins-bobs/graphics/icons/lights/aura-projectile-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/aura-rocket-light.png b/reskins-bobs/graphics/icons/lights/aura-rocket-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/aura-rocket-light.png rename to reskins-bobs/graphics/icons/lights/aura-rocket-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/aura-shotgun-shell-light.png b/reskins-bobs/graphics/icons/lights/aura-shotgun-shell-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/aura-shotgun-shell-light.png rename to reskins-bobs/graphics/icons/lights/aura-shotgun-shell-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/aura-warhead-light.png b/reskins-bobs/graphics/icons/lights/aura-warhead-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/aura-warhead-light.png rename to reskins-bobs/graphics/icons/lights/aura-warhead-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/electric-bullet-light.png b/reskins-bobs/graphics/icons/lights/electric-bullet-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/electric-bullet-light.png rename to reskins-bobs/graphics/icons/lights/electric-bullet-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/electric-projectile-light.png b/reskins-bobs/graphics/icons/lights/electric-projectile-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/electric-projectile-light.png rename to reskins-bobs/graphics/icons/lights/electric-projectile-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/electric-rocket-light.png b/reskins-bobs/graphics/icons/lights/electric-rocket-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/electric-rocket-light.png rename to reskins-bobs/graphics/icons/lights/electric-rocket-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/electric-shotgun-shell-light.png b/reskins-bobs/graphics/icons/lights/electric-shotgun-shell-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/electric-shotgun-shell-light.png rename to reskins-bobs/graphics/icons/lights/electric-shotgun-shell-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/electric-warhead-light.png b/reskins-bobs/graphics/icons/lights/electric-warhead-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/electric-warhead-light.png rename to reskins-bobs/graphics/icons/lights/electric-warhead-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/laser-rifle-battery-light.png b/reskins-bobs/graphics/icons/lights/laser-rifle-battery-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/laser-rifle-battery-light.png rename to reskins-bobs/graphics/icons/lights/laser-rifle-battery-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/rocket-light.png b/reskins-bobs/graphics/icons/lights/rocket-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/rocket-light.png rename to reskins-bobs/graphics/icons/lights/rocket-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/lights/rounds-magazine-light.png b/reskins-bobs/graphics/icons/lights/rounds-magazine-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/lights/rounds-magazine-light.png rename to reskins-bobs/graphics/icons/lights/rounds-magazine-light.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-base.png b/reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-base.png rename to reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-mask.png b/reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/cargo-wagon/cargo-wagon-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-base.png b/reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-base.png rename to reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-mask.png b/reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/construction-robot/construction-robot-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/construction-robot/construction-robot-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/filter-flipped-stack-inserter/filter-flipped-stack-inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-inserter/filter-inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/filter-inserter/filter-inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/filter-stack-inserter/filter-stack-inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/flipped-stack-inserter/flipped-stack-inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-base.png b/reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-base.png rename to reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-mask.png b/reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/fluid-wagon/fluid-wagon-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-base.png b/reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-base.png rename to reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-mask.png b/reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/flying-robot-frame/flying-robot-frame-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/filter.png b/reskins-bobs/graphics/icons/logistics/inserter/filter.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/filter.png rename to reskins-bobs/graphics/icons/logistics/inserter/filter.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/inserter/inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/stack-inserter-technology-effect-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/stack-inserter-technology-effect-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/stack-inserter-technology-effect-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/stack-inserter-technology-effect-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/burner-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/burner-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/burner-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/burner-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-filter-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/express-filter-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-filter-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/express-filter-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/express-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/express-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-stack-filter-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/express-stack-filter-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-stack-filter-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/express-stack-filter-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-stack-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/express-stack-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/express-stack-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/express-stack-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/fast-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/fast-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/fast-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/fast-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/filter-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/filter-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/filter-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/filter-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/long-handed-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/long-handed-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/long-handed-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/long-handed-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/stack-filter-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/stack-filter-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/stack-filter-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/stack-filter-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/stack-inserter-icon.png b/reskins-bobs/graphics/icons/logistics/inserter/standard/stack-inserter-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/inserter/standard/stack-inserter-icon.png rename to reskins-bobs/graphics/icons/logistics/inserter/standard/stack-inserter-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/armored-train-symbol.png b/reskins-bobs/graphics/icons/logistics/locomotive/armored-train-symbol.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/armored-train-symbol.png rename to reskins-bobs/graphics/icons/logistics/locomotive/armored-train-symbol.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-base.png b/reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-base.png rename to reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-mask.png b/reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/locomotive/locomotive-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/locomotive/locomotive-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/active-provider-chest-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/active-provider-chest-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/active-provider-chest-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/active-provider-chest-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/brass-logistic-chest-icon-mask.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/brass-logistic-chest-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/brass-logistic-chest-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/brass-logistic-chest-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/buffer-chest-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/buffer-chest-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/buffer-chest-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/buffer-chest-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/passive-provider-chest-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/passive-provider-chest-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/passive-provider-chest-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/passive-provider-chest-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/requester-chest-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/requester-chest-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/requester-chest-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/requester-chest-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/storage-chest-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/storage-chest-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/storage-chest-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/storage-chest-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/titanium-logistic-chest-icon-mask.png b/reskins-bobs/graphics/icons/logistics/logistic-chest/titanium-logistic-chest-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-chest/titanium-logistic-chest-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/logistic-chest/titanium-logistic-chest-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-base.png b/reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-base.png rename to reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-mask.png b/reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/logistic-robot/logistic-robot-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/logistic-robot/logistic-robot-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/brass-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/brass-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/brass-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/brass-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/bronze-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/bronze-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/bronze-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/bronze-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/ceramic-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/ceramic-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/ceramic-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/ceramic-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/copper-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/copper-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/copper-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/copper-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/copper-tungsten-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/copper-tungsten-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/copper-tungsten-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/copper-tungsten-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/nitinol-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/nitinol-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/nitinol-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/nitinol-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/plastic-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/plastic-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/plastic-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/plastic-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/steel-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/steel-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/steel-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/steel-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/stone-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/stone-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/stone-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/stone-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/titanium-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/titanium-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/titanium-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/titanium-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/tungsten-pipe-to-ground-icon.png b/reskins-bobs/graphics/icons/logistics/pipe-to-ground/tungsten-pipe-to-ground-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe-to-ground/tungsten-pipe-to-ground-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe-to-ground/tungsten-pipe-to-ground-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/brass-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/brass-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/brass-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/brass-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/bronze-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/bronze-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/bronze-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/bronze-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/ceramic-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/ceramic-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/ceramic-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/ceramic-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/copper-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/copper-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/copper-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/copper-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/copper-tungsten-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/copper-tungsten-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/copper-tungsten-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/copper-tungsten-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/nitinol-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/nitinol-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/nitinol-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/nitinol-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/plastic-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/plastic-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/plastic-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/plastic-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/steel-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/steel-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/steel-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/steel-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/stone-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/stone-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/stone-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/stone-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/titanium-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/titanium-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/titanium-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/titanium-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pipe/tungsten-pipe-icon.png b/reskins-bobs/graphics/icons/logistics/pipe/tungsten-pipe-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pipe/tungsten-pipe-icon.png rename to reskins-bobs/graphics/icons/logistics/pipe/tungsten-pipe-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-base.png b/reskins-bobs/graphics/icons/logistics/pump/pump-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-base.png rename to reskins-bobs/graphics/icons/logistics/pump/pump-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/pump/pump-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/pump/pump-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-mask.png b/reskins-bobs/graphics/icons/logistics/pump/pump-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/pump/pump-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/pump/pump-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-base.png b/reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-base.png rename to reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-mask.png b/reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/repair-pack/repair-pack-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/repair-pack/repair-pack-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-mask.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/large-robo-charge-port-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-mask.png b/reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/robo-charge-port/robo-charge-port-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-icon-mask.png b/reskins-bobs/graphics/icons/logistics/robochest/robochest-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robochest/robochest-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/robochest/robochest-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-1.png b/reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-1.png rename to reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-2.png b/reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-2.png rename to reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-3.png b/reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-3.png rename to reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-4.png b/reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-antenna/roboport-antenna-4.png rename to reskins-bobs/graphics/icons/logistics/roboport-antenna/roboport-antenna-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-mask.png b/reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/roboport-chargepad/roboport-chargepad-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-1.png b/reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-1.png rename to reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-2.png b/reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-2.png rename to reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-3.png b/reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-3.png rename to reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-4.png b/reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport-door/roboport-door-4.png rename to reskins-bobs/graphics/icons/logistics/roboport-door/roboport-door-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-icon-mask.png b/reskins-bobs/graphics/icons/logistics/roboport/roboport-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/roboport/roboport-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/roboport/roboport-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-base.png b/reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-mask.png b/reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-construction/robot-tool-construction-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-base.png b/reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-base.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-mask.png b/reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/robot-tool-logistic/robot-tool-logistic-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-base.png b/reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-base.png rename to reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-mask.png b/reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/stack-inserter/stack-inserter-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/stack-inserter/stack-inserter-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-base.png b/reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-base.png rename to reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-mask.png b/reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/storage-tank-all-corners/storage-tank-all-corners-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-base.png b/reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-base.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-mask.png b/reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/mini-storage-tank-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-base.png b/reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-base.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-mask.png b/reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/storage-tank/storage-tank-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/storage-tank/storage-tank-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/valve/valve-icon-base.png b/reskins-bobs/graphics/icons/logistics/valve/valve-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/valve/valve-icon-base.png rename to reskins-bobs/graphics/icons/logistics/valve/valve-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/valve/valve-icon-mask.png b/reskins-bobs/graphics/icons/logistics/valve/valve-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/valve/valve-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/valve/valve-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-icon-mask.png b/reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/old/zone-expander-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/old/zone-expander-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-1-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-1-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-2-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-2-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-3-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-3-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-4-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-4-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-icon-highlights.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-icon-highlights.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-icon-mask.png b/reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-expander/zone-expander-icon-mask.png rename to reskins-bobs/graphics/icons/logistics/zone-expander/zone-expander-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/logistics/zone-interface/zone-interface-icon-base.png b/reskins-bobs/graphics/icons/logistics/zone-interface/zone-interface-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/logistics/zone-interface/zone-interface-icon-base.png rename to reskins-bobs/graphics/icons/logistics/zone-interface/zone-interface-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/area-drill-symbol.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/area-drill-symbol.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/area-drill-symbol.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/area-drill-symbol.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-base.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-base.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-highlights.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-highlights.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-mask.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-mask.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/electric-mining-drill-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/large-area-electric-mining-drill-icon-base.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/large-area-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/large-area-electric-mining-drill-icon-base.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/large-area-electric-mining-drill-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-base.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-base.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-mask.png b/reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-mask.png rename to reskins-bobs/graphics/icons/mining/electric-mining-drill/mini-electric-mining-drill-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-base.png b/reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-base.png rename to reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-highlights.png b/reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-highlights.png rename to reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-mask.png b/reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/pumpjack-icon-mask.png rename to reskins-bobs/graphics/icons/mining/pumpjack/pumpjack-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/water-pumpjack-icon-base.png b/reskins-bobs/graphics/icons/mining/pumpjack/water-pumpjack-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/mining/pumpjack/water-pumpjack-icon-base.png rename to reskins-bobs/graphics/icons/mining/pumpjack/water-pumpjack-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-base.png b/reskins-bobs/graphics/icons/modules/beacon/beacon-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-base.png rename to reskins-bobs/graphics/icons/modules/beacon/beacon-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-highlights.png b/reskins-bobs/graphics/icons/modules/beacon/beacon-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-highlights.png rename to reskins-bobs/graphics/icons/modules/beacon/beacon-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-mask.png b/reskins-bobs/graphics/icons/modules/beacon/beacon-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/beacon-icon-mask.png rename to reskins-bobs/graphics/icons/modules/beacon/beacon-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-base.png b/reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-base.png rename to reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-highlights.png b/reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-highlights.png rename to reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-mask.png b/reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/beacon/mini-beacon-icon-mask.png rename to reskins-bobs/graphics/icons/modules/beacon/mini-beacon-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-1.png b/reskins-bobs/graphics/icons/modules/god-module/god-module-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-1.png rename to reskins-bobs/graphics/icons/modules/god-module/god-module-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-2.png b/reskins-bobs/graphics/icons/modules/god-module/god-module-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-2.png rename to reskins-bobs/graphics/icons/modules/god-module/god-module-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-3.png b/reskins-bobs/graphics/icons/modules/god-module/god-module-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-3.png rename to reskins-bobs/graphics/icons/modules/god-module/god-module-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-4.png b/reskins-bobs/graphics/icons/modules/god-module/god-module-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-4.png rename to reskins-bobs/graphics/icons/modules/god-module/god-module-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-5.png b/reskins-bobs/graphics/icons/modules/god-module/god-module-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/god-module/god-module-5.png rename to reskins-bobs/graphics/icons/modules/god-module/god-module-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_1.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_1.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_2.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_2.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_3.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_3.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_4.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_4.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_5.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_5.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_6.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_6.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_7.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_7.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_8.png b/reskins-bobs/graphics/icons/modules/module/blue/blue_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/blue/blue_8.png rename to reskins-bobs/graphics/icons/modules/module/blue/blue_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_1.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_1.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_2.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_2.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_3.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_3.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_4.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_4.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_5.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_5.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_6.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_6.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_7.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_7.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_8.png b/reskins-bobs/graphics/icons/modules/module/brown/brown_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/brown/brown_8.png rename to reskins-bobs/graphics/icons/modules/module/brown/brown_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_1.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_1.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_2.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_2.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_3.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_3.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_4.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_4.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_5.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_5.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_6.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_6.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_7.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_7.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_8.png b/reskins-bobs/graphics/icons/modules/module/cyan/cyan_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/cyan/cyan_8.png rename to reskins-bobs/graphics/icons/modules/module/cyan/cyan_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_1.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_1.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_2.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_2.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_3.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_3.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_4.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_4.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_5.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_5.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_6.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_6.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_7.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_7.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_8.png b/reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/deep-red/deep-red_8.png rename to reskins-bobs/graphics/icons/modules/module/deep-red/deep-red_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_1.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_1.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_2.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_2.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_3.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_3.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_4.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_4.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_5.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_5.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_6.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_6.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_7.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_7.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_8.png b/reskins-bobs/graphics/icons/modules/module/gray/gray_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/gray/gray_8.png rename to reskins-bobs/graphics/icons/modules/module/gray/gray_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_1.png b/reskins-bobs/graphics/icons/modules/module/green/green_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_1.png rename to reskins-bobs/graphics/icons/modules/module/green/green_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_2.png b/reskins-bobs/graphics/icons/modules/module/green/green_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_2.png rename to reskins-bobs/graphics/icons/modules/module/green/green_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_3.png b/reskins-bobs/graphics/icons/modules/module/green/green_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_3.png rename to reskins-bobs/graphics/icons/modules/module/green/green_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_4.png b/reskins-bobs/graphics/icons/modules/module/green/green_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_4.png rename to reskins-bobs/graphics/icons/modules/module/green/green_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_5.png b/reskins-bobs/graphics/icons/modules/module/green/green_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_5.png rename to reskins-bobs/graphics/icons/modules/module/green/green_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_6.png b/reskins-bobs/graphics/icons/modules/module/green/green_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_6.png rename to reskins-bobs/graphics/icons/modules/module/green/green_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_7.png b/reskins-bobs/graphics/icons/modules/module/green/green_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_7.png rename to reskins-bobs/graphics/icons/modules/module/green/green_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_8.png b/reskins-bobs/graphics/icons/modules/module/green/green_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/green/green_8.png rename to reskins-bobs/graphics/icons/modules/module/green/green_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_1.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_1.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_2.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_2.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_3.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_3.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_4.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_4.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_5.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_5.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_6.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_6.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_7.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_7.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_8.png b/reskins-bobs/graphics/icons/modules/module/orange/orange_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/orange/orange_8.png rename to reskins-bobs/graphics/icons/modules/module/orange/orange_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_1.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_1.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_2.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_2.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_3.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_3.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_4.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_4.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_5.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_5.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_6.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_6.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_7.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_7.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_8.png b/reskins-bobs/graphics/icons/modules/module/pine/pine_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pine/pine_8.png rename to reskins-bobs/graphics/icons/modules/module/pine/pine_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_1.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_1.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_2.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_2.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_3.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_3.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_4.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_4.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_5.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_5.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_6.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_6.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_7.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_7.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_8.png b/reskins-bobs/graphics/icons/modules/module/pink/pink_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/pink/pink_8.png rename to reskins-bobs/graphics/icons/modules/module/pink/pink_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_1.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_1.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_2.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_2.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_3.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_3.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_4.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_4.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_5.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_5.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_6.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_6.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_7.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_7.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_8.png b/reskins-bobs/graphics/icons/modules/module/purple/purple_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/purple/purple_8.png rename to reskins-bobs/graphics/icons/modules/module/purple/purple_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_1.png b/reskins-bobs/graphics/icons/modules/module/red/red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_1.png rename to reskins-bobs/graphics/icons/modules/module/red/red_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_2.png b/reskins-bobs/graphics/icons/modules/module/red/red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_2.png rename to reskins-bobs/graphics/icons/modules/module/red/red_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_3.png b/reskins-bobs/graphics/icons/modules/module/red/red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_3.png rename to reskins-bobs/graphics/icons/modules/module/red/red_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_4.png b/reskins-bobs/graphics/icons/modules/module/red/red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_4.png rename to reskins-bobs/graphics/icons/modules/module/red/red_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_5.png b/reskins-bobs/graphics/icons/modules/module/red/red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_5.png rename to reskins-bobs/graphics/icons/modules/module/red/red_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_6.png b/reskins-bobs/graphics/icons/modules/module/red/red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_6.png rename to reskins-bobs/graphics/icons/modules/module/red/red_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_7.png b/reskins-bobs/graphics/icons/modules/module/red/red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_7.png rename to reskins-bobs/graphics/icons/modules/module/red/red_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_8.png b/reskins-bobs/graphics/icons/modules/module/red/red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/red/red_8.png rename to reskins-bobs/graphics/icons/modules/module/red/red_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_1.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_1.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_2.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_2.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_3.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_3.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_4.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_4.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_5.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_5.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_6.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_6.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_7.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_7.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_8.png b/reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/vanilla-red/vanilla-red_8.png rename to reskins-bobs/graphics/icons/modules/module/vanilla-red/vanilla-red_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_1.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_1.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_2.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_2.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_3.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_3.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_4.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_4.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_5.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_5.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_6.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_6.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_6.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_7.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_7.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_7.png diff --git a/reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_8.png b/reskins-bobs/graphics/icons/modules/module/yellow/yellow_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/modules/module/yellow/yellow_8.png rename to reskins-bobs/graphics/icons/modules/module/yellow/yellow_8.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/ground-water/ground-water.png b/reskins-bobs/graphics/icons/ores/ores/ground-water/ground-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/ground-water/ground-water.png rename to reskins-bobs/graphics/icons/ores/ores/ground-water/ground-water.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/lithia-water/lithia-water.png b/reskins-bobs/graphics/icons/ores/ores/lithia-water/lithia-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/lithia-water/lithia-water.png rename to reskins-bobs/graphics/icons/ores/ores/lithia-water/lithia-water.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-1.png b/reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-1.png rename to reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-2.png b/reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-2.png rename to reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-3.png b/reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore-3.png rename to reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore.png b/reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/rutile-ore/rutile-ore.png rename to reskins-bobs/graphics/icons/ores/ores/rutile-ore/rutile-ore.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-1.png b/reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-1.png rename to reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-2.png b/reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-2.png rename to reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-3.png b/reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore-3.png rename to reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore.png b/reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/ores/ores/thorium-ore/thorium-ore.png rename to reskins-bobs/graphics/icons/ores/ores/thorium-ore/thorium-ore.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-base.png b/reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-base.png rename to reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-highlights.png b/reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-highlights.png rename to reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-mask.png b/reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/air-pump/air-pump-icon-mask.png rename to reskins-bobs/graphics/icons/plates/air-pump/air-pump-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-base.png b/reskins-bobs/graphics/icons/plates/battery/battery-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-base.png rename to reskins-bobs/graphics/icons/plates/battery/battery-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-highlights.png b/reskins-bobs/graphics/icons/plates/battery/battery-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-highlights.png rename to reskins-bobs/graphics/icons/plates/battery/battery-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-mask.png b/reskins-bobs/graphics/icons/plates/battery/battery-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/battery/battery-icon-mask.png rename to reskins-bobs/graphics/icons/plates/battery/battery-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/ceramic-bearing-ball.png b/reskins-bobs/graphics/icons/plates/bearing-balls/ceramic-bearing-ball.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/ceramic-bearing-ball.png rename to reskins-bobs/graphics/icons/plates/bearing-balls/ceramic-bearing-ball.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/cobalt-steel-bearing-ball.png b/reskins-bobs/graphics/icons/plates/bearing-balls/cobalt-steel-bearing-ball.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/cobalt-steel-bearing-ball.png rename to reskins-bobs/graphics/icons/plates/bearing-balls/cobalt-steel-bearing-ball.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/nitinol-bearing-ball.png b/reskins-bobs/graphics/icons/plates/bearing-balls/nitinol-bearing-ball.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/nitinol-bearing-ball.png rename to reskins-bobs/graphics/icons/plates/bearing-balls/nitinol-bearing-ball.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/steel-bearing-ball.png b/reskins-bobs/graphics/icons/plates/bearing-balls/steel-bearing-ball.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/steel-bearing-ball.png rename to reskins-bobs/graphics/icons/plates/bearing-balls/steel-bearing-ball.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/titanium-bearing-ball.png b/reskins-bobs/graphics/icons/plates/bearing-balls/titanium-bearing-ball.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearing-balls/titanium-bearing-ball.png rename to reskins-bobs/graphics/icons/plates/bearing-balls/titanium-bearing-ball.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearings/ceramic-bearing.png b/reskins-bobs/graphics/icons/plates/bearings/ceramic-bearing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearings/ceramic-bearing.png rename to reskins-bobs/graphics/icons/plates/bearings/ceramic-bearing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearings/cobalt-steel-bearing.png b/reskins-bobs/graphics/icons/plates/bearings/cobalt-steel-bearing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearings/cobalt-steel-bearing.png rename to reskins-bobs/graphics/icons/plates/bearings/cobalt-steel-bearing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearings/nitinol-bearing.png b/reskins-bobs/graphics/icons/plates/bearings/nitinol-bearing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearings/nitinol-bearing.png rename to reskins-bobs/graphics/icons/plates/bearings/nitinol-bearing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearings/steel-bearing.png b/reskins-bobs/graphics/icons/plates/bearings/steel-bearing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearings/steel-bearing.png rename to reskins-bobs/graphics/icons/plates/bearings/steel-bearing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/bearings/titanium-bearing.png b/reskins-bobs/graphics/icons/plates/bearings/titanium-bearing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/bearings/titanium-bearing.png rename to reskins-bobs/graphics/icons/plates/bearings/titanium-bearing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-acid.png b/reskins-bobs/graphics/icons/plates/fluids/alien-acid.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-acid.png rename to reskins-bobs/graphics/icons/plates/fluids/alien-acid.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-explosive.png b/reskins-bobs/graphics/icons/plates/fluids/alien-explosive.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-explosive.png rename to reskins-bobs/graphics/icons/plates/fluids/alien-explosive.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-fire.png b/reskins-bobs/graphics/icons/plates/fluids/alien-fire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-fire.png rename to reskins-bobs/graphics/icons/plates/fluids/alien-fire.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-poison.png b/reskins-bobs/graphics/icons/plates/fluids/alien-poison.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/alien-poison.png rename to reskins-bobs/graphics/icons/plates/fluids/alien-poison.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/ferric-chloride-solution.png b/reskins-bobs/graphics/icons/plates/fluids/ferric-chloride-solution.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/ferric-chloride-solution.png rename to reskins-bobs/graphics/icons/plates/fluids/ferric-chloride-solution.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/liquid-air.png b/reskins-bobs/graphics/icons/plates/fluids/liquid-air.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/liquid-air.png rename to reskins-bobs/graphics/icons/plates/fluids/liquid-air.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/liquid-fuel.png b/reskins-bobs/graphics/icons/plates/fluids/liquid-fuel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/liquid-fuel.png rename to reskins-bobs/graphics/icons/plates/fluids/liquid-fuel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/fluids/lithia-water.png b/reskins-bobs/graphics/icons/plates/fluids/lithia-water.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/fluids/lithia-water.png rename to reskins-bobs/graphics/icons/plates/fluids/lithia-water.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/brass-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/brass-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/brass-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/brass-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/cobalt-steel-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/cobalt-steel-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/cobalt-steel-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/cobalt-steel-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/nitinol-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/nitinol-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/nitinol-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/nitinol-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/steel-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/steel-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/steel-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/steel-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/titanium-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/titanium-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/titanium-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/titanium-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gears/tungsten-gear-wheel.png b/reskins-bobs/graphics/icons/plates/gears/tungsten-gear-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gears/tungsten-gear-wheel.png rename to reskins-bobs/graphics/icons/plates/gears/tungsten-gear-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/amethyst-5.png b/reskins-bobs/graphics/icons/plates/gems/amethyst-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/amethyst-5.png rename to reskins-bobs/graphics/icons/plates/gems/amethyst-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/diamond-5.png b/reskins-bobs/graphics/icons/plates/gems/diamond-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/diamond-5.png rename to reskins-bobs/graphics/icons/plates/gems/diamond-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/emerald-5.png b/reskins-bobs/graphics/icons/plates/gems/emerald-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/emerald-5.png rename to reskins-bobs/graphics/icons/plates/gems/emerald-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/ruby-5.png b/reskins-bobs/graphics/icons/plates/gems/ruby-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/ruby-5.png rename to reskins-bobs/graphics/icons/plates/gems/ruby-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/sapphire-5.png b/reskins-bobs/graphics/icons/plates/gems/sapphire-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/sapphire-5.png rename to reskins-bobs/graphics/icons/plates/gems/sapphire-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/gems/topaz-5.png b/reskins-bobs/graphics/icons/plates/gems/topaz-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/gems/topaz-5.png rename to reskins-bobs/graphics/icons/plates/gems/topaz-5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/advanced-processing-unit.png b/reskins-bobs/graphics/icons/plates/items/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/plates/items/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/carbon.png b/reskins-bobs/graphics/icons/plates/items/carbon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/carbon.png rename to reskins-bobs/graphics/icons/plates/items/carbon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/enriched-fuel.png b/reskins-bobs/graphics/icons/plates/items/enriched-fuel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/enriched-fuel.png rename to reskins-bobs/graphics/icons/plates/items/enriched-fuel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/grinding-wheel.png b/reskins-bobs/graphics/icons/plates/items/grinding-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/grinding-wheel.png rename to reskins-bobs/graphics/icons/plates/items/grinding-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/polishing-compound.png b/reskins-bobs/graphics/icons/plates/items/polishing-compound.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/polishing-compound.png rename to reskins-bobs/graphics/icons/plates/items/polishing-compound.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/polishing-wheel.png b/reskins-bobs/graphics/icons/plates/items/polishing-wheel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/polishing-wheel.png rename to reskins-bobs/graphics/icons/plates/items/polishing-wheel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/resin.png b/reskins-bobs/graphics/icons/plates/items/resin.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/resin.png rename to reskins-bobs/graphics/icons/plates/items/resin.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/items/silicon.png b/reskins-bobs/graphics/icons/plates/items/silicon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/items/silicon.png rename to reskins-bobs/graphics/icons/plates/items/silicon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-blue.png b/reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-blue.png rename to reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-pink.png b/reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-pink.png rename to reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-2-pink.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-blue.png b/reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-blue.png rename to reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-pink.png b/reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/deuterium-fuel-cell-pink.png rename to reskins-bobs/graphics/icons/plates/nuclear/deuterium-fuel-cell-pink.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/plutonium-239.png b/reskins-bobs/graphics/icons/plates/nuclear/plutonium-239.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/plutonium-239.png rename to reskins-bobs/graphics/icons/plates/nuclear/plutonium-239.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/plutonium-fuel-cell.png b/reskins-bobs/graphics/icons/plates/nuclear/plutonium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/plutonium-fuel-cell.png rename to reskins-bobs/graphics/icons/plates/nuclear/plutonium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-232.png b/reskins-bobs/graphics/icons/plates/nuclear/thorium-232.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-232.png rename to reskins-bobs/graphics/icons/plates/nuclear/thorium-232.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-fuel-cell.png b/reskins-bobs/graphics/icons/plates/nuclear/thorium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-fuel-cell.png rename to reskins-bobs/graphics/icons/plates/nuclear/thorium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-plutonium-fuel-cell.png b/reskins-bobs/graphics/icons/plates/nuclear/thorium-plutonium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/thorium-plutonium-fuel-cell.png rename to reskins-bobs/graphics/icons/plates/nuclear/thorium-plutonium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-blue.png b/reskins-bobs/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-blue.png rename to reskins-bobs/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-pink.png b/reskins-bobs/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-pink.png rename to reskins-bobs/graphics/icons/plates/nuclear/used-up-deuterium-fuel-cell-pink.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-thorium-fuel-cell.png b/reskins-bobs/graphics/icons/plates/nuclear/used-up-thorium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/nuclear/used-up-thorium-fuel-cell.png rename to reskins-bobs/graphics/icons/plates/nuclear/used-up-thorium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/alien-blue-alloy.png b/reskins-bobs/graphics/icons/plates/plates/alien-blue-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/alien-blue-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/alien-blue-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/alien-orange-alloy.png b/reskins-bobs/graphics/icons/plates/plates/alien-orange-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/alien-orange-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/alien-orange-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/aluminium-plate.png b/reskins-bobs/graphics/icons/plates/plates/aluminium-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/aluminium-plate.png rename to reskins-bobs/graphics/icons/plates/plates/aluminium-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/brass-alloy.png b/reskins-bobs/graphics/icons/plates/plates/brass-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/brass-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/brass-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/bronze-alloy.png b/reskins-bobs/graphics/icons/plates/plates/bronze-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/bronze-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/bronze-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/cobalt-plate.png b/reskins-bobs/graphics/icons/plates/plates/cobalt-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/cobalt-plate.png rename to reskins-bobs/graphics/icons/plates/plates/cobalt-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/cobalt-steel-alloy.png b/reskins-bobs/graphics/icons/plates/plates/cobalt-steel-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/cobalt-steel-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/cobalt-steel-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/copper-tungsten-alloy.png b/reskins-bobs/graphics/icons/plates/plates/copper-tungsten-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/copper-tungsten-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/copper-tungsten-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/gunmetal-alloy.png b/reskins-bobs/graphics/icons/plates/plates/gunmetal-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/gunmetal-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/gunmetal-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/invar-alloy.png b/reskins-bobs/graphics/icons/plates/plates/invar-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/invar-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/invar-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/lead-plate.png b/reskins-bobs/graphics/icons/plates/plates/lead-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/lead-plate.png rename to reskins-bobs/graphics/icons/plates/plates/lead-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/lithium.png b/reskins-bobs/graphics/icons/plates/plates/lithium.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/lithium.png rename to reskins-bobs/graphics/icons/plates/plates/lithium.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/nickel-plate.png b/reskins-bobs/graphics/icons/plates/plates/nickel-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/nickel-plate.png rename to reskins-bobs/graphics/icons/plates/plates/nickel-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/nitinol-alloy.png b/reskins-bobs/graphics/icons/plates/plates/nitinol-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/nitinol-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/nitinol-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/silver-plate.png b/reskins-bobs/graphics/icons/plates/plates/silver-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/silver-plate.png rename to reskins-bobs/graphics/icons/plates/plates/silver-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/solder-alloy.png b/reskins-bobs/graphics/icons/plates/plates/solder-alloy.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/solder-alloy.png rename to reskins-bobs/graphics/icons/plates/plates/solder-alloy.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/tin-plate.png b/reskins-bobs/graphics/icons/plates/plates/tin-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/tin-plate.png rename to reskins-bobs/graphics/icons/plates/plates/tin-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/titanium-plate.png b/reskins-bobs/graphics/icons/plates/plates/titanium-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/titanium-plate.png rename to reskins-bobs/graphics/icons/plates/plates/titanium-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/tungsten-carbide.png b/reskins-bobs/graphics/icons/plates/plates/tungsten-carbide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/tungsten-carbide.png rename to reskins-bobs/graphics/icons/plates/plates/tungsten-carbide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/tungsten-plate.png b/reskins-bobs/graphics/icons/plates/plates/tungsten-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/tungsten-plate.png rename to reskins-bobs/graphics/icons/plates/plates/tungsten-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/plates/zinc-plate.png b/reskins-bobs/graphics/icons/plates/plates/zinc-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/plates/zinc-plate.png rename to reskins-bobs/graphics/icons/plates/plates/zinc-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/alumina.png b/reskins-bobs/graphics/icons/plates/powders/alumina.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/alumina.png rename to reskins-bobs/graphics/icons/plates/powders/alumina.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/calcium-chloride.png b/reskins-bobs/graphics/icons/plates/powders/calcium-chloride.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/calcium-chloride.png rename to reskins-bobs/graphics/icons/plates/powders/calcium-chloride.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/cobalt-oxide.png b/reskins-bobs/graphics/icons/plates/powders/cobalt-oxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/cobalt-oxide.png rename to reskins-bobs/graphics/icons/plates/powders/cobalt-oxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/lead-oxide.png b/reskins-bobs/graphics/icons/plates/powders/lead-oxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/lead-oxide.png rename to reskins-bobs/graphics/icons/plates/powders/lead-oxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-chloride.png b/reskins-bobs/graphics/icons/plates/powders/lithium-chloride.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-chloride.png rename to reskins-bobs/graphics/icons/plates/powders/lithium-chloride.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-cobalt-oxide.png b/reskins-bobs/graphics/icons/plates/powders/lithium-cobalt-oxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-cobalt-oxide.png rename to reskins-bobs/graphics/icons/plates/powders/lithium-cobalt-oxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-perchlorate.png b/reskins-bobs/graphics/icons/plates/powders/lithium-perchlorate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/lithium-perchlorate.png rename to reskins-bobs/graphics/icons/plates/powders/lithium-perchlorate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/powdered-tungsten.png b/reskins-bobs/graphics/icons/plates/powders/powdered-tungsten.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/powdered-tungsten.png rename to reskins-bobs/graphics/icons/plates/powders/powdered-tungsten.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/salt.png b/reskins-bobs/graphics/icons/plates/powders/salt.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/salt.png rename to reskins-bobs/graphics/icons/plates/powders/salt.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-carbide.png b/reskins-bobs/graphics/icons/plates/powders/silicon-carbide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-carbide.png rename to reskins-bobs/graphics/icons/plates/powders/silicon-carbide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-nitride.png b/reskins-bobs/graphics/icons/plates/powders/silicon-nitride.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-nitride.png rename to reskins-bobs/graphics/icons/plates/powders/silicon-nitride.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-powder.png b/reskins-bobs/graphics/icons/plates/powders/silicon-powder.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/silicon-powder.png rename to reskins-bobs/graphics/icons/plates/powders/silicon-powder.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/silver-nitrate.png b/reskins-bobs/graphics/icons/plates/powders/silver-nitrate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/silver-nitrate.png rename to reskins-bobs/graphics/icons/plates/powders/silver-nitrate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/silver-oxide.png b/reskins-bobs/graphics/icons/plates/powders/silver-oxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/silver-oxide.png rename to reskins-bobs/graphics/icons/plates/powders/silver-oxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/sodium-hydroxide.png b/reskins-bobs/graphics/icons/plates/powders/sodium-hydroxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/sodium-hydroxide.png rename to reskins-bobs/graphics/icons/plates/powders/sodium-hydroxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/powders/tungsten-oxide.png b/reskins-bobs/graphics/icons/plates/powders/tungsten-oxide.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/powders/tungsten-oxide.png rename to reskins-bobs/graphics/icons/plates/powders/tungsten-oxide.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/bob-resin-oil.png b/reskins-bobs/graphics/icons/plates/recipes/bob-resin-oil.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/bob-resin-oil.png rename to reskins-bobs/graphics/icons/plates/recipes/bob-resin-oil.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/bob-resin-wood.png b/reskins-bobs/graphics/icons/plates/recipes/bob-resin-wood.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/bob-resin-wood.png rename to reskins-bobs/graphics/icons/plates/recipes/bob-resin-wood.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/bobingabout-enrichment-process.png b/reskins-bobs/graphics/icons/plates/recipes/bobingabout-enrichment-process.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/bobingabout-enrichment-process.png rename to reskins-bobs/graphics/icons/plates/recipes/bobingabout-enrichment-process.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/coal-cracking.png b/reskins-bobs/graphics/icons/plates/recipes/coal-cracking.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/coal-cracking.png rename to reskins-bobs/graphics/icons/plates/recipes/coal-cracking.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/cobalt-oxide-from-copper.png b/reskins-bobs/graphics/icons/plates/recipes/cobalt-oxide-from-copper.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/cobalt-oxide-from-copper.png rename to reskins-bobs/graphics/icons/plates/recipes/cobalt-oxide-from-copper.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-blue.png b/reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-blue.png rename to reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-pink.png b/reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-pink.png rename to reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-alternate-pink.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-blue.png b/reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-blue.png rename to reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-pink.png b/reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-pink.png rename to reskins-bobs/graphics/icons/plates/recipes/deuterium-fuel-reprocessing-pink.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/enriched-fuel-from-hydrazine.png b/reskins-bobs/graphics/icons/plates/recipes/enriched-fuel-from-hydrazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/enriched-fuel-from-hydrazine.png rename to reskins-bobs/graphics/icons/plates/recipes/enriched-fuel-from-hydrazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/enriched-fuel-from-liquid-fuel.png b/reskins-bobs/graphics/icons/plates/recipes/enriched-fuel-from-liquid-fuel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/enriched-fuel-from-liquid-fuel.png rename to reskins-bobs/graphics/icons/plates/recipes/enriched-fuel-from-liquid-fuel.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/nuclear-fuel-reprocessing.png b/reskins-bobs/graphics/icons/plates/recipes/nuclear-fuel-reprocessing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/nuclear-fuel-reprocessing.png rename to reskins-bobs/graphics/icons/plates/recipes/nuclear-fuel-reprocessing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/petroleum-gas-cracking.png b/reskins-bobs/graphics/icons/plates/recipes/petroleum-gas-cracking.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/petroleum-gas-cracking.png rename to reskins-bobs/graphics/icons/plates/recipes/petroleum-gas-cracking.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/silver-from-lead.png b/reskins-bobs/graphics/icons/plates/recipes/silver-from-lead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/silver-from-lead.png rename to reskins-bobs/graphics/icons/plates/recipes/silver-from-lead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/solid-fuel-from-hydrogen.png b/reskins-bobs/graphics/icons/plates/recipes/solid-fuel-from-hydrogen.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/solid-fuel-from-hydrogen.png rename to reskins-bobs/graphics/icons/plates/recipes/solid-fuel-from-hydrogen.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/solid-fuel-from-sour-gas.png b/reskins-bobs/graphics/icons/plates/recipes/solid-fuel-from-sour-gas.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/solid-fuel-from-sour-gas.png rename to reskins-bobs/graphics/icons/plates/recipes/solid-fuel-from-sour-gas.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/synthetic-wood.png b/reskins-bobs/graphics/icons/plates/recipes/synthetic-wood.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/synthetic-wood.png rename to reskins-bobs/graphics/icons/plates/recipes/synthetic-wood.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-fuel-reprocessing-alternate.png b/reskins-bobs/graphics/icons/plates/recipes/thorium-fuel-reprocessing-alternate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-fuel-reprocessing-alternate.png rename to reskins-bobs/graphics/icons/plates/recipes/thorium-fuel-reprocessing-alternate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-fuel-reprocessing.png b/reskins-bobs/graphics/icons/plates/recipes/thorium-fuel-reprocessing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-fuel-reprocessing.png rename to reskins-bobs/graphics/icons/plates/recipes/thorium-fuel-reprocessing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-processing.png b/reskins-bobs/graphics/icons/plates/recipes/thorium-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/recipes/thorium-processing.png rename to reskins-bobs/graphics/icons/plates/recipes/thorium-processing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/small-storage-tank/inline-small-storage-tank-icon-base.png b/reskins-bobs/graphics/icons/plates/small-storage-tank/inline-small-storage-tank-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/small-storage-tank/inline-small-storage-tank-icon-base.png rename to reskins-bobs/graphics/icons/plates/small-storage-tank/inline-small-storage-tank-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/small-storage-tank/small-storage-tank-icon-base.png b/reskins-bobs/graphics/icons/plates/small-storage-tank/small-storage-tank-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/small-storage-tank/small-storage-tank-icon-base.png rename to reskins-bobs/graphics/icons/plates/small-storage-tank/small-storage-tank-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-base.png b/reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-base.png rename to reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-highlights.png b/reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-highlights.png rename to reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-mask.png b/reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/plates/water-pump/water-pump-icon-mask.png rename to reskins-bobs/graphics/icons/plates/water-pump/water-pump-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-1-icon-base.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-1-icon-base.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-2-icon-base.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-2-icon-base.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-3-icon-base.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-3-icon-base.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-icon-highlights.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-icon-highlights.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-icon-mask.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-icon-mask.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-1-icon.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-type-1-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-1-icon.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-type-1-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-2-icon.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-type-2-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-2-icon.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-type-2-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-3-icon.png b/reskins-bobs/graphics/icons/power/accumulator/accumulator-type-3-icon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/accumulator/accumulator-type-3-icon.png rename to reskins-bobs/graphics/icons/power/accumulator/accumulator-type-3-icon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-base.png b/reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-base.png rename to reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-highlights.png b/reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-highlights.png rename to reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-mask.png b/reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/big-electric-pole/big-electric-pole-icon-mask.png rename to reskins-bobs/graphics/icons/power/big-electric-pole/big-electric-pole-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-base.png b/reskins-bobs/graphics/icons/power/boiler/boiler-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-base.png rename to reskins-bobs/graphics/icons/power/boiler/boiler-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-highlights.png b/reskins-bobs/graphics/icons/power/boiler/boiler-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-highlights.png rename to reskins-bobs/graphics/icons/power/boiler/boiler-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-mask.png b/reskins-bobs/graphics/icons/power/boiler/boiler-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/boiler/boiler-icon-mask.png rename to reskins-bobs/graphics/icons/power/boiler/boiler-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/burner-electric-generator/burner-electric-generator.png b/reskins-bobs/graphics/icons/power/burner-electric-generator/burner-electric-generator.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/burner-electric-generator/burner-electric-generator.png rename to reskins-bobs/graphics/icons/power/burner-electric-generator/burner-electric-generator.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-base.png b/reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-base.png rename to reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-highlights.png b/reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-highlights.png rename to reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-mask.png b/reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/fluid-generator/fluid-generator-icon-mask.png rename to reskins-bobs/graphics/icons/power/fluid-generator/fluid-generator-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-aluminum-invar-icon-base.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-aluminum-invar-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-aluminum-invar-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-aluminum-invar-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-base-icon-base.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-base-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-base-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-base-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-gold-copper-icon-base.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-gold-copper-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-gold-copper-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-gold-copper-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-icon-highlights.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-icon-highlights.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-icon-mask.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-icon-mask.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-silver-aluminum-icon-base.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-silver-aluminum-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-silver-aluminum-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-silver-aluminum-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-silver-titanium-icon-base.png b/reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-silver-titanium-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-exchanger/heat-exchanger-silver-titanium-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-exchanger/heat-exchanger-silver-titanium-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-aluminum-invar-icon-base.png b/reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-aluminum-invar-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-aluminum-invar-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-aluminum-invar-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-base-icon-base.png b/reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-base-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-base-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-base-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-gold-copper-icon-base.png b/reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-gold-copper-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-gold-copper-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-gold-copper-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-silver-aluminum-icon-base.png b/reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-silver-aluminum-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-silver-aluminum-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-silver-aluminum-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-silver-titanium-icon-base.png b/reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-silver-titanium-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-pipe/heat-pipe-silver-titanium-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-pipe/heat-pipe-silver-titanium-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-base.png b/reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-highlights.png b/reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-highlights.png rename to reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-mask.png b/reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-burner/heat-source-burner-icon-mask.png rename to reskins-bobs/graphics/icons/power/heat-source-burner/heat-source-burner-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-base.png b/reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-base.png rename to reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-highlights.png b/reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-highlights.png rename to reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-mask.png b/reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-mask.png rename to reskins-bobs/graphics/icons/power/heat-source-fluid/heat-source-fluid-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-base.png b/reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-base.png rename to reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-highlights.png b/reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-highlights.png rename to reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-mask.png b/reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-mask.png rename to reskins-bobs/graphics/icons/power/medium-electric-pole/medium-electric-pole-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-blue-gold-copper-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-blue-gold-copper-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-blue-gold-copper-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-blue-gold-copper-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-pink-gold-copper-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-pink-gold-copper-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-pink-gold-copper-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-deuterium-pink-gold-copper-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-highlights.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-highlights.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-mask.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-mask.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-aluminum-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-aluminum-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-aluminum-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-aluminum-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-titanium-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-titanium-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-titanium-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-thorium-silver-titanium-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-aluminum-invar-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-aluminum-invar-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-aluminum-invar-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-aluminum-invar-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-base-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-base-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-base-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-base-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-gold-copper-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-gold-copper-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-gold-copper-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-gold-copper-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-aluminum-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-aluminum-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-aluminum-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-aluminum-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-titanium-icon-base.png b/reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-titanium-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-titanium-icon-base.png rename to reskins-bobs/graphics/icons/power/nuclear-reactor/nuclear-reactor-uranium-silver-titanium-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-base.png b/reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-base.png rename to reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-highlights.png b/reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-highlights.png rename to reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-mask.png b/reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/oil-boiler/oil-boiler-icon-mask.png rename to reskins-bobs/graphics/icons/power/oil-boiler/oil-boiler-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-base.png b/reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-base.png rename to reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-highlights.png b/reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-highlights.png rename to reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-mask.png b/reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-mask.png rename to reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-type.png b/reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-type.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-large/solar-panel-large-icon-type.png rename to reskins-bobs/graphics/icons/power/solar-panel-large/solar-panel-large-icon-type.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-base.png b/reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-base.png rename to reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-highlights.png b/reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-highlights.png rename to reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-mask.png b/reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-mask.png rename to reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-type.png b/reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-type.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel-small/solar-panel-small-icon-type.png rename to reskins-bobs/graphics/icons/power/solar-panel-small/solar-panel-small-icon-type.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-base.png b/reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-base.png rename to reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-highlights.png b/reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-highlights.png rename to reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-mask.png b/reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-mask.png rename to reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-type.png b/reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-type.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/solar-panel/solar-panel-icon-type.png rename to reskins-bobs/graphics/icons/power/solar-panel/solar-panel-icon-type.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-base.png b/reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-base.png rename to reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-highlights.png b/reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-highlights.png rename to reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-mask.png b/reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-engine/steam-engine-icon-mask.png rename to reskins-bobs/graphics/icons/power/steam-engine/steam-engine-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-base.png b/reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-base.png rename to reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-highlights.png b/reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-highlights.png rename to reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-mask.png b/reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/steam-turbine/steam-turbine-icon-mask.png rename to reskins-bobs/graphics/icons/power/steam-turbine/steam-turbine-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-base.png b/reskins-bobs/graphics/icons/power/substation/substation-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-base.png rename to reskins-bobs/graphics/icons/power/substation/substation-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-highlights.png b/reskins-bobs/graphics/icons/power/substation/substation-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-highlights.png rename to reskins-bobs/graphics/icons/power/substation/substation-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-mask.png b/reskins-bobs/graphics/icons/power/substation/substation-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/power/substation/substation-icon-mask.png rename to reskins-bobs/graphics/icons/power/substation/substation-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/revamp/fluids/ammoniated-brine.png b/reskins-bobs/graphics/icons/revamp/fluids/ammoniated-brine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/revamp/fluids/ammoniated-brine.png rename to reskins-bobs/graphics/icons/revamp/fluids/ammoniated-brine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/revamp/fluids/brine.png b/reskins-bobs/graphics/icons/revamp/fluids/brine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/revamp/fluids/brine.png rename to reskins-bobs/graphics/icons/revamp/fluids/brine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/revamp/heat-shield-tile.png b/reskins-bobs/graphics/icons/revamp/heat-shield-tile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/revamp/heat-shield-tile.png rename to reskins-bobs/graphics/icons/revamp/heat-shield-tile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/advanced-circuit.png b/reskins-bobs/graphics/icons/sprites/circuits/material/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/advanced-circuit.png rename to reskins-bobs/graphics/icons/sprites/circuits/material/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/advanced-processing-unit.png b/reskins-bobs/graphics/icons/sprites/circuits/material/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/sprites/circuits/material/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/electronic-circuit.png b/reskins-bobs/graphics/icons/sprites/circuits/material/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/electronic-circuit.png rename to reskins-bobs/graphics/icons/sprites/circuits/material/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/processing-unit.png b/reskins-bobs/graphics/icons/sprites/circuits/material/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/material/processing-unit.png rename to reskins-bobs/graphics/icons/sprites/circuits/material/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-base.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-base.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-highlights.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-highlights.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-mask.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-mask.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-circuit/advanced-circuit-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-base.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-base.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-highlights.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-highlights.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-mask.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-mask.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/advanced-processing-unit/advanced-processing-unit-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-base.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-base.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-highlights.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-highlights.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-mask.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-mask.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/electronic-circuit/electronic-circuit-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-base.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-base.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-highlights.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-highlights.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-mask.png b/reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-mask.png rename to reskins-bobs/graphics/icons/sprites/circuits/tier/processing-unit/processing-unit-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/advanced-circuit.png b/reskins-bobs/graphics/icons/sprites/circuits/vanilla/advanced-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/advanced-circuit.png rename to reskins-bobs/graphics/icons/sprites/circuits/vanilla/advanced-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/advanced-processing-unit.png b/reskins-bobs/graphics/icons/sprites/circuits/vanilla/advanced-processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/advanced-processing-unit.png rename to reskins-bobs/graphics/icons/sprites/circuits/vanilla/advanced-processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/electronic-circuit.png b/reskins-bobs/graphics/icons/sprites/circuits/vanilla/electronic-circuit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/electronic-circuit.png rename to reskins-bobs/graphics/icons/sprites/circuits/vanilla/electronic-circuit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/processing-unit.png b/reskins-bobs/graphics/icons/sprites/circuits/vanilla/processing-unit.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/sprites/circuits/vanilla/processing-unit.png rename to reskins-bobs/graphics/icons/sprites/circuits/vanilla/processing-unit.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-blue.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-blue.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-blue.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-green.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-green.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-green.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-green.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-orange.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-orange.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-orange.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-orange.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-purple.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-purple.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-purple.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-purple.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-red.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-red.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-red.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-red.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-yellow.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-yellow.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack-yellow.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack-yellow.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/alien-science-pack.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/alien-science-pack.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/science-pack-gold.png b/reskins-bobs/graphics/icons/technology/alien-science-pack/science-pack-gold.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/alien-science-pack/science-pack-gold.png rename to reskins-bobs/graphics/icons/technology/alien-science-pack/science-pack-gold.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/science-pack/advanced-logistic-science-pack.png b/reskins-bobs/graphics/icons/technology/science-pack/advanced-logistic-science-pack.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/science-pack/advanced-logistic-science-pack.png rename to reskins-bobs/graphics/icons/technology/science-pack/advanced-logistic-science-pack.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-base.png b/reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-base.png rename to reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-highlights.png b/reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-highlights.png rename to reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-mask.png b/reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/science-pack/science-pack-icon-mask.png rename to reskins-bobs/graphics/icons/technology/science-pack/science-pack-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/technology/science-pack/steam-science-pack.png b/reskins-bobs/graphics/icons/technology/science-pack/steam-science-pack.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/technology/science-pack/steam-science-pack.png rename to reskins-bobs/graphics/icons/technology/science-pack/steam-science-pack.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-battery/vehicle-battery-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-engine/vehicle-engine-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-engine/vehicle-engine-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-engine/vehicle-engine-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-engine/vehicle-engine-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-motor/vehicle-motor-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-motor/vehicle-motor-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-motor/vehicle-motor-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-motor/vehicle-motor-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-antenna/vehicle-part-antenna-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-chargepad/vehicle-part-chargepad-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-part-robot/vehicle-part-robot-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-1-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-2-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-3-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-icon-base.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-icon-base.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-4-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-highlights.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-highlights.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-mask.png b/reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-mask.png rename to reskins-bobs/graphics/icons/vehicle-equipment/vehicle-roboport/vehicle-roboport-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk3.png b/reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk3.png rename to reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk4.png b/reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk4.png rename to reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk5.png b/reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/armor/bob-power-armor-mk5.png rename to reskins-bobs/graphics/icons/warfare/armor/bob-power-armor-mk5.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/armor/heavy-armor-2.png b/reskins-bobs/graphics/icons/warfare/armor/heavy-armor-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/armor/heavy-armor-2.png rename to reskins-bobs/graphics/icons/warfare/armor/heavy-armor-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/armor/heavy-armor-3.png b/reskins-bobs/graphics/icons/warfare/armor/heavy-armor-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/armor/heavy-armor-3.png rename to reskins-bobs/graphics/icons/warfare/armor/heavy-armor-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/atomic-artillery-shell.png b/reskins-bobs/graphics/icons/warfare/artillery-shells/atomic-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/atomic-artillery-shell.png rename to reskins-bobs/graphics/icons/warfare/artillery-shells/atomic-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/distractor-artillery-shell.png b/reskins-bobs/graphics/icons/warfare/artillery-shells/distractor-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/distractor-artillery-shell.png rename to reskins-bobs/graphics/icons/warfare/artillery-shells/distractor-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/explosive-artillery-shell.png b/reskins-bobs/graphics/icons/warfare/artillery-shells/explosive-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/explosive-artillery-shell.png rename to reskins-bobs/graphics/icons/warfare/artillery-shells/explosive-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/fire-artillery-shell.png b/reskins-bobs/graphics/icons/warfare/artillery-shells/fire-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/fire-artillery-shell.png rename to reskins-bobs/graphics/icons/warfare/artillery-shells/fire-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/poison-artillery-shell.png b/reskins-bobs/graphics/icons/warfare/artillery-shells/poison-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-shells/poison-artillery-shell.png rename to reskins-bobs/graphics/icons/warfare/artillery-shells/poison-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-base.png b/reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-base.png rename to reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-mask.png b/reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-turret/artillery-turret-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/artillery-turret/artillery-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-base.png b/reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-base.png rename to reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-mask.png b/reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/artillery-wagon/artillery-wagon-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/acid-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/acid-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/acid-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/acid-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/ap-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/ap-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/ap-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/ap-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/electric-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/electric-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/electric-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/electric-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/flame-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/flame-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/flame-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/flame-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/he-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/he-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/he-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/he-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/plasma-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/plasma-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/plasma-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/plasma-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/poison-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/poison-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/poison-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/poison-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/bullets/uranium-bullet.png b/reskins-bobs/graphics/icons/warfare/bullets/uranium-bullet.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/bullets/uranium-bullet.png rename to reskins-bobs/graphics/icons/warfare/bullets/uranium-bullet.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/cannon-shells/scatter-cannon-shell.png b/reskins-bobs/graphics/icons/warfare/cannon-shells/scatter-cannon-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/cannon-shells/scatter-cannon-shell.png rename to reskins-bobs/graphics/icons/warfare/cannon-shells/scatter-cannon-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/capsules/bob-laser-robot-capsule.png b/reskins-bobs/graphics/icons/warfare/capsules/bob-laser-robot-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/capsules/bob-laser-robot-capsule.png rename to reskins-bobs/graphics/icons/warfare/capsules/bob-laser-robot-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/capsules/defender-capsule.png b/reskins-bobs/graphics/icons/warfare/capsules/defender-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/capsules/defender-capsule.png rename to reskins-bobs/graphics/icons/warfare/capsules/defender-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/capsules/destroyer-capsule.png b/reskins-bobs/graphics/icons/warfare/capsules/destroyer-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/capsules/destroyer-capsule.png rename to reskins-bobs/graphics/icons/warfare/capsules/destroyer-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/capsules/distractor-capsule.png b/reskins-bobs/graphics/icons/warfare/capsules/distractor-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/capsules/distractor-capsule.png rename to reskins-bobs/graphics/icons/warfare/capsules/distractor-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/capsules/fire-capsule.png b/reskins-bobs/graphics/icons/warfare/capsules/fire-capsule.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/capsules/fire-capsule.png rename to reskins-bobs/graphics/icons/warfare/capsules/fire-capsule.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/bullet-casing.png b/reskins-bobs/graphics/icons/warfare/components/bullet-casing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/bullet-casing.png rename to reskins-bobs/graphics/icons/warfare/components/bullet-casing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/cordite.png b/reskins-bobs/graphics/icons/warfare/components/cordite.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/cordite.png rename to reskins-bobs/graphics/icons/warfare/components/cordite.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/laser-rifle-battery-case.png b/reskins-bobs/graphics/icons/warfare/components/laser-rifle-battery-case.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/laser-rifle-battery-case.png rename to reskins-bobs/graphics/icons/warfare/components/laser-rifle-battery-case.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/magazine.png b/reskins-bobs/graphics/icons/warfare/components/magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/magazine.png rename to reskins-bobs/graphics/icons/warfare/components/magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/petroleum-jelly.png b/reskins-bobs/graphics/icons/warfare/components/petroleum-jelly.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/petroleum-jelly.png rename to reskins-bobs/graphics/icons/warfare/components/petroleum-jelly.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/rocket-engine.png b/reskins-bobs/graphics/icons/warfare/components/rocket-engine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/rocket-engine.png rename to reskins-bobs/graphics/icons/warfare/components/rocket-engine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-1.png b/reskins-bobs/graphics/icons/warfare/components/shot/shot-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-1.png rename to reskins-bobs/graphics/icons/warfare/components/shot/shot-1.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-2.png b/reskins-bobs/graphics/icons/warfare/components/shot/shot-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-2.png rename to reskins-bobs/graphics/icons/warfare/components/shot/shot-2.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-3.png b/reskins-bobs/graphics/icons/warfare/components/shot/shot-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-3.png rename to reskins-bobs/graphics/icons/warfare/components/shot/shot-3.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-4.png b/reskins-bobs/graphics/icons/warfare/components/shot/shot-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot-4.png rename to reskins-bobs/graphics/icons/warfare/components/shot/shot-4.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot.png b/reskins-bobs/graphics/icons/warfare/components/shot/shot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shot/shot.png rename to reskins-bobs/graphics/icons/warfare/components/shot/shot.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/components/shotgun-shell-casing.png b/reskins-bobs/graphics/icons/warfare/components/shotgun-shell-casing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/components/shotgun-shell-casing.png rename to reskins-bobs/graphics/icons/warfare/components/shotgun-shell-casing.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-base.png b/reskins-bobs/graphics/icons/warfare/drone/drone-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-base.png rename to reskins-bobs/graphics/icons/warfare/drone/drone-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/drone/drone-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/drone/drone-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-mask.png b/reskins-bobs/graphics/icons/warfare/drone/drone-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/drone/drone-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/drone/drone-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/drone/robot-drone-frame-large.png b/reskins-bobs/graphics/icons/warfare/drone/robot-drone-frame-large.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/drone/robot-drone-frame-large.png rename to reskins-bobs/graphics/icons/warfare/drone/robot-drone-frame-large.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/drone/robot-drone-frame.png b/reskins-bobs/graphics/icons/warfare/drone/robot-drone-frame.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/drone/robot-drone-frame.png rename to reskins-bobs/graphics/icons/warfare/drone/robot-drone-frame.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-base.png b/reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-base.png rename to reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-mask.png b/reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/gun-turret/gun-turret-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/gun-turret/gun-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-amethyst.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-amethyst.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-amethyst.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-amethyst.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-diamond.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-diamond.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-diamond.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-diamond.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-emerald.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-emerald.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-emerald.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-emerald.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-ruby.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-ruby.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-ruby.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-ruby.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-sapphire.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-sapphire.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-sapphire.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-sapphire.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-topaz.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-topaz.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-topaz.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery-topaz.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery.png b/reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery.png rename to reskins-bobs/graphics/icons/warfare/laser-rifle-batteries/laser-rifle-battery.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-base.png b/reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-base.png rename to reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-mask.png b/reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/laser-turret/laser-turret-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/laser-turret/laser-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/acid-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/acid-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/acid-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/acid-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/ap-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/ap-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/ap-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/ap-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/electric-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/electric-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/electric-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/electric-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/flame-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/flame-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/flame-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/flame-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/he-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/he-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/he-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/he-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/plasma-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/plasma-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/plasma-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/plasma-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/poison-bullet-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/poison-bullet-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/poison-bullet-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/poison-bullet-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/magazines/uranium-rounds-magazine.png b/reskins-bobs/graphics/icons/warfare/magazines/uranium-rounds-magazine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/magazines/uranium-rounds-magazine.png rename to reskins-bobs/graphics/icons/warfare/magazines/uranium-rounds-magazine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-armor-plate.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-armor-plate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-armor-plate.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-armor-plate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-brain.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-brain.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-brain.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-brain.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-foot.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-foot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-foot.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-foot.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-frame.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-frame.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-frame.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-frame.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-hip.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-hip.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-hip.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-hip.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-knee.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-knee.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-knee.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-knee.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-leg-segment.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-leg-segment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-leg-segment.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-leg-segment.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-leg.png b/reskins-bobs/graphics/icons/warfare/mech-parts/mech-leg.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mech-parts/mech-leg.png rename to reskins-bobs/graphics/icons/warfare/mech-parts/mech-leg.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mines/distractor-mine.png b/reskins-bobs/graphics/icons/warfare/mines/distractor-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mines/distractor-mine.png rename to reskins-bobs/graphics/icons/warfare/mines/distractor-mine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mines/poison-mine.png b/reskins-bobs/graphics/icons/warfare/mines/poison-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mines/poison-mine.png rename to reskins-bobs/graphics/icons/warfare/mines/poison-mine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/mines/slowdown-mine.png b/reskins-bobs/graphics/icons/warfare/mines/slowdown-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/mines/slowdown-mine.png rename to reskins-bobs/graphics/icons/warfare/mines/slowdown-mine.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-base.png b/reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-base.png rename to reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-mask.png b/reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/plasma-turret/plasma-turret-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/plasma-turret/plasma-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/acid-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/acid-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/acid-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/acid-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/ap-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/ap-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/ap-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/ap-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/electric-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/electric-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/electric-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/electric-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/flame-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/flame-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/flame-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/flame-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/he-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/he-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/he-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/he-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/plasma-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/plasma-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/plasma-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/plasma-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/poison-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/poison-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/poison-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/poison-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/uranium-bullet-projectile.png b/reskins-bobs/graphics/icons/warfare/projectiles/uranium-bullet-projectile.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/projectiles/uranium-bullet-projectile.png rename to reskins-bobs/graphics/icons/warfare/projectiles/uranium-bullet-projectile.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-base.png b/reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-base.png rename to reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-mask.png b/reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/mini-radar-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/radar/mini-radar-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-base.png b/reskins-bobs/graphics/icons/warfare/radar/radar-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-base.png rename to reskins-bobs/graphics/icons/warfare/radar/radar-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/radar/radar-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/radar/radar-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-mask.png b/reskins-bobs/graphics/icons/warfare/radar/radar-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/radar/radar-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/radar/radar-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/reinforced-gate/gate.png b/reskins-bobs/graphics/icons/warfare/reinforced-gate/gate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/reinforced-gate/gate.png rename to reskins-bobs/graphics/icons/warfare/reinforced-gate/gate.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/reinforced-wall/wall.png b/reskins-bobs/graphics/icons/warfare/reinforced-wall/wall.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/reinforced-wall/wall.png rename to reskins-bobs/graphics/icons/warfare/reinforced-wall/wall.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-base.png b/reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-base.png rename to reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-mask.png b/reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/robot-tool-combat/robot-tool-combat-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/robots/bob-laser-robot.png b/reskins-bobs/graphics/icons/warfare/robots/bob-laser-robot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/robots/bob-laser-robot.png rename to reskins-bobs/graphics/icons/warfare/robots/bob-laser-robot.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-acid-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-acid-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-acid-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-acid-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-electric-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-electric-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-electric-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-electric-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-explosive-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-explosive-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-explosive-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-explosive-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-flame-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-flame-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-flame-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-flame-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-piercing-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-piercing-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-piercing-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-piercing-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-plasma-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-plasma-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-plasma-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-plasma-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-poison-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-poison-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-poison-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-poison-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-rocket.png b/reskins-bobs/graphics/icons/warfare/rockets/bob-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/rockets/bob-rocket.png rename to reskins-bobs/graphics/icons/warfare/rockets/bob-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/better-shotgun-shell.png b/reskins-bobs/graphics/icons/warfare/shells/better-shotgun-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/better-shotgun-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/better-shotgun-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-acid-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-acid-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-acid-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-acid-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-ap-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-ap-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-ap-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-ap-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-electric-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-electric-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-electric-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-electric-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-explosive-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-explosive-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-explosive-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-explosive-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-flame-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-flame-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-flame-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-flame-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-plasma-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-plasma-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-plasma-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-plasma-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-poison-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-poison-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-poison-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-poison-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-uranium-shell.png b/reskins-bobs/graphics/icons/warfare/shells/shotgun-uranium-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/shells/shotgun-uranium-shell.png rename to reskins-bobs/graphics/icons/warfare/shells/shotgun-uranium-shell.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-base.png b/reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-base.png rename to reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-mask.png b/reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/sniper-turret/sniper-turret-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/sniper-turret/sniper-turret-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron-tintable-mask.png b/reskins-bobs/graphics/icons/warfare/spidertron/antron-tintable-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron-tintable-mask.png rename to reskins-bobs/graphics/icons/warfare/spidertron/antron-tintable-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron-tintable.png b/reskins-bobs/graphics/icons/warfare/spidertron/antron-tintable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron-tintable.png rename to reskins-bobs/graphics/icons/warfare/spidertron/antron-tintable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron.png b/reskins-bobs/graphics/icons/warfare/spidertron/antron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/antron.png rename to reskins-bobs/graphics/icons/warfare/spidertron/antron.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron-tintable-mask.png b/reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron-tintable-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron-tintable-mask.png rename to reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron-tintable-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron-tintable.png b/reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron-tintable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron-tintable.png rename to reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron-tintable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron.png b/reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/heavy-spidertron.png rename to reskins-bobs/graphics/icons/warfare/spidertron/heavy-spidertron.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron-tintable-mask.png b/reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron-tintable-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron-tintable-mask.png rename to reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron-tintable-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron-tintable.png b/reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron-tintable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron-tintable.png rename to reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron-tintable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron.png b/reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/logistic-spidertron.png rename to reskins-bobs/graphics/icons/warfare/spidertron/logistic-spidertron.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron-tintable-mask.png b/reskins-bobs/graphics/icons/warfare/spidertron/tankotron-tintable-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron-tintable-mask.png rename to reskins-bobs/graphics/icons/warfare/spidertron/tankotron-tintable-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron-tintable.png b/reskins-bobs/graphics/icons/warfare/spidertron/tankotron-tintable.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron-tintable.png rename to reskins-bobs/graphics/icons/warfare/spidertron/tankotron-tintable.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron.png b/reskins-bobs/graphics/icons/warfare/spidertron/tankotron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/spidertron/tankotron.png rename to reskins-bobs/graphics/icons/warfare/spidertron/tankotron.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-base.png b/reskins-bobs/graphics/icons/warfare/tank/tank-icon-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-base.png rename to reskins-bobs/graphics/icons/warfare/tank/tank-icon-base.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-highlights.png b/reskins-bobs/graphics/icons/warfare/tank/tank-icon-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-highlights.png rename to reskins-bobs/graphics/icons/warfare/tank/tank-icon-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-mask.png b/reskins-bobs/graphics/icons/warfare/tank/tank-icon-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/tank/tank-icon-mask.png rename to reskins-bobs/graphics/icons/warfare/tank/tank-icon-mask.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/acid-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/acid-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/acid-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/acid-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/electric-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/electric-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/electric-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/electric-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/explosive-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/explosive-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/explosive-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/explosive-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/flame-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/flame-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/flame-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/flame-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/piercing-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/piercing-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/piercing-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/piercing-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/plasma-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/plasma-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/plasma-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/plasma-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/poison-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/poison-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/poison-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/poison-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/warheads/uranium-rocket-warhead.png b/reskins-bobs/graphics/icons/warfare/warheads/uranium-rocket-warhead.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/warheads/uranium-rocket-warhead.png rename to reskins-bobs/graphics/icons/warfare/warheads/uranium-rocket-warhead.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/weapons/laser-rifle.png b/reskins-bobs/graphics/icons/warfare/weapons/laser-rifle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/weapons/laser-rifle.png rename to reskins-bobs/graphics/icons/warfare/weapons/laser-rifle.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/weapons/rifle.png b/reskins-bobs/graphics/icons/warfare/weapons/rifle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/weapons/rifle.png rename to reskins-bobs/graphics/icons/warfare/weapons/rifle.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/weapons/sniper-rifle.png b/reskins-bobs/graphics/icons/warfare/weapons/sniper-rifle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/weapons/sniper-rifle.png rename to reskins-bobs/graphics/icons/warfare/weapons/sniper-rifle.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/weapons/spidertron-cannon.png b/reskins-bobs/graphics/icons/warfare/weapons/spidertron-cannon.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/weapons/spidertron-cannon.png rename to reskins-bobs/graphics/icons/warfare/weapons/spidertron-cannon.png diff --git a/reskins-bobs_2.1.5/graphics/icons/warfare/weapons/spidertron-gatling-gun.png b/reskins-bobs/graphics/icons/warfare/weapons/spidertron-gatling-gun.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/icons/warfare/weapons/spidertron-gatling-gun.png rename to reskins-bobs/graphics/icons/warfare/weapons/spidertron-gatling-gun.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/bob-fluid-products.png b/reskins-bobs/graphics/item-group/bob-fluid-products.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/bob-fluid-products.png rename to reskins-bobs/graphics/item-group/bob-fluid-products.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/bob-gems.png b/reskins-bobs/graphics/item-group/bob-gems.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/bob-gems.png rename to reskins-bobs/graphics/item-group/bob-gems.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/bob-intermediate-products.png b/reskins-bobs/graphics/item-group/bob-intermediate-products.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/bob-intermediate-products.png rename to reskins-bobs/graphics/item-group/bob-intermediate-products.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/bob-logistics.png b/reskins-bobs/graphics/item-group/bob-logistics.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/bob-logistics.png rename to reskins-bobs/graphics/item-group/bob-logistics.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/bob-resource-products.png b/reskins-bobs/graphics/item-group/bob-resource-products.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/bob-resource-products.png rename to reskins-bobs/graphics/item-group/bob-resource-products.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/intermediate-products.png b/reskins-bobs/graphics/item-group/intermediate-products.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/intermediate-products.png rename to reskins-bobs/graphics/item-group/intermediate-products.png diff --git a/reskins-bobs_2.1.5/graphics/item-group/logistics.png b/reskins-bobs/graphics/item-group/logistics.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/item-group/logistics.png rename to reskins-bobs/graphics/item-group/logistics.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-base.png b/reskins-bobs/graphics/technology/assembly/automation/automation-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-base.png rename to reskins-bobs/graphics/technology/assembly/automation/automation-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/automation/automation-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/automation/automation-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-mask.png b/reskins-bobs/graphics/technology/assembly/automation/automation-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/automation/automation-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/automation/automation-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-base.png b/reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-base.png rename to reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-mask.png b/reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/centrifuge/centrifuge-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/centrifuge/centrifuge-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-base.png b/reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-base.png rename to reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-mask.png b/reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/chemical-plant/chemical-plant-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/chemical-plant/chemical-plant-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-base.png b/reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-base.png rename to reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-mask.png b/reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/distillery/distillery-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/distillery/distillery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-base.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-1-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-1-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-base.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-2-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-2-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-base.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-3-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-3-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-base.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-4-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-4-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-base.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electrolyser/electrolyser-5-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electrolyser/electrolyser-5-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-base.png b/reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-base.png rename to reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-mask.png b/reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/electronics-machines/electronics-machines-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/electronics-machines/electronics-machines-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-base.png b/reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-base.png rename to reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-highlights.png b/reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-highlights.png rename to reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-mask.png b/reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/assembly/oil-refinery/oil-refinery-technology-mask.png rename to reskins-bobs/graphics/technology/assembly/oil-refinery/oil-refinery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-base.png b/reskins-bobs/graphics/technology/equipment/battery/battery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-base.png rename to reskins-bobs/graphics/technology/equipment/battery/battery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/battery/battery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/battery/battery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-mask.png b/reskins-bobs/graphics/technology/equipment/battery/battery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/battery/battery-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/battery/battery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-base.png b/reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-base.png rename to reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-mask.png b/reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/energy-shield/energy-shield-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/energy-shield/energy-shield-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-base.png b/reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-base.png rename to reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-mask.png b/reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/exoskeleton/exoskeleton-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/exoskeleton/exoskeleton-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-base.png b/reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-base.png rename to reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-mask.png b/reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/fusion-reactor/fusion-reactor-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-base.png b/reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-base.png rename to reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-mask.png b/reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/laser-defense/laser-defense-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/laser-defense/laser-defense-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-1-technology-base.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-1-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-1-technology-base.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-1-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-2-technology-base.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-2-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-2-technology-base.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-2-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-3-technology-base.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-3-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-3-technology-base.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-3-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-4-technology-base.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-4-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-4-technology-base.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-4-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-technology-mask.png b/reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/modular-equipment/modular-equipment-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/modular-equipment/modular-equipment-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-base.png b/reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-base.png rename to reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-mask.png b/reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/night-vision/night-vision-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/night-vision/night-vision-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-base.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-base.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-mask.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-1/personal-roboport-1-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-base.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-base.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-mask.png b/reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/personal-roboport-2/personal-roboport-2-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-base.png b/reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-base.png rename to reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-highlights.png b/reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-highlights.png rename to reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-mask.png b/reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/equipment/solar-panel/solar-panel-technology-mask.png rename to reskins-bobs/graphics/technology/equipment/solar-panel/solar-panel-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/greenhouse/bob-fertiliser.png b/reskins-bobs/graphics/technology/greenhouse/bob-fertiliser.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/greenhouse/bob-fertiliser.png rename to reskins-bobs/graphics/technology/greenhouse/bob-fertiliser.png diff --git a/reskins-bobs_2.1.5/graphics/technology/greenhouse/bob-greenhouse.png b/reskins-bobs/graphics/technology/greenhouse/bob-greenhouse.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/greenhouse/bob-greenhouse.png rename to reskins-bobs/graphics/technology/greenhouse/bob-greenhouse.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/express-inserters.png b/reskins-bobs/graphics/technology/logistics/express-inserters.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/express-inserters.png rename to reskins-bobs/graphics/technology/logistics/express-inserters.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-base.png b/reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-base.png rename to reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-highlights.png b/reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-highlights.png rename to reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-mask.png b/reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/inserter/inserter-technology-mask.png rename to reskins-bobs/graphics/technology/logistics/inserter/inserter-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/long-inserters-1.png b/reskins-bobs/graphics/technology/logistics/long-inserters-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/long-inserters-1.png rename to reskins-bobs/graphics/technology/logistics/long-inserters-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-base.png b/reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-base.png rename to reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-highlights.png b/reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-highlights.png rename to reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-mask.png b/reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/repair-pack/repair-pack-technology-mask.png rename to reskins-bobs/graphics/technology/logistics/repair-pack/repair-pack-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-base.png b/reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-base.png rename to reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-highlights.png b/reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-highlights.png rename to reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-mask.png b/reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robotics/robotics-technology-mask.png rename to reskins-bobs/graphics/technology/logistics/robotics/robotics-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-base.png b/reskins-bobs/graphics/technology/logistics/robots/robots-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-base.png rename to reskins-bobs/graphics/technology/logistics/robots/robots-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-highlights.png b/reskins-bobs/graphics/technology/logistics/robots/robots-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-highlights.png rename to reskins-bobs/graphics/technology/logistics/robots/robots-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-mask.png b/reskins-bobs/graphics/technology/logistics/robots/robots-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/robots/robots-technology-mask.png rename to reskins-bobs/graphics/technology/logistics/robots/robots-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter-2.png b/reskins-bobs/graphics/technology/logistics/stack-inserter-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter-2.png rename to reskins-bobs/graphics/technology/logistics/stack-inserter-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter.png b/reskins-bobs/graphics/technology/logistics/stack-inserter.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter.png rename to reskins-bobs/graphics/technology/logistics/stack-inserter.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-base.png b/reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-base.png rename to reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-highlights.png b/reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-highlights.png rename to reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-mask.png b/reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/logistics/stack-inserter/stack-inserter-technology-mask.png rename to reskins-bobs/graphics/technology/logistics/stack-inserter/stack-inserter-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/area-mining-drill-technology-base.png b/reskins-bobs/graphics/technology/mining/mining-drill/area-mining-drill-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/area-mining-drill-technology-base.png rename to reskins-bobs/graphics/technology/mining/mining-drill/area-mining-drill-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-base.png b/reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-base.png rename to reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-highlights.png b/reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-highlights.png rename to reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-mask.png b/reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/mining-drill/mining-drill-technology-mask.png rename to reskins-bobs/graphics/technology/mining/mining-drill/mining-drill-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-base.png b/reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-base.png rename to reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-highlights.png b/reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-highlights.png rename to reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-mask.png b/reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/pumpjack-technology-mask.png rename to reskins-bobs/graphics/technology/mining/pumpjack/pumpjack-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/water-pumpjack-technology-base.png b/reskins-bobs/graphics/technology/mining/pumpjack/water-pumpjack-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/mining/pumpjack/water-pumpjack-technology-base.png rename to reskins-bobs/graphics/technology/mining/pumpjack/water-pumpjack-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-1.png b/reskins-bobs/graphics/technology/modules/god-module/god-module-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-1.png rename to reskins-bobs/graphics/technology/modules/god-module/god-module-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-2.png b/reskins-bobs/graphics/technology/modules/god-module/god-module-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-2.png rename to reskins-bobs/graphics/technology/modules/god-module/god-module-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-3.png b/reskins-bobs/graphics/technology/modules/god-module/god-module-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-3.png rename to reskins-bobs/graphics/technology/modules/god-module/god-module-3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-4.png b/reskins-bobs/graphics/technology/modules/god-module/god-module-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-4.png rename to reskins-bobs/graphics/technology/modules/god-module/god-module-4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-5.png b/reskins-bobs/graphics/technology/modules/god-module/god-module-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/god-module/god-module-5.png rename to reskins-bobs/graphics/technology/modules/god-module/god-module-5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module-merging.png b/reskins-bobs/graphics/technology/modules/module-merging.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module-merging.png rename to reskins-bobs/graphics/technology/modules/module-merging.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_1.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_1.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_2.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_2.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_3.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_3.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_4.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_4.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_5.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_5.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_6.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_6.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_7.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_7.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_8.png b/reskins-bobs/graphics/technology/modules/module/blue/blue_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/blue/blue_8.png rename to reskins-bobs/graphics/technology/modules/module/blue/blue_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_1.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_1.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_2.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_2.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_3.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_3.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_4.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_4.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_5.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_5.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_6.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_6.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_7.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_7.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_8.png b/reskins-bobs/graphics/technology/modules/module/brown/brown_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/brown/brown_8.png rename to reskins-bobs/graphics/technology/modules/module/brown/brown_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_1.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_1.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_2.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_2.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_3.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_3.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_4.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_4.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_5.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_5.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_6.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_6.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_7.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_7.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_8.png b/reskins-bobs/graphics/technology/modules/module/cyan/cyan_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/cyan/cyan_8.png rename to reskins-bobs/graphics/technology/modules/module/cyan/cyan_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_1.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_1.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_2.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_2.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_3.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_3.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_4.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_4.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_5.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_5.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_6.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_6.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_7.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_7.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_8.png b/reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/deep-red/deep-red_8.png rename to reskins-bobs/graphics/technology/modules/module/deep-red/deep-red_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_1.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_1.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_2.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_2.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_3.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_3.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_4.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_4.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_5.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_5.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_6.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_6.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_7.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_7.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_8.png b/reskins-bobs/graphics/technology/modules/module/gray/gray_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/gray/gray_8.png rename to reskins-bobs/graphics/technology/modules/module/gray/gray_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_1.png b/reskins-bobs/graphics/technology/modules/module/green/green_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_1.png rename to reskins-bobs/graphics/technology/modules/module/green/green_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_2.png b/reskins-bobs/graphics/technology/modules/module/green/green_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_2.png rename to reskins-bobs/graphics/technology/modules/module/green/green_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_3.png b/reskins-bobs/graphics/technology/modules/module/green/green_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_3.png rename to reskins-bobs/graphics/technology/modules/module/green/green_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_4.png b/reskins-bobs/graphics/technology/modules/module/green/green_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_4.png rename to reskins-bobs/graphics/technology/modules/module/green/green_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_5.png b/reskins-bobs/graphics/technology/modules/module/green/green_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_5.png rename to reskins-bobs/graphics/technology/modules/module/green/green_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_6.png b/reskins-bobs/graphics/technology/modules/module/green/green_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_6.png rename to reskins-bobs/graphics/technology/modules/module/green/green_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_7.png b/reskins-bobs/graphics/technology/modules/module/green/green_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_7.png rename to reskins-bobs/graphics/technology/modules/module/green/green_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_8.png b/reskins-bobs/graphics/technology/modules/module/green/green_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/green/green_8.png rename to reskins-bobs/graphics/technology/modules/module/green/green_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_1.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_1.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_2.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_2.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_3.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_3.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_4.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_4.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_5.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_5.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_6.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_6.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_7.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_7.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_8.png b/reskins-bobs/graphics/technology/modules/module/orange/orange_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/orange/orange_8.png rename to reskins-bobs/graphics/technology/modules/module/orange/orange_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_1.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_1.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_2.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_2.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_3.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_3.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_4.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_4.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_5.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_5.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_6.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_6.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_7.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_7.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_8.png b/reskins-bobs/graphics/technology/modules/module/pine/pine_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pine/pine_8.png rename to reskins-bobs/graphics/technology/modules/module/pine/pine_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_1.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_1.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_2.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_2.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_3.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_3.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_4.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_4.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_5.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_5.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_6.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_6.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_7.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_7.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_8.png b/reskins-bobs/graphics/technology/modules/module/pink/pink_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/pink/pink_8.png rename to reskins-bobs/graphics/technology/modules/module/pink/pink_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_1.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_1.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_2.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_2.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_3.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_3.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_4.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_4.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_5.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_5.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_6.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_6.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_7.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_7.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_8.png b/reskins-bobs/graphics/technology/modules/module/purple/purple_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/purple/purple_8.png rename to reskins-bobs/graphics/technology/modules/module/purple/purple_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_1.png b/reskins-bobs/graphics/technology/modules/module/red/red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_1.png rename to reskins-bobs/graphics/technology/modules/module/red/red_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_2.png b/reskins-bobs/graphics/technology/modules/module/red/red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_2.png rename to reskins-bobs/graphics/technology/modules/module/red/red_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_3.png b/reskins-bobs/graphics/technology/modules/module/red/red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_3.png rename to reskins-bobs/graphics/technology/modules/module/red/red_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_4.png b/reskins-bobs/graphics/technology/modules/module/red/red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_4.png rename to reskins-bobs/graphics/technology/modules/module/red/red_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_5.png b/reskins-bobs/graphics/technology/modules/module/red/red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_5.png rename to reskins-bobs/graphics/technology/modules/module/red/red_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_6.png b/reskins-bobs/graphics/technology/modules/module/red/red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_6.png rename to reskins-bobs/graphics/technology/modules/module/red/red_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_7.png b/reskins-bobs/graphics/technology/modules/module/red/red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_7.png rename to reskins-bobs/graphics/technology/modules/module/red/red_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_8.png b/reskins-bobs/graphics/technology/modules/module/red/red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/red/red_8.png rename to reskins-bobs/graphics/technology/modules/module/red/red_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_1.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_1.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_2.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_2.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_3.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_3.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_4.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_4.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_5.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_5.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_6.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_6.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_7.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_7.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_8.png b/reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/vanilla-red/vanilla-red_8.png rename to reskins-bobs/graphics/technology/modules/module/vanilla-red/vanilla-red_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_1.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_1.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_2.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_2.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_3.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_3.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_4.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_4.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_5.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_5.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_6.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_6.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_7.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_7.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_7.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_7.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_8.png b/reskins-bobs/graphics/technology/modules/module/yellow/yellow_8.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/module/yellow/yellow_8.png rename to reskins-bobs/graphics/technology/modules/module/yellow/yellow_8.png diff --git a/reskins-bobs_2.1.5/graphics/technology/modules/modules.png b/reskins-bobs/graphics/technology/modules/modules.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/modules/modules.png rename to reskins-bobs/graphics/technology/modules/modules.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-base.png b/reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-base.png rename to reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-highlights.png b/reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-lights.png b/reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-lights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-lights.png rename to reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-lights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-mask.png b/reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-mask.png rename to reskins-bobs/graphics/technology/plates/advanced-material-processing/advanced-material-processing-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-base.png b/reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-base.png rename to reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-highlights.png b/reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-mask.png b/reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/air-compressor/air-compressor-technology-mask.png rename to reskins-bobs/graphics/technology/plates/air-compressor/air-compressor-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-blue-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-blue-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-blue-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-blue-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-green-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-green-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-green-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-green-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-orange-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-orange-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-orange-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-orange-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-purple-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-purple-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-purple-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-purple-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-red-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-red-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-red-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-red-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-yellow-research.png b/reskins-bobs/graphics/technology/plates/alien/alien-yellow-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/alien/alien-yellow-research.png rename to reskins-bobs/graphics/technology/plates/alien/alien-yellow-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-base.png b/reskins-bobs/graphics/technology/plates/battery/battery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-base.png rename to reskins-bobs/graphics/technology/plates/battery/battery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-highlights.png b/reskins-bobs/graphics/technology/plates/battery/battery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/battery/battery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-mask.png b/reskins-bobs/graphics/technology/plates/battery/battery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/battery/battery-technology-mask.png rename to reskins-bobs/graphics/technology/plates/battery/battery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/chemical-processing-2.png b/reskins-bobs/graphics/technology/plates/chemical-processing/chemical-processing-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/chemical-processing-2.png rename to reskins-bobs/graphics/technology/plates/chemical-processing/chemical-processing-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/gas-canisters.png b/reskins-bobs/graphics/technology/plates/chemical-processing/gas-canisters.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/gas-canisters.png rename to reskins-bobs/graphics/technology/plates/chemical-processing/gas-canisters.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/lithium-processing.png b/reskins-bobs/graphics/technology/plates/chemical-processing/lithium-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/chemical-processing/lithium-processing.png rename to reskins-bobs/graphics/technology/plates/chemical-processing/lithium-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-base.png b/reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-base.png rename to reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-highlights.png b/reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-lights.png b/reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-lights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-lights.png rename to reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-lights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-mask.png b/reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-mask.png rename to reskins-bobs/graphics/technology/plates/electric-chemical-furnace/electric-chemical-furnace-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-base.png b/reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-base.png rename to reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-highlights.png b/reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-lights.png b/reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-lights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-lights.png rename to reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-lights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-mask.png b/reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-mask.png rename to reskins-bobs/graphics/technology/plates/electric-mixing-furnace/electric-mixing-furnace-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-base.png b/reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-base.png rename to reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-highlights.png b/reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-mask.png b/reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/fluid-handling/fluid-handling-technology-mask.png rename to reskins-bobs/graphics/technology/plates/fluid-handling/fluid-handling-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-base.png b/reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-base.png rename to reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-highlights.png b/reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-lights.png b/reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-lights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-lights.png rename to reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-lights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-mask.png b/reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-mask.png rename to reskins-bobs/graphics/technology/plates/multi-purpose-furnace/multi-purpose-furnace-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/bobingabout-enrichment-process.png b/reskins-bobs/graphics/technology/plates/nuclear/bobingabout-enrichment-process.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/bobingabout-enrichment-process.png rename to reskins-bobs/graphics/technology/plates/nuclear/bobingabout-enrichment-process.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-cell-2.png b/reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-cell-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-cell-2.png rename to reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-cell-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-blue.png b/reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-blue.png rename to reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-blue.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-pink.png b/reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-pink.png rename to reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-alternate-pink.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-blue.png b/reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-blue.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-blue.png rename to reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-blue.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-pink.png b/reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-pink.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-pink.png rename to reskins-bobs/graphics/technology/plates/nuclear/deuterium-fuel-reprocessing-pink.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/nuclear-fuel-reprocessing.png b/reskins-bobs/graphics/technology/plates/nuclear/nuclear-fuel-reprocessing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/nuclear-fuel-reprocessing.png rename to reskins-bobs/graphics/technology/plates/nuclear/nuclear-fuel-reprocessing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/plutonium-fuel-cell.png b/reskins-bobs/graphics/technology/plates/nuclear/plutonium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/plutonium-fuel-cell.png rename to reskins-bobs/graphics/technology/plates/nuclear/plutonium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-fuel-reprocessing-alternate.png b/reskins-bobs/graphics/technology/plates/nuclear/thorium-fuel-reprocessing-alternate.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-fuel-reprocessing-alternate.png rename to reskins-bobs/graphics/technology/plates/nuclear/thorium-fuel-reprocessing-alternate.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-fuel-reprocessing.png b/reskins-bobs/graphics/technology/plates/nuclear/thorium-fuel-reprocessing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-fuel-reprocessing.png rename to reskins-bobs/graphics/technology/plates/nuclear/thorium-fuel-reprocessing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-plutonium-fuel-cell.png b/reskins-bobs/graphics/technology/plates/nuclear/thorium-plutonium-fuel-cell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-plutonium-fuel-cell.png rename to reskins-bobs/graphics/technology/plates/nuclear/thorium-plutonium-fuel-cell.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-processing.png b/reskins-bobs/graphics/technology/plates/nuclear/thorium-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/nuclear/thorium-processing.png rename to reskins-bobs/graphics/technology/plates/nuclear/thorium-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/alloy-processing.png b/reskins-bobs/graphics/technology/plates/plates/alloy-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/alloy-processing.png rename to reskins-bobs/graphics/technology/plates/plates/alloy-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/aluminium-processing.png b/reskins-bobs/graphics/technology/plates/plates/aluminium-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/aluminium-processing.png rename to reskins-bobs/graphics/technology/plates/plates/aluminium-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/ceramics.png b/reskins-bobs/graphics/technology/plates/plates/ceramics.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/ceramics.png rename to reskins-bobs/graphics/technology/plates/plates/ceramics.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/cobalt-processing.png b/reskins-bobs/graphics/technology/plates/plates/cobalt-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/cobalt-processing.png rename to reskins-bobs/graphics/technology/plates/plates/cobalt-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/gold-processing.png b/reskins-bobs/graphics/technology/plates/plates/gold-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/gold-processing.png rename to reskins-bobs/graphics/technology/plates/plates/gold-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/invar-processing.png b/reskins-bobs/graphics/technology/plates/plates/invar-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/invar-processing.png rename to reskins-bobs/graphics/technology/plates/plates/invar-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/lead-processing.png b/reskins-bobs/graphics/technology/plates/plates/lead-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/lead-processing.png rename to reskins-bobs/graphics/technology/plates/plates/lead-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/nickel-processing.png b/reskins-bobs/graphics/technology/plates/plates/nickel-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/nickel-processing.png rename to reskins-bobs/graphics/technology/plates/plates/nickel-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/nitinol-processing.png b/reskins-bobs/graphics/technology/plates/plates/nitinol-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/nitinol-processing.png rename to reskins-bobs/graphics/technology/plates/plates/nitinol-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/silicon-processing.png b/reskins-bobs/graphics/technology/plates/plates/silicon-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/silicon-processing.png rename to reskins-bobs/graphics/technology/plates/plates/silicon-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/steel-processing.png b/reskins-bobs/graphics/technology/plates/plates/steel-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/steel-processing.png rename to reskins-bobs/graphics/technology/plates/plates/steel-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/titanium-processing.png b/reskins-bobs/graphics/technology/plates/plates/titanium-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/titanium-processing.png rename to reskins-bobs/graphics/technology/plates/plates/titanium-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/tungsten-alloy-processing.png b/reskins-bobs/graphics/technology/plates/plates/tungsten-alloy-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/tungsten-alloy-processing.png rename to reskins-bobs/graphics/technology/plates/plates/tungsten-alloy-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/tungsten-processing.png b/reskins-bobs/graphics/technology/plates/plates/tungsten-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/tungsten-processing.png rename to reskins-bobs/graphics/technology/plates/plates/tungsten-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/plates/zinc-processing.png b/reskins-bobs/graphics/technology/plates/plates/zinc-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/plates/zinc-processing.png rename to reskins-bobs/graphics/technology/plates/plates/zinc-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/advanced-electronics-3.png b/reskins-bobs/graphics/technology/plates/processing-steps/advanced-electronics-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/advanced-electronics-3.png rename to reskins-bobs/graphics/technology/plates/processing-steps/advanced-electronics-3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/electrolysis.png b/reskins-bobs/graphics/technology/plates/processing-steps/electrolysis.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/electrolysis.png rename to reskins-bobs/graphics/technology/plates/processing-steps/electrolysis.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/gem-processing-1.png b/reskins-bobs/graphics/technology/plates/processing-steps/gem-processing-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/gem-processing-1.png rename to reskins-bobs/graphics/technology/plates/processing-steps/gem-processing-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/gem-processing-2.png b/reskins-bobs/graphics/technology/plates/processing-steps/gem-processing-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/gem-processing-2.png rename to reskins-bobs/graphics/technology/plates/processing-steps/gem-processing-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/grinding.png b/reskins-bobs/graphics/technology/plates/processing-steps/grinding.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/grinding.png rename to reskins-bobs/graphics/technology/plates/processing-steps/grinding.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/polishing.png b/reskins-bobs/graphics/technology/plates/processing-steps/polishing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/polishing.png rename to reskins-bobs/graphics/technology/plates/processing-steps/polishing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/void-fluid.png b/reskins-bobs/graphics/technology/plates/processing-steps/void-fluid.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/processing-steps/void-fluid.png rename to reskins-bobs/graphics/technology/plates/processing-steps/void-fluid.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/advanced-material-processing.png b/reskins-bobs/graphics/technology/plates/smelting/advanced-material-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/advanced-material-processing.png rename to reskins-bobs/graphics/technology/plates/smelting/advanced-material-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/alloy-processing-1.png b/reskins-bobs/graphics/technology/plates/smelting/alloy-processing-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/alloy-processing-1.png rename to reskins-bobs/graphics/technology/plates/smelting/alloy-processing-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/chemical-processing-1.png b/reskins-bobs/graphics/technology/plates/smelting/chemical-processing-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/chemical-processing-1.png rename to reskins-bobs/graphics/technology/plates/smelting/chemical-processing-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-chemical-furnace.png b/reskins-bobs/graphics/technology/plates/smelting/fluid-chemical-furnace.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-chemical-furnace.png rename to reskins-bobs/graphics/technology/plates/smelting/fluid-chemical-furnace.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-furnace.png b/reskins-bobs/graphics/technology/plates/smelting/fluid-furnace.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-furnace.png rename to reskins-bobs/graphics/technology/plates/smelting/fluid-furnace.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-mixing-furnace.png b/reskins-bobs/graphics/technology/plates/smelting/fluid-mixing-furnace.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/fluid-mixing-furnace.png rename to reskins-bobs/graphics/technology/plates/smelting/fluid-mixing-furnace.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/steel-chemical-furnace.png b/reskins-bobs/graphics/technology/plates/smelting/steel-chemical-furnace.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/steel-chemical-furnace.png rename to reskins-bobs/graphics/technology/plates/smelting/steel-chemical-furnace.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/smelting/steel-mixing-furnace.png b/reskins-bobs/graphics/technology/plates/smelting/steel-mixing-furnace.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/smelting/steel-mixing-furnace.png rename to reskins-bobs/graphics/technology/plates/smelting/steel-mixing-furnace.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-base.png b/reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-base.png rename to reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-highlights.png b/reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-highlights.png rename to reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-mask.png b/reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/plates/water-bore/water-bore-technology-mask.png rename to reskins-bobs/graphics/technology/plates/water-bore/water-bore-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-base.png b/reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-base.png rename to reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-highlights.png b/reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-highlights.png rename to reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-mask.png b/reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/accumulator/accumulator-technology-mask.png rename to reskins-bobs/graphics/technology/power/accumulator/accumulator-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-base.png b/reskins-bobs/graphics/technology/power/boiler/boiler-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-base.png rename to reskins-bobs/graphics/technology/power/boiler/boiler-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-highlights.png b/reskins-bobs/graphics/technology/power/boiler/boiler-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-highlights.png rename to reskins-bobs/graphics/technology/power/boiler/boiler-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-light.png b/reskins-bobs/graphics/technology/power/boiler/boiler-technology-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-light.png rename to reskins-bobs/graphics/technology/power/boiler/boiler-technology-light.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-mask.png b/reskins-bobs/graphics/technology/power/boiler/boiler-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/boiler/boiler-technology-mask.png rename to reskins-bobs/graphics/technology/power/boiler/boiler-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-base.png b/reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-base.png rename to reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-highlights.png b/reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-highlights.png rename to reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-mask.png b/reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/fluid-generator/fluid-generator-technology-mask.png rename to reskins-bobs/graphics/technology/power/fluid-generator/fluid-generator-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-aluminum-invar-technology-base.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-aluminum-invar-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-aluminum-invar-technology-base.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-aluminum-invar-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-base-technology-base.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-base-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-base-technology-base.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-base-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-gold-copper-technology-base.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-gold-copper-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-gold-copper-technology-base.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-gold-copper-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-silver-aluminum-technology-base.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-silver-aluminum-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-silver-aluminum-technology-base.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-silver-aluminum-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-silver-titanium-technology-base.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-silver-titanium-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-silver-titanium-technology-base.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-silver-titanium-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-technology-highlights.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-technology-highlights.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-technology-mask.png b/reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/heat-exchanger/heat-exchanger-technology-mask.png rename to reskins-bobs/graphics/technology/power/heat-exchanger/heat-exchanger-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-deuterium-blue-gold-copper-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-deuterium-blue-gold-copper-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-deuterium-blue-gold-copper-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-deuterium-blue-gold-copper-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-deuterium-pink-gold-copper-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-deuterium-pink-gold-copper-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-deuterium-pink-gold-copper-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-deuterium-pink-gold-copper-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-technology-highlights.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-technology-highlights.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-technology-mask.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-technology-mask.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-aluminum-invar-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-aluminum-invar-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-aluminum-invar-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-aluminum-invar-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-aluminum-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-aluminum-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-aluminum-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-aluminum-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-titanium-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-titanium-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-titanium-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-thorium-silver-titanium-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-aluminum-invar-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-aluminum-invar-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-aluminum-invar-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-aluminum-invar-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-base-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-base-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-base-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-base-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-gold-copper-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-gold-copper-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-gold-copper-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-gold-copper-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-aluminum-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-aluminum-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-aluminum-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-aluminum-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-titanium-technology-base.png b/reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-titanium-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-titanium-technology-base.png rename to reskins-bobs/graphics/technology/power/nuclear-power/nuclear-power-uranium-silver-titanium-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-base.png b/reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-base.png rename to reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-highlights.png b/reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-highlights.png rename to reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-light.png b/reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-light.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-light.png rename to reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-light.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-mask.png b/reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/oil-boiler/oil-boiler-technology-mask.png rename to reskins-bobs/graphics/technology/power/oil-boiler/oil-boiler-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-base.png b/reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-base.png rename to reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-highlights.png b/reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-highlights.png rename to reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-mask.png b/reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/power-poles/power-poles-technology-mask.png rename to reskins-bobs/graphics/technology/power/power-poles/power-poles-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-base.png b/reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-base.png rename to reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-highlights.png b/reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-highlights.png rename to reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-mask.png b/reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/solar-energy/solar-energy-technology-mask.png rename to reskins-bobs/graphics/technology/power/solar-energy/solar-energy-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-base.png b/reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-base.png rename to reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-highlights.png b/reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-highlights.png rename to reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-mask.png b/reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-engine/steam-engine-technology-mask.png rename to reskins-bobs/graphics/technology/power/steam-engine/steam-engine-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-base.png b/reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-base.png rename to reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-highlights.png b/reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-highlights.png rename to reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-mask.png b/reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/steam-turbine/steam-turbine-technology-mask.png rename to reskins-bobs/graphics/technology/power/steam-turbine/steam-turbine-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-base.png b/reskins-bobs/graphics/technology/power/substation/substation-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-base.png rename to reskins-bobs/graphics/technology/power/substation/substation-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-highlights.png b/reskins-bobs/graphics/technology/power/substation/substation-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-highlights.png rename to reskins-bobs/graphics/technology/power/substation/substation-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-mask.png b/reskins-bobs/graphics/technology/power/substation/substation-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/power/substation/substation-technology-mask.png rename to reskins-bobs/graphics/technology/power/substation/substation-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/revamp/heat-shield.png b/reskins-bobs/graphics/technology/revamp/heat-shield.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/revamp/heat-shield.png rename to reskins-bobs/graphics/technology/revamp/heat-shield.png diff --git a/reskins-bobs_2.1.5/graphics/technology/revamp/solid-fuel.png b/reskins-bobs/graphics/technology/revamp/solid-fuel.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/revamp/solid-fuel.png rename to reskins-bobs/graphics/technology/revamp/solid-fuel.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/advanced-research.png b/reskins-bobs/graphics/technology/technology/advanced-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/advanced-research.png rename to reskins-bobs/graphics/technology/technology/advanced-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/alien-research.png b/reskins-bobs/graphics/technology/technology/alien-research.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/alien-research.png rename to reskins-bobs/graphics/technology/technology/alien-research.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/lab.png b/reskins-bobs/graphics/technology/technology/lab.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/lab.png rename to reskins-bobs/graphics/technology/technology/lab.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-base.png b/reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-base.png rename to reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-highlights.png b/reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-highlights.png rename to reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-mask.png b/reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/science-pack/science-pack-technology-mask.png rename to reskins-bobs/graphics/technology/technology/science-pack/science-pack-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/technology/steam-power.png b/reskins-bobs/graphics/technology/technology/steam-power.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/technology/steam-power.png rename to reskins-bobs/graphics/technology/technology/steam-power.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-base.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-base.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-highlights.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-highlights.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-mask.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-mask.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-battery/vehicle-battery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-belt-immunity-equipment.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-belt-immunity-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-belt-immunity-equipment.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-belt-immunity-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-base.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-base.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-highlights.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-highlights.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-mask.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-mask.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-energy-shield/vehicle-energy-shield-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-engine-equipment.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-engine-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-engine-equipment.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-engine-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-base.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-base.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-highlights.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-highlights.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-mask.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-mask.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-fusion-cell/vehicle-fusion-cell-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-motor-equipment.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-motor-equipment.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-motor-equipment.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-motor-equipment.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-base.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-base.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-highlights.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-highlights.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-mask.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-mask.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-plasma-turret/vehicle-plasma-turret-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-base.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-base.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-highlights.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-highlights.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-mask.png b/reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-mask.png rename to reskins-bobs/graphics/technology/vehicle-equipment/vehicle-roboport/vehicle-roboport-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-armor-making-3.png b/reskins-bobs/graphics/technology/warfare/armor/bob-armor-making-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-armor-making-3.png rename to reskins-bobs/graphics/technology/warfare/armor/bob-armor-making-3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-armor-making-4.png b/reskins-bobs/graphics/technology/warfare/armor/bob-armor-making-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-armor-making-4.png rename to reskins-bobs/graphics/technology/warfare/armor/bob-armor-making-4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-3.png b/reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-3.png rename to reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-4.png b/reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-4.png rename to reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-5.png b/reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/armor/bob-power-armor-5.png rename to reskins-bobs/graphics/technology/warfare/armor/bob-power-armor-5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-atomic-artillery-shell.png b/reskins-bobs/graphics/technology/warfare/artillery-shells/bob-atomic-artillery-shell.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-atomic-artillery-shell.png rename to reskins-bobs/graphics/technology/warfare/artillery-shells/bob-atomic-artillery-shell.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-distractor-artillery-shells.png b/reskins-bobs/graphics/technology/warfare/artillery-shells/bob-distractor-artillery-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-distractor-artillery-shells.png rename to reskins-bobs/graphics/technology/warfare/artillery-shells/bob-distractor-artillery-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-explosive-artillery-shells.png b/reskins-bobs/graphics/technology/warfare/artillery-shells/bob-explosive-artillery-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-explosive-artillery-shells.png rename to reskins-bobs/graphics/technology/warfare/artillery-shells/bob-explosive-artillery-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-fire-artillery-shells.png b/reskins-bobs/graphics/technology/warfare/artillery-shells/bob-fire-artillery-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-fire-artillery-shells.png rename to reskins-bobs/graphics/technology/warfare/artillery-shells/bob-fire-artillery-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-poison-artillery-shells.png b/reskins-bobs/graphics/technology/warfare/artillery-shells/bob-poison-artillery-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-shells/bob-poison-artillery-shells.png rename to reskins-bobs/graphics/technology/warfare/artillery-shells/bob-poison-artillery-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-base.png b/reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-base.png rename to reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-mask.png b/reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/artillery-wagons/artillery-wagons-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-base.png b/reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-base.png rename to reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-mask.png b/reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/artillery/artillery-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/artillery/artillery-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bob-laser-rifle.png b/reskins-bobs/graphics/technology/warfare/bob-laser-rifle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bob-laser-rifle.png rename to reskins-bobs/graphics/technology/warfare/bob-laser-rifle.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bob-scatter-cannon-shells.png b/reskins-bobs/graphics/technology/warfare/bob-scatter-cannon-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bob-scatter-cannon-shells.png rename to reskins-bobs/graphics/technology/warfare/bob-scatter-cannon-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-acid-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-acid-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-acid-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-acid-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-ap-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-ap-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-ap-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-ap-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-electric-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-electric-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-electric-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-electric-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-flame-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-flame-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-flame-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-flame-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-he-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-he-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-he-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-he-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-plasma-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-plasma-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-plasma-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-plasma-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-poison-bullets.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-poison-bullets.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/bob-poison-bullets.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/bob-poison-bullets.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/uranium-ammo.png b/reskins-bobs/graphics/technology/warfare/bullet-magazines/uranium-ammo.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/bullet-magazines/uranium-ammo.png rename to reskins-bobs/graphics/technology/warfare/bullet-magazines/uranium-ammo.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/cordite-processing.png b/reskins-bobs/graphics/technology/warfare/cordite-processing.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/cordite-processing.png rename to reskins-bobs/graphics/technology/warfare/cordite-processing.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-base.png b/reskins-bobs/graphics/technology/warfare/drone/drone-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-base.png rename to reskins-bobs/graphics/technology/warfare/drone/drone-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/drone/drone-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/drone/drone-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-mask.png b/reskins-bobs/graphics/technology/warfare/drone/drone-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/drone/drone-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/drone/drone-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-base.png b/reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-base.png rename to reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-mask.png b/reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/gun-turrets/gun-turrets-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/gun-turrets/gun-turrets-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-1.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-1.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-1.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-1.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-2.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-2.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-2.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-2.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-3.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-3.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-3.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-3.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-4.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-4.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-4.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-4.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-5.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-5.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-5.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-5.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-6.png b/reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-6.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-6.png rename to reskins-bobs/graphics/technology/warfare/laser-rifle-ammo/bob-laser-rifle-ammo-6.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-base.png b/reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-base.png rename to reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-mask.png b/reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/laser-turrets/laser-turrets-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/laser-turrets/laser-turrets-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/mines/distractor-mine.png b/reskins-bobs/graphics/technology/warfare/mines/distractor-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/mines/distractor-mine.png rename to reskins-bobs/graphics/technology/warfare/mines/distractor-mine.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/mines/poison-mine.png b/reskins-bobs/graphics/technology/warfare/mines/poison-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/mines/poison-mine.png rename to reskins-bobs/graphics/technology/warfare/mines/poison-mine.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/mines/slowdown-mine.png b/reskins-bobs/graphics/technology/warfare/mines/slowdown-mine.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/mines/slowdown-mine.png rename to reskins-bobs/graphics/technology/warfare/mines/slowdown-mine.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-base.png b/reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-base.png rename to reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-mask.png b/reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/plasma-turrets/plasma-turrets-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-base.png b/reskins-bobs/graphics/technology/warfare/radar/radar-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-base.png rename to reskins-bobs/graphics/technology/warfare/radar/radar-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/radar/radar-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/radar/radar-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-mask.png b/reskins-bobs/graphics/technology/warfare/radar/radar-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/radar/radar-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/radar/radar-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/reinforced-wall.png b/reskins-bobs/graphics/technology/warfare/reinforced-wall.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/reinforced-wall.png rename to reskins-bobs/graphics/technology/warfare/reinforced-wall.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/robots/bob-laser-robot.png b/reskins-bobs/graphics/technology/warfare/robots/bob-laser-robot.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/robots/bob-laser-robot.png rename to reskins-bobs/graphics/technology/warfare/robots/bob-laser-robot.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-acid-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-acid-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-acid-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-acid-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-electric-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-electric-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-electric-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-electric-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-explosive-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-explosive-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-explosive-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-explosive-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-flame-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-flame-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-flame-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-flame-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-piercing-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-piercing-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-piercing-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-piercing-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-plasma-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-plasma-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-plasma-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-plasma-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-poison-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-poison-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-poison-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-poison-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-rocket.png b/reskins-bobs/graphics/technology/warfare/rocketry/bob-rocket.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/bob-rocket.png rename to reskins-bobs/graphics/technology/warfare/rocketry/bob-rocket.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/rocketry.png b/reskins-bobs/graphics/technology/warfare/rocketry/rocketry.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/rocketry/rocketry.png rename to reskins-bobs/graphics/technology/warfare/rocketry/rocketry.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-acid-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-acid-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-acid-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-acid-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-ap-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-ap-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-ap-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-ap-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-electric-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-electric-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-electric-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-electric-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-explosive-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-explosive-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-explosive-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-explosive-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-flame-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-flame-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-flame-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-flame-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-plasma-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-plasma-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-plasma-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-plasma-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-poison-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-poison-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-poison-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-poison-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-uranium-shells.png b/reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-uranium-shells.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/shotgun-shells/bob-shotgun-uranium-shells.png rename to reskins-bobs/graphics/technology/warfare/shotgun-shells/bob-shotgun-uranium-shells.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-base.png b/reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-base.png rename to reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-mask.png b/reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/sniper-turrets/sniper-turrets-technology-mask.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/heavy-spidertron.png b/reskins-bobs/graphics/technology/warfare/spidertron/heavy-spidertron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/heavy-spidertron.png rename to reskins-bobs/graphics/technology/warfare/spidertron/heavy-spidertron.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/logistic-spidertron.png b/reskins-bobs/graphics/technology/warfare/spidertron/logistic-spidertron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/logistic-spidertron.png rename to reskins-bobs/graphics/technology/warfare/spidertron/logistic-spidertron.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/tankotron.png b/reskins-bobs/graphics/technology/warfare/spidertron/tankotron.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/tankotron.png rename to reskins-bobs/graphics/technology/warfare/spidertron/tankotron.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/walking-vehicle.png b/reskins-bobs/graphics/technology/warfare/spidertron/walking-vehicle.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/spidertron/walking-vehicle.png rename to reskins-bobs/graphics/technology/warfare/spidertron/walking-vehicle.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-base.png b/reskins-bobs/graphics/technology/warfare/tank/tank-technology-base.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-base.png rename to reskins-bobs/graphics/technology/warfare/tank/tank-technology-base.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-highlights.png b/reskins-bobs/graphics/technology/warfare/tank/tank-technology-highlights.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-highlights.png rename to reskins-bobs/graphics/technology/warfare/tank/tank-technology-highlights.png diff --git a/reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-mask.png b/reskins-bobs/graphics/technology/warfare/tank/tank-technology-mask.png similarity index 100% rename from reskins-bobs_2.1.5/graphics/technology/warfare/tank/tank-technology-mask.png rename to reskins-bobs/graphics/technology/warfare/tank/tank-technology-mask.png diff --git a/reskins-bobs/info.json b/reskins-bobs/info.json new file mode 100644 index 00000000..bb977be7 --- /dev/null +++ b/reskins-bobs/info.json @@ -0,0 +1,31 @@ +{ + "name": "reskins-bobs", + "version": "2.1.6", + "factorio_version": "1.1", + "title": "Artisanal Reskins: Bob's Mods", + "author": "Kirazy", + "contact": "kirazy@live.com", + "homepage": "https://forums.factorio.com/viewtopic.php?f=51&t=85707", + "dependencies": [ + "base", + "reskins-library >= 2.1.6", + "? bobassembly", + "? bobelectronics", + "? bobgreenhouse", + "? bobinserters", + "? boblibrary", + "? boblogistics", + "? bobmining", + "? bobmodules", + "? bobores", + "? bobplates", + "? bobpower", + "? bobrevamp", + "? bobtech", + "? bobwarfare", + "(?) angelssmelting", + "(?) CircuitProcessing", + "(?) NauvisDay", + "! bobmods_gfxtweak" + ] +} \ No newline at end of file diff --git a/reskins-bobs_2.1.5/locale/en/reskins-bobs-locale.cfg b/reskins-bobs/locale/en/reskins-bobs-locale.cfg similarity index 100% rename from reskins-bobs_2.1.5/locale/en/reskins-bobs-locale.cfg rename to reskins-bobs/locale/en/reskins-bobs-locale.cfg diff --git a/reskins-bobs_2.1.5/locale/ru/reskins-bobs-locale.cfg b/reskins-bobs/locale/ru/reskins-bobs-locale.cfg similarity index 100% rename from reskins-bobs_2.1.5/locale/ru/reskins-bobs-locale.cfg rename to reskins-bobs/locale/ru/reskins-bobs-locale.cfg diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly-updates.lua b/reskins-bobs/prototypes/entity/assembly-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly-updates.lua rename to reskins-bobs/prototypes/entity/assembly-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly.lua b/reskins-bobs/prototypes/entity/assembly.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly.lua rename to reskins-bobs/prototypes/entity/assembly.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/centrifuge.lua b/reskins-bobs/prototypes/entity/assembly/centrifuge.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/centrifuge.lua rename to reskins-bobs/prototypes/entity/assembly/centrifuge.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/distillery.lua b/reskins-bobs/prototypes/entity/assembly/distillery.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/distillery.lua rename to reskins-bobs/prototypes/entity/assembly/distillery.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/electric-furnace.lua b/reskins-bobs/prototypes/entity/assembly/electric-furnace.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/electric-furnace.lua rename to reskins-bobs/prototypes/entity/assembly/electric-furnace.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/electrolyser.lua b/reskins-bobs/prototypes/entity/assembly/electrolyser.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/electrolyser.lua rename to reskins-bobs/prototypes/entity/assembly/electrolyser.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/steel-furnace.lua b/reskins-bobs/prototypes/entity/assembly/steel-furnace.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/steel-furnace.lua rename to reskins-bobs/prototypes/entity/assembly/steel-furnace.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/assembly/stone-furnace.lua b/reskins-bobs/prototypes/entity/assembly/stone-furnace.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/assembly/stone-furnace.lua rename to reskins-bobs/prototypes/entity/assembly/stone-furnace.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/greenhouse/greenhouse.lua b/reskins-bobs/prototypes/entity/greenhouse/greenhouse.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/greenhouse/greenhouse.lua rename to reskins-bobs/prototypes/entity/greenhouse/greenhouse.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/cargo-wagon.lua b/reskins-bobs/prototypes/entity/logistics/cargo-wagon.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/cargo-wagon.lua rename to reskins-bobs/prototypes/entity/logistics/cargo-wagon.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/chest.lua b/reskins-bobs/prototypes/entity/logistics/chest.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/chest.lua rename to reskins-bobs/prototypes/entity/logistics/chest.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/construction-robots.lua b/reskins-bobs/prototypes/entity/logistics/construction-robots.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/construction-robots.lua rename to reskins-bobs/prototypes/entity/logistics/construction-robots.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/fluid-wagon.lua b/reskins-bobs/prototypes/entity/logistics/fluid-wagon.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/fluid-wagon.lua rename to reskins-bobs/prototypes/entity/logistics/fluid-wagon.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/inserter-overhaul.lua b/reskins-bobs/prototypes/entity/logistics/inserter-overhaul.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/inserter-overhaul.lua rename to reskins-bobs/prototypes/entity/logistics/inserter-overhaul.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/inserter.lua b/reskins-bobs/prototypes/entity/logistics/inserter.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/inserter.lua rename to reskins-bobs/prototypes/entity/logistics/inserter.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/locomotive.lua b/reskins-bobs/prototypes/entity/logistics/locomotive.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/locomotive.lua rename to reskins-bobs/prototypes/entity/logistics/locomotive.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-robots.lua b/reskins-bobs/prototypes/entity/logistics/logistic-robots.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-robots.lua rename to reskins-bobs/prototypes/entity/logistics/logistic-robots.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-zone-expander.lua b/reskins-bobs/prototypes/entity/logistics/logistic-zone-expander.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-zone-expander.lua rename to reskins-bobs/prototypes/entity/logistics/logistic-zone-expander.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-zone-interface.lua b/reskins-bobs/prototypes/entity/logistics/logistic-zone-interface.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/logistic-zone-interface.lua rename to reskins-bobs/prototypes/entity/logistics/logistic-zone-interface.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/pipe.lua b/reskins-bobs/prototypes/entity/logistics/pipe.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/pipe.lua rename to reskins-bobs/prototypes/entity/logistics/pipe.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/pump.lua b/reskins-bobs/prototypes/entity/logistics/pump.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/pump.lua rename to reskins-bobs/prototypes/entity/logistics/pump.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/robo-charge-port.lua b/reskins-bobs/prototypes/entity/logistics/robo-charge-port.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/robo-charge-port.lua rename to reskins-bobs/prototypes/entity/logistics/robo-charge-port.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/robochest.lua b/reskins-bobs/prototypes/entity/logistics/robochest.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/robochest.lua rename to reskins-bobs/prototypes/entity/logistics/robochest.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/roboport.lua b/reskins-bobs/prototypes/entity/logistics/roboport.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/roboport.lua rename to reskins-bobs/prototypes/entity/logistics/roboport.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/storage-tank-all-corners.lua b/reskins-bobs/prototypes/entity/logistics/storage-tank-all-corners.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/storage-tank-all-corners.lua rename to reskins-bobs/prototypes/entity/logistics/storage-tank-all-corners.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/storage-tank.lua b/reskins-bobs/prototypes/entity/logistics/storage-tank.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/storage-tank.lua rename to reskins-bobs/prototypes/entity/logistics/storage-tank.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/logistics/valve.lua b/reskins-bobs/prototypes/entity/logistics/valve.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/logistics/valve.lua rename to reskins-bobs/prototypes/entity/logistics/valve.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/mining/mining-drill.lua b/reskins-bobs/prototypes/entity/mining/mining-drill.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/mining/mining-drill.lua rename to reskins-bobs/prototypes/entity/mining/mining-drill.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/mining/pumpjack.lua b/reskins-bobs/prototypes/entity/mining/pumpjack.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/mining/pumpjack.lua rename to reskins-bobs/prototypes/entity/mining/pumpjack.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/modules/beacon-module-slots.lua b/reskins-bobs/prototypes/entity/modules/beacon-module-slots.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/modules/beacon-module-slots.lua rename to reskins-bobs/prototypes/entity/modules/beacon-module-slots.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/modules/beacon.lua b/reskins-bobs/prototypes/entity/modules/beacon.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/modules/beacon.lua rename to reskins-bobs/prototypes/entity/modules/beacon.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/ores/fluids.lua b/reskins-bobs/prototypes/entity/ores/fluids.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/ores/fluids.lua rename to reskins-bobs/prototypes/entity/ores/fluids.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/ores/ores-updates.lua b/reskins-bobs/prototypes/entity/ores/ores-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/ores/ores-updates.lua rename to reskins-bobs/prototypes/entity/ores/ores-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/ores/ores.lua b/reskins-bobs/prototypes/entity/ores/ores.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/ores/ores.lua rename to reskins-bobs/prototypes/entity/ores/ores.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/plates/air-and-water-pump.lua b/reskins-bobs/prototypes/entity/plates/air-and-water-pump.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/plates/air-and-water-pump.lua rename to reskins-bobs/prototypes/entity/plates/air-and-water-pump.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/plates/small-storage-tank.lua b/reskins-bobs/prototypes/entity/plates/small-storage-tank.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/plates/small-storage-tank.lua rename to reskins-bobs/prototypes/entity/plates/small-storage-tank.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/plates/void-pump.lua b/reskins-bobs/prototypes/entity/plates/void-pump.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/plates/void-pump.lua rename to reskins-bobs/prototypes/entity/plates/void-pump.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/accumulator.lua b/reskins-bobs/prototypes/entity/power/accumulator.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/accumulator.lua rename to reskins-bobs/prototypes/entity/power/accumulator.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/big-electric-pole.lua b/reskins-bobs/prototypes/entity/power/big-electric-pole.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/big-electric-pole.lua rename to reskins-bobs/prototypes/entity/power/big-electric-pole.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/boiler.lua b/reskins-bobs/prototypes/entity/power/boiler.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/boiler.lua rename to reskins-bobs/prototypes/entity/power/boiler.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/burner-electric-generator.lua b/reskins-bobs/prototypes/entity/power/burner-electric-generator.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/burner-electric-generator.lua rename to reskins-bobs/prototypes/entity/power/burner-electric-generator.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/generator.lua b/reskins-bobs/prototypes/entity/power/generator.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/generator.lua rename to reskins-bobs/prototypes/entity/power/generator.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/heat-exchanger.lua b/reskins-bobs/prototypes/entity/power/heat-exchanger.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/heat-exchanger.lua rename to reskins-bobs/prototypes/entity/power/heat-exchanger.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/heat-pipe.lua b/reskins-bobs/prototypes/entity/power/heat-pipe.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/heat-pipe.lua rename to reskins-bobs/prototypes/entity/power/heat-pipe.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/heat-source.lua b/reskins-bobs/prototypes/entity/power/heat-source.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/heat-source.lua rename to reskins-bobs/prototypes/entity/power/heat-source.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/medium-electric-pole.lua b/reskins-bobs/prototypes/entity/power/medium-electric-pole.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/medium-electric-pole.lua rename to reskins-bobs/prototypes/entity/power/medium-electric-pole.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/nuclear-reactor.lua b/reskins-bobs/prototypes/entity/power/nuclear-reactor.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/nuclear-reactor.lua rename to reskins-bobs/prototypes/entity/power/nuclear-reactor.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/solar-panel.lua b/reskins-bobs/prototypes/entity/power/solar-panel.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/solar-panel.lua rename to reskins-bobs/prototypes/entity/power/solar-panel.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/steam-engine.lua b/reskins-bobs/prototypes/entity/power/steam-engine.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/steam-engine.lua rename to reskins-bobs/prototypes/entity/power/steam-engine.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/steam-turbine.lua b/reskins-bobs/prototypes/entity/power/steam-turbine.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/steam-turbine.lua rename to reskins-bobs/prototypes/entity/power/steam-turbine.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/power/substation.lua b/reskins-bobs/prototypes/entity/power/substation.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/power/substation.lua rename to reskins-bobs/prototypes/entity/power/substation.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/technology/lab.lua b/reskins-bobs/prototypes/entity/technology/lab.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/technology/lab.lua rename to reskins-bobs/prototypes/entity/technology/lab.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/artillery-turret.lua b/reskins-bobs/prototypes/entity/warfare/artillery-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/artillery-turret.lua rename to reskins-bobs/prototypes/entity/warfare/artillery-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/artillery-wagon.lua b/reskins-bobs/prototypes/entity/warfare/artillery-wagon.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/artillery-wagon.lua rename to reskins-bobs/prototypes/entity/warfare/artillery-wagon.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/beam.lua b/reskins-bobs/prototypes/entity/warfare/beam.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/beam.lua rename to reskins-bobs/prototypes/entity/warfare/beam.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/combat-robots.lua b/reskins-bobs/prototypes/entity/warfare/combat-robots.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/combat-robots.lua rename to reskins-bobs/prototypes/entity/warfare/combat-robots.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/drone.lua b/reskins-bobs/prototypes/entity/warfare/drone.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/drone.lua rename to reskins-bobs/prototypes/entity/warfare/drone.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/gate.lua b/reskins-bobs/prototypes/entity/warfare/gate.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/gate.lua rename to reskins-bobs/prototypes/entity/warfare/gate.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/gun-turret.lua b/reskins-bobs/prototypes/entity/warfare/gun-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/gun-turret.lua rename to reskins-bobs/prototypes/entity/warfare/gun-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/land-mines.lua b/reskins-bobs/prototypes/entity/warfare/land-mines.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/land-mines.lua rename to reskins-bobs/prototypes/entity/warfare/land-mines.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/laser-robot.lua b/reskins-bobs/prototypes/entity/warfare/laser-robot.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/laser-robot.lua rename to reskins-bobs/prototypes/entity/warfare/laser-robot.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/laser-turret.lua b/reskins-bobs/prototypes/entity/warfare/laser-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/laser-turret.lua rename to reskins-bobs/prototypes/entity/warfare/laser-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/plasma-turret.lua b/reskins-bobs/prototypes/entity/warfare/plasma-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/plasma-turret.lua rename to reskins-bobs/prototypes/entity/warfare/plasma-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/radar.lua b/reskins-bobs/prototypes/entity/warfare/radar.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/radar.lua rename to reskins-bobs/prototypes/entity/warfare/radar.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/sniper-turret.lua b/reskins-bobs/prototypes/entity/warfare/sniper-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/sniper-turret.lua rename to reskins-bobs/prototypes/entity/warfare/sniper-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/spidertron.lua b/reskins-bobs/prototypes/entity/warfare/spidertron.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/spidertron.lua rename to reskins-bobs/prototypes/entity/warfare/spidertron.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/tank.lua b/reskins-bobs/prototypes/entity/warfare/tank.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/tank.lua rename to reskins-bobs/prototypes/entity/warfare/tank.lua diff --git a/reskins-bobs_2.1.5/prototypes/entity/warfare/wall.lua b/reskins-bobs/prototypes/entity/warfare/wall.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/entity/warfare/wall.lua rename to reskins-bobs/prototypes/entity/warfare/wall.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/battery.lua b/reskins-bobs/prototypes/equipment/equipment/battery.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/battery.lua rename to reskins-bobs/prototypes/equipment/equipment/battery.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/energy-shield.lua b/reskins-bobs/prototypes/equipment/equipment/energy-shield.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/energy-shield.lua rename to reskins-bobs/prototypes/equipment/equipment/energy-shield.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/exoskeleton.lua b/reskins-bobs/prototypes/equipment/equipment/exoskeleton.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/exoskeleton.lua rename to reskins-bobs/prototypes/equipment/equipment/exoskeleton.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/fusion-reactor.lua b/reskins-bobs/prototypes/equipment/equipment/fusion-reactor.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/fusion-reactor.lua rename to reskins-bobs/prototypes/equipment/equipment/fusion-reactor.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/laser-defense.lua b/reskins-bobs/prototypes/equipment/equipment/laser-defense.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/laser-defense.lua rename to reskins-bobs/prototypes/equipment/equipment/laser-defense.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/night-vision.lua b/reskins-bobs/prototypes/equipment/equipment/night-vision.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/night-vision.lua rename to reskins-bobs/prototypes/equipment/equipment/night-vision.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/personal-roboport.lua b/reskins-bobs/prototypes/equipment/equipment/personal-roboport.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/personal-roboport.lua rename to reskins-bobs/prototypes/equipment/equipment/personal-roboport.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/roboport-parts.lua b/reskins-bobs/prototypes/equipment/equipment/roboport-parts.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/roboport-parts.lua rename to reskins-bobs/prototypes/equipment/equipment/roboport-parts.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/equipment/solar-panel.lua b/reskins-bobs/prototypes/equipment/equipment/solar-panel.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/equipment/solar-panel.lua rename to reskins-bobs/prototypes/equipment/equipment/solar-panel.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-battery.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-battery.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-battery.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-battery.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-belt-immunity.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-belt-immunity.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-belt-immunity.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-belt-immunity.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-energy-shield.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-energy-shield.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-energy-shield.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-energy-shield.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-fusion-cell.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-fusion-cell.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-fusion-cell.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-fusion-cell.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-fusion-reactor.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-fusion-reactor.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-fusion-reactor.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-fusion-reactor.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-laser-defense.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-laser-defense.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-laser-defense.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-laser-defense.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-mobility.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-mobility.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-mobility.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-mobility.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-plasma-turret.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-plasma-turret.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-plasma-turret.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-plasma-turret.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-roboport-parts.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-roboport-parts.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-roboport-parts.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-roboport-parts.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-roboport.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-roboport.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-roboport.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-roboport.lua diff --git a/reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-solar-panel.lua b/reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-solar-panel.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/equipment/vehicle-equipment/vehicle-solar-panel.lua rename to reskins-bobs/prototypes/equipment/vehicle-equipment/vehicle-solar-panel.lua diff --git a/reskins-bobs_2.1.5/prototypes/functions/circuit-sprites.lua b/reskins-bobs/prototypes/functions/circuit-sprites.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/functions/circuit-sprites.lua rename to reskins-bobs/prototypes/functions/circuit-sprites.lua diff --git a/reskins-bobs_2.1.5/prototypes/functions/entities/assembly/assembling-machine.lua b/reskins-bobs/prototypes/functions/entities/assembly/assembling-machine.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/functions/entities/assembly/assembling-machine.lua rename to reskins-bobs/prototypes/functions/entities/assembly/assembling-machine.lua diff --git a/reskins-bobs_2.1.5/prototypes/functions/entity-functions.lua b/reskins-bobs/prototypes/functions/entity-functions.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/functions/entity-functions.lua rename to reskins-bobs/prototypes/functions/entity-functions.lua diff --git a/reskins-bobs_2.1.5/prototypes/functions/functions.lua b/reskins-bobs/prototypes/functions/functions.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/functions/functions.lua rename to reskins-bobs/prototypes/functions/functions.lua diff --git a/reskins-bobs_2.1.5/prototypes/functions/triggers.lua b/reskins-bobs/prototypes/functions/triggers.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/functions/triggers.lua rename to reskins-bobs/prototypes/functions/triggers.lua diff --git a/reskins-bobs_2.1.5/prototypes/item-group/item-group.lua b/reskins-bobs/prototypes/item-group/item-group.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item-group/item-group.lua rename to reskins-bobs/prototypes/item-group/item-group.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/electronics.lua b/reskins-bobs/prototypes/item/electronics.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/electronics.lua rename to reskins-bobs/prototypes/item/electronics.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/electronics/circuits.lua b/reskins-bobs/prototypes/item/electronics/circuits.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/electronics/circuits.lua rename to reskins-bobs/prototypes/item/electronics/circuits.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/enemies.lua b/reskins-bobs/prototypes/item/enemies.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/enemies.lua rename to reskins-bobs/prototypes/item/enemies.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/greenhouse.lua b/reskins-bobs/prototypes/item/greenhouse.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/greenhouse.lua rename to reskins-bobs/prototypes/item/greenhouse.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/logistics.lua b/reskins-bobs/prototypes/item/logistics.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/logistics.lua rename to reskins-bobs/prototypes/item/logistics.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/modules.lua b/reskins-bobs/prototypes/item/modules.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/modules.lua rename to reskins-bobs/prototypes/item/modules.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/ores.lua b/reskins-bobs/prototypes/item/ores.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/ores.lua rename to reskins-bobs/prototypes/item/ores.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/plates.lua b/reskins-bobs/prototypes/item/plates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/plates.lua rename to reskins-bobs/prototypes/item/plates.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/plates/battery.lua b/reskins-bobs/prototypes/item/plates/battery.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/plates/battery.lua rename to reskins-bobs/prototypes/item/plates/battery.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/revamp.lua b/reskins-bobs/prototypes/item/revamp.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/revamp.lua rename to reskins-bobs/prototypes/item/revamp.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/technology.lua b/reskins-bobs/prototypes/item/technology.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/technology.lua rename to reskins-bobs/prototypes/item/technology.lua diff --git a/reskins-bobs_2.1.5/prototypes/item/warfare.lua b/reskins-bobs/prototypes/item/warfare.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/item/warfare.lua rename to reskins-bobs/prototypes/item/warfare.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/assembly.lua b/reskins-bobs/prototypes/technology/assembly.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/assembly.lua rename to reskins-bobs/prototypes/technology/assembly.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/classes.lua b/reskins-bobs/prototypes/technology/classes.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/classes.lua rename to reskins-bobs/prototypes/technology/classes.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/electronics-updates.lua b/reskins-bobs/prototypes/technology/electronics-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/electronics-updates.lua rename to reskins-bobs/prototypes/technology/electronics-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/electronics.lua b/reskins-bobs/prototypes/technology/electronics.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/electronics.lua rename to reskins-bobs/prototypes/technology/electronics.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/greenhouse.lua b/reskins-bobs/prototypes/technology/greenhouse.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/greenhouse.lua rename to reskins-bobs/prototypes/technology/greenhouse.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/inserters.lua b/reskins-bobs/prototypes/technology/inserters.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/inserters.lua rename to reskins-bobs/prototypes/technology/inserters.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/logistics.lua b/reskins-bobs/prototypes/technology/logistics.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/logistics.lua rename to reskins-bobs/prototypes/technology/logistics.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/mining.lua b/reskins-bobs/prototypes/technology/mining.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/mining.lua rename to reskins-bobs/prototypes/technology/mining.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/module-permutations.lua b/reskins-bobs/prototypes/technology/module-permutations.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/module-permutations.lua rename to reskins-bobs/prototypes/technology/module-permutations.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/module.lua b/reskins-bobs/prototypes/technology/module.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/module.lua rename to reskins-bobs/prototypes/technology/module.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/personal-equipment.lua b/reskins-bobs/prototypes/technology/personal-equipment.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/personal-equipment.lua rename to reskins-bobs/prototypes/technology/personal-equipment.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/plates.lua b/reskins-bobs/prototypes/technology/plates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/plates.lua rename to reskins-bobs/prototypes/technology/plates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/power-updates.lua b/reskins-bobs/prototypes/technology/power-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/power-updates.lua rename to reskins-bobs/prototypes/technology/power-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/power.lua b/reskins-bobs/prototypes/technology/power.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/power.lua rename to reskins-bobs/prototypes/technology/power.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/revamp-updates.lua b/reskins-bobs/prototypes/technology/revamp-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/revamp-updates.lua rename to reskins-bobs/prototypes/technology/revamp-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/revamp.lua b/reskins-bobs/prototypes/technology/revamp.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/revamp.lua rename to reskins-bobs/prototypes/technology/revamp.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/technology-updates.lua b/reskins-bobs/prototypes/technology/technology-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/technology-updates.lua rename to reskins-bobs/prototypes/technology/technology-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/technology.lua b/reskins-bobs/prototypes/technology/technology.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/technology.lua rename to reskins-bobs/prototypes/technology/technology.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/vehicle-equipment.lua b/reskins-bobs/prototypes/technology/vehicle-equipment.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/vehicle-equipment.lua rename to reskins-bobs/prototypes/technology/vehicle-equipment.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/warfare-updates.lua b/reskins-bobs/prototypes/technology/warfare-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/warfare-updates.lua rename to reskins-bobs/prototypes/technology/warfare-updates.lua diff --git a/reskins-bobs_2.1.5/prototypes/technology/warfare.lua b/reskins-bobs/prototypes/technology/warfare.lua similarity index 100% rename from reskins-bobs_2.1.5/prototypes/technology/warfare.lua rename to reskins-bobs/prototypes/technology/warfare.lua diff --git a/reskins-bobs_2.1.5/settings-updates.lua b/reskins-bobs/settings-updates.lua similarity index 100% rename from reskins-bobs_2.1.5/settings-updates.lua rename to reskins-bobs/settings-updates.lua diff --git a/reskins-bobs_2.1.5/settings.lua b/reskins-bobs/settings.lua similarity index 100% rename from reskins-bobs_2.1.5/settings.lua rename to reskins-bobs/settings.lua diff --git a/reskins-bobs_2.1.5/thumbnail.png b/reskins-bobs/thumbnail.png similarity index 100% rename from reskins-bobs_2.1.5/thumbnail.png rename to reskins-bobs/thumbnail.png diff --git a/reskins-bobs_2.1.5/graphics/empty.png b/reskins-bobs_2.1.5/graphics/empty.png deleted file mode 100644 index 00765565..00000000 Binary files a/reskins-bobs_2.1.5/graphics/empty.png and /dev/null differ diff --git a/reskins-bobs_2.1.5/info.json b/reskins-bobs_2.1.5/info.json deleted file mode 100644 index 754a900e..00000000 --- a/reskins-bobs_2.1.5/info.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "reskins-bobs", - "version": "2.1.5", - "factorio_version": "1.1", - "title": "Artisanal Reskins: Bob's Mods", - "author": "Kirazy", - "contact": "kirazy@live.com", - "homepage": "https://forums.factorio.com/viewtopic.php?f=51&t=85707", - "dependencies": [ - "base", - "reskins-library >= 2.1.0", - "? bobassembly", - "? bobelectronics", - "? bobgreenhouse", - "? bobinserters", - "? boblibrary", - "? boblogistics", - "? bobmining", - "? bobmodules", - "? bobores", - "? bobplates", - "? bobpower", - "? bobrevamp", - "? bobtech", - "? bobwarfare", - "(?) angelssmelting", - "(?) CircuitProcessing", - "(?) NauvisDay", - "! bobmods_gfxtweak" - ] -} \ No newline at end of file diff --git a/reskins-compatibility_2.1.6/changelog.txt b/reskins-compatibility/changelog.txt similarity index 100% rename from reskins-compatibility_2.1.6/changelog.txt rename to reskins-compatibility/changelog.txt diff --git a/reskins-compatibility_2.1.6/data-final-fixes.lua b/reskins-compatibility/data-final-fixes.lua similarity index 100% rename from reskins-compatibility_2.1.6/data-final-fixes.lua rename to reskins-compatibility/data-final-fixes.lua diff --git a/reskins-compatibility_2.1.6/data-updates.lua b/reskins-compatibility/data-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/data-updates.lua rename to reskins-compatibility/data-updates.lua diff --git a/reskins-compatibility_2.1.6/data.lua b/reskins-compatibility/data.lua similarity index 100% rename from reskins-compatibility_2.1.6/data.lua rename to reskins-compatibility/data.lua diff --git a/reskins-compatibility/graphics/entity/classic-beacon/beacon/beacon-highlights.png b/reskins-compatibility/graphics/entity/classic-beacon/beacon/beacon-highlights.png new file mode 100644 index 00000000..f011cb96 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-beacon/beacon/beacon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/beacon-mask.png b/reskins-compatibility/graphics/entity/classic-beacon/beacon/beacon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/beacon-mask.png rename to reskins-compatibility/graphics/entity/classic-beacon/beacon/beacon-mask.png diff --git a/reskins-compatibility/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png b/reskins-compatibility/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png new file mode 100644 index 00000000..6f529152 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/hr-beacon-mask.png b/reskins-compatibility/graphics/entity/classic-beacon/beacon/hr-beacon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/hr-beacon-mask.png rename to reskins-compatibility/graphics/entity/classic-beacon/beacon/hr-beacon-mask.png diff --git a/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png new file mode 100644 index 00000000..3229bee1 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png differ diff --git a/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png new file mode 100644 index 00000000..50fce7ea Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png differ diff --git a/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png new file mode 100644 index 00000000..4c791910 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png differ diff --git a/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png new file mode 100644 index 00000000..397569f5 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-E.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-E.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-E.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-E.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-N.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-N.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-N.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-N.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-S.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-S.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-S.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-S.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-W.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-W.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-W.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/hr-area-drill-W.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-E-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-N-mask.png diff --git a/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png new file mode 100644 index 00000000..18c7ef94 Binary files /dev/null and b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-W-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-E-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-N-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-S-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-highlights.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-highlights.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-mask.png b/reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-mask.png rename to reskins-compatibility/graphics/entity/classic-mining-drill/electric-mining-drill/mining-drill-W-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-highlights.png new file mode 100644 index 00000000..60264513 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-mask.png b/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-mask.png new file mode 100644 index 00000000..7c0fed21 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/arboretum/arboretum-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/bioprocessor/bioprocessor-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/bioprocessor/bioprocessor-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/bioprocessor/bioprocessor-highlights.png rename to reskins-compatibility/graphics/entity/extendedangels/bioprocessor/bioprocessor-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/bioprocessor/bioprocessor-mask.png b/reskins-compatibility/graphics/entity/extendedangels/bioprocessor/bioprocessor-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/bioprocessor/bioprocessor-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/bioprocessor/bioprocessor-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-base-patch.png b/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-base-patch.png new file mode 100644 index 00000000..36e41dda Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-base-patch.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-highlights.png new file mode 100644 index 00000000..8b58aa58 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-mask.png b/reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/butchery/butchery-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/composter/composter-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/composter/composter-highlights.png new file mode 100644 index 00000000..729d9139 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/composter/composter-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/composter/composter-mask.png b/reskins-compatibility/graphics/entity/extendedangels/composter/composter-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/composter/composter-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/composter/composter-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/field/field-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/field/field-highlights.png new file mode 100644 index 00000000..7e92cc30 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/field/field-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/field/field-mask.png b/reskins-compatibility/graphics/entity/extendedangels/field/field-mask.png new file mode 100644 index 00000000..d91b86c1 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/field/field-mask.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png new file mode 100644 index 00000000..92bd5ded Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png new file mode 100644 index 00000000..753f18fe Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-shadow.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-shadow.png new file mode 100644 index 00000000..f500c513 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-shadow.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png new file mode 100644 index 00000000..9367668f Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-light.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-light.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-light.png rename to reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-light.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-mask.png b/reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/hatchery/hatchery-working-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png new file mode 100644 index 00000000..6cbc79e8 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png b/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png new file mode 100644 index 00000000..e0e2ea4b Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/press/press-base-patch.png b/reskins-compatibility/graphics/entity/extendedangels/press/press-base-patch.png new file mode 100644 index 00000000..1ae0fd2e Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/press/press-base-patch.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/press/press-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/press/press-highlights.png new file mode 100644 index 00000000..fc52a81a Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/press/press-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/press/press-mask.png b/reskins-compatibility/graphics/entity/extendedangels/press/press-mask.png new file mode 100644 index 00000000..a4a819c2 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/press/press-mask.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png new file mode 100644 index 00000000..a279031a Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-biter/refugium-biter-mask.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-biter/refugium-biter-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-biter/refugium-biter-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/refugium-biter/refugium-biter-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png new file mode 100644 index 00000000..e8ffce84 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png new file mode 100644 index 00000000..dead0d7d Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png new file mode 100644 index 00000000..d68a07e9 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png new file mode 100644 index 00000000..563b61d5 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png new file mode 100644 index 00000000..61164cb8 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/seed-extractor/seed-extractor-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/seed-extractor/seed-extractor-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/seed-extractor/seed-extractor-highlights.png rename to reskins-compatibility/graphics/entity/extendedangels/seed-extractor/seed-extractor-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/seed-extractor/seed-extractor-mask.png b/reskins-compatibility/graphics/entity/extendedangels/seed-extractor/seed-extractor-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/seed-extractor/seed-extractor-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/seed-extractor/seed-extractor-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png new file mode 100644 index 00000000..79da5c6d Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/tree-generator/tree-generator-mask.png b/reskins-compatibility/graphics/entity/extendedangels/tree-generator/tree-generator-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/tree-generator/tree-generator-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/tree-generator/tree-generator-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png new file mode 100644 index 00000000..a5c9e149 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/hr-warehouse-mask.png b/reskins-compatibility/graphics/entity/extendedangels/warehouse/hr-warehouse-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/hr-warehouse-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/warehouse/hr-warehouse-mask.png diff --git a/reskins-compatibility/graphics/entity/extendedangels/warehouse/warehouse-highlights.png b/reskins-compatibility/graphics/entity/extendedangels/warehouse/warehouse-highlights.png new file mode 100644 index 00000000..ef92f217 Binary files /dev/null and b/reskins-compatibility/graphics/entity/extendedangels/warehouse/warehouse-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/warehouse-mask.png b/reskins-compatibility/graphics/entity/extendedangels/warehouse/warehouse-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/warehouse-mask.png rename to reskins-compatibility/graphics/entity/extendedangels/warehouse/warehouse-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/hr-loader-base.png b/reskins-compatibility/graphics/entity/loaderredux/loader/hr-loader-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/hr-loader-base.png rename to reskins-compatibility/graphics/entity/loaderredux/loader/hr-loader-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/hr-loader-mask.png b/reskins-compatibility/graphics/entity/loaderredux/loader/hr-loader-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/hr-loader-mask.png rename to reskins-compatibility/graphics/entity/loaderredux/loader/hr-loader-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/loader-base.png b/reskins-compatibility/graphics/entity/loaderredux/loader/loader-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/loader-base.png rename to reskins-compatibility/graphics/entity/loaderredux/loader/loader-base.png diff --git a/reskins-compatibility/graphics/entity/loaderredux/loader/loader-mask.png b/reskins-compatibility/graphics/entity/loaderredux/loader/loader-mask.png new file mode 100644 index 00000000..9e1fa0d8 Binary files /dev/null and b/reskins-compatibility/graphics/entity/loaderredux/loader/loader-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-filter-inserter-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-filter-inserter-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-filter-inserter-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-filter-inserter-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-filter-structure-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-filter-structure-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-filter-structure-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-filter-structure-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-inserter-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-inserter-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-inserter-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-inserter-base.png diff --git a/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png new file mode 100644 index 00000000..9a4f24c5 Binary files /dev/null and b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png differ diff --git a/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png new file mode 100644 index 00000000..43734e2a Binary files /dev/null and b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png new file mode 100644 index 00000000..a65ce73b Binary files /dev/null and b/reskins-compatibility/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-filter-inserter-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-filter-inserter-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-filter-inserter-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-filter-inserter-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-filter-structure-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-filter-structure-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-filter-structure-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-filter-structure-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-inserter-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-inserter-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-inserter-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-inserter-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-base.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-base.png rename to reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-base.png diff --git a/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png new file mode 100644 index 00000000..b84f54d0 Binary files /dev/null and b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png new file mode 100644 index 00000000..d150dd57 Binary files /dev/null and b/reskins-compatibility/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-base.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-base.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-light.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-light.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-light.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-light.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-lit.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-lit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-lit.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/dead-greenhouse-lit.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-base.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-base.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-light.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-light.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-light.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-light.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-lit.png b/reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-lit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-lit.png rename to reskins-compatibility/graphics/entity/nauvisday/dead-greenhouse/hr-dead-greenhouse-lit.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-highlights.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_East-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-highlights.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_North-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-highlights.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_South-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-highlights.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/hr-offshore-pump_West-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png new file mode 100644 index 00000000..76b73820 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png new file mode 100644 index 00000000..00fbf892 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png new file mode 100644 index 00000000..c2293c17 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png new file mode 100644 index 00000000..fc57db4f Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png new file mode 100644 index 00000000..7bc97873 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-mask.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-mask.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png new file mode 100644 index 00000000..9072ea9a Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png new file mode 100644 index 00000000..aaf310d1 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png differ diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png new file mode 100644 index 00000000..9d58d1bb Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png new file mode 100644 index 00000000..7f3777c5 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png differ diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png new file mode 100644 index 00000000..42ebf739 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png new file mode 100644 index 00000000..e00fcfcc Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_East-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_East-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_East-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_East-underwater.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png new file mode 100644 index 00000000..5e6d0571 Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_South-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_South-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_South-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_South-underwater.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_West-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_West-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_West-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_West-underwater.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_East-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_East-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_East-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_East-underwater.png diff --git a/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png new file mode 100644 index 00000000..a49c61ab Binary files /dev/null and b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_South-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_South-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_South-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_South-underwater.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_West-underwater.png b/reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_West-underwater.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_West-underwater.png rename to reskins-compatibility/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_West-underwater.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-E.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-output.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-output.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-output.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-output.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-N.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-output.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-output.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-output.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-output.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-S.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/electric-mining-drill-W.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-E.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-output.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-output.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-output.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-output.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-N.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-output.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-output.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-output.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-output.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-S.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet-front.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W-wet.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/area-frame/hr-electric-mining-drill-W.png diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png new file mode 100644 index 00000000..e6c07d88 Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png new file mode 100644 index 00000000..3d358530 Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-mask.png diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png new file mode 100644 index 00000000..1f44415a Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-highlights.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-front-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-horizontal-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-mask.png rename to reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/hr-electric-mining-drill-mask.png diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png new file mode 100644 index 00000000..37c8ca45 Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png new file mode 100644 index 00000000..3b671e5c Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png differ diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png new file mode 100644 index 00000000..5765a561 Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png differ diff --git a/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png new file mode 100644 index 00000000..1e6ff74d Binary files /dev/null and b/reskins-compatibility/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-base.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-base.png rename to reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-base.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-highlights.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-highlights.png rename to reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-mask.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-mask.png rename to reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/hr-loader-structure-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-base.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-base.png rename to reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-base.png diff --git a/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png new file mode 100644 index 00000000..3b7eedcb Binary files /dev/null and b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-mask.png b/reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-mask.png rename to reskins-compatibility/graphics/entity/vanilla-loaders-hd/loader/loader-structure-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-base.png b/reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-base.png rename to reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-base.png diff --git a/reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png b/reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png new file mode 100644 index 00000000..3d4f3a7c Binary files /dev/null and b/reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-mask.png b/reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-mask.png rename to reskins-compatibility/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/equipment/miniloader/miniloader/miniloader-technology-base.png b/reskins-compatibility/graphics/equipment/miniloader/miniloader/miniloader-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/equipment/miniloader/miniloader/miniloader-technology-base.png rename to reskins-compatibility/graphics/equipment/miniloader/miniloader/miniloader-technology-base.png diff --git a/reskins-compatibility/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png b/reskins-compatibility/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png new file mode 100644 index 00000000..056623f6 Binary files /dev/null and b/reskins-compatibility/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/advanced-circuit.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/advanced-circuit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/advanced-circuit.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/advanced-circuit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/advanced-processing-unit.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/advanced-processing-unit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/advanced-processing-unit.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/advanced-processing-unit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/basic-circuit-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/basic-circuit-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/basic-circuit-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/basic-circuit-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/basic-electronic-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/basic-electronic-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/basic-electronic-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/basic-electronic-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/circuit-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/circuit-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/circuit-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/circuit-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-circuit-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-circuit-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-circuit-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-circuit-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-circuit.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-circuit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-circuit.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-circuit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-logic-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-logic-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-logic-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-logic-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-processing-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-processing-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/electronic-processing-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/electronic-processing-board.png diff --git a/reskins-compatibility/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png new file mode 100644 index 00000000..3b730990 Binary files /dev/null and b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/processing-unit.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/processing-unit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/processing-unit.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/processing-unit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/superior-circuit-board.png b/reskins-compatibility/graphics/icons/circuitprocessing/circuits/superior-circuit-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/superior-circuit-board.png rename to reskins-compatibility/graphics/icons/circuitprocessing/circuits/superior-circuit-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-base.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-base.png rename to reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-base.png diff --git a/reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png new file mode 100644 index 00000000..c1c374cc Binary files /dev/null and b/reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-mask.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-mask.png rename to reskins-compatibility/graphics/icons/classic-beacon/beacon/beacon-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-base.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-base.png rename to reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-base.png diff --git a/reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png new file mode 100644 index 00000000..62babf8d Binary files /dev/null and b/reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-mask.png b/reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-mask.png rename to reskins-compatibility/graphics/icons/classic-beacon/beacon/mini-beacon-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png diff --git a/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png new file mode 100644 index 00000000..4acd3479 Binary files /dev/null and b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png b/reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png rename to reskins-compatibility/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-advanced-logistic-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-advanced-logistic-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-advanced-logistic-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-advanced-logistic-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-blue.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-blue.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-blue.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-blue.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-green.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-green.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-green.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-green.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-orange.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-orange.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-orange.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-orange.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-purple.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-purple.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-purple.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-purple.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-red.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-red.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-red.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-red.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-yellow.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-yellow.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-yellow.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack-yellow.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-alien-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-automation-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-automation-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-automation-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-automation-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-chemical-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-chemical-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-chemical-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-chemical-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-logistic-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-logistic-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-logistic-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-logistic-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-military-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-military-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-military-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-military-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-production-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-production-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-production-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-production-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack-gold.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack-gold.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack-gold.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack-gold.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-base.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-base.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-base.png diff --git a/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png new file mode 100644 index 00000000..7f1fcf4b Binary files /dev/null and b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-mask.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-mask.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-space-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-space-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-space-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-space-science-pack.png diff --git a/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png new file mode 100644 index 00000000..fd58bbc8 Binary files /dev/null and b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-utility-science-pack.png b/reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-utility-science-pack.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-utility-science-pack.png rename to reskins-compatibility/graphics/icons/deadlock-stacking/science-packs/stacked-utility-science-pack.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png new file mode 100644 index 00000000..8ba88c94 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/arboretum/arboretum-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png new file mode 100644 index 00000000..1ee10103 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png new file mode 100644 index 00000000..aae0e1b5 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/butchery/butchery-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-highlights.png new file mode 100644 index 00000000..97ae4190 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/composter/composter-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-basic-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-basic-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-basic-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/field/field-basic-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-desert-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-desert-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-desert-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/field/field-desert-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-highlights.png new file mode 100644 index 00000000..4c460023 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-highlights.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-mask.png new file mode 100644 index 00000000..8800fd74 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/field/field-icon-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-swamp-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-swamp-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-swamp-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/field/field-swamp-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-temperate-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/field/field-temperate-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-temperate-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/field/field-temperate-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png new file mode 100644 index 00000000..683a6eb7 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/hatchery/hatchery-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png new file mode 100644 index 00000000..6eb10a6b Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-mask.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png new file mode 100644 index 00000000..f3878727 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png new file mode 100644 index 00000000..4a4414c8 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png new file mode 100644 index 00000000..0f403a61 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png new file mode 100644 index 00000000..01bca02c Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png new file mode 100644 index 00000000..21d16fd0 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png new file mode 100644 index 00000000..726396e5 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png new file mode 100644 index 00000000..ee94aac2 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/press/press-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/press/press-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/press/press-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/press/press-icon-highlights.png new file mode 100644 index 00000000..6ba7a70b Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/press/press-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/press/press-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/press/press-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png new file mode 100644 index 00000000..c1297f81 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png new file mode 100644 index 00000000..dd32dfd7 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png new file mode 100644 index 00000000..8b6ae1a3 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png new file mode 100644 index 00000000..ae049789 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png differ diff --git a/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png new file mode 100644 index 00000000..f33acd91 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png new file mode 100644 index 00000000..5202246d Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png new file mode 100644 index 00000000..1575e44e Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png new file mode 100644 index 00000000..ffe705e1 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-base.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-base.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-base.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png new file mode 100644 index 00000000..e3c57209 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-mask.png diff --git a/reskins-compatibility/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png b/reskins-compatibility/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png new file mode 100644 index 00000000..9e899193 Binary files /dev/null and b/reskins-compatibility/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/warehouse/warehouse-icon-mask.png b/reskins-compatibility/graphics/icons/extendedangels/warehouse/warehouse-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/extendedangels/warehouse/warehouse-icon-mask.png rename to reskins-compatibility/graphics/icons/extendedangels/warehouse/warehouse-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/loaderredux/loader/loader-icon-base.png b/reskins-compatibility/graphics/icons/loaderredux/loader/loader-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/loaderredux/loader/loader-icon-base.png rename to reskins-compatibility/graphics/icons/loaderredux/loader/loader-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/loaderredux/loader/loader-icon-mask.png b/reskins-compatibility/graphics/icons/loaderredux/loader/loader-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/loaderredux/loader/loader-icon-mask.png rename to reskins-compatibility/graphics/icons/loaderredux/loader/loader-icon-mask.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png new file mode 100644 index 00000000..d6a79562 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-2.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-2.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-2.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-3.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-3.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-3.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png new file mode 100644 index 00000000..6e8cbd10 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png new file mode 100644 index 00000000..d6e2edba Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png new file mode 100644 index 00000000..a9eefaf8 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png new file mode 100644 index 00000000..46dcd17f Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-8.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-8.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-8.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-8.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png new file mode 100644 index 00000000..5dde061c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-1.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-1.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-1.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-2.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-2.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-2.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-3.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-3.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-3.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-4.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-4.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-4.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-5.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-5.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-5.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png new file mode 100644 index 00000000..7c1f1520 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-7.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-7.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-7.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-7.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-8.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-8.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-8.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-8.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png new file mode 100644 index 00000000..83760b77 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-2.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-2.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-2.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-3.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-3.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-3.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png new file mode 100644 index 00000000..48cb23b9 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png new file mode 100644 index 00000000..5d10938c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png new file mode 100644 index 00000000..9270ee3a Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png new file mode 100644 index 00000000..187e7ede Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-8.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-8.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-8.png rename to reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-8.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png new file mode 100644 index 00000000..b4679271 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-depleted-uranium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-depleted-uranium.png rename to reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-depleted-uranium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-magnesium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-magnesium.png rename to reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-magnesium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-osmium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/liquid-material/liquid-molten-osmium.png rename to reskins-compatibility/graphics/icons/mad-clowns/liquid-material/liquid-molten-osmium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-depleted-uranium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-depleted-uranium.png rename to reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-depleted-uranium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-magnesium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-magnesium.png rename to reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-magnesium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-osmium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/pellets/pellet-osmium.png rename to reskins-compatibility/graphics/icons/mad-clowns/pellets/pellet-osmium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-depleted-uranium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-depleted-uranium.png rename to reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-depleted-uranium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-magnesium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-magnesium.png rename to reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-magnesium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-osmium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/plates/clowns-plate-osmium.png rename to reskins-compatibility/graphics/icons/mad-clowns/plates/clowns-plate-osmium.png diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png new file mode 100644 index 00000000..962985dd Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png new file mode 100644 index 00000000..f76f37d5 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png new file mode 100644 index 00000000..0dfa1a85 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png new file mode 100644 index 00000000..6a8158cc Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png new file mode 100644 index 00000000..05eac6c7 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png new file mode 100644 index 00000000..d5d0e10a Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png new file mode 100644 index 00000000..76cf99d1 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png new file mode 100644 index 00000000..a5ff03b0 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png new file mode 100644 index 00000000..6cb63b4d Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png new file mode 100644 index 00000000..97ec84cd Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png new file mode 100644 index 00000000..6ce296f1 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png new file mode 100644 index 00000000..fb63e7d0 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png new file mode 100644 index 00000000..e58ef619 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png new file mode 100644 index 00000000..710cd75a Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png new file mode 100644 index 00000000..d55f5efa Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png new file mode 100644 index 00000000..80104351 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png new file mode 100644 index 00000000..a9b964f4 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png new file mode 100644 index 00000000..31aede2c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png new file mode 100644 index 00000000..651efd09 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png new file mode 100644 index 00000000..6988a864 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png new file mode 100644 index 00000000..ebf9bbe6 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png new file mode 100644 index 00000000..02cbd50c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png new file mode 100644 index 00000000..a5ee3cef Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png new file mode 100644 index 00000000..009b8e3c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png new file mode 100644 index 00000000..5222fc1d Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png new file mode 100644 index 00000000..96b1ad67 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png new file mode 100644 index 00000000..b3dee213 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png new file mode 100644 index 00000000..af6927c8 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png new file mode 100644 index 00000000..e393f160 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png new file mode 100644 index 00000000..dd2fbfa8 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png new file mode 100644 index 00000000..fa7acffb Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png new file mode 100644 index 00000000..4df841cb Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png new file mode 100644 index 00000000..ca73189c Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png new file mode 100644 index 00000000..bd115c68 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png differ diff --git a/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png new file mode 100644 index 00000000..c7fae7a0 Binary files /dev/null and b/reskins-compatibility/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-depleted-uranium.png b/reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-depleted-uranium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-depleted-uranium.png rename to reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-depleted-uranium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-magnesium.png b/reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-magnesium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-magnesium.png rename to reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-magnesium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-osmium.png b/reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-osmium.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/mad-clowns/processed-ores/processed-osmium.png rename to reskins-compatibility/graphics/icons/mad-clowns/processed-ores/processed-osmium.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/filter-miniloader-icon-base.png b/reskins-compatibility/graphics/icons/miniloader/miniloader/filter-miniloader-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/filter-miniloader-icon-base.png rename to reskins-compatibility/graphics/icons/miniloader/miniloader/filter-miniloader-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-base.png b/reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-base.png rename to reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-base.png diff --git a/reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png b/reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png new file mode 100644 index 00000000..ced0f921 Binary files /dev/null and b/reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-mask.png b/reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-mask.png rename to reskins-compatibility/graphics/icons/miniloader/miniloader/miniloader-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/nauvisday/dead-greenhouse/dead-greenhouse-icon-base.png b/reskins-compatibility/graphics/icons/nauvisday/dead-greenhouse/dead-greenhouse-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/nauvisday/dead-greenhouse/dead-greenhouse-icon-base.png rename to reskins-compatibility/graphics/icons/nauvisday/dead-greenhouse/dead-greenhouse-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-base.png b/reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-base.png rename to reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-base.png diff --git a/reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png b/reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png new file mode 100644 index 00000000..def6d328 Binary files /dev/null and b/reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-mask.png b/reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-mask.png rename to reskins-compatibility/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color_cyan.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color_cyan.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color_cyan.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-aluminum-invar-color_cyan.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color_cyan.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color_cyan.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color_cyan.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-base-color_cyan.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color_cyan.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color_cyan.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color_cyan.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-gold-copper-color_cyan.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color_cyan.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color_cyan.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color_cyan.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-aluminum-color_cyan.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color_cyan.png b/reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color_cyan.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color_cyan.png rename to reskins-compatibility/graphics/icons/realisticreactorglow/nuclear-reactor/nuclear-reactor-silver-titanium-color_cyan.png diff --git a/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png new file mode 100644 index 00000000..ef8c86d3 Binary files /dev/null and b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/electric-mining-drill-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/large-area-electric-mining-drill-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-base.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png b/reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png rename to reskins-compatibility/graphics/icons/semi-classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/advanced-circuit.png b/reskins-compatibility/graphics/icons/sprites/circuits/standard/advanced-circuit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/advanced-circuit.png rename to reskins-compatibility/graphics/icons/sprites/circuits/standard/advanced-circuit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/advanced-processing-unit.png b/reskins-compatibility/graphics/icons/sprites/circuits/standard/advanced-processing-unit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/advanced-processing-unit.png rename to reskins-compatibility/graphics/icons/sprites/circuits/standard/advanced-processing-unit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/basic-circuit-board.png b/reskins-compatibility/graphics/icons/sprites/circuits/standard/basic-circuit-board.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/basic-circuit-board.png rename to reskins-compatibility/graphics/icons/sprites/circuits/standard/basic-circuit-board.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/electronic-circuit.png b/reskins-compatibility/graphics/icons/sprites/circuits/standard/electronic-circuit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/electronic-circuit.png rename to reskins-compatibility/graphics/icons/sprites/circuits/standard/electronic-circuit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/processing-unit.png b/reskins-compatibility/graphics/icons/sprites/circuits/standard/processing-unit.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/sprites/circuits/standard/processing-unit.png rename to reskins-compatibility/graphics/icons/sprites/circuits/standard/processing-unit.png diff --git a/reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-base.png b/reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-base.png rename to reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-base.png diff --git a/reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png b/reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png new file mode 100644 index 00000000..f1bef78a Binary files /dev/null and b/reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-mask.png b/reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-mask.png rename to reskins-compatibility/graphics/icons/vanilla-loaders-hd/loader/loader-icon-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-depleted-uranium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/casting/casting-depleted-uranium-technology-icon.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-depleted-uranium-technology-icon.png rename to reskins-compatibility/graphics/technology/mad-clowns/casting/casting-depleted-uranium-technology-icon.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-magnesium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/casting/casting-magnesium-technology-icon.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-magnesium-technology-icon.png rename to reskins-compatibility/graphics/technology/mad-clowns/casting/casting-magnesium-technology-icon.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-osmium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/casting/casting-osmium-technology-icon.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mad-clowns/casting/casting-osmium-technology-icon.png rename to reskins-compatibility/graphics/technology/mad-clowns/casting/casting-osmium-technology-icon.png diff --git a/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png new file mode 100644 index 00000000..ff13108b Binary files /dev/null and b/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-magnesium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-magnesium-technology-icon.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-magnesium-technology-icon.png rename to reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-magnesium-technology-icon.png diff --git a/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png b/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png new file mode 100644 index 00000000..124b7bda Binary files /dev/null and b/reskins-compatibility/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-base.png b/reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-base.png rename to reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-base.png diff --git a/reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png b/reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png new file mode 100644 index 00000000..3d4f3a7c Binary files /dev/null and b/reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-mask.png b/reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-mask.png rename to reskins-compatibility/graphics/technology/mini-machine/storage-tank/storage-tank-technology-mask.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-base.png b/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-base.png rename to reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-base.png diff --git a/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png b/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png new file mode 100644 index 00000000..ab54801b Binary files /dev/null and b/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png differ diff --git a/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png b/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png new file mode 100644 index 00000000..b47db83c Binary files /dev/null and b/reskins-compatibility/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color_cyan-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color_cyan-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color_cyan-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-aluminum-invar-color_cyan-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color_cyan-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color_cyan-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color_cyan-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-base-color_cyan-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color_cyan-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color_cyan-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color_cyan-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-gold-copper-color_cyan-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color_cyan-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color_cyan-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color_cyan-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-aluminum-color_cyan-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color-technology-base.png diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color_cyan-technology-base.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color_cyan-technology-base.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color_cyan-technology-base.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-silver-titanium-color_cyan-technology-base.png diff --git a/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png new file mode 100644 index 00000000..385911d8 Binary files /dev/null and b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-mask.png b/reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-mask.png similarity index 100% rename from reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-mask.png rename to reskins-compatibility/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-mask.png diff --git a/reskins-compatibility/info.json b/reskins-compatibility/info.json new file mode 100644 index 00000000..43f06cd7 --- /dev/null +++ b/reskins-compatibility/info.json @@ -0,0 +1,39 @@ +{ + "name": "reskins-compatibility", + "version": "2.1.10", + "factorio_version": "1.1", + "title": "Artisanal Reskins: Compatibility", + "author": "Kirazy", + "contact": "kirazy@live.com", + "homepage": "", + "dependencies": [ + "base", + "reskins-library >= 2.1.6", + "(?) reskins-bobs", + "(?) reskins-angels", + "? aai-industry", + "? angels-smelting-extended", + "? Bio_Industries", + "? CircuitProcessing", + "? classic-beacon", + "? classic-mining-drill", + "? Clowns-Processing", + "? deadlock-beltboxes-loaders", + "? DeadlockBlackRubberBelts", + "? DeadlockCrating", + "? DeadlockStackingForBobs", + "? DeadlockStackingForVanilla", + "? extendedangels", + "(?) electricboiler", + "? LoaderRedux", + "? mini-machines", + "? miniloader", + "? NauvisDay", + "? P-U-M-P-S", + "? RealisticReactorGlow", + "(?) ScienceCostTweakerM", + "? semi-classic-mining-drill", + "? spaceblock", + "? vanilla-loaders-hd" + ] +} \ No newline at end of file diff --git a/reskins-compatibility_2.1.6/locale/en/reskins-compatibility-locale.cfg b/reskins-compatibility/locale/en/reskins-compatibility-locale.cfg similarity index 100% rename from reskins-compatibility_2.1.6/locale/en/reskins-compatibility-locale.cfg rename to reskins-compatibility/locale/en/reskins-compatibility-locale.cfg diff --git a/reskins-compatibility_2.1.6/locale/ru/reskins-compatibility-locale.cfg b/reskins-compatibility/locale/ru/reskins-compatibility-locale.cfg similarity index 100% rename from reskins-compatibility_2.1.6/locale/ru/reskins-compatibility-locale.cfg rename to reskins-compatibility/locale/ru/reskins-compatibility-locale.cfg diff --git a/reskins-compatibility_2.1.6/prototypes/functions/circuitprocessing-sprites.lua b/reskins-compatibility/prototypes/functions/circuitprocessing-sprites.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/functions/circuitprocessing-sprites.lua rename to reskins-compatibility/prototypes/functions/circuitprocessing-sprites.lua diff --git a/reskins-compatibility_2.1.6/prototypes/functions/functions.lua b/reskins-compatibility/prototypes/functions/functions.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/functions/functions.lua rename to reskins-compatibility/prototypes/functions/functions.lua diff --git a/reskins-compatibility_2.1.6/prototypes/functions/overrides-final-fixes.lua b/reskins-compatibility/prototypes/functions/overrides-final-fixes.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/functions/overrides-final-fixes.lua rename to reskins-compatibility/prototypes/functions/overrides-final-fixes.lua diff --git a/reskins-compatibility_2.1.6/prototypes/functions/triggers.lua b/reskins-compatibility/prototypes/functions/triggers.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/functions/triggers.lua rename to reskins-compatibility/prototypes/functions/triggers.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/aai-industry.lua b/reskins-compatibility/prototypes/mods/aai-industry.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/aai-industry.lua rename to reskins-compatibility/prototypes/mods/aai-industry.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/angels-smelting-extended/angels-smelting-extended-items.lua b/reskins-compatibility/prototypes/mods/angels-smelting-extended/angels-smelting-extended-items.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/angels-smelting-extended/angels-smelting-extended-items.lua rename to reskins-compatibility/prototypes/mods/angels-smelting-extended/angels-smelting-extended-items.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/bio-industries.lua b/reskins-compatibility/prototypes/mods/bio-industries.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/bio-industries.lua rename to reskins-compatibility/prototypes/mods/bio-industries.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/circuitprocessing.lua b/reskins-compatibility/prototypes/mods/circuitprocessing.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/circuitprocessing.lua rename to reskins-compatibility/prototypes/mods/circuitprocessing.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/classic-beacon.lua b/reskins-compatibility/prototypes/mods/classic-beacon.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/classic-beacon.lua rename to reskins-compatibility/prototypes/mods/classic-beacon.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/classic-mining-drill.lua b/reskins-compatibility/prototypes/mods/classic-mining-drill.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/classic-mining-drill.lua rename to reskins-compatibility/prototypes/mods/classic-mining-drill.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/deadlock-crating.lua b/reskins-compatibility/prototypes/mods/deadlock-crating.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/deadlock-crating.lua rename to reskins-compatibility/prototypes/mods/deadlock-crating.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/deadlock-stacking-addons/science-packs.lua b/reskins-compatibility/prototypes/mods/deadlock-stacking-addons/science-packs.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/deadlock-stacking-addons/science-packs.lua rename to reskins-compatibility/prototypes/mods/deadlock-stacking-addons/science-packs.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/deadlock-stacking-beltboxes.lua b/reskins-compatibility/prototypes/mods/deadlock-stacking-beltboxes.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/deadlock-stacking-beltboxes.lua rename to reskins-compatibility/prototypes/mods/deadlock-stacking-beltboxes.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/deadlockblackrubberbelts.lua b/reskins-compatibility/prototypes/mods/deadlockblackrubberbelts.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/deadlockblackrubberbelts.lua rename to reskins-compatibility/prototypes/mods/deadlockblackrubberbelts.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/electricboiler.lua b/reskins-compatibility/prototypes/mods/electricboiler.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/electricboiler.lua rename to reskins-compatibility/prototypes/mods/electricboiler.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/arboretum.lua b/reskins-compatibility/prototypes/mods/extendedangels/arboretum.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/arboretum.lua rename to reskins-compatibility/prototypes/mods/extendedangels/arboretum.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/bioprocessor.lua b/reskins-compatibility/prototypes/mods/extendedangels/bioprocessor.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/bioprocessor.lua rename to reskins-compatibility/prototypes/mods/extendedangels/bioprocessor.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/butchery.lua b/reskins-compatibility/prototypes/mods/extendedangels/butchery.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/butchery.lua rename to reskins-compatibility/prototypes/mods/extendedangels/butchery.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/composter-rerender-WIP.lua b/reskins-compatibility/prototypes/mods/extendedangels/composter-rerender-WIP.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/composter-rerender-WIP.lua rename to reskins-compatibility/prototypes/mods/extendedangels/composter-rerender-WIP.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/composter.lua b/reskins-compatibility/prototypes/mods/extendedangels/composter.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/composter.lua rename to reskins-compatibility/prototypes/mods/extendedangels/composter.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/field.lua b/reskins-compatibility/prototypes/mods/extendedangels/field.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/field.lua rename to reskins-compatibility/prototypes/mods/extendedangels/field.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/hatchery.lua b/reskins-compatibility/prototypes/mods/extendedangels/hatchery.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/hatchery.lua rename to reskins-compatibility/prototypes/mods/extendedangels/hatchery.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/items-updates.lua b/reskins-compatibility/prototypes/mods/extendedangels/items-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/items-updates.lua rename to reskins-compatibility/prototypes/mods/extendedangels/items-updates.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/nutrient-extractor.lua b/reskins-compatibility/prototypes/mods/extendedangels/nutrient-extractor.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/nutrient-extractor.lua rename to reskins-compatibility/prototypes/mods/extendedangels/nutrient-extractor.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/press.lua b/reskins-compatibility/prototypes/mods/extendedangels/press.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/press.lua rename to reskins-compatibility/prototypes/mods/extendedangels/press.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-biter.lua b/reskins-compatibility/prototypes/mods/extendedangels/refugium-biter.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-biter.lua rename to reskins-compatibility/prototypes/mods/extendedangels/refugium-biter.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-fish.lua b/reskins-compatibility/prototypes/mods/extendedangels/refugium-fish.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-fish.lua rename to reskins-compatibility/prototypes/mods/extendedangels/refugium-fish.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-puffer.lua b/reskins-compatibility/prototypes/mods/extendedangels/refugium-puffer.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/refugium-puffer.lua rename to reskins-compatibility/prototypes/mods/extendedangels/refugium-puffer.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/seed-extractor.lua b/reskins-compatibility/prototypes/mods/extendedangels/seed-extractor.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/seed-extractor.lua rename to reskins-compatibility/prototypes/mods/extendedangels/seed-extractor.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/technology-updates.lua b/reskins-compatibility/prototypes/mods/extendedangels/technology-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/technology-updates.lua rename to reskins-compatibility/prototypes/mods/extendedangels/technology-updates.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/tree-generator.lua b/reskins-compatibility/prototypes/mods/extendedangels/tree-generator.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/tree-generator.lua rename to reskins-compatibility/prototypes/mods/extendedangels/tree-generator.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/extendedangels/warehouse.lua b/reskins-compatibility/prototypes/mods/extendedangels/warehouse.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/extendedangels/warehouse.lua rename to reskins-compatibility/prototypes/mods/extendedangels/warehouse.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/loaderredux.lua b/reskins-compatibility/prototypes/mods/loaderredux.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/loaderredux.lua rename to reskins-compatibility/prototypes/mods/loaderredux.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/mad-clowns/mad-clowns-items.lua b/reskins-compatibility/prototypes/mods/mad-clowns/mad-clowns-items.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/mad-clowns/mad-clowns-items.lua rename to reskins-compatibility/prototypes/mods/mad-clowns/mad-clowns-items.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/mad-clowns/mad-clowns-technology.lua b/reskins-compatibility/prototypes/mods/mad-clowns/mad-clowns-technology.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/mad-clowns/mad-clowns-technology.lua rename to reskins-compatibility/prototypes/mods/mad-clowns/mad-clowns-technology.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/mini-machines.lua b/reskins-compatibility/prototypes/mods/mini-machines.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/mini-machines.lua rename to reskins-compatibility/prototypes/mods/mini-machines.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/miniloader.lua b/reskins-compatibility/prototypes/mods/miniloader.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/miniloader.lua rename to reskins-compatibility/prototypes/mods/miniloader.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/nauvisday.lua b/reskins-compatibility/prototypes/mods/nauvisday.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/nauvisday.lua rename to reskins-compatibility/prototypes/mods/nauvisday.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/p-u-m-p-s.lua b/reskins-compatibility/prototypes/mods/p-u-m-p-s.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/p-u-m-p-s.lua rename to reskins-compatibility/prototypes/mods/p-u-m-p-s.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/realisticreactorglow/entities-updates.lua b/reskins-compatibility/prototypes/mods/realisticreactorglow/entities-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/realisticreactorglow/entities-updates.lua rename to reskins-compatibility/prototypes/mods/realisticreactorglow/entities-updates.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/realisticreactorglow/technology-updates.lua b/reskins-compatibility/prototypes/mods/realisticreactorglow/technology-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/realisticreactorglow/technology-updates.lua rename to reskins-compatibility/prototypes/mods/realisticreactorglow/technology-updates.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/sciencecosttweaker.lua b/reskins-compatibility/prototypes/mods/sciencecosttweaker.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/sciencecosttweaker.lua rename to reskins-compatibility/prototypes/mods/sciencecosttweaker.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/semi-classic-mining-drill.lua b/reskins-compatibility/prototypes/mods/semi-classic-mining-drill.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/semi-classic-mining-drill.lua rename to reskins-compatibility/prototypes/mods/semi-classic-mining-drill.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/spaceblock.lua b/reskins-compatibility/prototypes/mods/spaceblock.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/spaceblock.lua rename to reskins-compatibility/prototypes/mods/spaceblock.lua diff --git a/reskins-compatibility_2.1.6/prototypes/mods/vanilla-loaders-hd.lua b/reskins-compatibility/prototypes/mods/vanilla-loaders-hd.lua similarity index 100% rename from reskins-compatibility_2.1.6/prototypes/mods/vanilla-loaders-hd.lua rename to reskins-compatibility/prototypes/mods/vanilla-loaders-hd.lua diff --git a/reskins-compatibility_2.1.6/settings-updates.lua b/reskins-compatibility/settings-updates.lua similarity index 100% rename from reskins-compatibility_2.1.6/settings-updates.lua rename to reskins-compatibility/settings-updates.lua diff --git a/reskins-compatibility_2.1.6/settings.lua b/reskins-compatibility/settings.lua similarity index 100% rename from reskins-compatibility_2.1.6/settings.lua rename to reskins-compatibility/settings.lua diff --git a/reskins-compatibility_2.1.6/thumbnail.png b/reskins-compatibility/thumbnail.png similarity index 100% rename from reskins-compatibility_2.1.6/thumbnail.png rename to reskins-compatibility/thumbnail.png diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/beacon-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/beacon-highlights.png deleted file mode 100644 index 7f0e4a1c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/beacon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png deleted file mode 100644 index 89bf4307..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-beacon/beacon/hr-beacon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png b/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png deleted file mode 100644 index e9533137..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-E.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png b/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png deleted file mode 100644 index 2eff9074..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-N.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png b/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png deleted file mode 100644 index 2798dc71..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-S.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png b/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png deleted file mode 100644 index e1be1818..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/area-end/area-drill-W.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png deleted file mode 100644 index 3a139a14..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/classic-mining-drill/electric-mining-drill/hr-mining-drill-S-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-highlights.png deleted file mode 100644 index 2da3713d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-mask.png deleted file mode 100644 index e53c1563..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/arboretum/arboretum-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-base-patch.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-base-patch.png deleted file mode 100644 index f6c144b2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-base-patch.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-highlights.png deleted file mode 100644 index db3b5d4b..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/butchery/butchery-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/composter/composter-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/composter/composter-highlights.png deleted file mode 100644 index 8099e48c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/composter/composter-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-highlights.png deleted file mode 100644 index 45487924..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-mask.png deleted file mode 100644 index 14bc4f09..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/field/field-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png deleted file mode 100644 index c742f2c0..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png deleted file mode 100644 index d262d311..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-idle-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-shadow.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-shadow.png deleted file mode 100644 index 216eb4ca..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-shadow.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png deleted file mode 100644 index 7cd58cb0..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/hatchery/hatchery-working-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png deleted file mode 100644 index 3580e060..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png deleted file mode 100644 index 962ded0b..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/nutrient-extractor/nutrient-extractor-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-base-patch.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-base-patch.png deleted file mode 100644 index 1d70e3ad..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-base-patch.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-highlights.png deleted file mode 100644 index 53f1ee02..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-mask.png deleted file mode 100644 index a59785bc..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/press/press-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png deleted file mode 100644 index 2f07b0a3..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-biter/refugium-biter-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png deleted file mode 100644 index c15626b3..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png deleted file mode 100644 index 1ab7ea27..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-fish/refugium-fish-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png deleted file mode 100644 index a86076a6..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-base-patch.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png deleted file mode 100644 index acf04c3e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png deleted file mode 100644 index db2d5ab0..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/refugium-puffer/refugium-puffer-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png deleted file mode 100644 index 86eb2193..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/tree-generator/tree-generator-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png deleted file mode 100644 index 955e5bf4..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/hr-warehouse-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/warehouse-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/warehouse-highlights.png deleted file mode 100644 index fda7130c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/extendedangels/warehouse/warehouse-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/loader-mask.png b/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/loader-mask.png deleted file mode 100644 index 69090ba9..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/loaderredux/loader/loader-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png b/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png deleted file mode 100644 index d273c750..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-base.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png deleted file mode 100644 index 200af50a..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png b/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png deleted file mode 100644 index d9e9058c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/hr-miniloader-structure-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png deleted file mode 100644 index fc7d0d83..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png b/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png deleted file mode 100644 index 1a395508..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/miniloader/miniloader/miniloader-structure-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png deleted file mode 100644 index 096ca032..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_East-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png deleted file mode 100644 index b0fe74ba..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_North-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png deleted file mode 100644 index 98d23738..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_South-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png deleted file mode 100644 index 6771a62d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/offshore-pump_West-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png deleted file mode 100644 index f34203c3..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-1-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png deleted file mode 100644 index 07fa5be9..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png deleted file mode 100644 index 36d7b010..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/hr-offshore-pump-remnants-variation-2-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png deleted file mode 100644 index d97fef8d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png deleted file mode 100644 index 14c540ad..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-1-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png deleted file mode 100644 index 2577bfc1..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png deleted file mode 100644 index 8a045a74..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/remnants/offshore-pump-remnants-variation-2-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png deleted file mode 100644 index ddef61ce..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/hr-offshore-pump_North-underwater.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png b/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png deleted file mode 100644 index 193ab307..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/p-u-m-p-s/offshore-pump/underwater/offshore-pump_North-underwater.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png deleted file mode 100644 index 9abda67e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png deleted file mode 100644 index 28cf091f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-front-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png deleted file mode 100644 index fc24f8e5..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/drill/electric-mining-drill-horizontal-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png deleted file mode 100644 index 2c261d29..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png deleted file mode 100644 index cae30912..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/electric-mining-drill-remnants-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png deleted file mode 100644 index 25f85a33..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png b/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png deleted file mode 100644 index 31679c30..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/semi-classic-mining-drill/electric-mining-drill/remnants/hr-electric-mining-drill-remnants-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png b/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png deleted file mode 100644 index f12a0fac..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/entity/vanilla-loaders-hd/loader/loader-structure-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png b/reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png deleted file mode 100644 index 910b8138..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/equipment/mini-machine/storage-tank/storage-tank-technology-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png b/reskins-compatibility_2.1.6/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png deleted file mode 100644 index f2e671a3..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/equipment/miniloader/miniloader/miniloader-technology-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png b/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png deleted file mode 100644 index a2433587..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/circuitprocessing/circuits/multi-layer-circuit-board.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png deleted file mode 100644 index a1d017b2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/beacon-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png deleted file mode 100644 index 6ca4634f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/classic-beacon/beacon/mini-beacon-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png deleted file mode 100644 index 7931e471..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/classic-mining-drill/electric-mining-drill/mini-electric-mining-drill-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png deleted file mode 100644 index 95cfc4cf..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-science-pack/stacked-science-pack-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png b/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png deleted file mode 100644 index aff469ca..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/deadlock-stacking/science-packs/stacked-steam-science-pack.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png deleted file mode 100644 index ffb122cd..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/arboretum/arboretum-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png deleted file mode 100644 index 6944eb8d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/bioprocessor/bioprocessor-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png deleted file mode 100644 index 8310f65d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/butchery/butchery-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-highlights.png deleted file mode 100644 index 9bc79403..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/composter/composter-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-highlights.png deleted file mode 100644 index dbebd32e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-mask.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-mask.png deleted file mode 100644 index 76211c3f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/field/field-icon-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png deleted file mode 100644 index 39abb61c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/hatchery/hatchery-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png deleted file mode 100644 index 0c21e931..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/nutrient-extractor/nutrient-extractor-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png deleted file mode 100644 index d9963d36..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png deleted file mode 100644 index 8cfe5416..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png deleted file mode 100644 index 05152d84..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png deleted file mode 100644 index 5e0455ab..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png deleted file mode 100644 index 7d031b99..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png deleted file mode 100644 index d7102e10..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png deleted file mode 100644 index aa049c6f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/powders/tungsten-carbide/powder-tungsten-carbide.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-highlights.png deleted file mode 100644 index 33473694..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/press/press-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png deleted file mode 100644 index 036f8d9f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-biter/refugium-biter-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png deleted file mode 100644 index 86f72e05..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png deleted file mode 100644 index 98c3c7cb..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-fish/refugium-fish-icon-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png deleted file mode 100644 index 4d75ca2f..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png deleted file mode 100644 index 45031af9..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/refugium-puffer/refugium-puffer-icon-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png deleted file mode 100644 index d7522159..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/seed-extractor/seed-extractor-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png deleted file mode 100644 index e5098e97..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-desert/tree-generator-desert-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png deleted file mode 100644 index 98243a6a..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-swamp/tree-generator-swamp-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png deleted file mode 100644 index 490e9aa6..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/tree-generator-temperate/tree-generator-temperate-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png deleted file mode 100644 index 91b260c4..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/extendedangels/warehouse/warehouse-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png deleted file mode 100644 index c1865a81..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png deleted file mode 100644 index 2b75d613..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png deleted file mode 100644 index 656aee1d..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png deleted file mode 100644 index e0f393b7..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png deleted file mode 100644 index 1f9604a2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium-7.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png deleted file mode 100644 index a38dfc11..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/depleted-uranium/ingot-depleted-uranium.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png deleted file mode 100644 index 4c4b50be..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/magnesium/ingot-magnesium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png deleted file mode 100644 index 37d0fc3e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png deleted file mode 100644 index 4bd3ce00..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png deleted file mode 100644 index 9a2c2e34..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png deleted file mode 100644 index 3a35666c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png deleted file mode 100644 index aed6d269..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium-7.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png deleted file mode 100644 index e5ed5288..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/ingots/osmium/ingot-osmium.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png deleted file mode 100644 index 22ffb185..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png deleted file mode 100644 index b01bd6e2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png deleted file mode 100644 index 5fb6d94b..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png deleted file mode 100644 index 0c1154af..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png deleted file mode 100644 index 8fee39ff..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png deleted file mode 100644 index 92302828..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png deleted file mode 100644 index d6d4dda7..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium-mixture/powder-depleted-uranium-mixture.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png deleted file mode 100644 index 03d536ae..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png deleted file mode 100644 index 10ccb371..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png deleted file mode 100644 index a6190a44..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png deleted file mode 100644 index 89c97015..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png deleted file mode 100644 index b16f3da9..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png deleted file mode 100644 index f8f825a8..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png deleted file mode 100644 index 6e4db18b..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/depleted-uranium/powder-depleted-uranium.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png deleted file mode 100644 index 13bf8455..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png deleted file mode 100644 index 09d53902..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png deleted file mode 100644 index c5d00256..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png deleted file mode 100644 index 566e5a87..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png deleted file mode 100644 index d7155c5b..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png deleted file mode 100644 index ed8f0b5e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png deleted file mode 100644 index dcb35d0e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/magnesium/powder-magnesium.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png deleted file mode 100644 index 4fe1d6f4..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png deleted file mode 100644 index 45d55d5c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png deleted file mode 100644 index dc2f81a2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png deleted file mode 100644 index 2b843ebd..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png deleted file mode 100644 index 86aabcbb..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png deleted file mode 100644 index dc982ab5..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png deleted file mode 100644 index 073c5654..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium-mixture/powder-osmium-mixture.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png deleted file mode 100644 index b988f779..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-1.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png deleted file mode 100644 index baf79af2..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-2.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png deleted file mode 100644 index 1f8bc574..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-3.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png deleted file mode 100644 index 977c2ff8..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-4.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png deleted file mode 100644 index 983fa2ea..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-5.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png deleted file mode 100644 index 110ed99e..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium-6.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png b/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png deleted file mode 100644 index 945d69ba..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/mad-clowns/powders/osmium/powder-osmium.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png deleted file mode 100644 index d15245ff..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/miniloader/miniloader/miniloader-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png deleted file mode 100644 index 68ec74cf..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/p-u-m-p-s/offshore-pump/offshore-pump-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png b/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png deleted file mode 100644 index a1206f63..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/semi-classic-mining-drill/electric-mining-drill/area-drill-symbol.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png b/reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png deleted file mode 100644 index 744c6d41..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/icons/vanilla-loaders-hd/loader/loader-icon-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png b/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png deleted file mode 100644 index 2c1b75ea..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-depleted-uranium-technology-icon.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png b/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png deleted file mode 100644 index afafc7eb..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/mad-clowns/ingot/ingot-osmium-technology-icon.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png b/reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png deleted file mode 100644 index 910b8138..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/mini-machine/storage-tank/storage-tank-technology-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png b/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png deleted file mode 100644 index 9a3527eb..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png b/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png deleted file mode 100644 index 25dd1b03..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/miniloader/miniloader/miniloader-technology-mask.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png b/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png deleted file mode 100644 index d9421b6c..00000000 Binary files a/reskins-compatibility_2.1.6/graphics/technology/realisticreactorglow/nuclear-power/nuclear-power-technology-highlights.png and /dev/null differ diff --git a/reskins-compatibility_2.1.6/info.json b/reskins-compatibility_2.1.6/info.json deleted file mode 100644 index 814628ca..00000000 --- a/reskins-compatibility_2.1.6/info.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "reskins-compatibility", - "version": "2.1.6", - "factorio_version": "1.1", - "title": "Artisanal Reskins: Compatibility", - "author": "Kirazy", - "contact": "kirazy@live.com", - "homepage": "", - "dependencies": [ - "base", - "reskins-library >= 2.1.0", - "(?) reskins-bobs", - "(?) reskins-angels", - "? aai-industry", - "? angels-smelting-extended", - "? Bio_Industries", - "? CircuitProcessing", - "? classic-beacon", - "? classic-mining-drill", - "? Clowns-Processing", - "? deadlock-beltboxes-loaders", - "? DeadlockBlackRubberBelts", - "? DeadlockCrating", - "? DeadlockStackingForBobs", - "? DeadlockStackingForVanilla", - "? extendedangels", - "(?) electricboiler", - "? LoaderRedux", - "? mini-machines", - "? miniloader", - "? NauvisDay", - "? P-U-M-P-S", - "? RealisticReactorGlow", - "(?) ScienceCostTweakerM", - "? semi-classic-mining-drill", - "? spaceblock", - "? vanilla-loaders-hd" - ] -} \ No newline at end of file diff --git a/reskins-library_2.1.4/LICENSE b/reskins-library/LICENSE similarity index 100% rename from reskins-library_2.1.4/LICENSE rename to reskins-library/LICENSE diff --git a/reskins-library_2.1.4/README.md b/reskins-library/README.md similarity index 100% rename from reskins-library_2.1.4/README.md rename to reskins-library/README.md diff --git a/reskins-library_2.1.4/changelog.txt b/reskins-library/changelog.txt similarity index 100% rename from reskins-library_2.1.4/changelog.txt rename to reskins-library/changelog.txt diff --git a/reskins-library_2.1.4/control.lua b/reskins-library/control.lua similarity index 100% rename from reskins-library_2.1.4/control.lua rename to reskins-library/control.lua diff --git a/reskins-library_2.1.4/data-final-fixes.lua b/reskins-library/data-final-fixes.lua similarity index 100% rename from reskins-library_2.1.4/data-final-fixes.lua rename to reskins-library/data-final-fixes.lua diff --git a/reskins-library_2.1.4/data-updates.lua b/reskins-library/data-updates.lua similarity index 100% rename from reskins-library_2.1.4/data-updates.lua rename to reskins-library/data-updates.lua diff --git a/reskins-library_2.1.4/data.lua b/reskins-library/data.lua similarity index 100% rename from reskins-library_2.1.4/data.lua rename to reskins-library/data.lua diff --git a/reskins-library/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png b/reskins-library/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png new file mode 100644 index 00000000..4d79b86a Binary files /dev/null and b/reskins-library/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png differ diff --git a/reskins-library/graphics/entity/base/nuclear-reactor/reactor-lights.png b/reskins-library/graphics/entity/base/nuclear-reactor/reactor-lights.png new file mode 100644 index 00000000..b456f6fe Binary files /dev/null and b/reskins-library/graphics/entity/base/nuclear-reactor/reactor-lights.png differ diff --git a/reskins-library/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png b/reskins-library/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png new file mode 100644 index 00000000..6d71637e Binary files /dev/null and b/reskins-library/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/hr-oil-refinery-mask.png b/reskins-library/graphics/entity/base/oil-refinery/hr-oil-refinery-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/oil-refinery/hr-oil-refinery-mask.png rename to reskins-library/graphics/entity/base/oil-refinery/hr-oil-refinery-mask.png diff --git a/reskins-library/graphics/entity/base/oil-refinery/oil-refinery-highlights.png b/reskins-library/graphics/entity/base/oil-refinery/oil-refinery-highlights.png new file mode 100644 index 00000000..1c9283fd Binary files /dev/null and b/reskins-library/graphics/entity/base/oil-refinery/oil-refinery-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/oil-refinery-mask.png b/reskins-library/graphics/entity/base/oil-refinery/oil-refinery-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/oil-refinery/oil-refinery-mask.png rename to reskins-library/graphics/entity/base/oil-refinery/oil-refinery-mask.png diff --git a/reskins-library/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png b/reskins-library/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png new file mode 100644 index 00000000..2c8092d8 Binary files /dev/null and b/reskins-library/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-mask.png b/reskins-library/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-mask.png rename to reskins-library/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-mask.png diff --git a/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png b/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png new file mode 100644 index 00000000..34e8ec8a Binary files /dev/null and b/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png b/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png new file mode 100644 index 00000000..74ce4634 Binary files /dev/null and b/reskins-library/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-base.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-base.png rename to reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-base.png diff --git a/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png new file mode 100644 index 00000000..ac3815b7 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-mask.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-mask.png new file mode 100644 index 00000000..b147b8fc Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-base.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-base.png rename to reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-base.png diff --git a/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png new file mode 100644 index 00000000..02489d0e Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png new file mode 100644 index 00000000..17e98bbf Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-base.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-base.png rename to reskins-library/graphics/entity/base/splitter/east/splitter-east-base.png diff --git a/reskins-library/graphics/entity/base/splitter/east/splitter-east-highlights.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-highlights.png new file mode 100644 index 00000000..ff334024 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/splitter-east-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/east/splitter-east-mask.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-mask.png new file mode 100644 index 00000000..30200ed5 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/splitter-east-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-base.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-base.png rename to reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-base.png diff --git a/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png new file mode 100644 index 00000000..d29d815f Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png b/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png new file mode 100644 index 00000000..f828e56e Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-base.png b/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-base.png rename to reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-base.png diff --git a/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png b/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png new file mode 100644 index 00000000..0e7f09e2 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-mask.png b/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-mask.png new file mode 100644 index 00000000..ca3ccc5e Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/north/hr-splitter-north-mask.png differ diff --git a/reskins-library/graphics/entity/base/splitter/north/splitter-north-base.png b/reskins-library/graphics/entity/base/splitter/north/splitter-north-base.png new file mode 100644 index 00000000..925dc34f Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/north/splitter-north-base.png differ diff --git a/reskins-library/graphics/entity/base/splitter/north/splitter-north-highlights.png b/reskins-library/graphics/entity/base/splitter/north/splitter-north-highlights.png new file mode 100644 index 00000000..a3535c89 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/north/splitter-north-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/north/splitter-north-mask.png b/reskins-library/graphics/entity/base/splitter/north/splitter-north-mask.png new file mode 100644 index 00000000..d56793fd Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/north/splitter-north-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-base.png b/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-base.png rename to reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-base.png diff --git a/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png b/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png new file mode 100644 index 00000000..ae94cc17 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png b/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png new file mode 100644 index 00000000..bfbee991 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-base.png b/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-base.png rename to reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-base.png diff --git a/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png b/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png new file mode 100644 index 00000000..b07ead3c Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png b/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png new file mode 100644 index 00000000..32a0d445 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-base.png b/reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-base.png rename to reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-highlights.png b/reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-highlights.png rename to reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-highlights.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-mask.png b/reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/hr-splitter-south-mask.png rename to reskins-library/graphics/entity/base/splitter/south/hr-splitter-south-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-base.png b/reskins-library/graphics/entity/base/splitter/south/splitter-south-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-base.png rename to reskins-library/graphics/entity/base/splitter/south/splitter-south-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-highlights.png b/reskins-library/graphics/entity/base/splitter/south/splitter-south-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-highlights.png rename to reskins-library/graphics/entity/base/splitter/south/splitter-south-highlights.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-mask.png b/reskins-library/graphics/entity/base/splitter/south/splitter-south-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/south/splitter-south-mask.png rename to reskins-library/graphics/entity/base/splitter/south/splitter-south-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-base.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-base.png rename to reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-base.png diff --git a/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png new file mode 100644 index 00000000..0ea6e5e0 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-mask.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-mask.png new file mode 100644 index 00000000..81176d54 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-base.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-base.png rename to reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-base.png diff --git a/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png new file mode 100644 index 00000000..aac9b064 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png new file mode 100644 index 00000000..07a291f9 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-base.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-base.png rename to reskins-library/graphics/entity/base/splitter/west/splitter-west-base.png diff --git a/reskins-library/graphics/entity/base/splitter/west/splitter-west-highlights.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-highlights.png new file mode 100644 index 00000000..acefd80c Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/splitter-west-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/west/splitter-west-mask.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-mask.png new file mode 100644 index 00000000..e5c3757e Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/splitter-west-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-base.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-base.png rename to reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-base.png diff --git a/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png new file mode 100644 index 00000000..9e4ea422 Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png differ diff --git a/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png b/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png new file mode 100644 index 00000000..20cad92b Binary files /dev/null and b/reskins-library/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-base.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-base.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-highlights.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-highlights.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-highlights.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-mask.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-1-mask.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-1-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-base.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-base.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-highlights.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-highlights.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-highlights.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-mask.png b/reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/hr-transport-belt-2-mask.png rename to reskins-library/graphics/entity/base/transport-belt/hr-transport-belt-2-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-base.png b/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-base.png rename to reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-base.png diff --git a/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png b/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png new file mode 100644 index 00000000..6c87520d Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png b/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png new file mode 100644 index 00000000..b4422d1a Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png differ diff --git a/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png b/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png new file mode 100644 index 00000000..c82e592e Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png differ diff --git a/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png b/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png new file mode 100644 index 00000000..344b671e Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-mask.png b/reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-mask.png rename to reskins-library/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-base.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-1-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-base.png rename to reskins-library/graphics/entity/base/transport-belt/transport-belt-1-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-highlights.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-1-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-highlights.png rename to reskins-library/graphics/entity/base/transport-belt/transport-belt-1-highlights.png diff --git a/reskins-library/graphics/entity/base/transport-belt/transport-belt-1-mask.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-1-mask.png new file mode 100644 index 00000000..ee80c6b0 Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/transport-belt-1-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-base.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-2-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-base.png rename to reskins-library/graphics/entity/base/transport-belt/transport-belt-2-base.png diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-highlights.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-2-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-highlights.png rename to reskins-library/graphics/entity/base/transport-belt/transport-belt-2-highlights.png diff --git a/reskins-library/graphics/entity/base/transport-belt/transport-belt-2-mask.png b/reskins-library/graphics/entity/base/transport-belt/transport-belt-2-mask.png new file mode 100644 index 00000000..1d30a097 Binary files /dev/null and b/reskins-library/graphics/entity/base/transport-belt/transport-belt-2-mask.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png b/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png new file mode 100644 index 00000000..6653babc Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png b/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png new file mode 100644 index 00000000..26273345 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure.png b/reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure.png rename to reskins-library/graphics/entity/base/underground-belt/hr-underground-belt-structure.png diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-base.png b/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-base.png rename to reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-base.png diff --git a/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png b/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png new file mode 100644 index 00000000..87b51170 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png b/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png new file mode 100644 index 00000000..29f0b664 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-base.png b/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-base.png rename to reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-base.png diff --git a/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png b/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png new file mode 100644 index 00000000..29b43068 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png b/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png new file mode 100644 index 00000000..d03fda21 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png b/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png new file mode 100644 index 00000000..b2043124 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png differ diff --git a/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-mask.png b/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-mask.png new file mode 100644 index 00000000..5f25f3b3 Binary files /dev/null and b/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure.png b/reskins-library/graphics/entity/base/underground-belt/underground-belt-structure.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure.png rename to reskins-library/graphics/entity/base/underground-belt/underground-belt-structure.png diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-base.png b/reskins-library/graphics/entity/common/chemical-plant/chemical-plant-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-base.png rename to reskins-library/graphics/entity/common/chemical-plant/chemical-plant-base.png diff --git a/reskins-library/graphics/entity/common/chemical-plant/chemical-plant-highlights.png b/reskins-library/graphics/entity/common/chemical-plant/chemical-plant-highlights.png new file mode 100644 index 00000000..49bc9969 Binary files /dev/null and b/reskins-library/graphics/entity/common/chemical-plant/chemical-plant-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-mask.png b/reskins-library/graphics/entity/common/chemical-plant/chemical-plant-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-mask.png rename to reskins-library/graphics/entity/common/chemical-plant/chemical-plant-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-base.png b/reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-base.png rename to reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-base.png diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-highlights.png b/reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-highlights.png rename to reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-highlights.png diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-mask.png b/reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/hr-chemical-plant-mask.png rename to reskins-library/graphics/entity/common/chemical-plant/hr-chemical-plant-mask.png diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-base.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-base.png rename to reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-base.png diff --git a/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png new file mode 100644 index 00000000..11cc8309 Binary files /dev/null and b/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png new file mode 100644 index 00000000..22fab3de Binary files /dev/null and b/reskins-library/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-base.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-base.png rename to reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-base.png diff --git a/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png new file mode 100644 index 00000000..68259bc9 Binary files /dev/null and b/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png differ diff --git a/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png b/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png new file mode 100644 index 00000000..6f20615c Binary files /dev/null and b/reskins-library/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png new file mode 100644 index 00000000..c81b58fe Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-north.png b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-north.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-north.png rename to reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-north.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-south.png b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-south.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-south.png rename to reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-south.png diff --git a/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png new file mode 100644 index 00000000..388e094b Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png new file mode 100644 index 00000000..dfc61f55 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-north.png b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-north.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-north.png rename to reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-north.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-south.png b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-south.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-south.png rename to reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-south.png diff --git a/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png new file mode 100644 index 00000000..dbd595bd Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png new file mode 100644 index 00000000..3fab17bb Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png new file mode 100644 index 00000000..24653a73 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png new file mode 100644 index 00000000..41533237 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png new file mode 100644 index 00000000..321098e4 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png new file mode 100644 index 00000000..8334cee5 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png new file mode 100644 index 00000000..81136e3f Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png new file mode 100644 index 00000000..1782ef6f Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-west-shadow.png b/reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-west-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-west-shadow.png rename to reskins-library/graphics/entity/common/pipe-covers/shadows/pipe-cover-west-shadow.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-patches/hr-vertical-pipe-shadow-patch.png b/reskins-library/graphics/entity/common/pipe-patches/hr-vertical-pipe-shadow-patch.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-patches/hr-vertical-pipe-shadow-patch.png rename to reskins-library/graphics/entity/common/pipe-patches/hr-vertical-pipe-shadow-patch.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-patches/vertical-pipe-shadow-patch.png b/reskins-library/graphics/entity/common/pipe-patches/vertical-pipe-shadow-patch.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-patches/vertical-pipe-shadow-patch.png rename to reskins-library/graphics/entity/common/pipe-patches/vertical-pipe-shadow-patch.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-down.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-down.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-left.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-left.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-right.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-right.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-up.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-up.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/hr-pipe-to-ground-up.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-down.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-down.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-left.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-left.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-right.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-right.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-up.png b/reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-up.png rename to reskins-library/graphics/entity/common/pipe-to-ground/iron/pipe-to-ground-up.png diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png new file mode 100644 index 00000000..1042436a Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png new file mode 100644 index 00000000..d9379151 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png new file mode 100644 index 00000000..924f3fb6 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png new file mode 100644 index 00000000..6a379647 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png new file mode 100644 index 00000000..c452c62c Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png new file mode 100644 index 00000000..1035fb0f Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png new file mode 100644 index 00000000..a2d2551b Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png new file mode 100644 index 00000000..768a37fb Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-down-left.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-down-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-down-left.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-down-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-down-right.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-down-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-down-right.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-down-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-up-left.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-up-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-up-left.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-up-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-up-right.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-up-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-corner-up-right.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-corner-up-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-cross.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-cross.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-cross.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-cross.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-down.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-down.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-left.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-left.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-right.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-right.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-up.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-ending-up.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-ending-up.png diff --git a/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png new file mode 100644 index 00000000..a8cb527e Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal-window.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal-window.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal-window.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal-window.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-horizontal.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-single.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-single.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-single.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-single.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-window.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-window.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-window.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical-window.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-straight-vertical.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-down.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-down.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-left.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-left.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-right.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-right.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-up.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-t-up.png rename to reskins-library/graphics/entity/common/pipe/iron/hr-pipe-t-up.png diff --git a/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png new file mode 100644 index 00000000..f2d76f65 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-down-left.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-corner-down-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-down-left.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-corner-down-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-down-right.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-corner-down-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-down-right.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-corner-down-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-up-left.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-corner-up-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-up-left.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-corner-up-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-up-right.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-corner-up-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-corner-up-right.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-corner-up-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-cross.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-cross.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-cross.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-cross.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-down.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-ending-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-down.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-ending-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-left.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-ending-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-left.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-ending-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-right.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-ending-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-right.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-ending-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-up.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-ending-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-ending-up.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-ending-up.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-horizontal-window-background.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-horizontal-window-background.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-horizontal-window-background.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-horizontal-window-background.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-horizontal-window.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-straight-horizontal-window.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-horizontal-window.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-straight-horizontal-window.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-horizontal.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-straight-horizontal.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-horizontal.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-straight-horizontal.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical-single.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical-single.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical-single.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical-single.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical-window.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical-window.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical-window.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical-window.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-straight-vertical.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-straight-vertical.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-down.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-t-down.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-down.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-t-down.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-left.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-t-left.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-left.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-t-left.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-right.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-t-right.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-right.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-t-right.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-up.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-t-up.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-t-up.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-t-up.png diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-vertical-window-background.png b/reskins-library/graphics/entity/common/pipe/iron/pipe-vertical-window-background.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/iron/pipe-vertical-window-background.png rename to reskins-library/graphics/entity/common/pipe/iron/pipe-vertical-window-background.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png new file mode 100644 index 00000000..431998b0 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-right-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-right-shadow.png rename to reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-right-shadow.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png new file mode 100644 index 00000000..4749b4db Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png new file mode 100644 index 00000000..b1b94fef Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png new file mode 100644 index 00000000..81a3fa68 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png new file mode 100644 index 00000000..1681042c Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png new file mode 100644 index 00000000..892a3017 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png new file mode 100644 index 00000000..a805a492 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png new file mode 100644 index 00000000..cceb5e7c Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png new file mode 100644 index 00000000..5c7a3d37 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png new file mode 100644 index 00000000..4d84cb01 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png new file mode 100644 index 00000000..d4b48028 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-down-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-down-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-down-shadow.png rename to reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-down-shadow.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png new file mode 100644 index 00000000..5851d19b Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png new file mode 100644 index 00000000..da85f47a Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png new file mode 100644 index 00000000..9996de5f Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png new file mode 100644 index 00000000..eb17ab05 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-down-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-down-right-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-down-right-shadow.png rename to reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-down-right-shadow.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png new file mode 100644 index 00000000..5e991941 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png new file mode 100644 index 00000000..937c5d27 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png new file mode 100644 index 00000000..79ee9661 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png new file mode 100644 index 00000000..135e9e4a Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png new file mode 100644 index 00000000..0c6f02ed Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png new file mode 100644 index 00000000..f53f5333 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png new file mode 100644 index 00000000..ddd928ba Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-horizontal-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-horizontal-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-horizontal-shadow.png rename to reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-horizontal-shadow.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png new file mode 100644 index 00000000..bfe37f87 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png new file mode 100644 index 00000000..18fd7f1f Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-down-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-down-shadow.png similarity index 100% rename from reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-down-shadow.png rename to reskins-library/graphics/entity/common/pipe/shadows/pipe-t-down-shadow.png diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png new file mode 100644 index 00000000..3b09fa71 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png new file mode 100644 index 00000000..e44aa2e2 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png differ diff --git a/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png new file mode 100644 index 00000000..a4a0b6b7 Binary files /dev/null and b/reskins-library/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png differ diff --git a/reskins-library/graphics/icons/backgrounds/equipment-background.png b/reskins-library/graphics/icons/backgrounds/equipment-background.png new file mode 100644 index 00000000..d0d8be1d Binary files /dev/null and b/reskins-library/graphics/icons/backgrounds/equipment-background.png differ diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-base.png b/reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-base.png rename to reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-base.png diff --git a/reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png b/reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png new file mode 100644 index 00000000..e1ddf444 Binary files /dev/null and b/reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-mask.png b/reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-mask.png rename to reskins-library/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-base.png b/reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-base.png rename to reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-base.png diff --git a/reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png b/reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png new file mode 100644 index 00000000..83306831 Binary files /dev/null and b/reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-mask.png b/reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-mask.png rename to reskins-library/graphics/icons/base/oil-refinery/oil-refinery-icon-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-base.png b/reskins-library/graphics/icons/base/splitter/splitter-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-base.png rename to reskins-library/graphics/icons/base/splitter/splitter-icon-base.png diff --git a/reskins-library/graphics/icons/base/splitter/splitter-icon-highlights.png b/reskins-library/graphics/icons/base/splitter/splitter-icon-highlights.png new file mode 100644 index 00000000..da5676de Binary files /dev/null and b/reskins-library/graphics/icons/base/splitter/splitter-icon-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-mask.png b/reskins-library/graphics/icons/base/splitter/splitter-icon-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-mask.png rename to reskins-library/graphics/icons/base/splitter/splitter-icon-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-base.png b/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-base.png rename to reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-base.png diff --git a/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png b/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png new file mode 100644 index 00000000..42b243a5 Binary files /dev/null and b/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png differ diff --git a/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-mask.png b/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-mask.png new file mode 100644 index 00000000..293a3bab Binary files /dev/null and b/reskins-library/graphics/icons/base/transport-belt/transport-belt-icon-mask.png differ diff --git a/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-base.png b/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-base.png rename to reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-base.png diff --git a/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png b/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png new file mode 100644 index 00000000..c718f2ae Binary files /dev/null and b/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png differ diff --git a/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-mask.png b/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-mask.png new file mode 100644 index 00000000..2e6fa356 Binary files /dev/null and b/reskins-library/graphics/icons/base/underground-belt/underground-belt-icon-mask.png differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-base.png b/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-base.png rename to reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-base.png diff --git a/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png b/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png new file mode 100644 index 00000000..5cbcf6ee Binary files /dev/null and b/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png differ diff --git a/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png b/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png new file mode 100644 index 00000000..764e0d66 Binary files /dev/null and b/reskins-library/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-base.png b/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-base.png rename to reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-base.png diff --git a/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png b/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png new file mode 100644 index 00000000..0be7bc02 Binary files /dev/null and b/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png differ diff --git a/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png b/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png new file mode 100644 index 00000000..8ff94928 Binary files /dev/null and b/reskins-library/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png differ diff --git a/reskins-library/graphics/icons/lights/fuel-cell-light.png b/reskins-library/graphics/icons/lights/fuel-cell-light.png new file mode 100644 index 00000000..929247ab Binary files /dev/null and b/reskins-library/graphics/icons/lights/fuel-cell-light.png differ diff --git a/reskins-library_2.1.4/graphics/icons/lights/fuel-light.png b/reskins-library/graphics/icons/lights/fuel-light.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/lights/fuel-light.png rename to reskins-library/graphics/icons/lights/fuel-light.png diff --git a/reskins-library_2.1.4/graphics/icons/mini-machine-overlay.png b/reskins-library/graphics/icons/mini-machine-overlay.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/mini-machine-overlay.png rename to reskins-library/graphics/icons/mini-machine-overlay.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/gilded-copper-cable.png b/reskins-library/graphics/icons/shared/items/gilded-copper-cable.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/items/gilded-copper-cable.png rename to reskins-library/graphics/icons/shared/items/gilded-copper-cable.png diff --git a/reskins-library/graphics/icons/shared/items/glass.png b/reskins-library/graphics/icons/shared/items/glass.png new file mode 100644 index 00000000..68e3e31b Binary files /dev/null and b/reskins-library/graphics/icons/shared/items/glass.png differ diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/gold-plate.png b/reskins-library/graphics/icons/shared/items/gold-plate.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/items/gold-plate.png rename to reskins-library/graphics/icons/shared/items/gold-plate.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/rubber.png b/reskins-library/graphics/icons/shared/items/rubber.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/items/rubber.png rename to reskins-library/graphics/icons/shared/items/rubber.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/silicon-wafer.png b/reskins-library/graphics/icons/shared/items/silicon-wafer.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/items/silicon-wafer.png rename to reskins-library/graphics/icons/shared/items/silicon-wafer.png diff --git a/reskins-library/graphics/icons/shared/items/solder.png b/reskins-library/graphics/icons/shared/items/solder.png new file mode 100644 index 00000000..afd0fa70 Binary files /dev/null and b/reskins-library/graphics/icons/shared/items/solder.png differ diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-1.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-1.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-2.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-2.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-3.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-3.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-4.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-4.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-4.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-5.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-5.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-5.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-6.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-6.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-6.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-7.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-7.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-7.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore-7.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore.png b/reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/bauxite-ore/bauxite-ore.png rename to reskins-library/graphics/icons/shared/ores/bauxite-ore/bauxite-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-1.png b/reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-1.png rename to reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-2.png b/reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-2.png rename to reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-3.png b/reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-3.png rename to reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore.png b/reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/cobalt-ore/cobalt-ore.png rename to reskins-library/graphics/icons/shared/ores/cobalt-ore/cobalt-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-1.png b/reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-1.png rename to reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-2.png b/reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-2.png rename to reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-3.png b/reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore-3.png rename to reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore.png b/reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/gold-ore/gold-ore.png rename to reskins-library/graphics/icons/shared/ores/gold-ore/gold-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-1.png b/reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-1.png rename to reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-2.png b/reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-2.png rename to reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-3.png b/reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore-3.png rename to reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore.png b/reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/lead-ore/lead-ore.png rename to reskins-library/graphics/icons/shared/ores/lead-ore/lead-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-1.png b/reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-1.png rename to reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-2.png b/reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-2.png rename to reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-3.png b/reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore-3.png rename to reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore.png b/reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/nickel-ore/nickel-ore.png rename to reskins-library/graphics/icons/shared/ores/nickel-ore/nickel-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-1.png b/reskins-library/graphics/icons/shared/ores/quartz/quartz-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-1.png rename to reskins-library/graphics/icons/shared/ores/quartz/quartz-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-2.png b/reskins-library/graphics/icons/shared/ores/quartz/quartz-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-2.png rename to reskins-library/graphics/icons/shared/ores/quartz/quartz-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-3.png b/reskins-library/graphics/icons/shared/ores/quartz/quartz-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz-3.png rename to reskins-library/graphics/icons/shared/ores/quartz/quartz-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz.png b/reskins-library/graphics/icons/shared/ores/quartz/quartz.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/quartz/quartz.png rename to reskins-library/graphics/icons/shared/ores/quartz/quartz.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-1.png b/reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-1.png rename to reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-2.png b/reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-2.png rename to reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-3.png b/reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore-3.png rename to reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore.png b/reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/silver-ore/silver-ore.png rename to reskins-library/graphics/icons/shared/ores/silver-ore/silver-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-1.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-1.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-2.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-2.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-3.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-3.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-4.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-4.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-4.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-5.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-5.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-5.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-6.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-6.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-6.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-7.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-7.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore-7.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore-7.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore.png b/reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tin-ore/tin-ore.png rename to reskins-library/graphics/icons/shared/ores/tin-ore/tin-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-1.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-1.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-2.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-2.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-3.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-3.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-4.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-4.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-4.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-5.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-5.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-5.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-6.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-6.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-6.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-7.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-7.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-7.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore-7.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore.png b/reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/tungsten-ore/tungsten-ore.png rename to reskins-library/graphics/icons/shared/ores/tungsten-ore/tungsten-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-1.png b/reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-1.png rename to reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-1.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-2.png b/reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-2.png rename to reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-2.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-3.png b/reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore-3.png rename to reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore-3.png diff --git a/reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore.png b/reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/shared/ores/zinc-ore/zinc-ore.png rename to reskins-library/graphics/icons/shared/ores/zinc-ore/zinc-ore.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-base.png b/reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-base.png rename to reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-base.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-highlights.png b/reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-highlights.png rename to reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-highlights.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-mask.png b/reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-mask.png rename to reskins-library/graphics/icons/sprites/circuits/advanced-circuit/advanced-circuit-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-base.png b/reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-base.png rename to reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-base.png diff --git a/reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png b/reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png new file mode 100644 index 00000000..d38b344f Binary files /dev/null and b/reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png differ diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-mask.png b/reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-mask.png rename to reskins-library/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-base.png b/reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-base.png rename to reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-base.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-highlights.png b/reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-highlights.png rename to reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-highlights.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-mask.png b/reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-mask.png rename to reskins-library/graphics/icons/sprites/circuits/basic-circuit-board/basic-circuit-board-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-base.png b/reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-base.png rename to reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-base.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-highlights.png b/reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-highlights.png rename to reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-highlights.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-mask.png b/reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-mask.png rename to reskins-library/graphics/icons/sprites/circuits/electronic-circuit/electronic-circuit-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-base.png b/reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-base.png rename to reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-base.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-highlights.png b/reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-highlights.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-highlights.png rename to reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-highlights.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-mask.png b/reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-mask.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/circuits/processing-unit/processing-unit-mask.png rename to reskins-library/graphics/icons/sprites/circuits/processing-unit/processing-unit-mask.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-chevron.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-chevron.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-chevron.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-chevron.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-dots.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-dots.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-dots.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-dots.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-half-circle.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-half-circle.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-half-circle.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-half-circle.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rectangle.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-rectangle.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rectangle.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-rectangle.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rounded-half-circle.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-rounded-half-circle.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rounded-half-circle.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-rounded-half-circle.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rounded-rectangle.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-rounded-rectangle.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-rounded-rectangle.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-rounded-rectangle.png diff --git a/reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-teardrop.png b/reskins-library/graphics/icons/sprites/tier-labels/icon-teardrop.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/sprites/tier-labels/icon-teardrop.png rename to reskins-library/graphics/icons/sprites/tier-labels/icon-teardrop.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/1.png b/reskins-library/graphics/icons/tiers/chevron/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/1.png rename to reskins-library/graphics/icons/tiers/chevron/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/2.png b/reskins-library/graphics/icons/tiers/chevron/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/2.png rename to reskins-library/graphics/icons/tiers/chevron/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/3.png b/reskins-library/graphics/icons/tiers/chevron/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/3.png rename to reskins-library/graphics/icons/tiers/chevron/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/4.png b/reskins-library/graphics/icons/tiers/chevron/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/4.png rename to reskins-library/graphics/icons/tiers/chevron/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/5.png b/reskins-library/graphics/icons/tiers/chevron/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/5.png rename to reskins-library/graphics/icons/tiers/chevron/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/chevron/6.png b/reskins-library/graphics/icons/tiers/chevron/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/chevron/6.png rename to reskins-library/graphics/icons/tiers/chevron/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/1.png b/reskins-library/graphics/icons/tiers/dots/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/1.png rename to reskins-library/graphics/icons/tiers/dots/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/2.png b/reskins-library/graphics/icons/tiers/dots/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/2.png rename to reskins-library/graphics/icons/tiers/dots/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/3.png b/reskins-library/graphics/icons/tiers/dots/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/3.png rename to reskins-library/graphics/icons/tiers/dots/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/4.png b/reskins-library/graphics/icons/tiers/dots/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/4.png rename to reskins-library/graphics/icons/tiers/dots/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/5.png b/reskins-library/graphics/icons/tiers/dots/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/5.png rename to reskins-library/graphics/icons/tiers/dots/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/dots/6.png b/reskins-library/graphics/icons/tiers/dots/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/dots/6.png rename to reskins-library/graphics/icons/tiers/dots/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/1.png b/reskins-library/graphics/icons/tiers/half-circle/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/1.png rename to reskins-library/graphics/icons/tiers/half-circle/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/2.png b/reskins-library/graphics/icons/tiers/half-circle/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/2.png rename to reskins-library/graphics/icons/tiers/half-circle/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/3.png b/reskins-library/graphics/icons/tiers/half-circle/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/3.png rename to reskins-library/graphics/icons/tiers/half-circle/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/4.png b/reskins-library/graphics/icons/tiers/half-circle/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/4.png rename to reskins-library/graphics/icons/tiers/half-circle/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/5.png b/reskins-library/graphics/icons/tiers/half-circle/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/5.png rename to reskins-library/graphics/icons/tiers/half-circle/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/half-circle/6.png b/reskins-library/graphics/icons/tiers/half-circle/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/half-circle/6.png rename to reskins-library/graphics/icons/tiers/half-circle/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/1.png b/reskins-library/graphics/icons/tiers/rectangle/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/1.png rename to reskins-library/graphics/icons/tiers/rectangle/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/2.png b/reskins-library/graphics/icons/tiers/rectangle/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/2.png rename to reskins-library/graphics/icons/tiers/rectangle/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/3.png b/reskins-library/graphics/icons/tiers/rectangle/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/3.png rename to reskins-library/graphics/icons/tiers/rectangle/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/4.png b/reskins-library/graphics/icons/tiers/rectangle/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/4.png rename to reskins-library/graphics/icons/tiers/rectangle/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/5.png b/reskins-library/graphics/icons/tiers/rectangle/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/5.png rename to reskins-library/graphics/icons/tiers/rectangle/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rectangle/6.png b/reskins-library/graphics/icons/tiers/rectangle/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rectangle/6.png rename to reskins-library/graphics/icons/tiers/rectangle/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/1.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/1.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/2.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/2.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/3.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/3.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/4.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/4.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/5.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/5.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/6.png b/reskins-library/graphics/icons/tiers/rounded-half-circle/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-half-circle/6.png rename to reskins-library/graphics/icons/tiers/rounded-half-circle/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/1.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/1.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/2.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/2.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/3.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/3.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/4.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/4.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/5.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/5.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/6.png b/reskins-library/graphics/icons/tiers/rounded-rectangle/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/rounded-rectangle/6.png rename to reskins-library/graphics/icons/tiers/rounded-rectangle/6.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/1.png b/reskins-library/graphics/icons/tiers/teardrop/1.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/1.png rename to reskins-library/graphics/icons/tiers/teardrop/1.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/2.png b/reskins-library/graphics/icons/tiers/teardrop/2.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/2.png rename to reskins-library/graphics/icons/tiers/teardrop/2.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/3.png b/reskins-library/graphics/icons/tiers/teardrop/3.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/3.png rename to reskins-library/graphics/icons/tiers/teardrop/3.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/4.png b/reskins-library/graphics/icons/tiers/teardrop/4.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/4.png rename to reskins-library/graphics/icons/tiers/teardrop/4.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/5.png b/reskins-library/graphics/icons/tiers/teardrop/5.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/5.png rename to reskins-library/graphics/icons/tiers/teardrop/5.png diff --git a/reskins-library_2.1.4/graphics/icons/tiers/teardrop/6.png b/reskins-library/graphics/icons/tiers/teardrop/6.png similarity index 100% rename from reskins-library_2.1.4/graphics/icons/tiers/teardrop/6.png rename to reskins-library/graphics/icons/tiers/teardrop/6.png diff --git a/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-base.png b/reskins-library/graphics/technology/base/logistics/logistics-technology-base.png similarity index 100% rename from reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-base.png rename to reskins-library/graphics/technology/base/logistics/logistics-technology-base.png diff --git a/reskins-library/graphics/technology/base/logistics/logistics-technology-highlights.png b/reskins-library/graphics/technology/base/logistics/logistics-technology-highlights.png new file mode 100644 index 00000000..bf516c03 Binary files /dev/null and b/reskins-library/graphics/technology/base/logistics/logistics-technology-highlights.png differ diff --git a/reskins-library/graphics/technology/base/logistics/logistics-technology-mask.png b/reskins-library/graphics/technology/base/logistics/logistics-technology-mask.png new file mode 100644 index 00000000..eb26e15a Binary files /dev/null and b/reskins-library/graphics/technology/base/logistics/logistics-technology-mask.png differ diff --git a/reskins-library/graphics/technology/mini-machine-overlay.png b/reskins-library/graphics/technology/mini-machine-overlay.png new file mode 100644 index 00000000..b9953fcf Binary files /dev/null and b/reskins-library/graphics/technology/mini-machine-overlay.png differ diff --git a/reskins-library_2.1.4/graphics/technology/mini-machine-underlay.png b/reskins-library/graphics/technology/mini-machine-underlay.png similarity index 100% rename from reskins-library_2.1.4/graphics/technology/mini-machine-underlay.png rename to reskins-library/graphics/technology/mini-machine-underlay.png diff --git a/reskins-library/graphics/technology/personal-equipment-overlay.png b/reskins-library/graphics/technology/personal-equipment-overlay.png new file mode 100644 index 00000000..ed580a0d Binary files /dev/null and b/reskins-library/graphics/technology/personal-equipment-overlay.png differ diff --git a/reskins-library/graphics/technology/vehicle-equipment-overlay.png b/reskins-library/graphics/technology/vehicle-equipment-overlay.png new file mode 100644 index 00000000..f7fc9d50 Binary files /dev/null and b/reskins-library/graphics/technology/vehicle-equipment-overlay.png differ diff --git a/reskins-library/info.json b/reskins-library/info.json new file mode 100644 index 00000000..dc7440c7 --- /dev/null +++ b/reskins-library/info.json @@ -0,0 +1,18 @@ +{ + "name": "reskins-library", + "version": "2.1.7", + "factorio_version": "1.1", + "title": "Artisanal Reskins: Library", + "author": "Kirazy", + "contact": "kirazy@live.com", + "homepage": "https://forums.factorio.com/viewtopic.php?f=51&t=85707", + "dependencies": [ + "base", + "flib", + "(?) bobassembly", + "(?) boblogistics", + "(?) angelspetrochem", + "(?) angelsindustries", + "! bobmods_gfxtweak" + ] +} \ No newline at end of file diff --git a/reskins-library_2.1.4/locale/en/reskins-library-locale.cfg b/reskins-library/locale/en/reskins-library-locale.cfg similarity index 100% rename from reskins-library_2.1.4/locale/en/reskins-library-locale.cfg rename to reskins-library/locale/en/reskins-library-locale.cfg diff --git a/reskins-library_2.1.4/locale/ru/reskins-library-locale.cfg b/reskins-library/locale/ru/reskins-library-locale.cfg similarity index 100% rename from reskins-library_2.1.4/locale/ru/reskins-library-locale.cfg rename to reskins-library/locale/ru/reskins-library-locale.cfg diff --git a/reskins-library_2.1.4/migrations/reskins-library_1.1.3.lua b/reskins-library/migrations/reskins-library_1.1.3.lua similarity index 100% rename from reskins-library_2.1.4/migrations/reskins-library_1.1.3.lua rename to reskins-library/migrations/reskins-library_1.1.3.lua diff --git a/reskins-library_2.1.4/prototypes/entity/base/belt-entities.lua b/reskins-library/prototypes/entity/base/belt-entities.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/entity/base/belt-entities.lua rename to reskins-library/prototypes/entity/base/belt-entities.lua diff --git a/reskins-library_2.1.4/prototypes/entity/base/nuclear-reactor.lua b/reskins-library/prototypes/entity/base/nuclear-reactor.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/entity/base/nuclear-reactor.lua rename to reskins-library/prototypes/entity/base/nuclear-reactor.lua diff --git a/reskins-library_2.1.4/prototypes/entity/base/oil-refinery.lua b/reskins-library/prototypes/entity/base/oil-refinery.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/entity/base/oil-refinery.lua rename to reskins-library/prototypes/entity/base/oil-refinery.lua diff --git a/reskins-library_2.1.4/prototypes/entity/common/pipe.lua b/reskins-library/prototypes/entity/common/pipe.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/entity/common/pipe.lua rename to reskins-library/prototypes/entity/common/pipe.lua diff --git a/reskins-library_2.1.4/prototypes/functions/control-functions.lua b/reskins-library/prototypes/functions/control-functions.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/control-functions.lua rename to reskins-library/prototypes/functions/control-functions.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entities/base/chemical-plant.lua b/reskins-library/prototypes/functions/entities/base/chemical-plant.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entities/base/chemical-plant.lua rename to reskins-library/prototypes/functions/entities/base/chemical-plant.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entities/base/oil-refinery.lua b/reskins-library/prototypes/functions/entities/base/oil-refinery.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entities/base/oil-refinery.lua rename to reskins-library/prototypes/functions/entities/base/oil-refinery.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entities/base/splitter.lua b/reskins-library/prototypes/functions/entities/base/splitter.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entities/base/splitter.lua rename to reskins-library/prototypes/functions/entities/base/splitter.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entities/base/transport-belt.lua b/reskins-library/prototypes/functions/entities/base/transport-belt.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entities/base/transport-belt.lua rename to reskins-library/prototypes/functions/entities/base/transport-belt.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entities/base/underground-belt.lua b/reskins-library/prototypes/functions/entities/base/underground-belt.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entities/base/underground-belt.lua rename to reskins-library/prototypes/functions/entities/base/underground-belt.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entity-functions.lua b/reskins-library/prototypes/functions/entity-functions.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entity-functions.lua rename to reskins-library/prototypes/functions/entity-functions.lua diff --git a/reskins-library_2.1.4/prototypes/functions/entity-rescaling.lua b/reskins-library/prototypes/functions/entity-rescaling.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/entity-rescaling.lua rename to reskins-library/prototypes/functions/entity-rescaling.lua diff --git a/reskins-library_2.1.4/prototypes/functions/functions.lua b/reskins-library/prototypes/functions/functions.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/functions.lua rename to reskins-library/prototypes/functions/functions.lua diff --git a/reskins-library_2.1.4/prototypes/functions/icon-handling.lua b/reskins-library/prototypes/functions/icon-handling.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/icon-handling.lua rename to reskins-library/prototypes/functions/icon-handling.lua diff --git a/reskins-library_2.1.4/prototypes/functions/label-items.lua b/reskins-library/prototypes/functions/label-items.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/label-items.lua rename to reskins-library/prototypes/functions/label-items.lua diff --git a/reskins-library_2.1.4/prototypes/functions/migration.lua b/reskins-library/prototypes/functions/migration.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/migration.lua rename to reskins-library/prototypes/functions/migration.lua diff --git a/reskins-library_2.1.4/prototypes/functions/particles.lua b/reskins-library/prototypes/functions/particles.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/particles.lua rename to reskins-library/prototypes/functions/particles.lua diff --git a/reskins-library_2.1.4/prototypes/functions/pipe-pictures.lua b/reskins-library/prototypes/functions/pipe-pictures.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/pipe-pictures.lua rename to reskins-library/prototypes/functions/pipe-pictures.lua diff --git a/reskins-library_2.1.4/prototypes/functions/tints.lua b/reskins-library/prototypes/functions/tints.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/functions/tints.lua rename to reskins-library/prototypes/functions/tints.lua diff --git a/reskins-library_2.1.4/prototypes/technology/base/logistics.lua b/reskins-library/prototypes/technology/base/logistics.lua similarity index 100% rename from reskins-library_2.1.4/prototypes/technology/base/logistics.lua rename to reskins-library/prototypes/technology/base/logistics.lua diff --git a/reskins-library_2.1.4/settings-final-fixes.lua b/reskins-library/settings-final-fixes.lua similarity index 100% rename from reskins-library_2.1.4/settings-final-fixes.lua rename to reskins-library/settings-final-fixes.lua diff --git a/reskins-library_2.1.4/settings-updates.lua b/reskins-library/settings-updates.lua similarity index 100% rename from reskins-library_2.1.4/settings-updates.lua rename to reskins-library/settings-updates.lua diff --git a/reskins-library_2.1.4/settings.lua b/reskins-library/settings.lua similarity index 100% rename from reskins-library_2.1.4/settings.lua rename to reskins-library/settings.lua diff --git a/reskins-library_2.1.4/thumbnail.png b/reskins-library/thumbnail.png similarity index 100% rename from reskins-library_2.1.4/thumbnail.png rename to reskins-library/thumbnail.png diff --git a/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png b/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png deleted file mode 100644 index 8a9f2827..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/hr-reactor-lights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/reactor-lights.png b/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/reactor-lights.png deleted file mode 100644 index 7863dd1a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/nuclear-reactor/reactor-lights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png b/reskins-library_2.1.4/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png deleted file mode 100644 index 4c6fa067..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/hr-oil-refinery-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/oil-refinery-highlights.png b/reskins-library_2.1.4/graphics/entity/base/oil-refinery/oil-refinery-highlights.png deleted file mode 100644 index 514206db..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/oil-refinery-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png deleted file mode 100644 index 422d5765..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/hr-refinery-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png deleted file mode 100644 index e18a5e65..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png deleted file mode 100644 index 5eefff3a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/oil-refinery/remnants/refinery-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png deleted file mode 100644 index 81eaf523..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-mask.png deleted file mode 100644 index 741870c5..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png deleted file mode 100644 index 1cf8a182..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png deleted file mode 100644 index 903e3f21..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/hr-splitter-east-top_patch-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-highlights.png deleted file mode 100644 index 2c50efc6..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-mask.png deleted file mode 100644 index c8e31011..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png deleted file mode 100644 index 71a4a4a6..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png deleted file mode 100644 index 0536126a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/east/splitter-east-top_patch-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png deleted file mode 100644 index f116e9fd..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-mask.png deleted file mode 100644 index 74df4d80..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/north/hr-splitter-north-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-base.png b/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-base.png deleted file mode 100644 index 048b5697..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-base.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-highlights.png deleted file mode 100644 index 230a8658..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-mask.png deleted file mode 100644 index da0cbbc9..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/north/splitter-north-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png deleted file mode 100644 index 3b6fdd88..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png deleted file mode 100644 index 010c74e7..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/hr-splitter-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png deleted file mode 100644 index f07f2904..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png deleted file mode 100644 index f48b0a25..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/remnants/splitter-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png deleted file mode 100644 index 7351043d..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-mask.png deleted file mode 100644 index 2538cf0d..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png deleted file mode 100644 index d572332b..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png deleted file mode 100644 index 8e4514a0..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/hr-splitter-west-top_patch-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-highlights.png deleted file mode 100644 index 1d4c82ce..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-mask.png deleted file mode 100644 index ad4f6b9e..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png deleted file mode 100644 index 02b3af0b..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png b/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png deleted file mode 100644 index 58b54600..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/splitter/west/splitter-west-top_patch-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png deleted file mode 100644 index ae75a6b2..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png deleted file mode 100644 index 9c75ba85..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/hr-transport-belt-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png deleted file mode 100644 index 5ad1f023..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-base.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png deleted file mode 100644 index fd72c9d6..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/remnants/transport-belt-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-mask.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-mask.png deleted file mode 100644 index 359f5eb4..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-1-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-mask.png b/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-mask.png deleted file mode 100644 index 236b69e2..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/transport-belt/transport-belt-2-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png deleted file mode 100644 index 852306f8..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png deleted file mode 100644 index 107c1e60..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/hr-underground-belt-structure-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png deleted file mode 100644 index a0406064..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png deleted file mode 100644 index 4661c409..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/hr-underground-belt-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png deleted file mode 100644 index 97586872..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png deleted file mode 100644 index 1315f56b..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/remnants/underground-belt-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png deleted file mode 100644 index f46ad37a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-mask.png b/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-mask.png deleted file mode 100644 index 653b9b4b..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/base/underground-belt/underground-belt-structure-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-highlights.png b/reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-highlights.png deleted file mode 100644 index 622a01ad..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/chemical-plant-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png deleted file mode 100644 index 6abe62f1..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png deleted file mode 100644 index cf4f2d20..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/chemical-plant-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png b/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png deleted file mode 100644 index 2ae1a2dd..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png b/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png deleted file mode 100644 index 9d41dd03..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/chemical-plant/remnants/hr-chemical-plant-remnants-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png deleted file mode 100644 index c0bde563..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-east.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png deleted file mode 100644 index 457f8619..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/hr-pipe-cover-west.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png deleted file mode 100644 index 090b1157..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-east.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png deleted file mode 100644 index 60a13b09..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/iron/pipe-cover-west.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png deleted file mode 100644 index cf47ec6a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-east-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png deleted file mode 100644 index a5073072..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-north-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png deleted file mode 100644 index 37f6a249..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-south-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png deleted file mode 100644 index efafafb3..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/hr-pipe-cover-west-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png deleted file mode 100644 index d0aeba3f..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-east-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png deleted file mode 100644 index 7b7f002e..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-north-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png deleted file mode 100644 index 4169ee87..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-covers/shadows/pipe-cover-south-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png deleted file mode 100644 index 13a773be..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-down-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png deleted file mode 100644 index 89a61968..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png deleted file mode 100644 index 610edb6e..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png deleted file mode 100644 index 66447888..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/hr-pipe-to-ground-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png deleted file mode 100644 index e87b05d7..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-down-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png deleted file mode 100644 index 0ccf59c2..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png deleted file mode 100644 index ac31b816..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png deleted file mode 100644 index 44d8af86..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe-to-ground/shadows/pipe-to-ground-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png b/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png deleted file mode 100644 index 9e0a8df3..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-horizontal-window-background.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png b/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png deleted file mode 100644 index 2093dc98..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/iron/hr-pipe-vertical-window-background.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png deleted file mode 100644 index a1caab50..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-down-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png deleted file mode 100644 index e14fc497..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png deleted file mode 100644 index 2fa24de2..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-corner-up-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png deleted file mode 100644 index e4520288..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-cross-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png deleted file mode 100644 index 15fa51e4..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-down-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png deleted file mode 100644 index 3fa86501..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png deleted file mode 100644 index 0af8a928..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png deleted file mode 100644 index 4931de00..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-ending-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png deleted file mode 100644 index e7465a13..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-horizontal-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png deleted file mode 100644 index fb828b65..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png deleted file mode 100644 index de768316..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-straight-vertical-single-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png deleted file mode 100644 index 69fab52b..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png deleted file mode 100644 index 0731410c..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png deleted file mode 100644 index db747c60..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/hr-pipe-t-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png deleted file mode 100644 index b3d02271..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-down-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png deleted file mode 100644 index e8129255..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png deleted file mode 100644 index bb73fae0..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-corner-up-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png deleted file mode 100644 index 8cc2b17c..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-cross-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png deleted file mode 100644 index 856976d0..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-down-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png deleted file mode 100644 index 22ae31dc..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png deleted file mode 100644 index 95a51675..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png deleted file mode 100644 index 3337f205..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-ending-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png deleted file mode 100644 index c107451c..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png deleted file mode 100644 index cb1acaa8..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-straight-vertical-single-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png deleted file mode 100644 index 1635e933..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-left-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png deleted file mode 100644 index 26bc89fb..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-right-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png b/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png deleted file mode 100644 index 4af1691a..00000000 Binary files a/reskins-library_2.1.4/graphics/entity/common/pipe/shadows/pipe-t-up-shadow.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/backgrounds/equipment-background.png b/reskins-library_2.1.4/graphics/icons/backgrounds/equipment-background.png deleted file mode 100644 index f3d660c9..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/backgrounds/equipment-background.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png deleted file mode 100644 index 263e6b89..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/mini-oil-refinery-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png deleted file mode 100644 index c1ebceb8..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/oil-refinery/oil-refinery-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-highlights.png deleted file mode 100644 index 9252c89a..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/splitter/splitter-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png deleted file mode 100644 index 7dbff188..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-mask.png b/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-mask.png deleted file mode 100644 index 6f821b2f..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/transport-belt/transport-belt-icon-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png deleted file mode 100644 index 87d5805c..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-mask.png b/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-mask.png deleted file mode 100644 index 27dda733..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/base/underground-belt/underground-belt-icon-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png deleted file mode 100644 index 40f48940..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png b/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png deleted file mode 100644 index 10720f4f..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/chemical-plant-icon-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png b/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png deleted file mode 100644 index b516df8d..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png b/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png deleted file mode 100644 index 8a85071b..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/common/chemical-plant/mini-chemical-plant-icon-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/glass.png b/reskins-library_2.1.4/graphics/icons/shared/items/glass.png deleted file mode 100644 index 35c25be1..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/shared/items/glass.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/shared/items/solder.png b/reskins-library_2.1.4/graphics/icons/shared/items/solder.png deleted file mode 100644 index 7e9b3f76..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/shared/items/solder.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png b/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png deleted file mode 100644 index 3c046d1d..00000000 Binary files a/reskins-library_2.1.4/graphics/icons/sprites/circuits/advanced-processing-unit/advanced-processing-unit-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-highlights.png b/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-highlights.png deleted file mode 100644 index 6e9dec9f..00000000 Binary files a/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-highlights.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-mask.png b/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-mask.png deleted file mode 100644 index 123adb9c..00000000 Binary files a/reskins-library_2.1.4/graphics/technology/base/logistics/logistics-technology-mask.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/technology/mini-machine-overlay.png b/reskins-library_2.1.4/graphics/technology/mini-machine-overlay.png deleted file mode 100644 index ba82c984..00000000 Binary files a/reskins-library_2.1.4/graphics/technology/mini-machine-overlay.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/technology/personal-equipment-overlay.png b/reskins-library_2.1.4/graphics/technology/personal-equipment-overlay.png deleted file mode 100644 index 2797306e..00000000 Binary files a/reskins-library_2.1.4/graphics/technology/personal-equipment-overlay.png and /dev/null differ diff --git a/reskins-library_2.1.4/graphics/technology/vehicle-equipment-overlay.png b/reskins-library_2.1.4/graphics/technology/vehicle-equipment-overlay.png deleted file mode 100644 index a2eacefb..00000000 Binary files a/reskins-library_2.1.4/graphics/technology/vehicle-equipment-overlay.png and /dev/null differ diff --git a/reskins-library_2.1.4/info.json b/reskins-library_2.1.4/info.json deleted file mode 100644 index 08d17db0..00000000 --- a/reskins-library_2.1.4/info.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "reskins-library", - "version": "2.1.4", - "factorio_version": "1.1", - "title": "Artisanal Reskins: Library", - "author": "Kirazy", - "contact": "kirazy@live.com", - "homepage": "https://forums.factorio.com/viewtopic.php?f=51&t=85707", - "dependencies": [ - "base", - "flib", - "(?) bobassembly", - "(?) boblogistics", - "(?) angelspetrochem", - "(?) angelsindustries", - "! bobmods_gfxtweak" - ] -} \ No newline at end of file diff --git a/reverse-factory_8.2.2.zip b/reverse-factory_8.2.2.zip deleted file mode 100644 index 46bdd28a..00000000 Binary files a/reverse-factory_8.2.2.zip and /dev/null differ diff --git a/robot_attrition_0.5.15/README.md b/robot_attrition/README.md similarity index 100% rename from robot_attrition_0.5.15/README.md rename to robot_attrition/README.md diff --git a/robot_attrition_0.5.15/changelog.txt b/robot_attrition/changelog.txt similarity index 100% rename from robot_attrition_0.5.15/changelog.txt rename to robot_attrition/changelog.txt diff --git a/robot_attrition_0.5.15/control.lua b/robot_attrition/control.lua similarity index 100% rename from robot_attrition_0.5.15/control.lua rename to robot_attrition/control.lua diff --git a/robot_attrition_0.5.15/data-final-fixes.lua b/robot_attrition/data-final-fixes.lua similarity index 100% rename from robot_attrition_0.5.15/data-final-fixes.lua rename to robot_attrition/data-final-fixes.lua diff --git a/robot_attrition_0.5.15/data.lua b/robot_attrition/data.lua similarity index 100% rename from robot_attrition_0.5.15/data.lua rename to robot_attrition/data.lua diff --git a/robot_attrition_0.5.15/graphics/entity/dropped-cargo/dropped-cargo-shadow.png b/robot_attrition/graphics/entity/dropped-cargo/dropped-cargo-shadow.png similarity index 100% rename from robot_attrition_0.5.15/graphics/entity/dropped-cargo/dropped-cargo-shadow.png rename to robot_attrition/graphics/entity/dropped-cargo/dropped-cargo-shadow.png diff --git a/robot_attrition_0.5.15/graphics/entity/dropped-cargo/dropped-cargo.png b/robot_attrition/graphics/entity/dropped-cargo/dropped-cargo.png similarity index 100% rename from robot_attrition_0.5.15/graphics/entity/dropped-cargo/dropped-cargo.png rename to robot_attrition/graphics/entity/dropped-cargo/dropped-cargo.png diff --git a/robot_attrition_0.5.15/graphics/icons/dropped-cargo.png b/robot_attrition/graphics/icons/dropped-cargo.png similarity index 100% rename from robot_attrition_0.5.15/graphics/icons/dropped-cargo.png rename to robot_attrition/graphics/icons/dropped-cargo.png diff --git a/robot_attrition_0.5.15/graphics/technology/robot-safety.png b/robot_attrition/graphics/technology/robot-safety.png similarity index 100% rename from robot_attrition_0.5.15/graphics/technology/robot-safety.png rename to robot_attrition/graphics/technology/robot-safety.png diff --git a/robot_attrition_0.5.15/info.json b/robot_attrition/info.json similarity index 100% rename from robot_attrition_0.5.15/info.json rename to robot_attrition/info.json diff --git a/robot_attrition/licence.txt b/robot_attrition/licence.txt new file mode 100644 index 00000000..021a358f --- /dev/null +++ b/robot_attrition/licence.txt @@ -0,0 +1,21 @@ +FMLDOL +Factorio Mod Limited Distribution Only Licence +https://docs.google.com/document/d/1z-6hZQekEHOu1Pk4z-V5LuwlHnveFLJGTjVAtjYHwMU +This software is provided without warranty and the software author/license owner cannot be held liable for damages. + +Commercial Use: +No. +You are not allowed to make money off this mod or any of the contained assets. +You are allowed to feature the mods in other media, such as Twitch or YouTube. It would be nice if you mentioned Earendel's Patreon https://www.patreon.com/earendel when featuring the mod but this in not a requirement. + +Modification: +Restricted. +You may make alterations for your own private personal use only. +You are not allowed to distribute any content from the mod, or anything altered or derived from this mod with the following exception: +You may post partial modified sections of this mod in Earendel's discord https://discord.gg/ymjUVMv for the purpose of providing bug fixes or enhancements + +Distribution: +You cannot distribute any content of the mod separate from the complete mod package. +You can distribute the complete and unmodified mod package with the following conditions: +The mod must not be modified. (Packaging the mod into a larger zip file does not count as modification. It can be used in mod set packs.) +You must disclose the source by providing a link to the mod on the mod portal https://mods.factorio.com, a link to the Earendel's discord https://discord.gg/ymjUVMv for bug reporting and discussion, and a link to Earendel's Patreon https://www.patreon.com/earendel to support further development. diff --git a/robot_attrition/locale/cs/strings.cfg b/robot_attrition/locale/cs/strings.cfg new file mode 100644 index 00000000..8eb0100e --- /dev/null +++ b/robot_attrition/locale/cs/strings.cfg @@ -0,0 +1,11 @@ +[technology-name] +robot-attrition-explosion-safety=Bezpečnost roje + +[technology-description] +robot-attrition-explosion-safety=LogistickΓ© sΓ­tΔ› s rozsahem menΕ‘Γ­m neΕΎ 500 aktivnΓ­ch logistickΓ½ch robotΕ― na jednu vyzkoumanou ΓΊroveň nebudou pΕ™i havΓ‘rii robotΕ― pΕ―sobit poΕ‘kozenΓ­ jinΓ½m objektΕ―m. + +[mod-setting-name] +robot-attrition-factor=Faktor kolizΓ­ robotΕ― + +[mod-setting-description] +robot-attrition-factor=NΓ‘sobič Ε‘ance na havΓ‘rii robotΕ―. PoznΓ‘mka: JinΓ© modifikace mohou mΔ›nit nebo pΕ™episovat tuto hodnotu pro rΕ―znΓ© povrchy. diff --git a/robot_attrition_0.5.15/locale/en/strings.cfg b/robot_attrition/locale/en/strings.cfg similarity index 100% rename from robot_attrition_0.5.15/locale/en/strings.cfg rename to robot_attrition/locale/en/strings.cfg diff --git a/robot_attrition/locale/es-ES/strings.cfg b/robot_attrition/locale/es-ES/strings.cfg new file mode 100644 index 00000000..029ae0da --- /dev/null +++ b/robot_attrition/locale/es-ES/strings.cfg @@ -0,0 +1,24 @@ +[technology-name] +robot-attrition-explosion-safety=Seguridad del enjambre + +[technology-description] +robot-attrition-explosion-safety=Los robots logΓ­sticos no daΓ±arΓ‘n las construcciones cuando fallen si estΓ‘n en una red logΓ­stica con hasta 500 robots logΓ­sticos activos por nivel investigado. + +[item-name] +robot-attrition-crashed=__1__ averiado + +[recipe-name] +robot-attrition-repair=__1__ reparado +robot-attrition-recombine=__1__ recombinado + +[mod-setting-name] +robot-attrition-factor=Factor de desgaste del robot +robot-attrition-repair=ReparaciΓ³n de robot + +[mod-setting-description] +robot-attrition-factor=Un multiplicador de probabilidad de que el robot se estrelle. Nota: Otros mods pueden modificar o anular este valor para superficies especΓ­ficas. +robot-attrition-repair=Opciones de reparaciΓ³n de los robots. + +[string-mod-setting] +robot-attrition-repair-Disabed=Desactivado +robot-attrition-repair-Repair75=Coste de reparaciΓ³n 75% (estimado) diff --git a/robot_attrition/locale/ja/strings.cfg b/robot_attrition/locale/ja/strings.cfg new file mode 100644 index 00000000..3944fba9 --- /dev/null +++ b/robot_attrition/locale/ja/strings.cfg @@ -0,0 +1,27 @@ +[technology-name] +robot-attrition-explosion-safety=羀集ε‰ε…¨ζ€§ + +[technology-description] +robot-attrition-explosion-safety=η‰©ζ΅γƒ­γƒœγƒƒγƒˆγ―γ€η ”η©Άγƒ¬γƒ™γƒ«γ”γ¨γ«ζœ€ε€§500γγ‚’クティブγͺη‰©ζ΅γƒ­γƒœγƒƒγƒˆγŒγ‚γ‚‹η‰©ζ΅γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γ«γ‚γ‚‹ε ΄εˆγ€γ‚―γƒ©γƒƒγ‚·γƒ₯γ—γ¦γ‚‚η‰©γ«γƒ€γƒ‘γƒΌγ‚Έγ‚’δΈŽγˆγΎγ›γ‚“γ€‚ + +[item-name] +robot-attrition-crashed=η ΄ε£Šγ•γ‚ŒγŸ __1__ + +[entity-name] +logistic-robot-dropped-cargo=θ½δΈ‹γ—γŸθ²¨η‰© + +[recipe-name] +robot-attrition-repair=δΏεΎ© __1__ +robot-attrition-recombine=ε†η΅εˆ __1__ + +[mod-setting-name] +robot-attrition-factor=γƒ­γƒœγƒƒγƒˆζΆˆθ€—δΏ‚ζ•° +robot-attrition-repair=γƒ­γƒœγƒƒγƒˆδΏεΎ© + +[mod-setting-description] +robot-attrition-factor=γƒ­γƒœγƒƒγƒˆγŒε£Šγ‚Œγ‚‹ε―θƒ½ζ€§γε€ηŽ‡γ€‚ζ³¨: δ»–γMODγ«γ‚ˆγ‚Šγ€η‰Ήεšγθ‘¨ι’に対してこγε€€γ‚’ε€‰ζ›΄γ—γŸγ‚ŠδΈŠζ›Έγγ—γŸγ‚Šγ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚ +robot-attrition-repair=γƒ­γƒœγƒƒγƒˆγδΏη†γ‚ͺγƒ—γ‚·γƒ§γƒ³γ€‚η ΄ε£Šγ•γ‚ŒγŸη‰©ζ΅γƒ­γƒœγƒƒγƒˆγ―γ€γ‚’γ‚€γƒ†γƒ γŒζ‹γ•γ‚ŒγΎγ™γ€‚ そγγ‚’むテムは、θ‡ͺε‹•η”Ÿζˆγ•γ‚ŒγŸγƒ¬γ‚·γƒ”γ‚’δ½Ώη”¨γ—γ¦γ€ζ–°γ—γ„γƒ­γƒœγƒƒγƒˆγ«δΏεΎ©γ•γ‚ŒγΎγ™γ€‚ + +[string-mod-setting] +robot-attrition-repair-Disabed=η„‘εŠΉ +robot-attrition-repair-Repair75=75%費用でδΏεΎ© (推計) diff --git a/robot_attrition/locale/pl/strings.cfg b/robot_attrition/locale/pl/strings.cfg new file mode 100644 index 00000000..d324aa12 --- /dev/null +++ b/robot_attrition/locale/pl/strings.cfg @@ -0,0 +1,5 @@ +[mod-setting-name] +robot-attrition-factor=WspΓ³Ε‚czynnik awaryjnoΕ›ci robota + +[mod-setting-description] +robot-attrition-factor=MnoΕΌnik szansy na awariΔ™ robota. Uwaga: Inne mody mogΔ… modyfikowaΔ‡ lub zastΔ™powaΔ‡ tΔ™ wartoΕ›Δ‡ dla okreΕ›lonych powierzchni. diff --git a/robot_attrition_0.5.15/locale/ru/strings.cfg b/robot_attrition/locale/ru/strings.cfg similarity index 100% rename from robot_attrition_0.5.15/locale/ru/strings.cfg rename to robot_attrition/locale/ru/strings.cfg diff --git a/robot_attrition/locale/tr/strings.cfg b/robot_attrition/locale/tr/strings.cfg new file mode 100644 index 00000000..2ebd18d6 --- /dev/null +++ b/robot_attrition/locale/tr/strings.cfg @@ -0,0 +1,27 @@ +[technology-name] +robot-attrition-explosion-safety=SΓΌrΓΌ gΓΌvenliği + +[technology-description] +robot-attrition-explosion-safety=Lojistik botlar, araştΔ±rΔ±lan seviye başına 500'e kadar aktif lojistik bot iΓ§eren bir lojistik ağdalarsa, Γ§ΓΆktΓΌklerinde nesnelere zarar vermezler. + +[item-name] +robot-attrition-crashed=Yok edilen __1__ + +[entity-name] +logistic-robot-dropped-cargo=Düşen yΓΌk + +[recipe-name] +robot-attrition-repair=__1__ tamir et +robot-attrition-recombine=__1__ yeniden birleştir + +[mod-setting-name] +robot-attrition-factor=Robot yΔ±pranma faktΓΆrΓΌ +robot-attrition-repair=Robot tamiri + +[mod-setting-description] +robot-attrition-factor=Robotun Γ§arpma şansΔ± ΓΌzerinde bir Γ§arpan. Not: Diğer modlar, belirli yΓΌzeyler iΓ§in bu değeri değiştirebilir veya geΓ§ersiz kΔ±labilir. +robot-attrition-repair=Robot onarΔ±m seΓ§enekleri. Yok edilen lojistik robotlar (herhangi bir şekilde), otomatik olarak oluşturulan bir tarif kullanΔ±larak yeni bir bota dΓΆnüştΓΌrΓΌlebilecek bir âğe bΔ±rakΔ±r. + +[string-mod-setting] +robot-attrition-repair-Disabed=Devre dışı +robot-attrition-repair-Repair75=%75 onarΔ±m maliyeti (tahmini) diff --git a/robot_attrition/locale/zh-CN/strings.cfg b/robot_attrition/locale/zh-CN/strings.cfg new file mode 100644 index 00000000..cb2faaaa --- /dev/null +++ b/robot_attrition/locale/zh-CN/strings.cfg @@ -0,0 +1,5 @@ +[mod-setting-name] +robot-attrition-factor=ζœΊε™¨δΊΊζ•…ιšœη³»ζ•° + +[mod-setting-description] +robot-attrition-factor=ζœΊε™¨δΊΊδΊ§η”Ÿζ•…ιšœηš„ε‡ ηŽ‡δΉ˜ζ•°γ€‚θ―΄ζ˜Ž: ε…Άδ»–Mod可δ»₯δΏζ”ΉθΏ™δΈͺ值。 diff --git a/robot_attrition_0.5.15/prototypes/phase-3/repair.lua b/robot_attrition/prototypes/phase-3/repair.lua similarity index 100% rename from robot_attrition_0.5.15/prototypes/phase-3/repair.lua rename to robot_attrition/prototypes/phase-3/repair.lua diff --git a/robot_attrition_0.5.15/scripts/event.lua b/robot_attrition/scripts/event.lua similarity index 100% rename from robot_attrition_0.5.15/scripts/event.lua rename to robot_attrition/scripts/event.lua diff --git a/robot_attrition_0.5.15/settings.lua b/robot_attrition/settings.lua similarity index 100% rename from robot_attrition_0.5.15/settings.lua rename to robot_attrition/settings.lua diff --git a/robot_attrition/thumbnail.png b/robot_attrition/thumbnail.png new file mode 100644 index 00000000..08123f12 Binary files /dev/null and b/robot_attrition/thumbnail.png differ diff --git a/robot_attrition_0.5.15/thumbnail.png b/robot_attrition_0.5.15/thumbnail.png deleted file mode 100644 index 6b7508b6..00000000 Binary files a/robot_attrition_0.5.15/thumbnail.png and /dev/null differ diff --git a/rso-mod/changelog.txt b/rso-mod/changelog.txt new file mode 100644 index 00000000..96499265 --- /dev/null +++ b/rso-mod/changelog.txt @@ -0,0 +1,810 @@ +--------------------------------------------------------------------------------------------------- +Version: 6.2.22 +Date: 2023.01.09 + Changes: + - extend Industral Revolution mod support to version 3 of mod +--------------------------------------------------------------------------------------------------- +Version: 6.2.21 +Date: 2022.12.20 + Changes: + - update support for PY mods (thanks to notnotmelon) +--------------------------------------------------------------------------------------------------- +Version: 6.2.20 +Date: 2022.07.26 + Changes: + - add support for bzgas mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.19 +Date: 2022.07.08 + Changes: + - add support for bztin mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.18 +Date: 2022.07.04 + Changes: + - fixed Krastorio 2 mineral water config (thanks to Dairyman) +--------------------------------------------------------------------------------------------------- +Version: 6.2.17 +Date: 2022.06.26 + Changes: + - make PyMod configs dual (old one restored and new one active from pycoal 1.9.4) +--------------------------------------------------------------------------------------------------- +Version: 6.2.16 +Date: 2022.06.22 + Changes: + - add raising of build events when spawning ores and enemies +--------------------------------------------------------------------------------------------------- +Version: 6.2.15 +Date: 2022.05.28 + Changes: + - updated configuration for PyMods and added config for PyAlternativeEnergy (by TwentyEighty) +--------------------------------------------------------------------------------------------------- +Version: 6.2.14 +Date: 2022.03.18 + Changes: + - updated configuration for Quatmore (by Qatavin) +--------------------------------------------------------------------------------------------------- +Version: 6.2.13 +Date: 2022.02.11 + Changes: + - added Ukrainian translation by Met_en_Bouldry + - add support for bzcarbon mod (by brevven) + - add support for bzaluminum mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.12 +Date: 2022.01.08 + Changes: + - added support for RitnGlass + - add /rso-override-seed command - can be used to pass fixed seed to rso to be used for ore generation + - add isInStartingArea to external interface - passing game surface index and tile X, Y will check if it's in one of starting areas + - fix RSO enemy base spawning to take into account bigger starting area when calculating enemy base composition + - added mod thumbnail by snouz +--------------------------------------------------------------------------------------------------- +Version: 6.2.11 +Date: 2021.10.28 + Changes: + - added fix of carbon adamo mod to resource generation +--------------------------------------------------------------------------------------------------- +Version: 6.2.10 +Date: 2021.10.26 + Changes: + - added support for Qatmore mod (by Qatavin) +--------------------------------------------------------------------------------------------------- +Version: 6.2.9 +Date: 2021.09.09 + Changes: + - added support for SpFuMaterialPack mod +--------------------------------------------------------------------------------------------------- +Version: 6.2.8 +Date: 2021.06.19 + Changes: + - added support for nullius mod (by Anachrony) + - added support for Zirconium mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.7 +Date: 2021.06.13 + Changes: + - when Krastorio 2 and Tungsten mods are present there will be mineral water spawn in starting area + - add suport for starting ore settings from Angel's Refining +--------------------------------------------------------------------------------------------------- +Version: 6.2.6 +Date: 2021.05.22 + Changes: + - added support for Tungsten mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.5 +Date: 2021.04.18 + Changes: + - marked Bitumen mod as incompatible + - added support for Idinc's fork of Amathor Phasma's Nuclear mod + - added support for Enhanced Recipes mod +--------------------------------------------------------------------------------------------------- +Version: 6.2.4 +Date: 2021.04.04 + Changes: + - added support for dual ores mod +--------------------------------------------------------------------------------------------------- +Version: 6.2.3 +Date: 2021.03.13 + Changes: + - added support for cold and explosive biters mods +--------------------------------------------------------------------------------------------------- +Version: 6.2.2 +Date: 2021.01.27 + Changes: + - added config for bzlead mod (by brevven) +--------------------------------------------------------------------------------------------------- +Version: 6.2.1 +Date: 2020.12.24 + Changes: + - adjusted config for IR 2 +--------------------------------------------------------------------------------------------------- +Version: 6.2.0 +Date: 2020.11.24 + Changes: + - initial update for Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 6.1.4 +Date: 2020.11.17 + Changes: + - update pypetroleumhandling config (resource fixes from kingarthur) +--------------------------------------------------------------------------------------------------- +Version: 6.1.3 +Date: 2020.11.16 + Changes: + - update pypetroleumhandling config (add bitumen-seep config by Nuage0) +--------------------------------------------------------------------------------------------------- +Version: 6.1.2 +Date: 2020.09.20 + Changes: + - added lithium to Darkstar Utilities support + - moved Bobs and Angels configs to the end to make them override other mods +--------------------------------------------------------------------------------------------------- +Version: 6.1.1 +Date: 2020.08.16 + Changes: + - added support for Zombies Extended mod +--------------------------------------------------------------------------------------------------- +Version: 6.1.0 +Date: 2020.08.14 + Changes: + - added spawning of enemy base decals +--------------------------------------------------------------------------------------------------- +Version: 6.0.11 +Date: 2020.07.18 + Changes: + - added support for Dark Matter Replicators 18+ mod + - added support for new MadClown's ores +--------------------------------------------------------------------------------------------------- +Version: 6.0.10 +Date: 2020.06.21 + Changes: + - added support for Food Industries mod + - applied rename of sand to heavy-sand for Xander Mod + - added natural gas 1,2,3,4 resources from Py Petroleum Handling to ignored list to suppress warning message + - restored support for Geothermal generator mod (base game was updated to spawn resources properly) +--------------------------------------------------------------------------------------------------- +Version: 6.0.9 +Date: 2020.05.03 + Changes: + - increased probability of imersite in Krastorio2 slightly + - reduced probability for niobium in PyCoal slightly +--------------------------------------------------------------------------------------------------- +Version: 6.0.8 +Date: 2020.04.11 + Changes: + - removed support for Geothermal generator mod (it doesn't work and issue is NaB from devs) + - resources from Geothermal generator mod are now on ignore list and will spawn with default generator +--------------------------------------------------------------------------------------------------- +Version: 6.0.7 +Date: 2020.04.11 + Changes: + - added support for Geothermal generator mod +--------------------------------------------------------------------------------------------------- +Version: 6.0.6 +Date: 2020.03.14 + Changes: + - added support for Krastorio2 (by Krastor) +--------------------------------------------------------------------------------------------------- +Version: 6.0.5 +Date: 2020.03.01 + Changes: + - updated Py Raw Ores config to make raw coal spawn in starting area +--------------------------------------------------------------------------------------------------- +Version: 6.0.4 +Date: 2020.02.29 + Changes: + - added support for Leighzer's Cheetah Ore mod (by Leighzer) + - added support for Enchanted mod's (Electronics, Nuclear, Industries) +--------------------------------------------------------------------------------------------------- +Version: 6.0.3 +Date: 2020.02.20 + Changes: + - updated Angel's natural gas generation to make numbers sane (by Dregre) +--------------------------------------------------------------------------------------------------- +Version: 6.0.2 +Date: 2020.02.11 + Changes: + - added compatibility with pyalienlife (by kingarthur) +--------------------------------------------------------------------------------------------------- +Version: 6.0.1 +Date: 2020.02.08 + Changes: + - added compatibility with Factorio Tiberium mod (RSO ignores tiberium resources and lets the mod handle it) +--------------------------------------------------------------------------------------------------- +Version: 6.0.0 +Date: 2020.01.20 + Changes: + - updated to Factorio 0.18 +--------------------------------------------------------------------------------------------------- +Version: 5.0.24 +Date: 2019.11.19 + Changes: + - updated tiberium support to handle latest update by Oktabyte + - added small chromium patch to starting area in PyOres +--------------------------------------------------------------------------------------------------- +Version: 5.0.23 +Date: 2019.11.10 + Changes: + - added support for Amator Phasma's Nuclear +--------------------------------------------------------------------------------------------------- +Version: 5.0.22 +Date: 2019.11.05 + Changes: + - added support for Mobile Factory +--------------------------------------------------------------------------------------------------- +Version: 5.0.21 +Date: 2019.10.22 + Changes: + - added support for DyWorld 0.9.1 (by bestreducer) +--------------------------------------------------------------------------------------------------- +Version: 5.0.20 +Date: 2019.09.08 + Changes: + - updated support for Krastorio - requires latest Krastorio version + - added support for Industrial Revolution +--------------------------------------------------------------------------------------------------- +Version: 5.0.19 +Date: 2019.08.28 + Changes: + - updated support for Adamo Carbon mod (by ElAdamo) + - improved ore patch generation (it should be a bit faster overall and fixes issues with wrong placement near obstacles) +--------------------------------------------------------------------------------------------------- +Version: 5.0.18 +Date: 2019.08.10 + Changes: + - updated support for Bitumen mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.17 +Date: 2019.08.01 + Changes: + - added support for Adamo Carbon mod (by ElAdamo) +--------------------------------------------------------------------------------------------------- +Version: 5.0.16 +Date: 2019.07.27 + Changes: + - added support for Titanium mod + - added support for Bottled science mod + - added support for Modder's Science Pack mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.15 +Date: 2019.07.19 + Changes: + - updated support for Krastorio - requires latest Krastorio version +--------------------------------------------------------------------------------------------------- +Version: 5.0.14 +Date: 2019.07.09 + Changes: + - added support for Reforested Wood mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.13 +Date: 2019.07.09 + Changes: + - fixed changing of enemy base spawn chance during game causing crash +--------------------------------------------------------------------------------------------------- +Version: 5.0.12 +Date: 2019.07.06 + Changes: + - fixed starting area being created when mod is added to existing save +--------------------------------------------------------------------------------------------------- +Version: 5.0.11 +Date: 2019.07.05 + Changes: + - added support for Therax's fork of Xander Mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.10 +Date: 2019.06.27 + Changes: + - added support for Simple Silicon mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.9 +Date: 2019.06.01 + Changes: + - readded regenerate function that was removed when doing surface upgrade, it will regenerate all known surfaces + - removed using of starting locations from map settings, addStartLocation needs to be used explicitly to spawn starting location through RSO + - fixed that initial creation of starting areas could bypass the ingored surface filter +--------------------------------------------------------------------------------------------------- +Version: 5.0.8 +Date: 2019.05.29 + Changes: + - updated starting location spawning to use starting locations from map settings + - disabled player prints when adding new starting location (status is logged in game log) +--------------------------------------------------------------------------------------------------- +Version: 5.0.7 +Date: 2019.05.19 + Changes: + - fixed migration issue that could cause crashes when RSO was added to save with multiple surfaces +--------------------------------------------------------------------------------------------------- +Version: 5.0.6 +Date: 2019.05.08 + Changes: + - fixed RSO not adopting properly to starting area location being changed by server settings +--------------------------------------------------------------------------------------------------- +Version: 5.0.5 +Date: 2019.05.08 + Changes: + - added proper fix for crash when running in sandbox mode + - fixed crash when spawning player when new surface is created and create surface event doesn't fire +--------------------------------------------------------------------------------------------------- +Version: 5.0.4 +Date: 2019.05.08 + Changes: + - fixed crash when running in sandbox mode +--------------------------------------------------------------------------------------------------- +Version: 5.0.3 +Date: 2019.05.07 + Changes: + - fixed crash when adding new starting position + - fixed wrong distance calculations with multiple starting positions + - added automatic chunk generation for new starting location + - adding of new starting location will use nauvis if no player is given +--------------------------------------------------------------------------------------------------- +Version: 5.0.2 +Date: 2019.05.07 + Changes: + - fixed crash with Delete Empty Chunks mod +--------------------------------------------------------------------------------------------------- +Version: 5.0.1 +Date: 2019.05.07 + Changes: + - fixed crash if surface was created before RSO had a chance to initialize +--------------------------------------------------------------------------------------------------- +Version: 5.0.0 +Date: 2019.05.06 + Changes: + - upgraded resource generation to support multiple surfaces + - added option to regen only resources without respawning enemies + - updated support for Leighzer Science Ores (by Leighzer) +--------------------------------------------------------------------------------------------------- +Version: 4.1.1 + Changes: + - updated support for PyPetroleum Handling (by TwentyEighty) +--------------------------------------------------------------------------------------------------- +Version: 4.1.0 + Changes: + - added support for PyPetroleum Handling (by aklesey1) + - switched to new collision check for enemy bases and turrets (RSO generated bases will be biter pathing friendly) +--------------------------------------------------------------------------------------------------- +Version: 4.0.4 + Changes: + - added changelog (big thanks to Pi-C for processing mod portal one) + - added support for Leighzer Science Ores (by Leighzer) + - added support for Leighzer Science Bottling (by Leighzer) + - added support for Krastorio (by Krastor) + - added support for AiX Matter (by AlienX) + - added support for new enemy bases from Bob's Enemies +--------------------------------------------------------------------------------------------------- +Version: 4.0.3 + Changes: + - increased starting area resource spread and made it aware of starting area size setting + - made few resources more frequent for bobsores (galena, quartz) + - reduced minimum ore values to prevent generation of to rich fields (mainly affected very big ore patches close to start) +--------------------------------------------------------------------------------------------------- +Version: 4.0.2 + Bugfixes: + - fixed issue that could crash the game with to big amount of resource in an oil patch + Changes: + - added support for Leighzer's Morphite mod + - added support for Extended Industries mod + - added ignore for Geothermal generator mod since it's spawning it's own resources +--------------------------------------------------------------------------------------------------- +Version: 4.0.1 + Bugfixes: + - fixed issue with bob enemies mod and behemot turret + Changes: + - added behemot turret support for vanilla turret + - added russian translation (by godOFslaves) + +--------------------------------------------------------------------------------------------------- +Version: 4.0.0 + Info: + - inital release for Factorio 0.17 + Changes: + - new map gen settings are handled properly by RSO (values work directly with frequency having caveat as described above and enemy frequency having not much of an effect above 2 since it results in enemy base per region) + +--------------------------------------------------------------------------------------------------- +Version: 3.8.3 + Changes: + - tweaked Py Raw Ores config slightly to fix issue with salt rocks +--------------------------------------------------------------------------------------------------- +Version: 3.8.2 + Changes: + - added prelimiary support for Py Raw Ores (provided by subie) +--------------------------------------------------------------------------------------------------- +Version: 3.8.1 + Changes: + - added support for Xander Mod v1 +--------------------------------------------------------------------------------------------------- +Version: 3.8.0 + Changes: + - added support for Tiny Overhaul mod + - added support for Natural Evolution Enemies new enemy bases +--------------------------------------------------------------------------------------------------- +Version: 3.7.8 + Changes: + - updated support for DyWorld mod +--------------------------------------------------------------------------------------------------- +Version: 3.7.7 + Changes: + - added support for Fixed Tiberium mod + - updated support for Xander mod (update by Repofme1) + - added Fossil Roots mod to be ignored by RSO so that it works with RSO present +--------------------------------------------------------------------------------------------------- +Version: 3.7.6 + Changes: + - added support for Hardcrafting Plus mod (created by Expresso) +--------------------------------------------------------------------------------------------------- +Version: 3.7.5 + Changes: + - modified support for Bio Industries to avoid dependency issues - requires Bio Industries 2.6.5 to work +--------------------------------------------------------------------------------------------------- +Version: 3.7.4 + Changes: + - added support for finite water mod - might need more balancing, requires version at least 0.0.7 to work properly +--------------------------------------------------------------------------------------------------- +Version: 3.7.3 + Changes: + - added support for KPOT titanium + - upgraded support for all minable (needs latest version of the mod) + - fixed various issues with resources size being set to none in map settings +--------------------------------------------------------------------------------------------------- +Version: 3.7.2 + Bugfixes: + - fixed crash in configuration changed event +--------------------------------------------------------------------------------------------------- +Version: 3.7.1 + Changes: + - added support for Bio Industries mod water option + - added support for DP77's Ores mod (created by DiegoPro77) + - added support for Cargo Ships mod (suppres the warning only since mod spawns it's resources in code) +--------------------------------------------------------------------------------------------------- +Version: 3.7.0 + Changes: + - added support for FMRx mod + - added option to disable ores from starting area, oil option extended to disable all fluid resources in starting area +--------------------------------------------------------------------------------------------------- +Version: 3.6.5 + Bugfixes: + - fixed crash when Agnel's and Anonymods are present +--------------------------------------------------------------------------------------------------- +Version: 3.6.4 + Changes: + - fixed issue with bob's ores thorium when it's forced to be present from settings in certain mod configurations + - adjusted how distance and size exponents work to make factors below 1 work properly +--------------------------------------------------------------------------------------------------- +Version: 3.6.3 + Bugfixes: + - fixed potential issue with detection of disabled ores again +--------------------------------------------------------------------------------------------------- +Version: 3.6.2 + Bugfixes: + - fixed potential issue with detection of disabled ores +--------------------------------------------------------------------------------------------------- +Version: 3.6.1 + Bugfixes: + - fixed oil in starting area setting +--------------------------------------------------------------------------------------------------- +Version: 3.6.0 + Bugfixes: + - fixed size and richness map settings to be applied correctly (thanks to morsk for noticing that something is wrong) +--------------------------------------------------------------------------------------------------- +Version: 3.5.14 + Changes: + - added support for All Mineable mod +--------------------------------------------------------------------------------------------------- +Version: 3.5.13 + Changes: + - added support for Cncs sulfur and Dp77s sulfur + - added support for low spec version of Darkstar Utilities +--------------------------------------------------------------------------------------------------- +Version: 3.5.12 + Changes: + - added support for PyHightTech ores +--------------------------------------------------------------------------------------------------- +Version: 3.5.11 + Changes: + - added support for new ores from PyCoal mod +--------------------------------------------------------------------------------------------------- +Version: 3.5.10 + Changes: + - updated support for Hard Crafting mod +--------------------------------------------------------------------------------------------------- +Version: 3.5.9 + Changes: + - added support for Liquid Science mod +--------------------------------------------------------------------------------------------------- +Version: 3.5.8 + Bugfixes: + - fixed potential desync issues caused by use of global variables (thanks to Mylon for noticing and showing how to find them) + - fixed rare case where ore/base could not spawn if it was in same vertical line as different ore/base in same chunk +--------------------------------------------------------------------------------------------------- +Version: 3.5.7 + Changes: + - added support for MadClown01's Extended AngelBob Minerals +--------------------------------------------------------------------------------------------------- +Version: 3.5.6 + Changes: + - removed Yaiom support since it doesn't work properly +--------------------------------------------------------------------------------------------------- +Version: 3.5.5 + Bugfixes: + - fixed Homeworld sand support + Changes: + - added Yaiom support + - removed SigmaOne's Nuclear mod fluorine ore from start area +--------------------------------------------------------------------------------------------------- +Version: 3.5.4 + Bugfixes: + - fixed regenerate function with bob's mods present + Changes: + - added support for IceMod (provided by darkfrei) + - adjusted XanderMod config (reduced ore density, removed pitchblende from start) + - added rso-regenerate command +--------------------------------------------------------------------------------------------------- +Version: 3.5.3 + Changes: + - added dependencies back to fix issues with bobores +--------------------------------------------------------------------------------------------------- +Version: 3.5.2 + Changes: + - added support for Factorio Plus Plus +--------------------------------------------------------------------------------------------------- +Version: 3.5.1 + Changes: + - added option to disable oil in starting area + - added support for Napus Mod, Hydraulic Pumpjacks and Drug Lab +--------------------------------------------------------------------------------------------------- +Version: 3.5.0 + Info: + - first release for 0.16 - increase iron ore richness a bit and removed uranium from starting area (along with 0.16 release notes) + +--------------------------------------------------------------------------------------------------- +Version: 3.4.8 + Changes: + - added support for DyWorld 0.5.1 +--------------------------------------------------------------------------------------------------- +Version: 3.4.7 + Changes: + - added support for DyWorld 0.5 +--------------------------------------------------------------------------------------------------- +Version: 3.4.6 + Changes: + - added support for DyWorld + - added support for PyFusionEnergy +--------------------------------------------------------------------------------------------------- +Version: 3.4.5 + Changes: + - updated Anonymods config - adds support for new metalurgy changes + - updated Xander mod config +--------------------------------------------------------------------------------------------------- +Version: 3.4.4 + Bugfixes: + - fixed issue that could lead to ore being spawned on water by mistake +--------------------------------------------------------------------------------------------------- +Version: 3.4.3 + Changes: + - added support for Darkstar utilities + - added protection from unrecognized resource settings and additional logging for this case +--------------------------------------------------------------------------------------------------- +Version: 3.4.2 + Changes: + - modified way in which ore regen is reported (goes to game log now) +--------------------------------------------------------------------------------------------------- +Version: 3.4.1 + Changes: + - rewrote positional seed generation to prevent overflow issues + - added remote resetGeneration method to tell RSO that it should reset it's internals and treat whole map as new +--------------------------------------------------------------------------------------------------- +Version: 3.3.13 + Changes: + - updated config for Xander mod (provided by Repofme1) +--------------------------------------------------------------------------------------------------- +Version: 3.3.12 + Changes: + - added support for Xander mod +--------------------------------------------------------------------------------------------------- +Version: 3.3.11 + Changes: + - added support for SigmaOne Nuclear mod +--------------------------------------------------------------------------------------------------- +Version: 3.3.10 + Bugfixes: + - fixed angels infinite ore threshold setting range + Changes: + - added support for portal research mod +--------------------------------------------------------------------------------------------------- +Version: 3.3.9 + Bugfixes: + - fixed issue with remote interface for disabling of chunk generation again +--------------------------------------------------------------------------------------------------- +Version: 3.3.7 + Bugfixes: + - fixed issue with remote interface for disabling of chunk generation +--------------------------------------------------------------------------------------------------- +Version: 3.3.6 + Changes: + - updated fluid generation to make bigger fields possible +--------------------------------------------------------------------------------------------------- +Version: 3.3.5 + Bugfixes: + - fixed crash when resource landed fully in water +--------------------------------------------------------------------------------------------------- +Version: 3.3.4 + Changes: + - improved resource collission detection to reduce overlaps + - tweaked starting area spawning algorithm +--------------------------------------------------------------------------------------------------- +Version: 3.3.3 + Changes: + - modified oil spawning to be more grouped in case it landed near water +--------------------------------------------------------------------------------------------------- +Version: 3.3.2 + Changes: + - removed surprise ore regen on load +--------------------------------------------------------------------------------------------------- +Version: 3.3.1 + Bugfixes: + - fixed region generation that caused ores to go missing in about 1/7th cases + - fixed multiple ore generation that could fail to place new ore properly + Changes: + - lowered minimums for richness settings +--------------------------------------------------------------------------------------------------- +Version: 3.3.0 + Bugfixes: + - fixed conflicts with sulfur ore + - fixed random generator creation to prevent symmetrical ore generation +--------------------------------------------------------------------------------------------------- +Version: 3.2.6 + Changes: + - revised spawning of enemy bases to prevent crashes at very long distances and allow them to be bigger +--------------------------------------------------------------------------------------------------- +Version: 3.2.5 + Changes: + - added support for omnimod (provided by EmperorZelos) + - increased search range and amount of tries for spawning of fluids (should help alleviate issues with water spawning) +--------------------------------------------------------------------------------------------------- +Version: 3.2.4 + Changes: + - added distance exponents to settings +--------------------------------------------------------------------------------------------------- +Version: 3.2.3 + Changes: + - added thorium ore support for bob's mods +--------------------------------------------------------------------------------------------------- +Version: 3.2.2 + Bugfixes: + - fixed potential crash if for some reason there are no valid ores to spawn +--------------------------------------------------------------------------------------------------- +Version: 3.2.1 + Changes: + - added validation to prevent potential rng error +--------------------------------------------------------------------------------------------------- +Version: 3.2.0 + Changes: + - rewrote handling of resource configuration to make mod compatible with upcoming mod validation +--------------------------------------------------------------------------------------------------- +Version: 3.1.7 + Changes: + - rebalanced bob's mods ores + - added support for primordial ooze mod +--------------------------------------------------------------------------------------------------- +Version: 3.1.6 + Changes: + - increased limit for region size to 100 and enemy base size to 20 +--------------------------------------------------------------------------------------------------- +Version: 3.1.5 + Bugfixes: + - fixed resource regeneration not ignoring start area + Changes: + - added Angel's infinite ore integration settings to mod settings system +--------------------------------------------------------------------------------------------------- +Version: 3.1.4 + Changes: + - update angel's ores config (provided by Arch666Angel) - fixes fluid counts on resources + - updated fluids config for bobs ores +--------------------------------------------------------------------------------------------------- +Version: 3.1.3 + Bugfixes: + - fixed issues with resource regeneration +--------------------------------------------------------------------------------------------------- +Version: 3.1.2 + Bugfixes: + - fixed issue with multi resource generation +--------------------------------------------------------------------------------------------------- +Version: 3.1.1 + Bugfixes: + - fixed vanilla biter generation option + Changes: + - added tree removal option (known issue - some trees might remain and it's not an easy fix) +--------------------------------------------------------------------------------------------------- +Version: 3.1.0 + Changes: + - added mod settings using new setting system + - moved to built in random generator for resource generation +--------------------------------------------------------------------------------------------------- +Version: 3.0.1 + Changes: + - tweaked resource generation (more oil wells, uranium a bit less rich) +--------------------------------------------------------------------------------------------------- +Version: 3.0.0 + Info: + - first version for 0.15, please use forum for comments/issues - not tested extensively (https://forums.factorio.com/viewtopic.php?f=79&t=44580) + +--------------------------------------------------------------------------------------------------- +Version: 2.3.5 + Bugfixes: + - fixed issue with runTest remote call function + Changes: + - boosted range scaling for richness and size a bit more to not be very inferior compared to vanilla +--------------------------------------------------------------------------------------------------- +Version: 2.3.4 + Changes: + - updated Angels ore config (provided by Arch666Angel) + - added fixes to platforms mod integration (provided by Dreadicon) + - buffed richness scaling with distance +--------------------------------------------------------------------------------------------------- +Version: 2.3.3 + Changes: + - added new RsoMod variable defined in data.lua to allow for RSO detection on data stage + - added new remote interface disableStartingArea to disable generation of starting area ores +--------------------------------------------------------------------------------------------------- +Version: 2.3.2 + Changes: + - added support for Cnc's Sulfur mod +--------------------------------------------------------------------------------------------------- +Version: 2.3.1 + Bugfixes: + - fixed desync with water maze support + Changes: + - made quartz a bit more rich for AnonyMods +--------------------------------------------------------------------------------------------------- +Version: 2.3.0 + Changes: + - added beta support for AnonyMods (might be unbalanced/difficult to play) + - added special handling for platforms mod (thanks to Dreadicon) +--------------------------------------------------------------------------------------------------- +Version: 2.2.9 + Changes: + - added support for Infinium ore mod +--------------------------------------------------------------------------------------------------- +Version: 2.2.8 + Changes: + - added remote interface that allows other mods to control order of map generation (potential integration with Water Maze mod). Known issue is that ore patches might be a bit cut when this callback is in use - this is not easy to fix atm. +--------------------------------------------------------------------------------------------------- +Version: 2.2.7 + Changes: + - added support for Andrew's ore 0.14.8, please make sure to also upgrade Andrew's ore +--------------------------------------------------------------------------------------------------- +Version: 2.2.6 + Bugfixes: + - fixed issue with starting area spawn when RSO is added to running game +--------------------------------------------------------------------------------------------------- +Version: 2.2.5 + Bugfixes: + - fixed issue with Bukket mod support when it was not present +--------------------------------------------------------------------------------------------------- +Version: 2.2.4 + Changes: + - added support for Bukket mod +--------------------------------------------------------------------------------------------------- +Version: 2.2.3 + Changes: + - added support for Andrews ores + - added support for Beyond +--------------------------------------------------------------------------------------------------- +Version: 2.2.2 + Changes: + - added support for HardCrafting 0.5.0 +--------------------------------------------------------------------------------------------------- +Version: 2.2.1 + Bugfixes: + - fixed starting area resource duplication on upgrade/load +--------------------------------------------------------------------------------------------------- +Version: 2.2.0 + Changes: + - added multiple starting location support - for details please see instructions on the forum thread (https://forums.factorio.com/viewtopic.php?f=79&t=12709) + +--------------------------------------------------------------------------------------------------- +Version: 2.1.0 + Info: + - updated for Factorio 0.14 diff --git a/rso-mod_6.2.25/config.lua b/rso-mod/config.lua similarity index 100% rename from rso-mod_6.2.25/config.lua rename to rso-mod/config.lua diff --git a/rso-mod/control.lua b/rso-mod/control.lua new file mode 100644 index 00000000..7f47d52c --- /dev/null +++ b/rso-mod/control.lua @@ -0,0 +1,2172 @@ +require "config" +require "util" + +require "resourceconfigs.mainconfig" +require "libs.straight_world" +require "libs.straight_world_platforms" + +local MB=require "libs/metaball" + +local logger = require 'libs/logger' +local l = logger.new_logger() + +-- math shortcuts +local floor = math.floor +local abs = math.abs +local cos = math.cos +local sin = math.sin +local pi = math.pi +local max = math.max + +local function round(value) + return math.floor(value + 0.5) +end + +local function debug(str) + if debug_enabled then + l:log(str) + end +end + +function tableLength(tableToCount) + local count = 0 + for _ in pairs(tableToCount) do count = count + 1 end + return count +end + +-- cached setting value +local region_size = settings.global["rso-region-size"].value + +-- constants +local CHUNK_SIZE = 32 +local REGION_TILE_SIZE = CHUNK_SIZE*region_size +local MIN_BALL_DISTANCE = CHUNK_SIZE/6 +local P_BALL_SIZE_FACTOR = 0.7 +local N_BALL_SIZE_FACTOR = 0.95 +local NEGATIVE_MODIFICATOR = 9973 + +local meta_shapes = nil + +if settings.global["rso-use-donuts"].value then + meta_shapes = {MB.MetaEllipse, MB.MetaSquare, MB.MetaDonut} +else + meta_shapes = {MB.MetaEllipse, MB.MetaSquare} +end + +-- local globals +local distance = util.distance +local invalidResources = {} + +--[[ HELPER METHODS ]]-- + +local function normalize(n) -- keep numbers at 32 bits + return floor(n) % 0xffffffff +end + +local function bearing(origin, dest) + -- finds relative angle + local xd = dest.x - origin.x + local yd = dest.y - origin.y + return math.atan2(xd, yd); +end + +local function str2num(s) + local num = 0 + for i=1,s:len() do + num=num + (s:byte(i) - 33)*i + end + return num +end + +--local function rng_for_pos(pos) +-- local num = 0 +-- local x = pos.x +-- local y = pos.y +-- +-- if x == 0 then x = 0.5 end +-- if y == 0 then y = 0.5 end +-- if x < 0 then +-- x = abs(x) + NEGATIVE_MODIFICATOR +-- end +-- if y < 0 then +-- y = abs(y) + NEGATIVE_MODIFICATOR +-- end +-- +-- return rng* drand.lcg(y, 'mvc'):random(0)*drand.lcg(x, 'nr'):random(0) +--end + +local function rng_for_reg_pos(surfaceIndex, pos) + local x = pos.x + local y = pos.y + + local rng = game.create_random_generator() + + if x == 0 then x = 0.5 end + if y == 0 then y = 0.5 end + + if x < 0 then + x = abs(x) + NEGATIVE_MODIFICATOR + end + if y < 0 then + y = abs(y) + NEGATIVE_MODIFICATOR + end + + rng.re_seed(normalize(x * 65536)) + local valX = rng(65536) + rng.re_seed(normalize(y * 32768)) + local valY = rng(32768) + + local mapSeed = global.surfaces[surfaceIndex].seed + if global.mapSeedOverride then + mapSeed = global.mapSeedOverride + end + local seed = normalize( valX * valY * mapSeed ) + rng.re_seed( seed ) + + debug("Generator for " .. pos.x .. "," .. pos.y .. " created with seed " .. seed .. " x:" .. valX .. " y:" .. valY) + + return rng +end + +local function rng_restricted_angle(restrictions, rng) + local value = rng() + local x_scale, y_scale, angle + local deformX = rng() * 2 - 1 + local deformY = rng() * 2 - 1 + + if restrictions=='xy' then + y_scale=1.0 + deformY*0.5 + x_scale=1.0 + deformX*0.5 + angle = value*pi*2 + elseif restrictions=='x' then + y_scale=1.0 + deformY*0.6 + x_scale=1.0 + deformX*0.6 + angle = value*pi/2 - pi/4 + elseif restrictions=='y' then + y_scale=1.0 + deformY*0.6 + x_scale=1.0 + deformX*0.6 + angle = value*pi/2 + pi/2 + else + y_scale=1.0 + deformY*0.3 + x_scale=1.0 + deformX*0.3 + angle = value*pi*2 + end + + return angle, x_scale, y_scale +end + +local function vary_by_percentage(x, p, rng) + return x + (0.5 - rng())*2*x*p +end + + +local function remove_trees(surface, x, y, x_size, y_size ) + local bb = {{x - x_size, y - y_size}, {x + x_size, y + y_size}} + + for _, entity in pairs(surface.find_entities_filtered{area = bb, type={"tree", "simple-entity"}}) do + if entity.valid then + entity.destroy() + end + end +end + +local function remove_trees_based_on_bb(surface, x, y, boundingBox) + local bb = {{x + boundingBox.left_top.x, y + boundingBox.left_top.y}, {x + boundingBox.right_bottom.x, y + boundingBox.right_bottom.x}} + + for _, entity in pairs(surface.find_entities_filtered{area = bb, type={"tree", "simple-entity"}}) do + if entity.valid then + entity.destroy() + end + end +end + +local function find_intersection(surface, x, y) + -- try to get position in between of valid chunks by probing map + -- this may breaks determinism of generation, but so far it returned on first if + local gt = surface.get_tile + local restriction = '' + if gt(x + CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid then + restriction = 'xy' + elseif gt(x + CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y).valid and gt(x, y + CHUNK_SIZE*2).valid then + x=x + CHUNK_SIZE/2 + y=y + CHUNK_SIZE/2 + restriction = 'xy' + elseif gt(x + CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y).valid and gt(x, y - CHUNK_SIZE*2).valid then + x=x + CHUNK_SIZE/2 + y=y - CHUNK_SIZE/2 + restriction = 'xy' + elseif gt(x - CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y).valid and gt(x, y + CHUNK_SIZE*2).valid then + x=x - CHUNK_SIZE/2 + y=y + CHUNK_SIZE/2 + restriction = 'xy' + elseif gt(x - CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y).valid and gt(x, y - CHUNK_SIZE*2).valid then + x=x - CHUNK_SIZE/2 + y=y - CHUNK_SIZE/2 + restriction = 'xy' + elseif gt(x + CHUNK_SIZE*2, y).valid then + x=x + CHUNK_SIZE/2 + restriction = 'x' + elseif gt(x - CHUNK_SIZE*2, y).valid then + x=x - CHUNK_SIZE/2 + restriction = 'x' + elseif gt(x, y + CHUNK_SIZE*2).valid then + y=y + CHUNK_SIZE/2 + restriction = 'y' + elseif gt(x, y - CHUNK_SIZE*2).valid then + y=y - CHUNK_SIZE/2 + restriction = 'y' + end + return x, y, restriction +end + +local function find_random_chunk(r_x, r_y, rng) + local offset_x=rng(region_size) - 1 + local offset_y=rng(region_size) - 1 + local c_x=r_x*REGION_TILE_SIZE + offset_x*CHUNK_SIZE + local c_y=r_y*REGION_TILE_SIZE + offset_y*CHUNK_SIZE + -- debug("Random chunk "..r_x..","..r_y.." coords "..c_x..","..c_y.." offset "..offset_x..","..offset_y) + return c_x, c_y +end + +local function is_same_region(c_x1, c_y1, c_x2, c_y2) + if not (floor(c_x1/REGION_TILE_SIZE) == floor(c_x2/REGION_TILE_SIZE)) then + return false + end + if not (floor(c_y1/REGION_TILE_SIZE) == floor(c_y2/REGION_TILE_SIZE)) then + return false + end + return true +end + +local function find_random_neighbour_chunk(ocx, ocy, rng) + -- somewhat bruteforce and unoptimized + local x_dir = rng(-2,2) + local y_dir = rng(-2,2) + + local ncx = ocx + x_dir * CHUNK_SIZE + local ncy = ocy + y_dir * CHUNK_SIZE + if is_same_region(ncx, ncy, ocx, ocy) then + return ncx, ncy + end + + ncx = ocx - x_dir * CHUNK_SIZE + ncy = ocy - y_dir * CHUNK_SIZE + if is_same_region(ncx, ncy, ocx, ocy) then + return ncx, ncy + end + + ncx = ocx - x_dir * CHUNK_SIZE + ncy = ocy + y_dir * CHUNK_SIZE + if is_same_region(ncx, ncy, ocx, ocy) then + return ncx, ncy + end + + ncx = ocx + x_dir * CHUNK_SIZE + ncy = ocy - y_dir * CHUNK_SIZE + if is_same_region(ncx, ncy, ocx, ocy) then + return ncx, ncy + end + + return ocx, ocy +end + +local function isInStartingArea( surfaceIndex, tileX, tileY ) + + local surfaceData = global.surfaces[surfaceIndex] + + if surfaceData and surfaceData.startingAreas then + for idx, data in pairs( surfaceData.startingAreas ) do + + local adjustedX = ( tileX - data.x ) / REGION_TILE_SIZE + local adjustedY = ( tileY - data.y ) / REGION_TILE_SIZE + if ((adjustedX * adjustedX + adjustedY * adjustedY) <= surfaceData.starting_area_size * surfaceData.starting_area_size) then + return true + end + end + end + + return false +end + +local function distanceFromStartingAreas( surfaceData, regionX, regionY ) + + local minDistance = nil + + for idx, data in pairs( surfaceData.startingAreas ) do + local dist = distance({x = data.x / REGION_TILE_SIZE, y = data.y / REGION_TILE_SIZE},{x = regionX, y = regionY}) + if minDistance ~= nil then + minDistance = math.min(minDistance, dist) + else + minDistance = dist + end + end + + if minDistance == nil then + minDistance = distance({x = 0, y = 0},{x = regionX, y = regionY}) + end + + return minDistance +end + + +-- modifies the resource size - only used in endless_resource_mode +local function modify_resource_size(resourceName, resourceSize, startingArea) + + if not startingArea then + resourceSize = math.ceil(resourceSize * settings.global["rso-global-size-mult"].value) + end + + local resourceEntity = game.entity_prototypes[resourceName] + if resourceEntity and resourceEntity.infinite_resource then + + newResourceSize = resourceSize * endless_resource_mode_sizeModifier + + -- make sure it's still an integer + newResourceSize = math.ceil(newResourceSize) + -- make sure it's not 0 + if newResourceSize == 0 then newResourceSize = 1 end + return newResourceSize + else + return resourceSize + end +end + +--[[ SPAWN METHODS ]]-- + +local locationOrder = +{ + { x = 0, y = 0 }, + { x = -1, y = 0 }, + { x = 1, y = 0 }, + { x = 0, y = -1 }, + { x = 0, y = 1 }, + { x = -1, y = -1 }, + { x = 1, y = -1 }, + { x = -1, y = 1 }, + { x = 1, y = 1 } +} + +--[[ entity-field ]]-- +local function spawn_resource_ore(surface, rname, pos, size, richness, startingArea, restrictions, rng) + -- blob generator, centered at pos, size controls blob diameter + restrictions = restrictions or '' + debug("Entering spawn_resource_ore "..rname.." at:"..pos.x..","..pos.y.." size:"..size.." richness:"..richness.." isStart:"..tostring(startingArea).." restrictions:"..restrictions) + + size = modify_resource_size(rname, size, startingArea) + local radius = size / 2 -- to radius + + local p_balls={} + local n_balls={} + local MIN_BALL_DISTANCE = math.min(MIN_BALL_DISTANCE, radius/2) + + local maxPradius = 0 + local outside = { xmin = 1e10, xmax = -1e10, ymin = 1e10, ymax = -1e10 } + local inside = { xmin = 1e10, xmax = -1e10, ymin = 1e10, ymax = -1e10 } + + local function updateRect(rect, x, y, radius) + rect.xmin = math.min(rect.xmin, x - radius) + rect.xmax = math.max(rect.xmax, x + radius) + rect.ymin = math.min(rect.ymin, y - radius) + rect.ymax = math.max(rect.ymax, y + radius) + end + + local function updateRects(x, y, radius, scaleX, scaleY) + local radiusMax = radius * 3 -- arbitrary multiplier - needs to be big enough to not cut any metaballs + updateRect(outside, x, y, radiusMax) + updateRect(inside, x, y, radius) + end + + local function roundRect( rect ) + rect.xmin = round( rect.xmin ) + rect.xmax = round( rect.xmax ) + rect.ymin = round( rect.ymin ) + rect.ymax = round( rect.ymax ) + end + + local function generate_p_ball(rng) + local angle, x_scale, y_scale, x, y, b_radius, shape + angle, x_scale, y_scale=rng_restricted_angle(restrictions, rng) + local dev = radius / 2 + rng() * radius / 4--math.min(CHUNK_SIZE/3, radius*1.5) + local dev_x, dev_y = pos.x, pos.y + x = rng(-dev, dev)+dev_x + y = rng(-dev, dev)+dev_y + if p_balls[#p_balls] and distance(p_balls[#p_balls], {x=x, y=y}) < MIN_BALL_DISTANCE then + local new_angle = bearing(p_balls[#p_balls], {x=x, y=y}) + debug("Move ball old xy @ "..x..","..y) + x=(cos(new_angle)*MIN_BALL_DISTANCE) + x + y=(sin(new_angle)*MIN_BALL_DISTANCE) + y + debug("Move ball new xy @ "..x..","..y) + end + + if #p_balls == 0 then + b_radius = ( 3 * radius / 4 + rng() * radius / 4) -- * (P_BALL_SIZE_FACTOR^#p_balls) + else + b_radius = ( radius / 4 + rng() * radius / 2) -- * (P_BALL_SIZE_FACTOR^#p_balls) + end + + + if #p_balls > 0 then + local tempRect = table.deepcopy(inside) + updateRect(tempRect, x, y, b_radius, x_scale, y_scale) + local rectSize = math.max(tempRect.xmax - tempRect.xmin, tempRect.ymax - tempRect.ymin) + local targetSize = size * 1.25 + debug("Rect size "..rectSize.." targetSize "..targetSize) + if rectSize > targetSize then + local widthLeft = (targetSize - (inside.xmax - inside.xmin)) + local heightLeft = (targetSize - (inside.ymax - inside.ymin)) + local widthMod = math.min(x - inside.xmin, inside.xmax - x) + local heightMod = math.min(y - inside.ymin, inside.ymax - y) + local radiusBackup = b_radius + b_radius = math.min(widthLeft + widthMod, heightLeft + heightMod) + debug("Reduced ball radius from "..radiusBackup.." to "..b_radius.." widthLeft:"..widthLeft.." heightLeft:"..heightLeft.." widthMod:"..widthMod.." heightMod:"..heightMod) + end + end + + if b_radius < 2 and #p_balls == 0 then + b_radius = 2 + end + + if b_radius > 0 then + + maxPradius = math.max(maxPradius, b_radius) + shape = meta_shapes[rng(1,#meta_shapes)] + local radiusText = "" +-- log("Index rolled "..index.." shapes amount "..#meta_shapes) + if shape.type == "MetaDonut" then + local inRadius = b_radius / 4 + b_radius / 2 * rng() + radiusText = " inRadius:"..inRadius + p_balls[#p_balls+1] = shape:new(x, y, b_radius, inRadius, angle, x_scale, y_scale, 1.1) + else + p_balls[#p_balls+1] = shape:new(x, y, b_radius, angle, x_scale, y_scale, 1.1) + end + updateRects(x, y, b_radius, x_scale, y_scale) + + debug("P+Ball "..shape.type.." @ "..x..","..y.." radius: "..b_radius..radiusText.." angle: "..math.deg(angle).." scale: "..x_scale..", "..y_scale) + end + end + + local function generate_n_ball(i, rng) + local angle, x_scale, y_scale, x, y, b_radius, shape + angle, x_scale, y_scale=rng_restricted_angle('xy', rng) + if p_balls[i] then + local new_angle = p_balls[i].angle + pi*rng(0,2) + (rng()-0.5)*pi/2 + local dist = p_balls[i].radius + x=(cos(new_angle)*dist) + p_balls[i].x + y=(sin(new_angle)*dist) + p_balls[i].y + angle = p_balls[i].angle + pi/2 + (rng()-0.5)*pi*2/3 + else + x = rng(-radius, radius)+pos.x + y = rng(-radius, radius)+pos.y + end + + if p_balls[i] then + b_radius = (p_balls[i].radius / 4 + rng() * p_balls[i].radius / 2) -- * (N_BALL_SIZE_FACTOR^#n_balls) + else + b_radius = (radius / 4 + rng() * radius / 2) -- * (N_BALL_SIZE_FACTOR^#n_balls) + end + + if b_radius < 1 then + b_radius = 1 + end + + shape = meta_shapes[rng(1,#meta_shapes)] +-- log("Index rolled "..index.." shapes amount "..#meta_shapes) + local radiusText = "" + if shape.type == "MetaDonut" then + local inRadius = b_radius / 4 + b_radius / 2 * rng() + radiusText = " inRadius:"..inRadius + n_balls[#n_balls+1] = shape:new(x, y, b_radius, inRadius, angle, x_scale, y_scale, 1.15) + else + n_balls[#n_balls+1] = shape:new(x, y, b_radius, angle, x_scale, y_scale, 1.15) + end + -- updateRects(x, y, b_radius, x_scale, y_scale) -- should not be needed here - only positive ball can generate ore + debug("N-Ball "..shape.type.." @ "..x..","..y.." radius: "..b_radius..radiusText.." angle: "..math.deg(angle).." scale: "..x_scale..", "..y_scale) + end + + local function calculate_force(x,y) + local p_force = 0 + local n_force = 0 + for _,ball in pairs(p_balls) do + p_force = p_force + ball:force(x,y) + end + for _,ball in pairs(n_balls) do + n_force = n_force + ball:force(x,y) + end + local totalForce = 0 + if p_force > n_force then + totalForce = 1 - 1/(p_force - n_force) + end + --debug("Force at "..x..","..y.." p:"..p_force.." n:"..n_force.." result:"..totalForce) + --return (1 - 1/p_force) - n_force + return totalForce + end + + local max_p_balls = 2 + local min_amount = global.surfaces[surface.index].config[rname].min_amount or min_amount + if restrictions == 'xy' then + -- we have full 4 chunks + --radius = radius * 1.5 + --richness = richness * 2 / 3 + --min_amount = min_amount / 3 + max_p_balls = 3 + end + + radius = math.min(radius, 2*CHUNK_SIZE) + + local force + -- generate blobs + for i=1,max_p_balls do + generate_p_ball(rng) + end + + for i=1,rng(1, #p_balls) do + generate_n_ball(i, rng) + end + + local _total = 0 + local oreLocations = {} + local forceTotal = 0 + + roundRect( outside ) + + for y=outside.ymin, outside.ymax do + for x=outside.xmin, outside.xmax do + force = calculate_force(x, y) + if force > 0 then + oreLocations[#oreLocations + 1] = {x = x, y = y, force = force} + forceTotal = forceTotal + force + end + end + end + + local validCount, resOffsetX, resOffsetY, ratio + + local bestRatio = 0 + local bestRatioIndex = -1 + local checkedLocations = {} + + for index, locationOffset in pairs(locationOrder) do + validCount = 0 + resOffsetX = locationOffset.x * CHUNK_SIZE + resOffsetY = locationOffset.y * CHUNK_SIZE + + for _, location in pairs(oreLocations) do + + local newX = location.x + resOffsetX + local newY = location.y + resOffsetY + + if not checkedLocations[newX] then + checkedLocations[newX] = {} + end + if checkedLocations[newX][newY] == nil then + checkedLocations[newX][newY] = surface.can_place_entity{name = rname, position = {x = newX,y = newY}} + end + + if checkedLocations[newX][newY] then + validCount = validCount + 1 + end + end + + ratio = 0 + + if validCount > 0 then + ratio = validCount / #oreLocations + end + + debug("Valid ratio "..ratio.." for index "..index.." offsets "..resOffsetX..","..resOffsetY ) + + if not useResourceCollisionDetection then + break + end + + if ratio > bestRatio then + bestRatio = ratio + bestRatioIndex = index + end + if ratio > resourceCollisionDetectionRatio then + break + end + end + + if resourceCollisionFieldSkip and bestRatio < resourceCollisionDetectionRatioFallback then + validCount = 0 + debug("Cancelled with best ratio "..bestRatio.." for index "..bestRatioIndex ) + else + resOffsetX = locationOrder[bestRatioIndex].x * CHUNK_SIZE + resOffsetY = locationOrder[bestRatioIndex].y * CHUNK_SIZE + validCount = floor( bestRatio * #oreLocations ) + debug("Selected ratio "..bestRatio.." for index "..bestRatioIndex.." offsets "..resOffsetX..","..resOffsetY ) + end + + if validCount > 0 then + local removeTrees = settings.global["rso-remove-trees"].value + local revealResources = settings.global["rso-reveal-spawned-resources"].value + local revealChunks = {} + revealChunks.minX = 1e9 + revealChunks.minY = 1e9 + revealChunks.maxX = -1e9 + revealChunks.maxY = -1e9 + + local rectSize = ((inside.xmax - inside.xmin) + (inside.ymax - inside.ymin)) / 2 + + local sizeMultiplier = rectSize ^ 0.6 + local minSize = richness * 5 * sizeMultiplier + local maxSize = richness * 10 * sizeMultiplier + local approxDepositSize = rng(minSize, maxSize) + + approxDepositSize = approxDepositSize - validCount * min_amount + + if approxDepositSize < 0 then + approxDepositSize = 100 * validCount + end + + local forceFactor = approxDepositSize / forceTotal + + -- don't create very dense resources in starting area - another field will be generated + if startingArea and forceFactor > 4000 then + forceFactor = rng(3000, 4000) + end +-- elseif forceFactor > 25000 then -- limit size of one resource pile +-- forceFactor = rgen:random(20000, 25000) +-- end + + debug( "Force total:"..forceTotal.." sizeMin:"..minSize.." sizeMax:"..maxSize.." factor:"..forceFactor.." location#:"..validCount.." rectSize:"..rectSize.." sizeMultiplier:"..sizeMultiplier) + local richnessMultiplier = settings.global["rso-global-richness-mult"].value + + if startingArea then + richnessMultiplier = settings.global["rso-starting-richness-mult"].value + end +-- if game.players[1] then +-- game.players[1].print("Spawning "..rname.." total amount "..(approxDepositSize + validCount * min_amount)*richnessMultiplier) +-- end + + -- infinite ore handling for Angels Ores mod + local infiniteOrePresent = false + local infiniteOreName = "infinite-"..rname + local minimumInfiniteOreAmount = nil + local spawnName = rname + + if game.entity_prototypes[infiniteOreName] then + infiniteOrePresent = true + minimumInfiniteOreAmount = game.entity_prototypes[infiniteOreName].minimum_resource_amount + end + + if startingArea and not settings.global["rso-infinite-ores-in-start-area"].value then + infiniteOrePresent = false + end + + local infiniteResourceSpawnThreshold = settings.global["rso-infinite-ore-threshold"].value + + for _,location in pairs(oreLocations) do + + local spawnX = location.x + resOffsetX + local spawnY = location.y + resOffsetY + + if checkedLocations[spawnX][spawnY] then + + local amount = floor(( forceFactor * location.force + min_amount ) * richnessMultiplier) + + if amount > 1e9 then + amount = 1e9 + end + + _total = _total + amount + + spawnName = rname + if infiniteOrePresent and location.force > infiniteResourceSpawnThreshold then + spawnName = infiniteOreName + if minimumInfiniteOreAmount and amount < minimumInfiniteOreAmount then + amount = minimumInfiniteOreAmount + end +-- debug("Infinite spawn: "..location.force) + end + + if amount > 0 then + surface.create_entity{name = spawnName, + position = {spawnX, spawnY}, + force = game.forces.neutral, + amount = amount, + raise_built = true} + + if removeTrees then + remove_trees(surface, spawnX, spawnY, 1, 1) + end + + revealChunks.minX = math.min( revealChunks.minX, spawnX ) + revealChunks.minY = math.min( revealChunks.minY, spawnY ) + revealChunks.maxX = math.max( revealChunks.maxX, spawnX ) + revealChunks.maxY = math.max( revealChunks.maxY, spawnY ) + end + end + end + + if revealResources then + for _,force in pairs( game.forces )do + force.chart( surface, {{x = revealChunks.minX, y = revealChunks.minY}, {x = revealChunks.maxX, y = revealChunks.maxY}}) + end + end + + -- special handling for homeworld - sand resource has no graphics and is simply marked as sand tiles + if rname == "sand-source" then + local tileTable = {} + for _,location in pairs(oreLocations) do + if location.valid then + table.insert(tileTable,{ name = "sand-1", position = {location.x + resOffsetX,location.y + resOffsetY}}) + end + end + if #tileTable > 1 then + surface.set_tiles(tileTable) + end + end + end + + if debug_enabled then +-- debug("Search time "..scanProfiler.." spawn time "..placeProfiler) + debug("Total amount: ".._total) +--* for _,v in pairs(_a) do + --output a nice ASCII map +--* debug(table.concat(v)) +--* end + debug("Leaving spawn_resource_ore") + end + return _total +end + +--[[ entity-liquid ]]-- +local function spawn_resource_liquid(surface, rname, pos, size, richness, startingArea, restrictions, rng) + restrictions = restrictions or '' + debug("Entering spawn_resource_liquid "..rname.." "..pos.x..","..pos.y.." "..size.." "..richness.." "..tostring(startingArea).." "..restrictions) + local _total = 0 + local max_radius = rng() * CHUNK_SIZE / 2 + CHUNK_SIZE + --[[ + if restrictions == 'xy' then + -- we have full 4 chunks + max_radius = floor(max_radius*1.5) + size = floor(size*1.2) + end + ]]-- + -- don't reduce amount of liquids - they are already infinite + -- size = modify_resource_size(size) + + richness = ( 0.75 + rng() / 2 ) * richness * size + + local resourceEntity = game.entity_prototypes[rname] + + local total_share = 0 + local avg_share = 1/size + local angle = rng()*pi*2 + local saved = 0 + local removeTrees = settings.global["rso-remove-trees"].value + local richnessMultiplier = settings.global["rso-global-richness-mult"].value + local spawnCount = 0 + + if startingArea then + richnessMultiplier = settings.global["rso-starting-richness-mult"].value + end + + while total_share < 1 do + local new_share = vary_by_percentage(avg_share, 0.25, rng) + if size == 1 then + new_share = 1 + end + + if new_share + total_share > 1 then + new_share = 1 - total_share + end + total_share = new_share + total_share + if new_share < avg_share/10 then + -- too small + break + end + local amount = floor(richness*new_share) + saved + + --if amount >= game.entity_prototypes[rname].minimum then + if amount >= global.surfaces[surface.index].config[rname].minimum_amount then + saved = 0 + + local spawned = false + local x, y + + for try=1,15 do + local dist = rng()*(max_radius - max_radius*0.1) * try / 15 + angle = angle + pi/4 + rng()*pi/2 + x = pos.x + cos(angle)*dist + y = pos.y + sin(angle)*dist + if surface.can_place_entity{name = rname, position = {x,y}} then + debug("@ "..x..","..y.." amount: "..amount.." new_share: "..new_share.." try: "..try) + amount = floor(amount * richnessMultiplier) + + if amount > 1e9 then + amount = 1e9 + end + + _total = _total + amount + + if amount > 0 then + surface.create_entity{name = rname, + position = {x,y}, + force = game.forces.neutral, + amount = amount, + direction = rng(4), + raise_built = true} + if removeTrees then + remove_trees(surface, x, y, 4, 4) + end + end + + if spawnCount == 0 then + debug("Switched center location to "..x..","..y) + pos.x = x + pos.y = y + end + + spawnCount = spawnCount + 1 + spawned = true + break + end + end + + if not startingArea and not spawned then -- we don't want to make ultra rich nodes in starting area - failing to make them will add second spawn in different location + local entities = surface.find_entities_filtered{area = {{x - 5, y - 5}, {x + 5, y + 5}}, name=rname} + if entities and #entities > 0 then + for k, ent in pairs(entities) do + local newAmount = ent.amount + floor(amount/#entities) + if newAmount > 1e9 then + newAmount = 1e9 + end + + ent.amount = newAmount + _total = _total + newAmount + end + break + end + end + else + saved = amount + debug("Not placed "..rname.." amount "..amount.." minimum "..global.surfaces[surface.index].config[rname].minimum_amount.. " total share "..total_share.." placed till now ".._total) + end + end + debug("Total amount: ".._total.." in "..spawnCount.." fields") + debug("Leaving spawn_resource_liquid") + return _total +end + +local spawnerTable = nil + +local function initSpawnerTable() + if spawnerTable == nil then + spawnerTable = {} + for _, prototype in pairs(game.entity_prototypes) do + if prototype.type == "unit-spawner" then + spawnerTable[prototype.name] = prototype + end + end +-- log("Spawner table "..serpent.block(spawnerTable)) + end +end + +local function computeAllotments(entityTable, regionDistance) + + local allotment_max = 0 + + if not entityTable then + return allotment_max + end + + for k,v in pairs(entityTable) do + if v then + if not v.min_distance or regionDistance > v.min_distance then + local allotment = v.allotment + if v.allotment_distance_factor then + local dist_factor = regionDistance^v.allotment_distance_factor + if v.max_probability_distance_factor then + dist_factor = max(dist_factor, v.max_probability_distance_factor) + end + allotment = allotment * dist_factor + end + v.allotment_range ={min = allotment_max, max = allotment_max + allotment} + allotment_max = allotment_max + allotment + else + v.allotment_range = nil + end + end + end + + return allotment_max +end + +local function spawn_entity_helper(surface, prototype, x, y, config) + position = {x, y} + local collides = surface.entity_prototype_collides(prototype, position, true) + if collides then + remove_trees_based_on_bb(surface, x, y, prototype.map_generator_bounding_box) + end + + collides = surface.entity_prototype_collides(prototype, position, true) + + if not collides then + surface.create_entity{name=prototype.name, position={x, y}, force=game.forces[config.force], spawn_decorations=true, raise_built = true} + end + + return not collides +end + +local function spawn_entity(surface, ent, r_config, x, y, rng) + if not settings.global["rso-biter-generation"].value then return end + local size = rng(r_config.size.min, r_config.size.max) + + local _total = 0 + local r_distance = distanceFromStartingAreas(global.surfaces[surface.index], x/REGION_TILE_SIZE, y/REGION_TILE_SIZE) + local surfaceData = global.surfaces[surface.index] + + if surfaceData and surfaceData.starting_area_size then + r_distance = r_distance - surfaceData.starting_area_size + if r_distance < 0.5 then + r_distance = 0.5 + end + end + + local distanceMultiplier = math.min(r_distance^r_config.size_per_region_factor, 5) + if r_config.size_per_region_factor then + size = size*distanceMultiplier + end + + size = size * settings.global["rso-enemy-base-size"].value + + debug("Entering spawn_entity "..ent.." "..x..","..y.." size:"..size.." dist:"..r_distance) + + local maxAttemptCount = 16 + local distancePerBatch = 0.25 + + initSpawnerTable() + + local spawnerName = nil + local spawnString = "" + local failCount = 0 + + for i=1,size do + if failCount > 5 and failCount / (i - 1) > 0.75 then + break + end + + local baseSpawned = false + local baseX, baseY + + for attempt = 1, maxAttemptCount do + local max_d = floor(CHUNK_SIZE * (0.5 + (attempt/4) * distancePerBatch)) + baseX = x + rng(0, floor(max_d)) - max_d/2 + baseY = y + rng(0, floor(max_d)) - max_d/2 + + if surface.get_tile(baseX, baseY).valid then + + spawnerName = nil + local allotment_max = computeAllotments(r_config.bases, r_distance) + + if allotment_max == 0 then + log("No enemy base definition found") + return + end + + local base_type = rng(0, allotment_max) + for base_name,v in pairs(r_config.bases) do + if v and v.allotment_range and base_type >= v.allotment_range.min and base_type <= v.allotment_range.max then + spawnerName = base_name + break + end + end + + if spawnerName and spawnerTable[spawnerName] then + if spawn_entity_helper(surface, spawnerTable[spawnerName], baseX, baseY, r_config) then + _total = _total + 1 + debug(spawnerName.." @ "..baseX..","..baseY.." placed on "..attempt.." attempt") + spawnString = spawnString.."+" + baseSpawned = true + break; + else + if attempt == maxAttemptCount then + debug(spawnerName.." @ "..baseX..","..baseY.." failed to spawn") + failCount = failCount + 1 + spawnString = spawnString.."-" + end + end + else + game.players[1].print("Entity "..spawnerName.." doesn't exist") + end + end + end + + if r_config.sub_spawn_probability and baseSpawned then + local sub_spawn_prob = r_config.sub_spawn_probability*math.min(r_config.sub_spawn_max_distance_factor, r_config.sub_spawn_distance_factor^r_distance) + if rng() < sub_spawn_prob then + + local allotment_max = computeAllotments(r_config.sub_spawns, r_distance) + + for i=1,(rng(r_config.sub_spawn_size.min, r_config.sub_spawn_size.max)*distanceMultiplier) do + + local sub_type = rng(0, allotment_max) + for sub_spawn,v in pairs(r_config.sub_spawns) do + if v.allotment_range and sub_type >= v.allotment_range.min and sub_type <= v.allotment_range.max then + local turretPrototype = game.entity_prototypes[sub_spawn] + if turretPrototype then + for attempt = 1, maxAttemptCount do + local max_d = floor((attempt/4) * CHUNK_SIZE * distancePerBatch) + local s_x = baseX + rng(max_d) - max_d/2 + local s_y = baseY + rng(max_d) - max_d/2 + remove_trees(surface, s_x, s_y, v.clear_range[1], v.clear_range[2]) + if spawn_entity_helper(surface, turretPrototype, s_x, s_y, r_config) then + debug("Rolled subspawn "..sub_spawn.." @ "..s_x..","..s_x.." after "..attempt.." attempts") + break; + else + if attempt == maxAttemptCount then + debug("Rolling subspawn "..sub_spawn.." @ "..s_x..","..s_x.." failed") + end + end + end + end + break + end + end + end + end + end + end + + debug("Total entity amount: ".._total.." fails "..failCount.." size "..size.." spawn map "..spawnString) +end + +--[[ EVENT/INIT METHODS ]]-- + +local function spawn_starting_resources( surface, index ) + + local surfaceData = global.surfaces[surface.index] + if surfaceData.startingAreas[index].spawned then return end + + -- skip spawning if starting area is to small or starting areas are disabled + if global.disableStartingArea or surfaceData.starting_area_size < 0.1 then + surfaceData.startingAreas[index].spawned = true + return + end + + local position = surfaceData.startingAreas[index] + local config = surfaceData.config + + -- generate chunks for starting area - it shouldn't matter at 0,0 but it's needed if it has been moved + local areaRadius = surfaceData.starting_area_size * REGION_TILE_SIZE + surface.request_to_generate_chunks(position, math.ceil(areaRadius/CHUNK_SIZE)) + surface.force_generate_chunk_requests() + + local rng = rng_for_reg_pos( surface.index, position ) + local status = true + for resName,resConfig in pairs(config) do + if resConfig.starting and resConfig.valid and resConfig.allotment > 0 then + local prob = rng() -- probability that this resource is spawned + debug("starting resource probability rolled "..prob) + if resConfig.starting.probability > 0 and prob <= resConfig.starting.probability then + local total = 0 + local radius = 50 + local maxRadius = 301 + maxRadius = maxRadius * surface.map_gen_settings.starting_area + local min_threshold = 0 + local richness = resConfig.starting.richness + + if resConfig.type == "resource-ore" then + min_threshold = richness * rng(5, 10) -- lets make sure that there is at least 5-10 times starting richness ore at start + elseif resConfig.type == "resource-liquid" then + min_threshold = richness * 0.5 * resConfig.starting.size + end + + while (radius < maxRadius) and (total < min_threshold) do + + radius = radius + 25 + + local angle = rng() * pi * 2 + local dist = radius / 2 + rng(radius / 2) +-- debug("Starting offset "..dist.." at "..angle) + local pos = { x = floor(cos(angle) * dist) + position.x, y = floor(sin(angle) * dist) + position.y } + if resConfig.type == "resource-ore" then + total = total + spawn_resource_ore(surface, resName, pos, resConfig.starting.size, richness, true, null, rng) + elseif resConfig.type == "resource-liquid" then + total = total + spawn_resource_liquid(surface, resName, pos, resConfig.starting.size, richness, true, null, rng) + end + + if richness == resConfig.starting.richness and total > 0 then + richness = resConfig.starting.richness / 4 + end + end + if total < min_threshold then + status = false + end + end + end + end + + surfaceData.startingAreas[index].spawned = true +end + +local function modifyMinMax(value, mod) + value.min = round( value.min * mod ) + value.max = round( value.max * mod ) +end + +local function build_config_data(surface) + local mapGenSettings = nil + + if not ignoreMapGenSettings then + mapGenSettings = surface.map_gen_settings + end + local autoPlaceSettings = nil + if mapGenSettings then + autoPlaceSettings = mapGenSettings.autoplace_controls + end + + local configIndexed = {} + local surfaceData = global.surfaces[surface.index] + local config = surfaceData.config + + debug("Building config for " .. surface.name .. " index " .. surface.index) + -- build additional indexed array to the associative array + for res_name, resConf in pairs(config) do + if resConf.valid then -- only add valid resources + + local settingsForResource = nil + local isEntity = (resConf.type == "entity") + local addResource = true + + local autoplaceName = res_name + + if resConf.autoplace_name then + autoplaceName = resConf.autoplace_name + end + + if autoPlaceSettings then + settingsForResource = autoPlaceSettings[autoplaceName] + end + + if settingsForResource then + local allotmentMod = settingsForResource.frequency + local sizeMod = settingsForResource.size + local richnessMod = settingsForResource.richness + + if allotmentMod then + if isEntity then + resConf.absolute_probability = resConf.absolute_probability * allotmentMod + debug("Entity chance modified to "..resConf.absolute_probability) + else + resConf.allotment = round( resConf.allotment * allotmentMod ) + end + else + log("Null allotment mod for "..res_name.." value "..settingsForResource.frequency) + end + + if sizeMod ~= nil and sizeMod == 0 then + addResource = false + --log("Null size mod for "..res_name.." value "..settingsForResource.size) + end + + if sizeMod ~= nil then + modifyMinMax(resConf.size, sizeMod) + + if resConf.starting then + if sizeMod == 0 then + resConf.starting = nil + else + resConf.starting.size = round( resConf.starting.size * sizeMod ) + end + end + + if isEntity then + if resConf.sub_spawn_size then + modifyMinMax(resConf.sub_spawn_size, sizeMod) + end + modifyMinMax(resConf.spawns_per_region, sizeMod) + end + end + + if richnessMod then + if resConf.type == "resource-ore" then + resConf.richness = round( resConf.richness * richnessMod ) + elseif resConf.type == "resource-liquid" then + modifyMinMax(resConf.richness, richnessMod) + end + + if resConf.starting then + resConf.starting.richness = round( resConf.starting.richness * richnessMod ) + end + else + log("Null richness mod for "..res_name.." value "..settingsForResource.richness) + end + + if allotmentMod and richnessMod and sizeMod then + debug(res_name .. " allotment mod " .. allotmentMod .. " size mod " .. sizeMod .. " richness mod " .. richnessMod ) + end + end + + if not settings.global["rso-oil-in-start-area"].value and resConf.type == "resource-liquid" then + resConf.starting = nil + end + + if not settings.global["rso-ore-in-start-area"].value and resConf.type == "resource-ore" then + resConf.starting = nil + end + + if addResource then + -- this should be a limited table most likely not full config copy + local res_conf = table.deepcopy(resConf) + res_conf.name = res_name + + if res_conf.multi_resource and settings.global["rso-multi-resource-active"].value then + local new_list = {} + for sub_res_name, allotment in pairs(res_conf.multi_resource) do + if config[sub_res_name] and config[sub_res_name].valid then + new_list[#new_list+1] = {name = sub_res_name, allotment = allotment} + end + end + table.sort(new_list, function(a, b) return a.name < b.name end) + res_conf.multi_resource = new_list + else + res_conf.multi_resource_chance = nil + end + configIndexed[#configIndexed + 1] = res_conf + end + end + end + + table.sort(configIndexed, function(a, b) return a.name < b.name end) + + local pr=0 + local maxAllotment = 0 + for index,v in pairs(configIndexed) do + if v.along_resource_probability then + v.along_resource_probability_range={min=pr, max=pr+v.along_resource_probability} + pr = pr + v.along_resource_probability + end + if v.allotment and v.allotment > 0 then + v.allotment_range={min = maxAllotment, max = maxAllotment + v.allotment} + maxAllotment = maxAllotment + v.allotment + end + end + + surfaceData.maxAllotment = maxAllotment + surfaceData.starting_area_size = starting_area_size + + if mapGenSettings and mapGenSettings.starting_area then + surfaceData.starting_area_size = starting_area_size * mapGenSettings.starting_area + debug("Starting area "..surfaceData.starting_area_size.." for surface "..surface.index) + end + + surfaceData.configIndexed = configIndexed +end + +local function checkConfigForInvalidResources(surfaceIndex) + --make sure that every resource in the config is actually available. + --call this function, before the auxiliary config is prebuilt! + + local prototypes = game.entity_prototypes + local config = global.surfaces[surfaceIndex].config + + for resourceName, resourceConfig in pairs(config) do + if prototypes[resourceName] or resourceConfig.type == "entity" then + resourceConfig.valid = true + else + -- resource was in config, but it doesn't exist in game files anymore - mark it invalid + resourceConfig.valid = false + + --table.insert(invalidResources, "Resource not available: " .. resourceName) + debug("Resource not available: " .. resourceName) + log("Resource not available: " .. resourceName) + end + + if resourceConfig.valid and resourceConfig.type ~= "entity" then + if prototypes[resourceName].autoplace_specification == nil then + resourceConfig.valid = false + debug("Resource "..resourceName.." invalidated - autoplace not present") + end + end + end +end + +local function checkForBobEnemies() + if game.entity_prototypes["bob-biter-spawner"] and game.entity_prototypes["bob-spitter-spawner"] then + global.useBobEntity = true + else + global.useBobEntity = false + end +end + +local function roll_region(surface, c_x, c_y) + --in what region is this chunk? + local r_x=floor(c_x/REGION_TILE_SIZE) + local r_y=floor(c_y/REGION_TILE_SIZE) + local r_data = nil + --don't spawn stuff in starting area + if isInStartingArea( surface.index, c_x, c_y ) then + return false + end + + local surfaceData = global.surfaces[surface.index] + local configIndexed = surfaceData.configIndexed + local regions = surfaceData.regions + + if regions[r_x] and regions[r_x][r_y] then + r_data = regions[r_x][r_y] + else + --if this chunk is the first in its region to be generated + if not regions[r_x] then regions[r_x] = {} end + regions[r_x][r_y]={} + r_data = regions[r_x][r_y] + local rng = rng_for_reg_pos(surface.index, {x=r_x,y=r_y}) + + local rollCount = math.ceil(#configIndexed / 10) - 1 -- 0 based counter is more convenient here + rollCount = math.min(rollCount, 3) + + local resourceSetting = settings.global["rso-resource-chance"].value + + local maxAllotment = surfaceData.maxAllotment + + -- rolle ores only if they are present (it will fail if allotment is 0) + if maxAllotment > 0 then + for rollNumber = 0,rollCount do + + local resourceChance = resourceSetting - rollNumber * 0.1 + --absolute chance to spawn resource + local abct = rng() + debug("Rolling resource "..abct.." against "..resourceChance.." roll "..rollNumber) + if abct <= resourceChance then + local res_type=rng(1, maxAllotment) + for index,v in pairs(configIndexed) do + if v.allotment_range and ((res_type >= v.allotment_range.min) and (res_type <= v.allotment_range.max)) then + debug("Rolled primary resource "..v.name.." with roll="..res_type.." @ "..r_x..","..r_y) + local num_spawns = 0 + if v.spawns_per_region.min == v.spawns_per_region.max then + num_spawns = v.spawns_per_region.min + else + num_spawns = rng(v.spawns_per_region.min, v.spawns_per_region.max) + end + local last_spawn_coords = {} + local along_ + for i=1,num_spawns do + local c_x, c_y = find_random_chunk(r_x, r_y, rng) + + -- even if initial chunk is outside region might overlap with starting area - need to recheck here if rolled coords are outside + if not isInStartingArea( surface.index, c_x, c_y ) then + if not r_data[c_x] then r_data[c_x] = {} end + if not r_data[c_x][c_y] then r_data[c_x][c_y] = {} end + local c_data = r_data[c_x][c_y] + c_data[#c_data+1]={v.name, rollNumber} + last_spawn_coords[#last_spawn_coords+1] = {c_x, c_y} + debug("Rolled primary chunk "..v.name.." @ "..c_x..","..c_y.." reg: "..r_x..","..r_y.." actual reg: "..floor(c_x/REGION_TILE_SIZE)..","..floor(c_y/REGION_TILE_SIZE)) + -- Along resource spawn, only once + if i == 1 then + local am_roll = rng() + for index,vv in pairs(configIndexed) do + if vv.along_resource_probability_range and am_roll >= vv.along_resource_probability_range.min and am_roll <= vv.along_resource_probability_range.max then + c_data = r_data[c_x][c_y] + c_data[#c_data+1]={vv.name, rollNumber} + debug("Rolled along "..vv.name.." @ "..c_x.."."..c_y.." reg: "..r_x..","..r_y) + end + end + end + end + end + -- roll multiple resources in same region + local deep=0 + if #last_spawn_coords > 0 then + while v.multi_resource_chance and rng() <= v.multi_resource_chance*(multi_resource_chance_diminish^deep) do + debug("Multi roll chance "..v.multi_resource_chance.." with diminish chance "..v.multi_resource_chance*(multi_resource_chance_diminish^deep)) + deep = deep + 1 + local multiAllotmentMax = 0 + for index,sub_res in pairs(v.multi_resource) do multiAllotmentMax = multiAllotmentMax + sub_res.allotment end + + local res_type = 1 -- with allotment of 1 we don't need to roll rng and rng will complain when it's range is 0 + if multiAllotmentMax > 1 then + res_type = rng(1, multiAllotmentMax) + end + local min=0 + for _, sub_res in pairs(v.multi_resource) do + if (res_type >= min) and (res_type <= sub_res.allotment + min) then + local last_coords = last_spawn_coords[rng(1, #last_spawn_coords)] + local c_x, c_y = find_random_neighbour_chunk(last_coords[1], last_coords[2], rng) -- in same region as primary resource chunk + if not r_data[c_x] then r_data[c_x] = {} end + if not r_data[c_x][c_y] then r_data[c_x][c_y] = {} end + local c_data = r_data[c_x][c_y] + c_data[#c_data+1]={sub_res.name, deep} + debug("Rolled multiple "..sub_res.name..":"..deep.." with res_type="..res_type.." @ "..c_x..","..c_y.." reg: "..r_x..","..r_y) + break + else + min = min + sub_res.allotment + end + end + end + end + break + end + end + + end + end + end + + -- roll for absolute_probability - this rolls the enemies + for index,v in pairs(configIndexed) do + if v.absolute_probability then + local prob_factor = 1 + if v.probability_distance_factor then + prob_factor = math.min(v.max_probability_distance_factor, v.probability_distance_factor^distance({x=0,y=0},{x=r_x,y=r_y})) + end + local abs_roll = rng() + if abs_roll 0 and richness > richness_max) then +-- richness = math.min(richness, richness_max) +-- end +-- if (size_max > 0 and size > size_max) then +-- size = math.min(size, size_max) +-- end + + spawn_resource_ore(surface, resource, {x=c_center_x,y=c_center_y}, size, richness, false, restriction, rng) + elseif r_config.type=="resource-liquid" then + local richFactor = 0; + if r_config.useOreScaling then + richFactor = calculateFactor(dist, richness_distance_factor) + else + richFactor = calculateFactor(dist, fluid_richness_distance_factor) + end + debug("Resource "..resource.." distance "..dist.." factors (size, richness) "..sizeFactor..","..richFactor) + local size=rng(r_config.size.min, r_config.size.max) * (multi_resource_size_factor^deep) * sizeFactor + if r_config.size.min == 1 and r_config.size.max == 1 then + size = 1 + end + local richness=rng(r_config.richness.min, r_config.richness.max) * richFactor * (multi_resource_richness_factor^deep) + local restriction = '' + c_center_x, c_center_y, restriction = find_intersection(surface, c_center_x, c_center_y) + spawn_resource_liquid(surface, resource, {x=c_center_x,y=c_center_y}, size, richness, false, restriction, rng) + elseif r_config.type=="entity" and not global.skipEnemies then + spawn_entity(surface, resource, r_config, c_center_x, c_center_y, rng) + end + else + debug("Resource access failed for " .. resource) + game.players[1].print("Resource access failed for " .. resource) + end + end + r_data[c_x][c_y] = nil + + if tableLength(r_data[c_x]) == 0 then + r_data[c_x] = nil + end + + --l:dump() + end +end + +local function clear_chunk(surface, tileX, tileY, ent_list) + + local _count = 0 + for _, obj in pairs(surface.find_entities_filtered{area = {{tileX, tileY}, {tileX + CHUNK_SIZE, tileY + CHUNK_SIZE}}, name=ent_list}) do + if obj.valid then + obj.destroy() + _count = _count + 1 + end + end + + if not global.skipEnemies then + -- remove biters + for _, obj in pairs(surface.find_entities_filtered{area = {{tileX, tileY}, {tileX + CHUNK_SIZE, tileY + CHUNK_SIZE}}, type="unit"}) do + -- and (string.find(obj.name, "-biter", -6) or string.find(obj.name, "-spitter", -8)) + if obj.valid and obj.force.name == "enemy" then + obj.destroy() + _count = _count + 1 + end + end + end + + if _count > 0 then debug("Destroyed - ".._count) end +end + +local function prepareEntityList(surfaceIndex) + local entityList = {} + local configIndexed = global.surfaces[surfaceIndex].configIndexed + + for _,v in pairs(configIndexed) do + entityList[#entityList + 1] = v.name + local infiniteOreName = "infinite-".. v.name + + if game.entity_prototypes[infiniteOreName] then + entityList[#entityList + 1] = infiniteOreName + end + + if not global.skipEnemies then + if v.bases then + for base, config in pairs(v.bases) do + entityList[#entityList + 1] = base + end + end + + if v.sub_spawns then + for ent,vv in pairs(v.sub_spawns) do + entityList[#entityList + 1] = ent + end + end + end + end + + return entityList +end + +local function regenerateSurface(surface, clearOnly) + + local surfaceData = global.surfaces[surface.index] + surfaceData.regions = {} + + local entityList = prepareEntityList(surface.index) + + for chunk in surface.get_chunks() do + local tileX = chunk.x * CHUNK_SIZE + local tileY = chunk.y * CHUNK_SIZE + + if not isInStartingArea( surface.index, tileX, tileY ) then + clear_chunk(surface, tileX, tileY, entityList) + end + end + + if not clearOnly then + for chunk in surface.get_chunks() do + + local tileX = chunk.x * CHUNK_SIZE + local tileY = chunk.y * CHUNK_SIZE + + if not isInStartingArea( surface.index, tileX, tileY ) then + roll_region(surface, tileX, tileY) + roll_chunk(surface, tileX, tileY) + + if useStraightWorldMod then + straightWorld(surface, {x = tileX, y = tileY}, {x = tileX + CHUNK_SIZE, y = tileY + CHUNK_SIZE}) + end + end + end + end + if clearOnly then + log("Ore clear done") + else + log("Ore regeneration done") + end +end + +local function regenerate_everything(clearOnly, noEnemies) + global.skipEnemies = noEnemies + + for index, surfaceData in pairs(global.surfaces) do + local surface = game.surfaces[index] + regenerateSurface(surface, clearOnly) + end + + global.skipEnemies = nil +end + +local function clearStartingArea( surface, pos ) + + local startingAreaTilesSize = math.ceil( global.surfaces[surface.index].starting_area_size * REGION_TILE_SIZE ) + + local chunkPosX = math.floor( pos.x/CHUNK_SIZE ) * CHUNK_SIZE + local chunkPosY = math.floor( pos.y/CHUNK_SIZE ) * CHUNK_SIZE + local entityList = prepareEntityList(surface.index) + + for posX = chunkPosX - startingAreaTilesSize, chunkPosX + startingAreaTilesSize, CHUNK_SIZE do + for posY = chunkPosY - startingAreaTilesSize, chunkPosY + startingAreaTilesSize, CHUNK_SIZE do + clear_chunk(surface, posX, posY, entityList) + end + end +end + +local function extendRect(leftTop, bottomRight) + leftTop.x = leftTop.x - CHUNK_SIZE / 2 + leftTop.y = leftTop.y - CHUNK_SIZE / 2 + bottomRight.x = bottomRight.x + CHUNK_SIZE + bottomRight.x = bottomRight.x + CHUNK_SIZE + + return leftTop, bottomRight +end + +local function printResourceProbability(player) + -- prints the probability of each resource - how likely it is to be spawned in percent + -- this ignores the multi resource chance + local surfaceData = global.surfaces[player.surface.index] + local maxAllotment = surfaceData.maxAllotment + player.print("Max allotment"..string.format("%.1f",maxAllotment)) + debug("Max allotment"..string.format("%.1f",maxAllotment)) + local sanityCheckAllotment = 0 + for index,v in pairs(surfaceData.configIndexed) do + if v.type ~= "entity" then -- ignore enemies - they don't have allotment set + if v.allotment then + local resProbability = (v.allotment/maxAllotment) * 100 + sanityCheckAllotment = sanityCheckAllotment + v.allotment + player.print("Resource: "..v.name.." Prob: "..string.format("%.1f",resProbability)) + debug("Resource: "..v.name.." Prob: "..string.format("%.1f",resProbability)) + else + player.print("Resource: "..v.name.." Allotment not set") + debug("Resource: "..v.name.." Allotment not set") + end + end + end + + player.print("SanityCheck Allotment: "..string.format("%.1f", sanityCheckAllotment)) + debug("SanityCheck Allotment: "..string.format("%.1f", sanityCheckAllotment)) +end + +local IgnoredResources = +{ + ["deep_oil"] = true, + ["bi-ground-steam"] = true, + ["bi-ground-sulfuric-acid"] = true, + ["fossil-roots"] = true, +-- ["termal"] = true, + ["termal2"] = true, + ["tibGrowthNode"] = true, + ["natural-gas-1"] = true, + ["natural-gas-2"] = true, + ["natural-gas-3"] = true, + ["natural-gas-4"] = true +} + +local function IsIgnoreResource(ResourcePrototype) + if string.find( ResourcePrototype.name, "underground-" ) ~= nil then + return true + end + if string.find( ResourcePrototype.name, "infinite-" ) ~= nil then + return true + end + -- Cargo ships mod - it takes care of spawning it by itself but leaves it's autoplace in it so needs to be ignored + if IgnoredResources[ResourcePrototype.name] then + return true + end + if ResourcePrototype.autoplace_specification == nil then + return true + end + if ResourcePrototype.autoplace_specification and ResourcePrototype.autoplace_specification.tile_restriction then + return true + end + return false +end + +local function checkForUnusedResources(player) + -- find all resources and check if we have it in our config + -- if not, tell the user that this resource won't be spawned (with RSO) + local surfaceData = global.surfaces[player.surface.index] + + for prototypeName, prototype in pairs(game.entity_prototypes) do + if prototype.type == "resource" then + if not surfaceData.config[prototypeName] then + if IsIgnoreResource(prototype) then -- ignore resources which are not autoplace + debug("Resource not configured but ignored (non-autoplace): "..prototypeName) + else + player.print("The resource "..prototypeName.." is not configured in RSO. It won't be spawned!") + debug("Resource not configured: "..prototypeName) + end + else + -- these are the configured ones + if IsIgnoreResource(prototype) then + debug("Configured resource (but it is in ignore list - will be used!): " .. prototypeName) + else + debug("Configured resource: " .. prototypeName) + end + end + end + end +end + +local function printInvalidResources(player) + -- prints all invalid resources which were found when the config was processed. + for _, message in pairs(invalidResources) do + player.print(message) + end +end + +local function loadAndPrepareConfig(surface) + global.surfaces[surface.index].config = loadResourceConfig() + checkConfigForInvalidResources(surface.index) + build_config_data(surface) +end + +local function updateSurfaceConfig(surface, justCreated, surfaceData) + + if not surfaceData then + global.surfaces[surface.index] = global.surfaces[surface.index] or {} + surfaceData = global.surfaces[surface.index] + end + + surfaceData.seed = surface.map_gen_settings.seed + + if not surfaceData.regions then + surfaceData.regions = {} + end + + if not surfaceData.startingAreas then + surfaceData.startingAreas = {} + + local startingPoints = surface.map_gen_settings.starting_points + if startingPoints and surface.index == game.surfaces['nauvis'].index then + for _, startingPoint in pairs(startingPoints) do + local startX = 0 + local startY = 0 + + startX = startingPoint.x + startY = startingPoint.y + + table.insert( surfaceData.startingAreas, { x = startX, y = startY, spawned = false } ) + + if not justCreated then + surfaceData.startingAreas[1].spawned = true + end + end + end + end + + loadAndPrepareConfig(surface) + + if config_log_enabled then + log("***** Config for surface "..surface.index) + log(serpent.block(global.surfaces[surface.index].config)) + log(serpent.block(global.surfaces[surface.index].configIndexed)) + end +end + +local function initConfig() + if not global.surfaces then + global.surfaces = {} + + local nauvisSurfaceData = global.surfaces[game.surfaces['nauvis'].index] + + if not nauvisSurfaceData then + nauvisSurfaceData = {} + + local justCreated = true + + if global.regions then + nauvisSurfaceData.regions = global.regions + global.regions = nil + justCreated = false + else + if game.tick > 10 then + justCreated = false + end + end + + global.surfaces[game.surfaces['nauvis'].index] = nauvisSurfaceData + + updateSurfaceConfig(game.surfaces['nauvis'], justCreated) + end + end +end + +local function updateConfig() + + initConfig() + + for surfaceIndex, surfaceData in pairs(global.surfaces) do + local surface = game.surfaces[surfaceIndex] + if surface then + updateSurfaceConfig(surface, false, surfaceData) + else + game.surfaces[surfaceIndex] = nil + end + end + + for _,surface in pairs(game.surfaces) do + if not global.surfaces[surface.index] then + updateSurfaceConfig(surface, false) + end + end + + checkForBobEnemies() + log("RSO: Updated resource configurations") +end + +local function localGenerateChunk( event ) + --changes by xiaoHong - ignore surfaces interface - 11/29/2015 + if global.ignoreSurfaceNames and global.ignoreSurfaceNames[event.surface.name] then + return + end + + local c_x = event.area.left_top.x + local c_y = event.area.left_top.y + + roll_region(event.surface, c_x, c_y) + roll_chunk(event.surface, c_x, c_y) + + if useStraightWorldMod then + straightWorld(event.surface, event.area.left_top, event.area.right_bottom) + elseif game.active_mods["building-platform"] and useStraightWorldPlatforms then + straightWorldPlatforms(event.surface, event.area.left_top, event.area.right_bottom) + end + +end + +local function init() + + updateConfig() + + spawn_starting_resources(game.surfaces['nauvis'], 1 ) + + if not global.disableEventHandler then + script.on_event(defines.events.on_chunk_generated, localGenerateChunk) + end +end + +script.on_init(init) +script.on_load(function() + if not global.disableEventHandler then + script.on_event(defines.events.on_chunk_generated, localGenerateChunk) + end +end) + +script.on_configuration_changed(updateConfig) + +script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) + if event.setting == "rso-region-size" then + game.players[event.player_index].print("Warning: Region size changed. Dynamic size changes are not supported - recommend regenerating of resources to use new region size") + region_size = settings.global["rso-region-size"].value + REGION_TILE_SIZE = CHUNK_SIZE*region_size + elseif event.setting == "rso-enemy-chance" then + for surfaceIndex, surfaceData in pairs(global.surfaces) do + for index,v in pairs(surfaceData.configIndexed) do + if v.absolute_probability then + v.absolute_probability = settings.global["rso-enemy-chance"].value + end + end + end + game.players[event.player_index].print("Enemy spawn chance update - it will be applied to new regions.") + end + +end) + + +script.on_event(defines.events.on_player_created, function(event) + + local player = game.players[event.player_index] + + if not global.surfaces[player.surface.index] then + updateSurfaceConfig(player.surface, false) + end + + checkForUnusedResources(player) + printInvalidResources(player) + + if debug_enabled then + + printResourceProbability(player) + + if useBobEntity then + player.print("RSO: BobEnemies found") + end + + if debug_items_enabled then + player.character.insert{name = "coal", count = 1000} + player.character.insert{name = "raw-wood", count = 100} + player.character.insert{name = "car", count = 1} + player.character.insert{name = "car", count = 1} + player.character.insert{name = "car", count = 1} + + if game.item_prototypes["resource-monitor"] then + player.character.insert{name = "resource-monitor", count = 1} + end + end + end + + l:dump() +end) + +script.on_event(defines.events.on_surface_created, function(event) + + local surface = game.surfaces[event.surface_index] + + if global.ignoreSurfaceNames and global.ignoreSurfaceNames[surface.name] then + return + end + + initConfig() + + updateSurfaceConfig(surface, true) +end) + +script.on_event(defines.events.on_surface_deleted, function(event) + global.surfaces[event.surface_index] = nil +end) + +script.on_event(defines.events.on_surface_cleared, function(event) + if global.surfaces[event.surface_index] then + global.surfaces[event.surface_index].regions = {} + end +end) + +function regenerateCommand(parameters) + local skipEnemies = false + + if parameters and parameters.parameter then + if parameters.parameter == "noenemies" then + skipEnemies = true + end + end + + regenerate_everything(false, skipEnemies) +end + +function clearCommand(parameters) + local skipEnemies = false + + if parameters and parameters.parameter then + if parameters.parameter == "noenemies" then + skipEnemies = true + end + end + + regenerate_everything(true, skipEnemies) +end + +function seedCommand(parameters) + + global.mapSeedOverride = nil + + if parameters and parameters.parameter then + global.mapSeedOverride = tonumber(parameters.parameter) + end +end + + +commands.add_command("rso-regenerate", "", regenerateCommand) +commands.add_command("rso-clear", "", clearCommand) +commands.add_command("rso-override-seed", "", seedCommand) + + +remote.add_interface("RSO", { + -- remote.call("RSO", "regenerate", true/false, surface) + regenerate = function(new_seed, surface) + regenerateCommand(nil) + end, + + clear = function() + clearCommand(nil) + end, + + --changes by xiaoHong - ignore surfaces interface - 11/29/2015 + -- remote.call("RSO", "ignoreSurface", "name-of-surface") + ignoreSurface = function(surfaceName) + if type(surfaceName) ~= "string" then + game.players[1].print("RSO ignoreSurface interface: surfaceName should be a string") + end + if debug_enabled then + game.players[1].print("RSO ignoring surface " .. surfaceName .. " for generation") + end + global.ignoreSurfaceNames = global.ignoreSurfaceNames or {} + global.ignoreSurfaceNames[surfaceName] = true + end, + + addStartLocation = function(pos, player) + local outputPlayer = nil + + if game.player then + outputPlayer = game.player + end + + if player then + outputPlayer = player + end + + if not ( pos and pos.x and pos.y ) then + log("Invalid parameters for new start location - please use following format: {x=0, y=0}") + return + end + + local surface = nil + if outputPlayer then + surface = outputPlayer.surface + else + surface = game.surfaces['nauvis'] + end + + local surfaceData = global.surfaces[surface.index] + + local radius = surfaceData.starting_area_size * REGION_TILE_SIZE + + for idx, startingPos in pairs( surfaceData.startingAreas ) do + if distance( startingPos, pos ) < 2 * radius then + log("Creation of starting area on "..surface.name.." failed - to close to starting area at "..startingPos.x..","..startingPos.y) + return + end + end + + log("Creating new starting area on "..surface.name.." at "..pos.x..","..pos.y) + + clearStartingArea( surface, pos ) + + pos.spawned = false; + + table.insert( surfaceData.startingAreas, pos ) + + spawn_starting_resources( surface, #surfaceData.startingAreas ) + +-- if outputPlayer then +-- outputPlayer.force.chart(outputPlayer.surface, {{x = pos.x - radius, y = pos.y - radius}, {x = pos.x + radius, y = pos.y + radius}}) +-- end + end, + + saveLog = function() + --debug(serpent.block(global.surfaces[1])) + l:dump() + end, + + regenConfig = function() + for index, surfaceData in pairs(global.surfaces) do + loadAndPrepareConfig(game.surfaces[index]) + end + end, + + disableChunkHandler = function() + if not global.disableEventHandler then + script.on_event(defines.events.on_chunk_generated, nil) + end + global.disableEventHandler = true + end, + + disableStartingArea = function() + global.disableStartingArea = true + end, + + generateChunk = function(event) + localGenerateChunk(event) + end, + + resetGeneration = function(surface, ignoreStartingAreas) + if surface == nil then + return + end + + local surfaceData = global.surfaces[surface.index] + + updateSurfaceConfig(surface, false, surfaceData) + + surfaceData.regions = {} + + if not ignoreStartingAreas then + for index, startingArea in pairs(surfaceData.startingAreas) do + startingArea.spawned = false + spawn_starting_resources(surface, index) + end + end + end, + + runTest = function(areaSizeX, areaSizeY) + game.player.character = god + local sizeX = areaSizeX or 2000 + local sizeY = areaSizeY or 2000 + game.forces.player.chart(game.player.surface, {left_top = {x = -sizeX, y = -sizeY}, + right_bottom = {x = sizeX, y = sizeY}}) + game.speed = 2 + game.player.cheat_mode = true + + if game.player.force.technologies["resource-monitoring"] then + game.player.force.technologies["resource-monitoring"].researched = true + end + end, + + isInStartingArea = function(surfaceIndex, tileX, tileY) + return isInStartingArea(surfaceIndex, tileX, tileY) + end, +}) + +--Time for the debug code. If any (not global.) globals are written to at this point, an error will be thrown. +--eg, x = 2 will throw an error because it's not global.x or local x (by Mylon to check for global variables that might cause desyncs) +--setmetatable(_G, { +-- __newindex = function(_, n, v) +-- log("Desync warning: attempt to write to undeclared var " .. n) + -- game.print("Attempt to write to undeclared var " .. n) +-- global[n] = v; +-- end, +-- __index = function(_, n) +-- return global[n]; +-- end +--}) diff --git a/rso-mod/data-final-fixes.lua b/rso-mod/data-final-fixes.lua new file mode 100644 index 00000000..cd0b8ef6 --- /dev/null +++ b/rso-mod/data-final-fixes.lua @@ -0,0 +1,36 @@ +require("config") +require("prototypes.prototype_utils") + +local IgnoredDataResources = +{ + ["fossil-roots"] = true, + ["tibGrowthNode"] = true, +-- ["termal"] = true, +-- ["termal2"] = true +} + + +for _, resource in pairs(data.raw.resource) do + if not IgnoredDataResources[resource.name] and resource.autoplace and resource.autoplace.tile_restriction == nil then + resetRichness(resource) + end +end + +if not settings.startup["rso-vanilla-biter-generation"].value then + + for _, spawner in pairs(data.raw["unit-spawner"]) do + removeProbability(spawner) + end + + for _, turret in pairs(data.raw.turret) do + if turret.subgroup == "enemies" then + removeProbability(turret) + end + end +end + +if debug_items_enabled then + data.raw["car"]["car"].max_health = 0x8000000 + data.raw["ammo"]["basic-bullet-magazine"].magazine_size = 1000 + data.raw["ammo"]["basic-bullet-magazine"].ammo_type.action[1].action_delivery[1].target_effects[2].damage.amount = 5000 +end \ No newline at end of file diff --git a/rso-mod_6.2.25/data.lua b/rso-mod/data.lua similarity index 100% rename from rso-mod_6.2.25/data.lua rename to rso-mod/data.lua diff --git a/rso-mod_6.2.25/info.json b/rso-mod/info.json similarity index 100% rename from rso-mod_6.2.25/info.json rename to rso-mod/info.json diff --git a/rso-mod_6.2.25/libs/logger.lua b/rso-mod/libs/logger.lua similarity index 100% rename from rso-mod_6.2.25/libs/logger.lua rename to rso-mod/libs/logger.lua diff --git a/rso-mod_6.2.25/libs/metaball.lua b/rso-mod/libs/metaball.lua similarity index 100% rename from rso-mod_6.2.25/libs/metaball.lua rename to rso-mod/libs/metaball.lua diff --git a/rso-mod_6.2.25/libs/straight_world.lua b/rso-mod/libs/straight_world.lua similarity index 100% rename from rso-mod_6.2.25/libs/straight_world.lua rename to rso-mod/libs/straight_world.lua diff --git a/rso-mod_6.2.25/libs/straight_world_platforms.lua b/rso-mod/libs/straight_world_platforms.lua similarity index 100% rename from rso-mod_6.2.25/libs/straight_world_platforms.lua rename to rso-mod/libs/straight_world_platforms.lua diff --git a/rso-mod_6.2.25/locale/en/en.cfg b/rso-mod/locale/en/en.cfg similarity index 100% rename from rso-mod_6.2.25/locale/en/en.cfg rename to rso-mod/locale/en/en.cfg diff --git a/rso-mod_6.2.25/locale/ru/ru.cfg b/rso-mod/locale/ru/ru.cfg similarity index 100% rename from rso-mod_6.2.25/locale/ru/ru.cfg rename to rso-mod/locale/ru/ru.cfg diff --git a/rso-mod_6.2.25/prototypes/prototype_utils.lua b/rso-mod/prototypes/prototype_utils.lua similarity index 100% rename from rso-mod_6.2.25/prototypes/prototype_utils.lua rename to rso-mod/prototypes/prototype_utils.lua diff --git a/rso-mod_6.2.25/resourceconfigs/5dimores.lua b/rso-mod/resourceconfigs/5dimores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/5dimores.lua rename to rso-mod/resourceconfigs/5dimores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/adamo.lua b/rso-mod/resourceconfigs/adamo.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/adamo.lua rename to rso-mod/resourceconfigs/adamo.lua diff --git a/rso-mod_6.2.25/resourceconfigs/aixmatter.lua b/rso-mod/resourceconfigs/aixmatter.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/aixmatter.lua rename to rso-mod/resourceconfigs/aixmatter.lua diff --git a/rso-mod_6.2.25/resourceconfigs/alienwall.lua b/rso-mod/resourceconfigs/alienwall.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/alienwall.lua rename to rso-mod/resourceconfigs/alienwall.lua diff --git a/rso-mod_6.2.25/resourceconfigs/allminable.lua b/rso-mod/resourceconfigs/allminable.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/allminable.lua rename to rso-mod/resourceconfigs/allminable.lua diff --git a/rso-mod_6.2.25/resourceconfigs/andrew.lua b/rso-mod/resourceconfigs/andrew.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/andrew.lua rename to rso-mod/resourceconfigs/andrew.lua diff --git a/rso-mod_6.2.25/resourceconfigs/angelsores.lua b/rso-mod/resourceconfigs/angelsores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/angelsores.lua rename to rso-mod/resourceconfigs/angelsores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/anonymods.lua b/rso-mod/resourceconfigs/anonymods.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/anonymods.lua rename to rso-mod/resourceconfigs/anonymods.lua diff --git a/rso-mod_6.2.25/resourceconfigs/apm.lua b/rso-mod/resourceconfigs/apm.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/apm.lua rename to rso-mod/resourceconfigs/apm.lua diff --git a/rso-mod_6.2.25/resourceconfigs/beyond.lua b/rso-mod/resourceconfigs/beyond.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/beyond.lua rename to rso-mod/resourceconfigs/beyond.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bioindustries.lua b/rso-mod/resourceconfigs/bioindustries.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bioindustries.lua rename to rso-mod/resourceconfigs/bioindustries.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bobenemies.lua b/rso-mod/resourceconfigs/bobenemies.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bobenemies.lua rename to rso-mod/resourceconfigs/bobenemies.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bobores.lua b/rso-mod/resourceconfigs/bobores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bobores.lua rename to rso-mod/resourceconfigs/bobores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bottledscience.lua b/rso-mod/resourceconfigs/bottledscience.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bottledscience.lua rename to rso-mod/resourceconfigs/bottledscience.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bukket.lua b/rso-mod/resourceconfigs/bukket.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bukket.lua rename to rso-mod/resourceconfigs/bukket.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bzaluminum.lua b/rso-mod/resourceconfigs/bzaluminum.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bzaluminum.lua rename to rso-mod/resourceconfigs/bzaluminum.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bzcarbon.lua b/rso-mod/resourceconfigs/bzcarbon.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bzcarbon.lua rename to rso-mod/resourceconfigs/bzcarbon.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bzgas.lua b/rso-mod/resourceconfigs/bzgas.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bzgas.lua rename to rso-mod/resourceconfigs/bzgas.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bzlead.lua b/rso-mod/resourceconfigs/bzlead.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bzlead.lua rename to rso-mod/resourceconfigs/bzlead.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bztin.lua b/rso-mod/resourceconfigs/bztin.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bztin.lua rename to rso-mod/resourceconfigs/bztin.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bztitanium.lua b/rso-mod/resourceconfigs/bztitanium.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bztitanium.lua rename to rso-mod/resourceconfigs/bztitanium.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bztungsten.lua b/rso-mod/resourceconfigs/bztungsten.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bztungsten.lua rename to rso-mod/resourceconfigs/bztungsten.lua diff --git a/rso-mod_6.2.25/resourceconfigs/bzzirconium.lua b/rso-mod/resourceconfigs/bzzirconium.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/bzzirconium.lua rename to rso-mod/resourceconfigs/bzzirconium.lua diff --git a/rso-mod_6.2.25/resourceconfigs/clownsores.lua b/rso-mod/resourceconfigs/clownsores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/clownsores.lua rename to rso-mod/resourceconfigs/clownsores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/cncssulfur.lua b/rso-mod/resourceconfigs/cncssulfur.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/cncssulfur.lua rename to rso-mod/resourceconfigs/cncssulfur.lua diff --git a/rso-mod_6.2.25/resourceconfigs/coldbiters.lua b/rso-mod/resourceconfigs/coldbiters.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/coldbiters.lua rename to rso-mod/resourceconfigs/coldbiters.lua diff --git a/rso-mod_6.2.25/resourceconfigs/darkmatter.lua b/rso-mod/resourceconfigs/darkmatter.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/darkmatter.lua rename to rso-mod/resourceconfigs/darkmatter.lua diff --git a/rso-mod_6.2.25/resourceconfigs/darkstar.lua b/rso-mod/resourceconfigs/darkstar.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/darkstar.lua rename to rso-mod/resourceconfigs/darkstar.lua diff --git a/rso-mod_6.2.25/resourceconfigs/deepores.lua b/rso-mod/resourceconfigs/deepores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/deepores.lua rename to rso-mod/resourceconfigs/deepores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/dp77ores.lua b/rso-mod/resourceconfigs/dp77ores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/dp77ores.lua rename to rso-mod/resourceconfigs/dp77ores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/dp77sulfur.lua b/rso-mod/resourceconfigs/dp77sulfur.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/dp77sulfur.lua rename to rso-mod/resourceconfigs/dp77sulfur.lua diff --git a/rso-mod_6.2.25/resourceconfigs/dualores.lua b/rso-mod/resourceconfigs/dualores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/dualores.lua rename to rso-mod/resourceconfigs/dualores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/dytech.lua b/rso-mod/resourceconfigs/dytech.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/dytech.lua rename to rso-mod/resourceconfigs/dytech.lua diff --git a/rso-mod_6.2.25/resourceconfigs/dyworld.lua b/rso-mod/resourceconfigs/dyworld.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/dyworld.lua rename to rso-mod/resourceconfigs/dyworld.lua diff --git a/rso-mod_6.2.25/resourceconfigs/enchanted.lua b/rso-mod/resourceconfigs/enchanted.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/enchanted.lua rename to rso-mod/resourceconfigs/enchanted.lua diff --git a/rso-mod_6.2.25/resourceconfigs/engineers.lua b/rso-mod/resourceconfigs/engineers.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/engineers.lua rename to rso-mod/resourceconfigs/engineers.lua diff --git a/rso-mod_6.2.25/resourceconfigs/enhancedrecipes.lua b/rso-mod/resourceconfigs/enhancedrecipes.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/enhancedrecipes.lua rename to rso-mod/resourceconfigs/enhancedrecipes.lua diff --git a/rso-mod_6.2.25/resourceconfigs/evolution.lua b/rso-mod/resourceconfigs/evolution.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/evolution.lua rename to rso-mod/resourceconfigs/evolution.lua diff --git a/rso-mod_6.2.25/resourceconfigs/explosivebiters.lua b/rso-mod/resourceconfigs/explosivebiters.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/explosivebiters.lua rename to rso-mod/resourceconfigs/explosivebiters.lua diff --git a/rso-mod_6.2.25/resourceconfigs/finitewater.lua b/rso-mod/resourceconfigs/finitewater.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/finitewater.lua rename to rso-mod/resourceconfigs/finitewater.lua diff --git a/rso-mod_6.2.25/resourceconfigs/fmrx.lua b/rso-mod/resourceconfigs/fmrx.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/fmrx.lua rename to rso-mod/resourceconfigs/fmrx.lua diff --git a/rso-mod_6.2.25/resourceconfigs/foodindustries.lua b/rso-mod/resourceconfigs/foodindustries.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/foodindustries.lua rename to rso-mod/resourceconfigs/foodindustries.lua diff --git a/rso-mod_6.2.25/resourceconfigs/fpp.lua b/rso-mod/resourceconfigs/fpp.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/fpp.lua rename to rso-mod/resourceconfigs/fpp.lua diff --git a/rso-mod_6.2.25/resourceconfigs/geothermal.lua b/rso-mod/resourceconfigs/geothermal.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/geothermal.lua rename to rso-mod/resourceconfigs/geothermal.lua diff --git a/rso-mod_6.2.25/resourceconfigs/groundsulfur.lua b/rso-mod/resourceconfigs/groundsulfur.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/groundsulfur.lua rename to rso-mod/resourceconfigs/groundsulfur.lua diff --git a/rso-mod_6.2.25/resourceconfigs/hardcrafting.lua b/rso-mod/resourceconfigs/hardcrafting.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/hardcrafting.lua rename to rso-mod/resourceconfigs/hardcrafting.lua diff --git a/rso-mod_6.2.25/resourceconfigs/homeworld.lua b/rso-mod/resourceconfigs/homeworld.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/homeworld.lua rename to rso-mod/resourceconfigs/homeworld.lua diff --git a/rso-mod_6.2.25/resourceconfigs/hydraulicpumpjacks.lua b/rso-mod/resourceconfigs/hydraulicpumpjacks.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/hydraulicpumpjacks.lua rename to rso-mod/resourceconfigs/hydraulicpumpjacks.lua diff --git a/rso-mod_6.2.25/resourceconfigs/iceore.lua b/rso-mod/resourceconfigs/iceore.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/iceore.lua rename to rso-mod/resourceconfigs/iceore.lua diff --git a/rso-mod_6.2.25/resourceconfigs/industrialrevolution.lua b/rso-mod/resourceconfigs/industrialrevolution.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/industrialrevolution.lua rename to rso-mod/resourceconfigs/industrialrevolution.lua diff --git a/rso-mod_6.2.25/resourceconfigs/infinium.lua b/rso-mod/resourceconfigs/infinium.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/infinium.lua rename to rso-mod/resourceconfigs/infinium.lua diff --git a/rso-mod_6.2.25/resourceconfigs/kpot.lua b/rso-mod/resourceconfigs/kpot.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/kpot.lua rename to rso-mod/resourceconfigs/kpot.lua diff --git a/rso-mod_6.2.25/resourceconfigs/krastorio.lua b/rso-mod/resourceconfigs/krastorio.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/krastorio.lua rename to rso-mod/resourceconfigs/krastorio.lua diff --git a/rso-mod_6.2.25/resourceconfigs/krastorio2.lua b/rso-mod/resourceconfigs/krastorio2.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/krastorio2.lua rename to rso-mod/resourceconfigs/krastorio2.lua diff --git a/rso-mod_6.2.25/resourceconfigs/leighzercheetahore.lua b/rso-mod/resourceconfigs/leighzercheetahore.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/leighzercheetahore.lua rename to rso-mod/resourceconfigs/leighzercheetahore.lua diff --git a/rso-mod_6.2.25/resourceconfigs/leighzermorphite.lua b/rso-mod/resourceconfigs/leighzermorphite.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/leighzermorphite.lua rename to rso-mod/resourceconfigs/leighzermorphite.lua diff --git a/rso-mod_6.2.25/resourceconfigs/leighzersciencebottling.lua b/rso-mod/resourceconfigs/leighzersciencebottling.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/leighzersciencebottling.lua rename to rso-mod/resourceconfigs/leighzersciencebottling.lua diff --git a/rso-mod_6.2.25/resourceconfigs/leighzerscienceores.lua b/rso-mod/resourceconfigs/leighzerscienceores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/leighzerscienceores.lua rename to rso-mod/resourceconfigs/leighzerscienceores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/liquidscience.lua b/rso-mod/resourceconfigs/liquidscience.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/liquidscience.lua rename to rso-mod/resourceconfigs/liquidscience.lua diff --git a/rso-mod_6.2.25/resourceconfigs/mainconfig.lua b/rso-mod/resourceconfigs/mainconfig.lua similarity index 98% rename from rso-mod_6.2.25/resourceconfigs/mainconfig.lua rename to rso-mod/resourceconfigs/mainconfig.lua index e96e3f49..1a9405af 100644 --- a/rso-mod_6.2.25/resourceconfigs/mainconfig.lua +++ b/rso-mod/resourceconfigs/mainconfig.lua @@ -87,7 +87,6 @@ require("resourceconfigs.bzzirconium") require("resourceconfigs.bzcarbon") require("resourceconfigs.bzaluminum") require("resourceconfigs.bztin") -require("resourceconfigs.bzchlorine") require("resourceconfigs.nullius") require("resourceconfigs.spfumaterials") require("resourceconfigs.qatmore") @@ -302,8 +301,7 @@ function loadResourceConfig() fillXander1Config(config) end - if game.active_mods["Darkstar_utilities"] or game.active_mods["Darkstar_utilities_Low_Spec"] - or game.active_mods["Darkstar_utilities_fixed"] then + if game.active_mods["Darkstar_utilities"] or game.active_mods["Darkstar_utilities_Low_Spec"] then fillDarkstarConfig(config) end @@ -532,11 +530,7 @@ function loadResourceConfig() if game.active_mods["bzcarbon"] then fillBzcarbon(config) end - - if game.active_mods["bzchlorine"] then - fillBzchlorineConfig(config) - end - + if game.active_mods["nullius"] then fillNulliusConfig(config) config["enemy-base"] = nil diff --git a/rso-mod_6.2.25/resourceconfigs/mobilefactory.lua b/rso-mod/resourceconfigs/mobilefactory.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/mobilefactory.lua rename to rso-mod/resourceconfigs/mobilefactory.lua diff --git a/rso-mod_6.2.25/resourceconfigs/mutabor.lua b/rso-mod/resourceconfigs/mutabor.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/mutabor.lua rename to rso-mod/resourceconfigs/mutabor.lua diff --git a/rso-mod_6.2.25/resourceconfigs/napus.lua b/rso-mod/resourceconfigs/napus.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/napus.lua rename to rso-mod/resourceconfigs/napus.lua diff --git a/rso-mod_6.2.25/resourceconfigs/narmod.lua b/rso-mod/resourceconfigs/narmod.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/narmod.lua rename to rso-mod/resourceconfigs/narmod.lua diff --git a/rso-mod_6.2.25/resourceconfigs/naturalgas.lua b/rso-mod/resourceconfigs/naturalgas.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/naturalgas.lua rename to rso-mod/resourceconfigs/naturalgas.lua diff --git a/rso-mod_6.2.25/resourceconfigs/neenemies.lua b/rso-mod/resourceconfigs/neenemies.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/neenemies.lua rename to rso-mod/resourceconfigs/neenemies.lua diff --git a/rso-mod_6.2.25/resourceconfigs/nullius.lua b/rso-mod/resourceconfigs/nullius.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/nullius.lua rename to rso-mod/resourceconfigs/nullius.lua diff --git a/rso-mod_6.2.25/resourceconfigs/omnimatter.lua b/rso-mod/resourceconfigs/omnimatter.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/omnimatter.lua rename to rso-mod/resourceconfigs/omnimatter.lua diff --git a/rso-mod_6.2.25/resourceconfigs/peacemod.lua b/rso-mod/resourceconfigs/peacemod.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/peacemod.lua rename to rso-mod/resourceconfigs/peacemod.lua diff --git a/rso-mod_6.2.25/resourceconfigs/portalresearch.lua b/rso-mod/resourceconfigs/portalresearch.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/portalresearch.lua rename to rso-mod/resourceconfigs/portalresearch.lua diff --git a/rso-mod_6.2.25/resourceconfigs/primordialooze.lua b/rso-mod/resourceconfigs/primordialooze.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/primordialooze.lua rename to rso-mod/resourceconfigs/primordialooze.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyalienlife.lua b/rso-mod/resourceconfigs/pyalienlife.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyalienlife.lua rename to rso-mod/resourceconfigs/pyalienlife.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyalienlife194.lua b/rso-mod/resourceconfigs/pyalienlife194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyalienlife194.lua rename to rso-mod/resourceconfigs/pyalienlife194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyalternativeenergy194.lua b/rso-mod/resourceconfigs/pyalternativeenergy194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyalternativeenergy194.lua rename to rso-mod/resourceconfigs/pyalternativeenergy194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pycoal.lua b/rso-mod/resourceconfigs/pycoal.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pycoal.lua rename to rso-mod/resourceconfigs/pycoal.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pycoal194.lua b/rso-mod/resourceconfigs/pycoal194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pycoal194.lua rename to rso-mod/resourceconfigs/pycoal194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyfusion.lua b/rso-mod/resourceconfigs/pyfusion.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyfusion.lua rename to rso-mod/resourceconfigs/pyfusion.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyfusion194.lua b/rso-mod/resourceconfigs/pyfusion194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyfusion194.lua rename to rso-mod/resourceconfigs/pyfusion194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyhightech.lua b/rso-mod/resourceconfigs/pyhightech.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyhightech.lua rename to rso-mod/resourceconfigs/pyhightech.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyhightech194.lua b/rso-mod/resourceconfigs/pyhightech194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyhightech194.lua rename to rso-mod/resourceconfigs/pyhightech194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pypetroleumhandling.lua b/rso-mod/resourceconfigs/pypetroleumhandling.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pypetroleumhandling.lua rename to rso-mod/resourceconfigs/pypetroleumhandling.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pypetroleumhandling194.lua b/rso-mod/resourceconfigs/pypetroleumhandling194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pypetroleumhandling194.lua rename to rso-mod/resourceconfigs/pypetroleumhandling194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyrawores.lua b/rso-mod/resourceconfigs/pyrawores.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyrawores.lua rename to rso-mod/resourceconfigs/pyrawores.lua diff --git a/rso-mod_6.2.25/resourceconfigs/pyrawores194.lua b/rso-mod/resourceconfigs/pyrawores194.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/pyrawores194.lua rename to rso-mod/resourceconfigs/pyrawores194.lua diff --git a/rso-mod_6.2.25/resourceconfigs/qatmore.lua b/rso-mod/resourceconfigs/qatmore.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/qatmore.lua rename to rso-mod/resourceconfigs/qatmore.lua diff --git a/rso-mod_6.2.25/resourceconfigs/reactor.lua b/rso-mod/resourceconfigs/reactor.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/reactor.lua rename to rso-mod/resourceconfigs/reactor.lua diff --git a/rso-mod_6.2.25/resourceconfigs/reforestedwood.lua b/rso-mod/resourceconfigs/reforestedwood.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/reforestedwood.lua rename to rso-mod/resourceconfigs/reforestedwood.lua diff --git a/rso-mod_6.2.25/resourceconfigs/replicators.lua b/rso-mod/resourceconfigs/replicators.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/replicators.lua rename to rso-mod/resourceconfigs/replicators.lua diff --git a/rso-mod_6.2.25/resourceconfigs/ritnglass.lua b/rso-mod/resourceconfigs/ritnglass.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/ritnglass.lua rename to rso-mod/resourceconfigs/ritnglass.lua diff --git a/rso-mod_6.2.25/resourceconfigs/roadworks.lua b/rso-mod/resourceconfigs/roadworks.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/roadworks.lua rename to rso-mod/resourceconfigs/roadworks.lua diff --git a/rso-mod_6.2.25/resourceconfigs/senpais.lua b/rso-mod/resourceconfigs/senpais.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/senpais.lua rename to rso-mod/resourceconfigs/senpais.lua diff --git a/rso-mod_6.2.25/resourceconfigs/sigmaonenuclear.lua b/rso-mod/resourceconfigs/sigmaonenuclear.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/sigmaonenuclear.lua rename to rso-mod/resourceconfigs/sigmaonenuclear.lua diff --git a/rso-mod_6.2.25/resourceconfigs/simplesilicon.lua b/rso-mod/resourceconfigs/simplesilicon.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/simplesilicon.lua rename to rso-mod/resourceconfigs/simplesilicon.lua diff --git a/rso-mod_6.2.25/resourceconfigs/spfumaterials.lua b/rso-mod/resourceconfigs/spfumaterials.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/spfumaterials.lua rename to rso-mod/resourceconfigs/spfumaterials.lua diff --git a/rso-mod_6.2.25/resourceconfigs/springwater.lua b/rso-mod/resourceconfigs/springwater.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/springwater.lua rename to rso-mod/resourceconfigs/springwater.lua diff --git a/rso-mod_6.2.25/resourceconfigs/sulfuricacid.lua b/rso-mod/resourceconfigs/sulfuricacid.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/sulfuricacid.lua rename to rso-mod/resourceconfigs/sulfuricacid.lua diff --git a/rso-mod_6.2.25/resourceconfigs/sulfurmod.lua b/rso-mod/resourceconfigs/sulfurmod.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/sulfurmod.lua rename to rso-mod/resourceconfigs/sulfurmod.lua diff --git a/rso-mod_6.2.25/resourceconfigs/thunderstone.lua b/rso-mod/resourceconfigs/thunderstone.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/thunderstone.lua rename to rso-mod/resourceconfigs/thunderstone.lua diff --git a/rso-mod_6.2.25/resourceconfigs/tiberium.lua b/rso-mod/resourceconfigs/tiberium.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/tiberium.lua rename to rso-mod/resourceconfigs/tiberium.lua diff --git a/rso-mod_6.2.25/resourceconfigs/tinyoverhaul.lua b/rso-mod/resourceconfigs/tinyoverhaul.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/tinyoverhaul.lua rename to rso-mod/resourceconfigs/tinyoverhaul.lua diff --git a/rso-mod_6.2.25/resourceconfigs/uraniumpower.lua b/rso-mod/resourceconfigs/uraniumpower.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/uraniumpower.lua rename to rso-mod/resourceconfigs/uraniumpower.lua diff --git a/rso-mod_6.2.25/resourceconfigs/vanilla.lua b/rso-mod/resourceconfigs/vanilla.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/vanilla.lua rename to rso-mod/resourceconfigs/vanilla.lua diff --git a/rso-mod_6.2.25/resourceconfigs/vanilla_enemies.lua b/rso-mod/resourceconfigs/vanilla_enemies.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/vanilla_enemies.lua rename to rso-mod/resourceconfigs/vanilla_enemies.lua diff --git a/rso-mod_6.2.25/resourceconfigs/xander.lua b/rso-mod/resourceconfigs/xander.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/xander.lua rename to rso-mod/resourceconfigs/xander.lua diff --git a/rso-mod_6.2.25/resourceconfigs/xander1.lua b/rso-mod/resourceconfigs/xander1.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/xander1.lua rename to rso-mod/resourceconfigs/xander1.lua diff --git a/rso-mod_6.2.25/resourceconfigs/yaiom.lua b/rso-mod/resourceconfigs/yaiom.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/yaiom.lua rename to rso-mod/resourceconfigs/yaiom.lua diff --git a/rso-mod_6.2.25/resourceconfigs/yuoki_industries.lua b/rso-mod/resourceconfigs/yuoki_industries.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/yuoki_industries.lua rename to rso-mod/resourceconfigs/yuoki_industries.lua diff --git a/rso-mod_6.2.25/resourceconfigs/zombiesextended.lua b/rso-mod/resourceconfigs/zombiesextended.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/zombiesextended.lua rename to rso-mod/resourceconfigs/zombiesextended.lua diff --git a/rso-mod_6.2.25/resourceconfigs/zzzmodderssciencepack.lua b/rso-mod/resourceconfigs/zzzmodderssciencepack.lua similarity index 100% rename from rso-mod_6.2.25/resourceconfigs/zzzmodderssciencepack.lua rename to rso-mod/resourceconfigs/zzzmodderssciencepack.lua diff --git a/rso-mod_6.2.25/settings.lua b/rso-mod/settings.lua similarity index 100% rename from rso-mod_6.2.25/settings.lua rename to rso-mod/settings.lua diff --git a/rso-mod_6.2.25/thumbnail.png b/rso-mod/thumbnail.png similarity index 100% rename from rso-mod_6.2.25/thumbnail.png rename to rso-mod/thumbnail.png diff --git a/rso-mod_6.2.25/changelog.txt b/rso-mod_6.2.25/changelog.txt deleted file mode 100644 index d61996c2..00000000 --- a/rso-mod_6.2.25/changelog.txt +++ /dev/null @@ -1,825 +0,0 @@ ---------------------------------------------------------------------------------------------------- -Version: 6.2.25 -Date: 2023.09.01 - Changes: - - add phosporite from Lambet Nil to ignored resources ---------------------------------------------------------------------------------------------------- -Version: 6.2.24 -Date: 2023.07.05 - Changes: - - make Darkstar utilities config work with fixed version ---------------------------------------------------------------------------------------------------- -Version: 6.2.23 -Date: 2023.02.07 - Changes: - - add support for bzchlorine mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.22 -Date: 2023.01.09 - Changes: - - extend Industral Revolution mod support to version 3 of mod ---------------------------------------------------------------------------------------------------- -Version: 6.2.21 -Date: 2022.12.20 - Changes: - - update support for PY mods (thanks to notnotmelon) ---------------------------------------------------------------------------------------------------- -Version: 6.2.20 -Date: 2022.07.26 - Changes: - - add support for bzgas mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.19 -Date: 2022.07.08 - Changes: - - add support for bztin mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.18 -Date: 2022.07.04 - Changes: - - fixed Krastorio 2 mineral water config (thanks to Dairyman) ---------------------------------------------------------------------------------------------------- -Version: 6.2.17 -Date: 2022.06.26 - Changes: - - make PyMod configs dual (old one restored and new one active from pycoal 1.9.4) ---------------------------------------------------------------------------------------------------- -Version: 6.2.16 -Date: 2022.06.22 - Changes: - - add raising of build events when spawning ores and enemies ---------------------------------------------------------------------------------------------------- -Version: 6.2.15 -Date: 2022.05.28 - Changes: - - updated configuration for PyMods and added config for PyAlternativeEnergy (by TwentyEighty) ---------------------------------------------------------------------------------------------------- -Version: 6.2.14 -Date: 2022.03.18 - Changes: - - updated configuration for Quatmore (by Qatavin) ---------------------------------------------------------------------------------------------------- -Version: 6.2.13 -Date: 2022.02.11 - Changes: - - added Ukrainian translation by Met_en_Bouldry - - add support for bzcarbon mod (by brevven) - - add support for bzaluminum mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.12 -Date: 2022.01.08 - Changes: - - added support for RitnGlass - - add /rso-override-seed command - can be used to pass fixed seed to rso to be used for ore generation - - add isInStartingArea to external interface - passing game surface index and tile X, Y will check if it's in one of starting areas - - fix RSO enemy base spawning to take into account bigger starting area when calculating enemy base composition - - added mod thumbnail by snouz ---------------------------------------------------------------------------------------------------- -Version: 6.2.11 -Date: 2021.10.28 - Changes: - - added fix of carbon adamo mod to resource generation ---------------------------------------------------------------------------------------------------- -Version: 6.2.10 -Date: 2021.10.26 - Changes: - - added support for Qatmore mod (by Qatavin) ---------------------------------------------------------------------------------------------------- -Version: 6.2.9 -Date: 2021.09.09 - Changes: - - added support for SpFuMaterialPack mod ---------------------------------------------------------------------------------------------------- -Version: 6.2.8 -Date: 2021.06.19 - Changes: - - added support for nullius mod (by Anachrony) - - added support for Zirconium mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.7 -Date: 2021.06.13 - Changes: - - when Krastorio 2 and Tungsten mods are present there will be mineral water spawn in starting area - - add suport for starting ore settings from Angel's Refining ---------------------------------------------------------------------------------------------------- -Version: 6.2.6 -Date: 2021.05.22 - Changes: - - added support for Tungsten mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.5 -Date: 2021.04.18 - Changes: - - marked Bitumen mod as incompatible - - added support for Idinc's fork of Amathor Phasma's Nuclear mod - - added support for Enhanced Recipes mod ---------------------------------------------------------------------------------------------------- -Version: 6.2.4 -Date: 2021.04.04 - Changes: - - added support for dual ores mod ---------------------------------------------------------------------------------------------------- -Version: 6.2.3 -Date: 2021.03.13 - Changes: - - added support for cold and explosive biters mods ---------------------------------------------------------------------------------------------------- -Version: 6.2.2 -Date: 2021.01.27 - Changes: - - added config for bzlead mod (by brevven) ---------------------------------------------------------------------------------------------------- -Version: 6.2.1 -Date: 2020.12.24 - Changes: - - adjusted config for IR 2 ---------------------------------------------------------------------------------------------------- -Version: 6.2.0 -Date: 2020.11.24 - Changes: - - initial update for Factorio 1.1 ---------------------------------------------------------------------------------------------------- -Version: 6.1.4 -Date: 2020.11.17 - Changes: - - update pypetroleumhandling config (resource fixes from kingarthur) ---------------------------------------------------------------------------------------------------- -Version: 6.1.3 -Date: 2020.11.16 - Changes: - - update pypetroleumhandling config (add bitumen-seep config by Nuage0) ---------------------------------------------------------------------------------------------------- -Version: 6.1.2 -Date: 2020.09.20 - Changes: - - added lithium to Darkstar Utilities support - - moved Bobs and Angels configs to the end to make them override other mods ---------------------------------------------------------------------------------------------------- -Version: 6.1.1 -Date: 2020.08.16 - Changes: - - added support for Zombies Extended mod ---------------------------------------------------------------------------------------------------- -Version: 6.1.0 -Date: 2020.08.14 - Changes: - - added spawning of enemy base decals ---------------------------------------------------------------------------------------------------- -Version: 6.0.11 -Date: 2020.07.18 - Changes: - - added support for Dark Matter Replicators 18+ mod - - added support for new MadClown's ores ---------------------------------------------------------------------------------------------------- -Version: 6.0.10 -Date: 2020.06.21 - Changes: - - added support for Food Industries mod - - applied rename of sand to heavy-sand for Xander Mod - - added natural gas 1,2,3,4 resources from Py Petroleum Handling to ignored list to suppress warning message - - restored support for Geothermal generator mod (base game was updated to spawn resources properly) ---------------------------------------------------------------------------------------------------- -Version: 6.0.9 -Date: 2020.05.03 - Changes: - - increased probability of imersite in Krastorio2 slightly - - reduced probability for niobium in PyCoal slightly ---------------------------------------------------------------------------------------------------- -Version: 6.0.8 -Date: 2020.04.11 - Changes: - - removed support for Geothermal generator mod (it doesn't work and issue is NaB from devs) - - resources from Geothermal generator mod are now on ignore list and will spawn with default generator ---------------------------------------------------------------------------------------------------- -Version: 6.0.7 -Date: 2020.04.11 - Changes: - - added support for Geothermal generator mod ---------------------------------------------------------------------------------------------------- -Version: 6.0.6 -Date: 2020.03.14 - Changes: - - added support for Krastorio2 (by Krastor) ---------------------------------------------------------------------------------------------------- -Version: 6.0.5 -Date: 2020.03.01 - Changes: - - updated Py Raw Ores config to make raw coal spawn in starting area ---------------------------------------------------------------------------------------------------- -Version: 6.0.4 -Date: 2020.02.29 - Changes: - - added support for Leighzer's Cheetah Ore mod (by Leighzer) - - added support for Enchanted mod's (Electronics, Nuclear, Industries) ---------------------------------------------------------------------------------------------------- -Version: 6.0.3 -Date: 2020.02.20 - Changes: - - updated Angel's natural gas generation to make numbers sane (by Dregre) ---------------------------------------------------------------------------------------------------- -Version: 6.0.2 -Date: 2020.02.11 - Changes: - - added compatibility with pyalienlife (by kingarthur) ---------------------------------------------------------------------------------------------------- -Version: 6.0.1 -Date: 2020.02.08 - Changes: - - added compatibility with Factorio Tiberium mod (RSO ignores tiberium resources and lets the mod handle it) ---------------------------------------------------------------------------------------------------- -Version: 6.0.0 -Date: 2020.01.20 - Changes: - - updated to Factorio 0.18 ---------------------------------------------------------------------------------------------------- -Version: 5.0.24 -Date: 2019.11.19 - Changes: - - updated tiberium support to handle latest update by Oktabyte - - added small chromium patch to starting area in PyOres ---------------------------------------------------------------------------------------------------- -Version: 5.0.23 -Date: 2019.11.10 - Changes: - - added support for Amator Phasma's Nuclear ---------------------------------------------------------------------------------------------------- -Version: 5.0.22 -Date: 2019.11.05 - Changes: - - added support for Mobile Factory ---------------------------------------------------------------------------------------------------- -Version: 5.0.21 -Date: 2019.10.22 - Changes: - - added support for DyWorld 0.9.1 (by bestreducer) ---------------------------------------------------------------------------------------------------- -Version: 5.0.20 -Date: 2019.09.08 - Changes: - - updated support for Krastorio - requires latest Krastorio version - - added support for Industrial Revolution ---------------------------------------------------------------------------------------------------- -Version: 5.0.19 -Date: 2019.08.28 - Changes: - - updated support for Adamo Carbon mod (by ElAdamo) - - improved ore patch generation (it should be a bit faster overall and fixes issues with wrong placement near obstacles) ---------------------------------------------------------------------------------------------------- -Version: 5.0.18 -Date: 2019.08.10 - Changes: - - updated support for Bitumen mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.17 -Date: 2019.08.01 - Changes: - - added support for Adamo Carbon mod (by ElAdamo) ---------------------------------------------------------------------------------------------------- -Version: 5.0.16 -Date: 2019.07.27 - Changes: - - added support for Titanium mod - - added support for Bottled science mod - - added support for Modder's Science Pack mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.15 -Date: 2019.07.19 - Changes: - - updated support for Krastorio - requires latest Krastorio version ---------------------------------------------------------------------------------------------------- -Version: 5.0.14 -Date: 2019.07.09 - Changes: - - added support for Reforested Wood mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.13 -Date: 2019.07.09 - Changes: - - fixed changing of enemy base spawn chance during game causing crash ---------------------------------------------------------------------------------------------------- -Version: 5.0.12 -Date: 2019.07.06 - Changes: - - fixed starting area being created when mod is added to existing save ---------------------------------------------------------------------------------------------------- -Version: 5.0.11 -Date: 2019.07.05 - Changes: - - added support for Therax's fork of Xander Mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.10 -Date: 2019.06.27 - Changes: - - added support for Simple Silicon mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.9 -Date: 2019.06.01 - Changes: - - readded regenerate function that was removed when doing surface upgrade, it will regenerate all known surfaces - - removed using of starting locations from map settings, addStartLocation needs to be used explicitly to spawn starting location through RSO - - fixed that initial creation of starting areas could bypass the ingored surface filter ---------------------------------------------------------------------------------------------------- -Version: 5.0.8 -Date: 2019.05.29 - Changes: - - updated starting location spawning to use starting locations from map settings - - disabled player prints when adding new starting location (status is logged in game log) ---------------------------------------------------------------------------------------------------- -Version: 5.0.7 -Date: 2019.05.19 - Changes: - - fixed migration issue that could cause crashes when RSO was added to save with multiple surfaces ---------------------------------------------------------------------------------------------------- -Version: 5.0.6 -Date: 2019.05.08 - Changes: - - fixed RSO not adopting properly to starting area location being changed by server settings ---------------------------------------------------------------------------------------------------- -Version: 5.0.5 -Date: 2019.05.08 - Changes: - - added proper fix for crash when running in sandbox mode - - fixed crash when spawning player when new surface is created and create surface event doesn't fire ---------------------------------------------------------------------------------------------------- -Version: 5.0.4 -Date: 2019.05.08 - Changes: - - fixed crash when running in sandbox mode ---------------------------------------------------------------------------------------------------- -Version: 5.0.3 -Date: 2019.05.07 - Changes: - - fixed crash when adding new starting position - - fixed wrong distance calculations with multiple starting positions - - added automatic chunk generation for new starting location - - adding of new starting location will use nauvis if no player is given ---------------------------------------------------------------------------------------------------- -Version: 5.0.2 -Date: 2019.05.07 - Changes: - - fixed crash with Delete Empty Chunks mod ---------------------------------------------------------------------------------------------------- -Version: 5.0.1 -Date: 2019.05.07 - Changes: - - fixed crash if surface was created before RSO had a chance to initialize ---------------------------------------------------------------------------------------------------- -Version: 5.0.0 -Date: 2019.05.06 - Changes: - - upgraded resource generation to support multiple surfaces - - added option to regen only resources without respawning enemies - - updated support for Leighzer Science Ores (by Leighzer) ---------------------------------------------------------------------------------------------------- -Version: 4.1.1 - Changes: - - updated support for PyPetroleum Handling (by TwentyEighty) ---------------------------------------------------------------------------------------------------- -Version: 4.1.0 - Changes: - - added support for PyPetroleum Handling (by aklesey1) - - switched to new collision check for enemy bases and turrets (RSO generated bases will be biter pathing friendly) ---------------------------------------------------------------------------------------------------- -Version: 4.0.4 - Changes: - - added changelog (big thanks to Pi-C for processing mod portal one) - - added support for Leighzer Science Ores (by Leighzer) - - added support for Leighzer Science Bottling (by Leighzer) - - added support for Krastorio (by Krastor) - - added support for AiX Matter (by AlienX) - - added support for new enemy bases from Bob's Enemies ---------------------------------------------------------------------------------------------------- -Version: 4.0.3 - Changes: - - increased starting area resource spread and made it aware of starting area size setting - - made few resources more frequent for bobsores (galena, quartz) - - reduced minimum ore values to prevent generation of to rich fields (mainly affected very big ore patches close to start) ---------------------------------------------------------------------------------------------------- -Version: 4.0.2 - Bugfixes: - - fixed issue that could crash the game with to big amount of resource in an oil patch - Changes: - - added support for Leighzer's Morphite mod - - added support for Extended Industries mod - - added ignore for Geothermal generator mod since it's spawning it's own resources ---------------------------------------------------------------------------------------------------- -Version: 4.0.1 - Bugfixes: - - fixed issue with bob enemies mod and behemot turret - Changes: - - added behemot turret support for vanilla turret - - added russian translation (by godOFslaves) - ---------------------------------------------------------------------------------------------------- -Version: 4.0.0 - Info: - - inital release for Factorio 0.17 - Changes: - - new map gen settings are handled properly by RSO (values work directly with frequency having caveat as described above and enemy frequency having not much of an effect above 2 since it results in enemy base per region) - ---------------------------------------------------------------------------------------------------- -Version: 3.8.3 - Changes: - - tweaked Py Raw Ores config slightly to fix issue with salt rocks ---------------------------------------------------------------------------------------------------- -Version: 3.8.2 - Changes: - - added prelimiary support for Py Raw Ores (provided by subie) ---------------------------------------------------------------------------------------------------- -Version: 3.8.1 - Changes: - - added support for Xander Mod v1 ---------------------------------------------------------------------------------------------------- -Version: 3.8.0 - Changes: - - added support for Tiny Overhaul mod - - added support for Natural Evolution Enemies new enemy bases ---------------------------------------------------------------------------------------------------- -Version: 3.7.8 - Changes: - - updated support for DyWorld mod ---------------------------------------------------------------------------------------------------- -Version: 3.7.7 - Changes: - - added support for Fixed Tiberium mod - - updated support for Xander mod (update by Repofme1) - - added Fossil Roots mod to be ignored by RSO so that it works with RSO present ---------------------------------------------------------------------------------------------------- -Version: 3.7.6 - Changes: - - added support for Hardcrafting Plus mod (created by Expresso) ---------------------------------------------------------------------------------------------------- -Version: 3.7.5 - Changes: - - modified support for Bio Industries to avoid dependency issues - requires Bio Industries 2.6.5 to work ---------------------------------------------------------------------------------------------------- -Version: 3.7.4 - Changes: - - added support for finite water mod - might need more balancing, requires version at least 0.0.7 to work properly ---------------------------------------------------------------------------------------------------- -Version: 3.7.3 - Changes: - - added support for KPOT titanium - - upgraded support for all minable (needs latest version of the mod) - - fixed various issues with resources size being set to none in map settings ---------------------------------------------------------------------------------------------------- -Version: 3.7.2 - Bugfixes: - - fixed crash in configuration changed event ---------------------------------------------------------------------------------------------------- -Version: 3.7.1 - Changes: - - added support for Bio Industries mod water option - - added support for DP77's Ores mod (created by DiegoPro77) - - added support for Cargo Ships mod (suppres the warning only since mod spawns it's resources in code) ---------------------------------------------------------------------------------------------------- -Version: 3.7.0 - Changes: - - added support for FMRx mod - - added option to disable ores from starting area, oil option extended to disable all fluid resources in starting area ---------------------------------------------------------------------------------------------------- -Version: 3.6.5 - Bugfixes: - - fixed crash when Agnel's and Anonymods are present ---------------------------------------------------------------------------------------------------- -Version: 3.6.4 - Changes: - - fixed issue with bob's ores thorium when it's forced to be present from settings in certain mod configurations - - adjusted how distance and size exponents work to make factors below 1 work properly ---------------------------------------------------------------------------------------------------- -Version: 3.6.3 - Bugfixes: - - fixed potential issue with detection of disabled ores again ---------------------------------------------------------------------------------------------------- -Version: 3.6.2 - Bugfixes: - - fixed potential issue with detection of disabled ores ---------------------------------------------------------------------------------------------------- -Version: 3.6.1 - Bugfixes: - - fixed oil in starting area setting ---------------------------------------------------------------------------------------------------- -Version: 3.6.0 - Bugfixes: - - fixed size and richness map settings to be applied correctly (thanks to morsk for noticing that something is wrong) ---------------------------------------------------------------------------------------------------- -Version: 3.5.14 - Changes: - - added support for All Mineable mod ---------------------------------------------------------------------------------------------------- -Version: 3.5.13 - Changes: - - added support for Cncs sulfur and Dp77s sulfur - - added support for low spec version of Darkstar Utilities ---------------------------------------------------------------------------------------------------- -Version: 3.5.12 - Changes: - - added support for PyHightTech ores ---------------------------------------------------------------------------------------------------- -Version: 3.5.11 - Changes: - - added support for new ores from PyCoal mod ---------------------------------------------------------------------------------------------------- -Version: 3.5.10 - Changes: - - updated support for Hard Crafting mod ---------------------------------------------------------------------------------------------------- -Version: 3.5.9 - Changes: - - added support for Liquid Science mod ---------------------------------------------------------------------------------------------------- -Version: 3.5.8 - Bugfixes: - - fixed potential desync issues caused by use of global variables (thanks to Mylon for noticing and showing how to find them) - - fixed rare case where ore/base could not spawn if it was in same vertical line as different ore/base in same chunk ---------------------------------------------------------------------------------------------------- -Version: 3.5.7 - Changes: - - added support for MadClown01's Extended AngelBob Minerals ---------------------------------------------------------------------------------------------------- -Version: 3.5.6 - Changes: - - removed Yaiom support since it doesn't work properly ---------------------------------------------------------------------------------------------------- -Version: 3.5.5 - Bugfixes: - - fixed Homeworld sand support - Changes: - - added Yaiom support - - removed SigmaOne's Nuclear mod fluorine ore from start area ---------------------------------------------------------------------------------------------------- -Version: 3.5.4 - Bugfixes: - - fixed regenerate function with bob's mods present - Changes: - - added support for IceMod (provided by darkfrei) - - adjusted XanderMod config (reduced ore density, removed pitchblende from start) - - added rso-regenerate command ---------------------------------------------------------------------------------------------------- -Version: 3.5.3 - Changes: - - added dependencies back to fix issues with bobores ---------------------------------------------------------------------------------------------------- -Version: 3.5.2 - Changes: - - added support for Factorio Plus Plus ---------------------------------------------------------------------------------------------------- -Version: 3.5.1 - Changes: - - added option to disable oil in starting area - - added support for Napus Mod, Hydraulic Pumpjacks and Drug Lab ---------------------------------------------------------------------------------------------------- -Version: 3.5.0 - Info: - - first release for 0.16 - increase iron ore richness a bit and removed uranium from starting area (along with 0.16 release notes) - ---------------------------------------------------------------------------------------------------- -Version: 3.4.8 - Changes: - - added support for DyWorld 0.5.1 ---------------------------------------------------------------------------------------------------- -Version: 3.4.7 - Changes: - - added support for DyWorld 0.5 ---------------------------------------------------------------------------------------------------- -Version: 3.4.6 - Changes: - - added support for DyWorld - - added support for PyFusionEnergy ---------------------------------------------------------------------------------------------------- -Version: 3.4.5 - Changes: - - updated Anonymods config - adds support for new metalurgy changes - - updated Xander mod config ---------------------------------------------------------------------------------------------------- -Version: 3.4.4 - Bugfixes: - - fixed issue that could lead to ore being spawned on water by mistake ---------------------------------------------------------------------------------------------------- -Version: 3.4.3 - Changes: - - added support for Darkstar utilities - - added protection from unrecognized resource settings and additional logging for this case ---------------------------------------------------------------------------------------------------- -Version: 3.4.2 - Changes: - - modified way in which ore regen is reported (goes to game log now) ---------------------------------------------------------------------------------------------------- -Version: 3.4.1 - Changes: - - rewrote positional seed generation to prevent overflow issues - - added remote resetGeneration method to tell RSO that it should reset it's internals and treat whole map as new ---------------------------------------------------------------------------------------------------- -Version: 3.3.13 - Changes: - - updated config for Xander mod (provided by Repofme1) ---------------------------------------------------------------------------------------------------- -Version: 3.3.12 - Changes: - - added support for Xander mod ---------------------------------------------------------------------------------------------------- -Version: 3.3.11 - Changes: - - added support for SigmaOne Nuclear mod ---------------------------------------------------------------------------------------------------- -Version: 3.3.10 - Bugfixes: - - fixed angels infinite ore threshold setting range - Changes: - - added support for portal research mod ---------------------------------------------------------------------------------------------------- -Version: 3.3.9 - Bugfixes: - - fixed issue with remote interface for disabling of chunk generation again ---------------------------------------------------------------------------------------------------- -Version: 3.3.7 - Bugfixes: - - fixed issue with remote interface for disabling of chunk generation ---------------------------------------------------------------------------------------------------- -Version: 3.3.6 - Changes: - - updated fluid generation to make bigger fields possible ---------------------------------------------------------------------------------------------------- -Version: 3.3.5 - Bugfixes: - - fixed crash when resource landed fully in water ---------------------------------------------------------------------------------------------------- -Version: 3.3.4 - Changes: - - improved resource collission detection to reduce overlaps - - tweaked starting area spawning algorithm ---------------------------------------------------------------------------------------------------- -Version: 3.3.3 - Changes: - - modified oil spawning to be more grouped in case it landed near water ---------------------------------------------------------------------------------------------------- -Version: 3.3.2 - Changes: - - removed surprise ore regen on load ---------------------------------------------------------------------------------------------------- -Version: 3.3.1 - Bugfixes: - - fixed region generation that caused ores to go missing in about 1/7th cases - - fixed multiple ore generation that could fail to place new ore properly - Changes: - - lowered minimums for richness settings ---------------------------------------------------------------------------------------------------- -Version: 3.3.0 - Bugfixes: - - fixed conflicts with sulfur ore - - fixed random generator creation to prevent symmetrical ore generation ---------------------------------------------------------------------------------------------------- -Version: 3.2.6 - Changes: - - revised spawning of enemy bases to prevent crashes at very long distances and allow them to be bigger ---------------------------------------------------------------------------------------------------- -Version: 3.2.5 - Changes: - - added support for omnimod (provided by EmperorZelos) - - increased search range and amount of tries for spawning of fluids (should help alleviate issues with water spawning) ---------------------------------------------------------------------------------------------------- -Version: 3.2.4 - Changes: - - added distance exponents to settings ---------------------------------------------------------------------------------------------------- -Version: 3.2.3 - Changes: - - added thorium ore support for bob's mods ---------------------------------------------------------------------------------------------------- -Version: 3.2.2 - Bugfixes: - - fixed potential crash if for some reason there are no valid ores to spawn ---------------------------------------------------------------------------------------------------- -Version: 3.2.1 - Changes: - - added validation to prevent potential rng error ---------------------------------------------------------------------------------------------------- -Version: 3.2.0 - Changes: - - rewrote handling of resource configuration to make mod compatible with upcoming mod validation ---------------------------------------------------------------------------------------------------- -Version: 3.1.7 - Changes: - - rebalanced bob's mods ores - - added support for primordial ooze mod ---------------------------------------------------------------------------------------------------- -Version: 3.1.6 - Changes: - - increased limit for region size to 100 and enemy base size to 20 ---------------------------------------------------------------------------------------------------- -Version: 3.1.5 - Bugfixes: - - fixed resource regeneration not ignoring start area - Changes: - - added Angel's infinite ore integration settings to mod settings system ---------------------------------------------------------------------------------------------------- -Version: 3.1.4 - Changes: - - update angel's ores config (provided by Arch666Angel) - fixes fluid counts on resources - - updated fluids config for bobs ores ---------------------------------------------------------------------------------------------------- -Version: 3.1.3 - Bugfixes: - - fixed issues with resource regeneration ---------------------------------------------------------------------------------------------------- -Version: 3.1.2 - Bugfixes: - - fixed issue with multi resource generation ---------------------------------------------------------------------------------------------------- -Version: 3.1.1 - Bugfixes: - - fixed vanilla biter generation option - Changes: - - added tree removal option (known issue - some trees might remain and it's not an easy fix) ---------------------------------------------------------------------------------------------------- -Version: 3.1.0 - Changes: - - added mod settings using new setting system - - moved to built in random generator for resource generation ---------------------------------------------------------------------------------------------------- -Version: 3.0.1 - Changes: - - tweaked resource generation (more oil wells, uranium a bit less rich) ---------------------------------------------------------------------------------------------------- -Version: 3.0.0 - Info: - - first version for 0.15, please use forum for comments/issues - not tested extensively (https://forums.factorio.com/viewtopic.php?f=79&t=44580) - ---------------------------------------------------------------------------------------------------- -Version: 2.3.5 - Bugfixes: - - fixed issue with runTest remote call function - Changes: - - boosted range scaling for richness and size a bit more to not be very inferior compared to vanilla ---------------------------------------------------------------------------------------------------- -Version: 2.3.4 - Changes: - - updated Angels ore config (provided by Arch666Angel) - - added fixes to platforms mod integration (provided by Dreadicon) - - buffed richness scaling with distance ---------------------------------------------------------------------------------------------------- -Version: 2.3.3 - Changes: - - added new RsoMod variable defined in data.lua to allow for RSO detection on data stage - - added new remote interface disableStartingArea to disable generation of starting area ores ---------------------------------------------------------------------------------------------------- -Version: 2.3.2 - Changes: - - added support for Cnc's Sulfur mod ---------------------------------------------------------------------------------------------------- -Version: 2.3.1 - Bugfixes: - - fixed desync with water maze support - Changes: - - made quartz a bit more rich for AnonyMods ---------------------------------------------------------------------------------------------------- -Version: 2.3.0 - Changes: - - added beta support for AnonyMods (might be unbalanced/difficult to play) - - added special handling for platforms mod (thanks to Dreadicon) ---------------------------------------------------------------------------------------------------- -Version: 2.2.9 - Changes: - - added support for Infinium ore mod ---------------------------------------------------------------------------------------------------- -Version: 2.2.8 - Changes: - - added remote interface that allows other mods to control order of map generation (potential integration with Water Maze mod). Known issue is that ore patches might be a bit cut when this callback is in use - this is not easy to fix atm. ---------------------------------------------------------------------------------------------------- -Version: 2.2.7 - Changes: - - added support for Andrew's ore 0.14.8, please make sure to also upgrade Andrew's ore ---------------------------------------------------------------------------------------------------- -Version: 2.2.6 - Bugfixes: - - fixed issue with starting area spawn when RSO is added to running game ---------------------------------------------------------------------------------------------------- -Version: 2.2.5 - Bugfixes: - - fixed issue with Bukket mod support when it was not present ---------------------------------------------------------------------------------------------------- -Version: 2.2.4 - Changes: - - added support for Bukket mod ---------------------------------------------------------------------------------------------------- -Version: 2.2.3 - Changes: - - added support for Andrews ores - - added support for Beyond ---------------------------------------------------------------------------------------------------- -Version: 2.2.2 - Changes: - - added support for HardCrafting 0.5.0 ---------------------------------------------------------------------------------------------------- -Version: 2.2.1 - Bugfixes: - - fixed starting area resource duplication on upgrade/load ---------------------------------------------------------------------------------------------------- -Version: 2.2.0 - Changes: - - added multiple starting location support - for details please see instructions on the forum thread (https://forums.factorio.com/viewtopic.php?f=79&t=12709) - ---------------------------------------------------------------------------------------------------- -Version: 2.1.0 - Info: - - updated for Factorio 0.14 diff --git a/rso-mod_6.2.25/control.lua b/rso-mod_6.2.25/control.lua deleted file mode 100644 index 8426a07c..00000000 --- a/rso-mod_6.2.25/control.lua +++ /dev/null @@ -1,2173 +0,0 @@ -require "config" -require "util" - -require "resourceconfigs.mainconfig" -require "libs.straight_world" -require "libs.straight_world_platforms" - -local MB=require "libs/metaball" - -local logger = require 'libs/logger' -local l = logger.new_logger() - --- math shortcuts -local floor = math.floor -local abs = math.abs -local cos = math.cos -local sin = math.sin -local pi = math.pi -local max = math.max - -local function round(value) - return math.floor(value + 0.5) -end - -local function debug(str) - if debug_enabled then - l:log(str) - end -end - -function tableLength(tableToCount) - local count = 0 - for _ in pairs(tableToCount) do count = count + 1 end - return count -end - --- cached setting value -local region_size = settings.global["rso-region-size"].value - --- constants -local CHUNK_SIZE = 32 -local REGION_TILE_SIZE = CHUNK_SIZE*region_size -local MIN_BALL_DISTANCE = CHUNK_SIZE/6 -local P_BALL_SIZE_FACTOR = 0.7 -local N_BALL_SIZE_FACTOR = 0.95 -local NEGATIVE_MODIFICATOR = 9973 - -local meta_shapes = nil - -if settings.global["rso-use-donuts"].value then - meta_shapes = {MB.MetaEllipse, MB.MetaSquare, MB.MetaDonut} -else - meta_shapes = {MB.MetaEllipse, MB.MetaSquare} -end - --- local globals -local distance = util.distance -local invalidResources = {} - ---[[ HELPER METHODS ]]-- - -local function normalize(n) -- keep numbers at 32 bits - return floor(n) % 0xffffffff -end - -local function bearing(origin, dest) - -- finds relative angle - local xd = dest.x - origin.x - local yd = dest.y - origin.y - return math.atan2(xd, yd); -end - -local function str2num(s) - local num = 0 - for i=1,s:len() do - num=num + (s:byte(i) - 33)*i - end - return num -end - ---local function rng_for_pos(pos) --- local num = 0 --- local x = pos.x --- local y = pos.y --- --- if x == 0 then x = 0.5 end --- if y == 0 then y = 0.5 end --- if x < 0 then --- x = abs(x) + NEGATIVE_MODIFICATOR --- end --- if y < 0 then --- y = abs(y) + NEGATIVE_MODIFICATOR --- end --- --- return rng* drand.lcg(y, 'mvc'):random(0)*drand.lcg(x, 'nr'):random(0) ---end - -local function rng_for_reg_pos(surfaceIndex, pos) - local x = pos.x - local y = pos.y - - local rng = game.create_random_generator() - - if x == 0 then x = 0.5 end - if y == 0 then y = 0.5 end - - if x < 0 then - x = abs(x) + NEGATIVE_MODIFICATOR - end - if y < 0 then - y = abs(y) + NEGATIVE_MODIFICATOR - end - - rng.re_seed(normalize(x * 65536)) - local valX = rng(65536) - rng.re_seed(normalize(y * 32768)) - local valY = rng(32768) - - local mapSeed = global.surfaces[surfaceIndex].seed - if global.mapSeedOverride then - mapSeed = global.mapSeedOverride - end - local seed = normalize( valX * valY * mapSeed ) - rng.re_seed( seed ) - - debug("Generator for " .. pos.x .. "," .. pos.y .. " created with seed " .. seed .. " x:" .. valX .. " y:" .. valY) - - return rng -end - -local function rng_restricted_angle(restrictions, rng) - local value = rng() - local x_scale, y_scale, angle - local deformX = rng() * 2 - 1 - local deformY = rng() * 2 - 1 - - if restrictions=='xy' then - y_scale=1.0 + deformY*0.5 - x_scale=1.0 + deformX*0.5 - angle = value*pi*2 - elseif restrictions=='x' then - y_scale=1.0 + deformY*0.6 - x_scale=1.0 + deformX*0.6 - angle = value*pi/2 - pi/4 - elseif restrictions=='y' then - y_scale=1.0 + deformY*0.6 - x_scale=1.0 + deformX*0.6 - angle = value*pi/2 + pi/2 - else - y_scale=1.0 + deformY*0.3 - x_scale=1.0 + deformX*0.3 - angle = value*pi*2 - end - - return angle, x_scale, y_scale -end - -local function vary_by_percentage(x, p, rng) - return x + (0.5 - rng())*2*x*p -end - - -local function remove_trees(surface, x, y, x_size, y_size ) - local bb = {{x - x_size, y - y_size}, {x + x_size, y + y_size}} - - for _, entity in pairs(surface.find_entities_filtered{area = bb, type={"tree", "simple-entity"}}) do - if entity.valid then - entity.destroy() - end - end -end - -local function remove_trees_based_on_bb(surface, x, y, boundingBox) - local bb = {{x + boundingBox.left_top.x, y + boundingBox.left_top.y}, {x + boundingBox.right_bottom.x, y + boundingBox.right_bottom.x}} - - for _, entity in pairs(surface.find_entities_filtered{area = bb, type={"tree", "simple-entity"}}) do - if entity.valid then - entity.destroy() - end - end -end - -local function find_intersection(surface, x, y) - -- try to get position in between of valid chunks by probing map - -- this may breaks determinism of generation, but so far it returned on first if - local gt = surface.get_tile - local restriction = '' - if gt(x + CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid then - restriction = 'xy' - elseif gt(x + CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y).valid and gt(x, y + CHUNK_SIZE*2).valid then - x=x + CHUNK_SIZE/2 - y=y + CHUNK_SIZE/2 - restriction = 'xy' - elseif gt(x + CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x + CHUNK_SIZE*2, y).valid and gt(x, y - CHUNK_SIZE*2).valid then - x=x + CHUNK_SIZE/2 - y=y - CHUNK_SIZE/2 - restriction = 'xy' - elseif gt(x - CHUNK_SIZE*2, y + CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y).valid and gt(x, y + CHUNK_SIZE*2).valid then - x=x - CHUNK_SIZE/2 - y=y + CHUNK_SIZE/2 - restriction = 'xy' - elseif gt(x - CHUNK_SIZE*2, y - CHUNK_SIZE*2).valid and gt(x - CHUNK_SIZE*2, y).valid and gt(x, y - CHUNK_SIZE*2).valid then - x=x - CHUNK_SIZE/2 - y=y - CHUNK_SIZE/2 - restriction = 'xy' - elseif gt(x + CHUNK_SIZE*2, y).valid then - x=x + CHUNK_SIZE/2 - restriction = 'x' - elseif gt(x - CHUNK_SIZE*2, y).valid then - x=x - CHUNK_SIZE/2 - restriction = 'x' - elseif gt(x, y + CHUNK_SIZE*2).valid then - y=y + CHUNK_SIZE/2 - restriction = 'y' - elseif gt(x, y - CHUNK_SIZE*2).valid then - y=y - CHUNK_SIZE/2 - restriction = 'y' - end - return x, y, restriction -end - -local function find_random_chunk(r_x, r_y, rng) - local offset_x=rng(region_size) - 1 - local offset_y=rng(region_size) - 1 - local c_x=r_x*REGION_TILE_SIZE + offset_x*CHUNK_SIZE - local c_y=r_y*REGION_TILE_SIZE + offset_y*CHUNK_SIZE - -- debug("Random chunk "..r_x..","..r_y.." coords "..c_x..","..c_y.." offset "..offset_x..","..offset_y) - return c_x, c_y -end - -local function is_same_region(c_x1, c_y1, c_x2, c_y2) - if not (floor(c_x1/REGION_TILE_SIZE) == floor(c_x2/REGION_TILE_SIZE)) then - return false - end - if not (floor(c_y1/REGION_TILE_SIZE) == floor(c_y2/REGION_TILE_SIZE)) then - return false - end - return true -end - -local function find_random_neighbour_chunk(ocx, ocy, rng) - -- somewhat bruteforce and unoptimized - local x_dir = rng(-2,2) - local y_dir = rng(-2,2) - - local ncx = ocx + x_dir * CHUNK_SIZE - local ncy = ocy + y_dir * CHUNK_SIZE - if is_same_region(ncx, ncy, ocx, ocy) then - return ncx, ncy - end - - ncx = ocx - x_dir * CHUNK_SIZE - ncy = ocy - y_dir * CHUNK_SIZE - if is_same_region(ncx, ncy, ocx, ocy) then - return ncx, ncy - end - - ncx = ocx - x_dir * CHUNK_SIZE - ncy = ocy + y_dir * CHUNK_SIZE - if is_same_region(ncx, ncy, ocx, ocy) then - return ncx, ncy - end - - ncx = ocx + x_dir * CHUNK_SIZE - ncy = ocy - y_dir * CHUNK_SIZE - if is_same_region(ncx, ncy, ocx, ocy) then - return ncx, ncy - end - - return ocx, ocy -end - -local function isInStartingArea( surfaceIndex, tileX, tileY ) - - local surfaceData = global.surfaces[surfaceIndex] - - if surfaceData and surfaceData.startingAreas then - for idx, data in pairs( surfaceData.startingAreas ) do - - local adjustedX = ( tileX - data.x ) / REGION_TILE_SIZE - local adjustedY = ( tileY - data.y ) / REGION_TILE_SIZE - if ((adjustedX * adjustedX + adjustedY * adjustedY) <= surfaceData.starting_area_size * surfaceData.starting_area_size) then - return true - end - end - end - - return false -end - -local function distanceFromStartingAreas( surfaceData, regionX, regionY ) - - local minDistance = nil - - for idx, data in pairs( surfaceData.startingAreas ) do - local dist = distance({x = data.x / REGION_TILE_SIZE, y = data.y / REGION_TILE_SIZE},{x = regionX, y = regionY}) - if minDistance ~= nil then - minDistance = math.min(minDistance, dist) - else - minDistance = dist - end - end - - if minDistance == nil then - minDistance = distance({x = 0, y = 0},{x = regionX, y = regionY}) - end - - return minDistance -end - - --- modifies the resource size - only used in endless_resource_mode -local function modify_resource_size(resourceName, resourceSize, startingArea) - - if not startingArea then - resourceSize = math.ceil(resourceSize * settings.global["rso-global-size-mult"].value) - end - - local resourceEntity = game.entity_prototypes[resourceName] - if resourceEntity and resourceEntity.infinite_resource then - - newResourceSize = resourceSize * endless_resource_mode_sizeModifier - - -- make sure it's still an integer - newResourceSize = math.ceil(newResourceSize) - -- make sure it's not 0 - if newResourceSize == 0 then newResourceSize = 1 end - return newResourceSize - else - return resourceSize - end -end - ---[[ SPAWN METHODS ]]-- - -local locationOrder = -{ - { x = 0, y = 0 }, - { x = -1, y = 0 }, - { x = 1, y = 0 }, - { x = 0, y = -1 }, - { x = 0, y = 1 }, - { x = -1, y = -1 }, - { x = 1, y = -1 }, - { x = -1, y = 1 }, - { x = 1, y = 1 } -} - ---[[ entity-field ]]-- -local function spawn_resource_ore(surface, rname, pos, size, richness, startingArea, restrictions, rng) - -- blob generator, centered at pos, size controls blob diameter - restrictions = restrictions or '' - debug("Entering spawn_resource_ore "..rname.." at:"..pos.x..","..pos.y.." size:"..size.." richness:"..richness.." isStart:"..tostring(startingArea).." restrictions:"..restrictions) - - size = modify_resource_size(rname, size, startingArea) - local radius = size / 2 -- to radius - - local p_balls={} - local n_balls={} - local MIN_BALL_DISTANCE = math.min(MIN_BALL_DISTANCE, radius/2) - - local maxPradius = 0 - local outside = { xmin = 1e10, xmax = -1e10, ymin = 1e10, ymax = -1e10 } - local inside = { xmin = 1e10, xmax = -1e10, ymin = 1e10, ymax = -1e10 } - - local function updateRect(rect, x, y, radius) - rect.xmin = math.min(rect.xmin, x - radius) - rect.xmax = math.max(rect.xmax, x + radius) - rect.ymin = math.min(rect.ymin, y - radius) - rect.ymax = math.max(rect.ymax, y + radius) - end - - local function updateRects(x, y, radius, scaleX, scaleY) - local radiusMax = radius * 3 -- arbitrary multiplier - needs to be big enough to not cut any metaballs - updateRect(outside, x, y, radiusMax) - updateRect(inside, x, y, radius) - end - - local function roundRect( rect ) - rect.xmin = round( rect.xmin ) - rect.xmax = round( rect.xmax ) - rect.ymin = round( rect.ymin ) - rect.ymax = round( rect.ymax ) - end - - local function generate_p_ball(rng) - local angle, x_scale, y_scale, x, y, b_radius, shape - angle, x_scale, y_scale=rng_restricted_angle(restrictions, rng) - local dev = radius / 2 + rng() * radius / 4--math.min(CHUNK_SIZE/3, radius*1.5) - local dev_x, dev_y = pos.x, pos.y - x = rng(-dev, dev)+dev_x - y = rng(-dev, dev)+dev_y - if p_balls[#p_balls] and distance(p_balls[#p_balls], {x=x, y=y}) < MIN_BALL_DISTANCE then - local new_angle = bearing(p_balls[#p_balls], {x=x, y=y}) - debug("Move ball old xy @ "..x..","..y) - x=(cos(new_angle)*MIN_BALL_DISTANCE) + x - y=(sin(new_angle)*MIN_BALL_DISTANCE) + y - debug("Move ball new xy @ "..x..","..y) - end - - if #p_balls == 0 then - b_radius = ( 3 * radius / 4 + rng() * radius / 4) -- * (P_BALL_SIZE_FACTOR^#p_balls) - else - b_radius = ( radius / 4 + rng() * radius / 2) -- * (P_BALL_SIZE_FACTOR^#p_balls) - end - - - if #p_balls > 0 then - local tempRect = table.deepcopy(inside) - updateRect(tempRect, x, y, b_radius, x_scale, y_scale) - local rectSize = math.max(tempRect.xmax - tempRect.xmin, tempRect.ymax - tempRect.ymin) - local targetSize = size * 1.25 - debug("Rect size "..rectSize.." targetSize "..targetSize) - if rectSize > targetSize then - local widthLeft = (targetSize - (inside.xmax - inside.xmin)) - local heightLeft = (targetSize - (inside.ymax - inside.ymin)) - local widthMod = math.min(x - inside.xmin, inside.xmax - x) - local heightMod = math.min(y - inside.ymin, inside.ymax - y) - local radiusBackup = b_radius - b_radius = math.min(widthLeft + widthMod, heightLeft + heightMod) - debug("Reduced ball radius from "..radiusBackup.." to "..b_radius.." widthLeft:"..widthLeft.." heightLeft:"..heightLeft.." widthMod:"..widthMod.." heightMod:"..heightMod) - end - end - - if b_radius < 2 and #p_balls == 0 then - b_radius = 2 - end - - if b_radius > 0 then - - maxPradius = math.max(maxPradius, b_radius) - shape = meta_shapes[rng(1,#meta_shapes)] - local radiusText = "" --- log("Index rolled "..index.." shapes amount "..#meta_shapes) - if shape.type == "MetaDonut" then - local inRadius = b_radius / 4 + b_radius / 2 * rng() - radiusText = " inRadius:"..inRadius - p_balls[#p_balls+1] = shape:new(x, y, b_radius, inRadius, angle, x_scale, y_scale, 1.1) - else - p_balls[#p_balls+1] = shape:new(x, y, b_radius, angle, x_scale, y_scale, 1.1) - end - updateRects(x, y, b_radius, x_scale, y_scale) - - debug("P+Ball "..shape.type.." @ "..x..","..y.." radius: "..b_radius..radiusText.." angle: "..math.deg(angle).." scale: "..x_scale..", "..y_scale) - end - end - - local function generate_n_ball(i, rng) - local angle, x_scale, y_scale, x, y, b_radius, shape - angle, x_scale, y_scale=rng_restricted_angle('xy', rng) - if p_balls[i] then - local new_angle = p_balls[i].angle + pi*rng(0,2) + (rng()-0.5)*pi/2 - local dist = p_balls[i].radius - x=(cos(new_angle)*dist) + p_balls[i].x - y=(sin(new_angle)*dist) + p_balls[i].y - angle = p_balls[i].angle + pi/2 + (rng()-0.5)*pi*2/3 - else - x = rng(-radius, radius)+pos.x - y = rng(-radius, radius)+pos.y - end - - if p_balls[i] then - b_radius = (p_balls[i].radius / 4 + rng() * p_balls[i].radius / 2) -- * (N_BALL_SIZE_FACTOR^#n_balls) - else - b_radius = (radius / 4 + rng() * radius / 2) -- * (N_BALL_SIZE_FACTOR^#n_balls) - end - - if b_radius < 1 then - b_radius = 1 - end - - shape = meta_shapes[rng(1,#meta_shapes)] --- log("Index rolled "..index.." shapes amount "..#meta_shapes) - local radiusText = "" - if shape.type == "MetaDonut" then - local inRadius = b_radius / 4 + b_radius / 2 * rng() - radiusText = " inRadius:"..inRadius - n_balls[#n_balls+1] = shape:new(x, y, b_radius, inRadius, angle, x_scale, y_scale, 1.15) - else - n_balls[#n_balls+1] = shape:new(x, y, b_radius, angle, x_scale, y_scale, 1.15) - end - -- updateRects(x, y, b_radius, x_scale, y_scale) -- should not be needed here - only positive ball can generate ore - debug("N-Ball "..shape.type.." @ "..x..","..y.." radius: "..b_radius..radiusText.." angle: "..math.deg(angle).." scale: "..x_scale..", "..y_scale) - end - - local function calculate_force(x,y) - local p_force = 0 - local n_force = 0 - for _,ball in pairs(p_balls) do - p_force = p_force + ball:force(x,y) - end - for _,ball in pairs(n_balls) do - n_force = n_force + ball:force(x,y) - end - local totalForce = 0 - if p_force > n_force then - totalForce = 1 - 1/(p_force - n_force) - end - --debug("Force at "..x..","..y.." p:"..p_force.." n:"..n_force.." result:"..totalForce) - --return (1 - 1/p_force) - n_force - return totalForce - end - - local max_p_balls = 2 - local min_amount = global.surfaces[surface.index].config[rname].min_amount or min_amount - if restrictions == 'xy' then - -- we have full 4 chunks - --radius = radius * 1.5 - --richness = richness * 2 / 3 - --min_amount = min_amount / 3 - max_p_balls = 3 - end - - radius = math.min(radius, 2*CHUNK_SIZE) - - local force - -- generate blobs - for i=1,max_p_balls do - generate_p_ball(rng) - end - - for i=1,rng(1, #p_balls) do - generate_n_ball(i, rng) - end - - local _total = 0 - local oreLocations = {} - local forceTotal = 0 - - roundRect( outside ) - - for y=outside.ymin, outside.ymax do - for x=outside.xmin, outside.xmax do - force = calculate_force(x, y) - if force > 0 then - oreLocations[#oreLocations + 1] = {x = x, y = y, force = force} - forceTotal = forceTotal + force - end - end - end - - local validCount, resOffsetX, resOffsetY, ratio - - local bestRatio = 0 - local bestRatioIndex = -1 - local checkedLocations = {} - - for index, locationOffset in pairs(locationOrder) do - validCount = 0 - resOffsetX = locationOffset.x * CHUNK_SIZE - resOffsetY = locationOffset.y * CHUNK_SIZE - - for _, location in pairs(oreLocations) do - - local newX = location.x + resOffsetX - local newY = location.y + resOffsetY - - if not checkedLocations[newX] then - checkedLocations[newX] = {} - end - if checkedLocations[newX][newY] == nil then - checkedLocations[newX][newY] = surface.can_place_entity{name = rname, position = {x = newX,y = newY}} - end - - if checkedLocations[newX][newY] then - validCount = validCount + 1 - end - end - - ratio = 0 - - if validCount > 0 then - ratio = validCount / #oreLocations - end - - debug("Valid ratio "..ratio.." for index "..index.." offsets "..resOffsetX..","..resOffsetY ) - - if not useResourceCollisionDetection then - break - end - - if ratio > bestRatio then - bestRatio = ratio - bestRatioIndex = index - end - if ratio > resourceCollisionDetectionRatio then - break - end - end - - if resourceCollisionFieldSkip and bestRatio < resourceCollisionDetectionRatioFallback then - validCount = 0 - debug("Cancelled with best ratio "..bestRatio.." for index "..bestRatioIndex ) - else - resOffsetX = locationOrder[bestRatioIndex].x * CHUNK_SIZE - resOffsetY = locationOrder[bestRatioIndex].y * CHUNK_SIZE - validCount = floor( bestRatio * #oreLocations ) - debug("Selected ratio "..bestRatio.." for index "..bestRatioIndex.." offsets "..resOffsetX..","..resOffsetY ) - end - - if validCount > 0 then - local removeTrees = settings.global["rso-remove-trees"].value - local revealResources = settings.global["rso-reveal-spawned-resources"].value - local revealChunks = {} - revealChunks.minX = 1e9 - revealChunks.minY = 1e9 - revealChunks.maxX = -1e9 - revealChunks.maxY = -1e9 - - local rectSize = ((inside.xmax - inside.xmin) + (inside.ymax - inside.ymin)) / 2 - - local sizeMultiplier = rectSize ^ 0.6 - local minSize = richness * 5 * sizeMultiplier - local maxSize = richness * 10 * sizeMultiplier - local approxDepositSize = rng(minSize, maxSize) - - approxDepositSize = approxDepositSize - validCount * min_amount - - if approxDepositSize < 0 then - approxDepositSize = 100 * validCount - end - - local forceFactor = approxDepositSize / forceTotal - - -- don't create very dense resources in starting area - another field will be generated - if startingArea and forceFactor > 4000 then - forceFactor = rng(3000, 4000) - end --- elseif forceFactor > 25000 then -- limit size of one resource pile --- forceFactor = rgen:random(20000, 25000) --- end - - debug( "Force total:"..forceTotal.." sizeMin:"..minSize.." sizeMax:"..maxSize.." factor:"..forceFactor.." location#:"..validCount.." rectSize:"..rectSize.." sizeMultiplier:"..sizeMultiplier) - local richnessMultiplier = settings.global["rso-global-richness-mult"].value - - if startingArea then - richnessMultiplier = settings.global["rso-starting-richness-mult"].value - end --- if game.players[1] then --- game.players[1].print("Spawning "..rname.." total amount "..(approxDepositSize + validCount * min_amount)*richnessMultiplier) --- end - - -- infinite ore handling for Angels Ores mod - local infiniteOrePresent = false - local infiniteOreName = "infinite-"..rname - local minimumInfiniteOreAmount = nil - local spawnName = rname - - if game.entity_prototypes[infiniteOreName] then - infiniteOrePresent = true - minimumInfiniteOreAmount = game.entity_prototypes[infiniteOreName].minimum_resource_amount - end - - if startingArea and not settings.global["rso-infinite-ores-in-start-area"].value then - infiniteOrePresent = false - end - - local infiniteResourceSpawnThreshold = settings.global["rso-infinite-ore-threshold"].value - - for _,location in pairs(oreLocations) do - - local spawnX = location.x + resOffsetX - local spawnY = location.y + resOffsetY - - if checkedLocations[spawnX][spawnY] then - - local amount = floor(( forceFactor * location.force + min_amount ) * richnessMultiplier) - - if amount > 1e9 then - amount = 1e9 - end - - _total = _total + amount - - spawnName = rname - if infiniteOrePresent and location.force > infiniteResourceSpawnThreshold then - spawnName = infiniteOreName - if minimumInfiniteOreAmount and amount < minimumInfiniteOreAmount then - amount = minimumInfiniteOreAmount - end --- debug("Infinite spawn: "..location.force) - end - - if amount > 0 then - surface.create_entity{name = spawnName, - position = {spawnX, spawnY}, - force = game.forces.neutral, - amount = amount, - raise_built = true} - - if removeTrees then - remove_trees(surface, spawnX, spawnY, 1, 1) - end - - revealChunks.minX = math.min( revealChunks.minX, spawnX ) - revealChunks.minY = math.min( revealChunks.minY, spawnY ) - revealChunks.maxX = math.max( revealChunks.maxX, spawnX ) - revealChunks.maxY = math.max( revealChunks.maxY, spawnY ) - end - end - end - - if revealResources then - for _,force in pairs( game.forces )do - force.chart( surface, {{x = revealChunks.minX, y = revealChunks.minY}, {x = revealChunks.maxX, y = revealChunks.maxY}}) - end - end - - -- special handling for homeworld - sand resource has no graphics and is simply marked as sand tiles - if rname == "sand-source" then - local tileTable = {} - for _,location in pairs(oreLocations) do - if location.valid then - table.insert(tileTable,{ name = "sand-1", position = {location.x + resOffsetX,location.y + resOffsetY}}) - end - end - if #tileTable > 1 then - surface.set_tiles(tileTable) - end - end - end - - if debug_enabled then --- debug("Search time "..scanProfiler.." spawn time "..placeProfiler) - debug("Total amount: ".._total) ---* for _,v in pairs(_a) do - --output a nice ASCII map ---* debug(table.concat(v)) ---* end - debug("Leaving spawn_resource_ore") - end - return _total -end - ---[[ entity-liquid ]]-- -local function spawn_resource_liquid(surface, rname, pos, size, richness, startingArea, restrictions, rng) - restrictions = restrictions or '' - debug("Entering spawn_resource_liquid "..rname.." "..pos.x..","..pos.y.." "..size.." "..richness.." "..tostring(startingArea).." "..restrictions) - local _total = 0 - local max_radius = rng() * CHUNK_SIZE / 2 + CHUNK_SIZE - --[[ - if restrictions == 'xy' then - -- we have full 4 chunks - max_radius = floor(max_radius*1.5) - size = floor(size*1.2) - end - ]]-- - -- don't reduce amount of liquids - they are already infinite - -- size = modify_resource_size(size) - - richness = ( 0.75 + rng() / 2 ) * richness * size - - local resourceEntity = game.entity_prototypes[rname] - - local total_share = 0 - local avg_share = 1/size - local angle = rng()*pi*2 - local saved = 0 - local removeTrees = settings.global["rso-remove-trees"].value - local richnessMultiplier = settings.global["rso-global-richness-mult"].value - local spawnCount = 0 - - if startingArea then - richnessMultiplier = settings.global["rso-starting-richness-mult"].value - end - - while total_share < 1 do - local new_share = vary_by_percentage(avg_share, 0.25, rng) - if size == 1 then - new_share = 1 - end - - if new_share + total_share > 1 then - new_share = 1 - total_share - end - total_share = new_share + total_share - if new_share < avg_share/10 then - -- too small - break - end - local amount = floor(richness*new_share) + saved - - --if amount >= game.entity_prototypes[rname].minimum then - if amount >= global.surfaces[surface.index].config[rname].minimum_amount then - saved = 0 - - local spawned = false - local x, y - - for try=1,15 do - local dist = rng()*(max_radius - max_radius*0.1) * try / 15 - angle = angle + pi/4 + rng()*pi/2 - x = pos.x + cos(angle)*dist - y = pos.y + sin(angle)*dist - if surface.can_place_entity{name = rname, position = {x,y}} then - debug("@ "..x..","..y.." amount: "..amount.." new_share: "..new_share.." try: "..try) - amount = floor(amount * richnessMultiplier) - - if amount > 1e9 then - amount = 1e9 - end - - _total = _total + amount - - if amount > 0 then - surface.create_entity{name = rname, - position = {x,y}, - force = game.forces.neutral, - amount = amount, - direction = rng(4), - raise_built = true} - if removeTrees then - remove_trees(surface, x, y, 4, 4) - end - end - - if spawnCount == 0 then - debug("Switched center location to "..x..","..y) - pos.x = x - pos.y = y - end - - spawnCount = spawnCount + 1 - spawned = true - break - end - end - - if not startingArea and not spawned then -- we don't want to make ultra rich nodes in starting area - failing to make them will add second spawn in different location - local entities = surface.find_entities_filtered{area = {{x - 5, y - 5}, {x + 5, y + 5}}, name=rname} - if entities and #entities > 0 then - for k, ent in pairs(entities) do - local newAmount = ent.amount + floor(amount/#entities) - if newAmount > 1e9 then - newAmount = 1e9 - end - - ent.amount = newAmount - _total = _total + newAmount - end - break - end - end - else - saved = amount - debug("Not placed "..rname.." amount "..amount.." minimum "..global.surfaces[surface.index].config[rname].minimum_amount.. " total share "..total_share.." placed till now ".._total) - end - end - debug("Total amount: ".._total.." in "..spawnCount.." fields") - debug("Leaving spawn_resource_liquid") - return _total -end - -local spawnerTable = nil - -local function initSpawnerTable() - if spawnerTable == nil then - spawnerTable = {} - for _, prototype in pairs(game.entity_prototypes) do - if prototype.type == "unit-spawner" then - spawnerTable[prototype.name] = prototype - end - end --- log("Spawner table "..serpent.block(spawnerTable)) - end -end - -local function computeAllotments(entityTable, regionDistance) - - local allotment_max = 0 - - if not entityTable then - return allotment_max - end - - for k,v in pairs(entityTable) do - if v then - if not v.min_distance or regionDistance > v.min_distance then - local allotment = v.allotment - if v.allotment_distance_factor then - local dist_factor = regionDistance^v.allotment_distance_factor - if v.max_probability_distance_factor then - dist_factor = max(dist_factor, v.max_probability_distance_factor) - end - allotment = allotment * dist_factor - end - v.allotment_range ={min = allotment_max, max = allotment_max + allotment} - allotment_max = allotment_max + allotment - else - v.allotment_range = nil - end - end - end - - return allotment_max -end - -local function spawn_entity_helper(surface, prototype, x, y, config) - position = {x, y} - local collides = surface.entity_prototype_collides(prototype, position, true) - if collides then - remove_trees_based_on_bb(surface, x, y, prototype.map_generator_bounding_box) - end - - collides = surface.entity_prototype_collides(prototype, position, true) - - if not collides then - surface.create_entity{name=prototype.name, position={x, y}, force=game.forces[config.force], spawn_decorations=true, raise_built = true} - end - - return not collides -end - -local function spawn_entity(surface, ent, r_config, x, y, rng) - if not settings.global["rso-biter-generation"].value then return end - local size = rng(r_config.size.min, r_config.size.max) - - local _total = 0 - local r_distance = distanceFromStartingAreas(global.surfaces[surface.index], x/REGION_TILE_SIZE, y/REGION_TILE_SIZE) - local surfaceData = global.surfaces[surface.index] - - if surfaceData and surfaceData.starting_area_size then - r_distance = r_distance - surfaceData.starting_area_size - if r_distance < 0.5 then - r_distance = 0.5 - end - end - - local distanceMultiplier = math.min(r_distance^r_config.size_per_region_factor, 5) - if r_config.size_per_region_factor then - size = size*distanceMultiplier - end - - size = size * settings.global["rso-enemy-base-size"].value - - debug("Entering spawn_entity "..ent.." "..x..","..y.." size:"..size.." dist:"..r_distance) - - local maxAttemptCount = 16 - local distancePerBatch = 0.25 - - initSpawnerTable() - - local spawnerName = nil - local spawnString = "" - local failCount = 0 - - for i=1,size do - if failCount > 5 and failCount / (i - 1) > 0.75 then - break - end - - local baseSpawned = false - local baseX, baseY - - for attempt = 1, maxAttemptCount do - local max_d = floor(CHUNK_SIZE * (0.5 + (attempt/4) * distancePerBatch)) - baseX = x + rng(0, floor(max_d)) - max_d/2 - baseY = y + rng(0, floor(max_d)) - max_d/2 - - if surface.get_tile(baseX, baseY).valid then - - spawnerName = nil - local allotment_max = computeAllotments(r_config.bases, r_distance) - - if allotment_max == 0 then - log("No enemy base definition found") - return - end - - local base_type = rng(0, allotment_max) - for base_name,v in pairs(r_config.bases) do - if v and v.allotment_range and base_type >= v.allotment_range.min and base_type <= v.allotment_range.max then - spawnerName = base_name - break - end - end - - if spawnerName and spawnerTable[spawnerName] then - if spawn_entity_helper(surface, spawnerTable[spawnerName], baseX, baseY, r_config) then - _total = _total + 1 - debug(spawnerName.." @ "..baseX..","..baseY.." placed on "..attempt.." attempt") - spawnString = spawnString.."+" - baseSpawned = true - break; - else - if attempt == maxAttemptCount then - debug(spawnerName.." @ "..baseX..","..baseY.." failed to spawn") - failCount = failCount + 1 - spawnString = spawnString.."-" - end - end - else - game.players[1].print("Entity "..spawnerName.." doesn't exist") - end - end - end - - if r_config.sub_spawn_probability and baseSpawned then - local sub_spawn_prob = r_config.sub_spawn_probability*math.min(r_config.sub_spawn_max_distance_factor, r_config.sub_spawn_distance_factor^r_distance) - if rng() < sub_spawn_prob then - - local allotment_max = computeAllotments(r_config.sub_spawns, r_distance) - - for i=1,(rng(r_config.sub_spawn_size.min, r_config.sub_spawn_size.max)*distanceMultiplier) do - - local sub_type = rng(0, allotment_max) - for sub_spawn,v in pairs(r_config.sub_spawns) do - if v.allotment_range and sub_type >= v.allotment_range.min and sub_type <= v.allotment_range.max then - local turretPrototype = game.entity_prototypes[sub_spawn] - if turretPrototype then - for attempt = 1, maxAttemptCount do - local max_d = floor((attempt/4) * CHUNK_SIZE * distancePerBatch) - local s_x = baseX + rng(max_d) - max_d/2 - local s_y = baseY + rng(max_d) - max_d/2 - remove_trees(surface, s_x, s_y, v.clear_range[1], v.clear_range[2]) - if spawn_entity_helper(surface, turretPrototype, s_x, s_y, r_config) then - debug("Rolled subspawn "..sub_spawn.." @ "..s_x..","..s_x.." after "..attempt.." attempts") - break; - else - if attempt == maxAttemptCount then - debug("Rolling subspawn "..sub_spawn.." @ "..s_x..","..s_x.." failed") - end - end - end - end - break - end - end - end - end - end - end - - debug("Total entity amount: ".._total.." fails "..failCount.." size "..size.." spawn map "..spawnString) -end - ---[[ EVENT/INIT METHODS ]]-- - -local function spawn_starting_resources( surface, index ) - - local surfaceData = global.surfaces[surface.index] - if surfaceData.startingAreas[index].spawned then return end - - -- skip spawning if starting area is to small or starting areas are disabled - if global.disableStartingArea or surfaceData.starting_area_size < 0.1 then - surfaceData.startingAreas[index].spawned = true - return - end - - local position = surfaceData.startingAreas[index] - local config = surfaceData.config - - -- generate chunks for starting area - it shouldn't matter at 0,0 but it's needed if it has been moved - local areaRadius = surfaceData.starting_area_size * REGION_TILE_SIZE - surface.request_to_generate_chunks(position, math.ceil(areaRadius/CHUNK_SIZE)) - surface.force_generate_chunk_requests() - - local rng = rng_for_reg_pos( surface.index, position ) - local status = true - for resName,resConfig in pairs(config) do - if resConfig.starting and resConfig.valid and resConfig.allotment > 0 then - local prob = rng() -- probability that this resource is spawned - debug("starting resource probability rolled "..prob) - if resConfig.starting.probability > 0 and prob <= resConfig.starting.probability then - local total = 0 - local radius = 50 - local maxRadius = 301 - maxRadius = maxRadius * surface.map_gen_settings.starting_area - local min_threshold = 0 - local richness = resConfig.starting.richness - - if resConfig.type == "resource-ore" then - min_threshold = richness * rng(5, 10) -- lets make sure that there is at least 5-10 times starting richness ore at start - elseif resConfig.type == "resource-liquid" then - min_threshold = richness * 0.5 * resConfig.starting.size - end - - while (radius < maxRadius) and (total < min_threshold) do - - radius = radius + 25 - - local angle = rng() * pi * 2 - local dist = radius / 2 + rng(radius / 2) --- debug("Starting offset "..dist.." at "..angle) - local pos = { x = floor(cos(angle) * dist) + position.x, y = floor(sin(angle) * dist) + position.y } - if resConfig.type == "resource-ore" then - total = total + spawn_resource_ore(surface, resName, pos, resConfig.starting.size, richness, true, null, rng) - elseif resConfig.type == "resource-liquid" then - total = total + spawn_resource_liquid(surface, resName, pos, resConfig.starting.size, richness, true, null, rng) - end - - if richness == resConfig.starting.richness and total > 0 then - richness = resConfig.starting.richness / 4 - end - end - if total < min_threshold then - status = false - end - end - end - end - - surfaceData.startingAreas[index].spawned = true -end - -local function modifyMinMax(value, mod) - value.min = round( value.min * mod ) - value.max = round( value.max * mod ) -end - -local function build_config_data(surface) - local mapGenSettings = nil - - if not ignoreMapGenSettings then - mapGenSettings = surface.map_gen_settings - end - local autoPlaceSettings = nil - if mapGenSettings then - autoPlaceSettings = mapGenSettings.autoplace_controls - end - - local configIndexed = {} - local surfaceData = global.surfaces[surface.index] - local config = surfaceData.config - - debug("Building config for " .. surface.name .. " index " .. surface.index) - -- build additional indexed array to the associative array - for res_name, resConf in pairs(config) do - if resConf.valid then -- only add valid resources - - local settingsForResource = nil - local isEntity = (resConf.type == "entity") - local addResource = true - - local autoplaceName = res_name - - if resConf.autoplace_name then - autoplaceName = resConf.autoplace_name - end - - if autoPlaceSettings then - settingsForResource = autoPlaceSettings[autoplaceName] - end - - if settingsForResource then - local allotmentMod = settingsForResource.frequency - local sizeMod = settingsForResource.size - local richnessMod = settingsForResource.richness - - if allotmentMod then - if isEntity then - resConf.absolute_probability = resConf.absolute_probability * allotmentMod - debug("Entity chance modified to "..resConf.absolute_probability) - else - resConf.allotment = round( resConf.allotment * allotmentMod ) - end - else - log("Null allotment mod for "..res_name.." value "..settingsForResource.frequency) - end - - if sizeMod ~= nil and sizeMod == 0 then - addResource = false - --log("Null size mod for "..res_name.." value "..settingsForResource.size) - end - - if sizeMod ~= nil then - modifyMinMax(resConf.size, sizeMod) - - if resConf.starting then - if sizeMod == 0 then - resConf.starting = nil - else - resConf.starting.size = round( resConf.starting.size * sizeMod ) - end - end - - if isEntity then - if resConf.sub_spawn_size then - modifyMinMax(resConf.sub_spawn_size, sizeMod) - end - modifyMinMax(resConf.spawns_per_region, sizeMod) - end - end - - if richnessMod then - if resConf.type == "resource-ore" then - resConf.richness = round( resConf.richness * richnessMod ) - elseif resConf.type == "resource-liquid" then - modifyMinMax(resConf.richness, richnessMod) - end - - if resConf.starting then - resConf.starting.richness = round( resConf.starting.richness * richnessMod ) - end - else - log("Null richness mod for "..res_name.." value "..settingsForResource.richness) - end - - if allotmentMod and richnessMod and sizeMod then - debug(res_name .. " allotment mod " .. allotmentMod .. " size mod " .. sizeMod .. " richness mod " .. richnessMod ) - end - end - - if not settings.global["rso-oil-in-start-area"].value and resConf.type == "resource-liquid" then - resConf.starting = nil - end - - if not settings.global["rso-ore-in-start-area"].value and resConf.type == "resource-ore" then - resConf.starting = nil - end - - if addResource then - -- this should be a limited table most likely not full config copy - local res_conf = table.deepcopy(resConf) - res_conf.name = res_name - - if res_conf.multi_resource and settings.global["rso-multi-resource-active"].value then - local new_list = {} - for sub_res_name, allotment in pairs(res_conf.multi_resource) do - if config[sub_res_name] and config[sub_res_name].valid then - new_list[#new_list+1] = {name = sub_res_name, allotment = allotment} - end - end - table.sort(new_list, function(a, b) return a.name < b.name end) - res_conf.multi_resource = new_list - else - res_conf.multi_resource_chance = nil - end - configIndexed[#configIndexed + 1] = res_conf - end - end - end - - table.sort(configIndexed, function(a, b) return a.name < b.name end) - - local pr=0 - local maxAllotment = 0 - for index,v in pairs(configIndexed) do - if v.along_resource_probability then - v.along_resource_probability_range={min=pr, max=pr+v.along_resource_probability} - pr = pr + v.along_resource_probability - end - if v.allotment and v.allotment > 0 then - v.allotment_range={min = maxAllotment, max = maxAllotment + v.allotment} - maxAllotment = maxAllotment + v.allotment - end - end - - surfaceData.maxAllotment = maxAllotment - surfaceData.starting_area_size = starting_area_size - - if mapGenSettings and mapGenSettings.starting_area then - surfaceData.starting_area_size = starting_area_size * mapGenSettings.starting_area - debug("Starting area "..surfaceData.starting_area_size.." for surface "..surface.index) - end - - surfaceData.configIndexed = configIndexed -end - -local function checkConfigForInvalidResources(surfaceIndex) - --make sure that every resource in the config is actually available. - --call this function, before the auxiliary config is prebuilt! - - local prototypes = game.entity_prototypes - local config = global.surfaces[surfaceIndex].config - - for resourceName, resourceConfig in pairs(config) do - if prototypes[resourceName] or resourceConfig.type == "entity" then - resourceConfig.valid = true - else - -- resource was in config, but it doesn't exist in game files anymore - mark it invalid - resourceConfig.valid = false - - --table.insert(invalidResources, "Resource not available: " .. resourceName) - debug("Resource not available: " .. resourceName) - log("Resource not available: " .. resourceName) - end - - if resourceConfig.valid and resourceConfig.type ~= "entity" then - if prototypes[resourceName].autoplace_specification == nil then - resourceConfig.valid = false - debug("Resource "..resourceName.." invalidated - autoplace not present") - end - end - end -end - -local function checkForBobEnemies() - if game.entity_prototypes["bob-biter-spawner"] and game.entity_prototypes["bob-spitter-spawner"] then - global.useBobEntity = true - else - global.useBobEntity = false - end -end - -local function roll_region(surface, c_x, c_y) - --in what region is this chunk? - local r_x=floor(c_x/REGION_TILE_SIZE) - local r_y=floor(c_y/REGION_TILE_SIZE) - local r_data = nil - --don't spawn stuff in starting area - if isInStartingArea( surface.index, c_x, c_y ) then - return false - end - - local surfaceData = global.surfaces[surface.index] - local configIndexed = surfaceData.configIndexed - local regions = surfaceData.regions - - if regions[r_x] and regions[r_x][r_y] then - r_data = regions[r_x][r_y] - else - --if this chunk is the first in its region to be generated - if not regions[r_x] then regions[r_x] = {} end - regions[r_x][r_y]={} - r_data = regions[r_x][r_y] - local rng = rng_for_reg_pos(surface.index, {x=r_x,y=r_y}) - - local rollCount = math.ceil(#configIndexed / 10) - 1 -- 0 based counter is more convenient here - rollCount = math.min(rollCount, 3) - - local resourceSetting = settings.global["rso-resource-chance"].value - - local maxAllotment = surfaceData.maxAllotment - - -- rolle ores only if they are present (it will fail if allotment is 0) - if maxAllotment > 0 then - for rollNumber = 0,rollCount do - - local resourceChance = resourceSetting - rollNumber * 0.1 - --absolute chance to spawn resource - local abct = rng() - debug("Rolling resource "..abct.." against "..resourceChance.." roll "..rollNumber) - if abct <= resourceChance then - local res_type=rng(1, maxAllotment) - for index,v in pairs(configIndexed) do - if v.allotment_range and ((res_type >= v.allotment_range.min) and (res_type <= v.allotment_range.max)) then - debug("Rolled primary resource "..v.name.." with roll="..res_type.." @ "..r_x..","..r_y) - local num_spawns = 0 - if v.spawns_per_region.min == v.spawns_per_region.max then - num_spawns = v.spawns_per_region.min - else - num_spawns = rng(v.spawns_per_region.min, v.spawns_per_region.max) - end - local last_spawn_coords = {} - local along_ - for i=1,num_spawns do - local c_x, c_y = find_random_chunk(r_x, r_y, rng) - - -- even if initial chunk is outside region might overlap with starting area - need to recheck here if rolled coords are outside - if not isInStartingArea( surface.index, c_x, c_y ) then - if not r_data[c_x] then r_data[c_x] = {} end - if not r_data[c_x][c_y] then r_data[c_x][c_y] = {} end - local c_data = r_data[c_x][c_y] - c_data[#c_data+1]={v.name, rollNumber} - last_spawn_coords[#last_spawn_coords+1] = {c_x, c_y} - debug("Rolled primary chunk "..v.name.." @ "..c_x..","..c_y.." reg: "..r_x..","..r_y.." actual reg: "..floor(c_x/REGION_TILE_SIZE)..","..floor(c_y/REGION_TILE_SIZE)) - -- Along resource spawn, only once - if i == 1 then - local am_roll = rng() - for index,vv in pairs(configIndexed) do - if vv.along_resource_probability_range and am_roll >= vv.along_resource_probability_range.min and am_roll <= vv.along_resource_probability_range.max then - c_data = r_data[c_x][c_y] - c_data[#c_data+1]={vv.name, rollNumber} - debug("Rolled along "..vv.name.." @ "..c_x.."."..c_y.." reg: "..r_x..","..r_y) - end - end - end - end - end - -- roll multiple resources in same region - local deep=0 - if #last_spawn_coords > 0 then - while v.multi_resource_chance and rng() <= v.multi_resource_chance*(multi_resource_chance_diminish^deep) do - debug("Multi roll chance "..v.multi_resource_chance.." with diminish chance "..v.multi_resource_chance*(multi_resource_chance_diminish^deep)) - deep = deep + 1 - local multiAllotmentMax = 0 - for index,sub_res in pairs(v.multi_resource) do multiAllotmentMax = multiAllotmentMax + sub_res.allotment end - - local res_type = 1 -- with allotment of 1 we don't need to roll rng and rng will complain when it's range is 0 - if multiAllotmentMax > 1 then - res_type = rng(1, multiAllotmentMax) - end - local min=0 - for _, sub_res in pairs(v.multi_resource) do - if (res_type >= min) and (res_type <= sub_res.allotment + min) then - local last_coords = last_spawn_coords[rng(1, #last_spawn_coords)] - local c_x, c_y = find_random_neighbour_chunk(last_coords[1], last_coords[2], rng) -- in same region as primary resource chunk - if not r_data[c_x] then r_data[c_x] = {} end - if not r_data[c_x][c_y] then r_data[c_x][c_y] = {} end - local c_data = r_data[c_x][c_y] - c_data[#c_data+1]={sub_res.name, deep} - debug("Rolled multiple "..sub_res.name..":"..deep.." with res_type="..res_type.." @ "..c_x..","..c_y.." reg: "..r_x..","..r_y) - break - else - min = min + sub_res.allotment - end - end - end - end - break - end - end - - end - end - end - - -- roll for absolute_probability - this rolls the enemies - for index,v in pairs(configIndexed) do - if v.absolute_probability then - local prob_factor = 1 - if v.probability_distance_factor then - prob_factor = math.min(v.max_probability_distance_factor, v.probability_distance_factor^distance({x=0,y=0},{x=r_x,y=r_y})) - end - local abs_roll = rng() - if abs_roll 0 and richness > richness_max) then --- richness = math.min(richness, richness_max) --- end --- if (size_max > 0 and size > size_max) then --- size = math.min(size, size_max) --- end - - spawn_resource_ore(surface, resource, {x=c_center_x,y=c_center_y}, size, richness, false, restriction, rng) - elseif r_config.type=="resource-liquid" then - local richFactor = 0; - if r_config.useOreScaling then - richFactor = calculateFactor(dist, richness_distance_factor) - else - richFactor = calculateFactor(dist, fluid_richness_distance_factor) - end - debug("Resource "..resource.." distance "..dist.." factors (size, richness) "..sizeFactor..","..richFactor) - local size=rng(r_config.size.min, r_config.size.max) * (multi_resource_size_factor^deep) * sizeFactor - if r_config.size.min == 1 and r_config.size.max == 1 then - size = 1 - end - local richness=rng(r_config.richness.min, r_config.richness.max) * richFactor * (multi_resource_richness_factor^deep) - local restriction = '' - c_center_x, c_center_y, restriction = find_intersection(surface, c_center_x, c_center_y) - spawn_resource_liquid(surface, resource, {x=c_center_x,y=c_center_y}, size, richness, false, restriction, rng) - elseif r_config.type=="entity" and not global.skipEnemies then - spawn_entity(surface, resource, r_config, c_center_x, c_center_y, rng) - end - else - debug("Resource access failed for " .. resource) - game.players[1].print("Resource access failed for " .. resource) - end - end - r_data[c_x][c_y] = nil - - if tableLength(r_data[c_x]) == 0 then - r_data[c_x] = nil - end - - --l:dump() - end -end - -local function clear_chunk(surface, tileX, tileY, ent_list) - - local _count = 0 - for _, obj in pairs(surface.find_entities_filtered{area = {{tileX, tileY}, {tileX + CHUNK_SIZE, tileY + CHUNK_SIZE}}, name=ent_list}) do - if obj.valid then - obj.destroy() - _count = _count + 1 - end - end - - if not global.skipEnemies then - -- remove biters - for _, obj in pairs(surface.find_entities_filtered{area = {{tileX, tileY}, {tileX + CHUNK_SIZE, tileY + CHUNK_SIZE}}, type="unit"}) do - -- and (string.find(obj.name, "-biter", -6) or string.find(obj.name, "-spitter", -8)) - if obj.valid and obj.force.name == "enemy" then - obj.destroy() - _count = _count + 1 - end - end - end - - if _count > 0 then debug("Destroyed - ".._count) end -end - -local function prepareEntityList(surfaceIndex) - local entityList = {} - local configIndexed = global.surfaces[surfaceIndex].configIndexed - - for _,v in pairs(configIndexed) do - entityList[#entityList + 1] = v.name - local infiniteOreName = "infinite-".. v.name - - if game.entity_prototypes[infiniteOreName] then - entityList[#entityList + 1] = infiniteOreName - end - - if not global.skipEnemies then - if v.bases then - for base, config in pairs(v.bases) do - entityList[#entityList + 1] = base - end - end - - if v.sub_spawns then - for ent,vv in pairs(v.sub_spawns) do - entityList[#entityList + 1] = ent - end - end - end - end - - return entityList -end - -local function regenerateSurface(surface, clearOnly) - - local surfaceData = global.surfaces[surface.index] - surfaceData.regions = {} - - local entityList = prepareEntityList(surface.index) - - for chunk in surface.get_chunks() do - local tileX = chunk.x * CHUNK_SIZE - local tileY = chunk.y * CHUNK_SIZE - - if not isInStartingArea( surface.index, tileX, tileY ) then - clear_chunk(surface, tileX, tileY, entityList) - end - end - - if not clearOnly then - for chunk in surface.get_chunks() do - - local tileX = chunk.x * CHUNK_SIZE - local tileY = chunk.y * CHUNK_SIZE - - if not isInStartingArea( surface.index, tileX, tileY ) then - roll_region(surface, tileX, tileY) - roll_chunk(surface, tileX, tileY) - - if useStraightWorldMod then - straightWorld(surface, {x = tileX, y = tileY}, {x = tileX + CHUNK_SIZE, y = tileY + CHUNK_SIZE}) - end - end - end - end - if clearOnly then - log("Ore clear done") - else - log("Ore regeneration done") - end -end - -local function regenerate_everything(clearOnly, noEnemies) - global.skipEnemies = noEnemies - - for index, surfaceData in pairs(global.surfaces) do - local surface = game.surfaces[index] - regenerateSurface(surface, clearOnly) - end - - global.skipEnemies = nil -end - -local function clearStartingArea( surface, pos ) - - local startingAreaTilesSize = math.ceil( global.surfaces[surface.index].starting_area_size * REGION_TILE_SIZE ) - - local chunkPosX = math.floor( pos.x/CHUNK_SIZE ) * CHUNK_SIZE - local chunkPosY = math.floor( pos.y/CHUNK_SIZE ) * CHUNK_SIZE - local entityList = prepareEntityList(surface.index) - - for posX = chunkPosX - startingAreaTilesSize, chunkPosX + startingAreaTilesSize, CHUNK_SIZE do - for posY = chunkPosY - startingAreaTilesSize, chunkPosY + startingAreaTilesSize, CHUNK_SIZE do - clear_chunk(surface, posX, posY, entityList) - end - end -end - -local function extendRect(leftTop, bottomRight) - leftTop.x = leftTop.x - CHUNK_SIZE / 2 - leftTop.y = leftTop.y - CHUNK_SIZE / 2 - bottomRight.x = bottomRight.x + CHUNK_SIZE - bottomRight.x = bottomRight.x + CHUNK_SIZE - - return leftTop, bottomRight -end - -local function printResourceProbability(player) - -- prints the probability of each resource - how likely it is to be spawned in percent - -- this ignores the multi resource chance - local surfaceData = global.surfaces[player.surface.index] - local maxAllotment = surfaceData.maxAllotment - player.print("Max allotment"..string.format("%.1f",maxAllotment)) - debug("Max allotment"..string.format("%.1f",maxAllotment)) - local sanityCheckAllotment = 0 - for index,v in pairs(surfaceData.configIndexed) do - if v.type ~= "entity" then -- ignore enemies - they don't have allotment set - if v.allotment then - local resProbability = (v.allotment/maxAllotment) * 100 - sanityCheckAllotment = sanityCheckAllotment + v.allotment - player.print("Resource: "..v.name.." Prob: "..string.format("%.1f",resProbability)) - debug("Resource: "..v.name.." Prob: "..string.format("%.1f",resProbability)) - else - player.print("Resource: "..v.name.." Allotment not set") - debug("Resource: "..v.name.." Allotment not set") - end - end - end - - player.print("SanityCheck Allotment: "..string.format("%.1f", sanityCheckAllotment)) - debug("SanityCheck Allotment: "..string.format("%.1f", sanityCheckAllotment)) -end - -local IgnoredResources = -{ - ["deep_oil"] = true, - ["bi-ground-steam"] = true, - ["bi-ground-sulfuric-acid"] = true, - ["fossil-roots"] = true, --- ["termal"] = true, - ["termal2"] = true, - ["tibGrowthNode"] = true, - ["natural-gas-1"] = true, - ["natural-gas-2"] = true, - ["natural-gas-3"] = true, - ["natural-gas-4"] = true, - ["lambent-nil-phosphorite"] = true -} - -local function IsIgnoreResource(ResourcePrototype) - if string.find( ResourcePrototype.name, "underground-" ) ~= nil then - return true - end - if string.find( ResourcePrototype.name, "infinite-" ) ~= nil then - return true - end - -- Cargo ships mod - it takes care of spawning it by itself but leaves it's autoplace in it so needs to be ignored - if IgnoredResources[ResourcePrototype.name] then - return true - end - if ResourcePrototype.autoplace_specification == nil then - return true - end - if ResourcePrototype.autoplace_specification and ResourcePrototype.autoplace_specification.tile_restriction then - return true - end - return false -end - -local function checkForUnusedResources(player) - -- find all resources and check if we have it in our config - -- if not, tell the user that this resource won't be spawned (with RSO) - local surfaceData = global.surfaces[player.surface.index] - - for prototypeName, prototype in pairs(game.entity_prototypes) do - if prototype.type == "resource" then - if not surfaceData.config[prototypeName] then - if IsIgnoreResource(prototype) then -- ignore resources which are not autoplace - debug("Resource not configured but ignored (non-autoplace): "..prototypeName) - else - player.print("The resource "..prototypeName.." is not configured in RSO. It won't be spawned!") - debug("Resource not configured: "..prototypeName) - end - else - -- these are the configured ones - if IsIgnoreResource(prototype) then - debug("Configured resource (but it is in ignore list - will be used!): " .. prototypeName) - else - debug("Configured resource: " .. prototypeName) - end - end - end - end -end - -local function printInvalidResources(player) - -- prints all invalid resources which were found when the config was processed. - for _, message in pairs(invalidResources) do - player.print(message) - end -end - -local function loadAndPrepareConfig(surface) - global.surfaces[surface.index].config = loadResourceConfig() - checkConfigForInvalidResources(surface.index) - build_config_data(surface) -end - -local function updateSurfaceConfig(surface, justCreated, surfaceData) - - if not surfaceData then - global.surfaces[surface.index] = global.surfaces[surface.index] or {} - surfaceData = global.surfaces[surface.index] - end - - surfaceData.seed = surface.map_gen_settings.seed - - if not surfaceData.regions then - surfaceData.regions = {} - end - - if not surfaceData.startingAreas then - surfaceData.startingAreas = {} - - local startingPoints = surface.map_gen_settings.starting_points - if startingPoints and surface.index == game.surfaces['nauvis'].index then - for _, startingPoint in pairs(startingPoints) do - local startX = 0 - local startY = 0 - - startX = startingPoint.x - startY = startingPoint.y - - table.insert( surfaceData.startingAreas, { x = startX, y = startY, spawned = false } ) - - if not justCreated then - surfaceData.startingAreas[1].spawned = true - end - end - end - end - - loadAndPrepareConfig(surface) - - if config_log_enabled then - log("***** Config for surface "..surface.index) - log(serpent.block(global.surfaces[surface.index].config)) - log(serpent.block(global.surfaces[surface.index].configIndexed)) - end -end - -local function initConfig() - if not global.surfaces then - global.surfaces = {} - - local nauvisSurfaceData = global.surfaces[game.surfaces['nauvis'].index] - - if not nauvisSurfaceData then - nauvisSurfaceData = {} - - local justCreated = true - - if global.regions then - nauvisSurfaceData.regions = global.regions - global.regions = nil - justCreated = false - else - if game.tick > 10 then - justCreated = false - end - end - - global.surfaces[game.surfaces['nauvis'].index] = nauvisSurfaceData - - updateSurfaceConfig(game.surfaces['nauvis'], justCreated) - end - end -end - -local function updateConfig() - - initConfig() - - for surfaceIndex, surfaceData in pairs(global.surfaces) do - local surface = game.surfaces[surfaceIndex] - if surface then - updateSurfaceConfig(surface, false, surfaceData) - else - game.surfaces[surfaceIndex] = nil - end - end - - for _,surface in pairs(game.surfaces) do - if not global.surfaces[surface.index] then - updateSurfaceConfig(surface, false) - end - end - - checkForBobEnemies() - log("RSO: Updated resource configurations") -end - -local function localGenerateChunk( event ) - --changes by xiaoHong - ignore surfaces interface - 11/29/2015 - if global.ignoreSurfaceNames and global.ignoreSurfaceNames[event.surface.name] then - return - end - - local c_x = event.area.left_top.x - local c_y = event.area.left_top.y - - roll_region(event.surface, c_x, c_y) - roll_chunk(event.surface, c_x, c_y) - - if useStraightWorldMod then - straightWorld(event.surface, event.area.left_top, event.area.right_bottom) - elseif game.active_mods["building-platform"] and useStraightWorldPlatforms then - straightWorldPlatforms(event.surface, event.area.left_top, event.area.right_bottom) - end - -end - -local function init() - - updateConfig() - - spawn_starting_resources(game.surfaces['nauvis'], 1 ) - - if not global.disableEventHandler then - script.on_event(defines.events.on_chunk_generated, localGenerateChunk) - end -end - -script.on_init(init) -script.on_load(function() - if not global.disableEventHandler then - script.on_event(defines.events.on_chunk_generated, localGenerateChunk) - end -end) - -script.on_configuration_changed(updateConfig) - -script.on_event(defines.events.on_runtime_mod_setting_changed, function(event) - if event.setting == "rso-region-size" then - game.players[event.player_index].print("Warning: Region size changed. Dynamic size changes are not supported - recommend regenerating of resources to use new region size") - region_size = settings.global["rso-region-size"].value - REGION_TILE_SIZE = CHUNK_SIZE*region_size - elseif event.setting == "rso-enemy-chance" then - for surfaceIndex, surfaceData in pairs(global.surfaces) do - for index,v in pairs(surfaceData.configIndexed) do - if v.absolute_probability then - v.absolute_probability = settings.global["rso-enemy-chance"].value - end - end - end - game.players[event.player_index].print("Enemy spawn chance update - it will be applied to new regions.") - end - -end) - - -script.on_event(defines.events.on_player_created, function(event) - - local player = game.players[event.player_index] - - if not global.surfaces[player.surface.index] then - updateSurfaceConfig(player.surface, false) - end - - checkForUnusedResources(player) - printInvalidResources(player) - - if debug_enabled then - - printResourceProbability(player) - - if useBobEntity then - player.print("RSO: BobEnemies found") - end - - if debug_items_enabled then - player.character.insert{name = "coal", count = 1000} - player.character.insert{name = "raw-wood", count = 100} - player.character.insert{name = "car", count = 1} - player.character.insert{name = "car", count = 1} - player.character.insert{name = "car", count = 1} - - if game.item_prototypes["resource-monitor"] then - player.character.insert{name = "resource-monitor", count = 1} - end - end - end - - l:dump() -end) - -script.on_event(defines.events.on_surface_created, function(event) - - local surface = game.surfaces[event.surface_index] - - if global.ignoreSurfaceNames and global.ignoreSurfaceNames[surface.name] then - return - end - - initConfig() - - updateSurfaceConfig(surface, true) -end) - -script.on_event(defines.events.on_surface_deleted, function(event) - global.surfaces[event.surface_index] = nil -end) - -script.on_event(defines.events.on_surface_cleared, function(event) - if global.surfaces[event.surface_index] then - global.surfaces[event.surface_index].regions = {} - end -end) - -function regenerateCommand(parameters) - local skipEnemies = false - - if parameters and parameters.parameter then - if parameters.parameter == "noenemies" then - skipEnemies = true - end - end - - regenerate_everything(false, skipEnemies) -end - -function clearCommand(parameters) - local skipEnemies = false - - if parameters and parameters.parameter then - if parameters.parameter == "noenemies" then - skipEnemies = true - end - end - - regenerate_everything(true, skipEnemies) -end - -function seedCommand(parameters) - - global.mapSeedOverride = nil - - if parameters and parameters.parameter then - global.mapSeedOverride = tonumber(parameters.parameter) - end -end - - -commands.add_command("rso-regenerate", "", regenerateCommand) -commands.add_command("rso-clear", "", clearCommand) -commands.add_command("rso-override-seed", "", seedCommand) - - -remote.add_interface("RSO", { - -- remote.call("RSO", "regenerate", true/false, surface) - regenerate = function(new_seed, surface) - regenerateCommand(nil) - end, - - clear = function() - clearCommand(nil) - end, - - --changes by xiaoHong - ignore surfaces interface - 11/29/2015 - -- remote.call("RSO", "ignoreSurface", "name-of-surface") - ignoreSurface = function(surfaceName) - if type(surfaceName) ~= "string" then - game.players[1].print("RSO ignoreSurface interface: surfaceName should be a string") - end - if debug_enabled then - game.players[1].print("RSO ignoring surface " .. surfaceName .. " for generation") - end - global.ignoreSurfaceNames = global.ignoreSurfaceNames or {} - global.ignoreSurfaceNames[surfaceName] = true - end, - - addStartLocation = function(pos, player) - local outputPlayer = nil - - if game.player then - outputPlayer = game.player - end - - if player then - outputPlayer = player - end - - if not ( pos and pos.x and pos.y ) then - log("Invalid parameters for new start location - please use following format: {x=0, y=0}") - return - end - - local surface = nil - if outputPlayer then - surface = outputPlayer.surface - else - surface = game.surfaces['nauvis'] - end - - local surfaceData = global.surfaces[surface.index] - - local radius = surfaceData.starting_area_size * REGION_TILE_SIZE - - for idx, startingPos in pairs( surfaceData.startingAreas ) do - if distance( startingPos, pos ) < 2 * radius then - log("Creation of starting area on "..surface.name.." failed - to close to starting area at "..startingPos.x..","..startingPos.y) - return - end - end - - log("Creating new starting area on "..surface.name.." at "..pos.x..","..pos.y) - - clearStartingArea( surface, pos ) - - pos.spawned = false; - - table.insert( surfaceData.startingAreas, pos ) - - spawn_starting_resources( surface, #surfaceData.startingAreas ) - --- if outputPlayer then --- outputPlayer.force.chart(outputPlayer.surface, {{x = pos.x - radius, y = pos.y - radius}, {x = pos.x + radius, y = pos.y + radius}}) --- end - end, - - saveLog = function() - --debug(serpent.block(global.surfaces[1])) - l:dump() - end, - - regenConfig = function() - for index, surfaceData in pairs(global.surfaces) do - loadAndPrepareConfig(game.surfaces[index]) - end - end, - - disableChunkHandler = function() - if not global.disableEventHandler then - script.on_event(defines.events.on_chunk_generated, nil) - end - global.disableEventHandler = true - end, - - disableStartingArea = function() - global.disableStartingArea = true - end, - - generateChunk = function(event) - localGenerateChunk(event) - end, - - resetGeneration = function(surface, ignoreStartingAreas) - if surface == nil then - return - end - - local surfaceData = global.surfaces[surface.index] - - updateSurfaceConfig(surface, false, surfaceData) - - surfaceData.regions = {} - - if not ignoreStartingAreas then - for index, startingArea in pairs(surfaceData.startingAreas) do - startingArea.spawned = false - spawn_starting_resources(surface, index) - end - end - end, - - runTest = function(areaSizeX, areaSizeY) - game.player.character = god - local sizeX = areaSizeX or 2000 - local sizeY = areaSizeY or 2000 - game.forces.player.chart(game.player.surface, {left_top = {x = -sizeX, y = -sizeY}, - right_bottom = {x = sizeX, y = sizeY}}) - game.speed = 2 - game.player.cheat_mode = true - - if game.player.force.technologies["resource-monitoring"] then - game.player.force.technologies["resource-monitoring"].researched = true - end - end, - - isInStartingArea = function(surfaceIndex, tileX, tileY) - return isInStartingArea(surfaceIndex, tileX, tileY) - end, -}) - ---Time for the debug code. If any (not global.) globals are written to at this point, an error will be thrown. ---eg, x = 2 will throw an error because it's not global.x or local x (by Mylon to check for global variables that might cause desyncs) ---setmetatable(_G, { --- __newindex = function(_, n, v) --- log("Desync warning: attempt to write to undeclared var " .. n) - -- game.print("Attempt to write to undeclared var " .. n) --- global[n] = v; --- end, --- __index = function(_, n) --- return global[n]; --- end ---}) diff --git a/rso-mod_6.2.25/data-final-fixes.lua b/rso-mod_6.2.25/data-final-fixes.lua deleted file mode 100644 index 6471dfe8..00000000 --- a/rso-mod_6.2.25/data-final-fixes.lua +++ /dev/null @@ -1,37 +0,0 @@ -require("config") -require("prototypes.prototype_utils") - -local IgnoredDataResources = -{ - ["fossil-roots"] = true, - ["tibGrowthNode"] = true, - ["lambent-nil-phosphorite"] = true, --- ["termal"] = true, --- ["termal2"] = true -} - - -for _, resource in pairs(data.raw.resource) do - if not IgnoredDataResources[resource.name] and resource.autoplace and resource.autoplace.tile_restriction == nil then - resetRichness(resource) - end -end - -if not settings.startup["rso-vanilla-biter-generation"].value then - - for _, spawner in pairs(data.raw["unit-spawner"]) do - removeProbability(spawner) - end - - for _, turret in pairs(data.raw.turret) do - if turret.subgroup == "enemies" then - removeProbability(turret) - end - end -end - -if debug_items_enabled then - data.raw["car"]["car"].max_health = 0x8000000 - data.raw["ammo"]["basic-bullet-magazine"].magazine_size = 1000 - data.raw["ammo"]["basic-bullet-magazine"].ammo_type.action[1].action_delivery[1].target_effects[2].damage.amount = 5000 -end \ No newline at end of file diff --git a/rso-mod_6.2.25/resourceconfigs/bzchlorine.lua b/rso-mod_6.2.25/resourceconfigs/bzchlorine.lua deleted file mode 100644 index 869460ac..00000000 --- a/rso-mod_6.2.25/resourceconfigs/bzchlorine.lua +++ /dev/null @@ -1,14 +0,0 @@ -function fillBzchlorineConfig(config) - - config["salt"] = { - type="resource-ore", - - allotment=60, - spawns_per_region={min=1, max=1}, - richness=10000, - size={min=15, max=25}, - min_amount=300, - - starting={richness=2000, size=13, probability=1}, - } -end diff --git a/rusty-locale/changelog.txt b/rusty-locale/changelog.txt new file mode 100644 index 00000000..ee82c4f9 --- /dev/null +++ b/rusty-locale/changelog.txt @@ -0,0 +1,91 @@ +--------------------------------------------------------------------------------------------------- +Version: 1.0.16 +Date: 18. 12. 2020 + Changes: + - Added linked-belt to the prototype tree +--------------------------------------------------------------------------------------------------- +Version: 1.0.15 +Date: 10. 12. 2020 + Bugfixes: + - Add linked-container to the prototype tree (https://mods.factorio.com/mod/rusty-locale/discussion/5fd08956d965482a86caf782) +--------------------------------------------------------------------------------------------------- +Version: 1.0.14 +Date: 23. 11. 2020 + Changes: + - Updated for factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 1.0.13 +Date: 17. 08. 2020 + Bugfixes: + - Ignore root icon_mipmaps if the icons are defined as icons rather than icon +--------------------------------------------------------------------------------------------------- +Version: 1.0.12 +Date: 15. 08. 2020 + Bugfixes: + - Handle icon mipmaps properly +--------------------------------------------------------------------------------------------------- +Version: 1.0.11 +Date: 14. 08. 2020 + Bugfixes: + - 1.0 compatibility for new types +--------------------------------------------------------------------------------------------------- +Version: 1.0.10 +Date: 15. 06. 2020 + Bugfixes: + - Levelled technology locale is now handled properly (https://github.com/theRustyKnife/rusty-locale/pull/3) +--------------------------------------------------------------------------------------------------- +Version: 1.0.9 +Date: 17. 05. 2020 + Bugfixes: + - Fixed that recipes.parse_product didn't copy the product correctly (https://mods.factorio.com/mod/rusty-locale/discussion/5ec03b5a5a04b0000cf7de71). +--------------------------------------------------------------------------------------------------- +Version: 1.0.8 +Date: 15. 04. 2020 + Bugfixes: + - Fixed that icons.of_recipe errored whenever the recipe didn't specify it's own icons, regardless of whether it should inherit them from products. +--------------------------------------------------------------------------------------------------- +Version: 1.0.7 +Date: 07. 04. 2020 + Changes: + - Better validation of icons format, meaning that querying prototypes for icons should either return valid icons or throw an error, instead of returning invalid or partial icons definitions. + - icons.of() and prototypes.find() should now handle nil parameters properly (https://github.com/theRustyKnife/rusty-locale/issues/2) +--------------------------------------------------------------------------------------------------- +Version: 1.0.6 +Date: 21. 03. 2020 + Changes: + - icons now throws an error when no valid icons definition was found. An additional argument has been added to the functions that changes this behavior to return nil instead. +--------------------------------------------------------------------------------------------------- +Version: 1.0.5 +Date: 08. 01. 2020 + Bugfixes: + - Fixed that place_result wasn't validated correctly + Changes: + - Added prototypes.find_by_name + - prototypes.find now takes a third argument - silent. This means that by default the function will throw an error if the prototype isn't found now. +--------------------------------------------------------------------------------------------------- +Version: 1.0.4 +Date: 08. 01. 2020 + Bugfixes: + - Added the missing "loader-1x1" prototype type to the type hierarchy +--------------------------------------------------------------------------------------------------- +Version: 1.0.3 +Date: 03. 01. 2020 + Bugfixes: + - Fixed that "burner-generator" base was wrong +--------------------------------------------------------------------------------------------------- +Version: 1.0.2 +Date: 03. 01. 2020 + Bugfixes: + - Added the missing "burner-generator" prototype type to the type hierarchy +--------------------------------------------------------------------------------------------------- +Version: 1.0.1 +Date: 25. 01. 2020 + Bugfixes: + - Fixed that recipes.parse_product didn't return type for some formats (#1) + Changes: + - locale.of and icons.of can now be called with a name and type instead of a full prototype +--------------------------------------------------------------------------------------------------- +Version: 1.0.0 +Date: 22. 01. 2020 + Other: + - Initial release diff --git a/rusty-locale/icons.lua b/rusty-locale/icons.lua new file mode 100644 index 00000000..4cf96d4d --- /dev/null +++ b/rusty-locale/icons.lua @@ -0,0 +1,73 @@ +local prototypes = require '__rusty-locale__.prototypes' +local recipes = require '__rusty-locale__.recipes' + + +local _M = {} + + +function _M.of_generic(prototype, silent) +--- Get icons for the given prototype, assuming it's in the generic format. + if prototype.icons then + local icons = {} + for i, icon in pairs(prototype.icons) do + if icon.icon and icon.icon_size then icons[i] = icon + else + local icon_size = icon.icon_size or prototype.icon_size + if not icon_size or not icon.icon then + if silent then return nil; end + error(("%s/%s doesn't specify icons correctly"):format(prototype.type, prototype.name)) + end + + local new = {} + for k, v in pairs(icon) do new[k] = v; end + new.icon_size = icon_size + new.icon_mipmaps = new.icon_mipmaps + icons[i] = new + end + end + return icons + end + + if not prototype.icon or not prototype.icon_size then + if silent then return nil; end + error(("%s/%s doesn't specify icons correctly"):format(prototype.type, prototype.name)) + end + return {{ + icon = prototype.icon, + icon_size = prototype.icon_size, + icon_mipmaps = prototype.icon_mipmaps, + }} +end + +function _M.of_recipe(prototype, silent) +--- Get icons for the given recipe prototype. + local icons = _M.of_generic(prototype, true) + if icons then return icons; end + + local product + if prototype.normal ~= nil then product = recipes.partial.get_main_product(prototype.normal) + else product = recipes.partial.get_main_product(prototype); end + + if not product then + if silent then return nil; end + error(("%s/%s doesn't specify icons correctly"):format(prototype.type, prototype.name)) + end + + return product and _M.of(product.name, product.type, silent) +end + + +function _M.of(prototype, ptype, silent) +--- Get the icons of the given prototype. + if type(ptype) == 'string' then prototype = prototypes.find(prototype, ptype) + elseif prototype == nil then + if silent then return nil; end + error "Can't get icons of nil prototype" + elseif type(ptype) == 'boolean' then silent = ptype; end + + if prototypes.inherits(prototype.type, 'recipe') then return _M.of_recipe(prototype, silent) + else return _M.of_generic(prototype, silent); end +end + + +return _M diff --git a/rusty-locale/info.json b/rusty-locale/info.json new file mode 100644 index 00000000..66495859 --- /dev/null +++ b/rusty-locale/info.json @@ -0,0 +1,9 @@ +{ + "name": "rusty-locale", + "version": "1.0.16", + "factorio_version": "1.1", + "title": "Rusty's Locale Utilities", + "author": "TheRustyKnife", + "description": "A set of helper functions for resolving proper localised names and descriptions of prototypes, including recipes and items. There are also utilities for resolving prototype icons, because why not?", + "dependencies": [] +} diff --git a/rusty-locale/locale.lua b/rusty-locale/locale.lua new file mode 100644 index 00000000..95629fba --- /dev/null +++ b/rusty-locale/locale.lua @@ -0,0 +1,87 @@ +local util = require '__rusty-locale__.util' +local prototypes = require '__rusty-locale__.prototypes' +local recipes = require '__rusty-locale__.recipes' + + +local _M = {} + + +local function remove_trailing_level(prototype_name) + -- locale key for levelled technologies is the technology name with the level removed + return prototype_name:gsub("-%d+$", "") +end + +local function key_of(prototype, type, locale_type) +--- Get the default locale key for the given prototype and key type (name or description). + if not locale_type then locale_type = prototypes.inherits(prototype.type, _M.localised_types); end + local prototype_name = prototype.name + if locale_type == 'technology' then + prototype_name = remove_trailing_level(prototype_name) + end + return {('%s-%s.%s'):format(locale_type, type, prototype_name)} +end + + +--- These are the types that support locale (including all of their descendants). +_M.localised_types = {} +for type, _ in pairs(prototypes.descendants('prototype-base')) do _M.localised_types[type] = true; end + + +function _M.of_generic(prototype, locale_type) +--- Get the locale of the given prototype, assuming it's one of the types that use the generic format. + return util.resolver { + name = function() return prototype.localised_name or key_of(prototype, 'name', locale_type); end, + description = function() return prototype.localised_description or key_of(prototype, 'description', locale_type); end, + } +end + +function _M.of_item(prototype) +--- Get the locale of the given item. + return util.resolver { + place_result = function() + return prototype.place_result and prototype.place_result ~= '' and _M.of_generic(prototypes.find(prototype.place_result, 'entity'), 'entity') or false + end, + placed_as_equipment_result = function() + return prototype.placed_as_equipment_result and _M.of_generic(prototypes.find(prototype.placed_as_equipment_result, 'equipment'), 'equipment') or false + end, + + name = function(self) + return prototype.localised_name + or self.place_result and self.place_result.name + or self.placed_as_equipment_result and self.placed_as_equipment_result.name + or key_of(prototype, 'name', 'item') + end, + description = function(self) return prototype.localised_description or key_of(prototype, 'description', 'item'); end, + } +end + +function _M.of_recipe(prototype) +--- Get the locale of the given recipe. + return util.resolver { + main_product = function() + local product = recipes.get_main_product(prototype) + return product and _M.of(prototypes.find(product.name, product.type)) or {} + end, + + name = function(self) return prototype.localised_name or self.main_product.name or key_of(prototype, 'name', 'recipe'); end, + description = function(self) return prototype.localised_description or key_of(prototype, 'description', 'recipe'); end, + } +end + + +local custom_resolvers = { + ['recipe'] = _M.of_recipe, + ['item'] = _M.of_item, +} +function _M.of(prototype, type) +--- Get the locale of the given prototype. + if type ~= nil then prototype = prototypes.find(prototype, type); end + local locale_type = prototypes.inherits(prototype.type, _M.localised_types) + assert(locale_type, ("%s doesn't support localization"):format(prototype.type)) + + local resolver = custom_resolvers[locale_type] or _M.of_generic + return resolver(prototype, locale_type) +end + + +return _M diff --git a/rusty-locale/prototypes.lua b/rusty-locale/prototypes.lua new file mode 100644 index 00000000..f70e85bb --- /dev/null +++ b/rusty-locale/prototypes.lua @@ -0,0 +1,60 @@ +local hierarchy = require '__rusty-locale__.type-hierarchy' + + +local _M = {} + + +local function is_known(type) + return hierarchy.top_down[type] or hierarchy.bottom_up[type] +end + + +function _M.descendants(type) +--- Get the tree of descendants, rooted at the given type, or nil if the type doesn't exist. + if type == nil then return hierarchy.bottom_up; end + if not is_known(type) then log(("Checking descendants of unknown type `%s`!"):format(type)) end + return _M.descendants(hierarchy.top_down[type])[type] +end + +local function inherits(type, bases) + if type == nil then return nil; end + if bases[type] then return type; end + return inherits(hierarchy.top_down[type], bases) +end +function _M.inherits(t, bases) +--- Check if type is a descendant either a single base prototype or any of several prototypes provided as a table {string: boolean}. +--- This returns the type that matched, or nil of none did. + if type(bases) ~= 'table' then return _M.inherits(t, {[bases] = true}); end + if not is_known(t) then log(("Checking inheritance of unknown type `%s`!"):format(t)) end + return inherits(t, bases) +end + +function _M.find(name, type, silent) +--- Find the prototype with the given name, whose type inherits from the given type, or nil if it doesn't exist. + if type == nil then error "find needs a type - use find_by_name to search by name only instead."; end + if name == nil then + if silent then return nil; end + error "Can't find a prototype with nil name" + end + + for t, prototypes in pairs(data.raw) do + local prototype = prototypes[name] + if prototype and _M.inherits(t, type) then return prototype; end + end + if silent then return nil; end + + local existing_types = {} + for t, _ in pairs(_M.find_by_name(name)) do table.insert(existing_types, t); end + error(("No prototype called `%s` found for type `%s`, these prototypes with the name exist: %s\nPlease report this to https://mods.factorio.com/mod/rusty-locale") + :format(name, type, serpent.line(existing_types))) +end + +function _M.find_by_name(name) +--- Find all prototypes with the given name. Returns a table of {type: prototype}. + local results = {} + for t, prototypes in pairs(data.raw) do results[t] = prototypes[name]; end + return results +end + + +return _M diff --git a/rusty-locale/recipes.lua b/rusty-locale/recipes.lua new file mode 100644 index 00000000..ee881fd3 --- /dev/null +++ b/rusty-locale/recipes.lua @@ -0,0 +1,51 @@ +local _M = {partial = {}} + + +function _M.parse_product(product) +--- Get the given product in the `{name = ..., type = ..., ...}` format. + if type(product) == 'string' then return {name = product, type = 'item'}; end + local product = table.deepcopy(product) + if not product.type then product.type = 'item'; end + if not product.name then product.name = product[1]; end + if not product.amount then product.amount = product[2]; end + product[1] = nil + product[2] = nil + return product +end + +function _M.partial.find_product(recipe, name) +--- Get the full product definition for a product with the given name from the given recipe part. + if recipe.results then + for _, p in pairs(recipe.results) do + local product = _M.parse_product(p) + if product.name == name then return product; end + end + elseif recipe.result == name then return _M.parse_product(name); end + return nil +end + +function _M.partial.get_main_product(recipe) +--- Get the main product of the given recipe part. + if recipe.main_product == '' then return nil + elseif recipe.main_product ~= nil then return _M.partial.find_product(recipe, recipe.main_product) + elseif recipe.results then + if table_size(recipe.results) == 1 then return _M.parse_product(recipe.results[1]) + else return nil; end + elseif recipe.result then return _M.parse_product(recipe.result); end + return nil +end + + +function _M.get_main_product(recipe) +--- Get the main product of the given recipe. +--- For normal+expensive definitions, the product is only returned if it's the same for both. + if recipe.normal and recipe.expensive then + local normal, expensive = _M.partial.get_main_product(recipe.normal), _M.partial.get_main_product(recipe.expensive) + if normal and expensive and normal.name == expensive.name and normal.type == expensive.type then return normal + else return nil; end + end + return _M.partial.get_main_product(recipe.normal or recipe.expensive or recipe) +end + + +return _M diff --git a/rusty-locale/thumbnail.png b/rusty-locale/thumbnail.png new file mode 100644 index 00000000..8c423c89 Binary files /dev/null and b/rusty-locale/thumbnail.png differ diff --git a/rusty-locale/type-hierarchy.lua b/rusty-locale/type-hierarchy.lua new file mode 100644 index 00000000..7f2340d5 --- /dev/null +++ b/rusty-locale/type-hierarchy.lua @@ -0,0 +1,432 @@ +-- As of 1.0.0 +return { + top_down = { + entity = 'prototype-base', + equipment = 'prototype-base', + accumulator = 'entity-with-health', + ['active-defense-equipment'] = 'equipment', + ammo = 'item', + ['ammo-turret'] = 'turret', + armor = 'tool', + arrow = 'entity', + ['artillery-turret'] = 'entity-with-health', + ['assembling-machine'] = 'crafting-machine', + ['battery-equipment'] = 'equipment', + beacon = 'entity-with-health', + ['belt-immunity-equipment'] = 'equipment', + blueprint = 'selection-tool', + ['blueprint-book'] = 'item-with-inventory', + boiler = 'entity-with-health', + ['burner-generator'] = 'entity-with-health', + capsule = 'item', + car = 'vehicle', + ['cargo-wagon'] = 'rolling-stock', + ['combat-robot'] = 'flying-robot', + ['construction-robot'] = 'robot-with-logistic-interface', + container = 'entity-with-health', + corpse = 'entity', + ['crafting-machine'] = 'entity-with-health', + ['curved-rail'] = 'rail', + decorative = 'entity', + ['deconstruction-item'] = 'selection-tool', + ['electric-pole'] = 'entity-with-health', + ['electric-turret'] = 'turret', + ['energy-shield-equipment'] = 'equipment', + ['entity-with-health'] = 'entity', + explosion = 'entity', + fish = 'entity-with-health', + ['fluid-wagon'] = 'rolling-stock', + ['flying-text'] = 'entity', + ['flying-robot'] = 'entity-with-health', + furnace = 'crafting-machine', + generator = 'entity-with-health', + ['generator-equipment'] = 'equipment', + gun = 'item', + ['heat-pipe'] = 'entity-with-health', + inserter = 'entity-with-health', + ['item-entity'] = 'entity', + ['item-with-inventory'] = 'item-with-label', + ['item-with-label'] = 'item', + lab = 'entity-with-health', + lamp = 'entity-with-health', + ['land-mine'] = 'entity-with-health', + locomotive = 'rolling-stock', + ['logistic-container'] = 'container', + ['logistic-robot'] = 'robot-with-logistic-interface', + market = 'entity-with-health', + ['mining-drill'] = 'entity-with-health', + ['mining-tool'] = 'tool', + module = 'item', + ['movement-bonus-equipment'] = 'equipment', + ['night-vision-equipment'] = 'equipment', + ['optimized-particle'] = 'prototype-base', + pipe = 'entity-with-health', + ['pipe-to-ground'] = 'entity-with-health', + character = 'entity-with-health', + ['player-port'] = 'entity-with-health', + ['programmable-speaker'] = 'entity-with-health', + projectile = 'entity', + pump = 'entity-with-health', + radar = 'entity-with-health', + rail = 'entity-with-health', + ['rail-remnants'] = 'corpse', + ['rail-signal'] = 'rail-signal-base', + ['rail-signal-base'] = 'entity-with-health', + reactor = 'entity-with-health', + ['repair-tool'] = 'tool', + resource = 'entity', + roboport = 'entity-with-health', + ['robot-with-logistic-interface'] = 'flying-robot', + ['rocket-defense'] = 'entity-with-health', + ['selection-tool'] = 'item-with-label', + ['smart-container'] = 'container', + smoke = 'entity', + ['solar-panel'] = 'entity-with-health', + ['solar-panel-equipment'] = 'equipment', + ['spidertron-remote'] = 'item', + ['spider-vehicle'] = 'vehicle', + ['spider-leg'] = 'entity-with-health', + splitter = 'transport-belt-connectable', + sticker = 'entity', + ['straight-rail'] = 'rail', + tool = 'item', + ['train-stop'] = 'entity-with-health', + ['rolling-stock'] = 'vehicle', + ['transport-belt'] = 'transport-belt-connectable', + ['transport-belt-connectable'] = 'entity-with-health', + tree = 'entity-with-health', + turret = 'entity-with-health', + ['underground-belt'] = 'transport-belt-connectable', + unit = 'entity-with-health', + ['unit-spawner'] = 'entity-with-health', + vehicle = 'entity-with-health', + wall = 'entity-with-health', + ['build-entity-achievement'] = 'achievement', + ['construct-with-robots-achievement'] = 'achievement', + ['deconstruct-with-robots-achievement'] = 'achievement', + ['deliver-by-robots-achievement'] = 'achievement', + ['dont-build-entity-achievement'] = 'achievement', + ['dont-craft-manually-achievement'] = 'achievement', + ['dont-use-entity-in-energy-production-achievement'] = 'achievement', + ['finish-the-game-achievement'] = 'achievement', + ['group-attack-achievement'] = 'achievement', + ['kill-achievement'] = 'achievement', + ['player-damaged-achievement'] = 'achievement', + ['produce-achievement'] = 'achievement', + ['produce-per-hour-achievement'] = 'achievement', + ['research-achievement'] = 'achievement', + ['train-path-achievement'] = 'achievement', + ['arithmetic-combinator'] = 'combinator', + combinator = 'entity-with-health', + ['constant-combinator'] = 'entity-with-health', + ['decider-combinator'] = 'combinator', + ['fluid-turret'] = 'turret', + gate = 'entity-with-health', + loader = 'transport-belt-connectable', + ['loader-1x1'] = 'loader', + ['linked-belt'] = 'transport-belt-connectable', + ['offshore-pump'] = 'entity-with-health', + ['power-switch'] = 'entity-with-health', + ['rail-chain-signal'] = 'rail-signal-base', + ['roboport-equipment'] = 'equipment', + ['rocket-silo'] = 'assembling-machine', + ['storage-tank'] = 'entity-with-health', + ['item-with-entity-data'] = 'item', + ['simple-entity'] = 'entity-with-health', + ['item-with-tags'] = 'item-with-label', + ['entity-ghost'] = 'entity', + ['electric-energy-interface'] = 'entity-with-health', + ['leaf-particle'] = 'optimized-particle', + ['flame-thrower-explosion'] = 'explosion', + ['character-corpse'] = 'entity', + ['smoke-with-trigger'] = 'smoke', + ['simple-entity-with-force'] = 'entity-with-health', + ['simple-entity-with-owner'] = 'entity-with-health', + ['rocket-silo-rocket-shadow'] = 'entity', + ['rocket-silo-rocket'] = 'entity', + ['item-request-proxy'] = 'entity', + ['deconstructible-tile-proxy'] = 'entity', + fire = 'entity', + ['combat-robot-count'] = 'achievement', + ['tile-ghost'] = 'entity', + ['particle-source'] = 'entity', + stream = 'entity', + ['rail-planner'] = 'item', + beam = 'entity', + ['artillery-projectile'] = 'entity', + ['infinity-container'] = 'logistic-container', + ['artillery-flare'] = 'optimized-particle', + cliff = 'entity', + ['artillery-wagon'] = 'rolling-stock', + ['infinity-pipe'] = 'pipe', + ['copy-paste-tool'] = 'selection-tool', + ['highlight-box'] = 'entity', + ['speech-bubble'] = 'entity', + ['heat-interface'] = 'entity-with-health', + ['upgrade-item'] = 'selection-tool', + ['noise-layer'] = 'prototype-base', + ['utility-sprites'] = 'prototype-base', + ['noise-expression'] = 'prototype-base', + ['trivial-smoke'] = 'prototype-base', + item = 'prototype-base', + ['item-subgroup'] = 'prototype-base', + ['item-group'] = 'prototype-base', + recipe = 'prototype-base', + fluid = 'prototype-base', + ['virtual-signal'] = 'prototype-base', + ['autoplace-control'] = 'prototype-base', + tile = 'prototype-base', + ['optimized-decorative'] = 'prototype-base', + ['damage-type'] = 'prototype-base', + ['ammo-category'] = 'prototype-base', + ['fuel-category'] = 'prototype-base', + ['recipe-category'] = 'prototype-base', + ['resource-category'] = 'prototype-base', + ['module-category'] = 'prototype-base', + ['equipment-grid'] = 'prototype-base', + ['equipment-category'] = 'prototype-base', + technology = 'prototype-base', + shortcut = 'prototype-base', + achievement = 'prototype-base', + tutorial = 'prototype-base', + ['custom-input'] = 'prototype-base', + ['linked-container'] = 'entity-with-health', + }, + bottom_up = { + ['prototype-base'] = { + entity = { + ['entity-with-health'] = { + accumulator = {}, + turret = { + ['ammo-turret'] = {}, + ['electric-turret'] = {}, + ['fluid-turret'] = {}, + }, + ['artillery-turret'] = {}, + ['crafting-machine'] = { + ['assembling-machine'] = { + ['rocket-silo'] = {}, + }, + furnace = {}, + }, + beacon = {}, + boiler = {}, + ['burner-generator'] = {}, + vehicle = { + car = {}, + ['rolling-stock'] = { + ['cargo-wagon'] = {}, + ['fluid-wagon'] = {}, + locomotive = {}, + ['artillery-wagon'] = {}, + }, + ['spider-vehicle'] = {} + }, + ['flying-robot'] = { + ['combat-robot'] = {}, + ['robot-with-logistic-interface'] = { + ['construction-robot'] = {}, + ['logistic-robot'] = {}, + }, + }, + container = { + ['logistic-container'] = { + ['infinity-container'] = {}, + }, + ['smart-container'] = {}, + }, + rail = { + ['curved-rail'] = {}, + ['straight-rail'] = {}, + }, + ['electric-pole'] = {}, + fish = {}, + generator = {}, + ['heat-pipe'] = {}, + inserter = {}, + lab = {}, + lamp = {}, + ['land-mine'] = {}, + market = {}, + ['mining-drill'] = {}, + pipe = { + ['infinity-pipe'] = {}, + }, + ['pipe-to-ground'] = {}, + character = {}, + ['player-port'] = {}, + ['programmable-speaker'] = {}, + pump = {}, + radar = {}, + ['rail-signal-base'] = { + ['rail-signal'] = {}, + ['rail-chain-signal'] = {}, + }, + reactor = {}, + roboport = {}, + ['rocket-defense'] = {}, + ['solar-panel'] = {}, + ['spider-leg'] = {}, + ['transport-belt-connectable'] = { + splitter = {}, + ['transport-belt'] = {}, + ['linked-belt'] = {}, + ['underground-belt'] = {}, + loader = { + ['loader-1x1'] = {}, + }, + }, + ['train-stop'] = {}, + tree = {}, + unit = {}, + ['unit-spawner'] = {}, + wall = {}, + combinator = { + ['arithmetic-combinator'] = {}, + ['decider-combinator'] = {}, + }, + ['constant-combinator'] = {}, + gate = {}, + ['offshore-pump'] = {}, + ['power-switch'] = {}, + ['storage-tank'] = {}, + ['simple-entity'] = {}, + ['electric-energy-interface'] = {}, + ['simple-entity-with-force'] = {}, + ['simple-entity-with-owner'] = {}, + ['heat-interface'] = {}, + ['linked-container'] = {}, + }, + arrow = {}, + corpse = { + ['rail-remnants'] = {}, + }, + decorative = {}, + explosion = { + ['flame-thrower-explosion'] = {}, + }, + ['flying-text'] = {}, + ['item-entity'] = {}, + ['optimized-particle'] = { + ['leaf-particle'] = {}, + ['artillery-flare'] = {}, + }, + projectile = {}, + resource = {}, + smoke = { + ['smoke-with-trigger'] = {}, + }, + sticker = {}, + ['entity-ghost'] = {}, + ['character-corpse'] = {}, + ['rocket-silo-rocket-shadow'] = {}, + ['rocket-silo-rocket'] = {}, + ['item-request-proxy'] = {}, + ['deconstructible-tile-proxy'] = {}, + fire = {}, + ['tile-ghost'] = {}, + ['particle-source'] = {}, + stream = {}, + beam = {}, + ['artillery-projectile'] = {}, + cliff = {}, + ['highlight-box'] = {}, + ['speech-bubble'] = {}, + }, + equipment = { + ['active-defense-equipment'] = {}, + ['battery-equipment'] = {}, + ['belt-immunity-equipment'] = {}, + ['energy-shield-equipment'] = {}, + ['generator-equipment'] = {}, + ['movement-bonus-equipment'] = {}, + ['night-vision-equipment'] = {}, + ['solar-panel-equipment'] = {}, + ['roboport-equipment'] = {}, + }, + item = { + ammo = {}, + tool = { + armor = {}, + ['mining-tool'] = {}, + ['repair-tool'] = {}, + }, + ['item-with-label'] = { + ['selection-tool'] = { + blueprint = {}, + ['deconstruction-item'] = {}, + ['copy-paste-tool'] = {}, + ['upgrade-item'] = {}, + }, + ['item-with-inventory'] = { + ['blueprint-book'] = {}, + }, + ['item-with-tags'] = {}, + }, + capsule = {}, + gun = {}, + module = {}, + ['item-with-entity-data'] = {}, + ['rail-planner'] = {}, + ['spidertron-remote'] = {} + }, + achievement = { + ['build-entity-achievement'] = {}, + ['construct-with-robots-achievement'] = {}, + ['deconstruct-with-robots-achievement'] = {}, + ['deliver-by-robots-achievement'] = {}, + ['dont-build-entity-achievement'] = {}, + ['dont-craft-manually-achievement'] = {}, + ['dont-use-entity-in-energy-production-achievement'] = {}, + ['finish-the-game-achievement'] = {}, + ['group-attack-achievement'] = {}, + ['kill-achievement'] = {}, + ['player-damaged-achievement'] = {}, + ['produce-achievement'] = {}, + ['produce-per-hour-achievement'] = {}, + ['research-achievement'] = {}, + ['train-path-achievement'] = {}, + ['combat-robot-count'] = {}, + }, + ['noise-layer'] = {}, + ['utility-sprites'] = {}, + ['noise-expression'] = {}, + ['trivial-smoke'] = {}, + ['item-subgroup'] = {}, + ['item-group'] = {}, + recipe = {}, + fluid = {}, + ['virtual-signal'] = {}, + ['autoplace-control'] = {}, + tile = {}, + ['optimized-decorative'] = {}, + ['damage-type'] = {}, + ['ammo-category'] = {}, + ['fuel-category'] = {}, + ['recipe-category'] = {}, + ['resource-category'] = {}, + ['module-category'] = {}, + ['equipment-grid'] = {}, + ['equipment-category'] = {}, + technology = {}, + shortcut = {}, + tutorial = {}, + ['custom-input'] = {}, + }, + font = {}, + ['gui-style'] = {}, + ['utility-constants'] = {}, + ['utility-sounds'] = {}, + sprite = {}, + ['god-controller'] = {}, + ['editor-controller'] = {}, + ['spectator-controller'] = {}, + ['mouse-cursor'] = {}, + ['ambient-sound'] = {}, + ['wind-sound'] = {}, + ['map-settings'] = {}, + ['map-gen-presets'] = {}, + sound = {}, + ['trigger-target-type'] = {}, + }, +} diff --git a/rusty-locale/util.lua b/rusty-locale/util.lua new file mode 100644 index 00000000..1175050a --- /dev/null +++ b/rusty-locale/util.lua @@ -0,0 +1,19 @@ +local _M = {} + + +function _M.resolver(resolvers) +--- Make an empty table that calls a function from `resolvers` with the same name to resolve non-existent keys. + return setmetatable({}, { + __index = function(self, key) + local f = resolvers[key] + if f then + self[key] = f(self) + return self[key] + end + return nil + end, + }) +end + + +return _M diff --git a/scattergun_turret_97.3.0/Factorio Turret Sheet.ods b/scattergun_turret/Factorio Turret Sheet.ods similarity index 100% rename from scattergun_turret_97.3.0/Factorio Turret Sheet.ods rename to scattergun_turret/Factorio Turret Sheet.ods diff --git a/scattergun_turret_97.3.0/changelog.txt b/scattergun_turret/changelog.txt similarity index 100% rename from scattergun_turret_97.3.0/changelog.txt rename to scattergun_turret/changelog.txt diff --git a/scattergun_turret_97.3.0/data-final-fixes.lua b/scattergun_turret/data-final-fixes.lua similarity index 100% rename from scattergun_turret_97.3.0/data-final-fixes.lua rename to scattergun_turret/data-final-fixes.lua diff --git a/scattergun_turret_97.3.0/data-updates.lua b/scattergun_turret/data-updates.lua similarity index 100% rename from scattergun_turret_97.3.0/data-updates.lua rename to scattergun_turret/data-updates.lua diff --git a/scattergun_turret_97.3.0/data.lua b/scattergun_turret/data.lua similarity index 100% rename from scattergun_turret_97.3.0/data.lua rename to scattergun_turret/data.lua diff --git a/scattergun_turret_97.3.0/graphics/entity/beam-turret/hr-turret-beam.png b/scattergun_turret/graphics/entity/beam-turret/hr-turret-beam.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/beam-turret/hr-turret-beam.png rename to scattergun_turret/graphics/entity/beam-turret/hr-turret-beam.png diff --git a/scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-1.png b/scattergun_turret/graphics/entity/beam-turret/turret-beam-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-1.png rename to scattergun_turret/graphics/entity/beam-turret/turret-beam-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-2.png b/scattergun_turret/graphics/entity/beam-turret/turret-beam-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-2.png rename to scattergun_turret/graphics/entity/beam-turret/turret-beam-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-shadow-1.png b/scattergun_turret/graphics/entity/beam-turret/turret-beam-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-shadow-1.png rename to scattergun_turret/graphics/entity/beam-turret/turret-beam-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-shadow-2.png b/scattergun_turret/graphics/entity/beam-turret/turret-beam-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/beam-turret/turret-beam-shadow-2.png rename to scattergun_turret/graphics/entity/beam-turret/turret-beam-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-1.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-1.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-2.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-2.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-3.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-3.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-3.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-3.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-4.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-4.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-4.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-4.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-1.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-1.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-2.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-2.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-3.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-3.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-3.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-3.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-4.png b/scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-4.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-4.png rename to scattergun_turret/graphics/entity/dcannon-turret/dcannon-turret-gun-shadow-4.png diff --git a/scattergun_turret_97.3.0/graphics/entity/dcannon-turret/hr-dcannon-turret-gun.png b/scattergun_turret/graphics/entity/dcannon-turret/hr-dcannon-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/dcannon-turret/hr-dcannon-turret-gun.png rename to scattergun_turret/graphics/entity/dcannon-turret/hr-dcannon-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-1.png b/scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-1.png rename to scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-2.png b/scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-2.png rename to scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-shadow-1.png b/scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-shadow-1.png rename to scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-shadow-2.png b/scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/gatling-turret/gatling-turret-gun-shadow-2.png rename to scattergun_turret/graphics/entity/gatling-turret/gatling-turret-gun-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/gatling-turret/hr-gatling-turret-gun.png b/scattergun_turret/graphics/entity/gatling-turret/hr-gatling-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/gatling-turret/hr-gatling-turret-gun.png rename to scattergun_turret/graphics/entity/gatling-turret/hr-gatling-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-base.png b/scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-base.png rename to scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-closed.png b/scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-closed.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-closed.png rename to scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-closed.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-open.png b/scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-open.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-hand-open.png rename to scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-hand-open.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-platform.png b/scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-platform.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hardened-inserter-platform.png rename to scattergun_turret/graphics/entity/hardened-inserter/hardened-inserter-platform.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-base.png b/scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-base.png rename to scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-closed.png b/scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-closed.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-closed.png rename to scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-closed.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-open.png b/scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-open.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-open.png rename to scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-hand-open.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-platform.png b/scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-platform.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hardened-inserter/hr-hardened-inserter-platform.png rename to scattergun_turret/graphics/entity/hardened-inserter/hr-hardened-inserter-platform.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-1.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-1.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-2.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-2.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-3.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-3.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-3.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-3.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-4.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-4.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-4.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-4.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-1.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-1.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-2.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-2.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-3.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-3.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-3.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-3.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-4.png b/scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-4.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-4.png rename to scattergun_turret/graphics/entity/hcannon-turret/hcannon-turret-gun-shadow-4.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hr-hcannon-turret-gun.png b/scattergun_turret/graphics/entity/hcannon-turret/hr-hcannon-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hcannon-turret/hr-hcannon-turret-gun.png rename to scattergun_turret/graphics/entity/hcannon-turret/hr-hcannon-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-1.png b/scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-1.png rename to scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-2.png b/scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-2.png rename to scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-shadow-1.png b/scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-shadow-1.png rename to scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-shadow-2.png b/scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hmg-turret/hmg-turret-gun-shadow-2.png rename to scattergun_turret/graphics/entity/hmg-turret/hmg-turret-gun-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hmg-turret/hr-hmg-turret-gun.png b/scattergun_turret/graphics/entity/hmg-turret/hr-hmg-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hmg-turret/hr-hmg-turret-gun.png rename to scattergun_turret/graphics/entity/hmg-turret/hr-hmg-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret-base-mask.png b/scattergun_turret/graphics/entity/hr-modular-turret-base-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret-base-mask.png rename to scattergun_turret/graphics/entity/hr-modular-turret-base-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret-base.png b/scattergun_turret/graphics/entity/hr-modular-turret-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret-base.png rename to scattergun_turret/graphics/entity/hr-modular-turret-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret.png b/scattergun_turret/graphics/entity/hr-modular-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret.png rename to scattergun_turret/graphics/entity/hr-modular-turret.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-base-mask.png b/scattergun_turret/graphics/entity/hr-modular-turret2-base-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-base-mask.png rename to scattergun_turret/graphics/entity/hr-modular-turret2-base-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-base.png b/scattergun_turret/graphics/entity/hr-modular-turret2-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-base.png rename to scattergun_turret/graphics/entity/hr-modular-turret2-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-mask.png b/scattergun_turret/graphics/entity/hr-modular-turret2-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2-mask.png rename to scattergun_turret/graphics/entity/hr-modular-turret2-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2.png b/scattergun_turret/graphics/entity/hr-modular-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/hr-modular-turret2.png rename to scattergun_turret/graphics/entity/hr-modular-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/lcannon-turret/hr-lcannon-turret-gun.png b/scattergun_turret/graphics/entity/lcannon-turret/hr-lcannon-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/lcannon-turret/hr-lcannon-turret-gun.png rename to scattergun_turret/graphics/entity/lcannon-turret/hr-lcannon-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-1.png b/scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-1.png rename to scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-2.png b/scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-2.png rename to scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-1.png b/scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-1.png rename to scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-2.png b/scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-2.png rename to scattergun_turret/graphics/entity/lcannon-turret/lcannon-turret-gun-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-1.png b/scattergun_turret/graphics/entity/modular-turret-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-1.png rename to scattergun_turret/graphics/entity/modular-turret-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-2.png b/scattergun_turret/graphics/entity/modular-turret-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-2.png rename to scattergun_turret/graphics/entity/modular-turret-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-base-mask.png b/scattergun_turret/graphics/entity/modular-turret-base-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-base-mask.png rename to scattergun_turret/graphics/entity/modular-turret-base-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-base.png b/scattergun_turret/graphics/entity/modular-turret-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-base.png rename to scattergun_turret/graphics/entity/modular-turret-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-shadow-1.png b/scattergun_turret/graphics/entity/modular-turret-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-shadow-1.png rename to scattergun_turret/graphics/entity/modular-turret-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret-shadow-2.png b/scattergun_turret/graphics/entity/modular-turret-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret-shadow-2.png rename to scattergun_turret/graphics/entity/modular-turret-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-1.png b/scattergun_turret/graphics/entity/modular-turret2-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-1.png rename to scattergun_turret/graphics/entity/modular-turret2-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-2.png b/scattergun_turret/graphics/entity/modular-turret2-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-2.png rename to scattergun_turret/graphics/entity/modular-turret2-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-base-mask.png b/scattergun_turret/graphics/entity/modular-turret2-base-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-base-mask.png rename to scattergun_turret/graphics/entity/modular-turret2-base-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-base.png b/scattergun_turret/graphics/entity/modular-turret2-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-base.png rename to scattergun_turret/graphics/entity/modular-turret2-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-mask-1.png b/scattergun_turret/graphics/entity/modular-turret2-mask-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-mask-1.png rename to scattergun_turret/graphics/entity/modular-turret2-mask-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-mask-2.png b/scattergun_turret/graphics/entity/modular-turret2-mask-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-mask-2.png rename to scattergun_turret/graphics/entity/modular-turret2-mask-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/modular-turret2-shadow.png b/scattergun_turret/graphics/entity/modular-turret2-shadow.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/modular-turret2-shadow.png rename to scattergun_turret/graphics/entity/modular-turret2-shadow.png diff --git a/scattergun_turret_97.3.0/graphics/entity/plaser-turret/hr-plaser-turret-gun.png b/scattergun_turret/graphics/entity/plaser-turret/hr-plaser-turret-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/plaser-turret/hr-plaser-turret-gun.png rename to scattergun_turret/graphics/entity/plaser-turret/hr-plaser-turret-gun.png diff --git a/scattergun_turret_97.3.0/graphics/entity/plaser-turret/plaser-turret-gun-1.png b/scattergun_turret/graphics/entity/plaser-turret/plaser-turret-gun-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/plaser-turret/plaser-turret-gun-1.png rename to scattergun_turret/graphics/entity/plaser-turret/plaser-turret-gun-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/plaser-turret/plaser-turret-gun-2.png b/scattergun_turret/graphics/entity/plaser-turret/plaser-turret-gun-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/plaser-turret/plaser-turret-gun-2.png rename to scattergun_turret/graphics/entity/plaser-turret/plaser-turret-gun-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/projectiles/w93-beam.png b/scattergun_turret/graphics/entity/projectiles/w93-beam.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/projectiles/w93-beam.png rename to scattergun_turret/graphics/entity/projectiles/w93-beam.png diff --git a/scattergun_turret_97.3.0/graphics/entity/projectiles/w93-tlaser.png b/scattergun_turret/graphics/entity/projectiles/w93-tlaser.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/projectiles/w93-tlaser.png rename to scattergun_turret/graphics/entity/projectiles/w93-tlaser.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret.png b/scattergun_turret/graphics/entity/radar-turret/hr-radar-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret.png rename to scattergun_turret/graphics/entity/radar-turret/hr-radar-turret.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret2-base.png b/scattergun_turret/graphics/entity/radar-turret/hr-radar-turret2-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret2-base.png rename to scattergun_turret/graphics/entity/radar-turret/hr-radar-turret2-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret2.png b/scattergun_turret/graphics/entity/radar-turret/hr-radar-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/hr-radar-turret2.png rename to scattergun_turret/graphics/entity/radar-turret/hr-radar-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret-1.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret-1.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret-2.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret-2.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-1.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret2-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-1.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret2-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-2.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret2-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-2.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret2-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-base.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret2-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-base.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret2-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-shadow-1.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret2-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-shadow-1.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret2-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-shadow-2.png b/scattergun_turret/graphics/entity/radar-turret/radar-turret2-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/radar-turret/radar-turret2-shadow-2.png rename to scattergun_turret/graphics/entity/radar-turret/radar-turret2-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/rocket-turret/hr-turret-rocket.png b/scattergun_turret/graphics/entity/rocket-turret/hr-turret-rocket.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/rocket-turret/hr-turret-rocket.png rename to scattergun_turret/graphics/entity/rocket-turret/hr-turret-rocket.png diff --git a/scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-1.png b/scattergun_turret/graphics/entity/rocket-turret/turret-rocket-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-1.png rename to scattergun_turret/graphics/entity/rocket-turret/turret-rocket-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-2.png b/scattergun_turret/graphics/entity/rocket-turret/turret-rocket-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-2.png rename to scattergun_turret/graphics/entity/rocket-turret/turret-rocket-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-shadow-1.png b/scattergun_turret/graphics/entity/rocket-turret/turret-rocket-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-shadow-1.png rename to scattergun_turret/graphics/entity/rocket-turret/turret-rocket-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-shadow-2.png b/scattergun_turret/graphics/entity/rocket-turret/turret-rocket-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/rocket-turret/turret-rocket-shadow-2.png rename to scattergun_turret/graphics/entity/rocket-turret/turret-rocket-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-base-mask.png b/scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-base-mask.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-base-mask.png rename to scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-base-mask.png diff --git a/scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-base.png b/scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-base.png rename to scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-base.png diff --git a/scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-shadow.png b/scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-shadow.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret-shadow.png rename to scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret-shadow.png diff --git a/scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret.png b/scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/scattergun-turret/scattergun-turret.png rename to scattergun_turret/graphics/entity/scattergun-turret/scattergun-turret.png diff --git a/scattergun_turret_97.3.0/graphics/entity/tlaser-turret/hr-turret-tlaser.png b/scattergun_turret/graphics/entity/tlaser-turret/hr-turret-tlaser.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/tlaser-turret/hr-turret-tlaser.png rename to scattergun_turret/graphics/entity/tlaser-turret/hr-turret-tlaser.png diff --git a/scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-1.png b/scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-1.png rename to scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-2.png b/scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-2.png rename to scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-2.png diff --git a/scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-shadow-1.png b/scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-shadow-1.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-shadow-1.png rename to scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-shadow-1.png diff --git a/scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-shadow-2.png b/scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-shadow-2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/entity/tlaser-turret/turret-tlaser-shadow-2.png rename to scattergun_turret/graphics/entity/tlaser-turret/turret-tlaser-shadow-2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/beam-turret.png b/scattergun_turret/graphics/icons/beam-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/beam-turret.png rename to scattergun_turret/graphics/icons/beam-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/beam-turret2.png b/scattergun_turret/graphics/icons/beam-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/beam-turret2.png rename to scattergun_turret/graphics/icons/beam-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/dcannon-turret.png b/scattergun_turret/graphics/icons/dcannon-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/dcannon-turret.png rename to scattergun_turret/graphics/icons/dcannon-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/dcannon-turret2.png b/scattergun_turret/graphics/icons/dcannon-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/dcannon-turret2.png rename to scattergun_turret/graphics/icons/dcannon-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/equipment/tlaser-gun.png b/scattergun_turret/graphics/icons/equipment/tlaser-gun.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/equipment/tlaser-gun.png rename to scattergun_turret/graphics/icons/equipment/tlaser-gun.png diff --git a/scattergun_turret_97.3.0/graphics/icons/gatling-turret.png b/scattergun_turret/graphics/icons/gatling-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/gatling-turret.png rename to scattergun_turret/graphics/icons/gatling-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/gatling-turret2.png b/scattergun_turret/graphics/icons/gatling-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/gatling-turret2.png rename to scattergun_turret/graphics/icons/gatling-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/hardened-inserter.png b/scattergun_turret/graphics/icons/hardened-inserter.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/hardened-inserter.png rename to scattergun_turret/graphics/icons/hardened-inserter.png diff --git a/scattergun_turret_97.3.0/graphics/icons/hcannon-turret.png b/scattergun_turret/graphics/icons/hcannon-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/hcannon-turret.png rename to scattergun_turret/graphics/icons/hcannon-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/hcannon-turret2.png b/scattergun_turret/graphics/icons/hcannon-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/hcannon-turret2.png rename to scattergun_turret/graphics/icons/hcannon-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/hmg-turret.png b/scattergun_turret/graphics/icons/hmg-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/hmg-turret.png rename to scattergun_turret/graphics/icons/hmg-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/hmg-turret2.png b/scattergun_turret/graphics/icons/hmg-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/hmg-turret2.png rename to scattergun_turret/graphics/icons/hmg-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/lcannon-turret.png b/scattergun_turret/graphics/icons/lcannon-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/lcannon-turret.png rename to scattergun_turret/graphics/icons/lcannon-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/lcannon-turret2.png b/scattergun_turret/graphics/icons/lcannon-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/lcannon-turret2.png rename to scattergun_turret/graphics/icons/lcannon-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-beam.png b/scattergun_turret/graphics/icons/modular-gun-beam.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-beam.png rename to scattergun_turret/graphics/icons/modular-gun-beam.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-dcannon.png b/scattergun_turret/graphics/icons/modular-gun-dcannon.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-dcannon.png rename to scattergun_turret/graphics/icons/modular-gun-dcannon.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-gatling.png b/scattergun_turret/graphics/icons/modular-gun-gatling.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-gatling.png rename to scattergun_turret/graphics/icons/modular-gun-gatling.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-hcannon.png b/scattergun_turret/graphics/icons/modular-gun-hcannon.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-hcannon.png rename to scattergun_turret/graphics/icons/modular-gun-hcannon.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-hmg.png b/scattergun_turret/graphics/icons/modular-gun-hmg.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-hmg.png rename to scattergun_turret/graphics/icons/modular-gun-hmg.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-lcannon.png b/scattergun_turret/graphics/icons/modular-gun-lcannon.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-lcannon.png rename to scattergun_turret/graphics/icons/modular-gun-lcannon.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-plaser.png b/scattergun_turret/graphics/icons/modular-gun-plaser.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-plaser.png rename to scattergun_turret/graphics/icons/modular-gun-plaser.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-radar.png b/scattergun_turret/graphics/icons/modular-gun-radar.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-radar.png rename to scattergun_turret/graphics/icons/modular-gun-radar.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-radar2.png b/scattergun_turret/graphics/icons/modular-gun-radar2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-radar2.png rename to scattergun_turret/graphics/icons/modular-gun-radar2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-rocket.png b/scattergun_turret/graphics/icons/modular-gun-rocket.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-rocket.png rename to scattergun_turret/graphics/icons/modular-gun-rocket.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-gun-tlaser.png b/scattergun_turret/graphics/icons/modular-gun-tlaser.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-gun-tlaser.png rename to scattergun_turret/graphics/icons/modular-gun-tlaser.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-turret-base.png b/scattergun_turret/graphics/icons/modular-turret-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-turret-base.png rename to scattergun_turret/graphics/icons/modular-turret-base.png diff --git a/scattergun_turret_97.3.0/graphics/icons/modular-turret2-base.png b/scattergun_turret/graphics/icons/modular-turret2-base.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/modular-turret2-base.png rename to scattergun_turret/graphics/icons/modular-turret2-base.png diff --git a/scattergun_turret_97.3.0/graphics/icons/plaser-turret.png b/scattergun_turret/graphics/icons/plaser-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/plaser-turret.png rename to scattergun_turret/graphics/icons/plaser-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/plaser-turret2.png b/scattergun_turret/graphics/icons/plaser-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/plaser-turret2.png rename to scattergun_turret/graphics/icons/plaser-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/radar-turret.png b/scattergun_turret/graphics/icons/radar-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/radar-turret.png rename to scattergun_turret/graphics/icons/radar-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/radar-turret2.png b/scattergun_turret/graphics/icons/radar-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/radar-turret2.png rename to scattergun_turret/graphics/icons/radar-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/rocket-turret.png b/scattergun_turret/graphics/icons/rocket-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/rocket-turret.png rename to scattergun_turret/graphics/icons/rocket-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/rocket-turret2.png b/scattergun_turret/graphics/icons/rocket-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/rocket-turret2.png rename to scattergun_turret/graphics/icons/rocket-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/scattergun-turret.png b/scattergun_turret/graphics/icons/scattergun-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/scattergun-turret.png rename to scattergun_turret/graphics/icons/scattergun-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/slowdown-cannon-shells.png b/scattergun_turret/graphics/icons/slowdown-cannon-shells.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/slowdown-cannon-shells.png rename to scattergun_turret/graphics/icons/slowdown-cannon-shells.png diff --git a/scattergun_turret_97.3.0/graphics/icons/slowdown-magazine.png b/scattergun_turret/graphics/icons/slowdown-magazine.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/slowdown-magazine.png rename to scattergun_turret/graphics/icons/slowdown-magazine.png diff --git a/scattergun_turret_97.3.0/graphics/icons/slowdown-turret-rocket.png b/scattergun_turret/graphics/icons/slowdown-turret-rocket.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/slowdown-turret-rocket.png rename to scattergun_turret/graphics/icons/slowdown-turret-rocket.png diff --git a/scattergun_turret_97.3.0/graphics/icons/tlaser-turret.png b/scattergun_turret/graphics/icons/tlaser-turret.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/tlaser-turret.png rename to scattergun_turret/graphics/icons/tlaser-turret.png diff --git a/scattergun_turret_97.3.0/graphics/icons/tlaser-turret2.png b/scattergun_turret/graphics/icons/tlaser-turret2.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/tlaser-turret2.png rename to scattergun_turret/graphics/icons/tlaser-turret2.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-cannon-shells.png b/scattergun_turret/graphics/icons/turret-cannon-shells.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-cannon-shells.png rename to scattergun_turret/graphics/icons/turret-cannon-shells.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-explosive-rocket.png b/scattergun_turret/graphics/icons/turret-explosive-rocket.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-explosive-rocket.png rename to scattergun_turret/graphics/icons/turret-explosive-rocket.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-light-cannon-shells.png b/scattergun_turret/graphics/icons/turret-light-cannon-shells.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-light-cannon-shells.png rename to scattergun_turret/graphics/icons/turret-light-cannon-shells.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-light-uranium-cannon-shells.png b/scattergun_turret/graphics/icons/turret-light-uranium-cannon-shells.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-light-uranium-cannon-shells.png rename to scattergun_turret/graphics/icons/turret-light-uranium-cannon-shells.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-rocket.png b/scattergun_turret/graphics/icons/turret-rocket.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-rocket.png rename to scattergun_turret/graphics/icons/turret-rocket.png diff --git a/scattergun_turret_97.3.0/graphics/icons/turret-uranium-cannon-shells.png b/scattergun_turret/graphics/icons/turret-uranium-cannon-shells.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/turret-uranium-cannon-shells.png rename to scattergun_turret/graphics/icons/turret-uranium-cannon-shells.png diff --git a/scattergun_turret_97.3.0/graphics/icons/uranium-shotgun-shell.png b/scattergun_turret/graphics/icons/uranium-shotgun-shell.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/icons/uranium-shotgun-shell.png rename to scattergun_turret/graphics/icons/uranium-shotgun-shell.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-beam-tech.png b/scattergun_turret/graphics/technology/modular-turret-beam-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-beam-tech.png rename to scattergun_turret/graphics/technology/modular-turret-beam-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-dcannon-tech.png b/scattergun_turret/graphics/technology/modular-turret-dcannon-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-dcannon-tech.png rename to scattergun_turret/graphics/technology/modular-turret-dcannon-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-gatling-tech.png b/scattergun_turret/graphics/technology/modular-turret-gatling-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-gatling-tech.png rename to scattergun_turret/graphics/technology/modular-turret-gatling-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-hcannon-tech.png b/scattergun_turret/graphics/technology/modular-turret-hcannon-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-hcannon-tech.png rename to scattergun_turret/graphics/technology/modular-turret-hcannon-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-lcannon-tech.png b/scattergun_turret/graphics/technology/modular-turret-lcannon-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-lcannon-tech.png rename to scattergun_turret/graphics/technology/modular-turret-lcannon-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-plaser-tech.png b/scattergun_turret/graphics/technology/modular-turret-plaser-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-plaser-tech.png rename to scattergun_turret/graphics/technology/modular-turret-plaser-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-radar-tech.png b/scattergun_turret/graphics/technology/modular-turret-radar-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-radar-tech.png rename to scattergun_turret/graphics/technology/modular-turret-radar-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-rocket-tech.png b/scattergun_turret/graphics/technology/modular-turret-rocket-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-rocket-tech.png rename to scattergun_turret/graphics/technology/modular-turret-rocket-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-tech.png b/scattergun_turret/graphics/technology/modular-turret-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-tech.png rename to scattergun_turret/graphics/technology/modular-turret-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret-tlaser-tech.png b/scattergun_turret/graphics/technology/modular-turret-tlaser-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret-tlaser-tech.png rename to scattergun_turret/graphics/technology/modular-turret-tlaser-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/modular-turret2-tech.png b/scattergun_turret/graphics/technology/modular-turret2-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/modular-turret2-tech.png rename to scattergun_turret/graphics/technology/modular-turret2-tech.png diff --git a/scattergun_turret_97.3.0/graphics/technology/scattergun-turret-tech.png b/scattergun_turret/graphics/technology/scattergun-turret-tech.png similarity index 100% rename from scattergun_turret_97.3.0/graphics/technology/scattergun-turret-tech.png rename to scattergun_turret/graphics/technology/scattergun-turret-tech.png diff --git a/scattergun_turret_97.3.0/info.json b/scattergun_turret/info.json similarity index 100% rename from scattergun_turret_97.3.0/info.json rename to scattergun_turret/info.json diff --git a/scattergun_turret_97.3.0/locale/en/strings.cfg b/scattergun_turret/locale/en/strings.cfg similarity index 100% rename from scattergun_turret_97.3.0/locale/en/strings.cfg rename to scattergun_turret/locale/en/strings.cfg diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.0.0.lua b/scattergun_turret/migrations/scattergun_turret_3.0.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.0.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.0.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.1.0.lua b/scattergun_turret/migrations/scattergun_turret_3.1.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.1.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.1.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.10.0.lua b/scattergun_turret/migrations/scattergun_turret_3.10.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.10.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.10.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.2.0.lua b/scattergun_turret/migrations/scattergun_turret_3.2.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.2.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.2.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.3.0.lua b/scattergun_turret/migrations/scattergun_turret_3.3.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.3.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.3.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.4.0.lua b/scattergun_turret/migrations/scattergun_turret_3.4.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.4.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.4.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.5.0.lua b/scattergun_turret/migrations/scattergun_turret_3.5.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.5.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.5.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.6.0.lua b/scattergun_turret/migrations/scattergun_turret_3.6.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.6.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.6.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.7.0.lua b/scattergun_turret/migrations/scattergun_turret_3.7.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.7.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.7.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.8.0.lua b/scattergun_turret/migrations/scattergun_turret_3.8.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.8.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.8.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.9.0.lua b/scattergun_turret/migrations/scattergun_turret_3.9.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.9.0.lua rename to scattergun_turret/migrations/scattergun_turret_3.9.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_3.9.1.lua b/scattergun_turret/migrations/scattergun_turret_3.9.1.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_3.9.1.lua rename to scattergun_turret/migrations/scattergun_turret_3.9.1.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_4.0.0.lua b/scattergun_turret/migrations/scattergun_turret_4.0.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_4.0.0.lua rename to scattergun_turret/migrations/scattergun_turret_4.0.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_4.1.0.lua b/scattergun_turret/migrations/scattergun_turret_4.1.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_4.1.0.lua rename to scattergun_turret/migrations/scattergun_turret_4.1.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_5.1.0.lua b/scattergun_turret/migrations/scattergun_turret_5.1.0.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_5.1.0.lua rename to scattergun_turret/migrations/scattergun_turret_5.1.0.lua diff --git a/scattergun_turret_97.3.0/migrations/scattergun_turret_5.3.3.lua b/scattergun_turret/migrations/scattergun_turret_5.3.3.lua similarity index 100% rename from scattergun_turret_97.3.0/migrations/scattergun_turret_5.3.3.lua rename to scattergun_turret/migrations/scattergun_turret_5.3.3.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/scattergun-turret.lua b/scattergun_turret/prototypes/entities/scattergun-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/scattergun-turret.lua rename to scattergun_turret/prototypes/entities/scattergun-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-beam-turret.lua b/scattergun_turret/prototypes/entities/w93-beam-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-beam-turret.lua rename to scattergun_turret/prototypes/entities/w93-beam-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-dcannon-turret.lua b/scattergun_turret/prototypes/entities/w93-dcannon-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-dcannon-turret.lua rename to scattergun_turret/prototypes/entities/w93-dcannon-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-gatling-turret.lua b/scattergun_turret/prototypes/entities/w93-gatling-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-gatling-turret.lua rename to scattergun_turret/prototypes/entities/w93-gatling-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-hardened-inserter.lua b/scattergun_turret/prototypes/entities/w93-hardened-inserter.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-hardened-inserter.lua rename to scattergun_turret/prototypes/entities/w93-hardened-inserter.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-hcannon-turret.lua b/scattergun_turret/prototypes/entities/w93-hcannon-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-hcannon-turret.lua rename to scattergun_turret/prototypes/entities/w93-hcannon-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-hmg-turret.lua b/scattergun_turret/prototypes/entities/w93-hmg-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-hmg-turret.lua rename to scattergun_turret/prototypes/entities/w93-hmg-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-lcannon-turret.lua b/scattergun_turret/prototypes/entities/w93-lcannon-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-lcannon-turret.lua rename to scattergun_turret/prototypes/entities/w93-lcannon-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-plaser-turret.lua b/scattergun_turret/prototypes/entities/w93-plaser-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-plaser-turret.lua rename to scattergun_turret/prototypes/entities/w93-plaser-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-radar-turret.lua b/scattergun_turret/prototypes/entities/w93-radar-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-radar-turret.lua rename to scattergun_turret/prototypes/entities/w93-radar-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-rocket-turret.lua b/scattergun_turret/prototypes/entities/w93-rocket-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-rocket-turret.lua rename to scattergun_turret/prototypes/entities/w93-rocket-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/entities/w93-tlaser-turret.lua b/scattergun_turret/prototypes/entities/w93-tlaser-turret.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/entities/w93-tlaser-turret.lua rename to scattergun_turret/prototypes/entities/w93-tlaser-turret.lua diff --git a/scattergun_turret_97.3.0/prototypes/items/equipment.lua b/scattergun_turret/prototypes/items/equipment.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/items/equipment.lua rename to scattergun_turret/prototypes/items/equipment.lua diff --git a/scattergun_turret_97.3.0/prototypes/items/items-ammo.lua b/scattergun_turret/prototypes/items/items-ammo.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/items/items-ammo.lua rename to scattergun_turret/prototypes/items/items-ammo.lua diff --git a/scattergun_turret_97.3.0/prototypes/items/items-inserter.lua b/scattergun_turret/prototypes/items/items-inserter.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/items/items-inserter.lua rename to scattergun_turret/prototypes/items/items-inserter.lua diff --git a/scattergun_turret_97.3.0/prototypes/items/items-radar.lua b/scattergun_turret/prototypes/items/items-radar.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/items/items-radar.lua rename to scattergun_turret/prototypes/items/items-radar.lua diff --git a/scattergun_turret_97.3.0/prototypes/items/items.lua b/scattergun_turret/prototypes/items/items.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/items/items.lua rename to scattergun_turret/prototypes/items/items.lua diff --git a/scattergun_turret_97.3.0/prototypes/projectiles/projectiles-ammo.lua b/scattergun_turret/prototypes/projectiles/projectiles-ammo.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/projectiles/projectiles-ammo.lua rename to scattergun_turret/prototypes/projectiles/projectiles-ammo.lua diff --git a/scattergun_turret_97.3.0/prototypes/projectiles/projectiles.lua b/scattergun_turret/prototypes/projectiles/projectiles.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/projectiles/projectiles.lua rename to scattergun_turret/prototypes/projectiles/projectiles.lua diff --git a/scattergun_turret_97.3.0/prototypes/recipes/recipes-ammo.lua b/scattergun_turret/prototypes/recipes/recipes-ammo.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/recipes/recipes-ammo.lua rename to scattergun_turret/prototypes/recipes/recipes-ammo.lua diff --git a/scattergun_turret_97.3.0/prototypes/recipes/recipes-entity.lua b/scattergun_turret/prototypes/recipes/recipes-entity.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/recipes/recipes-entity.lua rename to scattergun_turret/prototypes/recipes/recipes-entity.lua diff --git a/scattergun_turret_97.3.0/prototypes/recipes/recipes-inserter.lua b/scattergun_turret/prototypes/recipes/recipes-inserter.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/recipes/recipes-inserter.lua rename to scattergun_turret/prototypes/recipes/recipes-inserter.lua diff --git a/scattergun_turret_97.3.0/prototypes/recipes/recipes-krastorio2.lua b/scattergun_turret/prototypes/recipes/recipes-krastorio2.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/recipes/recipes-krastorio2.lua rename to scattergun_turret/prototypes/recipes/recipes-krastorio2.lua diff --git a/scattergun_turret_97.3.0/prototypes/recipes/recipes-radar.lua b/scattergun_turret/prototypes/recipes/recipes-radar.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/recipes/recipes-radar.lua rename to scattergun_turret/prototypes/recipes/recipes-radar.lua diff --git a/scattergun_turret_97.3.0/prototypes/technology/technology-krastorio2.lua b/scattergun_turret/prototypes/technology/technology-krastorio2.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/technology/technology-krastorio2.lua rename to scattergun_turret/prototypes/technology/technology-krastorio2.lua diff --git a/scattergun_turret_97.3.0/prototypes/technology/technology-radar.lua b/scattergun_turret/prototypes/technology/technology-radar.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/technology/technology-radar.lua rename to scattergun_turret/prototypes/technology/technology-radar.lua diff --git a/scattergun_turret_97.3.0/prototypes/technology/technology.lua b/scattergun_turret/prototypes/technology/technology.lua similarity index 100% rename from scattergun_turret_97.3.0/prototypes/technology/technology.lua rename to scattergun_turret/prototypes/technology/technology.lua diff --git a/scattergun_turret_97.3.0/settings.lua b/scattergun_turret/settings.lua similarity index 100% rename from scattergun_turret_97.3.0/settings.lua rename to scattergun_turret/settings.lua diff --git a/scattergun_turret_97.3.0/sound/beam-turret-fire.wav b/scattergun_turret/sound/beam-turret-fire.wav similarity index 100% rename from scattergun_turret_97.3.0/sound/beam-turret-fire.wav rename to scattergun_turret/sound/beam-turret-fire.wav diff --git a/scattergun_turret_97.3.0/sound/gatling-turret-fire.wav b/scattergun_turret/sound/gatling-turret-fire.wav similarity index 100% rename from scattergun_turret_97.3.0/sound/gatling-turret-fire.wav rename to scattergun_turret/sound/gatling-turret-fire.wav diff --git a/scattergun_turret_97.3.0/sound/hcannon-turret-fire.wav b/scattergun_turret/sound/hcannon-turret-fire.wav similarity index 100% rename from scattergun_turret_97.3.0/sound/hcannon-turret-fire.wav rename to scattergun_turret/sound/hcannon-turret-fire.wav diff --git a/scattergun_turret_97.3.0/sound/hmg-turret-fire.ogg b/scattergun_turret/sound/hmg-turret-fire.ogg similarity index 100% rename from scattergun_turret_97.3.0/sound/hmg-turret-fire.ogg rename to scattergun_turret/sound/hmg-turret-fire.ogg diff --git a/scattergun_turret_97.3.0/sound/lcannon-turret-fire.wav b/scattergun_turret/sound/lcannon-turret-fire.wav similarity index 100% rename from scattergun_turret_97.3.0/sound/lcannon-turret-fire.wav rename to scattergun_turret/sound/lcannon-turret-fire.wav diff --git a/scattergun_turret_97.3.0/sound/plaser-turret-fire.ogg b/scattergun_turret/sound/plaser-turret-fire.ogg similarity index 100% rename from scattergun_turret_97.3.0/sound/plaser-turret-fire.ogg rename to scattergun_turret/sound/plaser-turret-fire.ogg diff --git a/scattergun_turret_97.3.0/sound/rocket-turret-fire.ogg b/scattergun_turret/sound/rocket-turret-fire.ogg similarity index 100% rename from scattergun_turret_97.3.0/sound/rocket-turret-fire.ogg rename to scattergun_turret/sound/rocket-turret-fire.ogg diff --git a/scattergun_turret_97.3.0/sound/scattergun-turret-fire.ogg b/scattergun_turret/sound/scattergun-turret-fire.ogg similarity index 100% rename from scattergun_turret_97.3.0/sound/scattergun-turret-fire.ogg rename to scattergun_turret/sound/scattergun-turret-fire.ogg diff --git a/scattergun_turret_97.3.0/sound/tlaser-turret-fire.ogg b/scattergun_turret/sound/tlaser-turret-fire.ogg similarity index 100% rename from scattergun_turret_97.3.0/sound/tlaser-turret-fire.ogg rename to scattergun_turret/sound/tlaser-turret-fire.ogg diff --git a/scattergun_turret_97.3.0/thumbnail.png b/scattergun_turret/thumbnail.png similarity index 100% rename from scattergun_turret_97.3.0/thumbnail.png rename to scattergun_turret/thumbnail.png diff --git a/show-max-underground-distance/LICENSE b/show-max-underground-distance/LICENSE new file mode 100644 index 00000000..e62ec04c --- /dev/null +++ b/show-max-underground-distance/LICENSE @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/show-max-underground-distance/changelog.txt b/show-max-underground-distance/changelog.txt new file mode 100644 index 00000000..1579966e --- /dev/null +++ b/show-max-underground-distance/changelog.txt @@ -0,0 +1,37 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.0.8 +Date: 2021.03.02 + Compatibility: + - Bump version number for 1.1 mod manager to find properly +--------------------------------------------------------------------------------------------------- +Version: 0.0.7 +Date: 2020.12.22 + Compatibility: + - Version for Factorio 1.0 to fix dependency issues +--------------------------------------------------------------------------------------------------- +Version: 0.0.6 +Date: 2020.11.29 + Compatibility: + - Update for Factorio 1.1 +--------------------------------------------------------------------------------------------------- +Version: 0.0.5 +Date: 2020.08.16 + Compatibility: + - Added check for nil underground distances +--------------------------------------------------------------------------------------------------- +Version: 0.0.4 +Date: 2020.07.07 + Compatibility: + - Added workaround for Pipelayer +--------------------------------------------------------------------------------------------------- +Version: 0.0.3 +Date: 2020.06.11 + Changes: + - Added setting to change icon style + Graphics: + - Added thin and small icons +--------------------------------------------------------------------------------------------------- +Version: 0.0.2 +Date: 2020.06.08 + Info: + - Initial release \ No newline at end of file diff --git a/show-max-underground-distance/data-final-fixes.lua b/show-max-underground-distance/data-final-fixes.lua new file mode 100644 index 00000000..ac670c89 --- /dev/null +++ b/show-max-underground-distance/data-final-fixes.lua @@ -0,0 +1,27 @@ +local hover = settings.startup["show-max-underground-distance-on-hover"].value +local icon = settings.startup["show-max-underground-distance-icon"].value + +local rvs_template = { + sprite = { + filename = string.format("__show-max-underground-distance__/graphics/%s.png", icon), + priority = "high", + size = 32 + }, + distance = 1, + draw_on_selection = hover +} + +for i, proto in pairs(data.raw["underground-belt"]) do + local rvs = table.deepcopy(rvs_template) + rvs.offset = {0, -proto.max_distance} + proto.radius_visualisation_specification = rvs +end + +for i, proto in pairs(data.raw["pipe-to-ground"]) do + --0.0.4 fix for pipelayer with undefined fluidbox ends, 0.0.5 fix for undefined max_underground_distance + if #proto.fluid_box.pipe_connections > 1 and proto.fluid_box.pipe_connections[2].max_underground_distance then + local rvs = table.deepcopy(rvs_template) + rvs.offset = {0, proto.fluid_box.pipe_connections[2].max_underground_distance} + proto.radius_visualisation_specification = rvs + end +end \ No newline at end of file diff --git a/show-max-underground-distance/graphics/small.png b/show-max-underground-distance/graphics/small.png new file mode 100644 index 00000000..75649712 Binary files /dev/null and b/show-max-underground-distance/graphics/small.png differ diff --git a/show-max-underground-distance/graphics/thick.png b/show-max-underground-distance/graphics/thick.png new file mode 100644 index 00000000..52969452 Binary files /dev/null and b/show-max-underground-distance/graphics/thick.png differ diff --git a/show-max-underground-distance/graphics/thin.png b/show-max-underground-distance/graphics/thin.png new file mode 100644 index 00000000..5d2cd01a Binary files /dev/null and b/show-max-underground-distance/graphics/thin.png differ diff --git a/show-max-underground-distance/info.json b/show-max-underground-distance/info.json new file mode 100644 index 00000000..9776dc0d --- /dev/null +++ b/show-max-underground-distance/info.json @@ -0,0 +1,9 @@ +{ + "name": "show-max-underground-distance", + "title": "Show Max Underground Distance", + "author": "ltab", + "version": "0.0.8", + "factorio_version": "1.1", + "description": "Shows maximum range indicators to help you place underground belts and pipes.", + "dependencies": ["base", "(?) longer-belts-redux"] +} diff --git a/show-max-underground-distance/locale/en/config.cfg b/show-max-underground-distance/locale/en/config.cfg new file mode 100644 index 00000000..7e468d15 --- /dev/null +++ b/show-max-underground-distance/locale/en/config.cfg @@ -0,0 +1,11 @@ +[mod-setting-name] +show-max-underground-distance-on-hover=Show on hover +show-max-underground-distance-icon=Icon style + +[mod-setting-description] +show-max-underground-distance-on-hover=Show the maximum distance when hovering over a placed belt or pipe + +[string-mod-setting] +show-max-underground-distance-icon-thick=Thick +show-max-underground-distance-icon-thin=Thin +show-max-underground-distance-icon-small=Small \ No newline at end of file diff --git a/show-max-underground-distance/settings.lua b/show-max-underground-distance/settings.lua new file mode 100644 index 00000000..97280ea8 --- /dev/null +++ b/show-max-underground-distance/settings.lua @@ -0,0 +1,15 @@ +data:extend({ + { + type = "bool-setting", + name = "show-max-underground-distance-on-hover", + setting_type = "startup", + default_value = false + }, + { + type = "string-setting", + name = "show-max-underground-distance-icon", + setting_type = "startup", + default_value = "thick", + allowed_values = {"thick", "thin", "small"} + } +}) \ No newline at end of file diff --git a/show-max-underground-distance/thumbnail.png b/show-max-underground-distance/thumbnail.png new file mode 100644 index 00000000..728e1252 Binary files /dev/null and b/show-max-underground-distance/thumbnail.png differ diff --git a/show-max-underground-distance_0.0.8.zip b/show-max-underground-distance_0.0.8.zip deleted file mode 100644 index 7427152b..00000000 Binary files a/show-max-underground-distance_0.0.8.zip and /dev/null differ diff --git a/simhelper_1.1.5/LICENSE.txt b/simhelper/LICENSE.txt similarity index 100% rename from simhelper_1.1.5/LICENSE.txt rename to simhelper/LICENSE.txt diff --git a/simhelper_1.1.5/README.md b/simhelper/README.md similarity index 100% rename from simhelper_1.1.5/README.md rename to simhelper/README.md diff --git a/simhelper_1.1.5/changelog.txt b/simhelper/changelog.txt similarity index 100% rename from simhelper_1.1.5/changelog.txt rename to simhelper/changelog.txt diff --git a/simhelper_1.1.5/funccapture.lua b/simhelper/funccapture.lua similarity index 100% rename from simhelper_1.1.5/funccapture.lua rename to simhelper/funccapture.lua diff --git a/simhelper_1.1.5/funccapture.md b/simhelper/funccapture.md similarity index 100% rename from simhelper_1.1.5/funccapture.md rename to simhelper/funccapture.md diff --git a/simhelper_1.1.5/info.json b/simhelper/info.json similarity index 100% rename from simhelper_1.1.5/info.json rename to simhelper/info.json diff --git a/simhelper_1.1.5/modloader.lua b/simhelper/modloader.lua similarity index 100% rename from simhelper_1.1.5/modloader.lua rename to simhelper/modloader.lua diff --git a/simhelper_1.1.5/modloader.md b/simhelper/modloader.md similarity index 100% rename from simhelper_1.1.5/modloader.md rename to simhelper/modloader.md diff --git a/stdlib_1.4.8/changelog.txt b/stdlib/changelog.txt similarity index 100% rename from stdlib_1.4.8/changelog.txt rename to stdlib/changelog.txt diff --git a/stdlib_1.4.8/info.json b/stdlib/info.json similarity index 100% rename from stdlib_1.4.8/info.json rename to stdlib/info.json diff --git a/stdlib_1.4.8/instrument-after-data.lua b/stdlib/instrument-after-data.lua similarity index 100% rename from stdlib_1.4.8/instrument-after-data.lua rename to stdlib/instrument-after-data.lua diff --git a/stdlib_1.4.8/readme.md b/stdlib/readme.md similarity index 100% rename from stdlib_1.4.8/readme.md rename to stdlib/readme.md diff --git a/stdlib_1.4.8/stdlib-docs/spectre-icons.min.css b/stdlib/stdlib-docs/spectre-icons.min.css similarity index 100% rename from stdlib_1.4.8/stdlib-docs/spectre-icons.min.css rename to stdlib/stdlib-docs/spectre-icons.min.css diff --git a/stdlib_1.4.8/stdlib-docs/spectre.min.css b/stdlib/stdlib-docs/spectre.min.css similarity index 100% rename from stdlib_1.4.8/stdlib-docs/spectre.min.css rename to stdlib/stdlib-docs/spectre.min.css diff --git a/stdlib_1.4.8/stdlib/area/area.lua b/stdlib/stdlib/area/area.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/area.lua rename to stdlib/stdlib/area/area.lua diff --git a/stdlib_1.4.8/stdlib/area/chunk.lua b/stdlib/stdlib/area/chunk.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/chunk.lua rename to stdlib/stdlib/area/chunk.lua diff --git a/stdlib_1.4.8/stdlib/area/direction.lua b/stdlib/stdlib/area/direction.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/direction.lua rename to stdlib/stdlib/area/direction.lua diff --git a/stdlib_1.4.8/stdlib/area/orientation.lua b/stdlib/stdlib/area/orientation.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/orientation.lua rename to stdlib/stdlib/area/orientation.lua diff --git a/stdlib_1.4.8/stdlib/area/position.lua b/stdlib/stdlib/area/position.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/position.lua rename to stdlib/stdlib/area/position.lua diff --git a/stdlib_1.4.8/stdlib/area/surface.lua b/stdlib/stdlib/area/surface.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/surface.lua rename to stdlib/stdlib/area/surface.lua diff --git a/stdlib_1.4.8/stdlib/area/tile.lua b/stdlib/stdlib/area/tile.lua similarity index 100% rename from stdlib_1.4.8/stdlib/area/tile.lua rename to stdlib/stdlib/area/tile.lua diff --git a/stdlib_1.4.8/stdlib/config.lua b/stdlib/stdlib/config.lua similarity index 100% rename from stdlib_1.4.8/stdlib/config.lua rename to stdlib/stdlib/config.lua diff --git a/stdlib_1.4.8/stdlib/core.lua b/stdlib/stdlib/core.lua similarity index 100% rename from stdlib_1.4.8/stdlib/core.lua rename to stdlib/stdlib/core.lua diff --git a/stdlib_1.4.8/stdlib/data/category.lua b/stdlib/stdlib/data/category.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/category.lua rename to stdlib/stdlib/data/category.lua diff --git a/stdlib_1.4.8/stdlib/data/data.lua b/stdlib/stdlib/data/data.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/data.lua rename to stdlib/stdlib/data/data.lua diff --git a/stdlib_1.4.8/stdlib/data/developer/developer.lua b/stdlib/stdlib/data/developer/developer.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/developer/developer.lua rename to stdlib/stdlib/data/developer/developer.lua diff --git a/stdlib_1.4.8/stdlib/data/entity.lua b/stdlib/stdlib/data/entity.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/entity.lua rename to stdlib/stdlib/data/entity.lua diff --git a/stdlib_1.4.8/stdlib/data/fluid.lua b/stdlib/stdlib/data/fluid.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/fluid.lua rename to stdlib/stdlib/data/fluid.lua diff --git a/stdlib_1.4.8/stdlib/data/item.lua b/stdlib/stdlib/data/item.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/item.lua rename to stdlib/stdlib/data/item.lua diff --git a/stdlib_1.4.8/stdlib/data/modules/class.yuml b/stdlib/stdlib/data/modules/class.yuml similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/class.yuml rename to stdlib/stdlib/data/modules/class.yuml diff --git a/stdlib_1.4.8/stdlib/data/modules/groups.lua b/stdlib/stdlib/data/modules/groups.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/groups.lua rename to stdlib/stdlib/data/modules/groups.lua diff --git a/stdlib_1.4.8/stdlib/data/modules/notes.txt b/stdlib/stdlib/data/modules/notes.txt similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/notes.txt rename to stdlib/stdlib/data/modules/notes.txt diff --git a/stdlib_1.4.8/stdlib/data/modules/pipes.lua b/stdlib/stdlib/data/modules/pipes.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/pipes.lua rename to stdlib/stdlib/data/modules/pipes.lua diff --git a/stdlib_1.4.8/stdlib/data/modules/recipe.txt b/stdlib/stdlib/data/modules/recipe.txt similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/recipe.txt rename to stdlib/stdlib/data/modules/recipe.txt diff --git a/stdlib_1.4.8/stdlib/data/modules/sprites.lua b/stdlib/stdlib/data/modules/sprites.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/sprites.lua rename to stdlib/stdlib/data/modules/sprites.lua diff --git a/stdlib_1.4.8/stdlib/data/modules/util.lua b/stdlib/stdlib/data/modules/util.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/modules/util.lua rename to stdlib/stdlib/data/modules/util.lua diff --git a/stdlib_1.4.8/stdlib/data/recipe.lua b/stdlib/stdlib/data/recipe.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/recipe.lua rename to stdlib/stdlib/data/recipe.lua diff --git a/stdlib_1.4.8/stdlib/data/technology.lua b/stdlib/stdlib/data/technology.lua similarity index 100% rename from stdlib_1.4.8/stdlib/data/technology.lua rename to stdlib/stdlib/data/technology.lua diff --git a/stdlib_1.4.8/stdlib/entity/entity.lua b/stdlib/stdlib/entity/entity.lua similarity index 100% rename from stdlib_1.4.8/stdlib/entity/entity.lua rename to stdlib/stdlib/entity/entity.lua diff --git a/stdlib_1.4.8/stdlib/entity/inventory.lua b/stdlib/stdlib/entity/inventory.lua similarity index 100% rename from stdlib_1.4.8/stdlib/entity/inventory.lua rename to stdlib/stdlib/entity/inventory.lua diff --git a/stdlib_1.4.8/stdlib/entity/resource.lua b/stdlib/stdlib/entity/resource.lua similarity index 100% rename from stdlib_1.4.8/stdlib/entity/resource.lua rename to stdlib/stdlib/entity/resource.lua diff --git a/stdlib_1.4.8/stdlib/event/changes.lua b/stdlib/stdlib/event/changes.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/changes.lua rename to stdlib/stdlib/event/changes.lua diff --git a/stdlib_1.4.8/stdlib/event/event.lua b/stdlib/stdlib/event/event.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/event.lua rename to stdlib/stdlib/event/event.lua diff --git a/stdlib_1.4.8/stdlib/event/force.lua b/stdlib/stdlib/event/force.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/force.lua rename to stdlib/stdlib/event/force.lua diff --git a/stdlib_1.4.8/stdlib/event/gui.lua b/stdlib/stdlib/event/gui.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/gui.lua rename to stdlib/stdlib/event/gui.lua diff --git a/stdlib_1.4.8/stdlib/event/modules/dump_event_data.lua b/stdlib/stdlib/event/modules/dump_event_data.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/modules/dump_event_data.lua rename to stdlib/stdlib/event/modules/dump_event_data.lua diff --git a/stdlib_1.4.8/stdlib/event/modules/event_filters.lua b/stdlib/stdlib/event/modules/event_filters.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/modules/event_filters.lua rename to stdlib/stdlib/event/modules/event_filters.lua diff --git a/stdlib_1.4.8/stdlib/event/modules/merge_data.lua b/stdlib/stdlib/event/modules/merge_data.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/modules/merge_data.lua rename to stdlib/stdlib/event/modules/merge_data.lua diff --git a/stdlib_1.4.8/stdlib/event/player.lua b/stdlib/stdlib/event/player.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/player.lua rename to stdlib/stdlib/event/player.lua diff --git a/stdlib_1.4.8/stdlib/event/surface.lua b/stdlib/stdlib/event/surface.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/surface.lua rename to stdlib/stdlib/event/surface.lua diff --git a/stdlib_1.4.8/stdlib/event/trains.lua b/stdlib/stdlib/event/trains.lua similarity index 100% rename from stdlib_1.4.8/stdlib/event/trains.lua rename to stdlib/stdlib/event/trains.lua diff --git a/stdlib_1.4.8/stdlib/game.lua b/stdlib/stdlib/game.lua similarity index 100% rename from stdlib_1.4.8/stdlib/game.lua rename to stdlib/stdlib/game.lua diff --git a/stdlib_1.4.8/stdlib/misc/config.lua b/stdlib/stdlib/misc/config.lua similarity index 100% rename from stdlib_1.4.8/stdlib/misc/config.lua rename to stdlib/stdlib/misc/config.lua diff --git a/stdlib_1.4.8/stdlib/misc/logger.lua b/stdlib/stdlib/misc/logger.lua similarity index 100% rename from stdlib_1.4.8/stdlib/misc/logger.lua rename to stdlib/stdlib/misc/logger.lua diff --git a/stdlib_1.4.8/stdlib/misc/migrate.lua b/stdlib/stdlib/misc/migrate.lua similarity index 100% rename from stdlib_1.4.8/stdlib/misc/migrate.lua rename to stdlib/stdlib/misc/migrate.lua diff --git a/stdlib_1.4.8/stdlib/misc/queue.lua b/stdlib/stdlib/misc/queue.lua similarity index 100% rename from stdlib_1.4.8/stdlib/misc/queue.lua rename to stdlib/stdlib/misc/queue.lua diff --git a/stdlib_1.4.8/stdlib/scripts/interface.lua b/stdlib/stdlib/scripts/interface.lua similarity index 100% rename from stdlib_1.4.8/stdlib/scripts/interface.lua rename to stdlib/stdlib/scripts/interface.lua diff --git a/stdlib_1.4.8/stdlib/scripts/quickstart.lua b/stdlib/stdlib/scripts/quickstart.lua similarity index 100% rename from stdlib_1.4.8/stdlib/scripts/quickstart.lua rename to stdlib/stdlib/scripts/quickstart.lua diff --git a/stdlib_1.4.8/stdlib/utils/classes/linked_list.lua b/stdlib/stdlib/utils/classes/linked_list.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/classes/linked_list.lua rename to stdlib/stdlib/utils/classes/linked_list.lua diff --git a/stdlib_1.4.8/stdlib/utils/classes/string_array.lua b/stdlib/stdlib/utils/classes/string_array.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/classes/string_array.lua rename to stdlib/stdlib/utils/classes/string_array.lua diff --git a/stdlib_1.4.8/stdlib/utils/classes/unique_array.lua b/stdlib/stdlib/utils/classes/unique_array.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/classes/unique_array.lua rename to stdlib/stdlib/utils/classes/unique_array.lua diff --git a/stdlib_1.4.8/stdlib/utils/color.lua b/stdlib/stdlib/utils/color.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/color.lua rename to stdlib/stdlib/utils/color.lua diff --git a/stdlib_1.4.8/stdlib/utils/defines/anticolor.lua b/stdlib/stdlib/utils/defines/anticolor.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/defines/anticolor.lua rename to stdlib/stdlib/utils/defines/anticolor.lua diff --git a/stdlib_1.4.8/stdlib/utils/defines/color.lua b/stdlib/stdlib/utils/defines/color.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/defines/color.lua rename to stdlib/stdlib/utils/defines/color.lua diff --git a/stdlib_1.4.8/stdlib/utils/defines/color_list.lua b/stdlib/stdlib/utils/defines/color_list.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/defines/color_list.lua rename to stdlib/stdlib/utils/defines/color_list.lua diff --git a/stdlib_1.4.8/stdlib/utils/defines/lightcolor.lua b/stdlib/stdlib/utils/defines/lightcolor.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/defines/lightcolor.lua rename to stdlib/stdlib/utils/defines/lightcolor.lua diff --git a/stdlib_1.4.8/stdlib/utils/defines/time.lua b/stdlib/stdlib/utils/defines/time.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/defines/time.lua rename to stdlib/stdlib/utils/defines/time.lua diff --git a/stdlib_1.4.8/stdlib/utils/globals.lua b/stdlib/stdlib/utils/globals.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/globals.lua rename to stdlib/stdlib/utils/globals.lua diff --git a/stdlib_1.4.8/stdlib/utils/is.lua b/stdlib/stdlib/utils/is.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/is.lua rename to stdlib/stdlib/utils/is.lua diff --git a/stdlib_1.4.8/stdlib/utils/iter.lua b/stdlib/stdlib/utils/iter.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/iter.lua rename to stdlib/stdlib/utils/iter.lua diff --git a/stdlib_1.4.8/stdlib/utils/math.lua b/stdlib/stdlib/utils/math.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/math.lua rename to stdlib/stdlib/utils/math.lua diff --git a/stdlib_1.4.8/stdlib/utils/string.lua b/stdlib/stdlib/utils/string.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/string.lua rename to stdlib/stdlib/utils/string.lua diff --git a/stdlib_1.4.8/stdlib/utils/table.lua b/stdlib/stdlib/utils/table.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/table.lua rename to stdlib/stdlib/utils/table.lua diff --git a/stdlib_1.4.8/stdlib/utils/type.lua b/stdlib/stdlib/utils/type.lua similarity index 100% rename from stdlib_1.4.8/stdlib/utils/type.lua rename to stdlib/stdlib/utils/type.lua diff --git a/stdlib_1.4.8/stdlib/vendor/enumerable.lua b/stdlib/stdlib/vendor/enumerable.lua similarity index 100% rename from stdlib_1.4.8/stdlib/vendor/enumerable.lua rename to stdlib/stdlib/vendor/enumerable.lua diff --git a/stdlib_1.4.8/stdlib/vendor/inspect.lua b/stdlib/stdlib/vendor/inspect.lua similarity index 100% rename from stdlib_1.4.8/stdlib/vendor/inspect.lua rename to stdlib/stdlib/vendor/inspect.lua diff --git a/stdlib_1.4.8/stdlib/vendor/semver.lua b/stdlib/stdlib/vendor/semver.lua similarity index 100% rename from stdlib_1.4.8/stdlib/vendor/semver.lua rename to stdlib/stdlib/vendor/semver.lua diff --git a/stdlib_1.4.8/stdlib/vendor/serpent.lua b/stdlib/stdlib/vendor/serpent.lua similarity index 100% rename from stdlib_1.4.8/stdlib/vendor/serpent.lua rename to stdlib/stdlib/vendor/serpent.lua diff --git a/stdlib_1.4.8/stdlib/vendor/version.lua b/stdlib/stdlib/vendor/version.lua similarity index 100% rename from stdlib_1.4.8/stdlib/vendor/version.lua rename to stdlib/stdlib/vendor/version.lua diff --git a/stdlib_1.4.8/thumbnail.png b/stdlib/thumbnail.png similarity index 100% rename from stdlib_1.4.8/thumbnail.png rename to stdlib/thumbnail.png diff --git a/steinios_research_sensor_1.1.1/control.lua b/steinios_research_sensor/control.lua similarity index 100% rename from steinios_research_sensor_1.1.1/control.lua rename to steinios_research_sensor/control.lua diff --git a/steinios_research_sensor_1.1.1/info.json b/steinios_research_sensor/info.json similarity index 100% rename from steinios_research_sensor_1.1.1/info.json rename to steinios_research_sensor/info.json diff --git a/steinios_research_sensor_1.1.1/locale/en/en.cfg b/steinios_research_sensor/locale/en/en.cfg similarity index 100% rename from steinios_research_sensor_1.1.1/locale/en/en.cfg rename to steinios_research_sensor/locale/en/en.cfg diff --git a/steinios_research_sensor_1.1.1/thumbnail.png b/steinios_research_sensor/thumbnail.png similarity index 100% rename from steinios_research_sensor_1.1.1/thumbnail.png rename to steinios_research_sensor/thumbnail.png diff --git a/toxicPollution_0.3.6/README.md b/toxicPollution/README.md similarity index 100% rename from toxicPollution_0.3.6/README.md rename to toxicPollution/README.md diff --git a/toxicPollution_0.3.6/changelog.txt b/toxicPollution/changelog.txt similarity index 100% rename from toxicPollution_0.3.6/changelog.txt rename to toxicPollution/changelog.txt diff --git a/toxicPollution_0.3.6/classes/config.lua b/toxicPollution/classes/config.lua similarity index 100% rename from toxicPollution_0.3.6/classes/config.lua rename to toxicPollution/classes/config.lua diff --git a/toxicPollution_0.3.6/classes/detector.lua b/toxicPollution/classes/detector.lua similarity index 100% rename from toxicPollution_0.3.6/classes/detector.lua rename to toxicPollution/classes/detector.lua diff --git a/toxicPollution_0.3.6/classes/toxic.lua b/toxicPollution/classes/toxic.lua similarity index 100% rename from toxicPollution_0.3.6/classes/toxic.lua rename to toxicPollution/classes/toxic.lua diff --git a/toxicPollution_0.3.6/control.lua b/toxicPollution/control.lua similarity index 100% rename from toxicPollution_0.3.6/control.lua rename to toxicPollution/control.lua diff --git a/toxicPollution_0.3.6/data-updates.lua b/toxicPollution/data-updates.lua similarity index 100% rename from toxicPollution_0.3.6/data-updates.lua rename to toxicPollution/data-updates.lua diff --git a/toxicPollution_0.3.6/data.lua b/toxicPollution/data.lua similarity index 100% rename from toxicPollution_0.3.6/data.lua rename to toxicPollution/data.lua diff --git a/toxicPollution_0.3.6/graphics/clock.png b/toxicPollution/graphics/clock.png similarity index 100% rename from toxicPollution_0.3.6/graphics/clock.png rename to toxicPollution/graphics/clock.png diff --git a/toxicPollution_0.3.6/graphics/gas-time-research.png b/toxicPollution/graphics/gas-time-research.png similarity index 100% rename from toxicPollution_0.3.6/graphics/gas-time-research.png rename to toxicPollution/graphics/gas-time-research.png diff --git a/toxicPollution_0.3.6/graphics/pollution.png b/toxicPollution/graphics/pollution.png similarity index 100% rename from toxicPollution_0.3.6/graphics/pollution.png rename to toxicPollution/graphics/pollution.png diff --git a/toxicPollution_0.3.6/graphics/respirator.png b/toxicPollution/graphics/respirator.png similarity index 100% rename from toxicPollution_0.3.6/graphics/respirator.png rename to toxicPollution/graphics/respirator.png diff --git a/toxicPollution_0.3.6/graphics/signal-red-armor.png b/toxicPollution/graphics/signal-red-armor.png similarity index 100% rename from toxicPollution_0.3.6/graphics/signal-red-armor.png rename to toxicPollution/graphics/signal-red-armor.png diff --git a/toxicPollution_0.3.6/graphics/signal-red-gas-mask.png b/toxicPollution/graphics/signal-red-gas-mask.png similarity index 100% rename from toxicPollution_0.3.6/graphics/signal-red-gas-mask.png rename to toxicPollution/graphics/signal-red-gas-mask.png diff --git a/toxicPollution_0.3.6/graphics/signal-yellow-gas-mask.png b/toxicPollution/graphics/signal-yellow-gas-mask.png similarity index 100% rename from toxicPollution_0.3.6/graphics/signal-yellow-gas-mask.png rename to toxicPollution/graphics/signal-yellow-gas-mask.png diff --git a/toxicPollution_0.3.6/graphics/signal-yellow-more-toxin.png b/toxicPollution/graphics/signal-yellow-more-toxin.png similarity index 100% rename from toxicPollution_0.3.6/graphics/signal-yellow-more-toxin.png rename to toxicPollution/graphics/signal-yellow-more-toxin.png diff --git a/toxicPollution_0.3.6/info.json b/toxicPollution/info.json similarity index 100% rename from toxicPollution_0.3.6/info.json rename to toxicPollution/info.json diff --git a/toxicPollution_0.3.6/locale/en/base.cfg b/toxicPollution/locale/en/base.cfg similarity index 100% rename from toxicPollution_0.3.6/locale/en/base.cfg rename to toxicPollution/locale/en/base.cfg diff --git a/toxicPollution_0.3.6/locale/ru/base.cfg b/toxicPollution/locale/ru/base.cfg similarity index 100% rename from toxicPollution_0.3.6/locale/ru/base.cfg rename to toxicPollution/locale/ru/base.cfg diff --git a/toxicPollution_0.3.6/prototypes/damage.lua b/toxicPollution/prototypes/damage.lua similarity index 100% rename from toxicPollution_0.3.6/prototypes/damage.lua rename to toxicPollution/prototypes/damage.lua diff --git a/toxicPollution_0.3.6/prototypes/items.lua b/toxicPollution/prototypes/items.lua similarity index 100% rename from toxicPollution_0.3.6/prototypes/items.lua rename to toxicPollution/prototypes/items.lua diff --git a/toxicPollution_0.3.6/prototypes/pollution.lua b/toxicPollution/prototypes/pollution.lua similarity index 100% rename from toxicPollution_0.3.6/prototypes/pollution.lua rename to toxicPollution/prototypes/pollution.lua diff --git a/toxicPollution_0.3.6/prototypes/signals.lua b/toxicPollution/prototypes/signals.lua similarity index 100% rename from toxicPollution_0.3.6/prototypes/signals.lua rename to toxicPollution/prototypes/signals.lua diff --git a/toxicPollution_0.3.6/prototypes/tech.lua b/toxicPollution/prototypes/tech.lua similarity index 100% rename from toxicPollution_0.3.6/prototypes/tech.lua rename to toxicPollution/prototypes/tech.lua diff --git a/toxicPollution_0.3.6/settings.lua b/toxicPollution/settings.lua similarity index 100% rename from toxicPollution_0.3.6/settings.lua rename to toxicPollution/settings.lua diff --git a/toxicPollution_0.3.6/util/class.lua b/toxicPollution/util/class.lua similarity index 100% rename from toxicPollution_0.3.6/util/class.lua rename to toxicPollution/util/class.lua diff --git a/toxicPollution_0.3.6/util/help.lua b/toxicPollution/util/help.lua similarity index 100% rename from toxicPollution_0.3.6/util/help.lua rename to toxicPollution/util/help.lua diff --git a/toxicPollution_0.3.6/util/table.lua b/toxicPollution/util/table.lua similarity index 100% rename from toxicPollution_0.3.6/util/table.lua rename to toxicPollution/util/table.lua diff --git a/toxicPollution_0.3.6/util/tech.lua b/toxicPollution/util/tech.lua similarity index 100% rename from toxicPollution_0.3.6/util/tech.lua rename to toxicPollution/util/tech.lua diff --git a/upgrade-planner-next_2.2.1/CHANGELOG.md b/upgrade-planner-next/CHANGELOG.md similarity index 100% rename from upgrade-planner-next_2.2.1/CHANGELOG.md rename to upgrade-planner-next/CHANGELOG.md diff --git a/upgrade-planner-next_2.2.1/README.md b/upgrade-planner-next/README.md similarity index 100% rename from upgrade-planner-next_2.2.1/README.md rename to upgrade-planner-next/README.md diff --git a/upgrade-planner-next_2.2.1/changelog.json b/upgrade-planner-next/changelog.json similarity index 100% rename from upgrade-planner-next_2.2.1/changelog.json rename to upgrade-planner-next/changelog.json diff --git a/upgrade-planner-next_2.2.1/changelog.txt b/upgrade-planner-next/changelog.txt similarity index 100% rename from upgrade-planner-next_2.2.1/changelog.txt rename to upgrade-planner-next/changelog.txt diff --git a/upgrade-planner-next_2.2.1/control.lua b/upgrade-planner-next/control.lua similarity index 100% rename from upgrade-planner-next_2.2.1/control.lua rename to upgrade-planner-next/control.lua diff --git a/upgrade-planner-next_2.2.1/data.lua b/upgrade-planner-next/data.lua similarity index 100% rename from upgrade-planner-next_2.2.1/data.lua rename to upgrade-planner-next/data.lua diff --git a/upgrade-planner-next_2.2.1/graphics/icons/item/builder.png b/upgrade-planner-next/graphics/icons/item/builder.png similarity index 100% rename from upgrade-planner-next_2.2.1/graphics/icons/item/builder.png rename to upgrade-planner-next/graphics/icons/item/builder.png diff --git a/upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-24-disabled.png b/upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-24-disabled.png similarity index 100% rename from upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-24-disabled.png rename to upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-24-disabled.png diff --git a/upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-24.png b/upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-24.png similarity index 100% rename from upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-24.png rename to upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-24.png diff --git a/upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-32.png b/upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-32.png similarity index 100% rename from upgrade-planner-next_2.2.1/graphics/icons/shortcut-bar/shortcut-32.png rename to upgrade-planner-next/graphics/icons/shortcut-bar/shortcut-32.png diff --git a/upgrade-planner-next_2.2.1/info.json b/upgrade-planner-next/info.json similarity index 100% rename from upgrade-planner-next_2.2.1/info.json rename to upgrade-planner-next/info.json diff --git a/upgrade-planner-next_2.2.1/locale/en/all.cfg b/upgrade-planner-next/locale/en/all.cfg similarity index 100% rename from upgrade-planner-next_2.2.1/locale/en/all.cfg rename to upgrade-planner-next/locale/en/all.cfg diff --git a/upgrade-planner-next_2.2.1/prototypes/hotkeys.lua b/upgrade-planner-next/prototypes/hotkeys.lua similarity index 100% rename from upgrade-planner-next_2.2.1/prototypes/hotkeys.lua rename to upgrade-planner-next/prototypes/hotkeys.lua diff --git a/upgrade-planner-next_2.2.1/prototypes/items.lua b/upgrade-planner-next/prototypes/items.lua similarity index 100% rename from upgrade-planner-next_2.2.1/prototypes/items.lua rename to upgrade-planner-next/prototypes/items.lua diff --git a/upgrade-planner-next_2.2.1/prototypes/shortcuts.lua b/upgrade-planner-next/prototypes/shortcuts.lua similarity index 100% rename from upgrade-planner-next_2.2.1/prototypes/shortcuts.lua rename to upgrade-planner-next/prototypes/shortcuts.lua diff --git a/upgrade-planner-next_2.2.1/screenshots/Sample-Usage.mp4 b/upgrade-planner-next/screenshots/Sample-Usage.mp4 similarity index 100% rename from upgrade-planner-next_2.2.1/screenshots/Sample-Usage.mp4 rename to upgrade-planner-next/screenshots/Sample-Usage.mp4 diff --git a/upgrade-planner-next_2.2.1/screenshots/main-window.png b/upgrade-planner-next/screenshots/main-window.png similarity index 100% rename from upgrade-planner-next_2.2.1/screenshots/main-window.png rename to upgrade-planner-next/screenshots/main-window.png diff --git a/upgrade-planner-next_2.2.1/thumbnail.png b/upgrade-planner-next/thumbnail.png similarity index 100% rename from upgrade-planner-next_2.2.1/thumbnail.png rename to upgrade-planner-next/thumbnail.png diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/converter.lua b/upgrade-planner-next/upgrade-planner/converter.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/converter.lua rename to upgrade-planner-next/upgrade-planner/converter.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/entity-upgrade.lua b/upgrade-planner-next/upgrade-planner/entity-upgrade.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/entity-upgrade.lua rename to upgrade-planner-next/upgrade-planner/entity-upgrade.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/globals.lua b/upgrade-planner-next/upgrade-planner/globals.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/globals.lua rename to upgrade-planner-next/upgrade-planner/globals.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/gui-events.lua b/upgrade-planner-next/upgrade-planner/gui-events.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/gui-events.lua rename to upgrade-planner-next/upgrade-planner/gui-events.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/gui.lua b/upgrade-planner-next/upgrade-planner/gui.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/gui.lua rename to upgrade-planner-next/upgrade-planner/gui.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/mod-upgrade.lua b/upgrade-planner-next/upgrade-planner/mod-upgrade.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/mod-upgrade.lua rename to upgrade-planner-next/upgrade-planner/mod-upgrade.lua diff --git a/upgrade-planner-next_2.2.1/upgrade-planner/utility.lua b/upgrade-planner-next/upgrade-planner/utility.lua similarity index 100% rename from upgrade-planner-next_2.2.1/upgrade-planner/utility.lua rename to upgrade-planner-next/upgrade-planner/utility.lua diff --git a/vehicle_physics_again_1.0.0/changelog.txt b/vehicle_physics_again/changelog.txt similarity index 100% rename from vehicle_physics_again_1.0.0/changelog.txt rename to vehicle_physics_again/changelog.txt diff --git a/vehicle_physics_again_1.0.0/control.lua b/vehicle_physics_again/control.lua similarity index 100% rename from vehicle_physics_again_1.0.0/control.lua rename to vehicle_physics_again/control.lua diff --git a/vehicle_physics_again_1.0.0/data-final-fixes.lua b/vehicle_physics_again/data-final-fixes.lua similarity index 100% rename from vehicle_physics_again_1.0.0/data-final-fixes.lua rename to vehicle_physics_again/data-final-fixes.lua diff --git a/vehicle_physics_again_1.0.0/data.lua b/vehicle_physics_again/data.lua similarity index 100% rename from vehicle_physics_again_1.0.0/data.lua rename to vehicle_physics_again/data.lua diff --git a/vehicle_physics_again_1.0.0/dirt.ogg b/vehicle_physics_again/dirt.ogg similarity index 100% rename from vehicle_physics_again_1.0.0/dirt.ogg rename to vehicle_physics_again/dirt.ogg diff --git a/vehicle_physics_again_1.0.0/info.json b/vehicle_physics_again/info.json similarity index 100% rename from vehicle_physics_again_1.0.0/info.json rename to vehicle_physics_again/info.json diff --git a/vehicle_physics_again_1.0.0/locale/en/base.cfg b/vehicle_physics_again/locale/en/base.cfg similarity index 100% rename from vehicle_physics_again_1.0.0/locale/en/base.cfg rename to vehicle_physics_again/locale/en/base.cfg diff --git a/vehicle_physics_again_1.0.0/settings.lua b/vehicle_physics_again/settings.lua similarity index 100% rename from vehicle_physics_again_1.0.0/settings.lua rename to vehicle_physics_again/settings.lua diff --git a/vehicle_physics_again_1.0.0/squeel1.ogg b/vehicle_physics_again/squeel1.ogg similarity index 100% rename from vehicle_physics_again_1.0.0/squeel1.ogg rename to vehicle_physics_again/squeel1.ogg diff --git a/vehicle_physics_again_1.0.0/squeel2.ogg b/vehicle_physics_again/squeel2.ogg similarity index 100% rename from vehicle_physics_again_1.0.0/squeel2.ogg rename to vehicle_physics_again/squeel2.ogg diff --git a/vehicle_physics_again_1.0.0/squeel3.ogg b/vehicle_physics_again/squeel3.ogg similarity index 100% rename from vehicle_physics_again_1.0.0/squeel3.ogg rename to vehicle_physics_again/squeel3.ogg diff --git a/vehicle_physics_again_1.0.0/thumbnail.png b/vehicle_physics_again/thumbnail.png similarity index 100% rename from vehicle_physics_again_1.0.0/thumbnail.png rename to vehicle_physics_again/thumbnail.png diff --git a/vehicle_physics_again_1.0.0/tire_marks.png b/vehicle_physics_again/tire_marks.png similarity index 100% rename from vehicle_physics_again_1.0.0/tire_marks.png rename to vehicle_physics_again/tire_marks.png diff --git a/vehicle_physics_again_1.0.0/tire_marks_faded.png b/vehicle_physics_again/tire_marks_faded.png similarity index 100% rename from vehicle_physics_again_1.0.0/tire_marks_faded.png rename to vehicle_physics_again/tire_marks_faded.png diff --git a/weaponSoundsRedone_1.3.0/changelog.txt b/weaponSoundsRedone/changelog.txt similarity index 100% rename from weaponSoundsRedone_1.3.0/changelog.txt rename to weaponSoundsRedone/changelog.txt diff --git a/weaponSoundsRedone_1.3.0/data.lua b/weaponSoundsRedone/data.lua similarity index 100% rename from weaponSoundsRedone_1.3.0/data.lua rename to weaponSoundsRedone/data.lua diff --git a/weaponSoundsRedone_1.3.0/info.json b/weaponSoundsRedone/info.json similarity index 100% rename from weaponSoundsRedone_1.3.0/info.json rename to weaponSoundsRedone/info.json diff --git a/weaponSoundsRedone_1.3.0/locale/en/locale.cfg b/weaponSoundsRedone/locale/en/locale.cfg similarity index 100% rename from weaponSoundsRedone_1.3.0/locale/en/locale.cfg rename to weaponSoundsRedone/locale/en/locale.cfg diff --git a/weaponSoundsRedone_1.3.0/locale/ru/locale.cfg b/weaponSoundsRedone/locale/ru/locale.cfg similarity index 100% rename from weaponSoundsRedone_1.3.0/locale/ru/locale.cfg rename to weaponSoundsRedone/locale/ru/locale.cfg diff --git a/weaponSoundsRedone_1.3.0/settings.lua b/weaponSoundsRedone/settings.lua similarity index 100% rename from weaponSoundsRedone_1.3.0/settings.lua rename to weaponSoundsRedone/settings.lua diff --git a/weaponSoundsRedone_1.3.0/sounds/autoshotgun_fire.ogg b/weaponSoundsRedone/sounds/autoshotgun_fire.ogg similarity index 100% rename from weaponSoundsRedone_1.3.0/sounds/autoshotgun_fire.ogg rename to weaponSoundsRedone/sounds/autoshotgun_fire.ogg diff --git a/weaponSoundsRedone_1.3.0/sounds/pistol_fire.ogg b/weaponSoundsRedone/sounds/pistol_fire.ogg similarity index 100% rename from weaponSoundsRedone_1.3.0/sounds/pistol_fire.ogg rename to weaponSoundsRedone/sounds/pistol_fire.ogg diff --git a/weaponSoundsRedone_1.3.0/sounds/shotgun_fire.ogg b/weaponSoundsRedone/sounds/shotgun_fire.ogg similarity index 100% rename from weaponSoundsRedone_1.3.0/sounds/shotgun_fire.ogg rename to weaponSoundsRedone/sounds/shotgun_fire.ogg diff --git a/weaponSoundsRedone_1.3.0/sounds/submachine_fire.ogg b/weaponSoundsRedone/sounds/submachine_fire.ogg similarity index 100% rename from weaponSoundsRedone_1.3.0/sounds/submachine_fire.ogg rename to weaponSoundsRedone/sounds/submachine_fire.ogg diff --git a/weaponSoundsRedone_1.3.0/sounds/turret_fire.ogg b/weaponSoundsRedone/sounds/turret_fire.ogg similarity index 100% rename from weaponSoundsRedone_1.3.0/sounds/turret_fire.ogg rename to weaponSoundsRedone/sounds/turret_fire.ogg diff --git a/weaponSoundsRedone_1.3.0/thumbnail.png b/weaponSoundsRedone/thumbnail.png similarity index 100% rename from weaponSoundsRedone_1.3.0/thumbnail.png rename to weaponSoundsRedone/thumbnail.png diff --git a/what-fish_0.1.1/data.lua b/what-fish/data.lua similarity index 100% rename from what-fish_0.1.1/data.lua rename to what-fish/data.lua diff --git a/what-fish_0.1.1/info.json b/what-fish/info.json similarity index 100% rename from what-fish_0.1.1/info.json rename to what-fish/info.json diff --git a/what-fish_0.1.1/settings.lua b/what-fish/settings.lua similarity index 100% rename from what-fish_0.1.1/settings.lua rename to what-fish/settings.lua diff --git a/what-fish_0.1.1/thumbnail.png b/what-fish/thumbnail.png similarity index 100% rename from what-fish_0.1.1/thumbnail.png rename to what-fish/thumbnail.png diff --git a/what-is-it-really-used-for_1.6.0/changelog.txt b/what-is-it-really-used-for/changelog.txt similarity index 100% rename from what-is-it-really-used-for_1.6.0/changelog.txt rename to what-is-it-really-used-for/changelog.txt diff --git a/what-is-it-really-used-for_1.6.0/control.lua b/what-is-it-really-used-for/control.lua similarity index 100% rename from what-is-it-really-used-for_1.6.0/control.lua rename to what-is-it-really-used-for/control.lua diff --git a/what-is-it-really-used-for_1.6.0/data.lua b/what-is-it-really-used-for/data.lua similarity index 100% rename from what-is-it-really-used-for_1.6.0/data.lua rename to what-is-it-really-used-for/data.lua diff --git a/what-is-it-really-used-for_1.6.0/graphics/arrow_bar.png b/what-is-it-really-used-for/graphics/arrow_bar.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/arrow_bar.png rename to what-is-it-really-used-for/graphics/arrow_bar.png diff --git a/what-is-it-really-used-for_1.6.0/graphics/arrow_box.png b/what-is-it-really-used-for/graphics/arrow_box.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/arrow_box.png rename to what-is-it-really-used-for/graphics/arrow_box.png diff --git a/what-is-it-really-used-for_1.6.0/graphics/arrow_left.png b/what-is-it-really-used-for/graphics/arrow_left.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/arrow_left.png rename to what-is-it-really-used-for/graphics/arrow_left.png diff --git a/what-is-it-really-used-for_1.6.0/graphics/close.png b/what-is-it-really-used-for/graphics/close.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/close.png rename to what-is-it-really-used-for/graphics/close.png diff --git a/what-is-it-really-used-for_1.6.0/graphics/gui.png b/what-is-it-really-used-for/graphics/gui.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/gui.png rename to what-is-it-really-used-for/graphics/gui.png diff --git a/what-is-it-really-used-for_1.6.0/graphics/search-icon.png b/what-is-it-really-used-for/graphics/search-icon.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/graphics/search-icon.png rename to what-is-it-really-used-for/graphics/search-icon.png diff --git a/what-is-it-really-used-for_1.6.0/info.json b/what-is-it-really-used-for/info.json similarity index 100% rename from what-is-it-really-used-for_1.6.0/info.json rename to what-is-it-really-used-for/info.json diff --git a/what-is-it-really-used-for_1.6.0/locale/en/what-is-it-really-used-for.cfg b/what-is-it-really-used-for/locale/en/what-is-it-really-used-for.cfg similarity index 100% rename from what-is-it-really-used-for_1.6.0/locale/en/what-is-it-really-used-for.cfg rename to what-is-it-really-used-for/locale/en/what-is-it-really-used-for.cfg diff --git a/what-is-it-really-used-for_1.6.0/locale/ru/what-is-it-really-used-for.cfg b/what-is-it-really-used-for/locale/ru/what-is-it-really-used-for.cfg similarity index 100% rename from what-is-it-really-used-for_1.6.0/locale/ru/what-is-it-really-used-for.cfg rename to what-is-it-really-used-for/locale/ru/what-is-it-really-used-for.cfg diff --git a/what-is-it-really-used-for_1.6.0/thumbnail.png b/what-is-it-really-used-for/thumbnail.png similarity index 100% rename from what-is-it-really-used-for_1.6.0/thumbnail.png rename to what-is-it-really-used-for/thumbnail.png diff --git a/zero-fluid-info_0.0.4/changelog.txt b/zero-fluid-info/changelog.txt similarity index 100% rename from zero-fluid-info_0.0.4/changelog.txt rename to zero-fluid-info/changelog.txt diff --git a/zero-fluid-info_0.0.4/data-final-fixes.lua b/zero-fluid-info/data-final-fixes.lua similarity index 100% rename from zero-fluid-info_0.0.4/data-final-fixes.lua rename to zero-fluid-info/data-final-fixes.lua diff --git a/zero-fluid-info_0.0.4/info.json b/zero-fluid-info/info.json similarity index 100% rename from zero-fluid-info_0.0.4/info.json rename to zero-fluid-info/info.json diff --git a/zero-fluid-info_0.0.4/locale/en/names.cfg b/zero-fluid-info/locale/en/names.cfg similarity index 100% rename from zero-fluid-info_0.0.4/locale/en/names.cfg rename to zero-fluid-info/locale/en/names.cfg diff --git a/zero-fluid-info_0.0.4/thumbnail.png b/zero-fluid-info/thumbnail.png similarity index 100% rename from zero-fluid-info_0.0.4/thumbnail.png rename to zero-fluid-info/thumbnail.png diff --git a/zzzparanoidal_1.0.1/config.lua b/zzzparanoidal/config.lua similarity index 100% rename from zzzparanoidal_1.0.1/config.lua rename to zzzparanoidal/config.lua diff --git a/zzzparanoidal_1.0.1/control.lua b/zzzparanoidal/control.lua similarity index 100% rename from zzzparanoidal_1.0.1/control.lua rename to zzzparanoidal/control.lua diff --git a/zzzparanoidal/data-final-fixes.lua b/zzzparanoidal/data-final-fixes.lua new file mode 100644 index 00000000..a3ea897e --- /dev/null +++ b/zzzparanoidal/data-final-fixes.lua @@ -0,0 +1,64 @@ +require("prototypes.assemblers") +require("prototypes.nuclear") +require("prototypes.techfixes") +require("prototypes.change-background") +require("prototypes.warfare") +require("prototypes.recipefixes") +require("prototypes.pipes") +require("prototypes.map-gen-presets") +require("prototypes.boiler-effectivity") +require("prototypes.bobfix") + +if mods["angelsindustries"] then + require("prototypes.techfixes-angelsIndustries") +end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ angelsIndustries + +if mods["angelsbioprocessing"] then + require("prototypes.modules") +end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ angelsbioprocessing + +require("prototypes.artillery-prototype.artillery-turret-prototype-final-fix") --фикс Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π°Ρ€Ρ‚Ρ‹ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Π°Ρ€Ρ‚Ρƒ + +require("recipes.gemfix") +require("recipes.warehousing") +require("recipes.module-contactfix") + +require("prototypes.walkable-beacons") -- ΠΏΠΎ маякам ΠΌΠΎΠΆΠ½ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΊΠΎΠ΄ ΠΈΠ· walkable-beacons +------------------------------------------------------------------------------------------------- +require("graphics.train.train_reskin") -- рСскин ΠΏΠΎΠ΅Π·Π΄ΠΎΠ² +require("graphics.ore_radar.ore_radar_reskin") -- рСскин Ρ€Π°Π΄Π°Ρ€Π° Ρ€ΡƒΠ΄Ρ‹ +------------------------------------------------------------------------------------------------- +require("prototypes.micro-final-fix") --Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° напильником всСго подряд -- фиксы ΠΎΡ‚ ΠšΠΈΡ€ΠΈΠΊΠ° +------------------------------------------------------------------------------------------------- +require("prototypes.entity.entity") --фиксы Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ ΠΎΡ‚ SEO +------------------------------------------------------------------------------------------------- +--фиксы совмСстимости для ΠΌΠΎΠ΄ΠΎΠ² +require("prototypes.mod_compatibility.Transport_Drones") +require("prototypes.mod_compatibility.JunkTrain") + +------------------------------------------------------------------------------------------------- +require("prototypes.Angels_RBOS") --Angels_RBOS Angel's Re-enabled Basic Ore Smelting + +require("prototypes.landfill-pump") --Установка насосов Π½Π° отсыпку + +if mods["yuoki"] then + require("prototypes.yuoki") +end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ yuoki + +-- Uniform recipe mod +for _,r in pairs(data.raw["recipe"]) do + r.always_show_products=true; + r.show_amount_in_title=false; + if r.normal ~= nil then + r.normal.always_show_products = true; + r.normal.show_amount_in_title = false; + end + if r.expensive ~= nil then + r.expensive.always_show_products = true; + r.expensive.show_amount_in_title = false; + end +end +-- Uniform recipe end + +--Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ послСдним. ПослС всСх Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². +require("recipes.flowfix") \ No newline at end of file diff --git a/zzzparanoidal/data-updates.lua b/zzzparanoidal/data-updates.lua new file mode 100644 index 00000000..808f1778 --- /dev/null +++ b/zzzparanoidal/data-updates.lua @@ -0,0 +1,28 @@ +require("prototypes.miniloaders") +require("prototypes.generators") +require("prototypes.fluid-void") +require("prototypes.gas-void") +require("prototypes.ThickerLines") +require("prototypes.ColorCodedPlanners_101") -- ΠΌΠΎΠ΄ ColorCodedPlanners_1.0.1 +require("prototypes.tips-and-tricks.tips-and-tricks") -- подсказки +require("locale.locale-pumps") --Π»ΠΎΠΊΠ°Π»ΠΈ для PUMPS + +if mods.bobequipment then + data.raw.item["personal-roboport-mk3-equipment"].subgroup = "misc1" + data.raw.item["personal-roboport-mk4-equipment"].subgroup = "misc1" +end + +-- Uniform recipe mod +for _,r in pairs(data.raw["recipe"]) do + r.always_show_products=true; + r.show_amount_in_title=false; + if r.normal ~= nil then + r.normal.always_show_products = true; + r.normal.show_amount_in_title = false; + end + if r.expensive ~= nil then + r.expensive.always_show_products = true; + r.expensive.show_amount_in_title = false; + end +end +-- Uniform recipe end \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/data.lua b/zzzparanoidal/data.lua similarity index 100% rename from zzzparanoidal_1.0.1/data.lua rename to zzzparanoidal/data.lua diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/BioIndustries_itemgroup.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/BioIndustries_itemgroup.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/BioIndustries_itemgroup.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/BioIndustries_itemgroup.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-E-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-E-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-E-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-E-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-N-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-N-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-N-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-N-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-S-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-S-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-S-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-S-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-W-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-W-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-W-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/boiler-W-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-E-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-E-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-E-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-E-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-N-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-N-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-N-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-N-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-S-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-S-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-S-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-S-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-W-idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-W-idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-W-idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_boiler/hr-boiler-W-idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_light_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_light_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_light_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_light_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/bio_greenhouse_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_light_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_light_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_light_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_light_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/hr_bio_greenhouse_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-N.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-N.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-N.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-N.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/assembling-machine-3-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-N-exp.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-N-exp.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-N-exp.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-N-exp.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_greenhouse/pipe/hr-assembling-machine-3-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim_mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim_mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim_mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_anim_mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/bioreactor_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim_mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim_mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim_mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_anim_mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/hr_bioreactor_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-e.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-e.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-e.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-e.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-s.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-s.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-s.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-s.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-w.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-w.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-w.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/bioreactor-pipe-w.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-e.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-e.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-e.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-e.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-s.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-s.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-s.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-s.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-w.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-w.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-w.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_reactor/pipes/hr_bioreactor-pipe-w.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/Bio_Solar_Boiler_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_boiler/hr_Bio_Solar_Boiler_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/Bio_Solar_Farm_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_solar_farm/hr_Bio_Solar_Farm_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/bio_turret.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/bio_turret.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/bio_turret.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/bio_turret.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/hr_bio_turret.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/hr_bio_turret.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/hr_bio_turret.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/bio_turret/hr_bio_turret.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/bio_farm_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/bio_farm-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/biofarm_pipes/hr_bio_farm-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biofarm/hr_bio_farm_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/assembling-machine-3-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_trees.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_trees.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_trees.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_anim_trees.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/bio_garden_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-E.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-E.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-E.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-E.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-S.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-S.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-S.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-S.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-W.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-W.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-W.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr-assembling-machine-3-pipe-W.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_trees.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_trees.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_trees.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_anim_trees.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden/hr_bio_garden_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_turbine_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_turbine_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_turbine_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/bio_garden_huge_turbine_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_turbine_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_turbine_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_turbine_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_huge/hr_bio_garden_huge_turbine_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/bio_garden_large_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_light.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_light.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_light.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_light.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/biogarden_large/hr_bio_garden_large_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/cokery_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_idle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_idle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_idle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_idle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/cokery/hr_cokery_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/hr_huge_substation_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/huge_substation/huge_substation_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_charge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_charge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_charge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_charge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_discharge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_discharge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_discharge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_anim_discharge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/bi_large_accumulator_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_charge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_charge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_charge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_charge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_discharge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_discharge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_discharge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_anim_discharge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/large_accumulator/hr_bi_large_accumulator_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_off.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_off.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_off.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_off.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/hr_stone_crusher_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_anim.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_anim.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_anim.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_anim.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_off.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_off.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_off.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_off.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/stone-crusher/stone_crusher_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/giga_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_giga_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_huge_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/hr_large_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/huge_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/chests/large_wooden_chest_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/big-wooden-pole-01_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_big-wooden-pole-01_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/hr_huge_wooden_pole_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole_shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole_shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole_shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/poles/huge_wooden_pole_shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-left-down.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-corner-right-down.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-left.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-ending-right.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-single-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-horizontal-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-straight-vertical-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_fence/fence-t-down.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_inner-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_o.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_outer-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_side.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/hr_woodfloor_u.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_inner-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_o.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_outer-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_side.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u-mask.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u-mask.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u-mask.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u-mask.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_floor/woodfloor_u.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hq_pipe_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-east.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-east.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-east.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-east.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-north.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-north.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-north.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-north.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-south.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-south.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-south.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-south.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-west.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-west.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-west.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/hr-pipe-cover-west.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/lq_pipe_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-east.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-east.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-east.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-east.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-north.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-north.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-north.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-north.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-south.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-south.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-south.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-south.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-west.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-west.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-west.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/entities/wood_products/wood_pipe/pipe-cover-west.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/ash.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/ash.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/ash.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/ash.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/cellulose.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/cellulose.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/cellulose.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/cellulose.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/charcoal.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/charcoal.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/charcoal.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/charcoal.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/clean-air.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/clean-air.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/clean-air.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/clean-air.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/crushed-stone.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/crushed-stone.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/crushed-stone.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/crushed-stone.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/accumulator_large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/accumulator_large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/accumulator_large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/accumulator_large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/bio_boiler.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/bio_boiler.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/bio_boiler.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/bio_boiler.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/biofarm.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/biofarm.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/biofarm.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/biofarm.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/bioreactor.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/bioreactor.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/bioreactor.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/bioreactor.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/cokery.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/cokery.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/cokery.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/cokery.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/dart_turret.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/dart_turret.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/dart_turret.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/dart_turret.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_27x27.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_27x27.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_27x27.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_27x27.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_3x3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_3x3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_3x3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_3x3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_9x9.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_9x9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_9x9.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/garden_9x9.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/greenhouse.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/greenhouse.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/greenhouse.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/greenhouse.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-boiler.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-boiler.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-boiler.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-boiler.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-panel-large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-panel-large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-panel-large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/solar-panel-large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/stone_crusher.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/stone_crusher.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/stone_crusher.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/stone_crusher.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/substation_large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/substation_large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/substation_large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/substation_large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_giga.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_giga.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_giga.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_giga.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_huge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_huge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_huge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_huge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_large.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_large.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_large.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_chest_large.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe_to_ground.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe_to_ground.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe_to_ground.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pipe_to_ground.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_big.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_big.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_big.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_big.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_huge.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_huge.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_huge.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wood_pole_huge.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wooden-fence.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wooden-fence.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/entity/wooden-fence.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/entity/wooden-fence.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fertilizer.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fertilizer.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fertilizer.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fertilizer.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fertilizer_advanced.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fertilizer_advanced.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fertilizer_advanced.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fertilizer_advanced.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fluid_biomass.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fluid_biomass.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fluid_biomass.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fluid_biomass.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fuel_brick.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fuel_brick.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/fuel_brick.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/fuel_brick.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/ash_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/bio_seed_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/charcoal_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/crush_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_5.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_5.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_5.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_6.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_6.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_6.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_7.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_7.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_7.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_8.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_8.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_8.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_9.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_9.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/seedling_9.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/mips/woodpulp_4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/pellet_coke.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/pellet_coke.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/pellet_coke.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/pellet_coke.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/sand.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/sand.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/sand.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/sand.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/seedling.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/seedling.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/seedling.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/seedling.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_plus.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_plus.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_plus.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_plus.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_pollution_particle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_pollution_particle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_pollution_particle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_pollution_particle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_recycle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_recycle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_recycle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/signal/bi_signal_recycle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/tree_seed.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/tree_seed.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/tree_seed.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/tree_seed.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_1_basic.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_1_basic.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_1_basic.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_1_basic.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_2_standard.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_2_standard.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_2_standard.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_2_standard.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_3_enhanced.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_3_enhanced.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_3_enhanced.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_3_enhanced.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_4_poison.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_4_poison.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_4_poison.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_4_poison.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_rifle.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_rifle.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_rifle.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/weapon/dart_rifle.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/woodpulp.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/woodpulp.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/icons/woodpulp.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/icons/woodpulp.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-advanced-fertilizers.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-advanced-fertilizers.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-advanced-fertilizers.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-advanced-fertilizers.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-ash.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-ash.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-ash.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-ash.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-boiler.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-boiler.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-boiler.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-boiler.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-4.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-4.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-farming-4.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-plastics.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-plastics.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-plastics.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-bio-plastics.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-conversion.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-conversion.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-conversion.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-conversion.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass-reprocessing-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-biomass.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-cellulose-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-coal-processing-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-darts-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-depollution-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-electric-energy-super-accumulators.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-electric-energy-super-accumulators.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-electric-energy-super-accumulators.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-electric-energy-super-accumulators.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-fertilizer.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-fertilizer.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-fertilizer.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-fertilizer.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-garden-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-huge-substation.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-huge-substation.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-huge-substation.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-huge-substation.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-resin-extraction.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-resin-extraction.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-resin-extraction.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-resin-extraction.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-steamsolar-combination.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-steamsolar-combination.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-steamsolar-combination.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-steamsolar-combination.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-stone-crushing-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-stone-crushing-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-stone-crushing-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-stone-crushing-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-super-solar-panels.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-super-solar-panels.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-super-solar-panels.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-super-solar-panels.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-timber.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-timber.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-timber.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-timber.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wood-gasification.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wood-gasification.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wood-gasification.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wood-gasification.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-pole-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-1.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-1.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-1.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-2.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-2.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-2.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-3.png b/zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-3.png rename to zzzparanoidal/graphics/Bio_Industries_graphics/graphics/technology/bi-tech-wooden-storage-3.png diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/BI_garden_fan.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/BI_garden_fan.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/BI_garden_fan.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/BI_garden_fan.ogg diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/BI_stonecrusher.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/BI_stonecrusher.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/BI_stonecrusher.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/BI_stonecrusher.ogg diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-01.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-01.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-01.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-01.ogg diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-02.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-02.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-02.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-02.ogg diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-03.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-03.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-03.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-03.ogg diff --git a/zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-04.ogg b/zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-04.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/Bio_Industries_graphics/sound/walking/wood-04.ogg rename to zzzparanoidal/graphics/Bio_Industries_graphics/sound/walking/wood-04.ogg diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/copper-wire.png b/zzzparanoidal/graphics/ThickerLines/copper-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/copper-wire.png rename to zzzparanoidal/graphics/ThickerLines/copper-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/green-wire.png b/zzzparanoidal/graphics/ThickerLines/green-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/green-wire.png rename to zzzparanoidal/graphics/ThickerLines/green-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/hr-copper-wire.png b/zzzparanoidal/graphics/ThickerLines/hr-copper-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/hr-copper-wire.png rename to zzzparanoidal/graphics/ThickerLines/hr-copper-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/hr-green-wire.png b/zzzparanoidal/graphics/ThickerLines/hr-green-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/hr-green-wire.png rename to zzzparanoidal/graphics/ThickerLines/hr-green-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/hr-red-wire.png b/zzzparanoidal/graphics/ThickerLines/hr-red-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/hr-red-wire.png rename to zzzparanoidal/graphics/ThickerLines/hr-red-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/hr-wire-highlight.png b/zzzparanoidal/graphics/ThickerLines/hr-wire-highlight.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/hr-wire-highlight.png rename to zzzparanoidal/graphics/ThickerLines/hr-wire-highlight.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/hr-wire-shadow.png b/zzzparanoidal/graphics/ThickerLines/hr-wire-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/hr-wire-shadow.png rename to zzzparanoidal/graphics/ThickerLines/hr-wire-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/red-wire.png b/zzzparanoidal/graphics/ThickerLines/red-wire.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/red-wire.png rename to zzzparanoidal/graphics/ThickerLines/red-wire.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/wire-highlight.png b/zzzparanoidal/graphics/ThickerLines/wire-highlight.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/wire-highlight.png rename to zzzparanoidal/graphics/ThickerLines/wire-highlight.png diff --git a/zzzparanoidal_1.0.1/graphics/ThickerLines/wire-shadow.png b/zzzparanoidal/graphics/ThickerLines/wire-shadow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ThickerLines/wire-shadow.png rename to zzzparanoidal/graphics/ThickerLines/wire-shadow.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt-inner-corner.png b/zzzparanoidal/graphics/asphalt/asphalt-inner-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt-inner-corner.png rename to zzzparanoidal/graphics/asphalt/asphalt-inner-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt-o.png b/zzzparanoidal/graphics/asphalt/asphalt-o.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt-o.png rename to zzzparanoidal/graphics/asphalt/asphalt-o.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt-outer-corner.png b/zzzparanoidal/graphics/asphalt/asphalt-outer-corner.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt-outer-corner.png rename to zzzparanoidal/graphics/asphalt/asphalt-outer-corner.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt-side.png b/zzzparanoidal/graphics/asphalt/asphalt-side.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt-side.png rename to zzzparanoidal/graphics/asphalt/asphalt-side.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt-u.png b/zzzparanoidal/graphics/asphalt/asphalt-u.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt-u.png rename to zzzparanoidal/graphics/asphalt/asphalt-u.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt.png b/zzzparanoidal/graphics/asphalt/asphalt.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt.png rename to zzzparanoidal/graphics/asphalt/asphalt.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt2.png b/zzzparanoidal/graphics/asphalt/asphalt2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt2.png rename to zzzparanoidal/graphics/asphalt/asphalt2.png diff --git a/zzzparanoidal_1.0.1/graphics/asphalt/asphalt4.png b/zzzparanoidal/graphics/asphalt/asphalt4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/asphalt/asphalt4.png rename to zzzparanoidal/graphics/asphalt/asphalt4.png diff --git a/zzzparanoidal_1.0.1/graphics/bob/fluid-canister.png b/zzzparanoidal/graphics/bob/fluid-canister.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/bob/fluid-canister.png rename to zzzparanoidal/graphics/bob/fluid-canister.png diff --git a/zzzparanoidal_1.0.1/graphics/entity/seafloor-pump-mk2.png b/zzzparanoidal/graphics/entity/seafloor-pump-mk2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/entity/seafloor-pump-mk2.png rename to zzzparanoidal/graphics/entity/seafloor-pump-mk2.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/concrete.png b/zzzparanoidal/graphics/grid/concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/concrete.png rename to zzzparanoidal/graphics/grid/concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/hazard-concrete-left.png b/zzzparanoidal/graphics/grid/hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/hazard-concrete-left.png rename to zzzparanoidal/graphics/grid/hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/hazard-concrete-right.png b/zzzparanoidal/graphics/grid/hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/hazard-concrete-right.png rename to zzzparanoidal/graphics/grid/hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/hr-concrete.png b/zzzparanoidal/graphics/grid/hr-concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/hr-concrete.png rename to zzzparanoidal/graphics/grid/hr-concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/hr-hazard-concrete-left.png b/zzzparanoidal/graphics/grid/hr-hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/hr-hazard-concrete-left.png rename to zzzparanoidal/graphics/grid/hr-hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/grid/hr-hazard-concrete-right.png b/zzzparanoidal/graphics/grid/hr-hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/grid/hr-hazard-concrete-right.png rename to zzzparanoidal/graphics/grid/hr-hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/location-arrow.png b/zzzparanoidal/graphics/location-arrow.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/location-arrow.png rename to zzzparanoidal/graphics/location-arrow.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/left-sh.png b/zzzparanoidal/graphics/ore_radar/left-sh.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/left-sh.png rename to zzzparanoidal/graphics/ore_radar/left-sh.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/left.png b/zzzparanoidal/graphics/ore_radar/left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/left.png rename to zzzparanoidal/graphics/ore_radar/left.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/mid.png b/zzzparanoidal/graphics/ore_radar/mid.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/mid.png rename to zzzparanoidal/graphics/ore_radar/mid.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_icon.png b/zzzparanoidal/graphics/ore_radar/ore_radar_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_icon.png rename to zzzparanoidal/graphics/ore_radar/ore_radar_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_reskin.lua b/zzzparanoidal/graphics/ore_radar/ore_radar_reskin.lua similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_reskin.lua rename to zzzparanoidal/graphics/ore_radar/ore_radar_reskin.lua diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_tech.png b/zzzparanoidal/graphics/ore_radar/ore_radar_tech.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/ore_radar_tech.png rename to zzzparanoidal/graphics/ore_radar/ore_radar_tech.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/right-sh.png b/zzzparanoidal/graphics/ore_radar/right-sh.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/right-sh.png rename to zzzparanoidal/graphics/ore_radar/right-sh.png diff --git a/zzzparanoidal_1.0.1/graphics/ore_radar/right.png b/zzzparanoidal/graphics/ore_radar/right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/ore_radar/right.png rename to zzzparanoidal/graphics/ore_radar/right.png diff --git a/zzzparanoidal_1.0.1/graphics/paranoidal-background-image-2.jpg b/zzzparanoidal/graphics/paranoidal-background-image-2.jpg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/paranoidal-background-image-2.jpg rename to zzzparanoidal/graphics/paranoidal-background-image-2.jpg diff --git a/zzzparanoidal_1.0.1/graphics/paranoidal-background-image-clean.jpg b/zzzparanoidal/graphics/paranoidal-background-image-clean.jpg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/paranoidal-background-image-clean.jpg rename to zzzparanoidal/graphics/paranoidal-background-image-clean.jpg diff --git a/zzzparanoidal_1.0.1/graphics/paranoidal-background-image.jpg b/zzzparanoidal/graphics/paranoidal-background-image.jpg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/paranoidal-background-image.jpg rename to zzzparanoidal/graphics/paranoidal-background-image.jpg diff --git a/zzzparanoidal_1.0.1/graphics/patches/concrete.png b/zzzparanoidal/graphics/patches/concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/concrete.png rename to zzzparanoidal/graphics/patches/concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/patches/hazard-concrete-left.png b/zzzparanoidal/graphics/patches/hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/hazard-concrete-left.png rename to zzzparanoidal/graphics/patches/hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/patches/hazard-concrete-right.png b/zzzparanoidal/graphics/patches/hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/hazard-concrete-right.png rename to zzzparanoidal/graphics/patches/hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/patches/hr-concrete.png b/zzzparanoidal/graphics/patches/hr-concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/hr-concrete.png rename to zzzparanoidal/graphics/patches/hr-concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/patches/hr-hazard-concrete-left.png b/zzzparanoidal/graphics/patches/hr-hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/hr-hazard-concrete-left.png rename to zzzparanoidal/graphics/patches/hr-hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/patches/hr-hazard-concrete-right.png b/zzzparanoidal/graphics/patches/hr-hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/patches/hr-hazard-concrete-right.png rename to zzzparanoidal/graphics/patches/hr-hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/concrete.png b/zzzparanoidal/graphics/smooth/concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/concrete.png rename to zzzparanoidal/graphics/smooth/concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/hazard-concrete-left.png b/zzzparanoidal/graphics/smooth/hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/hazard-concrete-left.png rename to zzzparanoidal/graphics/smooth/hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/hazard-concrete-right.png b/zzzparanoidal/graphics/smooth/hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/hazard-concrete-right.png rename to zzzparanoidal/graphics/smooth/hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/hr-concrete.png b/zzzparanoidal/graphics/smooth/hr-concrete.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/hr-concrete.png rename to zzzparanoidal/graphics/smooth/hr-concrete.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/hr-hazard-concrete-left.png b/zzzparanoidal/graphics/smooth/hr-hazard-concrete-left.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/hr-hazard-concrete-left.png rename to zzzparanoidal/graphics/smooth/hr-hazard-concrete-left.png diff --git a/zzzparanoidal_1.0.1/graphics/smooth/hr-hazard-concrete-right.png b/zzzparanoidal/graphics/smooth/hr-hazard-concrete-right.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/smooth/hr-hazard-concrete-right.png rename to zzzparanoidal/graphics/smooth/hr-hazard-concrete-right.png diff --git a/zzzparanoidal_1.0.1/graphics/stockpile-icon.png b/zzzparanoidal/graphics/stockpile-icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/stockpile-icon.png rename to zzzparanoidal/graphics/stockpile-icon.png diff --git a/zzzparanoidal_1.0.1/graphics/tips-and-tricks/1-1-1-start.png b/zzzparanoidal/graphics/tips-and-tricks/1-1-1-start.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/tips-and-tricks/1-1-1-start.png rename to zzzparanoidal/graphics/tips-and-tricks/1-1-1-start.png diff --git a/zzzparanoidal_1.0.1/graphics/tips-and-tricks/no-update.png b/zzzparanoidal/graphics/tips-and-tricks/no-update.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/tips-and-tricks/no-update.png rename to zzzparanoidal/graphics/tips-and-tricks/no-update.png diff --git a/zzzparanoidal_1.0.1/graphics/train/bbr-rail-brick-icon.png b/zzzparanoidal/graphics/train/bbr-rail-brick-icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/bbr-rail-brick-icon.png rename to zzzparanoidal/graphics/train/bbr-rail-brick-icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/av1_sheet.png b/zzzparanoidal/graphics/train/electric/av1_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/av1_sheet.png rename to zzzparanoidal/graphics/train/electric/av1_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/av2_sheet.png b/zzzparanoidal/graphics/train/electric/av2_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/av2_sheet.png rename to zzzparanoidal/graphics/train/electric/av2_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/av3_sheet.png b/zzzparanoidal/graphics/train/electric/av3_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/av3_sheet.png rename to zzzparanoidal/graphics/train/electric/av3_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/bet-charger-2_tech.png b/zzzparanoidal/graphics/train/electric/bet-charger-2_tech.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/bet-charger-2_tech.png rename to zzzparanoidal/graphics/train/electric/bet-charger-2_tech.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/bet-charger-3_tech.png b/zzzparanoidal/graphics/train/electric/bet-charger-3_tech.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/bet-charger-3_tech.png rename to zzzparanoidal/graphics/train/electric/bet-charger-3_tech.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/charger_icon.png b/zzzparanoidal/graphics/train/electric/charger_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/charger_icon.png rename to zzzparanoidal/graphics/train/electric/charger_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/charger_sheet.png b/zzzparanoidal/graphics/train/electric/charger_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/charger_sheet.png rename to zzzparanoidal/graphics/train/electric/charger_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/factory_var_1_icon.png b/zzzparanoidal/graphics/train/electric/factory_var_1_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/factory_var_1_icon.png rename to zzzparanoidal/graphics/train/electric/factory_var_1_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/factory_var_2_icon.png b/zzzparanoidal/graphics/train/electric/factory_var_2_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/factory_var_2_icon.png rename to zzzparanoidal/graphics/train/electric/factory_var_2_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/factory_var_3_icon.png b/zzzparanoidal/graphics/train/electric/factory_var_3_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/factory_var_3_icon.png rename to zzzparanoidal/graphics/train/electric/factory_var_3_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/kurts_sheet-0.png b/zzzparanoidal/graphics/train/electric/kurts_sheet-0.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/kurts_sheet-0.png rename to zzzparanoidal/graphics/train/electric/kurts_sheet-0.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/kurts_sheet-1.png b/zzzparanoidal/graphics/train/electric/kurts_sheet-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/kurts_sheet-1.png rename to zzzparanoidal/graphics/train/electric/kurts_sheet-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/electric/super_charger_tech.png b/zzzparanoidal/graphics/train/electric/super_charger_tech.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/electric/super_charger_tech.png rename to zzzparanoidal/graphics/train/electric/super_charger_tech.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-10.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-10.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-11.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-11.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-12.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-12.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-13.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-13.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-14.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-14.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-15.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-15.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-16.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-16.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-9.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-9.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/generic-fluid-wagon-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-10.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-10.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-11.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-11.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-12.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-12.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-13.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-13.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-14.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-14.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-15.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-15.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-16.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-16.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-9.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-9.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/hr-generic-fluid-wagon-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/icon-map-selected.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/icon-map-selected.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/icon-map-selected.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/icon-map-selected.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/icon-map.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/icon-map.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/icon-map.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/icon-map.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-10.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-10.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-11.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-11.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-12.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-12.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-13.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-13.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-14.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-14.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-15.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-15.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-16.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-16.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-9.png b/zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-fluid-wagon/sh-9.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-fluid-wagon/sh-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/generic-wagon-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/generic-wagon-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/hr-generic-wagon-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/icon-map-selected.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/icon-map-selected.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/icon-map-selected.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/icon-map-selected.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/icon-map.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/icon-map.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/icon-map.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/icon-map.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-1.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-1.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-2.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-2.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-3.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-3.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-4.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-4.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-5.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-5.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-6.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-6.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-7.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-7.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-8.png b/zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-8.png rename to zzzparanoidal/graphics/train/hiend/ht-generic-wagon/sh-generic-wagon-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/bonk.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/bonk.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/bonk.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/bonk.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-1.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-1.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-10.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-10.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-11.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-11.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-12.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-12.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-13.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-13.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-14.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-14.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-15.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-15.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-16.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-16.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-2.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-2.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-3.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-3.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-4.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-4.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-5.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-5.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-6.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-6.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-7.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-7.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-8.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-8.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-9.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-pyloco-9.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-pyloco-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-1.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-1.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-10.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-10.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-11.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-11.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-12.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-12.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-13.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-13.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-14.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-14.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-15.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-15.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-16.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-16.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-2.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-2.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-3.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-3.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-4.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-4.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-5.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-5.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-6.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-6.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-7.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-7.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-8.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-8.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-9.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/hr-sh-9.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/hr-sh-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-break.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-break.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-break.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-break.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-close.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-close.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-close.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-close.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-end-engine.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-end-engine.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-end-engine.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-end-engine.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-engine.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-engine.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-engine.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-engine.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-open.ogg b/zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-open.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/ht-locomotive-open.ogg rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/ht-locomotive-open.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/icon-map-selected.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/icon-map-selected.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/icon-map-selected.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/icon-map-selected.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/icon-map.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/icon-map.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/icon-map.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/icon-map.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/light-cone.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/light-cone.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/light-cone.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/light-cone.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-1.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-1.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-10.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-10.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-11.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-11.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-12.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-12.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-13.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-13.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-14.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-14.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-15.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-15.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-16.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-16.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-2.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-2.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-3.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-3.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-4.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-4.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-5.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-5.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-6.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-6.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-7.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-7.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-8.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-8.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-9.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/pyloco-9.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/pyloco-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-1.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-1.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-10.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-10.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-10.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-10.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-11.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-11.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-11.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-11.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-12.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-12.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-12.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-12.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-13.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-13.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-13.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-13.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-14.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-14.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-14.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-14.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-15.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-15.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-15.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-15.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-16.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-16.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-16.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-16.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-2.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-2.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-3.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-3.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-4.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-4.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-5.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-5.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-6.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-6.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-7.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-7.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-8.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-8.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-8.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-8.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-9.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-9.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/sh-9.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/sh-9.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/spot.png b/zzzparanoidal/graphics/train/hiend/ht-locomotive/spot.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-locomotive/spot.png rename to zzzparanoidal/graphics/train/hiend/ht-locomotive/spot.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hiend/ht-trains-tech.png b/zzzparanoidal/graphics/train/hiend/ht-trains-tech.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hiend/ht-trains-tech.png rename to zzzparanoidal/graphics/train/hiend/ht-trains-tech.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hr-train-stop-bottom.png b/zzzparanoidal/graphics/train/hr-train-stop-bottom.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hr-train-stop-bottom.png rename to zzzparanoidal/graphics/train/hr-train-stop-bottom.png diff --git a/zzzparanoidal_1.0.1/graphics/train/hr-train-stop-ground.png b/zzzparanoidal/graphics/train/hr-train-stop-ground.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/hr-train-stop-ground.png rename to zzzparanoidal/graphics/train/hr-train-stop-ground.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usl_icon.png b/zzzparanoidal/graphics/train/t0/usl_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usl_icon.png rename to zzzparanoidal/graphics/train/t0/usl_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usl_sheet-0.png b/zzzparanoidal/graphics/train/t0/usl_sheet-0.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usl_sheet-0.png rename to zzzparanoidal/graphics/train/t0/usl_sheet-0.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usl_sheet-1.png b/zzzparanoidal/graphics/train/t0/usl_sheet-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usl_sheet-1.png rename to zzzparanoidal/graphics/train/t0/usl_sheet-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usw_icon.png b/zzzparanoidal/graphics/train/t0/usw_icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usw_icon.png rename to zzzparanoidal/graphics/train/t0/usw_icon.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usw_ns.png b/zzzparanoidal/graphics/train/t0/usw_ns.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usw_ns.png rename to zzzparanoidal/graphics/train/t0/usw_ns.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usw_sheet.png b/zzzparanoidal/graphics/train/t0/usw_sheet.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usw_sheet.png rename to zzzparanoidal/graphics/train/t0/usw_sheet.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t0/usw_we.png b/zzzparanoidal/graphics/train/t0/usw_we.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t0/usw_we.png rename to zzzparanoidal/graphics/train/t0/usw_we.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-0.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-0.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-0.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-0.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-1.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-1.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-2.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-2.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-3.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-3.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-4.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-4.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-5.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-5.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-6.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-6.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-7.png b/zzzparanoidal/graphics/train/t1/se_cbl_sheet-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t1/se_cbl_sheet-7.png rename to zzzparanoidal/graphics/train/t1/se_cbl_sheet-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-0.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-0.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-0.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-0.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-1.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-1.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-2.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-2.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-3.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-3.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-4.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-4.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-5.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-5.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-6.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-6.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-7.png b/zzzparanoidal/graphics/train/t2/se_wt580of_sheet-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t2/se_wt580of_sheet-7.png rename to zzzparanoidal/graphics/train/t2/se_wt580of_sheet-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-0.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-0.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-0.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-0.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-1.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-1.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-1.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-1.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-2.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-2.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-2.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-2.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-3.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-3.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-3.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-3.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-4.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-4.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-4.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-4.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-5.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-5.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-5.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-5.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-6.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-6.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-6.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-6.png diff --git a/zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-7.png b/zzzparanoidal/graphics/train/t3/LOK_D1_sheet-7.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/t3/LOK_D1_sheet-7.png rename to zzzparanoidal/graphics/train/t3/LOK_D1_sheet-7.png diff --git a/zzzparanoidal_1.0.1/graphics/train/train-engine.ogg b/zzzparanoidal/graphics/train/train-engine.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/train-engine.ogg rename to zzzparanoidal/graphics/train/train-engine.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/train-stop-bottom.png b/zzzparanoidal/graphics/train/train-stop-bottom.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/train-stop-bottom.png rename to zzzparanoidal/graphics/train/train-stop-bottom.png diff --git a/zzzparanoidal_1.0.1/graphics/train/train-stop-ground.png b/zzzparanoidal/graphics/train/train-stop-ground.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/train-stop-ground.png rename to zzzparanoidal/graphics/train/train-stop-ground.png diff --git a/zzzparanoidal_1.0.1/graphics/train/train-wheels.ogg b/zzzparanoidal/graphics/train/train-wheels.ogg similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/train-wheels.ogg rename to zzzparanoidal/graphics/train/train-wheels.ogg diff --git a/zzzparanoidal_1.0.1/graphics/train/train_reskin.lua b/zzzparanoidal/graphics/train/train_reskin.lua similarity index 100% rename from zzzparanoidal_1.0.1/graphics/train/train_reskin.lua rename to zzzparanoidal/graphics/train/train_reskin.lua diff --git a/zzzparanoidal_1.0.1/graphics/upgrade-icon.png b/zzzparanoidal/graphics/upgrade-icon.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/upgrade-icon.png rename to zzzparanoidal/graphics/upgrade-icon.png diff --git a/zzzparanoidal_1.0.1/graphics/upgrade.png b/zzzparanoidal/graphics/upgrade.png similarity index 100% rename from zzzparanoidal_1.0.1/graphics/upgrade.png rename to zzzparanoidal/graphics/upgrade.png diff --git a/zzzparanoidal/info.json b/zzzparanoidal/info.json new file mode 100644 index 00000000..b66f81d8 --- /dev/null +++ b/zzzparanoidal/info.json @@ -0,0 +1,32 @@ +{ + "name": "zzzparanoidal", + "version": "1.0.1", + "title": "!_Paranoidal", + "factorio_version": "1.1", + "author": "Sovigod", + "contact": "https://discord.gg/MnXGAmC", + "homepage": "https://discord.gg/MnXGAmC", + "description": "Paranoidal core mod for 1.1", + "dependencies": [ + "base >= 1.1.100", + "boblibrary", + "boblibrary", + "BatteryElectricTrain", + "? angelsindustries", + "? angelsrefining", + "? extendedangels", + "angelsbioprocessing", + "angelssmelting", + "KaoExtended", + "expanded-rocket-payloads", + "MilesBobsExpansion", + "Clowns-AngelBob-Nuclear", + "Clowns-Processing", + "bobwarfare", + "bobrevamp", + "AtomicArtillery", + "Bio_Industries", + "marathon", + "RU-locale" + ] +} \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/locale/en/locale.cfg b/zzzparanoidal/locale/en/locale.cfg similarity index 100% rename from zzzparanoidal_1.0.1/locale/en/locale.cfg rename to zzzparanoidal/locale/en/locale.cfg diff --git a/zzzparanoidal/locale/en/tips-and-tricks.cfg b/zzzparanoidal/locale/en/tips-and-tricks.cfg new file mode 100644 index 00000000..da6a389b --- /dev/null +++ b/zzzparanoidal/locale/en/tips-and-tricks.cfg @@ -0,0 +1,11 @@ +[tips-and-tricks-name] + +start=[font=default-bold]PARANOIDAL[/font] +no-update=[font=default-bold]1.PARANOIDAL[/font] - Π½Π΅ обновляйтС ΠΌΠΎΠ΄Ρ‹! + +[tips-and-tricks-description] + +start=\n\n[color=255,0,0][font=default-bold] Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² FACTORIO PARANOIDAL[/font][/color]\n\n Π­Ρ‚ΠΎ хардкорная ΠΈ ΠΎΡ‡Π΅Π½ΡŒ интСрСсная мСгасборка для [font=default-bold]Factorio[/font].\n Π—Π΄Π΅ΡΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ порядка 200 Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ², тСсно ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Ρ‘Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.\n \n Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ совСты ΠΈ подсказки для выТивания Π² PARANOIDAL.\n Они Π±ΡƒΠ΄ΡƒΡ‚ постСпСнно ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ для вас ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. \n Если Ρƒ вас появились вопросы ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ прСдлоТСния/Π±Π°Π³Ρ€Π΅ΠΏΠΎΡ€Ρ‚Ρ‹, смСло ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ Π² наш Дискорд сСрвСр. +no-update=НС обновляйтС ΠΌΠΎΠ΄Ρ‹, входящиС Π² сборку ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, это сломаСт Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΡŽ!\nΠ‘Π±ΠΎΡ€ΠΊΠ° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ настроСна Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.\nЕсли ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ настройки ΠΌΠΎΠ΄ΠΎΠ² - послСдствия Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ повСдСния этих ΠΌΠΎΠ΄ΠΎΠ², ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ совмСстимости ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ нСработоспособности сборки - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вас.\nΠ‘Π±ΠΎΡ€ΠΊΠ° сломалась ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π£Π΄Π°Π»ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΏΠΊΡƒ mods, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ сборку с GitHub. + + diff --git a/zzzparanoidal/locale/locale-pumps.lua b/zzzparanoidal/locale/locale-pumps.lua new file mode 100644 index 00000000..cd4d3ba0 --- /dev/null +++ b/zzzparanoidal/locale/locale-pumps.lua @@ -0,0 +1,29 @@ +local powered_pump = data.raw["assembling-machine"] +local technology = data.raw.technology + +local field_font = "\n[font=default-semibold][color=#ffe6c0]" +local field_font_2 = "[font=default-semibold][color=#ffe6c0]" +local end_font = ": [/color][/font]" + +local pumpjack_name = {"string.water-pumpjack"} +local pumpjack_tech_desc = {"technology-description.water-pumpjack"} + +local pumping_speed = {"description.pumping-speed"} + +-- Water pumpjacks + +powered_pump["water-pumpjack-1"].localised_name = {"", pumpjack_name} +powered_pump["water-pumpjack-2"].localised_name = {"", pumpjack_name, " 2"} +powered_pump["water-pumpjack-3"].localised_name = {"", pumpjack_name, " 3"} +powered_pump["water-pumpjack-4"].localised_name = {"", pumpjack_name, " 4"} +powered_pump["water-pumpjack-5"].localised_name = {"", pumpjack_name, " 5"} +powered_pump["water-pumpjack-1"].localised_description = {"", field_font_2, pumping_speed, end_font .. "30/s"} +powered_pump["water-pumpjack-2"].localised_description = {"", field_font_2, pumping_speed, end_font .. "60/s"} +powered_pump["water-pumpjack-3"].localised_description = {"", field_font_2, pumping_speed, end_font .. "90/s"} +powered_pump["water-pumpjack-4"].localised_description = {"", field_font_2, pumping_speed, end_font .. "120/s"} +powered_pump["water-pumpjack-5"].localised_description = {"", field_font_2, pumping_speed, end_font .. "150/s"} +technology["water-pumpjack-1"].localised_description = {"", pumpjack_tech_desc} +technology["water-pumpjack-2"].localised_description = {"", pumpjack_tech_desc} +technology["water-pumpjack-3"].localised_description = {"", pumpjack_tech_desc} +technology["water-pumpjack-4"].localised_description = {"", pumpjack_tech_desc} +technology["water-pumpjack-5"].localised_description = {"", pumpjack_tech_desc} diff --git a/zzzparanoidal_1.0.1/locale/ru/locale-artillery-prototype.cfg b/zzzparanoidal/locale/ru/locale-artillery-prototype.cfg similarity index 100% rename from zzzparanoidal_1.0.1/locale/ru/locale-artillery-prototype.cfg rename to zzzparanoidal/locale/ru/locale-artillery-prototype.cfg diff --git a/zzzparanoidal/locale/ru/locale.cfg b/zzzparanoidal/locale/ru/locale.cfg new file mode 100644 index 00000000..ae0c50df --- /dev/null +++ b/zzzparanoidal/locale/ru/locale.cfg @@ -0,0 +1,116 @@ +[string] +water-pumpjack=Water pumpjack + +[mod-setting-name] +paranoidal-miniloader-energy-multiplier=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ энСргопотрСблСния ΠΌΠΈΠ½ΠΈΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² +paranoidal-flowfix-min-time=МинимальноС врСмя для Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ +paranoidal-disable-vanilla-evolution=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π°Π½ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ +stone-path-concrete=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: НовоС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ для ΠΊΠΈΡ€ΠΏΠΈΡ‡Π° +fitolamps=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π€ΠΈΡ‚ΠΎΠ»Π°ΠΌΠΏΡ‹ +res_loc_1=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК1 +res_loc_2=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК2 +res_loc_3=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК3 +res_loc_e=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин элСктропоСзда +wire=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π£Ρ‚ΠΎΠ»Ρ‰Π΅Π½Π½Ρ‹Π΅ логичСскиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° +copper_wire=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π£Ρ‚ΠΎΠ»Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Π΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° +baa-arrow-scale=Π Π°Π·ΠΌΠ΅Ρ€ стрСлки +baa-arrow-tint=Π¦Π²Π΅Ρ‚ стрСлки +item-drop=Π Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹Π΅ сундуки Π²Ρ‹ΡΡ‹ΠΏΠ°ΡŽΡ‚ содСрТимоС +newbie_resourse=Богатство всСх рСсурсов x5 + + +[mod-setting-description] +paranoidal-miniloader-energy-multiplier=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ всСх ΠΌΠΈΠ½ΠΈΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΌΠΎΠ΄Π΅ "miniloaders", ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° этот коэффициСнт. +paranoidal-flowfix-min-time=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ с мСньшим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»Π΅Ρ‡Π΅Π½Ρ‹ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ,Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ рСсурсам ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ +paranoidal-disable-vanilla-evolution=ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ ΠΆΡƒΠΊΠΎΠ² ΠΏΡ€ΠΈ создании ΠΊΠ°Ρ€Ρ‚Ρ‹. Π‘ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΏΠΎ исслСдованиям. +stone-path-concrete=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Concretexture +fitolamps=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ освСщСниС Ρ„ΠΈΡ‚ΠΎΠ»Π°ΠΌΠΏΠ°ΠΌΠΈ Π² Ρ‚Π΅ΠΏΠ»ΠΈΡ†Π°Ρ… ΠΈ Π±ΠΈΠΎΡ„Π΅Ρ€ΠΌΠ°Ρ… (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). +res_loc_1=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). +res_loc_2=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). +res_loc_3=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). +res_loc_e=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). +wire=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° ThickerLines +copper_wire=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° ThickerLines +item-drop=Π Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹Π΅ сундуки Π²Ρ‹ΡΡ‹ΠΏΠ°ΡŽΡ‚ содСрТимоС +newbie_resourse=НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•Π’Π‘Π― ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ссли Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Paranoidal + + +[item-name] +stone-crushed=Π”Ρ€ΠΎΠ±Π»Ρ‘Π½Ρ‹ΠΉ камСнь +bi-stone-crusher=Π˜Π·ΠΌΠ΅Π»ΡŒΡ‡ΠΈΡ‚Π΅Π»ΡŒ камня +hazard-concrete-brick=Π‘Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΈΡ€ΠΏΠΈΡ‡ с Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ опасности +hero_downgrade=Π Π°Π·ΠΆΠ°Π»ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΡƒΡ€Π΅Π»Π΅ΠΉ +super_charger=ЗарядноС устройство аккумуляторной Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ МК4 +hiend_loco=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +hiend_wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +hiend_fluid_wagon=Π’Π°Π³ΠΎΠ½-цистСрна Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ +seafloor-pump-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос +seafloor-pump-2-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК2 +seafloor-pump-3-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК3 + +[item-description] +orbital-solar-collector=Π‘ΠΏΡƒΡ‚Π½ΠΈΠΊ, способный ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° синхронной ΠΎΡ€Π±ΠΈΡ‚Π΅ Π΄ΠΎ 1000 ΠΌΠ΅Π³Π°Π²Π°Ρ‚Ρ‚ мощности ΠΎΡ‚ блиТайшСй Π·Π²Π΅Π·Π΄Ρ‹ ΠΈ Ρ€Π΅Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ Π² Π½Π°Π·Π΅ΠΌΠ½ΡƒΡŽ ΠΏΡ€ΠΈΡ‘ΠΌΠΎ-ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΡƒΡŽ ΡΡ‚Π°Π½Ρ†ΠΈΡŽ. +orbital-power-reciver=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π·Π΅ΠΌΠ»Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ энСргСтичСский ΠΏΡƒΡ‡ΠΎΠΊ, посылаСмый Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ с ΠΎΡ€Π±ΠΈΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ спутника ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² 1000 ΠœΠ’Ρ‚ мощности для Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ элСктросСти. +seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. +seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. + +[recipe-name] +scrap-rail-to-rail=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ дСрСвянных Ρ€Π΅Π»ΡŒΡ +rail-signal-scrap-to-rail-signal=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ свСтофора +rail-chain-signal-scrap-to-rail-chain-signal=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ свСтофора +train-stop-scrap-to-train-stop=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ станции + +[recipe-description] +scrap-rail-to-rail=Π—Π°ΠΌΠ΅Π½Π° дСрСвянных шпал Π½Π° Π±Π΅Ρ‚ΠΎΠ½Π½Ρ‹Π΅ +seafloor-pump=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. +seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. +seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. + +[entity-name] +yir_usl=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² МК0 +yir_us_cargo=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ МК0 +super_charger=ЗарядноС устройство аккумуляторной Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ МК4 +hiend_loco=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +hiend_wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +hiend_fluid_wagon=Π’Π°Π³ΠΎΠ½-цистСрна Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ +seafloor-pump-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос +seafloor-pump-2-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК2 +seafloor-pump-3-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК3 + +[entity-description] +orbital-power-reciver=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π·Π΅ΠΌΠ»Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ энСргСтичСский ΠΏΡƒΡ‡ΠΎΠΊ, посылаСмый Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ с ΠΎΡ€Π±ΠΈΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ спутника ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² 1000 ΠœΠ’Ρ‚ мощности для Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ элСктросСти. +seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. +seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. + +[technology-name] +alien-artifact=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Ρ… Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² +super_charger=ЗарядноС устройство для аккумуляторных Π±Π»ΠΎΠΊΠΎΠ² элСктровоза 4 +hiend_train=ПоСзда Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ +platinum-ore-refining=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€ΡƒΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚ΠΈΠ½Ρ‹ +flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ + +[technology-description] +alien-artifact=ВСхнология, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΡ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠΌΡƒΡ‚Π°Ρ†ΠΈΡŽ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡ… Π²ΠΈΠ΄Ρ‹. +super_charger=Π‘ΠΎΠ»Π΅Π΅ быстрыС зарядныС устройства для аккумуляторных Π±Π»ΠΎΠΊΠΎΠ² элСктровоза. +hiend_train=ИспользованиС ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠΈ позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… скоростСй. +platinum-ore-refining=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€ΡƒΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚ΠΈΠ½Ρ‹ + +[item-group-name] +transport=Вранспорт +circuit=Π›ΠΎΠ³ΠΈΠΊΠ° + +[tile-name] +concrete-brick-fix=ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΈΡ€ΠΏΠΈΡ‡Π΅ΠΌ +reinforced-concrete-brick-fix=ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΆΠ΅Π»Π΅Π·ΠΎΠ±Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΈΡ€ΠΏΠΈΡ‡Π΅ΠΌ + +[description] +tank-size=[font=default-semibold][color=255,230,192]ΠžΠ±ΡŠΡ‘ΠΌ: [/color][/font]__1__ +pressure=[font=default-semibold][color=255,230,192]Π”Π°Π²Π»Π΅Π½ΠΈΠ΅: [/color][/font]__1__ +building-size=[font=default-semibold][color=255,230,192]Π Π°Π·ΠΌΠ΅Ρ€: [/color][/font]__1__x__2__ +max-heat=[font=default-semibold][color=255,230,192]Макс. Π½Π°Π³Ρ€Π΅Π²: [/color][/font]__1__ Β°C +radar-primary-range=[font=default-semibold][color=255,230,192]Радиус ΠΎΠ±Π·ΠΎΡ€Π°: [/color][/font]__1__ chunks +radar-secondary-range=[font=default-semibold][color=255,230,192]Радиус скана: [/color][/font]__1__ chunks +inserter-speed=[font=default-semibold][color=255,230,192]Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:[/color][/font]\n +inserter-belt-speed=[font=default-semibold][color=255,230,192] β€’ Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ: [/color][/font]__1__ Items/s diff --git a/zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1.json b/zzzparanoidal/migrations/zzzparanoidal_1.0.1.json similarity index 100% rename from zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1.json rename to zzzparanoidal/migrations/zzzparanoidal_1.0.1.json diff --git a/zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1_2.json b/zzzparanoidal/migrations/zzzparanoidal_1.0.1_2.json similarity index 100% rename from zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1_2.json rename to zzzparanoidal/migrations/zzzparanoidal_1.0.1_2.json diff --git a/zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1_3.json b/zzzparanoidal/migrations/zzzparanoidal_1.0.1_3.json similarity index 100% rename from zzzparanoidal_1.0.1/migrations/zzzparanoidal_1.0.1_3.json rename to zzzparanoidal/migrations/zzzparanoidal_1.0.1_3.json diff --git a/zzzparanoidal_1.0.1/prototypes/Angels_RBOS.lua b/zzzparanoidal/prototypes/Angels_RBOS.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/Angels_RBOS.lua rename to zzzparanoidal/prototypes/Angels_RBOS.lua diff --git a/zzzparanoidal_1.0.1/prototypes/BetterAlertArrows_100.lua b/zzzparanoidal/prototypes/BetterAlertArrows_100.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/BetterAlertArrows_100.lua rename to zzzparanoidal/prototypes/BetterAlertArrows_100.lua diff --git a/zzzparanoidal_1.0.1/prototypes/ColorCodedPlanners_101.lua b/zzzparanoidal/prototypes/ColorCodedPlanners_101.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/ColorCodedPlanners_101.lua rename to zzzparanoidal/prototypes/ColorCodedPlanners_101.lua diff --git a/zzzparanoidal_1.0.1/prototypes/ThickerLines.lua b/zzzparanoidal/prototypes/ThickerLines.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/ThickerLines.lua rename to zzzparanoidal/prototypes/ThickerLines.lua diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-shell.png b/zzzparanoidal/prototypes/artillery-prototype/artillery-shell.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-shell.png rename to zzzparanoidal/prototypes/artillery-prototype/artillery-shell.png diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-shoots.ogg b/zzzparanoidal/prototypes/artillery-prototype/artillery-shoots.ogg similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-shoots.ogg rename to zzzparanoidal/prototypes/artillery-prototype/artillery-shoots.ogg diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-base.png b/zzzparanoidal/prototypes/artillery-prototype/artillery-turret-base.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-base.png rename to zzzparanoidal/prototypes/artillery-prototype/artillery-turret-base.png diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-prototype-final-fix.lua b/zzzparanoidal/prototypes/artillery-prototype/artillery-turret-prototype-final-fix.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-prototype-final-fix.lua rename to zzzparanoidal/prototypes/artillery-prototype/artillery-turret-prototype-final-fix.lua diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-prototype.lua b/zzzparanoidal/prototypes/artillery-prototype/artillery-turret-prototype.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret-prototype.lua rename to zzzparanoidal/prototypes/artillery-prototype/artillery-turret-prototype.lua diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret.png b/zzzparanoidal/prototypes/artillery-prototype/artillery-turret.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery-turret.png rename to zzzparanoidal/prototypes/artillery-prototype/artillery-turret.png diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery.png b/zzzparanoidal/prototypes/artillery-prototype/artillery.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/artillery.png rename to zzzparanoidal/prototypes/artillery-prototype/artillery.png diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/hr-artillery-turret-base.png b/zzzparanoidal/prototypes/artillery-prototype/hr-artillery-turret-base.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/hr-artillery-turret-base.png rename to zzzparanoidal/prototypes/artillery-prototype/hr-artillery-turret-base.png diff --git a/zzzparanoidal_1.0.1/prototypes/artillery-prototype/hr-shell.png b/zzzparanoidal/prototypes/artillery-prototype/hr-shell.png similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/artillery-prototype/hr-shell.png rename to zzzparanoidal/prototypes/artillery-prototype/hr-shell.png diff --git a/zzzparanoidal_1.0.1/prototypes/assemblers.lua b/zzzparanoidal/prototypes/assemblers.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/assemblers.lua rename to zzzparanoidal/prototypes/assemblers.lua diff --git a/zzzparanoidal_1.0.1/prototypes/beltentities.lua b/zzzparanoidal/prototypes/beltentities.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/beltentities.lua rename to zzzparanoidal/prototypes/beltentities.lua diff --git a/zzzparanoidal/prototypes/bobfix.lua b/zzzparanoidal/prototypes/bobfix.lua new file mode 100644 index 00000000..ca23e3d9 --- /dev/null +++ b/zzzparanoidal/prototypes/bobfix.lua @@ -0,0 +1,6 @@ + --bobplates small icon size saves vram + + data.raw.technology["fluid-canister-processing"].icon_size = 128 + data.raw.technology["fluid-canister-processing"].icon = "__zzzparanoidal__/graphics/bob/fluid-canister.png" + + -- \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/prototypes/boiler-effectivity.lua b/zzzparanoidal/prototypes/boiler-effectivity.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/boiler-effectivity.lua rename to zzzparanoidal/prototypes/boiler-effectivity.lua diff --git a/zzzparanoidal_1.0.1/prototypes/change-background.lua b/zzzparanoidal/prototypes/change-background.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/change-background.lua rename to zzzparanoidal/prototypes/change-background.lua diff --git a/zzzparanoidal_1.0.1/prototypes/entity/entity.lua b/zzzparanoidal/prototypes/entity/entity.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/entity/entity.lua rename to zzzparanoidal/prototypes/entity/entity.lua diff --git a/zzzparanoidal_1.0.1/prototypes/fish.lua b/zzzparanoidal/prototypes/fish.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/fish.lua rename to zzzparanoidal/prototypes/fish.lua diff --git a/zzzparanoidal_1.0.1/prototypes/fluid-void.lua b/zzzparanoidal/prototypes/fluid-void.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/fluid-void.lua rename to zzzparanoidal/prototypes/fluid-void.lua diff --git a/zzzparanoidal_1.0.1/prototypes/fuel.lua b/zzzparanoidal/prototypes/fuel.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/fuel.lua rename to zzzparanoidal/prototypes/fuel.lua diff --git a/zzzparanoidal_1.0.1/prototypes/gas-void.lua b/zzzparanoidal/prototypes/gas-void.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/gas-void.lua rename to zzzparanoidal/prototypes/gas-void.lua diff --git a/zzzparanoidal_1.0.1/prototypes/generators.lua b/zzzparanoidal/prototypes/generators.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/generators.lua rename to zzzparanoidal/prototypes/generators.lua diff --git a/zzzparanoidal_1.0.1/prototypes/landfill-pump.lua b/zzzparanoidal/prototypes/landfill-pump.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/landfill-pump.lua rename to zzzparanoidal/prototypes/landfill-pump.lua diff --git a/zzzparanoidal_1.0.1/prototypes/map-gen-presets.lua b/zzzparanoidal/prototypes/map-gen-presets.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/map-gen-presets.lua rename to zzzparanoidal/prototypes/map-gen-presets.lua diff --git a/zzzparanoidal_1.0.1/prototypes/micro-final-fix.lua b/zzzparanoidal/prototypes/micro-final-fix.lua similarity index 77% rename from zzzparanoidal_1.0.1/prototypes/micro-final-fix.lua rename to zzzparanoidal/prototypes/micro-final-fix.lua index c52dd67f..e8ba4293 100644 --- a/zzzparanoidal_1.0.1/prototypes/micro-final-fix.lua +++ b/zzzparanoidal/prototypes/micro-final-fix.lua @@ -953,11 +953,16 @@ data.raw["recipe"]["angels-concrete"].hidden = true bobmods.lib.tech.remove_recipe_unlock("angels-stone-smelting-2", "angels-concrete") ------------------------------------------------------------------------------------------------- --графичСскиС фиксы -data.raw.technology["plutonium-fuel-cell"].icon_size = 64 -data.raw.technology["plutonium-fuel-cell"].icon_mipmaps = 4 +data.raw.technology["plutonium-fuel-cell"].icons = {{icon = "__bobplates__/graphics/icons/nuclear/plutonium-fuel-cell.png", icon_size = 64, icon_mipmaps = 4}} --AKMF +data.raw.technology["thorium-plutonium-fuel-cell"].icons = {{icon = "__bobplates__/graphics/icons/nuclear/thorium-plutonium-fuel-cell.png", icon_size = 64, icon_mipmaps = 4}} --AKMF +data.raw.tool["advanced-logistic-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/science/logistic-science-pack-2-128.png", icon_size = 128}} --AKMF +data.raw.technology["logistic-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/logistic-science-pack-128.png", icon_size = 128}} --SEO +data.raw.technology["military-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/military-science-pack-128.png", icon_size = 128}} --SEO +data.raw.technology["chemical-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/chemical-science-pack-128.png", icon_size = 128}} --SEO +data.raw.technology["production-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/production-science-pack-128.png", icon_size = 128}} --SEO +data.raw.technology["utility-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/utility-science-pack-128.png", icon_size = 128}} --SEO +data.raw.technology["space-science-pack"].icons = {{icon = "__bobicons__/graphics/icons/base/space-science-pack-128.png", icon_size = 128}} --SEO -data.raw.technology["thorium-plutonium-fuel-cell"].icon_size = 64 -data.raw.technology["thorium-plutonium-fuel-cell"].icon_mipmaps = 4 data.raw.technology["effect-transmission"].icon = "__base__/graphics/technology/effect-transmission.png" data.raw.technology["effect-transmission"].icon_size = 256 @@ -993,10 +998,23 @@ data.raw.technology["electric-pole-4"].icon = "__base__/graphics/technology/elec data.raw.technology["electric-pole-4"].icon_size = 256 data.raw.technology["angels-advanced-gas-processing"].icons = {{icon = "__reskins-angels__/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png", icon_size = 256, icon_mipmaps = 2}} + +if data.raw.technology["angels-advanced-gas-processing-2"] then data.raw.technology["angels-advanced-gas-processing-2"].icons = {{icon = "__reskins-angels__/graphics/technology/petrochem/advanced-gas-processing/advanced-gas-processing-technology-base.png", icon_size = 256, icon_mipmaps = 2}} +end data.raw.technology["advanced-ore-refining-5"].icon_size = 256 data.raw.technology["advanced-ore-refining-5"].icon_mipmaps = 4 + +data.raw.technology["Space-Lab-Research-1"].icons = {{icon = "__base__/graphics/technology/research-speed.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["Space-Lab-Research-21"].icons = {{icon = "__base__/graphics/technology/research-speed.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["Space-Lab-Research-41"].icons = {{icon = "__base__/graphics/technology/research-speed.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["Space-Lab-Research-61"].icons = {{icon = "__base__/graphics/technology/research-speed.png", icon_size = 256, icon_mipmaps = 4}} --AKMF + +data.raw.technology["stack-inserter-research-1"].icons = {{icon = "__base__/graphics/technology/stack-inserter.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["stack-inserter-research-5"].icons = {{icon = "__base__/graphics/technology/stack-inserter.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["stack-inserter-research-10"].icons = {{icon = "__base__/graphics/technology/stack-inserter.png", icon_size = 256, icon_mipmaps = 4}} --AKMF +data.raw.technology["stack-inserter-research-15"].icons = {{icon = "__base__/graphics/technology/stack-inserter.png", icon_size = 256, icon_mipmaps = 4}} --AKMF --############################################################################################### --Π±ΡƒΠ΄Π΅Ρ‚ Π²ΡˆΠΈΡ‚ΠΎ Π² Π±ΠΈΠΎΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΡŽ --Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ камня Π² ангСловских Π΄Ρ€ΠΎΠ±ΠΈΠ»ΠΊΠ°Ρ… Ρ€ΡƒΠ΄Ρ‹ @@ -1034,12 +1052,12 @@ bobmods.lib.tech.remove_prerequisite("advanced-magnesium-smelting", "powder-meta bobmods.lib.tech.add_prerequisite ("advanced-magnesium-smelting", "ore-processing-4") --Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ прСсс гранулятор ΠΌΠΊ4 bobmods.lib.tech.add_prerequisite ("advanced-magnesium-smelting", "angels-metallurgy-4") --Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½ΠΊΠΈ ΠΌΠΊ4 ---Ѐикс ΠΎΠ±Π΅Π΄Π½Ρ‘Π½Π½ΠΎΠ³ΠΎ ΡƒΡ€Π°Π½Π° ΠΈ осмия +--Ѐикс ΠΎΠ±Π΅Π΄Π½Ρ‘Π½Π½ΠΎΠ³ΠΎ ΡƒΡ€Π°Π½Π° ΠΈ осмия by Kiska Ra bobmods.lib.tech.remove_prerequisite("advanced-depleted-uranium-smelting-1", "powder-metallurgy-1") --удаляСм лишнюю bobmods.lib.tech.remove_prerequisite("advanced-osmium-smelting", "powder-metallurgy-1") --Ѐикс Ρ‚Π΅Ρ…ΠΈ Ρ‚ΡƒΡ€Π±ΠΈΠ½Ρ‹ -bobmods.lib.tech.remove_recipe_unlock("bob-steam-turbine-1", "steam-turbine") --удаляСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‚ΡƒΡ€Π±ΠΈΠ½Ρƒ ΠΌΠΊ1 +bobmods.lib.tech.remove_recipe_unlock("nuclear-power", "steam-turbine") --удаляСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‚ΡƒΡ€Π±ΠΈΠ½Ρƒ ΠΌΠΊ1 (AKMF) bobmods.lib.tech.add_prerequisite ("bob-steam-turbine-1", "nuclear-power") --Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ…Ρƒ Π² ядСрку --ДобавляСм осмий Π² Π»Π΅ΠΉΡ‚ Π³Π΅ΠΉΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ @@ -1059,12 +1077,23 @@ data.raw["assembling-machine"]["water-pumpjack-3"].energy_usage = "1350kW" data.raw["assembling-machine"]["water-pumpjack-4"].energy_usage = "1700kW" data.raw["assembling-machine"]["water-pumpjack-5"].energy_usage = "2100kW" +data.raw["assembling-machine"]["water-pumpjack-1"].crafting_speed = 0.2 +data.raw["assembling-machine"]["water-pumpjack-2"].crafting_speed = 0.4 +data.raw["assembling-machine"]["water-pumpjack-3"].crafting_speed = 0.6 +data.raw["assembling-machine"]["water-pumpjack-4"].crafting_speed = 0.8 +data.raw["assembling-machine"]["water-pumpjack-5"].crafting_speed = 1 + +--Баланс Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΡ€Π° росы +data.raw["assembling-machine"]["dpa"].energy_usage = "1000kW" + --Π‘ΠΈΠ½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΠ΅ манипуляторы Π²ΡΡ‚Π°ΡŽΡ‚ Π½Π° мСсто data.raw.technology["filter-inserters"].hidden = true bobmods.lib.tech.add_recipe_unlock("express-inserters", "filter-inserter") bobmods.lib.recipe.set_ingredient("landfill", {"stone", 50}) --ΠžΡ‚ΡΡ‹ΠΏΠΊΠ° ΠΏΠΎ 50 +if data.raw["technology"]["radars-1"] then data.raw["technology"]["radars-1"].hidden = true --Π£Π±ΠΈΡ€Π°Π΅ΠΌ лишнСС исслСдованиС Π½Π° Ρ€Π°Π΄Π°Ρ€ +end bobmods.lib.tech.add_prerequisite ("radars-2", "radar") --Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π°Π΄Π°Ρ€1 ΠΊ Ρ€Π°Π΄Π°Ρ€Ρƒ2 bobmods.lib.tech.remove_prerequisite("radars-2", "radars-1") --фикс Ρ€Π°Π΄Π°Ρ€Π° 2 @@ -1100,3 +1129,148 @@ bobmods.lib.tech.add_recipe_unlock("angels-coal-processing-3", "coke-purificatio --фикс нСдоступности исслСдования Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΠΈ bobmods.lib.tech.remove_prerequisite("artillery", "radars-1") + +--ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π·Π΅Π»Π΅Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ· Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ исслСдования (Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Π² шлакС Π³Π΄Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ) +bobmods.lib.tech.remove_recipe_unlock("geode-processing-2", "catalysator-green") + +--пСрСнос Ρ…Π°Ρ€ΠΊΠΎΠ΄Π° ΠΈΠ· angelsrefining ΠΈ исправлСниС Ρ†Π΅Π½ Π½Π° здания Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ +--Π Π°Π·ΠΆΠΈΠΆΠΈΡ‚Π΅Π»ΠΈ +bobmods.lib.recipe.set_ingredients("liquifier", { { "iron-plate", 40 }, { "basic-circuit-board", 3 }, { "pipe", 40 }, { "stone-brick", 60 } }) +bobmods.lib.recipe.set_ingredients("liquifier-2", { { "bronze-alloy", 40 }, { "electronic-circuit", 3 }, { "bronze-pipe", 40 }, { "clay-brick", 60 }, { "liquifier", 2 } }) +bobmods.lib.recipe.set_ingredients("liquifier-3", { { "aluminium-plate", 40 }, { "advanced-circuit", 3 }, { "brass-pipe", 40 }, { "concrete", 60 }, { "liquifier-2", 2 } }) +bobmods.lib.recipe.set_ingredients("liquifier-4", { { "titanium-plate", 40 }, { "processing-unit", 3 }, { "titanium-pipe", 40 }, { "refined-concrete", 60 }, { "liquifier-3", 2 } }) +-- --Π’Π΅Ρ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ экстрактор +bobmods.lib.recipe.set_ingredients("thermal-extractor", { { "aluminium-plate", 24 }, { "advanced-circuit", 5 }, { "brass-pipe", 12 }, { "concrete", 20 }, { "brass-gear-wheel", 12 }, { "intermediate-structure-components", 5 } }) +-- --Π₯ΠΈΠΌ Π·Π°Π²ΠΎΠ΄Ρ‹ +bobmods.lib.recipe.set_ingredients("angels-chemical-plant", { { "iron-plate", 40 }, { "basic-circuit-board", 3 }, { "pipe", 40 }, { "iron-gear-wheel", 25 } }) +bobmods.lib.recipe.set_ingredients("angels-chemical-plant-2", { { "bronze-alloy", 40 }, { "electronic-circuit", 3 }, { "bronze-pipe", 40 }, { "steel-gear-wheel", 25 }, { "angels-chemical-plant", 2 } }) +bobmods.lib.recipe.set_ingredients("angels-chemical-plant-3", { { "aluminium-plate", 40 }, { "advanced-circuit", 3 }, { "brass-pipe", 40 }, { "brass-gear-wheel", 25 }, { "angels-chemical-plant-2", 2 } }) +bobmods.lib.recipe.set_ingredients("angels-chemical-plant-4", { { "titanium-plate", 40 }, { "processing-unit", 3 }, { "titanium-pipe", 40 }, { "titanium-gear-wheel", 25 }, { "angels-chemical-plant-3", 2 } }) + + +--фикс стрСлок ΠΏΠΎΡ€Ρ‚Π° для сСроводорода ΠΏΡ€ΠΎΠΌΡ‹Π²ΠΎΡ‡Π½Ρ‹Ρ… машин +data.raw['assembling-machine']['washing-plant'].fluid_boxes[4].pipe_connections[1].type = "output" +data.raw['assembling-machine']['washing-plant-2'].fluid_boxes[4].pipe_connections[1].type = "output" + +--ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠšΠ°Ρ€ΠΊΠ°ΡΠ° 1 Π² ΠœΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 1 (AKMF) +bobmods.lib.tech.remove_recipe_unlock("steel-processing", "basic-structure-components") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-1", "basic-structure-components") + +--ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠšΠ°Ρ€ΠΊΠ°ΡΠ° 2, ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π¦ΠΈΠ½ΠΊΠ° ΠΈ НикСля Π² ΠœΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 (AKMF) +bobmods.lib.tech.remove_recipe_unlock("angels-zinc-smelting-1", "zinc-electrolysis-x") +bobmods.lib.tech.remove_recipe_unlock("angels-nickel-smelting-1", "nickel-electrolysis-x") +bobmods.lib.tech.remove_recipe_unlock("angels-invar-smelting-1", "invar-alloy-x") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-2", "zinc-electrolysis-x") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-2", "nickel-electrolysis-x") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-2", "invar-alloy-x") +bobmods.lib.tech.remove_recipe_unlock("angels-invar-smelting-1", "intermediate-structure-components") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-2", "intermediate-structure-components") + +--ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠšΠ°Ρ€ΠΊΠ°ΡΠ° 3, ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π’ΠΈΡ‚Π°Π½Π° ΠΈ ΠšΠΎΠ±Π°Π»ΡŒΡ‚Π° Π² ΠœΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 3 (AKMF https://discord.com/channels/569536773701500928/1196117081691795496) +bobmods.lib.tech.remove_recipe_unlock("angels-cobalt-smelting-1", "cobalat-electrolysis-x") +bobmods.lib.tech.remove_recipe_unlock("angels-titanium-smelting-1", "titanium-electrolysis-x") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-3", "cobalat-electrolysis-x") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-3", "titanium-electrolysis-x") +bobmods.lib.tech.remove_recipe_unlock("titanium-processing", "advanced-structure-components") +bobmods.lib.tech.add_recipe_unlock("angels-metallurgy-3", "advanced-structure-components") + +--фикс Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ: ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ исслСдованиС послС Ρ‚ΡƒΡ€Π±ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΈΠΊΠΎΠ² (AKMF) +bobmods.lib.tech.remove_prerequisite("advanced-research", "express-inserters") +bobmods.lib.tech.add_prerequisite("advanced-research", "stack-inserter-3") + +--Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для Π–ΠΈΠ΄ΠΊ.Π‘ΠΎΠΉΠ»Π΅Ρ€ΠΎΠ² 4, 5 Π² соотвСтсвии с ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠΌ (AKMF) +data.raw.technology["OilBurning-4"].unit.ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 2}, {"chemical-science-pack", 2}, {"production-science-pack", 2}} +data.raw.technology["OilBurning-5"].unit.ingredients = {{"automation-science-pack", 2}, {"logistic-science-pack", 2}, {"chemical-science-pack", 2}, {"production-science-pack", 2}, {"utility-science-pack", 2}} + +--Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π½Π° Π½Π° Π±ΠΎΠΉΠ»Π΅Ρ€Ρ‹ (SEO) +bobmods.lib.recipe.set_ingredients("boiler-2", { { "steel-pipe", 15 }, { "boiler", 2 }, { "steel-plate", 20 } }) +bobmods.lib.recipe.set_ingredients("boiler-3", { { "brass-pipe", 15 }, { "boiler-2", 2 }, { "invar-alloy", 20 } }) +bobmods.lib.recipe.set_ingredients("boiler-4", { { "ceramic-pipe", 15 }, { "boiler-3", 2 }, { "tungsten-plate", 20 } }) +bobmods.lib.recipe.set_ingredients("boiler-5", { { "copper-tungsten-pipe", 15 }, { "boiler-4", 2 }, { "copper-tungsten-alloy", 20 } }) + +--Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ загрязнСния для отстойника ΠΈ Ρ„Π°ΠΊΠ΅Π»ΡŒΠ½ΠΎΠΉ стойки +data.raw["furnace"]["clarifier"].energy_source.emissions_per_minute = 75 +data.raw["furnace"]["angels-flare-stack"].energy_source.emissions_per_minute = 75 + +--Π Π΅ΠΌΠΎΠ½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π° исслСдований +bobmods.lib.tech.add_prerequisite ("nuclear-power", "bob-boiler-4") --Π‘Ρ‚Π°Π²ΠΈΠΌ ядСрку ΠΏΠΎΠ΄ Π‘ΠΎΠΉΠ»Π΅Ρ€ МК4 +bobmods.lib.tech.add_prerequisite ("water-pumpjack-1", "electricity") --ΠΏΠΎΠΌΠΏΠ° +bobmods.lib.tech.add_prerequisite("gun-turret", "electricity") --Ρ‚ΡƒΡ€Π΅Π»ΡŒ +bobmods.lib.tech.add_prerequisite("logistics", "electricity") --логистика1 +bobmods.lib.tech.add_prerequisite("basic-chemistry-2", "angels-metallurgy-1") --базовая химия 2 +bobmods.lib.tech.add_prerequisite("bio-processing-green", "angels-metallurgy-1") --водоросли 2 +bobmods.lib.tech.add_prerequisite("bio-processing-green", "electronics") --водоросли 2 +bobmods.lib.tech.remove_prerequisite("bi-tech-resin-extraction", "bi-tech-timber") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ смолу +bobmods.lib.tech.remove_prerequisite("bi-tech-wooden-storage-1", "bi-tech-resin-extraction") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ смолу +data.raw.technology["bi-tech-resin-extraction"].hidden = true --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ смолу +data.raw.technology["bi-tech-timber"].unit.count = 30 --совмСщаСм смолу ΠΈ Ρ‚Π΅ΠΏΠ»ΠΈΡ†Ρ‹ +bobmods.lib.tech.add_prerequisite("bi-tech-wooden-storage-1", "bi-tech-timber") --ящики ΠΏΠΎΠ΄ Ρ‚Π΅ΠΏΠ»ΠΈΡ†Ρƒ +bobmods.lib.tech.add_prerequisite("angels-steel-smelting-2", "strand-casting-1") --ΡΡ‚Π°Π»ΡŒ 2 ΠΏΠΎΠ΄ ΠœΠΠ›Π— +bobmods.lib.tech.add_prerequisite("CW-air-filtering-1", "automation-2") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ 2 +bobmods.lib.tech.add_prerequisite("water-treatment-2", "angels-metallurgy-2") --Π³ΠΈΠ΄Ρ€ΠΎΡΡ‚Π°Π½Ρ†ΠΈΡŽ 2 ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 +bobmods.lib.tech.add_prerequisite("angels-advanced-chemistry-1", "angels-metallurgy-2") --Ρ…ΠΈΠΌΠΈΡŽ 2 ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 +bobmods.lib.tech.add_prerequisite("gas-processing", "angels-metallurgy-2") --Π³Π°Π· ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 +bobmods.lib.tech.add_prerequisite("railloader", "miniloader") --Π°Π²Ρ‚ΠΎΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΏΠΎΠ΄ ΠΌΠΈΠ½ΠΈΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ +bobmods.lib.tech.add_prerequisite("CW-air-filtering-2", "advanced-electronics") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 2 ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ +bobmods.lib.tech.remove_prerequisite("angels-zinc-smelting-1", "angels-metallurgy-2") --мСталлургия 2 ΠΏΠΎΠ΄ Π»Π°Ρ‚ΡƒΠ½ΡŒ +bobmods.lib.tech.remove_prerequisite("zinc-processing", "angels-sulfur-processing-1") --мСталлургия 2 ΠΏΠΎΠ΄ Π»Π°Ρ‚ΡƒΠ½ΡŒ +bobmods.lib.tech.remove_prerequisite("zinc-processing", "angels-zinc-smelting-1") --мСталлургия 2 ΠΏΠΎΠ΄ Π»Π°Ρ‚ΡƒΠ½ΡŒ +bobmods.lib.tech.remove_prerequisite("angels-brass-smelting-1", "angels-zinc-smelting-1") --мСталлургия 2 ΠΏΠΎΠ΄ Π»Π°Ρ‚ΡƒΠ½ΡŒ +bobmods.lib.tech.add_prerequisite("angels-metallurgy-2", "zinc-processing") ----мСталлургия 2 ΠΏΠΎΠ΄ Π»Π°Ρ‚ΡƒΠ½ΡŒ +bobmods.lib.tech.add_prerequisite("angels-zinc-smelting-1", "angels-metallurgy-2") --Ρ†ΠΈΠ½ΠΊ ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 +bobmods.lib.tech.add_prerequisite("water-washing-2", "angels-metallurgy-2") --ΠΏΡ€ΠΎΠΌΡ‹Π²ΠΊΠ° 2 ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°Π»Π»ΡƒΡ€Π³ΠΈΡŽ 2 +bobmods.lib.tech.add_prerequisite("ore-powderizer", "angels-stone-smelting-1") --ΠΈΠ·ΠΌΠ΅Π»ΡŒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ΄ ΠΊΠΈΡ€ΠΏΠΈΡ‡ +bobmods.lib.tech.add_prerequisite("bi-tech-garden-2", "chemical-science-pack") --биосад ΠΏΠΎΠ΄ Ρ…ΠΈΠΌΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.remove_prerequisite("advanced-electronics", "offshore-pump-2") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ насосы ΠΈΠ· элСктроники +bobmods.lib.tech.add_prerequisite("offshore-pump-2", "advanced-electronics") --ставим ΠΈΡ… Π²Π½ΠΈΠ· +bobmods.lib.tech.add_prerequisite("bio-refugium-fish-2", "advanced-electronics") --Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌ 2 ΠΏΠΎΠ΄ элСктронику 2 +bobmods.lib.tech.add_prerequisite("bob-drills-2", "angels-cobalt-steel-smelting-1") --Π±ΡƒΡ€Ρ‹3 ΠΏΠΎΠ΄ ΠΊΠΎΠ±Π°Π»ΡŒΡ‚ +bobmods.lib.tech.add_prerequisite("bob-area-drills-2", "angels-cobalt-steel-smelting-1") --Π±ΡƒΡ€Ρ‹3 ΠΏΠΎΠ΄ ΠΊΠΎΠ±Π°Π»ΡŒΡ‚ +bobmods.lib.tech.add_prerequisite("warehouse-logistics-research-1", "construction-robotics") --склады ΠΏΠΎΠ΄ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ² +bobmods.lib.tech.add_prerequisite("warehouse-logistics-research-1", "logistic-robotics") --склады ΠΏΠΎΠ΄ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΠ² +bobmods.lib.tech.add_prerequisite("Ducts", "ceramics") --большиС Ρ‚Ρ€ΡƒΠ±Ρ‹ ΠΏΠΎΠ΄ Π½ΠΈΡ‚Ρ€ΠΈΠ΄ крСмния +bobmods.lib.tech.add_prerequisite("bio-refugium-fish-3", "advanced-electronics-2") --Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌ 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("bio-refugium-fish-3", "angels-titanium-smelting-1") --Π°ΠΊΠ²Π°Ρ€ΠΈΡƒΠΌ 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("bio-refugium-butchery-3", "angels-titanium-smelting-1") --бойня 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("bio-refugium-butchery-3", "advanced-electronics-2") --бойня 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("remelting-alloy-mixer-3", "production-science-pack") --ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΊ3 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("offshore-pump-3", "angels-titanium-smelting-1") --насос 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("logistics-3", "angels-titanium-smelting-1") --логистика 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("CW-air-filtering-4", "advanced-electronics-2") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 3 ΠΏΠΎΠ΄ элСктронику 3 +bobmods.lib.tech.add_prerequisite("CW-air-filtering-4", "angels-titanium-smelting-1") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("CW-air-filtering-4", "production-science-pack") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 3 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("gunships", "angels-cobalt-steel-smelting-1") --самолёты ΠΏΠΎΠ΄ ΠΊΠΎΠ±Π°Π»ΡŒΡ‚ +bobmods.lib.tech.add_prerequisite("bi-tech-cellulose-2", "production-science-pack") --Ρ†Π΅Π»Π»ΡŽΠ»ΠΎΠ·Π° 2 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("CW-air-filter-cleaning-4", "production-science-pack") --Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 4 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("afterburner", "utility-science-pack") --форсаТ ΠΏΠΎΠ΄ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("angels-advanced-bio-processing", "production-science-pack") --водоросли 5 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("angels-advanced-bio-processing", "utility-science-pack") --водоросли 5 ΠΏΠΎΠ΄ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("OilBurning-4", "production-science-pack") --ΠΆΠΈΠ΄ΠΊ ΠΊΠΎΡ‚Ρ‘Π» 4 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("OilBurning-4", "angels-titanium-smelting-1") --ΠΆΠΈΠ΄ΠΊ ΠΊΠΎΡ‚Ρ‘Π» 4 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("angels-stone-smelting-4", "angels-titanium-smelting-1") --Ρ‚ΠΈΡ‚Π°Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΈΡ€ΠΏΠΈΡ‡ ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ +bobmods.lib.tech.add_prerequisite("steel-axe-5", "production-science-pack") --ΠΊΠΈΡ€ΠΊΠ° 5 ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("steel-axe-6", "utility-science-pack") --ΠΊΠΈΡ€ΠΊΠ° 6 ΠΏΠΎΠ΄ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("bi-tech-biomass-reprocessing-2", "production-science-pack") --биомасса ΠΏΠΎΠ΄ производствСнн ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ +bobmods.lib.tech.add_prerequisite("logistics-3", "angels-ironworks-3") --логистика 3 ΠΏΠΎΠ΄ Ρ‚ΠΈΡ‚Π°Π½ + + +bobmods.lib.tech.remove_recipe_unlock("optics", "deadlock-large-lamp") --Π»Π°ΠΌΠΏΡ‹ +bobmods.lib.tech.remove_recipe_unlock("optics", "deadlock-floor-lamp") --Π»Π°ΠΌΠΏΡ‹ +bobmods.lib.tech.add_recipe_unlock("electronics", "deadlock-large-lamp")--Π»Π°ΠΌΠΏΡ‹ +bobmods.lib.tech.add_recipe_unlock("electronics", "deadlock-floor-lamp") --Π»Π°ΠΌΠΏΡ‹ +bobmods.lib.tech.remove_recipe_unlock("water-treatment", "liquifier") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·ΠΆΠΈΠΆΠΈΡ‚Π΅Π»ΡŒ +bobmods.lib.tech.add_recipe_unlock("bi-tech-timber", "bi-resin-pulp") --смола Π² Ρ‚Π΅ΠΏΠ»ΠΈΡ†Ρƒ +bobmods.lib.tech.add_recipe_unlock("bi-tech-timber", "bi-wood-from-pulp") --смола Π² Ρ‚Π΅ΠΏΠ»ΠΈΡ†Ρƒ +bobmods.lib.tech.remove_recipe_unlock("angels-iron-smelting-1", "angels-iron-gear-wheel-stack-casting") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈΠ· 1 расплавки +bobmods.lib.tech.remove_recipe_unlock("angels-iron-smelting-1", "angels-iron-gear-wheel-stack-converting") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈΠ· 1 расплавки +bobmods.lib.tech.remove_recipe_unlock("angels-iron-smelting-2", "angels-iron-gear-wheel-stack-casting-fast") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈΠ· 2 расплавки +bobmods.lib.tech.add_recipe_unlock("angels-iron-casting-2", "angels-iron-gear-wheel-stack-casting") --Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π²ΠΎ 1 Π»ΠΈΡ‚ΡŒΠ΅ ΠΆΠ΅Π»Π΅Π·Π° +bobmods.lib.tech.add_recipe_unlock("angels-iron-casting-2", "angels-iron-gear-wheel-stack-converting") --Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π²ΠΎ 1 Π»ΠΈΡ‚ΡŒΠ΅ ΠΆΠ΅Π»Π΅Π·Π° +bobmods.lib.tech.add_recipe_unlock("angels-iron-casting-3", "angels-iron-gear-wheel-stack-casting-fast") --Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΎΠΊ Π² 2 Π»ΠΈΡ‚ΡŒΠ΅ ΠΆΠ΅Π»Π΅Π·Π° +bobmods.lib.tech.remove_recipe_unlock("angels-steel-smelting-1", "angels-steel-gear-wheel-stack-casting") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΎΠΊ ΠΈΠ· 1 стали +bobmods.lib.tech.remove_recipe_unlock("angels-steel-smelting-1", "angels-steel-gear-wheel-stack-converting") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΎΠΊ ΠΈΠ· 1 стали +bobmods.lib.tech.remove_recipe_unlock("angels-steel-smelting-2", "angels-steel-gear-wheel-stack-casting-fast") --ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΎΠΊ ΠΈΠ· 2 стали +bobmods.lib.tech.add_recipe_unlock("angels-steel-smelting-2", "angels-steel-gear-wheel-stack-casting") --Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ Π²ΠΎ 2 ΡΡ‚Π°Π»ΡŒ +bobmods.lib.tech.add_recipe_unlock("angels-steel-smelting-2", "angels-steel-gear-wheel-stack-converting") --Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ Π²ΠΎ 2 ΡΡ‚Π°Π»ΡŒ +bobmods.lib.tech.add_recipe_unlock("angels-steel-smelting-3", "angels-steel-gear-wheel-stack-casting-fast") --Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΊ Π²ΠΎ 3 ΡΡ‚Π°Π»ΡŒ +bobmods.lib.tech.remove_recipe_unlock("ore-floatation", "silver-plate") --ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ простого Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° сСрСбра \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/prototypes/micro-fix.lua b/zzzparanoidal/prototypes/micro-fix.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/micro-fix.lua rename to zzzparanoidal/prototypes/micro-fix.lua diff --git a/zzzparanoidal_1.0.1/prototypes/miniloaders.lua b/zzzparanoidal/prototypes/miniloaders.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/miniloaders.lua rename to zzzparanoidal/prototypes/miniloaders.lua diff --git a/zzzparanoidal_1.0.1/prototypes/mod_compatibility/JunkTrain.lua b/zzzparanoidal/prototypes/mod_compatibility/JunkTrain.lua similarity index 98% rename from zzzparanoidal_1.0.1/prototypes/mod_compatibility/JunkTrain.lua rename to zzzparanoidal/prototypes/mod_compatibility/JunkTrain.lua index 91d657cf..24727c7f 100644 --- a/zzzparanoidal_1.0.1/prototypes/mod_compatibility/JunkTrain.lua +++ b/zzzparanoidal/prototypes/mod_compatibility/JunkTrain.lua @@ -455,19 +455,19 @@ data.raw["train-stop"]["train-stop-scrap"].next_upgrade = "train-stop" data.raw["rail-signal"]["rail-signal-scrap"].fast_replaceable_group = "rail-signal" data.raw["rail-chain-signal"]["rail-chain-signal-scrap"].fast_replaceable_group = "rail-signal" -data.raw["train-stop"]["train-stop-scrap"].fast_replaceable_group = "train-stop" +data.raw["train-stop"]["train-stop-scrap"].fast_replaceable_group = "rail-stop" data.raw["rail-signal"]["rail-signal"].fast_replaceable_group = "rail-signal" data.raw["rail-chain-signal"]["rail-chain-signal"].fast_replaceable_group = "rail-signal" -data.raw["train-stop"]["train-stop"].fast_replaceable_group = "train-stop" +data.raw["train-stop"]["train-stop"].fast_replaceable_group = "rail-stop" data.raw["rail-signal"]["rail-signal-scrap"].collision_mask = {"item-layer", "object-layer", "rail-layer", "floor-layer", "water-tile"} data.raw["rail-chain-signal"]["rail-chain-signal-scrap"].collision_mask = {"item-layer", "object-layer", "rail-layer", "floor-layer", "water-tile"} ---data.raw["train-stop"]["train-stop-scrap"].collision_mask = {"item-layer", "object-layer", "player-layer", "water-tile", "layer-14"} +data.raw["train-stop"]["train-stop-scrap"].collision_mask = {"item-layer", "object-layer", "player-layer", "water-tile", "layer-14"} data.raw["rail-signal"]["rail-signal"].collision_mask = {"item-layer", "object-layer", "rail-layer", "floor-layer", "water-tile"} data.raw["rail-chain-signal"]["rail-chain-signal"].collision_mask = {"item-layer", "object-layer", "rail-layer", "floor-layer", "water-tile"} ---data.raw["train-stop"]["train-stop"].collision_mask = {"item-layer", "object-layer", "player-layer", "water-tile", "layer-14"} +data.raw["train-stop"]["train-stop"].collision_mask = {"item-layer", "object-layer", "player-layer", "water-tile", "layer-14"} ------------------------------------------------------------------------------------------------- --ΠΏΠΎΠ΄ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ стандартных Ρ€Π΅Π»ΡŒΡ bobmods.lib.recipe.set_ingredient("rail", {"stone-crushed", 10}) diff --git a/zzzparanoidal_1.0.1/prototypes/mod_compatibility/Transport_Drones.lua b/zzzparanoidal/prototypes/mod_compatibility/Transport_Drones.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/mod_compatibility/Transport_Drones.lua rename to zzzparanoidal/prototypes/mod_compatibility/Transport_Drones.lua diff --git a/zzzparanoidal_1.0.1/prototypes/mod_compatibility/heroturrets.lua b/zzzparanoidal/prototypes/mod_compatibility/heroturrets.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/mod_compatibility/heroturrets.lua rename to zzzparanoidal/prototypes/mod_compatibility/heroturrets.lua diff --git a/zzzparanoidal_1.0.1/prototypes/mod_compatibility/heroturrets_script.lua b/zzzparanoidal/prototypes/mod_compatibility/heroturrets_script.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/mod_compatibility/heroturrets_script.lua rename to zzzparanoidal/prototypes/mod_compatibility/heroturrets_script.lua diff --git a/zzzparanoidal_1.0.1/prototypes/modules.lua b/zzzparanoidal/prototypes/modules.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/modules.lua rename to zzzparanoidal/prototypes/modules.lua diff --git a/zzzparanoidal_1.0.1/prototypes/nuclear.lua b/zzzparanoidal/prototypes/nuclear.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/nuclear.lua rename to zzzparanoidal/prototypes/nuclear.lua diff --git a/zzzparanoidal_1.0.1/prototypes/pipes.lua b/zzzparanoidal/prototypes/pipes.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/pipes.lua rename to zzzparanoidal/prototypes/pipes.lua diff --git a/zzzparanoidal_1.0.1/prototypes/recipe-new.lua b/zzzparanoidal/prototypes/recipe-new.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/recipe-new.lua rename to zzzparanoidal/prototypes/recipe-new.lua diff --git a/zzzparanoidal/prototypes/recipefixes.lua b/zzzparanoidal/prototypes/recipefixes.lua new file mode 100644 index 00000000..71f13e69 --- /dev/null +++ b/zzzparanoidal/prototypes/recipefixes.lua @@ -0,0 +1,41 @@ +--Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ Π½Π° Π»ΡƒΡ‡ санты Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ мСханичСского ΠΏΠ°ΡƒΠΊΠ° +bobmods.lib.recipe.replace_ingredient("spidertron", "raw-fish", "alien-fish-3-raw") +--Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· эксплуатации бСсплатного насоса Π½Π° Π²ΠΎΠ΄Ρƒ +data.raw.recipe["ground-water-pump"].hidden = true +data.raw.recipe["ground-water-pump"].enabled = false + +for k,v in pairs(data.raw["technology"]["water-treatment"].effects) do + if v.recipe=="ground-water-pump" then + table.remove(data.raw["technology"]["water-treatment"].effects,k) + end + end + + +data.raw.recipe["bob-zinc-plate"].hidden = false +data.raw.recipe["bob-nickel-plate"].hidden = false + +data.raw.recipe["invar-alloy"].hidden = false +data.raw.recipe["brass-alloy"].hidden = false + +--рСбаланс сортировки ΠΈΠ· KaoExtended +data.raw.recipe["angelsore-crushed-manganese-processing"].results[1].amount=4 +data.raw.recipe["angelsore-pure-chrome-processing"].results[1].amount=3 +data.raw.recipe["angelsore-pure-platinum-processing"].results[1].amount=2 +data.raw.recipe["angelsore-crushed-manganese-processing"].category = "ore-sorting-2" +data.raw.recipe["angelsore-pure-chrome-processing"].category = "ore-sorting-3" +data.raw.recipe["angelsore-pure-platinum-processing"].category = "ore-sorting-3" +angelsmods.functions.allow_productivity("angelsore-crushed-manganese-processing") +angelsmods.functions.allow_productivity("angelsore-pure-chrome-processing") +angelsmods.functions.allow_productivity("angelsore-pure-platinum-processing") + +--ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Π³Ρ€ΠΈΠ΄Ρ‹ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚ +--[[ + if data.raw.recipe["advanced-logistic-science-pack"] then + if data.raw.recipe["advanced-logistic-science-pack"].ingredients then + table.insert(data.raw.recipe["advanced-logistic-science-pack"].ingredients,{type="item",name="flask",amount=1}) + elseif data.raw.recipe["advanced-logistic-science-pack"].normal.ingredients then + table.insert(data.raw.recipe["advanced-logistic-science-pack"].normal.ingredients,{type="item",name="flask",amount=1}) + table.insert(data.raw.recipe["advanced-logistic-science-pack"].expensive.ingredients,{type="item",name="flask",amount=2}) + end + end +]]-- diff --git a/zzzparanoidal_1.0.1/prototypes/seed-extractor.lua b/zzzparanoidal/prototypes/seed-extractor.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/seed-extractor.lua rename to zzzparanoidal/prototypes/seed-extractor.lua diff --git a/zzzparanoidal_1.0.1/prototypes/techfixes-angelsIndustries.lua b/zzzparanoidal/prototypes/techfixes-angelsIndustries.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/techfixes-angelsIndustries.lua rename to zzzparanoidal/prototypes/techfixes-angelsIndustries.lua diff --git a/zzzparanoidal_1.0.1/prototypes/techfixes.lua b/zzzparanoidal/prototypes/techfixes.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/techfixes.lua rename to zzzparanoidal/prototypes/techfixes.lua diff --git a/zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-description.lua b/zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-description.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-description.lua rename to zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-description.lua diff --git a/zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-simulation-prototypes.lua b/zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-simulation-prototypes.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-simulation-prototypes.lua rename to zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start-simulation-prototypes.lua diff --git a/zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start.lua b/zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start.lua rename to zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/1-1-1-start.lua diff --git a/zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/tips-and-tricks-simulations.lua b/zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/tips-and-tricks-simulations.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/tips-and-tricks/1-1-1-start/tips-and-tricks-simulations.lua rename to zzzparanoidal/prototypes/tips-and-tricks/1-1-1-start/tips-and-tricks-simulations.lua diff --git a/zzzparanoidal_1.0.1/prototypes/tips-and-tricks/tips-and-tricks.lua b/zzzparanoidal/prototypes/tips-and-tricks/tips-and-tricks.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/tips-and-tricks/tips-and-tricks.lua rename to zzzparanoidal/prototypes/tips-and-tricks/tips-and-tricks.lua diff --git a/zzzparanoidal_1.0.1/prototypes/walkable-beacons.lua b/zzzparanoidal/prototypes/walkable-beacons.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/walkable-beacons.lua rename to zzzparanoidal/prototypes/walkable-beacons.lua diff --git a/zzzparanoidal_1.0.1/prototypes/warfare.lua b/zzzparanoidal/prototypes/warfare.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/warfare.lua rename to zzzparanoidal/prototypes/warfare.lua diff --git a/zzzparanoidal_1.0.1/prototypes/washers.lua b/zzzparanoidal/prototypes/washers.lua similarity index 89% rename from zzzparanoidal_1.0.1/prototypes/washers.lua rename to zzzparanoidal/prototypes/washers.lua index cbb850c2..d6c43352 100644 --- a/zzzparanoidal_1.0.1/prototypes/washers.lua +++ b/zzzparanoidal/prototypes/washers.lua @@ -4,7 +4,7 @@ local washing_fluid_box = { production_type = 'output', pipe_covers = pipecoverspictures(), base_level = 1, -pipe_connections = {{ position = {-3, 0} }} +pipe_connections = {{ type = "output", position = {-3, 0} }} } --добавляСм Π² ΠΏΡ€ΠΎΠΌΡ‹Π²ΠΎΡ‡Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ 3-4 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ для сСроводорода, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ добавляСт Oberhaul table.insert(data.raw['assembling-machine']['washing-plant-3'].fluid_boxes, washing_fluid_box) diff --git a/zzzparanoidal_1.0.1/prototypes/yuoki.lua b/zzzparanoidal/prototypes/yuoki.lua similarity index 100% rename from zzzparanoidal_1.0.1/prototypes/yuoki.lua rename to zzzparanoidal/prototypes/yuoki.lua diff --git a/zzzparanoidal_1.0.1/recipes/flowfix.lua b/zzzparanoidal/recipes/flowfix.lua similarity index 100% rename from zzzparanoidal_1.0.1/recipes/flowfix.lua rename to zzzparanoidal/recipes/flowfix.lua diff --git a/zzzparanoidal_1.0.1/recipes/gemfix.lua b/zzzparanoidal/recipes/gemfix.lua similarity index 100% rename from zzzparanoidal_1.0.1/recipes/gemfix.lua rename to zzzparanoidal/recipes/gemfix.lua diff --git a/zzzparanoidal_1.0.1/recipes/module-contactfix.lua b/zzzparanoidal/recipes/module-contactfix.lua similarity index 100% rename from zzzparanoidal_1.0.1/recipes/module-contactfix.lua rename to zzzparanoidal/recipes/module-contactfix.lua diff --git a/zzzparanoidal_1.0.1/recipes/warehousing.lua b/zzzparanoidal/recipes/warehousing.lua similarity index 100% rename from zzzparanoidal_1.0.1/recipes/warehousing.lua rename to zzzparanoidal/recipes/warehousing.lua diff --git a/zzzparanoidal_1.0.1/settings.lua b/zzzparanoidal/settings.lua similarity index 100% rename from zzzparanoidal_1.0.1/settings.lua rename to zzzparanoidal/settings.lua diff --git a/zzzparanoidal_1.0.1/thumbnail.png b/zzzparanoidal/thumbnail.png similarity index 100% rename from zzzparanoidal_1.0.1/thumbnail.png rename to zzzparanoidal/thumbnail.png diff --git a/zzzparanoidal_1.0.1/tips-and-tricks-functions.lua b/zzzparanoidal/tips-and-tricks-functions.lua similarity index 100% rename from zzzparanoidal_1.0.1/tips-and-tricks-functions.lua rename to zzzparanoidal/tips-and-tricks-functions.lua diff --git a/zzzparanoidal_1.0.1/data-final-fixes.lua b/zzzparanoidal_1.0.1/data-final-fixes.lua deleted file mode 100644 index f88c5486..00000000 --- a/zzzparanoidal_1.0.1/data-final-fixes.lua +++ /dev/null @@ -1,63 +0,0 @@ -require("prototypes.assemblers") -require("prototypes.nuclear") -require("prototypes.techfixes") -require("prototypes.change-background") -require("prototypes.warfare") -require("prototypes.recipefixes") -require("prototypes.pipes") -require("prototypes.map-gen-presets") -require("prototypes.boiler-effectivity") - -if mods["angelsindustries"] then - require("prototypes.techfixes-angelsIndustries") -end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ angelsIndustries - -if mods["angelsbioprocessing"] then - require("prototypes.modules") -end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ angelsbioprocessing - -require("prototypes.artillery-prototype.artillery-turret-prototype-final-fix") --фикс Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π°Ρ€Ρ‚Ρ‹ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Π°Ρ€Ρ‚Ρƒ - -require("recipes.gemfix") -require("recipes.warehousing") -require("recipes.module-contactfix") - -require("prototypes.walkable-beacons") -- ΠΏΠΎ маякам ΠΌΠΎΠΆΠ½ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΊΠΎΠ΄ ΠΈΠ· walkable-beacons -------------------------------------------------------------------------------------------------- -require("graphics.train.train_reskin") -- рСскин ΠΏΠΎΠ΅Π·Π΄ΠΎΠ² -require("graphics.ore_radar.ore_radar_reskin") -- рСскин Ρ€Π°Π΄Π°Ρ€Π° Ρ€ΡƒΠ΄Ρ‹ -------------------------------------------------------------------------------------------------- -require("prototypes.micro-final-fix") --Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° напильником всСго подряд -- фиксы ΠΎΡ‚ ΠšΠΈΡ€ΠΈΠΊΠ° -------------------------------------------------------------------------------------------------- -require("prototypes.entity.entity") --фиксы Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΡ‘Π½ ΠΎΡ‚ SEO -------------------------------------------------------------------------------------------------- ---фиксы совмСстимости для ΠΌΠΎΠ΄ΠΎΠ² -require("prototypes.mod_compatibility.Transport_Drones") -require("prototypes.mod_compatibility.JunkTrain") - -------------------------------------------------------------------------------------------------- -require("prototypes.Angels_RBOS") --Angels_RBOS Angel's Re-enabled Basic Ore Smelting - -require("prototypes.landfill-pump") --Установка насосов Π½Π° отсыпку - -if mods["yuoki"] then - require("prototypes.yuoki") -end -- ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ yuoki - --- Uniform recipe mod -for _,r in pairs(data.raw["recipe"]) do - r.always_show_products=true; - r.show_amount_in_title=false; - if r.normal ~= nil then - r.normal.always_show_products = true; - r.normal.show_amount_in_title = false; - end - if r.expensive ~= nil then - r.expensive.always_show_products = true; - r.expensive.show_amount_in_title = false; - end -end --- Uniform recipe end - ---Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ послСдним. ПослС всСх Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². -require("recipes.flowfix") \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/data-updates.lua b/zzzparanoidal_1.0.1/data-updates.lua deleted file mode 100644 index 05526c35..00000000 --- a/zzzparanoidal_1.0.1/data-updates.lua +++ /dev/null @@ -1,27 +0,0 @@ -require("prototypes.miniloaders") -require("prototypes.generators") -require("prototypes.fluid-void") -require("prototypes.gas-void") -require("prototypes.ThickerLines") -require("prototypes.ColorCodedPlanners_101") -- ΠΌΠΎΠ΄ ColorCodedPlanners_1.0.1 -require("prototypes.tips-and-tricks.tips-and-tricks") -- подсказки - -if mods.bobequipment then - data.raw.item["personal-roboport-mk3-equipment"].subgroup = "misc1" - data.raw.item["personal-roboport-mk4-equipment"].subgroup = "misc1" -end - --- Uniform recipe mod -for _,r in pairs(data.raw["recipe"]) do - r.always_show_products=true; - r.show_amount_in_title=false; - if r.normal ~= nil then - r.normal.always_show_products = true; - r.normal.show_amount_in_title = false; - end - if r.expensive ~= nil then - r.expensive.always_show_products = true; - r.expensive.show_amount_in_title = false; - end -end --- Uniform recipe end \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/info.json b/zzzparanoidal_1.0.1/info.json deleted file mode 100644 index 516cb1d0..00000000 --- a/zzzparanoidal_1.0.1/info.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "zzzparanoidal", - "version": "1.0.1", - "title": "!_Paranoidal", - "factorio_version": "1.1", - "author": "Sovigod", - "contact": "https://discord.gg/MnXGAmC", - "homepage": "https://discord.gg/MnXGAmC", - "description": "Paranoidal core mod for 1.1", - "dependencies": [ - "base >= 1.1.91", - "boblibrary", - "BatteryElectricTrain", - "? angelsindustries", - "? angelsrefining", - "? extendedangels", - "angelsbioprocessing", - "angelssmelting", - "KaoExtended", - "expanded-rocket-payloads", - "MilesBobsExpansion", - "Clowns-AngelBob-Nuclear", - "Clowns-Processing", - "bobwarfare", - "bobrevamp", - "AtomicArtillery", - "Bio_Industries", - "marathon", - "RU-locale" - ] -} \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/locale/en/tips-and-tricks.cfg b/zzzparanoidal_1.0.1/locale/en/tips-and-tricks.cfg deleted file mode 100644 index 1de631e0..00000000 --- a/zzzparanoidal_1.0.1/locale/en/tips-and-tricks.cfg +++ /dev/null @@ -1,11 +0,0 @@ -[tips-and-tricks-name] - -start=[font=default-bold]PARANOIDAL[/font] -no-update=[font=default-bold]1.PARANOIDAL[/font] - Π½Π΅ обновляйтС ΠΌΠΎΠ΄Ρ‹! - -[tips-and-tricks-description] - -start=\n\n[color=255,0,0][font=default-bold] Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² FACTORIO PARANOIDAL[/font][/color]\n\n Π­Ρ‚ΠΎ хардкорная ΠΈ ΠΎΡ‡Π΅Π½ΡŒ интСрСсная мСгасборка для [font=default-bold]Factorio[/font].\n Π—Π΄Π΅ΡΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ порядка 200 Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΎΠ², тСсно ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Ρ‘Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ.\n \n Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ совСты ΠΈ подсказки для выТивания Π² PARANOIDAL.\n Они Π±ΡƒΠ΄ΡƒΡ‚ постСпСнно ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ для вас ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ ΠΈΠ³Ρ€Ρ‹ ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. \n Если Ρƒ вас появились вопросы ΠΈΠ»ΠΈ Π΅ΡΡ‚ΡŒ прСдлоТСния/Π±Π°Π³Ρ€Π΅ΠΏΠΎΡ€Ρ‚Ρ‹, смСло ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ Π² наш Дискорд сСрвСр. -no-update=НС обновляйтС ΠΌΠΎΠ΄Ρ‹, входящиС Π² сборку ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, это сломаСт Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΡŽ!\nΠ‘Π±ΠΎΡ€ΠΊΠ° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ настроСна Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.\nЕсли ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ настройки ΠΌΠΎΠ΄ΠΎΠ² - послСдствия Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ повСдСния этих ΠΌΠΎΠ΄ΠΎΠ², ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ совмСстимости ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ нСработоспособности сборки - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° вас.\nΠ‘Π±ΠΎΡ€ΠΊΠ° сломалась ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π£Π΄Π°Π»ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ°ΠΏΠΊΡƒ mods, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ сборку с GitLab. - - diff --git a/zzzparanoidal_1.0.1/locale/ru/locale.cfg b/zzzparanoidal_1.0.1/locale/ru/locale.cfg deleted file mode 100644 index 3bbe46ab..00000000 --- a/zzzparanoidal_1.0.1/locale/ru/locale.cfg +++ /dev/null @@ -1,102 +0,0 @@ -[mod-setting-name] -paranoidal-miniloader-energy-multiplier=ΠœΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ энСргопотрСблСния ΠΌΠΈΠ½ΠΈΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² -paranoidal-flowfix-min-time=МинимальноС врСмя для Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ -paranoidal-disable-vanilla-evolution=ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Π°Π½ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ -stone-path-concrete=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: НовоС ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ для ΠΊΠΈΡ€ΠΏΠΈΡ‡Π° -fitolamps=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π€ΠΈΡ‚ΠΎΠ»Π°ΠΌΠΏΡ‹ -res_loc_1=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК1 -res_loc_2=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК2 -res_loc_3=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин Π»ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ²Π° МК3 -res_loc_e=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: РСскин элСктропоСзда -wire=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π£Ρ‚ΠΎΠ»Ρ‰Π΅Π½Π½Ρ‹Π΅ логичСскиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° -copper_wire=Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ: Π£Ρ‚ΠΎΠ»Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Π΄Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° -baa-arrow-scale=Π Π°Π·ΠΌΠ΅Ρ€ стрСлки -baa-arrow-tint=Π¦Π²Π΅Ρ‚ стрСлки -item-drop=Π Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹Π΅ сундуки Π²Ρ‹ΡΡ‹ΠΏΠ°ΡŽΡ‚ содСрТимоС -newbie_resourse=Богатство всСх рСсурсов x5 - - -[mod-setting-description] -paranoidal-miniloader-energy-multiplier=Π­Π½Π΅Ρ€Π³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ всСх ΠΌΠΈΠ½ΠΈΠΏΠΎΠ³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΌΠΎΠ΄Π΅ "miniloaders", ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° этот коэффициСнт. -paranoidal-flowfix-min-time=Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ с мСньшим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»Π΅Ρ‡Π΅Π½Ρ‹ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ,Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ рСсурсам ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ -paranoidal-disable-vanilla-evolution=ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ ΠΆΡƒΠΊΠΎΠ² ΠΏΡ€ΠΈ создании ΠΊΠ°Ρ€Ρ‚Ρ‹. Π‘ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΏΠΎ исслСдованиям. -stone-path-concrete=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Concretexture -fitolamps=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ освСщСниС Ρ„ΠΈΡ‚ΠΎΠ»Π°ΠΌΠΏΠ°ΠΌΠΈ Π² Ρ‚Π΅ΠΏΠ»ΠΈΡ†Π°Ρ… ΠΈ Π±ΠΈΠΎΡ„Π΅Ρ€ΠΌΠ°Ρ… (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). -res_loc_1=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). -res_loc_2=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). -res_loc_3=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). -res_loc_e=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° Yuoki (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ графичСскиС измСнСния). -wire=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° ThickerLines -copper_wire=Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρƒ стандартной Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈΠ· ΠΌΠΎΠ΄Π° ThickerLines -item-drop=Π Π°Π·Ρ€ΡƒΡˆΠ΅Π½Π½Ρ‹Π΅ сундуки Π²Ρ‹ΡΡ‹ΠΏΠ°ΡŽΡ‚ содСрТимоС -newbie_resourse=НЕ Π Π•ΠšΠžΠœΠ•ΠΠ”Π£Π•Π’Π‘Π― ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ссли Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Paranoidal - - -[item-name] -stone-crushed=Π”Ρ€ΠΎΠ±Π»Ρ‘Π½Ρ‹ΠΉ камСнь -bi-stone-crusher=Π˜Π·ΠΌΠ΅Π»ΡŒΡ‡ΠΈΡ‚Π΅Π»ΡŒ камня -hazard-concrete-brick=Π‘Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΈΡ€ΠΏΠΈΡ‡ с Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ опасности -hero_downgrade=Π Π°Π·ΠΆΠ°Π»ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΡƒΡ€Π΅Π»Π΅ΠΉ -super_charger=ЗарядноС устройство аккумуляторной Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ МК4 -hiend_loco=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -hiend_wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -hiend_fluid_wagon=Π’Π°Π³ΠΎΠ½-цистСрна Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ -seafloor-pump-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос -seafloor-pump-2-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК2 -seafloor-pump-3-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК3 - -[item-description] -orbital-solar-collector=Π‘ΠΏΡƒΡ‚Π½ΠΈΠΊ, способный ΡƒΠ»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° синхронной ΠΎΡ€Π±ΠΈΡ‚Π΅ Π΄ΠΎ 1000 ΠΌΠ΅Π³Π°Π²Π°Ρ‚Ρ‚ мощности ΠΎΡ‚ блиТайшСй Π·Π²Π΅Π·Π΄Ρ‹ ΠΈ Ρ€Π΅Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ Π² Π½Π°Π·Π΅ΠΌΠ½ΡƒΡŽ ΠΏΡ€ΠΈΡ‘ΠΌΠΎ-ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΡƒΡŽ ΡΡ‚Π°Π½Ρ†ΠΈΡŽ. -orbital-power-reciver=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π·Π΅ΠΌΠ»Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ энСргСтичСский ΠΏΡƒΡ‡ΠΎΠΊ, посылаСмый Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ с ΠΎΡ€Π±ΠΈΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ спутника ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² 1000 ΠœΠ’Ρ‚ мощности для Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ элСктросСти. -seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. -seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. - -[recipe-name] -scrap-rail-to-rail=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ дСрСвянных Ρ€Π΅Π»ΡŒΡ -rail-signal-scrap-to-rail-signal=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ свСтофора -rail-chain-signal-scrap-to-rail-chain-signal=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ свСтофора -train-stop-scrap-to-train-stop=Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ станции - -[recipe-description] -scrap-rail-to-rail=Π—Π°ΠΌΠ΅Π½Π° дСрСвянных шпал Π½Π° Π±Π΅Ρ‚ΠΎΠ½Π½Ρ‹Π΅ -seafloor-pump=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. -seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. -seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси. - -[entity-name] -yir_usl=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² МК0 -yir_us_cargo=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ МК0 -super_charger=ЗарядноС устройство аккумуляторной Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ МК4 -hiend_loco=Π›ΠΎΠΊΠΎΠΌΠΎΡ‚ΠΈΠ² Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -hiend_wagon=Π“Ρ€ΡƒΠ·ΠΎΠ²ΠΎΠΉ Π²Π°Π³ΠΎΠ½ Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -hiend_fluid_wagon=Π’Π°Π³ΠΎΠ½-цистСрна Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ -seafloor-pump-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос -seafloor-pump-2-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК2 -seafloor-pump-3-placeholder=Π”ΠΎΠ½Π½Ρ‹ΠΉ насос МК3 - -[entity-description] -orbital-power-reciver=ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π·Π΅ΠΌΠ»Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ энСргСтичСский ΠΏΡƒΡ‡ΠΎΠΊ, посылаСмый Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ с ΠΎΡ€Π±ΠΈΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ спутника ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² 1000 ΠœΠ’Ρ‚ мощности для Π½Π°Π·Π΅ΠΌΠ½ΠΎΠΉ элСктросСти. -seafloor-pump-2=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. -seafloor-pump-3=Насос для размывания Π³Ρ€ΡƒΠ½Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ‹Ρ‡ΠΈ грязной ΠΌΡƒΡ‚Π½ΠΎΠΉ взвСси с ΠΏΡ€ΠΈΠ±Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π΄Π½Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π³Π»ΠΈΠ½Ρƒ, пСсок, ΠΈΠ·Π²Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚.Π΄. -[technology-name] -alien-artifact=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Ρ… Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΎΠ² -super_charger=ЗарядноС устройство для аккумуляторных Π±Π»ΠΎΠΊΠΎΠ² элСктровоза 4 -hiend_train=ПоСзда Π½Π° ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠ΅ -platinum-ore-refining=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€ΡƒΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚ΠΈΠ½Ρ‹ -flame_car=ΠΠ²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ с ΠΎΠ³Π½Π΅ΠΌΠ΅Ρ‚ΠΎΠΌ - -[technology-description] -alien-artifact=ВСхнология, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΡ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΎΠΏΠ»Π°Π½Π΅Ρ‚Π½Ρ‹Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½ΡΠΌΡƒΡ‚Π°Ρ†ΠΈΡŽ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡ… Π²ΠΈΠ΄Ρ‹. -super_charger=Π‘ΠΎΠ»Π΅Π΅ быстрыС зарядныС устройства для аккумуляторных Π±Π»ΠΎΠΊΠΎΠ² элСктровоза. -hiend_train=ИспользованиС ΠΌΠ°Π³Π½ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡƒΡˆΠΊΠΈ позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… скоростСй. -platinum-ore-refining=ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€ΡƒΠ΄Ρ‹ ΠΏΠ»Π°Ρ‚ΠΈΠ½Ρ‹ - -[item-group-name] -transport=Вранспорт -circuit=Π›ΠΎΠ³ΠΈΠΊΠ° - -[tile-name] -concrete-brick-fix=ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΈΡ€ΠΏΠΈΡ‡Π΅ΠΌ -reinforced-concrete-brick-fix=ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΆΠ΅Π»Π΅Π·ΠΎΠ±Π΅Ρ‚ΠΎΠ½Π½Ρ‹ΠΌ ΠΊΠΈΡ€ΠΏΠΈΡ‡Π΅ΠΌ \ No newline at end of file diff --git a/zzzparanoidal_1.0.1/prototypes/recipefixes.lua b/zzzparanoidal_1.0.1/prototypes/recipefixes.lua deleted file mode 100644 index eed5e7dd..00000000 --- a/zzzparanoidal_1.0.1/prototypes/recipefixes.lua +++ /dev/null @@ -1,30 +0,0 @@ ---Π·Π°ΠΌΠ΅Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ€Ρ‹Π±Ρ‹ Π½Π° Π»ΡƒΡ‡ санты Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ мСханичСского ΠΏΠ°ΡƒΠΊΠ° -bobmods.lib.recipe.replace_ingredient("spidertron", "raw-fish", "alien-fish-3-raw") ---Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· эксплуатации бСсплатного насоса Π½Π° Π²ΠΎΠ΄Ρƒ -data.raw.recipe["ground-water-pump"].hidden = true -data.raw.recipe["ground-water-pump"].enabled = false - -for k,v in pairs(data.raw["technology"]["water-treatment"].effects) do - if v.recipe=="ground-water-pump" then - table.remove(data.raw["technology"]["water-treatment"].effects,k) - end - end - - -data.raw.recipe["bob-zinc-plate"].hidden = false -data.raw.recipe["bob-nickel-plate"].hidden = false - -data.raw.recipe["invar-alloy"].hidden = false -data.raw.recipe["brass-alloy"].hidden = false - ---ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Π³Ρ€ΠΈΠ΄Ρ‹ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ---[[ - if data.raw.recipe["advanced-logistic-science-pack"] then - if data.raw.recipe["advanced-logistic-science-pack"].ingredients then - table.insert(data.raw.recipe["advanced-logistic-science-pack"].ingredients,{type="item",name="flask",amount=1}) - elseif data.raw.recipe["advanced-logistic-science-pack"].normal.ingredients then - table.insert(data.raw.recipe["advanced-logistic-science-pack"].normal.ingredients,{type="item",name="flask",amount=1}) - table.insert(data.raw.recipe["advanced-logistic-science-pack"].expensive.ingredients,{type="item",name="flask",amount=2}) - end - end -]]-- \ No newline at end of file